diff --git a/.playwright-mcp/mainpage5.png b/.playwright-mcp/mainpage5.png
new file mode 100644
index 0000000..d654426
Binary files /dev/null and b/.playwright-mcp/mainpage5.png differ
diff --git a/.playwright-mcp/mainpage6.png b/.playwright-mcp/mainpage6.png
new file mode 100644
index 0000000..d654426
Binary files /dev/null and b/.playwright-mcp/mainpage6.png differ
diff --git a/.playwright-mcp/mainpage7.png b/.playwright-mcp/mainpage7.png
new file mode 100644
index 0000000..d654426
Binary files /dev/null and b/.playwright-mcp/mainpage7.png differ
diff --git a/.playwright-mcp/newui.png b/.playwright-mcp/newui.png
new file mode 100644
index 0000000..d654426
Binary files /dev/null and b/.playwright-mcp/newui.png differ
diff --git a/cli.child.ts b/cli.child.ts
new file mode 100644
index 0000000..20d8b5f
--- /dev/null
+++ b/cli.child.ts
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+process.env.CLI_CALL = 'true';
+import * as cliTool from './ts/index.js';
+cliTool.runCli();
diff --git a/cli.js b/cli.js
index a89c9c5..b854fb3 100644
--- a/cli.js
+++ b/cli.js
@@ -1,4 +1,4 @@
#!/usr/bin/env node
process.env.CLI_CALL = 'true';
-const cliTool = require('./dist_ts/index');
+const cliTool = await import('./dist_ts/index.js');
cliTool.runCli();
diff --git a/cli.ts.js b/cli.ts.js
index 5f38d16..505c88d 100644
--- a/cli.ts.js
+++ b/cli.ts.js
@@ -1,5 +1,5 @@
#!/usr/bin/env node
process.env.CLI_CALL = 'true';
-import '@git.zone/tsrun';
-const cliTool = await import('./ts/index.js');
-cliTool.runCli();
+
+import * as tsrun from '@git.zone/tsrun';
+tsrun.runPath('./cli.child.js', import.meta.url);
diff --git a/html/index.html b/html/index.html
new file mode 100644
index 0000000..a4d9f3a
--- /dev/null
+++ b/html/index.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+ opencdn
+
+
+
+
+
+
+
+
diff --git a/package.json b/package.json
index e05b45d..3915eff 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
- "name": "npmcdn",
+ "name": "@serve.zone/opencdn",
"version": "1.0.3",
- "description": "a cdn using npm as source",
+ "description": "A CDN that serves files directly from npm packages",
"type": "module",
"main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts",
@@ -11,16 +11,26 @@
"test": "(tstest test/)",
"start": "(node --max_old_space_size=100 ./cli.js)",
"startTs": "(node cli.ts.js)",
- "build": "(tsbuild --web)"
+ "build": "(tsbuild tsfolders --allowimplicitany && tsbundle element --production)",
+ "buildBackend": "(tsbuild --web)",
+ "bundleUI": "pnpm run build && tsx scripts/bundle-ui.ts",
+ "watch": "tswatch website"
},
"devDependencies": {
"@git.zone/tsbuild": "^4.1.0",
+ "@git.zone/tsbundle": "^2.6.3",
"@git.zone/tsrun": "^2.0.1",
"@git.zone/tstest": "^3.1.4",
+ "@git.zone/tswatch": "^2.3.13",
"@push.rocks/smartnetwork": "^4.4.0",
- "@push.rocks/smartrequest": "^5.0.1"
+ "@push.rocks/smartrequest": "^5.0.1",
+ "@types/node": "^22.10.0"
},
"dependencies": {
+ "@design.estate/dees-catalog": "^3.3.1",
+ "@design.estate/dees-domtools": "^2.3.6",
+ "@design.estate/dees-element": "^2.1.3",
+ "@design.estate/dees-wcctools": "^2.0.1",
"@losslessone_private/lole-serviceserver": "^1.0.54",
"@push.rocks/projectinfo": "^5.0.2",
"@push.rocks/qenv": "^6.1.0",
@@ -35,7 +45,6 @@
"@types/express": "^5.0.6",
"compression": "^1.8.1",
"express": "^4.22.1",
- "lit-ntml": "^4.0.2",
"prom-client": "^15.1.3"
},
"private": true,
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index cbc47bd..b333ab0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,6 +8,18 @@ importers:
.:
dependencies:
+ '@design.estate/dees-catalog':
+ specifier: ^3.3.1
+ version: 3.32.0(@tiptap/pm@2.27.1)
+ '@design.estate/dees-domtools':
+ specifier: ^2.3.6
+ version: 2.3.7
+ '@design.estate/dees-element':
+ specifier: ^2.1.3
+ version: 2.1.5
+ '@design.estate/dees-wcctools':
+ specifier: ^2.0.1
+ version: 2.0.1
'@losslessone_private/lole-serviceserver':
specifier: ^1.0.54
version: 1.0.54
@@ -50,9 +62,6 @@ importers:
express:
specifier: ^4.22.1
version: 4.22.1
- lit-ntml:
- specifier: ^4.0.2
- version: 4.0.2
prom-client:
specifier: ^15.1.3
version: 15.1.3
@@ -60,18 +69,27 @@ importers:
'@git.zone/tsbuild':
specifier: ^4.1.0
version: 4.1.0
+ '@git.zone/tsbundle':
+ specifier: ^2.6.3
+ version: 2.6.3
'@git.zone/tsrun':
specifier: ^2.0.1
version: 2.0.1
'@git.zone/tstest':
specifier: ^3.1.4
- version: 3.1.4(@aws-sdk/credential-providers@3.962.0)(socks@2.8.7)(typescript@5.9.3)
+ version: 3.1.4(@aws-sdk/credential-providers@3.962.0)(@push.rocks/smartserve@1.4.0)(socks@2.8.7)(typescript@5.9.3)
+ '@git.zone/tswatch':
+ specifier: ^2.3.13
+ version: 2.3.13(@tiptap/pm@2.27.1)
'@push.rocks/smartnetwork':
specifier: ^4.4.0
version: 4.4.0
'@push.rocks/smartrequest':
specifier: ^5.0.1
version: 5.0.1
+ '@types/node':
+ specifier: ^22.10.0
+ version: 22.19.3
packages:
@@ -87,6 +105,9 @@ packages:
'@api.global/typedserver@3.0.80':
resolution: {integrity: sha512-dcp0oXsjBL+XdFg1wUUP08uJQid5bQ0Yv3V3Y3lnI2QCbat0FU+Tsb0TZRnZ4+P150Vj/ITBqJUgDzFsF34grA==}
+ '@api.global/typedserver@7.11.1':
+ resolution: {integrity: sha512-1vQUJ2/DszDFHVkCmqqBy/qNiIP/jltFN3KxHtoNLxjbdBZYfw1Zd1Odjs6YSPalAD0p8wQ/alJblJEAewNQVg==}
+
'@api.global/typedsocket@3.1.1':
resolution: {integrity: sha512-Wkz3NlhmfdZMKqXXI2c2dMtGGmSmhdOegZiziL+9b2mqPYdc7Gd8AZRdEOKvbSoIvc9G22/5BEadIWHrfq66TA==}
peerDependencies:
@@ -95,6 +116,11 @@ packages:
'@push.rocks/smartserve':
optional: true
+ '@api.global/typedsocket@4.1.0':
+ resolution: {integrity: sha512-ttmoU5BNHmLAkAF/o+Ta8F5O4F7CUmkFo6LK7NKHQvuYJvodPMYWdhJ6yCINTF4pfCgljkMDUqoVKobm6ea4mQ==}
+ peerDependencies:
+ '@push.rocks/smartserve': '>=1.1.0'
+
'@aws-crypto/crc32@5.2.0':
resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==}
engines: {node: '>=16.0.0'}
@@ -285,12 +311,18 @@ packages:
'@borewit/text-codec@0.2.1':
resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==}
+ '@cfworker/json-schema@4.1.1':
+ resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==}
+
'@cloudflare/workers-types@4.20260103.0':
resolution: {integrity: sha512-jANmoGpJcXARnwlkvrQOeWyjYD1quTfHcs+++Z544XRHOSfLc4XSlts7snIhbiIGgA5bo66zDhraF+9lKUr2hw==}
'@configvault.io/interfaces@1.0.17':
resolution: {integrity: sha512-bEcCUR2VBDJsTin8HQh8Uw/mlYl2v8A3jMIaQ+MTB9Hrqd6CZL2dL7iJdWyFl/3EIX+LDxWFR+Oq7liIq7w+1Q==}
+ '@design.estate/dees-catalog@3.32.0':
+ resolution: {integrity: sha512-JEjtlw6Nr3qSlm3Gj/iQFEAUny0QqeW3hhZWJHObNqZWscGFWqnWwqbdv1x+zPy7QMHBIHlQM0Ejkcw9/MO2mw==}
+
'@design.estate/dees-comms@1.0.30':
resolution: {integrity: sha512-KchMlklJfKAjQiJiR0xmofXtQ27VgZtBIxcMwPE9d+h3jJRv+lPZxzBQVOM0eyM0uS44S5vJMZ11IeV4uDXSHg==}
@@ -300,6 +332,9 @@ packages:
'@design.estate/dees-element@2.1.5':
resolution: {integrity: sha512-czUOFvBiUKi34I+/keDRDc71fuORZS0NfbSuD2jJ4D1ODiTPjaZ6A6SkdQ2QqCEzVsx73XF99Pu8pxPnaOLnHg==}
+ '@design.estate/dees-wcctools@2.0.1':
+ resolution: {integrity: sha512-1DaQtvoMmD+uH9cjSrL4szk7h0nbBlT/ZBmz+qvWCOqzZXE3wPOAdgASZ73NeQlehLx4KGbfJTCG15DSB0W3LQ==}
+
'@designestate/dees-element@2.0.23':
resolution: {integrity: sha512-TcDp9tAk7n65LwEX1oyMvG+g6g9+dWlOHea7G+k+HGNBAoGnSDrHhe9M/zAmxNVnQ08O/opgxiIgdr3viouTWA==}
deprecated: This package has been deprecated in favour of the new package at @design.estate/dees-element
@@ -469,6 +504,26 @@ packages:
cpu: [x64]
os: [win32]
+ '@fortawesome/fontawesome-common-types@7.1.0':
+ resolution: {integrity: sha512-l/BQM7fYntsCI//du+6sEnHOP6a74UixFyOYUyz2DLMXKx+6DEhfR3F2NYGE45XH1JJuIamacb4IZs9S0ZOWLA==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/fontawesome-svg-core@7.1.0':
+ resolution: {integrity: sha512-fNxRUk1KhjSbnbuBxlWSnBLKLBNun52ZBTcs22H/xEEzM6Ap81ZFTQ4bZBxVQGQgVY0xugKGoRcCbaKjLQ3XZA==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/free-brands-svg-icons@7.1.0':
+ resolution: {integrity: sha512-9byUd9bgNfthsZAjBl6GxOu1VPHgBuRUP9juI7ZoM98h8xNPTCTagfwUFyYscdZq4Hr7gD1azMfM9s5tIWKZZA==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/free-regular-svg-icons@7.1.0':
+ resolution: {integrity: sha512-0e2fdEyB4AR+e6kU4yxwA/MonnYcw/CsMEP9lH82ORFi9svA6/RhDyhxIv5mlJaldmaHLLYVTb+3iEr+PDSZuQ==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/free-solid-svg-icons@7.1.0':
+ resolution: {integrity: sha512-Udu3K7SzAo9N013qt7qmm22/wo2hADdheXtBfxFTecp+ogsc0caQNRKEb7pkvvagUGOpG9wJC1ViH6WXs8oXIA==}
+ engines: {node: '>=6'}
+
'@git.zone/tsbuild@4.1.0':
resolution: {integrity: sha512-IGNUlbQuUvblPFNQLoldS8d81mzHgUelZ8DGP31XxVkPledwEFNOmJXugcwYTqqriSq9U0nchBtKbX8ogQlkoA==}
hasBin: true
@@ -489,6 +544,10 @@ packages:
resolution: {integrity: sha512-S7kubbb0yLYOh/QAzFsjG6a20lZiyNKo4pt0yK1yvd9I7X8Rw6/mCT/BicLkan7G7Nk7scUfxaK9+aFsHmdQdw==}
hasBin: true
+ '@git.zone/tswatch@2.3.13':
+ resolution: {integrity: sha512-43995OlWl8UzCA+cX3ehYba/ksm6CqHbMljHKjosrDRpx8EU+LY4bWTc8JT/Ldgwsw3iW9vur2bBqpgMmdeJJw==}
+ hasBin: true
+
'@happy-dom/global-registrator@15.11.7':
resolution: {integrity: sha512-mfOoUlIw8VBiJYPrl5RZfMzkXC/z7gbSpi2ecycrj/gRWLq2CMV+Q+0G+JPjeOmuNFgg0skEIzkVFzVYFP6URw==}
engines: {node: '>=18.0.0'}
@@ -550,6 +609,76 @@ packages:
'@mongodb-js/saslprep@1.4.4':
resolution: {integrity: sha512-p7X/ytJDIdwUfFL/CLOhKgdfJe1Fa8uw9seJYvdOmnP9JBWGWHW69HkOixXS6Wy9yvGf1MbhcS6lVmrhy4jm2g==}
+ '@napi-rs/canvas-android-arm64@0.1.88':
+ resolution: {integrity: sha512-KEaClPnZuVxJ8smUWjV1wWFkByBO/D+vy4lN+Dm5DFH514oqwukxKGeck9xcKJhaWJGjfruGmYGiwRe//+/zQQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+
+ '@napi-rs/canvas-darwin-arm64@0.1.88':
+ resolution: {integrity: sha512-Xgywz0dDxOKSgx3eZnK85WgGMmGrQEW7ZLA/E7raZdlEE+xXCozobgqz2ZvYigpB6DJFYkqnwHjqCOTSDGlFdg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@napi-rs/canvas-darwin-x64@0.1.88':
+ resolution: {integrity: sha512-Yz4wSCIQOUgNucgk+8NFtQxQxZV5NO8VKRl9ePKE6XoNyNVC8JDqtvhh3b3TPqKK8W5p2EQpAr1rjjm0mfBxdg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@napi-rs/canvas-linux-arm-gnueabihf@0.1.88':
+ resolution: {integrity: sha512-9gQM2SlTo76hYhxHi2XxWTAqpTOb+JtxMPEIr+H5nAhHhyEtNmTSDRtz93SP7mGd2G3Ojf2oF5tP9OdgtgXyKg==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@napi-rs/canvas-linux-arm64-gnu@0.1.88':
+ resolution: {integrity: sha512-7qgaOBMXuVRk9Fzztzr3BchQKXDxGbY+nwsovD3I/Sx81e+sX0ReEDYHTItNb0Je4NHbAl7D0MKyd4SvUc04sg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@napi-rs/canvas-linux-arm64-musl@0.1.88':
+ resolution: {integrity: sha512-kYyNrUsHLkoGHBc77u4Unh067GrfiCUMbGHC2+OTxbeWfZkPt2o32UOQkhnSswKd9Fko/wSqqGkY956bIUzruA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@napi-rs/canvas-linux-riscv64-gnu@0.1.88':
+ resolution: {integrity: sha512-HVuH7QgzB0yavYdNZDRyAsn/ejoXB0hn8twwFnOqUbCCdkV+REna7RXjSR7+PdfW0qMQ2YYWsLvVBT5iL/mGpw==}
+ engines: {node: '>= 10'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@napi-rs/canvas-linux-x64-gnu@0.1.88':
+ resolution: {integrity: sha512-hvcvKIcPEQrvvJtJnwD35B3qk6umFJ8dFIr8bSymfrSMem0EQsfn1ztys8ETIFndTwdNWJKWluvxztA41ivsEw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@napi-rs/canvas-linux-x64-musl@0.1.88':
+ resolution: {integrity: sha512-eSMpGYY2xnZSQ6UxYJ6plDboxq4KeJ4zT5HaVkUnbObNN6DlbJe0Mclh3wifAmquXfrlgTZt6zhHsUgz++AK6g==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@napi-rs/canvas-win32-arm64-msvc@0.1.88':
+ resolution: {integrity: sha512-qcIFfEgHrchyYqRrxsCeTQgpJZ/GqHiqPcU/Fvw/ARVlQeDX1VyFH+X+0gCR2tca6UJrq96vnW+5o7buCq+erA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@napi-rs/canvas-win32-x64-msvc@0.1.88':
+ resolution: {integrity: sha512-ROVqbfS4QyZxYkqmaIBBpbz/BQvAR+05FXM5PAtTYVc0uyY8Y4BHJSMdGAaMf6TdIVRsQsiq+FG/dH9XhvWCFQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@napi-rs/canvas@0.1.88':
+ resolution: {integrity: sha512-/p08f93LEbsL5mDZFQ3DBxcPv/I4QG9EDYRRq1WNlCOXVfAHBTHMSVMwxlqG/AtnSfUr9+vgfN7MKiyDo0+Weg==}
+ engines: {node: '>= 10'}
+
'@napi-rs/wasm-runtime@1.0.7':
resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
@@ -733,6 +862,9 @@ packages:
'@push.rocks/smarthash@3.2.6':
resolution: {integrity: sha512-Mq/WNX0Tjjes3X1gHd/ZBwOOKSrAG/Z3Xoc0OcCm3P20WKpniihkMpsnlE7wGjvpHLi/ZRe/XkB3KC3d5r9X4g==}
+ '@push.rocks/smarti18n@1.0.4':
+ resolution: {integrity: sha512-bHIi9Iuzp2cbux9q79ZK5jOQYPsYJ9zDDS4p/xEPQH31gr0mcFRosLSQb1kvDQDVmUhI0ADlQMqr2ui9zEXQHA==}
+
'@push.rocks/smartjson@5.2.0':
resolution: {integrity: sha512-710e8UwovRfPgUtaBHcd6unaODUjV5fjxtGcGCqtaTcmvOV6VpasdVfT66xMDzQmWH2E9ZfHDJeso9HdDQzNQA==}
@@ -817,6 +949,9 @@ packages:
'@push.rocks/smarts3@3.0.3':
resolution: {integrity: sha512-Y9nXMwurthJ9Z7yi0RwjhPFUC58aY8Mhia8kFo6Xj1tBM4LE8Oxg/ydejF7otHqQGr3QyqV5C4YrDEG17rUuzg==}
+ '@push.rocks/smartserve@1.4.0':
+ resolution: {integrity: sha512-cEoXZQSBX3pOv9AyhxRPkrMAWzs2XQhTBmW95BFtTSNzZdji0XgqUu92p7iuF+NVuTFX1QZ8+dbCClLCoRRW7g==}
+
'@push.rocks/smartshell@3.3.0':
resolution: {integrity: sha512-m0w618H6YBs+vXGz1CgS4nPi5CUAnqRtckcS9/koGwfcIx1IpjqmiP47BoCTbdgcv0IPUxQVBG1IXTHPuZ8Z5g==}
@@ -853,6 +988,10 @@ packages:
'@push.rocks/smartversion@3.0.5':
resolution: {integrity: sha512-8MZSo1yqyaKxKq0Q5N188l4un++9GFWVbhCAX5mXJwewZHn97ujffTeL+eOQYpWFTEpUhaq1QhL4NhqObBCt1Q==}
+ '@push.rocks/smartwatch@6.3.0':
+ resolution: {integrity: sha512-TeZ1PGBoBMpC4/CK8StIj5InEiFfKp7xWJSm3aYMjB/uaoeRP0vXqv1ORIC/TKYGJuEDuAXUsit8tZVjn0qT1Q==}
+ engines: {node: '>=20.0.0'}
+
'@push.rocks/smartxml@2.0.0':
resolution: {integrity: sha512-1d06zYJX4Zt8s5w5qFOUg2LAEz9ykrh9d6CQPK4WAgOBIefb1xzVEWHc7yoxicc2OkzNgC3IBCEg3s6BncZKWw==}
@@ -916,6 +1055,9 @@ packages:
resolution: {integrity: sha512-TxHSar7Cj29E+GOcIj4DeZKWCNVzHKdqnrBRqcBqLqmeYZvzFosLXpFKoaCJDq7MSxuPoCvu5woSdp9YmPXyog==}
deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartstring
+ '@remirror/core-constants@3.0.0':
+ resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==}
+
'@rolldown/binding-android-arm64@1.0.0-beta.52':
resolution: {integrity: sha512-MBGIgysimZPqTDcLXI+i9VveijkP5C3EAncEogXhqfax6YXj1Tr2LY3DVuEOMIjWfMPMhtQSPup4fSTAmgjqIw==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -1292,6 +1434,31 @@ packages:
'@socket.io/component-emitter@3.1.2':
resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
+ '@svgdotjs/svg.draggable.js@3.0.6':
+ resolution: {integrity: sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==}
+ peerDependencies:
+ '@svgdotjs/svg.js': ^3.2.4
+
+ '@svgdotjs/svg.filter.js@3.0.9':
+ resolution: {integrity: sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==}
+ engines: {node: '>= 0.8.0'}
+
+ '@svgdotjs/svg.js@3.2.5':
+ resolution: {integrity: sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ==}
+
+ '@svgdotjs/svg.resize.js@2.0.5':
+ resolution: {integrity: sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==}
+ engines: {node: '>= 14.18'}
+ peerDependencies:
+ '@svgdotjs/svg.js': ^3.2.4
+ '@svgdotjs/svg.select.js': ^4.0.1
+
+ '@svgdotjs/svg.select.js@4.0.3':
+ resolution: {integrity: sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==}
+ engines: {node: '>= 14.18'}
+ peerDependencies:
+ '@svgdotjs/svg.js': ^3.2.4
+
'@szmarczak/http-timer@5.0.1':
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
engines: {node: '>=14.16'}
@@ -1313,6 +1480,141 @@ packages:
vue:
optional: true
+ '@tempfix/webcontainer__api@1.6.1':
+ resolution: {integrity: sha512-Hgn3cwy0vPzjrVBqeVnY0jNZLaOCW7d+dxBe7Jv9YGHAjJ8udUMS+KbTywSv5paAfld3A/RN/iolmMzOwZxLTA==}
+
+ '@tiptap/core@2.27.1':
+ resolution: {integrity: sha512-nkerkl8syHj44ZzAB7oA2GPmmZINKBKCa79FuNvmGJrJ4qyZwlkDzszud23YteFZEytbc87kVd/fP76ROS6sLg==}
+ peerDependencies:
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-blockquote@2.27.1':
+ resolution: {integrity: sha512-QrUX3muElDrNjKM3nqCSAtm3H3pT33c6ON8kwRiQboOAjT/9D57Cs7XEVY7r6rMaJPeKztrRUrNVF9w/w/6B0A==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-bold@2.27.1':
+ resolution: {integrity: sha512-g4l4p892x/r7mhea8syp3fNYODxsDrimgouQ+q4DKXIgQmm5+uNhyuEPexP3I8TFNXqQ4DlMNFoM9yCqk97etQ==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-bullet-list@2.27.1':
+ resolution: {integrity: sha512-5FmnfXkJ76wN4EbJNzBhAlmQxho8yEMIJLchTGmXdsD/n/tsyVVtewnQYaIOj/Z7naaGySTGDmjVtLgTuQ+Sxw==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-code-block@2.27.1':
+ resolution: {integrity: sha512-wCI5VIOfSAdkenCWFvh4m8FFCJ51EOK+CUmOC/PWUjyo2Dgn8QC8HMi015q8XF7886T0KvYVVoqxmxJSUDAYNg==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-code@2.27.1':
+ resolution: {integrity: sha512-i65wUGJevzBTIIUBHBc1ggVa27bgemvGl/tY1/89fEuS/0Xmre+OQjw8rCtSLevoHSiYYLgLRlvjtUSUhE4kgg==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-document@2.27.1':
+ resolution: {integrity: sha512-NtJzJY7Q/6XWjpOm5OXKrnEaofrcc1XOTYlo/SaTwl8k2bZo918Vl0IDBWhPVDsUN7kx767uHwbtuQZ+9I82hA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-dropcursor@2.27.1':
+ resolution: {integrity: sha512-3MBQRGHHZ0by3OT0CWbLKS7J3PH9PpobrXjmIR7kr0nde7+bHqxXiVNuuIf501oKU9rnEUSedipSHkLYGkmfsA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-gapcursor@2.27.1':
+ resolution: {integrity: sha512-A9e1jr+jGhDWzNSXtIO6PYVYhf5j/udjbZwMja+wCE/3KvZU9V3IrnGKz1xNW+2Q2BDOe1QO7j5uVL9ElR6nTA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-hard-break@2.27.1':
+ resolution: {integrity: sha512-W4hHa4Io6QCTwpyTlN6UAvqMIQ7t56kIUByZhyY9EWrg/+JpbfpxE1kXFLPB4ZGgwBknFOw+e4bJ1j3oAbTJFw==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-heading@2.27.1':
+ resolution: {integrity: sha512-6xoC7igZlW1EmnQ5WVH9IL7P1nCQb3bBUaIDLvk7LbweEogcTUECI4Xg1vxMOVmj9tlDe1I4BsgfcKpB5KEsZw==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-history@2.27.1':
+ resolution: {integrity: sha512-K8PHC9gegSAt0wzSlsd4aUpoEyIJYOmVVeyniHr1P1mIblW1KYEDbRGbDlrLALTyUEfMcBhdIm8zrB9X2Nihvg==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-horizontal-rule@2.27.1':
+ resolution: {integrity: sha512-WxXWGEEsqDmGIF2o9av+3r9Qje4CKrqrpeQY6aRO5bxvWX9AabQCfasepayBok6uwtvNzh3Xpsn9zbbSk09dNA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-italic@2.27.1':
+ resolution: {integrity: sha512-rcm0GyniWW0UhcNI9+1eIK64GqWQLyIIrWGINslvqSUoBc+WkfocLvv4CMpRkzKlfsAxwVIBuH2eLxHKDtAREA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-link@2.27.1':
+ resolution: {integrity: sha512-cCwWPZsnVh9MXnGOqSIRXPPuUixRDK8eMN2TvqwbxUBb1TU7b/HtNvfMU4tAOqAuMRJ0aJkFuf3eB0Gi8LVb1g==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-list-item@2.27.1':
+ resolution: {integrity: sha512-dtsxvtzxfwOJP6dKGf0vb2MJAoDF2NxoiWzpq0XTvo7NGGYUHfuHjX07Zp0dYqb4seaDXjwsi5BIQUOp3+WMFQ==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-ordered-list@2.27.1':
+ resolution: {integrity: sha512-U1/sWxc2TciozQsZjH35temyidYUjvroHj3PUPzPyh19w2fwKh1NSbFybWuoYs6jS3XnMSwnM2vF52tOwvfEmA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-paragraph@2.27.1':
+ resolution: {integrity: sha512-R3QdrHcUdFAsdsn2UAIvhY0yWyHjqGyP/Rv8RRdN0OyFiTKtwTPqreKMHKJOflgX4sMJl/OpHTpNG1Kaf7Lo2A==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-strike@2.27.1':
+ resolution: {integrity: sha512-S9I//K8KPgfFTC5I5lorClzXk0g4lrAv9y5qHzHO5EOWt7AFl0YTg2oN8NKSIBK4bHRnPIrjJJKv+dDFnUp5jQ==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-text-align@2.27.1':
+ resolution: {integrity: sha512-D7dLPk7y5mDn9ZNANQ4K2gCq4vy+Emm5AdeWOGzNeqJsYrBotiQYXd9rb1QYjdup2kzAoKduMTUXV92ujo5cEg==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-text-style@2.27.1':
+ resolution: {integrity: sha512-NagQ9qLk0Ril83gfrk+C65SvTqPjL3WVnLF2arsEVnCrxcx3uDOvdJW67f/K5HEwEHsoqJ4Zq9Irco/koXrOXA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-text@2.27.1':
+ resolution: {integrity: sha512-a4GCT+GZ9tUwl82F4CEum9/+WsuW0/De9Be/NqrMmi7eNfAwbUTbLCTFU0gEvv25WMHCoUzaeNk/qGmzeVPJ1Q==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-typography@2.27.1':
+ resolution: {integrity: sha512-jAZU5IuWH9CtZlolQ1gRhV+bT75s19SXjadQwkk18gMMiapcaIVVTxUDWY6ycv9ge4cjRoaP3lqBviW3cGqhOA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-underline@2.27.1':
+ resolution: {integrity: sha512-fPTmfJFAQWg1O/os1pYSPVdtvly6eW/w5sDofG7pre+bdQUN+8s1cZYelSuj/ltNVioRaB2Ws7tvNgnHL0aAJQ==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/pm@2.27.1':
+ resolution: {integrity: sha512-ijKo3+kIjALthYsnBmkRXAuw2Tswd9gd7BUR5OMfIcjGp8v576vKxOxrRfuYiUM78GPt//P0sVc1WV82H5N0PQ==}
+
+ '@tiptap/starter-kit@2.27.1':
+ resolution: {integrity: sha512-uQQlP0Nmn9eq19qm8YoOeloEfmcGbPpB1cujq54Q6nPgxaBozR7rE7tXbFTinxRW2+Hr7XyNWhpjB7DMNkdU2Q==}
+
'@tokenizer/inflate@0.4.1':
resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==}
engines: {node: '>=18'}
@@ -1398,9 +1700,18 @@ packages:
'@types/jsonfile@6.1.4':
resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+ '@types/linkify-it@5.0.0':
+ resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
+
+ '@types/markdown-it@14.1.2':
+ resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
+
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+ '@types/mdurl@2.0.0':
+ resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
+
'@types/mime-types@2.1.4':
resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==}
@@ -1413,8 +1724,8 @@ packages:
'@types/node-forge@1.3.14':
resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==}
- '@types/node@25.0.3':
- resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==}
+ '@types/node@22.19.3':
+ resolution: {integrity: sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==}
'@types/ping@0.4.4':
resolution: {integrity: sha512-ifvo6w2f5eJYlXm+HiVx67iJe8WZp87sfa683nlqED5Vnt9Z93onkokNoWqOG21EaE8fMxyKPobE+mkPEyxsdw==}
@@ -1482,6 +1793,9 @@ packages:
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+ '@yr/monotone-cubic-spline@1.0.3':
+ resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==}
+
accepts@1.3.8:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
@@ -1522,6 +1836,9 @@ packages:
resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
+ apexcharts@5.3.6:
+ resolution: {integrity: sha512-sVEPw+J0Gp0IHQabKu8cfdsxlfME0e36Wid7RIaPclGM2OUt+O7O4+6mfAmTUYhy5bDk8cNHzEhPfVtLCIXEJA==}
+
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
@@ -1798,6 +2115,9 @@ packages:
typescript:
optional: true
+ crelt@1.0.6:
+ resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
+
croner@9.1.0:
resolution: {integrity: sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==}
engines: {node: '>=18.0'}
@@ -1909,6 +2229,9 @@ packages:
domexception@1.0.1:
resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==}
+ dompurify@3.2.7:
+ resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==}
+
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@@ -1950,10 +2273,6 @@ packages:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
- entities@6.0.1:
- resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
- engines: {node: '>=0.12'}
-
env-paths@2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
@@ -1989,6 +2308,10 @@ packages:
escape-html@1.0.3:
resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=}
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
@@ -2268,6 +2591,10 @@ packages:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
+ highlight.js@11.11.1:
+ resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
+ engines: {node: '>=12.0.0'}
+
hmac-drbg@1.0.1:
resolution: {integrity: sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=}
@@ -2301,6 +2628,9 @@ packages:
humanize-ms@1.2.1:
resolution: {integrity: sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=}
+ ibantools@4.5.1:
+ resolution: {integrity: sha512-DfKQpLlFq9yEUIEnFuCJzss3XavD7iHZTU5PyqXiAJ+rmaMp+NFP3hboumHKuK8nZjuOJg93WemTzcQ5b9jOZA==}
+
iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -2437,6 +2767,12 @@ packages:
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+ linkify-it@5.0.0:
+ resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
+
+ linkifyjs@4.3.2:
+ resolution: {integrity: sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==}
+
lit-element@3.3.3:
resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==}
@@ -2449,10 +2785,6 @@ packages:
lit-html@3.3.2:
resolution: {integrity: sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==}
- lit-ntml@4.0.2:
- resolution: {integrity: sha512-j2Vs7grCdDDzBecAD/Uk2A6ORE8VFJ0Y3S8NA5Rs+kXH+otcUB1/OIlFIHCn3e9nQ+WDOhU60jUfIIAfqfvTKQ==}
- engines: {node: '>= 16.x', npm: '>= 8.x'}
-
lit@2.8.0:
resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==}
@@ -2523,6 +2855,9 @@ packages:
resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
engines: {node: '>=12'}
+ lucide@0.562.0:
+ resolution: {integrity: sha512-k1Fb8ZMnRQovWRlea7Jr0b9UKA29IM7/cu79+mJrhVohvA2YC/Ti3Sk+G+h/SIu3IlrKT4RAbWMHUBBQd1O6XA==}
+
make-dir@3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
engines: {node: '>=8'}
@@ -2533,9 +2868,18 @@ packages:
make-error@1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+ markdown-it@14.1.0:
+ resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
+ hasBin: true
+
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
+ marked@14.0.0:
+ resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==}
+ engines: {node: '>= 18'}
+ hasBin: true
+
matcher@5.0.0:
resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -2586,6 +2930,9 @@ packages:
mdast-util-to-string@4.0.0:
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+ mdurl@2.0.0:
+ resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
+
media-typer@0.3.0:
resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
engines: {node: '>= 0.6'}
@@ -2756,6 +3103,9 @@ packages:
mitt@3.0.1:
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+ monaco-editor@0.55.1:
+ resolution: {integrity: sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==}
+
mongodb-connection-string-url@3.0.2:
resolution: {integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==}
@@ -2883,6 +3233,9 @@ packages:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
+ orderedmap@2.1.1:
+ resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==}
+
p-cancelable@3.0.0:
resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
engines: {node: '>=12.20'}
@@ -2944,9 +3297,6 @@ packages:
resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
engines: {node: '>=18'}
- parse5@7.3.0:
- resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
-
parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
@@ -2986,6 +3336,10 @@ packages:
hasBin: true
bundledDependencies: []
+ pdfjs-dist@4.10.38:
+ resolution: {integrity: sha512-/Y3fcFrXEAsMjJXeL9J8+ZG9U01LbuWaYypvDW2ycW1jL269L3js3DVBjDJ0Up9Np1uqDXsDrRihHANhZOlwdQ==}
+ engines: {node: '>=20'}
+
peek-readable@5.4.2:
resolution: {integrity: sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==}
engines: {node: '>=14.16'}
@@ -3026,6 +3380,64 @@ packages:
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
+ prosemirror-changeset@2.3.1:
+ resolution: {integrity: sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==}
+
+ prosemirror-collab@1.3.1:
+ resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==}
+
+ prosemirror-commands@1.7.1:
+ resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==}
+
+ prosemirror-dropcursor@1.8.2:
+ resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==}
+
+ prosemirror-gapcursor@1.4.0:
+ resolution: {integrity: sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==}
+
+ prosemirror-history@1.5.0:
+ resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==}
+
+ prosemirror-inputrules@1.5.1:
+ resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==}
+
+ prosemirror-keymap@1.2.3:
+ resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==}
+
+ prosemirror-markdown@1.13.2:
+ resolution: {integrity: sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==}
+
+ prosemirror-menu@1.2.5:
+ resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==}
+
+ prosemirror-model@1.25.4:
+ resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==}
+
+ prosemirror-schema-basic@1.2.4:
+ resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==}
+
+ prosemirror-schema-list@1.5.1:
+ resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==}
+
+ prosemirror-state@1.4.4:
+ resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==}
+
+ prosemirror-tables@1.8.5:
+ resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==}
+
+ prosemirror-trailing-node@3.0.0:
+ resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==}
+ peerDependencies:
+ prosemirror-model: ^1.22.1
+ prosemirror-state: ^1.4.2
+ prosemirror-view: ^1.33.8
+
+ prosemirror-transform@1.10.5:
+ resolution: {integrity: sha512-RPDQCxIDhIBb1o36xxwsaeAvivO8VLJcgBtzmOwQ64bMtsVFh5SSuJ6dWSxO1UsHTiTXPCgQm3PDJt7p6IOLbw==}
+
+ prosemirror-view@1.41.4:
+ resolution: {integrity: sha512-WkKgnyjNncri03Gjaz3IFWvCAE94XoiEgvtr0/r2Xw7R8/IjK3sKLSiDoCHWcsXSAinVaKlGRZDvMCsF1kbzjA==}
+
proto-list@1.2.4:
resolution: {integrity: sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=}
@@ -3043,6 +3455,10 @@ packages:
pump@3.0.3:
resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
+ punycode.js@2.3.1:
+ resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
+ engines: {node: '>=6'}
+
punycode@1.4.1:
resolution: {integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4=}
@@ -3169,6 +3585,9 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
+ rope-sequence@1.3.4:
+ resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
+
router@2.2.0:
resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
engines: {node: '>= 18'}
@@ -3461,6 +3880,9 @@ packages:
resolution: {integrity: sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA==}
engines: {node: '>=0.1.14'}
+ uc.micro@2.1.0:
+ resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
+
uglify-js@3.19.3:
resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
engines: {node: '>=0.8.0'}
@@ -3470,8 +3892,8 @@ packages:
resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
engines: {node: '>=18'}
- undici-types@7.16.0:
- resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
unified@11.0.5:
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
@@ -3530,6 +3952,9 @@ packages:
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+ w3c-keyname@2.2.8:
+ resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
+
webdriver-bidi-protocol@0.3.10:
resolution: {integrity: sha512-5LAE43jAVLOhB/QqX4bwSiv0Hg1HBfMmOuwBSXHdvg4GMGu9Y0lIq7p4R/yySu6w74WmaR4GM4H9t2IwLW7hgw==}
@@ -3615,6 +4040,14 @@ packages:
resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==}
engines: {node: '>=0.4.0'}
+ xterm-addon-fit@0.8.0:
+ resolution: {integrity: sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw==}
+ peerDependencies:
+ xterm: ^5.0.0
+
+ xterm@5.3.0:
+ resolution: {integrity: sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==}
+
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -3667,11 +4100,11 @@ snapshots:
'@push.rocks/webrequest': 3.0.37
'@push.rocks/webstream': 1.0.10
- '@api.global/typedserver@3.0.80':
+ '@api.global/typedserver@3.0.80(@push.rocks/smartserve@1.4.0)':
dependencies:
'@api.global/typedrequest': 3.2.5
'@api.global/typedrequest-interfaces': 3.0.19
- '@api.global/typedsocket': 3.1.1
+ '@api.global/typedsocket': 3.1.1(@push.rocks/smartserve@1.4.0)
'@cloudflare/workers-types': 4.20260103.0
'@design.estate/dees-comms': 1.0.30
'@push.rocks/lik': 6.2.2
@@ -3715,7 +4148,53 @@ snapshots:
- utf-8-validate
- vue
- '@api.global/typedsocket@3.1.1':
+ '@api.global/typedserver@7.11.1(@tiptap/pm@2.27.1)':
+ dependencies:
+ '@api.global/typedrequest': 3.2.5
+ '@api.global/typedrequest-interfaces': 3.0.19
+ '@api.global/typedsocket': 4.1.0(@push.rocks/smartserve@1.4.0)
+ '@cloudflare/workers-types': 4.20260103.0
+ '@design.estate/dees-catalog': 3.32.0(@tiptap/pm@2.27.1)
+ '@design.estate/dees-comms': 1.0.30
+ '@push.rocks/lik': 6.2.2
+ '@push.rocks/smartdelay': 3.0.5
+ '@push.rocks/smartenv': 6.0.0
+ '@push.rocks/smartfeed': 1.4.0
+ '@push.rocks/smartfile': 13.1.2
+ '@push.rocks/smartfs': 1.3.1
+ '@push.rocks/smartjson': 5.2.0
+ '@push.rocks/smartlog': 3.1.10
+ '@push.rocks/smartlog-destination-devtools': 1.0.12
+ '@push.rocks/smartlog-interfaces': 3.0.2
+ '@push.rocks/smartmanifest': 2.0.2
+ '@push.rocks/smartmatch': 2.0.0
+ '@push.rocks/smartmime': 2.0.4
+ '@push.rocks/smartntml': 2.0.8
+ '@push.rocks/smartopen': 2.0.0
+ '@push.rocks/smartpath': 6.0.0
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smartrequest': 5.0.1
+ '@push.rocks/smartrx': 3.0.10
+ '@push.rocks/smartserve': 1.4.0
+ '@push.rocks/smartsitemap': 2.0.4
+ '@push.rocks/smartstream': 3.2.5
+ '@push.rocks/smarttime': 4.1.1
+ '@push.rocks/smartwatch': 6.3.0
+ '@push.rocks/taskbuffer': 3.5.0
+ '@push.rocks/webrequest': 4.0.1
+ '@push.rocks/webstore': 2.0.20
+ '@tsclass/tsclass': 9.3.0
+ lit: 3.3.2
+ transitivePeerDependencies:
+ - '@nuxt/kit'
+ - '@tiptap/pm'
+ - bufferutil
+ - react
+ - supports-color
+ - utf-8-validate
+ - vue
+
+ '@api.global/typedsocket@3.1.1(@push.rocks/smartserve@1.4.0)':
dependencies:
'@api.global/typedrequest': 3.2.5
'@api.global/typedrequest-interfaces': 3.0.19
@@ -3725,6 +4204,8 @@ snapshots:
'@push.rocks/smartsocket': 2.1.0
'@push.rocks/smartstring': 4.1.0
'@push.rocks/smarturl': 3.1.0
+ optionalDependencies:
+ '@push.rocks/smartserve': 1.4.0
transitivePeerDependencies:
- '@nuxt/kit'
- bufferutil
@@ -3733,6 +4214,19 @@ snapshots:
- utf-8-validate
- vue
+ '@api.global/typedsocket@4.1.0(@push.rocks/smartserve@1.4.0)':
+ dependencies:
+ '@api.global/typedrequest': 3.2.5
+ '@api.global/typedrequest-interfaces': 3.0.19
+ '@push.rocks/isohash': 2.0.1
+ '@push.rocks/smartdelay': 3.0.5
+ '@push.rocks/smartjson': 5.2.0
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smartrx': 3.0.10
+ '@push.rocks/smartserve': 1.4.0
+ '@push.rocks/smartstring': 4.1.0
+ '@push.rocks/smarturl': 3.1.0
+
'@aws-crypto/crc32@5.2.0':
dependencies:
'@aws-crypto/util': 5.2.0
@@ -4312,12 +4806,48 @@ snapshots:
'@borewit/text-codec@0.2.1': {}
+ '@cfworker/json-schema@4.1.1': {}
+
'@cloudflare/workers-types@4.20260103.0': {}
'@configvault.io/interfaces@1.0.17':
dependencies:
'@api.global/typedrequest-interfaces': 3.0.19
+ '@design.estate/dees-catalog@3.32.0(@tiptap/pm@2.27.1)':
+ dependencies:
+ '@design.estate/dees-domtools': 2.3.7
+ '@design.estate/dees-element': 2.1.5
+ '@fortawesome/fontawesome-svg-core': 7.1.0
+ '@fortawesome/free-brands-svg-icons': 7.1.0
+ '@fortawesome/free-regular-svg-icons': 7.1.0
+ '@fortawesome/free-solid-svg-icons': 7.1.0
+ '@push.rocks/smarti18n': 1.0.4
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smartstring': 4.1.0
+ '@tempfix/webcontainer__api': 1.6.1
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+ '@tiptap/extension-link': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
+ '@tiptap/extension-text-align': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-typography': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-underline': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/starter-kit': 2.27.1
+ '@tsclass/tsclass': 9.3.0
+ apexcharts: 5.3.6
+ highlight.js: 11.11.1
+ ibantools: 4.5.1
+ lucide: 0.562.0
+ monaco-editor: 0.55.1
+ pdfjs-dist: 4.10.38
+ xterm: 5.3.0
+ xterm-addon-fit: 0.8.0(xterm@5.3.0)
+ transitivePeerDependencies:
+ - '@nuxt/kit'
+ - '@tiptap/pm'
+ - react
+ - supports-color
+ - vue
+
'@design.estate/dees-comms@1.0.30':
dependencies:
'@api.global/typedrequest': 3.2.5
@@ -4363,6 +4893,18 @@ snapshots:
- supports-color
- vue
+ '@design.estate/dees-wcctools@2.0.1':
+ dependencies:
+ '@design.estate/dees-domtools': 2.3.7
+ '@design.estate/dees-element': 2.1.5
+ '@push.rocks/smartdelay': 3.0.5
+ lit: 3.3.2
+ transitivePeerDependencies:
+ - '@nuxt/kit'
+ - react
+ - supports-color
+ - vue
+
'@designestate/dees-element@2.0.23':
dependencies:
'@design.estate/dees-domtools': 2.3.7
@@ -4469,6 +5011,24 @@ snapshots:
'@esbuild/win32-x64@0.27.2':
optional: true
+ '@fortawesome/fontawesome-common-types@7.1.0': {}
+
+ '@fortawesome/fontawesome-svg-core@7.1.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 7.1.0
+
+ '@fortawesome/free-brands-svg-icons@7.1.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 7.1.0
+
+ '@fortawesome/free-regular-svg-icons@7.1.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 7.1.0
+
+ '@fortawesome/free-solid-svg-icons@7.1.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 7.1.0
+
'@git.zone/tsbuild@4.1.0':
dependencies:
'@git.zone/tspublish': 1.11.0
@@ -4539,9 +5099,9 @@ snapshots:
'@push.rocks/smartshell': 3.3.0
tsx: 4.21.0
- '@git.zone/tstest@3.1.4(@aws-sdk/credential-providers@3.962.0)(socks@2.8.7)(typescript@5.9.3)':
+ '@git.zone/tstest@3.1.4(@aws-sdk/credential-providers@3.962.0)(@push.rocks/smartserve@1.4.0)(socks@2.8.7)(typescript@5.9.3)':
dependencies:
- '@api.global/typedserver': 3.0.80
+ '@api.global/typedserver': 3.0.80(@push.rocks/smartserve@1.4.0)
'@git.zone/tsbundle': 2.6.3
'@git.zone/tsrun': 2.0.1
'@push.rocks/consolecolor': 2.0.3
@@ -4588,6 +5148,31 @@ snapshots:
- utf-8-validate
- vue
+ '@git.zone/tswatch@2.3.13(@tiptap/pm@2.27.1)':
+ dependencies:
+ '@api.global/typedserver': 7.11.1(@tiptap/pm@2.27.1)
+ '@git.zone/tsbundle': 2.6.3
+ '@git.zone/tsrun': 2.0.1
+ '@push.rocks/early': 4.0.4
+ '@push.rocks/lik': 6.2.2
+ '@push.rocks/smartcli': 4.0.19
+ '@push.rocks/smartdelay': 3.0.5
+ '@push.rocks/smartfs': 1.3.1
+ '@push.rocks/smartlog': 3.1.10
+ '@push.rocks/smartlog-destination-local': 9.0.2
+ '@push.rocks/smartshell': 3.3.0
+ '@push.rocks/smartwatch': 6.3.0
+ '@push.rocks/taskbuffer': 3.5.0
+ transitivePeerDependencies:
+ - '@nuxt/kit'
+ - '@swc/helpers'
+ - '@tiptap/pm'
+ - bufferutil
+ - react
+ - supports-color
+ - utf-8-validate
+ - vue
+
'@happy-dom/global-registrator@15.11.7':
dependencies:
happy-dom: 15.11.7
@@ -4637,7 +5222,7 @@ snapshots:
'@losslessone_private/lole-serviceserver@1.0.54':
dependencies:
- '@api.global/typedserver': 3.0.80
+ '@api.global/typedserver': 3.0.80(@push.rocks/smartserve@1.4.0)
'@losslessone_private/lole-infohtml': 1.0.39
transitivePeerDependencies:
- '@nuxt/kit'
@@ -4677,6 +5262,54 @@ snapshots:
dependencies:
sparse-bitfield: 3.0.3
+ '@napi-rs/canvas-android-arm64@0.1.88':
+ optional: true
+
+ '@napi-rs/canvas-darwin-arm64@0.1.88':
+ optional: true
+
+ '@napi-rs/canvas-darwin-x64@0.1.88':
+ optional: true
+
+ '@napi-rs/canvas-linux-arm-gnueabihf@0.1.88':
+ optional: true
+
+ '@napi-rs/canvas-linux-arm64-gnu@0.1.88':
+ optional: true
+
+ '@napi-rs/canvas-linux-arm64-musl@0.1.88':
+ optional: true
+
+ '@napi-rs/canvas-linux-riscv64-gnu@0.1.88':
+ optional: true
+
+ '@napi-rs/canvas-linux-x64-gnu@0.1.88':
+ optional: true
+
+ '@napi-rs/canvas-linux-x64-musl@0.1.88':
+ optional: true
+
+ '@napi-rs/canvas-win32-arm64-msvc@0.1.88':
+ optional: true
+
+ '@napi-rs/canvas-win32-x64-msvc@0.1.88':
+ optional: true
+
+ '@napi-rs/canvas@0.1.88':
+ optionalDependencies:
+ '@napi-rs/canvas-android-arm64': 0.1.88
+ '@napi-rs/canvas-darwin-arm64': 0.1.88
+ '@napi-rs/canvas-darwin-x64': 0.1.88
+ '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.88
+ '@napi-rs/canvas-linux-arm64-gnu': 0.1.88
+ '@napi-rs/canvas-linux-arm64-musl': 0.1.88
+ '@napi-rs/canvas-linux-riscv64-gnu': 0.1.88
+ '@napi-rs/canvas-linux-x64-gnu': 0.1.88
+ '@napi-rs/canvas-linux-x64-musl': 0.1.88
+ '@napi-rs/canvas-win32-arm64-msvc': 0.1.88
+ '@napi-rs/canvas-win32-x64-msvc': 0.1.88
+ optional: true
+
'@napi-rs/wasm-runtime@1.0.7':
dependencies:
'@emnapi/core': 1.8.1
@@ -5183,6 +5816,8 @@ snapshots:
'@types/through2': 2.0.41
through2: 4.0.2
+ '@push.rocks/smarti18n@1.0.4': {}
+
'@push.rocks/smartjson@5.2.0':
dependencies:
'@push.rocks/smartenv': 5.0.13
@@ -5421,6 +6056,19 @@ snapshots:
transitivePeerDependencies:
- aws-crt
+ '@push.rocks/smartserve@1.4.0':
+ dependencies:
+ '@api.global/typedrequest': 3.2.5
+ '@cfworker/json-schema': 4.1.1
+ '@push.rocks/lik': 6.2.2
+ '@push.rocks/smartenv': 6.0.0
+ '@push.rocks/smartlog': 3.1.10
+ '@push.rocks/smartpath': 6.0.0
+ ws: 8.18.3
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
'@push.rocks/smartshell@3.3.0':
dependencies:
'@push.rocks/smartdelay': 3.0.5
@@ -5442,7 +6090,7 @@ snapshots:
'@push.rocks/smartsocket@2.1.0':
dependencies:
'@api.global/typedrequest-interfaces': 3.0.19
- '@api.global/typedserver': 3.0.80
+ '@api.global/typedserver': 3.0.80(@push.rocks/smartserve@1.4.0)
'@push.rocks/isohash': 2.0.1
'@push.rocks/isounique': 1.0.5
'@push.rocks/lik': 6.2.2
@@ -5526,6 +6174,15 @@ snapshots:
'@types/semver': 7.7.1
semver: 7.7.3
+ '@push.rocks/smartwatch@6.3.0':
+ dependencies:
+ '@push.rocks/lik': 6.2.2
+ '@push.rocks/smartenv': 6.0.0
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smartrx': 3.0.10
+ chokidar: 5.0.0
+ picomatch: 4.0.3
+
'@push.rocks/smartxml@2.0.0':
dependencies:
fast-xml-parser: 5.3.3
@@ -5647,6 +6304,8 @@ snapshots:
strip-indent: 4.1.1
url: 0.11.4
+ '@remirror/core-constants@3.0.0': {}
+
'@rolldown/binding-android-arm64@1.0.0-beta.52':
optional: true
@@ -6090,6 +6749,25 @@ snapshots:
'@socket.io/component-emitter@3.1.2': {}
+ '@svgdotjs/svg.draggable.js@3.0.6(@svgdotjs/svg.js@3.2.5)':
+ dependencies:
+ '@svgdotjs/svg.js': 3.2.5
+
+ '@svgdotjs/svg.filter.js@3.0.9':
+ dependencies:
+ '@svgdotjs/svg.js': 3.2.5
+
+ '@svgdotjs/svg.js@3.2.5': {}
+
+ '@svgdotjs/svg.resize.js@2.0.5(@svgdotjs/svg.js@3.2.5)(@svgdotjs/svg.select.js@4.0.3(@svgdotjs/svg.js@3.2.5))':
+ dependencies:
+ '@svgdotjs/svg.js': 3.2.5
+ '@svgdotjs/svg.select.js': 4.0.3(@svgdotjs/svg.js@3.2.5)
+
+ '@svgdotjs/svg.select.js@4.0.3(@svgdotjs/svg.js@3.2.5)':
+ dependencies:
+ '@svgdotjs/svg.js': 3.2.5
+
'@szmarczak/http-timer@5.0.1':
dependencies:
defer-to-connect: 2.0.1
@@ -6098,6 +6776,156 @@ snapshots:
'@tempfix/lenis@1.3.17': {}
+ '@tempfix/webcontainer__api@1.6.1': {}
+
+ '@tiptap/core@2.27.1(@tiptap/pm@2.27.1)':
+ dependencies:
+ '@tiptap/pm': 2.27.1
+
+ '@tiptap/extension-blockquote@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-bold@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-bullet-list@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-code-block@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+ '@tiptap/pm': 2.27.1
+
+ '@tiptap/extension-code@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-document@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-dropcursor@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+ '@tiptap/pm': 2.27.1
+
+ '@tiptap/extension-gapcursor@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+ '@tiptap/pm': 2.27.1
+
+ '@tiptap/extension-hard-break@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-heading@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-history@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+ '@tiptap/pm': 2.27.1
+
+ '@tiptap/extension-horizontal-rule@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+ '@tiptap/pm': 2.27.1
+
+ '@tiptap/extension-italic@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-link@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+ '@tiptap/pm': 2.27.1
+ linkifyjs: 4.3.2
+
+ '@tiptap/extension-list-item@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-ordered-list@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-paragraph@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-strike@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-text-align@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-text-style@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-text@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-typography@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/extension-underline@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+
+ '@tiptap/pm@2.27.1':
+ dependencies:
+ prosemirror-changeset: 2.3.1
+ prosemirror-collab: 1.3.1
+ prosemirror-commands: 1.7.1
+ prosemirror-dropcursor: 1.8.2
+ prosemirror-gapcursor: 1.4.0
+ prosemirror-history: 1.5.0
+ prosemirror-inputrules: 1.5.1
+ prosemirror-keymap: 1.2.3
+ prosemirror-markdown: 1.13.2
+ prosemirror-menu: 1.2.5
+ prosemirror-model: 1.25.4
+ prosemirror-schema-basic: 1.2.4
+ prosemirror-schema-list: 1.5.1
+ prosemirror-state: 1.4.4
+ prosemirror-tables: 1.8.5
+ prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4)
+ prosemirror-transform: 1.10.5
+ prosemirror-view: 1.41.4
+
+ '@tiptap/starter-kit@2.27.1':
+ dependencies:
+ '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
+ '@tiptap/extension-blockquote': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-bold': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-bullet-list': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-code': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-code-block': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
+ '@tiptap/extension-document': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-dropcursor': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
+ '@tiptap/extension-gapcursor': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
+ '@tiptap/extension-hard-break': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-heading': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-history': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
+ '@tiptap/extension-horizontal-rule': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
+ '@tiptap/extension-italic': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-list-item': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-ordered-list': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-paragraph': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-strike': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-text': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/extension-text-style': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
+ '@tiptap/pm': 2.27.1
+
'@tokenizer/inflate@0.4.1':
dependencies:
debug: 4.4.3
@@ -6124,32 +6952,32 @@ snapshots:
'@types/bn.js@5.2.0':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/body-parser@1.19.6':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/buffer-json@2.0.3': {}
'@types/clean-css@4.2.11':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
source-map: 0.6.1
'@types/compression@1.8.1':
dependencies:
'@types/express': 5.0.6
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/connect@3.4.38':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/cors@2.8.19':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/debug@4.1.12':
dependencies:
@@ -6157,7 +6985,7 @@ snapshots:
'@types/dns-packet@5.6.5':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/elliptic@6.4.18':
dependencies:
@@ -6165,7 +6993,7 @@ snapshots:
'@types/express-serve-static-core@5.1.0':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/qs': 6.14.0
'@types/range-parser': 1.2.7
'@types/send': 1.2.1
@@ -6178,17 +7006,17 @@ snapshots:
'@types/from2@2.3.6':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/fs-extra@11.0.4':
dependencies:
'@types/jsonfile': 6.1.4
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/glob@8.1.0':
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/hast@3.0.4':
dependencies:
@@ -6210,12 +7038,21 @@ snapshots:
'@types/jsonfile@6.1.4':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
+
+ '@types/linkify-it@5.0.0': {}
+
+ '@types/markdown-it@14.1.2':
+ dependencies:
+ '@types/linkify-it': 5.0.0
+ '@types/mdurl': 2.0.0
'@types/mdast@4.0.4':
dependencies:
'@types/unist': 3.0.3
+ '@types/mdurl@2.0.0': {}
+
'@types/mime-types@2.1.4': {}
'@types/minimatch@5.1.2': {}
@@ -6224,11 +7061,11 @@ snapshots:
'@types/node-forge@1.3.14':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
- '@types/node@25.0.3':
+ '@types/node@22.19.3':
dependencies:
- undici-types: 7.16.0
+ undici-types: 6.21.0
'@types/ping@0.4.4': {}
@@ -6244,22 +7081,22 @@ snapshots:
'@types/send@1.2.1':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/serve-static@2.2.0':
dependencies:
'@types/http-errors': 2.0.5
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/symbol-tree@3.2.5': {}
'@types/tar-stream@3.1.4':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/through2@2.0.41':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/trusted-types@2.0.7': {}
@@ -6283,15 +7120,17 @@ snapshots:
'@types/ws@8.18.1':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
'@types/yauzl@2.10.3':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
optional: true
'@ungap/structured-clone@1.3.0': {}
+ '@yr/monotone-cubic-spline@1.0.3': {}
+
accepts@1.3.8:
dependencies:
mime-types: 2.1.35
@@ -6330,6 +7169,15 @@ snapshots:
ansi-styles@6.2.3: {}
+ apexcharts@5.3.6:
+ dependencies:
+ '@svgdotjs/svg.draggable.js': 3.0.6(@svgdotjs/svg.js@3.2.5)
+ '@svgdotjs/svg.filter.js': 3.0.9
+ '@svgdotjs/svg.js': 3.2.5
+ '@svgdotjs/svg.resize.js': 2.0.5(@svgdotjs/svg.js@3.2.5)(@svgdotjs/svg.select.js@4.0.3(@svgdotjs/svg.js@3.2.5))
+ '@svgdotjs/svg.select.js': 4.0.3(@svgdotjs/svg.js@3.2.5)
+ '@yr/monotone-cubic-spline': 1.0.3
+
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
@@ -6618,6 +7466,8 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
+ crelt@1.0.6: {}
+
croner@9.1.0: {}
cross-spawn@7.0.6:
@@ -6704,6 +7554,10 @@ snapshots:
dependencies:
webidl-conversions: 4.0.2
+ dompurify@3.2.7:
+ optionalDependencies:
+ '@types/trusted-types': 2.0.7
+
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -6751,7 +7605,7 @@ snapshots:
engine.io@6.6.4:
dependencies:
'@types/cors': 2.8.19
- '@types/node': 25.0.3
+ '@types/node': 22.19.3
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.7.2
@@ -6766,8 +7620,6 @@ snapshots:
entities@4.5.0: {}
- entities@6.0.1: {}
-
env-paths@2.2.1: {}
error-ex@1.3.4:
@@ -6822,6 +7674,8 @@ snapshots:
escape-html@1.0.3: {}
+ escape-string-regexp@4.0.0: {}
+
escape-string-regexp@5.0.0: {}
escodegen@2.1.0:
@@ -7228,6 +8082,8 @@ snapshots:
he@1.2.0: {}
+ highlight.js@11.11.1: {}
+
hmac-drbg@1.0.1:
dependencies:
hash.js: 1.1.7
@@ -7279,6 +8135,8 @@ snapshots:
dependencies:
ms: 2.1.3
+ ibantools@4.5.1: {}
+
iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
@@ -7389,6 +8247,12 @@ snapshots:
lines-and-columns@1.2.4: {}
+ linkify-it@5.0.0:
+ dependencies:
+ uc.micro: 2.1.0
+
+ linkifyjs@4.3.2: {}
+
lit-element@3.3.3:
dependencies:
'@lit-labs/ssr-dom-shim': 1.5.0
@@ -7409,11 +8273,6 @@ snapshots:
dependencies:
'@types/trusted-types': 2.0.7
- lit-ntml@4.0.2:
- dependencies:
- parse5: 7.3.0
- tslib: 2.8.1
-
lit@2.8.0:
dependencies:
'@lit/reactive-element': 1.6.3
@@ -7483,6 +8342,8 @@ snapshots:
lru-cache@7.18.3: {}
+ lucide@0.562.0: {}
+
make-dir@3.1.0:
dependencies:
semver: 6.3.1
@@ -7493,8 +8354,19 @@ snapshots:
make-error@1.3.6: {}
+ markdown-it@14.1.0:
+ dependencies:
+ argparse: 2.0.1
+ entities: 4.5.0
+ linkify-it: 5.0.0
+ mdurl: 2.0.0
+ punycode.js: 2.3.1
+ uc.micro: 2.1.0
+
markdown-table@3.0.4: {}
+ marked@14.0.0: {}
+
matcher@5.0.0:
dependencies:
escape-string-regexp: 5.0.0
@@ -7628,6 +8500,8 @@ snapshots:
dependencies:
'@types/mdast': 4.0.4
+ mdurl@2.0.0: {}
+
media-typer@0.3.0: {}
media-typer@1.1.0: {}
@@ -7880,6 +8754,11 @@ snapshots:
mitt@3.0.1: {}
+ monaco-editor@0.55.1:
+ dependencies:
+ dompurify: 3.2.7
+ marked: 14.0.0
+
mongodb-connection-string-url@3.0.2:
dependencies:
'@types/whatwg-url': 11.0.5
@@ -7998,6 +8877,8 @@ snapshots:
is-docker: 2.2.1
is-wsl: 2.2.0
+ orderedmap@2.1.1: {}
+
p-cancelable@3.0.0: {}
p-finally@1.0.0: {}
@@ -8067,10 +8948,6 @@ snapshots:
parse-ms@4.0.0: {}
- parse5@7.3.0:
- dependencies:
- entities: 6.0.1
-
parseurl@1.3.3: {}
path-exists@4.0.0: {}
@@ -8102,6 +8979,10 @@ snapshots:
pdf2json@3.2.0: {}
+ pdfjs-dist@4.10.38:
+ optionalDependencies:
+ '@napi-rs/canvas': 0.1.88
+
peek-readable@5.4.2: {}
pend@1.2.0: {}
@@ -8131,6 +9012,109 @@ snapshots:
property-information@7.1.0: {}
+ prosemirror-changeset@2.3.1:
+ dependencies:
+ prosemirror-transform: 1.10.5
+
+ prosemirror-collab@1.3.1:
+ dependencies:
+ prosemirror-state: 1.4.4
+
+ prosemirror-commands@1.7.1:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.10.5
+
+ prosemirror-dropcursor@1.8.2:
+ dependencies:
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.10.5
+ prosemirror-view: 1.41.4
+
+ prosemirror-gapcursor@1.4.0:
+ dependencies:
+ prosemirror-keymap: 1.2.3
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-view: 1.41.4
+
+ prosemirror-history@1.5.0:
+ dependencies:
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.10.5
+ prosemirror-view: 1.41.4
+ rope-sequence: 1.3.4
+
+ prosemirror-inputrules@1.5.1:
+ dependencies:
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.10.5
+
+ prosemirror-keymap@1.2.3:
+ dependencies:
+ prosemirror-state: 1.4.4
+ w3c-keyname: 2.2.8
+
+ prosemirror-markdown@1.13.2:
+ dependencies:
+ '@types/markdown-it': 14.1.2
+ markdown-it: 14.1.0
+ prosemirror-model: 1.25.4
+
+ prosemirror-menu@1.2.5:
+ dependencies:
+ crelt: 1.0.6
+ prosemirror-commands: 1.7.1
+ prosemirror-history: 1.5.0
+ prosemirror-state: 1.4.4
+
+ prosemirror-model@1.25.4:
+ dependencies:
+ orderedmap: 2.1.1
+
+ prosemirror-schema-basic@1.2.4:
+ dependencies:
+ prosemirror-model: 1.25.4
+
+ prosemirror-schema-list@1.5.1:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.10.5
+
+ prosemirror-state@1.4.4:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-transform: 1.10.5
+ prosemirror-view: 1.41.4
+
+ prosemirror-tables@1.8.5:
+ dependencies:
+ prosemirror-keymap: 1.2.3
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.10.5
+ prosemirror-view: 1.41.4
+
+ prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4):
+ dependencies:
+ '@remirror/core-constants': 3.0.0
+ escape-string-regexp: 4.0.0
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-view: 1.41.4
+
+ prosemirror-transform@1.10.5:
+ dependencies:
+ prosemirror-model: 1.25.4
+
+ prosemirror-view@1.41.4:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.10.5
+
proto-list@1.2.4: {}
proxy-addr@2.0.7:
@@ -8158,6 +9142,8 @@ snapshots:
end-of-stream: 1.4.5
once: 1.4.0
+ punycode.js@2.3.1: {}
+
punycode@1.4.1: {}
punycode@2.3.1: {}
@@ -8354,6 +9340,8 @@ snapshots:
'@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.52
'@rolldown/binding-win32-x64-msvc': 1.0.0-beta.52
+ rope-sequence@1.3.4: {}
+
router@2.2.0:
dependencies:
debug: 4.4.3
@@ -8743,11 +9731,13 @@ snapshots:
typeson@6.1.0: {}
+ uc.micro@2.1.0: {}
+
uglify-js@3.19.3: {}
uint8array-extras@1.5.0: {}
- undici-types@7.16.0: {}
+ undici-types@6.21.0: {}
unified@11.0.5:
dependencies:
@@ -8813,6 +9803,8 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
+ w3c-keyname@2.2.8: {}
+
webdriver-bidi-protocol@0.3.10: {}
webidl-conversions@3.0.1: {}
@@ -8873,6 +9865,12 @@ snapshots:
xmlhttprequest-ssl@2.1.2: {}
+ xterm-addon-fit@0.8.0(xterm@5.3.0):
+ dependencies:
+ xterm: 5.3.0
+
+ xterm@5.3.0: {}
+
y18n@5.0.8: {}
yaml@2.8.2: {}
diff --git a/readme.md b/readme.md
index 392fbbc..dc6bdd1 100644
--- a/readme.md
+++ b/readme.md
@@ -1,8 +1,8 @@
-# npmcdn
+# @serve.zone/opencdn
> 🚀 A blazing-fast CDN that serves files directly from npm packages
-`npmcdn` is a lightweight, TypeScript-powered CDN server that allows you to serve specific files from npm packages. Think of it as your own private unpkg/jsdelivr, but with fine-grained control over which packages are accessible.
+`@serve.zone/opencdn` is a lightweight, TypeScript-powered CDN server that allows you to serve specific files from npm packages. Think of it as your own private unpkg/jsdelivr, but with fine-grained control over which packages are accessible.
## Issue Reporting and Security
@@ -21,13 +21,13 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
## 📦 Installation
```bash
-pnpm add npmcdn
+pnpm add @serve.zone/opencdn
```
## 🚀 Quick Start
```typescript
-import { UiPublicServer } from 'npmcdn';
+import { UiPublicServer } from '@serve.zone/opencdn';
const server = new UiPublicServer({
port: 3000,
diff --git a/scripts/bundle-ui.ts b/scripts/bundle-ui.ts
new file mode 100644
index 0000000..71f2250
--- /dev/null
+++ b/scripts/bundle-ui.ts
@@ -0,0 +1,204 @@
+/**
+ * UI Bundler Script for opencdn
+ * Encodes all files from dist_serve/ as base64
+ * and generates ts/embedded-ui.generated.ts
+ *
+ * Usage:
+ * pnpm bundleUI # One-time bundle
+ */
+
+import * as fs from 'fs';
+import * as path from 'path';
+import { fileURLToPath } from 'url';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const PROJECT_ROOT = path.join(__dirname, '..');
+
+const UI_DIST_PATH = path.join(PROJECT_ROOT, 'dist_bundle');
+const HTML_PATH = path.join(PROJECT_ROOT, 'html');
+const OUTPUT_PATH = path.join(PROJECT_ROOT, 'ts', 'embedded-ui.generated.ts');
+
+const CONTENT_TYPES: Record = {
+ '.html': 'text/html',
+ '.js': 'application/javascript',
+ '.mjs': 'application/javascript',
+ '.css': 'text/css',
+ '.json': 'application/json',
+ '.png': 'image/png',
+ '.jpg': 'image/jpeg',
+ '.jpeg': 'image/jpeg',
+ '.gif': 'image/gif',
+ '.svg': 'image/svg+xml',
+ '.ico': 'image/x-icon',
+ '.woff': 'font/woff',
+ '.woff2': 'font/woff2',
+ '.ttf': 'font/ttf',
+ '.eot': 'application/vnd.ms-fontobject',
+ '.otf': 'font/otf',
+ '.map': 'application/json',
+ '.txt': 'text/plain',
+ '.xml': 'application/xml',
+ '.webp': 'image/webp',
+ '.webmanifest': 'application/manifest+json',
+};
+
+interface IEmbeddedFile {
+ path: string;
+ base64: string;
+ contentType: string;
+ size: number;
+}
+
+function walkDir(dir: string, baseDir: string, files: IEmbeddedFile[] = []): IEmbeddedFile[] {
+ if (!fs.existsSync(dir)) {
+ return files;
+ }
+
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
+
+ for (const entry of entries) {
+ const fullPath = path.join(dir, entry.name);
+
+ if (entry.isDirectory()) {
+ walkDir(fullPath, baseDir, files);
+ } else if (entry.isFile()) {
+ const relativePath = '/' + path.relative(baseDir, fullPath).replace(/\\/g, '/');
+ const ext = path.extname(entry.name).toLowerCase();
+ const contentType = CONTENT_TYPES[ext] || 'application/octet-stream';
+
+ const content = fs.readFileSync(fullPath);
+ const base64 = content.toString('base64');
+
+ files.push({
+ path: relativePath,
+ base64,
+ contentType,
+ size: content.length,
+ });
+
+ console.log(`[bundle-ui] Encoded: ${relativePath} (${formatSize(content.length)})`);
+ }
+ }
+
+ return files;
+}
+
+function bundleUI(): void {
+ console.log('[bundle-ui] Starting UI bundling...');
+ console.log(`[bundle-ui] Source (dist): ${UI_DIST_PATH}`);
+ console.log(`[bundle-ui] Source (html): ${HTML_PATH}`);
+ console.log(`[bundle-ui] Output: ${OUTPUT_PATH}`);
+
+ const files: IEmbeddedFile[] = [];
+ let totalSize = 0;
+
+ // Walk through dist_serve directory (bundled JS)
+ if (fs.existsSync(UI_DIST_PATH)) {
+ walkDir(UI_DIST_PATH, UI_DIST_PATH, files);
+ } else {
+ console.log('[bundle-ui] WARNING: dist_serve not found, skipping...');
+ }
+
+ // Walk through html directory (static HTML)
+ if (fs.existsSync(HTML_PATH)) {
+ walkDir(HTML_PATH, HTML_PATH, files);
+ } else {
+ console.log('[bundle-ui] WARNING: html directory not found, skipping...');
+ }
+
+ if (files.length === 0) {
+ console.error('[bundle-ui] ERROR: No files found to bundle!');
+ console.error('[bundle-ui] Run "pnpm build" first to build the UI');
+ process.exit(1);
+ }
+
+ // Calculate total size
+ for (const file of files) {
+ totalSize += file.size;
+ }
+
+ // Sort files for consistent output
+ files.sort((a, b) => a.path.localeCompare(b.path));
+
+ // Generate TypeScript module
+ const tsContent = generateTypeScript(files, totalSize);
+
+ // Write output file
+ fs.writeFileSync(OUTPUT_PATH, tsContent);
+
+ console.log(`[bundle-ui] Generated ${OUTPUT_PATH}`);
+ console.log(`[bundle-ui] Total files: ${files.length}`);
+ console.log(`[bundle-ui] Total size: ${formatSize(totalSize)}`);
+ console.log(`[bundle-ui] Bundling complete!`);
+}
+
+function generateTypeScript(files: IEmbeddedFile[], totalSize: number): string {
+ const fileEntries = files
+ .map(
+ (f) =>
+ ` ['${f.path}', { base64: '${f.base64}', contentType: '${f.contentType}' }]`
+ )
+ .join(',\n');
+
+ return `// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated by scripts/bundle-ui.ts
+// Total files: ${files.length}
+// Total size: ${formatSize(totalSize)}
+// Generated at: ${new Date().toISOString()}
+
+interface IEmbeddedFile {
+ base64: string;
+ contentType: string;
+}
+
+const EMBEDDED_FILES: Map = new Map([
+${fileEntries}
+]);
+
+/**
+ * Get an embedded file by path
+ * @param path - The file path (e.g., '/index.html')
+ * @returns The file data and content type, or null if not found
+ */
+export function getEmbeddedFile(path: string): { data: Buffer; contentType: string } | null {
+ const file = EMBEDDED_FILES.get(path);
+ if (!file) return null;
+
+ // Decode base64 to Buffer
+ const data = Buffer.from(file.base64, 'base64');
+ return { data, contentType: file.contentType };
+}
+
+/**
+ * Check if an embedded file exists
+ * @param path - The file path to check
+ */
+export function hasEmbeddedFile(path: string): boolean {
+ return EMBEDDED_FILES.has(path);
+}
+
+/**
+ * List all embedded file paths
+ */
+export function listEmbeddedFiles(): string[] {
+ return Array.from(EMBEDDED_FILES.keys());
+}
+
+/**
+ * Get the total number of embedded files
+ */
+export function getEmbeddedFileCount(): number {
+ return EMBEDDED_FILES.size;
+}
+`;
+}
+
+function formatSize(bytes: number): string {
+ if (bytes < 1024) return `${bytes} B`;
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
+ return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
+}
+
+// Run bundler
+bundleUI();
diff --git a/ts/embedded-ui.generated.ts b/ts/embedded-ui.generated.ts
new file mode 100644
index 0000000..5dc8170
--- /dev/null
+++ b/ts/embedded-ui.generated.ts
@@ -0,0 +1,52 @@
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated by scripts/bundle-ui.ts
+// Total files: 3
+// Total size: 15.88 MB
+// Generated at: 2026-01-04T22:33:07.947Z
+
+interface IEmbeddedFile {
+ base64: string;
+ contentType: string;
+}
+
+const EMBEDDED_FILES: Map = new Map([
+ ['/bundle.js', { base64: 'dmFyICROZT1PYmplY3QuY3JlYXRlLExOZT1PYmplY3QuZnJlZXplLG1zPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgRE5lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dmFyIExCdD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczt2YXIgVEJ0PU9iamVjdC5nZXRQcm90b3R5cGVPZixfQnQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgRU5lPSh0LGUpPT4oZT1TeW1ib2xbdF0pP2U6U3ltYm9sLmZvcigiU3ltYm9sLiIrdCkscGM9dD0+e3Rocm93IFR5cGVFcnJvcih0KX07dmFyIE5OZT0odCxlLGEpPT5lIGluIHQ/bXModCxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTphfSk6dFtlXT1hO3ZhciBUTmU9KHQsZSk9Pm1zKHQsIm5hbWUiLHt2YWx1ZTplLGNvbmZpZ3VyYWJsZTohMH0pLFpJPSh0PT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eSh0LHtnZXQ6KGUsYSk9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTplKVthXX0pOnQpKGZ1bmN0aW9uKHQpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJyt0KyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO3ZhciBuPSh0LGUpPT4oKT0+KHQmJihlPXQodD0wKSksZSk7dmFyIGN0PSh0LGUpPT4oKT0+KGV8fHQoKGU9e2V4cG9ydHM6e319KS5leHBvcnRzLGUpLGUuZXhwb3J0cyksZXQ9KHQsZSk9Pntmb3IodmFyIGEgaW4gZSltcyh0LGEse2dldDplW2FdLGVudW1lcmFibGU6ITB9KX0sQUJ0PSh0LGUsYSxyKT0+e2lmKGUmJnR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIExCdChlKSkhX0J0LmNhbGwodCxpKSYmaSE9PWEmJm1zKHQsaSx7Z2V0OigpPT5lW2ldLGVudW1lcmFibGU6IShyPUROZShlLGkpKXx8ci5lbnVtZXJhYmxlfSk7cmV0dXJuIHR9O3ZhciBOMj0odCxlLGEpPT4oYT10IT1udWxsPyROZShUQnQodCkpOnt9LEFCdChlfHwhdHx8IXQuX19lc01vZHVsZT9tcyhhLCJkZWZhdWx0Iix7dmFsdWU6dCxlbnVtZXJhYmxlOiEwfSk6YSx0KSk7dmFyIFhJPXQ9PlssLCwkTmUodD8uW0VOZSgibWV0YWRhdGEiKV0/P251bGwpXSxQTmU9WyJjbGFzcyIsIm1ldGhvZCIsImdldHRlciIsInNldHRlciIsImFjY2Vzc29yIiwiZmllbGQiLCJ2YWx1ZSIsImdldCIsInNldCJdLEM1PXQ9PnQhPT12b2lkIDAmJnR5cGVvZiB0IT0iZnVuY3Rpb24iP3BjKCJGdW5jdGlvbiBleHBlY3RlZCIpOnQsJEJ0PSh0LGUsYSxyLGkpPT4oe2tpbmQ6UE5lW3RdLG5hbWU6ZSxtZXRhZGF0YTpyLGFkZEluaXRpYWxpemVyOm89PmEuXz9wYygiQWxyZWFkeSBpbml0aWFsaXplZCIpOmkucHVzaChDNShvfHxudWxsKSl9KSxEQnQ9KHQsZSk9Pk5OZShlLEVOZSgibWV0YWRhdGEiKSx0WzNdKSxEdD0odCxlLGEscik9Pntmb3IodmFyIGk9MCxvPXRbZT4+MV0scz1vJiZvLmxlbmd0aDtpPHM7aSsrKWUmMT9vW2ldLmNhbGwoYSk6cj1vW2ldLmNhbGwoYSxyKTtyZXR1cm4gcn0sSTE9KHQsZSxhLHIsaSxvKT0+e3ZhciBzLGwsZixjLHUsZD1lJjcsaD0hIShlJjgpLGc9ISEoZSYxNiksYj1kPjM/dC5sZW5ndGgrMTpkP2g/MToyOjAseD1QTmVbZCs1XSxtPWQ+MyYmKHRbYi0xXT1bXSksdj10W2JdfHwodFtiXT1bXSkseT1kJiYoIWcmJiFoJiYoaT1pLnByb3RvdHlwZSksZDw1JiYoZD4zfHwhZykmJkROZShkPDQ/aTp7Z2V0W2FdKCl7cmV0dXJuIF9OZSh0aGlzLG8pfSxzZXRbYV0oRSl7cmV0dXJuIEFOZSh0aGlzLG8sRSl9fSxhKSk7ZD9nJiZkPDQmJlROZShvLChkPjI/InNldCAiOmQ+MT8iZ2V0ICI6IiIpK2EpOlROZShpLGEpO2Zvcih2YXIgdz1yLmxlbmd0aC0xO3c+PTA7dy0tKWM9JEJ0KGQsYSxmPXt9LHRbM10sdiksZCYmKGMuc3RhdGljPWgsYy5wcml2YXRlPWcsdT1jLmFjY2Vzcz17aGFzOmc/RT0+RUJ0KGksRSk6RT0+YSBpbiBFfSxkXjMmJih1LmdldD1nP0U9PihkXjE/X05lOk5CdCkoRSxpLGReND9vOnkuZ2V0KTpFPT5FW2FdKSxkPjImJih1LnNldD1nPyhFLEMpPT5BTmUoRSxpLEMsZF40P286eS5zZXQpOihFLEMpPT5FW2FdPUMpKSxsPSgwLHJbd10pKGQ/ZDw0P2c/bzp5W3hdOmQ+ND92b2lkIDA6e2dldDp5LmdldCxzZXQ6eS5zZXR9OmksYyksZi5fPTEsZF40fHxsPT09dm9pZCAwP0M1KGwpJiYoZD40P20udW5zaGlmdChsKTpkP2c/bz1sOnlbeF09bDppPWwpOnR5cGVvZiBsIT0ib2JqZWN0Inx8bD09PW51bGw/cGMoIk9iamVjdCBleHBlY3RlZCIpOihDNShzPWwuZ2V0KSYmKHkuZ2V0PXMpLEM1KHM9bC5zZXQpJiYoeS5zZXQ9cyksQzUocz1sLmluaXQpJiZtLnVuc2hpZnQocykpO3JldHVybiBkfHxEQnQodCxpKSx5JiZtcyhpLGEseSksZz9kXjQ/bzp5Oml9LFFJPSh0LGUsYSk9Pk5OZSh0LHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsYSksJGo9KHQsZSxhKT0+ZS5oYXModCl8fHBjKCJDYW5ub3QgIithKSxFQnQ9KHQsZSk9Pk9iamVjdChlKSE9PWU/cGMoJ0Nhbm5vdCB1c2UgdGhlICJpbiIgb3BlcmF0b3Igb24gdGhpcyB2YWx1ZScpOnQuaGFzKGUpLF9OZT0odCxlLGEpPT4oJGoodCxlLCJyZWFkIGZyb20gcHJpdmF0ZSBmaWVsZCIpLGE/YS5jYWxsKHQpOmUuZ2V0KHQpKSxKMT0odCxlLGEpPT5lLmhhcyh0KT9wYygiQ2Fubm90IGFkZCB0aGUgc2FtZSBwcml2YXRlIG1lbWJlciBtb3JlIHRoYW4gb25jZSIpOmUgaW5zdGFuY2VvZiBXZWFrU2V0P2UuYWRkKHQpOmUuc2V0KHQsYSksQU5lPSh0LGUsYSxyKT0+KCRqKHQsZSwid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLHI/ci5jYWxsKHQsYSk6ZS5zZXQodCxhKSxhKSxOQnQ9KHQsZSxhKT0+KCRqKHQsZSwiYWNjZXNzIHByaXZhdGUgbWV0aG9kIiksYSk7dmFyIGhjPSh0LGUpPT5MTmUobXModCwicmF3Iix7dmFsdWU6TE5lKGV8fHQuc2xpY2UoKSl9KSk7dmFyIEtJLEw1LERqLElOZSxtYyxCdCx0ZSxKSSxUNSxFaj1uKCgpPT57S0k9Z2xvYmFsVGhpcyxMNT1LSS5TaGFkb3dSb290JiYoS0kuU2hhZHlDU1M9PT12b2lkIDB8fEtJLlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdykmJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZSJpbiBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZSxEaj1TeW1ib2woKSxJTmU9bmV3IFdlYWtNYXAsbWM9Y2xhc3N7Y29uc3RydWN0b3IoZSxhLHIpe2lmKHRoaXMuXyRjc3NSZXN1bHQkPSEwLHIhPT1Eail0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVhZC4iKTt0aGlzLmNzc1RleHQ9ZSx0aGlzLnQ9YX1nZXQgc3R5bGVTaGVldCgpe2xldCBlPXRoaXMubyxhPXRoaXMudDtpZihMNSYmZT09PXZvaWQgMCl7bGV0IHI9YSE9PXZvaWQgMCYmYS5sZW5ndGg9PT0xO3ImJihlPUlOZS5nZXQoYSkpLGU9PT12b2lkIDAmJigodGhpcy5vPWU9bmV3IENTU1N0eWxlU2hlZXQpLnJlcGxhY2VTeW5jKHRoaXMuY3NzVGV4dCksciYmSU5lLnNldChhLGUpKX1yZXR1cm4gZX10b1N0cmluZygpe3JldHVybiB0aGlzLmNzc1RleHR9fSxCdD10PT5uZXcgbWModHlwZW9mIHQ9PSJzdHJpbmciP3Q6dCsiIix2b2lkIDAsRGopLHRlPSh0LC4uLmUpPT57bGV0IGE9dC5sZW5ndGg9PT0xP3RbMF06ZS5yZWR1Y2UoKHIsaSxvKT0+cisocz0+e2lmKHMuXyRjc3NSZXN1bHQkPT09ITApcmV0dXJuIHMuY3NzVGV4dDtpZih0eXBlb2Ygcz09Im51bWJlciIpcmV0dXJuIHM7dGhyb3cgRXJyb3IoIlZhbHVlIHBhc3NlZCB0byAnY3NzJyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24gcmVzdWx0OiAiK3MrIi4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LiIpfSkoaSkrdFtvKzFdLHRbMF0pO3JldHVybiBuZXcgbWMoYSx0LERqKX0sSkk9KHQsZSk9PntpZihMNSl0LmFkb3B0ZWRTdHlsZVNoZWV0cz1lLm1hcChhPT5hIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD9hOmEuc3R5bGVTaGVldCk7ZWxzZSBmb3IobGV0IGEgb2YgZSl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxpPUtJLmxpdE5vbmNlO2khPT12b2lkIDAmJnIuc2V0QXR0cmlidXRlKCJub25jZSIsaSksci50ZXh0Q29udGVudD1hLmNzc1RleHQsdC5hcHBlbmRDaGlsZChyKX19LFQ1PUw1P3Q9PnQ6dD0+dCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/KGU9PntsZXQgYT0iIjtmb3IobGV0IHIgb2YgZS5jc3NSdWxlcylhKz1yLmNzc1RleHQ7cmV0dXJuIEJ0KGEpfSkodCk6dH0pO3ZhciBQQnQsSUJ0LEZCdCxPQnQsQkJ0LFJCdCxlRixGTmUsSEJ0LHFCdCxfNSxnYyxBNSxPTmUsbXIsJDU9bigoKT0+e0VqKCk7RWooKTsoe2lzOlBCdCxkZWZpbmVQcm9wZXJ0eTpJQnQsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOkZCdCxnZXRPd25Qcm9wZXJ0eU5hbWVzOk9CdCxnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6QkJ0LGdldFByb3RvdHlwZU9mOlJCdH09T2JqZWN0KSxlRj1nbG9iYWxUaGlzLEZOZT1lRi50cnVzdGVkVHlwZXMsSEJ0PUZOZT9GTmUuZW1wdHlTY3JpcHQ6IiIscUJ0PWVGLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxfNT0odCxlKT0+dCxnYz17dG9BdHRyaWJ1dGUodCxlKXtzd2l0Y2goZSl7Y2FzZSBCb29sZWFuOnQ9dD9IQnQ6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnQ9dD09bnVsbD90OkpTT04uc3RyaW5naWZ5KHQpfXJldHVybiB0fSxmcm9tQXR0cmlidXRlKHQsZSl7bGV0IGE9dDtzd2l0Y2goZSl7Y2FzZSBCb29sZWFuOmE9dCE9PW51bGw7YnJlYWs7Y2FzZSBOdW1iZXI6YT10PT09bnVsbD9udWxsOk51bWJlcih0KTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UodCl9Y2F0Y2h7YT1udWxsfX1yZXR1cm4gYX19LEE1PSh0LGUpPT4hUEJ0KHQsZSksT05lPXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOmdjLHJlZmxlY3Q6ITEsdXNlRGVmYXVsdDohMSxoYXNDaGFuZ2VkOkE1fTtTeW1ib2wubWV0YWRhdGE/Pz1TeW1ib2woIm1ldGFkYXRhIiksZUYubGl0UHJvcGVydHlNZXRhZGF0YT8/PW5ldyBXZWFrTWFwO21yPWNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnR7c3RhdGljIGFkZEluaXRpYWxpemVyKGUpe3RoaXMuXyRFaSgpLCh0aGlzLmw/Pz1bXSkucHVzaChlKX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVybiB0aGlzLmZpbmFsaXplKCksdGhpcy5fJEVoJiZbLi4udGhpcy5fJEVoLmtleXMoKV19c3RhdGljIGNyZWF0ZVByb3BlcnR5KGUsYT1PTmUpe2lmKGEuc3RhdGUmJihhLmF0dHJpYnV0ZT0hMSksdGhpcy5fJEVpKCksdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoZSkmJigoYT1PYmplY3QuY3JlYXRlKGEpKS53cmFwcGVkPSEwKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChlLGEpLCFhLm5vQWNjZXNzb3Ipe2xldCByPVN5bWJvbCgpLGk9dGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IoZSxyLGEpO2khPT12b2lkIDAmJklCdCh0aGlzLnByb3RvdHlwZSxlLGkpfX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGUsYSxyKXtsZXR7Z2V0Omksc2V0Om99PUZCdCh0aGlzLnByb3RvdHlwZSxlKT8/e2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQocyl7dGhpc1thXT1zfX07cmV0dXJue2dldDppLHNldChzKXtsZXQgbD1pPy5jYWxsKHRoaXMpO28/LmNhbGwodGhpcyxzKSx0aGlzLnJlcXVlc3RVcGRhdGUoZSxsLHIpfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH19c3RhdGljIGdldFByb3BlcnR5T3B0aW9ucyhlKXtyZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllcy5nZXQoZSk/P09OZX1zdGF0aWMgXyRFaSgpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoXzUoImVsZW1lbnRQcm9wZXJ0aWVzIikpKXJldHVybjtsZXQgZT1SQnQodGhpcyk7ZS5maW5hbGl6ZSgpLGUubCE9PXZvaWQgMCYmKHRoaXMubD1bLi4uZS5sXSksdGhpcy5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwKGUuZWxlbWVudFByb3BlcnRpZXMpfXN0YXRpYyBmaW5hbGl6ZSgpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoXzUoImZpbmFsaXplZCIpKSlyZXR1cm47aWYodGhpcy5maW5hbGl6ZWQ9ITAsdGhpcy5fJEVpKCksdGhpcy5oYXNPd25Qcm9wZXJ0eShfNSgicHJvcGVydGllcyIpKSl7bGV0IGE9dGhpcy5wcm9wZXJ0aWVzLHI9Wy4uLk9CdChhKSwuLi5CQnQoYSldO2ZvcihsZXQgaSBvZiByKXRoaXMuY3JlYXRlUHJvcGVydHkoaSxhW2ldKX1sZXQgZT10aGlzW1N5bWJvbC5tZXRhZGF0YV07aWYoZSE9PW51bGwpe2xldCBhPWxpdFByb3BlcnR5TWV0YWRhdGEuZ2V0KGUpO2lmKGEhPT12b2lkIDApZm9yKGxldFtyLGldb2YgYSl0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChyLGkpfXRoaXMuXyRFaD1uZXcgTWFwO2ZvcihsZXRbYSxyXW9mIHRoaXMuZWxlbWVudFByb3BlcnRpZXMpe2xldCBpPXRoaXMuXyRFdShhLHIpO2khPT12b2lkIDAmJnRoaXMuXyRFaC5zZXQoaSxhKX10aGlzLmVsZW1lbnRTdHlsZXM9dGhpcy5maW5hbGl6ZVN0eWxlcyh0aGlzLnN0eWxlcyl9c3RhdGljIGZpbmFsaXplU3R5bGVzKGUpe2xldCBhPVtdO2lmKEFycmF5LmlzQXJyYXkoZSkpe2xldCByPW5ldyBTZXQoZS5mbGF0KDEvMCkucmV2ZXJzZSgpKTtmb3IobGV0IGkgb2YgcilhLnVuc2hpZnQoVDUoaSkpfWVsc2UgZSE9PXZvaWQgMCYmYS5wdXNoKFQ1KGUpKTtyZXR1cm4gYX1zdGF0aWMgXyRFdShlLGEpe2xldCByPWEuYXR0cmlidXRlO3JldHVybiByPT09ITE/dm9pZCAwOnR5cGVvZiByPT0ic3RyaW5nIj9yOnR5cGVvZiBlPT0ic3RyaW5nIj9lLnRvTG93ZXJDYXNlKCk6dm9pZCAwfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl8kRXA9dm9pZCAwLHRoaXMuaXNVcGRhdGVQZW5kaW5nPSExLHRoaXMuaGFzVXBkYXRlZD0hMSx0aGlzLl8kRW09bnVsbCx0aGlzLl8kRXYoKX1fJEV2KCl7dGhpcy5fJEVTPW5ldyBQcm9taXNlKGU9PnRoaXMuZW5hYmxlVXBkYXRpbmc9ZSksdGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5fJEVfKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCksdGhpcy5jb25zdHJ1Y3Rvci5sPy5mb3JFYWNoKGU9PmUodGhpcykpfWFkZENvbnRyb2xsZXIoZSl7KHRoaXMuXyRFTz8/PW5ldyBTZXQpLmFkZChlKSx0aGlzLnJlbmRlclJvb3QhPT12b2lkIDAmJnRoaXMuaXNDb25uZWN0ZWQmJmUuaG9zdENvbm5lY3RlZD8uKCl9cmVtb3ZlQ29udHJvbGxlcihlKXt0aGlzLl8kRU8/LmRlbGV0ZShlKX1fJEVfKCl7bGV0IGU9bmV3IE1hcCxhPXRoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXM7Zm9yKGxldCByIG9mIGEua2V5cygpKXRoaXMuaGFzT3duUHJvcGVydHkocikmJihlLnNldChyLHRoaXNbcl0pLGRlbGV0ZSB0aGlzW3JdKTtlLnNpemU+MCYmKHRoaXMuXyRFcD1lKX1jcmVhdGVSZW5kZXJSb290KCl7bGV0IGU9dGhpcy5zaGFkb3dSb290Pz90aGlzLmF0dGFjaFNoYWRvdyh0aGlzLmNvbnN0cnVjdG9yLnNoYWRvd1Jvb3RPcHRpb25zKTtyZXR1cm4gSkkoZSx0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRTdHlsZXMpLGV9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLnJlbmRlclJvb3Q/Pz10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSx0aGlzLmVuYWJsZVVwZGF0aW5nKCEwKSx0aGlzLl8kRU8/LmZvckVhY2goZT0+ZS5ob3N0Q29ubmVjdGVkPy4oKSl9ZW5hYmxlVXBkYXRpbmcoZSl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fJEVPPy5mb3JFYWNoKGU9PmUuaG9zdERpc2Nvbm5lY3RlZD8uKCkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhlLGEscil7dGhpcy5fJEFLKGUscil9XyRFVChlLGEpe2xldCByPXRoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXMuZ2V0KGUpLGk9dGhpcy5jb25zdHJ1Y3Rvci5fJEV1KGUscik7aWYoaSE9PXZvaWQgMCYmci5yZWZsZWN0PT09ITApe2xldCBvPShyLmNvbnZlcnRlcj8udG9BdHRyaWJ1dGUhPT12b2lkIDA/ci5jb252ZXJ0ZXI6Z2MpLnRvQXR0cmlidXRlKGEsci50eXBlKTt0aGlzLl8kRW09ZSxvPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpOnRoaXMuc2V0QXR0cmlidXRlKGksbyksdGhpcy5fJEVtPW51bGx9fV8kQUsoZSxhKXtsZXQgcj10aGlzLmNvbnN0cnVjdG9yLGk9ci5fJEVoLmdldChlKTtpZihpIT09dm9pZCAwJiZ0aGlzLl8kRW0hPT1pKXtsZXQgbz1yLmdldFByb3BlcnR5T3B0aW9ucyhpKSxzPXR5cGVvZiBvLmNvbnZlcnRlcj09ImZ1bmN0aW9uIj97ZnJvbUF0dHJpYnV0ZTpvLmNvbnZlcnRlcn06by5jb252ZXJ0ZXI/LmZyb21BdHRyaWJ1dGUhPT12b2lkIDA/by5jb252ZXJ0ZXI6Z2M7dGhpcy5fJEVtPWk7bGV0IGw9cy5mcm9tQXR0cmlidXRlKGEsby50eXBlKTt0aGlzW2ldPWw/P3RoaXMuXyRFaj8uZ2V0KGkpPz9sLHRoaXMuXyRFbT1udWxsfX1yZXF1ZXN0VXBkYXRlKGUsYSxyLGk9ITEsbyl7aWYoZSE9PXZvaWQgMCl7bGV0IHM9dGhpcy5jb25zdHJ1Y3RvcjtpZihpPT09ITEmJihvPXRoaXNbZV0pLHI/Pz1zLmdldFByb3BlcnR5T3B0aW9ucyhlKSwhKChyLmhhc0NoYW5nZWQ/P0E1KShvLGEpfHxyLnVzZURlZmF1bHQmJnIucmVmbGVjdCYmbz09PXRoaXMuXyRFaj8uZ2V0KGUpJiYhdGhpcy5oYXNBdHRyaWJ1dGUocy5fJEV1KGUscikpKSlyZXR1cm47dGhpcy5DKGUsYSxyKX10aGlzLmlzVXBkYXRlUGVuZGluZz09PSExJiYodGhpcy5fJEVTPXRoaXMuXyRFUCgpKX1DKGUsYSx7dXNlRGVmYXVsdDpyLHJlZmxlY3Q6aSx3cmFwcGVkOm99LHMpe3ImJiEodGhpcy5fJEVqPz89bmV3IE1hcCkuaGFzKGUpJiYodGhpcy5fJEVqLnNldChlLHM/P2E/P3RoaXNbZV0pLG8hPT0hMHx8cyE9PXZvaWQgMCl8fCh0aGlzLl8kQUwuaGFzKGUpfHwodGhpcy5oYXNVcGRhdGVkfHxyfHwoYT12b2lkIDApLHRoaXMuXyRBTC5zZXQoZSxhKSksaT09PSEwJiZ0aGlzLl8kRW0hPT1lJiYodGhpcy5fJEVxPz89bmV3IFNldCkuYWRkKGUpKX1hc3luYyBfJEVQKCl7dGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITA7dHJ5e2F3YWl0IHRoaXMuXyRFU31jYXRjaChhKXtQcm9taXNlLnJlamVjdChhKX1sZXQgZT10aGlzLnNjaGVkdWxlVXBkYXRlKCk7cmV0dXJuIGUhPW51bGwmJmF3YWl0IGUsIXRoaXMuaXNVcGRhdGVQZW5kaW5nfXNjaGVkdWxlVXBkYXRlKCl7cmV0dXJuIHRoaXMucGVyZm9ybVVwZGF0ZSgpfXBlcmZvcm1VcGRhdGUoKXtpZighdGhpcy5pc1VwZGF0ZVBlbmRpbmcpcmV0dXJuO2lmKCF0aGlzLmhhc1VwZGF0ZWQpe2lmKHRoaXMucmVuZGVyUm9vdD8/PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpLHRoaXMuXyRFcCl7Zm9yKGxldFtpLG9db2YgdGhpcy5fJEVwKXRoaXNbaV09bzt0aGlzLl8kRXA9dm9pZCAwfWxldCByPXRoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXM7aWYoci5zaXplPjApZm9yKGxldFtpLG9db2Ygcil7bGV0e3dyYXBwZWQ6c309byxsPXRoaXNbaV07cyE9PSEwfHx0aGlzLl8kQUwuaGFzKGkpfHxsPT09dm9pZCAwfHx0aGlzLkMoaSx2b2lkIDAsbyxsKX19bGV0IGU9ITEsYT10aGlzLl8kQUw7dHJ5e2U9dGhpcy5zaG91bGRVcGRhdGUoYSksZT8odGhpcy53aWxsVXBkYXRlKGEpLHRoaXMuXyRFTz8uZm9yRWFjaChyPT5yLmhvc3RVcGRhdGU/LigpKSx0aGlzLnVwZGF0ZShhKSk6dGhpcy5fJEVNKCl9Y2F0Y2gocil7dGhyb3cgZT0hMSx0aGlzLl8kRU0oKSxyfWUmJnRoaXMuXyRBRShhKX13aWxsVXBkYXRlKGUpe31fJEFFKGUpe3RoaXMuXyRFTz8uZm9yRWFjaChhPT5hLmhvc3RVcGRhdGVkPy4oKSksdGhpcy5oYXNVcGRhdGVkfHwodGhpcy5oYXNVcGRhdGVkPSEwLHRoaXMuZmlyc3RVcGRhdGVkKGUpKSx0aGlzLnVwZGF0ZWQoZSl9XyRFTSgpe3RoaXMuXyRBTD1uZXcgTWFwLHRoaXMuaXNVcGRhdGVQZW5kaW5nPSExfWdldCB1cGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLmdldFVwZGF0ZUNvbXBsZXRlKCl9Z2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fJEVTfXNob3VsZFVwZGF0ZShlKXtyZXR1cm4hMH11cGRhdGUoZSl7dGhpcy5fJEVxJiY9dGhpcy5fJEVxLmZvckVhY2goYT0+dGhpcy5fJEVUKGEsdGhpc1thXSkpLHRoaXMuXyRFTSgpfXVwZGF0ZWQoZSl7fWZpcnN0VXBkYXRlZChlKXt9fTttci5lbGVtZW50U3R5bGVzPVtdLG1yLnNoYWRvd1Jvb3RPcHRpb25zPXttb2RlOiJvcGVuIn0sbXJbXzUoImVsZW1lbnRQcm9wZXJ0aWVzIildPW5ldyBNYXAsbXJbXzUoImZpbmFsaXplZCIpXT1uZXcgTWFwLHFCdD8uKHtSZWFjdGl2ZUVsZW1lbnQ6bXJ9KSwoZUYucmVhY3RpdmVFbGVtZW50VmVyc2lvbnM/Pz1bXSkucHVzaCgiMi4xLjIiKX0pO2Z1bmN0aW9uIFlOZSh0LGUpe2lmKCFGaih0KXx8IXQuaGFzT3duUHJvcGVydHkoInJhdyIpKXRocm93IEVycm9yKCJpbnZhbGlkIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXkiKTtyZXR1cm4gUk5lIT09dm9pZCAwP1JOZS5jcmVhdGVIVE1MKGUpOmV9ZnVuY3Rpb24gdnModCxlLGE9dCxyKXtpZihlPT09bDEpcmV0dXJuIGU7bGV0IGk9ciE9PXZvaWQgMD9hLl8kQ28/LltyXTphLl8kQ2wsbz1FNShlKT92b2lkIDA6ZS5fJGxpdERpcmVjdGl2ZSQ7cmV0dXJuIGk/LmNvbnN0cnVjdG9yIT09byYmKGk/Ll8kQU8/LighMSksbz09PXZvaWQgMD9pPXZvaWQgMDooaT1uZXcgbyh0KSxpLl8kQVQodCxhLHIpKSxyIT09dm9pZCAwPyhhLl8kQ28/Pz1bXSlbcl09aTphLl8kQ2w9aSksaSE9PXZvaWQgMCYmKGU9dnModCxpLl8kQVModCxlLnZhbHVlcyksaSxyKSksZX12YXIgTmosQk5lLHRGLFJOZSxQaixlaSxJaixWQnQsZ3MsRDUsRTUsRmosSE5lLE9qLE41LHFOZSxWTmUseHMsVU5lLGpOZSxXTmUsQmosTSxSaixIaixsMSxoMSxHTmUsYnMsWk5lLFA1LGFGLHhjLHlzLHJGLGlGLG9GLHNGLHFqLFVCdCx3cyxCYT1uKCgpPT57Tmo9Z2xvYmFsVGhpcyxCTmU9dD0+dCx0Rj1Oai50cnVzdGVkVHlwZXMsUk5lPXRGP3RGLmNyZWF0ZVBvbGljeSgibGl0LWh0bWwiLHtjcmVhdGVIVE1MOnQ9PnR9KTp2b2lkIDAsUGo9IiRsaXQkIixlaT1gbGl0JCR7TWF0aC5yYW5kb20oKS50b0ZpeGVkKDkpLnNsaWNlKDIpfSRgLElqPSI/IitlaSxWQnQ9YDwke0lqfT5gLGdzPWRvY3VtZW50LEQ1PSgpPT5ncy5jcmVhdGVDb21tZW50KCIiKSxFNT10PT50PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIixGaj1BcnJheS5pc0FycmF5LEhOZT10PT5Gaih0KXx8dHlwZW9mIHQ/LltTeW1ib2wuaXRlcmF0b3JdPT0iZnVuY3Rpb24iLE9qPWBbIAkKXGZccl1gLE41PS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLHFOZT0vLS0+L2csVk5lPS8+L2cseHM9UmVnRXhwKGA+fCR7T2p9KD86KFteXFxzIic+PS9dKykoJHtPan0qPSR7T2p9Kig/OlteIAkKXGZcciInXGA8Pj1dfCgifCcpfCkpfCQpYCwiZyIpLFVOZT0vJy9nLGpOZT0vIi9nLFdOZT0vXig/OnNjcmlwdHxzdHlsZXx0ZXh0YXJlYXx0aXRsZSkkL2ksQmo9dD0+KGUsLi4uYSk9Pih7XyRsaXRUeXBlJDp0LHN0cmluZ3M6ZSx2YWx1ZXM6YX0pLE09QmooMSksUmo9QmooMiksSGo9QmooMyksbDE9U3ltYm9sLmZvcigibGl0LW5vQ2hhbmdlIiksaDE9U3ltYm9sLmZvcigibGl0LW5vdGhpbmciKSxHTmU9bmV3IFdlYWtNYXAsYnM9Z3MuY3JlYXRlVHJlZVdhbGtlcihncywxMjkpO1pOZT0odCxlKT0+e2xldCBhPXQubGVuZ3RoLTEscj1bXSxpLG89ZT09PTI/Ijxzdmc+IjplPT09Mz8iPG1hdGg+IjoiIixzPU41O2ZvcihsZXQgbD0wO2w8YTtsKyspe2xldCBmPXRbbF0sYyx1LGQ9LTEsaD0wO2Zvcig7aDxmLmxlbmd0aCYmKHMubGFzdEluZGV4PWgsdT1zLmV4ZWMoZiksdSE9PW51bGwpOyloPXMubGFzdEluZGV4LHM9PT1ONT91WzFdPT09IiEtLSI/cz1xTmU6dVsxXSE9PXZvaWQgMD9zPVZOZTp1WzJdIT09dm9pZCAwPyhXTmUudGVzdCh1WzJdKSYmKGk9UmVnRXhwKCI8LyIrdVsyXSwiZyIpKSxzPXhzKTp1WzNdIT09dm9pZCAwJiYocz14cyk6cz09PXhzP3VbMF09PT0iPiI/KHM9aT8/TjUsZD0tMSk6dVsxXT09PXZvaWQgMD9kPS0yOihkPXMubGFzdEluZGV4LXVbMl0ubGVuZ3RoLGM9dVsxXSxzPXVbM109PT12b2lkIDA/eHM6dVszXT09PSciJz9qTmU6VU5lKTpzPT09ak5lfHxzPT09VU5lP3M9eHM6cz09PXFOZXx8cz09PVZOZT9zPU41OihzPXhzLGk9dm9pZCAwKTtsZXQgZz1zPT09eHMmJnRbbCsxXS5zdGFydHNXaXRoKCIvPiIpPyIgIjoiIjtvKz1zPT09TjU/ZitWQnQ6ZD49MD8oci5wdXNoKGMpLGYuc2xpY2UoMCxkKStQaitmLnNsaWNlKGQpK2VpK2cpOmYrZWkrKGQ9PT0tMj9sOmcpfXJldHVybltZTmUodCxvKyh0W2FdfHwiPD8+IikrKGU9PT0yPyI8L3N2Zz4iOmU9PT0zPyI8L21hdGg+IjoiIikpLHJdfSxQNT1jbGFzcyB0e2NvbnN0cnVjdG9yKHtzdHJpbmdzOmUsXyRsaXRUeXBlJDphfSxyKXtsZXQgaTt0aGlzLnBhcnRzPVtdO2xldCBvPTAscz0wLGw9ZS5sZW5ndGgtMSxmPXRoaXMucGFydHMsW2MsdV09Wk5lKGUsYSk7aWYodGhpcy5lbD10LmNyZWF0ZUVsZW1lbnQoYyxyKSxicy5jdXJyZW50Tm9kZT10aGlzLmVsLmNvbnRlbnQsYT09PTJ8fGE9PT0zKXtsZXQgZD10aGlzLmVsLmNvbnRlbnQuZmlyc3RDaGlsZDtkLnJlcGxhY2VXaXRoKC4uLmQuY2hpbGROb2Rlcyl9Zm9yKDsoaT1icy5uZXh0Tm9kZSgpKSE9PW51bGwmJmYubGVuZ3RoPGw7KXtpZihpLm5vZGVUeXBlPT09MSl7aWYoaS5oYXNBdHRyaWJ1dGVzKCkpZm9yKGxldCBkIG9mIGkuZ2V0QXR0cmlidXRlTmFtZXMoKSlpZihkLmVuZHNXaXRoKFBqKSl7bGV0IGg9dVtzKytdLGc9aS5nZXRBdHRyaWJ1dGUoZCkuc3BsaXQoZWkpLGI9LyhbLj9AXSk/KC4qKS8uZXhlYyhoKTtmLnB1c2goe3R5cGU6MSxpbmRleDpvLG5hbWU6YlsyXSxzdHJpbmdzOmcsY3RvcjpiWzFdPT09Ii4iP3JGOmJbMV09PT0iPyI/aUY6YlsxXT09PSJAIj9vRjp5c30pLGkucmVtb3ZlQXR0cmlidXRlKGQpfWVsc2UgZC5zdGFydHNXaXRoKGVpKSYmKGYucHVzaCh7dHlwZTo2LGluZGV4Om99KSxpLnJlbW92ZUF0dHJpYnV0ZShkKSk7aWYoV05lLnRlc3QoaS50YWdOYW1lKSl7bGV0IGQ9aS50ZXh0Q29udGVudC5zcGxpdChlaSksaD1kLmxlbmd0aC0xO2lmKGg+MCl7aS50ZXh0Q29udGVudD10Rj90Ri5lbXB0eVNjcmlwdDoiIjtmb3IobGV0IGc9MDtnPGg7ZysrKWkuYXBwZW5kKGRbZ10sRDUoKSksYnMubmV4dE5vZGUoKSxmLnB1c2goe3R5cGU6MixpbmRleDorK299KTtpLmFwcGVuZChkW2hdLEQ1KCkpfX19ZWxzZSBpZihpLm5vZGVUeXBlPT09OClpZihpLmRhdGE9PT1JailmLnB1c2goe3R5cGU6MixpbmRleDpvfSk7ZWxzZXtsZXQgZD0tMTtmb3IoOyhkPWkuZGF0YS5pbmRleE9mKGVpLGQrMSkpIT09LTE7KWYucHVzaCh7dHlwZTo3LGluZGV4Om99KSxkKz1laS5sZW5ndGgtMX1vKyt9fXN0YXRpYyBjcmVhdGVFbGVtZW50KGUsYSl7bGV0IHI9Z3MuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gci5pbm5lckhUTUw9ZSxyfX07YUY9Y2xhc3N7Y29uc3RydWN0b3IoZSxhKXt0aGlzLl8kQVY9W10sdGhpcy5fJEFOPXZvaWQgMCx0aGlzLl8kQUQ9ZSx0aGlzLl8kQU09YX1nZXQgcGFyZW50Tm9kZSgpe3JldHVybiB0aGlzLl8kQU0ucGFyZW50Tm9kZX1nZXQgXyRBVSgpe3JldHVybiB0aGlzLl8kQU0uXyRBVX11KGUpe2xldHtlbDp7Y29udGVudDphfSxwYXJ0czpyfT10aGlzLl8kQUQsaT0oZT8uY3JlYXRpb25TY29wZT8/Z3MpLmltcG9ydE5vZGUoYSwhMCk7YnMuY3VycmVudE5vZGU9aTtsZXQgbz1icy5uZXh0Tm9kZSgpLHM9MCxsPTAsZj1yWzBdO2Zvcig7ZiE9PXZvaWQgMDspe2lmKHM9PT1mLmluZGV4KXtsZXQgYztmLnR5cGU9PT0yP2M9bmV3IHhjKG8sby5uZXh0U2libGluZyx0aGlzLGUpOmYudHlwZT09PTE/Yz1uZXcgZi5jdG9yKG8sZi5uYW1lLGYuc3RyaW5ncyx0aGlzLGUpOmYudHlwZT09PTYmJihjPW5ldyBzRihvLHRoaXMsZSkpLHRoaXMuXyRBVi5wdXNoKGMpLGY9clsrK2xdfXMhPT1mPy5pbmRleCYmKG89YnMubmV4dE5vZGUoKSxzKyspfXJldHVybiBicy5jdXJyZW50Tm9kZT1ncyxpfXAoZSl7bGV0IGE9MDtmb3IobGV0IHIgb2YgdGhpcy5fJEFWKXIhPT12b2lkIDAmJihyLnN0cmluZ3MhPT12b2lkIDA/KHIuXyRBSShlLHIsYSksYSs9ci5zdHJpbmdzLmxlbmd0aC0yKTpyLl8kQUkoZVthXSkpLGErK319LHhjPWNsYXNzIHR7Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNPy5fJEFVPz90aGlzLl8kQ3Z9Y29uc3RydWN0b3IoZSxhLHIsaSl7dGhpcy50eXBlPTIsdGhpcy5fJEFIPWgxLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFBPWUsdGhpcy5fJEFCPWEsdGhpcy5fJEFNPXIsdGhpcy5vcHRpb25zPWksdGhpcy5fJEN2PWk/LmlzQ29ubmVjdGVkPz8hMH1nZXQgcGFyZW50Tm9kZSgpe2xldCBlPXRoaXMuXyRBQS5wYXJlbnROb2RlLGE9dGhpcy5fJEFNO3JldHVybiBhIT09dm9pZCAwJiZlPy5ub2RlVHlwZT09PTExJiYoZT1hLnBhcmVudE5vZGUpLGV9Z2V0IHN0YXJ0Tm9kZSgpe3JldHVybiB0aGlzLl8kQUF9Z2V0IGVuZE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFCfV8kQUkoZSxhPXRoaXMpe2U9dnModGhpcyxlLGEpLEU1KGUpP2U9PT1oMXx8ZT09bnVsbHx8ZT09PSIiPyh0aGlzLl8kQUghPT1oMSYmdGhpcy5fJEFSKCksdGhpcy5fJEFIPWgxKTplIT09dGhpcy5fJEFIJiZlIT09bDEmJnRoaXMuXyhlKTplLl8kbGl0VHlwZSQhPT12b2lkIDA/dGhpcy4kKGUpOmUubm9kZVR5cGUhPT12b2lkIDA/dGhpcy5UKGUpOkhOZShlKT90aGlzLmsoZSk6dGhpcy5fKGUpfU8oZSl7cmV0dXJuIHRoaXMuXyRBQS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMuXyRBQil9VChlKXt0aGlzLl8kQUghPT1lJiYodGhpcy5fJEFSKCksdGhpcy5fJEFIPXRoaXMuTyhlKSl9XyhlKXt0aGlzLl8kQUghPT1oMSYmRTUodGhpcy5fJEFIKT90aGlzLl8kQUEubmV4dFNpYmxpbmcuZGF0YT1lOnRoaXMuVChncy5jcmVhdGVUZXh0Tm9kZShlKSksdGhpcy5fJEFIPWV9JChlKXtsZXR7dmFsdWVzOmEsXyRsaXRUeXBlJDpyfT1lLGk9dHlwZW9mIHI9PSJudW1iZXIiP3RoaXMuXyRBQyhlKTooci5lbD09PXZvaWQgMCYmKHIuZWw9UDUuY3JlYXRlRWxlbWVudChZTmUoci5oLHIuaFswXSksdGhpcy5vcHRpb25zKSkscik7aWYodGhpcy5fJEFIPy5fJEFEPT09aSl0aGlzLl8kQUgucChhKTtlbHNle2xldCBvPW5ldyBhRihpLHRoaXMpLHM9by51KHRoaXMub3B0aW9ucyk7by5wKGEpLHRoaXMuVChzKSx0aGlzLl8kQUg9b319XyRBQyhlKXtsZXQgYT1HTmUuZ2V0KGUuc3RyaW5ncyk7cmV0dXJuIGE9PT12b2lkIDAmJkdOZS5zZXQoZS5zdHJpbmdzLGE9bmV3IFA1KGUpKSxhfWsoZSl7RmoodGhpcy5fJEFIKXx8KHRoaXMuXyRBSD1bXSx0aGlzLl8kQVIoKSk7bGV0IGE9dGhpcy5fJEFILHIsaT0wO2ZvcihsZXQgbyBvZiBlKWk9PT1hLmxlbmd0aD9hLnB1c2gocj1uZXcgdCh0aGlzLk8oRDUoKSksdGhpcy5PKEQ1KCkpLHRoaXMsdGhpcy5vcHRpb25zKSk6cj1hW2ldLHIuXyRBSShvKSxpKys7aTxhLmxlbmd0aCYmKHRoaXMuXyRBUihyJiZyLl8kQUIubmV4dFNpYmxpbmcsaSksYS5sZW5ndGg9aSl9XyRBUihlPXRoaXMuXyRBQS5uZXh0U2libGluZyxhKXtmb3IodGhpcy5fJEFQPy4oITEsITAsYSk7ZSE9PXRoaXMuXyRBQjspe2xldCByPUJOZShlKS5uZXh0U2libGluZztCTmUoZSkucmVtb3ZlKCksZT1yfX1zZXRDb25uZWN0ZWQoZSl7dGhpcy5fJEFNPT09dm9pZCAwJiYodGhpcy5fJEN2PWUsdGhpcy5fJEFQPy4oZSkpfX0seXM9Y2xhc3N7Z2V0IHRhZ05hbWUoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnRhZ05hbWV9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9Y29uc3RydWN0b3IoZSxhLHIsaSxvKXt0aGlzLnR5cGU9MSx0aGlzLl8kQUg9aDEsdGhpcy5fJEFOPXZvaWQgMCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5hbWU9YSx0aGlzLl8kQU09aSx0aGlzLm9wdGlvbnM9byxyLmxlbmd0aD4yfHxyWzBdIT09IiJ8fHJbMV0hPT0iIj8odGhpcy5fJEFIPUFycmF5KHIubGVuZ3RoLTEpLmZpbGwobmV3IFN0cmluZyksdGhpcy5zdHJpbmdzPXIpOnRoaXMuXyRBSD1oMX1fJEFJKGUsYT10aGlzLHIsaSl7bGV0IG89dGhpcy5zdHJpbmdzLHM9ITE7aWYobz09PXZvaWQgMCllPXZzKHRoaXMsZSxhLDApLHM9IUU1KGUpfHxlIT09dGhpcy5fJEFIJiZlIT09bDEscyYmKHRoaXMuXyRBSD1lKTtlbHNle2xldCBsPWUsZixjO2ZvcihlPW9bMF0sZj0wO2Y8by5sZW5ndGgtMTtmKyspYz12cyh0aGlzLGxbcitmXSxhLGYpLGM9PT1sMSYmKGM9dGhpcy5fJEFIW2ZdKSxzfHw9IUU1KGMpfHxjIT09dGhpcy5fJEFIW2ZdLGM9PT1oMT9lPWgxOmUhPT1oMSYmKGUrPShjPz8iIikrb1tmKzFdKSx0aGlzLl8kQUhbZl09Y31zJiYhaSYmdGhpcy5qKGUpfWooZSl7ZT09PWgxP3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKTp0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSxlPz8iIil9fSxyRj1jbGFzcyBleHRlbmRzIHlze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9M31qKGUpe3RoaXMuZWxlbWVudFt0aGlzLm5hbWVdPWU9PT1oMT92b2lkIDA6ZX19LGlGPWNsYXNzIGV4dGVuZHMgeXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT00fWooZSl7dGhpcy5lbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSh0aGlzLm5hbWUsISFlJiZlIT09aDEpfX0sb0Y9Y2xhc3MgZXh0ZW5kcyB5c3tjb25zdHJ1Y3RvcihlLGEscixpLG8pe3N1cGVyKGUsYSxyLGksbyksdGhpcy50eXBlPTV9XyRBSShlLGE9dGhpcyl7aWYoKGU9dnModGhpcyxlLGEsMCk/P2gxKT09PWwxKXJldHVybjtsZXQgcj10aGlzLl8kQUgsaT1lPT09aDEmJnIhPT1oMXx8ZS5jYXB0dXJlIT09ci5jYXB0dXJlfHxlLm9uY2UhPT1yLm9uY2V8fGUucGFzc2l2ZSE9PXIucGFzc2l2ZSxvPWUhPT1oMSYmKHI9PT1oMXx8aSk7aSYmdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5uYW1lLHRoaXMsciksbyYmdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5uYW1lLHRoaXMsZSksdGhpcy5fJEFIPWV9aGFuZGxlRXZlbnQoZSl7dHlwZW9mIHRoaXMuXyRBSD09ImZ1bmN0aW9uIj90aGlzLl8kQUguY2FsbCh0aGlzLm9wdGlvbnM/Lmhvc3Q/P3RoaXMuZWxlbWVudCxlKTp0aGlzLl8kQUguaGFuZGxlRXZlbnQoZSl9fSxzRj1jbGFzc3tjb25zdHJ1Y3RvcihlLGEscil7dGhpcy5lbGVtZW50PWUsdGhpcy50eXBlPTYsdGhpcy5fJEFOPXZvaWQgMCx0aGlzLl8kQU09YSx0aGlzLm9wdGlvbnM9cn1nZXQgXyRBVSgpe3JldHVybiB0aGlzLl8kQU0uXyRBVX1fJEFJKGUpe3ZzKHRoaXMsZSl9fSxxaj17TTpQaixQOmVpLEE6SWosQzoxLEw6Wk5lLFI6YUYsRDpITmUsVjp2cyxJOnhjLEg6eXMsTjppRixVOm9GLEI6ckYsRjpzRn0sVUJ0PU5qLmxpdEh0bWxQb2x5ZmlsbFN1cHBvcnQ7VUJ0Py4oUDUseGMpLChOai5saXRIdG1sVmVyc2lvbnM/Pz1bXSkucHVzaCgiMy4zLjIiKTt3cz0odCxlLGEpPT57bGV0IHI9YT8ucmVuZGVyQmVmb3JlPz9lLGk9ci5fJGxpdFBhcnQkO2lmKGk9PT12b2lkIDApe2xldCBvPWE/LnJlbmRlckJlZm9yZT8/bnVsbDtyLl8kbGl0UGFydCQ9aT1uZXcgeGMoZS5pbnNlcnRCZWZvcmUoRDUoKSxvKSxvLHZvaWQgMCxhPz97fSl9cmV0dXJuIGkuXyRBSSh0KSxpfX0pO3ZhciBWaix0aSxqQnQsV0J0LFhOZT1uKCgpPT57JDUoKTskNSgpO0JhKCk7QmEoKTtWaj1nbG9iYWxUaGlzLHRpPWNsYXNzIGV4dGVuZHMgbXJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVuZGVyT3B0aW9ucz17aG9zdDp0aGlzfSx0aGlzLl8kRG89dm9pZCAwfWNyZWF0ZVJlbmRlclJvb3QoKXtsZXQgZT1zdXBlci5jcmVhdGVSZW5kZXJSb290KCk7cmV0dXJuIHRoaXMucmVuZGVyT3B0aW9ucy5yZW5kZXJCZWZvcmU/Pz1lLmZpcnN0Q2hpbGQsZX11cGRhdGUoZSl7bGV0IGE9dGhpcy5yZW5kZXIoKTt0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLnJlbmRlck9wdGlvbnMuaXNDb25uZWN0ZWQ9dGhpcy5pc0Nvbm5lY3RlZCksc3VwZXIudXBkYXRlKGUpLHRoaXMuXyREbz13cyhhLHRoaXMucmVuZGVyUm9vdCx0aGlzLnJlbmRlck9wdGlvbnMpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl8kRG8/LnNldENvbm5lY3RlZCghMCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuXyREbz8uc2V0Q29ubmVjdGVkKCExKX1yZW5kZXIoKXtyZXR1cm4gbDF9fTt0aS5fJGxpdEVsZW1lbnQkPSEwLHRpLmZpbmFsaXplZD0hMCxWai5saXRFbGVtZW50SHlkcmF0ZVN1cHBvcnQ/Lih7TGl0RWxlbWVudDp0aX0pO2pCdD1Wai5saXRFbGVtZW50UG9seWZpbGxTdXBwb3J0O2pCdD8uKHtMaXRFbGVtZW50OnRpfSk7V0J0PXtfJEFLOih0LGUsYSk9Pnt0Ll8kQUsoZSxhKX0sXyRBTDp0PT50Ll8kQUx9OyhWai5saXRFbGVtZW50VmVyc2lvbnM/Pz1bXSkucHVzaCgiNC4yLjIiKX0pO3ZhciBHQnQsUU5lPW4oKCk9PntHQnQ9ITF9KTt2YXIgZ3I9bigoKT0+eyQ1KCk7QmEoKTtYTmUoKTtRTmUoKX0pO3ZhciBsRj1jdChuRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG5GLnVuaT12b2lkIDA7dmFyIFlCdD0odD0idW5pIik9PmAke3R9XyR7Inh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLGU9PntsZXQgYT1NYXRoLnJhbmRvbSgpKjE2fDA7cmV0dXJuKGU9PT0ieCI/YTphJjN8OCkudG9TdHJpbmcoMTYpfSl9YDtuRi51bmk9WUJ0fSk7dmFyIGNGLG5vLGRGPW4oKCk9PntjRj1jbGFzc3tjbGFpbSgpe2lmKHRoaXMuY2xhaW1lZCl0aHJvdyBuZXcgRXJyb3IoIkRlZmVycmVkIGFscmVhZHkgY2xhaW1lZCIpO3RoaXMuY2xhaW1lZD0hMH1nZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5zdG9wcGVkQXQ/dGhpcy5zdG9wcGVkQXQtdGhpcy5zdGFydGVkQXQ6RGF0ZS5ub3coKS10aGlzLnN0YXJ0ZWRBdH1jb25zdHJ1Y3Rvcigpe3RoaXMuY2xhaW1lZD0hMSx0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGUsYSk9Pnt0aGlzLnJlc29sdmU9cj0+e3RoaXMuc3RhdHVzPSJmdWxmaWxsZWQiLHRoaXMuc3RvcHBlZEF0PURhdGUubm93KCksZShyKX0sdGhpcy5yZWplY3Q9cj0+e3RoaXMuc3RhdHVzPSJyZWplY3RlZCIsdGhpcy5zdG9wcGVkQXQ9RGF0ZS5ub3coKSxhKHIpfSx0aGlzLnN0YXJ0ZWRBdD1EYXRlLm5vdygpLHRoaXMuc3RhdHVzPSJwZW5kaW5nIn0pfX0sbm89KCk9Pm5ldyBjRn0pO3ZhciBmRixaQnQsS05lPW4oKCk9PntkRigpO2ZGPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hY2N1bXVsYXRlZFByb21pc2VzPVtdLHRoaXMuZGVmZXJyZWQ9bm8oKSx0aGlzLnByb21pc2U9dGhpcy5kZWZlcnJlZC5wcm9taXNlLHNldFRpbWVvdXQoYXN5bmMoKT0+e2Zvcig7dGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLmxlbmd0aD4wOylhd2FpdCB0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMuc2hpZnQoKTt0aGlzLmRlZmVycmVkLnJlc29sdmUoKX0sMCl9c3ViRGVmZXIoKXtsZXQgZT1ubygpO3JldHVybiB0aGlzLmFkZFByb21pc2UoZS5wcm9taXNlKSxlfWFkZFByb21pc2UoZSl7dGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnB1c2goZSl9fSxaQnQ9KCk9Pm5ldyBmRn0pO3ZhciBWZT17fTtldChWZSx7Q3VtdWxhdGl2ZURlZmVycmVkOigpPT5mRixEZWZlcnJlZDooKT0+Y0YsY3VtdWxhdGl2ZURlZmVyOigpPT5aQnQsZGVmZXI6KCk9Pm5vLGZyb21DYWxsYmFjazooKT0+dFJ0LGdldEZpcnN0VHJ1ZU9yRmFsc2U6KCk9PmVSdCxtYXA6KCk9PktCdCxyZWplY3RlZFByb21pc2U6KCk9PlFCdCxyZXNvbHZlZFByb21pc2U6KCk9PlhCdCx0aW1lb3V0QW5kQ29udGludWU6KCk9PkpCdCx0aW1lb3V0V3JhcDooKT0+Sk5lfSk7dmFyIFhCdCxRQnQsS0J0LEpOZSxKQnQsZVJ0LHRSdCxwMj1uKCgpPT57ZEYoKTtLTmUoKTtkRigpO1hCdD10PT5Qcm9taXNlLnJlc29sdmUodCksUUJ0PXQ9PlByb21pc2UucmVqZWN0KHQpLEtCdD1hc3luYyh0LGUpPT57bGV0IGE9W10scj1bXTtmb3IobGV0IGkgb2YgdCl7bGV0IG89ZShpKTthLnB1c2gobyksby50aGVuKHM9PntyLnB1c2gocyl9KX1yZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoYSkscn0sSk5lPWFzeW5jKHQsZSxhPSEwKT0+bmV3IFByb21pc2UoKHIsaSk9PntzZXRUaW1lb3V0KCgpPT57YT9pKG5ldyBFcnJvcigidGltZW91dCIpKTpyKG51bGwpfSxlKSx0LnRoZW4ocixpKX0pLEpCdD1hc3luYyh0LGU9NmU0KT0+Sk5lKHQsZSwhMSksZVJ0PWFzeW5jIHQ9PntsZXQgZT1ubygpO2ZvcihsZXQgYSBvZiB0KWEudGhlbihyPT57cj09PSEwJiZlLnJlc29sdmUoITApfSk7cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oKCk9PntlLnJlc29sdmUoITEpfSksZS5wcm9taXNlfSx0UnQ9dD0+bmV3IFByb21pc2UoKGUsYSk9Pnt0KChyLGkpPT57cj9hKHIpOmUoaSl9KX0pfSk7dmFyIHVGPW4oKCk9PntwMigpfSk7ZnVuY3Rpb24gdnQodCxlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmZSE9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhlKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtVaih0LGUpO2Z1bmN0aW9uIGEoKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9ZT09PW51bGw/T2JqZWN0LmNyZWF0ZShlKTooYS5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IGEpfWZ1bmN0aW9uIHJSdCh0LGUpe3ZhciBhPXt9O2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiZlLmluZGV4T2Yocik8MCYmKGFbcl09dFtyXSk7aWYodCE9bnVsbCYmdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM9PSJmdW5jdGlvbiIpZm9yKHZhciBpPTAscj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2k8ci5sZW5ndGg7aSsrKWUuaW5kZXhPZihyW2ldKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodCxyW2ldKSYmKGFbcltpXV09dFtyW2ldXSk7cmV0dXJuIGF9ZnVuY3Rpb24gaVJ0KHQsZSxhLHIpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGgsbz1pPDM/ZTpyPT09bnVsbD9yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxhKTpyLHM7aWYodHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZ0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZT09ImZ1bmN0aW9uIilvPVJlZmxlY3QuZGVjb3JhdGUodCxlLGEscik7ZWxzZSBmb3IodmFyIGw9dC5sZW5ndGgtMTtsPj0wO2wtLSkocz10W2xdKSYmKG89KGk8Mz9zKG8pOmk+Mz9zKGUsYSxvKTpzKGUsYSkpfHxvKTtyZXR1cm4gaT4zJiZvJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxhLG8pLG99ZnVuY3Rpb24gb1J0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGEscil7ZShhLHIsdCl9fWZ1bmN0aW9uIHNSdCh0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9ZnVuY3Rpb24gblJ0KHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfWZ1bmN0aW9uIGxSdCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wiP3Q6IiIuY29uY2F0KHQpfWZ1bmN0aW9uIGNSdCh0LGUsYSl7cmV0dXJuIHR5cGVvZiBlPT0ic3ltYm9sIiYmKGU9ZS5kZXNjcmlwdGlvbj8iWyIuY29uY2F0KGUuZGVzY3JpcHRpb24sIl0iKToiIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm5hbWUiLHtjb25maWd1cmFibGU6ITAsdmFsdWU6YT8iIi5jb25jYXQoYSwiICIsZSk6ZX0pfWZ1bmN0aW9uIGRSdCh0LGUpe2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QubWV0YWRhdGE9PSJmdW5jdGlvbiIpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEodCxlKX1mdW5jdGlvbiBZaih0LGUsYSxyKXtmdW5jdGlvbiBpKG8pe3JldHVybiBvIGluc3RhbmNlb2YgYT9vOm5ldyBhKGZ1bmN0aW9uKHMpe3Mobyl9KX1yZXR1cm4gbmV3KGF8fChhPVByb21pc2UpKShmdW5jdGlvbihvLHMpe2Z1bmN0aW9uIGwodSl7dHJ5e2Moci5uZXh0KHUpKX1jYXRjaChkKXtzKGQpfX1mdW5jdGlvbiBmKHUpe3RyeXtjKHIudGhyb3codSkpfWNhdGNoKGQpe3MoZCl9fWZ1bmN0aW9uIGModSl7dS5kb25lP28odS52YWx1ZSk6aSh1LnZhbHVlKS50aGVuKGwsZil9Yygocj1yLmFwcGx5KHQsZXx8W10pKS5uZXh0KCkpfSl9ZnVuY3Rpb24gSTUodCxlKXt2YXIgYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYob1swXSYxKXRocm93IG9bMV07cmV0dXJuIG9bMV19LHRyeXM6W10sb3BzOltdfSxyLGksbyxzPU9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvcj09ImZ1bmN0aW9uIj9JdGVyYXRvcjpPYmplY3QpLnByb3RvdHlwZSk7cmV0dXJuIHMubmV4dD1sKDApLHMudGhyb3c9bCgxKSxzLnJldHVybj1sKDIpLHR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJihzW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHM7ZnVuY3Rpb24gbChjKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGYoW2MsdV0pfX1mdW5jdGlvbiBmKGMpe2lmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cyYmKHM9MCxjWzBdJiYoYT0wKSksYTspdHJ5e2lmKHI9MSxpJiYobz1jWzBdJjI/aS5yZXR1cm46Y1swXT9pLnRocm93fHwoKG89aS5yZXR1cm4pJiZvLmNhbGwoaSksMCk6aS5uZXh0KSYmIShvPW8uY2FsbChpLGNbMV0pKS5kb25lKXJldHVybiBvO3N3aXRjaChpPTAsbyYmKGM9W2NbMF0mMixvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxpPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobz1hLnRyeXMsIShvPW8ubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoY1swXT09PTZ8fGNbMF09PT0yKSl7YT0wO2NvbnRpbnVlfWlmKGNbMF09PT0zJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7YS5sYWJlbD1jWzFdO2JyZWFrfWlmKGNbMF09PT02JiZhLmxhYmVsPG9bMV0pe2EubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmYS5sYWJlbDxvWzJdKXthLmxhYmVsPW9bMl0sYS5vcHMucHVzaChjKTticmVha31vWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9Yz1lLmNhbGwodCxhKX1jYXRjaCh1KXtjPVs2LHVdLGk9MH1maW5hbGx5e3I9bz0wfWlmKGNbMF0mNSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX1mdW5jdGlvbiBmUnQodCxlKXtmb3IodmFyIGEgaW4gdClhIT09ImRlZmF1bHQiJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsYSkmJldqKGUsdCxhKX1mdW5jdGlvbiBoMih0KXt2YXIgZT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wuaXRlcmF0b3IsYT1lJiZ0W2VdLHI9MDtpZihhKXJldHVybiBhLmNhbGwodCk7aWYodCYmdHlwZW9mIHQubGVuZ3RoPT0ibnVtYmVyIilyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZyPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtyKytdLGRvbmU6IXR9fX07dGhyb3cgbmV3IFR5cGVFcnJvcihlPyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX1mdW5jdGlvbiBfMSh0LGUpe3ZhciBhPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnRbU3ltYm9sLml0ZXJhdG9yXTtpZighYSlyZXR1cm4gdDt2YXIgcj1hLmNhbGwodCksaSxvPVtdLHM7dHJ5e2Zvcig7KGU9PT12b2lkIDB8fGUtLSA+MCkmJiEoaT1yLm5leHQoKSkuZG9uZTspby5wdXNoKGkudmFsdWUpfWNhdGNoKGwpe3M9e2Vycm9yOmx9fWZpbmFsbHl7dHJ5e2kmJiFpLmRvbmUmJihhPXIucmV0dXJuKSYmYS5jYWxsKHIpfWZpbmFsbHl7aWYocyl0aHJvdyBzLmVycm9yfX1yZXR1cm4gb31mdW5jdGlvbiB1UnQoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdD10LmNvbmNhdChfMShhcmd1bWVudHNbZV0pKTtyZXR1cm4gdH1mdW5jdGlvbiBwUnQoKXtmb3IodmFyIHQ9MCxlPTAsYT1hcmd1bWVudHMubGVuZ3RoO2U8YTtlKyspdCs9YXJndW1lbnRzW2VdLmxlbmd0aDtmb3IodmFyIHI9QXJyYXkodCksaT0wLGU9MDtlPGE7ZSsrKWZvcih2YXIgbz1hcmd1bWVudHNbZV0scz0wLGw9by5sZW5ndGg7czxsO3MrKyxpKyspcltpXT1vW3NdO3JldHVybiByfWZ1bmN0aW9uIGUyKHQsZSxhKXtpZihhfHxhcmd1bWVudHMubGVuZ3RoPT09Milmb3IodmFyIHI9MCxpPWUubGVuZ3RoLG87cjxpO3IrKykob3x8IShyIGluIGUpKSYmKG98fChvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUsMCxyKSksb1tyXT1lW3JdKTtyZXR1cm4gdC5jb25jYXQob3x8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpfWZ1bmN0aW9uIGFpKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYWk/KHRoaXMudj10LHRoaXMpOm5ldyBhaSh0KX1mdW5jdGlvbiBaaih0LGUsYSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciByPWEuYXBwbHkodCxlfHxbXSksaSxvPVtdO3JldHVybiBpPU9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yPT0iZnVuY3Rpb24iP0FzeW5jSXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpLGwoIm5leHQiKSxsKCJ0aHJvdyIpLGwoInJldHVybiIscyksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBzKGcpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGIpLnRoZW4oZyxkKX19ZnVuY3Rpb24gbChnLGIpe3JbZ10mJihpW2ddPWZ1bmN0aW9uKHgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihtLHYpe28ucHVzaChbZyx4LG0sdl0pPjF8fGYoZyx4KX0pfSxiJiYoaVtnXT1iKGlbZ10pKSl9ZnVuY3Rpb24gZihnLGIpe3RyeXtjKHJbZ10oYikpfWNhdGNoKHgpe2gob1swXVszXSx4KX19ZnVuY3Rpb24gYyhnKXtnLnZhbHVlIGluc3RhbmNlb2YgYWk/UHJvbWlzZS5yZXNvbHZlKGcudmFsdWUudikudGhlbih1LGQpOmgob1swXVsyXSxnKX1mdW5jdGlvbiB1KGcpe2YoIm5leHQiLGcpfWZ1bmN0aW9uIGQoZyl7ZigidGhyb3ciLGcpfWZ1bmN0aW9uIGgoZyxiKXtnKGIpLG8uc2hpZnQoKSxvLmxlbmd0aCYmZihvWzBdWzBdLG9bMF1bMV0pfX1mdW5jdGlvbiBoUnQodCl7dmFyIGUsYTtyZXR1cm4gZT17fSxyKCJuZXh0IikscigidGhyb3ciLGZ1bmN0aW9uKGkpe3Rocm93IGl9KSxyKCJyZXR1cm4iKSxlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZTtmdW5jdGlvbiByKGksbyl7ZVtpXT10W2ldP2Z1bmN0aW9uKHMpe3JldHVybihhPSFhKT97dmFsdWU6YWkodFtpXShzKSksZG9uZTohMX06bz9vKHMpOnN9Om99fWZ1bmN0aW9uIFhqKHQpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgZT10W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSxhO3JldHVybiBlP2UuY2FsbCh0KToodD10eXBlb2YgaDI9PSJmdW5jdGlvbiI/aDIodCk6dFtTeW1ib2wuaXRlcmF0b3JdKCksYT17fSxyKCJuZXh0IikscigidGhyb3ciKSxyKCJyZXR1cm4iKSxhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxhKTtmdW5jdGlvbiByKG8pe2Fbb109dFtvXSYmZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsZil7cz10W29dKHMpLGkobCxmLHMuZG9uZSxzLnZhbHVlKX0pfX1mdW5jdGlvbiBpKG8scyxsLGYpe1Byb21pc2UucmVzb2x2ZShmKS50aGVuKGZ1bmN0aW9uKGMpe28oe3ZhbHVlOmMsZG9uZTpsfSl9LHMpfX1mdW5jdGlvbiBtUnQodCxlKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyYXciLHt2YWx1ZTplfSk6dC5yYXc9ZSx0fWZ1bmN0aW9uIHhSdCh0KXtpZih0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIGU9e307aWYodCE9bnVsbClmb3IodmFyIGE9R2oodCkscj0wO3I8YS5sZW5ndGg7cisrKWFbcl0hPT0iZGVmYXVsdCImJldqKGUsdCxhW3JdKTtyZXR1cm4gZ1J0KGUsdCksZX1mdW5jdGlvbiBiUnQodCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fWZ1bmN0aW9uIHZSdCh0LGUsYSxyKXtpZihhPT09ImEiJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIj90IT09ZXx8IXI6IWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiBhPT09Im0iP3I6YT09PSJhIj9yLmNhbGwodCk6cj9yLnZhbHVlOmUuZ2V0KHQpfWZ1bmN0aW9uIHlSdCh0LGUsYSxyLGkpe2lmKHI9PT0ibSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlIik7aWYocj09PSJhIiYmIWkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyIik7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiI/dCE9PWV8fCFpOiFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiByPT09ImEiP2kuY2FsbCh0LGEpOmk/aS52YWx1ZT1hOmUuc2V0KHQsYSksYX1mdW5jdGlvbiB3UnQodCxlKXtpZihlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdCIpO3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj9lPT09dDp0LmhhcyhlKX1mdW5jdGlvbiBNUnQodCxlLGEpe2lmKGUhPW51bGwpe2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmdHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkLiIpO3ZhciByLGk7aWYoYSl7aWYoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC4iKTtyPWVbU3ltYm9sLmFzeW5jRGlzcG9zZV19aWYocj09PXZvaWQgMCl7aWYoIVN5bWJvbC5kaXNwb3NlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLiIpO3I9ZVtTeW1ib2wuZGlzcG9zZV0sYSYmKGk9cil9aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLiIpO2kmJihyPWZ1bmN0aW9uKCl7dHJ5e2kuY2FsbCh0aGlzKX1jYXRjaChvKXtyZXR1cm4gUHJvbWlzZS5yZWplY3Qobyl9fSksdC5zdGFjay5wdXNoKHt2YWx1ZTplLGRpc3Bvc2U6cixhc3luYzphfSl9ZWxzZSBhJiZ0LnN0YWNrLnB1c2goe2FzeW5jOiEwfSk7cmV0dXJuIGV9ZnVuY3Rpb24ga1J0KHQpe2Z1bmN0aW9uIGUobyl7dC5lcnJvcj10Lmhhc0Vycm9yP25ldyB6UnQobyx0LmVycm9yLCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuIik6byx0Lmhhc0Vycm9yPSEwfXZhciBhLHI9MDtmdW5jdGlvbiBpKCl7Zm9yKDthPXQuc3RhY2sucG9wKCk7KXRyeXtpZighYS5hc3luYyYmcj09PTEpcmV0dXJuIHI9MCx0LnN0YWNrLnB1c2goYSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihpKTtpZihhLmRpc3Bvc2Upe3ZhciBvPWEuZGlzcG9zZS5jYWxsKGEudmFsdWUpO2lmKGEuYXN5bmMpcmV0dXJuIHJ8PTIsUHJvbWlzZS5yZXNvbHZlKG8pLnRoZW4oaSxmdW5jdGlvbihzKXtyZXR1cm4gZShzKSxpKCl9KX1lbHNlIHJ8PTF9Y2F0Y2gocyl7ZShzKX1pZihyPT09MSlyZXR1cm4gdC5oYXNFcnJvcj9Qcm9taXNlLnJlamVjdCh0LmVycm9yKTpQcm9taXNlLnJlc29sdmUoKTtpZih0Lmhhc0Vycm9yKXRocm93IHQuZXJyb3J9cmV0dXJuIGkoKX1mdW5jdGlvbiBTUnQodCxlKXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciJiYvXlwuXC4/XC8vLnRlc3QodCk/dC5yZXBsYWNlKC9cLih0c3gpJHwoKD86XC5kKT8pKCg/OlwuW14uL10rPyk/KVwuKFtjbV0/KXRzJC9pLGZ1bmN0aW9uKGEscixpLG8scyl7cmV0dXJuIHI/ZT8iLmpzeCI6Ii5qcyI6aSYmKCFvfHwhcyk/YTppK28rIi4iK3MudG9Mb3dlckNhc2UoKSsianMifSk6dH12YXIgVWosamosV2osZ1J0LEdqLHpSdCxhMDEsWnQ9bigoKT0+e1VqPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVqPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihhLHIpe2EuX19wcm90b19fPXJ9fHxmdW5jdGlvbihhLHIpe2Zvcih2YXIgaSBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGkpJiYoYVtpXT1yW2ldKX0sVWoodCxlKX07amo9ZnVuY3Rpb24oKXtyZXR1cm4gamo9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciBhLHI9MSxpPWFyZ3VtZW50cy5sZW5ndGg7cjxpO3IrKyl7YT1hcmd1bWVudHNbcl07Zm9yKHZhciBvIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsbykmJihlW29dPWFbb10pfXJldHVybiBlfSxqai5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O1dqPU9iamVjdC5jcmVhdGU/KGZ1bmN0aW9uKHQsZSxhLHIpe3I9PT12b2lkIDAmJihyPWEpO3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxhKTsoIWl8fCgiZ2V0ImluIGk/IWUuX19lc01vZHVsZTppLndyaXRhYmxlfHxpLmNvbmZpZ3VyYWJsZSkpJiYoaT17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVthXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLGkpfSk6KGZ1bmN0aW9uKHQsZSxhLHIpe3I9PT12b2lkIDAmJihyPWEpLHRbcl09ZVthXX0pO2dSdD1PYmplY3QuY3JlYXRlPyhmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSl9KTpmdW5jdGlvbih0LGUpe3QuZGVmYXVsdD1lfSxHaj1mdW5jdGlvbih0KXtyZXR1cm4gR2o9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3ZhciBhPVtdO2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYoYVthLmxlbmd0aF09cik7cmV0dXJuIGF9LEdqKHQpfTt6UnQ9dHlwZW9mIFN1cHByZXNzZWRFcnJvcj09ImZ1bmN0aW9uIj9TdXBwcmVzc2VkRXJyb3I6ZnVuY3Rpb24odCxlLGEpe3ZhciByPW5ldyBFcnJvcihhKTtyZXR1cm4gci5uYW1lPSJTdXBwcmVzc2VkRXJyb3IiLHIuZXJyb3I9dCxyLnN1cHByZXNzZWQ9ZSxyfTthMDE9e19fZXh0ZW5kczp2dCxfX2Fzc2lnbjpqaixfX3Jlc3Q6clJ0LF9fZGVjb3JhdGU6aVJ0LF9fcGFyYW06b1J0LF9fZXNEZWNvcmF0ZTpzUnQsX19ydW5Jbml0aWFsaXplcnM6blJ0LF9fcHJvcEtleTpsUnQsX19zZXRGdW5jdGlvbk5hbWU6Y1J0LF9fbWV0YWRhdGE6ZFJ0LF9fYXdhaXRlcjpZaixfX2dlbmVyYXRvcjpJNSxfX2NyZWF0ZUJpbmRpbmc6V2osX19leHBvcnRTdGFyOmZSdCxfX3ZhbHVlczpoMixfX3JlYWQ6XzEsX19zcHJlYWQ6dVJ0LF9fc3ByZWFkQXJyYXlzOnBSdCxfX3NwcmVhZEFycmF5OmUyLF9fYXdhaXQ6YWksX19hc3luY0dlbmVyYXRvcjpaaixfX2FzeW5jRGVsZWdhdG9yOmhSdCxfX2FzeW5jVmFsdWVzOlhqLF9fbWFrZVRlbXBsYXRlT2JqZWN0Om1SdCxfX2ltcG9ydFN0YXI6eFJ0LF9faW1wb3J0RGVmYXVsdDpiUnQsX19jbGFzc1ByaXZhdGVGaWVsZEdldDp2UnQsX19jbGFzc1ByaXZhdGVGaWVsZFNldDp5UnQsX19jbGFzc1ByaXZhdGVGaWVsZEluOndSdCxfX2FkZERpc3Bvc2FibGVSZXNvdXJjZTpNUnQsX19kaXNwb3NlUmVzb3VyY2VzOmtSdCxfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbjpTUnR9fSk7ZnVuY3Rpb24gbHQodCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24ifXZhciBqMT1uKCgpPT57fSk7ZnVuY3Rpb24gWTIodCl7dmFyIGU9ZnVuY3Rpb24ocil7RXJyb3IuY2FsbChyKSxyLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrfSxhPXQoZSk7cmV0dXJuIGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hLGF9dmFyIGxvPW4oKCk9Pnt9KTt2YXIgRjUsUWo9bigoKT0+e2xvKCk7RjU9WTIoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3QodGhpcyksdGhpcy5tZXNzYWdlPWE/YS5sZW5ndGgrYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOgpgK2EubWFwKGZ1bmN0aW9uKHIsaSl7cmV0dXJuIGkrMSsiKSAiK3IudG9TdHJpbmcoKX0pLmpvaW4oYAogIGApOiIiLHRoaXMubmFtZT0iVW5zdWJzY3JpcHRpb25FcnJvciIsdGhpcy5lcnJvcnM9YX19KX0pO2Z1bmN0aW9uIFJhKHQsZSl7aWYodCl7dmFyIGE9dC5pbmRleE9mKGUpOzA8PWEmJnQuc3BsaWNlKGEsMSl9fXZhciBiYz1uKCgpPT57fSk7ZnVuY3Rpb24gcEYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBrMXx8dCYmImNsb3NlZCJpbiB0JiZsdCh0LnJlbW92ZSkmJmx0KHQuYWRkKSYmbHQodC51bnN1YnNjcmliZSl9ZnVuY3Rpb24gZVBlKHQpe2x0KHQpP3QoKTp0LnVuc3Vic2NyaWJlKCl9dmFyIGsxLEtqLHhyPW4oKCk9PntadCgpO2oxKCk7UWooKTtiYygpO2sxPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dGhpcy5pbml0aWFsVGVhcmRvd249ZSx0aGlzLmNsb3NlZD0hMSx0aGlzLl9wYXJlbnRhZ2U9bnVsbCx0aGlzLl9maW5hbGl6ZXJzPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIGUsYSxyLGksbztpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO3ZhciBzPXRoaXMuX3BhcmVudGFnZTtpZihzKWlmKHRoaXMuX3BhcmVudGFnZT1udWxsLEFycmF5LmlzQXJyYXkocykpdHJ5e2Zvcih2YXIgbD1oMihzKSxmPWwubmV4dCgpOyFmLmRvbmU7Zj1sLm5leHQoKSl7dmFyIGM9Zi52YWx1ZTtjLnJlbW92ZSh0aGlzKX19Y2F0Y2goeCl7ZT17ZXJyb3I6eH19ZmluYWxseXt0cnl7ZiYmIWYuZG9uZSYmKGE9bC5yZXR1cm4pJiZhLmNhbGwobCl9ZmluYWxseXtpZihlKXRocm93IGUuZXJyb3J9fWVsc2Ugcy5yZW1vdmUodGhpcyk7dmFyIHU9dGhpcy5pbml0aWFsVGVhcmRvd247aWYobHQodSkpdHJ5e3UoKX1jYXRjaCh4KXtvPXggaW5zdGFuY2VvZiBGNT94LmVycm9yczpbeF19dmFyIGQ9dGhpcy5fZmluYWxpemVycztpZihkKXt0aGlzLl9maW5hbGl6ZXJzPW51bGw7dHJ5e2Zvcih2YXIgaD1oMihkKSxnPWgubmV4dCgpOyFnLmRvbmU7Zz1oLm5leHQoKSl7dmFyIGI9Zy52YWx1ZTt0cnl7ZVBlKGIpfWNhdGNoKHgpe289bz8/W10seCBpbnN0YW5jZW9mIEY1P289ZTIoZTIoW10sXzEobykpLF8xKHguZXJyb3JzKSk6by5wdXNoKHgpfX19Y2F0Y2goeCl7cj17ZXJyb3I6eH19ZmluYWxseXt0cnl7ZyYmIWcuZG9uZSYmKGk9aC5yZXR1cm4pJiZpLmNhbGwoaCl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fX1pZihvKXRocm93IG5ldyBGNShvKX19LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt2YXIgYTtpZihlJiZlIT09dGhpcylpZih0aGlzLmNsb3NlZCllUGUoZSk7ZWxzZXtpZihlIGluc3RhbmNlb2YgdCl7aWYoZS5jbG9zZWR8fGUuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47ZS5fYWRkUGFyZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPShhPXRoaXMuX2ZpbmFsaXplcnMpIT09bnVsbCYmYSE9PXZvaWQgMD9hOltdKS5wdXNoKGUpfX0sdC5wcm90b3R5cGUuX2hhc1BhcmVudD1mdW5jdGlvbihlKXt2YXIgYT10aGlzLl9wYXJlbnRhZ2U7cmV0dXJuIGE9PT1lfHxBcnJheS5pc0FycmF5KGEpJiZhLmluY2x1ZGVzKGUpfSx0LnByb3RvdHlwZS5fYWRkUGFyZW50PWZ1bmN0aW9uKGUpe3ZhciBhPXRoaXMuX3BhcmVudGFnZTt0aGlzLl9wYXJlbnRhZ2U9QXJyYXkuaXNBcnJheShhKT8oYS5wdXNoKGUpLGEpOmE/W2EsZV06ZX0sdC5wcm90b3R5cGUuX3JlbW92ZVBhcmVudD1mdW5jdGlvbihlKXt2YXIgYT10aGlzLl9wYXJlbnRhZ2U7YT09PWU/dGhpcy5fcGFyZW50YWdlPW51bGw6QXJyYXkuaXNBcnJheShhKSYmUmEoYSxlKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3ZhciBhPXRoaXMuX2ZpbmFsaXplcnM7YSYmUmEoYSxlKSxlIGluc3RhbmNlb2YgdCYmZS5fcmVtb3ZlUGFyZW50KHRoaXMpfSx0LkVNUFRZPShmdW5jdGlvbigpe3ZhciBlPW5ldyB0O3JldHVybiBlLmNsb3NlZD0hMCxlfSkoKSx0fSkoKSxLaj1rMS5FTVBUWX0pO3ZhciB5YSx2Yz1uKCgpPT57eWE9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDohMX19KTt2YXIgeWMsSmo9bigoKT0+e1p0KCk7eWM9e3NldFRpbWVvdXQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGE9W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspYVtyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT15Yy5kZWxlZ2F0ZTtyZXR1cm4gaT8uc2V0VGltZW91dD9pLnNldFRpbWVvdXQuYXBwbHkoaSxlMihbdCxlXSxfMShhKSkpOnNldFRpbWVvdXQuYXBwbHkodm9pZCAwLGUyKFt0LGVdLF8xKGEpKSl9LGNsZWFyVGltZW91dDpmdW5jdGlvbih0KXt2YXIgZT15Yy5kZWxlZ2F0ZTtyZXR1cm4oZT8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKHQpfSxkZWxlZ2F0ZTp2b2lkIDB9fSk7ZnVuY3Rpb24gaEYodCl7eWMuc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlPXlhLm9uVW5oYW5kbGVkRXJyb3I7aWYoZSllKHQpO2Vsc2UgdGhyb3cgdH0pfXZhciBlVz1uKCgpPT57dmMoKTtKaigpfSk7ZnVuY3Rpb24gd2EoKXt9dmFyIE1zPW4oKCk9Pnt9KTtmdW5jdGlvbiBhUGUodCl7cmV0dXJuIHRXKCJFIix2b2lkIDAsdCl9ZnVuY3Rpb24gclBlKHQpe3JldHVybiB0VygiTiIsdCx2b2lkIDApfWZ1bmN0aW9uIHRXKHQsZSxhKXtyZXR1cm57a2luZDp0LHZhbHVlOmUsZXJyb3I6YX19dmFyIHRQZSxpUGU9bigoKT0+e3RQZT0oZnVuY3Rpb24oKXtyZXR1cm4gdFcoIkMiLHZvaWQgMCx2b2lkIDApfSkoKX0pO2Z1bmN0aW9uIHdjKHQpe2lmKHlhLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpe3ZhciBlPSF6cztpZihlJiYoenM9e2Vycm9yVGhyb3duOiExLGVycm9yOm51bGx9KSx0KCksZSl7dmFyIGE9enMscj1hLmVycm9yVGhyb3duLGk9YS5lcnJvcjtpZih6cz1udWxsLHIpdGhyb3cgaX19ZWxzZSB0KCl9ZnVuY3Rpb24gb1BlKHQpe3lhLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJnpzJiYoenMuZXJyb3JUaHJvd249ITAsenMuZXJyb3I9dCl9dmFyIHpzLG1GPW4oKCk9Pnt2YygpO3pzPW51bGx9KTtmdW5jdGlvbiBhVyh0LGUpe3JldHVybiBDUnQuY2FsbCh0LGUpfWZ1bmN0aW9uIGdGKHQpe3lhLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/b1BlKHQpOmhGKHQpfWZ1bmN0aW9uIFRSdCh0KXt0aHJvdyB0fWZ1bmN0aW9uIHJXKHQsZSl7dmFyIGE9eWEub25TdG9wcGVkTm90aWZpY2F0aW9uO2EmJnljLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gYSh0LGUpfSl9dmFyIGtzLENSdCxMUnQsTzUsX1J0LHhGPW4oKCk9PntadCgpO2oxKCk7eHIoKTt2YygpO2VXKCk7TXMoKTtpUGUoKTtKaigpO21GKCk7a3M9KGZ1bmN0aW9uKHQpe3Z0KGUsdCk7ZnVuY3Rpb24gZShhKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuaXNTdG9wcGVkPSExLGE/KHIuZGVzdGluYXRpb249YSxwRihhKSYmYS5hZGQocikpOnIuZGVzdGluYXRpb249X1J0LHJ9cmV0dXJuIGUuY3JlYXRlPWZ1bmN0aW9uKGEscixpKXtyZXR1cm4gbmV3IE81KGEscixpKX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihhKXt0aGlzLmlzU3RvcHBlZD9yVyhyUGUoYSksdGhpcyk6dGhpcy5fbmV4dChhKX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oYSl7dGhpcy5pc1N0b3BwZWQ/clcoYVBlKGEpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcihhKSl9LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5pc1N0b3BwZWQ/clcodFBlLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksdGhpcy5kZXN0aW5hdGlvbj1udWxsKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24oYSl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGEpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24oYSl7dHJ5e3RoaXMuZGVzdGluYXRpb24uZXJyb3IoYSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX0sZX0pKGsxKSxDUnQ9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7TFJ0PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dGhpcy5wYXJ0aWFsT2JzZXJ2ZXI9ZX1yZXR1cm4gdC5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihlKXt2YXIgYT10aGlzLnBhcnRpYWxPYnNlcnZlcjtpZihhLm5leHQpdHJ5e2EubmV4dChlKX1jYXRjaChyKXtnRihyKX19LHQucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe3ZhciBhPXRoaXMucGFydGlhbE9ic2VydmVyO2lmKGEuZXJyb3IpdHJ5e2EuZXJyb3IoZSl9Y2F0Y2gocil7Z0Yocil9ZWxzZSBnRihlKX0sdC5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcnRpYWxPYnNlcnZlcjtpZihlLmNvbXBsZXRlKXRyeXtlLmNvbXBsZXRlKCl9Y2F0Y2goYSl7Z0YoYSl9fSx0fSkoKSxPNT0oZnVuY3Rpb24odCl7dnQoZSx0KTtmdW5jdGlvbiBlKGEscixpKXt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXMscztpZihsdChhKXx8IWEpcz17bmV4dDphPz92b2lkIDAsZXJyb3I6cj8/dm9pZCAwLGNvbXBsZXRlOmk/P3ZvaWQgMH07ZWxzZXt2YXIgbDtvJiZ5YS51c2VEZXByZWNhdGVkTmV4dENvbnRleHQ/KGw9T2JqZWN0LmNyZWF0ZShhKSxsLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7cmV0dXJuIG8udW5zdWJzY3JpYmUoKX0scz17bmV4dDphLm5leHQmJmFXKGEubmV4dCxsKSxlcnJvcjphLmVycm9yJiZhVyhhLmVycm9yLGwpLGNvbXBsZXRlOmEuY29tcGxldGUmJmFXKGEuY29tcGxldGUsbCl9KTpzPWF9cmV0dXJuIG8uZGVzdGluYXRpb249bmV3IExSdChzKSxvfXJldHVybiBlfSkoa3MpO19SdD17Y2xvc2VkOiEwLG5leHQ6d2EsZXJyb3I6VFJ0LGNvbXBsZXRlOndhfX0pO3ZhciBTcyxCNT1uKCgpPT57U3M9KGZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIn0pKCl9KTtmdW5jdGlvbiBSNSh0KXtyZXR1cm4gdH12YXIgYkY9bigoKT0+e30pO2Z1bmN0aW9uIEFSdCgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gaVcodCl9ZnVuY3Rpb24gaVcodCl7cmV0dXJuIHQubGVuZ3RoPT09MD9SNTp0Lmxlbmd0aD09PTE/dFswXTpmdW5jdGlvbihhKXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24ocixpKXtyZXR1cm4gaShyKX0sYSl9fXZhciBvVz1uKCgpPT57YkYoKX0pO2Z1bmN0aW9uIHNQZSh0KXt2YXIgZTtyZXR1cm4oZT10Pz95YS5Qcm9taXNlKSE9PW51bGwmJmUhPT12b2lkIDA/ZTpQcm9taXNlfWZ1bmN0aW9uICRSdCh0KXtyZXR1cm4gdCYmbHQodC5uZXh0KSYmbHQodC5lcnJvcikmJmx0KHQuY29tcGxldGUpfWZ1bmN0aW9uIERSdCh0KXtyZXR1cm4gdCYmdCBpbnN0YW5jZW9mIGtzfHwkUnQodCkmJnBGKHQpfXZhciB4dCxaMj1uKCgpPT57eEYoKTt4cigpO0I1KCk7b1coKTt2YygpO2oxKCk7bUYoKTt4dD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2UmJih0aGlzLl9zdWJzY3JpYmU9ZSl9cmV0dXJuIHQucHJvdG90eXBlLmxpZnQ9ZnVuY3Rpb24oZSl7dmFyIGE9bmV3IHQ7cmV0dXJuIGEuc291cmNlPXRoaXMsYS5vcGVyYXRvcj1lLGF9LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlLGEscil7dmFyIGk9dGhpcyxvPURSdChlKT9lOm5ldyBPNShlLGEscik7cmV0dXJuIHdjKGZ1bmN0aW9uKCl7dmFyIHM9aSxsPXMub3BlcmF0b3IsZj1zLnNvdXJjZTtvLmFkZChsP2wuY2FsbChvLGYpOmY/aS5fc3Vic2NyaWJlKG8pOmkuX3RyeVN1YnNjcmliZShvKSl9KSxvfSx0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKGUpfWNhdGNoKGEpe2UuZXJyb3IoYSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUsYSl7dmFyIHI9dGhpcztyZXR1cm4gYT1zUGUoYSksbmV3IGEoZnVuY3Rpb24oaSxvKXt2YXIgcz1uZXcgTzUoe25leHQ6ZnVuY3Rpb24obCl7dHJ5e2UobCl9Y2F0Y2goZil7byhmKSxzLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpvLGNvbXBsZXRlOml9KTtyLnN1YnNjcmliZShzKX0pfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3ZhciBhO3JldHVybihhPXRoaXMuc291cmNlKT09PW51bGx8fGE9PT12b2lkIDA/dm9pZCAwOmEuc3Vic2NyaWJlKGUpfSx0LnByb3RvdHlwZVtTc109ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxhPTA7YTxhcmd1bWVudHMubGVuZ3RoO2ErKyllW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gaVcoZSkodGhpcyl9LHQucHJvdG90eXBlLnRvUHJvbWlzZT1mdW5jdGlvbihlKXt2YXIgYT10aGlzO3JldHVybiBlPXNQZShlKSxuZXcgZShmdW5jdGlvbihyLGkpe3ZhciBvO2Euc3Vic2NyaWJlKGZ1bmN0aW9uKHMpe3JldHVybiBvPXN9LGZ1bmN0aW9uKHMpe3JldHVybiBpKHMpfSxmdW5jdGlvbigpe3JldHVybiByKG8pfSl9KX0sdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KGUpfSx0fSkoKX0pO2Z1bmN0aW9uIHNXKHQpe3JldHVybiBsdCh0Py5saWZ0KX1mdW5jdGlvbiBWdCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoc1coZSkpcmV0dXJuIGUubGlmdChmdW5jdGlvbihhKXt0cnl7cmV0dXJuIHQoYSx0aGlzKX1jYXRjaChyKXt0aGlzLmVycm9yKHIpfX0pO3Rocm93IG5ldyBUeXBlRXJyb3IoIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlIil9fXZhciB0Mj1uKCgpPT57ajEoKX0pO2Z1bmN0aW9uIFB0KHQsZSxhLHIsaSl7cmV0dXJuIG5ldyBuUGUodCxlLGEscixpKX12YXIgblBlLFAyPW4oKCk9PntadCgpO3hGKCk7blBlPShmdW5jdGlvbih0KXt2dChlLHQpO2Z1bmN0aW9uIGUoYSxyLGksbyxzLGwpe3ZhciBmPXQuY2FsbCh0aGlzLGEpfHx0aGlzO3JldHVybiBmLm9uRmluYWxpemU9cyxmLnNob3VsZFVuc3Vic2NyaWJlPWwsZi5fbmV4dD1yP2Z1bmN0aW9uKGMpe3RyeXtyKGMpfWNhdGNoKHUpe2EuZXJyb3IodSl9fTp0LnByb3RvdHlwZS5fbmV4dCxmLl9lcnJvcj1vP2Z1bmN0aW9uKGMpe3RyeXtvKGMpfWNhdGNoKHUpe2EuZXJyb3IodSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTp0LnByb3RvdHlwZS5fZXJyb3IsZi5fY29tcGxldGU9aT9mdW5jdGlvbigpe3RyeXtpKCl9Y2F0Y2goYyl7YS5lcnJvcihjKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnQucHJvdG90eXBlLl9jb21wbGV0ZSxmfXJldHVybiBlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciBhO2lmKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlfHx0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpe3ZhciByPXRoaXMuY2xvc2VkO3QucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIXImJigoYT10aGlzLm9uRmluYWxpemUpPT09bnVsbHx8YT09PXZvaWQgMHx8YS5jYWxsKHRoaXMpKX19LGV9KShrcyl9KTtmdW5jdGlvbiB2Rigpe3JldHVybiBWdChmdW5jdGlvbih0LGUpe3ZhciBhPW51bGw7dC5fcmVmQ291bnQrKzt2YXIgcj1QdChlLHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7aWYoIXR8fHQuX3JlZkNvdW50PD0wfHwwPC0tdC5fcmVmQ291bnQpe2E9bnVsbDtyZXR1cm59dmFyIGk9dC5fY29ubmVjdGlvbixvPWE7YT1udWxsLGkmJighb3x8aT09PW8pJiZpLnVuc3Vic2NyaWJlKCksZS51bnN1YnNjcmliZSgpfSk7dC5zdWJzY3JpYmUociksci5jbG9zZWR8fChhPXQuY29ubmVjdCgpKX0pfXZhciB5Rj1uKCgpPT57dDIoKTtQMigpfSk7dmFyIGxQZSxjUGU9bigoKT0+e1p0KCk7WjIoKTt4cigpO3lGKCk7UDIoKTt0MigpO2xQZT0oZnVuY3Rpb24odCl7dnQoZSx0KTtmdW5jdGlvbiBlKGEscil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLnNvdXJjZT1hLGkuc3ViamVjdEZhY3Rvcnk9cixpLl9zdWJqZWN0PW51bGwsaS5fcmVmQ291bnQ9MCxpLl9jb25uZWN0aW9uPW51bGwsc1coYSkmJihpLmxpZnQ9YS5saWZ0KSxpfXJldHVybiBlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUoYSl9LGUucHJvdG90eXBlLmdldFN1YmplY3Q9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9zdWJqZWN0O3JldHVybighYXx8YS5pc1N0b3BwZWQpJiYodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9LGUucHJvdG90eXBlLl90ZWFyZG93bj1mdW5jdGlvbigpe3RoaXMuX3JlZkNvdW50PTA7dmFyIGE9dGhpcy5fY29ubmVjdGlvbjt0aGlzLl9zdWJqZWN0PXRoaXMuX2Nvbm5lY3Rpb249bnVsbCxhPy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5jb25uZWN0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxyPXRoaXMuX2Nvbm5lY3Rpb247aWYoIXIpe3I9dGhpcy5fY29ubmVjdGlvbj1uZXcgazE7dmFyIGk9dGhpcy5nZXRTdWJqZWN0KCk7ci5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKFB0KGksdm9pZCAwLGZ1bmN0aW9uKCl7YS5fdGVhcmRvd24oKSxpLmNvbXBsZXRlKCl9LGZ1bmN0aW9uKG8pe2EuX3RlYXJkb3duKCksaS5lcnJvcihvKX0sZnVuY3Rpb24oKXtyZXR1cm4gYS5fdGVhcmRvd24oKX0pKSksci5jbG9zZWQmJih0aGlzLl9jb25uZWN0aW9uPW51bGwscj1rMS5FTVBUWSl9cmV0dXJuIHJ9LGUucHJvdG90eXBlLnJlZkNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHZGKCkodGhpcyl9LGV9KSh4dCl9KTt2YXIgblcsZFBlPW4oKCk9PntuVz17bm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5XLmRlbGVnYXRlfHxwZXJmb3JtYW5jZSkubm93KCl9LGRlbGVnYXRlOnZvaWQgMH19KTt2YXIgcmksbFc9bigoKT0+e1p0KCk7eHIoKTtyaT17c2NoZWR1bGU6ZnVuY3Rpb24odCl7dmFyIGU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9Y2FuY2VsQW5pbWF0aW9uRnJhbWUscj1yaS5kZWxlZ2F0ZTtyJiYoZT1yLnJlcXVlc3RBbmltYXRpb25GcmFtZSxhPXIuY2FuY2VsQW5pbWF0aW9uRnJhbWUpO3ZhciBpPWUoZnVuY3Rpb24obyl7YT12b2lkIDAsdChvKX0pO3JldHVybiBuZXcgazEoZnVuY3Rpb24oKXtyZXR1cm4gYT8uKGkpfSl9LHJlcXVlc3RBbmltYXRpb25GcmFtZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgYT1yaS5kZWxlZ2F0ZTtyZXR1cm4oYT8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpLmFwcGx5KHZvaWQgMCxlMihbXSxfMSh0KSkpfSxjYW5jZWxBbmltYXRpb25GcmFtZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgYT1yaS5kZWxlZ2F0ZTtyZXR1cm4oYT8uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNhbmNlbEFuaW1hdGlvbkZyYW1lKS5hcHBseSh2b2lkIDAsZTIoW10sXzEodCkpKX0sZGVsZWdhdGU6dm9pZCAwfX0pO2Z1bmN0aW9uIEVSdCh0KXtyZXR1cm4gdD9mUGUodCk6TlJ0fWZ1bmN0aW9uIGZQZSh0KXtyZXR1cm4gbmV3IHh0KGZ1bmN0aW9uKGUpe3ZhciBhPXR8fG5XLHI9YS5ub3coKSxpPTAsbz1mdW5jdGlvbigpe2UuY2xvc2VkfHwoaT1yaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24ocyl7aT0wO3ZhciBsPWEubm93KCk7ZS5uZXh0KHt0aW1lc3RhbXA6dD9sOnMsZWxhcHNlZDpsLXJ9KSxvKCl9KSl9O3JldHVybiBvKCksZnVuY3Rpb24oKXtpJiZyaS5jYW5jZWxBbmltYXRpb25GcmFtZShpKX19KX12YXIgTlJ0LHVQZT1uKCgpPT57WjIoKTtkUGUoKTtsVygpO05SdD1mUGUoKX0pO3ZhciBjVyxkVz1uKCgpPT57bG8oKTtjVz1ZMihmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0KHRoaXMpLHRoaXMubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLHRoaXMubWVzc2FnZT0ib2JqZWN0IHVuc3Vic2NyaWJlZCJ9fSl9KTt2YXIgWDIsZlcsSDU9bigoKT0+e1p0KCk7WjIoKTt4cigpO2RXKCk7YmMoKTttRigpO1gyPShmdW5jdGlvbih0KXt2dChlLHQpO2Z1bmN0aW9uIGUoKXt2YXIgYT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGEuY2xvc2VkPSExLGEuY3VycmVudE9ic2VydmVycz1udWxsLGEub2JzZXJ2ZXJzPVtdLGEuaXNTdG9wcGVkPSExLGEuaGFzRXJyb3I9ITEsYS50aHJvd25FcnJvcj1udWxsLGF9cmV0dXJuIGUucHJvdG90eXBlLmxpZnQ9ZnVuY3Rpb24oYSl7dmFyIHI9bmV3IGZXKHRoaXMsdGhpcyk7cmV0dXJuIHIub3BlcmF0b3I9YSxyfSxlLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZD1mdW5jdGlvbigpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBjV30sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihhKXt2YXIgcj10aGlzO3djKGZ1bmN0aW9uKCl7dmFyIGksbztpZihyLl90aHJvd0lmQ2xvc2VkKCksIXIuaXNTdG9wcGVkKXtyLmN1cnJlbnRPYnNlcnZlcnN8fChyLmN1cnJlbnRPYnNlcnZlcnM9QXJyYXkuZnJvbShyLm9ic2VydmVycykpO3RyeXtmb3IodmFyIHM9aDIoci5jdXJyZW50T2JzZXJ2ZXJzKSxsPXMubmV4dCgpOyFsLmRvbmU7bD1zLm5leHQoKSl7dmFyIGY9bC52YWx1ZTtmLm5leHQoYSl9fWNhdGNoKGMpe2k9e2Vycm9yOmN9fWZpbmFsbHl7dHJ5e2wmJiFsLmRvbmUmJihvPXMucmV0dXJuKSYmby5jYWxsKHMpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX19fSl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGEpe3ZhciByPXRoaXM7d2MoZnVuY3Rpb24oKXtpZihyLl90aHJvd0lmQ2xvc2VkKCksIXIuaXNTdG9wcGVkKXtyLmhhc0Vycm9yPXIuaXNTdG9wcGVkPSEwLHIudGhyb3duRXJyb3I9YTtmb3IodmFyIGk9ci5vYnNlcnZlcnM7aS5sZW5ndGg7KWkuc2hpZnQoKS5lcnJvcihhKX19KX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3djKGZ1bmN0aW9uKCl7aWYoYS5fdGhyb3dJZkNsb3NlZCgpLCFhLmlzU3RvcHBlZCl7YS5pc1N0b3BwZWQ9ITA7Zm9yKHZhciByPWEub2JzZXJ2ZXJzO3IubGVuZ3RoOylyLnNoaWZ0KCkuY29tcGxldGUoKX19KX0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJvYnNlcnZlZCIse2dldDpmdW5jdGlvbigpe3ZhciBhO3JldHVybigoYT10aGlzLm9ic2VydmVycyk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmxlbmd0aCk+MH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsYSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGEpLHRoaXMuX2lubmVyU3Vic2NyaWJlKGEpfSxlLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmU9ZnVuY3Rpb24oYSl7dmFyIHI9dGhpcyxpPXRoaXMsbz1pLmhhc0Vycm9yLHM9aS5pc1N0b3BwZWQsbD1pLm9ic2VydmVycztyZXR1cm4gb3x8cz9LajoodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsbC5wdXNoKGEpLG5ldyBrMShmdW5jdGlvbigpe3IuY3VycmVudE9ic2VydmVycz1udWxsLFJhKGwsYSl9KSl9LGUucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzPWZ1bmN0aW9uKGEpe3ZhciByPXRoaXMsaT1yLmhhc0Vycm9yLG89ci50aHJvd25FcnJvcixzPXIuaXNTdG9wcGVkO2k/YS5lcnJvcihvKTpzJiZhLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLmFzT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3ZhciBhPW5ldyB4dDtyZXR1cm4gYS5zb3VyY2U9dGhpcyxhfSxlLmNyZWF0ZT1mdW5jdGlvbihhLHIpe3JldHVybiBuZXcgZlcoYSxyKX0sZX0pKHh0KSxmVz0oZnVuY3Rpb24odCl7dnQoZSx0KTtmdW5jdGlvbiBlKGEscil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmRlc3RpbmF0aW9uPWEsaS5zb3VyY2U9cixpfXJldHVybiBlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGEpe3ZhciByLGk7KGk9KHI9dGhpcy5kZXN0aW5hdGlvbik9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLm5leHQpPT09bnVsbHx8aT09PXZvaWQgMHx8aS5jYWxsKHIsYSl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGEpe3ZhciByLGk7KGk9KHI9dGhpcy5kZXN0aW5hdGlvbik9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLmVycm9yKT09PW51bGx8fGk9PT12b2lkIDB8fGkuY2FsbChyLGEpfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciBhLHI7KHI9KGE9dGhpcy5kZXN0aW5hdGlvbik9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmNvbXBsZXRlKT09PW51bGx8fHI9PT12b2lkIDB8fHIuY2FsbChhKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbihhKXt2YXIgcixpO3JldHVybihpPShyPXRoaXMuc291cmNlKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuc3Vic2NyaWJlKGEpKSE9PW51bGwmJmkhPT12b2lkIDA/aTpLan0sZX0pKFgyKX0pO3ZhciBwUGUsaFBlPW4oKCk9PntadCgpO0g1KCk7cFBlPShmdW5jdGlvbih0KXt2dChlLHQpO2Z1bmN0aW9uIGUoYSl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl92YWx1ZT1hLHJ9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24oYSl7dmFyIHI9dC5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsYSk7cmV0dXJuIXIuY2xvc2VkJiZhLm5leHQodGhpcy5fdmFsdWUpLHJ9LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxyPWEuaGFzRXJyb3IsaT1hLnRocm93bkVycm9yLG89YS5fdmFsdWU7aWYocil0aHJvdyBpO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksb30sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihhKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyx0aGlzLl92YWx1ZT1hKX0sZX0pKFgyKX0pO3ZhciBxNSx1Vz1uKCgpPT57cTU9e25vdzpmdW5jdGlvbigpe3JldHVybihxNS5kZWxlZ2F0ZXx8RGF0ZSkubm93KCl9LGRlbGVnYXRlOnZvaWQgMH19KTt2YXIgd0YsbVBlPW4oKCk9PntadCgpO0g1KCk7dVcoKTt3Rj0oZnVuY3Rpb24odCl7dnQoZSx0KTtmdW5jdGlvbiBlKGEscixpKXthPT09dm9pZCAwJiYoYT0xLzApLHI9PT12b2lkIDAmJihyPTEvMCksaT09PXZvaWQgMCYmKGk9cTUpO3ZhciBvPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gby5fYnVmZmVyU2l6ZT1hLG8uX3dpbmRvd1RpbWU9cixvLl90aW1lc3RhbXBQcm92aWRlcj1pLG8uX2J1ZmZlcj1bXSxvLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsby5faW5maW5pdGVUaW1lV2luZG93PXI9PT0xLzAsby5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLGEpLG8uX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxyKSxvfXJldHVybiBlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGEpe3ZhciByPXRoaXMsaT1yLmlzU3RvcHBlZCxvPXIuX2J1ZmZlcixzPXIuX2luZmluaXRlVGltZVdpbmRvdyxsPXIuX3RpbWVzdGFtcFByb3ZpZGVyLGY9ci5fd2luZG93VGltZTtpfHwoby5wdXNoKGEpLCFzJiZvLnB1c2gobC5ub3coKStmKSksdGhpcy5fdHJpbUJ1ZmZlcigpLHQucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGEpfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKGEpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7Zm9yKHZhciByPXRoaXMuX2lubmVyU3Vic2NyaWJlKGEpLGk9dGhpcyxvPWkuX2luZmluaXRlVGltZVdpbmRvdyxzPWkuX2J1ZmZlcixsPXMuc2xpY2UoKSxmPTA7ZjxsLmxlbmd0aCYmIWEuY2xvc2VkO2YrPW8/MToyKWEubmV4dChsW2ZdKTtyZXR1cm4gdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhhKSxyfSxlLnByb3RvdHlwZS5fdHJpbUJ1ZmZlcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMscj1hLl9idWZmZXJTaXplLGk9YS5fdGltZXN0YW1wUHJvdmlkZXIsbz1hLl9idWZmZXIscz1hLl9pbmZpbml0ZVRpbWVXaW5kb3csbD0ocz8xOjIpKnI7aWYocjwxLzAmJmw8by5sZW5ndGgmJm8uc3BsaWNlKDAsby5sZW5ndGgtbCksIXMpe2Zvcih2YXIgZj1pLm5vdygpLGM9MCx1PTE7dTxvLmxlbmd0aCYmb1t1XTw9Zjt1Kz0yKWM9dTtjJiZvLnNwbGljZSgwLGMrMSl9fSxlfSkoWDIpfSk7dmFyIGdQZSx4UGU9bigoKT0+e1p0KCk7SDUoKTtnUGU9KGZ1bmN0aW9uKHQpe3Z0KGUsdCk7ZnVuY3Rpb24gZSgpe3ZhciBhPXQhPT1udWxsJiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gYS5fdmFsdWU9bnVsbCxhLl9oYXNWYWx1ZT0hMSxhLl9pc0NvbXBsZXRlPSExLGF9cmV0dXJuIGUucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzPWZ1bmN0aW9uKGEpe3ZhciByPXRoaXMsaT1yLmhhc0Vycm9yLG89ci5faGFzVmFsdWUscz1yLl92YWx1ZSxsPXIudGhyb3duRXJyb3IsZj1yLmlzU3RvcHBlZCxjPXIuX2lzQ29tcGxldGU7aT9hLmVycm9yKGwpOihmfHxjKSYmKG8mJmEubmV4dChzKSxhLmNvbXBsZXRlKCkpfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGEpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5fdmFsdWU9YSx0aGlzLl9oYXNWYWx1ZT0hMCl9LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxyPWEuX2hhc1ZhbHVlLGk9YS5fdmFsdWUsbz1hLl9pc0NvbXBsZXRlO298fCh0aGlzLl9pc0NvbXBsZXRlPSEwLHImJnQucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGkpLHQucHJvdG90eXBlLmNvbXBsZXRlLmNhbGwodGhpcykpfSxlfSkoWDIpfSk7dmFyIHBXLGJQZT1uKCgpPT57WnQoKTt4cigpO3BXPShmdW5jdGlvbih0KXt2dChlLHQpO2Z1bmN0aW9uIGUoYSxyKXtyZXR1cm4gdC5jYWxsKHRoaXMpfHx0aGlzfXJldHVybiBlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihhLHIpe3JldHVybiByPT09dm9pZCAwJiYocj0wKSx0aGlzfSxlfSkoazEpfSk7dmFyIFY1LHZQZT1uKCgpPT57WnQoKTtWNT17c2V0SW50ZXJ2YWw6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGE9W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspYVtyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT1WNS5kZWxlZ2F0ZTtyZXR1cm4gaT8uc2V0SW50ZXJ2YWw/aS5zZXRJbnRlcnZhbC5hcHBseShpLGUyKFt0LGVdLF8xKGEpKSk6c2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLGUyKFt0LGVdLF8xKGEpKSl9LGNsZWFySW50ZXJ2YWw6ZnVuY3Rpb24odCl7dmFyIGU9VjUuZGVsZWdhdGU7cmV0dXJuKGU/LmNsZWFySW50ZXJ2YWx8fGNsZWFySW50ZXJ2YWwpKHQpfSxkZWxlZ2F0ZTp2b2lkIDB9fSk7dmFyIEhhLE1jPW4oKCk9PntadCgpO2JQZSgpO3ZQZSgpO2JjKCk7SGE9KGZ1bmN0aW9uKHQpe3Z0KGUsdCk7ZnVuY3Rpb24gZShhLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGEscil8fHRoaXM7cmV0dXJuIGkuc2NoZWR1bGVyPWEsaS53b3JrPXIsaS5wZW5kaW5nPSExLGl9cmV0dXJuIGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKGEscil7dmFyIGk7aWYocj09PXZvaWQgMCYmKHI9MCksdGhpcy5jbG9zZWQpcmV0dXJuIHRoaXM7dGhpcy5zdGF0ZT1hO3ZhciBvPXRoaXMuaWQscz10aGlzLnNjaGVkdWxlcjtyZXR1cm4gbyE9bnVsbCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChzLG8scikpLHRoaXMucGVuZGluZz0hMCx0aGlzLmRlbGF5PXIsdGhpcy5pZD0oaT10aGlzLmlkKSE9PW51bGwmJmkhPT12b2lkIDA/aTp0aGlzLnJlcXVlc3RBc3luY0lkKHMsdGhpcy5pZCxyKSx0aGlzfSxlLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZD1mdW5jdGlvbihhLHIsaSl7cmV0dXJuIGk9PT12b2lkIDAmJihpPTApLFY1LnNldEludGVydmFsKGEuZmx1c2guYmluZChhLHRoaXMpLGkpfSxlLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZD1mdW5jdGlvbihhLHIsaSl7aWYoaT09PXZvaWQgMCYmKGk9MCksaSE9bnVsbCYmdGhpcy5kZWxheT09PWkmJnRoaXMucGVuZGluZz09PSExKXJldHVybiByO3IhPW51bGwmJlY1LmNsZWFySW50ZXJ2YWwocil9LGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oYSxyKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7dGhpcy5wZW5kaW5nPSExO3ZhciBpPXRoaXMuX2V4ZWN1dGUoYSxyKTtpZihpKXJldHVybiBpO3RoaXMucGVuZGluZz09PSExJiZ0aGlzLmlkIT1udWxsJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLHRoaXMuaWQsbnVsbCkpfSxlLnByb3RvdHlwZS5fZXhlY3V0ZT1mdW5jdGlvbihhLHIpe3ZhciBpPSExLG87dHJ5e3RoaXMud29yayhhKX1jYXRjaChzKXtpPSEwLG89c3x8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoaSlyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLG99LGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY2xvc2VkKXt2YXIgYT10aGlzLHI9YS5pZCxpPWEuc2NoZWR1bGVyLG89aS5hY3Rpb25zO3RoaXMud29yaz10aGlzLnN0YXRlPXRoaXMuc2NoZWR1bGVyPW51bGwsdGhpcy5wZW5kaW5nPSExLFJhKG8sdGhpcyksciE9bnVsbCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChpLHIsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCx0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpfX0sZX0pKHBXKX0pO2Z1bmN0aW9uIHlQZSh0KXtyZXR1cm4gdCBpbiBNRj8oZGVsZXRlIE1GW3RdLCEwKTohMX12YXIgUFJ0LGhXLE1GLG1XLGo0MSx3UGU9bigoKT0+e1BSdD0xLE1GPXt9O21XPXtzZXRJbW1lZGlhdGU6ZnVuY3Rpb24odCl7dmFyIGU9UFJ0Kys7cmV0dXJuIE1GW2VdPSEwLGhXfHwoaFc9UHJvbWlzZS5yZXNvbHZlKCkpLGhXLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geVBlKGUpJiZ0KCl9KSxlfSxjbGVhckltbWVkaWF0ZTpmdW5jdGlvbih0KXt5UGUodCl9fSxqNDE9e3BlbmRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoTUYpLmxlbmd0aH19fSk7dmFyIElSdCxGUnQsVTUsTVBlPW4oKCk9PntadCgpO3dQZSgpO0lSdD1tVy5zZXRJbW1lZGlhdGUsRlJ0PW1XLmNsZWFySW1tZWRpYXRlLFU1PXtzZXRJbW1lZGlhdGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIGE9VTUuZGVsZWdhdGU7cmV0dXJuKGE/LnNldEltbWVkaWF0ZXx8SVJ0KS5hcHBseSh2b2lkIDAsZTIoW10sXzEodCkpKX0sY2xlYXJJbW1lZGlhdGU6ZnVuY3Rpb24odCl7dmFyIGU9VTUuZGVsZWdhdGU7cmV0dXJuKGU/LmNsZWFySW1tZWRpYXRlfHxGUnQpKHQpfSxkZWxlZ2F0ZTp2b2lkIDB9fSk7dmFyIGdXLHpQZT1uKCgpPT57WnQoKTtNYygpO01QZSgpO2dXPShmdW5jdGlvbih0KXt2dChlLHQpO2Z1bmN0aW9uIGUoYSxyKXt2YXIgaT10LmNhbGwodGhpcyxhLHIpfHx0aGlzO3JldHVybiBpLnNjaGVkdWxlcj1hLGkud29yaz1yLGl9cmV0dXJuIGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKGEscixpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9MCksaSE9PW51bGwmJmk+MD90LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsYSxyLGkpOihhLmFjdGlvbnMucHVzaCh0aGlzKSxhLl9zY2hlZHVsZWR8fChhLl9zY2hlZHVsZWQ9VTUuc2V0SW1tZWRpYXRlKGEuZmx1c2guYmluZChhLHZvaWQgMCkpKSl9LGUucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkPWZ1bmN0aW9uKGEscixpKXt2YXIgbztpZihpPT09dm9pZCAwJiYoaT0wKSxpIT1udWxsP2k+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHQucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkLmNhbGwodGhpcyxhLHIsaSk7dmFyIHM9YS5hY3Rpb25zO3IhPW51bGwmJigobz1zW3MubGVuZ3RoLTFdKT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8uaWQpIT09ciYmKFU1LmNsZWFySW1tZWRpYXRlKHIpLGEuX3NjaGVkdWxlZD09PXImJihhLl9zY2hlZHVsZWQ9dm9pZCAwKSl9LGV9KShIYSl9KTt2YXIgajUseFc9bigoKT0+e3VXKCk7ajU9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLGEpe2E9PT12b2lkIDAmJihhPXQubm93KSx0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3I9ZSx0aGlzLm5vdz1hfXJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihlLGEscil7cmV0dXJuIGE9PT12b2lkIDAmJihhPTApLG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyxlKS5zY2hlZHVsZShyLGEpfSx0Lm5vdz1xNS5ub3csdH0pKCl9KTt2YXIgcWEsemM9bigoKT0+e1p0KCk7eFcoKTtxYT0oZnVuY3Rpb24odCl7dnQoZSx0KTtmdW5jdGlvbiBlKGEscil7cj09PXZvaWQgMCYmKHI9ajUubm93KTt2YXIgaT10LmNhbGwodGhpcyxhLHIpfHx0aGlzO3JldHVybiBpLmFjdGlvbnM9W10saS5fYWN0aXZlPSExLGl9cmV0dXJuIGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGEpe3ZhciByPXRoaXMuYWN0aW9ucztpZih0aGlzLl9hY3RpdmUpe3IucHVzaChhKTtyZXR1cm59dmFyIGk7dGhpcy5fYWN0aXZlPSEwO2RvIGlmKGk9YS5leGVjdXRlKGEuc3RhdGUsYS5kZWxheSkpYnJlYWs7d2hpbGUoYT1yLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxpKXtmb3IoO2E9ci5zaGlmdCgpOylhLnVuc3Vic2NyaWJlKCk7dGhyb3cgaX19LGV9KShqNSl9KTt2YXIgYlcsa1BlPW4oKCk9PntadCgpO3pjKCk7Ylc9KGZ1bmN0aW9uKHQpe3Z0KGUsdCk7ZnVuY3Rpb24gZSgpe3JldHVybiB0IT09bnVsbCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGEpe3RoaXMuX2FjdGl2ZT0hMDt2YXIgcj10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDt2YXIgaT10aGlzLmFjdGlvbnMsbzthPWF8fGkuc2hpZnQoKTtkbyBpZihvPWEuZXhlY3V0ZShhLnN0YXRlLGEuZGVsYXkpKWJyZWFrO3doaWxlKChhPWlbMF0pJiZhLmlkPT09ciYmaS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsbyl7Zm9yKDsoYT1pWzBdKSYmYS5pZD09PXImJmkuc2hpZnQoKTspYS51bnN1YnNjcmliZSgpO3Rocm93IG99fSxlfSkocWEpfSk7dmFyIFNQZSxPUnQsQ1BlPW4oKCk9Pnt6UGUoKTtrUGUoKTtTUGU9bmV3IGJXKGdXKSxPUnQ9U1BlfSk7dmFyIGJyLHZXLENzPW4oKCk9PntNYygpO3pjKCk7YnI9bmV3IHFhKEhhKSx2Vz1icn0pO3ZhciB5VyxMUGU9bigoKT0+e1p0KCk7TWMoKTt5Vz0oZnVuY3Rpb24odCl7dnQoZSx0KTtmdW5jdGlvbiBlKGEscil7dmFyIGk9dC5jYWxsKHRoaXMsYSxyKXx8dGhpcztyZXR1cm4gaS5zY2hlZHVsZXI9YSxpLndvcms9cixpfXJldHVybiBlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihhLHIpe3JldHVybiByPT09dm9pZCAwJiYocj0wKSxyPjA/dC5wcm90b3R5cGUuc2NoZWR1bGUuY2FsbCh0aGlzLGEscik6KHRoaXMuZGVsYXk9cix0aGlzLnN0YXRlPWEsdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyksdGhpcyl9LGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oYSxyKXtyZXR1cm4gcj4wfHx0aGlzLmNsb3NlZD90LnByb3RvdHlwZS5leGVjdXRlLmNhbGwodGhpcyxhLHIpOnRoaXMuX2V4ZWN1dGUoYSxyKX0sZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24oYSxyLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT0wKSxpIT1udWxsJiZpPjB8fGk9PW51bGwmJnRoaXMuZGVsYXk+MD90LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsYSxyLGkpOihhLmZsdXNoKHRoaXMpLDApfSxlfSkoSGEpfSk7dmFyIHdXLFRQZT1uKCgpPT57WnQoKTt6YygpO3dXPShmdW5jdGlvbih0KXt2dChlLHQpO2Z1bmN0aW9uIGUoKXtyZXR1cm4gdCE9PW51bGwmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBlfSkocWEpfSk7dmFyIF9QZSxCUnQsQVBlPW4oKCk9PntMUGUoKTtUUGUoKTtfUGU9bmV3IHdXKHlXKSxCUnQ9X1BlfSk7dmFyIE1XLCRQZT1uKCgpPT57WnQoKTtNYygpO2xXKCk7TVc9KGZ1bmN0aW9uKHQpe3Z0KGUsdCk7ZnVuY3Rpb24gZShhLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGEscil8fHRoaXM7cmV0dXJuIGkuc2NoZWR1bGVyPWEsaS53b3JrPXIsaX1yZXR1cm4gZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24oYSxyLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT0wKSxpIT09bnVsbCYmaT4wP3QucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcyxhLHIsaSk6KGEuYWN0aW9ucy5wdXNoKHRoaXMpLGEuX3NjaGVkdWxlZHx8KGEuX3NjaGVkdWxlZD1yaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyZXR1cm4gYS5mbHVzaCh2b2lkIDApfSkpKX0sZS5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQ9ZnVuY3Rpb24oYSxyLGkpe3ZhciBvO2lmKGk9PT12b2lkIDAmJihpPTApLGkhPW51bGw/aT4wOnRoaXMuZGVsYXk+MClyZXR1cm4gdC5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLGEscixpKTt2YXIgcz1hLmFjdGlvbnM7ciE9bnVsbCYmcj09PWEuX3NjaGVkdWxlZCYmKChvPXNbcy5sZW5ndGgtMV0pPT09bnVsbHx8bz09PXZvaWQgMD92b2lkIDA6by5pZCkhPT1yJiYocmkuY2FuY2VsQW5pbWF0aW9uRnJhbWUociksYS5fc2NoZWR1bGVkPXZvaWQgMCl9LGV9KShIYSl9KTt2YXIgelcsRFBlPW4oKCk9PntadCgpO3pjKCk7elc9KGZ1bmN0aW9uKHQpe3Z0KGUsdCk7ZnVuY3Rpb24gZSgpe3JldHVybiB0IT09bnVsbCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGEpe3RoaXMuX2FjdGl2ZT0hMDt2YXIgcjthP3I9YS5pZDoocj10aGlzLl9zY2hlZHVsZWQsdGhpcy5fc2NoZWR1bGVkPXZvaWQgMCk7dmFyIGk9dGhpcy5hY3Rpb25zLG87YT1hfHxpLnNoaWZ0KCk7ZG8gaWYobz1hLmV4ZWN1dGUoYS5zdGF0ZSxhLmRlbGF5KSlicmVhazt3aGlsZSgoYT1pWzBdKSYmYS5pZD09PXImJmkuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLG8pe2Zvcig7KGE9aVswXSkmJmEuaWQ9PT1yJiZpLnNoaWZ0KCk7KWEudW5zdWJzY3JpYmUoKTt0aHJvdyBvfX0sZX0pKHFhKX0pO3ZhciBFUGUsUlJ0LE5QZT1uKCgpPT57JFBlKCk7RFBlKCk7RVBlPW5ldyB6VyhNVyksUlJ0PUVQZX0pO3ZhciBQUGUsa1csSVBlPW4oKCk9PntadCgpO01jKCk7eHIoKTt6YygpO1BQZT0oZnVuY3Rpb24odCl7dnQoZSx0KTtmdW5jdGlvbiBlKGEscil7YT09PXZvaWQgMCYmKGE9a1cpLHI9PT12b2lkIDAmJihyPTEvMCk7dmFyIGk9dC5jYWxsKHRoaXMsYSxmdW5jdGlvbigpe3JldHVybiBpLmZyYW1lfSl8fHRoaXM7cmV0dXJuIGkubWF4RnJhbWVzPXIsaS5mcmFtZT0wLGkuaW5kZXg9LTEsaX1yZXR1cm4gZS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcyxyPWEuYWN0aW9ucyxpPWEubWF4RnJhbWVzLG8sczsocz1yWzBdKSYmcy5kZWxheTw9aSYmKHIuc2hpZnQoKSx0aGlzLmZyYW1lPXMuZGVsYXksIShvPXMuZXhlY3V0ZShzLnN0YXRlLHMuZGVsYXkpKSk7KTtpZihvKXtmb3IoO3M9ci5zaGlmdCgpOylzLnVuc3Vic2NyaWJlKCk7dGhyb3cgb319LGUuZnJhbWVUaW1lRmFjdG9yPTEwLGV9KShxYSksa1c9KGZ1bmN0aW9uKHQpe3Z0KGUsdCk7ZnVuY3Rpb24gZShhLHIsaSl7aT09PXZvaWQgMCYmKGk9YS5pbmRleCs9MSk7dmFyIG89dC5jYWxsKHRoaXMsYSxyKXx8dGhpcztyZXR1cm4gby5zY2hlZHVsZXI9YSxvLndvcms9cixvLmluZGV4PWksby5hY3RpdmU9ITAsby5pbmRleD1hLmluZGV4PWksb31yZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24oYSxyKXtpZihyPT09dm9pZCAwJiYocj0wKSxOdW1iZXIuaXNGaW5pdGUocikpe2lmKCF0aGlzLmlkKXJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsYSxyKTt0aGlzLmFjdGl2ZT0hMTt2YXIgaT1uZXcgZSh0aGlzLnNjaGVkdWxlcix0aGlzLndvcmspO3JldHVybiB0aGlzLmFkZChpKSxpLnNjaGVkdWxlKGEscil9ZWxzZSByZXR1cm4gazEuRU1QVFl9LGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKGEscixpKXtpPT09dm9pZCAwJiYoaT0wKSx0aGlzLmRlbGF5PWEuZnJhbWUraTt2YXIgbz1hLmFjdGlvbnM7cmV0dXJuIG8ucHVzaCh0aGlzKSxvLnNvcnQoZS5zb3J0QWN0aW9ucyksMX0sZS5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQ9ZnVuY3Rpb24oYSxyLGkpe2k9PT12b2lkIDAmJihpPTApfSxlLnByb3RvdHlwZS5fZXhlY3V0ZT1mdW5jdGlvbihhLHIpe2lmKHRoaXMuYWN0aXZlPT09ITApcmV0dXJuIHQucHJvdG90eXBlLl9leGVjdXRlLmNhbGwodGhpcyxhLHIpfSxlLnNvcnRBY3Rpb25zPWZ1bmN0aW9uKGEscil7cmV0dXJuIGEuZGVsYXk9PT1yLmRlbGF5P2EuaW5kZXg9PT1yLmluZGV4PzA6YS5pbmRleD5yLmluZGV4PzE6LTE6YS5kZWxheT5yLmRlbGF5PzE6LTF9LGV9KShIYSl9KTtmdW5jdGlvbiBIUnQodCl7cmV0dXJuIHQ/cVJ0KHQpOnpGfWZ1bmN0aW9uIHFSdCh0KXtyZXR1cm4gbmV3IHh0KGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pfSl9dmFyIHpGLGtGPW4oKCk9PntaMigpO3pGPW5ldyB4dChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wbGV0ZSgpfSl9KTtmdW5jdGlvbiBTRih0KXtyZXR1cm4gdCYmbHQodC5zY2hlZHVsZSl9dmFyIFNXPW4oKCk9PntqMSgpfSk7ZnVuY3Rpb24gQ1codCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gVTMxKHQpe3JldHVybiBsdChDVyh0KSk/dC5wb3AoKTp2b2lkIDB9ZnVuY3Rpb24gY28odCl7cmV0dXJuIFNGKENXKHQpKT90LnBvcCgpOnZvaWQgMH1mdW5jdGlvbiBqMzEodCxlKXtyZXR1cm4gdHlwZW9mIENXKHQpPT0ibnVtYmVyIj90LnBvcCgpOmV9dmFyIFc1PW4oKCk9PntqMSgpO1NXKCl9KTt2YXIga2MsQ0Y9bigoKT0+e2tjPShmdW5jdGlvbih0KXtyZXR1cm4gdCYmdHlwZW9mIHQubGVuZ3RoPT0ibnVtYmVyIiYmdHlwZW9mIHQhPSJmdW5jdGlvbiJ9KX0pO2Z1bmN0aW9uIExGKHQpe3JldHVybiBsdCh0Py50aGVuKX12YXIgTFc9bigoKT0+e2oxKCl9KTtmdW5jdGlvbiBURih0KXtyZXR1cm4gbHQodFtTc10pfXZhciBUVz1uKCgpPT57QjUoKTtqMSgpfSk7ZnVuY3Rpb24gX0YodCl7cmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yJiZsdCh0Py5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX12YXIgX1c9bigoKT0+e2oxKCl9KTtmdW5jdGlvbiBBRih0KXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIrKHQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCI/ImFuIGludmFsaWQgb2JqZWN0IjoiJyIrdCsiJyIpKyIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS4iKX12YXIgQVc9bigoKT0+e30pO2Z1bmN0aW9uIFZSdCgpe3JldHVybiB0eXBlb2YgU3ltYm9sIT0iZnVuY3Rpb24ifHwhU3ltYm9sLml0ZXJhdG9yPyJAQGl0ZXJhdG9yIjpTeW1ib2wuaXRlcmF0b3J9dmFyICRGLCRXPW4oKCk9PnskRj1WUnQoKX0pO2Z1bmN0aW9uIERGKHQpe3JldHVybiBsdCh0Py5bJEZdKX12YXIgRFc9bigoKT0+eyRXKCk7ajEoKX0pO2Z1bmN0aW9uIEVGKHQpe3JldHVybiBaaih0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciBhLHIsaSxvO3JldHVybiBJNSh0aGlzLGZ1bmN0aW9uKHMpe3N3aXRjaChzLmxhYmVsKXtjYXNlIDA6YT10LmdldFJlYWRlcigpLHMubGFiZWw9MTtjYXNlIDE6cy50cnlzLnB1c2goWzEsLDksMTBdKSxzLmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LGFpKGEucmVhZCgpKV07Y2FzZSAzOnJldHVybiByPXMuc2VudCgpLGk9ci52YWx1ZSxvPXIuZG9uZSxvP1s0LGFpKHZvaWQgMCldOlszLDVdO2Nhc2UgNDpyZXR1cm5bMixzLnNlbnQoKV07Y2FzZSA1OnJldHVybls0LGFpKGkpXTtjYXNlIDY6cmV0dXJuWzQscy5zZW50KCldO2Nhc2UgNzpyZXR1cm4gcy5zZW50KCksWzMsMl07Y2FzZSA4OnJldHVyblszLDEwXTtjYXNlIDk6cmV0dXJuIGEucmVsZWFzZUxvY2soKSxbN107Y2FzZSAxMDpyZXR1cm5bMl19fSl9KX1mdW5jdGlvbiBORih0KXtyZXR1cm4gbHQodD8uZ2V0UmVhZGVyKX12YXIgUEY9bigoKT0+e1p0KCk7ajEoKX0pO2Z1bmN0aW9uIHgxKHQpe2lmKHQgaW5zdGFuY2VvZiB4dClyZXR1cm4gdDtpZih0IT1udWxsKXtpZihURih0KSlyZXR1cm4gVVJ0KHQpO2lmKGtjKHQpKXJldHVybiBqUnQodCk7aWYoTEYodCkpcmV0dXJuIFdSdCh0KTtpZihfRih0KSlyZXR1cm4gRlBlKHQpO2lmKERGKHQpKXJldHVybiBHUnQodCk7aWYoTkYodCkpcmV0dXJuIFlSdCh0KX10aHJvdyBBRih0KX1mdW5jdGlvbiBVUnQodCl7cmV0dXJuIG5ldyB4dChmdW5jdGlvbihlKXt2YXIgYT10W1NzXSgpO2lmKGx0KGEuc3Vic2NyaWJlKSlyZXR1cm4gYS5zdWJzY3JpYmUoZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0pfWZ1bmN0aW9uIGpSdCh0KXtyZXR1cm4gbmV3IHh0KGZ1bmN0aW9uKGUpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGgmJiFlLmNsb3NlZDthKyspZS5uZXh0KHRbYV0pO2UuY29tcGxldGUoKX0pfWZ1bmN0aW9uIFdSdCh0KXtyZXR1cm4gbmV3IHh0KGZ1bmN0aW9uKGUpe3QudGhlbihmdW5jdGlvbihhKXtlLmNsb3NlZHx8KGUubmV4dChhKSxlLmNvbXBsZXRlKCkpfSxmdW5jdGlvbihhKXtyZXR1cm4gZS5lcnJvcihhKX0pLnRoZW4obnVsbCxoRil9KX1mdW5jdGlvbiBHUnQodCl7cmV0dXJuIG5ldyB4dChmdW5jdGlvbihlKXt2YXIgYSxyO3RyeXtmb3IodmFyIGk9aDIodCksbz1pLm5leHQoKTshby5kb25lO289aS5uZXh0KCkpe3ZhciBzPW8udmFsdWU7aWYoZS5uZXh0KHMpLGUuY2xvc2VkKXJldHVybn19Y2F0Y2gobCl7YT17ZXJyb3I6bH19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKHI9aS5yZXR1cm4pJiZyLmNhbGwoaSl9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fWUuY29tcGxldGUoKX0pfWZ1bmN0aW9uIEZQZSh0KXtyZXR1cm4gbmV3IHh0KGZ1bmN0aW9uKGUpe1pSdCh0LGUpLmNhdGNoKGZ1bmN0aW9uKGEpe3JldHVybiBlLmVycm9yKGEpfSl9KX1mdW5jdGlvbiBZUnQodCl7cmV0dXJuIEZQZShFRih0KSl9ZnVuY3Rpb24gWlJ0KHQsZSl7dmFyIGEscixpLG87cmV0dXJuIFlqKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzLGw7cmV0dXJuIEk1KHRoaXMsZnVuY3Rpb24oZil7c3dpdGNoKGYubGFiZWwpe2Nhc2UgMDpmLnRyeXMucHVzaChbMCw1LDYsMTFdKSxhPVhqKHQpLGYubGFiZWw9MTtjYXNlIDE6cmV0dXJuWzQsYS5uZXh0KCldO2Nhc2UgMjppZihyPWYuc2VudCgpLCEhci5kb25lKXJldHVyblszLDRdO2lmKHM9ci52YWx1ZSxlLm5leHQocyksZS5jbG9zZWQpcmV0dXJuWzJdO2YubGFiZWw9MztjYXNlIDM6cmV0dXJuWzMsMV07Y2FzZSA0OnJldHVyblszLDExXTtjYXNlIDU6cmV0dXJuIGw9Zi5zZW50KCksaT17ZXJyb3I6bH0sWzMsMTFdO2Nhc2UgNjpyZXR1cm4gZi50cnlzLnB1c2goWzYsLDksMTBdKSxyJiYhci5kb25lJiYobz1hLnJldHVybik/WzQsby5jYWxsKGEpXTpbMyw4XTtjYXNlIDc6Zi5zZW50KCksZi5sYWJlbD04O2Nhc2UgODpyZXR1cm5bMywxMF07Y2FzZSA5OmlmKGkpdGhyb3cgaS5lcnJvcjtyZXR1cm5bN107Y2FzZSAxMDpyZXR1cm5bN107Y2FzZSAxMTpyZXR1cm4gZS5jb21wbGV0ZSgpLFsyXX19KX0pfXZhciBNYT1uKCgpPT57WnQoKTtDRigpO0xXKCk7WjIoKTtUVygpO19XKCk7QVcoKTtEVygpO1BGKCk7ajEoKTtlVygpO0I1KCl9KTtmdW5jdGlvbiBhMih0LGUsYSxyLGkpe3I9PT12b2lkIDAmJihyPTApLGk9PT12b2lkIDAmJihpPSExKTt2YXIgbz1lLnNjaGVkdWxlKGZ1bmN0aW9uKCl7YSgpLGk/dC5hZGQodGhpcy5zY2hlZHVsZShudWxsLHIpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LHIpO2lmKHQuYWRkKG8pLCFpKXJldHVybiBvfXZhciBMcz1uKCgpPT57fSk7ZnVuY3Rpb24gU2ModCxlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MCksVnQoZnVuY3Rpb24oYSxyKXthLnN1YnNjcmliZShQdChyLGZ1bmN0aW9uKGkpe3JldHVybiBhMihyLHQsZnVuY3Rpb24oKXtyZXR1cm4gci5uZXh0KGkpfSxlKX0sZnVuY3Rpb24oKXtyZXR1cm4gYTIocix0LGZ1bmN0aW9uKCl7cmV0dXJuIHIuY29tcGxldGUoKX0sZSl9LGZ1bmN0aW9uKGkpe3JldHVybiBhMihyLHQsZnVuY3Rpb24oKXtyZXR1cm4gci5lcnJvcihpKX0sZSl9KSl9KX12YXIgRzU9bigoKT0+e0xzKCk7dDIoKTtQMigpfSk7ZnVuY3Rpb24gQ2ModCxlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MCksVnQoZnVuY3Rpb24oYSxyKXtyLmFkZCh0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIGEuc3Vic2NyaWJlKHIpfSxlKSl9KX12YXIgWTU9bigoKT0+e3QyKCl9KTtmdW5jdGlvbiBPUGUodCxlKXtyZXR1cm4geDEodCkucGlwZShDYyhlKSxTYyhlKSl9dmFyIEJQZT1uKCgpPT57TWEoKTtHNSgpO1k1KCl9KTtmdW5jdGlvbiBSUGUodCxlKXtyZXR1cm4geDEodCkucGlwZShDYyhlKSxTYyhlKSl9dmFyIEhQZT1uKCgpPT57TWEoKTtHNSgpO1k1KCl9KTtmdW5jdGlvbiBxUGUodCxlKXtyZXR1cm4gbmV3IHh0KGZ1bmN0aW9uKGEpe3ZhciByPTA7cmV0dXJuIGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyPT09dC5sZW5ndGg/YS5jb21wbGV0ZSgpOihhLm5leHQodFtyKytdKSxhLmNsb3NlZHx8dGhpcy5zY2hlZHVsZSgpKX0pfSl9dmFyIFZQZT1uKCgpPT57WjIoKX0pO2Z1bmN0aW9uIFVQZSh0LGUpe3JldHVybiBuZXcgeHQoZnVuY3Rpb24oYSl7dmFyIHI7cmV0dXJuIGEyKGEsZSxmdW5jdGlvbigpe3I9dFskRl0oKSxhMihhLGUsZnVuY3Rpb24oKXt2YXIgaSxvLHM7dHJ5e2k9ci5uZXh0KCksbz1pLnZhbHVlLHM9aS5kb25lfWNhdGNoKGwpe2EuZXJyb3IobCk7cmV0dXJufXM/YS5jb21wbGV0ZSgpOmEubmV4dChvKX0sMCwhMCl9KSxmdW5jdGlvbigpe3JldHVybiBsdChyPy5yZXR1cm4pJiZyLnJldHVybigpfX0pfXZhciBqUGU9bigoKT0+e1oyKCk7JFcoKTtqMSgpO0xzKCl9KTtmdW5jdGlvbiBJRih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IHh0KGZ1bmN0aW9uKGEpe2EyKGEsZSxmdW5jdGlvbigpe3ZhciByPXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7YTIoYSxlLGZ1bmN0aW9uKCl7ci5uZXh0KCkudGhlbihmdW5jdGlvbihpKXtpLmRvbmU/YS5jb21wbGV0ZSgpOmEubmV4dChpLnZhbHVlKX0pfSwwLCEwKX0pfSl9dmFyIEVXPW4oKCk9PntaMigpO0xzKCl9KTtmdW5jdGlvbiBXUGUodCxlKXtyZXR1cm4gSUYoRUYodCksZSl9dmFyIEdQZT1uKCgpPT57RVcoKTtQRigpfSk7ZnVuY3Rpb24gTlcodCxlKXtpZih0IT1udWxsKXtpZihURih0KSlyZXR1cm4gT1BlKHQsZSk7aWYoa2ModCkpcmV0dXJuIHFQZSh0LGUpO2lmKExGKHQpKXJldHVybiBSUGUodCxlKTtpZihfRih0KSlyZXR1cm4gSUYodCxlKTtpZihERih0KSlyZXR1cm4gVVBlKHQsZSk7aWYoTkYodCkpcmV0dXJuIFdQZSh0LGUpfXRocm93IEFGKHQpfXZhciBQVz1uKCgpPT57QlBlKCk7SFBlKCk7VlBlKCk7alBlKCk7RVcoKTtUVygpO0xXKCk7Q0YoKTtEVygpO19XKCk7QVcoKTtQRigpO0dQZSgpfSk7ZnVuY3Rpb24gVHModCxlKXtyZXR1cm4gZT9OVyh0LGUpOngxKHQpfXZhciBGRj1uKCgpPT57UFcoKTtNYSgpfSk7ZnVuY3Rpb24gWjUoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIGE9Y28odCk7cmV0dXJuIFRzKHQsYSl9dmFyIElXPW4oKCk9PntXNSgpO0ZGKCl9KTtmdW5jdGlvbiBGVyh0LGUpe3ZhciBhPWx0KHQpP3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdH0scj1mdW5jdGlvbihpKXtyZXR1cm4gaS5lcnJvcihhKCkpfTtyZXR1cm4gbmV3IHh0KGU/ZnVuY3Rpb24oaSl7cmV0dXJuIGUuc2NoZWR1bGUociwwLGkpfTpyKX12YXIgT1c9bigoKT0+e1oyKCk7ajEoKX0pO2Z1bmN0aW9uIFhSdCh0LGUpe3ZhciBhLHIsaSxvPXQscz1vLmtpbmQsbD1vLnZhbHVlLGY9by5lcnJvcjtpZih0eXBlb2YgcyE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBub3RpZmljYXRpb24sIG1pc3NpbmcgImtpbmQiJyk7cz09PSJOIj8oYT1lLm5leHQpPT09bnVsbHx8YT09PXZvaWQgMHx8YS5jYWxsKGUsbCk6cz09PSJFIj8ocj1lLmVycm9yKT09PW51bGx8fHI9PT12b2lkIDB8fHIuY2FsbChlLGYpOihpPWUuY29tcGxldGUpPT09bnVsbHx8aT09PXZvaWQgMHx8aS5jYWxsKGUpfXZhciBCVyxZUGUsWlBlPW4oKCk9PntrRigpO0lXKCk7T1coKTtqMSgpOyhmdW5jdGlvbih0KXt0Lk5FWFQ9Ik4iLHQuRVJST1I9IkUiLHQuQ09NUExFVEU9IkMifSkoQld8fChCVz17fSkpO1lQZT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsYSxyKXt0aGlzLmtpbmQ9ZSx0aGlzLnZhbHVlPWEsdGhpcy5lcnJvcj1yLHRoaXMuaGFzVmFsdWU9ZT09PSJOIn1yZXR1cm4gdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbihlKXtyZXR1cm4gWFJ0KHRoaXMsZSl9LHQucHJvdG90eXBlLmRvPWZ1bmN0aW9uKGUsYSxyKXt2YXIgaT10aGlzLG89aS5raW5kLHM9aS52YWx1ZSxsPWkuZXJyb3I7cmV0dXJuIG89PT0iTiI/ZT8uKHMpOm89PT0iRSI/YT8uKGwpOnI/LigpfSx0LnByb3RvdHlwZS5hY2NlcHQ9ZnVuY3Rpb24oZSxhLHIpe3ZhciBpO3JldHVybiBsdCgoaT1lKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkubmV4dCk/dGhpcy5vYnNlcnZlKGUpOnRoaXMuZG8oZSxhLHIpfSx0LnByb3RvdHlwZS50b09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGE9ZS5raW5kLHI9ZS52YWx1ZSxpPWUuZXJyb3Isbz1hPT09Ik4iP1o1KHIpOmE9PT0iRSI/RlcoZnVuY3Rpb24oKXtyZXR1cm4gaX0pOmE9PT0iQyI/ekY6MDtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICIrYSk7cmV0dXJuIG99LHQuY3JlYXRlTmV4dD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoIk4iLGUpfSx0LmNyZWF0ZUVycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdCgiRSIsdm9pZCAwLGUpfSx0LmNyZWF0ZUNvbXBsZXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuY29tcGxldGVOb3RpZmljYXRpb259LHQuY29tcGxldGVOb3RpZmljYXRpb249bmV3IHQoIkMiKSx0fSkoKX0pO3ZhciBYUGU9bigoKT0+e30pO3ZhciBRUnQsUVBlPW4oKCk9PntsbygpO1FSdD1ZMihmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0KHRoaXMpLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdlPSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9fSl9KTt2YXIgS1BlPW4oKCk9Pnt9KTt2YXIgSlBlPW4oKCk9Pnt9KTt2YXIgS1J0LGVJZT1uKCgpPT57bG8oKTtLUnQ9WTIoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dCh0aGlzKSx0aGlzLm5hbWU9IkFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yIix0aGlzLm1lc3NhZ2U9ImFyZ3VtZW50IG91dCBvZiByYW5nZSJ9fSl9KTt2YXIgSlJ0LHRJZT1uKCgpPT57bG8oKTtKUnQ9WTIoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3QodGhpcyksdGhpcy5uYW1lPSJOb3RGb3VuZEVycm9yIix0aGlzLm1lc3NhZ2U9YX19KX0pO3ZhciBlSHQsYUllPW4oKCk9PntsbygpO2VIdD1ZMihmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oYSl7dCh0aGlzKSx0aGlzLm5hbWU9IlNlcXVlbmNlRXJyb3IiLHRoaXMubWVzc2FnZT1hfX0pfSk7ZnVuY3Rpb24gT0YodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4odCl9dmFyIFJXPW4oKCk9Pnt9KTtmdW5jdGlvbiBpSWUodCxlKXt2YXIgYT1PRih0KT97Zmlyc3Q6dH06dHlwZW9mIHQ9PSJudW1iZXIiP3tlYWNoOnR9OnQscj1hLmZpcnN0LGk9YS5lYWNoLG89YS53aXRoLHM9bz09PXZvaWQgMD90SHQ6byxsPWEuc2NoZWR1bGVyLGY9bD09PXZvaWQgMD9lPz9icjpsLGM9YS5tZXRhLHU9Yz09PXZvaWQgMD9udWxsOmM7aWYocj09bnVsbCYmaT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJObyB0aW1lb3V0IHByb3ZpZGVkLiIpO3JldHVybiBWdChmdW5jdGlvbihkLGgpe3ZhciBnLGIseD1udWxsLG09MCx2PWZ1bmN0aW9uKHkpe2I9YTIoaCxmLGZ1bmN0aW9uKCl7dHJ5e2cudW5zdWJzY3JpYmUoKSx4MShzKHttZXRhOnUsbGFzdFZhbHVlOngsc2VlbjptfSkpLnN1YnNjcmliZShoKX1jYXRjaCh3KXtoLmVycm9yKHcpfX0seSl9O2c9ZC5zdWJzY3JpYmUoUHQoaCxmdW5jdGlvbih5KXtiPy51bnN1YnNjcmliZSgpLG0rKyxoLm5leHQoeD15KSxpPjAmJnYoaSl9LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtiPy5jbG9zZWR8fGI/LnVuc3Vic2NyaWJlKCkseD1udWxsfSkpLCFtJiZ2KHIhPW51bGw/dHlwZW9mIHI9PSJudW1iZXIiP3I6K3ItZi5ub3coKTppKX0pfWZ1bmN0aW9uIHRIdCh0KXt0aHJvdyBuZXcgckllKHQpfXZhciBySWUsQkY9bigoKT0+e0NzKCk7UlcoKTt0MigpO01hKCk7bG8oKTtQMigpO0xzKCk7ckllPVkyKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihhKXthPT09dm9pZCAwJiYoYT1udWxsKSx0KHRoaXMpLHRoaXMubWVzc2FnZT0iVGltZW91dCBoYXMgb2NjdXJyZWQiLHRoaXMubmFtZT0iVGltZW91dEVycm9yIix0aGlzLmluZm89YX19KX0pO2Z1bmN0aW9uIGZvKHQsZSl7cmV0dXJuIFZ0KGZ1bmN0aW9uKGEscil7dmFyIGk9MDthLnN1YnNjcmliZShQdChyLGZ1bmN0aW9uKG8pe3IubmV4dCh0LmNhbGwoZSxvLGkrKykpfSkpfSl9dmFyIFg1PW4oKCk9Pnt0MigpO1AyKCl9KTtmdW5jdGlvbiBySHQodCxlKXtyZXR1cm4gYUh0KGUpP3QuYXBwbHkodm9pZCAwLGUyKFtdLF8xKGUpKSk6dChlKX1mdW5jdGlvbiBvSWUodCl7cmV0dXJuIGZvKGZ1bmN0aW9uKGUpe3JldHVybiBySHQodCxlKX0pfXZhciBhSHQsc0llPW4oKCk9PntadCgpO1g1KCk7YUh0PUFycmF5LmlzQXJyYXl9KTt2YXIgbkllPW4oKCk9Pnt9KTt2YXIgbEllPW4oKCk9Pnt9KTt2YXIgY0llPW4oKCk9Pnt9KTtmdW5jdGlvbiBkSWUodCxlLGEscixpLG8scyxsKXt2YXIgZj1bXSxjPTAsdT0wLGQ9ITEsaD1mdW5jdGlvbigpe2QmJiFmLmxlbmd0aCYmIWMmJmUuY29tcGxldGUoKX0sZz1mdW5jdGlvbih4KXtyZXR1cm4gYzxyP2IoeCk6Zi5wdXNoKHgpfSxiPWZ1bmN0aW9uKHgpe28mJmUubmV4dCh4KSxjKys7dmFyIG09ITE7eDEoYSh4LHUrKykpLnN1YnNjcmliZShQdChlLGZ1bmN0aW9uKHYpe2k/Lih2KSxvP2codik6ZS5uZXh0KHYpfSxmdW5jdGlvbigpe209ITB9LHZvaWQgMCxmdW5jdGlvbigpe2lmKG0pdHJ5e2MtLTtmb3IodmFyIHY9ZnVuY3Rpb24oKXt2YXIgeT1mLnNoaWZ0KCk7cz9hMihlLHMsZnVuY3Rpb24oKXtyZXR1cm4gYih5KX0pOmIoeSl9O2YubGVuZ3RoJiZjPHI7KXYoKTtoKCl9Y2F0Y2goeSl7ZS5lcnJvcih5KX19KSl9O3JldHVybiB0LnN1YnNjcmliZShQdChlLGcsZnVuY3Rpb24oKXtkPSEwLGgoKX0pKSxmdW5jdGlvbigpe2w/LigpfX12YXIgZkllPW4oKCk9PntNYSgpO0xzKCk7UDIoKX0pO2Z1bmN0aW9uIF9zKHQsZSxhKXtyZXR1cm4gYT09PXZvaWQgMCYmKGE9MS8wKSxsdChlKT9fcyhmdW5jdGlvbihyLGkpe3JldHVybiBmbyhmdW5jdGlvbihvLHMpe3JldHVybiBlKHIsbyxpLHMpfSkoeDEodChyLGkpKSl9LGEpOih0eXBlb2YgZT09Im51bWJlciImJihhPWUpLFZ0KGZ1bmN0aW9uKHIsaSl7cmV0dXJuIGRJZShyLGksdCxhKX0pKX12YXIgUTU9bigoKT0+e1g1KCk7TWEoKTt0MigpO2ZJZSgpO2oxKCl9KTtmdW5jdGlvbiBSRih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9MS8wKSxfcyhSNSx0KX12YXIgSEY9bigoKT0+e1E1KCk7YkYoKX0pO2Z1bmN0aW9uIHFGKCl7cmV0dXJuIFJGKDEpfXZhciBWRj1uKCgpPT57SEYoKX0pO2Z1bmN0aW9uIFVGKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBxRigpKFRzKHQsY28odCkpKX12YXIgSFc9bigoKT0+e1ZGKCk7VzUoKTtGRigpfSk7dmFyIHVJZT1uKCgpPT57fSk7dmFyIHBJZT1uKCgpPT57fSk7dmFyIGhJZT1uKCgpPT57fSk7ZnVuY3Rpb24gQXModCxlLGEscil7aWYobHQoYSkmJihyPWEsYT12b2lkIDApLHIpcmV0dXJuIEFzKHQsZSxhKS5waXBlKG9JZShyKSk7dmFyIGk9XzEoY0h0KHQpP29IdC5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiB0W2xdKGUsZixhKX19KTpuSHQodCk/aUh0Lm1hcChtSWUodCxlKSk6bEh0KHQpP3NIdC5tYXAobUllKHQsZSkpOltdLDIpLG89aVswXSxzPWlbMV07aWYoIW8mJmtjKHQpKXJldHVybiBfcyhmdW5jdGlvbihsKXtyZXR1cm4gQXMobCxlLGEpfSkoeDEodCkpO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7cmV0dXJuIG5ldyB4dChmdW5jdGlvbihsKXt2YXIgZj1mdW5jdGlvbigpe2Zvcih2YXIgYz1bXSx1PTA7dTxhcmd1bWVudHMubGVuZ3RoO3UrKyljW3VdPWFyZ3VtZW50c1t1XTtyZXR1cm4gbC5uZXh0KDE8Yy5sZW5ndGg/YzpjWzBdKX07cmV0dXJuIG8oZiksZnVuY3Rpb24oKXtyZXR1cm4gcyhmKX19KX1mdW5jdGlvbiBtSWUodCxlKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0W2FdKGUscil9fX1mdW5jdGlvbiBuSHQodCl7cmV0dXJuIGx0KHQuYWRkTGlzdGVuZXIpJiZsdCh0LnJlbW92ZUxpc3RlbmVyKX1mdW5jdGlvbiBsSHQodCl7cmV0dXJuIGx0KHQub24pJiZsdCh0Lm9mZil9ZnVuY3Rpb24gY0h0KHQpe3JldHVybiBsdCh0LmFkZEV2ZW50TGlzdGVuZXIpJiZsdCh0LnJlbW92ZUV2ZW50TGlzdGVuZXIpfXZhciBpSHQsb0h0LHNIdCxnSWU9bigoKT0+e1p0KCk7TWEoKTtaMigpO1E1KCk7Q0YoKTtqMSgpO3NJZSgpO2lIdD1bImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxvSHQ9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLHNIdD1bIm9uIiwib2ZmIl19KTt2YXIgeEllPW4oKCk9Pnt9KTt2YXIgYkllPW4oKCk9Pnt9KTt2YXIgdkllPW4oKCk9Pnt9KTtmdW5jdGlvbiBxVyh0LGUsYSl7dD09PXZvaWQgMCYmKHQ9MCksYT09PXZvaWQgMCYmKGE9dlcpO3ZhciByPS0xO3JldHVybiBlIT1udWxsJiYoU0YoZSk/YT1lOnI9ZSksbmV3IHh0KGZ1bmN0aW9uKGkpe3ZhciBvPU9GKHQpPyt0LWEubm93KCk6dDtvPDAmJihvPTApO3ZhciBzPTA7cmV0dXJuIGEuc2NoZWR1bGUoZnVuY3Rpb24oKXtpLmNsb3NlZHx8KGkubmV4dChzKyspLDA8PXI/dGhpcy5zY2hlZHVsZSh2b2lkIDAscik6aS5jb21wbGV0ZSgpKX0sbyl9KX12YXIgVlc9bigoKT0+e1oyKCk7Q3MoKTtTVygpO1JXKCl9KTt2YXIgeUllPW4oKCk9Pnt9KTt2YXIgd0llPW4oKCk9Pnt9KTtmdW5jdGlvbiBkSHQoKXtyZXR1cm4gTUllfXZhciBNSWUsVVc9bigoKT0+e1oyKCk7TXMoKTtNSWU9bmV3IHh0KHdhKX0pO3ZhciB6SWU9bigoKT0+e30pO3ZhciBrSWU9bigoKT0+e30pO2Z1bmN0aW9uIGpGKHQsZSl7cmV0dXJuIFZ0KGZ1bmN0aW9uKGEscil7dmFyIGk9MDthLnN1YnNjcmliZShQdChyLGZ1bmN0aW9uKG8pe3JldHVybiB0LmNhbGwoZSxvLGkrKykmJnIubmV4dChvKX0pKX0pfXZhciBqVz1uKCgpPT57dDIoKTtQMigpfSk7dmFyIFNJZT1uKCgpPT57fSk7dmFyIENJZT1uKCgpPT57fSk7dmFyIExJZT1uKCgpPT57fSk7dmFyIFRJZT1uKCgpPT57fSk7dmFyIF9JZT1uKCgpPT57fSk7dmFyIEFJZT1uKCgpPT57fSk7dmFyIFdXPW4oKCk9Pnt9KTt2YXIgR1c9bigoKT0+e30pO2Z1bmN0aW9uIFdGKHQpe3JldHVybiBWdChmdW5jdGlvbihlLGEpe3ZhciByPVtdO3JldHVybiBlLnN1YnNjcmliZShQdChhLGZ1bmN0aW9uKGkpe3JldHVybiByLnB1c2goaSl9LGZ1bmN0aW9uKCl7YS5uZXh0KHIpLGEuY29tcGxldGUoKX0pKSx4MSh0KS5zdWJzY3JpYmUoUHQoYSxmdW5jdGlvbigpe3ZhciBpPXI7cj1bXSxhLm5leHQoaSl9LHdhKSksZnVuY3Rpb24oKXtyPW51bGx9fSl9dmFyIFlXPW4oKCk9Pnt0MigpO01zKCk7UDIoKTtNYSgpfSk7ZnVuY3Rpb24gR0YodCxlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9bnVsbCksZT1lPz90LFZ0KGZ1bmN0aW9uKGEscil7dmFyIGk9W10sbz0wO2Euc3Vic2NyaWJlKFB0KHIsZnVuY3Rpb24ocyl7dmFyIGwsZixjLHUsZD1udWxsO28rKyVlPT09MCYmaS5wdXNoKFtdKTt0cnl7Zm9yKHZhciBoPWgyKGkpLGc9aC5uZXh0KCk7IWcuZG9uZTtnPWgubmV4dCgpKXt2YXIgYj1nLnZhbHVlO2IucHVzaChzKSx0PD1iLmxlbmd0aCYmKGQ9ZD8/W10sZC5wdXNoKGIpKX19Y2F0Y2godil7bD17ZXJyb3I6dn19ZmluYWxseXt0cnl7ZyYmIWcuZG9uZSYmKGY9aC5yZXR1cm4pJiZmLmNhbGwoaCl9ZmluYWxseXtpZihsKXRocm93IGwuZXJyb3J9fWlmKGQpdHJ5e2Zvcih2YXIgeD1oMihkKSxtPXgubmV4dCgpOyFtLmRvbmU7bT14Lm5leHQoKSl7dmFyIGI9bS52YWx1ZTtSYShpLGIpLHIubmV4dChiKX19Y2F0Y2godil7Yz17ZXJyb3I6dn19ZmluYWxseXt0cnl7bSYmIW0uZG9uZSYmKHU9eC5yZXR1cm4pJiZ1LmNhbGwoeCl9ZmluYWxseXtpZihjKXRocm93IGMuZXJyb3J9fX0sZnVuY3Rpb24oKXt2YXIgcyxsO3RyeXtmb3IodmFyIGY9aDIoaSksYz1mLm5leHQoKTshYy5kb25lO2M9Zi5uZXh0KCkpe3ZhciB1PWMudmFsdWU7ci5uZXh0KHUpfX1jYXRjaChkKXtzPXtlcnJvcjpkfX1maW5hbGx5e3RyeXtjJiYhYy5kb25lJiYobD1mLnJldHVybikmJmwuY2FsbChmKX1maW5hbGx5e2lmKHMpdGhyb3cgcy5lcnJvcn19ci5jb21wbGV0ZSgpfSx2b2lkIDAsZnVuY3Rpb24oKXtpPW51bGx9KSl9KX12YXIgWlc9bigoKT0+e1p0KCk7dDIoKTtQMigpO2JjKCl9KTtmdW5jdGlvbiBZRih0KXtmb3IodmFyIGUsYSxyPVtdLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07dmFyIG89KGU9Y28ocikpIT09bnVsbCYmZSE9PXZvaWQgMD9lOmJyLHM9KGE9clswXSkhPT1udWxsJiZhIT09dm9pZCAwP2E6bnVsbCxsPXJbMV18fDEvMDtyZXR1cm4gVnQoZnVuY3Rpb24oZixjKXt2YXIgdT1bXSxkPSExLGg9ZnVuY3Rpb24oeCl7dmFyIG09eC5idWZmZXIsdj14LnN1YnM7di51bnN1YnNjcmliZSgpLFJhKHUseCksYy5uZXh0KG0pLGQmJmcoKX0sZz1mdW5jdGlvbigpe2lmKHUpe3ZhciB4PW5ldyBrMTtjLmFkZCh4KTt2YXIgbT1bXSx2PXtidWZmZXI6bSxzdWJzOnh9O3UucHVzaCh2KSxhMih4LG8sZnVuY3Rpb24oKXtyZXR1cm4gaCh2KX0sdCl9fTtzIT09bnVsbCYmcz49MD9hMihjLG8sZyxzLCEwKTpkPSEwLGcoKTt2YXIgYj1QdChjLGZ1bmN0aW9uKHgpe3ZhciBtLHYseT11LnNsaWNlKCk7dHJ5e2Zvcih2YXIgdz1oMih5KSxFPXcubmV4dCgpOyFFLmRvbmU7RT13Lm5leHQoKSl7dmFyIEM9RS52YWx1ZSx6PUMuYnVmZmVyO3oucHVzaCh4KSxsPD16Lmxlbmd0aCYmaChDKX19Y2F0Y2goUCl7bT17ZXJyb3I6UH19ZmluYWxseXt0cnl7RSYmIUUuZG9uZSYmKHY9dy5yZXR1cm4pJiZ2LmNhbGwodyl9ZmluYWxseXtpZihtKXRocm93IG0uZXJyb3J9fX0sZnVuY3Rpb24oKXtmb3IoO3U/Lmxlbmd0aDspYy5uZXh0KHUuc2hpZnQoKS5idWZmZXIpO2I/LnVuc3Vic2NyaWJlKCksYy5jb21wbGV0ZSgpLGMudW5zdWJzY3JpYmUoKX0sdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIHU9bnVsbH0pO2Yuc3Vic2NyaWJlKGIpfSl9dmFyIFhXPW4oKCk9PntadCgpO3hyKCk7dDIoKTtQMigpO2JjKCk7Q3MoKTtXNSgpO0xzKCl9KTt2YXIgUVc9bigoKT0+e30pO3ZhciBLVz1uKCgpPT57fSk7dmFyIEpXPW4oKCk9Pnt9KTt2YXIgZUc9bigoKT0+e30pO3ZhciB0Rz1uKCgpPT57fSk7dmFyIGFHPW4oKCk9Pnt9KTt2YXIgckc9bigoKT0+e30pO3ZhciAkSWU9bigoKT0+e30pO3ZhciBpRz1uKCgpPT57fSk7dmFyIG9HPW4oKCk9Pnt9KTt2YXIgc0c9bigoKT0+e30pO3ZhciBESWU9bigoKT0+e30pO3ZhciBuRz1uKCgpPT57fSk7dmFyIGxHPW4oKCk9Pnt9KTt2YXIgY0c9bigoKT0+e30pO2Z1bmN0aW9uIFpGKHQpe3JldHVybiBWdChmdW5jdGlvbihlLGEpe3ZhciByPSExLGk9bnVsbCxvPW51bGwscz1mdW5jdGlvbigpe2lmKG8/LnVuc3Vic2NyaWJlKCksbz1udWxsLHIpe3I9ITE7dmFyIGw9aTtpPW51bGwsYS5uZXh0KGwpfX07ZS5zdWJzY3JpYmUoUHQoYSxmdW5jdGlvbihsKXtvPy51bnN1YnNjcmliZSgpLHI9ITAsaT1sLG89UHQoYSxzLHdhKSx4MSh0KGwpKS5zdWJzY3JpYmUobyl9LGZ1bmN0aW9uKCl7cygpLGEuY29tcGxldGUoKX0sdm9pZCAwLGZ1bmN0aW9uKCl7aT1vPW51bGx9KSl9KX12YXIgZEc9bigoKT0+e3QyKCk7TXMoKTtQMigpO01hKCl9KTtmdW5jdGlvbiBYRih0LGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT1iciksVnQoZnVuY3Rpb24oYSxyKXt2YXIgaT1udWxsLG89bnVsbCxzPW51bGwsbD1mdW5jdGlvbigpe2lmKGkpe2kudW5zdWJzY3JpYmUoKSxpPW51bGw7dmFyIGM9bztvPW51bGwsci5uZXh0KGMpfX07ZnVuY3Rpb24gZigpe3ZhciBjPXMrdCx1PWUubm93KCk7aWYodTxjKXtpPXRoaXMuc2NoZWR1bGUodm9pZCAwLGMtdSksci5hZGQoaSk7cmV0dXJufWwoKX1hLnN1YnNjcmliZShQdChyLGZ1bmN0aW9uKGMpe289YyxzPWUubm93KCksaXx8KGk9ZS5zY2hlZHVsZShmLHQpLHIuYWRkKGkpKX0sZnVuY3Rpb24oKXtsKCksci5jb21wbGV0ZSgpfSx2b2lkIDAsZnVuY3Rpb24oKXtvPWk9bnVsbH0pKX0pfXZhciBmRz1uKCgpPT57Q3MoKTt0MigpO1AyKCl9KTt2YXIgdUc9bigoKT0+e30pO3ZhciBwRz1uKCgpPT57fSk7dmFyIGhHPW4oKCk9Pnt9KTt2YXIgbUc9bigoKT0+e30pO3ZhciBnRz1uKCgpPT57fSk7dmFyIHhHPW4oKCk9Pnt9KTt2YXIgYkc9bigoKT0+e30pO3ZhciB2Rz1uKCgpPT57fSk7dmFyIHlHPW4oKCk9Pnt9KTt2YXIgd0c9bigoKT0+e30pO3ZhciBNRz1uKCgpPT57fSk7dmFyIHpHPW4oKCk9Pnt9KTt2YXIga0c9bigoKT0+e30pO3ZhciBTRz1uKCgpPT57fSk7dmFyIENHPW4oKCk9Pnt9KTt2YXIgTEc9bigoKT0+e30pO3ZhciBURz1uKCgpPT57fSk7dmFyIF9HPW4oKCk9Pnt9KTt2YXIgQUc9bigoKT0+e30pO3ZhciAkRz1uKCgpPT57fSk7dmFyIERHPW4oKCk9Pnt9KTt2YXIgRUc9bigoKT0+e30pO3ZhciBORz1uKCgpPT57fSk7dmFyIFBHPW4oKCk9Pnt9KTt2YXIgSUc9bigoKT0+e30pO3ZhciBGRz1uKCgpPT57fSk7dmFyIE9HPW4oKCk9Pnt9KTt2YXIgQkc9bigoKT0+e30pO3ZhciBSRz1uKCgpPT57fSk7dmFyIEhHPW4oKCk9Pnt9KTt2YXIgcUc9bigoKT0+e30pO3ZhciBFSWU9bigoKT0+e30pO3ZhciBWRz1uKCgpPT57fSk7dmFyIFVHPW4oKCk9Pnt9KTt2YXIgakc9bigoKT0+e30pO3ZhciBXRz1uKCgpPT57fSk7dmFyIEdHPW4oKCk9Pnt9KTt2YXIgWUc9bigoKT0+e30pO3ZhciBaRz1uKCgpPT57fSk7dmFyIFhHPW4oKCk9Pnt9KTt2YXIgUUc9bigoKT0+e30pO3ZhciBLRz1uKCgpPT57fSk7dmFyIEpHPW4oKCk9Pnt9KTt2YXIgZVk9bigoKT0+e30pO3ZhciB0WT1uKCgpPT57fSk7dmFyIGFZPW4oKCk9Pnt9KTt2YXIgclk9bigoKT0+e30pO3ZhciBpWT1uKCgpPT57fSk7dmFyIG9ZPW4oKCk9Pnt9KTt2YXIgc1k9bigoKT0+e30pO3ZhciBuWT1uKCgpPT57fSk7dmFyIGxZPW4oKCk9Pnt9KTt2YXIgY1k9bigoKT0+e30pO3ZhciBkWT1uKCgpPT57fSk7dmFyIGZZPW4oKCk9Pnt9KTt2YXIgdVk9bigoKT0+e30pO3ZhciBwWT1uKCgpPT57fSk7dmFyIGhZPW4oKCk9Pnt9KTtmdW5jdGlvbiBRRigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgYT1jbyh0KTtyZXR1cm4gVnQoZnVuY3Rpb24ocixpKXsoYT9VRih0LHIsYSk6VUYodCxyKSkuc3Vic2NyaWJlKGkpfSl9dmFyIG1ZPW4oKCk9PntIVygpO1c1KCk7dDIoKX0pO3ZhciBnWT1uKCgpPT57fSk7dmFyIHhZPW4oKCk9Pnt9KTt2YXIgYlk9bigoKT0+e30pO3ZhciB2WT1uKCgpPT57fSk7ZnVuY3Rpb24gS0YodCl7cmV0dXJuIFZ0KGZ1bmN0aW9uKGUsYSl7eDEodCkuc3Vic2NyaWJlKFB0KGEsZnVuY3Rpb24oKXtyZXR1cm4gYS5jb21wbGV0ZSgpfSx3YSkpLCFhLmNsb3NlZCYmZS5zdWJzY3JpYmUoYSl9KX12YXIgeVk9bigoKT0+e3QyKCk7UDIoKTtNYSgpO01zKCl9KTt2YXIgd1k9bigoKT0+e30pO3ZhciBNWT1uKCgpPT57fSk7ZnVuY3Rpb24gSkYodCxlKXtyZXR1cm4gVnQoZnVuY3Rpb24oYSxyKXt2YXIgaT1lPz97fSxvPWkubGVhZGluZyxzPW89PT12b2lkIDA/ITA6byxsPWkudHJhaWxpbmcsZj1sPT09dm9pZCAwPyExOmwsYz0hMSx1PW51bGwsZD1udWxsLGg9ITEsZz1mdW5jdGlvbigpe2Q/LnVuc3Vic2NyaWJlKCksZD1udWxsLGYmJihtKCksaCYmci5jb21wbGV0ZSgpKX0sYj1mdW5jdGlvbigpe2Q9bnVsbCxoJiZyLmNvbXBsZXRlKCl9LHg9ZnVuY3Rpb24odil7cmV0dXJuIGQ9eDEodCh2KSkuc3Vic2NyaWJlKFB0KHIsZyxiKSl9LG09ZnVuY3Rpb24oKXtpZihjKXtjPSExO3ZhciB2PXU7dT1udWxsLHIubmV4dCh2KSwhaCYmeCh2KX19O2Euc3Vic2NyaWJlKFB0KHIsZnVuY3Rpb24odil7Yz0hMCx1PXYsIShkJiYhZC5jbG9zZWQpJiYocz9tKCk6eCh2KSl9LGZ1bmN0aW9uKCl7aD0hMCwhKGYmJmMmJmQmJiFkLmNsb3NlZCkmJnIuY29tcGxldGUoKX0pKX0pfXZhciBlTz1uKCgpPT57dDIoKTtQMigpO01hKCl9KTtmdW5jdGlvbiB0Tyh0LGUsYSl7ZT09PXZvaWQgMCYmKGU9YnIpO3ZhciByPXFXKHQsZSk7cmV0dXJuIEpGKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGEpfXZhciB6WT1uKCgpPT57Q3MoKTtlTygpO1ZXKCl9KTt2YXIga1k9bigoKT0+e30pO3ZhciBTWT1uKCgpPT57fSk7dmFyIENZPW4oKCk9Pnt9KTt2YXIgTFk9bigoKT0+e30pO3ZhciBUWT1uKCgpPT57fSk7dmFyIF9ZPW4oKCk9Pnt9KTt2YXIgQVk9bigoKT0+e30pO3ZhciAkWT1uKCgpPT57fSk7dmFyIERZPW4oKCk9Pnt9KTt2YXIgRVk9bigoKT0+e30pO3ZhciBOSWU9bigoKT0+e30pO3ZhciBOWT1uKCgpPT57fSk7dmFyIFBZPW4oKCk9PntaMigpO2NQZSgpO0I1KCk7dVBlKCk7SDUoKTtoUGUoKTttUGUoKTt4UGUoKTtDUGUoKTtDcygpO0FQZSgpO05QZSgpO0lQZSgpO3hXKCk7eHIoKTt4RigpO1pQZSgpO29XKCk7TXMoKTtiRigpO1hQZSgpO0tQZSgpO0pQZSgpO2VJZSgpO1FQZSgpO3RJZSgpO2RXKCk7YUllKCk7QkYoKTtRaigpO25JZSgpO2xJZSgpO2NJZSgpO0hXKCk7cEllKCk7dUllKCk7a0YoKTtoSWUoKTtGRigpO2dJZSgpO3hJZSgpO2JJZSgpO3ZJZSgpO3lJZSgpO3dJZSgpO1VXKCk7SVcoKTt6SWUoKTtrSWUoKTtTSWUoKTtDSWUoKTtMSWUoKTtPVygpO1ZXKCk7VEllKCk7X0llKCk7UFcoKTtrRigpO1VXKCk7QUllKCk7dmMoKTtXVygpO0dXKCk7WVcoKTtaVygpO1hXKCk7UVcoKTtLVygpO0pXKCk7ckcoKTthRygpO2lHKCk7VkYoKTtvRygpO3NHKCk7bkcoKTtsRygpO2NHKCk7ZEcoKTtmRygpO3VHKCk7eEcoKTtnRygpO2JHKCk7dkcoKTt5RygpO3dHKCk7ekcoKTtrRygpO1NHKCk7VEcoKTtMRygpO0NHKCk7X0coKTtqVygpO0FHKCk7JEcoKTtERygpO0VHKCk7TkcoKTtoRygpO1BHKCk7RkcoKTtYNSgpO21HKCk7T0coKTtCRygpO0hGKCk7UkcoKTtRNSgpO0hHKCk7cUcoKTtWRygpO1VHKCk7akcoKTtHNSgpO1dHKCk7R0coKTtZRygpO1pHKCk7WEcoKTtRRygpO0tHKCk7SkcoKTtlRygpO2VZKCk7dFkoKTthWSgpO3JZKCk7eUYoKTtpWSgpO29ZKCk7c1koKTtuWSgpO2xZKCk7Y1koKTtkWSgpO2ZZKCk7dVkoKTtwWSgpO2hZKCk7bVkoKTtZNSgpO3hZKCk7Z1koKTtiWSgpO3ZZKCk7cEcoKTtJRygpO3lZKCk7d1koKTtNWSgpO2VPKCk7elkoKTtNRygpO2tZKCk7QkYoKTtTWSgpO0NZKCk7dEcoKTtMWSgpO1RZKCk7X1koKTtBWSgpOyRZKCk7RFkoKTtFWSgpO05ZKCl9KTt2YXIgUEllPW4oKCk9Pnt9KTt2YXIgSUllPW4oKCk9Pnt9KTt2YXIgRkllPW4oKCk9PntXVygpO0dXKCk7WVcoKTtaVygpO1hXKCk7UVcoKTtLVygpO0pXKCk7ckcoKTthRygpOyRJZSgpO2lHKCk7REllKCk7VkYoKTtvRygpO3NHKCk7bkcoKTtsRygpO2NHKCk7ZEcoKTtmRygpO3VHKCk7eEcoKTtnRygpO2JHKCk7dkcoKTt5RygpO3dHKCk7ekcoKTtrRygpO1NHKCk7VEcoKTtMRygpO0NHKCk7X0coKTtqVygpO0FHKCk7JEcoKTtERygpO0VHKCk7TkcoKTtoRygpO1BHKCk7RkcoKTtYNSgpO21HKCk7T0coKTtCRygpO0VJZSgpO0hGKCk7UkcoKTtRNSgpO0hHKCk7cUcoKTtWRygpO1VHKCk7akcoKTtHNSgpO1dHKCk7R0coKTtQSWUoKTtZRygpO1pHKCk7WEcoKTtRRygpO0tHKCk7SUllKCk7SkcoKTtlRygpO2VZKCk7dFkoKTthWSgpO3JZKCk7eUYoKTtpWSgpO29ZKCk7c1koKTtuWSgpO2xZKCk7Y1koKTtkWSgpO2ZZKCk7dVkoKTtwWSgpO2hZKCk7bVkoKTtZNSgpO3hZKCk7Z1koKTtiWSgpO3ZZKCk7cEcoKTtJRygpO3lZKCk7d1koKTtNWSgpO2VPKCk7elkoKTtNRygpO2tZKCk7QkYoKTtTWSgpO0NZKCk7dEcoKTtMWSgpO1RZKCk7X1koKTtBWSgpOyRZKCk7RFkoKTtOSWUoKTtFWSgpO05ZKCl9KTt2YXIgTGM9e307ZXQoTGMse09ic2VydmFibGU6KCk9Pnh0LFJlcGxheVN1YmplY3Q6KCk9PndGLFN1YmplY3Q6KCk9PlgyLFN1YnNjcmlwdGlvbjooKT0+azEsZnJvbTooKT0+VHMsZnJvbUV2ZW50OigpPT5BcyxvZjooKT0+WjUsb3BzOigpPT5qcXR9KTt2YXIganF0LGFPPW4oKCk9PntQWSgpO0ZJZSgpO2pxdD17YnVmZmVyOldGLGJ1ZmZlckNvdW50OkdGLGJ1ZmZlclRpbWU6WUYsZGVib3VuY2U6WkYsZGVib3VuY2VUaW1lOlhGLGZpbHRlcjpqRixtYXA6Zm8sc3RhcnRXaXRoOlFGLHRha2VVbnRpbDpLRix0aHJvdHRsZVRpbWU6dE99fSk7dmFyIElZLE9JZT1uKCgpPT57dUYoKTthTygpO0lZPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXk9bmV3IEFycmF5LHRoaXMub2JzZXJ2YWJsZUV2ZW50VGFyZ2V0QnVuZGxlQXJyYXk9bmV3IEFycmF5fWdldFN1YmplY3RGb3JFbWl0dGVyRXZlbnQoZSxhKXtsZXQgcj10aGlzLm9ic2VydmFibGVFdmVudEVtaXR0ZXJCdW5kbGVBcnJheS5maW5kKGk9PmkuZXZlbnRSZWY9PT1lJiZpLmV2ZW50PT09YSk7aWYocilyZXR1cm4gci5zdWJqZWN0O3tsZXQgaT1BcyhlLGEpLG89bmV3IFgyO2kuc3Vic2NyaWJlKG8pO2xldCBzPXtzdWJqZWN0Om8sZXZlbnRSZWY6ZSxldmVudDphfTtyZXR1cm4gdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkucHVzaChzKSxzLnN1YmplY3R9fWdldFN1YmplY3RGb3JFdmVudFRhcmdldChlLGEpe2xldCByPXRoaXMub2JzZXJ2YWJsZUV2ZW50VGFyZ2V0QnVuZGxlQXJyYXkuZmluZChpPT5pLmV2ZW50UmVmPT09ZSYmaS5ldmVudD09PWEpO2lmKHIpcmV0dXJuIHIuc3ViamVjdDt7bGV0IG89e3N1YmplY3Q6bmV3IFgyLGV2ZW50UmVmOmUsZXZlbnQ6YX07cmV0dXJuIHRoaXMub2JzZXJ2YWJsZUV2ZW50VGFyZ2V0QnVuZGxlQXJyYXkucHVzaChvKSxvLnN1YmplY3R9fX19KTt2YXIgRlksQkllPW4oKCk9Pnt1RigpO2FPKCk7Rlk9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm9ic2VydmFibGVGdW5jdGlvbnM9e25leHQ6ZT0+e30sY29tcGxldGU6ZT0+e319LHRoaXMuZ2VuZXJhdG9yPW51bGwsdGhpcy5idWZmZXJlZD0hMSx0aGlzLnBheWxvYWRCdWZmZXI9W10sdGhpcy5vYnNlcnZhYmxlPW5ldyB4dChlPT57dGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLm5leHQ9KC4uLmEpPT5lLm5leHQoYSksdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLmNvbXBsZXRlPSgpPT4odGhpcy5jb21wbGV0ZWREZWZmZXJlZC5yZXNvbHZlKCksZS5jb21wbGV0ZSgpKX0pLHRoaXMuY29tcGxldGVkRGVmZmVyZWQ9VmUuZGVmZXIoKSx0aGlzLmNvbXBsZXRlZD10aGlzLmNvbXBsZXRlZERlZmZlcmVkLnByb21pc2V9c2V0T2JzZXJ2YWJsZShlKXt0aGlzLm9ic2VydmFibGU9ZX1wdXNoKGUpe3RoaXMuYnVmZmVyZWQ/dGhpcy5wYXlsb2FkQnVmZmVyLnB1c2goZSk6dGhpcy5pbnRlcm5hbFB1c2goZSl9cHVzaE1hbnkoZSl7Zm9yKGxldCBhIG9mIGUpdGhpcy5wdXNoKGEpfXNldEdlbmVyYXRvcihlKXt0aGlzLmdlbmVyYXRvcj1lfW1ha2VCdWZmZXJlZCgpe3RoaXMuYnVmZmVyZWQ9ITB9c3Vic2NyaWJlKC4uLmUpe3JldHVybiB0aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKC4uLmUpfXJlcXVlc3QoZSl7aWYoZSE9PTApZm9yKGxldCBhPTA7YSE9PWU7YSsrKWlmKHRoaXMucGF5bG9hZEJ1ZmZlci5sZW5ndGg+MCl0aGlzLmludGVybmFsUHVzaCh0aGlzLnBheWxvYWRCdWZmZXIuc2hpZnQoKSk7ZWxzZXtsZXQgcj10aGlzLmdlbmVyYXRvci5uZXh0KCk7dGhpcy5pbnRlcm5hbFB1c2goci52YWx1ZSl9fXNpZ25hbENvbXBsZXRlKCl7dGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLmNvbXBsZXRlKCl9aW50ZXJuYWxQdXNoKGUpe3RoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5uZXh0KGUpfX19KTtmdW5jdGlvbiBXcXQodCl7cmV0dXJuIG5ldyB4dChlPT57bGV0IGE9KCk9PnQucGF1c2UoKSxyPSgpPT5wcm9jZXNzLm5leHRUaWNrKCgpPT50LnJlc3VtZSgpKSxpPW89PnthKCksZS5uZXh0KG8pLHIoKX07cmV0dXJuIHQub24oImRhdGEiLGkpLHQub24oImVycm9yIixvPT5lLmVycm9yKG8pKSx0Lm9uKCJlbmQiLCgpPT5lLmNvbXBsZXRlKCkpLHQub24oImNsb3NlIiwoKT0+ZS5jb21wbGV0ZSgpKSwoKT0+e3QucmVtb3ZlTGlzdGVuZXIoImRhdGEiLGkpLHQucmVtb3ZlTGlzdGVuZXIoImVycm9yIixlLmVycm9yKSx0LnJlbW92ZUxpc3RlbmVyKCJlbmQiLGUuY29tcGxldGUpLHQucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixlLmNvbXBsZXRlKX19KX12YXIgUkllPW4oKCk9PntQWSgpfSk7dmFyIEN0PXt9O2V0KEN0LHtPYnNlcnZhYmxlSW50YWtlOigpPT5GWSxPYnNlcnZhYmxlbWFwOigpPT5JWSxmcm9tU3RyZWFtV2l0aEJhY2twcmVzc3VyZTooKT0+V3F0LHJ4anM6KCk9PkxjfSk7dmFyIFZhPW4oKCk9Pnt1RigpO09JZSgpO0JJZSgpO1JJZSgpO2FPKCl9KTtmdW5jdGlvbiBEKHQpe3JldHVybihlLGEpPT50eXBlb2YgYT09Im9iamVjdCI/SEllKHQsZSxhKTooKHIsaSxvKT0+e2xldCBzPWkuaGFzT3duUHJvcGVydHkobyk7cmV0dXJuIGkuY29uc3RydWN0b3IuY3JlYXRlUHJvcGVydHkobyxyKSxzP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxvKTp2b2lkIDB9KSh0LGUsYSl9dmFyIEdxdCxISWUsck89bigoKT0+eyQ1KCk7R3F0PXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOmdjLHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpBNX0sSEllPSh0PUdxdCxlLGEpPT57bGV0e2tpbmQ6cixtZXRhZGF0YTppfT1hLG89Z2xvYmFsVGhpcy5saXRQcm9wZXJ0eU1ldGFkYXRhLmdldChpKTtpZihvPT09dm9pZCAwJiZnbG9iYWxUaGlzLmxpdFByb3BlcnR5TWV0YWRhdGEuc2V0KGksbz1uZXcgTWFwKSxyPT09InNldHRlciImJigodD1PYmplY3QuY3JlYXRlKHQpKS53cmFwcGVkPSEwKSxvLnNldChhLm5hbWUsdCkscj09PSJhY2Nlc3NvciIpe2xldHtuYW1lOnN9PWE7cmV0dXJue3NldChsKXtsZXQgZj1lLmdldC5jYWxsKHRoaXMpO2Uuc2V0LmNhbGwodGhpcyxsKSx0aGlzLnJlcXVlc3RVcGRhdGUocyxmLHQsITAsbCl9LGluaXQobCl7cmV0dXJuIGwhPT12b2lkIDAmJnRoaXMuQyhzLHZvaWQgMCx0LGwpLGx9fX1pZihyPT09InNldHRlciIpe2xldHtuYW1lOnN9PWE7cmV0dXJuIGZ1bmN0aW9uKGwpe2xldCBmPXRoaXNbc107ZS5jYWxsKHRoaXMsbCksdGhpcy5yZXF1ZXN0VXBkYXRlKHMsZix0LCEwLGwpfX10aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgZGVjb3JhdG9yIGxvY2F0aW9uOiAiK3IpfX0pO3ZhciBxSWU9bigoKT0+e3JPKCl9KTt2YXIgVkllPW4oKCk9Pnt9KTt2YXIgZnQ9e307ZXQoZnQse1RpbWVvdXQ6KCk9PmlPLGRlbGF5Rm9yOigpPT5VSWUsZGVsYXlGb3JSYW5kb206KCk9PllxdH0pO3ZhciBVSWUsWXF0LGlPLGlpPW4oKCk9PntwMigpO1VJZT1hc3luYyh0LGUsYT0hMSk9Pihhd2FpdCBuZXcgaU8odCxudWxsLGEpLnByb21pc2UsZSksWXF0PWFzeW5jKHQsZSxhLHI9ITEpPT4oYXdhaXQgVUllKE1hdGgucmFuZG9tKCkqKGUtdCkrdCxudWxsLHIpLGEpLGlPPWNsYXNze2NvbnN0cnVjdG9yKGUsYSxyPSExKXt0aGlzLl9jYW5jZWxsZWQ9ITEsdGhpcy50aW1lb3V0SW5NaWxsaXM9ZSx0aGlzLl9kZWZlcnJlZD1ubygpLHRoaXMucHJvbWlzZT10aGlzLl9kZWZlcnJlZC5wcm9taXNlLHRoaXMuX3RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbmNlbGxlZHx8dGhpcy5fZGVmZXJyZWQucmVzb2x2ZShhKX0sZSksdGhpcy5zdGFydGVkPURhdGUubm93KCksciYmdGhpcy5tYWtlVW5yZWZlZCgpfW1ha2VVbnJlZmVkKCl7dGhpcy5fdGltZW91dC51bnJlZigpfWNhbmNlbCgpe3RoaXMuX2NhbmNlbGxlZD0hMCxjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCl9Z2V0VGltZUxlZnQoKXtsZXQgZT10aGlzLnN0YXJ0ZWQrdGhpcy50aW1lb3V0SW5NaWxsaXMtRGF0ZS5ub3coKTtyZXR1cm4gZT4wP2U6MH19fSk7dmFyIFRjPXt9O3ZhciBvTz1uKCgpPT57fSk7ZnVuY3Rpb24gJHModCl7aWYodHlwZW9mIHQhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7cmV0dXJuIHQucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csIlxcJCYiKS5yZXBsYWNlKC8tL2csIlxceDJkIil9dmFyIHNPPW4oKCk9Pnt9KTt2YXIgSzU9e307ZXQoSzUse2lzTWF0Y2g6KCk9PlFxdCxtYXRjaGVyOigpPT5YcXR9KTtmdW5jdGlvbiBYcXQodCxlLGEpe3JldHVybiBXSWUodCxlLGEsITEpfWZ1bmN0aW9uIFFxdCh0LGUsYSl7cmV0dXJuIFdJZSh0LGUsYSwhMCkubGVuZ3RoPjB9dmFyIE9ZLGpJZSxacXQsV0llLEdJZT1uKCgpPT57c08oKTtPWT1uZXcgTWFwLGpJZT0odCxlKT0+e2lmKCFBcnJheS5pc0FycmF5KHQpKXN3aXRjaCh0eXBlb2YgdCl7Y2FzZSJzdHJpbmciOnQ9W3RdO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjp0PVtdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJyR7ZX0nIHRvIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5LCBidXQgZ290IGEgdHlwZSBvZiAnJHt0eXBlb2YgdH0nYCl9cmV0dXJuIHQuZmlsdGVyKGE9PntpZih0eXBlb2YgYSE9InN0cmluZyIpe2lmKHR5cGVvZiBhPiJ1IilyZXR1cm4hMTt0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAnJHtlfScgdG8gYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncywgYnV0IGZvdW5kIGEgdHlwZSBvZiAnJHt0eXBlb2YgYX0nIGluIHRoZSBhcnJheWApfXJldHVybiEwfSl9LFpxdD0odCxlKT0+e2U9e2Nhc2VTZW5zaXRpdmU6ITEsLi4uZX07bGV0IGE9dCtKU09OLnN0cmluZ2lmeShlKTtpZihPWS5oYXMoYSkpcmV0dXJuIE9ZLmdldChhKTtsZXQgcj10WzBdPT09IiEiO3ImJih0PXQuc2xpY2UoMSkpLHQ9JHModCkucmVwbGFjZSgvXFxcKi9nLCJbXFxzXFxTXSoiKTtsZXQgaT1uZXcgUmVnRXhwKGBeJHt0fSRgLGUuY2FzZVNlbnNpdGl2ZT8iIjoiaSIpO3JldHVybiBpLm5lZ2F0ZWQ9cixPWS5zZXQoYSxpKSxpfSxXSWU9KHQsZSxhLHIpPT57aWYodD1qSWUodCwiaW5wdXRzIiksZT1qSWUoZSwicGF0dGVybnMiKSxlLmxlbmd0aD09PTApcmV0dXJuW107ZT1lLm1hcChzPT5acXQocyxhKSk7bGV0e2FsbFBhdHRlcm5zOml9PWF8fHt9LG89W107Zm9yKGxldCBzIG9mIHQpe2xldCBsLGY9Wy4uLmVdLmZpbGwoITEpO2ZvcihsZXRbYyx1XW9mIGUuZW50cmllcygpKWlmKHUudGVzdChzKSYmKGZbY109ITAsbD0hdS5uZWdhdGVkLCFsKSlicmVhaztpZighKGw9PT0hMXx8bD09PXZvaWQgMCYmZS5zb21lKGM9PiFjLm5lZ2F0ZWQpfHxpJiZmLnNvbWUoKGMsdSk9PiFjJiYhZVt1XS5uZWdhdGVkKSkmJihvLnB1c2gocykscikpYnJlYWt9cmV0dXJuIG99fSk7dmFyIFlJZT1uKCgpPT57R0llKCl9KTt2YXIgb2k9e307ZXQob2kse1NtYXJ0TWF0Y2g6KCk9PkJZfSk7dmFyIEJZLFJZPW4oKCk9PntZSWUoKTtCWT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLndpbGRjYXJkPWV9bWF0Y2goZSl7cmV0dXJuIEs1LmlzTWF0Y2goZSx0aGlzLndpbGRjYXJkKX19fSk7dmFyIHQ4PXt9O2V0KHQ4LHtDcm9uOigpPT5KSWUsQ3JvbkRhdGU6KCk9PlEyLENyb25QYXR0ZXJuOigpPT5uTyxzY2hlZHVsZWRKb2JzOigpPT5fY30pO2Z1bmN0aW9uIG0yKHQsZSxhLHIsaSxvLHMsbCl7cmV0dXJuIG0yLmZyb21UWihtMi50cCh0LGUsYSxyLGksbyxzKSxsKX1mdW5jdGlvbiBIWSh0LGU9bmV3IERhdGUpe2xldCBhPWUudG9Mb2NhbGVTdHJpbmcoImVuLVVTIix7dGltZVpvbmU6dCx0aW1lWm9uZU5hbWU6InNob3J0T2Zmc2V0In0pLnNwbGl0KCIgIikuc2xpY2UoLTEpWzBdLHI9ZS50b0xvY2FsZVN0cmluZygiZW4tVVMiKS5yZXBsYWNlKC9bXHUyMDJmXS8sIiAiKTtyZXR1cm4gRGF0ZS5wYXJzZShgJHtyfSBHTVRgKS1EYXRlLnBhcnNlKGAke3J9ICR7YX1gKX1mdW5jdGlvbiBKcXQodCxlKXtsZXQgYT1uZXcgRGF0ZShEYXRlLnBhcnNlKHQpKTtpZihpc05hTihhKSl0aHJvdyBuZXcgRXJyb3IoIm1pbml0ejogSW52YWxpZCBJU084NjAxIHBhc3NlZCB0byBwYXJzZXIuIik7bGV0IHI9dC5zdWJzdHJpbmcoOSk7cmV0dXJuIHQuaW5jbHVkZXMoIloiKXx8ci5pbmNsdWRlcygiLSIpfHxyLmluY2x1ZGVzKCIrIik/bTIudHAoYS5nZXRVVENGdWxsWWVhcigpLGEuZ2V0VVRDTW9udGgoKSsxLGEuZ2V0VVRDRGF0ZSgpLGEuZ2V0VVRDSG91cnMoKSxhLmdldFVUQ01pbnV0ZXMoKSxhLmdldFVUQ1NlY29uZHMoKSwiRXRjL1VUQyIpOm0yLnRwKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCkrMSxhLmdldERhdGUoKSxhLmdldEhvdXJzKCksYS5nZXRNaW51dGVzKCksYS5nZXRTZWNvbmRzKCksZSl9ZnVuY3Rpb24gZVZ0KHQpe2lmKHQ9PT12b2lkIDAmJih0PXt9KSxkZWxldGUgdC5uYW1lLHQubGVnYWN5TW9kZT10LmxlZ2FjeU1vZGU9PT12b2lkIDA/ITA6dC5sZWdhY3lNb2RlLHQucGF1c2VkPXQucGF1c2VkPT09dm9pZCAwPyExOnQucGF1c2VkLHQubWF4UnVucz10Lm1heFJ1bnM9PT12b2lkIDA/MS8wOnQubWF4UnVucyx0LmNhdGNoPXQuY2F0Y2g9PT12b2lkIDA/ITE6dC5jYXRjaCx0LmludGVydmFsPXQuaW50ZXJ2YWw9PT12b2lkIDA/MDpwYXJzZUludCh0LmludGVydmFsLnRvU3RyaW5nKCksMTApLHQudXRjT2Zmc2V0PXQudXRjT2Zmc2V0PT09dm9pZCAwP3ZvaWQgMDpwYXJzZUludCh0LnV0Y09mZnNldC50b1N0cmluZygpLDEwKSx0LnVucmVmPXQudW5yZWY9PT12b2lkIDA/ITE6dC51bnJlZix0LnN0YXJ0QXQmJih0LnN0YXJ0QXQ9bmV3IFEyKHQuc3RhcnRBdCx0LnRpbWV6b25lKSksdC5zdG9wQXQmJih0LnN0b3BBdD1uZXcgUTIodC5zdG9wQXQsdC50aW1lem9uZSkpLHQuaW50ZXJ2YWwhPT1udWxsKXtpZihpc05hTih0LmludGVydmFsKSl0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBTdXBwbGllZCB2YWx1ZSBmb3IgaW50ZXJ2YWwgaXMgbm90IGEgbnVtYmVyIik7aWYodC5pbnRlcnZhbDwwKXRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IFN1cHBsaWVkIHZhbHVlIGZvciBpbnRlcnZhbCBjYW4gbm90IGJlIG5lZ2F0aXZlIil9aWYodC51dGNPZmZzZXQhPT12b2lkIDApe2lmKGlzTmFOKHQudXRjT2Zmc2V0KSl0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBJbnZhbGlkIHZhbHVlIHBhc3NlZCBmb3IgdXRjT2Zmc2V0LCBzaG91bGQgYmUgbnVtYmVyIHJlcHJlc2VudGluZyBtaW51dGVzIG9mZnNldCBmcm9tIFVUQy4iKTtpZih0LnV0Y09mZnNldDwtODcwfHx0LnV0Y09mZnNldD44NzApdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogdXRjT2Zmc2V0IG91dCBvZiBib3VuZHMuIik7aWYodC51dGNPZmZzZXQhPT12b2lkIDAmJnQudGltZXpvbmUpdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogQ29tYmluaW5nICd1dGNPZmZzZXQnIHdpdGggJ3RpbWV6b25lJyBpcyBub3QgYWxsb3dlZC4iKX1pZih0LnVucmVmIT09ITAmJnQudW5yZWYhPT0hMSl0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBVbnJlZiBzaG91bGQgYmUgZWl0aGVyIHRydWUsIGZhbHNlIG9yIHVuZGVmaW5lZChmYWxzZSkuIik7cmV0dXJuIHR9ZnVuY3Rpb24gZTgodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ8fHR5cGVvZiB0PT0iZnVuY3Rpb24ifHx0IGluc3RhbmNlb2YgRnVuY3Rpb259ZnVuY3Rpb24gdFZ0KHQpe3JldHVybiBlOCh0KX1mdW5jdGlvbiBhVnQodCl7dHlwZW9mIERlbm88InUiJiZ0eXBlb2YgRGVuby51bnJlZlRpbWVyPCJ1Ij9EZW5vLnVucmVmVGltZXIodCk6dCYmdHlwZW9mIHQudW5yZWY8InUiJiZ0LnVucmVmKCl9dmFyIHFZLEo1LFpJZSxuTyxYSWUsc2ksUTIsUUllLF9jLEpJZSxlRmU9bigoKT0+e20yLmZyb21UWklTTz0odCxlLGEpPT5tMi5mcm9tVFooSnF0KHQsZSksYSksbTIuZnJvbVRaPWZ1bmN0aW9uKHQsZSl7bGV0IGE9bmV3IERhdGUoRGF0ZS5VVEModC55LHQubS0xLHQuZCx0LmgsdC5pLHQucykpLHI9SFkodC50eixhKSxpPW5ldyBEYXRlKGEuZ2V0VGltZSgpLXIpLG89SFkodC50eixpKTtpZihvLXI9PT0wKXJldHVybiBpO3tsZXQgcz1uZXcgRGF0ZShhLmdldFRpbWUoKS1vKSxsPUhZKHQudHoscyk7aWYobC1vPT09MHx8IWUmJmwtbz4wKXJldHVybiBzO2lmKGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGUgcGFzc2VkIHRvIGZyb21UWigpIik7cmV0dXJuIGl9fSxtMi50b1RaPWZ1bmN0aW9uKHQsZSl7bGV0IGE9dC50b0xvY2FsZVN0cmluZygiZW4tVVMiLHt0aW1lWm9uZTplfSkucmVwbGFjZSgvW1x1MjAyZl0vLCIgIikscj1uZXcgRGF0ZShhKTtyZXR1cm57eTpyLmdldEZ1bGxZZWFyKCksbTpyLmdldE1vbnRoKCkrMSxkOnIuZ2V0RGF0ZSgpLGg6ci5nZXRIb3VycygpLGk6ci5nZXRNaW51dGVzKCksczpyLmdldFNlY29uZHMoKSx0ejplfX0sbTIudHA9KHQsZSxhLHIsaSxvLHMpPT4oe3k6dCxtOmUsZDphLGg6cixpLHM6byx0ejpzfSk7bTIubWluaXR6PW0yO3FZPTMyLEo1PTMxfHFZLFpJZT1bMSwyLDQsOCwxNl0sbk89Y2xhc3N7cGF0dGVybjt0aW1lem9uZTtzZWNvbmQ7bWludXRlO2hvdXI7ZGF5O21vbnRoO2RheU9mV2VlaztsYXN0RGF5T2ZNb250aDtzdGFyRE9NO3N0YXJET1c7Y29uc3RydWN0b3IodCxlKXt0aGlzLnBhdHRlcm49dCx0aGlzLnRpbWV6b25lPWUsdGhpcy5zZWNvbmQ9QXJyYXkoNjApLmZpbGwoMCksdGhpcy5taW51dGU9QXJyYXkoNjApLmZpbGwoMCksdGhpcy5ob3VyPUFycmF5KDI0KS5maWxsKDApLHRoaXMuZGF5PUFycmF5KDMxKS5maWxsKDApLHRoaXMubW9udGg9QXJyYXkoMTIpLmZpbGwoMCksdGhpcy5kYXlPZldlZWs9QXJyYXkoNykuZmlsbCgwKSx0aGlzLmxhc3REYXlPZk1vbnRoPSExLHRoaXMuc3RhckRPTT0hMSx0aGlzLnN0YXJET1c9ITEsdGhpcy5wYXJzZSgpfXBhcnNlKCl7aWYoISh0eXBlb2YgdGhpcy5wYXR0ZXJuPT0ic3RyaW5nInx8dGhpcy5wYXR0ZXJuIGluc3RhbmNlb2YgU3RyaW5nKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogUGF0dGVybiBoYXMgdG8gYmUgb2YgdHlwZSBzdHJpbmcuIik7dGhpcy5wYXR0ZXJuLmluZGV4T2YoIkAiKT49MCYmKHRoaXMucGF0dGVybj10aGlzLmhhbmRsZU5pY2tuYW1lcyh0aGlzLnBhdHRlcm4pLnRyaW0oKSk7bGV0IHQ9dGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xzKy9nLCIgIikuc3BsaXQoIiAiKTtpZih0Lmxlbmd0aDw1fHx0Lmxlbmd0aD42KXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gZm9ybWF0ICgnIit0aGlzLnBhdHRlcm4rIicpLCBleGFjdGx5IGZpdmUgb3Igc2l4IHNwYWNlIHNlcGFyYXRlZCBwYXJ0cyBhcmUgcmVxdWlyZWQuIik7aWYodC5sZW5ndGg9PT01JiZ0LnVuc2hpZnQoIjAiKSx0WzNdLmluZGV4T2YoIkwiKT49MCYmKHRbM109dFszXS5yZXBsYWNlKCJMIiwiIiksdGhpcy5sYXN0RGF5T2ZNb250aD0hMCksdFszXT09IioiJiYodGhpcy5zdGFyRE9NPSEwKSx0WzRdLmxlbmd0aD49MyYmKHRbNF09dGhpcy5yZXBsYWNlQWxwaGFNb250aHModFs0XSkpLHRbNV0ubGVuZ3RoPj0zJiYodFs1XT10aGlzLnJlcGxhY2VBbHBoYURheXModFs1XSkpLHRbNV09PSIqIiYmKHRoaXMuc3RhckRPVz0hMCksdGhpcy5wYXR0ZXJuLmluZGV4T2YoIj8iKT49MCl7bGV0IGU9bmV3IFEyKG5ldyBEYXRlLHRoaXMudGltZXpvbmUpLmdldERhdGUoITApO3RbMF09dFswXS5yZXBsYWNlKCI/IixlLmdldFNlY29uZHMoKS50b1N0cmluZygpKSx0WzFdPXRbMV0ucmVwbGFjZSgiPyIsZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSksdFsyXT10WzJdLnJlcGxhY2UoIj8iLGUuZ2V0SG91cnMoKS50b1N0cmluZygpKSx0aGlzLnN0YXJET018fCh0WzNdPXRbM10ucmVwbGFjZSgiPyIsZS5nZXREYXRlKCkudG9TdHJpbmcoKSkpLHRbNF09dFs0XS5yZXBsYWNlKCI/IiwoZS5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkpLHRoaXMuc3RhckRPV3x8KHRbNV09dFs1XS5yZXBsYWNlKCI/IixlLmdldERheSgpLnRvU3RyaW5nKCkpKX10aGlzLnRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyh0KSx0aGlzLnBhcnRUb0FycmF5KCJzZWNvbmQiLHRbMF0sMCwxKSx0aGlzLnBhcnRUb0FycmF5KCJtaW51dGUiLHRbMV0sMCwxKSx0aGlzLnBhcnRUb0FycmF5KCJob3VyIix0WzJdLDAsMSksdGhpcy5wYXJ0VG9BcnJheSgiZGF5Iix0WzNdLC0xLDEpLHRoaXMucGFydFRvQXJyYXkoIm1vbnRoIix0WzRdLC0xLDEpLHRoaXMucGFydFRvQXJyYXkoImRheU9mV2VlayIsdFs1XSwwLEo1KSx0aGlzLmRheU9mV2Vla1s3XSYmKHRoaXMuZGF5T2ZXZWVrWzBdPXRoaXMuZGF5T2ZXZWVrWzddKX1wYXJ0VG9BcnJheSh0LGUsYSxyKXtsZXQgaT10aGlzW3RdLG89dD09PSJkYXkiJiZ0aGlzLmxhc3REYXlPZk1vbnRoO2lmKGU9PT0iIiYmIW8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgIit0KyIgKCIrZSsiKSBpcyBlbXB0eSwgY2hlY2sgZm9yIHRyYWlsaW5nIHNwYWNlcy4iKTtpZihlPT09IioiKXJldHVybiBpLmZpbGwocik7bGV0IHM9ZS5zcGxpdCgiLCIpO2lmKHMubGVuZ3RoPjEpZm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKyspdGhpcy5wYXJ0VG9BcnJheSh0LHNbbF0sYSxyKTtlbHNlIGUuaW5kZXhPZigiLSIpIT09LTEmJmUuaW5kZXhPZigiLyIpIT09LTE/dGhpcy5oYW5kbGVSYW5nZVdpdGhTdGVwcGluZyhlLHQsYSxyKTplLmluZGV4T2YoIi0iKSE9PS0xP3RoaXMuaGFuZGxlUmFuZ2UoZSx0LGEscik6ZS5pbmRleE9mKCIvIikhPT0tMT90aGlzLmhhbmRsZVN0ZXBwaW5nKGUsdCxhLHIpOmUhPT0iIiYmdGhpcy5oYW5kbGVOdW1iZXIoZSx0LGEscil9dGhyb3dBdElsbGVnYWxDaGFyYWN0ZXJzKHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKChlPT09NT8vW14vKjAtOSxcLSNMXSsvOi9bXi8qMC05LC1dKy8pLnRlc3QodFtlXSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgIitlKyIgKCIrdFtlXSsiKSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIil9aGFuZGxlTnVtYmVyKHQsZSxhLHIpe2xldCBpPXRoaXMuZXh0cmFjdE50aCh0LGUpLG89cGFyc2VJbnQoaVswXSwxMCkrYTtpZihpc05hTihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogIitlKyIgaXMgbm90IGEgbnVtYmVyOiAnIit0KyInIik7dGhpcy5zZXRQYXJ0KGUsbyxpWzFdfHxyKX1zZXRQYXJ0KHQsZSxhKXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgcGFydCBzcGVjaWZpZWQ6ICIrdCk7aWYodD09PSJkYXlPZldlZWsiKXtpZihlPT09NyYmKGU9MCksZTwwfHxlPjYpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBkYXlPZldlZWs6ICIrZSk7dGhpcy5zZXROdGhXZWVrZGF5T2ZNb250aChlLGEpO3JldHVybn1pZih0PT09InNlY29uZCJ8fHQ9PT0ibWludXRlIil7aWYoZTwwfHxlPj02MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIrdCsiOiAiK2UpfWVsc2UgaWYodD09PSJob3VyIil7aWYoZTwwfHxlPj0yNCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIrdCsiOiAiK2UpfWVsc2UgaWYodD09PSJkYXkiKXtpZihlPDB8fGU+PTMxKXRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIit0KyI6ICIrZSl9ZWxzZSBpZih0PT09Im1vbnRoIiYmKGU8MHx8ZT49MTIpKXRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIit0KyI6ICIrZSk7dGhpc1t0XVtlXT1hfWhhbmRsZVJhbmdlV2l0aFN0ZXBwaW5nKHQsZSxhLHIpe2xldCBpPXRoaXMuZXh0cmFjdE50aCh0LGUpLG89aVswXS5tYXRjaCgvXihcZCspLShcZCspXC8oXGQrKSQvKTtpZihvPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHJhbmdlIHdpdGggc3RlcHBpbmc6ICciK3QrIiciKTtsZXRbLHMsbCxmXT1vLGM9cGFyc2VJbnQocywxMCkrYSx1PXBhcnNlSW50KGwsMTApK2EsZD1wYXJzZUludChmLDEwKTtpZihpc05hTihjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pIik7aWYoaXNOYU4odSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCB1cHBlciByYW5nZSAoTmFOKSIpO2lmKGlzTmFOKGQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6IChOYU4pIik7aWYoZD09PTApdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogMCIpO2lmKGQ+dGhpc1tlXS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgc3RlcHMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIHZhbHVlIG9mIHBhcnQgKCIrdGhpc1tlXS5sZW5ndGgrIikiKTtpZihjPnUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IEZyb20gdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdG8gdmFsdWU6ICciK3QrIiciKTtmb3IobGV0IGg9YztoPD11O2grPWQpdGhpcy5zZXRQYXJ0KGUsaCxpWzFdfHxyKX1leHRyYWN0TnRoKHQsZSl7bGV0IGE9dCxyO2lmKGEuaW5jbHVkZXMoIiMiKSl7aWYoZSE9PSJkYXlPZldlZWsiKXRocm93IG5ldyBFcnJvcigiQ3JvblBhdHRlcm46IG50aCAoIykgb25seSBhbGxvd2VkIGluIGRheS1vZi13ZWVrIGZpZWxkIik7cj1hLnNwbGl0KCIjIilbMV0sYT1hLnNwbGl0KCIjIilbMF19cmV0dXJuW2Escl19aGFuZGxlUmFuZ2UodCxlLGEscil7bGV0IGk9dGhpcy5leHRyYWN0TnRoKHQsZSksbz1pWzBdLnNwbGl0KCItIik7aWYoby5sZW5ndGghPT0yKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgcmFuZ2U6ICciK3QrIiciKTtsZXQgcz1wYXJzZUludChvWzBdLDEwKSthLGw9cGFyc2VJbnQob1sxXSwxMCkrYTtpZihpc05hTihzKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pIik7aWYoaXNOYU4obCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCB1cHBlciByYW5nZSAoTmFOKSIpO2lmKHM+bCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogRnJvbSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0byB2YWx1ZTogJyIrdCsiJyIpO2ZvcihsZXQgZj1zO2Y8PWw7ZisrKXRoaXMuc2V0UGFydChlLGYsaVsxXXx8cil9aGFuZGxlU3RlcHBpbmcodCxlLGEscil7bGV0IGk9dGhpcy5leHRyYWN0TnRoKHQsZSksbz1pWzBdLnNwbGl0KCIvIik7aWYoby5sZW5ndGghPT0yKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6ICciK3QrIiciKTtvWzBdPT09IiImJihvWzBdPSIqIik7bGV0IHM9MDtvWzBdIT09IioiJiYocz1wYXJzZUludChvWzBdLDEwKSthKTtsZXQgbD1wYXJzZUludChvWzFdLDEwKTtpZihpc05hTihsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAoTmFOKSIpO2lmKGw9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6IDAiKTtpZihsPnRoaXNbZV0ubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIG1heCBzdGVwcyBmb3IgcGFydCBpcyAoIit0aGlzW2VdLmxlbmd0aCsiKSIpO2ZvcihsZXQgZj1zO2Y8dGhpc1tlXS5sZW5ndGg7Zis9bCl0aGlzLnNldFBhcnQoZSxmLGlbMV18fHIpfXJlcGxhY2VBbHBoYURheXModCl7cmV0dXJuIHQucmVwbGFjZSgvLXN1bi9naSwiLTciKS5yZXBsYWNlKC9zdW4vZ2ksIjAiKS5yZXBsYWNlKC9tb24vZ2ksIjEiKS5yZXBsYWNlKC90dWUvZ2ksIjIiKS5yZXBsYWNlKC93ZWQvZ2ksIjMiKS5yZXBsYWNlKC90aHUvZ2ksIjQiKS5yZXBsYWNlKC9mcmkvZ2ksIjUiKS5yZXBsYWNlKC9zYXQvZ2ksIjYiKX1yZXBsYWNlQWxwaGFNb250aHModCl7cmV0dXJuIHQucmVwbGFjZSgvamFuL2dpLCIxIikucmVwbGFjZSgvZmViL2dpLCIyIikucmVwbGFjZSgvbWFyL2dpLCIzIikucmVwbGFjZSgvYXByL2dpLCI0IikucmVwbGFjZSgvbWF5L2dpLCI1IikucmVwbGFjZSgvanVuL2dpLCI2IikucmVwbGFjZSgvanVsL2dpLCI3IikucmVwbGFjZSgvYXVnL2dpLCI4IikucmVwbGFjZSgvc2VwL2dpLCI5IikucmVwbGFjZSgvb2N0L2dpLCIxMCIpLnJlcGxhY2UoL25vdi9naSwiMTEiKS5yZXBsYWNlKC9kZWMvZ2ksIjEyIil9aGFuZGxlTmlja25hbWVzKHQpe2xldCBlPXQudHJpbSgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGU9PT0iQHllYXJseSJ8fGU9PT0iQGFubnVhbGx5Ij8iMCAwIDEgMSAqIjplPT09IkBtb250aGx5Ij8iMCAwIDEgKiAqIjplPT09IkB3ZWVrbHkiPyIwIDAgKiAqIDAiOmU9PT0iQGRhaWx5Ij8iMCAwICogKiAqIjplPT09IkBob3VybHkiPyIwICogKiAqICoiOnR9c2V0TnRoV2Vla2RheU9mTW9udGgodCxlKXtpZih0eXBlb2YgZSE9Im51bWJlciImJmU9PT0iTCIpdGhpcy5kYXlPZldlZWtbdF09dGhpcy5kYXlPZldlZWtbdF18cVk7ZWxzZSBpZihlPT09SjUpdGhpcy5kYXlPZldlZWtbdF09SjU7ZWxzZSBpZihlPDYmJmU+MCl0aGlzLmRheU9mV2Vla1t0XT10aGlzLmRheU9mV2Vla1t0XXxaSWVbZS0xXTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoYENyb25QYXR0ZXJuOiBudGggd2Vla2RheSBvdXQgb2YgcmFuZ2UsIHNob3VsZCBiZSAxLTUgb3IgTC4gVmFsdWU6ICR7ZX0sIFR5cGU6ICR7dHlwZW9mIGV9YCl9fSxYSWU9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxzaT1bWyJtb250aCIsInllYXIiLDBdLFsiZGF5IiwibW9udGgiLC0xXSxbImhvdXIiLCJkYXkiLDBdLFsibWludXRlIiwiaG91ciIsMF0sWyJzZWNvbmQiLCJtaW51dGUiLDBdXSxRMj1jbGFzcyBLSWV7dHo7bXM7c2Vjb25kO21pbnV0ZTtob3VyO2RheTttb250aDt5ZWFyO2NvbnN0cnVjdG9yKGUsYSl7aWYodGhpcy50ej1hLGUmJmUgaW5zdGFuY2VvZiBEYXRlKWlmKCFpc05hTihlKSl0aGlzLmZyb21EYXRlKGUpO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvbkRhdGU6IEludmFsaWQgZGF0ZSBwYXNzZWQgdG8gQ3JvbkRhdGUgY29uc3RydWN0b3IiKTtlbHNlIGlmKGU9PT12b2lkIDApdGhpcy5mcm9tRGF0ZShuZXcgRGF0ZSk7ZWxzZSBpZihlJiZ0eXBlb2YgZT09InN0cmluZyIpdGhpcy5mcm9tU3RyaW5nKGUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEtJZSl0aGlzLmZyb21Dcm9uRGF0ZShlKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25EYXRlOiBJbnZhbGlkIHR5cGUgKCIrdHlwZW9mIGUrIikgcGFzc2VkIHRvIENyb25EYXRlIGNvbnN0cnVjdG9yIil9aXNOdGhXZWVrZGF5T2ZNb250aChlLGEscixpKXtsZXQgbz1uZXcgRGF0ZShEYXRlLlVUQyhlLGEscikpLmdldFVUQ0RheSgpLHM9MDtmb3IobGV0IGw9MTtsPD1yO2wrKyluZXcgRGF0ZShEYXRlLlVUQyhlLGEsbCkpLmdldFVUQ0RheSgpPT09byYmcysrO2lmKGkmSjUmJlpJZVtzLTFdJmkpcmV0dXJuITA7aWYoaSZxWSl7bGV0IGw9bmV3IERhdGUoRGF0ZS5VVEMoZSxhKzEsMCkpLmdldFVUQ0RhdGUoKTtmb3IobGV0IGY9cisxO2Y8PWw7ZisrKWlmKG5ldyBEYXRlKERhdGUuVVRDKGUsYSxmKSkuZ2V0VVRDRGF5KCk9PT1vKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZyb21EYXRlKGUpe2lmKHRoaXMudHohPT12b2lkIDApaWYodHlwZW9mIHRoaXMudHo9PSJudW1iZXIiKXRoaXMubXM9ZS5nZXRVVENNaWxsaXNlY29uZHMoKSx0aGlzLnNlY29uZD1lLmdldFVUQ1NlY29uZHMoKSx0aGlzLm1pbnV0ZT1lLmdldFVUQ01pbnV0ZXMoKSt0aGlzLnR6LHRoaXMuaG91cj1lLmdldFVUQ0hvdXJzKCksdGhpcy5kYXk9ZS5nZXRVVENEYXRlKCksdGhpcy5tb250aD1lLmdldFVUQ01vbnRoKCksdGhpcy55ZWFyPWUuZ2V0VVRDRnVsbFllYXIoKSx0aGlzLmFwcGx5KCk7ZWxzZXtsZXQgYT1tMi50b1RaKGUsdGhpcy50eik7dGhpcy5tcz1lLmdldE1pbGxpc2Vjb25kcygpLHRoaXMuc2Vjb25kPWEucyx0aGlzLm1pbnV0ZT1hLmksdGhpcy5ob3VyPWEuaCx0aGlzLmRheT1hLmQsdGhpcy5tb250aD1hLm0tMSx0aGlzLnllYXI9YS55fWVsc2UgdGhpcy5tcz1lLmdldE1pbGxpc2Vjb25kcygpLHRoaXMuc2Vjb25kPWUuZ2V0U2Vjb25kcygpLHRoaXMubWludXRlPWUuZ2V0TWludXRlcygpLHRoaXMuaG91cj1lLmdldEhvdXJzKCksdGhpcy5kYXk9ZS5nZXREYXRlKCksdGhpcy5tb250aD1lLmdldE1vbnRoKCksdGhpcy55ZWFyPWUuZ2V0RnVsbFllYXIoKX1mcm9tQ3JvbkRhdGUoZSl7dGhpcy50ej1lLnR6LHRoaXMueWVhcj1lLnllYXIsdGhpcy5tb250aD1lLm1vbnRoLHRoaXMuZGF5PWUuZGF5LHRoaXMuaG91cj1lLmhvdXIsdGhpcy5taW51dGU9ZS5taW51dGUsdGhpcy5zZWNvbmQ9ZS5zZWNvbmQsdGhpcy5tcz1lLm1zfWFwcGx5KCl7aWYodGhpcy5tb250aD4xMXx8dGhpcy5kYXk+WEllW3RoaXMubW9udGhdfHx0aGlzLmhvdXI+NTl8fHRoaXMubWludXRlPjU5fHx0aGlzLnNlY29uZD41OXx8dGhpcy5ob3VyPDB8fHRoaXMubWludXRlPDB8fHRoaXMuc2Vjb25kPDApe2xldCBlPW5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF5LHRoaXMuaG91cix0aGlzLm1pbnV0ZSx0aGlzLnNlY29uZCx0aGlzLm1zKSk7cmV0dXJuIHRoaXMubXM9ZS5nZXRVVENNaWxsaXNlY29uZHMoKSx0aGlzLnNlY29uZD1lLmdldFVUQ1NlY29uZHMoKSx0aGlzLm1pbnV0ZT1lLmdldFVUQ01pbnV0ZXMoKSx0aGlzLmhvdXI9ZS5nZXRVVENIb3VycygpLHRoaXMuZGF5PWUuZ2V0VVRDRGF0ZSgpLHRoaXMubW9udGg9ZS5nZXRVVENNb250aCgpLHRoaXMueWVhcj1lLmdldFVUQ0Z1bGxZZWFyKCksITB9ZWxzZSByZXR1cm4hMX1mcm9tU3RyaW5nKGUpe2lmKHR5cGVvZiB0aGlzLnR6PT0ibnVtYmVyIil7bGV0IGE9bTIuZnJvbVRaSVNPKGUpO3RoaXMubXM9YS5nZXRVVENNaWxsaXNlY29uZHMoKSx0aGlzLnNlY29uZD1hLmdldFVUQ1NlY29uZHMoKSx0aGlzLm1pbnV0ZT1hLmdldFVUQ01pbnV0ZXMoKSx0aGlzLmhvdXI9YS5nZXRVVENIb3VycygpLHRoaXMuZGF5PWEuZ2V0VVRDRGF0ZSgpLHRoaXMubW9udGg9YS5nZXRVVENNb250aCgpLHRoaXMueWVhcj1hLmdldFVUQ0Z1bGxZZWFyKCksdGhpcy5hcHBseSgpfWVsc2UgcmV0dXJuIHRoaXMuZnJvbURhdGUobTIuZnJvbVRaSVNPKGUsdGhpcy50eikpfWZpbmROZXh0KGUsYSxyLGkpe2xldCBvPXRoaXNbYV0scztyLmxhc3REYXlPZk1vbnRoJiYodGhpcy5tb250aCE9PTE/cz1YSWVbdGhpcy5tb250aF06cz1uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCsxLDAsMCwwLDAsMCkpLmdldFVUQ0RhdGUoKSk7bGV0IGw9IXIuc3RhckRPVyYmYT09ImRheSI/bmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLHRoaXMubW9udGgsMSwwLDAsMCwwKSkuZ2V0VVRDRGF5KCk6dm9pZCAwO2ZvcihsZXQgZj10aGlzW2FdK2k7ZjxyW2FdLmxlbmd0aDtmKyspe2xldCBjPXJbYV1bZl07aWYoYT09PSJkYXkiJiZyLmxhc3REYXlPZk1vbnRoJiZmLWk9PXMmJihjPTEpLGE9PT0iZGF5IiYmIXIuc3RhckRPVyl7bGV0IHU9ci5kYXlPZldlZWtbKGwrKGYtaS0xKSklN107aWYodSYmdSZKNSl1PXRoaXMuaXNOdGhXZWVrZGF5T2ZNb250aCh0aGlzLnllYXIsdGhpcy5tb250aCxmLWksdSk/MTowO2Vsc2UgaWYodSl0aHJvdyBuZXcgRXJyb3IoYENyb25EYXRlOiBJbnZhbGlkIHZhbHVlIGZvciBkYXlPZldlZWsgZW5jb3VudGVyZWQuICR7dX1gKTtlLmxlZ2FjeU1vZGUmJiFyLnN0YXJET00/Yz1jfHx1OmM9YyYmdX1pZihjKXJldHVybiB0aGlzW2FdPWYtaSxvIT09dGhpc1thXT8yOjF9cmV0dXJuIDN9cmVjdXJzZShlLGEscil7bGV0IGk9dGhpcy5maW5kTmV4dChhLHNpW3JdWzBdLGUsc2lbcl1bMl0pO2lmKGk+MSl7bGV0IG89cisxO2Zvcig7bzxzaS5sZW5ndGg7KXRoaXNbc2lbb11bMF1dPS1zaVtvXVsyXSxvKys7aWYoaT09PTMpcmV0dXJuIHRoaXNbc2lbcl1bMV1dKyssdGhpc1tzaVtyXVswXV09LXNpW3JdWzJdLHRoaXMuYXBwbHkoKSx0aGlzLnJlY3Vyc2UoZSxhLDApO2lmKHRoaXMuYXBwbHkoKSlyZXR1cm4gdGhpcy5yZWN1cnNlKGUsYSxyLTEpfXJldHVybiByKz0xLHI+PXNpLmxlbmd0aD90aGlzOnRoaXMueWVhcj49M2UzP251bGw6dGhpcy5yZWN1cnNlKGUsYSxyKX1pbmNyZW1lbnQoZSxhLHIpe3JldHVybiB0aGlzLnNlY29uZCs9YS5pbnRlcnZhbCE9PXZvaWQgMCYmYS5pbnRlcnZhbD4xJiZyP2EuaW50ZXJ2YWw6MSx0aGlzLm1zPTAsdGhpcy5hcHBseSgpLHRoaXMucmVjdXJzZShlLGEsMCl9Z2V0RGF0ZShlKXtyZXR1cm4gZXx8dGhpcy50ej09PXZvaWQgMD9uZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUsdGhpcy5zZWNvbmQsdGhpcy5tcyk6dHlwZW9mIHRoaXMudHo9PSJudW1iZXIiP25ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF5LHRoaXMuaG91cix0aGlzLm1pbnV0ZS10aGlzLnR6LHRoaXMuc2Vjb25kLHRoaXMubXMpKTptMi5mcm9tVFoobTIudHAodGhpcy55ZWFyLHRoaXMubW9udGgrMSx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUsdGhpcy5zZWNvbmQsdGhpcy50eiksITEpfWdldFRpbWUoKXtyZXR1cm4gdGhpcy5nZXREYXRlKCExKS5nZXRUaW1lKCl9fTtRSWU9MzAqMWUzLF9jPVtdLEpJZT1jbGFzc3tuYW1lO29wdGlvbnM7X3N0YXRlcztmbjtjb25zdHJ1Y3Rvcih0LGUsYSl7bGV0IHIsaTtpZihlOChlKSlpPWU7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpcj1lO2Vsc2UgaWYoZSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBvcHRpb25zSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuIik7aWYoZTgoYSkpaT1hO2Vsc2UgaWYodHlwZW9mIGE9PSJvYmplY3QiKXI9YTtlbHNlIGlmKGEhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDcm9uOiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBmb3IgZnVuY0luLiBTaG91bGQgYmUgb25lIG9mIGZ1bmN0aW9uLCBvciBvYmplY3QgKG9wdGlvbnMpLiIpO2lmKHRoaXMubmFtZT1yPy5uYW1lLHRoaXMub3B0aW9ucz1lVnQociksdGhpcy5fc3RhdGVzPXtraWxsOiExLGJsb2NraW5nOiExLHByZXZpb3VzUnVuOnZvaWQgMCxjdXJyZW50UnVuOnZvaWQgMCxvbmNlOnZvaWQgMCxjdXJyZW50VGltZW91dDp2b2lkIDAsbWF4UnVuczpyP3IubWF4UnVuczp2b2lkIDAscGF1c2VkOnI/ci5wYXVzZWQ6ITEscGF0dGVybjpuZXcgbk8oIiogKiAqICogKiIpfSx0JiYodCBpbnN0YW5jZW9mIERhdGV8fHR5cGVvZiB0PT0ic3RyaW5nIiYmdC5pbmRleE9mKCI6Iik+MCk/dGhpcy5fc3RhdGVzLm9uY2U9bmV3IFEyKHQsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KTp0aGlzLl9zdGF0ZXMucGF0dGVybj1uZXcgbk8odCx0aGlzLm9wdGlvbnMudGltZXpvbmUpLHRoaXMubmFtZSl7aWYoX2MuZmluZChvPT5vLm5hbWU9PT10aGlzLm5hbWUpKXRocm93IG5ldyBFcnJvcigiQ3JvbjogVHJpZWQgdG8gaW5pdGlhbGl6ZSBuZXcgbmFtZWQgam9iICciK3RoaXMubmFtZSsiJywgYnV0IG5hbWUgYWxyZWFkeSB0YWtlbi4iKTtfYy5wdXNoKHRoaXMpfXJldHVybiBpIT09dm9pZCAwJiZ0VnQoaSkmJih0aGlzLmZuPWksdGhpcy5zY2hlZHVsZSgpKSx0aGlzfW5leHRSdW4odCl7bGV0IGU9dGhpcy5fbmV4dCh0KTtyZXR1cm4gZT9lLmdldERhdGUoITEpOm51bGx9bmV4dFJ1bnModCxlKXt0aGlzLl9zdGF0ZXMubWF4UnVucyE9PXZvaWQgMCYmdD50aGlzLl9zdGF0ZXMubWF4UnVucyYmKHQ9dGhpcy5fc3RhdGVzLm1heFJ1bnMpO2xldCBhPVtdLHI9ZXx8dGhpcy5fc3RhdGVzLmN1cnJlbnRSdW58fHZvaWQgMDtmb3IoO3QtLSYmKHI9dGhpcy5uZXh0UnVuKHIpKTspYS5wdXNoKHIpO3JldHVybiBhfWdldFBhdHRlcm4oKXtyZXR1cm4gdGhpcy5fc3RhdGVzLnBhdHRlcm4/dGhpcy5fc3RhdGVzLnBhdHRlcm4ucGF0dGVybjp2b2lkIDB9aXNSdW5uaW5nKCl7bGV0IHQ9dGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKSxlPSF0aGlzLl9zdGF0ZXMucGF1c2VkLGE9dGhpcy5mbiE9PXZvaWQgMCxyPSF0aGlzLl9zdGF0ZXMua2lsbDtyZXR1cm4gZSYmYSYmciYmdCE9PW51bGx9aXNTdG9wcGVkKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5raWxsfWlzQnVzeSgpe3JldHVybiB0aGlzLl9zdGF0ZXMuYmxvY2tpbmd9Y3VycmVudFJ1bigpe3JldHVybiB0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bj90aGlzLl9zdGF0ZXMuY3VycmVudFJ1bi5nZXREYXRlKCk6bnVsbH1wcmV2aW91c1J1bigpe3JldHVybiB0aGlzLl9zdGF0ZXMucHJldmlvdXNSdW4/dGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuLmdldERhdGUoKTpudWxsfW1zVG9OZXh0KHQpe2xldCBlPXRoaXMuX25leHQodCk7cmV0dXJuIGU/dCBpbnN0YW5jZW9mIFEyfHx0IGluc3RhbmNlb2YgRGF0ZT9lLmdldFRpbWUoKS10LmdldFRpbWUoKTplLmdldFRpbWUoKS1uZXcgUTIodCkuZ2V0VGltZSgpOm51bGx9c3RvcCgpe3RoaXMuX3N0YXRlcy5raWxsPSEwLHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCk7bGV0IHQ9X2MuaW5kZXhPZih0aGlzKTt0Pj0wJiZfYy5zcGxpY2UodCwxKX1wYXVzZSgpe3JldHVybiB0aGlzLl9zdGF0ZXMucGF1c2VkPSEwLCF0aGlzLl9zdGF0ZXMua2lsbH1yZXN1bWUoKXtyZXR1cm4gdGhpcy5fc3RhdGVzLnBhdXNlZD0hMSwhdGhpcy5fc3RhdGVzLmtpbGx9c2NoZWR1bGUodCl7aWYodCYmdGhpcy5mbil0aHJvdyBuZXcgRXJyb3IoIkNyb246IEl0IGlzIG5vdCBhbGxvd2VkIHRvIHNjaGVkdWxlIHR3byBmdW5jdGlvbnMgdXNpbmcgdGhlIHNhbWUgQ3JvbmVyIGluc3RhbmNlLiIpO3QmJih0aGlzLmZuPXQpO2xldCBlPXRoaXMubXNUb05leHQoKSxhPXRoaXMubmV4dFJ1bih0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bik7cmV0dXJuIGU9PW51bGx8fGlzTmFOKGUpfHxhPT09bnVsbD90aGlzOihlPlFJZSYmKGU9UUllKSx0aGlzLl9zdGF0ZXMuY3VycmVudFRpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5fY2hlY2tUcmlnZ2VyKGEpLGUpLHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCYmdGhpcy5vcHRpb25zLnVucmVmJiZhVnQodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KSx0aGlzKX1hc3luYyBfdHJpZ2dlcih0KXtpZih0aGlzLl9zdGF0ZXMuYmxvY2tpbmc9ITAsdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW49bmV3IFEyKHZvaWQgMCx0aGlzLm9wdGlvbnMudGltZXpvbmV8fHRoaXMub3B0aW9ucy51dGNPZmZzZXQpLHRoaXMub3B0aW9ucy5jYXRjaCl0cnl7dGhpcy5mbiE9PXZvaWQgMCYmYXdhaXQgdGhpcy5mbih0aGlzLHRoaXMub3B0aW9ucy5jb250ZXh0KX1jYXRjaChlKXtlOCh0aGlzLm9wdGlvbnMuY2F0Y2gpJiZ0aGlzLm9wdGlvbnMuY2F0Y2goZSx0aGlzKX1lbHNlIHRoaXMuZm4hPT12b2lkIDAmJmF3YWl0IHRoaXMuZm4odGhpcyx0aGlzLm9wdGlvbnMuY29udGV4dCk7dGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuPW5ldyBRMih0LHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCksdGhpcy5fc3RhdGVzLmJsb2NraW5nPSExfWFzeW5jIHRyaWdnZXIoKXthd2FpdCB0aGlzLl90cmlnZ2VyKCl9cnVuc0xlZnQoKXtyZXR1cm4gdGhpcy5fc3RhdGVzLm1heFJ1bnN9X2NoZWNrVHJpZ2dlcih0KXtsZXQgZT1uZXcgRGF0ZSxhPSF0aGlzLl9zdGF0ZXMucGF1c2VkJiZlLmdldFRpbWUoKT49dC5nZXRUaW1lKCkscj10aGlzLl9zdGF0ZXMuYmxvY2tpbmcmJnRoaXMub3B0aW9ucy5wcm90ZWN0O2EmJiFyPyh0aGlzLl9zdGF0ZXMubWF4UnVucyE9PXZvaWQgMCYmdGhpcy5fc3RhdGVzLm1heFJ1bnMtLSx0aGlzLl90cmlnZ2VyKCkpOmEmJnImJmU4KHRoaXMub3B0aW9ucy5wcm90ZWN0KSYmc2V0VGltZW91dCgoKT0+dGhpcy5vcHRpb25zLnByb3RlY3QodGhpcyksMCksdGhpcy5zY2hlZHVsZSgpfV9uZXh0KHQpe2xldCBlPSEhKHR8fHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKSxhPSExOyF0JiZ0aGlzLm9wdGlvbnMuc3RhcnRBdCYmdGhpcy5vcHRpb25zLmludGVydmFsJiYoW3QsZV09dGhpcy5fY2FsY3VsYXRlUHJldmlvdXNSdW4odCxlKSxhPSF0KSx0PW5ldyBRMih0LHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCksdGhpcy5vcHRpb25zLnN0YXJ0QXQmJnQmJnQuZ2V0VGltZSgpPHRoaXMub3B0aW9ucy5zdGFydEF0LmdldFRpbWUoKSYmKHQ9dGhpcy5vcHRpb25zLnN0YXJ0QXQpO2xldCByPXRoaXMuX3N0YXRlcy5vbmNlfHxuZXcgUTIodCx0aGlzLm9wdGlvbnMudGltZXpvbmV8fHRoaXMub3B0aW9ucy51dGNPZmZzZXQpO3JldHVybiFhJiZyIT09dGhpcy5fc3RhdGVzLm9uY2UmJihyPXIuaW5jcmVtZW50KHRoaXMuX3N0YXRlcy5wYXR0ZXJuLHRoaXMub3B0aW9ucyxlKSksdGhpcy5fc3RhdGVzLm9uY2UmJnRoaXMuX3N0YXRlcy5vbmNlLmdldFRpbWUoKTw9dC5nZXRUaW1lKCl8fHI9PT1udWxsfHx0aGlzLl9zdGF0ZXMubWF4UnVucyE9PXZvaWQgMCYmdGhpcy5fc3RhdGVzLm1heFJ1bnM8PTB8fHRoaXMuX3N0YXRlcy5raWxsfHx0aGlzLm9wdGlvbnMuc3RvcEF0JiZyLmdldFRpbWUoKT49dGhpcy5vcHRpb25zLnN0b3BBdC5nZXRUaW1lKCk/bnVsbDpyfV9jYWxjdWxhdGVQcmV2aW91c1J1bih0LGUpe2xldCBhPW5ldyBRMih2b2lkIDAsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KSxyPXQ7aWYodGhpcy5vcHRpb25zLnN0YXJ0QXQuZ2V0VGltZSgpPD1hLmdldFRpbWUoKSl7cj10aGlzLm9wdGlvbnMuc3RhcnRBdDtsZXQgaT1yLmdldFRpbWUoKSt0aGlzLm9wdGlvbnMuaW50ZXJ2YWwqMWUzO2Zvcig7aTw9YS5nZXRUaW1lKCk7KXI9bmV3IFEyKHIsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KS5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sdGhpcy5vcHRpb25zLCEwKSxpPXIuZ2V0VGltZSgpK3RoaXMub3B0aW9ucy5pbnRlcnZhbCoxZTM7ZT0hMH1yZXR1cm4gcj09PW51bGwmJihyPXZvaWQgMCksW3IsZV19fX0pO3ZhciBjTyxhOCxyVnQsRmgxLHZyLGRPLGcyLGlhLEFjLFZZLHVvLCRjLGZPLHVPLHBPLGhPLERzLERjLGxPLHRGZSxVWSxqWSxhRmUsV1ksZ3Q9bigoKT0+e2NPPTcsYTg9MzY1LjI0MjUsclZ0PU1hdGgucG93KDEwLDgpKjI0KjYwKjYwKjFlMyxGaDE9LXJWdCx2cj02MDQ4ZTUsZE89ODY0ZTUsZzI9NmU0LGlhPTM2ZTUsQWM9MWUzLFZZPTUyNTYwMCx1bz00MzIwMCwkYz0xNDQwLGZPPTYwLHVPPTMscE89MTIsaE89NCxEcz0zNjAwLERjPTYwLGxPPURzKjI0LHRGZT1sTyo3LFVZPWxPKjM2NS4yNDI1LGpZPVVZLzEyLGFGZT1qWSozLFdZPVN5bWJvbC5mb3IoImNvbnN0cnVjdERhdGVGcm9tIil9KTtmdW5jdGlvbiB3ZSh0LGUpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KGUpOnQmJnR5cGVvZiB0PT0ib2JqZWN0IiYmV1kgaW4gdD90W1dZXShlKTp0IGluc3RhbmNlb2YgRGF0ZT9uZXcgdC5jb25zdHJ1Y3RvcihlKTpuZXcgRGF0ZShlKX12YXIgUmgxLEtlPW4oKCk9PntndCgpO1JoMT13ZX0pO2Z1bmN0aW9uIGVlKHQsZSl7cmV0dXJuIHdlKGV8fHQsdCl9dmFyIFZoMSxNZT1uKCgpPT57S2UoKTtWaDE9ZWV9KTtmdW5jdGlvbiBGMSh0LGUsYSl7bGV0IHI9ZWUodCxhPy5pbik7cmV0dXJuIGlzTmFOKGUpP3dlKGE/LmlufHx0LE5hTik6KGUmJnIuc2V0RGF0ZShyLmdldERhdGUoKStlKSxyKX12YXIgR2gxLHlyPW4oKCk9PntLZSgpO01lKCk7R2gxPUYxfSk7ZnVuY3Rpb24gd3IodCxlLGEpe2xldCByPWVlKHQsYT8uaW4pO2lmKGlzTmFOKGUpKXJldHVybiB3ZShhPy5pbnx8dCxOYU4pO2lmKCFlKXJldHVybiByO2xldCBpPXIuZ2V0RGF0ZSgpLG89d2UoYT8uaW58fHQsci5nZXRUaW1lKCkpO28uc2V0TW9udGgoci5nZXRNb250aCgpK2UrMSwwKTtsZXQgcz1vLmdldERhdGUoKTtyZXR1cm4gaT49cz9vOihyLnNldEZ1bGxZZWFyKG8uZ2V0RnVsbFllYXIoKSxvLmdldE1vbnRoKCksaSkscil9dmFyIFFoMSxFYz1uKCgpPT57S2UoKTtNZSgpO1FoMT13cn0pO2Z1bmN0aW9uIHBvKHQsZSxhKXtsZXR7eWVhcnM6cj0wLG1vbnRoczppPTAsd2Vla3M6bz0wLGRheXM6cz0wLGhvdXJzOmw9MCxtaW51dGVzOmY9MCxzZWNvbmRzOmM9MH09ZSx1PWVlKHQsYT8uaW4pLGQ9aXx8cj93cih1LGkrcioxMik6dSxoPXN8fG8/RjEoZCxzK28qNyk6ZCxnPWYrbCo2MCx4PShjK2cqNjApKjFlMztyZXR1cm4gd2UoYT8uaW58fHQsK2greCl9dmFyIHJtMSxHWT1uKCgpPT57eXIoKTtFYygpO0tlKCk7TWUoKTtybTE9cG99KTtmdW5jdGlvbiBtTyh0LGUpe3JldHVybiBlZSh0LGU/LmluKS5nZXREYXkoKT09PTZ9dmFyIHNtMSxZWT1uKCgpPT57TWUoKTtzbTE9bU99KTtmdW5jdGlvbiBnTyh0LGUpe3JldHVybiBlZSh0LGU/LmluKS5nZXREYXkoKT09PTB9dmFyIGNtMSxaWT1uKCgpPT57TWUoKTtjbTE9Z099KTtmdW5jdGlvbiBNcih0LGUpe2xldCBhPWVlKHQsZT8uaW4pLmdldERheSgpO3JldHVybiBhPT09MHx8YT09PTZ9dmFyIHVtMSxyOD1uKCgpPT57TWUoKTt1bTE9TXJ9KTtmdW5jdGlvbiB4Tyh0LGUsYSl7bGV0IHI9ZWUodCxhPy5pbiksaT1NcihyLGEpO2lmKGlzTmFOKGUpKXJldHVybiB3ZShhPy5pbixOYU4pO2xldCBvPXIuZ2V0SG91cnMoKSxzPWU8MD8tMToxLGw9TWF0aC50cnVuYyhlLzUpO3Iuc2V0RGF0ZShyLmdldERhdGUoKStsKjcpO2xldCBmPU1hdGguYWJzKGUlNSk7Zm9yKDtmPjA7KXIuc2V0RGF0ZShyLmdldERhdGUoKStzKSxNcihyLGEpfHwoZi09MSk7cmV0dXJuIGkmJk1yKHIsYSkmJmUhPT0wJiYobU8ocixhKSYmci5zZXREYXRlKHIuZ2V0RGF0ZSgpKyhzPDA/MjotMSkpLGdPKHIsYSkmJnIuc2V0RGF0ZShyLmdldERhdGUoKSsoczwwPzE6LTIpKSksci5zZXRIb3VycyhvKSxyfXZhciB2bTEsWFk9bigoKT0+e0tlKCk7WVkoKTtaWSgpO3I4KCk7TWUoKTt2bTE9eE99KTtmdW5jdGlvbiBobyh0LGUsYSl7cmV0dXJuIHdlKGE/LmlufHx0LCtlZSh0KStlKX12YXIgem0xLGk4PW4oKCk9PntLZSgpO01lKCk7em0xPWhvfSk7ZnVuY3Rpb24gYk8odCxlLGEpe3JldHVybiBobyh0LGUqaWEsYSl9dmFyIExtMSxRWT1uKCgpPT57aTgoKTtndCgpO0xtMT1iT30pO2Z1bmN0aW9uIFV0KCl7cmV0dXJuIHJGZX1mdW5jdGlvbiBpRmUodCl7ckZlPXR9dmFyIHJGZSx4Mj1uKCgpPT57ckZlPXt9fSk7ZnVuY3Rpb24gYTEodCxlKXtsZXQgYT1VdCgpLHI9ZT8ud2Vla1N0YXJ0c09uPz9lPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/YS53ZWVrU3RhcnRzT24/P2EubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/PzAsaT1lZSh0LGU/LmluKSxvPWkuZ2V0RGF5KCkscz0obzxyPzc6MCkrby1yO3JldHVybiBpLnNldERhdGUoaS5nZXREYXRlKCktcyksaS5zZXRIb3VycygwLDAsMCwwKSxpfXZhciBEbTEsVWE9bigoKT0+e3gyKCk7TWUoKTtEbTE9YTF9KTtmdW5jdGlvbiBBMSh0LGUpe3JldHVybiBhMSh0LHsuLi5lLHdlZWtTdGFydHNPbjoxfSl9dmFyIFBtMSx6cj1uKCgpPT57VWEoKTtQbTE9QTF9KTtmdW5jdGlvbiBJMih0LGUpe2xldCBhPWVlKHQsZT8uaW4pLHI9YS5nZXRGdWxsWWVhcigpLGk9d2UoYSwwKTtpLnNldEZ1bGxZZWFyKHIrMSwwLDQpLGkuc2V0SG91cnMoMCwwLDAsMCk7bGV0IG89QTEoaSkscz13ZShhLDApO3Muc2V0RnVsbFllYXIociwwLDQpLHMuc2V0SG91cnMoMCwwLDAsMCk7bGV0IGw9QTEocyk7cmV0dXJuIGEuZ2V0VGltZSgpPj1vLmdldFRpbWUoKT9yKzE6YS5nZXRUaW1lKCk+PWwuZ2V0VGltZSgpP3I6ci0xfXZhciBSbTEsbW89bigoKT0+e0tlKCk7enIoKTtNZSgpO1JtMT1JMn0pO2Z1bmN0aW9uIGIxKHQpe2xldCBlPWVlKHQpLGE9bmV3IERhdGUoRGF0ZS5VVEMoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxlLmdldEhvdXJzKCksZS5nZXRNaW51dGVzKCksZS5nZXRTZWNvbmRzKCksZS5nZXRNaWxsaXNlY29uZHMoKSkpO3JldHVybiBhLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSksK3QtK2F9dmFyIG5pPW4oKCk9PntNZSgpfSk7ZnVuY3Rpb24gWWUodCwuLi5lKXtsZXQgYT13ZS5iaW5kKG51bGwsdHx8ZS5maW5kKHI9PnR5cGVvZiByPT0ib2JqZWN0IikpO3JldHVybiBlLm1hcChhKX12YXIgWHQ9bigoKT0+e0tlKCl9KTtmdW5jdGlvbiBrcih0LGUpe2xldCBhPWVlKHQsZT8uaW4pO3JldHVybiBhLnNldEhvdXJzKDAsMCwwLDApLGF9dmFyIEdtMSxvOD1uKCgpPT57TWUoKTtHbTE9a3J9KTtmdW5jdGlvbiBXMSh0LGUsYSl7bGV0W3IsaV09WWUoYT8uaW4sdCxlKSxvPWtyKHIpLHM9a3IoaSksbD0rby1iMShvKSxmPStzLWIxKHMpO3JldHVybiBNYXRoLnJvdW5kKChsLWYpL2RPKX12YXIgSm0xLGxpPW4oKCk9PntuaSgpO1h0KCk7Z3QoKTtvOCgpO0ptMT1XMX0pO2Z1bmN0aW9uIG9hKHQsZSl7bGV0IGE9STIodCxlKSxyPXdlKGU/LmlufHx0LDApO3JldHVybiByLnNldEZ1bGxZZWFyKGEsMCw0KSxyLnNldEhvdXJzKDAsMCwwLDApLEExKHIpfXZhciBpZzEsTmM9bigoKT0+e0tlKCk7bW8oKTt6cigpO2lnMT1vYX0pO2Z1bmN0aW9uIHZPKHQsZSxhKXtsZXQgcj1lZSh0LGE/LmluKSxpPVcxKHIsb2EocixhKSksbz13ZShhPy5pbnx8dCwwKTtyZXR1cm4gby5zZXRGdWxsWWVhcihlLDAsNCksby5zZXRIb3VycygwLDAsMCwwKSxyPW9hKG8pLHIuc2V0RGF0ZShyLmdldERhdGUoKStpKSxyfXZhciBkZzEsS1k9bigoKT0+e0tlKCk7bGkoKTtOYygpO01lKCk7ZGcxPXZPfSk7ZnVuY3Rpb24geU8odCxlLGEpe3JldHVybiB2Tyh0LEkyKHQsYSkrZSxhKX12YXIgaGcxLEpZPW4oKCk9PnttbygpO0tZKCk7aGcxPXlPfSk7ZnVuY3Rpb24gUGModCxlLGEpe2xldCByPWVlKHQsYT8uaW4pO3JldHVybiByLnNldFRpbWUoci5nZXRUaW1lKCkrZSpnMikscn12YXIgYmcxLHdPPW4oKCk9PntndCgpO01lKCk7YmcxPVBjfSk7ZnVuY3Rpb24gSWModCxlLGEpe3JldHVybiB3cih0LGUqMyxhKX12YXIgd2cxLE1PPW4oKCk9PntFYygpO3dnMT1JY30pO2Z1bmN0aW9uIHpPKHQsZSxhKXtyZXR1cm4gaG8odCxlKjFlMyxhKX12YXIga2cxLGVaPW4oKCk9PntpOCgpO2tnMT16T30pO2Z1bmN0aW9uIGdvKHQsZSxhKXtyZXR1cm4gRjEodCxlKjcsYSl9dmFyIExnMSxzOD1uKCgpPT57eXIoKTtMZzE9Z299KTtmdW5jdGlvbiBrTyh0LGUsYSl7cmV0dXJuIHdyKHQsZSoxMixhKX12YXIgQWcxLHRaPW4oKCk9PntFYygpO0FnMT1rT30pO2Z1bmN0aW9uIG9GZSh0LGUsYSl7bGV0W3IsaV09WytlZSh0LnN0YXJ0LGE/LmluKSwrZWUodC5lbmQsYT8uaW4pXS5zb3J0KChsLGYpPT5sLWYpLFtvLHNdPVsrZWUoZS5zdGFydCxhPy5pbiksK2VlKGUuZW5kLGE/LmluKV0uc29ydCgobCxmKT0+bC1mKTtyZXR1cm4gYT8uaW5jbHVzaXZlP3I8PXMmJm88PWk6cjxzJiZvPGl9dmFyIEVnMSxzRmU9bigoKT0+e01lKCk7RWcxPW9GZX0pO2Z1bmN0aW9uIFNPKHQsZSl7bGV0IGEscj1lPy5pbjtyZXR1cm4gdC5mb3JFYWNoKGk9PnshciYmdHlwZW9mIGk9PSJvYmplY3QiJiYocj13ZS5iaW5kKG51bGwsaSkpO2xldCBvPWVlKGkscik7KCFhfHxhPG98fGlzTmFOKCtvKSkmJihhPW8pfSksd2UocixhfHxOYU4pfXZhciBGZzEsYVo9bigoKT0+e0tlKCk7TWUoKTtGZzE9U099KTtmdW5jdGlvbiBDTyh0LGUpe2xldCBhLHI9ZT8uaW47cmV0dXJuIHQuZm9yRWFjaChpPT57IXImJnR5cGVvZiBpPT0ib2JqZWN0IiYmKHI9d2UuYmluZChudWxsLGkpKTtsZXQgbz1lZShpLHIpOyghYXx8YT5vfHxpc05hTigrbykpJiYoYT1vKX0pLHdlKHIsYXx8TmFOKX12YXIgSGcxLHJaPW4oKCk9PntLZSgpO01lKCk7SGcxPUNPfSk7ZnVuY3Rpb24gbkZlKHQsZSxhKXtsZXRbcixpLG9dPVllKGE/LmluLHQsZS5zdGFydCxlLmVuZCk7cmV0dXJuIENPKFtTTyhbcixpXSxhKSxvXSxhKX12YXIgV2cxLGxGZT1uKCgpPT57WHQoKTthWigpO3JaKCk7V2cxPW5GZX0pO2Z1bmN0aW9uIExPKHQsZSl7bGV0IGE9K2VlKHQpO2lmKGlzTmFOKGEpKXJldHVybiBOYU47bGV0IHIsaTtyZXR1cm4gZS5mb3JFYWNoKChvLHMpPT57bGV0IGw9ZWUobyk7aWYoaXNOYU4oK2wpKXtyPU5hTixpPU5hTjtyZXR1cm59bGV0IGY9TWF0aC5hYnMoYS0rbCk7KHI9PW51bGx8fGY8aSkmJihyPXMsaT1mKX0pLHJ9dmFyIFpnMSxpWj1uKCgpPT57TWUoKTtaZzE9TE99KTtmdW5jdGlvbiBjRmUodCxlLGEpe2xldFtyLC4uLmldPVllKGE/LmluLHQsLi4uZSksbz1MTyhyLGkpO2lmKHR5cGVvZiBvPT0ibnVtYmVyIiYmaXNOYU4obykpcmV0dXJuIHdlKHIsTmFOKTtpZihvIT09dm9pZCAwKXJldHVybiBpW29dfXZhciBleDEsZEZlPW4oKCk9PntYdCgpO2laKCk7S2UoKTtleDE9Y0ZlfSk7ZnVuY3Rpb24gYjIodCxlKXtsZXQgYT0rZWUodCktK2VlKGUpO3JldHVybiBhPDA/LTE6YT4wPzE6YX12YXIgcngxLEVzPW4oKCk9PntNZSgpO3J4MT1iMn0pO2Z1bmN0aW9uIGZGZSh0LGUpe2xldCBhPStlZSh0KS0rZWUoZSk7cmV0dXJuIGE+MD8tMTphPDA/MTphfXZhciBzeDEsdUZlPW4oKCk9PntNZSgpO3N4MT1mRmV9KTtmdW5jdGlvbiB5dCh0KXtyZXR1cm4gd2UodCxEYXRlLm5vdygpKX12YXIgY3gxLE8xPW4oKCk9PntLZSgpO2N4MT15dH0pO2Z1bmN0aW9uIHBGZSh0KXtsZXQgZT1NYXRoLnRydW5jKHQvNyk7cmV0dXJuIGU9PT0wPzA6ZX12YXIgdXgxLGhGZT1uKCgpPT57Z3QoKTt1eDE9cEZlfSk7ZnVuY3Rpb24gU3IodCxlLGEpe2xldFtyLGldPVllKGE/LmluLHQsZSk7cmV0dXJuK2tyKHIpPT0ra3IoaSl9dmFyIGd4MSxGYz1uKCgpPT57WHQoKTtvOCgpO2d4MT1Tcn0pO2Z1bmN0aW9uIFRPKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZXx8dHlwZW9mIHQ9PSJvYmplY3QiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBEYXRlXSJ9dmFyIGJ4MSxvWj1uKCgpPT57YngxPVRPfSk7ZnVuY3Rpb24gcjIodCl7cmV0dXJuISghVE8odCkmJnR5cGVvZiB0IT0ibnVtYmVyInx8aXNOYU4oK2VlKHQpKSl9dmFyIE14MSxjaT1uKCgpPT57b1ooKTtNZSgpO014MT1yMn0pO2Z1bmN0aW9uIG1GZSh0LGUsYSl7bGV0W3IsaV09WWUoYT8uaW4sdCxlKTtpZighcjIocil8fCFyMihpKSlyZXR1cm4gTmFOO2xldCBvPVcxKHIsaSkscz1vPDA/LTE6MSxsPU1hdGgudHJ1bmMoby83KSxmPWwqNSxjPUYxKGksbCo3KTtmb3IoOyFTcihyLGMpOylmKz1NcihjLGEpPzA6cyxjPUYxKGMscyk7cmV0dXJuIGY9PT0wPzA6Zn12YXIgQXgxLGdGZT1uKCgpPT57WHQoKTt5cigpO2xpKCk7RmMoKTtjaSgpO3I4KCk7QXgxPW1GZX0pO2Z1bmN0aW9uIF9PKHQsZSxhKXtsZXRbcixpXT1ZZShhPy5pbix0LGUpO3JldHVybiBJMihyLGEpLUkyKGksYSl9dmFyIE54MSxzWj1uKCgpPT57WHQoKTttbygpO054MT1fT30pO2Z1bmN0aW9uIHhGZSh0LGUsYSl7bGV0W3IsaV09WWUoYT8uaW4sdCxlKSxvPUExKHIpLHM9QTEoaSksbD0rby1iMShvKSxmPStzLWIxKHMpO3JldHVybiBNYXRoLnJvdW5kKChsLWYpL3ZyKX12YXIgUngxLGJGZT1uKCgpPT57bmkoKTtYdCgpO2d0KCk7enIoKTtSeDE9eEZlfSk7ZnVuY3Rpb24gTnModCxlLGEpe2xldFtyLGldPVllKGE/LmluLHQsZSksbz1yLmdldEZ1bGxZZWFyKCktaS5nZXRGdWxsWWVhcigpLHM9ci5nZXRNb250aCgpLWkuZ2V0TW9udGgoKTtyZXR1cm4gbyoxMitzfXZhciBWeDEsQU89bigoKT0+e1h0KCk7VngxPU5zfSk7ZnVuY3Rpb24gbjgodCxlKXtsZXQgYT1lZSh0LGU/LmluKTtyZXR1cm4gTWF0aC50cnVuYyhhLmdldE1vbnRoKCkvMykrMX12YXIgV3gxLG5aPW4oKCk9PntNZSgpO1d4MT1uOH0pO2Z1bmN0aW9uIE9jKHQsZSxhKXtsZXRbcixpXT1ZZShhPy5pbix0LGUpLG89ci5nZXRGdWxsWWVhcigpLWkuZ2V0RnVsbFllYXIoKSxzPW44KHIpLW44KGkpO3JldHVybiBvKjQrc312YXIgWHgxLGxaPW4oKCk9PntYdCgpO25aKCk7WHgxPU9jfSk7ZnVuY3Rpb24gUHModCxlLGEpe2xldFtyLGldPVllKGE/LmluLHQsZSksbz1hMShyLGEpLHM9YTEoaSxhKSxsPStvLWIxKG8pLGY9K3MtYjEocyk7cmV0dXJuIE1hdGgucm91bmQoKGwtZikvdnIpfXZhciBhYjEsJE89bigoKT0+e25pKCk7WHQoKTtndCgpO1VhKCk7YWIxPVBzfSk7ZnVuY3Rpb24geG8odCxlLGEpe2xldFtyLGldPVllKGE/LmluLHQsZSk7cmV0dXJuIHIuZ2V0RnVsbFllYXIoKS1pLmdldEZ1bGxZZWFyKCl9dmFyIG9iMSxETz1uKCgpPT57WHQoKTtvYjE9eG99KTtmdW5jdGlvbiBCYyh0LGUsYSl7bGV0W3IsaV09WWUoYT8uaW4sdCxlKSxvPXZGZShyLGkpLHM9TWF0aC5hYnMoVzEocixpKSk7ci5zZXREYXRlKHIuZ2V0RGF0ZSgpLW8qcyk7bGV0IGw9Kyh2RmUocixpKT09PS1vKSxmPW8qKHMtbCk7cmV0dXJuIGY9PT0wPzA6Zn1mdW5jdGlvbiB2RmUodCxlKXtsZXQgYT10LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfHx0LmdldE1vbnRoKCktZS5nZXRNb250aCgpfHx0LmdldERhdGUoKS1lLmdldERhdGUoKXx8dC5nZXRIb3VycygpLWUuZ2V0SG91cnMoKXx8dC5nZXRNaW51dGVzKCktZS5nZXRNaW51dGVzKCl8fHQuZ2V0U2Vjb25kcygpLWUuZ2V0U2Vjb25kcygpfHx0LmdldE1pbGxpc2Vjb25kcygpLWUuZ2V0TWlsbGlzZWNvbmRzKCk7cmV0dXJuIGE8MD8tMTphPjA/MTphfXZhciBjYjEsRU89bigoKT0+e1h0KCk7bGkoKTtjYjE9QmN9KTtmdW5jdGlvbiB2Mih0KXtyZXR1cm4gZT0+e2xldCByPSh0P01hdGhbdF06TWF0aC50cnVuYykoZSk7cmV0dXJuIHI9PT0wPzA6cn19dmFyIGRpPW4oKCk9Pnt9KTtmdW5jdGlvbiBJcyh0LGUsYSl7bGV0W3IsaV09WWUoYT8uaW4sdCxlKSxvPSgrci0raSkvaWE7cmV0dXJuIHYyKGE/LnJvdW5kaW5nTWV0aG9kKShvKX12YXIgbWIxLE5PPW4oKCk9PntkaSgpO1h0KCk7Z3QoKTttYjE9SXN9KTtmdW5jdGlvbiBQTyh0LGUsYSl7cmV0dXJuIHlPKHQsLWUsYSl9dmFyIGJiMSxjWj1uKCgpPT57SlkoKTtiYjE9UE99KTtmdW5jdGlvbiB5RmUodCxlLGEpe2xldFtyLGldPVllKGE/LmluLHQsZSksbz1iMihyLGkpLHM9TWF0aC5hYnMoX08ocixpLGEpKSxsPVBPKHIsbypzLGEpLGY9KyhiMihsLGkpPT09LW8pLGM9byoocy1mKTtyZXR1cm4gYz09PTA/MDpjfXZhciBrYjEsd0ZlPW4oKCk9PntYdCgpO0VzKCk7c1ooKTtjWigpO2tiMT15RmV9KTtmdW5jdGlvbiBSYyh0LGUpe3JldHVybitlZSh0KS0rZWUoZSl9dmFyIExiMSxJTz1uKCgpPT57TWUoKTtMYjE9UmN9KTtmdW5jdGlvbiBGcyh0LGUsYSl7bGV0IHI9UmModCxlKS9nMjtyZXR1cm4gdjIoYT8ucm91bmRpbmdNZXRob2QpKHIpfXZhciBEYjEsRk89bigoKT0+e2RpKCk7Z3QoKTtJTygpO0RiMT1Gc30pO2Z1bmN0aW9uIEhjKHQsZSl7bGV0IGE9ZWUodCxlPy5pbik7cmV0dXJuIGEuc2V0SG91cnMoMjMsNTksNTksOTk5KSxhfXZhciBQYjEsT089bigoKT0+e01lKCk7UGIxPUhjfSk7ZnVuY3Rpb24gcWModCxlKXtsZXQgYT1lZSh0LGU/LmluKSxyPWEuZ2V0TW9udGgoKTtyZXR1cm4gYS5zZXRGdWxsWWVhcihhLmdldEZ1bGxZZWFyKCkscisxLDApLGEuc2V0SG91cnMoMjMsNTksNTksOTk5KSxhfXZhciBPYjEsQk89bigoKT0+e01lKCk7T2IxPXFjfSk7ZnVuY3Rpb24gUk8odCxlKXtsZXQgYT1lZSh0LGU/LmluKTtyZXR1cm4rSGMoYSxlKT09K3FjKGEsZSl9dmFyIFZiMSxkWj1uKCgpPT57T08oKTtCTygpO01lKCk7VmIxPVJPfSk7ZnVuY3Rpb24gYm8odCxlLGEpe2xldFtyLGksb109WWUoYT8uaW4sdCx0LGUpLHM9YjIoaSxvKSxsPU1hdGguYWJzKE5zKGksbykpO2lmKGw8MSlyZXR1cm4gMDtpLmdldE1vbnRoKCk9PT0xJiZpLmdldERhdGUoKT4yNyYmaS5zZXREYXRlKDMwKSxpLnNldE1vbnRoKGkuZ2V0TW9udGgoKS1zKmwpO2xldCBmPWIyKGksbyk9PT0tcztSTyhyKSYmbD09PTEmJmIyKHIsbyk9PT0xJiYoZj0hMSk7bGV0IGM9cyoobC0rZik7cmV0dXJuIGM9PT0wPzA6Y312YXIgWmIxLGw4PW4oKCk9PntYdCgpO0VzKCk7QU8oKTtkWigpO1piMT1ib30pO2Z1bmN0aW9uIE1GZSh0LGUsYSl7bGV0IHI9Ym8odCxlLGEpLzM7cmV0dXJuIHYyKGE/LnJvdW5kaW5nTWV0aG9kKShyKX12YXIgSmIxLHpGZT1uKCgpPT57ZGkoKTtsOCgpO0piMT1NRmV9KTtmdW5jdGlvbiBDcih0LGUsYSl7bGV0IHI9UmModCxlKS8xZTM7cmV0dXJuIHYyKGE/LnJvdW5kaW5nTWV0aG9kKShyKX12YXIgcnYxLGM4PW4oKCk9PntkaSgpO0lPKCk7cnYxPUNyfSk7ZnVuY3Rpb24ga0ZlKHQsZSxhKXtsZXQgcj1CYyh0LGUsYSkvNztyZXR1cm4gdjIoYT8ucm91bmRpbmdNZXRob2QpKHIpfXZhciBudjEsU0ZlPW4oKCk9PntkaSgpO0VPKCk7bnYxPWtGZX0pO2Z1bmN0aW9uIEhPKHQsZSxhKXtsZXRbcixpXT1ZZShhPy5pbix0LGUpLG89YjIocixpKSxzPU1hdGguYWJzKHhvKHIsaSkpO3Iuc2V0RnVsbFllYXIoMTU4NCksaS5zZXRGdWxsWWVhcigxNTg0KTtsZXQgbD1iMihyLGkpPT09LW8sZj1vKihzLStsKTtyZXR1cm4gZj09PTA/MDpmfXZhciB1djEsZlo9bigoKT0+e1h0KCk7RXMoKTtETygpO3V2MT1IT30pO2Z1bmN0aW9uIEcxKHQsZSl7bGV0W2Escl09WWUodCxlLnN0YXJ0LGUuZW5kKTtyZXR1cm57c3RhcnQ6YSxlbmQ6cn19dmFyIExyPW4oKCk9PntYdCgpfSk7ZnVuY3Rpb24gcU8odCxlKXtsZXR7c3RhcnQ6YSxlbmQ6cn09RzEoZT8uaW4sdCksaT0rYT4rcixvPWk/K2E6K3Iscz1pP3I6YTtzLnNldEhvdXJzKDAsMCwwLDApO2xldCBsPWU/LnN0ZXA/PzE7aWYoIWwpcmV0dXJuW107bDwwJiYobD0tbCxpPSFpKTtsZXQgZj1bXTtmb3IoOytzPD1vOylmLnB1c2god2UoYSxzKSkscy5zZXREYXRlKHMuZ2V0RGF0ZSgpK2wpLHMuc2V0SG91cnMoMCwwLDAsMCk7cmV0dXJuIGk/Zi5yZXZlcnNlKCk6Zn12YXIgYnYxLHVaPW4oKCk9PntMcigpO0tlKCk7YnYxPXFPfSk7ZnVuY3Rpb24gQ0ZlKHQsZSl7bGV0e3N0YXJ0OmEsZW5kOnJ9PUcxKGU/LmluLHQpLGk9K2E+K3Isbz1pPythOityLHM9aT9yOmE7cy5zZXRNaW51dGVzKDAsMCwwKTtsZXQgbD1lPy5zdGVwPz8xO2lmKCFsKXJldHVybltdO2w8MCYmKGw9LWwsaT0haSk7bGV0IGY9W107Zm9yKDsrczw9bzspZi5wdXNoKHdlKGEscykpLHMuc2V0SG91cnMocy5nZXRIb3VycygpK2wpO3JldHVybiBpP2YucmV2ZXJzZSgpOmZ9dmFyIE12MSxMRmU9bigoKT0+e0xyKCk7S2UoKTtNdjE9Q0ZlfSk7ZnVuY3Rpb24gVEZlKHQsZSl7bGV0e3N0YXJ0OmEsZW5kOnJ9PUcxKGU/LmluLHQpO2Euc2V0U2Vjb25kcygwLDApO2xldCBpPSthPityLG89aT8rYTorcixzPWk/cjphLGw9ZT8uc3RlcD8/MTtpZighbClyZXR1cm5bXTtsPDAmJihsPS1sLGk9IWkpO2xldCBmPVtdO2Zvcig7K3M8PW87KWYucHVzaCh3ZShhLHMpKSxzPVBjKHMsbCk7cmV0dXJuIGk/Zi5yZXZlcnNlKCk6Zn12YXIgTHYxLF9GZT1uKCgpPT57THIoKTt3TygpO0tlKCk7THYxPVRGZX0pO2Z1bmN0aW9uIEFGZSh0LGUpe2xldHtzdGFydDphLGVuZDpyfT1HMShlPy5pbix0KSxpPSthPityLG89aT8rYTorcixzPWk/cjphO3Muc2V0SG91cnMoMCwwLDAsMCkscy5zZXREYXRlKDEpO2xldCBsPWU/LnN0ZXA/PzE7aWYoIWwpcmV0dXJuW107bDwwJiYobD0tbCxpPSFpKTtsZXQgZj1bXTtmb3IoOytzPD1vOylmLnB1c2god2UoYSxzKSkscy5zZXRNb250aChzLmdldE1vbnRoKCkrbCk7cmV0dXJuIGk/Zi5yZXZlcnNlKCk6Zn12YXIgJHYxLCRGZT1uKCgpPT57THIoKTtLZSgpOyR2MT1BRmV9KTtmdW5jdGlvbiBUcih0LGUpe2xldCBhPWVlKHQsZT8uaW4pLHI9YS5nZXRNb250aCgpLGk9ci1yJTM7cmV0dXJuIGEuc2V0TW9udGgoaSwxKSxhLnNldEhvdXJzKDAsMCwwLDApLGF9dmFyIE52MSxWTz1uKCgpPT57TWUoKTtOdjE9VHJ9KTtmdW5jdGlvbiBERmUodCxlKXtsZXR7c3RhcnQ6YSxlbmQ6cn09RzEoZT8uaW4sdCksaT0rYT4rcixvPWk/K1RyKGEpOitUcihyKSxzPWk/VHIocik6VHIoYSksbD1lPy5zdGVwPz8xO2lmKCFsKXJldHVybltdO2w8MCYmKGw9LWwsaT0haSk7bGV0IGY9W107Zm9yKDsrczw9bzspZi5wdXNoKHdlKGEscykpLHM9SWMocyxsKTtyZXR1cm4gaT9mLnJldmVyc2UoKTpmfXZhciBSdjEsRUZlPW4oKCk9PntMcigpO01PKCk7S2UoKTtWTygpO1J2MT1ERmV9KTtmdW5jdGlvbiBORmUodCxlKXtsZXR7c3RhcnQ6YSxlbmQ6cn09RzEoZT8uaW4sdCksaT0rYT4rcixvPWk/YTEocixlKTphMShhLGUpLHM9aT9hMShhLGUpOmExKHIsZSk7by5zZXRIb3VycygxNSkscy5zZXRIb3VycygxNSk7bGV0IGw9K3MuZ2V0VGltZSgpLGY9byxjPWU/LnN0ZXA/PzE7aWYoIWMpcmV0dXJuW107YzwwJiYoYz0tYyxpPSFpKTtsZXQgdT1bXTtmb3IoOytmPD1sOylmLnNldEhvdXJzKDApLHUucHVzaCh3ZShhLGYpKSxmPWdvKGYsYyksZi5zZXRIb3VycygxNSk7cmV0dXJuIGk/dS5yZXZlcnNlKCk6dX12YXIgV3YxLFBGZT1uKCgpPT57THIoKTtzOCgpO0tlKCk7VWEoKTtXdjE9TkZlfSk7ZnVuY3Rpb24gVmModCxlKXtsZXR7c3RhcnQ6YSxlbmQ6cn09RzEoZT8uaW4sdCksaT1xTyh7c3RhcnQ6YSxlbmQ6cn0sZSksbz1bXSxzPTA7Zm9yKDtzPGkubGVuZ3RoOyl7bGV0IGw9aVtzKytdO01yKGwpJiZvLnB1c2god2UoYSxsKSl9cmV0dXJuIG99dmFyIEt2MSxVTz1uKCgpPT57THIoKTtLZSgpO3VaKCk7cjgoKTtLdjE9VmN9KTtmdW5jdGlvbiB2byh0LGUpe2xldCBhPWVlKHQsZT8uaW4pO3JldHVybiBhLnNldERhdGUoMSksYS5zZXRIb3VycygwLDAsMCwwKSxhfXZhciB0eTEsZDg9bigoKT0+e01lKCk7dHkxPXZvfSk7ZnVuY3Rpb24gSUZlKHQsZSl7bGV0IGE9dm8odCxlKSxyPXFjKHQsZSk7cmV0dXJuIFZjKHtzdGFydDphLGVuZDpyfSxlKX12YXIgc3kxLEZGZT1uKCgpPT57VU8oKTtCTygpO2Q4KCk7c3kxPUlGZX0pO2Z1bmN0aW9uIGpPKHQsZSl7bGV0IGE9ZWUodCxlPy5pbikscj1hLmdldEZ1bGxZZWFyKCk7cmV0dXJuIGEuc2V0RnVsbFllYXIocisxLDAsMCksYS5zZXRIb3VycygyMyw1OSw1OSw5OTkpLGF9dmFyIGN5MSxwWj1uKCgpPT57TWUoKTtjeTE9ak99KTtmdW5jdGlvbiBVYyh0LGUpe2xldCBhPWVlKHQsZT8uaW4pO3JldHVybiBhLnNldEZ1bGxZZWFyKGEuZ2V0RnVsbFllYXIoKSwwLDEpLGEuc2V0SG91cnMoMCwwLDAsMCksYX12YXIgdXkxLFdPPW4oKCk9PntNZSgpO3V5MT1VY30pO2Z1bmN0aW9uIE9GZSh0LGUpe2xldCBhPVVjKHQsZSkscj1qTyh0LGUpO3JldHVybiBWYyh7c3RhcnQ6YSxlbmQ6cn0sZSl9dmFyIHh5MSxCRmU9bigoKT0+e1VPKCk7cFooKTtXTygpO3h5MT1PRmV9KTtmdW5jdGlvbiBSRmUodCxlKXtsZXR7c3RhcnQ6YSxlbmQ6cn09RzEoZT8uaW4sdCksaT0rYT4rcixvPWk/K2E6K3Iscz1pP3I6YTtzLnNldEhvdXJzKDAsMCwwLDApLHMuc2V0TW9udGgoMCwxKTtsZXQgbD1lPy5zdGVwPz8xO2lmKCFsKXJldHVybltdO2w8MCYmKGw9LWwsaT0haSk7bGV0IGY9W107Zm9yKDsrczw9bzspZi5wdXNoKHdlKGEscykpLHMuc2V0RnVsbFllYXIocy5nZXRGdWxsWWVhcigpK2wpO3JldHVybiBpP2YucmV2ZXJzZSgpOmZ9dmFyIHd5MSxIRmU9bigoKT0+e0xyKCk7S2UoKTt3eTE9UkZlfSk7ZnVuY3Rpb24gcUZlKHQsZSl7bGV0IGE9ZWUodCxlPy5pbikscj1hLmdldEZ1bGxZZWFyKCksaT05K01hdGguZmxvb3Ioci8xMCkqMTA7cmV0dXJuIGEuc2V0RnVsbFllYXIoaSwxMSwzMSksYS5zZXRIb3VycygyMyw1OSw1OSw5OTkpLGF9dmFyIGt5MSxWRmU9bigoKT0+e01lKCk7a3kxPXFGZX0pO2Z1bmN0aW9uIFVGZSh0LGUpe2xldCBhPWVlKHQsZT8uaW4pO3JldHVybiBhLnNldE1pbnV0ZXMoNTksNTksOTk5KSxhfXZhciBMeTEsakZlPW4oKCk9PntNZSgpO0x5MT1VRmV9KTtmdW5jdGlvbiBHTyh0LGUpe2xldCBhPVV0KCkscj1lPy53ZWVrU3RhcnRzT24/P2U/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz9hLndlZWtTdGFydHNPbj8/YS5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/MCxpPWVlKHQsZT8uaW4pLG89aS5nZXREYXkoKSxzPShvPHI/LTc6MCkrNi0oby1yKTtyZXR1cm4gaS5zZXREYXRlKGkuZ2V0RGF0ZSgpK3MpLGkuc2V0SG91cnMoMjMsNTksNTksOTk5KSxpfXZhciAkeTEsaFo9bigoKT0+e3gyKCk7TWUoKTskeTE9R099KTtmdW5jdGlvbiBXRmUodCxlKXtyZXR1cm4gR08odCx7Li4uZSx3ZWVrU3RhcnRzT246MX0pfXZhciBOeTEsR0ZlPW4oKCk9PntoWigpO055MT1XRmV9KTtmdW5jdGlvbiBZRmUodCxlKXtsZXQgYT1JMih0LGUpLHI9d2UoZT8uaW58fHQsMCk7ci5zZXRGdWxsWWVhcihhKzEsMCw0KSxyLnNldEhvdXJzKDAsMCwwLDApO2xldCBpPUExKHIsZSk7cmV0dXJuIGkuc2V0TWlsbGlzZWNvbmRzKGkuZ2V0TWlsbGlzZWNvbmRzKCktMSksaX12YXIgQnkxLFpGZT1uKCgpPT57S2UoKTttbygpO3pyKCk7QnkxPVlGZX0pO2Z1bmN0aW9uIFhGZSh0LGUpe2xldCBhPWVlKHQsZT8uaW4pO3JldHVybiBhLnNldFNlY29uZHMoNTksOTk5KSxhfXZhciBxeTEsUUZlPW4oKCk9PntNZSgpO3F5MT1YRmV9KTtmdW5jdGlvbiBLRmUodCxlKXtsZXQgYT1lZSh0LGU/LmluKSxyPWEuZ2V0TW9udGgoKSxpPXItciUzKzM7cmV0dXJuIGEuc2V0TW9udGgoaSwwKSxhLnNldEhvdXJzKDIzLDU5LDU5LDk5OSksYX12YXIgankxLEpGZT1uKCgpPT57TWUoKTtqeTE9S0ZlfSk7ZnVuY3Rpb24gZU9lKHQsZSl7bGV0IGE9ZWUodCxlPy5pbik7cmV0dXJuIGEuc2V0TWlsbGlzZWNvbmRzKDk5OSksYX12YXIgWXkxLHRPZT1uKCgpPT57TWUoKTtZeTE9ZU9lfSk7ZnVuY3Rpb24gYU9lKHQpe3JldHVybiBIYyhEYXRlLm5vdygpLHQpfXZhciBReTEsck9lPW4oKCk9PntPTygpO1F5MT1hT2V9KTtmdW5jdGlvbiBpT2UodCl7bGV0IGU9eXQodD8uaW4pLGE9ZS5nZXRGdWxsWWVhcigpLHI9ZS5nZXRNb250aCgpLGk9ZS5nZXREYXRlKCksbz15dCh0Py5pbik7cmV0dXJuIG8uc2V0RnVsbFllYXIoYSxyLGkrMSksby5zZXRIb3VycygyMyw1OSw1OSw5OTkpLHQ/LmluP3QuaW4obyk6b312YXIgZXcxLG9PZT1uKCgpPT57TzEoKTtldzE9aU9lfSk7ZnVuY3Rpb24gc09lKHQpe2xldCBlPXl0KHQ/LmluKSxhPXdlKHQ/LmluLDApO3JldHVybiBhLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCktMSksYS5zZXRIb3VycygyMyw1OSw1OSw5OTkpLGF9dmFyIGl3MSxuT2U9bigoKT0+e0tlKCk7TzEoKTtpdzE9c09lfSk7dmFyIGlWdCxsT2UsY09lPW4oKCk9PntpVnQ9e2xlc3NUaGFuWFNlY29uZHM6e29uZToibGVzcyB0aGFuIGEgc2Vjb25kIixvdGhlcjoibGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzIn0seFNlY29uZHM6e29uZToiMSBzZWNvbmQiLG90aGVyOiJ7e2NvdW50fX0gc2Vjb25kcyJ9LGhhbGZBTWludXRlOiJoYWxmIGEgbWludXRlIixsZXNzVGhhblhNaW51dGVzOntvbmU6Imxlc3MgdGhhbiBhIG1pbnV0ZSIsb3RoZXI6Imxlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlcyJ9LHhNaW51dGVzOntvbmU6IjEgbWludXRlIixvdGhlcjoie3tjb3VudH19IG1pbnV0ZXMifSxhYm91dFhIb3Vyczp7b25lOiJhYm91dCAxIGhvdXIiLG90aGVyOiJhYm91dCB7e2NvdW50fX0gaG91cnMifSx4SG91cnM6e29uZToiMSBob3VyIixvdGhlcjoie3tjb3VudH19IGhvdXJzIn0seERheXM6e29uZToiMSBkYXkiLG90aGVyOiJ7e2NvdW50fX0gZGF5cyJ9LGFib3V0WFdlZWtzOntvbmU6ImFib3V0IDEgd2VlayIsb3RoZXI6ImFib3V0IHt7Y291bnR9fSB3ZWVrcyJ9LHhXZWVrczp7b25lOiIxIHdlZWsiLG90aGVyOiJ7e2NvdW50fX0gd2Vla3MifSxhYm91dFhNb250aHM6e29uZToiYWJvdXQgMSBtb250aCIsb3RoZXI6ImFib3V0IHt7Y291bnR9fSBtb250aHMifSx4TW9udGhzOntvbmU6IjEgbW9udGgiLG90aGVyOiJ7e2NvdW50fX0gbW9udGhzIn0sYWJvdXRYWWVhcnM6e29uZToiYWJvdXQgMSB5ZWFyIixvdGhlcjoiYWJvdXQge3tjb3VudH19IHllYXJzIn0seFllYXJzOntvbmU6IjEgeWVhciIsb3RoZXI6Int7Y291bnR9fSB5ZWFycyJ9LG92ZXJYWWVhcnM6e29uZToib3ZlciAxIHllYXIiLG90aGVyOiJvdmVyIHt7Y291bnR9fSB5ZWFycyJ9LGFsbW9zdFhZZWFyczp7b25lOiJhbG1vc3QgMSB5ZWFyIixvdGhlcjoiYWxtb3N0IHt7Y291bnR9fSB5ZWFycyJ9fSxsT2U9KHQsZSxhKT0+e2xldCByLGk9aVZ0W3RdO3JldHVybiB0eXBlb2YgaT09InN0cmluZyI/cj1pOmU9PT0xP3I9aS5vbmU6cj1pLm90aGVyLnJlcGxhY2UoInt7Y291bnR9fSIsZS50b1N0cmluZygpKSxhPy5hZGRTdWZmaXg/YS5jb21wYXJpc29uJiZhLmNvbXBhcmlzb24+MD8iaW4gIityOnIrIiBhZ28iOnJ9fSk7ZnVuY3Rpb24gWU8odCl7cmV0dXJuKGU9e30pPT57bGV0IGE9ZS53aWR0aD9TdHJpbmcoZS53aWR0aCk6dC5kZWZhdWx0V2lkdGg7cmV0dXJuIHQuZm9ybWF0c1thXXx8dC5mb3JtYXRzW3QuZGVmYXVsdFdpZHRoXX19dmFyIGRPZT1uKCgpPT57fSk7dmFyIG9WdCxzVnQsblZ0LGZPZSx1T2U9bigoKT0+e2RPZSgpO29WdD17ZnVsbDoiRUVFRSwgTU1NTSBkbywgeSIsbG9uZzoiTU1NTSBkbywgeSIsbWVkaXVtOiJNTU0gZCwgeSIsc2hvcnQ6Ik1NL2RkL3l5eXkifSxzVnQ9e2Z1bGw6Img6bW06c3MgYSB6enp6Iixsb25nOiJoOm1tOnNzIGEgeiIsbWVkaXVtOiJoOm1tOnNzIGEiLHNob3J0OiJoOm1tIGEifSxuVnQ9e2Z1bGw6Int7ZGF0ZX19ICdhdCcge3t0aW1lfX0iLGxvbmc6Int7ZGF0ZX19ICdhdCcge3t0aW1lfX0iLG1lZGl1bToie3tkYXRlfX0sIHt7dGltZX19IixzaG9ydDoie3tkYXRlfX0sIHt7dGltZX19In0sZk9lPXtkYXRlOllPKHtmb3JtYXRzOm9WdCxkZWZhdWx0V2lkdGg6ImZ1bGwifSksdGltZTpZTyh7Zm9ybWF0czpzVnQsZGVmYXVsdFdpZHRoOiJmdWxsIn0pLGRhdGVUaW1lOllPKHtmb3JtYXRzOm5WdCxkZWZhdWx0V2lkdGg6ImZ1bGwifSl9fSk7dmFyIGxWdCxwT2UsaE9lPW4oKCk9PntsVnQ9e2xhc3RXZWVrOiInbGFzdCcgZWVlZSAnYXQnIHAiLHllc3RlcmRheToiJ3llc3RlcmRheSBhdCcgcCIsdG9kYXk6Iid0b2RheSBhdCcgcCIsdG9tb3Jyb3c6Iid0b21vcnJvdyBhdCcgcCIsbmV4dFdlZWs6ImVlZWUgJ2F0JyBwIixvdGhlcjoiUCJ9LHBPZT0odCxlLGEscik9PmxWdFt0XX0pO2Z1bmN0aW9uIGpjKHQpe3JldHVybihlLGEpPT57bGV0IHI9YT8uY29udGV4dD9TdHJpbmcoYS5jb250ZXh0KToic3RhbmRhbG9uZSIsaTtpZihyPT09ImZvcm1hdHRpbmciJiZ0LmZvcm1hdHRpbmdWYWx1ZXMpe2xldCBzPXQuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aHx8dC5kZWZhdWx0V2lkdGgsbD1hPy53aWR0aD9TdHJpbmcoYS53aWR0aCk6cztpPXQuZm9ybWF0dGluZ1ZhbHVlc1tsXXx8dC5mb3JtYXR0aW5nVmFsdWVzW3NdfWVsc2V7bGV0IHM9dC5kZWZhdWx0V2lkdGgsbD1hPy53aWR0aD9TdHJpbmcoYS53aWR0aCk6dC5kZWZhdWx0V2lkdGg7aT10LnZhbHVlc1tsXXx8dC52YWx1ZXNbc119bGV0IG89dC5hcmd1bWVudENhbGxiYWNrP3QuYXJndW1lbnRDYWxsYmFjayhlKTplO3JldHVybiBpW29dfX12YXIgbU9lPW4oKCk9Pnt9KTt2YXIgY1Z0LGRWdCxmVnQsdVZ0LHBWdCxoVnQsbVZ0LGdPZSx4T2U9bigoKT0+e21PZSgpO2NWdD17bmFycm93OlsiQiIsIkEiXSxhYmJyZXZpYXRlZDpbIkJDIiwiQUQiXSx3aWRlOlsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl19LGRWdD17bmFycm93OlsiMSIsIjIiLCIzIiwiNCJdLGFiYnJldmlhdGVkOlsiUTEiLCJRMiIsIlEzIiwiUTQiXSx3aWRlOlsiMXN0IHF1YXJ0ZXIiLCIybmQgcXVhcnRlciIsIjNyZCBxdWFydGVyIiwiNHRoIHF1YXJ0ZXIiXX0sZlZ0PXtuYXJyb3c6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxhYmJyZXZpYXRlZDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLHdpZGU6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSx1VnQ9e25hcnJvdzpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxzaG9ydDpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sYWJicmV2aWF0ZWQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSx3aWRlOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0scFZ0PXtuYXJyb3c6e2FtOiJhIixwbToicCIsbWlkbmlnaHQ6Im1pIixub29uOiJuIixtb3JuaW5nOiJtb3JuaW5nIixhZnRlcm5vb246ImFmdGVybm9vbiIsZXZlbmluZzoiZXZlbmluZyIsbmlnaHQ6Im5pZ2h0In0sYWJicmV2aWF0ZWQ6e2FtOiJBTSIscG06IlBNIixtaWRuaWdodDoibWlkbmlnaHQiLG5vb246Im5vb24iLG1vcm5pbmc6Im1vcm5pbmciLGFmdGVybm9vbjoiYWZ0ZXJub29uIixldmVuaW5nOiJldmVuaW5nIixuaWdodDoibmlnaHQifSx3aWRlOnthbToiYS5tLiIscG06InAubS4iLG1pZG5pZ2h0OiJtaWRuaWdodCIsbm9vbjoibm9vbiIsbW9ybmluZzoibW9ybmluZyIsYWZ0ZXJub29uOiJhZnRlcm5vb24iLGV2ZW5pbmc6ImV2ZW5pbmciLG5pZ2h0OiJuaWdodCJ9fSxoVnQ9e25hcnJvdzp7YW06ImEiLHBtOiJwIixtaWRuaWdodDoibWkiLG5vb246Im4iLG1vcm5pbmc6ImluIHRoZSBtb3JuaW5nIixhZnRlcm5vb246ImluIHRoZSBhZnRlcm5vb24iLGV2ZW5pbmc6ImluIHRoZSBldmVuaW5nIixuaWdodDoiYXQgbmlnaHQifSxhYmJyZXZpYXRlZDp7YW06IkFNIixwbToiUE0iLG1pZG5pZ2h0OiJtaWRuaWdodCIsbm9vbjoibm9vbiIsbW9ybmluZzoiaW4gdGhlIG1vcm5pbmciLGFmdGVybm9vbjoiaW4gdGhlIGFmdGVybm9vbiIsZXZlbmluZzoiaW4gdGhlIGV2ZW5pbmciLG5pZ2h0OiJhdCBuaWdodCJ9LHdpZGU6e2FtOiJhLm0uIixwbToicC5tLiIsbWlkbmlnaHQ6Im1pZG5pZ2h0Iixub29uOiJub29uIixtb3JuaW5nOiJpbiB0aGUgbW9ybmluZyIsYWZ0ZXJub29uOiJpbiB0aGUgYWZ0ZXJub29uIixldmVuaW5nOiJpbiB0aGUgZXZlbmluZyIsbmlnaHQ6ImF0IG5pZ2h0In19LG1WdD0odCxlKT0+e2xldCBhPU51bWJlcih0KSxyPWElMTAwO2lmKHI+MjB8fHI8MTApc3dpdGNoKHIlMTApe2Nhc2UgMTpyZXR1cm4gYSsic3QiO2Nhc2UgMjpyZXR1cm4gYSsibmQiO2Nhc2UgMzpyZXR1cm4gYSsicmQifXJldHVybiBhKyJ0aCJ9LGdPZT17b3JkaW5hbE51bWJlcjptVnQsZXJhOmpjKHt2YWx1ZXM6Y1Z0LGRlZmF1bHRXaWR0aDoid2lkZSJ9KSxxdWFydGVyOmpjKHt2YWx1ZXM6ZFZ0LGRlZmF1bHRXaWR0aDoid2lkZSIsYXJndW1lbnRDYWxsYmFjazp0PT50LTF9KSxtb250aDpqYyh7dmFsdWVzOmZWdCxkZWZhdWx0V2lkdGg6IndpZGUifSksZGF5OmpjKHt2YWx1ZXM6dVZ0LGRlZmF1bHRXaWR0aDoid2lkZSJ9KSxkYXlQZXJpb2Q6amMoe3ZhbHVlczpwVnQsZGVmYXVsdFdpZHRoOiJ3aWRlIixmb3JtYXR0aW5nVmFsdWVzOmhWdCxkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiJ3aWRlIn0pfX0pO2Z1bmN0aW9uIFdjKHQpe3JldHVybihlLGE9e30pPT57bGV0IHI9YS53aWR0aCxpPXImJnQubWF0Y2hQYXR0ZXJuc1tyXXx8dC5tYXRjaFBhdHRlcm5zW3QuZGVmYXVsdE1hdGNoV2lkdGhdLG89ZS5tYXRjaChpKTtpZighbylyZXR1cm4gbnVsbDtsZXQgcz1vWzBdLGw9ciYmdC5wYXJzZVBhdHRlcm5zW3JdfHx0LnBhcnNlUGF0dGVybnNbdC5kZWZhdWx0UGFyc2VXaWR0aF0sZj1BcnJheS5pc0FycmF5KGwpP3hWdChsLGQ9PmQudGVzdChzKSk6Z1Z0KGwsZD0+ZC50ZXN0KHMpKSxjO2M9dC52YWx1ZUNhbGxiYWNrP3QudmFsdWVDYWxsYmFjayhmKTpmLGM9YS52YWx1ZUNhbGxiYWNrP2EudmFsdWVDYWxsYmFjayhjKTpjO2xldCB1PWUuc2xpY2Uocy5sZW5ndGgpO3JldHVybnt2YWx1ZTpjLHJlc3Q6dX19fWZ1bmN0aW9uIGdWdCh0LGUpe2ZvcihsZXQgYSBpbiB0KWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGEpJiZlKHRbYV0pKXJldHVybiBhfWZ1bmN0aW9uIHhWdCh0LGUpe2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKWlmKGUodFthXSkpcmV0dXJuIGF9dmFyIGJPZT1uKCgpPT57fSk7ZnVuY3Rpb24gdk9lKHQpe3JldHVybihlLGE9e30pPT57bGV0IHI9ZS5tYXRjaCh0Lm1hdGNoUGF0dGVybik7aWYoIXIpcmV0dXJuIG51bGw7bGV0IGk9clswXSxvPWUubWF0Y2godC5wYXJzZVBhdHRlcm4pO2lmKCFvKXJldHVybiBudWxsO2xldCBzPXQudmFsdWVDYWxsYmFjaz90LnZhbHVlQ2FsbGJhY2sob1swXSk6b1swXTtzPWEudmFsdWVDYWxsYmFjaz9hLnZhbHVlQ2FsbGJhY2socyk6cztsZXQgbD1lLnNsaWNlKGkubGVuZ3RoKTtyZXR1cm57dmFsdWU6cyxyZXN0Omx9fX12YXIgeU9lPW4oKCk9Pnt9KTt2YXIgYlZ0LHZWdCx5VnQsd1Z0LE1WdCx6VnQsa1Z0LFNWdCxDVnQsTFZ0LFRWdCxfVnQsd09lLE1PZT1uKCgpPT57Yk9lKCk7eU9lKCk7YlZ0PS9eKFxkKykodGh8c3R8bmR8cmQpPy9pLHZWdD0vXGQrL2kseVZ0PXtuYXJyb3c6L14oYnxhKS9pLGFiYnJldmlhdGVkOi9eKGJcLj9ccz9jXC4/fGJcLj9ccz9jXC4/XHM/ZVwuP3xhXC4/XHM/ZFwuP3xjXC4/XHM/ZVwuPykvaSx3aWRlOi9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaX0sd1Z0PXthbnk6Wy9eYi9pLC9eKGF8YykvaV19LE1WdD17bmFycm93Oi9eWzEyMzRdL2ksYWJicmV2aWF0ZWQ6L15xWzEyMzRdL2ksd2lkZTovXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaX0selZ0PXthbnk6Wy8xL2ksLzIvaSwvMy9pLC80L2ldfSxrVnQ9e25hcnJvdzovXltqZm1hc29uZF0vaSxhYmJyZXZpYXRlZDovXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSx3aWRlOi9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2l9LFNWdD17bmFycm93OlsvXmovaSwvXmYvaSwvXm0vaSwvXmEvaSwvXm0vaSwvXmovaSwvXmovaSwvXmEvaSwvXnMvaSwvXm8vaSwvXm4vaSwvXmQvaV0sYW55OlsvXmphL2ksL15mL2ksL15tYXIvaSwvXmFwL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hdS9pLC9ecy9pLC9eby9pLC9ebi9pLC9eZC9pXX0sQ1Z0PXtuYXJyb3c6L15bc210d2ZdL2ksc2hvcnQ6L14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksYWJicmV2aWF0ZWQ6L14oc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0KS9pLHdpZGU6L14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2l9LExWdD17bmFycm93OlsvXnMvaSwvXm0vaSwvXnQvaSwvXncvaSwvXnQvaSwvXmYvaSwvXnMvaV0sYW55OlsvXnN1L2ksL15tL2ksL150dS9pLC9edy9pLC9edGgvaSwvXmYvaSwvXnNhL2ldfSxUVnQ9e25hcnJvdzovXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksYW55Oi9eKFthcF1cLj9ccz9tXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pfSxfVnQ9e2FueTp7YW06L15hL2kscG06L15wL2ksbWlkbmlnaHQ6L15taS9pLG5vb246L15uby9pLG1vcm5pbmc6L21vcm5pbmcvaSxhZnRlcm5vb246L2FmdGVybm9vbi9pLGV2ZW5pbmc6L2V2ZW5pbmcvaSxuaWdodDovbmlnaHQvaX19LHdPZT17b3JkaW5hbE51bWJlcjp2T2Uoe21hdGNoUGF0dGVybjpiVnQscGFyc2VQYXR0ZXJuOnZWdCx2YWx1ZUNhbGxiYWNrOnQ9PnBhcnNlSW50KHQsMTApfSksZXJhOldjKHttYXRjaFBhdHRlcm5zOnlWdCxkZWZhdWx0TWF0Y2hXaWR0aDoid2lkZSIscGFyc2VQYXR0ZXJuczp3VnQsZGVmYXVsdFBhcnNlV2lkdGg6ImFueSJ9KSxxdWFydGVyOldjKHttYXRjaFBhdHRlcm5zOk1WdCxkZWZhdWx0TWF0Y2hXaWR0aDoid2lkZSIscGFyc2VQYXR0ZXJuczp6VnQsZGVmYXVsdFBhcnNlV2lkdGg6ImFueSIsdmFsdWVDYWxsYmFjazp0PT50KzF9KSxtb250aDpXYyh7bWF0Y2hQYXR0ZXJuczprVnQsZGVmYXVsdE1hdGNoV2lkdGg6IndpZGUiLHBhcnNlUGF0dGVybnM6U1Z0LGRlZmF1bHRQYXJzZVdpZHRoOiJhbnkifSksZGF5OldjKHttYXRjaFBhdHRlcm5zOkNWdCxkZWZhdWx0TWF0Y2hXaWR0aDoid2lkZSIscGFyc2VQYXR0ZXJuczpMVnQsZGVmYXVsdFBhcnNlV2lkdGg6ImFueSJ9KSxkYXlQZXJpb2Q6V2Moe21hdGNoUGF0dGVybnM6VFZ0LGRlZmF1bHRNYXRjaFdpZHRoOiJhbnkiLHBhcnNlUGF0dGVybnM6X1Z0LGRlZmF1bHRQYXJzZVdpZHRoOiJhbnkifSl9fSk7dmFyIEsyLGt3MSx6T2U9bigoKT0+e2NPZSgpO3VPZSgpO2hPZSgpO3hPZSgpO01PZSgpO0syPXtjb2RlOiJlbi1VUyIsZm9ybWF0RGlzdGFuY2U6bE9lLGZvcm1hdExvbmc6Zk9lLGZvcm1hdFJlbGF0aXZlOnBPZSxsb2NhbGl6ZTpnT2UsbWF0Y2g6d09lLG9wdGlvbnM6e3dlZWtTdGFydHNPbjowLGZpcnN0V2Vla0NvbnRhaW5zRGF0ZToxfX0sa3cxPUsyfSk7dmFyIE9zPW4oKCk9Pnt6T2UoKX0pO2Z1bmN0aW9uIFpPKHQsZSl7bGV0IGE9ZWUodCxlPy5pbik7cmV0dXJuIFcxKGEsVWMoYSkpKzF9dmFyICR3MSxtWj1uKCgpPT57bGkoKTtXTygpO01lKCk7JHcxPVpPfSk7ZnVuY3Rpb24gR2ModCxlKXtsZXQgYT1lZSh0LGU/LmluKSxyPStBMShhKS0rb2EoYSk7cmV0dXJuIE1hdGgucm91bmQoci92cikrMX12YXIgRncxLFhPPW4oKCk9PntndCgpO3pyKCk7TmMoKTtNZSgpO0Z3MT1HY30pO2Z1bmN0aW9uIHlvKHQsZSl7bGV0IGE9ZWUodCxlPy5pbikscj1hLmdldEZ1bGxZZWFyKCksaT1VdCgpLG89ZT8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9lPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/aS5maXJzdFdlZWtDb250YWluc0RhdGU/P2kubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGU/PzEscz13ZShlPy5pbnx8dCwwKTtzLnNldEZ1bGxZZWFyKHIrMSwwLG8pLHMuc2V0SG91cnMoMCwwLDAsMCk7bGV0IGw9YTEocyxlKSxmPXdlKGU/LmlufHx0LDApO2Yuc2V0RnVsbFllYXIociwwLG8pLGYuc2V0SG91cnMoMCwwLDAsMCk7bGV0IGM9YTEoZixlKTtyZXR1cm4rYT49K2w/cisxOithPj0rYz9yOnItMX12YXIgVncxLGY4PW4oKCk9Pnt4MigpO0tlKCk7VWEoKTtNZSgpO1Z3MT15b30pO2Z1bmN0aW9uIEJzKHQsZSl7bGV0IGE9VXQoKSxyPWU/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/ZT8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGU/P2EuZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9hLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz8xLGk9eW8odCxlKSxvPXdlKGU/LmlufHx0LDApO3JldHVybiBvLnNldEZ1bGxZZWFyKGksMCxyKSxvLnNldEhvdXJzKDAsMCwwLDApLGExKG8sZSl9dmFyIFp3MSxRTz1uKCgpPT57eDIoKTtLZSgpO2Y4KCk7VWEoKTtadzE9QnN9KTtmdW5jdGlvbiBZYyh0LGUpe2xldCBhPWVlKHQsZT8uaW4pLHI9K2ExKGEsZSktK0JzKGEsZSk7cmV0dXJuIE1hdGgucm91bmQoci92cikrMX12YXIgdE0xLEtPPW4oKCk9PntndCgpO1VhKCk7UU8oKTtNZSgpO3RNMT1ZY30pO2Z1bmN0aW9uIFVlKHQsZSl7bGV0IGE9dDwwPyItIjoiIixyPU1hdGguYWJzKHQpLnRvU3RyaW5nKCkucGFkU3RhcnQoZSwiMCIpO3JldHVybiBhK3J9dmFyIFJzPW4oKCk9Pnt9KTt2YXIgc2EsZ1o9bigoKT0+e1JzKCk7c2E9e3kodCxlKXtsZXQgYT10LmdldEZ1bGxZZWFyKCkscj1hPjA/YToxLWE7cmV0dXJuIFVlKGU9PT0ieXkiP3IlMTAwOnIsZS5sZW5ndGgpfSxNKHQsZSl7bGV0IGE9dC5nZXRNb250aCgpO3JldHVybiBlPT09Ik0iP1N0cmluZyhhKzEpOlVlKGErMSwyKX0sZCh0LGUpe3JldHVybiBVZSh0LmdldERhdGUoKSxlLmxlbmd0aCl9LGEodCxlKXtsZXQgYT10LmdldEhvdXJzKCkvMTI+PTE/InBtIjoiYW0iO3N3aXRjaChlKXtjYXNlImEiOmNhc2UiYWEiOnJldHVybiBhLnRvVXBwZXJDYXNlKCk7Y2FzZSJhYWEiOnJldHVybiBhO2Nhc2UiYWFhYWEiOnJldHVybiBhWzBdO2RlZmF1bHQ6cmV0dXJuIGE9PT0iYW0iPyJhLm0uIjoicC5tLiJ9fSxoKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSUxMnx8MTIsZS5sZW5ndGgpfSxIKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSxlLmxlbmd0aCl9LG0odCxlKXtyZXR1cm4gVWUodC5nZXRNaW51dGVzKCksZS5sZW5ndGgpfSxzKHQsZSl7cmV0dXJuIFVlKHQuZ2V0U2Vjb25kcygpLGUubGVuZ3RoKX0sUyh0LGUpe2xldCBhPWUubGVuZ3RoLHI9dC5nZXRNaWxsaXNlY29uZHMoKSxpPU1hdGgudHJ1bmMocipNYXRoLnBvdygxMCxhLTMpKTtyZXR1cm4gVWUoaSxlLmxlbmd0aCl9fX0pO2Z1bmN0aW9uIGtPZSh0LGU9IiIpe2xldCBhPXQ+MD8iLSI6IisiLHI9TWF0aC5hYnModCksaT1NYXRoLnRydW5jKHIvNjApLG89ciU2MDtyZXR1cm4gbz09PTA/YStTdHJpbmcoaSk6YStTdHJpbmcoaSkrZStVZShvLDIpfWZ1bmN0aW9uIFNPZSh0LGUpe3JldHVybiB0JTYwPT09MD8odD4wPyItIjoiKyIpK1VlKE1hdGguYWJzKHQpLzYwLDIpOkhzKHQsZSl9ZnVuY3Rpb24gSHModCxlPSIiKXtsZXQgYT10PjA/Ii0iOiIrIixyPU1hdGguYWJzKHQpLGk9VWUoTWF0aC50cnVuYyhyLzYwKSwyKSxvPVVlKHIlNjAsMik7cmV0dXJuIGEraStlK299dmFyIFpjLHU4LENPZT1uKCgpPT57bVooKTtYTygpO21vKCk7S08oKTtmOCgpO1JzKCk7Z1ooKTtaYz17YW06ImFtIixwbToicG0iLG1pZG5pZ2h0OiJtaWRuaWdodCIsbm9vbjoibm9vbiIsbW9ybmluZzoibW9ybmluZyIsYWZ0ZXJub29uOiJhZnRlcm5vb24iLGV2ZW5pbmc6ImV2ZW5pbmciLG5pZ2h0OiJuaWdodCJ9LHU4PXtHOmZ1bmN0aW9uKHQsZSxhKXtsZXQgcj10LmdldEZ1bGxZZWFyKCk+MD8xOjA7c3dpdGNoKGUpe2Nhc2UiRyI6Y2FzZSJHRyI6Y2FzZSJHR0ciOnJldHVybiBhLmVyYShyLHt3aWR0aDoiYWJicmV2aWF0ZWQifSk7Y2FzZSJHR0dHRyI6cmV0dXJuIGEuZXJhKHIse3dpZHRoOiJuYXJyb3cifSk7ZGVmYXVsdDpyZXR1cm4gYS5lcmEocix7d2lkdGg6IndpZGUifSl9fSx5OmZ1bmN0aW9uKHQsZSxhKXtpZihlPT09InlvIil7bGV0IHI9dC5nZXRGdWxsWWVhcigpLGk9cj4wP3I6MS1yO3JldHVybiBhLm9yZGluYWxOdW1iZXIoaSx7dW5pdDoieWVhciJ9KX1yZXR1cm4gc2EueSh0LGUpfSxZOmZ1bmN0aW9uKHQsZSxhLHIpe2xldCBpPXlvKHQsciksbz1pPjA/aToxLWk7aWYoZT09PSJZWSIpe2xldCBzPW8lMTAwO3JldHVybiBVZShzLDIpfXJldHVybiBlPT09IllvIj9hLm9yZGluYWxOdW1iZXIobyx7dW5pdDoieWVhciJ9KTpVZShvLGUubGVuZ3RoKX0sUjpmdW5jdGlvbih0LGUpe2xldCBhPUkyKHQpO3JldHVybiBVZShhLGUubGVuZ3RoKX0sdTpmdW5jdGlvbih0LGUpe2xldCBhPXQuZ2V0RnVsbFllYXIoKTtyZXR1cm4gVWUoYSxlLmxlbmd0aCl9LFE6ZnVuY3Rpb24odCxlLGEpe2xldCByPU1hdGguY2VpbCgodC5nZXRNb250aCgpKzEpLzMpO3N3aXRjaChlKXtjYXNlIlEiOnJldHVybiBTdHJpbmcocik7Y2FzZSJRUSI6cmV0dXJuIFVlKHIsMik7Y2FzZSJRbyI6cmV0dXJuIGEub3JkaW5hbE51bWJlcihyLHt1bml0OiJxdWFydGVyIn0pO2Nhc2UiUVFRIjpyZXR1cm4gYS5xdWFydGVyKHIse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIlFRUVFRIjpyZXR1cm4gYS5xdWFydGVyKHIse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gYS5xdWFydGVyKHIse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfX0scTpmdW5jdGlvbih0LGUsYSl7bGV0IHI9TWF0aC5jZWlsKCh0LmdldE1vbnRoKCkrMSkvMyk7c3dpdGNoKGUpe2Nhc2UicSI6cmV0dXJuIFN0cmluZyhyKTtjYXNlInFxIjpyZXR1cm4gVWUociwyKTtjYXNlInFvIjpyZXR1cm4gYS5vcmRpbmFsTnVtYmVyKHIse3VuaXQ6InF1YXJ0ZXIifSk7Y2FzZSJxcXEiOnJldHVybiBhLnF1YXJ0ZXIocix7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2Nhc2UicXFxcXEiOnJldHVybiBhLnF1YXJ0ZXIocix7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoic3RhbmRhbG9uZSJ9KTtkZWZhdWx0OnJldHVybiBhLnF1YXJ0ZXIocix7d2lkdGg6IndpZGUiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl9fSxNOmZ1bmN0aW9uKHQsZSxhKXtsZXQgcj10LmdldE1vbnRoKCk7c3dpdGNoKGUpe2Nhc2UiTSI6Y2FzZSJNTSI6cmV0dXJuIHNhLk0odCxlKTtjYXNlIk1vIjpyZXR1cm4gYS5vcmRpbmFsTnVtYmVyKHIrMSx7dW5pdDoibW9udGgifSk7Y2FzZSJNTU0iOnJldHVybiBhLm1vbnRoKHIse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIk1NTU1NIjpyZXR1cm4gYS5tb250aChyLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIGEubW9udGgocix7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fSxMOmZ1bmN0aW9uKHQsZSxhKXtsZXQgcj10LmdldE1vbnRoKCk7c3dpdGNoKGUpe2Nhc2UiTCI6cmV0dXJuIFN0cmluZyhyKzEpO2Nhc2UiTEwiOnJldHVybiBVZShyKzEsMik7Y2FzZSJMbyI6cmV0dXJuIGEub3JkaW5hbE51bWJlcihyKzEse3VuaXQ6Im1vbnRoIn0pO2Nhc2UiTExMIjpyZXR1cm4gYS5tb250aChyLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJMTExMTCI6cmV0dXJuIGEubW9udGgocix7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoic3RhbmRhbG9uZSJ9KTtkZWZhdWx0OnJldHVybiBhLm1vbnRoKHIse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfX0sdzpmdW5jdGlvbih0LGUsYSxyKXtsZXQgaT1ZYyh0LHIpO3JldHVybiBlPT09IndvIj9hLm9yZGluYWxOdW1iZXIoaSx7dW5pdDoid2VlayJ9KTpVZShpLGUubGVuZ3RoKX0sSTpmdW5jdGlvbih0LGUsYSl7bGV0IHI9R2ModCk7cmV0dXJuIGU9PT0iSW8iP2Eub3JkaW5hbE51bWJlcihyLHt1bml0OiJ3ZWVrIn0pOlVlKHIsZS5sZW5ndGgpfSxkOmZ1bmN0aW9uKHQsZSxhKXtyZXR1cm4gZT09PSJkbyI/YS5vcmRpbmFsTnVtYmVyKHQuZ2V0RGF0ZSgpLHt1bml0OiJkYXRlIn0pOnNhLmQodCxlKX0sRDpmdW5jdGlvbih0LGUsYSl7bGV0IHI9Wk8odCk7cmV0dXJuIGU9PT0iRG8iP2Eub3JkaW5hbE51bWJlcihyLHt1bml0OiJkYXlPZlllYXIifSk6VWUocixlLmxlbmd0aCl9LEU6ZnVuY3Rpb24odCxlLGEpe2xldCByPXQuZ2V0RGF5KCk7c3dpdGNoKGUpe2Nhc2UiRSI6Y2FzZSJFRSI6Y2FzZSJFRUUiOnJldHVybiBhLmRheShyLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJFRUVFRSI6cmV0dXJuIGEuZGF5KHIse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJFRUVFRUUiOnJldHVybiBhLmRheShyLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gYS5kYXkocix7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fSxlOmZ1bmN0aW9uKHQsZSxhLHIpe2xldCBpPXQuZ2V0RGF5KCksbz0oaS1yLndlZWtTdGFydHNPbis4KSU3fHw3O3N3aXRjaChlKXtjYXNlImUiOnJldHVybiBTdHJpbmcobyk7Y2FzZSJlZSI6cmV0dXJuIFVlKG8sMik7Y2FzZSJlbyI6cmV0dXJuIGEub3JkaW5hbE51bWJlcihvLHt1bml0OiJkYXkifSk7Y2FzZSJlZWUiOnJldHVybiBhLmRheShpLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJlZWVlZSI6cmV0dXJuIGEuZGF5KGkse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJlZWVlZWUiOnJldHVybiBhLmRheShpLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gYS5kYXkoaSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fSxjOmZ1bmN0aW9uKHQsZSxhLHIpe2xldCBpPXQuZ2V0RGF5KCksbz0oaS1yLndlZWtTdGFydHNPbis4KSU3fHw3O3N3aXRjaChlKXtjYXNlImMiOnJldHVybiBTdHJpbmcobyk7Y2FzZSJjYyI6cmV0dXJuIFVlKG8sZS5sZW5ndGgpO2Nhc2UiY28iOnJldHVybiBhLm9yZGluYWxOdW1iZXIobyx7dW5pdDoiZGF5In0pO2Nhc2UiY2NjIjpyZXR1cm4gYS5kYXkoaSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2Nhc2UiY2NjY2MiOnJldHVybiBhLmRheShpLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2Nhc2UiY2NjY2NjIjpyZXR1cm4gYS5kYXkoaSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2RlZmF1bHQ6cmV0dXJuIGEuZGF5KGkse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfX0saTpmdW5jdGlvbih0LGUsYSl7bGV0IHI9dC5nZXREYXkoKSxpPXI9PT0wPzc6cjtzd2l0Y2goZSl7Y2FzZSJpIjpyZXR1cm4gU3RyaW5nKGkpO2Nhc2UiaWkiOnJldHVybiBVZShpLGUubGVuZ3RoKTtjYXNlImlvIjpyZXR1cm4gYS5vcmRpbmFsTnVtYmVyKGkse3VuaXQ6ImRheSJ9KTtjYXNlImlpaSI6cmV0dXJuIGEuZGF5KHIse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImlpaWlpIjpyZXR1cm4gYS5kYXkocix7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImlpaWlpaSI6cmV0dXJuIGEuZGF5KHIse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiBhLmRheShyLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LGE6ZnVuY3Rpb24odCxlLGEpe2xldCBpPXQuZ2V0SG91cnMoKS8xMj49MT8icG0iOiJhbSI7c3dpdGNoKGUpe2Nhc2UiYSI6Y2FzZSJhYSI6cmV0dXJuIGEuZGF5UGVyaW9kKGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImFhYSI6cmV0dXJuIGEuZGF5UGVyaW9kKGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KS50b0xvd2VyQ2FzZSgpO2Nhc2UiYWFhYWEiOnJldHVybiBhLmRheVBlcmlvZChpLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIGEuZGF5UGVyaW9kKGkse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfX0sYjpmdW5jdGlvbih0LGUsYSl7bGV0IHI9dC5nZXRIb3VycygpLGk7c3dpdGNoKHI9PT0xMj9pPVpjLm5vb246cj09PTA/aT1aYy5taWRuaWdodDppPXIvMTI+PTE/InBtIjoiYW0iLGUpe2Nhc2UiYiI6Y2FzZSJiYiI6cmV0dXJuIGEuZGF5UGVyaW9kKGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImJiYiI6cmV0dXJuIGEuZGF5UGVyaW9kKGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KS50b0xvd2VyQ2FzZSgpO2Nhc2UiYmJiYmIiOnJldHVybiBhLmRheVBlcmlvZChpLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIGEuZGF5UGVyaW9kKGkse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfX0sQjpmdW5jdGlvbih0LGUsYSl7bGV0IHI9dC5nZXRIb3VycygpLGk7c3dpdGNoKHI+PTE3P2k9WmMuZXZlbmluZzpyPj0xMj9pPVpjLmFmdGVybm9vbjpyPj00P2k9WmMubW9ybmluZzppPVpjLm5pZ2h0LGUpe2Nhc2UiQiI6Y2FzZSJCQiI6Y2FzZSJCQkIiOnJldHVybiBhLmRheVBlcmlvZChpLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJCQkJCQiI6cmV0dXJuIGEuZGF5UGVyaW9kKGkse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gYS5kYXlQZXJpb2QoaSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fSxoOmZ1bmN0aW9uKHQsZSxhKXtpZihlPT09ImhvIil7bGV0IHI9dC5nZXRIb3VycygpJTEyO3JldHVybiByPT09MCYmKHI9MTIpLGEub3JkaW5hbE51bWJlcihyLHt1bml0OiJob3VyIn0pfXJldHVybiBzYS5oKHQsZSl9LEg6ZnVuY3Rpb24odCxlLGEpe3JldHVybiBlPT09IkhvIj9hLm9yZGluYWxOdW1iZXIodC5nZXRIb3VycygpLHt1bml0OiJob3VyIn0pOnNhLkgodCxlKX0sSzpmdW5jdGlvbih0LGUsYSl7bGV0IHI9dC5nZXRIb3VycygpJTEyO3JldHVybiBlPT09IktvIj9hLm9yZGluYWxOdW1iZXIocix7dW5pdDoiaG91ciJ9KTpVZShyLGUubGVuZ3RoKX0sazpmdW5jdGlvbih0LGUsYSl7bGV0IHI9dC5nZXRIb3VycygpO3JldHVybiByPT09MCYmKHI9MjQpLGU9PT0ia28iP2Eub3JkaW5hbE51bWJlcihyLHt1bml0OiJob3VyIn0pOlVlKHIsZS5sZW5ndGgpfSxtOmZ1bmN0aW9uKHQsZSxhKXtyZXR1cm4gZT09PSJtbyI/YS5vcmRpbmFsTnVtYmVyKHQuZ2V0TWludXRlcygpLHt1bml0OiJtaW51dGUifSk6c2EubSh0LGUpfSxzOmZ1bmN0aW9uKHQsZSxhKXtyZXR1cm4gZT09PSJzbyI/YS5vcmRpbmFsTnVtYmVyKHQuZ2V0U2Vjb25kcygpLHt1bml0OiJzZWNvbmQifSk6c2Eucyh0LGUpfSxTOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNhLlModCxlKX0sWDpmdW5jdGlvbih0LGUsYSl7bGV0IHI9dC5nZXRUaW1lem9uZU9mZnNldCgpO2lmKHI9PT0wKXJldHVybiJaIjtzd2l0Y2goZSl7Y2FzZSJYIjpyZXR1cm4gU09lKHIpO2Nhc2UiWFhYWCI6Y2FzZSJYWCI6cmV0dXJuIEhzKHIpO2RlZmF1bHQ6cmV0dXJuIEhzKHIsIjoiKX19LHg6ZnVuY3Rpb24odCxlLGEpe2xldCByPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtzd2l0Y2goZSl7Y2FzZSJ4IjpyZXR1cm4gU09lKHIpO2Nhc2UieHh4eCI6Y2FzZSJ4eCI6cmV0dXJuIEhzKHIpO2RlZmF1bHQ6cmV0dXJuIEhzKHIsIjoiKX19LE86ZnVuY3Rpb24odCxlLGEpe2xldCByPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtzd2l0Y2goZSl7Y2FzZSJPIjpjYXNlIk9PIjpjYXNlIk9PTyI6cmV0dXJuIkdNVCIra09lKHIsIjoiKTtkZWZhdWx0OnJldHVybiJHTVQiK0hzKHIsIjoiKX19LHo6ZnVuY3Rpb24odCxlLGEpe2xldCByPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtzd2l0Y2goZSl7Y2FzZSJ6IjpjYXNlInp6IjpjYXNlInp6eiI6cmV0dXJuIkdNVCIra09lKHIsIjoiKTtkZWZhdWx0OnJldHVybiJHTVQiK0hzKHIsIjoiKX19LHQ6ZnVuY3Rpb24odCxlLGEpe2xldCByPU1hdGgudHJ1bmMoK3QvMWUzKTtyZXR1cm4gVWUocixlLmxlbmd0aCl9LFQ6ZnVuY3Rpb24odCxlLGEpe3JldHVybiBVZSgrdCxlLmxlbmd0aCl9fX0pO3ZhciBMT2UsVE9lLEFWdCx3byx4Wj1uKCgpPT57TE9lPSh0LGUpPT57c3dpdGNoKHQpe2Nhc2UiUCI6cmV0dXJuIGUuZGF0ZSh7d2lkdGg6InNob3J0In0pO2Nhc2UiUFAiOnJldHVybiBlLmRhdGUoe3dpZHRoOiJtZWRpdW0ifSk7Y2FzZSJQUFAiOnJldHVybiBlLmRhdGUoe3dpZHRoOiJsb25nIn0pO2RlZmF1bHQ6cmV0dXJuIGUuZGF0ZSh7d2lkdGg6ImZ1bGwifSl9fSxUT2U9KHQsZSk9Pntzd2l0Y2godCl7Y2FzZSJwIjpyZXR1cm4gZS50aW1lKHt3aWR0aDoic2hvcnQifSk7Y2FzZSJwcCI6cmV0dXJuIGUudGltZSh7d2lkdGg6Im1lZGl1bSJ9KTtjYXNlInBwcCI6cmV0dXJuIGUudGltZSh7d2lkdGg6ImxvbmcifSk7ZGVmYXVsdDpyZXR1cm4gZS50aW1lKHt3aWR0aDoiZnVsbCJ9KX19LEFWdD0odCxlKT0+e2xldCBhPXQubWF0Y2goLyhQKykocCspPy8pfHxbXSxyPWFbMV0saT1hWzJdO2lmKCFpKXJldHVybiBMT2UodCxlKTtsZXQgbztzd2l0Y2gocil7Y2FzZSJQIjpvPWUuZGF0ZVRpbWUoe3dpZHRoOiJzaG9ydCJ9KTticmVhaztjYXNlIlBQIjpvPWUuZGF0ZVRpbWUoe3dpZHRoOiJtZWRpdW0ifSk7YnJlYWs7Y2FzZSJQUFAiOm89ZS5kYXRlVGltZSh7d2lkdGg6ImxvbmcifSk7YnJlYWs7ZGVmYXVsdDpvPWUuZGF0ZVRpbWUoe3dpZHRoOiJmdWxsIn0pO2JyZWFrfXJldHVybiBvLnJlcGxhY2UoInt7ZGF0ZX19IixMT2UocixlKSkucmVwbGFjZSgie3t0aW1lfX0iLFRPZShpLGUpKX0sd289e3A6VE9lLFA6QVZ0fX0pO2Z1bmN0aW9uIEpPKHQpe3JldHVybiAkVnQudGVzdCh0KX1mdW5jdGlvbiBlQih0KXtyZXR1cm4gRFZ0LnRlc3QodCl9ZnVuY3Rpb24gcDgodCxlLGEpe2xldCByPU5WdCh0LGUsYSk7aWYoY29uc29sZS53YXJuKHIpLEVWdC5pbmNsdWRlcyh0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihyKX1mdW5jdGlvbiBOVnQodCxlLGEpe2xldCByPXRbMF09PT0iWSI/InllYXJzIjoiZGF5cyBvZiB0aGUgbW9udGgiO3JldHVybmBVc2UgXGAke3QudG9Mb3dlckNhc2UoKX1cYCBpbnN0ZWFkIG9mIFxgJHt0fVxgIChpbiBcYCR7ZX1cYCkgZm9yIGZvcm1hdHRpbmcgJHtyfSB0byB0aGUgaW5wdXQgXGAke2F9XGA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZGB9dmFyICRWdCxEVnQsRVZ0LGJaPW4oKCk9PnskVnQ9L15EKyQvLERWdD0vXlkrJC8sRVZ0PVsiRCIsIkREIiwiWVkiLCJZWVlZIl19KTtmdW5jdGlvbiBoOCh0LGUsYSl7bGV0IHI9VXQoKSxpPWE/LmxvY2FsZT8/ci5sb2NhbGU/P0syLG89YT8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9hPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/ci5maXJzdFdlZWtDb250YWluc0RhdGU/P3IubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGU/PzEscz1hPy53ZWVrU3RhcnRzT24/P2E/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz9yLndlZWtTdGFydHNPbj8/ci5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/MCxsPWVlKHQsYT8uaW4pO2lmKCFyMihsKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7bGV0IGY9ZS5tYXRjaChJVnQpLm1hcCh1PT57bGV0IGQ9dVswXTtpZihkPT09InAifHxkPT09IlAiKXtsZXQgaD13b1tkXTtyZXR1cm4gaCh1LGkuZm9ybWF0TG9uZyl9cmV0dXJuIHV9KS5qb2luKCIiKS5tYXRjaChQVnQpLm1hcCh1PT57aWYodT09PSInJyIpcmV0dXJue2lzVG9rZW46ITEsdmFsdWU6IicifTtsZXQgZD11WzBdO2lmKGQ9PT0iJyIpcmV0dXJue2lzVG9rZW46ITEsdmFsdWU6UlZ0KHUpfTtpZih1OFtkXSlyZXR1cm57aXNUb2tlbjohMCx2YWx1ZTp1fTtpZihkLm1hdGNoKEJWdCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIitkKyJgIik7cmV0dXJue2lzVG9rZW46ITEsdmFsdWU6dX19KTtpLmxvY2FsaXplLnByZXByb2Nlc3NvciYmKGY9aS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3IobCxmKSk7bGV0IGM9e2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZTpvLHdlZWtTdGFydHNPbjpzLGxvY2FsZTppfTtyZXR1cm4gZi5tYXAodT0+e2lmKCF1LmlzVG9rZW4pcmV0dXJuIHUudmFsdWU7bGV0IGQ9dS52YWx1ZTsoIWE/LnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucyYmZUIoZCl8fCFhPy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zJiZKTyhkKSkmJnA4KGQsZSxTdHJpbmcodCkpO2xldCBoPXU4W2RbMF1dO3JldHVybiBoKGwsZCxpLmxvY2FsaXplLGMpfSkuam9pbigiIil9ZnVuY3Rpb24gUlZ0KHQpe2xldCBlPXQubWF0Y2goRlZ0KTtyZXR1cm4gZT9lWzFdLnJlcGxhY2UoT1Z0LCInIik6dH12YXIgUFZ0LElWdCxGVnQsT1Z0LEJWdCx6TTEsdlo9bigoKT0+e09zKCk7eDIoKTtDT2UoKTt4WigpO2JaKCk7Y2koKTtNZSgpO1BWdD0vW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXHcpXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nLElWdD0vUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZyxGVnQ9L14nKFteXSo/KSc/JC8sT1Z0PS8nJy9nLEJWdD0vW2EtekEtWl0vO3pNMT1oOH0pO2Z1bmN0aW9uIHRCKHQsZSxhKXtsZXQgcj1VdCgpLGk9YT8ubG9jYWxlPz9yLmxvY2FsZT8/SzIsbz0yNTIwLHM9YjIodCxlKTtpZihpc05hTihzKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSxhLHthZGRTdWZmaXg6YT8uYWRkU3VmZml4LGNvbXBhcmlzb246c30pLFtmLGNdPVllKGE/LmluLC4uLnM+MD9bZSx0XTpbdCxlXSksdT1DcihjLGYpLGQ9KGIxKGMpLWIxKGYpKS8xZTMsaD1NYXRoLnJvdW5kKCh1LWQpLzYwKSxnO2lmKGg8MilyZXR1cm4gYT8uaW5jbHVkZVNlY29uZHM/dTw1P2kuZm9ybWF0RGlzdGFuY2UoImxlc3NUaGFuWFNlY29uZHMiLDUsbCk6dTwxMD9pLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwxMCxsKTp1PDIwP2kuZm9ybWF0RGlzdGFuY2UoImxlc3NUaGFuWFNlY29uZHMiLDIwLGwpOnU8NDA/aS5mb3JtYXREaXN0YW5jZSgiaGFsZkFNaW51dGUiLDAsbCk6dTw2MD9pLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhNaW51dGVzIiwxLGwpOmkuZm9ybWF0RGlzdGFuY2UoInhNaW51dGVzIiwxLGwpOmg9PT0wP2kuZm9ybWF0RGlzdGFuY2UoImxlc3NUaGFuWE1pbnV0ZXMiLDEsbCk6aS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLGgsbCk7aWYoaDw0NSlyZXR1cm4gaS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLGgsbCk7aWYoaDw5MClyZXR1cm4gaS5mb3JtYXREaXN0YW5jZSgiYWJvdXRYSG91cnMiLDEsbCk7aWYoaDwkYyl7bGV0IGI9TWF0aC5yb3VuZChoLzYwKTtyZXR1cm4gaS5mb3JtYXREaXN0YW5jZSgiYWJvdXRYSG91cnMiLGIsbCl9ZWxzZXtpZihoPG8pcmV0dXJuIGkuZm9ybWF0RGlzdGFuY2UoInhEYXlzIiwxLGwpO2lmKGg8dW8pe2xldCBiPU1hdGgucm91bmQoaC8kYyk7cmV0dXJuIGkuZm9ybWF0RGlzdGFuY2UoInhEYXlzIixiLGwpfWVsc2UgaWYoaDx1byoyKXJldHVybiBnPU1hdGgucm91bmQoaC91byksaS5mb3JtYXREaXN0YW5jZSgiYWJvdXRYTW9udGhzIixnLGwpfWlmKGc9Ym8oYyxmKSxnPDEyKXtsZXQgYj1NYXRoLnJvdW5kKGgvdW8pO3JldHVybiBpLmZvcm1hdERpc3RhbmNlKCJ4TW9udGhzIixiLGwpfWVsc2V7bGV0IGI9ZyUxMix4PU1hdGgudHJ1bmMoZy8xMik7cmV0dXJuIGI8Mz9pLmZvcm1hdERpc3RhbmNlKCJhYm91dFhZZWFycyIseCxsKTpiPDk/aS5mb3JtYXREaXN0YW5jZSgib3ZlclhZZWFycyIseCxsKTppLmZvcm1hdERpc3RhbmNlKCJhbG1vc3RYWWVhcnMiLHgrMSxsKX19dmFyIEVNMSx5Wj1uKCgpPT57T3MoKTt4MigpO25pKCk7WHQoKTtFcygpO2d0KCk7bDgoKTtjOCgpO0VNMT10Qn0pO2Z1bmN0aW9uIGFCKHQsZSxhKXtsZXQgcj1VdCgpLGk9YT8ubG9jYWxlPz9yLmxvY2FsZT8/SzIsbz1iMih0LGUpO2lmKGlzTmFOKG8pKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgcz1PYmplY3QuYXNzaWduKHt9LGEse2FkZFN1ZmZpeDphPy5hZGRTdWZmaXgsY29tcGFyaXNvbjpvfSksW2wsZl09WWUoYT8uaW4sLi4ubz4wP1tlLHRdOlt0LGVdKSxjPXYyKGE/LnJvdW5kaW5nTWV0aG9kPz8icm91bmQiKSx1PWYuZ2V0VGltZSgpLWwuZ2V0VGltZSgpLGQ9dS9nMixoPWIxKGYpLWIxKGwpLGc9KHUtaCkvZzIsYj1hPy51bml0LHg7aWYoYj94PWI6ZDwxP3g9InNlY29uZCI6ZDw2MD94PSJtaW51dGUiOmQ8JGM/eD0iaG91ciI6Zzx1bz94PSJkYXkiOmc8Vlk/eD0ibW9udGgiOng9InllYXIiLHg9PT0ic2Vjb25kIil7bGV0IG09Yyh1LzFlMyk7cmV0dXJuIGkuZm9ybWF0RGlzdGFuY2UoInhTZWNvbmRzIixtLHMpfWVsc2UgaWYoeD09PSJtaW51dGUiKXtsZXQgbT1jKGQpO3JldHVybiBpLmZvcm1hdERpc3RhbmNlKCJ4TWludXRlcyIsbSxzKX1lbHNlIGlmKHg9PT0iaG91ciIpe2xldCBtPWMoZC82MCk7cmV0dXJuIGkuZm9ybWF0RGlzdGFuY2UoInhIb3VycyIsbSxzKX1lbHNlIGlmKHg9PT0iZGF5Iil7bGV0IG09YyhnLyRjKTtyZXR1cm4gaS5mb3JtYXREaXN0YW5jZSgieERheXMiLG0scyl9ZWxzZSBpZih4PT09Im1vbnRoIil7bGV0IG09YyhnL3VvKTtyZXR1cm4gbT09PTEyJiZiIT09Im1vbnRoIj9pLmZvcm1hdERpc3RhbmNlKCJ4WWVhcnMiLDEscyk6aS5mb3JtYXREaXN0YW5jZSgieE1vbnRocyIsbSxzKX1lbHNle2xldCBtPWMoZy9WWSk7cmV0dXJuIGkuZm9ybWF0RGlzdGFuY2UoInhZZWFycyIsbSxzKX19dmFyIHFNMSx3Wj1uKCgpPT57T3MoKTt4MigpO2RpKCk7bmkoKTtYdCgpO0VzKCk7Z3QoKTtxTTE9YUJ9KTtmdW5jdGlvbiBfT2UodCxlKXtyZXR1cm4gdEIodCx5dCh0KSxlKX12YXIgV00xLEFPZT1uKCgpPT57TzEoKTt5WigpO1dNMT1fT2V9KTtmdW5jdGlvbiAkT2UodCxlKXtyZXR1cm4gYUIodCx5dCh0KSxlKX12YXIgWE0xLERPZT1uKCgpPT57TzEoKTt3WigpO1hNMT0kT2V9KTtmdW5jdGlvbiBFT2UodCxlKXtsZXQgYT1VdCgpLHI9ZT8ubG9jYWxlPz9hLmxvY2FsZT8/SzIsaT1lPy5mb3JtYXQ/P0hWdCxvPWU/Lnplcm8/PyExLHM9ZT8uZGVsaW1pdGVyPz8iICI7cmV0dXJuIHIuZm9ybWF0RGlzdGFuY2U/aS5yZWR1Y2UoKGYsYyk9PntsZXQgdT1geCR7Yy5yZXBsYWNlKC8oXi4pLyxoPT5oLnRvVXBwZXJDYXNlKCkpfWAsZD10W2NdO3JldHVybiBkIT09dm9pZCAwJiYob3x8dFtjXSk/Zi5jb25jYXQoci5mb3JtYXREaXN0YW5jZSh1LGQpKTpmfSxbXSkuam9pbihzKToiIn12YXIgSFZ0LGV6MSxOT2U9bigoKT0+e09zKCk7eDIoKTtIVnQ9WyJ5ZWFycyIsIm1vbnRocyIsIndlZWtzIiwiZGF5cyIsImhvdXJzIiwibWludXRlcyIsInNlY29uZHMiXTtlejE9RU9lfSk7ZnVuY3Rpb24gUE9lKHQsZSl7bGV0IGE9ZWUodCxlPy5pbik7aWYoaXNOYU4oK2EpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgcj1lPy5mb3JtYXQ/PyJleHRlbmRlZCIsaT1lPy5yZXByZXNlbnRhdGlvbj8/ImNvbXBsZXRlIixvPSIiLHM9IiIsbD1yPT09ImV4dGVuZGVkIj8iLSI6IiIsZj1yPT09ImV4dGVuZGVkIj8iOiI6IiI7aWYoaSE9PSJ0aW1lIil7bGV0IGM9VWUoYS5nZXREYXRlKCksMiksdT1VZShhLmdldE1vbnRoKCkrMSwyKTtvPWAke1VlKGEuZ2V0RnVsbFllYXIoKSw0KX0ke2x9JHt1fSR7bH0ke2N9YH1pZihpIT09ImRhdGUiKXtsZXQgYz1hLmdldFRpbWV6b25lT2Zmc2V0KCk7aWYoYyE9PTApe2xldCB4PU1hdGguYWJzKGMpLG09VWUoTWF0aC50cnVuYyh4LzYwKSwyKSx2PVVlKHglNjAsMik7cz1gJHtjPDA/IisiOiItIn0ke219OiR7dn1gfWVsc2Ugcz0iWiI7bGV0IHU9VWUoYS5nZXRIb3VycygpLDIpLGQ9VWUoYS5nZXRNaW51dGVzKCksMiksaD1VZShhLmdldFNlY29uZHMoKSwyKSxnPW89PT0iIj8iIjoiVCIsYj1bdSxkLGhdLmpvaW4oZik7bz1gJHtvfSR7Z30ke2J9JHtzfWB9cmV0dXJuIG99dmFyIGl6MSxJT2U9bigoKT0+e1JzKCk7TWUoKTtpejE9UE9lfSk7ZnVuY3Rpb24gRk9lKHQsZSl7bGV0IGE9ZWUodCxlPy5pbik7aWYoIXIyKGEpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgcj1lPy5mb3JtYXQ/PyJleHRlbmRlZCIsaT1lPy5yZXByZXNlbnRhdGlvbj8/ImNvbXBsZXRlIixvPSIiLHM9cj09PSJleHRlbmRlZCI/Ii0iOiIiLGw9cj09PSJleHRlbmRlZCI/IjoiOiIiO2lmKGkhPT0idGltZSIpe2xldCBmPVVlKGEuZ2V0RGF0ZSgpLDIpLGM9VWUoYS5nZXRNb250aCgpKzEsMik7bz1gJHtVZShhLmdldEZ1bGxZZWFyKCksNCl9JHtzfSR7Y30ke3N9JHtmfWB9aWYoaSE9PSJkYXRlIil7bGV0IGY9VWUoYS5nZXRIb3VycygpLDIpLGM9VWUoYS5nZXRNaW51dGVzKCksMiksdT1VZShhLmdldFNlY29uZHMoKSwyKTtvPWAke299JHtvPT09IiI/IiI6IiAifSR7Zn0ke2x9JHtjfSR7bH0ke3V9YH1yZXR1cm4gb312YXIgY3oxLE9PZT1uKCgpPT57UnMoKTtjaSgpO01lKCk7Y3oxPUZPZX0pO2Z1bmN0aW9uIEJPZSh0KXtsZXR7eWVhcnM6ZT0wLG1vbnRoczphPTAsZGF5czpyPTAsaG91cnM6aT0wLG1pbnV0ZXM6bz0wLHNlY29uZHM6cz0wfT10O3JldHVybmBQJHtlfVkke2F9TSR7cn1EVCR7aX1IJHtvfU0ke3N9U2B9dmFyIGZ6MSxST2U9bigoKT0+e2Z6MT1CT2V9KTtmdW5jdGlvbiBIT2UodCxlKXtsZXQgYT1lZSh0LGU/LmluKTtpZighcjIoYSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO2xldCByPWU/LmZyYWN0aW9uRGlnaXRzPz8wLGk9VWUoYS5nZXREYXRlKCksMiksbz1VZShhLmdldE1vbnRoKCkrMSwyKSxzPWEuZ2V0RnVsbFllYXIoKSxsPVVlKGEuZ2V0SG91cnMoKSwyKSxmPVVlKGEuZ2V0TWludXRlcygpLDIpLGM9VWUoYS5nZXRTZWNvbmRzKCksMiksdT0iIjtpZihyPjApe2xldCBnPWEuZ2V0TWlsbGlzZWNvbmRzKCksYj1NYXRoLnRydW5jKGcqTWF0aC5wb3coMTAsci0zKSk7dT0iLiIrVWUoYixyKX1sZXQgZD0iIixoPWEuZ2V0VGltZXpvbmVPZmZzZXQoKTtpZihoIT09MCl7bGV0IGc9TWF0aC5hYnMoaCksYj1VZShNYXRoLnRydW5jKGcvNjApLDIpLHg9VWUoZyU2MCwyKTtkPWAke2g8MD8iKyI6Ii0ifSR7Yn06JHt4fWB9ZWxzZSBkPSJaIjtyZXR1cm5gJHtzfS0ke299LSR7aX1UJHtsfToke2Z9OiR7Y30ke3V9JHtkfWB9dmFyIGd6MSxxT2U9bigoKT0+e1JzKCk7Y2koKTtNZSgpO2d6MT1IT2V9KTtmdW5jdGlvbiBWT2UodCl7bGV0IGU9ZWUodCk7aWYoIXIyKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgYT1xVnRbZS5nZXRVVENEYXkoKV0scj1VZShlLmdldFVUQ0RhdGUoKSwyKSxpPVZWdFtlLmdldFVUQ01vbnRoKCldLG89ZS5nZXRVVENGdWxsWWVhcigpLHM9VWUoZS5nZXRVVENIb3VycygpLDIpLGw9VWUoZS5nZXRVVENNaW51dGVzKCksMiksZj1VZShlLmdldFVUQ1NlY29uZHMoKSwyKTtyZXR1cm5gJHthfSwgJHtyfSAke2l9ICR7b30gJHtzfToke2x9OiR7Zn0gR01UYH12YXIgcVZ0LFZWdCx3ejEsVU9lPW4oKCk9PntScygpO2NpKCk7TWUoKTtxVnQ9WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxWVnQ9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTt3ejE9Vk9lfSk7ZnVuY3Rpb24gak9lKHQsZSxhKXtsZXRbcixpXT1ZZShhPy5pbix0LGUpLG89VXQoKSxzPWE/LmxvY2FsZT8/by5sb2NhbGU/P0syLGw9YT8ud2Vla1N0YXJ0c09uPz9hPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/by53ZWVrU3RhcnRzT24/P28ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/PzAsZj1XMShyLGkpO2lmKGlzTmFOKGYpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgYztmPC02P2M9Im90aGVyIjpmPC0xP2M9Imxhc3RXZWVrIjpmPDA/Yz0ieWVzdGVyZGF5IjpmPDE/Yz0idG9kYXkiOmY8Mj9jPSJ0b21vcnJvdyI6Zjw3P2M9Im5leHRXZWVrIjpjPSJvdGhlciI7bGV0IHU9cy5mb3JtYXRSZWxhdGl2ZShjLHIsaSx7bG9jYWxlOnMsd2Vla1N0YXJ0c09uOmx9KTtyZXR1cm4gaDgocix1LHtsb2NhbGU6cyx3ZWVrU3RhcnRzT246bH0pfXZhciBUejEsV09lPW4oKCk9PntPcygpO3gyKCk7WHQoKTtsaSgpO3ZaKCk7VHoxPWpPZX0pO2Z1bmN0aW9uIEdPZSh0LGUpe3JldHVybiBlZSh0KjFlMyxlPy5pbil9dmFyICR6MSxZT2U9bigoKT0+e01lKCk7JHoxPUdPZX0pO2Z1bmN0aW9uIHJCKHQsZSl7cmV0dXJuIGVlKHQsZT8uaW4pLmdldERhdGUoKX12YXIgTnoxLE1aPW4oKCk9PntNZSgpO056MT1yQn0pO2Z1bmN0aW9uIE1vKHQsZSl7cmV0dXJuIGVlKHQsZT8uaW4pLmdldERheSgpfXZhciBGejEsbTg9bigoKT0+e01lKCk7RnoxPU1vfSk7ZnVuY3Rpb24gaUIodCxlKXtsZXQgYT1lZSh0LGU/LmluKSxyPWEuZ2V0RnVsbFllYXIoKSxpPWEuZ2V0TW9udGgoKSxvPXdlKGEsMCk7cmV0dXJuIG8uc2V0RnVsbFllYXIocixpKzEsMCksby5zZXRIb3VycygwLDAsMCwwKSxvLmdldERhdGUoKX12YXIgSHoxLHpaPW4oKCk9PntLZSgpO01lKCk7SHoxPWlCfSk7ZnVuY3Rpb24gb0IodCxlKXtsZXQgcj1lZSh0LGU/LmluKS5nZXRGdWxsWWVhcigpO3JldHVybiByJTQwMD09PTB8fHIlND09PTAmJnIlMTAwIT09MH12YXIgVXoxLGtaPW4oKCk9PntNZSgpO1V6MT1vQn0pO2Z1bmN0aW9uIFpPZSh0LGUpe2xldCBhPWVlKHQsZT8uaW4pO3JldHVybiBOdW1iZXIuaXNOYU4oK2EpP05hTjpvQihhKT8zNjY6MzY1fXZhciBZejEsWE9lPW4oKCk9PntrWigpO01lKCk7WXoxPVpPZX0pO2Z1bmN0aW9uIFFPZSh0LGUpe2xldCByPWVlKHQsZT8uaW4pLmdldEZ1bGxZZWFyKCk7cmV0dXJuIE1hdGguZmxvb3Ioci8xMCkqMTB9dmFyIFF6MSxLT2U9bigoKT0+e01lKCk7UXoxPVFPZX0pO2Z1bmN0aW9uIHNCKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sVXQoKSl9dmFyIGVrMSxTWj1uKCgpPT57eDIoKTtlazE9c0J9KTtmdW5jdGlvbiBKT2UodCxlKXtyZXR1cm4gZWUodCxlPy5pbikuZ2V0SG91cnMoKX12YXIgcmsxLGVCZT1uKCgpPT57TWUoKTtyazE9Sk9lfSk7ZnVuY3Rpb24gbkIodCxlKXtsZXQgYT1lZSh0LGU/LmluKS5nZXREYXkoKTtyZXR1cm4gYT09PTA/NzphfXZhciBzazEsQ1o9bigoKT0+e01lKCk7c2sxPW5CfSk7ZnVuY3Rpb24gdEJlKHQsZSl7bGV0IGE9b2EodCxlKSxpPStvYShnbyhhLDYwKSktK2E7cmV0dXJuIE1hdGgucm91bmQoaS92cil9dmFyIGZrMSxhQmU9bigoKT0+e3M4KCk7Z3QoKTtOYygpO2ZrMT10QmV9KTtmdW5jdGlvbiByQmUodCl7cmV0dXJuIGVlKHQpLmdldE1pbGxpc2Vjb25kcygpfXZhciBoazEsaUJlPW4oKCk9PntNZSgpO2hrMT1yQmV9KTtmdW5jdGlvbiBvQmUodCxlKXtyZXR1cm4gZWUodCxlPy5pbikuZ2V0TWludXRlcygpfXZhciB4azEsc0JlPW4oKCk9PntNZSgpO3hrMT1vQmV9KTtmdW5jdGlvbiBuQmUodCxlKXtyZXR1cm4gZWUodCxlPy5pbikuZ2V0TW9udGgoKX12YXIgeWsxLGxCZT1uKCgpPT57TWUoKTt5azE9bkJlfSk7ZnVuY3Rpb24gY0JlKHQsZSl7bGV0W2Escl09WytlZSh0LnN0YXJ0KSwrZWUodC5lbmQpXS5zb3J0KChkLGgpPT5kLWgpLFtpLG9dPVsrZWUoZS5zdGFydCksK2VlKGUuZW5kKV0uc29ydCgoZCxoKT0+ZC1oKTtpZighKGE8byYmaTxyKSlyZXR1cm4gMDtsZXQgbD1pPGE/YTppLGY9bC1iMShsKSxjPW8+cj9yOm8sdT1jLWIxKGMpO3JldHVybiBNYXRoLmNlaWwoKHUtZikvZE8pfXZhciBTazEsZEJlPW4oKCk9PntuaSgpO2d0KCk7TWUoKTtTazE9Y0JlfSk7ZnVuY3Rpb24gZkJlKHQpe3JldHVybiBlZSh0KS5nZXRTZWNvbmRzKCl9dmFyIFRrMSx1QmU9bigoKT0+e01lKCk7VGsxPWZCZX0pO2Z1bmN0aW9uIHBCZSh0KXtyZXR1cm4rZWUodCl9dmFyICRrMSxoQmU9bigoKT0+e01lKCk7JGsxPXBCZX0pO2Z1bmN0aW9uIG1CZSh0KXtyZXR1cm4gTWF0aC50cnVuYygrZWUodCkvMWUzKX12YXIgTmsxLGdCZT1uKCgpPT57TWUoKTtOazE9bUJlfSk7ZnVuY3Rpb24geEJlKHQsZSl7bGV0IGE9VXQoKSxyPWU/LndlZWtTdGFydHNPbj8/ZT8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/P2Eud2Vla1N0YXJ0c09uPz9hLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz8wLGk9ckIoZWUodCxlPy5pbikpO2lmKGlzTmFOKGkpKXJldHVybiBOYU47bGV0IG89TW8odm8odCxlKSkscz1yLW87czw9MCYmKHMrPTcpO2xldCBsPWktcztyZXR1cm4gTWF0aC5jZWlsKGwvNykrMX12YXIgSGsxLGJCZT1uKCgpPT57eDIoKTtNWigpO204KCk7ZDgoKTtNZSgpO0hrMT14QmV9KTtmdW5jdGlvbiBsQih0LGUpe2xldCBhPWVlKHQsZT8uaW4pLHI9YS5nZXRNb250aCgpO3JldHVybiBhLnNldEZ1bGxZZWFyKGEuZ2V0RnVsbFllYXIoKSxyKzEsMCksYS5zZXRIb3VycygwLDAsMCwwKSxlZShhLGU/LmluKX12YXIgVWsxLExaPW4oKCk9PntNZSgpO1VrMT1sQn0pO2Z1bmN0aW9uIHZCZSh0LGUpe2xldCBhPWVlKHQsZT8uaW4pO3JldHVybiBQcyhsQihhLGUpLHZvKGEsZSksZSkrMX12YXIgWGsxLHlCZT1uKCgpPT57JE8oKTtMWigpO2Q4KCk7TWUoKTtYazE9dkJlfSk7ZnVuY3Rpb24gd0JlKHQsZSl7cmV0dXJuIGVlKHQsZT8uaW4pLmdldEZ1bGxZZWFyKCl9dmFyIEprMSxNQmU9bigoKT0+e01lKCk7SmsxPXdCZX0pO2Z1bmN0aW9uIHpCZSh0KXtyZXR1cm4gTWF0aC50cnVuYyh0KmlhKX12YXIgYVMxLGtCZT1uKCgpPT57Z3QoKTthUzE9ekJlfSk7ZnVuY3Rpb24gU0JlKHQpe3JldHVybiBNYXRoLnRydW5jKHQqZk8pfXZhciBvUzEsQ0JlPW4oKCk9PntndCgpO29TMT1TQmV9KTtmdW5jdGlvbiBMQmUodCl7cmV0dXJuIE1hdGgudHJ1bmModCpEcyl9dmFyIGxTMSxUQmU9bigoKT0+e2d0KCk7bFMxPUxCZX0pO2Z1bmN0aW9uIF9CZSh0LGUsYSl7bGV0W3IsaV09WWUoYT8uaW4sdCxlKTtpZihpc05hTigrcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3RhcnQgZGF0ZSBpcyBpbnZhbGlkIik7aWYoaXNOYU4oK2kpKXRocm93IG5ldyBUeXBlRXJyb3IoIkVuZCBkYXRlIGlzIGludmFsaWQiKTtpZihhPy5hc3NlcnRQb3NpdGl2ZSYmK3I+K2kpdGhyb3cgbmV3IFR5cGVFcnJvcigiRW5kIGRhdGUgbXVzdCBiZSBhZnRlciBzdGFydCBkYXRlIik7cmV0dXJue3N0YXJ0OnIsZW5kOml9fXZhciBmUzEsQUJlPW4oKCk9PntYdCgpO2ZTMT1fQmV9KTtmdW5jdGlvbiAkQmUodCxlKXtsZXR7c3RhcnQ6YSxlbmQ6cn09RzEoZT8uaW4sdCksaT17fSxvPUhPKHIsYSk7byYmKGkueWVhcnM9byk7bGV0IHM9cG8oYSx7eWVhcnM6aS55ZWFyc30pLGw9Ym8ocixzKTtsJiYoaS5tb250aHM9bCk7bGV0IGY9cG8ocyx7bW9udGhzOmkubW9udGhzfSksYz1CYyhyLGYpO2MmJihpLmRheXM9Yyk7bGV0IHU9cG8oZix7ZGF5czppLmRheXN9KSxkPUlzKHIsdSk7ZCYmKGkuaG91cnM9ZCk7bGV0IGg9cG8odSx7aG91cnM6aS5ob3Vyc30pLGc9RnMocixoKTtnJiYoaS5taW51dGVzPWcpO2xldCBiPXBvKGgse21pbnV0ZXM6aS5taW51dGVzfSkseD1DcihyLGIpO3JldHVybiB4JiYoaS5zZWNvbmRzPXgpLGl9dmFyIHdTMSxEQmU9bigoKT0+e0xyKCk7R1koKTtFTygpO05PKCk7Rk8oKTtsOCgpO2M4KCk7ZlooKTt3UzE9JEJlfSk7ZnVuY3Rpb24gRUJlKHQsZSxhKXtsZXQgcjtyZXR1cm4gVVZ0KGUpP3I9ZTphPWUsbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoYT8ubG9jYWxlLHIpLmZvcm1hdChlZSh0KSl9ZnVuY3Rpb24gVVZ0KHQpe3JldHVybiB0IT09dm9pZCAwJiYhKCJsb2NhbGUiaW4gdCl9dmFyIGtTMSxOQmU9bigoKT0+e01lKCk7a1MxPUVCZX0pO2Z1bmN0aW9uIFBCZSh0LGUsYSl7bGV0IHI9MCxpLFtvLHNdPVllKGE/LmluLHQsZSk7aWYoYT8udW5pdClpPWE/LnVuaXQsaT09PSJzZWNvbmQiP3I9Q3IobyxzKTppPT09Im1pbnV0ZSI/cj1GcyhvLHMpOmk9PT0iaG91ciI/cj1JcyhvLHMpOmk9PT0iZGF5Ij9yPVcxKG8scyk6aT09PSJ3ZWVrIj9yPVBzKG8scyk6aT09PSJtb250aCI/cj1OcyhvLHMpOmk9PT0icXVhcnRlciI/cj1PYyhvLHMpOmk9PT0ieWVhciImJihyPXhvKG8scykpO2Vsc2V7bGV0IGY9Q3IobyxzKTtNYXRoLmFicyhmKTxEYz8ocj1DcihvLHMpLGk9InNlY29uZCIpOk1hdGguYWJzKGYpPERzPyhyPUZzKG8scyksaT0ibWludXRlIik6TWF0aC5hYnMoZik8bE8mJk1hdGguYWJzKFcxKG8scykpPDE/KHI9SXMobyxzKSxpPSJob3VyIik6TWF0aC5hYnMoZik8dEZlJiYocj1XMShvLHMpKSYmTWF0aC5hYnMocik8Nz9pPSJkYXkiOk1hdGguYWJzKGYpPGpZPyhyPVBzKG8scyksaT0id2VlayIpOk1hdGguYWJzKGYpPGFGZT8ocj1OcyhvLHMpLGk9Im1vbnRoIik6TWF0aC5hYnMoZik8VVk/T2MobyxzKTw0PyhyPU9jKG8scyksaT0icXVhcnRlciIpOihyPXhvKG8scyksaT0ieWVhciIpOihyPXhvKG8scyksaT0ieWVhciIpfXJldHVybiBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQoYT8ubG9jYWxlLHtudW1lcmljOiJhdXRvIiwuLi5hfSkuZm9ybWF0KHIsaSl9dmFyIElTMSxJQmU9bigoKT0+e1h0KCk7Z3QoKTtsaSgpO0FPKCk7bFooKTskTygpO0RPKCk7Tk8oKTtGTygpO2M4KCk7SVMxPVBCZX0pO2Z1bmN0aW9uIEZCZSh0LGUpe3JldHVybitlZSh0KT4rZWUoZSl9dmFyIEJTMSxPQmU9bigoKT0+e01lKCk7QlMxPUZCZX0pO2Z1bmN0aW9uIEJCZSh0LGUpe3JldHVybitlZSh0KTwrZWUoZSl9dmFyIHFTMSxSQmU9bigoKT0+e01lKCk7cVMxPUJCZX0pO2Z1bmN0aW9uIEhCZSh0LGUpe3JldHVybitlZSh0KT09K2VlKGUpfXZhciBqUzEscUJlPW4oKCk9PntNZSgpO2pTMT1IQmV9KTtmdW5jdGlvbiBWQmUodCxlLGEpe2xldCByPW5ldyBEYXRlKHQsZSxhKTtyZXR1cm4gci5nZXRGdWxsWWVhcigpPT09dCYmci5nZXRNb250aCgpPT09ZSYmci5nZXREYXRlKCk9PT1hfXZhciBHUzEsVUJlPW4oKCk9PntHUzE9VkJlfSk7ZnVuY3Rpb24gakJlKHQsZSl7cmV0dXJuIGVlKHQsZT8uaW4pLmdldERhdGUoKT09PTF9dmFyIFhTMSxXQmU9bigoKT0+e01lKCk7WFMxPWpCZX0pO2Z1bmN0aW9uIEdCZSh0LGUpe3JldHVybiBlZSh0LGU/LmluKS5nZXREYXkoKT09PTV9dmFyIEpTMSxZQmU9bigoKT0+e01lKCk7SlMxPUdCZX0pO2Z1bmN0aW9uIFpCZSh0KXtyZXR1cm4rZWUodCk+RGF0ZS5ub3coKX12YXIgYUMxLFhCZT1uKCgpPT57TWUoKTthQzE9WkJlfSk7ZnVuY3Rpb24gY0IodCxlKXtsZXQgYT1qVnQoZSk/bmV3IGUoMCk6d2UoZSwwKTtyZXR1cm4gYS5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKSxhLnNldEhvdXJzKHQuZ2V0SG91cnMoKSx0LmdldE1pbnV0ZXMoKSx0LmdldFNlY29uZHMoKSx0LmdldE1pbGxpc2Vjb25kcygpKSxhfWZ1bmN0aW9uIGpWdCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiImJnQucHJvdG90eXBlPy5jb25zdHJ1Y3Rvcj09PXR9dmFyIG9DMSxUWj1uKCgpPT57S2UoKTtvQzE9Y0J9KTt2YXIgV1Z0LGRCLGZCLHVCLF9aPW4oKCk9PntLZSgpO1RaKCk7V1Z0PTEwLGRCPWNsYXNze3N1YlByaW9yaXR5PTA7dmFsaWRhdGUoZSxhKXtyZXR1cm4hMH19LGZCPWNsYXNzIGV4dGVuZHMgZEJ7Y29uc3RydWN0b3IoZSxhLHIsaSxvKXtzdXBlcigpLHRoaXMudmFsdWU9ZSx0aGlzLnZhbGlkYXRlVmFsdWU9YSx0aGlzLnNldFZhbHVlPXIsdGhpcy5wcmlvcml0eT1pLG8mJih0aGlzLnN1YlByaW9yaXR5PW8pfXZhbGlkYXRlKGUsYSl7cmV0dXJuIHRoaXMudmFsaWRhdGVWYWx1ZShlLHRoaXMudmFsdWUsYSl9c2V0KGUsYSxyKXtyZXR1cm4gdGhpcy5zZXRWYWx1ZShlLGEsdGhpcy52YWx1ZSxyKX19LHVCPWNsYXNzIGV4dGVuZHMgZEJ7cHJpb3JpdHk9V1Z0O3N1YlByaW9yaXR5PS0xO2NvbnN0cnVjdG9yKGUsYSl7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZXx8KHI9PndlKGEscikpfXNldChlLGEpe3JldHVybiBhLnRpbWVzdGFtcElzU2V0P2U6d2UoZSxjQihlLHRoaXMuY29udGV4dCkpfX19KTt2YXIgcWUsSXQ9bigoKT0+e19aKCk7cWU9Y2xhc3N7cnVuKGUsYSxyLGkpe2xldCBvPXRoaXMucGFyc2UoZSxhLHIsaSk7cmV0dXJuIG8/e3NldHRlcjpuZXcgZkIoby52YWx1ZSx0aGlzLnZhbGlkYXRlLHRoaXMuc2V0LHRoaXMucHJpb3JpdHksdGhpcy5zdWJQcmlvcml0eSkscmVzdDpvLnJlc3R9Om51bGx9dmFsaWRhdGUoZSxhLHIpe3JldHVybiEwfX19KTt2YXIgcEIsUUJlPW4oKCk9PntJdCgpO3BCPWNsYXNzIGV4dGVuZHMgcWV7cHJpb3JpdHk9MTQwO3BhcnNlKGUsYSxyKXtzd2l0Y2goYSl7Y2FzZSJHIjpjYXNlIkdHIjpjYXNlIkdHRyI6cmV0dXJuIHIuZXJhKGUse3dpZHRoOiJhYmJyZXZpYXRlZCJ9KXx8ci5lcmEoZSx7d2lkdGg6Im5hcnJvdyJ9KTtjYXNlIkdHR0dHIjpyZXR1cm4gci5lcmEoZSx7d2lkdGg6Im5hcnJvdyJ9KTtkZWZhdWx0OnJldHVybiByLmVyYShlLHt3aWR0aDoid2lkZSJ9KXx8ci5lcmEoZSx7d2lkdGg6ImFiYnJldmlhdGVkIn0pfHxyLmVyYShlLHt3aWR0aDoibmFycm93In0pfX1zZXQoZSxhLHIpe3JldHVybiBhLmVyYT1yLGUuc2V0RnVsbFllYXIociwwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJSIiwidSIsInQiLCJUIl19fSk7dmFyIEV0LHphLHkyPW4oKCk9PntFdD17bW9udGg6L14oMVswLTJdfDA/XGQpLyxkYXRlOi9eKDNbMC0xXXxbMC0yXT9cZCkvLGRheU9mWWVhcjovXigzNlswLTZdfDNbMC01XVxkfFswLTJdP1xkP1xkKS8sd2VlazovXig1WzAtM118WzAtNF0/XGQpLyxob3VyMjNoOi9eKDJbMC0zXXxbMC0xXT9cZCkvLGhvdXIyNGg6L14oMlswLTRdfFswLTFdP1xkKS8saG91cjExaDovXigxWzAtMV18MD9cZCkvLGhvdXIxMmg6L14oMVswLTJdfDA/XGQpLyxtaW51dGU6L15bMC01XT9cZC8sc2Vjb25kOi9eWzAtNV0/XGQvLHNpbmdsZURpZ2l0Oi9eXGQvLHR3b0RpZ2l0czovXlxkezEsMn0vLHRocmVlRGlnaXRzOi9eXGR7MSwzfS8sZm91ckRpZ2l0czovXlxkezEsNH0vLGFueURpZ2l0c1NpZ25lZDovXi0/XGQrLyxzaW5nbGVEaWdpdFNpZ25lZDovXi0/XGQvLHR3b0RpZ2l0c1NpZ25lZDovXi0/XGR7MSwyfS8sdGhyZWVEaWdpdHNTaWduZWQ6L14tP1xkezEsM30vLGZvdXJEaWdpdHNTaWduZWQ6L14tP1xkezEsNH0vfSx6YT17YmFzaWNPcHRpb25hbE1pbnV0ZXM6L14oWystXSkoXGR7Mn0pKFxkezJ9KT98Wi8sYmFzaWM6L14oWystXSkoXGR7Mn0pKFxkezJ9KXxaLyxiYXNpY09wdGlvbmFsU2Vjb25kczovXihbKy1dKShcZHsyfSkoXGR7Mn0pKChcZHsyfSkpP3xaLyxleHRlbmRlZDovXihbKy1dKShcZHsyfSk6KFxkezJ9KXxaLyxleHRlbmRlZE9wdGlvbmFsU2Vjb25kczovXihbKy1dKShcZHsyfSk6KFxkezJ9KSg6KFxkezJ9KSk/fFovfX0pO2Z1bmN0aW9uIFF0KHQsZSl7cmV0dXJuIHQmJnt2YWx1ZTplKHQudmFsdWUpLHJlc3Q6dC5yZXN0fX1mdW5jdGlvbiBfdCh0LGUpe2xldCBhPWUubWF0Y2godCk7cmV0dXJuIGE/e3ZhbHVlOnBhcnNlSW50KGFbMF0sMTApLHJlc3Q6ZS5zbGljZShhWzBdLmxlbmd0aCl9Om51bGx9ZnVuY3Rpb24ga2EodCxlKXtsZXQgYT1lLm1hdGNoKHQpO2lmKCFhKXJldHVybiBudWxsO2lmKGFbMF09PT0iWiIpcmV0dXJue3ZhbHVlOjAscmVzdDplLnNsaWNlKDEpfTtsZXQgcj1hWzFdPT09IisiPzE6LTEsaT1hWzJdP3BhcnNlSW50KGFbMl0sMTApOjAsbz1hWzNdP3BhcnNlSW50KGFbM10sMTApOjAscz1hWzVdP3BhcnNlSW50KGFbNV0sMTApOjA7cmV0dXJue3ZhbHVlOnIqKGkqaWErbypnMitzKkFjKSxyZXN0OmUuc2xpY2UoYVswXS5sZW5ndGgpfX1mdW5jdGlvbiBoQih0KXtyZXR1cm4gX3QoRXQuYW55RGlnaXRzU2lnbmVkLHQpfWZ1bmN0aW9uIHB0KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMTpyZXR1cm4gX3QoRXQuc2luZ2xlRGlnaXQsZSk7Y2FzZSAyOnJldHVybiBfdChFdC50d29EaWdpdHMsZSk7Y2FzZSAzOnJldHVybiBfdChFdC50aHJlZURpZ2l0cyxlKTtjYXNlIDQ6cmV0dXJuIF90KEV0LmZvdXJEaWdpdHMsZSk7ZGVmYXVsdDpyZXR1cm4gX3QobmV3IFJlZ0V4cCgiXlxcZHsxLCIrdCsifSIpLGUpfX1mdW5jdGlvbiBYYyh0LGUpe3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIF90KEV0LnNpbmdsZURpZ2l0U2lnbmVkLGUpO2Nhc2UgMjpyZXR1cm4gX3QoRXQudHdvRGlnaXRzU2lnbmVkLGUpO2Nhc2UgMzpyZXR1cm4gX3QoRXQudGhyZWVEaWdpdHNTaWduZWQsZSk7Y2FzZSA0OnJldHVybiBfdChFdC5mb3VyRGlnaXRzU2lnbmVkLGUpO2RlZmF1bHQ6cmV0dXJuIF90KG5ldyBSZWdFeHAoIl4tP1xcZHsxLCIrdCsifSIpLGUpfX1mdW5jdGlvbiBRYyh0KXtzd2l0Y2godCl7Y2FzZSJtb3JuaW5nIjpyZXR1cm4gNDtjYXNlImV2ZW5pbmciOnJldHVybiAxNztjYXNlInBtIjpjYXNlIm5vb24iOmNhc2UiYWZ0ZXJub29uIjpyZXR1cm4gMTI7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gbUIodCxlKXtsZXQgYT1lPjAscj1hP2U6MS1lLGk7aWYocjw9NTApaT10fHwxMDA7ZWxzZXtsZXQgbz1yKzUwLHM9TWF0aC50cnVuYyhvLzEwMCkqMTAwLGw9dD49byUxMDA7aT10K3MtKGw/MTAwOjApfXJldHVybiBhP2k6MS1pfWZ1bmN0aW9uIGdCKHQpe3JldHVybiB0JTQwMD09PTB8fHQlND09PTAmJnQlMTAwIT09MH12YXIganQ9bigoKT0+e2d0KCk7eTIoKX0pO3ZhciB4QixLQmU9bigoKT0+e0l0KCk7anQoKTt4Qj1jbGFzcyBleHRlbmRzIHFle3ByaW9yaXR5PTEzMDtpbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsInUiLCJ3IiwiSSIsImkiLCJlIiwiYyIsInQiLCJUIl07cGFyc2UoZSxhLHIpe2xldCBpPW89Pih7eWVhcjpvLGlzVHdvRGlnaXRZZWFyOmE9PT0ieXkifSk7c3dpdGNoKGEpe2Nhc2UieSI6cmV0dXJuIFF0KHB0KDQsZSksaSk7Y2FzZSJ5byI6cmV0dXJuIFF0KHIub3JkaW5hbE51bWJlcihlLHt1bml0OiJ5ZWFyIn0pLGkpO2RlZmF1bHQ6cmV0dXJuIFF0KHB0KGEubGVuZ3RoLGUpLGkpfX12YWxpZGF0ZShlLGEpe3JldHVybiBhLmlzVHdvRGlnaXRZZWFyfHxhLnllYXI+MH1zZXQoZSxhLHIpe2xldCBpPWUuZ2V0RnVsbFllYXIoKTtpZihyLmlzVHdvRGlnaXRZZWFyKXtsZXQgcz1tQihyLnllYXIsaSk7cmV0dXJuIGUuc2V0RnVsbFllYXIocywwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1sZXQgbz0hKCJlcmEiaW4gYSl8fGEuZXJhPT09MT9yLnllYXI6MS1yLnllYXI7cmV0dXJuIGUuc2V0RnVsbFllYXIobywwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX19fSk7dmFyIGJCLEpCZT1uKCgpPT57ZjgoKTtVYSgpO0l0KCk7anQoKTtiQj1jbGFzcyBleHRlbmRzIHFle3ByaW9yaXR5PTEzMDtwYXJzZShlLGEscil7bGV0IGk9bz0+KHt5ZWFyOm8saXNUd29EaWdpdFllYXI6YT09PSJZWSJ9KTtzd2l0Y2goYSl7Y2FzZSJZIjpyZXR1cm4gUXQocHQoNCxlKSxpKTtjYXNlIllvIjpyZXR1cm4gUXQoci5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6InllYXIifSksaSk7ZGVmYXVsdDpyZXR1cm4gUXQocHQoYS5sZW5ndGgsZSksaSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGEuaXNUd29EaWdpdFllYXJ8fGEueWVhcj4wfXNldChlLGEscixpKXtsZXQgbz15byhlLGkpO2lmKHIuaXNUd29EaWdpdFllYXIpe2xldCBsPW1CKHIueWVhcixvKTtyZXR1cm4gZS5zZXRGdWxsWWVhcihsLDAsaS5maXJzdFdlZWtDb250YWluc0RhdGUpLGUuc2V0SG91cnMoMCwwLDAsMCksYTEoZSxpKX1sZXQgcz0hKCJlcmEiaW4gYSl8fGEuZXJhPT09MT9yLnllYXI6MS1yLnllYXI7cmV0dXJuIGUuc2V0RnVsbFllYXIocywwLGkuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSxlLnNldEhvdXJzKDAsMCwwLDApLGExKGUsaSl9aW5jb21wYXRpYmxlVG9rZW5zPVsieSIsIlIiLCJ1IiwiUSIsInEiLCJNIiwiTCIsIkkiLCJkIiwiRCIsImkiLCJ0IiwiVCJdfX0pO3ZhciB2QixlUmU9bigoKT0+e3pyKCk7S2UoKTtJdCgpO2p0KCk7dkI9Y2xhc3MgZXh0ZW5kcyBxZXtwcmlvcml0eT0xMzA7cGFyc2UoZSxhKXtyZXR1cm4gYT09PSJSIj9YYyg0LGUpOlhjKGEubGVuZ3RoLGUpfXNldChlLGEscil7bGV0IGk9d2UoZSwwKTtyZXR1cm4gaS5zZXRGdWxsWWVhcihyLDAsNCksaS5zZXRIb3VycygwLDAsMCwwKSxBMShpKX1pbmNvbXBhdGlibGVUb2tlbnM9WyJHIiwieSIsIlkiLCJ1IiwiUSIsInEiLCJNIiwiTCIsInciLCJkIiwiRCIsImUiLCJjIiwidCIsIlQiXX19KTt2YXIgeUIsdFJlPW4oKCk9PntJdCgpO2p0KCk7eUI9Y2xhc3MgZXh0ZW5kcyBxZXtwcmlvcml0eT0xMzA7cGFyc2UoZSxhKXtyZXR1cm4gYT09PSJ1Ij9YYyg0LGUpOlhjKGEubGVuZ3RoLGUpfXNldChlLGEscil7cmV0dXJuIGUuc2V0RnVsbFllYXIociwwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJHIiwieSIsIlkiLCJSIiwidyIsIkkiLCJpIiwiZSIsImMiLCJ0IiwiVCJdfX0pO3ZhciB3QixhUmU9bigoKT0+e0l0KCk7anQoKTt3Qj1jbGFzcyBleHRlbmRzIHFle3ByaW9yaXR5PTEyMDtwYXJzZShlLGEscil7c3dpdGNoKGEpe2Nhc2UiUSI6Y2FzZSJRUSI6cmV0dXJuIHB0KGEubGVuZ3RoLGUpO2Nhc2UiUW8iOnJldHVybiByLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoicXVhcnRlciJ9KTtjYXNlIlFRUSI6cmV0dXJuIHIucXVhcnRlcihlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIucXVhcnRlcihlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiUVFRUVEiOnJldHVybiByLnF1YXJ0ZXIoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiByLnF1YXJ0ZXIoZSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIucXVhcnRlcihlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIucXVhcnRlcihlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfX12YWxpZGF0ZShlLGEpe3JldHVybiBhPj0xJiZhPD00fXNldChlLGEscil7cmV0dXJuIGUuc2V0TW9udGgoKHItMSkqMywxKSxlLnNldEhvdXJzKDAsMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiWSIsIlIiLCJxIiwiTSIsIkwiLCJ3IiwiSSIsImQiLCJEIiwiaSIsImUiLCJjIiwidCIsIlQiXX19KTt2YXIgTUIsclJlPW4oKCk9PntJdCgpO2p0KCk7TUI9Y2xhc3MgZXh0ZW5kcyBxZXtwcmlvcml0eT0xMjA7cGFyc2UoZSxhLHIpe3N3aXRjaChhKXtjYXNlInEiOmNhc2UicXEiOnJldHVybiBwdChhLmxlbmd0aCxlKTtjYXNlInFvIjpyZXR1cm4gci5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6InF1YXJ0ZXIifSk7Y2FzZSJxcXEiOnJldHVybiByLnF1YXJ0ZXIoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxyLnF1YXJ0ZXIoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoic3RhbmRhbG9uZSJ9KTtjYXNlInFxcXFxIjpyZXR1cm4gci5xdWFydGVyKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7ZGVmYXVsdDpyZXR1cm4gci5xdWFydGVyKGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxyLnF1YXJ0ZXIoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxyLnF1YXJ0ZXIoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoic3RhbmRhbG9uZSJ9KX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYT49MSYmYTw9NH1zZXQoZSxhLHIpe3JldHVybiBlLnNldE1vbnRoKChyLTEpKjMsMSksZS5zZXRIb3VycygwLDAsMCwwKSxlfWluY29tcGF0aWJsZVRva2Vucz1bIlkiLCJSIiwiUSIsIk0iLCJMIiwidyIsIkkiLCJkIiwiRCIsImkiLCJlIiwiYyIsInQiLCJUIl19fSk7dmFyIHpCLGlSZT1uKCgpPT57eTIoKTtJdCgpO2p0KCk7ekI9Y2xhc3MgZXh0ZW5kcyBxZXtpbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsInEiLCJRIiwiTCIsInciLCJJIiwiRCIsImkiLCJlIiwiYyIsInQiLCJUIl07cHJpb3JpdHk9MTEwO3BhcnNlKGUsYSxyKXtsZXQgaT1vPT5vLTE7c3dpdGNoKGEpe2Nhc2UiTSI6cmV0dXJuIFF0KF90KEV0Lm1vbnRoLGUpLGkpO2Nhc2UiTU0iOnJldHVybiBRdChwdCgyLGUpLGkpO2Nhc2UiTW8iOnJldHVybiBRdChyLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoibW9udGgifSksaSk7Y2FzZSJNTU0iOnJldHVybiByLm1vbnRoKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8ci5tb250aChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiTU1NTU0iOnJldHVybiByLm1vbnRoKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gci5tb250aChlLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8ci5tb250aChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIubW9udGgoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYT49MCYmYTw9MTF9c2V0KGUsYSxyKXtyZXR1cm4gZS5zZXRNb250aChyLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX19fSk7dmFyIGtCLG9SZT1uKCgpPT57eTIoKTtJdCgpO2p0KCk7a0I9Y2xhc3MgZXh0ZW5kcyBxZXtwcmlvcml0eT0xMTA7cGFyc2UoZSxhLHIpe2xldCBpPW89Pm8tMTtzd2l0Y2goYSl7Y2FzZSJMIjpyZXR1cm4gUXQoX3QoRXQubW9udGgsZSksaSk7Y2FzZSJMTCI6cmV0dXJuIFF0KHB0KDIsZSksaSk7Y2FzZSJMbyI6cmV0dXJuIFF0KHIub3JkaW5hbE51bWJlcihlLHt1bml0OiJtb250aCJ9KSxpKTtjYXNlIkxMTCI6cmV0dXJuIHIubW9udGgoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxyLm1vbnRoKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJMTExMTCI6cmV0dXJuIHIubW9udGgoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoic3RhbmRhbG9uZSJ9KTtkZWZhdWx0OnJldHVybiByLm1vbnRoKGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxyLm1vbnRoKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8ci5tb250aChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pfX12YWxpZGF0ZShlLGEpe3JldHVybiBhPj0wJiZhPD0xMX1zZXQoZSxhLHIpe3JldHVybiBlLnNldE1vbnRoKHIsMSksZS5zZXRIb3VycygwLDAsMCwwKSxlfWluY29tcGF0aWJsZVRva2Vucz1bIlkiLCJSIiwicSIsIlEiLCJNIiwidyIsIkkiLCJEIiwiaSIsImUiLCJjIiwidCIsIlQiXX19KTtmdW5jdGlvbiBTQih0LGUsYSl7bGV0IHI9ZWUodCxhPy5pbiksaT1ZYyhyLGEpLWU7cmV0dXJuIHIuc2V0RGF0ZShyLmdldERhdGUoKS1pKjcpLGVlKHIsYT8uaW4pfXZhciBYQzEsQVo9bigoKT0+e0tPKCk7TWUoKTtYQzE9U0J9KTt2YXIgQ0Isc1JlPW4oKCk9PntBWigpO1VhKCk7eTIoKTtJdCgpO2p0KCk7Q0I9Y2xhc3MgZXh0ZW5kcyBxZXtwcmlvcml0eT0xMDA7cGFyc2UoZSxhLHIpe3N3aXRjaChhKXtjYXNlInciOnJldHVybiBfdChFdC53ZWVrLGUpO2Nhc2Uid28iOnJldHVybiByLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoid2VlayJ9KTtkZWZhdWx0OnJldHVybiBwdChhLmxlbmd0aCxlKX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYT49MSYmYTw9NTN9c2V0KGUsYSxyLGkpe3JldHVybiBhMShTQihlLHIsaSksaSl9aW5jb21wYXRpYmxlVG9rZW5zPVsieSIsIlIiLCJ1IiwicSIsIlEiLCJNIiwiTCIsIkkiLCJkIiwiRCIsImkiLCJ0IiwiVCJdfX0pO2Z1bmN0aW9uIExCKHQsZSxhKXtsZXQgcj1lZSh0LGE/LmluKSxpPUdjKHIsYSktZTtyZXR1cm4gci5zZXREYXRlKHIuZ2V0RGF0ZSgpLWkqNykscn12YXIgc0wxLCRaPW4oKCk9PntYTygpO01lKCk7c0wxPUxCfSk7dmFyIFRCLG5SZT1uKCgpPT57JFooKTt6cigpO3kyKCk7SXQoKTtqdCgpO1RCPWNsYXNzIGV4dGVuZHMgcWV7cHJpb3JpdHk9MTAwO3BhcnNlKGUsYSxyKXtzd2l0Y2goYSl7Y2FzZSJJIjpyZXR1cm4gX3QoRXQud2VlayxlKTtjYXNlIklvIjpyZXR1cm4gci5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6IndlZWsifSk7ZGVmYXVsdDpyZXR1cm4gcHQoYS5sZW5ndGgsZSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTEmJmE8PTUzfXNldChlLGEscil7cmV0dXJuIEExKExCKGUscikpfWluY29tcGF0aWJsZVRva2Vucz1bInkiLCJZIiwidSIsInEiLCJRIiwiTSIsIkwiLCJ3IiwiZCIsIkQiLCJlIiwiYyIsInQiLCJUIl19fSk7dmFyIEdWdCxZVnQsX0IsbFJlPW4oKCk9Pnt5MigpO0l0KCk7anQoKTtHVnQ9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxZVnQ9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxfQj1jbGFzcyBleHRlbmRzIHFle3ByaW9yaXR5PTkwO3N1YlByaW9yaXR5PTE7cGFyc2UoZSxhLHIpe3N3aXRjaChhKXtjYXNlImQiOnJldHVybiBfdChFdC5kYXRlLGUpO2Nhc2UiZG8iOnJldHVybiByLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoiZGF0ZSJ9KTtkZWZhdWx0OnJldHVybiBwdChhLmxlbmd0aCxlKX19dmFsaWRhdGUoZSxhKXtsZXQgcj1lLmdldEZ1bGxZZWFyKCksaT1nQihyKSxvPWUuZ2V0TW9udGgoKTtyZXR1cm4gaT9hPj0xJiZhPD1ZVnRbb106YT49MSYmYTw9R1Z0W29dfXNldChlLGEscil7cmV0dXJuIGUuc2V0RGF0ZShyKSxlLnNldEhvdXJzKDAsMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiWSIsIlIiLCJxIiwiUSIsInciLCJJIiwiRCIsImkiLCJlIiwiYyIsInQiLCJUIl19fSk7dmFyIEFCLGNSZT1uKCgpPT57eTIoKTtJdCgpO2p0KCk7QUI9Y2xhc3MgZXh0ZW5kcyBxZXtwcmlvcml0eT05MDtzdWJwcmlvcml0eT0xO3BhcnNlKGUsYSxyKXtzd2l0Y2goYSl7Y2FzZSJEIjpjYXNlIkREIjpyZXR1cm4gX3QoRXQuZGF5T2ZZZWFyLGUpO2Nhc2UiRG8iOnJldHVybiByLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoiZGF0ZSJ9KTtkZWZhdWx0OnJldHVybiBwdChhLmxlbmd0aCxlKX19dmFsaWRhdGUoZSxhKXtsZXQgcj1lLmdldEZ1bGxZZWFyKCk7cmV0dXJuIGdCKHIpP2E+PTEmJmE8PTM2NjphPj0xJiZhPD0zNjV9c2V0KGUsYSxyKXtyZXR1cm4gZS5zZXRNb250aCgwLHIpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsInEiLCJRIiwiTSIsIkwiLCJ3IiwiSSIsImQiLCJFIiwiaSIsImUiLCJjIiwidCIsIlQiXX19KTtmdW5jdGlvbiB6byh0LGUsYSl7bGV0IHI9VXQoKSxpPWE/LndlZWtTdGFydHNPbj8/YT8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/P3Iud2Vla1N0YXJ0c09uPz9yLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz8wLG89ZWUodCxhPy5pbikscz1vLmdldERheSgpLGY9KGUlNys3KSU3LGM9Ny1pLHU9ZTwwfHxlPjY/ZS0ocytjKSU3OihmK2MpJTctKHMrYyklNztyZXR1cm4gRjEobyx1LGEpfXZhciBTTDEsZzg9bigoKT0+e3gyKCk7eXIoKTtNZSgpO1NMMT16b30pO3ZhciAkQixkUmU9bigoKT0+e2c4KCk7SXQoKTskQj1jbGFzcyBleHRlbmRzIHFle3ByaW9yaXR5PTkwO3BhcnNlKGUsYSxyKXtzd2l0Y2goYSl7Y2FzZSJFIjpjYXNlIkVFIjpjYXNlIkVFRSI6cmV0dXJuIHIuZGF5KGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8ci5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiRUVFRUUiOnJldHVybiByLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiRUVFRUVFIjpyZXR1cm4gci5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIHIuZGF5KGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheShlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIuZGF5KGUse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8ci5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYT49MCYmYTw9Nn1zZXQoZSxhLHIsaSl7cmV0dXJuIGU9em8oZSxyLGkpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJEIiwiaSIsImUiLCJjIiwidCIsIlQiXX19KTt2YXIgREIsZlJlPW4oKCk9PntnOCgpO0l0KCk7anQoKTtEQj1jbGFzcyBleHRlbmRzIHFle3ByaW9yaXR5PTkwO3BhcnNlKGUsYSxyLGkpe2xldCBvPXM9PntsZXQgbD1NYXRoLmZsb29yKChzLTEpLzcpKjc7cmV0dXJuKHMraS53ZWVrU3RhcnRzT24rNiklNytsfTtzd2l0Y2goYSl7Y2FzZSJlIjpjYXNlImVlIjpyZXR1cm4gUXQocHQoYS5sZW5ndGgsZSksbyk7Y2FzZSJlbyI6cmV0dXJuIFF0KHIub3JkaW5hbE51bWJlcihlLHt1bml0OiJkYXkifSksbyk7Y2FzZSJlZWUiOnJldHVybiByLmRheShlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIuZGF5KGUse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8ci5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImVlZWVlIjpyZXR1cm4gci5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImVlZWVlZSI6cmV0dXJuIHIuZGF5KGUse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8ci5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiByLmRheShlLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8ci5kYXkoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheShlLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIuZGF5KGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTAmJmE8PTZ9c2V0KGUsYSxyLGkpe3JldHVybiBlPXpvKGUscixpKSxlLnNldEhvdXJzKDAsMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsieSIsIlIiLCJ1IiwicSIsIlEiLCJNIiwiTCIsIkkiLCJkIiwiRCIsIkUiLCJpIiwiYyIsInQiLCJUIl19fSk7dmFyIEVCLHVSZT1uKCgpPT57ZzgoKTtJdCgpO2p0KCk7RUI9Y2xhc3MgZXh0ZW5kcyBxZXtwcmlvcml0eT05MDtwYXJzZShlLGEscixpKXtsZXQgbz1zPT57bGV0IGw9TWF0aC5mbG9vcigocy0xKS83KSo3O3JldHVybihzK2kud2Vla1N0YXJ0c09uKzYpJTcrbH07c3dpdGNoKGEpe2Nhc2UiYyI6Y2FzZSJjYyI6cmV0dXJuIFF0KHB0KGEubGVuZ3RoLGUpLG8pO2Nhc2UiY28iOnJldHVybiBRdChyLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoiZGF5In0pLG8pO2Nhc2UiY2NjIjpyZXR1cm4gci5kYXkoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxyLmRheShlLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl8fHIuZGF5KGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJjY2NjYyI6cmV0dXJuIHIuZGF5KGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJjY2NjY2MiOnJldHVybiByLmRheShlLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl8fHIuZGF5KGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7ZGVmYXVsdDpyZXR1cm4gci5kYXkoZSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl8fHIuZGF5KGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8ci5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxyLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pfX12YWxpZGF0ZShlLGEpe3JldHVybiBhPj0wJiZhPD02fXNldChlLGEscixpKXtyZXR1cm4gZT16byhlLHIsaSksZS5zZXRIb3VycygwLDAsMCwwKSxlfWluY29tcGF0aWJsZVRva2Vucz1bInkiLCJSIiwidSIsInEiLCJRIiwiTSIsIkwiLCJJIiwiZCIsIkQiLCJFIiwiaSIsImUiLCJ0IiwiVCJdfX0pO2Z1bmN0aW9uIE5CKHQsZSxhKXtsZXQgcj1lZSh0LGE/LmluKSxpPW5CKHIsYSksbz1lLWk7cmV0dXJuIEYxKHIsbyxhKX12YXIgSEwxLERaPW4oKCk9Pnt5cigpO0NaKCk7TWUoKTtITDE9TkJ9KTt2YXIgUEIscFJlPW4oKCk9PntEWigpO0l0KCk7anQoKTtQQj1jbGFzcyBleHRlbmRzIHFle3ByaW9yaXR5PTkwO3BhcnNlKGUsYSxyKXtsZXQgaT1vPT5vPT09MD83Om87c3dpdGNoKGEpe2Nhc2UiaSI6Y2FzZSJpaSI6cmV0dXJuIHB0KGEubGVuZ3RoLGUpO2Nhc2UiaW8iOnJldHVybiByLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoiZGF5In0pO2Nhc2UiaWlpIjpyZXR1cm4gUXQoci5kYXkoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheShlLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIuZGF5KGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSksaSk7Y2FzZSJpaWlpaSI6cmV0dXJuIFF0KHIuZGF5KGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSksaSk7Y2FzZSJpaWlpaWkiOnJldHVybiBRdChyLmRheShlLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIuZGF5KGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSksaSk7ZGVmYXVsdDpyZXR1cm4gUXQoci5kYXkoZSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIuZGF5KGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8ci5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pLGkpfX12YWxpZGF0ZShlLGEpe3JldHVybiBhPj0xJiZhPD03fXNldChlLGEscil7cmV0dXJuIGU9TkIoZSxyKSxlLnNldEhvdXJzKDAsMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsieSIsIlkiLCJ1IiwicSIsIlEiLCJNIiwiTCIsInciLCJkIiwiRCIsIkUiLCJlIiwiYyIsInQiLCJUIl19fSk7dmFyIElCLGhSZT1uKCgpPT57SXQoKTtqdCgpO0lCPWNsYXNzIGV4dGVuZHMgcWV7cHJpb3JpdHk9ODA7cGFyc2UoZSxhLHIpe3N3aXRjaChhKXtjYXNlImEiOmNhc2UiYWEiOmNhc2UiYWFhIjpyZXR1cm4gci5kYXlQZXJpb2QoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheVBlcmlvZChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiYWFhYWEiOnJldHVybiByLmRheVBlcmlvZChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIHIuZGF5UGVyaW9kKGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheVBlcmlvZChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIuZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fXNldChlLGEscil7cmV0dXJuIGUuc2V0SG91cnMoUWMociksMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiYiIsIkIiLCJIIiwiayIsInQiLCJUIl19fSk7dmFyIEZCLG1SZT1uKCgpPT57SXQoKTtqdCgpO0ZCPWNsYXNzIGV4dGVuZHMgcWV7cHJpb3JpdHk9ODA7cGFyc2UoZSxhLHIpe3N3aXRjaChhKXtjYXNlImIiOmNhc2UiYmIiOmNhc2UiYmJiIjpyZXR1cm4gci5kYXlQZXJpb2QoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheVBlcmlvZChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiYmJiYmIiOnJldHVybiByLmRheVBlcmlvZChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIHIuZGF5UGVyaW9kKGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheVBlcmlvZChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIuZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fXNldChlLGEscil7cmV0dXJuIGUuc2V0SG91cnMoUWMociksMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiYSIsIkIiLCJIIiwiayIsInQiLCJUIl19fSk7dmFyIE9CLGdSZT1uKCgpPT57SXQoKTtqdCgpO09CPWNsYXNzIGV4dGVuZHMgcWV7cHJpb3JpdHk9ODA7cGFyc2UoZSxhLHIpe3N3aXRjaChhKXtjYXNlIkIiOmNhc2UiQkIiOmNhc2UiQkJCIjpyZXR1cm4gci5kYXlQZXJpb2QoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheVBlcmlvZChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiQkJCQkIiOnJldHVybiByLmRheVBlcmlvZChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIHIuZGF5UGVyaW9kKGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxyLmRheVBlcmlvZChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fHIuZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fXNldChlLGEscil7cmV0dXJuIGUuc2V0SG91cnMoUWMociksMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiYSIsImIiLCJ0IiwiVCJdfX0pO3ZhciBCQix4UmU9bigoKT0+e3kyKCk7SXQoKTtqdCgpO0JCPWNsYXNzIGV4dGVuZHMgcWV7cHJpb3JpdHk9NzA7cGFyc2UoZSxhLHIpe3N3aXRjaChhKXtjYXNlImgiOnJldHVybiBfdChFdC5ob3VyMTJoLGUpO2Nhc2UiaG8iOnJldHVybiByLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoiaG91ciJ9KTtkZWZhdWx0OnJldHVybiBwdChhLmxlbmd0aCxlKX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYT49MSYmYTw9MTJ9c2V0KGUsYSxyKXtsZXQgaT1lLmdldEhvdXJzKCk+PTEyO3JldHVybiBpJiZyPDEyP2Uuc2V0SG91cnMocisxMiwwLDAsMCk6IWkmJnI9PT0xMj9lLnNldEhvdXJzKDAsMCwwLDApOmUuc2V0SG91cnMociwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJIIiwiSyIsImsiLCJ0IiwiVCJdfX0pO3ZhciBSQixiUmU9bigoKT0+e3kyKCk7SXQoKTtqdCgpO1JCPWNsYXNzIGV4dGVuZHMgcWV7cHJpb3JpdHk9NzA7cGFyc2UoZSxhLHIpe3N3aXRjaChhKXtjYXNlIkgiOnJldHVybiBfdChFdC5ob3VyMjNoLGUpO2Nhc2UiSG8iOnJldHVybiByLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoiaG91ciJ9KTtkZWZhdWx0OnJldHVybiBwdChhLmxlbmd0aCxlKX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYT49MCYmYTw9MjN9c2V0KGUsYSxyKXtyZXR1cm4gZS5zZXRIb3VycyhyLDAsMCwwKSxlfWluY29tcGF0aWJsZVRva2Vucz1bImEiLCJiIiwiaCIsIksiLCJrIiwidCIsIlQiXX19KTt2YXIgSEIsdlJlPW4oKCk9Pnt5MigpO0l0KCk7anQoKTtIQj1jbGFzcyBleHRlbmRzIHFle3ByaW9yaXR5PTcwO3BhcnNlKGUsYSxyKXtzd2l0Y2goYSl7Y2FzZSJLIjpyZXR1cm4gX3QoRXQuaG91cjExaCxlKTtjYXNlIktvIjpyZXR1cm4gci5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImhvdXIifSk7ZGVmYXVsdDpyZXR1cm4gcHQoYS5sZW5ndGgsZSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTAmJmE8PTExfXNldChlLGEscil7cmV0dXJuIGUuZ2V0SG91cnMoKT49MTImJnI8MTI/ZS5zZXRIb3VycyhyKzEyLDAsMCwwKTplLnNldEhvdXJzKHIsMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiaCIsIkgiLCJrIiwidCIsIlQiXX19KTt2YXIgcUIseVJlPW4oKCk9Pnt5MigpO0l0KCk7anQoKTtxQj1jbGFzcyBleHRlbmRzIHFle3ByaW9yaXR5PTcwO3BhcnNlKGUsYSxyKXtzd2l0Y2goYSl7Y2FzZSJrIjpyZXR1cm4gX3QoRXQuaG91cjI0aCxlKTtjYXNlImtvIjpyZXR1cm4gci5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImhvdXIifSk7ZGVmYXVsdDpyZXR1cm4gcHQoYS5sZW5ndGgsZSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTEmJmE8PTI0fXNldChlLGEscil7bGV0IGk9cjw9MjQ/ciUyNDpyO3JldHVybiBlLnNldEhvdXJzKGksMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiYSIsImIiLCJoIiwiSCIsIksiLCJ0IiwiVCJdfX0pO3ZhciBWQix3UmU9bigoKT0+e3kyKCk7SXQoKTtqdCgpO1ZCPWNsYXNzIGV4dGVuZHMgcWV7cHJpb3JpdHk9NjA7cGFyc2UoZSxhLHIpe3N3aXRjaChhKXtjYXNlIm0iOnJldHVybiBfdChFdC5taW51dGUsZSk7Y2FzZSJtbyI6cmV0dXJuIHIub3JkaW5hbE51bWJlcihlLHt1bml0OiJtaW51dGUifSk7ZGVmYXVsdDpyZXR1cm4gcHQoYS5sZW5ndGgsZSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTAmJmE8PTU5fXNldChlLGEscil7cmV0dXJuIGUuc2V0TWludXRlcyhyLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJ0IiwiVCJdfX0pO3ZhciBVQixNUmU9bigoKT0+e3kyKCk7SXQoKTtqdCgpO1VCPWNsYXNzIGV4dGVuZHMgcWV7cHJpb3JpdHk9NTA7cGFyc2UoZSxhLHIpe3N3aXRjaChhKXtjYXNlInMiOnJldHVybiBfdChFdC5zZWNvbmQsZSk7Y2FzZSJzbyI6cmV0dXJuIHIub3JkaW5hbE51bWJlcihlLHt1bml0OiJzZWNvbmQifSk7ZGVmYXVsdDpyZXR1cm4gcHQoYS5sZW5ndGgsZSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTAmJmE8PTU5fXNldChlLGEscil7cmV0dXJuIGUuc2V0U2Vjb25kcyhyLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsidCIsIlQiXX19KTt2YXIgakIselJlPW4oKCk9PntJdCgpO2p0KCk7akI9Y2xhc3MgZXh0ZW5kcyBxZXtwcmlvcml0eT0zMDtwYXJzZShlLGEpe2xldCByPWk9Pk1hdGgudHJ1bmMoaSpNYXRoLnBvdygxMCwtYS5sZW5ndGgrMykpO3JldHVybiBRdChwdChhLmxlbmd0aCxlKSxyKX1zZXQoZSxhLHIpe3JldHVybiBlLnNldE1pbGxpc2Vjb25kcyhyKSxlfWluY29tcGF0aWJsZVRva2Vucz1bInQiLCJUIl19fSk7dmFyIFdCLGtSZT1uKCgpPT57S2UoKTtuaSgpO3kyKCk7SXQoKTtqdCgpO1dCPWNsYXNzIGV4dGVuZHMgcWV7cHJpb3JpdHk9MTA7cGFyc2UoZSxhKXtzd2l0Y2goYSl7Y2FzZSJYIjpyZXR1cm4ga2EoemEuYmFzaWNPcHRpb25hbE1pbnV0ZXMsZSk7Y2FzZSJYWCI6cmV0dXJuIGthKHphLmJhc2ljLGUpO2Nhc2UiWFhYWCI6cmV0dXJuIGthKHphLmJhc2ljT3B0aW9uYWxTZWNvbmRzLGUpO2Nhc2UiWFhYWFgiOnJldHVybiBrYSh6YS5leHRlbmRlZE9wdGlvbmFsU2Vjb25kcyxlKTtkZWZhdWx0OnJldHVybiBrYSh6YS5leHRlbmRlZCxlKX19c2V0KGUsYSxyKXtyZXR1cm4gYS50aW1lc3RhbXBJc1NldD9lOndlKGUsZS5nZXRUaW1lKCktYjEoZSktcil9aW5jb21wYXRpYmxlVG9rZW5zPVsidCIsIlQiLCJ4Il19fSk7dmFyIEdCLFNSZT1uKCgpPT57S2UoKTtuaSgpO3kyKCk7SXQoKTtqdCgpO0dCPWNsYXNzIGV4dGVuZHMgcWV7cHJpb3JpdHk9MTA7cGFyc2UoZSxhKXtzd2l0Y2goYSl7Y2FzZSJ4IjpyZXR1cm4ga2EoemEuYmFzaWNPcHRpb25hbE1pbnV0ZXMsZSk7Y2FzZSJ4eCI6cmV0dXJuIGthKHphLmJhc2ljLGUpO2Nhc2UieHh4eCI6cmV0dXJuIGthKHphLmJhc2ljT3B0aW9uYWxTZWNvbmRzLGUpO2Nhc2UieHh4eHgiOnJldHVybiBrYSh6YS5leHRlbmRlZE9wdGlvbmFsU2Vjb25kcyxlKTtkZWZhdWx0OnJldHVybiBrYSh6YS5leHRlbmRlZCxlKX19c2V0KGUsYSxyKXtyZXR1cm4gYS50aW1lc3RhbXBJc1NldD9lOndlKGUsZS5nZXRUaW1lKCktYjEoZSktcil9aW5jb21wYXRpYmxlVG9rZW5zPVsidCIsIlQiLCJYIl19fSk7dmFyIFlCLENSZT1uKCgpPT57S2UoKTtJdCgpO2p0KCk7WUI9Y2xhc3MgZXh0ZW5kcyBxZXtwcmlvcml0eT00MDtwYXJzZShlKXtyZXR1cm4gaEIoZSl9c2V0KGUsYSxyKXtyZXR1cm5bd2UoZSxyKjFlMykse3RpbWVzdGFtcElzU2V0OiEwfV19aW5jb21wYXRpYmxlVG9rZW5zPSIqIn19KTt2YXIgWkIsTFJlPW4oKCk9PntLZSgpO0l0KCk7anQoKTtaQj1jbGFzcyBleHRlbmRzIHFle3ByaW9yaXR5PTIwO3BhcnNlKGUpe3JldHVybiBoQihlKX1zZXQoZSxhLHIpe3JldHVyblt3ZShlLHIpLHt0aW1lc3RhbXBJc1NldDohMH1dfWluY29tcGF0aWJsZVRva2Vucz0iKiJ9fSk7dmFyIFhCLFRSZT1uKCgpPT57UUJlKCk7S0JlKCk7SkJlKCk7ZVJlKCk7dFJlKCk7YVJlKCk7clJlKCk7aVJlKCk7b1JlKCk7c1JlKCk7blJlKCk7bFJlKCk7Y1JlKCk7ZFJlKCk7ZlJlKCk7dVJlKCk7cFJlKCk7aFJlKCk7bVJlKCk7Z1JlKCk7eFJlKCk7YlJlKCk7dlJlKCk7eVJlKCk7d1JlKCk7TVJlKCk7elJlKCk7a1JlKCk7U1JlKCk7Q1JlKCk7TFJlKCk7WEI9e0c6bmV3IHBCLHk6bmV3IHhCLFk6bmV3IGJCLFI6bmV3IHZCLHU6bmV3IHlCLFE6bmV3IHdCLHE6bmV3IE1CLE06bmV3IHpCLEw6bmV3IGtCLHc6bmV3IENCLEk6bmV3IFRCLGQ6bmV3IF9CLEQ6bmV3IEFCLEU6bmV3ICRCLGU6bmV3IERCLGM6bmV3IEVCLGk6bmV3IFBCLGE6bmV3IElCLGI6bmV3IEZCLEI6bmV3IE9CLGg6bmV3IEJCLEg6bmV3IFJCLEs6bmV3IEhCLGs6bmV3IHFCLG06bmV3IFZCLHM6bmV3IFVCLFM6bmV3IGpCLFg6bmV3IFdCLHg6bmV3IEdCLHQ6bmV3IFlCLFQ6bmV3IFpCfX0pO2Z1bmN0aW9uIFFCKHQsZSxhLHIpe2xldCBpPSgpPT53ZShyPy5pbnx8YSxOYU4pLG89c0IoKSxzPXI/LmxvY2FsZT8/by5sb2NhbGU/P0syLGw9cj8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9yPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/by5maXJzdFdlZWtDb250YWluc0RhdGU/P28ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGU/PzEsZj1yPy53ZWVrU3RhcnRzT24/P3I/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz9vLndlZWtTdGFydHNPbj8/by5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/MDtpZighZSlyZXR1cm4gdD9pKCk6ZWUoYSxyPy5pbik7bGV0IGM9e2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZTpsLHdlZWtTdGFydHNPbjpmLGxvY2FsZTpzfSx1PVtuZXcgdUIocj8uaW4sYSldLGQ9ZS5tYXRjaChYVnQpLm1hcChtPT57bGV0IHY9bVswXTtpZih2IGluIHdvKXtsZXQgeT13b1t2XTtyZXR1cm4geShtLHMuZm9ybWF0TG9uZyl9cmV0dXJuIG19KS5qb2luKCIiKS5tYXRjaChaVnQpLGg9W107Zm9yKGxldCBtIG9mIGQpeyFyPy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMmJmVCKG0pJiZwOChtLGUsdCksIXI/LnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMmJkpPKG0pJiZwOChtLGUsdCk7bGV0IHY9bVswXSx5PVhCW3ZdO2lmKHkpe2xldHtpbmNvbXBhdGlibGVUb2tlbnM6d309eTtpZihBcnJheS5pc0FycmF5KHcpKXtsZXQgQz1oLmZpbmQoej0+dy5pbmNsdWRlcyh6LnRva2VuKXx8ei50b2tlbj09PXYpO2lmKEMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZSBmb3JtYXQgc3RyaW5nIG11c3RuJ3QgY29udGFpbiBcYCR7Qy5mdWxsVG9rZW59XGAgYW5kIFxgJHttfVxgIGF0IHRoZSBzYW1lIHRpbWVgKX1lbHNlIGlmKHkuaW5jb21wYXRpYmxlVG9rZW5zPT09IioiJiZoLmxlbmd0aD4wKXRocm93IG5ldyBSYW5nZUVycm9yKGBUaGUgZm9ybWF0IHN0cmluZyBtdXN0bid0IGNvbnRhaW4gXGAke219XGAgYW5kIGFueSBvdGhlciB0b2tlbiBhdCB0aGUgc2FtZSB0aW1lYCk7aC5wdXNoKHt0b2tlbjp2LGZ1bGxUb2tlbjptfSk7bGV0IEU9eS5ydW4odCxtLHMubWF0Y2gsYyk7aWYoIUUpcmV0dXJuIGkoKTt1LnB1c2goRS5zZXR0ZXIpLHQ9RS5yZXN0fWVsc2V7aWYodi5tYXRjaChlVXQpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCIrdisiYCIpO2lmKG09PT0iJyciP209IiciOnY9PT0iJyImJihtPXRVdChtKSksdC5pbmRleE9mKG0pPT09MCl0PXQuc2xpY2UobS5sZW5ndGgpO2Vsc2UgcmV0dXJuIGkoKX19aWYodC5sZW5ndGg+MCYmSlZ0LnRlc3QodCkpcmV0dXJuIGkoKTtsZXQgZz11Lm1hcChtPT5tLnByaW9yaXR5KS5zb3J0KChtLHYpPT52LW0pLmZpbHRlcigobSx2LHkpPT55LmluZGV4T2YobSk9PT12KS5tYXAobT0+dS5maWx0ZXIodj0+di5wcmlvcml0eT09PW0pLnNvcnQoKHYseSk9Pnkuc3ViUHJpb3JpdHktdi5zdWJQcmlvcml0eSkpLm1hcChtPT5tWzBdKSxiPWVlKGEscj8uaW4pO2lmKGlzTmFOKCtiKSlyZXR1cm4gaSgpO2xldCB4PXt9O2ZvcihsZXQgbSBvZiBnKXtpZighbS52YWxpZGF0ZShiLGMpKXJldHVybiBpKCk7bGV0IHY9bS5zZXQoYix4LGMpO0FycmF5LmlzQXJyYXkodik/KGI9dlswXSxPYmplY3QuYXNzaWduKHgsdlsxXSkpOmI9dn1yZXR1cm4gYn1mdW5jdGlvbiB0VXQodCl7cmV0dXJuIHQubWF0Y2goUVZ0KVsxXS5yZXBsYWNlKEtWdCwiJyIpfXZhciBaVnQsWFZ0LFFWdCxLVnQsSlZ0LGVVdCxQXzEsRVo9bigoKT0+e09zKCk7eFooKTtiWigpO0tlKCk7U1ooKTtNZSgpO19aKCk7VFJlKCk7WlZ0PS9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcdylcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2csWFZ0PS9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nLFFWdD0vXicoW15dKj8pJz8kLyxLVnQ9LycnL2csSlZ0PS9cUy8sZVV0PS9bYS16QS1aXS87UF8xPVFCfSk7ZnVuY3Rpb24gX1JlKHQsZSxhKXtyZXR1cm4gcjIoUUIodCxlLG5ldyBEYXRlLGEpKX12YXIgQl8xLEFSZT1uKCgpPT57Y2koKTtFWigpO0JfMT1fUmV9KTtmdW5jdGlvbiAkUmUodCxlKXtyZXR1cm4gZWUodCxlPy5pbikuZ2V0RGF5KCk9PT0xfXZhciBxXzEsRFJlPW4oKCk9PntNZSgpO3FfMT0kUmV9KTtmdW5jdGlvbiBFUmUodCl7cmV0dXJuK2VlKHQpPERhdGUubm93KCl9dmFyIGpfMSxOUmU9bigoKT0+e01lKCk7al8xPUVSZX0pO2Z1bmN0aW9uIHg4KHQsZSl7bGV0IGE9ZWUodCxlPy5pbik7cmV0dXJuIGEuc2V0TWludXRlcygwLDAsMCksYX12YXIgWV8xLE5aPW4oKCk9PntNZSgpO1lfMT14OH0pO2Z1bmN0aW9uIEtCKHQsZSxhKXtsZXRbcixpXT1ZZShhPy5pbix0LGUpO3JldHVybit4OChyKT09K3g4KGkpfXZhciBLXzEsUFo9bigoKT0+e1h0KCk7TlooKTtLXzE9S0J9KTtmdW5jdGlvbiBLYyh0LGUsYSl7bGV0W3IsaV09WWUoYT8uaW4sdCxlKTtyZXR1cm4rYTEocixhKT09K2ExKGksYSl9dmFyIGFBMSxKQj1uKCgpPT57WHQoKTtVYSgpO2FBMT1LY30pO2Z1bmN0aW9uIGVSKHQsZSxhKXtyZXR1cm4gS2ModCxlLHsuLi5hLHdlZWtTdGFydHNPbjoxfSl9dmFyIG9BMSxJWj1uKCgpPT57SkIoKTtvQTE9ZVJ9KTtmdW5jdGlvbiBQUmUodCxlLGEpe2xldFtyLGldPVllKGE/LmluLHQsZSk7cmV0dXJuK29hKHIpPT0rb2EoaSl9dmFyIGNBMSxJUmU9bigoKT0+e05jKCk7WHQoKTtjQTE9UFJlfSk7ZnVuY3Rpb24gYjgodCxlKXtsZXQgYT1lZSh0LGU/LmluKTtyZXR1cm4gYS5zZXRTZWNvbmRzKDAsMCksYX12YXIgdUExLEZaPW4oKCk9PntNZSgpO3VBMT1iOH0pO2Z1bmN0aW9uIHRSKHQsZSl7cmV0dXJuK2I4KHQpPT0rYjgoZSl9dmFyIG1BMSxPWj1uKCgpPT57RlooKTttQTE9dFJ9KTtmdW5jdGlvbiBhUih0LGUsYSl7bGV0W3IsaV09WWUoYT8uaW4sdCxlKTtyZXR1cm4gci5nZXRGdWxsWWVhcigpPT09aS5nZXRGdWxsWWVhcigpJiZyLmdldE1vbnRoKCk9PT1pLmdldE1vbnRoKCl9dmFyIGJBMSxCWj1uKCgpPT57WHQoKTtiQTE9YVJ9KTtmdW5jdGlvbiByUih0LGUsYSl7bGV0W3IsaV09WWUoYT8uaW4sdCxlKTtyZXR1cm4rVHIocik9PStUcihpKX12YXIgTUExLFJaPW4oKCk9PntYdCgpO1ZPKCk7TUExPXJSfSk7ZnVuY3Rpb24gdjgodCxlKXtsZXQgYT1lZSh0LGU/LmluKTtyZXR1cm4gYS5zZXRNaWxsaXNlY29uZHMoMCksYX12YXIgU0ExLEhaPW4oKCk9PntNZSgpO1NBMT12OH0pO2Z1bmN0aW9uIGlSKHQsZSl7cmV0dXJuK3Y4KHQpPT0rdjgoZSl9dmFyIFRBMSxxWj1uKCgpPT57SFooKTtUQTE9aVJ9KTtmdW5jdGlvbiBvUih0LGUsYSl7bGV0W3IsaV09WWUoYT8uaW4sdCxlKTtyZXR1cm4gci5nZXRGdWxsWWVhcigpPT09aS5nZXRGdWxsWWVhcigpfXZhciAkQTEsVlo9bigoKT0+e1h0KCk7JEExPW9SfSk7ZnVuY3Rpb24gRlJlKHQsZSl7cmV0dXJuIEtCKGVlKHQsZT8uaW4pLHl0KGU/LmlufHx0KSl9dmFyIElBMSxPUmU9bigoKT0+e08xKCk7UFooKTtNZSgpO0lBMT1GUmV9KTtmdW5jdGlvbiBCUmUodCxlKXtyZXR1cm4gZVIod2UoZT8uaW58fHQsdCkseXQoZT8uaW58fHQpKX12YXIgSEExLFJSZT1uKCgpPT57S2UoKTtPMSgpO0laKCk7SEExPUJSZX0pO2Z1bmN0aW9uIEhSZSh0KXtyZXR1cm4gdFIodCx5dCh0KSl9dmFyIGpBMSxxUmU9bigoKT0+e08xKCk7T1ooKTtqQTE9SFJlfSk7ZnVuY3Rpb24gVlJlKHQsZSl7cmV0dXJuIGFSKHdlKGU/LmlufHx0LHQpLHl0KGU/LmlufHx0KSl9dmFyIFhBMSxVUmU9bigoKT0+e0tlKCk7TzEoKTtCWigpO1hBMT1WUmV9KTtmdW5jdGlvbiBqUmUodCxlKXtyZXR1cm4gclIod2UoZT8uaW58fHQsdCkseXQoZT8uaW58fHQpKX12YXIgdCQxLFdSZT1uKCgpPT57S2UoKTtPMSgpO1JaKCk7dCQxPWpSZX0pO2Z1bmN0aW9uIEdSZSh0KXtyZXR1cm4gaVIodCx5dCh0KSl9dmFyIG8kMSxZUmU9bigoKT0+e08xKCk7cVooKTtvJDE9R1JlfSk7ZnVuY3Rpb24gWlJlKHQsZSl7cmV0dXJuIEtjKHdlKGU/LmlufHx0LHQpLHl0KGU/LmlufHx0KSxlKX12YXIgZCQxLFhSZT1uKCgpPT57S2UoKTtPMSgpO0pCKCk7ZCQxPVpSZX0pO2Z1bmN0aW9uIFFSZSh0LGUpe3JldHVybiBvUih3ZShlPy5pbnx8dCx0KSx5dChlPy5pbnx8dCkpfXZhciBtJDEsS1JlPW4oKCk9PntLZSgpO08xKCk7VlooKTttJDE9UVJlfSk7ZnVuY3Rpb24gSlJlKHQsZSl7cmV0dXJuIGVlKHQsZT8uaW4pLmdldERheSgpPT09NH12YXIgYiQxLGVIZT1uKCgpPT57TWUoKTtiJDE9SlJlfSk7ZnVuY3Rpb24gdEhlKHQsZSl7cmV0dXJuIFNyKHdlKGU/LmlufHx0LHQpLHl0KGU/LmlufHx0KSl9dmFyIHokMSxhSGU9bigoKT0+e0tlKCk7TzEoKTtGYygpO3okMT10SGV9KTtmdW5jdGlvbiBySGUodCxlKXtyZXR1cm4gU3IodCxGMSh5dChlPy5pbnx8dCksMSksZSl9dmFyIFQkMSxpSGU9bigoKT0+e3lyKCk7TzEoKTtGYygpO1QkMT1ySGV9KTtmdW5jdGlvbiBvSGUodCxlKXtyZXR1cm4gZWUodCxlPy5pbikuZ2V0RGF5KCk9PT0yfXZhciAkJDEsc0hlPW4oKCk9PntNZSgpOyQkMT1vSGV9KTtmdW5jdGlvbiBuSGUodCxlKXtyZXR1cm4gZWUodCxlPy5pbikuZ2V0RGF5KCk9PT0zfXZhciBOJDEsbEhlPW4oKCk9PntNZSgpO04kMT1uSGV9KTtmdW5jdGlvbiBjSGUodCxlLGEpe2xldCByPStlZSh0LGE/LmluKSxbaSxvXT1bK2VlKGUuc3RhcnQsYT8uaW4pLCtlZShlLmVuZCxhPy5pbildLnNvcnQoKHMsbCk9PnMtbCk7cmV0dXJuIHI+PWkmJnI8PW99dmFyIEYkMSxkSGU9bigoKT0+e01lKCk7RiQxPWNIZX0pO2Z1bmN0aW9uIGtvKHQsZSxhKXtyZXR1cm4gRjEodCwtZSxhKX12YXIgUiQxLHk4PW4oKCk9Pnt5cigpO1IkMT1rb30pO2Z1bmN0aW9uIGZIZSh0LGUpe3JldHVybiBTcih3ZShlPy5pbnx8dCx0KSxrbyh5dChlPy5pbnx8dCksMSkpfXZhciBXJDEsdUhlPW4oKCk9PntLZSgpO08xKCk7RmMoKTt5OCgpO1ckMT1mSGV9KTtmdW5jdGlvbiBwSGUodCxlKXtsZXQgYT1lZSh0LGU/LmluKSxyPWEuZ2V0RnVsbFllYXIoKSxpPTkrTWF0aC5mbG9vcihyLzEwKSoxMDtyZXR1cm4gYS5zZXRGdWxsWWVhcihpKzEsMCwwKSxhLnNldEhvdXJzKDAsMCwwLDApLGVlKGEsZT8uaW4pfXZhciBaJDEsaEhlPW4oKCk9PntNZSgpO1okMT1wSGV9KTtmdW5jdGlvbiBzUih0LGUpe2xldCBhPVV0KCkscj1lPy53ZWVrU3RhcnRzT24/P2U/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz9hLndlZWtTdGFydHNPbj8/YS5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/MCxpPWVlKHQsZT8uaW4pLG89aS5nZXREYXkoKSxzPShvPHI/LTc6MCkrNi0oby1yKTtyZXR1cm4gaS5zZXRIb3VycygwLDAsMCwwKSxpLnNldERhdGUoaS5nZXREYXRlKCkrcyksaX12YXIgSiQxLFVaPW4oKCk9Pnt4MigpO01lKCk7SiQxPXNSfSk7ZnVuY3Rpb24gbUhlKHQsZSl7cmV0dXJuIHNSKHQsey4uLmUsd2Vla1N0YXJ0c09uOjF9KX12YXIgYUQxLGdIZT1uKCgpPT57VVooKTthRDE9bUhlfSk7ZnVuY3Rpb24geEhlKHQsZSl7bGV0IGE9STIodCxlKSxyPXdlKGU/LmlufHx0LDApO3Iuc2V0RnVsbFllYXIoYSsxLDAsNCksci5zZXRIb3VycygwLDAsMCwwKTtsZXQgaT1BMShyLGUpO3JldHVybiBpLnNldERhdGUoaS5nZXREYXRlKCktMSksaX12YXIgbkQxLGJIZT1uKCgpPT57S2UoKTttbygpO3pyKCk7bkQxPXhIZX0pO2Z1bmN0aW9uIHZIZSh0LGUpe2xldCBhPWVlKHQsZT8uaW4pLHI9YS5nZXRNb250aCgpLGk9ci1yJTMrMztyZXR1cm4gYS5zZXRNb250aChpLDApLGEuc2V0SG91cnMoMCwwLDAsMCksYX12YXIgZEQxLHlIZT1uKCgpPT57TWUoKTtkRDE9dkhlfSk7ZnVuY3Rpb24gd0hlKHQsZSl7bGV0IGE9ZWUodCxlPy5pbikscj1hLmdldEZ1bGxZZWFyKCk7cmV0dXJuIGEuc2V0RnVsbFllYXIocisxLDAsMCksYS5zZXRIb3VycygwLDAsMCwwKSxhfXZhciBwRDEsTUhlPW4oKCk9PntNZSgpO3BEMT13SGV9KTtmdW5jdGlvbiB6SGUodCxlKXtsZXQgYT1lZSh0KTtpZighcjIoYSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO2xldCByPWUubWF0Y2goYVV0KTtyZXR1cm4gcj9yLm1hcChvPT57aWYobz09PSInJyIpcmV0dXJuIiciO2xldCBzPW9bMF07aWYocz09PSInIilyZXR1cm4gc1V0KG8pO2xldCBsPXNhW3NdO2lmKGwpcmV0dXJuIGwoYSxvKTtpZihzLm1hdGNoKG9VdCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIitzKyJgIik7cmV0dXJuIG99KS5qb2luKCIiKToiIn1mdW5jdGlvbiBzVXQodCl7bGV0IGU9dC5tYXRjaChyVXQpO3JldHVybiBlP2VbMV0ucmVwbGFjZShpVXQsIiciKTp0fXZhciBhVXQsclV0LGlVdCxvVXQsYkQxLGtIZT1uKCgpPT57Z1ooKTtjaSgpO01lKCk7YVV0PS8oXHcpXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nLHJVdD0vXicoW15dKj8pJz8kLyxpVXQ9LycnL2csb1V0PS9bYS16QS1aXS87YkQxPXpIZX0pO2Z1bmN0aW9uIFNIZSh7eWVhcnM6dCxtb250aHM6ZSx3ZWVrczphLGRheXM6cixob3VyczppLG1pbnV0ZXM6byxzZWNvbmRzOnN9KXtsZXQgbD0wO3QmJihsKz10KjM2NS4yNDI1KSxlJiYobCs9ZSooMzY1LjI0MjUvMTIpKSxhJiYobCs9YSo3KSxyJiYobCs9cik7bGV0IGY9bCoyNCo2MCo2MDtyZXR1cm4gaSYmKGYrPWkqNjAqNjApLG8mJihmKz1vKjYwKSxzJiYoZis9cyksTWF0aC50cnVuYyhmKjFlMyl9dmFyIHdEMSxDSGU9bigoKT0+e2d0KCk7d0QxPVNIZX0pO2Z1bmN0aW9uIExIZSh0KXtsZXQgZT10L2lhO3JldHVybiBNYXRoLnRydW5jKGUpfXZhciBrRDEsVEhlPW4oKCk9PntndCgpO2tEMT1MSGV9KTtmdW5jdGlvbiBfSGUodCl7bGV0IGU9dC9nMjtyZXR1cm4gTWF0aC50cnVuYyhlKX12YXIgTEQxLEFIZT1uKCgpPT57Z3QoKTtMRDE9X0hlfSk7ZnVuY3Rpb24gJEhlKHQpe2xldCBlPXQvQWM7cmV0dXJuIE1hdGgudHJ1bmMoZSl9dmFyIEFEMSxESGU9bigoKT0+e2d0KCk7QUQxPSRIZX0pO2Z1bmN0aW9uIEVIZSh0KXtsZXQgZT10L2ZPO3JldHVybiBNYXRoLnRydW5jKGUpfXZhciBFRDEsTkhlPW4oKCk9PntndCgpO0VEMT1FSGV9KTtmdW5jdGlvbiBQSGUodCl7cmV0dXJuIE1hdGgudHJ1bmModCpnMil9dmFyIElEMSxJSGU9bigoKT0+e2d0KCk7SUQxPVBIZX0pO2Z1bmN0aW9uIEZIZSh0KXtyZXR1cm4gTWF0aC50cnVuYyh0KkRjKX12YXIgQkQxLE9IZT1uKCgpPT57Z3QoKTtCRDE9RkhlfSk7ZnVuY3Rpb24gQkhlKHQpe2xldCBlPXQvdU87cmV0dXJuIE1hdGgudHJ1bmMoZSl9dmFyIHFEMSxSSGU9bigoKT0+e2d0KCk7cUQxPUJIZX0pO2Z1bmN0aW9uIEhIZSh0KXtsZXQgZT10L3BPO3JldHVybiBNYXRoLnRydW5jKGUpfXZhciBqRDEscUhlPW4oKCk9PntndCgpO2pEMT1ISGV9KTtmdW5jdGlvbiB3Mih0LGUsYSl7bGV0IHI9ZS1Nbyh0LGEpO3JldHVybiByPD0wJiYocis9NyksRjEodCxyLGEpfXZhciBaRDEsZmk9bigoKT0+e3lyKCk7bTgoKTtaRDE9dzJ9KTtmdW5jdGlvbiBWSGUodCxlKXtyZXR1cm4gdzIodCw1LGUpfXZhciBLRDEsVUhlPW4oKCk9PntmaSgpO0tEMT1WSGV9KTtmdW5jdGlvbiBqSGUodCxlKXtyZXR1cm4gdzIodCwxLGUpfXZhciB0RTEsV0hlPW4oKCk9PntmaSgpO3RFMT1qSGV9KTtmdW5jdGlvbiBHSGUodCxlKXtyZXR1cm4gdzIodCw2LGUpfXZhciBpRTEsWUhlPW4oKCk9PntmaSgpO2lFMT1HSGV9KTtmdW5jdGlvbiBaSGUodCxlKXtyZXR1cm4gdzIodCwwLGUpfXZhciBuRTEsWEhlPW4oKCk9PntmaSgpO25FMT1aSGV9KTtmdW5jdGlvbiBRSGUodCxlKXtyZXR1cm4gdzIodCw0LGUpfXZhciBkRTEsS0hlPW4oKCk9PntmaSgpO2RFMT1RSGV9KTtmdW5jdGlvbiBKSGUodCxlKXtyZXR1cm4gdzIodCwyLGUpfXZhciBwRTEsZXFlPW4oKCk9PntmaSgpO3BFMT1KSGV9KTtmdW5jdGlvbiB0cWUodCxlKXtyZXR1cm4gdzIodCwzLGUpfXZhciBnRTEsYXFlPW4oKCk9PntmaSgpO2dFMT10cWV9KTtmdW5jdGlvbiBpcWUodCxlKXtsZXQgYT0oKT0+d2UoZT8uaW4sTmFOKSxyPWU/LmFkZGl0aW9uYWxEaWdpdHM/PzIsaT1kVXQodCksbztpZihpLmRhdGUpe2xldCBjPWZVdChpLmRhdGUscik7bz11VXQoYy5yZXN0RGF0ZVN0cmluZyxjLnllYXIpfWlmKCFvfHxpc05hTigrbykpcmV0dXJuIGEoKTtsZXQgcz0rbyxsPTAsZjtpZihpLnRpbWUmJihsPXBVdChpLnRpbWUpLGlzTmFOKGwpKSlyZXR1cm4gYSgpO2lmKGkudGltZXpvbmUpe2lmKGY9aFV0KGkudGltZXpvbmUpLGlzTmFOKGYpKXJldHVybiBhKCl9ZWxzZXtsZXQgYz1uZXcgRGF0ZShzK2wpLHU9ZWUoMCxlPy5pbik7cmV0dXJuIHUuc2V0RnVsbFllYXIoYy5nZXRVVENGdWxsWWVhcigpLGMuZ2V0VVRDTW9udGgoKSxjLmdldFVUQ0RhdGUoKSksdS5zZXRIb3VycyhjLmdldFVUQ0hvdXJzKCksYy5nZXRVVENNaW51dGVzKCksYy5nZXRVVENTZWNvbmRzKCksYy5nZXRVVENNaWxsaXNlY29uZHMoKSksdX1yZXR1cm4gZWUocytsK2YsZT8uaW4pfWZ1bmN0aW9uIGRVdCh0KXtsZXQgZT17fSxhPXQuc3BsaXQoblIuZGF0ZVRpbWVEZWxpbWl0ZXIpLHI7aWYoYS5sZW5ndGg+MilyZXR1cm4gZTtpZigvOi8udGVzdChhWzBdKT9yPWFbMF06KGUuZGF0ZT1hWzBdLHI9YVsxXSxuUi50aW1lWm9uZURlbGltaXRlci50ZXN0KGUuZGF0ZSkmJihlLmRhdGU9dC5zcGxpdChuUi50aW1lWm9uZURlbGltaXRlcilbMF0scj10LnN1YnN0cihlLmRhdGUubGVuZ3RoLHQubGVuZ3RoKSkpLHIpe2xldCBpPW5SLnRpbWV6b25lLmV4ZWMocik7aT8oZS50aW1lPXIucmVwbGFjZShpWzFdLCIiKSxlLnRpbWV6b25lPWlbMV0pOmUudGltZT1yfXJldHVybiBlfWZ1bmN0aW9uIGZVdCh0LGUpe2xldCBhPW5ldyBSZWdFeHAoIl4oPzooXFxkezR9fFsrLV1cXGR7IisoNCtlKSsifSl8KFxcZHsyfXxbKy1dXFxkeyIrKDIrZSkrIn0pJCkiKSxyPXQubWF0Y2goYSk7aWYoIXIpcmV0dXJue3llYXI6TmFOLHJlc3REYXRlU3RyaW5nOiIifTtsZXQgaT1yWzFdP3BhcnNlSW50KHJbMV0pOm51bGwsbz1yWzJdP3BhcnNlSW50KHJbMl0pOm51bGw7cmV0dXJue3llYXI6bz09PW51bGw/aTpvKjEwMCxyZXN0RGF0ZVN0cmluZzp0LnNsaWNlKChyWzFdfHxyWzJdKS5sZW5ndGgpfX1mdW5jdGlvbiB1VXQodCxlKXtpZihlPT09bnVsbClyZXR1cm4gbmV3IERhdGUoTmFOKTtsZXQgYT10Lm1hdGNoKG5VdCk7aWYoIWEpcmV0dXJuIG5ldyBEYXRlKE5hTik7bGV0IHI9ISFhWzRdLGk9dzgoYVsxXSksbz13OChhWzJdKS0xLHM9dzgoYVszXSksbD13OChhWzRdKSxmPXc4KGFbNV0pLTE7aWYocilyZXR1cm4gdlV0KGUsbCxmKT9tVXQoZSxsLGYpOm5ldyBEYXRlKE5hTik7e2xldCBjPW5ldyBEYXRlKDApO3JldHVybiF4VXQoZSxvLHMpfHwhYlV0KGUsaSk/bmV3IERhdGUoTmFOKTooYy5zZXRVVENGdWxsWWVhcihlLG8sTWF0aC5tYXgoaSxzKSksYyl9fWZ1bmN0aW9uIHc4KHQpe3JldHVybiB0P3BhcnNlSW50KHQpOjF9ZnVuY3Rpb24gcFV0KHQpe2xldCBlPXQubWF0Y2gobFV0KTtpZighZSlyZXR1cm4gTmFOO2xldCBhPWpaKGVbMV0pLHI9alooZVsyXSksaT1qWihlWzNdKTtyZXR1cm4geVV0KGEscixpKT9hKmlhK3IqZzIraSoxZTM6TmFOfWZ1bmN0aW9uIGpaKHQpe3JldHVybiB0JiZwYXJzZUZsb2F0KHQucmVwbGFjZSgiLCIsIi4iKSl8fDB9ZnVuY3Rpb24gaFV0KHQpe2lmKHQ9PT0iWiIpcmV0dXJuIDA7bGV0IGU9dC5tYXRjaChjVXQpO2lmKCFlKXJldHVybiAwO2xldCBhPWVbMV09PT0iKyI/LTE6MSxyPXBhcnNlSW50KGVbMl0pLGk9ZVszXSYmcGFyc2VJbnQoZVszXSl8fDA7cmV0dXJuIHdVdChyLGkpP2EqKHIqaWEraSpnMik6TmFOfWZ1bmN0aW9uIG1VdCh0LGUsYSl7bGV0IHI9bmV3IERhdGUoMCk7ci5zZXRVVENGdWxsWWVhcih0LDAsNCk7bGV0IGk9ci5nZXRVVENEYXkoKXx8NyxvPShlLTEpKjcrYSsxLWk7cmV0dXJuIHIuc2V0VVRDRGF0ZShyLmdldFVUQ0RhdGUoKStvKSxyfWZ1bmN0aW9uIHJxZSh0KXtyZXR1cm4gdCU0MDA9PT0wfHx0JTQ9PT0wJiZ0JTEwMCE9PTB9ZnVuY3Rpb24geFV0KHQsZSxhKXtyZXR1cm4gZT49MCYmZTw9MTEmJmE+PTEmJmE8PShnVXRbZV18fChycWUodCk/Mjk6MjgpKX1mdW5jdGlvbiBiVXQodCxlKXtyZXR1cm4gZT49MSYmZTw9KHJxZSh0KT8zNjY6MzY1KX1mdW5jdGlvbiB2VXQodCxlLGEpe3JldHVybiBlPj0xJiZlPD01MyYmYT49MCYmYTw9Nn1mdW5jdGlvbiB5VXQodCxlLGEpe3JldHVybiB0PT09MjQ/ZT09PTAmJmE9PT0wOmE+PTAmJmE8NjAmJmU+PTAmJmU8NjAmJnQ+PTAmJnQ8MjV9ZnVuY3Rpb24gd1V0KHQsZSl7cmV0dXJuIGU+PTAmJmU8PTU5fXZhciBuUixuVXQsbFV0LGNVdCxnVXQsd0UxLG9xZT1uKCgpPT57Z3QoKTtLZSgpO01lKCk7blI9e2RhdGVUaW1lRGVsaW1pdGVyOi9bVCBdLyx0aW1lWm9uZURlbGltaXRlcjovW1ogXS9pLHRpbWV6b25lOi8oW1orLV0uKikkL30sblV0PS9eLT8oPzooXGR7M30pfChcZHsyfSkoPzotPyhcZHsyfSkpP3xXKFxkezJ9KSg/Oi0/KFxkezF9KSk/fCkkLyxsVXQ9L14oXGR7Mn0oPzpbLixdXGQqKT8pKD86Oj8oXGR7Mn0oPzpbLixdXGQqKT8pKT8oPzo6PyhcZHsyfSg/OlsuLF1cZCopPykpPyQvLGNVdD0vXihbKy1dKShcZHsyfSkoPzo6PyhcZHsyfSkpPyQvO2dVdD1bMzEsbnVsbCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07d0UxPWlxZX0pO2Z1bmN0aW9uIHNxZSh0LGUpe2xldCBhPXQubWF0Y2goLyhcZHs0fSktKFxkezJ9KS0oXGR7Mn0pW1QgXShcZHsyfSk6KFxkezJ9KTooXGR7Mn0pKD86XC4oXGR7MCw3fSkpPyg/Olp8KC4pKFxkezJ9KTo/KFxkezJ9KT8pPy8pO3JldHVybiBhP2VlKERhdGUuVVRDKCthWzFdLCthWzJdLTEsK2FbM10sK2FbNF0tKCthWzldfHwwKSooYVs4XT09Ii0iPy0xOjEpLCthWzVdLSgrYVsxMF18fDApKihhWzhdPT0iLSI/LTE6MSksK2FbNl0sKygoYVs3XXx8IjAiKSsiMDAiKS5zdWJzdHJpbmcoMCwzKSksZT8uaW4pOmVlKE5hTixlPy5pbil9dmFyIGtFMSxucWU9bigoKT0+e01lKCk7a0UxPXNxZX0pO2Z1bmN0aW9uIE0yKHQsZSxhKXtsZXQgcj1Nbyh0LGEpLWU7cmV0dXJuIHI8PTAmJihyKz03KSxrbyh0LHIsYSl9dmFyIFRFMSx1aT1uKCgpPT57bTgoKTt5OCgpO1RFMT1NMn0pO2Z1bmN0aW9uIGxxZSh0LGUpe3JldHVybiBNMih0LDUsZSl9dmFyICRFMSxjcWU9bigoKT0+e3VpKCk7JEUxPWxxZX0pO2Z1bmN0aW9uIGRxZSh0LGUpe3JldHVybiBNMih0LDEsZSl9dmFyIE5FMSxmcWU9bigoKT0+e3VpKCk7TkUxPWRxZX0pO2Z1bmN0aW9uIHVxZSh0LGUpe3JldHVybiBNMih0LDYsZSl9dmFyIEZFMSxwcWU9bigoKT0+e3VpKCk7RkUxPXVxZX0pO2Z1bmN0aW9uIGhxZSh0LGUpe3JldHVybiBNMih0LDAsZSl9dmFyIFJFMSxtcWU9bigoKT0+e3VpKCk7UkUxPWhxZX0pO2Z1bmN0aW9uIGdxZSh0LGUpe3JldHVybiBNMih0LDQsZSl9dmFyIFZFMSx4cWU9bigoKT0+e3VpKCk7VkUxPWdxZX0pO2Z1bmN0aW9uIGJxZSh0LGUpe3JldHVybiBNMih0LDIsZSl9dmFyIFdFMSx2cWU9bigoKT0+e3VpKCk7V0UxPWJxZX0pO2Z1bmN0aW9uIHlxZSh0LGUpe3JldHVybiBNMih0LDMsZSl9dmFyIFpFMSx3cWU9bigoKT0+e3VpKCk7WkUxPXlxZX0pO2Z1bmN0aW9uIE1xZSh0KXtyZXR1cm4gTWF0aC50cnVuYyh0KnVPKX12YXIgS0UxLHpxZT1uKCgpPT57Z3QoKTtLRTE9TXFlfSk7ZnVuY3Rpb24ga3FlKHQpe2xldCBlPXQvaE87cmV0dXJuIE1hdGgudHJ1bmMoZSl9dmFyIHROMSxTcWU9bigoKT0+e2d0KCk7dE4xPWtxZX0pO2Z1bmN0aW9uIENxZSh0LGUpe2xldCBhPWU/Lm5lYXJlc3RUbz8/MTtpZihhPDF8fGE+MTIpcmV0dXJuIHdlKGU/LmlufHx0LE5hTik7bGV0IHI9ZWUodCxlPy5pbiksaT1yLmdldE1pbnV0ZXMoKS82MCxvPXIuZ2V0U2Vjb25kcygpLzYwLzYwLHM9ci5nZXRNaWxsaXNlY29uZHMoKS8xZTMvNjAvNjAsbD1yLmdldEhvdXJzKCkraStvK3MsZj1lPy5yb3VuZGluZ01ldGhvZD8/InJvdW5kIix1PXYyKGYpKGwvYSkqYTtyZXR1cm4gci5zZXRIb3Vycyh1LDAsMCwwKSxyfXZhciBzTjEsTHFlPW4oKCk9PntkaSgpO0tlKCk7TWUoKTtzTjE9Q3FlfSk7ZnVuY3Rpb24gVHFlKHQsZSl7bGV0IGE9ZT8ubmVhcmVzdFRvPz8xO2lmKGE8MXx8YT4zMClyZXR1cm4gd2UodCxOYU4pO2xldCByPWVlKHQsZT8uaW4pLGk9ci5nZXRTZWNvbmRzKCkvNjAsbz1yLmdldE1pbGxpc2Vjb25kcygpLzFlMy82MCxzPXIuZ2V0TWludXRlcygpK2krbyxsPWU/LnJvdW5kaW5nTWV0aG9kPz8icm91bmQiLGM9djIobCkocy9hKSphO3JldHVybiByLnNldE1pbnV0ZXMoYywwLDApLHJ9dmFyIGZOMSxfcWU9bigoKT0+e2RpKCk7S2UoKTtNZSgpO2ZOMT1UcWV9KTtmdW5jdGlvbiBBcWUodCl7bGV0IGU9dC9EcztyZXR1cm4gTWF0aC50cnVuYyhlKX12YXIgaE4xLCRxZT1uKCgpPT57Z3QoKTtoTjE9QXFlfSk7ZnVuY3Rpb24gRHFlKHQpe3JldHVybiB0KkFjfXZhciB4TjEsRXFlPW4oKCk9PntndCgpO3hOMT1EcWV9KTtmdW5jdGlvbiBOcWUodCl7bGV0IGU9dC9EYztyZXR1cm4gTWF0aC50cnVuYyhlKX12YXIgeU4xLFBxZT1uKCgpPT57Z3QoKTt5TjE9TnFlfSk7ZnVuY3Rpb24gSmModCxlLGEpe2xldCByPWVlKHQsYT8uaW4pLGk9ci5nZXRGdWxsWWVhcigpLG89ci5nZXREYXRlKCkscz13ZShhPy5pbnx8dCwwKTtzLnNldEZ1bGxZZWFyKGksZSwxNSkscy5zZXRIb3VycygwLDAsMCwwKTtsZXQgbD1pQihzKTtyZXR1cm4gci5zZXRNb250aChlLE1hdGgubWluKG8sbCkpLHJ9dmFyIFNOMSxsUj1uKCgpPT57S2UoKTt6WigpO01lKCk7U04xPUpjfSk7ZnVuY3Rpb24gSXFlKHQsZSxhKXtsZXQgcj1lZSh0LGE/LmluKTtyZXR1cm4gaXNOYU4oK3IpP3dlKGE/LmlufHx0LE5hTik6KGUueWVhciE9bnVsbCYmci5zZXRGdWxsWWVhcihlLnllYXIpLGUubW9udGghPW51bGwmJihyPUpjKHIsZS5tb250aCkpLGUuZGF0ZSE9bnVsbCYmci5zZXREYXRlKGUuZGF0ZSksZS5ob3VycyE9bnVsbCYmci5zZXRIb3VycyhlLmhvdXJzKSxlLm1pbnV0ZXMhPW51bGwmJnIuc2V0TWludXRlcyhlLm1pbnV0ZXMpLGUuc2Vjb25kcyE9bnVsbCYmci5zZXRTZWNvbmRzKGUuc2Vjb25kcyksZS5taWxsaXNlY29uZHMhPW51bGwmJnIuc2V0TWlsbGlzZWNvbmRzKGUubWlsbGlzZWNvbmRzKSxyKX12YXIgQU4xLEZxZT1uKCgpPT57S2UoKTtsUigpO01lKCk7QU4xPUlxZX0pO2Z1bmN0aW9uIE9xZSh0LGUsYSl7bGV0IHI9ZWUodCxhPy5pbik7cmV0dXJuIHIuc2V0RGF0ZShlKSxyfXZhciBFTjEsQnFlPW4oKCk9PntNZSgpO0VOMT1PcWV9KTtmdW5jdGlvbiBScWUodCxlLGEpe2xldCByPWVlKHQsYT8uaW4pO3JldHVybiByLnNldE1vbnRoKDApLHIuc2V0RGF0ZShlKSxyfXZhciBJTjEsSHFlPW4oKCk9PntNZSgpO0lOMT1ScWV9KTtmdW5jdGlvbiBxcWUodCl7bGV0IGU9e30sYT1VdCgpO2ZvcihsZXQgciBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLHIpJiYoZVtyXT1hW3JdKTtmb3IobGV0IHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKHRbcl09PT12b2lkIDA/ZGVsZXRlIGVbcl06ZVtyXT10W3JdKTtpRmUoZSl9dmFyIEJOMSxWcWU9bigoKT0+e3gyKCk7Qk4xPXFxZX0pO2Z1bmN0aW9uIFVxZSh0LGUsYSl7bGV0IHI9ZWUodCxhPy5pbik7cmV0dXJuIHIuc2V0SG91cnMoZSkscn12YXIgcU4xLGpxZT1uKCgpPT57TWUoKTtxTjE9VXFlfSk7ZnVuY3Rpb24gV3FlKHQsZSxhKXtsZXQgcj1lZSh0LGE/LmluKTtyZXR1cm4gci5zZXRNaWxsaXNlY29uZHMoZSkscn12YXIgak4xLEdxZT1uKCgpPT57TWUoKTtqTjE9V3FlfSk7ZnVuY3Rpb24gWXFlKHQsZSxhKXtsZXQgcj1lZSh0LGE/LmluKTtyZXR1cm4gci5zZXRNaW51dGVzKGUpLHJ9dmFyIFlOMSxacWU9bigoKT0+e01lKCk7WU4xPVlxZX0pO2Z1bmN0aW9uIFhxZSh0LGUsYSl7bGV0IHI9ZWUodCxhPy5pbiksaT1NYXRoLnRydW5jKHIuZ2V0TW9udGgoKS8zKSsxLG89ZS1pO3JldHVybiBKYyhyLHIuZ2V0TW9udGgoKStvKjMpfXZhciBLTjEsUXFlPW4oKCk9PntsUigpO01lKCk7S04xPVhxZX0pO2Z1bmN0aW9uIEtxZSh0LGUsYSl7bGV0IHI9ZWUodCxhPy5pbik7cmV0dXJuIHIuc2V0U2Vjb25kcyhlKSxyfXZhciB0UDEsSnFlPW4oKCk9PntNZSgpO3RQMT1LcWV9KTtmdW5jdGlvbiBlVmUodCxlLGEpe2xldCByPVV0KCksaT1hPy5maXJzdFdlZWtDb250YWluc0RhdGU/P2E/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9yLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/ci5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/MSxvPVcxKGVlKHQsYT8uaW4pLEJzKHQsYSksYSkscz13ZShhPy5pbnx8dCwwKTtzLnNldEZ1bGxZZWFyKGUsMCxpKSxzLnNldEhvdXJzKDAsMCwwLDApO2xldCBsPUJzKHMsYSk7cmV0dXJuIGwuc2V0RGF0ZShsLmdldERhdGUoKStvKSxsfXZhciBsUDEsdFZlPW4oKCk9Pnt4MigpO0tlKCk7bGkoKTtRTygpO01lKCk7bFAxPWVWZX0pO2Z1bmN0aW9uIGFWZSh0LGUsYSl7bGV0IHI9ZWUodCxhPy5pbik7cmV0dXJuIGlzTmFOKCtyKT93ZShhPy5pbnx8dCxOYU4pOihyLnNldEZ1bGxZZWFyKGUpLHIpfXZhciB1UDEsclZlPW4oKCk9PntLZSgpO01lKCk7dVAxPWFWZX0pO2Z1bmN0aW9uIGlWZSh0LGUpe2xldCBhPWVlKHQsZT8uaW4pLHI9YS5nZXRGdWxsWWVhcigpLGk9TWF0aC5mbG9vcihyLzEwKSoxMDtyZXR1cm4gYS5zZXRGdWxsWWVhcihpLDAsMSksYS5zZXRIb3VycygwLDAsMCwwKSxhfXZhciBtUDEsb1ZlPW4oKCk9PntNZSgpO21QMT1pVmV9KTtmdW5jdGlvbiBzVmUodCl7cmV0dXJuIGtyKERhdGUubm93KCksdCl9dmFyIGJQMSxuVmU9bigoKT0+e284KCk7YlAxPXNWZX0pO2Z1bmN0aW9uIGxWZSh0KXtsZXQgZT15dCh0Py5pbiksYT1lLmdldEZ1bGxZZWFyKCkscj1lLmdldE1vbnRoKCksaT1lLmdldERhdGUoKSxvPXdlKHQ/LmluLDApO3JldHVybiBvLnNldEZ1bGxZZWFyKGEscixpKzEpLG8uc2V0SG91cnMoMCwwLDAsMCksb312YXIgTVAxLGNWZT1uKCgpPT57S2UoKTtPMSgpO01QMT1sVmV9KTtmdW5jdGlvbiBkVmUodCl7bGV0IGU9eXQodD8uaW4pLGE9ZS5nZXRGdWxsWWVhcigpLHI9ZS5nZXRNb250aCgpLGk9ZS5nZXREYXRlKCksbz15dCh0Py5pbik7cmV0dXJuIG8uc2V0RnVsbFllYXIoYSxyLGktMSksby5zZXRIb3VycygwLDAsMCwwKSxvfXZhciBTUDEsZlZlPW4oKCk9PntPMSgpO1NQMT1kVmV9KTtmdW5jdGlvbiBjUih0LGUsYSl7cmV0dXJuIHdyKHQsLWUsYSl9dmFyIFRQMSxXWj1uKCgpPT57RWMoKTtUUDE9Y1J9KTtmdW5jdGlvbiB1VmUodCxlLGEpe2xldHt5ZWFyczpyPTAsbW9udGhzOmk9MCx3ZWVrczpvPTAsZGF5czpzPTAsaG91cnM6bD0wLG1pbnV0ZXM6Zj0wLHNlY29uZHM6Yz0wfT1lLHU9Y1IodCxpK3IqMTIsYSksZD1rbyh1LHMrbyo3LGEpLGg9ZitsKjYwLGI9KGMraCo2MCkqMWUzO3JldHVybiB3ZShhPy5pbnx8dCwrZC1iKX12YXIgRVAxLHBWZT1uKCgpPT57S2UoKTt5OCgpO1daKCk7RVAxPXVWZX0pO2Z1bmN0aW9uIGhWZSh0LGUsYSl7cmV0dXJuIHhPKHQsLWUsYSl9dmFyIElQMSxtVmU9bigoKT0+e1hZKCk7SVAxPWhWZX0pO2Z1bmN0aW9uIGdWZSh0LGUsYSl7cmV0dXJuIGJPKHQsLWUsYSl9dmFyIEJQMSx4VmU9bigoKT0+e1FZKCk7QlAxPWdWZX0pO2Z1bmN0aW9uIGJWZSh0LGUsYSl7cmV0dXJuIGhvKHQsLWUsYSl9dmFyIHFQMSx2VmU9bigoKT0+e2k4KCk7cVAxPWJWZX0pO2Z1bmN0aW9uIHlWZSh0LGUsYSl7cmV0dXJuIFBjKHQsLWUsYSl9dmFyIGpQMSx3VmU9bigoKT0+e3dPKCk7alAxPXlWZX0pO2Z1bmN0aW9uIE1WZSh0LGUsYSl7cmV0dXJuIEljKHQsLWUsYSl9dmFyIFlQMSx6VmU9bigoKT0+e01PKCk7WVAxPU1WZX0pO2Z1bmN0aW9uIGtWZSh0LGUsYSl7cmV0dXJuIHpPKHQsLWUsYSl9dmFyIFFQMSxTVmU9bigoKT0+e2VaKCk7UVAxPWtWZX0pO2Z1bmN0aW9uIENWZSh0LGUsYSl7cmV0dXJuIGdvKHQsLWUsYSl9dmFyIGVJMSxMVmU9bigoKT0+e3M4KCk7ZUkxPUNWZX0pO2Z1bmN0aW9uIFRWZSh0LGUsYSl7cmV0dXJuIGtPKHQsLWUsYSl9dmFyIHJJMSxfVmU9bigoKT0+e3RaKCk7ckkxPVRWZX0pO2Z1bmN0aW9uIEFWZSh0KXtyZXR1cm4gTWF0aC50cnVuYyh0KjcpfXZhciBzSTEsJFZlPW4oKCk9PntndCgpO3NJMT1BVmV9KTtmdW5jdGlvbiBEVmUodCl7cmV0dXJuIE1hdGgudHJ1bmModCozNjUuMjQyNSl9dmFyIGNJMSxFVmU9bigoKT0+e2d0KCk7Y0kxPURWZX0pO2Z1bmN0aW9uIE5WZSh0KXtyZXR1cm4gTWF0aC50cnVuYyh0KnBPKX12YXIgdUkxLFBWZT1uKCgpPT57Z3QoKTt1STE9TlZlfSk7ZnVuY3Rpb24gSVZlKHQpe3JldHVybiBNYXRoLnRydW5jKHQqaE8pfXZhciBtSTEsRlZlPW4oKCk9PntndCgpO21JMT1JVmV9KTt2YXIgTTg9e307ZXQoTTgse2FkZDooKT0+cG8sYWRkQnVzaW5lc3NEYXlzOigpPT54TyxhZGREYXlzOigpPT5GMSxhZGRIb3VyczooKT0+Yk8sYWRkSVNPV2Vla1llYXJzOigpPT55TyxhZGRNaWxsaXNlY29uZHM6KCk9PmhvLGFkZE1pbnV0ZXM6KCk9PlBjLGFkZE1vbnRoczooKT0+d3IsYWRkUXVhcnRlcnM6KCk9PkljLGFkZFNlY29uZHM6KCk9PnpPLGFkZFdlZWtzOigpPT5nbyxhZGRZZWFyczooKT0+a08sYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmc6KCk9Pm9GZSxjbGFtcDooKT0+bkZlLGNsb3Nlc3RJbmRleFRvOigpPT5MTyxjbG9zZXN0VG86KCk9PmNGZSxjb21wYXJlQXNjOigpPT5iMixjb21wYXJlRGVzYzooKT0+ZkZlLGNvbnN0cnVjdEZyb206KCk9PndlLGNvbnN0cnVjdE5vdzooKT0+eXQsZGF5c1RvV2Vla3M6KCk9PnBGZSxkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXM6KCk9Pm1GZSxkaWZmZXJlbmNlSW5DYWxlbmRhckRheXM6KCk9PlcxLGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzOigpPT5fTyxkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzOigpPT54RmUsZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHM6KCk9Pk5zLGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnM6KCk9Pk9jLGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3M6KCk9PlBzLGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnM6KCk9PnhvLGRpZmZlcmVuY2VJbkRheXM6KCk9PkJjLGRpZmZlcmVuY2VJbkhvdXJzOigpPT5JcyxkaWZmZXJlbmNlSW5JU09XZWVrWWVhcnM6KCk9PnlGZSxkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHM6KCk9PlJjLGRpZmZlcmVuY2VJbk1pbnV0ZXM6KCk9PkZzLGRpZmZlcmVuY2VJbk1vbnRoczooKT0+Ym8sZGlmZmVyZW5jZUluUXVhcnRlcnM6KCk9Pk1GZSxkaWZmZXJlbmNlSW5TZWNvbmRzOigpPT5DcixkaWZmZXJlbmNlSW5XZWVrczooKT0+a0ZlLGRpZmZlcmVuY2VJblllYXJzOigpPT5ITyxlYWNoRGF5T2ZJbnRlcnZhbDooKT0+cU8sZWFjaEhvdXJPZkludGVydmFsOigpPT5DRmUsZWFjaE1pbnV0ZU9mSW50ZXJ2YWw6KCk9PlRGZSxlYWNoTW9udGhPZkludGVydmFsOigpPT5BRmUsZWFjaFF1YXJ0ZXJPZkludGVydmFsOigpPT5ERmUsZWFjaFdlZWtPZkludGVydmFsOigpPT5ORmUsZWFjaFdlZWtlbmRPZkludGVydmFsOigpPT5WYyxlYWNoV2Vla2VuZE9mTW9udGg6KCk9PklGZSxlYWNoV2Vla2VuZE9mWWVhcjooKT0+T0ZlLGVhY2hZZWFyT2ZJbnRlcnZhbDooKT0+UkZlLGVuZE9mRGF5OigpPT5IYyxlbmRPZkRlY2FkZTooKT0+cUZlLGVuZE9mSG91cjooKT0+VUZlLGVuZE9mSVNPV2VlazooKT0+V0ZlLGVuZE9mSVNPV2Vla1llYXI6KCk9PllGZSxlbmRPZk1pbnV0ZTooKT0+WEZlLGVuZE9mTW9udGg6KCk9PnFjLGVuZE9mUXVhcnRlcjooKT0+S0ZlLGVuZE9mU2Vjb25kOigpPT5lT2UsZW5kT2ZUb2RheTooKT0+YU9lLGVuZE9mVG9tb3Jyb3c6KCk9PmlPZSxlbmRPZldlZWs6KCk9PkdPLGVuZE9mWWVhcjooKT0+ak8sZW5kT2ZZZXN0ZXJkYXk6KCk9PnNPZSxmb3JtYXQ6KCk9Pmg4LGZvcm1hdERhdGU6KCk9Pmg4LGZvcm1hdERpc3RhbmNlOigpPT50Qixmb3JtYXREaXN0YW5jZVN0cmljdDooKT0+YUIsZm9ybWF0RGlzdGFuY2VUb05vdzooKT0+X09lLGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3Q6KCk9PiRPZSxmb3JtYXREdXJhdGlvbjooKT0+RU9lLGZvcm1hdElTTzooKT0+UE9lLGZvcm1hdElTTzkwNzU6KCk9PkZPZSxmb3JtYXRJU09EdXJhdGlvbjooKT0+Qk9lLGZvcm1hdFJGQzMzMzk6KCk9PkhPZSxmb3JtYXRSRkM3MjMxOigpPT5WT2UsZm9ybWF0UmVsYXRpdmU6KCk9PmpPZSxmb3JtYXR0ZXJzOigpPT51OCxmcm9tVW5peFRpbWU6KCk9PkdPZSxnZXREYXRlOigpPT5yQixnZXREYXk6KCk9Pk1vLGdldERheU9mWWVhcjooKT0+Wk8sZ2V0RGF5c0luTW9udGg6KCk9PmlCLGdldERheXNJblllYXI6KCk9PlpPZSxnZXREZWNhZGU6KCk9PlFPZSxnZXREZWZhdWx0T3B0aW9uczooKT0+c0IsZ2V0SG91cnM6KCk9PkpPZSxnZXRJU09EYXk6KCk9Pm5CLGdldElTT1dlZWs6KCk9PkdjLGdldElTT1dlZWtZZWFyOigpPT5JMixnZXRJU09XZWVrc0luWWVhcjooKT0+dEJlLGdldE1pbGxpc2Vjb25kczooKT0+ckJlLGdldE1pbnV0ZXM6KCk9Pm9CZSxnZXRNb250aDooKT0+bkJlLGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzOigpPT5jQmUsZ2V0UXVhcnRlcjooKT0+bjgsZ2V0U2Vjb25kczooKT0+ZkJlLGdldFRpbWU6KCk9PnBCZSxnZXRVbml4VGltZTooKT0+bUJlLGdldFdlZWs6KCk9PlljLGdldFdlZWtPZk1vbnRoOigpPT54QmUsZ2V0V2Vla1llYXI6KCk9PnlvLGdldFdlZWtzSW5Nb250aDooKT0+dkJlLGdldFllYXI6KCk9PndCZSxob3Vyc1RvTWlsbGlzZWNvbmRzOigpPT56QmUsaG91cnNUb01pbnV0ZXM6KCk9PlNCZSxob3Vyc1RvU2Vjb25kczooKT0+TEJlLGludGVydmFsOigpPT5fQmUsaW50ZXJ2YWxUb0R1cmF0aW9uOigpPT4kQmUsaW50bEZvcm1hdDooKT0+RUJlLGludGxGb3JtYXREaXN0YW5jZTooKT0+UEJlLGlzQWZ0ZXI6KCk9PkZCZSxpc0JlZm9yZTooKT0+QkJlLGlzRGF0ZTooKT0+VE8saXNFcXVhbDooKT0+SEJlLGlzRXhpc3RzOigpPT5WQmUsaXNGaXJzdERheU9mTW9udGg6KCk9PmpCZSxpc0ZyaWRheTooKT0+R0JlLGlzRnV0dXJlOigpPT5aQmUsaXNMYXN0RGF5T2ZNb250aDooKT0+Uk8saXNMZWFwWWVhcjooKT0+b0IsaXNNYXRjaDooKT0+X1JlLGlzTW9uZGF5OigpPT4kUmUsaXNQYXN0OigpPT5FUmUsaXNTYW1lRGF5OigpPT5Tcixpc1NhbWVIb3VyOigpPT5LQixpc1NhbWVJU09XZWVrOigpPT5lUixpc1NhbWVJU09XZWVrWWVhcjooKT0+UFJlLGlzU2FtZU1pbnV0ZTooKT0+dFIsaXNTYW1lTW9udGg6KCk9PmFSLGlzU2FtZVF1YXJ0ZXI6KCk9PnJSLGlzU2FtZVNlY29uZDooKT0+aVIsaXNTYW1lV2VlazooKT0+S2MsaXNTYW1lWWVhcjooKT0+b1IsaXNTYXR1cmRheTooKT0+bU8saXNTdW5kYXk6KCk9PmdPLGlzVGhpc0hvdXI6KCk9PkZSZSxpc1RoaXNJU09XZWVrOigpPT5CUmUsaXNUaGlzTWludXRlOigpPT5IUmUsaXNUaGlzTW9udGg6KCk9PlZSZSxpc1RoaXNRdWFydGVyOigpPT5qUmUsaXNUaGlzU2Vjb25kOigpPT5HUmUsaXNUaGlzV2VlazooKT0+WlJlLGlzVGhpc1llYXI6KCk9PlFSZSxpc1RodXJzZGF5OigpPT5KUmUsaXNUb2RheTooKT0+dEhlLGlzVG9tb3Jyb3c6KCk9PnJIZSxpc1R1ZXNkYXk6KCk9Pm9IZSxpc1ZhbGlkOigpPT5yMixpc1dlZG5lc2RheTooKT0+bkhlLGlzV2Vla2VuZDooKT0+TXIsaXNXaXRoaW5JbnRlcnZhbDooKT0+Y0hlLGlzWWVzdGVyZGF5OigpPT5mSGUsbGFzdERheU9mRGVjYWRlOigpPT5wSGUsbGFzdERheU9mSVNPV2VlazooKT0+bUhlLGxhc3REYXlPZklTT1dlZWtZZWFyOigpPT54SGUsbGFzdERheU9mTW9udGg6KCk9PmxCLGxhc3REYXlPZlF1YXJ0ZXI6KCk9PnZIZSxsYXN0RGF5T2ZXZWVrOigpPT5zUixsYXN0RGF5T2ZZZWFyOigpPT53SGUsbGlnaHRGb3JtYXQ6KCk9PnpIZSxsaWdodEZvcm1hdHRlcnM6KCk9PnNhLGxvbmdGb3JtYXR0ZXJzOigpPT53byxtYXg6KCk9PlNPLG1pbGxpc2Vjb25kczooKT0+U0hlLG1pbGxpc2Vjb25kc1RvSG91cnM6KCk9PkxIZSxtaWxsaXNlY29uZHNUb01pbnV0ZXM6KCk9Pl9IZSxtaWxsaXNlY29uZHNUb1NlY29uZHM6KCk9PiRIZSxtaW46KCk9PkNPLG1pbnV0ZXNUb0hvdXJzOigpPT5FSGUsbWludXRlc1RvTWlsbGlzZWNvbmRzOigpPT5QSGUsbWludXRlc1RvU2Vjb25kczooKT0+RkhlLG1vbnRoc1RvUXVhcnRlcnM6KCk9PkJIZSxtb250aHNUb1llYXJzOigpPT5ISGUsbmV4dERheTooKT0+dzIsbmV4dEZyaWRheTooKT0+VkhlLG5leHRNb25kYXk6KCk9PmpIZSxuZXh0U2F0dXJkYXk6KCk9PkdIZSxuZXh0U3VuZGF5OigpPT5aSGUsbmV4dFRodXJzZGF5OigpPT5RSGUsbmV4dFR1ZXNkYXk6KCk9PkpIZSxuZXh0V2VkbmVzZGF5OigpPT50cWUscGFyc2U6KCk9PlFCLHBhcnNlSVNPOigpPT5pcWUscGFyc2VKU09OOigpPT5zcWUscGFyc2VyczooKT0+WEIscHJldmlvdXNEYXk6KCk9Pk0yLHByZXZpb3VzRnJpZGF5OigpPT5scWUscHJldmlvdXNNb25kYXk6KCk9PmRxZSxwcmV2aW91c1NhdHVyZGF5OigpPT51cWUscHJldmlvdXNTdW5kYXk6KCk9PmhxZSxwcmV2aW91c1RodXJzZGF5OigpPT5ncWUscHJldmlvdXNUdWVzZGF5OigpPT5icWUscHJldmlvdXNXZWRuZXNkYXk6KCk9PnlxZSxxdWFydGVyc1RvTW9udGhzOigpPT5NcWUscXVhcnRlcnNUb1llYXJzOigpPT5rcWUscm91bmRUb05lYXJlc3RIb3VyczooKT0+Q3FlLHJvdW5kVG9OZWFyZXN0TWludXRlczooKT0+VHFlLHNlY29uZHNUb0hvdXJzOigpPT5BcWUsc2Vjb25kc1RvTWlsbGlzZWNvbmRzOigpPT5EcWUsc2Vjb25kc1RvTWludXRlczooKT0+TnFlLHNldDooKT0+SXFlLHNldERhdGU6KCk9Pk9xZSxzZXREYXk6KCk9PnpvLHNldERheU9mWWVhcjooKT0+UnFlLHNldERlZmF1bHRPcHRpb25zOigpPT5xcWUsc2V0SG91cnM6KCk9PlVxZSxzZXRJU09EYXk6KCk9Pk5CLHNldElTT1dlZWs6KCk9PkxCLHNldElTT1dlZWtZZWFyOigpPT52TyxzZXRNaWxsaXNlY29uZHM6KCk9PldxZSxzZXRNaW51dGVzOigpPT5ZcWUsc2V0TW9udGg6KCk9PkpjLHNldFF1YXJ0ZXI6KCk9PlhxZSxzZXRTZWNvbmRzOigpPT5LcWUsc2V0V2VlazooKT0+U0Isc2V0V2Vla1llYXI6KCk9PmVWZSxzZXRZZWFyOigpPT5hVmUsc3RhcnRPZkRheTooKT0+a3Isc3RhcnRPZkRlY2FkZTooKT0+aVZlLHN0YXJ0T2ZIb3VyOigpPT54OCxzdGFydE9mSVNPV2VlazooKT0+QTEsc3RhcnRPZklTT1dlZWtZZWFyOigpPT5vYSxzdGFydE9mTWludXRlOigpPT5iOCxzdGFydE9mTW9udGg6KCk9PnZvLHN0YXJ0T2ZRdWFydGVyOigpPT5UcixzdGFydE9mU2Vjb25kOigpPT52OCxzdGFydE9mVG9kYXk6KCk9PnNWZSxzdGFydE9mVG9tb3Jyb3c6KCk9PmxWZSxzdGFydE9mV2VlazooKT0+YTEsc3RhcnRPZldlZWtZZWFyOigpPT5CcyxzdGFydE9mWWVhcjooKT0+VWMsc3RhcnRPZlllc3RlcmRheTooKT0+ZFZlLHN1YjooKT0+dVZlLHN1YkJ1c2luZXNzRGF5czooKT0+aFZlLHN1YkRheXM6KCk9PmtvLHN1YkhvdXJzOigpPT5nVmUsc3ViSVNPV2Vla1llYXJzOigpPT5QTyxzdWJNaWxsaXNlY29uZHM6KCk9PmJWZSxzdWJNaW51dGVzOigpPT55VmUsc3ViTW9udGhzOigpPT5jUixzdWJRdWFydGVyczooKT0+TVZlLHN1YlNlY29uZHM6KCk9PmtWZSxzdWJXZWVrczooKT0+Q1ZlLHN1YlllYXJzOigpPT5UVmUsdG9EYXRlOigpPT5lZSx0cmFuc3Bvc2U6KCk9PmNCLHdlZWtzVG9EYXlzOigpPT5BVmUseWVhcnNUb0RheXM6KCk9PkRWZSx5ZWFyc1RvTW9udGhzOigpPT5OVmUseWVhcnNUb1F1YXJ0ZXJzOigpPT5JVmV9KTt2YXIgT1ZlPW4oKCk9PntHWSgpO1hZKCk7eXIoKTtRWSgpO0pZKCk7aTgoKTt3TygpO0VjKCk7TU8oKTtlWigpO3M4KCk7dFooKTtzRmUoKTtsRmUoKTtpWigpO2RGZSgpO0VzKCk7dUZlKCk7S2UoKTtPMSgpO2hGZSgpO2dGZSgpO2xpKCk7c1ooKTtiRmUoKTtBTygpO2xaKCk7JE8oKTtETygpO0VPKCk7Tk8oKTt3RmUoKTtJTygpO0ZPKCk7bDgoKTt6RmUoKTtjOCgpO1NGZSgpO2ZaKCk7dVooKTtMRmUoKTtfRmUoKTskRmUoKTtFRmUoKTtQRmUoKTtVTygpO0ZGZSgpO0JGZSgpO0hGZSgpO09PKCk7VkZlKCk7akZlKCk7R0ZlKCk7WkZlKCk7UUZlKCk7Qk8oKTtKRmUoKTt0T2UoKTtyT2UoKTtvT2UoKTtoWigpO3BaKCk7bk9lKCk7dlooKTt5WigpO3daKCk7QU9lKCk7RE9lKCk7Tk9lKCk7SU9lKCk7T09lKCk7Uk9lKCk7cU9lKCk7VU9lKCk7V09lKCk7WU9lKCk7TVooKTttOCgpO21aKCk7elooKTtYT2UoKTtLT2UoKTtTWigpO2VCZSgpO0NaKCk7WE8oKTttbygpO2FCZSgpO2lCZSgpO3NCZSgpO2xCZSgpO2RCZSgpO25aKCk7dUJlKCk7aEJlKCk7Z0JlKCk7S08oKTtiQmUoKTtmOCgpO3lCZSgpO01CZSgpO2tCZSgpO0NCZSgpO1RCZSgpO0FCZSgpO0RCZSgpO05CZSgpO0lCZSgpO09CZSgpO1JCZSgpO29aKCk7cUJlKCk7VUJlKCk7V0JlKCk7WUJlKCk7WEJlKCk7ZFooKTtrWigpO0FSZSgpO0RSZSgpO05SZSgpO0ZjKCk7UFooKTtJWigpO0lSZSgpO09aKCk7QlooKTtSWigpO3FaKCk7SkIoKTtWWigpO1lZKCk7WlkoKTtPUmUoKTtSUmUoKTtxUmUoKTtVUmUoKTtXUmUoKTtZUmUoKTtYUmUoKTtLUmUoKTtlSGUoKTthSGUoKTtpSGUoKTtzSGUoKTtjaSgpO2xIZSgpO3I4KCk7ZEhlKCk7dUhlKCk7aEhlKCk7Z0hlKCk7YkhlKCk7TFooKTt5SGUoKTtVWigpO01IZSgpO2tIZSgpO2FaKCk7Q0hlKCk7VEhlKCk7QUhlKCk7REhlKCk7clooKTtOSGUoKTtJSGUoKTtPSGUoKTtSSGUoKTtxSGUoKTtmaSgpO1VIZSgpO1dIZSgpO1lIZSgpO1hIZSgpO0tIZSgpO2VxZSgpO2FxZSgpO0VaKCk7b3FlKCk7bnFlKCk7dWkoKTtjcWUoKTtmcWUoKTtwcWUoKTttcWUoKTt4cWUoKTt2cWUoKTt3cWUoKTt6cWUoKTtTcWUoKTtMcWUoKTtfcWUoKTskcWUoKTtFcWUoKTtQcWUoKTtGcWUoKTtCcWUoKTtnOCgpO0hxZSgpO1ZxZSgpO2pxZSgpO0RaKCk7JFooKTtLWSgpO0dxZSgpO1pxZSgpO2xSKCk7UXFlKCk7SnFlKCk7QVooKTt0VmUoKTtyVmUoKTtvOCgpO29WZSgpO05aKCk7enIoKTtOYygpO0ZaKCk7ZDgoKTtWTygpO0haKCk7blZlKCk7Y1ZlKCk7VWEoKTtRTygpO1dPKCk7ZlZlKCk7cFZlKCk7bVZlKCk7eTgoKTt4VmUoKTtjWigpO3ZWZSgpO3dWZSgpO1daKCk7elZlKCk7U1ZlKCk7TFZlKCk7X1ZlKCk7TWUoKTtUWigpOyRWZSgpO0VWZSgpO1BWZSgpO0ZWZSgpfSk7dmFyIEJWZT1jdCgoR1osWVopPT57KGZ1bmN0aW9uKHQsZSl7dHlwZW9mIEdaPT0ib2JqZWN0IiYmdHlwZW9mIFlaPCJ1Ij9ZWi5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqcz1lKCl9KShHWiwoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9MWUzLGU9NmU0LGE9MzZlNSxyPSJtaWxsaXNlY29uZCIsaT0ic2Vjb25kIixvPSJtaW51dGUiLHM9ImhvdXIiLGw9ImRheSIsZj0id2VlayIsYz0ibW9udGgiLHU9InF1YXJ0ZXIiLGQ9InllYXIiLGg9ImRhdGUiLGc9IkludmFsaWQgRGF0ZSIsYj0vXihcZHs0fSlbLS9dPyhcZHsxLDJ9KT9bLS9dPyhcZHswLDJ9KVtUdFxzXSooXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Wy46XT8oXGQrKT8kLyx4PS9cWyhbXlxdXSspXXxZezEsNH18TXsxLDR9fER7MSwyfXxkezEsNH18SHsxLDJ9fGh7MSwyfXxhfEF8bXsxLDJ9fHN7MSwyfXxaezEsMn18U1NTL2csbT17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpmdW5jdGlvbihrKXt2YXIgTj1bInRoIiwic3QiLCJuZCIsInJkIl0sUz1rJTEwMDtyZXR1cm4iWyIraysoTlsoUy0yMCklMTBdfHxOW1NdfHxOWzBdKSsiXSJ9fSx2PWZ1bmN0aW9uKGssTixTKXt2YXIgVD1TdHJpbmcoayk7cmV0dXJuIVR8fFQubGVuZ3RoPj1OP2s6IiIrQXJyYXkoTisxLVQubGVuZ3RoKS5qb2luKFMpK2t9LHk9e3M6dix6OmZ1bmN0aW9uKGspe3ZhciBOPS1rLnV0Y09mZnNldCgpLFM9TWF0aC5hYnMoTiksVD1NYXRoLmZsb29yKFMvNjApLFI9UyU2MDtyZXR1cm4oTjw9MD8iKyI6Ii0iKSt2KFQsMiwiMCIpKyI6Iit2KFIsMiwiMCIpfSxtOmZ1bmN0aW9uIGsoTixTKXtpZihOLmRhdGUoKTxTLmRhdGUoKSlyZXR1cm4tayhTLE4pO3ZhciBUPTEyKihTLnllYXIoKS1OLnllYXIoKSkrKFMubW9udGgoKS1OLm1vbnRoKCkpLFI9Ti5jbG9uZSgpLmFkZChULGMpLEE9Uy1SPDAsRj1OLmNsb25lKCkuYWRkKFQrKEE/LTE6MSksYyk7cmV0dXJuKygtKFQrKFMtUikvKEE/Ui1GOkYtUikpfHwwKX0sYTpmdW5jdGlvbihrKXtyZXR1cm4gazwwP01hdGguY2VpbChrKXx8MDpNYXRoLmZsb29yKGspfSxwOmZ1bmN0aW9uKGspe3JldHVybntNOmMseTpkLHc6ZixkOmwsRDpoLGg6cyxtOm8sczppLG1zOnIsUTp1fVtrXXx8U3RyaW5nKGt8fCIiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLywiIil9LHU6ZnVuY3Rpb24oayl7cmV0dXJuIGs9PT12b2lkIDB9fSx3PSJlbiIsRT17fTtFW3ddPW07dmFyIEM9IiRpc0RheWpzT2JqZWN0Iix6PWZ1bmN0aW9uKGspe3JldHVybiBrIGluc3RhbmNlb2YgSHx8ISgha3x8IWtbQ10pfSxQPWZ1bmN0aW9uIGsoTixTLFQpe3ZhciBSO2lmKCFOKXJldHVybiB3O2lmKHR5cGVvZiBOPT0ic3RyaW5nIil7dmFyIEE9Ti50b0xvd2VyQ2FzZSgpO0VbQV0mJihSPUEpLFMmJihFW0FdPVMsUj1BKTt2YXIgRj1OLnNwbGl0KCItIik7aWYoIVImJkYubGVuZ3RoPjEpcmV0dXJuIGsoRlswXSl9ZWxzZXt2YXIgYWU9Ti5uYW1lO0VbYWVdPU4sUj1hZX1yZXR1cm4hVCYmUiYmKHc9UiksUnx8IVQmJnd9LF89ZnVuY3Rpb24oayxOKXtpZih6KGspKXJldHVybiBrLmNsb25lKCk7dmFyIFM9dHlwZW9mIE49PSJvYmplY3QiP046e307cmV0dXJuIFMuZGF0ZT1rLFMuYXJncz1hcmd1bWVudHMsbmV3IEgoUyl9LCQ9eTskLmw9UCwkLmk9eiwkLnc9ZnVuY3Rpb24oayxOKXtyZXR1cm4gXyhrLHtsb2NhbGU6Ti4kTCx1dGM6Ti4kdSx4Ok4uJHgsJG9mZnNldDpOLiRvZmZzZXR9KX07dmFyIEg9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gayhTKXt0aGlzLiRMPVAoUy5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShTKSx0aGlzLiR4PXRoaXMuJHh8fFMueHx8e30sdGhpc1tDXT0hMH12YXIgTj1rLnByb3RvdHlwZTtyZXR1cm4gTi5wYXJzZT1mdW5jdGlvbihTKXt0aGlzLiRkPShmdW5jdGlvbihUKXt2YXIgUj1ULmRhdGUsQT1ULnV0YztpZihSPT09bnVsbClyZXR1cm4gbmV3IERhdGUoTmFOKTtpZigkLnUoUikpcmV0dXJuIG5ldyBEYXRlO2lmKFIgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShSKTtpZih0eXBlb2YgUj09InN0cmluZyImJiEvWiQvaS50ZXN0KFIpKXt2YXIgRj1SLm1hdGNoKGIpO2lmKEYpe3ZhciBhZT1GWzJdLTF8fDAsVj0oRls3XXx8IjAiKS5zdWJzdHJpbmcoMCwzKTtyZXR1cm4gQT9uZXcgRGF0ZShEYXRlLlVUQyhGWzFdLGFlLEZbM118fDEsRls0XXx8MCxGWzVdfHwwLEZbNl18fDAsVikpOm5ldyBEYXRlKEZbMV0sYWUsRlszXXx8MSxGWzRdfHwwLEZbNV18fDAsRls2XXx8MCxWKX19cmV0dXJuIG5ldyBEYXRlKFIpfSkoUyksdGhpcy5pbml0KCl9LE4uaW5pdD1mdW5jdGlvbigpe3ZhciBTPXRoaXMuJGQ7dGhpcy4keT1TLmdldEZ1bGxZZWFyKCksdGhpcy4kTT1TLmdldE1vbnRoKCksdGhpcy4kRD1TLmdldERhdGUoKSx0aGlzLiRXPVMuZ2V0RGF5KCksdGhpcy4kSD1TLmdldEhvdXJzKCksdGhpcy4kbT1TLmdldE1pbnV0ZXMoKSx0aGlzLiRzPVMuZ2V0U2Vjb25kcygpLHRoaXMuJG1zPVMuZ2V0TWlsbGlzZWNvbmRzKCl9LE4uJHV0aWxzPWZ1bmN0aW9uKCl7cmV0dXJuICR9LE4uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvU3RyaW5nKCkhPT1nfSxOLmlzU2FtZT1mdW5jdGlvbihTLFQpe3ZhciBSPV8oUyk7cmV0dXJuIHRoaXMuc3RhcnRPZihUKTw9UiYmUjw9dGhpcy5lbmRPZihUKX0sTi5pc0FmdGVyPWZ1bmN0aW9uKFMsVCl7cmV0dXJuIF8oUyk8dGhpcy5zdGFydE9mKFQpfSxOLmlzQmVmb3JlPWZ1bmN0aW9uKFMsVCl7cmV0dXJuIHRoaXMuZW5kT2YoVCk8XyhTKX0sTi4kZz1mdW5jdGlvbihTLFQsUil7cmV0dXJuICQudShTKT90aGlzW1RdOnRoaXMuc2V0KFIsUyl9LE4udW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LE4udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLmdldFRpbWUoKX0sTi5zdGFydE9mPWZ1bmN0aW9uKFMsVCl7dmFyIFI9dGhpcyxBPSEhJC51KFQpfHxULEY9JC5wKFMpLGFlPWZ1bmN0aW9uKEksTyl7dmFyIEc9JC53KFIuJHU/RGF0ZS5VVEMoUi4keSxPLEkpOm5ldyBEYXRlKFIuJHksTyxJKSxSKTtyZXR1cm4gQT9HOkcuZW5kT2YobCl9LFY9ZnVuY3Rpb24oSSxPKXtyZXR1cm4gJC53KFIudG9EYXRlKClbSV0uYXBwbHkoUi50b0RhdGUoInMiKSwoQT9bMCwwLDAsMF06WzIzLDU5LDU5LDk5OV0pLnNsaWNlKE8pKSxSKX0sU2U9dGhpcy4kVyx6ZT10aGlzLiRNLFc9dGhpcy4kRCxOZT0ic2V0IisodGhpcy4kdT8iVVRDIjoiIik7c3dpdGNoKEYpe2Nhc2UgZDpyZXR1cm4gQT9hZSgxLDApOmFlKDMxLDExKTtjYXNlIGM6cmV0dXJuIEE/YWUoMSx6ZSk6YWUoMCx6ZSsxKTtjYXNlIGY6dmFyIFJlPXRoaXMuJGxvY2FsZSgpLndlZWtTdGFydHx8MCxYPShTZTxSZT9TZSs3OlNlKS1SZTtyZXR1cm4gYWUoQT9XLVg6VysoNi1YKSx6ZSk7Y2FzZSBsOmNhc2UgaDpyZXR1cm4gVihOZSsiSG91cnMiLDApO2Nhc2UgczpyZXR1cm4gVihOZSsiTWludXRlcyIsMSk7Y2FzZSBvOnJldHVybiBWKE5lKyJTZWNvbmRzIiwyKTtjYXNlIGk6cmV0dXJuIFYoTmUrIk1pbGxpc2Vjb25kcyIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sTi5lbmRPZj1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5zdGFydE9mKFMsITEpfSxOLiRzZXQ9ZnVuY3Rpb24oUyxUKXt2YXIgUixBPSQucChTKSxGPSJzZXQiKyh0aGlzLiR1PyJVVEMiOiIiKSxhZT0oUj17fSxSW2xdPUYrIkRhdGUiLFJbaF09RisiRGF0ZSIsUltjXT1GKyJNb250aCIsUltkXT1GKyJGdWxsWWVhciIsUltzXT1GKyJIb3VycyIsUltvXT1GKyJNaW51dGVzIixSW2ldPUYrIlNlY29uZHMiLFJbcl09RisiTWlsbGlzZWNvbmRzIixSKVtBXSxWPUE9PT1sP3RoaXMuJEQrKFQtdGhpcy4kVyk6VDtpZihBPT09Y3x8QT09PWQpe3ZhciBTZT10aGlzLmNsb25lKCkuc2V0KGgsMSk7U2UuJGRbYWVdKFYpLFNlLmluaXQoKSx0aGlzLiRkPVNlLnNldChoLE1hdGgubWluKHRoaXMuJEQsU2UuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgYWUmJnRoaXMuJGRbYWVdKFYpO3JldHVybiB0aGlzLmluaXQoKSx0aGlzfSxOLnNldD1mdW5jdGlvbihTLFQpe3JldHVybiB0aGlzLmNsb25lKCkuJHNldChTLFQpfSxOLmdldD1mdW5jdGlvbihTKXtyZXR1cm4gdGhpc1skLnAoUyldKCl9LE4uYWRkPWZ1bmN0aW9uKFMsVCl7dmFyIFIsQT10aGlzO1M9TnVtYmVyKFMpO3ZhciBGPSQucChUKSxhZT1mdW5jdGlvbih6ZSl7dmFyIFc9XyhBKTtyZXR1cm4gJC53KFcuZGF0ZShXLmRhdGUoKStNYXRoLnJvdW5kKHplKlMpKSxBKX07aWYoRj09PWMpcmV0dXJuIHRoaXMuc2V0KGMsdGhpcy4kTStTKTtpZihGPT09ZClyZXR1cm4gdGhpcy5zZXQoZCx0aGlzLiR5K1MpO2lmKEY9PT1sKXJldHVybiBhZSgxKTtpZihGPT09ZilyZXR1cm4gYWUoNyk7dmFyIFY9KFI9e30sUltvXT1lLFJbc109YSxSW2ldPXQsUilbRl18fDEsU2U9dGhpcy4kZC5nZXRUaW1lKCkrUypWO3JldHVybiAkLncoU2UsdGhpcyl9LE4uc3VidHJhY3Q9ZnVuY3Rpb24oUyxUKXtyZXR1cm4gdGhpcy5hZGQoLTEqUyxUKX0sTi5mb3JtYXQ9ZnVuY3Rpb24oUyl7dmFyIFQ9dGhpcyxSPXRoaXMuJGxvY2FsZSgpO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gUi5pbnZhbGlkRGF0ZXx8Zzt2YXIgQT1TfHwiWVlZWS1NTS1ERFRISDptbTpzc1oiLEY9JC56KHRoaXMpLGFlPXRoaXMuJEgsVj10aGlzLiRtLFNlPXRoaXMuJE0semU9Ui53ZWVrZGF5cyxXPVIubW9udGhzLE5lPVIubWVyaWRpZW0sUmU9ZnVuY3Rpb24oTyxHLGosc2Upe3JldHVybiBPJiYoT1tHXXx8TyhULEEpKXx8altHXS5zbGljZSgwLHNlKX0sWD1mdW5jdGlvbihPKXtyZXR1cm4gJC5zKGFlJTEyfHwxMixPLCIwIil9LEk9TmV8fGZ1bmN0aW9uKE8sRyxqKXt2YXIgc2U9TzwxMj8iQU0iOiJQTSI7cmV0dXJuIGo/c2UudG9Mb3dlckNhc2UoKTpzZX07cmV0dXJuIEEucmVwbGFjZSh4LChmdW5jdGlvbihPLEcpe3JldHVybiBHfHwoZnVuY3Rpb24oail7c3dpdGNoKGope2Nhc2UiWVkiOnJldHVybiBTdHJpbmcoVC4keSkuc2xpY2UoLTIpO2Nhc2UiWVlZWSI6cmV0dXJuICQucyhULiR5LDQsIjAiKTtjYXNlIk0iOnJldHVybiBTZSsxO2Nhc2UiTU0iOnJldHVybiAkLnMoU2UrMSwyLCIwIik7Y2FzZSJNTU0iOnJldHVybiBSZShSLm1vbnRoc1Nob3J0LFNlLFcsMyk7Y2FzZSJNTU1NIjpyZXR1cm4gUmUoVyxTZSk7Y2FzZSJEIjpyZXR1cm4gVC4kRDtjYXNlIkREIjpyZXR1cm4gJC5zKFQuJEQsMiwiMCIpO2Nhc2UiZCI6cmV0dXJuIFN0cmluZyhULiRXKTtjYXNlImRkIjpyZXR1cm4gUmUoUi53ZWVrZGF5c01pbixULiRXLHplLDIpO2Nhc2UiZGRkIjpyZXR1cm4gUmUoUi53ZWVrZGF5c1Nob3J0LFQuJFcsemUsMyk7Y2FzZSJkZGRkIjpyZXR1cm4gemVbVC4kV107Y2FzZSJIIjpyZXR1cm4gU3RyaW5nKGFlKTtjYXNlIkhIIjpyZXR1cm4gJC5zKGFlLDIsIjAiKTtjYXNlImgiOnJldHVybiBYKDEpO2Nhc2UiaGgiOnJldHVybiBYKDIpO2Nhc2UiYSI6cmV0dXJuIEkoYWUsViwhMCk7Y2FzZSJBIjpyZXR1cm4gSShhZSxWLCExKTtjYXNlIm0iOnJldHVybiBTdHJpbmcoVik7Y2FzZSJtbSI6cmV0dXJuICQucyhWLDIsIjAiKTtjYXNlInMiOnJldHVybiBTdHJpbmcoVC4kcyk7Y2FzZSJzcyI6cmV0dXJuICQucyhULiRzLDIsIjAiKTtjYXNlIlNTUyI6cmV0dXJuICQucyhULiRtcywzLCIwIik7Y2FzZSJaIjpyZXR1cm4gRn1yZXR1cm4gbnVsbH0pKE8pfHxGLnJlcGxhY2UoIjoiLCIiKX0pKX0sTi51dGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTUqLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX0sTi5kaWZmPWZ1bmN0aW9uKFMsVCxSKXt2YXIgQSxGPXRoaXMsYWU9JC5wKFQpLFY9XyhTKSxTZT0oVi51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSplLHplPXRoaXMtVixXPWZ1bmN0aW9uKCl7cmV0dXJuICQubShGLFYpfTtzd2l0Y2goYWUpe2Nhc2UgZDpBPVcoKS8xMjticmVhaztjYXNlIGM6QT1XKCk7YnJlYWs7Y2FzZSB1OkE9VygpLzM7YnJlYWs7Y2FzZSBmOkE9KHplLVNlKS82MDQ4ZTU7YnJlYWs7Y2FzZSBsOkE9KHplLVNlKS84NjRlNTticmVhaztjYXNlIHM6QT16ZS9hO2JyZWFrO2Nhc2UgbzpBPXplL2U7YnJlYWs7Y2FzZSBpOkE9emUvdDticmVhaztkZWZhdWx0OkE9emV9cmV0dXJuIFI/QTokLmEoQSl9LE4uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmRPZihjKS4kRH0sTi4kbG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIEVbdGhpcy4kTF19LE4ubG9jYWxlPWZ1bmN0aW9uKFMsVCl7aWYoIVMpcmV0dXJuIHRoaXMuJEw7dmFyIFI9dGhpcy5jbG9uZSgpLEE9UChTLFQsITApO3JldHVybiBBJiYoUi4kTD1BKSxSfSxOLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuICQudyh0aGlzLiRkLHRoaXMpfSxOLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LE4udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxOLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKX0sTi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCl9LGt9KSgpLEw9SC5wcm90b3R5cGU7cmV0dXJuIF8ucHJvdG90eXBlPUwsW1siJG1zIixyXSxbIiRzIixpXSxbIiRtIixvXSxbIiRIIixzXSxbIiRXIixsXSxbIiRNIixjXSxbIiR5IixkXSxbIiREIixoXV0uZm9yRWFjaCgoZnVuY3Rpb24oayl7TFtrWzFdXT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy4kZyhOLGtbMF0sa1sxXSl9fSkpLF8uZXh0ZW5kPWZ1bmN0aW9uKGssTil7cmV0dXJuIGsuJGl8fChrKE4sSCxfKSxrLiRpPSEwKSxffSxfLmxvY2FsZT1QLF8uaXNEYXlqcz16LF8udW5peD1mdW5jdGlvbihrKXtyZXR1cm4gXygxZTMqayl9LF8uZW49RVt3XSxfLkxzPUUsXy5wPXt9LF99KSl9KTt2YXIgUlZlPWN0KChaWixYWik9PnsoZnVuY3Rpb24odCxlKXt0eXBlb2YgWlo9PSJvYmplY3QiJiZ0eXBlb2YgWFo8InUiP1haLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl9pc1RvZGF5PWUoKX0pKFpaLChmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZnVuY3Rpb24odCxlLGEpe2UucHJvdG90eXBlLmlzVG9kYXk9ZnVuY3Rpb24oKXt2YXIgcj0iWVlZWS1NTS1ERCIsaT1hKCk7cmV0dXJuIHRoaXMuZm9ybWF0KHIpPT09aS5mb3JtYXQocil9fX0pKX0pO2Z1bmN0aW9uIE1VdCh0KXtyZXR1cm57ZGF5czpNYXRoLnRydW5jKHQvODY0ZTUpLGhvdXJzOk1hdGgudHJ1bmModC8zNmU1JTI0KSxtaW51dGVzOk1hdGgudHJ1bmModC82ZTQlNjApLHNlY29uZHM6TWF0aC50cnVuYyh0LzFlMyU2MCksbWlsbGlzZWNvbmRzOk1hdGgudHJ1bmModCUxZTMpLG1pY3Jvc2Vjb25kczpNYXRoLnRydW5jKEhWZSh0KjFlMyklMWUzKSxuYW5vc2Vjb25kczpNYXRoLnRydW5jKEhWZSh0KjFlNiklMWUzKX19ZnVuY3Rpb24gelV0KHQpe3JldHVybntkYXlzOnQvODY0MDAwMDBuLGhvdXJzOnQvMzYwMDAwMG4lMjRuLG1pbnV0ZXM6dC82MDAwMG4lNjBuLHNlY29uZHM6dC8xMDAwbiU2MG4sbWlsbGlzZWNvbmRzOnQlMTAwMG4sbWljcm9zZWNvbmRzOjBuLG5hbm9zZWNvbmRzOjBufX1mdW5jdGlvbiBRWih0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2UibnVtYmVyIjp7aWYoTnVtYmVyLmlzRmluaXRlKHQpKXJldHVybiBNVXQodCk7YnJlYWt9Y2FzZSJiaWdpbnQiOnJldHVybiB6VXQodCl9dGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmaW5pdGUgbnVtYmVyIG9yIGJpZ2ludCIpfXZhciBIVmUscVZlPW4oKCk9PntIVmU9dD0+TnVtYmVyLmlzRmluaXRlKHQpP3Q6MH0pO2Z1bmN0aW9uIHo4KHQsZSl7bGV0IGE9dHlwZW9mIHQ9PSJiaWdpbnQiO2lmKCFhJiYhTnVtYmVyLmlzRmluaXRlKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZmluaXRlIG51bWJlciBvciBiaWdpbnQiKTtlPXsuLi5lfTtsZXQgcj10PDA/Ii0iOiIiO3Q9dDwwPy10OnQsZS5jb2xvbk5vdGF0aW9uJiYoZS5jb21wYWN0PSExLGUuZm9ybWF0U3ViTWlsbGlzZWNvbmRzPSExLGUuc2VwYXJhdGVNaWxsaXNlY29uZHM9ITEsZS52ZXJib3NlPSExKSxlLmNvbXBhY3QmJihlLnVuaXRDb3VudD0xLGUuc2Vjb25kc0RlY2ltYWxEaWdpdHM9MCxlLm1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHM9MCk7bGV0IGk9W10sbz0odSxkKT0+e2xldCBoPU1hdGguZmxvb3IodSoxMCoqZCtDVXQpO3JldHVybihNYXRoLnJvdW5kKGgpLzEwKipkKS50b0ZpeGVkKGQpfSxzPSh1LGQsaCxnKT0+e2lmKCEoKGkubGVuZ3RoPT09MHx8IWUuY29sb25Ob3RhdGlvbikmJmtVdCh1KSYmIShlLmNvbG9uTm90YXRpb24mJmg9PT0ibSIpKSl7aWYoZz8/PVN0cmluZyh1KSxlLmNvbG9uTm90YXRpb24pe2xldCBiPWcuaW5jbHVkZXMoIi4iKT9nLnNwbGl0KCIuIilbMF0ubGVuZ3RoOmcubGVuZ3RoLHg9aS5sZW5ndGg+MD8yOjE7Zz0iMCIucmVwZWF0KE1hdGgubWF4KDAseC1iKSkrZ31lbHNlIGcrPWUudmVyYm9zZT8iICIrU1V0KGQsdSk6aDtpLnB1c2goZyl9fSxsPVFaKHQpLGY9QmlnSW50KGwuZGF5cyk7aWYoZS5oaWRlWWVhckFuZERheXM/cyhCaWdJbnQoZikqMjRuK0JpZ0ludChsLmhvdXJzKSwiaG91ciIsImgiKTooZS5oaWRlWWVhcj9zKGYsImRheSIsImQiKToocyhmLzM2NW4sInllYXIiLCJ5IikscyhmJTM2NW4sImRheSIsImQiKSkscyhOdW1iZXIobC5ob3VycyksImhvdXIiLCJoIikpLHMoTnVtYmVyKGwubWludXRlcyksIm1pbnV0ZSIsIm0iKSwhZS5oaWRlU2Vjb25kcylpZihlLnNlcGFyYXRlTWlsbGlzZWNvbmRzfHxlLmZvcm1hdFN1Yk1pbGxpc2Vjb25kc3x8IWUuY29sb25Ob3RhdGlvbiYmdDwxZTMmJiFlLnN1YlNlY29uZHNBc0RlY2ltYWxzKXtsZXQgdT1OdW1iZXIobC5zZWNvbmRzKSxkPU51bWJlcihsLm1pbGxpc2Vjb25kcyksaD1OdW1iZXIobC5taWNyb3NlY29uZHMpLGc9TnVtYmVyKGwubmFub3NlY29uZHMpO2lmKHModSwic2Vjb25kIiwicyIpLGUuZm9ybWF0U3ViTWlsbGlzZWNvbmRzKXMoZCwibWlsbGlzZWNvbmQiLCJtcyIpLHMoaCwibWljcm9zZWNvbmQiLCJceEI1cyIpLHMoZywibmFub3NlY29uZCIsIm5zIik7ZWxzZXtsZXQgYj1kK2gvMWUzK2cvMWU2LHg9dHlwZW9mIGUubWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cz09Im51bWJlciI/ZS5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzOjAsbT1iPj0xP01hdGgucm91bmQoYik6TWF0aC5jZWlsKGIpLHY9eD9iLnRvRml4ZWQoeCk6bTtzKE51bWJlci5wYXJzZUZsb2F0KHYpLCJtaWxsaXNlY29uZCIsIm1zIix2KX19ZWxzZXtsZXQgdT0oYT9OdW1iZXIodCVMVXQpOnQpLzFlMyU2MCxkPXR5cGVvZiBlLnNlY29uZHNEZWNpbWFsRGlnaXRzPT0ibnVtYmVyIj9lLnNlY29uZHNEZWNpbWFsRGlnaXRzOjEsaD1vKHUsZCksZz1lLmtlZXBEZWNpbWFsc09uV2hvbGVTZWNvbmRzP2g6aC5yZXBsYWNlKC9cLjArJC8sIiIpO3MoTnVtYmVyLnBhcnNlRmxvYXQoZyksInNlY29uZCIsInMiLGcpfWlmKGkubGVuZ3RoPT09MClyZXR1cm4gcisiMCIrKGUudmVyYm9zZT8iIG1pbGxpc2Vjb25kcyI6Im1zIik7bGV0IGM9ZS5jb2xvbk5vdGF0aW9uPyI6IjoiICI7cmV0dXJuIHR5cGVvZiBlLnVuaXRDb3VudD09Im51bWJlciImJihpPWkuc2xpY2UoMCxNYXRoLm1heChlLnVuaXRDb3VudCwxKSkpLHIraS5qb2luKGMpfXZhciBrVXQsU1V0LENVdCxMVXQsVlZlPW4oKCk9PntxVmUoKTtrVXQ9dD0+dD09PTB8fHQ9PT0wbixTVXQ9KHQsZSk9PmU9PT0xfHxlPT09MW4/dDpgJHt0fXNgLENVdD0xZS03LExVdD0yNG4qNjBuKjYwbioxMDAwbn0pO3ZhciBxcyxVVmUscGk9bigoKT0+e2s4KCk7aWkoKTtwMigpO2VGZSgpO09WZSgpO3FzPU4yKEJWZSgpLDEpLFVWZT1OMihSVmUoKSwxKTtWVmUoKTtxcy5kZWZhdWx0LmV4dGVuZChVVmUuZGVmYXVsdCl9KTt2YXIgalZlLFdWZT1uKCgpPT57cGkoKTtqVmU9Y2xhc3N7Z2V0IGNyb25BcnJheSgpe3JldHVybiB0aGlzLmNyb25FeHByZXNzaW9uLnNwbGl0KCIgIil9Y29uc3RydWN0b3IoZSl7aWYodGhpcy5jcm9uRXhwcmVzc2lvbj1lLHRoaXMuY3JvbkFycmF5Lmxlbmd0aDw2KXRocm93IG5ldyBFcnJvcigiQ3JvblBhcnNlciBuZWVkcyBzZWNvbmQgbGV2ZWwgYWNjdXJhY3kiKX1nZXROZXh0UGFydE1hdGNoKGUsYSxyKXtpZihlPT09IioiKXJldHVybiBhO2lmKGUuaW5jbHVkZXMoIi8iKSl7bGV0IGk9cGFyc2VJbnQoZS5zcGxpdCgiLyIpWzFdLDEwKSxvPXM9PnMlaT09PTA/czpvKHMrMSk7cmV0dXJuIG8oYSl9aWYocGFyc2VJbnQoZSwxMCl8fGU9PT0iMCIpcmV0dXJuIHBhcnNlSW50KGUsMTApfW1zVG9OZXh0KCl7bGV0IGU9dGhpcy5jcm9uQXJyYXksYT1lWzBdLHI9ZVsxXSxpPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sZj1uZXcgRGF0ZSxjPWYuZ2V0U2Vjb25kcygpKzEsdT1mLmdldE1pbnV0ZXMoKSxkPWYuZ2V0SG91cnMoKSxoPWYuZ2V0RGF0ZSgpLGc9Zi5nZXRNb250aCgpLGI9Zi5nZXRGdWxsWWVhcigpLHg9dGhpcy5nZXROZXh0UGFydE1hdGNoKGEsYyw1OSk7eDxjJiYodT0odSsxKSU1OSk7bGV0IG09dGhpcy5nZXROZXh0UGFydE1hdGNoKHIsdSw1OSk7bTx1JiYoZD0oZCsxKSUyMyk7bGV0IHY9dGhpcy5nZXROZXh0UGFydE1hdGNoKGksZCwyMyk7djxkJiYoaD0oaCsxKSUzMCk7bGV0IHk9aDt5PGgmJihnPShnKzEpJTExKTtsZXQgdz1nO3c8ZyYmKGI9YisxKTtsZXQgRT1iO3JldHVybiBuZXcgRGF0ZShFLHcseSx2LG0seCkuZ2V0VGltZSgpLURhdGUubm93KCl9fX0pO3ZhciBTOCxLWj1uKCgpPT57cGkoKTtKWigpO1dWZSgpO1M4PWNsYXNze2NvbnN0cnVjdG9yKGUsYSxyKXt0aGlzLnN0YXR1cz0iaW5pdGlhbCIsdGhpcy5uZXh0RXhlY3V0aW9uVW5peD0wLHRoaXMuY3JvbkV4cHJlc3Npb249YSx0aGlzLmpvYkZ1bmN0aW9uPXIsdGhpcy5jcm9uUGFyc2VyPW5ldyB0OC5Dcm9uKGEpfWNoZWNrRXhlY3V0aW9uKCl7aWYodGhpcy5uZXh0RXhlY3V0aW9uVW5peD09PTAmJnRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKSxEYXRlLm5vdygpPnRoaXMubmV4dEV4ZWN1dGlvblVuaXgpe2xldCBlPXRoaXMuam9iRnVuY3Rpb24odGhpcy5uZXh0RXhlY3V0aW9uVW5peCk7ZSBpbnN0YW5jZW9mIFByb21pc2UmJmUuY2F0Y2goYT0+Y29uc29sZS5sb2coYSkpLHRoaXMubmV4dEV4ZWN1dGlvblVuaXg9dGhpcy5nZXROZXh0RXhlY3V0aW9uVGltZSgpfXJldHVybiB0aGlzLm5leHRFeGVjdXRpb25Vbml4fWdldE5leHRFeGVjdXRpb25UaW1lKCl7cmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXg9RGF0ZS5ub3coKSt0aGlzLmdldFRpbWVUb05leHRFeGVjdXRpb24oKX1nZXRUaW1lVG9OZXh0RXhlY3V0aW9uKCl7cmV0dXJuIHRoaXMuY3JvblBhcnNlci5tc1RvTmV4dCgpfXN0YXJ0KCl7dGhpcy5zdGF0dXM9InN0YXJ0ZWQifXN0b3AoKXt0aGlzLnN0YXR1cz0ic3RvcHBlZCJ9fX0pO3ZhciBTbyxlWCx0WCxUVXQsZFI9bigoKT0+e3BpKCk7U289e3llYXJzOih0PTEpPT50KjMxNTRlNyxtb250aHM6KHQ9MSk9PnQqMjYyOGU2LHdlZWtzOih0PTEpPT50KjYwNDhlNSxkYXlzOih0PTEpPT50Kjg2NGU1LGhvdXJzOih0PTEpPT50KjM2ZTUsbWludXRlczoodD0xKT0+dCo2ZTQsc2Vjb25kczoodD0xKT0+dCoxZTN9LGVYPXQ9PntsZXQgZT0wLGE9cj0+e2U9ZStyfTtyZXR1cm4gdC55ZWFycyYmYShTby55ZWFycyh0LnllYXJzKSksdC5tb250aHMmJmEoU28ubW9udGhzKHQubW9udGhzKSksdC53ZWVrcyYmYShTby53ZWVrcyh0LndlZWtzKSksdC5kYXlzJiZhKFNvLmRheXModC5kYXlzKSksdC5ob3VycyYmYShTby5ob3Vycyh0LmhvdXJzKSksdC5taW51dGVzJiZhKFNvLm1pbnV0ZXModC5taW51dGVzKSksdC5zZWNvbmRzJiZhKFNvLnNlY29uZHModC5zZWNvbmRzKSksZX0sdFg9dD0+ejgodCksVFV0PXQ9Pk04LmZvcm1hdERpc3RhbmNlVG9Ob3cobmV3IERhdGUodCkpfSk7dmFyIGFYLEpaPW4oKCk9PntwaSgpO0taKCk7ZFIoKTthWD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhdHVzPSJzdG9wcGVkIix0aGlzLmNyb25qb2JzPW5ldyBCMS5PYmplY3RNYXB9YWRkQ3JvbmpvYihlLGEpe2xldCByPW5ldyBTOCh0aGlzLGUsYSk7cmV0dXJuIHRoaXMuY3JvbmpvYnMuYWRkKHIpLHRoaXMuc3RhdHVzPT09InN0YXJ0ZWQiJiZyLnN0YXJ0KCkscn1yZW1vdmVDcm9uam9iKGUpe2Uuc3RvcCgpLHRoaXMuY3JvbmpvYnMucmVtb3ZlKGUpfXN0YXJ0KCl7aWYodGhpcy5zdGF0dXMhPT0ic3RhcnRlZCIpe3RoaXMuc3RhdHVzPSJzdGFydGVkIjtmb3IobGV0IGUgb2YgdGhpcy5jcm9uam9icy5nZXRBcnJheSgpKWUuc3RhcnQoKTt0aGlzLnJ1bkNyb25DeWNsZSgpfX1hc3luYyBydW5Dcm9uQ3ljbGUoKXt0aGlzLmV4ZWN1dGlvblRpbWVvdXQ9bmV3IGZ0LlRpbWVvdXQoMCk7ZG97bGV0IGU7Zm9yKGxldCBhIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSlhLmNoZWNrRXhlY3V0aW9uKCksKCFlfHxhLmdldFRpbWVUb05leHRFeGVjdXRpb24oKTxlLmdldFRpbWVUb05leHRFeGVjdXRpb24oKSkmJihlPWEpO2U/KHRoaXMuZXhlY3V0aW9uVGltZW91dD1uZXcgZnQuVGltZW91dChlLmdldFRpbWVUb05leHRFeGVjdXRpb24oKSksY29uc29sZS5sb2coYE5leHQgQ3JvbkpvYiBzY2hlZHVsZWQgaW4gJHt0WCh0aGlzLmV4ZWN1dGlvblRpbWVvdXQuZ2V0VGltZUxlZnQoKSl9YCkpOih0aGlzLmV4ZWN1dGlvblRpbWVvdXQ9bmV3IGZ0LlRpbWVvdXQoMWUzKSxjb25zb2xlLmxvZygibm8gY3JvbmpvYnMgc3BlY2lmaWVkISBDaGVja2luZyBhZ2FpbiBpbiAxIHNlY29uZCIpKSxhd2FpdCB0aGlzLmV4ZWN1dGlvblRpbWVvdXQucHJvbWlzZX13aGlsZSh0aGlzLnN0YXR1cz09PSJzdGFydGVkIil9c3RvcCgpe3RoaXMuc3RhdHVzPT09InN0YXJ0ZWQiPyh0aGlzLnN0YXR1cz0ic3RvcHBlZCIsdGhpcy5leGVjdXRpb25UaW1lb3V0LmNhbmNlbCgpKTpjb25zb2xlLmxvZygiWW91IHRyaWVkIHRvIHN0b3AgYSBDcm9uTWFuYWdlciB0aGF0IHdhcyBub3QgYWN0dWFsbHkgc3RhcnRlZC4iKTtmb3IobGV0IGUgb2YgdGhpcy5jcm9uam9icy5nZXRBcnJheSgpKWUuc3RvcCgpfX19KTt2YXIgclgsR1ZlPW4oKCk9PntwaSgpO2RSKCk7clg9Y2xhc3MgdCBleHRlbmRzIERhdGV7c3RhdGljIGZyb21NaWxsaXMoZSl7cmV0dXJuIG5ldyB0KGUpfXN0YXRpYyBmcm9tRGF0ZShlKXtyZXR1cm4gbmV3IHQoZS5nZXRUaW1lKCkpfXN0YXRpYyBmcm9tRXVyb3BlYW5EYXRlKGUpe2xldCBhPS8oLiopXC4oLiopXC4oLiopLy5leGVjKGUpLGk9bmV3IERhdGUocGFyc2VGbG9hdChhWzNdKSxwYXJzZUZsb2F0KGFbMl0pLTEscGFyc2VGbG9hdChhWzFdKSkuZ2V0VGltZSgpO3JldHVybiBuZXcgdChpKX1zdGF0aWMgZnJvbUh5cGhlZERhdGUoZSl7bGV0IGE9bmV3IERhdGUoZSkuZ2V0VGltZSgpO3JldHVybiBuZXcgdChhKX1zdGF0aWMgZnJvbUV1cm9wZWFuRGF0ZUFuZFRpbWUoZSxhPSIxMjowMDowMCIscj0iRXVyb3BlL0JlcmxpbiIpe2xldCBpPS8oLiopXC4oLiopXC4oLiopLy5leGVjKGUpLG89Yz0+YDAke2N9YC5zbGljZSgtMikscz1gJHtpWzNdfS0ke28oaVsyXSl9LSR7byhpWzFdKX1UJHthfWAsZj1xcy5kZWZhdWx0KHMpLnRvRGF0ZSgpLmdldFRpbWUoKTtyZXR1cm4gbmV3IHQoZil9Y29uc3RydWN0b3IoZT1EYXRlLm5vdygpKXtzdXBlcihlKX1leHBvcnRUb0V1cm9wZWFuRGF0ZSgpe2xldCBlPXRoaXMuZXhwb3J0VG9Vbml0cygpO3JldHVybmAke2UuZGF5U3RyaW5nfS4ke2UubW9udGhTdHJpbmd9LiR7ZS55ZWFyU3RyaW5nfWB9ZXhwb3J0VG9IeXBoZWRTb3J0YWJsZURhdGUoKXtsZXQgZT10aGlzLmV4cG9ydFRvVW5pdHMoKTtyZXR1cm5gJHtlLnllYXJTdHJpbmd9LSR7ZS5tb250aFN0cmluZ30tJHtlLmRheVN0cmluZ31gfWV4cG9ydFRvVW5pdHMoKXtsZXQgZT1bIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sYT1bIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5IiwiU3VuZGF5Il07cmV0dXJue3llYXI6dGhpcy5nZXRGdWxsWWVhcigpLHllYXJTdHJpbmc6YCR7dGhpcy5nZXRGdWxsWWVhcigpfWAsbW9udGg6dGhpcy5nZXRNb250aCgpKzEsbW9udGhTdHJpbmc6KCIwIisodGhpcy5nZXRNb250aCgpKzEpKS5zbGljZSgtMiksbW9udGhOYW1lOmVbdGhpcy5nZXRNb250aCgpXSxkYXk6dGhpcy5nZXREYXRlKCksZGF5U3RyaW5nOigiMCIrdGhpcy5nZXREYXRlKCkpLnNsaWNlKC0yKSxkYXlPZlRoZVdlZWs6dGhpcy5nZXREYXkoKSxkYXlPZlRoZVdlZWtOYW1lOmFbdGhpcy5nZXREYXkoKV19fWZvcm1hdChlKXtyZXR1cm4gcXMuZGVmYXVsdCh0aGlzLmdldFRpbWUoKSkuZm9ybWF0KGUpfWlzVG9kYXkoKXtyZXR1cm4gcXMuZGVmYXVsdCh0aGlzLmdldFRpbWUoKSkuaXNUb2RheSgpfWxlc3NUaW1lUGFzc2VkVG9Ob3coZSl7bGV0IGE9ZVgoZSk7cmV0dXJuIERhdGUubm93KCktdGhpcy5nZXRUaW1lKCk8YX1tb3JlVGltZVBhc3NlZFRvTm93KGUpe3JldHVybiF0aGlzLmxlc3NUaW1lUGFzc2VkVG9Ob3coZSl9fX0pO3ZhciBpWCxZVmU9bigoKT0+e2lYPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5uYW5vU2Vjb25kcz1udWxsLHRoaXMubWlsbGlTZWNvbmRzPW51bGwsdGhpcy5fbWlsbGlTdGFydD1udWxsLHRoaXMuX21pbGxpRGlmZj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITF9c3RhcnQoKXt0aGlzLl9zdGFydGVkPSEwLHRoaXMuX21pbGxpU3RhcnQ9RGF0ZS5ub3coKX1zdG9wKCl7aWYodGhpcy5fc3RhcnRlZD09PSExKXtjb25zb2xlLmxvZygiSGFzbid0IHN0YXJ0ZWQgeWV0Iik7cmV0dXJufXJldHVybiB0aGlzLl9taWxsaURpZmY9RGF0ZS5ub3coKS10aGlzLl9taWxsaVN0YXJ0LHRoaXMubmFub1NlY29uZHM9dGhpcy5fbWlsbGlEaWZmKjFlMyx0aGlzLm1pbGxpU2Vjb25kcz10aGlzLl9taWxsaURpZmYsdGhpc31yZXNldCgpe3RoaXMubmFub1NlY29uZHM9bnVsbCx0aGlzLm1pbGxpU2Vjb25kcz1udWxsLHRoaXMuX21pbGxpU3RhcnQ9bnVsbCx0aGlzLl9taWxsaURpZmY9bnVsbCx0aGlzLl9zdGFydGVkPSExfX19KTt2YXIgb1gsWlZlPW4oKCk9PntwaSgpO29YPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RhdHVzPSJpbml0aWFsIix0aGlzLnN0YXR1c0F1dGhvcml6YXRpb249bnVsbCx0aGlzLmludGVydmFsSm9icz1bXSx0aGlzLmludGVydmFsTWlsbGlzZWNvbmRzPWV9c3RhcnQoKXt0aGlzLnN0YXR1cz0ic3RhcnRlZCI7bGV0IGU9bmV3IERhdGU7dGhpcy5zdGF0dXNBdXRob3JpemF0aW9uPWUsKGFzeW5jKCk9Pntmb3IoO3RoaXMuc3RhdHVzPT09InN0YXJ0ZWQiJiZ0aGlzLnN0YXR1c0F1dGhvcml6YXRpb249PT1lOylhd2FpdCBmdC5kZWxheUZvcih0aGlzLmludGVydmFsTWlsbGlzZWNvbmRzKSx0aGlzLmV4ZWN1dGVJbnRlcnZhbEpvYnMoKX0pKCl9c3RvcCgpe3RoaXMuc3RhdHVzPSJzdG9wcGVkIix0aGlzLnN0YXR1c0F1dGhvcml6YXRpb249bnVsbH1hZGRJbnRlcnZhbEpvYihlKXt0aGlzLmludGVydmFsSm9icy5wdXNoKGUpfWV4ZWN1dGVJbnRlcnZhbEpvYnMoKXtmb3IobGV0IGUgb2YgdGhpcy5pbnRlcnZhbEpvYnMpZSgpfX19KTt2YXIgdDYsc1g9bigoKT0+e3BpKCk7dDY9Y2xhc3MgdHtzdGF0aWMgZnJvbU1pbGxpU2Vjb25kcyhlKXtyZXR1cm4gbmV3IHQoZSl9c3RhdGljIGZyb21UaW1lU3RhbXAoZSl7bGV0IGE9bmV3IHQ7cmV0dXJuIGEuY2hhbmdlPWEubWlsbGlTZWNvbmRzLWUubWlsbGlTZWNvbmRzLGF9Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2U9bnVsbCxlP3R5cGVvZiBlPT0ibnVtYmVyIiYmKHRoaXMuZGF0ZT1uZXcgRGF0ZShlKSk6dGhpcy5kYXRlPW5ldyBEYXRlLHRoaXMubWlsbGlTZWNvbmRzPXRoaXMuZGF0ZS5nZXRUaW1lKCksdGhpcy5lcG9jaHRpbWU9TWF0aC5mbG9vcih0aGlzLm1pbGxpU2Vjb25kcy8xZTMpfWlzT2xkZXJUaGFuT3RoZXJUaW1lU3RhbXAoZSxhPTApe3JldHVybiB0aGlzLm1pbGxpU2Vjb25kczxlLm1pbGxpU2Vjb25kcy1hfWlzT2xkZXJUaGFuKGUsYT0wKXtyZXR1cm4gdGhpcy5taWxsaVNlY29uZHMrYTxlLm1pbGxpU2Vjb25kc31pc1lvdW5nZXJUaGFuT3RoZXJUaW1lU3RhbXAoZSxhPTApe3JldHVybiB0aGlzLm1pbGxpU2Vjb25kcz5lLm1pbGxpU2Vjb25kcythfWlzWW91bmdlclRoYW5NaWxsaVNlY29uZHMoZSl7bGV0IHI9bmV3IHQoKS5lcG9jaHRpbWUtZSxpPW5ldyB0KHIpO3JldHVybiB0aGlzLmlzWW91bmdlclRoYW5PdGhlclRpbWVTdGFtcChpKX19fSk7dmFyIG5YLFhWZT1uKCgpPT57cGkoKTtzWCgpO25YPWNsYXNze2dldCB0aW1lTGVmdCgpe3JldHVybiB0aGlzLnRpbWVJbk1pbGxpc2Vjb25kcy10aGlzLnBhdXNlZEF0LmNoYW5nZX1jb25zdHJ1Y3RvcihlKXt0aGlzLnN0YXRlPSJpbml0aWF0ZWQiLHRoaXMuY29tcGxldGVkRGVmZXJyZWQ9VmUuZGVmZXIoKSx0aGlzLnRpbWVJbk1pbGxpc2Vjb25kcz1lLHRoaXMuY29tcGxldGVkPXRoaXMuY29tcGxldGVkRGVmZXJyZWQucHJvbWlzZX1zdGFydCgpe2lmKCF0aGlzLnN0YXJ0ZWRBdCl0aGlzLmN1cnJlbnRUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLmNvbXBsZXRlZERlZmVycmVkLnJlc29sdmUoKX0sdGhpcy50aW1lSW5NaWxsaXNlY29uZHMpLHRoaXMuc3RhcnRlZEF0PW5ldyB0NjtlbHNlIHRocm93IG5ldyBFcnJvcigidGltZXIgaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUuIFBsZWFzZSB1c2UgcmVzdW1lIGluc3RlYWQiKX1wYXVzZSgpe3RoaXMuc3RhcnRlZEF0JiYoY2xlYXJUaW1lb3V0KHRoaXMuY3VycmVudFRpbWVvdXQpLHRoaXMuY3VycmVudFRpbWVvdXQ9bnVsbCx0aGlzLnBhdXNlZEF0PXQ2LmZyb21UaW1lU3RhbXAodGhpcy5zdGFydGVkQXQpKX1yZXN1bWUoKXtpZih0aGlzLnN0YXJ0ZWRBdCl0aGlzLmN1cnJlbnRUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLmNvbXBsZXRlZERlZmVycmVkLnJlc29sdmUoKX0sdGhpcy50aW1lTGVmdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInRpbWVyIGhhcyBOT1QgYmVlbiBzdGFydGVkIGJlZm9yZS4gUGxlYXNlIHVzZSAuc3RhcnQoKSBpbnN0ZWFkIil9cmVzZXQoKXt0aGlzLnBhdXNlKCksdGhpcy5zdGFydGVkQXQ9bnVsbCx0aGlzLnBhdXNlZEF0PW51bGx9fX0pO3ZhciBoaT17fTtldChoaSx7Q3JvbkpvYjooKT0+UzgsQ3Jvbk1hbmFnZXI6KCk9PmFYLEV4dGVuZGVkRGF0ZTooKT0+clgsSHJ0TWVhc3VyZW1lbnQ6KCk9PmlYLEludGVydmFsOigpPT5vWCxUaW1lU3RhbXA6KCk9PnQ2LFRpbWVyOigpPT5uWCxnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lOigpPT5UVXQsZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlU3RyaW5nOigpPT50WCxnZXRNaWxsaVNlY29uZHNGcm9tVW5pdHM6KCk9PmVYLHVuaXRzOigpPT5Tb30pO3ZhciBsWD1uKCgpPT57SlooKTtLWigpO0dWZSgpO1lWZSgpO1pWZSgpO1hWZSgpO3NYKCk7ZFIoKX0pO3ZhciBLVmU9Y3QoKE1IMSxRVmUpPT57InVzZSBzdHJpY3QiO1FWZS5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5wYXJlbnQ9bnVsbCx0aGlzLnByZXZpb3VzU2libGluZz1udWxsLHRoaXMubmV4dFNpYmxpbmc9bnVsbCx0aGlzLmZpcnN0Q2hpbGQ9bnVsbCx0aGlzLmxhc3RDaGlsZD1udWxsLHRoaXMuY2hpbGRyZW5WZXJzaW9uPTAsdGhpcy5jaGlsZEluZGV4Q2FjaGVkVXBUbz1udWxsLHRoaXMuY2FjaGVkSW5kZXg9LTEsdGhpcy5jYWNoZWRJbmRleFZlcnNpb249TmFOfWdldCBpc0F0dGFjaGVkKCl7cmV0dXJuISEodGhpcy5wYXJlbnR8fHRoaXMucHJldmlvdXNTaWJsaW5nfHx0aGlzLm5leHRTaWJsaW5nKX1nZXQgaGFzQ2hpbGRyZW4oKXtyZXR1cm4hIXRoaXMuZmlyc3RDaGlsZH1jaGlsZHJlbkNoYW5nZWQoKXt0aGlzLmNoaWxkcmVuVmVyc2lvbj10aGlzLmNoaWxkcmVuVmVyc2lvbisxJjQyOTQ5NjcyOTUsdGhpcy5jaGlsZEluZGV4Q2FjaGVkVXBUbz1udWxsfWdldENhY2hlZEluZGV4KGUpe3JldHVybiB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiE9PWUuY2hpbGRyZW5WZXJzaW9uPyh0aGlzLmNhY2hlZEluZGV4VmVyc2lvbj1OYU4sLTEpOnRoaXMuY2FjaGVkSW5kZXh9c2V0Q2FjaGVkSW5kZXgoZSxhKXt0aGlzLmNhY2hlZEluZGV4VmVyc2lvbj1lLmNoaWxkcmVuVmVyc2lvbix0aGlzLmNhY2hlZEluZGV4PWF9fX0pO3ZhciBlVWU9Y3QoKHpIMSxKVmUpPT57InVzZSBzdHJpY3QiO0pWZS5leHBvcnRzPU9iamVjdC5mcmVlemUoe0RJU0NPTk5FQ1RFRDoxLFBSRUNFRElORzoyLEZPTExPV0lORzo0LENPTlRBSU5TOjgsQ09OVEFJTkVEX0JZOjE2fSl9KTt2YXIgb1VlPWN0KChrSDEsaVVlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdFVlPVN5bWJvbCgpLGFVZT1TeW1ib2woKSxDbz1TeW1ib2woKSxyVWU9U3ltYm9sKCksamE9Y2xhc3N7Y29uc3RydWN0b3IoZSxhLHIsaSl7dGhpc1t0VWVdPWUsdGhpc1thVWVdPWEsdGhpc1tDb109cix0aGlzW3JVZV09aX1uZXh0KCl7bGV0IGU9dGhpc1t0VWVdLGE9dGhpc1tyVWVdLHI9dGhpc1thVWVdO2lmKCF0aGlzW0NvXSlyZXR1cm57ZG9uZTohMCx2YWx1ZTpyfTtsZXQgaT10aGlzW0NvXTtyZXR1cm4gYT09PTE/dGhpc1tDb109ZS5fbm9kZShpKS5wcmV2aW91c1NpYmxpbmc6YT09PTI/dGhpc1tDb109ZS5fbm9kZShpKS5uZXh0U2libGluZzphPT09Mz90aGlzW0NvXT1lLl9ub2RlKGkpLnBhcmVudDphPT09ND90aGlzW0NvXT1lLnByZWNlZGluZyhpLHtyb290OnJ9KTp0aGlzW0NvXT1lLmZvbGxvd2luZyhpLHtyb290OnJ9KSx7ZG9uZTohMSx2YWx1ZTppfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqYS5wcm90b3R5cGUsU3ltYm9sLml0ZXJhdG9yLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfSx3cml0YWJsZTohMX0pLGphLlBSRVY9MSxqYS5ORVhUPTIsamEuUEFSRU5UPTMsamEuUFJFQ0VESU5HPTQsamEuRk9MTE9XSU5HPTUsT2JqZWN0LmZyZWV6ZShqYSksT2JqZWN0LmZyZWV6ZShqYS5wcm90b3R5cGUpLGlVZS5leHBvcnRzPWphfSk7dmFyIGRYPWN0KChTSDEsc1VlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQVV0PUtWZSgpLExvPWVVZSgpLFNhPW9VZSgpO2Z1bmN0aW9uIGNYKCl7cmV0dXJuITB9ZnVuY3Rpb24gYTYodCxlKXtyZXR1cm4gdFt0Lmxlbmd0aC0xLWVdfXZhciBmUj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnN5bWJvbD1TeW1ib2woZXx8IlN5bWJvbFRyZWUgZGF0YSIpfWluaXRpYWxpemUoZSl7cmV0dXJuIHRoaXMuX25vZGUoZSksZX1fbm9kZShlKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgYT1lW3RoaXMuc3ltYm9sXTtyZXR1cm4gYXx8KGVbdGhpcy5zeW1ib2xdPW5ldyBBVXQpfWhhc0NoaWxkcmVuKGUpe3JldHVybiB0aGlzLl9ub2RlKGUpLmhhc0NoaWxkcmVufWZpcnN0Q2hpbGQoZSl7cmV0dXJuIHRoaXMuX25vZGUoZSkuZmlyc3RDaGlsZH1sYXN0Q2hpbGQoZSl7cmV0dXJuIHRoaXMuX25vZGUoZSkubGFzdENoaWxkfXByZXZpb3VzU2libGluZyhlKXtyZXR1cm4gdGhpcy5fbm9kZShlKS5wcmV2aW91c1NpYmxpbmd9bmV4dFNpYmxpbmcoZSl7cmV0dXJuIHRoaXMuX25vZGUoZSkubmV4dFNpYmxpbmd9cGFyZW50KGUpe3JldHVybiB0aGlzLl9ub2RlKGUpLnBhcmVudH1sYXN0SW5jbHVzaXZlRGVzY2VuZGFudChlKXtsZXQgYSxyPWU7Zm9yKDthPXRoaXMuX25vZGUocikubGFzdENoaWxkOylyPWE7cmV0dXJuIHJ9cHJlY2VkaW5nKGUsYSl7bGV0IHI9YSYmYS5yb290O2lmKGU9PT1yKXJldHVybiBudWxsO2xldCBpPXRoaXMuX25vZGUoZSkucHJldmlvdXNTaWJsaW5nO3JldHVybiBpP3RoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQoaSk6dGhpcy5fbm9kZShlKS5wYXJlbnR9Zm9sbG93aW5nKGUsYSl7bGV0IHI9YSYmYS5yb290LG89IShhJiZhLnNraXBDaGlsZHJlbikmJnRoaXMuX25vZGUoZSkuZmlyc3RDaGlsZDtpZihvKXJldHVybiBvO2xldCBzPWU7ZG97aWYocz09PXIpcmV0dXJuIG51bGw7bGV0IGw9dGhpcy5fbm9kZShzKS5uZXh0U2libGluZztpZihsKXJldHVybiBsO3M9dGhpcy5fbm9kZShzKS5wYXJlbnR9d2hpbGUocyk7cmV0dXJuIG51bGx9Y2hpbGRyZW5Ub0FycmF5KGUsYSl7bGV0IHI9YSYmYS5hcnJheXx8W10saT1hJiZhLmZpbHRlcnx8Y1gsbz1hJiZhLnRoaXNBcmd8fHZvaWQgMCxzPXRoaXMuX25vZGUoZSksbD1zLmZpcnN0Q2hpbGQsZj0wO2Zvcig7bDspe2xldCBjPXRoaXMuX25vZGUobCk7Yy5zZXRDYWNoZWRJbmRleChzLGYpLGkuY2FsbChvLGwpJiZyLnB1c2gobCksbD1jLm5leHRTaWJsaW5nLCsrZn1yZXR1cm4gcn1hbmNlc3RvcnNUb0FycmF5KGUsYSl7bGV0IHI9YSYmYS5hcnJheXx8W10saT1hJiZhLmZpbHRlcnx8Y1gsbz1hJiZhLnRoaXNBcmd8fHZvaWQgMCxzPWU7Zm9yKDtzOylpLmNhbGwobyxzKSYmci5wdXNoKHMpLHM9dGhpcy5fbm9kZShzKS5wYXJlbnQ7cmV0dXJuIHJ9dHJlZVRvQXJyYXkoZSxhKXtsZXQgcj1hJiZhLmFycmF5fHxbXSxpPWEmJmEuZmlsdGVyfHxjWCxvPWEmJmEudGhpc0FyZ3x8dm9pZCAwLHM9ZTtmb3IoO3M7KWkuY2FsbChvLHMpJiZyLnB1c2gocykscz10aGlzLmZvbGxvd2luZyhzLHtyb290OmV9KTtyZXR1cm4gcn1jaGlsZHJlbkl0ZXJhdG9yKGUsYSl7bGV0IHI9YSYmYS5yZXZlcnNlLGk9dGhpcy5fbm9kZShlKTtyZXR1cm4gbmV3IFNhKHRoaXMsZSxyP2kubGFzdENoaWxkOmkuZmlyc3RDaGlsZCxyP1NhLlBSRVY6U2EuTkVYVCl9cHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKGUpe3JldHVybiBuZXcgU2EodGhpcyxlLHRoaXMuX25vZGUoZSkucHJldmlvdXNTaWJsaW5nLFNhLlBSRVYpfW5leHRTaWJsaW5nc0l0ZXJhdG9yKGUpe3JldHVybiBuZXcgU2EodGhpcyxlLHRoaXMuX25vZGUoZSkubmV4dFNpYmxpbmcsU2EuTkVYVCl9YW5jZXN0b3JzSXRlcmF0b3IoZSl7cmV0dXJuIG5ldyBTYSh0aGlzLGUsZSxTYS5QQVJFTlQpfXRyZWVJdGVyYXRvcihlLGEpe2xldCByPWEmJmEucmV2ZXJzZTtyZXR1cm4gbmV3IFNhKHRoaXMsZSxyP3RoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQoZSk6ZSxyP1NhLlBSRUNFRElORzpTYS5GT0xMT1dJTkcpfWluZGV4KGUpe2xldCBhPXRoaXMuX25vZGUoZSkscj10aGlzLl9ub2RlKGEucGFyZW50KTtpZighcilyZXR1cm4tMTtsZXQgaT1hLmdldENhY2hlZEluZGV4KHIpO2lmKGk+PTApcmV0dXJuIGk7aT0wO2xldCBvPXIuZmlyc3RDaGlsZDtpZihyLmNoaWxkSW5kZXhDYWNoZWRVcFRvKXtsZXQgcz10aGlzLl9ub2RlKHIuY2hpbGRJbmRleENhY2hlZFVwVG8pO289cy5uZXh0U2libGluZyxpPXMuZ2V0Q2FjaGVkSW5kZXgocikrMX1mb3IoO287KXtsZXQgcz10aGlzLl9ub2RlKG8pO2lmKHMuc2V0Q2FjaGVkSW5kZXgocixpKSxvPT09ZSlicmVhazsrK2ksbz1zLm5leHRTaWJsaW5nfXJldHVybiByLmNoaWxkSW5kZXhDYWNoZWRVcFRvPWUsaX1jaGlsZHJlbkNvdW50KGUpe2xldCBhPXRoaXMuX25vZGUoZSk7cmV0dXJuIGEubGFzdENoaWxkP3RoaXMuaW5kZXgoYS5sYXN0Q2hpbGQpKzE6MH1jb21wYXJlVHJlZVBvc2l0aW9uKGUsYSl7aWYoZT09PWEpcmV0dXJuIDA7bGV0IHI9W107e2xldCB1PWU7Zm9yKDt1Oyl7aWYodT09PWEpcmV0dXJuIExvLkNPTlRBSU5TfExvLlBSRUNFRElORztyLnB1c2godSksdT10aGlzLnBhcmVudCh1KX19bGV0IGk9W107e2xldCB1PWE7Zm9yKDt1Oyl7aWYodT09PWUpcmV0dXJuIExvLkNPTlRBSU5FRF9CWXxMby5GT0xMT1dJTkc7aS5wdXNoKHUpLHU9dGhpcy5wYXJlbnQodSl9fWxldCBvPWE2KHIsMCk7aWYoIW98fG8hPT1hNihpLDApKXJldHVybiBMby5ESVNDT05ORUNURUQ7bGV0IHM9MCxsPU1hdGgubWluKHIubGVuZ3RoLGkubGVuZ3RoKTtmb3IobGV0IHU9MDt1PGw7Kyt1KXtsZXQgZD1hNihyLHUpLGg9YTYoaSx1KTtpZihkIT09aClicmVhaztzPXV9bGV0IGY9dGhpcy5pbmRleChhNihyLHMrMSkpO3JldHVybiB0aGlzLmluZGV4KGE2KGkscysxKSk8Zj9Mby5QUkVDRURJTkc6TG8uRk9MTE9XSU5HfXJlbW92ZShlKXtsZXQgYT10aGlzLl9ub2RlKGUpLHI9dGhpcy5fbm9kZShhLnBhcmVudCksaT10aGlzLl9ub2RlKGEucHJldmlvdXNTaWJsaW5nKSxvPXRoaXMuX25vZGUoYS5uZXh0U2libGluZyk7cmV0dXJuIHImJihyLmZpcnN0Q2hpbGQ9PT1lJiYoci5maXJzdENoaWxkPWEubmV4dFNpYmxpbmcpLHIubGFzdENoaWxkPT09ZSYmKHIubGFzdENoaWxkPWEucHJldmlvdXNTaWJsaW5nKSksaSYmKGkubmV4dFNpYmxpbmc9YS5uZXh0U2libGluZyksbyYmKG8ucHJldmlvdXNTaWJsaW5nPWEucHJldmlvdXNTaWJsaW5nKSxhLnBhcmVudD1udWxsLGEucHJldmlvdXNTaWJsaW5nPW51bGwsYS5uZXh0U2libGluZz1udWxsLGEuY2FjaGVkSW5kZXg9LTEsYS5jYWNoZWRJbmRleFZlcnNpb249TmFOLHImJnIuY2hpbGRyZW5DaGFuZ2VkKCksZX1pbnNlcnRCZWZvcmUoZSxhKXtsZXQgcj10aGlzLl9ub2RlKGUpLGk9dGhpcy5fbm9kZShyLnByZXZpb3VzU2libGluZyksbz10aGlzLl9ub2RlKGEpLHM9dGhpcy5fbm9kZShyLnBhcmVudCk7aWYoby5pc0F0dGFjaGVkKXRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7cmV0dXJuIG8ucGFyZW50PXIucGFyZW50LG8ucHJldmlvdXNTaWJsaW5nPXIucHJldmlvdXNTaWJsaW5nLG8ubmV4dFNpYmxpbmc9ZSxyLnByZXZpb3VzU2libGluZz1hLGkmJihpLm5leHRTaWJsaW5nPWEpLHMmJnMuZmlyc3RDaGlsZD09PWUmJihzLmZpcnN0Q2hpbGQ9YSkscyYmcy5jaGlsZHJlbkNoYW5nZWQoKSxhfWluc2VydEFmdGVyKGUsYSl7bGV0IHI9dGhpcy5fbm9kZShlKSxpPXRoaXMuX25vZGUoci5uZXh0U2libGluZyksbz10aGlzLl9ub2RlKGEpLHM9dGhpcy5fbm9kZShyLnBhcmVudCk7aWYoby5pc0F0dGFjaGVkKXRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7cmV0dXJuIG8ucGFyZW50PXIucGFyZW50LG8ucHJldmlvdXNTaWJsaW5nPWUsby5uZXh0U2libGluZz1yLm5leHRTaWJsaW5nLHIubmV4dFNpYmxpbmc9YSxpJiYoaS5wcmV2aW91c1NpYmxpbmc9YSkscyYmcy5sYXN0Q2hpbGQ9PT1lJiYocy5sYXN0Q2hpbGQ9YSkscyYmcy5jaGlsZHJlbkNoYW5nZWQoKSxhfXByZXBlbmRDaGlsZChlLGEpe2xldCByPXRoaXMuX25vZGUoZSksaT10aGlzLl9ub2RlKGEpO2lmKGkuaXNBdHRhY2hlZCl0aHJvdyBFcnJvcigiR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCIpO3JldHVybiByLmhhc0NoaWxkcmVuP3RoaXMuaW5zZXJ0QmVmb3JlKHIuZmlyc3RDaGlsZCxhKTooaS5wYXJlbnQ9ZSxyLmZpcnN0Q2hpbGQ9YSxyLmxhc3RDaGlsZD1hLHIuY2hpbGRyZW5DaGFuZ2VkKCkpLGF9YXBwZW5kQ2hpbGQoZSxhKXtsZXQgcj10aGlzLl9ub2RlKGUpLGk9dGhpcy5fbm9kZShhKTtpZihpLmlzQXR0YWNoZWQpdGhyb3cgRXJyb3IoIkdpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QiKTtyZXR1cm4gci5oYXNDaGlsZHJlbj90aGlzLmluc2VydEFmdGVyKHIubGFzdENoaWxkLGEpOihpLnBhcmVudD1lLHIuZmlyc3RDaGlsZD1hLHIubGFzdENoaWxkPWEsci5jaGlsZHJlbkNoYW5nZWQoKSksYX19O3NVZS5leHBvcnRzPWZSLGZSLlRyZWVQb3NpdGlvbj1Mb30pO3ZhciB1UixDYT1uKCgpPT57aWkoKTtSWSgpO3AyKCk7VmEoKTtsWCgpO3VSPU4yKGRYKCksMSl9KTt2YXIgZlgsblVlPW4oKCk9PntDYSgpO2ZYPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5leGVjdXRpb25TbG90cz1bXSx0aGlzLmlzUHJvY2Vzc2luZz0hMSx0aGlzLm5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5PTEvMCx0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudD0wLHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlPVtdfWFzeW5jIGdldEV4Y2x1c2l2ZUV4ZWN1dGlvblNsb3QoZSxhKXtsZXQgcj1WZS5kZWZlcigpLGk9e2Z1bmNUb0V4ZWN1dGU6ZSxleGVjdXRpb25EZWZlcnJlZDpyLHRpbWVvdXQ6YSxtb2RlOiJleGNsdXNpdmUifTtyZXR1cm4gdGhpcy5leGVjdXRpb25TbG90cy5wdXNoKGkpLHRoaXMucHJvY2Vzc0V4ZWN1dGlvblNsb3RzKCksci5wcm9taXNlfWFzeW5jIGdldE5vbkV4Y2x1c2l2ZUV4ZWN1dGlvblNsb3QoZSxhKXtsZXQgcj1WZS5kZWZlcigpLGk9e2Z1bmNUb0V4ZWN1dGU6ZSxleGVjdXRpb25EZWZlcnJlZDpyLHRpbWVvdXQ6YSxtb2RlOiJub25leGNsdXNpdmUifTtyZXR1cm4gdGhpcy5leGVjdXRpb25TbG90cy5wdXNoKGkpLHRoaXMucHJvY2Vzc0V4ZWN1dGlvblNsb3RzKCksci5wcm9taXNlfXNldE5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5KGUpe2lmKCFOdW1iZXIuaXNGaW5pdGUoZSl8fGU8MSl0aHJvdyBuZXcgRXJyb3IoIm5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5IG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyID49IDEiKTt0aGlzLm5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5PWV9Z2V0Tm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3koKXtyZXR1cm4gdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeX1nZXRBY3RpdmVOb25FeGNsdXNpdmVDb3VudCgpe3JldHVybiB0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudH1nZXRQZW5kaW5nTm9uRXhjbHVzaXZlQ291bnQoKXtyZXR1cm4gdGhpcy5ub25FeGNsdXNpdmVQZW5kaW5nUXVldWUubGVuZ3RofWFzeW5jIHByb2Nlc3NFeGVjdXRpb25TbG90cygpe2lmKCF0aGlzLmlzUHJvY2Vzc2luZyl7Zm9yKHRoaXMuaXNQcm9jZXNzaW5nPSEwO3RoaXMuZXhlY3V0aW9uU2xvdHMubGVuZ3RoPjA7KXtsZXQgZT10aGlzLmV4ZWN1dGlvblNsb3RzWzBdO2lmKGUubW9kZT09PSJleGNsdXNpdmUiKWF3YWl0IHRoaXMuZXhlY3V0ZUV4Y2x1c2l2ZVNsb3QoZSksdGhpcy5leGVjdXRpb25TbG90cy5zaGlmdCgpO2Vsc2V7bGV0IGE9W107Zm9yKDt0aGlzLmV4ZWN1dGlvblNsb3RzLmxlbmd0aD4wJiZ0aGlzLmV4ZWN1dGlvblNsb3RzWzBdLm1vZGU9PT0ibm9uZXhjbHVzaXZlIjspYS5wdXNoKHRoaXMuZXhlY3V0aW9uU2xvdHMuc2hpZnQoKSk7YXdhaXQgdGhpcy5leGVjdXRlTm9uRXhjbHVzaXZlU2xvdHMoYSl9fXRoaXMuaXNQcm9jZXNzaW5nPSExfX1hc3luYyBleGVjdXRlRXhjbHVzaXZlU2xvdChlKXt0cnl7aWYoZS50aW1lb3V0KXtsZXQgYT1hd2FpdCBQcm9taXNlLnJhY2UoW2UuZnVuY1RvRXhlY3V0ZSgpLGZ0LmRlbGF5Rm9yKGUudGltZW91dCkudGhlbigoKT0+e3Rocm93IG5ldyBFcnJvcigiVGltZW91dCByZWFjaGVkIil9KV0pO2UuZXhlY3V0aW9uRGVmZXJyZWQucmVzb2x2ZShhKX1lbHNle2xldCBhPWF3YWl0IGUuZnVuY1RvRXhlY3V0ZSgpO2UuZXhlY3V0aW9uRGVmZXJyZWQucmVzb2x2ZShhKX19Y2F0Y2goYSl7ZS5leGVjdXRpb25EZWZlcnJlZC5yZWplY3QoYSl9fWFzeW5jIGV4ZWN1dGVOb25FeGNsdXNpdmVTbG90cyhlKXtsZXQgYT1lLm1hcChhc3luYyByPT57YXdhaXQgdGhpcy53YWl0Rm9yTm9uRXhjbHVzaXZlU2xvdCgpO3RyeXtpZihyLnRpbWVvdXQpe2xldCBpPWF3YWl0IFByb21pc2UucmFjZShbci5mdW5jVG9FeGVjdXRlKCksZnQuZGVsYXlGb3Ioci50aW1lb3V0KS50aGVuKCgpPT57dGhyb3cgbmV3IEVycm9yKCJUaW1lb3V0IHJlYWNoZWQiKX0pXSk7ci5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKGkpfWVsc2V7bGV0IGk9YXdhaXQgci5mdW5jVG9FeGVjdXRlKCk7ci5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKGkpfX1jYXRjaChpKXtyLmV4ZWN1dGlvbkRlZmVycmVkLnJlamVjdChpKX1maW5hbGx5e3RoaXMucmVsZWFzZU5vbkV4Y2x1c2l2ZVNsb3QoKX19KTthd2FpdCBQcm9taXNlLmFsbChhKX13YWl0Rm9yTm9uRXhjbHVzaXZlU2xvdCgpe3JldHVybiB0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudDx0aGlzLm5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5Pyh0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudCsrLFByb21pc2UucmVzb2x2ZSgpKTpuZXcgUHJvbWlzZShlPT57dGhpcy5ub25FeGNsdXNpdmVQZW5kaW5nUXVldWUucHVzaCgoKT0+e3RoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50KyssZSgpfSl9KX1yZWxlYXNlTm9uRXhjbHVzaXZlU2xvdCgpe3RoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50LS07bGV0IGU9dGhpcy5ub25FeGNsdXNpdmVQZW5kaW5nUXVldWUuc2hpZnQoKTtlJiZlKCl9fX0pO3ZhciB1WCxsVWU9bigoKT0+e0NhKCk7dVg9Y2xhc3N7Y29uc3RydWN0b3IoZT0xNil7dGhpcy5oYXNTcGFjZT1uZXcgQ3Qucnhqcy5TdWJqZWN0LHRoaXMuaXRlbXNBdmFpbGFibGU9bmV3IEN0LnJ4anMuU3ViamVjdCx0aGlzLmRhdGE9W10sdGhpcy5oaWdoV2F0ZXJNYXJrPWV9cHVzaChlKXt0aGlzLmRhdGEucHVzaChlKSx0aGlzLml0ZW1zQXZhaWxhYmxlLm5leHQoIml0ZW1zQXZhaWxhYmxlIik7bGV0IGE9dGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCk7cmV0dXJuIGEmJnRoaXMuaGFzU3BhY2UubmV4dCgiaGFzU3BhY2UiKSxhfXNoaWZ0KCl7bGV0IGU9dGhpcy5kYXRhLnNoaWZ0KCk7cmV0dXJuIHRoaXMuY2hlY2tTcGFjZUF2YWlsYWJsZSgpJiZ0aGlzLmhhc1NwYWNlLm5leHQoImhhc1NwYWNlIiksZX1jaGVja1NwYWNlQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGg8dGhpcy5oaWdoV2F0ZXJNYXJrfWNoZWNrSGFzSXRlbXMoKXtyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aD4wfXdhaXRGb3JTcGFjZSgpe3JldHVybiBuZXcgUHJvbWlzZShlPT57aWYodGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCkpZSgpO2Vsc2V7bGV0IGE9dGhpcy5oYXNTcGFjZS5zdWJzY3JpYmUoKCk9PnthLnVuc3Vic2NyaWJlKCksZSgpfSl9fSl9d2FpdEZvckl0ZW1zKCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntpZih0aGlzLmRhdGEubGVuZ3RoPjApZSgpO2Vsc2V7bGV0IGE9dGhpcy5pdGVtc0F2YWlsYWJsZS5zdWJzY3JpYmUoKCk9PnthLnVuc3Vic2NyaWJlKCksZSgpfSl9fSl9fX0pO3ZhciBDOCxwWD1uKCgpPT57Q2EoKTtDOD1jbGFzcyB0e2NvbnN0cnVjdG9yKCl7dGhpcy5tYXBPYmplY3Q9e319aXNVbmlxdWVLZXkoZSl7cmV0dXJuIXRoaXMubWFwT2JqZWN0W2VdfWFkZFRvTWFwKGUsYSxyKXtyZXR1cm4gdGhpcy5pc1VuaXF1ZUtleShlKXx8ciYmci5mb3JjZT8odGhpcy5tYXBPYmplY3RbZV09YSwhMCk6ITF9Z2V0QnlLZXkoZSl7cmV0dXJuIHRoaXMubWFwT2JqZWN0W2VdfXJlbW92ZUZyb21NYXAoZSl7bGV0IGE9dGhpcy5nZXRCeUtleShlKTtyZXR1cm4gZGVsZXRlIHRoaXMubWFwT2JqZWN0W2VdLGF9Z2V0S2V5cygpe2xldCBlPVtdO2ZvcihsZXQgYSBpbiB0aGlzLm1hcE9iamVjdCl0aGlzLm1hcE9iamVjdFthXSYmZS5wdXNoKGEpO3JldHVybiBlfWNsZWFuKCl7dGhpcy5tYXBPYmplY3Q9e319Y29uY2F0KGUpe2xldCBhPW5ldyB0O2ZvcihsZXQgciBvZiB0aGlzLmdldEtleXMoKSlhLmFkZFRvTWFwKHIsdGhpcy5nZXRCeUtleShyKSk7Zm9yKGxldCByIG9mIGUuZ2V0S2V5cygpKWEuYWRkVG9NYXAocixlLmdldEJ5S2V5KHIpLHtmb3JjZTohMH0pO3JldHVybiBhfWFkZEFsbEZyb21PdGhlcihlKXtmb3IobGV0IGEgb2YgZS5nZXRLZXlzKCkpdGhpcy5hZGRUb01hcChhLGUuZ2V0QnlLZXkoYSkse2ZvcmNlOiEwfSl9YXN5bmMgZmluZChlKXtmb3IobGV0IGEgb2YgdGhpcy5nZXRLZXlzKCkpe2xldCByPXRoaXMuZ2V0QnlLZXkoYSk7aWYoYXdhaXQgZShyKSlyZXR1cm4gcn19fX0pO3ZhciBjVWUsVnMscFI9bigoKT0+e0NhKCk7cFgoKTtjVWU9KHQ9InVuaSIpPT5gJHt0fXh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csZT0+e2xldCBhPU1hdGgucmFuZG9tKCkqMTZ8MDtyZXR1cm4oZT09PSJ4Ij9hOmEmM3w4KS50b1N0cmluZygxNil9KSxWcz1jbGFzcyB0e2NvbnN0cnVjdG9yKCl7dGhpcy5mYXN0TWFwPW5ldyBDOCx0aGlzLmV2ZW50U3ViamVjdD1uZXcgQ3Qucnhqcy5TdWJqZWN0fWFkZE1hcHBlZFVuaXF1ZShlLGEpe3RoaXMuZmFzdE1hcC5hZGRUb01hcChlLGEpfWdldE1hcHBlZFVuaXF1ZShlKXtyZXR1cm4gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGUpfXJlbW92ZU1hcHBlZFVuaXF1ZShlKXtsZXQgYT10aGlzLmdldE1hcHBlZFVuaXF1ZShlKX1hZGQoZSl7Zm9yKGxldCByIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpaWYodGhpcy5mYXN0TWFwLmdldEJ5S2V5KHIpPT09ZSlyZXR1cm4gcjtsZXQgYT1jVWUoImtleSIpO3JldHVybiB0aGlzLmFkZE1hcHBlZFVuaXF1ZShhLGUpLHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoe29wZXJhdGlvbjoiYWRkIixwYXlsb2FkOmV9KSxhfWFkZEFycmF5KGUpe2ZvcihsZXQgYSBvZiBlKXRoaXMuYWRkKGEpfWNoZWNrRm9yT2JqZWN0KGUpe3JldHVybiEhdGhpcy5nZXRLZXlGb3JPYmplY3QoZSl9Z2V0S2V5Rm9yT2JqZWN0KGUpe2xldCBhPW51bGw7Zm9yKGxldCByIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpaWYoIWEmJnRoaXMuZmFzdE1hcC5nZXRCeUtleShyKT09PWUpYT1yO2Vsc2UgY29udGludWU7cmV0dXJuIGF9YXN5bmMgZmluZChlKXtyZXR1cm4gdGhpcy5mYXN0TWFwLmZpbmQoZSl9ZmluZFN5bmMoZSl7Zm9yKGxldCBhIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpaWYoZSh0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoYSkpKXJldHVybiB0aGlzLmdldE1hcHBlZFVuaXF1ZShhKX1hc3luYyBmaW5kT25lQW5kUmVtb3ZlKGUpe2xldCBhPWF3YWl0IHRoaXMuZmluZChlKTtyZXR1cm4gYSYmdGhpcy5yZW1vdmUoYSksYX1maW5kT25lQW5kUmVtb3ZlU3luYyhlKXtsZXQgYT10aGlzLmZpbmRTeW5jKGUpO3JldHVybiBhJiZ0aGlzLnJlbW92ZShhKSxhfWFzeW5jIGZvckVhY2goZSl7Zm9yKGxldCBhIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpYXdhaXQgZSh0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoYSkpfWdldE9uZUFuZFJlbW92ZSgpe2xldCBlPXRoaXMuZmFzdE1hcC5nZXRLZXlzKCk7aWYoZS5sZW5ndGg9PT0wKXJldHVybiBudWxsO3tsZXQgYT1lWzBdLHI9dGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoYSk7cmV0dXJuIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoe29wZXJhdGlvbjoicmVtb3ZlIixwYXlsb2FkOnJ9KSxyfX1nZXRBcnJheSgpe2xldCBlPVtdO2ZvcihsZXQgYSBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKWUucHVzaCh0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoYSkpO3JldHVybiBlfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5mYXN0TWFwLmdldEtleXMoKS5sZW5ndGg9PT0wfXJlbW92ZShlKXtpZih0aGlzLmNoZWNrRm9yT2JqZWN0KGUpKXtsZXQgYT10aGlzLmdldEtleUZvck9iamVjdChlKSxyPXRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGEpO3JldHVybiB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHtvcGVyYXRpb246InJlbW92ZSIscGF5bG9hZDpyfSkscn1yZXR1cm4gbnVsbH13aXBlKCl7Zm9yKGxldCBlIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoZSl9Y29uY2F0KGUpe2xldCBhPW5ldyB0O3JldHVybiBhLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKHRoaXMuZmFzdE1hcCksYS5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihlLmZhc3RNYXApLGF9YWRkQWxsRnJvbU90aGVyKGUpe3RoaXMuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIoZS5mYXN0TWFwKX19fSk7dmFyIEw4LGhYPW4oKCk9PntDYSgpO21YKCk7TDg9Y2xhc3N7Z2V0IGNvbXBhcmlzb25TdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21wYXJpc29uRnVuYyh0aGlzLm9yaWdpbmFsSW50ZXJlc3QpfWZ1bGxmaWxsSW50ZXJlc3QoZSl7dGhpcy5pc0Z1bGxmaWxsZWQ9ITAsdGhpcy5mdWxsZmlsbG1lbnRTdG9yZT1bXSx0aGlzLmludGVyZXN0RGVmZXJyZWQucmVzb2x2ZShlKX1jb25zdHJ1Y3RvcihlLGEscixpKXt0aGlzLmRlc3RydWN0aW9uVGltZXI9bmV3IGhpLlRpbWVyKDFlNCksdGhpcy5pc0Z1bGxmaWxsZWQ9ITEsdGhpcy5mdWxsZmlsbG1lbnRTdG9yZT1bXSx0aGlzLmludGVyZXN0RGVmZXJyZWQ9bmV3IFZlLkRlZmVycmVkLHRoaXMuaW50ZXJlc3RGdWxsZmlsbGVkPXRoaXMuaW50ZXJlc3REZWZlcnJlZC5wcm9taXNlLHRoaXMuaW50ZXJlc3RNYXBSZWY9ZSx0aGlzLm9yaWdpbmFsSW50ZXJlc3Q9YSx0aGlzLmNvbXBhcmlzb25GdW5jPXIsdGhpcy5vcHRpb25zPWksdGhpcy5kZXN0cnVjdGlvblRpbWVyLmNvbXBsZXRlZC50aGVuKCgpPT57dGhpcy5kZXN0cm95KCl9KSx0aGlzLm9wdGlvbnM/Lm1hcmtMb3N0QWZ0ZXJEZWZhdWx0JiZmdC5kZWxheUZvcih0aGlzLm9wdGlvbnMubWFya0xvc3RBZnRlckRlZmF1bHQpLnRoZW4odGhpcy5tYXJrTG9zdCl9ZGVzdHJveSgpe3RoaXMuaW50ZXJlc3RNYXBSZWYucmVtb3ZlSW50ZXJlc3QodGhpcyksIXRoaXMuaXNGdWxsZmlsbGVkJiZ0aGlzLm9wdGlvbnMuZGVmYXVsdEZ1bGxmaWxsbWVudCYmdGhpcy5mdWxsZmlsbEludGVyZXN0KHRoaXMub3B0aW9ucy5kZWZhdWx0RnVsbGZpbGxtZW50KX1tYXJrTG9zdCgpe3RoaXMuZGVzdHJ1Y3Rpb25UaW1lci5zdGFydCgpfXJlbmV3KCl7dGhpcy5kZXN0cnVjdGlvblRpbWVyLnJlc2V0KCl9fX0pO3ZhciBnWCxtWD1uKCgpPT57Q2EoKTtwUigpO2hYKCk7Z1g9Y2xhc3N7Y29uc3RydWN0b3IoZSxhPXt9KXt0aGlzLmludGVyZXN0T2JqZWN0TWFwPW5ldyBWcyx0aGlzLmludGVyZXN0T2JzZXJ2YWJsZT1uZXcgQ3QuT2JzZXJ2YWJsZUludGFrZSx0aGlzLmNvbXBhcmlzb25GdW5jPWUsdGhpcy5vcHRpb25zPWF9YXN5bmMgYWRkSW50ZXJlc3QoZSxhKXtsZXQgcj10aGlzLmNvbXBhcmlzb25GdW5jKGUpLGksbz1uZXcgTDgodGhpcyxlLHRoaXMuY29tcGFyaXNvbkZ1bmMse21hcmtMb3N0QWZ0ZXJEZWZhdWx0OnRoaXMub3B0aW9ucy5tYXJrTG9zdEFmdGVyRGVmYXVsdCxkZWZhdWx0RnVsbGZpbGxtZW50OmF9KSxzPSExO3JldHVybiBhd2FpdCB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZvckVhY2gobD0+eyFzJiZsLmNvbXBhcmlzb25TdHJpbmc9PT1vLmNvbXBhcmlzb25TdHJpbmcmJihjb25zb2xlLmxvZygiaW5mbyIsYGludGVyZXN0IGFscmVhZHkgZXhpc3RzIGZvciAke28uY29tcGFyaXNvblN0cmluZ31gKSxzPSEwLGk9bCxpLnJlbmV3KCkpfSksaXx8KGk9byx0aGlzLmludGVyZXN0T2JqZWN0TWFwLmFkZChpKSksdGhpcy5pbnRlcmVzdE9ic2VydmFibGUucHVzaChpKSxpfXJlbW92ZUludGVyZXN0KGUpe2xldCBhPXRoaXMuaW50ZXJlc3RPYmplY3RNYXAuZmluZE9uZUFuZFJlbW92ZVN5bmMocj0+ZS5jb21wYXJpc29uU3RyaW5nPT09ci5jb21wYXJpc29uU3RyaW5nKX1jaGVja0ludGVyZXN0KGUpe2xldCBhPXRoaXMuY29tcGFyaXNvbkZ1bmMoZSk7cmV0dXJuIHRoaXMuY2hlY2tJbnRlcmVzdEJ5U3RyaW5nKGEpfWNoZWNrSW50ZXJlc3RCeVN0cmluZyhlKXtyZXR1cm4hIXRoaXMuaW50ZXJlc3RPYmplY3RNYXAuZmluZFN5bmMocj0+ci5jb21wYXJpc29uU3RyaW5nPT09ZSl9aW5mb3JtTG9zdEludGVyZXN0KGUpe2xldCBhPXRoaXMuZmluZEludGVyZXN0KGUpO2EmJmEubWFya0xvc3QoKX1maW5kSW50ZXJlc3QoZSl7bGV0IGE9dGhpcy5jb21wYXJpc29uRnVuYyhlKTtyZXR1cm4gdGhpcy5pbnRlcmVzdE9iamVjdE1hcC5maW5kU3luYyhpPT5pLmNvbXBhcmlzb25TdHJpbmc9PT1hKX19fSk7dmFyIHhYLGRVZT1uKCgpPT57Q2EoKTt4WD1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmFycmF5PVtdLHRoaXMuYXJyYXlMaW1pdD1lfWFkZE9uZShlKXt0aGlzLmFycmF5LnVuc2hpZnQoZSksdGhpcy5hcnJheS5sZW5ndGg+dGhpcy5hcnJheUxpbWl0JiYodGhpcy5hcnJheS5sZW5ndGg9dGhpcy5hcnJheUxpbWl0KX1hZGRNYW55KGUpe2ZvcihsZXQgYSBvZiBlKXRoaXMuYWRkT25lKGEpfXNldExpbWl0KGUpe3RoaXMuYXJyYXlMaW1pdD1lLHRoaXMuYXJyYXkubGVuZ3RoPnRoaXMuYXJyYXlMaW1pdCYmKHRoaXMuYXJyYXkubGVuZ3RoPXRoaXMuYXJyYXlMaW1pdCl9Z2V0QXZlcmFnZSgpe2lmKHR5cGVvZiB0aGlzLmFycmF5WzBdPT0ibnVtYmVyIil7bGV0IGU9MDtmb3IobGV0IGEgb2YgdGhpcy5hcnJheSllPWUrYTtyZXR1cm4gZS90aGlzLmFycmF5Lmxlbmd0aH1lbHNlIHJldHVybiBudWxsfX19KTt2YXIgYlgsZlVlPW4oKCk9PntDYSgpO3BSKCk7Ylg9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJlZmVyZW5jZU9iamVjdE1hcD1uZXcgVnN9Y2hlY2tBbmRUcmFjayhlKXtyZXR1cm4gdGhpcy5yZWZlcmVuY2VPYmplY3RNYXAuY2hlY2tGb3JPYmplY3QoZSk/ITE6KHRoaXMucmVmZXJlbmNlT2JqZWN0TWFwLmFkZChlKSwhMCl9fX0pO3ZhciB2WCx1VWU9bigoKT0+e0NhKCk7dlg9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9zdHJpbmdBcnJheT1bXSx0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheT1bXX1hZGRTdHJpbmcoZSl7dGhpcy5fc3RyaW5nQXJyYXkucHVzaChlKSx0aGlzLm5vdGlmeVRyaWdnZXIoKX1hZGRTdHJpbmdBcnJheShlKXtmb3IobGV0IGEgb2YgZSl0aGlzLmFkZFN0cmluZyhhKX1yZW1vdmVTdHJpbmcoZSl7Zm9yKGxldCBhIGluIHRoaXMuX3N0cmluZ0FycmF5KXRoaXMuX3N0cmluZ0FycmF5W2FdPT09ZSYmdGhpcy5fc3RyaW5nQXJyYXkuc3BsaWNlKHBhcnNlSW50KGEpLDEpO3RoaXMubm90aWZ5VHJpZ2dlcigpfXdpcGUoKXt0aGlzLl9zdHJpbmdBcnJheT1bXSx0aGlzLm5vdGlmeVRyaWdnZXIoKX1jaGVja1N0cmluZyhlKXtyZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkuaW5kZXhPZihlKSE9PS0xfWNoZWNrTWluaW1hdGNoKGUpe2xldCBhPW5ldyBvaS5TbWFydE1hdGNoKGUpLHI9ITE7Zm9yKGxldCBpIG9mIHRoaXMuX3N0cmluZ0FycmF5KWEubWF0Y2goaSkmJihyPSEwKTtyZXR1cm4gcn1jaGVja0lzRW1wdHkoKXtyZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkubGVuZ3RoPT09MH1nZXRTdHJpbmdBcnJheSgpe2xldCBlPVtdO2ZvcihsZXQgYSBvZiB0aGlzLl9zdHJpbmdBcnJheSllLnB1c2goYSk7cmV0dXJuIGV9cmVnaXN0ZXJVbnRpbFRydWUoZSxhKXtsZXQgcj1WZS5kZWZlcigpO3JldHVybiB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheS5wdXNoKCgpPT57bGV0IGk9ZSh0aGlzLmdldFN0cmluZ0FycmF5KCkpO3JldHVybiBpPT09ITAmJihhJiZhKCksci5yZXNvbHZlKCkpLGl9KSx0aGlzLm5vdGlmeVRyaWdnZXIoKSxyLnByb21pc2V9bm90aWZ5VHJpZ2dlcigpe2xldCBlPXRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LmZpbHRlcihhPT4hYSgpKTt0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheT1lfX19KTt2YXIgeVgscFVlPW4oKCk9PntDYSgpO3lYPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmFnZUFycmF5PVtdLHRoaXMub3B0aW9ucz1lfWNoZWNrQWdncmVnYXRpb25TdGF0dXMoKXtsZXQgZT0oKT0+e3RoaXMuYWdncmVnYXRpb25UaW1lcj1uZXcgaGkuVGltZXIodGhpcy5vcHRpb25zLmFnZ3JlZ2F0aW9uSW50ZXJ2YWxJbk1pbGxpcyksdGhpcy5hZ2dyZWdhdGlvblRpbWVyLmNvbXBsZXRlZC50aGVuKCgpPT57bGV0IGE9dGhpcy5zdG9yYWdlQXJyYXk7aWYoYS5sZW5ndGg9PT0wKXt0aGlzLmFnZ3JlZ2F0aW9uVGltZXI9bnVsbDtyZXR1cm59dGhpcy5zdG9yYWdlQXJyYXk9W10sZSgpLHRoaXMub3B0aW9ucy5mdW5jdGlvbkZvckFnZ3JlZ2F0aW9uKGEpfSksdGhpcy5hZ2dyZWdhdGlvblRpbWVyLnN0YXJ0KCl9O3RoaXMuYWdncmVnYXRpb25UaW1lcnx8ZSgpfWFkZChlKXt0aGlzLnN0b3JhZ2VBcnJheS5wdXNoKGUpLHRoaXMuY2hlY2tBZ2dyZWdhdGlvblN0YXR1cygpfX19KTt2YXIgd1gsaFVlPW4oKCk9PntDYSgpO3dYPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zeW1ib2xUcmVlPW5ldyB1Ui5kZWZhdWx0fWluaXRpYWxpemUoZSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbml0aWFsaXplKGUpfWhhc0NoaWxkcmVuKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUuaGFzQ2hpbGRyZW4oZSl9Zmlyc3RDaGlsZChlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmZpcnN0Q2hpbGQoZSl9bGFzdENoaWxkKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUubGFzdENoaWxkKGUpfXByZXZpb3VzU2libGluZyhlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXZpb3VzU2libGluZyhlKX1uZXh0U2libGluZyhlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLm5leHRTaWJsaW5nKGUpfXBhcmVudChlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnBhcmVudChlKX1sYXN0SW5jbHVzaXZlRGVzY2VuZGFudChlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KGUpfXByZWNlZGluZyhlLGEpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUucHJlY2VkaW5nKGUsYSl9Zm9sbG93aW5nKGUsYSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5mb2xsb3dpbmcoZSxhKX1jaGlsZHJlblRvQXJyYXkoZSxhKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmNoaWxkcmVuVG9BcnJheShlLGEpfWFuY2VzdG9yc1RvQXJyYXkoZSxhKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmFuY2VzdG9yc1RvQXJyYXkoZSxhKX10cmVlVG9BcnJheShlLGEpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUudHJlZVRvQXJyYXkoZSxhKX1jaGlsZHJlbkl0ZXJhdG9yKGUsYSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKGUsYSl9cHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUucHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKGUpfW5leHRTaWJsaW5nc0l0ZXJhdG9yKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmdzSXRlcmF0b3IoKX1hbmNlc3RvcnNJdGVyYXRvcihlKXt0aGlzLnN5bWJvbFRyZWUuYW5jZXN0b3JzSXRlcmF0b3IoKX10cmVlSXRlcmF0b3IoZSxhKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnRyZWVJdGVyYXRvcihlKX1pbmRleChlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmluZGV4KGUpfWNoaWxkcmVuQ291bnQoZSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5jaGlsZHJlbkNvdW50KGUpfWNvbXBhcmVUcmVlUG9zaXRpb24oZSxhKXtyZXR1cm4gdGhpcy5jb21wYXJlVHJlZVBvc2l0aW9uKGUsYSl9cmVtb3ZlKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUucmVtb3ZlKGUpfWluc2VydEJlZm9yZShlLGEpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUuaW5zZXJ0QmVmb3JlKGUsYSl9aW5zZXJ0QWZ0ZXIoZSxhKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmluc2VydEFmdGVyKGUsYSl9cHJlcGVuZENoaWxkKGUsYSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wcmVwZW5kQ2hpbGQoZSxhKX1hcHBlbmRDaGlsZChlLGEpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUuYXBwZW5kQ2hpbGQoZSxhKX10b0pzb25XaXRoSGllcmFjaHkoZSl7bGV0IGE9dGhpcy50cmVlSXRlcmF0b3IoZSx7fSk7Zm9yKGxldCByIG9mIGEpY29uc29sZS5sb2cocil9ZnJvbUpzb25XaXRoSGllcmFjaHkoZSl7fX19KTt2YXIgQjE9e307ZXQoQjEse0FzeW5jRXhlY3V0aW9uU3RhY2s6KCk9PmZYLEJhY2twcmVzc3VyZWRBcnJheTooKT0+dVgsRmFzdE1hcDooKT0+QzgsSW50ZXJlc3Q6KCk9Pkw4LEludGVyZXN0TWFwOigpPT5nWCxMaW1pdGVkQXJyYXk6KCk9PnhYLExvb3BUcmFja2VyOigpPT5iWCxPYmplY3RNYXA6KCk9PlZzLFN0cmluZ21hcDooKT0+dlgsVGltZWRBZ2dyZWd0b3I6KCk9PnlYLFRyZWU6KCk9PndYLHVuaTooKT0+Y1VlfSk7dmFyIGs4PW4oKCk9PntuVWUoKTtsVWUoKTtwWCgpO21YKCk7aFgoKTtkVWUoKTtmVWUoKTtwUigpO3VVZSgpO3BVZSgpO2hVZSgpfSk7dmFyIEFvPXt9O2V0KEFvLHthcmVVaW50OEFycmF5c0VxdWFsOigpPT5PVXQsYXNzZXJ0VWludDhBcnJheTooKT0+X28sYXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXI6KCk9PnZVZSxiYXNlNjRUb1N0cmluZzooKT0+VVV0LGJhc2U2NFRvVWludDhBcnJheTooKT0+elVlLGNvbXBhcmVVaW50OEFycmF5czooKT0+QlV0LGNvbmNhdFVpbnQ4QXJyYXlzOigpPT5GVXQsZ2V0VWludEJFOigpPT5ZVXQsaGV4VG9VaW50OEFycmF5OigpPT5HVXQsaW5jbHVkZXM6KCk9PlpVdCxpbmRleE9mOigpPT5rVWUsaXNVaW50OEFycmF5OigpPT5NWCxzdHJpbmdUb0Jhc2U2NDooKT0+VlV0LHN0cmluZ1RvVWludDhBcnJheTooKT0+d1VlLHRvVWludDhBcnJheTooKT0+SVV0LHVpbnQ4QXJyYXlUb0Jhc2U2NDooKT0+TVVlLHVpbnQ4QXJyYXlUb0hleDooKT0+V1V0LHVpbnQ4QXJyYXlUb1N0cmluZzooKT0+eVVlfSk7ZnVuY3Rpb24gbVVlKHQsZSxhKXtyZXR1cm4gdD90LmNvbnN0cnVjdG9yPT09ZT8hMDokVXQuY2FsbCh0KT09PWE6ITF9ZnVuY3Rpb24gTVgodCl7cmV0dXJuIG1VZSh0LFVpbnQ4QXJyYXksRFV0KX1mdW5jdGlvbiBOVXQodCl7cmV0dXJuIG1VZSh0LEFycmF5QnVmZmVyLEVVdCl9ZnVuY3Rpb24gUFV0KHQpe3JldHVybiBNWCh0KXx8TlV0KHQpfWZ1bmN0aW9uIF9vKHQpe2lmKCFNWCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcYFVpbnQ4QXJyYXlcYCwgZ290IFxgJHt0eXBlb2YgdH1cYGApfWZ1bmN0aW9uIHZVZSh0KXtpZighUFV0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxgVWludDhBcnJheVxgIG9yIFxgQXJyYXlCdWZmZXJcYCwgZ290IFxgJHt0eXBlb2YgdH1cYGApfWZ1bmN0aW9uIElVdCh0KXtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG5ldyBVaW50OEFycmF5KHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCk7dGhyb3cgbmV3IFR5cGVFcnJvcihgVW5zdXBwb3J0ZWQgdmFsdWUsIGdvdCBcYCR7dHlwZW9mIHR9XGAuYCl9ZnVuY3Rpb24gRlV0KHQsZSl7aWYodC5sZW5ndGg9PT0wKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtlPz89dC5yZWR1Y2UoKGksbyk9Pmkrby5sZW5ndGgsMCk7bGV0IGE9bmV3IFVpbnQ4QXJyYXkoZSkscj0wO2ZvcihsZXQgaSBvZiB0KV9vKGkpLGEuc2V0KGkscikscis9aS5sZW5ndGg7cmV0dXJuIGF9ZnVuY3Rpb24gT1V0KHQsZSl7aWYoX28odCksX28oZSksdD09PWUpcmV0dXJuITA7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKylpZih0W2FdIT09ZVthXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBCVXQodCxlKXtfbyh0KSxfbyhlKTtsZXQgYT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk7Zm9yKGxldCByPTA7cjxhO3IrKyl7bGV0IGk9dFtyXS1lW3JdO2lmKGkhPT0wKXJldHVybiBNYXRoLnNpZ24oaSl9cmV0dXJuIE1hdGguc2lnbih0Lmxlbmd0aC1lLmxlbmd0aCl9ZnVuY3Rpb24geVVlKHQsZT0idXRmOCIpe3JldHVybiB2VWUodCksZ1VlW2VdPz89bmV3IGdsb2JhbFRoaXMuVGV4dERlY29kZXIoZSksZ1VlW2VdLmRlY29kZSh0KX1mdW5jdGlvbiBUOCh0KXtpZih0eXBlb2YgdCE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXGBzdHJpbmdcYCwgZ290IFxgJHt0eXBlb2YgdH1cYGApfWZ1bmN0aW9uIHdVZSh0KXtyZXR1cm4gVDgodCksUlV0LmVuY29kZSh0KX1mdW5jdGlvbiBIVXQodCl7cmV0dXJuIHQucmVwbGFjZUFsbCgiKyIsIi0iKS5yZXBsYWNlQWxsKCIvIiwiXyIpLnJlcGxhY2UoLz0rJC8sIiIpfWZ1bmN0aW9uIHFVdCh0KXtsZXQgZT10LnJlcGxhY2VBbGwoIi0iLCIrIikucmVwbGFjZUFsbCgiXyIsIi8iKSxhPSg0LWUubGVuZ3RoJTQpJTQ7cmV0dXJuIGUrIj0iLnJlcGVhdChhKX1mdW5jdGlvbiBNVWUodCx7dXJsU2FmZTplPSExfT17fSl7X28odCk7bGV0IGE9IiI7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKz14VWUpe2xldCBpPXQuc3ViYXJyYXkocixyK3hVZSk7YSs9Z2xvYmFsVGhpcy5idG9hKFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KHZvaWQgMCxpKSl9cmV0dXJuIGU/SFV0KGEpOmF9ZnVuY3Rpb24gelVlKHQpe3JldHVybiBUOCh0KSxVaW50OEFycmF5LmZyb20oZ2xvYmFsVGhpcy5hdG9iKHFVdCh0KSksZT0+ZS5jb2RlUG9pbnRBdCgwKSl9ZnVuY3Rpb24gVlV0KHQse3VybFNhZmU6ZT0hMX09e30pe3JldHVybiBUOCh0KSxNVWUod1VlKHQpLHt1cmxTYWZlOmV9KX1mdW5jdGlvbiBVVXQodCl7cmV0dXJuIFQ4KHQpLHlVZSh6VWUodCkpfWZ1bmN0aW9uIFdVdCh0KXtfbyh0KTtsZXQgZT0iIjtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyllKz1qVXRbdFthXV07cmV0dXJuIGV9ZnVuY3Rpb24gR1V0KHQpe2lmKFQ4KHQpLHQubGVuZ3RoJTIhPT0wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIZXggc3RyaW5nIGxlbmd0aC4iKTtsZXQgZT10Lmxlbmd0aC8yLGE9bmV3IFVpbnQ4QXJyYXkoZSk7Zm9yKGxldCByPTA7cjxlO3IrKyl7bGV0IGk9YlVlW3RbcioyXV0sbz1iVWVbdFtyKjIrMV1dO2lmKGk9PT12b2lkIDB8fG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEhleCBjaGFyYWN0ZXIgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gJHtyKjJ9YCk7YVtyXT1pPDw0fG99cmV0dXJuIGF9ZnVuY3Rpb24gWVV0KHQpe2xldHtieXRlTGVuZ3RoOmV9PXQ7aWYoZT09PTYpcmV0dXJuIHQuZ2V0VWludDE2KDApKjIqKjMyK3QuZ2V0VWludDMyKDIpO2lmKGU9PT01KXJldHVybiB0LmdldFVpbnQ4KDApKjIqKjMyK3QuZ2V0VWludDMyKDEpO2lmKGU9PT00KXJldHVybiB0LmdldFVpbnQzMigwKTtpZihlPT09MylyZXR1cm4gdC5nZXRVaW50OCgwKSoyKioxNit0LmdldFVpbnQxNigxKTtpZihlPT09MilyZXR1cm4gdC5nZXRVaW50MTYoMCk7aWYoZT09PTEpcmV0dXJuIHQuZ2V0VWludDgoMCl9ZnVuY3Rpb24ga1VlKHQsZSl7bGV0IGE9dC5sZW5ndGgscj1lLmxlbmd0aDtpZihyPT09MHx8cj5hKXJldHVybi0xO2xldCBpPWEtcjtmb3IobGV0IG89MDtvPD1pO28rKyl7bGV0IHM9ITA7Zm9yKGxldCBsPTA7bDxyO2wrKylpZih0W28rbF0hPT1lW2xdKXtzPSExO2JyZWFrfWlmKHMpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gWlV0KHQsZSl7cmV0dXJuIGtVZSh0LGUpIT09LTF9dmFyICRVdCxEVXQsRVV0LGdVZSxSVXQseFVlLGpVdCxiVWUsU1VlPW4oKCk9PnskVXQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxEVXQ9IltvYmplY3QgVWludDhBcnJheV0iLEVVdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iO2dVZT17dXRmODpuZXcgZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcigidXRmOCIpfTtSVXQ9bmV3IGdsb2JhbFRoaXMuVGV4dEVuY29kZXI7eFVlPTY1NTM1O2pVdD1BcnJheS5mcm9tKHtsZW5ndGg6MjU2fSwodCxlKT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKTtiVWU9ezA6MCwxOjEsMjoyLDM6Myw0OjQsNTo1LDY6Niw3OjcsODo4LDk6OSxhOjEwLGI6MTEsYzoxMixkOjEzLGU6MTQsZjoxNSxBOjEwLEI6MTEsQzoxMixEOjEzLEU6MTQsRjoxNX19KTt2YXIgQ1VlPW4oKCk9PntTVWUoKX0pO3ZhciByNj17fTtldChyNix7YmFzZTY0VG9VaW50OEFycmF5OigpPT5KVXQsZW5zdXJlUHVyZVVpbnQ4QXJyYXk6KCk9PmFqdCxpc0J1ZmZlckxpa2U6KCk9PnRqdCxpc1VpbnQ4QXJyYXk6KCk9PmVqdCx1SW50OEFycmF5RXh0cmFzOigpPT5RVXQsdUludDhBcnJheVRvQmFzZTY0OigpPT5LVXR9KTtmdW5jdGlvbiBLVXQodCl7cmV0dXJuIEFvLnVpbnQ4QXJyYXlUb0Jhc2U2NCh0KX1mdW5jdGlvbiBKVXQodCl7cmV0dXJuIEFvLmJhc2U2NFRvVWludDhBcnJheSh0KX1mdW5jdGlvbiB0anQodCl7cmV0dXJuIHQmJnR5cGVvZiB0LmJ5dGVMZW5ndGg9PSJudW1iZXIiPyEwOnR5cGVvZiBCdWZmZXI8InUiJiZCdWZmZXIuaXNCdWZmZXI/QnVmZmVyLmlzQnVmZmVyKHQpOiExfWZ1bmN0aW9uIGFqdCh0KXtsZXQgZT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7cmV0dXJuIGUuc2V0KHQpLGV9dmFyIFFVdCxlanQsTFVlPW4oKCk9PntDVWUoKTtRVXQ9QW87ZWp0PXQ9PkFvLmlzVWludDhBcnJheSh0KX0pO3ZhciBfOD1uKCgpPT57cDIoKX0pO3ZhciBBOCxoUj1uKCgpPT57XzgoKTtBOD1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3RoaXMuZ3VhcmRGdW5jdGlvbj1lLHRoaXMub3B0aW9ucz1hfWFzeW5jIGV4ZWMoZSl7cmV0dXJuIGF3YWl0IHRoaXMuZ3VhcmRGdW5jdGlvbihlKX1hc3luYyBnZXRGYWlsZWRIaW50KGUpe3JldHVybiBhd2FpdCB0aGlzLmV4ZWMoZSk/bnVsbDp0aGlzLm9wdGlvbnMuZmFpbGVkSGludH19fSk7dmFyICQ4LHpYPW4oKCk9PntfOCgpOyQ4PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5uYW1lPSJHdWFyZEVycm9yIn19fSk7dmFyIEQ4LGtYPW4oKCk9PntfOCgpO2hSKCk7RDg9Y2xhc3MgZXh0ZW5kcyBBOHtjb25zdHJ1Y3RvcihlPVtdKXtzdXBlcihhc3luYyBhPT50aGlzLmFsbEd1YXJkc1Bhc3MoYSkpLHRoaXMuZ3VhcmRzPWV9YXN5bmMgZXhlY0FsbFdpdGhEYXRhKGUsYT17bW9kZToicGFyYWxsZWwiLHN0b3BPbkZhaWw6ITF9KXtsZXQgcj1bXTtmb3IobGV0IG8gb2YgdGhpcy5ndWFyZHMpe2xldCBzPW8uZXhlYyhlKTtpZihhLm1vZGU9PT0ic2VyaWFsIiYmYXdhaXQgcyxyLnB1c2gocyksYS5zdG9wT25GYWlsJiYhYXdhaXQgcylyZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwocil9cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHIpfWFzeW5jIGFsbEd1YXJkc1Bhc3MoZSxhPXttb2RlOiJwYXJhbGxlbCIsc3RvcE9uRmFpbDohMX0pe3JldHVybihhd2FpdCB0aGlzLmV4ZWNBbGxXaXRoRGF0YShlLGEpKS5ldmVyeShpPT5pKX1hc3luYyBhbnlHdWFyZHNQYXNzKGUpe3JldHVybihhd2FpdCB0aGlzLmV4ZWNBbGxXaXRoRGF0YShlLHttb2RlOiJwYXJhbGxlbCIsc3RvcE9uRmFpbDohMX0pKS5zb21lKHI9PnIpfWdldEZhaWxlZEhpbnQoZSl7Zm9yKGxldCBhIG9mIHRoaXMuZ3VhcmRzKXtsZXQgcj1hLmdldEZhaWxlZEhpbnQoZSk7aWYocilyZXR1cm4gcn19fX0pO3ZhciBFOD17fTtldChFOCx7R3VhcmQ6KCk9PkE4LEd1YXJkRXJyb3I6KCk9PiQ4LEd1YXJkU2V0OigpPT5EOCxwYXNzR3VhcmRzT3JSZWplY3Q6KCk9PnJqdH0pO3ZhciByanQsVFVlPW4oKCk9PntfOCgpO2hSKCk7elgoKTtoUigpO2tYKCk7a1goKTt6WCgpO3JqdD1hc3luYyh0LGUpPT57bGV0IGE9bmV3IEQ4KGUpO2lmKCFhd2FpdCBhLmFsbEd1YXJkc1Bhc3ModCkpe2xldCBpPWF3YWl0IGEuZ2V0RmFpbGVkSGludCh0KTt0aHJvdyBuZXcgJDgoYEd1YXJkcyBmYWlsZWQ6CiR7aX0KICAgIGApfX19KTt2YXIgX1VlPW4oKCk9PntwMigpfSk7dmFyIEFVZT1uKCgpPT57fSk7dmFyIFNYLCRVZT1uKCgpPT57X1VlKCk7QVVlKCk7U1g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRlZFNjcmlwdHM9W119YXN5bmMgZ2V0RW52QXdhcmVNb2R1bGUoZSl7aWYodGhpcy5pc05vZGUpcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoZS5ub2RlTW9kdWxlTmFtZSk7aWYodGhpcy5pc0Jyb3dzZXIpcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U2FmZVdlYk1vZHVsZShlLndlYlVybEFyZyxlLmdldEZ1bmN0aW9uKTtjb25zb2xlLmVycm9yKCJwbGF0Zm9ybSBmb3IgbG9hZGluZyBub3Qgc3VwcG9ydGVkIGJ5IHNtYXJ0ZW52Iil9YXN5bmMgZ2V0U2FmZU5vZGVNb2R1bGUoZSxhKXtpZighdGhpcy5pc05vZGUpe2NvbnNvbGUuZXJyb3IoYFlvdSB0cmllZCB0byBsb2FkIGEgbm9kZSBtb2R1bGUgaW4gYSB3cm9uZyBjb250ZXh0OiAke2V9LiBUaGlzIGRvZXMgbm90IHRocm93LmApO3JldHVybn1sZXQgcj1hd2FpdCBuZXcgRnVuY3Rpb24oYHJldHVybiBpbXBvcnQoJyR7ZX0nKWApKCk7cmV0dXJuIGEmJmF3YWl0IGEocikscn1hc3luYyBnZXRTYWZlV2ViTW9kdWxlKGUsYSl7aWYoIXRoaXMuaXNCcm93c2VyKXtjb25zb2xlLmVycm9yKCJZb3UgdHJpZWQgdG8gbG9hZCBhIHdlYiBtb2R1bGUgaW4gYSB3cm9uZyBjb250ZXh0Iik7cmV0dXJufWlmKHRoaXMubG9hZGVkU2NyaXB0cy5pbmNsdWRlcyhlKSlyZXR1cm4gYSgpO3RoaXMubG9hZGVkU2NyaXB0cy5wdXNoKGUpO2xldCByPVZlLmRlZmVyKCk7aWYoZ2xvYmFsVGhpcy5pbXBvcnRTY3JpcHRzKWdsb2JhbFRoaXMuaW1wb3J0U2NyaXB0cyhlKSxyLnJlc29sdmUoKTtlbHNle2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2kub25sb2FkPSgpPT57ci5yZXNvbHZlKCl9LGkuc3JjPWUsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChpKX1yZXR1cm4gYXdhaXQgci5wcm9taXNlLGEoKX1nZXQgcnVudGltZUVudigpe3JldHVybiB0eXBlb2YgcHJvY2VzczwidSI/Im5vZGUiOiJicm93c2VyIn1nZXQgaXNCcm93c2VyKCl7cmV0dXJuIXRoaXMuaXNOb2RlfWdldCB1c2VyQWdlbnQoKXtyZXR1cm4gdGhpcy5pc0Jyb3dzZXI/bmF2aWdhdG9yLnVzZXJBZ2VudDoidW5kZWZpbmVkIn1nZXQgaXNOb2RlKCl7cmV0dXJuIHRoaXMucnVudGltZUVudj09PSJub2RlIn1nZXQgbm9kZVZlcnNpb24oKXtyZXR1cm4gcHJvY2Vzcy52ZXJzaW9ufWdldCBpc0NJKCl7cmV0dXJuIHRoaXMuaXNOb2RlPyEhcHJvY2Vzcy5lbnYuQ0k6ITF9YXN5bmMgaXNNYWNBc3luYygpe3JldHVybiB0aGlzLmlzTm9kZT8oYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKSkucGxhdGZvcm0oKT09PSJkYXJ3aW4iOiExfWFzeW5jIGlzV2luZG93c0FzeW5jKCl7cmV0dXJuIHRoaXMuaXNOb2RlPyhhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKCJvcyIpKS5wbGF0Zm9ybSgpPT09IndpbjMyIjohMX1hc3luYyBpc0xpbnV4QXN5bmMoKXtyZXR1cm4gdGhpcy5pc05vZGU/KGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoIm9zIikpLnBsYXRmb3JtKCk9PT0ibGludXgiOiExfWFzeW5jIHByaW50RW52KCl7dGhpcy5pc05vZGU/KGNvbnNvbGUubG9nKCJydW5uaW5nIG9uIE5PREUiKSxjb25zb2xlLmxvZygibm9kZSB2ZXJzaW9uIGlzICIrdGhpcy5ub2RlVmVyc2lvbikpOihjb25zb2xlLmxvZygicnVubmluZyBvbiBCUk9XU0VSIiksY29uc29sZS5sb2coImJyb3dzZXIgaXMgIit0aGlzLnVzZXJBZ2VudCkpfX19KTt2YXIgV2E9e307ZXQoV2Ese1NtYXJ0ZW52OigpPT5TWH0pO3ZhciBOOD1uKCgpPT57JFVlKCl9KTt2YXIgQ1gsaTY9bigoKT0+e0NYPU4yKGxGKCksMSl9KTt2YXIgbVI9e307ZXQobVIse2NyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZzooKT0+Y2p0LGNyZWF0ZVJhbmRvbVN0cmluZzooKT0+bGp0fSk7dmFyIHNqdCxuanQsbGp0LGNqdCxEVWU9bigoKT0+e2k2KCk7c2p0PSh0LGUpPT57aWYodHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzLmNyeXB0byYmZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXtsZXQgYT1lLXQscj1uZXcgVWludDMyQXJyYXkoMSk7cmV0dXJuIGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhyKSx0K3JbMF0lYX1lbHNlIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGUtdCkpK3R9LG5qdD0odCxlLGEpPT57bGV0IHI9e0E6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIixhOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsMDoiMDEyMzQ1Njc4OSIsIiEiOiIhQCMkJV4mKigpXystPVtde318OzosLjw+PyIsIioiOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSFAIyQlXiYqKClfKy09W117fXw7OiwuPD4/In0saT10O2UmJmU+dC5sZW5ndGg/aT10LnJlcGVhdChNYXRoLmNlaWwoZS90Lmxlbmd0aCkpLnNsaWNlKDAsZSk6ZSYmKGk9dC5zbGljZSgwLGUpKTtsZXQgbz0iIjtmb3IobGV0IHMgb2YgaSlpZihyW3NdKXtsZXQgbD1yW3NdLGY9c2p0KDAsbC5sZW5ndGgpO28rPWxbZl19ZWxzZSBvKz1zO3JldHVybiBvfSxsanQ9KHQsZSxhKT0+bmp0KHQsZSxhKSxjanQ9KCk9PkNYLnVuaSgpfSk7dmFyIGdSPXt9O2V0KGdSLHttYWtlRW52T2JqZWN0OigpPT5kanR9KTt2YXIgZGp0LEVVZT1uKCgpPT57aTYoKTtkanQ9ZnVuY3Rpb24odCl7bGV0IGU9e30sYT0vKC4qKT0oLiopLztpZih0eXBlb2YgdDwidSIpZm9yKGxldCByIGluIHQpe2xldCBpPWEuZXhlYyh0W3JdKTtlW2lbMV1dPWlbMl19cmV0dXJuIGV9fSk7dmFyIFVzPXt9O2V0KFVzLHtpbmRlbnQ6KCk9PnVqdCxpbmRlbnRXaXRoUHJlZml4OigpPT5wanQsbm9ybWFsaXplOigpPT5oanR9KTt2YXIgTFgsVFgsZmp0LHVqdCxwanQsaGp0LE5VZT1uKCgpPT57aTYoKTtMWD10PT57bGV0IGU9dC5zcGxpdChgCmApO3JldHVybiBmanQoZSl9LFRYPXQ9PntsZXQgZT0iIjtmb3IobGV0IGEgb2YgdCllPWUrYStgCmA7cmV0dXJuIGV9LGZqdD10PT57bGV0IGU9L15bXHNdKiQvO3JldHVybiBlLnRlc3QodFswXSkmJnQuc2hpZnQoKSxlLnRlc3QodFt0Lmxlbmd0aC0xXSkmJnQucG9wKCksdH0sdWp0PSh0LGUpPT57bGV0IGE9TFgodCk7Zm9yKGxldCBpIG9mIGEpaT0iICIucmVwZWF0KGUpK2k7cmV0dXJuIFRYKGEpfSxwanQ9KHQsZSk9PntsZXQgYSxyPUxYKHQpLGk9W107Zm9yKGxldCBvIG9mIHIpaS5wdXNoKGUrbyk7cmV0dXJuIGE9VFgoaSksYX0saGp0PXQ9PntsZXQgZSxhPUxYKHQpLHIsaT0vXihccyopLyxvPS9eKFxzKikkLztmb3IobGV0IGwgb2YgYSl7bGV0IGY9aS5leGVjKGwpWzFdOyh0eXBlb2Ygcj4idSJ8fGYubGVuZ3RoPHIpJiYhby50ZXN0KGwpJiYocj1mLmxlbmd0aCl9bGV0IHM9W107Zm9yKGxldCBsIG9mIGEpcy5wdXNoKGwuc3Vic3RyKHIpKTtyZXR1cm4gZT1UWChzKSxlfX0pO3ZhciB4Uj17fTtldCh4Uix7cmVwbGFjZUFsbDooKT0+UFVlLHN0YW5kYXJkOigpPT5nanR9KTt2YXIgUFVlLG1qdCxnanQsSVVlPW4oKCk9PntQVWU9KHQsZSxhKT0+dC5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLGEpLG1qdD10PT57bGV0IGU9dC5zcGxpdChgCmApLGE9MS8wO2ZvcihsZXQgciBvZiBlKWlmKHIudHJpbSgpLmxlbmd0aD4wKXtsZXQgaT1yLm1hdGNoKC9eKFxzKikvKTtpJiYoYT1NYXRoLm1pbihhLGlbMV0ubGVuZ3RoKSl9cmV0dXJuIGE9PT0xLzB8fGE9PT0wP3Q6ZS5tYXAocj0+ci5sZW5ndGg+PWE/ci5zbGljZShhKTpyKS5qb2luKGAKYCl9LGdqdD0odCxlKT0+e2xldCBhPXQ7cmV0dXJuKCFlfHxlLnN0cmlwSW5kZW50KSYmKGE9bWp0KGEpKSwoIWV8fGUubm9ybWFsaXplTmV3bGluZSkmJihhPWEucmVwbGFjZSgvXHJcbi9nLGAKYCkpLCghZXx8ZS5yZXBsYWNlVGFicykmJihhPVBVZShhLCIJLyIsIiAiKSksKCFlfHxlLnN0cmlwTGVhZGluZ1RyYWlsaW5nRW1wdHlMaW5lcykmJihhPWEucmVwbGFjZSgvXlxzKltcclxuXS9nbSwiIikucmVwbGFjZSgvXHMqW1xyXG5dJC9nbSwiIikpLCghZXx8ZS5zdHJpcEFsbEVtcHR5TGluZXMpJiYoYT1hLnJlcGxhY2UoL15ccypbXHJcbl0vZ20sIiIpKSxhfX0pO3ZhciBfWCxiUixvNixBWD1uKCgpPT57X1g9e2VuY29kZTp0PT57aWYodHlwZW9mIEJ1ZmZlcjwidSIpcmV0dXJuIEJ1ZmZlci5mcm9tKHQsInV0ZjgiKS50b1N0cmluZygiYmFzZTY0Iik7aWYodHlwZW9mIGJ0b2E8InUiKXtsZXQgZT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCksYT1BcnJheS5mcm9tKGUscj0+U3RyaW5nLmZyb21DaGFyQ29kZShyKSkuam9pbigiIik7cmV0dXJuIGJ0b2EoYSl9ZWxzZXtsZXQgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsYT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCkscj0iIixpPTA7Zm9yKDtpPGEubGVuZ3RoOyl7bGV0IG89YVtpKytdLHM9aTxhLmxlbmd0aD9hW2krK106MCxsPWk8YS5sZW5ndGg/YVtpKytdOjAsZj1vPDwxNnxzPDw4fGw7cis9ZS5jaGFyQXQoZj4+MTgmNjMpLHIrPWUuY2hhckF0KGY+PjEyJjYzKSxyKz1pLTI8YS5sZW5ndGg/ZS5jaGFyQXQoZj4+NiY2Myk6Ij0iLHIrPWktMTxhLmxlbmd0aD9lLmNoYXJBdChmJjYzKToiPSJ9cmV0dXJuIHJ9fSxkZWNvZGU6dD0+e2xldCBlPXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucGFkRW5kKHQubGVuZ3RoKyg0LXQubGVuZ3RoJTQpJTQsIj0iKTtpZih0eXBlb2YgQnVmZmVyPCJ1IilyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoInV0ZjgiKTtpZih0eXBlb2YgYXRvYjwidSIpe2xldCBhPWF0b2IoZSkscj1uZXcgVWludDhBcnJheShhLmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxhLmxlbmd0aDtpKyspcltpXT1hLmNoYXJDb2RlQXQoaSk7cmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShyKX1lbHNle2xldCBhPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixyPVtdLGk9MDtmb3IoO2k8ZS5sZW5ndGg7KXtsZXQgbz1hLmluZGV4T2YoZS5jaGFyQXQoaSsrKSkscz1hLmluZGV4T2YoZS5jaGFyQXQoaSsrKSksbD1hLmluZGV4T2YoZS5jaGFyQXQoaSsrKSksZj1hLmluZGV4T2YoZS5jaGFyQXQoaSsrKSksYz1vPDwxOHxzPDwxMnxsPDw2fGY7ci5wdXNoKGM+PjE2JjI1NSksbCE9PTY0JiZyLnB1c2goYz4+OCYyNTUpLGYhPT02NCYmci5wdXNoKGMmMjU1KX1yZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIpKX19fSxiUj1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3N3aXRjaChhKXtjYXNlInN0cmluZyI6dGhpcy5yZWZTdHJpbmc9ZTticmVhaztjYXNlImJhc2U2NCI6dGhpcy5yZWZTdHJpbmc9bzYuZGVjb2RlKGUpO2JyZWFrO2Nhc2UiYmFzZTY0dXJpIjp0aGlzLnJlZlN0cmluZz1vNi5kZWNvZGUoZSl9fWdldCBzaW1wbGVTdHJpbmcoKXtyZXR1cm4gdGhpcy5yZWZTdHJpbmd9Z2V0IGJhc2U2NFN0cmluZygpe3JldHVybiBvNi5lbmNvZGUodGhpcy5yZWZTdHJpbmcpfWdldCBiYXNlNjRVcmlTdHJpbmcoKXtyZXR1cm4gbzYuZW5jb2RlVXJpKHRoaXMucmVmU3RyaW5nKX19LG82PXtlbmNvZGU6dD0+X1guZW5jb2RlKHQpLGVuY29kZVVyaTp0PT5fWC5lbmNvZGUodCkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpLGRlY29kZTp0PT5fWC5kZWNvZGUodCksaXNCYXNlNjQ6dD0+L14oW0EtWmEtejAtOSsvXXs0fSkqKFtBLVphLXowLTkrL117M309fFtBLVphLXowLTkrL117Mn09PSk/JC8udGVzdCh0KX19KTt2YXIgdlI9e307ZXQodlIse2lzQmFzZTY0OigpPT5ianQsaXNVdGY4OigpPT54anR9KTt2YXIgeGp0LGJqdCxGVWU9bigoKT0+e2k2KCk7QVgoKTt4anQ9dD0+e2xldCBhPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KSxyPTA7Zm9yKDtyPGEubGVuZ3RoOyl7aWYoYVtyXT09PTl8fGFbcl09PT0xMHx8YVtyXT09PTEzfHwzMjw9YVtyXSYmYVtyXTw9MTI2KXtyKz0xO2NvbnRpbnVlfWlmKDE5NDw9YVtyXSYmYVtyXTw9MjIzJiYxMjg8PWFbcisxXSYmYVtyKzFdPD0xOTEpe3IrPTI7Y29udGludWV9aWYoYVtyXT09PTIyNCYmMTYwPD1hW3IrMV0mJmFbcisxXTw9MTkxJiYxMjg8PWFbcisyXSYmYVtyKzJdPD0xOTF8fCgyMjU8PWFbcl0mJmFbcl08PTIzNnx8YVtyXT09PTIzOHx8YVtyXT09PTIzOSkmJjEyODw9YVtyKzFdJiZhW3IrMV08PTE5MSYmMTI4PD1hW3IrMl0mJmFbcisyXTw9MTkxfHxhW3JdPT09MjM3JiYxMjg8PWFbcisxXSYmYVtyKzFdPD0xNTkmJjEyODw9YVtyKzJdJiZhW3IrMl08PTE5MSl7cis9Mztjb250aW51ZX1pZihhW3JdPT09MjQwJiYxNDQ8PWFbcisxXSYmYVtyKzFdPD0xOTEmJjEyODw9YVtyKzJdJiZhW3IrMl08PTE5MSYmMTI4PD1hW3IrM10mJmFbciszXTw9MTkxfHwyNDE8PWFbcl0mJmFbcl08PTI0MyYmMTI4PD1hW3IrMV0mJmFbcisxXTw9MTkxJiYxMjg8PWFbcisyXSYmYVtyKzJdPD0xOTEmJjEyODw9YVtyKzNdJiZhW3IrM108PTE5MXx8YVtyXT09PTI0NCYmMTI4PD1hW3IrMV0mJmFbcisxXTw9MTQzJiYxMjg8PWFbcisyXSYmYVtyKzJdPD0xOTEmJjEyODw9YVtyKzNdJiZhW3IrM108PTE5MSl7cis9NDtjb250aW51ZX1yZXR1cm4hMX1yZXR1cm4hMH0sYmp0PXQ9PntsZXQgZT0vW15BLVowLTkrXC89XS9pLGE9dC5sZW5ndGg7aWYoIWF8fGElNCE9PTB8fGUudGVzdCh0KSlyZXR1cm4hMTtsZXQgcj10LmluZGV4T2YoIj0iKTtyZXR1cm4gcj09PS0xfHxyPT09YS0xfHxyPT09YS0yJiZ0W2EtMV09PT0iPSJ9fSk7dmFyIHlSLE9VZT1uKCgpPT57eVI9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5wcm90b2NvbD10aGlzLl9wcm90b2NvbFJlZ2V4KGUpLHRoaXMucHJvdG9jb2x8fChlPWBodHRwczovLyR7ZX1gKSx0aGlzLm5vZGVQYXJzZWRVcmw9bmV3IFVSTChlKSx0aGlzLnBvcnQ9dGhpcy5ub2RlUGFyc2VkVXJsLnBvcnQ7bGV0IGE9dGhpcy5fZG9tYWluUmVnZXgoZS5yZXBsYWNlKHRoaXMubm9kZVBhcnNlZFVybC5wYXRobmFtZSwiIikpO3RoaXMuZnVsbE5hbWU9IiI7Zm9yKGxldCByPTE7cjw9NTtyKyspaWYoYVtyLTFdKXtsZXQgaT1hW3ItMV07dGhpc1sibGV2ZWwiK3IudG9TdHJpbmcoKV09aSx0aGlzLmZ1bGxOYW1lPT09IiI/dGhpcy5mdWxsTmFtZT1pOnRoaXMuZnVsbE5hbWU9aSsiLiIrdGhpcy5mdWxsTmFtZX1lbHNlIHRoaXNbImxldmVsIityLnRvU3RyaW5nKCldPXZvaWQgMDt0aGlzLnpvbmVOYW1lPXRoaXMubGV2ZWwyKyIuIit0aGlzLmxldmVsMSx0aGlzLnRvcExldmVsPXRoaXMubGV2ZWwxLHRoaXMuZG9tYWluTmFtZT10aGlzLmxldmVsMix0aGlzLnN1YkRvbWFpbj10aGlzLmxldmVsM31fZG9tYWluUmVnZXgoZSl7bGV0IHI9LyhbYS16QS1aMC05XC1cX10qKVwuezAsMX0oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfShbYS16QS1aMC05XC1cX10qKVwuezAsMX0oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9JC8uZXhlYyhlKTtyZXR1cm4gci5yZXZlcnNlKCksci5wb3AoKSxyLmZpbHRlcihmdW5jdGlvbihvKXtyZXR1cm4gbyE9PSIifSl9X3Byb3RvY29sUmVnZXgoZSl7bGV0IHI9L14oW2EtekEtWjAtOV0qKTpcL1wvLy5leGVjKGUpO2lmKHIpcmV0dXJuIHJbMV19X3BvcnRSZWdleChlKXtsZXQgcj0vXihbYS16QS1aMC05XSopOlwvXC8vLmV4ZWMoZSk7aWYocilyZXR1cm4gclsxXX19fSk7dmFyIHdSLHZqdCxCVWUsUlVlPW4oKCk9PntpNigpO3dSPWNsYXNze2NvbnN0cnVjdG9yKGUsYSl7bGV0IHI9dmp0KGUpO3RoaXMuaG9zdD1yWzFdLHRoaXMudXNlcj1yWzJdLHRoaXMucmVwbz1yWzNdLHRoaXMuYWNjZXNzVG9rZW49YSx0aGlzLnNzaFVybD1CVWUodGhpcy5ob3N0LHRoaXMudXNlcix0aGlzLnJlcG8sdGhpcy5hY2Nlc3NUb2tlbiwic3NoIiksdGhpcy5odHRwc1VybD1CVWUodGhpcy5ob3N0LHRoaXMudXNlcix0aGlzLnJlcG8sdGhpcy5hY2Nlc3NUb2tlbiwiaHR0cHMiKX19LHZqdD1mdW5jdGlvbih0KXtyZXR1cm4vKFthLXpBLVowLTlcLV9cLl0qKSg/OlwvfFw6KShbYS16QS1aMC05XC1fXC5dKikoPzpcLykoW2EtekEtWjAtOVwtX1wuXSopKD86XC5naXQpLy5leGVjKHQpfSxCVWU9ZnVuY3Rpb24odCxlLGEscj0iIixpKXtsZXQgbztzd2l0Y2gociE9PSIiJiYocj1yKyJAIiksaSl7Y2FzZSJodHRwcyI6bz0iaHR0cHM6Ly8iK3IrdCsiLyIrZSsiLyIrYSsiLmdpdCI7YnJlYWs7Y2FzZSJzc2giOm89ImdpdEAiK3QrIjoiK2UrIi8iK2ErIi5naXQiO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiTGluayBUeXBlICIraSsiIG5vdCBrbm93biIpO2JyZWFrfXJldHVybiBvfX0pO3ZhciBMYT17fTtldChMYSx7QmFzZTY0OigpPT5iUixEb21haW46KCk9PnlSLEdpdFJlcG86KCk9PndSLGJhc2U2NDooKT0+bzYsY3JlYXRlOigpPT5tUixkb2NrZXI6KCk9PmdSLGluZGVudDooKT0+VXMsbm9ybWFsaXplOigpPT54Uix0eXBlOigpPT52Un0pO3ZhciBQOD1uKCgpPT57RFVlKCk7RVVlKCk7TlVlKCk7SVVlKCk7RlVlKCk7QVgoKTtPVWUoKTtSVWUoKX0pO3ZhciBUamU9Y3QoKE84LGM2KT0+e3ZhciB5anQ9MjAwLEhVZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIscVVlPTkwMDcxOTkyNTQ3NDA5OTEsJFg9IltvYmplY3QgQXJndW1lbnRzXSIsd2p0PSJbb2JqZWN0IEFycmF5XSIsVlVlPSJbb2JqZWN0IEJvb2xlYW5dIixVVWU9IltvYmplY3QgRGF0ZV0iLE1qdD0iW29iamVjdCBFcnJvcl0iLERYPSJbb2JqZWN0IEZ1bmN0aW9uXSIsalVlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsTVI9IltvYmplY3QgTWFwXSIsV1VlPSJbb2JqZWN0IE51bWJlcl0iLEVYPSJbb2JqZWN0IE9iamVjdF0iLEdVZT0iW29iamVjdCBQcm9taXNlXSIsWVVlPSJbb2JqZWN0IFJlZ0V4cF0iLHpSPSJbb2JqZWN0IFNldF0iLFpVZT0iW29iamVjdCBTdHJpbmddIixYVWU9IltvYmplY3QgU3ltYm9sXSIsTlg9IltvYmplY3QgV2Vha01hcF0iLFFVZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGtSPSJbb2JqZWN0IERhdGFWaWV3XSIsS1VlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLEpVZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixlamU9IltvYmplY3QgSW50OEFycmF5XSIsdGplPSJbb2JqZWN0IEludDE2QXJyYXldIixhamU9IltvYmplY3QgSW50MzJBcnJheV0iLHJqZT0iW29iamVjdCBVaW50OEFycmF5XSIsaWplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsb2plPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsc2plPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsemp0PS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxranQ9L1x3KiQvLFNqdD0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxDanQ9L14oPzowfFsxLTldXGQqKSQvLGkxPXt9O2kxWyRYXT1pMVt3anRdPWkxW1FVZV09aTFba1JdPWkxW1ZVZV09aTFbVVVlXT1pMVtLVWVdPWkxW0pVZV09aTFbZWplXT1pMVt0amVdPWkxW2FqZV09aTFbTVJdPWkxW1dVZV09aTFbRVhdPWkxW1lVZV09aTFbelJdPWkxW1pVZV09aTFbWFVlXT1pMVtyamVdPWkxW2lqZV09aTFbb2plXT1pMVtzamVdPSEwLGkxW01qdF09aTFbRFhdPWkxW05YXT0hMTt2YXIgTGp0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxUanQ9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixtaT1ManR8fFRqdHx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxuamU9dHlwZW9mIE84PT0ib2JqZWN0IiYmTzgmJiFPOC5ub2RlVHlwZSYmTzgsbGplPW5qZSYmdHlwZW9mIGM2PT0ib2JqZWN0IiYmYzYmJiFjNi5ub2RlVHlwZSYmYzYsX2p0PWxqZSYmbGplLmV4cG9ydHM9PT1uamU7ZnVuY3Rpb24gQWp0KHQsZSl7cmV0dXJuIHQuc2V0KGVbMF0sZVsxXSksdH1mdW5jdGlvbiAkanQodCxlKXtyZXR1cm4gdC5hZGQoZSksdH1mdW5jdGlvbiBEanQodCxlKXtmb3IodmFyIGE9LTEscj10P3QubGVuZ3RoOjA7KythPHImJmUodFthXSxhLHQpIT09ITE7KTtyZXR1cm4gdH1mdW5jdGlvbiBFanQodCxlKXtmb3IodmFyIGE9LTEscj1lLmxlbmd0aCxpPXQubGVuZ3RoOysrYTxyOyl0W2krYV09ZVthXTtyZXR1cm4gdH1mdW5jdGlvbiBjamUodCxlLGEscil7dmFyIGk9LTEsbz10P3QubGVuZ3RoOjA7Zm9yKHImJm8mJihhPXRbKytpXSk7KytpPG87KWE9ZShhLHRbaV0saSx0KTtyZXR1cm4gYX1mdW5jdGlvbiBOanQodCxlKXtmb3IodmFyIGE9LTEscj1BcnJheSh0KTsrK2E8dDspclthXT1lKGEpO3JldHVybiByfWZ1bmN0aW9uIFBqdCh0LGUpe3JldHVybiB0Py5bZV19ZnVuY3Rpb24gZGplKHQpe3ZhciBlPSExO2lmKHQhPW51bGwmJnR5cGVvZiB0LnRvU3RyaW5nIT0iZnVuY3Rpb24iKXRyeXtlPSEhKHQrIiIpfWNhdGNoe31yZXR1cm4gZX1mdW5jdGlvbiBmamUodCl7dmFyIGU9LTEsYT1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24ocixpKXthWysrZV09W2kscl19KSxhfWZ1bmN0aW9uIFBYKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiB0KGUoYSkpfX1mdW5jdGlvbiB1amUodCl7dmFyIGU9LTEsYT1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24ocil7YVsrK2VdPXJ9KSxhfXZhciBJanQ9QXJyYXkucHJvdG90eXBlLEZqdD1GdW5jdGlvbi5wcm90b3R5cGUsU1I9T2JqZWN0LnByb3RvdHlwZSxJWD1taVsiX19jb3JlLWpzX3NoYXJlZF9fIl0scGplPShmdW5jdGlvbigpe3ZhciB0PS9bXi5dKyQvLmV4ZWMoSVgmJklYLmtleXMmJklYLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gdD8iU3ltYm9sKHNyYylfMS4iK3Q6IiJ9KSgpLGhqZT1GanQudG9TdHJpbmcsJG89U1IuaGFzT3duUHJvcGVydHksQ1I9U1IudG9TdHJpbmcsT2p0PVJlZ0V4cCgiXiIraGplLmNhbGwoJG8pLnJlcGxhY2Uoemp0LCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLG1qZT1fanQ/bWkuQnVmZmVyOnZvaWQgMCxnamU9bWkuU3ltYm9sLHhqZT1taS5VaW50OEFycmF5LEJqdD1QWChPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KSxSanQ9T2JqZWN0LmNyZWF0ZSxIanQ9U1IucHJvcGVydHlJc0VudW1lcmFibGUscWp0PUlqdC5zcGxpY2UsYmplPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsVmp0PW1qZT9tamUuaXNCdWZmZXI6dm9pZCAwLFVqdD1QWChPYmplY3Qua2V5cyxPYmplY3QpLEZYPWw2KG1pLCJEYXRhVmlldyIpLEk4PWw2KG1pLCJNYXAiKSxPWD1sNihtaSwiUHJvbWlzZSIpLEJYPWw2KG1pLCJTZXQiKSxSWD1sNihtaSwiV2Vha01hcCIpLEY4PWw2KE9iamVjdCwiY3JlYXRlIiksamp0PUdzKEZYKSxXanQ9R3MoSTgpLEdqdD1HcyhPWCksWWp0PUdzKEJYKSxaanQ9R3MoUlgpLHZqZT1namU/Z2plLnByb3RvdHlwZTp2b2lkIDAseWplPXZqZT92amUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24ganModCl7dmFyIGU9LTEsYT10P3QubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8YTspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gWGp0KCl7dGhpcy5fX2RhdGFfXz1GOD9GOChudWxsKTp7fX1mdW5jdGlvbiBRanQodCl7cmV0dXJuIHRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XX1mdW5jdGlvbiBLanQodCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihGOCl7dmFyIGE9ZVt0XTtyZXR1cm4gYT09PUhVZT92b2lkIDA6YX1yZXR1cm4gJG8uY2FsbChlLHQpP2VbdF06dm9pZCAwfWZ1bmN0aW9uIEpqdCh0KXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiBGOD9lW3RdIT09dm9pZCAwOiRvLmNhbGwoZSx0KX1mdW5jdGlvbiBlV3QodCxlKXt2YXIgYT10aGlzLl9fZGF0YV9fO3JldHVybiBhW3RdPUY4JiZlPT09dm9pZCAwP0hVZTplLHRoaXN9anMucHJvdG90eXBlLmNsZWFyPVhqdCxqcy5wcm90b3R5cGUuZGVsZXRlPVFqdCxqcy5wcm90b3R5cGUuZ2V0PUtqdCxqcy5wcm90b3R5cGUuaGFzPUpqdCxqcy5wcm90b3R5cGUuc2V0PWVXdDtmdW5jdGlvbiBnaSh0KXt2YXIgZT0tMSxhPXQ/dC5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrZTxhOyl7dmFyIHI9dFtlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiB0V3QoKXt0aGlzLl9fZGF0YV9fPVtdfWZ1bmN0aW9uIGFXdCh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLGE9TFIoZSx0KTtpZihhPDApcmV0dXJuITE7dmFyIHI9ZS5sZW5ndGgtMTtyZXR1cm4gYT09cj9lLnBvcCgpOnFqdC5jYWxsKGUsYSwxKSwhMH1mdW5jdGlvbiByV3QodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxhPUxSKGUsdCk7cmV0dXJuIGE8MD92b2lkIDA6ZVthXVsxXX1mdW5jdGlvbiBpV3QodCl7cmV0dXJuIExSKHRoaXMuX19kYXRhX18sdCk+LTF9ZnVuY3Rpb24gb1d0KHQsZSl7dmFyIGE9dGhpcy5fX2RhdGFfXyxyPUxSKGEsdCk7cmV0dXJuIHI8MD9hLnB1c2goW3QsZV0pOmFbcl1bMV09ZSx0aGlzfWdpLnByb3RvdHlwZS5jbGVhcj10V3QsZ2kucHJvdG90eXBlLmRlbGV0ZT1hV3QsZ2kucHJvdG90eXBlLmdldD1yV3QsZ2kucHJvdG90eXBlLmhhcz1pV3QsZ2kucHJvdG90eXBlLnNldD1vV3Q7ZnVuY3Rpb24gczYodCl7dmFyIGU9LTEsYT10P3QubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8YTspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gc1d0KCl7dGhpcy5fX2RhdGFfXz17aGFzaDpuZXcganMsbWFwOm5ldyhJOHx8Z2kpLHN0cmluZzpuZXcganN9fWZ1bmN0aW9uIG5XdCh0KXtyZXR1cm4gVFIodGhpcyx0KS5kZWxldGUodCl9ZnVuY3Rpb24gbFd0KHQpe3JldHVybiBUUih0aGlzLHQpLmdldCh0KX1mdW5jdGlvbiBjV3QodCl7cmV0dXJuIFRSKHRoaXMsdCkuaGFzKHQpfWZ1bmN0aW9uIGRXdCh0LGUpe3JldHVybiBUUih0aGlzLHQpLnNldCh0LGUpLHRoaXN9czYucHJvdG90eXBlLmNsZWFyPXNXdCxzNi5wcm90b3R5cGUuZGVsZXRlPW5XdCxzNi5wcm90b3R5cGUuZ2V0PWxXdCxzNi5wcm90b3R5cGUuaGFzPWNXdCxzNi5wcm90b3R5cGUuc2V0PWRXdDtmdW5jdGlvbiBuNih0KXt0aGlzLl9fZGF0YV9fPW5ldyBnaSh0KX1mdW5jdGlvbiBmV3QoKXt0aGlzLl9fZGF0YV9fPW5ldyBnaX1mdW5jdGlvbiB1V3QodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZGVsZXRlKHQpfWZ1bmN0aW9uIHBXdCh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9ZnVuY3Rpb24gaFd0KHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX1mdW5jdGlvbiBtV3QodCxlKXt2YXIgYT10aGlzLl9fZGF0YV9fO2lmKGEgaW5zdGFuY2VvZiBnaSl7dmFyIHI9YS5fX2RhdGFfXztpZighSTh8fHIubGVuZ3RoPHlqdC0xKXJldHVybiByLnB1c2goW3QsZV0pLHRoaXM7YT10aGlzLl9fZGF0YV9fPW5ldyBzNihyKX1yZXR1cm4gYS5zZXQodCxlKSx0aGlzfW42LnByb3RvdHlwZS5jbGVhcj1mV3QsbjYucHJvdG90eXBlLmRlbGV0ZT11V3QsbjYucHJvdG90eXBlLmdldD1wV3QsbjYucHJvdG90eXBlLmhhcz1oV3QsbjYucHJvdG90eXBlLnNldD1tV3Q7ZnVuY3Rpb24gZ1d0KHQsZSl7dmFyIGE9VlgodCl8fFJXdCh0KT9OanQodC5sZW5ndGgsU3RyaW5nKTpbXSxyPWEubGVuZ3RoLGk9ISFyO2Zvcih2YXIgbyBpbiB0KShlfHwkby5jYWxsKHQsbykpJiYhKGkmJihvPT0ibGVuZ3RoInx8SVd0KG8scikpKSYmYS5wdXNoKG8pO3JldHVybiBhfWZ1bmN0aW9uIHdqZSh0LGUsYSl7dmFyIHI9dFtlXTsoISgkby5jYWxsKHQsZSkmJlNqZShyLGEpKXx8YT09PXZvaWQgMCYmIShlIGluIHQpKSYmKHRbZV09YSl9ZnVuY3Rpb24gTFIodCxlKXtmb3IodmFyIGE9dC5sZW5ndGg7YS0tOylpZihTamUodFthXVswXSxlKSlyZXR1cm4gYTtyZXR1cm4tMX1mdW5jdGlvbiB4V3QodCxlKXtyZXR1cm4gdCYmTWplKGUsVVgoZSksdCl9ZnVuY3Rpb24gSFgodCxlLGEscixpLG8scyl7dmFyIGw7aWYociYmKGw9bz9yKHQsaSxvLHMpOnIodCkpLGwhPT12b2lkIDApcmV0dXJuIGw7aWYoIV9SKHQpKXJldHVybiB0O3ZhciBmPVZYKHQpO2lmKGYpe2lmKGw9RVd0KHQpLCFlKXJldHVybiBBV3QodCxsKX1lbHNle3ZhciBjPVdzKHQpLHU9Yz09RFh8fGM9PWpVZTtpZihxV3QodCkpcmV0dXJuIHpXdCh0LGUpO2lmKGM9PUVYfHxjPT0kWHx8dSYmIW8pe2lmKGRqZSh0KSlyZXR1cm4gbz90Ont9O2lmKGw9Tld0KHU/e306dCksIWUpcmV0dXJuICRXdCh0LHhXdChsLHQpKX1lbHNle2lmKCFpMVtjXSlyZXR1cm4gbz90Ont9O2w9UFd0KHQsYyxIWCxlKX19c3x8KHM9bmV3IG42KTt2YXIgZD1zLmdldCh0KTtpZihkKXJldHVybiBkO2lmKHMuc2V0KHQsbCksIWYpdmFyIGg9YT9EV3QodCk6VVgodCk7cmV0dXJuIERqdChofHx0LGZ1bmN0aW9uKGcsYil7aCYmKGI9ZyxnPXRbYl0pLHdqZShsLGIsSFgoZyxlLGEscixiLHQscykpfSksbH1mdW5jdGlvbiBiV3QodCl7cmV0dXJuIF9SKHQpP1JqdCh0KTp7fX1mdW5jdGlvbiB2V3QodCxlLGEpe3ZhciByPWUodCk7cmV0dXJuIFZYKHQpP3I6RWp0KHIsYSh0KSl9ZnVuY3Rpb24geVd0KHQpe3JldHVybiBDUi5jYWxsKHQpfWZ1bmN0aW9uIHdXdCh0KXtpZighX1IodCl8fE9XdCh0KSlyZXR1cm4hMTt2YXIgZT1MamUodCl8fGRqZSh0KT9PanQ6U2p0O3JldHVybiBlLnRlc3QoR3ModCkpfWZ1bmN0aW9uIE1XdCh0KXtpZigha2plKHQpKXJldHVybiBVanQodCk7dmFyIGU9W107Zm9yKHZhciBhIGluIE9iamVjdCh0KSkkby5jYWxsKHQsYSkmJmEhPSJjb25zdHJ1Y3RvciImJmUucHVzaChhKTtyZXR1cm4gZX1mdW5jdGlvbiB6V3QodCxlKXtpZihlKXJldHVybiB0LnNsaWNlKCk7dmFyIGE9bmV3IHQuY29uc3RydWN0b3IodC5sZW5ndGgpO3JldHVybiB0LmNvcHkoYSksYX1mdW5jdGlvbiBxWCh0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgeGplKGUpLnNldChuZXcgeGplKHQpKSxlfWZ1bmN0aW9uIGtXdCh0LGUpe3ZhciBhPWU/cVgodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihhLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfWZ1bmN0aW9uIFNXdCh0LGUsYSl7dmFyIHI9ZT9hKGZqZSh0KSwhMCk6ZmplKHQpO3JldHVybiBjamUocixBanQsbmV3IHQuY29uc3RydWN0b3IpfWZ1bmN0aW9uIENXdCh0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LnNvdXJjZSxranQuZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9ZnVuY3Rpb24gTFd0KHQsZSxhKXt2YXIgcj1lP2EodWplKHQpLCEwKTp1amUodCk7cmV0dXJuIGNqZShyLCRqdCxuZXcgdC5jb25zdHJ1Y3Rvcil9ZnVuY3Rpb24gVFd0KHQpe3JldHVybiB5amU/T2JqZWN0KHlqZS5jYWxsKHQpKTp7fX1mdW5jdGlvbiBfV3QodCxlKXt2YXIgYT1lP3FYKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3IoYSx0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfWZ1bmN0aW9uIEFXdCh0LGUpe3ZhciBhPS0xLHI9dC5sZW5ndGg7Zm9yKGV8fChlPUFycmF5KHIpKTsrK2E8cjspZVthXT10W2FdO3JldHVybiBlfWZ1bmN0aW9uIE1qZSh0LGUsYSxyKXthfHwoYT17fSk7Zm9yKHZhciBpPS0xLG89ZS5sZW5ndGg7KytpPG87KXt2YXIgcz1lW2ldLGw9cj9yKGFbc10sdFtzXSxzLGEsdCk6dm9pZCAwO3dqZShhLHMsbD09PXZvaWQgMD90W3NdOmwpfXJldHVybiBhfWZ1bmN0aW9uICRXdCh0LGUpe3JldHVybiBNamUodCx6amUodCksZSl9ZnVuY3Rpb24gRFd0KHQpe3JldHVybiB2V3QodCxVWCx6amUpfWZ1bmN0aW9uIFRSKHQsZSl7dmFyIGE9dC5fX2RhdGFfXztyZXR1cm4gRld0KGUpP2FbdHlwZW9mIGU9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06YS5tYXB9ZnVuY3Rpb24gbDYodCxlKXt2YXIgYT1QanQodCxlKTtyZXR1cm4gd1d0KGEpP2E6dm9pZCAwfXZhciB6amU9YmplP1BYKGJqZSxPYmplY3QpOmpXdCxXcz15V3Q7KEZYJiZXcyhuZXcgRlgobmV3IEFycmF5QnVmZmVyKDEpKSkhPWtSfHxJOCYmV3MobmV3IEk4KSE9TVJ8fE9YJiZXcyhPWC5yZXNvbHZlKCkpIT1HVWV8fEJYJiZXcyhuZXcgQlgpIT16Unx8UlgmJldzKG5ldyBSWCkhPU5YKSYmKFdzPWZ1bmN0aW9uKHQpe3ZhciBlPUNSLmNhbGwodCksYT1lPT1FWD90LmNvbnN0cnVjdG9yOnZvaWQgMCxyPWE/R3MoYSk6dm9pZCAwO2lmKHIpc3dpdGNoKHIpe2Nhc2Ugamp0OnJldHVybiBrUjtjYXNlIFdqdDpyZXR1cm4gTVI7Y2FzZSBHanQ6cmV0dXJuIEdVZTtjYXNlIFlqdDpyZXR1cm4gelI7Y2FzZSBaanQ6cmV0dXJuIE5YfXJldHVybiBlfSk7ZnVuY3Rpb24gRVd0KHQpe3ZhciBlPXQubGVuZ3RoLGE9dC5jb25zdHJ1Y3RvcihlKTtyZXR1cm4gZSYmdHlwZW9mIHRbMF09PSJzdHJpbmciJiYkby5jYWxsKHQsImluZGV4IikmJihhLmluZGV4PXQuaW5kZXgsYS5pbnB1dD10LmlucHV0KSxhfWZ1bmN0aW9uIE5XdCh0KXtyZXR1cm4gdHlwZW9mIHQuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiFramUodCk/Yld0KEJqdCh0KSk6e319ZnVuY3Rpb24gUFd0KHQsZSxhLHIpe3ZhciBpPXQuY29uc3RydWN0b3I7c3dpdGNoKGUpe2Nhc2UgUVVlOnJldHVybiBxWCh0KTtjYXNlIFZVZTpjYXNlIFVVZTpyZXR1cm4gbmV3IGkoK3QpO2Nhc2Uga1I6cmV0dXJuIGtXdCh0LHIpO2Nhc2UgS1VlOmNhc2UgSlVlOmNhc2UgZWplOmNhc2UgdGplOmNhc2UgYWplOmNhc2UgcmplOmNhc2UgaWplOmNhc2Ugb2plOmNhc2Ugc2plOnJldHVybiBfV3QodCxyKTtjYXNlIE1SOnJldHVybiBTV3QodCxyLGEpO2Nhc2UgV1VlOmNhc2UgWlVlOnJldHVybiBuZXcgaSh0KTtjYXNlIFlVZTpyZXR1cm4gQ1d0KHQpO2Nhc2UgelI6cmV0dXJuIExXdCh0LHIsYSk7Y2FzZSBYVWU6cmV0dXJuIFRXdCh0KX19ZnVuY3Rpb24gSVd0KHQsZSl7cmV0dXJuIGU9ZT8/cVVlLCEhZSYmKHR5cGVvZiB0PT0ibnVtYmVyInx8Q2p0LnRlc3QodCkpJiZ0Pi0xJiZ0JTE9PTAmJnQ8ZX1mdW5jdGlvbiBGV3QodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIGU9PSJzdHJpbmcifHxlPT0ibnVtYmVyInx8ZT09InN5bWJvbCJ8fGU9PSJib29sZWFuIj90IT09Il9fcHJvdG9fXyI6dD09PW51bGx9ZnVuY3Rpb24gT1d0KHQpe3JldHVybiEhcGplJiZwamUgaW4gdH1mdW5jdGlvbiBramUodCl7dmFyIGU9dCYmdC5jb25zdHJ1Y3RvcixhPXR5cGVvZiBlPT0iZnVuY3Rpb24iJiZlLnByb3RvdHlwZXx8U1I7cmV0dXJuIHQ9PT1hfWZ1bmN0aW9uIEdzKHQpe2lmKHQhPW51bGwpe3RyeXtyZXR1cm4gaGplLmNhbGwodCl9Y2F0Y2h7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaHt9fXJldHVybiIifWZ1bmN0aW9uIEJXdCh0KXtyZXR1cm4gSFgodCwhMCwhMCl9ZnVuY3Rpb24gU2plKHQsZSl7cmV0dXJuIHQ9PT1lfHx0IT09dCYmZSE9PWV9ZnVuY3Rpb24gUld0KHQpe3JldHVybiBIV3QodCkmJiRvLmNhbGwodCwiY2FsbGVlIikmJighSGp0LmNhbGwodCwiY2FsbGVlIil8fENSLmNhbGwodCk9PSRYKX12YXIgVlg9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBDamUodCl7cmV0dXJuIHQhPW51bGwmJlZXdCh0Lmxlbmd0aCkmJiFMamUodCl9ZnVuY3Rpb24gSFd0KHQpe3JldHVybiBVV3QodCkmJkNqZSh0KX12YXIgcVd0PVZqdHx8V1d0O2Z1bmN0aW9uIExqZSh0KXt2YXIgZT1fUih0KT9DUi5jYWxsKHQpOiIiO3JldHVybiBlPT1EWHx8ZT09alVlfWZ1bmN0aW9uIFZXdCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJudW1iZXIiJiZ0Pi0xJiZ0JTE9PTAmJnQ8PXFVZX1mdW5jdGlvbiBfUih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4hIXQmJihlPT0ib2JqZWN0Inx8ZT09ImZ1bmN0aW9uIil9ZnVuY3Rpb24gVVd0KHQpe3JldHVybiEhdCYmdHlwZW9mIHQ9PSJvYmplY3QifWZ1bmN0aW9uIFVYKHQpe3JldHVybiBDamUodCk/Z1d0KHQpOk1XdCh0KX1mdW5jdGlvbiBqV3QoKXtyZXR1cm5bXX1mdW5jdGlvbiBXV3QoKXtyZXR1cm4hMX1jNi5leHBvcnRzPUJXdH0pO3ZhciBBamU9Y3QoKE5xMSxfamUpPT57InVzZSBzdHJpY3QiO19qZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pLHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYoZT17Y21wOmV9KTt2YXIgYT10eXBlb2YgZS5jeWNsZXM9PSJib29sZWFuIj9lLmN5Y2xlczohMSxyPWUuY21wJiYoZnVuY3Rpb24obyl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbihsLGYpe3ZhciBjPXtrZXk6bCx2YWx1ZTpzW2xdfSx1PXtrZXk6Zix2YWx1ZTpzW2ZdfTtyZXR1cm4gbyhjLHUpfX19KShlLmNtcCksaT1bXTtyZXR1cm4oZnVuY3Rpb24gbyhzKXtpZihzJiZzLnRvSlNPTiYmdHlwZW9mIHMudG9KU09OPT0iZnVuY3Rpb24iJiYocz1zLnRvSlNPTigpKSxzIT09dm9pZCAwKXtpZih0eXBlb2Ygcz09Im51bWJlciIpcmV0dXJuIGlzRmluaXRlKHMpPyIiK3M6Im51bGwiO2lmKHR5cGVvZiBzIT0ib2JqZWN0IilyZXR1cm4gSlNPTi5zdHJpbmdpZnkocyk7dmFyIGwsZjtpZihBcnJheS5pc0FycmF5KHMpKXtmb3IoZj0iWyIsbD0wO2w8cy5sZW5ndGg7bCsrKWwmJihmKz0iLCIpLGYrPW8oc1tsXSl8fCJudWxsIjtyZXR1cm4gZisiXSJ9aWYocz09PW51bGwpcmV0dXJuIm51bGwiO2lmKGkuaW5kZXhPZihzKSE9PS0xKXtpZihhKXJldHVybiBKU09OLnN0cmluZ2lmeSgiX19jeWNsZV9fIik7dGhyb3cgbmV3IFR5cGVFcnJvcigiQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTiIpfXZhciBjPWkucHVzaChzKS0xLHU9T2JqZWN0LmtleXMocykuc29ydChyJiZyKHMpKTtmb3IoZj0iIixsPTA7bDx1Lmxlbmd0aDtsKyspe3ZhciBkPXVbbF0saD1vKHNbZF0pO2gmJihmJiYoZis9IiwiKSxmKz1KU09OLnN0cmluZ2lmeShkKSsiOiIraCl9cmV0dXJuIGkuc3BsaWNlKGMsMSksInsiK2YrIn0ifX0pKHQpfX0pO3ZhciBBUiwkamUsJFIsalg9bigoKT0+e044KCk7UDgoKTtBUj1OMihUamUoKSwxKSwkamU9TjIoQWplKCksMSksJFI9JGplLmRlZmF1bHR9KTtmdW5jdGlvbiBZV3QodCl7cmV0dXJuIHR5cGVvZiBCdWZmZXI8InUiP0J1ZmZlci5mcm9tKHQpLnRvU3RyaW5nKCJiYXNlNjQiKTpidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4udCkpfWZ1bmN0aW9uIFpXdCh0KXtpZih0eXBlb2YgQnVmZmVyPCJ1Iil7bGV0IGU9QnVmZmVyLmZyb20odCwiYmFzZTY0Iik7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfXJldHVybiBuZXcgVWludDhBcnJheShBcnJheS5mcm9tKGF0b2IodCkpLm1hcChlPT5lLmNoYXJDb2RlQXQoMCkpKX1mdW5jdGlvbiBHWCh0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0LERSLGUpfWZ1bmN0aW9uIFlYKHQpe3JldHVybiBKU09OLnBhcnNlKHQsRGplKX1mdW5jdGlvbiBYV3QodCl7cmV0dXJuIE5qZSh0KSYmdC50eXBlPT09IkVuY29kZWRCdWZmZXIiJiZXWCh0LmRhdGEpfWZ1bmN0aW9uIFFXdCh0KXtyZXR1cm4gTmplKHQpJiZ0LnR5cGU9PT0iQnVmZmVyIiYmKEVqZSh0LmRhdGEpfHxXWCh0LmRhdGEpKXx8dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl9ZnVuY3Rpb24gRWplKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIFdYKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyJ9ZnVuY3Rpb24gTmplKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsfXZhciBEUixEamUsUGplPW4oKCk9PntqWCgpO0RSPSh0LGUpPT57aWYoUVd0KGUpKXtsZXQgYTtpZigiZGF0YSJpbiBlJiZFamUoZS5kYXRhKSlhPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgVWludDhBcnJheSlhPWU7ZWxzZSByZXR1cm4gZTtyZXR1cm57dHlwZToiRW5jb2RlZEJ1ZmZlciIsZGF0YToiYmFzZTY0OiIrWVd0KGEpfX1yZXR1cm4gZX0sRGplPSh0LGUpPT57aWYoWFd0KGUpJiZXWChlLmRhdGEpJiZlLmRhdGEuc3RhcnRzV2l0aCgiYmFzZTY0OiIpKXtsZXQgYT1lLmRhdGEuc2xpY2UoNyk7cmV0dXJuIFpXdChhKX1yZXR1cm4gZX19KTt2YXIgbzE9e307ZXQobzEse1NtYXJ0anNvbjooKT0+WFgsZGVlcEVxdWFsSnNvbkxTdHJpbmdzOigpPT5vR3QsZGVlcEVxdWFsT2JqZWN0czooKT0+SWplLGZvbGREZWM6KCk9PmlHdCxwYXJzZTooKT0+RVIscGFyc2VCYXNlNjQ6KCk9PnJHdCxwYXJzZUpzb25MOigpPT5aWCxzdGFibGVPbmVXYXlTdHJpbmdpZnk6KCk9PmVHdCxzdHJpbmdpZnk6KCk9PllzLHN0cmluZ2lmeUJhc2U2NDooKT0+YUd0LHN0cmluZ2lmeUpzb25MOigpPT5KV3Qsc3RyaW5naWZ5UHJldHR5OigpPT50R3R9KTt2YXIgRVIsWlgsSld0LGVHdCxZcyx0R3QsYUd0LHJHdCxYWCxpR3QsSWplLG9HdCxkNj1uKCgpPT57algoKTtQamUoKTtFUj1ZWCxaWD10PT50LnNwbGl0KGAKYCkucmVkdWNlKChyLGkpPT57bGV0IG89aS50cmltKCk7cmV0dXJuIG8ubGVuZ3RoPjAmJnIucHVzaChFUihvKSkscn0sW10pLEpXdD10PT50Lm1hcChlPT5ZcyhlKSkuam9pbihgCmApLGVHdD0odCxlLGE9e30pPT57bGV0IHI9bmV3IFdlYWtTZXQsaT1sPT57aWYobD09PW51bGx8fHR5cGVvZiBsIT0ib2JqZWN0IilyZXR1cm4gbDtsZXQgZj1EUigiIixsKTtpZihmJiZmLnR5cGU9PT0iRW5jb2RlZEJ1ZmZlciImJnR5cGVvZiBmLmRhdGE9PSJzdHJpbmciKXJldHVybiBmO2lmKHIuaGFzKGwpKXJldHVybiJfX2N5Y2xlX18iO2lmKHIuYWRkKGwpLEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGwubWFwKHU9PmkodSkpO2xldCBjPXt9O2ZvcihsZXQgdSBvZiBPYmplY3Qua2V5cyhsKSl0cnl7Y1t1XT1pKGxbdV0pfWNhdGNoe2NbdV09Il9fdW5zZXJpYWxpemFibGVfXyJ9cmV0dXJuIGN9LG89aSh0KSxzPXsuLi5hLGN5Y2xlczohMH07aWYoZSYmIXMuY21wKXtsZXQgbD1uZXcgTWFwO2UuZm9yRWFjaCgoZixjKT0+bC5zZXQoZixjKSkscy5jbXA9KGYsYyk9PntsZXQgdT1sLmhhcyhmLmtleSk/bC5nZXQoZi5rZXkpOk51bWJlci5QT1NJVElWRV9JTkZJTklUWSxkPWwuaGFzKGMua2V5KT9sLmdldChjLmtleSk6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiB1IT09ZD91LWQ6Zi5rZXk8Yy5rZXk/LTE6Zi5rZXk+Yy5rZXk/MTowfX1yZXR1cm4gJFIobyxzKX0sWXM9KHQsZSxhPXt9KT0+e2xldCByPUdYKHQpO3Q9SlNPTi5wYXJzZShyKTtsZXQgaT17Li4uYX07aWYoZSYmIWkuY21wKXtsZXQgcz1uZXcgTWFwO2UuZm9yRWFjaCgobCxmKT0+cy5zZXQobCxmKSksaS5jbXA9KGwsZik9PntsZXQgYz1zLmhhcyhsLmtleSk/cy5nZXQobC5rZXkpOk51bWJlci5QT1NJVElWRV9JTkZJTklUWSx1PXMuaGFzKGYua2V5KT9zLmdldChmLmtleSk6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBjIT09dT9jLXU6bC5rZXk8Zi5rZXk/LTE6bC5rZXk+Zi5rZXk/MTowfX1yZXR1cm4gJFIodCxpKX0sdEd0PXQ9PntsZXQgZT1Zcyh0KSxhPUpTT04ucGFyc2UoZSk7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX0sYUd0PSguLi50KT0+e2xldCBlPVlzKC4uLnQpO3JldHVybiBMYS5iYXNlNjQuZW5jb2RlVXJpKGUpfSxyR3Q9dD0+e2xldCBlPUxhLmJhc2U2NCxyPShlLmRlY29kZVVyaXx8ZS5kZWNvZGUpKHQpO3JldHVybiBFUihyKX0sWFg9Y2xhc3MgdHtzdGF0aWMgZW5mb2xkRnJvbU9iamVjdChlKXtsZXQgYT1uZXcgdGhpcyxyPWEuc2F2ZWFibGVQcm9wZXJ0aWVzfHxbXTtmb3IobGV0IGkgaW4gZSlyLmluZGV4T2YoaSkhPT0tMSYmKGFbaV09ZVtpXSk7cmV0dXJuIGF9c3RhdGljIGVuZm9sZEZyb21Kc29uKGUpe2xldCBhPUVSKGUpO3JldHVybiB0aGlzLmVuZm9sZEZyb21PYmplY3QoYSl9Zm9sZFRvT2JqZWN0KCl7bGV0IGU9bmV3IFNldDtyZXR1cm4gZS5hZGQodGhpcyksdGhpcy5mb2xkVG9PYmplY3RJbnRlcm5hbChlKX1mb2xkVG9PYmplY3RJbnRlcm5hbChlKXtsZXQgYT17fSxyPW89PntpZihvIGluc3RhbmNlb2YgdCl7aWYoZS5oYXMobykpdGhyb3cgbmV3IEVycm9yKCJjeWNsZSBkZXRlY3RlZCIpO3JldHVybiBlLmFkZChvKSxvLmZvbGRUb09iamVjdEludGVybmFsKGUpfXJldHVybiBBcnJheS5pc0FycmF5KG8pP28ubWFwKHM9PnIocykpOkFSLmRlZmF1bHQobyl9LGk9dGhpcy5zYXZlYWJsZVByb3BlcnRpZXN8fFtdO2ZvcihsZXQgbyBvZiBpKXtsZXQgcz10aGlzW29dO2Fbb109cihzKX1yZXR1cm4gYX1mb2xkVG9Kc29uKCl7bGV0IGU9dGhpcy5mb2xkVG9PYmplY3QoKTtyZXR1cm4gWXMoZSl9fSxpR3Q9KCk9Pih0LGUpPT57dC5zYXZlYWJsZVByb3BlcnRpZXN8fCh0LnNhdmVhYmxlUHJvcGVydGllcz1bXSksdC5zYXZlYWJsZVByb3BlcnRpZXMucHVzaChlKX0sSWplPSh0LGUpPT57bGV0IGE9WXModCkscj1ZcyhlKTtyZXR1cm4gYT09PXJ9LG9HdD0odCxlKT0+e2xldCBhPVpYKHQpLHI9WlgoZSk7cmV0dXJuIElqZShhLHIpfX0pO3ZhciBSOD17fTtldChSOCx7ZGVsZXRlREI6KCk9PmpqZSxvcGVuREI6KCk9PlVqZSx1bndyYXA6KCk9PkI4LHdyYXA6KCk9Pl9yfSk7ZnVuY3Rpb24gc0d0KCl7cmV0dXJuIEZqZXx8KEZqZT1bSURCRGF0YWJhc2UsSURCT2JqZWN0U3RvcmUsSURCSW5kZXgsSURCQ3Vyc29yLElEQlRyYW5zYWN0aW9uXSl9ZnVuY3Rpb24gbkd0KCl7cmV0dXJuIE9qZXx8KE9qZT1bSURCQ3Vyc29yLnByb3RvdHlwZS5hZHZhbmNlLElEQkN1cnNvci5wcm90b3R5cGUuY29udGludWUsSURCQ3Vyc29yLnByb3RvdHlwZS5jb250aW51ZVByaW1hcnlLZXldKX1mdW5jdGlvbiBsR3QodCl7bGV0IGU9bmV3IFByb21pc2UoKGEscik9PntsZXQgaT0oKT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic3VjY2VzcyIsbyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIscyl9LG89KCk9PnthKF9yKHQucmVzdWx0KSksaSgpfSxzPSgpPT57cih0LmVycm9yKSxpKCl9O3QuYWRkRXZlbnRMaXN0ZW5lcigic3VjY2VzcyIsbyksdC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIscyl9KTtyZXR1cm4gTlIuc2V0KGUsdCksZX1mdW5jdGlvbiBjR3QodCl7aWYoS1guaGFzKHQpKXJldHVybjtsZXQgZT1uZXcgUHJvbWlzZSgoYSxyKT0+e2xldCBpPSgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsbyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIscyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscyl9LG89KCk9PnthKCksaSgpfSxzPSgpPT57cih0LmVycm9yfHxuZXcgRE9NRXhjZXB0aW9uKCJBYm9ydEVycm9yIiwiQWJvcnRFcnJvciIpKSxpKCl9O3QuYWRkRXZlbnRMaXN0ZW5lcigiY29tcGxldGUiLG8pLHQuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHMpLHQuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHMpfSk7S1guc2V0KHQsZSl9ZnVuY3Rpb24gQmplKHQpe2VRPXQoZVEpfWZ1bmN0aW9uIGRHdCh0KXtyZXR1cm4gbkd0KCkuaW5jbHVkZXModCk/ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIHQuYXBwbHkoQjgodGhpcyksZSksX3IodGhpcy5yZXF1ZXN0KX06ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIF9yKHQuYXBwbHkoQjgodGhpcyksZSkpfX1mdW5jdGlvbiBmR3QodCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP2RHdCh0KToodCBpbnN0YW5jZW9mIElEQlRyYW5zYWN0aW9uJiZjR3QodCksUVgodCxzR3QoKSk/bmV3IFByb3h5KHQsZVEpOnQpfWZ1bmN0aW9uIF9yKHQpe2lmKHQgaW5zdGFuY2VvZiBJREJSZXF1ZXN0KXJldHVybiBsR3QodCk7aWYoSlguaGFzKHQpKXJldHVybiBKWC5nZXQodCk7bGV0IGU9Zkd0KHQpO3JldHVybiBlIT09dCYmKEpYLnNldCh0LGUpLE5SLnNldChlLHQpKSxlfWZ1bmN0aW9uIFVqZSh0LGUse2Jsb2NrZWQ6YSx1cGdyYWRlOnIsYmxvY2tpbmc6aSx0ZXJtaW5hdGVkOm99PXt9KXtsZXQgcz1pbmRleGVkREIub3Blbih0LGUpLGw9X3Iocyk7cmV0dXJuIHImJnMuYWRkRXZlbnRMaXN0ZW5lcigidXBncmFkZW5lZWRlZCIsZj0+e3IoX3Iocy5yZXN1bHQpLGYub2xkVmVyc2lvbixmLm5ld1ZlcnNpb24sX3Iocy50cmFuc2FjdGlvbiksZil9KSxhJiZzLmFkZEV2ZW50TGlzdGVuZXIoImJsb2NrZWQiLGY9PmEoZi5vbGRWZXJzaW9uLGYubmV3VmVyc2lvbixmKSksbC50aGVuKGY9PntvJiZmLmFkZEV2ZW50TGlzdGVuZXIoImNsb3NlIiwoKT0+bygpKSxpJiZmLmFkZEV2ZW50TGlzdGVuZXIoInZlcnNpb25jaGFuZ2UiLGM9PmkoYy5vbGRWZXJzaW9uLGMubmV3VmVyc2lvbixjKSl9KS5jYXRjaCgoKT0+e30pLGx9ZnVuY3Rpb24gamplKHQse2Jsb2NrZWQ6ZX09e30pe2xldCBhPWluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSh0KTtyZXR1cm4gZSYmYS5hZGRFdmVudExpc3RlbmVyKCJibG9ja2VkIixyPT5lKHIub2xkVmVyc2lvbixyKSksX3IoYSkudGhlbigoKT0+e30pfWZ1bmN0aW9uIFJqZSh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIElEQkRhdGFiYXNlJiYhKGUgaW4gdCkmJnR5cGVvZiBlPT0ic3RyaW5nIikpcmV0dXJuO2lmKHRRLmdldChlKSlyZXR1cm4gdFEuZ2V0KGUpO2xldCBhPWUucmVwbGFjZSgvRnJvbUluZGV4JC8sIiIpLHI9ZSE9PWEsaT1wR3QuaW5jbHVkZXMoYSk7aWYoIShhIGluKHI/SURCSW5kZXg6SURCT2JqZWN0U3RvcmUpLnByb3RvdHlwZSl8fCEoaXx8dUd0LmluY2x1ZGVzKGEpKSlyZXR1cm47bGV0IG89YXN5bmMgZnVuY3Rpb24ocywuLi5sKXtsZXQgZj10aGlzLnRyYW5zYWN0aW9uKHMsaT8icmVhZHdyaXRlIjoicmVhZG9ubHkiKSxjPWYuc3RvcmU7cmV0dXJuIHImJihjPWMuaW5kZXgobC5zaGlmdCgpKSksKGF3YWl0IFByb21pc2UuYWxsKFtjW2FdKC4uLmwpLGkmJmYuZG9uZV0pKVswXX07cmV0dXJuIHRRLnNldChlLG8pLG99YXN5bmMgZnVuY3Rpb24qZ0d0KC4uLnQpe2xldCBlPXRoaXM7aWYoZSBpbnN0YW5jZW9mIElEQkN1cnNvcnx8KGU9YXdhaXQgZS5vcGVuQ3Vyc29yKC4uLnQpKSwhZSlyZXR1cm47ZT1lO2xldCBhPW5ldyBQcm94eShlLG1HdCk7Zm9yKHFqZS5zZXQoYSxlKSxOUi5zZXQoYSxCOChlKSk7ZTspeWllbGQgYSxlPWF3YWl0KGFRLmdldChhKXx8ZS5jb250aW51ZSgpKSxhUS5kZWxldGUoYSl9ZnVuY3Rpb24gVmplKHQsZSl7cmV0dXJuIGU9PT1TeW1ib2wuYXN5bmNJdGVyYXRvciYmUVgodCxbSURCSW5kZXgsSURCT2JqZWN0U3RvcmUsSURCQ3Vyc29yXSl8fGU9PT0iaXRlcmF0ZSImJlFYKHQsW0lEQkluZGV4LElEQk9iamVjdFN0b3JlXSl9dmFyIFFYLEZqZSxPamUsS1gsSlgsTlIsZVEsQjgsdUd0LHBHdCx0USxoR3QsSGplLGFRLHFqZSxtR3QsV2plPW4oKCk9PntRWD0odCxlKT0+ZS5zb21lKGE9PnQgaW5zdGFuY2VvZiBhKTtLWD1uZXcgV2Vha01hcCxKWD1uZXcgV2Vha01hcCxOUj1uZXcgV2Vha01hcDtlUT17Z2V0KHQsZSxhKXtpZih0IGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24pe2lmKGU9PT0iZG9uZSIpcmV0dXJuIEtYLmdldCh0KTtpZihlPT09InN0b3JlIilyZXR1cm4gYS5vYmplY3RTdG9yZU5hbWVzWzFdP3ZvaWQgMDphLm9iamVjdFN0b3JlKGEub2JqZWN0U3RvcmVOYW1lc1swXSl9cmV0dXJuIF9yKHRbZV0pfSxzZXQodCxlLGEpe3JldHVybiB0W2VdPWEsITB9LGhhcyh0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24mJihlPT09ImRvbmUifHxlPT09InN0b3JlIik/ITA6ZSBpbiB0fX07Qjg9dD0+TlIuZ2V0KHQpO3VHdD1bImdldCIsImdldEtleSIsImdldEFsbCIsImdldEFsbEtleXMiLCJjb3VudCJdLHBHdD1bInB1dCIsImFkZCIsImRlbGV0ZSIsImNsZWFyIl0sdFE9bmV3IE1hcDtCamUodD0+KHsuLi50LGdldDooZSxhLHIpPT5SamUoZSxhKXx8dC5nZXQoZSxhLHIpLGhhczooZSxhKT0+ISFSamUoZSxhKXx8dC5oYXMoZSxhKX0pKTtoR3Q9WyJjb250aW51ZSIsImNvbnRpbnVlUHJpbWFyeUtleSIsImFkdmFuY2UiXSxIamU9e30sYVE9bmV3IFdlYWtNYXAscWplPW5ldyBXZWFrTWFwLG1HdD17Z2V0KHQsZSl7aWYoIWhHdC5pbmNsdWRlcyhlKSlyZXR1cm4gdFtlXTtsZXQgYT1IamVbZV07cmV0dXJuIGF8fChhPUhqZVtlXT1mdW5jdGlvbiguLi5yKXthUS5zZXQodGhpcyxxamUuZ2V0KHRoaXMpW2VdKC4uLnIpKX0pLGF9fTtCamUodD0+KHsuLi50LGdldChlLGEscil7cmV0dXJuIFZqZShlLGEpP2dHdDp0LmdldChlLGEscil9LGhhcyhlLGEpe3JldHVybiBWamUoZSxhKXx8dC5oYXMoZSxhKX19KSl9KTt2YXIgclE9bigoKT0+e2s4KCk7TjgoKTtkNigpO3AyKCk7VmEoKTtvTygpO1dqZSgpfSk7dmFyIEg4LGlRPW4oKCk9PntyUSgpO0g4PWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuaW5pdENhbGxlZD0hMSx0aGlzLnJlYWR5RGVmZXJyZWQ9VmUuZGVmZXIoKSx0aGlzLm9wdGlvbnM9ZX1hc3luYyBpbml0KCl7aWYodGhpcy5pbml0Q2FsbGVkKXthd2FpdCB0aGlzLnJlYWR5RGVmZXJyZWQucHJvbWlzZTtyZXR1cm59dGhpcy5pbml0Q2FsbGVkPSEwO2xldCBlPW5ldyBXYS5TbWFydGVudjtpZighZS5pc0Jyb3dzZXImJiFnbG9iYWxUaGlzLmluZGV4ZWREQiYmKGNvbnNvbGUubG9nKCJoZXkiKSxjb25zb2xlLmxvZyhnbG9iYWxUaGlzLmluZGV4ZWREQiksYXdhaXQgZS5nZXRTYWZlTm9kZU1vZHVsZSgiZmFrZS1pbmRleGVkZGIvYXV0byIpLCFnbG9iYWxUaGlzLmluZGV4ZWREQikpe2xldCBhPWF3YWl0IGUuZ2V0U2FmZU5vZGVNb2R1bGUoImZha2UtaW5kZXhlZGRiIik7Z2xvYmFsVGhpcy5pbmRleGVkREI9bmV3IGEuSURCRmFjdG9yeX10aGlzLmRiPWF3YWl0IFI4Lm9wZW5EQih0aGlzLm9wdGlvbnMuZGJOYW1lLDEse3VwZ3JhZGU6YT0+e2EuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSl9fSksdGhpcy5yZWFkeURlZmVycmVkLnJlc29sdmUoKX1hc3luYyBnZXQoZSl7cmV0dXJuIGF3YWl0IHRoaXMuaW5pdCgpLHRoaXMuZGIuZ2V0KHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsZSl9YXN5bmMgY2hlY2soZSl7cmV0dXJuIGF3YWl0IHRoaXMuaW5pdCgpLCEhYXdhaXQgdGhpcy5nZXQoZSl9YXN5bmMgc2V0KGUsYSl7cmV0dXJuIGF3YWl0IHRoaXMuaW5pdCgpLHRoaXMuZGIucHV0KHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsYSxlKX1hc3luYyBkZWxldGUoZSl7cmV0dXJuIGF3YWl0IHRoaXMuaW5pdCgpLHRoaXMuZGIuZGVsZXRlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsZSl9YXN5bmMgY2xlYXIoKXtyZXR1cm4gYXdhaXQgdGhpcy5pbml0KCksdGhpcy5kYi5jbGVhcih0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKX1hc3luYyBrZXlzKCl7cmV0dXJuIGF3YWl0IHRoaXMuaW5pdCgpLHRoaXMuZGIuZ2V0QWxsS2V5cyh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKX19fSk7dmFyIG9RLFlqZT1uKCgpPT57aVEoKTtyUSgpO29RPWNsYXNze2NvbnN0cnVjdG9yKGU9ImRlZmF1bHQiKXt0aGlzLndlYnN0b3JlPW5ldyBIOCh7ZGJOYW1lOiJ0clN0b3JlIixzdG9yZU5hbWU6YHRyU3RvcmUtJHtlfWB9KX1idWlsZEtleShlKXtyZXR1cm4gbzEuc3RyaW5naWZ5KHttZXRob2Q6ZS5tZXRob2QscmVxdWVzdDplLnJlcXVlc3R9KX1hc3luYyBzZXRCeVJlcXVlc3QoZSl7aWYoIWUucmVzcG9uc2UpdGhyb3cgbmV3IEVycm9yKCJZb3UgY2Fubm90IHN0b3JlIHJlcXVlc3RzIHdpdGhvdXQgYSByZXNwb25zZSBwcmVzZW50Iik7YXdhaXQgdGhpcy53ZWJzdG9yZS5zZXQodGhpcy5idWlsZEtleShlKSxlKX1hc3luYyBnZXRCeVJlcXVlc3QoZSl7cmV0dXJuIGF3YWl0IHRoaXMud2Vic3RvcmUuZ2V0KHRoaXMuYnVpbGRLZXkoZSkpfX19KTt2YXIgR2E9e307ZXQoR2Ese1R5cGVkcmVxdWVzdENhY2hlOigpPT5vUSxXZWJTdG9yZTooKT0+SDh9KTt2YXIgUFI9bigoKT0+e1lqZSgpO2lRKCl9KTt2YXIgWmplPW4oKCk9PntpaSgpO044KCk7ZDYoKTtwMigpO1BSKCl9KTt2YXIgWnM9e307ZXQoWnMse1dlYlJlcXVlc3Q6KCk9PnNRfSk7dmFyIHNRLG5RPW4oKCk9PntaamUoKTtzUT1jbGFzc3tjb25zdHJ1Y3RvcihlPXt9KXt0aGlzLm9wdGlvbnNBcmc9ZSx0aGlzLmNhY2hlU3RvcmU9bmV3IEdhLldlYlN0b3JlKHtkYk5hbWU6IndlYnJlcXVlc3QiLHN0b3JlTmFtZToid2VicmVxdWVzdCJ9KSx0aGlzLm9wdGlvbnM9e2xvZ2dpbmc6ITAsLi4uZX19YXN5bmMgZ2V0SnNvbihlLGE9ITEpe2xldCBpPWF3YWl0KGF3YWl0IHRoaXMucmVxdWVzdChlLHttZXRob2Q6IkdFVCIsdXNlQ2FjaGU6YX0pKS50ZXh0KCk7cmV0dXJuIG8xLnBhcnNlKGkpfWFzeW5jIHBvc3RKc29uKGUsYSxyPSExKXtsZXQgbz1hd2FpdChhd2FpdCB0aGlzLnJlcXVlc3QoZSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6bzEuc3RyaW5naWZ5KGEpLHVzZUNhY2hlOnJ9KSkudGV4dCgpO3JldHVybiBvMS5wYXJzZShvKX1hc3luYyBwdXRKc29uKGUsYSxyPSExKXtsZXQgbz1hd2FpdChhd2FpdCB0aGlzLnJlcXVlc3QoZSx7bWV0aG9kOiJQVVQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpvMS5zdHJpbmdpZnkoYSl9KSkudGV4dCgpO3JldHVybiBvMS5wYXJzZShvKX1hc3luYyBkZWxldGVKc29uKGUsYT0hMSl7bGV0IGk9YXdhaXQoYXdhaXQgdGhpcy5yZXF1ZXN0KGUse2hlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sbWV0aG9kOiJHRVQifSkpLnRleHQoKTtyZXR1cm4gbzEucGFyc2UoaSl9YXN5bmMgcmVxdWVzdChlLGEpe2E9e3RpbWVvdXRNczo2ZTQsdXNlQ2FjaGU6ITEsLi4uYX07bGV0IHI9bmV3IEFib3J0Q29udHJvbGxlcjtmdC5kZWxheUZvcihhLnRpbWVvdXRNcykudGhlbigoKT0+e3IuYWJvcnQoKX0pO2xldCBpPVZlLmRlZmVyKCksbz0hMTtpZihhLnVzZUNhY2hlJiZhd2FpdCB0aGlzLmNhY2hlU3RvcmUuY2hlY2soZSkpe2xldCBsPWF3YWl0IHRoaXMuY2FjaGVTdG9yZS5nZXQoZSk7aS5yZXNvbHZlKG5ldyBSZXNwb25zZShsLHt9KSl9ZWxzZSBpLnJlc29sdmUobnVsbCk7bGV0IHM9YXdhaXQgZmV0Y2goZSx7c2lnbmFsOnIuc2lnbmFsLG1ldGhvZDphLm1ldGhvZCxoZWFkZXJzOnsuLi5hLmhlYWRlcnN8fHt9fSxib2R5OmEuYm9keX0pLmNhdGNoKGFzeW5jIGw9PmEudXNlQ2FjaGUmJmF3YWl0IGkucHJvbWlzZT8obz0hMCxpLnByb21pc2UpOmwpO2lmKGEudXNlQ2FjaGUmJmF3YWl0IGkucHJvbWlzZSYmcy5zdGF0dXM9PT01MDAmJihvPSEwLHM9YXdhaXQgaS5wcm9taXNlKSwhbyYmYS51c2VDYWNoZSYmcy5zdGF0dXM8MzAwKXtsZXQgbD1hd2FpdCBzLmNsb25lKCkuYXJyYXlCdWZmZXIoKTthd2FpdCB0aGlzLmNhY2hlU3RvcmUuc2V0KGUsbCl9cmV0dXJuIHRoaXMubG9nKGAke2V9IGFuc3dlcnMgd2l0aCBzdGF0dXM6ICR7cy5zdGF0dXN9YCksc31hc3luYyByZXF1ZXN0TXVsdGlFbmRwb2ludChlLGEpe2xldCByLGk9MDtBcnJheS5pc0FycmF5KGUpP3I9ZTpyPVtlXTtsZXQgbz1bXSxzPWFzeW5jIGM9PntvLnB1c2goYyksYz09PSI0MjkiJiYoY29uc29sZS5sb2coImdvdCA0MjksIHNvIHdhaXRpbmcgYSBsaXR0bGUgYml0LiIpLGF3YWl0IGZ0LmRlbGF5Rm9yKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMDAxKSsxZTMpKTtsZXQgdT0wO2ZvcihsZXQgZCBvZiBvKWQ9PT1jJiZ1Kys7dT4yKnIubGVuZ3RoKmkmJmkrK30sbD1hc3luYyBjPT57aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJyZXF1ZXN0IGZhaWxlZCBwZXJtYW5lbnRseSIpO3RoaXMubG9nKGBHZXR0aW5nICR7Y30gd2l0aCBtZXRob2QgJHthLm1ldGhvZH1gKTtsZXQgdT1hd2FpdCBmZXRjaChjLHttZXRob2Q6YS5tZXRob2QsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24iLC4uLmEuaGVhZGVyc3x8e319LGJvZHk6YS5ib2R5fSk7cmV0dXJuIHRoaXMubG9nKGAke2N9IGFuc3dlcnMgd2l0aCBzdGF0dXM6ICR7dS5zdGF0dXN9YCksdS5zdGF0dXM+PTIwMCYmdS5zdGF0dXM8MzAwP3U6KGF3YWl0IHModS5zdGF0dXMudG9TdHJpbmcoKSksYXdhaXQgbChyW2ldKSl9O3JldHVybiBhd2FpdCBsKHJbaV0pfWxvZyhlKXt0aGlzLm9wdGlvbnMubG9nZ2luZyYmY29uc29sZS5sb2coZSl9fX0pO3ZhciBEbyxFbz1uKCgpPT57b08oKTtEbz1OMihsRigpLDEpO2s4KCk7TFVlKCk7aWkoKTtUVWUoKTtwMigpO25RKCl9KTt2YXIgeGkscTg9bigoKT0+e0VvKCk7eGk9Y2xhc3N7Y29uc3RydWN0b3IoZSxhKXt0aGlzLmVycm9yVGV4dD1lLHRoaXMuZXJyb3JEYXRhPWF9fX0pO3ZhciBGUixYamU9bigoKT0+e3E4KCk7RW8oKTtGUj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubG9jYWxEYXRhPXt9fWFzeW5jIHBhc3NHdWFyZHMoZSxhKXtsZXQgcj1uZXcgRTguR3VhcmRTZXQoZSk7aWYoIWF3YWl0IHIuYWxsR3VhcmRzUGFzcyhhKSl7bGV0IG89YXdhaXQgci5nZXRGYWlsZWRIaW50KGEpO3Rocm93IG5ldyB4aShgZ3VhcmQgZmFpbGVkOiAke299YCx7ZmFpbGVkSGludDpvfSl9fX19KTt2YXIgbFEsY1E9bigoKT0+e0VvKCk7cTgoKTtYamUoKTtsUT1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3RoaXMubWV0aG9kPWUsdGhpcy5oYW5kbGVyRnVuY3Rpb249YX1hc3luYyBhZGRSZXNwb25zZShlKXtpZihlLm1ldGhvZCE9PXRoaXMubWV0aG9kKXRocm93IG5ldyBFcnJvcigidGhpcyBoYW5kbGVyIGhhcyBiZWVuIGdpdmVuIGEgd3JvbmcgbWV0aG9kIHRvIGFuc3dlciB0by4gUGxlYXNlIHVzZSBhIFR5cGVkUm91dGVyIHRvIGZpbHRlciByZXF1ZXN0cyIpO2xldCBhLHI9bmV3IEZSO2UubG9jYWxEYXRhJiYoci5sb2NhbERhdGE9ZS5sb2NhbERhdGEpO2xldCBpPWF3YWl0IHRoaXMuaGFuZGxlckZ1bmN0aW9uKGUucmVxdWVzdCxyKS5jYXRjaChvPT57byBpbnN0YW5jZW9mIHhpP2E9bzpjb25zb2xlLmxvZyhvKX0pO3JldHVybiBhJiYoZS5lcnJvcj17dGV4dDphLmVycm9yVGV4dCxkYXRhOmEuZXJyb3JEYXRhfSksaSYmKGUucmVzcG9uc2U9aSksZT8uY29ycmVsYXRpb24/LnBoYXNlJiYoZS5jb3JyZWxhdGlvbi5waGFzZT0icmVzcG9uc2UiKSxlfX19KTt2YXIgWHMsVjg9bigoKT0+e0VvKCk7T1IoKTtjUSgpO2RRKCk7WHM9Y2xhc3MgdHtjb25zdHJ1Y3Rvcigpe3RoaXMuaG9va3M9e30sdGhpcy5yb3V0ZXJNYXA9bmV3IEIxLk9iamVjdE1hcCx0aGlzLmhhbmRsZXJNYXA9bmV3IEIxLk9iamVjdE1hcCx0aGlzLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcz1uZXcgQjEuT2JqZWN0TWFwLHRoaXMuZmlyZUV2ZW50SW50ZXJlc3RNYXA9bmV3IEIxLkludGVyZXN0TWFwKGU9PmUpfXN0YXRpYyBnZXQgZ2xvYmFsSG9va3MoKXtyZXR1cm4gZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3N8fChnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcz17fSksZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3N9c3RhdGljIHNldCBnbG9iYWxIb29rcyhlKXtnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcz1lfXN0YXRpYyBzZXRHbG9iYWxIb29rcyhlKXtsZXQgYT10Lmdsb2JhbEhvb2tzO3QuZ2xvYmFsSG9va3M9ey4uLmEsLi4uZX19c3RhdGljIGNsZWFyR2xvYmFsSG9va3MoKXtnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcz17fX1zZXRIb29rcyhlKXt0aGlzLmhvb2tzPXsuLi50aGlzLmhvb2tzLC4uLmV9fWNhbGxIb29rKGUsYSl7dHJ5e3QuZ2xvYmFsSG9va3NbZV0/LihhKSx0aGlzLmhvb2tzW2VdPy4oYSl9Y2F0Y2gocil7Y29uc29sZS5lcnJvcihgVHlwZWRSb3V0ZXIgaG9vayBlcnJvciAoJHtlfSk6YCxyKX19YWRkVHlwZWRIYW5kbGVyKGUpe2lmKHRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKGUubWV0aG9kKSl0aHJvdyBuZXcgRXJyb3IoYGEgVHlwZWRIYW5kbGVyIGZvciAke2UubWV0aG9kfSBhbHJlZHkgZXhpc3RzISBDYW4ndCBhZGQgYW5vdGhlciBvbmUuYCk7dGhpcy5oYW5kbGVyTWFwLmFkZChlKX1hZGRUeXBlZFJvdXRlcihlKXt0aGlzLnJvdXRlck1hcC5maW5kU3luYyhyPT5yPT09ZSl8fCh0aGlzLnJvdXRlck1hcC5hZGQoZSksZS5hZGRUeXBlZFJvdXRlcih0aGlzKSl9Y2hlY2tGb3JUeXBlZEhhbmRsZXIoZSl7cmV0dXJuISF0aGlzLmdldFR5cGVkSGFuZGxlckZvck1ldGhvZChlKX1nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QoZSxhPVtdKXthLnB1c2godGhpcyk7bGV0IHI7cmV0dXJuIHI9dGhpcy5oYW5kbGVyTWFwLmZpbmRTeW5jKGk9PmkubWV0aG9kPT09ZSkscnx8dGhpcy5yb3V0ZXJNYXAuZ2V0QXJyYXkoKS5mb3JFYWNoKGk9PnshciYmIWEuaW5jbHVkZXMoaSkmJihyPWkuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKGUsYSkpfSkscn1zdGF0aWN7dGhpcy5kZWZhdWx0Um91dGVPcHRpb25zPXtsb2NhbFJlcXVlc3Q6ITEsc2tpcEhvb2tzOiExfX1hc3luYyByb3V0ZUFuZEFkZFJlc3BvbnNlKGUsYT17fSl7bGV0IHI9ey4uLnQuZGVmYXVsdFJvdXRlT3B0aW9ucywuLi5hfTtpZihlPUFyLmRlY29kZVBheWxvYWRGcm9tTmV0d29yayhlLHt0eXBlZHJvdXRlcjp0aGlzfSksZS5sb2NhbERhdGE9ZS5sb2NhbERhdGF8fHt9LGUubG9jYWxEYXRhLmZpcnN0VHlwZWRyb3V0ZXI9dGhpcyxlLm1ldGhvZD09PSIjI1ZpcnR1YWxTdHJlYW0jIyIpe2xldCBpPWF3YWl0IHRoaXMuaGFuZGxlU3RyZWFtVHlwZWRSZXF1ZXN0KGUpO3JldHVybiBpLmxvY2FsRGF0YT1udWxsLGl9aWYoZT8uY29ycmVsYXRpb24/LnBoYXNlPT09InJlcXVlc3QifHxyLmxvY2FsUmVxdWVzdCl7bGV0IGk9RGF0ZS5ub3coKTtyLnNraXBIb29rc3x8dGhpcy5jYWxsSG9vaygib25JbmNvbWluZ1JlcXVlc3QiLHtjb3JyZWxhdGlvbklkOmUuY29ycmVsYXRpb24/LmlkfHwidW5rbm93biIsbWV0aG9kOmUubWV0aG9kLGRpcmVjdGlvbjoiaW5jb21pbmciLHBoYXNlOiJyZXF1ZXN0Iix0aW1lc3RhbXA6aSxwYXlsb2FkOmUucmVxdWVzdH0pO2xldCBvPXRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKGUubWV0aG9kKTtyZXR1cm4gbz8oZT1hd2FpdCBvLmFkZFJlc3BvbnNlKGUpLGUubG9jYWxEYXRhPW51bGwsZT1Bci5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayhlLHt0eXBlZHJvdXRlcjp0aGlzfSksci5za2lwSG9va3N8fHRoaXMuY2FsbEhvb2soIm9uT3V0Z29pbmdSZXNwb25zZSIse2NvcnJlbGF0aW9uSWQ6ZS5jb3JyZWxhdGlvbj8uaWR8fCJ1bmtub3duIixtZXRob2Q6ZS5tZXRob2QsZGlyZWN0aW9uOiJvdXRnb2luZyIscGhhc2U6InJlc3BvbnNlIix0aW1lc3RhbXA6RGF0ZS5ub3coKSxkdXJhdGlvbk1zOkRhdGUubm93KCktaSxwYXlsb2FkOmUucmVzcG9uc2UsZXJyb3I6ZS5lcnJvcj8udGV4dH0pLGUpOihjb25zb2xlLmxvZyhgQ2Fubm90IGZpbmQgaGFuZGxlciBmb3IgbWV0aG9kbmFtZSAke2UubWV0aG9kfWApLGUuZXJyb3I9e3RleHQ6IlRoZXJlIGlzIG5vIGF2YWlsYWJsZSBtZXRob2QgZm9yIHRoaXMgY2FsbCBvbiB0aGUgc2VydmVyIHNpZGUiLGRhdGE6e319LGUuY29ycmVsYXRpb24ucGhhc2U9InJlc3BvbnNlIixlLmxvY2FsRGF0YT1udWxsLGU9QXIuZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsoZSx7dHlwZWRyb3V0ZXI6dGhpc30pLHIuc2tpcEhvb2tzfHx0aGlzLmNhbGxIb29rKCJvbk91dGdvaW5nUmVzcG9uc2UiLHtjb3JyZWxhdGlvbklkOmUuY29ycmVsYXRpb24/LmlkfHwidW5rbm93biIsbWV0aG9kOmUubWV0aG9kLGRpcmVjdGlvbjoib3V0Z29pbmciLHBoYXNlOiJyZXNwb25zZSIsdGltZXN0YW1wOkRhdGUubm93KCksZHVyYXRpb25NczpEYXRlLm5vdygpLWkscGF5bG9hZDplLnJlc3BvbnNlLGVycm9yOmUuZXJyb3I/LnRleHR9KSxlKX1lbHNlIHJldHVybiBlPy5jb3JyZWxhdGlvbj8ucGhhc2U9PT0icmVzcG9uc2UiPyhyLnNraXBIb29rc3x8dGhpcy5jYWxsSG9vaygib25JbmNvbWluZ1Jlc3BvbnNlIix7Y29ycmVsYXRpb25JZDplLmNvcnJlbGF0aW9uPy5pZHx8InVua25vd24iLG1ldGhvZDplLm1ldGhvZCxkaXJlY3Rpb246ImluY29taW5nIixwaGFzZToicmVzcG9uc2UiLHRpbWVzdGFtcDpEYXRlLm5vdygpLHBheWxvYWQ6ZS5yZXNwb25zZSxlcnJvcjplLmVycm9yPy50ZXh0fSksdGhpcy5maXJlRXZlbnRJbnRlcmVzdE1hcC5maW5kSW50ZXJlc3QoZS5jb3JyZWxhdGlvbi5pZCk/LmZ1bGxmaWxsSW50ZXJlc3QoZSksbnVsbCk6KGNvbnNvbGUubG9nKCJyZWNlaXZlZCB3ZWlyZGx5IHNoYXBlZCByZXF1ZXN0IiksY29uc29sZS5sb2coZSksbnVsbCl9YXN5bmMgaGFuZGxlU3RyZWFtVHlwZWRSZXF1ZXN0KGUpe2xldCBhPWF3YWl0IHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmZpbmQoYXN5bmMgaT0+aS5zdHJlYW1JZD09PWUucmVxdWVzdC5zdHJlYW1JZCk7aWYoYSljb25zb2xlLmxvZyhgc3VjY2VzczogZm91bmQgcmVsZXZhbnQgdmlydHVhbCBzdHJlYW0gd2l0aCBpZCAke2UucmVxdWVzdC5zdHJlYW1JZH1gKTtlbHNlIHJldHVybiBjb25zb2xlLmxvZyhgbm8gcmVsZXZhbnQgdmlydHVhbCBzdHJlYW0gZm91bmQgZm9yIHN0cmVhbSB3aXRoIGlkICR7ZS5yZXF1ZXN0LnN0cmVhbUlkfWApLGNvbnNvbGUubG9nKHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmdldEFycmF5KCkpLGU7cmV0dXJuIGF3YWl0IGEuaGFuZGxlU3RyZWFtVHIoZSl9fX0pO3ZhciBRamUsQXIsT1I9bigoKT0+e0VvKCk7VjgoKTtRamU9IiMjIyMjIyMjIyMjIyNDTE9TSU5HIEJJVCMjIyMjIyMjIyMjIyMiLEFyPWNsYXNzIHR7c3RhdGljIGVuY29kZVBheWxvYWRGb3JOZXR3b3JrKGUsYSxyLGk9W10pe3JldHVybiFlfHxyNi5pc0J1ZmZlckxpa2UoZSk/ZTplIGluc3RhbmNlb2YgdD8oIWUuc2lkZSYmYS5zZW5kTWV0aG9kJiYoZS5zaWRlPSJyZXF1ZXN0aW5nIixlLnNlbmRNZXRob2Q9YS5zZW5kTWV0aG9kKSwhZS5zaWRlJiZhLnR5cGVkcm91dGVyJiYoZS5zaWRlPSJyZXNwb25kaW5nIixlLnR5cGVkcm91dGVyPWEudHlwZWRyb3V0ZXIsYS50eXBlZHJvdXRlci5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuYWRkKGUpKSwhci5yZXNwb25zZXx8aS5pbmNsdWRlcygicmVzcG9uc2UiKT8oZS5zdGFydEtlZXBBbGl2ZUxvb3AoKSx7X2lzVmlydHVhbFN0cmVhbTohMCxzdHJlYW1JZDplLnN0cmVhbUlkfSk6e19PQk1JVFRFRF9WSVJUVUFMX1NUUkVBTTohMCxyZWFzb246InBhdGggaXMgdW5kZXIgLnJlcXVlc3Q6IG9ibWl0dGVkIGZvciBkZWR1cGxpY2F0aW9uIHJlYXNvbnMgaW4gcmVzcG9uc2UgY3ljbGUuIn0pOkFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoKG8scyk9PnQuZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsobyxhLHJ8fGUsaS5jb25jYXQoU3RyaW5nKHMpKSkpOmUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCI/T2JqZWN0LmVudHJpZXMoZSkucmVkdWNlKChvLFtzLGxdKT0+e2xldCBmPWkuY29uY2F0KHMpO3JldHVybiBvW3NdPXQuZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsobCxhLHJ8fGUsZiksb30se30pOmV9c3RhdGljIGRlY29kZVBheWxvYWRGcm9tTmV0d29yayhlLGEpe2lmKHI2LmlzQnVmZmVyTGlrZShlKXx8ZSBpbnN0YW5jZW9mIFhzKXJldHVybiBlO2lmKGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCIpe2lmKGUgaW5zdGFuY2VvZiBTZXR8fGUgaW5zdGFuY2VvZiBNYXB8fGUgaW5zdGFuY2VvZiBEYXRlfHxlIGluc3RhbmNlb2YgUmVnRXhwfHxlIGluc3RhbmNlb2YgRXJyb3J8fGUgaW5zdGFuY2VvZiBQcm9taXNlfHx0eXBlb2YgZS50aGVuPT0iZnVuY3Rpb24iKXJldHVybiBlO2lmKGUuX2lzVmlydHVhbFN0cmVhbSl7bGV0IHI9bmV3IHQ7cmV0dXJuIHIuc3RyZWFtSWQ9ZS5zdHJlYW1JZCwhci5zaWRlJiZhLnNlbmRNZXRob2QmJihyLnNpZGU9InJlcXVlc3RpbmciLHIuc2VuZE1ldGhvZD1hLnNlbmRNZXRob2QpLCFyLnNpZGUmJmEudHlwZWRyb3V0ZXImJihyLnNpZGU9InJlc3BvbmRpbmciLHIudHlwZWRyb3V0ZXI9YS50eXBlZHJvdXRlcixhLnR5cGVkcm91dGVyLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcy5hZGQocikpLHIuc3RhcnRLZWVwQWxpdmVMb29wKCkscn1lbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2xldCByPVtdO2ZvcihsZXQgaSBvZiBlKXIucHVzaCh0LmRlY29kZVBheWxvYWRGcm9tTmV0d29yayhpLGEpKTtyZXR1cm4gcn1lbHNlIHJldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoKHIsaSk9PihyW2ldPXQuZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKGVbaV0sYSkscikse30pfWVsc2UgcmV0dXJuIGV9Y29uc3RydWN0b3IoKXt0aGlzLnN0cmVhbUlkPURvLnVuaSgpLHRoaXMua2VlcEFsaXZlPSEwLHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheT1uZXcgQjEuQmFja3ByZXNzdXJlZEFycmF5KDE2KSx0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXk9bmV3IEIxLkJhY2twcmVzc3VyZWRBcnJheSgxNil9YXN5bmMgd29ya09uUXVldWUoKXtpZih0aGlzLndvcmtpbmdEZWZlcnJlZClyZXR1cm4gdGhpcy53b3JraW5nRGVmZXJyZWQucHJvbWlzZTtpZih0aGlzLndvcmtpbmdEZWZlcnJlZD1WZS5kZWZlcigpLHRoaXMuc2lkZT09PSJyZXF1ZXN0aW5nIil7bGV0IGU9IXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCksYT0hMSxyPSExLGk9YXN5bmMoKT0+e2xldCBvPWF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7bWV0aG9kOiIjI1ZpcnR1YWxTdHJlYW0jIyIscmVxdWVzdDp7c3RyZWFtSWQ6dGhpcy5zdHJlYW1JZCxjeWNsZUlkOkRvLnVuaSgpLGN5Y2xlOiJyZXF1ZXN0IixtYWluUHVycG9zZToiZmVlZGJhY2siLG5leHQ6dGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoPjAsYmFja3ByZXNzdXJlOiF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpfSxyZXNwb25zZTpudWxsfSkuY2F0Y2goKCk9Pntjb25zb2xlLmxvZygic3RyZWFtIGVuZGVkIGltbWF0dXJlbHkiKSx0aGlzLmtlZXBBbGl2ZT0hMX0pO28mJm8ucmVzcG9uc2UmJihyPW8ucmVzcG9uc2UuYmFja3ByZXNzdXJlLGE9by5yZXNwb25zZS5uZXh0KX07Zm9yKGF3YWl0IGkoKTt0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGg+MHx8YTspe2lmKHIpZm9yKDtyOyljb25zb2xlLmxvZygid2FpdGluZyBmb3IgZmVlZGJhY2sgYmVjYXVzZSBvZiBiYWNrcHJlc3N1cmUuLi4iKSxhd2FpdCBmdC5kZWxheUZvcig1MCksYXdhaXQgaSgpO2xldCBvO3RoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aD4wJiYobz10aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKSk7bGV0IHM7cz1hd2FpdCB0aGlzLnNlbmRNZXRob2Qoe21ldGhvZDoiIyNWaXJ0dWFsU3RyZWFtIyMiLHJlcXVlc3Q6e3N0cmVhbUlkOnRoaXMuc3RyZWFtSWQsY3ljbGVJZDpEby51bmkoKSxjeWNsZToicmVxdWVzdCIsbWFpblB1cnBvc2U6bz8iY2h1bmsiOiJyZWFkIixiYWNrcHJlc3N1cmU6ZSxuZXh0OnRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aD4wLC4uLm8/e2NodW5rRGF0YTpvfTp7fX0scmVzcG9uc2U6bnVsbH0pLmNhdGNoKCgpPT4oY29uc29sZS5sb2coInN0cmVhbSBlbmRlZCBpbW1hdHVyZWx5IiksdGhpcy5rZWVwQWxpdmU9ITEsbnVsbCkpLHMmJnMucmVzcG9uc2UmJnMucmVzcG9uc2UuY2h1bmtEYXRhJiZ0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkucHVzaChzLnJlc3BvbnNlLmNodW5rRGF0YSkscj1zJiZzLnJlc3BvbnNlJiZzLnJlc3BvbnNlLmJhY2twcmVzc3VyZSxlPSF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpLGE9cyYmcy5yZXNwb25zZSYmcy5yZXNwb25zZS5uZXh0fX10aGlzLndvcmtpbmdEZWZlcnJlZC5yZXNvbHZlKCksdGhpcy53b3JraW5nRGVmZXJyZWQ9bnVsbH1hc3luYyBoYW5kbGVTdHJlYW1UcihlKXtpZihlLnJlcXVlc3Qua2VlcEFsaXZlPT09ITAmJnRoaXMua2VlcEFsaXZlPT09ITA/dGhpcy5sYXN0S2VlcEFsaXZlRXZlbnQ9RGF0ZS5ub3coKTplLnJlcXVlc3Qua2VlcEFsaXZlPT09ITEmJih0aGlzLmtlZXBBbGl2ZT0hMSksZS5yZXF1ZXN0Lm1haW5QdXJwb3NlPT09ImtlZXBBbGl2ZSImJihlLnJlc3BvbnNlPXtzdHJlYW1JZDp0aGlzLnN0cmVhbUlkLGN5Y2xlSWQ6ZS5yZXF1ZXN0LmN5Y2xlSWQsY3ljbGU6InJlc3BvbnNlIixtYWluUHVycG9zZToia2VlcEFsaXZlIixrZWVwQWxpdmU6dGhpcy5rZWVwQWxpdmUsbmV4dDp0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGg+MCxiYWNrcHJlc3N1cmU6IXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCl9KSxlLnJlcXVlc3QubWFpblB1cnBvc2U9PT0iZmVlZGJhY2siJiYoZS5yZXNwb25zZT17c3RyZWFtSWQ6dGhpcy5zdHJlYW1JZCxjeWNsZUlkOmUucmVxdWVzdC5jeWNsZUlkLGN5Y2xlOiJyZXNwb25zZSIsbWFpblB1cnBvc2U6ImZlZWRiYWNrIixuZXh0OnRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aD4wLGJhY2twcmVzc3VyZTohdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKX0pLGUucmVxdWVzdC5tYWluUHVycG9zZT09PSJjaHVuayIpe2lmKHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5wdXNoKGUucmVxdWVzdC5jaHVua0RhdGEpLHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aD4wJiZlLnJlc3BvbnNlLmJhY2twcmVzc3VyZT09PSExKXtsZXQgYT10aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKTtlLnJlc3BvbnNlPXtzdHJlYW1JZDp0aGlzLnN0cmVhbUlkLGN5Y2xlSWQ6ZS5yZXF1ZXN0LmN5Y2xlSWQsY3ljbGU6InJlc3BvbnNlIixtYWluUHVycG9zZToiY2h1bmsiLG5leHQ6dGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoPjEsYmFja3ByZXNzdXJlOiF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpLGNodW5rRGF0YTp0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKX19ZWxzZSBlLnJlc3BvbnNlPXtzdHJlYW1JZDp0aGlzLnN0cmVhbUlkLGN5Y2xlSWQ6ZS5yZXF1ZXN0LmN5Y2xlSWQsY3ljbGU6InJlc3BvbnNlIixtYWluUHVycG9zZToiZmVlZGJhY2siLG5leHQ6dGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoPjAsYmFja3ByZXNzdXJlOiF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpfTtlLnJlcXVlc3Q9bnVsbH1yZXR1cm4gZX1hc3luYyBjbGVhbnVwKCl7dGhpcy50eXBlZHJvdXRlciYmdGhpcy50eXBlZHJvdXRlci5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMucmVtb3ZlKHRoaXMpfWFzeW5jIHN0YXJ0S2VlcEFsaXZlTG9vcCgpe2lmKHRoaXMuc2lkZT09PSJyZXNwb25kaW5nIilyZXR1cm47YXdhaXQgZnQuZGVsYXlGb3IoMCksY29uc29sZS5sb2coYHN0YXJ0aW5nIGtlZXBhbGl2ZSBsb29wIG9uIHNpZGUgJHt0aGlzLnNpZGV9YCk7bGV0IGU9MDtmb3IoO3RoaXMua2VlcEFsaXZlOylhd2FpdCB0aGlzLnRyaWdnZXJLZWVwQWxpdmUoKSxhd2FpdCBmdC5kZWxheUZvcigxZTMpO2F3YWl0IGZ0LmRlbGF5Rm9yKDFlMyksYXdhaXQgdGhpcy5jbGVhbnVwKCksY29uc29sZS5sb2coYGNsZWFuZWQgdXAgZm9yIHN0cmVhbSAke3RoaXMuc3RyZWFtSWR9YCl9YXN5bmMgdHJpZ2dlcktlZXBBbGl2ZSgpe2lmKHRoaXMuc2lkZT09PSJyZXF1ZXN0aW5nIil7Y29uc29sZS5sb2coImtlZXBhbGl2ZSBzZW50LiIpO2xldCBlPWF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7bWV0aG9kOiIjI1ZpcnR1YWxTdHJlYW0jIyIscmVxdWVzdDp7c3RyZWFtSWQ6dGhpcy5zdHJlYW1JZCxjeWNsZUlkOkRvLnVuaSgpLGN5Y2xlOiJyZXF1ZXN0IixtYWluUHVycG9zZToia2VlcEFsaXZlIixrZWVwQWxpdmU6dGhpcy5rZWVwQWxpdmV9LHJlc3BvbnNlOm51bGx9KS5jYXRjaCgoKT0+e3RoaXMua2VlcEFsaXZlPSExfSk7ZSYmZS5yZXNwb25zZSYmZS5yZXNwb25zZS5rZWVwQWxpdmU9PT0hMT90aGlzLmtlZXBBbGl2ZT0hMTp0aGlzLmxhc3RLZWVwQWxpdmVFdmVudD1EYXRlLm5vdygpLGUmJmUucmVzcG9uc2UmJmUucmVzcG9uc2UubmV4dCYmdGhpcy53b3JrT25RdWV1ZSgpfURhdGUubm93KCktdGhpcy5sYXN0S2VlcEFsaXZlRXZlbnQ+MWU0JiYoY29uc29sZS5sb2coYGNsb3Npbmcgc3RyZWFtIGZvciAke3RoaXMuc3RyZWFtSWR9YCksdGhpcy5rZWVwQWxpdmU9ITEpfWFzeW5jIHNlbmREYXRhKGUpe3RoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5wdXNoKGUpLHRoaXMud29ya09uUXVldWUoKSxhd2FpdCB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkud2FpdEZvclNwYWNlKCl9YXN5bmMgZmV0Y2hEYXRhKCl7cmV0dXJuIHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5oYXNTcGFjZSxhd2FpdCB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkud2FpdEZvckl0ZW1zKCksdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LnNoaWZ0KCl9YXN5bmMgcmVhZEZyb21XZWJzdHJlYW0oZSxhPSEwKXtsZXQgcj1lLmdldFJlYWRlcigpLGk9ITE7Zm9yKDshaTspe2xldHt2YWx1ZTpvLGRvbmU6c309YXdhaXQgci5yZWFkKCk7byYmYXdhaXQgdGhpcy5zZW5kRGF0YShvKSxpPXN9YSYmYXdhaXQgdGhpcy5jbG9zZSghMCl9YXN5bmMgd3JpdGVUb1dlYnN0cmVhbShlKXtsZXQgYT1lLmdldFdyaXRlcigpO2Zvcig7dGhpcy5rZWVwQWxpdmV8fHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja0hhc0l0ZW1zKCk7KXtsZXQgcj1hd2FpdCB0aGlzLmZldGNoRGF0YSgpO2lmKHI9PT1RamUpe2EucmVsZWFzZUxvY2soKSxhd2FpdCBlLmNsb3NlKCk7YnJlYWt9YXdhaXQgYS53cml0ZShyKX19YXN5bmMgY2xvc2UoZT0hMSl7ZSYmdGhpcy5zZW5kRGF0YShRamUpLHRoaXMua2VlcEFsaXZlPSExfX19KTt2YXIgZlEsdVE9bigoKT0+e1Y4KCk7RW8oKTtmUT1jbGFzc3tjb25zdHJ1Y3RvcihlKXtpZihlLnBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXImJiFlLnR5cGVkUm91dGVyUmVmKXRocm93IG5ldyBFcnJvcigieW91IGhhdmUgdG8gc3BlY2lmeSBhIHR5cGVkcm91dGVyIHdoZW4gdXNpbmcgcG9zdG1ldGhvZCB3aXRoIHR5cGVkcm91dGVyIik7dGhpcy5vcHRpb25zPWV9YXN5bmMgcG9zdChlKXtsZXQgYTt0aGlzLm9wdGlvbnMudHlwZWRSb3V0ZXJSZWYmJihhPWF3YWl0IHRoaXMub3B0aW9ucy50eXBlZFJvdXRlclJlZi5maXJlRXZlbnRJbnRlcmVzdE1hcC5hZGRJbnRlcmVzdChlLmNvcnJlbGF0aW9uLmlkLGUpKTtsZXQgaT1hd2FpdCh0aGlzLm9wdGlvbnMucG9zdE1ldGhvZHx8dGhpcy5vcHRpb25zLnBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXIpKGUpLG87cmV0dXJuIGE/bz1hd2FpdCBhLmludGVyZXN0RnVsbGZpbGxlZDppP289aTpvPWUsb319fSk7ZnVuY3Rpb24gS2plKHQsZSl7dHJ5e1hzLmdsb2JhbEhvb2tzW3RdPy4oZSl9Y2F0Y2goYSl7Y29uc29sZS5lcnJvcihgVHlwZWRSZXF1ZXN0IGhvb2sgZXJyb3IgKCR7dH0pOmAsYSl9fXZhciBiR3QsVTgsZFE9bigoKT0+e0VvKCk7T1IoKTtxOCgpO1Y4KCk7dVEoKTtiR3Q9bmV3IFpzLldlYlJlcXVlc3Q7VTg9Y2xhc3N7Y29uc3RydWN0b3IoZSxhKXt0aGlzLnNraXBIb29rcz0hMSx0eXBlb2YgZT09InN0cmluZyI/dGhpcy51cmxFbmRQb2ludD1lOnRoaXMudHlwZWRUYXJnZXQ9ZSx0aGlzLm1ldGhvZD1hfWFzeW5jIGZpcmUoZSxhPSExKXtsZXQgcj1EYXRlLm5vdygpLGk9e21ldGhvZDp0aGlzLm1ldGhvZCxyZXF1ZXN0OmUscmVzcG9uc2U6bnVsbCxjb3JyZWxhdGlvbjp7aWQ6RG8udW5pKCkscGhhc2U6InJlcXVlc3QifX07aT1Bci5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayhpLHtzZW5kTWV0aG9kOnM9PnRoaXMucG9zdFRyT2JqZWN0KHMpfSksdGhpcy5za2lwSG9va3N8fEtqZSgib25PdXRnb2luZ1JlcXVlc3QiLHtjb3JyZWxhdGlvbklkOmkuY29ycmVsYXRpb24uaWQsbWV0aG9kOnRoaXMubWV0aG9kLGRpcmVjdGlvbjoib3V0Z29pbmciLHBoYXNlOiJyZXF1ZXN0Iix0aW1lc3RhbXA6cixwYXlsb2FkOmV9KTtsZXQgbztyZXR1cm4gbz1hd2FpdCB0aGlzLnBvc3RUck9iamVjdChpLGEpLG89QXIuZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKG8se3NlbmRNZXRob2Q6cz0+dGhpcy5wb3N0VHJPYmplY3Qocyl9KSx0aGlzLnNraXBIb29rc3x8S2plKCJvbkluY29taW5nUmVzcG9uc2UiLHtjb3JyZWxhdGlvbklkOmkuY29ycmVsYXRpb24uaWQsbWV0aG9kOnRoaXMubWV0aG9kLGRpcmVjdGlvbjoiaW5jb21pbmciLHBoYXNlOiJyZXNwb25zZSIsdGltZXN0YW1wOkRhdGUubm93KCksZHVyYXRpb25NczpEYXRlLm5vdygpLXIscGF5bG9hZDpvPy5yZXNwb25zZSxlcnJvcjpvPy5lcnJvcj8udGV4dH0pLG8ucmVzcG9uc2V9YXN5bmMgcG9zdFRyT2JqZWN0KGUsYT0hMSl7bGV0IHI7aWYodGhpcy51cmxFbmRQb2ludD9yPWF3YWl0IGJHdC5wb3N0SnNvbih0aGlzLnVybEVuZFBvaW50LGUsYSk6cj1hd2FpdCB0aGlzLnR5cGVkVGFyZ2V0LnBvc3QoZSksci5lcnJvcil7aWYoY29uc29sZS5lcnJvcihgbWV0aG9kOiA+PiR7dGhpcy5tZXRob2R9PDwgZ290IGFuIEVSUk9SOiAiJHtyLmVycm9yLnRleHR9IiB3aXRoIGRhdGEgJHtKU09OLnN0cmluZ2lmeShyLmVycm9yLmRhdGEsbnVsbCwyKX1gKSwhci5yZXRyeSl0aHJvdyBuZXcgeGkoci5lcnJvci50ZXh0LHIuZXJyb3IuZGF0YSk7cmV0dXJuIG51bGx9cmV0dXJuIHIucmV0cnkmJihjb25zb2xlLmxvZyhgc2VydmVyIHJlcXVlc3RlZCByZXRyeSBmb3IgdGhlIGZvbGxvd2luZyByZWFzb246ICR7ci5yZXRyeS5yZWFzb259YCksYXdhaXQgZnQuZGVsYXlGb3Ioci5yZXRyeS53YWl0Rm9yTXMpLHI9YXdhaXQgdGhpcy5wb3N0VHJPYmplY3QoZSxhKSkscn19fSk7dmFyIEYyPXt9O2V0KEYyLHtUeXBlZEhhbmRsZXI6KCk9PmxRLFR5cGVkUmVxdWVzdDooKT0+VTgsVHlwZWRSZXNwb25zZUVycm9yOigpPT54aSxUeXBlZFJvdXRlcjooKT0+WHMsVHlwZWRUYXJnZXQ6KCk9PmZRLFZpcnR1YWxTdHJlYW06KCk9PkFyfSk7dmFyIGo4PW4oKCk9PntkUSgpO2NRKCk7VjgoKTtxOCgpO3VRKCk7T1IoKX0pO2Z1bmN0aW9uIEpqZSh0KXtyZXR1cm4gdCYmdHlwZW9mIHQudGhlbj09ImZ1bmN0aW9uIn1mdW5jdGlvbiAkcih0LGUpe3JldHVybiB0fHwodD0wKSxuZXcgUHJvbWlzZShmdW5jdGlvbihhKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBhKGUpfSx0KX0pfWZ1bmN0aW9uIGFXZSh0LGUpe3JldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGUtdCsxKSt0KX1mdW5jdGlvbiBiaSgpe3JldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMil9ZnVuY3Rpb24gdmkoKXt2YXIgdD1EYXRlLm5vdygpKjFlMztyZXR1cm4gdDw9cFEmJih0PXBRKzEpLHBRPXQsdH1mdW5jdGlvbiByV2UoKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvcjwidSImJnR5cGVvZiBuYXZpZ2F0b3IubG9ja3M8InUiJiZ0eXBlb2YgbmF2aWdhdG9yLmxvY2tzLnJlcXVlc3Q9PSJmdW5jdGlvbiJ9dmFyIGVXZSx0V2UsbmEscFEsTm89bigoKT0+e2VXZT1Qcm9taXNlLnJlc29sdmUoITEpLHRXZT1Qcm9taXNlLnJlc29sdmUoITApLG5hPVByb21pc2UucmVzb2x2ZSgpO3BRPTB9KTtmdW5jdGlvbiB3R3QodCl7dmFyIGU9e3RpbWU6dmkoKSxtZXNzYWdlc0NhbGxiYWNrOm51bGwsYmM6bmV3IEJyb2FkY2FzdENoYW5uZWwodCksc3ViRm5zOltdfTtyZXR1cm4gZS5iYy5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7ZS5tZXNzYWdlc0NhbGxiYWNrJiZlLm1lc3NhZ2VzQ2FsbGJhY2soYS5kYXRhKX0sZX1mdW5jdGlvbiBNR3QodCl7dC5iYy5jbG9zZSgpLHQuc3ViRm5zPVtdfWZ1bmN0aW9uIHpHdCh0LGUpe3RyeXtyZXR1cm4gdC5iYy5wb3N0TWVzc2FnZShlLCExKSxuYX1jYXRjaChhKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoYSl9fWZ1bmN0aW9uIGtHdCh0LGUpe3QubWVzc2FnZXNDYWxsYmFjaz1lfWZ1bmN0aW9uIFNHdCgpe2lmKHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpcy5EZW5vJiZnbG9iYWxUaGlzLkRlbm8uYXJncylyZXR1cm4hMDtpZigodHlwZW9mIHdpbmRvdzwidSJ8fHR5cGVvZiBzZWxmPCJ1IikmJnR5cGVvZiBCcm9hZGNhc3RDaGFubmVsPT0iZnVuY3Rpb24iKXtpZihCcm9hZGNhc3RDaGFubmVsLl9wdWJrZXkpdGhyb3cgbmV3IEVycm9yKCJCcm9hZGNhc3RDaGFubmVsOiBEbyBub3Qgb3ZlcndyaXRlIHdpbmRvdy5Ccm9hZGNhc3RDaGFubmVsIHdpdGggdGhpcyBtb2R1bGUsIHRoaXMgaXMgbm90IGEgcG9seWZpbGwiKTtyZXR1cm4hMH1lbHNlIHJldHVybiExfWZ1bmN0aW9uIENHdCgpe3JldHVybiAxNTB9dmFyIHZHdCx5R3QsaVdlLG9XZT1uKCgpPT57Tm8oKTt2R3Q9dmkseUd0PSJuYXRpdmUiO2lXZT17Y3JlYXRlOndHdCxjbG9zZTpNR3Qsb25NZXNzYWdlOmtHdCxwb3N0TWVzc2FnZTp6R3QsY2FuQmVVc2VkOlNHdCx0eXBlOnlHdCxhdmVyYWdlUmVzcG9uc2VUaW1lOkNHdCxtaWNyb1NlY29uZHM6dkd0fX0pO2Z1bmN0aW9uIExHdCh0KXtsZXQgZT1oUSgpLXQudHRsLGE9dC5tYXBbU3ltYm9sLml0ZXJhdG9yXSgpO2Zvcig7Oyl7bGV0IHI9YS5uZXh0KCkudmFsdWU7aWYoIXIpYnJlYWs7bGV0IGk9clswXTtpZihyWzFdPGUpdC5tYXAuZGVsZXRlKGkpO2Vsc2UgYnJlYWt9fWZ1bmN0aW9uIGhRKCl7cmV0dXJuIERhdGUubm93KCl9dmFyIGY2LG1RPW4oKCk9PntmNj1jbGFzc3t0dGw7bWFwPW5ldyBNYXA7X3RvPSExO2NvbnN0cnVjdG9yKGUpe3RoaXMudHRsPWV9aGFzKGUpe2xldCBhPXRoaXMubWFwLmdldChlKTtyZXR1cm4gdHlwZW9mIGE+InUiPyExOmE8aFEoKS10aGlzLnR0bD8odGhpcy5tYXAuZGVsZXRlKGUpLCExKTohMH1hZGQoZSl7dGhpcy5tYXAuZGVsZXRlKGUpLHRoaXMubWFwLnNldChlLGhRKCkpLHRoaXMuX3RvfHwodGhpcy5fdG89ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuX3RvPSExLExHdCh0aGlzKX0sMCkpfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19fSk7ZnVuY3Rpb24gUXMoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e30sZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKTtyZXR1cm4gdHlwZW9mIGUud2ViV29ya2VyU3VwcG9ydD4idSImJihlLndlYldvcmtlclN1cHBvcnQ9ITApLGUuaWRifHwoZS5pZGI9e30pLGUuaWRiLnR0bHx8KGUuaWRiLnR0bD0xZTMqNDUpLGUuaWRiLmZhbGxiYWNrSW50ZXJ2YWx8fChlLmlkYi5mYWxsYmFja0ludGVydmFsPTE1MCksdC5pZGImJnR5cGVvZiB0LmlkYi5vbmNsb3NlPT0iZnVuY3Rpb24iJiYoZS5pZGIub25jbG9zZT10LmlkYi5vbmNsb3NlKSxlLmxvY2Fsc3RvcmFnZXx8KGUubG9jYWxzdG9yYWdlPXt9KSxlLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0fHwoZS5sb2NhbHN0b3JhZ2UucmVtb3ZlVGltZW91dD0xZTMqNjApLHQubWV0aG9kcyYmKGUubWV0aG9kcz10Lm1ldGhvZHMpLGUubm9kZXx8KGUubm9kZT17fSksZS5ub2RlLnR0bHx8KGUubm9kZS50dGw9MWUzKjYwKjIpLGUubm9kZS5tYXhQYXJhbGxlbFdyaXRlc3x8KGUubm9kZS5tYXhQYXJhbGxlbFdyaXRlcz0yMDQ4KSx0eXBlb2YgZS5ub2RlLnVzZUZhc3RQYXRoPiJ1IiYmKGUubm9kZS51c2VGYXN0UGF0aD0hMCksZX12YXIgQlI9bigoKT0+e30pO2Z1bmN0aW9uIHNXZSgpe2lmKHR5cGVvZiBpbmRleGVkREI8InUiKXJldHVybiBpbmRleGVkREI7aWYodHlwZW9mIHdpbmRvdzwidSIpe2lmKHR5cGVvZiB3aW5kb3cubW96SW5kZXhlZERCPCJ1IilyZXR1cm4gd2luZG93Lm1vekluZGV4ZWREQjtpZih0eXBlb2Ygd2luZG93LndlYmtpdEluZGV4ZWREQjwidSIpcmV0dXJuIHdpbmRvdy53ZWJraXRJbmRleGVkREI7aWYodHlwZW9mIHdpbmRvdy5tc0luZGV4ZWREQjwidSIpcmV0dXJuIHdpbmRvdy5tc0luZGV4ZWREQn1yZXR1cm4hMX1mdW5jdGlvbiBSUih0KXt0LmNvbW1pdCYmdC5jb21taXQoKX1mdW5jdGlvbiAkR3QodCl7dmFyIGU9c1dlKCksYT1fR3QrdCxyPWUub3BlbihhKTtyZXR1cm4gci5vbnVwZ3JhZGVuZWVkZWQ9ZnVuY3Rpb24oaSl7dmFyIG89aS50YXJnZXQucmVzdWx0O28uY3JlYXRlT2JqZWN0U3RvcmUoWWEse2tleVBhdGg6ImlkIixhdXRvSW5jcmVtZW50OiEwfSl9LG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7ci5vbmVycm9yPWZ1bmN0aW9uKHMpe3JldHVybiBvKHMpfSxyLm9uc3VjY2Vzcz1mdW5jdGlvbigpe2koci5yZXN1bHQpfX0pfWZ1bmN0aW9uIERHdCh0LGUsYSl7dmFyIHI9RGF0ZS5ub3coKSxpPXt1dWlkOmUsdGltZTpyLGRhdGE6YX0sbz10LnRyYW5zYWN0aW9uKFtZYV0sInJlYWR3cml0ZSIsVzgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLGwpe28ub25jb21wbGV0ZT1mdW5jdGlvbigpe3JldHVybiBzKCl9LG8ub25lcnJvcj1mdW5jdGlvbihjKXtyZXR1cm4gbChjKX07dmFyIGY9by5vYmplY3RTdG9yZShZYSk7Zi5hZGQoaSksUlIobyl9KX1mdW5jdGlvbiBMVjEodCl7dmFyIGU9dC50cmFuc2FjdGlvbihZYSwicmVhZG9ubHkiLFc4KSxhPWUub2JqZWN0U3RvcmUoWWEpLHI9W107cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe2Eub3BlbkN1cnNvcigpLm9uc3VjY2Vzcz1mdW5jdGlvbihvKXt2YXIgcz1vLnRhcmdldC5yZXN1bHQ7cz8oci5wdXNoKHMudmFsdWUpLHMuY29udGludWUoKSk6KFJSKGUpLGkocikpfX0pfWZ1bmN0aW9uIEVHdCh0LGUpe3ZhciBhPXQudHJhbnNhY3Rpb24oWWEsInJlYWRvbmx5IixXOCkscj1hLm9iamVjdFN0b3JlKFlhKSxpPVtdLG89SURCS2V5UmFuZ2UuYm91bmQoZSsxLDEvMCk7aWYoci5nZXRBbGwpe3ZhciBzPXIuZ2V0QWxsKG8pO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmLGMpe3Mub25lcnJvcj1mdW5jdGlvbih1KXtyZXR1cm4gYyh1KX0scy5vbnN1Y2Nlc3M9ZnVuY3Rpb24odSl7Zih1LnRhcmdldC5yZXN1bHQpfX0pfWZ1bmN0aW9uIGwoKXt0cnl7cmV0dXJuIG89SURCS2V5UmFuZ2UuYm91bmQoZSsxLDEvMCksci5vcGVuQ3Vyc29yKG8pfWNhdGNoe3JldHVybiByLm9wZW5DdXJzb3IoKX19cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGYsYyl7dmFyIHU9bCgpO3Uub25lcnJvcj1mdW5jdGlvbihkKXtyZXR1cm4gYyhkKX0sdS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oZCl7dmFyIGg9ZC50YXJnZXQucmVzdWx0O2g/aC52YWx1ZS5pZDxlKzE/aC5jb250aW51ZShlKzEpOihpLnB1c2goaC52YWx1ZSksaC5jb250aW51ZSgpKTooUlIoYSksZihpKSl9fSl9ZnVuY3Rpb24gTkd0KHQsZSl7aWYodC5jbG9zZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7dmFyIGE9dC5kYi50cmFuc2FjdGlvbihZYSwicmVhZHdyaXRlIixXOCkscj1hLm9iamVjdFN0b3JlKFlhKTtyZXR1cm4gUHJvbWlzZS5hbGwoZS5tYXAoZnVuY3Rpb24oaSl7dmFyIG89ci5kZWxldGUoaSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHMpe28ub25zdWNjZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKX19KX0pKX1mdW5jdGlvbiBQR3QodCxlKXt2YXIgYT1EYXRlLm5vdygpLWUscj10LnRyYW5zYWN0aW9uKFlhLCJyZWFkb25seSIsVzgpLGk9ci5vYmplY3RTdG9yZShZYSksbz1bXTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocyl7aS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzPWZ1bmN0aW9uKGwpe3ZhciBmPWwudGFyZ2V0LnJlc3VsdDtpZihmKXt2YXIgYz1mLnZhbHVlO2MudGltZTxhPyhvLnB1c2goYyksZi5jb250aW51ZSgpKTooUlIocikscyhvKSl9ZWxzZSBzKG8pfX0pfWZ1bmN0aW9uIElHdCh0KXtyZXR1cm4gUEd0KHQuZGIsdC5vcHRpb25zLmlkYi50dGwpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIE5HdCh0LGUubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlkfSkpfSl9ZnVuY3Rpb24gRkd0KHQsZSl7cmV0dXJuIGU9UXMoZSksJEd0KHQpLnRoZW4oZnVuY3Rpb24oYSl7dmFyIHI9e2Nsb3NlZDohMSxsYXN0Q3Vyc29ySWQ6MCxjaGFubmVsTmFtZTp0LG9wdGlvbnM6ZSx1dWlkOmJpKCksZU1JczpuZXcgZjYoZS5pZGIudHRsKjIpLHdyaXRlQmxvY2tQcm9taXNlOm5hLG1lc3NhZ2VzQ2FsbGJhY2s6bnVsbCxyZWFkUXVldWVQcm9taXNlczpbXSxkYjphfTtyZXR1cm4gYS5vbmNsb3NlPWZ1bmN0aW9uKCl7ci5jbG9zZWQ9ITAsZS5pZGIub25jbG9zZSYmZS5pZGIub25jbG9zZSgpfSxuV2Uocikscn0pfWZ1bmN0aW9uIG5XZSh0KXt0LmNsb3NlZHx8bFdlKHQpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gJHIodC5vcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbldlKHQpfSl9ZnVuY3Rpb24gT0d0KHQsZSl7cmV0dXJuISh0LnV1aWQ9PT1lLnV1aWR8fGUuZU1Jcy5oYXModC5pZCl8fHQuZGF0YS50aW1lPGUubWVzc2FnZXNDYWxsYmFja1RpbWUpfWZ1bmN0aW9uIGxXZSh0KXtyZXR1cm4gdC5jbG9zZWQ/bmE6dC5tZXNzYWdlc0NhbGxiYWNrP0VHdCh0LmRiLHQubGFzdEN1cnNvcklkKS50aGVuKGZ1bmN0aW9uKGUpe3ZhciBhPWUuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiEhcn0pLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5pZD50Lmxhc3RDdXJzb3JJZCYmKHQubGFzdEN1cnNvcklkPXIuaWQpLHJ9KS5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIE9HdChyLHQpfSkuc29ydChmdW5jdGlvbihyLGkpe3JldHVybiByLnRpbWUtaS50aW1lfSk7cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihyKXt0Lm1lc3NhZ2VzQ2FsbGJhY2smJih0LmVNSXMuYWRkKHIuaWQpLHQubWVzc2FnZXNDYWxsYmFjayhyLmRhdGEpKX0pLG5hfSk6bmF9ZnVuY3Rpb24gQkd0KHQpe3QuY2xvc2VkPSEwLHQuZGIuY2xvc2UoKX1mdW5jdGlvbiBSR3QodCxlKXtyZXR1cm4gdC53cml0ZUJsb2NrUHJvbWlzZT10LndyaXRlQmxvY2tQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gREd0KHQuZGIsdC51dWlkLGUpfSkudGhlbihmdW5jdGlvbigpe2FXZSgwLDEwKT09PTAmJklHdCh0KX0pLHQud3JpdGVCbG9ja1Byb21pc2V9ZnVuY3Rpb24gSEd0KHQsZSxhKXt0Lm1lc3NhZ2VzQ2FsbGJhY2tUaW1lPWEsdC5tZXNzYWdlc0NhbGxiYWNrPWUsbFdlKHQpfWZ1bmN0aW9uIHFHdCgpe3JldHVybiEhc1dlKCl9ZnVuY3Rpb24gVkd0KHQpe3JldHVybiB0LmlkYi5mYWxsYmFja0ludGVydmFsKjJ9dmFyIFRHdCxfR3QsWWEsVzgsQUd0LGNXZSxkV2U9bigoKT0+e05vKCk7bVEoKTtCUigpO1RHdD12aSxfR3Q9InB1YmtleS5icm9hZGNhc3QtY2hhbm5lbC0wLSIsWWE9Im1lc3NhZ2VzIixXOD17ZHVyYWJpbGl0eToicmVsYXhlZCJ9LEFHdD0iaWRiIjtjV2U9e2NyZWF0ZTpGR3QsY2xvc2U6Qkd0LG9uTWVzc2FnZTpIR3QscG9zdE1lc3NhZ2U6Ukd0LGNhbkJlVXNlZDpxR3QsdHlwZTpBR3QsYXZlcmFnZVJlc3BvbnNlVGltZTpWR3QsbWljcm9TZWNvbmRzOlRHdH19KTtmdW5jdGlvbiBmV2UoKXt2YXIgdDtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gbnVsbDt0cnl7dD13aW5kb3cubG9jYWxTdG9yYWdlLHQ9d2luZG93WyJpZTgtZXZlbnRsaXN0ZW5lci9zdG9yYWdlIl18fHdpbmRvdy5sb2NhbFN0b3JhZ2V9Y2F0Y2h7fXJldHVybiB0fWZ1bmN0aW9uIHVXZSh0KXtyZXR1cm4gakd0K3R9ZnVuY3Rpb24gR0d0KHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEpeyRyKCkudGhlbihmdW5jdGlvbigpe3ZhciByPXVXZSh0LmNoYW5uZWxOYW1lKSxpPXt0b2tlbjpiaSgpLHRpbWU6RGF0ZS5ub3coKSxkYXRhOmUsdXVpZDp0LnV1aWR9LG89SlNPTi5zdHJpbmdpZnkoaSk7ZldlKCkuc2V0SXRlbShyLG8pO3ZhciBzPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpO3MuaW5pdEV2ZW50KCJzdG9yYWdlIiwhMCwhMCkscy5rZXk9cixzLm5ld1ZhbHVlPW8sd2luZG93LmRpc3BhdGNoRXZlbnQocyksYSgpfSl9KX1mdW5jdGlvbiBZR3QodCxlKXt2YXIgYT11V2UodCkscj1mdW5jdGlvbihvKXtvLmtleT09PWEmJmUoSlNPTi5wYXJzZShvLm5ld1ZhbHVlKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic3RvcmFnZSIscikscn1mdW5jdGlvbiBaR3QodCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLHQpfWZ1bmN0aW9uIFhHdCh0LGUpe2lmKGU9UXMoZSksIXBXZSgpKXRocm93IG5ldyBFcnJvcigiQnJvYWRjYXN0Q2hhbm5lbDogbG9jYWxzdG9yYWdlIGNhbm5vdCBiZSB1c2VkIik7dmFyIGE9YmkoKSxyPW5ldyBmNihlLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0KSxpPXtjaGFubmVsTmFtZTp0LHV1aWQ6YSxlTUlzOnJ9O3JldHVybiBpLmxpc3RlbmVyPVlHdCh0LGZ1bmN0aW9uKG8pe2kubWVzc2FnZXNDYWxsYmFjayYmby51dWlkIT09YSYmKCFvLnRva2VufHxyLmhhcyhvLnRva2VuKXx8by5kYXRhLnRpbWUmJm8uZGF0YS50aW1lPGkubWVzc2FnZXNDYWxsYmFja1RpbWV8fChyLmFkZChvLnRva2VuKSxpLm1lc3NhZ2VzQ2FsbGJhY2soby5kYXRhKSkpfSksaX1mdW5jdGlvbiBRR3QodCl7Wkd0KHQubGlzdGVuZXIpfWZ1bmN0aW9uIEtHdCh0LGUsYSl7dC5tZXNzYWdlc0NhbGxiYWNrVGltZT1hLHQubWVzc2FnZXNDYWxsYmFjaz1lfWZ1bmN0aW9uIHBXZSgpe3ZhciB0PWZXZSgpO2lmKCF0KXJldHVybiExO3RyeXt2YXIgZT0iX19icm9hZGNhc3RjaGFubmVsX2NoZWNrIjt0LnNldEl0ZW0oZSwid29ya3MiKSx0LnJlbW92ZUl0ZW0oZSl9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gSkd0KCl7dmFyIHQ9MTIwLGU9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO3JldHVybiBlLmluY2x1ZGVzKCJzYWZhcmkiKSYmIWUuaW5jbHVkZXMoImNocm9tZSIpP3QqMjp0fXZhciBVR3Qsakd0LFdHdCxoV2UsbVdlPW4oKCk9PnttUSgpO0JSKCk7Tm8oKTtVR3Q9dmksakd0PSJwdWJrZXkuYnJvYWRjYXN0Q2hhbm5lbC0iLFdHdD0ibG9jYWxzdG9yYWdlIjtoV2U9e2NyZWF0ZTpYR3QsY2xvc2U6UUd0LG9uTWVzc2FnZTpLR3QscG9zdE1lc3NhZ2U6R0d0LGNhbkJlVXNlZDpwV2UsdHlwZTpXR3QsYXZlcmFnZVJlc3BvbnNlVGltZTpKR3QsbWljcm9TZWNvbmRzOlVHdH19KTtmdW5jdGlvbiB0WXQodCl7dmFyIGU9e3RpbWU6Z1dlKCksbmFtZTp0LG1lc3NhZ2VzQ2FsbGJhY2s6bnVsbH07cmV0dXJuIGdRLmFkZChlKSxlfWZ1bmN0aW9uIGFZdCh0KXtnUS5kZWxldGUodCl9ZnVuY3Rpb24gcll0KHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHI9QXJyYXkuZnJvbShnUSk7ci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubmFtZT09PXQubmFtZSYmaSE9PXQmJmkubWVzc2FnZXNDYWxsYmFjayYmaS50aW1lPGUudGltZSYmaS5tZXNzYWdlc0NhbGxiYWNrKGUpfSksYSgpfSx4V2UpfSl9ZnVuY3Rpb24gaVl0KHQsZSl7dC5tZXNzYWdlc0NhbGxiYWNrPWV9ZnVuY3Rpb24gb1l0KCl7cmV0dXJuITB9ZnVuY3Rpb24gc1l0KCl7cmV0dXJuIHhXZX12YXIgZ1dlLGVZdCxnUSx4V2UsYldlLHZXZT1uKCgpPT57Tm8oKTtnV2U9dmksZVl0PSJzaW11bGF0ZSIsZ1E9bmV3IFNldDt4V2U9NTtiV2U9e2NyZWF0ZTp0WXQsY2xvc2U6YVl0LG9uTWVzc2FnZTppWXQscG9zdE1lc3NhZ2U6cll0LGNhbkJlVXNlZDpvWXQsdHlwZTplWXQsYXZlcmFnZVJlc3BvbnNlVGltZTpzWXQsbWljcm9TZWNvbmRzOmdXZX19KTtmdW5jdGlvbiB4USh0KXt2YXIgZT1bXS5jb25jYXQodC5tZXRob2RzLHlXZSkuZmlsdGVyKEJvb2xlYW4pO2lmKHQudHlwZSl7aWYodC50eXBlPT09InNpbXVsYXRlIilyZXR1cm4gYldlO3ZhciBhPWUuZmluZChmdW5jdGlvbihpKXtyZXR1cm4gaS50eXBlPT09dC50eXBlfSk7aWYoYSlyZXR1cm4gYTt0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZC10eXBlICIrdC50eXBlKyIgbm90IGZvdW5kIil9dC53ZWJXb3JrZXJTdXBwb3J0fHwoZT1lLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaS50eXBlIT09ImlkYiJ9KSk7dmFyIHI9ZS5maW5kKGZ1bmN0aW9uKGkpe3JldHVybiBpLmNhbkJlVXNlZCgpfSk7aWYocilyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoIk5vIHVzYWJsZSBtZXRob2QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeSh5V2UubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnR5cGV9KSkpfXZhciB5V2Usd1dlPW4oKCk9PntvV2UoKTtkV2UoKTttV2UoKTt2V2UoKTt5V2U9W2lXZSxjV2UsaFdlXX0pO2Z1bmN0aW9uIGxZdCh0KXt0PVFzKHQpO3ZhciBlPXhRKHQpO3JldHVybiBlLnR5cGU9PT0ibm9kZSI/ZS5jbGVhck5vZGVGb2xkZXIoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KTplV2V9ZnVuY3Rpb24gY1l0KHQpe2JRPXR9ZnVuY3Rpb24gTVdlKHQsZSxhKXt2YXIgcj10Lm1ldGhvZC5taWNyb1NlY29uZHMoKSxpPXt0aW1lOnIsdHlwZTplLGRhdGE6YX0sbz10Ll9wcmVwUD90Ll9wcmVwUDpuYTtyZXR1cm4gby50aGVuKGZ1bmN0aW9uKCl7dmFyIHM9dC5tZXRob2QucG9zdE1lc3NhZ2UodC5fc3RhdGUsaSk7cmV0dXJuIHQuX3VNUC5hZGQocykscy5jYXRjaCgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5fdU1QLmRlbGV0ZShzKX0pLHN9KX1mdW5jdGlvbiBkWXQodCl7dmFyIGU9dC5tZXRob2QuY3JlYXRlKHQubmFtZSx0Lm9wdGlvbnMpO0pqZShlKT8odC5fcHJlcFA9ZSxlLnRoZW4oZnVuY3Rpb24oYSl7dC5fc3RhdGU9YX0pKTp0Ll9zdGF0ZT1lfWZ1bmN0aW9uIHpXZSh0KXtyZXR1cm4gdC5fYWRkRUwubWVzc2FnZS5sZW5ndGg+MHx8dC5fYWRkRUwuaW50ZXJuYWwubGVuZ3RoPjB9ZnVuY3Rpb24ga1dlKHQsZSxhKXt0Ll9hZGRFTFtlXS5wdXNoKGEpLGZZdCh0KX1mdW5jdGlvbiBTV2UodCxlLGEpe3QuX2FkZEVMW2VdPXQuX2FkZEVMW2VdLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gciE9PWF9KSx1WXQodCl9ZnVuY3Rpb24gZll0KHQpe2lmKCF0Ll9pTCYmeldlKHQpKXt2YXIgZT1mdW5jdGlvbihpKXt0Ll9hZGRFTFtpLnR5cGVdLmZvckVhY2goZnVuY3Rpb24obyl7aS50aW1lPj1vLnRpbWUmJm8uZm4oaS5kYXRhKX0pfSxhPXQubWV0aG9kLm1pY3JvU2Vjb25kcygpO3QuX3ByZXBQP3QuX3ByZXBQLnRoZW4oZnVuY3Rpb24oKXt0Ll9pTD0hMCx0Lm1ldGhvZC5vbk1lc3NhZ2UodC5fc3RhdGUsZSxhKX0pOih0Ll9pTD0hMCx0Lm1ldGhvZC5vbk1lc3NhZ2UodC5fc3RhdGUsZSxhKSl9fWZ1bmN0aW9uIHVZdCh0KXtpZih0Ll9pTCYmIXpXZSh0KSl7dC5faUw9ITE7dmFyIGU9dC5tZXRob2QubWljcm9TZWNvbmRzKCk7dC5tZXRob2Qub25NZXNzYWdlKHQuX3N0YXRlLG51bGwsZSl9fXZhciB2USxuWXQsS3MsYlEsQ1dlPW4oKCk9PntObygpO3dXZSgpO0JSKCk7dlE9bmV3IFNldCxuWXQ9MCxLcz1mdW5jdGlvbihlLGEpe3RoaXMuaWQ9bll0KyssdlEuYWRkKHRoaXMpLHRoaXMubmFtZT1lLGJRJiYoYT1iUSksdGhpcy5vcHRpb25zPVFzKGEpLHRoaXMubWV0aG9kPXhRKHRoaXMub3B0aW9ucyksdGhpcy5faUw9ITEsdGhpcy5fb25NTD1udWxsLHRoaXMuX2FkZEVMPXttZXNzYWdlOltdLGludGVybmFsOltdfSx0aGlzLl91TVA9bmV3IFNldCx0aGlzLl9iZWZDPVtdLHRoaXMuX3ByZXBQPW51bGwsZFl0KHRoaXMpfTtLcy5fcHVia2V5PSEwO0tzLnByb3RvdHlwZT17cG9zdE1lc3NhZ2U6ZnVuY3Rpb24oZSl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEVycm9yKCJCcm9hZGNhc3RDaGFubmVsLnBvc3RNZXNzYWdlKCk6IENhbm5vdCBwb3N0IG1lc3NhZ2UgYWZ0ZXIgY2hhbm5lbCBoYXMgY2xvc2VkICIrSlNPTi5zdHJpbmdpZnkoZSkpO3JldHVybiBNV2UodGhpcywibWVzc2FnZSIsZSl9LHBvc3RJbnRlcm5hbDpmdW5jdGlvbihlKXtyZXR1cm4gTVdlKHRoaXMsImludGVybmFsIixlKX0sc2V0IG9ubWVzc2FnZSh0KXt2YXIgZT10aGlzLm1ldGhvZC5taWNyb1NlY29uZHMoKSxhPXt0aW1lOmUsZm46dH07U1dlKHRoaXMsIm1lc3NhZ2UiLHRoaXMuX29uTUwpLHQmJnR5cGVvZiB0PT0iZnVuY3Rpb24iPyh0aGlzLl9vbk1MPWEsa1dlKHRoaXMsIm1lc3NhZ2UiLGEpKTp0aGlzLl9vbk1MPW51bGx9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSxhKXt2YXIgcj10aGlzLm1ldGhvZC5taWNyb1NlY29uZHMoKSxpPXt0aW1lOnIsZm46YX07a1dlKHRoaXMsZSxpKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihlLGEpe3ZhciByPXRoaXMuX2FkZEVMW2VdLmZpbmQoZnVuY3Rpb24oaSl7cmV0dXJuIGkuZm49PT1hfSk7U1dlKHRoaXMsZSxyKX0sY2xvc2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLmNsb3NlZCl7dlEuZGVsZXRlKHRoaXMpLHRoaXMuY2xvc2VkPSEwO3ZhciBhPXRoaXMuX3ByZXBQP3RoaXMuX3ByZXBQOm5hO3JldHVybiB0aGlzLl9vbk1MPW51bGwsdGhpcy5fYWRkRUwubWVzc2FnZT1bXSxhLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShlLl91TVApKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5hbGwoZS5fYmVmQy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIoKX0pKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5tZXRob2QuY2xvc2UoZS5fc3RhdGUpfSl9fSxnZXQgdHlwZSgpe3JldHVybiB0aGlzLm1ldGhvZC50eXBlfSxnZXQgaXNDbG9zZWQoKXtyZXR1cm4gdGhpcy5jbG9zZWR9fX0pO2Z1bmN0aW9uIExXZSh0KXtpZih0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU9PSJmdW5jdGlvbiImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSl7dmFyIGU9c2VsZi5jbG9zZS5iaW5kKHNlbGYpO3NlbGYuY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLGUoKX19ZWxzZXtpZih0eXBlb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXIhPSJmdW5jdGlvbiIpcmV0dXJuO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLGZ1bmN0aW9uKCl7dCgpfSwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsZnVuY3Rpb24oKXt0KCl9LCEwKX19dmFyIFRXZT1uKCgpPT57fSk7ZnVuY3Rpb24gX1dlKHQpe3Byb2Nlc3Mub24oImV4aXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0pLHByb2Nlc3Mub24oImJlZm9yZUV4aXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3MuZXhpdCgpfSl9KSxwcm9jZXNzLm9uKCJTSUdJTlQiLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3MuZXhpdCgpfSl9KSxwcm9jZXNzLm9uKCJ1bmNhdWdodEV4Y2VwdGlvbiIsZnVuY3Rpb24oZSl7cmV0dXJuIHQoKS50aGVuKGZ1bmN0aW9uKCl7Y29uc29sZS50cmFjZShlKSxwcm9jZXNzLmV4aXQoMTAxKX0pfSl9dmFyIEFXZT1uKCgpPT57fSk7ZnVuY3Rpb24gbVl0KCl7JFdlfHwoJFdlPSEwLGhZdChnWXQpKX1mdW5jdGlvbiBEV2UodCl7aWYobVl0KCksdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJMaXN0ZW5lciBpcyBubyBmdW5jdGlvbiIpO0pzLmFkZCh0KTt2YXIgZT17cmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIEpzLmRlbGV0ZSh0KX0scnVuOmZ1bmN0aW9uKCl7cmV0dXJuIEpzLmRlbGV0ZSh0KSx0KCl9fTtyZXR1cm4gZX1mdW5jdGlvbiBnWXQoKXt2YXIgdD1bXTtyZXR1cm4gSnMuZm9yRWFjaChmdW5jdGlvbihlKXt0LnB1c2goZSgpKSxKcy5kZWxldGUoZSl9KSxQcm9taXNlLmFsbCh0KX1mdW5jdGlvbiBZVjEoKXtKcy5jbGVhcigpfWZ1bmN0aW9uIFpWMSgpe3JldHVybiBKcy5zaXplfXZhciBwWXQsaFl0LEpzLCRXZSxFV2U9bigoKT0+e1RXZSgpO0FXZSgpO3BZdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodHlwZW9mIHByb2Nlc3M8InUiP3Byb2Nlc3M6MCk9PT0iW29iamVjdCBwcm9jZXNzXSIsaFl0PXBZdD9fV2U6TFdlLEpzPW5ldyBTZXQsJFdlPSExfSk7ZnVuY3Rpb24geWkodCxlKXt2YXIgYT17Y29udGV4dDoibGVhZGVyIixhY3Rpb246ZSx0b2tlbjp0LnRva2VufTtyZXR1cm4gdC5icm9hZGNhc3RDaGFubmVsLnBvc3RJbnRlcm5hbChhKX1mdW5jdGlvbiBHOCh0KXt0LmlzTGVhZGVyPSEwLHQuX2hhc0xlYWRlcj0hMDt2YXIgZT1EV2UoZnVuY3Rpb24oKXtyZXR1cm4gdC5kaWUoKX0pO3QuX3VubC5wdXNoKGUpO3ZhciBhPWZ1bmN0aW9uKGkpe2kuY29udGV4dD09PSJsZWFkZXIiJiZpLmFjdGlvbj09PSJhcHBseSImJnlpKHQsInRlbGwiKSxpLmNvbnRleHQ9PT0ibGVhZGVyIiYmaS5hY3Rpb249PT0idGVsbCImJiF0Ll9kcExDJiYodC5fZHBMQz0hMCx0Ll9kcEwoKSx5aSh0LCJ0ZWxsIikpfTtyZXR1cm4gdC5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoImludGVybmFsIixhKSx0Ll9sc3Rucy5wdXNoKGEpLHlpKHQsInRlbGwiKX12YXIgSFI9bigoKT0+e0VXZSgpfSk7dmFyIHlRLE5XZT1uKCgpPT57Tm8oKTtIUigpO3lRPWZ1bmN0aW9uKGUsYSl7dmFyIHI9dGhpczt0aGlzLmJyb2FkY2FzdENoYW5uZWw9ZSxlLl9iZWZDLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gci5kaWUoKX0pLHRoaXMuX29wdGlvbnM9YSx0aGlzLmlzTGVhZGVyPSExLHRoaXMuaXNEZWFkPSExLHRoaXMudG9rZW49YmkoKSx0aGlzLl9sc3Rucz1bXSx0aGlzLl91bmw9W10sdGhpcy5fZHBMPWZ1bmN0aW9uKCl7fSx0aGlzLl9kcExDPSExLHRoaXMuX3dLTUM9e30sdGhpcy5sTj0icHVia2V5LWJjfHwiK2UubWV0aG9kLnR5cGUrInx8IitlLm5hbWV9O3lRLnByb3RvdHlwZT17aGFzTGVhZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gbmF2aWdhdG9yLmxvY2tzLnF1ZXJ5KCkudGhlbihmdW5jdGlvbihhKXt2YXIgcj1hLmhlbGQ/YS5oZWxkLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaS5uYW1lPT09ZS5sTn0pOltdO3JldHVybiEhKHImJnIubGVuZ3RoPjApfSl9LGF3YWl0TGVhZGVyc2hpcDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIXRoaXMuX3dMTVApe3RoaXMuX3dLTUMuYz1uZXcgQWJvcnRDb250cm9sbGVyO3ZhciBhPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsaSl7ZS5fd0tNQy5yZXM9cixlLl93S01DLnJlaj1pfSk7dGhpcy5fd0xNUD1uZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe25hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0KGUubE4se3NpZ25hbDplLl93S01DLmMuc2lnbmFsfSxmdW5jdGlvbigpe3JldHVybiBlLl93S01DLmM9dm9pZCAwLEc4KGUpLHIoKSxhfSkuY2F0Y2goZnVuY3Rpb24obyl7ZS5fd0tNQy5yZWomJmUuX3dLTUMucmVqKG8pLGkobyl9KX0pfXJldHVybiB0aGlzLl93TE1QfSxzZXQgb25kdXBsaWNhdGUodCl7fSxkaWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl9sc3Rucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBlLmJyb2FkY2FzdENoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLGEpfSksdGhpcy5fbHN0bnM9W10sdGhpcy5fdW5sLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVtb3ZlKCl9KSx0aGlzLl91bmw9W10sdGhpcy5pc0xlYWRlciYmKHRoaXMuaXNMZWFkZXI9ITEpLHRoaXMuaXNEZWFkPSEwLHRoaXMuX3dLTUMucmVzJiZ0aGlzLl93S01DLnJlcygpLHRoaXMuX3dLTUMuYyYmdGhpcy5fd0tNQy5jLmFib3J0KCJMZWFkZXJFbGVjdGlvbldlYkxvY2suZGllKCkgY2FsbGVkIikseWkodGhpcywiZGVhdGgiKX19fSk7ZnVuY3Rpb24geFl0KHQpe3JldHVybiB0LmlzTGVhZGVyP25hOm5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3ZhciBhPSExO2Z1bmN0aW9uIHIoKXthfHwoYT0hMCx0LmJyb2FkY2FzdENoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLG8pLGUoITApKX10LmFwcGx5T25jZSgpLnRoZW4oZnVuY3Rpb24oKXt0LmlzTGVhZGVyJiZyKCl9KTt2YXIgaT1mdW5jdGlvbigpe3JldHVybiAkcih0Ll9vcHRpb25zLmZhbGxiYWNrSW50ZXJ2YWwpLnRoZW4oZnVuY3Rpb24oKXtpZighKHQuaXNEZWFkfHxhKSlpZih0LmlzTGVhZGVyKXIoKTtlbHNlIHJldHVybiB0LmFwcGx5T25jZSghMCkudGhlbihmdW5jdGlvbigpe3QuaXNMZWFkZXI/cigpOmkoKX0pfSl9O2koKTt2YXIgbz1mdW5jdGlvbihsKXtsLmNvbnRleHQ9PT0ibGVhZGVyIiYmbC5hY3Rpb249PT0iZGVhdGgiJiYodC5faGFzTGVhZGVyPSExLHQuYXBwbHlPbmNlKCkudGhlbihmdW5jdGlvbigpe3QuaXNMZWFkZXImJnIoKX0pKX07dC5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoImludGVybmFsIixvKSx0Ll9sc3Rucy5wdXNoKG8pfSl9ZnVuY3Rpb24gYll0KHQsZSl7cmV0dXJuIHR8fCh0PXt9KSx0PUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpLHQuZmFsbGJhY2tJbnRlcnZhbHx8KHQuZmFsbGJhY2tJbnRlcnZhbD0zZTMpLHQucmVzcG9uc2VUaW1lfHwodC5yZXNwb25zZVRpbWU9ZS5tZXRob2QuYXZlcmFnZVJlc3BvbnNlVGltZShlLm9wdGlvbnMpKSx0fWZ1bmN0aW9uIHZZdCh0LGUpe2lmKHQuX2xlYWRlckVsZWN0b3IpdGhyb3cgbmV3IEVycm9yKCJCcm9hZGNhc3RDaGFubmVsIGFscmVhZHkgaGFzIGEgbGVhZGVyLWVsZWN0b3IiKTtlPWJZdChlLHQpO3ZhciBhPXJXZSgpP25ldyB5USh0LGUpOm5ldyBQV2UodCxlKTtyZXR1cm4gdC5fYmVmQy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGEuZGllKCl9KSx0Ll9sZWFkZXJFbGVjdG9yPWEsYX12YXIgUFdlLElXZT1uKCgpPT57Tm8oKTtIUigpO05XZSgpO1BXZT1mdW5jdGlvbihlLGEpe3ZhciByPXRoaXM7dGhpcy5icm9hZGNhc3RDaGFubmVsPWUsdGhpcy5fb3B0aW9ucz1hLHRoaXMuaXNMZWFkZXI9ITEsdGhpcy5faGFzTGVhZGVyPSExLHRoaXMuaXNEZWFkPSExLHRoaXMudG9rZW49YmkoKSx0aGlzLl9hcGxRPW5hLHRoaXMuX2FwbFFDPTAsdGhpcy5fdW5sPVtdLHRoaXMuX2xzdG5zPVtdLHRoaXMuX2RwTD1mdW5jdGlvbigpe30sdGhpcy5fZHBMQz0hMTt2YXIgaT1mdW5jdGlvbihzKXtzLmNvbnRleHQ9PT0ibGVhZGVyIiYmKHMuYWN0aW9uPT09ImRlYXRoIiYmKHIuX2hhc0xlYWRlcj0hMSkscy5hY3Rpb249PT0idGVsbCImJihyLl9oYXNMZWFkZXI9ITApKX07dGhpcy5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoImludGVybmFsIixpKSx0aGlzLl9sc3Rucy5wdXNoKGkpfTtQV2UucHJvdG90eXBlPXtoYXNMZWFkZXI6ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2hhc0xlYWRlcil9LGFwcGx5T25jZTpmdW5jdGlvbihlKXt2YXIgYT10aGlzO2lmKHRoaXMuaXNMZWFkZXIpcmV0dXJuICRyKDAsITApO2lmKHRoaXMuaXNEZWFkKXJldHVybiAkcigwLCExKTtpZih0aGlzLl9hcGxRQz4xKXJldHVybiB0aGlzLl9hcGxRO3ZhciByPWZ1bmN0aW9uKCl7aWYoYS5pc0xlYWRlcilyZXR1cm4gdFdlO3ZhciBvPSExLHMsbD1uZXcgUHJvbWlzZShmdW5jdGlvbih1KXtzPWZ1bmN0aW9uKCl7bz0hMCx1KCl9fSksZj1mdW5jdGlvbihkKXtkLmNvbnRleHQ9PT0ibGVhZGVyIiYmZC50b2tlbiE9YS50b2tlbiYmKGQuYWN0aW9uPT09ImFwcGx5IiYmZC50b2tlbj5hLnRva2VuJiZzKCksZC5hY3Rpb249PT0idGVsbCImJihzKCksYS5faGFzTGVhZGVyPSEwKSl9O2EuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsZik7dmFyIGM9ZT9hLl9vcHRpb25zLnJlc3BvbnNlVGltZSo0OmEuX29wdGlvbnMucmVzcG9uc2VUaW1lO3JldHVybiB5aShhLCJhcHBseSIpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yYWNlKFskcihjKSxsLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKX0pXSl9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHlpKGEsImFwcGx5Iil9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmFjZShbJHIoYyksbC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcil9KV0pfSkuY2F0Y2goZnVuY3Rpb24oKXt9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGEuYnJvYWRjYXN0Q2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsZiksbz8hMTpHOChhKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KX0pfTtyZXR1cm4gdGhpcy5fYXBsUUM9dGhpcy5fYXBsUUMrMSx0aGlzLl9hcGxRPXRoaXMuX2FwbFEudGhlbihmdW5jdGlvbigpe3JldHVybiByKCl9KS50aGVuKGZ1bmN0aW9uKCl7YS5fYXBsUUM9YS5fYXBsUUMtMX0pLHRoaXMuX2FwbFEudGhlbihmdW5jdGlvbigpe3JldHVybiBhLmlzTGVhZGVyfSl9LGF3YWl0TGVhZGVyc2hpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hTFB8fCh0aGlzLl9hTFA9eFl0KHRoaXMpKSx0aGlzLl9hTFB9LHNldCBvbmR1cGxpY2F0ZSh0KXt0aGlzLl9kcEw9dH0sZGllOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fbHN0bnMuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gZS5icm9hZGNhc3RDaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImludGVybmFsIixhKX0pLHRoaXMuX2xzdG5zPVtdLHRoaXMuX3VubC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBhLnJlbW92ZSgpfSksdGhpcy5fdW5sPVtdLHRoaXMuaXNMZWFkZXImJih0aGlzLl9oYXNMZWFkZXI9ITEsdGhpcy5pc0xlYWRlcj0hMSksdGhpcy5pc0RlYWQ9ITAseWkodGhpcywiZGVhdGgiKX19fSk7dmFyIEZXZT1uKCgpPT57Q1dlKCk7SVdlKCk7SFIoKX0pO3ZhciBPV2U9bigoKT0+e2lpKCk7b08oKTtqOCgpO0ZXZSgpfSk7dmFyIHdRLE1RLEJXZT1uKCgpPT57T1dlKCk7d1E9Z2xvYmFsVGhpcy5Ccm9hZGNhc3RDaGFubmVsO3dRfHwod1E9S3MpO01RPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5icm9hZGNhc3RDaGFubmVsPW5ldyB3USgiZGVlcy1jb21tcyIpLHRoaXMudHlwZWRyb3V0ZXI9bmV3IEYyLlR5cGVkUm91dGVyLHRoaXMudHlwZWR0YXJnZXQ9bmV3IEYyLlR5cGVkVGFyZ2V0KHtwb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyOmFzeW5jIGU9Pnt0aGlzLnBvc3RNZXNzYWdlKGUpfSx0eXBlZFJvdXRlclJlZjp0aGlzLnR5cGVkcm91dGVyfSksdGhpcy5icm9hZGNhc3RDaGFubmVsLm9ubWVzc2FnZT1hc3luYyBlPT57bGV0IGE9ZS5tZXRob2Q/ZTplLmRhdGE7Y29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYSkpO2xldCByPWF3YWl0IHRoaXMudHlwZWRyb3V0ZXIucm91dGVBbmRBZGRSZXNwb25zZShhLHtza2lwSG9va3M6ITB9KTtyJiYhci5lcnJvciYmdGhpcy5wb3N0TWVzc2FnZShyKX19Y3JlYXRlVHlwZWRSZXF1ZXN0KGUpe3JldHVybiBuZXcgRjIuVHlwZWRSZXF1ZXN0KHRoaXMudHlwZWR0YXJnZXQsZSl9YXN5bmMgcG9zdE1lc3NhZ2UoZSl7dGhpcy5icm9hZGNhc3RDaGFubmVsLnBvc3RNZXNzYWdlKGUpfWFzeW5jIGNyZWF0ZVR5cGVkSGFuZGxlcihlLGEpe3RoaXMudHlwZWRyb3V0ZXIuYWRkVHlwZWRIYW5kbGVyKG5ldyBGMi5UeXBlZEhhbmRsZXIoZSxhKSl9fX0pO3ZhciBZOD17fTtldChZOCx7RGVlc0NvbW1zOigpPT5NUX0pO3ZhciBSV2U9bigoKT0+e0JXZSgpfSk7dmFyIHRuPWN0KChwVTEsZW4pPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEhXZSh0KXtyZXR1cm4gdHlwZW9mIHQ+InUifHx0PT09bnVsbH1mdW5jdGlvbiB3WXQodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGx9ZnVuY3Rpb24gTVl0KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6SFdlKHQpP1tdOlt0XX1mdW5jdGlvbiB6WXQodCxlKXt2YXIgYSxyLGksbztpZihlKWZvcihvPU9iamVjdC5rZXlzKGUpLGE9MCxyPW8ubGVuZ3RoO2E8cjthKz0xKWk9b1thXSx0W2ldPWVbaV07cmV0dXJuIHR9ZnVuY3Rpb24ga1l0KHQsZSl7dmFyIGE9IiIscjtmb3Iocj0wO3I8ZTtyKz0xKWErPXQ7cmV0dXJuIGF9ZnVuY3Rpb24gU1l0KHQpe3JldHVybiB0PT09MCYmTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09MS90fWVuLmV4cG9ydHMuaXNOb3RoaW5nPUhXZSxlbi5leHBvcnRzLmlzT2JqZWN0PXdZdCxlbi5leHBvcnRzLnRvQXJyYXk9TVl0LGVuLmV4cG9ydHMucmVwZWF0PWtZdCxlbi5leHBvcnRzLmlzTmVnYXRpdmVaZXJvPVNZdCxlbi5leHBvcnRzLmV4dGVuZD16WXR9KTt2YXIgdTY9Y3QoKGhVMSxxV2UpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIFo4KHQsZSl7RXJyb3IuY2FsbCh0aGlzKSx0aGlzLm5hbWU9IllBTUxFeGNlcHRpb24iLHRoaXMucmVhc29uPXQsdGhpcy5tYXJrPWUsdGhpcy5tZXNzYWdlPSh0aGlzLnJlYXNvbnx8Iih1bmtub3duIHJlYXNvbikiKSsodGhpcy5tYXJrPyIgIit0aGlzLm1hcmsudG9TdHJpbmcoKToiIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrfHwiIn1aOC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLFo4LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1aOCxaOC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIGE9dGhpcy5uYW1lKyI6ICI7cmV0dXJuIGErPXRoaXMucmVhc29ufHwiKHVua25vd24gcmVhc29uKSIsIWUmJnRoaXMubWFyayYmKGErPSIgIit0aGlzLm1hcmsudG9TdHJpbmcoKSksYX0scVdlLmV4cG9ydHM9Wjh9KTt2YXIgaldlPWN0KChtVTEsVVdlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVldlPXRuKCk7ZnVuY3Rpb24gelEodCxlLGEscixpKXt0aGlzLm5hbWU9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMucG9zaXRpb249YSx0aGlzLmxpbmU9cix0aGlzLmNvbHVtbj1pfXpRLnByb3RvdHlwZS5nZXRTbmlwcGV0PWZ1bmN0aW9uKGUsYSl7dmFyIHIsaSxvLHMsbDtpZighdGhpcy5idWZmZXIpcmV0dXJuIG51bGw7Zm9yKGU9ZXx8NCxhPWF8fDc1LHI9IiIsaT10aGlzLnBvc2l0aW9uO2k+MCYmYFwwXHIKXHg4NVx1MjAyOFx1MjAyOWAuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoaS0xKSk9PT0tMTspaWYoaS09MSx0aGlzLnBvc2l0aW9uLWk+YS8yLTEpe3I9IiAuLi4gIixpKz01O2JyZWFrfWZvcihvPSIiLHM9dGhpcy5wb3NpdGlvbjtzPHRoaXMuYnVmZmVyLmxlbmd0aCYmYFwwXHIKXHg4NVx1MjAyOFx1MjAyOWAuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQocykpPT09LTE7KWlmKHMrPTEscy10aGlzLnBvc2l0aW9uPmEvMi0xKXtvPSIgLi4uICIscy09NTticmVha31yZXR1cm4gbD10aGlzLmJ1ZmZlci5zbGljZShpLHMpLFZXZS5yZXBlYXQoIiAiLGUpK3IrbCtvK2AKYCtWV2UucmVwZWF0KCIgIixlK3RoaXMucG9zaXRpb24taStyLmxlbmd0aCkrIl4ifSx6US5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIGEscj0iIjtyZXR1cm4gdGhpcy5uYW1lJiYocis9J2luICInK3RoaXMubmFtZSsnIiAnKSxyKz0iYXQgbGluZSAiKyh0aGlzLmxpbmUrMSkrIiwgY29sdW1uICIrKHRoaXMuY29sdW1uKzEpLGV8fChhPXRoaXMuZ2V0U25pcHBldCgpLGEmJihyKz1gOgpgK2EpKSxyfSxVV2UuZXhwb3J0cz16UX0pO3ZhciBSMT1jdCgoZ1UxLEdXZSk9PnsidXNlIHN0cmljdCI7dmFyIFdXZT11NigpLENZdD1bImtpbmQiLCJyZXNvbHZlIiwiY29uc3RydWN0IiwiaW5zdGFuY2VPZiIsInByZWRpY2F0ZSIsInJlcHJlc2VudCIsImRlZmF1bHRTdHlsZSIsInN0eWxlQWxpYXNlcyJdLExZdD1bInNjYWxhciIsInNlcXVlbmNlIiwibWFwcGluZyJdO2Z1bmN0aW9uIFRZdCh0KXt2YXIgZT17fTtyZXR1cm4gdCE9PW51bGwmJk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oYSl7dFthXS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2VbU3RyaW5nKHIpXT1hfSl9KSxlfWZ1bmN0aW9uIF9ZdCh0LGUpe2lmKGU9ZXx8e30sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihhKXtpZihDWXQuaW5kZXhPZihhKT09PS0xKXRocm93IG5ldyBXV2UoJ1Vua25vd24gb3B0aW9uICInK2ErJyIgaXMgbWV0IGluIGRlZmluaXRpb24gb2YgIicrdCsnIiBZQU1MIHR5cGUuJyl9KSx0aGlzLnRhZz10LHRoaXMua2luZD1lLmtpbmR8fG51bGwsdGhpcy5yZXNvbHZlPWUucmVzb2x2ZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdGhpcy5jb25zdHJ1Y3Q9ZS5jb25zdHJ1Y3R8fGZ1bmN0aW9uKGEpe3JldHVybiBhfSx0aGlzLmluc3RhbmNlT2Y9ZS5pbnN0YW5jZU9mfHxudWxsLHRoaXMucHJlZGljYXRlPWUucHJlZGljYXRlfHxudWxsLHRoaXMucmVwcmVzZW50PWUucmVwcmVzZW50fHxudWxsLHRoaXMuZGVmYXVsdFN0eWxlPWUuZGVmYXVsdFN0eWxlfHxudWxsLHRoaXMuc3R5bGVBbGlhc2VzPVRZdChlLnN0eWxlQWxpYXNlc3x8bnVsbCksTFl0LmluZGV4T2YodGhpcy5raW5kKT09PS0xKXRocm93IG5ldyBXV2UoJ1Vua25vd24ga2luZCAiJyt0aGlzLmtpbmQrJyIgaXMgc3BlY2lmaWVkIGZvciAiJyt0KyciIFlBTUwgdHlwZS4nKX1HV2UuZXhwb3J0cz1fWXR9KTt2YXIgYW49Y3QoKHhVMSxaV2UpPT57InVzZSBzdHJpY3QiO3ZhciBZV2U9dG4oKSxxUj11NigpLEFZdD1SMSgpO2Z1bmN0aW9uIGtRKHQsZSxhKXt2YXIgcj1bXTtyZXR1cm4gdC5pbmNsdWRlLmZvckVhY2goZnVuY3Rpb24oaSl7YT1rUShpLGUsYSl9KSx0W2VdLmZvckVhY2goZnVuY3Rpb24oaSl7YS5mb3JFYWNoKGZ1bmN0aW9uKG8scyl7by50YWc9PT1pLnRhZyYmby5raW5kPT09aS5raW5kJiZyLnB1c2gocyl9KSxhLnB1c2goaSl9KSxhLmZpbHRlcihmdW5jdGlvbihpLG8pe3JldHVybiByLmluZGV4T2Yobyk9PT0tMX0pfWZ1bmN0aW9uICRZdCgpe3ZhciB0PXtzY2FsYXI6e30sc2VxdWVuY2U6e30sbWFwcGluZzp7fSxmYWxsYmFjazp7fX0sZSxhO2Z1bmN0aW9uIHIoaSl7dFtpLmtpbmRdW2kudGFnXT10LmZhbGxiYWNrW2kudGFnXT1pfWZvcihlPTAsYT1hcmd1bWVudHMubGVuZ3RoO2U8YTtlKz0xKWFyZ3VtZW50c1tlXS5mb3JFYWNoKHIpO3JldHVybiB0fWZ1bmN0aW9uIHA2KHQpe3RoaXMuaW5jbHVkZT10LmluY2x1ZGV8fFtdLHRoaXMuaW1wbGljaXQ9dC5pbXBsaWNpdHx8W10sdGhpcy5leHBsaWNpdD10LmV4cGxpY2l0fHxbXSx0aGlzLmltcGxpY2l0LmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5sb2FkS2luZCYmZS5sb2FkS2luZCE9PSJzY2FsYXIiKXRocm93IG5ldyBxUigiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuIil9KSx0aGlzLmNvbXBpbGVkSW1wbGljaXQ9a1EodGhpcywiaW1wbGljaXQiLFtdKSx0aGlzLmNvbXBpbGVkRXhwbGljaXQ9a1EodGhpcywiZXhwbGljaXQiLFtdKSx0aGlzLmNvbXBpbGVkVHlwZU1hcD0kWXQodGhpcy5jb21waWxlZEltcGxpY2l0LHRoaXMuY29tcGlsZWRFeHBsaWNpdCl9cDYuREVGQVVMVD1udWxsLHA2LmNyZWF0ZT1mdW5jdGlvbigpe3ZhciBlLGE7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTplPXA2LkRFRkFVTFQsYT1hcmd1bWVudHNbMF07YnJlYWs7Y2FzZSAyOmU9YXJndW1lbnRzWzBdLGE9YXJndW1lbnRzWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHFSKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBTY2hlbWEuY3JlYXRlIGZ1bmN0aW9uIil9aWYoZT1ZV2UudG9BcnJheShlKSxhPVlXZS50b0FycmF5KGEpLCFlLmV2ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiByIGluc3RhbmNlb2YgcDZ9KSl0aHJvdyBuZXcgcVIoIlNwZWNpZmllZCBsaXN0IG9mIHN1cGVyIHNjaGVtYXMgKG9yIGEgc2luZ2xlIFNjaGVtYSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVNjaGVtYSBvYmplY3QuIik7aWYoIWEuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBBWXR9KSl0aHJvdyBuZXcgcVIoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKTtyZXR1cm4gbmV3IHA2KHtpbmNsdWRlOmUsZXhwbGljaXQ6YX0pfSxaV2UuZXhwb3J0cz1wNn0pO3ZhciBRV2U9Y3QoKGJVMSxYV2UpPT57InVzZSBzdHJpY3QiO3ZhciBEWXQ9UjEoKTtYV2UuZXhwb3J0cz1uZXcgRFl0KCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLHtraW5kOiJzY2FsYXIiLGNvbnN0cnVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PW51bGw/dDoiIn19KX0pO3ZhciBKV2U9Y3QoKHZVMSxLV2UpPT57InVzZSBzdHJpY3QiO3ZhciBFWXQ9UjEoKTtLV2UuZXhwb3J0cz1uZXcgRVl0KCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXEiLHtraW5kOiJzZXF1ZW5jZSIsY29uc3RydWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0IT09bnVsbD90OltdfX0pfSk7dmFyIHRHZT1jdCgoeVUxLGVHZSk9PnsidXNlIHN0cmljdCI7dmFyIE5ZdD1SMSgpO2VHZS5leHBvcnRzPW5ldyBOWXQoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIse2tpbmQ6Im1hcHBpbmciLGNvbnN0cnVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PW51bGw/dDp7fX19KX0pO3ZhciBWUj1jdCgod1UxLGFHZSk9PnsidXNlIHN0cmljdCI7dmFyIFBZdD1hbigpO2FHZS5leHBvcnRzPW5ldyBQWXQoe2V4cGxpY2l0OltRV2UoKSxKV2UoKSx0R2UoKV19KX0pO3ZhciBpR2U9Y3QoKE1VMSxyR2UpPT57InVzZSBzdHJpY3QiO3ZhciBJWXQ9UjEoKTtmdW5jdGlvbiBGWXQodCl7aWYodD09PW51bGwpcmV0dXJuITA7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU9PT0xJiZ0PT09In4ifHxlPT09NCYmKHQ9PT0ibnVsbCJ8fHQ9PT0iTnVsbCJ8fHQ9PT0iTlVMTCIpfWZ1bmN0aW9uIE9ZdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIEJZdCh0KXtyZXR1cm4gdD09PW51bGx9ckdlLmV4cG9ydHM9bmV3IElZdCgidGFnOnlhbWwub3JnLDIwMDI6bnVsbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpGWXQsY29uc3RydWN0Ok9ZdCxwcmVkaWNhdGU6Qll0LHJlcHJlc2VudDp7Y2Fub25pY2FsOmZ1bmN0aW9uKCl7cmV0dXJuIn4ifSxsb3dlcmNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4ibnVsbCJ9LHVwcGVyY2FzZTpmdW5jdGlvbigpe3JldHVybiJOVUxMIn0sY2FtZWxjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIk51bGwifX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSl9KTt2YXIgc0dlPWN0KCh6VTEsb0dlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUll0PVIxKCk7ZnVuY3Rpb24gSFl0KHQpe2lmKHQ9PT1udWxsKXJldHVybiExO3ZhciBlPXQubGVuZ3RoO3JldHVybiBlPT09NCYmKHQ9PT0idHJ1ZSJ8fHQ9PT0iVHJ1ZSJ8fHQ9PT0iVFJVRSIpfHxlPT09NSYmKHQ9PT0iZmFsc2UifHx0PT09IkZhbHNlInx8dD09PSJGQUxTRSIpfWZ1bmN0aW9uIHFZdCh0KXtyZXR1cm4gdD09PSJ0cnVlInx8dD09PSJUcnVlInx8dD09PSJUUlVFIn1mdW5jdGlvbiBWWXQodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IEJvb2xlYW5dIn1vR2UuZXhwb3J0cz1uZXcgUll0KCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sIix7a2luZDoic2NhbGFyIixyZXNvbHZlOkhZdCxjb25zdHJ1Y3Q6cVl0LHByZWRpY2F0ZTpWWXQscmVwcmVzZW50Ontsb3dlcmNhc2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/InRydWUiOiJmYWxzZSJ9LHVwcGVyY2FzZTpmdW5jdGlvbih0KXtyZXR1cm4gdD8iVFJVRSI6IkZBTFNFIn0sY2FtZWxjYXNlOmZ1bmN0aW9uKHQpe3JldHVybiB0PyJUcnVlIjoiRmFsc2UifX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSl9KTt2YXIgbEdlPWN0KChrVTEsbkdlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVVl0PXRuKCksall0PVIxKCk7ZnVuY3Rpb24gV1l0KHQpe3JldHVybiA0ODw9dCYmdDw9NTd8fDY1PD10JiZ0PD03MHx8OTc8PXQmJnQ8PTEwMn1mdW5jdGlvbiBHWXQodCl7cmV0dXJuIDQ4PD10JiZ0PD01NX1mdW5jdGlvbiBZWXQodCl7cmV0dXJuIDQ4PD10JiZ0PD01N31mdW5jdGlvbiBaWXQodCl7aWYodD09PW51bGwpcmV0dXJuITE7dmFyIGU9dC5sZW5ndGgsYT0wLHI9ITEsaTtpZighZSlyZXR1cm4hMTtpZihpPXRbYV0sKGk9PT0iLSJ8fGk9PT0iKyIpJiYoaT10WysrYV0pLGk9PT0iMCIpe2lmKGErMT09PWUpcmV0dXJuITA7aWYoaT10WysrYV0saT09PSJiIil7Zm9yKGErKzthPGU7YSsrKWlmKGk9dFthXSxpIT09Il8iKXtpZihpIT09IjAiJiZpIT09IjEiKXJldHVybiExO3I9ITB9cmV0dXJuIHImJmkhPT0iXyJ9aWYoaT09PSJ4Iil7Zm9yKGErKzthPGU7YSsrKWlmKGk9dFthXSxpIT09Il8iKXtpZighV1l0KHQuY2hhckNvZGVBdChhKSkpcmV0dXJuITE7cj0hMH1yZXR1cm4gciYmaSE9PSJfIn1mb3IoO2E8ZTthKyspaWYoaT10W2FdLGkhPT0iXyIpe2lmKCFHWXQodC5jaGFyQ29kZUF0KGEpKSlyZXR1cm4hMTtyPSEwfXJldHVybiByJiZpIT09Il8ifWlmKGk9PT0iXyIpcmV0dXJuITE7Zm9yKDthPGU7YSsrKWlmKGk9dFthXSxpIT09Il8iKXtpZihpPT09IjoiKWJyZWFrO2lmKCFZWXQodC5jaGFyQ29kZUF0KGEpKSlyZXR1cm4hMTtyPSEwfXJldHVybiFyfHxpPT09Il8iPyExOmkhPT0iOiI/ITA6L14oOlswLTVdP1swLTldKSskLy50ZXN0KHQuc2xpY2UoYSkpfWZ1bmN0aW9uIFhZdCh0KXt2YXIgZT10LGE9MSxyLGksbz1bXTtyZXR1cm4gZS5pbmRleE9mKCJfIikhPT0tMSYmKGU9ZS5yZXBsYWNlKC9fL2csIiIpKSxyPWVbMF0sKHI9PT0iLSJ8fHI9PT0iKyIpJiYocj09PSItIiYmKGE9LTEpLGU9ZS5zbGljZSgxKSxyPWVbMF0pLGU9PT0iMCI/MDpyPT09IjAiP2VbMV09PT0iYiI/YSpwYXJzZUludChlLnNsaWNlKDIpLDIpOmVbMV09PT0ieCI/YSpwYXJzZUludChlLDE2KTphKnBhcnNlSW50KGUsOCk6ZS5pbmRleE9mKCI6IikhPT0tMT8oZS5zcGxpdCgiOiIpLmZvckVhY2goZnVuY3Rpb24ocyl7by51bnNoaWZ0KHBhcnNlSW50KHMsMTApKX0pLGU9MCxpPTEsby5mb3JFYWNoKGZ1bmN0aW9uKHMpe2UrPXMqaSxpKj02MH0pLGEqZSk6YSpwYXJzZUludChlLDEwKX1mdW5jdGlvbiBRWXQodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IE51bWJlcl0iJiZ0JTE9PT0wJiYhVVl0LmlzTmVnYXRpdmVaZXJvKHQpfW5HZS5leHBvcnRzPW5ldyBqWXQoInRhZzp5YW1sLm9yZywyMDAyOmludCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpaWXQsY29uc3RydWN0OlhZdCxwcmVkaWNhdGU6UVl0LHJlcHJlc2VudDp7YmluYXJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wPyIwYiIrdC50b1N0cmluZygyKToiLTBiIit0LnRvU3RyaW5nKDIpLnNsaWNlKDEpfSxvY3RhbDpmdW5jdGlvbih0KXtyZXR1cm4gdD49MD8iMCIrdC50b1N0cmluZyg4KToiLTAiK3QudG9TdHJpbmcoOCkuc2xpY2UoMSl9LGRlY2ltYWw6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTApfSxoZXhhZGVjaW1hbDpmdW5jdGlvbih0KXtyZXR1cm4gdD49MD8iMHgiK3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6Ii0weCIrdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKX19LGRlZmF1bHRTdHlsZToiZGVjaW1hbCIsc3R5bGVBbGlhc2VzOntiaW5hcnk6WzIsImJpbiJdLG9jdGFsOls4LCJvY3QiXSxkZWNpbWFsOlsxMCwiZGVjIl0saGV4YWRlY2ltYWw6WzE2LCJoZXgiXX19KX0pO3ZhciBmR2U9Y3QoKFNVMSxkR2UpPT57InVzZSBzdHJpY3QiO3ZhciBjR2U9dG4oKSxLWXQ9UjEoKSxKWXQ9bmV3IFJlZ0V4cCgiXig/OlstK10/KD86MHxbMS05XVswLTlfXSopKD86XFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXC5bMC05X10qfFstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLig/Om5hbnxOYU58TkFOKSkkIik7ZnVuY3Rpb24gZVp0KHQpe3JldHVybiEodD09PW51bGx8fCFKWXQudGVzdCh0KXx8dFt0Lmxlbmd0aC0xXT09PSJfIil9ZnVuY3Rpb24gdFp0KHQpe3ZhciBlLGEscixpO3JldHVybiBlPXQucmVwbGFjZSgvXy9nLCIiKS50b0xvd2VyQ2FzZSgpLGE9ZVswXT09PSItIj8tMToxLGk9W10sIistIi5pbmRleE9mKGVbMF0pPj0wJiYoZT1lLnNsaWNlKDEpKSxlPT09Ii5pbmYiP2E9PT0xP051bWJlci5QT1NJVElWRV9JTkZJTklUWTpOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6ZT09PSIubmFuIj9OYU46ZS5pbmRleE9mKCI6Iik+PTA/KGUuc3BsaXQoIjoiKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2kudW5zaGlmdChwYXJzZUZsb2F0KG8sMTApKX0pLGU9MCxyPTEsaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2UrPW8qcixyKj02MH0pLGEqZSk6YSpwYXJzZUZsb2F0KGUsMTApfXZhciBhWnQ9L15bLStdP1swLTldK2UvO2Z1bmN0aW9uIHJadCh0LGUpe3ZhciBhO2lmKGlzTmFOKHQpKXN3aXRjaChlKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5uYW4iO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLk5BTiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuTmFOIn1lbHNlIGlmKE51bWJlci5QT1NJVElWRV9JTkZJTklUWT09PXQpc3dpdGNoKGUpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5JbmYifWVsc2UgaWYoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09dClzd2l0Y2goZSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiItLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiItLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiItLkluZiJ9ZWxzZSBpZihjR2UuaXNOZWdhdGl2ZVplcm8odCkpcmV0dXJuIi0wLjAiO3JldHVybiBhPXQudG9TdHJpbmcoMTApLGFadC50ZXN0KGEpP2EucmVwbGFjZSgiZSIsIi5lIik6YX1mdW5jdGlvbiBpWnQodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IE51bWJlcl0iJiYodCUxIT09MHx8Y0dlLmlzTmVnYXRpdmVaZXJvKHQpKX1kR2UuZXhwb3J0cz1uZXcgS1l0KCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTplWnQsY29uc3RydWN0OnRadCxwcmVkaWNhdGU6aVp0LHJlcHJlc2VudDpyWnQsZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSl9KTt2YXIgU1E9Y3QoKENVMSx1R2UpPT57InVzZSBzdHJpY3QiO3ZhciBvWnQ9YW4oKTt1R2UuZXhwb3J0cz1uZXcgb1p0KHtpbmNsdWRlOltWUigpXSxpbXBsaWNpdDpbaUdlKCksc0dlKCksbEdlKCksZkdlKCldfSl9KTt2YXIgQ1E9Y3QoKExVMSxwR2UpPT57InVzZSBzdHJpY3QiO3ZhciBzWnQ9YW4oKTtwR2UuZXhwb3J0cz1uZXcgc1p0KHtpbmNsdWRlOltTUSgpXX0pfSk7dmFyIHhHZT1jdCgoVFUxLGdHZSk9PnsidXNlIHN0cmljdCI7dmFyIG5adD1SMSgpLGhHZT1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XSktKFswLTldWzAtOV0pJCIpLG1HZT1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFx0XSspKFswLTldWzAtOV0/KTooWzAtOV1bMC05XSk6KFswLTldWzAtOV0pKD86XFwuKFswLTldKikpPyg/OlsgXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JCIpO2Z1bmN0aW9uIGxadCh0KXtyZXR1cm4gdD09PW51bGw/ITE6aEdlLmV4ZWModCkhPT1udWxsfHxtR2UuZXhlYyh0KSE9PW51bGx9ZnVuY3Rpb24gY1p0KHQpe3ZhciBlLGEscixpLG8scyxsLGY9MCxjPW51bGwsdSxkLGg7aWYoZT1oR2UuZXhlYyh0KSxlPT09bnVsbCYmKGU9bUdlLmV4ZWModCkpLGU9PT1udWxsKXRocm93IG5ldyBFcnJvcigiRGF0ZSByZXNvbHZlIGVycm9yIik7aWYoYT0rZVsxXSxyPStlWzJdLTEsaT0rZVszXSwhZVs0XSlyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoYSxyLGkpKTtpZihvPStlWzRdLHM9K2VbNV0sbD0rZVs2XSxlWzddKXtmb3IoZj1lWzddLnNsaWNlKDAsMyk7Zi5sZW5ndGg8MzspZis9IjAiO2Y9K2Z9cmV0dXJuIGVbOV0mJih1PStlWzEwXSxkPSsoZVsxMV18fDApLGM9KHUqNjArZCkqNmU0LGVbOV09PT0iLSImJihjPS1jKSksaD1uZXcgRGF0ZShEYXRlLlVUQyhhLHIsaSxvLHMsbCxmKSksYyYmaC5zZXRUaW1lKGguZ2V0VGltZSgpLWMpLGh9ZnVuY3Rpb24gZFp0KHQpe3JldHVybiB0LnRvSVNPU3RyaW5nKCl9Z0dlLmV4cG9ydHM9bmV3IG5adCgidGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wIix7a2luZDoic2NhbGFyIixyZXNvbHZlOmxadCxjb25zdHJ1Y3Q6Y1p0LGluc3RhbmNlT2Y6RGF0ZSxyZXByZXNlbnQ6ZFp0fSl9KTt2YXIgdkdlPWN0KChfVTEsYkdlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZlp0PVIxKCk7ZnVuY3Rpb24gdVp0KHQpe3JldHVybiB0PT09Ijw8Inx8dD09PW51bGx9YkdlLmV4cG9ydHM9bmV3IGZadCgidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6dVp0fSl9KTt2YXIgTUdlPWN0KChBVTEsd0dlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcm47dHJ5e3lHZT1aSSxybj15R2UoImJ1ZmZlciIpLkJ1ZmZlcn1jYXRjaHt9dmFyIHBadD1SMSgpLExRPWBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPQpccmA7ZnVuY3Rpb24gaFp0KHQpe2lmKHQ9PT1udWxsKXJldHVybiExO3ZhciBlLGEscj0wLGk9dC5sZW5ndGgsbz1MUTtmb3IoYT0wO2E8aTthKyspaWYoZT1vLmluZGV4T2YodC5jaGFyQXQoYSkpLCEoZT42NCkpe2lmKGU8MClyZXR1cm4hMTtyKz02fXJldHVybiByJTg9PT0wfWZ1bmN0aW9uIG1adCh0KXt2YXIgZSxhLHI9dC5yZXBsYWNlKC9bXHJcbj1dL2csIiIpLGk9ci5sZW5ndGgsbz1MUSxzPTAsbD1bXTtmb3IoZT0wO2U8aTtlKyspZSU0PT09MCYmZSYmKGwucHVzaChzPj4xNiYyNTUpLGwucHVzaChzPj44JjI1NSksbC5wdXNoKHMmMjU1KSkscz1zPDw2fG8uaW5kZXhPZihyLmNoYXJBdChlKSk7cmV0dXJuIGE9aSU0KjYsYT09PTA/KGwucHVzaChzPj4xNiYyNTUpLGwucHVzaChzPj44JjI1NSksbC5wdXNoKHMmMjU1KSk6YT09PTE4PyhsLnB1c2gocz4+MTAmMjU1KSxsLnB1c2gocz4+MiYyNTUpKTphPT09MTImJmwucHVzaChzPj40JjI1NSkscm4/cm4uZnJvbT9ybi5mcm9tKGwpOm5ldyBybihsKTpsfWZ1bmN0aW9uIGdadCh0KXt2YXIgZT0iIixhPTAscixpLG89dC5sZW5ndGgscz1MUTtmb3Iocj0wO3I8bztyKyspciUzPT09MCYmciYmKGUrPXNbYT4+MTgmNjNdLGUrPXNbYT4+MTImNjNdLGUrPXNbYT4+NiY2M10sZSs9c1thJjYzXSksYT0oYTw8OCkrdFtyXTtyZXR1cm4gaT1vJTMsaT09PTA/KGUrPXNbYT4+MTgmNjNdLGUrPXNbYT4+MTImNjNdLGUrPXNbYT4+NiY2M10sZSs9c1thJjYzXSk6aT09PTI/KGUrPXNbYT4+MTAmNjNdLGUrPXNbYT4+NCY2M10sZSs9c1thPDwyJjYzXSxlKz1zWzY0XSk6aT09PTEmJihlKz1zW2E+PjImNjNdLGUrPXNbYTw8NCY2M10sZSs9c1s2NF0sZSs9c1s2NF0pLGV9ZnVuY3Rpb24geFp0KHQpe3JldHVybiBybiYmcm4uaXNCdWZmZXIodCl9d0dlLmV4cG9ydHM9bmV3IHBadCgidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOmhadCxjb25zdHJ1Y3Q6bVp0LHByZWRpY2F0ZTp4WnQscmVwcmVzZW50OmdadH0pO3ZhciB5R2V9KTt2YXIga0dlPWN0KChEVTEsekdlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYlp0PVIxKCksdlp0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkseVp0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gd1p0KHQpe2lmKHQ9PT1udWxsKXJldHVybiEwO3ZhciBlPVtdLGEscixpLG8scyxsPXQ7Zm9yKGE9MCxyPWwubGVuZ3RoO2E8cjthKz0xKXtpZihpPWxbYV0scz0hMSx5WnQuY2FsbChpKSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO2ZvcihvIGluIGkpaWYodlp0LmNhbGwoaSxvKSlpZighcylzPSEwO2Vsc2UgcmV0dXJuITE7aWYoIXMpcmV0dXJuITE7aWYoZS5pbmRleE9mKG8pPT09LTEpZS5wdXNoKG8pO2Vsc2UgcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTVp0KHQpe3JldHVybiB0IT09bnVsbD90OltdfXpHZS5leHBvcnRzPW5ldyBiWnQoInRhZzp5YW1sLm9yZywyMDAyOm9tYXAiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTp3WnQsY29uc3RydWN0Ok1adH0pfSk7dmFyIENHZT1jdCgoRVUxLFNHZSk9PnsidXNlIHN0cmljdCI7dmFyIHpadD1SMSgpLGtadD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIFNadCh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZSxhLHIsaSxvLHM9dDtmb3Iobz1uZXcgQXJyYXkocy5sZW5ndGgpLGU9MCxhPXMubGVuZ3RoO2U8YTtlKz0xKXtpZihyPXNbZV0sa1p0LmNhbGwocikhPT0iW29iamVjdCBPYmplY3RdInx8KGk9T2JqZWN0LmtleXMociksaS5sZW5ndGghPT0xKSlyZXR1cm4hMTtvW2VdPVtpWzBdLHJbaVswXV1dfXJldHVybiEwfWZ1bmN0aW9uIENadCh0KXtpZih0PT09bnVsbClyZXR1cm5bXTt2YXIgZSxhLHIsaSxvLHM9dDtmb3Iobz1uZXcgQXJyYXkocy5sZW5ndGgpLGU9MCxhPXMubGVuZ3RoO2U8YTtlKz0xKXI9c1tlXSxpPU9iamVjdC5rZXlzKHIpLG9bZV09W2lbMF0scltpWzBdXV07cmV0dXJuIG99U0dlLmV4cG9ydHM9bmV3IHpadCgidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTpTWnQsY29uc3RydWN0OkNadH0pfSk7dmFyIFRHZT1jdCgoTlUxLExHZSk9PnsidXNlIHN0cmljdCI7dmFyIExadD1SMSgpLFRadD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIF9adCh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZSxhPXQ7Zm9yKGUgaW4gYSlpZihUWnQuY2FsbChhLGUpJiZhW2VdIT09bnVsbClyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBBWnQodCl7cmV0dXJuIHQhPT1udWxsP3Q6e319TEdlLmV4cG9ydHM9bmV3IExadCgidGFnOnlhbWwub3JnLDIwMDI6c2V0Iix7a2luZDoibWFwcGluZyIscmVzb2x2ZTpfWnQsY29uc3RydWN0OkFadH0pfSk7dmFyIGg2PWN0KChQVTEsX0dlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgJFp0PWFuKCk7X0dlLmV4cG9ydHM9bmV3ICRadCh7aW5jbHVkZTpbQ1EoKV0saW1wbGljaXQ6W3hHZSgpLHZHZSgpXSxleHBsaWNpdDpbTUdlKCksa0dlKCksQ0dlKCksVEdlKCldfSl9KTt2YXIgJEdlPWN0KChJVTEsQUdlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRFp0PVIxKCk7ZnVuY3Rpb24gRVp0KCl7cmV0dXJuITB9ZnVuY3Rpb24gTlp0KCl7fWZ1bmN0aW9uIFBadCgpe3JldHVybiIifWZ1bmN0aW9uIEladCh0KXtyZXR1cm4gdHlwZW9mIHQ+InUifUFHZS5leHBvcnRzPW5ldyBEWnQoInRhZzp5YW1sLm9yZywyMDAyOmpzL3VuZGVmaW5lZCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpFWnQsY29uc3RydWN0Ok5adCxwcmVkaWNhdGU6SVp0LHJlcHJlc2VudDpQWnR9KX0pO3ZhciBFR2U9Y3QoKEZVMSxER2UpPT57InVzZSBzdHJpY3QiO3ZhciBGWnQ9UjEoKTtmdW5jdGlvbiBPWnQodCl7aWYodD09PW51bGx8fHQubGVuZ3RoPT09MClyZXR1cm4hMTt2YXIgZT10LGE9L1wvKFtnaW1dKikkLy5leGVjKHQpLHI9IiI7cmV0dXJuIShlWzBdPT09Ii8iJiYoYSYmKHI9YVsxXSksci5sZW5ndGg+M3x8ZVtlLmxlbmd0aC1yLmxlbmd0aC0xXSE9PSIvIikpfWZ1bmN0aW9uIEJadCh0KXt2YXIgZT10LGE9L1wvKFtnaW1dKikkLy5leGVjKHQpLHI9IiI7cmV0dXJuIGVbMF09PT0iLyImJihhJiYocj1hWzFdKSxlPWUuc2xpY2UoMSxlLmxlbmd0aC1yLmxlbmd0aC0xKSksbmV3IFJlZ0V4cChlLHIpfWZ1bmN0aW9uIFJadCh0KXt2YXIgZT0iLyIrdC5zb3VyY2UrIi8iO3JldHVybiB0Lmdsb2JhbCYmKGUrPSJnIiksdC5tdWx0aWxpbmUmJihlKz0ibSIpLHQuaWdub3JlQ2FzZSYmKGUrPSJpIiksZX1mdW5jdGlvbiBIWnQodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IFJlZ0V4cF0ifURHZS5leHBvcnRzPW5ldyBGWnQoInRhZzp5YW1sLm9yZywyMDAyOmpzL3JlZ2V4cCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpPWnQsY29uc3RydWN0OkJadCxwcmVkaWNhdGU6SFp0LHJlcHJlc2VudDpSWnR9KX0pO3ZhciBJR2U9Y3QoKE9VMSxQR2UpPT57InVzZSBzdHJpY3QiO3ZhciBVUjt0cnl7TkdlPVpJLFVSPU5HZSgiZXNwcmltYSIpfWNhdGNoe3R5cGVvZiB3aW5kb3c8InUiJiYoVVI9d2luZG93LmVzcHJpbWEpfXZhciBxWnQ9UjEoKTtmdW5jdGlvbiBWWnQodCl7aWYodD09PW51bGwpcmV0dXJuITE7dHJ5e3ZhciBlPSIoIit0KyIpIixhPVVSLnBhcnNlKGUse3JhbmdlOiEwfSk7cmV0dXJuIShhLnR5cGUhPT0iUHJvZ3JhbSJ8fGEuYm9keS5sZW5ndGghPT0xfHxhLmJvZHlbMF0udHlwZSE9PSJFeHByZXNzaW9uU3RhdGVtZW50Inx8YS5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSE9PSJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiImJmEuYm9keVswXS5leHByZXNzaW9uLnR5cGUhPT0iRnVuY3Rpb25FeHByZXNzaW9uIil9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIFVadCh0KXt2YXIgZT0iKCIrdCsiKSIsYT1VUi5wYXJzZShlLHtyYW5nZTohMH0pLHI9W10saTtpZihhLnR5cGUhPT0iUHJvZ3JhbSJ8fGEuYm9keS5sZW5ndGghPT0xfHxhLmJvZHlbMF0udHlwZSE9PSJFeHByZXNzaW9uU3RhdGVtZW50Inx8YS5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSE9PSJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiImJmEuYm9keVswXS5leHByZXNzaW9uLnR5cGUhPT0iRnVuY3Rpb25FeHByZXNzaW9uIil0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byByZXNvbHZlIGZ1bmN0aW9uIik7cmV0dXJuIGEuYm9keVswXS5leHByZXNzaW9uLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe3IucHVzaChvLm5hbWUpfSksaT1hLmJvZHlbMF0uZXhwcmVzc2lvbi5ib2R5LnJhbmdlLGEuYm9keVswXS5leHByZXNzaW9uLmJvZHkudHlwZT09PSJCbG9ja1N0YXRlbWVudCI/bmV3IEZ1bmN0aW9uKHIsZS5zbGljZShpWzBdKzEsaVsxXS0xKSk6bmV3IEZ1bmN0aW9uKHIsInJldHVybiAiK2Uuc2xpY2UoaVswXSxpWzFdKSl9ZnVuY3Rpb24galp0KHQpe3JldHVybiB0LnRvU3RyaW5nKCl9ZnVuY3Rpb24gV1p0KHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBGdW5jdGlvbl0ifVBHZS5leHBvcnRzPW5ldyBxWnQoInRhZzp5YW1sLm9yZywyMDAyOmpzL2Z1bmN0aW9uIix7a2luZDoic2NhbGFyIixyZXNvbHZlOlZadCxjb25zdHJ1Y3Q6VVp0LHByZWRpY2F0ZTpXWnQscmVwcmVzZW50OmpadH0pO3ZhciBOR2V9KTt2YXIgWDg9Y3QoKFJVMSxPR2UpPT57InVzZSBzdHJpY3QiO3ZhciBGR2U9YW4oKTtPR2UuZXhwb3J0cz1GR2UuREVGQVVMVD1uZXcgRkdlKHtpbmNsdWRlOltoNigpXSxleHBsaWNpdDpbJEdlKCksRUdlKCksSUdlKCldfSl9KTt2YXIgaVllPWN0KChIVTEsUTgpPT57InVzZSBzdHJpY3QiO3ZhciB3aT10bigpLEJHZT11NigpLEdadD1qV2UoKSxSR2U9aDYoKSxZWnQ9WDgoKSxQbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGpSPTEsSEdlPTIscUdlPTMsV1I9NCxUUT0xLFpadD0yLFZHZT0zLFhadD0vW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3Ri1ceDg0XHg4Ni1ceDlGXHVGRkZFXHVGRkZGXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vLFFadD0vW1x4ODVcdTIwMjhcdTIwMjldLyxLWnQ9L1ssXFtcXVx7XH1dLyxVR2U9L14oPzohfCEhfCFbYS16XC1dKyEpJC9pLGpHZT0vXig/OiF8W14sXFtcXVx7XH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XC0jO1wvXD86QCY9XCtcJCxfXC4hflwqJ1woXClcW1xdXSkqJC9pO2Z1bmN0aW9uIFdHZSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIERyKHQpe3JldHVybiB0PT09MTB8fHQ9PT0xM31mdW5jdGlvbiBvbih0KXtyZXR1cm4gdD09PTl8fHQ9PT0zMn1mdW5jdGlvbiBKMih0KXtyZXR1cm4gdD09PTl8fHQ9PT0zMnx8dD09PTEwfHx0PT09MTN9ZnVuY3Rpb24gbTYodCl7cmV0dXJuIHQ9PT00NHx8dD09PTkxfHx0PT09OTN8fHQ9PT0xMjN8fHQ9PT0xMjV9ZnVuY3Rpb24gSlp0KHQpe3ZhciBlO3JldHVybiA0ODw9dCYmdDw9NTc/dC00ODooZT10fDMyLDk3PD1lJiZlPD0xMDI/ZS05NysxMDotMSl9ZnVuY3Rpb24gZVh0KHQpe3JldHVybiB0PT09MTIwPzI6dD09PTExNz80OnQ9PT04NT84OjB9ZnVuY3Rpb24gdFh0KHQpe3JldHVybiA0ODw9dCYmdDw9NTc/dC00ODotMX1mdW5jdGlvbiBHR2UodCl7cmV0dXJuIHQ9PT00OD8iXDAiOnQ9PT05Nz8iXHgwNyI6dD09PTk4PyJcYiI6dD09PTExNnx8dD09PTk/IgkiOnQ9PT0xMTA/YApgOnQ9PT0xMTg/Ilx2Ijp0PT09MTAyPyJcZiI6dD09PTExND8iXHIiOnQ9PT0xMDE/Ilx4MUIiOnQ9PT0zMj8iICI6dD09PTM0PyciJzp0PT09NDc/Ii8iOnQ9PT05Mj8iXFwiOnQ9PT03OD8iXHg4NSI6dD09PTk1PyJceEEwIjp0PT09NzY/Ilx1MjAyOCI6dD09PTgwPyJcdTIwMjkiOiIifWZ1bmN0aW9uIGFYdCh0KXtyZXR1cm4gdDw9NjU1MzU/U3RyaW5nLmZyb21DaGFyQ29kZSh0KTpTdHJpbmcuZnJvbUNoYXJDb2RlKCh0LTY1NTM2Pj4xMCkrNTUyOTYsKHQtNjU1MzYmMTAyMykrNTYzMjApfWZ1bmN0aW9uIFlHZSh0LGUsYSl7ZT09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmF9KTp0W2VdPWF9dmFyIFpHZT1uZXcgQXJyYXkoMjU2KSxYR2U9bmV3IEFycmF5KDI1Nik7Zm9yKHNuPTA7c248MjU2O3NuKyspWkdlW3NuXT1HR2Uoc24pPzE6MCxYR2Vbc25dPUdHZShzbik7ZnVuY3Rpb24gclh0KHQsZSl7dGhpcy5pbnB1dD10LHRoaXMuZmlsZW5hbWU9ZS5maWxlbmFtZXx8bnVsbCx0aGlzLnNjaGVtYT1lLnNjaGVtYXx8WVp0LHRoaXMub25XYXJuaW5nPWUub25XYXJuaW5nfHxudWxsLHRoaXMubGVnYWN5PWUubGVnYWN5fHwhMSx0aGlzLmpzb249ZS5qc29ufHwhMSx0aGlzLmxpc3RlbmVyPWUubGlzdGVuZXJ8fG51bGwsdGhpcy5pbXBsaWNpdFR5cGVzPXRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQsdGhpcy50eXBlTWFwPXRoaXMuc2NoZW1hLmNvbXBpbGVkVHlwZU1hcCx0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLnBvc2l0aW9uPTAsdGhpcy5saW5lPTAsdGhpcy5saW5lU3RhcnQ9MCx0aGlzLmxpbmVJbmRlbnQ9MCx0aGlzLmRvY3VtZW50cz1bXX1mdW5jdGlvbiBRR2UodCxlKXtyZXR1cm4gbmV3IEJHZShlLG5ldyBHWnQodC5maWxlbmFtZSx0LmlucHV0LHQucG9zaXRpb24sdC5saW5lLHQucG9zaXRpb24tdC5saW5lU3RhcnQpKX1mdW5jdGlvbiBhdCh0LGUpe3Rocm93IFFHZSh0LGUpfWZ1bmN0aW9uIEdSKHQsZSl7dC5vbldhcm5pbmcmJnQub25XYXJuaW5nLmNhbGwobnVsbCxRR2UodCxlKSl9dmFyIEtHZT17WUFNTDpmdW5jdGlvbihlLGEscil7dmFyIGksbyxzO2UudmVyc2lvbiE9PW51bGwmJmF0KGUsImR1cGxpY2F0aW9uIG9mICVZQU1MIGRpcmVjdGl2ZSIpLHIubGVuZ3RoIT09MSYmYXQoZSwiWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCIpLGk9L14oWzAtOV0rKVwuKFswLTldKykkLy5leGVjKHJbMF0pLGk9PT1udWxsJiZhdChlLCJpbGwtZm9ybWVkIGFyZ3VtZW50IG9mIHRoZSBZQU1MIGRpcmVjdGl2ZSIpLG89cGFyc2VJbnQoaVsxXSwxMCkscz1wYXJzZUludChpWzJdLDEwKSxvIT09MSYmYXQoZSwidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKSxlLnZlcnNpb249clswXSxlLmNoZWNrTGluZUJyZWFrcz1zPDIscyE9PTEmJnMhPT0yJiZHUihlLCJ1bnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Iil9LFRBRzpmdW5jdGlvbihlLGEscil7dmFyIGksbztyLmxlbmd0aCE9PTImJmF0KGUsIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMiKSxpPXJbMF0sbz1yWzFdLFVHZS50ZXN0KGkpfHxhdChlLCJpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpLFBvLmNhbGwoZS50YWdNYXAsaSkmJmF0KGUsJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yICInK2krJyIgdGFnIGhhbmRsZScpLGpHZS50ZXN0KG8pfHxhdChlLCJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKSxlLnRhZ01hcFtpXT1vfX07ZnVuY3Rpb24gSW8odCxlLGEscil7dmFyIGksbyxzLGw7aWYoZTxhKXtpZihsPXQuaW5wdXQuc2xpY2UoZSxhKSxyKWZvcihpPTAsbz1sLmxlbmd0aDtpPG87aSs9MSlzPWwuY2hhckNvZGVBdChpKSxzPT09OXx8MzI8PXMmJnM8PTExMTQxMTF8fGF0KHQsImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7ZWxzZSBYWnQudGVzdChsKSYmYXQodCwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKTt0LnJlc3VsdCs9bH19ZnVuY3Rpb24gSkdlKHQsZSxhLHIpe3ZhciBpLG8scyxsO2Zvcih3aS5pc09iamVjdChhKXx8YXQodCwiY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUiKSxpPU9iamVjdC5rZXlzKGEpLHM9MCxsPWkubGVuZ3RoO3M8bDtzKz0xKW89aVtzXSxQby5jYWxsKGUsbyl8fChZR2UoZSxvLGFbb10pLHJbb109ITApfWZ1bmN0aW9uIGc2KHQsZSxhLHIsaSxvLHMsbCl7dmFyIGYsYztpZihBcnJheS5pc0FycmF5KGkpKWZvcihpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGkpLGY9MCxjPWkubGVuZ3RoO2Y8YztmKz0xKUFycmF5LmlzQXJyYXkoaVtmXSkmJmF0KHQsIm5lc3RlZCBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGtleXMiKSx0eXBlb2YgaT09Im9iamVjdCImJldHZShpW2ZdKT09PSJbb2JqZWN0IE9iamVjdF0iJiYoaVtmXT0iW29iamVjdCBPYmplY3RdIik7aWYodHlwZW9mIGk9PSJvYmplY3QiJiZXR2UoaSk9PT0iW29iamVjdCBPYmplY3RdIiYmKGk9IltvYmplY3QgT2JqZWN0XSIpLGk9U3RyaW5nKGkpLGU9PT1udWxsJiYoZT17fSkscj09PSJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIpaWYoQXJyYXkuaXNBcnJheShvKSlmb3IoZj0wLGM9by5sZW5ndGg7ZjxjO2YrPTEpSkdlKHQsZSxvW2ZdLGEpO2Vsc2UgSkdlKHQsZSxvLGEpO2Vsc2UhdC5qc29uJiYhUG8uY2FsbChhLGkpJiZQby5jYWxsKGUsaSkmJih0LmxpbmU9c3x8dC5saW5lLHQucG9zaXRpb249bHx8dC5wb3NpdGlvbixhdCh0LCJkdXBsaWNhdGVkIG1hcHBpbmcga2V5IikpLFlHZShlLGksbyksZGVsZXRlIGFbaV07cmV0dXJuIGV9ZnVuY3Rpb24gX1EodCl7dmFyIGU7ZT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksZT09PTEwP3QucG9zaXRpb24rKzplPT09MTM/KHQucG9zaXRpb24rKyx0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik9PT0xMCYmdC5wb3NpdGlvbisrKTphdCh0LCJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKSx0LmxpbmUrPTEsdC5saW5lU3RhcnQ9dC5wb3NpdGlvbn1mdW5jdGlvbiAkMSh0LGUsYSl7Zm9yKHZhciByPTAsaT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7aSE9PTA7KXtmb3IoO29uKGkpOylpPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2lmKGUmJmk9PT0zNSlkbyBpPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKGkhPT0xMCYmaSE9PTEzJiZpIT09MCk7aWYoRHIoaSkpZm9yKF9RKHQpLGk9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLHIrKyx0LmxpbmVJbmRlbnQ9MDtpPT09MzI7KXQubGluZUluZGVudCsrLGk9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7ZWxzZSBicmVha31yZXR1cm4gYSE9PS0xJiZyIT09MCYmdC5saW5lSW5kZW50PGEmJkdSKHQsImRlZmljaWVudCBpbmRlbnRhdGlvbiIpLHJ9ZnVuY3Rpb24gWVIodCl7dmFyIGU9dC5wb3NpdGlvbixhO3JldHVybiBhPXQuaW5wdXQuY2hhckNvZGVBdChlKSwhISgoYT09PTQ1fHxhPT09NDYpJiZhPT09dC5pbnB1dC5jaGFyQ29kZUF0KGUrMSkmJmE9PT10LmlucHV0LmNoYXJDb2RlQXQoZSsyKSYmKGUrPTMsYT10LmlucHV0LmNoYXJDb2RlQXQoZSksYT09PTB8fEoyKGEpKSl9ZnVuY3Rpb24gQVEodCxlKXtlPT09MT90LnJlc3VsdCs9IiAiOmU+MSYmKHQucmVzdWx0Kz13aS5yZXBlYXQoYApgLGUtMSkpfWZ1bmN0aW9uIGlYdCh0LGUsYSl7dmFyIHIsaSxvLHMsbCxmLGMsdSxkPXQua2luZCxoPXQucmVzdWx0LGc7aWYoZz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksSjIoZyl8fG02KGcpfHxnPT09MzV8fGc9PT0zOHx8Zz09PTQyfHxnPT09MzN8fGc9PT0xMjR8fGc9PT02Mnx8Zz09PTM5fHxnPT09MzR8fGc9PT0zN3x8Zz09PTY0fHxnPT09OTZ8fChnPT09NjN8fGc9PT00NSkmJihpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLEoyKGkpfHxhJiZtNihpKSkpcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIixvPXM9dC5wb3NpdGlvbixsPSExO2chPT0wOyl7aWYoZz09PTU4KXtpZihpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLEoyKGkpfHxhJiZtNihpKSlicmVha31lbHNlIGlmKGc9PT0zNSl7aWYocj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbi0xKSxKMihyKSlicmVha31lbHNle2lmKHQucG9zaXRpb249PT10LmxpbmVTdGFydCYmWVIodCl8fGEmJm02KGcpKWJyZWFrO2lmKERyKGcpKWlmKGY9dC5saW5lLGM9dC5saW5lU3RhcnQsdT10LmxpbmVJbmRlbnQsJDEodCwhMSwtMSksdC5saW5lSW5kZW50Pj1lKXtsPSEwLGc9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO2NvbnRpbnVlfWVsc2V7dC5wb3NpdGlvbj1zLHQubGluZT1mLHQubGluZVN0YXJ0PWMsdC5saW5lSW5kZW50PXU7YnJlYWt9fWwmJihJbyh0LG8scywhMSksQVEodCx0LmxpbmUtZiksbz1zPXQucG9zaXRpb24sbD0hMSksb24oZyl8fChzPXQucG9zaXRpb24rMSksZz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKX1yZXR1cm4gSW8odCxvLHMsITEpLHQucmVzdWx0PyEwOih0LmtpbmQ9ZCx0LnJlc3VsdD1oLCExKX1mdW5jdGlvbiBvWHQodCxlKXt2YXIgYSxyLGk7aWYoYT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksYSE9PTM5KXJldHVybiExO2Zvcih0LmtpbmQ9InNjYWxhciIsdC5yZXN1bHQ9IiIsdC5wb3NpdGlvbisrLHI9aT10LnBvc2l0aW9uOyhhPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSkhPT0wOylpZihhPT09MzkpaWYoSW8odCxyLHQucG9zaXRpb24sITApLGE9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksYT09PTM5KXI9dC5wb3NpdGlvbix0LnBvc2l0aW9uKyssaT10LnBvc2l0aW9uO2Vsc2UgcmV0dXJuITA7ZWxzZSBEcihhKT8oSW8odCxyLGksITApLEFRKHQsJDEodCwhMSxlKSkscj1pPXQucG9zaXRpb24pOnQucG9zaXRpb249PT10LmxpbmVTdGFydCYmWVIodCk/YXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIik6KHQucG9zaXRpb24rKyxpPXQucG9zaXRpb24pO2F0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBzWHQodCxlKXt2YXIgYSxyLGksbyxzLGw7aWYobD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksbCE9PTM0KXJldHVybiExO2Zvcih0LmtpbmQ9InNjYWxhciIsdC5yZXN1bHQ9IiIsdC5wb3NpdGlvbisrLGE9cj10LnBvc2l0aW9uOyhsPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSkhPT0wOyl7aWYobD09PTM0KXJldHVybiBJbyh0LGEsdC5wb3NpdGlvbiwhMCksdC5wb3NpdGlvbisrLCEwO2lmKGw9PT05Mil7aWYoSW8odCxhLHQucG9zaXRpb24sITApLGw9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksRHIobCkpJDEodCwhMSxlKTtlbHNlIGlmKGw8MjU2JiZaR2VbbF0pdC5yZXN1bHQrPVhHZVtsXSx0LnBvc2l0aW9uKys7ZWxzZSBpZigocz1lWHQobCkpPjApe2ZvcihpPXMsbz0wO2k+MDtpLS0pbD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSwocz1KWnQobCkpPj0wP289KG88PDQpK3M6YXQodCwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7dC5yZXN1bHQrPWFYdChvKSx0LnBvc2l0aW9uKyt9ZWxzZSBhdCh0LCJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpO2E9cj10LnBvc2l0aW9ufWVsc2UgRHIobCk/KElvKHQsYSxyLCEwKSxBUSh0LCQxKHQsITEsZSkpLGE9cj10LnBvc2l0aW9uKTp0LnBvc2l0aW9uPT09dC5saW5lU3RhcnQmJllSKHQpP2F0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOih0LnBvc2l0aW9uKysscj10LnBvc2l0aW9uKX1hdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gblh0KHQsZSl7dmFyIGE9ITAscixpPXQudGFnLG8scz10LmFuY2hvcixsLGYsYyx1LGQsaD17fSxnLGIseCxtO2lmKG09dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLG09PT05MSlmPTkzLGQ9ITEsbz1bXTtlbHNlIGlmKG09PT0xMjMpZj0xMjUsZD0hMCxvPXt9O2Vsc2UgcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1vKSxtPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO20hPT0wOyl7aWYoJDEodCwhMCxlKSxtPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxtPT09ZilyZXR1cm4gdC5wb3NpdGlvbisrLHQudGFnPWksdC5hbmNob3I9cyx0LmtpbmQ9ZD8ibWFwcGluZyI6InNlcXVlbmNlIix0LnJlc3VsdD1vLCEwO2F8fGF0KHQsIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzIiksYj1nPXg9bnVsbCxjPXU9ITEsbT09PTYzJiYobD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKSxKMihsKSYmKGM9dT0hMCx0LnBvc2l0aW9uKyssJDEodCwhMCxlKSkpLHI9dC5saW5lLHg2KHQsZSxqUiwhMSwhMCksYj10LnRhZyxnPXQucmVzdWx0LCQxKHQsITAsZSksbT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksKHV8fHQubGluZT09PXIpJiZtPT09NTgmJihjPSEwLG09dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksJDEodCwhMCxlKSx4Nih0LGUsalIsITEsITApLHg9dC5yZXN1bHQpLGQ/ZzYodCxvLGgsYixnLHgpOmM/by5wdXNoKGc2KHQsbnVsbCxoLGIsZyx4KSk6by5wdXNoKGcpLCQxKHQsITAsZSksbT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksbT09PTQ0PyhhPSEwLG09dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOmE9ITF9YXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24iKX1mdW5jdGlvbiBsWHQodCxlKXt2YXIgYSxyLGk9VFEsbz0hMSxzPSExLGw9ZSxmPTAsYz0hMSx1LGQ7aWYoZD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksZD09PTEyNClyPSExO2Vsc2UgaWYoZD09PTYyKXI9ITA7ZWxzZSByZXR1cm4hMTtmb3IodC5raW5kPSJzY2FsYXIiLHQucmVzdWx0PSIiO2QhPT0wOylpZihkPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGQ9PT00M3x8ZD09PTQ1KVRRPT09aT9pPWQ9PT00Mz9WR2U6Wlp0OmF0KHQsInJlcGVhdCBvZiBhIGNob21waW5nIG1vZGUgaWRlbnRpZmllciIpO2Vsc2UgaWYoKHU9dFh0KGQpKT49MCl1PT09MD9hdCh0LCJiYWQgZXhwbGljaXQgaW5kZW50YXRpb24gd2lkdGggb2YgYSBibG9jayBzY2FsYXI7IGl0IGNhbm5vdCBiZSBsZXNzIHRoYW4gb25lIik6cz9hdCh0LCJyZXBlYXQgb2YgYW4gaW5kZW50YXRpb24gd2lkdGggaWRlbnRpZmllciIpOihsPWUrdS0xLHM9ITApO2Vsc2UgYnJlYWs7aWYob24oZCkpe2RvIGQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUob24oZCkpO2lmKGQ9PT0zNSlkbyBkPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKCFEcihkKSYmZCE9PTApfWZvcig7ZCE9PTA7KXtmb3IoX1EodCksdC5saW5lSW5kZW50PTAsZD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7KCFzfHx0LmxpbmVJbmRlbnQ8bCkmJmQ9PT0zMjspdC5saW5lSW5kZW50KyssZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtpZighcyYmdC5saW5lSW5kZW50PmwmJihsPXQubGluZUluZGVudCksRHIoZCkpe2YrKztjb250aW51ZX1pZih0LmxpbmVJbmRlbnQ8bCl7aT09PVZHZT90LnJlc3VsdCs9d2kucmVwZWF0KGAKYCxvPzErZjpmKTppPT09VFEmJm8mJih0LnJlc3VsdCs9YApgKTticmVha31mb3Iocj9vbihkKT8oYz0hMCx0LnJlc3VsdCs9d2kucmVwZWF0KGAKYCxvPzErZjpmKSk6Yz8oYz0hMSx0LnJlc3VsdCs9d2kucmVwZWF0KGAKYCxmKzEpKTpmPT09MD9vJiYodC5yZXN1bHQrPSIgIik6dC5yZXN1bHQrPXdpLnJlcGVhdChgCmAsZik6dC5yZXN1bHQrPXdpLnJlcGVhdChgCmAsbz8xK2Y6Ziksbz0hMCxzPSEwLGY9MCxhPXQucG9zaXRpb247IURyKGQpJiZkIT09MDspZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtJbyh0LGEsdC5wb3NpdGlvbiwhMSl9cmV0dXJuITB9ZnVuY3Rpb24gZVllKHQsZSl7dmFyIGEscj10LnRhZyxpPXQuYW5jaG9yLG89W10scyxsPSExLGY7Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1vKSxmPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTtmIT09MCYmIShmIT09NDV8fChzPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLCFKMihzKSkpOyl7aWYobD0hMCx0LnBvc2l0aW9uKyssJDEodCwhMCwtMSkmJnQubGluZUluZGVudDw9ZSl7by5wdXNoKG51bGwpLGY9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO2NvbnRpbnVlfWlmKGE9dC5saW5lLHg2KHQsZSxxR2UsITEsITApLG8ucHVzaCh0LnJlc3VsdCksJDEodCwhMCwtMSksZj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksKHQubGluZT09PWF8fHQubGluZUluZGVudD5lKSYmZiE9PTApYXQodCwiYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnkiKTtlbHNlIGlmKHQubGluZUluZGVudDxlKWJyZWFrfXJldHVybiBsPyh0LnRhZz1yLHQuYW5jaG9yPWksdC5raW5kPSJzZXF1ZW5jZSIsdC5yZXN1bHQ9bywhMCk6ITF9ZnVuY3Rpb24gY1h0KHQsZSxhKXt2YXIgcixpLG8scyxsPXQudGFnLGY9dC5hbmNob3IsYz17fSx1PXt9LGQ9bnVsbCxoPW51bGwsZz1udWxsLGI9ITEseD0hMSxtO2Zvcih0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09YyksbT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7bSE9PTA7KXtpZihyPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLG89dC5saW5lLHM9dC5wb3NpdGlvbiwobT09PTYzfHxtPT09NTgpJiZKMihyKSltPT09NjM/KGImJihnNih0LGMsdSxkLGgsbnVsbCksZD1oPWc9bnVsbCkseD0hMCxiPSEwLGk9ITApOmI/KGI9ITEsaT0hMCk6YXQodCwiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIpLHQucG9zaXRpb24rPTEsbT1yO2Vsc2UgaWYoeDYodCxhLEhHZSwhMSwhMCkpaWYodC5saW5lPT09byl7Zm9yKG09dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO29uKG0pOyltPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2lmKG09PT01OCltPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLEoyKG0pfHxhdCh0LCJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmciKSxiJiYoZzYodCxjLHUsZCxoLG51bGwpLGQ9aD1nPW51bGwpLHg9ITAsYj0hMSxpPSExLGQ9dC50YWcsaD10LnJlc3VsdDtlbHNlIGlmKHgpYXQodCwiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiKTtlbHNlIHJldHVybiB0LnRhZz1sLHQuYW5jaG9yPWYsITB9ZWxzZSBpZih4KWF0KHQsImNhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleSIpO2Vsc2UgcmV0dXJuIHQudGFnPWwsdC5hbmNob3I9ZiwhMDtlbHNlIGJyZWFrO2lmKCh0LmxpbmU9PT1vfHx0LmxpbmVJbmRlbnQ+ZSkmJih4Nih0LGUsV1IsITAsaSkmJihiP2g9dC5yZXN1bHQ6Zz10LnJlc3VsdCksYnx8KGc2KHQsYyx1LGQsaCxnLG8scyksZD1oPWc9bnVsbCksJDEodCwhMCwtMSksbT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbikpLHQubGluZUluZGVudD5lJiZtIT09MClhdCh0LCJiYWQgaW5kZW50YXRpb24gb2YgYSBtYXBwaW5nIGVudHJ5Iik7ZWxzZSBpZih0LmxpbmVJbmRlbnQ8ZSlicmVha31yZXR1cm4gYiYmZzYodCxjLHUsZCxoLG51bGwpLHgmJih0LnRhZz1sLHQuYW5jaG9yPWYsdC5raW5kPSJtYXBwaW5nIix0LnJlc3VsdD1jKSx4fWZ1bmN0aW9uIGRYdCh0KXt2YXIgZSxhPSExLHI9ITEsaSxvLHM7aWYocz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbikscyE9PTMzKXJldHVybiExO2lmKHQudGFnIT09bnVsbCYmYXQodCwiZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHkiKSxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLHM9PT02MD8oYT0hMCxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pKTpzPT09MzM/KHI9ITAsaT0iISEiLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOmk9IiEiLGU9dC5wb3NpdGlvbixhKXtkbyBzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKHMhPT0wJiZzIT09NjIpO3QucG9zaXRpb248dC5sZW5ndGg/KG89dC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOmF0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnIil9ZWxzZXtmb3IoO3MhPT0wJiYhSjIocyk7KXM9PT0zMyYmKHI/YXQodCwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrcyIpOihpPXQuaW5wdXQuc2xpY2UoZS0xLHQucG9zaXRpb24rMSksVUdlLnRlc3QoaSl8fGF0KHQsIm5hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzIikscj0hMCxlPXQucG9zaXRpb24rMSkpLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7bz10LmlucHV0LnNsaWNlKGUsdC5wb3NpdGlvbiksS1p0LnRlc3QobykmJmF0KHQsInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVycyIpfXJldHVybiBvJiYhakdlLnRlc3QobykmJmF0KHQsInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIitvKSxhP3QudGFnPW86UG8uY2FsbCh0LnRhZ01hcCxpKT90LnRhZz10LnRhZ01hcFtpXStvOmk9PT0iISI/dC50YWc9IiEiK286aT09PSIhISI/dC50YWc9InRhZzp5YW1sLm9yZywyMDAyOiIrbzphdCh0LCd1bmRlY2xhcmVkIHRhZyBoYW5kbGUgIicraSsnIicpLCEwfWZ1bmN0aW9uIGZYdCh0KXt2YXIgZSxhO2lmKGE9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLGEhPT0zOClyZXR1cm4hMTtmb3IodC5hbmNob3IhPT1udWxsJiZhdCh0LCJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHkiKSxhPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGU9dC5wb3NpdGlvbjthIT09MCYmIUoyKGEpJiYhbTYoYSk7KWE9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7cmV0dXJuIHQucG9zaXRpb249PT1lJiZhdCh0LCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksdC5hbmNob3I9dC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pLCEwfWZ1bmN0aW9uIHVYdCh0KXt2YXIgZSxhLHI7aWYocj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksciE9PTQyKXJldHVybiExO2ZvcihyPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGU9dC5wb3NpdGlvbjtyIT09MCYmIUoyKHIpJiYhbTYocik7KXI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7cmV0dXJuIHQucG9zaXRpb249PT1lJiZhdCh0LCJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxhPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSxQby5jYWxsKHQuYW5jaG9yTWFwLGEpfHxhdCh0LCd1bmlkZW50aWZpZWQgYWxpYXMgIicrYSsnIicpLHQucmVzdWx0PXQuYW5jaG9yTWFwW2FdLCQxKHQsITAsLTEpLCEwfWZ1bmN0aW9uIHg2KHQsZSxhLHIsaSl7dmFyIG8scyxsLGY9MSxjPSExLHU9ITEsZCxoLGcsYix4O2lmKHQubGlzdGVuZXIhPT1udWxsJiZ0Lmxpc3RlbmVyKCJvcGVuIix0KSx0LnRhZz1udWxsLHQuYW5jaG9yPW51bGwsdC5raW5kPW51bGwsdC5yZXN1bHQ9bnVsbCxvPXM9bD1XUj09PWF8fHFHZT09PWEsciYmJDEodCwhMCwtMSkmJihjPSEwLHQubGluZUluZGVudD5lP2Y9MTp0LmxpbmVJbmRlbnQ9PT1lP2Y9MDp0LmxpbmVJbmRlbnQ8ZSYmKGY9LTEpKSxmPT09MSlmb3IoO2RYdCh0KXx8Zlh0KHQpOykkMSh0LCEwLC0xKT8oYz0hMCxsPW8sdC5saW5lSW5kZW50PmU/Zj0xOnQubGluZUluZGVudD09PWU/Zj0wOnQubGluZUluZGVudDxlJiYoZj0tMSkpOmw9ITE7aWYobCYmKGw9Y3x8aSksKGY9PT0xfHxXUj09PWEpJiYoalI9PT1hfHxIR2U9PT1hP2I9ZTpiPWUrMSx4PXQucG9zaXRpb24tdC5saW5lU3RhcnQsZj09PTE/bCYmKGVZZSh0LHgpfHxjWHQodCx4LGIpKXx8blh0KHQsYik/dT0hMDoocyYmbFh0KHQsYil8fG9YdCh0LGIpfHxzWHQodCxiKT91PSEwOnVYdCh0KT8odT0hMCwodC50YWchPT1udWxsfHx0LmFuY2hvciE9PW51bGwpJiZhdCh0LCJhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBhbnkgcHJvcGVydGllcyIpKTppWHQodCxiLGpSPT09YSkmJih1PSEwLHQudGFnPT09bnVsbCYmKHQudGFnPSI/IikpLHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT10LnJlc3VsdCkpOmY9PT0wJiYodT1sJiZlWWUodCx4KSkpLHQudGFnIT09bnVsbCYmdC50YWchPT0iISIpaWYodC50YWc9PT0iPyIpe2Zvcih0LnJlc3VsdCE9PW51bGwmJnQua2luZCE9PSJzY2FsYXIiJiZhdCh0LCd1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPD8+IHRhZzsgaXQgc2hvdWxkIGJlICJzY2FsYXIiLCBub3QgIicrdC5raW5kKyciJyksZD0wLGg9dC5pbXBsaWNpdFR5cGVzLmxlbmd0aDtkPGg7ZCs9MSlpZihnPXQuaW1wbGljaXRUeXBlc1tkXSxnLnJlc29sdmUodC5yZXN1bHQpKXt0LnJlc3VsdD1nLmNvbnN0cnVjdCh0LnJlc3VsdCksdC50YWc9Zy50YWcsdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KTticmVha319ZWxzZSBQby5jYWxsKHQudHlwZU1hcFt0LmtpbmR8fCJmYWxsYmFjayJdLHQudGFnKT8oZz10LnR5cGVNYXBbdC5raW5kfHwiZmFsbGJhY2siXVt0LnRhZ10sdC5yZXN1bHQhPT1udWxsJiZnLmtpbmQhPT10LmtpbmQmJmF0KHQsInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Iit0LnRhZysnPiB0YWc7IGl0IHNob3VsZCBiZSAiJytnLmtpbmQrJyIsIG5vdCAiJyt0LmtpbmQrJyInKSxnLnJlc29sdmUodC5yZXN1bHQpPyh0LnJlc3VsdD1nLmNvbnN0cnVjdCh0LnJlc3VsdCksdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KSk6YXQodCwiY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwiK3QudGFnKyI+IGV4cGxpY2l0IHRhZyIpKTphdCh0LCJ1bmtub3duIHRhZyAhPCIrdC50YWcrIj4iKTtyZXR1cm4gdC5saXN0ZW5lciE9PW51bGwmJnQubGlzdGVuZXIoImNsb3NlIix0KSx0LnRhZyE9PW51bGx8fHQuYW5jaG9yIT09bnVsbHx8dX1mdW5jdGlvbiBwWHQodCl7dmFyIGU9dC5wb3NpdGlvbixhLHIsaSxvPSExLHM7Zm9yKHQudmVyc2lvbj1udWxsLHQuY2hlY2tMaW5lQnJlYWtzPXQubGVnYWN5LHQudGFnTWFwPXt9LHQuYW5jaG9yTWFwPXt9OyhzPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSkhPT0wJiYoJDEodCwhMCwtMSkscz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksISh0LmxpbmVJbmRlbnQ+MHx8cyE9PTM3KSk7KXtmb3Iobz0hMCxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGE9dC5wb3NpdGlvbjtzIT09MCYmIUoyKHMpOylzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2ZvcihyPXQuaW5wdXQuc2xpY2UoYSx0LnBvc2l0aW9uKSxpPVtdLHIubGVuZ3RoPDEmJmF0KHQsImRpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCIpO3MhPT0wOyl7Zm9yKDtvbihzKTspcz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtpZihzPT09MzUpe2RvIHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUocyE9PTAmJiFEcihzKSk7YnJlYWt9aWYoRHIocykpYnJlYWs7Zm9yKGE9dC5wb3NpdGlvbjtzIT09MCYmIUoyKHMpOylzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2kucHVzaCh0LmlucHV0LnNsaWNlKGEsdC5wb3NpdGlvbikpfXMhPT0wJiZfUSh0KSxQby5jYWxsKEtHZSxyKT9LR2Vbcl0odCxyLGkpOkdSKHQsJ3Vua25vd24gZG9jdW1lbnQgZGlyZWN0aXZlICInK3IrJyInKX1pZigkMSh0LCEwLC0xKSx0LmxpbmVJbmRlbnQ9PT0wJiZ0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik9PT00NSYmdC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSk9PT00NSYmdC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMik9PT00NT8odC5wb3NpdGlvbis9MywkMSh0LCEwLC0xKSk6byYmYXQodCwiZGlyZWN0aXZlcyBlbmQgbWFyayBpcyBleHBlY3RlZCIpLHg2KHQsdC5saW5lSW5kZW50LTEsV1IsITEsITApLCQxKHQsITAsLTEpLHQuY2hlY2tMaW5lQnJlYWtzJiZRWnQudGVzdCh0LmlucHV0LnNsaWNlKGUsdC5wb3NpdGlvbikpJiZHUih0LCJub24tQVNDSUkgbGluZSBicmVha3MgYXJlIGludGVycHJldGVkIGFzIGNvbnRlbnQiKSx0LmRvY3VtZW50cy5wdXNoKHQucmVzdWx0KSx0LnBvc2l0aW9uPT09dC5saW5lU3RhcnQmJllSKHQpKXt0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik9PT00NiYmKHQucG9zaXRpb24rPTMsJDEodCwhMCwtMSkpO3JldHVybn1pZih0LnBvc2l0aW9uPHQubGVuZ3RoLTEpYXQodCwiZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQiKTtlbHNlIHJldHVybn1mdW5jdGlvbiB0WWUodCxlKXt0PVN0cmluZyh0KSxlPWV8fHt9LHQubGVuZ3RoIT09MCYmKHQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKSE9PTEwJiZ0LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkhPT0xMyYmKHQrPWAKYCksdC5jaGFyQ29kZUF0KDApPT09NjUyNzkmJih0PXQuc2xpY2UoMSkpKTt2YXIgYT1uZXcgclh0KHQsZSkscj10LmluZGV4T2YoIlwwIik7Zm9yKHIhPT0tMSYmKGEucG9zaXRpb249cixhdChhLCJudWxsIGJ5dGUgaXMgbm90IGFsbG93ZWQgaW4gaW5wdXQiKSksYS5pbnB1dCs9IlwwIjthLmlucHV0LmNoYXJDb2RlQXQoYS5wb3NpdGlvbik9PT0zMjspYS5saW5lSW5kZW50Kz0xLGEucG9zaXRpb24rPTE7Zm9yKDthLnBvc2l0aW9uPGEubGVuZ3RoLTE7KXBYdChhKTtyZXR1cm4gYS5kb2N1bWVudHN9ZnVuY3Rpb24gYVllKHQsZSxhKXtlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiZ0eXBlb2YgYT4idSImJihhPWUsZT1udWxsKTt2YXIgcj10WWUodCxhKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIilyZXR1cm4gcjtmb3IodmFyIGk9MCxvPXIubGVuZ3RoO2k8bztpKz0xKWUocltpXSl9ZnVuY3Rpb24gclllKHQsZSl7dmFyIGE9dFllKHQsZSk7aWYoYS5sZW5ndGghPT0wKXtpZihhLmxlbmd0aD09PTEpcmV0dXJuIGFbMF07dGhyb3cgbmV3IEJHZSgiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUiKX19ZnVuY3Rpb24gaFh0KHQsZSxhKXtyZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbCYmdHlwZW9mIGE+InUiJiYoYT1lLGU9bnVsbCksYVllKHQsZSx3aS5leHRlbmQoe3NjaGVtYTpSR2V9LGEpKX1mdW5jdGlvbiBtWHQodCxlKXtyZXR1cm4gclllKHQsd2kuZXh0ZW5kKHtzY2hlbWE6UkdlfSxlKSl9UTguZXhwb3J0cy5sb2FkQWxsPWFZZSxROC5leHBvcnRzLmxvYWQ9clllLFE4LmV4cG9ydHMuc2FmZUxvYWRBbGw9aFh0LFE4LmV4cG9ydHMuc2FmZUxvYWQ9bVh0O3ZhciBzbn0pO3ZhciBMWWU9Y3QoKHFVMSxOUSk9PnsidXNlIHN0cmljdCI7dmFyIEs4PXRuKCksSjg9dTYoKSxnWHQ9WDgoKSx4WHQ9aDYoKSxvWWU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxzWWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxiWHQ9OSxlZD0xMCx2WHQ9MTMseVh0PTMyLHdYdD0zMyxNWHQ9MzQsblllPTM1LHpYdD0zNyxrWHQ9MzgsU1h0PTM5LENYdD00MixsWWU9NDQsTFh0PTQ1LGNZZT01OCxUWHQ9NjEsX1h0PTYyLEFYdD02MywkWHQ9NjQsZFllPTkxLGZZZT05MyxEWHQ9OTYsdVllPTEyMyxFWHQ9MTI0LHBZZT0xMjUsejI9e307ejJbMF09IlxcMCIsejJbN109IlxcYSIsejJbOF09IlxcYiIsejJbOV09IlxcdCIsejJbMTBdPSJcXG4iLHoyWzExXT0iXFx2Iix6MlsxMl09IlxcZiIsejJbMTNdPSJcXHIiLHoyWzI3XT0iXFxlIix6MlszNF09J1xcIicsejJbOTJdPSJcXFxcIix6MlsxMzNdPSJcXE4iLHoyWzE2MF09IlxcXyIsejJbODIzMl09IlxcTCIsejJbODIzM109IlxcUCI7dmFyIE5YdD1bInkiLCJZIiwieWVzIiwiWWVzIiwiWUVTIiwib24iLCJPbiIsIk9OIiwibiIsIk4iLCJubyIsIk5vIiwiTk8iLCJvZmYiLCJPZmYiLCJPRkYiXTtmdW5jdGlvbiBQWHQodCxlKXt2YXIgYSxyLGksbyxzLGwsZjtpZihlPT09bnVsbClyZXR1cm57fTtmb3IoYT17fSxyPU9iamVjdC5rZXlzKGUpLGk9MCxvPXIubGVuZ3RoO2k8bztpKz0xKXM9cltpXSxsPVN0cmluZyhlW3NdKSxzLnNsaWNlKDAsMik9PT0iISEiJiYocz0idGFnOnlhbWwub3JnLDIwMDI6IitzLnNsaWNlKDIpKSxmPXQuY29tcGlsZWRUeXBlTWFwLmZhbGxiYWNrW3NdLGYmJnNZZS5jYWxsKGYuc3R5bGVBbGlhc2VzLGwpJiYobD1mLnN0eWxlQWxpYXNlc1tsXSksYVtzXT1sO3JldHVybiBhfWZ1bmN0aW9uIGhZZSh0KXt2YXIgZSxhLHI7aWYoZT10LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHQ8PTI1NSlhPSJ4IixyPTI7ZWxzZSBpZih0PD02NTUzNSlhPSJ1IixyPTQ7ZWxzZSBpZih0PD00Mjk0OTY3Mjk1KWE9IlUiLHI9ODtlbHNlIHRocm93IG5ldyBKOCgiY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRiIpO3JldHVybiJcXCIrYStLOC5yZXBlYXQoIjAiLHItZS5sZW5ndGgpK2V9ZnVuY3Rpb24gSVh0KHQpe3RoaXMuc2NoZW1hPXQuc2NoZW1hfHxnWHQsdGhpcy5pbmRlbnQ9TWF0aC5tYXgoMSx0LmluZGVudHx8MiksdGhpcy5ub0FycmF5SW5kZW50PXQubm9BcnJheUluZGVudHx8ITEsdGhpcy5za2lwSW52YWxpZD10LnNraXBJbnZhbGlkfHwhMSx0aGlzLmZsb3dMZXZlbD1LOC5pc05vdGhpbmcodC5mbG93TGV2ZWwpPy0xOnQuZmxvd0xldmVsLHRoaXMuc3R5bGVNYXA9UFh0KHRoaXMuc2NoZW1hLHQuc3R5bGVzfHxudWxsKSx0aGlzLnNvcnRLZXlzPXQuc29ydEtleXN8fCExLHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRofHw4MCx0aGlzLm5vUmVmcz10Lm5vUmVmc3x8ITEsdGhpcy5ub0NvbXBhdE1vZGU9dC5ub0NvbXBhdE1vZGV8fCExLHRoaXMuY29uZGVuc2VGbG93PXQuY29uZGVuc2VGbG93fHwhMSx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLmV4cGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdCx0aGlzLnRhZz1udWxsLHRoaXMucmVzdWx0PSIiLHRoaXMuZHVwbGljYXRlcz1bXSx0aGlzLnVzZWREdXBsaWNhdGVzPW51bGx9ZnVuY3Rpb24gbVllKHQsZSl7Zm9yKHZhciBhPUs4LnJlcGVhdCgiICIsZSkscj0wLGk9LTEsbz0iIixzLGw9dC5sZW5ndGg7cjxsOylpPXQuaW5kZXhPZihgCmAsciksaT09PS0xPyhzPXQuc2xpY2Uocikscj1sKToocz10LnNsaWNlKHIsaSsxKSxyPWkrMSkscy5sZW5ndGgmJnMhPT1gCmAmJihvKz1hKSxvKz1zO3JldHVybiBvfWZ1bmN0aW9uICRRKHQsZSl7cmV0dXJuYApgK0s4LnJlcGVhdCgiICIsdC5pbmRlbnQqZSl9ZnVuY3Rpb24gRlh0KHQsZSl7dmFyIGEscixpO2ZvcihhPTAscj10LmltcGxpY2l0VHlwZXMubGVuZ3RoO2E8cjthKz0xKWlmKGk9dC5pbXBsaWNpdFR5cGVzW2FdLGkucmVzb2x2ZShlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBEUSh0KXtyZXR1cm4gdD09PXlYdHx8dD09PWJYdH1mdW5jdGlvbiBiNih0KXtyZXR1cm4gMzI8PXQmJnQ8PTEyNnx8MTYxPD10JiZ0PD01NTI5NSYmdCE9PTgyMzImJnQhPT04MjMzfHw1NzM0NDw9dCYmdDw9NjU1MzMmJnQhPT02NTI3OXx8NjU1MzY8PXQmJnQ8PTExMTQxMTF9ZnVuY3Rpb24gT1h0KHQpe3JldHVybiBiNih0KSYmIURRKHQpJiZ0IT09NjUyNzkmJnQhPT12WHQmJnQhPT1lZH1mdW5jdGlvbiBnWWUodCxlKXtyZXR1cm4gYjYodCkmJnQhPT02NTI3OSYmdCE9PWxZZSYmdCE9PWRZZSYmdCE9PWZZZSYmdCE9PXVZZSYmdCE9PXBZZSYmdCE9PWNZZSYmKHQhPT1uWWV8fGUmJk9YdChlKSl9ZnVuY3Rpb24gQlh0KHQpe3JldHVybiBiNih0KSYmdCE9PTY1Mjc5JiYhRFEodCkmJnQhPT1MWHQmJnQhPT1BWHQmJnQhPT1jWWUmJnQhPT1sWWUmJnQhPT1kWWUmJnQhPT1mWWUmJnQhPT11WWUmJnQhPT1wWWUmJnQhPT1uWWUmJnQhPT1rWHQmJnQhPT1DWHQmJnQhPT13WHQmJnQhPT1FWHQmJnQhPT1UWHQmJnQhPT1fWHQmJnQhPT1TWHQmJnQhPT1NWHQmJnQhPT16WHQmJnQhPT0kWHQmJnQhPT1EWHR9ZnVuY3Rpb24geFllKHQpe3ZhciBlPS9eXG4qIC87cmV0dXJuIGUudGVzdCh0KX12YXIgYlllPTEsdlllPTIseVllPTMsd1llPTQsWlI9NTtmdW5jdGlvbiBSWHQodCxlLGEscixpKXt2YXIgbyxzLGwsZj0hMSxjPSExLHU9ciE9PS0xLGQ9LTEsaD1CWHQodC5jaGFyQ29kZUF0KDApKSYmIURRKHQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKSk7aWYoZSlmb3Iobz0wO288dC5sZW5ndGg7bysrKXtpZihzPXQuY2hhckNvZGVBdChvKSwhYjYocykpcmV0dXJuIFpSO2w9bz4wP3QuY2hhckNvZGVBdChvLTEpOm51bGwsaD1oJiZnWWUocyxsKX1lbHNle2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspe2lmKHM9dC5jaGFyQ29kZUF0KG8pLHM9PT1lZClmPSEwLHUmJihjPWN8fG8tZC0xPnImJnRbZCsxXSE9PSIgIixkPW8pO2Vsc2UgaWYoIWI2KHMpKXJldHVybiBaUjtsPW8+MD90LmNoYXJDb2RlQXQoby0xKTpudWxsLGg9aCYmZ1llKHMsbCl9Yz1jfHx1JiZvLWQtMT5yJiZ0W2QrMV0hPT0iICJ9cmV0dXJuIWYmJiFjP2gmJiFpKHQpP2JZZTp2WWU6YT45JiZ4WWUodCk/WlI6Yz93WWU6eVllfWZ1bmN0aW9uIEhYdCh0LGUsYSxyKXt0LmR1bXA9KGZ1bmN0aW9uKCl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiInJyI7aWYoIXQubm9Db21wYXRNb2RlJiZOWHQuaW5kZXhPZihlKSE9PS0xKXJldHVybiInIitlKyInIjt2YXIgaT10LmluZGVudCpNYXRoLm1heCgxLGEpLG89dC5saW5lV2lkdGg9PT0tMT8tMTpNYXRoLm1heChNYXRoLm1pbih0LmxpbmVXaWR0aCw0MCksdC5saW5lV2lkdGgtaSkscz1yfHx0LmZsb3dMZXZlbD4tMSYmYT49dC5mbG93TGV2ZWw7ZnVuY3Rpb24gbChmKXtyZXR1cm4gRlh0KHQsZil9c3dpdGNoKFJYdChlLHMsdC5pbmRlbnQsbyxsKSl7Y2FzZSBiWWU6cmV0dXJuIGU7Y2FzZSB2WWU6cmV0dXJuIiciK2UucmVwbGFjZSgvJy9nLCInJyIpKyInIjtjYXNlIHlZZTpyZXR1cm4ifCIrTVllKGUsdC5pbmRlbnQpK3pZZShtWWUoZSxpKSk7Y2FzZSB3WWU6cmV0dXJuIj4iK01ZZShlLHQuaW5kZW50KSt6WWUobVllKHFYdChlLG8pLGkpKTtjYXNlIFpSOnJldHVybiciJytWWHQoZSxvKSsnIic7ZGVmYXVsdDp0aHJvdyBuZXcgSjgoImltcG9zc2libGUgZXJyb3I6IGludmFsaWQgc2NhbGFyIHN0eWxlIil9fSkoKX1mdW5jdGlvbiBNWWUodCxlKXt2YXIgYT14WWUodCk/U3RyaW5nKGUpOiIiLHI9dFt0Lmxlbmd0aC0xXT09PWAKYCxpPXImJih0W3QubGVuZ3RoLTJdPT09YApgfHx0PT09YApgKSxvPWk/IisiOnI/IiI6Ii0iO3JldHVybiBhK28rYApgfWZ1bmN0aW9uIHpZZSh0KXtyZXR1cm4gdFt0Lmxlbmd0aC0xXT09PWAKYD90LnNsaWNlKDAsLTEpOnR9ZnVuY3Rpb24gcVh0KHQsZSl7Zm9yKHZhciBhPS8oXG4rKShbXlxuXSopL2cscj0oZnVuY3Rpb24oKXt2YXIgYz10LmluZGV4T2YoYApgKTtyZXR1cm4gYz1jIT09LTE/Yzp0Lmxlbmd0aCxhLmxhc3RJbmRleD1jLGtZZSh0LnNsaWNlKDAsYyksZSl9KSgpLGk9dFswXT09PWAKYHx8dFswXT09PSIgIixvLHM7cz1hLmV4ZWModCk7KXt2YXIgbD1zWzFdLGY9c1syXTtvPWZbMF09PT0iICIscis9bCsoIWkmJiFvJiZmIT09IiI/YApgOiIiKStrWWUoZixlKSxpPW99cmV0dXJuIHJ9ZnVuY3Rpb24ga1llKHQsZSl7aWYodD09PSIifHx0WzBdPT09IiAiKXJldHVybiB0O2Zvcih2YXIgYT0vIFteIF0vZyxyLGk9MCxvLHM9MCxsPTAsZj0iIjtyPWEuZXhlYyh0KTspbD1yLmluZGV4LGwtaT5lJiYobz1zPmk/czpsLGYrPWAKYCt0LnNsaWNlKGksbyksaT1vKzEpLHM9bDtyZXR1cm4gZis9YApgLHQubGVuZ3RoLWk+ZSYmcz5pP2YrPXQuc2xpY2UoaSxzKStgCmArdC5zbGljZShzKzEpOmYrPXQuc2xpY2UoaSksZi5zbGljZSgxKX1mdW5jdGlvbiBWWHQodCl7Zm9yKHZhciBlPSIiLGEscixpLG89MDtvPHQubGVuZ3RoO28rKyl7aWYoYT10LmNoYXJDb2RlQXQobyksYT49NTUyOTYmJmE8PTU2MzE5JiYocj10LmNoYXJDb2RlQXQobysxKSxyPj01NjMyMCYmcjw9NTczNDMpKXtlKz1oWWUoKGEtNTUyOTYpKjEwMjQrci01NjMyMCs2NTUzNiksbysrO2NvbnRpbnVlfWk9ejJbYV0sZSs9IWkmJmI2KGEpP3Rbb106aXx8aFllKGEpfXJldHVybiBlfWZ1bmN0aW9uIFVYdCh0LGUsYSl7dmFyIHI9IiIsaT10LnRhZyxvLHM7Zm9yKG89MCxzPWEubGVuZ3RoO288cztvKz0xKW5uKHQsZSxhW29dLCExLCExKSYmKG8hPT0wJiYocis9IiwiKyh0LmNvbmRlbnNlRmxvdz8iIjoiICIpKSxyKz10LmR1bXApO3QudGFnPWksdC5kdW1wPSJbIityKyJdIn1mdW5jdGlvbiBqWHQodCxlLGEscil7dmFyIGk9IiIsbz10LnRhZyxzLGw7Zm9yKHM9MCxsPWEubGVuZ3RoO3M8bDtzKz0xKW5uKHQsZSsxLGFbc10sITAsITApJiYoKCFyfHxzIT09MCkmJihpKz0kUSh0LGUpKSx0LmR1bXAmJmVkPT09dC5kdW1wLmNoYXJDb2RlQXQoMCk/aSs9Ii0iOmkrPSItICIsaSs9dC5kdW1wKTt0LnRhZz1vLHQuZHVtcD1pfHwiW10ifWZ1bmN0aW9uIFdYdCh0LGUsYSl7dmFyIHI9IiIsaT10LnRhZyxvPU9iamVjdC5rZXlzKGEpLHMsbCxmLGMsdTtmb3Iocz0wLGw9by5sZW5ndGg7czxsO3MrPTEpdT0iIixzIT09MCYmKHUrPSIsICIpLHQuY29uZGVuc2VGbG93JiYodSs9JyInKSxmPW9bc10sYz1hW2ZdLG5uKHQsZSxmLCExLCExKSYmKHQuZHVtcC5sZW5ndGg+MTAyNCYmKHUrPSI/ICIpLHUrPXQuZHVtcCsodC5jb25kZW5zZUZsb3c/JyInOiIiKSsiOiIrKHQuY29uZGVuc2VGbG93PyIiOiIgIiksbm4odCxlLGMsITEsITEpJiYodSs9dC5kdW1wLHIrPXUpKTt0LnRhZz1pLHQuZHVtcD0ieyIrcisifSJ9ZnVuY3Rpb24gR1h0KHQsZSxhLHIpe3ZhciBpPSIiLG89dC50YWcscz1PYmplY3Qua2V5cyhhKSxsLGYsYyx1LGQsaDtpZih0LnNvcnRLZXlzPT09ITApcy5zb3J0KCk7ZWxzZSBpZih0eXBlb2YgdC5zb3J0S2V5cz09ImZ1bmN0aW9uIilzLnNvcnQodC5zb3J0S2V5cyk7ZWxzZSBpZih0LnNvcnRLZXlzKXRocm93IG5ldyBKOCgic29ydEtleXMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbiIpO2ZvcihsPTAsZj1zLmxlbmd0aDtsPGY7bCs9MSloPSIiLCghcnx8bCE9PTApJiYoaCs9JFEodCxlKSksYz1zW2xdLHU9YVtjXSxubih0LGUrMSxjLCEwLCEwLCEwKSYmKGQ9dC50YWchPT1udWxsJiZ0LnRhZyE9PSI/Inx8dC5kdW1wJiZ0LmR1bXAubGVuZ3RoPjEwMjQsZCYmKHQuZHVtcCYmZWQ9PT10LmR1bXAuY2hhckNvZGVBdCgwKT9oKz0iPyI6aCs9Ij8gIiksaCs9dC5kdW1wLGQmJihoKz0kUSh0LGUpKSxubih0LGUrMSx1LCEwLGQpJiYodC5kdW1wJiZlZD09PXQuZHVtcC5jaGFyQ29kZUF0KDApP2grPSI6IjpoKz0iOiAiLGgrPXQuZHVtcCxpKz1oKSk7dC50YWc9byx0LmR1bXA9aXx8Int9In1mdW5jdGlvbiBTWWUodCxlLGEpe3ZhciByLGksbyxzLGwsZjtmb3IoaT1hP3QuZXhwbGljaXRUeXBlczp0LmltcGxpY2l0VHlwZXMsbz0wLHM9aS5sZW5ndGg7bzxzO28rPTEpaWYobD1pW29dLChsLmluc3RhbmNlT2Z8fGwucHJlZGljYXRlKSYmKCFsLmluc3RhbmNlT2Z8fHR5cGVvZiBlPT0ib2JqZWN0IiYmZSBpbnN0YW5jZW9mIGwuaW5zdGFuY2VPZikmJighbC5wcmVkaWNhdGV8fGwucHJlZGljYXRlKGUpKSl7aWYodC50YWc9YT9sLnRhZzoiPyIsbC5yZXByZXNlbnQpe2lmKGY9dC5zdHlsZU1hcFtsLnRhZ118fGwuZGVmYXVsdFN0eWxlLG9ZZS5jYWxsKGwucmVwcmVzZW50KT09PSJbb2JqZWN0IEZ1bmN0aW9uXSIpcj1sLnJlcHJlc2VudChlLGYpO2Vsc2UgaWYoc1llLmNhbGwobC5yZXByZXNlbnQsZikpcj1sLnJlcHJlc2VudFtmXShlLGYpO2Vsc2UgdGhyb3cgbmV3IEo4KCIhPCIrbC50YWcrJz4gdGFnIHJlc29sdmVyIGFjY2VwdHMgbm90ICInK2YrJyIgc3R5bGUnKTt0LmR1bXA9cn1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBubih0LGUsYSxyLGksbyl7dC50YWc9bnVsbCx0LmR1bXA9YSxTWWUodCxhLCExKXx8U1llKHQsYSwhMCk7dmFyIHM9b1llLmNhbGwodC5kdW1wKTtyJiYocj10LmZsb3dMZXZlbDwwfHx0LmZsb3dMZXZlbD5lKTt2YXIgbD1zPT09IltvYmplY3QgT2JqZWN0XSJ8fHM9PT0iW29iamVjdCBBcnJheV0iLGYsYztpZihsJiYoZj10LmR1cGxpY2F0ZXMuaW5kZXhPZihhKSxjPWYhPT0tMSksKHQudGFnIT09bnVsbCYmdC50YWchPT0iPyJ8fGN8fHQuaW5kZW50IT09MiYmZT4wKSYmKGk9ITEpLGMmJnQudXNlZER1cGxpY2F0ZXNbZl0pdC5kdW1wPSIqcmVmXyIrZjtlbHNle2lmKGwmJmMmJiF0LnVzZWREdXBsaWNhdGVzW2ZdJiYodC51c2VkRHVwbGljYXRlc1tmXT0hMCkscz09PSJbb2JqZWN0IE9iamVjdF0iKXImJk9iamVjdC5rZXlzKHQuZHVtcCkubGVuZ3RoIT09MD8oR1h0KHQsZSx0LmR1bXAsaSksYyYmKHQuZHVtcD0iJnJlZl8iK2YrdC5kdW1wKSk6KFdYdCh0LGUsdC5kdW1wKSxjJiYodC5kdW1wPSImcmVmXyIrZisiICIrdC5kdW1wKSk7ZWxzZSBpZihzPT09IltvYmplY3QgQXJyYXldIil7dmFyIHU9dC5ub0FycmF5SW5kZW50JiZlPjA/ZS0xOmU7ciYmdC5kdW1wLmxlbmd0aCE9PTA/KGpYdCh0LHUsdC5kdW1wLGkpLGMmJih0LmR1bXA9IiZyZWZfIitmK3QuZHVtcCkpOihVWHQodCx1LHQuZHVtcCksYyYmKHQuZHVtcD0iJnJlZl8iK2YrIiAiK3QuZHVtcCkpfWVsc2UgaWYocz09PSJbb2JqZWN0IFN0cmluZ10iKXQudGFnIT09Ij8iJiZIWHQodCx0LmR1bXAsZSxvKTtlbHNle2lmKHQuc2tpcEludmFsaWQpcmV0dXJuITE7dGhyb3cgbmV3IEo4KCJ1bmFjY2VwdGFibGUga2luZCBvZiBhbiBvYmplY3QgdG8gZHVtcCAiK3MpfXQudGFnIT09bnVsbCYmdC50YWchPT0iPyImJih0LmR1bXA9IiE8Iit0LnRhZysiPiAiK3QuZHVtcCl9cmV0dXJuITB9ZnVuY3Rpb24gWVh0KHQsZSl7dmFyIGE9W10scj1bXSxpLG87Zm9yKEVRKHQsYSxyKSxpPTAsbz1yLmxlbmd0aDtpPG87aSs9MSllLmR1cGxpY2F0ZXMucHVzaChhW3JbaV1dKTtlLnVzZWREdXBsaWNhdGVzPW5ldyBBcnJheShvKX1mdW5jdGlvbiBFUSh0LGUsYSl7dmFyIHIsaSxvO2lmKHQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCIpaWYoaT1lLmluZGV4T2YodCksaSE9PS0xKWEuaW5kZXhPZihpKT09PS0xJiZhLnB1c2goaSk7ZWxzZSBpZihlLnB1c2godCksQXJyYXkuaXNBcnJheSh0KSlmb3IoaT0wLG89dC5sZW5ndGg7aTxvO2krPTEpRVEodFtpXSxlLGEpO2Vsc2UgZm9yKHI9T2JqZWN0LmtleXModCksaT0wLG89ci5sZW5ndGg7aTxvO2krPTEpRVEodFtyW2ldXSxlLGEpfWZ1bmN0aW9uIENZZSh0LGUpe2U9ZXx8e307dmFyIGE9bmV3IElYdChlKTtyZXR1cm4gYS5ub1JlZnN8fFlYdCh0LGEpLG5uKGEsMCx0LCEwLCEwKT9hLmR1bXArYApgOiIifWZ1bmN0aW9uIFpYdCh0LGUpe3JldHVybiBDWWUodCxLOC5leHRlbmQoe3NjaGVtYTp4WHR9LGUpKX1OUS5leHBvcnRzLmR1bXA9Q1llLE5RLmV4cG9ydHMuc2FmZUR1bXA9Wlh0fSk7dmFyIF9ZZT1jdCgoVlUxLHYxKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWFI9aVllKCksVFllPUxZZSgpO2Z1bmN0aW9uIFFSKHQpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRnVuY3Rpb24gIit0KyIgaXMgZGVwcmVjYXRlZCBhbmQgY2Fubm90IGJlIHVzZWQuIil9fXYxLmV4cG9ydHMuVHlwZT1SMSgpLHYxLmV4cG9ydHMuU2NoZW1hPWFuKCksdjEuZXhwb3J0cy5GQUlMU0FGRV9TQ0hFTUE9VlIoKSx2MS5leHBvcnRzLkpTT05fU0NIRU1BPVNRKCksdjEuZXhwb3J0cy5DT1JFX1NDSEVNQT1DUSgpLHYxLmV4cG9ydHMuREVGQVVMVF9TQUZFX1NDSEVNQT1oNigpLHYxLmV4cG9ydHMuREVGQVVMVF9GVUxMX1NDSEVNQT1YOCgpLHYxLmV4cG9ydHMubG9hZD1YUi5sb2FkLHYxLmV4cG9ydHMubG9hZEFsbD1YUi5sb2FkQWxsLHYxLmV4cG9ydHMuc2FmZUxvYWQ9WFIuc2FmZUxvYWQsdjEuZXhwb3J0cy5zYWZlTG9hZEFsbD1YUi5zYWZlTG9hZEFsbCx2MS5leHBvcnRzLmR1bXA9VFllLmR1bXAsdjEuZXhwb3J0cy5zYWZlRHVtcD1UWWUuc2FmZUR1bXAsdjEuZXhwb3J0cy5ZQU1MRXhjZXB0aW9uPXU2KCksdjEuZXhwb3J0cy5NSU5JTUFMX1NDSEVNQT1WUigpLHYxLmV4cG9ydHMuU0FGRV9TQ0hFTUE9aDYoKSx2MS5leHBvcnRzLkRFRkFVTFRfU0NIRU1BPVg4KCksdjEuZXhwb3J0cy5zY2FuPVFSKCJzY2FuIiksdjEuZXhwb3J0cy5wYXJzZT1RUigicGFyc2UiKSx2MS5leHBvcnRzLmNvbXBvc2U9UVIoImNvbXBvc2UiKSx2MS5leHBvcnRzLmFkZENvbnN0cnVjdG9yPVFSKCJhZGRDb25zdHJ1Y3RvciIpfSk7dmFyICRZZT1jdCgoVVUxLEFZZSk9PnsidXNlIHN0cmljdCI7dmFyIFhYdD1fWWUoKTtBWWUuZXhwb3J0cz1YWHR9KTt2YXIgRFllPWN0KEVyPT57InVzZSBzdHJpY3QiO3ZhciBRWHQ9RXImJkVyLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/KGZ1bmN0aW9uKHQsZSxhLHIpe3I9PT12b2lkIDAmJihyPWEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbYV19fSl9KTooZnVuY3Rpb24odCxlLGEscil7cj09PXZvaWQgMCYmKHI9YSksdFtyXT1lW2FdfSkpLEtYdD1FciYmRXIuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT8oZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pfSk6ZnVuY3Rpb24odCxlKXt0LmRlZmF1bHQ9ZX0pLEpYdD1FciYmRXIuX19pbXBvcnRTdGFyfHxmdW5jdGlvbih0KXtpZih0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIGU9e307aWYodCE9bnVsbClmb3IodmFyIGEgaW4gdClhIT09ImRlZmF1bHQiJiZPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LGEpJiZRWHQoZSx0LGEpO3JldHVybiBLWHQoZSx0KSxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRXIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEVyLmpzWWFtbD12b2lkIDA7dmFyIGVRdD1KWHQoJFllKCkpO0VyLmpzWWFtbD1lUXR9KTt2YXIgTlllPWN0KFRhPT57InVzZSBzdHJpY3QiO3ZhciB0UXQ9VGEmJlRhLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/KGZ1bmN0aW9uKHQsZSxhLHIpe3I9PT12b2lkIDAmJihyPWEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbYV19fSl9KTooZnVuY3Rpb24odCxlLGEscil7cj09PXZvaWQgMCYmKHI9YSksdFtyXT1lW2FdfSkpLGFRdD1UYSYmVGEuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT8oZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pfSk6ZnVuY3Rpb24odCxlKXt0LmRlZmF1bHQ9ZX0pLHJRdD1UYSYmVGEuX19pbXBvcnRTdGFyfHxmdW5jdGlvbih0KXtpZih0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIGU9e307aWYodCE9bnVsbClmb3IodmFyIGEgaW4gdClhIT09ImRlZmF1bHQiJiZPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LGEpJiZ0UXQoZSx0LGEpO3JldHVybiBhUXQoZSx0KSxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVGEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFRhLm9iamVjdFRvWWFtbFN0cmluZz1UYS55YW1sU3RyaW5nVG9PYmplY3Q9dm9pZCAwO3ZhciBFWWU9clF0KERZZSgpKTtUYS55YW1sU3RyaW5nVG9PYmplY3Q9YXN5bmModCxlPXt9KT0+RVllLmpzWWFtbC5zYWZlTG9hZCh0KSxUYS5vYmplY3RUb1lhbWxTdHJpbmc9YXN5bmModCxlPXt9KT0+RVllLmpzWWFtbC5zYWZlRHVtcCh0KX0pO2Z1bmN0aW9uIFBRKHQpe2lmKHQpdGhyb3cgdH12YXIgUFllPW4oKCk9Pnt9KTt2YXIgVVllPWN0KChZVTEsVlllKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgS1I9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxJWWU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxGWWU9T2JqZWN0LmRlZmluZVByb3BlcnR5LE9ZZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEJZZT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIEFycmF5LmlzQXJyYXk9PSJmdW5jdGlvbiI/QXJyYXkuaXNBcnJheShlKTpJWWUuY2FsbChlKT09PSJbb2JqZWN0IEFycmF5XSJ9LFJZZT1mdW5jdGlvbihlKXtpZighZXx8SVllLmNhbGwoZSkhPT0iW29iamVjdCBPYmplY3RdIilyZXR1cm4hMTt2YXIgYT1LUi5jYWxsKGUsImNvbnN0cnVjdG9yIikscj1lLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSYmS1IuY2FsbChlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpO2lmKGUuY29uc3RydWN0b3ImJiFhJiYhcilyZXR1cm4hMTt2YXIgaTtmb3IoaSBpbiBlKTtyZXR1cm4gdHlwZW9mIGk+InUifHxLUi5jYWxsKGUsaSl9LEhZZT1mdW5jdGlvbihlLGEpe0ZZZSYmYS5uYW1lPT09Il9fcHJvdG9fXyI/RlllKGUsYS5uYW1lLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTphLm5ld1ZhbHVlLHdyaXRhYmxlOiEwfSk6ZVthLm5hbWVdPWEubmV3VmFsdWV9LHFZZT1mdW5jdGlvbihlLGEpe2lmKGE9PT0iX19wcm90b19fIilpZihLUi5jYWxsKGUsYSkpe2lmKE9ZZSlyZXR1cm4gT1llKGUsYSkudmFsdWV9ZWxzZSByZXR1cm47cmV0dXJuIGVbYV19O1ZZZS5leHBvcnRzPWZ1bmN0aW9uIHQoKXt2YXIgZSxhLHIsaSxvLHMsbD1hcmd1bWVudHNbMF0sZj0xLGM9YXJndW1lbnRzLmxlbmd0aCx1PSExO2Zvcih0eXBlb2YgbD09ImJvb2xlYW4iJiYodT1sLGw9YXJndW1lbnRzWzFdfHx7fSxmPTIpLChsPT1udWxsfHx0eXBlb2YgbCE9Im9iamVjdCImJnR5cGVvZiBsIT0iZnVuY3Rpb24iKSYmKGw9e30pO2Y8YzsrK2YpaWYoZT1hcmd1bWVudHNbZl0sZSE9bnVsbClmb3IoYSBpbiBlKXI9cVllKGwsYSksaT1xWWUoZSxhKSxsIT09aSYmKHUmJmkmJihSWWUoaSl8fChvPUJZZShpKSkpPyhvPyhvPSExLHM9ciYmQlllKHIpP3I6W10pOnM9ciYmUlllKHIpP3I6e30sSFllKGwse25hbWU6YSxuZXdWYWx1ZTp0KHUscyxpKX0pKTp0eXBlb2YgaTwidSImJkhZZShsLHtuYW1lOmEsbmV3VmFsdWU6aX0pKTtyZXR1cm4gbH19KTt2YXIgRm89bigoKT0+e30pO2Z1bmN0aW9uIHRkKHQpe2lmKHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuITE7bGV0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB0KSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gdCl9dmFyIGpZZT1uKCgpPT57fSk7ZnVuY3Rpb24gSVEoKXtsZXQgdD1bXSxlPXtydW46YSx1c2U6cn07cmV0dXJuIGU7ZnVuY3Rpb24gYSguLi5pKXtsZXQgbz0tMSxzPWkucG9wKCk7aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgZnVuY3Rpb24gYXMgbGFzdCBhcmd1bWVudCwgbm90ICIrcyk7bChudWxsLC4uLmkpO2Z1bmN0aW9uIGwoZiwuLi5jKXtsZXQgdT10Wysrb10sZD0tMTtpZihmKXtzKGYpO3JldHVybn1mb3IoOysrZDxpLmxlbmd0aDspKGNbZF09PT1udWxsfHxjW2RdPT09dm9pZCAwKSYmKGNbZF09aVtkXSk7aT1jLHU/V1llKHUsbCkoLi4uYyk6cyhudWxsLC4uLmMpfX1mdW5jdGlvbiByKGkpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGBtaWRkZWx3YXJlYCB0byBiZSBhIGZ1bmN0aW9uLCBub3QgIitpKTtyZXR1cm4gdC5wdXNoKGkpLGV9fWZ1bmN0aW9uIFdZZSh0LGUpe2xldCBhO3JldHVybiByO2Z1bmN0aW9uIHIoLi4ucyl7bGV0IGw9dC5sZW5ndGg+cy5sZW5ndGgsZjtsJiZzLnB1c2goaSk7dHJ5e2Y9dC5hcHBseSh0aGlzLHMpfWNhdGNoKGMpe2xldCB1PWM7aWYobCYmYSl0aHJvdyB1O3JldHVybiBpKHUpfWx8fChmJiZmLnRoZW4mJnR5cGVvZiBmLnRoZW49PSJmdW5jdGlvbiI/Zi50aGVuKG8saSk6ZiBpbnN0YW5jZW9mIEVycm9yP2koZik6byhmKSl9ZnVuY3Rpb24gaShzLC4uLmwpe2F8fChhPSEwLGUocywuLi5sKSl9ZnVuY3Rpb24gbyhzKXtpKG51bGwscyl9fXZhciBHWWU9bigoKT0+e30pO3ZhciBZWWU9bigoKT0+e0dZZSgpfSk7ZnVuY3Rpb24gT28odCl7cmV0dXJuIXR8fHR5cGVvZiB0IT0ib2JqZWN0Ij8iIjoicG9zaXRpb24iaW4gdHx8InR5cGUiaW4gdD9aWWUodC5wb3NpdGlvbik6InN0YXJ0ImluIHR8fCJlbmQiaW4gdD9aWWUodCk6ImxpbmUiaW4gdHx8ImNvbHVtbiJpbiB0P0ZRKHQpOiIifWZ1bmN0aW9uIEZRKHQpe3JldHVybiBYWWUodCYmdC5saW5lKSsiOiIrWFllKHQmJnQuY29sdW1uKX1mdW5jdGlvbiBaWWUodCl7cmV0dXJuIEZRKHQmJnQuc3RhcnQpKyItIitGUSh0JiZ0LmVuZCl9ZnVuY3Rpb24gWFllKHQpe3JldHVybiB0JiZ0eXBlb2YgdD09Im51bWJlciI/dDoxfXZhciBRWWU9bigoKT0+e30pO3ZhciBPUT1uKCgpPT57UVllKCl9KTt2YXIgWTEsS1llPW4oKCk9PntPUSgpO1kxPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSxhLHIpe3N1cGVyKCksdHlwZW9mIGE9PSJzdHJpbmciJiYocj1hLGE9dm9pZCAwKTtsZXQgaT0iIixvPXt9LHM9ITE7aWYoYSYmKCJsaW5lImluIGEmJiJjb2x1bW4iaW4gYT9vPXtwbGFjZTphfToic3RhcnQiaW4gYSYmImVuZCJpbiBhP289e3BsYWNlOmF9OiJ0eXBlImluIGE/bz17YW5jZXN0b3JzOlthXSxwbGFjZTphLnBvc2l0aW9ufTpvPXsuLi5hfSksdHlwZW9mIGU9PSJzdHJpbmciP2k9ZTohby5jYXVzZSYmZSYmKHM9ITAsaT1lLm1lc3NhZ2Usby5jYXVzZT1lKSwhby5ydWxlSWQmJiFvLnNvdXJjZSYmdHlwZW9mIHI9PSJzdHJpbmciKXtsZXQgZj1yLmluZGV4T2YoIjoiKTtmPT09LTE/by5ydWxlSWQ9cjooby5zb3VyY2U9ci5zbGljZSgwLGYpLG8ucnVsZUlkPXIuc2xpY2UoZisxKSl9aWYoIW8ucGxhY2UmJm8uYW5jZXN0b3JzJiZvLmFuY2VzdG9ycyl7bGV0IGY9by5hbmNlc3RvcnNbby5hbmNlc3RvcnMubGVuZ3RoLTFdO2YmJihvLnBsYWNlPWYucG9zaXRpb24pfWxldCBsPW8ucGxhY2UmJiJzdGFydCJpbiBvLnBsYWNlP28ucGxhY2Uuc3RhcnQ6by5wbGFjZTt0aGlzLmFuY2VzdG9ycz1vLmFuY2VzdG9yc3x8dm9pZCAwLHRoaXMuY2F1c2U9by5jYXVzZXx8dm9pZCAwLHRoaXMuY29sdW1uPWw/bC5jb2x1bW46dm9pZCAwLHRoaXMuZmF0YWw9dm9pZCAwLHRoaXMuZmlsZT0iIix0aGlzLm1lc3NhZ2U9aSx0aGlzLmxpbmU9bD9sLmxpbmU6dm9pZCAwLHRoaXMubmFtZT1PbyhvLnBsYWNlKXx8IjE6MSIsdGhpcy5wbGFjZT1vLnBsYWNlfHx2b2lkIDAsdGhpcy5yZWFzb249dGhpcy5tZXNzYWdlLHRoaXMucnVsZUlkPW8ucnVsZUlkfHx2b2lkIDAsdGhpcy5zb3VyY2U9by5zb3VyY2V8fHZvaWQgMCx0aGlzLnN0YWNrPXMmJm8uY2F1c2UmJnR5cGVvZiBvLmNhdXNlLnN0YWNrPT0ic3RyaW5nIj9vLmNhdXNlLnN0YWNrOiIiLHRoaXMuYWN0dWFsPXZvaWQgMCx0aGlzLmV4cGVjdGVkPXZvaWQgMCx0aGlzLm5vdGU9dm9pZCAwLHRoaXMudXJsPXZvaWQgMH19O1kxLnByb3RvdHlwZS5maWxlPSIiLFkxLnByb3RvdHlwZS5uYW1lPSIiLFkxLnByb3RvdHlwZS5yZWFzb249IiIsWTEucHJvdG90eXBlLm1lc3NhZ2U9IiIsWTEucHJvdG90eXBlLnN0YWNrPSIiLFkxLnByb3RvdHlwZS5jb2x1bW49dm9pZCAwLFkxLnByb3RvdHlwZS5saW5lPXZvaWQgMCxZMS5wcm90b3R5cGUuYW5jZXN0b3JzPXZvaWQgMCxZMS5wcm90b3R5cGUuY2F1c2U9dm9pZCAwLFkxLnByb3RvdHlwZS5mYXRhbD12b2lkIDAsWTEucHJvdG90eXBlLnBsYWNlPXZvaWQgMCxZMS5wcm90b3R5cGUucnVsZUlkPXZvaWQgMCxZMS5wcm90b3R5cGUuc291cmNlPXZvaWQgMH0pO3ZhciBKWWU9bigoKT0+e0tZZSgpfSk7ZnVuY3Rpb24gaVF0KHQsZSl7aWYoZSE9PXZvaWQgMCYmdHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTthZCh0KTtsZXQgYT0wLHI9LTEsaT10Lmxlbmd0aCxvO2lmKGU9PT12b2lkIDB8fGUubGVuZ3RoPT09MHx8ZS5sZW5ndGg+dC5sZW5ndGgpe2Zvcig7aS0tOylpZih0LmNvZGVQb2ludEF0KGkpPT09NDcpe2lmKG8pe2E9aSsxO2JyZWFrfX1lbHNlIHI8MCYmKG89ITAscj1pKzEpO3JldHVybiByPDA/IiI6dC5zbGljZShhLHIpfWlmKGU9PT10KXJldHVybiIiO2xldCBzPS0xLGw9ZS5sZW5ndGgtMTtmb3IoO2ktLTspaWYodC5jb2RlUG9pbnRBdChpKT09PTQ3KXtpZihvKXthPWkrMTticmVha319ZWxzZSBzPDAmJihvPSEwLHM9aSsxKSxsPi0xJiYodC5jb2RlUG9pbnRBdChpKT09PWUuY29kZVBvaW50QXQobC0tKT9sPDAmJihyPWkpOihsPS0xLHI9cykpO3JldHVybiBhPT09cj9yPXM6cjwwJiYocj10Lmxlbmd0aCksdC5zbGljZShhLHIpfWZ1bmN0aW9uIG9RdCh0KXtpZihhZCh0KSx0Lmxlbmd0aD09PTApcmV0dXJuIi4iO2xldCBlPS0xLGE9dC5sZW5ndGgscjtmb3IoOy0tYTspaWYodC5jb2RlUG9pbnRBdChhKT09PTQ3KXtpZihyKXtlPWE7YnJlYWt9fWVsc2Ugcnx8KHI9ITApO3JldHVybiBlPDA/dC5jb2RlUG9pbnRBdCgwKT09PTQ3PyIvIjoiLiI6ZT09PTEmJnQuY29kZVBvaW50QXQoMCk9PT00Nz8iLy8iOnQuc2xpY2UoMCxlKX1mdW5jdGlvbiBzUXQodCl7YWQodCk7bGV0IGU9dC5sZW5ndGgsYT0tMSxyPTAsaT0tMSxvPTAscztmb3IoO2UtLTspe2xldCBsPXQuY29kZVBvaW50QXQoZSk7aWYobD09PTQ3KXtpZihzKXtyPWUrMTticmVha31jb250aW51ZX1hPDAmJihzPSEwLGE9ZSsxKSxsPT09NDY/aTwwP2k9ZTpvIT09MSYmKG89MSk6aT4tMSYmKG89LTEpfXJldHVybiBpPDB8fGE8MHx8bz09PTB8fG89PT0xJiZpPT09YS0xJiZpPT09cisxPyIiOnQuc2xpY2UoaSxhKX1mdW5jdGlvbiBuUXQoLi4udCl7bGV0IGU9LTEsYTtmb3IoOysrZTx0Lmxlbmd0aDspYWQodFtlXSksdFtlXSYmKGE9YT09PXZvaWQgMD90W2VdOmErIi8iK3RbZV0pO3JldHVybiBhPT09dm9pZCAwPyIuIjpsUXQoYSl9ZnVuY3Rpb24gbFF0KHQpe2FkKHQpO2xldCBlPXQuY29kZVBvaW50QXQoMCk9PT00NyxhPWNRdCh0LCFlKTtyZXR1cm4gYS5sZW5ndGg9PT0wJiYhZSYmKGE9Ii4iKSxhLmxlbmd0aD4wJiZ0LmNvZGVQb2ludEF0KHQubGVuZ3RoLTEpPT09NDcmJihhKz0iLyIpLGU/Ii8iK2E6YX1mdW5jdGlvbiBjUXQodCxlKXtsZXQgYT0iIixyPTAsaT0tMSxvPTAscz0tMSxsLGY7Zm9yKDsrK3M8PXQubGVuZ3RoOyl7aWYoczx0Lmxlbmd0aClsPXQuY29kZVBvaW50QXQocyk7ZWxzZXtpZihsPT09NDcpYnJlYWs7bD00N31pZihsPT09NDcpe2lmKCEoaT09PXMtMXx8bz09PTEpKWlmKGkhPT1zLTEmJm89PT0yKXtpZihhLmxlbmd0aDwyfHxyIT09Mnx8YS5jb2RlUG9pbnRBdChhLmxlbmd0aC0xKSE9PTQ2fHxhLmNvZGVQb2ludEF0KGEubGVuZ3RoLTIpIT09NDYpe2lmKGEubGVuZ3RoPjIpe2lmKGY9YS5sYXN0SW5kZXhPZigiLyIpLGYhPT1hLmxlbmd0aC0xKXtmPDA/KGE9IiIscj0wKTooYT1hLnNsaWNlKDAsZikscj1hLmxlbmd0aC0xLWEubGFzdEluZGV4T2YoIi8iKSksaT1zLG89MDtjb250aW51ZX19ZWxzZSBpZihhLmxlbmd0aD4wKXthPSIiLHI9MCxpPXMsbz0wO2NvbnRpbnVlfX1lJiYoYT1hLmxlbmd0aD4wP2ErIi8uLiI6Ii4uIixyPTIpfWVsc2UgYS5sZW5ndGg+MD9hKz0iLyIrdC5zbGljZShpKzEscyk6YT10LnNsaWNlKGkrMSxzKSxyPXMtaS0xO2k9cyxvPTB9ZWxzZSBsPT09NDYmJm8+LTE/bysrOm89LTF9cmV0dXJuIGF9ZnVuY3Rpb24gYWQodCl7aWYodHlwZW9mIHQhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSl9dmFyIFphLGVaZT1uKCgpPT57WmE9e2Jhc2VuYW1lOmlRdCxkaXJuYW1lOm9RdCxleHRuYW1lOnNRdCxqb2luOm5RdCxzZXA6Ii8ifX0pO2Z1bmN0aW9uIGRRdCgpe3JldHVybiIvIn12YXIgdFplLGFaZT1uKCgpPT57dFplPXtjd2Q6ZFF0fX0pO2Z1bmN0aW9uIHY2KHQpe3JldHVybiEhKHQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJiJocmVmImluIHQmJnQuaHJlZiYmInByb3RvY29sImluIHQmJnQucHJvdG9jb2wmJnQuYXV0aD09PXZvaWQgMCl9dmFyIEJRPW4oKCk9Pnt9KTtmdW5jdGlvbiByWmUodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXQ9bmV3IFVSTCh0KTtlbHNlIGlmKCF2Nih0KSl7bGV0IGU9bmV3IFR5cGVFcnJvcignVGhlICJwYXRoIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIFVSTC4gUmVjZWl2ZWQgYCcrdCsiYCIpO3Rocm93IGUuY29kZT0iRVJSX0lOVkFMSURfQVJHX1RZUEUiLGV9aWYodC5wcm90b2NvbCE9PSJmaWxlOiIpe2xldCBlPW5ldyBUeXBlRXJyb3IoIlRoZSBVUkwgbXVzdCBiZSBvZiBzY2hlbWUgZmlsZSIpO3Rocm93IGUuY29kZT0iRVJSX0lOVkFMSURfVVJMX1NDSEVNRSIsZX1yZXR1cm4gZlF0KHQpfWZ1bmN0aW9uIGZRdCh0KXtpZih0Lmhvc3RuYW1lIT09IiIpe2xldCByPW5ldyBUeXBlRXJyb3IoJ0ZpbGUgVVJMIGhvc3QgbXVzdCBiZSAibG9jYWxob3N0IiBvciBlbXB0eSBvbiBkYXJ3aW4nKTt0aHJvdyByLmNvZGU9IkVSUl9JTlZBTElEX0ZJTEVfVVJMX0hPU1QiLHJ9bGV0IGU9dC5wYXRobmFtZSxhPS0xO2Zvcig7KythPGUubGVuZ3RoOylpZihlLmNvZGVQb2ludEF0KGEpPT09MzcmJmUuY29kZVBvaW50QXQoYSsxKT09PTUwKXtsZXQgcj1lLmNvZGVQb2ludEF0KGErMik7aWYocj09PTcwfHxyPT09MTAyKXtsZXQgaT1uZXcgVHlwZUVycm9yKCJGaWxlIFVSTCBwYXRoIG11c3Qgbm90IGluY2x1ZGUgZW5jb2RlZCAvIGNoYXJhY3RlcnMiKTt0aHJvdyBpLmNvZGU9IkVSUl9JTlZBTElEX0ZJTEVfVVJMX1BBVEgiLGl9fXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9dmFyIGlaZT1uKCgpPT57QlEoKTtCUSgpfSk7ZnVuY3Rpb24gSFEodCxlKXtpZih0JiZ0LmluY2x1ZGVzKFphLnNlcCkpdGhyb3cgbmV3IEVycm9yKCJgIitlKyJgIGNhbm5vdCBiZSBhIHBhdGg6IGRpZCBub3QgZXhwZWN0IGAiK1phLnNlcCsiYCIpfWZ1bmN0aW9uIHFRKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJgIitlKyJgIGNhbm5vdCBiZSBlbXB0eSIpfWZ1bmN0aW9uIG9aZSh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiU2V0dGluZyBgIitlKyJgIHJlcXVpcmVzIGBwYXRoYCB0byBiZSBzZXQgdG9vIil9ZnVuY3Rpb24gdVF0KHQpe3JldHVybiEhKHQmJnR5cGVvZiB0PT0ib2JqZWN0IiYmImJ5dGVMZW5ndGgiaW4gdCYmImJ5dGVPZmZzZXQiaW4gdCl9dmFyIFJRLHJkLHNaZT1uKCgpPT57SlllKCk7ZVplKCk7YVplKCk7aVplKCk7UlE9WyJoaXN0b3J5IiwicGF0aCIsImJhc2VuYW1lIiwic3RlbSIsImV4dG5hbWUiLCJkaXJuYW1lIl0scmQ9Y2xhc3N7Y29uc3RydWN0b3IoZSl7bGV0IGE7ZT92NihlKT9hPXtwYXRoOmV9OnR5cGVvZiBlPT0ic3RyaW5nInx8dVF0KGUpP2E9e3ZhbHVlOmV9OmE9ZTphPXt9LHRoaXMuY3dkPSJjd2QiaW4gYT8iIjp0WmUuY3dkKCksdGhpcy5kYXRhPXt9LHRoaXMuaGlzdG9yeT1bXSx0aGlzLm1lc3NhZ2VzPVtdLHRoaXMudmFsdWUsdGhpcy5tYXAsdGhpcy5yZXN1bHQsdGhpcy5zdG9yZWQ7bGV0IHI9LTE7Zm9yKDsrK3I8UlEubGVuZ3RoOyl7bGV0IG89UlFbcl07byBpbiBhJiZhW29dIT09dm9pZCAwJiZhW29dIT09bnVsbCYmKHRoaXNbb109bz09PSJoaXN0b3J5Ij9bLi4uYVtvXV06YVtvXSl9bGV0IGk7Zm9yKGkgaW4gYSlSUS5pbmNsdWRlcyhpKXx8KHRoaXNbaV09YVtpXSl9Z2V0IGJhc2VuYW1lKCl7cmV0dXJuIHR5cGVvZiB0aGlzLnBhdGg9PSJzdHJpbmciP1phLmJhc2VuYW1lKHRoaXMucGF0aCk6dm9pZCAwfXNldCBiYXNlbmFtZShlKXtxUShlLCJiYXNlbmFtZSIpLEhRKGUsImJhc2VuYW1lIiksdGhpcy5wYXRoPVphLmpvaW4odGhpcy5kaXJuYW1lfHwiIixlKX1nZXQgZGlybmFtZSgpe3JldHVybiB0eXBlb2YgdGhpcy5wYXRoPT0ic3RyaW5nIj9aYS5kaXJuYW1lKHRoaXMucGF0aCk6dm9pZCAwfXNldCBkaXJuYW1lKGUpe29aZSh0aGlzLmJhc2VuYW1lLCJkaXJuYW1lIiksdGhpcy5wYXRoPVphLmpvaW4oZXx8IiIsdGhpcy5iYXNlbmFtZSl9Z2V0IGV4dG5hbWUoKXtyZXR1cm4gdHlwZW9mIHRoaXMucGF0aD09InN0cmluZyI/WmEuZXh0bmFtZSh0aGlzLnBhdGgpOnZvaWQgMH1zZXQgZXh0bmFtZShlKXtpZihIUShlLCJleHRuYW1lIiksb1plKHRoaXMuZGlybmFtZSwiZXh0bmFtZSIpLGUpe2lmKGUuY29kZVBvaW50QXQoMCkhPT00Nil0aHJvdyBuZXcgRXJyb3IoImBleHRuYW1lYCBtdXN0IHN0YXJ0IHdpdGggYC5gIik7aWYoZS5pbmNsdWRlcygiLiIsMSkpdGhyb3cgbmV3IEVycm9yKCJgZXh0bmFtZWAgY2Fubm90IGNvbnRhaW4gbXVsdGlwbGUgZG90cyIpfXRoaXMucGF0aD1aYS5qb2luKHRoaXMuZGlybmFtZSx0aGlzLnN0ZW0rKGV8fCIiKSl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeS5sZW5ndGgtMV19c2V0IHBhdGgoZSl7djYoZSkmJihlPXJaZShlKSkscVEoZSwicGF0aCIpLHRoaXMucGF0aCE9PWUmJnRoaXMuaGlzdG9yeS5wdXNoKGUpfWdldCBzdGVtKCl7cmV0dXJuIHR5cGVvZiB0aGlzLnBhdGg9PSJzdHJpbmciP1phLmJhc2VuYW1lKHRoaXMucGF0aCx0aGlzLmV4dG5hbWUpOnZvaWQgMH1zZXQgc3RlbShlKXtxUShlLCJzdGVtIiksSFEoZSwic3RlbSIpLHRoaXMucGF0aD1aYS5qb2luKHRoaXMuZGlybmFtZXx8IiIsZSsodGhpcy5leHRuYW1lfHwiIikpfWZhaWwoZSxhLHIpe2xldCBpPXRoaXMubWVzc2FnZShlLGEscik7dGhyb3cgaS5mYXRhbD0hMCxpfWluZm8oZSxhLHIpe2xldCBpPXRoaXMubWVzc2FnZShlLGEscik7cmV0dXJuIGkuZmF0YWw9dm9pZCAwLGl9bWVzc2FnZShlLGEscil7bGV0IGk9bmV3IFkxKGUsYSxyKTtyZXR1cm4gdGhpcy5wYXRoJiYoaS5uYW1lPXRoaXMucGF0aCsiOiIraS5uYW1lLGkuZmlsZT10aGlzLnBhdGgpLGkuZmF0YWw9ITEsdGhpcy5tZXNzYWdlcy5wdXNoKGkpLGl9dG9TdHJpbmcoZSl7cmV0dXJuIHRoaXMudmFsdWU9PT12b2lkIDA/IiI6dHlwZW9mIHRoaXMudmFsdWU9PSJzdHJpbmciP3RoaXMudmFsdWU6bmV3IFRleHREZWNvZGVyKGV8fHZvaWQgMCkuZGVjb2RlKHRoaXMudmFsdWUpfX19KTt2YXIgblplPW4oKCk9PntzWmUoKX0pO3ZhciBsWmUsY1plPW4oKCk9PntsWmU9KGZ1bmN0aW9uKHQpe2xldCByPXRoaXMuY29uc3RydWN0b3IucHJvdG90eXBlLGk9clt0XSxvPWZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkobyxhcmd1bWVudHMpfTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG8sciksb30pfSk7ZnVuY3Rpb24gVVEodCxlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYCIrdCsiYCB3aXRob3V0IGBwYXJzZXJgIil9ZnVuY3Rpb24galEodCxlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYCIrdCsiYCB3aXRob3V0IGBjb21waWxlcmAiKX1mdW5jdGlvbiBXUSh0LGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsbCBgIit0KyJgIG9uIGEgZnJvemVuIHByb2Nlc3Nvci5cbkNyZWF0ZSBhIG5ldyBwcm9jZXNzb3IgZmlyc3QsIGJ5IGNhbGxpbmcgaXQ6IHVzZSBgcHJvY2Vzc29yKClgIGluc3RlYWQgb2YgYHByb2Nlc3NvcmAuIil9ZnVuY3Rpb24gZFplKHQpe2lmKCF0ZCh0KXx8dHlwZW9mIHQudHlwZSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgbm9kZSwgZ290IGAiK3QrImAiKX1mdW5jdGlvbiBmWmUodCxlLGEpe2lmKCFhKXRocm93IG5ldyBFcnJvcigiYCIrdCsiYCBmaW5pc2hlZCBhc3luYy4gVXNlIGAiK2UrImAgaW5zdGVhZCIpfWZ1bmN0aW9uIEpSKHQpe3JldHVybiBoUXQodCk/dDpuZXcgcmQodCl9ZnVuY3Rpb24gaFF0KHQpe3JldHVybiEhKHQmJnR5cGVvZiB0PT0ib2JqZWN0IiYmIm1lc3NhZ2UiaW4gdCYmIm1lc3NhZ2VzImluIHQpfWZ1bmN0aW9uIG1RdCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmcifHxnUXQodCl9ZnVuY3Rpb24gZ1F0KHQpe3JldHVybiEhKHQmJnR5cGVvZiB0PT0ib2JqZWN0IiYmImJ5dGVMZW5ndGgiaW4gdCYmImJ5dGVPZmZzZXQiaW4gdCl9dmFyIGVILHBRdCxWUSxpZCx1WmU9bigoKT0+e1BZZSgpO2VIPU4yKFVZZSgpLDEpO0ZvKCk7alllKCk7WVllKCk7blplKCk7Y1plKCk7cFF0PXt9Lmhhc093blByb3BlcnR5LFZRPWNsYXNzIHQgZXh0ZW5kcyBsWmV7Y29uc3RydWN0b3IoKXtzdXBlcigiY29weSIpLHRoaXMuQ29tcGlsZXI9dm9pZCAwLHRoaXMuUGFyc2VyPXZvaWQgMCx0aGlzLmF0dGFjaGVycz1bXSx0aGlzLmNvbXBpbGVyPXZvaWQgMCx0aGlzLmZyZWV6ZUluZGV4PS0xLHRoaXMuZnJvemVuPXZvaWQgMCx0aGlzLm5hbWVzcGFjZT17fSx0aGlzLnBhcnNlcj12b2lkIDAsdGhpcy50cmFuc2Zvcm1lcnM9SVEoKX1jb3B5KCl7bGV0IGU9bmV3IHQsYT0tMTtmb3IoOysrYTx0aGlzLmF0dGFjaGVycy5sZW5ndGg7KXtsZXQgcj10aGlzLmF0dGFjaGVyc1thXTtlLnVzZSguLi5yKX1yZXR1cm4gZS5kYXRhKCgwLGVILmRlZmF1bHQpKCEwLHt9LHRoaXMubmFtZXNwYWNlKSksZX1kYXRhKGUsYSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9hcmd1bWVudHMubGVuZ3RoPT09Mj8oV1EoImRhdGEiLHRoaXMuZnJvemVuKSx0aGlzLm5hbWVzcGFjZVtlXT1hLHRoaXMpOnBRdC5jYWxsKHRoaXMubmFtZXNwYWNlLGUpJiZ0aGlzLm5hbWVzcGFjZVtlXXx8dm9pZCAwOmU/KFdRKCJkYXRhIix0aGlzLmZyb3plbiksdGhpcy5uYW1lc3BhY2U9ZSx0aGlzKTp0aGlzLm5hbWVzcGFjZX1mcmVlemUoKXtpZih0aGlzLmZyb3plbilyZXR1cm4gdGhpcztsZXQgZT10aGlzO2Zvcig7Kyt0aGlzLmZyZWV6ZUluZGV4PHRoaXMuYXR0YWNoZXJzLmxlbmd0aDspe2xldFthLC4uLnJdPXRoaXMuYXR0YWNoZXJzW3RoaXMuZnJlZXplSW5kZXhdO2lmKHJbMF09PT0hMSljb250aW51ZTtyWzBdPT09ITAmJihyWzBdPXZvaWQgMCk7bGV0IGk9YS5jYWxsKGUsLi4ucik7dHlwZW9mIGk9PSJmdW5jdGlvbiImJnRoaXMudHJhbnNmb3JtZXJzLnVzZShpKX1yZXR1cm4gdGhpcy5mcm96ZW49ITAsdGhpcy5mcmVlemVJbmRleD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdGhpc31wYXJzZShlKXt0aGlzLmZyZWV6ZSgpO2xldCBhPUpSKGUpLHI9dGhpcy5wYXJzZXJ8fHRoaXMuUGFyc2VyO3JldHVybiBVUSgicGFyc2UiLHIpLHIoU3RyaW5nKGEpLGEpfXByb2Nlc3MoZSxhKXtsZXQgcj10aGlzO3JldHVybiB0aGlzLmZyZWV6ZSgpLFVRKCJwcm9jZXNzIix0aGlzLnBhcnNlcnx8dGhpcy5QYXJzZXIpLGpRKCJwcm9jZXNzIix0aGlzLmNvbXBpbGVyfHx0aGlzLkNvbXBpbGVyKSxhP2kodm9pZCAwLGEpOm5ldyBQcm9taXNlKGkpO2Z1bmN0aW9uIGkobyxzKXtsZXQgbD1KUihlKSxmPXIucGFyc2UobCk7ci5ydW4oZixsLGZ1bmN0aW9uKHUsZCxoKXtpZih1fHwhZHx8IWgpcmV0dXJuIGModSk7bGV0IGc9ZCxiPXIuc3RyaW5naWZ5KGcsaCk7bVF0KGIpP2gudmFsdWU9YjpoLnJlc3VsdD1iLGModSxoKX0pO2Z1bmN0aW9uIGModSxkKXt1fHwhZD9zKHUpOm8/byhkKTphKHZvaWQgMCxkKX19fXByb2Nlc3NTeW5jKGUpe2xldCBhPSExLHI7cmV0dXJuIHRoaXMuZnJlZXplKCksVVEoInByb2Nlc3NTeW5jIix0aGlzLnBhcnNlcnx8dGhpcy5QYXJzZXIpLGpRKCJwcm9jZXNzU3luYyIsdGhpcy5jb21waWxlcnx8dGhpcy5Db21waWxlciksdGhpcy5wcm9jZXNzKGUsaSksZlplKCJwcm9jZXNzU3luYyIsInByb2Nlc3MiLGEpLHI7ZnVuY3Rpb24gaShvLHMpe2E9ITAsUFEobykscj1zfX1ydW4oZSxhLHIpe2RaZShlKSx0aGlzLmZyZWV6ZSgpO2xldCBpPXRoaXMudHJhbnNmb3JtZXJzO3JldHVybiFyJiZ0eXBlb2YgYT09ImZ1bmN0aW9uIiYmKHI9YSxhPXZvaWQgMCkscj9vKHZvaWQgMCxyKTpuZXcgUHJvbWlzZShvKTtmdW5jdGlvbiBvKHMsbCl7bGV0IGY9SlIoYSk7aS5ydW4oZSxmLGMpO2Z1bmN0aW9uIGModSxkLGgpe2xldCBnPWR8fGU7dT9sKHUpOnM/cyhnKTpyKHZvaWQgMCxnLGgpfX19cnVuU3luYyhlLGEpe2xldCByPSExLGk7cmV0dXJuIHRoaXMucnVuKGUsYSxvKSxmWmUoInJ1blN5bmMiLCJydW4iLHIpLGk7ZnVuY3Rpb24gbyhzLGwpe1BRKHMpLGk9bCxyPSEwfX1zdHJpbmdpZnkoZSxhKXt0aGlzLmZyZWV6ZSgpO2xldCByPUpSKGEpLGk9dGhpcy5jb21waWxlcnx8dGhpcy5Db21waWxlcjtyZXR1cm4galEoInN0cmluZ2lmeSIsaSksZFplKGUpLGkoZSxyKX11c2UoZSwuLi5hKXtsZXQgcj10aGlzLmF0dGFjaGVycyxpPXRoaXMubmFtZXNwYWNlO2lmKFdRKCJ1c2UiLHRoaXMuZnJvemVuKSxlIT1udWxsKWlmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKWYoZSxhKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0IilBcnJheS5pc0FycmF5KGUpP2woZSk6cyhlKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGAiK2UrImAiKTtyZXR1cm4gdGhpcztmdW5jdGlvbiBvKGMpe2lmKHR5cGVvZiBjPT0iZnVuY3Rpb24iKWYoYyxbXSk7ZWxzZSBpZih0eXBlb2YgYz09Im9iamVjdCIpaWYoQXJyYXkuaXNBcnJheShjKSl7bGV0W3UsLi4uZF09YztmKHUsZCl9ZWxzZSBzKGMpO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgdXNhYmxlIHZhbHVlLCBub3QgYCIrYysiYCIpfWZ1bmN0aW9uIHMoYyl7aWYoISgicGx1Z2lucyJpbiBjKSYmISgic2V0dGluZ3MiaW4gYykpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB1c2FibGUgdmFsdWUgYnV0IHJlY2VpdmVkIGFuIGVtcHR5IHByZXNldCwgd2hpY2ggaXMgcHJvYmFibHkgYSBtaXN0YWtlOiBwcmVzZXRzIHR5cGljYWxseSBjb21lIHdpdGggYHBsdWdpbnNgIGFuZCBzb21ldGltZXMgd2l0aCBgc2V0dGluZ3NgLCBidXQgdGhpcyBoYXMgbmVpdGhlciIpO2woYy5wbHVnaW5zKSxjLnNldHRpbmdzJiYoaS5zZXR0aW5ncz0oMCxlSC5kZWZhdWx0KSghMCxpLnNldHRpbmdzLGMuc2V0dGluZ3MpKX1mdW5jdGlvbiBsKGMpe2xldCB1PS0xO2lmKGMhPW51bGwpaWYoQXJyYXkuaXNBcnJheShjKSlmb3IoOysrdTxjLmxlbmd0aDspe2xldCBkPWNbdV07byhkKX1lbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgbGlzdCBvZiBwbHVnaW5zLCBub3QgYCIrYysiYCIpfWZ1bmN0aW9uIGYoYyx1KXtsZXQgZD0tMSxoPS0xO2Zvcig7KytkPHIubGVuZ3RoOylpZihyW2RdWzBdPT09Yyl7aD1kO2JyZWFrfWlmKGg9PT0tMSlyLnB1c2goW2MsLi4udV0pO2Vsc2UgaWYodS5sZW5ndGg+MCl7bGV0W2csLi4uYl09dSx4PXJbaF1bMV07dGQoeCkmJnRkKGcpJiYoZz0oMCxlSC5kZWZhdWx0KSghMCx4LGcpKSxyW2hdPVtjLGcsLi4uYl19fX19LGlkPW5ldyBWUSgpLmZyZWV6ZSgpfSk7dmFyIHBaZT1uKCgpPT57dVplKCl9KTtmdW5jdGlvbiB3Nih0LGUpe2xldCBhPVN0cmluZyh0KTtpZih0eXBlb2YgZSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgY2hhcmFjdGVyIik7bGV0IHI9MCxpPWEuaW5kZXhPZihlKTtmb3IoO2khPT0tMTspcisrLGk9YS5pbmRleE9mKGUsaStlLmxlbmd0aCk7cmV0dXJuIHJ9dmFyIEdRPW4oKCk9Pnt9KTtmdW5jdGlvbiBsbih0KXtyZXR1cm4gdCE9PW51bGwmJih0PDMyfHx0PT09MTI3KX1mdW5jdGlvbiBQZSh0KXtyZXR1cm4gdCE9PW51bGwmJnQ8LTJ9ZnVuY3Rpb24gd3QodCl7cmV0dXJuIHQhPT1udWxsJiYodDwwfHx0PT09MzIpfWZ1bmN0aW9uIEdlKHQpe3JldHVybiB0PT09LTJ8fHQ9PT0tMXx8dD09PTMyfWZ1bmN0aW9uIEJvKHQpe3JldHVybiBlO2Z1bmN0aW9uIGUoYSl7cmV0dXJuIGEhPT1udWxsJiZhPi0xJiZ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9fXZhciBIMSx5MSxoWmUsb2QsbVplLGdaZSxjbixOcixrdD1uKCgpPT57SDE9Qm8oL1tBLVphLXpdLykseTE9Qm8oL1tcZEEtWmEtel0vKSxoWmU9Qm8oL1sjLScqK1wtLTk9P0EtWl4tfl0vKTtvZD1CbygvXGQvKSxtWmU9Qm8oL1tcZEEtRmEtZl0vKSxnWmU9Qm8oL1shLS86LUBbLWB7LX5dLyk7Y249Qm8oL1xwe1B9fFxwe1N9L3UpLE5yPUJvKC9ccy8pfSk7ZnVuY3Rpb24geFF0KHQpe2xldCBlPVtdLGE9LTE7Zm9yKDsrK2E8dC5sZW5ndGg7KWVbYV09TWkodFthXSk7cmV0dXJuIHRIKHIpO2Z1bmN0aW9uIHIoLi4uaSl7bGV0IG89LTE7Zm9yKDsrK288ZS5sZW5ndGg7KWlmKGVbb10uYXBwbHkodGhpcyxpKSlyZXR1cm4hMDtyZXR1cm4hMX19ZnVuY3Rpb24gYlF0KHQpe2xldCBlPXQ7cmV0dXJuIHRIKGEpO2Z1bmN0aW9uIGEocil7bGV0IGk9cixvO2ZvcihvIGluIHQpaWYoaVtvXSE9PWVbb10pcmV0dXJuITE7cmV0dXJuITB9fWZ1bmN0aW9uIHZRdCh0KXtyZXR1cm4gdEgoZSk7ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSYmYS50eXBlPT09dH19ZnVuY3Rpb24gdEgodCl7cmV0dXJuIGU7ZnVuY3Rpb24gZShhLHIsaSl7cmV0dXJuISEoeFplKGEpJiZ0LmNhbGwodGhpcyxhLHR5cGVvZiByPT0ibnVtYmVyIj9yOnZvaWQgMCxpfHx2b2lkIDApKX19ZnVuY3Rpb24geVF0KCl7cmV0dXJuITB9ZnVuY3Rpb24geFplKHQpe3JldHVybiB0IT09bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiYidHlwZSJpbiB0fXZhciBiWmUsTWksdlplPW4oKCk9PntiWmU9KGZ1bmN0aW9uKHQsZSxhLHIsaSl7bGV0IG89TWkoZSk7aWYoYSE9bnVsbCYmKHR5cGVvZiBhIT0ibnVtYmVyInx8YTwwfHxhPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHBvc2l0aXZlIGZpbml0ZSBpbmRleCIpO2lmKHIhPW51bGwmJighYlplKHIpfHwhci5jaGlsZHJlbikpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBwYXJlbnQgbm9kZSIpO2lmKHI9PW51bGwhPShhPT1udWxsKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGJvdGggcGFyZW50IGFuZCBpbmRleCIpO3JldHVybiB4WmUodCk/by5jYWxsKGksdCxhLHIpOiExfSksTWk9KGZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHlRdDtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIilyZXR1cm4gdEgodCk7aWYodHlwZW9mIHQ9PSJvYmplY3QiKXJldHVybiBBcnJheS5pc0FycmF5KHQpP3hRdCh0KTpiUXQodCk7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB2UXQodCk7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBmdW5jdGlvbiwgc3RyaW5nLCBvciBvYmplY3QgYXMgdGVzdCIpfSl9KTt2YXIgYUg9bigoKT0+e3ZaZSgpfSk7dmFyIHlaZT1uKCgpPT57fSk7ZnVuY3Rpb24gc2QodCxlLGEscil7bGV0IGk7dHlwZW9mIGU9PSJmdW5jdGlvbiImJnR5cGVvZiBhIT0iZnVuY3Rpb24iPyhyPWEsYT1lKTppPWU7bGV0IG89TWkoaSkscz1yPy0xOjE7bCh0LHZvaWQgMCxbXSkoKTtmdW5jdGlvbiBsKGYsYyx1KXtsZXQgZD1mJiZ0eXBlb2YgZj09Im9iamVjdCI/Zjp7fTtpZih0eXBlb2YgZC50eXBlPT0ic3RyaW5nIil7bGV0IGc9dHlwZW9mIGQudGFnTmFtZT09InN0cmluZyI/ZC50YWdOYW1lOnR5cGVvZiBkLm5hbWU9PSJzdHJpbmciP2QubmFtZTp2b2lkIDA7T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIm5hbWUiLHt2YWx1ZToibm9kZSAoIisoZi50eXBlKyhnPyI8IitnKyI+IjoiIikpKyIpIn0pfXJldHVybiBoO2Z1bmN0aW9uIGgoKXtsZXQgZz13WmUsYix4LG07aWYoKCFlfHxvKGYsYyx1W3UubGVuZ3RoLTFdfHx2b2lkIDApKSYmKGc9d1F0KGEoZix1KSksZ1swXT09PWRuKSlyZXR1cm4gZztpZigiY2hpbGRyZW4iaW4gZiYmZi5jaGlsZHJlbil7bGV0IHY9ZjtpZih2LmNoaWxkcmVuJiZnWzBdIT09aUgpZm9yKHg9KHI/di5jaGlsZHJlbi5sZW5ndGg6LTEpK3MsbT11LmNvbmNhdCh2KTt4Pi0xJiZ4PHYuY2hpbGRyZW4ubGVuZ3RoOyl7bGV0IHk9di5jaGlsZHJlblt4XTtpZihiPWwoeSx4LG0pKCksYlswXT09PWRuKXJldHVybiBiO3g9dHlwZW9mIGJbMV09PSJudW1iZXIiP2JbMV06eCtzfX1yZXR1cm4gZ319fWZ1bmN0aW9uIHdRdCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90OnR5cGVvZiB0PT0ibnVtYmVyIj9bckgsdF06dD09bnVsbD93WmU6W3RdfXZhciB3WmUsckgsZG4saUgsTVplPW4oKCk9PnthSCgpO3laZSgpO3daZT1bXSxySD0hMCxkbj0hMSxpSD0ic2tpcCJ9KTt2YXIgb0g9bigoKT0+e01aZSgpfSk7ZnVuY3Rpb24gWVEodCxlLGEpe2xldCBpPU1pKChhfHx7fSkuaWdub3JlfHxbXSksbz1NUXQoZSkscz0tMTtmb3IoOysrczxvLmxlbmd0aDspc2QodCwidGV4dCIsbCk7ZnVuY3Rpb24gbChjLHUpe2xldCBkPS0xLGg7Zm9yKDsrK2Q8dS5sZW5ndGg7KXtsZXQgZz11W2RdLGI9aD9oLmNoaWxkcmVuOnZvaWQgMDtpZihpKGcsYj9iLmluZGV4T2YoZyk6dm9pZCAwLGgpKXJldHVybjtoPWd9aWYoaClyZXR1cm4gZihjLHUpfWZ1bmN0aW9uIGYoYyx1KXtsZXQgZD11W3UubGVuZ3RoLTFdLGg9b1tzXVswXSxnPW9bc11bMV0sYj0wLG09ZC5jaGlsZHJlbi5pbmRleE9mKGMpLHY9ITEseT1bXTtoLmxhc3RJbmRleD0wO2xldCB3PWguZXhlYyhjLnZhbHVlKTtmb3IoO3c7KXtsZXQgRT13LmluZGV4LEM9e2luZGV4OncuaW5kZXgsaW5wdXQ6dy5pbnB1dCxzdGFjazpbLi4udSxjXX0sej1nKC4uLncsQyk7aWYodHlwZW9mIHo9PSJzdHJpbmciJiYoej16Lmxlbmd0aD4wP3t0eXBlOiJ0ZXh0Iix2YWx1ZTp6fTp2b2lkIDApLHo9PT0hMT9oLmxhc3RJbmRleD1FKzE6KGIhPT1FJiZ5LnB1c2goe3R5cGU6InRleHQiLHZhbHVlOmMudmFsdWUuc2xpY2UoYixFKX0pLEFycmF5LmlzQXJyYXkoeik/eS5wdXNoKC4uLnopOnomJnkucHVzaCh6KSxiPUUrd1swXS5sZW5ndGgsdj0hMCksIWguZ2xvYmFsKWJyZWFrO3c9aC5leGVjKGMudmFsdWUpfXJldHVybiB2PyhiPGMudmFsdWUubGVuZ3RoJiZ5LnB1c2goe3R5cGU6InRleHQiLHZhbHVlOmMudmFsdWUuc2xpY2UoYil9KSxkLmNoaWxkcmVuLnNwbGljZShtLDEsLi4ueSkpOnk9W2NdLG0reS5sZW5ndGh9fWZ1bmN0aW9uIE1RdCh0KXtsZXQgZT1bXTtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBmaW5kIGFuZCByZXBsYWNlIHR1cGxlIG9yIGxpc3Qgb2YgdHVwbGVzIik7bGV0IGE9IXRbMF18fEFycmF5LmlzQXJyYXkodFswXSk/dDpbdF0scj0tMTtmb3IoOysrcjxhLmxlbmd0aDspe2xldCBpPWFbcl07ZS5wdXNoKFt6UXQoaVswXSksa1F0KGlbMV0pXSl9cmV0dXJuIGV9ZnVuY3Rpb24gelF0KHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/bmV3IFJlZ0V4cCgkcyh0KSwiZyIpOnR9ZnVuY3Rpb24ga1F0KHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciB6WmU9bigoKT0+e3NPKCk7b0goKTthSCgpfSk7dmFyIGtaZT1uKCgpPT57elplKCl9KTtmdW5jdGlvbiBLUSgpe3JldHVybnt0cmFuc2Zvcm1zOltBUXRdLGVudGVyOntsaXRlcmFsQXV0b2xpbms6U1F0LGxpdGVyYWxBdXRvbGlua0VtYWlsOlFRLGxpdGVyYWxBdXRvbGlua0h0dHA6UVEsbGl0ZXJhbEF1dG9saW5rV3d3OlFRfSxleGl0OntsaXRlcmFsQXV0b2xpbms6X1F0LGxpdGVyYWxBdXRvbGlua0VtYWlsOlRRdCxsaXRlcmFsQXV0b2xpbmtIdHRwOkNRdCxsaXRlcmFsQXV0b2xpbmtXd3c6TFF0fX19ZnVuY3Rpb24gSlEoKXtyZXR1cm57dW5zYWZlOlt7Y2hhcmFjdGVyOiJAIixiZWZvcmU6IlsrXFwtLlxcd10iLGFmdGVyOiJbXFwtLlxcd10iLGluQ29uc3RydWN0OlpRLG5vdEluQ29uc3RydWN0OlhRfSx7Y2hhcmFjdGVyOiIuIixiZWZvcmU6IltXd10iLGFmdGVyOiJbXFwtLlxcd10iLGluQ29uc3RydWN0OlpRLG5vdEluQ29uc3RydWN0OlhRfSx7Y2hhcmFjdGVyOiI6IixiZWZvcmU6Iltwc10iLGFmdGVyOiJcXC8iLGluQ29uc3RydWN0OlpRLG5vdEluQ29uc3RydWN0OlhRfV19fWZ1bmN0aW9uIFNRdCh0KXt0aGlzLmVudGVyKHt0eXBlOiJsaW5rIix0aXRsZTpudWxsLHVybDoiIixjaGlsZHJlbjpbXX0sdCl9ZnVuY3Rpb24gUVEodCl7dGhpcy5jb25maWcuZW50ZXIuYXV0b2xpbmtQcm90b2NvbC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gQ1F0KHQpe3RoaXMuY29uZmlnLmV4aXQuYXV0b2xpbmtQcm90b2NvbC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTFF0KHQpe3RoaXMuY29uZmlnLmV4aXQuZGF0YS5jYWxsKHRoaXMsdCk7bGV0IGU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtlLnR5cGUsZS51cmw9Imh0dHA6Ly8iK3RoaXMuc2xpY2VTZXJpYWxpemUodCl9ZnVuY3Rpb24gVFF0KHQpe3RoaXMuY29uZmlnLmV4aXQuYXV0b2xpbmtFbWFpbC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gX1F0KHQpe3RoaXMuZXhpdCh0KX1mdW5jdGlvbiBBUXQodCl7WVEodCxbWy8oaHR0cHM/OlwvXC98d3d3KD89XC4pKShbLS5cd10rKShbXiBcdFxyXG5dKikvZ2ksJFF0XSxbLyg/PD1efFxzfFxwe1B9fFxwe1N9KShbLS5cdytdKylAKFstXHddKyg/OlwuWy1cd10rKSspL2d1LERRdF1dLHtpZ25vcmU6WyJsaW5rIiwibGlua1JlZmVyZW5jZSJdfSl9ZnVuY3Rpb24gJFF0KHQsZSxhLHIsaSl7bGV0IG89IiI7aWYoIVNaZShpKXx8KC9edy9pLnRlc3QoZSkmJihhPWUrYSxlPSIiLG89Imh0dHA6Ly8iKSwhRVF0KGEpKSlyZXR1cm4hMTtsZXQgcz1OUXQoYStyKTtpZighc1swXSlyZXR1cm4hMTtsZXQgbD17dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6bytlK3NbMF0sY2hpbGRyZW46W3t0eXBlOiJ0ZXh0Iix2YWx1ZTplK3NbMF19XX07cmV0dXJuIHNbMV0/W2wse3R5cGU6InRleHQiLHZhbHVlOnNbMV19XTpsfWZ1bmN0aW9uIERRdCh0LGUsYSxyKXtyZXR1cm4hU1plKHIsITApfHwvWy1cZF9dJC8udGVzdChhKT8hMTp7dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6Im1haWx0bzoiK2UrIkAiK2EsY2hpbGRyZW46W3t0eXBlOiJ0ZXh0Iix2YWx1ZTplKyJAIithfV19fWZ1bmN0aW9uIEVRdCh0KXtsZXQgZT10LnNwbGl0KCIuIik7cmV0dXJuIShlLmxlbmd0aDwyfHxlW2UubGVuZ3RoLTFdJiYoL18vLnRlc3QoZVtlLmxlbmd0aC0xXSl8fCEvW2EtekEtWlxkXS8udGVzdChlW2UubGVuZ3RoLTFdKSl8fGVbZS5sZW5ndGgtMl0mJigvXy8udGVzdChlW2UubGVuZ3RoLTJdKXx8IS9bYS16QS1aXGRdLy50ZXN0KGVbZS5sZW5ndGgtMl0pKSl9ZnVuY3Rpb24gTlF0KHQpe2xldCBlPS9bISImJyksLjo7PD4/XF19XSskLy5leGVjKHQpO2lmKCFlKXJldHVyblt0LHZvaWQgMF07dD10LnNsaWNlKDAsZS5pbmRleCk7bGV0IGE9ZVswXSxyPWEuaW5kZXhPZigiKSIpLGk9dzYodCwiKCIpLG89dzYodCwiKSIpO2Zvcig7ciE9PS0xJiZpPm87KXQrPWEuc2xpY2UoMCxyKzEpLGE9YS5zbGljZShyKzEpLHI9YS5pbmRleE9mKCIpIiksbysrO3JldHVyblt0LGFdfWZ1bmN0aW9uIFNaZSh0LGUpe2xldCBhPXQuaW5wdXQuY2hhckNvZGVBdCh0LmluZGV4LTEpO3JldHVybih0LmluZGV4PT09MHx8TnIoYSl8fGNuKGEpKSYmKCFlfHxhIT09NDcpfXZhciBaUSxYUSxDWmU9bigoKT0+e0dRKCk7Rm8oKTtrdCgpO2taZSgpO1pRPSJwaHJhc2luZyIsWFE9WyJhdXRvbGluayIsImxpbmsiLCJpbWFnZSIsImxhYmVsIl19KTt2YXIgTFplPW4oKCk9PntDWmUoKX0pO2Z1bmN0aW9uIHcxKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoL14gfCAkL2csIiIpLnRvTG93ZXJDYXNlKCkudG9VcHBlckNhc2UoKX12YXIgUm89bigoKT0+e30pO2Z1bmN0aW9uIFBRdCgpe3RoaXMuYnVmZmVyKCl9ZnVuY3Rpb24gSVF0KHQpe3RoaXMuZW50ZXIoe3R5cGU6ImZvb3Rub3RlUmVmZXJlbmNlIixpZGVudGlmaWVyOiIiLGxhYmVsOiIifSx0KX1mdW5jdGlvbiBGUXQoKXt0aGlzLmJ1ZmZlcigpfWZ1bmN0aW9uIE9RdCh0KXt0aGlzLmVudGVyKHt0eXBlOiJmb290bm90ZURlZmluaXRpb24iLGlkZW50aWZpZXI6IiIsbGFiZWw6IiIsY2hpbGRyZW46W119LHQpfWZ1bmN0aW9uIEJRdCh0KXtsZXQgZT10aGlzLnJlc3VtZSgpLGE9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTthLnR5cGUsYS5pZGVudGlmaWVyPXcxKHRoaXMuc2xpY2VTZXJpYWxpemUodCkpLnRvTG93ZXJDYXNlKCksYS5sYWJlbD1lfWZ1bmN0aW9uIFJRdCh0KXt0aGlzLmV4aXQodCl9ZnVuY3Rpb24gSFF0KHQpe2xldCBlPXRoaXMucmVzdW1lKCksYT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2EudHlwZSxhLmlkZW50aWZpZXI9dzEodGhpcy5zbGljZVNlcmlhbGl6ZSh0KSkudG9Mb3dlckNhc2UoKSxhLmxhYmVsPWV9ZnVuY3Rpb24gcVF0KHQpe3RoaXMuZXhpdCh0KX1mdW5jdGlvbiBWUXQoKXtyZXR1cm4iWyJ9ZnVuY3Rpb24gVFplKHQsZSxhLHIpe2xldCBpPWEuY3JlYXRlVHJhY2tlcihyKSxvPWkubW92ZSgiW14iKSxzPWEuZW50ZXIoImZvb3Rub3RlUmVmZXJlbmNlIiksbD1hLmVudGVyKCJyZWZlcmVuY2UiKTtyZXR1cm4gbys9aS5tb3ZlKGEuc2FmZShhLmFzc29jaWF0aW9uSWQodCkse2FmdGVyOiJdIixiZWZvcmU6b30pKSxsKCkscygpLG8rPWkubW92ZSgiXSIpLG99ZnVuY3Rpb24gZUsoKXtyZXR1cm57ZW50ZXI6e2dmbUZvb3Rub3RlQ2FsbFN0cmluZzpQUXQsZ2ZtRm9vdG5vdGVDYWxsOklRdCxnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZzpGUXQsZ2ZtRm9vdG5vdGVEZWZpbml0aW9uOk9RdH0sZXhpdDp7Z2ZtRm9vdG5vdGVDYWxsU3RyaW5nOkJRdCxnZm1Gb290bm90ZUNhbGw6UlF0LGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nOkhRdCxnZm1Gb290bm90ZURlZmluaXRpb246cVF0fX19ZnVuY3Rpb24gdEsodCl7bGV0IGU9ITE7cmV0dXJuIHQmJnQuZmlyc3RMaW5lQmxhbmsmJihlPSEwKSx7aGFuZGxlcnM6e2Zvb3Rub3RlRGVmaW5pdGlvbjphLGZvb3Rub3RlUmVmZXJlbmNlOlRaZX0sdW5zYWZlOlt7Y2hhcmFjdGVyOiJbIixpbkNvbnN0cnVjdDpbImxhYmVsIiwicGhyYXNpbmciLCJyZWZlcmVuY2UiXX1dfTtmdW5jdGlvbiBhKHIsaSxvLHMpe2xldCBsPW8uY3JlYXRlVHJhY2tlcihzKSxmPWwubW92ZSgiW14iKSxjPW8uZW50ZXIoImZvb3Rub3RlRGVmaW5pdGlvbiIpLHU9by5lbnRlcigibGFiZWwiKTtyZXR1cm4gZis9bC5tb3ZlKG8uc2FmZShvLmFzc29jaWF0aW9uSWQocikse2JlZm9yZTpmLGFmdGVyOiJdIn0pKSx1KCksZis9bC5tb3ZlKCJdOiIpLHIuY2hpbGRyZW4mJnIuY2hpbGRyZW4ubGVuZ3RoPjAmJihsLnNoaWZ0KDQpLGYrPWwubW92ZSgoZT9gCmA6IiAiKStvLmluZGVudExpbmVzKG8uY29udGFpbmVyRmxvdyhyLGwuY3VycmVudCgpKSxlP19aZTpVUXQpKSksYygpLGZ9fWZ1bmN0aW9uIFVRdCh0LGUsYSl7cmV0dXJuIGU9PT0wP3Q6X1plKHQsZSxhKX1mdW5jdGlvbiBfWmUodCxlLGEpe3JldHVybihhPyIiOiIgICAgIikrdH12YXIgQVplPW4oKCk9PntGbygpO1JvKCk7VFplLnBlZWs9VlF0fSk7dmFyICRaZT1uKCgpPT57QVplKCl9KTtmdW5jdGlvbiBhSygpe3JldHVybntjYW5Db250YWluRW9sczpbImRlbGV0ZSJdLGVudGVyOntzdHJpa2V0aHJvdWdoOldRdH0sZXhpdDp7c3RyaWtldGhyb3VnaDpHUXR9fX1mdW5jdGlvbiBySygpe3JldHVybnt1bnNhZmU6W3tjaGFyYWN0ZXI6In4iLGluQ29uc3RydWN0OiJwaHJhc2luZyIsbm90SW5Db25zdHJ1Y3Q6alF0fV0saGFuZGxlcnM6e2RlbGV0ZTpEWmV9fX1mdW5jdGlvbiBXUXQodCl7dGhpcy5lbnRlcih7dHlwZToiZGVsZXRlIixjaGlsZHJlbjpbXX0sdCl9ZnVuY3Rpb24gR1F0KHQpe3RoaXMuZXhpdCh0KX1mdW5jdGlvbiBEWmUodCxlLGEscil7bGV0IGk9YS5jcmVhdGVUcmFja2VyKHIpLG89YS5lbnRlcigic3RyaWtldGhyb3VnaCIpLHM9aS5tb3ZlKCJ+fiIpO3JldHVybiBzKz1hLmNvbnRhaW5lclBocmFzaW5nKHQsey4uLmkuY3VycmVudCgpLGJlZm9yZTpzLGFmdGVyOiJ+In0pLHMrPWkubW92ZSgifn4iKSxvKCksc31mdW5jdGlvbiBZUXQoKXtyZXR1cm4ifiJ9dmFyIGpRdCxFWmU9bigoKT0+e2pRdD1bImF1dG9saW5rIiwiZGVzdGluYXRpb25MaXRlcmFsIiwiZGVzdGluYXRpb25SYXciLCJyZWZlcmVuY2UiLCJ0aXRsZVF1b3RlIiwidGl0bGVBcG9zdHJvcGhlIl07RFplLnBlZWs9WVF0fSk7dmFyIE5aZT1uKCgpPT57RVplKCl9KTtmdW5jdGlvbiBaUXQodCl7cmV0dXJuIHQubGVuZ3RofWZ1bmN0aW9uIElaZSh0LGUpe2xldCBhPWV8fHt9LHI9KGEuYWxpZ258fFtdKS5jb25jYXQoKSxpPWEuc3RyaW5nTGVuZ3RofHxaUXQsbz1bXSxzPVtdLGw9W10sZj1bXSxjPTAsdT0tMTtmb3IoOysrdTx0Lmxlbmd0aDspe2xldCB4PVtdLG09W10sdj0tMTtmb3IodFt1XS5sZW5ndGg+YyYmKGM9dFt1XS5sZW5ndGgpOysrdjx0W3VdLmxlbmd0aDspe2xldCB5PVhRdCh0W3VdW3ZdKTtpZihhLmFsaWduRGVsaW1pdGVycyE9PSExKXtsZXQgdz1pKHkpO21bdl09dywoZlt2XT09PXZvaWQgMHx8dz5mW3ZdKSYmKGZbdl09dyl9eC5wdXNoKHkpfXNbdV09eCxsW3VdPW19bGV0IGQ9LTE7aWYodHlwZW9mIHI9PSJvYmplY3QiJiYibGVuZ3RoImluIHIpZm9yKDsrK2Q8Yzspb1tkXT1QWmUocltkXSk7ZWxzZXtsZXQgeD1QWmUocik7Zm9yKDsrK2Q8Yzspb1tkXT14fWQ9LTE7bGV0IGg9W10sZz1bXTtmb3IoOysrZDxjOyl7bGV0IHg9b1tkXSxtPSIiLHY9IiI7eD09PTk5PyhtPSI6Iix2PSI6Iik6eD09PTEwOD9tPSI6Ijp4PT09MTE0JiYodj0iOiIpO2xldCB5PWEuYWxpZ25EZWxpbWl0ZXJzPT09ITE/MTpNYXRoLm1heCgxLGZbZF0tbS5sZW5ndGgtdi5sZW5ndGgpLHc9bSsiLSIucmVwZWF0KHkpK3Y7YS5hbGlnbkRlbGltaXRlcnMhPT0hMSYmKHk9bS5sZW5ndGgreSt2Lmxlbmd0aCx5PmZbZF0mJihmW2RdPXkpLGdbZF09eSksaFtkXT13fXMuc3BsaWNlKDEsMCxoKSxsLnNwbGljZSgxLDAsZyksdT0tMTtsZXQgYj1bXTtmb3IoOysrdTxzLmxlbmd0aDspe2xldCB4PXNbdV0sbT1sW3VdO2Q9LTE7bGV0IHY9W107Zm9yKDsrK2Q8Yzspe2xldCB5PXhbZF18fCIiLHc9IiIsRT0iIjtpZihhLmFsaWduRGVsaW1pdGVycyE9PSExKXtsZXQgQz1mW2RdLShtW2RdfHwwKSx6PW9bZF07ej09PTExND93PSIgIi5yZXBlYXQoQyk6ej09PTk5P0MlMj8odz0iICIucmVwZWF0KEMvMisuNSksRT0iICIucmVwZWF0KEMvMi0uNSkpOih3PSIgIi5yZXBlYXQoQy8yKSxFPXcpOkU9IiAiLnJlcGVhdChDKX1hLmRlbGltaXRlclN0YXJ0IT09ITEmJiFkJiZ2LnB1c2goInwiKSxhLnBhZGRpbmchPT0hMSYmIShhLmFsaWduRGVsaW1pdGVycz09PSExJiZ5PT09IiIpJiYoYS5kZWxpbWl0ZXJTdGFydCE9PSExfHxkKSYmdi5wdXNoKCIgIiksYS5hbGlnbkRlbGltaXRlcnMhPT0hMSYmdi5wdXNoKHcpLHYucHVzaCh5KSxhLmFsaWduRGVsaW1pdGVycyE9PSExJiZ2LnB1c2goRSksYS5wYWRkaW5nIT09ITEmJnYucHVzaCgiICIpLChhLmRlbGltaXRlckVuZCE9PSExfHxkIT09Yy0xKSYmdi5wdXNoKCJ8Iil9Yi5wdXNoKGEuZGVsaW1pdGVyRW5kPT09ITE/di5qb2luKCIiKS5yZXBsYWNlKC8gKyQvLCIiKTp2LmpvaW4oIiIpKX1yZXR1cm4gYi5qb2luKGAKYCl9ZnVuY3Rpb24gWFF0KHQpe3JldHVybiB0PT1udWxsPyIiOlN0cmluZyh0KX1mdW5jdGlvbiBQWmUodCl7bGV0IGU9dHlwZW9mIHQ9PSJzdHJpbmciP3QuY29kZVBvaW50QXQoMCk6MDtyZXR1cm4gZT09PTY3fHxlPT09OTk/OTk6ZT09PTc2fHxlPT09MTA4PzEwODplPT09ODJ8fGU9PT0xMTQ/MTE0OjB9dmFyIEZaZT1uKCgpPT57fSk7ZnVuY3Rpb24gc0godCxlKXtsZXQgYT1lfHx7fTtmdW5jdGlvbiByKGksLi4ubyl7bGV0IHM9ci5pbnZhbGlkLGw9ci5oYW5kbGVycztpZihpJiZPWmUuY2FsbChpLHQpKXtsZXQgZj1TdHJpbmcoaVt0XSk7cz1PWmUuY2FsbChsLGYpP2xbZl06ci51bmtub3dufWlmKHMpcmV0dXJuIHMuY2FsbCh0aGlzLGksLi4ubyl9cmV0dXJuIHIuaGFuZGxlcnM9YS5oYW5kbGVyc3x8e30sci5pbnZhbGlkPWEuaW52YWxpZCxyLnVua25vd249YS51bmtub3duLHJ9dmFyIE9aZSxpSz1uKCgpPT57T1plPXt9Lmhhc093blByb3BlcnR5fSk7ZnVuY3Rpb24gb0sodCxlKXtsZXQgYT0tMSxyO2lmKGUuZXh0ZW5zaW9ucylmb3IoOysrYTxlLmV4dGVuc2lvbnMubGVuZ3RoOylvSyh0LGUuZXh0ZW5zaW9uc1thXSk7Zm9yKHIgaW4gZSlpZihRUXQuY2FsbChlLHIpKXN3aXRjaChyKXtjYXNlImV4dGVuc2lvbnMiOmJyZWFrO2Nhc2UidW5zYWZlIjp7QlplKHRbcl0sZVtyXSk7YnJlYWt9Y2FzZSJqb2luIjp7QlplKHRbcl0sZVtyXSk7YnJlYWt9Y2FzZSJoYW5kbGVycyI6e0tRdCh0W3JdLGVbcl0pO2JyZWFrfWRlZmF1bHQ6dC5vcHRpb25zW3JdPWVbcl19cmV0dXJuIHR9ZnVuY3Rpb24gQlplKHQsZSl7ZSYmdC5wdXNoKC4uLmUpfWZ1bmN0aW9uIEtRdCh0LGUpe2UmJk9iamVjdC5hc3NpZ24odCxlKX12YXIgUVF0LFJaZT1uKCgpPT57UVF0PXt9Lmhhc093blByb3BlcnR5fSk7ZnVuY3Rpb24gSFplKHQsZSxhLHIpe2xldCBpPWEuZW50ZXIoImJsb2NrcXVvdGUiKSxvPWEuY3JlYXRlVHJhY2tlcihyKTtvLm1vdmUoIj4gIiksby5zaGlmdCgyKTtsZXQgcz1hLmluZGVudExpbmVzKGEuY29udGFpbmVyRmxvdyh0LG8uY3VycmVudCgpKSxKUXQpO3JldHVybiBpKCksc31mdW5jdGlvbiBKUXQodCxlLGEpe3JldHVybiI+IisoYT8iIjoiICIpK3R9dmFyIHFaZT1uKCgpPT57fSk7ZnVuY3Rpb24gbkgodCxlKXtyZXR1cm4gVlplKHQsZS5pbkNvbnN0cnVjdCwhMCkmJiFWWmUodCxlLm5vdEluQ29uc3RydWN0LCExKX1mdW5jdGlvbiBWWmUodCxlLGEpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9W2VdKSwhZXx8ZS5sZW5ndGg9PT0wKXJldHVybiBhO2xldCByPS0xO2Zvcig7KytyPGUubGVuZ3RoOylpZih0LmluY2x1ZGVzKGVbcl0pKXJldHVybiEwO3JldHVybiExfXZhciBzSz1uKCgpPT57fSk7ZnVuY3Rpb24gbksodCxlLGEscil7bGV0IGk9LTE7Zm9yKDsrK2k8YS51bnNhZmUubGVuZ3RoOylpZihhLnVuc2FmZVtpXS5jaGFyYWN0ZXI9PT1gCmAmJm5IKGEuc3RhY2ssYS51bnNhZmVbaV0pKXJldHVybi9bIFx0XS8udGVzdChyLmJlZm9yZSk/IiI6IiAiO3JldHVybmBcXApgfXZhciBVWmU9bigoKT0+e3NLKCl9KTtmdW5jdGlvbiBqWmUodCxlKXtsZXQgYT1TdHJpbmcodCkscj1hLmluZGV4T2YoZSksaT1yLG89MCxzPTA7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHN1YnN0cmluZyIpO2Zvcig7ciE9PS0xOylyPT09aT8rK28+cyYmKHM9byk6bz0xLGk9citlLmxlbmd0aCxyPWEuaW5kZXhPZihlLGkpO3JldHVybiBzfXZhciBXWmU9bigoKT0+e30pO2Z1bmN0aW9uIG5kKHQsZSl7cmV0dXJuISEoZS5vcHRpb25zLmZlbmNlcz09PSExJiZ0LnZhbHVlJiYhdC5sYW5nJiYvW14gXHJcbl0vLnRlc3QodC52YWx1ZSkmJiEvXltcdCBdKig/OltcclxuXXwkKXwoPzpefFtcclxuXSlbXHQgXSokLy50ZXN0KHQudmFsdWUpKX12YXIgbEs9bigoKT0+e30pO2Z1bmN0aW9uIEdaZSh0KXtsZXQgZT10Lm9wdGlvbnMuZmVuY2V8fCJgIjtpZihlIT09ImAiJiZlIT09In4iKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBjb2RlIHdpdGggYCIrZSsiYCBmb3IgYG9wdGlvbnMuZmVuY2VgLCBleHBlY3RlZCBgYCBgIGBgIG9yIGB+YCIpO3JldHVybiBlfXZhciBZWmU9bigoKT0+e30pO2Z1bmN0aW9uIFpaZSh0LGUsYSxyKXtsZXQgaT1HWmUoYSksbz10LnZhbHVlfHwiIixzPWk9PT0iYCI/IkdyYXZlQWNjZW50IjoiVGlsZGUiO2lmKG5kKHQsYSkpe2xldCBkPWEuZW50ZXIoImNvZGVJbmRlbnRlZCIpLGg9YS5pbmRlbnRMaW5lcyhvLGVLdCk7cmV0dXJuIGQoKSxofWxldCBsPWEuY3JlYXRlVHJhY2tlcihyKSxmPWkucmVwZWF0KE1hdGgubWF4KGpaZShvLGkpKzEsMykpLGM9YS5lbnRlcigiY29kZUZlbmNlZCIpLHU9bC5tb3ZlKGYpO2lmKHQubGFuZyl7bGV0IGQ9YS5lbnRlcihgY29kZUZlbmNlZExhbmcke3N9YCk7dSs9bC5tb3ZlKGEuc2FmZSh0Lmxhbmcse2JlZm9yZTp1LGFmdGVyOiIgIixlbmNvZGU6WyJgIl0sLi4ubC5jdXJyZW50KCl9KSksZCgpfWlmKHQubGFuZyYmdC5tZXRhKXtsZXQgZD1hLmVudGVyKGBjb2RlRmVuY2VkTWV0YSR7c31gKTt1Kz1sLm1vdmUoIiAiKSx1Kz1sLm1vdmUoYS5zYWZlKHQubWV0YSx7YmVmb3JlOnUsYWZ0ZXI6YApgLGVuY29kZTpbImAiXSwuLi5sLmN1cnJlbnQoKX0pKSxkKCl9cmV0dXJuIHUrPWwubW92ZShgCmApLG8mJih1Kz1sLm1vdmUobytgCmApKSx1Kz1sLm1vdmUoZiksYygpLHV9ZnVuY3Rpb24gZUt0KHQsZSxhKXtyZXR1cm4oYT8iIjoiICAgICIpK3R9dmFyIFhaZT1uKCgpPT57V1plKCk7bEsoKTtZWmUoKX0pO2Z1bmN0aW9uIE02KHQpe2xldCBlPXQub3B0aW9ucy5xdW90ZXx8JyInO2lmKGUhPT0nIicmJmUhPT0iJyIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIHRpdGxlIHdpdGggYCIrZSsiYCBmb3IgYG9wdGlvbnMucXVvdGVgLCBleHBlY3RlZCBgXCJgLCBvciBgJ2AiKTtyZXR1cm4gZX12YXIgbEg9bigoKT0+e30pO2Z1bmN0aW9uIFFaZSh0LGUsYSxyKXtsZXQgaT1NNihhKSxvPWk9PT0nIic/IlF1b3RlIjoiQXBvc3Ryb3BoZSIscz1hLmVudGVyKCJkZWZpbml0aW9uIiksbD1hLmVudGVyKCJsYWJlbCIpLGY9YS5jcmVhdGVUcmFja2VyKHIpLGM9Zi5tb3ZlKCJbIik7cmV0dXJuIGMrPWYubW92ZShhLnNhZmUoYS5hc3NvY2lhdGlvbklkKHQpLHtiZWZvcmU6YyxhZnRlcjoiXSIsLi4uZi5jdXJyZW50KCl9KSksYys9Zi5tb3ZlKCJdOiAiKSxsKCksIXQudXJsfHwvW1wwLSBcdTAwN0ZdLy50ZXN0KHQudXJsKT8obD1hLmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKSxjKz1mLm1vdmUoIjwiKSxjKz1mLm1vdmUoYS5zYWZlKHQudXJsLHtiZWZvcmU6YyxhZnRlcjoiPiIsLi4uZi5jdXJyZW50KCl9KSksYys9Zi5tb3ZlKCI+IikpOihsPWEuZW50ZXIoImRlc3RpbmF0aW9uUmF3IiksYys9Zi5tb3ZlKGEuc2FmZSh0LnVybCx7YmVmb3JlOmMsYWZ0ZXI6dC50aXRsZT8iICI6YApgLC4uLmYuY3VycmVudCgpfSkpKSxsKCksdC50aXRsZSYmKGw9YS5lbnRlcihgdGl0bGUke299YCksYys9Zi5tb3ZlKCIgIitpKSxjKz1mLm1vdmUoYS5zYWZlKHQudGl0bGUse2JlZm9yZTpjLGFmdGVyOmksLi4uZi5jdXJyZW50KCl9KSksYys9Zi5tb3ZlKGkpLGwoKSkscygpLGN9dmFyIEtaZT1uKCgpPT57bEgoKX0pO2Z1bmN0aW9uIEpaZSh0KXtsZXQgZT10Lm9wdGlvbnMuZW1waGFzaXN8fCIqIjtpZihlIT09IioiJiZlIT09Il8iKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBlbXBoYXNpcyB3aXRoIGAiK2UrImAgZm9yIGBvcHRpb25zLmVtcGhhc2lzYCwgZXhwZWN0ZWQgYCpgLCBvciBgX2AiKTtyZXR1cm4gZX12YXIgZVhlPW4oKCk9Pnt9KTtmdW5jdGlvbiBsYSh0KXtyZXR1cm4iJiN4Iit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In12YXIgejY9bigoKT0+e30pO2Z1bmN0aW9uIHppKHQpe2lmKHQ9PT1udWxsfHx3dCh0KXx8TnIodCkpcmV0dXJuIDE7aWYoY24odCkpcmV0dXJuIDJ9dmFyIGNIPW4oKCk9PntrdCgpfSk7ZnVuY3Rpb24gazYodCxlLGEpe2xldCByPXppKHQpLGk9emkoZSk7cmV0dXJuIHI9PT12b2lkIDA/aT09PXZvaWQgMD9hPT09Il8iP3tpbnNpZGU6ITAsb3V0c2lkZTohMH06e2luc2lkZTohMSxvdXRzaWRlOiExfTppPT09MT97aW5zaWRlOiEwLG91dHNpZGU6ITB9OntpbnNpZGU6ITEsb3V0c2lkZTohMH06cj09PTE/aT09PXZvaWQgMD97aW5zaWRlOiExLG91dHNpZGU6ITF9Omk9PT0xP3tpbnNpZGU6ITAsb3V0c2lkZTohMH06e2luc2lkZTohMSxvdXRzaWRlOiExfTppPT09dm9pZCAwP3tpbnNpZGU6ITEsb3V0c2lkZTohMX06aT09PTE/e2luc2lkZTohMCxvdXRzaWRlOiExfTp7aW5zaWRlOiExLG91dHNpZGU6ITF9fXZhciBjSz1uKCgpPT57Y0goKX0pO2Z1bmN0aW9uIGRLKHQsZSxhLHIpe2xldCBpPUpaZShhKSxvPWEuZW50ZXIoImVtcGhhc2lzIikscz1hLmNyZWF0ZVRyYWNrZXIociksbD1zLm1vdmUoaSksZj1zLm1vdmUoYS5jb250YWluZXJQaHJhc2luZyh0LHthZnRlcjppLGJlZm9yZTpsLC4uLnMuY3VycmVudCgpfSkpLGM9Zi5jaGFyQ29kZUF0KDApLHU9azYoci5iZWZvcmUuY2hhckNvZGVBdChyLmJlZm9yZS5sZW5ndGgtMSksYyxpKTt1Lmluc2lkZSYmKGY9bGEoYykrZi5zbGljZSgxKSk7bGV0IGQ9Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpLGg9azYoci5hZnRlci5jaGFyQ29kZUF0KDApLGQsaSk7aC5pbnNpZGUmJihmPWYuc2xpY2UoMCwtMSkrbGEoZCkpO2xldCBnPXMubW92ZShpKTtyZXR1cm4gbygpLGEuYXR0ZW50aW9uRW5jb2RlU3Vycm91bmRpbmdJbmZvPXthZnRlcjpoLm91dHNpZGUsYmVmb3JlOnUub3V0c2lkZX0sbCtmK2d9ZnVuY3Rpb24gdEt0KHQsZSxhKXtyZXR1cm4gYS5vcHRpb25zLmVtcGhhc2lzfHwiKiJ9dmFyIHRYZT1uKCgpPT57ZVhlKCk7ejYoKTtjSygpO2RLLnBlZWs9dEt0fSk7ZnVuY3Rpb24gbGQodCxlLGEscil7bGV0IGksbyxzO3R5cGVvZiBlPT0iZnVuY3Rpb24iJiZ0eXBlb2YgYSE9ImZ1bmN0aW9uIj8obz12b2lkIDAscz1lLGk9YSk6KG89ZSxzPWEsaT1yKSxzZCh0LG8sbCxpKTtmdW5jdGlvbiBsKGYsYyl7bGV0IHU9Y1tjLmxlbmd0aC0xXSxkPXU/dS5jaGlsZHJlbi5pbmRleE9mKGYpOnZvaWQgMDtyZXR1cm4gcyhmLGQsdSl9fXZhciBhWGU9bigoKT0+e29IKCk7b0goKX0pO3ZhciBmSz1uKCgpPT57YVhlKCl9KTtmdW5jdGlvbiBmbih0LGUpe2xldCBhPWV8fGFLdCxyPXR5cGVvZiBhLmluY2x1ZGVJbWFnZUFsdD09ImJvb2xlYW4iP2EuaW5jbHVkZUltYWdlQWx0OiEwLGk9dHlwZW9mIGEuaW5jbHVkZUh0bWw9PSJib29sZWFuIj9hLmluY2x1ZGVIdG1sOiEwO3JldHVybiByWGUodCxyLGkpfWZ1bmN0aW9uIHJYZSh0LGUsYSl7aWYockt0KHQpKXtpZigidmFsdWUiaW4gdClyZXR1cm4gdC50eXBlPT09Imh0bWwiJiYhYT8iIjp0LnZhbHVlO2lmKGUmJiJhbHQiaW4gdCYmdC5hbHQpcmV0dXJuIHQuYWx0O2lmKCJjaGlsZHJlbiJpbiB0KXJldHVybiBpWGUodC5jaGlsZHJlbixlLGEpfXJldHVybiBBcnJheS5pc0FycmF5KHQpP2lYZSh0LGUsYSk6IiJ9ZnVuY3Rpb24gaVhlKHQsZSxhKXtsZXQgcj1bXSxpPS0xO2Zvcig7KytpPHQubGVuZ3RoOylyW2ldPXJYZSh0W2ldLGUsYSk7cmV0dXJuIHIuam9pbigiIil9ZnVuY3Rpb24gckt0KHQpe3JldHVybiEhKHQmJnR5cGVvZiB0PT0ib2JqZWN0Iil9dmFyIGFLdCxvWGU9bigoKT0+e2FLdD17fX0pO3ZhciBkSD1uKCgpPT57b1hlKCl9KTtmdW5jdGlvbiBmSCh0LGUpe2xldCBhPSExO3JldHVybiBsZCh0LGZ1bmN0aW9uKHIpe2lmKCJ2YWx1ZSJpbiByJiYvXHI/XG58XHIvLnRlc3Qoci52YWx1ZSl8fHIudHlwZT09PSJicmVhayIpcmV0dXJuIGE9ITAsZG59KSwhISgoIXQuZGVwdGh8fHQuZGVwdGg8MykmJmZuKHQpJiYoZS5vcHRpb25zLnNldGV4dHx8YSkpfXZhciB1Sz1uKCgpPT57ZksoKTtkSCgpfSk7ZnVuY3Rpb24gc1hlKHQsZSxhLHIpe2xldCBpPU1hdGgubWF4KE1hdGgubWluKDYsdC5kZXB0aHx8MSksMSksbz1hLmNyZWF0ZVRyYWNrZXIocik7aWYoZkgodCxhKSl7bGV0IHU9YS5lbnRlcigiaGVhZGluZ1NldGV4dCIpLGQ9YS5lbnRlcigicGhyYXNpbmciKSxoPWEuY29udGFpbmVyUGhyYXNpbmcodCx7Li4uby5jdXJyZW50KCksYmVmb3JlOmAKYCxhZnRlcjpgCmB9KTtyZXR1cm4gZCgpLHUoKSxoK2AKYCsoaT09PTE/Ij0iOiItIikucmVwZWF0KGgubGVuZ3RoLShNYXRoLm1heChoLmxhc3RJbmRleE9mKCJcciIpLGgubGFzdEluZGV4T2YoYApgKSkrMSkpfWxldCBzPSIjIi5yZXBlYXQoaSksbD1hLmVudGVyKCJoZWFkaW5nQXR4IiksZj1hLmVudGVyKCJwaHJhc2luZyIpO28ubW92ZShzKyIgIik7bGV0IGM9YS5jb250YWluZXJQaHJhc2luZyh0LHtiZWZvcmU6IiMgIixhZnRlcjpgCmAsLi4uby5jdXJyZW50KCl9KTtyZXR1cm4vXltcdCBdLy50ZXN0KGMpJiYoYz1sYShjLmNoYXJDb2RlQXQoMCkpK2Muc2xpY2UoMSkpLGM9Yz9zKyIgIitjOnMsYS5vcHRpb25zLmNsb3NlQXR4JiYoYys9IiAiK3MpLGYoKSxsKCksY312YXIgblhlPW4oKCk9Pnt6NigpO3VLKCl9KTtmdW5jdGlvbiBwSyh0KXtyZXR1cm4gdC52YWx1ZXx8IiJ9ZnVuY3Rpb24gaUt0KCl7cmV0dXJuIjwifXZhciBsWGU9bigoKT0+e3BLLnBlZWs9aUt0fSk7ZnVuY3Rpb24gaEsodCxlLGEscil7bGV0IGk9TTYoYSksbz1pPT09JyInPyJRdW90ZSI6IkFwb3N0cm9waGUiLHM9YS5lbnRlcigiaW1hZ2UiKSxsPWEuZW50ZXIoImxhYmVsIiksZj1hLmNyZWF0ZVRyYWNrZXIociksYz1mLm1vdmUoIiFbIik7cmV0dXJuIGMrPWYubW92ZShhLnNhZmUodC5hbHQse2JlZm9yZTpjLGFmdGVyOiJdIiwuLi5mLmN1cnJlbnQoKX0pKSxjKz1mLm1vdmUoIl0oIiksbCgpLCF0LnVybCYmdC50aXRsZXx8L1tcMC0gXHUwMDdGXS8udGVzdCh0LnVybCk/KGw9YS5lbnRlcigiZGVzdGluYXRpb25MaXRlcmFsIiksYys9Zi5tb3ZlKCI8IiksYys9Zi5tb3ZlKGEuc2FmZSh0LnVybCx7YmVmb3JlOmMsYWZ0ZXI6Ij4iLC4uLmYuY3VycmVudCgpfSkpLGMrPWYubW92ZSgiPiIpKToobD1hLmVudGVyKCJkZXN0aW5hdGlvblJhdyIpLGMrPWYubW92ZShhLnNhZmUodC51cmwse2JlZm9yZTpjLGFmdGVyOnQudGl0bGU/IiAiOiIpIiwuLi5mLmN1cnJlbnQoKX0pKSksbCgpLHQudGl0bGUmJihsPWEuZW50ZXIoYHRpdGxlJHtvfWApLGMrPWYubW92ZSgiICIraSksYys9Zi5tb3ZlKGEuc2FmZSh0LnRpdGxlLHtiZWZvcmU6YyxhZnRlcjppLC4uLmYuY3VycmVudCgpfSkpLGMrPWYubW92ZShpKSxsKCkpLGMrPWYubW92ZSgiKSIpLHMoKSxjfWZ1bmN0aW9uIG9LdCgpe3JldHVybiIhIn12YXIgY1hlPW4oKCk9PntsSCgpO2hLLnBlZWs9b0t0fSk7ZnVuY3Rpb24gbUsodCxlLGEscil7bGV0IGk9dC5yZWZlcmVuY2VUeXBlLG89YS5lbnRlcigiaW1hZ2VSZWZlcmVuY2UiKSxzPWEuZW50ZXIoImxhYmVsIiksbD1hLmNyZWF0ZVRyYWNrZXIociksZj1sLm1vdmUoIiFbIiksYz1hLnNhZmUodC5hbHQse2JlZm9yZTpmLGFmdGVyOiJdIiwuLi5sLmN1cnJlbnQoKX0pO2YrPWwubW92ZShjKyJdWyIpLHMoKTtsZXQgdT1hLnN0YWNrO2Euc3RhY2s9W10scz1hLmVudGVyKCJyZWZlcmVuY2UiKTtsZXQgZD1hLnNhZmUoYS5hc3NvY2lhdGlvbklkKHQpLHtiZWZvcmU6ZixhZnRlcjoiXSIsLi4ubC5jdXJyZW50KCl9KTtyZXR1cm4gcygpLGEuc3RhY2s9dSxvKCksaT09PSJmdWxsInx8IWN8fGMhPT1kP2YrPWwubW92ZShkKyJdIik6aT09PSJzaG9ydGN1dCI/Zj1mLnNsaWNlKDAsLTEpOmYrPWwubW92ZSgiXSIpLGZ9ZnVuY3Rpb24gc0t0KCl7cmV0dXJuIiEifXZhciBkWGU9bigoKT0+e21LLnBlZWs9c0t0fSk7ZnVuY3Rpb24gZ0sodCxlLGEpe2xldCByPXQudmFsdWV8fCIiLGk9ImAiLG89LTE7Zm9yKDtuZXcgUmVnRXhwKCIoXnxbXmBdKSIraSsiKFteYF18JCkiKS50ZXN0KHIpOylpKz0iYCI7Zm9yKC9bXiBcclxuXS8udGVzdChyKSYmKC9eWyBcclxuXS8udGVzdChyKSYmL1sgXHJcbl0kLy50ZXN0KHIpfHwvXmB8YCQvLnRlc3QocikpJiYocj0iICIrcisiICIpOysrbzxhLnVuc2FmZS5sZW5ndGg7KXtsZXQgcz1hLnVuc2FmZVtvXSxsPWEuY29tcGlsZVBhdHRlcm4ocyksZjtpZihzLmF0QnJlYWspZm9yKDtmPWwuZXhlYyhyKTspe2xldCBjPWYuaW5kZXg7ci5jaGFyQ29kZUF0KGMpPT09MTAmJnIuY2hhckNvZGVBdChjLTEpPT09MTMmJmMtLSxyPXIuc2xpY2UoMCxjKSsiICIrci5zbGljZShmLmluZGV4KzEpfX1yZXR1cm4gaStyK2l9ZnVuY3Rpb24gbkt0KCl7cmV0dXJuImAifXZhciBmWGU9bigoKT0+e2dLLnBlZWs9bkt0fSk7ZnVuY3Rpb24geEsodCxlKXtsZXQgYT1mbih0KTtyZXR1cm4hISghZS5vcHRpb25zLnJlc291cmNlTGluayYmdC51cmwmJiF0LnRpdGxlJiZ0LmNoaWxkcmVuJiZ0LmNoaWxkcmVuLmxlbmd0aD09PTEmJnQuY2hpbGRyZW5bMF0udHlwZT09PSJ0ZXh0IiYmKGE9PT10LnVybHx8Im1haWx0bzoiK2E9PT10LnVybCkmJi9eW2Etel1bYS16Ky4tXSs6L2kudGVzdCh0LnVybCkmJiEvW1wwLSA8Plx1MDA3Rl0vLnRlc3QodC51cmwpKX12YXIgdVhlPW4oKCk9PntkSCgpfSk7ZnVuY3Rpb24gYksodCxlLGEscil7bGV0IGk9TTYoYSksbz1pPT09JyInPyJRdW90ZSI6IkFwb3N0cm9waGUiLHM9YS5jcmVhdGVUcmFja2VyKHIpLGwsZjtpZih4Syh0LGEpKXtsZXQgdT1hLnN0YWNrO2Euc3RhY2s9W10sbD1hLmVudGVyKCJhdXRvbGluayIpO2xldCBkPXMubW92ZSgiPCIpO3JldHVybiBkKz1zLm1vdmUoYS5jb250YWluZXJQaHJhc2luZyh0LHtiZWZvcmU6ZCxhZnRlcjoiPiIsLi4ucy5jdXJyZW50KCl9KSksZCs9cy5tb3ZlKCI+IiksbCgpLGEuc3RhY2s9dSxkfWw9YS5lbnRlcigibGluayIpLGY9YS5lbnRlcigibGFiZWwiKTtsZXQgYz1zLm1vdmUoIlsiKTtyZXR1cm4gYys9cy5tb3ZlKGEuY29udGFpbmVyUGhyYXNpbmcodCx7YmVmb3JlOmMsYWZ0ZXI6Il0oIiwuLi5zLmN1cnJlbnQoKX0pKSxjKz1zLm1vdmUoIl0oIiksZigpLCF0LnVybCYmdC50aXRsZXx8L1tcMC0gXHUwMDdGXS8udGVzdCh0LnVybCk/KGY9YS5lbnRlcigiZGVzdGluYXRpb25MaXRlcmFsIiksYys9cy5tb3ZlKCI8IiksYys9cy5tb3ZlKGEuc2FmZSh0LnVybCx7YmVmb3JlOmMsYWZ0ZXI6Ij4iLC4uLnMuY3VycmVudCgpfSkpLGMrPXMubW92ZSgiPiIpKTooZj1hLmVudGVyKCJkZXN0aW5hdGlvblJhdyIpLGMrPXMubW92ZShhLnNhZmUodC51cmwse2JlZm9yZTpjLGFmdGVyOnQudGl0bGU/IiAiOiIpIiwuLi5zLmN1cnJlbnQoKX0pKSksZigpLHQudGl0bGUmJihmPWEuZW50ZXIoYHRpdGxlJHtvfWApLGMrPXMubW92ZSgiICIraSksYys9cy5tb3ZlKGEuc2FmZSh0LnRpdGxlLHtiZWZvcmU6YyxhZnRlcjppLC4uLnMuY3VycmVudCgpfSkpLGMrPXMubW92ZShpKSxmKCkpLGMrPXMubW92ZSgiKSIpLGwoKSxjfWZ1bmN0aW9uIGxLdCh0LGUsYSl7cmV0dXJuIHhLKHQsYSk/IjwiOiJbIn12YXIgcFhlPW4oKCk9PntsSCgpO3VYZSgpO2JLLnBlZWs9bEt0fSk7ZnVuY3Rpb24gdksodCxlLGEscil7bGV0IGk9dC5yZWZlcmVuY2VUeXBlLG89YS5lbnRlcigibGlua1JlZmVyZW5jZSIpLHM9YS5lbnRlcigibGFiZWwiKSxsPWEuY3JlYXRlVHJhY2tlcihyKSxmPWwubW92ZSgiWyIpLGM9YS5jb250YWluZXJQaHJhc2luZyh0LHtiZWZvcmU6ZixhZnRlcjoiXSIsLi4ubC5jdXJyZW50KCl9KTtmKz1sLm1vdmUoYysiXVsiKSxzKCk7bGV0IHU9YS5zdGFjazthLnN0YWNrPVtdLHM9YS5lbnRlcigicmVmZXJlbmNlIik7bGV0IGQ9YS5zYWZlKGEuYXNzb2NpYXRpb25JZCh0KSx7YmVmb3JlOmYsYWZ0ZXI6Il0iLC4uLmwuY3VycmVudCgpfSk7cmV0dXJuIHMoKSxhLnN0YWNrPXUsbygpLGk9PT0iZnVsbCJ8fCFjfHxjIT09ZD9mKz1sLm1vdmUoZCsiXSIpOmk9PT0ic2hvcnRjdXQiP2Y9Zi5zbGljZSgwLC0xKTpmKz1sLm1vdmUoIl0iKSxmfWZ1bmN0aW9uIGNLdCgpe3JldHVybiJbIn12YXIgaFhlPW4oKCk9Pnt2Sy5wZWVrPWNLdH0pO2Z1bmN0aW9uIFM2KHQpe2xldCBlPXQub3B0aW9ucy5idWxsZXR8fCIqIjtpZihlIT09IioiJiZlIT09IisiJiZlIT09Ii0iKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiK2UrImAgZm9yIGBvcHRpb25zLmJ1bGxldGAsIGV4cGVjdGVkIGAqYCwgYCtgLCBvciBgLWAiKTtyZXR1cm4gZX12YXIgdUg9bigoKT0+e30pO2Z1bmN0aW9uIG1YZSh0KXtsZXQgZT1TNih0KSxhPXQub3B0aW9ucy5idWxsZXRPdGhlcjtpZighYSlyZXR1cm4gZT09PSIqIj8iLSI6IioiO2lmKGEhPT0iKiImJmEhPT0iKyImJmEhPT0iLSIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCIrYSsiYCBmb3IgYG9wdGlvbnMuYnVsbGV0T3RoZXJgLCBleHBlY3RlZCBgKmAsIGArYCwgb3IgYC1gIik7aWYoYT09PWUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBgYnVsbGV0YCAoYCIrZSsiYCkgYW5kIGBidWxsZXRPdGhlcmAgKGAiK2ErImApIHRvIGJlIGRpZmZlcmVudCIpO3JldHVybiBhfXZhciBnWGU9bigoKT0+e3VIKCl9KTtmdW5jdGlvbiB4WGUodCl7bGV0IGU9dC5vcHRpb25zLmJ1bGxldE9yZGVyZWR8fCIuIjtpZihlIT09Ii4iJiZlIT09IikiKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiK2UrImAgZm9yIGBvcHRpb25zLmJ1bGxldE9yZGVyZWRgLCBleHBlY3RlZCBgLmAgb3IgYClgIik7cmV0dXJuIGV9dmFyIGJYZT1uKCgpPT57fSk7ZnVuY3Rpb24gcEgodCl7bGV0IGU9dC5vcHRpb25zLnJ1bGV8fCIqIjtpZihlIT09IioiJiZlIT09Ii0iJiZlIT09Il8iKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBydWxlcyB3aXRoIGAiK2UrImAgZm9yIGBvcHRpb25zLnJ1bGVgLCBleHBlY3RlZCBgKmAsIGAtYCwgb3IgYF9gIik7cmV0dXJuIGV9dmFyIHlLPW4oKCk9Pnt9KTtmdW5jdGlvbiB2WGUodCxlLGEscil7bGV0IGk9YS5lbnRlcigibGlzdCIpLG89YS5idWxsZXRDdXJyZW50LHM9dC5vcmRlcmVkP3hYZShhKTpTNihhKSxsPXQub3JkZXJlZD9zPT09Ii4iPyIpIjoiLiI6bVhlKGEpLGY9ZSYmYS5idWxsZXRMYXN0VXNlZD9zPT09YS5idWxsZXRMYXN0VXNlZDohMTtpZighdC5vcmRlcmVkKXtsZXQgdT10LmNoaWxkcmVuP3QuY2hpbGRyZW5bMF06dm9pZCAwO2lmKChzPT09IioifHxzPT09Ii0iKSYmdSYmKCF1LmNoaWxkcmVufHwhdS5jaGlsZHJlblswXSkmJmEuc3RhY2tbYS5zdGFjay5sZW5ndGgtMV09PT0ibGlzdCImJmEuc3RhY2tbYS5zdGFjay5sZW5ndGgtMl09PT0ibGlzdEl0ZW0iJiZhLnN0YWNrW2Euc3RhY2subGVuZ3RoLTNdPT09Imxpc3QiJiZhLnN0YWNrW2Euc3RhY2subGVuZ3RoLTRdPT09Imxpc3RJdGVtIiYmYS5pbmRleFN0YWNrW2EuaW5kZXhTdGFjay5sZW5ndGgtMV09PT0wJiZhLmluZGV4U3RhY2tbYS5pbmRleFN0YWNrLmxlbmd0aC0yXT09PTAmJmEuaW5kZXhTdGFja1thLmluZGV4U3RhY2subGVuZ3RoLTNdPT09MCYmKGY9ITApLHBIKGEpPT09cyYmdSl7bGV0IGQ9LTE7Zm9yKDsrK2Q8dC5jaGlsZHJlbi5sZW5ndGg7KXtsZXQgaD10LmNoaWxkcmVuW2RdO2lmKGgmJmgudHlwZT09PSJsaXN0SXRlbSImJmguY2hpbGRyZW4mJmguY2hpbGRyZW5bMF0mJmguY2hpbGRyZW5bMF0udHlwZT09PSJ0aGVtYXRpY0JyZWFrIil7Zj0hMDticmVha319fX1mJiYocz1sKSxhLmJ1bGxldEN1cnJlbnQ9cztsZXQgYz1hLmNvbnRhaW5lckZsb3codCxyKTtyZXR1cm4gYS5idWxsZXRMYXN0VXNlZD1zLGEuYnVsbGV0Q3VycmVudD1vLGkoKSxjfXZhciB5WGU9bigoKT0+e3VIKCk7Z1hlKCk7YlhlKCk7eUsoKX0pO2Z1bmN0aW9uIHdYZSh0KXtsZXQgZT10Lm9wdGlvbnMubGlzdEl0ZW1JbmRlbnR8fCJvbmUiO2lmKGUhPT0idGFiIiYmZSE9PSJvbmUiJiZlIT09Im1peGVkIil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXJpYWxpemUgaXRlbXMgd2l0aCBgIitlKyJgIGZvciBgb3B0aW9ucy5saXN0SXRlbUluZGVudGAsIGV4cGVjdGVkIGB0YWJgLCBgb25lYCwgb3IgYG1peGVkYCIpO3JldHVybiBlfXZhciBNWGU9bigoKT0+e30pO2Z1bmN0aW9uIHpYZSh0LGUsYSxyKXtsZXQgaT13WGUoYSksbz1hLmJ1bGxldEN1cnJlbnR8fFM2KGEpO2UmJmUudHlwZT09PSJsaXN0IiYmZS5vcmRlcmVkJiYobz0odHlwZW9mIGUuc3RhcnQ9PSJudW1iZXIiJiZlLnN0YXJ0Pi0xP2Uuc3RhcnQ6MSkrKGEub3B0aW9ucy5pbmNyZW1lbnRMaXN0TWFya2VyPT09ITE/MDplLmNoaWxkcmVuLmluZGV4T2YodCkpK28pO2xldCBzPW8ubGVuZ3RoKzE7KGk9PT0idGFiInx8aT09PSJtaXhlZCImJihlJiZlLnR5cGU9PT0ibGlzdCImJmUuc3ByZWFkfHx0LnNwcmVhZCkpJiYocz1NYXRoLmNlaWwocy80KSo0KTtsZXQgbD1hLmNyZWF0ZVRyYWNrZXIocik7bC5tb3ZlKG8rIiAiLnJlcGVhdChzLW8ubGVuZ3RoKSksbC5zaGlmdChzKTtsZXQgZj1hLmVudGVyKCJsaXN0SXRlbSIpLGM9YS5pbmRlbnRMaW5lcyhhLmNvbnRhaW5lckZsb3codCxsLmN1cnJlbnQoKSksdSk7cmV0dXJuIGYoKSxjO2Z1bmN0aW9uIHUoZCxoLGcpe3JldHVybiBoPyhnPyIiOiIgIi5yZXBlYXQocykpK2Q6KGc/bzpvKyIgIi5yZXBlYXQocy1vLmxlbmd0aCkpK2R9fXZhciBrWGU9bigoKT0+e3VIKCk7TVhlKCl9KTtmdW5jdGlvbiBTWGUodCxlLGEscil7bGV0IGk9YS5lbnRlcigicGFyYWdyYXBoIiksbz1hLmVudGVyKCJwaHJhc2luZyIpLHM9YS5jb250YWluZXJQaHJhc2luZyh0LHIpO3JldHVybiBvKCksaSgpLHN9dmFyIENYZT1uKCgpPT57fSk7dmFyIHdLLExYZT1uKCgpPT57YUgoKTt3Sz1NaShbImJyZWFrIiwiZGVsZXRlIiwiZW1waGFzaXMiLCJmb290bm90ZSIsImZvb3Rub3RlUmVmZXJlbmNlIiwiaW1hZ2UiLCJpbWFnZVJlZmVyZW5jZSIsImlubGluZUNvZGUiLCJpbmxpbmVNYXRoIiwibGluayIsImxpbmtSZWZlcmVuY2UiLCJtZHhKc3hUZXh0RWxlbWVudCIsIm1keFRleHRFeHByZXNzaW9uIiwic3Ryb25nIiwidGV4dCIsInRleHREaXJlY3RpdmUiXSl9KTt2YXIgVFhlPW4oKCk9PntMWGUoKX0pO2Z1bmN0aW9uIF9YZSh0LGUsYSxyKXtyZXR1cm4odC5jaGlsZHJlbi5zb21lKGZ1bmN0aW9uKHMpe3JldHVybiB3SyhzKX0pP2EuY29udGFpbmVyUGhyYXNpbmc6YS5jb250YWluZXJGbG93KS5jYWxsKGEsdCxyKX12YXIgQVhlPW4oKCk9PntUWGUoKX0pO2Z1bmN0aW9uICRYZSh0KXtsZXQgZT10Lm9wdGlvbnMuc3Ryb25nfHwiKiI7aWYoZSE9PSIqIiYmZSE9PSJfIil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXJpYWxpemUgc3Ryb25nIHdpdGggYCIrZSsiYCBmb3IgYG9wdGlvbnMuc3Ryb25nYCwgZXhwZWN0ZWQgYCpgLCBvciBgX2AiKTtyZXR1cm4gZX12YXIgRFhlPW4oKCk9Pnt9KTtmdW5jdGlvbiBNSyh0LGUsYSxyKXtsZXQgaT0kWGUoYSksbz1hLmVudGVyKCJzdHJvbmciKSxzPWEuY3JlYXRlVHJhY2tlcihyKSxsPXMubW92ZShpK2kpLGY9cy5tb3ZlKGEuY29udGFpbmVyUGhyYXNpbmcodCx7YWZ0ZXI6aSxiZWZvcmU6bCwuLi5zLmN1cnJlbnQoKX0pKSxjPWYuY2hhckNvZGVBdCgwKSx1PWs2KHIuYmVmb3JlLmNoYXJDb2RlQXQoci5iZWZvcmUubGVuZ3RoLTEpLGMsaSk7dS5pbnNpZGUmJihmPWxhKGMpK2Yuc2xpY2UoMSkpO2xldCBkPWYuY2hhckNvZGVBdChmLmxlbmd0aC0xKSxoPWs2KHIuYWZ0ZXIuY2hhckNvZGVBdCgwKSxkLGkpO2guaW5zaWRlJiYoZj1mLnNsaWNlKDAsLTEpK2xhKGQpKTtsZXQgZz1zLm1vdmUoaStpKTtyZXR1cm4gbygpLGEuYXR0ZW50aW9uRW5jb2RlU3Vycm91bmRpbmdJbmZvPXthZnRlcjpoLm91dHNpZGUsYmVmb3JlOnUub3V0c2lkZX0sbCtmK2d9ZnVuY3Rpb24gZEt0KHQsZSxhKXtyZXR1cm4gYS5vcHRpb25zLnN0cm9uZ3x8IioifXZhciBFWGU9bigoKT0+e0RYZSgpO3o2KCk7Y0soKTtNSy5wZWVrPWRLdH0pO2Z1bmN0aW9uIE5YZSh0LGUsYSxyKXtyZXR1cm4gYS5zYWZlKHQudmFsdWUscil9dmFyIFBYZT1uKCgpPT57fSk7ZnVuY3Rpb24gSVhlKHQpe2xldCBlPXQub3B0aW9ucy5ydWxlUmVwZXRpdGlvbnx8MztpZihlPDMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIHJ1bGVzIHdpdGggcmVwZXRpdGlvbiBgIitlKyJgIGZvciBgb3B0aW9ucy5ydWxlUmVwZXRpdGlvbmAsIGV4cGVjdGVkIGAzYCBvciBtb3JlIik7cmV0dXJuIGV9dmFyIEZYZT1uKCgpPT57fSk7ZnVuY3Rpb24gT1hlKHQsZSxhKXtsZXQgcj0ocEgoYSkrKGEub3B0aW9ucy5ydWxlU3BhY2VzPyIgIjoiIikpLnJlcGVhdChJWGUoYSkpO3JldHVybiBhLm9wdGlvbnMucnVsZVNwYWNlcz9yLnNsaWNlKDAsLTEpOnJ9dmFyIEJYZT1uKCgpPT57RlhlKCk7eUsoKX0pO3ZhciB1bix6Sz1uKCgpPT57cVplKCk7VVplKCk7WFplKCk7S1plKCk7dFhlKCk7blhlKCk7bFhlKCk7Y1hlKCk7ZFhlKCk7ZlhlKCk7cFhlKCk7aFhlKCk7eVhlKCk7a1hlKCk7Q1hlKCk7QVhlKCk7RVhlKCk7UFhlKCk7QlhlKCk7dW49e2Jsb2NrcXVvdGU6SFplLGJyZWFrOm5LLGNvZGU6WlplLGRlZmluaXRpb246UVplLGVtcGhhc2lzOmRLLGhhcmRCcmVhazpuSyxoZWFkaW5nOnNYZSxodG1sOnBLLGltYWdlOmhLLGltYWdlUmVmZXJlbmNlOm1LLGlubGluZUNvZGU6Z0ssbGluazpiSyxsaW5rUmVmZXJlbmNlOnZLLGxpc3Q6dlhlLGxpc3RJdGVtOnpYZSxwYXJhZ3JhcGg6U1hlLHJvb3Q6X1hlLHN0cm9uZzpNSyx0ZXh0Ok5YZSx0aGVtYXRpY0JyZWFrOk9YZX19KTtmdW5jdGlvbiBmS3QodCxlLGEscil7aWYoZS50eXBlPT09ImNvZGUiJiZuZChlLHIpJiYodC50eXBlPT09Imxpc3QifHx0LnR5cGU9PT1lLnR5cGUmJm5kKHQscikpKXJldHVybiExO2lmKCJzcHJlYWQiaW4gYSYmdHlwZW9mIGEuc3ByZWFkPT0iYm9vbGVhbiIpcmV0dXJuIHQudHlwZT09PSJwYXJhZ3JhcGgiJiYodC50eXBlPT09ZS50eXBlfHxlLnR5cGU9PT0iZGVmaW5pdGlvbiJ8fGUudHlwZT09PSJoZWFkaW5nIiYmZkgoZSxyKSk/dm9pZCAwOmEuc3ByZWFkPzE6MH12YXIgUlhlLEhYZT1uKCgpPT57bEsoKTt1SygpO1JYZT1bZkt0XX0pO3ZhciBwbixxWGUsVlhlPW4oKCk9Pntwbj1bImF1dG9saW5rIiwiZGVzdGluYXRpb25MaXRlcmFsIiwiZGVzdGluYXRpb25SYXciLCJyZWZlcmVuY2UiLCJ0aXRsZVF1b3RlIiwidGl0bGVBcG9zdHJvcGhlIl0scVhlPVt7Y2hhcmFjdGVyOiIJIixhZnRlcjoiW1xcclxcbl0iLGluQ29uc3RydWN0OiJwaHJhc2luZyJ9LHtjaGFyYWN0ZXI6IgkiLGJlZm9yZToiW1xcclxcbl0iLGluQ29uc3RydWN0OiJwaHJhc2luZyJ9LHtjaGFyYWN0ZXI6IgkiLGluQ29uc3RydWN0OlsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsImNvZGVGZW5jZWRMYW5nVGlsZGUiXX0se2NoYXJhY3RlcjoiXHIiLGluQ29uc3RydWN0OlsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsImNvZGVGZW5jZWRMYW5nVGlsZGUiLCJjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50IiwiY29kZUZlbmNlZE1ldGFUaWxkZSIsImRlc3RpbmF0aW9uTGl0ZXJhbCIsImhlYWRpbmdBdHgiXX0se2NoYXJhY3RlcjpgCmAsaW5Db25zdHJ1Y3Q6WyJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwiY29kZUZlbmNlZExhbmdUaWxkZSIsImNvZGVGZW5jZWRNZXRhR3JhdmVBY2NlbnQiLCJjb2RlRmVuY2VkTWV0YVRpbGRlIiwiZGVzdGluYXRpb25MaXRlcmFsIiwiaGVhZGluZ0F0eCJdfSx7Y2hhcmFjdGVyOiIgIixhZnRlcjoiW1xcclxcbl0iLGluQ29uc3RydWN0OiJwaHJhc2luZyJ9LHtjaGFyYWN0ZXI6IiAiLGJlZm9yZToiW1xcclxcbl0iLGluQ29uc3RydWN0OiJwaHJhc2luZyJ9LHtjaGFyYWN0ZXI6IiAiLGluQ29uc3RydWN0OlsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsImNvZGVGZW5jZWRMYW5nVGlsZGUiXX0se2NoYXJhY3RlcjoiISIsYWZ0ZXI6IlxcWyIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIixub3RJbkNvbnN0cnVjdDpwbn0se2NoYXJhY3RlcjonIicsaW5Db25zdHJ1Y3Q6InRpdGxlUXVvdGUifSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6IiMifSx7Y2hhcmFjdGVyOiIjIixpbkNvbnN0cnVjdDoiaGVhZGluZ0F0eCIsYWZ0ZXI6YCg/OltccgpdfCQpYH0se2NoYXJhY3RlcjoiJiIsYWZ0ZXI6IlsjQS1aYS16XSIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIn0se2NoYXJhY3RlcjoiJyIsaW5Db25zdHJ1Y3Q6InRpdGxlQXBvc3Ryb3BoZSJ9LHtjaGFyYWN0ZXI6IigiLGluQ29uc3RydWN0OiJkZXN0aW5hdGlvblJhdyJ9LHtiZWZvcmU6IlxcXSIsY2hhcmFjdGVyOiIoIixpbkNvbnN0cnVjdDoicGhyYXNpbmciLG5vdEluQ29uc3RydWN0OnBufSx7YXRCcmVhazohMCxiZWZvcmU6IlxcZCsiLGNoYXJhY3RlcjoiKSJ9LHtjaGFyYWN0ZXI6IikiLGluQ29uc3RydWN0OiJkZXN0aW5hdGlvblJhdyJ9LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiKiIsYWZ0ZXI6YCg/OlsgCVxyCipdKWB9LHtjaGFyYWN0ZXI6IioiLGluQ29uc3RydWN0OiJwaHJhc2luZyIsbm90SW5Db25zdHJ1Y3Q6cG59LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiKyIsYWZ0ZXI6YCg/OlsgCVxyCl0pYH0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiItIixhZnRlcjpgKD86WyAJXHIKLV0pYH0se2F0QnJlYWs6ITAsYmVmb3JlOiJcXGQrIixjaGFyYWN0ZXI6Ii4iLGFmdGVyOmAoPzpbIAlccgpdfCQpYH0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiI8IixhZnRlcjoiWyEvP0EtWmEtel0ifSx7Y2hhcmFjdGVyOiI8IixhZnRlcjoiWyEvP0EtWmEtel0iLGluQ29uc3RydWN0OiJwaHJhc2luZyIsbm90SW5Db25zdHJ1Y3Q6cG59LHtjaGFyYWN0ZXI6IjwiLGluQ29uc3RydWN0OiJkZXN0aW5hdGlvbkxpdGVyYWwifSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6Ij0ifSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6Ij4ifSx7Y2hhcmFjdGVyOiI+IixpbkNvbnN0cnVjdDoiZGVzdGluYXRpb25MaXRlcmFsIn0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiJbIn0se2NoYXJhY3RlcjoiWyIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIixub3RJbkNvbnN0cnVjdDpwbn0se2NoYXJhY3RlcjoiWyIsaW5Db25zdHJ1Y3Q6WyJsYWJlbCIsInJlZmVyZW5jZSJdfSx7Y2hhcmFjdGVyOiJcXCIsYWZ0ZXI6IltcXHJcXG5dIixpbkNvbnN0cnVjdDoicGhyYXNpbmcifSx7Y2hhcmFjdGVyOiJdIixpbkNvbnN0cnVjdDpbImxhYmVsIiwicmVmZXJlbmNlIl19LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiXyJ9LHtjaGFyYWN0ZXI6Il8iLGluQ29uc3RydWN0OiJwaHJhc2luZyIsbm90SW5Db25zdHJ1Y3Q6cG59LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiYCJ9LHtjaGFyYWN0ZXI6ImAiLGluQ29uc3RydWN0OlsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsImNvZGVGZW5jZWRNZXRhR3JhdmVBY2NlbnQiXX0se2NoYXJhY3RlcjoiYCIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIixub3RJbkNvbnN0cnVjdDpwbn0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiJ+In1dfSk7ZnVuY3Rpb24gSG8odCl7bGV0IGU9IiYiK3QrIjsiO1VYZS5pbm5lckhUTUw9ZTtsZXQgYT1VWGUudGV4dENvbnRlbnQ7cmV0dXJuIGEuY2hhckNvZGVBdChhLmxlbmd0aC0xKT09PTU5JiZ0IT09InNlbWkifHxhPT09ZT8hMTphfXZhciBVWGUsY2Q9bigoKT0+e1VYZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpIil9KTtmdW5jdGlvbiBDNih0LGUpe2xldCBhPU51bWJlci5wYXJzZUludCh0LGUpO3JldHVybiBhPDl8fGE9PT0xMXx8YT4xMyYmYTwzMnx8YT4xMjYmJmE8MTYwfHxhPjU1Mjk1JiZhPDU3MzQ0fHxhPjY0OTc1JiZhPDY1MDA4fHwoYSY2NTUzNSk9PT02NTUzNXx8KGEmNjU1MzUpPT09NjU1MzR8fGE+MTExNDExMT8iXHVGRkZEIjpTdHJpbmcuZnJvbUNvZGVQb2ludChhKX12YXIgaEg9bigoKT0+e30pO2Z1bmN0aW9uIG1IKHQpe3JldHVybiB0LnJlcGxhY2UodUt0LHBLdCl9ZnVuY3Rpb24gcEt0KHQsZSxhKXtpZihlKXJldHVybiBlO2lmKGEuY2hhckNvZGVBdCgwKT09PTM1KXtsZXQgaT1hLmNoYXJDb2RlQXQoMSksbz1pPT09MTIwfHxpPT09ODg7cmV0dXJuIEM2KGEuc2xpY2Uobz8yOjEpLG8/MTY6MTApfXJldHVybiBIbyhhKXx8dH12YXIgdUt0LGtLPW4oKCk9PntjZCgpO2hIKCk7dUt0PS9cXChbIS0vOi1AWy1gey1+XSl8JigjKD86XGR7MSw3fXx4W1xkYS1mXXsxLDZ9KXxbXGRhLXpdezEsMzF9KTsvZ2l9KTtmdW5jdGlvbiBqWGUodCl7cmV0dXJuIHQubGFiZWx8fCF0LmlkZW50aWZpZXI/dC5sYWJlbHx8IiI6bUgodC5pZGVudGlmaWVyKX12YXIgV1hlPW4oKCk9PntrSygpfSk7ZnVuY3Rpb24gR1hlKHQpe2lmKCF0Ll9jb21waWxlZCl7bGV0IGU9KHQuYXRCcmVhaz8iW1xcclxcbl1bXFx0IF0qIjoiIikrKHQuYmVmb3JlPyIoPzoiK3QuYmVmb3JlKyIpIjoiIik7dC5fY29tcGlsZWQ9bmV3IFJlZ0V4cCgoZT8iKCIrZSsiKSI6IiIpKygvW3xcXHt9KClbXF1eJCsqPy4tXS8udGVzdCh0LmNoYXJhY3Rlcik/IlxcIjoiIikrdC5jaGFyYWN0ZXIrKHQuYWZ0ZXI/Iig/OiIrdC5hZnRlcisiKSI6IiIpLCJnIil9cmV0dXJuIHQuX2NvbXBpbGVkfXZhciBZWGU9bigoKT0+e30pO2Z1bmN0aW9uIFpYZSh0LGUsYSl7bGV0IHI9ZS5pbmRleFN0YWNrLGk9dC5jaGlsZHJlbnx8W10sbz1bXSxzPS0xLGw9YS5iZWZvcmUsZjtyLnB1c2goLTEpO2xldCBjPWUuY3JlYXRlVHJhY2tlcihhKTtmb3IoOysrczxpLmxlbmd0aDspe2xldCB1PWlbc10sZDtpZihyW3IubGVuZ3RoLTFdPXMscysxPGkubGVuZ3RoKXtsZXQgYj1lLmhhbmRsZS5oYW5kbGVyc1tpW3MrMV0udHlwZV07YiYmYi5wZWVrJiYoYj1iLnBlZWspLGQ9Yj9iKGlbcysxXSx0LGUse2JlZm9yZToiIixhZnRlcjoiIiwuLi5jLmN1cnJlbnQoKX0pLmNoYXJBdCgwKToiIn1lbHNlIGQ9YS5hZnRlcjtvLmxlbmd0aD4wJiYobD09PSJcciJ8fGw9PT1gCmApJiZ1LnR5cGU9PT0iaHRtbCImJihvW28ubGVuZ3RoLTFdPW9bby5sZW5ndGgtMV0ucmVwbGFjZSgvKFxyP1xufFxyKSQvLCIgIiksbD0iICIsYz1lLmNyZWF0ZVRyYWNrZXIoYSksYy5tb3ZlKG8uam9pbigiIikpKTtsZXQgaD1lLmhhbmRsZSh1LHQsZSx7Li4uYy5jdXJyZW50KCksYWZ0ZXI6ZCxiZWZvcmU6bH0pO2YmJmY9PT1oLnNsaWNlKDAsMSkmJihoPWxhKGYuY2hhckNvZGVBdCgwKSkraC5zbGljZSgxKSk7bGV0IGc9ZS5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm87ZS5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm89dm9pZCAwLGY9dm9pZCAwLGcmJihvLmxlbmd0aD4wJiZnLmJlZm9yZSYmbD09PW9bby5sZW5ndGgtMV0uc2xpY2UoLTEpJiYob1tvLmxlbmd0aC0xXT1vW28ubGVuZ3RoLTFdLnNsaWNlKDAsLTEpK2xhKGwuY2hhckNvZGVBdCgwKSkpLGcuYWZ0ZXImJihmPWQpKSxjLm1vdmUoaCksby5wdXNoKGgpLGw9aC5zbGljZSgtMSl9cmV0dXJuIHIucG9wKCksby5qb2luKCIiKX12YXIgWFhlPW4oKCk9Pnt6NigpfSk7ZnVuY3Rpb24gUVhlKHQsZSxhKXtsZXQgcj1lLmluZGV4U3RhY2ssaT10LmNoaWxkcmVufHxbXSxvPWUuY3JlYXRlVHJhY2tlcihhKSxzPVtdLGw9LTE7Zm9yKHIucHVzaCgtMSk7KytsPGkubGVuZ3RoOyl7bGV0IGY9aVtsXTtyW3IubGVuZ3RoLTFdPWwscy5wdXNoKG8ubW92ZShlLmhhbmRsZShmLHQsZSx7YmVmb3JlOmAKYCxhZnRlcjpgCmAsLi4uby5jdXJyZW50KCl9KSkpLGYudHlwZSE9PSJsaXN0IiYmKGUuYnVsbGV0TGFzdFVzZWQ9dm9pZCAwKSxsPGkubGVuZ3RoLTEmJnMucHVzaChvLm1vdmUoaEt0KGYsaVtsKzFdLHQsZSkpKX1yZXR1cm4gci5wb3AoKSxzLmpvaW4oIiIpfWZ1bmN0aW9uIGhLdCh0LGUsYSxyKXtsZXQgaT1yLmpvaW4ubGVuZ3RoO2Zvcig7aS0tOyl7bGV0IG89ci5qb2luW2ldKHQsZSxhLHIpO2lmKG89PT0hMHx8bz09PTEpYnJlYWs7aWYodHlwZW9mIG89PSJudW1iZXIiKXJldHVybmAKYC5yZXBlYXQoMStvKTtpZihvPT09ITEpcmV0dXJuYAoKPCEtLS0tPgoKYH1yZXR1cm5gCgpgfXZhciBLWGU9bigoKT0+e30pO2Z1bmN0aW9uIEpYZSh0LGUpe2xldCBhPVtdLHI9MCxpPTAsbztmb3IoO289bUt0LmV4ZWModCk7KXModC5zbGljZShyLG8uaW5kZXgpKSxhLnB1c2gob1swXSkscj1vLmluZGV4K29bMF0ubGVuZ3RoLGkrKztyZXR1cm4gcyh0LnNsaWNlKHIpKSxhLmpvaW4oIiIpO2Z1bmN0aW9uIHMobCl7YS5wdXNoKGUobCxpLCFsKSl9fXZhciBtS3QsZVFlPW4oKCk9PnttS3Q9L1xyP1xufFxyL2d9KTtmdW5jdGlvbiBhUWUodCxlLGEpe2xldCByPShhLmJlZm9yZXx8IiIpKyhlfHwiIikrKGEuYWZ0ZXJ8fCIiKSxpPVtdLG89W10scz17fSxsPS0xO2Zvcig7KytsPHQudW5zYWZlLmxlbmd0aDspe2xldCB1PXQudW5zYWZlW2xdO2lmKCFuSCh0LnN0YWNrLHUpKWNvbnRpbnVlO2xldCBkPXQuY29tcGlsZVBhdHRlcm4odSksaDtmb3IoO2g9ZC5leGVjKHIpOyl7bGV0IGc9ImJlZm9yZSJpbiB1fHwhIXUuYXRCcmVhayxiPSJhZnRlciJpbiB1LHg9aC5pbmRleCsoZz9oWzFdLmxlbmd0aDowKTtpLmluY2x1ZGVzKHgpPyhzW3hdLmJlZm9yZSYmIWcmJihzW3hdLmJlZm9yZT0hMSksc1t4XS5hZnRlciYmIWImJihzW3hdLmFmdGVyPSExKSk6KGkucHVzaCh4KSxzW3hdPXtiZWZvcmU6ZyxhZnRlcjpifSl9fWkuc29ydChnS3QpO2xldCBmPWEuYmVmb3JlP2EuYmVmb3JlLmxlbmd0aDowLGM9ci5sZW5ndGgtKGEuYWZ0ZXI/YS5hZnRlci5sZW5ndGg6MCk7Zm9yKGw9LTE7KytsPGkubGVuZ3RoOyl7bGV0IHU9aVtsXTt1PGZ8fHU+PWN8fHUrMTxjJiZpW2wrMV09PT11KzEmJnNbdV0uYWZ0ZXImJiFzW3UrMV0uYmVmb3JlJiYhc1t1KzFdLmFmdGVyfHxpW2wtMV09PT11LTEmJnNbdV0uYmVmb3JlJiYhc1t1LTFdLmJlZm9yZSYmIXNbdS0xXS5hZnRlcnx8KGYhPT11JiZvLnB1c2godFFlKHIuc2xpY2UoZix1KSwiXFwiKSksZj11LC9bIS0vOi1AWy1gey1+XS8udGVzdChyLmNoYXJBdCh1KSkmJighYS5lbmNvZGV8fCFhLmVuY29kZS5pbmNsdWRlcyhyLmNoYXJBdCh1KSkpP28ucHVzaCgiXFwiKTooby5wdXNoKGxhKHIuY2hhckNvZGVBdCh1KSkpLGYrKykpfXJldHVybiBvLnB1c2godFFlKHIuc2xpY2UoZixjKSxhLmFmdGVyKSksby5qb2luKCIiKX1mdW5jdGlvbiBnS3QodCxlKXtyZXR1cm4gdC1lfWZ1bmN0aW9uIHRRZSh0LGUpe2xldCBhPS9cXCg/PVshLS86LUBbLWB7LX5dKS9nLHI9W10saT1bXSxvPXQrZSxzPS0xLGw9MCxmO2Zvcig7Zj1hLmV4ZWMobyk7KXIucHVzaChmLmluZGV4KTtmb3IoOysrczxyLmxlbmd0aDspbCE9PXJbc10mJmkucHVzaCh0LnNsaWNlKGwscltzXSkpLGkucHVzaCgiXFwiKSxsPXJbc107cmV0dXJuIGkucHVzaCh0LnNsaWNlKGwpKSxpLmpvaW4oIiIpfXZhciByUWU9bigoKT0+e3o2KCk7c0soKX0pO2Z1bmN0aW9uIGlRZSh0KXtsZXQgZT10fHx7fSxhPWUubm93fHx7fSxyPWUubGluZVNoaWZ0fHwwLGk9YS5saW5lfHwxLG89YS5jb2x1bW58fDE7cmV0dXJue21vdmU6ZixjdXJyZW50OnMsc2hpZnQ6bH07ZnVuY3Rpb24gcygpe3JldHVybntub3c6e2xpbmU6aSxjb2x1bW46b30sbGluZVNoaWZ0OnJ9fWZ1bmN0aW9uIGwoYyl7cis9Y31mdW5jdGlvbiBmKGMpe2xldCB1PWN8fCIiLGQ9dS5zcGxpdCgvXHI/XG58XHIvZyksaD1kW2QubGVuZ3RoLTFdO3JldHVybiBpKz1kLmxlbmd0aC0xLG89ZC5sZW5ndGg9PT0xP28raC5sZW5ndGg6MStoLmxlbmd0aCtyLHV9fXZhciBvUWU9bigoKT0+e30pO2Z1bmN0aW9uIFNLKHQsZSl7bGV0IGE9ZXx8e30scj17YXNzb2NpYXRpb25JZDpqWGUsY29udGFpbmVyUGhyYXNpbmc6eUt0LGNvbnRhaW5lckZsb3c6d0t0LGNyZWF0ZVRyYWNrZXI6aVFlLGNvbXBpbGVQYXR0ZXJuOkdYZSxlbnRlcjpvLGhhbmRsZXJzOnsuLi51bn0saGFuZGxlOnZvaWQgMCxpbmRlbnRMaW5lczpKWGUsaW5kZXhTdGFjazpbXSxqb2luOlsuLi5SWGVdLG9wdGlvbnM6e30sc2FmZTpNS3Qsc3RhY2s6W10sdW5zYWZlOlsuLi5xWGVdfTtvSyhyLGEpLHIub3B0aW9ucy50aWdodERlZmluaXRpb25zJiZyLmpvaW4ucHVzaCh2S3QpLHIuaGFuZGxlPXNIKCJ0eXBlIix7aW52YWxpZDp4S3QsdW5rbm93bjpiS3QsaGFuZGxlcnM6ci5oYW5kbGVyc30pO2xldCBpPXIuaGFuZGxlKHQsdm9pZCAwLHIse2JlZm9yZTpgCmAsYWZ0ZXI6YApgLG5vdzp7bGluZToxLGNvbHVtbjoxfSxsaW5lU2hpZnQ6MH0pO3JldHVybiBpJiZpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMSkhPT0xMCYmaS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09MTMmJihpKz1gCmApLGk7ZnVuY3Rpb24gbyhzKXtyZXR1cm4gci5zdGFjay5wdXNoKHMpLGw7ZnVuY3Rpb24gbCgpe3Iuc3RhY2sucG9wKCl9fX1mdW5jdGlvbiB4S3QodCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaGFuZGxlIHZhbHVlIGAiK3QrImAsIGV4cGVjdGVkIG5vZGUiKX1mdW5jdGlvbiBiS3QodCl7bGV0IGU9dDt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBoYW5kbGUgdW5rbm93biBub2RlIGAiK2UudHlwZSsiYCIpfWZ1bmN0aW9uIHZLdCh0LGUpe2lmKHQudHlwZT09PSJkZWZpbml0aW9uIiYmdC50eXBlPT09ZS50eXBlKXJldHVybiAwfWZ1bmN0aW9uIHlLdCh0LGUpe3JldHVybiBaWGUodCx0aGlzLGUpfWZ1bmN0aW9uIHdLdCh0LGUpe3JldHVybiBRWGUodCx0aGlzLGUpfWZ1bmN0aW9uIE1LdCh0LGUpe3JldHVybiBhUWUodGhpcyx0LGUpfXZhciBzUWU9bigoKT0+e2lLKCk7UlplKCk7eksoKTtIWGUoKTtWWGUoKTtXWGUoKTtZWGUoKTtYWGUoKTtLWGUoKTtlUWUoKTtyUWUoKTtvUWUoKX0pO3ZhciBnSD1uKCgpPT57c1FlKCk7eksoKX0pO2Z1bmN0aW9uIExLKCl7cmV0dXJue2VudGVyOnt0YWJsZTp6S3QsdGFibGVEYXRhOm5RZSx0YWJsZUhlYWRlcjpuUWUsdGFibGVSb3c6U0t0fSxleGl0Ontjb2RlVGV4dDpDS3QsdGFibGU6a0t0LHRhYmxlRGF0YTpDSyx0YWJsZUhlYWRlcjpDSyx0YWJsZVJvdzpDS319fWZ1bmN0aW9uIHpLdCh0KXtsZXQgZT10Ll9hbGlnbjt0aGlzLmVudGVyKHt0eXBlOiJ0YWJsZSIsYWxpZ246ZS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT0ibm9uZSI/bnVsbDphfSksY2hpbGRyZW46W119LHQpLHRoaXMuZGF0YS5pblRhYmxlPSEwfWZ1bmN0aW9uIGtLdCh0KXt0aGlzLmV4aXQodCksdGhpcy5kYXRhLmluVGFibGU9dm9pZCAwfWZ1bmN0aW9uIFNLdCh0KXt0aGlzLmVudGVyKHt0eXBlOiJ0YWJsZVJvdyIsY2hpbGRyZW46W119LHQpfWZ1bmN0aW9uIENLKHQpe3RoaXMuZXhpdCh0KX1mdW5jdGlvbiBuUWUodCl7dGhpcy5lbnRlcih7dHlwZToidGFibGVDZWxsIixjaGlsZHJlbjpbXX0sdCl9ZnVuY3Rpb24gQ0t0KHQpe2xldCBlPXRoaXMucmVzdW1lKCk7dGhpcy5kYXRhLmluVGFibGUmJihlPWUucmVwbGFjZSgvXFwoW1xcfF0pL2csTEt0KSk7bGV0IGE9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTthLnR5cGUsYS52YWx1ZT1lLHRoaXMuZXhpdCh0KX1mdW5jdGlvbiBMS3QodCxlKXtyZXR1cm4gZT09PSJ8Ij9lOnR9ZnVuY3Rpb24gVEsodCl7bGV0IGU9dHx8e30sYT1lLnRhYmxlQ2VsbFBhZGRpbmcscj1lLnRhYmxlUGlwZUFsaWduLGk9ZS5zdHJpbmdMZW5ndGgsbz1hPyIgIjoifCI7cmV0dXJue3Vuc2FmZTpbe2NoYXJhY3RlcjoiXHIiLGluQ29uc3RydWN0OiJ0YWJsZUNlbGwifSx7Y2hhcmFjdGVyOmAKYCxpbkNvbnN0cnVjdDoidGFibGVDZWxsIn0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiJ8IixhZnRlcjoiWwkgOi1dIn0se2NoYXJhY3RlcjoifCIsaW5Db25zdHJ1Y3Q6InRhYmxlQ2VsbCJ9LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiOiIsYWZ0ZXI6Ii0ifSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6Ii0iLGFmdGVyOiJbOnwtXSJ9XSxoYW5kbGVyczp7aW5saW5lQ29kZTpoLHRhYmxlOnMsdGFibGVDZWxsOmYsdGFibGVSb3c6bH19O2Z1bmN0aW9uIHMoZyxiLHgsbSl7cmV0dXJuIGModShnLHgsbSksZy5hbGlnbil9ZnVuY3Rpb24gbChnLGIseCxtKXtsZXQgdj1kKGcseCxtKSx5PWMoW3ZdKTtyZXR1cm4geS5zbGljZSgwLHkuaW5kZXhPZihgCmApKX1mdW5jdGlvbiBmKGcsYix4LG0pe2xldCB2PXguZW50ZXIoInRhYmxlQ2VsbCIpLHk9eC5lbnRlcigicGhyYXNpbmciKSx3PXguY29udGFpbmVyUGhyYXNpbmcoZyx7Li4ubSxiZWZvcmU6byxhZnRlcjpvfSk7cmV0dXJuIHkoKSx2KCksd31mdW5jdGlvbiBjKGcsYil7cmV0dXJuIElaZShnLHthbGlnbjpiLGFsaWduRGVsaW1pdGVyczpyLHBhZGRpbmc6YSxzdHJpbmdMZW5ndGg6aX0pfWZ1bmN0aW9uIHUoZyxiLHgpe2xldCBtPWcuY2hpbGRyZW4sdj0tMSx5PVtdLHc9Yi5lbnRlcigidGFibGUiKTtmb3IoOysrdjxtLmxlbmd0aDspeVt2XT1kKG1bdl0sYix4KTtyZXR1cm4gdygpLHl9ZnVuY3Rpb24gZChnLGIseCl7bGV0IG09Zy5jaGlsZHJlbix2PS0xLHk9W10sdz1iLmVudGVyKCJ0YWJsZVJvdyIpO2Zvcig7Kyt2PG0ubGVuZ3RoOyl5W3ZdPWYobVt2XSxnLGIseCk7cmV0dXJuIHcoKSx5fWZ1bmN0aW9uIGgoZyxiLHgpe2xldCBtPXVuLmlubGluZUNvZGUoZyxiLHgpO3JldHVybiB4LnN0YWNrLmluY2x1ZGVzKCJ0YWJsZUNlbGwiKSYmKG09bS5yZXBsYWNlKC9cfC9nLCJcXCQmIikpLG19fXZhciBsUWU9bigoKT0+e0ZvKCk7RlplKCk7Z0goKX0pO3ZhciBjUWU9bigoKT0+e2xRZSgpfSk7ZnVuY3Rpb24gX0soKXtyZXR1cm57ZXhpdDp7dGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZDpkUWUsdGFza0xpc3RDaGVja1ZhbHVlVW5jaGVja2VkOmRRZSxwYXJhZ3JhcGg6VEt0fX19ZnVuY3Rpb24gQUsoKXtyZXR1cm57dW5zYWZlOlt7YXRCcmVhazohMCxjaGFyYWN0ZXI6Ii0iLGFmdGVyOiJbOnwtXSJ9XSxoYW5kbGVyczp7bGlzdEl0ZW06X0t0fX19ZnVuY3Rpb24gZFFlKHQpe2xldCBlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMl07ZS50eXBlLGUuY2hlY2tlZD10LnR5cGU9PT0idGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCJ9ZnVuY3Rpb24gVEt0KHQpe2xldCBlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMl07aWYoZSYmZS50eXBlPT09Imxpc3RJdGVtIiYmdHlwZW9mIGUuY2hlY2tlZD09ImJvb2xlYW4iKXtsZXQgYT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2EudHlwZTtsZXQgcj1hLmNoaWxkcmVuWzBdO2lmKHImJnIudHlwZT09PSJ0ZXh0Iil7bGV0IGk9ZS5jaGlsZHJlbixvPS0xLHM7Zm9yKDsrK288aS5sZW5ndGg7KXtsZXQgbD1pW29dO2lmKGwudHlwZT09PSJwYXJhZ3JhcGgiKXtzPWw7YnJlYWt9fXM9PT1hJiYoci52YWx1ZT1yLnZhbHVlLnNsaWNlKDEpLHIudmFsdWUubGVuZ3RoPT09MD9hLmNoaWxkcmVuLnNoaWZ0KCk6YS5wb3NpdGlvbiYmci5wb3NpdGlvbiYmdHlwZW9mIHIucG9zaXRpb24uc3RhcnQub2Zmc2V0PT0ibnVtYmVyIiYmKHIucG9zaXRpb24uc3RhcnQuY29sdW1uKyssci5wb3NpdGlvbi5zdGFydC5vZmZzZXQrKyxhLnBvc2l0aW9uLnN0YXJ0PU9iamVjdC5hc3NpZ24oe30sci5wb3NpdGlvbi5zdGFydCkpKX19dGhpcy5leGl0KHQpfWZ1bmN0aW9uIF9LdCh0LGUsYSxyKXtsZXQgaT10LmNoaWxkcmVuWzBdLG89dHlwZW9mIHQuY2hlY2tlZD09ImJvb2xlYW4iJiZpJiZpLnR5cGU9PT0icGFyYWdyYXBoIixzPSJbIisodC5jaGVja2VkPyJ4IjoiICIpKyJdICIsbD1hLmNyZWF0ZVRyYWNrZXIocik7byYmbC5tb3ZlKHMpO2xldCBmPXVuLmxpc3RJdGVtKHQsZSxhLHsuLi5yLC4uLmwuY3VycmVudCgpfSk7cmV0dXJuIG8mJihmPWYucmVwbGFjZSgvXig/OlsqKy1dfFxkK1wuKShbXHJcbl18IHsxLDN9KS8sYykpLGY7ZnVuY3Rpb24gYyh1KXtyZXR1cm4gdStzfX12YXIgZlFlPW4oKCk9PntGbygpO2dIKCl9KTt2YXIgdVFlPW4oKCk9PntmUWUoKX0pO2Z1bmN0aW9uICRLKCl7cmV0dXJuW0tRKCksZUsoKSxhSygpLExLKCksX0soKV19ZnVuY3Rpb24gREsodCl7cmV0dXJue2V4dGVuc2lvbnM6W0pRKCksdEsodCkscksoKSxUSyh0KSxBSygpXX19dmFyIHBRZT1uKCgpPT57TFplKCk7JFplKCk7TlplKCk7Y1FlKCk7dVFlKCl9KTt2YXIgaFFlPW4oKCk9PntwUWUoKX0pO2Z1bmN0aW9uIFMxKHQsZSxhLHIpe2xldCBpPXQubGVuZ3RoLG89MCxzO2lmKGU8MD9lPS1lPmk/MDppK2U6ZT1lPmk/aTplLGE9YT4wP2E6MCxyLmxlbmd0aDwxZTQpcz1BcnJheS5mcm9tKHIpLHMudW5zaGlmdChlLGEpLHQuc3BsaWNlKC4uLnMpO2Vsc2UgZm9yKGEmJnQuc3BsaWNlKGUsYSk7bzxyLmxlbmd0aDspcz1yLnNsaWNlKG8sbysxZTQpLHMudW5zaGlmdChlLDApLHQuc3BsaWNlKC4uLnMpLG8rPTFlNCxlKz0xZTR9ZnVuY3Rpb24gRDEodCxlKXtyZXR1cm4gdC5sZW5ndGg+MD8oUzEodCx0Lmxlbmd0aCwwLGUpLHQpOmV9dmFyIFByPW4oKCk9Pnt9KTtmdW5jdGlvbiB4SCh0KXtsZXQgZT17fSxhPS0xO2Zvcig7KythPHQubGVuZ3RoOylBS3QoZSx0W2FdKTtyZXR1cm4gZX1mdW5jdGlvbiBBS3QodCxlKXtsZXQgYTtmb3IoYSBpbiBlKXtsZXQgaT0oRUsuY2FsbCh0LGEpP3RbYV06dm9pZCAwKXx8KHRbYV09e30pLG89ZVthXSxzO2lmKG8pZm9yKHMgaW4gbyl7RUsuY2FsbChpLHMpfHwoaVtzXT1bXSk7bGV0IGw9b1tzXTskS3QoaVtzXSxBcnJheS5pc0FycmF5KGwpP2w6bD9bbF06W10pfX19ZnVuY3Rpb24gJEt0KHQsZSl7bGV0IGE9LTEscj1bXTtmb3IoOysrYTxlLmxlbmd0aDspKGVbYV0uYWRkPT09ImFmdGVyIj90OnIpLnB1c2goZVthXSk7UzEodCwwLDAscil9ZnVuY3Rpb24gYkgodCl7bGV0IGU9e30sYT0tMTtmb3IoOysrYTx0Lmxlbmd0aDspREt0KGUsdFthXSk7cmV0dXJuIGV9ZnVuY3Rpb24gREt0KHQsZSl7bGV0IGE7Zm9yKGEgaW4gZSl7bGV0IGk9KEVLLmNhbGwodCxhKT90W2FdOnZvaWQgMCl8fCh0W2FdPXt9KSxvPWVbYV0scztpZihvKWZvcihzIGluIG8paVtzXT1vW3NdfX12YXIgRUssdkg9bigoKT0+e1ByKCk7RUs9e30uaGFzT3duUHJvcGVydHl9KTtmdW5jdGlvbiBJSygpe3JldHVybnt0ZXh0OklyfX1mdW5jdGlvbiBQS3QodCxlLGEpe2xldCByPXRoaXMsaSxvO3JldHVybiBzO2Z1bmN0aW9uIHMoZCl7cmV0dXJuIU5LKGQpfHwhTVFlLmNhbGwocixyLnByZXZpb3VzKXx8UEsoci5ldmVudHMpP2EoZCk6KHQuZW50ZXIoImxpdGVyYWxBdXRvbGluayIpLHQuZW50ZXIoImxpdGVyYWxBdXRvbGlua0VtYWlsIiksbChkKSl9ZnVuY3Rpb24gbChkKXtyZXR1cm4gTksoZCk/KHQuY29uc3VtZShkKSxsKTpkPT09NjQ/KHQuY29uc3VtZShkKSxmKTphKGQpfWZ1bmN0aW9uIGYoZCl7cmV0dXJuIGQ9PT00Nj90LmNoZWNrKE5LdCx1LGMpKGQpOmQ9PT00NXx8ZD09PTk1fHx5MShkKT8obz0hMCx0LmNvbnN1bWUoZCksZik6dShkKX1mdW5jdGlvbiBjKGQpe3JldHVybiB0LmNvbnN1bWUoZCksaT0hMCxmfWZ1bmN0aW9uIHUoZCl7cmV0dXJuIG8mJmkmJkgxKHIucHJldmlvdXMpPyh0LmV4aXQoImxpdGVyYWxBdXRvbGlua0VtYWlsIiksdC5leGl0KCJsaXRlcmFsQXV0b2xpbmsiKSxlKGQpKTphKGQpfX1mdW5jdGlvbiBJS3QodCxlLGEpe2xldCByPXRoaXM7cmV0dXJuIGk7ZnVuY3Rpb24gaShzKXtyZXR1cm4gcyE9PTg3JiZzIT09MTE5fHwheVFlLmNhbGwocixyLnByZXZpb3VzKXx8UEsoci5ldmVudHMpP2Eocyk6KHQuZW50ZXIoImxpdGVyYWxBdXRvbGluayIpLHQuZW50ZXIoImxpdGVyYWxBdXRvbGlua1d3dyIpLHQuY2hlY2soRUt0LHQuYXR0ZW1wdChtUWUsdC5hdHRlbXB0KGdRZSxvKSxhKSxhKShzKSl9ZnVuY3Rpb24gbyhzKXtyZXR1cm4gdC5leGl0KCJsaXRlcmFsQXV0b2xpbmtXd3ciKSx0LmV4aXQoImxpdGVyYWxBdXRvbGluayIpLGUocyl9fWZ1bmN0aW9uIEZLdCh0LGUsYSl7bGV0IHI9dGhpcyxpPSIiLG89ITE7cmV0dXJuIHM7ZnVuY3Rpb24gcyhkKXtyZXR1cm4oZD09PTcyfHxkPT09MTA0KSYmd1FlLmNhbGwocixyLnByZXZpb3VzKSYmIVBLKHIuZXZlbnRzKT8odC5lbnRlcigibGl0ZXJhbEF1dG9saW5rIiksdC5lbnRlcigibGl0ZXJhbEF1dG9saW5rSHR0cCIpLGkrPVN0cmluZy5mcm9tQ29kZVBvaW50KGQpLHQuY29uc3VtZShkKSxsKTphKGQpfWZ1bmN0aW9uIGwoZCl7aWYoSDEoZCkmJmkubGVuZ3RoPDUpcmV0dXJuIGkrPVN0cmluZy5mcm9tQ29kZVBvaW50KGQpLHQuY29uc3VtZShkKSxsO2lmKGQ9PT01OCl7bGV0IGg9aS50b0xvd2VyQ2FzZSgpO2lmKGg9PT0iaHR0cCJ8fGg9PT0iaHR0cHMiKXJldHVybiB0LmNvbnN1bWUoZCksZn1yZXR1cm4gYShkKX1mdW5jdGlvbiBmKGQpe3JldHVybiBkPT09NDc/KHQuY29uc3VtZShkKSxvP2M6KG89ITAsZikpOmEoZCl9ZnVuY3Rpb24gYyhkKXtyZXR1cm4gZD09PW51bGx8fGxuKGQpfHx3dChkKXx8TnIoZCl8fGNuKGQpP2EoZCk6dC5hdHRlbXB0KG1RZSx0LmF0dGVtcHQoZ1FlLHUpLGEpKGQpfWZ1bmN0aW9uIHUoZCl7cmV0dXJuIHQuZXhpdCgibGl0ZXJhbEF1dG9saW5rSHR0cCIpLHQuZXhpdCgibGl0ZXJhbEF1dG9saW5rIiksZShkKX19ZnVuY3Rpb24gT0t0KHQsZSxhKXtsZXQgcj0wO3JldHVybiBpO2Z1bmN0aW9uIGkocyl7cmV0dXJuKHM9PT04N3x8cz09PTExOSkmJnI8Mz8ocisrLHQuY29uc3VtZShzKSxpKTpzPT09NDYmJnI9PT0zPyh0LmNvbnN1bWUocyksbyk6YShzKX1mdW5jdGlvbiBvKHMpe3JldHVybiBzPT09bnVsbD9hKHMpOmUocyl9fWZ1bmN0aW9uIEJLdCh0LGUsYSl7bGV0IHIsaSxvO3JldHVybiBzO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGM9PT00Nnx8Yz09PTk1P3QuY2hlY2soeFFlLGYsbCkoYyk6Yz09PW51bGx8fHd0KGMpfHxOcihjKXx8YyE9PTQ1JiZjbihjKT9mKGMpOihvPSEwLHQuY29uc3VtZShjKSxzKX1mdW5jdGlvbiBsKGMpe3JldHVybiBjPT09OTU/cj0hMDooaT1yLHI9dm9pZCAwKSx0LmNvbnN1bWUoYyksc31mdW5jdGlvbiBmKGMpe3JldHVybiBpfHxyfHwhbz9hKGMpOmUoYyl9fWZ1bmN0aW9uIFJLdCh0LGUpe2xldCBhPTAscj0wO3JldHVybiBpO2Z1bmN0aW9uIGkocyl7cmV0dXJuIHM9PT00MD8oYSsrLHQuY29uc3VtZShzKSxpKTpzPT09NDEmJnI8YT9vKHMpOnM9PT0zM3x8cz09PTM0fHxzPT09Mzh8fHM9PT0zOXx8cz09PTQxfHxzPT09NDJ8fHM9PT00NHx8cz09PTQ2fHxzPT09NTh8fHM9PT01OXx8cz09PTYwfHxzPT09NjN8fHM9PT05M3x8cz09PTk1fHxzPT09MTI2P3QuY2hlY2soeFFlLGUsbykocyk6cz09PW51bGx8fHd0KHMpfHxOcihzKT9lKHMpOih0LmNvbnN1bWUocyksaSl9ZnVuY3Rpb24gbyhzKXtyZXR1cm4gcz09PTQxJiZyKyssdC5jb25zdW1lKHMpLGl9fWZ1bmN0aW9uIEhLdCh0LGUsYSl7cmV0dXJuIHI7ZnVuY3Rpb24gcihsKXtyZXR1cm4gbD09PTMzfHxsPT09MzR8fGw9PT0zOXx8bD09PTQxfHxsPT09NDJ8fGw9PT00NHx8bD09PTQ2fHxsPT09NTh8fGw9PT01OXx8bD09PTYzfHxsPT09OTV8fGw9PT0xMjY/KHQuY29uc3VtZShsKSxyKTpsPT09Mzg/KHQuY29uc3VtZShsKSxvKTpsPT09OTM/KHQuY29uc3VtZShsKSxpKTpsPT09NjB8fGw9PT1udWxsfHx3dChsKXx8TnIobCk/ZShsKTphKGwpfWZ1bmN0aW9uIGkobCl7cmV0dXJuIGw9PT1udWxsfHxsPT09NDB8fGw9PT05MXx8d3QobCl8fE5yKGwpP2UobCk6cihsKX1mdW5jdGlvbiBvKGwpe3JldHVybiBIMShsKT9zKGwpOmEobCl9ZnVuY3Rpb24gcyhsKXtyZXR1cm4gbD09PTU5Pyh0LmNvbnN1bWUobCkscik6SDEobCk/KHQuY29uc3VtZShsKSxzKTphKGwpfX1mdW5jdGlvbiBxS3QodCxlLGEpe3JldHVybiByO2Z1bmN0aW9uIHIobyl7cmV0dXJuIHQuY29uc3VtZShvKSxpfWZ1bmN0aW9uIGkobyl7cmV0dXJuIHkxKG8pP2Eobyk6ZShvKX19ZnVuY3Rpb24geVFlKHQpe3JldHVybiB0PT09bnVsbHx8dD09PTQwfHx0PT09NDJ8fHQ9PT05NXx8dD09PTkxfHx0PT09OTN8fHQ9PT0xMjZ8fHd0KHQpfWZ1bmN0aW9uIHdRZSh0KXtyZXR1cm4hSDEodCl9ZnVuY3Rpb24gTVFlKHQpe3JldHVybiEodD09PTQ3fHxOSyh0KSl9ZnVuY3Rpb24gTksodCl7cmV0dXJuIHQ9PT00M3x8dD09PTQ1fHx0PT09NDZ8fHQ9PT05NXx8eTEodCl9ZnVuY3Rpb24gUEsodCl7bGV0IGU9dC5sZW5ndGgsYT0hMTtmb3IoO2UtLTspe2xldCByPXRbZV1bMV07aWYoKHIudHlwZT09PSJsYWJlbExpbmsifHxyLnR5cGU9PT0ibGFiZWxJbWFnZSIpJiYhci5fYmFsYW5jZWQpe2E9ITA7YnJlYWt9aWYoci5fZ2ZtQXV0b2xpbmtMaXRlcmFsV2Fsa2VkSW50byl7YT0hMTticmVha319cmV0dXJuIHQubGVuZ3RoPjAmJiFhJiYodFt0Lmxlbmd0aC0xXVsxXS5fZ2ZtQXV0b2xpbmtMaXRlcmFsV2Fsa2VkSW50bz0hMCksYX12YXIgRUt0LG1RZSxnUWUseFFlLE5LdCxiUWUsdlFlLGtpLElyLHpRZT1uKCgpPT57a3QoKTtFS3Q9e3Rva2VuaXplOk9LdCxwYXJ0aWFsOiEwfSxtUWU9e3Rva2VuaXplOkJLdCxwYXJ0aWFsOiEwfSxnUWU9e3Rva2VuaXplOlJLdCxwYXJ0aWFsOiEwfSx4UWU9e3Rva2VuaXplOkhLdCxwYXJ0aWFsOiEwfSxOS3Q9e3Rva2VuaXplOnFLdCxwYXJ0aWFsOiEwfSxiUWU9e25hbWU6Ind3d0F1dG9saW5rIix0b2tlbml6ZTpJS3QscHJldmlvdXM6eVFlfSx2UWU9e25hbWU6InByb3RvY29sQXV0b2xpbmsiLHRva2VuaXplOkZLdCxwcmV2aW91czp3UWV9LGtpPXtuYW1lOiJlbWFpbEF1dG9saW5rIix0b2tlbml6ZTpQS3QscHJldmlvdXM6TVFlfSxJcj17fTtmb3IodmFyIGhuPTQ4O2huPDEyMzspSXJbaG5dPWtpLGhuKyssaG49PT01OD9obj02NTpobj09PTkxJiYoaG49OTcpO0lyWzQzXT1raSxJcls0NV09a2ksSXJbNDZdPWtpLElyWzk1XT1raSxJcls3Ml09W2tpLHZRZV0sSXJbMTA0XT1ba2ksdlFlXSxJcls4N109W2tpLGJRZV0sSXJbMTE5XT1ba2ksYlFlXX0pO2Z1bmN0aW9uIHlIKHQpe3JldHVybiB0LnJlcGxhY2UoL1siJjw+XS9nLGUpO2Z1bmN0aW9uIGUoYSl7cmV0dXJuIiYiK1ZLdFthXSsiOyJ9fXZhciBWS3QsRks9bigoKT0+e1ZLdD17JyInOiJxdW90IiwiJiI6ImFtcCIsIjwiOiJsdCIsIj4iOiJndCJ9fSk7ZnVuY3Rpb24gRnIodCxlKXtsZXQgYT15SChjYSh0fHwiIikpO2lmKCFlKXJldHVybiBhO2xldCByPWEuaW5kZXhPZigiOiIpLGk9YS5pbmRleE9mKCI/Iiksbz1hLmluZGV4T2YoIiMiKSxzPWEuaW5kZXhPZigiLyIpO3JldHVybiByPDB8fHM+LTEmJnI+c3x8aT4tMSYmcj5pfHxvPi0xJiZyPm98fGUudGVzdChhLnNsaWNlKDAscikpP2E6IiJ9ZnVuY3Rpb24gY2EodCl7bGV0IGU9W10sYT0tMSxyPTAsaT0wO2Zvcig7KythPHQubGVuZ3RoOyl7bGV0IG89dC5jaGFyQ29kZUF0KGEpLHM9IiI7aWYobz09PTM3JiZ5MSh0LmNoYXJDb2RlQXQoYSsxKSkmJnkxKHQuY2hhckNvZGVBdChhKzIpKSlpPTI7ZWxzZSBpZihvPDEyOCkvWyEjJCYtOz0/LVpfYS16fl0vLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShvKSl8fChzPVN0cmluZy5mcm9tQ2hhckNvZGUobykpO2Vsc2UgaWYobz41NTI5NSYmbzw1NzM0NCl7bGV0IGw9dC5jaGFyQ29kZUF0KGErMSk7bzw1NjMyMCYmbD41NjMxOSYmbDw1NzM0ND8ocz1TdHJpbmcuZnJvbUNoYXJDb2RlKG8sbCksaT0xKTpzPSJcdUZGRkQifWVsc2Ugcz1TdHJpbmcuZnJvbUNoYXJDb2RlKG8pO3MmJihlLnB1c2godC5zbGljZShyLGEpLGVuY29kZVVSSUNvbXBvbmVudChzKSkscj1hK2krMSxzPSIiKSxpJiYoYSs9aSxpPTApfXJldHVybiBlLmpvaW4oIiIpK3Quc2xpY2Uocil9dmFyIE9yPW4oKCk9PntrdCgpO0ZLKCl9KTtmdW5jdGlvbiBCSygpe3JldHVybntleGl0OntsaXRlcmFsQXV0b2xpbmtFbWFpbDpqS3QsbGl0ZXJhbEF1dG9saW5rSHR0cDpXS3QsbGl0ZXJhbEF1dG9saW5rV3d3OlVLdH19fWZ1bmN0aW9uIFVLdCh0KXtPSy5jYWxsKHRoaXMsdCwiaHR0cDovLyIpfWZ1bmN0aW9uIGpLdCh0KXtPSy5jYWxsKHRoaXMsdCwibWFpbHRvOiIpfWZ1bmN0aW9uIFdLdCh0KXtPSy5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gT0sodCxlKXtsZXQgYT10aGlzLnNsaWNlU2VyaWFsaXplKHQpO3RoaXMudGFnKCc8YSBocmVmPSInK0ZyKChlfHwiIikrYSkrJyI+JyksdGhpcy5yYXcodGhpcy5lbmNvZGUoYSkpLHRoaXMudGFnKCI8L2E+Iil9dmFyIGtRZT1uKCgpPT57T3IoKX0pO3ZhciBTUWU9bigoKT0+e3pRZSgpO2tRZSgpfSk7ZnVuY3Rpb24gcW8odCxlLGEpe2xldCByPVtdLGk9LTE7Zm9yKDsrK2k8dC5sZW5ndGg7KXtsZXQgbz10W2ldLnJlc29sdmVBbGw7byYmIXIuaW5jbHVkZXMobykmJihlPW8oZSxhKSxyLnB1c2gobykpfXJldHVybiBlfXZhciBkZD1uKCgpPT57fSk7ZnVuY3Rpb24gR0t0KHQsZSl7bGV0IGE9LTEscixpLG8scyxsLGYsYyx1O2Zvcig7KythPHQubGVuZ3RoOylpZih0W2FdWzBdPT09ImVudGVyIiYmdFthXVsxXS50eXBlPT09ImF0dGVudGlvblNlcXVlbmNlIiYmdFthXVsxXS5fY2xvc2Upe2ZvcihyPWE7ci0tOylpZih0W3JdWzBdPT09ImV4aXQiJiZ0W3JdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiZ0W3JdWzFdLl9vcGVuJiZlLnNsaWNlU2VyaWFsaXplKHRbcl1bMV0pLmNoYXJDb2RlQXQoMCk9PT1lLnNsaWNlU2VyaWFsaXplKHRbYV1bMV0pLmNoYXJDb2RlQXQoMCkpe2lmKCh0W3JdWzFdLl9jbG9zZXx8dFthXVsxXS5fb3BlbikmJih0W2FdWzFdLmVuZC5vZmZzZXQtdFthXVsxXS5zdGFydC5vZmZzZXQpJTMmJiEoKHRbcl1bMV0uZW5kLm9mZnNldC10W3JdWzFdLnN0YXJ0Lm9mZnNldCt0W2FdWzFdLmVuZC5vZmZzZXQtdFthXVsxXS5zdGFydC5vZmZzZXQpJTMpKWNvbnRpbnVlO2Y9dFtyXVsxXS5lbmQub2Zmc2V0LXRbcl1bMV0uc3RhcnQub2Zmc2V0PjEmJnRbYV1bMV0uZW5kLm9mZnNldC10W2FdWzFdLnN0YXJ0Lm9mZnNldD4xPzI6MTtsZXQgZD17Li4udFtyXVsxXS5lbmR9LGg9ey4uLnRbYV1bMV0uc3RhcnR9O0NRZShkLC1mKSxDUWUoaCxmKSxzPXt0eXBlOmY+MT8ic3Ryb25nU2VxdWVuY2UiOiJlbXBoYXNpc1NlcXVlbmNlIixzdGFydDpkLGVuZDp7Li4udFtyXVsxXS5lbmR9fSxsPXt0eXBlOmY+MT8ic3Ryb25nU2VxdWVuY2UiOiJlbXBoYXNpc1NlcXVlbmNlIixzdGFydDp7Li4udFthXVsxXS5zdGFydH0sZW5kOmh9LG89e3R5cGU6Zj4xPyJzdHJvbmdUZXh0IjoiZW1waGFzaXNUZXh0IixzdGFydDp7Li4udFtyXVsxXS5lbmR9LGVuZDp7Li4udFthXVsxXS5zdGFydH19LGk9e3R5cGU6Zj4xPyJzdHJvbmciOiJlbXBoYXNpcyIsc3RhcnQ6ey4uLnMuc3RhcnR9LGVuZDp7Li4ubC5lbmR9fSx0W3JdWzFdLmVuZD17Li4ucy5zdGFydH0sdFthXVsxXS5zdGFydD17Li4ubC5lbmR9LGM9W10sdFtyXVsxXS5lbmQub2Zmc2V0LXRbcl1bMV0uc3RhcnQub2Zmc2V0JiYoYz1EMShjLFtbImVudGVyIix0W3JdWzFdLGVdLFsiZXhpdCIsdFtyXVsxXSxlXV0pKSxjPUQxKGMsW1siZW50ZXIiLGksZV0sWyJlbnRlciIscyxlXSxbImV4aXQiLHMsZV0sWyJlbnRlciIsbyxlXV0pLGM9RDEoYyxxbyhlLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCx0LnNsaWNlKHIrMSxhKSxlKSksYz1EMShjLFtbImV4aXQiLG8sZV0sWyJlbnRlciIsbCxlXSxbImV4aXQiLGwsZV0sWyJleGl0IixpLGVdXSksdFthXVsxXS5lbmQub2Zmc2V0LXRbYV1bMV0uc3RhcnQub2Zmc2V0Pyh1PTIsYz1EMShjLFtbImVudGVyIix0W2FdWzFdLGVdLFsiZXhpdCIsdFthXVsxXSxlXV0pKTp1PTAsUzEodCxyLTEsYS1yKzMsYyksYT1yK2MubGVuZ3RoLXUtMjticmVha319Zm9yKGE9LTE7KythPHQubGVuZ3RoOyl0W2FdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiYodFthXVsxXS50eXBlPSJkYXRhIik7cmV0dXJuIHR9ZnVuY3Rpb24gWUt0KHQsZSl7bGV0IGE9dGhpcy5wYXJzZXIuY29uc3RydWN0cy5hdHRlbnRpb25NYXJrZXJzLm51bGwscj10aGlzLnByZXZpb3VzLGk9emkociksbztyZXR1cm4gcztmdW5jdGlvbiBzKGYpe3JldHVybiBvPWYsdC5lbnRlcigiYXR0ZW50aW9uU2VxdWVuY2UiKSxsKGYpfWZ1bmN0aW9uIGwoZil7aWYoZj09PW8pcmV0dXJuIHQuY29uc3VtZShmKSxsO2xldCBjPXQuZXhpdCgiYXR0ZW50aW9uU2VxdWVuY2UiKSx1PXppKGYpLGQ9IXV8fHU9PT0yJiZpfHxhLmluY2x1ZGVzKGYpLGg9IWl8fGk9PT0yJiZ1fHxhLmluY2x1ZGVzKHIpO3JldHVybiBjLl9vcGVuPSEhKG89PT00Mj9kOmQmJihpfHwhaCkpLGMuX2Nsb3NlPSEhKG89PT00Mj9oOmgmJih1fHwhZCkpLGUoZil9fWZ1bmN0aW9uIENRZSh0LGUpe3QuY29sdW1uKz1lLHQub2Zmc2V0Kz1lLHQuX2J1ZmZlckluZGV4Kz1lfXZhciBmZCxMUWU9bigoKT0+e1ByKCk7Y0goKTtkZCgpO2ZkPXtuYW1lOiJhdHRlbnRpb24iLHJlc29sdmVBbGw6R0t0LHRva2VuaXplOllLdH19KTtmdW5jdGlvbiBaS3QodCxlLGEpe2xldCByPTA7cmV0dXJuIGk7ZnVuY3Rpb24gaShnKXtyZXR1cm4gdC5lbnRlcigiYXV0b2xpbmsiKSx0LmVudGVyKCJhdXRvbGlua01hcmtlciIpLHQuY29uc3VtZShnKSx0LmV4aXQoImF1dG9saW5rTWFya2VyIiksdC5lbnRlcigiYXV0b2xpbmtQcm90b2NvbCIpLG99ZnVuY3Rpb24gbyhnKXtyZXR1cm4gSDEoZyk/KHQuY29uc3VtZShnKSxzKTpnPT09NjQ/YShnKTpjKGcpfWZ1bmN0aW9uIHMoZyl7cmV0dXJuIGc9PT00M3x8Zz09PTQ1fHxnPT09NDZ8fHkxKGcpPyhyPTEsbChnKSk6YyhnKX1mdW5jdGlvbiBsKGcpe3JldHVybiBnPT09NTg/KHQuY29uc3VtZShnKSxyPTAsZik6KGc9PT00M3x8Zz09PTQ1fHxnPT09NDZ8fHkxKGcpKSYmcisrPDMyPyh0LmNvbnN1bWUoZyksbCk6KHI9MCxjKGcpKX1mdW5jdGlvbiBmKGcpe3JldHVybiBnPT09NjI/KHQuZXhpdCgiYXV0b2xpbmtQcm90b2NvbCIpLHQuZW50ZXIoImF1dG9saW5rTWFya2VyIiksdC5jb25zdW1lKGcpLHQuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKSx0LmV4aXQoImF1dG9saW5rIiksZSk6Zz09PW51bGx8fGc9PT0zMnx8Zz09PTYwfHxsbihnKT9hKGcpOih0LmNvbnN1bWUoZyksZil9ZnVuY3Rpb24gYyhnKXtyZXR1cm4gZz09PTY0Pyh0LmNvbnN1bWUoZyksdSk6aFplKGcpPyh0LmNvbnN1bWUoZyksYyk6YShnKX1mdW5jdGlvbiB1KGcpe3JldHVybiB5MShnKT9kKGcpOmEoZyl9ZnVuY3Rpb24gZChnKXtyZXR1cm4gZz09PTQ2Pyh0LmNvbnN1bWUoZykscj0wLHUpOmc9PT02Mj8odC5leGl0KCJhdXRvbGlua1Byb3RvY29sIikudHlwZT0iYXV0b2xpbmtFbWFpbCIsdC5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSx0LmNvbnN1bWUoZyksdC5leGl0KCJhdXRvbGlua01hcmtlciIpLHQuZXhpdCgiYXV0b2xpbmsiKSxlKTpoKGcpfWZ1bmN0aW9uIGgoZyl7aWYoKGc9PT00NXx8eTEoZykpJiZyKys8NjMpe2xldCBiPWc9PT00NT9oOmQ7cmV0dXJuIHQuY29uc3VtZShnKSxifXJldHVybiBhKGcpfX12YXIgUkssVFFlPW4oKCk9PntrdCgpO1JLPXtuYW1lOiJhdXRvbGluayIsdG9rZW5pemU6Wkt0fX0pO2Z1bmN0aW9uIEplKHQsZSxhLHIpe2xldCBpPXI/ci0xOk51bWJlci5QT1NJVElWRV9JTkZJTklUWSxvPTA7cmV0dXJuIHM7ZnVuY3Rpb24gcyhmKXtyZXR1cm4gR2UoZik/KHQuZW50ZXIoYSksbChmKSk6ZShmKX1mdW5jdGlvbiBsKGYpe3JldHVybiBHZShmKSYmbysrPGk/KHQuY29uc3VtZShmKSxsKToodC5leGl0KGEpLGUoZikpfX12YXIgQzE9bigoKT0+e2t0KCl9KTtmdW5jdGlvbiBYS3QodCxlLGEpe3JldHVybiByO2Z1bmN0aW9uIHIobyl7cmV0dXJuIEdlKG8pP0plKHQsaSwibGluZVByZWZpeCIpKG8pOmkobyl9ZnVuY3Rpb24gaShvKXtyZXR1cm4gbz09PW51bGx8fFBlKG8pP2Uobyk6YShvKX19dmFyIEJyLHdIPW4oKCk9PntDMSgpO2t0KCk7QnI9e3BhcnRpYWw6ITAsdG9rZW5pemU6WEt0fX0pO2Z1bmN0aW9uIFFLdCh0LGUsYSl7bGV0IHI9dGhpcztyZXR1cm4gaTtmdW5jdGlvbiBpKHMpe2lmKHM9PT02Mil7bGV0IGw9ci5jb250YWluZXJTdGF0ZTtyZXR1cm4gbC5vcGVufHwodC5lbnRlcigiYmxvY2tRdW90ZSIse19jb250YWluZXI6ITB9KSxsLm9wZW49ITApLHQuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXgiKSx0LmVudGVyKCJibG9ja1F1b3RlTWFya2VyIiksdC5jb25zdW1lKHMpLHQuZXhpdCgiYmxvY2tRdW90ZU1hcmtlciIpLG99cmV0dXJuIGEocyl9ZnVuY3Rpb24gbyhzKXtyZXR1cm4gR2Uocyk/KHQuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIiksdC5jb25zdW1lKHMpLHQuZXhpdCgiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKSx0LmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKSxlKToodC5leGl0KCJibG9ja1F1b3RlUHJlZml4IiksZShzKSl9fWZ1bmN0aW9uIEtLdCh0LGUsYSl7bGV0IHI9dGhpcztyZXR1cm4gaTtmdW5jdGlvbiBpKHMpe3JldHVybiBHZShzKT9KZSh0LG8sImxpbmVQcmVmaXgiLHIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkocyk6byhzKX1mdW5jdGlvbiBvKHMpe3JldHVybiB0LmF0dGVtcHQoTUgsZSxhKShzKX19ZnVuY3Rpb24gSkt0KHQpe3QuZXhpdCgiYmxvY2tRdW90ZSIpfXZhciBNSCxfUWU9bigoKT0+e0MxKCk7a3QoKTtNSD17Y29udGludWF0aW9uOnt0b2tlbml6ZTpLS3R9LGV4aXQ6Skt0LG5hbWU6ImJsb2NrUXVvdGUiLHRva2VuaXplOlFLdH19KTtmdW5jdGlvbiBlSnQodCxlLGEpe3JldHVybiByO2Z1bmN0aW9uIHIobyl7cmV0dXJuIHQuZW50ZXIoImNoYXJhY3RlckVzY2FwZSIpLHQuZW50ZXIoImVzY2FwZU1hcmtlciIpLHQuY29uc3VtZShvKSx0LmV4aXQoImVzY2FwZU1hcmtlciIpLGl9ZnVuY3Rpb24gaShvKXtyZXR1cm4gZ1plKG8pPyh0LmVudGVyKCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZSIpLHQuY29uc3VtZShvKSx0LmV4aXQoImNoYXJhY3RlckVzY2FwZVZhbHVlIiksdC5leGl0KCJjaGFyYWN0ZXJFc2NhcGUiKSxlKTphKG8pfX12YXIgekgsQVFlPW4oKCk9PntrdCgpO3pIPXtuYW1lOiJjaGFyYWN0ZXJFc2NhcGUiLHRva2VuaXplOmVKdH19KTtmdW5jdGlvbiB0SnQodCxlLGEpe2xldCByPXRoaXMsaT0wLG8scztyZXR1cm4gbDtmdW5jdGlvbiBsKGQpe3JldHVybiB0LmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2UiKSx0LmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSx0LmNvbnN1bWUoZCksdC5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxmfWZ1bmN0aW9uIGYoZCl7cmV0dXJuIGQ9PT0zNT8odC5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIpLHQuY29uc3VtZShkKSx0LmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiKSxjKToodC5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSxvPTMxLHM9eTEsdShkKSl9ZnVuY3Rpb24gYyhkKXtyZXR1cm4gZD09PTg4fHxkPT09MTIwPyh0LmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCIpLHQuY29uc3VtZShkKSx0LmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsIiksdC5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSxvPTYscz1tWmUsdSk6KHQuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIiksbz03LHM9b2QsdShkKSl9ZnVuY3Rpb24gdShkKXtpZihkPT09NTkmJmkpe2xldCBoPXQuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTtyZXR1cm4gcz09PXkxJiYhSG8oci5zbGljZVNlcmlhbGl6ZShoKSk/YShkKToodC5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksdC5jb25zdW1lKGQpLHQuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksdC5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2UiKSxlKX1yZXR1cm4gcyhkKSYmaSsrPG8/KHQuY29uc3VtZShkKSx1KTphKGQpfX12YXIga0gsJFFlPW4oKCk9PntjZCgpO2t0KCk7a0g9e25hbWU6ImNoYXJhY3RlclJlZmVyZW5jZSIsdG9rZW5pemU6dEp0fX0pO2Z1bmN0aW9uIGFKdCh0LGUsYSl7bGV0IHI9dGhpcyxpPXtwYXJ0aWFsOiEwLHRva2VuaXplOkN9LG89MCxzPTAsbDtyZXR1cm4gZjtmdW5jdGlvbiBmKHope3JldHVybiBjKHopfWZ1bmN0aW9uIGMoeil7bGV0IFA9ci5ldmVudHNbci5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBvPVAmJlBbMV0udHlwZT09PSJsaW5lUHJlZml4Ij9QWzJdLnNsaWNlU2VyaWFsaXplKFBbMV0sITApLmxlbmd0aDowLGw9eix0LmVudGVyKCJjb2RlRmVuY2VkIiksdC5lbnRlcigiY29kZUZlbmNlZEZlbmNlIiksdC5lbnRlcigiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSx1KHopfWZ1bmN0aW9uIHUoeil7cmV0dXJuIHo9PT1sPyhzKyssdC5jb25zdW1lKHopLHUpOnM8Mz9hKHopOih0LmV4aXQoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksR2Uoeik/SmUodCxkLCJ3aGl0ZXNwYWNlIikoeik6ZCh6KSl9ZnVuY3Rpb24gZCh6KXtyZXR1cm4gej09PW51bGx8fFBlKHopPyh0LmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpLHIuaW50ZXJydXB0P2Uoeik6dC5jaGVjayhEUWUseCxFKSh6KSk6KHQuZW50ZXIoImNvZGVGZW5jZWRGZW5jZUluZm8iKSx0LmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksaCh6KSl9ZnVuY3Rpb24gaCh6KXtyZXR1cm4gej09PW51bGx8fFBlKHopPyh0LmV4aXQoImNodW5rU3RyaW5nIiksdC5leGl0KCJjb2RlRmVuY2VkRmVuY2VJbmZvIiksZCh6KSk6R2Uoeik/KHQuZXhpdCgiY2h1bmtTdHJpbmciKSx0LmV4aXQoImNvZGVGZW5jZWRGZW5jZUluZm8iKSxKZSh0LGcsIndoaXRlc3BhY2UiKSh6KSk6ej09PTk2JiZ6PT09bD9hKHopOih0LmNvbnN1bWUoeiksaCl9ZnVuY3Rpb24gZyh6KXtyZXR1cm4gej09PW51bGx8fFBlKHopP2Qoeik6KHQuZW50ZXIoImNvZGVGZW5jZWRGZW5jZU1ldGEiKSx0LmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksYih6KSl9ZnVuY3Rpb24gYih6KXtyZXR1cm4gej09PW51bGx8fFBlKHopPyh0LmV4aXQoImNodW5rU3RyaW5nIiksdC5leGl0KCJjb2RlRmVuY2VkRmVuY2VNZXRhIiksZCh6KSk6ej09PTk2JiZ6PT09bD9hKHopOih0LmNvbnN1bWUoeiksYil9ZnVuY3Rpb24geCh6KXtyZXR1cm4gdC5hdHRlbXB0KGksRSxtKSh6KX1mdW5jdGlvbiBtKHope3JldHVybiB0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKHopLHQuZXhpdCgibGluZUVuZGluZyIpLHZ9ZnVuY3Rpb24gdih6KXtyZXR1cm4gbz4wJiZHZSh6KT9KZSh0LHksImxpbmVQcmVmaXgiLG8rMSkoeik6eSh6KX1mdW5jdGlvbiB5KHope3JldHVybiB6PT09bnVsbHx8UGUoeik/dC5jaGVjayhEUWUseCxFKSh6KToodC5lbnRlcigiY29kZUZsb3dWYWx1ZSIpLHcoeikpfWZ1bmN0aW9uIHcoeil7cmV0dXJuIHo9PT1udWxsfHxQZSh6KT8odC5leGl0KCJjb2RlRmxvd1ZhbHVlIikseSh6KSk6KHQuY29uc3VtZSh6KSx3KX1mdW5jdGlvbiBFKHope3JldHVybiB0LmV4aXQoImNvZGVGZW5jZWQiKSxlKHopfWZ1bmN0aW9uIEMoeixQLF8pe2xldCAkPTA7cmV0dXJuIEg7ZnVuY3Rpb24gSChUKXtyZXR1cm4gei5lbnRlcigibGluZUVuZGluZyIpLHouY29uc3VtZShUKSx6LmV4aXQoImxpbmVFbmRpbmciKSxMfWZ1bmN0aW9uIEwoVCl7cmV0dXJuIHouZW50ZXIoImNvZGVGZW5jZWRGZW5jZSIpLEdlKFQpP0plKHosaywibGluZVByZWZpeCIsci5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShUKTprKFQpfWZ1bmN0aW9uIGsoVCl7cmV0dXJuIFQ9PT1sPyh6LmVudGVyKCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpLE4oVCkpOl8oVCl9ZnVuY3Rpb24gTihUKXtyZXR1cm4gVD09PWw/KCQrKyx6LmNvbnN1bWUoVCksTik6JD49cz8oei5leGl0KCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpLEdlKFQpP0plKHosUywid2hpdGVzcGFjZSIpKFQpOlMoVCkpOl8oVCl9ZnVuY3Rpb24gUyhUKXtyZXR1cm4gVD09PW51bGx8fFBlKFQpPyh6LmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpLFAoVCkpOl8oVCl9fX1mdW5jdGlvbiBySnQodCxlLGEpe2xldCByPXRoaXM7cmV0dXJuIGk7ZnVuY3Rpb24gaShzKXtyZXR1cm4gcz09PW51bGw/YShzKToodC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShzKSx0LmV4aXQoImxpbmVFbmRpbmciKSxvKX1mdW5jdGlvbiBvKHMpe3JldHVybiByLnBhcnNlci5sYXp5W3Iubm93KCkubGluZV0/YShzKTplKHMpfX12YXIgRFFlLFNILEVRZT1uKCgpPT57QzEoKTtrdCgpO0RRZT17cGFydGlhbDohMCx0b2tlbml6ZTpySnR9LFNIPXtjb25jcmV0ZTohMCxuYW1lOiJjb2RlRmVuY2VkIix0b2tlbml6ZTphSnR9fSk7ZnVuY3Rpb24gb0p0KHQsZSxhKXtsZXQgcj10aGlzO3JldHVybiBpO2Z1bmN0aW9uIGkoYyl7cmV0dXJuIHQuZW50ZXIoImNvZGVJbmRlbnRlZCIpLEplKHQsbywibGluZVByZWZpeCIsNSkoYyl9ZnVuY3Rpb24gbyhjKXtsZXQgdT1yLmV2ZW50c1tyLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIHUmJnVbMV0udHlwZT09PSJsaW5lUHJlZml4IiYmdVsyXS5zbGljZVNlcmlhbGl6ZSh1WzFdLCEwKS5sZW5ndGg+PTQ/cyhjKTphKGMpfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGM9PT1udWxsP2YoYyk6UGUoYyk/dC5hdHRlbXB0KGlKdCxzLGYpKGMpOih0LmVudGVyKCJjb2RlRmxvd1ZhbHVlIiksbChjKSl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09PW51bGx8fFBlKGMpPyh0LmV4aXQoImNvZGVGbG93VmFsdWUiKSxzKGMpKToodC5jb25zdW1lKGMpLGwpfWZ1bmN0aW9uIGYoYyl7cmV0dXJuIHQuZXhpdCgiY29kZUluZGVudGVkIiksZShjKX19ZnVuY3Rpb24gc0p0KHQsZSxhKXtsZXQgcj10aGlzO3JldHVybiBpO2Z1bmN0aW9uIGkocyl7cmV0dXJuIHIucGFyc2VyLmxhenlbci5ub3coKS5saW5lXT9hKHMpOlBlKHMpPyh0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKHMpLHQuZXhpdCgibGluZUVuZGluZyIpLGkpOkplKHQsbywibGluZVByZWZpeCIsNSkocyl9ZnVuY3Rpb24gbyhzKXtsZXQgbD1yLmV2ZW50c1tyLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIGwmJmxbMV0udHlwZT09PSJsaW5lUHJlZml4IiYmbFsyXS5zbGljZVNlcmlhbGl6ZShsWzFdLCEwKS5sZW5ndGg+PTQ/ZShzKTpQZShzKT9pKHMpOmEocyl9fXZhciB1ZCxpSnQsTlFlPW4oKCk9PntDMSgpO2t0KCk7dWQ9e25hbWU6ImNvZGVJbmRlbnRlZCIsdG9rZW5pemU6b0p0fSxpSnQ9e3BhcnRpYWw6ITAsdG9rZW5pemU6c0p0fX0pO2Z1bmN0aW9uIG5KdCh0KXtsZXQgZT10Lmxlbmd0aC00LGE9MyxyLGk7aWYoKHRbYV1bMV0udHlwZT09PSJsaW5lRW5kaW5nInx8dFthXVsxXS50eXBlPT09InNwYWNlIikmJih0W2VdWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fHRbZV1bMV0udHlwZT09PSJzcGFjZSIpKXtmb3Iocj1hOysrcjxlOylpZih0W3JdWzFdLnR5cGU9PT0iY29kZVRleHREYXRhIil7dFthXVsxXS50eXBlPSJjb2RlVGV4dFBhZGRpbmciLHRbZV1bMV0udHlwZT0iY29kZVRleHRQYWRkaW5nIixhKz0yLGUtPTI7YnJlYWt9fWZvcihyPWEtMSxlKys7KytyPD1lOylpPT09dm9pZCAwP3IhPT1lJiZ0W3JdWzFdLnR5cGUhPT0ibGluZUVuZGluZyImJihpPXIpOihyPT09ZXx8dFtyXVsxXS50eXBlPT09ImxpbmVFbmRpbmciKSYmKHRbaV1bMV0udHlwZT0iY29kZVRleHREYXRhIixyIT09aSsyJiYodFtpXVsxXS5lbmQ9dFtyLTFdWzFdLmVuZCx0LnNwbGljZShpKzIsci1pLTIpLGUtPXItaS0yLHI9aSsyKSxpPXZvaWQgMCk7cmV0dXJuIHR9ZnVuY3Rpb24gbEp0KHQpe3JldHVybiB0IT09OTZ8fHRoaXMuZXZlbnRzW3RoaXMuZXZlbnRzLmxlbmd0aC0xXVsxXS50eXBlPT09ImNoYXJhY3RlckVzY2FwZSJ9ZnVuY3Rpb24gY0p0KHQsZSxhKXtsZXQgcj10aGlzLGk9MCxvLHM7cmV0dXJuIGw7ZnVuY3Rpb24gbChoKXtyZXR1cm4gdC5lbnRlcigiY29kZVRleHQiKSx0LmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIiksZihoKX1mdW5jdGlvbiBmKGgpe3JldHVybiBoPT09OTY/KHQuY29uc3VtZShoKSxpKyssZik6KHQuZXhpdCgiY29kZVRleHRTZXF1ZW5jZSIpLGMoaCkpfWZ1bmN0aW9uIGMoaCl7cmV0dXJuIGg9PT1udWxsP2EoaCk6aD09PTMyPyh0LmVudGVyKCJzcGFjZSIpLHQuY29uc3VtZShoKSx0LmV4aXQoInNwYWNlIiksYyk6aD09PTk2PyhzPXQuZW50ZXIoImNvZGVUZXh0U2VxdWVuY2UiKSxvPTAsZChoKSk6UGUoaCk/KHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoaCksdC5leGl0KCJsaW5lRW5kaW5nIiksYyk6KHQuZW50ZXIoImNvZGVUZXh0RGF0YSIpLHUoaCkpfWZ1bmN0aW9uIHUoaCl7cmV0dXJuIGg9PT1udWxsfHxoPT09MzJ8fGg9PT05Nnx8UGUoaCk/KHQuZXhpdCgiY29kZVRleHREYXRhIiksYyhoKSk6KHQuY29uc3VtZShoKSx1KX1mdW5jdGlvbiBkKGgpe3JldHVybiBoPT09OTY/KHQuY29uc3VtZShoKSxvKyssZCk6bz09PWk/KHQuZXhpdCgiY29kZVRleHRTZXF1ZW5jZSIpLHQuZXhpdCgiY29kZVRleHQiKSxlKGgpKToocy50eXBlPSJjb2RlVGV4dERhdGEiLHUoaCkpfX12YXIgSEssUFFlPW4oKCk9PntrdCgpO0hLPXtuYW1lOiJjb2RlVGV4dCIscHJldmlvdXM6bEp0LHJlc29sdmU6bkp0LHRva2VuaXplOmNKdH19KTtmdW5jdGlvbiBwZCh0LGUpe2xldCBhPTA7aWYoZS5sZW5ndGg8MWU0KXQucHVzaCguLi5lKTtlbHNlIGZvcig7YTxlLmxlbmd0aDspdC5wdXNoKC4uLmUuc2xpY2UoYSxhKzFlNCkpLGErPTFlNH12YXIgaGQscUs9bigoKT0+e2hkPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMubGVmdD1lP1suLi5lXTpbXSx0aGlzLnJpZ2h0PVtdfWdldChlKXtpZihlPDB8fGU+PXRoaXMubGVmdC5sZW5ndGgrdGhpcy5yaWdodC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNhbm5vdCBhY2Nlc3MgaW5kZXggYCIrZSsiYCBpbiBhIHNwbGljZSBidWZmZXIgb2Ygc2l6ZSBgIisodGhpcy5sZWZ0Lmxlbmd0aCt0aGlzLnJpZ2h0Lmxlbmd0aCkrImAiKTtyZXR1cm4gZTx0aGlzLmxlZnQubGVuZ3RoP3RoaXMubGVmdFtlXTp0aGlzLnJpZ2h0W3RoaXMucmlnaHQubGVuZ3RoLWUrdGhpcy5sZWZ0Lmxlbmd0aC0xXX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMubGVmdC5sZW5ndGgrdGhpcy5yaWdodC5sZW5ndGh9c2hpZnQoKXtyZXR1cm4gdGhpcy5zZXRDdXJzb3IoMCksdGhpcy5yaWdodC5wb3AoKX1zbGljZShlLGEpe2xldCByPWE/P051bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gcjx0aGlzLmxlZnQubGVuZ3RoP3RoaXMubGVmdC5zbGljZShlLHIpOmU+dGhpcy5sZWZ0Lmxlbmd0aD90aGlzLnJpZ2h0LnNsaWNlKHRoaXMucmlnaHQubGVuZ3RoLXIrdGhpcy5sZWZ0Lmxlbmd0aCx0aGlzLnJpZ2h0Lmxlbmd0aC1lK3RoaXMubGVmdC5sZW5ndGgpLnJldmVyc2UoKTp0aGlzLmxlZnQuc2xpY2UoZSkuY29uY2F0KHRoaXMucmlnaHQuc2xpY2UodGhpcy5yaWdodC5sZW5ndGgtcit0aGlzLmxlZnQubGVuZ3RoKS5yZXZlcnNlKCkpfXNwbGljZShlLGEscil7bGV0IGk9YXx8MDt0aGlzLnNldEN1cnNvcihNYXRoLnRydW5jKGUpKTtsZXQgbz10aGlzLnJpZ2h0LnNwbGljZSh0aGlzLnJpZ2h0Lmxlbmd0aC1pLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7cmV0dXJuIHImJnBkKHRoaXMubGVmdCxyKSxvLnJldmVyc2UoKX1wb3AoKXtyZXR1cm4gdGhpcy5zZXRDdXJzb3IoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx0aGlzLmxlZnQucG9wKCl9cHVzaChlKXt0aGlzLnNldEN1cnNvcihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHRoaXMubGVmdC5wdXNoKGUpfXB1c2hNYW55KGUpe3RoaXMuc2V0Q3Vyc29yKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkscGQodGhpcy5sZWZ0LGUpfXVuc2hpZnQoZSl7dGhpcy5zZXRDdXJzb3IoMCksdGhpcy5yaWdodC5wdXNoKGUpfXVuc2hpZnRNYW55KGUpe3RoaXMuc2V0Q3Vyc29yKDApLHBkKHRoaXMucmlnaHQsZS5yZXZlcnNlKCkpfXNldEN1cnNvcihlKXtpZighKGU9PT10aGlzLmxlZnQubGVuZ3RofHxlPnRoaXMubGVmdC5sZW5ndGgmJnRoaXMucmlnaHQubGVuZ3RoPT09MHx8ZTwwJiZ0aGlzLmxlZnQubGVuZ3RoPT09MCkpaWYoZTx0aGlzLmxlZnQubGVuZ3RoKXtsZXQgYT10aGlzLmxlZnQuc3BsaWNlKGUsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtwZCh0aGlzLnJpZ2h0LGEucmV2ZXJzZSgpKX1lbHNle2xldCBhPXRoaXMucmlnaHQuc3BsaWNlKHRoaXMubGVmdC5sZW5ndGgrdGhpcy5yaWdodC5sZW5ndGgtZSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO3BkKHRoaXMubGVmdCxhLnJldmVyc2UoKSl9fX19KTtmdW5jdGlvbiBDSCh0KXtsZXQgZT17fSxhPS0xLHIsaSxvLHMsbCxmLGMsdT1uZXcgaGQodCk7Zm9yKDsrK2E8dS5sZW5ndGg7KXtmb3IoO2EgaW4gZTspYT1lW2FdO2lmKHI9dS5nZXQoYSksYSYmclsxXS50eXBlPT09ImNodW5rRmxvdyImJnUuZ2V0KGEtMSlbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCImJihmPXJbMV0uX3Rva2VuaXplci5ldmVudHMsbz0wLG88Zi5sZW5ndGgmJmZbb11bMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiJiYobys9MiksbzxmLmxlbmd0aCYmZltvXVsxXS50eXBlPT09ImNvbnRlbnQiKSlmb3IoOysrbzxmLmxlbmd0aCYmZltvXVsxXS50eXBlIT09ImNvbnRlbnQiOylmW29dWzFdLnR5cGU9PT0iY2h1bmtUZXh0IiYmKGZbb11bMV0uX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtPSEwLG8rKyk7aWYoclswXT09PSJlbnRlciIpclsxXS5jb250ZW50VHlwZSYmKE9iamVjdC5hc3NpZ24oZSxkSnQodSxhKSksYT1lW2FdLGM9ITApO2Vsc2UgaWYoclsxXS5fY29udGFpbmVyKXtmb3Iobz1hLGk9dm9pZCAwO28tLTspaWYocz11LmdldChvKSxzWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fHNbMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiKXNbMF09PT0iZW50ZXIiJiYoaSYmKHUuZ2V0KGkpWzFdLnR5cGU9ImxpbmVFbmRpbmdCbGFuayIpLHNbMV0udHlwZT0ibGluZUVuZGluZyIsaT1vKTtlbHNlIGlmKCEoc1sxXS50eXBlPT09ImxpbmVQcmVmaXgifHxzWzFdLnR5cGU9PT0ibGlzdEl0ZW1JbmRlbnQiKSlicmVhaztpJiYoclsxXS5lbmQ9ey4uLnUuZ2V0KGkpWzFdLnN0YXJ0fSxsPXUuc2xpY2UoaSxhKSxsLnVuc2hpZnQociksdS5zcGxpY2UoaSxhLWkrMSxsKSl9fXJldHVybiBTMSh0LDAsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHUuc2xpY2UoMCkpLCFjfWZ1bmN0aW9uIGRKdCh0LGUpe2xldCBhPXQuZ2V0KGUpWzFdLHI9dC5nZXQoZSlbMl0saT1lLTEsbz1bXSxzPWEuX3Rva2VuaXplcjtzfHwocz1yLnBhcnNlclthLmNvbnRlbnRUeXBlXShhLnN0YXJ0KSxhLl9jb250ZW50VHlwZVRleHRUcmFpbGluZyYmKHMuX2NvbnRlbnRUeXBlVGV4dFRyYWlsaW5nPSEwKSk7bGV0IGw9cy5ldmVudHMsZj1bXSxjPXt9LHUsZCxoPS0xLGc9YSxiPTAseD0wLG09W3hdO2Zvcig7Zzspe2Zvcig7dC5nZXQoKytpKVsxXSE9PWc7KTtvLnB1c2goaSksZy5fdG9rZW5pemVyfHwodT1yLnNsaWNlU3RyZWFtKGcpLGcubmV4dHx8dS5wdXNoKG51bGwpLGQmJnMuZGVmaW5lU2tpcChnLnN0YXJ0KSxnLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSYmKHMuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbT0hMCkscy53cml0ZSh1KSxnLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSYmKHMuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbT12b2lkIDApKSxkPWcsZz1nLm5leHR9Zm9yKGc9YTsrK2g8bC5sZW5ndGg7KWxbaF1bMF09PT0iZXhpdCImJmxbaC0xXVswXT09PSJlbnRlciImJmxbaF1bMV0udHlwZT09PWxbaC0xXVsxXS50eXBlJiZsW2hdWzFdLnN0YXJ0LmxpbmUhPT1sW2hdWzFdLmVuZC5saW5lJiYoeD1oKzEsbS5wdXNoKHgpLGcuX3Rva2VuaXplcj12b2lkIDAsZy5wcmV2aW91cz12b2lkIDAsZz1nLm5leHQpO2ZvcihzLmV2ZW50cz1bXSxnPyhnLl90b2tlbml6ZXI9dm9pZCAwLGcucHJldmlvdXM9dm9pZCAwKTptLnBvcCgpLGg9bS5sZW5ndGg7aC0tOyl7bGV0IHY9bC5zbGljZShtW2hdLG1baCsxXSkseT1vLnBvcCgpO2YucHVzaChbeSx5K3YubGVuZ3RoLTFdKSx0LnNwbGljZSh5LDIsdil9Zm9yKGYucmV2ZXJzZSgpLGg9LTE7KytoPGYubGVuZ3RoOyljW2IrZltoXVswXV09YitmW2hdWzFdLGIrPWZbaF1bMV0tZltoXVswXS0xO3JldHVybiBjfXZhciBWSz1uKCgpPT57UHIoKTtxSygpO3FLKCl9KTtmdW5jdGlvbiB1SnQodCl7cmV0dXJuIENIKHQpLHR9ZnVuY3Rpb24gcEp0KHQsZSl7bGV0IGE7cmV0dXJuIHI7ZnVuY3Rpb24gcihsKXtyZXR1cm4gdC5lbnRlcigiY29udGVudCIpLGE9dC5lbnRlcigiY2h1bmtDb250ZW50Iix7Y29udGVudFR5cGU6ImNvbnRlbnQifSksaShsKX1mdW5jdGlvbiBpKGwpe3JldHVybiBsPT09bnVsbD9vKGwpOlBlKGwpP3QuY2hlY2soZkp0LHMsbykobCk6KHQuY29uc3VtZShsKSxpKX1mdW5jdGlvbiBvKGwpe3JldHVybiB0LmV4aXQoImNodW5rQ29udGVudCIpLHQuZXhpdCgiY29udGVudCIpLGUobCl9ZnVuY3Rpb24gcyhsKXtyZXR1cm4gdC5jb25zdW1lKGwpLHQuZXhpdCgiY2h1bmtDb250ZW50IiksYS5uZXh0PXQuZW50ZXIoImNodW5rQ29udGVudCIse2NvbnRlbnRUeXBlOiJjb250ZW50IixwcmV2aW91czphfSksYT1hLm5leHQsaX19ZnVuY3Rpb24gaEp0KHQsZSxhKXtsZXQgcj10aGlzO3JldHVybiBpO2Z1bmN0aW9uIGkocyl7cmV0dXJuIHQuZXhpdCgiY2h1bmtDb250ZW50IiksdC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShzKSx0LmV4aXQoImxpbmVFbmRpbmciKSxKZSh0LG8sImxpbmVQcmVmaXgiKX1mdW5jdGlvbiBvKHMpe2lmKHM9PT1udWxsfHxQZShzKSlyZXR1cm4gYShzKTtsZXQgbD1yLmV2ZW50c1tyLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIXIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSYmbCYmbFsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZsWzJdLnNsaWNlU2VyaWFsaXplKGxbMV0sITApLmxlbmd0aD49ND9lKHMpOnQuaW50ZXJydXB0KHIucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyxhLGUpKHMpfX12YXIgVUssZkp0LElRZT1uKCgpPT57QzEoKTtrdCgpO1ZLKCk7VUs9e3Jlc29sdmU6dUp0LHRva2VuaXplOnBKdH0sZkp0PXtwYXJ0aWFsOiEwLHRva2VuaXplOmhKdH19KTtmdW5jdGlvbiBMSCh0LGUsYSxyLGksbyxzLGwsZil7bGV0IGM9Znx8TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHU9MDtyZXR1cm4gZDtmdW5jdGlvbiBkKHYpe3JldHVybiB2PT09NjA/KHQuZW50ZXIociksdC5lbnRlcihpKSx0LmVudGVyKG8pLHQuY29uc3VtZSh2KSx0LmV4aXQobyksaCk6dj09PW51bGx8fHY9PT0zMnx8dj09PTQxfHxsbih2KT9hKHYpOih0LmVudGVyKHIpLHQuZW50ZXIocyksdC5lbnRlcihsKSx0LmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSkseCh2KSl9ZnVuY3Rpb24gaCh2KXtyZXR1cm4gdj09PTYyPyh0LmVudGVyKG8pLHQuY29uc3VtZSh2KSx0LmV4aXQobyksdC5leGl0KGkpLHQuZXhpdChyKSxlKToodC5lbnRlcihsKSx0LmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksZyh2KSl9ZnVuY3Rpb24gZyh2KXtyZXR1cm4gdj09PTYyPyh0LmV4aXQoImNodW5rU3RyaW5nIiksdC5leGl0KGwpLGgodikpOnY9PT1udWxsfHx2PT09NjB8fFBlKHYpP2Eodik6KHQuY29uc3VtZSh2KSx2PT09OTI/YjpnKX1mdW5jdGlvbiBiKHYpe3JldHVybiB2PT09NjB8fHY9PT02Mnx8dj09PTkyPyh0LmNvbnN1bWUodiksZyk6Zyh2KX1mdW5jdGlvbiB4KHYpe3JldHVybiF1JiYodj09PW51bGx8fHY9PT00MXx8d3QodikpPyh0LmV4aXQoImNodW5rU3RyaW5nIiksdC5leGl0KGwpLHQuZXhpdChzKSx0LmV4aXQociksZSh2KSk6dTxjJiZ2PT09NDA/KHQuY29uc3VtZSh2KSx1KysseCk6dj09PTQxPyh0LmNvbnN1bWUodiksdS0tLHgpOnY9PT1udWxsfHx2PT09MzJ8fHY9PT00MHx8bG4odik/YSh2KToodC5jb25zdW1lKHYpLHY9PT05Mj9tOngpfWZ1bmN0aW9uIG0odil7cmV0dXJuIHY9PT00MHx8dj09PTQxfHx2PT09OTI/KHQuY29uc3VtZSh2KSx4KTp4KHYpfX12YXIgaks9bigoKT0+e2t0KCl9KTtmdW5jdGlvbiBUSCh0LGUsYSxyLGksbyl7bGV0IHM9dGhpcyxsPTAsZjtyZXR1cm4gYztmdW5jdGlvbiBjKGcpe3JldHVybiB0LmVudGVyKHIpLHQuZW50ZXIoaSksdC5jb25zdW1lKGcpLHQuZXhpdChpKSx0LmVudGVyKG8pLHV9ZnVuY3Rpb24gdShnKXtyZXR1cm4gbD45OTl8fGc9PT1udWxsfHxnPT09OTF8fGc9PT05MyYmIWZ8fGc9PT05NCYmIWwmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIHMucGFyc2VyLmNvbnN0cnVjdHM/YShnKTpnPT09OTM/KHQuZXhpdChvKSx0LmVudGVyKGkpLHQuY29uc3VtZShnKSx0LmV4aXQoaSksdC5leGl0KHIpLGUpOlBlKGcpPyh0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKGcpLHQuZXhpdCgibGluZUVuZGluZyIpLHUpOih0LmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksZChnKSl9ZnVuY3Rpb24gZChnKXtyZXR1cm4gZz09PW51bGx8fGc9PT05MXx8Zz09PTkzfHxQZShnKXx8bCsrPjk5OT8odC5leGl0KCJjaHVua1N0cmluZyIpLHUoZykpOih0LmNvbnN1bWUoZyksZnx8KGY9IUdlKGcpKSxnPT09OTI/aDpkKX1mdW5jdGlvbiBoKGcpe3JldHVybiBnPT09OTF8fGc9PT05Mnx8Zz09PTkzPyh0LmNvbnN1bWUoZyksbCsrLGQpOmQoZyl9fXZhciBXSz1uKCgpPT57a3QoKX0pO2Z1bmN0aW9uIF9IKHQsZSxhLHIsaSxvKXtsZXQgcztyZXR1cm4gbDtmdW5jdGlvbiBsKGgpe3JldHVybiBoPT09MzR8fGg9PT0zOXx8aD09PTQwPyh0LmVudGVyKHIpLHQuZW50ZXIoaSksdC5jb25zdW1lKGgpLHQuZXhpdChpKSxzPWg9PT00MD80MTpoLGYpOmEoaCl9ZnVuY3Rpb24gZihoKXtyZXR1cm4gaD09PXM/KHQuZW50ZXIoaSksdC5jb25zdW1lKGgpLHQuZXhpdChpKSx0LmV4aXQociksZSk6KHQuZW50ZXIobyksYyhoKSl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaD09PXM/KHQuZXhpdChvKSxmKHMpKTpoPT09bnVsbD9hKGgpOlBlKGgpPyh0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKGgpLHQuZXhpdCgibGluZUVuZGluZyIpLEplKHQsYywibGluZVByZWZpeCIpKToodC5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLHUoaCkpfWZ1bmN0aW9uIHUoaCl7cmV0dXJuIGg9PT1zfHxoPT09bnVsbHx8UGUoaCk/KHQuZXhpdCgiY2h1bmtTdHJpbmciKSxjKGgpKToodC5jb25zdW1lKGgpLGg9PT05Mj9kOnUpfWZ1bmN0aW9uIGQoaCl7cmV0dXJuIGg9PT1zfHxoPT09OTI/KHQuY29uc3VtZShoKSx1KTp1KGgpfX12YXIgR0s9bigoKT0+e0MxKCk7a3QoKX0pO2Z1bmN0aW9uIG1uKHQsZSl7bGV0IGE7cmV0dXJuIHI7ZnVuY3Rpb24gcihpKXtyZXR1cm4gUGUoaSk/KHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoaSksdC5leGl0KCJsaW5lRW5kaW5nIiksYT0hMCxyKTpHZShpKT9KZSh0LHIsYT8ibGluZVByZWZpeCI6ImxpbmVTdWZmaXgiKShpKTplKGkpfX12YXIgWUs9bigoKT0+e0MxKCk7a3QoKX0pO2Z1bmN0aW9uIGdKdCh0LGUsYSl7bGV0IHI9dGhpcyxpO3JldHVybiBvO2Z1bmN0aW9uIG8oZyl7cmV0dXJuIHQuZW50ZXIoImRlZmluaXRpb24iKSxzKGcpfWZ1bmN0aW9uIHMoZyl7cmV0dXJuIFRILmNhbGwocix0LGwsYSwiZGVmaW5pdGlvbkxhYmVsIiwiZGVmaW5pdGlvbkxhYmVsTWFya2VyIiwiZGVmaW5pdGlvbkxhYmVsU3RyaW5nIikoZyl9ZnVuY3Rpb24gbChnKXtyZXR1cm4gaT13MShyLnNsaWNlU2VyaWFsaXplKHIuZXZlbnRzW3IuZXZlbnRzLmxlbmd0aC0xXVsxXSkuc2xpY2UoMSwtMSkpLGc9PT01OD8odC5lbnRlcigiZGVmaW5pdGlvbk1hcmtlciIpLHQuY29uc3VtZShnKSx0LmV4aXQoImRlZmluaXRpb25NYXJrZXIiKSxmKTphKGcpfWZ1bmN0aW9uIGYoZyl7cmV0dXJuIHd0KGcpP21uKHQsYykoZyk6YyhnKX1mdW5jdGlvbiBjKGcpe3JldHVybiBMSCh0LHUsYSwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uIiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbCIsImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCJkZWZpbml0aW9uRGVzdGluYXRpb25SYXciLCJkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmciKShnKX1mdW5jdGlvbiB1KGcpe3JldHVybiB0LmF0dGVtcHQobUp0LGQsZCkoZyl9ZnVuY3Rpb24gZChnKXtyZXR1cm4gR2UoZyk/SmUodCxoLCJ3aGl0ZXNwYWNlIikoZyk6aChnKX1mdW5jdGlvbiBoKGcpe3JldHVybiBnPT09bnVsbHx8UGUoZyk/KHQuZXhpdCgiZGVmaW5pdGlvbiIpLHIucGFyc2VyLmRlZmluZWQucHVzaChpKSxlKGcpKTphKGcpfX1mdW5jdGlvbiB4SnQodCxlLGEpe3JldHVybiByO2Z1bmN0aW9uIHIobCl7cmV0dXJuIHd0KGwpP21uKHQsaSkobCk6YShsKX1mdW5jdGlvbiBpKGwpe3JldHVybiBfSCh0LG8sYSwiZGVmaW5pdGlvblRpdGxlIiwiZGVmaW5pdGlvblRpdGxlTWFya2VyIiwiZGVmaW5pdGlvblRpdGxlU3RyaW5nIikobCl9ZnVuY3Rpb24gbyhsKXtyZXR1cm4gR2UobCk/SmUodCxzLCJ3aGl0ZXNwYWNlIikobCk6cyhsKX1mdW5jdGlvbiBzKGwpe3JldHVybiBsPT09bnVsbHx8UGUobCk/ZShsKTphKGwpfX12YXIgWkssbUp0LEZRZT1uKCgpPT57aksoKTtXSygpO0MxKCk7R0soKTtZSygpO2t0KCk7Um8oKTtaSz17bmFtZToiZGVmaW5pdGlvbiIsdG9rZW5pemU6Z0p0fSxtSnQ9e3BhcnRpYWw6ITAsdG9rZW5pemU6eEp0fX0pO2Z1bmN0aW9uIGJKdCh0LGUsYSl7cmV0dXJuIHI7ZnVuY3Rpb24gcihvKXtyZXR1cm4gdC5lbnRlcigiaGFyZEJyZWFrRXNjYXBlIiksdC5jb25zdW1lKG8pLGl9ZnVuY3Rpb24gaShvKXtyZXR1cm4gUGUobyk/KHQuZXhpdCgiaGFyZEJyZWFrRXNjYXBlIiksZShvKSk6YShvKX19dmFyIFhLLE9RZT1uKCgpPT57a3QoKTtYSz17bmFtZToiaGFyZEJyZWFrRXNjYXBlIix0b2tlbml6ZTpiSnR9fSk7ZnVuY3Rpb24gdkp0KHQsZSl7bGV0IGE9dC5sZW5ndGgtMixyPTMsaSxvO3JldHVybiB0W3JdWzFdLnR5cGU9PT0id2hpdGVzcGFjZSImJihyKz0yKSxhLTI+ciYmdFthXVsxXS50eXBlPT09IndoaXRlc3BhY2UiJiYoYS09MiksdFthXVsxXS50eXBlPT09ImF0eEhlYWRpbmdTZXF1ZW5jZSImJihyPT09YS0xfHxhLTQ+ciYmdFthLTJdWzFdLnR5cGU9PT0id2hpdGVzcGFjZSIpJiYoYS09cisxPT09YT8yOjQpLGE+ciYmKGk9e3R5cGU6ImF0eEhlYWRpbmdUZXh0IixzdGFydDp0W3JdWzFdLnN0YXJ0LGVuZDp0W2FdWzFdLmVuZH0sbz17dHlwZToiY2h1bmtUZXh0IixzdGFydDp0W3JdWzFdLnN0YXJ0LGVuZDp0W2FdWzFdLmVuZCxjb250ZW50VHlwZToidGV4dCJ9LFMxKHQscixhLXIrMSxbWyJlbnRlciIsaSxlXSxbImVudGVyIixvLGVdLFsiZXhpdCIsbyxlXSxbImV4aXQiLGksZV1dKSksdH1mdW5jdGlvbiB5SnQodCxlLGEpe2xldCByPTA7cmV0dXJuIGk7ZnVuY3Rpb24gaSh1KXtyZXR1cm4gdC5lbnRlcigiYXR4SGVhZGluZyIpLG8odSl9ZnVuY3Rpb24gbyh1KXtyZXR1cm4gdC5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIikscyh1KX1mdW5jdGlvbiBzKHUpe3JldHVybiB1PT09MzUmJnIrKzw2Pyh0LmNvbnN1bWUodSkscyk6dT09PW51bGx8fHd0KHUpPyh0LmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLGwodSkpOmEodSl9ZnVuY3Rpb24gbCh1KXtyZXR1cm4gdT09PTM1Pyh0LmVudGVyKCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxmKHUpKTp1PT09bnVsbHx8UGUodSk/KHQuZXhpdCgiYXR4SGVhZGluZyIpLGUodSkpOkdlKHUpP0plKHQsbCwid2hpdGVzcGFjZSIpKHUpOih0LmVudGVyKCJhdHhIZWFkaW5nVGV4dCIpLGModSkpfWZ1bmN0aW9uIGYodSl7cmV0dXJuIHU9PT0zNT8odC5jb25zdW1lKHUpLGYpOih0LmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLGwodSkpfWZ1bmN0aW9uIGModSl7cmV0dXJuIHU9PT1udWxsfHx1PT09MzV8fHd0KHUpPyh0LmV4aXQoImF0eEhlYWRpbmdUZXh0IiksbCh1KSk6KHQuY29uc3VtZSh1KSxjKX19dmFyIFFLLEJRZT1uKCgpPT57QzEoKTtrdCgpO1ByKCk7UUs9e25hbWU6ImhlYWRpbmdBdHgiLHJlc29sdmU6dkp0LHRva2VuaXplOnlKdH19KTt2YXIgUlFlLEtLLEhRZT1uKCgpPT57UlFlPVsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJhc2UiLCJiYXNlZm9udCIsImJsb2NrcXVvdGUiLCJib2R5IiwiY2FwdGlvbiIsImNlbnRlciIsImNvbCIsImNvbGdyb3VwIiwiZGQiLCJkZXRhaWxzIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJmcmFtZSIsImZyYW1lc2V0IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhyIiwiaHRtbCIsImlmcmFtZSIsImxlZ2VuZCIsImxpIiwibGluayIsIm1haW4iLCJtZW51IiwibWVudWl0ZW0iLCJuYXYiLCJub2ZyYW1lcyIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJwIiwicGFyYW0iLCJzZWFyY2giLCJzZWN0aW9uIiwic3VtbWFyeSIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpdGxlIiwidHIiLCJ0cmFjayIsInVsIl0sS0s9WyJwcmUiLCJzY3JpcHQiLCJzdHlsZSIsInRleHRhcmVhIl19KTtmdW5jdGlvbiB6SnQodCl7bGV0IGU9dC5sZW5ndGg7Zm9yKDtlLS0mJiEodFtlXVswXT09PSJlbnRlciImJnRbZV1bMV0udHlwZT09PSJodG1sRmxvdyIpOyk7cmV0dXJuIGU+MSYmdFtlLTJdWzFdLnR5cGU9PT0ibGluZVByZWZpeCImJih0W2VdWzFdLnN0YXJ0PXRbZS0yXVsxXS5zdGFydCx0W2UrMV1bMV0uc3RhcnQ9dFtlLTJdWzFdLnN0YXJ0LHQuc3BsaWNlKGUtMiwyKSksdH1mdW5jdGlvbiBrSnQodCxlLGEpe2xldCByPXRoaXMsaSxvLHMsbCxmO3JldHVybiBjO2Z1bmN0aW9uIGMoVyl7cmV0dXJuIHUoVyl9ZnVuY3Rpb24gdShXKXtyZXR1cm4gdC5lbnRlcigiaHRtbEZsb3ciKSx0LmVudGVyKCJodG1sRmxvd0RhdGEiKSx0LmNvbnN1bWUoVyksZH1mdW5jdGlvbiBkKFcpe3JldHVybiBXPT09MzM/KHQuY29uc3VtZShXKSxoKTpXPT09NDc/KHQuY29uc3VtZShXKSxvPSEwLHgpOlc9PT02Mz8odC5jb25zdW1lKFcpLGk9MyxyLmludGVycnVwdD9lOlYpOkgxKFcpPyh0LmNvbnN1bWUoVykscz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcpLG0pOmEoVyl9ZnVuY3Rpb24gaChXKXtyZXR1cm4gVz09PTQ1Pyh0LmNvbnN1bWUoVyksaT0yLGcpOlc9PT05MT8odC5jb25zdW1lKFcpLGk9NSxsPTAsYik6SDEoVyk/KHQuY29uc3VtZShXKSxpPTQsci5pbnRlcnJ1cHQ/ZTpWKTphKFcpfWZ1bmN0aW9uIGcoVyl7cmV0dXJuIFc9PT00NT8odC5jb25zdW1lKFcpLHIuaW50ZXJydXB0P2U6Vik6YShXKX1mdW5jdGlvbiBiKFcpe2xldCBOZT0iQ0RBVEFbIjtyZXR1cm4gVz09PU5lLmNoYXJDb2RlQXQobCsrKT8odC5jb25zdW1lKFcpLGw9PT1OZS5sZW5ndGg/ci5pbnRlcnJ1cHQ/ZTprOmIpOmEoVyl9ZnVuY3Rpb24geChXKXtyZXR1cm4gSDEoVyk/KHQuY29uc3VtZShXKSxzPVN0cmluZy5mcm9tQ2hhckNvZGUoVyksbSk6YShXKX1mdW5jdGlvbiBtKFcpe2lmKFc9PT1udWxsfHxXPT09NDd8fFc9PT02Mnx8d3QoVykpe2xldCBOZT1XPT09NDcsUmU9cy50b0xvd2VyQ2FzZSgpO3JldHVybiFOZSYmIW8mJktLLmluY2x1ZGVzKFJlKT8oaT0xLHIuaW50ZXJydXB0P2UoVyk6ayhXKSk6UlFlLmluY2x1ZGVzKHMudG9Mb3dlckNhc2UoKSk/KGk9NixOZT8odC5jb25zdW1lKFcpLHYpOnIuaW50ZXJydXB0P2UoVyk6ayhXKSk6KGk9NyxyLmludGVycnVwdCYmIXIucGFyc2VyLmxhenlbci5ub3coKS5saW5lXT9hKFcpOm8/eShXKTp3KFcpKX1yZXR1cm4gVz09PTQ1fHx5MShXKT8odC5jb25zdW1lKFcpLHMrPVN0cmluZy5mcm9tQ2hhckNvZGUoVyksbSk6YShXKX1mdW5jdGlvbiB2KFcpe3JldHVybiBXPT09NjI/KHQuY29uc3VtZShXKSxyLmludGVycnVwdD9lOmspOmEoVyl9ZnVuY3Rpb24geShXKXtyZXR1cm4gR2UoVyk/KHQuY29uc3VtZShXKSx5KTpIKFcpfWZ1bmN0aW9uIHcoVyl7cmV0dXJuIFc9PT00Nz8odC5jb25zdW1lKFcpLEgpOlc9PT01OHx8Vz09PTk1fHxIMShXKT8odC5jb25zdW1lKFcpLEUpOkdlKFcpPyh0LmNvbnN1bWUoVyksdyk6SChXKX1mdW5jdGlvbiBFKFcpe3JldHVybiBXPT09NDV8fFc9PT00Nnx8Vz09PTU4fHxXPT09OTV8fHkxKFcpPyh0LmNvbnN1bWUoVyksRSk6QyhXKX1mdW5jdGlvbiBDKFcpe3JldHVybiBXPT09NjE/KHQuY29uc3VtZShXKSx6KTpHZShXKT8odC5jb25zdW1lKFcpLEMpOncoVyl9ZnVuY3Rpb24geihXKXtyZXR1cm4gVz09PW51bGx8fFc9PT02MHx8Vz09PTYxfHxXPT09NjJ8fFc9PT05Nj9hKFcpOlc9PT0zNHx8Vz09PTM5Pyh0LmNvbnN1bWUoVyksZj1XLFApOkdlKFcpPyh0LmNvbnN1bWUoVykseik6XyhXKX1mdW5jdGlvbiBQKFcpe3JldHVybiBXPT09Zj8odC5jb25zdW1lKFcpLGY9bnVsbCwkKTpXPT09bnVsbHx8UGUoVyk/YShXKToodC5jb25zdW1lKFcpLFApfWZ1bmN0aW9uIF8oVyl7cmV0dXJuIFc9PT1udWxsfHxXPT09MzR8fFc9PT0zOXx8Vz09PTQ3fHxXPT09NjB8fFc9PT02MXx8Vz09PTYyfHxXPT09OTZ8fHd0KFcpP0MoVyk6KHQuY29uc3VtZShXKSxfKX1mdW5jdGlvbiAkKFcpe3JldHVybiBXPT09NDd8fFc9PT02Mnx8R2UoVyk/dyhXKTphKFcpfWZ1bmN0aW9uIEgoVyl7cmV0dXJuIFc9PT02Mj8odC5jb25zdW1lKFcpLEwpOmEoVyl9ZnVuY3Rpb24gTChXKXtyZXR1cm4gVz09PW51bGx8fFBlKFcpP2soVyk6R2UoVyk/KHQuY29uc3VtZShXKSxMKTphKFcpfWZ1bmN0aW9uIGsoVyl7cmV0dXJuIFc9PT00NSYmaT09PTI/KHQuY29uc3VtZShXKSxSKTpXPT09NjAmJmk9PT0xPyh0LmNvbnN1bWUoVyksQSk6Vz09PTYyJiZpPT09ND8odC5jb25zdW1lKFcpLFNlKTpXPT09NjMmJmk9PT0zPyh0LmNvbnN1bWUoVyksVik6Vz09PTkzJiZpPT09NT8odC5jb25zdW1lKFcpLGFlKTpQZShXKSYmKGk9PT02fHxpPT09Nyk/KHQuZXhpdCgiaHRtbEZsb3dEYXRhIiksdC5jaGVjayh3SnQsemUsTikoVykpOlc9PT1udWxsfHxQZShXKT8odC5leGl0KCJodG1sRmxvd0RhdGEiKSxOKFcpKToodC5jb25zdW1lKFcpLGspfWZ1bmN0aW9uIE4oVyl7cmV0dXJuIHQuY2hlY2soTUp0LFMsemUpKFcpfWZ1bmN0aW9uIFMoVyl7cmV0dXJuIHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoVyksdC5leGl0KCJsaW5lRW5kaW5nIiksVH1mdW5jdGlvbiBUKFcpe3JldHVybiBXPT09bnVsbHx8UGUoVyk/TihXKToodC5lbnRlcigiaHRtbEZsb3dEYXRhIiksayhXKSl9ZnVuY3Rpb24gUihXKXtyZXR1cm4gVz09PTQ1Pyh0LmNvbnN1bWUoVyksVik6ayhXKX1mdW5jdGlvbiBBKFcpe3JldHVybiBXPT09NDc/KHQuY29uc3VtZShXKSxzPSIiLEYpOmsoVyl9ZnVuY3Rpb24gRihXKXtpZihXPT09NjIpe2xldCBOZT1zLnRvTG93ZXJDYXNlKCk7cmV0dXJuIEtLLmluY2x1ZGVzKE5lKT8odC5jb25zdW1lKFcpLFNlKTprKFcpfXJldHVybiBIMShXKSYmcy5sZW5ndGg8OD8odC5jb25zdW1lKFcpLHMrPVN0cmluZy5mcm9tQ2hhckNvZGUoVyksRik6ayhXKX1mdW5jdGlvbiBhZShXKXtyZXR1cm4gVz09PTkzPyh0LmNvbnN1bWUoVyksVik6ayhXKX1mdW5jdGlvbiBWKFcpe3JldHVybiBXPT09NjI/KHQuY29uc3VtZShXKSxTZSk6Vz09PTQ1JiZpPT09Mj8odC5jb25zdW1lKFcpLFYpOmsoVyl9ZnVuY3Rpb24gU2UoVyl7cmV0dXJuIFc9PT1udWxsfHxQZShXKT8odC5leGl0KCJodG1sRmxvd0RhdGEiKSx6ZShXKSk6KHQuY29uc3VtZShXKSxTZSl9ZnVuY3Rpb24gemUoVyl7cmV0dXJuIHQuZXhpdCgiaHRtbEZsb3ciKSxlKFcpfX1mdW5jdGlvbiBTSnQodCxlLGEpe2xldCByPXRoaXM7cmV0dXJuIGk7ZnVuY3Rpb24gaShzKXtyZXR1cm4gUGUocyk/KHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUocyksdC5leGl0KCJsaW5lRW5kaW5nIiksbyk6YShzKX1mdW5jdGlvbiBvKHMpe3JldHVybiByLnBhcnNlci5sYXp5W3Iubm93KCkubGluZV0/YShzKTplKHMpfX1mdW5jdGlvbiBDSnQodCxlLGEpe3JldHVybiByO2Z1bmN0aW9uIHIoaSl7cmV0dXJuIHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoaSksdC5leGl0KCJsaW5lRW5kaW5nIiksdC5hdHRlbXB0KEJyLGUsYSl9fXZhciBKSyx3SnQsTUp0LHFRZT1uKCgpPT57a3QoKTtIUWUoKTt3SCgpO0pLPXtjb25jcmV0ZTohMCxuYW1lOiJodG1sRmxvdyIscmVzb2x2ZVRvOnpKdCx0b2tlbml6ZTprSnR9LHdKdD17cGFydGlhbDohMCx0b2tlbml6ZTpDSnR9LE1KdD17cGFydGlhbDohMCx0b2tlbml6ZTpTSnR9fSk7ZnVuY3Rpb24gTEp0KHQsZSxhKXtsZXQgcj10aGlzLGksbyxzO3JldHVybiBsO2Z1bmN0aW9uIGwoVil7cmV0dXJuIHQuZW50ZXIoImh0bWxUZXh0IiksdC5lbnRlcigiaHRtbFRleHREYXRhIiksdC5jb25zdW1lKFYpLGZ9ZnVuY3Rpb24gZihWKXtyZXR1cm4gVj09PTMzPyh0LmNvbnN1bWUoViksYyk6Vj09PTQ3Pyh0LmNvbnN1bWUoViksQyk6Vj09PTYzPyh0LmNvbnN1bWUoViksdyk6SDEoVik/KHQuY29uc3VtZShWKSxfKTphKFYpfWZ1bmN0aW9uIGMoVil7cmV0dXJuIFY9PT00NT8odC5jb25zdW1lKFYpLHUpOlY9PT05MT8odC5jb25zdW1lKFYpLG89MCxiKTpIMShWKT8odC5jb25zdW1lKFYpLHkpOmEoVil9ZnVuY3Rpb24gdShWKXtyZXR1cm4gVj09PTQ1Pyh0LmNvbnN1bWUoViksZyk6YShWKX1mdW5jdGlvbiBkKFYpe3JldHVybiBWPT09bnVsbD9hKFYpOlY9PT00NT8odC5jb25zdW1lKFYpLGgpOlBlKFYpPyhzPWQsQShWKSk6KHQuY29uc3VtZShWKSxkKX1mdW5jdGlvbiBoKFYpe3JldHVybiBWPT09NDU/KHQuY29uc3VtZShWKSxnKTpkKFYpfWZ1bmN0aW9uIGcoVil7cmV0dXJuIFY9PT02Mj9SKFYpOlY9PT00NT9oKFYpOmQoVil9ZnVuY3Rpb24gYihWKXtsZXQgU2U9IkNEQVRBWyI7cmV0dXJuIFY9PT1TZS5jaGFyQ29kZUF0KG8rKyk/KHQuY29uc3VtZShWKSxvPT09U2UubGVuZ3RoP3g6Yik6YShWKX1mdW5jdGlvbiB4KFYpe3JldHVybiBWPT09bnVsbD9hKFYpOlY9PT05Mz8odC5jb25zdW1lKFYpLG0pOlBlKFYpPyhzPXgsQShWKSk6KHQuY29uc3VtZShWKSx4KX1mdW5jdGlvbiBtKFYpe3JldHVybiBWPT09OTM/KHQuY29uc3VtZShWKSx2KTp4KFYpfWZ1bmN0aW9uIHYoVil7cmV0dXJuIFY9PT02Mj9SKFYpOlY9PT05Mz8odC5jb25zdW1lKFYpLHYpOngoVil9ZnVuY3Rpb24geShWKXtyZXR1cm4gVj09PW51bGx8fFY9PT02Mj9SKFYpOlBlKFYpPyhzPXksQShWKSk6KHQuY29uc3VtZShWKSx5KX1mdW5jdGlvbiB3KFYpe3JldHVybiBWPT09bnVsbD9hKFYpOlY9PT02Mz8odC5jb25zdW1lKFYpLEUpOlBlKFYpPyhzPXcsQShWKSk6KHQuY29uc3VtZShWKSx3KX1mdW5jdGlvbiBFKFYpe3JldHVybiBWPT09NjI/UihWKTp3KFYpfWZ1bmN0aW9uIEMoVil7cmV0dXJuIEgxKFYpPyh0LmNvbnN1bWUoVikseik6YShWKX1mdW5jdGlvbiB6KFYpe3JldHVybiBWPT09NDV8fHkxKFYpPyh0LmNvbnN1bWUoVikseik6UChWKX1mdW5jdGlvbiBQKFYpe3JldHVybiBQZShWKT8ocz1QLEEoVikpOkdlKFYpPyh0LmNvbnN1bWUoViksUCk6UihWKX1mdW5jdGlvbiBfKFYpe3JldHVybiBWPT09NDV8fHkxKFYpPyh0LmNvbnN1bWUoViksXyk6Vj09PTQ3fHxWPT09NjJ8fHd0KFYpPyQoVik6YShWKX1mdW5jdGlvbiAkKFYpe3JldHVybiBWPT09NDc/KHQuY29uc3VtZShWKSxSKTpWPT09NTh8fFY9PT05NXx8SDEoVik/KHQuY29uc3VtZShWKSxIKTpQZShWKT8ocz0kLEEoVikpOkdlKFYpPyh0LmNvbnN1bWUoViksJCk6UihWKX1mdW5jdGlvbiBIKFYpe3JldHVybiBWPT09NDV8fFY9PT00Nnx8Vj09PTU4fHxWPT09OTV8fHkxKFYpPyh0LmNvbnN1bWUoViksSCk6TChWKX1mdW5jdGlvbiBMKFYpe3JldHVybiBWPT09NjE/KHQuY29uc3VtZShWKSxrKTpQZShWKT8ocz1MLEEoVikpOkdlKFYpPyh0LmNvbnN1bWUoViksTCk6JChWKX1mdW5jdGlvbiBrKFYpe3JldHVybiBWPT09bnVsbHx8Vj09PTYwfHxWPT09NjF8fFY9PT02Mnx8Vj09PTk2P2EoVik6Vj09PTM0fHxWPT09Mzk/KHQuY29uc3VtZShWKSxpPVYsTik6UGUoVik/KHM9ayxBKFYpKTpHZShWKT8odC5jb25zdW1lKFYpLGspOih0LmNvbnN1bWUoViksUyl9ZnVuY3Rpb24gTihWKXtyZXR1cm4gVj09PWk/KHQuY29uc3VtZShWKSxpPXZvaWQgMCxUKTpWPT09bnVsbD9hKFYpOlBlKFYpPyhzPU4sQShWKSk6KHQuY29uc3VtZShWKSxOKX1mdW5jdGlvbiBTKFYpe3JldHVybiBWPT09bnVsbHx8Vj09PTM0fHxWPT09Mzl8fFY9PT02MHx8Vj09PTYxfHxWPT09OTY/YShWKTpWPT09NDd8fFY9PT02Mnx8d3QoVik/JChWKToodC5jb25zdW1lKFYpLFMpfWZ1bmN0aW9uIFQoVil7cmV0dXJuIFY9PT00N3x8Vj09PTYyfHx3dChWKT8kKFYpOmEoVil9ZnVuY3Rpb24gUihWKXtyZXR1cm4gVj09PTYyPyh0LmNvbnN1bWUoViksdC5leGl0KCJodG1sVGV4dERhdGEiKSx0LmV4aXQoImh0bWxUZXh0IiksZSk6YShWKX1mdW5jdGlvbiBBKFYpe3JldHVybiB0LmV4aXQoImh0bWxUZXh0RGF0YSIpLHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoViksdC5leGl0KCJsaW5lRW5kaW5nIiksRn1mdW5jdGlvbiBGKFYpe3JldHVybiBHZShWKT9KZSh0LGFlLCJsaW5lUHJlZml4IixyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpKFYpOmFlKFYpfWZ1bmN0aW9uIGFlKFYpe3JldHVybiB0LmVudGVyKCJodG1sVGV4dERhdGEiKSxzKFYpfX12YXIgZUosVlFlPW4oKCk9PntDMSgpO2t0KCk7ZUo9e25hbWU6Imh0bWxUZXh0Iix0b2tlbml6ZTpMSnR9fSk7ZnVuY3Rpb24gJEp0KHQpe2xldCBlPS0xLGE9W107Zm9yKDsrK2U8dC5sZW5ndGg7KXtsZXQgcj10W2VdWzFdO2lmKGEucHVzaCh0W2VdKSxyLnR5cGU9PT0ibGFiZWxJbWFnZSJ8fHIudHlwZT09PSJsYWJlbExpbmsifHxyLnR5cGU9PT0ibGFiZWxFbmQiKXtsZXQgaT1yLnR5cGU9PT0ibGFiZWxJbWFnZSI/NDoyO3IudHlwZT0iZGF0YSIsZSs9aX19cmV0dXJuIHQubGVuZ3RoIT09YS5sZW5ndGgmJlMxKHQsMCx0Lmxlbmd0aCxhKSx0fWZ1bmN0aW9uIERKdCh0LGUpe2xldCBhPXQubGVuZ3RoLHI9MCxpLG8scyxsO2Zvcig7YS0tOylpZihpPXRbYV1bMV0sbyl7aWYoaS50eXBlPT09ImxpbmsifHxpLnR5cGU9PT0ibGFiZWxMaW5rIiYmaS5faW5hY3RpdmUpYnJlYWs7dFthXVswXT09PSJlbnRlciImJmkudHlwZT09PSJsYWJlbExpbmsiJiYoaS5faW5hY3RpdmU9ITApfWVsc2UgaWYocyl7aWYodFthXVswXT09PSJlbnRlciImJihpLnR5cGU9PT0ibGFiZWxJbWFnZSJ8fGkudHlwZT09PSJsYWJlbExpbmsiKSYmIWkuX2JhbGFuY2VkJiYobz1hLGkudHlwZSE9PSJsYWJlbExpbmsiKSl7cj0yO2JyZWFrfX1lbHNlIGkudHlwZT09PSJsYWJlbEVuZCImJihzPWEpO2xldCBmPXt0eXBlOnRbb11bMV0udHlwZT09PSJsYWJlbExpbmsiPyJsaW5rIjoiaW1hZ2UiLHN0YXJ0OnsuLi50W29dWzFdLnN0YXJ0fSxlbmQ6ey4uLnRbdC5sZW5ndGgtMV1bMV0uZW5kfX0sYz17dHlwZToibGFiZWwiLHN0YXJ0OnsuLi50W29dWzFdLnN0YXJ0fSxlbmQ6ey4uLnRbc11bMV0uZW5kfX0sdT17dHlwZToibGFiZWxUZXh0IixzdGFydDp7Li4udFtvK3IrMl1bMV0uZW5kfSxlbmQ6ey4uLnRbcy0yXVsxXS5zdGFydH19O3JldHVybiBsPVtbImVudGVyIixmLGVdLFsiZW50ZXIiLGMsZV1dLGw9RDEobCx0LnNsaWNlKG8rMSxvK3IrMykpLGw9RDEobCxbWyJlbnRlciIsdSxlXV0pLGw9RDEobCxxbyhlLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCx0LnNsaWNlKG8rcis0LHMtMyksZSkpLGw9RDEobCxbWyJleGl0Iix1LGVdLHRbcy0yXSx0W3MtMV0sWyJleGl0IixjLGVdXSksbD1EMShsLHQuc2xpY2UocysxKSksbD1EMShsLFtbImV4aXQiLGYsZV1dKSxTMSh0LG8sdC5sZW5ndGgsbCksdH1mdW5jdGlvbiBFSnQodCxlLGEpe2xldCByPXRoaXMsaT1yLmV2ZW50cy5sZW5ndGgsbyxzO2Zvcig7aS0tOylpZigoci5ldmVudHNbaV1bMV0udHlwZT09PSJsYWJlbEltYWdlInx8ci5ldmVudHNbaV1bMV0udHlwZT09PSJsYWJlbExpbmsiKSYmIXIuZXZlbnRzW2ldWzFdLl9iYWxhbmNlZCl7bz1yLmV2ZW50c1tpXVsxXTticmVha31yZXR1cm4gbDtmdW5jdGlvbiBsKGgpe3JldHVybiBvP28uX2luYWN0aXZlP2QoaCk6KHM9ci5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyh3MShyLnNsaWNlU2VyaWFsaXplKHtzdGFydDpvLmVuZCxlbmQ6ci5ub3coKX0pKSksdC5lbnRlcigibGFiZWxFbmQiKSx0LmVudGVyKCJsYWJlbE1hcmtlciIpLHQuY29uc3VtZShoKSx0LmV4aXQoImxhYmVsTWFya2VyIiksdC5leGl0KCJsYWJlbEVuZCIpLGYpOmEoaCl9ZnVuY3Rpb24gZihoKXtyZXR1cm4gaD09PTQwP3QuYXR0ZW1wdChUSnQsdSxzP3U6ZCkoaCk6aD09PTkxP3QuYXR0ZW1wdChfSnQsdSxzP2M6ZCkoaCk6cz91KGgpOmQoaCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gdC5hdHRlbXB0KEFKdCx1LGQpKGgpfWZ1bmN0aW9uIHUoaCl7cmV0dXJuIGUoaCl9ZnVuY3Rpb24gZChoKXtyZXR1cm4gby5fYmFsYW5jZWQ9ITAsYShoKX19ZnVuY3Rpb24gTkp0KHQsZSxhKXtyZXR1cm4gcjtmdW5jdGlvbiByKGQpe3JldHVybiB0LmVudGVyKCJyZXNvdXJjZSIpLHQuZW50ZXIoInJlc291cmNlTWFya2VyIiksdC5jb25zdW1lKGQpLHQuZXhpdCgicmVzb3VyY2VNYXJrZXIiKSxpfWZ1bmN0aW9uIGkoZCl7cmV0dXJuIHd0KGQpP21uKHQsbykoZCk6byhkKX1mdW5jdGlvbiBvKGQpe3JldHVybiBkPT09NDE/dShkKTpMSCh0LHMsbCwicmVzb3VyY2VEZXN0aW5hdGlvbiIsInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsIiwicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCJyZXNvdXJjZURlc3RpbmF0aW9uUmF3IiwicmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZyIsMzIpKGQpfWZ1bmN0aW9uIHMoZCl7cmV0dXJuIHd0KGQpP21uKHQsZikoZCk6dShkKX1mdW5jdGlvbiBsKGQpe3JldHVybiBhKGQpfWZ1bmN0aW9uIGYoZCl7cmV0dXJuIGQ9PT0zNHx8ZD09PTM5fHxkPT09NDA/X0godCxjLGEsInJlc291cmNlVGl0bGUiLCJyZXNvdXJjZVRpdGxlTWFya2VyIiwicmVzb3VyY2VUaXRsZVN0cmluZyIpKGQpOnUoZCl9ZnVuY3Rpb24gYyhkKXtyZXR1cm4gd3QoZCk/bW4odCx1KShkKTp1KGQpfWZ1bmN0aW9uIHUoZCl7cmV0dXJuIGQ9PT00MT8odC5lbnRlcigicmVzb3VyY2VNYXJrZXIiKSx0LmNvbnN1bWUoZCksdC5leGl0KCJyZXNvdXJjZU1hcmtlciIpLHQuZXhpdCgicmVzb3VyY2UiKSxlKTphKGQpfX1mdW5jdGlvbiBQSnQodCxlLGEpe2xldCByPXRoaXM7cmV0dXJuIGk7ZnVuY3Rpb24gaShsKXtyZXR1cm4gVEguY2FsbChyLHQsbyxzLCJyZWZlcmVuY2UiLCJyZWZlcmVuY2VNYXJrZXIiLCJyZWZlcmVuY2VTdHJpbmciKShsKX1mdW5jdGlvbiBvKGwpe3JldHVybiByLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKHcxKHIuc2xpY2VTZXJpYWxpemUoci5ldmVudHNbci5ldmVudHMubGVuZ3RoLTFdWzFdKS5zbGljZSgxLC0xKSkpP2UobCk6YShsKX1mdW5jdGlvbiBzKGwpe3JldHVybiBhKGwpfX1mdW5jdGlvbiBJSnQodCxlLGEpe3JldHVybiByO2Z1bmN0aW9uIHIobyl7cmV0dXJuIHQuZW50ZXIoInJlZmVyZW5jZSIpLHQuZW50ZXIoInJlZmVyZW5jZU1hcmtlciIpLHQuY29uc3VtZShvKSx0LmV4aXQoInJlZmVyZW5jZU1hcmtlciIpLGl9ZnVuY3Rpb24gaShvKXtyZXR1cm4gbz09PTkzPyh0LmVudGVyKCJyZWZlcmVuY2VNYXJrZXIiKSx0LmNvbnN1bWUobyksdC5leGl0KCJyZWZlcmVuY2VNYXJrZXIiKSx0LmV4aXQoInJlZmVyZW5jZSIpLGUpOmEobyl9fXZhciBnbixUSnQsX0p0LEFKdCxBSD1uKCgpPT57aksoKTtXSygpO0dLKCk7WUsoKTtrdCgpO1ByKCk7Um8oKTtkZCgpO2duPXtuYW1lOiJsYWJlbEVuZCIscmVzb2x2ZUFsbDokSnQscmVzb2x2ZVRvOkRKdCx0b2tlbml6ZTpFSnR9LFRKdD17dG9rZW5pemU6Tkp0fSxfSnQ9e3Rva2VuaXplOlBKdH0sQUp0PXt0b2tlbml6ZTpJSnR9fSk7ZnVuY3Rpb24gRkp0KHQsZSxhKXtsZXQgcj10aGlzO3JldHVybiBpO2Z1bmN0aW9uIGkobCl7cmV0dXJuIHQuZW50ZXIoImxhYmVsSW1hZ2UiKSx0LmVudGVyKCJsYWJlbEltYWdlTWFya2VyIiksdC5jb25zdW1lKGwpLHQuZXhpdCgibGFiZWxJbWFnZU1hcmtlciIpLG99ZnVuY3Rpb24gbyhsKXtyZXR1cm4gbD09PTkxPyh0LmVudGVyKCJsYWJlbE1hcmtlciIpLHQuY29uc3VtZShsKSx0LmV4aXQoImxhYmVsTWFya2VyIiksdC5leGl0KCJsYWJlbEltYWdlIikscyk6YShsKX1mdW5jdGlvbiBzKGwpe3JldHVybiBsPT09OTQmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIHIucGFyc2VyLmNvbnN0cnVjdHM/YShsKTplKGwpfX12YXIgdEosVVFlPW4oKCk9PntBSCgpO3RKPXtuYW1lOiJsYWJlbFN0YXJ0SW1hZ2UiLHJlc29sdmVBbGw6Z24ucmVzb2x2ZUFsbCx0b2tlbml6ZTpGSnR9fSk7ZnVuY3Rpb24gT0p0KHQsZSxhKXtsZXQgcj10aGlzO3JldHVybiBpO2Z1bmN0aW9uIGkocyl7cmV0dXJuIHQuZW50ZXIoImxhYmVsTGluayIpLHQuZW50ZXIoImxhYmVsTWFya2VyIiksdC5jb25zdW1lKHMpLHQuZXhpdCgibGFiZWxNYXJrZXIiKSx0LmV4aXQoImxhYmVsTGluayIpLG99ZnVuY3Rpb24gbyhzKXtyZXR1cm4gcz09PTk0JiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiByLnBhcnNlci5jb25zdHJ1Y3RzP2Eocyk6ZShzKX19dmFyIGFKLGpRZT1uKCgpPT57QUgoKTthSj17bmFtZToibGFiZWxTdGFydExpbmsiLHJlc29sdmVBbGw6Z24ucmVzb2x2ZUFsbCx0b2tlbml6ZTpPSnR9fSk7ZnVuY3Rpb24gQkp0KHQsZSl7cmV0dXJuIGE7ZnVuY3Rpb24gYShyKXtyZXR1cm4gdC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShyKSx0LmV4aXQoImxpbmVFbmRpbmciKSxKZSh0LGUsImxpbmVQcmVmaXgiKX19dmFyIG1kLFdRZT1uKCgpPT57QzEoKTtrdCgpO21kPXtuYW1lOiJsaW5lRW5kaW5nIix0b2tlbml6ZTpCSnR9fSk7ZnVuY3Rpb24gUkp0KHQsZSxhKXtsZXQgcj0wLGk7cmV0dXJuIG87ZnVuY3Rpb24gbyhjKXtyZXR1cm4gdC5lbnRlcigidGhlbWF0aWNCcmVhayIpLHMoYyl9ZnVuY3Rpb24gcyhjKXtyZXR1cm4gaT1jLGwoYyl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09PWk/KHQuZW50ZXIoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpLGYoYykpOnI+PTMmJihjPT09bnVsbHx8UGUoYykpPyh0LmV4aXQoInRoZW1hdGljQnJlYWsiKSxlKGMpKTphKGMpfWZ1bmN0aW9uIGYoYyl7cmV0dXJuIGM9PT1pPyh0LmNvbnN1bWUoYykscisrLGYpOih0LmV4aXQoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpLEdlKGMpP0plKHQsbCwid2hpdGVzcGFjZSIpKGMpOmwoYykpfX12YXIgeG4scko9bigoKT0+e0MxKCk7a3QoKTt4bj17bmFtZToidGhlbWF0aWNCcmVhayIsdG9rZW5pemU6Ukp0fX0pO2Z1bmN0aW9uIFZKdCh0LGUsYSl7bGV0IHI9dGhpcyxpPXIuZXZlbnRzW3IuZXZlbnRzLmxlbmd0aC0xXSxvPWkmJmlbMV0udHlwZT09PSJsaW5lUHJlZml4Ij9pWzJdLnNsaWNlU2VyaWFsaXplKGlbMV0sITApLmxlbmd0aDowLHM9MDtyZXR1cm4gbDtmdW5jdGlvbiBsKGcpe2xldCBiPXIuY29udGFpbmVyU3RhdGUudHlwZXx8KGc9PT00Mnx8Zz09PTQzfHxnPT09NDU/Imxpc3RVbm9yZGVyZWQiOiJsaXN0T3JkZXJlZCIpO2lmKGI9PT0ibGlzdFVub3JkZXJlZCI/IXIuY29udGFpbmVyU3RhdGUubWFya2VyfHxnPT09ci5jb250YWluZXJTdGF0ZS5tYXJrZXI6b2QoZykpe2lmKHIuY29udGFpbmVyU3RhdGUudHlwZXx8KHIuY29udGFpbmVyU3RhdGUudHlwZT1iLHQuZW50ZXIoYix7X2NvbnRhaW5lcjohMH0pKSxiPT09Imxpc3RVbm9yZGVyZWQiKXJldHVybiB0LmVudGVyKCJsaXN0SXRlbVByZWZpeCIpLGc9PT00Mnx8Zz09PTQ1P3QuY2hlY2soeG4sYSxjKShnKTpjKGcpO2lmKCFyLmludGVycnVwdHx8Zz09PTQ5KXJldHVybiB0LmVudGVyKCJsaXN0SXRlbVByZWZpeCIpLHQuZW50ZXIoImxpc3RJdGVtVmFsdWUiKSxmKGcpfXJldHVybiBhKGcpfWZ1bmN0aW9uIGYoZyl7cmV0dXJuIG9kKGcpJiYrK3M8MTA/KHQuY29uc3VtZShnKSxmKTooIXIuaW50ZXJydXB0fHxzPDIpJiYoci5jb250YWluZXJTdGF0ZS5tYXJrZXI/Zz09PXIuY29udGFpbmVyU3RhdGUubWFya2VyOmc9PT00MXx8Zz09PTQ2KT8odC5leGl0KCJsaXN0SXRlbVZhbHVlIiksYyhnKSk6YShnKX1mdW5jdGlvbiBjKGcpe3JldHVybiB0LmVudGVyKCJsaXN0SXRlbU1hcmtlciIpLHQuY29uc3VtZShnKSx0LmV4aXQoImxpc3RJdGVtTWFya2VyIiksci5jb250YWluZXJTdGF0ZS5tYXJrZXI9ci5jb250YWluZXJTdGF0ZS5tYXJrZXJ8fGcsdC5jaGVjayhCcixyLmludGVycnVwdD9hOnUsdC5hdHRlbXB0KEhKdCxoLGQpKX1mdW5jdGlvbiB1KGcpe3JldHVybiByLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmU9ITAsbysrLGgoZyl9ZnVuY3Rpb24gZChnKXtyZXR1cm4gR2UoZyk/KHQuZW50ZXIoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLHQuY29uc3VtZShnKSx0LmV4aXQoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLGgpOmEoZyl9ZnVuY3Rpb24gaChnKXtyZXR1cm4gci5jb250YWluZXJTdGF0ZS5zaXplPW8rci5zbGljZVNlcmlhbGl6ZSh0LmV4aXQoImxpc3RJdGVtUHJlZml4IiksITApLmxlbmd0aCxlKGcpfX1mdW5jdGlvbiBVSnQodCxlLGEpe2xldCByPXRoaXM7cmV0dXJuIHIuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz12b2lkIDAsdC5jaGVjayhCcixpLG8pO2Z1bmN0aW9uIGkobCl7cmV0dXJuIHIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXM9ci5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lc3x8ci5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lLEplKHQsZSwibGlzdEl0ZW1JbmRlbnQiLHIuY29udGFpbmVyU3RhdGUuc2l6ZSsxKShsKX1mdW5jdGlvbiBvKGwpe3JldHVybiByLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzfHwhR2UobCk/KHIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXM9dm9pZCAwLHIuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZT12b2lkIDAscyhsKSk6KHIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXM9dm9pZCAwLHIuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZT12b2lkIDAsdC5hdHRlbXB0KHFKdCxlLHMpKGwpKX1mdW5jdGlvbiBzKGwpe3JldHVybiByLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3c9ITAsci5pbnRlcnJ1cHQ9dm9pZCAwLEplKHQsdC5hdHRlbXB0KGsyLGUsYSksImxpbmVQcmVmaXgiLHIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkobCl9fWZ1bmN0aW9uIGpKdCh0LGUsYSl7bGV0IHI9dGhpcztyZXR1cm4gSmUodCxpLCJsaXN0SXRlbUluZGVudCIsci5jb250YWluZXJTdGF0ZS5zaXplKzEpO2Z1bmN0aW9uIGkobyl7bGV0IHM9ci5ldmVudHNbci5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBzJiZzWzFdLnR5cGU9PT0ibGlzdEl0ZW1JbmRlbnQiJiZzWzJdLnNsaWNlU2VyaWFsaXplKHNbMV0sITApLmxlbmd0aD09PXIuY29udGFpbmVyU3RhdGUuc2l6ZT9lKG8pOmEobyl9fWZ1bmN0aW9uIFdKdCh0KXt0LmV4aXQodGhpcy5jb250YWluZXJTdGF0ZS50eXBlKX1mdW5jdGlvbiBHSnQodCxlLGEpe2xldCByPXRoaXM7cmV0dXJuIEplKHQsaSwibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIixyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjUpO2Z1bmN0aW9uIGkobyl7bGV0IHM9ci5ldmVudHNbci5ldmVudHMubGVuZ3RoLTFdO3JldHVybiFHZShvKSYmcyYmc1sxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSI/ZShvKTphKG8pfX12YXIgazIsSEp0LHFKdCxHUWU9bigoKT0+e0MxKCk7a3QoKTt3SCgpO3JKKCk7azI9e2NvbnRpbnVhdGlvbjp7dG9rZW5pemU6VUp0fSxleGl0OldKdCxuYW1lOiJsaXN0Iix0b2tlbml6ZTpWSnR9LEhKdD17cGFydGlhbDohMCx0b2tlbml6ZTpHSnR9LHFKdD17cGFydGlhbDohMCx0b2tlbml6ZTpqSnR9fSk7ZnVuY3Rpb24gWUp0KHQsZSl7bGV0IGE9dC5sZW5ndGgscixpLG87Zm9yKDthLS07KWlmKHRbYV1bMF09PT0iZW50ZXIiKXtpZih0W2FdWzFdLnR5cGU9PT0iY29udGVudCIpe3I9YTticmVha310W2FdWzFdLnR5cGU9PT0icGFyYWdyYXBoIiYmKGk9YSl9ZWxzZSB0W2FdWzFdLnR5cGU9PT0iY29udGVudCImJnQuc3BsaWNlKGEsMSksIW8mJnRbYV1bMV0udHlwZT09PSJkZWZpbml0aW9uIiYmKG89YSk7bGV0IHM9e3R5cGU6InNldGV4dEhlYWRpbmciLHN0YXJ0OnsuLi50W3JdWzFdLnN0YXJ0fSxlbmQ6ey4uLnRbdC5sZW5ndGgtMV1bMV0uZW5kfX07cmV0dXJuIHRbaV1bMV0udHlwZT0ic2V0ZXh0SGVhZGluZ1RleHQiLG8/KHQuc3BsaWNlKGksMCxbImVudGVyIixzLGVdKSx0LnNwbGljZShvKzEsMCxbImV4aXQiLHRbcl1bMV0sZV0pLHRbcl1bMV0uZW5kPXsuLi50W29dWzFdLmVuZH0pOnRbcl1bMV09cyx0LnB1c2goWyJleGl0IixzLGVdKSx0fWZ1bmN0aW9uIFpKdCh0LGUsYSl7bGV0IHI9dGhpcyxpO3JldHVybiBvO2Z1bmN0aW9uIG8oYyl7bGV0IHU9ci5ldmVudHMubGVuZ3RoLGQ7Zm9yKDt1LS07KWlmKHIuZXZlbnRzW3VdWzFdLnR5cGUhPT0ibGluZUVuZGluZyImJnIuZXZlbnRzW3VdWzFdLnR5cGUhPT0ibGluZVByZWZpeCImJnIuZXZlbnRzW3VdWzFdLnR5cGUhPT0iY29udGVudCIpe2Q9ci5ldmVudHNbdV1bMV0udHlwZT09PSJwYXJhZ3JhcGgiO2JyZWFrfXJldHVybiFyLnBhcnNlci5sYXp5W3Iubm93KCkubGluZV0mJihyLmludGVycnVwdHx8ZCk/KHQuZW50ZXIoInNldGV4dEhlYWRpbmdMaW5lIiksaT1jLHMoYykpOmEoYyl9ZnVuY3Rpb24gcyhjKXtyZXR1cm4gdC5lbnRlcigic2V0ZXh0SGVhZGluZ0xpbmVTZXF1ZW5jZSIpLGwoYyl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09PWk/KHQuY29uc3VtZShjKSxsKToodC5leGl0KCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIiksR2UoYyk/SmUodCxmLCJsaW5lU3VmZml4IikoYyk6ZihjKSl9ZnVuY3Rpb24gZihjKXtyZXR1cm4gYz09PW51bGx8fFBlKGMpPyh0LmV4aXQoInNldGV4dEhlYWRpbmdMaW5lIiksZShjKSk6YShjKX19dmFyICRILFlRZT1uKCgpPT57QzEoKTtrdCgpOyRIPXtuYW1lOiJzZXRleHRVbmRlcmxpbmUiLHJlc29sdmVUbzpZSnQsdG9rZW5pemU6Wkp0fX0pO3ZhciBESD1uKCgpPT57TFFlKCk7VFFlKCk7d0goKTtfUWUoKTtBUWUoKTskUWUoKTtFUWUoKTtOUWUoKTtQUWUoKTtJUWUoKTtGUWUoKTtPUWUoKTtCUWUoKTtxUWUoKTtWUWUoKTtBSCgpO1VRZSgpO2pRZSgpO1dRZSgpO0dRZSgpO1lRZSgpO3JKKCl9KTtmdW5jdGlvbiBpSigpe3JldHVybntkb2N1bWVudDp7OTE6e25hbWU6ImdmbUZvb3Rub3RlRGVmaW5pdGlvbiIsdG9rZW5pemU6ZWUxLGNvbnRpbnVhdGlvbjp7dG9rZW5pemU6dGUxfSxleGl0OmFlMX19LHRleHQ6ezkxOntuYW1lOiJnZm1Gb290bm90ZUNhbGwiLHRva2VuaXplOkpKdH0sOTM6e25hbWU6ImdmbVBvdGVudGlhbEZvb3Rub3RlQ2FsbCIsYWRkOiJhZnRlciIsdG9rZW5pemU6UUp0LHJlc29sdmVUbzpLSnR9fX19ZnVuY3Rpb24gUUp0KHQsZSxhKXtsZXQgcj10aGlzLGk9ci5ldmVudHMubGVuZ3RoLG89ci5wYXJzZXIuZ2ZtRm9vdG5vdGVzfHwoci5wYXJzZXIuZ2ZtRm9vdG5vdGVzPVtdKSxzO2Zvcig7aS0tOyl7bGV0IGY9ci5ldmVudHNbaV1bMV07aWYoZi50eXBlPT09ImxhYmVsSW1hZ2UiKXtzPWY7YnJlYWt9aWYoZi50eXBlPT09ImdmbUZvb3Rub3RlQ2FsbCJ8fGYudHlwZT09PSJsYWJlbExpbmsifHxmLnR5cGU9PT0ibGFiZWwifHxmLnR5cGU9PT0iaW1hZ2UifHxmLnR5cGU9PT0ibGluayIpYnJlYWt9cmV0dXJuIGw7ZnVuY3Rpb24gbChmKXtpZighc3x8IXMuX2JhbGFuY2VkKXJldHVybiBhKGYpO2xldCBjPXcxKHIuc2xpY2VTZXJpYWxpemUoe3N0YXJ0OnMuZW5kLGVuZDpyLm5vdygpfSkpO3JldHVybiBjLmNvZGVQb2ludEF0KDApIT09OTR8fCFvLmluY2x1ZGVzKGMuc2xpY2UoMSkpP2EoZik6KHQuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIiksdC5jb25zdW1lKGYpLHQuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKSxlKGYpKX19ZnVuY3Rpb24gS0p0KHQsZSl7bGV0IGE9dC5sZW5ndGgscjtmb3IoO2EtLTspaWYodFthXVsxXS50eXBlPT09ImxhYmVsSW1hZ2UiJiZ0W2FdWzBdPT09ImVudGVyIil7cj10W2FdWzFdO2JyZWFrfXRbYSsxXVsxXS50eXBlPSJkYXRhIix0W2ErM11bMV0udHlwZT0iZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiO2xldCBpPXt0eXBlOiJnZm1Gb290bm90ZUNhbGwiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sdFthKzNdWzFdLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSx0W3QubGVuZ3RoLTFdWzFdLmVuZCl9LG89e3R5cGU6ImdmbUZvb3Rub3RlQ2FsbE1hcmtlciIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSx0W2ErM11bMV0uZW5kKSxlbmQ6T2JqZWN0LmFzc2lnbih7fSx0W2ErM11bMV0uZW5kKX07by5lbmQuY29sdW1uKyssby5lbmQub2Zmc2V0Kyssby5lbmQuX2J1ZmZlckluZGV4Kys7bGV0IHM9e3R5cGU6ImdmbUZvb3Rub3RlQ2FsbFN0cmluZyIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxvLmVuZCksZW5kOk9iamVjdC5hc3NpZ24oe30sdFt0Lmxlbmd0aC0xXVsxXS5zdGFydCl9LGw9e3R5cGU6ImNodW5rU3RyaW5nIixjb250ZW50VHlwZToic3RyaW5nIixzdGFydDpPYmplY3QuYXNzaWduKHt9LHMuc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LHMuZW5kKX0sZj1bdFthKzFdLHRbYSsyXSxbImVudGVyIixpLGVdLHRbYSszXSx0W2ErNF0sWyJlbnRlciIsbyxlXSxbImV4aXQiLG8sZV0sWyJlbnRlciIscyxlXSxbImVudGVyIixsLGVdLFsiZXhpdCIsbCxlXSxbImV4aXQiLHMsZV0sdFt0Lmxlbmd0aC0yXSx0W3QubGVuZ3RoLTFdLFsiZXhpdCIsaSxlXV07cmV0dXJuIHQuc3BsaWNlKGEsdC5sZW5ndGgtYSsxLC4uLmYpLHR9ZnVuY3Rpb24gSkp0KHQsZSxhKXtsZXQgcj10aGlzLGk9ci5wYXJzZXIuZ2ZtRm9vdG5vdGVzfHwoci5wYXJzZXIuZ2ZtRm9vdG5vdGVzPVtdKSxvPTAscztyZXR1cm4gbDtmdW5jdGlvbiBsKGQpe3JldHVybiB0LmVudGVyKCJnZm1Gb290bm90ZUNhbGwiKSx0LmVudGVyKCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpLHQuY29uc3VtZShkKSx0LmV4aXQoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIiksZn1mdW5jdGlvbiBmKGQpe3JldHVybiBkIT09OTQ/YShkKToodC5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsTWFya2VyIiksdC5jb25zdW1lKGQpLHQuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTWFya2VyIiksdC5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nIiksdC5lbnRlcigiY2h1bmtTdHJpbmciKS5jb250ZW50VHlwZT0ic3RyaW5nIixjKX1mdW5jdGlvbiBjKGQpe2lmKG8+OTk5fHxkPT09OTMmJiFzfHxkPT09bnVsbHx8ZD09PTkxfHx3dChkKSlyZXR1cm4gYShkKTtpZihkPT09OTMpe3QuZXhpdCgiY2h1bmtTdHJpbmciKTtsZXQgaD10LmV4aXQoImdmbUZvb3Rub3RlQ2FsbFN0cmluZyIpO3JldHVybiBpLmluY2x1ZGVzKHcxKHIuc2xpY2VTZXJpYWxpemUoaCkpKT8odC5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKSx0LmNvbnN1bWUoZCksdC5leGl0KCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpLHQuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsIiksZSk6YShkKX1yZXR1cm4gd3QoZCl8fChzPSEwKSxvKyssdC5jb25zdW1lKGQpLGQ9PT05Mj91OmN9ZnVuY3Rpb24gdShkKXtyZXR1cm4gZD09PTkxfHxkPT09OTJ8fGQ9PT05Mz8odC5jb25zdW1lKGQpLG8rKyxjKTpjKGQpfX1mdW5jdGlvbiBlZTEodCxlLGEpe2xldCByPXRoaXMsaT1yLnBhcnNlci5nZm1Gb290bm90ZXN8fChyLnBhcnNlci5nZm1Gb290bm90ZXM9W10pLG8scz0wLGw7cmV0dXJuIGY7ZnVuY3Rpb24gZihiKXtyZXR1cm4gdC5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uIikuX2NvbnRhaW5lcj0hMCx0LmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbCIpLHQuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIiksdC5jb25zdW1lKGIpLHQuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKSxjfWZ1bmN0aW9uIGMoYil7cmV0dXJuIGI9PT05ND8odC5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTWFya2VyIiksdC5jb25zdW1lKGIpLHQuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTWFya2VyIiksdC5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmciKSx0LmVudGVyKCJjaHVua1N0cmluZyIpLmNvbnRlbnRUeXBlPSJzdHJpbmciLHUpOmEoYil9ZnVuY3Rpb24gdShiKXtpZihzPjk5OXx8Yj09PTkzJiYhbHx8Yj09PW51bGx8fGI9PT05MXx8d3QoYikpcmV0dXJuIGEoYik7aWYoYj09PTkzKXt0LmV4aXQoImNodW5rU3RyaW5nIik7bGV0IHg9dC5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyIpO3JldHVybiBvPXcxKHIuc2xpY2VTZXJpYWxpemUoeCkpLHQuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIiksdC5jb25zdW1lKGIpLHQuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKSx0LmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsIiksaH1yZXR1cm4gd3QoYil8fChsPSEwKSxzKyssdC5jb25zdW1lKGIpLGI9PT05Mj9kOnV9ZnVuY3Rpb24gZChiKXtyZXR1cm4gYj09PTkxfHxiPT09OTJ8fGI9PT05Mz8odC5jb25zdW1lKGIpLHMrKyx1KTp1KGIpfWZ1bmN0aW9uIGgoYil7cmV0dXJuIGI9PT01OD8odC5lbnRlcigiZGVmaW5pdGlvbk1hcmtlciIpLHQuY29uc3VtZShiKSx0LmV4aXQoImRlZmluaXRpb25NYXJrZXIiKSxpLmluY2x1ZGVzKG8pfHxpLnB1c2gobyksSmUodCxnLCJnZm1Gb290bm90ZURlZmluaXRpb25XaGl0ZXNwYWNlIikpOmEoYil9ZnVuY3Rpb24gZyhiKXtyZXR1cm4gZShiKX19ZnVuY3Rpb24gdGUxKHQsZSxhKXtyZXR1cm4gdC5jaGVjayhCcixlLHQuYXR0ZW1wdChYSnQsZSxhKSl9ZnVuY3Rpb24gYWUxKHQpe3QuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uIil9ZnVuY3Rpb24gcmUxKHQsZSxhKXtsZXQgcj10aGlzO3JldHVybiBKZSh0LGksImdmbUZvb3Rub3RlRGVmaW5pdGlvbkluZGVudCIsNSk7ZnVuY3Rpb24gaShvKXtsZXQgcz1yLmV2ZW50c1tyLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIHMmJnNbMV0udHlwZT09PSJnZm1Gb290bm90ZURlZmluaXRpb25JbmRlbnQiJiZzWzJdLnNsaWNlU2VyaWFsaXplKHNbMV0sITApLmxlbmd0aD09PTQ/ZShvKTphKG8pfX12YXIgWEp0LFpRZT1uKCgpPT57REgoKTtDMSgpO2t0KCk7Um8oKTtYSnQ9e3Rva2VuaXplOnJlMSxwYXJ0aWFsOiEwfX0pO2Z1bmN0aW9uIFhRZSh0LGUpe3JldHVybiJCYWNrIHRvIHJlZmVyZW5jZSAiKyh0KzEpKyhlPjE/Ii0iK2U6IiIpfWZ1bmN0aW9uIG9KKHQpe2xldCBlPXR8fG9lMSxhPWUubGFiZWx8fCJGb290bm90ZXMiLHI9ZS5sYWJlbFRhZ05hbWV8fCJoMiIsaT1lLmxhYmVsQXR0cmlidXRlcz09PW51bGx8fGUubGFiZWxBdHRyaWJ1dGVzPT09dm9pZCAwPydjbGFzcz0ic3Itb25seSInOmUubGFiZWxBdHRyaWJ1dGVzLG89ZS5iYWNrTGFiZWx8fFhRZSxzPWUuY2xvYmJlclByZWZpeD09PW51bGx8fGUuY2xvYmJlclByZWZpeD09PXZvaWQgMD8idXNlci1jb250ZW50LSI6ZS5jbG9iYmVyUHJlZml4O3JldHVybntlbnRlcjp7Z2ZtRm9vdG5vdGVEZWZpbml0aW9uKCl7dGhpcy5nZXREYXRhKCJ0aWdodFN0YWNrIikucHVzaCghMSl9LGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKCl7dGhpcy5idWZmZXIoKX0sZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nKCl7dGhpcy5idWZmZXIoKX19LGV4aXQ6e2dmbUZvb3Rub3RlRGVmaW5pdGlvbigpe2xldCBsPXRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9ucyIpLGY9dGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25TdGFjayIpLGM9dGhpcy5nZXREYXRhKCJ0aWdodFN0YWNrIiksdT1mLnBvcCgpLGQ9dGhpcy5yZXN1bWUoKTtsfHx0aGlzLnNldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvbnMiLGw9e30pLGllMS5jYWxsKGwsdSl8fChsW3VdPWQpLGMucG9wKCksdGhpcy5zZXREYXRhKCJzbHVycE9uZUxpbmVFbmRpbmciLCEwKSx0aGlzLnNldERhdGEoImxhc3RXYXNUYWciKX0sZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcobCl7bGV0IGY9dGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25TdGFjayIpO2Z8fHRoaXMuc2V0RGF0YSgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uU3RhY2siLGY9W10pLGYucHVzaCh3MSh0aGlzLnNsaWNlU2VyaWFsaXplKGwpKSksdGhpcy5yZXN1bWUoKSx0aGlzLmJ1ZmZlcigpfSxnZm1Gb290bm90ZUNhbGxTdHJpbmcobCl7bGV0IGY9dGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxPcmRlciIpLGM9dGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxDb3VudHMiKSx1PXcxKHRoaXMuc2xpY2VTZXJpYWxpemUobCkpLGQ7dGhpcy5yZXN1bWUoKSxmfHx0aGlzLnNldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIixmPVtdKSxjfHx0aGlzLnNldERhdGEoImdmbUZvb3Rub3RlQ2FsbENvdW50cyIsYz17fSk7bGV0IGg9Zi5pbmRleE9mKHUpLGc9RnIodS50b0xvd2VyQ2FzZSgpKTtoPT09LTE/KGYucHVzaCh1KSxjW3VdPTEsZD1mLmxlbmd0aCk6KGNbdV0rKyxkPWgrMSk7bGV0IGI9Y1t1XTt0aGlzLnRhZygnPHN1cD48YSBocmVmPSIjJytzKyJmbi0iK2crJyIgaWQ9IicrcysiZm5yZWYtIitnKyhiPjE/Ii0iK2I6IiIpKyciIGRhdGEtZm9vdG5vdGUtcmVmPSIiIGFyaWEtZGVzY3JpYmVkYnk9ImZvb3Rub3RlLWxhYmVsIj4nK1N0cmluZyhkKSsiPC9hPjwvc3VwPiIpfSxudWxsKCl7bGV0IGw9dGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxPcmRlciIpfHxbXSxmPXRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIil8fHt9LGM9dGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25zIil8fHt9LHU9LTE7Zm9yKGwubGVuZ3RoPjAmJih0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKCc8c2VjdGlvbiBkYXRhLWZvb3Rub3Rlcz0iIiBjbGFzcz0iZm9vdG5vdGVzIj48JytyKycgaWQ9ImZvb3Rub3RlLWxhYmVsIicrKGk/IiAiK2k6IiIpKyI+IiksdGhpcy5yYXcodGhpcy5lbmNvZGUoYSkpLHRoaXMudGFnKCI8LyIrcisiPiIpLHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjxvbD4iKSk7Kyt1PGwubGVuZ3RoOyl7bGV0IGQ9bFt1XSxoPUZyKGQudG9Mb3dlckNhc2UoKSksZz0wLGI9W107Zm9yKDsrK2c8PWZbZF07KWIucHVzaCgnPGEgaHJlZj0iIycrcysiZm5yZWYtIitoKyhnPjE/Ii0iK2c6IiIpKyciIGRhdGEtZm9vdG5vdGUtYmFja3JlZj0iIiBhcmlhLWxhYmVsPSInK3RoaXMuZW5jb2RlKHR5cGVvZiBvPT0ic3RyaW5nIj9vOm8odSxnKSkrJyIgY2xhc3M9ImRhdGEtZm9vdG5vdGUtYmFja3JlZiI+XHUyMUE5JysoZz4xPyI8c3VwPiIrZysiPC9zdXA+IjoiIikrIjwvYT4iKTtsZXQgeD1iLmpvaW4oIiAiKSxtPSExO3RoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoJzxsaSBpZD0iJytzKyJmbi0iK2grJyI+JyksdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZyhjW2RdLnJlcGxhY2UoLzxcL3A+KD86XHI/XG58XHIpPyQvLGZ1bmN0aW9uKHYpe3JldHVybiBtPSEwLCIgIit4K3Z9KSksbXx8KHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoeCkpLHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjwvbGk+Iil9bC5sZW5ndGg+MCYmKHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjwvb2w+IiksdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPC9zZWN0aW9uPiIpKX19fX12YXIgaWUxLG9lMSxRUWU9bigoKT0+e1JvKCk7T3IoKTtpZTE9e30uaGFzT3duUHJvcGVydHksb2UxPXt9fSk7dmFyIEtRZT1uKCgpPT57WlFlKCk7UVFlKCl9KTtmdW5jdGlvbiBzSigpe3JldHVybntlbnRlcjp7c3RyaWtldGhyb3VnaCgpe3RoaXMudGFnKCI8ZGVsPiIpfX0sZXhpdDp7c3RyaWtldGhyb3VnaCgpe3RoaXMudGFnKCI8L2RlbD4iKX19fX12YXIgSlFlPW4oKCk9Pnt9KTtmdW5jdGlvbiBuSih0KXtsZXQgYT0odHx8e30pLnNpbmdsZVRpbGRlLHI9e25hbWU6InN0cmlrZXRocm91Z2giLHRva2VuaXplOm8scmVzb2x2ZUFsbDppfTtyZXR1cm4gYT09bnVsbCYmKGE9ITApLHt0ZXh0OnsxMjY6cn0saW5zaWRlU3Bhbjp7bnVsbDpbcl19LGF0dGVudGlvbk1hcmtlcnM6e251bGw6WzEyNl19fTtmdW5jdGlvbiBpKHMsbCl7bGV0IGY9LTE7Zm9yKDsrK2Y8cy5sZW5ndGg7KWlmKHNbZl1bMF09PT0iZW50ZXIiJiZzW2ZdWzFdLnR5cGU9PT0ic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IiYmc1tmXVsxXS5fY2xvc2Upe2xldCBjPWY7Zm9yKDtjLS07KWlmKHNbY11bMF09PT0iZXhpdCImJnNbY11bMV0udHlwZT09PSJzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnkiJiZzW2NdWzFdLl9vcGVuJiZzW2ZdWzFdLmVuZC5vZmZzZXQtc1tmXVsxXS5zdGFydC5vZmZzZXQ9PT1zW2NdWzFdLmVuZC5vZmZzZXQtc1tjXVsxXS5zdGFydC5vZmZzZXQpe3NbZl1bMV0udHlwZT0ic3RyaWtldGhyb3VnaFNlcXVlbmNlIixzW2NdWzFdLnR5cGU9InN0cmlrZXRocm91Z2hTZXF1ZW5jZSI7bGV0IHU9e3R5cGU6InN0cmlrZXRocm91Z2giLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sc1tjXVsxXS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30sc1tmXVsxXS5lbmQpfSxkPXt0eXBlOiJzdHJpa2V0aHJvdWdoVGV4dCIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxzW2NdWzFdLmVuZCksZW5kOk9iamVjdC5hc3NpZ24oe30sc1tmXVsxXS5zdGFydCl9LGg9W1siZW50ZXIiLHUsbF0sWyJlbnRlciIsc1tjXVsxXSxsXSxbImV4aXQiLHNbY11bMV0sbF0sWyJlbnRlciIsZCxsXV0sZz1sLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbDtnJiZTMShoLGgubGVuZ3RoLDAscW8oZyxzLnNsaWNlKGMrMSxmKSxsKSksUzEoaCxoLmxlbmd0aCwwLFtbImV4aXQiLGQsbF0sWyJlbnRlciIsc1tmXVsxXSxsXSxbImV4aXQiLHNbZl1bMV0sbF0sWyJleGl0Iix1LGxdXSksUzEocyxjLTEsZi1jKzMsaCksZj1jK2gubGVuZ3RoLTI7YnJlYWt9fWZvcihmPS0xOysrZjxzLmxlbmd0aDspc1tmXVsxXS50eXBlPT09InN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSImJihzW2ZdWzFdLnR5cGU9ImRhdGEiKTtyZXR1cm4gc31mdW5jdGlvbiBvKHMsbCxmKXtsZXQgYz10aGlzLnByZXZpb3VzLHU9dGhpcy5ldmVudHMsZD0wO3JldHVybiBoO2Z1bmN0aW9uIGgoYil7cmV0dXJuIGM9PT0xMjYmJnVbdS5sZW5ndGgtMV1bMV0udHlwZSE9PSJjaGFyYWN0ZXJFc2NhcGUiP2YoYik6KHMuZW50ZXIoInN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSIpLGcoYikpfWZ1bmN0aW9uIGcoYil7bGV0IHg9emkoYyk7aWYoYj09PTEyNilyZXR1cm4gZD4xP2YoYik6KHMuY29uc3VtZShiKSxkKyssZyk7aWYoZDwyJiYhYSlyZXR1cm4gZihiKTtsZXQgbT1zLmV4aXQoInN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSIpLHY9emkoYik7cmV0dXJuIG0uX29wZW49IXZ8fHY9PT0yJiYhIXgsbS5fY2xvc2U9IXh8fHg9PT0yJiYhIXYsbChiKX19fXZhciBlS2U9bigoKT0+e1ByKCk7Y0goKTtkZCgpfSk7dmFyIHRLZT1uKCgpPT57SlFlKCk7ZUtlKCl9KTtmdW5jdGlvbiBjSigpe3JldHVybntlbnRlcjp7dGFibGUodCl7bGV0IGU9dC5fYWxpZ247dGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPHRhYmxlPiIpLHRoaXMuc2V0RGF0YSgidGFibGVBbGlnbiIsZSl9LHRhYmxlQm9keSgpe3RoaXMudGFnKCI8dGJvZHk+Iil9LHRhYmxlRGF0YSgpe2xldCB0PXRoaXMuZ2V0RGF0YSgidGFibGVBbGlnbiIpLGU9dGhpcy5nZXREYXRhKCJ0YWJsZUNvbHVtbiIpLGE9bEpbdFtlXV07YT09PXZvaWQgMD90aGlzLmJ1ZmZlcigpOih0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKCI8dGQiK2ErIj4iKSl9LHRhYmxlSGVhZCgpe3RoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjx0aGVhZD4iKX0sdGFibGVIZWFkZXIoKXtsZXQgdD10aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKSxlPXRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKSxhPWxKW3RbZV1dO3RoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjx0aCIrYSsiPiIpfSx0YWJsZVJvdygpe3RoaXMuc2V0RGF0YSgidGFibGVDb2x1bW4iLDApLHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjx0cj4iKX19LGV4aXQ6e2NvZGVUZXh0RGF0YSh0KXtsZXQgZT10aGlzLnNsaWNlU2VyaWFsaXplKHQpO3RoaXMuZ2V0RGF0YSgidGFibGVBbGlnbiIpJiYoZT1lLnJlcGxhY2UoL1xcKFtcXHxdKS9nLHNlMSkpLHRoaXMucmF3KHRoaXMuZW5jb2RlKGUpKX0sdGFibGUoKXt0aGlzLnNldERhdGEoInRhYmxlQWxpZ24iKSx0aGlzLnNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiKSx0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKCI8L3RhYmxlPiIpfSx0YWJsZUJvZHkoKXt0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKCI8L3Rib2R5PiIpfSx0YWJsZURhdGEoKXtsZXQgdD10aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKSxlPXRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTtlIGluIHQ/KHRoaXMudGFnKCI8L3RkPiIpLHRoaXMuc2V0RGF0YSgidGFibGVDb2x1bW4iLGUrMSkpOnRoaXMucmVzdW1lKCl9LHRhYmxlSGVhZCgpe3RoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjwvdGhlYWQ+Iil9LHRhYmxlSGVhZGVyKCl7bGV0IHQ9dGhpcy5nZXREYXRhKCJ0YWJsZUNvbHVtbiIpO3RoaXMudGFnKCI8L3RoPiIpLHRoaXMuc2V0RGF0YSgidGFibGVDb2x1bW4iLHQrMSl9LHRhYmxlUm93KCl7bGV0IHQ9dGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIiksZT10aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7Zm9yKDtlPHQubGVuZ3RoOyl0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKCI8dGQiK2xKW3RbZV1dKyI+PC90ZD4iKSxlKys7dGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsZSksdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPC90cj4iKX19fX1mdW5jdGlvbiBzZTEodCxlKXtyZXR1cm4gZT09PSJ8Ij9lOnR9dmFyIGxKLGFLZT1uKCgpPT57bEo9e25vbmU6IiIsbGVmdDonIGFsaWduPSJsZWZ0IicscmlnaHQ6JyBhbGlnbj0icmlnaHQiJyxjZW50ZXI6JyBhbGlnbj0iY2VudGVyIid9fSk7ZnVuY3Rpb24gbmUxKHQsZSxhLHIpe2xldCBpPTA7aWYoIShhPT09MCYmci5sZW5ndGg9PT0wKSl7Zm9yKDtpPHQubWFwLmxlbmd0aDspe2lmKHQubWFwW2ldWzBdPT09ZSl7dC5tYXBbaV1bMV0rPWEsdC5tYXBbaV1bMl0ucHVzaCguLi5yKTtyZXR1cm59aSs9MX10Lm1hcC5wdXNoKFtlLGEscl0pfX12YXIgRUgscktlPW4oKCk9PntFSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPVtdfWFkZChlLGEscil7bmUxKHRoaXMsZSxhLHIpfWNvbnN1bWUoZSl7aWYodGhpcy5tYXAuc29ydChmdW5jdGlvbihvLHMpe3JldHVybiBvWzBdLXNbMF19KSx0aGlzLm1hcC5sZW5ndGg9PT0wKXJldHVybjtsZXQgYT10aGlzLm1hcC5sZW5ndGgscj1bXTtmb3IoO2E+MDspYS09MSxyLnB1c2goZS5zbGljZSh0aGlzLm1hcFthXVswXSt0aGlzLm1hcFthXVsxXSksdGhpcy5tYXBbYV1bMl0pLGUubGVuZ3RoPXRoaXMubWFwW2FdWzBdO3IucHVzaChlLnNsaWNlKCkpLGUubGVuZ3RoPTA7bGV0IGk9ci5wb3AoKTtmb3IoO2k7KXtmb3IobGV0IG8gb2YgaSllLnB1c2gobyk7aT1yLnBvcCgpfXRoaXMubWFwLmxlbmd0aD0wfX19KTtmdW5jdGlvbiBpS2UodCxlKXtsZXQgYT0hMSxyPVtdO2Zvcig7ZTx0Lmxlbmd0aDspe2xldCBpPXRbZV07aWYoYSl7aWYoaVswXT09PSJlbnRlciIpaVsxXS50eXBlPT09InRhYmxlQ29udGVudCImJnIucHVzaCh0W2UrMV1bMV0udHlwZT09PSJ0YWJsZURlbGltaXRlck1hcmtlciI/ImxlZnQiOiJub25lIik7ZWxzZSBpZihpWzFdLnR5cGU9PT0idGFibGVDb250ZW50Iil7aWYodFtlLTFdWzFdLnR5cGU9PT0idGFibGVEZWxpbWl0ZXJNYXJrZXIiKXtsZXQgbz1yLmxlbmd0aC0xO3Jbb109cltvXT09PSJsZWZ0Ij8iY2VudGVyIjoicmlnaHQifX1lbHNlIGlmKGlbMV0udHlwZT09PSJ0YWJsZURlbGltaXRlclJvdyIpYnJlYWt9ZWxzZSBpWzBdPT09ImVudGVyIiYmaVsxXS50eXBlPT09InRhYmxlRGVsaW1pdGVyUm93IiYmKGE9ITApO2UrPTF9cmV0dXJuIHJ9dmFyIG9LZT1uKCgpPT57fSk7ZnVuY3Rpb24gZEooKXtyZXR1cm57Zmxvdzp7bnVsbDp7bmFtZToidGFibGUiLHRva2VuaXplOmxlMSxyZXNvbHZlQWxsOmNlMX19fX1mdW5jdGlvbiBsZTEodCxlLGEpe2xldCByPXRoaXMsaT0wLG89MCxzO3JldHVybiBsO2Z1bmN0aW9uIGwoSCl7bGV0IEw9ci5ldmVudHMubGVuZ3RoLTE7Zm9yKDtMPi0xOyl7bGV0IFM9ci5ldmVudHNbTF1bMV0udHlwZTtpZihTPT09ImxpbmVFbmRpbmcifHxTPT09ImxpbmVQcmVmaXgiKUwtLTtlbHNlIGJyZWFrfWxldCBrPUw+LTE/ci5ldmVudHNbTF1bMV0udHlwZTpudWxsLE49az09PSJ0YWJsZUhlYWQifHxrPT09InRhYmxlUm93Ij96OmY7cmV0dXJuIE49PT16JiZyLnBhcnNlci5sYXp5W3Iubm93KCkubGluZV0/YShIKTpOKEgpfWZ1bmN0aW9uIGYoSCl7cmV0dXJuIHQuZW50ZXIoInRhYmxlSGVhZCIpLHQuZW50ZXIoInRhYmxlUm93IiksYyhIKX1mdW5jdGlvbiBjKEgpe3JldHVybiBIPT09MTI0fHwocz0hMCxvKz0xKSx1KEgpfWZ1bmN0aW9uIHUoSCl7cmV0dXJuIEg9PT1udWxsP2EoSCk6UGUoSCk/bz4xPyhvPTAsci5pbnRlcnJ1cHQ9ITAsdC5leGl0KCJ0YWJsZVJvdyIpLHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoSCksdC5leGl0KCJsaW5lRW5kaW5nIiksZyk6YShIKTpHZShIKT9KZSh0LHUsIndoaXRlc3BhY2UiKShIKToobys9MSxzJiYocz0hMSxpKz0xKSxIPT09MTI0Pyh0LmVudGVyKCJ0YWJsZUNlbGxEaXZpZGVyIiksdC5jb25zdW1lKEgpLHQuZXhpdCgidGFibGVDZWxsRGl2aWRlciIpLHM9ITAsdSk6KHQuZW50ZXIoImRhdGEiKSxkKEgpKSl9ZnVuY3Rpb24gZChIKXtyZXR1cm4gSD09PW51bGx8fEg9PT0xMjR8fHd0KEgpPyh0LmV4aXQoImRhdGEiKSx1KEgpKToodC5jb25zdW1lKEgpLEg9PT05Mj9oOmQpfWZ1bmN0aW9uIGgoSCl7cmV0dXJuIEg9PT05Mnx8SD09PTEyND8odC5jb25zdW1lKEgpLGQpOmQoSCl9ZnVuY3Rpb24gZyhIKXtyZXR1cm4gci5pbnRlcnJ1cHQ9ITEsci5wYXJzZXIubGF6eVtyLm5vdygpLmxpbmVdP2EoSCk6KHQuZW50ZXIoInRhYmxlRGVsaW1pdGVyUm93Iikscz0hMSxHZShIKT9KZSh0LGIsImxpbmVQcmVmaXgiLHIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkoSCk6YihIKSl9ZnVuY3Rpb24gYihIKXtyZXR1cm4gSD09PTQ1fHxIPT09NTg/bShIKTpIPT09MTI0PyhzPSEwLHQuZW50ZXIoInRhYmxlQ2VsbERpdmlkZXIiKSx0LmNvbnN1bWUoSCksdC5leGl0KCJ0YWJsZUNlbGxEaXZpZGVyIikseCk6QyhIKX1mdW5jdGlvbiB4KEgpe3JldHVybiBHZShIKT9KZSh0LG0sIndoaXRlc3BhY2UiKShIKTptKEgpfWZ1bmN0aW9uIG0oSCl7cmV0dXJuIEg9PT01OD8obys9MSxzPSEwLHQuZW50ZXIoInRhYmxlRGVsaW1pdGVyTWFya2VyIiksdC5jb25zdW1lKEgpLHQuZXhpdCgidGFibGVEZWxpbWl0ZXJNYXJrZXIiKSx2KTpIPT09NDU/KG8rPTEsdihIKSk6SD09PW51bGx8fFBlKEgpP0UoSCk6QyhIKX1mdW5jdGlvbiB2KEgpe3JldHVybiBIPT09NDU/KHQuZW50ZXIoInRhYmxlRGVsaW1pdGVyRmlsbGVyIikseShIKSk6QyhIKX1mdW5jdGlvbiB5KEgpe3JldHVybiBIPT09NDU/KHQuY29uc3VtZShIKSx5KTpIPT09NTg/KHM9ITAsdC5leGl0KCJ0YWJsZURlbGltaXRlckZpbGxlciIpLHQuZW50ZXIoInRhYmxlRGVsaW1pdGVyTWFya2VyIiksdC5jb25zdW1lKEgpLHQuZXhpdCgidGFibGVEZWxpbWl0ZXJNYXJrZXIiKSx3KToodC5leGl0KCJ0YWJsZURlbGltaXRlckZpbGxlciIpLHcoSCkpfWZ1bmN0aW9uIHcoSCl7cmV0dXJuIEdlKEgpP0plKHQsRSwid2hpdGVzcGFjZSIpKEgpOkUoSCl9ZnVuY3Rpb24gRShIKXtyZXR1cm4gSD09PTEyND9iKEgpOkg9PT1udWxsfHxQZShIKT8hc3x8aSE9PW8/QyhIKToodC5leGl0KCJ0YWJsZURlbGltaXRlclJvdyIpLHQuZXhpdCgidGFibGVIZWFkIiksZShIKSk6QyhIKX1mdW5jdGlvbiBDKEgpe3JldHVybiBhKEgpfWZ1bmN0aW9uIHooSCl7cmV0dXJuIHQuZW50ZXIoInRhYmxlUm93IiksUChIKX1mdW5jdGlvbiBQKEgpe3JldHVybiBIPT09MTI0Pyh0LmVudGVyKCJ0YWJsZUNlbGxEaXZpZGVyIiksdC5jb25zdW1lKEgpLHQuZXhpdCgidGFibGVDZWxsRGl2aWRlciIpLFApOkg9PT1udWxsfHxQZShIKT8odC5leGl0KCJ0YWJsZVJvdyIpLGUoSCkpOkdlKEgpP0plKHQsUCwid2hpdGVzcGFjZSIpKEgpOih0LmVudGVyKCJkYXRhIiksXyhIKSl9ZnVuY3Rpb24gXyhIKXtyZXR1cm4gSD09PW51bGx8fEg9PT0xMjR8fHd0KEgpPyh0LmV4aXQoImRhdGEiKSxQKEgpKToodC5jb25zdW1lKEgpLEg9PT05Mj8kOl8pfWZ1bmN0aW9uICQoSCl7cmV0dXJuIEg9PT05Mnx8SD09PTEyND8odC5jb25zdW1lKEgpLF8pOl8oSCl9fWZ1bmN0aW9uIGNlMSh0LGUpe2xldCBhPS0xLHI9ITAsaT0wLG89WzAsMCwwLDBdLHM9WzAsMCwwLDBdLGw9ITEsZj0wLGMsdSxkLGg9bmV3IEVIO2Zvcig7KythPHQubGVuZ3RoOyl7bGV0IGc9dFthXSxiPWdbMV07Z1swXT09PSJlbnRlciI/Yi50eXBlPT09InRhYmxlSGVhZCI/KGw9ITEsZiE9PTAmJihzS2UoaCxlLGYsYyx1KSx1PXZvaWQgMCxmPTApLGM9e3R5cGU6InRhYmxlIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGIuc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGIuZW5kKX0saC5hZGQoYSwwLFtbImVudGVyIixjLGVdXSkpOmIudHlwZT09PSJ0YWJsZVJvdyJ8fGIudHlwZT09PSJ0YWJsZURlbGltaXRlclJvdyI/KHI9ITAsZD12b2lkIDAsbz1bMCwwLDAsMF0scz1bMCxhKzEsMCwwXSxsJiYobD0hMSx1PXt0eXBlOiJ0YWJsZUJvZHkiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sYi5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30sYi5lbmQpfSxoLmFkZChhLDAsW1siZW50ZXIiLHUsZV1dKSksaT1iLnR5cGU9PT0idGFibGVEZWxpbWl0ZXJSb3ciPzI6dT8zOjEpOmkmJihiLnR5cGU9PT0iZGF0YSJ8fGIudHlwZT09PSJ0YWJsZURlbGltaXRlck1hcmtlciJ8fGIudHlwZT09PSJ0YWJsZURlbGltaXRlckZpbGxlciIpPyhyPSExLHNbMl09PT0wJiYob1sxXSE9PTAmJihzWzBdPXNbMV0sZD1OSChoLGUsbyxpLHZvaWQgMCxkKSxvPVswLDAsMCwwXSksc1syXT1hKSk6Yi50eXBlPT09InRhYmxlQ2VsbERpdmlkZXIiJiYocj9yPSExOihvWzFdIT09MCYmKHNbMF09c1sxXSxkPU5IKGgsZSxvLGksdm9pZCAwLGQpKSxvPXMscz1bb1sxXSxhLDAsMF0pKTpiLnR5cGU9PT0idGFibGVIZWFkIj8obD0hMCxmPWEpOmIudHlwZT09PSJ0YWJsZVJvdyJ8fGIudHlwZT09PSJ0YWJsZURlbGltaXRlclJvdyI/KGY9YSxvWzFdIT09MD8oc1swXT1zWzFdLGQ9TkgoaCxlLG8saSxhLGQpKTpzWzFdIT09MCYmKGQ9TkgoaCxlLHMsaSxhLGQpKSxpPTApOmkmJihiLnR5cGU9PT0iZGF0YSJ8fGIudHlwZT09PSJ0YWJsZURlbGltaXRlck1hcmtlciJ8fGIudHlwZT09PSJ0YWJsZURlbGltaXRlckZpbGxlciIpJiYoc1szXT1hKX1mb3IoZiE9PTAmJnNLZShoLGUsZixjLHUpLGguY29uc3VtZShlLmV2ZW50cyksYT0tMTsrK2E8ZS5ldmVudHMubGVuZ3RoOyl7bGV0IGc9ZS5ldmVudHNbYV07Z1swXT09PSJlbnRlciImJmdbMV0udHlwZT09PSJ0YWJsZSImJihnWzFdLl9hbGlnbj1pS2UoZS5ldmVudHMsYSkpfXJldHVybiB0fWZ1bmN0aW9uIE5IKHQsZSxhLHIsaSxvKXtsZXQgcz1yPT09MT8idGFibGVIZWFkZXIiOnI9PT0yPyJ0YWJsZURlbGltaXRlciI6InRhYmxlRGF0YSIsbD0idGFibGVDb250ZW50IjthWzBdIT09MCYmKG8uZW5kPU9iamVjdC5hc3NpZ24oe30sTDYoZS5ldmVudHMsYVswXSkpLHQuYWRkKGFbMF0sMCxbWyJleGl0IixvLGVdXSkpO2xldCBmPUw2KGUuZXZlbnRzLGFbMV0pO2lmKG89e3R5cGU6cyxzdGFydDpPYmplY3QuYXNzaWduKHt9LGYpLGVuZDpPYmplY3QuYXNzaWduKHt9LGYpfSx0LmFkZChhWzFdLDAsW1siZW50ZXIiLG8sZV1dKSxhWzJdIT09MCl7bGV0IGM9TDYoZS5ldmVudHMsYVsyXSksdT1MNihlLmV2ZW50cyxhWzNdKSxkPXt0eXBlOmwsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxjKSxlbmQ6T2JqZWN0LmFzc2lnbih7fSx1KX07aWYodC5hZGQoYVsyXSwwLFtbImVudGVyIixkLGVdXSksciE9PTIpe2xldCBoPWUuZXZlbnRzW2FbMl1dLGc9ZS5ldmVudHNbYVszXV07aWYoaFsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxnWzFdLmVuZCksaFsxXS50eXBlPSJjaHVua1RleHQiLGhbMV0uY29udGVudFR5cGU9InRleHQiLGFbM10+YVsyXSsxKXtsZXQgYj1hWzJdKzEseD1hWzNdLWFbMl0tMTt0LmFkZChiLHgsW10pfX10LmFkZChhWzNdKzEsMCxbWyJleGl0IixkLGVdXSl9cmV0dXJuIGkhPT12b2lkIDAmJihvLmVuZD1PYmplY3QuYXNzaWduKHt9LEw2KGUuZXZlbnRzLGkpKSx0LmFkZChpLDAsW1siZXhpdCIsbyxlXV0pLG89dm9pZCAwKSxvfWZ1bmN0aW9uIHNLZSh0LGUsYSxyLGkpe2xldCBvPVtdLHM9TDYoZS5ldmVudHMsYSk7aSYmKGkuZW5kPU9iamVjdC5hc3NpZ24oe30scyksby5wdXNoKFsiZXhpdCIsaSxlXSkpLHIuZW5kPU9iamVjdC5hc3NpZ24oe30scyksby5wdXNoKFsiZXhpdCIscixlXSksdC5hZGQoYSsxLDAsbyl9ZnVuY3Rpb24gTDYodCxlKXtsZXQgYT10W2VdLHI9YVswXT09PSJlbnRlciI/InN0YXJ0IjoiZW5kIjtyZXR1cm4gYVsxXVtyXX12YXIgbktlPW4oKCk9PntDMSgpO2t0KCk7cktlKCk7b0tlKCl9KTt2YXIgbEtlPW4oKCk9PnthS2UoKTtuS2UoKX0pO2Z1bmN0aW9uIGZKKCl7cmV0dXJue2V4aXQ6e2h0bWxGbG93RGF0YSh0KXtkS2UuY2FsbCh0aGlzLHQsY0tlKX0saHRtbFRleHREYXRhKHQpe2RLZS5jYWxsKHRoaXMsdCxkZTEpfX19fWZ1bmN0aW9uIGRLZSh0LGUpe2xldCBhPXRoaXMuc2xpY2VTZXJpYWxpemUodCk7dGhpcy5vcHRpb25zLmFsbG93RGFuZ2Vyb3VzSHRtbCYmKGE9YS5yZXBsYWNlKGUsIiZsdDskMSQyIikpLHRoaXMucmF3KHRoaXMuZW5jb2RlKGEpKX12YXIgY0tlLGRlMSxmS2U9bigoKT0+e2NLZT0vPChcLz8pKGlmcmFtZXxub2VtYmVkfG5vZnJhbWVzfHBsYWludGV4dHxzY3JpcHR8c3R5bGV8dGl0bGV8dGV4dGFyZWF8eG1wKSg/PVtcdFxuXGZcciAvPl0pL2dpLGRlMT1uZXcgUmVnRXhwKCJeIitjS2Uuc291cmNlLCJpIil9KTt2YXIgdUtlPW4oKCk9PntmS2UoKX0pO2Z1bmN0aW9uIHVKKCl7cmV0dXJue2VudGVyOnt0YXNrTGlzdENoZWNrKCl7dGhpcy50YWcoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgZGlzYWJsZWQ9IiIgJyl9fSxleGl0Ont0YXNrTGlzdENoZWNrKCl7dGhpcy50YWcoIi8+Iil9LHRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQoKXt0aGlzLnRhZygnY2hlY2tlZD0iIiAnKX19fX12YXIgcEtlPW4oKCk9Pnt9KTtmdW5jdGlvbiBwSigpe3JldHVybnt0ZXh0Ons5MTpmZTF9fX1mdW5jdGlvbiB1ZTEodCxlLGEpe2xldCByPXRoaXM7cmV0dXJuIGk7ZnVuY3Rpb24gaShmKXtyZXR1cm4gci5wcmV2aW91cyE9PW51bGx8fCFyLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW0/YShmKToodC5lbnRlcigidGFza0xpc3RDaGVjayIpLHQuZW50ZXIoInRhc2tMaXN0Q2hlY2tNYXJrZXIiKSx0LmNvbnN1bWUoZiksdC5leGl0KCJ0YXNrTGlzdENoZWNrTWFya2VyIiksbyl9ZnVuY3Rpb24gbyhmKXtyZXR1cm4gd3QoZik/KHQuZW50ZXIoInRhc2tMaXN0Q2hlY2tWYWx1ZVVuY2hlY2tlZCIpLHQuY29uc3VtZShmKSx0LmV4aXQoInRhc2tMaXN0Q2hlY2tWYWx1ZVVuY2hlY2tlZCIpLHMpOmY9PT04OHx8Zj09PTEyMD8odC5lbnRlcigidGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCIpLHQuY29uc3VtZShmKSx0LmV4aXQoInRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQiKSxzKTphKGYpfWZ1bmN0aW9uIHMoZil7cmV0dXJuIGY9PT05Mz8odC5lbnRlcigidGFza0xpc3RDaGVja01hcmtlciIpLHQuY29uc3VtZShmKSx0LmV4aXQoInRhc2tMaXN0Q2hlY2tNYXJrZXIiKSx0LmV4aXQoInRhc2tMaXN0Q2hlY2siKSxsKTphKGYpfWZ1bmN0aW9uIGwoZil7cmV0dXJuIFBlKGYpP2UoZik6R2UoZik/dC5jaGVjayh7dG9rZW5pemU6cGUxfSxlLGEpKGYpOmEoZil9fWZ1bmN0aW9uIHBlMSh0LGUsYSl7cmV0dXJuIEplKHQsciwid2hpdGVzcGFjZSIpO2Z1bmN0aW9uIHIoaSl7cmV0dXJuIGk9PT1udWxsP2EoaSk6ZShpKX19dmFyIGZlMSxoS2U9bigoKT0+e0MxKCk7a3QoKTtmZTE9e25hbWU6InRhc2tsaXN0Q2hlY2siLHRva2VuaXplOnVlMX19KTt2YXIgbUtlPW4oKCk9PntwS2UoKTtoS2UoKX0pO2Z1bmN0aW9uIGdLZSh0KXtyZXR1cm4geEgoW0lLKCksaUooKSxuSih0KSxkSigpLHBKKCldKX1mdW5jdGlvbiBDSzEodCl7cmV0dXJuIGJIKFtCSygpLG9KKHQpLHNKKCksY0ooKSxmSigpLHVKKCldKX12YXIgeEtlPW4oKCk9Pnt2SCgpO1NRZSgpO0tRZSgpO3RLZSgpO2xLZSgpO3VLZSgpO21LZSgpfSk7ZnVuY3Rpb24gVDYodCl7bGV0IGU9dGhpcyxhPXR8fGhlMSxyPWUuZGF0YSgpLGk9ci5taWNyb21hcmtFeHRlbnNpb25zfHwoci5taWNyb21hcmtFeHRlbnNpb25zPVtdKSxvPXIuZnJvbU1hcmtkb3duRXh0ZW5zaW9uc3x8KHIuZnJvbU1hcmtkb3duRXh0ZW5zaW9ucz1bXSkscz1yLnRvTWFya2Rvd25FeHRlbnNpb25zfHwoci50b01hcmtkb3duRXh0ZW5zaW9ucz1bXSk7aS5wdXNoKGdLZShhKSksby5wdXNoKCRLKCkpLHMucHVzaChESyhhKSl9dmFyIGhlMSxiS2U9bigoKT0+e2hRZSgpO3hLZSgpO2hlMT17fX0pO3ZhciB2S2U9bigoKT0+e2JLZSgpfSk7ZnVuY3Rpb24gaEoodCl7bGV0IGU9dHx8e30sYT0hMCxyPXt9LGk9W1tdXSxvPVtdLHM9W10sZj1iSChbe2VudGVyOntibG9ja1F1b3RlOlQsY29kZUZlbmNlZDphZSxjb2RlRmVuY2VkRmVuY2VJbmZvOm0sY29kZUZlbmNlZEZlbmNlTWV0YTptLGNvZGVJbmRlbnRlZDp6ZSxjb2RlVGV4dDpRLGNvbnRlbnQ6JGUsZGVmaW5pdGlvbjpPZSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6QixkZWZpbml0aW9uTGFiZWxTdHJpbmc6bSxkZWZpbml0aW9uVGl0bGVTdHJpbmc6bSxlbXBoYXNpczp6dCxodG1sRmxvdzpIZSxodG1sVGV4dDppdCxpbWFnZTpOZSxsYWJlbDptLGxpbms6UmUsbGlzdEl0ZW1NYXJrZXI6TCxsaXN0SXRlbVZhbHVlOkgsbGlzdE9yZGVyZWQ6XyxsaXN0VW5vcmRlcmVkOiQscGFyYWdyYXBoOkEscmVmZXJlbmNlOm0scmVzb3VyY2U6RyxyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOmoscmVzb3VyY2VUaXRsZVN0cmluZzptLHNldGV4dEhlYWRpbmc6cmUsc3Ryb25nOnF0fSxleGl0OnthdHhIZWFkaW5nOkVlLGF0eEhlYWRpbmdTZXF1ZW5jZTpuZSxhdXRvbGlua0VtYWlsOkpyLGF1dG9saW5rUHJvdG9jb2w6S3IsYmxvY2tRdW90ZTpSLGNoYXJhY3RlckVzY2FwZVZhbHVlOlosY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6bjEsY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYzpuMSxjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZTp2YSxjb2RlRmVuY2VkOlcsY29kZUZlbmNlZEZlbmNlOlNlLGNvZGVGZW5jZWRGZW5jZUluZm86Vixjb2RlRmVuY2VkRmVuY2VNZXRhOlAsY29kZUZsb3dWYWx1ZTpkZSxjb2RlSW5kZW50ZWQ6Vyxjb2RlVGV4dDpLLGNvZGVUZXh0RGF0YTpaLGRhdGE6WixkZWZpbml0aW9uOnllLGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzpvZSxkZWZpbml0aW9uTGFiZWxTdHJpbmc6VSxkZWZpbml0aW9uVGl0bGVTdHJpbmc6dmUsZW1waGFzaXM6YmUsaGFyZEJyZWFrRXNjYXBlOkFlLGhhcmRCcmVha1RyYWlsaW5nOkFlLGh0bWxGbG93Ok10LGh0bWxGbG93RGF0YTpaLGh0bWxUZXh0Ok10LGh0bWxUZXh0RGF0YTpaLGltYWdlOkRlLGxhYmVsOkksbGFiZWxUZXh0OlgsbGluZUVuZGluZzpKLGxpbms6RGUsbGlzdE9yZGVyZWQ6ayxsaXN0VW5vcmRlcmVkOk4scGFyYWdyYXBoOkYscmVmZXJlbmNlOlAscmVmZXJlbmNlU3RyaW5nOk8scmVzb3VyY2U6UCxyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOnNlLHJlc291cmNlVGl0bGVTdHJpbmc6a2Usc2V0ZXh0SGVhZGluZzp1ZSxzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOnJ0LHNldGV4dEhlYWRpbmdUZXh0OmdlLHN0cm9uZzpvdCx0aGVtYXRpY0JyZWFrOm50fX0sLi4uZS5odG1sRXh0ZW5zaW9uc3x8W11dKSxjPXtkZWZpbml0aW9uczpyLHRpZ2h0U3RhY2s6c30sdT17YnVmZmVyOm0sZW5jb2RlOnosZ2V0RGF0YTp4LGxpbmVFbmRpbmdJZk5lZWRlZDpDLG9wdGlvbnM6ZSxyYXc6dyxyZXN1bWU6dixzZXREYXRhOmIsdGFnOnl9LGQ9ZS5kZWZhdWx0TGluZUVuZGluZztyZXR1cm4gaDtmdW5jdGlvbiBoKFRlKXtsZXQgamU9LTEsZzE9MCxLMT1bXSxmMj1bXSwkMj1bXTtmb3IoOysramU8VGUubGVuZ3RoOykhZCYmKFRlW2plXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxUZVtqZV1bMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiKSYmKGQ9VGVbamVdWzJdLnNsaWNlU2VyaWFsaXplKFRlW2plXVsxXSkpLChUZVtqZV1bMV0udHlwZT09PSJsaXN0T3JkZXJlZCJ8fFRlW2plXVsxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQiKSYmKFRlW2plXVswXT09PSJlbnRlciI/SzEucHVzaChqZSk6ZyhUZS5zbGljZShLMS5wb3AoKSxqZSkpKSxUZVtqZV1bMV0udHlwZT09PSJkZWZpbml0aW9uIiYmKFRlW2plXVswXT09PSJlbnRlciI/KCQyPUQxKCQyLFRlLnNsaWNlKGcxLGplKSksZzE9amUpOihmMj1EMShmMixUZS5zbGljZShnMSxqZSsxKSksZzE9amUrMSkpO2YyPUQxKGYyLCQyKSxmMj1EMShmMixUZS5zbGljZShnMSkpLGplPS0xO2xldCB1Mj1mMjtmb3IoZi5lbnRlci5udWxsJiZmLmVudGVyLm51bGwuY2FsbCh1KTsrK2plPFRlLmxlbmd0aDspe2xldCBpbz1mW3UyW2plXVswXV0sb289dTJbamVdWzFdLnR5cGUsc289aW9bb29dO3lLZS5jYWxsKGlvLG9vKSYmc28mJnNvLmNhbGwoe3NsaWNlU2VyaWFsaXplOnUyW2plXVsyXS5zbGljZVNlcmlhbGl6ZSwuLi51fSx1MltqZV1bMV0pfXJldHVybiBmLmV4aXQubnVsbCYmZi5leGl0Lm51bGwuY2FsbCh1KSxpWzBdLmpvaW4oIiIpfWZ1bmN0aW9uIGcoVGUpe2xldCBqZT1UZS5sZW5ndGgsZzE9MCxLMT0wLGYyPSExLCQyO2Zvcig7KytnMTxqZTspe2xldCB1Mj1UZVtnMV07aWYodTJbMV0uX2NvbnRhaW5lcikkMj12b2lkIDAsdTJbMF09PT0iZW50ZXIiP0sxKys6SzEtLTtlbHNlIHN3aXRjaCh1MlsxXS50eXBlKXtjYXNlImxpc3RJdGVtUHJlZml4Ijp7dTJbMF09PT0iZXhpdCImJigkMj0hMCk7YnJlYWt9Y2FzZSJsaW5lUHJlZml4IjpicmVhaztjYXNlImxpbmVFbmRpbmdCbGFuayI6e3UyWzBdPT09ImVudGVyIiYmIUsxJiYoJDI/JDI9dm9pZCAwOmYyPSEwKTticmVha31kZWZhdWx0OiQyPXZvaWQgMH19VGVbMF1bMV0uX2xvb3NlPWYyfWZ1bmN0aW9uIGIoVGUsamUpe2NbVGVdPWplfWZ1bmN0aW9uIHgoVGUpe3JldHVybiBjW1RlXX1mdW5jdGlvbiBtKCl7aS5wdXNoKFtdKX1mdW5jdGlvbiB2KCl7cmV0dXJuIGkucG9wKCkuam9pbigiIil9ZnVuY3Rpb24geShUZSl7YSYmKGIoImxhc3RXYXNUYWciLCEwKSxpW2kubGVuZ3RoLTFdLnB1c2goVGUpKX1mdW5jdGlvbiB3KFRlKXtiKCJsYXN0V2FzVGFnIiksaVtpLmxlbmd0aC0xXS5wdXNoKFRlKX1mdW5jdGlvbiBFKCl7dyhkfHxgCmApfWZ1bmN0aW9uIEMoKXtsZXQgVGU9aVtpLmxlbmd0aC0xXSxqZT1UZVtUZS5sZW5ndGgtMV0sZzE9amU/amUuY2hhckNvZGVBdChqZS5sZW5ndGgtMSk6bnVsbDtnMT09PTEwfHxnMT09PTEzfHxnMT09PW51bGx8fEUoKX1mdW5jdGlvbiB6KFRlKXtyZXR1cm4geCgiaWdub3JlRW5jb2RlIik/VGU6eUgoVGUpfWZ1bmN0aW9uIFAoKXt2KCl9ZnVuY3Rpb24gXyhUZSl7cy5wdXNoKCFUZS5fbG9vc2UpLEMoKSx5KCI8b2wiKSxiKCJleHBlY3RGaXJzdEl0ZW0iLCEwKX1mdW5jdGlvbiAkKFRlKXtzLnB1c2goIVRlLl9sb29zZSksQygpLHkoIjx1bCIpLGIoImV4cGVjdEZpcnN0SXRlbSIsITApfWZ1bmN0aW9uIEgoVGUpe2lmKHgoImV4cGVjdEZpcnN0SXRlbSIpKXtsZXQgamU9TnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUoVGUpLDEwKTtqZSE9PTEmJnkoJyBzdGFydD0iJyt6KFN0cmluZyhqZSkpKyciJyl9fWZ1bmN0aW9uIEwoKXt4KCJleHBlY3RGaXJzdEl0ZW0iKT95KCI+Iik6UygpLEMoKSx5KCI8bGk+IiksYigiZXhwZWN0Rmlyc3RJdGVtIiksYigibGFzdFdhc1RhZyIpfWZ1bmN0aW9uIGsoKXtTKCkscy5wb3AoKSxFKCkseSgiPC9vbD4iKX1mdW5jdGlvbiBOKCl7UygpLHMucG9wKCksRSgpLHkoIjwvdWw+Iil9ZnVuY3Rpb24gUygpe3goImxhc3RXYXNUYWciKSYmIXgoInNsdXJwQWxsTGluZUVuZGluZ3MiKSYmQygpLHkoIjwvbGk+IiksYigic2x1cnBBbGxMaW5lRW5kaW5ncyIpfWZ1bmN0aW9uIFQoKXtzLnB1c2goITEpLEMoKSx5KCI8YmxvY2txdW90ZT4iKX1mdW5jdGlvbiBSKCl7cy5wb3AoKSxDKCkseSgiPC9ibG9ja3F1b3RlPiIpLGIoInNsdXJwQWxsTGluZUVuZGluZ3MiKX1mdW5jdGlvbiBBKCl7c1tzLmxlbmd0aC0xXXx8KEMoKSx5KCI8cD4iKSksYigic2x1cnBBbGxMaW5lRW5kaW5ncyIpfWZ1bmN0aW9uIEYoKXtzW3MubGVuZ3RoLTFdP2IoInNsdXJwQWxsTGluZUVuZGluZ3MiLCEwKTp5KCI8L3A+Iil9ZnVuY3Rpb24gYWUoKXtDKCkseSgiPHByZT48Y29kZSIpLGIoImZlbmNlc0NvdW50IiwwKX1mdW5jdGlvbiBWKCl7bGV0IFRlPXYoKTt5KCcgY2xhc3M9Imxhbmd1YWdlLScrVGUrJyInKX1mdW5jdGlvbiBTZSgpe2xldCBUZT14KCJmZW5jZXNDb3VudCIpfHwwO1RlfHwoeSgiPiIpLGIoInNsdXJwT25lTGluZUVuZGluZyIsITApKSxiKCJmZW5jZXNDb3VudCIsVGUrMSl9ZnVuY3Rpb24gemUoKXtDKCkseSgiPHByZT48Y29kZT4iKX1mdW5jdGlvbiBXKCl7bGV0IFRlPXgoImZlbmNlc0NvdW50Iik7VGUhPT12b2lkIDAmJlRlPDImJmMudGlnaHRTdGFjay5sZW5ndGg+MCYmIXgoImxhc3RXYXNUYWciKSYmRSgpLHgoImZsb3dDb2RlU2VlbkRhdGEiKSYmQygpLHkoIjwvY29kZT48L3ByZT4iKSxUZSE9PXZvaWQgMCYmVGU8MiYmQygpLGIoImZsb3dDb2RlU2VlbkRhdGEiKSxiKCJmZW5jZXNDb3VudCIpLGIoInNsdXJwT25lTGluZUVuZGluZyIpfWZ1bmN0aW9uIE5lKCl7by5wdXNoKHtpbWFnZTohMH0pLGE9dm9pZCAwfWZ1bmN0aW9uIFJlKCl7by5wdXNoKHt9KX1mdW5jdGlvbiBYKFRlKXtvW28ubGVuZ3RoLTFdLmxhYmVsSWQ9dGhpcy5zbGljZVNlcmlhbGl6ZShUZSl9ZnVuY3Rpb24gSSgpe29bby5sZW5ndGgtMV0ubGFiZWw9digpfWZ1bmN0aW9uIE8oVGUpe29bby5sZW5ndGgtMV0ucmVmZXJlbmNlSWQ9dGhpcy5zbGljZVNlcmlhbGl6ZShUZSl9ZnVuY3Rpb24gRygpe20oKSxvW28ubGVuZ3RoLTFdLmRlc3RpbmF0aW9uPSIifWZ1bmN0aW9uIGooKXttKCksYigiaWdub3JlRW5jb2RlIiwhMCl9ZnVuY3Rpb24gc2UoKXtvW28ubGVuZ3RoLTFdLmRlc3RpbmF0aW9uPXYoKSxiKCJpZ25vcmVFbmNvZGUiKX1mdW5jdGlvbiBrZSgpe29bby5sZW5ndGgtMV0udGl0bGU9digpfWZ1bmN0aW9uIERlKCl7bGV0IFRlPW8ubGVuZ3RoLTEsamU9b1tUZV0sZzE9amUucmVmZXJlbmNlSWR8fGplLmxhYmVsSWQsSzE9amUuZGVzdGluYXRpb249PT12b2lkIDA/clt3MShnMSldOmplO2ZvcihhPSEwO1RlLS07KWlmKG9bVGVdLmltYWdlKXthPXZvaWQgMDticmVha31qZS5pbWFnZT8oeSgnPGltZyBzcmM9IicrRnIoSzEuZGVzdGluYXRpb24sZS5hbGxvd0Rhbmdlcm91c1Byb3RvY29sP3ZvaWQgMDptZTEpKyciIGFsdD0iJyksdyhqZS5sYWJlbCkseSgnIicpKTp5KCc8YSBocmVmPSInK0ZyKEsxLmRlc3RpbmF0aW9uLGUuYWxsb3dEYW5nZXJvdXNQcm90b2NvbD92b2lkIDA6d0tlKSsnIicpLHkoSzEudGl0bGU/JyB0aXRsZT0iJytLMS50aXRsZSsnIic6IiIpLGplLmltYWdlP3koIiAvPiIpOih5KCI+IiksdyhqZS5sYWJlbCkseSgiPC9hPiIpKSxvLnBvcCgpfWZ1bmN0aW9uIE9lKCl7bSgpLG8ucHVzaCh7fSl9ZnVuY3Rpb24gVShUZSl7digpLG9bby5sZW5ndGgtMV0ubGFiZWxJZD10aGlzLnNsaWNlU2VyaWFsaXplKFRlKX1mdW5jdGlvbiBCKCl7bSgpLGIoImlnbm9yZUVuY29kZSIsITApfWZ1bmN0aW9uIG9lKCl7b1tvLmxlbmd0aC0xXS5kZXN0aW5hdGlvbj12KCksYigiaWdub3JlRW5jb2RlIil9ZnVuY3Rpb24gdmUoKXtvW28ubGVuZ3RoLTFdLnRpdGxlPXYoKX1mdW5jdGlvbiB5ZSgpe2xldCBUZT1vW28ubGVuZ3RoLTFdLGplPXcxKFRlLmxhYmVsSWQpO3YoKSx5S2UuY2FsbChyLGplKXx8KHJbamVdPW9bby5sZW5ndGgtMV0pLG8ucG9wKCl9ZnVuY3Rpb24gJGUoKXtiKCJzbHVycEFsbExpbmVFbmRpbmdzIiwhMCl9ZnVuY3Rpb24gbmUoVGUpe3goImhlYWRpbmdSYW5rIil8fChiKCJoZWFkaW5nUmFuayIsdGhpcy5zbGljZVNlcmlhbGl6ZShUZSkubGVuZ3RoKSxDKCkseSgiPGgiK3goImhlYWRpbmdSYW5rIikrIj4iKSl9ZnVuY3Rpb24gcmUoKXttKCksYigic2x1cnBBbGxMaW5lRW5kaW5ncyIpfWZ1bmN0aW9uIGdlKCl7Yigic2x1cnBBbGxMaW5lRW5kaW5ncyIsITApfWZ1bmN0aW9uIEVlKCl7eSgiPC9oIit4KCJoZWFkaW5nUmFuayIpKyI+IiksYigiaGVhZGluZ1JhbmsiKX1mdW5jdGlvbiBydChUZSl7YigiaGVhZGluZ1JhbmsiLHRoaXMuc2xpY2VTZXJpYWxpemUoVGUpLmNoYXJDb2RlQXQoMCk9PT02MT8xOjIpfWZ1bmN0aW9uIHVlKCl7bGV0IFRlPXYoKTtDKCkseSgiPGgiK3goImhlYWRpbmdSYW5rIikrIj4iKSx3KFRlKSx5KCI8L2giK3goImhlYWRpbmdSYW5rIikrIj4iKSxiKCJzbHVycEFsbExpbmVFbmRpbmdzIiksYigiaGVhZGluZ1JhbmsiKX1mdW5jdGlvbiBaKFRlKXt3KHoodGhpcy5zbGljZVNlcmlhbGl6ZShUZSkpKX1mdW5jdGlvbiBKKFRlKXtpZigheCgic2x1cnBBbGxMaW5lRW5kaW5ncyIpKXtpZih4KCJzbHVycE9uZUxpbmVFbmRpbmciKSl7Yigic2x1cnBPbmVMaW5lRW5kaW5nIik7cmV0dXJufWlmKHgoImluQ29kZVRleHQiKSl7dygiICIpO3JldHVybn13KHoodGhpcy5zbGljZVNlcmlhbGl6ZShUZSkpKX19ZnVuY3Rpb24gZGUoVGUpe3coeih0aGlzLnNsaWNlU2VyaWFsaXplKFRlKSkpLGIoImZsb3dDb2RlU2VlbkRhdGEiLCEwKX1mdW5jdGlvbiBBZSgpe3koIjxiciAvPiIpfWZ1bmN0aW9uIEhlKCl7QygpLGl0KCl9ZnVuY3Rpb24gTXQoKXtiKCJpZ25vcmVFbmNvZGUiKX1mdW5jdGlvbiBpdCgpe2UuYWxsb3dEYW5nZXJvdXNIdG1sJiZiKCJpZ25vcmVFbmNvZGUiLCEwKX1mdW5jdGlvbiB6dCgpe3koIjxlbT4iKX1mdW5jdGlvbiBxdCgpe3koIjxzdHJvbmc+Iil9ZnVuY3Rpb24gUSgpe2IoImluQ29kZVRleHQiLCEwKSx5KCI8Y29kZT4iKX1mdW5jdGlvbiBLKCl7YigiaW5Db2RlVGV4dCIpLHkoIjwvY29kZT4iKX1mdW5jdGlvbiBiZSgpe3koIjwvZW0+Iil9ZnVuY3Rpb24gb3QoKXt5KCI8L3N0cm9uZz4iKX1mdW5jdGlvbiBudCgpe0MoKSx5KCI8aHIgLz4iKX1mdW5jdGlvbiBuMShUZSl7YigiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIsVGUudHlwZSl9ZnVuY3Rpb24gdmEoVGUpe2xldCBqZT10aGlzLnNsaWNlU2VyaWFsaXplKFRlKSxnMT14KCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIik/QzYoamUseCgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpPT09ImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiPzEwOjE2KTpIbyhqZSk7dyh6KGcxKSksYigiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpfWZ1bmN0aW9uIEtyKFRlKXtsZXQgamU9dGhpcy5zbGljZVNlcmlhbGl6ZShUZSk7eSgnPGEgaHJlZj0iJytGcihqZSxlLmFsbG93RGFuZ2Vyb3VzUHJvdG9jb2w/dm9pZCAwOndLZSkrJyI+Jyksdyh6KGplKSkseSgiPC9hPiIpfWZ1bmN0aW9uIEpyKFRlKXtsZXQgamU9dGhpcy5zbGljZVNlcmlhbGl6ZShUZSk7eSgnPGEgaHJlZj0iJytGcigibWFpbHRvOiIramUpKyciPicpLHcoeihqZSkpLHkoIjwvYT4iKX19dmFyIHlLZSx3S2UsbWUxLG1KPW4oKCk9PntjZCgpO1ByKCk7dkgoKTtoSCgpO0ZLKCk7Um8oKTtPcigpO3lLZT17fS5oYXNPd25Qcm9wZXJ0eSx3S2U9L14oaHR0cHM/fGlyY3M/fG1haWx0b3x4bXBwKSQvaSxtZTE9L15odHRwcz8kL2l9KTtmdW5jdGlvbiBnZTEodCl7bGV0IGU9dC5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuY29udGVudEluaXRpYWwscixpKSxhO3JldHVybiBlO2Z1bmN0aW9uIHIobCl7aWYobD09PW51bGwpe3QuY29uc3VtZShsKTtyZXR1cm59cmV0dXJuIHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUobCksdC5leGl0KCJsaW5lRW5kaW5nIiksSmUodCxlLCJsaW5lUHJlZml4Iil9ZnVuY3Rpb24gaShsKXtyZXR1cm4gdC5lbnRlcigicGFyYWdyYXBoIiksbyhsKX1mdW5jdGlvbiBvKGwpe2xldCBmPXQuZW50ZXIoImNodW5rVGV4dCIse2NvbnRlbnRUeXBlOiJ0ZXh0IixwcmV2aW91czphfSk7cmV0dXJuIGEmJihhLm5leHQ9ZiksYT1mLHMobCl9ZnVuY3Rpb24gcyhsKXtpZihsPT09bnVsbCl7dC5leGl0KCJjaHVua1RleHQiKSx0LmV4aXQoInBhcmFncmFwaCIpLHQuY29uc3VtZShsKTtyZXR1cm59cmV0dXJuIFBlKGwpPyh0LmNvbnN1bWUobCksdC5leGl0KCJjaHVua1RleHQiKSxvKToodC5jb25zdW1lKGwpLHMpfX12YXIgTUtlLHpLZT1uKCgpPT57QzEoKTtrdCgpO01LZT17dG9rZW5pemU6Z2UxfX0pO2Z1bmN0aW9uIHhlMSh0KXtsZXQgZT10aGlzLGE9W10scj0wLGksbyxzO3JldHVybiBsO2Z1bmN0aW9uIGwodyl7aWYocjxhLmxlbmd0aCl7bGV0IEU9YVtyXTtyZXR1cm4gZS5jb250YWluZXJTdGF0ZT1FWzFdLHQuYXR0ZW1wdChFWzBdLmNvbnRpbnVhdGlvbixmLGMpKHcpfXJldHVybiBjKHcpfWZ1bmN0aW9uIGYodyl7aWYocisrLGUuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdyl7ZS5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMCxpJiZ5KCk7bGV0IEU9ZS5ldmVudHMubGVuZ3RoLEM9RSx6O2Zvcig7Qy0tOylpZihlLmV2ZW50c1tDXVswXT09PSJleGl0IiYmZS5ldmVudHNbQ11bMV0udHlwZT09PSJjaHVua0Zsb3ciKXt6PWUuZXZlbnRzW0NdWzFdLmVuZDticmVha312KHIpO2xldCBQPUU7Zm9yKDtQPGUuZXZlbnRzLmxlbmd0aDspZS5ldmVudHNbUF1bMV0uZW5kPXsuLi56fSxQKys7cmV0dXJuIFMxKGUuZXZlbnRzLEMrMSwwLGUuZXZlbnRzLnNsaWNlKEUpKSxlLmV2ZW50cy5sZW5ndGg9UCxjKHcpfXJldHVybiBsKHcpfWZ1bmN0aW9uIGModyl7aWYocj09PWEubGVuZ3RoKXtpZighaSlyZXR1cm4gaCh3KTtpZihpLmN1cnJlbnRDb25zdHJ1Y3QmJmkuY3VycmVudENvbnN0cnVjdC5jb25jcmV0ZSlyZXR1cm4gYih3KTtlLmludGVycnVwdD0hIShpLmN1cnJlbnRDb25zdHJ1Y3QmJiFpLl9nZm1UYWJsZUR5bmFtaWNJbnRlcnJ1cHRIYWNrKX1yZXR1cm4gZS5jb250YWluZXJTdGF0ZT17fSx0LmNoZWNrKGtLZSx1LGQpKHcpfWZ1bmN0aW9uIHUodyl7cmV0dXJuIGkmJnkoKSx2KHIpLGgodyl9ZnVuY3Rpb24gZCh3KXtyZXR1cm4gZS5wYXJzZXIubGF6eVtlLm5vdygpLmxpbmVdPXIhPT1hLmxlbmd0aCxzPWUubm93KCkub2Zmc2V0LGIodyl9ZnVuY3Rpb24gaCh3KXtyZXR1cm4gZS5jb250YWluZXJTdGF0ZT17fSx0LmF0dGVtcHQoa0tlLGcsYikodyl9ZnVuY3Rpb24gZyh3KXtyZXR1cm4gcisrLGEucHVzaChbZS5jdXJyZW50Q29uc3RydWN0LGUuY29udGFpbmVyU3RhdGVdKSxoKHcpfWZ1bmN0aW9uIGIodyl7aWYodz09PW51bGwpe2kmJnkoKSx2KDApLHQuY29uc3VtZSh3KTtyZXR1cm59cmV0dXJuIGk9aXx8ZS5wYXJzZXIuZmxvdyhlLm5vdygpKSx0LmVudGVyKCJjaHVua0Zsb3ciLHtfdG9rZW5pemVyOmksY29udGVudFR5cGU6ImZsb3ciLHByZXZpb3VzOm99KSx4KHcpfWZ1bmN0aW9uIHgodyl7aWYodz09PW51bGwpe20odC5leGl0KCJjaHVua0Zsb3ciKSwhMCksdigwKSx0LmNvbnN1bWUodyk7cmV0dXJufXJldHVybiBQZSh3KT8odC5jb25zdW1lKHcpLG0odC5leGl0KCJjaHVua0Zsb3ciKSkscj0wLGUuaW50ZXJydXB0PXZvaWQgMCxsKToodC5jb25zdW1lKHcpLHgpfWZ1bmN0aW9uIG0odyxFKXtsZXQgQz1lLnNsaWNlU3RyZWFtKHcpO2lmKEUmJkMucHVzaChudWxsKSx3LnByZXZpb3VzPW8sbyYmKG8ubmV4dD13KSxvPXcsaS5kZWZpbmVTa2lwKHcuc3RhcnQpLGkud3JpdGUoQyksZS5wYXJzZXIubGF6eVt3LnN0YXJ0LmxpbmVdKXtsZXQgej1pLmV2ZW50cy5sZW5ndGg7Zm9yKDt6LS07KWlmKGkuZXZlbnRzW3pdWzFdLnN0YXJ0Lm9mZnNldDxzJiYoIWkuZXZlbnRzW3pdWzFdLmVuZHx8aS5ldmVudHNbel1bMV0uZW5kLm9mZnNldD5zKSlyZXR1cm47bGV0IFA9ZS5ldmVudHMubGVuZ3RoLF89UCwkLEg7Zm9yKDtfLS07KWlmKGUuZXZlbnRzW19dWzBdPT09ImV4aXQiJiZlLmV2ZW50c1tfXVsxXS50eXBlPT09ImNodW5rRmxvdyIpe2lmKCQpe0g9ZS5ldmVudHNbX11bMV0uZW5kO2JyZWFrfSQ9ITB9Zm9yKHYociksej1QO3o8ZS5ldmVudHMubGVuZ3RoOyllLmV2ZW50c1t6XVsxXS5lbmQ9ey4uLkh9LHorKztTMShlLmV2ZW50cyxfKzEsMCxlLmV2ZW50cy5zbGljZShQKSksZS5ldmVudHMubGVuZ3RoPXp9fWZ1bmN0aW9uIHYodyl7bGV0IEU9YS5sZW5ndGg7Zm9yKDtFLS0gPnc7KXtsZXQgQz1hW0VdO2UuY29udGFpbmVyU3RhdGU9Q1sxXSxDWzBdLmV4aXQuY2FsbChlLHQpfWEubGVuZ3RoPXd9ZnVuY3Rpb24geSgpe2kud3JpdGUoW251bGxdKSxvPXZvaWQgMCxpPXZvaWQgMCxlLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3c9dm9pZCAwfX1mdW5jdGlvbiBiZTEodCxlLGEpe3JldHVybiBKZSh0LHQuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRvY3VtZW50LGUsYSksImxpbmVQcmVmaXgiLHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCl9dmFyIFNLZSxrS2UsQ0tlPW4oKCk9PntDMSgpO2t0KCk7UHIoKTtTS2U9e3Rva2VuaXplOnhlMX0sa0tlPXt0b2tlbml6ZTpiZTF9fSk7ZnVuY3Rpb24gdmUxKHQpe2xldCBlPXRoaXMsYT10LmF0dGVtcHQoQnIscix0LmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5mbG93SW5pdGlhbCxpLEplKHQsdC5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyxpLHQuYXR0ZW1wdChVSyxpKSksImxpbmVQcmVmaXgiKSkpO3JldHVybiBhO2Z1bmN0aW9uIHIobyl7aWYobz09PW51bGwpe3QuY29uc3VtZShvKTtyZXR1cm59cmV0dXJuIHQuZW50ZXIoImxpbmVFbmRpbmdCbGFuayIpLHQuY29uc3VtZShvKSx0LmV4aXQoImxpbmVFbmRpbmdCbGFuayIpLGUuY3VycmVudENvbnN0cnVjdD12b2lkIDAsYX1mdW5jdGlvbiBpKG8pe2lmKG89PT1udWxsKXt0LmNvbnN1bWUobyk7cmV0dXJufXJldHVybiB0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKG8pLHQuZXhpdCgibGluZUVuZGluZyIpLGUuY3VycmVudENvbnN0cnVjdD12b2lkIDAsYX19dmFyIExLZSxUS2U9bigoKT0+e0RIKCk7QzEoKTtrdCgpO0xLZT17dG9rZW5pemU6dmUxfX0pO2Z1bmN0aW9uIF9LZSh0KXtyZXR1cm57cmVzb2x2ZUFsbDpBS2UodD09PSJ0ZXh0Ij95ZTE6dm9pZCAwKSx0b2tlbml6ZTplfTtmdW5jdGlvbiBlKGEpe2xldCByPXRoaXMsaT10aGlzLnBhcnNlci5jb25zdHJ1Y3RzW3RdLG89YS5hdHRlbXB0KGkscyxsKTtyZXR1cm4gcztmdW5jdGlvbiBzKHUpe3JldHVybiBjKHUpP28odSk6bCh1KX1mdW5jdGlvbiBsKHUpe2lmKHU9PT1udWxsKXthLmNvbnN1bWUodSk7cmV0dXJufXJldHVybiBhLmVudGVyKCJkYXRhIiksYS5jb25zdW1lKHUpLGZ9ZnVuY3Rpb24gZih1KXtyZXR1cm4gYyh1KT8oYS5leGl0KCJkYXRhIiksbyh1KSk6KGEuY29uc3VtZSh1KSxmKX1mdW5jdGlvbiBjKHUpe2lmKHU9PT1udWxsKXJldHVybiEwO2xldCBkPWlbdV0saD0tMTtpZihkKWZvcig7KytoPGQubGVuZ3RoOyl7bGV0IGc9ZFtoXTtpZighZy5wcmV2aW91c3x8Zy5wcmV2aW91cy5jYWxsKHIsci5wcmV2aW91cykpcmV0dXJuITB9cmV0dXJuITF9fX1mdW5jdGlvbiBBS2UodCl7cmV0dXJuIGU7ZnVuY3Rpb24gZShhLHIpe2xldCBpPS0xLG87Zm9yKDsrK2k8PWEubGVuZ3RoOylvPT09dm9pZCAwP2FbaV0mJmFbaV1bMV0udHlwZT09PSJkYXRhIiYmKG89aSxpKyspOighYVtpXXx8YVtpXVsxXS50eXBlIT09ImRhdGEiKSYmKGkhPT1vKzImJihhW29dWzFdLmVuZD1hW2ktMV1bMV0uZW5kLGEuc3BsaWNlKG8rMixpLW8tMiksaT1vKzIpLG89dm9pZCAwKTtyZXR1cm4gdD90KGEscik6YX19ZnVuY3Rpb24geWUxKHQsZSl7bGV0IGE9MDtmb3IoOysrYTw9dC5sZW5ndGg7KWlmKChhPT09dC5sZW5ndGh8fHRbYV1bMV0udHlwZT09PSJsaW5lRW5kaW5nIikmJnRbYS0xXVsxXS50eXBlPT09ImRhdGEiKXtsZXQgcj10W2EtMV1bMV0saT1lLnNsaWNlU3RyZWFtKHIpLG89aS5sZW5ndGgscz0tMSxsPTAsZjtmb3IoO28tLTspe2xldCBjPWlbb107aWYodHlwZW9mIGM9PSJzdHJpbmciKXtmb3Iocz1jLmxlbmd0aDtjLmNoYXJDb2RlQXQocy0xKT09PTMyOylsKysscy0tO2lmKHMpYnJlYWs7cz0tMX1lbHNlIGlmKGM9PT0tMilmPSEwLGwrKztlbHNlIGlmKGMhPT0tMSl7bysrO2JyZWFrfX1pZihlLl9jb250ZW50VHlwZVRleHRUcmFpbGluZyYmYT09PXQubGVuZ3RoJiYobD0wKSxsKXtsZXQgYz17dHlwZTphPT09dC5sZW5ndGh8fGZ8fGw8Mj8ibGluZVN1ZmZpeCI6ImhhcmRCcmVha1RyYWlsaW5nIixzdGFydDp7X2J1ZmZlckluZGV4Om8/czpyLnN0YXJ0Ll9idWZmZXJJbmRleCtzLF9pbmRleDpyLnN0YXJ0Ll9pbmRleCtvLGxpbmU6ci5lbmQubGluZSxjb2x1bW46ci5lbmQuY29sdW1uLWwsb2Zmc2V0OnIuZW5kLm9mZnNldC1sfSxlbmQ6ey4uLnIuZW5kfX07ci5lbmQ9ey4uLmMuc3RhcnR9LHIuc3RhcnQub2Zmc2V0PT09ci5lbmQub2Zmc2V0P09iamVjdC5hc3NpZ24ocixjKToodC5zcGxpY2UoYSwwLFsiZW50ZXIiLGMsZV0sWyJleGl0IixjLGVdKSxhKz0yKX1hKyt9cmV0dXJuIHR9dmFyICRLZSxES2UsRUtlLGdKPW4oKCk9PnskS2U9e3Jlc29sdmVBbGw6QUtlKCl9LERLZT1fS2UoInN0cmluZyIpLEVLZT1fS2UoInRleHQiKX0pO3ZhciB4Sj17fTtldCh4Six7YXR0ZW50aW9uTWFya2VyczooKT0+VGUxLGNvbnRlbnRJbml0aWFsOigpPT5NZTEsZGlzYWJsZTooKT0+X2UxLGRvY3VtZW50OigpPT53ZTEsZmxvdzooKT0+a2UxLGZsb3dJbml0aWFsOigpPT56ZTEsaW5zaWRlU3BhbjooKT0+TGUxLHN0cmluZzooKT0+U2UxLHRleHQ6KCk9PkNlMX0pO3ZhciB3ZTEsTWUxLHplMSxrZTEsU2UxLENlMSxMZTEsVGUxLF9lMSxOS2U9bigoKT0+e0RIKCk7Z0ooKTt3ZTE9ezQyOmsyLDQzOmsyLDQ1OmsyLDQ4OmsyLDQ5OmsyLDUwOmsyLDUxOmsyLDUyOmsyLDUzOmsyLDU0OmsyLDU1OmsyLDU2OmsyLDU3OmsyLDYyOk1IfSxNZTE9ezkxOlpLfSx6ZTE9e1stMl06dWQsWy0xXTp1ZCwzMjp1ZH0sa2UxPXszNTpRSyw0Mjp4biw0NTpbJEgseG5dLDYwOkpLLDYxOiRILDk1OnhuLDk2OlNILDEyNjpTSH0sU2UxPXszODprSCw5Mjp6SH0sQ2UxPXtbLTVdOm1kLFstNF06bWQsWy0zXTptZCwzMzp0SiwzODprSCw0MjpmZCw2MDpbUkssZUpdLDkxOmFKLDkyOltYSyx6SF0sOTM6Z24sOTU6ZmQsOTY6SEt9LExlMT17bnVsbDpbZmQsJEtlXX0sVGUxPXtudWxsOls0Miw5NV19LF9lMT17bnVsbDpbXX19KTtmdW5jdGlvbiBQS2UodCxlLGEpe2xldCByPXtfYnVmZmVySW5kZXg6LTEsX2luZGV4OjAsbGluZTphJiZhLmxpbmV8fDEsY29sdW1uOmEmJmEuY29sdW1ufHwxLG9mZnNldDphJiZhLm9mZnNldHx8MH0saT17fSxvPVtdLHM9W10sbD1bXSxmPSEwLGM9e2F0dGVtcHQ6JChQKSxjaGVjazokKF8pLGNvbnN1bWU6RSxlbnRlcjpDLGV4aXQ6eixpbnRlcnJ1cHQ6JChfLHtpbnRlcnJ1cHQ6ITB9KX0sdT17Y29kZTpudWxsLGNvbnRhaW5lclN0YXRlOnt9LGRlZmluZVNraXA6dixldmVudHM6W10sbm93Om0scGFyc2VyOnQscHJldmlvdXM6bnVsbCxzbGljZVNlcmlhbGl6ZTpiLHNsaWNlU3RyZWFtOngsd3JpdGU6Z30sZD1lLnRva2VuaXplLmNhbGwodSxjKSxoO3JldHVybiBlLnJlc29sdmVBbGwmJm8ucHVzaChlKSx1O2Z1bmN0aW9uIGcoTil7cmV0dXJuIHM9RDEocyxOKSx5KCksc1tzLmxlbmd0aC0xXSE9PW51bGw/W106KEgoZSwwKSx1LmV2ZW50cz1xbyhvLHUuZXZlbnRzLHUpLHUuZXZlbnRzKX1mdW5jdGlvbiBiKE4sUyl7cmV0dXJuICRlMSh4KE4pLFMpfWZ1bmN0aW9uIHgoTil7cmV0dXJuIEFlMShzLE4pfWZ1bmN0aW9uIG0oKXtsZXR7X2J1ZmZlckluZGV4Ok4sX2luZGV4OlMsbGluZTpULGNvbHVtbjpSLG9mZnNldDpBfT1yO3JldHVybntfYnVmZmVySW5kZXg6TixfaW5kZXg6UyxsaW5lOlQsY29sdW1uOlIsb2Zmc2V0OkF9fWZ1bmN0aW9uIHYoTil7aVtOLmxpbmVdPU4uY29sdW1uLGsoKX1mdW5jdGlvbiB5KCl7bGV0IE47Zm9yKDtyLl9pbmRleDxzLmxlbmd0aDspe2xldCBTPXNbci5faW5kZXhdO2lmKHR5cGVvZiBTPT0ic3RyaW5nIilmb3IoTj1yLl9pbmRleCxyLl9idWZmZXJJbmRleDwwJiYoci5fYnVmZmVySW5kZXg9MCk7ci5faW5kZXg9PT1OJiZyLl9idWZmZXJJbmRleDxTLmxlbmd0aDspdyhTLmNoYXJDb2RlQXQoci5fYnVmZmVySW5kZXgpKTtlbHNlIHcoUyl9fWZ1bmN0aW9uIHcoTil7Zj12b2lkIDAsaD1OLGQ9ZChOKX1mdW5jdGlvbiBFKE4pe1BlKE4pPyhyLmxpbmUrKyxyLmNvbHVtbj0xLHIub2Zmc2V0Kz1OPT09LTM/MjoxLGsoKSk6TiE9PS0xJiYoci5jb2x1bW4rKyxyLm9mZnNldCsrKSxyLl9idWZmZXJJbmRleDwwP3IuX2luZGV4Kys6KHIuX2J1ZmZlckluZGV4Kyssci5fYnVmZmVySW5kZXg9PT1zW3IuX2luZGV4XS5sZW5ndGgmJihyLl9idWZmZXJJbmRleD0tMSxyLl9pbmRleCsrKSksdS5wcmV2aW91cz1OLGY9ITB9ZnVuY3Rpb24gQyhOLFMpe2xldCBUPVN8fHt9O3JldHVybiBULnR5cGU9TixULnN0YXJ0PW0oKSx1LmV2ZW50cy5wdXNoKFsiZW50ZXIiLFQsdV0pLGwucHVzaChUKSxUfWZ1bmN0aW9uIHooTil7bGV0IFM9bC5wb3AoKTtyZXR1cm4gUy5lbmQ9bSgpLHUuZXZlbnRzLnB1c2goWyJleGl0IixTLHVdKSxTfWZ1bmN0aW9uIFAoTixTKXtIKE4sUy5mcm9tKX1mdW5jdGlvbiBfKE4sUyl7Uy5yZXN0b3JlKCl9ZnVuY3Rpb24gJChOLFMpe3JldHVybiBUO2Z1bmN0aW9uIFQoUixBLEYpe2xldCBhZSxWLFNlLHplO3JldHVybiBBcnJheS5pc0FycmF5KFIpP05lKFIpOiJ0b2tlbml6ZSJpbiBSP05lKFtSXSk6VyhSKTtmdW5jdGlvbiBXKE8pe3JldHVybiBHO2Z1bmN0aW9uIEcoail7bGV0IHNlPWohPT1udWxsJiZPW2pdLGtlPWohPT1udWxsJiZPLm51bGwsRGU9Wy4uLkFycmF5LmlzQXJyYXkoc2UpP3NlOnNlP1tzZV06W10sLi4uQXJyYXkuaXNBcnJheShrZSk/a2U6a2U/W2tlXTpbXV07cmV0dXJuIE5lKERlKShqKX19ZnVuY3Rpb24gTmUoTyl7cmV0dXJuIGFlPU8sVj0wLE8ubGVuZ3RoPT09MD9GOlJlKE9bVl0pfWZ1bmN0aW9uIFJlKE8pe3JldHVybiBHO2Z1bmN0aW9uIEcoail7cmV0dXJuIHplPUwoKSxTZT1PLE8ucGFydGlhbHx8KHUuY3VycmVudENvbnN0cnVjdD1PKSxPLm5hbWUmJnUucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKE8ubmFtZSk/SShqKTpPLnRva2VuaXplLmNhbGwoUz9PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUodSksUyk6dSxjLFgsSSkoail9fWZ1bmN0aW9uIFgoTyl7cmV0dXJuIGY9ITAsTihTZSx6ZSksQX1mdW5jdGlvbiBJKE8pe3JldHVybiBmPSEwLHplLnJlc3RvcmUoKSwrK1Y8YWUubGVuZ3RoP1JlKGFlW1ZdKTpGfX19ZnVuY3Rpb24gSChOLFMpe04ucmVzb2x2ZUFsbCYmIW8uaW5jbHVkZXMoTikmJm8ucHVzaChOKSxOLnJlc29sdmUmJlMxKHUuZXZlbnRzLFMsdS5ldmVudHMubGVuZ3RoLVMsTi5yZXNvbHZlKHUuZXZlbnRzLnNsaWNlKFMpLHUpKSxOLnJlc29sdmVUbyYmKHUuZXZlbnRzPU4ucmVzb2x2ZVRvKHUuZXZlbnRzLHUpKX1mdW5jdGlvbiBMKCl7bGV0IE49bSgpLFM9dS5wcmV2aW91cyxUPXUuY3VycmVudENvbnN0cnVjdCxSPXUuZXZlbnRzLmxlbmd0aCxBPUFycmF5LmZyb20obCk7cmV0dXJue2Zyb206UixyZXN0b3JlOkZ9O2Z1bmN0aW9uIEYoKXtyPU4sdS5wcmV2aW91cz1TLHUuY3VycmVudENvbnN0cnVjdD1ULHUuZXZlbnRzLmxlbmd0aD1SLGw9QSxrKCl9fWZ1bmN0aW9uIGsoKXtyLmxpbmUgaW4gaSYmci5jb2x1bW48MiYmKHIuY29sdW1uPWlbci5saW5lXSxyLm9mZnNldCs9aVtyLmxpbmVdLTEpfX1mdW5jdGlvbiBBZTEodCxlKXtsZXQgYT1lLnN0YXJ0Ll9pbmRleCxyPWUuc3RhcnQuX2J1ZmZlckluZGV4LGk9ZS5lbmQuX2luZGV4LG89ZS5lbmQuX2J1ZmZlckluZGV4LHM7aWYoYT09PWkpcz1bdFthXS5zbGljZShyLG8pXTtlbHNle2lmKHM9dC5zbGljZShhLGkpLHI+LTEpe2xldCBsPXNbMF07dHlwZW9mIGw9PSJzdHJpbmciP3NbMF09bC5zbGljZShyKTpzLnNoaWZ0KCl9bz4wJiZzLnB1c2godFtpXS5zbGljZSgwLG8pKX1yZXR1cm4gc31mdW5jdGlvbiAkZTEodCxlKXtsZXQgYT0tMSxyPVtdLGk7Zm9yKDsrK2E8dC5sZW5ndGg7KXtsZXQgbz10W2FdLHM7aWYodHlwZW9mIG89PSJzdHJpbmciKXM9bztlbHNlIHN3aXRjaChvKXtjYXNlLTU6e3M9IlxyIjticmVha31jYXNlLTQ6e3M9YApgO2JyZWFrfWNhc2UtMzp7cz1gXHIKYDticmVha31jYXNlLTI6e3M9ZT8iICI6IgkiO2JyZWFrfWNhc2UtMTp7aWYoIWUmJmkpY29udGludWU7cz0iICI7YnJlYWt9ZGVmYXVsdDpzPVN0cmluZy5mcm9tQ2hhckNvZGUobyl9aT1vPT09LTIsci5wdXNoKHMpfXJldHVybiByLmpvaW4oIiIpfXZhciBJS2U9bigoKT0+e2t0KCk7UHIoKTtkZCgpfSk7ZnVuY3Rpb24gZ2QodCl7bGV0IHI9e2NvbnN0cnVjdHM6eEgoW3hKLC4uLih0fHx7fSkuZXh0ZW5zaW9uc3x8W11dKSxjb250ZW50OmkoTUtlKSxkZWZpbmVkOltdLGRvY3VtZW50OmkoU0tlKSxmbG93OmkoTEtlKSxsYXp5Ont9LHN0cmluZzppKERLZSksdGV4dDppKEVLZSl9O3JldHVybiByO2Z1bmN0aW9uIGkobyl7cmV0dXJuIHM7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gUEtlKHIsbyxsKX19fXZhciBiSj1uKCgpPT57dkgoKTt6S2UoKTtDS2UoKTtUS2UoKTtnSigpO05LZSgpO0lLZSgpfSk7ZnVuY3Rpb24geGQodCl7Zm9yKDshQ0godCk7KTtyZXR1cm4gdH12YXIgdko9bigoKT0+e1ZLKCl9KTtmdW5jdGlvbiBiZCgpe2xldCB0PTEsZT0iIixhPSEwLHI7cmV0dXJuIGk7ZnVuY3Rpb24gaShvLHMsbCl7bGV0IGY9W10sYyx1LGQsaCxnO2ZvcihvPWUrKHR5cGVvZiBvPT0ic3RyaW5nIj9vLnRvU3RyaW5nKCk6bmV3IFRleHREZWNvZGVyKHN8fHZvaWQgMCkuZGVjb2RlKG8pKSxkPTAsZT0iIixhJiYoby5jaGFyQ29kZUF0KDApPT09NjUyNzkmJmQrKyxhPXZvaWQgMCk7ZDxvLmxlbmd0aDspe2lmKEZLZS5sYXN0SW5kZXg9ZCxjPUZLZS5leGVjKG8pLGg9YyYmYy5pbmRleCE9PXZvaWQgMD9jLmluZGV4Om8ubGVuZ3RoLGc9by5jaGFyQ29kZUF0KGgpLCFjKXtlPW8uc2xpY2UoZCk7YnJlYWt9aWYoZz09PTEwJiZkPT09aCYmcilmLnB1c2goLTMpLHI9dm9pZCAwO2Vsc2Ugc3dpdGNoKHImJihmLnB1c2goLTUpLHI9dm9pZCAwKSxkPGgmJihmLnB1c2goby5zbGljZShkLGgpKSx0Kz1oLWQpLGcpe2Nhc2UgMDp7Zi5wdXNoKDY1NTMzKSx0Kys7YnJlYWt9Y2FzZSA5Ontmb3IodT1NYXRoLmNlaWwodC80KSo0LGYucHVzaCgtMik7dCsrPHU7KWYucHVzaCgtMSk7YnJlYWt9Y2FzZSAxMDp7Zi5wdXNoKC00KSx0PTE7YnJlYWt9ZGVmYXVsdDpyPSEwLHQ9MX1kPWgrMX1yZXR1cm4gbCYmKHImJmYucHVzaCgtNSksZSYmZi5wdXNoKGUpLGYucHVzaChudWxsKSksZn19dmFyIEZLZSx5Sj1uKCgpPT57RktlPS9bXDBcdFxuXHJdL2d9KTtmdW5jdGlvbiB5SjEodCxlLGEpe3JldHVybiB0eXBlb2YgZSE9InN0cmluZyImJihhPWUsZT12b2lkIDApLGhKKGEpKHhkKGdkKGEpLmRvY3VtZW50KCkud3JpdGUoYmQoKSh0LGUsITApKSkpfXZhciBPS2U9bigoKT0+e21KKCk7YkooKTt2SigpO3lKKCk7bUooKTtiSigpO3ZKKCk7eUooKX0pO2Z1bmN0aW9uIHdKKHQsZSxhKXtyZXR1cm4gdHlwZW9mIGUhPSJzdHJpbmciJiYoYT1lLGU9dm9pZCAwKSxEZTEoYSkoeGQoZ2QoYSkuZG9jdW1lbnQoKS53cml0ZShiZCgpKHQsZSwhMCkpKSl9ZnVuY3Rpb24gRGUxKHQpe2xldCBlPXt0cmFuc2Zvcm1zOltdLGNhbkNvbnRhaW5Fb2xzOlsiZW1waGFzaXMiLCJmcmFnbWVudCIsImhlYWRpbmciLCJwYXJhZ3JhcGgiLCJzdHJvbmciXSxlbnRlcjp7YXV0b2xpbms6byh5ZSksYXV0b2xpbmtQcm90b2NvbDokLGF1dG9saW5rRW1haWw6JCxhdHhIZWFkaW5nOm8oVSksYmxvY2tRdW90ZTpvKGopLGNoYXJhY3RlckVzY2FwZTokLGNoYXJhY3RlclJlZmVyZW5jZTokLGNvZGVGZW5jZWQ6byhzZSksY29kZUZlbmNlZEZlbmNlSW5mbzpzLGNvZGVGZW5jZWRGZW5jZU1ldGE6cyxjb2RlSW5kZW50ZWQ6byhzZSxzKSxjb2RlVGV4dDpvKGtlLHMpLGNvZGVUZXh0RGF0YTokLGRhdGE6JCxjb2RlRmxvd1ZhbHVlOiQsZGVmaW5pdGlvbjpvKERlKSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6cyxkZWZpbml0aW9uTGFiZWxTdHJpbmc6cyxkZWZpbml0aW9uVGl0bGVTdHJpbmc6cyxlbXBoYXNpczpvKE9lKSxoYXJkQnJlYWtFc2NhcGU6byhCKSxoYXJkQnJlYWtUcmFpbGluZzpvKEIpLGh0bWxGbG93Om8ob2UscyksaHRtbEZsb3dEYXRhOiQsaHRtbFRleHQ6byhvZSxzKSxodG1sVGV4dERhdGE6JCxpbWFnZTpvKHZlKSxsYWJlbDpzLGxpbms6byh5ZSksbGlzdEl0ZW06byhuZSksbGlzdEl0ZW1WYWx1ZTpoLGxpc3RPcmRlcmVkOm8oJGUsZCksbGlzdFVub3JkZXJlZDpvKCRlKSxwYXJhZ3JhcGg6byhyZSkscmVmZXJlbmNlOlcscmVmZXJlbmNlU3RyaW5nOnMscmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzpzLHJlc291cmNlVGl0bGVTdHJpbmc6cyxzZXRleHRIZWFkaW5nOm8oVSksc3Ryb25nOm8oZ2UpLHRoZW1hdGljQnJlYWs6byhydCl9LGV4aXQ6e2F0eEhlYWRpbmc6ZigpLGF0eEhlYWRpbmdTZXF1ZW5jZTpDLGF1dG9saW5rOmYoKSxhdXRvbGlua0VtYWlsOkcsYXV0b2xpbmtQcm90b2NvbDpPLGJsb2NrUXVvdGU6ZigpLGNoYXJhY3RlckVzY2FwZVZhbHVlOkgsY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6UmUsY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYzpSZSxjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZTpYLGNoYXJhY3RlclJlZmVyZW5jZTpJLGNvZGVGZW5jZWQ6ZihtKSxjb2RlRmVuY2VkRmVuY2U6eCxjb2RlRmVuY2VkRmVuY2VJbmZvOmcsY29kZUZlbmNlZEZlbmNlTWV0YTpiLGNvZGVGbG93VmFsdWU6SCxjb2RlSW5kZW50ZWQ6Zih2KSxjb2RlVGV4dDpmKFQpLGNvZGVUZXh0RGF0YTpILGRhdGE6SCxkZWZpbml0aW9uOmYoKSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6RSxkZWZpbml0aW9uTGFiZWxTdHJpbmc6eSxkZWZpbml0aW9uVGl0bGVTdHJpbmc6dyxlbXBoYXNpczpmKCksaGFyZEJyZWFrRXNjYXBlOmYoayksaGFyZEJyZWFrVHJhaWxpbmc6ZihrKSxodG1sRmxvdzpmKE4pLGh0bWxGbG93RGF0YTpILGh0bWxUZXh0OmYoUyksaHRtbFRleHREYXRhOkgsaW1hZ2U6ZihBKSxsYWJlbDphZSxsYWJlbFRleHQ6RixsaW5lRW5kaW5nOkwsbGluazpmKFIpLGxpc3RJdGVtOmYoKSxsaXN0T3JkZXJlZDpmKCksbGlzdFVub3JkZXJlZDpmKCkscGFyYWdyYXBoOmYoKSxyZWZlcmVuY2VTdHJpbmc6TmUscmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzpWLHJlc291cmNlVGl0bGVTdHJpbmc6U2UscmVzb3VyY2U6emUsc2V0ZXh0SGVhZGluZzpmKF8pLHNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2U6UCxzZXRleHRIZWFkaW5nVGV4dDp6LHN0cm9uZzpmKCksdGhlbWF0aWNCcmVhazpmKCl9fTtSS2UoZSwodHx8e30pLm1kYXN0RXh0ZW5zaW9uc3x8W10pO2xldCBhPXt9O3JldHVybiByO2Z1bmN0aW9uIHIodWUpe2xldCBaPXt0eXBlOiJyb290IixjaGlsZHJlbjpbXX0sSj17c3RhY2s6W1pdLHRva2VuU3RhY2s6W10sY29uZmlnOmUsZW50ZXI6bCxleGl0OmMsYnVmZmVyOnMscmVzdW1lOnUsZGF0YTphfSxkZT1bXSxBZT0tMTtmb3IoOysrQWU8dWUubGVuZ3RoOylpZih1ZVtBZV1bMV0udHlwZT09PSJsaXN0T3JkZXJlZCJ8fHVlW0FlXVsxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQiKWlmKHVlW0FlXVswXT09PSJlbnRlciIpZGUucHVzaChBZSk7ZWxzZXtsZXQgSGU9ZGUucG9wKCk7QWU9aSh1ZSxIZSxBZSl9Zm9yKEFlPS0xOysrQWU8dWUubGVuZ3RoOyl7bGV0IEhlPWVbdWVbQWVdWzBdXTtCS2UuY2FsbChIZSx1ZVtBZV1bMV0udHlwZSkmJkhlW3VlW0FlXVsxXS50eXBlXS5jYWxsKE9iamVjdC5hc3NpZ24oe3NsaWNlU2VyaWFsaXplOnVlW0FlXVsyXS5zbGljZVNlcmlhbGl6ZX0sSiksdWVbQWVdWzFdKX1pZihKLnRva2VuU3RhY2subGVuZ3RoPjApe2xldCBIZT1KLnRva2VuU3RhY2tbSi50b2tlblN0YWNrLmxlbmd0aC0xXTsoSGVbMV18fEhLZSkuY2FsbChKLHZvaWQgMCxIZVswXSl9Zm9yKFoucG9zaXRpb249e3N0YXJ0OlZvKHVlLmxlbmd0aD4wP3VlWzBdWzFdLnN0YXJ0OntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9KSxlbmQ6Vm8odWUubGVuZ3RoPjA/dWVbdWUubGVuZ3RoLTJdWzFdLmVuZDp7bGluZToxLGNvbHVtbjoxLG9mZnNldDowfSl9LEFlPS0xOysrQWU8ZS50cmFuc2Zvcm1zLmxlbmd0aDspWj1lLnRyYW5zZm9ybXNbQWVdKFopfHxaO3JldHVybiBafWZ1bmN0aW9uIGkodWUsWixKKXtsZXQgZGU9Wi0xLEFlPS0xLEhlPSExLE10LGl0LHp0LHF0O2Zvcig7KytkZTw9Sjspe2xldCBRPXVlW2RlXTtzd2l0Y2goUVsxXS50eXBlKXtjYXNlImxpc3RVbm9yZGVyZWQiOmNhc2UibGlzdE9yZGVyZWQiOmNhc2UiYmxvY2tRdW90ZSI6e1FbMF09PT0iZW50ZXIiP0FlKys6QWUtLSxxdD12b2lkIDA7YnJlYWt9Y2FzZSJsaW5lRW5kaW5nQmxhbmsiOntRWzBdPT09ImVudGVyIiYmKE10JiYhcXQmJiFBZSYmIXp0JiYoenQ9ZGUpLHF0PXZvaWQgMCk7YnJlYWt9Y2FzZSJsaW5lUHJlZml4IjpjYXNlImxpc3RJdGVtVmFsdWUiOmNhc2UibGlzdEl0ZW1NYXJrZXIiOmNhc2UibGlzdEl0ZW1QcmVmaXgiOmNhc2UibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIjpicmVhaztkZWZhdWx0OnF0PXZvaWQgMH1pZighQWUmJlFbMF09PT0iZW50ZXIiJiZRWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgifHxBZT09PS0xJiZRWzBdPT09ImV4aXQiJiYoUVsxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQifHxRWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQiKSl7aWYoTXQpe2xldCBLPWRlO2ZvcihpdD12b2lkIDA7Sy0tOyl7bGV0IGJlPXVlW0tdO2lmKGJlWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGJlWzFdLnR5cGU9PT0ibGluZUVuZGluZ0JsYW5rIil7aWYoYmVbMF09PT0iZXhpdCIpY29udGludWU7aXQmJih1ZVtpdF1bMV0udHlwZT0ibGluZUVuZGluZ0JsYW5rIixIZT0hMCksYmVbMV0udHlwZT0ibGluZUVuZGluZyIsaXQ9S31lbHNlIGlmKCEoYmVbMV0udHlwZT09PSJsaW5lUHJlZml4Inx8YmVbMV0udHlwZT09PSJibG9ja1F1b3RlUHJlZml4Inx8YmVbMV0udHlwZT09PSJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSJ8fGJlWzFdLnR5cGU9PT0iYmxvY2tRdW90ZU1hcmtlciJ8fGJlWzFdLnR5cGU9PT0ibGlzdEl0ZW1JbmRlbnQiKSlicmVha316dCYmKCFpdHx8enQ8aXQpJiYoTXQuX3NwcmVhZD0hMCksTXQuZW5kPU9iamVjdC5hc3NpZ24oe30saXQ/dWVbaXRdWzFdLnN0YXJ0OlFbMV0uZW5kKSx1ZS5zcGxpY2UoaXR8fGRlLDAsWyJleGl0IixNdCxRWzJdXSksZGUrKyxKKyt9aWYoUVsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4Iil7bGV0IEs9e3R5cGU6Imxpc3RJdGVtIixfc3ByZWFkOiExLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sUVsxXS5zdGFydCksZW5kOnZvaWQgMH07TXQ9Syx1ZS5zcGxpY2UoZGUsMCxbImVudGVyIixLLFFbMl1dKSxkZSsrLEorKyx6dD12b2lkIDAscXQ9ITB9fX1yZXR1cm4gdWVbWl1bMV0uX3NwcmVhZD1IZSxKfWZ1bmN0aW9uIG8odWUsWil7cmV0dXJuIEo7ZnVuY3Rpb24gSihkZSl7bC5jYWxsKHRoaXMsdWUoZGUpLGRlKSxaJiZaLmNhbGwodGhpcyxkZSl9fWZ1bmN0aW9uIHMoKXt0aGlzLnN0YWNrLnB1c2goe3R5cGU6ImZyYWdtZW50IixjaGlsZHJlbjpbXX0pfWZ1bmN0aW9uIGwodWUsWixKKXt0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdLmNoaWxkcmVuLnB1c2godWUpLHRoaXMuc3RhY2sucHVzaCh1ZSksdGhpcy50b2tlblN0YWNrLnB1c2goW1osSnx8dm9pZCAwXSksdWUucG9zaXRpb249e3N0YXJ0OlZvKFouc3RhcnQpLGVuZDp2b2lkIDB9fWZ1bmN0aW9uIGYodWUpe3JldHVybiBaO2Z1bmN0aW9uIFooSil7dWUmJnVlLmNhbGwodGhpcyxKKSxjLmNhbGwodGhpcyxKKX19ZnVuY3Rpb24gYyh1ZSxaKXtsZXQgSj10aGlzLnN0YWNrLnBvcCgpLGRlPXRoaXMudG9rZW5TdGFjay5wb3AoKTtpZihkZSlkZVswXS50eXBlIT09dWUudHlwZSYmKFo/Wi5jYWxsKHRoaXMsdWUsZGVbMF0pOihkZVsxXXx8SEtlKS5jYWxsKHRoaXMsdWUsZGVbMF0pKTtlbHNlIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGAiK3VlLnR5cGUrImAgKCIrT28oe3N0YXJ0OnVlLnN0YXJ0LGVuZDp1ZS5lbmR9KSsiKTogaXRcdTIwMTlzIG5vdCBvcGVuIik7Si5wb3NpdGlvbi5lbmQ9Vm8odWUuZW5kKX1mdW5jdGlvbiB1KCl7cmV0dXJuIGZuKHRoaXMuc3RhY2sucG9wKCkpfWZ1bmN0aW9uIGQoKXt0aGlzLmRhdGEuZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlPSEwfWZ1bmN0aW9uIGgodWUpe2lmKHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUpe2xldCBaPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMl07Wi5zdGFydD1OdW1iZXIucGFyc2VJbnQodGhpcy5zbGljZVNlcmlhbGl6ZSh1ZSksMTApLHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWU9dm9pZCAwfX1mdW5jdGlvbiBnKCl7bGV0IHVlPXRoaXMucmVzdW1lKCksWj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO1oubGFuZz11ZX1mdW5jdGlvbiBiKCl7bGV0IHVlPXRoaXMucmVzdW1lKCksWj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO1oubWV0YT11ZX1mdW5jdGlvbiB4KCl7dGhpcy5kYXRhLmZsb3dDb2RlSW5zaWRlfHwodGhpcy5idWZmZXIoKSx0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGU9ITApfWZ1bmN0aW9uIG0oKXtsZXQgdWU9dGhpcy5yZXN1bWUoKSxaPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Wi52YWx1ZT11ZS5yZXBsYWNlKC9eKFxyP1xufFxyKXwoXHI/XG58XHIpJC9nLCIiKSx0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGU9dm9pZCAwfWZ1bmN0aW9uIHYoKXtsZXQgdWU9dGhpcy5yZXN1bWUoKSxaPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Wi52YWx1ZT11ZS5yZXBsYWNlKC8oXHI/XG58XHIpJC9nLCIiKX1mdW5jdGlvbiB5KHVlKXtsZXQgWj10aGlzLnJlc3VtZSgpLEo9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtKLmxhYmVsPVosSi5pZGVudGlmaWVyPXcxKHRoaXMuc2xpY2VTZXJpYWxpemUodWUpKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHcoKXtsZXQgdWU9dGhpcy5yZXN1bWUoKSxaPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Wi50aXRsZT11ZX1mdW5jdGlvbiBFKCl7bGV0IHVlPXRoaXMucmVzdW1lKCksWj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO1oudXJsPXVlfWZ1bmN0aW9uIEModWUpe2xldCBaPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoIVouZGVwdGgpe2xldCBKPXRoaXMuc2xpY2VTZXJpYWxpemUodWUpLmxlbmd0aDtaLmRlcHRoPUp9fWZ1bmN0aW9uIHooKXt0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZz0hMH1mdW5jdGlvbiBQKHVlKXtsZXQgWj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO1ouZGVwdGg9dGhpcy5zbGljZVNlcmlhbGl6ZSh1ZSkuY29kZVBvaW50QXQoMCk9PT02MT8xOjJ9ZnVuY3Rpb24gXygpe3RoaXMuZGF0YS5zZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nPXZvaWQgMH1mdW5jdGlvbiAkKHVlKXtsZXQgSj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdLmNoaWxkcmVuLGRlPUpbSi5sZW5ndGgtMV07KCFkZXx8ZGUudHlwZSE9PSJ0ZXh0IikmJihkZT1FZSgpLGRlLnBvc2l0aW9uPXtzdGFydDpWbyh1ZS5zdGFydCksZW5kOnZvaWQgMH0sSi5wdXNoKGRlKSksdGhpcy5zdGFjay5wdXNoKGRlKX1mdW5jdGlvbiBIKHVlKXtsZXQgWj10aGlzLnN0YWNrLnBvcCgpO1oudmFsdWUrPXRoaXMuc2xpY2VTZXJpYWxpemUodWUpLFoucG9zaXRpb24uZW5kPVZvKHVlLmVuZCl9ZnVuY3Rpb24gTCh1ZSl7bGV0IFo9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZih0aGlzLmRhdGEuYXRIYXJkQnJlYWspe2xldCBKPVouY2hpbGRyZW5bWi5jaGlsZHJlbi5sZW5ndGgtMV07Si5wb3NpdGlvbi5lbmQ9Vm8odWUuZW5kKSx0aGlzLmRhdGEuYXRIYXJkQnJlYWs9dm9pZCAwO3JldHVybn0hdGhpcy5kYXRhLnNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmcmJmUuY2FuQ29udGFpbkVvbHMuaW5jbHVkZXMoWi50eXBlKSYmKCQuY2FsbCh0aGlzLHVlKSxILmNhbGwodGhpcyx1ZSkpfWZ1bmN0aW9uIGsoKXt0aGlzLmRhdGEuYXRIYXJkQnJlYWs9ITB9ZnVuY3Rpb24gTigpe2xldCB1ZT10aGlzLnJlc3VtZSgpLFo9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtaLnZhbHVlPXVlfWZ1bmN0aW9uIFMoKXtsZXQgdWU9dGhpcy5yZXN1bWUoKSxaPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Wi52YWx1ZT11ZX1mdW5jdGlvbiBUKCl7bGV0IHVlPXRoaXMucmVzdW1lKCksWj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO1oudmFsdWU9dWV9ZnVuY3Rpb24gUigpe2xldCB1ZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKHRoaXMuZGF0YS5pblJlZmVyZW5jZSl7bGV0IFo9dGhpcy5kYXRhLnJlZmVyZW5jZVR5cGV8fCJzaG9ydGN1dCI7dWUudHlwZSs9IlJlZmVyZW5jZSIsdWUucmVmZXJlbmNlVHlwZT1aLGRlbGV0ZSB1ZS51cmwsZGVsZXRlIHVlLnRpdGxlfWVsc2UgZGVsZXRlIHVlLmlkZW50aWZpZXIsZGVsZXRlIHVlLmxhYmVsO3RoaXMuZGF0YS5yZWZlcmVuY2VUeXBlPXZvaWQgMH1mdW5jdGlvbiBBKCl7bGV0IHVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYodGhpcy5kYXRhLmluUmVmZXJlbmNlKXtsZXQgWj10aGlzLmRhdGEucmVmZXJlbmNlVHlwZXx8InNob3J0Y3V0Ijt1ZS50eXBlKz0iUmVmZXJlbmNlIix1ZS5yZWZlcmVuY2VUeXBlPVosZGVsZXRlIHVlLnVybCxkZWxldGUgdWUudGl0bGV9ZWxzZSBkZWxldGUgdWUuaWRlbnRpZmllcixkZWxldGUgdWUubGFiZWw7dGhpcy5kYXRhLnJlZmVyZW5jZVR5cGU9dm9pZCAwfWZ1bmN0aW9uIEYodWUpe2xldCBaPXRoaXMuc2xpY2VTZXJpYWxpemUodWUpLEo9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0yXTtKLmxhYmVsPW1IKFopLEouaWRlbnRpZmllcj13MShaKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGFlKCl7bGV0IHVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV0sWj10aGlzLnJlc3VtZSgpLEo9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZih0aGlzLmRhdGEuaW5SZWZlcmVuY2U9ITAsSi50eXBlPT09ImxpbmsiKXtsZXQgZGU9dWUuY2hpbGRyZW47Si5jaGlsZHJlbj1kZX1lbHNlIEouYWx0PVp9ZnVuY3Rpb24gVigpe2xldCB1ZT10aGlzLnJlc3VtZSgpLFo9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtaLnVybD11ZX1mdW5jdGlvbiBTZSgpe2xldCB1ZT10aGlzLnJlc3VtZSgpLFo9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtaLnRpdGxlPXVlfWZ1bmN0aW9uIHplKCl7dGhpcy5kYXRhLmluUmVmZXJlbmNlPXZvaWQgMH1mdW5jdGlvbiBXKCl7dGhpcy5kYXRhLnJlZmVyZW5jZVR5cGU9ImNvbGxhcHNlZCJ9ZnVuY3Rpb24gTmUodWUpe2xldCBaPXRoaXMucmVzdW1lKCksSj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0oubGFiZWw9WixKLmlkZW50aWZpZXI9dzEodGhpcy5zbGljZVNlcmlhbGl6ZSh1ZSkpLnRvTG93ZXJDYXNlKCksdGhpcy5kYXRhLnJlZmVyZW5jZVR5cGU9ImZ1bGwifWZ1bmN0aW9uIFJlKHVlKXt0aGlzLmRhdGEuY2hhcmFjdGVyUmVmZXJlbmNlVHlwZT11ZS50eXBlfWZ1bmN0aW9uIFgodWUpe2xldCBaPXRoaXMuc2xpY2VTZXJpYWxpemUodWUpLEo9dGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGUsZGU7Sj8oZGU9QzYoWixKPT09ImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiPzEwOjE2KSx0aGlzLmRhdGEuY2hhcmFjdGVyUmVmZXJlbmNlVHlwZT12b2lkIDApOmRlPUhvKFopO2xldCBBZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0FlLnZhbHVlKz1kZX1mdW5jdGlvbiBJKHVlKXtsZXQgWj10aGlzLnN0YWNrLnBvcCgpO1oucG9zaXRpb24uZW5kPVZvKHVlLmVuZCl9ZnVuY3Rpb24gTyh1ZSl7SC5jYWxsKHRoaXMsdWUpO2xldCBaPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Wi51cmw9dGhpcy5zbGljZVNlcmlhbGl6ZSh1ZSl9ZnVuY3Rpb24gRyh1ZSl7SC5jYWxsKHRoaXMsdWUpO2xldCBaPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Wi51cmw9Im1haWx0bzoiK3RoaXMuc2xpY2VTZXJpYWxpemUodWUpfWZ1bmN0aW9uIGooKXtyZXR1cm57dHlwZToiYmxvY2txdW90ZSIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHNlKCl7cmV0dXJue3R5cGU6ImNvZGUiLGxhbmc6bnVsbCxtZXRhOm51bGwsdmFsdWU6IiJ9fWZ1bmN0aW9uIGtlKCl7cmV0dXJue3R5cGU6ImlubGluZUNvZGUiLHZhbHVlOiIifX1mdW5jdGlvbiBEZSgpe3JldHVybnt0eXBlOiJkZWZpbml0aW9uIixpZGVudGlmaWVyOiIiLGxhYmVsOm51bGwsdGl0bGU6bnVsbCx1cmw6IiJ9fWZ1bmN0aW9uIE9lKCl7cmV0dXJue3R5cGU6ImVtcGhhc2lzIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gVSgpe3JldHVybnt0eXBlOiJoZWFkaW5nIixkZXB0aDowLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBCKCl7cmV0dXJue3R5cGU6ImJyZWFrIn19ZnVuY3Rpb24gb2UoKXtyZXR1cm57dHlwZToiaHRtbCIsdmFsdWU6IiJ9fWZ1bmN0aW9uIHZlKCl7cmV0dXJue3R5cGU6ImltYWdlIix0aXRsZTpudWxsLHVybDoiIixhbHQ6bnVsbH19ZnVuY3Rpb24geWUoKXtyZXR1cm57dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6IiIsY2hpbGRyZW46W119fWZ1bmN0aW9uICRlKHVlKXtyZXR1cm57dHlwZToibGlzdCIsb3JkZXJlZDp1ZS50eXBlPT09Imxpc3RPcmRlcmVkIixzdGFydDpudWxsLHNwcmVhZDp1ZS5fc3ByZWFkLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBuZSh1ZSl7cmV0dXJue3R5cGU6Imxpc3RJdGVtIixzcHJlYWQ6dWUuX3NwcmVhZCxjaGVja2VkOm51bGwsY2hpbGRyZW46W119fWZ1bmN0aW9uIHJlKCl7cmV0dXJue3R5cGU6InBhcmFncmFwaCIsY2hpbGRyZW46W119fWZ1bmN0aW9uIGdlKCl7cmV0dXJue3R5cGU6InN0cm9uZyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIEVlKCl7cmV0dXJue3R5cGU6InRleHQiLHZhbHVlOiIifX1mdW5jdGlvbiBydCgpe3JldHVybnt0eXBlOiJ0aGVtYXRpY0JyZWFrIn19fWZ1bmN0aW9uIFZvKHQpe3JldHVybntsaW5lOnQubGluZSxjb2x1bW46dC5jb2x1bW4sb2Zmc2V0OnQub2Zmc2V0fX1mdW5jdGlvbiBSS2UodCxlKXtsZXQgYT0tMTtmb3IoOysrYTxlLmxlbmd0aDspe2xldCByPWVbYV07QXJyYXkuaXNBcnJheShyKT9SS2UodCxyKTpFZTEodCxyKX19ZnVuY3Rpb24gRWUxKHQsZSl7bGV0IGE7Zm9yKGEgaW4gZSlpZihCS2UuY2FsbChlLGEpKXN3aXRjaChhKXtjYXNlImNhbkNvbnRhaW5Fb2xzIjp7bGV0IHI9ZVthXTtyJiZ0W2FdLnB1c2goLi4ucik7YnJlYWt9Y2FzZSJ0cmFuc2Zvcm1zIjp7bGV0IHI9ZVthXTtyJiZ0W2FdLnB1c2goLi4ucik7YnJlYWt9Y2FzZSJlbnRlciI6Y2FzZSJleGl0Ijp7bGV0IHI9ZVthXTtyJiZPYmplY3QuYXNzaWduKHRbYV0scik7YnJlYWt9fX1mdW5jdGlvbiBIS2UodCxlKXt0aHJvdyB0P25ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGAiK3QudHlwZSsiYCAoIitPbyh7c3RhcnQ6dC5zdGFydCxlbmQ6dC5lbmR9KSsiKTogYSBkaWZmZXJlbnQgdG9rZW4gKGAiK2UudHlwZSsiYCwgIitPbyh7c3RhcnQ6ZS5zdGFydCxlbmQ6ZS5lbmR9KSsiKSBpcyBvcGVuIik6bmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgZG9jdW1lbnQsIGEgdG9rZW4gKGAiK2UudHlwZSsiYCwgIitPbyh7c3RhcnQ6ZS5zdGFydCxlbmQ6ZS5lbmR9KSsiKSBpcyBzdGlsbCBvcGVuIil9dmFyIEJLZSxxS2U9bigoKT0+e2RIKCk7T0tlKCk7aEgoKTtrSygpO1JvKCk7Y2QoKTtPUSgpO0JLZT17fS5oYXNPd25Qcm9wZXJ0eX0pO3ZhciBWS2U9bigoKT0+e3FLZSgpfSk7ZnVuY3Rpb24gXzYodCl7bGV0IGU9dGhpcztlLnBhcnNlcj1hO2Z1bmN0aW9uIGEocil7cmV0dXJuIHdKKHIsey4uLmUuZGF0YSgic2V0dGluZ3MiKSwuLi50LGV4dGVuc2lvbnM6ZS5kYXRhKCJtaWNyb21hcmtFeHRlbnNpb25zIil8fFtdLG1kYXN0RXh0ZW5zaW9uczplLmRhdGEoImZyb21NYXJrZG93bkV4dGVuc2lvbnMiKXx8W119KX19dmFyIFVLZT1uKCgpPT57VktlKCl9KTt2YXIgaktlPW4oKCk9PntVS2UoKX0pO3ZhciBXS2U9Y3QoKFJKMSxNSik9PnsoZnVuY3Rpb24oKXt2YXIgdDt0eXBlb2YgTUo8InUiP3Q9TUouZXhwb3J0cz1yOnQ9KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fCgwLGV2YWwpKCJ0aGlzIil9KSgpLHQuZm9ybWF0PXIsdC52c3ByaW50Zj1hLHR5cGVvZiBjb25zb2xlPCJ1IiYmdHlwZW9mIGNvbnNvbGUubG9nPT0iZnVuY3Rpb24iJiYodC5wcmludGY9ZSk7ZnVuY3Rpb24gZSgpe2NvbnNvbGUubG9nKHIuYXBwbHkobnVsbCxhcmd1bWVudHMpKX1mdW5jdGlvbiBhKGksbyl7cmV0dXJuIHIuYXBwbHkobnVsbCxbaV0uY29uY2F0KG8pKX1mdW5jdGlvbiByKGkpe2Zvcih2YXIgbz0xLHM9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLGw9MCxmPWkubGVuZ3RoLGM9IiIsdSxkPSExLGgsZyxiPSExLHgsbT1mdW5jdGlvbigpe3JldHVybiBzW28rK119LHY9ZnVuY3Rpb24oKXtmb3IodmFyIHk9IiI7L1xkLy50ZXN0KGlbbF0pOyl5Kz1pW2wrK10sdT1pW2xdO3JldHVybiB5Lmxlbmd0aD4wP3BhcnNlSW50KHkpOm51bGx9O2w8ZjsrK2wpaWYodT1pW2xdLGQpc3dpdGNoKGQ9ITEsdT09Ii4iPyhiPSExLHU9aVsrK2xdKTp1PT0iMCImJmlbbCsxXT09Ii4iPyhiPSEwLGwrPTIsdT1pW2xdKTpiPSEwLHg9digpLHUpe2Nhc2UiYiI6Yys9cGFyc2VJbnQobSgpLDEwKS50b1N0cmluZygyKTticmVhaztjYXNlImMiOmg9bSgpLHR5cGVvZiBoPT0ic3RyaW5nInx8aCBpbnN0YW5jZW9mIFN0cmluZz9jKz1oOmMrPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaCwxMCkpO2JyZWFrO2Nhc2UiZCI6Yys9cGFyc2VJbnQobSgpLDEwKTticmVhaztjYXNlImYiOmc9U3RyaW5nKHBhcnNlRmxvYXQobSgpKS50b0ZpeGVkKHh8fDYpKSxjKz1iP2c6Zy5yZXBsYWNlKC9eMC8sIiIpO2JyZWFrO2Nhc2UiaiI6Yys9SlNPTi5zdHJpbmdpZnkobSgpKTticmVhaztjYXNlIm8iOmMrPSIwIitwYXJzZUludChtKCksMTApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2UicyI6Yys9bSgpO2JyZWFrO2Nhc2UieCI6Yys9IjB4IitwYXJzZUludChtKCksMTApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlIlgiOmMrPSIweCIrcGFyc2VJbnQobSgpLDEwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTticmVhaztkZWZhdWx0OmMrPXU7YnJlYWt9ZWxzZSB1PT09IiUiP2Q9ITA6Yys9dTtyZXR1cm4gY319KSgpfSk7ZnVuY3Rpb24gYm4odCl7cmV0dXJuIGUuZGlzcGxheU5hbWU9dC5kaXNwbGF5TmFtZXx8dC5uYW1lLGU7ZnVuY3Rpb24gZShhLC4uLnIpe2xldCBpPWEmJigwLEdLZS5kZWZhdWx0KShhLC4uLnIpO3JldHVybiBuZXcgdChpKX19dmFyIEdLZSx2ZCxZS2U9bigoKT0+e0dLZT1OMihXS2UoKSwxKSx2ZD1PYmplY3QuYXNzaWduKGJuKEVycm9yKSx7ZXZhbDpibihFdmFsRXJyb3IpLHJhbmdlOmJuKFJhbmdlRXJyb3IpLHJlZmVyZW5jZTpibihSZWZlcmVuY2VFcnJvciksc3ludGF4OmJuKFN5bnRheEVycm9yKSx0eXBlOmJuKFR5cGVFcnJvciksdXJpOmJuKFVSSUVycm9yKX0pfSk7ZnVuY3Rpb24gQTYodCl7bGV0IGU9W10sYT0tMSxyPUFycmF5LmlzQXJyYXkodCk/dDp0P1t0XTpbInlhbWwiXTtmb3IoOysrYTxyLmxlbmd0aDspZVthXT1OZTEoclthXSk7cmV0dXJuIGV9ZnVuY3Rpb24gTmUxKHQpe2xldCBlPXQ7aWYodHlwZW9mIGU9PSJzdHJpbmciKXtpZighUEguY2FsbChaS2UsZSkpdGhyb3cgdmQoIk1pc3NpbmcgbWF0dGVyIGRlZmluaXRpb24gZm9yIGAlc2AiLGUpO2U9e3R5cGU6ZSxtYXJrZXI6WktlW2VdfX1lbHNlIGlmKHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyB2ZCgiRXhwZWN0ZWQgbWF0dGVyIHRvIGJlIGFuIG9iamVjdCwgbm90IGAlamAiLGUpO2lmKCFQSC5jYWxsKGUsInR5cGUiKSl0aHJvdyB2ZCgiTWlzc2luZyBgdHlwZWAgaW4gbWF0dGVyIGAlamAiLGUpO2lmKCFQSC5jYWxsKGUsImZlbmNlIikmJiFQSC5jYWxsKGUsIm1hcmtlciIpKXRocm93IHZkKCJNaXNzaW5nIGBtYXJrZXJgIG9yIGBmZW5jZWAgaW4gbWF0dGVyIGAlamAiLGUpO3JldHVybiBlfXZhciBQSCxaS2Useko9bigoKT0+e1lLZSgpO1BIPXt9Lmhhc093blByb3BlcnR5LFpLZT17eWFtbDoiLSIsdG9tbDoiKyJ9fSk7ZnVuY3Rpb24gU0oodCl7bGV0IGU9QTYodCksYT17fSxyPS0xO2Zvcig7KytyPGUubGVuZ3RoOyl7bGV0IGk9ZVtyXSxvPWtKKGksIm9wZW4iKS5jaGFyQ29kZUF0KDApLHM9UGUxKGkpLGw9YVtvXTtBcnJheS5pc0FycmF5KGwpP2wucHVzaChzKTphW29dPVtzXX1yZXR1cm57ZmxvdzphfX1mdW5jdGlvbiBQZTEodCl7bGV0IGU9dC5hbnl3aGVyZSxhPXQudHlwZSxyPWErIkZlbmNlIixpPXIrIlNlcXVlbmNlIixvPWErIlZhbHVlIixzPXt0b2tlbml6ZTp1LHBhcnRpYWw6ITB9LGwsZj0wO3JldHVybnt0b2tlbml6ZTpjLGNvbmNyZXRlOiEwfTtmdW5jdGlvbiBjKGQsaCxnKXtsZXQgYj10aGlzO3JldHVybiB4O2Z1bmN0aW9uIHgoUCl7bGV0IF89Yi5ub3coKTtyZXR1cm4gXy5jb2x1bW49PT0xJiYoXy5saW5lPT09MXx8ZSkmJihsPWtKKHQsIm9wZW4iKSxmPTAsUD09PWwuY2hhckNvZGVBdChmKSk/KGQuZW50ZXIoYSksZC5lbnRlcihyKSxkLmVudGVyKGkpLG0oUCkpOmcoUCl9ZnVuY3Rpb24gbShQKXtyZXR1cm4gZj09PWwubGVuZ3RoPyhkLmV4aXQoaSksR2UoUCk/KGQuZW50ZXIoIndoaXRlc3BhY2UiKSx2KFApKTp5KFApKTpQPT09bC5jaGFyQ29kZUF0KGYrKyk/KGQuY29uc3VtZShQKSxtKTpnKFApfWZ1bmN0aW9uIHYoUCl7cmV0dXJuIEdlKFApPyhkLmNvbnN1bWUoUCksdik6KGQuZXhpdCgid2hpdGVzcGFjZSIpLHkoUCkpfWZ1bmN0aW9uIHkoUCl7cmV0dXJuIFBlKFApPyhkLmV4aXQociksZC5lbnRlcigibGluZUVuZGluZyIpLGQuY29uc3VtZShQKSxkLmV4aXQoImxpbmVFbmRpbmciKSxsPWtKKHQsImNsb3NlIiksZj0wLGQuYXR0ZW1wdChzLHosdykpOmcoUCl9ZnVuY3Rpb24gdyhQKXtyZXR1cm4gUD09PW51bGx8fFBlKFApP0MoUCk6KGQuZW50ZXIobyksRShQKSl9ZnVuY3Rpb24gRShQKXtyZXR1cm4gUD09PW51bGx8fFBlKFApPyhkLmV4aXQobyksQyhQKSk6KGQuY29uc3VtZShQKSxFKX1mdW5jdGlvbiBDKFApe3JldHVybiBQPT09bnVsbD9nKFApOihkLmVudGVyKCJsaW5lRW5kaW5nIiksZC5jb25zdW1lKFApLGQuZXhpdCgibGluZUVuZGluZyIpLGQuYXR0ZW1wdChzLHosdykpfWZ1bmN0aW9uIHooUCl7cmV0dXJuIGQuZXhpdChhKSxoKFApfX1mdW5jdGlvbiB1KGQsaCxnKXtsZXQgYj0wO3JldHVybiB4O2Z1bmN0aW9uIHgodyl7cmV0dXJuIHc9PT1sLmNoYXJDb2RlQXQoYik/KGQuZW50ZXIociksZC5lbnRlcihpKSxtKHcpKTpnKHcpfWZ1bmN0aW9uIG0odyl7cmV0dXJuIGI9PT1sLmxlbmd0aD8oZC5leGl0KGkpLEdlKHcpPyhkLmVudGVyKCJ3aGl0ZXNwYWNlIiksdih3KSk6eSh3KSk6dz09PWwuY2hhckNvZGVBdChiKyspPyhkLmNvbnN1bWUodyksbSk6Zyh3KX1mdW5jdGlvbiB2KHcpe3JldHVybiBHZSh3KT8oZC5jb25zdW1lKHcpLHYpOihkLmV4aXQoIndoaXRlc3BhY2UiKSx5KHcpKX1mdW5jdGlvbiB5KHcpe3JldHVybiB3PT09bnVsbHx8UGUodyk/KGQuZXhpdChyKSxoKHcpKTpnKHcpfX19ZnVuY3Rpb24ga0oodCxlKXtyZXR1cm4gdC5tYXJrZXI/WEtlKHQubWFya2VyLGUpLnJlcGVhdCgzKTpYS2UodC5mZW5jZSxlKX1mdW5jdGlvbiBYS2UodCxlKXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP3Q6dFtlXX12YXIgUUtlPW4oKCk9PntrdCgpO3pKKCl9KTt2YXIgS0tlPW4oKCk9Pnt9KTt2YXIgQ0o9bigoKT0+e1FLZSgpO0tLZSgpO3pKKCl9KTtmdW5jdGlvbiBUSih0KXtsZXQgZT1BNih0KSxhPXt9LHI9e30saT0tMTtmb3IoOysraTxlLmxlbmd0aDspe2xldCBvPWVbaV07YVtvLnR5cGVdPUllMShvKSxyW28udHlwZV09RmUxLHJbby50eXBlKyJWYWx1ZSJdPU9lMX1yZXR1cm57ZW50ZXI6YSxleGl0OnJ9fWZ1bmN0aW9uIEllMSh0KXtyZXR1cm4gZTtmdW5jdGlvbiBlKGEpe3RoaXMuZW50ZXIoe3R5cGU6dC50eXBlLHZhbHVlOiIifSxhKSx0aGlzLmJ1ZmZlcigpfX1mdW5jdGlvbiBGZTEodCl7bGV0IGU9dGhpcy5yZXN1bWUoKSxhPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07InZhbHVlImluIGEsdGhpcy5leGl0KHQpLGEudmFsdWU9ZS5yZXBsYWNlKC9eKFxyP1xufFxyKXwoXHI/XG58XHIpJC9nLCIiKX1mdW5jdGlvbiBPZTEodCl7dGhpcy5jb25maWcuZW50ZXIuZGF0YS5jYWxsKHRoaXMsdCksdGhpcy5jb25maWcuZXhpdC5kYXRhLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBfSih0KXtsZXQgZT1bXSxhPXt9LHI9QTYodCksaT0tMTtmb3IoOysraTxyLmxlbmd0aDspe2xldCBvPXJbaV07YVtvLnR5cGVdPUJlMShvKTtsZXQgcz1MSihvLCJvcGVuIik7ZS5wdXNoKHthdEJyZWFrOiEwLGNoYXJhY3RlcjpzLmNoYXJBdCgwKSxhZnRlcjokcyhzLmNoYXJBdCgxKSl9KX1yZXR1cm57dW5zYWZlOmUsaGFuZGxlcnM6YX19ZnVuY3Rpb24gQmUxKHQpe2xldCBlPUxKKHQsIm9wZW4iKSxhPUxKKHQsImNsb3NlIik7cmV0dXJuIHI7ZnVuY3Rpb24gcihpKXtyZXR1cm4gZSsoaS52YWx1ZT9gCmAraS52YWx1ZToiIikrYApgK2F9fWZ1bmN0aW9uIExKKHQsZSl7cmV0dXJuIHQubWFya2VyP0pLZSh0Lm1hcmtlcixlKS5yZXBlYXQoMyk6SktlKHQuZmVuY2UsZSl9ZnVuY3Rpb24gSktlKHQsZSl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj90OnRbZV19dmFyIGVKZT1uKCgpPT57Rm8oKTtDSigpO3NPKCl9KTt2YXIgdEplPW4oKCk9PntlSmUoKX0pO2Z1bmN0aW9uICQ2KHQpe2xldCBlPXRoaXMsYT10fHxSZTEscj1lLmRhdGEoKSxpPXIubWljcm9tYXJrRXh0ZW5zaW9uc3x8KHIubWljcm9tYXJrRXh0ZW5zaW9ucz1bXSksbz1yLmZyb21NYXJrZG93bkV4dGVuc2lvbnN8fChyLmZyb21NYXJrZG93bkV4dGVuc2lvbnM9W10pLHM9ci50b01hcmtkb3duRXh0ZW5zaW9uc3x8KHIudG9NYXJrZG93bkV4dGVuc2lvbnM9W10pO2kucHVzaChTSihhKSksby5wdXNoKFRKKGEpKSxzLnB1c2goX0ooYSkpfXZhciBSZTEsYUplPW4oKCk9Pnt0SmUoKTtDSigpO1JlMT0ieWFtbCJ9KTt2YXIgckplPW4oKCk9PnthSmUoKX0pO3ZhciBBSj1uKCgpPT57fSk7dmFyIGlKZSxIZTEsUkgsb0plPW4oKCk9PntBSigpO2lKZT10eXBlb2Ygc2VsZj09Im9iamVjdCI/c2VsZjpnbG9iYWxUaGlzLEhlMT0odCxlKT0+e2xldCBhPShpLG8pPT4odC5zZXQobyxpKSxpKSxyPWk9PntpZih0LmhhcyhpKSlyZXR1cm4gdC5nZXQoaSk7bGV0W28sc109ZVtpXTtzd2l0Y2gobyl7Y2FzZSAwOmNhc2UtMTpyZXR1cm4gYShzLGkpO2Nhc2UgMTp7bGV0IGw9YShbXSxpKTtmb3IobGV0IGYgb2YgcylsLnB1c2gocihmKSk7cmV0dXJuIGx9Y2FzZSAyOntsZXQgbD1hKHt9LGkpO2ZvcihsZXRbZixjXW9mIHMpbFtyKGYpXT1yKGMpO3JldHVybiBsfWNhc2UgMzpyZXR1cm4gYShuZXcgRGF0ZShzKSxpKTtjYXNlIDQ6e2xldHtzb3VyY2U6bCxmbGFnczpmfT1zO3JldHVybiBhKG5ldyBSZWdFeHAobCxmKSxpKX1jYXNlIDU6e2xldCBsPWEobmV3IE1hcCxpKTtmb3IobGV0W2YsY11vZiBzKWwuc2V0KHIoZikscihjKSk7cmV0dXJuIGx9Y2FzZSA2OntsZXQgbD1hKG5ldyBTZXQsaSk7Zm9yKGxldCBmIG9mIHMpbC5hZGQocihmKSk7cmV0dXJuIGx9Y2FzZSA3OntsZXR7bmFtZTpsLG1lc3NhZ2U6Zn09cztyZXR1cm4gYShuZXcgaUplW2xdKGYpLGkpfWNhc2UgODpyZXR1cm4gYShCaWdJbnQocyksaSk7Y2FzZSJCaWdJbnQiOnJldHVybiBhKE9iamVjdChCaWdJbnQocykpLGkpO2Nhc2UiQXJyYXlCdWZmZXIiOnJldHVybiBhKG5ldyBVaW50OEFycmF5KHMpLmJ1ZmZlcixzKTtjYXNlIkRhdGFWaWV3Ijp7bGV0e2J1ZmZlcjpsfT1uZXcgVWludDhBcnJheShzKTtyZXR1cm4gYShuZXcgRGF0YVZpZXcobCkscyl9fXJldHVybiBhKG5ldyBpSmVbb10ocyksaSl9O3JldHVybiByfSxSSD10PT5IZTEobmV3IE1hcCx0KSgwKX0pO3ZhciBFNixxZTEsVmUxLE1kLEhILFVlMSxxSCxzSmU9bigoKT0+e0FKKCk7RTY9IiIse3RvU3RyaW5nOnFlMX09e30se2tleXM6VmUxfT1PYmplY3QsTWQ9dD0+e2xldCBlPXR5cGVvZiB0O2lmKGUhPT0ib2JqZWN0Inx8IXQpcmV0dXJuWzAsZV07bGV0IGE9cWUxLmNhbGwodCkuc2xpY2UoOCwtMSk7c3dpdGNoKGEpe2Nhc2UiQXJyYXkiOnJldHVyblsxLEU2XTtjYXNlIk9iamVjdCI6cmV0dXJuWzIsRTZdO2Nhc2UiRGF0ZSI6cmV0dXJuWzMsRTZdO2Nhc2UiUmVnRXhwIjpyZXR1cm5bNCxFNl07Y2FzZSJNYXAiOnJldHVybls1LEU2XTtjYXNlIlNldCI6cmV0dXJuWzYsRTZdO2Nhc2UiRGF0YVZpZXciOnJldHVyblsxLGFdfXJldHVybiBhLmluY2x1ZGVzKCJBcnJheSIpP1sxLGFdOmEuaW5jbHVkZXMoIkVycm9yIik/WzcsYV06WzIsYV19LEhIPShbdCxlXSk9PnQ9PT0wJiYoZT09PSJmdW5jdGlvbiJ8fGU9PT0ic3ltYm9sIiksVWUxPSh0LGUsYSxyKT0+e2xldCBpPShzLGwpPT57bGV0IGY9ci5wdXNoKHMpLTE7cmV0dXJuIGEuc2V0KGwsZiksZn0sbz1zPT57aWYoYS5oYXMocykpcmV0dXJuIGEuZ2V0KHMpO2xldFtsLGZdPU1kKHMpO3N3aXRjaChsKXtjYXNlIDA6e2xldCB1PXM7c3dpdGNoKGYpe2Nhc2UiYmlnaW50IjpsPTgsdT1zLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOmlmKHQpdGhyb3cgbmV3IFR5cGVFcnJvcigidW5hYmxlIHRvIHNlcmlhbGl6ZSAiK2YpO3U9bnVsbDticmVhaztjYXNlInVuZGVmaW5lZCI6cmV0dXJuIGkoWy0xXSxzKX1yZXR1cm4gaShbbCx1XSxzKX1jYXNlIDE6e2lmKGYpe2xldCBoPXM7cmV0dXJuIGY9PT0iRGF0YVZpZXciP2g9bmV3IFVpbnQ4QXJyYXkocy5idWZmZXIpOmY9PT0iQXJyYXlCdWZmZXIiJiYoaD1uZXcgVWludDhBcnJheShzKSksaShbZixbLi4uaF1dLHMpfWxldCB1PVtdLGQ9aShbbCx1XSxzKTtmb3IobGV0IGggb2Ygcyl1LnB1c2gobyhoKSk7cmV0dXJuIGR9Y2FzZSAyOntpZihmKXN3aXRjaChmKXtjYXNlIkJpZ0ludCI6cmV0dXJuIGkoW2Yscy50b1N0cmluZygpXSxzKTtjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6cmV0dXJuIGkoW2Yscy52YWx1ZU9mKCldLHMpfWlmKGUmJiJ0b0pTT04iaW4gcylyZXR1cm4gbyhzLnRvSlNPTigpKTtsZXQgdT1bXSxkPWkoW2wsdV0scyk7Zm9yKGxldCBoIG9mIFZlMShzKSkodHx8IUhIKE1kKHNbaF0pKSkmJnUucHVzaChbbyhoKSxvKHNbaF0pXSk7cmV0dXJuIGR9Y2FzZSAzOnJldHVybiBpKFtsLHMudG9JU09TdHJpbmcoKV0scyk7Y2FzZSA0OntsZXR7c291cmNlOnUsZmxhZ3M6ZH09cztyZXR1cm4gaShbbCx7c291cmNlOnUsZmxhZ3M6ZH1dLHMpfWNhc2UgNTp7bGV0IHU9W10sZD1pKFtsLHVdLHMpO2ZvcihsZXRbaCxnXW9mIHMpKHR8fCEoSEgoTWQoaCkpfHxISChNZChnKSkpKSYmdS5wdXNoKFtvKGgpLG8oZyldKTtyZXR1cm4gZH1jYXNlIDY6e2xldCB1PVtdLGQ9aShbbCx1XSxzKTtmb3IobGV0IGggb2YgcykodHx8IUhIKE1kKGgpKSkmJnUucHVzaChvKGgpKTtyZXR1cm4gZH19bGV0e21lc3NhZ2U6Y309cztyZXR1cm4gaShbbCx7bmFtZTpmLG1lc3NhZ2U6Y31dLHMpfTtyZXR1cm4gb30scUg9KHQse2pzb246ZSxsb3NzeTphfT17fSk9PntsZXQgcj1bXTtyZXR1cm4gVWUxKCEoZXx8YSksISFlLG5ldyBNYXAscikodCkscn19KTt2YXIgVW8sVkg9bigoKT0+e29KZSgpO3NKZSgpO1VvPXR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU9PSJmdW5jdGlvbiI/KHQsZSk9PmUmJigianNvbiJpbiBlfHwibG9zc3kiaW4gZSk/UkgocUgodCxlKSk6c3RydWN0dXJlZENsb25lKHQpOih0LGUpPT5SSChxSCh0LGUpKX0pO2Z1bmN0aW9uIG5KZSh0KXtyZXR1cm4gZTtmdW5jdGlvbiBlKGEpe2xldCByPWEmJmEucG9zaXRpb24mJmEucG9zaXRpb25bdF18fHt9O2lmKHR5cGVvZiByLmxpbmU9PSJudW1iZXIiJiZyLmxpbmU+MCYmdHlwZW9mIHIuY29sdW1uPT0ibnVtYmVyIiYmci5jb2x1bW4+MClyZXR1cm57bGluZTpyLmxpbmUsY29sdW1uOnIuY29sdW1uLG9mZnNldDp0eXBlb2Ygci5vZmZzZXQ9PSJudW1iZXIiJiZyLm9mZnNldD4tMT9yLm9mZnNldDp2b2lkIDB9fX1mdW5jdGlvbiB6ZCh0KXtsZXQgZT1qSCh0KSxhPVVIKHQpO2lmKGUmJmEpcmV0dXJue3N0YXJ0OmUsZW5kOmF9fXZhciBVSCxqSCxsSmU9bigoKT0+e1VIPW5KZSgiZW5kIiksakg9bkplKCJzdGFydCIpfSk7dmFyIFdIPW4oKCk9PntsSmUoKX0pO3ZhciB2bixHSCxOSj1uKCgpPT57dm49WyJhcmlhRGVzY3JpYmVkQnkiLCJhcmlhTGFiZWwiLCJhcmlhTGFiZWxsZWRCeSJdLEdIPXthbmNlc3RvcnM6e3Rib2R5OlsidGFibGUiXSx0ZDpbInRhYmxlIl0sdGg6WyJ0YWJsZSJdLHRoZWFkOlsidGFibGUiXSx0Zm9vdDpbInRhYmxlIl0sdHI6WyJ0YWJsZSJdfSxhdHRyaWJ1dGVzOnthOlsuLi52biwiZGF0YUZvb3Rub3RlQmFja3JlZiIsImRhdGFGb290bm90ZVJlZiIsWyJjbGFzc05hbWUiLCJkYXRhLWZvb3Rub3RlLWJhY2tyZWYiXSwiaHJlZiJdLGJsb2NrcXVvdGU6WyJjaXRlIl0sY29kZTpbWyJjbGFzc05hbWUiLC9ebGFuZ3VhZ2UtLi9dXSxkZWw6WyJjaXRlIl0sZGl2OlsiaXRlbVNjb3BlIiwiaXRlbVR5cGUiXSxkbDpbLi4udm5dLGgyOltbImNsYXNzTmFtZSIsInNyLW9ubHkiXV0saW1nOlsuLi52biwibG9uZ0Rlc2MiLCJzcmMiXSxpbnB1dDpbWyJkaXNhYmxlZCIsITBdLFsidHlwZSIsImNoZWNrYm94Il1dLGluczpbImNpdGUiXSxsaTpbWyJjbGFzc05hbWUiLCJ0YXNrLWxpc3QtaXRlbSJdXSxvbDpbLi4udm4sWyJjbGFzc05hbWUiLCJjb250YWlucy10YXNrLWxpc3QiXV0scTpbImNpdGUiXSxzZWN0aW9uOlsiZGF0YUZvb3Rub3RlcyIsWyJjbGFzc05hbWUiLCJmb290bm90ZXMiXV0sc291cmNlOlsic3JjU2V0Il0sc3VtbWFyeTpbLi4udm5dLHRhYmxlOlsuLi52bl0sdWw6Wy4uLnZuLFsiY2xhc3NOYW1lIiwiY29udGFpbnMtdGFzay1saXN0Il1dLCIqIjpbImFiYnIiLCJhY2NlcHQiLCJhY2NlcHRDaGFyc2V0IiwiYWNjZXNzS2V5IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJheGlzIiwiYm9yZGVyIiwiY2VsbFBhZGRpbmciLCJjZWxsU3BhY2luZyIsImNoYXIiLCJjaGFyT2ZmIiwiY2hhclNldCIsImNoZWNrZWQiLCJjbGVhciIsImNvbFNwYW4iLCJjb2xvciIsImNvbHMiLCJjb21wYWN0IiwiY29vcmRzIiwiZGF0ZVRpbWUiLCJkaXIiLCJlbmNUeXBlIiwiZnJhbWUiLCJoU3BhY2UiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaHJlZkxhbmciLCJodG1sRm9yIiwiaWQiLCJpc01hcCIsIml0ZW1Qcm9wIiwibGFiZWwiLCJsYW5nIiwibWF4TGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtdWx0aXBsZSIsIm5hbWUiLCJub0hyZWYiLCJub1NoYWRlIiwibm9XcmFwIiwib3BlbiIsInByb21wdCIsInJlYWRPbmx5IiwicmV2Iiwicm93U3BhbiIsInJvd3MiLCJydWxlcyIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzcGFuIiwic3RhcnQiLCJzdW1tYXJ5IiwidGFiSW5kZXgiLCJ0aXRsZSIsInVzZU1hcCIsInZBbGlnbiIsInZhbHVlIiwid2lkdGgiXX0sY2xvYmJlcjpbImFyaWFEZXNjcmliZWRCeSIsImFyaWFMYWJlbGxlZEJ5IiwiaWQiLCJuYW1lIl0sY2xvYmJlclByZWZpeDoidXNlci1jb250ZW50LSIscHJvdG9jb2xzOntjaXRlOlsiaHR0cCIsImh0dHBzIl0saHJlZjpbImh0dHAiLCJodHRwcyIsImlyYyIsImlyY3MiLCJtYWlsdG8iLCJ4bXBwIl0sbG9uZ0Rlc2M6WyJodHRwIiwiaHR0cHMiXSxzcmM6WyJodHRwIiwiaHR0cHMiXX0scmVxdWlyZWQ6e2lucHV0OntkaXNhYmxlZDohMCx0eXBlOiJjaGVja2JveCJ9fSxzdHJpcDpbInNjcmlwdCJdLHRhZ05hbWVzOlsiYSIsImIiLCJibG9ja3F1b3RlIiwiYnIiLCJjb2RlIiwiZGQiLCJkZWwiLCJkZXRhaWxzIiwiZGl2IiwiZGwiLCJkdCIsImVtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaHIiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsaSIsIm9sIiwicCIsInBpY3R1cmUiLCJwcmUiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzb3VyY2UiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRmb290IiwidGgiLCJ0aGVhZCIsInRyIiwidHQiLCJ1bCIsInZhciJdfX0pO2Z1bmN0aW9uIFBKKHQsZSl7bGV0IGE9e3R5cGU6InJvb3QiLGNoaWxkcmVuOltdfSxyPXtzY2hlbWE6ZT97Li4uR0gsLi4uZX06R0gsc3RhY2s6W119LGk9Y0plKHIsdCk7cmV0dXJuIGkmJihBcnJheS5pc0FycmF5KGkpP2kubGVuZ3RoPT09MT9hPWlbMF06YS5jaGlsZHJlbj1pOmE9aSksYX1mdW5jdGlvbiBjSmUodCxlKXtpZihlJiZ0eXBlb2YgZT09Im9iamVjdCIpe2xldCBhPWU7c3dpdGNoKHR5cGVvZiBhLnR5cGU9PSJzdHJpbmciP2EudHlwZToiIil7Y2FzZSJjb21tZW50IjpyZXR1cm4gamUxKHQsYSk7Y2FzZSJkb2N0eXBlIjpyZXR1cm4gV2UxKHQsYSk7Y2FzZSJlbGVtZW50IjpyZXR1cm4gR2UxKHQsYSk7Y2FzZSJyb290IjpyZXR1cm4gWWUxKHQsYSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gWmUxKHQsYSk7ZGVmYXVsdDp9fX1mdW5jdGlvbiBqZTEodCxlKXtpZih0LnNjaGVtYS5hbGxvd0NvbW1lbnRzKXtsZXQgYT10eXBlb2YgZS52YWx1ZT09InN0cmluZyI/ZS52YWx1ZToiIixyPWEuaW5kZXhPZigiLS0+Iiksbz17dHlwZToiY29tbWVudCIsdmFsdWU6cjwwP2E6YS5zbGljZSgwLHIpfTtyZXR1cm4ga2QobyxlKSxvfX1mdW5jdGlvbiBXZTEodCxlKXtpZih0LnNjaGVtYS5hbGxvd0RvY3R5cGVzKXtsZXQgYT17dHlwZToiZG9jdHlwZSJ9O3JldHVybiBrZChhLGUpLGF9fWZ1bmN0aW9uIEdlMSh0LGUpe2xldCBhPXR5cGVvZiBlLnRhZ05hbWU9PSJzdHJpbmciP2UudGFnTmFtZToiIjt0LnN0YWNrLnB1c2goYSk7bGV0IHI9ZEplKHQsZS5jaGlsZHJlbiksaT1YZTEodCxlLnByb3BlcnRpZXMpO3Quc3RhY2sucG9wKCk7bGV0IG89ITE7aWYoYSYmYSE9PSIqIiYmKCF0LnNjaGVtYS50YWdOYW1lc3x8dC5zY2hlbWEudGFnTmFtZXMuaW5jbHVkZXMoYSkpJiYobz0hMCx0LnNjaGVtYS5hbmNlc3RvcnMmJmpvLmNhbGwodC5zY2hlbWEuYW5jZXN0b3JzLGEpKSl7bGV0IGw9dC5zY2hlbWEuYW5jZXN0b3JzW2FdLGY9LTE7Zm9yKG89ITE7KytmPGwubGVuZ3RoOyl0LnN0YWNrLmluY2x1ZGVzKGxbZl0pJiYobz0hMCl9aWYoIW8pcmV0dXJuIHQuc2NoZW1hLnN0cmlwJiYhdC5zY2hlbWEuc3RyaXAuaW5jbHVkZXMoYSk/cjp2b2lkIDA7bGV0IHM9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6YSxwcm9wZXJ0aWVzOmksY2hpbGRyZW46cn07cmV0dXJuIGtkKHMsZSksc31mdW5jdGlvbiBZZTEodCxlKXtsZXQgcj17dHlwZToicm9vdCIsY2hpbGRyZW46ZEplKHQsZS5jaGlsZHJlbil9O3JldHVybiBrZChyLGUpLHJ9ZnVuY3Rpb24gWmUxKHQsZSl7bGV0IHI9e3R5cGU6InRleHQiLHZhbHVlOnR5cGVvZiBlLnZhbHVlPT0ic3RyaW5nIj9lLnZhbHVlOiIifTtyZXR1cm4ga2QocixlKSxyfWZ1bmN0aW9uIGRKZSh0LGUpe2xldCBhPVtdO2lmKEFycmF5LmlzQXJyYXkoZSkpe2xldCByPWUsaT0tMTtmb3IoOysraTxyLmxlbmd0aDspe2xldCBvPWNKZSh0LHJbaV0pO28mJihBcnJheS5pc0FycmF5KG8pP2EucHVzaCguLi5vKTphLnB1c2gobykpfX1yZXR1cm4gYX1mdW5jdGlvbiBYZTEodCxlKXtsZXQgYT10LnN0YWNrW3Quc3RhY2subGVuZ3RoLTFdLHI9dC5zY2hlbWEuYXR0cmlidXRlcyxpPXQuc2NoZW1hLnJlcXVpcmVkLG89ciYmam8uY2FsbChyLGEpP3JbYV06dm9pZCAwLHM9ciYmam8uY2FsbChyLCIqIik/clsiKiJdOnZvaWQgMCxsPWUmJnR5cGVvZiBlPT0ib2JqZWN0Ij9lOnt9LGY9e30sYztmb3IoYyBpbiBsKWlmKGpvLmNhbGwobCxjKSl7bGV0IHU9bFtjXSxkPWZKZSh0LHBKZShvLGMpLGMsdSk7ZD09bnVsbCYmKGQ9ZkplKHQscEplKHMsYyksYyx1KSksZCE9bnVsbCYmKGZbY109ZCl9aWYoaSYmam8uY2FsbChpLGEpKXtsZXQgdT1pW2FdO2ZvcihjIGluIHUpam8uY2FsbCh1LGMpJiYham8uY2FsbChmLGMpJiYoZltjXT11W2NdKX1yZXR1cm4gZn1mdW5jdGlvbiBmSmUodCxlLGEscil7cmV0dXJuIGU/QXJyYXkuaXNBcnJheShyKT9RZTEodCxlLGEscik6dUplKHQsZSxhLHIpOnZvaWQgMH1mdW5jdGlvbiBRZTEodCxlLGEscil7bGV0IGk9LTEsbz1bXTtmb3IoOysraTxyLmxlbmd0aDspe2xldCBzPXVKZSh0LGUsYSxyW2ldKTsodHlwZW9mIHM9PSJudW1iZXIifHx0eXBlb2Ygcz09InN0cmluZyIpJiZvLnB1c2gocyl9cmV0dXJuIG99ZnVuY3Rpb24gdUplKHQsZSxhLHIpe2lmKCEodHlwZW9mIHIhPSJib29sZWFuIiYmdHlwZW9mIHIhPSJudW1iZXIiJiZ0eXBlb2YgciE9InN0cmluZyIpJiZLZTEodCxhLHIpKXtpZih0eXBlb2YgZT09Im9iamVjdCImJmUubGVuZ3RoPjEpe2xldCBpPSExLG89MDtmb3IoOysrbzxlLmxlbmd0aDspe2xldCBzPWVbb107aWYocyYmdHlwZW9mIHM9PSJvYmplY3QiJiYiZmxhZ3MiaW4gcyl7aWYocy50ZXN0KFN0cmluZyhyKSkpe2k9ITA7YnJlYWt9fWVsc2UgaWYocz09PXIpe2k9ITA7YnJlYWt9fWlmKCFpKXJldHVybn1yZXR1cm4gdC5zY2hlbWEuY2xvYmJlciYmdC5zY2hlbWEuY2xvYmJlclByZWZpeCYmdC5zY2hlbWEuY2xvYmJlci5pbmNsdWRlcyhhKT90LnNjaGVtYS5jbG9iYmVyUHJlZml4K3I6cn19ZnVuY3Rpb24gS2UxKHQsZSxhKXtsZXQgcj10LnNjaGVtYS5wcm90b2NvbHMmJmpvLmNhbGwodC5zY2hlbWEucHJvdG9jb2xzLGUpP3Quc2NoZW1hLnByb3RvY29sc1tlXTp2b2lkIDA7aWYoIXJ8fHIubGVuZ3RoPT09MClyZXR1cm4hMDtsZXQgaT1TdHJpbmcoYSksbz1pLmluZGV4T2YoIjoiKSxzPWkuaW5kZXhPZigiPyIpLGw9aS5pbmRleE9mKCIjIiksZj1pLmluZGV4T2YoIi8iKTtpZihvPDB8fGY+LTEmJm8+Znx8cz4tMSYmbz5zfHxsPi0xJiZvPmwpcmV0dXJuITA7bGV0IGM9LTE7Zm9yKDsrK2M8ci5sZW5ndGg7KXtsZXQgdT1yW2NdO2lmKG89PT11Lmxlbmd0aCYmaS5zbGljZSgwLHUubGVuZ3RoKT09PXUpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24ga2QodCxlKXtsZXQgYT16ZChlKTtlLmRhdGEmJih0LmRhdGE9VW8oZS5kYXRhKSksYSYmKHQucG9zaXRpb249YSl9ZnVuY3Rpb24gcEplKHQsZSl7bGV0IGEscj0tMTtpZih0KWZvcig7KytyPHQubGVuZ3RoOyl7bGV0IGk9dFtyXSxvPXR5cGVvZiBpPT0ic3RyaW5nIj9pOmlbMF07aWYobz09PWUpcmV0dXJuIGk7bz09PSJkYXRhKiImJihhPWkpfWlmKGUubGVuZ3RoPjQmJmUuc2xpY2UoMCw0KS50b0xvd2VyQ2FzZSgpPT09ImRhdGEiKXJldHVybiBhfXZhciBqbyxoSmU9bigoKT0+e1ZIKCk7V0goKTtOSigpO2pvPXt9Lmhhc093blByb3BlcnR5fSk7dmFyIG1KZT1uKCgpPT57aEplKCk7TkooKX0pO2Z1bmN0aW9uIGdKZSh0LGUpe2xldCBhPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJibG9ja3F1b3RlIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQud3JhcCh0LmFsbChlKSwhMCl9O3JldHVybiB0LnBhdGNoKGUsYSksdC5hcHBseURhdGEoZSxhKX12YXIgeEplPW4oKCk9Pnt9KTtmdW5jdGlvbiBiSmUodCxlKXtsZXQgYT17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiYnIiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W119O3JldHVybiB0LnBhdGNoKGUsYSksW3QuYXBwbHlEYXRhKGUsYSkse3R5cGU6InRleHQiLHZhbHVlOmAKYH1dfXZhciB2SmU9bigoKT0+e30pO2Z1bmN0aW9uIHlKZSh0LGUpe2xldCBhPWUudmFsdWU/ZS52YWx1ZStgCmA6IiIscj17fSxpPWUubGFuZz9lLmxhbmcuc3BsaXQoL1xzKy8pOltdO2kubGVuZ3RoPjAmJihyLmNsYXNzTmFtZT1bImxhbmd1YWdlLSIraVswXV0pO2xldCBvPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJjb2RlIixwcm9wZXJ0aWVzOnIsY2hpbGRyZW46W3t0eXBlOiJ0ZXh0Iix2YWx1ZTphfV19O3JldHVybiBlLm1ldGEmJihvLmRhdGE9e21ldGE6ZS5tZXRhfSksdC5wYXRjaChlLG8pLG89dC5hcHBseURhdGEoZSxvKSxvPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJwcmUiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W29dfSx0LnBhdGNoKGUsbyksb312YXIgd0plPW4oKCk9Pnt9KTtmdW5jdGlvbiBNSmUodCxlKXtsZXQgYT17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiZGVsIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIHpKZT1uKCgpPT57fSk7ZnVuY3Rpb24ga0plKHQsZSl7bGV0IGE9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImVtIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIFNKZT1uKCgpPT57fSk7ZnVuY3Rpb24gQ0plKHQsZSl7bGV0IGE9dHlwZW9mIHQub3B0aW9ucy5jbG9iYmVyUHJlZml4PT0ic3RyaW5nIj90Lm9wdGlvbnMuY2xvYmJlclByZWZpeDoidXNlci1jb250ZW50LSIscj1TdHJpbmcoZS5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpLGk9Y2Eoci50b0xvd2VyQ2FzZSgpKSxvPXQuZm9vdG5vdGVPcmRlci5pbmRleE9mKHIpLHMsbD10LmZvb3Rub3RlQ291bnRzLmdldChyKTtsPT09dm9pZCAwPyhsPTAsdC5mb290bm90ZU9yZGVyLnB1c2gocikscz10LmZvb3Rub3RlT3JkZXIubGVuZ3RoKTpzPW8rMSxsKz0xLHQuZm9vdG5vdGVDb3VudHMuc2V0KHIsbCk7bGV0IGY9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImEiLHByb3BlcnRpZXM6e2hyZWY6IiMiK2ErImZuLSIraSxpZDphKyJmbnJlZi0iK2krKGw+MT8iLSIrbDoiIiksZGF0YUZvb3Rub3RlUmVmOiEwLGFyaWFEZXNjcmliZWRCeTpbImZvb3Rub3RlLWxhYmVsIl19LGNoaWxkcmVuOlt7dHlwZToidGV4dCIsdmFsdWU6U3RyaW5nKHMpfV19O3QucGF0Y2goZSxmKTtsZXQgYz17dHlwZToiZWxlbWVudCIsdGFnTmFtZToic3VwIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOltmXX07cmV0dXJuIHQucGF0Y2goZSxjKSx0LmFwcGx5RGF0YShlLGMpfXZhciBMSmU9bigoKT0+e09yKCl9KTtmdW5jdGlvbiBUSmUodCxlKXtsZXQgYT17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiaCIrZS5kZXB0aCxwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIF9KZT1uKCgpPT57fSk7ZnVuY3Rpb24gQUplKHQsZSl7aWYodC5vcHRpb25zLmFsbG93RGFuZ2Vyb3VzSHRtbCl7bGV0IGE9e3R5cGU6InJhdyIsdmFsdWU6ZS52YWx1ZX07cmV0dXJuIHQucGF0Y2goZSxhKSx0LmFwcGx5RGF0YShlLGEpfX12YXIgJEplPW4oKCk9Pnt9KTtmdW5jdGlvbiBZSCh0LGUpe2xldCBhPWUucmVmZXJlbmNlVHlwZSxyPSJdIjtpZihhPT09ImNvbGxhcHNlZCI/cis9IltdIjphPT09ImZ1bGwiJiYocis9IlsiKyhlLmxhYmVsfHxlLmlkZW50aWZpZXIpKyJdIiksZS50eXBlPT09ImltYWdlUmVmZXJlbmNlIilyZXR1cm5be3R5cGU6InRleHQiLHZhbHVlOiIhWyIrZS5hbHQrcn1dO2xldCBpPXQuYWxsKGUpLG89aVswXTtvJiZvLnR5cGU9PT0idGV4dCI/by52YWx1ZT0iWyIrby52YWx1ZTppLnVuc2hpZnQoe3R5cGU6InRleHQiLHZhbHVlOiJbIn0pO2xldCBzPWlbaS5sZW5ndGgtMV07cmV0dXJuIHMmJnMudHlwZT09PSJ0ZXh0Ij9zLnZhbHVlKz1yOmkucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6cn0pLGl9dmFyIElKPW4oKCk9Pnt9KTtmdW5jdGlvbiBESmUodCxlKXtsZXQgYT1TdHJpbmcoZS5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpLHI9dC5kZWZpbml0aW9uQnlJZC5nZXQoYSk7aWYoIXIpcmV0dXJuIFlIKHQsZSk7bGV0IGk9e3NyYzpjYShyLnVybHx8IiIpLGFsdDplLmFsdH07ci50aXRsZSE9PW51bGwmJnIudGl0bGUhPT12b2lkIDAmJihpLnRpdGxlPXIudGl0bGUpO2xldCBvPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJpbWciLHByb3BlcnRpZXM6aSxjaGlsZHJlbjpbXX07cmV0dXJuIHQucGF0Y2goZSxvKSx0LmFwcGx5RGF0YShlLG8pfXZhciBFSmU9bigoKT0+e09yKCk7SUooKX0pO2Z1bmN0aW9uIE5KZSh0LGUpe2xldCBhPXtzcmM6Y2EoZS51cmwpfTtlLmFsdCE9PW51bGwmJmUuYWx0IT09dm9pZCAwJiYoYS5hbHQ9ZS5hbHQpLGUudGl0bGUhPT1udWxsJiZlLnRpdGxlIT09dm9pZCAwJiYoYS50aXRsZT1lLnRpdGxlKTtsZXQgcj17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiaW1nIixwcm9wZXJ0aWVzOmEsY2hpbGRyZW46W119O3JldHVybiB0LnBhdGNoKGUsciksdC5hcHBseURhdGEoZSxyKX12YXIgUEplPW4oKCk9PntPcigpfSk7ZnVuY3Rpb24gSUplKHQsZSl7bGV0IGE9e3R5cGU6InRleHQiLHZhbHVlOmUudmFsdWUucmVwbGFjZSgvXHI/XG58XHIvZywiICIpfTt0LnBhdGNoKGUsYSk7bGV0IHI9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImNvZGUiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W2FdfTtyZXR1cm4gdC5wYXRjaChlLHIpLHQuYXBwbHlEYXRhKGUscil9dmFyIEZKZT1uKCgpPT57fSk7ZnVuY3Rpb24gT0plKHQsZSl7bGV0IGE9U3RyaW5nKGUuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKSxyPXQuZGVmaW5pdGlvbkJ5SWQuZ2V0KGEpO2lmKCFyKXJldHVybiBZSCh0LGUpO2xldCBpPXtocmVmOmNhKHIudXJsfHwiIil9O3IudGl0bGUhPT1udWxsJiZyLnRpdGxlIT09dm9pZCAwJiYoaS50aXRsZT1yLnRpdGxlKTtsZXQgbz17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiYSIscHJvcGVydGllczppLGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLG8pLHQuYXBwbHlEYXRhKGUsbyl9dmFyIEJKZT1uKCgpPT57T3IoKTtJSigpfSk7ZnVuY3Rpb24gUkplKHQsZSl7bGV0IGE9e2hyZWY6Y2EoZS51cmwpfTtlLnRpdGxlIT09bnVsbCYmZS50aXRsZSE9PXZvaWQgMCYmKGEudGl0bGU9ZS50aXRsZSk7bGV0IHI9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImEiLHByb3BlcnRpZXM6YSxjaGlsZHJlbjp0LmFsbChlKX07cmV0dXJuIHQucGF0Y2goZSxyKSx0LmFwcGx5RGF0YShlLHIpfXZhciBISmU9bigoKT0+e09yKCl9KTtmdW5jdGlvbiBWSmUodCxlLGEpe2xldCByPXQuYWxsKGUpLGk9YT9KZTEoYSk6cUplKGUpLG89e30scz1bXTtpZih0eXBlb2YgZS5jaGVja2VkPT0iYm9vbGVhbiIpe2xldCB1PXJbMF0sZDt1JiZ1LnR5cGU9PT0iZWxlbWVudCImJnUudGFnTmFtZT09PSJwIj9kPXU6KGQ9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6InAiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W119LHIudW5zaGlmdChkKSksZC5jaGlsZHJlbi5sZW5ndGg+MCYmZC5jaGlsZHJlbi51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix2YWx1ZToiICJ9KSxkLmNoaWxkcmVuLnVuc2hpZnQoe3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImlucHV0Iixwcm9wZXJ0aWVzOnt0eXBlOiJjaGVja2JveCIsY2hlY2tlZDplLmNoZWNrZWQsZGlzYWJsZWQ6ITB9LGNoaWxkcmVuOltdfSksby5jbGFzc05hbWU9WyJ0YXNrLWxpc3QtaXRlbSJdfWxldCBsPS0xO2Zvcig7KytsPHIubGVuZ3RoOyl7bGV0IHU9cltsXTsoaXx8bCE9PTB8fHUudHlwZSE9PSJlbGVtZW50Inx8dS50YWdOYW1lIT09InAiKSYmcy5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpgCmB9KSx1LnR5cGU9PT0iZWxlbWVudCImJnUudGFnTmFtZT09PSJwIiYmIWk/cy5wdXNoKC4uLnUuY2hpbGRyZW4pOnMucHVzaCh1KX1sZXQgZj1yW3IubGVuZ3RoLTFdO2YmJihpfHxmLnR5cGUhPT0iZWxlbWVudCJ8fGYudGFnTmFtZSE9PSJwIikmJnMucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6YApgfSk7bGV0IGM9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImxpIixwcm9wZXJ0aWVzOm8sY2hpbGRyZW46c307cmV0dXJuIHQucGF0Y2goZSxjKSx0LmFwcGx5RGF0YShlLGMpfWZ1bmN0aW9uIEplMSh0KXtsZXQgZT0hMTtpZih0LnR5cGU9PT0ibGlzdCIpe2U9dC5zcHJlYWR8fCExO2xldCBhPXQuY2hpbGRyZW4scj0tMTtmb3IoOyFlJiYrK3I8YS5sZW5ndGg7KWU9cUplKGFbcl0pfXJldHVybiBlfWZ1bmN0aW9uIHFKZSh0KXtsZXQgZT10LnNwcmVhZDtyZXR1cm4gZT8/dC5jaGlsZHJlbi5sZW5ndGg+MX12YXIgVUplPW4oKCk9Pnt9KTtmdW5jdGlvbiBqSmUodCxlKXtsZXQgYT17fSxyPXQuYWxsKGUpLGk9LTE7Zm9yKHR5cGVvZiBlLnN0YXJ0PT0ibnVtYmVyIiYmZS5zdGFydCE9PTEmJihhLnN0YXJ0PWUuc3RhcnQpOysraTxyLmxlbmd0aDspe2xldCBzPXJbaV07aWYocy50eXBlPT09ImVsZW1lbnQiJiZzLnRhZ05hbWU9PT0ibGkiJiZzLnByb3BlcnRpZXMmJkFycmF5LmlzQXJyYXkocy5wcm9wZXJ0aWVzLmNsYXNzTmFtZSkmJnMucHJvcGVydGllcy5jbGFzc05hbWUuaW5jbHVkZXMoInRhc2stbGlzdC1pdGVtIikpe2EuY2xhc3NOYW1lPVsiY29udGFpbnMtdGFzay1saXN0Il07YnJlYWt9fWxldCBvPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOmUub3JkZXJlZD8ib2wiOiJ1bCIscHJvcGVydGllczphLGNoaWxkcmVuOnQud3JhcChyLCEwKX07cmV0dXJuIHQucGF0Y2goZSxvKSx0LmFwcGx5RGF0YShlLG8pfXZhciBXSmU9bigoKT0+e30pO2Z1bmN0aW9uIEdKZSh0LGUpe2xldCBhPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJwIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIFlKZT1uKCgpPT57fSk7ZnVuY3Rpb24gWkplKHQsZSl7bGV0IGE9e3R5cGU6InJvb3QiLGNoaWxkcmVuOnQud3JhcCh0LmFsbChlKSl9O3JldHVybiB0LnBhdGNoKGUsYSksdC5hcHBseURhdGEoZSxhKX12YXIgWEplPW4oKCk9Pnt9KTtmdW5jdGlvbiBRSmUodCxlKXtsZXQgYT17dHlwZToiZWxlbWVudCIsdGFnTmFtZToic3Ryb25nIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIEtKZT1uKCgpPT57fSk7ZnVuY3Rpb24gSkplKHQsZSl7bGV0IGE9dC5hbGwoZSkscj1hLnNoaWZ0KCksaT1bXTtpZihyKXtsZXQgcz17dHlwZToiZWxlbWVudCIsdGFnTmFtZToidGhlYWQiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC53cmFwKFtyXSwhMCl9O3QucGF0Y2goZS5jaGlsZHJlblswXSxzKSxpLnB1c2gocyl9aWYoYS5sZW5ndGg+MCl7bGV0IHM9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6InRib2R5Iixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQud3JhcChhLCEwKX0sbD1qSChlLmNoaWxkcmVuWzFdKSxmPVVIKGUuY2hpbGRyZW5bZS5jaGlsZHJlbi5sZW5ndGgtMV0pO2wmJmYmJihzLnBvc2l0aW9uPXtzdGFydDpsLGVuZDpmfSksaS5wdXNoKHMpfWxldCBvPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJ0YWJsZSIscHJvcGVydGllczp7fSxjaGlsZHJlbjp0LndyYXAoaSwhMCl9O3JldHVybiB0LnBhdGNoKGUsbyksdC5hcHBseURhdGEoZSxvKX12YXIgZWV0PW4oKCk9PntXSCgpfSk7ZnVuY3Rpb24gdGV0KHQsZSxhKXtsZXQgcj1hP2EuY2hpbGRyZW46dm9pZCAwLG89KHI/ci5pbmRleE9mKGUpOjEpPT09MD8idGgiOiJ0ZCIscz1hJiZhLnR5cGU9PT0idGFibGUiP2EuYWxpZ246dm9pZCAwLGw9cz9zLmxlbmd0aDplLmNoaWxkcmVuLmxlbmd0aCxmPS0xLGM9W107Zm9yKDsrK2Y8bDspe2xldCBkPWUuY2hpbGRyZW5bZl0saD17fSxnPXM/c1tmXTp2b2lkIDA7ZyYmKGguYWxpZ249Zyk7bGV0IGI9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6byxwcm9wZXJ0aWVzOmgsY2hpbGRyZW46W119O2QmJihiLmNoaWxkcmVuPXQuYWxsKGQpLHQucGF0Y2goZCxiKSxiPXQuYXBwbHlEYXRhKGQsYikpLGMucHVzaChiKX1sZXQgdT17dHlwZToiZWxlbWVudCIsdGFnTmFtZToidHIiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC53cmFwKGMsITApfTtyZXR1cm4gdC5wYXRjaChlLHUpLHQuYXBwbHlEYXRhKGUsdSl9dmFyIGFldD1uKCgpPT57fSk7ZnVuY3Rpb24gcmV0KHQsZSl7bGV0IGE9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6InRkIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIGlldD1uKCgpPT57fSk7ZnVuY3Rpb24gc2V0KHQpe2xldCBlPVN0cmluZyh0KSxhPS9ccj9cbnxcci9nLHI9YS5leGVjKGUpLGk9MCxvPVtdO2Zvcig7cjspby5wdXNoKG9ldChlLnNsaWNlKGksci5pbmRleCksaT4wLCEwKSxyWzBdKSxpPXIuaW5kZXgrclswXS5sZW5ndGgscj1hLmV4ZWMoZSk7cmV0dXJuIG8ucHVzaChvZXQoZS5zbGljZShpKSxpPjAsITEpKSxvLmpvaW4oIiIpfWZ1bmN0aW9uIG9ldCh0LGUsYSl7bGV0IHI9MCxpPXQubGVuZ3RoO2lmKGUpe2xldCBvPXQuY29kZVBvaW50QXQocik7Zm9yKDtvPT09OXx8bz09PTMyOylyKyssbz10LmNvZGVQb2ludEF0KHIpfWlmKGEpe2xldCBvPXQuY29kZVBvaW50QXQoaS0xKTtmb3IoO289PT05fHxvPT09MzI7KWktLSxvPXQuY29kZVBvaW50QXQoaS0xKX1yZXR1cm4gaT5yP3Quc2xpY2UocixpKToiIn12YXIgb3QyLHN0MixuZXQ9bigoKT0+e290Mj05LHN0Mj0zMn0pO2Z1bmN0aW9uIGNldCh0LGUpe2xldCBhPXt0eXBlOiJ0ZXh0Iix2YWx1ZTpzZXQoU3RyaW5nKGUudmFsdWUpKX07cmV0dXJuIHQucGF0Y2goZSxhKSx0LmFwcGx5RGF0YShlLGEpfXZhciBkZXQ9bigoKT0+e25ldCgpfSk7ZnVuY3Rpb24gZmV0KHQsZSl7bGV0IGE9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImhyIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOltdfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIHVldD1uKCgpPT57fSk7ZnVuY3Rpb24gWkgoKXt9dmFyIEZKLE9KPW4oKCk9Pnt4SmUoKTt2SmUoKTt3SmUoKTt6SmUoKTtTSmUoKTtMSmUoKTtfSmUoKTskSmUoKTtFSmUoKTtQSmUoKTtGSmUoKTtCSmUoKTtISmUoKTtVSmUoKTtXSmUoKTtZSmUoKTtYSmUoKTtLSmUoKTtlZXQoKTthZXQoKTtpZXQoKTtkZXQoKTt1ZXQoKTtGSj17YmxvY2txdW90ZTpnSmUsYnJlYWs6YkplLGNvZGU6eUplLGRlbGV0ZTpNSmUsZW1waGFzaXM6a0plLGZvb3Rub3RlUmVmZXJlbmNlOkNKZSxoZWFkaW5nOlRKZSxodG1sOkFKZSxpbWFnZVJlZmVyZW5jZTpESmUsaW1hZ2U6TkplLGlubGluZUNvZGU6SUplLGxpbmtSZWZlcmVuY2U6T0plLGxpbms6UkplLGxpc3RJdGVtOlZKZSxsaXN0OmpKZSxwYXJhZ3JhcGg6R0plLHJvb3Q6WkplLHN0cm9uZzpRSmUsdGFibGU6SkplLHRhYmxlQ2VsbDpyZXQsdGFibGVSb3c6dGV0LHRleHQ6Y2V0LHRoZW1hdGljQnJlYWs6ZmV0LHRvbWw6WkgseWFtbDpaSCxkZWZpbml0aW9uOlpILGZvb3Rub3RlRGVmaW5pdGlvbjpaSH19KTtmdW5jdGlvbiBwZXQodCxlKXtsZXQgYT1be3R5cGU6InRleHQiLHZhbHVlOiJcdTIxQTkifV07cmV0dXJuIGU+MSYmYS5wdXNoKHt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJzdXAiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W3t0eXBlOiJ0ZXh0Iix2YWx1ZTpTdHJpbmcoZSl9XX0pLGF9ZnVuY3Rpb24gaGV0KHQsZSl7cmV0dXJuIkJhY2sgdG8gcmVmZXJlbmNlICIrKHQrMSkrKGU+MT8iLSIrZToiIil9ZnVuY3Rpb24gbWV0KHQpe2xldCBlPXR5cGVvZiB0Lm9wdGlvbnMuY2xvYmJlclByZWZpeD09InN0cmluZyI/dC5vcHRpb25zLmNsb2JiZXJQcmVmaXg6InVzZXItY29udGVudC0iLGE9dC5vcHRpb25zLmZvb3Rub3RlQmFja0NvbnRlbnR8fHBldCxyPXQub3B0aW9ucy5mb290bm90ZUJhY2tMYWJlbHx8aGV0LGk9dC5vcHRpb25zLmZvb3Rub3RlTGFiZWx8fCJGb290bm90ZXMiLG89dC5vcHRpb25zLmZvb3Rub3RlTGFiZWxUYWdOYW1lfHwiaDIiLHM9dC5vcHRpb25zLmZvb3Rub3RlTGFiZWxQcm9wZXJ0aWVzfHx7Y2xhc3NOYW1lOlsic3Itb25seSJdfSxsPVtdLGY9LTE7Zm9yKDsrK2Y8dC5mb290bm90ZU9yZGVyLmxlbmd0aDspe2xldCBjPXQuZm9vdG5vdGVCeUlkLmdldCh0LmZvb3Rub3RlT3JkZXJbZl0pO2lmKCFjKWNvbnRpbnVlO2xldCB1PXQuYWxsKGMpLGQ9U3RyaW5nKGMuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKSxoPWNhKGQudG9Mb3dlckNhc2UoKSksZz0wLGI9W10seD10LmZvb3Rub3RlQ291bnRzLmdldChkKTtmb3IoO3ghPT12b2lkIDAmJisrZzw9eDspe2IubGVuZ3RoPjAmJmIucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6IiAifSk7bGV0IHk9dHlwZW9mIGE9PSJzdHJpbmciP2E6YShmLGcpO3R5cGVvZiB5PT0ic3RyaW5nIiYmKHk9e3R5cGU6InRleHQiLHZhbHVlOnl9KSxiLnB1c2goe3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImEiLHByb3BlcnRpZXM6e2hyZWY6IiMiK2UrImZucmVmLSIraCsoZz4xPyItIitnOiIiKSxkYXRhRm9vdG5vdGVCYWNrcmVmOiIiLGFyaWFMYWJlbDp0eXBlb2Ygcj09InN0cmluZyI/cjpyKGYsZyksY2xhc3NOYW1lOlsiZGF0YS1mb290bm90ZS1iYWNrcmVmIl19LGNoaWxkcmVuOkFycmF5LmlzQXJyYXkoeSk/eTpbeV19KX1sZXQgbT11W3UubGVuZ3RoLTFdO2lmKG0mJm0udHlwZT09PSJlbGVtZW50IiYmbS50YWdOYW1lPT09InAiKXtsZXQgeT1tLmNoaWxkcmVuW20uY2hpbGRyZW4ubGVuZ3RoLTFdO3kmJnkudHlwZT09PSJ0ZXh0Ij95LnZhbHVlKz0iICI6bS5jaGlsZHJlbi5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZToiICJ9KSxtLmNoaWxkcmVuLnB1c2goLi4uYil9ZWxzZSB1LnB1c2goLi4uYik7bGV0IHY9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImxpIixwcm9wZXJ0aWVzOntpZDplKyJmbi0iK2h9LGNoaWxkcmVuOnQud3JhcCh1LCEwKX07dC5wYXRjaChjLHYpLGwucHVzaCh2KX1pZihsLmxlbmd0aCE9PTApcmV0dXJue3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6InNlY3Rpb24iLHByb3BlcnRpZXM6e2RhdGFGb290bm90ZXM6ITAsY2xhc3NOYW1lOlsiZm9vdG5vdGVzIl19LGNoaWxkcmVuOlt7dHlwZToiZWxlbWVudCIsdGFnTmFtZTpvLHByb3BlcnRpZXM6ey4uLlVvKHMpLGlkOiJmb290bm90ZS1sYWJlbCJ9LGNoaWxkcmVuOlt7dHlwZToidGV4dCIsdmFsdWU6aX1dfSx7dHlwZToidGV4dCIsdmFsdWU6YApgfSx7dHlwZToiZWxlbWVudCIsdGFnTmFtZToib2wiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC53cmFwKGwsITApfSx7dHlwZToidGV4dCIsdmFsdWU6YApgfV19fXZhciBCSj1uKCgpPT57VkgoKTtPcigpfSk7ZnVuY3Rpb24geGV0KHQsZSl7bGV0IGE9ZXx8ZXQxLHI9bmV3IE1hcCxpPW5ldyBNYXAsbz1uZXcgTWFwLHM9ey4uLkZKLC4uLmEuaGFuZGxlcnN9LGw9e2FsbDpjLGFwcGx5RGF0YTphdDEsZGVmaW5pdGlvbkJ5SWQ6cixmb290bm90ZUJ5SWQ6aSxmb290bm90ZUNvdW50czpvLGZvb3Rub3RlT3JkZXI6W10saGFuZGxlcnM6cyxvbmU6ZixvcHRpb25zOmEscGF0Y2g6dHQxLHdyYXA6aXQxfTtyZXR1cm4gbGQodCxmdW5jdGlvbih1KXtpZih1LnR5cGU9PT0iZGVmaW5pdGlvbiJ8fHUudHlwZT09PSJmb290bm90ZURlZmluaXRpb24iKXtsZXQgZD11LnR5cGU9PT0iZGVmaW5pdGlvbiI/cjppLGg9U3RyaW5nKHUuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTtkLmhhcyhoKXx8ZC5zZXQoaCx1KX19KSxsO2Z1bmN0aW9uIGYodSxkKXtsZXQgaD11LnR5cGUsZz1sLmhhbmRsZXJzW2hdO2lmKFJKLmNhbGwobC5oYW5kbGVycyxoKSYmZylyZXR1cm4gZyhsLHUsZCk7aWYobC5vcHRpb25zLnBhc3NUaHJvdWdoJiZsLm9wdGlvbnMucGFzc1Rocm91Z2guaW5jbHVkZXMoaCkpe2lmKCJjaGlsZHJlbiJpbiB1KXtsZXR7Y2hpbGRyZW46eCwuLi5tfT11LHY9VW8obSk7cmV0dXJuIHYuY2hpbGRyZW49bC5hbGwodSksdn1yZXR1cm4gVW8odSl9cmV0dXJuKGwub3B0aW9ucy51bmtub3duSGFuZGxlcnx8cnQxKShsLHUsZCl9ZnVuY3Rpb24gYyh1KXtsZXQgZD1bXTtpZigiY2hpbGRyZW4iaW4gdSl7bGV0IGg9dS5jaGlsZHJlbixnPS0xO2Zvcig7KytnPGgubGVuZ3RoOyl7bGV0IGI9bC5vbmUoaFtnXSx1KTtpZihiKXtpZihnJiZoW2ctMV0udHlwZT09PSJicmVhayImJighQXJyYXkuaXNBcnJheShiKSYmYi50eXBlPT09InRleHQiJiYoYi52YWx1ZT1nZXQoYi52YWx1ZSkpLCFBcnJheS5pc0FycmF5KGIpJiZiLnR5cGU9PT0iZWxlbWVudCIpKXtsZXQgeD1iLmNoaWxkcmVuWzBdO3gmJngudHlwZT09PSJ0ZXh0IiYmKHgudmFsdWU9Z2V0KHgudmFsdWUpKX1BcnJheS5pc0FycmF5KGIpP2QucHVzaCguLi5iKTpkLnB1c2goYil9fX1yZXR1cm4gZH19ZnVuY3Rpb24gdHQxKHQsZSl7dC5wb3NpdGlvbiYmKGUucG9zaXRpb249emQodCkpfWZ1bmN0aW9uIGF0MSh0LGUpe2xldCBhPWU7aWYodCYmdC5kYXRhKXtsZXQgcj10LmRhdGEuaE5hbWUsaT10LmRhdGEuaENoaWxkcmVuLG89dC5kYXRhLmhQcm9wZXJ0aWVzO2lmKHR5cGVvZiByPT0ic3RyaW5nIilpZihhLnR5cGU9PT0iZWxlbWVudCIpYS50YWdOYW1lPXI7ZWxzZXtsZXQgcz0iY2hpbGRyZW4iaW4gYT9hLmNoaWxkcmVuOlthXTthPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOnIscHJvcGVydGllczp7fSxjaGlsZHJlbjpzfX1hLnR5cGU9PT0iZWxlbWVudCImJm8mJk9iamVjdC5hc3NpZ24oYS5wcm9wZXJ0aWVzLFVvKG8pKSwiY2hpbGRyZW4iaW4gYSYmYS5jaGlsZHJlbiYmaSE9PW51bGwmJmkhPT12b2lkIDAmJihhLmNoaWxkcmVuPWkpfXJldHVybiBhfWZ1bmN0aW9uIHJ0MSh0LGUpe2xldCBhPWUuZGF0YXx8e30scj0idmFsdWUiaW4gZSYmIShSSi5jYWxsKGEsImhQcm9wZXJ0aWVzIil8fFJKLmNhbGwoYSwiaENoaWxkcmVuIikpP3t0eXBlOiJ0ZXh0Iix2YWx1ZTplLnZhbHVlfTp7dHlwZToiZWxlbWVudCIsdGFnTmFtZToiZGl2Iixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLHIpLHQuYXBwbHlEYXRhKGUscil9ZnVuY3Rpb24gaXQxKHQsZSl7bGV0IGE9W10scj0tMTtmb3IoZSYmYS5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpgCmB9KTsrK3I8dC5sZW5ndGg7KXImJmEucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6YApgfSksYS5wdXNoKHRbcl0pO3JldHVybiBlJiZ0Lmxlbmd0aD4wJiZhLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOmAKYH0pLGF9ZnVuY3Rpb24gZ2V0KHQpe2xldCBlPTAsYT10LmNoYXJDb2RlQXQoZSk7Zm9yKDthPT09OXx8YT09PTMyOyllKyssYT10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIHQuc2xpY2UoZSl9dmFyIFJKLGV0MSxiZXQ9bigoKT0+e1ZIKCk7ZksoKTtXSCgpO09KKCk7Uko9e30uaGFzT3duUHJvcGVydHksZXQxPXt9fSk7ZnVuY3Rpb24gSEoodCxlKXtsZXQgYT14ZXQodCxlKSxyPWEub25lKHQsdm9pZCAwKSxpPW1ldChhKSxvPUFycmF5LmlzQXJyYXkocik/e3R5cGU6InJvb3QiLGNoaWxkcmVuOnJ9OnJ8fHt0eXBlOiJyb290IixjaGlsZHJlbjpbXX07cmV0dXJuIGkmJigiY2hpbGRyZW4iaW4gbyxvLmNoaWxkcmVuLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOmAKYH0saSkpLG99dmFyIHZldD1uKCgpPT57Rm8oKTtCSigpO2JldCgpfSk7dmFyIHlldD1uKCgpPT57T0ooKTt2ZXQoKTtCSigpfSk7dmFyIHdldCxNZXQ9bigoKT0+e3dldD1bImFyZWEiLCJiYXNlIiwiYmFzZWZvbnQiLCJiZ3NvdW5kIiwiYnIiLCJjb2wiLCJjb21tYW5kIiwiZW1iZWQiLCJmcmFtZSIsImhyIiwiaW1hZ2UiLCJpbWciLCJpbnB1dCIsImtleWdlbiIsImxpbmsiLCJtZXRhIiwicGFyYW0iLCJzb3VyY2UiLCJ0cmFjayIsIndiciJdfSk7dmFyIFNpLHFKPW4oKCk9PntTaT1jbGFzc3tjb25zdHJ1Y3RvcihlLGEscil7dGhpcy5ub3JtYWw9YSx0aGlzLnByb3BlcnR5PWUsciYmKHRoaXMuc3BhY2U9cil9fTtTaS5wcm90b3R5cGUubm9ybWFsPXt9LFNpLnByb3RvdHlwZS5wcm9wZXJ0eT17fSxTaS5wcm90b3R5cGUuc3BhY2U9dm9pZCAwfSk7ZnVuY3Rpb24gVkoodCxlKXtsZXQgYT17fSxyPXt9O2ZvcihsZXQgaSBvZiB0KU9iamVjdC5hc3NpZ24oYSxpLnByb3BlcnR5KSxPYmplY3QuYXNzaWduKHIsaS5ub3JtYWwpO3JldHVybiBuZXcgU2koYSxyLGUpfXZhciB6ZXQ9bigoKT0+e3FKKCl9KTtmdW5jdGlvbiBONih0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfXZhciBYSD1uKCgpPT57fSk7dmFyIFoxLFVKPW4oKCk9PntaMT1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3RoaXMuYXR0cmlidXRlPWEsdGhpcy5wcm9wZXJ0eT1lfX07WjEucHJvdG90eXBlLmF0dHJpYnV0ZT0iIixaMS5wcm90b3R5cGUuYm9vbGVhbmlzaD0hMSxaMS5wcm90b3R5cGUuYm9vbGVhbj0hMSxaMS5wcm90b3R5cGUuY29tbWFPclNwYWNlU2VwYXJhdGVkPSExLFoxLnByb3RvdHlwZS5jb21tYVNlcGFyYXRlZD0hMSxaMS5wcm90b3R5cGUuZGVmaW5lZD0hMSxaMS5wcm90b3R5cGUubXVzdFVzZVByb3BlcnR5PSExLFoxLnByb3RvdHlwZS5udW1iZXI9ITEsWjEucHJvdG90eXBlLm92ZXJsb2FkZWRCb29sZWFuPSExLFoxLnByb3RvdHlwZS5wcm9wZXJ0eT0iIixaMS5wcm90b3R5cGUuc3BhY2VTZXBhcmF0ZWQ9ITEsWjEucHJvdG90eXBlLnNwYWNlPXZvaWQgMH0pO3ZhciBTZD17fTtldChTZCx7Ym9vbGVhbjooKT0+dXQsYm9vbGVhbmlzaDooKT0+TTEsY29tbWFPclNwYWNlU2VwYXJhdGVkOigpPT5lYSxjb21tYVNlcGFyYXRlZDooKT0+V28sbnVtYmVyOigpPT5MZSxvdmVybG9hZGVkQm9vbGVhbjooKT0+UUgsc3BhY2VTZXBhcmF0ZWQ6KCk9Pkt0fSk7ZnVuY3Rpb24geW4oKXtyZXR1cm4gMioqKytvdDF9dmFyIG90MSx1dCxNMSxRSCxMZSxLdCxXbyxlYSxDZD1uKCgpPT57b3QxPTAsdXQ9eW4oKSxNMT15bigpLFFIPXluKCksTGU9eW4oKSxLdD15bigpLFdvPXluKCksZWE9eW4oKX0pO2Z1bmN0aW9uIGtldCh0LGUsYSl7YSYmKHRbZV09YSl9dmFyIGpKLHduLFdKPW4oKCk9PntVSigpO0NkKCk7ako9T2JqZWN0LmtleXMoU2QpLHduPWNsYXNzIGV4dGVuZHMgWjF7Y29uc3RydWN0b3IoZSxhLHIsaSl7bGV0IG89LTE7aWYoc3VwZXIoZSxhKSxrZXQodGhpcywic3BhY2UiLGkpLHR5cGVvZiByPT0ibnVtYmVyIilmb3IoOysrbzxqSi5sZW5ndGg7KXtsZXQgcz1qSltvXTtrZXQodGhpcyxqSltvXSwociZTZFtzXSk9PT1TZFtzXSl9fX07d24ucHJvdG90eXBlLmRlZmluZWQ9ITB9KTtmdW5jdGlvbiBfYSh0KXtsZXQgZT17fSxhPXt9O2ZvcihsZXRbcixpXW9mIE9iamVjdC5lbnRyaWVzKHQucHJvcGVydGllcykpe2xldCBvPW5ldyB3bihyLHQudHJhbnNmb3JtKHQuYXR0cmlidXRlc3x8e30sciksaSx0LnNwYWNlKTt0Lm11c3RVc2VQcm9wZXJ0eSYmdC5tdXN0VXNlUHJvcGVydHkuaW5jbHVkZXMocikmJihvLm11c3RVc2VQcm9wZXJ0eT0hMCksZVtyXT1vLGFbTjYocildPXIsYVtONihvLmF0dHJpYnV0ZSldPXJ9cmV0dXJuIG5ldyBTaShlLGEsdC5zcGFjZSl9dmFyIE1uPW4oKCk9PntYSCgpO1dKKCk7cUooKX0pO3ZhciBHSixDZXQ9bigoKT0+e01uKCk7Q2QoKTtHSj1fYSh7cHJvcGVydGllczp7YXJpYUFjdGl2ZURlc2NlbmRhbnQ6bnVsbCxhcmlhQXRvbWljOk0xLGFyaWFBdXRvQ29tcGxldGU6bnVsbCxhcmlhQnVzeTpNMSxhcmlhQ2hlY2tlZDpNMSxhcmlhQ29sQ291bnQ6TGUsYXJpYUNvbEluZGV4OkxlLGFyaWFDb2xTcGFuOkxlLGFyaWFDb250cm9sczpLdCxhcmlhQ3VycmVudDpudWxsLGFyaWFEZXNjcmliZWRCeTpLdCxhcmlhRGV0YWlsczpudWxsLGFyaWFEaXNhYmxlZDpNMSxhcmlhRHJvcEVmZmVjdDpLdCxhcmlhRXJyb3JNZXNzYWdlOm51bGwsYXJpYUV4cGFuZGVkOk0xLGFyaWFGbG93VG86S3QsYXJpYUdyYWJiZWQ6TTEsYXJpYUhhc1BvcHVwOm51bGwsYXJpYUhpZGRlbjpNMSxhcmlhSW52YWxpZDpudWxsLGFyaWFLZXlTaG9ydGN1dHM6bnVsbCxhcmlhTGFiZWw6bnVsbCxhcmlhTGFiZWxsZWRCeTpLdCxhcmlhTGV2ZWw6TGUsYXJpYUxpdmU6bnVsbCxhcmlhTW9kYWw6TTEsYXJpYU11bHRpTGluZTpNMSxhcmlhTXVsdGlTZWxlY3RhYmxlOk0xLGFyaWFPcmllbnRhdGlvbjpudWxsLGFyaWFPd25zOkt0LGFyaWFQbGFjZWhvbGRlcjpudWxsLGFyaWFQb3NJblNldDpMZSxhcmlhUHJlc3NlZDpNMSxhcmlhUmVhZE9ubHk6TTEsYXJpYVJlbGV2YW50Om51bGwsYXJpYVJlcXVpcmVkOk0xLGFyaWFSb2xlRGVzY3JpcHRpb246S3QsYXJpYVJvd0NvdW50OkxlLGFyaWFSb3dJbmRleDpMZSxhcmlhUm93U3BhbjpMZSxhcmlhU2VsZWN0ZWQ6TTEsYXJpYVNldFNpemU6TGUsYXJpYVNvcnQ6bnVsbCxhcmlhVmFsdWVNYXg6TGUsYXJpYVZhbHVlTWluOkxlLGFyaWFWYWx1ZU5vdzpMZSxhcmlhVmFsdWVUZXh0Om51bGwscm9sZTpudWxsfSx0cmFuc2Zvcm0odCxlKXtyZXR1cm4gZT09PSJyb2xlIj9lOiJhcmlhLSIrZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpfX0pfSk7ZnVuY3Rpb24gS0godCxlKXtyZXR1cm4gZSBpbiB0P3RbZV06ZX12YXIgWUo9bigoKT0+e30pO2Z1bmN0aW9uIEpIKHQsZSl7cmV0dXJuIEtIKHQsZS50b0xvd2VyQ2FzZSgpKX12YXIgWko9bigoKT0+e1lKKCl9KTt2YXIgTGV0LFRldD1uKCgpPT57WkooKTtNbigpO0NkKCk7TGV0PV9hKHthdHRyaWJ1dGVzOnthY2NlcHRjaGFyc2V0OiJhY2NlcHQtY2hhcnNldCIsY2xhc3NuYW1lOiJjbGFzcyIsaHRtbGZvcjoiZm9yIixodHRwZXF1aXY6Imh0dHAtZXF1aXYifSxtdXN0VXNlUHJvcGVydHk6WyJjaGVja2VkIiwibXVsdGlwbGUiLCJtdXRlZCIsInNlbGVjdGVkIl0scHJvcGVydGllczp7YWJicjpudWxsLGFjY2VwdDpXbyxhY2NlcHRDaGFyc2V0Okt0LGFjY2Vzc0tleTpLdCxhY3Rpb246bnVsbCxhbGxvdzpudWxsLGFsbG93RnVsbFNjcmVlbjp1dCxhbGxvd1BheW1lbnRSZXF1ZXN0OnV0LGFsbG93VXNlck1lZGlhOnV0LGFsdDpudWxsLGFzOm51bGwsYXN5bmM6dXQsYXV0b0NhcGl0YWxpemU6bnVsbCxhdXRvQ29tcGxldGU6S3QsYXV0b0ZvY3VzOnV0LGF1dG9QbGF5OnV0LGJsb2NraW5nOkt0LGNhcHR1cmU6bnVsbCxjaGFyU2V0Om51bGwsY2hlY2tlZDp1dCxjaXRlOm51bGwsY2xhc3NOYW1lOkt0LGNvbHM6TGUsY29sU3BhbjpudWxsLGNvbnRlbnQ6bnVsbCxjb250ZW50RWRpdGFibGU6TTEsY29udHJvbHM6dXQsY29udHJvbHNMaXN0Okt0LGNvb3JkczpMZXxXbyxjcm9zc09yaWdpbjpudWxsLGRhdGE6bnVsbCxkYXRlVGltZTpudWxsLGRlY29kaW5nOm51bGwsZGVmYXVsdDp1dCxkZWZlcjp1dCxkaXI6bnVsbCxkaXJOYW1lOm51bGwsZGlzYWJsZWQ6dXQsZG93bmxvYWQ6UUgsZHJhZ2dhYmxlOk0xLGVuY1R5cGU6bnVsbCxlbnRlcktleUhpbnQ6bnVsbCxmZXRjaFByaW9yaXR5Om51bGwsZm9ybTpudWxsLGZvcm1BY3Rpb246bnVsbCxmb3JtRW5jVHlwZTpudWxsLGZvcm1NZXRob2Q6bnVsbCxmb3JtTm9WYWxpZGF0ZTp1dCxmb3JtVGFyZ2V0Om51bGwsaGVhZGVyczpLdCxoZWlnaHQ6TGUsaGlkZGVuOlFILGhpZ2g6TGUsaHJlZjpudWxsLGhyZWZMYW5nOm51bGwsaHRtbEZvcjpLdCxodHRwRXF1aXY6S3QsaWQ6bnVsbCxpbWFnZVNpemVzOm51bGwsaW1hZ2VTcmNTZXQ6bnVsbCxpbmVydDp1dCxpbnB1dE1vZGU6bnVsbCxpbnRlZ3JpdHk6bnVsbCxpczpudWxsLGlzTWFwOnV0LGl0ZW1JZDpudWxsLGl0ZW1Qcm9wOkt0LGl0ZW1SZWY6S3QsaXRlbVNjb3BlOnV0LGl0ZW1UeXBlOkt0LGtpbmQ6bnVsbCxsYWJlbDpudWxsLGxhbmc6bnVsbCxsYW5ndWFnZTpudWxsLGxpc3Q6bnVsbCxsb2FkaW5nOm51bGwsbG9vcDp1dCxsb3c6TGUsbWFuaWZlc3Q6bnVsbCxtYXg6bnVsbCxtYXhMZW5ndGg6TGUsbWVkaWE6bnVsbCxtZXRob2Q6bnVsbCxtaW46bnVsbCxtaW5MZW5ndGg6TGUsbXVsdGlwbGU6dXQsbXV0ZWQ6dXQsbmFtZTpudWxsLG5vbmNlOm51bGwsbm9Nb2R1bGU6dXQsbm9WYWxpZGF0ZTp1dCxvbkFib3J0Om51bGwsb25BZnRlclByaW50Om51bGwsb25BdXhDbGljazpudWxsLG9uQmVmb3JlTWF0Y2g6bnVsbCxvbkJlZm9yZVByaW50Om51bGwsb25CZWZvcmVUb2dnbGU6bnVsbCxvbkJlZm9yZVVubG9hZDpudWxsLG9uQmx1cjpudWxsLG9uQ2FuY2VsOm51bGwsb25DYW5QbGF5Om51bGwsb25DYW5QbGF5VGhyb3VnaDpudWxsLG9uQ2hhbmdlOm51bGwsb25DbGljazpudWxsLG9uQ2xvc2U6bnVsbCxvbkNvbnRleHRMb3N0Om51bGwsb25Db250ZXh0TWVudTpudWxsLG9uQ29udGV4dFJlc3RvcmVkOm51bGwsb25Db3B5Om51bGwsb25DdWVDaGFuZ2U6bnVsbCxvbkN1dDpudWxsLG9uRGJsQ2xpY2s6bnVsbCxvbkRyYWc6bnVsbCxvbkRyYWdFbmQ6bnVsbCxvbkRyYWdFbnRlcjpudWxsLG9uRHJhZ0V4aXQ6bnVsbCxvbkRyYWdMZWF2ZTpudWxsLG9uRHJhZ092ZXI6bnVsbCxvbkRyYWdTdGFydDpudWxsLG9uRHJvcDpudWxsLG9uRHVyYXRpb25DaGFuZ2U6bnVsbCxvbkVtcHRpZWQ6bnVsbCxvbkVuZGVkOm51bGwsb25FcnJvcjpudWxsLG9uRm9jdXM6bnVsbCxvbkZvcm1EYXRhOm51bGwsb25IYXNoQ2hhbmdlOm51bGwsb25JbnB1dDpudWxsLG9uSW52YWxpZDpudWxsLG9uS2V5RG93bjpudWxsLG9uS2V5UHJlc3M6bnVsbCxvbktleVVwOm51bGwsb25MYW5ndWFnZUNoYW5nZTpudWxsLG9uTG9hZDpudWxsLG9uTG9hZGVkRGF0YTpudWxsLG9uTG9hZGVkTWV0YWRhdGE6bnVsbCxvbkxvYWRFbmQ6bnVsbCxvbkxvYWRTdGFydDpudWxsLG9uTWVzc2FnZTpudWxsLG9uTWVzc2FnZUVycm9yOm51bGwsb25Nb3VzZURvd246bnVsbCxvbk1vdXNlRW50ZXI6bnVsbCxvbk1vdXNlTGVhdmU6bnVsbCxvbk1vdXNlTW92ZTpudWxsLG9uTW91c2VPdXQ6bnVsbCxvbk1vdXNlT3ZlcjpudWxsLG9uTW91c2VVcDpudWxsLG9uT2ZmbGluZTpudWxsLG9uT25saW5lOm51bGwsb25QYWdlSGlkZTpudWxsLG9uUGFnZVNob3c6bnVsbCxvblBhc3RlOm51bGwsb25QYXVzZTpudWxsLG9uUGxheTpudWxsLG9uUGxheWluZzpudWxsLG9uUG9wU3RhdGU6bnVsbCxvblByb2dyZXNzOm51bGwsb25SYXRlQ2hhbmdlOm51bGwsb25SZWplY3Rpb25IYW5kbGVkOm51bGwsb25SZXNldDpudWxsLG9uUmVzaXplOm51bGwsb25TY3JvbGw6bnVsbCxvblNjcm9sbEVuZDpudWxsLG9uU2VjdXJpdHlQb2xpY3lWaW9sYXRpb246bnVsbCxvblNlZWtlZDpudWxsLG9uU2Vla2luZzpudWxsLG9uU2VsZWN0Om51bGwsb25TbG90Q2hhbmdlOm51bGwsb25TdGFsbGVkOm51bGwsb25TdG9yYWdlOm51bGwsb25TdWJtaXQ6bnVsbCxvblN1c3BlbmQ6bnVsbCxvblRpbWVVcGRhdGU6bnVsbCxvblRvZ2dsZTpudWxsLG9uVW5oYW5kbGVkUmVqZWN0aW9uOm51bGwsb25VbmxvYWQ6bnVsbCxvblZvbHVtZUNoYW5nZTpudWxsLG9uV2FpdGluZzpudWxsLG9uV2hlZWw6bnVsbCxvcGVuOnV0LG9wdGltdW06TGUscGF0dGVybjpudWxsLHBpbmc6S3QscGxhY2Vob2xkZXI6bnVsbCxwbGF5c0lubGluZTp1dCxwb3BvdmVyOm51bGwscG9wb3ZlclRhcmdldDpudWxsLHBvcG92ZXJUYXJnZXRBY3Rpb246bnVsbCxwb3N0ZXI6bnVsbCxwcmVsb2FkOm51bGwscmVhZE9ubHk6dXQscmVmZXJyZXJQb2xpY3k6bnVsbCxyZWw6S3QscmVxdWlyZWQ6dXQscmV2ZXJzZWQ6dXQscm93czpMZSxyb3dTcGFuOkxlLHNhbmRib3g6S3Qsc2NvcGU6bnVsbCxzY29wZWQ6dXQsc2VhbWxlc3M6dXQsc2VsZWN0ZWQ6dXQsc2hhZG93Um9vdENsb25hYmxlOnV0LHNoYWRvd1Jvb3REZWxlZ2F0ZXNGb2N1czp1dCxzaGFkb3dSb290TW9kZTpudWxsLHNoYXBlOm51bGwsc2l6ZTpMZSxzaXplczpudWxsLHNsb3Q6bnVsbCxzcGFuOkxlLHNwZWxsQ2hlY2s6TTEsc3JjOm51bGwsc3JjRG9jOm51bGwsc3JjTGFuZzpudWxsLHNyY1NldDpudWxsLHN0YXJ0OkxlLHN0ZXA6bnVsbCxzdHlsZTpudWxsLHRhYkluZGV4OkxlLHRhcmdldDpudWxsLHRpdGxlOm51bGwsdHJhbnNsYXRlOm51bGwsdHlwZTpudWxsLHR5cGVNdXN0TWF0Y2g6dXQsdXNlTWFwOm51bGwsdmFsdWU6TTEsd2lkdGg6TGUsd3JhcDpudWxsLHdyaXRpbmdTdWdnZXN0aW9uczpudWxsLGFsaWduOm51bGwsYUxpbms6bnVsbCxhcmNoaXZlOkt0LGF4aXM6bnVsbCxiYWNrZ3JvdW5kOm51bGwsYmdDb2xvcjpudWxsLGJvcmRlcjpMZSxib3JkZXJDb2xvcjpudWxsLGJvdHRvbU1hcmdpbjpMZSxjZWxsUGFkZGluZzpudWxsLGNlbGxTcGFjaW5nOm51bGwsY2hhcjpudWxsLGNoYXJPZmY6bnVsbCxjbGFzc0lkOm51bGwsY2xlYXI6bnVsbCxjb2RlOm51bGwsY29kZUJhc2U6bnVsbCxjb2RlVHlwZTpudWxsLGNvbG9yOm51bGwsY29tcGFjdDp1dCxkZWNsYXJlOnV0LGV2ZW50Om51bGwsZmFjZTpudWxsLGZyYW1lOm51bGwsZnJhbWVCb3JkZXI6bnVsbCxoU3BhY2U6TGUsbGVmdE1hcmdpbjpMZSxsaW5rOm51bGwsbG9uZ0Rlc2M6bnVsbCxsb3dTcmM6bnVsbCxtYXJnaW5IZWlnaHQ6TGUsbWFyZ2luV2lkdGg6TGUsbm9SZXNpemU6dXQsbm9IcmVmOnV0LG5vU2hhZGU6dXQsbm9XcmFwOnV0LG9iamVjdDpudWxsLHByb2ZpbGU6bnVsbCxwcm9tcHQ6bnVsbCxyZXY6bnVsbCxyaWdodE1hcmdpbjpMZSxydWxlczpudWxsLHNjaGVtZTpudWxsLHNjcm9sbGluZzpNMSxzdGFuZGJ5Om51bGwsc3VtbWFyeTpudWxsLHRleHQ6bnVsbCx0b3BNYXJnaW46TGUsdmFsdWVUeXBlOm51bGwsdmVyc2lvbjpudWxsLHZBbGlnbjpudWxsLHZMaW5rOm51bGwsdlNwYWNlOkxlLGFsbG93VHJhbnNwYXJlbmN5Om51bGwsYXV0b0NvcnJlY3Q6bnVsbCxhdXRvU2F2ZTpudWxsLGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlOnV0LGRpc2FibGVSZW1vdGVQbGF5YmFjazp1dCxwcmVmaXg6bnVsbCxwcm9wZXJ0eTpudWxsLHJlc3VsdHM6TGUsc2VjdXJpdHk6bnVsbCx1bnNlbGVjdGFibGU6bnVsbH0sc3BhY2U6Imh0bWwiLHRyYW5zZm9ybTpKSH0pfSk7dmFyIF9ldCxBZXQ9bigoKT0+e1lKKCk7TW4oKTtDZCgpO19ldD1fYSh7YXR0cmlidXRlczp7YWNjZW50SGVpZ2h0OiJhY2NlbnQtaGVpZ2h0IixhbGlnbm1lbnRCYXNlbGluZToiYWxpZ25tZW50LWJhc2VsaW5lIixhcmFiaWNGb3JtOiJhcmFiaWMtZm9ybSIsYmFzZWxpbmVTaGlmdDoiYmFzZWxpbmUtc2hpZnQiLGNhcEhlaWdodDoiY2FwLWhlaWdodCIsY2xhc3NOYW1lOiJjbGFzcyIsY2xpcFBhdGg6ImNsaXAtcGF0aCIsY2xpcFJ1bGU6ImNsaXAtcnVsZSIsY29sb3JJbnRlcnBvbGF0aW9uOiJjb2xvci1pbnRlcnBvbGF0aW9uIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLGNvbG9yUHJvZmlsZToiY29sb3ItcHJvZmlsZSIsY29sb3JSZW5kZXJpbmc6ImNvbG9yLXJlbmRlcmluZyIsY3Jvc3NPcmlnaW46ImNyb3Nzb3JpZ2luIixkYXRhVHlwZToiZGF0YXR5cGUiLGRvbWluYW50QmFzZWxpbmU6ImRvbWluYW50LWJhc2VsaW5lIixlbmFibGVCYWNrZ3JvdW5kOiJlbmFibGUtYmFja2dyb3VuZCIsZmlsbE9wYWNpdHk6ImZpbGwtb3BhY2l0eSIsZmlsbFJ1bGU6ImZpbGwtcnVsZSIsZmxvb2RDb2xvcjoiZmxvb2QtY29sb3IiLGZsb29kT3BhY2l0eToiZmxvb2Qtb3BhY2l0eSIsZm9udEZhbWlseToiZm9udC1mYW1pbHkiLGZvbnRTaXplOiJmb250LXNpemUiLGZvbnRTaXplQWRqdXN0OiJmb250LXNpemUtYWRqdXN0Iixmb250U3RyZXRjaDoiZm9udC1zdHJldGNoIixmb250U3R5bGU6ImZvbnQtc3R5bGUiLGZvbnRWYXJpYW50OiJmb250LXZhcmlhbnQiLGZvbnRXZWlnaHQ6ImZvbnQtd2VpZ2h0IixnbHlwaE5hbWU6ImdseXBoLW5hbWUiLGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOiJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIixnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6ImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIixocmVmTGFuZzoiaHJlZmxhbmciLGhvcml6QWR2WDoiaG9yaXotYWR2LXgiLGhvcml6T3JpZ2luWDoiaG9yaXotb3JpZ2luLXgiLGhvcml6T3JpZ2luWToiaG9yaXotb3JpZ2luLXkiLGltYWdlUmVuZGVyaW5nOiJpbWFnZS1yZW5kZXJpbmciLGxldHRlclNwYWNpbmc6ImxldHRlci1zcGFjaW5nIixsaWdodGluZ0NvbG9yOiJsaWdodGluZy1jb2xvciIsbWFya2VyRW5kOiJtYXJrZXItZW5kIixtYXJrZXJNaWQ6Im1hcmtlci1taWQiLG1hcmtlclN0YXJ0OiJtYXJrZXItc3RhcnQiLG5hdkRvd246Im5hdi1kb3duIixuYXZEb3duTGVmdDoibmF2LWRvd24tbGVmdCIsbmF2RG93blJpZ2h0OiJuYXYtZG93bi1yaWdodCIsbmF2TGVmdDoibmF2LWxlZnQiLG5hdk5leHQ6Im5hdi1uZXh0IixuYXZQcmV2OiJuYXYtcHJldiIsbmF2UmlnaHQ6Im5hdi1yaWdodCIsbmF2VXA6Im5hdi11cCIsbmF2VXBMZWZ0OiJuYXYtdXAtbGVmdCIsbmF2VXBSaWdodDoibmF2LXVwLXJpZ2h0IixvbkFib3J0OiJvbmFib3J0IixvbkFjdGl2YXRlOiJvbmFjdGl2YXRlIixvbkFmdGVyUHJpbnQ6Im9uYWZ0ZXJwcmludCIsb25CZWZvcmVQcmludDoib25iZWZvcmVwcmludCIsb25CZWdpbjoib25iZWdpbiIsb25DYW5jZWw6Im9uY2FuY2VsIixvbkNhblBsYXk6Im9uY2FucGxheSIsb25DYW5QbGF5VGhyb3VnaDoib25jYW5wbGF5dGhyb3VnaCIsb25DaGFuZ2U6Im9uY2hhbmdlIixvbkNsaWNrOiJvbmNsaWNrIixvbkNsb3NlOiJvbmNsb3NlIixvbkNvcHk6Im9uY29weSIsb25DdWVDaGFuZ2U6Im9uY3VlY2hhbmdlIixvbkN1dDoib25jdXQiLG9uRGJsQ2xpY2s6Im9uZGJsY2xpY2siLG9uRHJhZzoib25kcmFnIixvbkRyYWdFbmQ6Im9uZHJhZ2VuZCIsb25EcmFnRW50ZXI6Im9uZHJhZ2VudGVyIixvbkRyYWdFeGl0OiJvbmRyYWdleGl0IixvbkRyYWdMZWF2ZToib25kcmFnbGVhdmUiLG9uRHJhZ092ZXI6Im9uZHJhZ292ZXIiLG9uRHJhZ1N0YXJ0OiJvbmRyYWdzdGFydCIsb25Ecm9wOiJvbmRyb3AiLG9uRHVyYXRpb25DaGFuZ2U6Im9uZHVyYXRpb25jaGFuZ2UiLG9uRW1wdGllZDoib25lbXB0aWVkIixvbkVuZDoib25lbmQiLG9uRW5kZWQ6Im9uZW5kZWQiLG9uRXJyb3I6Im9uZXJyb3IiLG9uRm9jdXM6Im9uZm9jdXMiLG9uRm9jdXNJbjoib25mb2N1c2luIixvbkZvY3VzT3V0OiJvbmZvY3Vzb3V0Iixvbkhhc2hDaGFuZ2U6Im9uaGFzaGNoYW5nZSIsb25JbnB1dDoib25pbnB1dCIsb25JbnZhbGlkOiJvbmludmFsaWQiLG9uS2V5RG93bjoib25rZXlkb3duIixvbktleVByZXNzOiJvbmtleXByZXNzIixvbktleVVwOiJvbmtleXVwIixvbkxvYWQ6Im9ubG9hZCIsb25Mb2FkZWREYXRhOiJvbmxvYWRlZGRhdGEiLG9uTG9hZGVkTWV0YWRhdGE6Im9ubG9hZGVkbWV0YWRhdGEiLG9uTG9hZFN0YXJ0OiJvbmxvYWRzdGFydCIsb25NZXNzYWdlOiJvbm1lc3NhZ2UiLG9uTW91c2VEb3duOiJvbm1vdXNlZG93biIsb25Nb3VzZUVudGVyOiJvbm1vdXNlZW50ZXIiLG9uTW91c2VMZWF2ZToib25tb3VzZWxlYXZlIixvbk1vdXNlTW92ZToib25tb3VzZW1vdmUiLG9uTW91c2VPdXQ6Im9ubW91c2VvdXQiLG9uTW91c2VPdmVyOiJvbm1vdXNlb3ZlciIsb25Nb3VzZVVwOiJvbm1vdXNldXAiLG9uTW91c2VXaGVlbDoib25tb3VzZXdoZWVsIixvbk9mZmxpbmU6Im9ub2ZmbGluZSIsb25PbmxpbmU6Im9ub25saW5lIixvblBhZ2VIaWRlOiJvbnBhZ2VoaWRlIixvblBhZ2VTaG93OiJvbnBhZ2VzaG93IixvblBhc3RlOiJvbnBhc3RlIixvblBhdXNlOiJvbnBhdXNlIixvblBsYXk6Im9ucGxheSIsb25QbGF5aW5nOiJvbnBsYXlpbmciLG9uUG9wU3RhdGU6Im9ucG9wc3RhdGUiLG9uUHJvZ3Jlc3M6Im9ucHJvZ3Jlc3MiLG9uUmF0ZUNoYW5nZToib25yYXRlY2hhbmdlIixvblJlcGVhdDoib25yZXBlYXQiLG9uUmVzZXQ6Im9ucmVzZXQiLG9uUmVzaXplOiJvbnJlc2l6ZSIsb25TY3JvbGw6Im9uc2Nyb2xsIixvblNlZWtlZDoib25zZWVrZWQiLG9uU2Vla2luZzoib25zZWVraW5nIixvblNlbGVjdDoib25zZWxlY3QiLG9uU2hvdzoib25zaG93IixvblN0YWxsZWQ6Im9uc3RhbGxlZCIsb25TdG9yYWdlOiJvbnN0b3JhZ2UiLG9uU3VibWl0OiJvbnN1Ym1pdCIsb25TdXNwZW5kOiJvbnN1c3BlbmQiLG9uVGltZVVwZGF0ZToib250aW1ldXBkYXRlIixvblRvZ2dsZToib250b2dnbGUiLG9uVW5sb2FkOiJvbnVubG9hZCIsb25Wb2x1bWVDaGFuZ2U6Im9udm9sdW1lY2hhbmdlIixvbldhaXRpbmc6Im9ud2FpdGluZyIsb25ab29tOiJvbnpvb20iLG92ZXJsaW5lUG9zaXRpb246Im92ZXJsaW5lLXBvc2l0aW9uIixvdmVybGluZVRoaWNrbmVzczoib3ZlcmxpbmUtdGhpY2tuZXNzIixwYWludE9yZGVyOiJwYWludC1vcmRlciIscGFub3NlMToicGFub3NlLTEiLHBvaW50ZXJFdmVudHM6InBvaW50ZXItZXZlbnRzIixyZWZlcnJlclBvbGljeToicmVmZXJyZXJwb2xpY3kiLHJlbmRlcmluZ0ludGVudDoicmVuZGVyaW5nLWludGVudCIsc2hhcGVSZW5kZXJpbmc6InNoYXBlLXJlbmRlcmluZyIsc3RvcENvbG9yOiJzdG9wLWNvbG9yIixzdG9wT3BhY2l0eToic3RvcC1vcGFjaXR5IixzdHJpa2V0aHJvdWdoUG9zaXRpb246InN0cmlrZXRocm91Z2gtcG9zaXRpb24iLHN0cmlrZXRocm91Z2hUaGlja25lc3M6InN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIixzdHJva2VEYXNoQXJyYXk6InN0cm9rZS1kYXNoYXJyYXkiLHN0cm9rZURhc2hPZmZzZXQ6InN0cm9rZS1kYXNob2Zmc2V0IixzdHJva2VMaW5lQ2FwOiJzdHJva2UtbGluZWNhcCIsc3Ryb2tlTGluZUpvaW46InN0cm9rZS1saW5lam9pbiIsc3Ryb2tlTWl0ZXJMaW1pdDoic3Ryb2tlLW1pdGVybGltaXQiLHN0cm9rZU9wYWNpdHk6InN0cm9rZS1vcGFjaXR5IixzdHJva2VXaWR0aDoic3Ryb2tlLXdpZHRoIix0YWJJbmRleDoidGFiaW5kZXgiLHRleHRBbmNob3I6InRleHQtYW5jaG9yIix0ZXh0RGVjb3JhdGlvbjoidGV4dC1kZWNvcmF0aW9uIix0ZXh0UmVuZGVyaW5nOiJ0ZXh0LXJlbmRlcmluZyIsdHJhbnNmb3JtT3JpZ2luOiJ0cmFuc2Zvcm0tb3JpZ2luIix0eXBlT2Y6InR5cGVvZiIsdW5kZXJsaW5lUG9zaXRpb246InVuZGVybGluZS1wb3NpdGlvbiIsdW5kZXJsaW5lVGhpY2tuZXNzOiJ1bmRlcmxpbmUtdGhpY2tuZXNzIix1bmljb2RlQmlkaToidW5pY29kZS1iaWRpIix1bmljb2RlUmFuZ2U6InVuaWNvZGUtcmFuZ2UiLHVuaXRzUGVyRW06InVuaXRzLXBlci1lbSIsdkFscGhhYmV0aWM6InYtYWxwaGFiZXRpYyIsdkhhbmdpbmc6InYtaGFuZ2luZyIsdklkZW9ncmFwaGljOiJ2LWlkZW9ncmFwaGljIix2TWF0aGVtYXRpY2FsOiJ2LW1hdGhlbWF0aWNhbCIsdmVjdG9yRWZmZWN0OiJ2ZWN0b3ItZWZmZWN0Iix2ZXJ0QWR2WToidmVydC1hZHYteSIsdmVydE9yaWdpblg6InZlcnQtb3JpZ2luLXgiLHZlcnRPcmlnaW5ZOiJ2ZXJ0LW9yaWdpbi15Iix3b3JkU3BhY2luZzoid29yZC1zcGFjaW5nIix3cml0aW5nTW9kZToid3JpdGluZy1tb2RlIix4SGVpZ2h0OiJ4LWhlaWdodCIscGxheWJhY2tPcmRlcjoicGxheWJhY2tvcmRlciIsdGltZWxpbmVCZWdpbjoidGltZWxpbmViZWdpbiJ9LHByb3BlcnRpZXM6e2Fib3V0OmVhLGFjY2VudEhlaWdodDpMZSxhY2N1bXVsYXRlOm51bGwsYWRkaXRpdmU6bnVsbCxhbGlnbm1lbnRCYXNlbGluZTpudWxsLGFscGhhYmV0aWM6TGUsYW1wbGl0dWRlOkxlLGFyYWJpY0Zvcm06bnVsbCxhc2NlbnQ6TGUsYXR0cmlidXRlTmFtZTpudWxsLGF0dHJpYnV0ZVR5cGU6bnVsbCxhemltdXRoOkxlLGJhbmR3aWR0aDpudWxsLGJhc2VsaW5lU2hpZnQ6bnVsbCxiYXNlRnJlcXVlbmN5Om51bGwsYmFzZVByb2ZpbGU6bnVsbCxiYm94Om51bGwsYmVnaW46bnVsbCxiaWFzOkxlLGJ5Om51bGwsY2FsY01vZGU6bnVsbCxjYXBIZWlnaHQ6TGUsY2xhc3NOYW1lOkt0LGNsaXA6bnVsbCxjbGlwUGF0aDpudWxsLGNsaXBQYXRoVW5pdHM6bnVsbCxjbGlwUnVsZTpudWxsLGNvbG9yOm51bGwsY29sb3JJbnRlcnBvbGF0aW9uOm51bGwsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczpudWxsLGNvbG9yUHJvZmlsZTpudWxsLGNvbG9yUmVuZGVyaW5nOm51bGwsY29udGVudDpudWxsLGNvbnRlbnRTY3JpcHRUeXBlOm51bGwsY29udGVudFN0eWxlVHlwZTpudWxsLGNyb3NzT3JpZ2luOm51bGwsY3Vyc29yOm51bGwsY3g6bnVsbCxjeTpudWxsLGQ6bnVsbCxkYXRhVHlwZTpudWxsLGRlZmF1bHRBY3Rpb246bnVsbCxkZXNjZW50OkxlLGRpZmZ1c2VDb25zdGFudDpMZSxkaXJlY3Rpb246bnVsbCxkaXNwbGF5Om51bGwsZHVyOm51bGwsZGl2aXNvcjpMZSxkb21pbmFudEJhc2VsaW5lOm51bGwsZG93bmxvYWQ6dXQsZHg6bnVsbCxkeTpudWxsLGVkZ2VNb2RlOm51bGwsZWRpdGFibGU6bnVsbCxlbGV2YXRpb246TGUsZW5hYmxlQmFja2dyb3VuZDpudWxsLGVuZDpudWxsLGV2ZW50Om51bGwsZXhwb25lbnQ6TGUsZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDpudWxsLGZpbGw6bnVsbCxmaWxsT3BhY2l0eTpMZSxmaWxsUnVsZTpudWxsLGZpbHRlcjpudWxsLGZpbHRlclJlczpudWxsLGZpbHRlclVuaXRzOm51bGwsZmxvb2RDb2xvcjpudWxsLGZsb29kT3BhY2l0eTpudWxsLGZvY3VzYWJsZTpudWxsLGZvY3VzSGlnaGxpZ2h0Om51bGwsZm9udEZhbWlseTpudWxsLGZvbnRTaXplOm51bGwsZm9udFNpemVBZGp1c3Q6bnVsbCxmb250U3RyZXRjaDpudWxsLGZvbnRTdHlsZTpudWxsLGZvbnRWYXJpYW50Om51bGwsZm9udFdlaWdodDpudWxsLGZvcm1hdDpudWxsLGZyOm51bGwsZnJvbTpudWxsLGZ4Om51bGwsZnk6bnVsbCxnMTpXbyxnMjpXbyxnbHlwaE5hbWU6V28sZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6bnVsbCxnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6bnVsbCxnbHlwaFJlZjpudWxsLGdyYWRpZW50VHJhbnNmb3JtOm51bGwsZ3JhZGllbnRVbml0czpudWxsLGhhbmRsZXI6bnVsbCxoYW5naW5nOkxlLGhhdGNoQ29udGVudFVuaXRzOm51bGwsaGF0Y2hVbml0czpudWxsLGhlaWdodDpudWxsLGhyZWY6bnVsbCxocmVmTGFuZzpudWxsLGhvcml6QWR2WDpMZSxob3Jpek9yaWdpblg6TGUsaG9yaXpPcmlnaW5ZOkxlLGlkOm51bGwsaWRlb2dyYXBoaWM6TGUsaW1hZ2VSZW5kZXJpbmc6bnVsbCxpbml0aWFsVmlzaWJpbGl0eTpudWxsLGluOm51bGwsaW4yOm51bGwsaW50ZXJjZXB0OkxlLGs6TGUsazE6TGUsazI6TGUsazM6TGUsazQ6TGUsa2VybmVsTWF0cml4OmVhLGtlcm5lbFVuaXRMZW5ndGg6bnVsbCxrZXlQb2ludHM6bnVsbCxrZXlTcGxpbmVzOm51bGwsa2V5VGltZXM6bnVsbCxrZXJuaW5nOm51bGwsbGFuZzpudWxsLGxlbmd0aEFkanVzdDpudWxsLGxldHRlclNwYWNpbmc6bnVsbCxsaWdodGluZ0NvbG9yOm51bGwsbGltaXRpbmdDb25lQW5nbGU6TGUsbG9jYWw6bnVsbCxtYXJrZXJFbmQ6bnVsbCxtYXJrZXJNaWQ6bnVsbCxtYXJrZXJTdGFydDpudWxsLG1hcmtlckhlaWdodDpudWxsLG1hcmtlclVuaXRzOm51bGwsbWFya2VyV2lkdGg6bnVsbCxtYXNrOm51bGwsbWFza0NvbnRlbnRVbml0czpudWxsLG1hc2tVbml0czpudWxsLG1hdGhlbWF0aWNhbDpudWxsLG1heDpudWxsLG1lZGlhOm51bGwsbWVkaWFDaGFyYWN0ZXJFbmNvZGluZzpudWxsLG1lZGlhQ29udGVudEVuY29kaW5nczpudWxsLG1lZGlhU2l6ZTpMZSxtZWRpYVRpbWU6bnVsbCxtZXRob2Q6bnVsbCxtaW46bnVsbCxtb2RlOm51bGwsbmFtZTpudWxsLG5hdkRvd246bnVsbCxuYXZEb3duTGVmdDpudWxsLG5hdkRvd25SaWdodDpudWxsLG5hdkxlZnQ6bnVsbCxuYXZOZXh0Om51bGwsbmF2UHJldjpudWxsLG5hdlJpZ2h0Om51bGwsbmF2VXA6bnVsbCxuYXZVcExlZnQ6bnVsbCxuYXZVcFJpZ2h0Om51bGwsbnVtT2N0YXZlczpudWxsLG9ic2VydmVyOm51bGwsb2Zmc2V0Om51bGwsb25BYm9ydDpudWxsLG9uQWN0aXZhdGU6bnVsbCxvbkFmdGVyUHJpbnQ6bnVsbCxvbkJlZm9yZVByaW50Om51bGwsb25CZWdpbjpudWxsLG9uQ2FuY2VsOm51bGwsb25DYW5QbGF5Om51bGwsb25DYW5QbGF5VGhyb3VnaDpudWxsLG9uQ2hhbmdlOm51bGwsb25DbGljazpudWxsLG9uQ2xvc2U6bnVsbCxvbkNvcHk6bnVsbCxvbkN1ZUNoYW5nZTpudWxsLG9uQ3V0Om51bGwsb25EYmxDbGljazpudWxsLG9uRHJhZzpudWxsLG9uRHJhZ0VuZDpudWxsLG9uRHJhZ0VudGVyOm51bGwsb25EcmFnRXhpdDpudWxsLG9uRHJhZ0xlYXZlOm51bGwsb25EcmFnT3ZlcjpudWxsLG9uRHJhZ1N0YXJ0Om51bGwsb25Ecm9wOm51bGwsb25EdXJhdGlvbkNoYW5nZTpudWxsLG9uRW1wdGllZDpudWxsLG9uRW5kOm51bGwsb25FbmRlZDpudWxsLG9uRXJyb3I6bnVsbCxvbkZvY3VzOm51bGwsb25Gb2N1c0luOm51bGwsb25Gb2N1c091dDpudWxsLG9uSGFzaENoYW5nZTpudWxsLG9uSW5wdXQ6bnVsbCxvbkludmFsaWQ6bnVsbCxvbktleURvd246bnVsbCxvbktleVByZXNzOm51bGwsb25LZXlVcDpudWxsLG9uTG9hZDpudWxsLG9uTG9hZGVkRGF0YTpudWxsLG9uTG9hZGVkTWV0YWRhdGE6bnVsbCxvbkxvYWRTdGFydDpudWxsLG9uTWVzc2FnZTpudWxsLG9uTW91c2VEb3duOm51bGwsb25Nb3VzZUVudGVyOm51bGwsb25Nb3VzZUxlYXZlOm51bGwsb25Nb3VzZU1vdmU6bnVsbCxvbk1vdXNlT3V0Om51bGwsb25Nb3VzZU92ZXI6bnVsbCxvbk1vdXNlVXA6bnVsbCxvbk1vdXNlV2hlZWw6bnVsbCxvbk9mZmxpbmU6bnVsbCxvbk9ubGluZTpudWxsLG9uUGFnZUhpZGU6bnVsbCxvblBhZ2VTaG93Om51bGwsb25QYXN0ZTpudWxsLG9uUGF1c2U6bnVsbCxvblBsYXk6bnVsbCxvblBsYXlpbmc6bnVsbCxvblBvcFN0YXRlOm51bGwsb25Qcm9ncmVzczpudWxsLG9uUmF0ZUNoYW5nZTpudWxsLG9uUmVwZWF0Om51bGwsb25SZXNldDpudWxsLG9uUmVzaXplOm51bGwsb25TY3JvbGw6bnVsbCxvblNlZWtlZDpudWxsLG9uU2Vla2luZzpudWxsLG9uU2VsZWN0Om51bGwsb25TaG93Om51bGwsb25TdGFsbGVkOm51bGwsb25TdG9yYWdlOm51bGwsb25TdWJtaXQ6bnVsbCxvblN1c3BlbmQ6bnVsbCxvblRpbWVVcGRhdGU6bnVsbCxvblRvZ2dsZTpudWxsLG9uVW5sb2FkOm51bGwsb25Wb2x1bWVDaGFuZ2U6bnVsbCxvbldhaXRpbmc6bnVsbCxvblpvb206bnVsbCxvcGFjaXR5Om51bGwsb3BlcmF0b3I6bnVsbCxvcmRlcjpudWxsLG9yaWVudDpudWxsLG9yaWVudGF0aW9uOm51bGwsb3JpZ2luOm51bGwsb3ZlcmZsb3c6bnVsbCxvdmVybGF5Om51bGwsb3ZlcmxpbmVQb3NpdGlvbjpMZSxvdmVybGluZVRoaWNrbmVzczpMZSxwYWludE9yZGVyOm51bGwscGFub3NlMTpudWxsLHBhdGg6bnVsbCxwYXRoTGVuZ3RoOkxlLHBhdHRlcm5Db250ZW50VW5pdHM6bnVsbCxwYXR0ZXJuVHJhbnNmb3JtOm51bGwscGF0dGVyblVuaXRzOm51bGwscGhhc2U6bnVsbCxwaW5nOkt0LHBpdGNoOm51bGwscGxheWJhY2tPcmRlcjpudWxsLHBvaW50ZXJFdmVudHM6bnVsbCxwb2ludHM6bnVsbCxwb2ludHNBdFg6TGUscG9pbnRzQXRZOkxlLHBvaW50c0F0WjpMZSxwcmVzZXJ2ZUFscGhhOm51bGwscHJlc2VydmVBc3BlY3RSYXRpbzpudWxsLHByaW1pdGl2ZVVuaXRzOm51bGwscHJvcGFnYXRlOm51bGwscHJvcGVydHk6ZWEscjpudWxsLHJhZGl1czpudWxsLHJlZmVycmVyUG9saWN5Om51bGwscmVmWDpudWxsLHJlZlk6bnVsbCxyZWw6ZWEscmV2OmVhLHJlbmRlcmluZ0ludGVudDpudWxsLHJlcGVhdENvdW50Om51bGwscmVwZWF0RHVyOm51bGwscmVxdWlyZWRFeHRlbnNpb25zOmVhLHJlcXVpcmVkRmVhdHVyZXM6ZWEscmVxdWlyZWRGb250czplYSxyZXF1aXJlZEZvcm1hdHM6ZWEscmVzb3VyY2U6bnVsbCxyZXN0YXJ0Om51bGwscmVzdWx0Om51bGwscm90YXRlOm51bGwscng6bnVsbCxyeTpudWxsLHNjYWxlOm51bGwsc2VlZDpudWxsLHNoYXBlUmVuZGVyaW5nOm51bGwsc2lkZTpudWxsLHNsb3BlOm51bGwsc25hcHNob3RUaW1lOm51bGwsc3BlY3VsYXJDb25zdGFudDpMZSxzcGVjdWxhckV4cG9uZW50OkxlLHNwcmVhZE1ldGhvZDpudWxsLHNwYWNpbmc6bnVsbCxzdGFydE9mZnNldDpudWxsLHN0ZERldmlhdGlvbjpudWxsLHN0ZW1oOm51bGwsc3RlbXY6bnVsbCxzdGl0Y2hUaWxlczpudWxsLHN0b3BDb2xvcjpudWxsLHN0b3BPcGFjaXR5Om51bGwsc3RyaWtldGhyb3VnaFBvc2l0aW9uOkxlLHN0cmlrZXRocm91Z2hUaGlja25lc3M6TGUsc3RyaW5nOm51bGwsc3Ryb2tlOm51bGwsc3Ryb2tlRGFzaEFycmF5OmVhLHN0cm9rZURhc2hPZmZzZXQ6bnVsbCxzdHJva2VMaW5lQ2FwOm51bGwsc3Ryb2tlTGluZUpvaW46bnVsbCxzdHJva2VNaXRlckxpbWl0OkxlLHN0cm9rZU9wYWNpdHk6TGUsc3Ryb2tlV2lkdGg6bnVsbCxzdHlsZTpudWxsLHN1cmZhY2VTY2FsZTpMZSxzeW5jQmVoYXZpb3I6bnVsbCxzeW5jQmVoYXZpb3JEZWZhdWx0Om51bGwsc3luY01hc3RlcjpudWxsLHN5bmNUb2xlcmFuY2U6bnVsbCxzeW5jVG9sZXJhbmNlRGVmYXVsdDpudWxsLHN5c3RlbUxhbmd1YWdlOmVhLHRhYkluZGV4OkxlLHRhYmxlVmFsdWVzOm51bGwsdGFyZ2V0Om51bGwsdGFyZ2V0WDpMZSx0YXJnZXRZOkxlLHRleHRBbmNob3I6bnVsbCx0ZXh0RGVjb3JhdGlvbjpudWxsLHRleHRSZW5kZXJpbmc6bnVsbCx0ZXh0TGVuZ3RoOm51bGwsdGltZWxpbmVCZWdpbjpudWxsLHRpdGxlOm51bGwsdHJhbnNmb3JtQmVoYXZpb3I6bnVsbCx0eXBlOm51bGwsdHlwZU9mOmVhLHRvOm51bGwsdHJhbnNmb3JtOm51bGwsdHJhbnNmb3JtT3JpZ2luOm51bGwsdTE6bnVsbCx1MjpudWxsLHVuZGVybGluZVBvc2l0aW9uOkxlLHVuZGVybGluZVRoaWNrbmVzczpMZSx1bmljb2RlOm51bGwsdW5pY29kZUJpZGk6bnVsbCx1bmljb2RlUmFuZ2U6bnVsbCx1bml0c1BlckVtOkxlLHZhbHVlczpudWxsLHZBbHBoYWJldGljOkxlLHZNYXRoZW1hdGljYWw6TGUsdmVjdG9yRWZmZWN0Om51bGwsdkhhbmdpbmc6TGUsdklkZW9ncmFwaGljOkxlLHZlcnNpb246bnVsbCx2ZXJ0QWR2WTpMZSx2ZXJ0T3JpZ2luWDpMZSx2ZXJ0T3JpZ2luWTpMZSx2aWV3Qm94Om51bGwsdmlld1RhcmdldDpudWxsLHZpc2liaWxpdHk6bnVsbCx3aWR0aDpudWxsLHdpZHRoczpudWxsLHdvcmRTcGFjaW5nOm51bGwsd3JpdGluZ01vZGU6bnVsbCx4Om51bGwseDE6bnVsbCx4MjpudWxsLHhDaGFubmVsU2VsZWN0b3I6bnVsbCx4SGVpZ2h0OkxlLHk6bnVsbCx5MTpudWxsLHkyOm51bGwseUNoYW5uZWxTZWxlY3RvcjpudWxsLHo6bnVsbCx6b29tQW5kUGFuOm51bGx9LHNwYWNlOiJzdmciLHRyYW5zZm9ybTpLSH0pfSk7dmFyIFhKLCRldD1uKCgpPT57TW4oKTtYSj1fYSh7cHJvcGVydGllczp7eExpbmtBY3R1YXRlOm51bGwseExpbmtBcmNSb2xlOm51bGwseExpbmtIcmVmOm51bGwseExpbmtSb2xlOm51bGwseExpbmtTaG93Om51bGwseExpbmtUaXRsZTpudWxsLHhMaW5rVHlwZTpudWxsfSxzcGFjZToieGxpbmsiLHRyYW5zZm9ybSh0LGUpe3JldHVybiJ4bGluazoiK2Uuc2xpY2UoNSkudG9Mb3dlckNhc2UoKX19KX0pO3ZhciBRSixEZXQ9bigoKT0+e01uKCk7WkooKTtRSj1fYSh7YXR0cmlidXRlczp7eG1sbnN4bGluazoieG1sbnM6eGxpbmsifSxwcm9wZXJ0aWVzOnt4bWxuc1hMaW5rOm51bGwseG1sbnM6bnVsbH0sc3BhY2U6InhtbG5zIix0cmFuc2Zvcm06Skh9KX0pO3ZhciBLSixFZXQ9bigoKT0+e01uKCk7S0o9X2Eoe3Byb3BlcnRpZXM6e3htbEJhc2U6bnVsbCx4bWxMYW5nOm51bGwseG1sU3BhY2U6bnVsbH0sc3BhY2U6InhtbCIsdHJhbnNmb3JtKHQsZSl7cmV0dXJuInhtbDoiK2Uuc2xpY2UoMykudG9Mb3dlckNhc2UoKX19KX0pO3ZhciBOZXQ9bigoKT0+e30pO2Z1bmN0aW9uIEpKKHQsZSl7bGV0IGE9TjYoZSkscj1lLGk9WjE7aWYoYSBpbiB0Lm5vcm1hbClyZXR1cm4gdC5wcm9wZXJ0eVt0Lm5vcm1hbFthXV07aWYoYS5sZW5ndGg+NCYmYS5zbGljZSgwLDQpPT09ImRhdGEiJiZudDEudGVzdChlKSl7aWYoZS5jaGFyQXQoNCk9PT0iLSIpe2xldCBvPWUuc2xpY2UoNSkucmVwbGFjZShQZXQsY3QxKTtyPSJkYXRhIitvLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK28uc2xpY2UoMSl9ZWxzZXtsZXQgbz1lLnNsaWNlKDQpO2lmKCFQZXQudGVzdChvKSl7bGV0IHM9by5yZXBsYWNlKHN0MSxsdDEpO3MuY2hhckF0KDApIT09Ii0iJiYocz0iLSIrcyksZT0iZGF0YSIrc319aT13bn1yZXR1cm4gbmV3IGkocixlKX1mdW5jdGlvbiBsdDEodCl7cmV0dXJuIi0iK3QudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBjdDEodCl7cmV0dXJuIHQuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCl9dmFyIHN0MSxQZXQsbnQxLElldD1uKCgpPT57V0ooKTtVSigpO1hIKCk7c3QxPS9bQS1aXS9nLFBldD0vLVthLXpdL2csbnQxPS9eZGF0YVstXHcuOl0rJC9pfSk7dmFyIEZldCxlcSxlZWU9bigoKT0+e3pldCgpO0NldCgpO1RldCgpO0FldCgpOyRldCgpO0RldCgpO0VldCgpO05ldCgpO0lldCgpO1hIKCk7RmV0PVZKKFtHSixMZXQsWEosUUosS0pdLCJodG1sIiksZXE9VkooW0dKLF9ldCxYSixRSixLSl0sInN2ZyIpfSk7ZnVuY3Rpb24gdGVlKHQsZSl7aWYodD10LnJlcGxhY2UoZS5zdWJzZXQ/aHQxKGUuc3Vic2V0KTpkdDEsciksZS5zdWJzZXR8fGUuZXNjYXBlT25seSlyZXR1cm4gdDtyZXR1cm4gdC5yZXBsYWNlKGZ0MSxhKS5yZXBsYWNlKHV0MSxyKTtmdW5jdGlvbiBhKGksbyxzKXtyZXR1cm4gZS5mb3JtYXQoKGkuY2hhckNvZGVBdCgwKS01NTI5NikqMTAyNCtpLmNoYXJDb2RlQXQoMSktNTYzMjArNjU1MzYscy5jaGFyQ29kZUF0KG8rMiksZSl9ZnVuY3Rpb24gcihpLG8scyl7cmV0dXJuIGUuZm9ybWF0KGkuY2hhckNvZGVBdCgwKSxzLmNoYXJDb2RlQXQobysxKSxlKX19ZnVuY3Rpb24gaHQxKHQpe2xldCBlPU9ldC5nZXQodCk7cmV0dXJuIGV8fChlPW10MSh0KSxPZXQuc2V0KHQsZSkpLGV9ZnVuY3Rpb24gbXQxKHQpe2xldCBlPVtdLGE9LTE7Zm9yKDsrK2E8dC5sZW5ndGg7KWUucHVzaCh0W2FdLnJlcGxhY2UocHQxLCJcXCQmIikpO3JldHVybiBuZXcgUmVnRXhwKCIoPzoiK2Uuam9pbigifCIpKyIpIiwiZyIpfXZhciBkdDEsZnQxLHV0MSxwdDEsT2V0LEJldD1uKCgpPT57ZHQxPS9bIiYnPD5gXS9nLGZ0MT0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csdXQxPS9bXHgwMS1cdFx2XGZceDBFLVx4MUZceDdGXHg4MVx4OERceDhGXHg5MFx4OURceEEwLVx1RkZGRl0vZyxwdDE9L1t8XFx7fSgpW1xdXiQrKj8uXS9nLE9ldD1uZXcgV2Vha01hcH0pO2Z1bmN0aW9uIFJldCh0LGUsYSl7bGV0IHI9IiYjeCIrdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gYSYmZSYmIWd0MS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpP3I6cisiOyJ9dmFyIGd0MSxIZXQ9bigoKT0+e2d0MT0vW1xkQS1GYS1mXS99KTtmdW5jdGlvbiBxZXQodCxlLGEpe2xldCByPSImIyIrU3RyaW5nKHQpO3JldHVybiBhJiZlJiYheHQxLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShlKSk/cjpyKyI7In12YXIgeHQxLFZldD1uKCgpPT57eHQxPS9cZC99KTt2YXIgVWV0LGpldD1uKCgpPT57VWV0PVsiQUVsaWciLCJBTVAiLCJBYWN1dGUiLCJBY2lyYyIsIkFncmF2ZSIsIkFyaW5nIiwiQXRpbGRlIiwiQXVtbCIsIkNPUFkiLCJDY2VkaWwiLCJFVEgiLCJFYWN1dGUiLCJFY2lyYyIsIkVncmF2ZSIsIkV1bWwiLCJHVCIsIklhY3V0ZSIsIkljaXJjIiwiSWdyYXZlIiwiSXVtbCIsIkxUIiwiTnRpbGRlIiwiT2FjdXRlIiwiT2NpcmMiLCJPZ3JhdmUiLCJPc2xhc2giLCJPdGlsZGUiLCJPdW1sIiwiUVVPVCIsIlJFRyIsIlRIT1JOIiwiVWFjdXRlIiwiVWNpcmMiLCJVZ3JhdmUiLCJVdW1sIiwiWWFjdXRlIiwiYWFjdXRlIiwiYWNpcmMiLCJhY3V0ZSIsImFlbGlnIiwiYWdyYXZlIiwiYW1wIiwiYXJpbmciLCJhdGlsZGUiLCJhdW1sIiwiYnJ2YmFyIiwiY2NlZGlsIiwiY2VkaWwiLCJjZW50IiwiY29weSIsImN1cnJlbiIsImRlZyIsImRpdmlkZSIsImVhY3V0ZSIsImVjaXJjIiwiZWdyYXZlIiwiZXRoIiwiZXVtbCIsImZyYWMxMiIsImZyYWMxNCIsImZyYWMzNCIsImd0IiwiaWFjdXRlIiwiaWNpcmMiLCJpZXhjbCIsImlncmF2ZSIsImlxdWVzdCIsIml1bWwiLCJsYXF1byIsImx0IiwibWFjciIsIm1pY3JvIiwibWlkZG90IiwibmJzcCIsIm5vdCIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjIiwib2dyYXZlIiwib3JkZiIsIm9yZG0iLCJvc2xhc2giLCJvdGlsZGUiLCJvdW1sIiwicGFyYSIsInBsdXNtbiIsInBvdW5kIiwicXVvdCIsInJhcXVvIiwicmVnIiwic2VjdCIsInNoeSIsInN1cDEiLCJzdXAyIiwic3VwMyIsInN6bGlnIiwidGhvcm4iLCJ0aW1lcyIsInVhY3V0ZSIsInVjaXJjIiwidWdyYXZlIiwidW1sIiwidXVtbCIsInlhY3V0ZSIsInllbiIsInl1bWwiXX0pO3ZhciB0cSxXZXQ9bigoKT0+e3RxPXtuYnNwOiJceEEwIixpZXhjbDoiXHhBMSIsY2VudDoiXHhBMiIscG91bmQ6Ilx4QTMiLGN1cnJlbjoiXHhBNCIseWVuOiJceEE1IixicnZiYXI6Ilx4QTYiLHNlY3Q6Ilx4QTciLHVtbDoiXHhBOCIsY29weToiXHhBOSIsb3JkZjoiXHhBQSIsbGFxdW86Ilx4QUIiLG5vdDoiXHhBQyIsc2h5OiJceEFEIixyZWc6Ilx4QUUiLG1hY3I6Ilx4QUYiLGRlZzoiXHhCMCIscGx1c21uOiJceEIxIixzdXAyOiJceEIyIixzdXAzOiJceEIzIixhY3V0ZToiXHhCNCIsbWljcm86Ilx4QjUiLHBhcmE6Ilx4QjYiLG1pZGRvdDoiXHhCNyIsY2VkaWw6Ilx4QjgiLHN1cDE6Ilx4QjkiLG9yZG06Ilx4QkEiLHJhcXVvOiJceEJCIixmcmFjMTQ6Ilx4QkMiLGZyYWMxMjoiXHhCRCIsZnJhYzM0OiJceEJFIixpcXVlc3Q6Ilx4QkYiLEFncmF2ZToiXHhDMCIsQWFjdXRlOiJceEMxIixBY2lyYzoiXHhDMiIsQXRpbGRlOiJceEMzIixBdW1sOiJceEM0IixBcmluZzoiXHhDNSIsQUVsaWc6Ilx4QzYiLENjZWRpbDoiXHhDNyIsRWdyYXZlOiJceEM4IixFYWN1dGU6Ilx4QzkiLEVjaXJjOiJceENBIixFdW1sOiJceENCIixJZ3JhdmU6Ilx4Q0MiLElhY3V0ZToiXHhDRCIsSWNpcmM6Ilx4Q0UiLEl1bWw6Ilx4Q0YiLEVUSDoiXHhEMCIsTnRpbGRlOiJceEQxIixPZ3JhdmU6Ilx4RDIiLE9hY3V0ZToiXHhEMyIsT2NpcmM6Ilx4RDQiLE90aWxkZToiXHhENSIsT3VtbDoiXHhENiIsdGltZXM6Ilx4RDciLE9zbGFzaDoiXHhEOCIsVWdyYXZlOiJceEQ5IixVYWN1dGU6Ilx4REEiLFVjaXJjOiJceERCIixVdW1sOiJceERDIixZYWN1dGU6Ilx4REQiLFRIT1JOOiJceERFIixzemxpZzoiXHhERiIsYWdyYXZlOiJceEUwIixhYWN1dGU6Ilx4RTEiLGFjaXJjOiJceEUyIixhdGlsZGU6Ilx4RTMiLGF1bWw6Ilx4RTQiLGFyaW5nOiJceEU1IixhZWxpZzoiXHhFNiIsY2NlZGlsOiJceEU3IixlZ3JhdmU6Ilx4RTgiLGVhY3V0ZToiXHhFOSIsZWNpcmM6Ilx4RUEiLGV1bWw6Ilx4RUIiLGlncmF2ZToiXHhFQyIsaWFjdXRlOiJceEVEIixpY2lyYzoiXHhFRSIsaXVtbDoiXHhFRiIsZXRoOiJceEYwIixudGlsZGU6Ilx4RjEiLG9ncmF2ZToiXHhGMiIsb2FjdXRlOiJceEYzIixvY2lyYzoiXHhGNCIsb3RpbGRlOiJceEY1IixvdW1sOiJceEY2IixkaXZpZGU6Ilx4RjciLG9zbGFzaDoiXHhGOCIsdWdyYXZlOiJceEY5Iix1YWN1dGU6Ilx4RkEiLHVjaXJjOiJceEZCIix1dW1sOiJceEZDIix5YWN1dGU6Ilx4RkQiLHRob3JuOiJceEZFIix5dW1sOiJceEZGIixmbm9mOiJcdTAxOTIiLEFscGhhOiJcdTAzOTEiLEJldGE6Ilx1MDM5MiIsR2FtbWE6Ilx1MDM5MyIsRGVsdGE6Ilx1MDM5NCIsRXBzaWxvbjoiXHUwMzk1IixaZXRhOiJcdTAzOTYiLEV0YToiXHUwMzk3IixUaGV0YToiXHUwMzk4IixJb3RhOiJcdTAzOTkiLEthcHBhOiJcdTAzOUEiLExhbWJkYToiXHUwMzlCIixNdToiXHUwMzlDIixOdToiXHUwMzlEIixYaToiXHUwMzlFIixPbWljcm9uOiJcdTAzOUYiLFBpOiJcdTAzQTAiLFJobzoiXHUwM0ExIixTaWdtYToiXHUwM0EzIixUYXU6Ilx1MDNBNCIsVXBzaWxvbjoiXHUwM0E1IixQaGk6Ilx1MDNBNiIsQ2hpOiJcdTAzQTciLFBzaToiXHUwM0E4IixPbWVnYToiXHUwM0E5IixhbHBoYToiXHUwM0IxIixiZXRhOiJcdTAzQjIiLGdhbW1hOiJcdTAzQjMiLGRlbHRhOiJcdTAzQjQiLGVwc2lsb246Ilx1MDNCNSIsemV0YToiXHUwM0I2IixldGE6Ilx1MDNCNyIsdGhldGE6Ilx1MDNCOCIsaW90YToiXHUwM0I5IixrYXBwYToiXHUwM0JBIixsYW1iZGE6Ilx1MDNCQiIsbXU6Ilx1MDNCQyIsbnU6Ilx1MDNCRCIseGk6Ilx1MDNCRSIsb21pY3JvbjoiXHUwM0JGIixwaToiXHUwM0MwIixyaG86Ilx1MDNDMSIsc2lnbWFmOiJcdTAzQzIiLHNpZ21hOiJcdTAzQzMiLHRhdToiXHUwM0M0Iix1cHNpbG9uOiJcdTAzQzUiLHBoaToiXHUwM0M2IixjaGk6Ilx1MDNDNyIscHNpOiJcdTAzQzgiLG9tZWdhOiJcdTAzQzkiLHRoZXRhc3ltOiJcdTAzRDEiLHVwc2loOiJcdTAzRDIiLHBpdjoiXHUwM0Q2IixidWxsOiJcdTIwMjIiLGhlbGxpcDoiXHUyMDI2IixwcmltZToiXHUyMDMyIixQcmltZToiXHUyMDMzIixvbGluZToiXHUyMDNFIixmcmFzbDoiXHUyMDQ0Iix3ZWllcnA6Ilx1MjExOCIsaW1hZ2U6Ilx1MjExMSIscmVhbDoiXHUyMTFDIix0cmFkZToiXHUyMTIyIixhbGVmc3ltOiJcdTIxMzUiLGxhcnI6Ilx1MjE5MCIsdWFycjoiXHUyMTkxIixyYXJyOiJcdTIxOTIiLGRhcnI6Ilx1MjE5MyIsaGFycjoiXHUyMTk0IixjcmFycjoiXHUyMUI1IixsQXJyOiJcdTIxRDAiLHVBcnI6Ilx1MjFEMSIsckFycjoiXHUyMUQyIixkQXJyOiJcdTIxRDMiLGhBcnI6Ilx1MjFENCIsZm9yYWxsOiJcdTIyMDAiLHBhcnQ6Ilx1MjIwMiIsZXhpc3Q6Ilx1MjIwMyIsZW1wdHk6Ilx1MjIwNSIsbmFibGE6Ilx1MjIwNyIsaXNpbjoiXHUyMjA4Iixub3RpbjoiXHUyMjA5IixuaToiXHUyMjBCIixwcm9kOiJcdTIyMEYiLHN1bToiXHUyMjExIixtaW51czoiXHUyMjEyIixsb3dhc3Q6Ilx1MjIxNyIscmFkaWM6Ilx1MjIxQSIscHJvcDoiXHUyMjFEIixpbmZpbjoiXHUyMjFFIixhbmc6Ilx1MjIyMCIsYW5kOiJcdTIyMjciLG9yOiJcdTIyMjgiLGNhcDoiXHUyMjI5IixjdXA6Ilx1MjIyQSIsaW50OiJcdTIyMkIiLHRoZXJlNDoiXHUyMjM0IixzaW06Ilx1MjIzQyIsY29uZzoiXHUyMjQ1Iixhc3ltcDoiXHUyMjQ4IixuZToiXHUyMjYwIixlcXVpdjoiXHUyMjYxIixsZToiXHUyMjY0IixnZToiXHUyMjY1IixzdWI6Ilx1MjI4MiIsc3VwOiJcdTIyODMiLG5zdWI6Ilx1MjI4NCIsc3ViZToiXHUyMjg2IixzdXBlOiJcdTIyODciLG9wbHVzOiJcdTIyOTUiLG90aW1lczoiXHUyMjk3IixwZXJwOiJcdTIyQTUiLHNkb3Q6Ilx1MjJDNSIsbGNlaWw6Ilx1MjMwOCIscmNlaWw6Ilx1MjMwOSIsbGZsb29yOiJcdTIzMEEiLHJmbG9vcjoiXHUyMzBCIixsYW5nOiJcdTIzMjkiLHJhbmc6Ilx1MjMyQSIsbG96OiJcdTI1Q0EiLHNwYWRlczoiXHUyNjYwIixjbHViczoiXHUyNjYzIixoZWFydHM6Ilx1MjY2NSIsZGlhbXM6Ilx1MjY2NiIscXVvdDonIicsYW1wOiImIixsdDoiPCIsZ3Q6Ij4iLE9FbGlnOiJcdTAxNTIiLG9lbGlnOiJcdTAxNTMiLFNjYXJvbjoiXHUwMTYwIixzY2Fyb246Ilx1MDE2MSIsWXVtbDoiXHUwMTc4IixjaXJjOiJcdTAyQzYiLHRpbGRlOiJcdTAyREMiLGVuc3A6Ilx1MjAwMiIsZW1zcDoiXHUyMDAzIix0aGluc3A6Ilx1MjAwOSIsenduajoiXHUyMDBDIix6d2o6Ilx1MjAwRCIsbHJtOiJcdTIwMEUiLHJsbToiXHUyMDBGIixuZGFzaDoiXHUyMDEzIixtZGFzaDoiXHUyMDE0Iixsc3F1bzoiXHUyMDE4Iixyc3F1bzoiXHUyMDE5IixzYnF1bzoiXHUyMDFBIixsZHF1bzoiXHUyMDFDIixyZHF1bzoiXHUyMDFEIixiZHF1bzoiXHUyMDFFIixkYWdnZXI6Ilx1MjAyMCIsRGFnZ2VyOiJcdTIwMjEiLHBlcm1pbDoiXHUyMDMwIixsc2FxdW86Ilx1MjAzOSIscnNhcXVvOiJcdTIwM0EiLGV1cm86Ilx1MjBBQyJ9fSk7dmFyIEdldCxZZXQ9bigoKT0+e0dldD1bImNlbnQiLCJjb3B5IiwiZGl2aWRlIiwiZ3QiLCJsdCIsIm5vdCIsInBhcmEiLCJ0aW1lcyJdfSk7ZnVuY3Rpb24gWGV0KHQsZSxhLHIpe2xldCBpPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7aWYoWmV0LmNhbGwoYWVlLGkpKXtsZXQgbz1hZWVbaV0scz0iJiIrbztyZXR1cm4gYSYmVWV0LmluY2x1ZGVzKG8pJiYhR2V0LmluY2x1ZGVzKG8pJiYoIXJ8fGUmJmUhPT02MSYmYnQxLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpP3M6cysiOyJ9cmV0dXJuIiJ9dmFyIFpldCxhZWUsYXEsYnQxLFFldD1uKCgpPT57amV0KCk7V2V0KCk7WWV0KCk7WmV0PXt9Lmhhc093blByb3BlcnR5LGFlZT17fTtmb3IoYXEgaW4gdHEpWmV0LmNhbGwodHEsYXEpJiYoYWVlW3RxW2FxXV09YXEpO2J0MT0vW15cZEEtWmEtel0vfSk7ZnVuY3Rpb24gS2V0KHQsZSxhKXtsZXQgcj1SZXQodCxlLGEub21pdE9wdGlvbmFsU2VtaWNvbG9ucyksaTtpZigoYS51c2VOYW1lZFJlZmVyZW5jZXN8fGEudXNlU2hvcnRlc3RSZWZlcmVuY2VzKSYmKGk9WGV0KHQsZSxhLm9taXRPcHRpb25hbFNlbWljb2xvbnMsYS5hdHRyaWJ1dGUpKSwoYS51c2VTaG9ydGVzdFJlZmVyZW5jZXN8fCFpKSYmYS51c2VTaG9ydGVzdFJlZmVyZW5jZXMpe2xldCBvPXFldCh0LGUsYS5vbWl0T3B0aW9uYWxTZW1pY29sb25zKTtvLmxlbmd0aDxyLmxlbmd0aCYmKHI9byl9cmV0dXJuIGkmJighYS51c2VTaG9ydGVzdFJlZmVyZW5jZXN8fGkubGVuZ3RoPHIubGVuZ3RoKT9pOnJ9dmFyIEpldD1uKCgpPT57SGV0KCk7VmV0KCk7UWV0KCl9KTtmdW5jdGlvbiBldHQodCl7cmV0dXJuIiYjeCIrdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSsiOyJ9dmFyIHR0dD1uKCgpPT57fSk7ZnVuY3Rpb24gQ2kodCxlKXtyZXR1cm4gdGVlKHQsT2JqZWN0LmFzc2lnbih7Zm9ybWF0OktldH0sZSkpfWZ1bmN0aW9uIGYyMih0LGUpe3JldHVybiB0ZWUodCxPYmplY3QuYXNzaWduKHtmb3JtYXQ6ZXR0fSxlKSl9dmFyIGF0dD1uKCgpPT57QmV0KCk7SmV0KCk7dHR0KCl9KTt2YXIgcnE9bigoKT0+e2F0dCgpfSk7ZnVuY3Rpb24gcnR0KHQsZSxhLHIpe3JldHVybiByLnNldHRpbmdzLmJvZ3VzQ29tbWVudHM/Ijw/IitDaSh0LnZhbHVlLE9iamVjdC5hc3NpZ24oe30sci5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLHtzdWJzZXQ6eXQxfSkpKyI+IjoiPCEtLSIrdC52YWx1ZS5yZXBsYWNlKHZ0MSxpKSsiLS0+IjtmdW5jdGlvbiBpKG8pe3JldHVybiBDaShvLE9iamVjdC5hc3NpZ24oe30sci5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLHtzdWJzZXQ6d3QxfSkpfX12YXIgdnQxLHl0MSx3dDEsaXR0PW4oKCk9PntycSgpO3Z0MT0vXj58Xi0+fDwhLS18LS0+fC0tIT58PCEtJC9nLHl0MT1bIj4iXSx3dDE9WyI8IiwiPiJdfSk7ZnVuY3Rpb24gb3R0KHQsZSxhLHIpe3JldHVybiI8ISIrKHIuc2V0dGluZ3MudXBwZXJEb2N0eXBlPyJET0NUWVBFIjoiZG9jdHlwZSIpKyhyLnNldHRpbmdzLnRpZ2h0RG9jdHlwZT8iIjoiICIpKyJodG1sPiJ9dmFyIHN0dD1uKCgpPT57fSk7ZnVuY3Rpb24gYjIyKHQpe2xldCBlPVtdLGE9U3RyaW5nKHR8fCIiKSxyPWEuaW5kZXhPZigiLCIpLGk9MCxvPSExO2Zvcig7IW87KXtyPT09LTEmJihyPWEubGVuZ3RoLG89ITApO2xldCBzPWEuc2xpY2UoaSxyKS50cmltKCk7KHN8fCFvKSYmZS5wdXNoKHMpLGk9cisxLHI9YS5pbmRleE9mKCIsIixpKX1yZXR1cm4gZX1mdW5jdGlvbiBudHQodCxlKXtsZXQgYT1lfHx7fTtyZXR1cm4odFt0Lmxlbmd0aC0xXT09PSIiP1suLi50LCIiXTp0KS5qb2luKChhLnBhZFJpZ2h0PyIgIjoiIikrIiwiKyhhLnBhZExlZnQ9PT0hMT8iIjoiICIpKS50cmltKCl9dmFyIGx0dD1uKCgpPT57fSk7ZnVuY3Rpb24geTIyKHQpe2xldCBlPVN0cmluZyh0fHwiIikudHJpbSgpO3JldHVybiBlP2Uuc3BsaXQoL1sgXHRcblxyXGZdKy9nKTpbXX1mdW5jdGlvbiBjdHQodCl7cmV0dXJuIHQuam9pbigiICIpLnRyaW0oKX12YXIgZHR0PW4oKCk9Pnt9KTtmdW5jdGlvbiB6bih0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiP3QudHlwZT09PSJ0ZXh0Ij9mdHQodC52YWx1ZSk6ITE6ZnR0KHQpfWZ1bmN0aW9uIGZ0dCh0KXtyZXR1cm4gdC5yZXBsYWNlKE10MSwiIik9PT0iIn12YXIgTXQxLHV0dD1uKCgpPT57TXQxPS9bIFx0XG5cZlxyXS9nfSk7dmFyIGlxPW4oKCk9Pnt1dHQoKX0pO2Z1bmN0aW9uIHB0dCh0KXtyZXR1cm4gZTtmdW5jdGlvbiBlKGEscixpKXtsZXQgbz1hP2EuY2hpbGRyZW46enQxLHM9KHJ8fDApK3QsbD1vW3NdO2lmKCFpKWZvcig7bCYmem4obCk7KXMrPXQsbD1vW3NdO3JldHVybiBsfX12YXIgTDEscmVlLHp0MSxpZWU9bigoKT0+e2lxKCk7TDE9cHR0KDEpLHJlZT1wdHQoLTEpLHp0MT1bXX0pO2Z1bmN0aW9uIG9xKHQpe3JldHVybiBlO2Z1bmN0aW9uIGUoYSxyLGkpe3JldHVybiBrdDEuY2FsbCh0LGEudGFnTmFtZSkmJnRbYS50YWdOYW1lXShhLHIsaSl9fXZhciBrdDEsb2VlPW4oKCk9PntrdDE9e30uaGFzT3duUHJvcGVydHl9KTtmdW5jdGlvbiBzZWUodCxlLGEpe2xldCByPUwxKGEsZSwhMCk7cmV0dXJuIXJ8fHIudHlwZSE9PSJjb21tZW50IiYmIShyLnR5cGU9PT0idGV4dCImJnpuKHIudmFsdWUuY2hhckF0KDApKSl9ZnVuY3Rpb24gU3QxKHQsZSxhKXtsZXQgcj1MMShhLGUpO3JldHVybiFyfHxyLnR5cGUhPT0iY29tbWVudCJ9ZnVuY3Rpb24gQ3QxKHQsZSxhKXtsZXQgcj1MMShhLGUpO3JldHVybiFyfHxyLnR5cGUhPT0iY29tbWVudCJ9ZnVuY3Rpb24gTHQxKHQsZSxhKXtsZXQgcj1MMShhLGUpO3JldHVybiByP3IudHlwZT09PSJlbGVtZW50IiYmKHIudGFnTmFtZT09PSJhZGRyZXNzInx8ci50YWdOYW1lPT09ImFydGljbGUifHxyLnRhZ05hbWU9PT0iYXNpZGUifHxyLnRhZ05hbWU9PT0iYmxvY2txdW90ZSJ8fHIudGFnTmFtZT09PSJkZXRhaWxzInx8ci50YWdOYW1lPT09ImRpdiJ8fHIudGFnTmFtZT09PSJkbCJ8fHIudGFnTmFtZT09PSJmaWVsZHNldCJ8fHIudGFnTmFtZT09PSJmaWdjYXB0aW9uInx8ci50YWdOYW1lPT09ImZpZ3VyZSJ8fHIudGFnTmFtZT09PSJmb290ZXIifHxyLnRhZ05hbWU9PT0iZm9ybSJ8fHIudGFnTmFtZT09PSJoMSJ8fHIudGFnTmFtZT09PSJoMiJ8fHIudGFnTmFtZT09PSJoMyJ8fHIudGFnTmFtZT09PSJoNCJ8fHIudGFnTmFtZT09PSJoNSJ8fHIudGFnTmFtZT09PSJoNiJ8fHIudGFnTmFtZT09PSJoZWFkZXIifHxyLnRhZ05hbWU9PT0iaGdyb3VwInx8ci50YWdOYW1lPT09ImhyInx8ci50YWdOYW1lPT09Im1haW4ifHxyLnRhZ05hbWU9PT0ibWVudSJ8fHIudGFnTmFtZT09PSJuYXYifHxyLnRhZ05hbWU9PT0ib2wifHxyLnRhZ05hbWU9PT0icCJ8fHIudGFnTmFtZT09PSJwcmUifHxyLnRhZ05hbWU9PT0ic2VjdGlvbiJ8fHIudGFnTmFtZT09PSJ0YWJsZSJ8fHIudGFnTmFtZT09PSJ1bCIpOiFhfHwhKGEudHlwZT09PSJlbGVtZW50IiYmKGEudGFnTmFtZT09PSJhInx8YS50YWdOYW1lPT09ImF1ZGlvInx8YS50YWdOYW1lPT09ImRlbCJ8fGEudGFnTmFtZT09PSJpbnMifHxhLnRhZ05hbWU9PT0ibWFwInx8YS50YWdOYW1lPT09Im5vc2NyaXB0Inx8YS50YWdOYW1lPT09InZpZGVvIikpfWZ1bmN0aW9uIFR0MSh0LGUsYSl7bGV0IHI9TDEoYSxlKTtyZXR1cm4hcnx8ci50eXBlPT09ImVsZW1lbnQiJiZyLnRhZ05hbWU9PT0ibGkifWZ1bmN0aW9uIF90MSh0LGUsYSl7bGV0IHI9TDEoYSxlKTtyZXR1cm4hIShyJiZyLnR5cGU9PT0iZWxlbWVudCImJihyLnRhZ05hbWU9PT0iZHQifHxyLnRhZ05hbWU9PT0iZGQiKSl9ZnVuY3Rpb24gQXQxKHQsZSxhKXtsZXQgcj1MMShhLGUpO3JldHVybiFyfHxyLnR5cGU9PT0iZWxlbWVudCImJihyLnRhZ05hbWU9PT0iZHQifHxyLnRhZ05hbWU9PT0iZGQiKX1mdW5jdGlvbiBodHQodCxlLGEpe2xldCByPUwxKGEsZSk7cmV0dXJuIXJ8fHIudHlwZT09PSJlbGVtZW50IiYmKHIudGFnTmFtZT09PSJycCJ8fHIudGFnTmFtZT09PSJydCIpfWZ1bmN0aW9uICR0MSh0LGUsYSl7bGV0IHI9TDEoYSxlKTtyZXR1cm4hcnx8ci50eXBlPT09ImVsZW1lbnQiJiZyLnRhZ05hbWU9PT0ib3B0Z3JvdXAifWZ1bmN0aW9uIER0MSh0LGUsYSl7bGV0IHI9TDEoYSxlKTtyZXR1cm4hcnx8ci50eXBlPT09ImVsZW1lbnQiJiYoci50YWdOYW1lPT09Im9wdGlvbiJ8fHIudGFnTmFtZT09PSJvcHRncm91cCIpfWZ1bmN0aW9uIEV0MSh0LGUsYSl7bGV0IHI9TDEoYSxlKTtyZXR1cm4hIShyJiZyLnR5cGU9PT0iZWxlbWVudCImJihyLnRhZ05hbWU9PT0idGJvZHkifHxyLnRhZ05hbWU9PT0idGZvb3QiKSl9ZnVuY3Rpb24gTnQxKHQsZSxhKXtsZXQgcj1MMShhLGUpO3JldHVybiFyfHxyLnR5cGU9PT0iZWxlbWVudCImJihyLnRhZ05hbWU9PT0idGJvZHkifHxyLnRhZ05hbWU9PT0idGZvb3QiKX1mdW5jdGlvbiBQdDEodCxlLGEpe3JldHVybiFMMShhLGUpfWZ1bmN0aW9uIEl0MSh0LGUsYSl7bGV0IHI9TDEoYSxlKTtyZXR1cm4hcnx8ci50eXBlPT09ImVsZW1lbnQiJiZyLnRhZ05hbWU9PT0idHIifWZ1bmN0aW9uIG10dCh0LGUsYSl7bGV0IHI9TDEoYSxlKTtyZXR1cm4hcnx8ci50eXBlPT09ImVsZW1lbnQiJiYoci50YWdOYW1lPT09InRkInx8ci50YWdOYW1lPT09InRoIil9dmFyIExkLG5lZT1uKCgpPT57aXEoKTtpZWUoKTtvZWUoKTtMZD1vcSh7Ym9keTpDdDEsY2FwdGlvbjpzZWUsY29sZ3JvdXA6c2VlLGRkOkF0MSxkdDpfdDEsaGVhZDpzZWUsaHRtbDpTdDEsbGk6VHQxLG9wdGdyb3VwOiR0MSxvcHRpb246RHQxLHA6THQxLHJwOmh0dCxydDpodHQsdGJvZHk6TnQxLHRkOm10dCx0Zm9vdDpQdDEsdGg6bXR0LHRoZWFkOkV0MSx0cjpJdDF9KX0pO2Z1bmN0aW9uIEZ0MSh0KXtsZXQgZT1MMSh0LC0xKTtyZXR1cm4hZXx8ZS50eXBlIT09ImNvbW1lbnQifWZ1bmN0aW9uIE90MSh0KXtsZXQgZT1uZXcgU2V0O2ZvcihsZXQgciBvZiB0LmNoaWxkcmVuKWlmKHIudHlwZT09PSJlbGVtZW50IiYmKHIudGFnTmFtZT09PSJiYXNlInx8ci50YWdOYW1lPT09InRpdGxlIikpe2lmKGUuaGFzKHIudGFnTmFtZSkpcmV0dXJuITE7ZS5hZGQoci50YWdOYW1lKX1sZXQgYT10LmNoaWxkcmVuWzBdO3JldHVybiFhfHxhLnR5cGU9PT0iZWxlbWVudCJ9ZnVuY3Rpb24gQnQxKHQpe2xldCBlPUwxKHQsLTEsITApO3JldHVybiFlfHxlLnR5cGUhPT0iY29tbWVudCImJiEoZS50eXBlPT09InRleHQiJiZ6bihlLnZhbHVlLmNoYXJBdCgwKSkpJiYhKGUudHlwZT09PSJlbGVtZW50IiYmKGUudGFnTmFtZT09PSJtZXRhInx8ZS50YWdOYW1lPT09ImxpbmsifHxlLnRhZ05hbWU9PT0ic2NyaXB0Inx8ZS50YWdOYW1lPT09InN0eWxlInx8ZS50YWdOYW1lPT09InRlbXBsYXRlIikpfWZ1bmN0aW9uIFJ0MSh0LGUsYSl7bGV0IHI9cmVlKGEsZSksaT1MMSh0LC0xLCEwKTtyZXR1cm4gYSYmciYmci50eXBlPT09ImVsZW1lbnQiJiZyLnRhZ05hbWU9PT0iY29sZ3JvdXAiJiZMZChyLGEuY2hpbGRyZW4uaW5kZXhPZihyKSxhKT8hMTohIShpJiZpLnR5cGU9PT0iZWxlbWVudCImJmkudGFnTmFtZT09PSJjb2wiKX1mdW5jdGlvbiBIdDEodCxlLGEpe2xldCByPXJlZShhLGUpLGk9TDEodCwtMSk7cmV0dXJuIGEmJnImJnIudHlwZT09PSJlbGVtZW50IiYmKHIudGFnTmFtZT09PSJ0aGVhZCJ8fHIudGFnTmFtZT09PSJ0Ym9keSIpJiZMZChyLGEuY2hpbGRyZW4uaW5kZXhPZihyKSxhKT8hMTohIShpJiZpLnR5cGU9PT0iZWxlbWVudCImJmkudGFnTmFtZT09PSJ0ciIpfXZhciBndHQseHR0PW4oKCk9PntpcSgpO2llZSgpO25lZSgpO29lZSgpO2d0dD1vcSh7Ym9keTpCdDEsY29sZ3JvdXA6UnQxLGhlYWQ6T3QxLGh0bWw6RnQxLHRib2R5Okh0MX0pfSk7ZnVuY3Rpb24gYnR0KHQsZSxhLHIpe2xldCBpPXIuc2NoZW1hLG89aS5zcGFjZT09PSJzdmciPyExOnIuc2V0dGluZ3Mub21pdE9wdGlvbmFsVGFncyxzPWkuc3BhY2U9PT0ic3ZnIj9yLnNldHRpbmdzLmNsb3NlRW1wdHlFbGVtZW50czpyLnNldHRpbmdzLnZvaWRzLmluY2x1ZGVzKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSxsPVtdLGY7aS5zcGFjZT09PSJodG1sIiYmdC50YWdOYW1lPT09InN2ZyImJihyLnNjaGVtYT1lcSk7bGV0IGM9cXQxKHIsdC5wcm9wZXJ0aWVzKSx1PXIuYWxsKGkuc3BhY2U9PT0iaHRtbCImJnQudGFnTmFtZT09PSJ0ZW1wbGF0ZSI/dC5jb250ZW50OnQpO3JldHVybiByLnNjaGVtYT1pLHUmJihzPSExKSwoY3x8IW98fCFndHQodCxlLGEpKSYmKGwucHVzaCgiPCIsdC50YWdOYW1lLGM/IiAiK2M6IiIpLHMmJihpLnNwYWNlPT09InN2ZyJ8fHIuc2V0dGluZ3MuY2xvc2VTZWxmQ2xvc2luZykmJihmPWMuY2hhckF0KGMubGVuZ3RoLTEpLCghci5zZXR0aW5ncy50aWdodFNlbGZDbG9zaW5nfHxmPT09Ii8ifHxmJiZmIT09JyInJiZmIT09IiciKSYmbC5wdXNoKCIgIiksbC5wdXNoKCIvIikpLGwucHVzaCgiPiIpKSxsLnB1c2godSksIXMmJighb3x8IUxkKHQsZSxhKSkmJmwucHVzaCgiPC8iK3QudGFnTmFtZSsiPiIpLGwuam9pbigiIil9ZnVuY3Rpb24gcXQxKHQsZSl7bGV0IGE9W10scj0tMSxpO2lmKGUpe2ZvcihpIGluIGUpaWYoZVtpXSE9PW51bGwmJmVbaV0hPT12b2lkIDApe2xldCBvPVZ0MSh0LGksZVtpXSk7byYmYS5wdXNoKG8pfX1mb3IoOysrcjxhLmxlbmd0aDspe2xldCBvPXQuc2V0dGluZ3MudGlnaHRBdHRyaWJ1dGVzP2Fbcl0uY2hhckF0KGFbcl0ubGVuZ3RoLTEpOnZvaWQgMDtyIT09YS5sZW5ndGgtMSYmbyE9PSciJyYmbyE9PSInIiYmKGFbcl0rPSIgIil9cmV0dXJuIGEuam9pbigiIil9ZnVuY3Rpb24gVnQxKHQsZSxhKXtsZXQgcj1KSih0LnNjaGVtYSxlKSxpPXQuc2V0dGluZ3MuYWxsb3dQYXJzZUVycm9ycyYmdC5zY2hlbWEuc3BhY2U9PT0iaHRtbCI/MDoxLG89dC5zZXR0aW5ncy5hbGxvd0Rhbmdlcm91c0NoYXJhY3RlcnM/MDoxLHM9dC5xdW90ZSxsO2lmKHIub3ZlcmxvYWRlZEJvb2xlYW4mJihhPT09ci5hdHRyaWJ1dGV8fGE9PT0iIik/YT0hMDooci5ib29sZWFufHxyLm92ZXJsb2FkZWRCb29sZWFuKSYmKHR5cGVvZiBhIT0ic3RyaW5nInx8YT09PXIuYXR0cmlidXRlfHxhPT09IiIpJiYoYT0hIWEpLGE9PW51bGx8fGE9PT0hMXx8dHlwZW9mIGE9PSJudW1iZXIiJiZOdW1iZXIuaXNOYU4oYSkpcmV0dXJuIiI7bGV0IGY9Q2koci5hdHRyaWJ1dGUsT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMse3N1YnNldDpzcS5uYW1lW2ldW29dfSkpO3JldHVybiBhPT09ITB8fChhPUFycmF5LmlzQXJyYXkoYSk/KHIuY29tbWFTZXBhcmF0ZWQ/bnR0OmN0dCkoYSx7cGFkTGVmdDohdC5zZXR0aW5ncy50aWdodENvbW1hU2VwYXJhdGVkTGlzdHN9KTpTdHJpbmcoYSksdC5zZXR0aW5ncy5jb2xsYXBzZUVtcHR5QXR0cmlidXRlcyYmIWEpP2Y6KHQuc2V0dGluZ3MucHJlZmVyVW5xdW90ZWQmJihsPUNpKGEsT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMse2F0dHJpYnV0ZTohMCxzdWJzZXQ6c3EudW5xdW90ZWRbaV1bb119KSkpLGwhPT1hJiYodC5zZXR0aW5ncy5xdW90ZVNtYXJ0JiZ3NihhLHMpPnc2KGEsdC5hbHRlcm5hdGl2ZSkmJihzPXQuYWx0ZXJuYXRpdmUpLGw9cytDaShhLE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLHtzdWJzZXQ6KHM9PT0iJyI/c3Euc2luZ2xlOnNxLmRvdWJsZSlbaV1bb10sYXR0cmlidXRlOiEwfSkpK3MpLGYrKGwmJiI9IitsKSl9dmFyIHNxLHZ0dD1uKCgpPT57R1EoKTtsdHQoKTtlZWUoKTtkdHQoKTtycSgpO25lZSgpO3h0dCgpO3NxPXtuYW1lOltbYAkKXGZcciAmLz0+YC5zcGxpdCgiIiksYAkKXGZcciAiJicvPT5cYGAuc3BsaXQoIiIpXSxbYFwwCQpcZlxyICImJy88PT5gLnNwbGl0KCIiKSxgXDAJClxmXHIgIiYnLzw9PlxgYC5zcGxpdCgiIildXSx1bnF1b3RlZDpbW2AJClxmXHIgJj5gLnNwbGl0KCIiKSxgXDAJClxmXHIgIiYnPD0+XGBgLnNwbGl0KCIiKV0sW2BcMAkKXGZcciAiJic8PT5cYGAuc3BsaXQoIiIpLGBcMAkKXGZcciAiJic8PT5cYGAuc3BsaXQoIiIpXV0sc2luZ2xlOltbIiYnIi5zcGxpdCgiIiksIlwiJidgIi5zcGxpdCgiIildLFsiXDAmJyIuc3BsaXQoIiIpLCJcMFwiJidgIi5zcGxpdCgiIildXSxkb3VibGU6W1snIiYnLnNwbGl0KCIiKSwiXCImJ2AiLnNwbGl0KCIiKV0sWydcMCImJy5zcGxpdCgiIiksIlwwXCImJ2AiLnNwbGl0KCIiKV1dfX0pO2Z1bmN0aW9uIG5xKHQsZSxhLHIpe3JldHVybiBhJiZhLnR5cGU9PT0iZWxlbWVudCImJihhLnRhZ05hbWU9PT0ic2NyaXB0Inx8YS50YWdOYW1lPT09InN0eWxlIik/dC52YWx1ZTpDaSh0LnZhbHVlLE9iamVjdC5hc3NpZ24oe30sci5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLHtzdWJzZXQ6VXQxfSkpfXZhciBVdDEsbGVlPW4oKCk9PntycSgpO1V0MT1bIjwiLCImIl19KTtmdW5jdGlvbiB5dHQodCxlLGEscil7cmV0dXJuIHIuc2V0dGluZ3MuYWxsb3dEYW5nZXJvdXNIdG1sP3QudmFsdWU6bnEodCxlLGEscil9dmFyIHd0dD1uKCgpPT57bGVlKCl9KTtmdW5jdGlvbiBNdHQodCxlLGEscil7cmV0dXJuIHIuYWxsKHQpfXZhciB6dHQ9bigoKT0+e30pO2Z1bmN0aW9uIGp0MSh0KXt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vZGUsIG5vdCBgIit0KyJgIil9ZnVuY3Rpb24gV3QxKHQpe2xldCBlPXQ7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tcGlsZSB1bmtub3duIG5vZGUgYCIrZS50eXBlKyJgIil9dmFyIGt0dCxTdHQ9bigoKT0+e2lLKCk7aXR0KCk7c3R0KCk7dnR0KCk7d3R0KCk7enR0KCk7bGVlKCk7a3R0PXNIKCJ0eXBlIix7aW52YWxpZDpqdDEsdW5rbm93bjpXdDEsaGFuZGxlcnM6e2NvbW1lbnQ6cnR0LGRvY3R5cGU6b3R0LGVsZW1lbnQ6YnR0LHJhdzp5dHQscm9vdDpNdHQsdGV4dDpucX19KX0pO2Z1bmN0aW9uIGNlZSh0LGUpe2xldCBhPWV8fEd0MSxyPWEucXVvdGV8fCciJyxpPXI9PT0nIic/IiciOiciJztpZihyIT09JyInJiZyIT09IiciKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBxdW90ZSBgIityKyJgLCBleHBlY3RlZCBgJ2Agb3IgYFwiYCIpO3JldHVybntvbmU6WHQxLGFsbDpRdDEsc2V0dGluZ3M6e29taXRPcHRpb25hbFRhZ3M6YS5vbWl0T3B0aW9uYWxUYWdzfHwhMSxhbGxvd1BhcnNlRXJyb3JzOmEuYWxsb3dQYXJzZUVycm9yc3x8ITEsYWxsb3dEYW5nZXJvdXNDaGFyYWN0ZXJzOmEuYWxsb3dEYW5nZXJvdXNDaGFyYWN0ZXJzfHwhMSxxdW90ZVNtYXJ0OmEucXVvdGVTbWFydHx8ITEscHJlZmVyVW5xdW90ZWQ6YS5wcmVmZXJVbnF1b3RlZHx8ITEsdGlnaHRBdHRyaWJ1dGVzOmEudGlnaHRBdHRyaWJ1dGVzfHwhMSx1cHBlckRvY3R5cGU6YS51cHBlckRvY3R5cGV8fCExLHRpZ2h0RG9jdHlwZTphLnRpZ2h0RG9jdHlwZXx8ITEsYm9ndXNDb21tZW50czphLmJvZ3VzQ29tbWVudHN8fCExLHRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0czphLnRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0c3x8ITEsdGlnaHRTZWxmQ2xvc2luZzphLnRpZ2h0U2VsZkNsb3Npbmd8fCExLGNvbGxhcHNlRW1wdHlBdHRyaWJ1dGVzOmEuY29sbGFwc2VFbXB0eUF0dHJpYnV0ZXN8fCExLGFsbG93RGFuZ2Vyb3VzSHRtbDphLmFsbG93RGFuZ2Vyb3VzSHRtbHx8ITEsdm9pZHM6YS52b2lkc3x8d2V0LGNoYXJhY3RlclJlZmVyZW5jZXM6YS5jaGFyYWN0ZXJSZWZlcmVuY2VzfHxZdDEsY2xvc2VTZWxmQ2xvc2luZzphLmNsb3NlU2VsZkNsb3Npbmd8fCExLGNsb3NlRW1wdHlFbGVtZW50czphLmNsb3NlRW1wdHlFbGVtZW50c3x8ITF9LHNjaGVtYTphLnNwYWNlPT09InN2ZyI/ZXE6RmV0LHF1b3RlOnIsYWx0ZXJuYXRpdmU6aX0ub25lKEFycmF5LmlzQXJyYXkodCk/e3R5cGU6InJvb3QiLGNoaWxkcmVuOnR9OnQsdm9pZCAwLHZvaWQgMCl9ZnVuY3Rpb24gWHQxKHQsZSxhKXtyZXR1cm4ga3R0KHQsZSxhLHRoaXMpfWZ1bmN0aW9uIFF0MSh0KXtsZXQgZT1bXSxhPXQmJnQuY2hpbGRyZW58fFp0MSxyPS0xO2Zvcig7KytyPGEubGVuZ3RoOyllW3JdPXRoaXMub25lKGFbcl0scix0KTtyZXR1cm4gZS5qb2luKCIiKX12YXIgR3QxLFl0MSxadDEsQ3R0PW4oKCk9PntNZXQoKTtlZWUoKTtTdHQoKTtHdDE9e30sWXQxPXt9LFp0MT1bXX0pO3ZhciBMdHQ9bigoKT0+e0N0dCgpfSk7ZnVuY3Rpb24gUDYodCl7bGV0IGU9dGhpcyx7aGFuZGxlcnM6YSxzYW5pdGl6ZTpyLC4uLml9PXR8fEt0MSxvPSExLHM7dHlwZW9mIHI9PSJib29sZWFuIj9vPSFyOnImJihzPXIpLGUuY29tcGlsZXI9bDtmdW5jdGlvbiBsKGYsYyl7bGV0IHU9SEooZix7aGFuZGxlcnM6YSxhbGxvd0Rhbmdlcm91c0h0bWw6b30pLGQ9bz91OlBKKHUscyksaD1jZWUoZCx7Li4uaSxhbGxvd0Rhbmdlcm91c0h0bWw6b30pO3JldHVybiBjLmV4dG5hbWUmJihjLmV4dG5hbWU9Ii5odG1sIiksZiYmZi50eXBlPT09InJvb3QiJiZoJiYvW15cclxuXS8udGVzdChoLmNoYXJBdChoLmxlbmd0aC0xKSk/aCtgCmA6aH19dmFyIEt0MSxUdHQ9bigoKT0+e21KZSgpO3lldCgpO0x0dCgpO0t0MT17fX0pO3ZhciBfdHQ9bigoKT0+e1R0dCgpfSk7ZnVuY3Rpb24gSTYodCl7bGV0IGU9dGhpcztlLmNvbXBpbGVyPWE7ZnVuY3Rpb24gYShyKXtyZXR1cm4gU0socix7Li4uZS5kYXRhKCJzZXR0aW5ncyIpLC4uLnQsZXh0ZW5zaW9uczplLmRhdGEoInRvTWFya2Rvd25FeHRlbnNpb25zIil8fFtdfSl9fXZhciBBdHQ9bigoKT0+e2dIKCl9KTt2YXIgJHR0PW4oKCk9PntBdHQoKX0pO2Z1bmN0aW9uIEp0MSh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgYT1hcmd1bWVudHNbZV07Zm9yKHZhciByIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShyKSYmKHRbcl09YVtyXSl9cmV0dXJuIHR9ZnVuY3Rpb24gZGVlKHQsZSl7cmV0dXJuIEFycmF5KGUrMSkuam9pbih0KX1mdW5jdGlvbiBEdHQodCl7cmV0dXJuIHQucmVwbGFjZSgvXlxuKi8sIiIpfWZ1bmN0aW9uIEV0dCh0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZT4wJiZ0W2UtMV09PT1gCmA7KWUtLTtyZXR1cm4gdC5zdWJzdHJpbmcoMCxlKX1mdW5jdGlvbiBOdHQodCl7cmV0dXJuIEV0dChEdHQodCkpfWZ1bmN0aW9uIGZlZSh0KXtyZXR1cm4gdWVlKHQsZTExKX1mdW5jdGlvbiBJdHQodCl7cmV0dXJuIHVlZSh0LFB0dCl9ZnVuY3Rpb24gdDExKHQpe3JldHVybiBPdHQodCxQdHQpfWZ1bmN0aW9uIGExMSh0KXtyZXR1cm4gdWVlKHQsRnR0KX1mdW5jdGlvbiByMTEodCl7cmV0dXJuIE90dCh0LEZ0dCl9ZnVuY3Rpb24gdWVlKHQsZSl7cmV0dXJuIGUuaW5kZXhPZih0Lm5vZGVOYW1lKT49MH1mdW5jdGlvbiBPdHQodCxlKXtyZXR1cm4gdC5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpLmxlbmd0aH0pfWZ1bmN0aW9uIGxxKHQpe3JldHVybiB0P3QucmVwbGFjZSgvKFxuK1xzKikrL2csYApgKToiIn1mdW5jdGlvbiBCdHQodCl7dGhpcy5vcHRpb25zPXQsdGhpcy5fa2VlcD1bXSx0aGlzLl9yZW1vdmU9W10sdGhpcy5ibGFua1J1bGU9e3JlcGxhY2VtZW50OnQuYmxhbmtSZXBsYWNlbWVudH0sdGhpcy5rZWVwUmVwbGFjZW1lbnQ9dC5rZWVwUmVwbGFjZW1lbnQsdGhpcy5kZWZhdWx0UnVsZT17cmVwbGFjZW1lbnQ6dC5kZWZhdWx0UmVwbGFjZW1lbnR9LHRoaXMuYXJyYXk9W107Zm9yKHZhciBlIGluIHQucnVsZXMpdGhpcy5hcnJheS5wdXNoKHQucnVsZXNbZV0pfWZ1bmN0aW9uIHBlZSh0LGUsYSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl07aWYoaTExKGksZSxhKSlyZXR1cm4gaX19ZnVuY3Rpb24gaTExKHQsZSxhKXt2YXIgcj10LmZpbHRlcjtpZih0eXBlb2Ygcj09InN0cmluZyIpe2lmKHI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuITB9ZWxzZSBpZihBcnJheS5pc0FycmF5KHIpKXtpZihyLmluZGV4T2YoZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKT4tMSlyZXR1cm4hMH1lbHNlIGlmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXtpZihyLmNhbGwodCxlLGEpKXJldHVybiEwfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiYGZpbHRlcmAgbmVlZHMgdG8gYmUgYSBzdHJpbmcsIGFycmF5LCBvciBmdW5jdGlvbiIpfWZ1bmN0aW9uIG8xMSh0KXt2YXIgZT10LmVsZW1lbnQsYT10LmlzQmxvY2sscj10LmlzVm9pZCxpPXQuaXNQcmV8fGZ1bmN0aW9uKGQpe3JldHVybiBkLm5vZGVOYW1lPT09IlBSRSJ9O2lmKCEoIWUuZmlyc3RDaGlsZHx8aShlKSkpe2Zvcih2YXIgbz1udWxsLHM9ITEsbD1udWxsLGY9UnR0KGwsZSxpKTtmIT09ZTspe2lmKGYubm9kZVR5cGU9PT0zfHxmLm5vZGVUeXBlPT09NCl7dmFyIGM9Zi5kYXRhLnJlcGxhY2UoL1sgXHJcblx0XSsvZywiICIpO2lmKCghb3x8LyAkLy50ZXN0KG8uZGF0YSkpJiYhcyYmY1swXT09PSIgIiYmKGM9Yy5zdWJzdHIoMSkpLCFjKXtmPWhlZShmKTtjb250aW51ZX1mLmRhdGE9YyxvPWZ9ZWxzZSBpZihmLm5vZGVUeXBlPT09MSlhKGYpfHxmLm5vZGVOYW1lPT09IkJSIj8obyYmKG8uZGF0YT1vLmRhdGEucmVwbGFjZSgvICQvLCIiKSksbz1udWxsLHM9ITEpOnIoZil8fGkoZik/KG89bnVsbCxzPSEwKTpvJiYocz0hMSk7ZWxzZXtmPWhlZShmKTtjb250aW51ZX12YXIgdT1SdHQobCxmLGkpO2w9ZixmPXV9byYmKG8uZGF0YT1vLmRhdGEucmVwbGFjZSgvICQvLCIiKSxvLmRhdGF8fGhlZShvKSl9fWZ1bmN0aW9uIGhlZSh0KXt2YXIgZT10Lm5leHRTaWJsaW5nfHx0LnBhcmVudE5vZGU7cmV0dXJuIHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSxlfWZ1bmN0aW9uIFJ0dCh0LGUsYSl7cmV0dXJuIHQmJnQucGFyZW50Tm9kZT09PWV8fGEoZSk/ZS5uZXh0U2libGluZ3x8ZS5wYXJlbnROb2RlOmUuZmlyc3RDaGlsZHx8ZS5uZXh0U2libGluZ3x8ZS5wYXJlbnROb2RlfWZ1bmN0aW9uIHMxMSgpe3ZhciB0PW1lZS5ET01QYXJzZXIsZT0hMTt0cnl7bmV3IHQoKS5wYXJzZUZyb21TdHJpbmcoIiIsInRleHQvaHRtbCIpJiYoZT0hMCl9Y2F0Y2h7fXJldHVybiBlfWZ1bmN0aW9uIG4xMSgpe3ZhciB0PWZ1bmN0aW9uKCl7fTtyZXR1cm4gbDExKCk/dC5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciBhPW5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKTtyZXR1cm4gYS5kZXNpZ25Nb2RlPSJvbiIsYS5vcGVuKCksYS53cml0ZShlKSxhLmNsb3NlKCksYX06dC5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciBhPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIik7cmV0dXJuIGEub3BlbigpLGEud3JpdGUoZSksYS5jbG9zZSgpLGF9LHR9ZnVuY3Rpb24gbDExKCl7dmFyIHQ9ITE7dHJ5e2RvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikub3BlbigpfWNhdGNoe21lZS5BY3RpdmVYT2JqZWN0JiYodD0hMCl9cmV0dXJuIHR9ZnVuY3Rpb24gZDExKHQsZSl7dmFyIGE7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXt2YXIgcj1mMTEoKS5wYXJzZUZyb21TdHJpbmcoJzx4LXR1cm5kb3duIGlkPSJ0dXJuZG93bi1yb290Ij4nK3QrIjwveC10dXJuZG93bj4iLCJ0ZXh0L2h0bWwiKTthPXIuZ2V0RWxlbWVudEJ5SWQoInR1cm5kb3duLXJvb3QiKX1lbHNlIGE9dC5jbG9uZU5vZGUoITApO3JldHVybiBvMTEoe2VsZW1lbnQ6YSxpc0Jsb2NrOmZlZSxpc1ZvaWQ6SXR0LGlzUHJlOmUucHJlZm9ybWF0dGVkQ29kZT91MTE6bnVsbH0pLGF9ZnVuY3Rpb24gZjExKCl7cmV0dXJuIGdlZT1nZWV8fG5ldyBjMTEsZ2VlfWZ1bmN0aW9uIHUxMSh0KXtyZXR1cm4gdC5ub2RlTmFtZT09PSJQUkUifHx0Lm5vZGVOYW1lPT09IkNPREUifWZ1bmN0aW9uIHAxMSh0LGUpe3JldHVybiB0LmlzQmxvY2s9ZmVlKHQpLHQuaXNDb2RlPXQubm9kZU5hbWU9PT0iQ09ERSJ8fHQucGFyZW50Tm9kZS5pc0NvZGUsdC5pc0JsYW5rPWgxMSh0KSx0LmZsYW5raW5nV2hpdGVzcGFjZT1tMTEodCxlKSx0fWZ1bmN0aW9uIGgxMSh0KXtyZXR1cm4hSXR0KHQpJiYhYTExKHQpJiYvXlxzKiQvaS50ZXN0KHQudGV4dENvbnRlbnQpJiYhdDExKHQpJiYhcjExKHQpfWZ1bmN0aW9uIG0xMSh0LGUpe2lmKHQuaXNCbG9ja3x8ZS5wcmVmb3JtYXR0ZWRDb2RlJiZ0LmlzQ29kZSlyZXR1cm57bGVhZGluZzoiIix0cmFpbGluZzoiIn07dmFyIGE9ZzExKHQudGV4dENvbnRlbnQpO3JldHVybiBhLmxlYWRpbmdBc2NpaSYmSHR0KCJsZWZ0Iix0LGUpJiYoYS5sZWFkaW5nPWEubGVhZGluZ05vbkFzY2lpKSxhLnRyYWlsaW5nQXNjaWkmJkh0dCgicmlnaHQiLHQsZSkmJihhLnRyYWlsaW5nPWEudHJhaWxpbmdOb25Bc2NpaSkse2xlYWRpbmc6YS5sZWFkaW5nLHRyYWlsaW5nOmEudHJhaWxpbmd9fWZ1bmN0aW9uIGcxMSh0KXt2YXIgZT10Lm1hdGNoKC9eKChbIFx0XHJcbl0qKShccyopKSg/Oig/PVxTKVtcc1xTXSpcUyk/KChccyo/KShbIFx0XHJcbl0qKSkkLyk7cmV0dXJue2xlYWRpbmc6ZVsxXSxsZWFkaW5nQXNjaWk6ZVsyXSxsZWFkaW5nTm9uQXNjaWk6ZVszXSx0cmFpbGluZzplWzRdLHRyYWlsaW5nTm9uQXNjaWk6ZVs1XSx0cmFpbGluZ0FzY2lpOmVbNl19fWZ1bmN0aW9uIEh0dCh0LGUsYSl7dmFyIHIsaSxvO3JldHVybiB0PT09ImxlZnQiPyhyPWUucHJldmlvdXNTaWJsaW5nLGk9LyAkLyk6KHI9ZS5uZXh0U2libGluZyxpPS9eIC8pLHImJihyLm5vZGVUeXBlPT09Mz9vPWkudGVzdChyLm5vZGVWYWx1ZSk6YS5wcmVmb3JtYXR0ZWRDb2RlJiZyLm5vZGVOYW1lPT09IkNPREUiP289ITE6ci5ub2RlVHlwZT09PTEmJiFmZWUocikmJihvPWkudGVzdChyLnRleHRDb250ZW50KSkpLG99ZnVuY3Rpb24gY3EodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgY3EpKXJldHVybiBuZXcgY3EodCk7dmFyIGU9e3J1bGVzOlMyLGhlYWRpbmdTdHlsZToic2V0ZXh0IixocjoiKiAqICoiLGJ1bGxldExpc3RNYXJrZXI6IioiLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsZmVuY2U6ImBgYCIsZW1EZWxpbWl0ZXI6Il8iLHN0cm9uZ0RlbGltaXRlcjoiKioiLGxpbmtTdHlsZToiaW5saW5lZCIsbGlua1JlZmVyZW5jZVN0eWxlOiJmdWxsIixicjoiICAiLHByZWZvcm1hdHRlZENvZGU6ITEsYmxhbmtSZXBsYWNlbWVudDpmdW5jdGlvbihhLHIpe3JldHVybiByLmlzQmxvY2s/YAoKYDoiIn0sa2VlcFJlcGxhY2VtZW50OmZ1bmN0aW9uKGEscil7cmV0dXJuIHIuaXNCbG9jaz9gCgpgK3Iub3V0ZXJIVE1MK2AKCmA6ci5vdXRlckhUTUx9LGRlZmF1bHRSZXBsYWNlbWVudDpmdW5jdGlvbihhLHIpe3JldHVybiByLmlzQmxvY2s/YAoKYCthK2AKCmA6YX19O3RoaXMub3B0aW9ucz1KdDEoe30sZSx0KSx0aGlzLnJ1bGVzPW5ldyBCdHQodGhpcy5vcHRpb25zKX1mdW5jdGlvbiBxdHQodCl7dmFyIGU9dGhpcztyZXR1cm4geDExLmNhbGwodC5jaGlsZE5vZGVzLGZ1bmN0aW9uKGEscil7cj1uZXcgcDExKHIsZS5vcHRpb25zKTt2YXIgaT0iIjtyZXR1cm4gci5ub2RlVHlwZT09PTM/aT1yLmlzQ29kZT9yLm5vZGVWYWx1ZTplLmVzY2FwZShyLm5vZGVWYWx1ZSk6ci5ub2RlVHlwZT09PTEmJihpPXkxMS5jYWxsKGUscikpLFZ0dChhLGkpfSwiIil9ZnVuY3Rpb24gdjExKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMucnVsZXMuZm9yRWFjaChmdW5jdGlvbihhKXt0eXBlb2YgYS5hcHBlbmQ9PSJmdW5jdGlvbiImJih0PVZ0dCh0LGEuYXBwZW5kKGUub3B0aW9ucykpKX0pLHQucmVwbGFjZSgvXltcdFxyXG5dKy8sIiIpLnJlcGxhY2UoL1tcdFxyXG5cc10rJC8sIiIpfWZ1bmN0aW9uIHkxMSh0KXt2YXIgZT10aGlzLnJ1bGVzLmZvck5vZGUodCksYT1xdHQuY2FsbCh0aGlzLHQpLHI9dC5mbGFua2luZ1doaXRlc3BhY2U7cmV0dXJuKHIubGVhZGluZ3x8ci50cmFpbGluZykmJihhPWEudHJpbSgpKSxyLmxlYWRpbmcrZS5yZXBsYWNlbWVudChhLHQsdGhpcy5vcHRpb25zKStyLnRyYWlsaW5nfWZ1bmN0aW9uIFZ0dCh0LGUpe3ZhciBhPUV0dCh0KSxyPUR0dChlKSxpPU1hdGgubWF4KHQubGVuZ3RoLWEubGVuZ3RoLGUubGVuZ3RoLXIubGVuZ3RoKSxvPWAKCmAuc3Vic3RyaW5nKDAsaSk7cmV0dXJuIGErbytyfWZ1bmN0aW9uIHcxMSh0KXtyZXR1cm4gdCE9bnVsbCYmKHR5cGVvZiB0PT0ic3RyaW5nInx8dC5ub2RlVHlwZSYmKHQubm9kZVR5cGU9PT0xfHx0Lm5vZGVUeXBlPT09OXx8dC5ub2RlVHlwZT09PTExKSl9dmFyIGUxMSxQdHQsRnR0LFMyLG1lZSxjMTEsZ2VlLHgxMSxiMTEsZHEsVXR0PW4oKCk9PntlMTE9WyJBRERSRVNTIiwiQVJUSUNMRSIsIkFTSURFIiwiQVVESU8iLCJCTE9DS1FVT1RFIiwiQk9EWSIsIkNBTlZBUyIsIkNFTlRFUiIsIkREIiwiRElSIiwiRElWIiwiREwiLCJEVCIsIkZJRUxEU0VUIiwiRklHQ0FQVElPTiIsIkZJR1VSRSIsIkZPT1RFUiIsIkZPUk0iLCJGUkFNRVNFVCIsIkgxIiwiSDIiLCJIMyIsIkg0IiwiSDUiLCJINiIsIkhFQURFUiIsIkhHUk9VUCIsIkhSIiwiSFRNTCIsIklTSU5ERVgiLCJMSSIsIk1BSU4iLCJNRU5VIiwiTkFWIiwiTk9GUkFNRVMiLCJOT1NDUklQVCIsIk9MIiwiT1VUUFVUIiwiUCIsIlBSRSIsIlNFQ1RJT04iLCJUQUJMRSIsIlRCT0RZIiwiVEQiLCJURk9PVCIsIlRIIiwiVEhFQUQiLCJUUiIsIlVMIl07UHR0PVsiQVJFQSIsIkJBU0UiLCJCUiIsIkNPTCIsIkNPTU1BTkQiLCJFTUJFRCIsIkhSIiwiSU1HIiwiSU5QVVQiLCJLRVlHRU4iLCJMSU5LIiwiTUVUQSIsIlBBUkFNIiwiU09VUkNFIiwiVFJBQ0siLCJXQlIiXTtGdHQ9WyJBIiwiVEFCTEUiLCJUSEVBRCIsIlRCT0RZIiwiVEZPT1QiLCJUSCIsIlREIiwiSUZSQU1FIiwiU0NSSVBUIiwiQVVESU8iLCJWSURFTyJdO1MyPXt9O1MyLnBhcmFncmFwaD17ZmlsdGVyOiJwIixyZXBsYWNlbWVudDpmdW5jdGlvbih0KXtyZXR1cm5gCgpgK3QrYAoKYH19LFMyLmxpbmVCcmVhaz17ZmlsdGVyOiJiciIscmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCxlLGEpe3JldHVybiBhLmJyK2AKYH19LFMyLmhlYWRpbmc9e2ZpbHRlcjpbImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiJdLHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSxhKXt2YXIgcj1OdW1iZXIoZS5ub2RlTmFtZS5jaGFyQXQoMSkpO2lmKGEuaGVhZGluZ1N0eWxlPT09InNldGV4dCImJnI8Myl7dmFyIGk9ZGVlKHI9PT0xPyI9IjoiLSIsdC5sZW5ndGgpO3JldHVybmAKCmArdCtgCmAraStgCgpgfWVsc2UgcmV0dXJuYAoKYCtkZWUoIiMiLHIpKyIgIit0K2AKCmB9fSxTMi5ibG9ja3F1b3RlPXtmaWx0ZXI6ImJsb2NrcXVvdGUiLHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0PU50dCh0KS5yZXBsYWNlKC9eL2dtLCI+ICIpLGAKCmArdCtgCgpgfX0sUzIubGlzdD17ZmlsdGVyOlsidWwiLCJvbCJdLHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSl7dmFyIGE9ZS5wYXJlbnROb2RlO3JldHVybiBhLm5vZGVOYW1lPT09IkxJIiYmYS5sYXN0RWxlbWVudENoaWxkPT09ZT9gCmArdDpgCgpgK3QrYAoKYH19LFMyLmxpc3RJdGVtPXtmaWx0ZXI6ImxpIixyZXBsYWNlbWVudDpmdW5jdGlvbih0LGUsYSl7dmFyIHI9YS5idWxsZXRMaXN0TWFya2VyKyIgICAiLGk9ZS5wYXJlbnROb2RlO2lmKGkubm9kZU5hbWU9PT0iT0wiKXt2YXIgbz1pLmdldEF0dHJpYnV0ZSgic3RhcnQiKSxzPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoaS5jaGlsZHJlbixlKTtyPShvP051bWJlcihvKStzOnMrMSkrIi4gICJ9dmFyIGw9L1xuJC8udGVzdCh0KTtyZXR1cm4gdD1OdHQodCkrKGw/YApgOiIiKSx0PXQucmVwbGFjZSgvXG4vZ20sYApgKyIgIi5yZXBlYXQoci5sZW5ndGgpKSxyK3QrKGUubmV4dFNpYmxpbmc/YApgOiIiKX19LFMyLmluZGVudGVkQ29kZUJsb2NrPXtmaWx0ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5jb2RlQmxvY2tTdHlsZT09PSJpbmRlbnRlZCImJnQubm9kZU5hbWU9PT0iUFJFIiYmdC5maXJzdENoaWxkJiZ0LmZpcnN0Q2hpbGQubm9kZU5hbWU9PT0iQ09ERSJ9LHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSxhKXtyZXR1cm5gCgogICAgYCtlLmZpcnN0Q2hpbGQudGV4dENvbnRlbnQucmVwbGFjZSgvXG4vZyxgCiAgICBgKStgCgpgfX0sUzIuZmVuY2VkQ29kZUJsb2NrPXtmaWx0ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5jb2RlQmxvY2tTdHlsZT09PSJmZW5jZWQiJiZ0Lm5vZGVOYW1lPT09IlBSRSImJnQuZmlyc3RDaGlsZCYmdC5maXJzdENoaWxkLm5vZGVOYW1lPT09IkNPREUifSxyZXBsYWNlbWVudDpmdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiLGk9KHIubWF0Y2goL2xhbmd1YWdlLShcUyspLyl8fFtudWxsLCIiXSlbMV0sbz1lLmZpcnN0Q2hpbGQudGV4dENvbnRlbnQscz1hLmZlbmNlLmNoYXJBdCgwKSxsPTMsZj1uZXcgUmVnRXhwKCJeIitzKyJ7Myx9IiwiZ20iKSxjO2M9Zi5leGVjKG8pOyljWzBdLmxlbmd0aD49bCYmKGw9Y1swXS5sZW5ndGgrMSk7dmFyIHU9ZGVlKHMsbCk7cmV0dXJuYAoKYCt1K2krYApgK28ucmVwbGFjZSgvXG4kLywiIikrYApgK3UrYAoKYH19LFMyLmhvcml6b250YWxSdWxlPXtmaWx0ZXI6ImhyIixyZXBsYWNlbWVudDpmdW5jdGlvbih0LGUsYSl7cmV0dXJuYAoKYCthLmhyK2AKCmB9fSxTMi5pbmxpbmVMaW5rPXtmaWx0ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5saW5rU3R5bGU9PT0iaW5saW5lZCImJnQubm9kZU5hbWU9PT0iQSImJnQuZ2V0QXR0cmlidXRlKCJocmVmIil9LHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSl7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKTthJiYoYT1hLnJlcGxhY2UoLyhbKCldKS9nLCJcXCQxIikpO3ZhciByPWxxKGUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKTtyZXR1cm4gciYmKHI9JyAiJytyLnJlcGxhY2UoLyIvZywnXFwiJykrJyInKSwiWyIrdCsiXSgiK2ErcisiKSJ9fSxTMi5yZWZlcmVuY2VMaW5rPXtmaWx0ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5saW5rU3R5bGU9PT0icmVmZXJlbmNlZCImJnQubm9kZU5hbWU9PT0iQSImJnQuZ2V0QXR0cmlidXRlKCJocmVmIil9LHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSxhKXt2YXIgcj1lLmdldEF0dHJpYnV0ZSgiaHJlZiIpLGk9bHEoZS5nZXRBdHRyaWJ1dGUoInRpdGxlIikpO2kmJihpPScgIicraSsnIicpO3ZhciBvLHM7c3dpdGNoKGEubGlua1JlZmVyZW5jZVN0eWxlKXtjYXNlImNvbGxhcHNlZCI6bz0iWyIrdCsiXVtdIixzPSJbIit0KyJdOiAiK3IraTticmVhaztjYXNlInNob3J0Y3V0IjpvPSJbIit0KyJdIixzPSJbIit0KyJdOiAiK3IraTticmVhaztkZWZhdWx0OnZhciBsPXRoaXMucmVmZXJlbmNlcy5sZW5ndGgrMTtvPSJbIit0KyJdWyIrbCsiXSIscz0iWyIrbCsiXTogIityK2l9cmV0dXJuIHRoaXMucmVmZXJlbmNlcy5wdXNoKHMpLG99LHJlZmVyZW5jZXM6W10sYXBwZW5kOmZ1bmN0aW9uKHQpe3ZhciBlPSIiO3JldHVybiB0aGlzLnJlZmVyZW5jZXMubGVuZ3RoJiYoZT1gCgpgK3RoaXMucmVmZXJlbmNlcy5qb2luKGAKYCkrYAoKYCx0aGlzLnJlZmVyZW5jZXM9W10pLGV9fSxTMi5lbXBoYXNpcz17ZmlsdGVyOlsiZW0iLCJpIl0scmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCxlLGEpe3JldHVybiB0LnRyaW0oKT9hLmVtRGVsaW1pdGVyK3QrYS5lbURlbGltaXRlcjoiIn19LFMyLnN0cm9uZz17ZmlsdGVyOlsic3Ryb25nIiwiYiJdLHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSxhKXtyZXR1cm4gdC50cmltKCk/YS5zdHJvbmdEZWxpbWl0ZXIrdCthLnN0cm9uZ0RlbGltaXRlcjoiIn19LFMyLmNvZGU9e2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT10LnByZXZpb3VzU2libGluZ3x8dC5uZXh0U2libGluZyxhPXQucGFyZW50Tm9kZS5ub2RlTmFtZT09PSJQUkUiJiYhZTtyZXR1cm4gdC5ub2RlTmFtZT09PSJDT0RFIiYmIWF9LHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiIiO3Q9dC5yZXBsYWNlKC9ccj9cbnxcci9nLCIgIik7Zm9yKHZhciBlPS9eYHxeIC4qP1teIF0uKiAkfGAkLy50ZXN0KHQpPyIgIjoiIixhPSJgIixyPXQubWF0Y2goL2ArL2dtKXx8W107ci5pbmRleE9mKGEpIT09LTE7KWE9YSsiYCI7cmV0dXJuIGErZSt0K2UrYX19LFMyLmltYWdlPXtmaWx0ZXI6ImltZyIscmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCxlKXt2YXIgYT1scShlLmdldEF0dHJpYnV0ZSgiYWx0IikpLHI9ZS5nZXRBdHRyaWJ1dGUoInNyYyIpfHwiIixpPWxxKGUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKSxvPWk/JyAiJytpKyciJzoiIjtyZXR1cm4gcj8iIVsiK2ErIl0oIityK28rIikiOiIifX07QnR0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQsZSl7dGhpcy5hcnJheS51bnNoaWZ0KGUpfSxrZWVwOmZ1bmN0aW9uKHQpe3RoaXMuX2tlZXAudW5zaGlmdCh7ZmlsdGVyOnQscmVwbGFjZW1lbnQ6dGhpcy5rZWVwUmVwbGFjZW1lbnR9KX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZS51bnNoaWZ0KHtmaWx0ZXI6dCxyZXBsYWNlbWVudDpmdW5jdGlvbigpe3JldHVybiIifX0pfSxmb3JOb2RlOmZ1bmN0aW9uKHQpe2lmKHQuaXNCbGFuaylyZXR1cm4gdGhpcy5ibGFua1J1bGU7dmFyIGU7cmV0dXJuKGU9cGVlKHRoaXMuYXJyYXksdCx0aGlzLm9wdGlvbnMpKXx8KGU9cGVlKHRoaXMuX2tlZXAsdCx0aGlzLm9wdGlvbnMpKXx8KGU9cGVlKHRoaXMuX3JlbW92ZSx0LHRoaXMub3B0aW9ucykpP2U6dGhpcy5kZWZhdWx0UnVsZX0sZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuYXJyYXkubGVuZ3RoO2UrKyl0KHRoaXMuYXJyYXlbZV0sZSl9fTttZWU9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9O2MxMT1zMTEoKT9tZWUuRE9NUGFyc2VyOm4xMSgpO3gxMT1BcnJheS5wcm90b3R5cGUucmVkdWNlLGIxMT1bWy9cXC9nLCJcXFxcIl0sWy9cKi9nLCJcXCoiXSxbL14tL2csIlxcLSJdLFsvXlwrIC9nLCJcXCsgIl0sWy9eKD0rKS9nLCJcXCQxIl0sWy9eKCN7MSw2fSkgL2csIlxcJDEgIl0sWy9gL2csIlxcYCJdLFsvXn5+fi9nLCJcXH5+fiJdLFsvXFsvZywiXFxbIl0sWy9cXS9nLCJcXF0iXSxbL14+L2csIlxcPiJdLFsvXy9nLCJcXF8iXSxbL14oXGQrKVwuIC9nLCIkMVxcLiAiXV07Y3EucHJvdG90eXBlPXt0dXJuZG93bjpmdW5jdGlvbih0KXtpZighdzExKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIHN0cmluZywgb3IgYW4gZWxlbWVudC9kb2N1bWVudC9mcmFnbWVudCBub2RlLiIpO2lmKHQ9PT0iIilyZXR1cm4iIjt2YXIgZT1xdHQuY2FsbCh0aGlzLG5ldyBkMTEodCx0aGlzLm9wdGlvbnMpKTtyZXR1cm4gdjExLmNhbGwodGhpcyxlKX0sdXNlOmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy51c2UodFtlXSk7ZWxzZSBpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil0KHRoaXMpO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigicGx1Z2luIG11c3QgYmUgYSBGdW5jdGlvbiBvciBhbiBBcnJheSBvZiBGdW5jdGlvbnMiKTtyZXR1cm4gdGhpc30sYWRkUnVsZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJ1bGVzLmFkZCh0LGUpLHRoaXN9LGtlZXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucnVsZXMua2VlcCh0KSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucnVsZXMucmVtb3ZlKHQpLHRoaXN9LGVzY2FwZTpmdW5jdGlvbih0KXtyZXR1cm4gYjExLnJlZHVjZShmdW5jdGlvbihlLGEpe3JldHVybiBlLnJlcGxhY2UoYVswXSxhWzFdKX0sdCl9fTtkcT1jcX0pO3ZhciBUZD17fTtldChUZCx7Z2ZtOigpPT5HdHQsaGlnaGxpZ2h0ZWRDb2RlQmxvY2s6KCk9PmJlZSxzdHJpa2V0aHJvdWdoOigpPT52ZWUsdGFibGVzOigpPT55ZWUsdGFza0xpc3RJdGVtczooKT0+d2VlfSk7ZnVuY3Rpb24gYmVlKHQpe3QuYWRkUnVsZSgiaGlnaGxpZ2h0ZWRDb2RlQmxvY2siLHtmaWx0ZXI6ZnVuY3Rpb24oZSl7dmFyIGE9ZS5maXJzdENoaWxkO3JldHVybiBlLm5vZGVOYW1lPT09IkRJViImJmp0dC50ZXN0KGUuY2xhc3NOYW1lKSYmYSYmYS5ub2RlTmFtZT09PSJQUkUifSxyZXBsYWNlbWVudDpmdW5jdGlvbihlLGEscil7dmFyIGk9YS5jbGFzc05hbWV8fCIiLG89KGkubWF0Y2goanR0KXx8W251bGwsIiJdKVsxXTtyZXR1cm5gCgpgK3IuZmVuY2UrbytgCmArYS5maXJzdENoaWxkLnRleHRDb250ZW50K2AKYCtyLmZlbmNlK2AKCmB9fSl9ZnVuY3Rpb24gdmVlKHQpe3QuYWRkUnVsZSgic3RyaWtldGhyb3VnaCIse2ZpbHRlcjpbImRlbCIsInMiLCJzdHJpa2UiXSxyZXBsYWNlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4ifiIrZSsifiJ9fSl9ZnVuY3Rpb24geGVlKHQpe3ZhciBlPXQucGFyZW50Tm9kZTtyZXR1cm4gZS5ub2RlTmFtZT09PSJUSEVBRCJ8fGUuZmlyc3RDaGlsZD09PXQmJihlLm5vZGVOYW1lPT09IlRBQkxFInx8azExKGUpKSYmejExLmNhbGwodC5jaGlsZE5vZGVzLGZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lPT09IlRIIn0pfWZ1bmN0aW9uIGsxMSh0KXt2YXIgZT10LnByZXZpb3VzU2libGluZztyZXR1cm4gdC5ub2RlTmFtZT09PSJUQk9EWSImJighZXx8ZS5ub2RlTmFtZT09PSJUSEVBRCImJi9eXHMqJC9pLnRlc3QoZS50ZXh0Q29udGVudCkpfWZ1bmN0aW9uIFd0dCh0LGUpe3ZhciBhPU0xMS5jYWxsKGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLGUpLHI9IiAiO3JldHVybiBhPT09MCYmKHI9InwgIikscit0KyIgfCJ9ZnVuY3Rpb24geWVlKHQpe3Qua2VlcChmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZT09PSJUQUJMRSImJiF4ZWUoYS5yb3dzWzBdKX0pO2Zvcih2YXIgZSBpbiBGNil0LmFkZFJ1bGUoZSxGNltlXSl9ZnVuY3Rpb24gd2VlKHQpe3QuYWRkUnVsZSgidGFza0xpc3RJdGVtcyIse2ZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImNoZWNrYm94IiYmZS5wYXJlbnROb2RlLm5vZGVOYW1lPT09IkxJIn0scmVwbGFjZW1lbnQ6ZnVuY3Rpb24oZSxhKXtyZXR1cm4oYS5jaGVja2VkPyJbeF0iOiJbIF0iKSsiICJ9fSl9ZnVuY3Rpb24gR3R0KHQpe3QudXNlKFtiZWUsdmVlLHllZSx3ZWVdKX12YXIganR0LE0xMSx6MTEsRjYsWXR0PW4oKCk9PntqdHQ9L2hpZ2hsaWdodC0oPzp0ZXh0fHNvdXJjZSktKFthLXowLTldKykvO00xMT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZix6MTE9QXJyYXkucHJvdG90eXBlLmV2ZXJ5LEY2PXt9O0Y2LnRhYmxlQ2VsbD17ZmlsdGVyOlsidGgiLCJ0ZCJdLHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFd0dCh0LGUpfX0sRjYudGFibGVSb3c9e2ZpbHRlcjoidHIiLHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSl7dmFyIGE9IiIscj17bGVmdDoiOi0tIixyaWdodDoiLS06IixjZW50ZXI6IjotOiJ9O2lmKHhlZShlKSlmb3IodmFyIGk9MDtpPGUuY2hpbGROb2Rlcy5sZW5ndGg7aSsrKXt2YXIgbz0iLS0tIixzPShlLmNoaWxkTm9kZXNbaV0uZ2V0QXR0cmlidXRlKCJhbGlnbiIpfHwiIikudG9Mb3dlckNhc2UoKTtzJiYobz1yW3NdfHxvKSxhKz1XdHQobyxlLmNoaWxkTm9kZXNbaV0pfXJldHVybmAKYCt0KyhhP2AKYCthOiIiKX19LEY2LnRhYmxlPXtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZU5hbWU9PT0iVEFCTEUiJiZ4ZWUodC5yb3dzWzBdKX0scmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKGAKCmAsYApgKSxgCgpgK3QrYAoKYH19LEY2LnRhYmxlU2VjdGlvbj17ZmlsdGVyOlsidGhlYWQiLCJ0Ym9keSIsInRmb290Il0scmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fX0pO3ZhciBNZWUsemVlPW4oKCk9PntNZWU9TjIoTlllKCksMSk7cFplKCk7dktlKCk7aktlKCk7ckplKCk7X3R0KCk7JHR0KCk7VXR0KCk7WXR0KCl9KTt2YXIgZnEsWHR0PW4oKCk9Pnt6ZWUoKTtmcT1jbGFzcyB0e3N0YXRpYyBhc3luYyBjcmVhdGVGcm9tTWFya2Rvd25TdHJpbmcoZSl7bGV0IGE9bmV3IHQ7cmV0dXJuIGF3YWl0IGEudXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKGUpLGF9YXN5bmMgdXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKGUpe2xldCBhLHI9YXdhaXQgaWQoKS51c2UoXzYpLnVzZShUNikudXNlKCQ2LFsieWFtbCIsInRvbWwiXSkudXNlKEk2KS51c2UoUDYpLnVzZSgoKT0+aT0+e2NvbnNvbGUuZGlyKGkpO2xldCBvPWkuY2hpbGRyZW4uZmluZChzPT5zLnR5cGU9PT0ieWFtbCIpO28mJihhPW8udmFsdWUpfSkucHJvY2VzcyhlKTt0aGlzLmh0bWw9ci50b1N0cmluZygpLGE/dGhpcy5mcm9udG1hdHRlckRhdGE9YXdhaXQgTWVlLnlhbWxTdHJpbmdUb09iamVjdChhKTp0aGlzLmZyb250bWF0dGVyRGF0YT17fX19fSk7dmFyIE82PXt9O2V0KE82LHtTbWFydE1hcmtkb3duOigpPT5rZWV9KTt2YXIga2VlLFNlZT1uKCgpPT57emVlKCk7WHR0KCk7a2VlPWNsYXNzIHR7c3RhdGljIGFzeW5jIGVhc3lNYXJrZG93blRvSHRtbChlKXtyZXR1cm4oYXdhaXQgbmV3IHQoKS5nZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bihlKSkuaHRtbH1jb25zdHJ1Y3Rvcigpe31hc3luYyBnZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bihlKXtyZXR1cm4gYXdhaXQgZnEuY3JlYXRlRnJvbU1hcmtkb3duU3RyaW5nKGUpfWh0bWxUb01hcmtkb3duKGUpe2xldCBhPW5ldyBkcSh7aGVhZGluZ1N0eWxlOiJhdHgiLGNvZGVCbG9ja1N0eWxlOiJmZW5jZWQifSk7cmV0dXJuIGEudXNlKFRkLmdmbSksYS50dXJuZG93bihlKX19fSk7dmFyIGExdD1jdChYYT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWGEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFhhLlBhdGhFcnJvcj1YYS5Ub2tlbkRhdGE9dm9pZCAwLFhhLnBhcnNlPV9lZSxYYS5jb21waWxlPUwxMSxYYS5tYXRjaD1fMTEsWGEucGF0aFRvUmVnZXhwPUp0dCxYYS5zdHJpbmdpZnk9RDExO3ZhciBDZWU9Ii8iLExlZT10PT50LFF0dD0vXlskX1xwe0lEX1N0YXJ0fV0kL3UsVGVlPS9eWyRcdTIwMGNcdTIwMGRccHtJRF9Db250aW51ZX1dJC91LFMxMT17InsiOiJ7IiwifSI6In0iLCIoIjoiKCIsIikiOiIpIiwiWyI6IlsiLCJdIjoiXSIsIisiOiIrIiwiPyI6Ij8iLCIhIjoiISJ9O2Z1bmN0aW9uIEMxMSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9be30oKVxbXF0rPyE6KlxcXS9nLCJcXCQmIil9ZnVuY3Rpb24gUnIodCl7cmV0dXJuIHQucmVwbGFjZSgvWy4rKj9eJHt9KClbXF18L1xcXS9nLCJcXCQmIil9dmFyIHVxPWNsYXNze2NvbnN0cnVjdG9yKGUsYSl7dGhpcy50b2tlbnM9ZSx0aGlzLm9yaWdpbmFsUGF0aD1hfX07WGEuVG9rZW5EYXRhPXVxO3ZhciBrbj1jbGFzcyBleHRlbmRzIFR5cGVFcnJvcntjb25zdHJ1Y3RvcihlLGEpe2xldCByPWU7YSYmKHIrPWA6ICR7YX1gKSxyKz0iOyB2aXNpdCBodHRwczovL2dpdC5uZXcvcGF0aFRvUmVnZXhwRXJyb3IgZm9yIGluZm8iLHN1cGVyKHIpLHRoaXMub3JpZ2luYWxQYXRoPWF9fTtYYS5QYXRoRXJyb3I9a247ZnVuY3Rpb24gX2VlKHQsZT17fSl7bGV0e2VuY29kZVBhdGg6YT1MZWV9PWUscj1bLi4udF0saT1bXSxvPTAscz0wO2Z1bmN0aW9uIGwoKXtsZXQgYz0iIjtpZihRdHQudGVzdChyW29dKSlkbyBjKz1yW28rK107d2hpbGUoVGVlLnRlc3QocltvXSkpO2Vsc2UgaWYocltvXT09PSciJyl7bGV0IHU9bztmb3IoO28rKzxyLmxlbmd0aDspe2lmKHJbb109PT0nIicpe28rKyx1PTA7YnJlYWt9cltvXT09PSJcXCImJm8rKyxjKz1yW29dfWlmKHUpdGhyb3cgbmV3IGtuKGBVbnRlcm1pbmF0ZWQgcXVvdGUgYXQgaW5kZXggJHt1fWAsdCl9aWYoIWMpdGhyb3cgbmV3IGtuKGBNaXNzaW5nIHBhcmFtZXRlciBuYW1lIGF0IGluZGV4ICR7b31gLHQpO3JldHVybiBjfWZvcig7bzxyLmxlbmd0aDspe2xldCBjPXJbb10sdT1TMTFbY107dT9pLnB1c2goe3R5cGU6dSxpbmRleDpvKyssdmFsdWU6Y30pOmM9PT0iXFwiP2kucHVzaCh7dHlwZToiZXNjYXBlIixpbmRleDpvKyssdmFsdWU6cltvKytdfSk6Yz09PSI6Ij9pLnB1c2goe3R5cGU6InBhcmFtIixpbmRleDpvKyssdmFsdWU6bCgpfSk6Yz09PSIqIj9pLnB1c2goe3R5cGU6IndpbGRjYXJkIixpbmRleDpvKyssdmFsdWU6bCgpfSk6aS5wdXNoKHt0eXBlOiJjaGFyIixpbmRleDpvKyssdmFsdWU6Y30pfWkucHVzaCh7dHlwZToiZW5kIixpbmRleDpvLHZhbHVlOiIifSk7ZnVuY3Rpb24gZihjKXtsZXQgdT1bXTtmb3IoOzspe2xldCBkPWlbcysrXTtpZihkLnR5cGU9PT1jKWJyZWFrO2lmKGQudHlwZT09PSJjaGFyInx8ZC50eXBlPT09ImVzY2FwZSIpe2xldCBoPWQudmFsdWUsZz1pW3NdO2Zvcig7Zy50eXBlPT09ImNoYXIifHxnLnR5cGU9PT0iZXNjYXBlIjspaCs9Zy52YWx1ZSxnPWlbKytzXTt1LnB1c2goe3R5cGU6InRleHQiLHZhbHVlOmEoaCl9KTtjb250aW51ZX1pZihkLnR5cGU9PT0icGFyYW0ifHxkLnR5cGU9PT0id2lsZGNhcmQiKXt1LnB1c2goe3R5cGU6ZC50eXBlLG5hbWU6ZC52YWx1ZX0pO2NvbnRpbnVlfWlmKGQudHlwZT09PSJ7Iil7dS5wdXNoKHt0eXBlOiJncm91cCIsdG9rZW5zOmYoIn0iKX0pO2NvbnRpbnVlfXRocm93IG5ldyBrbihgVW5leHBlY3RlZCAke2QudHlwZX0gYXQgaW5kZXggJHtkLmluZGV4fSwgZXhwZWN0ZWQgJHtjfWAsdCl9cmV0dXJuIHV9cmV0dXJuIG5ldyB1cShmKCJlbmQiKSx0KX1mdW5jdGlvbiBMMTEodCxlPXt9KXtsZXR7ZW5jb2RlOmE9ZW5jb2RlVVJJQ29tcG9uZW50LGRlbGltaXRlcjpyPUNlZX09ZSxpPXR5cGVvZiB0PT0ib2JqZWN0Ij90Ol9lZSh0LGUpLG89S3R0KGkudG9rZW5zLHIsYSk7cmV0dXJuIGZ1bmN0aW9uKGw9e30pe2xldFtmLC4uLmNdPW8obCk7aWYoYy5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcihgTWlzc2luZyBwYXJhbWV0ZXJzOiAke2Muam9pbigiLCAiKX1gKTtyZXR1cm4gZn19ZnVuY3Rpb24gS3R0KHQsZSxhKXtsZXQgcj10Lm1hcChpPT5UMTEoaSxlLGEpKTtyZXR1cm4gaT0+e2xldCBvPVsiIl07Zm9yKGxldCBzIG9mIHIpe2xldFtsLC4uLmZdPXMoaSk7b1swXSs9bCxvLnB1c2goLi4uZil9cmV0dXJuIG99fWZ1bmN0aW9uIFQxMSh0LGUsYSl7aWYodC50eXBlPT09InRleHQiKXJldHVybigpPT5bdC52YWx1ZV07aWYodC50eXBlPT09Imdyb3VwIil7bGV0IGk9S3R0KHQudG9rZW5zLGUsYSk7cmV0dXJuIG89PntsZXRbcywuLi5sXT1pKG8pO3JldHVybiBsLmxlbmd0aD9bIiJdOltzXX19bGV0IHI9YXx8TGVlO3JldHVybiB0LnR5cGU9PT0id2lsZGNhcmQiJiZhIT09ITE/aT0+e2xldCBvPWlbdC5uYW1lXTtpZihvPT1udWxsKXJldHVyblsiIix0Lm5hbWVdO2lmKCFBcnJheS5pc0FycmF5KG8pfHxvLmxlbmd0aD09PTApdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgIiR7dC5uYW1lfSIgdG8gYmUgYSBub24tZW1wdHkgYXJyYXlgKTtyZXR1cm5bby5tYXAoKHMsbCk9PntpZih0eXBlb2YgcyE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgIiR7dC5uYW1lfS8ke2x9IiB0byBiZSBhIHN0cmluZ2ApO3JldHVybiByKHMpfSkuam9pbihlKV19Omk9PntsZXQgbz1pW3QubmFtZV07aWYobz09bnVsbClyZXR1cm5bIiIsdC5uYW1lXTtpZih0eXBlb2YgbyE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgIiR7dC5uYW1lfSIgdG8gYmUgYSBzdHJpbmdgKTtyZXR1cm5bcihvKV19fWZ1bmN0aW9uIF8xMSh0LGU9e30pe2xldHtkZWNvZGU6YT1kZWNvZGVVUklDb21wb25lbnQsZGVsaW1pdGVyOnI9Q2VlfT1lLHtyZWdleHA6aSxrZXlzOm99PUp0dCh0LGUpLHM9by5tYXAobD0+YT09PSExP0xlZTpsLnR5cGU9PT0icGFyYW0iP2E6Zj0+Zi5zcGxpdChyKS5tYXAoYSkpO3JldHVybiBmdW5jdGlvbihmKXtsZXQgYz1pLmV4ZWMoZik7aWYoIWMpcmV0dXJuITE7bGV0IHU9Y1swXSxkPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBoPTE7aDxjLmxlbmd0aDtoKyspe2lmKGNbaF09PT12b2lkIDApY29udGludWU7bGV0IGc9b1toLTFdLGI9c1toLTFdO2RbZy5uYW1lXT1iKGNbaF0pfXJldHVybntwYXRoOnUscGFyYW1zOmR9fX1mdW5jdGlvbiBKdHQodCxlPXt9KXtsZXR7ZGVsaW1pdGVyOmE9Q2VlLGVuZDpyPSEwLHNlbnNpdGl2ZTppPSExLHRyYWlsaW5nOm89ITB9PWUscz1bXSxsPWk/IiI6ImkiLGY9W107Zm9yKGxldCBkIG9mIGUxdCh0LFtdKSl7bGV0IGg9dHlwZW9mIGQ9PSJvYmplY3QiP2Q6X2VlKGQsZSk7Zm9yKGxldCBnIG9mIHBxKGgudG9rZW5zLDAsW10pKWYucHVzaChBMTEoZyxhLHMsaC5vcmlnaW5hbFBhdGgpKX1sZXQgYz1gXig/OiR7Zi5qb2luKCJ8Iil9KWA7cmV0dXJuIG8mJihjKz1gKD86JHtScihhKX0kKT9gKSxjKz1yPyIkIjpgKD89JHtScihhKX18JClgLHtyZWdleHA6bmV3IFJlZ0V4cChjLGwpLGtleXM6c319ZnVuY3Rpb24gZTF0KHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGEgb2YgdCllMXQoYSxlKTtlbHNlIGUucHVzaCh0KTtyZXR1cm4gZX1mdW5jdGlvbipwcSh0LGUsYSl7aWYoZT09PXQubGVuZ3RoKXJldHVybiB5aWVsZCBhO2xldCByPXRbZV07aWYoci50eXBlPT09Imdyb3VwIilmb3IobGV0IGkgb2YgcHEoci50b2tlbnMsMCxhLnNsaWNlKCkpKXlpZWxkKnBxKHQsZSsxLGkpO2Vsc2UgYS5wdXNoKHIpO3lpZWxkKnBxKHQsZSsxLGEpfWZ1bmN0aW9uIEExMSh0LGUsYSxyKXtsZXQgaT0iIixvPSIiLHM9ITA7Zm9yKGxldCBsIG9mIHQpe2lmKGwudHlwZT09PSJ0ZXh0Iil7aSs9UnIobC52YWx1ZSksbys9bC52YWx1ZSxzfHwocz1sLnZhbHVlLmluY2x1ZGVzKGUpKTtjb250aW51ZX1pZihsLnR5cGU9PT0icGFyYW0ifHxsLnR5cGU9PT0id2lsZGNhcmQiKXtpZighcyYmIW8pdGhyb3cgbmV3IGtuKGBNaXNzaW5nIHRleHQgYmVmb3JlICIke2wubmFtZX0iICR7bC50eXBlfWAscik7bC50eXBlPT09InBhcmFtIj9pKz1gKCR7JDExKGUscz8iIjpvKX0rKWA6aSs9IihbXFxzXFxTXSspIixhLnB1c2gobCksbz0iIixzPSExO2NvbnRpbnVlfX1yZXR1cm4gaX1mdW5jdGlvbiAkMTEodCxlKXtyZXR1cm4gZS5sZW5ndGg8Mj90Lmxlbmd0aDwyP2BbXiR7UnIodCtlKX1dYDpgKD86KD8hJHtScih0KX0pW14ke1JyKGUpfV0pYDp0Lmxlbmd0aDwyP2AoPzooPyEke1JyKGUpfSlbXiR7UnIodCl9XSlgOmAoPzooPyEke1JyKGUpfXwke1JyKHQpfSlbXFxzXFxTXSlgfWZ1bmN0aW9uIHQxdCh0KXtsZXQgZT0iIixhPTA7ZnVuY3Rpb24gcihpKXtyZXR1cm4gRTExKGkpJiZOMTEodFthXSk/aTpKU09OLnN0cmluZ2lmeShpKX1mb3IoO2E8dC5sZW5ndGg7KXtsZXQgaT10W2ErK107aWYoaS50eXBlPT09InRleHQiKXtlKz1DMTEoaS52YWx1ZSk7Y29udGludWV9aWYoaS50eXBlPT09Imdyb3VwIil7ZSs9YHske3QxdChpLnRva2Vucyl9fWA7Y29udGludWV9aWYoaS50eXBlPT09InBhcmFtIil7ZSs9YDoke3IoaS5uYW1lKX1gO2NvbnRpbnVlfWlmKGkudHlwZT09PSJ3aWxkY2FyZCIpe2UrPWAqJHtyKGkubmFtZSl9YDtjb250aW51ZX10aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIHRva2VuIHR5cGU6ICR7aS50eXBlfWApfXJldHVybiBlfWZ1bmN0aW9uIEQxMSh0KXtyZXR1cm4gdDF0KHQudG9rZW5zKX1mdW5jdGlvbiBFMTEodCl7bGV0W2UsLi4uYV09dDtyZXR1cm4gUXR0LnRlc3QoZSkmJmEuZXZlcnkocj0+VGVlLnRlc3QocikpfWZ1bmN0aW9uIE4xMSh0KXtyZXR1cm4gdCYmdC50eXBlPT09InRleHQiPyFUZWUudGVzdCh0LnZhbHVlWzBdKTohMH19KTt2YXIgQWVlLCRlZT1uKCgpPT57azgoKTtWYSgpO0FlZT1OMihhMXQoKSwxKX0pO3ZhciBocSxyMXQ9bigoKT0+eyRlZSgpO2hxPWNsYXNze2NvbnN0cnVjdG9yKCl7fWdldEFsbEFzT2JqZWN0KCl7bGV0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGUuZW50cmllcygpKX1zZXRRdWVyeVBhcmFtKGUsYSxyPSJyZXBsYWNlIil7dmFyIGk9bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtpLnNldChlLGEpLHI9PT0icHVzaCI/aGlzdG9yeS5wdXNoU3RhdGUobnVsbCxudWxsLCI/IitpLnRvU3RyaW5nKCkpOmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsbnVsbCwiPyIraS50b1N0cmluZygpKX1kZWxldGVRdWVyeVBhcmFtKGUsYT0icmVwbGFjZSIpe3ZhciByPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7ci5kZWxldGUoZSksYT09PSJwdXNoIj9oaXN0b3J5LnB1c2hTdGF0ZShudWxsLG51bGwsIj8iK3IudG9TdHJpbmcoKSk6aGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCxudWxsLCI/IityLnRvU3RyaW5nKCkpfWdldFF1ZXJ5UGFyYW0oZSl7cmV0dXJuIHRoaXMuZ2V0QWxsQXNPYmplY3QoKVtlXX19fSk7dmFyIE5hMixEZWUsaTF0PW4oKCk9PnskZWUoKTtyMXQoKTtOYTI9dD0+e2NvbnNvbGUubG9nKGAlY1tSb3V0ZXJdJWMgJHt0fWAsImNvbG9yOiByZ2IoMjU1LCAxMDUsIDEwMCk7IiwiY29sb3I6IGluaGVyaXQiKX0sRGVlPWNsYXNzIHR7Y29uc3RydWN0b3IoZSxhPSIiKXt0aGlzLm9wdGlvbnM9e2RlYnVnOiExfSx0aGlzLnF1ZXJ5UGFyYW1zPW5ldyBocSx0aGlzLnJvdXRlcz1bXSx0aGlzLm9wdGlvbnM9ey4uLnRoaXMub3B0aW9ucywuLi5lfSx0aGlzLmJhc2VQYXRoPWEsdGhpcy5wb3BzdGF0ZUxpc3RlbmVyPXI9PntyLnByZXZlbnREZWZhdWx0KCksdGhpcy5faGFuZGxlUm91dGVTdGF0ZSgpfSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHRoaXMucG9wc3RhdGVMaXN0ZW5lcil9Y3JlYXRlU3ViUm91dGVyKGUsYSl7bGV0IHI9YCR7dGhpcy5iYXNlUGF0aH0ke2V9YDtyZXR1cm4gbmV3IHQoey4uLnRoaXMub3B0aW9ucywuLi5hfSxyKX1hc3luYyBwdXNoVXJsKGU9Ii8iLGE9e30pe2xldCByPWAke3RoaXMuYmFzZVBhdGh9JHtlfWA7ciE9PXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZT93aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoYSx3aW5kb3cuZG9jdW1lbnQudGl0bGUscik6d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKGEsd2luZG93LmRvY3VtZW50LnRpdGxlLHIpLGF3YWl0IHRoaXMuX2hhbmRsZVJvdXRlU3RhdGUoKX1vbihlLGEpe2xldCByPWAke3RoaXMuYmFzZVBhdGh9JHtlfWAsaT17bWF0Y2hGdW5jdGlvbjpBZWUubWF0Y2gociksaGFuZGxlcjphfTtyZXR1cm4gdGhpcy5yb3V0ZXMucHVzaChpKSwoKT0+e3RoaXMucm91dGVzLnNwbGljZSh0aGlzLnJvdXRlcy5pbmRleE9mKGkpLDEpfX1hc3luYyBfaGFuZGxlUm91dGVTdGF0ZSgpe2xldCBlPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxhPXRoaXMucm91dGVzLmZpbHRlcihyPT4hIXIubWF0Y2hGdW5jdGlvbihlKSk7Zm9yKGxldCByIG9mIGEpe2xldCBpPXIubWF0Y2hGdW5jdGlvbihlKTtyLmhhbmRsZXIoey4uLmkudmFsdWVPZigpLHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMuZ2V0QWxsQXNPYmplY3QoKX0pfX1kZXN0cm95KCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIix0aGlzLnBvcHN0YXRlTGlzdGVuZXIpLHRoaXMucm91dGVzPVtdfX19KTt2YXIgR289e307ZXQoR28se1NtYXJ0Um91dGVyOigpPT5EZWV9KTt2YXIgRWVlPW4oKCk9PntpMXQoKX0pO3ZhciBvMXQ9bigoKT0+e044KCk7ZDYoKX0pO2Z1bmN0aW9uIEhyKHQsZSl7cmV0dXJuIHQ+Pj5lfHQ8PDMyLWV9ZnVuY3Rpb24gQjExKHQsZSl7bGV0IGE9ZVswXSxyPWVbMV0saT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGY9ZVs2XSxjPWVbN107Zm9yKGxldCB1PTA7dTw2NDt1Kyspe2lmKHU+PTE2KXtsZXQgdj1Icih0W3UtMTVdLDcpXkhyKHRbdS0xNV0sMTgpXnRbdS0xNV0+Pj4zLHk9SHIodFt1LTJdLDE3KV5Icih0W3UtMl0sMTkpXnRbdS0yXT4+PjEwO3RbdV09dFt1LTE2XSt2K3RbdS03XSt5Pj4+MH1sZXQgZD1IcihzLDYpXkhyKHMsMTEpXkhyKHMsMjUpLGg9cyZsXn5zJmYsZz1jK2QraCtGMTFbdV0rdFt1XT4+PjAsYj1IcihhLDIpXkhyKGEsMTMpXkhyKGEsMjIpLHg9YSZyXmEmaV5yJmksbT1iK3g+Pj4wO2M9ZixmPWwsbD1zLHM9bytnPj4+MCxvPWksaT1yLHI9YSxhPWcrbT4+PjB9ZVswXT1lWzBdK2E+Pj4wLGVbMV09ZVsxXStyPj4+MCxlWzJdPWVbMl0raT4+PjAsZVszXT1lWzNdK28+Pj4wLGVbNF09ZVs0XStzPj4+MCxlWzVdPWVbNV0rbD4+PjAsZVs2XT1lWzZdK2Y+Pj4wLGVbN109ZVs3XStjPj4+MH1mdW5jdGlvbiBOZWUodCl7bGV0IGU9Wy4uLk8xMV0sYT10Lmxlbmd0aCxyPWEqOCxpPWElNjQ8NTY/NTYtYSU2NDoxMjAtYSU2NCxvPW5ldyBVaW50OEFycmF5KGEraSs4KTtvLnNldCh0KSxvW2FdPTEyODtsZXQgcz1uZXcgRGF0YVZpZXcoby5idWZmZXIpO3Muc2V0VWludDMyKG8ubGVuZ3RoLTgsMCwhMSkscy5zZXRVaW50MzIoby5sZW5ndGgtNCxyPj4+MCwhMSk7Zm9yKGxldCBmPTA7ZjxvLmxlbmd0aDtmKz02NCl7bGV0IGM9bmV3IEFycmF5KDY0KTtmb3IobGV0IHU9MDt1PDE2O3UrKyljW3VdPXMuZ2V0VWludDMyKGYrdSo0LCExKTtCMTEoYyxlKX1sZXQgbD0iIjtmb3IobGV0IGY9MDtmPDg7ZisrKWwrPWVbZl0udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKTtyZXR1cm4gbH12YXIgRjExLE8xMSxzMXQ9bigoKT0+e0YxMT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxPMTE9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XX0pO3ZhciBfZD17fTtldChfZCx7bWQ1RnJvbVN0cmluZzooKT0+ajExLHNoYTI1NkZyb21CdWZmZXI6KCk9PkgxMSxzaGEyNTZGcm9tRmlsZTooKT0+VTExLHNoYTI1NkZyb21TdHJlYW06KCk9PlYxMSxzaGEyNTZGcm9tU3RyaW5nOigpPT5jMXQsc2hhMjU2RnJvbVN0cmluZ1N5bmM6KCk9PlIxMSxzaGEyNjVGcm9tT2JqZWN0OigpPT5xMTF9KTt2YXIgbjF0LGwxdCxjMXQsUjExLEgxMSxxMTEsVjExLFUxMSxqMTEsZDF0PW4oKCk9PntvMXQoKTtzMXQoKTtuMXQ9dD0+e2xldCBlPVtdLGE9bmV3IERhdGFWaWV3KHQpO2ZvcihsZXQgcj0wO3I8YS5ieXRlTGVuZ3RoO3IrPTQpe2xldCBvPWEuZ2V0VWludDMyKHIpLnRvU3RyaW5nKDE2KSxzPSIwMDAwMDAwMCIsbD0ocytvKS5zbGljZSgtcy5sZW5ndGgpO2UucHVzaChsKX1yZXR1cm4gZS5qb2luKCIiKX0sbDF0PSgpPT50eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLnN1YnRsZSE9PXZvaWQgMCxjMXQ9YXN5bmMgdD0+e2xldCBlPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KTtpZihsMXQoKSl7bGV0IGE9YXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLGUpO3JldHVybiBuMXQoYSl9ZWxzZSByZXR1cm4gTmVlKGUpfSxSMTE9dD0+e3Rocm93IGNvbnNvbGUud2Fybigic2hhMjU2RnJvbVN0cmluZ1N5bmMgaXMgbm90IHRydWx5IHN5bmNocm9ub3VzIGluIGJyb3dzZXIgZW52aXJvbm1lbnQiKSxuZXcgRXJyb3IoInNoYTI1NkZyb21TdHJpbmdTeW5jIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudC4gVXNlIHNoYTI1NkZyb21TdHJpbmcgaW5zdGVhZC4iKX0sSDExPWFzeW5jIHQ9PntpZihsMXQoKSl7bGV0IGU7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2xldCBpPXQ7ZT1pLmJ1ZmZlci5zbGljZShpLmJ5dGVPZmZzZXQsaS5ieXRlT2Zmc2V0K2kuYnl0ZUxlbmd0aCl9ZWxzZSBlPXQ7bGV0IGE9YXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLGUpO3JldHVybiBuMXQoYSl9ZWxzZXtsZXQgZT10IGluc3RhbmNlb2YgVWludDhBcnJheT90Om5ldyBVaW50OEFycmF5KHQpO3JldHVybiBOZWUoZSl9fSxxMTE9YXN5bmMgdD0+e2xldCBlPW8xLnN0cmluZ2lmeSh0KTtyZXR1cm4gYXdhaXQgYzF0KGUpfSxWMTE9dD0+e3Rocm93IG5ldyBFcnJvcigic2hhMjU2RnJvbVN0cmVhbSBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQiKX0sVTExPWFzeW5jIHQ9Pnt0aHJvdyBuZXcgRXJyb3IoInNoYTI1NkZyb21GaWxlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudCIpfSxqMTE9YXN5bmMgdD0+e3Rocm93IG5ldyBFcnJvcigibWQ1RnJvbVN0cmluZyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQuIFdlYiBDcnlwdG8gQVBJIGRvZXMgbm90IHN1cHBvcnQgTUQ1LiIpfX0pO3ZhciBtcT1uKCgpPT57ZDF0KCk7ZDYoKTtwMigpO1ZhKCk7UFIoKX0pO3ZhciBBZCxQZWU9bigoKT0+e21xKCk7Z3EoKTtBZD1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3RoaXMuc3RhdGVQYXJ0UmVmPWUsdGhpcy5hY3Rpb25EZWY9YX10cmlnZ2VyKGUpe3JldHVybiB0aGlzLnN0YXRlUGFydFJlZi5kaXNwYXRjaEFjdGlvbih0aGlzLGUpfX19KTt2YXIgJGQsZ3E9bigoKT0+e21xKCk7UGVlKCk7JGQ9Y2xhc3N7Y29uc3RydWN0b3IoZSxhKXt0aGlzLnN0YXRlPW5ldyBDdC5yeGpzLlN1YmplY3QsdGhpcy5jdW11bGF0aXZlRGVmZXJyZWQ9VmUuY3VtdWxhdGl2ZURlZmVyKCksdGhpcy53ZWJTdG9yZT1udWxsLHRoaXMubmFtZT1lLGEmJih0aGlzLndlYlN0b3JlT3B0aW9ucz1hKX1hc3luYyBpbml0KCl7aWYodGhpcy53ZWJTdG9yZU9wdGlvbnMpe3RoaXMud2ViU3RvcmU9bmV3IEdhLldlYlN0b3JlKHRoaXMud2ViU3RvcmVPcHRpb25zKSxhd2FpdCB0aGlzLndlYlN0b3JlLmluaXQoKTtsZXQgZT1hd2FpdCB0aGlzLndlYlN0b3JlLmdldChTdHJpbmcodGhpcy5uYW1lKSk7ZSYmdGhpcy52YWxpZGF0ZVN0YXRlKGUpJiYodGhpcy5zdGF0ZVN0b3JlPWUsYXdhaXQgdGhpcy5ub3RpZnlDaGFuZ2UoKSl9fWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuc3RhdGVTdG9yZX1hc3luYyBzZXRTdGF0ZShlKXtpZighdGhpcy52YWxpZGF0ZVN0YXRlKGUpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZSBzdHJ1Y3R1cmUgZm9yIHN0YXRlIHBhcnQgJyR7dGhpcy5uYW1lfSdgKTtyZXR1cm4gdGhpcy5zdGF0ZVN0b3JlPWUsYXdhaXQgdGhpcy5ub3RpZnlDaGFuZ2UoKSx0aGlzLndlYlN0b3JlJiZhd2FpdCB0aGlzLndlYlN0b3JlLnNldChTdHJpbmcodGhpcy5uYW1lKSxlKSx0aGlzLnN0YXRlU3RvcmV9dmFsaWRhdGVTdGF0ZShlKXtyZXR1cm4gZSE9bnVsbH1hc3luYyBub3RpZnlDaGFuZ2UoKXtpZighdGhpcy5zdGF0ZVN0b3JlKXJldHVybjtsZXQgYT1hd2FpdChhc3luYyByPT5hd2FpdCBfZC5zaGEyNTZGcm9tU3RyaW5nKG8xLnN0YWJsZU9uZVdheVN0cmluZ2lmeShyKSkpKHRoaXMuc3RhdGVTdG9yZSk7dGhpcy5sYXN0U3RhdGVOb3RpZmljYXRpb25QYXlsb2FkSGFzaCYmYT09PXRoaXMubGFzdFN0YXRlTm90aWZpY2F0aW9uUGF5bG9hZEhhc2h8fCh0aGlzLmxhc3RTdGF0ZU5vdGlmaWNhdGlvblBheWxvYWRIYXNoPWEsdGhpcy5zdGF0ZS5uZXh0KHRoaXMuc3RhdGVTdG9yZSkpfW5vdGlmeUNoYW5nZUN1bXVsYXRpdmUoKXtzZXRUaW1lb3V0KGFzeW5jKCk9Pnt0aGlzLnN0YXRlU3RvcmUmJmF3YWl0IHRoaXMubm90aWZ5Q2hhbmdlKCl9LDApfXNlbGVjdChlKXtyZXR1cm4gZXx8KGU9cj0+ciksdGhpcy5zdGF0ZS5waXBlKEN0LnJ4anMub3BzLnN0YXJ0V2l0aCh0aGlzLmdldFN0YXRlKCkpLEN0LnJ4anMub3BzLmZpbHRlcihyPT5yIT09dm9pZCAwKSxDdC5yeGpzLm9wcy5tYXAocj0+e3RyeXtyZXR1cm4gZShyKX1jYXRjaHt9fSkpfWNyZWF0ZUFjdGlvbihlKXtyZXR1cm4gbmV3IEFkKHRoaXMsZSl9YXN5bmMgZGlzcGF0Y2hBY3Rpb24oZSxhKXthd2FpdCB0aGlzLmN1bXVsYXRpdmVEZWZlcnJlZC5wcm9taXNlO2xldCByPWF3YWl0IGUuYWN0aW9uRGVmKHRoaXMsYSk7cmV0dXJuIGF3YWl0IHRoaXMuc2V0U3RhdGUociksdGhpcy5nZXRTdGF0ZSgpfWFzeW5jIHdhaXRVbnRpbFByZXNlbnQoZSl7bGV0IGE9VmUuZGVmZXIoKSxpPXRoaXMuc2VsZWN0KGUpLnN1YnNjcmliZShhc3luYyBzPT57cyYmYS5yZXNvbHZlKHMpfSksbz1hd2FpdCBhLnByb21pc2U7cmV0dXJuIGkudW5zdWJzY3JpYmUoKSxvfWFzeW5jIHN0YXRlU2V0dXAoZSl7bGV0IGE9ZSh0aGlzKTt0aGlzLmN1bXVsYXRpdmVEZWZlcnJlZC5hZGRQcm9taXNlKGEpLHRoaXMuc2V0U3RhdGUoYXdhaXQgYSl9fX0pO3ZhciBJZWUsZjF0PW4oKCk9PnttcSgpO2dxKCk7SWVlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZVBhcnRNYXA9e319YXN5bmMgZ2V0U3RhdGVQYXJ0KGUsYSxyPSJzb2Z0Iil7bGV0IGk9dGhpcy5zdGF0ZVBhcnRNYXBbZV07aWYoaSlzd2l0Y2gocil7Y2FzZSJtYW5kYXRvcnkiOnRocm93IG5ldyBFcnJvcihgU3RhdGUgcGFydCAnJHtlfScgYWxyZWFkeSBleGlzdHMsIGJ1dCBpbml0TW9kZSBpcyAnbWFuZGF0b3J5J2ApO2Nhc2UiZm9yY2UiOnJldHVybiB0aGlzLmNyZWF0ZVN0YXRlUGFydChlLGEscik7ZGVmYXVsdDpyZXR1cm4gaX1lbHNle2lmKCFhKXRocm93IG5ldyBFcnJvcihgU3RhdGUgcGFydCAnJHtlfScgZG9lcyBub3QgZXhpc3QgYW5kIG5vIGluaXRpYWwgc3RhdGUgcHJvdmlkZWRgKTtyZXR1cm4gdGhpcy5jcmVhdGVTdGF0ZVBhcnQoZSxhLHIpfX1hc3luYyBjcmVhdGVTdGF0ZVBhcnQoZSxhLHI9InNvZnQiKXtsZXQgaT1uZXcgJGQoZSxyPT09InBlcnNpc3RlbnQiP3tkYk5hbWU6InNtYXJ0c3RhdGUiLHN0b3JlTmFtZTplfTpudWxsKTthd2FpdCBpLmluaXQoKTtsZXQgbz1pLmdldFN0YXRlKCk7cmV0dXJuIGF3YWl0IGkuc2V0U3RhdGUoey4uLm8sLi4uYX0pLHRoaXMuc3RhdGVQYXJ0TWFwW2VdPWksaX19fSk7dmFyIFlvPXt9O2V0KFlvLHtTbWFydHN0YXRlOigpPT5JZWUsU3RhdGVBY3Rpb246KCk9PkFkLFN0YXRlUGFydDooKT0+JGR9KTt2YXIgRmVlPW4oKCk9PntmMXQoKTtncSgpO1BlZSgpfSk7dmFyIHUxdD1uKCgpPT57fSk7dmFyIE9lZSxwMXQ9bigoKT0+e3UxdCgpO09lZT1jbGFzcyB0e3N0YXRpYyBjcmVhdGVGcm9tVXJsKGUsYSl7bGV0IHI9bmV3IFVSTChlKSxpPXt9LG89W107ci5zZWFyY2gmJnIuc2VhcmNoLnJlcGxhY2UoIj8iLCIiKS5zcGxpdCgiJiIpLm1hcChjPT57by5wdXNoKHtrZXk6Yy5zcGxpdCgiPSIpWzBdLHZhbHVlOmMuc3BsaXQoIj0iKVsxXX0pfSk7Zm9yKGxldCBjIG9mIG8paVtjLmtleV09Yy52YWx1ZTtpZihhPy5zZWFyY2hQYXJhbXMpZm9yKGxldCBjIG9mIE9iamVjdC5rZXlzKGEuc2VhcmNoUGFyYW1zKSlpW2NdPWEuc2VhcmNoUGFyYW1zW2NdO2xldCBzPXIucGF0aG5hbWV8fCIiO2lmKE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wKXtzKz0iPyI7bGV0IGM9ITA7Zm9yKGxldCB1IG9mIE9iamVjdC5rZXlzKGkpKWM/Yz0hMTpzKz0iJiIscys9YCR7dX09JHtpW3VdfWB9bGV0IGw9ey4uLnIsaHJlZjpyLmhyZWYsb3JpZ2luOnIub3JpZ2luLHByb3RvY29sOnIucHJvdG9jb2wsdXNlcm5hbWU6ci51c2VybmFtZSxwYXNzd29yZDpyLnBhc3N3b3JkLGhvc3Q6ci5ob3N0LGhvc3RuYW1lOnIuaG9zdG5hbWUscG9ydDpyLnBvcnQscGF0aDpzLHBhdGhuYW1lOnIucGF0aG5hbWUsc2VhcmNoOnIuc2VhcmNoLHNlYXJjaFBhcmFtczppLGhhc2g6ci5oYXNofTshbC5wb3J0JiZsLnByb3RvY29sPT09Imh0dHBzOiImJihsLnBvcnQ9IjQ0MyIpLCFsLnBvcnQmJmwucHJvdG9jb2w9PT0iaHR0cDoiJiYobC5wb3J0PSI4MCIpO2xldCBmPW5ldyB0O3JldHVybiBPYmplY3QuYXNzaWduKGYsbCksZn1zdGF0aWMgY3JlYXRlRnJvbVBhcnNlZFVybChlKXtsZXQgYT1uZXcgdDtyZXR1cm4gT2JqZWN0LmFzc2lnbihhLGUpLGF9Y29uc3RydWN0b3IoKXt0aGlzLnNlYXJjaFBhcmFtcz17fX1jbG9uZSgpe2xldCBlPW5ldyB0O3JldHVybiBPYmplY3QuYXNzaWduKGUsdGhpcyksZS5zZWFyY2hQYXJhbXM9ey4uLnRoaXMuc2VhcmNoUGFyYW1zfSxlfXNldChlLGEpe3JldHVybiB0aGlzW2VdPWEsdGhpc310b1N0cmluZygpe2xldCBlPSIiO3JldHVybiB0aGlzLnVzZXJuYW1lJiYhdGhpcy5wYXNzd29yZCYmKGU9YCR7dGhpcy51c2VybmFtZX1AYCksdGhpcy51c2VybmFtZSYmdGhpcy5wYXNzd29yZCYmKGU9YCR7dGhpcy51c2VybmFtZX06JHt0aGlzLnBhc3N3b3JkfUBgKSxgJHt0aGlzLnByb3RvY29sfS8vJHtlfSR7dGhpcy5ob3N0bmFtZX06JHt0aGlzLnBvcnR9JHt0aGlzLnBhdGh9YH19fSk7dmFyIFpvPXt9O2V0KFpvLHtTbWFydHVybDooKT0+T2VlfSk7dmFyIEJlZT1uKCgpPT57cDF0KCl9KTt2YXIgeHEsU24sYnE9bigoKT0+e3hxPWNsYXNze2NsYWltKCl7aWYodGhpcy5jbGFpbWVkKXRocm93IG5ldyBFcnJvcigiRGVmZXJyZWQgYWxyZWFkeSBjbGFpbWVkIik7dGhpcy5jbGFpbWVkPSEwfWdldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWRBdD90aGlzLnN0b3BwZWRBdC10aGlzLnN0YXJ0ZWRBdDpEYXRlLm5vdygpLXRoaXMuc3RhcnRlZEF0fWNvbnN0cnVjdG9yKCl7dGhpcy5jbGFpbWVkPSExLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZSxhKT0+e3RoaXMucmVzb2x2ZT1yPT57dGhpcy5zdGF0dXM9ImZ1bGZpbGxlZCIsdGhpcy5zdG9wcGVkQXQ9RGF0ZS5ub3coKSxlKHIpfSx0aGlzLnJlamVjdD1yPT57dGhpcy5zdGF0dXM9InJlamVjdGVkIix0aGlzLnN0b3BwZWRBdD1EYXRlLm5vdygpLGEocil9LHRoaXMuc3RhcnRlZEF0PURhdGUubm93KCksdGhpcy5zdGF0dXM9InBlbmRpbmcifSl9fSxTbj0oKT0+bmV3IHhxfSk7dmFyIHZxLEcxMSxoMXQ9bigoKT0+e2JxKCk7dnE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXM9W10sdGhpcy5kZWZlcnJlZD1TbigpLHRoaXMucHJvbWlzZT10aGlzLmRlZmVycmVkLnByb21pc2Usc2V0VGltZW91dChhc3luYygpPT57Zm9yKDt0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMubGVuZ3RoPjA7KWF3YWl0IHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5zaGlmdCgpO3RoaXMuZGVmZXJyZWQucmVzb2x2ZSgpfSwwKX1hZGRQcm9taXNlKGUpe3RoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5wdXNoKGUpfX0sRzExPSgpPT5uZXcgdnF9KTt2YXIgQ249e307ZXQoQ24se0N1bXVsYXRpdmVEZWZlcnJlZDooKT0+dnEsRGVmZXJyZWQ6KCk9PnhxLGN1bXVsYXRpdmVEZWZlcjooKT0+RzExLGRlZmVyOigpPT5TbixnZXRGaXJzdFRydWVPckZhbHNlOigpPT5LMTEsbWFwOigpPT5YMTEscmVqZWN0ZWRQcm9taXNlOigpPT5aMTEscmVzb2x2ZWRQcm9taXNlOigpPT5ZMTEsdGltZW91dEFuZENvbnRpbnVlOigpPT5RMTEsdGltZW91dFdyYXA6KCk9Pm0xdH0pO3ZhciBZMTEsWjExLFgxMSxtMXQsUTExLEsxMSxSZWU9bigoKT0+e2JxKCk7aDF0KCk7YnEoKTtZMTE9dD0+UHJvbWlzZS5yZXNvbHZlKHQpLFoxMT10PT5Qcm9taXNlLnJlamVjdCh0KSxYMTE9YXN5bmModCxlKT0+e2xldCBhPVtdLHI9W107Zm9yKGxldCBpIG9mIHQpe2xldCBvPWUoaSk7YS5wdXNoKG8pLG8udGhlbihzPT57ci5wdXNoKHMpfSl9cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKGEpLHJ9LG0xdD1hc3luYyh0LGUsYT0hMCk9Pm5ldyBQcm9taXNlKChyLGkpPT57c2V0VGltZW91dCgoKT0+e2E/aShuZXcgRXJyb3IoInRpbWVvdXQiKSk6cihudWxsKX0sZSksdC50aGVuKHIsaSl9KSxRMTE9YXN5bmModCxlPTZlNCk9Pm0xdCh0LGUsITEpLEsxMT1hc3luYyB0PT57bGV0IGU9U24oKTtmb3IobGV0IGEgb2YgdClhLnRoZW4ocj0+e3I9PT0hMCYmZS5yZXNvbHZlKCEwKX0pO3JldHVybiBQcm9taXNlLmFsbCh0KS50aGVuKCgpPT57ZS5yZXNvbHZlKCExKX0pLGUucHJvbWlzZX19KTt2YXIgSGVlPXt9O2V0KEhlZSx7VGltZW91dDooKT0+eXEsZGVsYXlGb3I6KCk9PmcxdCxkZWxheUZvclJhbmRvbTooKT0+SjExfSk7dmFyIGcxdCxKMTEseXEseDF0PW4oKCk9PntSZWUoKTtnMXQ9YXN5bmModCxlLGE9ITEpPT4oYXdhaXQgbmV3IHlxKHQsbnVsbCxhKS5wcm9taXNlLGUpLEoxMT1hc3luYyh0LGUsYSxyPSExKT0+KGF3YWl0IGcxdChNYXRoLnJhbmRvbSgpKihlLXQpK3QsbnVsbCxyKSxhKSx5cT1jbGFzc3tjb25zdHJ1Y3RvcihlLGEscj0hMSl7dGhpcy5fY2FuY2VsbGVkPSExLHRoaXMudGltZW91dEluTWlsbGlzPWUsdGhpcy5fZGVmZXJyZWQ9U24oKSx0aGlzLnByb21pc2U9dGhpcy5fZGVmZXJyZWQucHJvbWlzZSx0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9jYW5jZWxsZWR8fHRoaXMuX2RlZmVycmVkLnJlc29sdmUoYSl9LGUpLHRoaXMuc3RhcnRlZD1EYXRlLm5vdygpLHImJnRoaXMubWFrZVVucmVmZWQoKX1tYWtlVW5yZWZlZCgpe3RoaXMuX3RpbWVvdXQudW5yZWYoKX1jYW5jZWwoKXt0aGlzLl9jYW5jZWxsZWQ9ITAsY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpfWdldFRpbWVMZWZ0KCl7bGV0IGU9dGhpcy5zdGFydGVkK3RoaXMudGltZW91dEluTWlsbGlzLURhdGUubm93KCk7cmV0dXJuIGU+MD9lOjB9fX0pO3ZhciBiMXQ9bigoKT0+e30pO3ZhciB3cT1uKCgpPT57cXIoKX0pO3ZhciBNcT1uKCgpPT57cXIoKTtxcigpfSk7dmFyIHYxdD1uKCgpPT57cXIoKX0pO3ZhciB5MXQ9bigoKT0+e30pO3ZhciB3MXQ9bigoKT0+e3FyKCl9KTt2YXIgTTF0PW4oKCk9PntxcigpfSk7dmFyIHoxdD1uKCgpPT57fSk7dmFyIGsxdD1uKCgpPT57fSk7dmFyIHFlZT17fTt2YXIgenE9bigoKT0+e3YxdCgpO3kxdCgpO3cxdCgpO00xdCgpO3oxdCgpO2sxdCgpfSk7dmFyIFZlZSxTMXQ9bigoKT0+e3pxKCk7d3EoKTtNcSgpO1ZlZT1jbGFzc3t9fSk7dmFyIEMxdD1uKCgpPT57fSk7dmFyIEwxdD1uKCgpPT57fSk7dmFyIFQxdD1uKCgpPT57fSk7dmFyIF8xdD1uKCgpPT57fSk7dmFyIFVlZT17fTt2YXIgamVlPW4oKCk9PntDMXQoKTtMMXQoKTtUMXQoKTtfMXQoKX0pO3ZhciBBMXQ9bigoKT0+e1dlZSgpO3pxKCk7amVlKCl9KTt2YXIgJDF0PW4oKCk9Pnt9KTt2YXIgRDF0PW4oKCk9PntNcSgpfSk7dmFyIEUxdD1uKCgpPT57fSk7dmFyIGtxPXt9O2V0KGtxLHtJSm9iOigpPT5WZWV9KTt2YXIgV2VlPW4oKCk9PntiMXQoKTt3cSgpO01xKCk7UzF0KCk7QTF0KCk7JDF0KCk7RDF0KCk7RTF0KCl9KTt2YXIgTjF0PW4oKCk9Pnt9KTt2YXIgUDF0PW4oKCk9Pnt9KTt2YXIgR2VlPXt9O3ZhciBJMXQ9bigoKT0+e04xdCgpO1AxdCgpfSk7dmFyIEYxdD1uKCgpPT57fSk7dmFyIE8xdD1uKCgpPT57fSk7dmFyIFllZT17fTt2YXIgQjF0PW4oKCk9PntGMXQoKTtPMXQoKX0pO3ZhciBaZWU9bigoKT0+e3FyKCl9KTt2YXIgUjF0PW4oKCk9PntxcigpfSk7dmFyIEgxdD1uKCgpPT57WmVlKCl9KTt2YXIgWGVlPXt9O3ZhciBxMXQ9bigoKT0+e1plZSgpO1IxdCgpO0gxdCgpfSk7dmFyIFYxdD1uKCgpPT57fSk7dmFyIFUxdD1uKCgpPT57fSk7dmFyIFFlZT17fTt2YXIgajF0PW4oKCk9PntWMXQoKTtVMXQoKX0pO3ZhciBLZWU9bigoKT0+e30pO3ZhciBKZWUsVzF0PW4oKCk9PntLZWUoKTtKZWU9Y2xhc3N7fX0pO3ZhciBHMXQ9bigoKT0+e30pO3ZhciBZMXQ9bigoKT0+e30pO3ZhciBaMXQ9bigoKT0+e30pO3ZhciBYMXQ9bigoKT0+e30pO3ZhciBRMXQ9bigoKT0+e30pO3ZhciBLMXQ9bigoKT0+e30pO3ZhciBKMXQ9bigoKT0+e30pO3ZhciBlMnQ9bigoKT0+e30pO3ZhciB0MnQ9bigoKT0+e30pO3ZhciBTcT17fTtldChTcSx7SUNuYW1lRGVzY3JpcHRvcjooKT0+SmVlfSk7dmFyIGEydD1uKCgpPT57S2VlKCk7VzF0KCk7RzF0KCk7WTF0KCk7WjF0KCk7WDF0KCk7UTF0KCk7SzF0KCk7SjF0KCk7ZTJ0KCk7dDJ0KCl9KTt2YXIgZXRlPW4oKCk9Pnt3cSgpfSk7dmFyIHIydD1uKCgpPT57ZXRlKCl9KTt2YXIgdHRlPXt9O3ZhciBpMnQ9bigoKT0+e3IydCgpO2V0ZSgpfSk7dmFyIGF0ZT17fTt2YXIgbzJ0PW4oKCk9Pnt9KTt2YXIgczJ0PW4oKCk9Pnt9KTt2YXIgbjJ0PW4oKCk9Pnt9KTt2YXIgbDJ0PW4oKCk9Pnt9KTt2YXIgcnRlPXt9O3ZhciBjMnQ9bigoKT0+e3MydCgpO24ydCgpO2wydCgpfSk7dmFyIGQydD1uKCgpPT57fSk7dmFyIGl0ZT17fTtldChpdGUse2J1c2luZXNzOigpPT5rcSxjb2RlOigpPT5HZWUsY29udGFpbmVyOigpPT5ZZWUsY29udGVudDooKT0+WGVlLGRhdGFiYXNlOigpPT5VZWUsZmluYW5jZTooKT0+cWVlLGdlbmVyYWw6KCk9PlFlZSxuZXR3b3JrOigpPT5TcSxzYWFzOigpPT50dGUsc3RvcmFnZTooKT0+YXRlLHdlYnNpdGU6KCk9PnJ0ZX0pO3ZhciBxcj1uKCgpPT57V2VlKCk7STF0KCk7QjF0KCk7amVlKCk7enEoKTtxMXQoKTtqMXQoKTthMnQoKTtpMnQoKTtvMnQoKTtjMnQoKTtkMnQoKX0pO3ZhciBMaT1uKCgpPT57eDF0KCk7UmVlKCk7cXIoKX0pO3ZhciBDcT1uKCgpPT57TGkoKX0pO3ZhciBYbyxEZD1uKCgpPT57TGkoKTtYbz1jbGFzc3thcHBlbmRUb0RvbSgpeyF0aGlzLmVsZW1lbnRSZWYucGFyZW50RWxlbWVudCYmIXRoaXMuZWxlbWVudFJlZi5wYXJlbnROb2RlJiZkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudFJlZil9cmVtb3ZlRnJvbURvbSgpe3RoaXMuZWxlbWVudFJlZi5wYXJlbnRFbGVtZW50P3RoaXMuZWxlbWVudFJlZi5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudFJlZik6dGhpcy5lbGVtZW50UmVmLnBhcmVudE5vZGUmJnRoaXMuZWxlbWVudFJlZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudFJlZil9fX0pO3ZhciBMbixMcT1uKCgpPT57TGkoKTtDcSgpO0RkKCk7TG49Y2xhc3MgdCBleHRlbmRzIFhve3N0YXRpYyBjcmVhdGVDb21wYW55SnNvbkxkKGUpe2xldCBhPXsiQGNvbnRleHQiOiJodHRwczovL3NjaGVtYS5vcmciLCJAdHlwZSI6IkNvcnBvcmF0aW9uIixuYW1lOmUubmFtZSxhbHRlcm5hdGVOYW1lOmUubmFtZS5yZXBsYWNlKCIgR21iSCIsIiIpLHVybDplLmNvbnRhY3Qud2Vic2l0ZSxsb2dvOmUuY29udGFjdC5sb2dvVXJsLGNvbnRhY3RQb2ludDp7IkB0eXBlIjoiQ29udGFjdFBvaW50Iix0ZWxlcGhvbmU6ZS5jb250YWN0LnBob25lLGNvbnRhY3RUeXBlOiJjdXN0b21lciBzZXJ2aWNlIixhcmVhU2VydmVkOiJERSIsYXZhaWxhYmxlTGFuZ3VhZ2U6WyJlbiIsIkdlcm1hbiJdfSxzYW1lQXM6W119O3JldHVybiBlLmNvbnRhY3QuZmFjZWJvb2tVcmwmJmEuc2FtZUFzLnB1c2goZS5jb250YWN0LmZhY2Vib29rVXJsKSxlLmNvbnRhY3QudHdpdHRlclVybCYmYS5zYW1lQXMucHVzaChlLmNvbnRhY3QudHdpdHRlclVybCksbmV3IHQoYSl9c3RhdGljIGNyZWF0ZU5ld3NBcnRpY2xlSnNvbkxkKGUpe2xldCBhPXsiQGNvbnRleHQiOiJodHRwczovL3NjaGVtYS5vcmciLCJAdHlwZSI6Ik5ld3NBcnRpY2xlIixtYWluRW50aXR5T2ZQYWdlOnsiQHR5cGUiOiJXZWJQYWdlIiwiQGlkIjp3aW5kb3cubG9jYXRpb24uaHJlZn0saGVhZGxpbmU6IkFydGljbGUgaGVhZGxpbmUiLGltYWdlOltlLmZlYXR1cmVkSW1hZ2VVcmxdLGRhdGVQdWJsaXNoZWQ6bmV3IERhdGUoZS50aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksZGF0ZU1vZGlmaWVkOm5ldyBEYXRlKGUudGltZXN0YW1wKS50b0lTT1N0cmluZygpLGF1dGhvcjp7IkB0eXBlIjoiUGVyc29uIixuYW1lOmAke2UuYXV0aG9yLmZpcnN0TmFtZX0gJHtlLmF1dGhvci5zdXJOYW1lfWB9LHB1Ymxpc2hlcjp7IkB0eXBlIjoiT3JnYW5pemF0aW9uIixuYW1lOmUuYXV0aG9yLnN1ck5hbWUsbG9nbzp7IkB0eXBlIjoiSW1hZ2VPYmplY3QiLHVybDplLmF1dGhvci5zdXJOYW1lfX0sZGVzY3JpcHRpb246ZS5hdXRob3IuZmlyc3ROYW1lfTtyZXR1cm4gbmV3IHQoYSl9c3RhdGljIGNyZWF0ZVByb2R1Y3RKc29uTGQoZSxhKXtsZXQgcj17IkBjb250ZXh0IjoiaHR0cHM6Ly9zY2hlbWEub3JnIiwiQHR5cGUiOiJTb2Z0d2FyZUFwcGxpY2F0aW9uIixuYW1lOmUubmFtZSxkZXNjcmlwdGlvbjplLmRlc2NyaXB0aW9uLG9wZXJhdGluZ1N5c3RlbTplLm9zLGFwcGxpY2F0aW9uQ2F0ZWdvcnk6ZS5jYXRlZ29yeSxvZmZlcnM6eyJAdHlwZSI6Ik9mZmVyIixuYW1lOiJVc2VyLWJhc2VkIFBsYW4iLHByaWNlU3BlY2lmaWNhdGlvbjp7IkB0eXBlIjoiUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb24iLHZhbHVlTmFtZToiTnVtYmVyIG9mIFVzZXJzIix2YWx1ZVJlcXVpcmVkOiEwLHByaWNlOiI0Ljk5IixwcmljZUN1cnJlbmN5OiJFVVIifX0scHVibGlzaGVyOnRoaXMuY3JlYXRlQ29tcGFueUpzb25MZChhKS5lbGVtZW50UmVmLnRleHRDb250ZW50LHNjcmVlbnNob3Q6Imh0dHBzOi8vd3d3LnNvY2lhbC5pby9zY3JlZW5zaG90LnBuZyIsdXJsOiJodHRwczovL3d3dy5zb2NpYWwuaW8vIn07cmV0dXJuIG5ldyB0KHIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCk7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS50eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIixhLnRleHQ9SlNPTi5zdHJpbmdpZnkoZSksdGhpcy5lbGVtZW50UmVmPWF9fX0pO3ZhciBPMixUcT1uKCgpPT57TGkoKTtEZCgpO08yPWNsYXNzIHQgZXh0ZW5kcyBYb3tzdGF0aWMgY3JlYXRlTmV3c0FydGljbGVPZ1RhZ3MoZSl7bGV0IGE9W107cmV0dXJuIGEucHVzaChuZXcgdCgib2c6dXJsIixlLnVybCkpLGEucHVzaChuZXcgdCgib2c6dGl0bGUiLGUudGl0bGUpKSxhLnB1c2gobmV3IHQoIm9nOmRlc2NyaXB0aW9uIixlLmNvbnRlbnQpKSxhLnB1c2gobmV3IHQoIm9nOmltYWdlIixlLmZlYXR1cmVkSW1hZ2VVcmwpKSxhfXN0YXRpYyBjcmVhdGVQcm9kdWN0T2dUYWdzKGUpe2xldCBhPVtdO3JldHVybiBhLnB1c2gobmV3IHQoIm9nOnVybCIsZ2xvYmFsVGhpcy5sb2NhdGlvbi5ocmVmKSksYS5wdXNoKG5ldyB0KCJvZzp0aXRsZSIsYCR7ZS5uYW1lfSAtICR7ZS5zbG9nYW59YCkpLGEucHVzaChuZXcgdCgib2c6c2l0ZV9uYW1lIixlLm5hbWUpKSxhLnB1c2gobmV3IHQoIm9nOmRlc2NyaXB0aW9uIixlLmRlc2NyaXB0aW9uKSksYS5wdXNoKG5ldyB0KCJvZzppbWFnZSIsZS5sb2dvTGluaykpLGF9Y29uc3RydWN0b3IoZSxhKXtzdXBlcigpO2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKTtyLnNldEF0dHJpYnV0ZSgicHJvcGVydHkiLGUpLHIuY29udGVudD1hLHRoaXMuZWxlbWVudFJlZj1yfX19KTt2YXIgQjYsb3RlPW4oKCk9PntEZCgpO0xxKCk7VHEoKTtzdGUoKTtMaSgpO0I2PWNsYXNze3NldCB0aXRsZShlKXt0aGlzLnRpdGxlU3RvcmU9ZSx0aGlzLnN0YXRlPT09ImVuYWJsZWQiJiYoZG9jdW1lbnQudGl0bGU9dGhpcy50aXRsZVN0b3JlKX1nZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy50aXRsZVN0b3JlfWNvbnN0cnVjdG9yKGUsYSl7dGhpcy50YWdzPVtdLHRoaXMuc3RhdGU9ImRpc2FibGVkIix0aGlzLnRhZ01hbmFnZXJSZWY9ZX1hZGRUYWcoZSl7aWYoZSBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYSBvZiBlKXRoaXMuYWRkVGFnKGEpO2Vsc2UgdGhpcy50YWdzLnB1c2goZSksdGhpcy5zdGF0ZT09PSJlbmFibGVkIiYmZS5hcHBlbmRUb0RvbSgpfWFzeW5jIGFkZENvbXBhbnlJbmZvKGUpe3RoaXMuYWRkVGFnKExuLmNyZWF0ZUNvbXBhbnlKc29uTGQoZSkpLHRoaXMuYWRkVGFnKG5ldyBPMigib2c6dHlwZSIsImJ1c2luZXNzLmJ1c2luZXNzIikpLHRoaXMuYWRkVGFnKG5ldyBPMigib2c6dGl0bGUiLGUubmFtZSkpLHRoaXMuYWRkVGFnKG5ldyBPMigib2c6dXJsIixlLmNvbnRhY3Qud2Vic2l0ZSkpLHRoaXMuYWRkVGFnKG5ldyBPMigib2c6aW1hZ2UiLGUuY29udGFjdC5sb2dvVXJsKSksdGhpcy5hZGRUYWcobmV3IE8yKCJidXNpbmVzczpjb250YWN0X2RhdGE6c3RyZWV0X2FkZHJlc3MiLGAke2UuY29udGFjdC5hZGRyZXNzLnN0cmVldE5hbWV9ICR7ZS5jb250YWN0LmFkZHJlc3MuaG91c2VOdW1iZXJ9YCkpLHRoaXMuYWRkVGFnKG5ldyBPMigiYnVzaW5lc3M6Y29udGFjdF9kYXRhOmxvY2FsaXR5IixlLmNvbnRhY3QuYWRkcmVzcy5wb3N0YWxDb2RlKSksdGhpcy5hZGRUYWcobmV3IE8yKCJidXNpbmVzczpjb250YWN0X2RhdGE6cmVnaW9uIixlLmNvbnRhY3QuYWRkcmVzcy5jaXR5KSksdGhpcy5hZGRUYWcobmV3IE8yKCJidXNpbmVzczpjb250YWN0X2RhdGE6cG9zdGFsX2NvZGUiLGUuY29udGFjdC5hZGRyZXNzLnBvc3RhbENvZGUpKSx0aGlzLmFkZFRhZyhuZXcgTzIoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpjb3VudHJ5X25hbWUiLGUuY29udGFjdC5hZGRyZXNzLmNvdW50cnkpKX1hZGROZXdzQXJ0aWNsZUluZm8oZSl7dGhpcy5hZGRUYWcoTG4uY3JlYXRlTmV3c0FydGljbGVKc29uTGQoZSkpLHRoaXMuYWRkVGFnKE8yLmNyZWF0ZU5ld3NBcnRpY2xlT2dUYWdzKGUpKX1hZGRQcm9kdWN0SW5mbyhlLGEpe3RoaXMuYWRkVGFnKExuLmNyZWF0ZVByb2R1Y3RKc29uTGQoZSxhKSksdGhpcy5hZGRUYWcoTzIuY3JlYXRlUHJvZHVjdE9nVGFncyhlKSl9YXN5bmMgZW5hYmxlKCl7dGhpcy50aXRsZSYmKGRvY3VtZW50LnRpdGxlPXRoaXMudGl0bGUpO2ZvcihsZXQgZSBvZiB0aGlzLnRhZ3MpZS5hcHBlbmRUb0RvbSgpO3RoaXMuc3RhdGU9ImVuYWJsZWQifWFzeW5jIGRpc2FibGUoKXtmb3IobGV0IGUgb2YgdGhpcy50YWdzKWUucmVtb3ZlRnJvbURvbSgpO3RoaXMuc3RhdGU9ImRpc2FibGVkIn19fSk7dmFyIEFhLG50ZT1uKCgpPT57RGQoKTtBYT1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKGUsYSl7c3VwZXIoKTtsZXQgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIik7ci5uYW1lPWUsci5jb250ZW50PWEsdGhpcy5lbGVtZW50UmVmPXJ9fX0pO3ZhciBfcSxzdGU9bigoKT0+e290ZSgpO0xpKCk7Q3EoKTtudGUoKTtMcSgpO1RxKCk7X3E9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmdsb2JhbExldmVsPW5ldyBCNih0aGlzLCJnbG9iYWwiKSx0aGlzLmJhc2VMZXZlbD1uZXcgQjYodGhpcywiYmFzZSIpfWFzeW5jIHNldHVwKGUpe3N3aXRjaCh0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgQWEoImdvb2dsZSIsIm5vdHJhbnNsYXRlIikpLHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBBYSgicmV2aXNpdC1hZnRlciIsIjEgZGF5cyIpKSxlLnR3aXR0ZXJIYW5kbGUmJih0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgQWEoInR3aXR0ZXI6Y2FyZCIsInN1bW1hcnlfbGFyZ2VfaW1hZ2UiKSksdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IEFhKCJ0d2l0dGVyOnNpdGUiLGUudHdpdHRlckhhbmRsZSkpLHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBBYSgidHdpdHRlcjpjcmVhdG9yIixlLnR3aXR0ZXJIYW5kbGUpKSksdGhpcy5iYXNlTGV2ZWwudGl0bGU9ZS50aXRsZSxlLmRlc2NyaXB0aW9uJiZ0aGlzLmJhc2VMZXZlbC5hZGRUYWcobmV3IEFhKCJkZXNjcmlwdGlvbiIsZS5kZXNjcmlwdGlvbikpLGUuY2Fub25pY2FsRG9tYWluJiZ0aGlzLmJhc2VMZXZlbC5hZGRUYWcobmV3IEFhKCJjYW5vbmljYWwiLGUuY2Fub25pY2FsRG9tYWluKSksITApe2Nhc2UoZS5sZENvbXBhbnkmJiFlLmxkUHJvZHVjdCk6dGhpcy5iYXNlTGV2ZWwuYWRkQ29tcGFueUluZm8oZS5sZENvbXBhbnkpO2JyZWFrO2Nhc2UhIWUubGRQcm9kdWN0OnRoaXMuYmFzZUxldmVsLmFkZFByb2R1Y3RJbmZvKGUubGRQcm9kdWN0LGUubGRDb21wYW55KTticmVha31hd2FpdCB0aGlzLmdsb2JhbExldmVsLmVuYWJsZSgpLHRoaXMuYWN0aXZlTGV2ZWw9dGhpcy5iYXNlTGV2ZWwsYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5lbmFibGUoKX1hc3luYyBzZXRTdWJQYWdlTGV2ZWwoZSl7bGV0IGE9bmV3IEI2KHRoaXMsInN1YnBhZ2UiKTtyZXR1cm4gYS50aXRsZT1lLnRpdGxlLGUuZGVzY3JpcHRpb24mJmEuYWRkVGFnKG5ldyBBYSgiZGVzY3JpcHRpb24iLGUuZGVzY3JpcHRpb24pKSxhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmRpc2FibGUoKSx0aGlzLmFjdGl2ZUxldmVsPWEsYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5lbmFibGUoKSxhfWFzeW5jIHJldmVydFRvQmFzZUxldmVsKCl7dGhpcy5hY3RpdmVMZXZlbCE9PXRoaXMuYmFzZUxldmVsJiYoYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5kaXNhYmxlKCksdGhpcy5hY3RpdmVMZXZlbD10aGlzLmJhc2VMZXZlbCxhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmVuYWJsZSgpKX19fSk7dmFyIEVkLGYydD1uKCgpPT57TGkoKTtDcSgpO3N0ZSgpO290ZSgpO0VkPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMudGFnTWFuYWdlcj1uZXcgX3EsdGhpcy5yZWFkeURlZmVycmVkPUNuLmRlZmVyKCksdGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQ9Q24uZGVmZXIoKSx0aGlzLnJlYWR5UHJvbWlzZT10aGlzLnJlYWR5RGVmZXJyZWQucHJvbWlzZSx0aGlzLnJlYWR5Rm9yU21hcnRzc3JQcm9taXNlPXRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnByb21pc2UsdGhpcy5vcHRpb25zPWUsdGhpcy5zZXR1cCgpLnRoZW4oKCk9Pnt0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpLHRoaXMub3B0aW9ucy5zbWFydHNzcldhaXRGb3JSZWFkeVNpZ25hbHx8dGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQucmVzb2x2ZSgpfSl9YXN5bmMgc2V0dXAoZSl7ZSYmKHRoaXMub3B0aW9ucz1lKSxhd2FpdCB0aGlzLnRhZ01hbmFnZXIuc2V0dXAodGhpcy5vcHRpb25zLm1ldGFPYmplY3QpfXJldmVydFRvQmFzZUxldmVsKCl7dGhpcy50YWdNYW5hZ2VyLnJldmVydFRvQmFzZUxldmVsKCl9YXN5bmMgc2V0U3ViTGV2ZWwoZSl7cmV0dXJuIGF3YWl0IHRoaXMudGFnTWFuYWdlci5zZXRTdWJQYWdlTGV2ZWwoZSl9Zmxhc2hUaXRsZShlKXt9aW5mb3JtUmVhZHlGb3JTbWFydHNzcigpe3RoaXMub3B0aW9ucy5zbWFydHNzcldhaXRGb3JSZWFkeVNpZ25hbHx8Y29uc29sZS5lcnJvcigiWW91IGhhdmUgbm90IGluZGljYXRlZCB0aGF0IHlvdSBpbmZvcm0gc21hcnRzc3IgYnkgYSBkZWRpY2F0ZWQgc2lnbmFsISBQbGVhc2UgY29uc2lkZXIgZG9pbmcgc28hIiksdGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQucmVzb2x2ZSgpfX19KTt2YXIgbHRlLHUydD1uKCgpPT57TGkoKTtsdGU9Y2xhc3N7fX0pO3ZhciBjdGU9e307ZXQoY3RlLHtKc29uTGRUYWc6KCk9PkxuLE1ldGFUYWc6KCk9PkFhLE9wZW5ncmFwaFRhZzooKT0+TzIsVGl0bGU6KCk9Pmx0ZSxXZWJTZXR1cDooKT0+RWR9KTt2YXIgQXE9bigoKT0+e2YydCgpO250ZSgpO1RxKCk7THEoKTt1MnQoKX0pO3ZhciBwMnQsJHE9bigoKT0+e2lpKCk7UlkoKTtwMigpO1ZhKCk7bFgoKTtwMnQ9TjIoZFgoKSwxKX0pO3ZhciBSNixkdGU9bigoKT0+eyRxKCk7UjY9Y2xhc3MgdHtjb25zdHJ1Y3Rvcigpe3RoaXMubWFwT2JqZWN0PXt9fWlzVW5pcXVlS2V5KGUpe3JldHVybiF0aGlzLm1hcE9iamVjdFtlXX1hZGRUb01hcChlLGEscil7cmV0dXJuIHRoaXMuaXNVbmlxdWVLZXkoZSl8fHImJnIuZm9yY2U/KHRoaXMubWFwT2JqZWN0W2VdPWEsITApOiExfWdldEJ5S2V5KGUpe3JldHVybiB0aGlzLm1hcE9iamVjdFtlXX1yZW1vdmVGcm9tTWFwKGUpe2xldCBhPXRoaXMuZ2V0QnlLZXkoZSk7cmV0dXJuIGRlbGV0ZSB0aGlzLm1hcE9iamVjdFtlXSxhfWdldEtleXMoKXtsZXQgZT1bXTtmb3IobGV0IGEgaW4gdGhpcy5tYXBPYmplY3QpdGhpcy5tYXBPYmplY3RbYV0mJmUucHVzaChhKTtyZXR1cm4gZX1jbGVhbigpe3RoaXMubWFwT2JqZWN0PXt9fWNvbmNhdChlKXtsZXQgYT1uZXcgdDtmb3IobGV0IHIgb2YgdGhpcy5nZXRLZXlzKCkpYS5hZGRUb01hcChyLHRoaXMuZ2V0QnlLZXkocikpO2ZvcihsZXQgciBvZiBlLmdldEtleXMoKSlhLmFkZFRvTWFwKHIsZS5nZXRCeUtleShyKSx7Zm9yY2U6ITB9KTtyZXR1cm4gYX1hZGRBbGxGcm9tT3RoZXIoZSl7Zm9yKGxldCBhIG9mIGUuZ2V0S2V5cygpKXRoaXMuYWRkVG9NYXAoYSxlLmdldEJ5S2V5KGEpLHtmb3JjZTohMH0pfWFzeW5jIGZpbmQoZSl7Zm9yKGxldCBhIG9mIHRoaXMuZ2V0S2V5cygpKXtsZXQgcj10aGlzLmdldEJ5S2V5KGEpO2lmKGF3YWl0IGUocikpcmV0dXJuIHJ9fX19KTt2YXIgdDIxLERxLG0ydD1uKCgpPT57JHEoKTtkdGUoKTt0MjE9KHQ9InVuaSIpPT5gJHt0fXh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csZT0+e2xldCBhPU1hdGgucmFuZG9tKCkqMTZ8MDtyZXR1cm4oZT09PSJ4Ij9hOmEmM3w4KS50b1N0cmluZygxNil9KSxEcT1jbGFzcyB0e2NvbnN0cnVjdG9yKCl7dGhpcy5mYXN0TWFwPW5ldyBSNix0aGlzLmV2ZW50U3ViamVjdD1uZXcgQ3Qucnhqcy5TdWJqZWN0fWFkZE1hcHBlZFVuaXF1ZShlLGEpe3RoaXMuZmFzdE1hcC5hZGRUb01hcChlLGEpfWdldE1hcHBlZFVuaXF1ZShlKXtyZXR1cm4gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGUpfXJlbW92ZU1hcHBlZFVuaXF1ZShlKXtsZXQgYT10aGlzLmdldE1hcHBlZFVuaXF1ZShlKX1hZGQoZSl7Zm9yKGxldCByIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpaWYodGhpcy5mYXN0TWFwLmdldEJ5S2V5KHIpPT09ZSlyZXR1cm4gcjtsZXQgYT10MjEoImtleSIpO3JldHVybiB0aGlzLmFkZE1hcHBlZFVuaXF1ZShhLGUpLHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoe29wZXJhdGlvbjoiYWRkIixwYXlsb2FkOmV9KSxhfWFkZEFycmF5KGUpe2ZvcihsZXQgYSBvZiBlKXRoaXMuYWRkKGEpfWNoZWNrRm9yT2JqZWN0KGUpe3JldHVybiEhdGhpcy5nZXRLZXlGb3JPYmplY3QoZSl9Z2V0S2V5Rm9yT2JqZWN0KGUpe2xldCBhPW51bGw7Zm9yKGxldCByIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpaWYoIWEmJnRoaXMuZmFzdE1hcC5nZXRCeUtleShyKT09PWUpYT1yO2Vsc2UgY29udGludWU7cmV0dXJuIGF9YXN5bmMgZmluZChlKXtyZXR1cm4gdGhpcy5mYXN0TWFwLmZpbmQoZSl9ZmluZFN5bmMoZSl7Zm9yKGxldCBhIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpaWYoZSh0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoYSkpKXJldHVybiB0aGlzLmdldE1hcHBlZFVuaXF1ZShhKX1hc3luYyBmaW5kT25lQW5kUmVtb3ZlKGUpe2xldCBhPWF3YWl0IHRoaXMuZmluZChlKTtyZXR1cm4gYSYmdGhpcy5yZW1vdmUoYSksYX1maW5kT25lQW5kUmVtb3ZlU3luYyhlKXtsZXQgYT10aGlzLmZpbmRTeW5jKGUpO3JldHVybiBhJiZ0aGlzLnJlbW92ZShhKSxhfWFzeW5jIGZvckVhY2goZSl7Zm9yKGxldCBhIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpYXdhaXQgZSh0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoYSkpfWdldE9uZUFuZFJlbW92ZSgpe2xldCBlPXRoaXMuZmFzdE1hcC5nZXRLZXlzKCk7aWYoZS5sZW5ndGg9PT0wKXJldHVybiBudWxsO3tsZXQgYT1lWzBdLHI9dGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoYSk7cmV0dXJuIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoe29wZXJhdGlvbjoicmVtb3ZlIixwYXlsb2FkOnJ9KSxyfX1nZXRBcnJheSgpe2xldCBlPVtdO2ZvcihsZXQgYSBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKWUucHVzaCh0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoYSkpO3JldHVybiBlfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5mYXN0TWFwLmdldEtleXMoKS5sZW5ndGg9PT0wfXJlbW92ZShlKXtpZih0aGlzLmNoZWNrRm9yT2JqZWN0KGUpKXtsZXQgYT10aGlzLmdldEtleUZvck9iamVjdChlKSxyPXRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGEpO3JldHVybiB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHtvcGVyYXRpb246InJlbW92ZSIscGF5bG9hZDpyfSkscn1yZXR1cm4gbnVsbH13aXBlKCl7Zm9yKGxldCBlIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoZSl9Y29uY2F0KGUpe2xldCBhPW5ldyB0O3JldHVybiBhLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKHRoaXMuZmFzdE1hcCksYS5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihlLmZhc3RNYXApLGF9YWRkQWxsRnJvbU90aGVyKGUpe3RoaXMuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIoZS5mYXN0TWFwKX19fSk7dmFyIEVxLGcydD1uKCgpPT57JHEoKTtFcT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0cmluZ0FycmF5PVtdLHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5PVtdfWFkZFN0cmluZyhlKXt0aGlzLl9zdHJpbmdBcnJheS5wdXNoKGUpLHRoaXMubm90aWZ5VHJpZ2dlcigpfWFkZFN0cmluZ0FycmF5KGUpe2ZvcihsZXQgYSBvZiBlKXRoaXMuYWRkU3RyaW5nKGEpfXJlbW92ZVN0cmluZyhlKXtmb3IobGV0IGEgaW4gdGhpcy5fc3RyaW5nQXJyYXkpdGhpcy5fc3RyaW5nQXJyYXlbYV09PT1lJiZ0aGlzLl9zdHJpbmdBcnJheS5zcGxpY2UocGFyc2VJbnQoYSksMSk7dGhpcy5ub3RpZnlUcmlnZ2VyKCl9d2lwZSgpe3RoaXMuX3N0cmluZ0FycmF5PVtdLHRoaXMubm90aWZ5VHJpZ2dlcigpfWNoZWNrU3RyaW5nKGUpe3JldHVybiB0aGlzLl9zdHJpbmdBcnJheS5pbmRleE9mKGUpIT09LTF9Y2hlY2tNaW5pbWF0Y2goZSl7bGV0IGE9bmV3IG9pLlNtYXJ0TWF0Y2goZSkscj0hMTtmb3IobGV0IGkgb2YgdGhpcy5fc3RyaW5nQXJyYXkpYS5tYXRjaChpKSYmKHI9ITApO3JldHVybiByfWNoZWNrSXNFbXB0eSgpe3JldHVybiB0aGlzLl9zdHJpbmdBcnJheS5sZW5ndGg9PT0wfWdldFN0cmluZ0FycmF5KCl7bGV0IGU9W107Zm9yKGxldCBhIG9mIHRoaXMuX3N0cmluZ0FycmF5KWUucHVzaChhKTtyZXR1cm4gZX1yZWdpc3RlclVudGlsVHJ1ZShlLGEpe2xldCByPVZlLmRlZmVyKCk7cmV0dXJuIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LnB1c2goKCk9PntsZXQgaT1lKHRoaXMuZ2V0U3RyaW5nQXJyYXkoKSk7cmV0dXJuIGk9PT0hMCYmKGEmJmEoKSxyLnJlc29sdmUoKSksaX0pLHRoaXMubm90aWZ5VHJpZ2dlcigpLHIucHJvbWlzZX1ub3RpZnlUcmlnZ2VyKCl7bGV0IGU9dGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkuZmlsdGVyKGE9PiFhKCkpO3RoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5PWV9fX0pO2Z1bmN0aW9uIHgydCh0LGUsYSl7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxhKSl9ZnVuY3Rpb24gcjIxKHQsZSxhKXtyZXR1cm4oMS1hKSp0K2EqZX1mdW5jdGlvbiBpMjEodCxlLGEscil7cmV0dXJuIHIyMSh0LGUsMS1NYXRoLmV4cCgtYSpyKSl9ZnVuY3Rpb24gbzIxKHQsZSl7cmV0dXJuKHQlZStlKSVlfWZ1bmN0aW9uIG4yMSh0LGUpe2xldCBhO3JldHVybiBmdW5jdGlvbiguLi5yKXtsZXQgaT10aGlzO2NsZWFyVGltZW91dChhKSxhPXNldFRpbWVvdXQoKCk9PnthPXZvaWQgMCx0LmFwcGx5KGkscil9LGUpfX12YXIgYTIxLHMyMSxsMjEsYjJ0LHYydCxRbyxjMjEseTJ0LE5kLHcydD1uKCgpPT57YTIxPSIxLjMuMTciO3MyMT1jbGFzc3tpc1J1bm5pbmc9ITE7dmFsdWU9MDtmcm9tPTA7dG89MDtjdXJyZW50VGltZT0wO2xlcnA7ZHVyYXRpb247ZWFzaW5nO29uVXBkYXRlO2FkdmFuY2UodCl7aWYoIXRoaXMuaXNSdW5uaW5nKXJldHVybjtsZXQgZT0hMTtpZih0aGlzLmR1cmF0aW9uJiZ0aGlzLmVhc2luZyl7dGhpcy5jdXJyZW50VGltZSs9dDtsZXQgYT14MnQoMCx0aGlzLmN1cnJlbnRUaW1lL3RoaXMuZHVyYXRpb24sMSk7ZT1hPj0xO2xldCByPWU/MTp0aGlzLmVhc2luZyhhKTt0aGlzLnZhbHVlPXRoaXMuZnJvbSsodGhpcy50by10aGlzLmZyb20pKnJ9ZWxzZSB0aGlzLmxlcnA/KHRoaXMudmFsdWU9aTIxKHRoaXMudmFsdWUsdGhpcy50byx0aGlzLmxlcnAqNjAsdCksTWF0aC5yb3VuZCh0aGlzLnZhbHVlKT09PXRoaXMudG8mJih0aGlzLnZhbHVlPXRoaXMudG8sZT0hMCkpOih0aGlzLnZhbHVlPXRoaXMudG8sZT0hMCk7ZSYmdGhpcy5zdG9wKCksdGhpcy5vblVwZGF0ZT8uKHRoaXMudmFsdWUsZSl9c3RvcCgpe3RoaXMuaXNSdW5uaW5nPSExfWZyb21Ubyh0LGUse2xlcnA6YSxkdXJhdGlvbjpyLGVhc2luZzppLG9uU3RhcnQ6byxvblVwZGF0ZTpzfSl7dGhpcy5mcm9tPXRoaXMudmFsdWU9dCx0aGlzLnRvPWUsdGhpcy5sZXJwPWEsdGhpcy5kdXJhdGlvbj1yLHRoaXMuZWFzaW5nPWksdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuaXNSdW5uaW5nPSEwLG8/LigpLHRoaXMub25VcGRhdGU9c319O2wyMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUse2F1dG9SZXNpemU6YT0hMCxkZWJvdW5jZTpyPTI1MH09e30pe3RoaXMud3JhcHBlcj10LHRoaXMuY29udGVudD1lLGEmJih0aGlzLmRlYm91bmNlZFJlc2l6ZT1uMjEodGhpcy5yZXNpemUsciksdGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93P3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuZGVib3VuY2VkUmVzaXplLCExKToodGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuZGVib3VuY2VkUmVzaXplKSx0aGlzLndyYXBwZXJSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3JhcHBlcikpLHRoaXMuY29udGVudFJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcih0aGlzLmRlYm91bmNlZFJlc2l6ZSksdGhpcy5jb250ZW50UmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRlbnQpKSx0aGlzLnJlc2l6ZSgpfXdpZHRoPTA7aGVpZ2h0PTA7c2Nyb2xsSGVpZ2h0PTA7c2Nyb2xsV2lkdGg9MDtkZWJvdW5jZWRSZXNpemU7d3JhcHBlclJlc2l6ZU9ic2VydmVyO2NvbnRlbnRSZXNpemVPYnNlcnZlcjtkZXN0cm95KCl7dGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKSx0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpLHRoaXMud3JhcHBlcj09PXdpbmRvdyYmdGhpcy5kZWJvdW5jZWRSZXNpemUmJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuZGVib3VuY2VkUmVzaXplLCExKX1yZXNpemU9KCk9Pnt0aGlzLm9uV3JhcHBlclJlc2l6ZSgpLHRoaXMub25Db250ZW50UmVzaXplKCl9O29uV3JhcHBlclJlc2l6ZT0oKT0+e3RoaXMud3JhcHBlciBpbnN0YW5jZW9mIFdpbmRvdz8odGhpcy53aWR0aD13aW5kb3cuaW5uZXJXaWR0aCx0aGlzLmhlaWdodD13aW5kb3cuaW5uZXJIZWlnaHQpOih0aGlzLndpZHRoPXRoaXMud3JhcHBlci5jbGllbnRXaWR0aCx0aGlzLmhlaWdodD10aGlzLndyYXBwZXIuY2xpZW50SGVpZ2h0KX07b25Db250ZW50UmVzaXplPSgpPT57dGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93Pyh0aGlzLnNjcm9sbEhlaWdodD10aGlzLmNvbnRlbnQuc2Nyb2xsSGVpZ2h0LHRoaXMuc2Nyb2xsV2lkdGg9dGhpcy5jb250ZW50LnNjcm9sbFdpZHRoKToodGhpcy5zY3JvbGxIZWlnaHQ9dGhpcy53cmFwcGVyLnNjcm9sbEhlaWdodCx0aGlzLnNjcm9sbFdpZHRoPXRoaXMud3JhcHBlci5zY3JvbGxXaWR0aCl9O2dldCBsaW1pdCgpe3JldHVybnt4OnRoaXMuc2Nyb2xsV2lkdGgtdGhpcy53aWR0aCx5OnRoaXMuc2Nyb2xsSGVpZ2h0LXRoaXMuaGVpZ2h0fX19LGIydD1jbGFzc3tldmVudHM9e307ZW1pdCh0LC4uLmUpe2xldCBhPXRoaXMuZXZlbnRzW3RdfHxbXTtmb3IobGV0IHI9MCxpPWEubGVuZ3RoO3I8aTtyKyspYVtyXT8uKC4uLmUpfW9uKHQsZSl7cmV0dXJuIHRoaXMuZXZlbnRzW3RdPy5wdXNoKGUpfHwodGhpcy5ldmVudHNbdF09W2VdKSwoKT0+e3RoaXMuZXZlbnRzW3RdPXRoaXMuZXZlbnRzW3RdPy5maWx0ZXIoYT0+ZSE9PWEpfX1vZmYodCxlKXt0aGlzLmV2ZW50c1t0XT10aGlzLmV2ZW50c1t0XT8uZmlsdGVyKGE9PmUhPT1hKX1kZXN0cm95KCl7dGhpcy5ldmVudHM9e319fSx2MnQ9MTAwLzYsUW89e3Bhc3NpdmU6ITF9LGMyMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9e3doZWVsTXVsdGlwbGllcjoxLHRvdWNoTXVsdGlwbGllcjoxfSl7dGhpcy5lbGVtZW50PXQsdGhpcy5vcHRpb25zPWUsd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5vbldpbmRvd1Jlc2l6ZSwhMSksdGhpcy5vbldpbmRvd1Jlc2l6ZSgpLHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5vbldoZWVsLFFvKSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5vblRvdWNoU3RhcnQsUW8pLHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMub25Ub3VjaE1vdmUsUW8pLHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5vblRvdWNoRW5kLFFvKX10b3VjaFN0YXJ0PXt4OjAseTowfTtsYXN0RGVsdGE9e3g6MCx5OjB9O3dpbmRvdz17d2lkdGg6MCxoZWlnaHQ6MH07ZW1pdHRlcj1uZXcgYjJ0O29uKHQsZSl7cmV0dXJuIHRoaXMuZW1pdHRlci5vbih0LGUpfWRlc3Ryb3koKXt0aGlzLmVtaXR0ZXIuZGVzdHJveSgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMub25XaW5kb3dSZXNpemUsITEpLHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5vbldoZWVsLFFvKSx0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5vblRvdWNoU3RhcnQsUW8pLHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMub25Ub3VjaE1vdmUsUW8pLHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5vblRvdWNoRW5kLFFvKX1vblRvdWNoU3RhcnQ9dD0+e2xldHtjbGllbnRYOmUsY2xpZW50WTphfT10LnRhcmdldFRvdWNoZXM/dC50YXJnZXRUb3VjaGVzWzBdOnQ7dGhpcy50b3VjaFN0YXJ0Lng9ZSx0aGlzLnRvdWNoU3RhcnQueT1hLHRoaXMubGFzdERlbHRhPXt4OjAseTowfSx0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIix7ZGVsdGFYOjAsZGVsdGFZOjAsZXZlbnQ6dH0pfTtvblRvdWNoTW92ZT10PT57bGV0e2NsaWVudFg6ZSxjbGllbnRZOmF9PXQudGFyZ2V0VG91Y2hlcz90LnRhcmdldFRvdWNoZXNbMF06dCxyPS0oZS10aGlzLnRvdWNoU3RhcnQueCkqdGhpcy5vcHRpb25zLnRvdWNoTXVsdGlwbGllcixpPS0oYS10aGlzLnRvdWNoU3RhcnQueSkqdGhpcy5vcHRpb25zLnRvdWNoTXVsdGlwbGllcjt0aGlzLnRvdWNoU3RhcnQueD1lLHRoaXMudG91Y2hTdGFydC55PWEsdGhpcy5sYXN0RGVsdGE9e3g6cix5Oml9LHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLHtkZWx0YVg6cixkZWx0YVk6aSxldmVudDp0fSl9O29uVG91Y2hFbmQ9dD0+e3RoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLHtkZWx0YVg6dGhpcy5sYXN0RGVsdGEueCxkZWx0YVk6dGhpcy5sYXN0RGVsdGEueSxldmVudDp0fSl9O29uV2hlZWw9dD0+e2xldHtkZWx0YVg6ZSxkZWx0YVk6YSxkZWx0YU1vZGU6cn09dCxpPXI9PT0xP3YydDpyPT09Mj90aGlzLndpbmRvdy53aWR0aDoxLG89cj09PTE/djJ0OnI9PT0yP3RoaXMud2luZG93LmhlaWdodDoxO2UqPWksYSo9byxlKj10aGlzLm9wdGlvbnMud2hlZWxNdWx0aXBsaWVyLGEqPXRoaXMub3B0aW9ucy53aGVlbE11bHRpcGxpZXIsdGhpcy5lbWl0dGVyLmVtaXQoInNjcm9sbCIse2RlbHRhWDplLGRlbHRhWTphLGV2ZW50OnR9KX07b25XaW5kb3dSZXNpemU9KCk9Pnt0aGlzLndpbmRvdz17d2lkdGg6d2luZG93LmlubmVyV2lkdGgsaGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodH19fSx5MnQ9dD0+TWF0aC5taW4oMSwxLjAwMS1NYXRoLnBvdygyLC0xMCp0KSksTmQ9Y2xhc3N7X2lzU2Nyb2xsaW5nPSExO19pc1N0b3BwZWQ9ITE7X2lzTG9ja2VkPSExO19wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50PSExO19yZXNldFZlbG9jaXR5VGltZW91dD1udWxsO19yYWZJZD1udWxsO2lzVG91Y2hpbmc7dGltZT0wO3VzZXJEYXRhPXt9O2xhc3RWZWxvY2l0eT0wO3ZlbG9jaXR5PTA7ZGlyZWN0aW9uPTA7b3B0aW9uczt0YXJnZXRTY3JvbGw7YW5pbWF0ZWRTY3JvbGw7YW5pbWF0ZT1uZXcgczIxO2VtaXR0ZXI9bmV3IGIydDtkaW1lbnNpb25zO3ZpcnR1YWxTY3JvbGw7Y29uc3RydWN0b3Ioe3dyYXBwZXI6dD13aW5kb3csY29udGVudDplPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxldmVudHNUYXJnZXQ6YT10LHNtb290aFdoZWVsOnI9ITAsc3luY1RvdWNoOmk9ITEsc3luY1RvdWNoTGVycDpvPS4wNzUsdG91Y2hJbmVydGlhRXhwb25lbnQ6cz0xLjcsZHVyYXRpb246bCxlYXNpbmc6ZixsZXJwOmM9LjEsaW5maW5pdGU6dT0hMSxvcmllbnRhdGlvbjpkPSJ2ZXJ0aWNhbCIsZ2VzdHVyZU9yaWVudGF0aW9uOmg9ZD09PSJob3Jpem9udGFsIj8iYm90aCI6InZlcnRpY2FsIix0b3VjaE11bHRpcGxpZXI6Zz0xLHdoZWVsTXVsdGlwbGllcjpiPTEsYXV0b1Jlc2l6ZTp4PSEwLHByZXZlbnQ6bSx2aXJ0dWFsU2Nyb2xsOnYsb3ZlcnNjcm9sbDp5PSEwLGF1dG9SYWY6dz0hMSxhbmNob3JzOkU9ITEsYXV0b1RvZ2dsZTpDPSExLGFsbG93TmVzdGVkU2Nyb2xsOno9ITEsX19leHBlcmltZW50YWxfX25haXZlRGltZW5zaW9uczpQPSExLG5haXZlRGltZW5zaW9uczpfPVAsc3RvcEluZXJ0aWFPbk5hdmlnYXRlOiQ9ITF9PXt9KXt3aW5kb3cubGVuaXNWZXJzaW9uPWEyMSwoIXR8fHQ9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpJiYodD13aW5kb3cpLHR5cGVvZiBsPT0ibnVtYmVyIiYmdHlwZW9mIGYhPSJmdW5jdGlvbiI/Zj15MnQ6dHlwZW9mIGY9PSJmdW5jdGlvbiImJnR5cGVvZiBsIT0ibnVtYmVyIiYmKGw9MSksdGhpcy5vcHRpb25zPXt3cmFwcGVyOnQsY29udGVudDplLGV2ZW50c1RhcmdldDphLHNtb290aFdoZWVsOnIsc3luY1RvdWNoOmksc3luY1RvdWNoTGVycDpvLHRvdWNoSW5lcnRpYUV4cG9uZW50OnMsZHVyYXRpb246bCxlYXNpbmc6ZixsZXJwOmMsaW5maW5pdGU6dSxnZXN0dXJlT3JpZW50YXRpb246aCxvcmllbnRhdGlvbjpkLHRvdWNoTXVsdGlwbGllcjpnLHdoZWVsTXVsdGlwbGllcjpiLGF1dG9SZXNpemU6eCxwcmV2ZW50Om0sdmlydHVhbFNjcm9sbDp2LG92ZXJzY3JvbGw6eSxhdXRvUmFmOncsYW5jaG9yczpFLGF1dG9Ub2dnbGU6QyxhbGxvd05lc3RlZFNjcm9sbDp6LG5haXZlRGltZW5zaW9uczpfLHN0b3BJbmVydGlhT25OYXZpZ2F0ZTokfSx0aGlzLmRpbWVuc2lvbnM9bmV3IGwyMSh0LGUse2F1dG9SZXNpemU6eH0pLHRoaXMudXBkYXRlQ2xhc3NOYW1lKCksdGhpcy50YXJnZXRTY3JvbGw9dGhpcy5hbmltYXRlZFNjcm9sbD10aGlzLmFjdHVhbFNjcm9sbCx0aGlzLm9wdGlvbnMud3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMub25OYXRpdmVTY3JvbGwsITEpLHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbGVuZCIsdGhpcy5vblNjcm9sbEVuZCx7Y2FwdHVyZTohMH0pLCh0aGlzLm9wdGlvbnMuYW5jaG9yc3x8dGhpcy5vcHRpb25zLnN0b3BJbmVydGlhT25OYXZpZ2F0ZSkmJnRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLm9uQ2xpY2ssITEpLHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix0aGlzLm9uUG9pbnRlckRvd24sITEpLHRoaXMudmlydHVhbFNjcm9sbD1uZXcgYzIxKGEse3RvdWNoTXVsdGlwbGllcjpnLHdoZWVsTXVsdGlwbGllcjpifSksdGhpcy52aXJ0dWFsU2Nyb2xsLm9uKCJzY3JvbGwiLHRoaXMub25WaXJ0dWFsU2Nyb2xsKSx0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSYmKHRoaXMuY2hlY2tPdmVyZmxvdygpLHRoaXMucm9vdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5vblRyYW5zaXRpb25FbmQse3Bhc3NpdmU6ITB9KSksdGhpcy5vcHRpb25zLmF1dG9SYWYmJih0aGlzLl9yYWZJZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yYWYpKX1kZXN0cm95KCl7dGhpcy5lbWl0dGVyLmRlc3Ryb3koKSx0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMub25OYXRpdmVTY3JvbGwsITEpLHRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbGVuZCIsdGhpcy5vblNjcm9sbEVuZCx7Y2FwdHVyZTohMH0pLHRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix0aGlzLm9uUG9pbnRlckRvd24sITEpLCh0aGlzLm9wdGlvbnMuYW5jaG9yc3x8dGhpcy5vcHRpb25zLnN0b3BJbmVydGlhT25OYXZpZ2F0ZSkmJnRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLm9uQ2xpY2ssITEpLHRoaXMudmlydHVhbFNjcm9sbC5kZXN0cm95KCksdGhpcy5kaW1lbnNpb25zLmRlc3Ryb3koKSx0aGlzLmNsZWFuVXBDbGFzc05hbWUoKSx0aGlzLl9yYWZJZCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmSWQpfW9uKHQsZSl7cmV0dXJuIHRoaXMuZW1pdHRlci5vbih0LGUpfW9mZih0LGUpe3JldHVybiB0aGlzLmVtaXR0ZXIub2ZmKHQsZSl9b25TY3JvbGxFbmQ9dD0+e3QgaW5zdGFuY2VvZiBDdXN0b21FdmVudHx8KHRoaXMuaXNTY3JvbGxpbmc9PT0ic21vb3RoInx8dGhpcy5pc1Njcm9sbGluZz09PSExKSYmdC5zdG9wUHJvcGFnYXRpb24oKX07ZGlzcGF0Y2hTY3JvbGxlbmRFdmVudD0oKT0+e3RoaXMub3B0aW9ucy53cmFwcGVyLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzY3JvbGxlbmQiLHtidWJibGVzOnRoaXMub3B0aW9ucy53cmFwcGVyPT09d2luZG93LGRldGFpbDp7bGVuaXNTY3JvbGxFbmQ6ITB9fSkpfTtnZXQgb3ZlcmZsb3coKXtsZXQgdD10aGlzLmlzSG9yaXpvbnRhbD8ib3ZlcmZsb3cteCI6Im92ZXJmbG93LXkiO3JldHVybiBnZXRDb21wdXRlZFN0eWxlKHRoaXMucm9vdEVsZW1lbnQpW3RdfWNoZWNrT3ZlcmZsb3coKXtbImhpZGRlbiIsImNsaXAiXS5pbmNsdWRlcyh0aGlzLm92ZXJmbG93KT90aGlzLmludGVybmFsU3RvcCgpOnRoaXMuaW50ZXJuYWxTdGFydCgpfW9uVHJhbnNpdGlvbkVuZD10PT57dC5wcm9wZXJ0eU5hbWUuaW5jbHVkZXMoIm92ZXJmbG93IikmJnRoaXMuY2hlY2tPdmVyZmxvdygpfTtzZXRTY3JvbGwodCl7dGhpcy5pc0hvcml6b250YWw/dGhpcy5vcHRpb25zLndyYXBwZXIuc2Nyb2xsVG8oe2xlZnQ6dCxiZWhhdmlvcjoiaW5zdGFudCJ9KTp0aGlzLm9wdGlvbnMud3JhcHBlci5zY3JvbGxUbyh7dG9wOnQsYmVoYXZpb3I6Imluc3RhbnQifSl9b25DbGljaz10PT57bGV0IGE9dC5jb21wb3NlZFBhdGgoKS5maWx0ZXIocj0+ciBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50JiZyLmdldEF0dHJpYnV0ZSgiaHJlZiIpKTtpZih0aGlzLm9wdGlvbnMuYW5jaG9ycyl7bGV0IHI9YS5maW5kKGk9PmkuZ2V0QXR0cmlidXRlKCJocmVmIik/LmluY2x1ZGVzKCIjIikpO2lmKHIpe2xldCBpPXIuZ2V0QXR0cmlidXRlKCJocmVmIik7aWYoaSl7bGV0IG89dHlwZW9mIHRoaXMub3B0aW9ucy5hbmNob3JzPT0ib2JqZWN0IiYmdGhpcy5vcHRpb25zLmFuY2hvcnM/dGhpcy5vcHRpb25zLmFuY2hvcnM6dm9pZCAwLHM9YCMke2kuc3BsaXQoIiMiKVsxXX1gO3RoaXMuc2Nyb2xsVG8ocyxvKX19fXRoaXMub3B0aW9ucy5zdG9wSW5lcnRpYU9uTmF2aWdhdGUmJmEuZmluZChpPT5pLmhvc3Q9PT13aW5kb3cubG9jYXRpb24uaG9zdCkmJnRoaXMucmVzZXQoKX07b25Qb2ludGVyRG93bj10PT57dC5idXR0b249PT0xJiZ0aGlzLnJlc2V0KCl9O29uVmlydHVhbFNjcm9sbD10PT57aWYodHlwZW9mIHRoaXMub3B0aW9ucy52aXJ0dWFsU2Nyb2xsPT0iZnVuY3Rpb24iJiZ0aGlzLm9wdGlvbnMudmlydHVhbFNjcm9sbCh0KT09PSExKXJldHVybjtsZXR7ZGVsdGFYOmUsZGVsdGFZOmEsZXZlbnQ6cn09dDtpZih0aGlzLmVtaXR0ZXIuZW1pdCgidmlydHVhbC1zY3JvbGwiLHtkZWx0YVg6ZSxkZWx0YVk6YSxldmVudDpyfSksci5jdHJsS2V5fHxyLmxlbmlzU3RvcFByb3BhZ2F0aW9uKXJldHVybjtsZXQgaT1yLnR5cGUuaW5jbHVkZXMoInRvdWNoIiksbz1yLnR5cGUuaW5jbHVkZXMoIndoZWVsIik7dGhpcy5pc1RvdWNoaW5nPXIudHlwZT09PSJ0b3VjaHN0YXJ0Inx8ci50eXBlPT09InRvdWNobW92ZSI7bGV0IHM9ZT09PTAmJmE9PT0wO2lmKHRoaXMub3B0aW9ucy5zeW5jVG91Y2gmJmkmJnIudHlwZT09PSJ0b3VjaHN0YXJ0IiYmcyYmIXRoaXMuaXNTdG9wcGVkJiYhdGhpcy5pc0xvY2tlZCl7dGhpcy5yZXNldCgpO3JldHVybn1sZXQgZj10aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uPT09InZlcnRpY2FsIiYmYT09PTB8fHRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCImJmU9PT0wO2lmKHN8fGYpcmV0dXJuO2xldCBjPXIuY29tcG9zZWRQYXRoKCk7Yz1jLnNsaWNlKDAsYy5pbmRleE9mKHRoaXMucm9vdEVsZW1lbnQpKTtsZXQgdT10aGlzLm9wdGlvbnMucHJldmVudDtpZihjLmZpbmQobT0+bSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiYodHlwZW9mIHU9PSJmdW5jdGlvbiImJnU/LihtKXx8bS5oYXNBdHRyaWJ1dGU/LigiZGF0YS1sZW5pcy1wcmV2ZW50Iil8fGkmJm0uaGFzQXR0cmlidXRlPy4oImRhdGEtbGVuaXMtcHJldmVudC10b3VjaCIpfHxvJiZtLmhhc0F0dHJpYnV0ZT8uKCJkYXRhLWxlbmlzLXByZXZlbnQtd2hlZWwiKXx8dGhpcy5vcHRpb25zLmFsbG93TmVzdGVkU2Nyb2xsJiZ0aGlzLmNoZWNrTmVzdGVkU2Nyb2xsKG0se2RlbHRhWDplLGRlbHRhWTphfSkpKSlyZXR1cm47aWYodGhpcy5pc1N0b3BwZWR8fHRoaXMuaXNMb2NrZWQpe3IuY2FuY2VsYWJsZSYmci5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZighKHRoaXMub3B0aW9ucy5zeW5jVG91Y2gmJml8fHRoaXMub3B0aW9ucy5zbW9vdGhXaGVlbCYmbykpe3RoaXMuaXNTY3JvbGxpbmc9Im5hdGl2ZSIsdGhpcy5hbmltYXRlLnN0b3AoKSxyLmxlbmlzU3RvcFByb3BhZ2F0aW9uPSEwO3JldHVybn1sZXQgaD1hO3RoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb249PT0iYm90aCI/aD1NYXRoLmFicyhhKT5NYXRoLmFicyhlKT9hOmU6dGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbj09PSJob3Jpem9udGFsIiYmKGg9ZSksKCF0aGlzLm9wdGlvbnMub3ZlcnNjcm9sbHx8dGhpcy5vcHRpb25zLmluZmluaXRlfHx0aGlzLm9wdGlvbnMud3JhcHBlciE9PXdpbmRvdyYmdGhpcy5saW1pdD4wJiYodGhpcy5hbmltYXRlZFNjcm9sbD4wJiZ0aGlzLmFuaW1hdGVkU2Nyb2xsPHRoaXMubGltaXR8fHRoaXMuYW5pbWF0ZWRTY3JvbGw9PT0wJiZhPjB8fHRoaXMuYW5pbWF0ZWRTY3JvbGw9PT10aGlzLmxpbWl0JiZhPDApKSYmKHIubGVuaXNTdG9wUHJvcGFnYXRpb249ITApLHIuY2FuY2VsYWJsZSYmci5wcmV2ZW50RGVmYXVsdCgpO2xldCBnPWkmJnRoaXMub3B0aW9ucy5zeW5jVG91Y2gseD1pJiZyLnR5cGU9PT0idG91Y2hlbmQiO3gmJihoPU1hdGguc2lnbih0aGlzLnZlbG9jaXR5KSpNYXRoLnBvdyhNYXRoLmFicyh0aGlzLnZlbG9jaXR5KSx0aGlzLm9wdGlvbnMudG91Y2hJbmVydGlhRXhwb25lbnQpKSx0aGlzLnNjcm9sbFRvKHRoaXMudGFyZ2V0U2Nyb2xsK2gse3Byb2dyYW1tYXRpYzohMSwuLi5nP3tsZXJwOng/dGhpcy5vcHRpb25zLnN5bmNUb3VjaExlcnA6MX06e2xlcnA6dGhpcy5vcHRpb25zLmxlcnAsZHVyYXRpb246dGhpcy5vcHRpb25zLmR1cmF0aW9uLGVhc2luZzp0aGlzLm9wdGlvbnMuZWFzaW5nfX0pfTtyZXNpemUoKXt0aGlzLmRpbWVuc2lvbnMucmVzaXplKCksdGhpcy5hbmltYXRlZFNjcm9sbD10aGlzLnRhcmdldFNjcm9sbD10aGlzLmFjdHVhbFNjcm9sbCx0aGlzLmVtaXQoKX1lbWl0KCl7dGhpcy5lbWl0dGVyLmVtaXQoInNjcm9sbCIsdGhpcyl9b25OYXRpdmVTY3JvbGw9KCk9PntpZih0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dCE9PW51bGwmJihjbGVhclRpbWVvdXQodGhpcy5fcmVzZXRWZWxvY2l0eVRpbWVvdXQpLHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0PW51bGwpLHRoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQpe3RoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQ9ITE7cmV0dXJufWlmKHRoaXMuaXNTY3JvbGxpbmc9PT0hMXx8dGhpcy5pc1Njcm9sbGluZz09PSJuYXRpdmUiKXtsZXQgdD10aGlzLmFuaW1hdGVkU2Nyb2xsO3RoaXMuYW5pbWF0ZWRTY3JvbGw9dGhpcy50YXJnZXRTY3JvbGw9dGhpcy5hY3R1YWxTY3JvbGwsdGhpcy5sYXN0VmVsb2NpdHk9dGhpcy52ZWxvY2l0eSx0aGlzLnZlbG9jaXR5PXRoaXMuYW5pbWF0ZWRTY3JvbGwtdCx0aGlzLmRpcmVjdGlvbj1NYXRoLnNpZ24odGhpcy5hbmltYXRlZFNjcm9sbC10KSx0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTY3JvbGxpbmc9Im5hdGl2ZSIpLHRoaXMuZW1pdCgpLHRoaXMudmVsb2NpdHkhPT0wJiYodGhpcy5fcmVzZXRWZWxvY2l0eVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMubGFzdFZlbG9jaXR5PXRoaXMudmVsb2NpdHksdGhpcy52ZWxvY2l0eT0wLHRoaXMuaXNTY3JvbGxpbmc9ITEsdGhpcy5lbWl0KCl9LDQwMCkpfX07cmVzZXQoKXt0aGlzLmlzTG9ja2VkPSExLHRoaXMuaXNTY3JvbGxpbmc9ITEsdGhpcy5hbmltYXRlZFNjcm9sbD10aGlzLnRhcmdldFNjcm9sbD10aGlzLmFjdHVhbFNjcm9sbCx0aGlzLmxhc3RWZWxvY2l0eT10aGlzLnZlbG9jaXR5PTAsdGhpcy5hbmltYXRlLnN0b3AoKX1zdGFydCgpe2lmKHRoaXMuaXNTdG9wcGVkKXtpZih0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSl7dGhpcy5yb290RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgib3ZlcmZsb3ciKTtyZXR1cm59dGhpcy5pbnRlcm5hbFN0YXJ0KCl9fWludGVybmFsU3RhcnQoKXt0aGlzLmlzU3RvcHBlZCYmKHRoaXMucmVzZXQoKSx0aGlzLmlzU3RvcHBlZD0hMSx0aGlzLmVtaXQoKSl9c3RvcCgpe2lmKCF0aGlzLmlzU3RvcHBlZCl7aWYodGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUpe3RoaXMucm9vdEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoIm92ZXJmbG93IiwiY2xpcCIpO3JldHVybn10aGlzLmludGVybmFsU3RvcCgpfX1pbnRlcm5hbFN0b3AoKXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMucmVzZXQoKSx0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLmVtaXQoKSl9cmFmPXQ9PntsZXQgZT10LSh0aGlzLnRpbWV8fHQpO3RoaXMudGltZT10LHRoaXMuYW5pbWF0ZS5hZHZhbmNlKGUqLjAwMSksdGhpcy5vcHRpb25zLmF1dG9SYWYmJih0aGlzLl9yYWZJZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yYWYpKX07c2Nyb2xsVG8odCx7b2Zmc2V0OmU9MCxpbW1lZGlhdGU6YT0hMSxsb2NrOnI9ITEscHJvZ3JhbW1hdGljOmk9ITAsbGVycDpvPWk/dGhpcy5vcHRpb25zLmxlcnA6dm9pZCAwLGR1cmF0aW9uOnM9aT90aGlzLm9wdGlvbnMuZHVyYXRpb246dm9pZCAwLGVhc2luZzpsPWk/dGhpcy5vcHRpb25zLmVhc2luZzp2b2lkIDAsb25TdGFydDpmLG9uQ29tcGxldGU6Yyxmb3JjZTp1PSExLHVzZXJEYXRhOmR9PXt9KXtpZighKCh0aGlzLmlzU3RvcHBlZHx8dGhpcy5pc0xvY2tlZCkmJiF1KSl7aWYodHlwZW9mIHQ9PSJzdHJpbmciJiZbInRvcCIsImxlZnQiLCJzdGFydCIsIiMiXS5pbmNsdWRlcyh0KSl0PTA7ZWxzZSBpZih0eXBlb2YgdD09InN0cmluZyImJlsiYm90dG9tIiwicmlnaHQiLCJlbmQiXS5pbmNsdWRlcyh0KSl0PXRoaXMubGltaXQ7ZWxzZXtsZXQgaDtpZih0eXBlb2YgdD09InN0cmluZyI/KGg9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KSxofHwodD09PSIjdG9wIj90PTA6Y29uc29sZS53YXJuKCJMZW5pczogVGFyZ2V0IG5vdCBmb3VuZCIsdCkpKTp0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJnQ/Lm5vZGVUeXBlJiYoaD10KSxoKXtpZih0aGlzLm9wdGlvbnMud3JhcHBlciE9PXdpbmRvdyl7bGV0IGI9dGhpcy5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLT10aGlzLmlzSG9yaXpvbnRhbD9iLmxlZnQ6Yi50b3B9bGV0IGc9aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0PSh0aGlzLmlzSG9yaXpvbnRhbD9nLmxlZnQ6Zy50b3ApK3RoaXMuYW5pbWF0ZWRTY3JvbGx9fWlmKHR5cGVvZiB0PT0ibnVtYmVyIil7aWYodCs9ZSx0PU1hdGgucm91bmQodCksdGhpcy5vcHRpb25zLmluZmluaXRlKXtpZihpKXt0aGlzLnRhcmdldFNjcm9sbD10aGlzLmFuaW1hdGVkU2Nyb2xsPXRoaXMuc2Nyb2xsO2xldCBoPXQtdGhpcy5hbmltYXRlZFNjcm9sbDtoPnRoaXMubGltaXQvMj90PXQtdGhpcy5saW1pdDpoPC10aGlzLmxpbWl0LzImJih0PXQrdGhpcy5saW1pdCl9fWVsc2UgdD14MnQoMCx0LHRoaXMubGltaXQpO2lmKHQ9PT10aGlzLnRhcmdldFNjcm9sbCl7Zj8uKHRoaXMpLGM/Lih0aGlzKTtyZXR1cm59aWYodGhpcy51c2VyRGF0YT1kPz97fSxhKXt0aGlzLmFuaW1hdGVkU2Nyb2xsPXRoaXMudGFyZ2V0U2Nyb2xsPXQsdGhpcy5zZXRTY3JvbGwodGhpcy5zY3JvbGwpLHRoaXMucmVzZXQoKSx0aGlzLnByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQoKSx0aGlzLmVtaXQoKSxjPy4odGhpcyksdGhpcy51c2VyRGF0YT17fSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRpc3BhdGNoU2Nyb2xsZW5kRXZlbnQoKX0pO3JldHVybn1pfHwodGhpcy50YXJnZXRTY3JvbGw9dCksdHlwZW9mIHM9PSJudW1iZXIiJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIj9sPXkydDp0eXBlb2YgbD09ImZ1bmN0aW9uIiYmdHlwZW9mIHMhPSJudW1iZXIiJiYocz0xKSx0aGlzLmFuaW1hdGUuZnJvbVRvKHRoaXMuYW5pbWF0ZWRTY3JvbGwsdCx7ZHVyYXRpb246cyxlYXNpbmc6bCxsZXJwOm8sb25TdGFydDooKT0+e3ImJih0aGlzLmlzTG9ja2VkPSEwKSx0aGlzLmlzU2Nyb2xsaW5nPSJzbW9vdGgiLGY/Lih0aGlzKX0sb25VcGRhdGU6KGgsZyk9Pnt0aGlzLmlzU2Nyb2xsaW5nPSJzbW9vdGgiLHRoaXMubGFzdFZlbG9jaXR5PXRoaXMudmVsb2NpdHksdGhpcy52ZWxvY2l0eT1oLXRoaXMuYW5pbWF0ZWRTY3JvbGwsdGhpcy5kaXJlY3Rpb249TWF0aC5zaWduKHRoaXMudmVsb2NpdHkpLHRoaXMuYW5pbWF0ZWRTY3JvbGw9aCx0aGlzLnNldFNjcm9sbCh0aGlzLnNjcm9sbCksaSYmKHRoaXMudGFyZ2V0U2Nyb2xsPWgpLGd8fHRoaXMuZW1pdCgpLGcmJih0aGlzLnJlc2V0KCksdGhpcy5lbWl0KCksYz8uKHRoaXMpLHRoaXMudXNlckRhdGE9e30scmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kaXNwYXRjaFNjcm9sbGVuZEV2ZW50KCl9KSx0aGlzLnByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQoKSl9fSl9fX1wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KCl7dGhpcy5fcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50PSExfSl9Y2hlY2tOZXN0ZWRTY3JvbGwodCx7ZGVsdGFYOmUsZGVsdGFZOmF9KXtsZXQgcj1EYXRlLm5vdygpLGk9dC5fbGVuaXM/Pz17fSxvLHMsbCxmLGMsdSxkLGgsZz10aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uO2lmKHItKGkudGltZT8/MCk+MmUzKXtpLnRpbWU9RGF0ZS5ub3coKTtsZXQgQz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtpLmNvbXB1dGVkU3R5bGU9QztsZXQgej1DLm92ZXJmbG93WCxQPUMub3ZlcmZsb3dZO2lmKG89WyJhdXRvIiwib3ZlcmxheSIsInNjcm9sbCJdLmluY2x1ZGVzKHopLHM9WyJhdXRvIiwib3ZlcmxheSIsInNjcm9sbCJdLmluY2x1ZGVzKFApLGkuaGFzT3ZlcmZsb3dYPW8saS5oYXNPdmVyZmxvd1k9cywhbyYmIXN8fGc9PT0idmVydGljYWwiJiYhc3x8Zz09PSJob3Jpem9udGFsIiYmIW8pcmV0dXJuITE7Yz10LnNjcm9sbFdpZHRoLHU9dC5zY3JvbGxIZWlnaHQsZD10LmNsaWVudFdpZHRoLGg9dC5jbGllbnRIZWlnaHQsbD1jPmQsZj11PmgsaS5pc1Njcm9sbGFibGVYPWwsaS5pc1Njcm9sbGFibGVZPWYsaS5zY3JvbGxXaWR0aD1jLGkuc2Nyb2xsSGVpZ2h0PXUsaS5jbGllbnRXaWR0aD1kLGkuY2xpZW50SGVpZ2h0PWh9ZWxzZSBsPWkuaXNTY3JvbGxhYmxlWCxmPWkuaXNTY3JvbGxhYmxlWSxvPWkuaGFzT3ZlcmZsb3dYLHM9aS5oYXNPdmVyZmxvd1ksYz1pLnNjcm9sbFdpZHRoLHU9aS5zY3JvbGxIZWlnaHQsZD1pLmNsaWVudFdpZHRoLGg9aS5jbGllbnRIZWlnaHQ7aWYoIW8mJiFzfHwhbCYmIWZ8fGc9PT0idmVydGljYWwiJiYoIXN8fCFmKXx8Zz09PSJob3Jpem9udGFsIiYmKCFvfHwhbCkpcmV0dXJuITE7bGV0IGI7aWYoZz09PSJob3Jpem9udGFsIiliPSJ4IjtlbHNlIGlmKGc9PT0idmVydGljYWwiKWI9InkiO2Vsc2V7bGV0IEM9ZSE9PTAsej1hIT09MDtDJiZvJiZsJiYoYj0ieCIpLHomJnMmJmYmJihiPSJ5Iil9aWYoIWIpcmV0dXJuITE7bGV0IHgsbSx2LHksdztpZihiPT09IngiKXg9dC5zY3JvbGxMZWZ0LG09Yy1kLHY9ZSx5PW8sdz1sO2Vsc2UgaWYoYj09PSJ5Iil4PXQuc2Nyb2xsVG9wLG09dS1oLHY9YSx5PXMsdz1mO2Vsc2UgcmV0dXJuITE7cmV0dXJuKHY+MD94PG06eD4wKSYmeSYmd31nZXQgcm9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5vcHRpb25zLndyYXBwZXI9PT13aW5kb3c/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OnRoaXMub3B0aW9ucy53cmFwcGVyfWdldCBsaW1pdCgpe3JldHVybiB0aGlzLm9wdGlvbnMubmFpdmVEaW1lbnNpb25zP3RoaXMuaXNIb3Jpem9udGFsP3RoaXMucm9vdEVsZW1lbnQuc2Nyb2xsV2lkdGgtdGhpcy5yb290RWxlbWVudC5jbGllbnRXaWR0aDp0aGlzLnJvb3RFbGVtZW50LnNjcm9sbEhlaWdodC10aGlzLnJvb3RFbGVtZW50LmNsaWVudEhlaWdodDp0aGlzLmRpbWVuc2lvbnMubGltaXRbdGhpcy5pc0hvcml6b250YWw/IngiOiJ5Il19Z2V0IGlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLm9wdGlvbnMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCJ9Z2V0IGFjdHVhbFNjcm9sbCgpe2xldCB0PXRoaXMub3B0aW9ucy53cmFwcGVyO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbD90LnNjcm9sbFg/P3Quc2Nyb2xsTGVmdDp0LnNjcm9sbFk/P3Quc2Nyb2xsVG9wfWdldCBzY3JvbGwoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmluZmluaXRlP28yMSh0aGlzLmFuaW1hdGVkU2Nyb2xsLHRoaXMubGltaXQpOnRoaXMuYW5pbWF0ZWRTY3JvbGx9Z2V0IHByb2dyZXNzKCl7cmV0dXJuIHRoaXMubGltaXQ9PT0wPzE6dGhpcy5zY3JvbGwvdGhpcy5saW1pdH1nZXQgaXNTY3JvbGxpbmcoKXtyZXR1cm4gdGhpcy5faXNTY3JvbGxpbmd9c2V0IGlzU2Nyb2xsaW5nKHQpe3RoaXMuX2lzU2Nyb2xsaW5nIT09dCYmKHRoaXMuX2lzU2Nyb2xsaW5nPXQsdGhpcy51cGRhdGVDbGFzc05hbWUoKSl9Z2V0IGlzU3RvcHBlZCgpe3JldHVybiB0aGlzLl9pc1N0b3BwZWR9c2V0IGlzU3RvcHBlZCh0KXt0aGlzLl9pc1N0b3BwZWQhPT10JiYodGhpcy5faXNTdG9wcGVkPXQsdGhpcy51cGRhdGVDbGFzc05hbWUoKSl9Z2V0IGlzTG9ja2VkKCl7cmV0dXJuIHRoaXMuX2lzTG9ja2VkfXNldCBpc0xvY2tlZCh0KXt0aGlzLl9pc0xvY2tlZCE9PXQmJih0aGlzLl9pc0xvY2tlZD10LHRoaXMudXBkYXRlQ2xhc3NOYW1lKCkpfWdldCBpc1Ntb290aCgpe3JldHVybiB0aGlzLmlzU2Nyb2xsaW5nPT09InNtb290aCJ9Z2V0IGNsYXNzTmFtZSgpe2xldCB0PSJsZW5pcyI7cmV0dXJuIHRoaXMub3B0aW9ucy5hdXRvVG9nZ2xlJiYodCs9IiBsZW5pcy1hdXRvVG9nZ2xlIiksdGhpcy5pc1N0b3BwZWQmJih0Kz0iIGxlbmlzLXN0b3BwZWQiKSx0aGlzLmlzTG9ja2VkJiYodCs9IiBsZW5pcy1sb2NrZWQiKSx0aGlzLmlzU2Nyb2xsaW5nJiYodCs9IiBsZW5pcy1zY3JvbGxpbmciKSx0aGlzLmlzU2Nyb2xsaW5nPT09InNtb290aCImJih0Kz0iIGxlbmlzLXNtb290aCIpLHR9dXBkYXRlQ2xhc3NOYW1lKCl7dGhpcy5jbGVhblVwQ2xhc3NOYW1lKCksdGhpcy5yb290RWxlbWVudC5jbGFzc05hbWU9YCR7dGhpcy5yb290RWxlbWVudC5jbGFzc05hbWV9ICR7dGhpcy5jbGFzc05hbWV9YC50cmltKCl9Y2xlYW5VcENsYXNzTmFtZSgpe3RoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lPXRoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoL2xlbmlzKC1cdyspPy9nLCIiKS50cmltKCl9fX0pO3ZhciBwdGU9Y3QoKGZ0ZSx1dGUpPT57KGZ1bmN0aW9uKHQsZSl7dHlwZW9mIGZ0ZT09Im9iamVjdCImJnR5cGVvZiB1dGU8InUiP3V0ZS5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD10fHxzZWxmLHQuU3dlZXRTY3JvbGw9ZSgpKX0pKGZ0ZSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbigpe3JldHVybiB0PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKE8pe2Zvcih2YXIgRyxqPTEsc2U9YXJndW1lbnRzLmxlbmd0aDtqPHNlO2orKyl7Rz1hcmd1bWVudHNbal07Zm9yKHZhciBrZSBpbiBHKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHLGtlKSYmKE9ba2VdPUdba2VdKX1yZXR1cm4gT30sdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGU9ISEodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5kb2N1bWVudCYmd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLGE9ZT93aW5kb3cuaGlzdG9yeSYmInB1c2hTdGF0ZSJpbiB3aW5kb3cuaGlzdG9yeSYmd2luZG93LmxvY2F0aW9uLnByb3RvY29sIT09ImZpbGU6IjohMSxyPShmdW5jdGlvbigpe3ZhciBJPSExO2lmKCFlKXJldHVybiBJO3RyeXt2YXIgTz13aW5kb3csRz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtJPSEwfX0pO08uYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxHKSxPLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsRyl9Y2F0Y2h7fXJldHVybiBJfSkoKSxpPWZ1bmN0aW9uKEkpe3JldHVybiB0eXBlb2YgST09InN0cmluZyJ9LG89ZnVuY3Rpb24oSSl7cmV0dXJuIHR5cGVvZiBJPT0iZnVuY3Rpb24ifSxzPWZ1bmN0aW9uKEkpe3JldHVybiBBcnJheS5pc0FycmF5KEkpfSxsPWZ1bmN0aW9uKEkpe3JldHVybiFzKEkpJiZJLXBhcnNlRmxvYXQoSSkrMT49MH0sZj1mdW5jdGlvbihJLE8pe3JldHVybiBJJiZJLmhhc093blByb3BlcnR5KE8pfSxjPWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6bnVsbCx1PWU/d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpudWxsLGQ9TWF0aC5jb3MsaD1NYXRoLnNpbixnPU1hdGgucG93LGI9TWF0aC5zcXJ0LHg9TWF0aC5QSSxtPXtsaW5lYXI6ZnVuY3Rpb24oSSl7cmV0dXJuIEl9LGVhc2VJblF1YWQ6ZnVuY3Rpb24oSSxPLEcsaixzZSl7cmV0dXJuIGoqKE8vPXNlKSpPK0d9LGVhc2VPdXRRdWFkOmZ1bmN0aW9uKEksTyxHLGosc2Upe3JldHVybi1qKihPLz1zZSkqKE8tMikrR30sZWFzZUluT3V0UXVhZDpmdW5jdGlvbihJLE8sRyxqLHNlKXtyZXR1cm4oTy89c2UvMik8MT9qLzIqTypPK0c6LWovMiooLS1PKihPLTIpLTEpK0d9LGVhc2VJbkN1YmljOmZ1bmN0aW9uKEksTyxHLGosc2Upe3JldHVybiBqKihPLz1zZSkqTypPK0d9LGVhc2VPdXRDdWJpYzpmdW5jdGlvbihJLE8sRyxqLHNlKXtyZXR1cm4gaiooKE89Ty9zZS0xKSpPKk8rMSkrR30sZWFzZUluT3V0Q3ViaWM6ZnVuY3Rpb24oSSxPLEcsaixzZSl7cmV0dXJuKE8vPXNlLzIpPDE/ai8yKk8qTypPK0c6ai8yKigoTy09MikqTypPKzIpK0d9LGVhc2VJblF1YXJ0OmZ1bmN0aW9uKEksTyxHLGosc2Upe3JldHVybiBqKihPLz1zZSkqTypPKk8rR30sZWFzZU91dFF1YXJ0OmZ1bmN0aW9uKEksTyxHLGosc2Upe3JldHVybi1qKigoTz1PL3NlLTEpKk8qTypPLTEpK0d9LGVhc2VJbk91dFF1YXJ0OmZ1bmN0aW9uKEksTyxHLGosc2Upe3JldHVybihPLz1zZS8yKTwxP2ovMipPKk8qTypPK0c6LWovMiooKE8tPTIpKk8qTypPLTIpK0d9LGVhc2VJblF1aW50OmZ1bmN0aW9uKEksTyxHLGosc2Upe3JldHVybiBqKihPLz1zZSkqTypPKk8qTytHfSxlYXNlT3V0UXVpbnQ6ZnVuY3Rpb24oSSxPLEcsaixzZSl7cmV0dXJuIGoqKChPPU8vc2UtMSkqTypPKk8qTysxKStHfSxlYXNlSW5PdXRRdWludDpmdW5jdGlvbihJLE8sRyxqLHNlKXtyZXR1cm4oTy89c2UvMik8MT9qLzIqTypPKk8qTypPK0c6ai8yKigoTy09MikqTypPKk8qTysyKStHfSxlYXNlSW5TaW5lOmZ1bmN0aW9uKEksTyxHLGosc2Upe3JldHVybi1qKmQoTy9zZSooeC8yKSkraitHfSxlYXNlT3V0U2luZTpmdW5jdGlvbihJLE8sRyxqLHNlKXtyZXR1cm4gaipoKE8vc2UqKHgvMikpK0d9LGVhc2VJbk91dFNpbmU6ZnVuY3Rpb24oSSxPLEcsaixzZSl7cmV0dXJuLWovMiooZCh4Kk8vc2UpLTEpK0d9LGVhc2VJbkV4cG86ZnVuY3Rpb24oSSxPLEcsaixzZSl7cmV0dXJuIE89PT0wP0c6aipnKDIsMTAqKE8vc2UtMSkpK0d9LGVhc2VPdXRFeHBvOmZ1bmN0aW9uKEksTyxHLGosc2Upe3JldHVybiBPPT09c2U/RytqOmoqKC1nKDIsLTEwKk8vc2UpKzEpK0d9LGVhc2VJbk91dEV4cG86ZnVuY3Rpb24oSSxPLEcsaixzZSl7cmV0dXJuIE89PT0wP0c6Tz09PXNlP0crajooTy89c2UvMik8MT9qLzIqZygyLDEwKihPLTEpKStHOmovMiooLWcoMiwtMTAqLS1PKSsyKStHfSxlYXNlSW5DaXJjOmZ1bmN0aW9uKEksTyxHLGosc2Upe3JldHVybi1qKihiKDEtKE8vPXNlKSpPKS0xKStHfSxlYXNlT3V0Q2lyYzpmdW5jdGlvbihJLE8sRyxqLHNlKXtyZXR1cm4gaipiKDEtKE89Ty9zZS0xKSpPKStHfSxlYXNlSW5PdXRDaXJjOmZ1bmN0aW9uKEksTyxHLGosc2Upe3JldHVybihPLz1zZS8yKTwxPy1qLzIqKGIoMS1PKk8pLTEpK0c6ai8yKihiKDEtKE8tPTIpKk8pKzEpK0d9fSx2PWZ1bmN0aW9uKEkpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChJP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoSSk6W10pfSx5PWZ1bmN0aW9uKEkpe3JldHVybiB2KEkpLnNoaWZ0KCl8fG51bGx9LHc9ZnVuY3Rpb24oSSl7cmV0dXJuIEkgaW5zdGFuY2VvZiBFbGVtZW50fSxFPWZ1bmN0aW9uKEkpe3JldHVybiBJPT09d2luZG93fSxDPWZ1bmN0aW9uKEkpe3JldHVybiBJPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxJPT09ZG9jdW1lbnQuYm9keX0sej1mdW5jdGlvbihJLE8pe2lmKHcoTykpcmV0dXJuIEk9PT1PO2Zvcih2YXIgRz12KE8pLGo9Ry5sZW5ndGg7LS1qPj0wJiZHW2pdIT09STspO3JldHVybiBqPi0xfSxQPWZ1bmN0aW9uKEkpe3JldHVybiBNYXRoLm1heChJLnNjcm9sbEhlaWdodCxJLmNsaWVudEhlaWdodCxJLm9mZnNldEhlaWdodCl9LF89ZnVuY3Rpb24oSSl7cmV0dXJuIE1hdGgubWF4KEkuc2Nyb2xsV2lkdGgsSS5jbGllbnRXaWR0aCxJLm9mZnNldFdpZHRoKX0sJD1mdW5jdGlvbihJKXtyZXR1cm57d2lkdGg6XyhJKSxoZWlnaHQ6UChJKX19LEg9ZnVuY3Rpb24oSSl7dmFyIE89RShJKXx8QyhJKTtyZXR1cm57dmlld3BvcnQ6e3dpZHRoOk8/TWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKTpJLmNsaWVudFdpZHRoLGhlaWdodDpPP3dpbmRvdy5pbm5lckhlaWdodDpJLmNsaWVudEhlaWdodH0sc2l6ZTpPP3t3aWR0aDpNYXRoLm1heChfKGRvY3VtZW50LmJvZHkpLF8oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSksaGVpZ2h0Ok1hdGgubWF4KFAoZG9jdW1lbnQuYm9keSksUChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX06JChJKX19LEw9e3k6InNjcm9sbFRvcCIseDoic2Nyb2xsTGVmdCJ9LGs9e3k6InBhZ2VZT2Zmc2V0Iix4OiJwYWdlWE9mZnNldCJ9LE49ZnVuY3Rpb24oSSxPKXtyZXR1cm4gRShJKT9JW2tbT11dOklbTFtPXV19LFM9ZnVuY3Rpb24oSSxPLEcpe2lmKEUoSSkpe3ZhciBqPUc9PT0ieSI7SS5zY3JvbGxUbyhqP0kucGFnZVhPZmZzZXQ6TyxqP086SS5wYWdlWU9mZnNldCl9ZWxzZSBJW0xbR11dPU99LFQ9ZnVuY3Rpb24oSSxPKXt2YXIgRz1JLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKEcud2lkdGh8fEcuaGVpZ2h0KXt2YXIgaj17dG9wOjAsbGVmdDowfSxzZT12b2lkIDA7aWYoRShPKXx8QyhPKSlzZT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsai50b3A9d2luZG93W2sueV0sai5sZWZ0PXdpbmRvd1trLnhdO2Vsc2V7c2U9Tzt2YXIga2U9c2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ai50b3A9a2UudG9wKi0xK3NlW0wueV0sai5sZWZ0PWtlLmxlZnQqLTErc2VbTC54XX1yZXR1cm57dG9wOkcudG9wK2oudG9wLXNlLmNsaWVudFRvcCxsZWZ0OkcubGVmdCtqLmxlZnQtc2UuY2xpZW50TGVmdH19cmV0dXJuIEd9LFI9KGZ1bmN0aW9uKCl7cmV0dXJuIGU/Im9ud2hlZWwiaW4gZG9jdW1lbnQ/IndoZWVsIjoibW91c2V3aGVlbCI6IndoZWVsIn0pKCksQT1mdW5jdGlvbihJKXtyZXR1cm4gST09PSJ3aGVlbCI/UjpJfSxGPWZ1bmN0aW9uKEksTyxHLGosc2Upe0cuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGtlKXtJW09dKEEoa2UpLGoscj97cGFzc2l2ZTpzZX06ITEpfSl9LGFlPWZ1bmN0aW9uKEksTyxHLGope3JldHVybiBGKEksImFkZEV2ZW50TGlzdGVuZXIiLE8sRyxqKX0sVj1mdW5jdGlvbihJLE8sRyxqKXtyZXR1cm4gRihJLCJyZW1vdmVFdmVudExpc3RlbmVyIixPLEcsail9LFNlPS9eKFwrfC0pPShcZCsoPzpcLlxkKyk/KSQvLHplPWZ1bmN0aW9uKEksTyl7dmFyIEc9e3RvcDowLGxlZnQ6MCxyZWxhdGl2ZTohMX07aWYoZihJLCJ0b3AiKXx8ZihJLCJsZWZ0IikpRz10KHt9LEcsSSk7ZWxzZSBpZihzKEkpKWlmKEkubGVuZ3RoPjEpRy50b3A9SVswXSxHLmxlZnQ9SVsxXTtlbHNlIGlmKEkubGVuZ3RoPT09MSlHLnRvcD1PP0lbMF06MCxHLmxlZnQ9Tz8wOklbMF07ZWxzZSByZXR1cm4gbnVsbDtlbHNlIGlmKGwoSSkpTz9HLnRvcD1JOkcubGVmdD1JO2Vsc2UgaWYoaShJKSl7dmFyIGo9SS50cmltKCkubWF0Y2goU2UpO2lmKCFqKXJldHVybiBudWxsO3ZhciBzZT1qWzFdLGtlPXBhcnNlSW50KGpbMl0sMTApO3NlPT09IisiPyhHLnRvcD1PP2tlOjAsRy5sZWZ0PU8/MDprZSk6KEcudG9wPU8/LWtlOjAsRy5sZWZ0PU8/MDota2UpLEcucmVsYXRpdmU9ITB9ZWxzZSByZXR1cm4gbnVsbDtyZXR1cm4gR30sVz17dHJpZ2dlcjoiW2RhdGEtc2Nyb2xsXSIsaGVhZGVyOiJbZGF0YS1zY3JvbGwtaGVhZGVyXSIsZHVyYXRpb246MWUzLGVhc2luZzoiZWFzZU91dFF1aW50IixvZmZzZXQ6MCx2ZXJ0aWNhbDohMCxob3Jpem9udGFsOiExLGNhbmNlbGxhYmxlOiEwLHVwZGF0ZVVSTDohMSxwcmV2ZW50RGVmYXVsdDohMCxzdG9wUHJvcGFnYXRpb246ITAsYmVmb3JlOm51bGwsYWZ0ZXI6bnVsbCxjYW5jZWw6bnVsbCxjb21wbGV0ZTpudWxsLHN0ZXA6bnVsbH0sTmU9ImNsaWNrIixSZT0id2hlZWwgdG91Y2hzdGFydCB0b3VjaG1vdmUiLFg9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gSShPLEcpe3ZhciBqPXRoaXM7dGhpcy4kZWw9bnVsbCx0aGlzLmN0eD17JHRyaWdnZXI6bnVsbCxvcHRzOm51bGwscHJvZ3Jlc3M6ITEscG9zOm51bGwsc3RhcnRQb3M6bnVsbCxlYXNpbmc6bnVsbCxzdGFydDowLGlkOjAsY2FuY2VsOiExLGhhc2g6bnVsbH0sdGhpcy5sb29wPWZ1bmN0aW9uKGtlKXt2YXIgRGU9aixPZT1EZS4kZWwsVT1EZS5jdHg7aWYoVS5zdGFydHx8KFUuc3RhcnQ9a2UpLCFVLnByb2dyZXNzfHwhT2Upe2ouc3RvcCgpO3JldHVybn12YXIgQj1VLm9wdHMsb2U9VS5wb3MsdmU9VS5zdGFydCx5ZT1VLnN0YXJ0UG9zLCRlPVUuZWFzaW5nLG5lPUIuZHVyYXRpb24scmU9e3RvcDoieSIsbGVmdDoieCJ9LGdlPWtlLXZlLEVlPU1hdGgubWluKDEsTWF0aC5tYXgoZ2UvbmUsMCkpO09iamVjdC5rZXlzKG9lKS5mb3JFYWNoKGZ1bmN0aW9uKHJ0KXt2YXIgdWU9b2VbcnRdLFo9eWVbcnRdLEo9dWUtWjtpZihKIT09MCl7dmFyIGRlPSRlKEVlLG5lKkVlLDAsMSxuZSk7UyhPZSxNYXRoLnJvdW5kKForSipkZSkscmVbcnRdKX19KSxnZTw9bmU/KGouaG9vayhCLCJzdGVwIixFZSksVS5pZD1JLnJhZihqLmxvb3ApKTpqLnN0b3AoITApfSx0aGlzLmhhbmRsZUNsaWNrPWZ1bmN0aW9uKGtlKXtmb3IodmFyIERlPWoub3B0cyxPZT1rZS50YXJnZXQ7T2UmJk9lIT09ZG9jdW1lbnQ7T2U9T2UucGFyZW50Tm9kZSlpZih6KE9lLERlLnRyaWdnZXIpKXt2YXIgVT1KU09OLnBhcnNlKE9lLmdldEF0dHJpYnV0ZSgiZGF0YS1zY3JvbGwtb3B0aW9ucyIpfHwie30iKSxCPU9lLmdldEF0dHJpYnV0ZSgiZGF0YS1zY3JvbGwiKSxvZT1CfHxPZS5nZXRBdHRyaWJ1dGUoImhyZWYiKSx2ZT10KHt9LERlLFUpLHllPXZlLnByZXZlbnREZWZhdWx0LCRlPXZlLnN0b3BQcm9wYWdhdGlvbixuZT12ZS52ZXJ0aWNhbCxyZT12ZS5ob3Jpem9udGFsO3llJiZrZS5wcmV2ZW50RGVmYXVsdCgpLCRlJiZrZS5zdG9wUHJvcGFnYXRpb24oKSxqLmN0eC4kdHJpZ2dlcj1PZSxyZSYmbmU/ai50byhvZSx2ZSk6bmU/ai50b1RvcChvZSx2ZSk6cmUmJmoudG9MZWZ0KG9lLHZlKTticmVha319LHRoaXMuaGFuZGxlU3RvcD1mdW5jdGlvbihrZSl7dmFyIERlPWouY3R4LE9lPURlLm9wdHM7T2UmJk9lLmNhbmNlbGxhYmxlPyhEZS5jYW5jZWw9ITAsai5zdG9wKCkpOmtlLnByZXZlbnREZWZhdWx0KCl9LHRoaXMub3B0cz10KHt9LFcsT3x8e30pO3ZhciBzZT1udWxsO2UmJih0eXBlb2YgRz09InN0cmluZyI/c2U9eShHKTpHIT1udWxsP3NlPUc6c2U9d2luZG93KSx0aGlzLiRlbD1zZSxzZSYmdGhpcy5iaW5kKCEwLCExKX1yZXR1cm4gSS5jcmVhdGU9ZnVuY3Rpb24oTyxHKXtyZXR1cm4gbmV3IEkoTyxHKX0sSS5wcm90b3R5cGUudG89ZnVuY3Rpb24oTyxHKXtpZihlKXt2YXIgaj10aGlzLHNlPWouJGVsLGtlPWouY3R4LERlPWoub3B0cyxPZT1rZS4kdHJpZ2dlcixVPXQoe30sRGUsR3x8e30pLEI9VS5vZmZzZXQsb2U9VS52ZXJ0aWNhbCx2ZT1VLmhvcml6b250YWwseWU9dyhVLmhlYWRlcik/VS5oZWFkZXI6eShVLmhlYWRlciksJGU9L14jLyxuZT1pKE8pJiYkZS50ZXN0KE8pP086bnVsbDtpZihrZS5vcHRzPVUsa2UuY2FuY2VsPSExLGtlLmhhc2g9bmUsdGhpcy5zdG9wKCksISFzZSl7dmFyIHJlPXplKEIsb2UpLGdlPXplKE8sb2UpLEVlPXt0b3A6MCxsZWZ0OjB9O2lmKGdlKWlmKGdlLnJlbGF0aXZlKXt2YXIgcnQ9TihzZSxvZT8ieSI6IngiKTtFZS50b3A9b2U/cnQrZ2UudG9wOmdlLnRvcCxFZS5sZWZ0PW9lP2dlLmxlZnQ6cnQrZ2UubGVmdH1lbHNlIEVlPWdlO2Vsc2UgaWYoaShPKSYmTyE9PSIjIil7dmFyIHVlPXkoTyk7aWYoIXVlKXJldHVybjtFZT1UKHVlLHNlKX1yZSYmKEVlLnRvcCs9cmUudG9wLEVlLmxlZnQrPXJlLmxlZnQpLHllJiYoRWUudG9wPU1hdGgubWF4KDAsRWUudG9wLSQoeWUpLmhlaWdodCkpO3ZhciBaPUgoc2UpLEo9Wi52aWV3cG9ydCxkZT1aLnNpemU7aWYoRWUudG9wPW9lP01hdGgubWF4KDAsTWF0aC5taW4oZGUuaGVpZ2h0LUouaGVpZ2h0LEVlLnRvcCkpOk4oc2UsInkiKSxFZS5sZWZ0PXZlP01hdGgubWF4KDAsTWF0aC5taW4oZGUud2lkdGgtSi53aWR0aCxFZS5sZWZ0KSk6TihzZSwieCIpLHRoaXMuaG9vayhVLCJiZWZvcmUiLEVlLE9lKT09PSExKXtrZS5vcHRzPW51bGw7cmV0dXJufWtlLnBvcz1FZSx0aGlzLnN0YXJ0KFUpLHRoaXMuYmluZCghMSwhMCl9fX0sSS5wcm90b3R5cGUudG9Ub3A9ZnVuY3Rpb24oTyxHKXt0aGlzLnRvKE8sdCh7fSxHfHx7fSx7dmVydGljYWw6ITAsaG9yaXpvbnRhbDohMX0pKX0sSS5wcm90b3R5cGUudG9MZWZ0PWZ1bmN0aW9uKE8sRyl7dGhpcy50byhPLHQoe30sR3x8e30se3ZlcnRpY2FsOiExLGhvcml6b250YWw6ITB9KSl9LEkucHJvdG90eXBlLnRvRWxlbWVudD1mdW5jdGlvbihPLEcpe3ZhciBqPXRoaXMuJGVsOyFlfHwhanx8dGhpcy50byhUKE8saiksR3x8e30pfSxJLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKE8pe089PT12b2lkIDAmJihPPSExKTt2YXIgRz10aGlzLGo9Ry4kZWwsc2U9Ry5jdHgsa2U9c2UucG9zOyFqfHwhc2UucHJvZ3Jlc3N8fChJLmNhZihzZS5pZCksc2UucHJvZ3Jlc3M9ITEsc2Uuc3RhcnQ9MCxzZS5pZD0wLE8mJmtlJiYoUyhqLGtlLmxlZnQsIngiKSxTKGosa2UudG9wLCJ5IikpLHRoaXMuY29tcGxldGUoKSl9LEkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihPKXtpZih0aGlzLiRlbCl7dmFyIEc9dCh7fSx0aGlzLm9wdHMsTyk7dGhpcy5zdG9wKCksdGhpcy51bmJpbmQoITAsITApLHRoaXMub3B0cz1HLHRoaXMuYmluZCghMCwhMSl9fSxJLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kZWwmJih0aGlzLnN0b3AoKSx0aGlzLnVuYmluZCghMCwhMCksdGhpcy4kZWw9bnVsbCl9LEkucHJvdG90eXBlLm9uQmVmb3JlPWZ1bmN0aW9uKE8sRyl7cmV0dXJuITB9LEkucHJvdG90eXBlLm9uU3RlcD1mdW5jdGlvbihPKXt9LEkucHJvdG90eXBlLm9uQWZ0ZXI9ZnVuY3Rpb24oTyxHKXt9LEkucHJvdG90eXBlLm9uQ2FuY2VsPWZ1bmN0aW9uKCl7fSxJLnByb3RvdHlwZS5vbkNvbXBsZXRlPWZ1bmN0aW9uKE8pe30sSS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oTyl7dmFyIEc9dGhpcy5jdHg7Ry5vcHRzPU8sRy5wcm9ncmVzcz0hMCxHLmVhc2luZz1vKE8uZWFzaW5nKT9PLmVhc2luZzptW08uZWFzaW5nXTt2YXIgaj10aGlzLiRlbCxzZT17dG9wOk4oaiwieSIpLGxlZnQ6TihqLCJ4Iil9O0cuc3RhcnRQb3M9c2UsRy5pZD1JLnJhZih0aGlzLmxvb3ApfSxJLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciBPPXRoaXMsRz1PLiRlbCxqPU8uY3R4LHNlPWouaGFzaCxrZT1qLmNhbmNlbCxEZT1qLm9wdHMsT2U9ai5wb3MsVT1qLiR0cmlnZ2VyO2lmKCEoIUd8fCFEZSkpe2lmKHNlIT1udWxsJiZzZSE9PXdpbmRvdy5sb2NhdGlvbi5oYXNoKXt2YXIgQj1EZS51cGRhdGVVUkw7ZSYmYSYmQiE9PSExJiZ3aW5kb3cuaGlzdG9yeVtCPT09InJlcGxhY2UiPyJyZXBsYWNlU3RhdGUiOiJwdXNoU3RhdGUiXShudWxsLCIiLHNlKX10aGlzLnVuYmluZCghMSwhMCksai5vcHRzPW51bGwsai4kdHJpZ2dlcj1udWxsLGtlP3RoaXMuaG9vayhEZSwiY2FuY2VsIik6dGhpcy5ob29rKERlLCJhZnRlciIsT2UsVSksdGhpcy5ob29rKERlLCJjb21wbGV0ZSIsa2UpfX0sSS5wcm90b3R5cGUuaG9vaz1mdW5jdGlvbihPLEcpe2Zvcih2YXIgaj1bXSxzZT0yO3NlPGFyZ3VtZW50cy5sZW5ndGg7c2UrKylqW3NlLTJdPWFyZ3VtZW50c1tzZV07dmFyIGtlLERlPU9bR10sT2UsVTtyZXR1cm4gbyhEZSkmJihPZT1EZS5hcHBseSh0aGlzLGouY29uY2F0KFt0aGlzXSkpKSxVPShrZT10aGlzKVsib24iKyhHWzBdLnRvVXBwZXJDYXNlKCkrRy5zbGljZSgxKSldLmFwcGx5KGtlLGopLE9lIT09dm9pZCAwP09lOlV9LEkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oTyxHKXt2YXIgaj10aGlzLHNlPWouJGVsLGtlPWouY3R4Lm9wdHM7c2UmJihPJiZhZShzZSxOZSx0aGlzLmhhbmRsZUNsaWNrLCExKSxHJiZhZShzZSxSZSx0aGlzLmhhbmRsZVN0b3Asa2U/a2UuY2FuY2VsbGFibGU6ITApKX0sSS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKE8sRyl7dmFyIGo9dGhpcyxzZT1qLiRlbCxrZT1qLmN0eC5vcHRzO3NlJiYoTyYmVihzZSxOZSx0aGlzLmhhbmRsZUNsaWNrLCExKSxHJiZWKHNlLFJlLHRoaXMuaGFuZGxlU3RvcCxrZT9rZS5jYW5jZWxsYWJsZTohMCkpfSxJLnJhZj1jLEkuY2FmPXUsSX0pKCk7cmV0dXJuIFh9KX0pO3ZhciBOcSxQZCxINj1uKCgpPT57UldlKCk7ajgoKTtpaSgpO2Q2KCk7U2VlKCk7cDIoKTtFZWUoKTtWYSgpO0ZlZSgpO1A4KCk7QmVlKCk7blEoKTtBcSgpO1BSKCk7bTJ0KCk7ZzJ0KCk7ZHRlKCk7dzJ0KCk7TnE9TjIocHRlKCksMSksUGQ9e09iamVjdE1hcDpEcSxTdHJpbmdtYXA6RXEsRmFzdE1hcDpSNn19KTt2YXIgVnI9e307ZXQoVnIse2Nzc0ZvckRlc2t0b3A6KCk9PmQyMSxjc3NGb3JOb3RlYm9vazooKT0+ZjIxLGNzc0ZvclBoYWJsZXQ6KCk9PnAyMSxjc3NGb3JQaG9uZTooKT0+aDIxLGNzc0ZvclRhYmxldDooKT0+dTIxLGRlc2t0b3A6KCk9Pmh0ZSxub3RlYm9vazooKT0+bXRlLHBoYWJsZXQ6KCk9Pnh0ZSxwaG9uZTooKT0+YnRlLHRhYmxldDooKT0+Z3RlfSk7dmFyIGh0ZSxtdGUsZ3RlLHh0ZSxidGUsZDIxLGYyMSx1MjEscDIxLGgyMSx2dGU9bigoKT0+e3E2KCk7Z3IoKTtodGU9MTYwMCxtdGU9MTI0MCxndGU9MTAyNCx4dGU9NjAwLGJ0ZT00MDAsZDIxPXQ9PkJ0KGAKICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWluLXdpZHRoOiAke2h0ZX1weCkgewogICAgICAke3QuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWluLXdpZHRoOiAke2h0ZX1weCkgewogICAgICAke3QuY3NzVGV4dH0KICAgIH0KICBgKSxmMjE9dD0+QnQoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtYXgtd2lkdGg6ICR7bXRlfXB4KSB7CiAgICAgICR7dC5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7bXRlfXB4KSB7CiAgICAgICR7dC5jc3NUZXh0fQogICAgfQogIGApLHUyMT10PT5CdChgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHtndGV9cHgpIHsKICAgICAgJHt0LmNzc1RleHR9CiAgICB9CiAgICBAbWVkaWEgKG1heC13aWR0aDogJHtndGV9cHgpIHsKICAgICAgJHt0LmNzc1RleHR9CiAgICB9CiAgYCkscDIxPXQ9PkJ0KGAKICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWF4LXdpZHRoOiAke3h0ZX1weCkgewogICAgICAke3QuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke3h0ZX1weCkgewogICAgICAke3QuY3NzVGV4dH0KICAgIH0KICBgKSxoMjE9dD0+QnQoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtYXgtd2lkdGg6ICR7YnRlfXB4KSB7CiAgICAgICR7dC5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7YnRlfXB4KSB7CiAgICAgICR7dC5jc3NUZXh0fQogICAgfQogIGApfSk7dmFyIElxLE0ydD1uKCgpPT57SDYoKTtJcT1jbGFzc3tkb210b29sc0luc3RhbmNlO3Njcm9sbENhbGxiYWNrcz1bXTtsZW5pc0luc3RhbmNlPW51bGw7aGFuZGxlTmF0aXZlU2Nyb2xsPWU9Pnt0aGlzLmV4ZWN1dGVTY3JvbGxDYWxsYmFja3MoKX07aGFuZGxlTGVuaXNTY3JvbGw9ZT0+e3RoaXMuZXhlY3V0ZVNjcm9sbENhbGxiYWNrcygpfTtjb25zdHJ1Y3RvcihlKXt0aGlzLmRvbXRvb2xzSW5zdGFuY2U9ZSx0aGlzLmF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCl9c3dlZXRTY3JvbGxlcj1uZXcgTnEuZGVmYXVsdCh7fSk7YXN5bmMgdG9FbGVtZW50KGUsYSl7dGhpcy5zd2VldFNjcm9sbGVyLnRvRWxlbWVudChlLGEpLGF3YWl0IGZ0LmRlbGF5Rm9yKGEuZHVyYXRpb24pfWFzeW5jIGRldGVjdE5hdGl2ZVNtb290aFNjcm9sbCgpe2xldCBlPVZlLmRlZmVyKCksYT0xMDAscj0zLGk9Ljc1LG89W107ZnVuY3Rpb24gcyhmKXtvLnB1c2goZi5kZWx0YVkpLG8ubGVuZ3RoPj1hJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixzKSxsKCkpfWZ1bmN0aW9uIGwoKXtsZXQgZj1vLmxlbmd0aC0xLGM9MDtmb3IobGV0IGQ9MDtkPGY7ZCsrKU1hdGguYWJzKG9bZCsxXS1vW2RdKTw9ciYmYysrO2MvZj49aT8oY29uc29sZS5sb2coIlNtb290aCBzY3JvbGxpbmcgZGV0ZWN0ZWQuIiksZS5yZXNvbHZlKCEwKSk6KGNvbnNvbGUubG9nKCJTbW9vdGggc2Nyb2xsaW5nIE5PVCBkZXRlY3RlZC4iKSxlLnJlc29sdmUoITEpKX1yZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixzKSxlLnByb21pc2V9YXN5bmMgZW5hYmxlTGVuaXNTY3JvbGwoZSl7bGV0IGE9bmV3IE5kKHthdXRvUmFmOiEwfSk7aWYoZT8uZGlzYWJsZU9uTmF0aXZlU21vb3RoU2Nyb2xsJiZhd2FpdCB0aGlzLmRldGVjdE5hdGl2ZVNtb290aFNjcm9sbCgpKXthLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5sZW5pc0luc3RhbmNlPWEsdGhpcy5kZXRhY2hOYXRpdmVTY3JvbGxMaXN0ZW5lcigpLHRoaXMuYXR0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpO2xldCByPWEuZGVzdHJveS5iaW5kKGEpO2EuZGVzdHJveT0oKT0+e3IoKSx0aGlzLmRldGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKSx0aGlzLmF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCksdGhpcy5sZW5pc0luc3RhbmNlPW51bGx9fW9uU2Nyb2xsKGUpe3RoaXMuc2Nyb2xsQ2FsbGJhY2tzLnB1c2goZSl9ZXhlY3V0ZVNjcm9sbENhbGxiYWNrcygpe3RoaXMuc2Nyb2xsQ2FsbGJhY2tzLmZvckVhY2goZT0+e3RyeXtlKCl9Y2F0Y2goYSl7Y29uc29sZS5lcnJvcigiRXJyb3IgaW4gc2Nyb2xsIGNhbGxiYWNrOiIsYSl9fSl9YXR0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmhhbmRsZU5hdGl2ZVNjcm9sbCl9ZGV0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmhhbmRsZU5hdGl2ZVNjcm9sbCl9YXR0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpe3RoaXMubGVuaXNJbnN0YW5jZSYmdGhpcy5sZW5pc0luc3RhbmNlLm9uKCJzY3JvbGwiLHRoaXMuaGFuZGxlTGVuaXNTY3JvbGwpfWRldGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKXt0aGlzLmxlbmlzSW5zdGFuY2UmJnRoaXMubGVuaXNJbnN0YW5jZS5vZmYoInNjcm9sbCIsdGhpcy5oYW5kbGVMZW5pc1Njcm9sbCl9fX0pO3ZhciBGcSx6MnQ9bigoKT0+e3E2KCk7SDYoKTtGcT1jbGFzc3tkb210b29sc1JlZjtnb0JyaWdodEJvb2xlYW49ITE7cHJlZmVycmVkQ29sb3JTY2hlbWVNZWRpYU1hdGNoPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIpO3RoZW1lT2JzZXJ2YWJsZT1uZXcgQ3Qucnhqcy5SZXBsYXlTdWJqZWN0KDEpO2NvbnN0cnVjdG9yKGUpe3RoaXMuZG9tdG9vbHNSZWY9ZSx0aGlzLmdvQnJpZ2h0Qm9vbGVhbj10aGlzLnByZWZlcnJlZENvbG9yU2NoZW1lTWVkaWFNYXRjaC5tYXRjaGVzLHRoaXMucHJlZmVycmVkQ29sb3JTY2hlbWVNZWRpYU1hdGNoLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsYT0+e3RoaXMuZ29CcmlnaHRCb29sZWFuPWEubWF0Y2hlcyx0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCl9KSx0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCl9YXN5bmMgZW5hYmxlQXV0b21hdGljR2xvYmFsVGhlbWVDaGFuZ2UoKXtkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LnN0eWxlJiZ0aGlzLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoe25leHQ6ZT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZD1lPyIjZmZmIjoiIzAwMCJ9fSl9YXN5bmMgdXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKXt0aGlzLnRoZW1lT2JzZXJ2YWJsZS5uZXh0KHRoaXMuZ29CcmlnaHRCb29sZWFuKX1nb0JyaWdodCgpe3RoaXMuZ29CcmlnaHRCb29sZWFuPSEwLHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKX1nb0RhcmsoKXt0aGlzLmdvQnJpZ2h0Qm9vbGVhbj0hMSx0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCl9dG9nZ2xlRGFya0JyaWdodCgpe3RoaXMuZ29CcmlnaHRCb29sZWFuPSF0aGlzLmdvQnJpZ2h0Qm9vbGVhbix0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCl9fX0pO3ZhciB5dGUsT3EsazJ0PW4oKCk9PntINigpOyhmdW5jdGlvbih0KXt0W3QuQmFja3NwYWNlPThdPSJCYWNrc3BhY2UiLHRbdC5UYWI9OV09IlRhYiIsdFt0LkVudGVyPTEzXT0iRW50ZXIiLHRbdC5TaGlmdD0xNl09IlNoaWZ0Iix0W3QuQ3RybD0xN109IkN0cmwiLHRbdC5BbHQ9MThdPSJBbHQiLHRbdC5QYXVzZUJyZWFrPTE5XT0iUGF1c2VCcmVhayIsdFt0LkNhcHNMb2NrPTIwXT0iQ2Fwc0xvY2siLHRbdC5Fc2NhcGU9MjddPSJFc2NhcGUiLHRbdC5TcGFjZT0zMl09IlNwYWNlIix0W3QuUGFnZVVwPTMzXT0iUGFnZVVwIix0W3QuUGFnZURvd249MzRdPSJQYWdlRG93biIsdFt0LkVuZD0zNV09IkVuZCIsdFt0LkhvbWU9MzZdPSJIb21lIix0W3QuTGVmdEFycm93PTM3XT0iTGVmdEFycm93Iix0W3QuVXBBcnJvdz0zOF09IlVwQXJyb3ciLHRbdC5SaWdodEFycm93PTM5XT0iUmlnaHRBcnJvdyIsdFt0LkRvd25BcnJvdz00MF09IkRvd25BcnJvdyIsdFt0Lkluc2VydD00NV09Ikluc2VydCIsdFt0LkRlbGV0ZT00Nl09IkRlbGV0ZSIsdFt0Llplcm89NDhdPSJaZXJvIix0W3QuQ2xvc2VkUGFyZW49NDhdPSJDbG9zZWRQYXJlbiIsdFt0Lk9uZT00OV09Ik9uZSIsdFt0LkV4Y2xhbWF0aW9uTWFyaz00OV09IkV4Y2xhbWF0aW9uTWFyayIsdFt0LlR3bz01MF09IlR3byIsdFt0LkF0U2lnbj01MF09IkF0U2lnbiIsdFt0LlRocmVlPTUxXT0iVGhyZWUiLHRbdC5Qb3VuZFNpZ249NTFdPSJQb3VuZFNpZ24iLHRbdC5IYXNoPTUxXT0iSGFzaCIsdFt0LkZvdXI9NTJdPSJGb3VyIix0W3QuRG9sbGFyU2lnbj01Ml09IkRvbGxhclNpZ24iLHRbdC5GaXZlPTUzXT0iRml2ZSIsdFt0LlBlcmNlbnRTaWduPTUzXT0iUGVyY2VudFNpZ24iLHRbdC5TaXg9NTRdPSJTaXgiLHRbdC5DYXJldD01NF09IkNhcmV0Iix0W3QuSGF0PTU0XT0iSGF0Iix0W3QuU2V2ZW49NTVdPSJTZXZlbiIsdFt0LkFtcGVyc2FuZD01NV09IkFtcGVyc2FuZCIsdFt0LkVpZ2h0PTU2XT0iRWlnaHQiLHRbdC5TdGFyPTU2XT0iU3RhciIsdFt0LkFzdGVyaWs9NTZdPSJBc3RlcmlrIix0W3QuTmluZT01N109Ik5pbmUiLHRbdC5PcGVuUGFyZW49NTddPSJPcGVuUGFyZW4iLHRbdC5BPTY1XT0iQSIsdFt0LkI9NjZdPSJCIix0W3QuQz02N109IkMiLHRbdC5EPTY4XT0iRCIsdFt0LkU9NjldPSJFIix0W3QuRj03MF09IkYiLHRbdC5HPTcxXT0iRyIsdFt0Lkg9NzJdPSJIIix0W3QuST03M109IkkiLHRbdC5KPTc0XT0iSiIsdFt0Lks9NzVdPSJLIix0W3QuTD03Nl09IkwiLHRbdC5NPTc3XT0iTSIsdFt0Lk49NzhdPSJOIix0W3QuTz03OV09Ik8iLHRbdC5QPTgwXT0iUCIsdFt0LlE9ODFdPSJRIix0W3QuUj04Ml09IlIiLHRbdC5TPTgzXT0iUyIsdFt0LlQ9ODRdPSJUIix0W3QuVT04NV09IlUiLHRbdC5WPTg2XT0iViIsdFt0Llc9ODddPSJXIix0W3QuWD04OF09IlgiLHRbdC5ZPTg5XT0iWSIsdFt0Llo9OTBdPSJaIix0W3QuTGVmdFdpbmRvd0tleT05MV09IkxlZnRXaW5kb3dLZXkiLHRbdC5SaWdodFdpbmRvd0tleT05Ml09IlJpZ2h0V2luZG93S2V5Iix0W3QuU2VsZWN0S2V5PTkzXT0iU2VsZWN0S2V5Iix0W3QuTnVtcGFkMD05Nl09Ik51bXBhZDAiLHRbdC5OdW1wYWQxPTk3XT0iTnVtcGFkMSIsdFt0Lk51bXBhZDI9OThdPSJOdW1wYWQyIix0W3QuTnVtcGFkMz05OV09Ik51bXBhZDMiLHRbdC5OdW1wYWQ0PTEwMF09Ik51bXBhZDQiLHRbdC5OdW1wYWQ1PTEwMV09Ik51bXBhZDUiLHRbdC5OdW1wYWQ2PTEwMl09Ik51bXBhZDYiLHRbdC5OdW1wYWQ3PTEwM109Ik51bXBhZDciLHRbdC5OdW1wYWQ4PTEwNF09Ik51bXBhZDgiLHRbdC5OdW1wYWQ5PTEwNV09Ik51bXBhZDkiLHRbdC5NdWx0aXBseT0xMDZdPSJNdWx0aXBseSIsdFt0LkFkZD0xMDddPSJBZGQiLHRbdC5TdWJ0cmFjdD0xMDldPSJTdWJ0cmFjdCIsdFt0LkRlY2ltYWxQb2ludD0xMTBdPSJEZWNpbWFsUG9pbnQiLHRbdC5EaXZpZGU9MTExXT0iRGl2aWRlIix0W3QuRjE9MTEyXT0iRjEiLHRbdC5GMj0xMTNdPSJGMiIsdFt0LkYzPTExNF09IkYzIix0W3QuRjQ9MTE1XT0iRjQiLHRbdC5GNT0xMTZdPSJGNSIsdFt0LkY2PTExN109IkY2Iix0W3QuRjc9MTE4XT0iRjciLHRbdC5GOD0xMTldPSJGOCIsdFt0LkY5PTEyMF09IkY5Iix0W3QuRjEwPTEyMV09IkYxMCIsdFt0LkYxMT0xMjJdPSJGMTEiLHRbdC5GMTI9MTIzXT0iRjEyIix0W3QuTnVtTG9jaz0xNDRdPSJOdW1Mb2NrIix0W3QuU2Nyb2xsTG9jaz0xNDVdPSJTY3JvbGxMb2NrIix0W3QuU2VtaUNvbG9uPTE4Nl09IlNlbWlDb2xvbiIsdFt0LkVxdWFscz0xODddPSJFcXVhbHMiLHRbdC5Db21tYT0xODhdPSJDb21tYSIsdFt0LkRhc2g9MTg5XT0iRGFzaCIsdFt0LlBlcmlvZD0xOTBdPSJQZXJpb2QiLHRbdC5VbmRlclNjb3JlPTE4OV09IlVuZGVyU2NvcmUiLHRbdC5QbHVzU2lnbj0xODddPSJQbHVzU2lnbiIsdFt0LkZvcndhcmRTbGFzaD0xOTFdPSJGb3J3YXJkU2xhc2giLHRbdC5UaWxkZT0xOTJdPSJUaWxkZSIsdFt0LkdyYXZlQWNjZW50PTE5Ml09IkdyYXZlQWNjZW50Iix0W3QuT3BlbkJyYWNrZXQ9MjE5XT0iT3BlbkJyYWNrZXQiLHRbdC5DbG9zZWRCcmFja2V0PTIyMV09IkNsb3NlZEJyYWNrZXQiLHRbdC5RdW90ZT0yMjJdPSJRdW90ZSJ9KSh5dGV8fCh5dGU9e30pKTtPcT1jbGFzc3tkb21Ob2RlO21hcENvbWJvc1RvSGFuZGxlcnM9bmV3IE1hcDtwcmVzc2VkS2V5cz1uZXcgU2V0O2NvbnN0cnVjdG9yKGUpe3RoaXMuZG9tTm9kZT1lLHRoaXMuc3RhcnRMaXN0ZW5pbmcoKX1rZXlFbnVtPXl0ZTtvbihlKXtsZXQgYT1uZXcgQ3Qucnhqcy5TdWJqZWN0O3JldHVybiB0aGlzLnJlZ2lzdGVyS2V5cyhlLGEpLGF9dHJpZ2dlcktleVByZXNzKGUpe2ZvcihsZXQgYSBvZiBlKXRoaXMucHJlc3NlZEtleXMuYWRkKGEpO3RoaXMuY2hlY2tNYXRjaGluZ0tleWJvYXJkU3ViamVjdHMoKTtmb3IobGV0IGEgb2YgZSl0aGlzLnByZXNzZWRLZXlzLmRlbGV0ZShhKX1zdGFydExpc3RlbmluZygpe3RoaXMuZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLmhhbmRsZUtleURvd24pLHRoaXMuZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5oYW5kbGVLZXlVcCl9c3RvcExpc3RlbmluZygpe3RoaXMuZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLmhhbmRsZUtleURvd24pLHRoaXMuZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5oYW5kbGVLZXlVcCl9Y2xlYXIoKXt0aGlzLnN0b3BMaXN0ZW5pbmcoKSx0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuY2xlYXIoKSx0aGlzLnByZXNzZWRLZXlzLmNsZWFyKCl9aGFuZGxlS2V5RG93bj1lPT57dGhpcy5wcmVzc2VkS2V5cy5hZGQoZS5rZXlDb2RlKSx0aGlzLmNoZWNrTWF0Y2hpbmdLZXlib2FyZFN1YmplY3RzKGUpfTtjaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cyhlKXt0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuZm9yRWFjaCgoYSxyKT0+e3RoaXMuYXJlQWxsS2V5c1ByZXNzZWQocikmJmEubmV4dChlKX0pfWhhbmRsZUtleVVwPWU9Pnt0aGlzLnByZXNzZWRLZXlzLmRlbGV0ZShlLmtleUNvZGUpfTthcmVBbGxLZXlzUHJlc3NlZChlKXtsZXQgYT0hMDtyZXR1cm4gZS5mb3JFYWNoKHI9Pnt0aGlzLnByZXNzZWRLZXlzLmhhcyhyKXx8KGE9ITEpfSksYX1yZWdpc3RlcktleXMoZSxhKXtpZighdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmhhcyhlKSl0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuc2V0KGUsYSk7ZWxzZSByZXR1cm4gdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmdldChlKX19fSk7dmFyIEMyLHE2PW4oKCk9PntINigpO3Z0ZSgpO00ydCgpO0FxKCk7ejJ0KCk7azJ0KCk7QzI9Y2xhc3MgdHtzdGF0aWMgaW5pdGlhbGl6YXRpb25Qcm9taXNlPW51bGw7c3RhdGljIGFzeW5jIHNldHVwRG9tVG9vbHMoZT17fSl7cmV0dXJuIWUuaWdub3JlR2xvYmFsJiZ0LmluaXRpYWxpemF0aW9uUHJvbWlzZT9hd2FpdCB0LmluaXRpYWxpemF0aW9uUHJvbWlzZTplLmlnbm9yZUdsb2JhbD9uZXcgdChlKToodC5pbml0aWFsaXphdGlvblByb21pc2U9KGFzeW5jKCk9PntsZXQgYTtpZihnbG9iYWxUaGlzLmRlZXNEb21Ub29scylhPWdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzO2Vsc2V7Z2xvYmFsVGhpcy5kZWVzRG9tVG9vbHM9bmV3IHQoZSksYT1nbG9iYWxUaGlzLmRlZXNEb21Ub29scztsZXQgcj0oKT0+eyhkb2N1bWVudC5yZWFkeVN0YXRlPT09ImludGVyYWN0aXZlInx8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpJiYoYS5lbGVtZW50cy5oZWFkRWxlbWVudD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIiksYS5lbGVtZW50cy5ib2R5RWxlbWVudD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5IiksYS5rZXlib2FyZD1uZXcgT3EoZG9jdW1lbnQuYm9keSksYS5kb21SZWFkeS5yZXNvbHZlKCkpfTtkb2N1bWVudC5yZWFkeVN0YXRlPT09ImludGVyYWN0aXZlInx8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSI/cigpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLHIpLGEuZG9tVG9vbHNSZWFkeS5yZXNvbHZlKCl9cmV0dXJuIGF3YWl0IGEuZG9tVG9vbHNSZWFkeS5wcm9taXNlLGF9KSgpLGF3YWl0IHQuaW5pdGlhbGl6YXRpb25Qcm9taXNlKX1zdGF0aWMgZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCl7aWYoIWdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzKXRocm93IG5ldyBFcnJvcigiWW91IHRyaWVkIHRvIGFjY2VzcyBkb210b29scyBzeW5jaHJvbm91c2x5IHRvbyBlYXJseSIpO3JldHVybiBnbG9iYWxUaGlzLmRlZXNEb21Ub29sc31lbGVtZW50cz17aGVhZEVsZW1lbnQ6bnVsbCxib2R5RWxlbWVudDpudWxsfTt3ZWJzZXR1cD1uZXcgRWQoe21ldGFPYmplY3Q6e3RpdGxlOiJsb2FkaW5nLi4uIn19KTtzbWFydHN0YXRlPW5ldyBZby5TbWFydHN0YXRlO2RvbVRvb2xzU3RhdGVQYXJ0PXRoaXMuc21hcnRzdGF0ZS5nZXRTdGF0ZVBhcnQoImRvbXRvb2xzIix7dmlydHVhbFZpZXdwb3J0OiJuYXRpdmUiLGp3dDpudWxsfSk7cm91dGVyPW5ldyBHby5TbWFydFJvdXRlcih7ZGVidWc6ITF9KTtjb252ZW5pZW5jZT17dHlwZWRyZXF1ZXN0OkYyLHNtYXJ0ZGVsYXk6ZnQsc21hcnRqc29uOm8xLHNtYXJ0dXJsOlpvfTtkZWVzQ29tbXM9bmV3IFk4LkRlZXNDb21tcztzY3JvbGxlcj1uZXcgSXEodGhpcyk7dGhlbWVNYW5hZ2VyPW5ldyBGcSh0aGlzKTtrZXlib2FyZD1udWxsO2RvbVRvb2xzUmVhZHk9VmUuZGVmZXIoKTtkb21SZWFkeT1WZS5kZWZlcigpO2dsb2JhbFN0eWxlc1JlYWR5PVZlLmRlZmVyKCk7Y29uc3RydWN0b3IoZSl7fXJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwPW5ldyBQZC5TdHJpbmdtYXA7cnVuT25jZVJlc3VsdE1hcD1uZXcgUGQuRmFzdE1hcDtydW5PbmNlRXJyb3JNYXA9bmV3IFBkLkZhc3RNYXA7YXN5bmMgcnVuT25jZShlLGEpe2xldCByPWAke2V9K3J1bm5pbmdDaGVja2A7aWYoIXRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuY2hlY2tTdHJpbmcoZSkpe3RoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuYWRkU3RyaW5nKGUpLHRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuYWRkU3RyaW5nKHIpO3RyeXtsZXQgaT1hd2FpdCBhKCk7dGhpcy5ydW5PbmNlUmVzdWx0TWFwLmFkZFRvTWFwKGUsaSl9Y2F0Y2goaSl7dGhpcy5ydW5PbmNlRXJyb3JNYXAuYWRkVG9NYXAoZSxpKX1maW5hbGx5e3RoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAucmVtb3ZlU3RyaW5nKHIpfX1yZXR1cm4gYXdhaXQgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5yZWdpc3RlclVudGlsVHJ1ZShpPT4haS5pbmNsdWRlcyhyKSwoKT0+e2xldCBpPXRoaXMucnVuT25jZUVycm9yTWFwLmdldEJ5S2V5KGUpO2lmKGkpdGhyb3cgaTtyZXR1cm4gdGhpcy5ydW5PbmNlUmVzdWx0TWFwLmdldEJ5S2V5KGUpfSl9YXN5bmMgc2V0R2xvYmFsU3R5bGVzKGUpe2F3YWl0IHRoaXMuZG9tUmVhZHkucHJvbWlzZTtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2EudHlwZT0idGV4dC9jc3MiLGEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpLHRoaXMuZWxlbWVudHMuaGVhZEVsZW1lbnQuYXBwZW5kQ2hpbGQoYSl9YXN5bmMgc2V0RXh0ZXJuYWxTY3JpcHQoZSl7YXdhaXQgdGhpcy5kb21SZWFkeS5wcm9taXNlO2xldCBhPVZlLmRlZmVyKCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtyLnNyYz1lLHIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXthLnJlc29sdmUoKX0pLChkb2N1bWVudC5oZWFkfHxkb2N1bWVudC5ib2R5KS5hcHBlbmQociksYXdhaXQgYS5wcm9taXNlfWFzeW5jIHNldEV4dGVybmFsQ3NzKGUpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTthLnJlbD0ic3R5bGVzaGVldCIsYS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixhLmhyZWY9ZSxkb2N1bWVudC5oZWFkLmFwcGVuZChhKX1hc3luYyBzZXRXZWJzaXRlSW5mbyhlKXthd2FpdCB0aGlzLndlYnNldHVwLnNldHVwKGUpLGF3YWl0IHRoaXMud2Vic2V0dXAucmVhZHlQcm9taXNlfX19KTt2YXIgQnEsUzJ0LEMydD1uKCgpPT57cTYoKTtncigpO0JxPSgoKT0+e2xldCB0PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTWFjIE9TIFgiKT09PS0xP3RlYGAuY3NzVGV4dDoiIjtyZXR1cm4gdGVgCiAgICAvKiB3aWR0aCAqLwogICAgOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgIHdpZHRoOiAwcHg7CiAgICB9CiAgICBib2R5IHsKICAgICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOwogICAgfQogIGAuY3NzVGV4dH0pKCksUzJ0PXRlYAogIC8qCiAgQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogJ01hdGVyaWFsIEljb25zJzsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvbWF0ZXJpYWxpY29ucy92NDIvZmxVaFJxNnR6WmNsUUVKLVZkZy1JdWlhRHNOY0loUTh0US53b2ZmMikKICAgICAgZm9ybWF0KCd3b2ZmMicpOwogIH0gKi8KCiAgLyogZ2xvYmFsIGJvZHkgc3R5bGVzICovCiAgYm9keSB7CiAgICBtYXJnaW46IDBweDsKICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgLyogc2Nyb2xsIGJhciBzdHlsZXMgKi8KICAke0J0KEJxKX0KYC5jc3NUZXh0fSk7dmFyIGMxPXt9O2V0KGMxLHtzZXR1cDooKT0+eDIxLHN0YXRpY1N0eWxlczooKT0+bTIxLHN0eWxlczooKT0+ZzIxfSk7dmFyIG0yMSxnMjEseDIxLEwydD1uKCgpPT57SDYoKTtxNigpO0MydCgpO2dyKCk7bTIxPXRlYAogICogewogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzLCBjb2xvciAwLjFzOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIDpob3N0IHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCBzYW5zLXNlcmlmOwogIH0KCiAgJHtCdChCcSl9CmAsZzIxPU1gCiAgPHN0eWxlPgogICAgKiB7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcywgY29sb3IgMC4xczsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7CiAgICB9CgogICAgJHtCcX0KICA8L3N0eWxlPgpgLHgyMT1hc3luYyh0LGU9e30pPT57bGV0IGE9YXdhaXQgQzIuc2V0dXBEb21Ub29scyhlKTtyZXR1cm4gYS5ydW5PbmNlKCJlbGVtZW50QmFzaWNTZXR1cCIsYXN5bmMoKT0+e2Euc2V0R2xvYmFsU3R5bGVzKFMydCl9KSxhfX0pO3ZhciBScT17fTtldChScSx7Y3NzR3JpZENvbHVtbnM6KCk9PmIyMX0pO3ZhciBiMjEsVDJ0PW4oKCk9PntiMjE9KHQsZSk9PntsZXQgYT0iIjtmb3IobGV0IHI9MDtyPHQ7cisrKWErPWAgY2FsYygoMTAwJS8ke3R9KSAtICgke2UqKHQtMSl9cHgvJHt0fSkpYDtyZXR1cm4gYX19KTt2YXIgQXQ9e307ZXQoQXQse1N3ZWV0U2Nyb2xsOigpPT53dGUuZGVmYXVsdCxzbWFydGRlbGF5OigpPT5mdCxzbWFydG1hcmtkb3duOigpPT5PNixzbWFydHByb21pc2U6KCk9PlZlLHNtYXJ0cm91dGVyOigpPT5HbyxzbWFydHJ4OigpPT5DdCxzbWFydHN0YXRlOigpPT5ZbyxzbWFydHN0cmluZzooKT0+TGEsc21hcnR1cmw6KCk9PlpvLHR5cGVkcmVxdWVzdDooKT0+RjJ9KTt2YXIgd3RlLF8ydD1uKCgpPT57aWkoKTtTZWUoKTtwMigpO3d0ZT1OMihwdGUoKSwxKTtGZWUoKTtFZWUoKTtWYSgpO1A4KCk7QmVlKCk7ajgoKX0pO3ZhciBzdD17fTtldChzdCx7RG9tVG9vbHM6KCk9PkMyLFR5cGVkUmVxdWVzdDooKT0+VTgsYnJlYWtwb2ludHM6KCk9PlZyLGNzczooKT0+UnEsZWxlbWVudEJhc2ljOigpPT5jMSxwbHVnaW5zOigpPT5BdH0pO3ZhciBTdD1uKCgpPT57VkllKCk7TDJ0KCk7dnRlKCk7VDJ0KCk7cTYoKTtqOCgpO0FxKCk7XzJ0KCl9KTt2YXIgTXRlLEtvLHp0ZT1uKCgpPT57TXRlPU4yKGxGKCksMSk7VmEoKTtncigpO3FJZSgpO1N0KCk7S289e2Nzczp0ZSx1bnNhZmVDU1M6QnQsTGl0RWxlbWVudDp0aSxwcm9wZXJ0eTpEfX0pO3ZhciBIcSwkMnQ9bigoKT0+e2dyKCk7enRlKCk7U3QoKTtIcT1jbGFzcyB0e3N0YXRpYyBpbnN0YW5jZT1udWxsO3N0YXRpYyBnZXRTaW5nbGV0b24oKXtyZXR1cm4gdC5pbnN0YW5jZXx8KHQuaW5zdGFuY2U9bmV3IHQpLHQuaW5zdGFuY2V9ZG9tdG9vbHNQcm9taXNlPUMyLnNldHVwRG9tVG9vbHMoKTtnb0JyaWdodD0hMTtiZFZhclRyaXBsZXRTdG9yZT1bXTtjb25zdHJ1Y3Rvcigpe3RoaXMuZG9tdG9vbHNQcm9taXNlLnRoZW4oYXN5bmMgZT0+e2UudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoYXN5bmMgYT0+e3RoaXMuZ29CcmlnaHQ9YSxhd2FpdCBlLmRvbVJlYWR5LnByb21pc2U7Zm9yKGxldCByIG9mIHRoaXMuYmRWYXJUcmlwbGV0U3RvcmUpZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eShyLmNzc1Zhck5hbWUsdGhpcy5nb0JyaWdodD9yLmJyaWdodFZhbHVlOnIuZGFya1ZhbHVlKX0pfSl9Z2V0IGRlZmF1bHRTdHlsZXMoKXtyZXR1cm4gYzEuc3RhdGljU3R5bGVzfWNzc0ZvckRlc2t0b3AoZSl7cmV0dXJuIEJ0KFZyLmNzc0ZvckRlc2t0b3AoZSkpfWNzc0Zvck5vdGVib29rKGUpe3JldHVybiBCdChWci5jc3NGb3JOb3RlYm9vayhlKSl9Y3NzRm9yVGFibGV0KGUpe3JldHVybiBCdChWci5jc3NGb3JUYWJsZXQoZSkpfWNzc0ZvclBoYWJsZXQoZSl7cmV0dXJuIEJ0KFZyLmNzc0ZvclBoYWJsZXQoZSkpfWNzc0ZvclBob25lKGUpe3JldHVybiBCdChWci5jc3NGb3JQaG9uZShlKSl9YmRUaGVtZShlLGEpe2xldCByLGk7QzIuZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCk/aT1DMi5nZXRHbG9iYWxEb21Ub29sc1N5bmMoKS50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuP2U6YTppPWE7bGV0IG89dGhpcy5iZFZhclRyaXBsZXRTdG9yZS5maW5kKHM9PnMuZGFya1ZhbHVlPT09YSYmcy5icmlnaHRWYWx1ZT09PWUpO2lmKG8pcj1vLmNzc1Zhck5hbWU7ZWxzZXtsZXQgcz17Y3NzVmFyTmFtZTpgLS0ke010ZS51bmkoKX1gLGJyaWdodFZhbHVlOmUsZGFya1ZhbHVlOmF9O3RoaXMuYmRWYXJUcmlwbGV0U3RvcmUucHVzaChzKSx0aGlzLmRvbXRvb2xzUHJvbWlzZS50aGVuKGFzeW5jIGw9Pnthd2FpdCBsLmRvbVJlYWR5LnByb21pc2UsZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eShzLmNzc1Zhck5hbWUsaSl9KSxyPXMuY3NzVmFyTmFtZX1yZXR1cm4gS28udW5zYWZlQ1NTKGB2YXIoJHtyfSwgJHtpfSlgKX1jc3NHcmlkQ29sdW1ucz0oZSxhKT0+e2xldCByPSIiO2ZvcihsZXQgaT0wO2k8ZTtpKyspcis9YCBjYWxjKCgxMDAlLyR7ZX0pIC0gKCR7YSooZS0xKX1weC8ke2V9KSlgO3JldHVybiBLby51bnNhZmVDU1Mocil9fX0pO3ZhciBrdGUsdjIxLEUydCx5MjEsRDJ0LHFxLEpvLHcyMSxNMjEsTjJ0PW4oKCk9PntCYSgpO2t0ZT1TeW1ib2wuZm9yKCIiKSx2MjE9dD0+e2lmKHQ/LnI9PT1rdGUpcmV0dXJuIHQ/Ll8kbGl0U3RhdGljJH0sRTJ0PXQ9Pih7XyRsaXRTdGF0aWMkOnQscjprdGV9KSx5MjE9KHQsLi4uZSk9Pih7XyRsaXRTdGF0aWMkOmUucmVkdWNlKChhLHIsaSk9PmErKG89PntpZihvLl8kbGl0U3RhdGljJCE9PXZvaWQgMClyZXR1cm4gby5fJGxpdFN0YXRpYyQ7dGhyb3cgRXJyb3IoYFZhbHVlIHBhc3NlZCB0byAnbGl0ZXJhbCcgZnVuY3Rpb24gbXVzdCBiZSBhICdsaXRlcmFsJyByZXN1bHQ6ICR7b30uIFVzZSAndW5zYWZlU3RhdGljJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0CiAgICAgICAgICAgIHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS5gKX0pKHIpK3RbaSsxXSx0WzBdKSxyOmt0ZX0pLEQydD1uZXcgTWFwLHFxPXQ9PihlLC4uLmEpPT57bGV0IHI9YS5sZW5ndGgsaSxvLHM9W10sbD1bXSxmLGM9MCx1PSExO2Zvcig7YzxyOyl7Zm9yKGY9ZVtjXTtjPHImJihvPWFbY10sKGk9djIxKG8pKSE9PXZvaWQgMCk7KWYrPWkrZVsrK2NdLHU9ITA7YyE9PXImJmwucHVzaChvKSxzLnB1c2goZiksYysrfWlmKGM9PT1yJiZzLnB1c2goZVtyXSksdSl7bGV0IGQ9cy5qb2luKCIkJGxpdCQkIik7KGU9RDJ0LmdldChkKSk9PT12b2lkIDAmJihzLnJhdz1zLEQydC5zZXQoZCxlPXMpKSxhPWx9cmV0dXJuIHQoZSwuLi5hKX0sSm89cXEoTSksdzIxPXFxKFJqKSxNMjE9cXEoSGopfSk7dmFyIFAydD1uKCgpPT57TjJ0KCl9KTt2YXIgVXIsRTEsJGEsVGk9bigoKT0+e1VyPXtBVFRSSUJVVEU6MSxDSElMRDoyLFBST1BFUlRZOjMsQk9PTEVBTl9BVFRSSUJVVEU6NCxFVkVOVDo1LEVMRU1FTlQ6Nn0sRTE9dD0+KC4uLmUpPT4oe18kbGl0RGlyZWN0aXZlJDp0LHZhbHVlczplfSksJGE9Y2xhc3N7Y29uc3RydWN0b3IoZSl7fWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQVQoZSxhLHIpe3RoaXMuXyRDdD1lLHRoaXMuXyRBTT1hLHRoaXMuXyRDaT1yfV8kQVMoZSxhKXtyZXR1cm4gdGhpcy51cGRhdGUoZSxhKX11cGRhdGUoZSxhKXtyZXR1cm4gdGhpcy5yZW5kZXIoLi4uYSl9fX0pO3ZhciBWNixWcSxJMnQ9bigoKT0+e0JhKCk7VGkoKTtWNj1jbGFzcyBleHRlbmRzICRhe2NvbnN0cnVjdG9yKGUpe2lmKHN1cGVyKGUpLHRoaXMuaXQ9aDEsZS50eXBlIT09VXIuQ0hJTEQpdGhyb3cgRXJyb3IodGhpcy5jb25zdHJ1Y3Rvci5kaXJlY3RpdmVOYW1lKyIoKSBjYW4gb25seSBiZSB1c2VkIGluIGNoaWxkIGJpbmRpbmdzIil9cmVuZGVyKGUpe2lmKGU9PT1oMXx8ZT09bnVsbClyZXR1cm4gdGhpcy5fdD12b2lkIDAsdGhpcy5pdD1lO2lmKGU9PT1sMSlyZXR1cm4gZTtpZih0eXBlb2YgZSE9InN0cmluZyIpdGhyb3cgRXJyb3IodGhpcy5jb25zdHJ1Y3Rvci5kaXJlY3RpdmVOYW1lKyIoKSBjYWxsZWQgd2l0aCBhIG5vbi1zdHJpbmcgdmFsdWUiKTtpZihlPT09dGhpcy5pdClyZXR1cm4gdGhpcy5fdDt0aGlzLml0PWU7bGV0IGE9W2VdO3JldHVybiBhLnJhdz1hLHRoaXMuX3Q9e18kbGl0VHlwZSQ6dGhpcy5jb25zdHJ1Y3Rvci5yZXN1bHRUeXBlLHN0cmluZ3M6YSx2YWx1ZXM6W119fX07VjYuZGlyZWN0aXZlTmFtZT0idW5zYWZlSFRNTCIsVjYucmVzdWx0VHlwZT0xO1ZxPUUxKFY2KX0pO3ZhciBGMnQ9bigoKT0+e0kydCgpfSk7dmFyIGNlLFN0ZT1uKCgpPT57Y2U9dD0+KGUsYSk9PnthIT09dm9pZCAwP2EuYWRkSW5pdGlhbGl6ZXIoKCk9PntjdXN0b21FbGVtZW50cy5kZWZpbmUodCxlKX0pOmN1c3RvbUVsZW1lbnRzLmRlZmluZSh0LGUpfX0pO3ZhciBPMnQ9bigoKT0+e1N0ZSgpfSk7ZnVuY3Rpb24gbGUodCl7cmV0dXJuIEQoey4uLnQsc3RhdGU6ITAsYXR0cmlidXRlOiExfSl9dmFyIEIydD1uKCgpPT57ck8oKTt9KTtmdW5jdGlvbiB6MjEodCl7cmV0dXJuKGUsYSk9PntsZXQgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOmVbYV07T2JqZWN0LmFzc2lnbihyLHQpfX12YXIgUjJ0PW4oKCk9Pnt9KTt2YXIgRGEsVTY9bigoKT0+e0RhPSh0LGUsYSk9PihhLmNvbmZpZ3VyYWJsZT0hMCxhLmVudW1lcmFibGU9ITAsUmVmbGVjdC5kZWNvcmF0ZSYmdHlwZW9mIGUhPSJvYmplY3QiJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLGEpLGEpfSk7ZnVuY3Rpb24gSDJ0KHQsZSl7cmV0dXJuKGEscixpKT0+e2xldCBvPXM9PnMucmVuZGVyUm9vdD8ucXVlcnlTZWxlY3Rvcih0KT8/bnVsbDtpZihlKXtsZXR7Z2V0OnMsc2V0Omx9PXR5cGVvZiByPT0ib2JqZWN0Ij9hOmk/PygoKT0+e2xldCBmPVN5bWJvbCgpO3JldHVybntnZXQoKXtyZXR1cm4gdGhpc1tmXX0sc2V0KGMpe3RoaXNbZl09Y319fSkoKTtyZXR1cm4gRGEoYSxyLHtnZXQoKXtsZXQgZj1zLmNhbGwodGhpcyk7cmV0dXJuIGY9PT12b2lkIDAmJihmPW8odGhpcyksKGYhPT1udWxsfHx0aGlzLmhhc1VwZGF0ZWQpJiZsLmNhbGwodGhpcyxmKSksZn19KX1yZXR1cm4gRGEoYSxyLHtnZXQoKXtyZXR1cm4gbyh0aGlzKX19KX19dmFyIHEydD1uKCgpPT57VTYoKTt9KTtmdW5jdGlvbiBWMnQodCl7cmV0dXJuKGUsYSk9PkRhKGUsYSx7Z2V0KCl7cmV0dXJuKHRoaXMucmVuZGVyUm9vdD8/KGsyMT8/PWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkpLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSl9dmFyIGsyMSxVMnQ9bigoKT0+e1U2KCk7fSk7ZnVuY3Rpb24gajJ0KHQpe3JldHVybihlLGEpPT5EYShlLGEse2FzeW5jIGdldCgpe3JldHVybiBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLHRoaXMucmVuZGVyUm9vdD8ucXVlcnlTZWxlY3Rvcih0KT8/bnVsbH19KX12YXIgVzJ0PW4oKCk9PntVNigpO30pO2Z1bmN0aW9uIFMyMSh0KXtyZXR1cm4oZSxhKT0+e2xldHtzbG90OnIsc2VsZWN0b3I6aX09dD8/e30sbz0ic2xvdCIrKHI/YFtuYW1lPSR7cn1dYDoiOm5vdChbbmFtZV0pIik7cmV0dXJuIERhKGUsYSx7Z2V0KCl7bGV0IHM9dGhpcy5yZW5kZXJSb290Py5xdWVyeVNlbGVjdG9yKG8pLGw9cz8uYXNzaWduZWRFbGVtZW50cyh0KT8/W107cmV0dXJuIGk9PT12b2lkIDA/bDpsLmZpbHRlcihmPT5mLm1hdGNoZXMoaSkpfX0pfX12YXIgRzJ0PW4oKCk9PntVNigpO30pO2Z1bmN0aW9uIEMyMSh0KXtyZXR1cm4oZSxhKT0+e2xldHtzbG90OnJ9PXQ/P3t9LGk9InNsb3QiKyhyP2BbbmFtZT0ke3J9XWA6Ijpub3QoW25hbWVdKSIpO3JldHVybiBEYShlLGEse2dldCgpe3JldHVybiB0aGlzLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IoaSk/LmFzc2lnbmVkTm9kZXModCk/P1tdfX0pfX12YXIgWTJ0PW4oKCk9PntVNigpO30pO3ZhciBaMnQ9bigoKT0+e1N0ZSgpO3JPKCk7QjJ0KCk7UjJ0KCk7cTJ0KCk7VTJ0KCk7VzJ0KCk7RzJ0KCk7WTJ0KCl9KTt2YXIgWDJ0LFVxLHBlLFEydD1uKCgpPT57enRlKCk7WDJ0PWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sVXE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LHBlPSgoKT0+e2xldCB0PUtvLkxpdEVsZW1lbnQsZSxhPVtdLHI9W10saSxvPVtdLHM9W107cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtzdGF0aWN7bGV0IGY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUodFtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7ZT1bS28ucHJvcGVydHkoe3R5cGU6Qm9vbGVhbn0pXSxpPVtLby5wcm9wZXJ0eSgpXSxYMnQodGhpcyxudWxsLGUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJnb0JyaWdodCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Yz0+ImdvQnJpZ2h0ImluIGMsZ2V0OmM9PmMuZ29CcmlnaHQsc2V0OihjLHUpPT57Yy5nb0JyaWdodD11fX0sbWV0YWRhdGE6Zn0sYSxyKSxYMnQodGhpcyxudWxsLGkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkb210b29scyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Yz0+ImRvbXRvb2xzImluIGMsZ2V0OmM9PmMuZG9tdG9vbHMsc2V0OihjLHUpPT57Yy5kb210b29scz11fX0sbWV0YWRhdGE6Zn0sbyxzKSxmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ9KX0jZT1VcSh0aGlzLGEsITEpO2dldCBnb0JyaWdodCgpe3JldHVybiB0aGlzLiNlfXNldCBnb0JyaWdodChmKXt0aGlzLiNlPWZ9ZG9tdG9vbHNQcm9taXNlPVVxKHRoaXMscik7I3Q9VXEodGhpcyxvLHZvaWQgMCk7Z2V0IGRvbXRvb2xzKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGRvbXRvb2xzKGYpe3RoaXMuI3Q9Zn1yeFN1YnNjcmlwdGlvbnM9KFVxKHRoaXMscyksW10pO3RoZW1lU3Vic2NyaXB0aW9uO2VsZW1lbnREb21SZWFkeURlZmVycmVkPXN0LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCk7ZWxlbWVudERvbVJlYWR5PXRoaXMuZWxlbWVudERvbVJlYWR5RGVmZXJyZWQucHJvbWlzZTtjb25zdHJ1Y3RvcihmPXt9KXtzdXBlcigpLHRoaXMuZG9tdG9vbHNQcm9taXNlPXN0LmVsZW1lbnRCYXNpYy5zZXR1cCh0aGlzLGYpLHRoaXMuZG9tdG9vbHNQcm9taXNlLnRoZW4oYz0+e3RoaXMuZG9tdG9vbHM9Y30pfWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtsZXQgZj1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTt0aGlzLnRoZW1lU3Vic2NyaXB0aW9uPWYudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoYz0+e3RoaXMuZ29CcmlnaHQ9Yyx0aGlzLnRoZW1lQ2hhbmdlZCYmdGhpcy50aGVtZUNoYW5nZWQoYyl9KSx0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudGhlbWVTdWJzY3JpcHRpb24pO2ZvcihsZXQgYyBvZiB0aGlzLnN0YXJ0dXBGdW5jdGlvbnMpYXdhaXQgYygpO3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRlZXNFbGVtZW50Q29ubmVjdGVkIikpfWZpcnN0VXBkYXRlZChmKXtzdXBlci5maXJzdFVwZGF0ZWQoZiksdGhpcy5lbGVtZW50RG9tUmVhZHlEZWZlcnJlZC5yZXNvbHZlKCl9c3RhcnR1cEZ1bmN0aW9ucz1bXTtyZWdpc3RlclN0YXJ0dXBGdW5jdGlvbihmKXt0aGlzLnN0YXJ0dXBGdW5jdGlvbnMucHVzaChmKX1nYXJiYWdlRnVuY3Rpb25zPVtdO3JlZ2lzdGVyR2FyYmFnZUZ1bmN0aW9uKGYpe3RoaXMuZ2FyYmFnZUZ1bmN0aW9ucy5wdXNoKGYpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2Usc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtmb3IobGV0IGYgb2YgdGhpcy5yeFN1YnNjcmlwdGlvbnMpZi51bnN1YnNjcmliZSgpO2ZvcihsZXQgZiBvZiB0aGlzLmdhcmJhZ2VGdW5jdGlvbnMpYXdhaXQgZigpO3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRlZXNFbGVtZW50RGlzY29ubmVjdGVkIikpfX19KSgpfSk7dmFyIEwyMSxLMnQsQ3RlLFQyMSxfMjEsQTIxLCQyMSxEMjEsTHRlLEoydCxfaSxRYSxFMjEsSWQsVHRlLEZkLF90ZSxqNj1uKCgpPT57QmEoKTsoe0k6TDIxfT1xaiksSzJ0PXQ9PnQsQ3RlPXQ9PnQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCImJnR5cGVvZiB0IT0iZnVuY3Rpb24iLFQyMT17SFRNTDoxLFNWRzoyLE1BVEhNTDozfSxfMjE9KHQsZSk9PmU9PT12b2lkIDA/dD8uXyRsaXRUeXBlJCE9PXZvaWQgMDp0Py5fJGxpdFR5cGUkPT09ZSxBMjE9dD0+dD8uXyRsaXRUeXBlJD8uaCE9bnVsbCwkMjE9dD0+dD8uXyRsaXREaXJlY3RpdmUkIT09dm9pZCAwLEQyMT10PT50Py5fJGxpdERpcmVjdGl2ZSQsTHRlPXQ9PnQuc3RyaW5ncz09PXZvaWQgMCxKMnQ9KCk9PmRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpLF9pPSh0LGUsYSk9PntsZXQgcj10Ll8kQUEucGFyZW50Tm9kZSxpPWU9PT12b2lkIDA/dC5fJEFCOmUuXyRBQTtpZihhPT09dm9pZCAwKXtsZXQgbz1yLmluc2VydEJlZm9yZShKMnQoKSxpKSxzPXIuaW5zZXJ0QmVmb3JlKEoydCgpLGkpO2E9bmV3IEwyMShvLHMsdCx0Lm9wdGlvbnMpfWVsc2V7bGV0IG89YS5fJEFCLm5leHRTaWJsaW5nLHM9YS5fJEFNLGw9cyE9PXQ7aWYobCl7bGV0IGY7YS5fJEFRPy4odCksYS5fJEFNPXQsYS5fJEFQIT09dm9pZCAwJiYoZj10Ll8kQVUpIT09cy5fJEFVJiZhLl8kQVAoZil9aWYobyE9PWl8fGwpe2xldCBmPWEuXyRBQTtmb3IoO2YhPT1vOyl7bGV0IGM9SzJ0KGYpLm5leHRTaWJsaW5nO0sydChyKS5pbnNlcnRCZWZvcmUoZixpKSxmPWN9fX1yZXR1cm4gYX0sUWE9KHQsZSxhPXQpPT4odC5fJEFJKGUsYSksdCksRTIxPXt9LElkPSh0LGU9RTIxKT0+dC5fJEFIPWUsVHRlPXQ9PnQuXyRBSCxGZD10PT57dC5fJEFSKCksdC5fJEFBLnJlbW92ZSgpfSxfdGU9dD0+e3QuXyRBUigpfX0pO2Z1bmN0aW9uIE4yMSh0KXt0aGlzLl8kQU4hPT12b2lkIDA/KGpxKHRoaXMpLHRoaXMuXyRBTT10LGVhdCh0aGlzKSk6dGhpcy5fJEFNPXR9ZnVuY3Rpb24gUDIxKHQsZT0hMSxhPTApe2xldCByPXRoaXMuXyRBSCxpPXRoaXMuXyRBTjtpZihpIT09dm9pZCAwJiZpLnNpemUhPT0wKWlmKGUpaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IG89YTtvPHIubGVuZ3RoO28rKylPZChyW29dLCExKSxqcShyW29dKTtlbHNlIHIhPW51bGwmJihPZChyLCExKSxqcShyKSk7ZWxzZSBPZCh0aGlzLHQpfXZhciBPZCxqcSxlYXQsSTIxLGRhLFdxPW4oKCk9PntqNigpO1RpKCk7VGkoKTtPZD0odCxlKT0+e2xldCBhPXQuXyRBTjtpZihhPT09dm9pZCAwKXJldHVybiExO2ZvcihsZXQgciBvZiBhKXIuXyRBTz8uKGUsITEpLE9kKHIsZSk7cmV0dXJuITB9LGpxPXQ9PntsZXQgZSxhO2Rve2lmKChlPXQuXyRBTSk9PT12b2lkIDApYnJlYWs7YT1lLl8kQU4sYS5kZWxldGUodCksdD1lfXdoaWxlKGE/LnNpemU9PT0wKX0sZWF0PXQ9Pntmb3IobGV0IGU7ZT10Ll8kQU07dD1lKXtsZXQgYT1lLl8kQU47aWYoYT09PXZvaWQgMCllLl8kQU49YT1uZXcgU2V0O2Vsc2UgaWYoYS5oYXModCkpYnJlYWs7YS5hZGQodCksSTIxKGUpfX07STIxPXQ9Pnt0LnR5cGU9PVVyLkNISUxEJiYodC5fJEFQPz89UDIxLHQuXyRBUT8/PU4yMSl9LGRhPWNsYXNzIGV4dGVuZHMgJGF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuXyRBTj12b2lkIDB9XyRBVChlLGEscil7c3VwZXIuXyRBVChlLGEsciksZWF0KHRoaXMpLHRoaXMuaXNDb25uZWN0ZWQ9ZS5fJEFVfV8kQU8oZSxhPSEwKXtlIT09dGhpcy5pc0Nvbm5lY3RlZCYmKHRoaXMuaXNDb25uZWN0ZWQ9ZSxlP3RoaXMucmVjb25uZWN0ZWQ/LigpOnRoaXMuZGlzY29ubmVjdGVkPy4oKSksYSYmKE9kKHRoaXMsZSksanEodGhpcykpfXNldFZhbHVlKGUpe2lmKEx0ZSh0aGlzLl8kQ3QpKXRoaXMuXyRDdC5fJEFJKGUsdGhpcyk7ZWxzZXtsZXQgYT1bLi4udGhpcy5fJEN0Ll8kQUhdO2FbdGhpcy5fJENpXT1lLHRoaXMuXyRDdC5fJEFJKGEsdGhpcywwKX19ZGlzY29ubmVjdGVkKCl7fXJlY29ubmVjdGVkKCl7fX19KTt2YXIgR3E9bigoKT0+e1dxKCl9KTt2YXIgQXRlLHRhdCxGMjEsYWF0PW4oKCk9PntncigpO0dxKCk7QXRlPWNsYXNzIGV4dGVuZHMgZGF7cHJvbWlzZTtoYXNQcm9taXNlU2V0dGxlZD0hMTtyZW5kZXIoZSl7cmV0dXJuIHRoaXMucHJvbWlzZSE9PWUmJih0aGlzLnByb21pc2U9ZSx0aGlzLmlzQ29ubmVjdGVkJiZ0aGlzLmhhbmRsZVByb21pc2UoZSkpLGwxfWhhbmRsZVByb21pc2UoZSl7dGhpcy5oYXNQcm9taXNlU2V0dGxlZD0hMSxlLnRoZW4oYT0+e3RoaXMucHJvbWlzZT09PWUmJiF0aGlzLmhhc1Byb21pc2VTZXR0bGVkJiYodGhpcy5zZXRWYWx1ZShhKSx0aGlzLmhhc1Byb21pc2VTZXR0bGVkPSEwKX0pLmNhdGNoKGE9Pnt0aGlzLnByb21pc2U9PT1lJiYhdGhpcy5oYXNQcm9taXNlU2V0dGxlZCYmKHRoaXMuc2V0VmFsdWUoYSksdGhpcy5oYXNQcm9taXNlU2V0dGxlZD0hMCl9KX1kaXNjb25uZWN0ZWQoKXt0aGlzLmhhc1Byb21pc2VTZXR0bGVkPSEwfXJlY29ubmVjdGVkKCl7dGhpcy5oYXNQcm9taXNlU2V0dGxlZHx8dGhpcy5oYW5kbGVQcm9taXNlKHRoaXMucHJvbWlzZSl9fSx0YXQ9RTEoQXRlKSxGMjE9dD0+dGF0KHQoKSl9KTt2YXIgJHRlLE8yMSxyYXQ9bigoKT0+e2dyKCk7R3EoKTtWYSgpOyR0ZT1jbGFzcyBleHRlbmRzIGRhe29ic2VydmFibGU7c3ViPW51bGw7cmVuZGVyKGUpe3JldHVybiB0aGlzLm9ic2VydmFibGUhPT1lJiYodGhpcy5zdWI/LnVuc3Vic2NyaWJlKCksdGhpcy5vYnNlcnZhYmxlPWUsdGhpcy5pc0Nvbm5lY3RlZCYmdGhpcy5zdWJzY3JpYmUoZSkpLGwxfXN1YnNjcmliZShlKXt0aGlzLnN1Yj1lLnN1YnNjcmliZShhPT57dGhpcy5zZXRWYWx1ZShhKX0pfWRpc2Nvbm5lY3RlZCgpe3RoaXMuc3ViPy51bnN1YnNjcmliZSgpfXJlY29ubmVjdGVkKCl7dGhpcy5zdWJzY3JpYmUodGhpcy5vYnNlcnZhYmxlKX19LE8yMT1FMSgkdGUpfSk7dmFyIER0ZSxpYXQsb2F0PW4oKCk9PntncigpO0dxKCk7VmEoKTtEdGU9Y2xhc3MgZXh0ZW5kcyBkYXtvYnNlcnZhYmxlO3RlbXBsYXRlRm47c3ViPW51bGw7cmVuZGVyKGUsYSl7cmV0dXJuKHRoaXMub2JzZXJ2YWJsZSE9PWV8fHRoaXMudGVtcGxhdGVGbiE9PWEpJiYodGhpcy5zdWI/LnVuc3Vic2NyaWJlKCksdGhpcy5vYnNlcnZhYmxlPWUsdGhpcy50ZW1wbGF0ZUZuPWEsdGhpcy5pc0Nvbm5lY3RlZCYmdGhpcy5zdGFydFN1YnNjcmlwdGlvbigpKSxsMX1zdGFydFN1YnNjcmlwdGlvbigpe3RoaXMuc3ViPXRoaXMub2JzZXJ2YWJsZS5zdWJzY3JpYmUoZT0+e2xldCBhPXRoaXMudGVtcGxhdGVGbihlKTt0aGlzLnNldFZhbHVlKGEpfSl9ZGlzY29ubmVjdGVkKCl7dGhpcy5zdWI/LnVuc3Vic2NyaWJlKCl9cmVjb25uZWN0ZWQoKXt0aGlzLnN0YXJ0U3Vic2NyaXB0aW9uKCl9fSxpYXQ9RTEoRHRlKX0pO3ZhciBFdGUsVG4sX24sTnRlPW4oKCk9PntFdGU9YXN5bmModCxlKT0+e2ZvciBhd2FpdChsZXQgYSBvZiB0KWlmKGF3YWl0IGUoYSk9PT0hMSlyZXR1cm59LFRuPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuRz1lfWRpc2Nvbm5lY3QoKXt0aGlzLkc9dm9pZCAwfXJlY29ubmVjdChlKXt0aGlzLkc9ZX1kZXJlZigpe3JldHVybiB0aGlzLkd9fSxfbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuWT12b2lkIDAsdGhpcy5aPXZvaWQgMH1nZXQoKXtyZXR1cm4gdGhpcy5ZfXBhdXNlKCl7dGhpcy5ZPz89bmV3IFByb21pc2UoZT0+dGhpcy5aPWUpfXJlc3VtZSgpe3RoaXMuWj8uKCksdGhpcy5ZPXRoaXMuWj12b2lkIDB9fX0pO3ZhciBzYXQsbmF0LFlxLFB0ZSxsYXQ9bigoKT0+e0JhKCk7ajYoKTtXcSgpO050ZSgpO1RpKCk7c2F0PXQ9PiFDdGUodCkmJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiIsbmF0PTEwNzM3NDE4MjMsWXE9Y2xhc3MgZXh0ZW5kcyBkYXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fJEN3dD1uYXQsdGhpcy5fJENidD1bXSx0aGlzLl8kQ0s9bmV3IFRuKHRoaXMpLHRoaXMuXyRDWD1uZXcgX259cmVuZGVyKC4uLmUpe3JldHVybiBlLmZpbmQoYT0+IXNhdChhKSk/P2wxfXVwZGF0ZShlLGEpe2xldCByPXRoaXMuXyRDYnQsaT1yLmxlbmd0aDt0aGlzLl8kQ2J0PWE7bGV0IG89dGhpcy5fJENLLHM9dGhpcy5fJENYO3RoaXMuaXNDb25uZWN0ZWR8fHRoaXMuZGlzY29ubmVjdGVkKCk7Zm9yKGxldCBsPTA7bDxhLmxlbmd0aCYmIShsPnRoaXMuXyRDd3QpO2wrKyl7bGV0IGY9YVtsXTtpZighc2F0KGYpKXJldHVybiB0aGlzLl8kQ3d0PWwsZjtsPGkmJmY9PT1yW2xdfHwodGhpcy5fJEN3dD1uYXQsaT0wLFByb21pc2UucmVzb2x2ZShmKS50aGVuKGFzeW5jIGM9Pntmb3IoO3MuZ2V0KCk7KWF3YWl0IHMuZ2V0KCk7bGV0IHU9by5kZXJlZigpO2lmKHUhPT12b2lkIDApe2xldCBkPXUuXyRDYnQuaW5kZXhPZihmKTtkPi0xJiZkPHUuXyRDd3QmJih1Ll8kQ3d0PWQsdS5zZXRWYWx1ZShjKSl9fSkpfXJldHVybiBsMX1kaXNjb25uZWN0ZWQoKXt0aGlzLl8kQ0suZGlzY29ubmVjdCgpLHRoaXMuXyRDWC5wYXVzZSgpfXJlY29ubmVjdGVkKCl7dGhpcy5fJENLLnJlY29ubmVjdCh0aGlzKSx0aGlzLl8kQ1gucmVzdW1lKCl9fSxQdGU9RTEoWXEpfSk7dmFyIGNhdD1uKCgpPT57bGF0KCl9KTt2YXIgVzYsQjIxLGRhdD1uKCgpPT57QmEoKTtXcSgpO050ZSgpO1RpKCk7VzY9Y2xhc3MgZXh0ZW5kcyBkYXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fJENLPW5ldyBUbih0aGlzKSx0aGlzLl8kQ1g9bmV3IF9ufXJlbmRlcihlLGEpe3JldHVybiBsMX11cGRhdGUoZSxbYSxyXSl7aWYodGhpcy5pc0Nvbm5lY3RlZHx8dGhpcy5kaXNjb25uZWN0ZWQoKSxhPT09dGhpcy5fJENKKXJldHVybiBsMTt0aGlzLl8kQ0o9YTtsZXQgaT0wLHtfJENLOm8sXyRDWDpzfT10aGlzO3JldHVybiBFdGUoYSxhc3luYyBsPT57Zm9yKDtzLmdldCgpOylhd2FpdCBzLmdldCgpO2xldCBmPW8uZGVyZWYoKTtpZihmIT09dm9pZCAwKXtpZihmLl8kQ0ohPT1hKXJldHVybiExO3IhPT12b2lkIDAmJihsPXIobCxpKSksZi5jb21taXRWYWx1ZShsLGkpLGkrK31yZXR1cm4hMH0pLGwxfWNvbW1pdFZhbHVlKGUsYSl7dGhpcy5zZXRWYWx1ZShlKX1kaXNjb25uZWN0ZWQoKXt0aGlzLl8kQ0suZGlzY29ubmVjdCgpLHRoaXMuXyRDWC5wYXVzZSgpfXJlY29ubmVjdGVkKCl7dGhpcy5fJENLLnJlY29ubmVjdCh0aGlzKSx0aGlzLl8kQ1gucmVzdW1lKCl9fSxCMjE9RTEoVzYpfSk7dmFyIEl0ZSxmYXQ9bigoKT0+e1RpKCk7ZGF0KCk7ajYoKTtJdGU9RTEoY2xhc3MgZXh0ZW5kcyBXNntjb25zdHJ1Y3Rvcih0KXtpZihzdXBlcih0KSx0LnR5cGUhPT1Vci5DSElMRCl0aHJvdyBFcnJvcigiYXN5bmNBcHBlbmQgY2FuIG9ubHkgYmUgdXNlZCBpbiBjaGlsZCBleHByZXNzaW9ucyIpfXVwZGF0ZSh0LGUpe3JldHVybiB0aGlzLl8kQ3R0PXQsc3VwZXIudXBkYXRlKHQsZSl9Y29tbWl0VmFsdWUodCxlKXtlPT09MCYmX3RlKHRoaXMuXyRDdHQpO2xldCBhPV9pKHRoaXMuXyRDdHQpO1FhKGEsdCl9fSl9KTt2YXIgdWF0PW4oKCk9PntmYXQoKX0pO3ZhciBGdGUscGF0PW4oKCk9PntCYSgpO1RpKCk7ajYoKTtGdGU9RTEoY2xhc3MgZXh0ZW5kcyAkYXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5rZXk9aDF9cmVuZGVyKHQsZSl7cmV0dXJuIHRoaXMua2V5PXQsZX11cGRhdGUodCxbZSxhXSl7cmV0dXJuIGUhPT10aGlzLmtleSYmKElkKHQpLHRoaXMua2V5PWUpLGF9fSl9KTt2YXIgaGF0PW4oKCk9PntwYXQoKX0pO3ZhciBtYXQsT3RlLGdhdD1uKCgpPT57QmEoKTtUaSgpO2o2KCk7bWF0PSh0LGUsYSk9PntsZXQgcj1uZXcgTWFwO2ZvcihsZXQgaT1lO2k8PWE7aSsrKXIuc2V0KHRbaV0saSk7cmV0dXJuIHJ9LE90ZT1FMShjbGFzcyBleHRlbmRzICRhe2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKHQpLHQudHlwZSE9PVVyLkNISUxEKXRocm93IEVycm9yKCJyZXBlYXQoKSBjYW4gb25seSBiZSB1c2VkIGluIHRleHQgZXhwcmVzc2lvbnMiKX1kdCh0LGUsYSl7bGV0IHI7YT09PXZvaWQgMD9hPWU6ZSE9PXZvaWQgMCYmKHI9ZSk7bGV0IGk9W10sbz1bXSxzPTA7Zm9yKGxldCBsIG9mIHQpaVtzXT1yP3IobCxzKTpzLG9bc109YShsLHMpLHMrKztyZXR1cm57dmFsdWVzOm8sa2V5czppfX1yZW5kZXIodCxlLGEpe3JldHVybiB0aGlzLmR0KHQsZSxhKS52YWx1ZXN9dXBkYXRlKHQsW2UsYSxyXSl7bGV0IGk9VHRlKHQpLHt2YWx1ZXM6byxrZXlzOnN9PXRoaXMuZHQoZSxhLHIpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiB0aGlzLnV0PXMsbztsZXQgbD10aGlzLnV0Pz89W10sZj1bXSxjLHUsZD0wLGg9aS5sZW5ndGgtMSxnPTAsYj1vLmxlbmd0aC0xO2Zvcig7ZDw9aCYmZzw9YjspaWYoaVtkXT09PW51bGwpZCsrO2Vsc2UgaWYoaVtoXT09PW51bGwpaC0tO2Vsc2UgaWYobFtkXT09PXNbZ10pZltnXT1RYShpW2RdLG9bZ10pLGQrKyxnKys7ZWxzZSBpZihsW2hdPT09c1tiXSlmW2JdPVFhKGlbaF0sb1tiXSksaC0tLGItLTtlbHNlIGlmKGxbZF09PT1zW2JdKWZbYl09UWEoaVtkXSxvW2JdKSxfaSh0LGZbYisxXSxpW2RdKSxkKyssYi0tO2Vsc2UgaWYobFtoXT09PXNbZ10pZltnXT1RYShpW2hdLG9bZ10pLF9pKHQsaVtkXSxpW2hdKSxoLS0sZysrO2Vsc2UgaWYoYz09PXZvaWQgMCYmKGM9bWF0KHMsZyxiKSx1PW1hdChsLGQsaCkpLGMuaGFzKGxbZF0pKWlmKGMuaGFzKGxbaF0pKXtsZXQgeD11LmdldChzW2ddKSxtPXghPT12b2lkIDA/aVt4XTpudWxsO2lmKG09PT1udWxsKXtsZXQgdj1faSh0LGlbZF0pO1FhKHYsb1tnXSksZltnXT12fWVsc2UgZltnXT1RYShtLG9bZ10pLF9pKHQsaVtkXSxtKSxpW3hdPW51bGw7ZysrfWVsc2UgRmQoaVtoXSksaC0tO2Vsc2UgRmQoaVtkXSksZCsrO2Zvcig7Zzw9Yjspe2xldCB4PV9pKHQsZltiKzFdKTtRYSh4LG9bZ10pLGZbZysrXT14fWZvcig7ZDw9aDspe2xldCB4PWlbZCsrXTt4IT09bnVsbCYmRmQoeCl9cmV0dXJuIHRoaXMudXQ9cyxJZCh0LGYpLGwxfX0pfSk7dmFyIHhhdD1uKCgpPT57Z2F0KCl9KTt2YXIgRWE9e307ZXQoRWEse2FzeW5jQXBwZW5kOigpPT5JdGUsa2V5ZWQ6KCk9PkZ0ZSxyZXBlYXQ6KCk9Pk90ZSxyZXNvbHZlOigpPT50YXQscmVzb2x2ZUV4ZWM6KCk9PkYyMSxzdWJzY3JpYmU6KCk9Pk8yMSxzdWJzY3JpYmVXaXRoVGVtcGxhdGU6KCk9PmlhdCx1bnRpbDooKT0+UHRlfSk7dmFyIGJhdD1uKCgpPT57YWF0KCk7cmF0KCk7b2F0KCk7Y2F0KCk7dWF0KCk7aGF0KCk7eGF0KCl9KTt2YXIgcCxmZT1uKCgpPT57JDJ0KCk7Z3IoKTtQMnQoKTtGMnQoKTtPMnQoKTtaMnQoKTtTdCgpO1EydCgpO2JhdCgpO3A9SHEuZ2V0U2luZ2xldG9uKCl9KTt2YXIgQW4seGUsQmU9bigoKT0+e2ZlKCk7QW49e2NvbG9yczp7bGlnaHQ6e2JnUHJpbWFyeToiI2ZmZmZmZiIsYmdTZWNvbmRhcnk6IiNmYWZhZmEiLGJnVGVydGlhcnk6IiNmNGY0ZjUiLHRleHRQcmltYXJ5OiIjMDkwOTBiIix0ZXh0U2Vjb25kYXJ5OiIjMzc0MTUxIix0ZXh0TXV0ZWQ6IiM3MTcxN2EiLGJvcmRlckRlZmF1bHQ6IiNlNWU3ZWIiLGJvcmRlclN1YnRsZToiI2Y0ZjRmNSIsYm9yZGVyU3Ryb25nOiIjZDFkNWRiIixhY2NlbnRQcmltYXJ5OiIjM2I4MmY2IixhY2NlbnRTdWNjZXNzOiIjMjJjNTVlIixhY2NlbnRXYXJuaW5nOiIjZjU5ZTBiIixhY2NlbnRFcnJvcjoiI2VmNDQ0NCJ9LGRhcms6e2JnUHJpbWFyeToiIzA5MDkwYiIsYmdTZWNvbmRhcnk6IiMwYTBhMGEiLGJnVGVydGlhcnk6IiMxODE4MWIiLHRleHRQcmltYXJ5OiIjZmFmYWZhIix0ZXh0U2Vjb25kYXJ5OiIjZDRkNGQ4Iix0ZXh0TXV0ZWQ6IiNhMWExYWEiLGJvcmRlckRlZmF1bHQ6IiMyNzI3MmEiLGJvcmRlclN1YnRsZToiIzFhMWExYSIsYm9yZGVyU3Ryb25nOiIjM2YzZjQ2IixhY2NlbnRQcmltYXJ5OiIjM2I4MmY2IixhY2NlbnRTdWNjZXNzOiIjMjJjNTVlIixhY2NlbnRXYXJuaW5nOiIjZjU5ZTBiIixhY2NlbnRFcnJvcjoiI2VmNDQ0NCJ9fSxzcGFjaW5nOnt4czoiNHB4IixzbToiOHB4IixtZDoiMTJweCIsbGc6IjE2cHgiLHhsOiIyNHB4IiwiMnhsIjoiMzJweCIsIjN4bCI6IjQ4cHgifSxyYWRpdXM6e3hzOiIycHgiLHNtOiI0cHgiLG1kOiI2cHgiLGxnOiI4cHgiLHhsOiIxMnB4IixmdWxsOiI5OTlweCJ9LHNoYWRvd3M6e3hzOiIwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KSIsc206IjAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSkiLG1kOiIwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsbGc6IjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KSJ9LHRyYW5zaXRpb25zOntmYXN0OiIwLjFzIixkZWZhdWx0OiIwLjE1cyIsc2xvdzoiMC4ycyIsc2xvd2VyOiIwLjNzIn0sY29udHJvbEhlaWdodHM6e3NtOiIzMnB4IixtZDoiMzZweCIsbGc6IjQwcHgiLHhsOiI0OHB4In19LHhlPXRlYAogIDpob3N0IHsKICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAqIFNwYWNpbmcgU2NhbGUKICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAgIC0tZGVlcy1zcGFjaW5nLXhzOiA0cHg7CiAgICAtLWRlZXMtc3BhY2luZy1zbTogOHB4OwogICAgLS1kZWVzLXNwYWNpbmctbWQ6IDEycHg7CiAgICAtLWRlZXMtc3BhY2luZy1sZzogMTZweDsKICAgIC0tZGVlcy1zcGFjaW5nLXhsOiAyNHB4OwogICAgLS1kZWVzLXNwYWNpbmctMnhsOiAzMnB4OwogICAgLS1kZWVzLXNwYWNpbmctM3hsOiA0OHB4OwoKICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAqIEJvcmRlciBSYWRpdXMgU2NhbGUKICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAgIC0tZGVlcy1yYWRpdXMteHM6IDJweDsKICAgIC0tZGVlcy1yYWRpdXMtc206IDRweDsKICAgIC0tZGVlcy1yYWRpdXMtbWQ6IDZweDsKICAgIC0tZGVlcy1yYWRpdXMtbGc6IDhweDsKICAgIC0tZGVlcy1yYWRpdXMteGw6IDEycHg7CiAgICAtLWRlZXMtcmFkaXVzLWZ1bGw6IDk5OXB4OwoKICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAqIFNoYWRvdyBFbGV2YXRpb24gU2NhbGUKICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAgIC0tZGVlcy1zaGFkb3cteHM6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpOwogICAgLS1kZWVzLXNoYWRvdy1zbTogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgIC0tZGVlcy1zaGFkb3ctbWQ6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgLS1kZWVzLXNoYWRvdy1sZzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwoKICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAqIFRyYW5zaXRpb24gRHVyYXRpb24gU2NhbGUKICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAgIC0tZGVlcy10cmFuc2l0aW9uLWZhc3Q6IDAuMXM7CiAgICAtLWRlZXMtdHJhbnNpdGlvbi1kZWZhdWx0OiAwLjE1czsKICAgIC0tZGVlcy10cmFuc2l0aW9uLXNsb3c6IDAuMnM7CiAgICAtLWRlZXMtdHJhbnNpdGlvbi1zbG93ZXI6IDAuM3M7CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogQ29udHJvbCBIZWlnaHQgU2NhbGUKICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAgIC0tZGVlcy1jb250cm9sLWhlaWdodC1zbTogMzJweDsKICAgIC0tZGVlcy1jb250cm9sLWhlaWdodC1tZDogMzZweDsKICAgIC0tZGVlcy1jb250cm9sLWhlaWdodC1sZzogNDBweDsKICAgIC0tZGVlcy1jb250cm9sLWhlaWdodC14bDogNDhweDsKICB9CmB9KTtmdW5jdGlvbiBKdGUodCxlKXsoZT09bnVsbHx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIGE9MCxyPUFycmF5KGUpO2E8ZTthKyspclthXT10W2FdO3JldHVybiByfWZ1bmN0aW9uIEgyMSh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fWZ1bmN0aW9uIHEyMSh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBKdGUodCl9ZnVuY3Rpb24gVjIxKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24geWF0KHQsZSl7Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe3ZhciByPWVbYV07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxNYXQoci5rZXkpLHIpfX1mdW5jdGlvbiBVMjEodCxlLGEpe3JldHVybiBlJiZ5YXQodC5wcm90b3R5cGUsZSksYSYmeWF0KHQsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBYcSh0LGUpe3ZhciBhPXR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighYSl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KGE9ZTFlKHQpKXx8ZSYmdCYmdHlwZW9mIHQubGVuZ3RoPT0ibnVtYmVyIil7YSYmKHQ9YSk7dmFyIHI9MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbcisrXX19LGU6ZnVuY3Rpb24oZil7dGhyb3cgZn0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgbyxzPSEwLGw9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXthPWEuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciBmPWEubmV4dCgpO3JldHVybiBzPWYuZG9uZSxmfSxlOmZ1bmN0aW9uKGYpe2w9ITAsbz1mfSxmOmZ1bmN0aW9uKCl7dHJ5e3N8fGEucmV0dXJuPT1udWxsfHxhLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBvfX19fWZ1bmN0aW9uIG10KHQsZSxhKXtyZXR1cm4oZT1NYXQoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1hLHR9ZnVuY3Rpb24gajIxKHQsZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiImJmUhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJlFxKHQsZSl9ZnVuY3Rpb24gVzIxKHQpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fHRbIkBAaXRlcmF0b3IiXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBHMjEodCxlKXt2YXIgYT10PT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKGEhPW51bGwpe3ZhciByLGksbyxzLGw9W10sZj0hMCxjPSExO3RyeXtpZihvPShhPWEuY2FsbCh0KSkubmV4dCxlPT09MCl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Zj0hMX1lbHNlIGZvcig7IShmPShyPW8uY2FsbChhKSkuZG9uZSkmJihsLnB1c2goci52YWx1ZSksbC5sZW5ndGghPT1lKTtmPSEwKTt9Y2F0Y2godSl7Yz0hMCxpPXV9ZmluYWxseXt0cnl7aWYoIWYmJmEucmV0dXJuIT1udWxsJiYocz1hLnJldHVybigpLE9iamVjdChzKSE9PXMpKXJldHVybn1maW5hbGx5e2lmKGMpdGhyb3cgaX19cmV0dXJuIGx9fWZ1bmN0aW9uIFkyMSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBaMjEoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIHdhdCh0LGUpe3ZhciBhPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKS5lbnVtZXJhYmxlfSkpLGEucHVzaC5hcHBseShhLHIpfXJldHVybiBhfWZ1bmN0aW9uIF9lKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBhPWFyZ3VtZW50c1tlXSE9bnVsbD9hcmd1bWVudHNbZV06e307ZSUyP3dhdChPYmplY3QoYSksITApLmZvckVhY2goZnVuY3Rpb24ocil7bXQodCxyLGFbcl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhhKSk6d2F0KE9iamVjdChhKSkuZm9yRWFjaChmdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxyKSl9KX1yZXR1cm4gdH1mdW5jdGlvbiBRcSh0LGUpe3JldHVybiBRcT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhLHIpe3JldHVybiBhLl9fcHJvdG9fXz1yLGF9LFFxKHQsZSl9ZnVuY3Rpb24gS3EodCxlKXtyZXR1cm4gSDIxKHQpfHxHMjEodCxlKXx8ZTFlKHQsZSl8fFkyMSgpfWZ1bmN0aW9uIEphKHQpe3JldHVybiBxMjEodCl8fFcyMSh0KXx8ZTFlKHQpfHxaMjEoKX1mdW5jdGlvbiBYMjEodCxlKXtpZih0eXBlb2YgdCE9Im9iamVjdCJ8fCF0KXJldHVybiB0O3ZhciBhPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihhIT09dm9pZCAwKXt2YXIgcj1hLmNhbGwodCxlfHwiZGVmYXVsdCIpO2lmKHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybihlPT09InN0cmluZyI/U3RyaW5nOk51bWJlcikodCl9ZnVuY3Rpb24gTWF0KHQpe3ZhciBlPVgyMSh0LCJzdHJpbmciKTtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wiP2U6ZSsiIn1mdW5jdGlvbiBKcSh0KXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBKcT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sSnEodCl9ZnVuY3Rpb24gZTFlKHQsZSl7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiBKdGUodCxlKTt2YXIgYT17fS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiBhPT09Ik9iamVjdCImJnQuY29uc3RydWN0b3ImJihhPXQuY29uc3RydWN0b3IubmFtZSksYT09PSJNYXAifHxhPT09IlNldCI/QXJyYXkuZnJvbSh0KTphPT09IkFyZ3VtZW50cyJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpP0p0ZSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gTDIoKXtMMj1mdW5jdGlvbihpLG8pe3JldHVybiBuZXcgYShpLHZvaWQgMCxvKX07dmFyIHQ9UmVnRXhwLnByb3RvdHlwZSxlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGEoaSxvLHMpe3ZhciBsPVJlZ0V4cChpLG8pO3JldHVybiBlLnNldChsLHN8fGUuZ2V0KGkpKSxRcShsLGEucHJvdG90eXBlKX1mdW5jdGlvbiByKGksbyl7dmFyIHM9ZS5nZXQobyk7cmV0dXJuIE9iamVjdC5rZXlzKHMpLnJlZHVjZShmdW5jdGlvbihsLGYpe3ZhciBjPXNbZl07aWYodHlwZW9mIGM9PSJudW1iZXIiKWxbZl09aVtjXTtlbHNle2Zvcih2YXIgdT0wO2lbY1t1XV09PT12b2lkIDAmJnUrMTxjLmxlbmd0aDspdSsrO2xbZl09aVtjW3VdXX1yZXR1cm4gbH0sT2JqZWN0LmNyZWF0ZShudWxsKSl9cmV0dXJuIGoyMShhLFJlZ0V4cCksYS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihpKXt2YXIgbz10LmV4ZWMuY2FsbCh0aGlzLGkpO2lmKG8pe28uZ3JvdXBzPXIobyx0aGlzKTt2YXIgcz1vLmluZGljZXM7cyYmKHMuZ3JvdXBzPXIocyx0aGlzKSl9cmV0dXJuIG99LGEucHJvdG90eXBlW1N5bWJvbC5yZXBsYWNlXT1mdW5jdGlvbihpLG8pe2lmKHR5cGVvZiBvPT0ic3RyaW5nIil7dmFyIHM9ZS5nZXQodGhpcyk7cmV0dXJuIHRbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcyxpLG8ucmVwbGFjZSgvXCQ8KFtePl0rKSg+fCQpL2csZnVuY3Rpb24oZixjLHUpe2lmKHU9PT0iIilyZXR1cm4gZjt2YXIgZD1zW2NdO3JldHVybiBBcnJheS5pc0FycmF5KGQpPyIkIitkLmpvaW4oIiQiKTp0eXBlb2YgZD09Im51bWJlciI/IiQiK2Q6IiJ9KSl9aWYodHlwZW9mIG89PSJmdW5jdGlvbiIpe3ZhciBsPXRoaXM7cmV0dXJuIHRbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcyxpLGZ1bmN0aW9uKCl7dmFyIGY9YXJndW1lbnRzO3JldHVybiB0eXBlb2YgZltmLmxlbmd0aC0xXSE9Im9iamVjdCImJihmPVtdLnNsaWNlLmNhbGwoZikpLnB1c2gocihmLGwpKSxvLmFwcGx5KHRoaXMsZil9KX1yZXR1cm4gdFtTeW1ib2wucmVwbGFjZV0uY2FsbCh0aGlzLGksbyl9LEwyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBIZCh0KXtyZXR1cm4gbmV3IFByb3h5KHQse2dldDpmdW5jdGlvbihhLHIpe3JldHVybiByIGluIGE/YVtyXTphW2kyXX19KX1mdW5jdGlvbiBQcjEodCl7dmFyIGU9ZDEucXVlcnlTZWxlY3Rvcigic2NyaXB0WyIrdCsiXSIpO2lmKGUpcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQpfWZ1bmN0aW9uIElyMSh0KXtyZXR1cm4gdD09PSIiPyEwOnQ9PT0iZmFsc2UiPyExOnQ9PT0idHJ1ZSI/ITA6dH1mdW5jdGlvbiBGcjEodCl7cmV0dXJuIFZkLnB1c2godCksZnVuY3Rpb24oKXtWZC5zcGxpY2UoVmQuaW5kZXhPZih0KSwxKX19ZnVuY3Rpb24gT3IxKHQpe2lmKCEoIXR8fCEkaSkpe3ZhciBlPWQxLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGUuaW5uZXJIVE1MPXQ7Zm9yKHZhciBhPWQxLmhlYWQuY2hpbGROb2RlcyxyPW51bGwsaT1hLmxlbmd0aC0xO2k+LTE7aS0tKXt2YXIgbz1hW2ldLHM9KG8udGFnTmFtZXx8IiIpLnRvVXBwZXJDYXNlKCk7WyJTVFlMRSIsIkxJTksiXS5pbmRleE9mKHMpPi0xJiYocj1vKX1yZXR1cm4gZDEuaGVhZC5pbnNlcnRCZWZvcmUoZSxyKSx0fX1mdW5jdGlvbiBmcnQoKXtmb3IodmFyIHQ9MTIsZT0iIjt0LS0gPjA7KWUrPUJyMVtNYXRoLnJhbmRvbSgpKjYyfDBdO3JldHVybiBlfWZ1bmN0aW9uIFk2KHQpe2Zvcih2YXIgZT1bXSxhPSh0fHxbXSkubGVuZ3RoPj4+MDthLS07KWVbYV09dFthXTtyZXR1cm4gZX1mdW5jdGlvbiBoMWUodCl7cmV0dXJuIHQuY2xhc3NMaXN0P1k2KHQuY2xhc3NMaXN0KToodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfWZ1bmN0aW9uIHVydCh0KXtyZXR1cm4iIi5jb25jYXQodCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCImIzM5OyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIFJyMSh0KXtyZXR1cm4gT2JqZWN0LmtleXModHx8e30pLnJlZHVjZShmdW5jdGlvbihlLGEpe3JldHVybiBlKyIiLmNvbmNhdChhLCc9IicpLmNvbmNhdCh1cnQodFthXSksJyIgJyl9LCIiKS50cmltKCl9ZnVuY3Rpb24gYVYodCl7cmV0dXJuIE9iamVjdC5rZXlzKHR8fHt9KS5yZWR1Y2UoZnVuY3Rpb24oZSxhKXtyZXR1cm4gZSsiIi5jb25jYXQoYSwiOiAiKS5jb25jYXQodFthXS50cmltKCksIjsiKX0sIiIpfWZ1bmN0aW9uIG0xZSh0KXtyZXR1cm4gdC5zaXplIT09anIuc2l6ZXx8dC54IT09anIueHx8dC55IT09anIueXx8dC5yb3RhdGUhPT1qci5yb3RhdGV8fHQuZmxpcFh8fHQuZmxpcFl9ZnVuY3Rpb24gSHIxKHQpe3ZhciBlPXQudHJhbnNmb3JtLGE9dC5jb250YWluZXJXaWR0aCxyPXQuaWNvbldpZHRoLGk9e3RyYW5zZm9ybToidHJhbnNsYXRlKCIuY29uY2F0KGEvMiwiIDI1NikiKX0sbz0idHJhbnNsYXRlKCIuY29uY2F0KGUueCozMiwiLCAiKS5jb25jYXQoZS55KjMyLCIpICIpLHM9InNjYWxlKCIuY29uY2F0KGUuc2l6ZS8xNiooZS5mbGlwWD8tMToxKSwiLCAiKS5jb25jYXQoZS5zaXplLzE2KihlLmZsaXBZPy0xOjEpLCIpICIpLGw9InJvdGF0ZSgiLmNvbmNhdChlLnJvdGF0ZSwiIDAgMCkiKSxmPXt0cmFuc2Zvcm06IiIuY29uY2F0KG8sIiAiKS5jb25jYXQocywiICIpLmNvbmNhdChsKX0sYz17dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIi5jb25jYXQoci8yKi0xLCIgLTI1NikiKX07cmV0dXJue291dGVyOmksaW5uZXI6ZixwYXRoOmN9fWZ1bmN0aW9uIHFyMSh0KXt2YXIgZT10LnRyYW5zZm9ybSxhPXQud2lkdGgscj1hPT09dm9pZCAwP28xZTphLGk9dC5oZWlnaHQsbz1pPT09dm9pZCAwP28xZTppLHM9dC5zdGFydENlbnRlcmVkLGw9cz09PXZvaWQgMD8hMTpzLGY9IiI7cmV0dXJuIGwmJkFhdD9mKz0idHJhbnNsYXRlKCIuY29uY2F0KGUueC90cy1yLzIsImVtLCAiKS5jb25jYXQoZS55L3RzLW8vMiwiZW0pICIpOmw/Zis9InRyYW5zbGF0ZShjYWxjKC01MCUgKyAiLmNvbmNhdChlLngvdHMsImVtKSwgY2FsYygtNTAlICsgIikuY29uY2F0KGUueS90cywiZW0pKSAiKTpmKz0idHJhbnNsYXRlKCIuY29uY2F0KGUueC90cywiZW0sICIpLmNvbmNhdChlLnkvdHMsImVtKSAiKSxmKz0ic2NhbGUoIi5jb25jYXQoZS5zaXplL3RzKihlLmZsaXBYPy0xOjEpLCIsICIpLmNvbmNhdChlLnNpemUvdHMqKGUuZmxpcFk/LTE6MSksIikgIiksZis9InJvdGF0ZSgiLmNvbmNhdChlLnJvdGF0ZSwiZGVnKSAiKSxmfWZ1bmN0aW9uIHBydCgpe3ZhciB0PXRydCxlPWFydCxhPVplLmNzc1ByZWZpeCxyPVplLnJlcGxhY2VtZW50Q2xhc3MsaT1WcjE7aWYoYSE9PXR8fHIhPT1lKXt2YXIgbz1uZXcgUmVnRXhwKCJcXC4iLmNvbmNhdCh0LCJcXC0iKSwiZyIpLHM9bmV3IFJlZ0V4cCgiXFwtLSIuY29uY2F0KHQsIlxcLSIpLCJnIiksbD1uZXcgUmVnRXhwKCJcXC4iLmNvbmNhdChlKSwiZyIpO2k9aS5yZXBsYWNlKG8sIi4iLmNvbmNhdChhLCItIikpLnJlcGxhY2UocywiLS0iLmNvbmNhdChhLCItIikpLnJlcGxhY2UobCwiLiIuY29uY2F0KHIpKX1yZXR1cm4gaX1mdW5jdGlvbiBnMWUoKXtaZS5hdXRvQWRkQ3NzJiYhaHJ0JiYoT3IxKHBydCgpKSxocnQ9ITApfWZ1bmN0aW9uIGpyMSh0KXskaSYmKHJWP3NldFRpbWVvdXQodCwwKTptcnQucHVzaCh0KSl9ZnVuY3Rpb24gVWQodCl7dmFyIGU9dC50YWcsYT10LmF0dHJpYnV0ZXMscj1hPT09dm9pZCAwP3t9OmEsaT10LmNoaWxkcmVuLG89aT09PXZvaWQgMD9bXTppO3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/dXJ0KHQpOiI8Ii5jb25jYXQoZSwiICIpLmNvbmNhdChScjEociksIj4iKS5jb25jYXQoby5tYXAoVWQpLmpvaW4oIiIpLCI8LyIpLmNvbmNhdChlLCI+Iil9ZnVuY3Rpb24geHJ0KHQsZSxhKXtpZih0JiZ0W2VdJiZ0W2VdW2FdKXJldHVybntwcmVmaXg6ZSxpY29uTmFtZTphLGljb246dFtlXVthXX19ZnVuY3Rpb24gYnJ0KHQpe3JldHVybiBKYSh0KS5sZW5ndGghPT0xP251bGw6dC5jb2RlUG9pbnRBdCgwKS50b1N0cmluZygxNil9ZnVuY3Rpb24gdnJ0KHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5yZWR1Y2UoZnVuY3Rpb24oZSxhKXt2YXIgcj10W2FdLGk9ISFyLmljb247cmV0dXJuIGk/ZVtyLmljb25OYW1lXT1yLmljb246ZVthXT1yLGV9LHt9KX1mdW5jdGlvbiBiMWUodCxlKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e30scj1hLnNraXBIb29rcyxpPXI9PT12b2lkIDA/ITE6cixvPXZydChlKTt0eXBlb2YgZXIuaG9va3MuYWRkUGFjaz09ImZ1bmN0aW9uIiYmIWk/ZXIuaG9va3MuYWRkUGFjayh0LHZydChlKSk6ZXIuc3R5bGVzW3RdPV9lKF9lKHt9LGVyLnN0eWxlc1t0XXx8e30pLG8pLHQ9PT0iZmFzIiYmYjFlKCJmYSIsZSl9ZnVuY3Rpb24gWnIxKHQpe3JldHVybn5OcjEuaW5kZXhPZih0KX1mdW5jdGlvbiBYcjEodCxlKXt2YXIgYT1lLnNwbGl0KCItIikscj1hWzBdLGk9YS5zbGljZSgxKS5qb2luKCItIik7cmV0dXJuIHI9PT10JiZpIT09IiImJiFacjEoaSk/aTpudWxsfWZ1bmN0aW9uIHcxZSh0LGUpe3JldHVybih3cnRbdF18fHt9KVtlXX1mdW5jdGlvbiBRcjEodCxlKXtyZXR1cm4oTXJ0W3RdfHx7fSlbZV19ZnVuY3Rpb24gRG4odCxlKXtyZXR1cm4oU3J0W3RdfHx7fSlbZV19ZnVuY3Rpb24gTHJ0KHQpe3JldHVybiB6cnRbdF18fHtwcmVmaXg6bnVsbCxpY29uTmFtZTpudWxsfX1mdW5jdGlvbiBLcjEodCl7dmFyIGU9a3J0W3RdLGE9dzFlKCJmYXMiLHQpO3JldHVybiBlfHwoYT97cHJlZml4OiJmYXMiLGljb25OYW1lOmF9Om51bGwpfHx7cHJlZml4Om51bGwsaWNvbk5hbWU6bnVsbH19ZnVuY3Rpb24gYXMoKXtyZXR1cm4geTFlfWZ1bmN0aW9uIEpyMSh0KXt2YXIgZT1pMixhPXlydC5yZWR1Y2UoZnVuY3Rpb24ocixpKXtyZXR1cm4gcltpXT0iIi5jb25jYXQoWmUuY3NzUHJlZml4LCItIikuY29uY2F0KGkpLHJ9LHt9KTtyZXR1cm4gWmF0LmZvckVhY2goZnVuY3Rpb24ocil7KHQuaW5jbHVkZXMoYVtyXSl8fHQuc29tZShmdW5jdGlvbihpKXtyZXR1cm4gWXIxW3JdLmluY2x1ZGVzKGkpfSkpJiYoZT1yKX0pLGV9ZnVuY3Rpb24gaVYodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGE9ZS5mYW1pbHkscj1hPT09dm9pZCAwP2kyOmEsaT1fcjFbcl1bdF07aWYocj09PVJkJiYhdClyZXR1cm4iZmFkIjt2YXIgbz1ucnRbcl1bdF18fG5ydFtyXVtpXSxzPXQgaW4gZXIuc3R5bGVzP3Q6bnVsbCxsPW98fHN8fG51bGw7cmV0dXJuIGx9ZnVuY3Rpb24gZWkxKHQpe3ZhciBlPVtdLGE9bnVsbDtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPVhyMShaZS5jc3NQcmVmaXgscik7aT9hPWk6ciYmZS5wdXNoKHIpfSkse2ljb25OYW1lOmEscmVzdDplfX1mdW5jdGlvbiBfcnQodCl7cmV0dXJuIHQuc29ydCgpLmZpbHRlcihmdW5jdGlvbihlLGEscil7cmV0dXJuIHIuaW5kZXhPZihlKT09PWF9KX1mdW5jdGlvbiBvVih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sYT1lLnNraXBMb29rdXBzLHI9YT09PXZvaWQgMD8hMTphLGk9bnVsbCxvPV9ydCh0LmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4gQXJ0LmluY2x1ZGVzKGcpfSkpLHM9X3J0KHQuZmlsdGVyKGZ1bmN0aW9uKGcpe3JldHVybiFBcnQuaW5jbHVkZXMoZyl9KSksbD1vLmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4gaT1nLCFEYXQuaW5jbHVkZXMoZyl9KSxmPUtxKGwsMSksYz1mWzBdLHU9Yz09PXZvaWQgMD9udWxsOmMsZD1KcjEobyksaD1fZShfZSh7fSxlaTEocykpLHt9LHtwcmVmaXg6aVYodSx7ZmFtaWx5OmR9KX0pO3JldHVybiBfZShfZShfZSh7fSxoKSxpaTEoe3ZhbHVlczp0LGZhbWlseTpkLHN0eWxlczpqZCxjb25maWc6WmUsY2Fub25pY2FsOmgsZ2l2ZW5QcmVmaXg6aX0pKSx0aTEocixpLGgpKX1mdW5jdGlvbiB0aTEodCxlLGEpe3ZhciByPWEucHJlZml4LGk9YS5pY29uTmFtZTtpZih0fHwhcnx8IWkpcmV0dXJue3ByZWZpeDpyLGljb25OYW1lOml9O3ZhciBvPWU9PT0iZmEiP0xydChpKTp7fSxzPURuKHIsaSk7cmV0dXJuIGk9by5pY29uTmFtZXx8c3x8aSxyPW8ucHJlZml4fHxyLHI9PT0iZmFyIiYmIWpkLmZhciYmamQuZmFzJiYhWmUuYXV0b0ZldGNoU3ZnJiYocj0iZmFzIikse3ByZWZpeDpyLGljb25OYW1lOml9fWZ1bmN0aW9uIGlpMSh0KXt2YXIgZT10LnZhbHVlcyxhPXQuZmFtaWx5LHI9dC5jYW5vbmljYWwsaT10LmdpdmVuUHJlZml4LG89aT09PXZvaWQgMD8iIjppLHM9dC5zdHlsZXMsbD1zPT09dm9pZCAwP3t9OnMsZj10LmNvbmZpZyxjPWY9PT12b2lkIDA/e306Zix1PWE9PT1SZCxkPWUuaW5jbHVkZXMoImZhLWR1b3RvbmUiKXx8ZS5pbmNsdWRlcygiZmFkIiksaD1jLmZhbWlseURlZmF1bHQ9PT0iZHVvdG9uZSIsZz1yLnByZWZpeD09PSJmYWQifHxyLnByZWZpeD09PSJmYS1kdW90b25lIjtpZighdSYmKGR8fGh8fGcpJiYoci5wcmVmaXg9ImZhZCIpLChlLmluY2x1ZGVzKCJmYS1icmFuZHMiKXx8ZS5pbmNsdWRlcygiZmFiIikpJiYoci5wcmVmaXg9ImZhYiIpLCFyLnByZWZpeCYmYWkxLmluY2x1ZGVzKGEpKXt2YXIgYj1PYmplY3Qua2V5cyhsKS5maW5kKGZ1bmN0aW9uKG0pe3JldHVybiByaTEuaW5jbHVkZXMobSl9KTtpZihifHxjLmF1dG9GZXRjaFN2Zyl7dmFyIHg9d2ExLmdldChhKS5kZWZhdWx0U2hvcnRQcmVmaXhJZDtyLnByZWZpeD14LHIuaWNvbk5hbWU9RG4oci5wcmVmaXgsci5pY29uTmFtZSl8fHIuaWNvbk5hbWV9fXJldHVybihyLnByZWZpeD09PSJmYSJ8fG89PT0iZmEiKSYmKHIucHJlZml4PWFzKCl8fCJmYXMiKSxyfWZ1bmN0aW9uIG5pMSh0LGUpe3ZhciBhPWUubWl4b3V0c1RvO3JldHVybiAkcnQ9dCxaNj17fSxPYmplY3Qua2V5cyhYNikuZm9yRWFjaChmdW5jdGlvbihyKXtzaTEuaW5kZXhPZihyKT09PS0xJiZkZWxldGUgWDZbcl19KSwkcnQuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgaT1yLm1peG91dD9yLm1peG91dCgpOnt9O2lmKE9iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24ocyl7dHlwZW9mIGlbc109PSJmdW5jdGlvbiImJihhW3NdPWlbc10pLEpxKGlbc10pPT09Im9iamVjdCImJk9iamVjdC5rZXlzKGlbc10pLmZvckVhY2goZnVuY3Rpb24obCl7YVtzXXx8KGFbc109e30pLGFbc11bbF09aVtzXVtsXX0pfSksci5ob29rcyl7dmFyIG89ci5ob29rcygpO09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24ocyl7WjZbc118fChaNltzXT1bXSksWjZbc10ucHVzaChvW3NdKX0pfXIucHJvdmlkZXMmJnIucHJvdmlkZXMoWDYpfSksYX1mdW5jdGlvbiBNMWUodCxlKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShhPjI/YS0yOjApLGk9MjtpPGE7aSsrKXJbaS0yXT1hcmd1bWVudHNbaV07dmFyIG89WjZbdF18fFtdO3JldHVybiBvLmZvckVhY2goZnVuY3Rpb24ocyl7ZT1zLmFwcGx5KG51bGwsW2VdLmNvbmNhdChyKSl9KSxlfWZ1bmN0aW9uIEVuKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspYVtyLTFdPWFyZ3VtZW50c1tyXTt2YXIgaT1aNlt0XXx8W107aS5mb3JFYWNoKGZ1bmN0aW9uKG8pe28uYXBwbHkobnVsbCxhKX0pfWZ1bmN0aW9uIHJzKCl7dmFyIHQ9YXJndW1lbnRzWzBdLGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBYNlt0XT9YNlt0XS5hcHBseShudWxsLGUpOnZvaWQgMH1mdW5jdGlvbiB6MWUodCl7dC5wcmVmaXg9PT0iZmEiJiYodC5wcmVmaXg9ImZhcyIpO3ZhciBlPXQuaWNvbk5hbWUsYT10LnByZWZpeHx8YXMoKTtpZihlKXJldHVybiBlPURuKGEsZSl8fGUseHJ0KERydC5kZWZpbml0aW9ucyxhLGUpfHx4cnQoZXIuc3R5bGVzLGEsZSl9ZnVuY3Rpb24gc1YodCxlKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFic3RyYWN0Iix7Z2V0OmV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaHRtbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0LmFic3RyYWN0Lm1hcChmdW5jdGlvbihyKXtyZXR1cm4gVWQocil9KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibm9kZSIse2dldDpmdW5jdGlvbigpe2lmKCRpKXt2YXIgcj1kMS5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gci5pbm5lckhUTUw9dC5odG1sLHIuY2hpbGRyZW59fX0pLHR9ZnVuY3Rpb24gdWkxKHQpe3ZhciBlPXQuY2hpbGRyZW4sYT10Lm1haW4scj10Lm1hc2ssaT10LmF0dHJpYnV0ZXMsbz10LnN0eWxlcyxzPXQudHJhbnNmb3JtO2lmKG0xZShzKSYmYS5mb3VuZCYmIXIuZm91bmQpe3ZhciBsPWEud2lkdGgsZj1hLmhlaWdodCxjPXt4OmwvZi8yLHk6LjV9O2kuc3R5bGU9YVYoX2UoX2Uoe30sbykse30seyJ0cmFuc2Zvcm0tb3JpZ2luIjoiIi5jb25jYXQoYy54K3MueC8xNiwiZW0gIikuY29uY2F0KGMueStzLnkvMTYsImVtIil9KSl9cmV0dXJuW3t0YWc6InN2ZyIsYXR0cmlidXRlczppLGNoaWxkcmVuOmV9XX1mdW5jdGlvbiBwaTEodCl7dmFyIGU9dC5wcmVmaXgsYT10Lmljb25OYW1lLHI9dC5jaGlsZHJlbixpPXQuYXR0cmlidXRlcyxvPXQuc3ltYm9sLHM9bz09PSEwPyIiLmNvbmNhdChlLCItIikuY29uY2F0KFplLmNzc1ByZWZpeCwiLSIpLmNvbmNhdChhKTpvO3JldHVyblt7dGFnOiJzdmciLGF0dHJpYnV0ZXM6e3N0eWxlOiJkaXNwbGF5OiBub25lOyJ9LGNoaWxkcmVuOlt7dGFnOiJzeW1ib2wiLGF0dHJpYnV0ZXM6X2UoX2Uoe30saSkse30se2lkOnN9KSxjaGlsZHJlbjpyfV19XX1mdW5jdGlvbiBoaTEodCl7dmFyIGU9WyJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwidGl0bGUiLCJyb2xlIl07cmV0dXJuIGUuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gYSBpbiB0fSl9ZnVuY3Rpb24gazFlKHQpe3ZhciBlPXQuaWNvbnMsYT1lLm1haW4scj1lLm1hc2ssaT10LnByZWZpeCxvPXQuaWNvbk5hbWUscz10LnRyYW5zZm9ybSxsPXQuc3ltYm9sLGY9dC5tYXNrSWQsYz10LmV4dHJhLHU9dC53YXRjaGFibGUsZD11PT09dm9pZCAwPyExOnUsaD1yLmZvdW5kP3I6YSxnPWgud2lkdGgsYj1oLmhlaWdodCx4PVtaZS5yZXBsYWNlbWVudENsYXNzLG8/IiIuY29uY2F0KFplLmNzc1ByZWZpeCwiLSIpLmNvbmNhdChvKToiIl0uZmlsdGVyKGZ1bmN0aW9uKEMpe3JldHVybiBjLmNsYXNzZXMuaW5kZXhPZihDKT09PS0xfSkuZmlsdGVyKGZ1bmN0aW9uKEMpe3JldHVybiBDIT09IiJ8fCEhQ30pLmNvbmNhdChjLmNsYXNzZXMpLmpvaW4oIiAiKSxtPXtjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOl9lKF9lKHt9LGMuYXR0cmlidXRlcykse30seyJkYXRhLXByZWZpeCI6aSwiZGF0YS1pY29uIjpvLGNsYXNzOngscm9sZTpjLmF0dHJpYnV0ZXMucm9sZXx8ImltZyIsdmlld0JveDoiMCAwICIuY29uY2F0KGcsIiAiKS5jb25jYXQoYil9KX07IWhpMShjLmF0dHJpYnV0ZXMpJiYhYy5hdHRyaWJ1dGVzWyJhcmlhLWhpZGRlbiJdJiYobS5hdHRyaWJ1dGVzWyJhcmlhLWhpZGRlbiJdPSJ0cnVlIiksZCYmKG0uYXR0cmlidXRlc1skbl09IiIpO3ZhciB2PV9lKF9lKHt9LG0pLHt9LHtwcmVmaXg6aSxpY29uTmFtZTpvLG1haW46YSxtYXNrOnIsbWFza0lkOmYsdHJhbnNmb3JtOnMsc3ltYm9sOmwsc3R5bGVzOl9lKHt9LGMuc3R5bGVzKX0pLHk9ci5mb3VuZCYmYS5mb3VuZD9ycygiZ2VuZXJhdGVBYnN0cmFjdE1hc2siLHYpfHx7Y2hpbGRyZW46W10sYXR0cmlidXRlczp7fX06cnMoImdlbmVyYXRlQWJzdHJhY3RJY29uIix2KXx8e2NoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e319LHc9eS5jaGlsZHJlbixFPXkuYXR0cmlidXRlcztyZXR1cm4gdi5jaGlsZHJlbj13LHYuYXR0cmlidXRlcz1FLGw/cGkxKHYpOnVpMSh2KX1mdW5jdGlvbiBFcnQodCl7dmFyIGU9dC5jb250ZW50LGE9dC53aWR0aCxyPXQuaGVpZ2h0LGk9dC50cmFuc2Zvcm0sbz10LmV4dHJhLHM9dC53YXRjaGFibGUsbD1zPT09dm9pZCAwPyExOnMsZj1fZShfZSh7fSxvLmF0dHJpYnV0ZXMpLHt9LHtjbGFzczpvLmNsYXNzZXMuam9pbigiICIpfSk7bCYmKGZbJG5dPSIiKTt2YXIgYz1fZSh7fSxvLnN0eWxlcyk7bTFlKGkpJiYoYy50cmFuc2Zvcm09cXIxKHt0cmFuc2Zvcm06aSxzdGFydENlbnRlcmVkOiEwLHdpZHRoOmEsaGVpZ2h0OnJ9KSxjWyItd2Via2l0LXRyYW5zZm9ybSJdPWMudHJhbnNmb3JtKTt2YXIgdT1hVihjKTt1Lmxlbmd0aD4wJiYoZi5zdHlsZT11KTt2YXIgZD1bXTtyZXR1cm4gZC5wdXNoKHt0YWc6InNwYW4iLGF0dHJpYnV0ZXM6ZixjaGlsZHJlbjpbZV19KSxkfWZ1bmN0aW9uIG1pMSh0KXt2YXIgZT10LmNvbnRlbnQsYT10LmV4dHJhLHI9X2UoX2Uoe30sYS5hdHRyaWJ1dGVzKSx7fSx7Y2xhc3M6YS5jbGFzc2VzLmpvaW4oIiAiKX0pLGk9YVYoYS5zdHlsZXMpO2kubGVuZ3RoPjAmJihyLnN0eWxlPWkpO3ZhciBvPVtdO3JldHVybiBvLnB1c2goe3RhZzoic3BhbiIsYXR0cmlidXRlczpyLGNoaWxkcmVuOltlXX0pLG99ZnVuY3Rpb24gQzFlKHQpe3ZhciBlPXRbMF0sYT10WzFdLHI9dC5zbGljZSg0KSxpPUtxKHIsMSksbz1pWzBdLHM9bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShvKT9zPXt0YWc6ImciLGF0dHJpYnV0ZXM6e2NsYXNzOiIiLmNvbmNhdChaZS5jc3NQcmVmaXgsIi0iKS5jb25jYXQocDFlLkdST1VQKX0sY2hpbGRyZW46W3t0YWc6InBhdGgiLGF0dHJpYnV0ZXM6e2NsYXNzOiIiLmNvbmNhdChaZS5jc3NQcmVmaXgsIi0iKS5jb25jYXQocDFlLlNFQ09OREFSWSksZmlsbDoiY3VycmVudENvbG9yIixkOm9bMF19fSx7dGFnOiJwYXRoIixhdHRyaWJ1dGVzOntjbGFzczoiIi5jb25jYXQoWmUuY3NzUHJlZml4LCItIikuY29uY2F0KHAxZS5QUklNQVJZKSxmaWxsOiJjdXJyZW50Q29sb3IiLGQ6b1sxXX19XX06cz17dGFnOiJwYXRoIixhdHRyaWJ1dGVzOntmaWxsOiJjdXJyZW50Q29sb3IiLGQ6b319LHtmb3VuZDohMCx3aWR0aDplLGhlaWdodDphLGljb246c319ZnVuY3Rpb24geGkxKHQsZSl7IW9ydCYmIVplLnNob3dNaXNzaW5nSWNvbnMmJnQmJmNvbnNvbGUuZXJyb3IoJ0ljb24gd2l0aCBuYW1lICInLmNvbmNhdCh0LCciIGFuZCBwcmVmaXggIicpLmNvbmNhdChlLCciIGlzIG1pc3NpbmcuJykpfWZ1bmN0aW9uIEwxZSh0LGUpe3ZhciBhPWU7cmV0dXJuIGU9PT0iZmEiJiZaZS5zdHlsZURlZmF1bHQhPT1udWxsJiYoZT1hcygpKSxuZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe2lmKGE9PT0iZmEiKXt2YXIgbz1McnQodCl8fHt9O3Q9by5pY29uTmFtZXx8dCxlPW8ucHJlZml4fHxlfWlmKHQmJmUmJlMxZVtlXSYmUzFlW2VdW3RdKXt2YXIgcz1TMWVbZV1bdF07cmV0dXJuIHIoQzFlKHMpKX14aTEodCxlKSxyKF9lKF9lKHt9LGdpMSkse30se2ljb246WmUuc2hvd01pc3NpbmdJY29ucyYmdD9ycygibWlzc2luZ0ljb25BYnN0cmFjdCIpfHx7fTp7fX0pKX0pfWZ1bmN0aW9uIElydCh0KXt2YXIgZT10LmdldEF0dHJpYnV0ZT90LmdldEF0dHJpYnV0ZSgkbik6bnVsbDtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmcifWZ1bmN0aW9uIHZpMSh0KXt2YXIgZT10LmdldEF0dHJpYnV0ZT90LmdldEF0dHJpYnV0ZShuMWUpOm51bGwsYT10LmdldEF0dHJpYnV0ZT90LmdldEF0dHJpYnV0ZShsMWUpOm51bGw7cmV0dXJuIGUmJmF9ZnVuY3Rpb24geWkxKHQpe3JldHVybiB0JiZ0LmNsYXNzTGlzdCYmdC5jbGFzc0xpc3QuY29udGFpbnMmJnQuY2xhc3NMaXN0LmNvbnRhaW5zKFplLnJlcGxhY2VtZW50Q2xhc3MpfWZ1bmN0aW9uIHdpMSgpe2lmKFplLmF1dG9SZXBsYWNlU3ZnPT09ITApcmV0dXJuIGxWLnJlcGxhY2U7dmFyIHQ9bFZbWmUuYXV0b1JlcGxhY2VTdmddO3JldHVybiB0fHxsVi5yZXBsYWNlfWZ1bmN0aW9uIE1pMSh0KXtyZXR1cm4gZDEuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCl9ZnVuY3Rpb24gemkxKHQpe3JldHVybiBkMS5jcmVhdGVFbGVtZW50KHQpfWZ1bmN0aW9uIEZydCh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sYT1lLmNlRm4scj1hPT09dm9pZCAwP3QudGFnPT09InN2ZyI/TWkxOnppMTphO2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gZDEuY3JlYXRlVGV4dE5vZGUodCk7dmFyIGk9cih0LnRhZyk7T2JqZWN0LmtleXModC5hdHRyaWJ1dGVzfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXtpLnNldEF0dHJpYnV0ZShzLHQuYXR0cmlidXRlc1tzXSl9KTt2YXIgbz10LmNoaWxkcmVufHxbXTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKHMpe2kuYXBwZW5kQ2hpbGQoRnJ0KHMse2NlRm46cn0pKX0pLGl9ZnVuY3Rpb24ga2kxKHQpe3ZhciBlPSIgIi5jb25jYXQodC5vdXRlckhUTUwsIiAiKTtyZXR1cm4gZT0iIi5jb25jYXQoZSwiRm9udCBBd2Vzb21lIGZvbnRhd2Vzb21lLmNvbSAiKSxlfWZ1bmN0aW9uIE9ydCh0KXt0KCl9ZnVuY3Rpb24gQnJ0KHQsZSl7dmFyIGE9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpuVjtpZih0Lmxlbmd0aD09PTApYSgpO2Vsc2V7dmFyIHI9T3J0O1plLm11dGF0ZUFwcHJvYWNoPT09THIxJiYocj1lcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fE9ydCkscihmdW5jdGlvbigpe3ZhciBpPXdpMSgpLG89XzFlLmJlZ2luKCJtdXRhdGUiKTt0Lm1hcChpKSxvKCksYSgpfSl9fWZ1bmN0aW9uIFJydCgpe0ExZT0hMH1mdW5jdGlvbiAkMWUoKXtBMWU9ITF9ZnVuY3Rpb24gSHJ0KHQpe2lmKF9hdCYmWmUub2JzZXJ2ZU11dGF0aW9ucyl7dmFyIGU9dC50cmVlQ2FsbGJhY2ssYT1lPT09dm9pZCAwP25WOmUscj10Lm5vZGVDYWxsYmFjayxpPXI9PT12b2lkIDA/blY6cixvPXQucHNldWRvRWxlbWVudHNDYWxsYmFjayxzPW89PT12b2lkIDA/blY6byxsPXQub2JzZXJ2ZU11dGF0aW9uc1Jvb3QsZj1sPT09dm9pZCAwP2QxOmw7Y1Y9bmV3IF9hdChmdW5jdGlvbihjKXtpZighQTFlKXt2YXIgdT1hcygpO1k2KGMpLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoZC50eXBlPT09ImNoaWxkTGlzdCImJmQuYWRkZWROb2Rlcy5sZW5ndGg+MCYmIUlydChkLmFkZGVkTm9kZXNbMF0pJiYoWmUuc2VhcmNoUHNldWRvRWxlbWVudHMmJnMoZC50YXJnZXQpLGEoZC50YXJnZXQpKSxkLnR5cGU9PT0iYXR0cmlidXRlcyImJmQudGFyZ2V0LnBhcmVudE5vZGUmJlplLnNlYXJjaFBzZXVkb0VsZW1lbnRzJiZzKFtkLnRhcmdldF0sITApLGQudHlwZT09PSJhdHRyaWJ1dGVzIiYmSXJ0KGQudGFyZ2V0KSYmfkVyMS5pbmRleE9mKGQuYXR0cmlidXRlTmFtZSkpaWYoZC5hdHRyaWJ1dGVOYW1lPT09ImNsYXNzIiYmdmkxKGQudGFyZ2V0KSl7dmFyIGg9b1YoaDFlKGQudGFyZ2V0KSksZz1oLnByZWZpeCxiPWguaWNvbk5hbWU7ZC50YXJnZXQuc2V0QXR0cmlidXRlKG4xZSxnfHx1KSxiJiZkLnRhcmdldC5zZXRBdHRyaWJ1dGUobDFlLGIpfWVsc2UgeWkxKGQudGFyZ2V0KSYmaShkLnRhcmdldCl9KX19KSwkaSYmY1Yub2JzZXJ2ZShmLHtjaGlsZExpc3Q6ITAsYXR0cmlidXRlczohMCxjaGFyYWN0ZXJEYXRhOiEwLHN1YnRyZWU6ITB9KX19ZnVuY3Rpb24gU2kxKCl7Y1YmJmNWLmRpc2Nvbm5lY3QoKX1mdW5jdGlvbiBDaTEodCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoInN0eWxlIiksYT1bXTtyZXR1cm4gZSYmKGE9ZS5zcGxpdCgiOyIpLnJlZHVjZShmdW5jdGlvbihyLGkpe3ZhciBvPWkuc3BsaXQoIjoiKSxzPW9bMF0sbD1vLnNsaWNlKDEpO3JldHVybiBzJiZsLmxlbmd0aD4wJiYocltzXT1sLmpvaW4oIjoiKS50cmltKCkpLHJ9LHt9KSksYX1mdW5jdGlvbiBMaTEodCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcHJlZml4IiksYT10LmdldEF0dHJpYnV0ZSgiZGF0YS1pY29uIikscj10LmlubmVyVGV4dCE9PXZvaWQgMD90LmlubmVyVGV4dC50cmltKCk6IiIsaT1vVihoMWUodCkpO3JldHVybiBpLnByZWZpeHx8KGkucHJlZml4PWFzKCkpLGUmJmEmJihpLnByZWZpeD1lLGkuaWNvbk5hbWU9YSksaS5pY29uTmFtZSYmaS5wcmVmaXh8fChpLnByZWZpeCYmci5sZW5ndGg+MCYmKGkuaWNvbk5hbWU9UXIxKGkucHJlZml4LHQuaW5uZXJUZXh0KXx8dzFlKGkucHJlZml4LGJydCh0LmlubmVyVGV4dCkpKSwhaS5pY29uTmFtZSYmWmUuYXV0b0ZldGNoU3ZnJiZ0LmZpcnN0Q2hpbGQmJnQuZmlyc3RDaGlsZC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFJiYoaS5pY29uTmFtZT10LmZpcnN0Q2hpbGQuZGF0YSkpLGl9ZnVuY3Rpb24gVGkxKHQpe3ZhciBlPVk2KHQuYXR0cmlidXRlcykucmVkdWNlKGZ1bmN0aW9uKGEscil7cmV0dXJuIGEubmFtZSE9PSJjbGFzcyImJmEubmFtZSE9PSJzdHlsZSImJihhW3IubmFtZV09ci52YWx1ZSksYX0se30pO3JldHVybiBlfWZ1bmN0aW9uIF9pMSgpe3JldHVybntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHRyYW5zZm9ybTpqcixzeW1ib2w6ITEsbWFzazp7aWNvbk5hbWU6bnVsbCxwcmVmaXg6bnVsbCxyZXN0OltdfSxtYXNrSWQ6bnVsbCxleHRyYTp7Y2xhc3NlczpbXSxzdHlsZXM6e30sYXR0cmlidXRlczp7fX19fWZ1bmN0aW9uIHFydCh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e3N0eWxlUGFyc2VyOiEwfSxhPUxpMSh0KSxyPWEuaWNvbk5hbWUsaT1hLnByZWZpeCxvPWEucmVzdCxzPVRpMSh0KSxsPU0xZSgicGFyc2VOb2RlQXR0cmlidXRlcyIse30sdCksZj1lLnN0eWxlUGFyc2VyP0NpMSh0KTpbXTtyZXR1cm4gX2Uoe2ljb25OYW1lOnIscHJlZml4OmksdHJhbnNmb3JtOmpyLG1hc2s6e2ljb25OYW1lOm51bGwscHJlZml4Om51bGwscmVzdDpbXX0sbWFza0lkOm51bGwsc3ltYm9sOiExLGV4dHJhOntjbGFzc2VzOm8sc3R5bGVzOmYsYXR0cmlidXRlczpzfX0sbCl9ZnVuY3Rpb24gVnJ0KHQpe3ZhciBlPVplLmF1dG9SZXBsYWNlU3ZnPT09Im5lc3QiP3FydCh0LHtzdHlsZVBhcnNlcjohMX0pOnFydCh0KTtyZXR1cm5+ZS5leHRyYS5jbGFzc2VzLmluZGV4T2YobHJ0KT9ycygiZ2VuZXJhdGVMYXllcnNUZXh0Iix0LGUpOnJzKCJnZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb24iLHQsZSl9ZnVuY3Rpb24gJGkxKCl7cmV0dXJuW10uY29uY2F0KEphKFhhdCksSmEoSmF0KSl9ZnVuY3Rpb24gVXJ0KHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsO2lmKCEkaSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGE9ZDEuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdCxyPWZ1bmN0aW9uKGQpe3JldHVybiBhLmFkZCgiIi5jb25jYXQocnJ0LCItIikuY29uY2F0KGQpKX0saT1mdW5jdGlvbihkKXtyZXR1cm4gYS5yZW1vdmUoIiIuY29uY2F0KHJydCwiLSIpLmNvbmNhdChkKSl9LG89WmUuYXV0b0ZldGNoU3ZnPyRpMSgpOkRhdC5jb25jYXQoT2JqZWN0LmtleXMoQWkxKSk7by5pbmNsdWRlcygiZmEiKXx8by5wdXNoKCJmYSIpO3ZhciBzPVsiLiIuY29uY2F0KGxydCwiOm5vdChbIikuY29uY2F0KCRuLCJdKSIpXS5jb25jYXQoby5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIi4iLmNvbmNhdCh1LCI6bm90KFsiKS5jb25jYXQoJG4sIl0pIil9KSkuam9pbigiLCAiKTtpZihzLmxlbmd0aD09PTApcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBsPVtdO3RyeXtsPVk2KHQucXVlcnlTZWxlY3RvckFsbChzKSl9Y2F0Y2h7fWlmKGwubGVuZ3RoPjApcigicGVuZGluZyIpLGkoImNvbXBsZXRlIik7ZWxzZSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGY9XzFlLmJlZ2luKCJvblRyZWUiKSxjPWwucmVkdWNlKGZ1bmN0aW9uKHUsZCl7dHJ5e3ZhciBoPVZydChkKTtoJiZ1LnB1c2goaCl9Y2F0Y2goZyl7b3J0fHxnLm5hbWU9PT0iTWlzc2luZ0ljb24iJiZjb25zb2xlLmVycm9yKGcpfXJldHVybiB1fSxbXSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHUsZCl7UHJvbWlzZS5hbGwoYykudGhlbihmdW5jdGlvbihoKXtCcnQoaCxmdW5jdGlvbigpe3IoImFjdGl2ZSIpLHIoImNvbXBsZXRlIiksaSgicGVuZGluZyIpLHR5cGVvZiBlPT0iZnVuY3Rpb24iJiZlKCksZigpLHUoKX0pfSkuY2F0Y2goZnVuY3Rpb24oaCl7ZigpLGQoaCl9KX0pfWZ1bmN0aW9uIERpMSh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbDtWcnQodCkudGhlbihmdW5jdGlvbihhKXthJiZCcnQoW2FdLGUpfSl9ZnVuY3Rpb24gRWkxKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30scj0oZXx8e30pLmljb24/ZTp6MWUoZXx8e30pLGk9YS5tYXNrO3JldHVybiBpJiYoaT0oaXx8e30pLmljb24/aTp6MWUoaXx8e30pKSx0KHIsX2UoX2Uoe30sYSkse30se21hc2s6aX0pKX19ZnVuY3Rpb24gUmkxKHQpe3ZhciBlPXQucmVwbGFjZShqcnQsIiIpO3JldHVybiBicnQoSmEoZSlbMF18fCIiKX1mdW5jdGlvbiBIaTEodCl7dmFyIGU9dC5nZXRQcm9wZXJ0eVZhbHVlKCJmb250LWZlYXR1cmUtc2V0dGluZ3MiKS5pbmNsdWRlcygic3MwMSIpLGE9dC5nZXRQcm9wZXJ0eVZhbHVlKCJjb250ZW50Iikscj1hLnJlcGxhY2UoanJ0LCIiKSxpPXIuY29kZVBvaW50QXQoMCksbz1pPj1XcnRbMF0mJmk8PVdydFsxXSxzPXIubGVuZ3RoPT09Mj9yWzBdPT09clsxXTohMTtyZXR1cm4gb3x8c3x8ZX1mdW5jdGlvbiBxaTEodCxlKXt2YXIgYT10LnJlcGxhY2UoL15bJyJdfFsnIl0kL2csIiIpLnRvTG93ZXJDYXNlKCkscj1wYXJzZUludChlKSxpPWlzTmFOKHIpPyJub3JtYWwiOnI7cmV0dXJuKEQxZVthXXx8e30pW2ldfHxCaTFbYV19ZnVuY3Rpb24gWXJ0KHQsZSl7dmFyIGE9IiIuY29uY2F0KENyMSkuY29uY2F0KGUucmVwbGFjZSgiOiIsIi0iKSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsaSl7aWYodC5nZXRBdHRyaWJ1dGUoYSkhPT1udWxsKXJldHVybiByKCk7dmFyIG89WTYodC5jaGlsZHJlbikscz1vLmZpbHRlcihmdW5jdGlvbih6KXtyZXR1cm4gei5nZXRBdHRyaWJ1dGUoczFlKT09PWV9KVswXSxsPWVzLmdldENvbXB1dGVkU3R5bGUodCxlKSxmPWwuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC1mYW1pbHkiKSxjPWYubWF0Y2goJHIxKSx1PWwuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC13ZWlnaHQiKSxkPWwuZ2V0UHJvcGVydHlWYWx1ZSgiY29udGVudCIpO2lmKHMmJiFjKXJldHVybiB0LnJlbW92ZUNoaWxkKHMpLHIoKTtpZihjJiZkIT09Im5vbmUiJiZkIT09IiIpe3ZhciBoPWwuZ2V0UHJvcGVydHlWYWx1ZSgiY29udGVudCIpLGc9cWkxKGYsdSksYj1SaTEoaCkseD1jWzBdLnN0YXJ0c1dpdGgoIkZvbnRBd2Vzb21lIiksbT1IaTEobCksdj13MWUoZyxiKSx5PXY7aWYoeCl7dmFyIHc9S3IxKGIpO3cuaWNvbk5hbWUmJncucHJlZml4JiYodj13Lmljb25OYW1lLGc9dy5wcmVmaXgpfWlmKHYmJiFtJiYoIXN8fHMuZ2V0QXR0cmlidXRlKG4xZSkhPT1nfHxzLmdldEF0dHJpYnV0ZShsMWUpIT09eSkpe3Quc2V0QXR0cmlidXRlKGEseSkscyYmdC5yZW1vdmVDaGlsZChzKTt2YXIgRT1faTEoKSxDPUUuZXh0cmE7Qy5hdHRyaWJ1dGVzW3MxZV09ZSxMMWUodixnKS50aGVuKGZ1bmN0aW9uKHope3ZhciBQPWsxZShfZShfZSh7fSxFKSx7fSx7aWNvbnM6e21haW46eixtYXNrOlRydCgpfSxwcmVmaXg6ZyxpY29uTmFtZTp5LGV4dHJhOkMsd2F0Y2hhYmxlOiEwfSkpLF89ZDEuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO2U9PT0iOjpiZWZvcmUiP3QuaW5zZXJ0QmVmb3JlKF8sdC5maXJzdENoaWxkKTp0LmFwcGVuZENoaWxkKF8pLF8ub3V0ZXJIVE1MPVAubWFwKGZ1bmN0aW9uKCQpe3JldHVybiBVZCgkKX0pLmpvaW4oYApgKSx0LnJlbW92ZUF0dHJpYnV0ZShhKSxyKCl9KS5jYXRjaChpKX1lbHNlIHIoKX1lbHNlIHIoKX0pfWZ1bmN0aW9uIFZpMSh0KXtyZXR1cm4gUHJvbWlzZS5hbGwoW1lydCh0LCI6OmJlZm9yZSIpLFlydCh0LCI6OmFmdGVyIildKX1mdW5jdGlvbiBVaTEodCl7cmV0dXJuIHQucGFyZW50Tm9kZSE9PWRvY3VtZW50LmhlYWQmJiF+VHIxLmluZGV4T2YodC50YWdOYW1lLnRvVXBwZXJDYXNlKCkpJiYhdC5nZXRBdHRyaWJ1dGUoczFlKSYmKCF0LnBhcmVudE5vZGV8fHQucGFyZW50Tm9kZS50YWdOYW1lIT09InN2ZyIpfWZ1bmN0aW9uIFpydCh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7aWYoJGkpe3ZhciBhO2lmKGUpYT10O2Vsc2UgaWYoWmUuc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbilhPXQucXVlcnlTZWxlY3RvckFsbCgiKiIpO2Vsc2V7dmFyIHI9bmV3IFNldCxpPVhxKGRvY3VtZW50LnN0eWxlU2hlZXRzKSxvO3RyeXtmb3IoaS5zKCk7IShvPWkubigpKS5kb25lOyl7dmFyIHM9by52YWx1ZTt0cnl7dmFyIGw9WHEocy5jc3NSdWxlcyksZjt0cnl7Zm9yKGwucygpOyEoZj1sLm4oKSkuZG9uZTspe3ZhciBjPWYudmFsdWUsdT1XaTEoYy5zZWxlY3RvclRleHQpLGQ9WHEodSksaDt0cnl7Zm9yKGQucygpOyEoaD1kLm4oKSkuZG9uZTspe3ZhciBnPWgudmFsdWU7ci5hZGQoZyl9fWNhdGNoKHgpe2QuZSh4KX1maW5hbGx5e2QuZigpfX19Y2F0Y2goeCl7bC5lKHgpfWZpbmFsbHl7bC5mKCl9fWNhdGNoKHgpe1plLnNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MmJmNvbnNvbGUud2FybigiRm9udCBBd2Vzb21lOiBjYW5ub3QgcGFyc2Ugc3R5bGVzaGVldDogIi5jb25jYXQocy5ocmVmLCIgKCIpLmNvbmNhdCh4Lm1lc3NhZ2UsYCkKSWYgaXQgZGVjbGFyZXMgYW55IEZvbnQgQXdlc29tZSBDU1MgcHNldWRvLWVsZW1lbnRzLCB0aGV5IHdpbGwgbm90IGJlIHJlbmRlcmVkIGFzIFNWRyBpY29ucy4gQWRkIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiIHRvIHRoZSA8bGluaz4sIGVuYWJsZSBzZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuIGZvciBzbG93ZXIgYnV0IG1vcmUgdGhvcm91Z2ggRE9NIHBhcnNpbmcsIG9yIHN1cHByZXNzIHRoaXMgd2FybmluZyBieSBzZXR0aW5nIHNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MgdG8gZmFsc2UuYCkpfX19Y2F0Y2goeCl7aS5lKHgpfWZpbmFsbHl7aS5mKCl9aWYoIXIuc2l6ZSlyZXR1cm47dmFyIGI9QXJyYXkuZnJvbShyKS5qb2luKCIsICIpO3RyeXthPXQucXVlcnlTZWxlY3RvckFsbChiKX1jYXRjaHt9fXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih4LG0pe3ZhciB2PVk2KGEpLmZpbHRlcihVaTEpLm1hcChWaTEpLHk9XzFlLmJlZ2luKCJzZWFyY2hQc2V1ZG9FbGVtZW50cyIpO1JydCgpLFByb21pc2UuYWxsKHYpLnRoZW4oZnVuY3Rpb24oKXt5KCksJDFlKCkseCgpfSkuY2F0Y2goZnVuY3Rpb24oKXt5KCksJDFlKCksbSgpfSl9KX19ZnVuY3Rpb24gS3J0KHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gdC5hdHRyaWJ1dGVzJiYodC5hdHRyaWJ1dGVzLmZpbGx8fGUpJiYodC5hdHRyaWJ1dGVzLmZpbGw9ImJsYWNrIiksdH1mdW5jdGlvbiBYaTEodCl7cmV0dXJuIHQudGFnPT09ImciP3QuY2hpbGRyZW46W3RdfXZhciB6YXQsdDFlLGthdCxTYXQsQ2F0LFEyMSxMYXQsVGF0LGVzLGQxLF9hdCxlVixPNDIsJGksQWF0LGExZSxLMjEsSjIxLCRhdCxlYTEsRGF0LGkyLFJkLEVhdCxOYXQsUGF0LElhdCxGYXQsT2F0LEJhdCxSYXQsSGF0LHFhdCxWYXQsVWF0LGphdCxXYXQsR2F0LFlhdCx0YTEsYWExLHJhMSxpYTEsb2ExLHNhMSxuYTEsbGExLGNhMSxkYTEsZmExLHVhMSxwYTEsaGExLG1hMSxnYTEseGExLGJhMSxaYXQsQjQyLHZhMSx5YTEsd2ExLE1hMSxYYXQsUWF0LHphMSxrYTEsU2ExLENhMSxMYTEsUjQyLFRhMSxfYTEsQWExLEthdCxyMWUsdFYsJGExLERhMSxFYTEsTmExLFBhMSxJYTEsRmExLE9hMSxCYTEsUmExLEhhMSxxYTEsVmExLFVhMSxqYTEsV2ExLEdhMSxZYTEsWmExLFhhMSxRYTEsS2ExLEphMSxlcjEsdHIxLGFyMSxycjEsaXIxLG9yMSxzcjEsbnIxLGxyMSxjcjEsZHIxLGZyMSx1cjEscHIxLEg0MixocjEsbXIxLGdyMSx4cjEscTQyLGJyMSx2cjEsaTFlLHlyMSxKYXQsd3IxLGVydCxNcjEsenIxLGtyMSxTcjEsRGksbzFlLHRydCxhcnQsJG4sczFlLENyMSxuMWUsbDFlLHJydCxMcjEsVHIxLGlydCxvcnQsc3J0LF9yMSxjMWUsbnJ0LGQxZSxmMWUsdTFlLFY0MixBcjEsbHJ0LCRyMSxEcjEsVTQyLEVyMSxwMWUsTnIxLHFkLGRydCxHNixaZSxWZCx0cyxqcixCcjEsVnIxLGhydCxVcjEsRWksZXIsbXJ0LGdydCxyVixXcjEseDFlLHYxZSx0cixqNDIsVzQyLGpkLEdyMSx5cnQsWXIxLHkxZSx3cnQsTXJ0LHpydCxrcnQsU3J0LENydCxUcnQsQXJ0LGFpMSxyaTEsb2kxLCRydCxaNixYNixzaTEsRHJ0LGxpMSxjaTEsZGkxLHRhLGZpMSxTMWUsZ2kxLE5ydCxUMWUsV2QsYmkxLFBydCxfMWUsblYsbFYsQTFlLGNWLEFpMSxOaTEsUGkxLElpMSxGaTEsT2kxLGpydCxXcnQsR3J0LEQxZSxCaTEsamkxLFdpMSxHaTEsWHJ0LFlpMSxRcnQsWmkxLEUxZSxRaTEsS2kxLEppMSxlbzEsdG8xLGFvMSxybzEsaW8xLG9vMSxzbzEsbm8xLE4xZSxsbzEsY28xLGRvMSxjcnQsSnJ0PW4oKCk9Pnt6YXQ9ZnVuY3Rpb24oKXt9LHQxZT17fSxrYXQ9e30sU2F0PW51bGwsQ2F0PXttYXJrOnphdCxtZWFzdXJlOnphdH07dHJ5e3R5cGVvZiB3aW5kb3c8InUiJiYodDFlPXdpbmRvdyksdHlwZW9mIGRvY3VtZW50PCJ1IiYmKGthdD1kb2N1bWVudCksdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiJiYoU2F0PU11dGF0aW9uT2JzZXJ2ZXIpLHR5cGVvZiBwZXJmb3JtYW5jZTwidSImJihDYXQ9cGVyZm9ybWFuY2UpfWNhdGNoe31RMjE9dDFlLm5hdmlnYXRvcnx8e30sTGF0PVEyMS51c2VyQWdlbnQsVGF0PUxhdD09PXZvaWQgMD8iIjpMYXQsZXM9dDFlLGQxPWthdCxfYXQ9U2F0LGVWPUNhdCxPNDI9ISFlcy5kb2N1bWVudCwkaT0hIWQxLmRvY3VtZW50RWxlbWVudCYmISFkMS5oZWFkJiZ0eXBlb2YgZDEuYWRkRXZlbnRMaXN0ZW5lcj09ImZ1bmN0aW9uIiYmdHlwZW9mIGQxLmNyZWF0ZUVsZW1lbnQ9PSJmdW5jdGlvbiIsQWF0PX5UYXQuaW5kZXhPZigiTVNJRSIpfHx+VGF0LmluZGV4T2YoIlRyaWRlbnQvIiksSzIxPS9mYShrfGtkfHN8cnxsfHR8ZHxkcnxkbHxkdHxifHNscnxzbHByfHdzYnx0bHxuc3xuZHN8ZXN8anJ8amZyfGpkcnx1c2J8dWZzYnx1ZHNifGNyfHNzfHNyfHNsfHN0fHNkc3xzZHJ8c2RsfHNkdCk/W1wtXCBdLyxKMjE9L0ZvbnQgP0F3ZXNvbWUgPyhbNTY3IF0qKShTb2xpZHxSZWd1bGFyfExpZ2h0fFRoaW58RHVvdG9uZXxCcmFuZHN8RnJlZXxQcm98U2hhcnAgRHVvdG9uZXxTaGFycHxLaXR8Tm90ZG9nIER1b3xOb3Rkb2d8Q2hpc2VsfEV0Y2h8VGh1bWJwcmludHxKZWxseSBGaWxsfEplbGx5IER1b3xKZWxseXxVdGlsaXR5fFV0aWxpdHkgRmlsbHxVdGlsaXR5IER1b3xTbGFiIFByZXNzfFNsYWJ8V2hpdGVib2FyZCk/LiovaSwkYXQ9e2NsYXNzaWM6e2ZhOiJzb2xpZCIsZmFzOiJzb2xpZCIsImZhLXNvbGlkIjoic29saWQiLGZhcjoicmVndWxhciIsImZhLXJlZ3VsYXIiOiJyZWd1bGFyIixmYWw6ImxpZ2h0IiwiZmEtbGlnaHQiOiJsaWdodCIsZmF0OiJ0aGluIiwiZmEtdGhpbiI6InRoaW4iLGZhYjoiYnJhbmRzIiwiZmEtYnJhbmRzIjoiYnJhbmRzIn0sZHVvdG9uZTp7ZmE6InNvbGlkIixmYWQ6InNvbGlkIiwiZmEtc29saWQiOiJzb2xpZCIsImZhLWR1b3RvbmUiOiJzb2xpZCIsZmFkcjoicmVndWxhciIsImZhLXJlZ3VsYXIiOiJyZWd1bGFyIixmYWRsOiJsaWdodCIsImZhLWxpZ2h0IjoibGlnaHQiLGZhZHQ6InRoaW4iLCJmYS10aGluIjoidGhpbiJ9LHNoYXJwOntmYToic29saWQiLGZhc3M6InNvbGlkIiwiZmEtc29saWQiOiJzb2xpZCIsZmFzcjoicmVndWxhciIsImZhLXJlZ3VsYXIiOiJyZWd1bGFyIixmYXNsOiJsaWdodCIsImZhLWxpZ2h0IjoibGlnaHQiLGZhc3Q6InRoaW4iLCJmYS10aGluIjoidGhpbiJ9LCJzaGFycC1kdW90b25lIjp7ZmE6InNvbGlkIixmYXNkczoic29saWQiLCJmYS1zb2xpZCI6InNvbGlkIixmYXNkcjoicmVndWxhciIsImZhLXJlZ3VsYXIiOiJyZWd1bGFyIixmYXNkbDoibGlnaHQiLCJmYS1saWdodCI6ImxpZ2h0IixmYXNkdDoidGhpbiIsImZhLXRoaW4iOiJ0aGluIn0sc2xhYjp7ImZhLXJlZ3VsYXIiOiJyZWd1bGFyIixmYXNscjoicmVndWxhciJ9LCJzbGFiLXByZXNzIjp7ImZhLXJlZ3VsYXIiOiJyZWd1bGFyIixmYXNscHI6InJlZ3VsYXIifSx0aHVtYnByaW50OnsiZmEtbGlnaHQiOiJsaWdodCIsZmF0bDoibGlnaHQifSx3aGl0ZWJvYXJkOnsiZmEtc2VtaWJvbGQiOiJzZW1pYm9sZCIsZmF3c2I6InNlbWlib2xkIn0sbm90ZG9nOnsiZmEtc29saWQiOiJzb2xpZCIsZmFuczoic29saWQifSwibm90ZG9nLWR1byI6eyJmYS1zb2xpZCI6InNvbGlkIixmYW5kczoic29saWQifSxldGNoOnsiZmEtc29saWQiOiJzb2xpZCIsZmFlczoic29saWQifSxqZWxseTp7ImZhLXJlZ3VsYXIiOiJyZWd1bGFyIixmYWpyOiJyZWd1bGFyIn0sImplbGx5LWZpbGwiOnsiZmEtcmVndWxhciI6InJlZ3VsYXIiLGZhamZyOiJyZWd1bGFyIn0sImplbGx5LWR1byI6eyJmYS1yZWd1bGFyIjoicmVndWxhciIsZmFqZHI6InJlZ3VsYXIifSxjaGlzZWw6eyJmYS1yZWd1bGFyIjoicmVndWxhciIsZmFjcjoicmVndWxhciJ9LHV0aWxpdHk6eyJmYS1zZW1pYm9sZCI6InNlbWlib2xkIixmYXVzYjoic2VtaWJvbGQifSwidXRpbGl0eS1kdW8iOnsiZmEtc2VtaWJvbGQiOiJzZW1pYm9sZCIsZmF1ZHNiOiJzZW1pYm9sZCJ9LCJ1dGlsaXR5LWZpbGwiOnsiZmEtc2VtaWJvbGQiOiJzZW1pYm9sZCIsZmF1ZnNiOiJzZW1pYm9sZCJ9fSxlYTE9e0dST1VQOiJkdW90b25lLWdyb3VwIixTV0FQX09QQUNJVFk6InN3YXAtb3BhY2l0eSIsUFJJTUFSWToicHJpbWFyeSIsU0VDT05EQVJZOiJzZWNvbmRhcnkifSxEYXQ9WyJmYS1jbGFzc2ljIiwiZmEtZHVvdG9uZSIsImZhLXNoYXJwIiwiZmEtc2hhcnAtZHVvdG9uZSIsImZhLXRodW1icHJpbnQiLCJmYS13aGl0ZWJvYXJkIiwiZmEtbm90ZG9nIiwiZmEtbm90ZG9nLWR1byIsImZhLWNoaXNlbCIsImZhLWV0Y2giLCJmYS1qZWxseSIsImZhLWplbGx5LWZpbGwiLCJmYS1qZWxseS1kdW8iLCJmYS1zbGFiIiwiZmEtc2xhYi1wcmVzcyIsImZhLXV0aWxpdHkiLCJmYS11dGlsaXR5LWR1byIsImZhLXV0aWxpdHktZmlsbCJdLGkyPSJjbGFzc2ljIixSZD0iZHVvdG9uZSIsRWF0PSJzaGFycCIsTmF0PSJzaGFycC1kdW90b25lIixQYXQ9ImNoaXNlbCIsSWF0PSJldGNoIixGYXQ9ImplbGx5IixPYXQ9ImplbGx5LWR1byIsQmF0PSJqZWxseS1maWxsIixSYXQ9Im5vdGRvZyIsSGF0PSJub3Rkb2ctZHVvIixxYXQ9InNsYWIiLFZhdD0ic2xhYi1wcmVzcyIsVWF0PSJ0aHVtYnByaW50IixqYXQ9InV0aWxpdHkiLFdhdD0idXRpbGl0eS1kdW8iLEdhdD0idXRpbGl0eS1maWxsIixZYXQ9IndoaXRlYm9hcmQiLHRhMT0iQ2xhc3NpYyIsYWExPSJEdW90b25lIixyYTE9IlNoYXJwIixpYTE9IlNoYXJwIER1b3RvbmUiLG9hMT0iQ2hpc2VsIixzYTE9IkV0Y2giLG5hMT0iSmVsbHkiLGxhMT0iSmVsbHkgRHVvIixjYTE9IkplbGx5IEZpbGwiLGRhMT0iTm90ZG9nIixmYTE9Ik5vdGRvZyBEdW8iLHVhMT0iU2xhYiIscGExPSJTbGFiIFByZXNzIixoYTE9IlRodW1icHJpbnQiLG1hMT0iVXRpbGl0eSIsZ2ExPSJVdGlsaXR5IER1byIseGExPSJVdGlsaXR5IEZpbGwiLGJhMT0iV2hpdGVib2FyZCIsWmF0PVtpMixSZCxFYXQsTmF0LFBhdCxJYXQsRmF0LE9hdCxCYXQsUmF0LEhhdCxxYXQsVmF0LFVhdCxqYXQsV2F0LEdhdCxZYXRdLEI0Mj0oYTFlPXt9LG10KG10KG10KG10KG10KG10KG10KG10KG10KG10KGExZSxpMix0YTEpLFJkLGFhMSksRWF0LHJhMSksTmF0LGlhMSksUGF0LG9hMSksSWF0LHNhMSksRmF0LG5hMSksT2F0LGxhMSksQmF0LGNhMSksUmF0LGRhMSksbXQobXQobXQobXQobXQobXQobXQobXQoYTFlLEhhdCxmYTEpLHFhdCx1YTEpLFZhdCxwYTEpLFVhdCxoYTEpLGphdCxtYTEpLFdhdCxnYTEpLEdhdCx4YTEpLFlhdCxiYTEpKSx2YTE9e2NsYXNzaWM6ezkwMDoiZmFzIiw0MDA6ImZhciIsbm9ybWFsOiJmYXIiLDMwMDoiZmFsIiwxMDA6ImZhdCJ9LGR1b3RvbmU6ezkwMDoiZmFkIiw0MDA6ImZhZHIiLDMwMDoiZmFkbCIsMTAwOiJmYWR0In0sc2hhcnA6ezkwMDoiZmFzcyIsNDAwOiJmYXNyIiwzMDA6ImZhc2wiLDEwMDoiZmFzdCJ9LCJzaGFycC1kdW90b25lIjp7OTAwOiJmYXNkcyIsNDAwOiJmYXNkciIsMzAwOiJmYXNkbCIsMTAwOiJmYXNkdCJ9LHNsYWI6ezQwMDoiZmFzbHIifSwic2xhYi1wcmVzcyI6ezQwMDoiZmFzbHByIn0sd2hpdGVib2FyZDp7NjAwOiJmYXdzYiJ9LHRodW1icHJpbnQ6ezMwMDoiZmF0bCJ9LG5vdGRvZzp7OTAwOiJmYW5zIn0sIm5vdGRvZy1kdW8iOns5MDA6ImZhbmRzIn0sZXRjaDp7OTAwOiJmYWVzIn0sY2hpc2VsOns0MDA6ImZhY3IifSxqZWxseTp7NDAwOiJmYWpyIn0sImplbGx5LWZpbGwiOns0MDA6ImZhamZyIn0sImplbGx5LWR1byI6ezQwMDoiZmFqZHIifSx1dGlsaXR5Ons2MDA6ImZhdXNiIn0sInV0aWxpdHktZHVvIjp7NjAwOiJmYXVkc2IifSwidXRpbGl0eS1maWxsIjp7NjAwOiJmYXVmc2IifX0seWExPXsiRm9udCBBd2Vzb21lIDcgRnJlZSI6ezkwMDoiZmFzIiw0MDA6ImZhciJ9LCJGb250IEF3ZXNvbWUgNyBQcm8iOns5MDA6ImZhcyIsNDAwOiJmYXIiLG5vcm1hbDoiZmFyIiwzMDA6ImZhbCIsMTAwOiJmYXQifSwiRm9udCBBd2Vzb21lIDcgQnJhbmRzIjp7NDAwOiJmYWIiLG5vcm1hbDoiZmFiIn0sIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOns5MDA6ImZhZCIsNDAwOiJmYWRyIixub3JtYWw6ImZhZHIiLDMwMDoiZmFkbCIsMTAwOiJmYWR0In0sIkZvbnQgQXdlc29tZSA3IFNoYXJwIjp7OTAwOiJmYXNzIiw0MDA6ImZhc3IiLG5vcm1hbDoiZmFzciIsMzAwOiJmYXNsIiwxMDA6ImZhc3QifSwiRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSI6ezkwMDoiZmFzZHMiLDQwMDoiZmFzZHIiLG5vcm1hbDoiZmFzZHIiLDMwMDoiZmFzZGwiLDEwMDoiZmFzZHQifSwiRm9udCBBd2Vzb21lIDcgSmVsbHkiOns0MDA6ImZhanIiLG5vcm1hbDoiZmFqciJ9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsIjp7NDAwOiJmYWpmciIsbm9ybWFsOiJmYWpmciJ9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8iOns0MDA6ImZhamRyIixub3JtYWw6ImZhamRyIn0sIkZvbnQgQXdlc29tZSA3IFNsYWIiOns0MDA6ImZhc2xyIixub3JtYWw6ImZhc2xyIn0sIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOns0MDA6ImZhc2xwciIsbm9ybWFsOiJmYXNscHIifSwiRm9udCBBd2Vzb21lIDcgVGh1bWJwcmludCI6ezMwMDoiZmF0bCIsbm9ybWFsOiJmYXRsIn0sIkZvbnQgQXdlc29tZSA3IE5vdGRvZyI6ezkwMDoiZmFucyIsbm9ybWFsOiJmYW5zIn0sIkZvbnQgQXdlc29tZSA3IE5vdGRvZyBEdW8iOns5MDA6ImZhbmRzIixub3JtYWw6ImZhbmRzIn0sIkZvbnQgQXdlc29tZSA3IEV0Y2giOns5MDA6ImZhZXMiLG5vcm1hbDoiZmFlcyJ9LCJGb250IEF3ZXNvbWUgNyBDaGlzZWwiOns0MDA6ImZhY3IiLG5vcm1hbDoiZmFjciJ9LCJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjp7NjAwOiJmYXdzYiIsbm9ybWFsOiJmYXdzYiJ9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5Ijp7NjAwOiJmYXVzYiIsbm9ybWFsOiJmYXVzYiJ9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI6ezYwMDoiZmF1ZHNiIixub3JtYWw6ImZhdWRzYiJ9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwiOns2MDA6ImZhdWZzYiIsbm9ybWFsOiJmYXVmc2IifX0sd2ExPW5ldyBNYXAoW1siY2xhc3NpYyIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYXMiLGRlZmF1bHRTdHlsZUlkOiJzb2xpZCIsc3R5bGVJZHM6WyJzb2xpZCIsInJlZ3VsYXIiLCJsaWdodCIsInRoaW4iLCJicmFuZHMiXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbImR1b3RvbmUiLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDoiZmFkIixkZWZhdWx0U3R5bGVJZDoic29saWQiLHN0eWxlSWRzOlsic29saWQiLCJyZWd1bGFyIiwibGlnaHQiLCJ0aGluIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sWyJzaGFycCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYXNzIixkZWZhdWx0U3R5bGVJZDoic29saWQiLHN0eWxlSWRzOlsic29saWQiLCJyZWd1bGFyIiwibGlnaHQiLCJ0aGluIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sWyJzaGFycC1kdW90b25lIix7ZGVmYXVsdFNob3J0UHJlZml4SWQ6ImZhc2RzIixkZWZhdWx0U3R5bGVJZDoic29saWQiLHN0eWxlSWRzOlsic29saWQiLCJyZWd1bGFyIiwibGlnaHQiLCJ0aGluIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sWyJjaGlzZWwiLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDoiZmFjciIsZGVmYXVsdFN0eWxlSWQ6InJlZ3VsYXIiLHN0eWxlSWRzOlsicmVndWxhciJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFsiZXRjaCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYWVzIixkZWZhdWx0U3R5bGVJZDoic29saWQiLHN0eWxlSWRzOlsic29saWQiXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbImplbGx5Iix7ZGVmYXVsdFNob3J0UHJlZml4SWQ6ImZhanIiLGRlZmF1bHRTdHlsZUlkOiJyZWd1bGFyIixzdHlsZUlkczpbInJlZ3VsYXIiXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbImplbGx5LWR1byIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYWpkciIsZGVmYXVsdFN0eWxlSWQ6InJlZ3VsYXIiLHN0eWxlSWRzOlsicmVndWxhciJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFsiamVsbHktZmlsbCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYWpmciIsZGVmYXVsdFN0eWxlSWQ6InJlZ3VsYXIiLHN0eWxlSWRzOlsicmVndWxhciJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFsibm90ZG9nIix7ZGVmYXVsdFNob3J0UHJlZml4SWQ6ImZhbnMiLGRlZmF1bHRTdHlsZUlkOiJzb2xpZCIsc3R5bGVJZHM6WyJzb2xpZCJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFsibm90ZG9nLWR1byIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYW5kcyIsZGVmYXVsdFN0eWxlSWQ6InNvbGlkIixzdHlsZUlkczpbInNvbGlkIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sWyJzbGFiIix7ZGVmYXVsdFNob3J0UHJlZml4SWQ6ImZhc2xyIixkZWZhdWx0U3R5bGVJZDoicmVndWxhciIsc3R5bGVJZHM6WyJyZWd1bGFyIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sWyJzbGFiLXByZXNzIix7ZGVmYXVsdFNob3J0UHJlZml4SWQ6ImZhc2xwciIsZGVmYXVsdFN0eWxlSWQ6InJlZ3VsYXIiLHN0eWxlSWRzOlsicmVndWxhciJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFsidGh1bWJwcmludCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYXRsIixkZWZhdWx0U3R5bGVJZDoibGlnaHQiLHN0eWxlSWRzOlsibGlnaHQiXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDozMDB9XSxbInV0aWxpdHkiLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDoiZmF1c2IiLGRlZmF1bHRTdHlsZUlkOiJzZW1pYm9sZCIsc3R5bGVJZHM6WyJzZW1pYm9sZCJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjYwMH1dLFsidXRpbGl0eS1kdW8iLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDoiZmF1ZHNiIixkZWZhdWx0U3R5bGVJZDoic2VtaWJvbGQiLHN0eWxlSWRzOlsic2VtaWJvbGQiXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbInV0aWxpdHktZmlsbCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYXVmc2IiLGRlZmF1bHRTdHlsZUlkOiJzZW1pYm9sZCIsc3R5bGVJZHM6WyJzZW1pYm9sZCJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjYwMH1dLFsid2hpdGVib2FyZCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYXdzYiIsZGVmYXVsdFN0eWxlSWQ6InNlbWlib2xkIixzdHlsZUlkczpbInNlbWlib2xkIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NjAwfV1dKSxNYTE9e2NoaXNlbDp7cmVndWxhcjoiZmFjciJ9LGNsYXNzaWM6e2JyYW5kczoiZmFiIixsaWdodDoiZmFsIixyZWd1bGFyOiJmYXIiLHNvbGlkOiJmYXMiLHRoaW46ImZhdCJ9LGR1b3RvbmU6e2xpZ2h0OiJmYWRsIixyZWd1bGFyOiJmYWRyIixzb2xpZDoiZmFkIix0aGluOiJmYWR0In0sZXRjaDp7c29saWQ6ImZhZXMifSxqZWxseTp7cmVndWxhcjoiZmFqciJ9LCJqZWxseS1kdW8iOntyZWd1bGFyOiJmYWpkciJ9LCJqZWxseS1maWxsIjp7cmVndWxhcjoiZmFqZnIifSxub3Rkb2c6e3NvbGlkOiJmYW5zIn0sIm5vdGRvZy1kdW8iOntzb2xpZDoiZmFuZHMifSxzaGFycDp7bGlnaHQ6ImZhc2wiLHJlZ3VsYXI6ImZhc3IiLHNvbGlkOiJmYXNzIix0aGluOiJmYXN0In0sInNoYXJwLWR1b3RvbmUiOntsaWdodDoiZmFzZGwiLHJlZ3VsYXI6ImZhc2RyIixzb2xpZDoiZmFzZHMiLHRoaW46ImZhc2R0In0sc2xhYjp7cmVndWxhcjoiZmFzbHIifSwic2xhYi1wcmVzcyI6e3JlZ3VsYXI6ImZhc2xwciJ9LHRodW1icHJpbnQ6e2xpZ2h0OiJmYXRsIn0sdXRpbGl0eTp7c2VtaWJvbGQ6ImZhdXNiIn0sInV0aWxpdHktZHVvIjp7c2VtaWJvbGQ6ImZhdWRzYiJ9LCJ1dGlsaXR5LWZpbGwiOntzZW1pYm9sZDoiZmF1ZnNiIn0sd2hpdGVib2FyZDp7c2VtaWJvbGQ6ImZhd3NiIn19LFhhdD1bImZhayIsImZhLWtpdCIsImZha2QiLCJmYS1raXQtZHVvdG9uZSJdLFFhdD17a2l0OntmYWs6ImtpdCIsImZhLWtpdCI6ImtpdCJ9LCJraXQtZHVvdG9uZSI6e2Zha2Q6ImtpdC1kdW90b25lIiwiZmEta2l0LWR1b3RvbmUiOiJraXQtZHVvdG9uZSJ9fSx6YTE9WyJraXQiXSxrYTE9ImtpdCIsU2ExPSJraXQtZHVvdG9uZSIsQ2ExPSJLaXQiLExhMT0iS2l0IER1b3RvbmUiLFI0Mj1tdChtdCh7fSxrYTEsQ2ExKSxTYTEsTGExKSxUYTE9e2tpdDp7ImZhLWtpdCI6ImZhayJ9LCJraXQtZHVvdG9uZSI6eyJmYS1raXQtZHVvdG9uZSI6ImZha2QifX0sX2ExPXsiRm9udCBBd2Vzb21lIEtpdCI6ezQwMDoiZmFrIixub3JtYWw6ImZhayJ9LCJGb250IEF3ZXNvbWUgS2l0IER1b3RvbmUiOns0MDA6ImZha2QiLG5vcm1hbDoiZmFrZCJ9fSxBYTE9e2tpdDp7ZmFrOiJmYS1raXQifSwia2l0LWR1b3RvbmUiOntmYWtkOiJmYS1raXQtZHVvdG9uZSJ9fSxLYXQ9e2tpdDp7a2l0OiJmYWsifSwia2l0LWR1b3RvbmUiOnsia2l0LWR1b3RvbmUiOiJmYWtkIn19LHRWPXtHUk9VUDoiZHVvdG9uZS1ncm91cCIsU1dBUF9PUEFDSVRZOiJzd2FwLW9wYWNpdHkiLFBSSU1BUlk6InByaW1hcnkiLFNFQ09OREFSWToic2Vjb25kYXJ5In0sJGExPVsiZmEtY2xhc3NpYyIsImZhLWR1b3RvbmUiLCJmYS1zaGFycCIsImZhLXNoYXJwLWR1b3RvbmUiLCJmYS10aHVtYnByaW50IiwiZmEtd2hpdGVib2FyZCIsImZhLW5vdGRvZyIsImZhLW5vdGRvZy1kdW8iLCJmYS1jaGlzZWwiLCJmYS1ldGNoIiwiZmEtamVsbHkiLCJmYS1qZWxseS1maWxsIiwiZmEtamVsbHktZHVvIiwiZmEtc2xhYiIsImZhLXNsYWItcHJlc3MiLCJmYS11dGlsaXR5IiwiZmEtdXRpbGl0eS1kdW8iLCJmYS11dGlsaXR5LWZpbGwiXSxEYTE9ImNsYXNzaWMiLEVhMT0iZHVvdG9uZSIsTmExPSJzaGFycCIsUGExPSJzaGFycC1kdW90b25lIixJYTE9ImNoaXNlbCIsRmExPSJldGNoIixPYTE9ImplbGx5IixCYTE9ImplbGx5LWR1byIsUmExPSJqZWxseS1maWxsIixIYTE9Im5vdGRvZyIscWExPSJub3Rkb2ctZHVvIixWYTE9InNsYWIiLFVhMT0ic2xhYi1wcmVzcyIsamExPSJ0aHVtYnByaW50IixXYTE9InV0aWxpdHkiLEdhMT0idXRpbGl0eS1kdW8iLFlhMT0idXRpbGl0eS1maWxsIixaYTE9IndoaXRlYm9hcmQiLFhhMT0iQ2xhc3NpYyIsUWExPSJEdW90b25lIixLYTE9IlNoYXJwIixKYTE9IlNoYXJwIER1b3RvbmUiLGVyMT0iQ2hpc2VsIix0cjE9IkV0Y2giLGFyMT0iSmVsbHkiLHJyMT0iSmVsbHkgRHVvIixpcjE9IkplbGx5IEZpbGwiLG9yMT0iTm90ZG9nIixzcjE9Ik5vdGRvZyBEdW8iLG5yMT0iU2xhYiIsbHIxPSJTbGFiIFByZXNzIixjcjE9IlRodW1icHJpbnQiLGRyMT0iVXRpbGl0eSIsZnIxPSJVdGlsaXR5IER1byIsdXIxPSJVdGlsaXR5IEZpbGwiLHByMT0iV2hpdGVib2FyZCIsSDQyPShyMWU9e30sbXQobXQobXQobXQobXQobXQobXQobXQobXQobXQocjFlLERhMSxYYTEpLEVhMSxRYTEpLE5hMSxLYTEpLFBhMSxKYTEpLElhMSxlcjEpLEZhMSx0cjEpLE9hMSxhcjEpLEJhMSxycjEpLFJhMSxpcjEpLEhhMSxvcjEpLG10KG10KG10KG10KG10KG10KG10KG10KHIxZSxxYTEsc3IxKSxWYTEsbnIxKSxVYTEsbHIxKSxqYTEsY3IxKSxXYTEsZHIxKSxHYTEsZnIxKSxZYTEsdXIxKSxaYTEscHIxKSksaHIxPSJraXQiLG1yMT0ia2l0LWR1b3RvbmUiLGdyMT0iS2l0Iix4cjE9IktpdCBEdW90b25lIixxNDI9bXQobXQoe30saHIxLGdyMSksbXIxLHhyMSksYnIxPXtjbGFzc2ljOnsiZmEtYnJhbmRzIjoiZmFiIiwiZmEtZHVvdG9uZSI6ImZhZCIsImZhLWxpZ2h0IjoiZmFsIiwiZmEtcmVndWxhciI6ImZhciIsImZhLXNvbGlkIjoiZmFzIiwiZmEtdGhpbiI6ImZhdCJ9LGR1b3RvbmU6eyJmYS1yZWd1bGFyIjoiZmFkciIsImZhLWxpZ2h0IjoiZmFkbCIsImZhLXRoaW4iOiJmYWR0In0sc2hhcnA6eyJmYS1zb2xpZCI6ImZhc3MiLCJmYS1yZWd1bGFyIjoiZmFzciIsImZhLWxpZ2h0IjoiZmFzbCIsImZhLXRoaW4iOiJmYXN0In0sInNoYXJwLWR1b3RvbmUiOnsiZmEtc29saWQiOiJmYXNkcyIsImZhLXJlZ3VsYXIiOiJmYXNkciIsImZhLWxpZ2h0IjoiZmFzZGwiLCJmYS10aGluIjoiZmFzZHQifSxzbGFiOnsiZmEtcmVndWxhciI6ImZhc2xyIn0sInNsYWItcHJlc3MiOnsiZmEtcmVndWxhciI6ImZhc2xwciJ9LHdoaXRlYm9hcmQ6eyJmYS1zZW1pYm9sZCI6ImZhd3NiIn0sdGh1bWJwcmludDp7ImZhLWxpZ2h0IjoiZmF0bCJ9LG5vdGRvZzp7ImZhLXNvbGlkIjoiZmFucyJ9LCJub3Rkb2ctZHVvIjp7ImZhLXNvbGlkIjoiZmFuZHMifSxldGNoOnsiZmEtc29saWQiOiJmYWVzIn0samVsbHk6eyJmYS1yZWd1bGFyIjoiZmFqciJ9LCJqZWxseS1maWxsIjp7ImZhLXJlZ3VsYXIiOiJmYWpmciJ9LCJqZWxseS1kdW8iOnsiZmEtcmVndWxhciI6ImZhamRyIn0sY2hpc2VsOnsiZmEtcmVndWxhciI6ImZhY3IifSx1dGlsaXR5OnsiZmEtc2VtaWJvbGQiOiJmYXVzYiJ9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6ImZhdWRzYiJ9LCJ1dGlsaXR5LWZpbGwiOnsiZmEtc2VtaWJvbGQiOiJmYXVmc2IifX0sdnIxPXtjbGFzc2ljOlsiZmFzIiwiZmFyIiwiZmFsIiwiZmF0IiwiZmFkIl0sZHVvdG9uZTpbImZhZHIiLCJmYWRsIiwiZmFkdCJdLHNoYXJwOlsiZmFzcyIsImZhc3IiLCJmYXNsIiwiZmFzdCJdLCJzaGFycC1kdW90b25lIjpbImZhc2RzIiwiZmFzZHIiLCJmYXNkbCIsImZhc2R0Il0sc2xhYjpbImZhc2xyIl0sInNsYWItcHJlc3MiOlsiZmFzbHByIl0sd2hpdGVib2FyZDpbImZhd3NiIl0sdGh1bWJwcmludDpbImZhdGwiXSxub3Rkb2c6WyJmYW5zIl0sIm5vdGRvZy1kdW8iOlsiZmFuZHMiXSxldGNoOlsiZmFlcyJdLGplbGx5OlsiZmFqciJdLCJqZWxseS1maWxsIjpbImZhamZyIl0sImplbGx5LWR1byI6WyJmYWpkciJdLGNoaXNlbDpbImZhY3IiXSx1dGlsaXR5OlsiZmF1c2IiXSwidXRpbGl0eS1kdW8iOlsiZmF1ZHNiIl0sInV0aWxpdHktZmlsbCI6WyJmYXVmc2IiXX0saTFlPXtjbGFzc2ljOntmYWI6ImZhLWJyYW5kcyIsZmFkOiJmYS1kdW90b25lIixmYWw6ImZhLWxpZ2h0IixmYXI6ImZhLXJlZ3VsYXIiLGZhczoiZmEtc29saWQiLGZhdDoiZmEtdGhpbiJ9LGR1b3RvbmU6e2ZhZHI6ImZhLXJlZ3VsYXIiLGZhZGw6ImZhLWxpZ2h0IixmYWR0OiJmYS10aGluIn0sc2hhcnA6e2Zhc3M6ImZhLXNvbGlkIixmYXNyOiJmYS1yZWd1bGFyIixmYXNsOiJmYS1saWdodCIsZmFzdDoiZmEtdGhpbiJ9LCJzaGFycC1kdW90b25lIjp7ZmFzZHM6ImZhLXNvbGlkIixmYXNkcjoiZmEtcmVndWxhciIsZmFzZGw6ImZhLWxpZ2h0IixmYXNkdDoiZmEtdGhpbiJ9LHNsYWI6e2Zhc2xyOiJmYS1yZWd1bGFyIn0sInNsYWItcHJlc3MiOntmYXNscHI6ImZhLXJlZ3VsYXIifSx3aGl0ZWJvYXJkOntmYXdzYjoiZmEtc2VtaWJvbGQifSx0aHVtYnByaW50OntmYXRsOiJmYS1saWdodCJ9LG5vdGRvZzp7ZmFuczoiZmEtc29saWQifSwibm90ZG9nLWR1byI6e2ZhbmRzOiJmYS1zb2xpZCJ9LGV0Y2g6e2ZhZXM6ImZhLXNvbGlkIn0samVsbHk6e2ZhanI6ImZhLXJlZ3VsYXIifSwiamVsbHktZmlsbCI6e2ZhamZyOiJmYS1yZWd1bGFyIn0sImplbGx5LWR1byI6e2ZhamRyOiJmYS1yZWd1bGFyIn0sY2hpc2VsOntmYWNyOiJmYS1yZWd1bGFyIn0sdXRpbGl0eTp7ZmF1c2I6ImZhLXNlbWlib2xkIn0sInV0aWxpdHktZHVvIjp7ZmF1ZHNiOiJmYS1zZW1pYm9sZCJ9LCJ1dGlsaXR5LWZpbGwiOntmYXVmc2I6ImZhLXNlbWlib2xkIn19LHlyMT1bImZhLXNvbGlkIiwiZmEtcmVndWxhciIsImZhLWxpZ2h0IiwiZmEtdGhpbiIsImZhLWR1b3RvbmUiLCJmYS1icmFuZHMiLCJmYS1zZW1pYm9sZCJdLEphdD1bImZhIiwiZmFzIiwiZmFyIiwiZmFsIiwiZmF0IiwiZmFkIiwiZmFkciIsImZhZGwiLCJmYWR0IiwiZmFiIiwiZmFzcyIsImZhc3IiLCJmYXNsIiwiZmFzdCIsImZhc2RzIiwiZmFzZHIiLCJmYXNkbCIsImZhc2R0IiwiZmFzbHIiLCJmYXNscHIiLCJmYXdzYiIsImZhdGwiLCJmYW5zIiwiZmFuZHMiLCJmYWVzIiwiZmFqciIsImZhamZyIiwiZmFqZHIiLCJmYWNyIiwiZmF1c2IiLCJmYXVkc2IiLCJmYXVmc2IiXS5jb25jYXQoJGExLHlyMSksd3IxPVsic29saWQiLCJyZWd1bGFyIiwibGlnaHQiLCJ0aGluIiwiZHVvdG9uZSIsImJyYW5kcyIsInNlbWlib2xkIl0sZXJ0PVsxLDIsMyw0LDUsNiw3LDgsOSwxMF0sTXIxPWVydC5jb25jYXQoWzExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSksenIxPVsiYXciLCJmdyIsInB1bGwtbGVmdCIsInB1bGwtcmlnaHQiXSxrcjE9W10uY29uY2F0KEphKE9iamVjdC5rZXlzKHZyMSkpLHdyMSx6cjEsWyIyeHMiLCJ4cyIsInNtIiwibGciLCJ4bCIsIjJ4bCIsImJlYXQiLCJib3JkZXIiLCJmYWRlIiwiYmVhdC1mYWRlIiwiYm91bmNlIiwiZmxpcC1ib3RoIiwiZmxpcC1ob3Jpem9udGFsIiwiZmxpcC12ZXJ0aWNhbCIsImZsaXAiLCJpbnZlcnNlIiwibGF5ZXJzIiwibGF5ZXJzLWJvdHRvbS1sZWZ0IiwibGF5ZXJzLWJvdHRvbS1yaWdodCIsImxheWVycy1jb3VudGVyIiwibGF5ZXJzLXRleHQiLCJsYXllcnMtdG9wLWxlZnQiLCJsYXllcnMtdG9wLXJpZ2h0IiwibGkiLCJwdWxsLWVuZCIsInB1bGwtc3RhcnQiLCJwdWxzZSIsInJvdGF0ZS0xODAiLCJyb3RhdGUtMjcwIiwicm90YXRlLTkwIiwicm90YXRlLWJ5Iiwic2hha2UiLCJzcGluLXB1bHNlIiwic3Bpbi1yZXZlcnNlIiwic3BpbiIsInN0YWNrLTF4Iiwic3RhY2stMngiLCJzdGFjayIsInVsIiwid2lkdGgtYXV0byIsIndpZHRoLWZpeGVkIix0Vi5HUk9VUCx0Vi5TV0FQX09QQUNJVFksdFYuUFJJTUFSWSx0Vi5TRUNPTkRBUlldKS5jb25jYXQoZXJ0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4iIi5jb25jYXQodCwieCIpfSkpLmNvbmNhdChNcjEubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ3LSIuY29uY2F0KHQpfSkpLFNyMT17IkZvbnQgQXdlc29tZSA1IEZyZWUiOns5MDA6ImZhcyIsNDAwOiJmYXIifSwiRm9udCBBd2Vzb21lIDUgUHJvIjp7OTAwOiJmYXMiLDQwMDoiZmFyIixub3JtYWw6ImZhciIsMzAwOiJmYWwifSwiRm9udCBBd2Vzb21lIDUgQnJhbmRzIjp7NDAwOiJmYWIiLG5vcm1hbDoiZmFiIn0sIkZvbnQgQXdlc29tZSA1IER1b3RvbmUiOns5MDA6ImZhZCJ9fSxEaT0iX19fRk9OVF9BV0VTT01FX19fIixvMWU9MTYsdHJ0PSJmYSIsYXJ0PSJzdmctaW5saW5lLS1mYSIsJG49ImRhdGEtZmEtaTJzdmciLHMxZT0iZGF0YS1mYS1wc2V1ZG8tZWxlbWVudCIsQ3IxPSJkYXRhLWZhLXBzZXVkby1lbGVtZW50LXBlbmRpbmciLG4xZT0iZGF0YS1wcmVmaXgiLGwxZT0iZGF0YS1pY29uIixycnQ9ImZvbnRhd2Vzb21lLWkyc3ZnIixMcjE9ImFzeW5jIixUcjE9WyJIVE1MIiwiSEVBRCIsIlNUWUxFIiwiU0NSSVBUIl0saXJ0PVsiOjpiZWZvcmUiLCI6OmFmdGVyIiwiOmJlZm9yZSIsIjphZnRlciJdLG9ydD0oZnVuY3Rpb24oKXt0cnl7cmV0dXJuITB9Y2F0Y2h7cmV0dXJuITF9fSkoKTtzcnQ9X2Uoe30sJGF0KTtzcnRbaTJdPV9lKF9lKF9lKF9lKHt9LHsiZmEtZHVvdG9uZSI6ImR1b3RvbmUifSksJGF0W2kyXSksUWF0LmtpdCksUWF0WyJraXQtZHVvdG9uZSJdKTtfcjE9SGQoc3J0KSxjMWU9X2Uoe30sTWExKTtjMWVbaTJdPV9lKF9lKF9lKF9lKHt9LHtkdW90b25lOiJmYWQifSksYzFlW2kyXSksS2F0LmtpdCksS2F0WyJraXQtZHVvdG9uZSJdKTtucnQ9SGQoYzFlKSxkMWU9X2Uoe30saTFlKTtkMWVbaTJdPV9lKF9lKHt9LGQxZVtpMl0pLEFhMS5raXQpO2YxZT1IZChkMWUpLHUxZT1fZSh7fSxicjEpO3UxZVtpMl09X2UoX2Uoe30sdTFlW2kyXSksVGExLmtpdCk7VjQyPUhkKHUxZSksQXIxPUsyMSxscnQ9ImZhLWxheWVycy10ZXh0IiwkcjE9SjIxLERyMT1fZSh7fSx2YTEpLFU0Mj1IZChEcjEpLEVyMT1bImNsYXNzIiwiZGF0YS1wcmVmaXgiLCJkYXRhLWljb24iLCJkYXRhLWZhLXRyYW5zZm9ybSIsImRhdGEtZmEtbWFzayJdLHAxZT1lYTEsTnIxPVtdLmNvbmNhdChKYSh6YTEpLEphKGtyMSkpLHFkPWVzLkZvbnRBd2Vzb21lQ29uZmlnfHx7fTtkMSYmdHlwZW9mIGQxLnF1ZXJ5U2VsZWN0b3I9PSJmdW5jdGlvbiImJihjcnQ9W1siZGF0YS1mYW1pbHktcHJlZml4IiwiZmFtaWx5UHJlZml4Il0sWyJkYXRhLWNzcy1wcmVmaXgiLCJjc3NQcmVmaXgiXSxbImRhdGEtZmFtaWx5LWRlZmF1bHQiLCJmYW1pbHlEZWZhdWx0Il0sWyJkYXRhLXN0eWxlLWRlZmF1bHQiLCJzdHlsZURlZmF1bHQiXSxbImRhdGEtcmVwbGFjZW1lbnQtY2xhc3MiLCJyZXBsYWNlbWVudENsYXNzIl0sWyJkYXRhLWF1dG8tcmVwbGFjZS1zdmciLCJhdXRvUmVwbGFjZVN2ZyJdLFsiZGF0YS1hdXRvLWFkZC1jc3MiLCJhdXRvQWRkQ3NzIl0sWyJkYXRhLXNlYXJjaC1wc2V1ZG8tZWxlbWVudHMiLCJzZWFyY2hQc2V1ZG9FbGVtZW50cyJdLFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLXdhcm5pbmdzIiwic2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5ncyJdLFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLWZ1bGwtc2NhbiIsInNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW4iXSxbImRhdGEtb2JzZXJ2ZS1tdXRhdGlvbnMiLCJvYnNlcnZlTXV0YXRpb25zIl0sWyJkYXRhLW11dGF0ZS1hcHByb2FjaCIsIm11dGF0ZUFwcHJvYWNoIl0sWyJkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlIiwia2VlcE9yaWdpbmFsU291cmNlIl0sWyJkYXRhLW1lYXN1cmUtcGVyZm9ybWFuY2UiLCJtZWFzdXJlUGVyZm9ybWFuY2UiXSxbImRhdGEtc2hvdy1taXNzaW5nLWljb25zIiwic2hvd01pc3NpbmdJY29ucyJdXSxjcnQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1LcSh0LDIpLGE9ZVswXSxyPWVbMV0saT1JcjEoUHIxKGEpKTtpIT1udWxsJiYocWRbcl09aSl9KSk7ZHJ0PXtzdHlsZURlZmF1bHQ6InNvbGlkIixmYW1pbHlEZWZhdWx0OmkyLGNzc1ByZWZpeDp0cnQscmVwbGFjZW1lbnRDbGFzczphcnQsYXV0b1JlcGxhY2VTdmc6ITAsYXV0b0FkZENzczohMCxzZWFyY2hQc2V1ZG9FbGVtZW50czohMSxzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzOiEwLHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW46ITEsb2JzZXJ2ZU11dGF0aW9uczohMCxtdXRhdGVBcHByb2FjaDoiYXN5bmMiLGtlZXBPcmlnaW5hbFNvdXJjZTohMCxtZWFzdXJlUGVyZm9ybWFuY2U6ITEsc2hvd01pc3NpbmdJY29uczohMH07cWQuZmFtaWx5UHJlZml4JiYocWQuY3NzUHJlZml4PXFkLmZhbWlseVByZWZpeCk7RzY9X2UoX2Uoe30sZHJ0KSxxZCk7RzYuYXV0b1JlcGxhY2VTdmd8fChHNi5vYnNlcnZlTXV0YXRpb25zPSExKTtaZT17fTtPYmplY3Qua2V5cyhkcnQpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFplLHQse2VudW1lcmFibGU6ITAsc2V0OmZ1bmN0aW9uKGEpe0c2W3RdPWEsVmQuZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gcihaZSl9KX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEc2W3RdfX0pfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFplLCJmYW1pbHlQcmVmaXgiLHtlbnVtZXJhYmxlOiEwLHNldDpmdW5jdGlvbihlKXtHNi5jc3NQcmVmaXg9ZSxWZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBhKFplKX0pfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRzYuY3NzUHJlZml4fX0pLGVzLkZvbnRBd2Vzb21lQ29uZmlnPVplO1ZkPVtdO3RzPW8xZSxqcj17c2l6ZToxNix4OjAseTowLHJvdGF0ZTowLGZsaXBYOiExLGZsaXBZOiExfTtCcjE9IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjtWcjE9YDpyb290LCA6aG9zdCB7CiAgLS1mYS1mb250LXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBGcmVlIjsKICAtLWZhLWZvbnQtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgRnJlZSI7CiAgLS1mYS1mb250LWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBQcm8iOwogIC0tZmEtZm9udC10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBQcm8iOwogIC0tZmEtZm9udC1kdW90b25lOiBub3JtYWwgOTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjsKICAtLWZhLWZvbnQtZHVvdG9uZS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjsKICAtLWZhLWZvbnQtZHVvdG9uZS1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgRHVvdG9uZSI7CiAgLS1mYS1mb250LWR1b3RvbmUtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgRHVvdG9uZSI7CiAgLS1mYS1mb250LWJyYW5kczogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgQnJhbmRzIjsKICAtLWZhLWZvbnQtc2hhcnAtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIjsKICAtLWZhLWZvbnQtc2hhcnAtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAiOwogIC0tZmEtZm9udC1zaGFycC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAiOwogIC0tZmEtZm9udC1zaGFycC10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCI7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lIjsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lIjsKICAtLWZhLWZvbnQtc2xhYi1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTbGFiIjsKICAtLWZhLWZvbnQtc2xhYi1wcmVzcy1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTbGFiIFByZXNzIjsKICAtLWZhLWZvbnQtd2hpdGVib2FyZC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgV2hpdGVib2FyZCI7CiAgLS1mYS1mb250LXRodW1icHJpbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOwogIC0tZmEtZm9udC1ub3Rkb2ctc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IE5vdGRvZyI7CiAgLS1mYS1mb250LW5vdGRvZy1kdW8tc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IE5vdGRvZyBEdW8iOwogIC0tZmEtZm9udC1ldGNoLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBFdGNoIjsKICAtLWZhLWZvbnQtamVsbHktcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgSmVsbHkiOwogIC0tZmEtZm9udC1qZWxseS1maWxsLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IEplbGx5IEZpbGwiOwogIC0tZmEtZm9udC1qZWxseS1kdW8tcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgSmVsbHkgRHVvIjsKICAtLWZhLWZvbnQtY2hpc2VsLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IENoaXNlbCI7CiAgLS1mYS1mb250LXV0aWxpdHktc2VtaWJvbGQ6IG5vcm1hbCA2MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFV0aWxpdHkiOwogIC0tZmEtZm9udC11dGlsaXR5LWR1by1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBEdW8iOwogIC0tZmEtZm9udC11dGlsaXR5LWZpbGwtc2VtaWJvbGQ6IG5vcm1hbCA2MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFV0aWxpdHkgRmlsbCI7Cn0KCi5zdmctaW5saW5lLS1mYSB7CiAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgZGlzcGxheTogdmFyKC0tZmEtZGlzcGxheSwgaW5saW5lLWJsb2NrKTsKICBoZWlnaHQ6IDFlbTsKICBvdmVyZmxvdzogdmlzaWJsZTsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoLCAxLjI1ZW0pOwp9Ci5zdmctaW5saW5lLS1mYS5mYS0yeHMgewogIHZlcnRpY2FsLWFsaWduOiAwLjFlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEteHMgewogIHZlcnRpY2FsLWFsaWduOiAwZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXNtIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMDcxNDI4NTcxNGVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1sZyB7CiAgdmVydGljYWwtYWxpZ246IC0wLjJlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEteGwgewogIHZlcnRpY2FsLWFsaWduOiAtMC4yNWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS0yeGwgewogIHZlcnRpY2FsLWFsaWduOiAtMC4zMTI1ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtbGVmdCwKLnN2Zy1pbmxpbmUtLWZhIC5mYS1wdWxsLXN0YXJ0IHsKICBmbG9hdDogaW5saW5lLXN0YXJ0OwogIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1wdWxsLXJpZ2h0LAouc3ZnLWlubGluZS0tZmEgLmZhLXB1bGwtZW5kIHsKICBmbG9hdDogaW5saW5lLWVuZDsKICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1saSB7CiAgd2lkdGg6IHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pOwogIGluc2V0LWlubGluZS1zdGFydDogY2FsYygtMSAqIHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pKTsKICBpbnNldC1ibG9jay1zdGFydDogMC4yNWVtOyAvKiBzeW5jaW5nIHZlcnRpY2FsIGFsaWdubWVudCB3aXRoIFdlYiBGb250IHJlbmRlcmluZyAqLwp9CgouZmEtbGF5ZXJzLWNvdW50ZXIsIC5mYS1sYXllcnMtdGV4dCB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5mYS1sYXllcnMgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBoZWlnaHQ6IDFlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgsIDEuMjVlbSk7Cn0KLmZhLWxheWVycyAuc3ZnLWlubGluZS0tZmEgewogIGluc2V0OiAwOwogIG1hcmdpbjogYXV0bzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKfQoKLmZhLWxheWVycy10ZXh0IHsKICBsZWZ0OiA1MCU7CiAgdG9wOiA1MCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKfQoKLmZhLWxheWVycy1jb3VudGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1mYS1jb3VudGVyLWJhY2tncm91bmQtY29sb3IsICNmZjI1M2EpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWNvdW50ZXItYm9yZGVyLXJhZGl1cywgMWVtKTsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGNvbG9yOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTsKICBsaW5lLWhlaWdodDogdmFyKC0tZmEtY291bnRlci1saW5lLWhlaWdodCwgMSk7CiAgbWF4LXdpZHRoOiB2YXIoLS1mYS1jb3VudGVyLW1heC13aWR0aCwgNWVtKTsKICBtaW4td2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWluLXdpZHRoLCAxLjVlbSk7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwYWRkaW5nOiB2YXIoLS1mYS1jb3VudGVyLXBhZGRpbmcsIDAuMjVlbSAwLjVlbSk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1jb3VudGVyLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLWJvdHRvbS1yaWdodCB7CiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApOwogIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7CiAgdG9wOiBhdXRvOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLWJvdHRvbS1sZWZ0IHsKICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7CiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7CiAgcmlnaHQ6IGF1dG87CiAgdG9wOiBhdXRvOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGxlZnQ7Cn0KCi5mYS1sYXllcnMtdG9wLXJpZ2h0IHsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKfQoKLmZhLWxheWVycy10b3AtbGVmdCB7CiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7CiAgcmlnaHQ6IGF1dG87CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGxlZnQ7Cn0KCi5mYS0xeCB7CiAgZm9udC1zaXplOiAxZW07Cn0KCi5mYS0yeCB7CiAgZm9udC1zaXplOiAyZW07Cn0KCi5mYS0zeCB7CiAgZm9udC1zaXplOiAzZW07Cn0KCi5mYS00eCB7CiAgZm9udC1zaXplOiA0ZW07Cn0KCi5mYS01eCB7CiAgZm9udC1zaXplOiA1ZW07Cn0KCi5mYS02eCB7CiAgZm9udC1zaXplOiA2ZW07Cn0KCi5mYS03eCB7CiAgZm9udC1zaXplOiA3ZW07Cn0KCi5mYS04eCB7CiAgZm9udC1zaXplOiA4ZW07Cn0KCi5mYS05eCB7CiAgZm9udC1zaXplOiA5ZW07Cn0KCi5mYS0xMHggewogIGZvbnQtc2l6ZTogMTBlbTsKfQoKLmZhLTJ4cyB7CiAgZm9udC1zaXplOiBjYWxjKDEwIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDEwcHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTAgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDEwIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXhzIHsKICBmb250LXNpemU6IGNhbGMoMTIgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTJweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxMiAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTIgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtc20gewogIGZvbnQtc2l6ZTogY2FsYygxNCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxNHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDE0ICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxNCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS1sZyB7CiAgZm9udC1zaXplOiBjYWxjKDIwIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDIwcHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMjAgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDIwIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXhsIHsKICBmb250LXNpemU6IGNhbGMoMjQgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMjRweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAyNCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMjQgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtMnhsIHsKICBmb250LXNpemU6IGNhbGMoMzIgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMzJweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAzMiAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMzIgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtd2lkdGgtYXV0byB7CiAgLS1mYS13aWR0aDogYXV0bzsKfQoKLmZhLWZ3LAouZmEtd2lkdGgtZml4ZWQgewogIC0tZmEtd2lkdGg6IDEuMjVlbTsKfQoKLmZhLXVsIHsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtbGktbWFyZ2luLCAyLjVlbSk7CiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7Cn0KLmZhLXVsID4gbGkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmZhLWxpIHsKICBpbnNldC1pbmxpbmUtc3RhcnQ6IGNhbGMoLTEgKiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKSk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7Cn0KCi8qIEhlYWRzIFVwOiBCb3JkZXJlZCBJY29ucyB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZSEKICAtIFRoaXMgZmVhdHVyZSB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiBGb250IEF3ZXNvbWUgKHY4KSEKICAtIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IGluIHRoaXMgdmVyc2lvbiAqdjcpLCBidXQgaXQgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIEZvbnQgQXdlc29tZSB2OC4KKi8KLyogTm90ZXM6CiogLS1Ae3YuJGNzcy1wcmVmaXh9LWJvcmRlci13aWR0aCA9IDEvMTYgYnkgZGVmYXVsdCAodG8gcmVuZGVyIGFzIH4xcHggYmFzZWQgb24gYSAxNnB4IGRlZmF1bHQgZm9udC1zaXplKQoqIC0tQHt2LiRjc3MtcHJlZml4fS1ib3JkZXItcGFkZGluZyA9CiAgKiogMy8xNiBmb3IgdmVydGljYWwgcGFkZGluZyAodG8gZ2l2ZSB+MnB4IG9mIHZlcnRpY2FsIHdoaXRlc3BhY2UgYXJvdW5kIGFuIGljb24gY29uc2lkZXJpbmcgaXQncyB2ZXJ0aWNhbCBhbGlnbm1lbnQpCiAgKiogNC8xNiBmb3IgaG9yaXpvbnRhbCBwYWRkaW5nICh0byBnaXZlIH40cHggb2YgaG9yaXpvbnRhbCB3aGl0ZXNwYWNlIGFyb3VuZCBhbiBpY29uKQoqLwouZmEtYm9yZGVyIHsKICBib3JkZXItY29sb3I6IHZhcigtLWZhLWJvcmRlci1jb2xvciwgI2VlZSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtYm9yZGVyLXJhZGl1cywgMC4xZW0pOwogIGJvcmRlci1zdHlsZTogdmFyKC0tZmEtYm9yZGVyLXN0eWxlLCBzb2xpZCk7CiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1mYS1ib3JkZXItd2lkdGgsIDAuMDYyNWVtKTsKICBib3gtc2l6aW5nOiB2YXIoLS1mYS1ib3JkZXItYm94LXNpemluZywgY29udGVudC1ib3gpOwogIHBhZGRpbmc6IHZhcigtLWZhLWJvcmRlci1wYWRkaW5nLCAwLjE4NzVlbSAwLjI1ZW0pOwp9CgouZmEtcHVsbC1sZWZ0LAouZmEtcHVsbC1zdGFydCB7CiAgZmxvYXQ6IGlubGluZS1zdGFydDsKICBtYXJnaW4taW5saW5lLWVuZDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQoKLmZhLXB1bGwtcmlnaHQsCi5mYS1wdWxsLWVuZCB7CiAgZmxvYXQ6IGlubGluZS1lbmQ7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQoKLmZhLWJlYXQgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1ib3VuY2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1ib3VuY2U7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjI4LCAwLjg0LCAwLjQyLCAxKSk7Cn0KCi5mYS1mYWRlIHsKICBhbmltYXRpb24tbmFtZTogZmEtZmFkZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7Cn0KCi5mYS1iZWF0LWZhZGUgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0LWZhZGU7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpOwp9CgouZmEtZmxpcCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKfQoKLmZhLXNoYWtlIHsKICBhbmltYXRpb24tbmFtZTogZmEtc2hha2U7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluIHsKICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDJzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXNwaW4tcmV2ZXJzZSB7CiAgLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlOwp9CgouZmEtcHVsc2UsCi5mYS1zcGluLXB1bHNlIHsKICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIHN0ZXBzKDgpKTsKfQoKQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAuZmEtYmVhdCwKICAuZmEtYm91bmNlLAogIC5mYS1mYWRlLAogIC5mYS1iZWF0LWZhZGUsCiAgLmZhLWZsaXAsCiAgLmZhLXB1bHNlLAogIC5mYS1zaGFrZSwKICAuZmEtc3BpbiwKICAuZmEtc3Bpbi1wdWxzZSB7CiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KQGtleWZyYW1lcyBmYS1iZWF0IHsKICAwJSwgOTAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQogIDQ1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1ib3VuY2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICB9CiAgMTAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXgsIDEuMSksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjkpKSB0cmFuc2xhdGVZKDApOwogIH0KICAzMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS14LCAwLjkpLCB2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS15LCAxLjEpKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1oZWlnaHQsIC0wLjVlbSkpOwogIH0KICA1MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS14LCAxLjA1KSwgdmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteSwgMC45NSkpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDU3JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLXJlYm91bmQsIC0wLjEyNWVtKSk7CiAgfQogIDY0JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZhZGUgewogIDUwJSB7CiAgICBvcGFjaXR5OiB2YXIoLS1mYS1mYWRlLW9wYWNpdHksIDAuNCk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYmVhdC1mYWRlIHsKICAwJSwgMTAwJSB7CiAgICBvcGFjaXR5OiB2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQogIDUwJSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMTI1KSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtZmxpcCB7CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgdmFyKC0tZmEtZmxpcC1hbmdsZSwgLTE4MGRlZykpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNoYWtlIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpOwogIH0KICA0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNWRlZyk7CiAgfQogIDglLCAyNCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTE4ZGVnKTsKICB9CiAgMTIlLCAyOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMThkZWcpOwogIH0KICAxNiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTsKICB9CiAgMjAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTsKICB9CiAgMzIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7CiAgfQogIDM2JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMmRlZyk7CiAgfQogIDQwJSwgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQouZmEtcm90YXRlLTkwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMTgwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwp9CgouZmEtcm90YXRlLTI3MCB7CiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKfQoKLmZhLWZsaXAtaG9yaXpvbnRhbCB7CiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7Cn0KCi5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTsKfQoKLmZhLWZsaXAtYm90aCwKLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7Cn0KCi5mYS1yb3RhdGUtYnkgewogIHRyYW5zZm9ybTogcm90YXRlKHZhcigtLWZhLXJvdGF0ZS1hbmdsZSwgMCkpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXByaW1hcnkgewogIGZpbGw6IHZhcigtLWZhLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcik7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IHZhcigtLWZhLXNlY29uZGFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtcHJpbWFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXByaW1hcnksCi5zdmctaW5saW5lLS1mYSBtYXNrIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IGJsYWNrOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtaW52ZXJzZSB7CiAgZmlsbDogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7Cn0KCi5mYS1zdGFjayB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMmVtOwogIGxpbmUtaGVpZ2h0OiAyZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDIuNWVtOwp9CgouZmEtaW52ZXJzZSB7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMXggewogIC0tZmEtd2lkdGg6IDEuMjVlbTsKICBoZWlnaHQ6IDFlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgpOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeCB7CiAgLS1mYS13aWR0aDogMi41ZW07CiAgaGVpZ2h0OiAyZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoKTsKfQoKLmZhLXN0YWNrLTF4LAouZmEtc3RhY2stMnggewogIGluc2V0OiAwOwogIG1hcmdpbjogYXV0bzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7Cn1gO2hydD0hMTtVcjE9e21peG91dDpmdW5jdGlvbigpe3JldHVybntkb206e2NzczpwcnQsaW5zZXJ0Q3NzOmcxZX19fSxob29rczpmdW5jdGlvbigpe3JldHVybntiZWZvcmVET01FbGVtZW50Q3JlYXRpb246ZnVuY3Rpb24oKXtnMWUoKX0sYmVmb3JlSTJzdmc6ZnVuY3Rpb24oKXtnMWUoKX19fX0sRWk9ZXN8fHt9O0VpW0RpXXx8KEVpW0RpXT17fSksRWlbRGldLnN0eWxlc3x8KEVpW0RpXS5zdHlsZXM9e30pLEVpW0RpXS5ob29rc3x8KEVpW0RpXS5ob29rcz17fSksRWlbRGldLnNoaW1zfHwoRWlbRGldLnNoaW1zPVtdKTtlcj1FaVtEaV0sbXJ0PVtdLGdydD1mdW5jdGlvbigpe2QxLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGdydCksclY9MSxtcnQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KX0sclY9ITE7JGkmJihyVj0oZDEuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsPy9ebG9hZGVkfF5jLzovXmxvYWRlZHxeaXxeYy8pLnRlc3QoZDEucmVhZHlTdGF0ZSksclZ8fGQxLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGdydCkpO1dyMT1mdW5jdGlvbihlLGEpe3JldHVybiBmdW5jdGlvbihyLGksbyxzKXtyZXR1cm4gZS5jYWxsKGEscixpLG8scyl9fSx4MWU9ZnVuY3Rpb24oZSxhLHIsaSl7dmFyIG89T2JqZWN0LmtleXMoZSkscz1vLmxlbmd0aCxsPWkhPT12b2lkIDA/V3IxKGEsaSk6YSxmLGMsdTtmb3Iocj09PXZvaWQgMD8oZj0xLHU9ZVtvWzBdXSk6KGY9MCx1PXIpO2Y8cztmKyspYz1vW2ZdLHU9bCh1LGVbY10sYyxlKTtyZXR1cm4gdX07djFlPTEsdHI9MixqNDI9W1t0cixMMigvcGF0aCBvcGFjaXR5PSIoW14iXSopIi4qZD0iKFteIl0qKSIuKnBhdGguKmQ9IihbXiJdKikiLyx7ZDI6MixkMTozfSldLFt0cixMMigvcGF0aCBvcGFjaXR5PSIoW14iXSopIi4qZD0iKFteIl0qKSIvLHtkMjoyfSldLFt2MWUsTDIoL3BhdGggZmlsbD0iY3VycmVudENvbG9yIi4qZD0iKFteIl0rKSIvLHtkMToxfSldXSxXNDI9W1t0cixMMigvcGF0aCBjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi4qZD0iKFteIl0rKSIuKnBhdGggY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLipkPSIoW14iXSspIi8se2F0dHIyOjEsZDI6MixhdHRyMTozLGQxOjR9KV0sW3RyLEwyKC9wYXRoIGNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi4qZD0iKFteIl0rKSIuKnBhdGggY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIuKmQ9IihbXiJdKykiLyx7YXR0cjE6MSxkMToyLGF0dHIyOjMsZDI6NH0pXSxbdHIsTDIoL3BhdGggY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLipkPSIoW14iXSspIi8se2F0dHIxOjEsZDE6Mn0pXSxbdHIsTDIoL3BhdGggY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIuKmQ9IihbXiJdKykiLyx7YXR0cjI6MSxkMjoyfSldLFt0cixMMigvcGF0aCBkPSIoW14iXSspIi4qY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIuKnBhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi8se2QyOjEsYXR0cjI6MixkMTozLGF0dHIxOjR9KV0sW3RyLEwyKC9wYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIuKnBhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLyx7ZDE6MSxhdHRyMToyLGQyOjMsYXR0cjI6NH0pXSxbdHIsTDIoL3BhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi8se2QxOjEsYXR0cjE6Mn0pXSxbdHIsTDIoL3BhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLyx7ZDI6MSxhdHRyMjoyfSldLFt0cixMMigvcGF0aCBkPSIoW14iXSspIi4qcGF0aCBkPSIoW14iXSspIi8se2QxOjEsZDI6Mn0pXSxbdjFlLEwyKC9wYXRoIGQ9IihbXiJdKykiLyx7ZDE6MX0pXSxbdjFlLEwyKC9wYXRoIHN0eWxlPSIoW14iXSspIi4qZD0iKFteIl0rKSIvLHthdHRyMToxLGQxOjJ9KV1dLGpkPWVyLnN0eWxlcyxHcjE9ZXIuc2hpbXMseXJ0PU9iamVjdC5rZXlzKGYxZSksWXIxPXlydC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXT1PYmplY3Qua2V5cyhmMWVbZV0pLHR9LHt9KSx5MWU9bnVsbCx3cnQ9e30sTXJ0PXt9LHpydD17fSxrcnQ9e30sU3J0PXt9O0NydD1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKG8pe3JldHVybiB4MWUoamQsZnVuY3Rpb24ocyxsLGYpe3JldHVybiBzW2ZdPXgxZShsLG8se30pLHN9LHt9KX07d3J0PWUoZnVuY3Rpb24oaSxvLHMpe2lmKG9bM10mJihpW29bM11dPXMpLG9bMl0pe3ZhciBsPW9bMl0uZmlsdGVyKGZ1bmN0aW9uKGYpe3JldHVybiB0eXBlb2YgZj09Im51bWJlciJ9KTtsLmZvckVhY2goZnVuY3Rpb24oZil7aVtmLnRvU3RyaW5nKDE2KV09c30pfXJldHVybiBpfSksTXJ0PWUoZnVuY3Rpb24oaSxvLHMpe2lmKGlbc109cyxvWzJdKXt2YXIgbD1vWzJdLmZpbHRlcihmdW5jdGlvbihmKXtyZXR1cm4gdHlwZW9mIGY9PSJzdHJpbmcifSk7bC5mb3JFYWNoKGZ1bmN0aW9uKGYpe2lbZl09c30pfXJldHVybiBpfSksU3J0PWUoZnVuY3Rpb24oaSxvLHMpe3ZhciBsPW9bMl07cmV0dXJuIGlbc109cyxsLmZvckVhY2goZnVuY3Rpb24oZil7aVtmXT1zfSksaX0pO3ZhciBhPSJmYXIiaW4gamR8fFplLmF1dG9GZXRjaFN2ZyxyPXgxZShHcjEsZnVuY3Rpb24oaSxvKXt2YXIgcz1vWzBdLGw9b1sxXSxmPW9bMl07cmV0dXJuIGw9PT0iZmFyIiYmIWEmJihsPSJmYXMiKSx0eXBlb2Ygcz09InN0cmluZyImJihpLm5hbWVzW3NdPXtwcmVmaXg6bCxpY29uTmFtZTpmfSksdHlwZW9mIHM9PSJudW1iZXIiJiYoaS51bmljb2Rlc1tzLnRvU3RyaW5nKDE2KV09e3ByZWZpeDpsLGljb25OYW1lOmZ9KSxpfSx7bmFtZXM6e30sdW5pY29kZXM6e319KTt6cnQ9ci5uYW1lcyxrcnQ9ci51bmljb2Rlcyx5MWU9aVYoWmUuc3R5bGVEZWZhdWx0LHtmYW1pbHk6WmUuZmFtaWx5RGVmYXVsdH0pfTtGcjEoZnVuY3Rpb24odCl7eTFlPWlWKHQuc3R5bGVEZWZhdWx0LHtmYW1pbHk6WmUuZmFtaWx5RGVmYXVsdH0pfSksQ3J0KCk7VHJ0PWZ1bmN0aW9uKCl7cmV0dXJue3ByZWZpeDpudWxsLGljb25OYW1lOm51bGwscmVzdDpbXX19O0FydD1KYXQuY29uY2F0KFhhdCk7YWkxPVphdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1pMnx8dCE9PVJkfSkscmkxPU9iamVjdC5rZXlzKGkxZSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09aTJ9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKGkxZVt0XSl9KS5mbGF0KCk7b2kxPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtWMjEodGhpcyx0KSx0aGlzLmRlZmluaXRpb25zPXt9fXJldHVybiBVMjEodCxbe2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyO28rKylpW29dPWFyZ3VtZW50c1tvXTt2YXIgcz1pLnJlZHVjZSh0aGlzLl9wdWxsRGVmaW5pdGlvbnMse30pO09iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24obCl7YS5kZWZpbml0aW9uc1tsXT1fZShfZSh7fSxhLmRlZmluaXRpb25zW2xdfHx7fSksc1tsXSksYjFlKGwsc1tsXSk7dmFyIGY9ZjFlW2kyXVtsXTtmJiZiMWUoZixzW2xdKSxDcnQoKX0pfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZWZpbml0aW9ucz17fX19LHtrZXk6Il9wdWxsRGVmaW5pdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGEscil7dmFyIGk9ci5wcmVmaXgmJnIuaWNvbk5hbWUmJnIuaWNvbj97MDpyfTpyO3JldHVybiBPYmplY3Qua2V5cyhpKS5tYXAoZnVuY3Rpb24obyl7dmFyIHM9aVtvXSxsPXMucHJlZml4LGY9cy5pY29uTmFtZSxjPXMuaWNvbix1PWNbMl07YVtsXXx8KGFbbF09e30pLHUubGVuZ3RoPjAmJnUuZm9yRWFjaChmdW5jdGlvbihkKXt0eXBlb2YgZD09InN0cmluZyImJihhW2xdW2RdPWMpfSksYVtsXVtmXT1jfSksYX19XSl9KSgpLCRydD1bXSxaNj17fSxYNj17fSxzaTE9T2JqZWN0LmtleXMoWDYpO0RydD1uZXcgb2kxLGxpMT1mdW5jdGlvbigpe1plLmF1dG9SZXBsYWNlU3ZnPSExLFplLm9ic2VydmVNdXRhdGlvbnM9ITEsRW4oIm5vQXV0byIpfSxjaTE9e2kyc3ZnOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O3JldHVybiAkaT8oRW4oImJlZm9yZUkyc3ZnIixlKSxycygicHNldWRvRWxlbWVudHMyc3ZnIixlKSxycygiaTJzdmciLGUpKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk9wZXJhdGlvbiByZXF1aXJlcyBhIERPTSBvZiBzb21lIGtpbmQuIikpfSx3YXRjaDpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSxhPWUuYXV0b1JlcGxhY2VTdmdSb290O1plLmF1dG9SZXBsYWNlU3ZnPT09ITEmJihaZS5hdXRvUmVwbGFjZVN2Zz0hMCksWmUub2JzZXJ2ZU11dGF0aW9ucz0hMCxqcjEoZnVuY3Rpb24oKXtmaTEoe2F1dG9SZXBsYWNlU3ZnUm9vdDphfSksRW4oIndhdGNoIixlKX0pfX0sZGkxPXtpY29uOmZ1bmN0aW9uKGUpe2lmKGU9PT1udWxsKXJldHVybiBudWxsO2lmKEpxKGUpPT09Im9iamVjdCImJmUucHJlZml4JiZlLmljb25OYW1lKXJldHVybntwcmVmaXg6ZS5wcmVmaXgsaWNvbk5hbWU6RG4oZS5wcmVmaXgsZS5pY29uTmFtZSl8fGUuaWNvbk5hbWV9O2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPT09Mil7dmFyIGE9ZVsxXS5pbmRleE9mKCJmYS0iKT09PTA/ZVsxXS5zbGljZSgzKTplWzFdLHI9aVYoZVswXSk7cmV0dXJue3ByZWZpeDpyLGljb25OYW1lOkRuKHIsYSl8fGF9fWlmKHR5cGVvZiBlPT0ic3RyaW5nIiYmKGUuaW5kZXhPZigiIi5jb25jYXQoWmUuY3NzUHJlZml4LCItIikpPi0xfHxlLm1hdGNoKEFyMSkpKXt2YXIgaT1vVihlLnNwbGl0KCIgIikse3NraXBMb29rdXBzOiEwfSk7cmV0dXJue3ByZWZpeDppLnByZWZpeHx8YXMoKSxpY29uTmFtZTpEbihpLnByZWZpeCxpLmljb25OYW1lKXx8aS5pY29uTmFtZX19aWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgbz1hcygpO3JldHVybntwcmVmaXg6byxpY29uTmFtZTpEbihvLGUpfHxlfX19fSx0YT17bm9BdXRvOmxpMSxjb25maWc6WmUsZG9tOmNpMSxwYXJzZTpkaTEsbGlicmFyeTpEcnQsZmluZEljb25EZWZpbml0aW9uOnoxZSx0b0h0bWw6VWR9LGZpMT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSxhPWUuYXV0b1JlcGxhY2VTdmdSb290LHI9YT09PXZvaWQgMD9kMTphOyhPYmplY3Qua2V5cyhlci5zdHlsZXMpLmxlbmd0aD4wfHxaZS5hdXRvRmV0Y2hTdmcpJiYkaSYmWmUuYXV0b1JlcGxhY2VTdmcmJnRhLmRvbS5pMnN2Zyh7bm9kZTpyfSl9O1MxZT1lci5zdHlsZXM7Z2kxPXtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMn07TnJ0PWZ1bmN0aW9uKCl7fSxUMWU9WmUubWVhc3VyZVBlcmZvcm1hbmNlJiZlViYmZVYubWFyayYmZVYubWVhc3VyZT9lVjp7bWFyazpOcnQsbWVhc3VyZTpOcnR9LFdkPSdGQSAiNy4xLjAiJyxiaTE9ZnVuY3Rpb24oZSl7cmV0dXJuIFQxZS5tYXJrKCIiLmNvbmNhdChXZCwiICIpLmNvbmNhdChlLCIgYmVnaW5zIikpLGZ1bmN0aW9uKCl7cmV0dXJuIFBydChlKX19LFBydD1mdW5jdGlvbihlKXtUMWUubWFyaygiIi5jb25jYXQoV2QsIiAiKS5jb25jYXQoZSwiIGVuZHMiKSksVDFlLm1lYXN1cmUoIiIuY29uY2F0KFdkLCIgIikuY29uY2F0KGUpLCIiLmNvbmNhdChXZCwiICIpLmNvbmNhdChlLCIgYmVnaW5zIiksIiIuY29uY2F0KFdkLCIgIikuY29uY2F0KGUsIiBlbmRzIikpfSxfMWU9e2JlZ2luOmJpMSxlbmQ6UHJ0fSxuVj1mdW5jdGlvbigpe307bFY9e3JlcGxhY2U6ZnVuY3Rpb24oZSl7dmFyIGE9ZVswXTtpZihhLnBhcmVudE5vZGUpaWYoZVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoRnJ0KGkpLGEpfSksYS5nZXRBdHRyaWJ1dGUoJG4pPT09bnVsbCYmWmUua2VlcE9yaWdpbmFsU291cmNlKXt2YXIgcj1kMS5jcmVhdGVDb21tZW50KGtpMShhKSk7YS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChyLGEpfWVsc2UgYS5yZW1vdmUoKX0sbmVzdDpmdW5jdGlvbihlKXt2YXIgYT1lWzBdLHI9ZVsxXTtpZih+aDFlKGEpLmluZGV4T2YoWmUucmVwbGFjZW1lbnRDbGFzcykpcmV0dXJuIGxWLnJlcGxhY2UoZSk7dmFyIGk9bmV3IFJlZ0V4cCgiIi5jb25jYXQoWmUuY3NzUHJlZml4LCItLioiKSk7aWYoZGVsZXRlIHJbMF0uYXR0cmlidXRlcy5pZCxyWzBdLmF0dHJpYnV0ZXMuY2xhc3Mpe3ZhciBvPXJbMF0uYXR0cmlidXRlcy5jbGFzcy5zcGxpdCgiICIpLnJlZHVjZShmdW5jdGlvbihsLGYpe3JldHVybiBmPT09WmUucmVwbGFjZW1lbnRDbGFzc3x8Zi5tYXRjaChpKT9sLnRvU3ZnLnB1c2goZik6bC50b05vZGUucHVzaChmKSxsfSx7dG9Ob2RlOltdLHRvU3ZnOltdfSk7clswXS5hdHRyaWJ1dGVzLmNsYXNzPW8udG9Tdmcuam9pbigiICIpLG8udG9Ob2RlLmxlbmd0aD09PTA/YS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik6YS5zZXRBdHRyaWJ1dGUoImNsYXNzIixvLnRvTm9kZS5qb2luKCIgIikpfXZhciBzPXIubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBVZChsKX0pLmpvaW4oYApgKTthLnNldEF0dHJpYnV0ZSgkbiwiIiksYS5pbm5lckhUTUw9c319O0ExZT0hMTtjVj1udWxsO0FpMT1lci5zdHlsZXM7TmkxPWZ1bmN0aW9uKGUpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxyPWEudHJhbnNmb3JtLGk9cj09PXZvaWQgMD9qcjpyLG89YS5zeW1ib2wscz1vPT09dm9pZCAwPyExOm8sbD1hLm1hc2ssZj1sPT09dm9pZCAwP251bGw6bCxjPWEubWFza0lkLHU9Yz09PXZvaWQgMD9udWxsOmMsZD1hLmNsYXNzZXMsaD1kPT09dm9pZCAwP1tdOmQsZz1hLmF0dHJpYnV0ZXMsYj1nPT09dm9pZCAwP3t9OmcseD1hLnN0eWxlcyxtPXg9PT12b2lkIDA/e306eDtpZihlKXt2YXIgdj1lLnByZWZpeCx5PWUuaWNvbk5hbWUsdz1lLmljb247cmV0dXJuIHNWKF9lKHt0eXBlOiJpY29uIn0sZSksZnVuY3Rpb24oKXtyZXR1cm4gRW4oImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbiIse2ljb25EZWZpbml0aW9uOmUscGFyYW1zOmF9KSxrMWUoe2ljb25zOnttYWluOkMxZSh3KSxtYXNrOmY/QzFlKGYuaWNvbik6e2ZvdW5kOiExLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsaWNvbjp7fX19LHByZWZpeDp2LGljb25OYW1lOnksdHJhbnNmb3JtOl9lKF9lKHt9LGpyKSxpKSxzeW1ib2w6cyxtYXNrSWQ6dSxleHRyYTp7YXR0cmlidXRlczpiLHN0eWxlczptLGNsYXNzZXM6aH19KX0pfX0sUGkxPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57aWNvbjpFaTEoTmkxKX19LGhvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue211dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudHJlZUNhbGxiYWNrPVVydCxhLm5vZGVDYWxsYmFjaz1EaTEsYX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmkyc3ZnPWZ1bmN0aW9uKGEpe3ZhciByPWEubm9kZSxpPXI9PT12b2lkIDA/ZDE6cixvPWEuY2FsbGJhY2sscz1vPT09dm9pZCAwP2Z1bmN0aW9uKCl7fTpvO3JldHVybiBVcnQoaSxzKX0sZS5nZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb249ZnVuY3Rpb24oYSxyKXt2YXIgaT1yLmljb25OYW1lLG89ci5wcmVmaXgscz1yLnRyYW5zZm9ybSxsPXIuc3ltYm9sLGY9ci5tYXNrLGM9ci5tYXNrSWQsdT1yLmV4dHJhO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGgpe1Byb21pc2UuYWxsKFtMMWUoaSxvKSxmLmljb25OYW1lP0wxZShmLmljb25OYW1lLGYucHJlZml4KTpQcm9taXNlLnJlc29sdmUoe2ZvdW5kOiExLHdpZHRoOjUxMixoZWlnaHQ6NTEyLGljb246e319KV0pLnRoZW4oZnVuY3Rpb24oZyl7dmFyIGI9S3EoZywyKSx4PWJbMF0sbT1iWzFdO2QoW2EsazFlKHtpY29uczp7bWFpbjp4LG1hc2s6bX0scHJlZml4Om8saWNvbk5hbWU6aSx0cmFuc2Zvcm06cyxzeW1ib2w6bCxtYXNrSWQ6YyxleHRyYTp1LHdhdGNoYWJsZTohMH0pXSl9KS5jYXRjaChoKX0pfSxlLmdlbmVyYXRlQWJzdHJhY3RJY29uPWZ1bmN0aW9uKGEpe3ZhciByPWEuY2hpbGRyZW4saT1hLmF0dHJpYnV0ZXMsbz1hLm1haW4scz1hLnRyYW5zZm9ybSxsPWEuc3R5bGVzLGY9YVYobCk7Zi5sZW5ndGg+MCYmKGkuc3R5bGU9Zik7dmFyIGM7cmV0dXJuIG0xZShzKSYmKGM9cnMoImdlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZyIse21haW46byx0cmFuc2Zvcm06cyxjb250YWluZXJXaWR0aDpvLndpZHRoLGljb25XaWR0aDpvLndpZHRofSkpLHIucHVzaChjfHxvLmljb24pLHtjaGlsZHJlbjpyLGF0dHJpYnV0ZXM6aX19fX0sSWkxPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57bGF5ZXI6ZnVuY3Rpb24oYSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGk9ci5jbGFzc2VzLG89aT09PXZvaWQgMD9bXTppO3JldHVybiBzVih7dHlwZToibGF5ZXIifSxmdW5jdGlvbigpe0VuKCJiZWZvcmVET01FbGVtZW50Q3JlYXRpb24iLHthc3NlbWJsZXI6YSxwYXJhbXM6cn0pO3ZhciBzPVtdO3JldHVybiBhKGZ1bmN0aW9uKGwpe0FycmF5LmlzQXJyYXkobCk/bC5tYXAoZnVuY3Rpb24oZil7cz1zLmNvbmNhdChmLmFic3RyYWN0KX0pOnM9cy5jb25jYXQobC5hYnN0cmFjdCl9KSxbe3RhZzoic3BhbiIsYXR0cmlidXRlczp7Y2xhc3M6WyIiLmNvbmNhdChaZS5jc3NQcmVmaXgsIi1sYXllcnMiKV0uY29uY2F0KEphKG8pKS5qb2luKCIgIil9LGNoaWxkcmVuOnN9XX0pfX19fSxGaTE9e21peG91dDpmdW5jdGlvbigpe3JldHVybntjb3VudGVyOmZ1bmN0aW9uKGEpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxpPXIudGl0bGUsbz1pPT09dm9pZCAwP251bGw6aSxzPXIuY2xhc3NlcyxsPXM9PT12b2lkIDA/W106cyxmPXIuYXR0cmlidXRlcyxjPWY9PT12b2lkIDA/e306Zix1PXIuc3R5bGVzLGQ9dT09PXZvaWQgMD97fTp1O3JldHVybiBzVih7dHlwZToiY291bnRlciIsY29udGVudDphfSxmdW5jdGlvbigpe3JldHVybiBFbigiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIix7Y29udGVudDphLHBhcmFtczpyfSksbWkxKHtjb250ZW50OmEudG9TdHJpbmcoKSx0aXRsZTpvLGV4dHJhOnthdHRyaWJ1dGVzOmMsc3R5bGVzOmQsY2xhc3NlczpbIiIuY29uY2F0KFplLmNzc1ByZWZpeCwiLWxheWVycy1jb3VudGVyIildLmNvbmNhdChKYShsKSl9fSl9KX19fX0sT2kxPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57dGV4dDpmdW5jdGlvbihhKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30saT1yLnRyYW5zZm9ybSxvPWk9PT12b2lkIDA/anI6aSxzPXIuY2xhc3NlcyxsPXM9PT12b2lkIDA/W106cyxmPXIuYXR0cmlidXRlcyxjPWY9PT12b2lkIDA/e306Zix1PXIuc3R5bGVzLGQ9dT09PXZvaWQgMD97fTp1O3JldHVybiBzVih7dHlwZToidGV4dCIsY29udGVudDphfSxmdW5jdGlvbigpe3JldHVybiBFbigiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIix7Y29udGVudDphLHBhcmFtczpyfSksRXJ0KHtjb250ZW50OmEsdHJhbnNmb3JtOl9lKF9lKHt9LGpyKSxvKSxleHRyYTp7YXR0cmlidXRlczpjLHN0eWxlczpkLGNsYXNzZXM6WyIiLmNvbmNhdChaZS5jc3NQcmVmaXgsIi1sYXllcnMtdGV4dCIpXS5jb25jYXQoSmEobCkpfX0pfSl9fX0scHJvdmlkZXM6ZnVuY3Rpb24oZSl7ZS5nZW5lcmF0ZUxheWVyc1RleHQ9ZnVuY3Rpb24oYSxyKXt2YXIgaT1yLnRyYW5zZm9ybSxvPXIuZXh0cmEscz1udWxsLGw9bnVsbDtpZihBYXQpe3ZhciBmPXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZm9udFNpemUsMTApLGM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtzPWMud2lkdGgvZixsPWMuaGVpZ2h0L2Z9cmV0dXJuIFByb21pc2UucmVzb2x2ZShbYSxFcnQoe2NvbnRlbnQ6YS5pbm5lckhUTUwsd2lkdGg6cyxoZWlnaHQ6bCx0cmFuc2Zvcm06aSxleHRyYTpvLHdhdGNoYWJsZTohMH0pXSl9fX0sanJ0PW5ldyBSZWdFeHAoJyInLCJ1ZyIpLFdydD1bMTEwNTkyMCwxMTEyMzE5XSxHcnQ9X2UoX2UoX2UoX2Uoe30se0ZvbnRBd2Vzb21lOntub3JtYWw6ImZhcyIsNDAwOiJmYXMifX0pLHlhMSksU3IxKSxfYTEpLEQxZT1PYmplY3Qua2V5cyhHcnQpLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0W2UudG9Mb3dlckNhc2UoKV09R3J0W2VdLHR9LHt9KSxCaTE9T2JqZWN0LmtleXMoRDFlKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXt2YXIgYT1EMWVbZV07cmV0dXJuIHRbZV09YVs5MDBdfHxKYShPYmplY3QuZW50cmllcyhhKSlbMF1bMV0sdH0se30pO2ppMT1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJmlydC5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBlLmluY2x1ZGVzKGEpfSl9LFdpMT1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5bXTt2YXIgYT1uZXcgU2V0LHI9ZS5zcGxpdCgvLCg/IVteKCldKlwpKS8pLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi50cmltKCl9KTtyPXIuZmxhdE1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5pbmNsdWRlcygiKCIpP2Y6Zi5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYy50cmltKCl9KX0pO3ZhciBpPVhxKHIpLG87dHJ5e2ZvcihpLnMoKTshKG89aS5uKCkpLmRvbmU7KXt2YXIgcz1vLnZhbHVlO2lmKGppMShzKSl7dmFyIGw9aXJ0LnJlZHVjZShmdW5jdGlvbihmLGMpe3JldHVybiBmLnJlcGxhY2UoYywiIil9LHMpO2whPT0iIiYmbCE9PSIqIiYmYS5hZGQobCl9fX1jYXRjaChmKXtpLmUoZil9ZmluYWxseXtpLmYoKX1yZXR1cm4gYX07R2kxPXtob29rczpmdW5jdGlvbigpe3JldHVybnttdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2s9WnJ0LGF9fX0scHJvdmlkZXM6ZnVuY3Rpb24oZSl7ZS5wc2V1ZG9FbGVtZW50czJzdmc9ZnVuY3Rpb24oYSl7dmFyIHI9YS5ub2RlLGk9cj09PXZvaWQgMD9kMTpyO1plLnNlYXJjaFBzZXVkb0VsZW1lbnRzJiZacnQoaSl9fX0sWHJ0PSExLFlpMT17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbTp7dW53YXRjaDpmdW5jdGlvbigpe1JydCgpLFhydD0hMH19fX0saG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57Ym9vdHN0cmFwOmZ1bmN0aW9uKCl7SHJ0KE0xZSgibXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcyIse30pKX0sbm9BdXRvOmZ1bmN0aW9uKCl7U2kxKCl9LHdhdGNoOmZ1bmN0aW9uKGEpe3ZhciByPWEub2JzZXJ2ZU11dGF0aW9uc1Jvb3Q7WHJ0PyQxZSgpOkhydChNMWUoIm11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MiLHtvYnNlcnZlTXV0YXRpb25zUm9vdDpyfSkpfX19fSxRcnQ9ZnVuY3Rpb24oZSl7dmFyIGE9e3NpemU6MTYseDowLHk6MCxmbGlwWDohMSxmbGlwWTohMSxyb3RhdGU6MH07cmV0dXJuIGUudG9Mb3dlckNhc2UoKS5zcGxpdCgiICIpLnJlZHVjZShmdW5jdGlvbihyLGkpe3ZhciBvPWkudG9Mb3dlckNhc2UoKS5zcGxpdCgiLSIpLHM9b1swXSxsPW8uc2xpY2UoMSkuam9pbigiLSIpO2lmKHMmJmw9PT0iaCIpcmV0dXJuIHIuZmxpcFg9ITAscjtpZihzJiZsPT09InYiKXJldHVybiByLmZsaXBZPSEwLHI7aWYobD1wYXJzZUZsb2F0KGwpLGlzTmFOKGwpKXJldHVybiByO3N3aXRjaChzKXtjYXNlImdyb3ciOnIuc2l6ZT1yLnNpemUrbDticmVhaztjYXNlInNocmluayI6ci5zaXplPXIuc2l6ZS1sO2JyZWFrO2Nhc2UibGVmdCI6ci54PXIueC1sO2JyZWFrO2Nhc2UicmlnaHQiOnIueD1yLngrbDticmVhaztjYXNlInVwIjpyLnk9ci55LWw7YnJlYWs7Y2FzZSJkb3duIjpyLnk9ci55K2w7YnJlYWs7Y2FzZSJyb3RhdGUiOnIucm90YXRlPXIucm90YXRlK2w7YnJlYWt9cmV0dXJuIHJ9LGEpfSxaaTE9e21peG91dDpmdW5jdGlvbigpe3JldHVybntwYXJzZTp7dHJhbnNmb3JtOmZ1bmN0aW9uKGEpe3JldHVybiBRcnQoYSl9fX19LGhvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oYSxyKXt2YXIgaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS10cmFuc2Zvcm0iKTtyZXR1cm4gaSYmKGEudHJhbnNmb3JtPVFydChpKSksYX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmdlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZz1mdW5jdGlvbihhKXt2YXIgcj1hLm1haW4saT1hLnRyYW5zZm9ybSxvPWEuY29udGFpbmVyV2lkdGgscz1hLmljb25XaWR0aCxsPXt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiLmNvbmNhdChvLzIsIiAyNTYpIil9LGY9InRyYW5zbGF0ZSgiLmNvbmNhdChpLngqMzIsIiwgIikuY29uY2F0KGkueSozMiwiKSAiKSxjPSJzY2FsZSgiLmNvbmNhdChpLnNpemUvMTYqKGkuZmxpcFg/LTE6MSksIiwgIikuY29uY2F0KGkuc2l6ZS8xNiooaS5mbGlwWT8tMToxKSwiKSAiKSx1PSJyb3RhdGUoIi5jb25jYXQoaS5yb3RhdGUsIiAwIDApIiksZD17dHJhbnNmb3JtOiIiLmNvbmNhdChmLCIgIikuY29uY2F0KGMsIiAiKS5jb25jYXQodSl9LGg9e3RyYW5zZm9ybToidHJhbnNsYXRlKCIuY29uY2F0KHMvMiotMSwiIC0yNTYpIil9LGc9e291dGVyOmwsaW5uZXI6ZCxwYXRoOmh9O3JldHVybnt0YWc6ImciLGF0dHJpYnV0ZXM6X2Uoe30sZy5vdXRlciksY2hpbGRyZW46W3t0YWc6ImciLGF0dHJpYnV0ZXM6X2Uoe30sZy5pbm5lciksY2hpbGRyZW46W3t0YWc6ci5pY29uLnRhZyxjaGlsZHJlbjpyLmljb24uY2hpbGRyZW4sYXR0cmlidXRlczpfZShfZSh7fSxyLmljb24uYXR0cmlidXRlcyksZy5wYXRoKX1dfV19fX19LEUxZT17eDowLHk6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn07UWkxPXtob29rczpmdW5jdGlvbigpe3JldHVybntwYXJzZU5vZGVBdHRyaWJ1dGVzOmZ1bmN0aW9uKGEscil7dmFyIGk9ci5nZXRBdHRyaWJ1dGUoImRhdGEtZmEtbWFzayIpLG89aT9vVihpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKHMpe3JldHVybiBzLnRyaW0oKX0pKTpUcnQoKTtyZXR1cm4gby5wcmVmaXh8fChvLnByZWZpeD1hcygpKSxhLm1hc2s9byxhLm1hc2tJZD1yLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS1tYXNrLWlkIiksYX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmdlbmVyYXRlQWJzdHJhY3RNYXNrPWZ1bmN0aW9uKGEpe3ZhciByPWEuY2hpbGRyZW4saT1hLmF0dHJpYnV0ZXMsbz1hLm1haW4scz1hLm1hc2ssbD1hLm1hc2tJZCxmPWEudHJhbnNmb3JtLGM9by53aWR0aCx1PW8uaWNvbixkPXMud2lkdGgsaD1zLmljb24sZz1IcjEoe3RyYW5zZm9ybTpmLGNvbnRhaW5lcldpZHRoOmQsaWNvbldpZHRoOmN9KSxiPXt0YWc6InJlY3QiLGF0dHJpYnV0ZXM6X2UoX2Uoe30sRTFlKSx7fSx7ZmlsbDoid2hpdGUifSl9LHg9dS5jaGlsZHJlbj97Y2hpbGRyZW46dS5jaGlsZHJlbi5tYXAoS3J0KX06e30sbT17dGFnOiJnIixhdHRyaWJ1dGVzOl9lKHt9LGcuaW5uZXIpLGNoaWxkcmVuOltLcnQoX2Uoe3RhZzp1LnRhZyxhdHRyaWJ1dGVzOl9lKF9lKHt9LHUuYXR0cmlidXRlcyksZy5wYXRoKX0seCkpXX0sdj17dGFnOiJnIixhdHRyaWJ1dGVzOl9lKHt9LGcub3V0ZXIpLGNoaWxkcmVuOlttXX0seT0ibWFzay0iLmNvbmNhdChsfHxmcnQoKSksdz0iY2xpcC0iLmNvbmNhdChsfHxmcnQoKSksRT17dGFnOiJtYXNrIixhdHRyaWJ1dGVzOl9lKF9lKHt9LEUxZSkse30se2lkOnksbWFza1VuaXRzOiJ1c2VyU3BhY2VPblVzZSIsbWFza0NvbnRlbnRVbml0czoidXNlclNwYWNlT25Vc2UifSksY2hpbGRyZW46W2Isdl19LEM9e3RhZzoiZGVmcyIsY2hpbGRyZW46W3t0YWc6ImNsaXBQYXRoIixhdHRyaWJ1dGVzOntpZDp3fSxjaGlsZHJlbjpYaTEoaCl9LEVdfTtyZXR1cm4gci5wdXNoKEMse3RhZzoicmVjdCIsYXR0cmlidXRlczpfZSh7ZmlsbDoiY3VycmVudENvbG9yIiwiY2xpcC1wYXRoIjoidXJsKCMiLmNvbmNhdCh3LCIpIiksbWFzazoidXJsKCMiLmNvbmNhdCh5LCIpIil9LEUxZSl9KSx7Y2hpbGRyZW46cixhdHRyaWJ1dGVzOml9fX19LEtpMT17cHJvdmlkZXM6ZnVuY3Rpb24oZSl7dmFyIGE9ITE7ZXMubWF0Y2hNZWRpYSYmKGE9ZXMubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzKSxlLm1pc3NpbmdJY29uQWJzdHJhY3Q9ZnVuY3Rpb24oKXt2YXIgcj1bXSxpPXtmaWxsOiJjdXJyZW50Q29sb3IifSxvPXthdHRyaWJ1dGVUeXBlOiJYTUwiLHJlcGVhdENvdW50OiJpbmRlZmluaXRlIixkdXI6IjJzIn07ci5wdXNoKHt0YWc6InBhdGgiLGF0dHJpYnV0ZXM6X2UoX2Uoe30saSkse30se2Q6Ik0xNTYuNSw0NDcuN2wtMTIuNiwyOS41Yy0xOC43LTkuNS0zNS45LTIxLjItNTEuNS0zNC45bDIyLjctMjIuN0MxMjcuNiw0MzAuNSwxNDEuNSw0NDAsMTU2LjUsNDQ3Ljd6IE00MC42LDI3Mkg4LjUgYzEuNCwyMS4yLDUuNCw0MS43LDExLjcsNjEuMUw1MCwzMjEuMkM0NS4xLDMwNS41LDQxLjgsMjg5LDQwLjYsMjcyeiBNNDAuNiwyNDBjMS40LTE4LjgsNS4yLTM3LDExLjEtNTQuMWwtMjkuNS0xMi42IEMxNC43LDE5NC4zLDEwLDIxNi43LDguNSwyNDBINDAuNnogTTY0LjMsMTU2LjVjNy44LTE0LjksMTcuMi0yOC44LDI4LjEtNDEuNUw2OS43LDkyLjNjLTEzLjcsMTUuNi0yNS41LDMyLjgtMzQuOSw1MS41IEw2NC4zLDE1Ni41eiBNMzk3LDQxOS42Yy0xMy45LDEyLTI5LjQsMjIuMy00Ni4xLDMwLjRsMTEuOSwyOS44YzIwLjctOS45LDM5LjgtMjIuNiw1Ni45LTM3LjZMMzk3LDQxOS42eiBNMTE1LDkyLjQgYzEzLjktMTIsMjkuNC0yMi4zLDQ2LjEtMzAuNGwtMTEuOS0yOS44Yy0yMC43LDkuOS0zOS44LDIyLjYtNTYuOCwzNy42TDExNSw5Mi40eiBNNDQ3LjcsMzU1LjVjLTcuOCwxNC45LTE3LjIsMjguOC0yOC4xLDQxLjUgbDIyLjcsMjIuN2MxMy43LTE1LjYsMjUuNS0zMi45LDM0LjktNTEuNUw0NDcuNywzNTUuNXogTTQ3MS40LDI3MmMtMS40LDE4LjgtNS4yLDM3LTExLjEsNTQuMWwyOS41LDEyLjYgYzcuNS0yMS4xLDEyLjItNDMuNSwxMy42LTY2LjhINDcxLjR6IE0zMjEuMiw0NjJjLTE1LjcsNS0zMi4yLDguMi00OS4yLDkuNHYzMi4xYzIxLjItMS40LDQxLjctNS40LDYxLjEtMTEuN0wzMjEuMiw0NjJ6IE0yNDAsNDcxLjRjLTE4LjgtMS40LTM3LTUuMi01NC4xLTExLjFsLTEyLjYsMjkuNWMyMS4xLDcuNSw0My41LDEyLjIsNjYuOCwxMy42VjQ3MS40eiBNNDYyLDE5MC44YzUsMTUuNyw4LjIsMzIuMiw5LjQsNDkuMmgzMi4xIGMtMS40LTIxLjItNS40LTQxLjctMTEuNy02MS4xTDQ2MiwxOTAuOHogTTkyLjQsMzk3Yy0xMi0xMy45LTIyLjMtMjkuNC0zMC40LTQ2LjFsLTI5LjgsMTEuOWM5LjksMjAuNywyMi42LDM5LjgsMzcuNiw1Ni45IEw5Mi40LDM5N3ogTTI3Miw0MC42YzE4LjgsMS40LDM2LjksNS4yLDU0LjEsMTEuMWwxMi42LTI5LjVDMzE3LjcsMTQuNywyOTUuMywxMCwyNzIsOC41VjQwLjZ6IE0xOTAuOCw1MCBjMTUuNy01LDMyLjItOC4yLDQ5LjItOS40VjguNWMtMjEuMiwxLjQtNDEuNyw1LjQtNjEuMSwxMS43TDE5MC44LDUweiBNNDQyLjMsOTIuM0w0MTkuNiwxMTVjMTIsMTMuOSwyMi4zLDI5LjQsMzAuNSw0Ni4xIGwyOS44LTExLjlDNDcwLDEyOC41LDQ1Ny4zLDEwOS40LDQ0Mi4zLDkyLjN6IE0zOTcsOTIuNGwyMi43LTIyLjdjLTE1LjYtMTMuNy0zMi44LTI1LjUtNTEuNS0zNC45bC0xMi42LDI5LjUgQzM3MC40LDcyLjEsMzg0LjQsODEuNSwzOTcsOTIuNHoifSl9KTt2YXIgcz1fZShfZSh7fSxvKSx7fSx7YXR0cmlidXRlTmFtZToib3BhY2l0eSJ9KSxsPXt0YWc6ImNpcmNsZSIsYXR0cmlidXRlczpfZShfZSh7fSxpKSx7fSx7Y3g6IjI1NiIsY3k6IjM2NCIscjoiMjgifSksY2hpbGRyZW46W119O3JldHVybiBhfHxsLmNoaWxkcmVuLnB1c2goe3RhZzoiYW5pbWF0ZSIsYXR0cmlidXRlczpfZShfZSh7fSxvKSx7fSx7YXR0cmlidXRlTmFtZToiciIsdmFsdWVzOiIyODsxNDsyODsyODsxNDsyODsifSl9LHt0YWc6ImFuaW1hdGUiLGF0dHJpYnV0ZXM6X2UoX2Uoe30scykse30se3ZhbHVlczoiMTswOzE7MTswOzE7In0pfSksci5wdXNoKGwpLHIucHVzaCh7dGFnOiJwYXRoIixhdHRyaWJ1dGVzOl9lKF9lKHt9LGkpLHt9LHtvcGFjaXR5OiIxIixkOiJNMjYzLjcsMzEyaC0xNmMtNi42LDAtMTItNS40LTEyLTEyYzAtNzEsNzcuNC02My45LDc3LjQtMTA3LjhjMC0yMC0xNy44LTQwLjItNTcuNC00MC4yYy0yOS4xLDAtNDQuMyw5LjYtNTkuMiwyOC43IGMtMy45LDUtMTEuMSw2LTE2LjIsMi40bC0xMy4xLTkuMmMtNS42LTMuOS02LjktMTEuOC0yLjYtMTcuMmMyMS4yLTI3LjIsNDYuNC00NC43LDkxLjItNDQuN2M1Mi4zLDAsOTcuNCwyOS44LDk3LjQsODAuMiBjMCw2Ny42LTc3LjQsNjMuNS03Ny40LDEwNy44QzI3NS43LDMwNi42LDI3MC4zLDMxMiwyNjMuNywzMTJ6In0pLGNoaWxkcmVuOmE/W106W3t0YWc6ImFuaW1hdGUiLGF0dHJpYnV0ZXM6X2UoX2Uoe30scykse30se3ZhbHVlczoiMTswOzA7MDswOzE7In0pfV19KSxhfHxyLnB1c2goe3RhZzoicGF0aCIsYXR0cmlidXRlczpfZShfZSh7fSxpKSx7fSx7b3BhY2l0eToiMCIsZDoiTTIzMi41LDEzNC41bDcsMTY4YzAuMyw2LjQsNS42LDExLjUsMTIsMTEuNWg5YzYuNCwwLDExLjctNS4xLDEyLTExLjVsNy0xNjhjMC4zLTYuOC01LjItMTIuNS0xMi0xMi41aC0yMyBDMjM3LjcsMTIyLDIzMi4yLDEyNy43LDIzMi41LDEzNC41eiJ9KSxjaGlsZHJlbjpbe3RhZzoiYW5pbWF0ZSIsYXR0cmlidXRlczpfZShfZSh7fSxzKSx7fSx7dmFsdWVzOiIwOzA7MTsxOzA7MDsifSl9XX0pLHt0YWc6ImciLGF0dHJpYnV0ZXM6e2NsYXNzOiJtaXNzaW5nIn0sY2hpbGRyZW46cn19fX0sSmkxPXtob29rczpmdW5jdGlvbigpe3JldHVybntwYXJzZU5vZGVBdHRyaWJ1dGVzOmZ1bmN0aW9uKGEscil7dmFyIGk9ci5nZXRBdHRyaWJ1dGUoImRhdGEtZmEtc3ltYm9sIiksbz1pPT09bnVsbD8hMTppPT09IiI/ITA6aTtyZXR1cm4gYS5zeW1ib2w9byxhfX19fSxlbzE9W1VyMSxQaTEsSWkxLEZpMSxPaTEsR2kxLFlpMSxaaTEsUWkxLEtpMSxKaTFdO25pMShlbzEse21peG91dHNUbzp0YX0pO3RvMT10YS5ub0F1dG8sYW8xPXRhLmNvbmZpZyxybzE9dGEubGlicmFyeSxpbzE9dGEuZG9tLG9vMT10YS5wYXJzZSxzbzE9dGEuZmluZEljb25EZWZpbml0aW9uLG5vMT10YS50b0h0bWwsTjFlPXRhLmljb24sbG8xPXRhLmxheWVyLGNvMT10YS50ZXh0LGRvMT10YS5jb3VudGVyfSk7dmFyIGZvMSxQMWUsZWl0LHRpdCxhaXQscml0LEkxZSxpaXQsb2l0LHNpdCxuaXQsbGl0LGNpdCxkaXQsZml0LHVpdCxwaXQsaGl0LG1pdCxnaXQseGl0LGJpdCx2aXQseWl0LHdpdCxNaXQseml0LGtpdCxTaXQsRjFlLENpdCxMaXQsVGl0LF9pdCxBaXQsJGl0LERpdCxFaXQsTml0LFBpdCxJaXQsRml0LE9pdCxCaXQsUml0LEhpdCxxaXQsVml0LFVpdCxPMWUsaml0LFdpdCxHaXQsWWl0LFppdCxYaXQsUWl0LEtpdCxKaXQsZW90LHRvdCxhb3Qscm90LGlvdCxvb3Qsc290LG5vdCxsb3QsQjFlLGNvdCxkb3QsZm90LHVvdCxwb3QsaG90LG1vdCxnb3QseG90LGJvdCx2b3QseW90LHdvdCxNb3Qsem90LGtvdCxTb3QsQ290LExvdCxUb3QsX290LEFvdCwkb3QsRG90LEVvdCxOb3QsUG90LElvdCxGb3QsT290LEJvdCxSb3QsSG90LHFvdCxWb3QsVW90LGpvdCxXb3QsZlYsR290LFlvdCxSMWUsWm90LFhvdCxRb3QsSDFlLEtvdCxkVixKb3QsZXN0LHExZSx0c3QsYXN0LHJzdCxpc3QsVjFlLG9zdCxzc3QsbnN0LGxzdCxjc3QsZHN0LGZzdCx1c3QscHN0LFUxZSxoc3QsbXN0LGdzdCx4c3QsYnN0LHZzdCx5c3Qsd3N0LGoxZSxNc3QsenN0LGtzdCxTc3QsQ3N0LExzdCxXMWUsVHN0LF9zdCxBc3QsRzFlLCRzdCxEc3QsRXN0LE5zdCxQc3QsSXN0LEZzdCxPc3QsQnN0LFJzdCxIc3QscXN0LFZzdCxVc3QsanN0LFdzdCxHc3QsWXN0LFpzdCxYc3QsUXN0LEtzdCxKc3QsWTFlLGVudCx0bnQsYW50LHJudCxpbnQsb250LHNudCxaMWUsbm50LGxudCxjbnQsZG50LGZudCx1bnQscG50LGhudCxtbnQsZ250LHhudCxibnQsdm50LHludCx3bnQsTW50LHpudCxrbnQsU250LENudCxMbnQsVG50LF9udCxBbnQsJG50LERudCxFbnQsTm50LFBudCxJbnQsRm50LE9udCxCbnQsUm50LEhudCxxbnQsVm50LFVudCxqbnQsV250LEdudCx1VixZbnQsWm50LFhudCxRbnQsWDFlLEtudCxKbnQsZTB0LHBWLHQwdCxhMHQscjB0LGkwdCxvMHQsUTFlLHMwdCxuMHQsbDB0LGMwdCxkMHQsZjB0LHUwdCxwMHQsaDB0LG0wdCxnMHQseDB0LGIwdCx2MHQseTB0LHcwdCxHZCxNMHQsejB0LGswdCxTMHQsQzB0LEwwdCxUMHQsXzB0LEEwdCwkMHQsRDB0LEUwdCxOMHQsUDB0LEkwdCxGMHQsTzB0LEIwdCxSMHQsSDB0LHEwdCxWMHQsVTB0LGowdCxXMHQsRzB0LFkwdCxaMHQsWDB0LFEwdCxLMHQsSjB0LGU0dCx0NHQsYTR0LHI0dCxpNHQsbzR0LEsxZSxzNHQsbjR0LGw0dCxjNHQsZDR0LGY0dCx1NHQscDR0LGg0dCxtNHQsZzR0LHg0dCxiNHQsdjR0LEoxZSx5NHQsdzR0LE00dCx6NHQsazR0LFM0dCxlMmUsQzR0LEw0dCxUNHQsXzR0LEE0dCwkNHQsRDR0LEU0dCxONHQsUDR0LEk0dCxGNHQsTzR0LEI0dCxSNHQsSDR0LHE0dCxWNHQsVTR0LGo0dCxXNHQsRzR0LFk0dCxaNHQsWDR0LHQyZSxoVixRNHQsSzR0LEo0dCxlM3QsdDN0LGEzdCxyM3QsaTN0LG8zdCxzM3QsbjN0LGwzdCxhMmUsYzN0LGQzdCxmM3QsdTN0LHAzdCxoM3QsbTN0LG1WLGczdCx4M3QsYjN0LHYzdCx5M3QsdzN0LE0zdCx6M3QsazN0LFMzdCxDM3QsTDN0LFQzdCxyMmUsXzN0LEEzdCwkM3QsRDN0LEUzdCxOM3QsUDN0LEkzdCxGM3QsTzN0LEIzdCxSM3QsSDN0LHEzdCxWM3QsaTJlLFUzdCxqM3QsVzN0LEczdCxZM3QsWjN0LGdWLFgzdCxvMmUsUTN0LEszdCxKM3QsZWx0LHRsdCxhbHQsczJlLHJsdCxpbHQsb2x0LHNsdCxubHQsbGx0LGNsdCxkbHQsZmx0LHVsdCxwbHQsaGx0LG1sdCxnbHQseGx0LGJsdCx2bHQseWx0LHdsdCxNbHQsemx0LGtsdCxTbHQsQ2x0LExsdCxuMmUsVGx0LF9sdCxBbHQsJGx0LERsdCxFbHQsTmx0LFBsdCxsMmUsSWx0LEZsdCxPbHQsQmx0LFJsdCxIbHQscWx0LFZsdCxVbHQsamx0LFdsdCxHbHQsWWx0LGMyZSxabHQsWGx0LFFsdCxLbHQsSmx0LGVjdCx0Y3QsYWN0LHJjdCxpY3Qsb2N0LHNjdCxkMmUsbmN0LGxjdCxjY3QsZGN0LGZjdCx1Y3QscGN0LGhjdCxtY3QsZ2N0LHhjdCxiY3QsdmN0LHljdCx4Vix3Y3QsTWN0LHpjdCxrY3QsU2N0LENjdCxMY3QsVGN0LF9jdCxBY3QsZjJlLCRjdCxEY3QsRWN0LE5jdCxQY3QsSWN0LEZjdCxPY3QsQmN0LFJjdCxIY3QscWN0LFZjdCxVY3QsamN0LFdjdCxHY3QsWWN0LFpjdCxYY3QsUWN0LEtjdCxKY3QsZTZ0LHQ2dCxhNnQscjZ0LGk2dCxvNnQsczZ0LG42dCxsNnQsYzZ0LGQ2dCxmNnQsdTZ0LHUyZSxwNnQsaDZ0LG02dCxnNnQseDZ0LHAyZSxiNnQsdjZ0LHk2dCx1bzEsdzZ0PW4oKCk9PntmbzE9ImZhYiIsUDFlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1naXRodWIiLGljb246WzQ0OCw1MTIsWyJnaXRodWItc3F1YXJlIl0sImYwOTIiLCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTI2NS44IDQwNy43YzAtMS44IDAtNiAuMS0xMS42IC4xLTExLjQgLjEtMjguOCAuMS00My43IDAtMTUuNi01LjItMjUuNS0xMS4zLTMwLjcgMzctNC4xIDc2LTkuMiA3Ni03My4xIDAtMTguMi02LjUtMjcuMy0xNy4xLTM5IDEuNy00LjMgNy40LTIyLTEuNy00NS0xMy45LTQuMy00NS43IDE3LjktNDUuNyAxNy45LTI2LjYtNy41LTU2LjYtNy41LTgzLjIgMCAwIDAtMzEuOC0yMi4yLTQ1LjctMTcuOS05LjEgMjIuOS0zLjUgNDAuNi0xLjcgNDUtMTAuNiAxMS43LTE1LjYgMjAuOC0xNS42IDM5IDAgNjMuNiAzNy4zIDY5IDc0LjMgNzMuMS00LjggNC4zLTkuMSAxMS43LTEwLjYgMjIuMy05LjUgNC4zLTMzLjggMTEuNy00OC4zLTEzLjktOS4xLTE1LjgtMjUuNS0xNy4xLTI1LjUtMTcuMS0xNi4yLS4yLTEuMSAxMC4yLTEuMSAxMC4yIDEwLjggNSAxOC40IDI0LjIgMTguNCAyNC4yIDkuNyAyOS43IDU2LjEgMTkuNyA1Ni4xIDE5LjcgMCA5IC4xIDIxLjcgLjEgMzAuNiAwIDQuOCAuMSA4LjYgLjEgMTAgMCA0LjMtMyA5LjUtMTEuNSA4LTY2LTIyLjEtMTEyLjItODQuOS0xMTIuMi0xNTguMyAwLTkxLjggNzAuMi0xNjEuNSAxNjItMTYxLjVTMzg4IDE2NS42IDM4OCAyNTcuNGMuMSA3My40LTQ0LjcgMTM2LjMtMTEwLjcgMTU4LjMtOC40IDEuNS0xMS41LTMuNy0xMS41LTh6bS05MC41LTU0LjhjLS4yLTEuNSAxLjEtMi44IDMtMy4yIDEuOS0uMiAzLjcgLjYgMy45IDEuOSAuMyAxLjMtMSAyLjYtMyAzLTEuOSAuNC0zLjctLjQtMy45LTEuN3ptLTkuMSAzLjJjLTIuMiAuMi0zLjctLjktMy43LTIuNCAwLTEuMyAxLjUtMi40IDMuNS0yLjQgMS45LS4yIDMuNyAuOSAzLjcgMi40IDAgMS4zLTEuNSAyLjQtMy41IDIuNHptLTE0LjMtMi4yYy0xLjktLjQtMy4yLTEuOS0yLjgtMy4yczIuNC0xLjkgNC4xLTEuNWMyIC42IDMuMyAyLjEgMi44IDMuNC0uNCAxLjMtMi40IDEuOS00LjEgMS4zem0tMTIuNS03LjNjLTEuNS0xLjMtMS45LTMuMi0uOS00LjEgLjktMS4xIDIuOC0uOSA0LjMgLjYgMS4zIDEuMyAxLjggMy4zIC45IDQuMS0uOSAxLjEtMi44IC45LTQuMy0uNnptLTguNS0xMGMtMS4xLTEuNS0xLjEtMy4yIDAtMy45IDEuMS0uOSAyLjgtLjIgMy43IDEuMyAxLjEgMS41IDEuMSAzLjMgMCA0LjEtLjkgLjYtMi42IDAtMy43LTEuNXptLTYuMy04LjhjLTEuMS0xLjMtMS4zLTIuOC0uNC0zLjUgLjktLjkgMi40LS40IDMuNSAuNiAxLjEgMS4zIDEuMyAyLjggLjQgMy41LS45IC45LTIuNCAuNC0zLjUtLjZ6bS02LTYuNGMtMS4zLS42LTEuOS0xLjctMS41LTIuNiAuNC0uNiAxLjUtLjkgMi44LS40IDEuMyAuNyAxLjkgMS44IDEuNSAyLjYtLjQgLjktMS43IDEuMS0yLjggLjR6Il19LGVpdD1QMWUsdGl0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InRoaW5rLXBlYWtzIixpY29uOls1NzYsNTEyLFtdLCJmNzMxIiwiTTQ2NS40IDQwOS40bDg3LjEtMTUwLjItMzItLjMtNTUuMSA5NS0yMDYuMi0zNTMuOS0yMzYuMiA0MDcuNCAzMiAuMyAyMDQuMi0zNTIuMSAyMDYuMiAzNTMuOHpNMTEwLjEgMzY1LjNsMzIuMSAwIDExNy40LTIwMi41IDIwMy40IDM0OS4xIDMyLjUgLjEtMjM1LjgtNDA0LjYtMTQ5LjYgMjU3Ljl6Il19LGFpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnb29nbGUtZHJpdmUiLGljb246WzUxMiw1MTIsW10sImYzYWEiLCJNMzM5IDMxNC45TDE3NS40IDMyIDMzNi42IDMyIDUwMC4yIDMxNC45IDMzOSAzMTQuOXpNMjAxLjUgMzM4LjVsLTgwLjYgMTQxLjUgMzEwLjUgMCA4MC42LTE0MS41LTMxMC41IDB6TTE1NC4xIDY3LjRMMCAzMzguNSA4MC42IDQ4MCAyMzcgMjA4LjggMTU0LjEgNjcuNHoiXX0scml0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImF1dG9wcmVmaXhlciIsaWNvbjpbNjQwLDUxMixbXSwiZjQxYyIsIk0zMTguNCAxNmwtMTYxIDQ4MCA3Ny41IDAgMjUuNC04MS40IDExOS41IDAgMjUuMiA4MS40IDc3LjUgMC0xNjQuMS00ODB6TTI3OC4xIDM1Ny45bDQxLjItMTMwLjQgMS41IDAgNDAuOSAxMzAuNC04My42IDB6TTY0MCA0MDVMNjMwIDM3My42IDQ2Mi4xIDM1OCA0ODEuNSA0MTQuNSA2NDAgNDA1ek0xNzcuOSAzNThMMTAgMzczLjcgMCA0MDUgMTU4LjUgNDE0LjQgMTc3LjkgMzU4eiJdfSxJMWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLXZpYWRlbyIsaWNvbjpbNDQ4LDUxMixbInZpYWRlby1zcXVhcmUiXSwiZjJhYSIsIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMTE4LjMgMzgxLjJjLTY4LTczLjYtMTkuOC0xOTYuMSA4MS4yLTE5Ni4xIDEzLjMgMCAyNi42IDIuMSAzOS4xIDYuNy00LjMgOC40LTcuMyAxNy42LTguNCAyNy4xLTkuNy00LjEtMjAuMi02LTMwLjctNi00OC44IDAtODQuNiA0MS43LTg0LjYgODguOSAwIDQzIDI4LjUgNzguNyA2OS41IDg1LjkgNjEuNS0yNCA3Mi45LTExNy42IDcyLjktMTc1IDAtNy4zIDAtMTQuOC0uNi0yMi4xLTExLjItMzIuOS0yNi42LTY0LjYtNDQuMi05NC41IDI3LjEgMTguMyA0MS45IDYyLjUgNDQuMiA5NC4xbDAgLjRjNy43IDIyLjUgMTEuOCA0Ni4yIDExLjggNzAgMCA1NC4xLTIxLjkgOTktNjguMyAxMjguMmwtMi40IC4yYzUwIDEgODYuMi0zOC42IDg2LjItODcuMiAwLTEyLjItMi4xLTI0LjMtNi45LTM1LjcgOS41LTEuOSAxOC41LTUuNiAyNi40LTEwLjUgMTUuMyAzNi42IDEyLjYgODcuMy0yMi44IDEyNS42LTQyLjQgNDYuMi0xMjAgNDYuNi0xNjIuNCAwek0yNzQuNiAyMTcuNmMyMS45LTEyIDQ5LjYtMzAuNyA2Mi4zLTUzIDEuNS0zIDQuMS04LjYgNC41LTEyLTEyLjUgMjcuOS00NC4yIDQ5LjgtNzMuOSA1Ni43LTQuNy03LjMtNy41LTE1LjUtNy41LTI0LjMgMC0xMC4zIDUuMi0yNC4xIDEyLjktMzEuNiA4LjMtNy45IDE4LTEwLjkgMjcuOS0xNC4xIDE2LTUuMSAzMi41LTEwLjMgNDQuNS0zNS45IDMyLjUgNDYuMiAxMy4xIDEzMC4zLTM2LjMgMTMwLjMtMTMuMyAwLTI1LjEtNy4xLTM0LjQtMTYuMXoiXX0saWl0PUkxZSxvaXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY3BhbmVsIixpY29uOls2NDAsNTEyLFtdLCJmMzg4IiwiTTIxMC4zIDIyMC4yYy01LjYtMjQuOC0yNi45LTQxLjItNTEtNDEuMmwtMzcgMGMtNy4xIDAtMTIuNSA0LjUtMTQuMyAxMC45TDczLjEgMzIwIDk3LjggMzE5LjljNi44IDAgMTIuMy00LjUgMTQuMi0xMC43bDI1LjgtOTUuNyAxOS44IDBjOC40IDAgMTYuMiA1LjYgMTguMyAxNC44IDIuNSAxMC45LTUuOSAyMi42LTE4LjMgMjIuNmwtMTAuMyAwYy03IDAtMTIuNSA0LjYtMTQuMyAxMC44bC02LjQgMjMuOCAzMiAwYzM3LjIgMCA1OC4zLTM2LjIgNTEuNy02NS4zem0tMTU2LjUgMjhsMTguNiAwYzYuOSAwIDEyLjQtNC40IDE0LjMtMTAuOWw2LjItMjMuNi00MCAwQzMwIDIxMy43IDkgMjI3LjggMS43IDI1NC44LTcgMjg4LjYgMTguNSAzMjAgNTIgMzIwbDEyLjQgMCA3LjEtMjYuMWMxLjItNC40LTIuMi04LjMtNi40LTguM2wtMTEuMyAwYy0yNC43IDAtMjQuOS0zNy40IDAtMzcuNHptMjQ3LjUtMzQuOGwtNzcuOSAwLTMuNSAxMy40Yy0yLjQgOS42IDQuNSAxOC41IDE0LjIgMTguNWw1Ny41IDBjNCAwIDIuNCA0LjMgMi4xIDUuM2wtOC42IDMxLjhjLS40IDEuNC0uOSA1LjMtNS41IDUuM2wtMzQuOSAwYy01LjMgMC01LjMtNy45IDAtNy45bDIxLjYgMGM2LjggMCAxMi4zLTQuNiAxNC4yLTEwLjhsMy41LTEzLjItNDguNCAwYy0zOS4yIDAtNDMuNiA2My44LS43IDYzLjhsNTcuNSAuMmMxMS4yIDAgMjAuNi03LjIgMjMuNC0xNy44bDE0LTUxLjhjNC44LTE5LjItOS43LTM2LjgtMjguNS0zNi44ek02MzMuMSAxNzlsLTE4LjkgMGMtNC45IDAtOS4yIDMuMi0xMC40IDcuOUw1NjguMiAzMjBjMjAuNyAwIDM5LjgtMTMuOCA0NC45LTM0LjVsMjYuNS05OC4yYzEuMi00LjMtMi04LjMtNi41LTguM3pNMzk2LjggMjEzLjdsMCAuMS00OC4zIDAtMjYuMiA5OGMtMS4yIDQuNCAyLjIgOC4zIDYuNCA4LjNsMTguOSAwYzQuOCAwIDkuMi0zIDEwLjQtNy44bDE3LjItNjQgMTkuOCAwYzEyLjUgMCAyMS40IDExLjggMTguMSAyMy40bC0xMC42IDQwYy0xLjIgNC4zIDEuOSA4LjMgNi40IDguM2wxOS4xIDBjNC42IDAgOS4xLTIuOSAxMC4zLTcuOGw4LjgtMzMuMWM5LTMzLjEtMTUuOS02NS40LTUwLjMtNjUuNHptOTguMyA3NC42Yy0zLjYgMC02LTMuNC01LjEtNi43bDgtMzBjLjktMy45IDMuNy02IDcuOC02bDMyLjkgMGMyLjYgMCA0LjYgMi40IDMuOSA1LjFsLS43IDIuNmMtLjYgMi0xLjkgMy0zLjkgM2wtMjEuNiAwYy03IDAtMTIuNiA0LjYtMTQuMiAxMC44bC0zLjUgMTMgNTMuNCAwYzEwLjUgMCAyMC4zLTYuNiAyMy4yLTE3LjZsMy4yLTEyYzQuOS0xOS4xLTkuMy0zNi44LTI4LjMtMzYuOGwtNDcuMyAwYy0xNy45IDAtMzMuOCAxMi0zOC42IDI5LjZsLTEwLjggNDBjLTUgMTcuNyA4LjMgMzYuNyAyOC4zIDM2LjdsNjYuNyAwYzYuOCAwIDEyLjMtNC41IDE0LjItMTAuN2w1LjctMjEtNzMuMyAweiJdfSxzaXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWVuZGVsZXkiLGljb246WzY0MCw1MTIsW10sImY3YjMiLCJNNjI0LjYgMzI1LjJjLTEyLjMtMTIuNC0yOS43LTE5LjItNDguNC0xNy4yLTQzLjMtMS00OS43LTM0LjktMzcuNS05OC44IDIyLjgtNTcuNS0xNC45LTEzMS41LTg3LjQtMTMwLjgtNzcuNCAuNy04MS43IDgyLTEzMC45IDgyLTQ4LjEgMC01NC04MS4zLTEzMC45LTgyLTcyLjktLjgtMTEwLjEgNzMuMy04Ny40IDEzMC44IDEyLjIgNjMuOSA1LjggOTcuOC0zNy41IDk4LjgtMjEuMi0yLjMtMzcgNi41LTUzIDIyLjUtMTkuOSAxOS43LTE5LjMgOTQuOCA0Mi42IDEwMi42IDQ3LjEgNS45IDgxLjYtNDIuOSA2MS4yLTg3LjgtNDcuMy0xMDMuNyAxODUuOS0xMDYuMSAxNDYuNS04LjItLjEgLjEtLjIgLjItLjMgLjQtMjYuOCA0Mi44IDYuOCA5Ny40IDU4LjggOTUuMiA1Mi4xIDIuMSA4NS40LTUyLjYgNTguOC05NS4yLS4xLS4yLS4yLS4zLS4zLS40LTM5LjQtOTcuOSAxOTMuOC05NS41IDE0Ni41IDguMi00LjYgMTAtNi43IDIxLjMtNS43IDMzIDQuOSA1My40IDY4LjcgNzQuMSAxMDQuOSAzNS4yIDE3LjgtMTQuOCAyMy4xLTY1LjYgMC04OC4zek0zMjAuNyAzMDYuMWwtLjYgMGMtNDMuNCAwLTYyLjgtMzcuNS02Mi44LTYyLjggMC0zNC43IDI4LjItNjIuOCA2Mi44LTYyLjhsLjYgMGMzNC43IDAgNjIuOCAyOC4xIDYyLjggNjIuOCAwIDI1LTE5LjIgNjIuOC02Mi44IDYyLjh6Il19LG5pdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkcmFmdDJkaWdpdGFsIixpY29uOls1MTIsNTEyLFtdLCJmMzk2IiwiTTQ5NiAzOTguMWwtMTQ0LTgyLjIgMCA2NC43LTkxLjMgMGMzMC44LTM1IDgxLjgtOTUuOSAxMTEuOC0xNDkuMyAzNS4yLTYyLjYgMTYuMS0xMjMuNC0xMi44LTE1My4zLTQuNC00LjYtNjIuMi02Mi45LTE2Ni00MS4yLTU5LjEgMTIuNC04OS40IDQzLjQtMTA0LjMgNjcuMy0xMy4xIDIwLjktMTcgMzkuOC0xOC4yIDQ3LjctNS41IDMzIDE5LjQgNjcuMSA1Ni43IDY3LjEgMzEuNyAwIDU3LjMtMjUuNyA1Ny4zLTU3LjQgMC0yNy4xLTE5LjctNTIuMS00OC01Ni44IDEuOC03LjMgMTcuNy0yMS4xIDI2LjMtMjQuNyA0MS4xLTE3LjMgNzggNS4yIDgzLjMgMzMuNSA4LjMgNDQuMy0zNy4xIDkwLjQtNjkuNyAxMjcuNi03Ni42IDg3LTE0Mi44IDE1NS43LTE2MS4xIDE3NC44bDMzNi0uMSAwIDY0LjIgMTQ0LTgxLjl6TTM4NS45IDM3MWw0Ny4xIDI3LjItNDcuMSAyNy4yIDAtNTQuNHpNMTA1LjQgMTYxLjRhMjIuNCAyMi40IDAgMSAxIDQ0LjggMCAyMi40IDIyLjQgMCAxIDEgLTQ0LjggMHpNOTguNSAzODAuNWMyNS42LTI3LjQgOTcuNy0xMDQuNyAxNTAuOC0xNjkuOSAzNS4xLTQzLjEgNDAuMy04Mi40IDI4LjQtMTEyLjctNy40LTE4LjgtMTcuNS0zMC4yLTI0LjMtMzUuNyA0NS4zIDIuMSA2OCAyMy40IDgyLjIgMzguMyAwIDAgNDIuNCA0OC4yIDUuOCAxMTMuMy0zNyA2NS45LTExMC45IDE0Ny41LTEyOC41IDE2Ni43bC0xMTQuNCAweiJdfSxsaXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicmVwbHlkIixpY29uOls0NDgsNTEyLFtdLCJmM2U2IiwiTTMyMCA0ODBsLTE5MiAwQzU3LjYgNDgwIDAgNDIyLjQgMCAzNTJMMCAxNjBDMCA4OS42IDU3LjYgMzIgMTI4IDMybDE5MiAwYzcwLjQgMCAxMjggNTcuNiAxMjggMTI4bDAgMTkyYzAgNzAuNC01Ny42IDEyOC0xMjggMTI4ek0xOTMuNCAyNzMuMmMtNi4xLTItMTEuNi0zLjEtMTYuNC0zLjEtNy4yIDAtMTMuNSAxLjktMTguOSA1LjZzLTkuNiA5LTEyLjggMTUuOGwtMS4xIDAtNC4yLTE4LjMtMjggMCAwIDEzOC45IDM2LjEgMCAwLTg5LjdjMS41LTUuNCA0LjQtOS44IDguNy0xMy4yczkuOC01LjEgMTYuMi01LjFjNC42IDAgOS44IDEgMTUuNiAzLjFsNC44LTM0ek0zMDguNiAzNzYuNmMtMy4yIDIuNC03LjcgNC44LTEzLjcgNy4xcy0xMi44IDMuNS0yMC40IDMuNWMtMTIuMiAwLTIxLjEtMy0yNi41LTguOS01LjUtNS45LTguNS0xNC43LTktMjYuNGw4My4zIDBjLjktNC44IDEuNi05LjQgMi4xLTEzLjkgLjUtNC40IC43LTguNiAuNy0xMi41IDAtMTAuNy0xLjYtMTkuNy00LjctMjYuOS0zLjItNy4yLTcuMy0xMy0xMi41LTE3LjItNS4yLTQuMy0xMS4xLTcuMy0xNy44LTkuMi02LjctMS44LTEzLjUtMi44LTIwLjYtMi44LTIxLjEgMC0zNy41IDYuMS00OS4yIDE4LjNzLTE3LjUgMzAuNS0xNy41IDU1YzAgMjIuOCA1LjIgNDAuNyAxNS42IDUzLjcgMTAuNCAxMy4xIDI2LjggMTkuNiA0OS4yIDE5LjYgMTAuNyAwIDIwLjktMS41IDMwLjQtNC42czE3LjEtNi44IDIyLjYtMTEuMmwtMTItMjMuNnptLTIxLjgtNzAuM2MzLjggNS40IDUuMyAxMy4xIDQuNiAyMy4xbC01MS43IDBjLjktOS40IDMuNy0xNyA4LjItMjIuNnMxMS41LTguNSAyMS04LjVjOC4yLS4xIDE0LjEgMi42IDE3LjkgOHptNzkuOSAyLjVjNC4xIDMuOSA5LjQgNS44IDE2LjEgNS44IDcgMCAxMi42LTEuOSAxNi43LTUuOHM2LjEtOS4xIDYuMS0xNS42LTItMTEuNi02LjEtMTUuNC05LjYtNS43LTE2LjctNS43Yy02LjcgMC0xMiAxLjktMTYuMSA1LjdzLTYuMSA4LjktNi4xIDE1LjQgMiAxMS43IDYuMSAxNS42em0wIDEwMC41YzQuMSAzLjkgOS40IDUuOCAxNi4xIDUuOCA3IDAgMTIuNi0xLjkgMTYuNy01LjhzNi4xLTkuMSA2LjEtMTUuNi0yLTExLjYtNi4xLTE1LjQtOS42LTUuNy0xNi43LTUuN2MtNi43IDAtMTIgMS45LTE2LjEgNS43cy02LjEgOC45LTYuMSAxNS40YzAgNi42IDIgMTEuNyA2LjEgMTUuNnoiXX0sY2l0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImVtcGlyZSIsaWNvbjpbNTEyLDUxMixbXSwiZjFkMSIsIk0yOTUuNiA1NC4yYy0xMC44LTIuMi0yMi4xLTMuMy0zMy41LTMuNmwwLTE4LjJjNzguMSAyLjIgMTQ2LjEgNDQgMTg0LjYgMTA2LjZsLTE1LjggOS4xYy02LjEtOS43LTEyLjctMTguOC0yMC4yLTI3LjFsLTE4IDE1LjVjLTI2LTI5LjYtNjEuNC01MC43LTEwMS45LTU4LjRsNC44LTIzLjl6TTYxLjQgMzIyLjRsMjMtNy43Yy02LjQtMTguMy0xMC0zOC4yLTEwLTU4LjdzMy4zLTQwLjQgOS43LTU4LjdsLTIyLjctNy43YzMuNi0xMC44IDguMy0yMS4zIDEzLjYtMzFsLTE1LjgtOS4xQzQyIDE4MSAzMi4xIDIxNy41IDMyLjEgMjU2czEwIDc1IDI3LjEgMTA2LjZMNzUgMzUzLjVjLTUuMy0xMC05LjctMjAuMy0xMy42LTMxLjF6TTIyMS4xIDQzNGMtNDAuNC04LTc1LjgtMjkuMS0xMDEuOS01OC43bC0xOCAxNS44Yy03LjUtOC42LTE0LjQtMTcuNy0yMC4yLTI3LjRsLTE2IDkuNGMzOC41IDYyLjMgMTA2LjggMTA0LjMgMTg0LjkgMTA2LjZsMC0xOC4zYy0xMS4zLS4zLTIyLjctMS43LTMzLjUtMy42bDQuNy0yMy44ek0xMDEuMyAxMjAuOWwxOCAxNS41YzI2LTI5LjYgNjEuNC01MC43IDEwMS45LTU4LjRsLTQuNy0yMy44YzEwLjgtMi4yIDIyLjEtMy4zIDMzLjUtMy42bDAtMTguMkMxNzEuOSAzNC42IDEwMy45IDc2LjQgNjUuNCAxMzlsMTUuOCA5LjFjNi05LjcgMTIuNi0xOC45IDIwLjEtMjcuMnpNNDEwLjcgMzkxLjFsLTE4LTE1LjhjLTI2IDI5LjYtNjEuNCA1MC43LTEwMS45IDU4LjdsNC43IDIzLjhjLTEwLjggMS45LTIyLjEgMy4zLTMzLjUgMy42bDAgMTguM2M3OC4xLTIuMiAxNDYuNC00NC4zIDE4NC45LTEwNi42bC0xNi4xLTkuNGMtNS43IDkuNy0xMi42IDE4LjgtMjAuMSAyNy40ek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem00ODMuOCAwYTIzNS44IDIzNS44IDAgMSAwIC00NzEuNiAwIDIzNS44IDIzNS44IDAgMSAwIDQ3MS42IDB6bS0zOS0xMDYuNkw0MzcgMTU4LjVjNS4zIDkuNyAxMCAyMC4yIDEzLjYgMzFsLTIyLjcgNy43YzYuNCAxOC4zIDkuNyAzOC4yIDkuNyA1OC43cy0zLjYgNDAuNC0xMCA1OC43bDIzIDcuN2MtMy45IDEwLjgtOC4zIDIxLTEzLjYgMzFsMTUuOCA5LjFDNDcwIDMzMSA0NzkuOSAyOTQuNSA0NzkuOSAyNTZzLTkuOS03NS0yNy4xLTEwNi42em0tMTgzIDE3Ny43YzE2LjMtMy4zIDMwLjQtMTEuNiA0MC43LTIzLjVsNTEuMiA0NC44YzExLjktMTMuNiAyMS4zLTI5LjMgMjcuMS00Ni44bC02NC4yLTIyLjFjMi41LTcuNSAzLjktMTUuMiAzLjktMjMuNXMtMS40LTE2LjEtMy45LTIzLjVsNjQuNS0yMi4xYy02LjEtMTcuNC0xNS41LTMzLjItMjcuNC00Ni44bC01MS4yIDQ0LjhjLTEwLjItMTEuOS0yNC40LTIwLjUtNDAuNy0yMy44bDEzLjMtNjYuNGMtOC42LTEuOS0xNy43LTIuOC0yNy4xLTIuOHMtMTguNSAuOC0yNy4xIDIuOGwxMy4zIDY2LjRjLTE2LjMgMy4zLTMwLjQgMTEuOS00MC43IDIzLjhsLTUxLjItNDQuOGMtMTEuOSAxMy42LTIxLjMgMjkuMy0yNy40IDQ2LjhsNjQuNSAyMi4xYy0yLjUgNy41LTMuOSAxNS4yLTMuOSAyMy41czEuNCAxNi4xIDMuOSAyMy41bC02NC4yIDIyLjFjNS44IDE3LjQgMTUuMiAzMy4yIDI3LjEgNDYuOGw1MS4yLTQ0LjhjMTAuMiAxMS45IDI0LjQgMjAuMiA0MC43IDIzLjVsLTEzLjMgNjYuN2M4LjYgMS43IDE3LjcgMi44IDI3LjEgMi44czE4LjUtMS4xIDI3LjEtMi44bC0xMy4zLTY2Ljd6Il19LGRpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhY2Nlc3NpYmxlLWljb24iLGljb246WzQ0OCw1MTIsWzYyMTA3XSwiZjM2OCIsIk00MjMuOSAyNTUuOEw0MTEgNDEzLjFjLTMuMyA0MC43LTYzLjkgMzUuMS02MC42LTQuOWwxMC0xMjIuNS00MS4xIDIuM2MxMC4xIDIwLjcgMTUuOCA0My45IDE1LjggNjguNSAwIDQxLjItMTYuMSA3OC43LTQyLjMgMTA2LjVsLTM5LjMtMzkuM2M1Ny45LTYzLjcgMTMuMS0xNjcuMi03NC0xNjcuMi0yNS45IDAtNDkuNSA5LjktNjcuMiAyNkw3MyAyNDMuMmMyMi0yMC43IDUwLjEtMzUuMSA4MS40LTQwLjJsNzUuMy04NS43LTQyLjYtMjQuOC01MS42IDQ2QzEwNS41IDE2NS4zIDY0LjkgMTIwIDk1IDkzLjFsNjgtNjAuN2M5LjgtOC44IDI0LjEtMTAuMiAzNS41LTMuNiAwIDAgMTM5LjMgODAuOSAxMzkuNSA4MS4xIDE2LjIgMTAuMSAyMC43IDM2IDYuMSA1Mi42bC01OC40IDY2LjUgMTA2LjEtNS45YzE4LjUtMS4xIDMzLjYgMTQuNCAzMi4xIDMyLjd6TTM1OSAxMDEuOEE1MC45IDUwLjkgMCAxIDAgMzU5IDAgNTAuOSA1MC45IDAgMSAwIDM1OSAxMDEuOHpNMTc5LjYgNDU2LjVjLTgwLjYgMC0xMjcuNC05MC42LTgyLjctMTU2LjFMNTcuMiAyNjAuN0MzNi40IDI4NyAyNCAzMjAuMyAyNCAzNTYuNCAyNCA0ODcuMSAxNzQuNyA1NTcuOCAyNzUuNCA0NzguOWwtMzkuNy0zOS43Yy0xNiAxMC45LTM1LjMgMTcuMy01Ni4xIDE3LjN6Il19LGZpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJxdW9yYSIsaWNvbjpbNDQ4LDUxMixbXSwiZjJjNCIsIk00NDAuNyAzODYuN2wtMjkuMyAwYy0xLjUgMTMuNS0xMC41IDMwLjgtMzMgMzAuOC0yMC41IDAtMzUuMy0xNC4yLTQ5LjUtMzUuOCA0NC4yLTM0LjIgNzQuNy04Ny41IDc0LjctMTUzIC4xLTExNy41LTk2LjYtMTk2LjctMTk4LjQtMTk2LjctOTkuNyAwLTE5Ny43IDc5LjctMTk3LjcgMTk2LjcgMCAxMzQuMSAxMzEuMyAyMjEuNiAyNDkgMTg5IDE5LjcgMzMuNiA0NS43IDYyLjMgOTUuMiA2Mi4zIDgxLjggMCA5MC44LTc1LjMgODktOTMuM3pNMjk3LjIgMzI5LjJjLTE5LjUtMjkuMi00My43LTUyLjItOTEuNS01Mi4yLTMwLjUgMC01NC4zIDEwLTY5IDIyLjhsMTIuMiAyNC4zYzYuMi0zIDEzLTQgMTkuOC00IDM1LjUgMCA1My43IDMwLjggNjkuMiA2MS4zLTEwIDMtMjAuNyA0LjItMzIuNyA0LjItNzUgMC0xMDcuNS01My0xMDcuNS0xNTYuNyAwLTEwNC40IDMyLjUtMTU3LjkgMTA3LjUtMTU3LjkgNzYuMiAwIDEwOC43IDUzLjUgMTA4LjcgMTU3LjcgLjEgNDEuOC01LjQgNzUuNi0xNi43IDEwMC41eiJdfSx1aXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY2MtamNiIixpY29uOls1NzYsNTEyLFtdLCJmMjRiIiwiTTQzMS41IDI0NC4zbDAtMzIuM2M0MS4yIDAgMzguNSAuMiAzOC41IC4yIDcuMyAxLjMgMTMuMyA3LjMgMTMuMyAxNiAwIDguOC02IDE0LjUtMTMuMyAxNS44LTEuMiAuNC0zLjMgLjMtMzguNSAuM3ptNDIuOCAyMC4yYy0yLjgtLjctMy4zLS41LTQyLjgtLjVsMCAzNWMzOS42IDAgNDAgLjIgNDIuOC0uNSA3LjUtMS41IDEzLjUtOCAxMy41LTE3IDAtOC43LTYtMTUuNS0xMy41LTE3ek01NzYgODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xODIgMTkyLjNsLTU3IDBjMCA2Ny4xIDEwLjcgMTA5LjctMzUuOCAxMDkuNy0xOS41IDAtMzguOC01LjctNTcuMi0xNC44bDAgMjhjMzAgOC4zIDY4IDguMyA2OCA4LjMgOTcuOSAwIDgyLTQ3LjcgODItMTMxLjJ6bTE3OC41IDQuNWMtNjMuNC0xNi0xNjUtMTQuOS0xNjUgNTkuMyAwIDc3LjEgMTA4LjIgNzMuNiAxNjUgNTkuMmwwLTI4LjNDMzEyLjkgMzExLjcgMjUzIDMwOSAyNTMgMjU2czU5LjgtNTUuNiAxMDcuNS0zMS4ybDAtMjh6TTU0NCAyODYuNWMwLTE4LjUtMTYuNS0zMC41LTM4LTMybDAtLjhjMTkuNS0yLjcgMzAuMy0xNS41IDMwLjMtMzAuMiAwLTE5LTE1LjctMzAtMzctMzEgMCAwIDYuMy0uMy0xMjAuMy0uM2wwIDEyNy41IDEyMi43IDBjMjQuMyAuMSA0Mi4zLTEyLjkgNDIuMy0zMy4yeiJdfSxwaXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmVkb3JhIixpY29uOls0NDgsNTEyLFtdLCJmNzk4IiwiTTAgMjU1LjhDLjEgMTMyLjIgMTAwLjMgMzIgMjI0IDMyUzQ0OCAxMzIuMyA0NDggMjU2IDM0Ny44IDQ3OS45IDIyNC4xIDQ4MEw1MC45IDQ4MEMyMi44IDQ4MCAuMSA0NTcuMyAwIDQyOS4ybDAgMCAwLTE3My40IDAgMHptMzQyLjYtNjMuMWMwLTM5LjctMzUuNi02OC41LTczLjItNjguNS0zNC45IDAtNjUuOCAyNi4zLTcwLjEgNTkuOS0uMiAzLjgtLjQgNS0uNCA4LjUtLjEgMjEuMSAwIDQyLjgtLjggNjQuNCAuOSAyNi4xIDEgNTIuMSAwIDc2LjYgMCAyNy4xLTE5LjQgNDUuNS00NC43IDQ1LjVzLTQ1LjgtMjAuMi00NS44LTQ1LjVjLjUtMjcuNyAyMi42LTQ1LjMgNDguNS00Ni4xbC4yIDAgMjYuMy0uMiAwLTM3LjMtMjYuMyAuMmMtNDcuMS0uNC04NC42IDM2LjUtODUuOSA4My40IDAgNDUuNiAzNy41IDgyLjkgODMgODIuOSA0MyAwIDc4LjctMzMuNiA4Mi42LTc1LjZsLjItNTMuNSAzMi42LS4zYzI1LjMgLjIgMjUtMzcuOC0uMi0zNy4zbC0zMi40IC4zYzAtNi40IC4xLTEyLjggLjEtMTkuMiAuMS0xMi43IC4xLTI1LjQtLjEtMzguMiAuMS0xNi41IDE1LjgtMzEuMiAzMy4yLTMxLjIgMTcuNSAwIDM1LjkgOC43IDM1LjkgMzEuMiAwIDMuMi0uMSA1LjEtLjMgNi4zLTEuOSAxMC41IDUuMiAyMC40IDE1LjcgMjEuOSAxMC42IDEuNSAyMC4yLTYuMSAyMS4yLTE2LjYgLjYtNC4yIC43LTcuOSAuNy0xMS42eiJdfSxoaXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZHVvbGluZ28iLGljb246WzU3Niw1MTIsW10sImU4MTIiLCJNNTA0LjMgMjMwLjVjMTAuNCA4OC41LTQzLjQgMTcyLjEtMTI4LjIgMTk5cy0xNzYuNi0xMC4zLTIxOC45LTg4LjdjLTcyIDMtMTM3LjQtMzkuOC0xNjMuMi0xMDUuNS0yLjYtNi42LTEuOS0xNCAxLjktMTkuOXMxMC4yLTkuNyAxNy4yLTEwLjFsOTYuMS02LTIzLjgtNzUuOWMtNi4zLTIwLTIuMi00MS45IDExLTU4LjNzMzMuNy0yNSA1NC41LTIzYzUyLjIgNSA4Ni44IDQuOCAxMDQtLjZTMzAwIDE2LjcgMzM5LTE2LjljMTUuOS0xMy43IDM3LjctMTguNSA1Ny44LTEyLjdzMzYuMSAyMS4zIDQyLjQgNDEuNEw0NjIuOCA4NyA1NDMuNiAzNy4zYzYtMy43IDEzLjQtNC4zIDE5LjktMS42czExLjMgOC4zIDEyLjkgMTUuMmMxNi4yIDY4LjItMTIuNCAxNDAuMy03Mi4xIDE3OS41ek0yNTguNSA0NzUuOWwwIDBjMTUuMSA3LjUgMjEuNSAyNS44IDE0LjIgNDFzLTI1LjQgMjEuOS00MC43IDE0LjlsLTQzLjktMjFjLTE1LjEtNy41LTIxLjUtMjUuOC0xNC4yLTQxczI1LjQtMjEuOSA0MC43LTE0LjlsNDMuOCAyMXpNNTY0LjYgMzQ1LjdjMTQuOCA4LjQgMjAgMjcuMyAxMS42IDQyLjJsLTIzLjkgNDIuNGMtOC43IDE0LjMtMjcuMSAxOS4yLTQxLjYgMTAuOXMtMTkuOS0yNi42LTEyLTQxLjRsMjMuOS00Mi40YzQtNy4xIDEwLjctMTIuNCAxOC42LTE0LjZzMTYuMy0xLjIgMjMuNCAyLjl6Il19LG1pdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmaXJzdGRyYWZ0IixpY29uOlszODQsNTEyLFtdLCJmM2ExIiwiTTM4NCAxOTJsLTY0IDAgMCAxMjgtMTI4IDAgMCAxMjgtMTkyIDAgMC0yNS42IDE2Ni40IDAgMC0xMjggMTI4IDAgMC0xMjggODkuNiAwIDAgMjUuNnptLTI1LjYgMzguNGwwIDEyOC0xMjggMCAwIDEyOC0xNjYuNCAwIDAgMjUuNiAxOTIgMCAwLTEyOCAxMjggMCAwLTE1My42LTI1LjYgMHptMjUuNiAxOTJsLTg5LjYgMCAwIDg5LjYgMjUuNiAwIDAtNjQgNjQgMCAwLTI1LjZ6TTAgMGwwIDM4NCAxMjggMCAwLTEyOCAxMjggMCAwLTEyOCAxMjggMCAwLTEyOC0zODQgMHoiXX0sZ2l0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZyZWVic2QiLGljb246WzQ0OCw1MTIsW10sImYzYTQiLCJNMzAzLjcgOTYuMmMxMS4xLTExLjEgMTE1LjUtNzcgMTM5LjItNTMuMiAyMy43IDIzLjctNDIuMSAxMjguMS01My4yIDEzOS4ycy0zOS40IC45LTYzLjEtMjIuOWMtMjMuOC0yMy43LTM0LjEtNTItMjIuOS02My4xek0xMDkuOSA2OC4xQzczLjYgNDcuNSAyMiAyNC42IDUuNiA0MS4xLTExIDU3LjcgMTIuNyAxMTAuNSAzMy41IDE0Ni44IDUyIDExNC42IDc4LjMgODcuNSAxMDkuOSA2OC4xek00MDYuNyAxNzRjMy4zIDExLjMgMi43IDIwLjctMi43IDI2LjEtMjAuMyAyMC4zLTg3LjUtMjctMTA5LjMtNzAuMS0xOC0zMi4zLTExLjEtNTMuNCAxNC45LTQ4LjcgNS43LTMuNiAxMi4zLTcuNiAxOS42LTExLjYtMjkuOC0xNS41LTYzLjYtMjQuMy05OS41LTI0LjMtMTE5LjEgMC0yMTUuNiA5Ni41LTIxNS42IDIxNS42IDAgMTE5IDk2LjUgMjE1LjYgMjE1LjYgMjE1LjZTNDQ1LjMgMzgwLjEgNDQ1LjMgMjYxYzAtMzguNC0xMC4xLTc0LjUtMjcuNy0xMDUuOC0zLjkgNy03LjYgMTMuMy0xMC45IDE4Ljh6Il19LHhpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJvZHlzZWUiLGljb246WzUxMiw1MTIsW10sImU1YzYiLCJNNDA2LjcgNDYzYy00Mi4zIDMwLjgtOTQuNCA0OS0xNTAuNyA0OS0xMTEuMSAwLTIwNS43LTcwLjgtMjQxLjEtMTY5LjggMi40IDEuNyA1LjkgMy42IDcuOSA0LjQgMTYuMyA3LjQgNDAuMS01LjQgNjIuOS0yOC43IDYuOS02LjkgMTQuNC0xMi40IDIyLjgtMTcuMyAxOC4zLTExLjkgMzcuNi0yMC44IDU4LjQtMjcuMiAwIDAgMjIuMyAzNC4yIDQzLjEgNzQuOHMtMjIuMyA1NC0yNy4yIDU0Yy0uMyAwLS44IDAtMS41LS4xLTExLS41LTcwLTMtNTYgNTEuMSAxNC45IDU3LjQgOTcuNSAzNi42IDEzOS42IDguOXMzMS43LTExOC4zIDMxLjctMTE4LjNjNDEuMS02LjQgNTQgMzcuMSA1Ny45IDU5LjQgLjggNC42IDEuMSA5LjkgMS40IDE1LjUgMS4xIDIxLjIgMi4zIDQ1LjYgMzUuMyA0Ni40IDUuMyAwIDEwLjYtLjggMTUuNS0ybDAtLjF6bS05NS4zLTIzLjdjLTItLjUtMy41LTIuNS0zLTUgMS0yLjUgMy0zLjUgNS0zczMuNSAzIDMgNS0yLjUgMy41LTUgM3ptLTIwNy05NS42YzEuNS0uNSAzLjUgMSA0IDMgMCAyLTEgNC0zIDQtMS41IC41LTMuNS0xLTQtMy0uNS0xLjUgMS0zLjUgMy00ek00NTEuOCA0MjFjMzcuNS00NC42IDYwLjItMTAyLjIgNjAuMi0xNjUgMC02Ny41LTI2LjEtMTI4LjktNjguOC0xNzQuNy0uMSAyMy41LTYuMSA0OC4yLTE2LjggNjkuMi0xMS45IDIwLjMtNDkgNTguOS02OS44IDc4LjctLjcgLjMtMS4xIC45LTEuNSAxLjQtLjIgLjItLjMgLjQtLjUgLjYtNSA2LjktNCAxNi44IDMgMjEuOCAyMS4zIDE1LjggNTYuNCA0NS42IDU5LjQgNzIuOCAzLjUgMzQuOSAyNy45IDc1LjYgMzQuMiA4Ni4yIC44IDEuMyAxLjMgMi4xIDEuNCAyLjQgMCAyLjItLjQgNC4zLS44IDYuNWwwIC4xek0zOTAuNyAyNTFjLS41IDMgMSA1LjkgNCA2LjRzNS45LTEgNi40LTQtMS01LjktNC02LjRjLTMtMS01LjkgMS02LjQgNHptNjEuNC02MC45bC0xMS40IDUuNC0zIDEyLjktNS40LTExLjQtMTIuOS0zIDExLjQtNS40IDMtMTIuOSA1LjQgMTEuNCAxMi45IDN6TTM5NS41IDQxLjNjLTE2LjIgOC4yLTIyLjEgMzIuOC0yOSA2MS40LS4zIDEuNC0uNyAyLjgtMSA0LjItOS41IDM4LjUtMzAuNiAzNy42LTQxLjcgMzcuMi0xLjEgMC0yLS4xLTIuOS0uMS01LjEgMC02LTQtOC45LTE3LjEtMi42LTEyLjEtNi45LTMyLTE3LjktNjMuNi0yMi43LTY1LjgtODIuNy00OS40LTEyOC4yLTIyLjItNTUuMyAzMy4xLTM0LjQgMTAxLjktMTkuOCAxNDkuNCAuNyAyLjIgMS40IDQuNCAyIDYuNi00IDQtMTMuOCA3LjUtMjYgMTEuOS0xMi4xIDQuMy0yNi42IDkuNS00MC4zIDE2LjktMzMuOSAxOC03MC4zIDQ5LTc5LjggNjIuNi0xLjMtMTAuNy0yLTIxLjUtMi0zMi41IDAtMTQxLjQgMTE0LjYtMjU2IDI1Ni0yNTYgNTEuNCAwIDk5LjQgMTUuMiAxMzkuNSA0MS4zek01OC45IDE4OS42Yy0xLjUtMi00LjUtMy02LjQtMS41cy0zIDQuNS0xLjUgNi40IDQuNSAzIDYuNCAxLjVjMi41LTEuNSAzLTQuNSAxLjUtNi40ek0zMjcuMyA2NC45YzItMS41IDUtLjUgNi40IDEuNSAxLjUgMi41IDEgNS40LTEuNSA2LjQtMiAxLjUtNSAuNS02LjQtMS41cy0uNS01IDEuNS02LjR6TTk1LjEgMTA1Yy0uNSAxLjUgLjUgMyAyIDMgMS41IC41IDMtLjUgMy0yIC41LTEuNS0uNS0zLTItM3MtMyAuNS0zIDJ6bTg0LjctLjVjLTMuNS00My4xIDM3LjEtNTQgMzcuMS01NCA0NC4xLTE1LjQgNTYgNS45IDY2LjQgMzcuNnMzIDQyLjYtMzguNiA1OC45LTYxLjktNC41LTY0LjktNDIuNmwwIC4xem04OS42IDE0LjlsMSAwYzIuNSAwIDUtMiA1LTUgMi02LjkgMS0xNC40LTItMjAuOC0xLjUtMi00LTMuNS02LjQtMi41LTMgMS00LjUgNC0zLjUgNi45IDIgNC41IDMgOS45IDEuNSAxNC45LS41IDMgMS41IDUuOSA0LjUgNi40bC0uMSAuMXptLTkuOS00MS42Yy0yIDAtNC0xLTUtM3MtMi0zLjUtMy01Yy0yLTItMi01LjQgMC03LjRzNS40LTIgNy40IDBjMiAyLjUgMy41IDUgNSA3LjRzLjUgNS45LTIuNSA3LjRjLS42IDAtMSAuMi0xLjMgLjMtLjIgLjEtLjQgLjItLjYgLjJsMCAuMXoiXX0sYml0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdnLWNpcmNsZSIsaWNvbjpbNTEyLDUxMixbXSwiZjI2MSIsIk0yNTcuNSA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMjA4IDM4Mi44bC0xMjUuNy0xMjUuNyAxMjUuNy0xMjUuNyAzNS4yIDM1LjQtMjQuMiAyNC4yLTExLjEtMTEuMS03Ny4yIDc3LjIgNzcuMiA3Ny4yIDI2LjYtMjYuNi01My4xLTUyLjkgMjQuNC0yNC40IDc3LjIgNzcuMi03NSA3NS4yem05OS0yLjJsLTM1LjItMzUuMiAyNC4xLTI0LjQgMTEuMSAxMS4xIDc3LjItNzcuMi03Ny4yLTc3LjItMjYuNSAyNi41IDUzLjEgNTIuOS0yNC40IDI0LjQtNzcuMi03Ny4yIDc1LTc1IDEyNS43IDEyNS43LTEyNS43IDEyNS42eiJdfSx2aXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY2xvdWRmbGFyZSIsaWNvbjpbNjQwLDUxMixbXSwiZTA3ZCIsIk00MDcuOSAzMTkuOUwxNzcuMSAzMTdjLS43IDAtMS40LS4yLTItLjVzLTEuMi0uOC0xLjYtMS40Yy0uNC0uNi0uNy0xLjMtLjctMnMwLTEuNCAuMi0yLjFjLjQtMS4xIDEuMS0yLjEgMi4xLTIuOHMyLjEtMS4yIDMuMy0xLjJsMjMyLjktMi45YzI3LjYtMS4zIDU3LjUtMjMuNiA2OC01MC44bDEzLjMtMzQuNWMuNC0uOSAuNS0xLjkgLjUtMi45IDAtLjUtLjEtMS4xLS4yLTEuNi03LjQtMzIuMi0yNS02MS4xLTUwLjMtODIuM3MtNTYuNy0zMy43LTg5LjctMzUuNS02NS42IDcuMy05MyAyNS43LTQ4IDQ1LjMtNTguOCA3Ni41Yy0xMS4zLTguNS0yNC45LTEzLjMtMzktMTMuN3MtMjggMy41LTM5LjggMTEuNC0yMC44IDE5LjEtMjUuOSAzMi4zLTUuOSAyNy42LTIuNCA0MS4zYy01Mi4zIDEuNS05NC4yIDQ0LjEtOTQuMiA5Ni41IDAgNC43IC4zIDkuMyAxIDE0IC4yIDEuMSAuNyAyLjEgMS41IDIuOHMxLjkgMS4xIDIuOSAxLjFsNDI2LjEgLjFjMCAwIC4xIDAgLjEgMCAxLjIgMCAyLjMtLjQgMy4zLTEuMXMxLjYtMS43IDItMi45bDMuMy0xMS4zYzMuOS0xMy40IDIuNC0yNS44LTQuMS0zNC45LTYtOC40LTE2LjEtMTMuMy0yOC4yLTEzLjl6bTEwNS45LTk4LjhjLTIuMSAwLTQuMyAuMS02LjQgLjItLjggLjEtMS41IC4zLTIuMSAuOHMtMSAxLjEtMS4zIDEuOGwtOS4xIDMxLjJjLTMuOSAxMy40LTIuNCAyNS44IDQuMSAzNC45IDYgOC40IDE2LjEgMTMuMyAyOC4yIDEzLjlsNDkuMiAyLjljLjcgMCAxLjQgLjIgMiAuNXMxLjEgLjggMS41IDEuNGMuNCAuNiAuNyAxLjMgLjggMnMwIDEuNS0uMiAyLjFjLS40IDEuMS0xLjEgMi4xLTIuMSAyLjhzLTIuMSAxLjItMy4zIDEuMmwtNTEuMSAyLjljLTI3LjggMS4zLTU3LjcgMjMuNi02OC4xIDUwLjhsLTMuNyA5LjZjLS4yIC40LS4yIC44LS4yIDEuM3MuMiAuOCAuNCAxLjIgLjYgLjcgLjkgLjkgLjggLjMgMS4yIC4zYzAgMCAuMSAwIC4xIDBsMTc1LjkgMGMxIDAgMi0uMyAyLjgtLjlzMS40LTEuNSAxLjctMi40YzMuMS0xMS4xIDQuNy0yMi41IDQuNy0zNCAwLTY5LjMtNTYuNS0xMjUuNS0xMjYuMS0xMjUuNXoiXX0seWl0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImhhY2tlcnJhbmsiLGljb246WzUxMiw1MTIsW10sImY1ZjciLCJNNDc3LjkgMTI4QzQ2My40IDEwMyAyODUuNSAwIDI1Ni41IDBzLTIwNi45IDEwMi44LTIyMS4zIDEyOC0xNC41IDIzMC44IDAgMjU2IDE5Mi40IDEyOCAyMjEuMyAxMjggMjA2LjgtMTAyLjkgMjIxLjMtMTI4IDE0LjUtMjMxIDAtMjU2ek0zMTYuNSA0MTQuMmMtNCAwLTQwLjktMzUuOC0zOC0zOC43IC45LS45IDYuMy0xLjUgMTcuNS0xLjggMC0yNi4yIC42LTY4LjYgLjktODYuMyAwLTItLjQtMy40LS40LTUuOGwtNzkuOSAwYzAgNy4xLS41IDM2LjIgMS40IDcyLjkgLjIgNC41LTEuNiA2LTUuNyA1LjktMTAuMSAwLTIwLjMtLjEtMzAuNC0uMS00LjEgMC01LjktMS41LTUuNy02LjEgLjktMzMuNCAzLTg0LS4yLTIxMi43bDAtMy4yYy05LjctLjQtMTYuNC0xLTE3LjMtMS44LTIuOS0yLjkgMzQuNS0zOC43IDM4LjUtMzguN3M0MS4yIDM1LjggMzguMyAzOC43Yy0uOSAuOS03LjkgMS41LTE2LjggMS44bDAgMy4yYy0yLjQgMjUuOC0yIDc5LjYtMi42IDEwNS40bDgwLjMgMGMwLTQuNiAuNC0zNC43LTEuMi04My42LS4xLTMuNCAxLTUuMiA0LjItNS4yIDExLjEtLjEgMjIuMi0uMSAzMy4yLS4xIDMuNSAwIDQuNiAxLjcgNC41IDUuNC0zLjcgMTkxLjMtLjcgMTc3LjktLjcgMjEwLjMgOC45IC40IDE2LjggMSAxNy43IDEuOCAyLjkgMi45LTMzLjYgMzguNy0zNy42IDM4LjdsMCAweiJdfSx3aXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2t5YXRsYXMiLGljb246WzY0MCw1MTIsW10sImYyMTYiLCJNNjQwIDMyOS4zYzAgNjUuOS01Mi41IDExNC40LTExNy41IDExNC40LTE2NS45IDAtMTk2LjYtMjQ5LjctMzU5LjctMjQ5LjctMTQ2LjkgMC0xNDcuMSAyMTIuMiA1LjYgMjEyLjIgNDIuNSAwIDkwLjktMTcuOCAxMjUuMy00Mi41IDUuNi00LjEgMTYuOS0xNi4zIDIyLjgtMTYuM3MxMC45IDUgMTAuOSAxMC45YzAgNy44LTEzLjEgMTkuMS0xOC43IDI0LjEtNDAuOSAzNS42LTEwMC4zIDYxLjItMTU0LjcgNjEuMi04My40IC4xLTE1NC01OS0xNTQtMTQ0LjlTNjcuNSAxNDkuNiAxNTIuOCAxNDkuNmMxODUuMyAwIDIyMi41IDI0NS45IDM2MS45IDI0NS45IDk5LjkgMCA5NC44LTEzOS43IDMuNC0xMzkuNy0xNy41IDAtMzUgMTEuNi00Ni45IDExLjYtOC40IDAtMTUuOS03LjItMTUuOS0xNS42IDAtMTEuNiA1LjMtMjMuNyA1LjMtMzYuMyAwLTY2LjYtNTAuOS0xMTQuNy0xMTYuOS0xMTQuNy01My4xIDAtODAgMzYuOS04OC44IDM2LjktNi4yIDAtMTEuMi01LTExLjItMTEuMiAwLTUuNiA0LjEtMTAuMyA3LjgtMTQuNCAyNS4zLTI4LjggNjQuNy00My43IDEwMi44LTQzLjcgNzkuNCAwIDEzOS4xIDU4LjQgMTM5LjEgMTM3LjggMCA2LjktLjMgMTMuNy0xLjIgMjAuNiAxMS45LTMuMSAyNC4xLTQuNyAzNS45LTQuNyA2MC43IDAgMTExLjkgNDUuMyAxMTEuOSAxMDcuMnoiXX0sTWl0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRlc2twcm8iLGljb246WzUxMiw1MTIsW10sImYzOGYiLCJNMjIyIDUxMmwzMS4xLTM4LjRjMTIuMy0uMiAyNS42LTEuNCAzNi41LTYuNiAzOC45LTE4LjYgMzguNC02MS45IDM4LjMtNjMuOC0uMS01LS44LTQuNC0yOC45LTM3LjRsNzkuMSAwYy0uMiA1MC4xLTcuMyA2OC41LTEwLjIgNzUuNy05LjQgMjMuNy00My45IDYyLjgtOTUuMiA2OS40LTguNyAxLjEtMzIuOCAxLjItNTAuNyAxLjF6TTQyMi40IDM0NC4zYzM4LjYgMCA1OC41LTEzLjYgNzMuNy0zMC45bC0xNzUuNS0uMy0xNy40IDMxLjMgMTE5LjItLjF6TTM3OC44IDEyMC40bDAgMTY4LjMtNzMuNSAwLTMyLjcgNTUuNS02LjUgMGMtNTIuMyAwLTU4LjEtNTYuNS01OC4zLTU4LjktMS4yLTEzLjItMjEuMy0xMS42LTIwLjEgMS44IDEuNCAxNS44IDguOCA0MCAyNi40IDU3LjFsLTkxIDBjLTI1LjUgMC0xMTAuOC0yNi44LTEwNy0xMTRsMC0yMTMuM2MwLTE2IDkuNy0xNi42IDE1LTE2LjhsODIgMGMuMiAwIC4zIC4xIC41IC4xIDQuMy0uNCA1MC4xLTIuMSA1MC4xIDQzLjcgMCAxMy4zIDIwLjIgMTMuNCAyMC4yIDAgMC0xOC4yLTUuNS0zMi44LTE1LjgtNDMuN2w4NC4yIDBDMzYxLS4yIDM3OC44IDc5LjYgMzc4LjggMTIwLjR6bS0xMzIuNSA1Nmw2NCAyOS4zYzEzLjMtNDUuNS00Mi4yLTcxLjctNjQtMjkuM3oiXX0seml0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InJlc29sdmluZyIsaWNvbjpbNTEyLDUxMixbXSwiZjNlNyIsIk0yODkuMiAyNzguMmM0Ni0xMy4zIDQ5LjYtMjMuNSA0NC00My40TDMyMiAxOTUuNWMtNi4xLTIwLjktMTguNC0yOC4xLTcxLjEtMTIuOGwtMTg4LjIgNTQuMSAyOC42IDk4LjYgMTk3LjktNTcuMnpNMjU2LjUgOEMxMzkuNCA4IDQxLjIgODguNyAxNS4yIDE5Ny41bDIyMS45LTYzLjljMzQuOC0xMC4yIDU0LjItMTEuNyA3OS4zLTguMiAzNi4zIDYuMSA1Mi43IDI1IDYxLjQgNTUuMmwxMC43IDM3LjhjOC4yIDI4LjEgMSA1MC42LTIzLjUgNzMuNi0xOS40IDE3LjQtMzEuMiAyNC41LTYxLjQgMzMuMmwtOTIuNiAyNi42IDIyMC40IDI3LjEgOS43IDM0LjItNDguMSAxMy4zLTI4Ni44LTM3LjMgMjMgODAuMkMxNjYgNDkxLjMgMjA5LjUgNTA0IDI1NS41IDUwNCAzOTIuNSA1MDQgNTA0IDM5Mi42IDUwNCAyNTUuNyA1MDUgMTE5LjQgMzkzLjUgOCAyNTYuNSA4ek00Ni4zIDM4OC42TDggMjU2LjhjMCA0OC41IDE0LjMgOTMuNCAzOC4zIDEzMS44eiJdfSxraXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYmxhY2tiZXJyeSIsaWNvbjpbNTEyLDUxMixbXSwiZjM3YiIsIk0xNjYgMTE2LjljMCAyMy40LTE2LjQgNDkuMS03Mi41IDQ5LjFsLTcwLjEgMCAyMS04OC44IDY3LjggMGM0Mi4xIDAgNTMuOCAyMy4zIDUzLjggMzkuN3pNMjkyLjIgNzcuMmwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTMuOCAwIDcwLjEtMjUuNyA3MC4xLTQ5LjEgLjEtMTYuNC0xMS42LTM5LjctNTMuNy0zOS43ek04OC44IDIwOC4xbC02Ny44IDAtMjEgODguOCA3MC4xIDBjNTYuMSAwIDcyLjUtMjMuNCA3Mi41LTQ5LjEgMC0xNi4zLTExLjctMzkuNy01My44LTM5Ljd6bTE4MC4xIDBsLTY3LjggMC0xOC43IDg4LjggNzAuMSAwYzUzLjggMCA3MC4xLTIzLjQgNzAuMS00OS4xIDAtMTYuMy0xMS43LTM5LjctNTMuNy0zOS43em0xODkuMy01My44bC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1My44IDAgNzAuMS0yMy40IDcwLjEtNDkuMSAuMS0xNi4zLTExLjYtMzkuNy01My43LTM5Ljd6bS0yOCAxMzcuOWwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTYuMSAwIDcwLjEtMjMuNCA3MC4xLTQ5LjEgMC0xNi4zLTExLjYtMzkuNy01My43LTM5Ljd6TTI0MC44IDM0NmwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTYuMSAwIDcwLjEtMjUuNyA3MC4xLTQ5LjEgLjEtMTYuMy0xMS42LTM5LjctNTMuNy0zOS43eiJdfSxTaXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3RyaXBlLXMiLGljb246WzM4NCw1MTIsW10sImY0MmEiLCJNMTU1LjYgMTU0LjZjMC0yMi4zIDE4LjYtMzAuOSA0OC40LTMwLjkgNDMuNCAwIDk4LjUgMTMuMyAxNDEuOSAzNi43bDAtMTM0LjNjLTQ3LjMtMTguOS05NC41LTI2LjEtMTQxLjgtMjYuMS0xMTUuNyAwLTE5Mi44IDYwLjQtMTkyLjggMTYxLjQgMCAxNTcuOSAyMTYuOCAxMzIuMyAyMTYuOCAyMDAuNCAwIDI2LjQtMjIuOSAzNC45LTU0LjcgMzQuOS00Ny4yIDAtMTA4LjItMTkuNS0xNTYuMS00NS41bDAgMTI4LjVjNDkuMyAyMS4zIDEwMi4zIDMyLjMgMTU2IDMyLjQgMTE4LjYgMCAyMDAuMy01MSAyMDAuMy0xNTMuNiAwLTE3MC4yLTIxOC0xMzkuNy0yMTgtMjAzLjl6Il19LEYxZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtYmVoYW5jZSIsaWNvbjpbNDQ4LDUxMixbImJlaGFuY2Utc3F1YXJlIl0sImYxYjUiLCJNMTU1LjMgMzE4LjRjMTcuMiAwIDMxLjItNi4xIDMxLjItMjUuNCAwLTE5LjctMTEuNy0yNy40LTMwLjMtMjcuNWwtNDYgMCAwIDUyLjkgNDUuMSAwem0tNS40LTEyOS42bC0zOS42IDAgMCA0NC44IDQyLjcgMGMxNS4xIDAgMjUuOC02LjYgMjUuOC0yMi45IDAtMTcuNy0xMy43LTIxLjktMjguOS0yMS45em0xMjkuNSA3NC44bDYyLjIgMGMtMS43LTE4LjUtMTEuMy0yOS43LTMwLjUtMjkuNy0xOC4zIDAtMzAuNSAxMS40LTMxLjcgMjkuN3pNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTM0OS41IDE4NWwtNzcuOCAwIDAtMTguOSA3Ny44IDAgMCAxOC45ek0xOTMuNyAyNDMuN2MyMy42IDYuNyAzNSAyNy41IDM1IDUxLjYgMCAzOS0zMi43IDU1LjctNjcuNiA1NS45bC05My4xIDAgMC0xOTIgOTAuNSAwYzMyLjkgMCA2MS40IDkuMyA2MS40IDQ3LjUgMCAxOS4zLTkgMjguOC0yNi4yIDM3em0xMTguNy0zOC42YzQzLjUgMCA2Ny42IDM0LjMgNjcuNiA3NS40IDAgMS42LS4xIDMuMy0uMiA1IDAgLjgtLjEgMS41LS4xIDIuMmwtMTAwLjIgMGMwIDIyLjIgMTEuNyAzNS4zIDM0LjEgMzUuMyAxMS42IDAgMjYuNS02LjIgMzAuMi0xOC4xbDMzLjcgMGMtMTAuNCAzMS45LTMxLjkgNDYuOC02NS4xIDQ2LjgtNDMuOCAwLTcxLjEtMjkuNy03MS4xLTczIDAtNDEuOCAyOC43LTczLjYgNzEuMS03My42eiJdfSxDaXQ9RjFlLExpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzZXJ2aWNlc3RhY2siLGljb246WzUxMiw1MTIsW10sImYzZWMiLCJNOTYgMjE2YzgxLjcgMTAuMiAyNzMuNyAxMDIuMyAzMDQgMjMyTDggNDQ4Yzk5LjUtOC4xIDE4NC41LTEzNyA4OC0yMzJ6TTEyOCA2NGMzMi4zIDM1LjYgNDcuNyA4My45IDQ2LjQgMTMzLjYgODIuOSAzMy43IDIwNy4zIDEyMy43IDIzMy42IDI1MC40bDk2IDBDNDYzLjMgMjMxLjkgMjMwLjggNzkuNSAxMjggNjR6Il19LFRpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyb2NrZXRjaGF0IixpY29uOls1NzYsNTEyLFtdLCJmM2U4IiwiTTI4NC41IDIyNC44Yy02LjcgMC0xMy4zIDIuMS0xOC45IDUuOHMtOS45IDkuMS0xMi41IDE1LjQtMy4yIDEzLjEtMS45IDE5LjcgNC42IDEyLjcgOS40IDE3LjQgMTAuOSA4IDE3LjUgOS4zIDEzLjUgLjYgMTkuNy0yIDExLjUtNyAxNS4zLTEyLjYgNS43LTEyLjIgNS43LTE4LjljMC05LjEtMy43LTE3LjgtMTAuMS0yNC4ycy0xNS4xLTEwLTI0LjItOS45em0tMTEwLjQgMGMtNi43IDAtMTMuMyAyLjEtMTguOSA1LjhzLTkuOSA5LjEtMTIuNSAxNS40LTMuMiAxMy4xLTEuOSAxOS43IDQuNiAxMi43IDkuNCAxNy40IDEwLjkgOCAxNy41IDkuMyAxMy41IC42IDE5LjctMiAxMS41LTcgMTUuMy0xMi42IDUuNy0xMi4yIDUuNy0xOC45YzAtOS4xLTMuNy0xNy44LTEwLjEtMjQuMnMtMTUuMS0xMC0yNC4yLTEwbDAgMHptMjIwLjkgMGEzNC4xIDM0LjEgMCAxIDAgLjQgNjguMiAzNC4xIDM0LjEgMCAxIDAgLS40LTY4LjJ6bTE1My44LTU1LjNjLTE1LjUtMjQuMi0zNy4zLTQ1LjYtNjQuNy02My42LTUyLjktMzQuOC0xMjIuNC01NC0xOTUuNy01NC0yNC4yIDAtNDguMyAyLjEtNzIgNi40LTE0LjktMTQuMy0zMS41LTI2LjYtNDkuNS0zNi42LTY2LjgtMzMuMy0xMjUuNi0yMC45LTE1NS4zLTEwLjItMi4zIC44LTQuMyAyLjEtNS45IDMuOXMtMi43IDMuOS0zLjMgNi4yLS41IDQuNyAuMSA3LjEgMS44IDQuNCAzLjUgNi4xQzI3IDU2LjUgNjEuNiA5OS4zIDUzLjEgMTM4LjMgMjAgMTcyLjIgMiAyMTMgMiAyNTUuNiAyIDI5OSAyMCAzMzkuOCA1My4xIDM3My43IDYxLjYgNDEyLjcgMjcgNDU1LjYgNiA0NzcuMiA0LjMgNDc5IDMuMiA0ODEuMSAyLjUgNDgzLjRzLS43IDQuNy0uMSA3IDEuNyA0LjUgMy4zIDYuMiAzLjYgMy4xIDUuOSAzLjljMjkuNyAxMC43IDg4LjUgMjMuMSAxNTUuMy0xMC4yIDE4LTEwIDM0LjctMjIuMyA0OS41LTM2LjYgMjMuOCA0LjMgNDcuOSA2LjQgNzIgNi40IDczLjMgMCAxNDIuOC0xOS4yIDE5NS43LTU0IDI3LjQtMTggNDkuMS0zOS40IDY0LjctNjMuNiAxNy4zLTI2LjkgMjYuMS01NS45IDI2LjEtODYuMSAwLTMxLTguOC02MC0yNi4xLTg2LjlsMCAwek0yODUuNCA0MDkuOWMtMzAuMiAuMS02MC4zLTMuOC04OS40LTExLjVsLTIwLjEgMTkuNGMtMTEuMiAxMC43LTIzLjYgMjAtMzcuMSAyNy42LTE2LjQgOC4yLTM0LjIgMTMuMy01Mi41IDE0LjkgMS0xLjggMS45LTMuNiAyLjgtNS40IDIwLjItMzcuMSAyNS42LTcwLjUgMTYuMy0xMDAuMS0zMy0yNi01Mi44LTU5LjItNTIuOC05NS40IDAtODMuMSAxMDQuMy0xNTAuNSAyMzIuOC0xNTAuNXMyMzIuOSA2Ny40IDIzMi45IDE1MC41YzAgODMuMS0xMDQuMyAxNTAuNS0yMzIuOSAxNTAuNXoiXX0sX2l0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InJlYmVsIixpY29uOls1MTIsNTEyLFtdLCJmMWQwIiwiTTI1Ni45IDUwNGMtMTM5LjMgMC0yNDcuNS0xMTYuMi0yNDMuMy0yNTQuMSAyLjgtNzkuMiA0My4yLTE1Mi4yIDExNi41LTIwMC40IC4zIDAgMS45LS42IDEuMSAuOC01LjggNS41LTExMS4zIDEyOS44LTE0LjEgMjI2LjQgNDkuOCA0OS41IDkwIDIuNSA5MCAyLjUgMzguNS01MC4xLS42LTEyNS45LS42LTEyNS45LTEwLTI0LjktNDUuNy00MC4xLTQ1LjctNDAuMWwyOC44LTMxLjhjMjQuNCAxMC41IDQzLjIgMzguNyA0My4yIDM4LjcgLjgtMjkuNi0yMS45LTYxLjQtMjEuOS02MS40TDI1NS41IDggMjk5LjggNTguMWMtMjAuNSAyOC44LTIxLjkgNjIuNi0yMS45IDYyLjYgMTMuOC0yMyA0My41LTM5LjMgNDMuNS0zOS4zbDI4LjUgMzEuOGMtMjcuNCA4LjktNDUuNCAzOS45LTQ1LjQgMzkuOS0xNS44IDI4LjUtMjcuMSA4OS40IC42IDEyNy4zIDMyLjQgNDQuNiA4Ny43LTIuOCA4Ny43LTIuOCAxMDIuNy05MS45LTEwLjUtMjI1LTEwLjUtMjI1LTYuMS01LjUgLjgtMi44IC44LTIuOCA1MC4xIDM2LjUgMTE0LjYgODQuNCAxMTYuMiAyMDQuOCAyIDE0NS42LTk5LjkgMjQ5LjQtMjQyLjQgMjQ5LjR6Il19LEFpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtd2ViLWF3ZXNvbWUiLGljb246WzQ0OCw1MTIsW10sImU2ODMiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjM1IDE3Ny42bDUzIDQ2LjQgNTIuMi0xMC40Yy0yLjYtMy45LTQuMi04LjUtNC4yLTEzLjYgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDEzLTEwLjMgMjMuNi0yMy4yIDI0TDMwNC41IDM0OS4xYy01LjIgMTEuNS0xNi42IDE4LjktMjkuMiAxOC45bC0xMDIuNiAwYy0xMi42IDAtMjQtNy40LTI5LjItMTguOUw4Ny4yIDIyNGMtMTIuOS0uNC0yMy4yLTExLTIzLjItMjQgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDUtMS41IDkuNy00LjIgMTMuNkwxNjAgMjI0IDIxMy4xIDE3Ny42Yy04LjktNC4xLTE1LTEzLjEtMTUtMjMuNiAwLTE0LjQgMTEuNi0yNiAyNi0yNnMyNiAxMS42IDI2IDI2YzAgMTAuNS02LjIgMTkuNS0xNS4xIDIzLjZ6Il19LCRpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsaW5rdHJlZSIsaWNvbjpbNDQ4LDUxMixbXSwiZTdkOCIsIk0zMiAxNzMuNGwxMjUuOCAwLTg5LjQtODUuNCA0OS41LTUxIDg1LjIgODcuOCAwLTEyNC44IDczLjkgMCAwIDEyNC44IDg1LjItODcuNiA0OS40IDUwLjgtODkuNCA4NS4yIDEyNS43IDAgMCA3MC41LTEyNi40IDAgOTAgODcuNi00OS4zIDQ5LjgtMTIyLjItMTIzLTEyMi4yIDEyMy00OS41LTQ5LjYgOTAtODcuNi0xMjYuNCAwIDAtNzAuNXpNMjAyLjkgMzQ0LjhsNzMuOSAwIDAgMTY3LjItNzMuOSAwIDAtMTY3LjJ6Il19LERpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzaW1wbHlidWlsdCIsaWNvbjpbNTEyLDUxMixbXSwiZjIxNSIsIk00ODEuNiA2NGwtMTA2IDBDMzYxLjEgNjQgMzQ5IDc1LjggMzQ5IDkwLjNsMCAzOS42LTE4NS4zIDAgMC0zOS42YzAtMTQuNS0xMi0yNi4zLTI2LjYtMjYuM2wtMTA2IDBDMTYuNSA2NCA0LjcgNzUuOCA0LjcgOTAuM2wwIDMzMS40YzAgMTQuNSAxMS44IDI2LjMgMjYuNiAyNi4zbDQ1MC40IDBjMTQuOCAwIDI2LjYtMTEuOCAyNi42LTI2LjNsMC0zMzEuNGMtLjItMTQuNS0xMi0yNi4zLTI2LjctMjYuM3pNMTUwLjUgMjIyLjdhNjYuNSA2Ni41IDAgMSAxIC0uMyAxMzMuMSA2Ni41IDY2LjUgMCAxIDEgLjMtMTMzLjF6bTIxMS45IC4xYTY2LjUgNjYuNSAwIDEgMSAuMyAxMzIuOSA2Ni41IDY2LjUgMCAxIDEgLS4zLTEzMi45eiJdfSxFaXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3R1YmJlciIsaWNvbjpbNDQ4LDUxMixbXSwiZTVjNyIsIk0xMzYuNSAyOTQuMmw1OC44IDIyLjljOS4xLTM2LjggMjUuNC02MS4xIDU1LTYxLjEgNDkuNCAwIDcxLjQgNjMuNiAxNDIuNCA2My42IDE1LjYgMCAzNS45LTIuOCA1NS4zLTEzLjNsMCA2MS43YzAgNjEuOC01MC40IDExMi0xMTIuMyAxMTJMMCA0ODAgNDEuOCA0MjQgMCAzNjggNDEuNyAzMTIgMCAyNTYuMSA0MS44IDIwMC4xIDAgMTQ0LjEgNDEuOCA4OCAwIDMyIDMzNS43IDMyQzM5Ny42IDMyIDQ0OCA4Mi4zIDQ0OCAxNDQuMWwwIDUxLjNjLTkuMiAzNi4zLTI1LjkgNjAuNi01NSA2MC42LTQ5LjYgMC03MS42LTYzLjUtMTQyLjQtNjMuNS0zNS45IDAtOTUuMiAxNC42LTExNC4xIDEwMS42bDAgLjF6Il19LE5pdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhcHBlciIsaWNvbjpbNjQwLDUxMixbXSwiZjM3MSIsIk00Mi4xIDIzOS4xYzIyLjIgMCAyOSAyLjggMzMuNSAxNC42bC44IDAgMC0yMi45YzAtMTEuMy00LjgtMTUuNC0xNy45LTE1LjQtMTEuMyAwLTE0LjQgMi41LTE1LjEgMTIuOGwtMzguNiAwYy4zLTEzLjkgMS41LTE5LjEgNS44LTI0LjQgNy4zLTguOCAxOC45LTExLjggNDYuMS0xMS44IDMzIDAgNDcuMSA1IDUzLjkgMTguOSAyIDQuMyA0IDE1LjYgNCAyMy43bDAgNzYuMy0zOC4zIDAgMS4zLTE5LjEtMSAwYy01LjMgMTUuNi0xMy42IDIwLjQtMzUuNSAyMC40LTMwLjMgMC00MS4xLTEwLjEtNDEuMS0zNy4zIDAtMjUuMiAxMi4zLTM1LjggNDIuMS0zNS44em0xNy4xIDQ4LjFjMTMuMSAwIDE2LjktMyAxNi45LTEzLjQgMC05LjEtNC4zLTExLjYtMTkuNi0xMS42LTEzLjEgMC0xNy45IDMtMTcuOSAxMi4xLS4xIDEwLjQgMy43IDEyLjkgMjAuNiAxMi45ek0xMzcgMTkyLjNsMzguMyAwLTEuNSAyMC42IC44IDBjOS4xLTE3LjEgMTUuOS0yMC45IDM3LjUtMjAuOSAxNC40IDAgMjQuNyAzIDMxLjUgOS4xIDkuOCA4LjYgMTIuOCAyMC40IDEyLjggNDguMSAwIDMwLTMgNDMuMS0xMi4xIDUyLjktNi44IDcuMy0xNi40IDEwLjEtMzMuMiAxMC4xLTIwLjQgMC0yOS4yLTUuNS0zMy44LTIxLjJsLS44IDAgMCA3MC4zLTM5LjUgMCAwLTE2OXpNMjE3LjkgMjUzYzAtMjcuNS0zLjMtMzIuNS0yMC43LTMyLjUtMTYuOSAwLTIwLjcgNS0yMC43IDI4LjcgMCAyOCAzLjUgMzMuNSAyMS4yIDMzLjUgMTYuNCAwIDIwLjItNS42IDIwLjItMjkuN3ptNTcuOS02MC43bDM4LjMgMC0xLjUgMjAuNiAuOCAwYzkuMS0xNy4xIDE1LjktMjAuOSAzNy41LTIwLjkgMTQuNCAwIDI0LjcgMyAzMS41IDkuMSA5LjggOC42IDEyLjggMjAuNCAxMi44IDQ4LjEgMCAzMC0zIDQzLjEtMTIuMSA1Mi45LTYuOCA3LjMtMTYuNCAxMC4xLTMzLjMgMTAuMS0yMC40IDAtMjkuMi01LjUtMzMuOC0yMS4ybC0uOCAwIDAgNzAuMy0zOS41IDAgMC0xNjkgLjEgMHpNMzU2LjcgMjUzYzAtMjcuNS0zLjMtMzIuNS0yMC43LTMyLjUtMTYuOSAwLTIwLjcgNS0yMC43IDI4LjcgMCAyOCAzLjUgMzMuNSAyMS4yIDMzLjUgMTYuNCAwIDIwLjItNS42IDIwLjItMjkuN3ptNTMuOC0zLjhjMC0yNS40IDMuMy0zNy44IDEyLjMtNDUuOCA4LjgtOC4xIDIyLjItMTEuMyA0NS4xLTExLjMgNDIuOCAwIDU1LjcgMTIuOCA1NS43IDU1LjdsMCAxMS4xLTc1LjMgMGMtLjMgMi0uMyA0LS4zIDQuOCAwIDE2LjkgNC41IDIxLjkgMjAuMSAyMS45IDEzLjkgMCAxNy45LTMgMTcuOS0xMy45bDM3LjUgMCAwIDIuM2MwIDkuOC0yLjUgMTguOS02LjggMjQuNy03LjMgOS44LTE5LjYgMTMuNi00NC4zIDEzLjYtMjcuNSAwLTQxLjYtMy4zLTUwLjYtMTIuMy04LjUtOC41LTExLjMtMjEuMy0xMS4zLTUwLjh6bTc2LjQtMTEuNmMtLjMtMS44LS4zLTMuMy0uMy0zLjggMC0xMi4zLTMuMy0xNC42LTE5LjYtMTQuNi0xNC40IDAtMTcuMSAzLTE4LjEgMTUuMWwtLjMgMy4zIDM4LjMgMHptNTUuNi00NS4zbDM4LjMgMC0xLjggMTkuOSAuNyAwYzYuOC0xNC45IDE0LjQtMjAuMiAyOS43LTIwLjIgMTAuOCAwIDE5LjEgMy4zIDIzLjQgOS4zIDUuMyA3LjMgNi44IDE0LjQgNi44IDM0IDAgMS41IDAgNSAuMiA5LjNsLTM1IDBjLjMtMS44IC4zLTMuMyAuMy00IDAtMTUuNC0yLTE5LjQtMTAuMy0xOS40LTYuMyAwLTEwLjggMy4zLTEzLjEgOS4zLTEgMy0xIDQuMy0xIDEyLjNsMCA2OC0zOC4zIDAgMC0xMTguNSAuMSAweiJdfSxQaXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ29vZ2xlLXNjaG9sYXIiLGljb246WzUxMiw1MTIsW10sImU2M2IiLCJNMzkwLjkgMjk4LjVzMCAuMSAuMSAuMWM5LjIgMTkuNCAxNC40IDQxLjEgMTQuNCA2NC0uMSA4Mi41LTY2LjkgMTQ5LjQtMTQ5LjQgMTQ5LjRTMTA2LjcgNDQ1LjEgMTA2LjcgMzYyLjdjMC0yMi45IDUuMi00NC42IDE0LjQtNjQgMS43LTMuNiAzLjYtNy4yIDUuNi0xMC43IDQuNC03LjYgOS40LTE0LjcgMTUtMjEuMyAyNy40LTMyLjYgNjguNS01My4zIDExNC40LTUzLjMgMzMuNiAwIDY0LjYgMTEuMSA4OS42IDI5LjkgOS4xIDYuOSAxNy40IDE0LjcgMjQuOCAyMy41IDUuNiA2LjYgMTAuNiAxMy44IDE1IDIxLjMgMiAzLjQgMy44IDcgNS41IDEwLjVsLS4xLS4xem0yNi40LTE4LjhjLTMwLjEtNTguNC05MS05OC40LTE2MS4zLTk4LjRzLTEzMS4yIDQwLTE2MS4zIDk4LjRsLTk0LjctNzcgMjU2LTIwMi43IDI1NiAyMDIuNy05NC43IDc3LjEgMC0uMXoiXX0sSWl0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Inlhcm4iLGljb246WzUxMiw1MTIsW10sImY3ZTMiLCJNNDAxLjkgMzQ1LjJjLTM5IDkuMy00OC40IDMyLjEtMTA0IDQ3LjQgMCAwLTIuNyA0LTEwLjQgNS44LTEzLjQgMy4zLTYzLjkgNi02OC41IDYuMS0xMi40IC4xLTE5LjktMy4yLTIyLTguMi02LjQtMTUuMyA5LjItMjIgOS4yLTIyLTguMS01LTktOS45LTkuOC04LjEtMi40IDUuOC0zLjYgMjAuMS0xMC4xIDI2LjUtOC44IDguOS0yNS41IDUuOS0zNS4zIC44LTEwLjgtNS43IC44LTE5LjIgLjgtMTkuMnMtNS44IDMuNC0xMC41LTMuNmMtNi05LjMtMTcuMS0zNy4zIDExLjUtNjItMS4zLTEwLjEtNC42LTUzLjcgNDAuNi04NS42IDAgMC0yMC42LTIyLjgtMTIuOS00My4zIDUtMTMuNCA3LTEzLjMgOC42LTEzLjkgNS43LTIuMiAxMS4zLTQuNiAxNS40LTkuMSAyMC42LTIyLjIgNDYuOC0xOCA0Ni44LTE4czEyLjQtMzcuOCAyMy45LTMwLjRjMy41IDIuMyAxNi4zIDMwLjYgMTYuMyAzMC42czEzLjYtNy45IDE1LjEtNWM4LjIgMTYgOS4yIDQ2LjUgNS42IDY1LjEtNi4xIDMwLjYtMjEuNCA0Ny4xLTI3LjYgNTcuNS0xLjQgMi40IDE2LjUgMTAgMjcuOCA0MS4zIDEwLjQgMjguNiAxLjEgNTIuNyAyLjggNTUuMyAuOCAxLjQgMTMuNyAuOCAzNi40LTEzLjIgMTIuOC03LjkgMjguMS0xNi45IDQ1LjQtMTcgMTYuNy0uNSAxNy42IDE5LjIgNC45IDIyLjJ6TTggMjU2YTI0OCAyNDggMCAxIDEgNDk2IDAgMjQ4IDI0OCAwIDEgMSAtNDk2IDB6bTQxNi43IDc1LjJjLTEuNy0xMy42LTEzLjItMjMtMjgtMjIuOC0yMiAuMy00MC41IDExLjctNTIuOCAxOS4yLTQuOCAzLTguOSA1LjItMTIuNCA2LjggMy4xLTQ0LjUtMjIuNS03My4xLTI4LjctNzkuNCA3LjgtMTEuMyAxOC40LTI3LjggMjMuNC01My4yIDQuMy0yMS43IDMtNTUuNS02LjktNzQuNS0xLjYtMy4xLTcuNC0xMS4yLTIxLTcuNC05LjctMjAtMTMtMjIuMS0xNS42LTIzLjgtMS4xLS43LTIzLjYtMTYuNC00MS40IDI4LTEyLjIgLjktMzEuMyA1LjMtNDcuNSAyMi44LTIgMi4yLTUuOSAzLjgtMTAuMSA1LjRsLjEgMGMtOC40IDMtMTIuMyA5LjktMTYuOSAyMi4zLTYuNSAxNy40IC4yIDM0LjYgNi44IDQ1LjctMTcuOCAxNS45LTM3IDM5LjgtMzUuNyA4Mi41LTM0IDM2LTExLjggNzMtNS42IDc5LjYtMS42IDExLjEgMy43IDE5LjQgMTIgMjMuOCAxMi42IDYuNyAzMC4zIDkuNiA0My45IDIuOCA0LjkgNS4yIDEzLjggMTAuMSAzMCAxMC4xIDYuOCAwIDU4LTIuOSA3Mi42LTYuNSA2LjgtMS42IDExLjUtNC41IDE0LjYtNy4xIDkuOC0zLjEgMzYuOC0xMi4zIDYyLjItMjguNyAxOC0xMS43IDI0LjItMTQuMiAzNy42LTE3LjQgMTIuOS0zLjIgMjEtMTUuMSAxOS40LTI4LjJ6Il19LEZpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzdGFjay1vdmVyZmxvdyIsaWNvbjpbMzg0LDUxMixbXSwiZjE2YyIsIk0yOTEgMzExbC0xOTUuNy00MS4zLTguMiAzOS4zIDE5NS43IDQxIDguMi0zOXptNTEtODdMMTg4LjUgOTUuNyAxNjMgMTI2LjUgMzE2LjUgMjU0LjggMzQyIDIyNHptLTMxLjIgMzkuN0wxMjkuNSAxNzkgMTEyLjggMjE1LjUgMjk0IDMwMCAzMTAuOCAyNjMuN3pNMjYyLjMgMzJsLTMyIDI0IDExOS4zIDE2MC4zIDMyLTI0LTExOS4zLTE2MC4zem0yMC41IDMyOGwtMjAwIDAgMCAzOS43IDIwMCAwIDAtMzkuN3ptMzkuNyA4MGwtMjc5LjUgMCAwLTEyMC00MCAwIDAgMTYwIDM1OS41IDAgMC0xNjAtNDAgMCAwIDEyMHoiXX0sT2l0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJsdWV0b290aCIsaWNvbjpbMzg0LDUxMixbXSwiZjI5MyIsIk0yNjAuNiAxNzEuMWwtNDIuOSA0Mi45LS4zLTg2IDQzLjIgNDMuMXpNMjE3LjQgMzkwLjlsNDMuMS00My4xLTQyLjktNDIuOS0uMiA4NnpNMzg0IDI1OS40QzM4NCA0NjUgMzEyLjEgNTEyIDE5OC45IDUxMlMwIDQ2NSAwIDI1OS40IDgzLjQgMCAxOTYuNiAwIDM4NCA1My45IDM4NCAyNTkuNHptLTE1OC41IDBsNzkuNC04OC42LTEyNS4xLTEzNC4zIDAgMTc2LjktNzMuOC03My44LTI3IDI2LjkgOTIuNyA5My05Mi43IDkzIDI2LjkgMjYuOSA3My44LTczLjggMi4zIDE3MCAxMjcuNC0xMjcuNS04My45LTg4Ljd6Il19LEJpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjcmVhdGl2ZS1jb21tb25zLW5jLWpwIixpY29uOls1MTIsNTEyLFtdLCJmNGVhIiwiTTI1NS43IDhDMTExLjYgOCA4IDEyNC44IDggMjU2IDggMzkyLjQgMTE5LjggNTA0IDI1NS43IDUwNCAzODUuOSA1MDQgNTA0IDQwMy4yIDUwNCAyNTYgNTA0IDExNy4yIDM5Ni41IDggMjU1LjcgOHptLjYgNDUwLjdjLTExMiAwLTIwMy42LTkyLjUtMjAzLjYtMjAyLjcgMC0yMS4xIDMtNDEuMiA5LTYwLjNsMTI3IDU2LjUtMjcuOSAwIDAgMzguNiA1OC4xIDAgNS43IDExLjggMCAxOC43LTYzLjggMCAwIDM4LjcgNjMuOCAwIDAgNTYgNjEuNyAwIDAtNTYgNjQuMiAwIDAtMzUuNyA4MSAzNi4xYy0xLjUgMi4yLTU3LjEgOTguMy0xNzUuMiA5OC4zem04Ny42LTEzNy4zbC01Ny42IDAgMC0xOC43IDIuOS01LjYgNTQuNyAyNC4zem02LjUtNTEuNGwwLTE3LjgtMzguNiAwIDYzLTExNi02NS44IDAtNDMuNCA5Ni0yMy0xMC4yLTM5LjYtODUuNy02NS44IDAgMjcuMyA1MS04MS45LTM2LjVjMjcuOC00NC4xIDgyLjYtOTguMSAxNzMuNy05OC4xIDExMi44IDAgMjAzIDkwIDIwMyAyMDMuNCAwIDIxLTIuNyA0MC42LTcuOSA1OUwzNTAuNCAyNzB6Il19LFJpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyZWRkaXQiLGljb246WzUxMiw1MTIsW10sImYxYTEiLCJNMCAyNTZDMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2IDM5Ny40IDUxMiAyNTYgNTEyTDM3LjEgNTEyYy0xMy43IDAtMjAuNS0xNi41LTEwLjktMjYuMkw3NSA0MzdDMjguNyAzOTAuNyAwIDMyNi43IDAgMjU2ek0zNDkuNiAxNTMuNmMyMy42IDAgNDIuNy0xOS4xIDQyLjctNDIuN3MtMTkuMS00Mi43LTQyLjctNDIuN2MtMjAuNiAwLTM3LjggMTQuNi00MS44IDM0LTM0LjUgMy43LTYxLjQgMzMtNjEuNCA2OC40bDAgLjJjLTM3LjUgMS42LTcxLjggMTIuMy05OSAyOS4xLTEwLjEtNy44LTIyLjgtMTIuNS0zNi41LTEyLjUtMzMgMC01OS44IDI2LjgtNTkuOCA1OS44IDAgMjQgMTQuMSA0NC42IDM0LjQgNTQuMSAyIDY5LjQgNzcuNiAxMjUuMiAxNzAuNiAxMjUuMnMxNjguNy01NS45IDE3MC42LTEyNS4zYzIwLjItOS42IDM0LjEtMzAuMiAzNC4xLTU0IDAtMzMtMjYuOC01OS44LTU5LjgtNTkuOC0xMy43IDAtMjYuMyA0LjYtMzYuNCAxMi40LTI3LjQtMTctNjIuMS0yNy43LTEwMC0yOS4xbDAtLjJjMC0yNS40IDE4LjktNDYuNSA0My40LTQ5LjkgNC40IDE4LjggMjEuMyAzMi44IDQxLjUgMzIuOGwuMSAuMnpNMTc3LjEgMjQ2LjljMTYuNyAwIDI5LjUgMTcuNiAyOC41IDM5LjNzLTEzLjUgMjkuNi0zMC4zIDI5LjYtMzEuNC04LjgtMzAuNC0zMC41IDE1LjQtMzguMyAzMi4xLTM4LjNsLjEtLjF6bTE5MC4xIDM4LjNjMSAyMS43LTEzLjcgMzAuNS0zMC40IDMwLjVzLTI5LjMtNy45LTMwLjMtMjkuNiAxMS44LTM5LjMgMjguNS0zOS4zIDMxLjIgMTYuNiAzMi4xIDM4LjNsLjEgLjF6bS00OC4xIDU2LjdjLTEwLjMgMjQuNi0zNC42IDQxLjktNjMgNDEuOXMtNTIuNy0xNy4zLTYzLTQxLjljLTEuMi0yLjkgLjgtNi4yIDMuOS02LjUgMTguNC0xLjkgMzguMy0yLjkgNTkuMS0yLjlzNDAuNyAxIDU5LjEgMi45YzMuMSAuMyA1LjEgMy42IDMuOSA2LjV6Il19LEhpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjb25uZWN0ZGV2ZWxvcCIsaWNvbjpbNTc2LDUxMixbXSwiZjIwZSIsIk01NTAuOCAyNDFsLTUwLjEtODYuOGMxLjEtMi4xIDEuOS00LjYgMS45LTcuMiAwLTgtNi43LTE0LjctMTQuNy0xNUw0MzIuNCAzNi4xYy41LTEuNiAxLjEtMy4yIDEuMS00LjggMC04LjYtNy0xNS4zLTE1LjMtMTUuMy00LjggMC04LjggMi4xLTExLjggNS42bC0xMDYuNiAwYy0yLjctMy41LTYuNy01LjYtMTEuNS01LjZzLTguOCAyLjEtMTEuNSA1LjZsLTEwNi4xIDBjLTIuOS0zLjUtNy01LjYtMTEuOC01LjYtOC4zIDAtMTUuMyA2LjctMTUuMyAxNS4zIDAgMS42IC41IDMuNSAxLjEgNC44bC01NiA5Ny4yYy01LjQgMi40LTkuMSA3LjUtOS4xIDEzLjcgMCAuNSAuMyAxLjEgLjMgMS42TDI2LjYgMjQwLjdjLTcuMiAxLjMtMTIuNiA3LjUtMTIuNiAxNSAwIDcuMiA1LjEgMTMuNCAxMi4xIDE1bDU1LjIgOTUuNGMtLjUgMS42LS44IDIuOS0uOCA0LjggMCA3LjIgNS4xIDEzLjQgMTIuMSAxNC43bDUxLjcgODkuN2MtLjUgMS42LTEuMSAzLjUtMS4xIDUuNCAwIDguNiA3IDE1LjMgMTUuMyAxNS4zIDQuOCAwIDguOC0yLjEgMTEuNS01LjRsMTA2LjkgMGMyLjcgMy4yIDcgNS40IDExLjUgNS40czguOC0yLjEgMTEuNS01LjRsMTA3LjEgMGMyLjcgMi45IDYuNyA0LjggMTEgNC44IDguNiAwIDE1LjMtNyAxNS4zLTE1LjMgMC0xLjYtLjMtMi45LS44LTQuM2w1MS43LTkwLjNjNy0xLjMgMTIuMS03LjUgMTIuMS0xNC43IDAtMS42LS4zLTMuMi0uOC00LjhsNTQuOS05NS40YzctMS4zIDEyLjMtNy41IDEyLjMtMTUgMC03LjItNS4xLTEzLjQtMTEuOC0xNC43em0tMzk3IDIwOS43bC00My43LTc1LjggNDMuNyAwIDAgNzUuOHptMC04My44bC00My43IDBjLS4zLTEuMS0uOC0yLjEtMS4zLTMuMmw0NS00Ny40IDAgNTAuNnptMC02Mi40bC01MC40IDUzLjNjLTEuMy0uNS0yLjctMS4zLTQtMS42TDQzLjcgMjU5LjhjLjUtMS4zIC41LTIuNyAuNS00czAtMi40LS4zLTMuNWw1Mi05MGMyLjctLjMgNS40LTEuMSA3LjgtMi43bDUwLjEgNTIgMCA5Mi45em0wLTEwMi4zTDEwOCAxNTQuOGMxLjMtMi4xIDIuMS00LjggMi4xLTcuOCAwLS4zLS4zLS44LS4zLTEuMWw0My45LTE1LjggMCA3Mi4xem0wLTgwLjZsLTQzLjcgMTUuOCA0My43LTc1LjUgMCA1OS43em0zMjYuNSAzOS4xbC44IDEuMy0zNS40IDE2Ny4xLTYzLjgtNjcuMiA5OC0xMDEuNSAuMyAuM3pNMjkyLjEgMzU1LjFsMTEuNSAxMS44LTIyLjggMCAxMS4zLTExLjh6bS0uMy0xMS4zbC04My4zLTg1LjQgNzkuNi04NC40IDgzIDg3LjYtNzkuMyA4Mi4yem01LjQgNS45bDc5LjMtODIuMiA2Ny41IDcxLjMtNS45IDI4LjEtMTI0IDAtMTYuOS0xNy4xek00MTAuNyA0NC40YzEuMSAuNSAyLjEgMS4xIDMuNSAxLjNsNTcuOSAxMDAuNyAwIC41YzAgMi45IC44IDUuNiAyLjEgNy44bC05Ny41IDEwMS4yLTgzLTg3LjYgMTE3LjEtMTI0em0tOS4xLTIuMWwtMTEzLjYgMTIwLjMtNTcuMS02MC4zIDE2Ni4zLTYwIDQuMyAwem0tMTIzLjUgMGMyLjcgMi43IDYuMiA0LjMgMTAuMiA0LjNzNy41LTEuNiAxMC4yLTQuM2w3NSAwLTE0OC40IDUzLjYtNTAuOS01My42IDEwMy45IDB6TTE2MS45IDQ3LjlsMS4xLTIuMWMuOS0uMiAxLjgtLjUgMi43LS44bDUxLjIgNTMuOC01NC45IDE5LjggMC03MC43em0wIDc5LjNsNjAuOC0yMiA1OS43IDYzLjItNzkuNiA4NC4xLTQxLTQyLjEgMC04My4zem0wIDkyLjdsMzYuNCAzNy44LTM2LjQgMzguMyAwLTc2LjF6bTAgODcuOWw0Mi4xLTQ0LjUgODIuOCA4Ni0xNy4xIDE3LjctMTA3LjcgMCAwLTU5LjJ6bTcgMTYyLjFjLTEuNi0xLjYtMy41LTIuNy01LjktMy41bC0xLjEtMS42IDAtODkuNyA5OS45IDAtOTEuNiA5NC44LTEuMyAwem0xMjkuOSAwYy0yLjctMi40LTYuNC00LjMtMTAuNC00LjNzLTcuOCAxLjktMTAuNCA0LjNsLTk2LjQgMCA5MS42LTk0LjggMzguMyAwIDkxLjYgOTQuOC0xMDQuMiAwem0xMjAtMTEuOGwtNC4zIDcuNWMtMS4zIC4zLTIuNCAuOC0zLjUgMS4zbC04OS4yLTkxLjkgMTE0LjQgMC0xNy40IDgzem0xMi45LTIyLjJsMTIuOS02MC44IDIyIDAtMzQuOCA2MC44em0zNC44LTY4LjhsLTIwLjQgMCA0LjYtMjEuMiAxNy4xIDE4LjJjLS41IC44LTEuMSAxLjktMS4zIDIuOXptNjYuMi0xMDcuNGwtNTUuNCA5Ni43Yy0xLjMgLjUtMi43IDEuMS00IDEuOWwtMjAuNi0yMiAzNC42LTE2My45IDQ1LjggNzkuM2MtLjMgMS4zLS44IDIuNy0uOCA0LjMgMCAxLjMgLjMgMi40IC41IDMuN3oiXX0scWl0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InJlc2VhcmNoZ2F0ZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjRmOCIsIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0yNjIuMiAzNjYuNGMtNi42IDMtMzMuMiA2LTUwLTE0LjItOS4yLTEwLjYtMjUuMy0zMy4zLTQyLjItNjMuNi04LjkgMC0xNC43IDAtMjEuNC0uNmwwIDQ2LjRjMCAyMy41IDYgMjEuMiAyNS44IDIzLjlsMCA4LjFjLTYuOS0uMy0yMy4xLS44LTM1LjYtLjgtMTMuMSAwLTI2LjEgLjYtMzMuNiAuOGwwLTguMWMxNS41LTIuOSAyMi0xLjMgMjItMjMuOWwwLTEwOS40YzAtMjIuNi02LjQtMjEtMjItMjMuOWwwLTguMWMyNS44IDEgNTMuMS0uNiA3MC45LS42IDMxLjcgMCA1NS45IDE0LjQgNTUuOSA0NS42IDAgMjEuMS0xNi43IDQyLjItMzkuMiA0Ny41IDEzLjYgMjQuMiAzMCA0NS42IDQyLjIgNTguOSA3LjIgNy44IDE3LjIgMTQuNyAyNy4yIDE0LjdsMCA3LjN6bTIyLjktMTM1Yy0yMy4zIDAtMzIuMi0xNS43LTMyLjItMzIuMmwwLTMyLjJjMC0xMi4yIDguOC0zMC40IDM0LTMwLjRzMzAuNCAxNy45IDMwLjQgMTcuOWwtMTAuNyA3LjJzLTUuNS0xMi41LTE5LjctMTIuNWMtNy45IDAtMTkuNyA3LjMtMTkuNyAxOS43bDAgMjYuOGMwIDEzLjQgNi42IDIzLjMgMTcuOSAyMy4zIDE0LjEgMCAyMS41LTEwLjkgMjEuNS0yNi44bC0xNy45IDAgMC0xMC43IDMwLjQgMGMwIDIwLjUgNC43IDQ5LjktMzQgNDkuOXpNMTY4LjYgMjc2LjFjLTkuNCAwLTEzLjYtLjMtMjAtLjhsMC02OS43YzYuNC0uNiAxNS0uNiAyMi41LS42IDIzLjMgMCAzNy4yIDEyLjIgMzcuMiAzNC41IDAgMjEuOS0xNSAzNi42LTM5LjcgMzYuNnoiXX0sVml0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNpZ25hbC1tZXNzZW5nZXIiLGljb246WzUxMiw1MTIsW10sImU2NjMiLCJNMjU2IDBjLTEzLjMgMC0yNi4zIDEtMzkuMSAzbDMuNyAyMy43QzIzMi4xIDI0LjkgMjQ0IDI0IDI1NiAyNHMyMy45IC45IDM1LjQgMi43TDI5NS4xIDNDMjgyLjMgMSAyNjkuMyAwIDI1NiAwem02MC44IDcuM2wtNS43IDIzLjNjMjMuNCA1LjcgNDUuNCAxNC45IDY1LjQgMjcuMWwxMi41LTIwLjVjLTIyLjEtMTMuNC00Ni40LTIzLjYtNzIuMi0yOS45em03Ni40IDYxLjZjMTkuMSAxNCAzNiAzMC45IDUwLjEgNTAuMWwxOS40LTE0LjJDNDQ3IDgzLjYgNDI4LjQgNjUgNDA3LjMgNDkuNUwzOTMuMSA2OC44em04MS43IDU0LjJsLTIwLjUgMTIuNWMxMi4yIDIwIDIxLjQgNDIgMjcuMSA2NS40bDIzLjMtNS43Yy02LjMtMjUuOC0xNi41LTUwLjEtMjkuOS03Mi4yem0xMC41IDk3LjVjMS44IDExLjUgMi43IDIzLjQgMi43IDM1LjRzLS45IDIzLjktMi43IDM1LjRsMjMuNyAzLjdjMS45LTEyLjcgMy0yNS44IDMtMzkuMXMtMS0yNi4zLTMtMzkuMWwtMjMuNyAzLjd6bS0zMSAxNTUuOWwyMC41IDEyLjVjMTMuNC0yMi4xIDIzLjYtNDYuNCAyOS45LTcyLjJsLTIzLjMtNS43Yy01LjcgMjMuNC0xNC45IDQ1LjQtMjcuMSA2NS40em04LjIgMzAuOGwtMTkuNC0xNC4yYy0xNCAxOS4xLTMwLjkgMzYtNTAuMSA1MC4xbDE0LjIgMTkuNGMyMS4xLTE1LjUgMzkuOC0zNC4xIDU1LjItNTUuMnptLTg2LjEgNDdjLTIwIDEyLjItNDIgMjEuNC02NS40IDI3LjFsNS43IDIzLjNjMjUuOC02LjMgNTAuMS0xNi41IDcyLjItMjkuOWwtMTIuNS0yMC41ek0yOTUuMSA1MDlsLTMuNy0yMy43QzI3OS45IDQ4Ny4xIDI2OCA0ODggMjU2IDQ4OHMtMjMuOS0uOS0zNS40LTIuN0wyMTYuOSA1MDljMTIuNyAxLjkgMjUuOCAzIDM5LjEgM3MyNi4zLTEgMzkuMS0zem0tOTQuMS0yNy42Yy0xNy42LTQuMy0zNC40LTEwLjYtNTAuMS0xOC42bC03LjgtNC0zMi44IDcuNyA1LjUgMjMuNCAyNC4zLTUuN2MxNy40IDguOSAzNS45IDE1LjggNTUuMyAyMC41bDUuNy0yMy4zek05NS40IDQ5NC42TDkwIDQ3MS4zIDQ4LjMgNDgxYy0xMC40IDIuNC0xOS43LTYuOS0xNy4zLTE3LjNsOS43LTQxLjYtMjMuNC01LjUtOS43IDQxLjZDMS4yIDQ4NiAyNiA1MTAuOCA1My44IDUwNC40bDQxLjYtOS43em0tNTAtOTIuOWw3LjctMzIuOC00LTcuOGMtOC0xNS43LTE0LjMtMzIuNS0xOC42LTUwLjFMNy4zIDMxNi43QzEyIDMzNi4xIDE4LjkgMzU0LjcgMjcuNyAzNzJsLTUuNyAyNC4zIDIzLjQgNS41ek0zIDI5NS4xbDIzLjctMy43QzI0LjkgMjc5LjkgMjQgMjY4IDI0IDI1NnMuOS0yMy45IDIuNy0zNS40TDMgMjE2LjlDMSAyMjkuNyAwIDI0Mi43IDAgMjU2czEgMjYuMyAzIDM5LjF6bTI3LjYtOTQuMWM1LjctMjMuNCAxNC45LTQ1LjQgMjcuMS02NS40TDM3LjIgMTIzLjFjLTEzLjQgMjIuMS0yMy42IDQ2LjQtMjkuOSA3Mi4ybDIzLjMgNS43em0xOC45LTk2LjJsMTkuNCAxNC4yYzE0LTE5LjEgMzAuOS0zNiA1MC4xLTUwLjFMMTA0LjcgNDkuNUM4My42IDY1IDY1IDgzLjYgNDkuNSAxMDQuN3ptODYuMS00N2MyMC0xMi4yIDQyLTIxLjQgNjUuNC0yNy4xTDE5NS4yIDcuM2MtMjUuOCA2LjMtNTAuMSAxNi41LTcyLjIgMjkuOWwxMi41IDIwLjV6TTI1NiA0NjRjMTE0LjkgMCAyMDgtOTMuMSAyMDgtMjA4UzM3MC45IDQ4IDI1NiA0OCA0OCAxNDEuMSA0OCAyNTZjMCAzNi40IDkuNCA3MC43IDI1LjggMTAwLjUgMS42IDIuOSAyLjEgNi4yIDEuNCA5LjRsLTIxLjYgOTIuNSA5Mi41LTIxLjZjMy4yLS43IDYuNS0uMiA5LjQgMS40IDI5LjggMTYuNSA2NCAyNS44IDEwMC41IDI1Ljh6Il19LFVpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ4aW5nIixpY29uOlszODQsNTEyLFtdLCJmMTY4IiwiTTE2Mi43IDIxMGMtMS44IDMuMy0yNS4yIDQ0LjQtNzAuMSAxMjMuNS00LjkgOC4zLTEwLjggMTIuNS0xNy43IDEyLjVMOS44IDM0NmMtNy43IDAtMTIuMS03LjUtOC41LTE0LjRsNjktMTIxLjNjLjIgMCAuMi0uMSAwLS4zTDI2LjQgMTM0LjRjLTQuMy03LjggLjMtMTQuMSA4LjUtMTQuMWw2NS4xIDBjNy4zIDAgMTMuMyA0LjEgMTggMTIuMkwxNjIuNyAyMTB6TTM4Mi42IDQ2LjFsLTE0NCAyNTMgMCAuMyA5MS42IDE2Ni42YzMuOSA3LjEgLjIgMTQuMS04LjUgMTQuMWwtNjUuMiAwYy03LjYgMC0xMy42LTQtMTgtMTIuMkwxNDYuMSAyOTkuNGMzLjMtNS44IDUxLjUtOTAuOCAxNDQuOC0yNTUuMiA0LjYtOC4xIDEwLjQtMTIuMiAxNy41LTEyLjJsNjUuNyAwYzggMCAxMi4zIDYuNyA4LjUgMTQuMXoiXX0sTzFlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1qcyIsaWNvbjpbNDQ4LDUxMixbImpzLXNxdWFyZSJdLCJmM2I5IiwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0xODAuOSA0NDQuOWMtMzMuNyAwLTUzLjItMTcuNC02My4yLTM4LjVMMTUyIDM4NS43YzYuNiAxMS43IDEyLjYgMjEuNiAyNy4xIDIxLjYgMTMuOCAwIDIyLjYtNS40IDIyLjYtMjYuNWwwLTE0My4xIDQyLjEgMCAwIDE0My43YzAgNDMuNi0yNS42IDYzLjUtNjIuOSA2My41em04NS44LTQzTDMwMSAzODIuMWM5IDE0LjcgMjAuOCAyNS42IDQxLjUgMjUuNiAxNy40IDAgMjguNi04LjcgMjguNi0yMC44IDAtMTQuNC0xMS40LTE5LjUtMzAuNy0yOGwtMTAuNS00LjVjLTMwLjQtMTIuOS01MC41LTI5LjItNTAuNS02My41IDAtMzEuNiAyNC4xLTU1LjYgNjEuNi01NS42IDI2LjggMCA0NiA5LjMgNTkuOCAzMy43TDM2OCAyOTBjLTcuMi0xMi45LTE1LTE4LTI3LjEtMTgtMTIuMyAwLTIwLjEgNy44LTIwLjEgMTggMCAxMi42IDcuOCAxNy43IDI1LjkgMjUuNmwxMC41IDQuNWMzNS44IDE1LjMgNTUuOSAzMSA1NS45IDY2LjIgMCAzNy44LTI5LjggNTguNi02OS43IDU4LjYtMzkuMSAwLTY0LjQtMTguNi03Ni43LTQzeiJdfSxqaXQ9TzFlLFdpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmb250aWNvbnMiLGljb246WzQ0OCw1MTIsW10sImYyODAiLCJNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMTg3IDE3Mi45Yy0xOC40IDAtMTkgOS45LTE5IDI3LjRsMCAyMy4zYzAgMi40LTMuNSA0LjQtLjYgNC40bDY3LjQgMC0xMS4xIDM3LjMtNTUuNyAwIDAgMTEyLjljMCA1LjgtMiA2LjcgMy4yIDcuM2w0My41IDQuMSAwIDI1LjEtMTMwLjcgMCAwLTI1LjcgMjEuMy0yYzUuMi0uNiA2LjctMi4zIDYuNy03LjlsMC0xMTEuNGMwLTIuMy0yLjktMi4zLTUuOC0yLjNsLTIyLjIgMCAwLTM3LjQgMjggMCAwLTIxYzAtNDkuNiAyNi41LTcwIDc3LjMtNzAgMzQuMSAwIDY0LjcgOC4yIDY0LjcgNTIuOGwtNTAuNyA2LjFjLjMtMTguNy00LjQtMjMtMTYuMy0yM3ptNzQuMyAyNDEuOGwwLTI1LjEgMjAuNC0yLjZjNS4yLS42IDcuNi0xLjcgNy42LTcuM2wwLTEwNy45YzAtNC4xLTIuOS02LjctNi43LTcuOWwtMjQuMi02LjQgNi43LTI5LjUgODAuMiAwIDAgMTUxLjdjMCA1LjgtMi42IDYuNCAyLjkgNy4zbDE1LjcgMi42IDAgMjUuMS0xMDIuNiAwem04MC44LTI1NS41bDkgMzMuMi03LjMgNy4zLTMxLjItMTYuNi0zMS4yIDE2LjYtNy4zLTcuMyA5LTMzLjItMjEuOC0yNC4yIDMuNS05LjYgMjcuNyAwIDE1LjUtMjggOS4zIDAgMTUuNSAyOCAyNy43IDAgMy41IDkuNi0yMS45IDI0LjJ6Il19LEdpdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1cHMiLGljb246WzM4NCw1MTIsW10sImY3ZTAiLCJNMTAzLjIgMzAzYy01LjIgMy42LTMyLjYgMTMuMS0zMi42LTE5bDAtMTA0LTMyLjcgMCAwIDEwMi42YzAgNzQuOSA4MC4yIDUxLjEgOTcuOSAzOWwwLTE0MS42LTMyLjYgMCAwIDEyM3pNNCA3NC44TDQgMjk1LjdjMCAxMDMuNyA3NC45IDEzNS4yIDE4Ny43IDE4NC4xIDExMi40LTQ4LjkgMTg3LjctODAuMiAxODcuNy0xODQuMWwwLTIyMC45QzI2My4xIDEzLjIgOTcuNiAyNS4yIDQgNzQuOHpNMzYyLjEgMjk1LjdjMCA4Ni42LTUzLjIgMTEzLjYtMTcwLjQgMTY1LjMtMTE3LjUtNTEuOC0xNzAuNS03OC43LTE3MC41LTE2NS4zbDAtMTI2LjRjMTAyLjMtOTMuOCAyMzEuNi0xMDAgMzQwLjktODkuOGwwIDIxNi4yek0xNTIuNSAxODguM2wwIDIxMi44IDMyLjcgMCAwLTY4LjdjMjQuNCA3LjMgNzEuNy0yLjYgNzEuNy03OC41IDAtOTcuNC04MC43LTgwLjktMTA0LjQtNjUuNnptMzIuNyAxMTcuM2wwLTEwMC4zYzguNC00LjIgMzguNC0xMi43IDM4LjQgNDkuMyAwIDY3LjktMzYuNCA1MS44LTM4LjQgNTF6bTc5LjEtODYuNGMuMSA0Ny4zIDUxLjYgNDIuNSA1Mi4yIDcwLjQgLjYgMjMuNS0zMC40IDIzLTUwLjggNC45bDAgMzAuMWMzNi4yIDIxLjUgODEuOSA4LjEgODMuMi0zMy41IDEuNy01MS41LTU0LjEtNDYuNi01My40LTczLjIgLjYtMjAuMyAzMC42LTIwLjUgNDguNS0yLjJsMC0yOC40Yy0yOC41LTIyLTc5LjktOS4yLTc5LjcgMzEuOXoiXX0sWWl0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFtYXpvbi1wYXkiLGljb246WzY0MCw1MTIsW10sImY0MmMiLCJNMTQgMzI1LjNjMi4zLTQuMiA1LjItNC45IDkuNy0yLjUgMTAuNCA1LjYgMjAuNiAxMS40IDMxLjIgMTYuNyA0MC42IDIwLjIgODMuMyAzNS44IDEyNy40IDQ2LjMgMjAuOCA1IDQxLjkgOSA2My4yIDExLjggMzEuNSA0LjIgNjMuMiA2IDk1IDUuMiAxNy40LS40IDM0LjgtMS44IDUyLjEtMy44IDU2LjItNi42IDExMS4xLTIxIDE2My4zLTQyLjggMi45LTEuMiA1LjktMiA5LjEtMS4yIDYuNyAxLjggOSA5IDQuMSAxMy45LTMgMi43LTYuMiA1LjItOS42IDcuNC0zMC43IDIxLjEtNjQuMiAzNi40LTk5LjYgNDcuOS0yNC41IDcuOS00OS42IDEzLjgtNzUuMSAxNy42LTE3LjYgMi43LTM1LjQgNC4zLTUzLjIgNC44LS44IDAtMS43IC4yLTIuNSAuM2wtMjEuMSAwYy0uOC0uMS0xLjctLjItMi41LS4zLTMuNi0uMi03LjItLjMtMTAuNy0uNC0xNi45LS44LTMzLjctMi41LTUwLjQtNS4zLTI3LjQtNC41LTU0LjMtMTEuNS04MC40LTIwLjktNTMuNy0xOS40LTEwMy4xLTQ4LjktMTQ1LjYtODctMS44LTEuNi0zLTMuOC00LjQtNS43bDAtMnpNMTcyIDY1LjFsLTQuMyAuNmMtMTMuOCAxLjctMjYuOCA2LjktMzggMTUuMS0yLjQgMS43LTQuNiAzLjUtNy4xIDUuNC0uMi0uNC0uMy0uOS0uNC0xLjQtLjQtMi43LS44LTUuNS0xLjMtOC4yLS43LTQuNi0zLTYuNi03LjYtNi42bC0xMS41IDBjLTYuOSAwLTguMiAxLjMtOC4yIDguMmwwIDIwOS4zYzAgMSAwIDIgLjEgMyAuMiAzIDIgNC45IDQuOSA1IDcgLjEgMTQuMSAuMSAyMS4xIDAgMi45IDAgNC43LTIgNS01IC4xLTEgLjEtMiAuMS0zbDAtNzIuNGMxLjEgLjkgMS43IDEuNCAyLjIgMS45IDE3LjkgMTQuOSAzOC41IDE5LjggNjEgMTUuNCAyMC40LTQgMzQuNi0xNi41IDQzLjgtMzQuOSA3LTEzLjkgOS45LTI4LjcgMTAuMy00NC4xIC41LTE3LjEtMS4yLTMzLjktOC4xLTQ5LjgtOC41LTE5LjYtMjIuNi0zMi41LTQzLjktMzYuOS0zLjItLjctNi41LTEtOS44LTEuNS0yLjgtLjEtNS41LS4xLTguMy0uMXpNMTI0LjYgMTA3Yy0uMS0uNyAuMS0xLjMgLjQtMS45cy44LTEuMSAxLjMtMS40YzEzLjctOS41IDI4LjgtMTQuNSA0NS42LTEzLjIgMTQuOSAxLjEgMjcuMSA4LjQgMzMuNSAyNS45IDMuOSAxMC43IDQuOSAyMS44IDQuOSAzMyAwIDEwLjQtLjggMjAuNi00IDMwLjYtNi44IDIxLjMtMjIuNCAyOS40LTQyLjYgMjguNS0xNC0uNi0yNi4yLTYtMzcuNC0xMy45LS42LS4zLTEtLjgtMS4zLTEuNHMtLjQtMS4yLS40LTEuOWMuMS0xNC4xIDAtMjguMSAwLTQyLjJzLjEtMjggMC00Mi4xek0zMzAuMyA2NS4xYy0xIC4xLTIgLjMtMi45IC40LTkuNyAuNC0xOS40IDEuOC0yOC45IDQuMS02LjEgMS42LTEyIDMuOC0xNy45IDUuOC0zLjYgMS4yLTUuNCAzLjgtNS4zIDcuNyAuMSAzLjMtLjEgNi42IDAgOS45IC4xIDQuOCAyLjEgNi4xIDYuOCA0LjkgNy44LTIgMTUuNi00LjIgMjMuNS01LjcgMTIuMy0yLjMgMjQuNy0zLjMgMzcuMi0xLjQgNi41IDEgMTIuNiAyLjkgMTYuOCA4LjQgMy43IDQuOCA1LjEgMTAuNSA1LjMgMTYuNCAuMyA4LjMgLjIgMTYuNiAuMyAyNC45IDAgLjUtLjEgLjktLjIgMS40LS41LS4xLS45IDAtMS4zLS4xLTEwLjUtMi42LTIxLjItNC4yLTMyLTQuOS0xMS4zLS42LTIyLjUgLjEtMzMuMyAzLjktMTIuOSA0LjUtMjMuMyAxMi4zLTI5LjQgMjQuOS00LjcgOS44LTUuNCAyMC4yLTMuOSAzMC43IDIgMTQgOSAyNC44IDIxLjQgMzEuNyAxMS45IDYuNiAyNC44IDcuNCAzNy45IDUuNCAxNS4xLTIuMyAyOC41LTguNyA0MC4zLTE4LjQgLjUtLjQgMS0uOCAxLjYtMS4xIC42IDMuOCAxLjEgNy40IDEuOCAxMSAuNiAzLjEgMi41IDUuMSA1LjQgNS4yIDUuNCAuMSAxMC45IC4xIDE2LjMgMCAxLjMgMCAyLjUtLjUgMy40LTEuNHMxLjQtMi4xIDEuNS0zLjNjLjEtLjkgLjEtMS45IC4xLTIuOGwwLTEwNmMwLTQuMy0uMy04LjYtLjktMTIuOS0xLjktMTIuOS03LjQtMjMuNS0xOS0zMC40LTYuNy00LTE0LjEtNi0yMS44LTcuMS0zLjYtLjUtNy4yLS44LTEwLjgtMS4zLTMuOSAuMS03LjkgLjEtMTEuOSAuMXptMzUgMTI3LjdjMCAuNi0uMSAxLjItLjMgMS43cy0uNyAxLTEuMiAxLjNjLTExLjIgOC4xLTIzLjUgMTMuNS0zNy40IDE0LjktNS43IC42LTExLjQgLjQtMTYuOC0xLjgtMy0xLjEtNS42LTIuOS03LjgtNS4ycy0zLjctNS4xLTQuNi04LjFjLTItNi4zLTItMTMuMS0uMS0xOS40IDIuNS04LjMgOC40LTEzIDE2LjQtMTUuNiA4LTIuNCAxNi41LTMuMiAyNC44LTIuMiA4LjQgLjcgMTYuNiAyLjMgMjUgMy40IDEuNiAuMiAyLjEgMSAyLjEgMi42LS4xIDQuOCAwIDkuNSAwIDE0LjNzLS4yIDkuNC0uMSAxNC4xek02MjUuMiAzMjIuMmMtMS01LTQuOC02LjktOS4xLTguMy02LjgtMi4xLTEzLjktMy41LTIxLTMuOS0xMy4xLTEuMS0yNi4zLS41LTM5LjIgMS45LTE0LjMgMi43LTI3LjkgNy4zLTQwIDE1LjYtMS40IC45LTIuNyAyLjEtMy43IDMuNS0uNCAuNi0uNiAxLjMtLjcgMS45czAgMS40IC4yIDIuMWMuNCAxLjUgMi4xIDEuOSAzLjYgMS44IC43IDAgMS41IDAgMi4yLS4xIDcuOC0uOCAxNS41LTEuNyAyMy4zLTIuNSAxMS40LTEuMSAyMi45LTEuOCAzNC4zLS45IDQuOSAuNCA5LjcgMS4zIDE0LjQgMi43IDUuMSAxLjQgNy40IDUuMiA3LjYgMTAuNCAuNCA4LTEuNCAxNS43LTMuNSAyMy4zLTQuMSAxNS40LTEwIDMwLjMtMTUuOCA0NS4xLS40IDEtLjggMi0xIDMtLjUgMi45IDEuMiA0LjggNC4xIDQuMSAxLjgtLjQgMy40LTEuMyA0LjgtMi41IDQuNS00LjIgOC44LTguNyAxMi43LTEzLjQgMTIuOC0xNi40IDIwLjMtMzUuMyAyNC43LTU1LjYgLjgtMy42IDEuNC03LjMgMi4xLTEwLjlsMC0xNy4zek00OTMuMSAxOTljLTEyLjktMzUuNy0yNS44LTcxLjQtMzguNy0xMDcuMi0yLTUuNy00LjItMTEuMy02LjMtMTYuOS0xLjEtMi45LTMuMi00LjgtNi40LTQuOC03LjYtLjEtMTUuMi0uMi0yMi45LS4xLTIuNSAwLTMuNyAyLTMuMiA0LjUgLjUgMi4xIDEuMSA0LjEgMS45IDYuMSAxOS42IDQ4LjUgMzkuMyA5NyA1OS4xIDE0NS41IDEuNyA0LjEgMi4xIDcuNiAuMiAxMS44LTMuMyA3LjMtNS45IDE1LTkuMyAyMi4zLTMgNi41LTggMTEuNC0xNS4yIDEzLjMtNSAxLjMtMTAuMiAxLjctMTUuNCAxLjEtMi41LS4yLTUtLjgtNy41LTEtMy40LS4yLTUuMSAxLjMtNS4yIDQuOC0uMSAzLjMtLjEgNi42IDAgOS45IC4xIDUuNSAyIDggNy40IDguOSA1LjYgMS4xIDExLjIgMS44IDE2LjkgMiAxNy4xIC40IDMwLjctNi41IDM5LjUtMjEuNCAzLjUtNS45IDYuNi0xMiA5LjItMTguNCAyMy43LTU5LjggNDcuMi0xMTkuNyA3MC42LTE3OS42IC43LTEuOCAxLjMtMy42IDEuNi01LjUgLjQtMi44LS45LTQuNC0zLjctNC40LTYuNi0uMS0xMy4zIDAtMTkuOSAwLTEuNy0uMS0zLjQgLjMtNC43IDEuM3MtMi40IDIuMy0zIDMuOWMtLjUgMS40LTEuMSAyLjctMS42IDQuMWwtMzQuOCAxMDBjLTIuNSA3LjItNS4xIDE0LjUtNy43IDIyLjItLjQtMS4xLS42LTEuNy0uOS0yLjR6Il19LFppdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwYW5kb3JhIixpY29uOlszODQsNTEyLFtdLCJlN2RhIiwiTTIwMS4zIDMyTDAgMzIgMCA0ODAgMTIwLjIgNDgwYzExLjIgMCAyMC4zLTkuMSAyMC4zLTIwLjNsMC04Ni4xIDMwLjEgMGMxNDcuMSAwIDIwNy4zLTgyLjkgMjA3LjMtMTc5LjkgMC0xMTkuNy05MC45LTE2MS44LTE3Ni41LTE2MS44eiJdfSxYaXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToib3BlbmlkIixpY29uOls0NDgsNTEyLFtdLCJmMTliIiwiTTI3MS41IDQzMmwtNjggMzJDODguNSA0NTMuNyAwIDM5Mi41IDAgMzE4LjIgMCAyNDYuNyA4Mi41IDE4Ny4yIDE5MS43IDE3My45bDAgNDNjLTcxLjUgMTIuNS0xMjQgNTMtMTI0IDEwMS4zIDAgNTEgNTguNSA5My4zIDEzNS43IDEwM2wwLTM0MCA2OC0zMy4yIDAgMzg0IC4xIDB6TTQ0OCAyOTFsLTEzMS4zLTI4LjUgMzYuOC0yMC43Yy0xOS41LTExLjUtNDMuNS0yMC03MC0yNC44bDAtNDNjNDYuMiA1LjUgODcuNyAxOS41IDEyMC4zIDM5LjNsMzUtMTkuOCA5LjIgOTcuNXoiXX0sUWl0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InZzY28iLGljb246WzUxMiw1MTIsW10sImU3ZGQiLCJNMzU3LjYgMjU2YzAtMjcuMS0xMC42LTUyLjUtMjkuNy03MS43cy00NC42LTI5LjctNzEuNy0yOS43bC0uMSAwYy0yNy4xIDAtNTIuNiAxMC42LTcxLjcgMjkuN3MtMjkuNyA0NC42LTI5LjcgNzEuN2MwIDI3LjEgMTAuNiA1Mi41IDI5LjcgNzEuNyAxOS4yIDE5LjIgNDQuNiAyOS43IDcxLjcgMjkuN2wuMSAwYzI3LjEgMCA1Mi42LTEwLjYgNzEuNy0yOS43IDE5LjItMTkuMiAyOS43LTQ0LjYgMjkuNy03MS43ek0xNzYuMyA0ODIuMWMyMyA4LjEgNDcgMTIuNiA3MS42IDEzLjRsMC01OS4xYy0xNy4xLS43LTMzLjUtMy44LTQ5LTguOWwtMjIuNiA1NC42em0xMzctNTQuNmMtMTUuNSA1LjEtMzIgOC4yLTQ5IDguOWwwIDU5LjFjMjQuNi0uOCA0OC42LTUuMyA3MS42LTEzLjRsLTIyLjYtNTQuNnpNOTIuNSA0MzEuMmMyMC4yIDE4LjkgNDMuMyAzNCA2OC43IDQ1bDIyLjUtNTQuNWMtMTguMy03LjktMzUuMS0xOC44LTQ5LjgtMzEuOUw5Mi41IDQzMS4yem0yODUuOS00MS40Yy0xNC42IDEzLjItMzEuNCAyNC00OS44IDMxLjlsMjIuNSA1NC41YzI1LjQtMTEgNDguNC0yNi4xIDY4LjctNDVsLTQxLjQtNDEuNHpNMTQ1LjQgMzc4LjJjMTMuNiAxMi4xIDI5IDIxLjkgNDUuOCAyOSAxOCA3LjYgMzcuMSAxMiA1Ni43IDEyLjlsMC00Ni44Yy0yNi40LTEuOC01MC4zLTEyLjMtNjkuMS0yOC42bC0zMy40IDMzLjR6bTE4OC0zMy40Yy0xOC44IDE2LjMtNDIuNyAyNi44LTY5LjEgMjguNmwwIDQ2LjhjMTkuNi0uOSAzOC43LTUuMyA1Ni43LTEyLjkgMTYuOC03LjEgMzIuMi0xNi45IDQ1LjgtMjlsLTMzLjQtMzMuNHpNMzguNSAzNTYuNmMxMC43IDIzLjIgMjUgNDQuMyA0Mi41IDYzLjFsNDEuMy00MS4zYy0xMi40LTEzLjQtMjIuOS0yOC42LTMwLjktNDUuMkwzOC41IDM1Ni42em0zODIuNC0yMy41Yy04IDE2LjYtMTguNSAzMS45LTMwLjkgNDUuMmw0MS4zIDQxLjNjMTcuNS0xOC43IDMxLjgtMzkuOSA0Mi41LTYzLjFsLTUyLjktMjMuNXptLTMzMS02OWMxLjEgMTguOCA1LjQgMzcuMiAxMi44IDU0LjUgNy41IDE3LjggMTggMzQgMzEuMiA0OC4ybDMzLjUtMzMuNWMtMTYuNC0xOC44LTI2LjktNDIuOC0yOC43LTY5LjJsLTQ4LjggMHptMjgzLjcgMGMtMS44IDI2LjQtMTIuMyA1MC40LTI4LjcgNjkuMmwzMy41IDMzLjVjMTMuMS0xNC4yIDIzLjYtMzAuNCAzMS4yLTQ4LjIgNy4zLTE3LjQgMTEuNi0zNS43IDEyLjctNTQuNWwtNDguNyAwem0tMzU3LjEgMGMuOSAyNi43IDYuMSA1Mi43IDE1LjYgNzcuNUw4NSAzMTguMmMtNi40LTE3LTEwLjMtMzUuMS0xMS4zLTU0bC01Ny4xIDB6bTQyMi4xIDBjLTEgMTguOS01IDM3LjEtMTEuMyA1NGw1Mi44IDIzLjVjOS41LTI0LjggMTQuNy01MC44IDE1LjYtNzcuNWwtNTcuMSAwek0zMi4xIDE3MC40Yy05LjUgMjQuOC0xNC43IDUwLjgtMTUuNiA3Ny41bDU3LjEgMGMxLTE4LjkgNS0zNy4xIDExLjMtNTRMMzIuMSAxNzAuNHptMTAxLjctMjUuMmMtMTMuMSAxNC4yLTIzLjYgMzAuNC0zMS4yIDQ4LjItNy4zIDE3LjQtMTEuNiAzNS43LTEyLjggNTQuNWw0OC44IDBjMS44LTI2LjQgMTIuMy01MC40IDI4LjctNjkuMmwtMzMuNS0zMy41em0yMTEuMSAzMy41YzE2LjQgMTguOCAyNi45IDQyLjggMjguNyA2OS4ybDQ4LjcgMGMtMS4xLTE4LjgtNS40LTM3LjItMTIuNy01NC41LTcuNS0xNy44LTE4LTM0LTMxLjItNDguMmwtMzMuNSAzMy41em04Mi40IDE1LjJjNi40IDE3IDEwLjMgMzUuMSAxMS4zIDU0bDU3LjEgMGMtLjktMjYuNy02LjEtNTIuNy0xNS42LTc3LjVsLTUyLjggMjMuNXpNODEgOTIuM0M2My40IDExMSA0OS4yIDEzMi4yIDM4LjUgMTU1LjRsNTIuOSAyMy41YzgtMTYuNiAxOC41LTMxLjkgMzAuOS00NS4yTDgxIDkyLjN6bTMwOSA0MS4zYzEyLjQgMTMuNCAyMi45IDI4LjYgMzAuOSA0NS4ybDUyLjktMjMuNWMtMTAuNy0yMy4yLTI1LTQ0LjMtNDIuNS02My4xTDM5MCAxMzMuN3pNMjQ4IDkxLjhjLTE5LjYgLjktMzguNyA1LjMtNTYuNyAxMi45LTE2LjggNy4xLTMyLjIgMTYuOS00NS44IDI5bDMzLjQgMzMuNGMxOC44LTE2LjMgNDIuNy0yNi44IDY5LjEtMjguNmwwLTQ2Ljd6bTE2LjMgNDYuN2MyNi40IDEuOCA1MC4zIDEyLjMgNjkuMSAyOC42bDMzLjQtMzMuNGMtMTMuNi0xMi4xLTI5LTIxLjktNDUuOC0yOS0xOC03LjYtMzcuMS0xMi01Ni43LTEyLjlsMCA0Ni43ek0xNjEuMiAzNS44Yy0yNS40IDExLTQ4LjQgMjYuMS02OC43IDQ1bDQxLjQgNDEuNGMxNC43LTEzLjIgMzEuNC0yNCA0OS44LTMxLjlMMTYxLjIgMzUuOHpNMzI4LjYgOTAuM2MxOC4zIDcuOSAzNS4xIDE4LjggNDkuOCAzMS45bDQxLjQtNDEuNGMtMjAuMi0xOC45LTQzLjMtMzQtNjguNy00NUwzMjguNiA5MC4zek0yNDggMTYuNGMtMjQuNiAuOC00OC42IDUuMy03MS42IDEzLjRsMjIuNiA1NC42YzE1LjUtNS4xIDMyLTguMiA0OS04LjlsMC01OS4xem0xNi4zIDU5LjFjMTcuMSAuNyAzMy41IDMuOCA0OSA4LjlsMjIuNi01NC42Yy0yMy04LjEtNDctMTIuNi03MS42LTEzLjRsMCA1OS4xek01MTIuMiAyNjQuMmwtLjIgMEM1MDcuOCAzOTkgMzk5LjIgNTA3LjcgMjY0LjMgNTExLjlsMCAuMS0xNi4zIDAgMC0uMUMxMTMuMSA1MDcuNyA0LjUgMzk5IC4yIDI2NC4xbC0uMiAwIDAtMTYuMyAuMiAwQzQuNSAxMTMgMTEzLjEgNC4zIDI0OCAuMWwwLS4xIDE2LjMgMCAwIC4xQzM5OS4yIDQuMyA1MDcuOCAxMTMgNTEyIDI0Ny45bC4yIDAgMCAxNi4zeiJdfSxLaXQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidWJ1bnR1IixpY29uOls1NzYsNTEyLFtdLCJmN2RmIiwiTTQ2OS4yIDc1YzAtMjAuMS04LTM5LjMtMjIuMi01My41cy0zMy40LTIyLjItNTMuNS0yMi4yLTM5LjMgOC01My41IDIyLjItMjIuMiAzMy40LTIyLjIgNTMuNWMwIDIwLjEgOCAzOS4zIDIyLjEgNTMuNXMzMy40IDIyLjEgNTMuNSAyMi4xIDM5LjMtOCA1My41LTIyLjEgMjIuMS0zMy40IDIyLjEtNTMuNWwuMSAwem0tMzE1IDE2NS43YTc1LjYgNzUuNiAwIDEgMCAtMTUxLjIgMCA3NS42IDc1LjYgMCAxIDAgMTUxLjIgMHpNNTcgMzQ2YzE4LjYgNDYuOSA1MSA4NyA5MyAxMTUuMXM5MS41IDQyLjYgMTQyIDQxLjdjLTE0LjctMTguNi0yMi45LTQxLjUtMjMuMi02NS4yLTYuOC0uOS0xMy4zLTIuMS0xOS41LTMuNC0yNi44LTUuNy01MS45LTE3LjMtNzMuNi0zNHMtMzkuMy0zOC4xLTUxLjctNjIuNWMtMjAuOSA5LjktNDQuNSAxMi44LTY3LjEgOC4ybC4xIC4xem0zOTUuMSA4OS44YTc1LjYgNzUuNiAwIDEgMCAtMTUxLjIgMCA3NS42IDc1LjYgMCAxIDAgMTUxLjIgMHpNNDQ0IDM1MS42YzE4LjUgMTQuOCAzMS42IDM1LjIgMzcuMiA1OC4yIDMzLjMtNDEuMyA1Mi42LTkyLjIgNTQuOC0xNDUuMnMtMTIuNS0xMDUuNC00Mi4yLTE0OS40Yy04LjYgMjEuNS0yNCAzOS42LTQzLjggNTEuNiAxNS40IDI4LjYgMjIuOSA2MC44IDIxLjkgOTMuMnMtMTAuNyA2NC0yOCA5MS42bC4xIDB6TTEwMS4xIDEzNS40YzEyLjQgMi43IDI0LjMgNy41IDM1LjEgMTQuMyAxNi42LTI0LjIgMzguOS00NC4xIDY0LjgtNThTMjU1LjggNzAuNCAyODUuMiA3MGMuMi01LjkgLjktMTEuOSAyLTE3LjcgMy42LTE2LjcgMTEuMS0zMi4zIDIxLjgtNDUuNS00Ny43LTMuOC05NS40IDYtMTM3LjYgMjguNVM5NC4zIDkxLjcgNzAuOCAxMzMuNGMyLjctLjIgNS4zLS4zIDgtLjMgNy41IDAgMTUgLjggMjIuNCAyLjNsLS4xIDB6Il19LEppdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ2aWFjb2luIixpY29uOlszODQsNTEyLFtdLCJmMjM3IiwiTTM4NCAzMmwtNjQgMC04MC43IDE5Mi05NC41IDAtODAuOC0xOTItNjQgMCA0OCAxMTItNDggMCAwIDQ4IDY4LjUgMCAxMy44IDMyLTgyLjMgMCAwIDQ4IDEwMi44IDAgODkuMiAyMDggODkuMi0yMDggMTAyLjggMCAwLTQ4LTgyLjMgMCAxMy44LTMyIDY4LjUgMCAwLTQ4LTQ4IDAgNDgtMTEyek0xOTIgMzM2bC0yNy02NCA1NCAwLTI3IDY0eiJdfSxlb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiemhpaHUiLGljb246WzY0MCw1MTIsW10sImY2M2YiLCJNMTcwLjUgMTQ4LjFsMCAyMTcuNSAyMy40IDAgNy43IDI2LjQgNDItMjYuNCA0OS41IDAgMC0yMTcuNS0xMjIuNyAwem05Ny44IDE5My45bC0yNy45IDAtMjcuOSAxNy41LTUuMS0xNy41LTExLjkgMCAwLTE3MC4zIDcyLjggMCAwIDE3MC4zek0xNDkuOCAyNDcuN2wtNTIuMyAwYzEuNy0yNy4xIDIuMi01MS42IDIuMi03My41bDUxLjIgMHMyLTIyLjYtOC42LTIyLjNsLTg4LjUgMGMzLjUtMTMuMSA3LjktMjYuNyAxMy4xLTQwLjcgMCAwLTI0LjEgMC0zMi4zIDIxLjYtMy40IDguOS0xMy4yIDQzLjEtMzAuNyA3OC4xIDUuOS0uNiAyNS40LTEuMiAzNi44LTIyLjIgMi4xLTUuOSAyLjUtNi43IDUuMS0xNC41bDI4LjkgMGMwIDEwLjUtMS4yIDY2LjktMS43IDczLjRsLTUyLjMgMGMtMTEuNyAwLTE1LjYgMjMuNi0xNS42IDIzLjZsNjUuNiAwYy00LjQgNDkuOS0yOCA5MS45LTcwLjggMTI1LjEgMjAuNSA1LjkgNDAuOS0uOSA1MS05LjkgMCAwIDIzLTIwLjkgMzUuNi02OS4zbDU0IDY0LjlzNy45LTI2LjktMS4yLTQwYy03LjYtOC45LTI4LjEtMzMuMS0zNi44LTQxLjhMODcuOSAzMTJjNC40LTE0IDctMjcuNiA3LjktNDAuN2w2MS42IDBzLS4xLTIzLjYtNy42LTIzLjZsMCAwem00MTItMS42YzIwLjgtMjUuNiA0NS01OC42IDQ1LTU4LjZzLTE4LjYtMTQuOC0yNy40LTQuMWMtNiA4LjItMzYuOCA0OC4yLTM2LjggNDguMmwxOS4yIDE0LjR6TTQxMS44IDE4N2MtOS04LjItMjUuOSAyLjEtMjUuOSAyLjFzMzkuNSA1NSA0MS4xIDU3LjRsMTkuNS0xMy43cy0yNS43LTM3LjYtMzQuNy00NS45bDAgMCAwIDB6TTY0MCAyNTguNGMtMTkuOCAwLTEzMC45IC45LTEzMS4xIC45bDAtMTAxYzQuOCAwIDEyLjQtLjQgMjIuOC0xLjIgNDAuOS0yLjQgNzAuMS00IDg3LjgtNC44IDAgMCAxMi4yLTI3LjItLjYtMzMuNC0zLjEtMS4yLTIzLjIgNC42LTIzLjIgNC42cy0xNjUuMiAxNi41LTIzMi40IDE4YzEuNiA4LjggNy42IDE3LjEgMTUuOCAxOS42IDEzLjMgMy41IDIyLjcgMS43IDQ5LjIgLjkgMjQuOC0xLjYgNDMuNy0yLjQgNTYuNS0yLjRsMCA5OS44LTEzMy41IDBzMi44IDIyLjMgMjUuNSAyMi45bDEwNy45IDAgMCA3MC45YzAgMTQtMTEuMiAyMi0yNC41IDIxLjEtMTQuMSAuMS0yNi4xLTEuMS00MS43LTEuOCAyIDQgNi4zIDE0LjQgMTkuMyAyMS44IDkuOSA0LjggMTYuMiA2LjYgMjYgNi42IDI5LjYgMCA0NS43LTE3LjMgNDQuOS00NS4zbDAtNzMuMyAxMjIuNCAwYzkuNyAwIDguNy0yMy44IDguNy0yMy44bDAgMHoiXX0sdG90PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InlhbmRleCIsaWNvbjpbMjU2LDUxMixbXSwiZjQxMyIsIk0xNTMuMSAzMTUuOEw2NS43IDUxMiAyIDUxMiA5OCAzMDIuMkM1Mi45IDI3OS4zIDIyLjggMjM3LjggMjIuOCAxNjEuMSAyMi43IDUzLjcgOTAuOCAwIDE3MS43IDBsODIuMyAwIDAgNTEyLTU1LjEgMCAwLTE5Ni4yLTQ1LjggMHpNMTk4LjkgNDYuNWwtMjkuNCAwYy00NC40IDAtODcuNCAyOS40LTg3LjQgMTE0LjYgMCA4Mi4zIDM5LjQgMTA4LjggODcuNCAxMDguOGwyOS40IDAgMC0yMjMuNHoiXX0sYW90PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBpeGl2IixpY29uOls0NDgsNTEyLFtdLCJlNjQwIiwiTTk2IDMyQzQzIDMyIDAgNzUgMCAxMjhMMCAzODRjMCA1MyA0MyA5NiA5NiA5NmwyNTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMjU2YzAtNTMtNDMtOTYtOTYtOTZMOTYgMzJ6bTc3LjcgMjE3LjNhNjAuMSA2MC4xIDAgMSAwIDEyMC4zIDAgNjAuMSA2MC4xIDAgMSAwIC0xMjAuMyAwek0xMTkuMSAzODcuOGMtLjMtLjgtLjUtMS43LS41LTIuNmwwLTI0NC4zYzAtMS44IC43LTMuNiAyLTQuOXMzLTIgNC45LTJsMTYuOSAwYzEuMiAwIDIuMyAuMyAzLjMgLjhzMS45IDEuMyAyLjUgMi4zbDE0IDIxLjhjMTkuNy0xNS42IDQ0LjUtMjUgNzEuNi0yNSA2My42IDAgMTE1LjIgNTEuNiAxMTUuMiAxMTUuMlMyOTcuNSAzNjQuNSAyMzMuOCAzNjQuNWMtMjIgMC00Mi42LTYuMi02MC4xLTE2LjlsMCAzNy42YzAgLjktLjIgMS44LS41IDIuNnMtLjkgMS42LTEuNSAyLjItMS40IDEuMS0yLjIgMS41LTEuNyAuNS0yLjYgLjVsLTQxLjMgMGMtLjkgMC0xLjgtLjItMi42LS41cy0xLjYtLjktMi4yLTEuNS0xLjEtMS40LTEuNS0yLjJ6Il19LHJvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJvcGVuYWkiLGljb246WzUxMiw1MTIsW10sImU3Y2YiLCJNMTk2LjQgMTg1LjhsMC00OC42YzAtNC4xIDEuNS03LjIgNS4xLTkuMmw5Ny44LTU2LjNjMTMuMy03LjcgMjkuMi0xMS4zIDQ1LjYtMTEuMyA2MS40IDAgMTAwLjQgNDcuNiAxMDAuNCA5OC4zIDAgMy42IDAgNy43LS41IDExLjhMMzQzLjMgMTExLjFjLTYuMS0zLjYtMTIuMy0zLjYtMTguNCAwTDE5Ni40IDE4NS44ek00MjQuNyAzNzUuMmwwLTExNi4yYzAtNy4yLTMuMS0xMi4zLTkuMi0xNS45TDI4NyAxNjguNCAzMjkgMTQ0LjNjMy42LTIgNi43LTIgMTAuMiAwTDQzNyAyMDAuN2MyOC4yIDE2LjQgNDcuMSA1MS4yIDQ3LjEgODUgMCAzOC45LTIzIDc0LjgtNTkuNCA4OS42bDAgMHpNMTY2LjIgMjcyLjhsLTQyLTI0LjZjLTMuNi0yLTUuMS01LjEtNS4xLTkuMmwwLTExMi42YzAtNTQuOCA0Mi05Ni4zIDk4LjgtOTYuMyAyMS41IDAgNDEuNSA3LjIgNTguNCAyMEwxNzUuNCAxMDguNWMtNi4xIDMuNi05LjIgOC43LTkuMiAxNS45bDAgMTQ4LjUgMCAwem05MC40IDUyLjJsLTYwLjItMzMuOCAwLTcxLjcgNjAuMi0zMy44IDYwLjIgMzMuOCAwIDcxLjctNjAuMiAzMy44em0zOC43IDE1NS43Yy0yMS41IDAtNDEuNS03LjItNTguNC0yMGwxMDAuOS01OC40YzYuMS0zLjYgOS4yLTguNyA5LjItMTUuOWwwLTE0OC41IDQyLjUgMjQuNmMzLjYgMiA1LjEgNS4xIDUuMSA5LjJsMCAxMTIuNmMwIDU0LjgtNDIuNSA5Ni4zLTk5LjMgOTYuM2wwIDB6TTE3My44IDM2Ni41TDc2LjEgMzEwLjJjLTI4LjItMTYuNC00Ny4xLTUxLjItNDcuMS04NSAwLTM5LjQgMjMuNi03NC44IDU5LjktODkuNmwwIDExNi43YzAgNy4yIDMuMSAxMi4zIDkuMiAxNS45bDEyOCA3NC4yLTQyIDI0LjFjLTMuNiAyLTYuNyAyLTEwLjIgMHptLTUuNiA4NGMtNTcuOSAwLTEwMC40LTQzLjUtMTAwLjQtOTcuMyAwLTQuMSAuNS04LjIgMS0xMi4zbDEwMC45IDU4LjRjNi4xIDMuNiAxMi4zIDMuNiAxOC40IDBsMTI4LjUtNzQuMiAwIDQ4LjZjMCA0LjEtMS41IDcuMi01LjEgOS4ybC05Ny44IDU2LjNjLTEzLjMgNy43LTI5LjIgMTEuMy00NS42IDExLjNsMCAwem0xMjcgNjAuOWM2MiAwIDExMy43LTQ0IDEyNS40LTEwMi40IDU3LjMtMTQuOSA5NC4yLTY4LjYgOTQuMi0xMjMuNCAwLTM1LjgtMTUuNC03MC43LTQzLTk1LjcgMi42LTEwLjggNC4xLTIxLjUgNC4xLTMyLjMgMC03My4yLTU5LjQtMTI4LTEyOC0xMjgtMTMuOCAwLTI3LjEgMi00MC40IDYuNy0yMy0yMi41LTU0LjgtMzYuOS04OS42LTM2LjktNjIgMC0xMTMuNyA0NC0xMjUuNCAxMDIuNC01Ny4zIDE0LjgtOTQuMiA2OC42LTk0LjIgMTIzLjQgMCAzNS44IDE1LjQgNzAuNyA0MyA5NS43LTIuNiAxMC44LTQuMSAyMS41LTQuMSAzMi4zIDAgNzMuMiA1OS40IDEyOCAxMjggMTI4IDEzLjggMCAyNy4xLTIgNDAuNC02LjcgMjMgMjIuNSA1NC44IDM2LjkgODkuNiAzNi45eiJdfSxpb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2l0aCIsaWNvbjpbNDQ4LDUxMixbXSwiZjUxMiIsIk0wIDMybDY5LjcgMTE4LjgtNTguOS0xMS41IDY5LjggOTFjLTMgMTctMyAzNC40IDAgNTEuNGwtNjkuOCA5MSA1OC45LTExLjUtNjkuNyAxMTguOCAxMTguOC02OS43LTExLjUgNTguOSA5MS02OS44YzE3IDMgMzQuNSAzIDUxLjUgMGw5MSA2OS44LTExLjUtNTguOSAxMTguNyA2OS43LTY5LjctMTE4LjggNTguOSAxMS41LTY5LjgtOTFjMy0xNyAzLTM0LjQgMC01MS40bDY5LjgtOTEtNTguOSAxMS41IDY5LjctMTE4LjgtMTE4LjcgNjkuNyAxMS41LTU4LjktOTEuMSA2OS45Yy04LjUtMS41LTE3LjEtMi4zLTI1LjctMi4zcy0xNy4yIC44LTI1LjcgMi4zTDEwNy4yIDQyLjggMTE4LjggMTAxLjcgMCAzMnpNMjI0IDM4MC4yYTEyNC4yIDEyNC4yIDAgMSAxIDAtMjQ4LjQgMTI0LjIgMTI0LjIgMCAxIDEgMCAyNDguNHptMC0yMTEuOGE4Ny42IDg3LjYgMCAxIDAgMCAxNzUuMSA4Ny42IDg3LjYgMCAxIDAgMC0xNzUuMXoiXX0sb290PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im5mYy1kaXJlY3Rpb25hbCIsaWNvbjpbNTEyLDUxMixbXSwiZTUzMCIsIk0yMTEuOCA0ODguNmMxLjYgMi41IDIuMSA1LjYgMS40IDguNS0uNiAyLjktMi40IDUuNS00LjkgNy4xLTIuNiAxLjYtNS42IDIuMS04LjYgMS41LTYxLjQtMTMuOS0xMTUuNi00OS45LTE1Mi4yLTEwMS4yUy01LjQgMjkwLjMgMS42IDIyNy43YzctNjIuNyAzNi44LTEyMC41IDgzLjctMTYyLjUgNDYuOS00MiAxMDcuNy02NS4yIDE3MC43LTY1LjIgMS41IDAgMi4xIC4zIDQuMyAuOSAxLjQgLjYgMS44IDEuNCAzLjcgMi41IDEuMSAxLjEgMS45IDIuMyAyLjUgMy43IC41IDEuNCAuOCAyLjggLjggNC4zbDAgMTAxIDI0LjUtMjUuOWMxLTEuMSAyLjItMiAzLjYtMi42IDEuMy0uNiAyLjgtLjkgNC4zLTEgMS41LS4xIDIuOSAuMiA0LjMgLjdzMi43IDEuMyAzLjggMi40YzEgMSAxLjkgMi4yIDIuNSAzLjYgLjYgMS4zIDEgMi44IDEgNC4zcy0uMiAzLS43IDQuM2MtLjYgMS40LTEuNCAyLjYtMi40IDMuN2wtNDQgNDYuNmMtMS4xIDEuMS0yLjMgMi0zLjcgMi42LTEuNSAuNi0zIC45LTUuNCAuOS0uNiAwLTIuMi0uMy0zLjYtLjlzLTIuNy0xLjUtMy43LTIuNmwtNDQuMS00Ni42Yy0yLTIuMi0zLjEtNS4xLTMtOC4xIDAtMyAxLjMtNi43IDMuNS03LjkgMi4yLTIuMSA1LjEtMy4yIDguMS0zLjEgMyAuMSA1LjggMS4zIDcuOSAzLjVsMjQuNSAyNiAwLTg5LjVjLTU2LjQgMi44LTEwOS44IDI1LjgtMTUwLjUgNjUtNDAuNiAzOS4xLTY1LjcgOTEuNy03MC42IDE0Ny45UzM0LjQgMzQ4LjEgNjcuNyAzOTMuN2MzMi40IDQ1LjUgODIgNzcuNSAxMzcgODkuOSAyLjkgLjcgNS41IDIuNSA3LjEgNXpNMTcxLjQgMTI2LjFjLS44IDEuMy0xLjkgMi40LTMuMSAzLjItMjAuNSAxMy45LTM3LjIgMzIuNi00OC44IDU0LjVzLTE3LjcgNDYuMy0xNy43IDcxLjEgNi4xIDQ5LjIgMTcuNyA3MC4yYzExLjYgMjIuOCAyOC4zIDQxLjUgNDguOCA1NS40IDIuNSAxLjcgNC4yIDQuMyA0LjcgNy4zIC42IDIuOS0uOSA2LTEuNyA4LjQtMS43IDIuNS01LjIgNC4yLTcuMyAzLjktMi45IDEuNC02IC44LTguNC0uOS0yMy42LTE2LTQyLjgtMzcuNS01Ni4xLTYyLjctMTMuMy0yNS4xLTIwLjMtNTMuMS0yMC4zLTgxLjYgMC0yOC40IDctNTYuNSAyMC4zLTgxLjYgMTMuMy0yNS4yIDMyLjUtNDYuNyA1Ni4xLTYyLjcgMS4yLS44IDIuNi0xLjQgNC0xLjggMS41LS4zIDMtLjMgNC41IDAgMS40IC4yIDIuOCAuOCA0LjEgMS42czIuMyAxLjkgMy4yIDMuMWMuOCAxLjIgMS40IDIuNiAxLjcgNC4xcy4zIDMgMCA0LjRjLS4zIDEuNS0uOCAyLjktMS43IDQuMXpNMzQwLjkgMzgzLjVjLjgtMS4yIDEuOS0yLjMgMi4yLTMuMWwwLS4xYzIxLjMtMTQgMzgtMzIuNyA0OS42LTU0LjYgMTEuNS0yMS44IDE3LjUtNDYuMiAxNy41LTcwLjlzLTYtNDkuMS0xNy41LTcxYy0xMS42LTIyLjctMjguMy00MC41LTQ5LjYtNTQuNS0uMy0uOC0xLjQtMS45LTIuMi0zLjEtLjgtMS4zLTEuNC0yLjctMS42LTQuMS0xLjItMS41LS4zLTMgMC00LjQgLjMtMS41IC45LTIuOSAxLjctNC4xIC45LTEuMiAxLjEtMi4zIDMuMi0zLjEgMS4yLS44IDIuNi0xLjMgNC4xLTEuNnMyLjktLjMgNC40IDAgMi44IC45IDQuMSAxLjhjMjMuNCAxNiA0Mi43IDM3LjUgNTUuOSA2Mi42IDEzLjMgMjUuMSAxOS40IDUzLjEgMTkuNCA4MS41IDAgMjguNS02LjEgNTYuNS0xOS40IDgxLjYtMTMuMiAyNS4xLTMyLjUgNDYuNi01NS45IDYyLjYtMS4zIC45LTIuNiAxLjUtNC4xIDEuOHMtMi45IC4zLTQuNCAwLTIuOS0xLjctNC4xLTEuNmMtMi4xLS44LTIuMy0xLjktMy4yLTMuMS0uOC0xLjItMS40LTIuNi0xLjctNC4xLS4zLTEuNC0xLjItMi45IDAtNC40IC4yLTEuNCAuOC0yLjggMS42LTQuMXpNMzEyLjMgNi4zYzU2LjIgMTIuNyAxMDYuNCA0NCAxNDIuNyA4OC43IDMwLjQgMzcuNiA0OS42IDgzIDU1LjMgMTMxIDUuNiA0OC0yLjQgOTYuNy0yMy4yIDE0MC4zLTIwLjkgNDMuNi01My42IDgwLjUtOTQuNSAxMDYuMy00MC45IDI1LjctODguMiAzOS40LTEzNi42IDM5LjQtMS41IDAtMi45LS4zLTQuMy0uOS0xLjQtLjUtMi42LTEuNC0zLjctMi40LTEuOS0xLjEtMS45LTIuMy0yLjQtMy43LS42LTEuNC0uOS0yLjgtLjktNC4zbDAtOTkuMi0yNC41IDI2Yy0yLjEgMi4yLTQuOSAyLjYtNy45IDMuNi0zIC4xLTUuOS0xLjEtOC4xLTQtMi4yLTEuMi0zLjUtNC0zLjUtNy0uMS0zIDEtNS45IDMtOC4xbDQ0LjEtNDYuNmMxLjMtMi4yIDUuMS0zLjQgNy4zLTMuNCA0IDAgNi45IDEuMiA5LjEgMy40bDQ0IDQ2LjZjMi4xIDIuMiAzLjIgNS4xIDMuMSA4LjFzLTEuNCA1LjgtMy41IDdjLTIuMiAyLjktNS4xIDQuMS04LjEgNC0zLTEtNS45LTEuNC03LjktMy42bC0yNC41LTI1LjkgMCA4Ny41YzU2LjQtMi44IDEwOS44LTI1LjggMTUwLjUtNjUgNDAuNy00MCA2NS44LTkxLjcgNzAuNy0xNDcuOSA0LjgtNTcuMS0xMC44LTExMi4zLTQ0LjEtMTU3LjktMzMuMy00NS42LTgyLTc3LjUtMTM3LTg5LjktMS41LS4zLTIuOC0uOS00LjEtMS44LTEuMi0uOS0yLjItMS45LTMtMy4yLS44LTEuMi0yLjItMi42LTEuNi00LjEtLjItMS41LS4yLTMgLjEtNC40IC40LTEuNCAxLTIuOCAxLjgtNCAuOS0xLjIgMi0yLjIgMy4yLTMgMS4zLS44IDIuNy0xLjMgNC4xLTEuNiAxLjUtLjMgMy0uMiA0LjQgLjF6bTQwLjggMjQ5LjhjMCAzMS40LTE3LjUgNjEuMS00OS4zIDgzLjUtMi4xIDEuNS00LjggMi4zLTcuNCAyLTIuNy0uMi01LjItMS4zLTctMy4ybC03MC4xLTY5LjhjLTIuMi0yLjEtNC4yLTUtMy40LTggMC0zIDEuMi01LjkgMy4zLTggMi4yLTIuMSA1LTMuMyA4LTMuM3M1LjkgMS4yIDggMy4zbDYzLjEgNjIuOGMyMC44LTE3LjEgMzIuMi0zNy45IDMyLjItNTkuMyAwLTIzLjktMTQuMS00Ny0zOS43LTY1LjEtMi41LTEuNy00LjEtNC4zLTQuNi03LjMtLjUtMi45IC4xLTYgMS45LTguNCAxLjctMi41IDQuMy00LjEgNy4zLTQuNiAyLjktLjUgNiAuMSA4LjQgMS45IDMxLjggMjIuNCA0OS4zIDUyLjEgNDkuMyA4My41ek0yMTYuNyAzNDEuNWMtMyAuNS02LS4yLTguNS0xLjktMzEuNy0yMi40LTUwLjEtNTIuMS01MC4xLTgzLjVzMTguNC02MS4xIDUwLjEtODMuNWMyLjItMS42IDQuOS0yLjMgNy41LTIuMSAyLjcgLjMgNS4xIDEuNCA3IDMuM2w3MC4xIDY5LjhjMi4xIDIuMSAzLjMgNSAzLjMgOHMtMiA1LjgtMy4zIDhjLTIuMSAyLjEtNSAzLjMtNy45IDMuMy0zIDAtNi44LTEuMi04LTMuM2wtNjMuMS02Mi45Yy0yMC45IDE3LjMtMzIuMiAzOC0zMi4yIDU5LjQgMCAyMyAxNC4xIDQ3IDM5LjcgNjUgMi40IDEuOCA0LjEgNC40IDQuNiA3LjQgLjUgMi45LS4yIDUuOS0xLjkgOC40LTEuNyAyLjQtNC40IDQuMS03LjMgNC42eiJdfSxzb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY3JlYXRpdmUtY29tbW9ucy1ieSIsaWNvbjpbNTEyLDUxMixbXSwiZjRlNyIsIk0zMjIuOSAxOTQuNGwwIDEwMS40LTI4LjMgMCAwIDEyMC41LTc3LjEgMCAwLTEyMC40LTI4LjMgMCAwLTEwMS41YzAtNC40IDEuNi04LjIgNC42LTExLjMgMy4xLTMuMSA2LjktNC43IDExLjMtNC43bDEwMS45IDBjNC4xIDAgNy44IDEuNiAxMS4xIDQuNyAzLjEgMy4yIDQuOCA2LjkgNC44IDExLjN6bS0zMi41LTY0LjVhMzQuNSAzNC41IDAgMSAxIC02OSAuOCAzNC41IDM0LjUgMCAxIDEgNjktLjh6TTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3oiXX0sbm90PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InVtYnJhY28iLGljb246WzUxMiw1MTIsW10sImY4ZTgiLCJNMjU2LjMgOGEyNDggMjQ4IDAgMSAwIC0uNyA0OTYgMjQ4IDI0OCAwIDEgMCAuNy00OTZ6bTE0NSAyNjZjLS44IDI3LjEtNS40IDQ4LjgtMTQgNjVzLTIzLjEgMjcuOS00My41IDM1Yy0yMC40IDcuMS00OC45IDEwLjYtODUuNCAxMC41bC00LjYgMGMtMzYuNSAuMS02NS0zLjMtODUuNC0xMC41cy0zNC45LTE4LjgtNDMuNS0zNWMtOC42LTE2LjItMTMuMi0zNy45LTE0LTY1LS43LTEwLjItLjctMjAuNSAwLTMwLjcgLjQtMTQuNyAxLjYtMjkuMyAzLjYtNDMuOSAxLjktMTMuNCAzLjYtMjIuNiA1LjQtMzIgMS00LjkgMS4zLTYuNCAxLjgtOC40IC4zLTEuMSAuOS0yLjEgMS44LTIuOHMyLTEuMSAzLjEtMS4xbC43IDAgMzIgNWMxLjIgLjIgMi4yIC44IDMgMS43czEuMiAyLjEgMS4yIDMuM2MwIC4zIDAgLjUgMCAuOGwtMS43IDguOGMtMS42IDguOC0zLjIgMjAuMS00LjggMzMuNy0xLjcgMTQtMi41IDI4LjEtMi42IDQyLjItLjIgMjcgMi41IDQ2LjkgOC4xIDU5LjggMi44IDYuNCA3LjIgMTIgMTIuNiAxNi40czExLjkgNy40IDE4LjcgOC44YzE4LjggNCAzOC4xIDUuNyA1Ny4zIDUuMWwxMC4zIDBjMTkuMiAuNiAzOC41LTEuMiA1Ny4zLTUuMiA2LjgtMS40IDEzLjItNC41IDE4LjYtOC44czkuNy0xMCAxMi41LTE2LjRjNS43LTEyLjkgOC40LTMyLjkgOC4xLTU5LjgtLjEtMTQuMS0xLTI4LjItMi42LTQyLjEtMS43LTEzLjYtMy4zLTI0LjgtNC45LTMzLjdsLTEuNy04LjhjMC0uMyAwLS41IDAtLjggMC0xLjIgLjQtMi40IDEuMi0zLjNzMS44LTEuNSAzLTEuN2wzMi01IC44IDBjMS4xIDAgMi4yIC40IDMuMSAxLjFzMS41IDEuNyAxLjggMi44Yy42IDIgLjggMy42IDEuOCA4LjQgMS44IDkuNiAzLjUgMTguOCA1LjQgMzIgMiAxNC42IDMuMiAyOS4yIDMuNiA0My45IC43IDEwLjIgLjcgMjAuNSAwIDMwLjdsMCAweiJdfSxsb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaG9vbGkiLGljb246WzY0MCw1MTIsW10sImY0MjciLCJNMTQ0LjUgMzUybDM4LjMgLjhjLTEzLjItNC42LTI2LTEwLjItMzguMy0xNi44bDAgMTZ6bTU3LjctNS4zbDAgNS4zLTE5LjQgLjhjMzYuNSAxMi41IDY5LjkgMTQuMiA5NC43IDcuMi0xOS45IC4yLTQ1LjgtMi42LTc1LjMtMTMuM3pNNjExLjEgMjMxLjVjMTUuOSAwIDI4LjktMTIuOSAyOC45LTI4LjlzLTEyLjktMjQuNS0yOC45LTI0LjVjLTE1LjkgMC0yOC45IDguNi0yOC45IDI0LjVzMTIuOSAyOC45IDI4LjkgMjguOXpNNTgyLjEgMzUybDU3LjkgMCAwLTExMC41LTU3LjkgMCAwIDExMC41em0tNzMuNyAwbDU3LjkgMCAwLTE5NS4zLTU3LjkgMjcuMyAwIDE2OHptLTMxLTExOS40Yy0xOC4yLTE4LjItNTAuNC0xNy4xLTUwLjQtMTcuMXMtMzIuMy0xLjEtNTAuNCAxNy4xYy0xOC4yIDE4LjItMTYuOCAzMy45LTE2LjggNTIuNnMtMS40IDM0LjMgMTYuOCA1Mi41IDUwLjQgMTcuMSA1MC40IDE3LjEgMzIuMyAxLjEgNTAuNC0xNy4xYzE4LjItMTguMiAxNi44LTMzLjggMTYuOC01Mi41LS4xLTE4LjggMS4zLTM0LjUtMTYuOC01Mi42em0tMzkuOCA3MS45YzAgMy42LTEuOCAxMi41LTEwLjcgMTIuNXMtMTAuNy04LjktMTAuNy0xMi41bDAtNDAuNGMwLTguNyA3LjMtMTAuOSAxMC43LTEwLjlzMTAuNyAyLjEgMTAuNyAxMC45bDAgNDAuNHpNMzMxLjQgMjMyLjZjLTE4LjItMTguMi01MC40LTE3LjEtNTAuNC0xNy4xcy0zMi4yLTEuMS01MC40IDE3LjFjLTEuOSAxLjktMy43IDMuOS01LjMgNi0zOC4yLTI5LjYtNzIuNS00Ni41LTEwMi4xLTYxLjFsMC0yMC43LTIyLjUgMTAuNmMtNTQuNC0yMi4xLTg5LTE4LjItOTcuMyAuMSAwIDAtMjQuOSAzMi44IDYxLjggMTEwLjhsMCA3My43IDU3LjkgMCAwLTI4LjZjLTYuNS00LjItMTMtOC43LTE5LjQtMTMuNi0xNC44LTExLjItMjcuNC0yMS42LTM4LjQtMzEuNGwwLTMxYzEzLjEgMTQuNyAzMC41IDMxLjQgNTMuNCA1MC4zbDQuNSAzLjYgMC0yOS44YzAtNi45IDEuNy0xOC4yIDEwLjgtMTguMnMxMC42IDYuOSAxMC42IDE1bDAgNDguN2MxOCAxMi4yIDM3LjMgMjIuMSA1Ny43IDI5LjZsMC05My45YzAtMTguNy0xMy40LTM3LjQtNDAuNi0zNy40LTE1LjgtLjEtMzAuNSA4LjItMzguNSAyMS45bDAtNTQuM2M0MS45IDIwLjkgODMuOSA0Ni41IDk5LjkgNTguMy0xMC4yIDE0LjYtOS4zIDI4LjEtOS4zIDQzLjcgMCAxOC43LTEuNCAzNC4zIDE2LjggNTIuNXM1MC40IDE3LjEgNTAuNCAxNy4xIDMyLjMgMS4xIDUwLjQtMTcuMWMxOC4yLTE4LjIgMTYuNy0zMy44IDE2LjctNTIuNSAwLTE4LjUgMS41LTM0LjItMTYuNy01Mi4zek02NS4yIDE4NGwwIDYzLjNjLTQ4LjctNTQuNS0zOC45LTc2LTM1LjItNzkuMSAxMy41LTExLjQgMzcuNS04IDY0LjQgMi4xTDY1LjIgMTg0ek0yOTEuNyAzMDQuNWMwIDMuNi0xLjggMTIuNS0xMC43IDEyLjVzLTEwLjctOC45LTEwLjctMTIuNWwwLTQwLjRjMC04LjcgNy4zLTEwLjkgMTAuNy0xMC45czEwLjcgMi4xIDEwLjcgMTAuOWwwIDQwLjR6Il19LEIxZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtZ2l0IixpY29uOls0NDgsNTEyLFsiZ2l0LXNxdWFyZSJdLCJmMWQyIiwiTTEyMC44IDMzNS41Yy01LjktLjQtMTIuNi0uOC0yMC4yLTEuMy0zLjMgNC4xLTYuNiA4LjQtNi42IDEzLjUgMCAxOC41IDY1LjUgMTguNSA2NS41LTEuNSAwLTguMy03LjQtOC43LTM4LjgtMTAuN2wuMSAwem03LjgtMTE3LjljLTMyLjMgMC0zMy43IDQ0LjUtLjcgNDQuNSAzMi41IDAgMzEuNy00NC41IC43LTQ0LjV6TTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0yNDMuOSAxNzIuMmMtMTQuNSAwLTIyLjktOC40LTIyLjktMjIuOXM4LjQtMjIuMyAyMi45LTIyLjNjMTQuNyAwIDIzLjEgNy44IDIzLjEgMjIuM3MtOC40IDIyLjktMjMuMSAyMi45ek0xNDkuNiAxOTVsNDkuNSAwIDAgMjEuNi0yMy40IDEuOGM0LjYgNS44IDkuNCAxNCA5LjQgMjUuNyAwIDQ4LjctNTcuMiA0Ny4yLTc0LjIgNDIuNGwtOC40IDEzLjRjNSAuMyA5LjggLjYgMTQuMyAuOCA1Ni4zIDMuMiA4MC41IDQuNiA4MC41IDM4LjUgMCAyOS4yLTI1LjcgNDUuNy02OS45IDQ1LjctNDYgMC02My41LTExLjYtNjMuNS0zMS43IDAtMTEuNCA1LjEtMTcuNSAxNC0yNS45LTguNC0zLjUtMTEuMi05LjktMTEuMi0xNi44IDAtOS42IDcuNC0xNi4zIDIzLTMwLjZsLjItLjJjLTEyLjQtNi4xLTIxLjgtMTkuMy0yMS44LTM4LjEgMC01MS42IDU2LjYtNTMuMyA4MS42LTQ2LjhsLS4xIC4yek0yNzAuNSAzMDMuMWwxMyAxLjggMCAyMC4xLTcyLjQgMCAwLTIwLjFjMi43LS40IDUtLjcgNi45LS45IDkuOS0xLjIgMTAuMS0xLjMgMTAuMS02bDAtNzQuN2MwLTQuNC0uOS00LjctMTAuMS03LjgtMS45LS43LTQuMi0xLjQtNi45LTIuNGwyLjgtMjAuNiA1Mi42IDAgMCAxMDUuNWMwIDQuMSAuMiA0LjYgNC4xIDUuMWwtLjEgMHptMTA2LjYtMTAuNEwzODQgMzE1Yy0xMC45IDUuNC0yNi45IDEwLjItNDEuNCAxMC4yLTMwLjIgMC00MS43LTEyLjItNDEuNy00MC45bDAtNjYuNmMwLS44IDAtMS40LS4yLTEuOC0uOC0xLjItNC4yLS43LTE5LjYtLjdsMC0yMi42YzIyLjMtMi41IDMxLjItMTMuNyAzNC00MS40bDI0LjIgMGMwIDMzLjMtLjYgMzggLjcgMzguNiAuMyAuMSAuNyAwIDEuMyAwbDM1LjggMCAwIDI1LjQtMzcuOCAwIDAgNjEuNmMtLjIgNi4zLS45IDMwLjQgMzcuOSAxNS45bC0uMSAweiJdfSxjb3Q9QjFlLGRvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJvZG5va2xhc3NuaWtpIixpY29uOlszMjAsNTEyLFtdLCJmMjYzIiwiTTI3NS4xIDMzNGMtMjcuNCAxNy40LTY1LjEgMjQuMy05MCAyNi45bDIwLjkgMjAuNiA3Ni4zIDc2LjNjMjcuOSAyOC42LTE3LjUgNzMuMy00NS43IDQ1LjctMTkuMS0xOS40LTQ3LjEtNDcuNC03Ni4zLTc2LjZMODQgNTAzLjRjLTI4LjIgMjcuNS03My42LTE3LjYtNDUuNC00NS43IDE5LjQtMTkuNCA0Ny4xLTQ3LjQgNzYuMy03Ni4zbDIwLjYtMjAuNmMtMjQuNi0yLjYtNjIuOS05LjEtOTAuNi0yNi45LTMyLjYtMjEtNDYuOS0zMy4zLTM0LjMtNTkgNy40LTE0LjYgMjcuNy0yNi45IDU0LjYtNS43IDAgMCAzNi4zIDI4LjkgOTQuOSAyOC45UzI1NSAyNjkuMiAyNTUgMjY5LjJjMjYuOS0yMS4xIDQ3LjEtOC45IDU0LjYgNS43IDEyLjQgMjUuNy0xLjkgMzgtMzQuNSA1OS4xem0xNC42LTIwNC43YTEyOS43IDEyOS43IDAgMSAxIC0yNTkuNCAuNCAxMjkuNyAxMjkuNyAwIDEgMSAyNTkuNC0uNHptLTE5My40IC40YTYzLjcgNjMuNyAwIDEgMCAxMjcuNC0uNCA2My43IDYzLjcgMCAxIDAgLTEyNy40IC40eiJdfSxmb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZHJ1cGFsIixpY29uOlszODQsNTEyLFtdLCJmMWE5IiwiTTI3Mi4zIDEwOC4xQzIzNi41IDcyLjUgMjAyLjUgMzguNCAxOTIuNCAwIDE4Mi40IDM4LjQgMTQ4LjEgNzIuNSAxMTIuNCAxMDguMSA1OC44IDE2MS43LTEuOSAyMjIuNC0xLjkgMzEzLjQtNC4zIDQyMC43IDgwLjggNTA5LjYgMTg4LjEgNTEyczE5Ni4yLTgyLjggMTk4LjUtMTkwLjFjLjEtMi44IC4xLTUuNiAwLTguNSAwLTkxLjEtNjAuOC0xNTEuNy0xMTQuMy0yMDUuM3pNOTggMzMxLjFjLTUuOSA3LjUtMTEgMTUuNi0xNS4yIDI0LjItLjMgLjctLjggMS4zLTEuMyAxLjhzLTEuMiAuOC0yIDFsLTEuNyAwYy00LjMgMC05LjItOC41LTkuMi04LjUtMS4zLTItMi41LTQuMi0zLjctNi40bC0uOC0xLjhjLTExLjItMjUuNy0xLjUtNjIuMy0xLjUtNjIuMyA0LjgtMTcuOCAxMi43LTM0LjcgMjMuMi00OS45IDYuNC05LjYgMTMuNS0xOC45IDIxLTI3LjdsOS4yIDkuMiA0My41IDQ0LjRjLjggLjkgMS4zIDIuMSAxLjMgMy4zcy0uNSAyLjQtMS4zIDMuM0wxMTQuMSAzMTIuMyA5OCAzMzEuMXptOTYuNiAxMjcuM2MtMTIuOS0uMS0yNS42LTMuOS0zNi40LTExcy0xOS40LTE3LjEtMjQuNi0yOC45LTctMjQuOS01LTM3LjcgNy42LTI0LjcgMTYuMi0zNC40YzE0LjItMTYuOSAzMS41LTMzLjUgNTAuMy01NS4zIDIyLjMgMjMuOCAzNi45IDQwLjEgNTEuMiA1OCAxLjEgMS40IDIuMSAyLjkgMyA0LjQgNy44IDExLjEgMTIgMjQuNCAxMiAzOCAwIDguOC0xLjcgMTcuNC01IDI1LjVzLTguMiAxNS41LTE0LjQgMjEuNy0xMy41IDExLjEtMjEuNiAxNC41LTE2LjcgNS4xLTI1LjUgNS4xbC0uMiAwek0zMjAuNyAzNTEuNmMtLjQgMS40LTEuMiAyLjYtMi4zIDMuNnMtMi40IDEuNi0zLjggMS44bC0xLjMgMGMtMi42LS45LTQuOS0yLjctNi4zLTUuMS0xMS42LTE3LjUtMjQuOS0zMy45LTM5LjUtNDlsLTE3LjgtMTguNC01OS4xLTYxLjNjLTEyLjQtMTEuNS0yNC4yLTIzLjYtMzUuNC0zNi4zLS4zLS41LS42LS45LS45LTEuNC0yLTIuOC0zLjYtNS45LTQuNy05LjJsMC0xLjhjLS44LTUtLjQtMTAuMSAxLjItMTVzNC40LTkuMiA4LTEyLjdjMTEuNC0xMS40IDIzLTIzIDMzLjgtMzQuOSAxMiAxMy4zIDI0LjggMjYgMzcuNCAzOC42IDI1LjggMjQgNDkuMSA1MC41IDY5LjYgNzkuMSAxNy4zIDI0LjUgMjYuNyA1My44IDI3IDgzLjgtLjEgMTIuOS0yLjIgMjUuOC02IDM4LjJ6Il19LHVvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJibG9nZ2VyLWIiLGljb246WzQ0OCw1MTIsW10sImYzN2QiLCJNNDQ2LjYgMjIyLjdjLTEuOC04LTYuOC0xNS40LTEyLjUtMTguNS0xLjgtMS0xMy0yLjItMjUtMi43LTIwLjEtLjktMjIuMy0xLjMtMjguNy01LTEwLjEtNS45LTEyLjgtMTIuMy0xMi45LTI5LjUtLjEtMzMtMTMuOC02My43LTQwLjktOTEuMy0xOS4zLTE5LjctNDAuOS0zMy02NS41LTQwLjUtNS45LTEuOC0xOS4xLTIuNC02My4zLTIuOS02OS40LS44LTg0LjggLjYtMTA4LjQgMTAtNDMuNSAxNy4yLTc0LjcgNTMuOC04Ni4xIDEwMC42LTIuMSA4LjgtMi42IDIyLjktMy4xIDEwMy45LS42IDEwMS41IC4xIDExNi40IDYuNCAxMzYuNSAxNS42IDQ5LjYgNTkuOSA4Ni4zIDEwNC40IDk0LjMgMTQuOCAyLjcgMTk3LjMgMy4zIDIxNiAuOCAzMi41LTQuNCA1OC0xNy41IDgxLjktNDEuOSAxNy4zLTE3LjcgMjguMS0zNi44IDM1LjItNjIuMSA0LjktMTcuNiA0LjUtMTQyLjggMi41LTE1MS43ek0xMjQuNSAxNTkuMWM3LjgtNy45IDEwLTguMiA1OC44LTguMiA0My45IDAgNDUuNCAuMSA1MS44IDMuNCA5LjMgNC43IDEzLjQgMTEuMyAxMy40IDIxLjkgMCA5LjUtMy44IDE2LjItMTIuMyAyMS42LTQuNiAyLjktNy4zIDMuMS01MC4zIDMuMy0yNi41IC4yLTQ3LjctLjQtNTAuOC0xLjItMTYuNi00LjctMjIuOC0yOC41LTEwLjYtNDAuOHpNMzE2LjMgMzU4LjlsLTE0LjkgMi40LTc3LjUgLjljLTY4LjEgLjgtODcuMy0uNC05MC45LTItNy4xLTMuMS0xMy44LTExLjctMTQuOS0xOS40LTEuMS03LjMgMi42LTE3LjMgOC4yLTIyLjQgNy4xLTYuNCAxMC4yLTYuNiA5Ny4zLTYuNyA4OS42LS4xIDg5LjEtLjEgOTcuNiA3LjggMTIuMSAxMS4zIDkuNSAzMS4yLTQuOSAzOS40eiJdfSxwb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaW52aXNpb24iLGljb246WzQ0OCw1MTIsW10sImY3YjAiLCJNNDA3LjQgMzJMNDAuNiAzMkMxOC4yIDMyIDAgNTAuMiAwIDcyLjZMMCA0MzkuNEMwIDQ2MS44IDE4LjIgNDgwIDQwLjYgNDgwbDM2Ni44IDBjMjIuNCAwIDQwLjYtMTguMiA0MC42LTQwLjZsMC0zNjYuOEM0NDggNTAuMiA0MjkuOCAzMiA0MDcuNCAzMnpNMTc2LjEgMTQ1LjZjLjQgMjMuNC0yMi40IDI3LjMtMjYuNiAyNy40LTE0LjkgMC0yNy4xLTEyLTI3LjEtMjcgLjEtMzUuMiA1My4xLTM1LjUgNTMuNy0uNHpNMzMyLjggMzc3Yy02NS42IDAtMzQuMS03NC0yNS0xMDYuNiAxNC4xLTQ2LjQtNDUuMi01OS01OS45IC43bC0yNS44IDEwMy4zLTQ1LjEgMCA4LjEtMzIuNWMtMzEuNSA1MS44LTk0LjYgNDQuNC05NC42LTQuMyAuMS0xNC4zIC45LTE0IDIzLTEwNC4xbC0zMS44IDAgOS43LTM1LjYgNzYuNCAwYy0zMy42IDEzMy43LTMyLjYgMTI2LjktMzIuOSAxMzguMiAwIDIwLjkgNDAuOSAxMy41IDU3LjQtMjMuMmwxOS44LTc5LjQtMzIuMyAwIDkuNy0zNS42IDY4LjggMC04LjkgNDAuNWM0MC41LTc1LjUgMTI3LjktNDcuOCAxMDEuOCAzOC0xNC4yIDUxLjEtMTQuNiA1MC43LTE0LjkgNTguOCAwIDE1LjUgMTcuNSAyMi42IDMxLjgtMTYuOUwzODYgMzI1Yy0xMC41IDM2LjctMjkuNCA1Mi01My4yIDUyeiJdfSxob3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmFjZWJvb2stZiIsaWNvbjpbMzIwLDUxMixbXSwiZjM5ZSIsIk04MCAyOTkuM2wwIDIxMi43IDExNiAwIDAtMjEyLjcgODYuNSAwIDE4LTk3LjgtMTA0LjUgMCAwLTM0LjZjMC01MS43IDIwLjMtNzEuNSA3Mi43LTcxLjUgMTYuMyAwIDI5LjQgLjQgMzcgMS4ybDAtODguN0MyOTEuNCA0IDI1Ni40IDAgMjM2LjIgMCAxMjkuMyAwIDgwIDUwLjUgODAgMTU5LjRsMCA0Mi4xLTY2IDAgMCA5Ny44IDY2IDB6Il19LG1vdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjZW50b3MiLGljb246WzQ0OCw1MTIsW10sImY3ODkiLCJNMjg5LjYgOTcuNWwzMS42IDMxLjctNzYuMyA3Ni41IDAtMTA4LjIgNDQuNyAwek0xMjcuMiAxMjkuMmw3Ni4zIDc2LjUgMC0xMDguMi00NC43IDAtMzEuNiAzMS43em00MS41LTQxLjZsNDQuNyAwIDAgMTI3LjkgMTAuOCAxMC44IDEwLjgtMTAuOCAwLTEyNy45IDQ0LjcgMC01NS41LTU1LjYtNTUuNSA1NS42em0yNi4yIDE2OC4xbC0xMC44LTEwLjgtMTI4LjYgMCAwLTQ0LjgtNTUuNSA1NS42IDU1LjUgNTUuNiAwLTQ0LjggMTI4LjYgMCAxMC44LTEwLjh6TTI3NC4yIDIzNWwxMDcuOSAwIDAtNDQuOC0zMS42LTMxLjctNzYuMyA3Ni41em0xNzMuMyAyMC43bC01NS41LTU1LjYgMCA0NC44LTEyNy43IDAtMTAuOCAxMC44IDEwLjggMTAuOCAxMjcuNyAwIDAgNDQuOCA1NS41LTU1LjZ6TTY1LjQgMTc2LjJsMzIuNS0zMS43IDkwLjMgOTAuNSAxNS4zIDAgMC0xNS4zLTkwLjMtOTAuNSAzMS42LTMxLjctNzkuNCAwIDAgNzguN3pNMzgyLjEgOTcuNWwtNzguNSAwIDMxLjYgMzEuNy05MC4zIDkwLjUgMCAxNS4zIDE1LjMgMCA5MC4zLTkwLjUgMzEuNiAzMS43IDAtNzguN3pNMjAzLjUgNDEzLjlsMC0xMDguMS03Ni4zIDc2LjUgMzEuNiAzMS43IDQ0LjcgMCAwLS4xek02NS40IDIzNWwxMDguOCAwLTc2LjMtNzYuNS0zMi41IDMxLjcgMCA0NC44ek0zODIuMSAzMzUuMmwtMzEuNiAzMS43LTkwLjMtOTAuNS0xNS4zIDAgMCAxNS4zIDkwLjMgOTAuNS0zMS42IDMxLjcgNzguNSAwIDAtNzguN3ptMC01OC44bC0xMDcuOSAwIDc2LjMgNzYuNSAzMS42LTMxLjcgMC00NC44ek0zMjEuMiAzODIuMmwtNzYuMy03Ni41IDAgMTA4LjEgNDQuNyAwIDMxLjYtMzEuNnpNOTcuOSAzNTIuOWw3Ni4zLTc2LjUtMTA4LjggMCAwIDQ0LjggMzIuNSAzMS43em0xODEuOCA3MC45bC00NC43IDAgMC0xMjcuOS0xMC44LTEwLjgtMTAuOCAxMC44IDAgMTI3LjktNDQuNyAwIDU1LjUgNTUuNiA1NS41LTU1LjZ6TTExMy4yIDM4Mi4ybDkwLjMtOTAuNSAwLTE1LjMtMTUuMyAwLTkwLjMgOTAuNS0zMi41LTMxLjcgMCA3OC43IDc5LjQgMC0zMS42LTMxLjd6Il19LGdvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjYy1hbWF6b24tcGF5IixpY29uOls1NzYsNTEyLFtdLCJmNDJkIiwiTTEyNC43IDIwMS44Yy4xLTExLjggMC0yMy41IDAtMzUuM2wwLTM1LjNjMC0xLjMgLjQtMiAxLjQtMi43IDExLjUtOCAyNC4xLTEyLjEgMzguMi0xMS4xIDEyLjUgLjkgMjIuNyA3IDI4LjEgMjEuNyAzLjMgOC45IDQuMSAxOC4yIDQuMSAyNy43IDAgOC43LS43IDE3LjMtMy40IDI1LjYtNS43IDE3LjgtMTguNyAyNC43LTM1LjcgMjMuOS0xMS43LS41LTIxLjktNS0zMS40LTExLjctLjktLjgtMS40LTEuNi0xLjMtMi44em0xNTQuOSAxNC42YzQuNiAxLjggOS4zIDIgMTQuMSAxLjUgMTEuNi0xLjIgMjEuOS01LjcgMzEuMy0xMi41IC45LS42IDEuMy0xLjMgMS4zLTIuNS0uMS0zLjkgMC03LjkgMC0xMS44IDAtNC0uMS04IDAtMTIgMC0xLjQtLjQtMi0xLjgtMi4yLTctLjktMTMuOS0yLjItMjAuOS0yLjktNy0uNi0xNC0uMy0yMC44IDEuOS02LjcgMi4yLTExLjcgNi4yLTEzLjcgMTMuMS0xLjYgNS40LTEuNiAxMC44IC4xIDE2LjIgMS42IDUuNSA1LjIgOS4yIDEwLjQgMTEuMnpNNTc2IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmw0ODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMzY4LjUgMTAzLjljLjQgMS43IC45IDMuNCAxLjYgNS4xIDE2LjUgNDAuNiAzMi45IDgxLjMgNDkuNSAxMjEuOSAxLjQgMy41IDEuNyA2LjQgLjIgOS45LTIuOCA2LjItNC45IDEyLjYtNy44IDE4LjctMi42IDUuNS02LjcgOS41LTEyLjcgMTEuMi00LjIgMS4xLTguNSAxLjMtMTIuOSAuOS0yLjEtLjItNC4yLS43LTYuMy0uOC0yLjgtLjItNC4yIDEuMS00LjMgNC0uMSAyLjgtLjEgNS42IDAgOC4zIC4xIDQuNiAxLjYgNi43IDYuMiA3LjUgNC43IC44IDkuNCAxLjYgMTQuMiAxLjcgMTQuMyAuMyAyNS43LTUuNCAzMy4xLTE3LjkgMi45LTQuOSA1LjYtMTAuMSA3LjctMTUuNCAxOS44LTUwLjEgMzkuNS0xMDAuMyA1OS4yLTE1MC41IC42LTEuNSAxLjEtMyAxLjMtNC42IC40LTIuNC0uNy0zLjYtMy4xLTMuNy01LjYtLjEtMTEuMSAwLTE2LjcgMC0zLjEgMC01LjMgMS40LTYuNCA0LjMtLjQgMS4xLS45IDIuMy0xLjMgMy40bC0yOS4xIDgzLjdjLTIuMSA2LjEtNC4yIDEyLjEtNi41IDE4LjYtLjQtLjktLjYtMS40LS44LTEuOS0xMC44LTI5LjktMjEuNi01OS45LTMyLjQtODkuOC0xLjctNC43LTMuNS05LjUtNS4zLTE0LjItLjktMi41LTIuNy00LTUuNC00LTYuNC0uMS0xMi44LS4yLTE5LjItLjEtMi4yIDAtMy4zIDEuNi0yLjggMy43ek0yNDIuNCAyMDZjMS43IDExLjcgNy42IDIwLjggMTggMjYuNiA5LjkgNS41IDIwLjcgNi4yIDMxLjcgNC42IDEyLjctMS45IDIzLjktNy4zIDMzLjgtMTUuNSAuNC0uMyAuOC0uNiAxLjQtMSAuNSAzLjIgLjkgNi4yIDEuNSA5LjIgLjUgMi42IDIuMSA0LjMgNC41IDQuNCA0LjYgLjEgOS4xIC4xIDEzLjcgMCAyLjMtLjEgMy44LTEuNiA0LTMuOSAuMS0uOCAuMS0xLjYgLjEtMi4zbDAtODguOGMwLTMuNi0uMi03LjItLjctMTAuOC0xLjYtMTAuOC02LjItMTkuNy0xNS45LTI1LjQtNS42LTMuMy0xMS44LTUtMTguMi01LjktMy0uNC02LS43LTkuMS0xLjFsLTEwIDBjLS44IC4xLTEuNiAuMy0yLjUgLjMtOC4yIC40LTE2LjMgMS40LTI0LjIgMy41LTUuMSAxLjMtMTAgMy4yLTE1IDQuOS0zIDEtNC41IDMuMi00LjQgNi41IC4xIDIuOC0uMSA1LjYgMCA4LjMgLjEgNC4xIDEuOCA1LjIgNS43IDQuMSA2LjUtMS43IDEzLjEtMy41IDE5LjctNC44IDEwLjMtMS45IDIwLjctMi43IDMxLjEtMS4yIDUuNCAuOCAxMC41IDIuNCAxNC4xIDcgMy4xIDQgNC4yIDguOCA0LjQgMTMuNyAuMyA2LjkgLjIgMTMuOSAuMyAyMC44IDAgLjQtLjEgLjctLjIgMS4yLS40IDAtLjggMC0xLjEtLjEtOC44LTIuMS0xNy43LTMuNi0yNi44LTQuMS05LjUtLjUtMTguOSAuMS0yNy45IDMuMi0xMC44IDMuOC0xOS41IDEwLjMtMjQuNiAyMC44LTQuMSA4LjMtNC42IDE3LTMuNCAyNS44ek05OC43IDEwNi45bDAgMTc1LjNjMCAuOCAwIDEuNyAuMSAyLjUgLjIgMi41IDEuNyA0LjEgNC4xIDQuMiA1LjkgLjEgMTEuOCAuMSAxNy43IDAgMi41IDAgNC0xLjcgNC4xLTQuMSAuMS0uOCAuMS0xLjcgLjEtMi41bDAtNjAuN2MuOSAuNyAxLjQgMS4yIDEuOSAxLjYgMTUgMTIuNSAzMi4yIDE2LjYgNTEuMSAxMi45IDE3LjEtMy40IDI4LjktMTMuOSAzNi43LTI5LjIgNS44LTExLjYgOC4zLTI0LjEgOC43LTM3IC41LTE0LjMtMS0yOC40LTYuOC00MS43LTcuMS0xNi40LTE4LjktMjcuMy0zNi43LTMwLjktMi43LS42LTUuNS0uOC04LjItMS4ybC03IDBjLTEuMiAuMi0yLjQgLjMtMy42IC41LTExLjcgMS40LTIyLjMgNS44LTMxLjggMTIuNy0yIDEuNC0zLjkgMy01LjkgNC41LS4xLS41LS4zLS44LS40LTEuMi0uNC0yLjMtLjctNC42LTEuMS02LjktLjYtMy45LTIuNS01LjUtNi40LTUuNmwtOS43IDBjLTUuOS0uMS02LjkgMS02LjkgNi44ek00OTMuNiAzMzljLTIuNy0uNy01LjEgMC03LjYgMS00My45IDE4LjQtODkuNSAzMC4yLTEzNi44IDM1LjgtMTQuNSAxLjctMjkuMSAyLjgtNDMuNyAzLjItMjYuNiAuNy01My4yLS44LTc5LjYtNC4zLTE3LjgtMi40LTM1LjUtNS43LTUzLTkuOS0zNy04LjktNzIuNy0yMS43LTEwNi43LTM4LjgtOC44LTQuNC0xNy40LTkuMy0yNi4xLTE0LTMuOC0yLjEtNi4yLTEuNS04LjIgMi4xbDAgMS43YzEuMiAxLjYgMi4yIDMuNCAzLjcgNC44IDM2IDMyLjIgNzYuNiA1Ni41IDEyMiA3Mi45IDIxLjkgNy45IDQ0LjQgMTMuNyA2Ny4zIDE3LjUgMTQgMi4zIDI4IDMuOCA0Mi4yIDQuNSAzIC4xIDYgLjIgOSAuNCAuNyAwIDEuNCAuMiAyLjEgLjNsMTcuNyAwYy43LS4xIDEuNC0uMyAyLjEtLjMgMTQuOS0uNCAyOS44LTEuOCA0NC42LTQgMjEuNC0zLjIgNDIuNC04LjEgNjIuOS0xNC43IDI5LjYtOS42IDU3LjctMjIuNCA4My40LTQwLjEgMi44LTEuOSA1LjctMy44IDgtNi4yIDQuMy00LjQgMi4zLTEwLjQtMy4zLTExLjl6TTU0NCAzMTEuM2MtLjgtNC4yLTQtNS44LTcuNi03LTUuNy0xLjktMTEuNi0yLjgtMTcuNi0zLjMtMTEtLjktMjItLjQtMzIuOCAxLjYtMTIgMi4yLTIzLjQgNi4xLTMzLjUgMTMuMS0xLjIgLjgtMi40IDEuOC0zLjEgMy0uNiAuOS0uNyAyLjMtLjUgMy40IC4zIDEuMyAxLjcgMS42IDMgMS41IC42IDAgMS4yIDAgMS44LS4xbDE5LjUtMi4xYzkuNi0uOSAxOS4yLTEuNSAyOC44LS44IDQuMSAuMyA4LjEgMS4yIDEyIDIuMiA0LjMgMS4xIDYuMiA0LjQgNi40IDguNyAuMyA2LjctMS4yIDEzLjEtMi45IDE5LjUtMy41IDEyLjktOC4zIDI1LjQtMTMuMyAzNy44LS4zIC44LS43IDEuNy0uOCAyLjUtLjQgMi41IDEgNCAzLjQgMy41IDEuNC0uMyAzLTEuMSA0LTIuMSAzLjctMy42IDcuNS03LjIgMTAuNi0xMS4yIDEwLjctMTMuOCAxNy0yOS42IDIwLjctNDYuNiAuNy0zIDEuMi02LjEgMS43LTkuMSAuMi00LjcgLjItOS42IC4yLTE0LjV6Il19LHhvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJlYmF5IixpY29uOls2NDAsNTEyLFtdLCJmNGY0IiwiTTYwNi41IDE4OS41bC01NC44IDEwOS45LTU0LjktMTA5LjktMzcuNSAwIDEwLjkgMjAuNmMtMTEuNS0xOS0zNS45LTI2LTYzLjMtMjYtMzEuOCAwLTY3LjkgOC43LTcxLjUgNDMuMWwzMy43IDBjMS40LTEzLjggMTUuNy0yMS44IDM1LTIxLjggMjYgMCA0MSA5LjYgNDEgMzNsMCAzLjRjLTEyLjcgMC0yOCAuMS00MS43IC40LTQyLjQgLjktNjkuNiAxMC03Ni43IDM0LjQgMS01LjIgMS41LTEwLjYgMS41LTE2LjIgMC01Mi4xLTM5LjctNzYuMi03NS40LTc2LjItMjEuMyAwLTQzIDUuNS01OC43IDI0LjJsMC04MC42LTMyLjEgMCAwIDE2OS41YzAgMTAuMy0uNiAyMi45LTEuMSAzMy4xbDMxLjUgMGMuNy02LjMgMS4xLTEyLjkgMS4xLTE5LjUgMTMuNiAxNi42IDM1LjQgMjQuOSA1OC43IDI0LjkgMzYuOSAwIDY0LjktMjEuOSA3My4zLTU0LjItLjUgMi44LS43IDUuOC0uNyA5IDAgMjQuMSAyMS4xIDQ1IDYwLjYgNDUgMjYuNiAwIDQ1LjgtNS43IDYxLjktMjUuNSAwIDYuNiAuMyAxMy4zIDEuMSAyMC4ybDI5LjggMGMtLjctOC4yLTEtMTcuNS0xLTI2LjhsMC02NS42YzAtOS4zLTEuNy0xNy4yLTQuOC0yMy44bDYxLjUgMTE2LjEtMjguNSA1NC4xIDM1LjkgMCA5OS4yLTE5NC44LTM0IDB6TTI0NC4yIDMxMy44Yy0yOS42IDAtNTAuMi0yMS41LTUwLjItNTMuOCAwLTMyLjQgMjAuNi01My44IDUwLjItNTMuOCAyOS44IDAgNTAuMiAyMS40IDUwLjIgNTMuOCAwIDMyLjMtMjAuNCA1My44LTUwLjIgNTMuOHptMjAwLjktNDcuM2MwIDMwLTE3LjkgNDguNC01MS42IDQ4LjQtMjUuMSAwLTM1LTEzLjQtMzUtMjUuOCAwLTE5LjEgMTguMS0yNC40IDQ3LjItMjUuMyAxMy4xLS41IDI3LjYtLjYgMzkuNC0uNmwwIDMuM3pNMzMuMiAyNjguMWwxMjguOCAwIDAtOC41YzAtNTEuNy0zMy4xLTc1LjQtNzguNC03NS40LTU2LjggMC04MyAzMC44LTgzIDc3LjYgMCA0Mi41IDI1LjMgNzQgODIuNSA3NCAzMS40IDAgNjgtMTEuNyA3NC40LTQ2LjFsLTMzLjEgMGMtMTIgMzUuOC04Ny43IDM2LjctOTEuMi0yMS42em05NS0yMS40bC05NC40IDBjNi45LTU2LjYgOTIuMS01NC43IDk0LjQgMHoiXX0sYm90PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNvbnRhbyIsaWNvbjpbNTEyLDUxMixbXSwiZjI2ZCIsIk00NS40IDMwNWMxNC40IDY3LjEgMjYuNCAxMjkgNjguMiAxNzVMMzQgNDgwYy0xOC43IDAtMzQtMTUuMi0zNC0zNEwwIDY2QzAgNDcuMyAxNS4yIDMyIDM0IDMybDU3LjcgMGMtMTMuOCAxMi42LTI2LjEgMjcuMi0zNi45IDQzLjYtNDUuNCA3MC0yNyAxNDYuOC05LjQgMjI5LjR6TTQ3OCAzMmwtOTAuMiAwYzIxLjQgMjEuNCAzOS4yIDQ5LjUgNTIuNyA4NC4xTDMwMy40IDE0NS40Yy0xNC45LTI5LTM3LjgtNTMuMy04Mi42LTQzLjktMjQuNiA1LjMtNDEgMTkuMy00OC4zIDM0LjYtOC44IDE4LjctMTMuMiAzOS44IDguMiAxNDAuMyAyMS4xIDEwMC4yIDMzLjcgMTE3LjcgNDkuNSAxMzEuMiAxMi45IDExLjEgMzMuNCAxNyA1OC4zIDExLjcgNDQuNS05LjQgNTUuNy00MC43IDU3LjQtNzMuMmwxMzcuNC0yOS42YzMuMiA3MS41LTE4LjcgMTI1LjItNTcuNCAxNjMuNmw1Mi4xIDBjMTguNyAwIDM0LTE1LjIgMzQtMzRMNTEyIDY2YzAtMTguOC0xNS4yLTM0LTM0LTM0eiJdfSx2b3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZWxsbyIsaWNvbjpbNTEyLDUxMixbXSwiZjVmMSIsIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTM5OS44IDI5My4yQzM4My4zIDM1OC41IDMyMy44IDQwNC44IDI1NiA0MDQuOFMxMjguNyAzNTguNSAxMTIuMiAyOTMuMmMtMS42LTcuNCAyLjUtMTUuNyA5LjktMTcuNHMxNS43IDIuNSAxNy40IDkuOWMxNCA1Mi45IDYyIDkwLjEgMTE2LjYgOTAuMXMxMDIuNS0zNy4yIDExNi42LTkwLjFjMS43LTcuNCA5LjktMTIuNCAxNy40LTkuOSA3LjQgMS43IDEyLjQgOS45IDkuOSAxNy40eiJdfSx5b3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2lzdHJpeCIsaWNvbjpbNDQ4LDUxMixbXSwiZjNlZSIsIk00NDggNDQ5TDMwMS4yIDMwMC4yYzIwLTI3LjkgMzEuOS02Mi4yIDMxLjktOTkuMiAwLTkzLjEtNzQuNy0xNjguOS0xNjYuNS0xNjguOS05MS45LS4xLTE2Ni42IDc1LjctMTY2LjYgMTY4LjhTNzQuNyAzNjkuOCAxNjYuNSAzNjkuOGMzOS44IDAgNzYuMy0xNC4yIDEwNS0zNy45TDQxNy41IDQ4MCA0NDggNDQ5ek0xNjYuNSAzMzAuOGMtNzAuNiAwLTEyOC4xLTU4LjMtMTI4LjEtMTI5LjlTOTUuOSA3MSAxNjYuNSA3MSAyOTQuNiAxMjkuMyAyOTQuNiAyMDAuOSAyMzcuMiAzMzAuOCAxNjYuNSAzMzAuOHoiXX0sd290PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBlcmlzY29wZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjNkYSIsIk0zNzAgNjMuNmMtMzguNi00MS04OS41LTYzLjYtMTQzLjQtNjMuNi0xMTQuNyAwLTIwOC4xIDk2LjItMjA4LjEgMjE0LjQgMCA3NS4xIDU3LjggMTU5LjggODIuNyAxOTIuNyAzNi42IDQ4LjQgOTEuNCAxMDQuOSAxMjUuNCAxMDQuOSA0MS42IDAgMTEyLjktOTQuMiAxMjAuOS0xMDUgMjQuNi0zMy4xIDgyLTExOC4zIDgyLTE5Mi42IDAtNTYuNS0yMS4xLTExMC4xLTU5LjUtMTUwLjh6TTIyNi42IDQ5My45Yy00Mi41IDAtMTkwLTE2Ny4zLTE5MC0yNzkuNCAwLTEwNy40IDgzLjktMTk2LjMgMTkwLTE5Ni4zIDEwMC44IDAgMTg0LjcgODkgMTg0LjcgMTk2LjMgLjEgMTEyLjEtMTQ3LjQgMjc5LjQtMTg0LjcgMjc5LjR6TTMzOCAyMDYuOGMwIDU5LjEtNTEuMSAxMDkuNy0xMTAuOCAxMDkuNy0xMDAuNiAwLTE1MC43LTEwOC4yLTkyLjktMTgxLjhsMCAuNGMwIDI0LjUgMjAuMSA0NC40IDQ0LjggNDQuNHM0NC44LTE5LjkgNDQuOC00NC40YzAtMTguMi0xMS4xLTMzLjgtMjYuOS00MC43IDc2LjYtMTkuMiAxNDEgMzkuMyAxNDEgMTEyLjR6Il19LE1vdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJleHBlZGl0ZWRzc2wiLGljb246WzUxMiw1MTIsW10sImYyM2UiLCJNMjU2IDQzLjRhMjEyLjYgMjEyLjYgMCAxIDAgMCA0MjUuMiAyMTIuNiAyMTIuNiAwIDEgMCAwLTQyNS4yek0xNTguNiAxNzYuM2MwLTUzLjcgNDMuNy05Ny40IDk3LjQtOTcuNHM5Ny40IDQzLjcgOTcuNCA5Ny40bDAgMjYuNmMwIDUtMy45IDguOS04LjkgOC45bC0xNy43IDBjLTUgMC04LjktMy45LTguOS04LjlsMC0yNi42YzAtODIuMS0xMjQtODIuMS0xMjQgMGwwIDI2LjZjMCA1LTMuOSA4LjktOC45IDguOWwtMTcuNyAwYy01IDAtOC45LTMuOS04LjktOC45bDAtMjYuNiAuMiAwek0zOTcuNyAzODBjMCA5LjctOCAxNy43LTE3LjcgMTcuN2wtMjQ4IDBjLTkuNyAwLTE3LjctOC0xNy43LTE3LjdsMC0xNDEuN2MwLTkuNyA4LTE3LjcgMTcuNy0xNy43bDI0OCAwYzkuNyAwIDE3LjcgOCAxNy43IDE3LjdsMCAxNDEuN3ptLTI0OC0xMzcuM2wwIDEzMi45YzAgMi41LTEuOSA0LjQtNC40IDQuNGwtOC45IDBjLTIuNSAwLTQuNC0xLjktNC40LTQuNGwwLTEzMi45YzAtMi41IDEuOS00LjQgNC40LTQuNGw4LjkgMGMyLjUgMCA0LjQgMS45IDQuNCA0LjR6bTE0MS43IDQ4LjdjMCAxMy03LjIgMjQuNC0xNy43IDMwLjRsMCAzMS42YzAgNS0zLjkgOC45LTguOSA4LjlsLTE3LjcgMGMtNSAwLTguOS0zLjktOC45LTguOWwwLTMxLjZjLTEwLjUtNi4xLTE3LjctMTcuNC0xNy43LTMwLjQgMC0xOS43IDE1LjgtMzUuNCAzNS40LTM1LjRzMzUuNSAxNS44IDM1LjUgMzUuNHpNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2em0wIDE3LjdhMjMwLjMgMjMwLjMgMCAxIDEgMCA0NjAuNiAyMzAuMyAyMzAuMyAwIDEgMSAwLTQ2MC42eiJdfSx6b3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibmFwc3RlciIsaWNvbjpbNTEyLDUxMixbXSwiZjNkMiIsIk0zMDYuMyAzNzMuNmMtMTQuMiAxMy42LTMxLjMgMjQuMS01MC40IDMwLjUtMTktNi40LTM2LjItMTYuOS01MC4zLTMwLjVsMTAwLjcgMHptNDQtMTk5LjZjMjAtMTYuOSA0My42LTI5LjIgNjkuNi0zNi4ybDAgMTYxLjJjMCAyMTkuNC0zMjggMjE3LjYtMzI4IC4zbDAtMTYxLjZjMjUuOSA2LjkgNDkuNiAxOS42IDY5LjUgMzYuNCA1Ni44LTQwIDEzMi41LTM5LjkgMTg4LjktLjF6TTE0MS41IDExNS41YzY0LjQtNjAgMTY0LjMtNjAuMSAyMjguOS0uMi03LjEgMy41LTEzLjkgNy4zLTIwLjYgMTEuNS01OC43LTMwLjUtMTI5LjItMzAuNC0xODcuOSAuMS02LjMtNC0xMy45LTguMi0yMC40LTExLjR6TTUxLjggOTMuMmwwIDY5LjNjLTU4LjQgMzYuNS01OC40IDEyMS4xIC4xIDE1OC4zIDI2LjQgMjQ1LjEgMzgxLjcgMjQwLjMgNDA3LjYgMS41bC4zLTEuN2M1OC43LTM2LjMgNTguOS0xMjEuNyAuMi0xNTguMmwwLTY5LjJjLTE3LjMgLjUtMzQgMy01MC4xIDcuNC04Mi05MS41LTIyNS41LTkxLjUtMzA3LjUgLjEtMTYuMy00LjQtMzMuMS03LTUwLjYtNy41ek0yNjcuMiAzNTJzMzYtLjMgNjEuMy0xLjVjMTAuMi0uNSAyMS4xLTQgMjUuNS02LjUgMjYuMy0xNS4xIDI1LjQtMzkuMiAyNi4yLTQ3LjQtNzkuNS0uNi05OS45LTMuOS0xMTMgNTUuNHpNMTMxLjcgMjk2LjdjLjggOC4yLS4xIDMyLjMgMjYuMiA0Ny40IDQuNCAyLjUgMTUuMiA2IDI1LjUgNi41IDI1LjMgMS4xIDYxLjMgMS41IDYxLjMgMS41LTEzLjItNTkuNC0zMy43LTU2LjEtMTEzLTU1LjR6TTMwMC44IDQyMC4xYy0zLjItNS4zLTYuOS03LjMtNi45LTcuMy0yNC44IDcuMy01Mi4yIDYuOS03NS45IDAgMCAwLTIuOSAxLjUtNi40IDYuNi0yLjggNC4xLTMuNyA5LjYtMy43IDkuNiAyOS4xIDE3LjYgNjcuMSAxNy42IDk2LjIgMC0uMS0uMS0uMy00LTMuMy04Ljl6Il19LGtvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkZWxpY2lvdXMiLGljb246WzQ0OCw1MTIsW10sImYxYTUiLCJNNDQ2LjYgNjhjLS40LTEuNS0uOS0zLTEuNC00LjUtLjktMi41LTItNC44LTMuMy03LjEtMS40LTIuNC0zLTQuOC00LjctNi45LTIuMS0yLjUtNC40LTQuOC02LjktNi44LTEuMS0uOS0yLjItMS43LTMuMy0yLjUtMS4zLS45LTIuNi0xLjctNC0yLjQtMS44LTEtMy42LTEuOC01LjUtMi41LTEuNy0uNy0zLjUtMS4zLTUuNC0xLjctMy44LTEtNy45LTEuNS0xMi0xLjVsLTM1MiAwQzIxLjYgMzIgLjEgNTMuNSAuMSA4MGwwIDM1MmMwIDQuMSAuNSA4LjIgMS41IDEyIDIgNy43IDUuOCAxNC42IDExIDIwLjMgMSAxLjEgMi4xIDIuMiAzLjMgMy4zIDUuNyA1LjIgMTIuNiA5IDIwLjMgMTEgMy44IDEgNy45IDEuNSAxMiAxLjVsMzUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTIuMWMtLjEtNC4xLS42LTguMi0xLjYtMTJ6TTQxNi4xIDQzMmMwIDguOC03LjIgMTYtMTYgMTZsLTE3NiAwIDAtMTkyLTE5MiAwIDAtMTc2YzAtOC44IDcuMi0xNiAxNi0xNmwxNzYgMCAwIDE5MiAxOTIgMCAwIDE3NnoiXX0sU290PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imd1aWxkZWQiLGljb246WzQ0OCw1MTIsW10sImUwN2UiLCJNNDQzLjkgNjRMNSA2NGMwIDEwMy4zIDIyLjIgMTgwLjEgNDMuNCAyMjIuNCA2NC4xIDEyNy44IDE3NiAxNjEuNiAxNzcuMyAxNjEuNiA1NS43LTIwLjUgMTA0LjUtNTYuMyAxNDAuNi0xMDMuNSAyNS45LTMzLjkgNTMuMS04Ny4yIDY1LjktMTQ1LjhsLTI1OS45IDBjNC4xIDM2LjQgMjIuMiA2Ny45IDQ1LjEgODYuOWw4OC42IDBjLTE3IDI4LjItNDguMiA1NC40LTgwLjUgNjkuNS0zMS4yLTEzLjMtNjkuMS00Ni41LTk2LjUtOTguNC0yNi43LTUzLjgtMjcuMS0xMDUuOS0yNy4xLTEwNS45bDMzNi4xIDBjNC0yOC44IDUuOS01Ny45IDUuOS04Ni45eiJdfSxDb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToieGJveCIsaWNvbjpbNTEyLDUxMixbXSwiZjQxMiIsIk0zNjkuOSAzMTguMmM0NC4zIDU0LjMgNjQuNyA5OC44IDU0LjQgMTE4LjctNy45IDE1LjEtNTYuNyA0NC42LTkyLjYgNTUuOS0yOS42IDkuMy02OC40IDEzLjMtMTAwLjQgMTAuMi0zOC4yLTMuNy03Ni45LTE3LjQtMTEwLjEtMzktMjcuOS0xOC4yLTM0LjItMjUuNy0zNC4yLTQwLjYgMC0yOS45IDMyLjktODIuMyA4OS4yLTE0Mi4xIDMyLTMzLjkgNzYuNS03My43IDgxLjQtNzIuNiA5LjQgMi4xIDg0LjMgNzUuMSAxMTIuMyAxMDkuNXpNMTg4LjYgMTQzLjhjLTI5LjctMjYuOS01OC4xLTUzLjktODYuNC02My40LTE1LjItNS4xLTE2LjMtNC44LTI4LjcgOC4xLTI5LjIgMzAuNC01My41IDc5LjctNjAuMyAxMjIuNC01LjQgMzQuMi02LjEgNDMuOC00LjIgNjAuNSA1LjYgNTAuNSAxNy4zIDg1LjQgNDAuNSAxMjAuOSA5LjUgMTQuNiAxMi4xIDE3LjMgOS4zIDkuOS00LjItMTEtLjMtMzcuNSA5LjUtNjQgMTQuMy0zOSA1My45LTExMi45IDEyMC4zLTE5NC40em0zMTEuNiA2My41Yy0xNi45LTgwLTY3LjUtMTMwLjMtNzQuNi0xMzAuMy03LjMgMC0yNC4yIDYuNS0zNiAxMy45LTIzLjMgMTQuNS00MSAzMS40LTY0LjMgNTIuOCA0Mi40IDUzLjMgMTAyLjIgMTM5LjQgMTIyLjkgMjAyLjMgNi44IDIwLjcgOS43IDQxLjEgNy40IDUyLjMtMS43IDguNS0xLjcgOC41IDEuNCA0LjYgNi4xLTcuNyAxOS45LTMxLjMgMjUuNC00My41IDcuNC0xNi4yIDE1LTQwLjIgMTguNi01OC43IDQuMy0yMi41IDMuOS03MC44LS44LTkzLjR6TTE0MS4zIDQzYzQ3LjctMi41IDEwOS43IDM0LjUgMTE0LjMgMzUuNCAuNyAuMSAxMC40LTQuMiAyMS42LTkuNyA2My45LTMxLjEgOTQtMjUuOCAxMDcuNC0yNS4yLTYzLjktMzkuMy0xNTIuNy01MC0yMzMuOS0xMS43LTIzLjQgMTEuMS0yNCAxMS45LTkuNCAxMS4yeiJdfSxMb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidW50YXBwZCIsaWNvbjpbNjQwLDUxMixbXSwiZjQwNSIsIk00MDEuNSA0OS45QzMyMS43IDIxMCAzMTYuOSAyMDIuNCAzMTMuNiAyMjMuMWwtNS4yIDMyLjhjLTEuOSAxMi02LjYgMjMuNS0xMy43IDMzLjRMMTQ1LjggNDk3LjFjLTcuNiAxMC42LTIwLjQgMTYuMi0zMy40IDE0LjYtNDAuMy01LTc3LjgtMzIuMi05NS4zLTY4LjUtNS43LTExLjgtNC41LTI1LjggMy4xLTM2LjRMMTY5LjEgMTk4LjljNy4xLTkuOSAxNi40LTE4IDI3LjItMjMuN2wyOS4zLTE1LjVjMTguNS05LjggOS43LTExLjkgMTM1LjYtMTM4LjkgMS00LjggMS03LjMgMy42LTggMy0uNyA2LjYtMSA2LjMtNC42bC0uNC00LjZjLS4yLTEuOSAxLjMtMy42IDMuMi0zLjYgNC41LS4xIDEzLjIgMS4yIDI1LjYgMTAgMTIuMyA4LjkgMTYuNCAxNi44IDE3LjcgMjEuMSAuNiAxLjgtLjYgMy43LTIuNCA0LjJsLTQuNSAxLjFjLTMuNCAuOS0yLjUgNC40LTIuMyA3LjQgLjEgMi44LTIuMyAzLjYtNi41IDYuMXpNMjMwLjMgMzYuNGMzLjQgLjkgMi41IDQuNCAyLjMgNy40LS4yIDIuNyAyLjEgMy41IDYuNCA2IDcuOSAxNS45IDE1LjMgMzAuNSAyMi4yIDQ0IC43IDEuMyAyLjMgMS41IDMuMyAuNSAxMS4yLTEyIDI0LjYtMjYuMiA0MC41LTQyLjYgMS4zLTEuNCAxLjQtMy41IC4xLTQuOS04LTguMi0xNi41LTE2LjktMjUuNi0yNi4xLTEtNC43LTEtNy4zLTMuNi04LTMtLjgtNi42LTEtNi4zLTQuNiAuMy0zLjMgMS40LTguMS0yLjgtOC4yLTQuNS0uMS0xMy4yIDEuMS0yNS42IDEwLTEyLjMgOC45LTE2LjQgMTYuOC0xNy43IDIxLjEtMS40IDQuMiAzLjYgNC42IDYuOCA1LjR6TTYyMC4yIDQwNi43TDQ3MS40IDE5OC44Yy0xMy4yLTE4LjUtMjYuNi0yMy40LTU2LjQtMzkuMS0xMS4yLTUuOS0xNC4yLTEwLjktMzAuNS0yOC45LTEtMS4xLTIuOS0uOS0zLjYgLjUtNDYuMyA4OC44LTQ3LjEgODIuOC00OSA5NC44LTEuNyAxMC43LTEuMyAyMCAuMyAyOS44IDEuOSAxMiA2LjYgMjMuNSAxMy43IDMzLjRMNDk0LjggNDk3LjJjNy42IDEwLjYgMjAuMiAxNi4yIDMzLjEgMTQuNyA0MC4zLTQuOSA3OC0zMiA5NS43LTY4LjYgNS40LTExLjkgNC4zLTI1LjktMy40LTM2LjZ6Il19LFRvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnb29nbGUtcGx1cy1nIixpY29uOls2NDAsNTEyLFtdLCJmMGQ1IiwiTTM4Ni4zIDIyOC41YzEuOCA5LjcgMy4xIDE5LjQgMy4xIDMyIDAgMTA5LjgtNzMuNiAxODcuNS0xODQuNCAxODcuNS0xMDYuMSAwLTE5Mi04NS45LTE5Mi0xOTJTOTguOSA2NCAyMDUgNjRjNTEuOSAwIDk1LjEgMTguOSAxMjguNiA1MC4zbC01Mi4xIDUwYy0xNC4xLTEzLjYtMzktMjkuNi03Ni41LTI5LjYtNjUuNSAwLTExOC45IDU0LjItMTE4LjkgMTIxLjNTMTM5LjUgMzc3LjMgMjA1IDM3Ny4zYzc2IDAgMTA0LjUtNTQuNyAxMDktODIuOGwtMTA5IDAgMC02NiAxODEuMyAwIDAgMHptMTg1LjQgNi40bDAtNTUuNy01NiAwIDAgNTUuNy01NS43IDAgMCA1NiA1NS43IDAgMCA1NS43IDU2IDAgMC01NS43IDU1LjcgMCAwLTU2LTU1LjcgMHoiXX0sX290PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdpdGh1Yi1hbHQiLGljb246WzUxMiw1MTIsW10sImYxMTMiLCJNMjAyLjEgMzI4LjdjMCAyMC45LTEwLjkgNTUuMS0zNi43IDU1LjFzLTM2LjctMzQuMi0zNi43LTU1LjEgMTAuOS01NS4xIDM2LjctNTUuMSAzNi43IDM0LjIgMzYuNyA1NS4xek00OTYgMjc4LjJjMCAzMS45LTMuMiA2NS43LTE3LjUgOTUtMzcuOSA3Ni42LTE0Mi4xIDc0LjgtMjE2LjcgNzQuOC03NS44IDAtMTg2LjIgMi43LTIyNS42LTc0LjgtMTQuNi0yOS0yMC4yLTYzLjEtMjAuMi05NSAwLTQxLjkgMTMuOS04MS41IDQxLjUtMTEzLjYtNS4yLTE1LjgtNy43LTMyLjQtNy43LTQ4LjggMC0yMS41IDQuOS0zMi4zIDE0LjYtNTEuOCA0NS4zIDAgNzQuMyA5IDEwOC44IDM2IDI5LTYuOSA1OC44LTEwIDg4LjctMTAgMjcgMCA1NC4yIDIuOSA4MC40IDkuMiAzNC0yNi43IDYzLTM1LjIgMTA3LjgtMzUuMiA5LjggMTkuNSAxNC42IDMwLjMgMTQuNiA1MS44IDAgMTYuNC0yLjYgMzIuNy03LjcgNDguMiAyNy41IDMyLjQgMzkgNzIuMyAzOSAxMTQuMnptLTY0LjMgNTAuNWMwLTQzLjktMjYuNy04Mi42LTczLjUtODIuNi0xOC45IDAtMzcgMy40LTU2IDYtMTQuOSAyLjMtMjkuOCAzLjItNDUuMSAzLjItMTUuMiAwLTMwLjEtLjktNDUuMS0zLjItMTguNy0yLjYtMzctNi01Ni02LTQ2LjggMC03My41IDM4LjctNzMuNSA4Mi42IDAgODcuOCA4MC40IDEwMS4zIDE1MC40IDEwMS4zbDQ4LjIgMGM3MC4zIDAgMTUwLjYtMTMuNCAxNTAuNi0xMDEuM3ptLTgyLjYtNTUuMWMtMjUuOCAwLTM2LjcgMzQuMi0zNi43IDU1LjFzMTAuOSA1NS4xIDM2LjcgNTUuMSAzNi43LTM0LjIgMzYuNy01NS4xLTEwLjktNTUuMS0zNi43LTU1LjF6Il19LEFvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnZXQtcG9ja2V0IixpY29uOls0NDgsNTEyLFtdLCJmMjY1IiwiTTQwNy42IDY0bC0zNjcgMEMxOC41IDY0IDAgODIuNSAwIDEwNC42TDAgMjM5LjhDMCAzNjQuNSA5OS43IDQ2NCAyMjQuMiA0NjQgMzQ4LjIgNDY0IDQ0OCAzNjQuNSA0NDggMjM5LjhsMC0xMzUuMkM0NDggODIuMiA0MzAuMyA2NCA0MDcuNiA2NHptLTE2MiAyNjguNWMtMTIuNCAxMS44LTMxLjQgMTEuMS00Mi40IDAtMTEzLjctMTA4LjktMTE0LjktMTA1LjEtMTE0LjktMTIzLjIgMC0xNi45IDEzLjgtMzAuNyAzMC43LTMwLjcgMTcgMCAxNi4xIDMuOCAxMDUuMiA4OS4zIDkwLjYtODYuOSA4OC42LTg5LjMgMTA1LjUtODkuM3MzMC43IDEzLjggMzAuNyAzMC43YzAgMTcuOC0yLjkgMTUuNy0xMTQuOCAxMjMuMnoiXX0sJG90PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdsaWRlIixpY29uOls0NDgsNTEyLFtdLCJmMmE1IiwiTTI1Mi44IDE0OC42YzAgOC44LTEuNiAxNy43LTMuNCAyNi40LTUuOCAyNy44LTExLjYgNTUuOC0xNy4zIDgzLjYtMS40IDYuMy04LjMgNC45LTEzLjcgNC45LTIzLjggMC0zMC41LTI2LTMwLjUtNDUuNSAwLTI5LjMgMTEuMi02OC4xIDM4LjUtODMuMSA0LjMtMi41IDkuMi00LjIgMTQuMS00LjIgMTEuNCAwIDEyLjMgOC4zIDEyLjMgMTcuOXpNNDQ4IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMzg0IDI2N2MwLTUuMS0yMC44LTM3LjctMjUuNS0zOS41LTIuMi0uOS03LjItMi4zLTkuNi0yLjMtMjMuMSAwLTM4LjcgMTAuNS01OC4yIDIxLjVsLS41LS41YzQuMy0yOS40IDE0LjYtNTcuMiAxNC42LTg3LjQgMC00NC42LTIzLjgtNjIuNy02Ny41LTYyLjctNzEuNyAwLTEwOCA3MC44LTEwOCAxMjMuNSAwIDU0LjcgMzIgODUgODYuMyA4NSA3LjUgMCA2LjktLjYgNi45IDIuMy0xMC41IDgwLjMtNTYuNSA4Mi45LTU2LjUgNTguOSAwLTI0LjQgMjgtMzYuNSAyOC4zLTM4LS4yLTcuNi0yOS4zLTE3LjItMzYuNy0xNy4yLTIxLjEgMC0zMi43IDMzLTMyLjcgNTAuNiAwIDMyLjMgMjAuNCA1NC43IDUzLjMgNTQuNyA0OC4yIDAgODMuNC00OS43IDk0LjMtOTEuNyA5LjQtMzcuNyA3LTM5LjQgMTIuMy00Mi4xIDIwLTEwLjEgMzUuOC0xNi44IDU4LjQtMTYuOCAxMS4xIDAgMTkgMi4zIDM2LjcgNS4yIDEuOCAuMSA0LjEtMS43IDQuMS0zLjV6Il19LERvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJiaXR5IixpY29uOls1MTIsNTEyLFtdLCJmMzdhIiwiTTg2LjUgNjcuMmM5NS40LTg5LjIgMjQ2LjEtOTEuMiAzNDMuMSAzLjggMTQuMyAxNC4xLTYuNCAzNy4xLTIyLjQgMjEuNS04NC44LTgyLjQtMjE1LjgtODAuMy0yOTguOS0zLjItMTYuMyAxNS4xLTM2LjUtOC4zLTIxLjgtMjIuMXptOTguOSA0MTguNmMxOS4zIDUuNyAyOS4zLTIzLjYgNy45LTMwLTExMi4yLTMzLjktMTc1LjgtMTQ5LjctMTQ3LjUtMjYxIDUtMTkuNi0yNC45LTI4LjEtMzAuMi03LjEtMzIuMSAxMjcuNCA0MS4xIDI1OS44IDE2OS44IDI5OC4xem0xNDguMS0yYzEyMS45LTQwLjIgMTkyLjktMTY2LjkgMTY0LjQtMjkxLTQuNS0xOS43LTM0LjktMTMuOC0zMCA3LjkgMjQuMiAxMDcuNy0zNy4xIDIxNy45LTE0My4yIDI1My40LTIxLjIgNy0xMC40IDM2IDguOCAyOS43em0tNjIuOS03OWwuMi03MS44YzAtOC4yLTYuNi0xNC44LTE0LjgtMTQuOHMtMTQuOCA2LjctMTQuOCAxNC44bC0uMiA3MS44YzAgOC4yIDYuNiAxNC44IDE0LjggMTQuOHMxNC44LTYuNiAxNC44LTE0Ljh6bTcxLTI2OWMyLjEgOTAuOSA0LjcgMTMxLjktODUuNSAxMzIuNS05Mi41LS43LTg2LjktNDQuMy04NS41LTEzMi41IDAtMjEuOC0zMi41LTE5LjYtMzIuNSAwbDAgNzEuNmMwIDY5LjMgNjAuNyA5MC45IDExOCA5MC4xIDU3LjMgLjggMTE4LTIwLjggMTE4LTkwLjFsMC03MS42YzAtMTkuNi0zMi41LTIxLjgtMzIuNSAweiJdfSxFb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid3BleHBsb3JlciIsaWNvbjpbNTEyLDUxMixbXSwiZjJkZSIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem00ODAgMGEyMjQgMjI0IDAgMSAwIC00NDggMCAyMjQgMjI0IDAgMSAwIDQ0OCAwek0xNjAuOSAxMjQuNmw4Ni45IDM3LjEtMzcuMSA4Ni45LTg2LjktMzcuMSAzNy4xLTg2Ljl6bTExMCAxNjkuMWw0Ni42IDk0LTE0LjYgMC01MC0xMDAtNDguOSAxMDAtMTQgMCA1MS4xLTEwNi45LTIyLjMtOS40IDYtMTQgNjguNiAyOS4xLTYgMTQuMy0xNi41LTcuMXpNMjU5LjEgMTc3LjRsNjguNiAyOS40LTI5LjQgNjguMy02OC4zLTI5LjEgMjkuMS02OC42em04MC4zIDQyLjlsNTQuNiAyMy4xLTIzLjQgNTQuMy01NC4zLTIzLjEgMjMuMS01NC4zeiJdfSxOb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWVnYXBvcnQiLGljb246WzUxMiw1MTIsW10sImY1YTMiLCJNMjIyLjUgMjA5LjZsMCA2Ni4yIDMzLjUgMzMuNSAzMy4zLTMzLjMgMC02Ni40LTMzLjQtMzMuNC0zMy40IDMzLjR6TTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNNDAxLjEgNDIyLjRsLTI2LjEgMTkuMi0yNi0xOS4yIDAtNjUuNS0zMy40LTMzLjQtMzMuNCAzMy40IDAgNjUuNS0yNi4yIDE5LjItMjYuMS0xOS4yIDAtNjUuNS0zMy40LTMzLjQtMzMuNSAzMy40IDAgNjUuNS0yNi4xIDE5LjItMjYuMS0xOS4yIDAtODcgNTkuNS01OS41IDAtODcuOSA1OS41LTU5LjUgMC03NS42IDI2LjEtMTkuMiAyNi4xIDE5LjIgMCA3NS42IDU5LjUgNTkuNSAwIDg3LjYgNTkuNyA1OS43IDAgODcuMS0uMSAweiJdfSxQb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWRiIixpY29uOls1NzYsNTEyLFtdLCJmOGNhIiwiTTE3LjQgMTYwLjRsLTEwLjQgMTkxLjYgNDMuOSAwIDUuNi03OS44IDI3LjkgNzkuOCA0NC43IDAgMjUuNS03Ny40IDQuOCA3Ny40IDQ1LjUgMC0xMi44LTE5MS42LTQ1LjUgMC00MC43IDExNy4zLTQyLjMtMTE3LjMtNDYuMyAwem0yODEgMGwtNDcuOSAwIDAgMTkxLjYgNDcuOSAwczk1IC44IDk0LjItOTUuOGMtLjgtOTQuMi05NC4yLTk1LjgtOTQuMi05NS44bDAgMHptLTEuMiAxNDYuNWwwLTEwMi4xczQ2IDQuMyA0Ni44IDUwLjYtNDYuOCA1MS41LTQ2LjggNTEuNWwwIDB6bTIzOC4zLTc0LjJjNy4yLTExLjQgMTAtMjUgOC0zOC4zLTUuMy0zNS44LTU1LjEtMzQuMy01NS4xLTM0LjNsLTUxLjkgMCAwIDE5MS42IDQ1LjUgMHM4NyA0LjggODctNjMuOGMwLTQzLjEtMzMuNS01NS4xLTMzLjUtNTUuMWwwIDB6bS01MS45LTMxLjlzMTMuNi0xLjYgMTYgOS42YzEuNCA2LjctNCAxMi00IDEybC0xMiAwIDAtMjEuNnptLS4xIDEwOS41bC4xLTI0LjkgMC0xOC4yIC4xIDBzNDEuNi00LjcgNDEuMiAyMi40Yy0uMyAyNS43LTQxLjMgMjAuNy00MS4zIDIwLjdsMCAweiJdfSxJb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicGFnZTQiLGljb246WzUxMiw1MTIsW10sImYzZDciLCJNMjU2IDUwNEMxMTkgNTA0IDggMzkzIDggMjU2UzExOSA4IDI1NiA4YzIwLjkgMCA0MS4zIDIuNiA2MC43IDcuNUw1MC4zIDM5MiAyNTYgMzkyIDI1NiA1MDR6bTAtMTQzLjZsMC0yMTMuNi0xNDkuNCAyMTMuNiAxNDkuNCAwek0zNTIgMzkybDAgOTIuN2M0NS43LTE5LjIgODQuNS01MS43IDExMS40LTkyLjdMMzUyIDM5MnptNTcuNC0xMzguMmwtMjEuMiA4LjQgMjEuMiA4LjMgMC0xNi43em0tMjAuMyA1NC41Yy02LjcgMC04IDYuMy04IDEyLjlsMCA3LjcgMTYuMiAwIDAtMTBjMC01LjktMi4zLTEwLjYtOC4yLTEwLjZ6TTUwNCAyNTZjMCAzNy4zLTguMiA3Mi43LTIzIDEwNC40bC0xMjkgMCAwLTMzMy4xQzQ0MS4zIDY0LjggNTA0IDE1My4xIDUwNCAyNTZ6TTM2OC40IDE0My42bDY4LjIgMCAwLTQ3LjYtMTMuOSAwIDAgMzIuNi0xMy45IDAgMC0yOS42LTEzLjkgMCAwIDI5LjYtMTIuNyAwIDAtMzIuNi0xMy45IDAgMCA0Ny42IC4xIDB6bTY4LjEgMTg1LjNsLTI2LjUgMCAwLTExYzAtMTUuNC01LjYtMjUuMi0yMC45LTI1LjItMTUuNCAwLTIwLjcgMTAuNi0yMC43IDI1LjlsMCAyNS4zIDY4LjIgMCAwLTE1LS4xIDB6bTAtMTAzbC02OC4yIDI5LjcgMCAxMi40IDY4LjIgMjkuNSAwLTE2LjYtMTQuNC01LjcgMC0yNi41IDE0LjQtNS45IDAtMTYuOXptLTQuOC02OC41bC0zNS42IDAgMCAyNi42IDEzLjkgMCAwLTEyLjIgMTEgMGM4LjYgMTUuOCAxLjMgMzUuMy0xOC42IDM1LjMtMjIuNSAwLTI4LjMtMjUuMy0xNS41LTM3LjdsLTExLjYtMTAuNmMtMTYuMiAxNy41LTEyLjIgNjMuOSAyNy4xIDYzLjkgMzQgMCA0NC43LTM1LjkgMjkuMy02NS4zeiJdfSxGb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidGhlLXJlZC15ZXRpIixpY29uOls1MTIsNTEyLFtdLCJmNjlkIiwiTTQ4OC43IDI0MS43bDIwLjcgNy4xYy05LjYtMjMuOS0yMy45LTM3LTMxLjctNDQuOGw3LjEtMTguMmMuMiAwIDEyLjMtMjcuOC0yLjUtMzAuNy0uNi0xMS4zLTYuNi0yNy0xOC40LTI3LTcuNi0xMC42LTE3LjctMTIuMy0zMC43LTUuOS05LjEgNC40LTE3LjYgMTAtMjUuMyAxNi41LTUuMy02LjQtMyAuNC0zLTI5LjgtMzcuMS0yNC4zLTQ1LjQtMTEuNy03NC44IDNsLjUgLjVjLTIyLTcuNy00NS4xLTEyLjItNjguNC0xMy4zLTUuNS04LjctMTguNi0xOS4xLTI1LjEtMjUuMWwyNC44IDcuMWMtNS41LTUuNS0yNi44LTEyLjktMzQuMi0xNS4yIDE4LjItNC4xIDI5LjgtMjAuOCA0Mi41LTMzLTM0LjktMTAuMS02Ny45LTUuOS05Ny45IDExLjhsMTItNDQuMi0xLjgtLjVjLTMxLjYgMjQuMi0zMyA0MS45LTMzLjcgNDUuNS0uOS0yLjQtNi4zLTE5LjYtMTUuMi0yNy0zLjMgOC4xLTMuNSAxNy4xLS41IDI1LjMgMyA4LjQgNS45IDE0LjggOC40IDE4LjktMTYtMy4zLTI4LjMtNC45LTQ5LjIgMGwtMy43IDAgMzMgMTQuM2MtMjAuMiAxOC45LTM2LjEgNDEuOS00Ni43IDY3LjRsLTEuNyA4LjQgMS43IDEuNyA3LjYtNC43Yy0zLjMgMTEuNi01LjMgMTkuNC02LjYgMjUuOC0xMC45IDEyLjItMjAuMiAyNS44LTI3LjggNDAuMy0xNSAxLTMxLjggMTAuOC00MC4zIDE0LjNsMyAzLjQgMjguOCAxYy0uNSAxLS43IDIuMi0xLjIgMy4yLTcuMyA2LjQtMzkuOCAzNy43LTMzIDgwLjdsMjAuMi0yMi40Yy41IDEuNyAuNyAzLjQgMS4yIDUuMiAwIDI1LjUgLjQgODkuNiA2NC45IDE1MC41IDQzLjYgNDAgOTYgNjAuMiAxNTcuNSA2MC4yIDEyMS43IDAgMjIzLTg3LjMgMjIzLTIxMS41IDYuOC05LjctMS4yIDMgMTYuNy0yNS4xbDEzIDE0LjMgMi41LS41Yy0xLjgtMTEuNy00LjgtMjMuMS04LjktMzQuMi0xLjUtNC44LTMuOC05LjMtNi44LTEzLjNsMCAwek0zOTguNSAxMTEuMmwtLjUgMjEuOWM1LjUgMTguMSAxNi45IDE3LjIgMjIuNCAxNy4ybC0zLjQtNC43IDIyLjQtNS40Yy05IC41LTE4IC41LTI3IDAgMTIuOC0yLjEgMzMuMy0yOSA0My0xMS4zIDMuNCA3LjYgNi40IDE3LjIgOS4zIDI3LjhsMS43LTUuOWMtMS4zLTUtMS44LTEwLjEtMS43LTE1LjIgNS40IC41IDguOCAzLjQgOS4zIDEwLjEgLjUgNi40IDEuNyAxNC44IDMuNCAyNS4zbDQuNy0xMS4zYzQuNiAwIDQuNS0zLjYtMi41IDIwLjctMjAuOS04LjctMzUuMS04LjQtNDYuNS04LjRsMTguMi0xNmMtMjUuMyA4LjItMzMgMTAuOC01NC44IDIwLjktMS4xLTUuNC01LTEzLjUtMTYtMTkuOS0zLjIgMy44LTIuOCAuOS0uNyAxNC44bC0yLjUgMGMtMS4yLTguMi00LjEtMTYtOC40LTIzLjFsNC4yLTMuNGM4LjQtNy4xIDExLjgtMTQuMyAxMC42LTIxLjktLjUtNi40LTUuNC0xMy41LTEzLjUtMjAuNyA1LjYtMy40IDE1LjItLjQgMjguMyA4LjV6bS0zOS42LTEwLjFjMi43IDEuOSAxMS40IDUuNCAxOC45IDE3LjIgNC4yIDguNCA0IDkuOCAzLjQgMTEuMS0uNSAyLjQtLjUgNC4zLTMgNy4xLTEuNyAyLjUtNS40IDQuNy0xMS44IDcuNi03LjYtMTMtMTYuNS0yMy42LTI3LjgtMzEuMmwyMC4zLTExLjh6bS0yNjcuNCA0MmwxLjItMS43YzEuMi0yLjkgNC4yLTcuNiA5LjMtMTUuMmwyLjUtMy40LTEzIDEyLjMgNS40LTQuNy0xMC4xIDkuMy00LjIgMS4yYzEyLjMtMjQuMSAyMy4xLTQxLjMgMzIuNS01MC4yIDkuMy05LjMgMTYtMTYgMjAuMi0xOS40bC02LjQgMS4yYy0xMS4zLTQuMi0xOS40LTcuMS0yNC44LTguNCAyLjUtLjUgMy43LS41IDMuMi0uNSAxMC4zIDAgMTcuNSAuNSAyMC45IDEuMiA1LjIgMS43IDEwLjYgMi41IDE2IDIuNWwuNS0xLjctOC40LTM1LjggMTMuNSAyOWMyLjgtNC40IDQuOC05LjIgNS45LTE0LjMgMS43LTYuNCA1LjQtMTMgMTAuMS0xOS40czcuNi0xMC42IDkuMy0xMS4zYy0yLjYgOC4zLTQuNyAxNi44LTYuNCAyNS4zbC0xLjcgNy4xLS41IDQuNyAyLjUgMi41YzIxLjktMTMuNSA0NS41LTE5LjQgNzEuMy0xOC45bDIxLjEgLjVjLTExLjggMTMuNS0yNy44IDIxLjktNDguNSAyNC44LTcuNyAxLjQtMTUuNiAyLjQtMjMuNCAyLjlsLS4yLS41LTIuNS0xLjJjLTQuOC0xLTkuNy0uMy0xNCAyLTIuNS0uMi00LjktLjUtNy4xLS43bC0yLjUgMS43IC41IDEuMmMyIC4yIDMuOSAuNSA2LjIgLjdsLTIgMy40IDMuNC0uNS0xMC42IDExLjNjLTQuMiAzLTUuNCA2LjQtNC4yIDkuM2w1LjQtMy40IDEuMiAwYzYuMS04LjIgMTUuMi0xMy42IDI1LjMtMTUuMmwwLTNjNi40IC41IDEzIDEgMTkuNCAxLjIgNi40IDAgOC40IC41IDUuNCAxLjIgNy4yIDQgMTQuMSA4LjYgMjAuNyAxMy41IDEzLjUgMTAuMSAyMy42IDIxLjkgMzAgMzUuNCA4LjggMTguMiAxMy41IDM3LjEgMTMuNSA1Ni42IDAgOS41LTEgMTktMyAyOC4zLTMuNSAxNS45LTguOSAzMS4zLTE2IDQ2bDIuNSAuNWMxOC4yLTE5LjcgNDEuOS0xNiA0OS4yLTE2bC02LjQgNS45IDIyLjQgMTcuNy0xLjcgMzAuN2MtNS40LTEyLjMtMTYuNS0yMS4xLTMzLTI3LjggMTYuNSAxNC44IDIzLjYgMjEuMSAyMS45IDIwLjItNC44LTIuOC0zLjUtMS45LTEwLjgtMy43IDQuMSA0LjEgMTcuNSAxOC44IDE4LjIgMjAuN2wuMiAuMi0uMiAuMmMwIDEuOCAxLjYtMS4yLTE0IDIyLjktNzUuMi0xNS4zLTEwNi4zLTQyLjctMTQxLjItNjMuMmwxMS44IDEuMmMtMTEuOC0xOC41LTE1LjYtMTcuNy0zOC40LTI2LjFsMTAuNi04LjRjLTguOC0zLTE4LjItMy0yOC4zIC41bDcuNi0xMC42LTEuMi0xLjdjLTE0LjkgNC4zLTE5LjggOS4yLTIyLjYgMTEuMy0xLjEtNS41LTIuOC0xMi40LTEyLjMtMjguOGwtMS4yIDI3LTEzLjItNWMxLjUtMjUuMiA1LjQtNTAuNSAxMy4yLTc0LjZ6TTM2OCA0NzMuMWMtNDkuOSAyNS01Ni4xIDIyLjQtNTkgMjMuOS0yOS44LTExLjgtNTAuOS0zMS43LTYzLjUtNTguOGwzMCAxNi41Yy05LjgtOS4zLTE4LjMtMTYuNS0zOC40LTQ0LjNsMTEuOCAyMy4xLTE3LjctNy42YzE0LjIgMjEuMSAyMy41IDUxLjcgNjYuNiA3My41LTEyMC44IDI0LjItMTk5LTcyLjEtMjAwLjktNzQuMyAxMS4xIDkuMiAyMi45IDE3LjUgMzUuNCAyNC44IDMuNCAxLjcgNy4xIDIuNSAxMC4xIDEuMmwtMTYtMjAuN2M5LjIgNC4yIDkuNSA0LjUgNjkuMSAyOS00Mi41LTIwLjctNzMuOC00MC44LTkzLjItNjAuMi0uNSA2LjQtMS4yIDEwLjEtMS4yIDEwLjEgOC43IDcuMyAxNS44IDE2LjQgMjAuNyAyNi42LTM5LTE4LjktNTcuNi00Ny42LTcxLjMtODIuNiA0OS45IDU1LjEgMTE4LjkgMzcuNSAxMjAuNSAzNy4xIDM0LjggMTYuNCA2OS45IDIzLjYgMTEzLjkgMTAuNiAzLjMgMCAyMC4zIDE3IDI1LjMgMzkuMWw0LjItMy0yLjUtMjMuNmM5IDkgMjQuOSAyMi42IDM0LjQgMTMtMTUuNi01LjMtMjMuNS05LjUtMjkuNS0zMS43IDQuNiA0LjIgNy42IDkgMjcuOCAxNWwxLjItMS4yLTEwLjUtMTQuMmMxMS43LTQuOC0zLjUgMSAzMi0xMC44IDQuMyAzNC4zIDkgNDkuMiAuNyA4OS41ek00ODMuMyAyNTguN2wtMi41IC41IDMgOS4zYy0zLjUgNS45LTIzLjcgNDQuMy03MS42IDc5LjctMzkuNSAyOS44LTc2LjYgMzkuMS04MC45IDQwLjNsLTcuNi03LjEtMS4yIDMgMTQuMyAxNi03LjEtNC43IDMuNCA0LjItMS4yIDAtMjEuOS0xMy41IDkuMyAyNi42LTE5LTI3LjktMS4yIDIuNSA3LjYgMjljLTYuMS04LjItMjEtMzIuNi01Ni44LTM5LjZsMzIuNSAyMS4yYy0zMS4yIDQuNy02MyAyLjUtOTMuMi02LjQtNC4yLTEuMi04LjktMi41LTEzLjUtNC4ybDEuMi0zLTQ0LjgtMjIuNCAyNi4xIDIyLjRjLTU3LjcgOS4xLTExMy0yNS40LTEyNi40LTgzLjRMMjkuMyAyODQuOCA3IDMwNy4xYzE5LjUtNTcuNSAyNS42LTU3LjkgNTEuNC03MC4xLTkuMS01LjMtMS42LTMuMy0zOC40LTkuMyAxNS44LTUuOCAzMy0xNS40IDczIDUuMiAxLjItLjcgMi40LTEuMyAzLjctMS43IC42LTMuMiAuNC0uOCAxLTExLjggMy45IDEwIDMuNiA4LjcgMyA5LjNsMS43IC41YzEyLjctNi41IDguOS00LjUgMTctOC45bC01LjQgMTMuNSAyMi4zLTUuOC04LjQgOC40IDIuNSAyLjVjNC41LTEuOCAzMC4zIDMuNCA0MC44IDE2bC0yMy42LTIuNWMzOS40IDIzIDUxLjUgNTQgNTUuOCA2OS42bDEuNy0xLjJjLTIuOC0yMi4zLTEyLjQtMzMuOS0xNi00MC4xIDQuMiA1IDM5LjIgMzQuNiAxMTAuNCA0Ni0xMS4zLS41LTIzLjEgNS40LTM0LjkgMTguOWw0Ni43LTIwLjItOS4zIDIxLjljNy42LTEwLjEgMTQuOC0yMy42IDIxLjItMzkuNmwwLS41IDEuMi0zLTEuMiAxNmMxMy41LTQxLjggMjUuMy03OC41IDM1LjQtMTA5LjdsMTMuNS0yNy44IDAtMi01LjQtNC4yIDEwLjEgMCA1LjkgNC4yIDIuNS0xLjItMy40LTE2IDEyLjMgMTguOSA0MS44LTIwLjItMTQuOCAxMyAuNSAyLjkgMTcuNy0uNWMxMS4xIC40IDIyLjEgMS44IDMzIDQuMmwtMjMuNiAyLjUtMS4yIDMgMjYuNiAyMy4xYzkuOSA5LjkgMTguOSAyMC42IDI3IDMyLTExLjItMy4zLTEwLjMtMy40LTIxLjItMy40bDEyLjMgMzIuNS04LjktMTIuOHptLTYuMS03MS4zbC0zLjkgMTMtMTQuMy0xMS44IDE4LjItMS4yem0tMjU0LjggNy4xYzEuNyAxMC42IDQuNyAxNy43IDguOCAyMS45LTkuMyA2LjYtMjcuNSAxMy45LTQ2LjUgMTZsLjUgMS4yYzguMyAxLjMgMTYuOSAuNCAyNC44LTIuNWwtNy4xIDEzYzQuMi0xLjcgMTAuMS03LjEgMTcuNy0xNC44IDExLjktNS41IDEyLjctNS4xIDIwLjItMTYtMTIuNy02LjQtMTUuNy0xMy43LTE4LjQtMTguOHptMy43LTEwMi4zYy02LjQtMy40LTEwLjYgMy0xMi4zIDE4LjlzMi41IDI5LjUgMTEuOCAzOS42IDE4LjIgMTAuNiAyNi4xIDMgMy40LTIzLjYtMTEuMy00Ny43Yy0zLjUtNS43LTguNC0xMC41LTE0LjMtMTMuOGwwIDB6bS00LjcgNDYuM2M1LjQgMi4yIDEwLjUgMS45IDEyLjMtMTAuNmwwLTQuNy0xLjIgLjVjLTQuMy0zLjEtMi41LTQuNS0xLjctNi4ybC41LS41Yy0uOS0xLjItNS04LjEtMTIuNSA0LjctLjUtMTMuNSAuNS0yMS45IDMtMjQuOCAxLjItMi41IDQuNy0xLjIgMTEuMyA0LjIgNi40IDUuNCAxMS4zIDE2IDE1LjIgMzIuNSA2LjUgMjgtMTkuOCAyNi4yLTI2LjkgNC45em0tNDUtNS41YzEuNiAuMyA5LjMtMS4xIDkuMy0xNC44bC0uNSAwYy01LjQtMS4xLTIuMi01LjUtLjctNS45LTEuNy0zLTMuNC00LjItNS40LTQuNy04LjEgMC0xMS42IDEyLjctOC4xIDIxLjIgLjUgMS4xIDEuMyAyIDIuMiAyLjhzMiAxLjIgMy4yIDEuNGwwIDB6bTQwLjEtNTAuMWwtMi41IC41IC41IDNjOS4xLS41IDE4LjEgMS41IDI2LjEgNS45LTIuNS01LjUtMTAtMTQuMy0yOC4zLTE0LjNsLjUgMi41IDMuNyAyLjR6bS03MS44IDQ5LjRjMjEuNyAxNi44IDE2LjUgMjEuNCA0Ni41IDIzLjZsLTIuOS00LjdjOC40LTcuMiAxMy43LTE3LjMgMTQuOC0yOC4zIDEuNy0xNi0xLjItMjkuNS04LjgtNDEuM2wxMy03LjZjMC0uMyAwLS42LS4xLS45cy0uMi0uNi0uNC0uOGMtMi4yLS45LTQuNi0xLjItNy0uOXMtNC42IDEuMi02LjUgMi42Yy0xMi43IDYuNy0yOCAyMC45LTI5IDIyLjQtMS43IDEuNy0zLjQgNS45LTUuNCAxMy41LTEuOSA3LjctMi45IDE1LjYtMi45IDIzLjYtNC43LTgtMTAuNS02LjQtMTkuOS01LjlsNy4xIDcuNmMtMTYuNSAwLTIzLjMgMTUuNC0yMy42IDE2IDYuOCAwIDQuNi03LjYgMzAtMTIuMy00LjMtNi4zLTMuMy01LTQuOS02LjZ6bTE4LjctMTguN2MxLjItNy42IDMuNC0xMyA2LjQtMTcuMiA1LjQtNi40IDEwLjYtMTAuMSAxNi0xMS44IDQuMi0xLjcgNy4xIDEuMiAxMC4xIDkuMyAyLjUgOC4yIDMuNSAxNi44IDMgMjUuMy0uNSA5LjMtMy40IDE3LjItOC40IDIzLjEtMi45IDMuNC01LjQgNS45LTYuNCA3LjYtMy44IC40LTcuNiAuMi0xMS4zLS41bC03LjEtMy40LTUuNC02LjRjLjgtMTAgMS4zLTE4LjggMy4xLTI2em00MiA1Ni4xYy0zNC44IDE0LjQtMzQuNyAxNC0zNi4xIDE0LjMtMjAuOCA0LjctMTktMjQuNC0xOC45LTI0LjhsNS45LTEuMi0uNS0yLjVjLTIwLjItMi42LTMxIDQuMi0zMi41IDQuOSAuNSAuNSAzIDMuNCA1LjkgOS4zIDQuMi02LjQgOC44LTEwLjEgMTUuMi0xMC42LTEuNyAxMS4yLTEuMiAyMi43IDEuNyAzMy43IC4xIC41IDIuNiAxNy40IDI3LjUgMjQuMSAxMS4zIDMgMjcgMS4yIDQ4LjktNS40bC05LjIgLjVjLTQuMi0xNC44LTYuNC0yNC44LTUuOS0yOS41IDExLjMtOC44IDIxLjktMTEuMyAzMC43LTcuNmwyLjUgMC0xMS44LTcuNi03LjEgLjVjLTUuOSAxLjItMTIuMyA0LjItMTkuNCA4LjRsMy4xLTYuNXoiXX0sT290PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImppcmEiLGljb246WzUxMiw1MTIsW10sImY3YjEiLCJNNDk4LjUgMjQxLjdjLTcyLjktNzIuNy0xNjkuNC0xNjkuOS0yNDEuNS0yNDEuNy0xNjUuNSAxNjQuOS0yNDIuNSAyNDEuNy0yNDIuNSAyNDEuNy03LjkgNy45LTcuOSAyMC43IDAgMjguNyAxMzIuOCAxMzIuMyA2MS44IDYxLjUgMjQyLjUgMjQxLjYgMzc5LjQtMzc4IDE1LjctMTYuNyAyNDEuNS0yNDEuNyA4LTcuOSA4LTIwLjcgMC0yOC42ek0yNTcgMzMxLjdsLTc2LTc1LjcgNzYtNzUuNyA3NiA3NS43LTc2IDc1Ljd6Il19LEJvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmZWRleCIsaWNvbjpbNjQwLDUxMixbXSwiZjc5NyIsIk01ODYgMjg0LjVsNTMuMy01OS45LTYyLjQgMC0yMS43IDI0LjgtMjIuNS0yNC44LTExOC43IDAgMC0xNiA1Ni4xIDAgMC00OC4xLTE1MS4yIDAgMCA3NS41LS41IDBjLTkuNi0xMS0yMS41LTE0LjgtMzUuNC0xNC44LTI4LjQgMC00OS44IDE5LjQtNTcuMyA0NC45LTE4LTU5LjQtOTcuNC01Ny42LTEyMS45LTE0bDAtMjQuMi01NC44IDAgMC0yNi4yIDYwIDAgMC00MS4xLTEwOSAwIDAgMTg0LjQgNDkgMCAwLTc3LjUgNDguOSAwYy0xLjUgNS43LTIuMyAxMS44LTIuMyAxOC4yIDAgNzMuMSAxMDIuNiA5MS40IDEzMC4yIDIzLjdsLTQyIDBjLTE0LjcgMjAuOS00NS44IDguOS00NS44LTE0LjZsODUuNSAwYzMuNyAzMC41IDI3LjQgNTYuOSA2MC4xIDU2LjkgMTQuMSAwIDI3LTYuOSAzNC45LTE4LjZsLjUgMCAwIDExLjkgMjEyLjIgMCAyMi4xLTI1IDIyLjMgMjUgNjQuNCAwLTU0LTYwLjV6TTEzOS4zIDI2Ny45YzYuMS0yNi4zIDQxLjctMjUuNiA0Ni41IDBsLTQ2LjUgMHptMTUzLjQgNDguOWMtMzQuNiAwLTM0LTYyLjggMC02Mi44IDMyLjYgMCAzNC41IDYyLjggMCA2Mi44em0xNjcuOCAxOS4xbC05NC40IDAgMC0xNjYuNSA5NSAwIDAgMzAuMi01Ni4xIDAgMCAzMy45IDU1LjUgMCAwIDI4LjEtNTYuMSAwIDAgNDQuNyA1Ni4xIDAgMCAyOS42em0tNDUuOS0zOS44bDAtMjQuNCA1Ni4xIDAgMC00NCA1MC43IDU3LTUwLjcgNTcgMC00NS42LTU2LjEgMHptMTM4LjYgMTAuM2wtMjYuMSAyOS41LTM4LjEgMCA0NS42LTUxLjItNDUuNi01MS4yIDM5LjcgMCAyNi42IDI5LjMgMjUuNi0yOS4zIDM4LjUgMC00NS40IDUxIDQ2IDUxLjQtNDAuNSAwLTI2LjMtMjkuNXoiXX0sUm90PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImV2ZXJub3RlIixpY29uOlszODQsNTEyLFtdLCJmODM5IiwiTTEyMS4xIDEzMi4yYzEuNiAyMi4zLTE3LjYgMjEuNi0yMS42IDIxLjYtNjguOSAwLTczLjYtMS04My42IDMuMy0uNiAuMi0uNyAwLS40LS40TDEyNC4xIDQ2LjRjLjQtLjQgLjYtLjIgLjQgLjQtNC40IDEwLTMuNCAxNS4xLTMuNCA4NS40em03OSAzMDhjLTE0LjctMzcuMSAxMy03Ni45IDUyLjUtNzYuNiAxNy41IDAgMjIuNiAyMy4yIDcuOSAzMS40LTYuMiAzLjMtMjQuOSAxLjctMjUuMSAxOS4yIDAgMTcuMSAxOS43IDI1IDMxLjIgMjQuOSA2IDAgMTEuOS0xLjIgMTcuNS0zLjVzMTAuNi01LjcgMTQuOC05LjkgNy42LTkuMyA5LjktMTQuOCAzLjUtMTEuNSAzLjUtMTcuNWwwLS4xYzAtMTEuNi03LjgtNDcuMi00Ny41LTU1LjMtNy43LTEuNS02NS02LjMtNjguNC01MC41LTMuNyAxNi45LTE3LjQgNjMuNS00My4xIDY5LjEtOC43IDEuOS02OS43IDcuNi0xMTIuOS0zNi44IDAgMC0xOC42LTE1LjItMjguMi01OC0zLjQtMTUuNy05LjMtMzkuNy0xMS4xLTYyIDAtMTggMTEuMS0zMC40IDI1LjEtMzIuMiA4MSAwIDkwIDIuMyAxMDEtNy44IDkuOC05LjIgNy44LTE1LjUgNy44LTEwMi44IDEtOC4zIDcuOC0zMC44IDUzLjQtMjQuMSA2IC45IDMxLjkgNC4yIDM3LjUgMzAuNkwyOTAgNzQuOGMyMC40IDMuNyA3MC45IDcgODAuNiA1Ny45IDIyLjcgMTIxLjEgOC45IDIzOC41IDcuOCAyMzguNS0xNiAxMTQuNC0xMTEuMSAxMDguOS0xMTEuMSAxMDguOS0xOS0uMi01NC4yLTkuNC02Ny4zLTM5LjhsMCAwek0yODEgMjM1LjRjLTEgMS45LTIuMiA2IC45IDcgMTQuMSA0LjkgMzkuOCA2LjggNDUuOSA1LjUgMy4xLS4yIDMuMS00LjQgMi41LTYuNi0zLjUtMjEuOC00MC44LTI2LjUtNDkuMi01LjlsMCAweiJdfSxIb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidXNiIixpY29uOls2NDAsNTEyLFtdLCJmMjg3IiwiTTYzMy41IDI1NmMwIDMuMS0xLjcgNi4xLTQuNSA3LjVMNTM5LjkgMzE3Yy0xLjQgLjgtMi44IDEuNC00LjUgMS40LTEuNCAwLTMuMS0uMy00LjUtMS4xLTIuOC0xLjctNC41LTQuNS00LjUtNy44bDAtMzUuNi0yMzAuNyAwYzI1LjMgMzkuNiA0MC41IDEwNi45IDY5LjYgMTA2LjlsMjYuNyAwIDAtMjYuOGMwLTUgMy45LTguOSA4LjktOC45bDg5LjEgMGM1IDAgOC45IDMuOSA4LjkgOC45bDAgODkuMWMwIDUtMy45IDguOS04LjkgOC45bC04OS4xIDBjLTUgMC04LjktMy45LTguOS04LjlsMC0yNi43LTI2LjcgMGMtNzUuNCAwLTgxLjEtMTQyLjUtMTI0LjctMTQyLjVsLTEwMC4zIDBjLTguMSAzMC42LTM1LjkgNTMuNS02OSA1My41LTM5LjMtLjEtNzEuMy0zMi4xLTcxLjMtNzEuNHMzMi03MS4zIDcxLjMtNzEuM2MzMy4xIDAgNjEgMjIuOCA2OSA1My41IDM5LjEgMCA0My45IDkuNSA3NC42LTYwLjQgNDAuMS04OS4xIDU4LjEtODIuMSAxMDguOS04Mi4xIDcuNS0yMC45IDI3LTM1LjYgNTAuNC0zNS42IDI5LjUgMCA1My41IDIzLjkgNTMuNSA1My41cy0yMy45IDUzLjUtNTMuNSA1My41Yy0yMy40IDAtNDIuOS0xNC44LTUwLjQtMzUuNmwtMjkuOCAwYy0yOS4xIDAtNDQuMyA2Ny40LTY5LjYgMTA2LjlsMzAyLjEgMCAwLTM1LjZjMC0zLjMgMS43LTYuMSA0LjUtNy44czYuNC0xLjQgOC45IC4zTDYyOSAyNDguOGMyLjggMS4xIDQuNSA0LjEgNC41IDcuMnoiXX0scW90PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFuZ3J5Y3JlYXRpdmUiLGljb246WzY0MCw1MTIsW10sImYzNmUiLCJNNjQwIDIzOC4ybC0zLjIgMjguMi0zNC41IDIuMy0yIDE4LjEgMzQuNS0yLjMtMy4yIDI4LjItMzQuNCAyLjItMi4zIDIwLjEgMzQuNC0yLjItMyAyNi4xLTY0LjcgNC4xIDEyLjctMTEzLjItNDcuMyAxMTUuNC0zMS45IDItMjMuOC0xMTcuOCAzMC4zLTIgMTMuNiA3OS40IDMxLjctODIuNCA5My4xLTYuMnpNNDI2LjggMzcxLjVsMjguMy0xLjggMTIuOS0xMjAuMS0yOC40IDEuOS0xMi44IDEyMHpNMTYyIDM4OC4xbC0xOS40LTM2LTMuNSAzNy40LTI4LjIgMS43IDIuNy0yOS4xYy0xMSAxOC0zMiAzNC4zLTU2LjkgMzUuOC0zMi44IDItNTkuNy0yMC45LTU2LjQtNTguMiAyLjYtMjkuMyAyNi43LTYyLjggNjcuNS02NS40IDM3LjctMi40IDQ3LjYgMjMuMiA1MS4zIDI4LjhsMi44LTMwLjggMzguOS0yLjVjMjAuMS0xLjMgMzguNyAzLjcgNDIuNSAyMy43bDIuNi0yNi42IDY0LjgtNC4yLTIuNyAyNy45LTM2LjQgMi40LTEuNyAxNy45IDM2LjQtMi4zLTIuNyAyNy45LTM2LjQgMi4zLTEuOSAxOS45IDM2LjMtMi4zLTIuMSAyMC44IDU1LTExNy4yIDIzLjgtMS42IDMyLjEgMTEwLjYgOC45LTg1LjYtMjIuMyAxLjQgMi45LTI3LjkgNzUtNC45LTMgMjgtMjQuMyAxLjYtOS43IDkxLjktNTggMy43LTQuMy0xNS42LTM5LjQgMi41LTggMTYuMy0xMjYuMiA3Ljd6bS00NC4zLTcwLjJsLTI2LjQgMS43Yy02LjctMTIuNC0xNC40LTE2LjYtMjYuMy0xNS44LTE5IDEuMi0zMy4zIDE3LjUtMzQuNiAzMy4zLTEuNCAxNiA3LjMgMzIuNSAyOC43IDMxLjIgMTIuOC0uOCAyMS4zLTguNiAyOC45LTE4LjlsMjctMS43IDIuNy0yOS44em01Ni4xLTcuN2MxLjItMTIuOS03LjYtMTMuNi0yNi4xLTEyLjRMMTQ1IDMyNi4zYzE0LjItLjkgMjcuNS0yLjEgMjguOC0xNi4xek0xOTQuOSAzODFsNS44LTYwYy01IDEzLjUtMTQuNyAyMS4xLTI3LjkgMjYuNkwxOTQuOSAzODF6bTEzNS40LTQ1bC03LjktMzcuOC0xNS44IDM5LjMgMjMuNy0xLjV6TTE2MC4yIDI2MS40bC00LjMtMTcuNS0zOS42IDIuNi04LjEgMTguMi0zMS45IDIuMSA1Ny0xMjEuOSAyMy45LTEuNiAzMC43IDEwMiA5LjktMTA0LjcgMjctMS44IDM3LjggNjMuNiA2LjUtNjYuNiAyOC41LTEuOS00IDQxLjJjNy40LTEzLjUgMjIuOS00NC43IDYzLjYtNDcuNSA0MC41LTIuOCA1Mi40IDI5LjMgNTMuNCAzMC4zbDMuMy0zMiAzOS4zLTIuN2MxMi43LS45IDI3LjggLjMgMzYuMyA5LjdsLTQuNC0xMS45IDMyLjItMi4yIDEyLjkgNDMuMiAyMy00NS43IDMxLTIuMi00My42IDc4LjQtNC44IDQ0LjMtMjguNCAxLjkgNC44LTQ0LjMtMTUuOC00M2MxIDIyLjMtOS4yIDQwLjEtMzIgNDkuNmwyNS4yIDM4LjgtMzYuNCAyLjQtMTkuMi0zNi44LTQgMzguMy0yOC40IDEuOSAzLjMtMzEuNWMtNi43IDkuMy0xOS43IDM1LjQtNTkuNiAzOC0yNi4yIDEuNy00NS42LTEwLjMtNTUuNC0zOS4ybC00IDQwLjMtMjUgMS42LTM3LjYtNjMuMy02LjMgNjYuMi01Ni44IDMuN3ptMjc2LjYtODIuMWMxMC4yLS43IDE3LjUtMi4xIDIxLjYtNC4zIDQuNS0yLjQgNy02LjQgNy42LTEyLjEgLjYtNS4zLS42LTguOC0zLjQtMTAuNC0zLjYtMi4xLTEwLjYtMi44LTIyLjktMmwtMi45IDI4Ljh6TTMyNy43IDIxNGM1LjYgNS45IDEyLjcgOC41IDIxLjMgNy45IDQuNy0uMyA5LjEtMS44IDEzLjMtNC4xIDUuNS0zIDEwLjYtOCAxNS4xLTE0LjNsLTM0LjIgMi4zIDIuNC0yMy45IDYzLjEtNC4zIDEuMi0xMi0zMS4yIDIuMWMtNC4xLTMuNy03LjgtNi42LTExLjEtOC4xLTQtMS43LTguMS0yLjgtMTIuMi0yLjUtOCAuNS0xNS4zIDMuNi0yMiA5LjItNy43IDYuNC0xMiAxNC41LTEyLjkgMjQuNC0xLjEgOS42IDEuNCAxNy4zIDcuMiAyMy4zem0tMjAxLjMgOC4ybDIzLjgtMS42LTguMy0zNy42LTE1LjUgMzkuMnoiXX0sVm90PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1penVuaSIsaWNvbjpbNTEyLDUxMixbXSwiZjNjYyIsIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTE3NiAzNTkuOWMtMzEuNCAxMC42LTU4LjggMjcuMy04MCA0OC4yTDk2IDEzNmMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMjIzLjl6TTI5NiAzNTBjLTEyLjktMi0yNi4yLTMuMS0zOS44LTMuMS0xMy44IDAtMjcuMiAxLjEtNDAuMiAzLjFsMC0yMTRjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDIxNHptMTIwIDU3LjdjLTIxLjItMjAuOC00OC42LTM3LjQtODAtNDhMMzM2IDEzNmMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMjcxLjd6Il19LFVvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJpdGNoLWlvIixpY29uOls1MTIsNTEyLFtdLCJmODNhIiwiTTcxLjkgMzQuOEM1MC4yIDQ3LjcgNy40IDk2LjggNyAxMDkuN2wwIDIxLjNjMCAyNy4xIDI1LjMgNTAuOCA0OC4yIDUwLjggMjcuNiAwIDUwLjUtMjIuOCA1MC41LTUwIDAgMjcuMSAyMi4yIDUwIDQ5LjggNTBzNDktMjIuOCA0OS01MGMwIDI3LjEgMjMuNiA1MCA1MS4yIDUwbC41IDBjMjcuNiAwIDUxLjItMjIuOCA1MS4yLTUwIDAgMjcuMSAyMS41IDUwIDQ5IDUwczQ5LjgtMjIuOCA0OS44LTUwYzAgMjcuMSAyMyA1MCA1MC41IDUwIDIzIDAgNDguMy0yMy44IDQ4LjMtNTAuOGwwLTIxLjNjLS40LTEyLjktNDMuMi02Mi4xLTY0LjktNzUtNjcuNC0yLjMtMTE0LjItMi43LTE4NC0yLjdTOTEuMSAzMy4xIDcxLjkgMzQuOHpNMjA0LjIgMTY5LjJjLTIyIDM4LjQtNzcuOSAzOC43LTk5LjggLjItMTMuMiAyMy4xLTQzLjIgMzIuMS01NiAyNy43LTMuOSA0MC4yLTEzLjcgMjM3LjEgMTcuNyAyNjkuMiA4MCAxOC43IDMwMi4xIDE4LjEgMzc5LjggMCAzMS42LTMyLjMgMjEuMy0yMzIgMTcuNy0yNjkuMi0xMi45IDQuNC00Mi45LTQuNi01Ni0yNy43LTIyIDM4LjUtNzcuOCAzOC4xLTk5LjgtLjItNy4xIDEyLjUtMjMgMjguOS01MS44IDI4LjktMTAuNCAuMy0yMC44LTIuMi0yOS45LTcuM3MtMTYuNy0xMi42LTIxLjktMjEuNmwwIDB6bS00MS42IDUzLjhjMTYuNSAwIDMxLjEgMCA0OS4yIDE5LjggMjkuMy0zIDU4LjktMyA4OC4yIDAgMTguMi0xOS43IDMyLjgtMTkuNyA0OS4yLTE5LjcgNTIuMyAwIDY1LjIgNzcuNSA4My45IDE0NC40IDE3LjMgNjIuMi01LjUgNjMuNy0zNCA2My43LTQyLjEtMS42LTY1LjUtMzIuMi02NS41LTYyLjgtMzkuMyA2LjQtMTAxLjkgOC44LTE1NS42IDAgMCAzMC42LTIzLjMgNjEuMi02NS41IDYyLjgtMjguNC0uMS01MS4yLTEuNi0zMy45LTYzLjcgMTguNy02NyAzMS42LTE0NC40IDgzLjktMTQ0LjRsMC0uMXpNMjU2IDI3MC44cy00NC40IDQwLjgtNTIuNCA1NS4ybDI5LTEuMiAwIDI1LjNjMCAxLjUgMjEuMyAuMiAyMy4zIC4yIDExLjYgLjUgMjMuMyAxIDIzLjMtLjJsMC0yNS4zIDI5IDEuMmMtOC0xNC41LTUyLjQtNTUuMi01Mi40LTU1LjJsLjEgMHoiXX0sam90PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6IndpbmRvd3MiLGljb246WzQ0OCw1MTIsW10sImYxN2EiLCJNMCA5My43bDE4My42LTI1LjMgMCAxNzcuNC0xODMuNiAwIDAtMTUyLjF6TTAgNDE4LjNsMTgzLjYgMjUuMyAwLTE3NS4yLTE4My42IDAgMCAxNDkuOXptMjAzLjggMjhsMjQ0LjIgMzMuNyAwLTIxMS42LTI0NC4yIDAgMCAxNzcuOXptMC0zODAuNmwwIDE4MC4xIDI0NC4yIDAgMC0yMTMuOC0yNDQuMiAzMy43eiJdfSxXb3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3R1bWJsZXVwb24iLGljb246WzUxMiw1MTIsW10sImYxYTQiLCJNNTAyLjkgMjY2bDAgNjkuN2MwIDYyLjEtNTAuMyAxMTIuNC0xMTIuNCAxMTIuNC02MS44IDAtMTEyLjQtNDkuOC0xMTIuNC0xMTEuM2wwLTcwLjIgMzQuMyAxNiA1MS4xLTE1LjIgMCA3MC42YzAgMTQuNyAxMiAyNi41IDI2LjcgMjYuNVM0MTcgMzUyLjcgNDE3IDMzOGwwLTcyIDg1LjkgMHpNMjc4LjIgMjA3LjhsMzQuMyAxNiA1MS4xLTE1LjIgMC0zNS42YzAtNjAuNS01MS4xLTEwOS0xMTIuMS0xMDktNjAuOCAwLTExMi4xIDQ4LjItMTEyLjEgMTA4LjJsMCAxNjIuNGMwIDE0LjktMTIgMjYuNy0yNi43IDI2LjdTODYgMzQ5LjUgODYgMzM0LjZsMC02OC42LTg2IDAgMCA2OS43YzAgNjIgNTAuMyAxMTIuMyAxMTIuNCAxMTIuMyA2MS42IDAgMTEyLjQtNDkuNSAxMTIuNC0xMTAuOGwwLTE2MC4zYzAtMTQuNyAxMi0yNi43IDI2LjctMjYuN3MyNi43IDEyIDI2LjcgMjYuN2wwIDMwLjl6Il19LGZWPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imdvb2dsZSIsaWNvbjpbNTEyLDUxMixbXSwiZjFhMCIsIk01MDAgMjYxLjhDNTAwIDQwMy4zIDQwMy4xIDUwNCAyNjAgNTA0IDEyMi44IDUwNCAxMiAzOTMuMiAxMiAyNTZTMTIyLjggOCAyNjAgOGM2Ni44IDAgMTIzIDI0LjUgMTY2LjMgNjQuOWwtNjcuNSA2NC45Yy04OC4zLTg1LjItMjUyLjUtMjEuMi0yNTIuNSAxMTguMiAwIDg2LjUgNjkuMSAxNTYuNiAxNTMuNyAxNTYuNiA5OC4yIDAgMTM1LTcwLjQgMTQwLjgtMTA2LjlsLTE0MC44IDAgMC04NS4zIDIzNi4xIDBjMi4zIDEyLjcgMy45IDI0LjkgMy45IDQxLjR6Il19LEdvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkaXNjb3JkIixpY29uOls1NzYsNTEyLFtdLCJmMzkyIiwiTTQ5Mi41IDY5LjhjLS4yLS4zLS40LS42LS44LS43LTM4LjEtMTcuNS03OC40LTMwLTExOS43LTM3LjEtLjQtLjEtLjggMC0xLjEgLjFzLS42IC40LS44IC44Yy01LjUgOS45LTEwLjUgMjAuMi0xNC45IDMwLjYtNDQuNi02LjgtODkuOS02LjgtMTM0LjQgMC00LjUtMTAuNS05LjUtMjAuNy0xNS4xLTMwLjYtLjItLjMtLjUtLjYtLjgtLjhzLS43LS4yLTEuMS0uMmMtNDEuMyA3LjEtODEuNiAxOS42LTExOS43IDM3LjEtLjMgLjEtLjYgLjQtLjggLjctNzYuMiAxMTMuOC05Ny4xIDIyNC45LTg2LjkgMzM0LjUgMCAuMyAuMSAuNSAuMiAuOHMuMyAuNCAuNSAuNmM0NC40IDMyLjkgOTQgNTggMTQ2LjggNzQuMiAuNCAuMSAuOCAuMSAxLjEgMHMuNy0uNCAuOS0uN2MxMS4zLTE1LjQgMjEuNC0zMS44IDMwLTQ4LjggLjEtLjIgLjItLjUgLjItLjhzMC0uNS0uMS0uOC0uMi0uNS0uNC0uNi0uNC0uMy0uNy0uNGMtMTUuOC02LjEtMzEuMi0xMy40LTQ1LjktMjEuOS0uMy0uMi0uNS0uNC0uNy0uNnMtLjMtLjYtLjMtLjkgMC0uNiAuMi0uOSAuMy0uNSAuNi0uN2MzLjEtMi4zIDYuMi00LjcgOS4xLTcuMSAuMy0uMiAuNi0uNCAuOS0uNHMuNyAwIDEgLjFjOTYuMiA0My45IDIwMC40IDQzLjkgMjk1LjUgMCAuMy0uMSAuNy0uMiAxLS4ycy43IC4yIC45IC40YzIuOSAyLjQgNiA0LjkgOS4xIDcuMiAuMiAuMiAuNCAuNCAuNiAuN3MuMiAuNiAuMiAuOS0uMSAuNi0uMyAuOS0uNCAuNS0uNiAuNmMtMTQuNyA4LjYtMzAgMTUuOS00NS45IDIxLjgtLjIgLjEtLjUgLjItLjcgLjRzLS4zIC40LS40IC43LS4xIC41LS4xIC44IC4xIC41IC4yIC44YzguOCAxNyAxOC44IDMzLjMgMzAgNDguOCAuMiAuMyAuNiAuNiAuOSAuN3MuOCAuMSAxLjEgMGM1Mi45LTE2LjIgMTAyLjYtNDEuMyAxNDcuMS03NC4yIC4yLS4yIC40LS40IC41LS42cy4yLS41IC4yLS44YzEyLjMtMTI2LjgtMjAuNS0yMzYuOS04Ni45LTMzNC41em0tMzAyIDI2Ny43Yy0yOSAwLTUyLjgtMjYuNi01Mi44LTU5LjJzMjMuNC01OS4yIDUyLjgtNTkuMmMyOS43IDAgNTMuMyAyNi44IDUyLjggNTkuMiAwIDMyLjctMjMuNCA1OS4yLTUyLjggNTkuMnptMTk1LjQgMGMtMjkgMC01Mi44LTI2LjYtNTIuOC01OS4yczIzLjQtNTkuMiA1Mi44LTU5LjJjMjkuNyAwIDUzLjMgMjYuOCA1Mi44IDU5LjIgMCAzMi43LTIzLjIgNTkuMi01Mi44IDU5LjJ6Il19LFlvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJoYWNrZXItbmV3cyIsaWNvbjpbNDQ4LDUxMixbXSwiZjFkNCIsIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0yMS4yIDIyOS4ybC0uMiAwYy4xLS4xIC4yLS4zIC4zLS40IDAgLjEgMCAuMy0uMSAuNHptMjE4IDUzLjlsMCAxMDAuOS0zMS40IDAgMC0xMDIuNy03OS44LTE1My4zIDM3LjMgMGM1Mi41IDk4LjMgNDkuMiAxMDEuMiA1OS4zIDEyNS42IDEyLjMtMjcgNS44LTI0LjQgNjAuNi0xMjUuNmwzNC44IDAtODAuOCAxNTUuMXoiXX0sUjFlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImVsZXZlbnR5IixpY29uOls2NDAsNTEyLFsiMTF0eSJdLCJlN2Q2IiwiTTYxNS4zIDE2OC41YzIuMyAwIDQuNiAuNyA2LjYgMi4yIDEuOSAxLjQgMy4xIDMuMyAzLjggNSAxLjQgMy4zIDEuOCA3LjMgMS44IDExLjMgMCAyLjItLjMgNC45LS43IDcuNmwwIC40LTUwLjkgMjY0LjkgMCAwYy00IDIyLjEtOC41IDM5LjQtMTMuNiA1MS43LTUgMTIuMS0xMC45IDIxLjYtMTguNiAyN2wwIDBjLTcuNSA1LjMtMTYuOSA3LjctMjcuNiA4bC0zIDBjLTE2IDAtMjkuMy00LjItMzYuOS0xNC44LS4xLS4xLS4xLS4xLS4yLS4yLS4xLS4yLS4zLS40LS41LS42bDAgMGMtMS44LTIuNC0yLjUtNS4yLTIuOS03LjQtLjUtMi44LS43LTYuMS0uNy05LjggMC03LjMgLjYtMTMuNSAyLjEtMTguMiAxLjQtNC40IDQuOC0xMC40IDEyLjItMTAuNGwxLjMgLjFjLjIgMCAuNCAuMSAuNSAuMSAuMyAuMSAuNiAuMSAuOCAuMiAuNiAuMSAxLjMgLjMgMi4yIC42bDcuNiAyLjIgLjEgMCA3LjYgMi4xYy45IC4yIDEuNyAuNCAyLjIgLjUgLjQgLjEgLjYgLjEgLjcgLjEgMCAwIC4xIDAgLjItLjEgLjEtLjEgLjQtLjIgLjgtLjYgLjktLjkgMi4yLTIuNiAzLjYtNS43IDIuNi01LjggNC4yLTE0LjcgNC4yLTI3LjQgMC0uNy0uMy0zLjQtMS4zLTguOS0uOS01LjEtMi4zLTEyLjItNC4yLTIxLjFsLTU2LTIzMi45LS4xLS40IDAtLjNjLS40LTIuNy0uNy01LjMtLjctNy4zIDAtMy43IC40LTcuNSAxLjctMTAuNiAuNy0xLjYgMS44LTMuNCAzLjUtNC45IDEuOS0xLjUgNC4yLTIuMyA2LjUtMi4zbDM0LjYgMGM0LjYgMCA4LjcgMS43IDExLjkgNWwxLjMgMS41YzEuMiAxLjYgMiAzLjQgMi43IDUuMiAuOSAyLjQgMS41IDUuMSAyIDguMWwzMC40IDE2MS4yIDIzLjgtMTYwYy44LTUuOCAyLjItMTEuNCA1LjEtMTUuMSAzLTMuOCA3LjItNS44IDEyLTUuOGwyNCAwek0zNzUuMSAzNC42YzIuNiAwIDUuMSAuNyA3LjQgMi4zIDIuMiAxLjUgMy43IDMuNiA0LjcgNS43IDEuOSA0IDIuNSA5LjEgMi41IDE0LjVsMCAxMTEuMmMwIC4xIDAgLjIgMCAuM2wzMi40IDBjMi41IDAgNSAuNiA3LjIgMi4xIDIuMiAxLjQgMy43IDMuNCA0LjggNS41IDIgMy45IDIuNiA4LjggMi42IDEzLjlsMCAxNS40YzAgNS0uNiA5LjgtMi42IDEzLjctMS4xIDItMi42IDQtNC44IDUuNC0yLjIgMS40LTQuNyAyLTcuMSAybC0zMi41IDAgMCAxNDUuOGMwIDEwLjggLjcgMTkuNSAyIDI2LjIgMS40IDYuOSAzLjEgMTAuOSA0LjcgMTIuOSAxLjIgMS41IDIuMiAyLjUgMy4xIDMuMmwyLjIgMS40IC4xIC4xIDIuOSAuOGMxLjIgLjIgMi42IC4zIDQuMyAuM2wyMC4zIDBjNC41IDAgOC45IDEuNyAxMS44IDUuOCAyLjYgMy42IDMuMyA4LjEgMy4zIDEyLjJsMCAxNy4yYzAgNC41LS44IDkuMy0zLjQgMTMuMS0zIDQuMi03LjUgNi0xMi4zIDZsMCAwLTI5LjEgLjFjLTggMC0xNS0uNi0yMS4yLTEuNy02LjctMS4zLTEzLjQtNC4xLTIwLjEtOC4xLTcuMi00LjQtMTMtMTAuMy0xNy41LTE3LjgtNC41LTcuNS03LjktMTcuNS0xMC41LTI5LjUtMi42LTEyLjItMy45LTI2LjYtMy45LTQzbDAtMTQ0LjktMTMuNCAwYy0yLjQgMC00LjktLjYtNy4xLTItMi4yLTEuNC0zLjctMy40LTQuOC01LjQtMi0zLjktMi42LTguNy0yLjYtMTMuN2wwLTE1LjRjMC01LjEgLjYtMTAgMi42LTEzLjkgMS4xLTIuMSAyLjYtNCA0LjgtNS41IDIuMi0xLjUgNC43LTIuMSA3LjItMi4xbDEzLjQgMCAwLS42IDUuMi0xMTEuMiAwLS4xIC4zLTMuOWMuNS0zLjggMS4zLTcuNCAyLjctMTAuMyAyLjEtNC4yIDYtNy45IDExLjgtNy45bDI4LjYgMHptLTI2OCAxMS43YzEuOCAuMyAzLjYgLjkgNS4zIDIuMSAyLjEgMS41IDMuNSAzLjUgNC40IDUuNCAxLjcgMy43IDIuMyA4LjQgMi4zIDEzLjJsMCAzNzcuOGMwIDYuNy0uNiAxMi42LTIuNCAxNy4xLS45IDIuMy0yLjMgNC43LTQuNCA2LjUtMi4zIDItNS4xIDMtOC4xIDNsLTQzLjcgMGMtMyAwLTUuOC0xLjEtOC4xLTMuMS0yLjEtMS45LTMuNC00LjMtNC4yLTYuNS0xLjctNC41LTIuMy0xMC4zLTIuMy0xN2wwLTMxNS44Yy00LjggMS4yLTguNyAyLjItMTEuNSAyLjktMS45IC41LTMuNCAuOC00LjQgMS4xLS41IC4xLS45IC4yLTEuMiAuMy0uMSAwLS4zIC4xLS41IC4xLS4xIDAtLjIgMC0uMyAuMSAwIDAtLjIgMC0uMyAwIDAgMC0uMiAwLS40IDBsMCAwYy0uMSAwLS4zIDAtLjQgMC0uMSAwLS4yIDAtLjIgMC0yLjIgLjEtNC41LS40LTYuNi0xLjctMi4zLTEuNC0zLjgtMy40LTQuNy01LjMtMS44LTMuNy0yLjMtOC40LTIuMy0xM2wwLTI3LjRjMC00LjQgLjctOC44IDIuNi0xMi40IDIuMS0zLjkgNS41LTYuNiA5LjgtNy42bDc1LjUtMTkuNWMxLjQtLjQgMi45LS41IDQuNC0uNWwxLjggLjF6bTE0My44LS41YzEuOCAuMyAzLjYgLjkgNS4yIDIuMSAyLjEgMS41IDMuNSAzLjUgNC40IDUuNCAxLjcgMy43IDIuMiA4LjQgMi4yIDEzLjJsMCAzNzcuOGMwIDYuNy0uNiAxMi42LTIuNCAxNy4xLS45IDIuMy0yLjMgNC43LTQuNCA2LjUtMi4zIDItNS4xIDMtOC4xIDNsLTQzLjcgMGMtMyAwLTUuOC0xLjEtOC4xLTMuMS0yLjEtMS45LTMuNC00LjMtNC4yLTYuNS0xLjctNC41LTIuMy0xMC4zLTIuMy0xN2wwLTMxNS44Yy00LjggMS4yLTguNyAyLjItMTEuNSAyLjktMS45IC41LTMuNCAuOC00LjQgMS4xLS41IC4xLS45IC4yLTEuMiAuMy0uMSAwLS4zIC4xLS41IC4xLS4xIDAtLjIgMC0uMyAuMS0uMSAwLS4yIDAtLjMgMCAwIDAtLjIgMC0uNCAwbDAgMGMtLjEgMC0uMiAwLS4zIDAtLjEgMC0uMiAwLS4zIDAtMi4yIC4xLTQuNS0uNC02LjYtMS43LTIuMy0xLjQtMy44LTMuNC00LjctNS4zLTEuOC0zLjctMi4zLTguMy0yLjMtMTNsMC0yNy40YzAtNC40IC43LTguNyAyLjYtMTIuNCAyLjEtMy45IDUuNS02LjYgOS44LTcuNmw3NS40LTE5LjRjMS40LS40IDIuOS0uNSA0LjQtLjVsMS44IC4xeiJdfSxab3Q9UjFlLFhvdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0ZWFtc3BlYWsiLGljb246WzU3Niw1MTIsW10sImY0ZjkiLCJNMTUyLjggMzcuMmMtMzIuMiAzOC4xLTU2LjEgODIuNi02OS45IDEzMC41IDAgLjItLjEgLjMtLjEgLjUtMzkuMyAxNi4yLTY2LjggNTQuOC02Ni44IDk5LjggMCA1OS42IDQ4LjQgMTA4IDEwOCAxMDhzMTA4LTQ4LjQgMTA4LTEwOGMwLTUzLjUtMzguOS05Ny45LTkwLTEwNi41IDE1LjctNDEuOCA0MC40LTc5LjYgNzIuMy0xMTAuNyAxLjgtMS42IDQtMi42IDYuMy0zLjEgMzcuMi0xMS41IDc2LjctMTMuMyAxMTQuOC01LjIgMTE5LjMgMjUuMSAxOTguNiAxMzguMiAxODEuNyAyNTguOC04LjQgNjIuNi0zOC42IDExMi43LTg3LjcgMTUxLjQtNTAuMSAzOS43LTEwNy41IDU0LjMtMTcwLjIgNTIuMmwtMjQtMWMxMi40IDIuOCAyNSA0LjkgMzcuNiA2LjMgNDAuNyA0LjIgODEuNCAyLjEgMTIwLjEtMTIuNSA5NC0zNS41IDE0OS4zLTEwMi4zIDE2Mi45LTIwMi41IDQuOC01Mi42LTUuOC0xMDUuNC0zMC44LTE1Mi03MC40LTEzMS45LTIzNC4yLTE4MS42LTM2Ni0xMTEuMi0yLjQgMS40LTQuNSAzLjEtNi4zIDUuMmwuMSAwek0zMDkuNCA0MzMuOWMtMi4xIDExLjUtNC4yIDIxLjktMTQuNiAzMS4zIDUzLjItMSAxMjMuMi0yOS4yIDE2MS44LTk3LjEgMzkuNy02OS45IDM3LjYtMTM5LjktNi4zLTIwNy44LTM2LjUtNTUuMy04OS44LTgyLjQtMTU2LjYtODYuNiAxLjUgMi4zIDMuMiA0LjQgNS4yIDYuM2w1LjIgNi4zYzI1LjEgMzEuMyAzNy42IDY3LjkgNDIuOCAxMDcuNSAyLjEgMTUuNy0xIDMwLjMtMTMuNiA0MS44LTQuMiAzLjEtNS4yIDYuMy00LjIgMTAuNGw3LjMgMTcuNyAyOS4zIDU0LjNjNS4yIDExLjUgNC4yIDE5LjgtNi4zIDI4LjItMy4yIDIuNS02LjcgNC42LTEwLjQgNi4zbC0xOC44IDguNCAzLjEgMTMuNmMzLjEgNi4zIDEgMTIuNS0zLjEgMTcuNy0yLjUgMi40LTMuOCA1LjktMy4xIDkuNCAyLjEgMTEuNS0yLjEgMTkuOC0xMi41IDI1LjEtMi4xIDEtNC4yIDUuMi01LjIgNy4zbDAtLjF6bS0xMzMuNi0zLjFjMTYuNyAxMS41IDM0LjUgMjAuOSA1My4yIDI2LjEgMjQgNS4yIDQxLjgtNi4zIDQ0LjktMzAuMyAxLTguNCA1LjItMTQuNiAxMi41LTE3LjcgNy4zLTQuMiA4LjQtNy4zIDIuMS0xMy42bC05LjQtOC40IDEzLjYtNC4yYzYuMy0yLjEgNy4zLTUuMiA1LjItMTEuNS0xLjQtMy0yLjQtNi4yLTMuMS05LjQtMy4xLTE0LjYtMi4xLTE1LjcgMTEuNS0xOC44IDguNC0zLjEgMTUuNy02LjMgMjEuOS0xMi41IDMuMS0yLjEgMy4xLTQuMiAxLTguNGwtMTYuNy0zMC4zYy0xLTEuOS0yLjEtMy44LTMuMS01LjctNi40LTExLjctMTMtMjMuNi0xNS43LTM3LjEtMi4xLTkuNC0xLTE3LjcgOC40LTI0IDUuMi00LjIgOC40LTkuNCA4LjQtMTYuNy0uNC0xMC4xLTEuNS0yMC4zLTMuMS0zMC4zLTYuMy0zNy42LTIzLTY4LjktNTEuMi05NS01LjItNC4yLTkuNC02LjMtMTYuNy00LjJsLTM1LjYgMTIuNyA2IDMuNmM2LjMgMy43IDEyLjIgNy4zIDE3IDEyLjEgMzAuMyAyNi4xIDQxLjggNjEuNiA0NS45IDEwMC4yIDEgOC40IDAgMTYuNy03LjMgMjEuOS04LjQgNS4yLTEwLjQgMTIuNS03LjMgMjAuOSA0LjkgMTMuMiAxMC40IDI2IDE2LjcgMzguNkwyOTEuNiAzMThjLTYuMyA4LjQtMTMuNiAxMS41LTIxLjkgMTQuNi0xMi41IDMuMS0xNC42IDcuMy0xMC40IDIwLjkgLjYgMS41IDEuNCAyLjggMi4xIDQuMiAyLjEgNS4yIDEgOC40LTQuMiAxMC40bC0xMi41IDMuMSA1LjIgNC4yIDQuMiA0LjJjNC4yIDUuMiA0LjIgOC40LTIuMSAxMC40LTcuMyA0LjItMTEuNSA5LjQtMTEuNSAxNy43IDAgMTIuNS03LjMgMTkuOC0xOC44IDI0LTMuOCAxLTcuNiAxLjUtMTEuNSAxbC0zNC41LTIuMSAuMSAuMnoiXX0sUW90PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN1cHBsZSIsaWNvbjpbNjQwLDUxMixbXSwiZjNmOSIsIk02NDAgMjYyLjVjMCA2NC4xLTEwOSAxMTYuMS0yNDMuNSAxMTYuMS0yNC44IDAtNDguNi0xLjgtNzEuMS01IDcuNyAuNCAxNS41IC42IDIzLjQgLjYgMTM0LjUgMCAyNDMuNS01Ni45IDI0My41LTEyNy4xIDAtMjkuNC0xOS4xLTU2LjQtNTEuMi03OCA2MCAyMS4xIDk4LjkgNTUuMSA5OC45IDkzLjR6TTQ3LjcgMjI3LjljLS4xLTcwLjIgMTA4LjgtMTI3LjMgMjQzLjMtMTI3LjYgNy45IDAgMTUuNiAuMiAyMy4zIC41LTIyLjUtMy4yLTQ2LjMtNC45LTcxLTQuOS0xMzQuNSAuNC0yNDMuNCA1Mi42LTI0My4zIDExNi43IC4xIDM4LjMgMzkuMSA3Mi4zIDk5LjMgOTMuMy0zMi4zLTIxLjUtNTEuNS00OC42LTUxLjYtNzh6bTYwLjIgMzkuOVMxMTguNCAyODEgMTM3LjIgMjgxYzE3LjkgMCAyOC40LTExLjUgMjguNC0yNS4xIDAtMjgtNDAuMi0yNS4xLTQwLjItMzkuNyAwLTUuNCA1LjMtOS4xIDEyLjUtOS4xIDUuNyAwIDExLjMgMi42IDExLjMgNi42bDAgMy45IDE0LjIgMCAwLTcuOWMwLTEyLjEtMTUuNC0xNi44LTI1LjQtMTYuOC0xNi41IDAtMjguNSAxMC4yLTI4LjUgMjQuMSAwIDI2LjYgNDAuMiAyNS40IDQwLjIgMzkuOSAwIDYuNi01LjggMTAuMS0xMi4zIDEwLjEtMTEuOSAwLTIwLjctMTAuMS0yMC43LTEwLjFsLTguOCAxMC45em0xMjAuOC03My42bDAgNTQuNGMwIDExLjMtNy4xIDE3LjgtMTcuOCAxNy44cy0xNy44LTYuNS0xNy44LTE3LjdsMC01NC41LTE1LjggMCAwIDU1YzAgMTguOSAxMy40IDMxLjkgMzMuNyAzMS45IDIwLjEgMCAzMy40LTEzIDMzLjQtMzEuOWwwLTU1LTE1LjcgMHptMzQuNCA4NS40bDE1LjggMCAwLTI5LjUgMTUuNSAwYzE2IDAgMjcuMi0xMS41IDI3LjItMjguMXMtMTEuMi0yNy44LTI3LjItMjcuOGwtMzkuMSAwIDAgMTMuNCA3LjggMCAwIDcyem0xNS44LTQzbDAtMjkuMSAxMi45IDBjOC43IDAgMTMuNyA1LjcgMTMuNyAxNC40IDAgOC45LTUuMSAxNC43LTE0IDE0LjdsLTEyLjYgMHptNTcgNDNsMTUuOCAwIDAtMjkuNSAxNS41IDBjMTYgMCAyNy4yLTExLjUgMjcuMi0yOC4xcy0xMS4yLTI3LjgtMjcuMi0yNy44bC0zOS4xIDAgMCAxMy40IDcuOCAwIDAgNzJ6bTE1LjctNDNsMC0yOS4xIDEyLjkgMGM4LjcgMCAxMy43IDUuNyAxMy43IDE0LjQgMCA4LjktNSAxNC43LTE0IDE0LjdsLTEyLjYgMHptNTcuMSAzNC44YzAgNS44IDIuNCA4LjIgOC4yIDguMmwzNy42IDBjNS44IDAgOC4yLTIuNCA4LjItOC4ybDAtMTMtMTQuMyAwIDAgNS4yYzAgMS43LTEgMi42LTIuNiAyLjZsLTE4LjYgMGMtMS43IDAtMi42LTEtMi42LTIuNmwwLTYxLjJjMC01LjctMi40LTguMi04LjItOC4ybC0xNS40IDAgMCAxMy40IDUuMiAwYzEuNyAwIDIuNiAxIDIuNiAyLjZsMCA2MS4yLS4xIDB6bTYzLjQgMGMwIDUuOCAyLjQgOC4yIDguMiA4LjJsMzguNyAwYzUuNyAwIDguMi0yLjQgOC4yLTguMmwwLTEzLTE0LjMgMCAwIDUuMmMwIDEuNy0xIDIuNi0yLjYgMi42bC0xOS43IDBjLTEuNyAwLTIuNi0xLTIuNi0yLjZsMC0yMC4zIDI3LjcgMCAwLTEzLjQtMjcuNyAwIDAtMjIuNCAxOS4yIDBjMS43IDAgMi42IDEgMi42IDIuNmwwIDUuMiAxNC4yIDAgMC0xM2MwLTUuNy0yLjUtOC4yLTguMi04LjJsLTUxLjYgMCAwIDEzLjQgNy44IDAgMCA2My45IC4xIDB6bTU4LjktNzZsMCA1LjkgMS42IDAgMC01LjkgMi43IDAgMC0xLjItNyAwIDAgMS4yIDIuNyAwem01LjctMS4ybDAgNy4xIDEuNSAwIDAtNS43IDIuMyA1LjcgMS4zIDAgMi4zLTUuNyAwIDUuNyAxLjUgMCAwLTcuMS0yLjMgMC0yLjEgNS4xLTIuMS01LjEtMi40IDB6Il19LEgxZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtdHdpdHRlciIsaWNvbjpbNDQ4LDUxMixbInR3aXR0ZXItc3F1YXJlIl0sImYwODEiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzUxLjMgMTk5LjNjMCA4Ni43LTY2IDE4Ni42LTE4Ni42IDE4Ni42LTM3LjIgMC03MS43LTEwLjgtMTAwLjctMjkuNCA1LjMgLjYgMTAuNCAuOCAxNS44IC44IDMwLjcgMCA1OC45LTEwLjQgODEuNC0yOC0yOC44LS42LTUzLTE5LjUtNjEuMy00NS41IDEwLjEgMS41IDE5LjIgMS41IDI5LjYtMS4yLTMwLTYuMS01Mi41LTMyLjUtNTIuNS02NC40bDAtLjhjOC43IDQuOSAxOC45IDcuOSAyOS42IDguMy05LTYtMTYuNC0xNC4xLTIxLjUtMjMuNnMtNy44LTIwLjItNy43LTMxYzAtMTIuMiAzLjItMjMuNCA4LjktMzMuMSAzMi4zIDM5LjggODAuOCA2NS44IDEzNS4yIDY4LjYtOS4zLTQ0LjUgMjQtODAuNiA2NC04MC42IDE4LjkgMCAzNS45IDcuOSA0Ny45IDIwLjcgMTQuOC0yLjggMjktOC4zIDQxLjYtMTUuOC00LjkgMTUuMi0xNS4yIDI4LTI4LjggMzYuMSAxMy4yLTEuNCAyNi01LjEgMzcuOC0xMC4yLTguOSAxMy4xLTIwLjEgMjQuNy0zMi45IDM0IC4yIDIuOCAuMiA1LjcgLjIgOC41eiJdfSxLb3Q9SDFlLGRWPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZvbnQtYXdlc29tZSIsaWNvbjpbNTEyLDUxMixbNjI1MDEsNjI2OTQsImZvbnQtYXdlc29tZS1mbGFnIiwiZm9udC1hd2Vzb21lLWxvZ28tZnVsbCJdLCJmMmI0IiwiTTkxLjcgOTZDMTA2LjMgODYuOCAxMTYgNzAuNSAxMTYgNTIgMTE2IDIzLjMgOTIuNyAwIDY0IDBTMTIgMjMuMyAxMiA1MmMwIDE2LjcgNy44IDMxLjUgMjAgNDFsMCA0MTkgNjQgMCAwLTY0IDM3My42IDBjMTQuNiAwIDI2LjQtMTEuOCAyNi40LTI2LjQgMC0zLjctLjgtNy4zLTIuMy0xMC43TDQzMiAyNzIgNDkzLjcgMTMzLjFjMS41LTMuNCAyLjMtNyAyLjMtMTAuNyAwLTE0LjYtMTEuOC0yNi40LTI2LjQtMjYuNEw5MS43IDk2eiJdfSxKb3Q9ZFYsZXN0PWRWLHExZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3aXJzaW5kaGFuZHdlcmsiLGljb246WzQ0OCw1MTIsWyJ3c2giXSwiZTJkMCIsIk0xOC45IDQ3OS44bDgzLjQgMCAwLTExMi04My40IDQ3IDAgNjV6bTMyOSAwbDgyLjQgMCAwLTY1LTgyLjQtNDcgMCAxMTJ6bTAtNDQ4bDAgMjE5LjgtMTIzLjYtNzIuNC0xMjEuNyA3Mi40IDAtMjE5LjgtODMuNyAwIDAgMzYwLjggMjA1LjQtMTIyLjMgMjA2IDEyMi4zIDAtMzYwLjgtODIuMyAweiJdfSx0c3Q9cTFlLGFzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjb25mbHVlbmNlIixpY29uOls1MTIsNTEyLFtdLCJmNzhkIiwiTTIuOCA0MTIuMmMtNC41IDcuNi0yLjEgMTcuNSA1LjUgMjIuMmwxMDUuOSA2NS4yYzcuNyA0LjcgMTcuNyAyLjQgMjIuNC01LjMgMC0uMSAuMS0uMiAuMS0uMiA2Ny4xLTExMi4yIDgwLjUtOTUuOSAyODAuOS0uNyA4LjEgMy45IDE3LjggLjQgMjEuNy03LjcgLjEtLjEgLjEtLjMgLjItLjRsNTAuNC0xMTQuMWMzLjYtOC4xLS4xLTE3LjYtOC4xLTIxLjMtMjIuMi0xMC40LTY2LjItMzEuMi0xMDUuOS01MC4zLTI0Ny45LTEyMC42LTMzMC44IDQ1LjctMzczLjEgMTEyLjZ6TTUxMC4yIDEwMC4xYzQuNS03LjYgMi4xLTE3LjUtNS41LTIyLjJMMzk4LjkgMTIuOGMtNy41LTUtMTcuNi0zLjEtMjIuNiA0LjQtLjIgLjMtLjQgLjYtLjYgMS02Ny4zIDExMi42LTgxLjEgOTUuNi0yODAuNiAuOS04LjEtMy45LTE3LjgtLjQtMjEuNyA3LjctLjEgLjEtLjEgLjMtLjIgLjRMMjIuNyAxNDEuM2MtMy42IDguMSAuMSAxNy42IDguMSAyMS4zIDIyLjIgMTAuNCA2Ni4zIDMxLjIgMTA2IDUwLjQgMjQ4IDEyMCAzMzAuOC00NS40IDM3My40LTExMi45eiJdfSxyc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGlnZyIsaWNvbjpbNTEyLDUxMixbXSwiZjFhNiIsIk04MS43IDE3Mi4zbC04MS43IDAgMCAxNzQuNCAxMzIuNyAwIDAtMjUwLjctNTEgMCAwIDc2LjN6bTAgMTMzLjRsLTMwLjggMCAwLTkyLjMgMzAuOCAwIDAgOTIuM3pNMzc4LjkgMTcyLjNsMCAxNzQuNCA4MS44IDAgMCAyOC41LTgxLjggMCAwIDQwLjggMTMzLjEgMCAwLTI0My43LTEzMy4xIDB6bTgxLjggMTMzLjRsLTMwLjggMCAwLTkyLjMgMzAuOCAwIDAgOTIuM3ptLTIzNS42IDQxbDgyLjEgMCAwIDI4LjUtODIuMSAwIDAgNDAuOCAxMzMuMyAwIDAtMjQzLjctMTMzLjMgMCAwIDE3NC40em01MS4yLTEzMy4zbDMwLjggMCAwIDkyLjMtMzAuOCAwIDAtOTIuM3pNMTUzLjMgOTZsNTEuMyAwIDAgNTEtNTEuMyAwIDAtNTF6bTAgNzYuM2w1MS4zIDAgMCAxNzQuNC01MS4zIDAgMC0xNzQuNHoiXX0saXN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InRocmVhZHMiLGljb246WzQ0OCw1MTIsW10sImU2MTgiLCJNMzMxLjUgMjM1LjdjMi4yIC45IDQuMiAxLjkgNi4zIDIuOCAyOS4yIDE0LjEgNTAuNiAzNS4yIDYxLjggNjEuNCAxNS43IDM2LjUgMTcuMiA5NS44LTMwLjMgMTQzLjItMzYuMiAzNi4yLTgwLjMgNTIuNS0xNDIuNiA1M2wtLjMgMGMtNzAuMi0uNS0xMjQuMS0yNC4xLTE2MC40LTcwLjItMzIuMy00MS00OC45LTk4LjEtNDkuNS0xNjkuNmwwLS41QzE3IDE4NC4zIDMzLjYgMTI3LjIgNjUuOSA4Ni4yIDEwMi4yIDQwLjEgMTU2LjIgMTYuNSAyMjYuNCAxNmwuMyAwYzcwLjMgLjUgMTI0LjkgMjQgMTYyLjMgNjkuOSAxOC40IDIyLjcgMzIgNTAgNDAuNiA4MS43bC00MC40IDEwLjhjLTcuMS0yNS44LTE3LjgtNDcuOC0zMi4yLTY1LjQtMjkuMi0zNS44LTczLTU0LjItMTMwLjUtNTQuNi01NyAuNS0xMDAuMSAxOC44LTEyOC4yIDU0LjQtMjYuMiAzMy4zLTM5LjggODEuNS00MC4zIDE0My4yIC41IDYxLjcgMTQuMSAxMDkuOSA0MC4zIDE0My4zIDI4IDM1LjYgNzEuMiA1My45IDEyOC4yIDU0LjQgNTEuNC0uNCA4NS40LTEyLjYgMTEzLjctNDAuOSAzMi4zLTMyLjIgMzEuNy03MS44IDIxLjQtOTUuOS02LjEtMTQuMi0xNy4xLTI2LTMxLjktMzQuOS0zLjcgMjYuOS0xMS44IDQ4LjMtMjQuNyA2NC44LTE3LjEgMjEuOC00MS40IDMzLjYtNzIuNyAzNS4zLTIzLjYgMS4zLTQ2LjMtNC40LTYzLjktMTYtMjAuOC0xMy44LTMzLTM0LjgtMzQuMy01OS4zLTIuNS00OC4zIDM1LjctODMgOTUuMi04Ni40IDIxLjEtMS4yIDQwLjktLjMgNTkuMiAyLjgtMi40LTE0LjgtNy4zLTI2LjYtMTQuNi0zNS4yLTEwLTExLjctMjUuNi0xNy43LTQ2LjItMTcuOGwtLjcgMGMtMTYuNiAwLTM5IDQuNi01My4zIDI2LjNsLTM0LjQtMjMuNmMxOS4yLTI5LjEgNTAuMy00NS4xIDg3LjgtNDUuMWwuOCAwYzYyLjYgLjQgOTkuOSAzOS41IDEwMy43IDEwNy43bC0uMiAuMiAuMSAwem0tMTU2IDY4LjhjMS4zIDI1LjEgMjguNCAzNi44IDU0LjYgMzUuMyAyNS42LTEuNCA1NC42LTExLjQgNTkuNS03My4yLTEzLjItMi45LTI3LjgtNC40LTQzLjQtNC40LTQuOCAwLTkuNiAuMS0xNC40IC40LTQyLjkgMi40LTU3LjIgMjMuMi01Ni4yIDQxLjhsLS4xIC4xeiJdfSxWMWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid3ByZXNzciIsaWNvbjpbNTEyLDUxMixbInJlbmRhY3QiXSwiZjNlNCIsIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQyNy4zIDE2Ni42Yy0xNS4yIDM0LjUtMzAuNCA2OS00NS42IDEwMy41LTIuNCA1LjUtNi45IDguMi0xMyA4LjItMjMgMC00NiAuMS02OSAwLTUuMSAwLTguMiAxLjktMTAuMyA2LjctMTAuMiAyMy42LTIwLjYgNDctMzEgNzAuNS0xLjUgMy41LTQuMSA1LjMtNy45IDUuMy00NS45IDAtOTEuOSAwLTEzNy44IDAtMy4xIDAtNS42LTEuMS03LjctMy40LTExLjItMTIuMy0yMi41LTI0LjYtMzMuNy0zNi45LTIuNy0zLTIuOC02LjItMS4yLTkuNyA4LjctMTkuNSAxNy4zLTM5LjEgMjUuOS01OC43IDEyLjktMjkuNCAyNS45LTU4LjcgMzguNy04OC4xIDEuNy0zLjkgNC4zLTUuNyA4LjUtNS43IDE0LjIgLjEgMjguNSAwIDQyLjcgMCA2LjIgMCA5LjIgNC44IDYuNyAxMC42LTEzLjYgMzAuOC0yNy4yIDYxLjYtNDAuNyA5Mi4zLTUuNyAxMy0xMS40IDI2LTE3LjEgMzktMy45IDkgNy4xIDEyIDExIDUuNiAuMi0uNC0xLjQgNC4yIDMwLTY3LjcgMS40LTMuMSAzLjQtNC40IDYuOC00LjQgMTUuMiAuMSAzMC40IDAgNDUuNiAwIDUuNiAwIDcuOSAzLjYgNS43IDguNy04LjMgMTktMTYuNyAzNy45LTI1IDU2LjktNSAxMS40IDguMSAxMi41IDExLjMgNS4zIDAtLjEgMjcuOS02My4zIDMyLjItNzMuMiAyLTQuNiA1LjQtNi41IDEwLjMtNi41IDI2LjQgLjEgNTIuOSAwIDc5LjMgMCAxMi40IDAgMTMuOS0xMy42IDMuOS0xMy42LTI1LjMgMC01MC41IDAtNzUuOCAwLTYuMyAwLTcuOC0yLjUtNS4zLTguMyA1LjgtMTMuMSAxMS42LTI2LjEgMTcuMy0zOS4yIDEuNy00IDQuNS01LjggOC44LTUuOCAyMy4xIC4xIDI2IDAgMTMwLjggMCA2LjEgMCA4IDIuOCA1LjYgOC4zeiJdfSxvc3Q9VjFlLHNzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ5b2FzdCIsaWNvbjpbNDQ4LDUxMixbXSwiZjJiMSIsIk05MS4zIDc2bDE4NiAwLTcgMTguOS0xNzkgMGMtMzkuNyAwLTcxLjkgMzEuNi03MS45IDcwLjNsMCAyMDUuNGMwIDM1LjQgMjQuOSA3MC4zIDg0IDcwLjNsMCAxOS4xLTEyLjEgMEM0MS4yIDQ2MCAwIDQxOS44IDAgMzcwLjVMMCAxNjUuMkMwIDExNS45IDQwLjcgNzYgOTEuMyA3NnpNMzIwLjQgMjBsNjYuNSAwYy0xNDMuOCAzNzguMS0xNDUuNyAzOTguOS0xODQuNyA0MzkuMy0yMC44IDIxLjYtNDkuMyAzMS43LTc4LjMgMzIuN2wwLTUxLjFjNDkuMi03LjcgNjQuNi00OS45IDY0LjYtNzUuMyAwLTIwLjEgLjYtMTIuNi04Mi4xLTIyMy4ybDYxLjQgMCA1MC40IDE1Ni42IDEwMi4yLTI3OXpNNDQ4IDE2MS41bDAgMjk4LjUtMjE0IDBjNi42LTkuNiAxMC43LTE2LjMgMTIuMS0xOS40bDE4Mi41IDAgMC0yNzkuMWMwLTMyLjUtMTcuMS01MS45LTQ4LjItNjIuOUwzODcuMSA4MWM0MS43IDEzLjYgNjAuOSA0My4xIDYwLjkgODAuNXoiXX0sbnN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im5pbWJsciIsaWNvbjpbMzg0LDUxMixbXSwiZjVhOCIsIk0yNDYuNiAzNTMuM2EyNyAyNyAwIDEgMSAwLTU0IDI3IDI3IDAgMSAxIDAgNTR6bS03OS40LTI3YTI3LjEgMjcuMSAwIDEgMSAtNTQuMyAwIDI3LjEgMjcuMSAwIDEgMSA1NC4zIDB6TTE5MS44IDE1OUMxNTcgMTU5IDg5LjQgMTc4LjggNTkuMiAyMjdMMTQgMCAxNCAzMzUuNUMxNCA0MzMuMSA5My42IDUxMiAxOTEuOCA1MTJTMzY5LjUgNDMzIDM2OS41IDMzNS41IDI5MC4xIDE1OSAxOTEuOCAxNTl6bTAgMzA4LjFjLTczLjMgMC0xMzIuNS01OC45LTEzMi41LTEzMS42czU5LjItMTMxLjYgMTMyLjUtMTMxLjYgMTMyLjUgNTguOSAxMzIuNSAxMzEuNS01OS4zIDEzMS42LTEzMi41IDEzMS42bDAgLjF6Il19LGxzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaXhlbGZlZCIsaWNvbjpbNTEyLDUxMixbXSwiZTdkYiIsIk0yNTYgMGEyNTYgMjU2IDAgMSAxIDAgNTEyIDI1NiAyNTYgMCAxIDEgMC01MTJ6TTIzNS43IDMxMS45bDQ3IDBjNDQuMiAwIDgwLjEtMzQuOSA4MC4xLTc4cy0zNS45LTc4LTgwLjEtNzhsLTY3LjggMGMtMjUuNSAwLTQ2LjIgMjAuMS00Ni4yIDQ1bDAgMTc1LjEgNjctNjQuMXoiXX0sY3N0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InlhaG9vIixpY29uOls1MTIsNTEyLFtdLCJmMTllIiwiTTIyMy44IDE0MS4xbC01Ni43IDE0My4yLTU2LTE0My4yLTk2LjEgMCAxMDUuOCAyNDkuMS0zOC42IDg5LjggOTQuMiAwIDE0MC45LTMzOC45LTkzLjYgMHpNMzI5LjIgMjc2LjlhNTguMiA1OC4yIDAgMSAwIDAgMTE2LjQgNTguMiA1OC4yIDAgMSAwIDAtMTE2LjR6TTM5NC43IDMybC05MyAyMjMuNSAxMDQuOCAwIDkyLjYtMjIzLjUtMTA0LjQgMHoiXX0sZHN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJsdWVza3kiLGljb246WzU3Niw1MTIsW10sImU2NzEiLCJNNDA3LjggMjk0LjdjLTMuMy0uNC02LjctLjgtMTAtMS4zIDMuNCAuNCA2LjcgLjkgMTAgMS4zek0yODggMjI3LjFDMjYxLjkgMTc2LjQgMTkwLjkgODEuOSAxMjQuOSAzNS4zIDYxLjYtOS40IDM3LjUtMS43IDIxLjYgNS41IDMuMyAxMy44IDAgNDEuOSAwIDU4LjRTOS4xIDE5NCAxNSAyMTMuOWMxOS41IDY1LjcgODkuMSA4Ny45IDE1My4yIDgwLjcgMy4zLS41IDYuNi0uOSAxMC0xLjQtMy4zIC41LTYuNiAxLTEwIDEuNC05My45IDE0LTE3Ny4zIDQ4LjItNjcuOSAxNjkuOSAxMjAuMyAxMjQuNiAxNjQuOC0yNi43IDE4Ny43LTEwMy40IDIyLjkgNzYuNyA0OS4yIDIyMi41IDE4NS42IDEwMy40IDEwMi40LTEwMy40IDI4LjEtMTU2LTY1LjgtMTY5LjktMy4zLS40LTYuNy0uOC0xMC0xLjMgMy40IC40IDYuNyAuOSAxMCAxLjMgNjQuMSA3LjEgMTMzLjYtMTUuMSAxNTMuMi04MC43IDUuOS0xOS45IDE1LTEzOC45IDE1LTE1NS41cy0zLjMtNDQuNy0yMS42LTUyLjljLTE1LjgtNy4xLTQwLTE0LjktMTAzLjIgMjkuOC02Ni4xIDQ2LjYtMTM3LjEgMTQxLjEtMTYzLjIgMTkxLjh6Il19LGZzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzY3JpYmQiLGljb246WzM4NCw1MTIsW10sImYyOGEiLCJNNDIuNiAyNTIuN2MtMTYuMS0xOS0yNC43LTQ1LjktMjQuOC03OS45IDAtMTAwLjQgNzUuMi0xNTMuMSAxNjcuMi0xNTMuMSA5OC42LTEuNiAxNTYuOCA0OSAxODQuMyA3MC42bC01MC41IDcyLjEtMzcuMy0yNC42IDI2LjktMzguNmMtMzYuNS0yNC03OS40LTM2LjUtMTIzLTM1LjgtNTAuNy0uOC0xMTEuNyAyNy4yLTExMS43IDc2LjIgMCAxOC43IDExLjIgMjAuNyAyOC42IDE1LjYgMjMuMy01LjMgNDEuOSAuNiA1NS44IDE0IDI2LjQgMjQuMyAyMy4yIDY3LjYtLjcgOTEuOS0yOS4yIDI5LjUtODUuMiAyNy4zLTExNC44LTguNHptMzE3LjcgNS45Yy0xNS41LTE4LjgtMzguOS0yOS40LTYzLjItMjguNi0zOC4xLTItNzEuMSAyOC03MC41IDY3LjItLjcgMTYuOCA2IDMzIDE4LjQgNDQuMyAxNC4xIDEzLjkgMzMgMTkuNyA1Ni4zIDE0LjQgMTcuNC01LjEgMjguNi0zLjEgMjguNiAxNS42IDAgNC4zLS41IDguNS0xLjQgMTIuNy0xNi43IDQwLjktNTkuNSA2NC40LTEyMS40IDY0LjQtNTEuOSAuMi0xMDIuNC0xNi40LTE0NC4xLTQ3LjNsMzMuNy0zOS40LTM1LjYtMjcuNC02MC44IDcxLjggMTUuNCAxMy44YzUyLjUgNDYuOCAxMjAuNCA3Mi41IDE5MC43IDcyLjIgNTEuNCAwIDk0LjQtMTAuNSAxMzMuNi00NC4xIDU3LjEtNTEuNCA1NC4yLTE0OS4yIDIwLjMtMTg5LjZ6Il19LHVzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjcmVhdGl2ZS1jb21tb25zLXBkIixpY29uOls1MTIsNTEyLFtdLCJmNGVjIiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptMCA0NDkuNWMtMTM5LjIgMC0yMzUuOC0xMzgtMTkwLjItMjY3LjlsNzguOCAzNS4xYy0yLjEgMTAuNS0zLjMgMjEuNS0zLjMgMzIuOSAwIDk5IDczLjkgMTI2LjkgMTIwLjQgMTI2LjkgMjIuOSAwIDUzLjUtNi43IDc5LjQtMjkuNUwzMDUgMzExLjFjLTUuNSA2LjMtMTcuNiAxNi43LTM2LjMgMTYuNy0zNy44IDAtNTMuNy0zOS45LTUzLjktNzEuOSAyMzAuNCAxMDIuNiAyMTYuNSA5Ni41IDIxNy45IDk2LjgtMzQuMyA2Mi40LTEwMC42IDEwNC44LTE3Ni43IDEwNC44em0xOTQuMi0xNTBsLTIyNC0xMDBjMTguOC0zNCA1NC45LTMwLjcgNzQuNy0xMWw0MC40LTQxLjZjLTI3LjEtMjMuMy01OC0yNy41LTc4LjEtMjcuNS00Ny40IDAtODAuOSAyMC41LTEwMC43IDUxLjZMODcuNiAxNDUuNmMzNi4xLTU0LjkgOTguMS05MS4yIDE2OC41LTkxLjIgMTExLjEgMCAyMDEuNSA5MC40IDIwMS41IDIwMS41IDAgMTgtMi40IDM1LjQtNi44IDUyLS4zLS4xLS40LS4yLS42LS40eiJdfSxwc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZWFybHliaXJkcyIsaWNvbjpbNTEyLDUxMixbXSwiZjM5YSIsIk0zMjkuMyA0Ny41YzEuMi0xMyAyMS4zLTE0IDM2LjYtOC43IC45IC4zIDI2LjIgOS43IDE5IDE1LjItMjcuOS03LjQtNTYuNCAxOC4yLTU1LjYtNi41em0tMjAxIDYuOWMzMC43LTguMSA2MiAyMCA2MS4xLTcuMS0xLjMtMTQuMi0yMy40LTE1LjMtNDAuMi05LjYtMSAuMy0yOC43IDEwLjUtMjAuOSAxNi43ek0zMzUuNSAxNjBhMTYgMTYgMCAxIDAgMCAzMiAxNiAxNiAwIDEgMCAwLTMyem0tMTU5LjcgMGExNiAxNiAwIDEgMCAwIDMyIDE2IDE2IDAgMSAwIDAtMzJ6TTQ5NC4zIDMyMy4yYy05LjkgMjQtNDAuNyAxMS02My45LTEuMi0xMy41IDY5LjEtNTguMSAxMTEuNC0xMjYuMyAxMjQuMiAuMyAuOS0yLS4xIDI0IDEgMzMuNiAxLjQgNjMuOC0zLjEgOTcuNC04LTE5LjgtMTMuOC0xMS40LTM3LjEtOS44LTM4LjEgMS40LS45IDE0LjcgMS43IDIxLjYgMTEuNSA4LjYtMTIuNSAyOC40LTE0LjggMzAuMi0xMy42IDEuNiAxLjEgNi42IDIwLjktNi45IDM0LjYgNC43LS45IDguMi0xLjYgOS44LTIuMSAyLjYtLjggMTcuNyAxMS4zIDMuMSAxMy4zLTE0LjMgMi4zLTIyLjYgNS4xLTQ3LjEgMTAuOC00NS45IDEwLjctODUuOSAxMS44LTExNy43IDEyLjhsMSAxMS42YzMuOCAxOC4xLTIzLjQgMjQuMy0yNy42IDYuMiAuOCAxNy45LTI3LjEgMjEuOC0yOC40LTFsLS41IDUuM2MtLjcgMTguNC0yOC40IDE3LjktMjguMy0uNi03LjUgMTMuNS0yOC4xIDYuOC0yNi40LTguNWwxLjItMTIuNGMtMzYuNyAuOS01OS43IDMuMS02MS44IDMuMS0yMC45IDAtMjAuOS0zMS42IDAtMzEuNiAyLjQgMCAyNy43IDEuMyA2My4yIDIuOC02MS4xLTE1LjUtMTAzLjctNTUtMTE0LjktMTE4LjItMjUgMTIuOC01Ny41IDI2LjgtNjguMiAuOC0xMC41LTI1LjQgMjEuNS00Mi42IDY2LjgtNzMuNCAuNy02LjYgMS42LTEzLjMgMi43LTE5LjgtMTQuNC0xOS42LTExLjYtMzYuMy0xNi4xLTYwLjQtMTYuOCAyLjQtMjMuMi05LjEtMjMuNi0yMy4xIC4zLTcuMyAyLjEtMTQuOSAyLjQtMTUuNCAxLjEtMS44IDEwLjEtMiAxMi43LTIuNiA2LTMxLjcgNTAuNi0zMy4yIDkwLjktMzQuNSAxOS43LTIxLjggNDUuMi00MS41IDgwLjktNDguMy0xNS4zLTE5LjQtMy40LTM5LjktMi40LTQwLjQgMS43LS44IDIxLjIgNC4zIDI2LjMgMjMuMiA1LjItOC44IDE4LjMtMTEuNCAxOS42LTEwLjcgMS4xIC42IDYuNCAxNS00LjkgMjUuOSA0MC4zIDMuNSA3Mi4yIDI0LjcgOTYgNTAuNyAzNi4xIDEuNSA3MS44IDUuOSA3Ny4xIDM0IDIuNyAuNiAxMS42IC44IDEyLjcgMi42IC4zIC41IDIuMSA4LjEgMi40IDE1LjQtLjUgMTMuOS02LjggMjUuNC0yMy42IDIzLjEtMy4yIDE3LjMtMi43IDMyLjktOC43IDQ3LjcgMi40IDExLjcgNCAyMy44IDQuOCAzNi40IDM3IDI1LjQgNzAuMyA0Mi41IDYwLjMgNjYuOXpNMjIzLjUgMTU5LjljLjktNDQtMzcuOS00Mi4yLTc4LjYtNDAuMy0yMS43IDEtMzguOSAxLjktNDUuNSAxMy45LTExLjQgMjAuOSA1LjkgOTIuOSAyMy4yIDEwMS4yIDkuOCA0LjcgNzMuNCA3LjkgODYuMy03LjEgOC4yLTkuNCAxNS00OS40IDE0LjYtNjcuN3ptNTIgNTguM2MtNC4zLTEyLjQtNi0zMC4xLTE1LjMtMzIuNy0yLS41LTktLjUtMTEgMC0xMCAyLjgtMTAuOCAyMi4xLTE3IDM3LjIgMTUuNCAwIDE5LjMgOS43IDIzLjcgOS43IDQuMyAwIDYuMy0xMS4zIDE5LjYtMTQuMnptMTM1LjctODQuN2MtNi42LTEyLjEtMjQuOC0xMi45LTQ2LjUtMTMuOS00MC4yLTEuOS03OC4yLTMuOC03Ny4zIDQwLjMtLjUgMTguMyA1IDU4LjMgMTMuMiA2Ny44IDEzIDE0LjkgNzYuNiAxMS44IDg2LjMgNy4xIDE1LjgtNy42IDM2LjUtNzguOSAyNC4zLTEwMS4zeiJdfSxVMWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLW9kbm9rbGFzc25pa2kiLGljb246WzQ0OCw1MTIsWyJvZG5va2xhc3NuaWtpLXNxdWFyZSJdLCJmMjY0IiwiTTIyNCAxMzcuMWMtNS40LS4zLTEwLjggLjYtMTUuOSAyLjRzLTkuNyA0LjgtMTMuNiA4LjUtNyA4LjItOS4yIDEzLjItMy4yIDEwLjMtMy4yIDE1LjcgMS4xIDEwLjggMy4yIDE1LjcgNS4zIDkuNSA5LjIgMTMuMiA4LjYgNi42IDEzLjYgOC41IDEwLjUgMi43IDE1LjkgMi40YzUuNCAuMyAxMC44LS42IDE1LjktMi40czkuNy00LjggMTMuNi04LjUgNy04LjIgOS4yLTEzLjIgMy4yLTEwLjMgMy4yLTE1LjctMS4xLTEwLjgtMy4yLTE1LjctNS4zLTkuNS05LjItMTMuMi04LjYtNi42LTEzLjYtOC41LTEwLjUtMi43LTE1LjktMi40ek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHpNMjI0IDI1OGE4MSA4MSAwIDEgMSAwLTE2Mi4xIDgxIDgxIDAgMSAxIDAgMTYyLjF6bTU5LjMgNi4yYzE2LjgtMTMuMiAyOS41LTUuNSAzNC4xIDMuNiA3LjggMTYtMS4xIDIzLjctMjEuNSAzNy0xNy4xIDEwLjktNDAuNyAxNS4yLTU2LjIgMTYuOGwxMyAxMi45IDQ3LjcgNDcuN2MxNy40IDE3LjktMTEgNDUuOC0yOC42IDI4LjYtMTItMTIuMi0yOS41LTI5LjctNDcuNy00Ny45bC00Ny43IDQ3LjljLTE3LjcgMTcuMi00Ni0xMS0yOC40LTI4LjYgMy43LTMuNyA3LjktNy45IDEyLjUtMTIuNSAxMC40LTEwLjQgMjIuNi0yMi43IDM1LjItMzUuMmwxMi45LTEyLjljLTE1LjQtMS42LTM5LjMtNS43LTU2LjYtMTYuOC0yMC4zLTEzLjMtMjkuMy0yMC45LTIxLjQtMzcgNC42LTkuMSAxNy4zLTE2LjggMzQuMS0zLjYgMCAwIDIyLjcgMTggNTkuMyAxOHM1OS4zLTE4IDU5LjMtMTh6Il19LGhzdD1VMWUsbXN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1hcmtkb3duIixpY29uOls2NDAsNTEyLFtdLCJmNjBmIiwiTTU5My44IDU5LjFsLTU0Ny42IDBDMjAuNyA1OS4xIDAgNzkuOCAwIDEwNS4yTDAgNDA2LjdjMCAyNS41IDIwLjcgNDYuMiA0Ni4yIDQ2LjJsNTQ3LjcgMGMyNS41IDAgNDYuMi0yMC43IDQ2LjEtNDYuMWwwLTMwMS42YzAtMjUuNC0yMC43LTQ2LjEtNDYuMi00Ni4xek0zMzguNSAzNjAuNmwtNjEuNSAwIDAtMTIwLTYxLjUgNzYuOS02MS41LTc2LjkgMCAxMjAtNjEuNyAwIDAtMjA5LjIgNjEuNSAwIDYxLjUgNzYuOSA2MS41LTc2LjkgNjEuNSAwIDAgMjA5LjIgLjIgMHptMTM1LjMgMy4xbC05Mi4zLTEwNy43IDYxLjUgMCAwLTEwNC42IDYxLjUgMCAwIDEwNC42IDYxLjUgMC05Mi4yIDEwNy43eiJdfSxnc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidHlwbzMiLGljb246WzQ0OCw1MTIsW10sImY0MmIiLCJNMTc4LjcgNzguNGMwLTI0LjcgNS40LTMyLjQgMTMuOS0zOS40LTY5LjUgOC41LTE0OS4zIDM0LTE3Ni4zIDY2LjQtNS40IDcuNy05LjMgMjAuOC05LjMgMzcuMSAwIDEwMy41IDEwNi44IDMzNy41IDE4NC4xIDMzNy41IDM2LjMgMCA5Ny4zLTU5LjUgMTQ2LjctMTM5LTcgMi4zLTExLjYgMi4zLTE4LjUgMi4zLTU3LjIgMC0xNDAuNi0xOTguNS0xNDAuNi0yNjQuOXpNMzAxLjUgMzJjLTMwLjEgMC00MS43IDUuNC00MS43IDM2LjMgMCA2Ni40IDUzLjggMTk4LjUgMTAxLjcgMTk4LjUgMjYuMyAwIDc4LjgtOTkuNyA3OC44LTE4Mi4zIDAtNDAuOS02Ny01Mi41LTEzOC44LTUyLjV6Il19LHhzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJqb29tbGEiLGljb246WzQ0OCw1MTIsW10sImYxYWEiLCJNLjYgOTIuMWMwLTMzLjMgMjYuOC02MC4xIDU5LjgtNjAuMSAzMCAwIDU0LjUgMjEuOSA1OS4yIDUwLjIgMzIuNi03LjYgNjcuMSAuNiA5Ni41IDMwbC00NC4zIDQ0LjNjLTIwLjUtMjAuNS00Mi42LTE2LjMtNTUuNC0zLjUtMTQuMyAxNC4zLTE0LjMgMzcuOSAwIDUyLjJsOTkuNSA5OS41LTQ0IDQ0LjNjLTg3LjctODcuMi00OS43LTQ5LjctOTkuOC05OS43LTI2LjgtMjYuNS0zNS02NC44LTI0LjgtOTguOS0yNi45LTUuOC00Ni43LTI5LjctNDYuNy01OC4zek0xMzAuMSAyMDguNWw0NC4zIDQ0LjNjMTAtMTAgODkuNy04OS43IDk5LjctOTkuOCAxNC4zLTE0LjMgMzcuNi0xNC4zIDUxLjkgMCAxMi44IDEyLjggMTcgMzUtMy41IDU1LjRsNDQgNDQuM2MzMS4yLTMxLjIgMzguNS02Ny42IDI4LjktMTAxLjIgMjkuMi00LjEgNTEuOS0yOS4yIDUxLjktNTkuNSAwLTMzLjItMjYuOC02MC4xLTU5LjgtNjAuMS0zMC4zIDAtNTUuNCAyMi41LTU5LjUgNTEuNi0zMy44LTkuOS03MS43LTEuNS05OC4zIDI1LjEtMTguMyAxOS4xLTcxLjEgNzEuNS05OS42IDk5Ljl6TTM5Ni40IDM2MC43YzguMi0zMi43LS45LTY4LjUtMjYuMy05My45LTExLjgtMTIuMiA1IDQuNy05OS41LTk5LjdsLTQ0LjMgNDQuMyA5OS43IDk5LjdjMTQuMyAxNC4zIDE0LjMgMzcuNiAwIDUxLjktMTIuOCAxMi44LTM1IDE3LTU1LjQtMy41bC00NCA0NC4zYzI3LjYgMzAuMiA2OCAzOC44IDEwMi43IDI4IDUuNSAyNy40IDI5LjcgNDguMSA1OC45IDQ4LjEgMzMgMCA1OS44LTI2LjggNTkuOC02MC4xIDAtMzAuMi0yMi41LTU1LTUxLjYtNTkuMXptLTg0LjMtNTMuMWwtNDQtNDQuM2MtODcgODYuNC01MC40IDUwLjQtOTkuNyA5OS44LTE0LjMgMTQuMy0zNy42IDE0LjMtNTEuOSAwLTEzLjEtMTMuNC0xNi45LTM1LjMgMy4yLTU1LjRsLTQ0LTQ0LjNjLTMwLjIgMzAuMi0zOCA2NS4yLTI5LjUgOTguMy0yNi43IDYtNDYuMiAyOS45LTQ2LjIgNTguMiAwIDMzLjMgMjYuOCA2MC4xIDU5LjggNjAuMSAyOC42IDAgNTIuNS0xOS44IDU4LjYtNDYuNyAzMi43IDguMiA2OC41LS42IDk0LjItMjYgMzIuMS0zMiAxMi4yLTEyLjQgOTkuNS05OS43eiJdfSxic3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2VpeGluIixpY29uOls1NzYsNTEyLFtdLCJmMWQ3IiwiTTM4NS4yIDE2Ny42YzYuNCAwIDEyLjYgLjMgMTguOCAxLjEtMTYuNi03OC40LTEwMC43LTEzNi43LTE5Ni4zLTEzNi43LTEwNy4yIDAtMTk0LjcgNzIuOC0xOTQuNyAxNjUuNCAwIDUzLjQgMjkuMyA5Ny41IDc3LjkgMTMxLjZsLTE5LjMgNTguNiA2OC0zNC4xYzI0LjQgNC44IDQzLjggOS43IDY4LjIgOS43IDYuMiAwIDEyLjEtLjMgMTguMy0uOC00LTEyLjktNi4yLTI2LjYtNi4yLTQwLjgtLjEtODQuOSA3Mi45LTE1NCAxNjUuMy0xNTR6TTI4MC43IDExNC43YzE0LjUgMCAyNC4yIDkuNyAyNC4yIDI0LjQgMCAxNC41LTkuNyAyNC4yLTI0LjIgMjQuMi0xNC44IDAtMjkuMy05LjctMjkuMy0yNC4yIC4xLTE0LjcgMTQuNi0yNC40IDI5LjMtMjQuNHpNMTQ0LjMgMTYzLjNjLTE0LjUgMC0yOS4zLTkuNy0yOS4zLTI0LjIgMC0xNC44IDE0LjgtMjQuNCAyOS4zLTI0LjQgMTQuOCAwIDI0LjQgOS43IDI0LjQgMjQuNCAwIDE0LjYtOS42IDI0LjItMjQuNCAyNC4yek01NjMgMzE5LjRjMC03Ny45LTc3LjktMTQxLjMtMTY1LjQtMTQxLjMtOTIuNyAwLTE2NS40IDYzLjQtMTY1LjQgMTQxLjNTMzA1IDQ2MC43IDM5Ny42IDQ2MC43YzE5LjMgMCAzOC45LTUuMSA1OC42LTkuOWw1My40IDI5LjMtMTQuOC00OC42QzUzNCA0MDIuMSA1NjMgMzYzLjIgNTYzIDMxOS40ek0zNDMuOSAyOTQuOWMtOS43IDAtMTkuMy05LjctMTkuMy0xOS42IDAtOS43IDkuNy0xOS4zIDE5LjMtMTkuMyAxNC44IDAgMjQuNCA5LjcgMjQuNCAxOS4zIDAgMTAtOS43IDE5LjYtMjQuNCAxOS42em0xMDcuMSAwYy05LjcgMC0xOS4zLTkuNy0xOS4zLTE5LjYgMC05LjcgOS43LTE5LjMgMTkuMy0xOS4zIDE0LjUgMCAyNC40IDkuNyAyNC40IDE5LjMgLjEgMTAtOS45IDE5LjYtMjQuNCAxOS42eiJdfSx2c3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ3J1bnQiLGljb246WzM4NCw1MTIsW10sImYzYWQiLCJNNjEuNiAxODkuM2MtMS4xIDEwIDUuMiAxOS4xIDUuMiAxOS4xIC43LTcuNSAyLjItMTIuOCA0LTE2LjYgLjQgMTAuMyAzLjIgMjMuNSAxMi44IDM0LjEgNi45IDcuNiAzNS42IDIzLjMgNTQuOSA2LjEgMSAyLjQgMi4xIDUuMyAzIDguNSAyLjkgMTAuMy0yLjcgMjUuMy0yLjcgMjUuM3MxNS4xLTE3LjEgMTMuOS0zMi41YzEwLjgtLjUgMjEuNC04LjQgMjEuMS0xOS41IDAgMC0xOC45IDEwLjQtMzUuNS04LjgtOS43LTExLjItNDAuOS00Mi04My4xLTMxLjggNC4zIDEgOC45IDIuNCAxMy41IDQuMWwtLjEgMGMtNC4yIDItNi41IDcuMS03IDEyem0yOC4zLTEuOGMxOS41IDExIDM3LjQgMjUuNyA0NC45IDM3LTUuNyAzLjMtMjEuNyAxMC40LTM4LTEuNy0xMC4zLTcuNi05LjgtMjYuMi02LjktMzUuM3pNMjMyIDIzMy4zYy0xLjIgMTUuNSAxMy45IDMyLjUgMTMuOSAzMi41cy01LjYtMTUtMi43LTI1LjNjLjktMy4yIDItNiAzLTguNSAxOS4zIDE3LjMgNDggMS41IDU0LjgtNi4xIDkuNi0xMC42IDEyLjMtMjMuOCAxMi44LTM0LjEgMS44IDMuOCAzLjQgOS4xIDQgMTYuNiAwIDAgNi40LTkuMSA1LjItMTkuMS0uNi01LTIuOS0xMC03LTExLjhsLS4xIDBjNC42LTEuOCA5LjItMy4yIDEzLjUtNC4xLTQyLjMtMTAuMi03My40IDIwLjYtODMuMSAzMS44LTE2LjcgMTkuMi0zNS41IDguOC0zNS41IDguOC0uMiAxMC45IDEwLjQgMTguOSAyMS4yIDE5LjN6bTYyLjctNDUuOGMzIDkuMSAzLjQgMjcuNy03IDM1LjQtMTYuMyAxMi4xLTMyLjIgNS0zNy45IDEuNiA3LjUtMTEuNCAyNS40LTI2IDQ0LjktMzd6bS0xMzQuNCAyMzFsLTI5LjQgMGMtNS41IDAtOC4yIDEuNi05LjUgMi45LTEuOSAyLTIuMiA0LjctLjkgOC4xIDMuNSA5LjEgMTEuNCAxNi41IDEzLjcgMTguNiAzLjEgMi43IDcuNSA0LjMgMTEuOCA0LjMgNC40IDAgOC4zLTEuNyAxMS00LjYgNy41LTguMiAxMS45LTE3LjEgMTMtMTkuOCAuNi0xLjUgMS4zLTQuNS0uOS02LjgtMS44LTEuOC00LjctMi43LTguOC0yLjd6TTM0OS41IDMxNy4zYy0yLjQgMTcuOS0xMyAzMy44LTI0LjYgNDMuNy0zLjEtMjIuNy0zLjctNTUuNS0zLjctNjIuNCAwLTE0LjcgOS41LTI0LjUgMTIuMi0yNi4xIDIuNS0xLjUgNS40LTMgOC4zLTQuNiAxOC05LjYgNDAuNC0yMS42IDQwLjQtNDMuNyAwLTE2LjItOS4zLTIzLjItMTUuNC0yNy44LS44LS42LTEuNS0xLjEtMi4yLTEuNy0yLjEtMS43LTMuNy0zLTQuMy00LjQtNC40LTkuOC0zLjYtMzQuMi0xLjctMzcuNiAuNi0uNiAxNi43LTIwLjkgMTEuOC0zOS4yLTItNy40LTYuOS0xMy4zLTE0LjEtMTctNS4zLTIuNy0xMS45LTQuMi0xOS41LTQuNS0uMS0yLS41LTMuOS0uOS01LjktLjYtMi42LTEuMS01LjMtLjktOC4xIC40LTQuNyAuOC05IDIuMi0xMS4zIDguNC0xMy4zIDI4LjgtMTcuNiAyOS0xNy42bDEyLjMtMi40LTguMS05LjVjLS4xLS4yLTE3LjMtMTcuNS00Ni4zLTE3LjUtNy45IDAtMTYgMS4zLTI0LjEgMy45LTI0LjIgNy44LTQyLjkgMzAuNS00OS40IDM5LjMtMy4xLTEtNi4zLTEuOS05LjYtMi43LTQuMi0xNS44IDktMzguNSA5LTM4LjVzLTEzLjYtMy0zMy43IDE1LjJjLTIuNi02LjUtOC4xLTIwLjUtMS44LTM3LjItMjkuNSAxMC40LTM2LjkgMjYuMy0zOS4xIDQwLjctNy42LTUuNC02LjctMjMuMS03LjItMjcuNi03LjUgLjktMjkuMiAyMS45LTI4LjIgNDguMy0yIC41LTMuOSAxLjEtNS45IDEuNy02LjUtOC44LTI1LjEtMzEuNS00OS40LTM5LjMtNy45LTIuMi0xNi0zLjUtMjMuOS0zLjUtMjkgMC00Ni4xIDE3LjMtNDYuMyAxNy41bC04LjEgOS40IDEyLjMgMi40Yy4yIDAgMjAuNiA0LjMgMjkgMTcuNiAxLjQgMi4yIDEuOCA2LjYgMi4yIDExLjMgLjIgMi44LS40IDUuNS0uOSA4LjEtLjQgMS45LS44IDMuOS0uOSA1LjktNy43IC4zLTE0LjIgMS44LTE5LjUgNC41LTcuMiAzLjctMTIuMSA5LjYtMTQuMSAxNy01IDE4LjIgMTEuMiAzOC41IDExLjggMzkuMiAxLjkgMy40IDIuNyAyNy44LTEuNyAzNy42LS42IDEuNC0yLjIgMi43LTQuMyA0LjQtLjcgLjUtMS40IDEuMS0yLjIgMS43LTYuMSA0LjYtMTUuNCAxMS43LTE1LjQgMjcuOCAwIDIyLjEgMjIuNCAzNC4xIDQwLjQgNDMuNyAzIDEuNiA1LjggMy4xIDguMyA0LjYgMi43IDEuNiAxMi4yIDExLjQgMTIuMiAyNi4xIDAgNi45LS42IDM5LjctMy43IDYyLjQtMTEuNi05LjktMjIuMi0yNS45LTI0LjYtNDMuOCAwIDAtMjkuMiAyMi42LTIwLjYgNzAuOCA1LjIgMjkuNSAyMy4yIDQ2LjEgNDcgNTQuNyA4LjggMTkuMSAyOS40IDQ1LjcgNjcuMyA0OS42IDE0LjQgMTEuOCAzNC40IDE5LjUgNjMuNiAxOS41bC4yIDBjMjkuMSAwIDQ5LjEtNy43IDYzLjYtMTkuNSAzNy45LTMuOSA1OC41LTMwLjUgNjcuMy00OS42IDIzLjgtOC43IDQxLjctMjUuMiA0Ny01NC43IDguMi00OC40LTIxLjEtNzAuOS0yMS4xLTcwLjl6TTMwNiAzNy43YzUuNi0xLjggMTEuNi0yLjcgMTcuNy0yLjcgMTEgMCAxOS45IDMgMjQuNyA1LTMuMSAxLjQtNi40IDMuMi05LjcgNS4zLTIuNC0uNC01LjYtLjgtOS4yLS44LTEwLjUgMC0yMC41IDMuMS0yOC43IDguOS0xMi4zIDguNy0xOCAxNi45LTIwLjcgMjIuNC0yLjItMS4zLTQuNS0yLjUtNy4xLTMuNy0xLjYtLjgtMy4xLTEuNS00LjctMi4yIDYuMS05LjEgMTkuOS0yNi41IDM3LjctMzIuMnptMjEgMTguMmMtLjggMS0xLjYgMi4xLTIuMyAzLjItMy4zIDUuMi0zLjkgMTEuNi00LjQgMTcuOC0uNSA2LjQtMS4xIDEyLjUtNC40IDE3LTQuMiAuOC04LjEgMS43LTExLjUgMi43LTIuMy0zLjEtNS42LTctMTAuNS0xMS4yIDEuNC00LjggNS41LTE2LjEgMTMuNS0yMi41IDUuNi00LjMgMTIuMi02LjcgMTkuNi03ek00NS45IDQ1LjNjLTMuMy0yLjItNi42LTQtOS43LTUuMyA0LjgtMiAxMy43LTUgMjQuNy01IDYuMSAwIDEyIC45IDE3LjcgMi43IDE3LjggNS44IDMxLjYgMjMuMiAzNy43IDMyLjEtMS42IC43LTMuMiAxLjQtNC44IDIuMi0yLjUgMS4yLTQuOSAyLjUtNy4xIDMuNy0yLjYtNS40LTguMy0xMy43LTIwLjctMjIuNC04LjMtNS44LTE4LjItOC45LTI4LjgtOC45LTMuNCAuMS02LjYgLjUtOSAuOXpNOTAuNiA4NS40Yy00LjkgNC4yLTguMyA4LTEwLjUgMTEuMi0zLjQtLjktNy4zLTEuOS0xMS41LTIuNy0zLjMtNC40LTMuOC0xMC41LTQuMy0xNi45LS41LTYuMi0xLjEtMTIuNi00LjQtMTcuOC0uNy0xLjEtMS41LTIuMi0yLjMtMy4yIDcuNCAuMyAxNCAyLjYgMTkuNSA3IDggNi4zIDEyLjEgMTcuNiAxMy41IDIyLjR6TTU4LjQgMjU5LjljLTIuNy0xLjYtNS42LTMuMS04LjQtNC42LTE0LjktOC0zMC4yLTE2LjMtMzAuMi0zMC41IDAtMTEuMSA0LjMtMTQuNiA4LjktMTguMmwuNS0uNGMuNy0uNiAxLjQtMS4yIDIuMi0xLjgtLjkgNy4yLTEuOSAxMy4zLTIuNyAxNC45IDAgMCAxMi4xLTE1IDE1LjctNDQuMyAxLjQtMTEuNS0xLjEtMzQuMy01LjEtNDMgLjIgNC45IDAgOS44LS4zIDE0LjQtLjQtLjgtLjgtMS42LTEuMy0yLjItMy4yLTQtMTEuOC0xNy41LTkuNC0yNi42IC45LTMuNSAzLjEtNiA2LjctNy44IDMuOC0xLjkgOC44LTIuOSAxNS4xLTIuOSAxMi4zIDAgMjUuOSAzLjcgMzIuOSA2IDI1LjEgOCA1NS40IDMwLjkgNjQuMSAzNy43IC4yIC4yIC40IC4zIC40IC4zbDUuNiAzLjktMy41LTUuOGMtLjItLjMtMTkuMS0zMS40LTUzLjItNDYuNSAyLTIuOSA3LjQtOC4xIDIxLjYtMTUuMSAyMS40LTEwLjUgNDYuNS0xNS44IDc0LjMtMTUuOCAyNy45IDAgNTIuOSA1LjMgNzQuMyAxNS44IDE0LjIgNi45IDE5LjYgMTIuMiAyMS42IDE1LjEtMzQgMTUuMS01Mi45IDQ2LjItNTMuMSA0Ni41bC0zLjUgNS44IDUuNi0zLjlzLjItLjEgLjQtLjNjOC43LTYuOCAzOS0yOS44IDY0LjEtMzcuNyA3LTIuMiAyMC42LTYgMzIuOS02IDYuMyAwIDExLjMgMSAxNS4xIDIuOSAzLjUgMS44IDUuNyA0LjQgNi43IDcuOCAyLjUgOS4xLTYuMSAyMi42LTkuNCAyNi42LS41IC42LS45IDEuMy0xLjMgMi4yLS4zLTQuNi0uNS05LjUtLjMtMTQuNC00IDguOC02LjUgMzEuNS01LjEgNDMgMy42IDI5LjMgMTUuNyA0NC4zIDE1LjcgNDQuMy0uOC0xLjYtMS44LTcuNy0yLjctMTQuOSAuNyAuNiAxLjUgMS4yIDIuMiAxLjhsLjUgLjRjNC42IDMuNyA4LjkgNy4xIDguOSAxOC4yIDAgMTQuMi0xNS40IDIyLjUtMzAuMiAzMC41LTIuOSAxLjUtNS43IDMuMS04LjQgNC42LTguNyA1LTE4IDE2LjctMTkuMSAzNC4yLS45IDE0LjYgLjkgNDkuOSAzLjQgNzUuOS0xMi40IDQuOC0yNi43IDYuNC0zOS43IDYuOC0yLTQuMS0zLjktOC41LTUuNS0xMy4xLS43LTItMTkuNi01MS4xLTI2LjQtNjIuMiA1LjUgMzkgMTcuNSA3My43IDIzLjUgODkuNi0zLjUtLjUtNy4zLS43LTExLjctLjdsLTExNyAwYy00LjQgMC04LjMgLjMtMTEuNyAuNyA2LTE1LjkgMTguMS01MC42IDIzLjUtODkuNi02LjggMTEuMi0yNS43IDYwLjMtMjYuNCA2Mi4yLTEuNiA0LjYtMy41IDktNS41IDEzLjEtMTMtLjQtMjcuMi0yLTM5LjctNi44IDIuNS0yNiA0LjMtNjEuMiAzLjQtNzUuOS0uOS0xNy40LTEwLjMtMjkuMi0xOS0zNC4yek0zNS4xIDQwNC42Yy0xMi4xLTIwLTguNy01NC4xLTMuNy01OS4xIDEwLjkgMzQuNCA0Ny4yIDQ0LjMgNzQuNCA0NS40LTIuNyA0LjItNS4yIDcuNi03IDEwbC0xLjQgMS40Yy03LjIgNy44LTguNiAxOC41LTQuMSAzMS44LTIyLjctLjEtNDYuMy05LjgtNTguMi0yOS41em00NS43IDQzLjVjNiAxLjEgMTIuMiAxLjkgMTguNiAyLjQgMy41IDggNy40IDE1LjkgMTIuMyAyMy4xLTE0LjQtNS45LTI0LjQtMTYtMzAuOS0yNS41em0xMTEuNSA1MC4xYy02MC42LS4xLTc4LjMtNDUuOC04NC45LTY0LjctMy43LTEwLjUtMy40LTE4LjIgLjktMjMuMSAyLjktMy4zIDkuNS03LjIgMjQuNi03LjJsMTE4LjggMGMxNS4xIDAgMjEuOCAzLjkgMjQuNiA3LjIgNC4yIDQuOCA0LjUgMTIuNiAuOSAyMy4xLTYuNiAxOC44LTI0LjMgNjQuNi04NC45IDY0Ljd6bTgwLjYtMjQuNmM0LjktNy4yIDguOC0xNS4xIDEyLjMtMjMuMSA2LjQtLjUgMTIuNi0xLjMgMTguNi0yLjQtNi41IDkuNS0xNi41IDE5LjYtMzAuOSAyNS41em03Ni42LTY5Yy0xMiAxOS43LTM1LjYgMjkuMy01OC4xIDI5LjcgNC41LTEzLjMgMy4xLTI0LjEtNC4xLTMxLjgtLjQtLjUtLjktMS0xLjQtMS41LTEuOC0yLjQtNC4zLTUuOC03LTEwIDI3LjItMS4yIDYzLjUtMTEgNzQuNC00NS40IDUgNSA4LjQgMzkuMS0zLjggNTl6TTE5Mi4yIDE4Ny43bC4yIDBjMTIuNy0uMSAyNy4yLTE3LjggMjcuMi0xNy44LTkuOSA2LTE4LjggOC4xLTI3LjMgOC4zLTguNS0uMi0xNy40LTIuMy0yNy4zLTguMyAwIDAgMTQuNSAxNy42IDI3LjIgMTcuOHptNjEuNyAyMzAuN2wtMjkuNCAwYy00LjIgMC03LjIgLjktOC45IDIuNy0yLjIgMi4zLTEuNSA1LjItLjkgNi43IDEgMi42IDUuNSAxMS4zIDEzIDE5LjMgMi43IDIuOSA2LjYgNC41IDExIDQuNXM4LjctMS42IDExLjgtNC4yYzIuMy0yIDEwLjItOS4yIDEzLjctMTguMSAxLjMtMy4zIDEtNi0uOS03LjktMS4zLTEuMy00LTIuOS05LjQtM3oiXX0seXN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InJvY2tybXMiLGljb246WzUxMiw1MTIsW10sImYzZTkiLCJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MTMuNCA0MjcuNWwtOTAgMC0xMTItMTMxLjNjLTE3LjktMjAuNC0zLjktNTYuMSAyNi42LTU2LjFsNzUuMyAwLTg0LjYtOTkuMy04NC4zIDk4LjktOTAgMCAxNDcuMS0xNzIuNWMxNC40LTE4LjQgNDEuMy0xNy4zIDU0LjUgMEw0MTMuNyAyNTIuM2MxOSAyMi44IDIgNTcuMi0yNy42IDU2LjEtLjYgMC03NC4yIC4yLTc0LjIgLjJMNDEzLjQgNDI3LjV6Il19LHdzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1bnNwbGFzaCIsaWNvbjpbNDQ4LDUxMixbXSwiZTA3YyIsIk00NDggMjMwLjJsMCAyNDkuOC00NDggMCAwLTI0OS44IDE0MS4xIDAgMCAxMjQuOSAxNjUuNyAwIDAtMTI0LjkgMTQxLjEgMHpNMzA2LjkgMzJsLTE2NS43IDAgMCAxMjQuOSAxNjUuNyAwIDAtMTI0Ljl6Il19LGoxZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtaW5zdGFncmFtIixpY29uOls0NDgsNTEyLFsiaW5zdGFncmFtLXNxdWFyZSJdLCJlMDU1IiwiTTE5NC40IDIxMS43YTUzLjMgNTMuMyAwIDEgMCA1OS4yIDg4LjYgNTMuMyA1My4zIDAgMSAwIC01OS4yLTg4LjZ6bTE0Mi4zLTY4LjRjLTUuMi01LjItMTEuNS05LjMtMTguNC0xMi0xOC4xLTcuMS01Ny42LTYuOC04My4xLTYuNS00LjEgMC03LjkgLjEtMTEuMiAuMXMtNy4yIDAtMTEuNC0uMWMtMjUuNS0uMy02NC44LS43LTgyLjkgNi41LTYuOSAyLjctMTMuMSA2LjgtMTguNCAxMnMtOS4zIDExLjUtMTIgMTguNGMtNy4xIDE4LjEtNi43IDU3LjctNi41IDgzLjIgMCA0LjEgLjEgNy45IC4xIDExLjFzMCA3LS4xIDExLjFjLS4yIDI1LjUtLjYgNjUuMSA2LjUgODMuMiAyLjcgNi45IDYuOCAxMy4xIDEyIDE4LjRzMTEuNSA5LjMgMTguNCAxMmMxOC4xIDcuMSA1Ny42IDYuOCA4My4xIDYuNSA0LjEgMCA3LjktLjEgMTEuMi0uMXM3LjIgMCAxMS40IC4xYzI1LjUgLjMgNjQuOCAuNyA4Mi45LTYuNSA2LjktMi43IDEzLjEtNi44IDE4LjQtMTJzOS4zLTExLjUgMTItMTguNGM3LjItMTggNi44LTU3LjQgNi41LTgzIDAtNC4yLS4xLTguMS0uMS0xMS40czAtNy4xIC4xLTExLjRjLjMtMjUuNSAuNy02NC45LTYuNS04My0yLjctNi45LTYuOC0xMy4xLTEyLTE4LjRsMCAuMnptLTY3LjEgNDQuNWMxOC4xIDEyLjEgMzAuNiAzMC45IDM0LjkgNTIuMnMtLjIgNDMuNS0xMi4zIDYxLjZjLTYgOS0xMy43IDE2LjYtMjIuNiAyMi42cy0xOSAxMC4xLTI5LjYgMTIuMmMtMjEuMyA0LjItNDMuNS0uMi02MS42LTEyLjNzLTMwLjYtMzAuOS0zNC45LTUyLjIgLjItNDMuNSAxMi4yLTYxLjYgMzAuOS0zMC42IDUyLjItMzQuOSA0My41IC4yIDYxLjYgMTIuMmwuMSAwem0yOS4yLTEuM2MtMy4xLTIuMS01LjYtNS4xLTcuMS04LjZzLTEuOC03LjMtMS4xLTExLjEgMi42LTcuMSA1LjItOS44IDYuMS00LjUgOS44LTUuMiA3LjYtLjQgMTEuMSAxLjEgNi41IDMuOSA4LjYgNyAzLjIgNi44IDMuMiAxMC42YzAgMi41LS41IDUtMS40IDcuM3MtMi40IDQuNC00LjEgNi4yLTMuOSAzLjItNi4yIDQuMi00LjggMS41LTcuMyAxLjVjLTMuOCAwLTcuNS0xLjEtMTAuNi0zLjJsLS4xIDB6TTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0zNTcgMzg5Yy0xOC43IDE4LjctNDEuNCAyNC42LTY3IDI1LjktMjYuNCAxLjUtMTA1LjYgMS41LTEzMiAwLTI1LjYtMS4zLTQ4LjMtNy4yLTY3LTI1LjlzLTI0LjYtNDEuNC0yNS44LTY3Yy0xLjUtMjYuNC0xLjUtMTA1LjYgMC0xMzIgMS4zLTI1LjYgNy4xLTQ4LjMgMjUuOC02N3M0MS41LTI0LjYgNjctMjUuOGMyNi40LTEuNSAxMDUuNi0xLjUgMTMyIDAgMjUuNiAxLjMgNDguMyA3LjEgNjcgMjUuOHMyNC42IDQxLjQgMjUuOCA2N2MxLjUgMjYuMyAxLjUgMTA1LjQgMCAxMzEuOS0xLjMgMjUuNi03LjEgNDguMy0yNS44IDY3bDAgLjF6Il19LE1zdD1qMWUsenN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZpcnN0LW9yZGVyLWFsdCIsaWNvbjpbNTEyLDUxMixbXSwiZjUwYSIsIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTAgNy44YTI0MC4yIDI0MC4yIDAgMSAxIDAgNDgwLjQgMjQwLjIgMjQwLjIgMCAxIDEgMC00ODAuNHptMCAyMC41YTIxOS43IDIxOS43IDAgMSAwIDAgNDM5LjQgMjE5LjcgMjE5LjcgMCAxIDAgMC00MzkuNHptMCA4LjJhMjExLjUgMjExLjUgMCAxIDEgMCA0MjMgMjExLjUgMjExLjUgMCAxIDEgMC00MjN6bTE4Ni4yIDI2MGMtNC40IDE3LjEtMTEuMiAzMy41LTIwLjEgNDguN2wtNzQuMS0zNS45IDYxLjUgNTQuOGMtMTAuNiAxNC4xLTIzLjIgMjYuNi0zNy4yIDM3LjNsLTU0LjgtNjEuNiAzNS45IDc0LjNjLTE1LjIgOS0zMS42IDE1LjgtNDguNiAyMC4ybC0yNy4zLTc4LjUgNC44IDgyLjljLTguNiAxLjItMTcuNCAxLjgtMjYuMyAxLjhzLTE3LjctLjYtMjYuMy0xLjhsNC44LTgyLjUtMjcuMiA3OGMtMTcuMS00LjUtMzMuNC0xMS4zLTQ4LjctMjAuMmwzNS45LTc0LjMtNTQuOSA2MS42Yy0xNC0xMC43LTI2LjYtMjMuMi0zNy4yLTM3LjNsNjEuNi01NC45LTc0LjMgMzUuOUM4MC43IDMzOCA3NCAzMjEuNyA2OS41IDMwNC42bDc3LjgtMjcuMS04Mi4yIDQuOGMtMS4yLTguNi0xLjgtMTcuMy0xLjgtMjYuMiAwLTkgLjYtMTcuOCAxLjgtMjYuNWw4Mi40IDQuOC03Ny45LTI3LjJjNC41LTE3LjEgMTEuMy0zMy41IDIwLjItNDguN2w3NC4yIDM1LjktNjEuNS01NC45YzEwLjctMTQgMjMuMi0yNi42IDM3LjMtMzcuMmw1NC44IDYxLjUtMzUuOC03NC4yYzE1LjItOC45IDMxLjYtMTUuNyA0OC42LTIwLjFsMjYuOSA3Ny4yLTQuNy04MS42YzguNi0xLjIgMTcuNC0xLjggMjYuMy0xLjhzMTcuNyAuNiAyNi4zIDEuOGwtNC43IDgyLjIgMjctNzcuOGMxNy4zIDQuNSAzMy42IDExLjQgNDguNiAyMC4ybC0zNS44IDc0LjEgNTQuNy02MS41YzE0LjEgMTAuNyAyNi42IDIzLjIgMzcuMiAzNy4ybC02MS40IDU0LjggNzQuMS0zNS45YzguOSAxNS4yIDE1LjcgMzEuNiAyMC4yIDQ4LjZsLTc3LjggMjcuMSA4Mi4yLTQuN2MxLjIgOC43IDEuOCAxNy41IDEuOCAyNi41IDAgOC45LS42IDE3LjYtMS44IDI2LjJsLTgyLjEtNC43IDc3LjcgMjcuMXoiXX0sa3N0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZ1bGNydW0iLGljb246WzI1Niw1MTIsW10sImY1MGIiLCJNNjMuOCAxNjQuMUwyOC40IDIwNy43LTcgMTY0LjEgMjguNCAxMjAuNiA2My44IDE2NC4xek0xMTIuMiAwbC0yMC41IDE5OC4yLTUxIDU3LjggNTEgNTcuOCAyMC41IDE5OC4yIDAtMjExLjEtNDEuMS00NC45IDQxLjEtNDQuOSAwLTIxMS4xem03OS43IDE2NC4xbDM1LjQgNDMuNiAzNS40LTQzLjYtMzUuNC00My41LTM1LjQgNDMuNXptLTQ4LjUgNDdsNDEuMSA0NC45LTQxLjEgNDQuOSAwIDIxMS4xIDIwLjYtMTk4LjIgNTEtNTcuOC01MS01Ny44LTIwLjYtMTk4LjIgMCAyMTEuMXoiXX0sU3N0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJyYXZlLXJldmVyc2UiLGljb246WzQ0OCw1MTIsW10sImU2M2QiLCJNMjk4LjUgMGMzIDAgNS44IDEuMyA3LjggMy42bDM4LjEgNDRjLjUtLjEgMS0uMiAxLjUtLjMgOS4yLTEuNiAxOC42LTIuMiAyNy43LTEuMiAxMS42IDEuNCAyMS41IDUuNCAyOC45IDEyLjkgNy43IDcuOCAxNS40IDE1LjggMjIuNiAyMy42IDIuNSAyLjcgNC45IDUuMiA2LjkgNy40IC43IC44IDEuNCAxLjUgMS45IDIgMy40IDMuNyA0LjIgOC4xIDIuNyAxMS45bC05LjggMjQuNiAxMy4xIDM4LjFjLjcgMiAuOCA0LjEgLjIgNi4yLS4xIC40LS4xIC40LS41IDIuMWwtMS41IDUuOGMtMS42IDYuMy0zLjUgMTMuMy01LjQgMjAuOS01LjYgMjEuNi0xMS4yIDQzLjItMTYuNCA2My40LTEyLjkgNDkuOS0yMS40IDgyLjctMjMuNCA5MC45LTExLjEgNDQuNS0xOS45IDYwLTQ4LjMgODAuMy0yNC45IDE3LjgtNzYuOCA1My42LTg2LjggNjAtMSAuNi0yIDEuMy0zLjQgMi4zLS41IC40LTMuMiAyLjItMy45IDIuNy00LjkgMy4zLTguMyA1LjUtMTIuMSA3LjMtNC43IDIuMi05LjMgMy41LTEzLjkgMy41cy05LjEtMS4yLTEzLjktMy41Yy0zLjctMS44LTcuMi0zLjktMTIuMS03LjMtLjgtLjUtMy40LTIuNC0zLjktMi43LTEuNC0xLTIuNS0xLjctMy40LTIuMy0xMC02LjQtNjEuOS00Mi4xLTg2LjgtNjAtMjguNC0yMC40LTM3LjItMzUuOC00OC4zLTgwLjMtMi04LjItMTAuNS00MS0yMy4zLTkwLjUtNS4zLTIwLjYtMTAuOS00Mi4yLTE2LjUtNjMuOC0yLTcuNi0zLjgtMTQuNi01LjQtMjAuOWwtMS41LTUuOC0uNS0yLjFjLS41LTItLjQtNC4yIC4yLTYuMmwxMy4xLTM4LjEtOS45LTI0LjVjLTEuNS0zLjgtLjctOC4yIDItMTEuMiAxLjItMS4zIDEuOC0yIDIuNi0yLjggMi0yLjIgNC40LTQuNyA2LjktNy40IDcuMy03LjcgMTUtMTUuNyAyMi43LTIzLjUgNy40LTcuNSAxNy4zLTExLjYgMjguOS0xMi45IDkuMS0xLjEgMTguNS0uNSAyNy43IDEuMiAuNSAuMSAxIC4yIDEuNSAuM2wzOC4xLTQ0YzItMi40IDQuOC0zLjcgNy44LTMuN2wxNDggMHptLTQuNyAyMS4xbC0xMzguNiAwLTM5LjEgNDUuMWMtMi42IDMtNi43IDQuMy0xMC42IDMuMi0uMi0uMS0uNy0uMi0xLjUtLjQtMS4zLS4zLTIuOS0uNi00LjUtLjktNy40LTEuMy0xNC45LTEuOC0yMS43LTEtNy4zIC45LTEzIDMuMi0xNi42IDYuOS03LjYgNy43LTE1LjIgMTUuNi0yMi4zIDIzLjMtMS43IDEuOC0zLjMgMy41LTQuOCA1LjFsOC44IDIyYzEgMi40IDEgNSAuMiA3LjVMMjkuNyAxNzAuNmMuNCAxLjQgLjUgMS45IDEuMiA0LjggMS42IDYuMyAzLjUgMTMuMyA1LjQgMjAuOSA1LjYgMjEuNiAxMS4yIDQzLjIgMTYuNCA2My40IDEyLjkgNTAgMjEuNCA4Mi44IDIzLjQgOTEgMTAuMSA0MC4xIDE2LjQgNTEuMyA0MC4yIDY4LjMgMjQuNiAxNy42IDc2LjMgNTMuMiA4NS45IDU5LjMgMS4yIC44IDIuNSAxLjYgNCAyLjcgLjYgLjQgMy4yIDIuMiAzLjkgMi43IDQgMi44IDYuNyA0LjQgOS4yIDUuNiAyLjIgMSAzLjkgMS41IDUuMSAxLjVzMi45LS41IDUuMS0xLjVjMi41LTEuMiA1LjItMi44IDkuMi01LjYgLjctLjUgMy4zLTIuMyAzLjktMi43IDEuNi0xLjEgMi44LTEuOSA0LTIuNyA5LjYtNi4xIDYxLjMtNDEuNyA4NS45LTU5LjMgMjMuOC0xNy4xIDMwLjItMjguMiA0MC4xLTY4LjMgMi4xLTguMyAxMC41LTQxLjEgMjMuMy05MC43IDUuMy0yMC42IDEwLjktNDIuMiAxNi41LTYzLjggMi03LjYgMy44LTE0LjYgNS40LTIwLjkgLjctMi45IC45LTMuNCAxLjItNC44bC0xMy4zLTM4LjhjLS44LTIuNC0uOC01LjEgLjItNy41bDguOC0yMmMtMS41LTEuNi0zLjEtMy4zLTQuOC01LjEtNy4yLTcuNi0xNC43LTE1LjUtMjIuMy0yMy4zLTMuNy0zLjctOS4zLTYtMTYuNi02LjktNi44LS44LTE0LjQtLjMtMjEuNyAxLTEuNyAuMy0zLjIgLjYtNC41IC45LS44IC4yLTEuMyAuMy0xLjUgLjQtMy44IDEuMS03LjktLjItMTAuNi0zLjJMMjkzLjggMjEuMXpNMjI0LjUgMzE2YzIuOCAwIDIwLjkgNi41IDM1LjQgMTQuMXMyNSAxMyAyOC4zIDE1LjIgMS4zIDYuMi0xLjcgOC40LTQ0LjEgMzQuNi00OC4xIDM4LjItOS44IDkuNS0xMy44IDkuNS05LjgtNS45LTEzLjgtOS41LTQ1LjEtMzYtNDguMS0zOC4yLTUuMS02LjItMS43LTguNCAxMy45LTcuNSAyOC4zLTE1LjIgMzIuNS0xNC4xIDM1LjQtMTQuMWwtLjIgMHptLjEtMjMwLjdjLjcgMCA4LjggLjIgMjAuNSA0LjIgMTIuMyA0LjIgMjUuNyA5LjQgMzEuOSA5LjRzNTEuOS04LjkgNTEuOS04LjkgNTQuMiA2Ni43IDU0LjIgODEtNi44IDE4LTEzLjcgMjUuNC0zNi44IDM5LjgtNDAuNyA0My45LTExLjkgMTAuNS03LjEgMjEuOCAxMS43IDI1LjggMy45IDQwLjQtMjEgMjQuNC0yOS40IDIyLjgtMjguNC0xMi4yLTM1LjctMTcuMS0zMC41LTI0LjMtMzAuNS0zMS44IDI0LTIwLjggMjguNC0yMy45IDI0LjctMTQuOCAyNS4xLTE5LjQgLjMtNi01LjctMTcuNC0xNi43LTI2LjctMTQuOS0zNi44IDE5LjEtMTUuNCAzMS41LTIwLjIgMzYuMi0xMy43IDM5LjItMTUuMSAyLjItMi43LTYuOC0zLjYtMzQuNi00LjMtNDYuMS0xLjEtMzEuMiA4LjItMzIuOCAxMC45LTMgMi43LTEuNCAxMS44IDEwLjEgNTIuOCAxMC45IDYwLjYgMi40IDEyLjktNS44IDE0LjgtMjIuMSA1LjItMjYuOCA1LjItMTguNi0zLjMtMjYuOC01LjItNi42LTctNS44LTE0LjggOS4zLTUxLjUgMTAuOS02MC42IC4yLTkuMi0xLjQtMTEuOC0yMS4zLTcuNi0zMi44LTEwLjktMzcuMSAuMi00Ni4xIDEuMS05LjggMi4yLTYuOCAzLjYgMjYuOCAxMC40IDM5LjIgMTUuMSAyOS43IDEwIDMxLjUgMjAuMi05IDI1LjQtMTQuOSAzNi44LTYuMSAxMi44LTUuNyAxNy40IDIwLjYgMTYuNCAyNS4xIDE5LjQgMjguNCAxNi40IDI4LjQgMjMuOS0yMy4yIDI3LTMwLjUgMzEuOC0yNy4yIDE1LjQtMzUuNyAxNy4xLTIxLjctOC4yLTI5LjQtMjIuOC0uOC0yOS4xIDMuOS00MC40LTMuMy0xNy43LTcuMS0yMS44LTMzLjgtMzYuNS00MC43LTQzLjktMTMuNy0xMS4yLTEzLjctMjUuNCA1NC4yLTgxIDU0LjItODEgNDUuOCA4LjkgNTEuOSA4LjkgMTkuNS01LjIgMzEuOS05LjQgMjAuNi00LjIgMjAuNi00LjJsLS4zIDB6Il19LENzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhdmlhbmV4IixpY29uOls1MTIsNTEyLFtdLCJmMzc0IiwiTTQ1My4yIDMybC0zMTIgMEMxMDIuMyAzMiA2NSA2My4yIDU3LjkgMTAxLjdMMS4zIDQxMC4zQy01LjggNDQ4LjggMjAgNDgwIDU5IDQ4MGwzMTIgMGMzOC45IDAgNzYuMi0zMS4yIDgzLjMtNjkuN0w1MTEgMTAxLjhDNTE4IDYzLjIgNDkyLjIgMzIgNDUzLjIgMzJ6TTM5NSAzNzkuM2wtMzIgMTMuNS0xMTUuNC0xMTBjLTE0LjcgMTAtMjkuMiAxOS41LTQxLjcgMjcuMWwyMi4xIDY0LjItMTcuOSAxMi43LTQwLjYtNjEtNTIuNC00OC4xIDE1LjctMTUuNCA1OCAzMS4xYzkuMy0xMC41IDIwLjgtMjIuNiAzMi44LTM0LjlsLTIwLjUtMjkuNi02OC44LTk5LjggMTguOC0yOC45IDguOS00LjggMTAzLjEgMTEyLjQgNC45IDQuNWMxOS40LTE4LjggMzMuOC0zMi40IDMzLjgtMzIuNCA3LjctNi41IDIxLjUtMi45IDMwLjcgNy45IDkgMTAuNSAxMC42IDI0LjcgMi43IDMxLjMtMS44IDEuMy0xNS41IDExLjQtMzUuMyAyNS42bDQuNSA3LjMgOTQuOSAxMTkuNC02LjMgNy45eiJdfSxMc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibnM4IixpY29uOls2NDAsNTEyLFtdLCJmM2Q1IiwiTTEwNC4zIDI2OS4ybDI2LjEgMCAwLTI2LjItMjYuMSAwIDAgMjYuMnpNMTU2LjggMjQzbC0uMS0yNi4yIDAtLjljLS4yLTEwLjQtNC40LTIwLjMtMTEuOS0yNy42cy0xNy41LTExLjMtMjcuOS0xMS4xLTIwLjMgNC40LTI3LjYgMTEuOC0xMS4zIDE3LjUtMTEuMiAyNy45bDAgLjIgMjYuNCAwIDAtLjJjLjEtMy40IDEuNS02LjYgMy45LTlzNS43LTMuNyA5LjEtMy43IDYuNyAxLjMgOS4xIDMuNyAzLjggNS42IDMuOSA5bDAgMjYuMiAyNi4zIDB6bTUyLjQgMjUuOGMwIDEyLTIuNCAyMy44LTYuOSAzNC45cy0xMS4zIDIxLjEtMTkuNyAyOS42LTE4LjUgMTUuMi0yOS42IDE5LjctMjIuOSA2LjktMzQuOSA2LjlsLS42IDBjLTI0LjIgMC00Ny4zLTkuNi02NC40LTI2LjdTMjYuMyAyOTMgMjYuMyAyNjguOGwtMjYuMyAwIDAgLjJjMCAxNS40IDMuMSAzMC43IDkgNDQuOXMxNC42IDI3LjIgMjUuNSAzOC4xIDIzLjkgMTkuNSAzOC4xIDI1LjQgMjkuNSA4LjkgNDQuOSA4LjlsLjggMGMxNS40IDAgMzAuNy0zIDQ0LjktOXMyNy4yLTE0LjYgMzguMS0yNS41IDE5LjUtMjMuOCAyNS40LTM4LjEgOC45LTI5LjUgOC45LTQ0LjlsMC0yNi0yNi4zIDAgMCAyNnptLTE1Ny4yIDBjLjEgMTcuMyA3IDMzLjkgMTkuMiA0Ni4xczI4LjggMTkuMSA0Ni4xIDE5LjEgMzMuOS02LjkgNDYuMS0xOS4xIDE5LjItMjguOCAxOS4yLTQ2LjFsLTI2LjMgMGMtLjIgMTAuMi00LjQgMjAtMTEuNyAyNy4ycy0xNy4xIDExLjItMjcuNCAxMS4yLTIwLjEtNC0yNy40LTExLjItMTEuNS0xNi45LTExLjctMjcuMmwwLTI2LTI2LjMgMCAwLTI2LjZjLjMtMTcuMyA3LjQtMzMuOCAxOS43LTQ1LjhzMjktMTguOCA0Ni4zLTE4LjYgMzMuOCA3LjIgNDUuOSAxOS41IDE4LjkgMjguOSAxOC45IDQ2LjJsMCAyNS4zIDI2LjMgMCAwLTI1LjNjMC0yNC4zLTkuNy00Ny43LTI2LjktNjQuOXMtNDAuNS0yNi45LTY0LjktMjYuOS00Ny43IDkuNy02NC45IDI2LjktMjYuOSA0MC41LTI2LjkgNjQuOWwwIDI1LjQgMjYuMyAwIDAgMjZ6bTQxOC40LTcxLjJjMTMuNyAwIDI0LjYgNi42IDMwLjEgMTguM2wuNyAxLjUgMjMuMi0xMS41LS42LTEuNGMtOC0xOS4zLTI4LjUtMzEuMy01My40LTMxLjMtMjMuMSAwLTQzLjYgMTEuNC01MSAyOC40LS4xIDI2LjktLjIgMjMuOSAwIDI0LjggNC43IDExIDE0LjYgMTkuNCAyOC43IDI0LjIgNi41IDIgMTMuMSAzLjMgMTkuOCA0IDUuNSAuNyAxMC42IDEuNCAxNS44IDMuMSA2LjQgMi4xIDEwLjUgNS4zIDEyLjggOS44bDAgOS45Yy0zLjcgNy41LTEzLjggMTIuMy0yNS44IDEyLjMtMTQuMyAwLTI2LTYuOS0zMS45LTE5bC0uNy0xLjUtMjMgMTEuNSAuNiAxLjRjNy45IDE5LjQgMjkuNiAzMiA1NS4zIDMyIDIzLjYgMCA0NC42LTExLjQgNTIuMy0yOC40bC4yLTI1LjktLjItLjdjLTQuOS0xMS0xNS4yLTE5LjYtMjguOS0yNC4yLTcuNy0yLjctMTQuMy0zLjYtMjAuNy00LjQtNS0uNS0xMC0xLjUtMTQuOC0yLjktNi4zLTEuOS0xMC40LTUuMS0xMi42LTkuNmwwLTguNGMzLjQtNy40IDEyLjktMTIuMSAyNC4yLTEyLjFsMCAwek0yODcuNiAzMTEuM2wyNi4xIDAgMC02OC40LTI2LjEgMCAwIDY4LjR6TTYzOS44IDI1OGMtMi45LTYuMy04LjMtMTItMTUuNC0xNi43IDUuNi0zLjggMTAuMS05LjEgMTMtMTUuM2wuMi0yNS4zLS4yLS43Yy03LjQtMTYtMjYuNy0yNi43LTQ4LjItMjYuN1M1NDguNSAxODQgNTQxLjEgMjAwbC0uMiAyNS4zIC4yIC43YzIuOSA2LjEgNy40IDExLjQgMTMgMTUuMy03LjIgNC43LTEyLjUgMTAuNS0xNS40IDE2LjdsLS4yIDI4LjkgLjIgLjdjNy42IDE2IDI3LjkgMjYuNyA1MC42IDI2LjdzNDMuMS0xMC43IDUwLjYtMjYuN2wuMi0yOC45LS4yLS43em0tNzMuMi01MC44YzMuNi02LjMgMTIuNi0xMC41IDIyLjYtMTAuNXMxOSA0LjIgMjIuNiAxMC41bDAgMTMuN2MtMy41IDYuMi0xMi42IDEwLjMtMjIuNiAxMC4zcy0xOS4xLTQuMi0yMi42LTEwLjNsMC0xMy43em00Ny4zIDcyLjJjLTMuOCA2LjYtMTMuMyAxMC45LTI0LjcgMTAuOS0xMS4xIDAtMjEtNC40LTI0LjctMTAuOWwwLTE2LjJjMy43LTYuMyAxMy41LTEwLjUgMjQuNy0xMC41IDExLjMgMCAyMC45IDQuMSAyNC43IDEwLjVsMCAxNi4yek0zNzYuNCAyNjZsLTU5LjgtODkuNy0yOSAwIDAgNDAuNiAyNi41IDAgMCAuNCA2Mi41IDk0LjEgMjUuNyAwIDAtMTM1LjEtMjUuOSAwIDAgODkuN3oiXX0sVzFlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1waW50ZXJlc3QiLGljb246WzQ0OCw1MTIsWyJwaW50ZXJlc3Qtc3F1YXJlIl0sImYwZDMiLCJNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNzIuNiAwLTIuMi0uOGMtNS40LTQ4LjEtMy4xLTU3LjUgMTUuNy0xMzQuNyAzLjktMTYgOC41LTM1IDEzLjktNTcuOSAwIDAtNy4zLTE0LjgtNy4zLTM2LjUgMC03MC43IDc1LjUtNzggNzUuNS0yNSAwIDEzLjUtNS40IDMxLjEtMTEuMiA0OS44LTMuMyAxMC42LTYuNiAyMS41LTkuMSAzMi01LjcgMjQuNSAxMi4zIDQ0LjQgMzYuNCA0NC40IDQzLjcgMCA3Ny4yLTQ2IDc3LjItMTEyLjQgMC01OC44LTQyLjMtOTkuOS0xMDIuNi05OS45LTY5LjkgMC0xMTAuOSA1Mi40LTExMC45IDEwNi42IDAgMjEuMSA4LjIgNDMuNyAxOC4zIDU2IDIgMi40IDIuMyA0LjUgMS43IDctMS4xIDQuNy0zLjEgMTIuOS00LjcgMTkuMi0xIDQtMS44IDcuMy0yLjEgOC42LTEuMSA0LjUtMy41IDUuNS04LjIgMy4zLTMwLjYtMTQuMy00OS44LTU5LjEtNDkuOC05NS4xIDAtNzcuNSA1Ni4yLTE0OC42IDE2Mi4yLTE0OC42IDg1LjIgMCAxNTEuNCA2MC43IDE1MS40IDE0MS44IDAgODQuNi01My4zIDE1Mi43LTEyNy40IDE1Mi43LTI0LjkgMC00OC4zLTEyLjktNTYuMy0yOC4yIDAgMC0xMi4zIDQ2LjktMTUuMyA1OC40LTUgMTkuMy0xNy42IDQyLjktMjcuNCA1OS4zTDM4NCA0ODBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6Il19LFRzdD1XMWUsX3N0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJsdWV0b290aC1iIixpY29uOlsyNTYsNTEyLFtdLCJmMjk0IiwiTTE2NC45IDI2MEwyNTcuNSAxNTYuNyAxMTEuNiAwIDExMS42IDIwNi4zIDI1LjQgMTIwLjItNiAxNTEuNiAxMDIuMSAyNjAtNiAzNjguNCAyNS40IDM5OS44IDExMS42IDMxMy43IDExNC4zIDUxMiAyNjIuOCAzNjMuNCAxNjQuOSAyNjB6bTQwLjktMTAzbC01MCA1MC0uMy0xMDAuMyA1MC4zIDUwLjN6bS01MCAxNTZsNTAgNTAtNTAuMyA1MC4zIC4zLTEwMC4zeiJdfSxBc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ3JpcGZpcmUiLGljb246WzMyMCw1MTIsW10sImYzYWMiLCJNODAuNSAzMDEuNGMwLTczLjggMTA1LjEtMTIyLjUgMTA1LjEtMjAzIDAtNDcuMS0zNC04OC0zOS4xLTkwLjQgLjQgMy4zIC42IDYuNyAuNiAxMCAwIDkyLjEtMTQ3LjEgMTUzLjktMTQ3LjEgMjY4LjYgMCA0OS44IDMyLjIgNzkuMiA2Ni41IDEwOC4zIDY1LjEgNDYuNyA3OC4xIDcxLjQgNzguMSA4Ni42IDAgMTAuMS00LjggMTctNC44IDIyLjMgMTMuMS0xNi43IDE3LjQtMzEuOSAxNy41LTQ2LjQgMC0yOS42LTIxLjctNTYuMy00NC4yLTg2LjUtMTYtMjIuMy0zMi42LTQyLjYtMzIuNi02OS41em0yMDUuMy0zOWMtMTIuMS02Ni44LTc4LTEyNC40LTk0LjctMTMwLjlsNCA3LjJjMi40IDUuMSAzLjQgMTAuOSAzLjQgMTcuMSAwIDQ0LjctNTQuMiAxMTEuMi01Ni42IDExNi43LTIuMiA1LjEtMy4yIDEwLjUtMy4yIDE1LjggMCAyMC4xIDE1LjIgNDIuMSAxNy45IDQyLjEgMi40IDAgNTYuNi01NS40IDU4LjEtODcuNyA2LjQgMTEuNyA5LjEgMjIuNiA5LjEgMzMuNCAwIDQxLjItNDEuOCA5Ni45LTQxLjggOTYuOSAwIDExLjYgMzEuOSA1My4yIDM1LjUgNTMuMiAxIDAgMi4yLTEuNCAzLjItMi40IDM3LjktMzkuMyA2Ny4zLTg1IDY3LjMtMTM2LjggMC04LS43LTE2LjItMi4yLTI0LjZ6Il19LEcxZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtZ29vZ2xlLXBsdXMiLGljb246WzQ0OCw1MTIsWyJnb29nbGUtcGx1cy1zcXVhcmUiXSwiZjBkNCIsIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNNjQgMjU2YzAtNTUuMyA0NC43LTEwMCAxMDAtMTAwIDI3IDAgNDkuNSA5LjggNjcgMjYuMmwtMjcuMSAyNi4xYy03LjQtNy4xLTIwLjMtMTUuNC0zOS44LTE1LjQtMzQuMSAwLTYxLjkgMjguMi02MS45IDYzLjIgMCAzNC45IDI3LjggNjMuMiA2MS45IDYzLjIgMzkuNiAwIDU0LjQtMjguNSA1Ni44LTQzLjFsLTU2LjkgMCAwLTM0LjQgOTQuNCAwYzEgNSAxLjYgMTAuMSAxLjYgMTYuNiAwIDU3LjEtMzguMyA5Ny42LTk2IDk3LjYtNTUuMyAwLTEwMC00NC43LTEwMC0xMDB6bTI5MSAxOC4ybDAgMjktMjkuMiAwIDAtMjktMjkgMCAwLTI5LjIgMjkgMCAwLTI5IDI5LjIgMCAwIDI5IDI5IDAgMCAyOS4yLTI5IDB6Il19LCRzdD1HMWUsRHN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFwcC1zdG9yZSIsaWNvbjpbNTEyLDUxMixbXSwiZjM2ZiIsIk0yNTUuOSAxMjAuOWw5LjEtMTUuN2M1LjYtOS44IDE4LjEtMTMuMSAyNy45LTcuNXMxMy4xIDE4LjEgNy41IDI3LjlsLTg3LjUgMTUxLjUgNjMuMyAwYzIwLjUgMCAzMiAyNC4xIDIzLjEgNDAuOGwtMTg1LjUgMGMtMTEuMyAwLTIwLjQtOS4xLTIwLjQtMjAuNHM5LjEtMjAuNCAyMC40LTIwLjRsNTIgMCA2Ni42LTExNS40LTIwLjgtMzYuMWMtNS42LTkuOC0yLjMtMjIuMiA3LjUtMjcuOSA5LjgtNS42IDIyLjItMi4zIDI3LjkgNy41bDguOSAxNS43em0tNzguNyAyMThsLTE5LjYgMzRjLTUuNiA5LjgtMTguMSAxMy4xLTI3LjkgNy41cy0xMy4xLTE4LjEtNy41LTI3LjlsMTQuNi0yNS4yYzE2LjQtNS4xIDI5LjgtMS4yIDQwLjQgMTEuNnptMTY4LjktNjEuN2w1My4xIDBjMTEuMyAwIDIwLjQgOS4xIDIwLjQgMjAuNFM0MTAuNSAzMTggMzk5LjIgMzE4bC0yOS41IDAgMTkuOSAzNC41YzUuNiA5LjggMi4zIDIyLjItNy41IDI3LjktOS44IDUuNi0yMi4yIDIuMy0yNy45LTcuNS0zMy41LTU4LjEtNTguNy0xMDEuNi03NS40LTEzMC42LTE3LjEtMjkuNS00LjktNTkuMSA3LjItNjkuMSAxMy40IDIzIDMzLjQgNTcuNyA2MC4xIDEwNHpNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MCAyNTZhMjE2IDIxNiAwIDEgMSA0MzIgMCAyMTYgMjE2IDAgMSAxIC00MzIgMHoiXX0sRXN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6IndpeCIsaWNvbjpbNjQwLDUxMixbXSwiZjVjZiIsIk0zOTMuNCAxMzEuN2MwIDEzIDIuMSAzMi43LTI4LjcgNDMuOC05LjUgMy40LTE2IDkuNy0xNiA5LjcgMC0zMSA0LjctNDIuMiAxNy40LTQ4LjkgOS44LTUuMSAyNy4yLTQuNiAyNy4yLTQuNnpNMjc3LjYgMTY3LjJsLTM0LjIgMTMyLjctMjguNS0xMDguNmMtNy43LTMyLTIwLjgtNDguNS00OC40LTQ4LjUtMjcuNCAwLTQwLjcgMTYuMi00OC40IDQ4LjVMODkuNSAyOTkuOSA1NS4zIDE2Ny4yQzQ5LjcgMTQwLjUgMjMuOSAxMjkgMCAxMzJMNjUuNiAzNzkuOXMyMS42IDEuNiAzMi41LTRjMTQuMi03LjIgMjEtMTIuOCAyOS42LTQ2LjYgNy43LTMwLjEgMjkuMS0xMTguNCAzMS4xLTEyNC43IDQuOC0xNC45IDExLjEtMTMuOCAxNS40IDAgMiA2LjMgMjMuNSA5NC42IDMxLjEgMTI0LjcgOC42IDMzLjcgMTUuNCAzOS4zIDI5LjYgNDYuNiAxMC44IDUuNSAzMi41IDQgMzIuNSA0TDMzMi45IDEzMmMtMjQuNC0zLjEtNDkuOCA4LjktNTUuMyAzNS4zem0xMTUuOCA1LjJzLTQuMSA2LjMtMTMuNSAxMS42Yy02IDMuNC0xMS44IDUuNi0xOCA4LjYtMTUuMSA3LjMtMTMuMiAxMy45LTEzLjIgMzUuMmwwIDE1Mi4xczE2LjYgMi4xIDI3LjQtMy40YzEzLjktNy4xIDE3LjEtMTQgMTcuMy00NC44bDAtMTUwLjMgMCAwIDAtOXptMTYzLjQgODQuMUw2NDAgMTMyLjhzLTM1LjEtNi01Mi41IDkuOGMtMTMuMyAxMi4xLTI0LjQgMjkuNi01NC4yIDcyLjUtLjUgLjctNi4zIDEwLjUtMTMuMSAwLTI5LjMtNDIuMi00MC44LTYwLjMtNTQuMi03Mi41LTE3LjQtMTUuOC01Mi41LTkuOC01Mi41LTkuOGw4My4yIDEyMy43LTgzIDEyMy40czM2LjYgNC42IDU0LTExLjJjMTEuNS0xMC41IDE3LjYtMjAuNCA1Mi41LTcwLjcgNi44LTEwLjUgMTIuNi0uOCAxMy4xIDAgMjkuNCA0Mi40IDM5LjIgNTguMSA1My4xIDcwLjcgMTcuNCAxNS44IDUzLjMgMTEuMiA1My4zIDExLjJsLTgzLTEyMy40eiJdfSxOc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaW50ZXJjb20iLGljb246WzQ0OCw1MTIsW10sImY3YWYiLCJNMzkyIDMyTDU2IDMyQzI1LjEgMzIgMCA1Ny4xIDAgODhMMCA0MjRjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzM2IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC0zMzZjMC0zMC45LTI1LjEtNTYtNTYtNTZ6TTI4My43IDExNC4xYzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTk5LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0xOTkuNXptLTc0LjYtNy41YzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMjE2LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0yMTYuNXptLTc0LjcgNy41YzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTk5LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0xOTkuNXpNNTkuNyAxNDRjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAxMzQuM2MwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTEzNC4zek0zODMuMSAzNzEuOGMtNzIuOCA2My0yNDEuNyA2NS40LTMxOC4xIDAtMTUtMTIuOCA0LjQtMzUuNSAxOS40LTIyLjcgNjUuOSA1NS4zIDIxNi4xIDUzLjkgMjc5LjMgMCAxNC45LTEyLjkgMzQuMyA5LjggMTkuNCAyMi43em01LjItOTMuNWMwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTEzNC4zYzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTM0LjN6Il19LFBzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyZWFjdGV1cm9wZSIsaWNvbjpbNTc2LDUxMixbXSwiZjc1ZCIsIk0yNTAuNyAyMTEuN2w1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMS0uMS0yLjMtNi44LTIuMyA2LjgtNy4yIC4xIDUuNyA0LjMtMiA2Ljh6bTYzLjcgMGw1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMi0uMS0yLjMtNi44LTIuMyA2LjgtNy4yIC4xIDUuNyA0LjMtMS45IDYuOHptLTkxLjMgNTAuNWwtMy40IDBjLTQuOCAwLTMuOCA0LTMuOCAxMi4xIDAgNC43LTIuMyA2LjEtNS44IDYuMXMtNS44LTEuNC01LjgtNi4xbDAtMzYuNmMwLTQuNyAyLjMtNi4xIDUuOC02LjFzNS44IDEuNCA1LjggNi4xYzAgNy4yLS43IDEwLjUgMy44IDEwLjVsMy40IDBjNC43LS4xIDMuOC0zLjkgMy44LTEyLjMgMC05LjktNi43LTE0LjEtMTYuOC0xNC4xbC0uMiAwYy0xMC4xIDAtMTYuOCA0LjItMTYuOCAxNC4xbDAgNDAuMWMwIDEwLjQgNi43IDE0LjEgMTYuOCAxNC4xbC4yIDBjMTAuMSAwIDE2LjgtMy44IDE2LjgtMTQuMSAwLTkuOSAxLjEtMTMuOC0zLjgtMTMuOHptLTgwLjcgMTcuNGwtMTQuNyAwIDAtMTkuMyAxMS40IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMi4xYzAtMi41LTEuMy0zLjgtMy44LTMuOGwtMTEuNCAwIDAtMTguMyAxNC40IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMi4xYzAtMi41LTEuMy0zLjgtMy44LTMuOGwtMjEuNyAwYy0yLjQtLjEtMy43IDEuMy0zLjcgMy44bDAgNTkuMWMwIDIuNSAxLjMgMy44IDMuOCAzLjhsMjEuOSAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIuMWMwLTIuNS0xLjMtMy44LTMuOC0zLjh6bS00Mi0xOC41YzQuNi0yIDcuMy02IDcuMy0xMi40bDAtMTEuOWMwLTEwLjEtNi43LTE0LjEtMTYuOC0xNC4xbC0xMy40IDBjLTIuNSAwLTMuOCAxLjMtMy44IDMuOGwwIDU5LjFjMCAyLjUgMS4zIDMuOCAzLjggMy44bDMuNCAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIyLjkgNS42IDAgNy40IDIzLjVjLjIgMSAuOCAxLjggMS42IDIuNHMxLjggLjkgMi43IC44bDMuMyAwYzIuOCAwIDQtMS44IDMuMi00LjRsLTguMS0yMy45em0tMy44LTE0YzAgNC44LTIuNSA2LjEtNi4xIDYuMWwtNS44IDAgMC0yMC45IDUuOCAwYzMuNiAwIDYuMSAxLjMgNi4xIDYuMWwwIDguN3pNMTc2LjEgMjI2Yy0uMS0uNS0uMi0xLS40LTEuNHMtLjYtLjgtMS0xLjEtLjgtLjYtMS4zLS43LTEtLjItMS41LS4xbC02LjkgMGMtLjUgMC0xIDAtMS40IC4ycy0uOSAuNC0xLjMgLjctLjcgLjctLjkgMS4xLS40IC45LS40IDEuNGwtMTEgNTkuMmMtLjUgMi43IC45IDQuMSAzLjQgNC4xbDMgMGMuNSAuMSAxIDAgMS41LS4ycy45LS40IDEuMy0uNyAuNy0uNyAuOS0xLjIgLjQtLjkgLjQtMS40bDEuOC0xMS4zIDEyLjIgMCAxLjggMTEuM2MwIC41IC4yIDEgLjQgMS40cy41IC45IC45IDEuMiAuOCAuNiAxLjMgLjcgMSAuMiAxLjUgLjJsMy41IDBjMi42IDAgMy45LTEuNCAzLjQtNC4xTDE3Ni4xIDIyNnptLTEyLjMgMzkuM2w0LjctMjkuNyA0LjcgMjkuNy05LjQgMHptODkuMyAyMC4ybDAtNTMuMiA3LjUgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMC0yLjFjMC0yLjUtMS4zLTMuOC0zLjgtMy44bC0yNS44IDBjLTIuNSAwLTMuOCAxLjMtMy44IDMuOGwwIDIuMWMwIDIuNSAxLjMgMy44IDMuOCAzLjhsNy4zIDAgMCA1My4yYzAgMi41IDEuMyAzLjggMy44IDMuOGwzLjQgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMCAwem0yNDgtLjhsLTE5LjQgMCAwLTI2LjcgMTYuMSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTE2LjEgMCAwLTI1LjggMTkuMSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTIyLjIgMGMtLjMtLjEtLjUtLjEtLjggMHMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjctLjEgLjUtLjEgLjhsMCA2M2MwIC4zIDAgLjUgLjEgLjhzLjIgLjUgLjQgLjYgLjQgLjMgLjcgLjQgLjUgLjEgLjggLjFsMjIuNSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNiAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsMCAwek00MDggMjIxLjhsLS44IDBjLTEwLjEgMC0xNS4zIDQuNy0xNS4zIDE0LjFsMCA0MC4xYzAgOS4zIDUuMiAxNC4xIDE1LjMgMTQuMWwuOCAwYzEwLjEgMCAxNS4zLTQuOCAxNS4zLTE0LjFsMC00MC4xYzAtOS40LTUuMi0xNC4xLTE1LjMtMTQuMWwwIDB6bTEwLjIgNTIuNGMtLjEgOC0zIDExLjEtMTAuNSAxMS4xcy0xMC41LTMuMS0xMC41LTExLjFsMC0zNi42YzAtNy45IDMtMTEuMSAxMC41LTExLjFzMTAuNSAzLjIgMTAuNSAxMS4xbDAgMzYuNnptLTQ2LjUtMTQuNWM2LjEtMS42IDkuMi02LjEgOS4yLTEzLjNsMC05LjdjMC05LjQtNS4yLTE0LjEtMTUuMy0xNC4xbC0xMy43IDBjLS4zIDAtLjUgMC0uOCAuMXMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjYtLjEgLjUtLjEgLjhsMCA2M2MwIC4zIDAgLjUgLjEgLjhzLjIgLjUgLjQgLjYgLjQgLjMgLjcgLjQgLjUgLjEgLjggLjFsMS4yIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC42LS40IC4zLS40IC40LS42IC4xLS41IC4xLS44bDAtMjYuOSAxMS42IDAgMTAuNCAyNy4yYy4yIC41IC41IC45IC45IDEuMXMuOSAuNCAxLjQgLjRsMS41IDBjMS40IDAgMi0xIDEuNS0yLjNsLTEwLjYtMjcuM3ptLTYuNC0zLjlsLTEwLjIgMCAwLTI4LjUgMTAuMiAwYzcuNSAwIDEwLjUgMy4xIDEwLjUgMTEuMWwwIDYuNGMwIDcuOC0zIDExLTEwLjUgMTFsMCAwem04NS45LTMzLjFsLTEzLjcgMGMtLjMtLjEtLjUtLjEtLjggMHMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjctLjEgLjUtLjEgLjhsMCA2M2MwIC4zIDAgLjUgLjEgLjhzLjIgLjUgLjQgLjYgLjQgLjMgLjcgLjQgLjUgLjEgLjggLjFsMS4yIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC42LS40IC4zLS40IC40LS42IC4xLS41IC4xLS44bDAtMjYuMSAxMC42IDBjMTAuMSAwIDE1LjMtNC44IDE1LjMtMTQuMWwwLTEwLjVjMC05LjQtNS4yLTE0LjEtMTUuMy0xNC4xem0xMC4yIDIyLjhjMCA3LjktMyAxMS4xLTEwLjUgMTEuMWwtMTAuMiAwIDAtMjkuMiAxMC4yIDBjNy41LS4xIDEwLjUgMy4xIDEwLjUgMTFsMCA3LjF6TTI1OS42IDMwOGwtMi4zLTYuOC0yLjMgNi44LTcuMSAuMSA1LjcgNC4zLTIuMSA2LjggNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjF6TTQ4Ny4yIDE3MS45Yy0xMS43LTQuNC0yMy41LTguMS0zNS42LTExLjMgMTkuNi03OCAxMS42LTEzNC43LTIyLjMtMTUzLjktMzQuNS0xOS40LTg1LjkgNC4zLTEzOC4yIDU1LjIgMy40IDMuMyA2LjggNi43IDEwLjIgMTAuMiA4Mi41LTgwIDExOS42LTUzLjUgMTIwLjktNTIuOCAyMi40IDEyLjcgMzYgNTUuOCAxNS41IDEzNy44LTI3LjgtNi40LTU2LjEtMTAuNy04NC42LTEzLTcxLjktMTAwLjUtMTQwLjYtMTQyLjEtMTgyLjItMTQyLjEtMzAuOCAwLTQzLjggMjEtNDcuNiAyNy43LTE4LjEgMzItMTMuMyA4NC4yIC4xIDEzMy44LTcwLjUgMjAuMy0xMjAuNyA1NC4xLTEyMC4zIDk1IC41IDU5LjYgMTAzLjIgODcuOCAxMjIuMSA5Mi44LTIwLjUgODEuOS0xMC4xIDEzNS42IDIyLjMgMTUzLjkgMjggMTUuOCA3NS4xIDYgMTM4LjItNTUuMi0zLjQtMy4zLTYuOC02LjctMTAuMi0xMC4yLTgyLjUgODAtMTE5LjcgNTMuNS0xMjAuOSA1Mi44LTIyLjMtMTIuNi0zNi01NS42LTE1LjUtMTM3LjkgMTIuNCAyLjkgNDEuOCA5LjUgODQuNiAxMyA3MS45IDEwMC40IDE0MC42IDE0MiAxODIuMSAxNDIgMzAuOCAwIDQzLjgtMjEgNDcuNi0yNy43IDE4LTMxLjkgMTMuMy04NC4xLS4xLTEzMy44IDE1Mi4zLTQzLjggMTU2LjItMTMwLjIgMzMuOS0xNzYuM2wwIDB6TTEzNiAzNi44YzIuOS01LjEgMTEuOS0yMC4zIDM0LjktMjAuMyAzNi44IDAgOTguOCAzOS42IDE2My4zIDEyNi4yLTMxLjMtMS44LTYyLjctMS41LTkzLjkgLjkgMTMtMTguMyAyNy4xLTM1LjggNDIuMi01Mi40LTMuNC0zLjUtNi44LTYuOS0xMC4yLTEwLjItMTguMyAyMC4yLTM1LjMgNDEuNy01MC43IDY0LjItMjguNSAyLjctNTYuNyA3LjYtODQuNCAxNC42LS4yLTEuNC0yNC4zLTgyLjItMS4yLTEyM2wwIDB6TTQ0MC44IDQ3NS4xYy0yLjkgNS4xLTExLjggMjAuMy0zNC45IDIwLjMtMzYuNyAwLTk4LjctMzkuNC0xNjMuMy0xMjYuMiAzMS4zIDEuOCA2Mi43IDEuNSA5My45LS45LTEzIDE4LjMtMjcuMSAzNS44LTQyLjIgNTIuNCAzLjQgMy41IDYuOCA2LjkgMTAuMiAxMC4yIDE4LjQtMjAuMiAzNS4zLTQxLjcgNTAuNy02NC4yIDQ3LjMtNC43IDgwLjMtMTMuNSA4NC40LTE0LjYgMjIuNyA4NC40IDQuNSAxMTcgMS4yIDEyM3ptOS4xLTEzOC42Yy0zLjYtMTEuOS03LjctMjQuMS0xMi40LTM2LjQtMi4xIDAtNC4yLS41LTYuMS0xLjVzLTMuNS0yLjQtNC42LTQuMmwtLjEgLjFjLTEuNiAxLjUtMy40IDIuNy01LjQgMy42IDUuNyAxNC4zIDEwLjYgMjguNCAxNC43IDQyLjItMjMuNyA2LTQ3LjcgMTAuMy03MiAxMyAzLjUtNS4zIDE3LjItMjYuMiAzMi4yLTU0LjItMi4xLS44LTQuMi0xLjktNi0zLjItMS4xIDEuMi0zLjYgNC4yLTEwLjkgNC4yLTYuMiAxMS4yLTE3LjQgMzAuOS0zMy45IDU1LjItMzcuNCAzLjMtNzUgMy42LTExMi40IDEtNy45LTExLjItMjEuNS0zMS4xLTM2LjgtNTcuOC0xLS40LTItLjktMy0xLjUtMS45IDEuNi0zLjkgMy4yLTEyLjYgMy4yIDYuMyAxMS4yIDE3LjUgMzAuNyAzMy44IDU0LjYtMjQuMy0yLjMtNDguNC02LjItNzIuMi0xMS43IDMuOS0xNCA4LjYtMjguMyAxNC4xLTQyLjktMy4yIDAtNS40IC4yLTguNC0xLTIuMiAuOC00LjYgMS4xLTYuOSAxLTQuOSAxMy40LTkuMSAyNi41LTEyLjcgMzkuNC0xNTkuOS00Mi42LTE0MC4zLTEyMy42LTEuNS0xNjQgMy42IDExLjkgNy43IDI0LjEgMTIuNCAzNi40IDEwLjQgMCAxMi45IDMuNCAxNC40IDUuMyAuNy0uOCAxLjQtMS42IDIuMy0yLjItNS44LTE0LjctMTAuOS0yOS4yLTE1LjItNDMuMyA3LTEuOCAzMi40LTguNCA3Mi0xMy0xNS45IDI0LjMtMjYuNyA0My45LTMyLjggNTUuMyAzLjEgMS44IDUuMyA0LjYgNi40IDggMi41LTMuNyA2LjEtNi42IDEwLjItOC40IDYuNS0xMS43IDE3LjktMzEuOSAzNC44LTU2LjkgMzcuNC0zLjMgNzUtMy42IDExMi40LTEgMzEuNSA0NC42IDI4LjkgNDguMSA0Mi41IDY0LjUgMi42LTMuNSA2LjMtNiAxMC40LTcuNC02LjQtMTEuNC0xNy42LTMxLTM0LjMtNTUuNSA0MC40IDQuMSA2NSAxMCA3Mi4yIDExLjctNCAxNC40LTguOSAyOS4yLTE0LjYgNDQuMiAyLjUgMSA0LjggMi40IDYuOCA0LjNsLjEgLjFjMS0xLjUgMi4zLTIuOCAzLjgtMy44czMuMy0xLjYgNS4xLTEuOGM0LjktMTMuNCA5LjItMjYuNiAxMi44LTM5LjUgMTEuNyAzLjEgMjMuMiA2LjggMzQuNSAxMSAxMDYuMSAzOS45IDc0IDg3LjkgNzIuNiA5MC40LTE5LjggMzUuMS04MC4xIDU1LjItMTA1LjcgNjIuNXptLTExNC40LTExNGwtMS4yIDBjLS4zIDAtLjUgMC0uOCAuMXMtLjUgLjItLjYgLjQtLjMgLjQtLjQgLjYtLjEgLjUtLjEgLjhsMCA0OS44YzAgNy45LTIuNiAxMS4xLTEwLjEgMTEuMXMtMTAuMS0zLjEtMTAuMS0xMS4xbDAtNDkuOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbC0xLjIgMGMtLjMgMC0uNSAwLS44IC4xcy0uNSAuMi0uNyAuNC0uMyAuNC0uNCAuNi0uMSAuNS0uMSAuOGwwIDUxLjVjMCA5LjYgNSAxNC4xIDE1LjEgMTQuMWwuNCAwYzEwLjEgMCAxNS4xLTQuNiAxNS4xLTE0LjFsMC01MS41YzAtLjMtLjEtLjUtLjItLjhzLS4zLS41LS41LS42LS40LS4zLS43LS40LS41LS4xLS44LS4xek0zMjEuOCAzMDhsLTIuMy02LjgtMi4zIDYuOC03LjEgLjEgNS43IDQuMy0yLjEgNi44IDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xem0tMzEuMSA3LjRsLTIuMy02LjgtMi4zIDYuOC03LjEgLjEgNS43IDQuMy0yLjEgNi44IDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xem01LjEtMzAuOGwtMTkuNCAwIDAtMjYuNyAxNi4xIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMTYuMSAwIDAtMjUuOCAxOS4xIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMjIuMiAwYy0uMyAwLS41IDAtLjggLjFzLS41IC4yLS43IC40LS4zIC40LS40IC42LS4xIC41LS4xIC44bDAgNjNjMCAuMyAwIC41IC4xIC44cy4yIC41IC40IC42IC40IC4zIC43IC40IC41IC4xIC44IC4xbDIyLjUgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjcgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjYtLjEtLjhzLS4yLS41LS40LS43LS40LS40LS43LS40LS41LS4xLS44LS4xbDAgMHptLTcuNC05OS40bC0yLjMgNi44LTcuMSAuMSA1LjcgNC4zLTIuMSA2LjggNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjEtMi4zLTYuOHoiXX0sSXN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6IndhemUiLGljb246WzUxMiw1MTIsW10sImY4M2YiLCJNNTAyLjYgMjAxLjdjMTQuNSA4NS45LTMwLjkgMTY3LjktMTEzLjIgMjA4LjEgMTMgMzQuMS0xMi40IDcwLjItNDguMyA3MC4yLTEzLjIgMC0yNi01LjEtMzUuNi0xNC4ycy0xNS4zLTIxLjYtMTYtMzQuOGMtNi40IC4yLTY0LjIgMC03Ni4zLS42LS4zIDYuOC0xLjkgMTMuNS00LjcgMTkuNnMtNi45IDExLjctMTEuOSAxNi4zLTEwLjggOC4yLTE3LjIgMTAuNS0xMy4yIDMuNC0xOS45IDMuMWMtMzMuOS0xLjQtNTgtMzQuOC00Ny02Ny45LTM3LjItMTMuMS03Mi41LTM0LjktOTkuNi03MC44LTEzLTE3LjMtLjUtNDEuOCAyMC44LTQxLjggNDYuMyAwIDMyLjItNTQuMiA0My4yLTExMC4zIDE4LjQtOTMuOSAxMTYuOC0xNTcuMSAyMTEuNy0xNTcuMSAxMDIuNSAwIDE5Ny4yIDcwLjcgMjE0LjEgMTY5Ljd6TTM3My45IDM4OC4zYzQyLTE5LjIgODEuMy01Ni43IDk2LjMtMTAyLjEgNDAuNS0xMjMuMS02NC4yLTIyOC0xODEuNy0yMjgtODMuNCAwLTE3MC4zIDU1LjQtMTg2LjEgMTM2LTkuNSA0OC45IDUgMTMxLjQtNjguNyAxMzEuNCAyNC45IDMzLjEgNTguMyA1Mi42IDkzLjcgNjQgMjQuNy0yMS44IDYzLjktMTUuNSA3OS44IDE0LjMgMTQuMiAxIDc5LjIgMS4yIDg3LjkgLjggMy41LTYuOSA4LjUtMTIuOSAxNC43LTE3LjVzMTMuMi03LjkgMjAuOC05LjUgMTUuNC0xLjQgMjIuOSAuNCAxNC41IDUuMyAyMC41IDEwLjJ6TTIwNS41IDE4Ny4xYzAtMzQuNyA1MC44LTM0LjcgNTAuOCAwcy01MC44IDM0LjctNTAuOCAwem0xMTYuNiAwYzAtMzQuNyA1MC45LTM0LjcgNTAuOSAwcy01MC45IDM0LjgtNTAuOSAwek0xOTkuNSAyNTcuOGMtMy40LTE2LjkgMjIuMi0yMi4yIDI1LjYtNS4ybC4xIC4zYzQuMSAyMS40IDI5LjggNDQgNjQuMSA0My4xIDM1LjctLjkgNTkuMy0yMi4yIDY0LjEtNDIuOCA0LjUtMTYuMSAyOC42LTEwLjQgMjUuNSA2LTUuMiAyMi4yLTMxLjIgNjItOTEuNSA2Mi45LTQyLjYgMC04MC45LTI3LjgtODcuOS02NC4ybDAgMHoiXX0sRnN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNyZWF0aXZlLWNvbW1vbnMtcmVtaXgiLGljb246WzUxMiw1MTIsW10sImY0ZWUiLCJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zek00MTguMSAyNjAuNGw0LjkgMi4yIDAgNzBjLTcuMiAzLjYtNjMuNCAyNy41LTY3LjMgMjguOC02LjUtMS44LTExMy43LTQ2LjgtMTM3LjMtNTYuMmwtNjQuMiAyNi42LTYzLjMtMjcuNSAwLTYzLjggNTkuMy0yNC44Yy0uNy0uNy0uNCA1LS40LTcwLjRsNjcuMy0yOS43IDE1MS45IDYyLjkgMCA2MS42IDQ5LjEgMjAuM3ptLTcwLjQgODEuNWwwLTQzLjgtLjQgMCAwLTEuOC0xMTMuOC00Ni41IDAgNDUuMiAxMTMuOCA0Ni45IDAtLjQgLjQgLjR6bTcuNS01Ny42bDM5LjktMTYuNC0zNi44LTE1LjUtMzkgMTYuNCAzNS45IDE1LjV6bTUyLjMgMzguMWwwLTQzLTQ0LjMgMTguNiAwIDQzLjQgNDQuMy0xOXoiXX0sT3N0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJhbmRjYW1wIixpY29uOls1MTIsNTEyLFtdLCJmMmQ1IiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptNDguMiAzMjYuMWwtMTgxIDAgODQuNy0xNTYuMSAxODEgMC04NC43IDE1Ni4xeiJdfSxCc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLXdlYi1hd2Vzb21lLXN0cm9rZSIsaWNvbjpbNDQ4LDUxMixbXSwiZTY4NCIsIk02NCA2NEM0Ni4zIDY0IDMyIDc4LjMgMzIgOTZsMCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMjBjMC0xNy43LTE0LjMtMzItMzItMzJMNjQgNjR6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0yMzUgODEuNmw1MyA0Ni40IDUyLjItMTAuNGMtMi42LTMuOS00LjItOC41LTQuMi0xMy42IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCAxMy0xMC4zIDIzLjYtMjMuMiAyNEwzMDQuNSAzNDkuMWMtNS4yIDExLjUtMTYuNiAxOC45LTI5LjIgMTguOWwtMTAyLjYgMGMtMTIuNiAwLTI0LTcuNC0yOS4yLTE4LjlMODcuMiAyMjRjLTEyLjktLjQtMjMuMi0xMS0yMy4yLTI0IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCA1LTEuNSA5LjctNC4yIDEzLjZMMTYwIDIyNCAyMTMuMSAxNzcuNmMtOC45LTQuMS0xNS0xMy4xLTE1LTIzLjYgMC0xNC40IDExLjYtMjYgMjYtMjZzMjYgMTEuNiAyNiAyNmMwIDEwLjUtNi4yIDE5LjUtMTUuMSAyMy42eiJdfSxSc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmltZW8tdiIsaWNvbjpbNDQ4LDUxMixbXSwiZjI3ZCIsIk00NDcuOCAxNTMuNmMtMiA0My42LTMyLjQgMTAzLjMtOTEuNCAxNzkuMS02MC45IDc5LjItMTEyLjQgMTE4LjgtMTU0LjYgMTE4LjgtMjYuMSAwLTQ4LjItMjQuMS02Ni4zLTcyLjMtMzUuMi0xMjkuMi01MC4yLTIwNC45LTc5LjMtMjA0LjktMy40IDAtMTUuMSA3LjEtMzUuMiAyMS4xTDAgMTY4LjJjNTEuNi00NS4zIDEwMC45LTk1LjcgMTMxLjgtOTguNSAzNC45LTMuNCA1Ni4zIDIwLjUgNjQuNCA3MS41IDI4LjcgMTgxLjUgNDEuNCAyMDguOSA5My42IDEyNi43IDE4LjctMjkuNiAyOC44LTUyLjEgMzAuMi02Ny42IDQuOC00NS45LTM1LjgtNDIuOC02My4zLTMxIDIyLTcyLjEgNjQuMS0xMDcuMSAxMjYuMi0xMDUuMSA0NS44IDEuMiA2Ny41IDMxLjEgNjQuOSA4OS40eiJdfSxIc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3RyYXZhIixpY29uOlszODQsNTEyLFtdLCJmNDI4IiwiTTE1OC40IDBMNyAyOTIgOTYuMiAyOTIgMTU4LjQgMTc1LjkgMjIwLjEgMjkyIDMwOC42IDI5MiAxNTguNCAwek0zMDguNiAyOTJsLTQzLjkgODguMi00NC42LTg4LjItNjcuNiAwIDExMi4yIDIyMCAxMTEuNS0yMjAtNjcuNiAweiJdfSxxc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidW5pcmVnaXN0cnkiLGljb246WzM4NCw1MTIsW10sImY0MDQiLCJNMTkyIDQ4MGMzOS41IDAgNzYuMi0xMS44IDEwNi44LTMyLjJsLTIxMy41IDBDMTE1LjggNDY4LjIgMTUyLjUgNDgwIDE5MiA0ODB6TTEwMi45IDI4Ni45bDAtMTIuNC0xMDIuOSAwIDAgMTIuNGMwIDIuNSAwIDUgLjEgNy40bDEwMy4xIDBjLS4yLTIuNC0uMy00LjktLjMtNy40em0yMC41IDU3bC0xMTQuOSAwYzIuNiA4LjUgNS44IDE2LjggOS42IDI0LjhsMTM4LjMgMGMtMTIuOS01LjctMjQuMS0xNC4yLTMzLTI0Ljh6bS0xNy43LTM0LjdsLTEwNC40IDBjLjkgNy42IDIuMiAxNSAzLjkgMjIuM2wxMDkuNyAwYy00LTYuOS03LjItMTQuNC05LjItMjIuM3ptLTIuOC02OS4zbC0xMDIuOSAwIDAgMTcuMyAxMDIuOSAwIDAtMTcuM3ptMC0xNzMuMmwtMTAyLjkgMCAwIDQuOSAxMDIuOSAwIDAtNC45em0wLTM0LjdsLTEwMi45IDAgMCAyLjUgMTAyLjkgMCAwLTIuNXptMCA2OS4zbC0xMDIuOSAwIDAgNy40IDEwMi45IDAgMC03LjR6bTAgMTA0bC0xMDIuOSAwIDAgMTQuOCAxMDIuOSAwIDAtMTQuOHptMC02OS4zbC0xMDIuOSAwIDAgOS45IDEwMi45IDAgMC05Ljl6bTAgMzQuNmwtMTAyLjkgMCAwIDEyLjQgMTAyLjkgMCAwLTEyLjR6TTI2OS4xIDMzMS41bDEwOS43IDBjMS44LTcuMyAzLjEtMTQuNyAzLjktMjIuM2wtMTA0LjQgMGMtMi4xIDcuOS01LjIgMTUuNC05LjIgMjIuM3ptMTItMTg1LjdsMTAyLjkgMCAwLTkuOC0xMDIuOSAwIDAgOS44em0wIDM3LjJsMTAyLjkgMCAwLTEyLjQtMTAyLjkgMCAwIDEyLjR6bTAtNzQuM2wxMDIuOSAwIDAtNy40LTEwMi45IDAgMCA3LjR6bTAtNzYuN2wwIDIuNSAxMDIuOSAwIDAtMi41LTEwMi45IDB6TTc4LjEgNDQyLjlsMjI3LjcgMGMxMS44LTguNyAyMi43LTE4LjYgMzIuMi0yOS43bC0yOTMuMSAwYzkuNiAxMSAyMS40IDIxIDMzLjIgMjkuN3ptMjAzLTM3MS4zbDEwMi45IDAgMC00LjktMTAyLjkgMCAwIDQuOXptMCAxNDguNWwxMDIuOSAwIDAtMTQuOC0xMDIuOSAwIDAgMTQuOHpNMzguOCA0MDUuN2wzMDUuMyAwYzYuNy04LjUgMTIuNi0xNy42IDE3LjgtMjcuMkwyMyAzNzguNWM1LjIgOS42IDkuMiAxOC43IDE1LjggMjcuMnptMTg4LjgtMzcuMWwxMzkuNCAwYzMuNy04IDUuOC0xNi4yIDguNS0yNC44bC0xMTUgMGMtOC44IDEwLjctMjAuMSAxOS4yLTMyLjkgMjQuOHptNTMuNS04MS43YzAgMi41LS4xIDUtLjQgNy40bDEwMy4xIDBjLjEtMi41IC4yLTQuOSAuMi03LjRsMC0xMi40LTEwMi45IDAgMCAxMi40em0wLTI5LjdsMTAyLjkgMCAwLTE3LjMtMTAyLjkgMCAwIDE3LjN6Il19LFZzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjYy1kaW5lcnMtY2x1YiIsaWNvbjpbNTc2LDUxMixbXSwiZjI0YyIsIk0yMzkuNyA3OS45YTE3NS44IDE3NS44IDAgMSAwIDAgMzUxLjYgMTc1LjggMTc1LjggMCAxIDAgMC0zNTEuNnpNMTk5LjggMzU5LjVjLTQxLjctMTUuOS03MS40LTU2LjQtNzEuNC0xMDMuOHMyOS43LTg3LjkgNzEuNC0xMDQuMWwwIDIwNy45em03OS44IC4zbDAtMjA4LjJjNDEuNyAxNi4yIDcxLjQgNTYuNyA3MS40IDEwNC4xcy0yOS43IDg3LjktNzEuNCAxMDQuMXpNNTI4IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTMyOS43IDQ0OGwtOTAuMyAwQzEzMy4yIDQ0OCA0NS42IDM2Mi41IDQ1LjYgMjU3LjggNDUuNiAxNDMuMiAxMzMuMiA2NCAyMzkuNCA2NGw5MC4zIDBjMTA1IDAgMjAwLjcgNzkuMiAyMDAuNyAxOTMuOCAwIDEwNC43LTk1LjcgMTkwLjItMjAwLjcgMTkwLjJ6Il19LFVzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaW50ZXJlc3QiLGljb246WzUxMiw1MTIsW10sImYwZDIiLCJNNTA0IDI1NmMwIDEzNy0xMTEgMjQ4LTI0OCAyNDgtMjUuNiAwLTUwLjItMy45LTczLjQtMTEuMSAxMC4xLTE2LjUgMjUuMi00My41IDMwLjgtNjUgMy0xMS42IDE1LjQtNTkgMTUuNC01OSA4LjEgMTUuNCAzMS43IDI4LjUgNTYuOCAyOC41IDc0LjggMCAxMjguNy02OC44IDEyOC43LTE1NC4zIDAtODEuOS02Ni45LTE0My4yLTE1Mi45LTE0My4yLTEwNyAwLTE2My45IDcxLjgtMTYzLjkgMTUwLjEgMCAzNi40IDE5LjQgODEuNyA1MC4zIDk2LjEgNC43IDIuMiA3LjIgMS4yIDguMy0zLjMgLjgtMy40IDUtMjAuMyA2LjktMjguMSAuNi0yLjUgLjMtNC43LTEuNy03LjEtMTAuMS0xMi41LTE4LjMtMzUuMy0xOC4zLTU2LjYgMC01NC43IDQxLjQtMTA3LjYgMTEyLTEwNy42IDYwLjkgMCAxMDMuNiA0MS41IDEwMy42IDEwMC45IDAgNjcuMS0zMy45IDExMy42LTc4IDExMy42LTI0LjMgMC00Mi42LTIwLjEtMzYuNy00NC44IDctMjkuNSAyMC41LTYxLjMgMjAuNS04Mi42IDAtMTktMTAuMi0zNC45LTMxLjQtMzQuOS0yNC45IDAtNDQuOSAyNS43LTQ0LjkgNjAuMiAwIDIyIDcuNCAzNi44IDcuNCAzNi44cy0yNC41IDEwMy44LTI5IDEyMy4yQzE2MS41IDQzNy4yIDE2My41IDQ2Ny40IDE2NS42IDQ4NyA3My40IDQ1MC45IDggMzYxLjEgOCAyNTYgOCAxMTkgMTE5IDggMjU2IDhTNTA0IDExOSA1MDQgMjU2eiJdfSxqc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYWxnb2xpYSIsaWNvbjpbNTEyLDUxMixbXSwiZjM2YyIsIk0yNTYgMGMtMTM5LjkgMC0yNTQgMTEyLjctMjU2IDI1Mi4xLTIgMTQxLjUgMTEyLjkgMjU4LjcgMjU0LjUgMjU5LjUgNDMuNyAuMyA4NS45LTEwLjQgMTIzLjMtMzAuNyAzLjYtMiA0LjItNyAxLjEtOS43bC0yNC0yMS4yYy00LjktNC4zLTExLjgtNS41LTE3LjgtMy0yNi4xIDExLjEtNTQuNSAxNi44LTgzLjcgMTYuNC0xMTQuNC0xLjUtMjA2LjktOTYuNi0yMDUuMS0yMTEgMS44LTExMi45IDk0LjMtMjA0LjIgMjA3LjctMjA0LjJsMjA3LjcgMCAwIDM2OS0xMTcuOC0xMDQuN2MtMy44LTMuNC05LjctMi43LTEyLjcgMS4zLTE4LjkgMjUtNDkuNyA0MC42LTgzLjkgMzguMi00Ny41LTMuMy04NS45LTQxLjUtODkuNS04OC45LTQuMi01Ni42IDQwLjYtMTAzLjkgOTYuMy0xMDMuOSA1MC40IDAgOTEuOSAzOC44IDk2LjIgODggLjQgNC40IDIuNCA4LjUgNS43IDExLjRsMzAuNyAyNy4yYzMuNSAzLjEgOSAxLjIgOS45LTMuNCAyLjItMTEuOCAzLTI0LjIgMi4xLTM2LjgtNC45LTcyLTYzLjMtMTMwLTEzNS40LTEzNC40LTgyLjctNS4xLTE1MS44IDU5LjUtMTU0IDE0MC42LTIuMSA3OC45IDYyLjYgMTQ3IDE0MS42IDE0OC43IDMzIC43IDYzLjYtOS42IDg4LjMtMjcuNkw0OTUgNTA5LjRjNi42IDUuOCAxNyAxLjIgMTctNy43bDAtNDkyYzAtNS40LTQuNC05LjctOS43LTkuN0wyNTYgMHoiXX0sV3N0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN0YWNrcGF0aCIsaWNvbjpbNDQ4LDUxMixbXSwiZjg0MiIsIk0yNDQuNiAyMzIuNGMwIDguNS00LjMgMjAuNS0yMS4zIDIwLjVsLTE5LjYgMCAwLTQxLjUgMTkuNiAwYzE3LjEgMCAyMS4zIDEyLjQgMjEuMyAyMXpNNDQ4IDMybDAgNDQ4LTQ0OCAwIDAtNDQ4IDQ0OCAwek0xNTEuMyAyODcuOGMwLTIxLjItMTIuMS0zNC41LTQ2LjctNDQuOC0yMC42LTcuNC0yNi0xMC45LTI2LTE4LjZzNy0xNC42IDIwLjQtMTQuNmMxNC4xIDAgMjAuOCA4LjQgMjAuOCAxOC40bDMwLjcgMCAuMi0uNmMuNS0xOS42LTE1LjEtNDEuNi01MS4xLTQxLjYtMjMuNCAwLTUyLjYgMTAuOC01Mi42IDM4LjMgMCAxOS40IDkuMiAzMS4zIDUwLjcgNDQuNCAxNy4zIDYuMiAyMS45IDEwLjQgMjEuOSAxOS41IDAgMTUuMi0xOS4xIDE0LjItMTkuNSAxNC4yLTIwLjQgMC0yNS43LTkuMS0yNS43LTIxLjlsLTMwLjggMC0uMiAuNmMtLjcgMzEuMyAyOC40IDQ1LjIgNTYuNiA0NS4yIDMwIDAgNTEuMS0xMy42IDUxLjEtMzguM3ptMTI1LjQtNTUuNmMwLTI1LjMtMTguNC00NS41LTUzLjQtNDUuNWwtNTEuOCAwIDAgMTM4LjIgMzIuMiAwIDAtNDcuNCAxOS42IDBjMzAuMyAwIDUzLjQtMTYgNTMuNC00NS40ek0yOTcuOSAzMjVsNDkuMS0xMzguMi0zMS4xIDAtNDcuOSAxMzguMiAyOS45IDB6TTQwNC41IDE4Ni44bC0zMS4xIDAtNDcuOSAxMzguMiAyOS45IDAgNDkuMS0xMzguMnoiXX0sR3N0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im9jdG9wdXMtZGVwbG95IixpY29uOls1MTIsNTEyLFtdLCJlMDgyIiwiTTQ1NS43IDM0OS4yYy00NS45LTM5LjEtMzYuNy03Ny45LTE2LjEtMTI4LjEgMzUuNy04Ny0yMy41LTE4Ni45LTEwOS42LTIxMi44LTkyLjktMjcuOS0xOTUuNyAxNi0yMzAuMyAxMDguOC04LjcgMjMuNS0xMi41IDQ4LjUtMTEgNzMuNSAxLjcgMjkuNSAxNC43IDUzIDI0LjEgODAuMyAxNy4yIDUwLjItMjguMSA5Mi43LTY2LjcgMTE3LjYtNDYuOCAzMC4yLTM2LjMgMzkuOS04LjQgNDEuOSAyMy40IDEuNyA0NC41LTQuNSA2NS4zLTE1IDkuMi00LjYgNDAuNy0xOC45IDQ1LjEtMjguNi0xMi4yIDI2LjYtMzcgNzIuNy0yMS41IDEwMi4xIDE5LjEgMzYuMiA2Ny4xLTMxLjggNzYuNy00NS44IDguNi0xMi42IDQzLTgxLjMgNjMuNi00Ni45IDE4LjkgMzEuNCA4LjYgNzYuNCAzNS43IDEwNC42IDMyLjkgMzQuMiA1MS4yLTE4LjMgNTEuNC00NC4yIC4yLTE2LjQtNi4xLTk1LjkgMjkuOS01OS45IDIxLjQgMjEuNCA1Mi45IDcxLjIgODguNiA2NyAzOC43LTQuNS0yMi4xLTY4LTI4LjMtNzguNyA1LjQgNC4zIDUzLjcgMzQuMSA1My44IDkuNSAuMS0xOC44LTMwLjEtMzQuNy00Mi41LTQ1LjN6Il19LFlzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ5YW1tZXIiLGljb246WzUxMiw1MTIsW10sImY4NDAiLCJNNTAwLjcgMTU5LjVjLS40LTEuOC0xLjItMy40LTIuMy00LjhzLTIuNS0yLjYtNC4xLTMuNWMtMy4xLTEuNi02LjctMi0xMC4xLTEuMWwtMjYuNCA2LjYgMC0uMi0yMi4zIDUuOC0xLjIgLjMtLjYtMi4yYy0xNS41LTU4LjMtNDUtMTExLjktODYuMS0xNTYuMi0yLjYtMi43LTYuMS00LjItOS44LTQuM3MtNy4zIDEuMy0xMCAzLjhsLTEwMi45IDEwMi43LTE5OS45IDBjLTYuNiAwLTEyLjkgMi42LTE3LjYgNy4zUzAgMTI0LjggMCAxMzEuNGwwIDI0OUMwIDM4NyAyLjYgMzkzLjMgNy4zIDM5OHMxMSA3LjMgMTcuNiA3LjNMMjI1IDQwNS4zIDMyOC4xIDUwOGMyLjYgMi42IDYgNCA5LjcgNHM3LjEtMS40IDkuNy00Yy4xLS4xIC4yLS4zIC40LS40IDI5LjMtMzEuNSA1Mi44LTY3LjggNjkuNi0xMDcuNCA2LjktMTYuNSAxMi43LTMzLjUgMTcuMy01MC44bDAgMCAyMC40IDUuMyAwLS4xIDI4LjMgNy4zYy45IC4yIDEuNyAuNCAyLjYgLjUgMS40IC4yIDIuOCAuMiA0LjEtLjEgMi41LS41IDQuOC0xLjcgNi43LTMuNHMzLjItNCAzLjgtNi41YzE1LjItNjMuNCAxNS4yLTEyOS42IC4xLTE5M2wwIDB6TTMzNy4xIDI0LjdsMCAwIDAgMCAwIDB6TTIyNi45IDE4OS44bC01Mi42IDkxLjNjLTEgMS43LTEuNSAzLjctMS41IDUuN2wwIDQ2LjJjMCA1LjgtMi4zIDExLjQtNi41IDE1LjZzLTkuNyA2LjQtMTUuNiA2LjRsLTMuNCAwYy01LjggMC0xMS40LTIuMy0xNS42LTYuNHMtNi41LTkuNy02LjUtMTUuNmwwLTQ1LjdjMC0xLjktLjUtMy44LTEuNC01LjVMNzIuMyAxODkuNmMtMS45LTMuNC0yLjgtNy4xLTIuOC0xMXMxLjEtNy42IDMtMTAuOSA0LjctNi4xIDguMS04IDcuMS0yLjkgMTEtMi45bDMuMyAwYzQgMCA4IDEuMSAxMS41IDMuMnM2LjMgNS4xIDguMSA4LjdsMzYuNCA3MC4zIDM3LjUtNzAuNWMxLjgtMy41IDQuNi02LjQgNy45LTguNHM3LjItMy4yIDExLjEtMy4yIDcuOCAuOSAxMS4yIDIuOCA2LjMgNC43IDguMiA4LjFjMiAzLjMgMyA3LjEgMyAxMXMtMSA3LjctMyAxMWwwIDB6TTMzNy4xIDI0LjdjMzUuOSA0MC42IDYxLjkgODkgNzUuOCAxNDEuM2wuNiAyLTExNC4xIDI5LjYgMC02Ni4xYzAtNi42LTIuNy0xMi45LTcuMy0xNy42cy0xMS03LjMtMTcuNi03LjNsLTE5LjQgMCA4Mi4xLTgxLjh6TTM5Ny42IDM5MmwwIDAgMCAwYy0xNC43IDM0LjgtMzUuMSA2Ny02MC4yIDk1LjJsLTgyLjItODEuOSAxOS4yIDBjNi42IDAgMTIuOS0yLjYgMTcuNi03LjNzNy4zLTExIDcuMy0xNy42bDAtNjYuMiAxMTQuNiAyOS45Yy00LjQgMTYuMy05LjggMzIuMy0xNi4zIDQ3LjlsMCAwem04NC01Mi40bDAgMC01MC42LTEzLjEtMTMxLjctMzQuMyAwLTcyLjUgMTE5LjctMzEgNC41LTEuMmMyOS45LTcuNyA0OS4yLTEyLjggNTguMS0xNS4xIDEyIDU1LjEgMTIgMTEyLjEgMCAxNjcuMnoiXX0sWnN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1vZHgiLGljb246WzQ0OCw1MTIsW10sImYyODUiLCJNMzU2IDI0MS44bDM2LjcgMjMuNyAwIDIxNC41LTEzMy04My44IDk2LjMtMTU0LjR6TTQ0MCA3NWwtMjEzLjcgMC0yMyAzNy44IDE1My41IDk2LjUgODMuMi0xMzQuM3pNMzUxIDIxNy44bC0yOTUuOC0xODUuOCAwIDIxNC41IDQ2IDI5IDI0OS44LTU3Ljd6TTk3IDI5NC4yTDggNDM3IDIyMS43IDQzNyAzNDYuNyAyMzYuNSA5NyAyOTQuMnoiXX0sWHN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS10aHJlYWRzIixpY29uOls0NDgsNTEyLFtdLCJlNjE5IiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTI5NC4yIDI0NC4zYzE5LjUgOS4zIDMzLjcgMjMuNSA0MS4yIDQwLjkgMTAuNCAyNC4zIDExLjQgNjMuOS0yMC4yIDk1LjQtMjQuMiAyNC4xLTUzLjUgMzUtOTUuMSAzNS4zbC0uMiAwYy00Ni44LS4zLTgyLjgtMTYuMS0xMDYuOS00Ni44LTIxLjUtMjcuMy0zMi42LTY1LjQtMzMtMTEzLjFsMC0uMmMuNC00Ny43IDExLjUtODUuNyAzMy0xMTMuMSAyNC4yLTMwLjcgNjAuMi00Ni41IDEwNi45LTQ2LjhsLjIgMGM0Ni45IC4zIDgzLjMgMTYgMTA4LjIgNDYuNiAxMi4zIDE1LjEgMjEuMyAzMy4zIDI3IDU0LjRsLTI2LjkgNy4yYy00LjctMTcuMi0xMS45LTMxLjktMjEuNC00My42LTE5LjQtMjMuOS00OC43LTM2LjEtODctMzYuNC0zOCAuMy02Ni44IDEyLjUtODUuNSAzNi4yLTE3LjUgMjIuMy0yNi42IDU0LjQtMjYuOSA5NS41IC4zIDQxLjEgOS40IDczLjMgMjYuOSA5NS41IDE4LjcgMjMuOCA0Ny40IDM2IDg1LjUgMzYuMiAzNC4zLS4zIDU2LjktOC40IDc1LjgtMjcuMyAyMS41LTIxLjUgMjEuMS00Ny45IDE0LjItNjQtNC05LjQtMTEuNC0xNy4zLTIxLjMtMjMuMy0yLjQgMTgtNy45IDMyLjItMTYuNSA0My4yLTExLjQgMTQuNS0yNy43IDIyLjQtNDguNCAyMy41LTE1LjcgLjktMzAuOC0yLjktNDIuNi0xMC43LTEzLjktOS4yLTIyLTIzLjItMjIuOS0zOS41LTEuNy0zMi4yIDIzLjgtNTUuMyA2My41LTU3LjYgMTQuMS0uOCAyNy4zLS4yIDM5LjUgMS45LTEuNi05LjktNC45LTE3LjctOS44LTIzLjQtNi43LTcuOC0xNy4xLTExLjgtMzAuOC0xMS45bC0uNCAwYy0xMSAwLTI2IDMuMS0zNS42IDE3LjZsLTIzLTE1LjhjMTIuOC0xOS40IDMzLjYtMzAuMSA1OC41LTMwLjFsLjYgMGM0MS44IC4zIDY2LjYgMjYuMyA2OS4xIDcxLjggMS40IC42IDIuOCAxLjIgNC4yIDEuOWwuMSAuNXptLTcxLjggNjcuNWMxNy0uOSAzNi40LTcuNiAzOS43LTQ4LjgtOC44LTEuOS0xOC42LTIuOS0yOS0yLjktMy4yIDAtNi40IC4xLTkuNiAuMy0yOC42IDEuNi0zOC4xIDE1LjUtMzcuNCAyNy45IC45IDE2LjcgMTkgMjQuNSAzNi40IDIzLjZsLS4xLS4xeiJdfSxRc3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToib2xkLXJlcHVibGljIixpY29uOls1MTIsNTEyLFtdLCJmNTEwIiwiTTI0My44IDEwLjJjNy41LS4zIDE1LS4zIDIyLjUtLjEgMy42IC4xIDcuMiAuNCAxMC44IC43IDQuOSAuMyA5LjggMSAxNC43IDEuNiAyLjkgLjQgNS44IDEgOC43IDEuNSA3LjkgMS4zIDE1LjcgMy4zIDIzLjQgNS40IDEyLjIgMy41IDI0LjIgNy45IDM1LjggMTMuMiAyNi42IDEyLjIgNTAuOSAyOS4yIDcxLjYgNDkuOSAyMCAyMC4xIDM2LjcgNDMuNSA0OC45IDY5LjIgMS4xIDIuNiAyLjQgNS4xIDMuNSA3LjcgMi44IDYuNCA1LjQgMTMgNy42IDE5LjYgNC4xIDEyLjMgNy4zIDI1IDkuNCAzNy44IC42IDMuMSAxIDYuMyAxLjQgOS41IC41IDMuOCAuOSA3LjcgMS4yIDExLjYgLjggOC4zIC44IDE2LjcgLjggMjUuMS0uMSA1LS4zIDkuOS0uNyAxNC45LS4yIDMuNC0uNSA2LjgtMSAxMC4xLS40IDIuNy0uNiA1LjUtMS4xIDguMi0uOSA1LjEtMS43IDEwLjMtMi45IDE1LjQtNC4xIDE4LjUtMTAuMyAzNi42LTE4LjUgNTMuNi0xNS44IDMyLjgtMzguOCA2Mi4yLTY3LjEgODUuMS0xNy4zIDE0LjEtMzYuNCAyNS45LTU2LjkgMzQuOS02LjIgMi43LTEyLjUgNS4zLTE4LjkgNy40LTMuNSAxLjItNyAyLjQtMTAuNiAzLjQtNi42IDEuOS0xMy4zIDMuNi0yMCA1LTQuNyAuOS05LjMgMS43LTE0IDIuNS01LjMgLjctMTAuNSAxLjQtMTUuOCAxLjctNi43IC43LTEzLjQgLjgtMjAuMSAuOC02LjggMC0xMy42LS4xLTIwLjQtLjgtMy4zLS4yLTYuNi0uNS05LjgtMS0yLjctLjQtNS41LS42LTguMi0xLjEtNC4xLS43LTguMi0xLjQtMTIuNC0yLjItNC4yLS45LTguNS0xLjktMTIuNy0zLTguNi0yLjItMTcuMS01LTI1LjQtOC4xLTEwLjUtNC4xLTIwLjgtOC43LTMwLjYtMTQuMi0yLjEtMS4yLTQuMy0yLjMtNi40LTMuNi0xMS4yLTYuNi0yMS45LTE0LjEtMzEuOS0yMi4zLTM0LjctMjguNC02MS40LTY2LjQtNzYuNC0xMDguNy0zLjEtOC43LTUuNy0xNy42LTcuOC0yNi43LTEuNS02LjItMi41LTEyLjQtMy42LTE4LjctLjQtMi4zLS42LTQuNy0xLTcuMS0uNi00LS44LTgtMS4yLTExLjktLjgtOS41LS43LTE5LS41LTI4LjUgLjEtMy41IC4zLTcgLjctMTAuNSAuMy0zLjIgLjUtNi40IC45LTkuNSAuNC0yLjggLjctNS42IDEuMi04LjQgLjctMy45IDEuMy03LjkgMi4xLTExLjggMy40LTE2LjUgOC41LTMyLjcgMTUuMy00OC4yIDEuMi0yLjkgMi42LTUuNyAzLjktOC42IDguMS0xNi43IDE3LjktMzIuNiAyOS41LTQ3LjEgMjAtMjUuNCA0NS4xLTQ2LjcgNzMuMy02Mi41IDcuNS00LjIgMTUuMi04IDIzLjEtMTEuNCAxNS44LTYuOSAzMi40LTEyIDQ5LjMtMTUuNCAzLjUtLjcgNy0xLjIgMTAuNi0xLjggMi42LS41IDUuMy0uNyA3LjktMS4xIDMuNS0uNSA3LjEtLjcgMTAuNi0xIDIuNS0uMiA0LjktLjQgNy40LS41em04LjYgMjQuNGMtOS4yIC4xLTE4LjQgMS0yNy42IDIuMi03LjMgMS4xLTE0LjUgMi42LTIxLjcgNC4zLTEzLjkgMy41LTI3LjUgOC4zLTQwLjUgMTQuNC0xMC41IDUtMjAuNiAxMC43LTMwLjIgMTcuMi00LjIgMi45LTguNCA1LjgtMTIuMyA5LTUuMSA0LTEwIDguMi0xNC43IDEyLjYtMi41IDIuMi00LjggNC43LTcuMiA3LjEtMjguMiAyOC44LTQ4LjQgNjUuNC01Ny41IDEwNC43LTIgOC40LTMuNSAxNy00LjQgMjUuNi0xLjEgOC45LTEuNCAxNy45LTEuNCAyNi44IC4xIDcuMSAuNCAxNC4zIDEuMiAyMS40IC42IDcuMSAxLjkgMTQuMiAzLjIgMjEuMiAxLjEgNC42IDIgOS4zIDMuMyAxMy45IDYuMyAyMy40IDE2LjUgNDUuNyAzMC4xIDY1LjggOC42IDEzIDE4LjggMjQuOSAzMCAzNS44IDE2LjMgMTUuOCAzNSAyOSA1NS4zIDM5LjIgNy4zIDMuNSAxNC43IDYuOSAyMi4zIDkuNiA1IDEuOCAxMC4xIDMuNiAxNS4yIDUgMTEuMyAzLjIgMjIuOCA1LjYgMzQuNCA3LjEgMi45IC4zIDUuOCAuNiA4LjcgLjkgMTMuOCAxLjEgMjcuNyAxIDQxLjUtLjQgNC40LS42IDguOS0xIDEzLjMtMS44IDMuNi0uNyA3LjMtMS4yIDEwLjktMi4xIDQuMS0xIDguMy0xLjkgMTIuNC0zLjEgMjYuNS03LjMgNTEuNi0xOS43IDczLjYtMzYuMiAxNS44LTExLjggMzAtMjUuOCA0Mi4xLTQxLjMgMy4zLTQgNi4yLTguMyA5LjEtMTIuNiAzLjQtNS4xIDYuNi0xMC4yIDkuNi0xNS41IDIuNC00LjQgNC43LTguOSA3LTEzLjQgNS43LTEyLjEgMTAuMy0yNC42IDEzLjgtMzcuNSAyLjYtMTAgNC43LTIwLjIgNS45LTMwLjQgMS44LTEzLjUgMS45LTI3LjEgMS4zLTQwLjctLjMtMy45LS43LTcuOC0xLTExLjctMi4yLTE5LjEtNi44LTM3LjktMTMuOC01NS44LTYtMTUuMS0xMy41LTI5LjYtMjIuNi00My4xLTEyLjctMTguOC0yOC4yLTM1LjctNDYtNDkuOC0yNS0yMC01NC41LTM0LjUtODUuNi00Mi4xLTcuOC0xLjktMTUuNy0zLjMtMjMuNi00LjQtMy45LS42LTcuOC0uOC0xMS44LTEuMi03LjQtLjYtMTQuOC0uNy0yMi4yLS42ek0xNDcuMyA4My41YzEzLjMtOC45IDI4LjEtMTUuNCA0My4zLTIwLjItMy4yIDEuOC02LjQgMy40LTkuNSA1LjMtMTEuMiA2LjctMjEuNSAxNC45LTMwLjQgMjQuNS02LjggNy40LTEyLjggMTUuNy0xNyAyNC45LTMuMyA2LjktNS42IDE0LjItNi45IDIxLjctLjkgNC44LTEuMyA5LjgtMS4yIDE0LjggLjEgMTMuNyA0LjQgMjcuMSAxMS4zIDM4LjggNS45IDEwLjIgMTMuNiAxOS4zIDIyLjQgMjcuMyA0LjkgNC40IDEwLjIgOC4xIDE1IDEyLjYgMi4zIDIuMiA0LjUgNC40IDYuNCA2LjkgMi42IDMuMyA0LjkgNyA2IDExLjEgLjkgMyAuNyA2LjIgLjcgOS4zIDAgNC4xIDAgOC4yIDAgMTIuMyAuMSAzLjUgMCA3LjEgLjEgMTAuNiAuMSAyLjQgMCA0LjggLjEgNy4xIC4yIDUuOCAuMSAxMS41IC4xIDE3LjMgLjEgMi45IDAgNS44IC4xIDguNyAwIDEuNiAuMSAzLjMgMCA0LjktLjkgLjEtMS44IC4yLTIuNyAuMi0xMSAwLTIxLjktMi42LTMyLTYuOS02LTIuNy0xMS44LTUuOS0xNy4xLTkuOC01LjgtNC4yLTExLjEtOS0xNS44LTE0LjMtNi41LTcuMi0xMi0xNS40LTE2LjYtMjMuOS0xLjEtMi0yLjItNC0zLjItNi4xLTEuMi0yLjYtMi42LTUuMS0zLjctNy44LTQtOS43LTYuNi0xOS45LTguMS0zMC4zLS41LTQuNC0xLjEtOC45LTEuMi0xMy4zLS43LTE1LjcgLjgtMzEuNiA0LjctNDYuOCAyLjEtOC4yIDQuOC0xNi4yIDguMy0yMy44IDYuMy0xNC4yIDE1LjMtMjcuMiAyNi4zLTM4LjIgNi4zLTYuMiAxMy4xLTExLjggMjAuNS0xNi43ek0zMjIuNyA2My40YzIuNyAuNyA1LjQgMS43IDguMSAyLjcgNi40IDIuMyAxMi43IDQuOCAxOC43IDggMTMuMSA2LjQgMjUuMyAxNC44IDM1LjggMjUgMTAuMiAxMCAxOC43IDIxLjYgMjUuMSAzNC4zIDEuMyAyLjcgMi42IDUuNSAzLjggOC4zIDYuMyAxNS4xIDEwIDMxLjMgMTEuMiA0Ny42IC40IDQuNSAuNCA5LjEgLjUgMTMuNiAuMSAxMS42LTEuNSAyMy4zLTQuMyAzNC41LTIgNy4zLTQuMyAxNC41LTcuOSAyMS4yLTMuMiA2LjYtNi43IDEzLjItMTAuOCAxOS4yLTYuOSAxMC41LTE1LjYgMTkuOS0yNS44IDI3LjItMTAuNSA3LjYtMjIuNiAxMy0zNS40IDE1LjQtMy41IC43LTcuMSAxLjEtMTAuNyAxLjItMS44IC4xLTMuNyAuMi01LjYtLjEtLjMtMi4xIDAtNC4zIDAtNi41IDAtMy43IC4xLTcuNCAuMS0xMS4yIC4yLTcgMC0xNC4xIC4yLTIxLjEgMC0yLjQgMC00LjggMC03LjEgLjItNS4xIDAtMTAuMSAuMS0xNS4yIC4xLTMtLjItNiAuNS05IC43LTIuNSAxLjgtNC45IDMuMS03LjEgNC41LTcuMyAxMS4xLTEzIDE3LjctMTguMyA1LjQtNC4yIDEwLjUtOC44IDE1LTEzLjggNy43LTguNCAxNC4yLTE3LjkgMTguOC0yOC4zIDIuNS01LjkgNC41LTEyLjEgNS41LTE4LjUgLjktNC40IDEuMS04LjggMS0xMy4zIDAtNy44LTEuNC0xNS42LTMuNi0yMy4yLTEuOC01LjctNC4zLTExLjItNy4xLTE2LjQtMy45LTYuOS04LjYtMTMuMy0xNC0xOS4yLTkuOS0xMC44LTIxLjgtMTkuOS0zNC42LTI3LjEtMS44LTEtMy44LTEuOC01LjYtM3pNMjIxLjkgMTIxLjljMS0xLjIgMi0yLjMgMy4xLTMuNC0uNiAuOS0xLjMgMS44LTIgMi43LTMuMSAzLjktNS41IDguMy03IDEzLjEtLjkgMy4zLTEuNyA2LjYtMS43IDEwLS4xIDIuNS0uMSA1LjEgLjMgNy42IDEuMSA3LjYgNC4zIDE0LjkgOC44IDIxLjEgMiAyLjcgNC4yIDUuMyA2LjkgNy4zIDEuNiAxLjMgMy41IDIuMSA1LjMgMyAzLjEgMS43IDYuMyAzLjIgOS4xIDUuNSAyLjcgMi4xIDQuNiA1LjMgNC40IDguOCAwIDczLjcgMCAxNDcuMyAwIDIyMSAwIDEuNC0uMSAyLjcgMCA0IC4xIDEuNSAuOCAyLjggMS41IDQuMSAuOSAxLjcgMS44IDMuMyAzLjIgNC42IC45IC44IDIgMS40IDMuMiAxLjIgMS41LS4yIDIuNy0xLjQgMy40LTIuNiAxLTEuNSAxLjctMy4yIDIuMy00LjkgLjgtMi4xIC40LTQuNCAuNS02LjYgLjEtNCAwLTguMSAuMS0xMi4xIDAtNS45IDAtMTEuOCAuMS0xNy43IC4xLTMuNiAwLTcuMiAuMS0xMC45IC4yLTQgMC04LjEgLjEtMTIuMSAwLTYgMC0xMiAuMS0xOCAuMS0zLjYgMC03LjIgLjEtMTAuOSAuMS0zLjkgMC03LjkgLjEtMTEuOCAwLTYgMC0xMiAuMS0xOCAuMi0zLjkgMC03LjkgLjItMTEuOCAuMyAxLjQgLjEgMi45IC4yIDQuNCAuMiAzLjYgLjQgNy4yIC44IDEwLjggLjMgMy40IC40IDYuOSAuOSAxMC4zIC40IDMuMSAuNSA2LjIgMSA5LjMgLjYgNC4xIC45IDguMiAxLjUgMTIuMyAxLjUgOSAyLjggMTguMSA1LjEgMjcgMS4xIDQuOCAyLjQgOS42IDQgMTQuMyAyLjUgNy45IDUuNyAxNS43IDEwLjMgMjIuNiAxLjcgMi42IDMuOSA1IDYuMSA3LjIgLjMgLjIgLjYgLjUgLjkgLjcgLjYgLjMgMS4zLS4xIDEuNy0uNiAuNy0uOSAxLjItMS45IDEuNy0yLjkgNC4xLTcuOCA4LjItMTUuNiAxMi4zLTIzLjMgLjctMS4zIDEuNC0yLjYgMi42LTMuNiAxLjgtMS42IDMuOC0yLjcgNi0zLjYgMi45LTEuMiA1LjktMi4yIDktMi40IDYuNi0uNiAxMy4xIC43IDE5LjYgMS44IDMuNyAuNiA3LjQgMS4yIDExLjEgMS40IDMuNyAuMSA3LjUgLjEgMTEuMi0uMyA4LjYtLjkgMTctMyAyNC45LTYuMiA1LjMtMi4yIDEwLjUtNC44IDE1LjMtNy45IDExLjUtNy4yIDIxLjUtMTYuNiAzMC0yNyAxLjItMS40IDIuMi0yLjkgMy41LTQuMy0xLjIgMy4yLTIuNyA2LjQtNC4yIDkuNS0xLjMgMi45LTIuOCA1LjYtNC4zIDguNC01LjIgOS42LTExIDE4LjktMTcuOCAyNy41LTQgNS4yLTguNSAxMC4xLTEzLjMgMTQuNi02LjYgNi4xLTE0LjEgMTEuNC0yMi40IDE0LjgtOC4yIDMuNC0xNy4zIDQuNi0yNi4xIDMuMy0zLjYtLjYtNy0xLjctMTAuNC0yLjktMi44LTEtNS40LTIuNC04LTMuNy0zLjQtMS43LTYuNi0zLjgtOS43LTYuMSAyLjcgMy4xIDUuNyA1LjkgOC43IDguNiA0LjMgMy44IDguNyA3LjMgMTMuNiAxMC4yIDQgMi41IDguMyA0LjQgMTIuOCA1LjUgMS41IC40IDMgLjUgNC41IC42LTEuMyAxLjEtMi42IDItNCAzLTkuNiA2LjUtMjAgMTEuOS0zMC43IDE2LjQtMjAuOSA4LjctNDMuMiAxNC02NS43IDE1LjMtNC43IC4yLTkuMyAuNC0xNCAuNC01LS4xLTEwLS4xLTE0LjktLjctMTEuMi0uOC0yMi4zLTIuNy0zMy4yLTUuNC0xMC40LTIuNy0yMC42LTYuMS0zMC4zLTEwLjYtOC43LTMuOS0xNy4xLTguNC0yNS0xMy44LTEuOC0xLjMtMy43LTIuNS01LjQtNC4xIDYuNi0xLjIgMTMtMy40IDE5LTYuNSA1LjctMi45IDExLTYuNyAxNS42LTExLjEgMi4yLTIuMiA0LjMtNC42IDYuMi03LjEtMy40IDIuMS02LjkgNC4yLTEwLjYgNS44LTQuNCAyLjItOS4xIDMuOC0xMy44IDUtNS43IDEuNS0xMS43IDEuNy0xNy42IDEuMS04LjEtMS0xNS45LTQuMy0yMi41LTktNC4zLTIuOS04LjItNi40LTEyLTEwLjEtOS45LTEwLjItMTguMi0yMS44LTI1LjctMzMuOS0zLjktNi4zLTcuNS0xMi43LTExLjEtMTkuMi0xLTItMi4xLTQuMS0zLjItNi4xIDIuOCAyLjkgNS42IDYgOC40IDguOSAxOS4yIDE5LjIgMzcuNiAzMi4zIDUzLjcgMzUuNSAzLjEgLjcgNi4zIC41IDkuNSAuOCAyLjggLjMgNS42IC4yIDguMyAuMyA1IC4xIDEwLjEgMCAxNS4yLS4yIDMuNi0uMiA3LjMtLjcgMTAuOS0xLjEgMi4xLS4yIDQuMS0uNyA2LjEtMS4yIDMuOS0xIDguMS0xIDExLjggLjYgNC44IDEuOCA4LjQgNS42IDExLjQgOS43IDIuMiAzIDQuMSA2LjIgNS43IDkuNiAxLjIgMi40IDIuNSA0LjggMy42IDcuMyAxIDIuMiAyLjIgNC40IDMuNCA2LjUgLjcgMSAxLjQgMi4yIDIuNiAyLjYgMS4xLS44IDEuNy0xLjkgMi4zLTMgMi4xLTQuMiAzLjQtOC42IDQuOS0xMyAyLTYuNiAzLjgtMTMuMyA1LjItMjAgMi4yLTkuMyAzLjItMTguNyA0LjUtMjguMSAuNi00IC44LTggMS4zLTEyIC45LTEwLjYgMS45LTIxLjMgMi4yLTMxLjkgLjEtMS45IC4yLTMuNyAuMy01LjYgMC00LjMgLjItOC43IC4yLTEzIDAtMi40IDAtNC44IDAtNy4xIDAtNS4xLS4yLTEwLjEtLjItMTUuMi0uMi02LjYtLjctMTMuMi0xLjMtMTkuOC0uNy01LjktMS41LTExLjgtMy4xLTE3LjUtMi03LjctNS42LTE1LTkuOC0yMS44LTMuMi01LjEtNi44LTkuOS0xMS4xLTE0LTMuOS0zLjktOC42LTcuMS0xMy45LTguNC0xLjUtLjQtMy4xLS40LTQuNi0uNiAuMS0zIC43LTUuOSAxLjMtOC44IDEuNi03LjcgMy44LTE1LjMgNi44LTIyLjYgMS41LTQgMy40LTcuOSA1LjQtMTEuNyAzLjQtNi42IDcuNi0xMi44IDEyLjUtMTguNXptMzEuMyAxLjdjLjQtLjEgLjctLjEgMS4xLS4yIC4yIDEuOCAuMSAzLjYgLjEgNS40bDAgMzguMWMwIDEuNyAuMSAzLjUtLjIgNS4yLS40IDAtLjcgMC0xLjEgMC0uOS0zLjgtMS43LTcuNi0yLjYtMTEuMy0uNC0xLjUtLjYtMy4xLTEuMS00LjYtMS43LS4yLTMuNC0uMi01LjItLjItNS4xIDAtMTAuMSAwLTE1LjIgMC0xLjcgMC0zLjMgLjEtNSAwIDAtLjQtLjMtLjkgLjItMS4yIDEuMy0uNyAyLjctLjkgNC4xLTEuNCAzLjQtMS4xIDYuOS0yLjIgMTAuMy0zLjMgMS40LS41IDIuOS0uNyA0LjItMS41IDAtLjYgMC0xLjEgMC0xLjctMS4yLS42LTIuNS0uOS0zLjgtMS4zLTMuMS0xLTYuMy0yLTkuNC0zLTEuOC0uNi0zLjctMS01LjQtMS44IDAtLjQtLjEtLjctLjEtMS4xIDUuMS0uMiAxMC4yIC4xIDE1LjMtLjEgMy40LS4xIDYuNyAuMSAxMC4xLS4xIC4xLS40IC4zLS44IC40LTEuMiAxLjEtNC45IDIuMy05LjggMy40LTE0Ljd6bTYtLjJjLjQgMCAuNyAuMSAxLjEgLjIgMSAzLjggMS43IDcuOCAyLjcgMTEuNiAuNCAxLjQgLjYgMi45IDEgNC4zIDIuNSAuMiA1LjEgMCA3LjYgMCA1LjIgLjEgMTAuMyAuMSAxNS41IC4xIC44IDAgMS41IDAgMi4zIC4xIDAgLjQtLjEgLjctLjEgMS4xLTEuOCAuOC0zLjggMS4yLTUuNyAxLjktMy43IDEuMi03LjUgMi40LTExLjIgMy42LS42IC4yLTEuMSAuNC0xLjcgLjYtLjIgLjYtLjIgMS4xLS4xIDEuNyAuOSAuNSAxLjggLjggMi44IDEuMSA0LjkgMS41IDkuNyAzLjEgMTQuNiA0LjYgLjQgLjEgLjggLjMgMS4xIC41IC40IC4zIC4yIC44IC4yIDEuMi0xLjcgLjEtMy4zIDAtNSAwLTUuMiAwLTEwLjMgMC0xNS41IDAtMS42IDAtMy4yIDAtNC44IC4yLS41IDEuNy0uNyAzLjQtMS4yIDUuMS0uOSAzLjYtMS41IDcuMi0yLjUgMTAuOC0uNCAwLS43IDAtMS4xIC4xLS4zLTEuNy0uMi0zLjUtLjItNS4ybDAtMzguMWMwLTEuOC0uMS0zLjYgLjEtNS40em0tMTg2IDQ1YzEuMS0yLjIgMi4xLTQuNCAzLjQtNi41LTEuOCA3LjYtMi45IDE1LjMtMy42IDIzLS44IDcuNy0uOCAxNS41LS41IDIzLjIgMS4xIDE5LjkgNS41IDM5LjggMTQuMiA1Ny45IDMgNiA2LjQgMTEuOCAxMC41IDE3LjEgNi4xIDcuNSAxMi41IDE0LjggMTkuOCAyMS4xIDQuOCA0LjEgMTAgNy44IDE1LjUgMTAuOCAzLjMgMS43IDYuNSAzLjQgOS45IDQuNyA1IDIgMTAuMiAzLjYgMTUuNCA0LjkgMy44IDEgNy44IDEuNCAxMS41IDIuNyA1IDEuNiA5LjUgNC42IDEzIDguNCA0LjkgNS4yIDguMSAxMS45IDEwLjIgMTguNyAxIDIuOSAxLjYgNS45IDIuMiA4LjkgLjIgLjggLjIgMS41IC4yIDIuMy02LjUgMi44LTEzLjMgNS4xLTIwLjMgNi4yLTQuMSAuOC04LjMgMS0xMi41IDEuMS0xMC4yIC4yLTIwLjUtMS44LTMwLjEtNS4xLTMuNy0xLjQtNy41LTIuOS0xMS00LjctOC4xLTMuOC0xNS42LTguNy0yMi41LTE0LjUtMi45LTIuNi01LjgtNS4xLTguNC04LTkuMi05LjgtMTYuMy0yMS40LTIxLjgtMzMuNy0yLjQtNS41LTQuNi0xMS4yLTYuNC0xNy0xLjItMy45LTIuNC03LjktMy4zLTExLjktLjctMi45LTEuMi01LjktMS45LTguOS0uNS0yLjEtLjctNC4zLTEtNi41LS44LTUuNC0xLjMtMTAuOS0xLjMtMTYuNCAuMS02LjIgLjItMTIuNCAxLjEtMTguNSAuNC0yLjkgLjctNS43IDEuMi04LjYgMS01LjcgMi4xLTExLjQgMy43LTE2LjkgMy4xLTExLjYgNy41LTIzIDEyLjctMzMuOHptMzYzLjctNi40YzEuMSAxLjcgMS45IDMuNSAyLjggNS4zIDIuMSA0LjUgNC4yIDguOSA2IDEzLjUgNy42IDE4LjggMTIuMyAzOC44IDEzIDU5IDAgMS44IC4xIDMuNSAuMSA1LjMgLjEgOS42LTEuMyAxOS4xLTMuMiAyOC41LS43IDMuNi0xLjUgNy4yLTIuNiAxMC43LTQgMTQuNy0xMCAyOS0xOC40IDQxLjgtOC4yIDEyLjYtMTkgMjMuNS0zMS44IDMxLjQtNS43IDMuNi0xMS44IDYuNi0xOCA5LjItNS44IDIuMi0xMS43IDQtMTcuOCA1LjEtNi40IDEtMTIuOSAxLjUtMTkuNCAxLjItNy45LS41LTE1LjgtMi4xLTIzLjItNC44LTEuOS0uOC0zLjktMS41LTUuOC0yLjMtLjItMS41IC4yLTMgLjUtNC41IDEuMi01LjcgMy0xMS40IDUuNy0xNi42IDIuNC00LjUgNS41LTguNyA5LjUtMTEuOSAyLjQtMi4xIDUuMi0zLjYgOC4yLTQuOCAzLjYtMS41IDcuNS0yIDExLjItMi44IDcuMi0xLjcgMTQuNC0zLjkgMjEuMi03IDEwLjMtNC43IDE5LjctMTEuNCAyNy42LTE5LjUgMS42LTEuNiAzLjItMy4yIDQuNy00LjkgMy40LTMuOCA2LjctNy42IDkuOC0xMS41IDcuNS0xMC4xIDEyLjgtMjEuNiAxNi43LTMzLjUgMS42LTUuMyAzLjItMTAuNiA0LjItMTYuMSAuNi0yLjkgMS01LjggMS41LTguNyAuOS02LjEgMS42LTEyLjIgMS43LTE4LjQgLjEtNi42IC4xLTEzLjMtLjUtMTkuOS0uNy04LTEuOS0xNi0zLjctMjMuOHoiXX0sS3N0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN1c2UiLGljb246WzY0MCw1MTIsW10sImY3ZDYiLCJNNjA0LjUgMjEwYTEwLjQgMTAuNCAwIDEgMSAtMTEuNC0xNy40IDEwLjQgMTAuNCAwIDEgMSAxMS40IDE3LjR6TTYyMSAxODcuMmEzOC41IDM4LjUgMCAxIDEgLTc1IDE3LjYgMzguNSAzOC41IDAgMSAxIDc1LTE3LjZ6TTQzMy43IDMzNi43YzMuMiA0LjYgNS44IDkgNy4zIDEzLjQgMSAzLjEgMi40IDcuMyA1LjUgOC45IC4yIC4xIC4zIC4yIC41IC4yIDUuNyAyLjEgMjAuMyAxLjcgMjAuMyAxLjdsMjYuOCAwYzIuMyAwIDIyLjQgMCAyMS45LTIuMy0yLjQtMTAuOC0xNC45LTEyLjctMjQuNC0xOC4zLTguNy01LjItMTctMTEuMS0yMC44LTIxLjMtMi01LjItLjgtMTcuNCAyLjYtMjEuOCAyLjUtMy4yIDYuMS01LjMgMTAtNi4yIDQuMy0uOSA4LjgtLjEgMTMuMSAuMyA1LjMgLjUgMTAuNiAxLjUgMTUuOSAyLjIgMTAuMyAxLjMgMjAuNiAxLjkgMzEgMS42IDE3LjEtLjUgMzQuMi0zLjIgNTAuNC04LjcgMTEuMy0zLjggMjIuNC04LjkgMzItMTYuMSAxMC45LTguMSA4LjEtNy40LTMtNi4yLTEzLjMgMS40LTI2LjYgMS42LTM5LjkgLjgtMTIuNC0uNy0yNC43LTIuMi0zNS45LTcuOS04LjgtNC42LTE2LjQtOS4xLTIzLjQtMTYuMi0xLTEuMS0xLjctNC4yIC4yLTYuMiAxLjktMS45IDUuOC0uOCA3IC4yIDEyLjIgMTAuMiAzMC41IDE4LjYgNDkuMyAxOS41IDEwLjIgLjUgMjAuMSAuNyAzMC40IC4zIDUuMS0uMiAxMi44LS4yIDE3LjktLjMgMi42IDAgOS44IC43IDExLjItMi4xIC40LS44IC40LTEuOCAuMy0yLjctMS41LTQwLjktNC41LTg2LjktNDcuMy0xMDYuNS0zMS45LTE0LjYtNzkuNy0zNy4yLTk5LjktNDYuNi00LjctMi4yLTEwLjIgMS4zLTEwLjIgNi41IDAgMTMuNiAuNyAzMy4zIC43IDUxLjEtOS43LTkuOS0yNi0xNi4xLTM4LjQtMjEuOC0xNC4xLTYuNS0yOC43LTEyLTQzLjUtMTYuNi0yOS44LTkuMi02MC43LTE0LjktOTEuNy0xOC0zNS4yLTMuNS03MS0xLjgtMTA1LjcgNS4zLTU2LjkgMTIuMi0xMTMuMSAzOS43LTE1NS43IDc5LjgtMjYuMSAyNC42LTQ2LjYgNTkuNy00OCA5NS4yLTIgNTAuMyAxMi4xIDc3LjMgMzggMTA1LjIgNDEuMyA0NC40IDEzMC4yIDUwLjYgMTY2LjItMiAxNi4yLTIzLjcgMTkuNy01NS44IDgtODItMTEuOC0yNi4yLTM4LjgtNDUuMS02Ny40LTQ2LTIyLjItLjctNDUuOSAxMC42LTU0LjUgMzEuMS02LjUgMTUuNy0yLjggMzUuMSA5IDQ3LjMgNC42IDQuOCAxMC45IDguNyAxNy43IDcuMSA0LS45IDcuNC0zLjkgOC04IC45LTYtNC40LTkuOS03LjYtMTQuNS01LjgtOC4zLTQuNy0yMC45IDIuNy0yNy45IDYuMi02IDE1LjMtNy44IDIzLjktNy43IDggMCAxNi4yIDEuNCAyMy4xIDUuNSA5LjcgNS43IDE2LjIgMTYuMiAxOC40IDI3LjIgNi43IDMzLTIwLjIgNTkuOS01Ni42IDYyLTE4LjYgMS4xLTM3LjYtMy44LTUyLjEtMTUuNS0zNi45LTI5LjgtNDUuOS05MC4zLTMuOC0xMjIuNyA0MC0zMC43IDkwLjQtMjIuOCAxMjAuMi02LjggMjMuOCAxMi44IDQxLjUgMzMuNiA1NSA1Ni43IDYuNyAxMS42IDEyLjUgMjMuNyAxNy44IDM2LjEgNS4xIDExLjggOS45IDIzLjggMjAuMiAzMi41IDYuOCA1LjggMTUuMiA1LjYgMjQuMSA1LjZsNTAuOCAwYzYuOSAwIDUuMi00LjYgMi4yLTcuNy02LjctNi45LTE2LjQtOC40LTI1LjQtMTAuOS0yMC41LTUuNi0xOC40LTMyLjgtMTIuNy0zMi44IDE4LjMgMCAxOC45IC42IDM0LjkgLjMgMjMuMi0uMyAzMC4yLTEuNyA0OC4zIDUgOS43IDMuNiAxOSAxMy4xIDI1LjEgMjEuN3oiXX0sSnN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFwcC1zdG9yZS1pb3MiLGljb246WzQ0OCw1MTIsW10sImYzNzAiLCJNNDAwIDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMzUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTEyNyAzODQuNWMtNS41IDkuNi0xNy44IDEyLjgtMjcuMyA3LjMtOS42LTUuNS0xMi44LTE3LjgtNy4zLTI3LjNsMTQuMy0yNC43YzE2LjEtNC45IDI5LjMtMS4xIDM5LjYgMTEuNEwxMjcgMzg0LjV6bTEzOC45LTUzLjlMODQgMzMwLjZjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDUxIDAgNjUuNC0xMTMuMi0yMC41LTM1LjRjLTUuNS05LjYtMi4yLTIxLjggNy4zLTI3LjMgOS42LTUuNSAyMS44LTIuMiAyNy4zIDcuM2w4LjkgMTUuNCA4LjktMTUuNGM1LjUtOS42IDE3LjgtMTIuOCAyNy4zLTcuMyA5LjYgNS41IDEyLjggMTcuOCA3LjMgMjcuM2wtODUuOCAxNDguNiA2Mi4xIDBjMjAuMiAwIDMxLjUgMjMuNyAyMi43IDQwem05OC4xIDBsLTI5IDAgMTkuNiAzMy45YzUuNSA5LjYgMi4yIDIxLjgtNy4zIDI3LjMtOS42IDUuNS0yMS44IDIuMi0yNy4zLTcuMy0zMi45LTU2LjktNTcuNS05OS43LTc0LTEyOC4xLTE2LjctMjktNC44LTU4IDcuMS02Ny44IDEzLjEgMjIuNyAzMi43IDU2LjcgNTguOSAxMDJsNTIgMGMxMSAwIDIwIDkgMjAgMjAgMCAxMS4xLTkgMjAtMjAgMjB6Il19LFkxZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtZHJpYmJibGUiLGljb246WzQ0OCw1MTIsWyJkcmliYmJsZS1zcXVhcmUiXSwiZjM5NyIsIk0xNjUuOSAxMzIuNWMtMzguMyAxOC02Ni44IDUzLjMtNzUuNyA5NS43IDYuMSAuMSA2Mi40IC4zIDEyNi40LTE2LjctMjIuNy00MC4yLTQ3LjEtNzQuMS01MC43LTc5em0yNi4xLTkuMWMzLjggNS4xIDI4LjYgMzguOSA1MSA4MCA0OC42LTE4LjMgNjkuMS00NS45IDcxLjYtNDkuNC0zMy42LTI5LjgtNzkuMy00MS4xLTEyMi42LTMwLjZ6TTI3Ny40IDM4MmMtMi0xMi0xMC01My44LTI5LjItMTAzLjYtNTUuMSAxOC44LTkzLjggNTYuNC0xMDguMSA4NS42IDQwLjUgMzEuNiA5My4zIDM2LjcgMTM3LjMgMTh6TTIyNy44IDIzMi42QzE1OS42IDI1MyA5My40IDI1Mi4yIDg3LjQgMjUybDAgNC4yYzAgMzUuMSAxMy4zIDY3LjEgMzUuMSA5MS40IDIyLjItMzcuOSA2Ny4xLTc3LjkgMTE2LjUtOTEuOC0zLjQtNy44LTcuMi0xNS41LTExLjEtMjMuMmwtLjEgMHptNzIuNSAxMzYuOWMzMC43LTIwLjcgNTIuNS01My42IDU4LjYtOTEuNi00LjYtMS41LTQyLjMtMTIuNy04NS4xLTUuOCAxNy45IDQ5LjEgMjUuMSA4OS4xIDI2LjUgOTcuNHptLTM0LjgtMTE5YzQ1LjUtNS43IDkwLjcgMy40IDk1LjIgNC40LS4zLTMyLjMtMTEuOC02MS45LTMwLjktODUuMS0yLjkgMy45LTI1LjggMzMuMi03Ni4zIDUzLjkgNC44IDkuOCA4LjMgMTcuOCAxMiAyNi44ek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHpNMjI0IDk2YTE2MCAxNjAgMCAxIDEgMCAzMjAgMTYwIDE2MCAwIDEgMSAwLTMyMHoiXX0sZW50PVkxZSx0bnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidWlraXQiLGljb246WzQ0OCw1MTIsW10sImY0MDMiLCJNNDQzLjkgMTI4bDAgMjU2LTIyNS45IDEyOC0yMTgtMTI4IDAtMjE0LjMgODcuNiA0NS4xIDAgMTE3IDEzMy41IDc1LjUgMTM1LjgtNzUuNSAwLTE1MS0xMDEuMS01Ny42IDg3LjYtNTMuMSAxMDAuNSA1Ny45ek0zMDguNiA0OS4xbC04NC44LTQ5LjEtODguNiA1NC44IDg2IDQ3LjMgODcuNC01M3oiXX0sYW50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN1cGVycG93ZXJzIixpY29uOls0NDgsNTEyLFtdLCJmMmRkIiwiTTQ0OCAzMmMtODMuMyAxMS0xNjYuOCAyMi0yNTAgMzMtOTIgMTIuNS0xNjMuMyA4Ni43LTE2OSAxODAtMy4zIDU1LjUgMTggMTA5LjUgNTcuOCAxNDguMkwwIDQ4MGM4My4zLTExIDE2Ni41LTIyIDI0OS44LTMzIDkxLjgtMTIuNSAxNjMuMy04Ni44IDE2OC43LTE3OS44IDMuNS01NS41LTE4LTEwOS41LTU3LjctMTQ4LjJMNDQ4IDMyek0zNjguMyAyNjQuM2MtNC4yIDc5LjUtNzQgMTM5LjItMTUyLjggMTM0LjUtNzkuNS00LjctMTQwLjctNzEtMTM2LjMtMTUxIDQuNS03OS4yIDc0LjMtMTM5LjMgMTUzLTEzNC41IDc5LjMgNC43IDE0MC41IDcxIDEzNi4xIDE1MXoiXX0scm50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InlvdXR1YmUiLGljb246WzU3Niw1MTIsWzYxODAyXSwiZjE2NyIsIk01NDkuNyAxMjQuMUM1NDMuNSAxMDAuNCA1MjQuOSA4MS44IDUwMS40IDc1LjUgNDU4LjkgNjQgMjg4LjEgNjQgMjg4LjEgNjRTMTE3LjMgNjQgNzQuNyA3NS41QzUxLjIgODEuOCAzMi43IDEwMC40IDI2LjQgMTI0LjEgMTUgMTY3IDE1IDI1Ni40IDE1IDI1Ni40czAgODkuNCAxMS40IDEzMi4zYzYuMyAyMy42IDI0LjggNDEuNSA0OC4zIDQ3LjggNDIuNiAxMS41IDIxMy40IDExLjUgMjEzLjQgMTEuNXMxNzAuOCAwIDIxMy40LTExLjVjMjMuNS02LjMgNDItMjQuMiA0OC4zLTQ3LjggMTEuNC00Mi45IDExLjQtMTMyLjMgMTEuNC0xMzIuM3MwLTg5LjQtMTEuNC0xMzIuM3pNMjMyLjIgMzM3LjZsMC0xNjIuNCAxNDIuNyA4MS4yLTE0Mi43IDgxLjJ6Il19LGludD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJlbWJlciIsaWNvbjpbNjQwLDUxMixbXSwiZjQyMyIsIk02MzkuOSAyNTQuNmMtMS4xLTEwLjctMTAuNy02LjgtMTAuNy02LjhzLTE1LjYgMTIuMS0yOS4zIDEwLjdjLTEzLjctMS4zLTkuNC0zMi05LjQtMzJzMy0yOC4xLTUuMS0zMC40Yy04LjEtMi40LTE4IDcuMy0xOCA3LjNzLTEyLjQgMTMuNy0xOC4zIDMxLjJsLTEuNiAuNXMxLjktMzAuNi0uMy0zNy42Yy0xLjYtMy41LTE2LjQtMy4yLTE4LjggM3MtMTQuMiA0OS4yLTE1IDY3LjJjMCAwLTIzLjEgMTkuNi00My4zIDIyLjhzLTI1LTkuNC0yNS05LjQgNTQuOC0xNS4zIDUyLjktNTkuMS00NC4yLTI3LjYtNDktMjRjLTQuNiAzLjUtMjkuNCAxOC40LTM2LjYgNTkuNy0uMiAxLjQtLjcgNy41LS43IDcuNXMtMjEuMiAxNC4yLTMzIDE4YzAgMCAzMy01NS42LTcuMy04MC45LTExLjQtNi44LTIxLjMtLjUtMjcuMiA1LjMgMTMuNi0xNy4zIDQ2LjQtNjQuMiAzNi45LTEwNS4yLTUuOC0yNC40LTE4LTI3LjEtMjkuMi0yMy4xLTE3IDYuNy0yMy41IDE2LjctMjMuNSAxNi43cy0yMiAzMi0yNy4xIDc5LjUtMTIuNiAxMDUuMS0xMi42IDEwNS4xLTEwLjUgMTAuMi0yMC4yIDEwLjctNS40LTI4LjctNS40LTI4LjcgNy41LTQ0LjYgNy01Mi4xLTEuMS0xMS42LTkuOS0xNC4yYy04LjktMi43LTE4LjUgOC42LTE4LjUgOC42cy0yNS41IDM4LjctMjcuNyA0NC42bC0xLjMgMi40LTEuMy0xLjZzMTgtNTIuNyAuOC01My41LTI4LjUgMTguOC0yOC41IDE4LjgtMTkuNiAzMi44LTIwLjQgMzYuNWwtMS4zLTEuNnM4LjEtMzguMiA2LjQtNDcuNmMtMS42LTkuNC0xMC41LTcuNS0xMC41LTcuNXMtMTEuMy0xLjMtMTQuMiA1LjktMTMuNyA1NS4zLTE1IDcwLjdjMCAwLTI4LjIgMjAuMi00Ni44IDIwLjQtMTguNSAuMy0xNi43LTExLjgtMTYuNy0xMS44czY4LTIzLjMgNDkuNC02OS4yYy04LjMtMTEuOC0xOC0xNS41LTMxLjctMTUuMy0xMy43IC4zLTMwLjMgOC42LTQxLjMgMzMuMy01LjMgMTEuOC02LjggMjMtNy44IDMxLjUgMCAwLTEyLjMgMi40LTE4LjgtMi45cy0xMCAwLTEwIDAtMTEuMiAxNC0uMSAxOC4zIDI4LjEgNi4xIDI4LjEgNi4xYzEuNiA3LjUgNi4yIDE5LjUgMTkuNiAyOS43IDIwLjIgMTUuMyA1OC44LTEuMyA1OC44LTEuM2wxNS45LTguOHMuNSAxNC42IDEyLjEgMTYuNyAxNi40IDEgMzYuNS00Ny45YzExLjgtMjUgMTIuNi0yMy42IDEyLjYtMjMuNmwxLjMtLjNzLTkuMSA0Ni44LTUuNiA1OS43QzE4Ny43IDMxOS40IDIwMyAzMTggMjAzIDMxOHM4LjMgMi40IDE1LTIxLjIgMTkuNi00OS45IDE5LjYtNDkuOWwxLjYgMHMtNS42IDQ4LjEgMyA2My43IDMwLjkgNS4zIDMwLjkgNS4zIDE1LjYtNy44IDE4LTEwLjJjMCAwIDE4LjUgMTUuOCA0NC42IDEyLjkgNTguMy0xMS41IDc5LjEtMjUuOSA3OS4xLTI1LjlzMTAgMjQuNCA0MS4xIDI2LjdjMzUuNSAyLjcgNTQuOC0xOC42IDU0LjgtMTguNnMtLjMgMTMuNSAxMi4xIDE4LjYgMjAuNy0yMi44IDIwLjctMjIuOGwyMC43LTU3LjIgMS45IDBzMS4xIDM3LjMgMjEuNSA0My4yIDQ3LTEzLjcgNDctMTMuNyA2LjQtMy41IDUuMy0xNC4zem0tNTc4IDUuM2MuOC0zMiAyMS44LTQ1LjkgMjktMzkgNy4zIDcgNC42IDIyLTkuMSAzMS40LTEzLjcgOS41LTE5LjkgNy42LTE5LjkgNy42ek0zMzQuNyAxMzYuMXMxOS4xLTQ5LjcgMjMuNi0yNS41LTQwIDk2LjItNDAgOTYuMmMuNS0xNi4yIDE2LjQtNzAuNyAxNi40LTcwLjd6bTIyLjggMTM4LjRjLTEyLjYgMzMtNDMuMyAxOS42LTQzLjMgMTkuNnMtMy41LTExLjggNi40LTQ0LjkgMzMuMy0yMC4yIDMzLjMtMjAuMiAxNi4yIDEyLjQgMy42IDQ1LjV6bTg0LjYtMTQuNnMtMy0xMC41IDguMS0zMC42YzExLTIwLjIgMTkuNi05LjEgMTkuNi05LjFzOS40IDEwLjItMS4zIDI1LjUtMjYuNCAxNC4yLTI2LjQgMTQuMnoiXX0sb250PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJvb3RzdHJhcCIsaWNvbjpbNTc2LDUxMixbXSwiZjgzNiIsIk0zMzMuNSAyMDEuNGMwLTIyLjEtMTUuNi0zNC4zLTQzLTM0LjNsLTUwLjQgMCAwIDcxLjIgNDIuNSAwYzMyLjgtLjEgNTAuOS0xMy4zIDUwLjktMzYuOXpNNTE3IDE4OC42Yy05LjUtMzAuOS0xMC45LTY4LjgtOS44LTk4LjEgMS4xLTMwLjUtMjIuNy01OC41LTU0LjctNTguNUwxMjMuNyAzMmMtMzIuMSAwLTU1LjggMjguMS01NC43IDU4LjUgMSAyOS4zLS4zIDY3LjItOS44IDk4LjEtOS42IDMxLTI1LjcgNTAuNi01Mi4yIDUzLjFsMCAyOC41YzI2LjQgMi41IDQyLjYgMjIuMSA1Mi4yIDUzLjEgOS41IDMwLjkgMTAuOSA2OC44IDkuOCA5OC4xLTEuMSAzMC41IDIyLjcgNTguNSA1NC43IDU4LjVsMzI4LjcgMGMzMi4xIDAgNTUuOC0yOC4xIDU0LjctNTguNS0xLTI5LjMgLjMtNjcuMiA5LjgtOTguMSA5LjYtMzEgMjUuNy01MC42IDUyLjEtNTMuMWwwLTI4LjVjLTI2LjMtMi41LTQyLjUtMjIuMS01Mi01My4xek0zMDAuMiAzNzUuMWwtOTcuOSAwIDAtMjM4LjMgOTcuNCAwYzQzLjMgMCA3MS43IDIzLjQgNzEuNyA1OS40IDAgMjUuMy0xOS4xIDQ3LjktNDMuNSA1MS44bDAgMS4zYzMzLjIgMy42IDU1LjUgMjYuNiA1NS41IDU4LjMgMCA0Mi4xLTMxLjMgNjcuNS04My4yIDY3LjV6bS0xMC0xMDguN2wtNTAuMSAwIDAgNzguNCA1Mi4zIDBjMzQuMiAwIDUyLjMtMTMuNyA1Mi4zLTM5LjUgMC0yNS43LTE4LjYtMzguOS01NC41LTM4Ljl6Il19LHNudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJpdHVuZXMiLGljb246WzQ0OCw1MTIsW10sImYzYjQiLCJNMjIzLjYgODAuM2ExNzEuMyAxNzEuMyAwIDEgMCAuMiAzNDIuNSAxNzEuMyAxNzEuMyAwIDEgMCAtLjItMzQyLjV6bTc5LjQgMjQwYy0zLjIgMTMuNi0xMy41IDIxLjItMjcuMyAyMy44LTEyLjEgMi4yLTIyLjIgMi44LTMxLjktNS0xMS44LTEwLTEyLTI2LjQtMS40LTM2LjggOC40LTggMjAuMy05LjYgMzgtMTIuOCAzLS41IDUuNi0xLjIgNy43LTMuNyAzLjItMy42IDIuMi0yIDIuMi04MC44IDAtNS42LTIuNy03LjEtOC40LTYuMS00IC43LTkxLjkgMTcuMS05MS45IDE3LjEtNSAxLjEtNi43IDIuNi02LjcgOC4zIDAgMTE2LjEgLjUgMTEwLjgtMS4yIDExOC41LTIuMSA5LTcuNiAxNS44LTE0LjkgMTkuNi04LjMgNC42LTIzLjQgNi42LTMxLjQgNS4yLTIxLjQtNC0yOC45LTI4LjctMTQuNC00Mi45IDguNC04IDIwLjMtOS42IDM4LTEyLjggMy0uNSA1LjYtMS4yIDcuNy0zLjcgNS01LjcgLjktMTI3IDIuNi0xMzMuNyAuNC0yLjYgMS41LTQuOCAzLjUtNi40IDIuMS0xLjcgNS44LTIuNyA2LjctMi43IDEwMS0xOSAxMTMuMy0yMS40IDExNS4xLTIxLjQgNS43LS40IDkgMyA5IDguNy0uMSAxNzAuNiAuNCAxNjEuNC0xIDE2Ny42ek0zNDUuMiAzMkwxMDIuOCAzMkM0NS45IDMyIDAgNzcuOSAwIDEzNC44TDAgMzc3LjJDMCA0MzQuMSA0NS45IDQ4MCAxMDIuOCA0ODBsMjQyLjQgMGM1NyAwIDEwMi44LTQ1LjkgMTAyLjgtMTAyLjhsMC0yNDIuNEM0NDggNzcuOSA0MDIuMSAzMiAzNDUuMiAzMnpNMjIzLjYgNTlhMTkyLjUgMTkyLjUgMCAxIDEgMCAzODUgMTkyLjUgMTkyLjUgMCAxIDEgMC0zODV6Il19LFoxZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUteGluZyIsaWNvbjpbNDQ4LDUxMixbInhpbmctc3F1YXJlIl0sImYxNjkiLCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTkzLjggMzIwLjJjLTUuNSAwLTguNy01LjMtNi0xMC4zbDQ5LjMtODYuN2MuMSAwIC4xLS4xIDAtLjJsLTMxLjQtNTRjLTMtNS42IC4yLTEwLjEgNi0xMC4xbDQ2LjYgMGM1LjIgMCA5LjUgMi45IDEyLjkgOC43bDMxLjkgNTUuM2MtMS4zIDIuMy0xOCAzMS43LTUwLjEgODguMi0zLjUgNi4yLTcuNyA5LjEtMTIuNiA5LjFsLTQ2LjYgMHptMTYzLjUtMzMuNGwwIC4yIDY1LjUgMTE5YzIuOCA1LjEgLjEgMTAuMS02IDEwLjFsLTQ2LjYgMGMtNS41IDAtOS43LTIuOS0xMi45LTguN2wtNjYtMTIwLjNjMS44LTMuMiAyMi45LTQwLjQgNjMuMy0xMTEuNiAxMS43LTIwLjcgMjUuMS00NC4zIDQwLjEtNzAuOCAzLjMtNS44IDcuNC04LjcgMTIuNS04LjdsNDYuOSAwYzUuNy0uMSA4LjggNC43IDYgMTBMMjU3LjMgMjg2Ljh6Il19LG5udD1aMWUsbG50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNzczMtYWx0IixpY29uOlszODQsNTEyLFtdLCJmMzhiIiwiTTAgMzJMMzQuOSA0MjcuOCAxOTIgNDgwIDM0OS4xIDQyNy44IDM4NCAzMiAwIDMyem0zMTMuMSA4MGwtNC44IDQ3LjMtMTE1LjMgNDkuMy0uMyAuMSAxMTEuNSAwLTEyLjggMTQ2LjYtOTguMiAyOC43LTk4LjgtMjkuMi02LjQtNzMuOSA0OC45IDAgMy4yIDM4LjMgNTIuNiAxMy4zIDU0LjctMTUuNCAzLjctNjEuNi0xNjYuMy0uNSAwLS4xLS4yIC4xLTMuNi00Ni4zIDExMi4xLTQ2LjcgNi41LTIuNy0xMjIuOSAwLTUuOC00Ny4zIDI0Mi4yIDB6Il19LGNudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmVzcGFjZSIsaWNvbjpbNTEyLDUxMixbXSwiZjViZSIsIk0xODYuMSAzNDMuM2MtOS43IDkuNy05LjcgMjUuMyAwIDM0LjlzMjUuMyA5LjYgMzQuOSAwTDM3OC4zIDIyMS4xYzE5LjMtMTkuMyA1MC42LTE5LjMgNjkuOSAwczE5LjMgNTAuNiAwIDY5LjlMMjk0IDQ0NS4xYzE5LjMgMTkuMyA1MC41IDE5LjMgNjkuOCAwbDAgMCAxMTkuMy0xMTkuMmMzOC42LTM4LjYgMzguNi0xMDEuMSAwLTEzOS43LTM4LjYtMzguNi0xMDEuMi0zOC42LTEzOS43IDBMMTg2LjEgMzQzLjN6TTQzMC43IDIzOC41Yy05LjctOS43LTI1LjMtOS43LTM0LjkgMEwyMzguNSAzOTUuN2MtMTkuMyAxOS4zLTUwLjUgMTkuMy02OS44IDBsMCAwYy05LjYtOS42LTI1LjMtOS43LTM0LjkgMGwwIDBjLTkuNyA5LjYtOS43IDI1LjMgMCAzNC45bDAgMGMzOC42IDM4LjYgMTAxLjEgMzguNiAxMzkuNyAwTDQzMC43IDI3My41YzkuNi05LjcgOS42LTI1LjMgMC0zNC45em0tMjYyIDg3LjNMMzI1LjkgMTY4LjdjOS42LTkuNiA5LjYtMjUuMyAwLTM0LjktOS42LTkuNi0yNS4zLTkuNi0zNC45IDBMMTMzLjcgMjkwLjljLTE5LjMgMTkuMy01MC42IDE5LjMtNjkuOSAwbDAgMGMtMTkuMy0xOS4zLTE5LjMtNTAuNSAwLTY5LjhsMCAwIDE1NC4yLTE1NC4yYy0xOS4zLTE5LjMtNTAuNS0xOS4zLTY5LjggMGwwIDAtMTE5LjIgMTE5LjNjLTM4LjYgMzguNi0zOC42IDEwMS4xIDAgMTM5LjcgMzguNiAzOC42IDEwMS4xIDM4LjYgMTM5LjcgMHpNODEuMyAyNzMuNWM5LjYgOS42IDI1LjMgOS42IDM0LjkgMEwyNzMuNSAxMTYuM2MxOS4zLTE5LjMgNTAuNi0xOS4zIDY5LjggMGwwIDBjOS43IDkuNiAyNS4zIDkuNiAzNC45IDBzOS42LTI1LjMgMC0zNC45Yy0zOC42LTM4LjYtMTAxLjEtMzguNi0xMzkuNyAwTDgxLjMgMjM4LjVjLTkuNiA5LjYtOS42IDI1LjMgMCAzNC45bDAgMHoiXX0sZG50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InRyZWxsbyIsaWNvbjpbNDQ4LDUxMixbXSwiZjE4MSIsIk0zOTIuMyAzMkw1Ni4xIDMyYy0zMSAwLTU2LjEgMjUuMS01Ni4xIDU2LS4xIDAgMC00IDAgMzM2IDAgMzAuOSAyNS4xIDU2IDU2IDU2bDMzNi4yIDBjMzAuOC0uMiA1NS43LTI1LjIgNTUuNy01NmwwLTMzNmMuMS0zMC44LTI0LjgtNTUuOC01NS42LTU2ek0xOTcgMzcxLjNjLS4yIDE0LjctMTIuMSAyNi42LTI2LjkgMjYuNmwtODIuNyAwYy0xNC44IC4xLTI2LjktMTEuOC0yNy0yNi42bDAtMjU0LjJjMC0xNC44IDEyLTI2LjkgMjYuOS0yNi45bDgyLjkgMGMxNC44IDAgMjYuOSAxMiAyNi45IDI2LjlsMCAyNTQuMi0uMSAwem0xOTMuMS0xMTJjMCAxNC44LTEyIDI2LjktMjYuOSAyNi45bC04MSAwYy0xNC44IDAtMjYuOS0xMi0yNi45LTI2LjlsMC0xNDIuMWMwLTE0LjggMTItMjYuOSAyNi44LTI2LjlsODEuMSAwYzE0LjggMCAyNi45IDEyIDI2LjkgMjYuOWwwIDE0Mi4xeiJdfSxmbnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmlhZGVvIixpY29uOls0NDgsNTEyLFtdLCJmMmE5IiwiTTI3Ni40IDE1MC41bDAgLjdjLTE3LjktNTIuNi00Mi42LTEwMy40LTcwLjgtMTUxLjIgNDMuMyAyOS4yIDY3IDEwMCA3MC44IDE1MC41em0zMi43IDEyMS43YzcuNiAxOC4yIDExIDM3LjUgMTEgNTcgMCA3Ny43LTU3LjggMTQxLTEzNy44IDEzOS40bDMuOC0uM2M3NC4yLTQ2LjcgMTA5LjMtMTE4LjYgMTA5LjMtMjA1LjEgMC0zOC4xLTYuNS03NS45LTE4LjktMTEyIDEgMTEuNyAxIDIzLjcgMSAzNS40IDAgOTEuOC0xOC4xIDI0MS42LTExNi42IDI4MC02NS43LTExLjQtMTExLjMtNjguNi0xMTEuMy0xMzcuNCAwLTc1LjYgNTcuNC0xNDIuMyAxMzUuNC0xNDIuMyAxNi44IDAgMzMuNyAzLjEgNDkuMSA5LjYgMS43LTE1LjEgNi41LTI5LjkgMTMuNC00My4zLTE5LjktNy4yLTQxLjItMTAuNy02Mi41LTEwLjctMTYxLjUgMC0yMzguNyAxOTUuOS0xMjkuOSAzMTMuNyA2Ny45IDc0LjYgMTkyIDczLjkgMjU5LjggMCA1Ni42LTYxLjMgNjAuOS0xNDIuNCAzNi40LTIwMS0xMi43IDgtMjcuMSAxMy45LTQyLjIgMTd6TTQxOC4zIDExLjdjLTMxIDY2LjUtODEuMyA0Ny4yLTExNS44IDgwLjEtMTIuNCAxMi0yMC42IDM0LTIwLjYgNTAuNSAwIDE0LjEgNC41IDI3LjEgMTIgMzguOCA0Ny40LTExIDk4LjMtNDYgMTE4LjItOTAuNy0uNyA1LjUtNC44IDE0LjQtNy4yIDE5LjItMjAuMyAzNS43LTY0LjYgNjUuNi05OS43IDg0LjkgMTQuOCAxNC40IDMzLjcgMjUuOCA1NSAyNS44IDc5IDAgMTEwLjEtMTM0LjYgNTguMS0yMDguNnoiXX0sdW50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNlYXJjaGVuZ2luIixpY29uOls0NDgsNTEyLFtdLCJmM2ViIiwiTTIxNC42IDEzMC4zbC02Ny4yIDI4LjIgMC0xMTUuMy01NC43IDE5MC4zIDU0LjctMjQuMiAwIDEzMC4zIDY3LjItMjA5LjN6TTEzMS40IDMzLjZsLTEuMyA0LjctMTUuMiA1Mi45Qzc0LjYgMTA2LjcgNDYgMTQ1LjggNDYgMTkxLjUgNDYgMjQzLjggODAuMyAyODcuNCAxMjkuNCAyOTdsMCA1My42QzUxLjUgMzQwLjEtNiAyNzIuNC02IDE5MS42LTYgMTExLjEgNTMuOCA0NC40IDEzMS40IDMzLjZ6TTQ0Mi44IDQ4MC44Yy0xMS4yIDExLjItMjMuMSAxMi4zLTI4LjYgMTAuNS01LjQtMS44LTI3LjEtMTkuOS02MC40LTQ0LjQtMzMuMy0yNC42LTMzLjYtMzUuNy00My01Ni43LTkuNC0yMC45LTMwLjQtNDIuNi01Ny41LTUyLjRsLTkuNy0xNC43Yy0yNC43IDE2LjktNTMgMjYuOS04MS4zIDI4LjdsMi4xLTYuNiAxNS45LTQ5LjVjNDYuNS0xMS45IDgwLjktNTQgODAuOS0xMDQuMiAwLTU0LjUtMzguNC0xMDIuMS05Ni0xMDcuMWwwLTUyLjFjODMuMiA1LjEgMTQ4LjggNzQuNSAxNDguOCAxNTkuMyAwIDMzLjYtMTEuMiA2NC43LTI5IDkwLjRsMTQuNiA5LjZjOS44IDI3LjEgMzEuNSA0OCA1Mi40IDU3LjRzMzIuMiA5LjcgNTYuOCA0M2MyNC42IDMzLjIgNDIuNyA1NC45IDQ0LjUgNjAuM3MuNyAxNy4zLTEwLjUgMjguNXptLTkuOS0xNy45YzAtNC40LTMuNi04LTgtOHMtOCAzLjYtOCA4IDMuNiA4IDggOCA4LTMuNiA4LTh6Il19LHBudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwYXlwYWwiLGljb246WzM4NCw1MTIsW10sImYxZWQiLCJNMTExLjkgMjk1LjljLTMuNSAxOS4yLTE3LjQgMTA4LjctMjEuNSAxMzQtLjMgMS44LTEgMi41LTMgMi41bC03NC42IDBjLTcuNiAwLTEzLjEtNi42LTEyLjEtMTMuOUw1OS4zIDQ2LjZjMS41LTkuNiAxMC4xLTE2LjkgMjAtMTYuOSAxNTIuMyAwIDE2NS4xLTMuNyAyMDQgMTEuNCA2MC4xIDIzLjMgNjUuNiA3OS41IDQ0IDE0MC4zLTIxLjUgNjIuNi03Mi41IDg5LjUtMTQwLjEgOTAuMy00My40IC43LTY5LjUtNy03NS4zIDI0LjJ6TTM1Ny42IDE1MmMtMS44LTEuMy0yLjUtMS44LTMgMS4zLTIgMTEuNC01LjEgMjIuNS04LjggMzMuNi0zOS45IDExMy44LTE1MC41IDEwMy45LTIwNC41IDEwMy45LTYuMSAwLTEwLjEgMy4zLTEwLjkgOS40LTIyLjYgMTQwLjQtMjcuMSAxNjkuNy0yNy4xIDE2OS43LTEgNy4xIDMuNSAxMi45IDEwLjYgMTIuOWw2My41IDBjOC42IDAgMTUuNy02LjMgMTcuNC0xNC45IC43LTUuNC0xLjEgNi4xIDE0LjQtOTEuMyA0LjYtMjIgMTQuMy0xOS43IDI5LjMtMTkuNyA3MSAwIDEyNi40LTI4LjggMTQyLjktMTEyLjMgNi41LTM0LjggNC42LTcxLjQtMjMuOC05Mi42eiJdfSxobnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLWJsdWVza3kiLGljb246WzQ0OCw1MTIsW10sImU2YTMiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjI0IDI0Ny40YzE0LjUtMzAgNTQtODUuOCA5MC43LTExMy4zIDI2LjUtMTkuOSA2OS4zLTM1LjIgNjkuMyAxMy43IDAgOS44LTUuNiA4Mi4xLTguOSA5My44LTExLjQgNDAuOC01MyA1MS4yLTkwIDQ0LjkgNjQuNyAxMSA4MS4yIDQ3LjUgNDUuNiA4NC02Ny41IDY5LjMtOTctMTcuNC0xMDQuNi0zOS42bC0uMy0uOWMtLjktMi42LTEuNC00LjEtMS44LTQuMXMtLjkgMS41LTEuOCA0LjFjLS4xIC4zLS4yIC42LS4zIC45LTcuNiAyMi4yLTM3LjEgMTA4LjgtMTA0LjYgMzkuNi0zNS41LTM2LjUtMTkuMS03MyA0NS42LTg0LTM3IDYuMy03OC42LTQuMS05MC00NC45LTMuMy0xMS43LTguOS04NC04LjktOTMuOCAwLTQ4LjkgNDIuOS0zMy41IDY5LjMtMTMuNyAzNi43IDI3LjUgNzYuMiA4My40IDkwLjcgMTEzLjN6Il19LG1udD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkLWFuZC1kLWJleW9uZCIsaWNvbjpbNjQwLDUxMixbXSwiZjZjYSIsIk0zMTMuOCAyNDEuNWMxMy44IDAgMjEtMTAuMSAyNC44LTE3LjktMS0xLjEtNS00LjItNy40LTYuNi0yLjQgNC4zLTguMiAxMC43LTEzLjkgMTAuNy0xMC4yIDAtMTUuNC0xNC43LTMuMi0yNi42LS41LS4yLTQuMy0xLjgtOCAyLjQgMC0zIDEtNS4xIDIuMS02LjYtMy41IDEuMy05LjggNS42LTExLjQgNy45IC4yLTUuOCAxLjYtNy41IC42LTlsLS4yLS4ycy04LjUgNS42LTkuMyAxNC43YzAgMCAxLjEtMS42IDIuMS0xLjkgLjYtLjMgMS4zIDAgLjYgMS45LS4yIC42LTUuOCAxNS43IDUuMSAyNi0uNi0xLjYtMS45LTcuNiAyLjQtMS45LS4zIC4xIDUuOCA3LjEgMTUuNyA3LjF6bTUyLjQtMjEuMWMwLTQtNC45LTQuNC01LjYtNC41IDIgMy45IC45IDcuNSAuMiA5IDIuNS0uNCA1LjQtMS42IDUuNC00LjV6bTEwLjMgNS4yYzAtNi40LTYuMi0xMS40LTEzLjUtMTAuNyA4IDEuMyA1LjYgMTMuOC01IDExLjQgMy43LTIuNiAzLjItOS45LTEuMy0xMi41IDEuNCA0LjItMyA4LjItNy40IDQuNi0yLjQtMS45LTgtNi42LTEwLjYtOC42LTIuNC0yLjEtNS41LTEtNi42LTEuOC0xLjMtMS4xLS41LTMuOC0yLjItNS0xLjYtLjgtMy0uMy00LjgtMS0xLjYtLjYtMi43LTEuOS0yLjYtMy41LTIuNSA0LjQgMy40IDYuMyA0LjUgOC41IDEgMS45LS44IDQuOCA0IDguNSAxNC44IDExLjYgOS4xIDggMTAuNCAxOC4xIC42IDQuMyA0LjIgNi43IDYuNCA3LjQtMi4xLTEuOS0yLjktNi40IDAtOS4zIDAgMTMuOSAxOS4yIDEzLjMgMjMuMSA2LjQtMi40IDEuMS03LS4yLTktMS45IDcuNyAxIDE0LjItNC4xIDE0LjYtMTAuNnptLTM5LjQtMTguNGMyIC44IDEuNiAuNyA2LjQgNC41IDEwLjItMjQuNSAyMS43LTE1LjcgMjItMTUuNSAyLjItMS45IDkuOC0zLjggMTMuOC0yLjctMi40LTIuNy03LjUtNi4yLTEzLjMtNi4yLTQuNyAwLTcuNCAyLjItOCAxLjMtLjgtMS40IDMuMi0zLjQgMy4yLTMuNC01LjQgLjItOS42IDYuNy0xMS4yIDUuOS0xLjEtLjUgMS40LTMuNyAxLjQtMy43LTUuMSAyLjktOS4zIDkuMS0xMC4yIDEzIDQuNi01LjggMTMuOC05LjggMTkuNy05LTEwLjUgLjUtMTkuNSA5LjctMjMuOCAxNS44em0yNDIuNSA1MS45Yy0yMC43IDAtNDAgMS4zLTUwLjMgMi4xbDcuNCA4LjIgMCA3Ny4yLTcuNCA4LjJjMTAuNCAuOCAzMC45IDIuMSA1MS42IDIuMSA0Mi4xIDAgNTkuMS0yMC43IDU5LjEtNDguOSAwLTI5LjMtMjMuMi00OC45LTYwLjQtNDguOXptLTE1LjEgNzUuNmwwLTUzLjNjMzAuMS0zLjMgNDYuOCAzLjggNDYuOCAyNi4zIDAgMjUuNi0yMS40IDMwLjItNDYuOCAyN3pNMzAxLjYgMTgxYy0xLTMuNC0uMi02LjkgMS4xLTkuNCAxIDMgMi42IDYuNCA3LjUgOS0uNS0yLjQtLjItNS42IC41LTgtMS40LTUuNCAyLjEtOS45IDYuNC05LjkgNi45IDAgOC41IDguOCA0LjcgMTQuNCAyLjEgMy4yIDUuNSA1LjYgNy43IDcuOCAzLjItMy43IDUuNS05LjUgNS41LTEzLjggMC04LjItNS41LTE1LjktMTYuNy0xNi41LTIwLS45LTIwLjIgMTYuNi0yMCAxOC45IC41IDUuMiAzLjQgNy44IDMuMyA3LjV6bS0uNCA2Yy0uNSAxLjgtNyAzLjctMTAuMiA2LjkgNC44LTEgNy0uMiA3LjggMS44IC41IDEuNC0uMiAzLjQtLjUgNS42IDEuNi0xLjggNy01LjUgMTEtNi4yLTEtLjMtMy40LS44LTQuMy0uOCAyLjktMy40IDkuMy00LjUgMTIuOC0zLjctMi4yLS4yLTYuNyAxLjEtOC41IDIuNiAxLjYgLjMgMyAuNiA0LjMgMS4xLTIuMSAuOC00LjggMy40LTUuOCA2LjEgNy01IDEzLjEgNS4yIDcgOC4yIC44IC4yIDIuNyAwIDMuNS0uNS0uMyAxLjEtMS45IDMtMyAzLjQgMi45IDAgNy0xLjkgOC4yLTQuNiAwIDAtMS44IC42LTIuNi0uMnMuMy00LjMgLjMtNC4zYy0yLjMgMi45LTMuNC0xLjMtMS4zLTQuMi0xLS4zLTMuNS0uNi00LjYtLjUgMy4yLTEuMSAxMC40LTEuOCAxMS4yLS4zIC42IDEuMS0xIDMuNC0xIDMuNCA0LS41IDguMyAxLjEgNi43IDUuMSAyLjktMS40IDUuNS01LjkgNC44LTEwLjQtLjMgMS0xLjYgMi40LTIuOSAyLjcgLjItMS40LTEtMi4yLTEuOS0yLjYgMS43LTkuNi0xNC42LTE0LjItMTQuMS0yMy45LTEgMS4zLTEuOCA1LS44IDcuMSAyLjcgMy4yIDguNyA2LjcgMTAuMSAxMi4yLTIuNi02LjQtMTUuMS0xMS40LTE0LjYtMjAuMi0xLjYgMS42LTIuNiA3LjgtMS4zIDExIDIuNCAxLjQgNC41IDMuOCA0LjggNi4xLTIuMi01LjEtMTEuNC02LjEtMTMuOS0xMi4yLS42IDIuMi0uMyA1IDEgNi43IDAgMC0yLjItLjgtNy0uNiAxLjcgLjYgNS4xIDMuNSA0LjggNS4yem0yNS45IDcuNGMtMi43IDAtMy41LTIuMS00LjItNC4zIDMuMyAxLjMgNC4yIDQuMyA0LjIgNC4zem0zOC45IDMuN2wtMS0uNmMtMS4xLTEtMi45LTEuNC00LjctMS40LTIuOSAwLTUuOCAxLjMtNy41IDMuNC0uOCAuOC0xLjQgMS44LTIuMSAyLjZsMCAxNS43YzMuNSAyLjYgNy4xLTIuOSAzLTcuMiAxLjUgLjMgNC42IDIuNyA1LjEgMy4yIDAgMCAyLjYtLjUgNS0uNSAyLjEgMCAzLjkgLjMgNS42IDEuMWwwLTE4LjRjLTEuMSAuNS0yLjIgMS0yLjcgMS40bC0uNyAuN3pNNzkuOSAzMDUuOWMxNy4yLTQuNiAxNi4yLTE4IDE2LjItMTkuOSAwLTIwLjYtMjQuMS0yNS0zNy0yNWwtNTYuMSAwIDguMyA4LjYgMCAyOS41LTExLjMgMCAxMS40IDE0LjYgMCAzMi4zLTguNCA4LjZjNjEuNyAwIDczLjggMS41IDg2LjQtNS45IDYuNy00IDkuOS05LjggOS45LTE3LjYgMC01LjEgMi42LTE4LjgtMTkuNC0yNS4yek0zOC42IDI3OC40YzIwIDAgMjkuNi0uOCAyOS42IDkuMWwwIDNjMCAxMi4xLTE5IDguOC0yOS42IDguOGwwLTIwLjl6bTAgNTkuMmwwLTIyLjZjMTIuMiAwIDMyLjctMi4zIDMyLjcgOC44bDAgNC41IC4yIDBjMCAxMS4yLTEyLjUgOS4zLTMyLjkgOS4zem0xMDEuMi0xOS4zbDIzLjEgLjIgMC0uMiAxNC4xLTIxLjItMzcuMiAwIDAtMTQuOSA1Mi40IDAtMTQuMS0yMSAwLS4yLTczLjUgLjIgNy40IDguMiAwIDc3LjEtNy40IDguMiA4MS4yIDAgMTQuMS0yMS4yLTYwLjEgLjIgMC0xNS40em0yMTQuNy02MC4xYy03My45IDAtNzcuNSA5OS4zLS4zIDk5LjMgNzcuOSAwIDc0LjEtOTkuMyAuMy05OS4zem0tLjMgNzcuNWMtMzcuNCAwLTM2LjktNTUuMyAuMi01NS4zIDM2LjggLjEgMzguOCA1NS4zLS4yIDU1LjN6bS05MS4zLTguM2w0NC4xLTY2LjItNDEuNyAwIDYuMSA3LjItMjAuNSAzNy4yLS4zIDAtMjEtMzcuMiA2LjQtNy4yLTQ0LjkgMCA0NC4xIDY1LjggLjIgMTkuNC03LjcgOC4yIDQyLjYgMC03LjItOC4yLS4yLTE5ek0yMzQuNSAxNzYuMWMxLjYgMS4zIDIuOSAyLjQgMi45IDYuNmwwIDM4LjhjMCA0LjItLjggNS4zLTIuNyA2LjQtLjEgLjEtNy41IDQuNS03LjkgNC42bDM1LjEgMGMxMCAwIDE3LjQtMS41IDI2LTguNi0uNi01IC4yLTkuNSAuOC0xMiAwLS4yLTEuOCAxLjQtMi43IDMuNSAwLTUuNyAxLjYtMTUuNCA5LjYtMjAuNS0uMSAwLTMuNy0uOC05IDEuMSAyLTMuMSAxMC03LjkgMTAuNC03LjktOC4yLTI2LTM4LTIyLjktMzIuMi0yMi45LTMwLjkgMC0zMi42IC4zLTM5LjktNCAuMSAuOCAuNSA4LjIgOS42IDE0Ljl6bTIxLjUgNS41YzQuNiAwIDIzLjEtMy4zIDIzLjEgMTcuMyAwIDIwLjctMTguNCAxNy4zLTIzLjEgMTcuM2wwLTM0LjZ6bTIyOC45IDc5LjZsNyA4LjMgMCA0Mi41LS4zIDBjLTUuNC0xNC40LTQyLjMtNDEuNS00NS4yLTUwLjlsLTMxLjYgMCA3LjQgOC41IDAgNzYuOS03LjIgOC4zIDM5IDAtNy40LTguMiAwLTQ3LjQgLjMgMGMzLjcgMTAuNiA0NC41IDQyLjkgNDguNSA1NS42bDIxLjMgMCAwLTg1LjIgNy40LTguMy0zOS4yLS4xek0zNzguMiAxNjUuMWMtMzIuMiAwLTMyLjggLjItMzkuOS00IC4xIC43IC41IDguMyA5LjYgMTQuOSAzLjEgMiAyLjkgNC4zIDIuOSA5LjUgMS44LTEuMSAzLjgtMi4yIDYuMS0zLTEuMSAxLjEtMi43IDIuNy0zLjUgNC41IDEtMS4xIDcuNS01LjEgMTQuNi0zLjUtMS42IC4zLTQgMS4xLTYuMSAyLjkgLjEgMCAyLjEtMS4xIDcuNS0uM2wwLTQuM2M0LjcgMCAyMy4xLTMuNCAyMy4xIDE3LjMgMCAyMC41LTE4LjUgMTcuMy0xOS43IDE3LjMgNS43IDQuNCA1LjggMTIgMi4yIDE2LjNsLjMgMGMzMy40IDAgMzYuNy0yNy4zIDM2LjctMzQgMC0zLjgtMS4xLTMyLTMzLjgtMzMuNnoiXX0sZ250PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1pY3Jvc29mdCIsaWNvbjpbNDQ4LDUxMixbXSwiZjNjYSIsIk0wIDMybDIxNC42IDAgMCAyMTQuNi0yMTQuNiAwIDAtMjE0LjZ6bTIzMy40IDBsMjE0LjYgMCAwIDIxNC42LTIxNC42IDAgMC0yMTQuNnpNMCAyNjUuNGwyMTQuNiAwIDAgMjE0LjYtMjE0LjYgMCAwLTIxNC42em0yMzMuNCAwbDIxNC42IDAgMCAyMTQuNi0yMTQuNiAwIDAtMjE0LjZ6Il19LHhudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmbHkiLGljb246WzMyMCw1MTIsW10sImY0MTciLCJNMTY1LjkgNDI3LjhjMTIuOSAxMS43IDMzLjcgMzMuMyAzMy4yIDUwLjcgMCAuOC0uMSAxLjYtLjEgMi41LTEuOCAxOS44LTE4LjggMzEuMS0zOS4xIDMxLTI1LS4xLTM5LjktMTYuOC0zOC43LTM1LjggMS0xNi4yIDIwLjUtMzYuNyAzMi40LTQ3LjYgMi4zLTIuMSAyLjctMi43IDUuNi0zLjYgMy40IDAgMy45IC4zIDYuNyAyLjh6TTMwMCA2Ny4zYy0xNi4zLTI1LjctMzguNi00MC42LTYzLjMtNTIuMS0yNS41LTEwLjctNTQuNi0xNS40LTc2LjYtMTUuMi00NC4xIDAtNzEuMiAxMy4yLTgxLjEgMTcuMy01My42IDI3LjktODQuNCA2OS45LTgyLjkgMTQxLjMgNy4xIDgyLjIgOTcgMTc2IDE1NS44IDIzMy44IDEuNyAxLjYgNC41IDQuNSA2LjIgNS4xbDMuMyAuMWMyLjEtLjcgMS44LS41IDMuNS0yLjEgNTIuMy00OS4yIDE0MC43LTE0NS44IDE1NS45LTIxNS43IDctMzkuMiAzLjEtNzIuNS0yMC44LTExMi41ek0xNTQuOSAzNTEuOWMtMjgtNTEuMS02NS4yLTEzMC43LTY5LjMtMTg5LTMuNC00Ny41IDExLjQtMTMxLjIgNjkuMy0xMzYuN2wwIDMyNS43ek0yOTYuOCAxODBjLTE2LjQgNTYuOC03Ny4zIDEyOC0xMTguOSAxNzAuMyAyNy44LTUxLjkgNjUuMi0xMzMuMyA2Ny4yLTE5MS45IDEuNi00NS45LTkuOC0xMDUuOC00OC0xMzEuNCA4OC44IDE4LjMgMTE1LjUgOTguMSA5OS43IDE1M3oiXX0sYm50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNjLXN0cmlwZSIsaWNvbjpbNTc2LDUxMixbXSwiZjFmNSIsIk00OTIuNCAyMjAuOGMtOC45IDAtMTguNyA2LjctMTguNyAyMi43bDM2LjcgMGMwLTE2LTkuMy0yMi43LTE4LTIyLjd6TTM3NSAyMjMuNGMtOC4yIDAtMTMuMyAyLjktMTcgN2wuMiA1Mi44YzMuNSAzLjcgOC41IDYuNyAxNi44IDYuNyAxMy4xIDAgMjEuOS0xNC4zIDIxLjktMzMuNCAwLTE4LjYtOS0zMy4yLTIxLjktMzMuMXpNNTI4IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTEyMi4yIDI4MS4xYzAgMjUuNi0yMC4zIDQwLjEtNDkuOSA0MC4zLTEyLjIgMC0yNS42LTIuNC0zOC44LTguMWwwLTMzLjljMTIgNi40IDI3LjEgMTEuMyAzOC45IDExLjMgNy45IDAgMTMuNi0yLjEgMTMuNi04LjcgMC0xNy01NC0xMC42LTU0LTQ5LjkgMC0yNS4yIDE5LjItNDAuMiA0OC00MC4yIDExLjggMCAyMy41IDEuOCAzNS4zIDYuNWwwIDMzLjRjLTEwLjgtNS44LTI0LjUtOS4xLTM1LjMtOS4xLTcuNSAwLTEyLjEgMi4yLTEyLjEgNy43IDAgMTYgNTQuMyA4LjQgNTQuMyA1MC43ek0xOTEgMjI0LjVsLTI3IDAgMCA1MC41YzAgMjAuOSAyMi41IDE0LjQgMjcgMTIuNmwwIDI4LjljLTQuNyAyLjYtMTMuMyA0LjctMjQuOSA0LjctMjEuMSAwLTM2LjktMTUuNS0zNi45LTM2LjVsLjItMTEzLjkgMzQuNy03LjQgMCAzMC44IDI2LjkgMCAwIDMwLjN6bTc0IDIuNGMtNC41LTEuNS0xOC43LTMuNi0yNy4xIDcuNGwwIDg0LjQtMzUuNSAwIDAtMTI0LjUgMzAuNyAwIDIuMiAxMC41YzguMy0xNS4zIDI0LjktMTIuMiAyOS42LTEwLjVsLjEgMCAwIDMyLjd6bTQ0LjEgOTEuOGwtMzUuNyAwIDAtMTI0LjUgMzUuNyAwIDAgMTI0LjV6bTAtMTQyLjlsLTM1LjcgNy42IDAtMjguOSAzNS43LTcuNiAwIDI4Ljl6bTc0LjEgMTQ1LjVjLTEyLjQgMC0yMC01LjMtMjUuMS05bC0uMSA0MC4yLTM1LjUgNy41IDAtMTY1LjggMzEuMyAwIDEuOCA4LjhjNC45LTQuNSAxMy45LTExLjEgMjcuOC0xMS4xIDI0LjkgMCA0OC40IDIyLjUgNDguNCA2My44IDAgNDUuMS0yMy4yIDY1LjUtNDguNiA2NS42em0xNjAuNC01MS41bC02OS41IDBjMS42IDE2LjYgMTMuOCAyMS41IDI3LjYgMjEuNSAxNC4xIDAgMjUuMi0zIDM0LjktNy45bDAgMjguNmMtOS43IDUuMy0yMi40IDkuMi0zOS40IDkuMi0zNC42IDAtNTguOC0yMS43LTU4LjgtNjQuNSAwLTM2LjIgMjAuNS02NC45IDU0LjMtNjQuOSAzMy43IDAgNTEuMyAyOC43IDUxLjMgNjUuMSAwIDMuNS0uMyAxMC45LS40IDEyLjl6Il19LHZudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3b3JkcHJlc3Mtc2ltcGxlIixpY29uOls1MTIsNTEyLFtdLCJmNDExIiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMzMgMjU2YzAtMzIuMyA2LjktNjMgMTkuMy05MC43TDE1OC43IDQ1Ni43Qzg0LjMgNDIwLjUgMzMgMzQ0LjIgMzMgMjU2ek0yNTYgNDc5Yy0yMS45IDAtNDMtMy4yLTYzLTkuMWw2Ni45LTE5NC40IDY4LjUgMTg3LjhjLjUgMS4xIDEgMi4xIDEuNiAzLjEtMjMuMSA4LjEtNDggMTIuNi03NCAxMi42em0zMC43LTMyNy41YzEzLjQtLjcgMjUuNS0yLjEgMjUuNS0yLjEgMTItMS40IDEwLjYtMTkuMS0xLjQtMTguNCAwIDAtMzYuMSAyLjgtNTkuNCAyLjgtMjEuOSAwLTU4LjctMi44LTU4LjctMi44LTEyLS43LTEzLjQgMTcuNy0xLjQgMTguNCAwIDAgMTEuNCAxLjQgMjMuNCAyLjFsMzQuNyA5NS4yLTQ4LjggMTQ2LjMtODEuMi0yNDEuNWMxMy40LS43IDI1LjUtMi4xIDI1LjUtMi4xIDEyLTEuNCAxMC42LTE5LjEtMS40LTE4LjQgMCAwLTM2LjEgMi44LTU5LjQgMi44LTQuMiAwLTkuMS0uMS0xNC40LS4zIDM5LjktNjAuNSAxMDguNC0xMDAuNSAxODYuMy0xMDAuNSA1OCAwIDExMC45IDIyLjIgMTUwLjYgNTguNS0xLS4xLTEuOS0uMi0yLjktLjItMjEuOSAwLTM3LjQgMTkuMS0zNy40IDM5LjYgMCAxOC40IDEwLjYgMzMuOSAyMS45IDUyLjMgOC41IDE0LjggMTguNCAzMy45IDE4LjQgNjEuNSAwIDE5LjEtNy4zIDQxLjItMTcgNzIuMWwtMjIuMiA3NC4zLTgwLjctMjM5LjZ6bTgxLjQgMjk3LjJsNjguMS0xOTYuOWMxMi43LTMxLjggMTctNTcuMiAxNy03OS45IDAtOC4yLS41LTE1LjgtMS41LTIyLjkgMTcuNCAzMS44IDI3LjMgNjguMiAyNy4zIDEwNyAwIDgyLjMtNDQuNiAxNTQuMS0xMTAuOSAxOTIuN3oiXX0seW50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNlbGxzeSIsaWNvbjpbNjQwLDUxMixbXSwiZjIxMyIsIk01NDAgMjM3LjNjMy4xLTEyLjMgNC4zLTI0LjggNC4zLTM3LjQgMC05Mi41LTc1LjQtMTY3LjktMTY3LjktMTY3LjktNzcuMiAwLTE0NC42IDUzLTE2MyAxMjcuOC0xNS4zLTEzLjItMzQuOS0yMC41LTU1LjItMjAuNS00Ni4zIDAtODQgMzcuNy04NCA4NCAwIDcuNCAuOSAxNSAzLjEgMjIuNC00Mi45IDIwLjItNzAuOCA2My43LTcwLjggMTExLjIgMCA2OCA1NS41IDEyMy4yIDEyMy4yIDEyMy4ybDM4MS4yIDBjNjcuNyAwIDEyMy4yLTU1LjIgMTIzLjItMTIzLjIgMC01Ni40LTM4LjktMTA2LTk0LjEtMTE5LjV6TTIwMC4yIDQwMS42YzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTMwLjkgMGMtOC4zIDAtMTUuMy03LTE1LjMtMTUuM2wwLTExMC45YzAtOC4zIDctMTUuMyAxNS4zLTE1LjNsMzAuOSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjNsMCAxMTAuOXptODkuNSAwYzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTMwLjkgMGMtOC4zIDAtMTUuMy03LTE1LjMtMTUuM2wwLTEzMS41YzAtOC4zIDctMTUuMyAxNS4zLTE1LjNsMzAuOSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjNsMCAxMzEuNXptODkuNSAwYzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTMxIDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0xNjIuN2MwLTguMyA3LTE1LjMgMTUuMy0xNS4zbDMxIDBjOC4zIDAgMTUuMyA3IDE1LjMgMTUuM2wwIDE2Mi43em04NyAwYzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTI4LjUgMGMtOC4zIDAtMTUuMy03LTE1LjMtMTUuM2wwLTIyNC42YzAtOC42IDctMTUuNiAxNS4zLTE1LjZsMjguNSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjZsMCAyMjQuNnoiXX0sd250PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRhc2hjdWJlIixpY29uOls0NDgsNTEyLFtdLCJmMjEwIiwiTTMyNi45IDEwNGwtMjE2LjIgMGMtNTEuMSAwLTkxLjIgNDMuMy05MS4yIDkzLjVsMCAyMjkuNWMwIDUwLjUgNDAuMSA4NSA5MS4yIDg1bDIyNy4yIDBjNTEuMSAwIDkxLjItMzQuNSA5MS4yLTg1bDAtNDI3LTEwMi4yIDEwNHpNMTU0LjIgNDE2LjVjLTE3LjcgMC0zMi40LTE1LjEtMzIuNC0zMi44bDAtMTQyLjljMC0xNy43IDE0LjctMzIuNSAzMi40LTMyLjVsMTQwLjcgMGMxNy43IDAgMzIgMTQuOCAzMiAzMi41bDAgMTIzLjUgNTEuMSA1Mi4zLTIyMy44IDAgMC0uMXoiXX0sTW50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdpdHRlciIsaWNvbjpbMzg0LDUxMixbXSwiZjQyNiIsIk02Ni40IDMyMi41bC01MC40IDAgMC0zMjIuNSA1MC40IDAgMCAzMjIuNXpNMTY2LjkgNzYuMWwtNTAuNCAwIDAgNDM1LjkgNTAuNCAwIDAtNDM1Ljl6bTEwMC42IDBsLTUwLjQgMCAwIDQzNS45IDUwLjQgMCAwLTQzNS45ek0zNjggNzZsLTUwLjQgMCAwIDI0NyA1MC40IDAgMC0yNDd6Il19LHpudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3b2xmLXBhY2stYmF0dGFsaW9uIixpY29uOls0NDgsNTEyLFtdLCJmNTE0IiwiTTIzNi4yIDQ3MS41bDEwLjYgMTUuOCA1LjMtMTIuMyA1LjMgNyAwIDI5LjljMjEuMS03LjkgMjEuMS02Ni45IDI1LjUtOTcuMiA0LjYtMzEuOS0uOS05Mi44IDgxLjQtMTQ5LjEtOC45LTIzLjYtMTItNDkuNC0yLjYtODAgMjcuOSAzLjQgNTMuOSAxMC42IDYzLjMgNTQuMWwtMzAuMyA4LjRjMTEuMSAyMyAxNyA0Ni44IDEzLjIgNzIuMWwtMjcuMy03LTYuMiAzMy40LTE4LjUtNy04LjggMzMuNC0xOS40LTcgMjYuNCAyMS4xIDguOC0yOC4yIDI0LjYgNS4yIDctMzUuNiAyNi40IDE0LjVjLjItMjAgNy01OC4xLTguOC04NC41bDI2LjQgNS4zYzQtMjIuMS0yLjQtMzkuMi03LjktNTYuN2wyMi40IDkuN2MtLjQtMjUuMS0yOS45LTU2LjgtNjEuNi01OC41LTIwLjItMS4xLTU2LjctMjUuMi01NC4xLTUxLjkgMi0xOS45IDE3LjQtNDIuNiA0My4xLTQ5LjctNDQgMzYuNS05LjcgNjcuMyA1LjMgNzMuNSA0LjQtMTEuNCAxNy41LTY5LjEgMC0xMzAuMi00MC40IDIyLjktODkuNyA2NS4xLTkzLjIgMTQ3LjhsLTU4IDM4LjctMy41IDkzLjIgMTA3LjMtNTkuOCA3IDctMTcuNiAzLjUtNDQgMzguNy0xNS44LTUuMy0yOC4xIDQ5LjMtMy41IDExOS42IDIxLjEgMTUuOC0zMi41IDE1LjgtMzIuNi0xNS44IDIxLjEtMTUuOC0zLjUtMTE5LjYtMjguMi00OS4zLTE1LjggNS4zLTQ0LTM4LjctMTcuNi0zLjUgNy03IDEwNy4zIDU5LjgtMy41LTkzLjMtNTguMS0zOC43Yy0zLjUtODIuOC01Mi43LTEyNS05My4yLTE0Ny45LTE3LjUgNjEuMS00LjQgMTE4LjggMCAxMzAuMiAxNS02LjIgNDkuMy0zNyA1LjMtNzMuNSAyNS43IDcuMSA0MS4xIDI5LjggNDMuMSA0OS43IDIuNiAyNi43LTMzLjkgNTAuOC01NC4xIDUxLjktMzEuNyAxLjctNjEuMiAzMy40LTYxLjYgNTguNWwyMi40LTkuN0MxMy40IDIyNC43IDcgMjQxLjggMTEgMjYzLjlsMjYuNC01LjNjLTE1LjggMjYuNC05LjEgNjQuNC04LjggODQuNGwyNi40LTE0LjUgNyAzNS42IDI0LjYtNS4zIDguOCAyOC4yIDI2LjQtMjEuMS0xOS40IDctOC44LTMzLjQtMTguNSA3LTYuMi0zMy40LTI3LjMgN0MzOCAyOTQuOCA0My44IDI3MSA1NSAyNDhsLTMwLjMtOC40YzkuNC00My41IDM1LjUtNTAuOCA2My4zLTU0LjEgOS40IDMwLjYgNi4yIDU2LjUtMi42IDgwLjEgODIuMyA1Ni4zIDc2LjggMTE3LjIgODEuNCAxNDkuMSA0LjQgMzAuMyA0LjQgODkuMyAyNS41IDk3LjJsMC0yOS44IDUuMy03IDUuMyAxMi4zIDEwLjYtMTUuOCAxMS40IDIxLjEgMTEuNC0yMS4xIDAgMHptNzkuMi05NUwyOTkuNSAzNjZjNy41LTQuNCAxMy44LTguNCAxOS40LTEyLjMtLjYgNy4yLS4zIDEzLjgtMy41IDIyLjhsMCAwem0yOC4yLTQ5LjNjLS40IDEwLjktLjkgMjEuNy0xLjggMzEuNy03LjgtMS45LTE1LjYtMy44LTIxLjEtNyA4LjItNy45IDE1LjYtMTYuMyAyMi45LTI0LjdsMCAwem0yNC42IDUuM2MwLTEzLjQtMi4xLTI0LjItNS4zLTMzLjQtNS41IDkuNS0xMS43IDE4LjYtMTguNSAyNy4zbDIzLjggNi4yem0zLjUtODAuOWMxOS40IDEyLjggMjcuOCAzMy43IDI5LjkgNTYuMy0xMi4zLTQuNS0yNC42LTkuMy0zNy0xMC42IDUuMS0xMiA2LjYtMjguMSA3LTQ1LjdsMCAwem0tMS44LTQ1LjdjLjggMTQuMyAxLjggMjguOCAxLjggNDIuMiAxOS4yLTguMSAyOS44LTkuNyA0NC0xNC4xLTEwLjYtMTktMjcuMi0yNS41LTQ1LjgtMjguMmwwIDB6TTEzNC4yIDM3Ni41TDE1MCAzNjZjLTcuNS00LjQtMTMuOC04LjQtMTkuNC0xMi4zIC42IDcuMyAuMyAxMy45IDMuNSAyMi45bDAgMHpNMTA2IDMyNy4zYy40IDEwLjkgLjkgMjEuNyAxLjggMzEuNyA3LjgtMS45IDE1LjYtMy44IDIxLjEtNy04LjItNy45LTE1LjYtMTYuMy0yMi45LTI0Ljd6bS0yNC42IDUuM2MwLTEzLjQgMi0yNC4yIDUuMy0zMy40IDUuNSA5LjUgMTEuNyAxOC42IDE4LjUgMjcuM2wtMjMuOCA2LjJ6bS0zLjUtODAuOWMtMTkuNCAxMi44LTI3LjggMzMuNy0yOS45IDU2LjMgMTIuMy00LjUgMjQuNi05LjMgMzctMTAuNi01LTEyLTYuNi0yOC4xLTctNDUuN2wtLjEgMHptMS44LTQ1LjdjLS44IDE0LjMtMS44IDI4LjgtMS44IDQyLjItMTkuMi04LjEtMjkuOC05LjctNDQtMTQuMSAxMC42LTE5IDI3LjItMjUuNSA0NS44LTI4LjF6Il19LGtudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsYXN0Zm0iLGljb246WzUxMiw1MTIsW10sImYyMDIiLCJNMjI1LjggMzY3LjFsLTE4LjgtNTFzLTMwLjUgMzQtNzYuMiAzNGMtNDAuNSAwLTY5LjItMzUuMi02OS4yLTkxLjUgMC03Mi4xIDM2LjQtOTcuOSA3Mi4xLTk3LjkgNjYuNSAwIDc0LjggNTMuMyAxMDAuOSAxMzQuOSAxOC44IDU2LjkgNTQgMTAyLjYgMTU1LjQgMTAyLjYgNzIuNyAwIDEyMi0yMi4zIDEyMi04MC45IDAtNzIuOS02Mi43LTgwLjYtMTE1LTkyLjEtMjUuOC01LjktMzMuNC0xNi40LTMzLjQtMzQgMC0xOS45IDE1LjgtMzEuNyA0MS42LTMxLjcgMjguMiAwIDQzLjQgMTAuNiA0NS43IDM1LjhsNTguNi03Yy00LjctNTIuOC00MS4xLTc0LjUtMTAwLjktNzQuNS01Mi44IDAtMTA0LjQgMTkuOS0xMDQuNCA4My45IDAgMzkuOSAxOS40IDY1LjEgNjggNzYuOCA0NC45IDEwLjYgNzkuOCAxMy44IDc5LjggNDUuNyAwIDIxLjctMjEuMSAzMC41LTYxIDMwLjUtNTkuMiAwLTgzLjktMzEuMS05Ny45LTczLjktMzItOTYuOC00My42LTE2My0xNjEuMy0xNjMtODYuMSAwLTEzMS44IDU0LjUtMTMxLjggMTQ3LjIgMCA4OS4xIDQ1LjcgMTM3LjIgMTI3LjkgMTM3LjIgNjYuMiAwIDk3LjktMzEuMSA5Ny45LTMxLjF6Il19LFNudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzaG9wd2FyZSIsaWNvbjpbNTEyLDUxMixbXSwiZjViNSIsIk00MDMuNSA0NTUuNGMtNDIuNiAzMS43LTk0LjQgNDguNy0xNDcuNSA0OC42LTEzNy4yIDAtMjQ4LTExMS0yNDgtMjQ4IDAtMTM3LjIgMTExLTI0OCAyNDgtMjQ4IDYxLjItLjEgMTIwLjIgMjIuNiAxNjUuNyA2My41IC42IC41IC45IDEuMiAxLjEgMS45cy4xIDEuNS0uMyAyLjItLjggMS4zLTEuNSAxLjYtMS40IC41LTIuMiAuNGMtMTguOC0yLjUtMzcuNy0zLjctNTYuNy0zLjctMTI5LjQgMC0yMjIuNCA1My41LTIyMi40IDE1NS40IDAgMTA5IDkyLjEgMTQ1LjkgMTc2LjggMTc4LjcgMzMuNiAxMyA2NS40IDI1LjQgODcgNDEuNiAuNCAuMyAuOCAuOCAxLjEgMS4zcy40IDEgLjQgMS42LS4xIDEuMS0uNCAxLjYtLjYgLjktMS4xIDEuM2wtLjEgMHpNNTAzIDIzMy4xYy0uMS0uOS0uNS0xLjgtMS4zLTIuNC01MS44LTQzLTkzLjYtNjAuNS0xNDQuNS02MC41LTg0LjEgMC04MC4zIDUyLjItODAuMyA1My42IDAgNDIuNiA1Mi4xIDYyIDExMi4zIDg0LjUgMzEuMSAxMS42IDYzLjIgMjMuNiA5Mi43IDM5LjkgLjQgLjIgLjkgLjQgMS40IC40czEgMCAxLjUtLjIgLjktLjQgMS4zLS44IC42LS44IC44LTEuMmMxNC4xLTM2IDE5LjUtNzQuOCAxNi0xMTMuM3oiXX0sQ250PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJsb2dnZXIiLGljb246WzQ0OCw1MTIsW10sImYzN2MiLCJNMTYyLjQgMTk2YzQuOC00LjkgNi4yLTUuMSAzNi40LTUuMSAyNy4yIDAgMjguMSAuMSAzMi4xIDIuMSA1LjggMi45IDguMyA3IDguMyAxMy42IDAgNS45LTIuNCAxMC03LjYgMTMuNC0yLjggMS44LTQuNSAxLjktMzEuMSAyLjEtMTYuNCAuMS0yOS41LS4yLTMxLjUtLjgtMTAuMy0yLjktMTQuMS0xNy43LTYuNi0yNS4zem02MS40IDk0LjVjLTUzLjkgMC01NS44IC4yLTYwLjIgNC4xLTMuNSAzLjEtNS43IDkuNC01LjEgMTMuOSAuNyA0LjcgNC44IDEwLjEgOS4yIDEyIDIuMiAxIDE0LjEgMS43IDU2LjMgMS4ybDQ3LjktLjYgOS4yLTEuNWM5LTUuMSAxMC41LTE3LjQgMy4xLTI0LjQtNS4zLTQuNy01LTQuNy02MC40LTQuN3pNNDQ3LjIgNDIwLjZjLTMuNSAyOC40LTIzIDUwLjQtNTEuMSA1Ny41LTcuMiAxLjgtOS43IDEuOS0xNzIuOSAxLjgtMTU3LjggMC0xNjUuOS0uMS0xNzItMS44LTguNC0yLjItMTUuNi01LjUtMjIuMy0xMC01LjYtMy44LTEzLjktMTEuOC0xNy0xNi40LTMuOC01LjYtOC4yLTE1LjMtMTAtMjJTMCA0MjAuMyAwIDI1Ni4zYzAtMTYzLjEgMC0xNjYuNiAxLjgtMTczLjcgNi4zLTI0LjcgMjUuOS00My42IDUxLjItNDkuMiA3LjMtMS42IDMzMi4xLTEuOSAzNDAtLjMgMjEuMiA0LjMgMzcuOSAxNy4xIDQ3LjYgMzYuNCA3LjcgMTUuMyA3LTEuNSA3LjMgMTgwLjYgLjIgMTE1LjggMCAxNjQuNS0uNyAxNzAuNXpNMzYxLjggMjM1LjRjLTEuMS01LTQuMi05LjYtNy43LTExLjUtMS4xLS42LTgtMS4zLTE1LjUtMS43LTEyLjQtLjYtMTMuOC0uOC0xNy44LTMuMS02LjItMy42LTcuOS03LjYtOC0xOC4zIDAtMjAuNC04LjUtMzkuNC0yNS4zLTU2LjUtMTItMTIuMi0yNS4zLTIwLjUtNDAuNi0yNS4xLTMuNi0xLjEtMTEuOC0xLjUtMzkuMi0xLjgtNDIuOS0uNS01Mi41IC40LTY3LjEgNi4yLTI3IDEwLjctNDYuMyAzMy40LTUzLjQgNjIuNC0xLjMgNS40LTEuNiAxNC4yLTEuOSA2NC4zLS40IDYyLjggMCA3Mi4xIDQgODQuNSA5LjcgMzAuNyAzNy4xIDUzLjQgNjQuNiA1OC40IDkuMiAxLjcgMTIyLjIgMi4xIDEzMy43IC41IDIwLjEtMi43IDM1LjktMTAuOCA1MC43LTI1LjkgMTAuNy0xMC45IDE3LjQtMjIuOCAyMS44LTM4LjUgMy4yLTEwLjkgMi45LTg4LjQgMS43LTkzLjl6Il19LExudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJlZGdlIixpY29uOls1MTIsNTEyLFtdLCJmMjgyIiwiTTEyMC4xIDM3LjRjNDEtMjUuMiA4Ny42LTM4LjIgMTM0LjktMzcuNCAxNjggMCAyNTcgMTIzLjggMjU3IDIxOS41LS4xIDMyLjctMTMgNjMuOS0zNS45IDg3LjItMjIuOSAyMy4yLTU0IDM2LjUtODYuNyAzNy03NS4yIDAtOTEuNS0yMy4xLTkxLjUtMzIgMC0zLjggMS4yLTYuMiA0LjgtOS40bDEtMS4yIC40LTEuNmMxMC41LTExLjUgMTUuOS0yNi4yIDE1LjktNDEuNiAwLTc4LjctODIuMi0xNDIuNy0xODQtMTQyLjctMzcuNS0uMy03NC41IDguOS0xMDcuNSAyNi45IDI3LTU3LjUgODIuNy05Ny42IDkxLjMtMTAzLjggLjgtLjYgLjMtLjggLjMtLjh6bTE1LjYgMzE4LjFjLTEuNCAzMCA0LjYgNjAgMTYuNCA4Ny4yIDEzLjYgMjYuNCAzMi43IDUxIDU2LjUgNjkuMy01OS41LTExLjUtMTExLjUtNDMuOS0xNDkuNC04OS4zLTM4LjEtNDYuNC01OS4yLTEwNC4zLTU5LjItMTY0LjggMC01MS4yIDYyLjQtOTQuNCAxMzYtOTQuNCAzNi42LS42IDcyLjQgMTAuOSAxMDEuOCAzMi43bC0zLjYgMS4yYy01MS41IDE3LjYtOTguNSA5MC43LTk4LjUgMTU4LjF6TTQ2OS44IDQwMGwtLjcgLjFjLTExLjggMTguOC0yNS45IDM1LjEtNDIuMiA0OS41LTMwLjggMjgtNjguMSA0NS41LTEwOC44IDQ5LjktMTguNiAuMy0zNi44LTMuMi01My44LTExLjQtMjUuNi0xMC4zLTQ3LjEtMzAtNjEuNi01My0xNC40LTIzLjktMjEuMS01MS43LTE5LTc5LjYtLjYtMjAuMSA1LjQtNDAuMyAxNS01OC4yIDEzLjkgMzMuMSAzNy41IDYxLjMgNjcuNiA4MC44czY1LjUgMjkuNSAxMDEuNCAyOC42YzMxIC4zIDYyLjEtNi43IDkwLjItMjAuNWwxLjktLjljMy45LTIuMyA3LjctMy45IDExLjYgMCA0LjUgNC45IDEuOCA5LjItMS4yIDE0LS4yIC4yLS4zIC41LS40IC43eiJdfSxUbnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaW94aG9zdCIsaWNvbjpbNjQwLDUxMixbXSwiZjIwOCIsIk02MTYgMTYwbC02Ny4zIDBDNTExLjIgNzAuNyA0MjIuOSA4IDMyMCA4IDE4MyA4IDcyIDExOSA3MiAyNTYgNzIgMjcyLjQgNzMuNiAyODguNSA3Ni43IDMwNEwyNCAzMDRjLTEzLjMgMC0yNCAxMC44LTI0IDI0IDAgMTMuMyAxMC43IDI0IDI0IDI0bDY3LjMgMGMzNy41IDg5LjMgMTI1LjggMTUyIDIyOC43IDE1MiAxMzcgMCAyNDgtMTExIDI0OC0yNDggMC0xNi40LTEuNi0zMi41LTQuNy00OGw1Mi43IDBjMTMuMyAwIDI0LTEwLjggMjQtMjQgMC0xMy4zLTEwLjctMjQtMjQtMjR6bS05NiA5NmMwIDExMC41LTg5LjUgMjAwLTIwMCAyMDAtNzUuNyAwLTE0MS42LTQyLTE3NS41LTEwNEw0MjQgMzUyYzEzLjMgMCAyNC0xMC44IDI0LTI0IDAtMTMuMy0xMC43LTI0LTI0LTI0bC0yOTguMiAwYy0zLjgtMTUuNC01LjgtMzEuNC01LjgtNDggMC0xMTAuNSA4OS41LTIwMCAyMDAtMjAwIDc1LjcgMCAxNDEuNiA0MiAxNzUuNSAxMDRMMjE2IDE2MGMtMTMuMyAwLTI0IDEwLjgtMjQgMjQgMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjk4LjIgMGMzLjggMTUuNCA1LjggMzEuNCA1LjggNDh6TTIxNiAyMzJsMjA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjQgMCAxMy4yLTEwLjcgMjQtMjQgMjRsLTIwOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEzLjIgMTAuNy0yNCAyNC0yNHoiXX0sX250PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNjaGxpeCIsaWNvbjpbNDQ4LDUxMixbXSwiZjNlYSIsIk0zNTAuNSAxNTcuN2wtNTQuMi00Ni4xIDczLjQtMzkgNzguMyA0NC4yLTk3LjUgNDAuOXpNMTkyIDEyMi4xbDQ1LjctMjguMiAzNC43IDM0LjYtNTUuNCAyOS0yNS0zNS40em0tNjUuMSA2LjZsMzEuOS0yMi4xIDE3LjIgMjguNC0zNi43IDIyLjUtMTIuNC0yOC44em0tMjMuMyA4OC4ybC04LjgtMzQuOCAyOS42LTE4LjMgMTMuMSAzNS4zLTMzLjkgMTcuOHpNODIuNCAxMzMuMmwyMy45LTE4LjEgOC45IDI0LTI2LjcgMTguMy02LjEtMjQuMnpNNTkgMjA2LjVsLTMuNi0yOC40IDIyLjMtMTUuNSA2LjEgMjguNy0yNC44IDE1LjJ6TTI4LjQgMjIzLjFsMjAuOC0xMi44IDMuMyAzMy40LTIyLjkgMTItMS4yLTMyLjZ6TTEuNCAyNjhMMjAuNiAyNTcuOCAyMSAyOTYgMCAzMDQuOCAxLjQgMjY4em01OS4xIDU5LjNsLTI4LjMgOC4zLTEuNi00Ni44IDI1LjEtMTAuNyA0LjggNDkuMnpNOTkgMjYzLjJsLTMxLjEgMTMtNS4yLTQwLjggMjcuNC0xNC40IDguOSA0Mi4yek0xMjMuMiAzNzdsLTQxLjYgNS45LTguMS02My41IDM1LjItMTAuOCAxNC41IDY4LjR6bTI4LjUtMTM5LjlsMjEuMiA1Ny4xLTQ2LjIgMTMuNi0xMy43LTU0LjEgMzguNy0xNi42em04NS43IDIzMC41bC03MC45LTMuMy0yNC4zLTk1LjggNTUuMi04LjYgNDAgMTA3Ljd6TTE1Mi41IDE4Ny45bDQyLjItMjIuNCAyOCA0NS45LTUwLjggMjEuMy0xOS40LTQ0Ljh6bTQxIDk0LjlsNjEuMy0xOC43IDUyLjggODYuNi03OS44IDExLjMtMzQuMy03OS4yem01MS40LTg1LjZsNjcuMy0yOC44IDY1LjUgNjUuNC04OC42IDI2LjItNDQuMi02Mi44eiJdfSxBbnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZC1hbmQtZCIsaWNvbjpbNTc2LDUxMixbXSwiZjM4ZCIsIk04Mi45IDk4LjljLS42LTE3LjIgMi0zMy44IDEyLjctNDguMiAuMyA3LjQgMS4yIDE0LjUgNC4yIDIxLjYgNS45LTI3LjUgMTkuNy00OS4zIDQyLjMtNjUuNS0xLjkgNS45LTMuNSAxMS44LTMgMTcuNyA4LjctNy40IDE4LjgtMTcuOCA0NC40LTIyLjcgMTQuNy0yLjggMjkuNy0yIDQyLjEgMSAzOC41IDkuMyA2MSAzNC4zIDY5LjcgNzIuMyA1LjMgMjMuMSAuNyA0NS04LjMgNjYuNC01LjIgMTIuNC0xMiAyNC40LTIwLjcgMzUuMS0yLTEuOS0zLjktMy44LTUuOC01LjYtNDIuOC00MC44LTI2LjgtMjUuMi0zNy40LTM3LjQtMS4xLTEuMi0xLTIuMi0uMS0zLjYgOC4zLTEzLjUgMTEuOC0yOC4yIDEwLTQ0LTEuMS05LjgtNC4zLTE4LjktMTEuMy0yNi4yLTE0LjUtMTUuMy0zOS4yLTE1LTUzLjUgLjYtMTEuNCAxMi41LTE0LjEgMjcuNC0xMC45IDQzLjYgLjIgMS4zIC40IDIuNyAwIDMuOS0zLjQgMTMuNy00LjYgMjcuNi0yLjUgNDEuNiAuMSAuNSAuMSAxLjEgLjEgMS42IDAgLjMtLjEgLjUtLjIgMS4xLTIxLjgtMTEtMzYtMjguMy00My4yLTUyLjItOC4zIDE3LjgtMTEuMSAzNS41LTYuNiA1NC4xLTE1LjYtMTUuMi0yMS4zLTM0LjMtMjItNTUuMnpNNTUyLjUgMjIyLjFjLTExLjYtMTEuNi0yNS0yMC40LTQwLjEtMjYuNi0xMi44LTUuMi0yNi03LjktMzkuOS03LjEtMTAgLjYtMTkuNiAzLjEtMjkgNi40LTIuNSAuOS01LjEgMS42LTcuNyAyLjItNC45IDEuMi03LjMtMy4xLTQuNy02LjggMy4yLTQuNiAzLjQtNC4yIDE1LTEyIC42LS40IDEuMi0uOCAyLjItMS41bC0yLjUgMGMtLjYgMC0xLjIgLjItMS45IC4zLTE5LjMgMy4zLTMwLjcgMTUuNS00OC45IDI5LjYtMTAuNCA4LjEtMTMuOCAzLjgtMTItLjUgMS40LTMuNSAzLjMtNi43IDUuMS0xMCAxLTEuOCAyLjMtMy40IDMuNS01LjEtLjItLjItLjUtLjMtLjctLjUtMjcgMTguMy00Ni43IDQyLjQtNTcuNyA3My4zIC4zIC4zIC43IC42IDEgLjkgLjMtLjYgLjUtMS4yIC45LTEuNyAxMC40LTEyLjEgMjIuOC0yMS44IDM2LjYtMjkuOCAxOC4yLTEwLjYgMzcuNS0xOC4zIDU4LjctMjAuMiA0LjMtLjQgOC43LS4xIDEzLjEtLjEtMS44IC43LTMuNSAuOS01LjMgMS4xLTE4LjUgMi40LTM1LjUgOS01MS41IDE4LjUtMzAuMiAxNy45LTU0LjUgNDIuMi03NS4xIDcwLjQtLjMgLjQtLjQgLjktLjcgMS4zIDE0LjUgNS4zIDI0IDE3LjMgMzYuMSAyNS42IC4yLS4xIC4zLS4yIC40LS40bDEuMi0yLjdjMTIuMi0yNi45IDI3LTUyLjMgNDYuNy03NC41IDE2LjctMTguOCAzOC0yNS4zIDYyLjUtMjAgNS45IDEuMyAxMS40IDQuNCAxNy4yIDYuOCAyLjMtMS40IDUuMS0zLjIgOC00LjcgOC40LTQuMyAxNy40LTcgMjYuNy05IDE0LjctMy4xIDI5LjUtNC45IDQ0LjUtMS4zbDAtLjVjLS41LS40LTEuMi0uOC0xLjctMS40ek0zMTcuMSAzOTcuNmMtMzkuNC0zMy0yMi44LTE5LjUtNDIuNy0zNS42LS44IC45IDAtLjItMS45IDMtMTEuMiAxOS4xLTI1LjUgMzUuMy00NCA0Ny42LTEwLjMgNi44LTIxLjUgMTEuOC0zNC4xIDExLjgtMjEuNiAwLTM4LjItOS41LTQ5LjQtMjcuOC0xMi0xOS41LTEzLjMtNDAuNy04LjItNjIuNiA3LjgtMzMuOCAzMC4xLTU1LjIgMzguNi02NC4zLTE4LjctNi4yLTMzIDEuNy00Ni40IDEzLjkgLjgtMTMuOSA0LjMtMjYuMiAxMS44LTM3LjMtMjQuMyAxMC42LTQ1LjkgMjUtNjQuOCA0My45LS4zLTUuOCA1LjQtNDMuNyA1LjYtNDQuNyAuMy0yLjctLjYtNS4zLTMtNy40LTI0LjIgMjQuNy00NC41IDUxLjgtNTYuMSA4NC42IDcuNC01LjkgMTQuOS0xMS40IDIzLjYtMTYuMi04LjMgMjIuMy0xOS42IDUyLjgtNy44IDEwMS4xIDQuNiAxOSAxMS45IDM2LjggMjQuMSA1Mi4zIDIuOSAzLjcgNi4zIDYuOSA5LjUgMTAuMyAuMi0uMiAuNC0uMyAuNi0uNS0xLjQtNy0yLjItMTQuMS0xLjUtMjEuOSAyLjIgMy4yIDMuOSA2IDUuOSA4LjYgMTIuNiAxNiAyOC43IDI3LjQgNDcuMiAzNS42IDI1IDExLjMgNTEuMSAxMy4zIDc3LjkgOC42IDU0LjktOS43IDkwLjctNDguNiAxMTYtOTguOCAxLTEuOCAuNi0yLjktLjktNC4yem0xNzItNDYuNGMtOS41LTMuMS0yMi4yLTQuMi0yOC43LTIuOSA5LjkgNCAxNC4xIDYuNiAxOC44IDEyIDEyLjYgMTQuNCAxMC40IDM0LjctNS40IDQ1LjYtMTEuNyA4LjEtMjQuOSAxMC41LTM4LjkgOS4xLTEuMi0uMS0yLjMtLjQtMy0uNiAyLjgtMy43IDYtNyA4LjEtMTAuOCA5LjQtMTYuOCA1LjQtNDIuMS04LjctNTYuMS0yLjEtMi4xLTQuNi0zLjktNy01LjktLjMgMS4zLS4xIDIuMSAuMSAyLjggNC4yIDE2LjYtOC4xIDMyLjQtMjQuOCAzMS44LTcuNi0uMy0xMy45LTMuOC0xOS42LTguNS0xOS41LTE2LjEtMzkuMS0zMi4xLTU4LjUtNDguMy01LjktNC45LTEyLjUtOC4xLTIwLjEtOC43LTQuNi0uNC05LjMtLjYtMTMuOS0uOS01LjktLjQtOC44LTIuOC0xMC40LTguNC0uOS0zLjQtMS41LTYuOC0yLjItMTAuMi0xLjUtOC4xLTYuMi0xMy0xNC4zLTE0LjItNC40LS43LTguOS0xLTEzLjMtMS41LTEzLTEuNC0xOS44LTcuNC0yMi42LTIwLjMtNSAxMS0xLjYgMjIuNCA3LjMgMjkuOSA0LjUgMy44IDkuMyA3LjMgMTMuOCAxMS4yIDQuNiAzLjggNy40IDguNyA3LjkgMTQuOCAuNCA0LjcgLjggOS41IDEuOCAxNC4xIDIuMiAxMC42IDguOSAxOC40IDE3IDI1LjEgMTYuNSAxMy43IDMzIDI3LjMgNDkuNSA0MS4xIDE3LjkgMTUgMTMuOSAzMi44IDEzIDU2LS45IDIyLjkgMTIuMiA0Mi45IDMzLjUgNTEuMiAxIC40IDIgLjYgMy42IDEuMS0xNS43LTE4LjItMTAuMS00NC4xIC43LTUyLjMgLjMgMi4yIC40IDQuMyAuOSA2LjQgOS40IDQ0LjEgNDUuNCA2NC4yIDg1IDU2LjkgMTYtMi45IDMwLjYtOC45IDQyLjktMTkuOCAyLTEuOCAzLjctNC4xIDUuOS02LjUtMTkuMyA0LjYtMzUuOCAuMS01MC45LTEwLjYgLjctLjMgMS4zLS4zIDEuOS0uMyAyMS4zIDEuOCA0MC42LTMuNCA1Ny0xNy40IDE5LjUtMTYuNiAyNi42LTQyLjkgMTcuNC02Ni04LjMtMjAuMS0yMy42LTMyLjMtNDMuOC0zOC45ek05OS44IDE3OS4zYy01LjMtOS4yLTEzLjItMTUuNi0yMi4xLTIxLjMgMTMuNy0uNSAyNi42IC4yIDM5LjYgMy43LTctMTIuMi04LjUtMjQuNy01LTM4LjcgNS4zIDExLjkgMTMuNyAyMC4xIDIzLjYgMjYuOCAxOS43IDEzLjIgMzUuNyAxOS42IDQ2LjcgMzAuMiAzLjQgMy4zIDYuMyA3LjEgOS42IDEwLjktLjgtMi4xLTEuNC00LjEtMi4yLTYtNS0xMC42LTEzLTE4LjYtMjIuNi0yNS0xLjgtMS4yLTIuOC0yLjUtMy40LTQuNS0zLjMtMTIuNS0zLTI1LjEtLjctMzcuNiAxLTUuNSAyLjgtMTAuOSA0LjUtMTYuMyAuOC0yLjQgMi4zLTQuNiA0LTYuNiAuNiA2LjkgMCAyNS41IDE5LjYgNDYgMTAuOCAxMS4zIDIyLjQgMjEuOSAzMy45IDMyLjcgOSA4LjUgMTguMyAxNi43IDI1LjUgMjYuOCAxLjEgMS42IDIuMiAzLjMgMy44IDQuNy01LTEzLTE0LjItMjQuMS0yNC4yLTMzLjgtOS42LTkuMy0xOS40LTE4LjQtMjkuMi0yNy40LTMuMy0zLTQuNi02LjctNS4xLTEwLjktMS4yLTEwLjQgMC0yMC42IDQuMy0zMC4yIC41LTEgMS4xLTIgMS45LTMuMyAuNSA0LjIgLjYgNy45IDEuNCAxMS42IDQuOCAyMy4xIDIwLjQgMzYuMyA0OS4zIDYzLjUgMTAgOS40IDE5LjMgMTkuMiAyNS42IDMxLjYgNC44IDkuMyA3LjMgMTkgNS43IDI5LjYtLjEgLjYgLjUgMS43IDEuMSAyIDYuMiAyLjYgMTAgNi45IDkuNyAxNC4zIDcuNy0yLjYgMTIuNS04IDE2LjQtMTQuNSA0LjIgMjAuMi05LjEgNTAuMy0yNy4yIDU4LjcgLjQtNC41IDUtMjMuNC0xNi41LTI3LjctNi44LTEuMy0xMi44LTEuMy0yMi45LTIuMSA0LjctOSAxMC40LTIwLjYgLjUtMjIuNC0yNC45LTQuNi01Mi44IDEuOS01Ny44IDQuNiA4LjIgLjQgMTYuMyAxIDIzLjUgMy4zLTIgNi41LTQgMTIuNy01LjggMTguOS0xLjkgNi41IDIuMSAxNC42IDkuMyA5LjYgMS4yLS45IDIuMy0xLjkgMy4zLTIuNy0zLjEgMTcuOS0yLjkgMTUuOS0yLjggMTguMyAuMyAxMC4yIDkuNSA3LjggMTUuNyA3LjMtMi41IDExLjgtMjkuNSAyNy4zLTQ1LjQgMjUuOCA3LTQuNyAxMi43LTEwLjMgMTUuOS0xNy45LTYuNSAuOC0xMi45IDEuNi0xOS4yIDIuNGwtLjMtLjljNC43LTMuNCA4LTcuOCAxMC4yLTEzLjEgOC43LTIxLjEtMy42LTM4LTI1LTM5LjktOS4xLS44LTE3LjggLjgtMjUuOSA1LjUgNi4yLTE1LjYgMTcuMi0yNi42IDMyLjYtMzQuNS0xNS4yLTQuMy04LjktMi43LTI0LjYtNi4zIDE0LjYtOS4zIDMwLjItMTMuMiA0Ni41LTE0LjYtNS4yLTMuMi00OC4xLTMuNi03MC4yIDIwLjkgNy45IDEuNCAxNS41IDIuOCAyMy4yIDQuMi0yMy44IDctNDQgMTkuNy02Mi40IDM1LjYgMS4xLTQuOCAyLjctOS41IDMuMy0xNC4zIC42LTQuNSAuOC05LjIgLjEtMTMuNi0xLjUtOS40LTguOS0xNS4xLTE5LjctMTYuMy03LjktLjktMTUuNiAuMS0yMy4zIDEuMy0uOSAuMS0xLjcgLjMtMi45IDAgMTUuOC0xNC44IDM2LTIxLjcgNTMuMS0zMy41IDYtNC41IDYuOC04LjIgMy0xNC45em0xMjguNCAyNi44YzMuMyAxNiAxMi42IDI1LjUgMjMuOCAyNC4zLTQuNi0xMS4zLTEyLjEtMTkuNS0yMy44LTI0LjN6Il19LCRudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ2dWVqcyIsaWNvbjpbNDQ4LDUxMixbXSwiZjQxZiIsIk0zNTYuOSA2NC4zbC03Ni45IDAtNTYgODguNi00OC04OC42LTE3NiAwIDIyNCAzODMuNyAyMjQtMzgzLjctOTEuMSAwek01NS43IDk2LjNsNTMuOCAwIDExNC41IDE5OC4yIDExNC40LTE5OC4yIDUzLjggMC0xNjguMiAyODguMi0xNjguMy0yODguMnoiXX0sRG50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1ldGEiLGljb246WzY0MCw1MTIsW10sImU0OWIiLCJNNjQwIDMxNy45YzAgOTEuMy0zOS40IDE0OC41LTExMC4zIDE0OC41LTYyLjYgMC05NS44LTM0LjYtMTU2LjktMTM2LjZsLTMxLjQtNTIuNmMtOC4zLTEyLjUtMTQuNS0yNC4yLTIxLjItMzUtMjAuMSAzMy44LTQ3LjEgODMtNDcuMSA4My02NyAxMTYuNi0xMDQuNiAxNDEuMi0xNTYuOSAxNDEuMi03Mi44IDAtMTE2LjItNTcuMy0xMTYuMi0xNDUuOSAwLTE0MyA3OS44LTI3OC4xIDE4My45LTI3OC4xIDUwLjIgMCA5My44IDI0LjcgMTQ0LjggODkuNSAzNy4xLTUwLjEgNzguMS04OS41IDEzMC42LTg5LjUgOTkuMSAwIDE4MC43IDEyNS43IDE4MC43IDI3NS41ek0yODcuNCAxOTIuMmMtNDIuOS02Mi4xLTcwLjktODAuNS0xMDQuNC04MC41LTYxLjkgMC0xMTMuOCAxMDYuMS0xMTMuOCAyMTAgMCA0OC41IDE4LjUgNzUuNyA0OS42IDc1LjcgMzAuMiAwIDQ5LTE5IDEwMy4yLTEwMy44IDAgMCAyNC43LTM5LjEgNjUuNC0xMDEuNHpNNTMxLjIgMzk3LjRjMzIuMiAwIDQ2LjktMjcuNSA0Ni45LTc0LjkgMC0xMjQuMi01NC4zLTIyNS40LTEyMy4yLTIyNS40LTMzLjIgMC02MS4xIDI1LjktOTQuOSA3OCA5LjQgMTMuOCAxOS4xIDI5IDI5LjMgNDUuNGwzNy41IDYyLjRjNTguNyA5NC4xIDczLjUgMTE0LjUgMTA0LjQgMTE0LjV6Il19LEVudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjcmVhdGl2ZS1jb21tb25zLXNoYXJlIixpY29uOls1MTIsNTEyLFtdLCJmNGYyIiwiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptMTAxIDEzMi40YzcuOCAwIDEzLjcgNi4xIDEzLjcgMTMuN2wwIDE4Mi41YzAgNy43LTYuMSAxMy43LTEzLjcgMTMuN2wtMTM1LjEgMGMtNy43IDAtMTMuNy02LTEzLjctMTMuN2wwLTU0LTU0IDBjLTcuOCAwLTEzLjctNi0xMy43LTEzLjdsMC0xODIuNWMwLTguMiA2LjYtMTIuNyAxMi40LTEzLjdsMTM2LjQgMGM3LjcgMCAxMy43IDYgMTMuNyAxMy43bDAgNTQgNTQgMHpNMTY3LjkgMzAwLjNsNDAuNyAwIDAtMTAxLjRjMC03LjQgNS44LTEyLjYgMTItMTMuN2w1NS44IDAgMC00MC4zLTEwOC41IDAgMCAxNTUuNHptMTc2LjItODguMWwtMTA4LjUgMCAwIDE1NS40IDEwOC41IDAgMC0xNTUuNHoiXX0sTm50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN0dWRpb3ZpbmFyaSIsaWNvbjpbNTEyLDUxMixbXSwiZjNmOCIsIk00ODAuNyAxODcuN2w0LjIgMjggMCAyOC0yNS4xIDQ0LjEtMzkuOCA3OC40LTU2LjEgNjcuNS03OS4xIDM3LjgtMTcuNyAyNC41LTcuNyAxMi05LjYgNHMxNy4zLTYzLjYgMTkuNC02My42IDIwLjMgLjcgMjAuMyAuN2w2Ni43LTM4LjYtOTIuNSAyNi4xLTU1LjkgMzYuOC0yMi44IDI4LTYuNiAxLjQgMjAuOC03My42IDYuOS01LjUgMjAuNyAxMi45IDg4LjMtNDUuMiA1Ni44LTUxLjUgMTQuOC02OC40LTEyNS40IDIzLjMgMTUuMi0xOC4yLTE3My40LTUzLjMgODEuOS0xMC41LTE2Ni0xMjIuOSAxMTQuOSAxOC4xLTEwMS4zLTEwOCAyNTIuOSAxMjYuNi0zMS41LTM4IDEyNC40IDc0LjQtMTQzLjMtOTkgMTguNyAzOC40LTQ5LjYtMTguMS00NS41LTg0LjMgMTk0LjYgMTIyLTQyLjktNTUuOCAxMDggOTYuNCAxMi04LjktMjEtMTYuNCA0LjItMzcuOCAzNy44LTEwLjQgMjkuMiAyNC43IDExLjUgNC4yLTcgNi4yIDguNSAxMi0xMy4xIDcuNC0xMC4zIDIwLjIgMTAuNSAyMy45eiJdfSxQbnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYml0YnVja2V0IixpY29uOls1MTIsNTEyLFs2MTgxMF0sImYxNzEiLCJNMjIuMiAzMmMtMi4xIDAtNC4yIC40LTYuMSAxLjFzLTMuNyAxLjktNS4yIDMuNC0yLjcgMy4yLTMuNSA1LjEtMS4zIDQtMS4zIDYuMWMwIC45IC4xIDEuOSAuMiAyLjhMNzQuMSA0NjIuN2MuOCA1LjEgMy40IDkuNyA3LjMgMTNzOC44IDUuMiAxNCA1LjJsMzI1LjcgMGMzLjggLjEgNy41LTEuMyAxMC41LTMuN3M0LjktNS45IDUuNS05LjdMNTA1IDUwLjdjLjctNC4yLS4zLTguNC0yLjgtMTEuOXMtNi4yLTUuNy0xMC40LTYuNGMtLjktLjEtMS45LS4yLTIuOC0uMkwyMi4yIDMyek0zMDguMSAzMjkuOGwtMTA0IDAtMjguMS0xNDcgMTU3LjMgMC0yNS4yIDE0N3oiXX0sSW50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InZrIixpY29uOls0NDgsNTEyLFtdLCJmMTg5IiwiTTMxLjUgNjMuNUMwIDk1IDAgMTQ1LjcgMCAyNDdMMCAyNjVDMCAzNjYuMyAwIDQxNyAzMS41IDQ0OC41UzExMy43IDQ4MCAyMTUgNDgwbDE3LjkgMGMxMDEuNCAwIDE1Mi4xIDAgMTgzLjUtMzEuNVM0NDggMzY2LjMgNDQ4IDI2NWwwLTE3LjljMC0xMDEuNCAwLTE1Mi4xLTMxLjUtMTgzLjVTMzM0LjMgMzIgMjMzIDMyTDIxNSAzMkMxMTMuNyAzMiA2MyAzMiAzMS41IDYzLjV6TTc1LjYgMTY4LjNsNTEuMSAwYzEuNyA4NS41IDM5LjQgMTIxLjcgNjkuMyAxMjkuMmwwLTEyOS4yIDQ4LjIgMCAwIDczLjdjMjkuNS0zLjIgNjAuNS0zNi44IDcwLjktNzMuN2w0OC4yIDBjLTMuOSAxOS4yLTExLjggMzcuMy0yMy4xIDUzLjNzLTI1LjcgMjkuNS00Mi41IDM5LjZjMTguNyA5LjMgMzUuMiAyMi40IDQ4LjQgMzguNXMyMi45IDM0LjkgMjguMyA1NWwtNTMgMGMtNC45LTE3LjUtMTQuOC0zMy4xLTI4LjYtNDVzLTMwLjctMTkuNC00OC43LTIxLjZsMCA2Ni42LTUuOCAwYy0xMDIuMSAwLTE2MC4zLTcwLTE2Mi44LTE4Ni41eiJdfSxGbnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ2l0aHViIixpY29uOls1MTIsNTEyLFtdLCJmMDliIiwiTTE3My45IDM5Ny40YzAgMi0yLjMgMy42LTUuMiAzLjYtMy4zIC4zLTUuNi0xLjMtNS42LTMuNiAwLTIgMi4zLTMuNiA1LjItMy42IDMtLjMgNS42IDEuMyA1LjYgMy42em0tMzEuMS00LjVjLS43IDIgMS4zIDQuMyA0LjMgNC45IDIuNiAxIDUuNiAwIDYuMi0ycy0xLjMtNC4zLTQuMy01LjJjLTIuNi0uNy01LjUgLjMtNi4yIDIuM3ptNDQuMi0xLjdjLTIuOSAuNy00LjkgMi42LTQuNiA0LjkgLjMgMiAyLjkgMy4zIDUuOSAyLjYgMi45LS43IDQuOS0yLjYgNC42LTQuNi0uMy0xLjktMy0zLjItNS45LTIuOXpNMjUyLjggOGMtMTM4LjcgMC0yNDQuOCAxMDUuMy0yNDQuOCAyNDQgMCAxMTAuOSA2OS44IDIwNS44IDE2OS41IDIzOS4yIDEyLjggMi4zIDE3LjMtNS42IDE3LjMtMTIuMSAwLTYuMi0uMy00MC40LS4zLTYxLjQgMCAwLTcwIDE1LTg0LjctMjkuOCAwIDAtMTEuNC0yOS4xLTI3LjgtMzYuNiAwIDAtMjIuOS0xNS43IDEuNi0xNS40IDAgMCAyNC45IDIgMzguNiAyNS44IDIxLjkgMzguNiA1OC42IDI3LjUgNzIuOSAyMC45IDIuMy0xNiA4LjgtMjcuMSAxNi0zMy43LTU1LjktNi4yLTExMi4zLTE0LjMtMTEyLjMtMTEwLjUgMC0yNy41IDcuNi00MS4zIDIzLjYtNTguOS0yLjYtNi41LTExLjEtMzMuMyAyLjYtNjcuOSAyMC45LTYuNSA2OSAyNyA2OSAyNyAyMC01LjYgNDEuNS04LjUgNjIuOC04LjVzNDIuOCAyLjkgNjIuOCA4LjVjMCAwIDQ4LjEtMzMuNiA2OS0yNyAxMy43IDM0LjcgNS4yIDYxLjQgMi42IDY3LjkgMTYgMTcuNyAyNS44IDMxLjUgMjUuOCA1OC45IDAgOTYuNS01OC45IDEwNC4yLTExNC44IDExMC41IDkuMiA3LjkgMTcgMjIuOSAxNyA0Ni40IDAgMzMuNy0uMyA3NS40LS4zIDgzLjYgMCA2LjUgNC42IDE0LjQgMTcuMyAxMi4xIDEwMC0zMy4yIDE2Ny44LTEyOC4xIDE2Ny44LTIzOSAwLTEzOC43LTExMi41LTI0NC0yNTEuMi0yNDR6TTEwNS4yIDM1Mi45Yy0xLjMgMS0xIDMuMyAuNyA1LjIgMS42IDEuNiAzLjkgMi4zIDUuMiAxIDEuMy0xIDEtMy4zLS43LTUuMi0xLjYtMS42LTMuOS0yLjMtNS4yLTF6bS0xMC44LTguMWMtLjcgMS4zIC4zIDIuOSAyLjMgMy45IDEuNiAxIDMuNiAuNyA0LjMtLjcgLjctMS4zLS4zLTIuOS0yLjMtMy45LTItLjYtMy42LS4zLTQuMyAuN3ptMzIuNCAzNS42Yy0xLjYgMS4zLTEgNC4zIDEuMyA2LjIgMi4zIDIuMyA1LjIgMi42IDYuNSAxIDEuMy0xLjMgLjctNC4zLTEuMy02LjItMi4yLTIuMy01LjItMi42LTYuNS0xem0tMTEuNC0xNC43Yy0xLjYgMS0xLjYgMy42IDAgNS45czQuMyAzLjMgNS42IDIuM2MxLjYtMS4zIDEuNi0zLjkgMC02LjItMS40LTIuMy00LTMuMy01LjYtMnoiXX0sT250PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNvZGllcGllIixpY29uOls1MTIsNTEyLFtdLCJmMjg0IiwiTTQ0Mi41IDIwMi45YzMwLjcgMCAzMy41IDUzLjEtLjMgNTMuMWwtMTAuOCAwIDAgNDQuMy0yNi42IDAgMC05Ny40IDM3LjcgMHpNNDkyIDM1Mi42QzQ0OS45IDQ0NC41IDM3MC40IDUwNCAyNjggNTA0IDEzMSA1MDQgMjAgMzkzIDIwIDI1NlMxMzEgOCAyNjggOGM5Ny40IDAgMTcyLjggNTMuNyAyMTguMiAxMzguNEwzMDAuMiAyNTUuMiA0OTIgMzUyLjZ6bS0zOC41IDEyLjVsLTYwLjMtMzAuN2MtMjcuMSA0NC4zLTcwLjQgNzEuNC0xMjIuNCA3MS40LTgyLjUgMC0xNDkuMi02Ni43LTE0OS4yLTE0OC45IDAtODIuNSA2Ni43LTE0OS4yIDE0OS4yLTE0OS4yIDQ4LjQgMCA4OC45IDIzLjUgMTE2LjkgNjMuNGw1OS41LTM0LjZDNDA2LjUgNzMuOSAzNDIuNSAzNi41IDI2OCAzNi41IDE0Ni44IDM2LjUgNDguNSAxMzQuOCA0OC41IDI1NlMxNDYuOCA0NzUuNSAyNjggNDc1LjVjNzguNiAwIDE0Ni41LTQyLjEgMTg1LjUtMTEwLjR6Il19LEJudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaWVkLXBpcGVyIixpY29uOls0NDgsNTEyLFtdLCJmMmFlIiwiTTQ0MC4yIDIzLjJjLTI2LjcgNi44LTY4LjEgMjguNS0xMTQuNiA2Ny41LTMwLjktMTcuNS02NS44LTI2LjctMTAxLjQtMjYuNy0xMTQuOSAwLTIwOCA5My4xLTIwOCAyMDhzOTMuMSAyMDggMjA4IDIwOCAyMDgtOTMuMSAyMDgtMjA4Yy4xLTU0LjEtMjEtMTA2LjEtNTguNy0xNDQuOC02LjYgOC41LTEyLjMgMTcuNy0xNyAyNy40IDI4LjkgMzIuMyA0NC44IDc0LjEgNDQuOSAxMTcuNCAwIDk3LjctNzkuNCAxNzcuMS0xNzcuMSAxNzcuMS0zMC44IDAtNjEtOC4xLTg3LjYtMjMuNCA4Mi45LTEwNy4zIDE1MC44LTM3LjggMTg0LjMtMjI2LjYgNS44LTMyLjYgMjgtOTQuMyAxMjYuMi0xNjAuMiA4LjEtNS40IDIuNC0xOC4xLTctMTUuN3pNMTA5LjMgNDA2LjRDODkuOCAzODkuOCA3NC4yIDM2OS4yIDYzLjUgMzQ2cy0xNi4zLTQ4LjUtMTYuMy03NGMwLTk3LjcgNzkuNC0xNzcuMSAxNzcuMS0xNzcuMSAyNi42IDAgNTIuOCA2LjEgNzYuNiAxNy44LTY2IDYyLjEtMTI2LjkgMTUyLjktMTkxLjYgMjkzLjh6Il19LFJudD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyYXNwYmVycnktcGkiLGljb246WzQ0OCw1MTIsW10sImY3YmIiLCJNMzkyLjUgMjMyLjVsLTMuNy02LjVjLjEtNDYuNC0yMS40LTY1LjMtNDYuNS03OS43IDcuNi0yIDE1LjQtMy42IDE3LjYtMTMuMiAxMy4xLTMuMyAxNS44LTkuNCAxNy4xLTE1LjggMy40LTIuMyAxNC44LTguNyAxMy42LTE5LjcgNi40LTQuNCAxMC0xMC4xIDguMS0xOC4xIDYuOS03LjUgOC43LTEzLjcgNS44LTE5LjQgOC4zLTEwLjMgNC42LTE1LjYgMS4xLTIwLjkgNi4yLTExLjIgLjctMjMuMi0xNi42LTIxLjItNi45LTEwLjEtMjEuOS03LjgtMjQuMi03LjgtMi42LTMuMi02LTYtMTYuNS00LjctNi44LTYuMS0xNC40LTUtMjIuMy0yLjEtOS4zLTcuMy0xNS41LTEuNC0yMi42IC44LTExLjMtMy42LTEzLjkgMS4zLTE5LjQgMy40LTEyLjMtMi42LTE2LjEgMy0yMiA4LjlsLTYuOS0uMWMtMTguNiAxMC44LTI3LjggMzIuOC0zMS4xIDQ0LjEtMy4zLTExLjMtMTIuNS0zMy4zLTMxLjEtNDQuMWwtNi45IC4xYy01LjktNS45LTkuNy0xMS41LTIyLTguOS01LjYtMi04LjEtNy0xOS40LTMuNC00LjYtMS40LTguOS00LjQtMTMuOS00LjMtMi42IC4xLTUuNSAxLTguNyAzLjUtNy45LTMtMTUuNS00LTIyLjMgMi4xLTEwLjUtMS4zLTE0IDEuNC0xNi41IDQuNy0yLjMgMC0xNy4zLTIuMy0yNC4yIDcuOC0xNy4zLTItMjIuNyAxMC0xNi41IDIxLjItMy41IDUuNC03LjIgMTAuNyAxLjEgMjAuOS0yLjkgNS43LTEuMSAxMS45IDUuOCAxOS40LTEuOCA4IDEuOCAxMy43IDguMSAxOC4xLTEuMiAxMSAxMC4yIDE3LjQgMTMuNiAxOS43IDEuMyA2LjQgNCAxMi40IDE3LjEgMTUuOCAyLjIgOS41IDEwIDExLjIgMTcuNiAxMy4yLTI1LjEgMTQuNC00Ni42IDMzLjMtNDYuNSA3OS43bC0zLjcgNi41Yy0yOC44IDE3LjItNTQuNyA3Mi43LTE0LjIgMTE3LjcgMi42IDE0LjEgNy4xIDI0LjIgMTEgMzUuNCA1LjkgNDUuMiA0NC41IDY2LjMgNTQuNiA2OC44IDE0LjkgMTEuMiAzMC44IDIxLjggNTIuMiAyOS4yIDIwLjMgMjAuNiA0Mi4zIDI4LjQgNjQuMyAyOC40bDEgMGMyMi4xIDAgNDQtNy44IDY0LjItMjguNCAyMS41LTcuNCAzNy4zLTE4IDUyLjItMjkuMiAxMC4yLTIuNSA0OC43LTIzLjYgNTQuNi02OC44IDMuOS0xMS4yIDguNC0yMS4zIDExLTM1LjQgNDAuNi00NS4xIDE0LjctMTAwLjUtMTQtMTE3Ljd6bS0yMi4yLThjLTEuNSAxOC43LTk4LjktNjUuMS04Mi4xLTY3LjkgNDUuNy03LjUgODMuNiAxOS4yIDgyLjEgNjcuOXptLTQzIDkzLjFjLTI0LjUgMTUuOC01OS44IDUuNi03OC44LTIyLjhzLTE0LjYtNjQuMiA5LjktODAgNTkuOC01LjYgNzguOCAyMi44IDE0LjYgNjQuMi05LjkgODB6TTI1OS40IDI5LjNjLjggNC4yIDEuOCA2LjggMi45IDcuNiA1LjQtNS44IDkuOC0xMS43IDE2LjgtMTcuMyAwIDMuMy0xLjcgNi44IDIuNSA5LjQgMy43LTUgOC44LTkuNSAxNS41LTEzLjMtMy4yIDUuNi0uNiA3LjMgMS4yIDkuNiA1LjEtNC40IDEwLTguOCAxOS40LTEyLjMtMi42IDMuMS02LjIgNi4yLTIuNCA5LjggNS4zLTMuMyAxMC42LTYuNiAyMy4xLTguOS0yLjggMy4xLTguNyA2LjMtNS4xIDkuNCA2LjYtMi41IDE0LTQuNCAyMi4xLTUuNC0zLjkgMy4yLTcuMSA2LjMtMy45IDguOCA3LjEtMi4yIDE2LjktNS4xIDI2LjQtMi42bC02IDYuMWMtLjcgLjggMTQuMSAuNiAyMy45IC44LTMuNiA1LTcuMiA5LjctOS4zIDE4LjIgMSAxIDUuOCAuNCAxMC40IDAtNC43IDkuOS0xMi44IDEyLjMtMTQuNyAxNi42IDIuOSAyLjIgNi44IDEuNiAxMS4yIC4xLTMuNCA2LjktMTAuNCAxMS43LTE2IDE3LjMgMS40IDEgMy45IDEuNiA5LjcgLjktNS4yIDUuNS0xMS40IDEwLjUtMTguOCAxNSAxLjMgMS41IDUuOCAxLjUgMTAgMS42LTYuNyA2LjUtMTUuMyA5LjktMjMuNCAxNC4yIDQgMi43IDYuOSAyLjEgMTAgMi4xLTUuNyA0LjctMTUuNCA3LjEtMjQuNCAxMCAxLjcgMi43IDMuNCAzLjQgNy4xIDQuMS05LjUgNS4zLTIzLjIgMi45LTI3IDUuNiAuOSAyLjcgMy42IDQuNCA2LjcgNS44LTE1LjQgLjktNTcuMy0uNi02NS40LTMyLjMgMTUuNy0xNy4zIDQ0LjQtMzcuNSA5My43LTYyLjYtMzguNCAxMi44LTczIDMwLTEwMiA1My41LTM0LjMtMTUuOS0xMC44LTU1LjkgNS44LTcxLjh6TTIyNSAxNDMuOWMyNC4yLS4zIDU0LjEgMTcuOCA1NCAzNC43LS4xIDE1LTIxIDI3LjEtNTMuOCAyNi45LTMyLjEtLjQtNTMuNy0xNS4yLTUzLjYtMjkuOCAwLTExLjkgMjYuMi0zMi41IDUzLjQtMzEuOHpNMTAyIDEzMS4xYzMuNy0uNyA1LjQtMS41IDcuMS00LjEtOS0yLjgtMTguNy01LjMtMjQuNC0xMCAzLjEgMCA2IC43IDEwLTIuMS04LjEtNC4zLTE2LjctNy43LTIzLjQtMTQuMiA0LjItLjEgOC43IDAgMTAtMS42LTcuNC00LjUtMTMuNi05LjUtMTguOC0xNSA1LjggLjcgOC4zIC4xIDkuNy0uOS01LjYtNS42LTEyLjctMTAuNC0xNi0xNy4zIDQuMyAxLjUgOC4zIDIgMTEuMi0uMS0xLjktNC4yLTEwLTYuNy0xNC43LTE2LjYgNC42IC40IDkuNCAxIDEwLjQgMC0yLjEtOC41LTUuOC0xMy4zLTkuMy0xOC4yIDkuOC0uMSAyNC42IDAgMjMuOS0uOGwtNi02LjFjOS41LTIuNSAxOS4zIC40IDI2LjQgMi42IDMuMi0yLjUtLjEtNS42LTMuOS04LjggOC4xIDEuMSAxNS40IDIuOSAyMi4xIDUuNCAzLjUtMy4xLTIuMy02LjMtNS4xLTkuNCAxMi41IDIuMyAxNy44IDUuNiAyMy4xIDguOSAzLjgtMy42IC4yLTYuNy0yLjQtOS44IDkuNCAzLjQgMTQuMyA3LjkgMTkuNCAxMi4zIDEuNy0yLjMgNC40LTQgMS4yLTkuNiA2LjcgMy44IDExLjggOC4zIDE1LjUgMTMuMyA0LjEtMi42IDIuNS02LjIgMi41LTkuNCA3IDUuNiAxMS40IDExLjUgMTYuOCAxNy4zIDEuMS0uOCAyLTMuNCAyLjktNy42IDE2LjYgMTUuOSA0MC4xIDU1LjkgNiA3MS44LTI5LTIzLjUtNjMuNi00MC43LTEwMi01My41IDQ5LjMgMjUgNzggNDUuMyA5My43IDYyLjYtOCAzMS44LTUwIDMzLjItNjUuNCAzMi4zIDMuMS0xLjQgNS44LTMuMiA2LjctNS44LTQtMi44LTE3LjYtLjQtMjcuMi01LjZ6bTYwLjEgMjQuMWMxNi44IDIuOC04MC42IDg2LjUtODIuMSA2Ny45LTEuNS00OC43IDM2LjUtNzUuNSA4Mi4xLTY3Ljl6TTU4LjcgMzQyYy0yMy43LTE4LjgtMzEuMy03My43IDEyLjYtOTguMyAyNi41LTcgOSAxMDcuOC0xMi42IDk4LjN6bTkxIDk4LjJjLTEzLjMgNy45LTQ1LjggNC43LTY4LjgtMjcuOS0xNS41LTI3LjQtMTMuNS01NS4yLTIuNi02My40IDE2LjMtOS44IDQxLjUgMy40IDYwLjkgMjUuNiAxNi45IDIwIDI0LjYgNTUuMyAxMC41IDY1Ljd6TTEyMy4zIDMyMC41Yy0yNC41LTE1LjgtMjguOS01MS42LTkuOS04MHM1NC4zLTM4LjYgNzguOC0yMi44IDI4LjkgNTEuNiA5LjkgODBjLTE5LjEgMjguNC01NC40IDM4LjYtNzguOCAyMi44ek0yMjUuNSA0OTZjLTI5LjQgMS4yLTU4LjItMjMuNy01Ny44LTMyLjMtLjQtMTIuNyAzNS44LTIyLjYgNTkuMy0yMiAyMy43LTEgNTUuNiA3LjUgNTUuNyAxOC45IC41IDExLTI4LjggMzUuOS01Ny4yIDM1LjR6bTU4LjktMTI0LjljLjIgMjkuNy0yNi4yIDUzLjgtNTguOCA1NHMtNTkuMi0yMy44LTU5LjQtNTMuNGwwLS42Yy0uMi0yOS43IDI2LjItNTMuOCA1OC44LTU0czU5LjIgMjMuOCA1OS40IDUzLjRsMCAuNnptODIuMiA0Mi43Yy0yNS4zIDM0LjYtNTkuNiAzNS45LTcyLjMgMjYuMy0xMy4zLTEyLjQtMy4yLTUwLjkgMTUuMS03MiAyMC45LTIzLjMgNDMuMy0zOC41IDU4LjktMjYuNiAxMC41IDEwLjMgMTYuNyA0OS4xLTEuNyA3Mi4zem0yMi45LTczLjJjLTIxLjUgOS40LTM5LTEwNS4zLTEyLjYtOTguMyA0My45IDI0LjcgMzYuMyA3OS42IDEyLjYgOTguM3oiXX0sSG50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNzczMiLGljb246WzUxMiw1MTIsW10sImYxM2MiLCJNNDgwIDMybC02NCAzNjgtMjIzLjMgODAtMTkyLjctODAgMTkuNi05NC44IDgyIDAtOCA0MC42IDExNi40IDQ0LjQgMTM0LjEtNDQuNCAxOC44LTk3LjEtMzMzLjQgMCAxNi04MiAzMzMuNyAwIDEwLjUtNTIuNy0zMzMuNCAwIDE2LjMtODIgNDA3LjQgMHoiXX0scW50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imh1YnNwb3QiLGljb246WzQ0OCw1MTIsW10sImYzYjIiLCJNMjM1LjggMjExLjZjLTI1LjEgMjMuNy00MC44IDU3LjMtNDAuOCA5NC42IDAgMjkuMyA5LjcgNTYuMyAyNiA3OEwxNzEuNSA0MzRjLTQuNC0xLjYtOS4xLTIuNS0xNC0yLjUtMTAuOCAwLTIwLjkgNC4yLTI4LjUgMTEuOHMtMTEuOCAxNy44LTExLjggMjguNiA0LjIgMjAuOSAxMS44IDI4LjUgMTcuOCAxMS42IDI4LjUgMTEuNmMxMC44IDAgMjAuOS0zLjkgMjguNi0xMS42IDcuNi03LjYgMTEuOC0xNy44IDExLjgtMjguNSAwLTQuMi0uNi04LjItMS45LTEyLjFsNTAtNTAuMmMyMiAxNi45IDQ5LjQgMjYuOSA3OS4zIDI2LjkgNzEuOSAwIDEzMC01OC4zIDEzMC0xMzAuMiAwLTY1LjItNDcuNy0xMTkuMi0xMTAuMi0xMjguN2wwLTYxLjZjMTcuNS03LjQgMjguMi0yMy44IDI4LjItNDIuOSAwLTI2LjEtMjAuOS00Ny45LTQ3LTQ3LjlTMjc5LjYgNDcgMjc5LjYgNzMuMWMwIDE5LjEgMTAuNyAzNS41IDI4LjIgNDIuOWwwIDYxLjJjLTE1LjIgMi4xLTI5LjYgNi43LTQyLjcgMTMuNi0yNy42LTIwLjktMTE3LjUtODUuNy0xNjguOS0xMjQuOCAxLjItNC40IDItOSAyLTEzLjggMC0yOC44LTIzLjUtNTIuMi01Mi40LTUyLjItMjguOCAwLTUyLjIgMjMuNC01Mi4yIDUyLjIgMCAyOC45IDIzLjQgNTIuMyA1Mi4yIDUyLjMgOS44IDAgMTguOS0yLjkgMjYuOC03LjZMMjM1LjggMjExLjZ6bTg5LjUgMjUuNmE2OSA2OSAwIDEgMSAwIDEzOCA2OSA2OSAwIDEgMSAwLTEzOHoiXX0sVm50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNtcGxpZCIsaWNvbjpbNjQwLDUxMixbXSwiZTM2MCIsIk0yMjYuMSAzODguMmMwLS43LS4yLTEuNS0uNi0yLjFzLTEtMS4xLTEuNy0xLjRjLS41LS4yLTEuMS0uNC0xLjYtLjRsLTE0OS42IDBjLTMuMSAwLTYuMi0uOC04LjktMi4ycy01LjEtMy41LTYuOS02LjEtMi45LTUuNS0zLjMtOC42IDAtNi4yIDEuMS05LjFMODEuNiAyNTUuN2MyLTcuMiA2LjItMTMuNSAxMi0xOC4yczEyLjktNy40IDIwLjQtNy44bDE0OC42IDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42bDEwLjgtNDEuMWMuNC0xIC4zLTItLjEtMi45cy0xLjItMS42LTIuMS0yYy0uNC0uMi0uOS0uMy0xLjQtLjMtLjEgMC0uMSAwLS4yIDBsLTE0OC41IDBjLTIyLjIgMS4yLTQzLjQgOS4yLTYwLjggMjNzLTMwIDMyLjctMzYuMiA1NC4xTDMuNSAzNTguOGMtMy4yIDguNy00LjIgMTgtMyAyNy4xczQuNiAxNy45IDkuOSAyNS41IDEyLjMgMTMuOCAyMC41IDE4IDE3LjMgNi41IDI2LjUgNi42YzEgMCAxLjkgMCAyLjktLjFsMTQ4LjYgMGMxLjUtLjEgMi45LS43IDQtMS42czItMi4yIDIuNC0zLjZsMTAuNy00MS4xYy4yLS41IC4zLS45IC4zLTEuNHptODAuNS0zMDdjLjItLjQgLjMtLjkgLjMtMS40IDAtLjUtLjEtMS0uMy0xLjVzLS41LS45LS44LTEuMi0uOC0uNi0xLjItLjgtMS0uMy0xLjUtLjNsLTQxLjIgMGMtMS41IC4xLTIuOSAuNi00IDEuNnMtMiAyLjItMi40IDMuNmwtMjEuMyA4MC45IDUxLjEgMCAyMS40LTgwLjl6bS0xMjYuMyAyODdsNTEuMSAwIDMyLTEyMi42LTUxLjEgMC0zMiAxMjIuNnpNNTExLjkgNzkuN2MwLTEtLjUtMS45LTEuMi0yLjZzLTEuNy0xLjEtMi42LTEuMWMtLjEgMC0uMSAwLS4yIDBsLTQxIDBjLTEuNSAuMS0yLjkgLjYtNC4xIDEuNXMtMiAyLjItMi41IDMuNkwzNjguOSA0MzAuNmMtLjIgLjQtLjMgLjktLjMgMS4zIDAgMSAuNCAyIDEuMSAyLjdzMS43IDEuMSAyLjcgMS4xbDQxLjIgMGMxLjUtLjEgMi45LS42IDQtMS42czItMi4yIDIuNC0zLjZMNTExLjUgODEuMmMuMi0uNSAuMy0xIC4zLTEuNXpNMzI0LjYgMzg0LjVsLTQxIDBjLTEuNSAuMS0yLjkgLjctNCAxLjZzLTIgMi4yLTIuNCAzLjZsLTEwLjcgNDEuMWMtLjIgLjQtLjMgLjktLjMgMS40IDAgLjUgLjEgMSAuMyAxLjVzLjUgLjkgLjggMS4yIC44IC42IDEuMiAuOCAxIC4zIDEuNSAuM2MuMSAwIC4yIDAgLjMgMGw0MC45IDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42bDEwLjgtNDEuMWMuMi0uNiAuMy0xLjIgLjMtMS44cy0uMy0xLjItLjYtMS43LS44LS45LTEuMy0xLjItMS4yLS40LTEuOC0uNGMtLjEgMC0uMiAwLS4zIDBsMCAwek02MzYgNzYuMWwtNDEgMGMtMS41IC4xLTIuOSAuNi00IDEuNXMtMiAyLjItMi40IDMuNkw0OTcuMSA0MzAuNmMtLjIgLjQtLjIgLjktLjIgMS4zIDAgMSAuNCAyIDEuMSAyLjdzMS43IDEuMSAyLjcgMS4xbDQxLjEgMGMxLjUtLjEgMi45LS42IDQtMS42czItMi4yIDIuNC0zLjZMNjM5LjcgODEuMmMuMi0uNSAuMy0xIC4zLTEuNS0uMS0xLS41LTEuOS0xLjItMi41cy0xLjYtMS0yLjYtMWMtLjEgMC0uMSAwLS4yIDBsMC0uMXpNMzcxLjYgMjI1LjJsMTAuOC00MS4xYy4yLS40IC4yLS45IC4yLTEuNCAwLTEtLjQtMi0xLjEtMi43cy0xLjctMS4xLTIuNy0xLjFsLTQxLjMgMGMtMS41IC4xLTIuOSAuNy00IDEuNnMtMiAyLjItMi40IDMuNmwtMTAuOCA0MS4xYy0uMiAuNS0uMyAxLS4zIDEuNWwwIC4yYy4xIDEgLjUgMS44IDEuMiAyLjVzMS42IDEgMi42IDFjLjEgMCAuMiAwIC4zIDBsNDEuMSAwYzEuNS0uMSAyLjktLjYgNC0xLjZzMi0yLjIgMi40LTMuNnoiXX0sVW50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImR5YWxvZyIsaWNvbjpbNDQ4LDUxMixbXSwiZjM5OSIsIk0xNiAzMmwwIDExOS4yIDY0IDAgMC01NS4yIDEwNy4yIDBDMzAwLjYgOTYgMzY4IDE3Ni4yIDM2OCAyNTUuOSAzNjggMzMyIDMwOS40IDQxNiAxODcuMiA0MTZsLTE3MS4yIDAgMCA2NCAxNzEuMiAwQzM0Ny45IDQ4MCA0MzIgMzY3LjMgNDMyIDI1NS45IDQzMiAxOTcuMiA0MDkuOSAxNDIuNSAzNjkuNyAxMDEuNiAzMjQuOSA1NiAyNjEuNyAzMiAxODcuMiAzMkwxNiAzMnoiXX0sam50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImVsZW1lbnRvciIsaWNvbjpbNTEyLDUxMixbXSwiZjQzMCIsIk0uNSAyNTZjMCAxNDEgMTEzLjYgMjU1IDI1NC42IDI1NSAxNDIgMCAyNTYtMTE0IDI1Ni0yNTUgMC0xNDAtMTE0LTI1My45LTI1Ni0yNTMuOS0xNDEgMC0yNTQuNiAxMTMuOS0yNTQuNiAyNTMuOXpNMTkyLjEgMTUwbDAgMjEzLTQzIDAgMC0yMTMgNDMgMHptNDIgMGwxMjggMCAwIDQzLTEyOCAwIDAtNDN6bTEyOCA4NWwwIDQzLTEyOCAwIDAtNDMgMTI4IDB6bS0xMjggODVsMTI4IDAgMCA0My0xMjggMCAwLTQzeiJdfSxXbnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmlyc3Qtb3JkZXIiLGljb246WzQ0OCw1MTIsW10sImYyYjAiLCJNMTMuMyAyMjkuMmMuMS0uMSAuMi0uMyAuMy0uNCAwIC4xIDAgLjMtLjEgLjRsLS4yIDB6TTIyNC40IDk2LjZjLTcuMSAwLTE0LjYgLjYtMjEuNCAxLjdsMy43IDY3LjQtMjItNjRjLTE0LjMgMy43LTI3LjcgOS40LTQwIDE2LjZsMjkuNCA2MS40LTQ1LjEtNTAuOWMtMTEuNCA4LjktMjEuNyAxOS4xLTMwLjYgMzAuOWw1MC42IDQ1LjQtNjEuMS0yOS43Yy03LjEgMTIuMy0xMi45IDI1LjctMTYuNiA0MGw2NC4zIDIyLjYtNjgtNGMtLjkgNy4xLTEuNCAxNC42LTEuNCAyMnMuNiAxNC42IDEuNCAyMS43bDY3LjctNC02NCAyMi42YzMuNyAxNC4zIDkuNCAyNy43IDE2LjYgNDAuM0wxNDkgMzA2LjkgOTguMSAzNTJjOC45IDExLjcgMTkuMSAyMi4zIDMwLjkgMzAuOWw0NC45LTUwLjktMjkuNSA2MS40YzEyLjMgNy40IDI1LjcgMTMuMSA0MCAxNi45bDIyLjMtNjQuNi00IDY4YzcuMSAxLjEgMTQuNiAxLjcgMjEuNyAxLjcgNy40IDAgMTQuNi0uNiAyMS43LTEuN2wtNC02OC42IDIyLjYgNjUuMWMxNC4zLTQgMjcuNy05LjQgNDAtMTYuOWwtMjkuNC02MS4zIDQ0LjkgNTAuOWMxMS43LTguOSAyMi0xOS4xIDMwLjYtMzAuOWwtNTAuNi00NS4xIDYxLjEgMjkuNGM3LjEtMTIuMyAxMi45LTI1LjcgMTYuNi00MC4zbC02NC0yMi4zIDY3LjQgNGMxLjEtNy4xIDEuNC0xNC4zIDEuNC0yMS43cy0uMy0xNC45LTEuNC0yMmwtNjcuNyA0IDY0LTIyLjNjLTMuNy0xNC4zLTkuMS0yOC0xNi42LTQwLjNsLTYwLjkgMjkuNyA1MC42LTQ1LjRjLTguOS0xMS43LTE5LjEtMjItMzAuNi0zMC45bC00NS4xIDUwLjkgMjkuNC02MS4xYy0xMi4zLTcuNC0yNS43LTEzLjEtNDAtMTYuOWwtMjIuMyA2NC4zIDQtNjcuN2MtNy4xLTEuMi0xNC4zLTEuNy0yMS43LTEuN3pNNDQzLjggMTI4TDQ0My44IDM4NCAyMjQuNCA1MTIgNSAzODQgNSAxMjggMjI0LjQgMCA0NDMuOCAxMjh6bS0xNy4xIDEwLjNsLTIwMi4zLTExNy40LTIwMi4zIDExNy40IDAgMjM1LjEgMjAyLjMgMTE3LjcgMjAyLjMtMTE3LjcgMC0yMzUuMXpNMjI0LjQgMzcuMWwxODcuNyAxMDkuNCAwIDIxOC45LTE4Ny43IDEwOS41LTE4Ny43LTEwOS41IDAtMjE4LjggMTg3LjctMTA5LjV6bTAgNTAuOWMtOTIuMyAwLTE2Ni45IDc1LjEtMTY2LjkgMTY4IDAgOTIuNiA3NC42IDE2Ny43IDE2Ni45IDE2Ny43IDkyIDAgMTY2LjktNzUuMSAxNjYuOS0xNjcuNyAwLTkyLjktNzQuOS0xNjgtMTY2LjktMTY4eiJdfSxHbnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZHJpYmJibGUiLGljb246WzUxMiw1MTIsW10sImYxN2QiLCJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MjAgMTIyLjRjMjkuNSAzNiA0Ny40IDgyIDQ3LjggMTMyLTctMS41LTc3LTE1LjctMTQ3LjUtNi44LTUuOC0xNC0xMS4yLTI2LjQtMTguNi00MS42IDc4LjMtMzIgMTEzLjgtNzcuNSAxMTguMy04My41ek0zOTYuNCA5Ny45Yy0zLjggNS40LTM1LjcgNDguMy0xMTEgNzYuNS0zNC43LTYzLjgtNzMuMi0xMTYuMi03OS0xMjQgNjcuMi0xNi4yIDEzOCAxLjMgMTkwLjEgNDcuNXpNMTY1LjkgNjQuNmM1LjYgNy43IDQzLjQgNjAuMSA3OC41IDEyMi41LTk5LjEgMjYuMy0xODYuNCAyNS45LTE5NS44IDI1LjggMTMuNy02NS43IDU4LTEyMC40IDExNy4zLTE0OC4zek00NC4yIDI1Ni4zYzAtMi4yIDAtNC4zIC4xLTYuNSA5LjMgLjIgMTExLjkgMS41IDIxNy43LTMwLjEgNi4xIDExLjkgMTEuOSAyMy45IDE3LjIgMzUuOS03Ni42IDIxLjYtMTQ2LjIgODMuNS0xODAuNSAxNDIuMy0zMy44LTM3LjYtNTQuNS04Ny4yLTU0LjUtMTQxLjZ6TTEyNiA0MjMuNGMyMi4xLTQ1LjIgODIuMi0xMDMuNiAxNjcuNi0xMzIuOCAyOS43IDc3LjMgNDIgMTQyLjEgNDUuMiAxNjAuNi02OC4xIDI5LTE1MCAyMS4xLTIxMi44LTI3Ljl6bTI0OC40IDguNWMtMi4yLTEyLjktMTMuNC03NC45LTQxLjItMTUxIDY2LjQtMTAuNiAxMjQuNyA2LjggMTMxLjkgOS4xLTkuNCA1OC45LTQzLjMgMTA5LjgtOTAuOCAxNDJ6Il19LHVWPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImxpbmtlZGluIixpY29uOls0NDgsNTEyLFtdLCJmMDhjIiwiTTQxNiAzMkwzMS45IDMyQzE0LjMgMzIgMCA0Ni41IDAgNjQuM0wwIDQ0Ny43QzAgNDY1LjUgMTQuMyA0ODAgMzEuOSA0ODBMNDE2IDQ4MGMxNy42IDAgMzItMTQuNSAzMi0zMi4zbDAtMzgzLjRDNDQ4IDQ2LjUgNDMzLjYgMzIgNDE2IDMyek0xMzUuNCA0MTZsLTY2LjQgMCAwLTIxMy44IDY2LjUgMCAwIDIxMy44LS4xIDB6TTEwMi4yIDk2YTM4LjUgMzguNSAwIDEgMSAwIDc3IDM4LjUgMzguNSAwIDEgMSAwLTc3ek0zODQuMyA0MTZsLTY2LjQgMCAwLTEwNGMwLTI0LjgtLjUtNTYuNy0zNC41LTU2LjctMzQuNiAwLTM5LjkgMjctMzkuOSA1NC45bDAgMTA1LjgtNjYuNCAwIDAtMjEzLjggNjMuNyAwIDAgMjkuMiAuOSAwYzguOS0xNi44IDMwLjYtMzQuNSA2Mi45LTM0LjUgNjcuMiAwIDc5LjcgNDQuMyA3OS43IDEwMS45bDAgMTE3LjJ6Il19LFludD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjYy1wYXlwYWwiLGljb246WzU3Niw1MTIsW10sImYxZjQiLCJNMTg2LjMgMjU4LjJjMCAxMi4yLTkuNyAyMS41LTIyIDIxLjUtOS4yIDAtMTYtNS4yLTE2LTE1IDAtMTIuMiA5LjUtMjIgMjEuNy0yMiA5LjMgMCAxNi4zIDUuNyAxNi4zIDE1LjV6TTgwLjUgMjA5LjdsLTQuNyAwYy0xLjUgMC0zIDEtMy4yIDIuN2wtNC4zIDI2LjcgOC4yLS4zYzExIDAgMTkuNS0xLjUgMjEuNS0xNC4yIDIuMy0xMy40LTYuMi0xNC45LTE3LjUtMTQuOXptMjg0IDBsLTQuNSAwYy0xLjggMC0zIDEtMy4yIDIuN2wtNC4yIDI2LjcgOC0uM2MxMyAwIDIyLTMgMjItMTgtLjEtMTAuNi05LjYtMTEuMS0xOC4xLTExLjF6TTU3NiA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTEyOC4zIDIxNS40YzAtMjEtMTYuMi0yOC0zNC43LTI4bC00MCAwYy0yLjUgMC01IDItNS4yIDQuN0wzMiAyOTQuMmMtLjMgMiAxLjIgNCAzLjIgNGwxOSAwYzIuNyAwIDUuMi0yLjkgNS41LTUuN2w0LjUtMjYuNmMxLTcuMiAxMy4yLTQuNyAxOC00LjcgMjguNiAwIDQ2LjEtMTcgNDYuMS00NS44em04NC4yIDguOGwtMTkgMGMtMy44IDAtNCA1LjUtNC4yIDguMi01LjgtOC41LTE0LjItMTAtMjMuNy0xMC0yNC41IDAtNDMuMiAyMS41LTQzLjIgNDUuMiAwIDE5LjUgMTIuMiAzMi4yIDMxLjcgMzIuMiA5IDAgMjAuMi00LjkgMjYuNS0xMS45LS41IDEuNS0xIDQuNy0xIDYuMiAwIDIuMyAxIDQgMy4yIDRsMTcuMiAwYzIuNyAwIDUtMi45IDUuNS01LjdsMTAuMi02NC4zYy4zLTEuOS0xLjItMy45LTMuMi0zLjl6TTI1MyAzMjIuMWw2My43LTkyLjZjLjUtLjUgLjUtMSAuNS0xLjcgMC0xLjctMS41LTMuNS0zLjItMy41bC0xOS4yIDBjLTEuNyAwLTMuNSAxLTQuNSAyLjVsLTI2LjUgMzktMTEtMzcuNWMtLjgtMi4yLTMtNC01LjUtNGwtMTguNyAwYy0xLjcgMC0zLjIgMS44LTMuMiAzLjUgMCAxLjIgMTkuNSA1Ni44IDIxLjIgNjIuMS0yLjcgMy44LTIwLjUgMjguNi0yMC41IDMxLjYgMCAxLjggMS41IDMuMiAzLjIgMy4ybDE5LjIgMGMxLjgtLjEgMy41LTEuMSA0LjUtMi42ek00MTIuMyAyMTUuNGMwLTIxLTE2LjItMjgtMzQuNy0yOGwtMzkuNyAwYy0yLjcgMC01LjIgMi01LjUgNC43bC0xNi4yIDEwMmMtLjIgMiAxLjMgNCAzLjIgNGwyMC41IDBjMiAwIDMuNS0xLjUgNC0zLjJsNC41LTI5YzEtNy4yIDEzLjItNC43IDE4LTQuNyAyOC40IDAgNDUuOS0xNyA0NS45LTQ1Ljh6bTg0LjIgOC44bC0xOSAwYy0zLjggMC00IDUuNS00LjMgOC4yLTUuNS04LjUtMTQtMTAtMjMuNy0xMC0yNC41IDAtNDMuMiAyMS41LTQzLjIgNDUuMiAwIDE5LjUgMTIuMiAzMi4yIDMxLjcgMzIuMiA5LjMgMCAyMC41LTQuOSAyNi41LTExLjktLjMgMS41LTEgNC43LTEgNi4yIDAgMi4zIDEgNCAzLjIgNGwxNy4zIDBjMi43IDAgNS0yLjkgNS41LTUuN2wxMC4yLTY0LjNjLjMtMS45LTEuMi0zLjktMy4yLTMuOXpNNTQ0IDE5MC45YzAtMi0xLjUtMy41LTMuMi0zLjVsLTE4LjUgMGMtMS41IDAtMyAxLjItMy4yIDIuN2wtMTYuMiAxMDQtLjMgLjVjMCAxLjggMS41IDMuNSAzLjUgMy41bDE2LjUgMGMyLjUgMCA1LTIuOSA1LjItNS43bDE2LjItMTAxLjIgMC0uM3ptLTkwIDUxLjhjLTEyLjIgMC0yMS43IDkuNy0yMS43IDIyIDAgOS43IDcgMTUgMTYuMiAxNSAxMiAwIDIxLjctOS4yIDIxLjctMjEuNSAuMS05LjgtNi45LTE1LjUtMTYuMi0xNS41eiJdfSxabnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGhsIixpY29uOls2NDAsNTEyLFtdLCJmNzkwIiwiTTIzOCAzMDEuMmw1OC43IDAgMjIuMy0zMC4yLTU4LjcgMC0yMi4zIDMwLjJ6TTAgMjgyLjlsMCA2LjQgODEuOCAwIDQuNy02LjQtODYuNSAwek0xNzIuOSAyNzFjLTguNyAwLTYtMy42LTQuNi01LjUgMi44LTMuOCA3LjYtMTAuNCAxMC40LTE0LjFzMi44LTUuOS0yLjgtNS45bC01MSAwLTQxLjEgNTUuOCAxMDAuMSAwYzMzLjEgMCA1MS41LTIyLjUgNTcuMi0zMC4zbC02OC4yIDB6bTMxNy41LTYuOWwzOS4zLTUzLjQtNjIuMiAwLTM5LjMgNTMuNCA2Mi4yIDB6TTk1LjMgMjcxbC05NS4zIDAgMCA2LjQgOTAuNiAwIDQuNy02LjR6bTExMS0yNi42Yy0yLjggMy44LTcuNSAxMC40LTEwLjMgMTQuMi0xLjQgMi00LjEgNS41IDQuNiA1LjVsNDUuNiAwczcuMy0xMCAxMy41LTE4LjRjOC40LTExLjQgLjctMzUtMjkuMi0zNWwtMTE3LjkgMC0yMC40IDI3LjggMTExLjQgMGM1LjYgMCA1LjUgMi4yIDIuNyA1Ljl6TTAgMzAxLjJsNzMuMSAwIDQuNy02LjQtNzcuOCAwIDAgNi40em0zMjMgMGw1OC43IDAgMjIuMy0zMC4yLTU4LjcgMGMtLjEgMC0yMi4zIDMwLjItMjIuMyAzMC4yem0yMjIgLjFsOTUgMCAwLTYuNC05MC4zIDAtNC43IDYuNHpNNTY3LjMgMjcxbC00LjcgNi40IDc3LjQgMCAwLTYuNC03Mi43IDB6bS0xMy41IDE4LjNsODYuMiAwIDAtNi40LTgxLjUgMC00LjcgNi40ek0zODkuNiAyMTAuN2wtMjIuNSAzMC42LTI2LjIgMCAyMi41LTMwLjYtNTguNyAwLTM5LjMgNTMuNCAxNDMuNiAwIDM5LjMtNTMuNC01OC43IDB6TTQyMy4xIDI3MXMtNC4zIDUuOS02LjQgOC43Yy03LjQgMTAtLjkgMjEuNiAyMy4yIDIxLjZsOTQuMyAwIDIyLjMtMzAuMy0xMzMuNCAweiJdfSxYbnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidGV4IixpY29uOls2NDAsNTEyLFtdLCJlN2ZmIiwiTTYyMC44IDk1LjRjLTMwLjggLjQtNDIuMSAxNi42LTQ3LjcgMjQuNWwtLjEgLjEtNTUuNyA4MC41IDgyLjggMTIxLjFjNy41IDEwLjYgMTEuMyAxMi41IDM1LjQgMTIuNWwwIDkuMWMtOS4xLS43LTI4LS43LTM3LjctLjctMTIuNCAwLTMwLjggMC00Mi45IC43bDAtOS4xYzEzLjItLjggMTYuNi03LjMgMTYuNi0xMC4yIDAtMS4xIDAtMi4zLTMtNi40bC02NS41LTk2LjMtNjAuMiA4Ny45Yy0xLjkgMi43LTMuOCA1LjQtMy44IDEwLjIgMCA2LjEgMy40IDEzLjYgMTUgMTQuN2wwIDkuMWMtOS40LS43LTI3LjEtLjctMzcuMi0uN2wtMi44IDAtMTEuNyA4Mi42LTE5NS45IDAgMC05LjFjMjYuNyAwIDMwLjkgMCAzMC45LTE2LjlsMC0yMDMuMmMwLTE2LjktNC4zLTE2LjktMzAuOS0xNi45bDAtMTAuMyAxOS44IDBjLTQuOC02MS4xLTEwLjgtNzEuNy02OC03MS44bC0yMC43IDBjLTYuOCAxLjUtNi44IDYuMS02LjggMTQuNGwwIDIwNWMwIDEzLjYgMS4xIDE3LjggMzIuNCAxNy44bDEwLjUgMCAwIDkuMS0uNCAwYy0xNy45LS4zLTM2LjctLjctNTQuOS0uN3MtMzYuOSAuMy01NC44IC43bC0uNiAwIDAtOS4xIDEwLjcgMGMzMS43IDAgMzIuOC00LjEgMzIuOC0xNy44bDAtMjA1YzAtOC43IDAtMTMuMi03LjItMTQuM2wtMjAuOCAwYy01OC40IDAtNjMuNyAxMC45LTY4LjYgNzMuM2wtNi44IDAgNi4zLTgzLjMgMjE3LjUgMCA2LjEgODEuOCAxNjQuMSAwIDkgODMuMy02LjggMGMtNS4zLTQ5LjgtMTIuMS03My03MC4zLTczbC01MS41IDBjLTE1IDAtMTUuOCAxLjktMTUuOCAxNC42bDAgOTMuMyAzNS41IDBjMzUuNSAwIDM4LjktMTIuOCAzOC45LTQ0bDYgMCAwIDk3LjktNiAwYzAtMzEuOC0zLjQtNDQuOC0zOC45LTQ0LjhsLTM1LjUgMCAwIDEwNS4yYzAgMTMgLjcgMTQuOCAxNS44IDE0LjhsNTIuMiAwYzYxLjEgMCA2OS45LTI1LjggNzcuNC03My42LTcuNyAwLTE2LjMgLjItMjIuMiAuN2wwLTkuMWM3LjIgMCAzMS43LS40IDQ3LjgtMjMuOGw2NS41LTk1LjctNzIuNy0xMDYuN2MtOC4zLTExLjctMTUuMS0xMi41LTM1LjgtMTIuNWwwLTkuMWM5LjEgLjcgMjcuOSAuNyAzNy43IC43IDEyLjQgMCAzMC44IDAgNDIuOS0uN2wwIDkuMWMtMTIuNSAuNC0xNi42IDYuOC0xNi42IDEwLjIgMCAxLjEgLjQgMi4zIDMgNi40bDU1LjcgODEuNiA0OS43LTcyLjFjMi43LTMuNyA0LjUtNi44IDQuNS0xMS4zIDAtNi4xLTMtMTMuNi0xNS0xNC44bDAtOS4xYzkuNCAuNyAyNC44IC43IDM3LjIgLjcgOSAwIDIzLjMgMCAzMi0uN2wwIDkuMXoiXX0sUW50PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNob3BpZnkiLGljb246WzQ0OCw1MTIsW10sImUwNTciLCJNMzg4LjUgMTA0LjFjLS4yLTEuMS0uNy0yLjEtMS41LTIuOHMtMS44LTEuMi0yLjktMS4yYy0yIDAtMzcuMi0uOC0zNy4yLS44cy0yMS42LTIwLjgtMjkuNi0yOC44bDAgNDMyLjcgMTI1LjctMzEuMnMtNTQtMzY1LjUtNTQuNC0zNjcuOXpNMjg4LjkgNzAuNWMtMS45LTYuMS00LjMtMTEuOS03LjItMTcuNi0xMC40LTIwLTI2LTMwLjktNDQuNC0zMC45LTEuMyAwLTIuNyAuMS00IC40LS40LS44LTEuMi0xLjItMS42LTItOC04LjgtMTguNC0xMi44LTMwLjgtMTIuNC0yNCAuOC00OCAxOC02Ny4yIDQ4LjgtMTMuNiAyMS42LTI0IDQ4LjgtMjYuOCA3MC4xLTI3LjYgOC40LTQ2LjggMTQuNC00Ny4yIDE0LjgtMTQgNC40LTE0LjQgNC44LTE2IDE4LTEuMiAxMC0zOCAyOTEuOC0zOCAyOTEuOGwzMDIuNiA1Mi41IDAtNDM4LjNjLTEuNSAuMS0yLjkgLjItNC40IC40IDAgMC01LjYgMS42LTE0LjggNC40ek0yMzMuNiA4Ny43Yy0xNiA0LjgtMzMuNiAxMC40LTUwLjggMTUuNiA0LjgtMTguOCAxNC40LTM3LjYgMjUuNi01MCA0LjQtNC40IDEwLjQtOS42IDE3LjItMTIuOCA2LjggMTQuNCA4LjQgMzQgOCA0Ny4yek0yMDAuOCAyNC40YzUtLjIgMTAgMS4xIDE0LjQgMy42LTYuNCAzLjItMTIuOCA4LjQtMTguOCAxNC40LTE1LjIgMTYuNC0yNi44IDQyLTMxLjYgNjYuNS0xNC40IDQuNC0yOC44IDguOC00MiAxMi44IDguOC0zOC40IDQxLjItOTYuNCA3OC05Ny4yek0xNTQuNCAyNDQuNmMxLjYgMjUuNiA2OS4yIDMxLjIgNzMuMiA5MS43IDIuOCA0Ny42LTI1LjIgODAuMS02NS42IDgyLjUtNDguOCAzLjItNzUuNi0yNS42LTc1LjYtMjUuNmwxMC40LTQ0czI2LjggMjAuNCA0OC40IDE4LjhjMTQtLjggMTkuMi0xMi40IDE4LjgtMjAuNC0yLTMzLjYtNTcuMi0zMS42LTYwLjgtODYuOS0zLjItNDYuNCAyNy4yLTkzLjMgOTQuNS05Ny43IDI2LTEuNiAzOS4yIDQuOCAzOS4yIDQuOGwtMTUuMiA1Ny42cy0xNy4yLTgtMzcuNi02LjRjLTI5LjYgMi0zMCAyMC44LTI5LjYgMjUuNnpNMjQ5LjYgODIuOWMwLTEyLTEuNi0yOS4yLTcuMi00My42IDE4LjQgMy42IDI3LjIgMjQgMzEuMiAzNi40LTcuMiAyLTE1LjIgNC40LTI0IDcuMnoiXX0sWDFlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1yZWRkaXQiLGljb246WzQ0OCw1MTIsWyJyZWRkaXQtc3F1YXJlIl0sImYxYTIiLCJNNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyek0zMDUuOSAxNjYuNGMyMC42IDAgMzcuMy0xNi43IDM3LjMtMzcuM3MtMTYuNy0zNy4zLTM3LjMtMzcuM2MtMTggMC0zMy4xIDEyLjgtMzYuNiAyOS44LTMwLjIgMy4yLTUzLjggMjguOC01My44IDU5LjlsMCAuMmMtMzIuOCAxLjQtNjIuOCAxMC43LTg2LjYgMjUuNS04LjgtNi44LTE5LjktMTAuOS0zMi0xMC45LTI4LjkgMC01Mi4zIDIzLjQtNTIuMyA1Mi4zIDAgMjEgMTIuMyAzOSAzMC4xIDQ3LjQgMS43IDYwLjcgNjcuOSAxMDkuNiAxNDkuMyAxMDkuNnMxNDcuNi00OC45IDE0OS4zLTEwOS43YzE3LjctOC40IDI5LjktMjYuNCAyOS45LTQ3LjMgMC0yOC45LTIzLjQtNTIuMy01Mi4zLTUyLjMtMTIgMC0yMyA0LTMxLjkgMTAuOC0yNC0xNC45LTU0LjMtMjQuMi04Ny41LTI1LjRsMC0uMWMwLTIyLjIgMTYuNS00MC43IDM3LjktNDMuNyAzLjkgMTYuNSAxOC43IDI4LjcgMzYuMyAyOC43bC4yLS4yek0xNTUgMjQ4LjFjMTQuNiAwIDI1LjggMTUuNCAyNSAzNC40cy0xMS44IDI1LjktMjYuNSAyNS45LTI3LjUtNy43LTI2LjYtMjYuNyAxMy41LTMzLjUgMjguMS0zMy41bDAtLjF6bTE2Ni40IDMzLjVjLjkgMTktMTIgMjYuNy0yNi42IDI2LjdzLTI1LjYtNi45LTI2LjUtMjUuOSAxMC4zLTM0LjQgMjUtMzQuNCAyNy4zIDE0LjYgMjguMSAzMy41bDAgLjF6bS00Mi4xIDQ5LjZjLTkgMjEuNS0zMC4zIDM2LjctNTUuMSAzNi43cy00Ni4xLTE1LjEtNTUuMS0zNi43Yy0xLjEtMi42IC43LTUuNCAzLjQtNS43IDE2LjEtMS42IDMzLjUtMi41IDUxLjctMi41czM1LjYgLjkgNTEuNyAyLjVjMi43IC4zIDQuNSAzLjEgMy40IDUuN3oiXX0sS250PVgxZSxKbnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY3JlYXRpdmUtY29tbW9ucy1uYyIsaWNvbjpbNTEyLDUxMixbXSwiZjRlOCIsIk0yNTUuNiA4QzM5NS40IDggNTA0IDExNS45IDUwNCAyNTYgNTA0IDQwMy4yIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjEgNTA0IDggMzkzLjIgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6TTYzLjggMTg5LjFjLTcuNCAyMC40LTExLjEgNDIuNy0xMS4xIDY2LjkgMCAxMTAuOSA5Mi4xIDIwMi40IDIwMy43IDIwMi40IDEyMi40IDAgMTc3LjItMTAxLjggMTc4LjUtMTA0LjFsLTkzLjQtNDEuNmMtNy43IDM3LjEtNDEuMiA1My02OC4yIDU1LjRsMCAzOC4xLTI4LjggMCAwLTM4LjJjLTI3LjUtLjMtNTIuNi0xMC4yLTc1LjMtMjkuN2wzNC4xLTM0LjVjMzEuNyAyOS40IDg2LjQgMzEuOCA4Ni40LTIuMiAwLTYuMi0yLjItMTEuMi02LjYtMTUuMS0xNC4yLTYtMS44LS4xLTIxOS4zLTk3LjR6TTI1Ni40IDUyLjNDMjE4IDUyLjMgMTQ0IDYxIDg1LjkgMTQ1LjNsOTQuOCA0Mi41YzEwLTMxLjMgNDAuNC00Mi45IDYzLjgtNDQuM2wwLTM4LjEgMjguOCAwIDAgMzguMWMyMi43IDEuMiA0My40IDguOSA2MiAyM0wzMDMgMTk5LjdjLTQyLjctMjkuOS04My41LTgtNzAgMTEuMSA1My40IDI0LjEgNDMuOCAxOS44IDkzIDQxLjZsMTI3LjEgNTYuN2M0LjEtMTcuNCA2LjItMzUuMSA2LjItNTMuMSAwLTU3LTE5LjgtMTA1LTU5LjMtMTQzLjktMzkuMy0zOS45LTg3LjItNTkuOC0xNDMuNi01OS44eiJdfSxlMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ2FsYWN0aWMtcmVwdWJsaWMiLGljb246WzUxMiw1MTIsW10sImY1MGMiLCJNMjU2IDhhMjQ4IDI0OCAwIDEgMSAwIDQ5NiAyNDggMjQ4IDAgMSAxIDAtNDk2em0wIDE2LjVhMjMxLjUgMjMxLjUgMCAxIDAgMCA0NjIuOSAyMzEuNSAyMzEuNSAwIDEgMCAwLTQ2Mi45em0yNy42IDIxLjhsMCAyNC42YzMwLjMgNC41IDU5IDE2LjMgODMuNiAzNC41bDE3LjQtMTcuNGMtMjguNy0yMi4xLTYzLjMtMzYuOS0xMDEtNDEuOHptLTU1LjQgLjFjLTM3LjYgNC45LTcyLjIgMTkuOC0xMDAuOSA0MS45bDE3LjMgMTcuNCAuMSAwYzI0LjEtMTcuOCA1Mi42LTMwLjEgODMuNS0zNC43bDAtMjQuNXptMTIuMiA1MC4ybDAgODIuOWMtMTAgMi0xOS40IDUuOS0yNy43IDExLjRsLTU4LjYtNTguNi0yMS45IDIxLjkgNTguNyA1OC43Yy01LjUgOC4yLTkuNCAxNy42LTExLjUgMjcuNmwtODIuOSAwIDAgMzEgODIuOSAwYzIgMTAgNiAxOS4zIDExLjUgMjcuNWwtNTguNyA1OC43IDIxLjkgMjEuOSA1OC42LTU4LjZjOC40IDUuNiAxNy44IDkuNSAyNy43IDExLjVsMCA4Mi45IDMxIDAgMC04Mi45YzEwLTIgMTkuNC02LjEgMjcuNi0xMS41bDU4LjcgNTguNyAyMS45LTIxLjktNTguNy01OC43YzUuNS04LjIgOS41LTE3LjUgMTEuNS0yNy41bDgyLjkgMCAwLTMxLTgyLjkgMGMtMi0xMC02LTE5LjQtMTEuNS0yNy42bDU4LjctNTguNy0yMS45LTIxLjktNTguNyA1OC43Yy04LjItNS41LTE3LjYtOS41LTI3LjYtMTEuNWwwLTgyLjktMzEgMHptMTgzLjIgMzAuN2wtMTcuNCAxNy40YzE4LjMgMjQuNiAzMC4yIDUzLjQgMzQuNyA4My43bDI0LjYgMGMtNS0zNy43LTE5LjgtNzIuMy00MS45LTEwMXptLTMzNS42IC4xYy0yMi4xIDI4LjctMzYuOSA2My4zLTQxLjggMTAwLjlsMjQuNiAwYzQuNi0zMSAxNi44LTU5LjQgMzQuNi04My41TDg4LjIgMTI3LjR6TTQ2LjMgMjgzLjdjNC45IDM3LjYgMTkuNyA3Mi4yIDQxLjggMTAwLjlsMTcuNC0xNy40Qzg3LjcgMzQzLjEgNzUuNiAzMTQuNiA3MSAyODMuN2wtMjQuNiAwIDAgMHptMzk0LjcgMGMtNC42IDMxLTE2LjggNTkuNS0zNC43IDgzLjZsMTcuNCAxNy40YzIyLjEtMjguNyAzNy02My4zIDQxLjktMTAxbC0yNC42IDB6TTE0NC43IDQwNi40bC0xNy40IDE3LjRjMjguNyAyMi4xIDYzLjMgMzcgMTAxIDQxLjlsMC0yNC42Yy0zMS00LjYtNTkuNS0xNi44LTgzLjYtMzQuNnptMjIyLjUgMGMtMjQuMSAxNy44LTUyLjYgMzAuMS04My42IDM0LjdsMCAyNC42YzM3LjctNC45IDcyLjItMTkuOCAxMDEtNDEuOGwtMTcuMy0xNy40LS4xIDB6Il19LHBWPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZhY2Vib29rIixpY29uOls1MTIsNTEyLFs2MmUzXSwiZjA5YSIsIk01MTIgMjU2QzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZDMCAzNzYgODIuNyA0NzYuOCAxOTQuMiA1MDQuNWwwLTE3MC4zLTUyLjggMCAwLTc4LjIgNTIuOCAwIDAtMzMuN2MwLTg3LjEgMzkuNC0xMjcuNSAxMjUtMTI3LjUgMTYuMiAwIDQ0LjIgMy4yIDU1LjcgNi40bDAgNzAuOGMtNi0uNi0xNi41LTEtMjkuNi0xLTQyIDAtNTguMiAxNS45LTU4LjIgNTcuMmwwIDI3LjggODMuNiAwLTE0LjQgNzguMi02OS4zIDAgMCAxNzUuOUM0MTMuOCA0OTQuOCA1MTIgMzg2LjkgNTEyIDI1NnoiXX0sdDB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdpdGxhYiIsaWNvbjpbNTEyLDUxMixbXSwiZjI5NiIsIk01MDQgMjA0LjZsLS43LTEuOC02OS43LTE4MS44Yy0xLjQtMy42LTMuOS02LjYtNy4yLTguNi0yLjQtMS42LTUuMS0yLjUtOC0yLjhzLTUuNyAuMS04LjQgMS4xLTUuMSAyLjctNy4xIDQuOGMtMS45IDIuMS0zLjMgNC43LTQuMSA3LjRsLTQ3IDE0NC0xOTAuNSAwLTQ3LjEtMTQ0Yy0uOC0yLjgtMi4yLTUuMy00LjEtNy40LTItMi4xLTQuNC0zLjctNy4xLTQuOC0yLjYtMS01LjUtMS40LTguNC0xLjFzLTUuNiAxLjItOCAyLjhjLTMuMiAyLTUuOCA1LjEtNy4yIDguNkw5LjggMjAyLjggOSAyMDQuNmMtMTAgMjYuMi0xMS4zIDU1LTMuNSA4MiA3LjcgMjYuOSAyNCA1MC43IDQ2LjQgNjcuNmwuMyAuMiAuNiAuNCAxMDYgNzkuNWMzOC41IDI5LjEgNjYuNyA1MC4zIDg0LjYgNjMuOSAzLjcgMS45IDguMyA0LjMgMTMgNC4zczkuMy0yLjQgMTMtNC4zYzE3LjktMTMuNSA0Ni4xLTM0LjkgODQuNi02My45bDEwNi43LTc5LjkgLjMtLjNjMjIuNC0xNi45IDM4LjctNDAuNiA0NS42LTY3LjUgOC42LTI3IDcuNC01NS44LTIuNi04MnoiXX0sYTB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InFxIixpY29uOls0NDgsNTEyLFtdLCJmMWQ2IiwiTTQzNC4xIDQyMC40Yy0xMS41IDEuNC00NC45LTUyLjctNDQuOS01Mi43IDAgMzEuMy0xNi4xIDcyLjItNTEgMTAxLjggMTYuOCA1LjIgNTQuOCAxOS4yIDQ1LjggMzQuNC03LjMgMTIuMy0xMjUuNSA3LjktMTU5LjYgNC0zNC4xIDMuOC0xNTIuMyA4LjMtMTU5LjYtNC05LTE1LjIgMjguOS0yOS4yIDQ1LjgtMzQuNC0zNC45LTI5LjUtNTEuMS03MC40LTUxLjEtMTAxLjggMCAwLTMzLjMgNTQuMS00NC45IDUyLjctNS40LS42LTEyLjQtMjkuNiA5LjMtOTkuNyAxMC4zLTMzIDIyLTYwLjUgNDAuMS0xMDUuOC0zLjEtMTE2LjkgNDUuMi0yMTUgMTYwLjMtMjE1IDExMy43IDAgMTYzLjIgOTYuMSAxNjAuMyAyMTUgMTguMSA0NS4yIDI5LjkgNzIuOSA0MC4xIDEwNS44IDIxLjggNzAuMSAxNC43IDk5LjEgOS4zIDk5Ljd6Il19LHIwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzdHJpcGUiLGljb246WzY0MCw1MTIsW10sImY0MjkiLCJNMTY1IDE0NC43bC00My4zIDkuMi0uMiAxNDIuNGMwIDI2LjMgMTkuOCA0My4zIDQ2LjEgNDMuMyAxNC42IDAgMjUuMy0yLjcgMzEuMi01LjlsMC0zMy44Yy01LjcgMi4zLTMzLjcgMTAuNS0zMy43LTE1LjdsMC02My4yIDMzLjcgMCAwLTM3LjgtMzMuNyAwLS4xLTM4LjV6bTg5LjEgNTEuNmwtMi43LTEzLjEtMzguNCAwIDAgMTUzLjIgNDQuMyAwIDAtMTAzLjFjMTAuNS0xMy44IDI4LjItMTEuMSAzMy45LTkuM2wwLTQwLjhjLTYtMi4xLTI2LjctNi0zNy4xIDEzLjF6TTM0Ni40IDEyNGwtNDQuNiA5LjUgMCAzNi4yIDQ0LjYtOS41IDAtMzYuMnpNNDQuOSAyMjguM2MwLTYuOSA1LjgtOS42IDE1LjEtOS43IDEzLjUgMCAzMC43IDQuMSA0NC4yIDExLjRsMC00MS44Yy0xNC43LTUuOC0yOS40LTguMS00NC4xLTguMS0zNiAwLTYwIDE4LjgtNjAgNTAuMiAwIDQ5LjIgNjcuNSA0MS4yIDY3LjUgNjIuNCAwIDguMi03LjEgMTAuOS0xNyAxMC45LTE0LjcgMC0zMy43LTYuMS00OC42LTE0LjJsMCA0MGMxNi41IDcuMSAzMy4yIDEwLjEgNDguNSAxMC4xIDM2LjkgMCA2Mi4zLTE1LjggNjIuMy00Ny44IDAtNTIuOS02Ny45LTQzLjQtNjcuOS02My40ek02NDAgMjYxLjZjMC00NS41LTIyLTgxLjQtNjQuMi04MS40cy02Ny45IDM1LjktNjcuOSA4MS4xYzAgNTMuNSAzMC4zIDc4LjIgNzMuNSA3OC4yIDIxLjIgMCAzNy4xLTQuOCA0OS4yLTExLjVsMC0zMy40Yy0xMi4xIDYuMS0yNiA5LjgtNDMuNiA5LjgtMTcuMyAwLTMyLjUtNi4xLTM0LjUtMjYuOWw4Ni45IDBjLjItMi4zIC42LTExLjYgLjYtMTUuOXptLTg3LjktMTYuOGMwLTIwIDEyLjMtMjguNCAyMy40LTI4LjQgMTAuOSAwIDIyLjUgOC40IDIyLjUgMjguNGwtNDUuOSAwek00MzkuMiAxODAuMmMtMTcuNCAwLTI4LjYgOC4yLTM0LjggMTMuOWwtMi4zLTExLTM5LjEgMCAwIDIwNC44IDQ0LjQtOS40IC4xLTUwLjJjNi40IDQuNyAxNS45IDExLjIgMzEuNCAxMS4yIDMxLjggMCA2MC44LTIzLjIgNjAuOC03OS42IC4xLTUxLjYtMjkuMy03OS43LTYwLjUtNzkuN3pNNDI4LjYgMzAyLjdjLTEwLjQgMC0xNi42LTMuOC0yMC45LTguNGwtLjMtNjZjNC42LTUuMSAxMS04LjggMjEuMi04LjggMTYuMiAwIDI3LjQgMTguMiAyNy40IDQxLjQgLjEgMjMuOS0xMC45IDQxLjgtMjcuNCA0MS44ek0zMDEuOSAzMzYuNGw0NC42IDAgMC0xNTMuMi00NC42IDAgMCAxNTMuMnoiXX0saTB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRhaWx5bW90aW9uIixpY29uOls0NDgsNTEyLFtdLCJlMDUyIiwiTTI5OC45IDI2N2MtNy40LTQuMi0xNS44LTYuMy0yNC40LTYuMi0xMy4yIDAtMjQuNCA0LjQtMzMuNCAxMy4zcy0xMy42IDIwLTEzLjYgMzMuNGMwIDE0LjEgNC40IDI1LjYgMTMuMyAzNC42czIwIDEzLjQgMzMuNCAxMy40YzEzLjcgMCAyNS00LjYgMzQuMS0xMy44UzMyMiAzMjEuMSAzMjIgMzA3LjVjMC04LjItMi4xLTE2LjMtNi4xLTIzLjUtNC03LjEtOS44LTEzLTE3LTE3ek0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0zNzQuNyA0MDUuM2wtNTMuMSAwIDAtMjMuOS0uNyAwYy0xMC41IDE3LjUtMjkuMSAyNi4yLTU1LjggMjYuMi0xOC40IDAtMzQuNy00LjQtNDguOS0xMy4xLTE0LjEtOC42LTI1LjUtMjEtMzIuOS0zNS44LTcuNy0xNS4xLTExLjYtMzIuMS0xMS42LTUwLjkgMC0xOC40IDMuOS0zNS4xIDExLjgtNTAuMiA3LjUtMTQuNyAxOC45LTI3LjEgMzIuOS0zNS44IDE0LjEtOC43IDMwLTEzLjEgNDcuNy0xMy4xIDEwLjItLjEgMjAuMiAxLjYgMjkuNyA1LjIgOC45IDMuNSAxNy4yIDkuMSAyNSAxN2wwLTc3LjkgNTUuOC0xMi4xIDAgMjY0LjR6Il19LG8wdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzdGVhbSIsaWNvbjpbNTEyLDUxMixbXSwiZjFiNiIsIk01MDQgMjU2YzAgMTM3LTExMS4yIDI0OC0yNDguNCAyNDgtMTEzLjggMC0yMDkuNi03Ni4zLTIzOS0xODAuNGw5NS4yIDM5LjNjNi40IDMyLjEgMzQuOSA1Ni40IDY4LjkgNTYuNCAzOS4yIDAgNzEuOS0zMi40IDcwLjItNzMuNWw4NC41LTYwLjJjNTIuMSAxLjMgOTUuOC00MC45IDk1LjgtOTMuNSAwLTUxLjYtNDItOTMuNS05My43LTkzLjVzLTkzLjcgNDItOTMuNyA5My41bDAgMS4yLTU5LjIgODUuN2MtMTUuNS0uOS0zMC43IDMuNC00My41IDEyLjFMOCAyMzYuMUMxOC4yIDEwOC40IDEyNS4xIDggMjU1LjYgOCAzOTIuOCA4IDUwNCAxMTkgNTA0IDI1NnpNMTYzLjcgMzg0LjNsLTMwLjUtMTIuNmM1LjYgMTEuNiAxNS4zIDIwLjggMjcuMiAyNS44IDI2LjkgMTEuMiA1Ny44LTEuNiA2OS0yOC40IDUuNC0xMyA1LjUtMjcuMyAuMS00MC4zUzIxNCAzMDUuNiAyMDEgMzAwLjJjLTEyLjktNS40LTI2LjctNS4yLTM4LjktLjZsMzEuNSAxM2MxOS44IDguMiAyOS4yIDMwLjkgMjAuOSA1MC43LTguMyAxOS45LTMxIDI5LjItNTAuOCAyMXpNMzM3LjUgMTI5LjhhNjIuMyA2Mi4zIDAgMSAxIDAgMTI0LjYgNjIuMyA2Mi4zIDAgMSAxIDAtMTI0LjZ6bS4xIDEwOWE0Ni44IDQ2LjggMCAxIDAgMC05My42IDQ2LjggNDYuOCAwIDEgMCAwIDkzLjZ6Il19LFExZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzbmFwY2hhdCIsaWNvbjpbNTEyLDUxMixbNjIxMjQsInNuYXBjaGF0LWdob3N0Il0sImYyYWIiLCJNNDk3LjEgMzY2LjZjLTMuNC05LjItOS44LTE0LjEtMTcuMS0xOC4yLTEuNC0uOC0yLjYtMS41LTMuNy0xLjktMi4yLTEuMS00LjQtMi4yLTYuNi0zLjQtMjIuOC0xMi4xLTQwLjYtMjcuMy01My00NS40LTMuNS01LjEtNi42LTEwLjUtOS4xLTE2LjEtMS4xLTMtMS00LjctLjItNi4zIC44LTEuMiAxLjctMi4yIDIuOS0zIDMuOS0yLjYgOC01LjIgMTAuNy03IDQuOS0zLjIgOC44LTUuNyAxMS4yLTcuNCA5LjQtNi41IDE1LjktMTMuNSAyMC0yMS4zIDIuOS01LjQgNC41LTExLjMgNC45LTE3LjRzLS42LTEyLjItMi44LTE3LjhjLTYuMi0xNi4zLTIxLjYtMjYuNC00MC4zLTI2LjQtMy45IDAtNy45IC40LTExLjcgMS4yLTEgLjItMi4xIC41LTMuMSAuNyAuMi0xMS4yLS4xLTIyLjktMS4xLTM0LjUtMy41LTQwLjgtMTcuOC02Mi4xLTMyLjctNzkuMi05LjUtMTAuNy0yMC43LTE5LjctMzMuMi0yNi43LTIyLjYtMTIuOS00OC4yLTE5LjQtNzYuMS0xOS40cy01My40IDYuNS03NiAxOS40Yy0xMi41IDctMjMuNyAxNi4xLTMzLjMgMjYuOC0xNC45IDE3LTI5LjIgMzguNC0zMi43IDc5LjItMSAxMS42LTEuMiAyMy40LTEuMSAzNC41LTEtLjMtMi0uNS0zLjEtLjctMy45LS44LTcuOC0xLjItMTEuNy0xLjItMTguNyAwLTM0LjEgMTAuMS00MC4zIDI2LjQtMi4yIDUuNy0zLjIgMTEuOC0yLjggMTcuOHMyIDEyIDQuOSAxNy40YzQuMSA3LjggMTAuNyAxNC43IDIwIDIxLjMgMi41IDEuNyA2LjQgNC4yIDExLjIgNy40IDIuNiAxLjcgNi41IDQuMiAxMC4zIDYuNyAxLjMgLjkgMi40IDIgMy4zIDMuMyAuOCAxLjYgLjggMy40LS40IDYuNi0yLjUgNS41LTUuNSAxMC44LTguOSAxNS44LTEyLjEgMTcuNy0yOS40IDMyLjYtNTEuNCA0NC42LTExLjcgNi4yLTIzLjkgMTAuMy0yOSAyNC4zLTMuOSAxMC41LTEuMyAyMi41IDguNSAzMi42IDMuNiAzLjggNy44IDYuOSAxMi40IDkuNCA5LjYgNS4zIDE5LjggOS4zIDMwLjMgMTIuMSAyLjIgLjYgNC4zIDEuNSA2LjEgMi43IDMuNiAzLjEgMy4xIDcuOSA3LjggMTQuOCAyLjQgMy42IDUuNCA2LjcgOSA5LjEgMTAgNi45IDIxLjMgNy40IDMzLjIgNy44IDEwLjggLjQgMjMgLjkgMzYuOSA1LjUgNS44IDEuOSAxMS44IDUuNiAxOC43IDkuOSAxNi43IDEwLjMgMzkuNiAyNC4zIDc3LjggMjQuM3M2MS4zLTE0LjEgNzguMS0yNC40YzYuOS00LjIgMTIuOS03LjkgMTguNS05LjggMTMuOS00LjYgMjYuMi01LjEgMzYuOS01LjUgMTEuOS0uNSAyMy4yLS45IDMzLjItNy44IDQuMi0yLjkgNy43LTYuNyAxMC4yLTExLjIgMy40LTUuOCAzLjQtOS45IDYuNi0xMi44IDEuOC0xLjIgMy43LTIuMSA1LjgtMi42IDEwLjctMi44IDIxLTYuOSAzMC44LTEyLjIgNC45LTIuNiA5LjMtNi4xIDEzLTEwLjJsLjEtLjJjOS4yLTkuOSAxMS41LTIxLjUgNy44LTMxLjh6bS0zNCAxOC4zYy0yMC43IDExLjUtMzQuNSAxMC4yLTQ1LjMgMTcuMS05LjEgNS45LTMuNyAxOC41LTEwLjMgMjMuMS04LjEgNS42LTMyLjItLjQtNjMuMiA5LjktMjUuNiA4LjUtNDIgMzIuOC04OCAzMi44cy02Mi0yNC4zLTg4LjEtMzIuOWMtMzEtMTAuMy01NS4xLTQuMi02My4yLTkuOS02LjYtNC42LTEuMi0xNy4yLTEwLjMtMjMuMS0xMC43LTYuOS0yNC41LTUuNy00NS4zLTE3LjEtMTMuMi03LjMtNS43LTExLjgtMS4zLTEzLjkgNzUuMS0zNi40IDg3LjEtOTIuNiA4Ny43LTk2LjcgLjYtNSAxLjQtOS00LjItMTQuMS01LjQtNS0yOS4yLTE5LjctMzUuOC0yNC4zLTEwLjktNy42LTE1LjctMTUuMy0xMi4yLTI0LjYgMi41LTYuNSA4LjUtOC45IDE0LjktOC45IDIgMCA0IC4yIDYgLjcgMTIgMi42IDIzLjcgOC42IDMwLjQgMTAuMiAuOCAuMiAxLjYgLjMgMi41IC4zIDMuNiAwIDQuOS0xLjggNC42LTUuOS0uOC0xMy4xLTIuNi0zOC43LS42LTYyLjYgMi44LTMyLjkgMTMuNC00OS4yIDI2LTYzLjYgNi4xLTYuOSAzNC41LTM3IDg4LjktMzdTMzM5IDc0LjIgMzQ1IDgxLjFjMTIuNiAxNC40IDIzLjIgMzAuNyAyNiA2My42IDIuMSAyMy45IC4zIDQ5LjUtLjYgNjIuNi0uMyA0LjMgMSA1LjkgNC42IDUuOSAuOCAwIDEuNy0uMSAyLjUtLjMgNi43LTEuNiAxOC40LTcuNiAzMC40LTEwLjIgMi0uNCA0LS43IDYtLjcgNi40IDAgMTIuNCAyLjUgMTQuOSA4LjkgMy41IDkuNC0xLjIgMTctMTIuMiAyNC42LTYuNiA0LjYtMzAuNCAxOS4zLTM1LjggMjQuMy01LjYgNS4xLTQuOCA5LjEtNC4yIDE0LjIgLjUgNC4yIDEyLjUgNjAuNCA4Ny43IDk2LjcgNC40IDIuMiAxMS45IDYuNy0xLjMgMTQuMXoiXX0sczB0PVExZSxuMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ2FsYWN0aWMtc2VuYXRlIixpY29uOls1MTIsNTEyLFtdLCJmNTBkIiwiTTI0OS45IDMzLjVsMCAyNi4xYy0xMy42IDIwLjYtMjMuOSAxMDguNi0yNC41IDIxNS4zIDExLjctMTUuNiAxOS4xLTMzLjMgMTkuMS00OC4ybDAtMTYuOWMwLTUuMyAuOC0xMC41IDIuMi0xNS42IC42LTIuMSAxLjQtNC4xIDIuNi01LjhzMy40LTMuOCA2LjctMy44IDUuNCAyLjEgNi43IDMuOGMxLjIgMS44IDIgMy43IDIuNiA1LjggMS40IDUuMSAyLjIgMTAuMyAyLjIgMTUuNmwwIDE2LjljMCAxNC45IDcuNCAzMi42IDE5LjEgNDguMi0uNi0xMDYuOC0xMC45LTE5NC43LTI0LjUtMjE1LjNsMC0yNi4xLTEyLjMgMHpNMjIzLjUgMTgxLjNjLTkuNSAyLjEtMTguNyA1LjItMjcuNSA5LjEgOC45IDE2LjEgOS44IDMyLjYgMS43IDM3LjMtOCA0LjYtMjEuOC00LjItMzEuNC0xOS44LTExLjYgOC44LTIxLjkgMTkuMy0zMC42IDMxLjEgMTQuNyA5LjYgMjIuOSAyMi45IDE4LjMgMzAuNy00LjUgNy43LTIwIDcuMS0zNS41LTEtNS44IDEzLjItOS43IDI3LjUtMTEuNiA0Mi40IDkuNyAuMiAxOC43IDIuNCAyNi4yIDYgMTcuOC0uMyAzMi44LTIgNDAuNS00LjIgNS42LTI2LjQgMjMtNDguMiA0Ni4zLTU5LjUgLjctMjUuNiAxLjktNDkuNyAzLjUtNzIuMXptNjUgMGMxLjYgMjIuNCAyLjcgNDYuNSAzLjUgNzIuMSAyMy4zIDExLjMgNDAuOCAzMy4yIDQ2LjMgNTkuNSA3LjcgMi4zIDIyLjcgMy45IDQwLjUgNC4yIDcuNS0zLjcgMTYuNS01LjggMjYuMi02LTEuOS0xNC45LTUuOS0yOS4yLTExLjctNDIuNC0xNS40IDguMS0zMC45IDguNy0zNS41IDEtNC42LTcuNyAzLjYtMjEuMSAxOC4zLTMwLjctOC43LTExLjgtMTktMjIuMy0zMC42LTMxLjEtOS41IDE1LjYtMjMuNCAyNC40LTMxLjQgMTkuOC04LjEtNC42LTcuMi0yMS4yIDEuNy0zNy4zLTguOC0zLjktMTgtNy0yNy40LTkuMXpNMjU2IDE4OS45Yy0zLjIgMC01LjkgOC44LTYuMSAxOS45bDAgMCAwIDE2LjljMCA0MS40LTQ5IDk1LTkzLjUgOTUtNTIgMC0xMjIuOC0xLjQtMTU2LjQgMjkuMmwwIDIuNWM5LjQgMTcuMSAyMC42IDMzLjIgMzMuMiA0OCAxMi41LTIxLjEgNTEuNi00MSAxMDgtNDEuNCA0NS43IDEgNzkgMjAuMyA5MC44IDQwLjkgMCAwIDAgMCAwIC4xIDcuNyAyLjEgMTUuOCAzLjIgMjQgMy4yIDguMiAwIDE2LjQtMS4xIDI0LTMuMiAwIDAgMCAwIDAtLjEgMTEuNy0yMC41IDQ1LjEtMzkuOCA5MC44LTQwLjkgNTYuNCAuNCA5NS41IDIwLjMgMTA4IDQxLjQgMTIuNi0xNC44IDIzLjgtMzAuOSAzMy4yLTQ4bDAtMi41Yy0zMy42LTMwLjYtMTA0LjQtMjkuMi0xNTYuNC0yOS4yLTQ0LjUgMC05My41LTUzLjYtOTMuNS05NWwwLTE2LjktLjEgMGMtLjItMTEuMS0yLjktMTkuOS02LjEtMTkuOXptMCAxNzcuOWE0MC42IDQwLjYgMCAxIDEgMC04MS4zIDQwLjYgNDAuNiAwIDEgMSAwIDgxLjN6bTAtNzMuNmEzMyAzMyAwIDEgMCAwIDY1LjkgMzMgMzMgMCAxIDAgMC02NS45em0wIDU5LjhhMjYuOCAyNi44IDAgMSAxIDAtNTMuNiAyNi44IDI2LjggMCAxIDEgMCA1My42em0tMTE0LjggMTNjLTEwLjIgLjEtMjEuNiAuNC0zMC41IDEuNyAuNCA0LjQgMS41IDE4LjYgNy4xIDI5LjggOS4xLTIuNiAxOC40LTMuOSAyNy42LTMuOSA0MS4zIC45IDcxLjUgMzQuNCA3OC4zIDc0LjVsLjEgNC43YzEwLjQgMS45IDIxLjIgMi45IDMyLjIgMi45IDExIDAgMjEuOC0xIDMyLjItMi45bC4xLTQuN2M2LjgtNDAuMSAzNy03My41IDc4LjMtNzQuNSA5LjMgMCAxOC41IDEuMyAyNy42IDMuOSA1LjYtMTEuMSA2LjctMjUuMyA3LjEtMjkuOC04LjktMS4zLTIwLjMtMS42LTMwLjUtMS43LTE4LjggLjQtMzUuMiA0LjItNDguNiA5LjctMTIuNSAxNi0yOS4yIDMwLTQ5LjYgMzMuMS0uMSAwLS4yIDAtLjMgMCAwIDAtLjEgMC0uMiAuMS01LjIgMS4xLTEwLjYgMS42LTE2LjIgMS42LTUuNSAwLTEwLjktLjUtMTYuMi0xLjYtLjEgMC0uMSAwLS4yLS4xLS4xIDAtLjIgMC0uMyAwLTIwLjQtMy0zNy0xNy00OS42LTMzLjEtMTMuNC01LjUtMjkuOS05LjItNDguNi05Ljd6Il19LGwwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaG9lbml4LWZyYW1ld29yayIsaWNvbjpbNjQwLDUxMixbXSwiZjNkYyIsIk0yMTIuOSAzNDQuM2MzLjgtLjEgMjIuOC0xLjQgMjUuNi0yLjItMi40LTIuNi00My42LTEtNjgtNDkuNi00LjMtOC42LTcuNS0xNy42LTYuNC0yNy42IDIuOS0yNS41IDMyLjktMzAgNTItMTguNSAzNiAyMS42IDYzLjMgOTEuMyAxMTMuNyA5Ny41IDM3IDQuNSA4NC42LTE3IDEwOC4yLTQ1LjQtLjYtLjEtLjgtLjItMS0uMS0uNCAuMS0uOCAuMi0xLjEgLjMtMzMuMyAxMi4xLTk0LjMgOS43LTEzNC43LTE0LjgtMzcuNi0yMi44LTUzLjEtNTguNy01MS44LTc0LjYgMS44LTIxLjMgMjIuOS0yMy4yIDM1LjktMTkuNiAxNC40IDMuOSAyNC40IDE3LjYgMzguOSAyNy40IDE1LjYgMTAuNCAzMi45IDEzLjcgNTEuMyAxMC4zIDE0LjktMi43IDM0LjQtMTIuMyAzNi41LTE0LjUtMS4xLS4xLTEuOC0uMS0yLjUtLjItNi4yLS42LTEyLjQtLjgtMTguNS0xLjctMTExLjItMTYuNS0xMjguOS0xNjMuNi0yNTIuNS0xNzMuMS00NC4zLTMuNC05OS40IDguMS0xMzYuMyAzNS0uOCAuNi0xLjUgMS4yLTIuMiAxLjggLjEgLjIgLjEgLjMgLjIgLjUgLjggMCAxLjYtLjEgMi40LS4yIDYuMy0xIDEyLjUtLjggMTguNyAuMyAyMy44IDQuMyA0Ny43IDIzLjEgNTUuOSA3Ni41IDUuMyAzNC4zLS43IDUwLjggOCA4Ni4xIDE5IDc3LjEgOTEgMTA3LjYgMTI3LjcgMTA2LjR6TTc1LjMgNjQuOWMtLjktMS0uOS0xLjItMS4zLTIgMTIuMS0yLjYgMjQuMi00LjEgMzYuNi00LjgtMS4xIDE0LjctMjIuMiAyMS4zLTM1LjMgNi44ek0yNzIuMiA0MTUuNGMtNDIuOCAxLjItOTItMjYuNy0xMjMuNS02MS40LTQuNi01LTE2LjgtMjAuMi0xOC42LTIzLjRsLjQtLjRjNi42IDQuMSAyNS43IDE4LjYgNTQuOCAyNyAyNC4yIDcgNDguMSA2LjMgNzEuNi0zLjMgMjIuNy05LjMgNDEtLjUgNDMuMSAyLjktMTguNSAzLjgtMjAuMSA0LjQtMjQgNy45LTUuMSA0LjQtNC42IDExLjcgNyAxNy4yIDI2LjIgMTIuNCA2My0yLjggOTcuMiAyNS40IDIuNCAyIDguMSA3LjggMTAuMSAxMC43LS4xIC4yLS4zIC4zLS40IC41LTQuOC0xLjUtMTYuNC03LjUtNDAuMi05LjMtMjQuNy0yLTQ2LjMgNS4zLTc3LjUgNi4yek00NDcgMTYzLjRjMTYuNC01LjIgNDEuMy0xMy40IDY2LjUtMy4zIDE2LjEgNi41IDI2LjIgMTguNyAzMi4xIDM0LjYgMy41IDkuNCA1LjEgMTkuNyA1LjEgMjguNy0uMiAwLS40IDAtLjYgLjEtLjItLjQtLjQtLjktLjUtMS4zLTUtMjItMjkuOS00My44LTY3LjYtMjkuOS01MC4yIDE4LjYtMTMwLjQgOS43LTE3Ni45LTQ4LS43LS45LTIuNC0xLjctMS4zLTMuMiAuMS0uMiAyLjEgLjYgMyAxLjMgMTguMSAxMy40IDM4LjMgMjEuOSA2MC4zIDI2LjIgMzAuNSA2LjEgNTQuNiAyLjkgNzkuOS01LjJ6TTU0OS43IDI4MC45Yy0zMi40IC4yLTMzLjggNTAuMS0xMDMuNiA2NC40LTE4LjIgMy43LTM4LjcgNC42LTQ0LjkgNC4ybDAtLjRjMi44LTEuNSAxNC43LTIuNiAyOS43LTE2LjYgNy45LTcuMyAxNS4zLTE1LjEgMjIuOC0yMi45IDE5LjUtMjAuMiA0MS40LTQyLjIgODEuOS0zOSAyMy4xIDEuOCAyOS4zIDguMiAzNi4xIDEyLjcgLjMgLjIgLjQgLjUgLjcgLjktLjUgMC0uNyAuMS0uOSAwLTctMi43LTE0LjMtMy4zLTIxLjgtMy4zem0tMTIuMy0yNC4xYy0uMSAuMi0uMSAuNC0uMiAuNi0yOC45LTQuNC00OC03LjktNjguNSA0LTE3IDkuOS0zMS40IDIwLjUtNjIgMjQuNC0yNy4xIDMuNC00NS4xIDIuNC02Ni4xLTgtLjMtLjItLjYtLjQtMS0uNiAwLS4yIC4xLS4zIC4xLS41IDI0LjkgMy44IDM2LjQgNS4xIDU1LjUtNS44IDIyLjMtMTIuOSA0MC4xLTI2LjYgNzEuMy0zMSAyOS42LTQuMSA1MS4zIDIuNSA3MC45IDE2Ljl6TTI2OC42IDk3LjNjLS42LS42LTEuMS0xLjItMi4xLTIuMyA3LjYgMCAyOS43LTEuMiA1My40IDguNCAxOS43IDggMzIuMiAyMSA1MC4yIDMyLjkgMTEuMSA3LjMgMjMuNCA5LjMgMzYuNCA4LjEgNC4zLS40IDguNS0xLjIgMTIuOC0xLjcgLjQtLjEgLjkgMCAxLjUgLjMtLjYgLjQtMS4yIC45LTEuOCAxLjItOC4xIDQtMTYuNyA2LjMtMjUuNiA3LjEtMjYuMSAyLjYtNTAuMy0zLjctNzMuNC0xNS40LTE5LjMtOS45LTM2LjQtMjIuOS01MS40LTM4LjZ6TTY0MCAzMzUuN2MtMy41IDMuMS0yMi43IDExLjYtNDIuNyA1LjMtMTIuMy0zLjktMTkuNS0xNC45LTMxLjYtMjQuMS0xMC03LjYtMjAuOS03LjktMjguMS04LjQgLjYtLjggLjktMS4yIDEuMi0xLjQgMTQuOC05LjIgMzAuNS0xMi4yIDQ3LjMtNi41IDEyLjUgNC4yIDE5LjIgMTMuNSAzMC40IDI0LjIgMTAuOCAxMC40IDIxIDkuOSAyMy4xIDEwLjUgLjEtLjEgLjIgMCAuNCAuNHptLTIxMi41IDEzN2MyLjIgMS4yIDEuNiAxLjUgMS41IDItMTguNS0xLjQtMzMuOS03LjYtNDYuOC0yMi4yLTIxLjgtMjQuNy00MS43LTI3LjktNDguNi0yOS43IC41LS4yIC44LS40IDEuMS0uNCAxMy4xIC4xIDI2LjEgLjcgMzguOSAzLjkgMjUuMyA2LjQgMzUgMjUuNCA0MS42IDM1LjMgMy4yIDQuOCA3LjMgOC4zIDEyLjMgMTEuMXoiXX0sYzB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdpdCIsaWNvbjpbNTEyLDUxMixbXSwiZjFkMyIsIk0yMTYuMyAxNTguNGwtNzkuMyAwYy00MC0xMC41LTEzMC41LTcuOC0xMzAuNSA3NC44IDAgMzAuMSAxNSA1MS4yIDM1IDYxLTI1LjEgMjMtMzcgMzMuOC0zNyA0OS4yIDAgMTEgNC41IDIxLjEgMTcuOSAyNi44LTE0LjMgMTMuNC0yMi40IDIzLjEtMjIuNCA0MS40IDAgMzIuMSAyOCA1MC44IDEwMS42IDUwLjggNzAuOCAwIDExMS44LTI2LjQgMTExLjgtNzMuMiAwLTU4LjctNDUuMi01Ni41LTE1MS42LTYzbDEzLjQtMjEuNmMyNy4zIDcuNiAxMTguNyAxMCAxMTguNy02Ny45IDAtMTguNy03LjctMzEuNy0xNS00MS4xbDM3LjQtMi44IDAtMzQuNXpNMTUyLjkgNDAwLjNjMCAzMi4xLTEwNC45IDMyLjEtMTA0LjkgMi40IDAtOC4xIDUuMy0xNSAxMC42LTIxLjUgNzcuNyA1LjMgOTQuMyAzLjQgOTQuMyAxOS4xek0xMDIuMSAyNjUuN2MtNTIuOCAwLTUwLjUtNzEuMiAxLjItNzEuMiA0OS41IDAgNTAuOCA3MS4yLTEuMiA3MS4yek0yMzUuNCAzNjYuMmwwLTMyLjFjMjYuNy0zLjcgMjcuMi0yIDI3LjItMTFsMC0xMTkuNWMwLTguNS0yLjEtNy40LTI3LjItMTYuM2w0LjUtMzIuOSA4NC4yIDAgMCAxNjguN2MwIDYuNSAuNCA3LjMgNi41IDguMWwyMC43IDIuOCAwIDMyLjEtMTE1LjkgMHptNTIuNS0yNDQuM2MtMjMuMiAwLTM2LjYtMTMuNC0zNi42LTM2LjZzMTMuNC0zNS44IDM2LjYtMzUuOGMyMy42IDAgMzcgMTIuNiAzNyAzNS44cy0xMy40IDM2LjYtMzcgMzYuNnpNNTEyIDM1MC41Yy0xNy41IDguNS00My4xIDE2LjMtNjYuMyAxNi4zLTQ4LjQgMC02Ni43LTE5LjUtNjYuNy02NS41bDAtMTA2LjVjMC01LjQgMS00LjEtMzEuNy00LjFsMC0zNi4yYzM1LjgtNC4xIDUwLTIyIDU0LjUtNjYuM2wzOC42IDBjMCA2NS44LTEuMyA2MS44IDMuMyA2MS44bDU3LjMgMCAwIDQwLjYtNjAuNiAwIDAgOTcuMWMwIDYuOS00LjkgNTEuNCA2MC42IDI2LjhsMTEgMzUuOHoiXX0sZDB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im9wdGluLW1vbnN0ZXIiLGljb246WzU3Niw1MTIsW10sImYyM2MiLCJNNTcyLjggNDIxLjRjNS42LTkuNSA0LjctMTUuMi01LjQtMTEuNi0zLTQuOS03LTkuNS0xMS4xLTEzLjggMi45LTkuNy0uNy0xNC4yLTEwLjgtOS4yLTQuNi0zLjItMTAuMy02LjUtMTUuOS05LjIgMC0xNS4xLTExLjYtMTEuNi0xNy42LTUuNy0xMC40LTEuNS0xOC43LS4zLTI2LjggNS43IC4zLTYuNSAuMy0xMyAuMy0xOS43IDEyLjYgMCA0MC4yLTExIDQ1LjktMzYuMiAxLjQtNi44IDEuNi0xMy44LS4zLTIxLjktMy0xMy41LTE0LjMtMjEuMy0yNS4xLTI1LjctLjgtNS45LTcuNi0xNC4zLTE0LjktMTUuOXMtMTIuNCA0LjktMTQuMSAxMC4zYy04LjUgMC0xOS4yIDIuOC0yMS4xIDguNC01LjQtLjUtMTEuMS0xLjQtMTYuOC0xLjkgMi43LTEuOSA1LjQtMy41IDguNC00LjYgNS40LTkuMiAxNC42LTExLjQgMjUuNy0xMS42bDAtMi44YzE5LjUtLjUgNDMtNS45IDUzLjgtMTguMSAxMi43LTEzLjggMTQuNi0zNy4zIDEyLjQtNTUuMS0yLjQtMTcuMy05LjctMzcuNi0yNC42LTQ4LjEtOC40LTUuOS0yMS42LS44LTIyLjcgOS41LTIuMiAxOS42IDEuMiAzMC0zOC42IDI1LjEtMTAuMy0yMy44LTI0LjYtNDQuNi00Mi43LTYwLTY5LjYtNTkuNy0xNjcuNy01My44LTI0NC4yLTM3LjYgMTkuNyA0LjYgNDEuMSA4LjYgNTkuNyAxNi41LTI2LjIgMi40LTUyLjcgMTEuMy03Ni4yIDIzLjItMzIuOCAxNy00NCAyOS45LTU2LjcgNDIuNCAxNC45LTIuMiAyOC45LTUuMSA0My44LTMuOC05LjcgNS40LTE4LjQgMTIuMi0yNi41IDIwLTI1LjggLjktMjMuOC01LjMtMjYuMi0yNS45LTEuMS0xMC41LTE0LjMtMTUuNC0yMi43LTkuNy0yOC4xIDE5LjktMzMuNSA3OS45LTEyLjIgMTAzLjUgMTAuOCAxMi4yIDM1LjEgMTcuMyA1NC45IDE3LjgtLjMgMS4xLS4zIDEuOS0uMyAyLjcgMTAuOCAuNSAxOS41IDIuNyAyNC42IDExLjYgMyAxLjEgNS43IDIuNyA4LjEgNC42LTUuNCAuNS0xMS4xIDEuNC0xNi41IDEuOS0zLjMtNi42LTEzLjctOC4xLTIxLjEtOC4xLTEuNi01LjctNi41LTEyLjItMTQuMS0xMC4zLTYuOCAxLjktMTQuMSAxMC0xNC45IDE1LjktMjIuNSA5LjUtMzAuMSAyNi44LTI1LjEgNDcuNiA1LjMgMjQuOCAzMyAzNi4yIDQ1LjkgMzYuMmwwIDE5LjdjLTYuNi01LTE0LjMtNy41LTI2LjgtNS43LTUuNS01LjUtMTcuMy0xMC4xLTE3LjMgNS43LTUuOSAyLjctMTEuNCA1LjktMTUuOSA5LjItOS44LTQuOS0xMy42LTEuNy0xMS4xIDkuMi00LjEgNC4zLTcuOCA4LjYtMTEuMSAxMy44LTEwLjItMy43LTExIDIuMi01LjQgMTEuNi0xLjEgMy41LTEuNiA3LTEuOSAxMC44LS41IDMxLjYgNDQuNiA2NCA3My41IDY1LjEgMTcuMyAuNSAzNC42LTguNCA0My0yMy41IDExMy4yIDQuOSAyMjYuNyA0LjEgMzQwLjIgMCA4LjEgMTUuMSAyNS40IDI0LjMgNDIuNyAyMy41IDI5LjItMS4xIDc0LjMtMzMuNSA3My41LTY1LjEgLjItMy43LS43LTcuMi0xLjctMTAuN3pNNDk5IDE2Ny40YzEuMS0zIDIuNC04LjQgMi40LTE0LjYgMC01LjkgNi44LTguMSAxNC4xLS44IDExLjEgMTEuNiAxNC45IDQwLjUgMTMuOCA1MS4xLTQuMS0xMy42LTEzLTI5LTMwLjMtMzUuN3ptLTQuNiA2LjdjMTkuNSA2LjIgMjguNiAyNy42IDI5LjcgNDguOS0xLjEgMi43LTMgNS40LTQuOSA3LjYtNS43IDUuOS0xNS40IDEwLTI2LjIgMTIuMiA0LjMtMjEuMyAuMy00Ny4zLTEyLjctNjMgNC45LS44IDEwLjktMi40IDE0LjEtNS43em0tMjQuMSA2LjhjMTMuOCAxMS45IDIwIDM5LjIgMTQuMSA2My41LTQuMSAuNS04LjEgLjgtMTEuNiAuOC0xLjktMjEuOS02LjgtNDQtMTQuMy02NC42IDMuNyAuMyA4LjEgLjMgMTEuOCAuM3pNNDcuNyAyMDNjLTEuMS0xMC41IDIuNC0zOS41IDEzLjgtNTEuMSA3LTcuMyAxNC4xLTUuMSAxNC4xIC44IDAgNi4yIDEuNCAxMS42IDIuNCAxNC42LTE3LjMgNi44LTI2LjIgMjIuMi0zMC4zIDM1Ljd6bTkuNyAyNy42Yy0xLjktMi4yLTMuNS00LjktNC45LTcuNiAxLjQtMjEuMyAxMC4zLTQyLjcgMjkuNy00OC45IDMuMiAzLjIgOS4yIDQuOSAxNC4xIDUuNy0xMyAxNS43LTE3IDQxLjYtMTIuNyA2My0xMC44LTIuMi0yMC41LTYtMjYuMi0xMi4yem00Ny45IDE0LjZjLTQuMSAwLTguMS0uMy0xMi43LS44LTQuNi0xOC42LTEuOS0zOC45IDUuNC01M2wwIC4zIDEyLjItNS4xYzQuOS0xLjkgOS43LTMuOCAxNC45LTQuOS0xMC43IDE5LjctMTcuNCA0MS4zLTE5LjggNjMuNXptMTg0LTEwLjVhNzYuMSA3Ni4xIDAgMSAxIDAtMTUyLjIgNzYuMSA3Ni4xIDAgMSAxIDAgMTUyLjJ6bTExNS42IDIyLjFjLS4zIDE3LjgtNyA0OC45LTIzIDU3LTEzLjIgNi42LTYuNS03LjUtMTYuNS01OC4xIDEzLjMgLjMgMjYuNiAuMyAzOS41IDEuMXptLTU0LTEuNmMuOCA0LjkgMy44IDQwLjMtMS42IDQxLjktMTEuNiAzLjUtNDAgNC4zLTUxLjEtMS4xLTQuMS0zLTQuNi0zNS45LTQuMy00MS4xbDAgLjNjMTguOS0uMyAzOC4xLS4zIDU3IDB6TTI3OC41IDMwOWMtMTMgMy41LTQxLjYgNC4xLTU0LjYtMS42LTYuNS0yLjctMy44LTQyLjQtMS45LTUxLjYgMTkuMi0uNSAzOC40LS41IDU3LjgtLjhsMCAuM2MxLjEgOC4zIDMuMyA1MS4yLTEuMyA1My43ek0xNzIgMjU3LjljMTIuMi0uOCAyNC42LTEuNCAzNi44LTEuNi0yLjQgMTUuNC0zIDQzLjUtNC45IDUyLjItMS4xIDYuOC00LjMgNi44LTkuNyA0LjMtMjEuOS05LjgtMjcuNi0zNS4yLTIyLjItNTQuOXptLTM1LjQgMzEuM2M3LjgtMS4xIDE1LjctMS45IDIzLjUtMi43IDEuNiA2LjIgMy44IDExLjkgNyAxNy42IDEwIDE3IDQ0IDM1LjcgNDUuMSA3IDYuMiAxNC45IDQwLjggMTIuMiA1NC45IDEwLjggMTUuNy0xLjQgMjMuOC0xLjQgMjYuOC0xNC4zIDEyLjQgNC4zIDMwLjggNC4xIDQ0IDMgMTEuMy0uOCAyMC44LS41IDI0LjYtOC45IDEuMSA1LjEgMS45IDExLjYgNC42IDE2LjggMTAuOCAyMS4zIDM3LjMgMS40IDQ2LjgtMzEuNiA4LjYgLjggMTcuNiAxLjkgMjYuNSAyLjctLjQgMS4zLTMuOCA3LjMgNy4zIDExLjYtNDcuNiA0Ny05NS43IDg3LjgtMTYzLjIgMTA3LTYzLjItMjAuOC0xMTIuMS01OS41LTE1NS45LTEwNi41IDkuNi0zLjQgMTAuNC04LjggOC0xMi41ek0xMTUgNDYxLjdjLTMuOCAxNy44LTIxLjkgMjkuNy0zOS43IDI4LjktMTkuMi0uOC00Ni41LTE3LTU5LjItMzYuNS0yLjctMzEuMSA0My44LTYxLjMgNjYuMi01NC42IDE0LjkgNC4zIDI3LjggMzAuOCAzMy41IDU0IDAgMy0uMyA1LjctLjggOC4yem0tOC43LTY2Yy0uNS0xMy41LS41LTI3LS4zLTQwLjVsLjMgMGMyLjctMS42IDUuNy0zLjggNy44LTYuNSA2LjUtMS42IDEzLTUuMSAxNS4xLTkuMiAzLjMtNy4xLTctNy41LTUuNC0xMi40IDIuNy0xLjEgNS43LTIuMiA3LjgtMy41IDI5LjIgMjkuMiA1OC42IDU2LjUgOTcuMyA3Ny0zNi44IDExLjMtNzIuNCAyNy42LTEwNS45IDQ3LTEuMi0xOC42LTcuNy0zNS45LTE2LjctNTEuOXptMzM3LjYgNjQuNmMtMTAzIDMuNS0yMDYuMiA0LjEtMzA5LjQgMCAwIC4zIDAgLjMtLjMgLjNsMC0uMyAuMyAwYzM1LjEtMjEuNiA3Mi4yLTM5LjIgMTEyLjQtNTAuOCAxMS42IDUuMSAyMyA5LjUgMzQuOSAxMy4yIDIuMiAuOCAyLjIgLjggNC4zIDAgMTQuMy00LjEgMjguNC05LjIgNDIuMi0xNS40IDQxLjUgMTEuNyA3OC44IDMxLjcgMTE1LjYgNTN6bTEwLjUtMTIuNGMtMzUuOS0xOS41LTczLTM1LjktMTExLjktNDcuNiAzOC4xLTIwIDcxLjktNDcuMyAxMDMuNS03Ni43IDIuMiAxLjQgNC42IDIuNCA3LjYgMy4yIDAgLjggLjMgMS45IC41IDIuNC00LjYgMi43LTcuOCA2LjItNS45IDEwLjMgMi4yIDMuOCA4LjYgNy42IDE1LjEgOC45IDIuNCAyLjcgNS4xIDUuMSA4LjEgNi44IDAgMTMuOC0uMyAyNy42LS44IDQxLjNsLjMtLjNjLTkuMyAxNS45LTE1LjUgMzctMTYuNSA1MS43em0xMDUuOSA2LjJjLTEyLjcgMTkuNS00MCAzNS43LTU5LjIgMzYuNS0xOS4zIC45LTQwLjUtMTMuMi00MC41LTM3IDUuNy0yMy4yIDE4LjktNDkuNyAzMy41LTU0IDIyLjctNi45IDY5LjIgMjMuNCA2Ni4yIDU0LjV6TTM3My4xIDc1LjJjLTMuOC03Mi4xLTEwMC44LTc5LjctMTI2LTIzLjUgNDQuNi0yNC4zIDkwLjMtMTUuNyAxMjYgMjMuNXpNNzUgNDA3LjFjLTE1LjcgMS42LTQ5LjUgMjUuNC00OS41IDQzLjIgMCAxMS42IDE1LjcgMTkuNSAzMi4yIDE0LjkgMTIuMi0zLjIgMzEuMS0xNy42IDM1LjktMjcuMyA2LTExLjYtMy43LTMyLjctMTguNi0zMC44ek0yOTAuOSAyMzAuOWMyOC42IDAgNTEuOS0yMS42IDUxLjktNDguNCAwLTM2LjEtNDAuNS01OC4xLTcyLjItNDQuMyA5LjUgMyAxNi41IDExLjYgMTYuNSAyMS42IDAgMjMuMy0zMy4zIDMyLTQ2LjUgMTEuMy03LjMgMzQuMSAxOS40IDU5LjggNTAuMyA1OS44ek02OC4yIDQ3NC4xYy41IDYuNSAxMi4yIDEyLjcgMjEuNiA5LjUgNi44LTIuNyAxNC42LTEwLjUgMTcuMy0xNi4yIDMtNy0xLjEtMjAtOS43LTE4LjQtOC45IDEuNi0yOS43IDE2LjctMjkuMiAyNS4xem00MzMuMi02N2MtMTQuOS0xLjktMjQuNiAxOS4yLTE4LjkgMzAuOCA0LjkgOS43IDI0LjEgMjQuMSAzNi4yIDI3LjMgMTYuNSA0LjYgMzIuMi0zLjIgMzIuMi0xNC45IDAtMTcuOC0zMy44LTQxLjYtNDkuNS00My4yek00NzkgNDQ5Yy04LjQtMS42LTEyLjQgMTEuMy05LjUgMTguNCAyLjQgNS43IDEwLjMgMTMuNSAxNy4zIDE2LjIgOS4yIDMuMiAyMS4xLTMgMjEuMy05LjUgLjktOC40LTIwLjItMjMuNS0yOS4xLTI1LjF6Il19LGYwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJqZW5raW5zIixpY29uOls0NDgsNTEyLFtdLCJmM2I2IiwiTTQ1NS40IDQyNWMtMS40LTExLjItMTktMjMuMS0yOC4yLTMxLjktNS4xLTUtMjktMjMuMS0zMC40LTI5LjktMS40LTYuNiA5LjctMjEuNSAxMy4zLTI4LjkgNS4xLTEwLjcgOC44LTIzLjcgMTEuMy0zMi42IDE4LjgtNjYuMSAyMC43LTE1Ni45LTYuMi0yMTEuMi0xMC4yLTIwLjYtMzguNi00OS01Ni40LTYyLjUtNDItMzEuNy0xMTkuNi0zNS4zLTE3MC4xLTE2LjYtMTQuMSA1LjItMjcuOCA5LjgtNDAuMSAxNy4xLTMzLjEgMTkuNC02OC4zIDMyLjUtNzguMSA3MS42LTI0LjIgMTAuOC0zMS41IDQxLjgtMzAuMyA3Ny44IC4yIDcgNC4xIDE1LjggMi43IDIyLjQtLjcgMy4zLTUuMiA3LjYtNi4xIDkuOC0xMS42IDI3LjctMi4zIDY0IDExLjEgODMuNyA4LjEgMTEuOSAyMS41IDIyLjQgMzkuMiAyNS4yIC43IDEwLjYgMy4zIDE5LjcgOC4yIDMwLjQgMy4xIDYuOCAxNC43IDE5IDEwLjQgMjcuNy0yLjIgNC40LTIxIDEzLjgtMjcuMyAxNy42LTIxLjEgMTIuNS0zNi40IDIwLjMtNTUuOSAzNC4zLTEyLjYgOS0zMi4zIDEwLjItMjkuMiAzMS4xIDIuMSAxNC4xIDEwLjEgMzEuNiAxNC43IDQ1LjggLjcgMiAxLjQgNC4xIDIuMSA2bDQyMiAwYzQuOS0xNS4zIDkuNy0zMC45IDE0LjYtNDcuMiAzLjQtMTEuNCAxMC4yLTI3LjggOC43LTM5Ljd6TTE3NC4yIDMzLjdjMS44LS41IDMuNCAuNyA0LjkgMi40LS4yIDUuMi01LjQgNS4xLTguOSA2LjgtNS40IDYuNy0xMy40IDkuOC0yMCAxNy4yLTYuOCA3LjUtMTQuNCAyNy43LTIzLjQgMzAtNC41IDEuMS05LjctLjgtMTMuNi0uNS0xMC40IC43LTE3LjcgNi0yOC4zIDcuNSAxMy42LTI5LjkgNTYuMS01NCA4OS4zLTYzLjR6TTY5LjQgMTI3LjNjMTMuNS0xNC45IDMyLjEtMjQuMSA1NC44LTI1LjkgMTEuNyAyOS43LTguNCA2NS0uOSA5Ny42IDIuMyA5LjkgMTAuMiAyNS40LTIuNCAyNS43IC4zLTI4LjMtMzQuOC00Ni4zLTYxLjMtMjkuNi0xLjgtMjEuNS00LjktNTEuNyA5LjgtNjcuOHptMzYuNyAyMDAuMmMtMS00LjEtMi43LTEyLjktMi4zLTE1LjEgMS42LTguNyAxNy4xLTEyLjUgMTEtMjQuNy0xMS4zLS4xLTEzLjggMTAuMi0yNC4xIDExLjMtMjYuNyAyLjYtNDUuNi0zNS40LTQ0LjQtNTguNCAxLTE5LjUgMTcuNi0zOC4yIDQwLjEtMzUuOCAxNiAxLjggMjEuNCAxOS4yIDI0LjUgMzQuNyA5LjIgLjUgMjIuNS0uNCAyNi45LTcuNi0uNi0xNy41LTguOC0zMS42LTguMi00Ny43IDEtMzAuMyAxNy41LTU3LjYgNC44LTg3LjQgMTMuNi0zMC45IDUzLjUtNTUuMyA4My4xLTcwIDM2LjYtMTguMyA5NC45LTMuNyAxMjkuMyAxNS44IDE5LjcgMTEuMSAzNC40IDMyLjcgNDguMyA1MC43LTE5LjUtNS44LTM2LjEgNC4yLTMzLjEgMjAuMyAxNi4zLTE0LjkgNDQuMi0uMiA1Mi41IDE2LjQgNy45IDE1LjggNy44IDM5LjMgOSA2Mi44IDIuOSA1Ny0xMC40IDExNS45LTM5LjEgMTU3LjEtNy43IDExLTE0LjEgMjMtMjQuOSAzMC42LTI2IDE4LjItNjUuNCAzNC43LTk5LjIgMjMuNC00NC43LTE1LTY1LTQ0LjgtODkuNS03OC44IC43IDE4LjcgMTMuOCAzNC4xIDI2LjggNDguNCAxMS4zIDEyLjUgMjUgMjYuNiAzOS43IDMyLjQtMTIuMy0yLjktMzEuMS0zLjgtMzYuMiA3LjItMjguNi0xLjktNTUuMS00LjgtNjguNy0yNC4yLTEwLjYtMTUuNC0yMS40LTQxLjQtMjYuMy02MS40em0yMjIgMTI0LjFjNC4xLTMgMTEuMS0yLjkgMTcuNC0zLjYtNS40LTIuNy0xMy0zLjctMTkuMy0yLjItLjEtNC4yLTItNi44LTMuMi0xMC4yIDEwLjYtMy44IDM1LjUtMjguNSA0OS42LTIwLjMgNi43IDMuOSA5LjUgMjYuMiAxMC4xIDM3IC40IDktLjggMTgtNC41IDIyLjgtMTguOC0uNi0zNS44LTIuOC01MC43LTcgLjktNi4xLTEtMTIuMSAuNi0xNi41em0tMTcuMi0yMGMtMTYuOCAuOC0yNi0xLjItMzguMy0xMC44IC4yLS44IDEuNC0uNSAxLjUtMS40IDE4IDggNDAuOC0zLjMgNTktNC45LTcuOSA1LjEtMTQuNiAxMS42LTIyLjIgMTcuMXptLTEyLjEgMzMuMmMtMS42LTkuNC0zLjUtMTItMi44LTIwLjIgMjUtMTYuNiAyOS43IDI4LjYgMi44IDIwLjJ6TTE5NC4zIDQzOC42Yy0xMS42LS43LTQ4LjEtMTQtMzguNS0yMy43IDkuNCA2LjUgMjcuNSA0LjkgNDEuMyA3LjMgLjggNC40LTIuOCAxMC4yLTIuOCAxNi40ek0yNiA0OTcuMWMtNC4zLTEyLjctOS4yLTI1LjEtMTQuOC0zNi45IDMwLjgtMjMuOCA2NS4zLTQ4LjkgMTAyLjItNjMuNSAyLjgtMS4xIDIzLjIgMjUuNCAyNi4yIDI3LjYgMTYuNSAxMS43IDM3IDIxIDU2LjIgMzAuMiAxLjIgOC44IDMuOSAyMC4yIDguNyAzNS41IC43IDIuMyAxLjQgNC43IDIuMiA3LjJsLTE4MC43IDAgMC0uMXptMjQwLjYgNS43bC0uOCAwYy4zLS4yIC41LS40IC44LS41bDAgLjV6bTcuNS01LjdjMi4xLTEuNCA0LjMtMi44IDYuNC00LjMgMS4xIDEuNCAyLjIgMi44IDMuMiA0LjNsLTkuNiAwem0xNS4xLTI0LjdjLTEwLjggNy4zLTIwLjYgMTguMy0zMy4zIDI1LjItNiAzLjMtMjcgMTEuNy0zMy40IDEwLjItMy42LS44LTMuOS01LjMtNS40LTkuNS0zLjEtOS0xMC4xLTIzLjQtMTAuOC0zNy0uOC0xNy4yLTIuNS00NiAxNi00Mi40IDE0LjkgMi45IDMyLjMgOS43IDQzLjkgMTYuMSA3LjEgMy45IDExLjEgOC42IDIxLjkgOS41LS4xIDEuNC0uMSAyLjgtLjIgNC4zLTUuOSAzLjktMTUuMyAzLjgtMjEuOCA3LjEgOS41IC40IDE3IDIuNyAyMy41IDUuOS0uMSAzLjQtLjMgNy0uNCAxMC42em01My40IDI0LjdsLTE0IDBjLS4xLTMuMi0yLjgtNS44LTYuMS01LjhzLTUuOSAyLjYtNi4xIDUuOGwtMTcuNCAwYy0yLjgtNC40LTUuNy04LjYtOC45LTEyLjUgMi4xLTIuMiA0LTQuNyA2LTYuOSA5IDMuNyAxNC44LTQuOSAyMS43LTQuMiA3LjkgLjggMTQuMiAxMS43IDI1LjQgMTFsLS42IDEyLjZ6bTguNyAwYy4yLTQgLjQtNy44IC42LTExLjUgMTUuNi03LjMgMjkgMS4zIDM1LjcgMTEuNWwtMzYuMyAwem04My40LTM3Yy0yLjMgMTEuMi01LjggMjQtOS45IDM3LjEtLjItLjEtLjQtLjEtLjYtLjFsLTI3LjkgMGMuNi0xLjEgMS4yLTIuMiAxLjktMy4zLTIuNi02LjEtOS04LjctMTAuOS0xNS41IDEyLjEtMjIuNyA2LjUtOTMuNC0yNC4yLTc4LjUgNC4zLTYuMyAxNS42LTExLjUgMjAuOC0xOS4zIDEzIDEwLjQgMjAuOCAyMC4zIDMzLjIgMzEuNCA2LjggNiAyMCAxMy4zIDIxLjQgMjMuMSAuOCA1LjUtMi42IDE4LjktMy44IDI1LjF6TTE5MC41IDEzMC41YzUuNC0xNC45IDI3LjItMzQuNyA0NS0zMiA3LjcgMS4yIDE4IDguMiAxMi4yIDE3LjctMzAuMi03LTQ1LjIgMTIuNi01NC40IDMzLjEtOC4xLTItNC45LTEzLjEtMi44LTE4Ljh6bTE4NC4xIDYzLjFjOC4yLTMuNiAyMi40LS43IDI5LjYtNS4zLTQuMi0xMS41LTEwLjMtMjEuNC05LjMtMzcuNyAuNSAwIDEgMCAxLjQgLjEgNi44IDE0LjIgMTIuNyAyOS4yIDIxLjQgNDEuNy01LjcgMTMuNS00My42IDI1LjQtNDMuMSAxLjJ6bS05Ni44IDIuN2MtNi44LTEwLjktMTktMzIuNS0xNC41LTQ1LjMgNi41IDExLjkgOC42IDI0LjQgMTcuOCAzMy4zIDQuMSA0IDEyLjIgOSA4LjIgMjAuMi0uOSAyLjctNy44IDguNi0xMS43IDkuNy0xNC40IDQuMy00Ny45IC45LTM2LjYtMTcuMSAxMS45IC43IDI3LjkgNy44IDM2LjgtLjh6bTI3LjMgNzBjMy44IDYuNiAxLjQgMTguNyAxMi4xIDIwLjYgMjAuMiAzLjQgNDMuNi0xMi4zIDU4LjEtMTcuOCA5LTE1LjItLjgtMjAuNy04LjktMzAuNS0xNi42LTIwLTM4LjgtNDQuOC0zOC03NC43IDYuNy00LjkgNy4zIDcuNCA4LjIgOS43IDguNyAyMC4zIDMwLjQgNDYuMiA0Ni4zIDYzLjUgMy45IDQuMyAxMC4zIDguNCAxMSAxMS4yIDIuMSA4LjItNS40IDE4LTQuNSAyMy41LTIxLjcgMTMuOS00NS44IDI5LjEtODEuNCAyNS42LTcuNC02LjctMTAuMy0yMS40LTIuOS0zMS4xem0tMjAxLjMtOS4yYy02LjgtMy45LTguNC0yMS0xNi40LTIxLjQtMTEuNC0uNy05LjMgMjIuMi05LjMgMzUuNS03LjgtNy4xLTkuMi0yOS4xLTMuNS00MC4zLTYuNi0zLjItOS41IDMuNi0xMy4xIDUuOSA0LjctMzQuMSA0OS44LTE1LjggNDIuMyAyMC4zem0yOTkuNiAyOC44Yy0xMC4xIDE5LjItMjQuNCA0MC40LTU0IDQxLS42LTYuMi0xLjEtMTUuNiAwLTE5LjQgMjIuNy0yLjIgMzYuNi0xMy43IDU0LTIxLjZ6TTI2MS41IDI5OC4zYzE4LjkgOS45IDUzLjYgMTEgNzkuMyAxMC4yIDEuNCA1LjYgMS4zIDEyLjYgMS40IDE5LjQtMzMgMS44LTcyLTYuNC04MC43LTI5LjZ6TTM1My43IDM0NWMtMS43IDQuMy01LjMgOS4zLTkuOCAxMS4xLTEyLjEgNC45LTQ1LjYgOC43LTYyLjQtLjMtMTAuNy01LjctMTcuNS0xOC41LTIzLjQtMjYtMi44LTMuNi0xNi45LTEyLjktLjItMTIuOSAxMy4xIDMyLjcgNTggMjkgOTUuOCAyOC4xeiJdfSx1MHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2xpZGVzaGFyZSIsaWNvbjpbNTEyLDUxMixbXSwiZjFlNyIsIk0xODcuOSAxNTMuN2MtMzQgMC02MS43IDI1LjctNjEuNyA1Ny43IDAgMzEuNyAyNy43IDU3LjcgNjEuNyA1Ny43czYxLjctMjYgNjEuNy01Ny43YzAtMzItMjcuNy01Ny43LTYxLjctNTcuN3ptMTQzLjQgMGMtMzQgMC02MS43IDI1LjctNjEuNyA1Ny43IDAgMzEuNyAyNy43IDU3LjcgNjEuNyA1Ny43IDM0LjMgMCA2MS43LTI2IDYxLjctNTcuNyAuMS0zMi0yNy40LTU3LjctNjEuNy01Ny43em0xNTYuNiA5MGwtNiA0LjMgMC0xOTguM2MwLTI3LjQtMjAuNi00OS43LTQ2LTQ5LjdMNzYuOCAwYy0yNS40IDAtNDYgMjIuMy00NiA0OS43bDAgMTk4LjNjLTItMS40LTQuMy0yLjktNi4zLTQuMy0xNS4xLTEwLjYtMjUuMSA0LTE2IDE3LjcgMTguMyAyMi42IDUzLjEgNTAuMyAxMDYuMyA3Mi01Ni4zIDE5MS43IDEzNy40IDIyMi4zIDEzNC4zIDEyNC4xIDAtLjcgLjMtNTYuNiAuMy05Ni42IDUuMSAxLjEgOS40IDIuMyAxMy43IDMuMSAwIDM5LjcgLjMgOTIuOCAuMyA5My41LTMuMSA5OC4zIDE5MC42IDY3LjcgMTM0LjMtMTI0IDUzLjEtMjEuNyA4OC00OS40IDEwNi4zLTcyIDkuMS0xMy44LS45LTI4LjMtMTYuMS0xNy44em0tMzAuNSAxOS4yYy02OC45IDM3LjQtMTI4LjMgMzEuMS0xNjAuNiAyOS43LTIzLjctLjktMzIuNiA5LjEtMzMuNyAyNC45LTEwLjMtNy43LTE4LjYtMTUuNS0yMC4zLTE3LjEtNS4xLTUuNC0xMy43LTgtMjcuMS03LjctMzEuNyAxLjEtODkuNyA3LjQtMTU3LjQtMjhsMC0xOTIuNGMwLTM0LjkgOC45LTQ1LjcgNDAuNi00NS43bDMxNy43IDBjMzAuMyAwIDQwLjkgMTIuOSA0MC45IDQ1LjdsMCAxOTAuNi0uMSAweiJdfSxwMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidWJlciIsaWNvbjpbNDQ4LDUxMixbXSwiZjQwMiIsIk00MTQuMSAzMkwzMy45IDMyQzE1LjIgMzIgMCA0Ny4yIDAgNjUuOUwwIDQ0NmMwIDE4LjggMTUuMiAzNCAzMy45IDM0TDQxNCA0ODBjMTguNyAwIDMzLjktMTUuMiAzMy45LTMzLjlsMC0zODAuMkM0NDggNDcuMiA0MzIuOCAzMiA0MTQuMSAzMnpNMjM3LjYgMzkxLjFDMTYzIDM5OC42IDk2LjQgMzQ0LjIgODguOSAyNjkuNmw5NC40IDAgMCAyMC40YzAgMy43IDMgNi44IDYuOCA2LjhsNjcuOSAwYzMuNyAwIDYuOC0zIDYuOC02LjhsMC02Ny45YzAtMy43LTMtNi44LTYuOC02LjhsLTY3LjkgMGMtMy43IDAtNi44IDMtNi44IDYuOGwwIDIwLjQtOTQuNCAwYzctNjkuNCA2NS40LTEyMi4yIDEzNS4xLTEyMi4yczEyOC4xIDUyLjggMTM1LjEgMTIyLjJjNy41IDc0LjUtNDYuOSAxNDEuMS0xMjEuNSAxNDguNnoiXX0saDB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRpZ2l0YWwtb2NlYW4iLGljb246WzUxMiw1MTIsW10sImYzOTEiLCJNODcgNDgxLjhsNzMuNyAwIDAtNzMuNi03My43IDAgMCA3My42ek0yNS40IDM0Ni42bDAgNjEuNiA2MS42IDAgMC02MS42LTYxLjYgMHpNNDkxLjYgMTc2LjlDNDY4LjYgMTAyLjcgNDA5LjIgNDMuNiAzMzUgMjAuMyAxNjQuOS0zMi44IDggOTMuNyA4IDI1NS45bDk1LjggMGMwLTEwMS44IDEwMS0xODAuNSAyMDguMS0xNDEuNyAzOS43IDE0LjMgNzEuNSA0Ni4xIDg1LjggODUuNyAzOS4xIDEwNy0zOS43IDIwNy44LTE0MS40IDIwOGwwIC4zLS4zIDAgMCA5NS44YzE2Mi42IDAgMjg4LjgtMTU2LjggMjM1LjYtMzI3LjF6bS0yMzUuMyAyMzFsMC05NS4zLTk1LjYgMCAwIDk1LjYgOTUuMyAwIDAtLjMgLjMgMHoiXX0sbTB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNvdW5kY2xvdWQiLGljb246WzY0MCw1MTIsW10sImYxYmUiLCJNNjQwLjIgMjk4LjZjLTEuMyAyMy4xLTExLjUgNDQuOC0yOC40IDYwLjVzLTM5LjIgMjQuNC02Mi4zIDI0LjFsLTIxOCAwYy00LjggMC05LjQtMi0xMi44LTUuNHMtNS4zLTgtNS4zLTEyLjhsMC0yMzQuOGMtLjItNCAuOS04IDMuMS0xMS40czUuMy02LjEgOS03LjdjMCAwIDIwLjEtMTMuOSA2Mi4zLTEzLjkgMjUuOCAwIDUxLjEgNi45IDczLjMgMjAuMSAxNy4zIDEwLjIgMzIuMyAyMy44IDQ0LjEgNDAuMXMyMCAzNC44IDI0LjIgNTQuNGM3LjUtMi4xIDE1LjMtMy4yIDIzLjEtMy4yIDExLjctLjEgMjMuMyAyLjIgMzQuMiA2LjdzMjAuNSAxMS4zIDI4LjcgMTkuNyAxNC42IDE4LjMgMTguOSAyOS4zIDYuMyAyMi42IDUuOSAzNC4zem0tMzU0LTE1My41Yy4xLTEgMC0yLS4zLTIuOXMtLjgtMS44LTEuNS0yLjYtMS41LTEuMy0yLjQtMS43Yy0xLjgtLjgtNC0uOC01LjggMC0uOSAuNC0xLjcgMS0yLjQgMS43cy0xLjIgMS42LTEuNSAyLjYtLjQgMS45LS4zIDIuOWMtNiA3OC45LTEwLjYgMTUyLjkgMCAyMzEuNiAuMiAxLjcgMSAzLjMgMi4zIDQuNSAyLjYgMi40IDYuOCAyLjQgOS40IDAgMS4zLTEuMiAyLjEtMi44IDIuMy00LjUgMTEuMy03OS40IDYuNi0xNTIgMC0yMzEuNmwuMiAwem0tNDQgMjcuM2MtLjItMS44LTEuMS0zLjUtMi40LTQuN3MtMy4xLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4yIDIuOS0yLjQgNC43Yy03LjkgNjcuOS03LjkgMTM2LjUgMCAyMDQuNCAuMyAxLjggMS4yIDMuNCAyLjUgNC41czMuMSAxLjggNC44IDEuOCAzLjUtLjYgNC44LTEuOCAyLjItMi44IDIuNS00LjVjOC44LTY3LjggOC44LTEzNi41IC4xLTIwNC40bC4xIDB6bS00NC4zLTYuOWMtLjItMS44LTEtMy40LTIuMy00LjZzLTMtMS44LTQuOC0xLjgtMy41IC43LTQuOCAxLjgtMi4xIDIuOC0yLjMgNC42Yy02LjcgNzItMTAuMiAxMzkuMyAwIDIxMS4xIDAgMS45IC43IDMuNyAyLjEgNXMzLjEgMi4xIDUgMi4xIDMuNy0uNyA1LTIuMSAyLjEtMy4xIDIuMS01YzEwLjUtNzIuOCA3LjMtMTM4LjIgLjEtMjExLjFsLS4xIDB6bS00NCAyMC42YzAtMS45LS44LTMuOC0yLjEtNS4ycy0zLjItMi4xLTUuMi0yLjEtMy44IC44LTUuMiAyLjEtMi4xIDMuMi0yLjEgNS4yYy04LjEgNjMuMy04LjEgMTI3LjUgMCAxOTAuOCAuMiAxLjggMSAzLjQgMi40IDQuNnMzLjEgMS45IDQuOCAxLjkgMy41LS43IDQuOC0xLjkgMi4yLTIuOCAyLjQtNC42YzguOC02My4zIDguOS0xMjcuNSAuMy0xOTAuOGwtLjEgMHptLTQ0LjUgNDcuNmMwLTEuOS0uOC0zLjgtMi4xLTUuMXMtMy4yLTIuMS01LjEtMi4xLTMuOCAuOC01LjEgMi4xLTIuMSAzLjItMi4xIDUuMWMtMTAuNSA0OS4yLTUuNSA5My45IC40IDE0My42IC4zIDEuNiAxLjEgMy4xIDIuMyA0LjJzMi44IDEuNyA0LjUgMS43IDMuMi0uNiA0LjUtMS43IDIuMS0yLjUgMi4zLTQuMmM2LjYtNTAuNCAxMS42LTk0LjEgLjQtMTQzLjZ6bS00NC4xLTcuNWMtLjItMS44LTEuMS0zLjUtMi40LTQuOHMtMy4yLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4yIDIuOS0yLjQgNC44Yy05LjMgNTAuMi02LjIgOTQuNCAuMyAxNDQuNSAuNyA3LjYgMTMuNiA3LjUgMTQuNCAwIDcuMi01MC45IDEwLjUtOTMuOCAuMy0xNDQuNWwtLjIgMHpNMjAuNyAyNTAuOGMtLjItMS44LTEuMS0zLjUtMi40LTQuOHMtMy4yLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4zIDIuOS0yLjQgNC44Yy04LjUgMzMuNy01LjkgNjEuNiAuNiA5NS40IC4yIDEuNyAxIDMuMyAyLjMgNC40czIuOSAxLjggNC43IDEuOCAzLjQtLjYgNC43LTEuOCAyLjEtMi43IDIuMy00LjRjNy41LTM0LjUgMTEuMi02MS44IC40LTk1LjRsLS4yIDB6Il19LGcwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtZmlnbWEiLGljb246WzQ0OCw1MTIsW10sImU3ZTQiLCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMTczLjcgOTZjLTMzIDAtNTkuOCAyNi44LTU5LjggNTkuOCAwIDIxIDEwLjggMzkuNCAyNy4yIDUwLjEtMTYuNCAxMC43LTI3LjIgMjkuMS0yNy4yIDUwLjFzMTAuOCAzOS41IDI3LjIgNTAuMWMtMTYuNCAxMC43LTI3LjIgMjkuMS0yNy4yIDUwLjEgMCAzMy4xIDI3LjEgNTkuOCA2MC4xIDU5LjggMzMuMiAwIDYwLjYtMjYuOSA2MC42LTYwLjNsMC01NS43YzEwLjYgOS44IDI0LjggMTUuOCA0MC40IDE1LjhsMS4xIDBjMzMgMCA1OS44LTI2LjggNTkuOC01OS44IDAtMjEtMTAuOC0zOS41LTI3LjItNTAuMSAxNi40LTEwLjcgMjcuMi0yOS4xIDI3LjItNTAuMSAwLTMzLTI2LjgtNTkuOC01OS44LTU5LjhMMTczLjcgOTZ6bTQxLjYgMjE5LjhsMCAzOS45YzAgMjIuNi0xOC42IDQxLTQxLjMgNDEtMjIuNCAwLTQwLjctMTguMi00MC43LTQwLjUgMC0yMi4zIDE4LjEtNDAuNCA0MC4zLTQwLjRsNDEuNyAwem0wLTEwMC4zbDAgODAuOS00MS43IDBjLTIyLjMtLjEtNDAuMy0xOC4yLTQwLjMtNDAuNSAwLTIyLjMgMTguMS00MC41IDQwLjUtNDAuNWw0MS42IDB6bTYwLjggMGMyMi4zIDAgNDAuNSAxOC4xIDQwLjUgNDAuNXMtMTguMSA0MC41LTQwLjUgNDAuNWwtMS4xIDBjLTIyLjMgMC00MC40LTE4LjEtNDAuNC00MC41czE4LjEtNDAuNSA0MC40LTQwLjVsMS4xIDB6bS02MC44LTE5LjNsLTQxLjYgMGMtMjIuMyAwLTQwLjUtMTguMS00MC41LTQwLjRzMTguMS00MC41IDQwLjUtNDAuNWw0MS42IDAgMCA4MC45em02MC44LTgwLjljMjIuMyAwIDQwLjUgMTguMSA0MC41IDQwLjVzLTE4LjEgNDAuNC00MC41IDQwLjRsLTQxLjUgMCAwLTgwLjkgNDEuNSAweiJdfSx4MHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY3JlYXRpdmUtY29tbW9ucy1zYSIsaWNvbjpbNTEyLDUxMixbXSwiZjRlZiIsIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6TTE0NS43IDIyMWMxMy04My45IDgwLjUtOTUuNyAxMDguOS05NS43IDk5LjggMCAxMjcuNSA4Mi41IDEyNy41IDEzNC4yIDAgNjMuNi00MSAxMzIuOS0xMjguOSAxMzIuOS0zOC45IDAtOTkuMS0yMC0xMDkuNC05N2w2Mi41IDBjMS41IDMwLjEgMTkuNiA0NS4yIDU0LjUgNDUuMiAyMy4zIDAgNTgtMTguMiA1OC04Mi44IDAtODIuNS00OS4xLTgwLjYtNTYuNy04MC42LTMzLjEgMC01MS43IDE0LjYtNTUuOCA0My44bDE4LjIgMC00OS4yIDQ5LjItNDktNDkuMiAxOS40IDB6Il19LGIwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjaHJvbWUiLGljb246WzUxMiw1MTIsW10sImYyNjgiLCJNMCAyNTZjMC00Ni42IDEyLjUtOTAuNCAzNC4zLTEyOC45TDE0NC4xIDMxOC4zYzIxLjkgMzkuMiA2My44IDY1LjcgMTExLjkgNjUuNyAxNC4zIDAgMjcuMS0yLjMgNDAuOC02LjZMMjIwLjUgNTA5LjZDOTUuOSA0OTIuMyAwIDM4NS4zIDAgMjU2em0zNjUuMSA2NS42YzEyLjMtMTkuMiAxOC45LTQyLjUgMTguOS02NS42IDAtMzguMi0xNi44LTcyLjUtNDMuMy05NmwxNTIuNyAwYzEyIDI5LjYgMTguNiA2Mi4xIDE4LjYgOTYgMCAxNDEuNC0xMTQuNiAyNTUuMS0yNTYgMjU2TDM2NS4xIDMyMS42ek00NzcuOCAxMjhMMjU2IDEyOGMtNjIuOSAwLTExMy43IDQ0LjEtMTI1LjUgMTAyLjdMNTQuMiA5OC41QzEwMSAzOC41IDE3NCAwIDI1NiAwIDM1MC44IDAgNDMzLjUgNTEuNSA0NzcuOCAxMjh6TTM0NCAyNTZhODggODggMCAxIDEgLTE3NiAwIDg4IDg4IDAgMSAxIDE3NiAweiJdfSx2MHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidHJhZGUtZmVkZXJhdGlvbiIsaWNvbjpbNTEyLDUxMixbXSwiZjUxMyIsIk0yNTYgOC44YTI0Ny4yIDI0Ny4yIDAgMSAwIDAgNDk0LjQgMjQ3LjIgMjQ3LjIgMCAxIDAgMC00OTQuNHptMCAxMS42YTIzNS42IDIzNS42IDAgMSAxIDAgNDcxLjIgMjM1LjYgMjM1LjYgMCAxIDEgMC00NzEuMnpNNDExLjEgMTYzLjFsMC00Ni44LTE5My44IDAgMCA4MS43LTE1NS4xIDAgMzYuNyA0NiAxMTcuNyAwIDAgMTk2LjggNDguOCAwIDAtMTk1LjggODMuMyAwIDAtNDctODMuMyAwIDAtMzQuOCAxNDUuNyAwIDAtLjF6bS03My4zIDQ1LjFsMCAyMy45LTgyLjkgMCAwIDE5Ny40LTI2LjggMCAwLTE5Ny40LTEyMy44IDAtMjAuMS0yMy45IDE0My45IDAgMC04MC42IDE3MS44IDAgMCAyNC40LTE0NSAwIDAgNTYuMiA4Mi45IDB6bS0xNjEuMy02OWwtMTIuNC0yMC43IDIuMSAyMy44LTIzLjUgNS40IDIzLjMgNS40LTIuMSAyNCAxMi4zLTIwLjUgMjIuMiA5LjUtMTUuNy0xOC4xIDE1LjgtMTguMS0yMiA5LjN6bS0yOS42LTE5LjdsOS4zLTExLjUtMTIuNyA1LjktOC0xMi40IDEuNyAxMy45LTE0LjMgMy44IDEzLjcgMi43LS44IDE0LjcgNi44LTEyLjIgMTMuOCA1LjMtOS41LTEwLjJ6TTMxMi4zIDI2NC43bC0xMy4xIDUuNi03LjMtMTIuMiAxLjMgMTQuMi0xMy45IDMuMiAxMy45IDMuMi0xLjIgMTQuMiA3LjMtMTIuMiAxMy4xIDUuNS05LjQtMTAuNyA5LjMtMTAuOHptMTA2LjktNzcuMmwtMjAuOSA5LjEtMTItMTkuNiAyLjIgMjIuNy0yMi4zIDUuNCAyMi4yIDQuOS0xLjggMjIuOSAxMS41LTE5LjYgMjEuMiA4LjgtMTUuMS0xNyAxNS0xNy42ek0yNTYgMjkuOWEyMjYuMSAyMjYuMSAwIDEgMCAwIDQ1Mi4yIDIyNi4xIDIyNi4xIDAgMSAwIDAtNDUyLjJ6TTM1MC42IDE5NmwwIDUxLTgzLjMgMCAwIDE5NS43LTUyLjcgMCAwLTE5Ni44LTExNi43IDAtNDAtNDkuOSAxNTcuNCAwIDAtODEuNiAxOTcuOCAwIDAgNTAuNy0xNDUuNyAwIDAgMzAuOSA4My4yIDB6TTI1NiA0My4yYzYwLjMgMCAxMTQuOCAyNSAxNTMuNiA2NS4ybC0xOTkuMSAwIDAgODEuNi0xNTcuNCAwQzgxLjEgMTA0LjggMTYxLjQgNDMuMiAyNTYgNDMuMnptMCA0MjcuMWMtMTE3LjkgMC0yMTMuNi05NS42LTIxMy42LTIxMy41IDAtMjEuMiAzLjEtNDEuOCA4LjktNjEuMWw0My44IDU2LjMgMTE0LjcgMCAwIDE5Ni44IDY0LjYgMCAwLTE5NS44IDgzLjMgMCAwLTYyLjctODMuMiAwIDAtMTkuMiAxNDUuNiAwIDAtNTAuOGMzMC44IDM3IDQ5LjMgODQuNiA0OS4zIDEzNi41IC4xIDExNy45LTk1LjUgMjEzLjUtMjEzLjQgMjEzLjV6TTE4Ni44IDI3NWwtMTEtMjEuNCAxLjcgMjQuNS0yMy43IDMuOSAyMy44IDUuOS0zLjcgMjMuOCAxMy0yMC45IDIxLjUgMTAuOC0xNS44LTE4LjggMTYuOS0xNy4xLTIyLjcgOS4zeiJdfSx5MHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmFhZGluIixpY29uOls0NDgsNTEyLFtdLCJmNDA4IiwiTTIyNC41IDE0MC43QzIyNiAxMjMuMSAyMjkuNCA4OCAyNzQuMyA4OGw5OC42IDBjMjAuNyAwIDMyLjEtNy44IDMyLjEtMjEuNmwwLTEyLjNjMC0xMi4yIDkuMy0yMi4xIDIxLjUtMjIuMVM0NDggNDEuOSA0NDggNTQuMWwwIDM2LjVjMCA0Mi45LTIxLjUgNjItNjYuOCA2MmwtMTAwLjUgMGMtMzAuMSAwLTMzIDE0LjctMzMgMjcuMSAwIDEuMy0uMSAyLjUtLjIgMy43LS43IDEyLjMtMTAuOSAyMi4yLTIzLjQgMjIuMnMtMjIuNy05LjgtMjMuNC0yMi4yYy0uMS0xLjItLjItMi40LS4yLTMuNyAwLTEyLjMtMy0yNy4xLTMzLTI3LjFsLTEwMC43IDBDMjEuNSAxNTIuNiAwIDEzMy41IDAgOTAuNkwwIDU0LjFDMCA0MS45IDkuNCAzMiAyMS42IDMyczIxLjUgOS45IDIxLjUgMjIuMWwwIDEyLjNDNDMuMSA4MC4yIDU0LjUgODggNzUuMiA4OGw5OC42IDBjNDQuOCAwIDQ4LjMgMzUuMSA0OS44IDUyLjdsLjkgMHpNMjI0IDQ1NmMxMS41IDAgMjEuNC03IDI1LjctMTYuMyAxLjEtMS44IDk3LjEtMTY5LjYgOTguMi0xNzEuNCAxMS45LTE5LjYtMy4yLTQ0LjMtMjcuMi00NC4zLTEzLjkgMC0yMy4zIDYuNC0yOS44IDIwLjNMMjI0IDM2MiAxNTcuMSAyNDQuM2MtNi40LTEzLjktMTUuOS0yMC4zLTI5LjgtMjAuMy0yNCAwLTM5LjEgMjQuNi0yNy4yIDQ0LjMgMS4xIDEuOSA5Ny4xIDE2OS42IDk4LjIgMTcxLjQgNC4zIDkuMyAxNC4yIDE2LjMgMjUuNyAxNi4zeiJdfSx3MHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGV2aWFudGFydCIsaWNvbjpbMzIwLDUxMixbXSwiZjFiZCIsIk0zMjAgOTMuMmwtOTguMiAxNzkuMSA3LjQgOS41IDkwLjggMCAwIDEyNy43LTE2MC45IDAtMTMuNSA5LjItNDMuNyA4NGMtLjMgMC04LjYgOC42LTkuMiA5LjJsLTkyLjcgMCAwLTkzLjIgOTMuMi0xNzkuNC03LjQtOS4yLTg1LjggMCAwLTEyNy42IDE1NiAwIDEzLjUtOS4yIDQzLjctODRjLjMgMCA4LjYtOC42IDkuMi05LjJsOTcuNiAwIDAgOTMuMXoiXX0sR2Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWVkaXVtIixpY29uOls0NDgsNTEyLFs2MjQwNywibWVkaXVtLW0iXSwiZjIzYSIsIk0zNjkuNCAzMmM0My40IDAgNzguNiAzNS4yIDc4LjYgNzguNmwwIDgzLjhjLTEuOS0uMS0zLjgtLjItNS43LS4ybC0uNCAwYy0xMCAwLTIyLjMgMi40LTMxLjEgNi44LTEwIDQuNi0xOC43IDExLjUtMjYgMjAuNi0xMS44IDE0LjYtMTguOSAzNC4zLTIwLjYgNTYuNC0uMSAuNy0uMSAxLjMtLjIgMnMtLjEgMS4yLS4xIDEuOWMtLjEgMS4yLS4xIDIuNC0uMSAzLjYgMCAxLjktLjEgMy44IDAgNS44IDEuMiA1MC4xIDI4LjIgOTAuMiA3Ni4zIDkwLjIgMi43IDAgNS4zLS4xIDcuOS0uNGwwIDIwLjRjMCA0My40LTM1LjIgNzguNi03OC42IDc4LjZMNzguNiA0ODBDMzUuMiA0ODAgMCA0NDQuOCAwIDQwMS40TDAgMTEwLjZDMCA2Ny4yIDM1LjIgMzIgNzguNiAzMmwyOTAuOCAwek04Mi4zIDEzOC45bC4zIC4xYzEzLjIgMyAxOS44IDcuNCAxOS44IDIzLjRsMCAxODcuMmMwIDE2LTYuNyAyMC40LTE5LjkgMjMuNGwtLjMgLjEgMCAyLjggNTIuOCAwIDAtMi44LS4zLS4xYy0xMy4yLTMtMTkuOS03LjQtMTkuOS0yMy40bDAtMTc2LjMgODYuMSAyMDIuNSA0LjkgMCA4OC42LTIwOC4yIDAgMTg2LjZjLTEuMSAxMi42LTcuOCAxNi41LTE5LjcgMTkuMmwtLjMgLjEgMCAyLjcgOTEuOSAwIDAtMi43LS4zLS4xYy0xMS45LTIuNy0xOC43LTYuNi0xOS45LTE5LjJsLS4xLTE5MS44IC4xIDBjMC0xNiA2LjctMjAuNCAxOS45LTIzLjRsLjMtLjEgMC0yLjctNzIuMiAwLTY3IDE1Ny40LTY3LTE1Ny40LTc3LjggMCAwIDIuN3pNNDQ4IDM0MC4zYy0yNS4xLTcuNC00My0zNS4xLTQxLjItNjcuOGwwIDAgNDEuMSAwIDAgNjcuOHptLTYuNC0xMzUuNmMyLjMgMCA0LjQgLjMgNi40IC45bDAgNTcuNC00MC4yIDBjMS41LTMzLjYgMTMuNi01Ny45IDMzLjgtNTguM3oiXX0sTTB0PUdkLHowdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJvcGVuY2FydCIsaWNvbjpbNjQwLDUxMixbXSwiZjIzZCIsIk0zMzEuOCA0NDAuNGE0NS44IDQ1LjggMCAxIDEgOTEuNSAuMyA0NS44IDQ1LjggMCAxIDEgLTkxLjUtLjN6TTE2OS40IDM5NC45YTQ1LjcgNDUuNyAwIDEgMCAuMyA5MS4zIDQ1LjcgNDUuNyAwIDEgMCAtLjMtOTEuM3ptMjkxLjctMjcwYy0zMDIuMiAwLTM3OS4yLTEyLjgtNDYxLjEtOTkuMiAzNC40IDUxLjcgNTMuMyAxNDguOSAzNzMuMSAxNDQuMiAzMzMuMy01IDEzMCA4Ni4xIDcwLjggMTg4LjkgMTg2LjctMTY2LjcgMzE5LjQtMjMzLjkgMTcuMi0yMzMuOXoiXX0sazB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InktY29tYmluYXRvciIsaWNvbjpbNDQ4LDUxMixbXSwiZjIzYiIsIk00NDggMzJsMCA0NDgtNDQ4IDAgMC00NDggNDQ4IDB6TTIzNiAyODcuNWw3Ny41LTE0NS41LTMyLjcgMC00NS44IDkxYy00LjcgOS4zLTkgMTguMy0xMi44IDI2LjhsLTEyLjItMjYuOC00NS4yLTkxLTM1IDAgNzYuNyAxNDMuOCAwIDk0LjUgMjkuNSAwIDAtOTIuOHoiXX0sUzB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImxpbmUiLGljb246WzUxMiw1MTIsW10sImYzYzAiLCJNMzExIDE5Ni44bDAgODEuM2MwIDIuMS0xLjYgMy43LTMuNyAzLjdsLTEzIDBjLTEuMyAwLTIuNC0uNy0zLTEuNUwyNTQgMjMwIDI1NCAyNzguMmMwIDIuMS0xLjYgMy43LTMuNyAzLjdsLTEzIDBjLTIuMSAwLTMuNy0xLjYtMy43LTMuN2wwLTgxLjNjMC0yLjEgMS42LTMuNyAzLjctMy43bDEyLjkgMGMxLjEgMCAyLjQgLjYgMyAxLjZsMzcuMyA1MC4zIDAtNDguMmMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMTMgMGMyLjEtLjEgMy44IDEuNiAzLjggMy41bDAgLjF6bS05My43LTMuN2wtMTMgMGMtMi4xIDAtMy43IDEuNi0zLjcgMy43bDAgODEuM2MwIDIuMSAxLjYgMy43IDMuNyAzLjdsMTMgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC04MS4zYzAtMS45LTEuNi0zLjctMy43LTMuN3ptLTMxLjQgNjguMWwtMzUuNiAwIDAtNjQuNGMwLTIuMS0xLjYtMy43LTMuNy0zLjdsLTEzIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDgxLjNjMCAxIC4zIDEuOCAxIDIuNSAuNyAuNiAxLjUgMSAyLjUgMWw1Mi4yIDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtMTNjMC0xLjktMS42LTMuNy0zLjUtMy43bC4xIDB6bTE5My43LTY4LjFsLTUyLjMgMGMtMS45IDAtMy43IDEuNi0zLjcgMy43bDAgODEuM2MwIDEuOSAxLjYgMy43IDMuNyAzLjdsNTIuMiAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTEzLjFjMC0yLjEtMS42LTMuNy0zLjctMy43bC0zNS41IDAgMC0xMy42IDM1LjUgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC0xMy4xYzAtMi4xLTEuNi0zLjctMy43LTMuN2wtMzUuNSAwIDAtMTMuNyAzNS41IDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtMTNjLS4xLTEuOS0xLjctMy43LTMuNy0zLjdsLjEgMHpNNTEyIDkzLjRsMCAzMjZjLS4xIDUxLjItNDIuMSA5Mi43LTkzLjQgOTIuNmwtMzI2IDBDNDEuNCA1MTEuOS0uMSA0NjkuOCAwIDQxOC42bDAtMzI2Qy4xIDQxLjQgNDIuMi0uMSA5My40IDBsMzI2IDBjNTEuMiAuMSA5Mi43IDQyLjEgOTIuNiA5My40ek00NDEuNiAyMzMuNWMwLTgzLjQtODMuNy0xNTEuMy0xODYuNC0xNTEuM1M2OC44IDE1MC4xIDY4LjggMjMzLjVjMCA3NC43IDY2LjMgMTM3LjQgMTU1LjkgMTQ5LjMgMjEuOCA0LjcgMTkuMyAxMi43IDE0LjQgNDIuMS0uOCA0LjctMy44IDE4LjQgMTYuMSAxMC4xczEwNy4zLTYzLjIgMTQ2LjUtMTA4LjJjMjctMjkuNyAzOS45LTU5LjggMzkuOS05My4xbDAtLjJ6Il19LEMwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhbWlsaWEiLGljb246WzQ0OCw1MTIsW10sImYzNmQiLCJNMjQwLjIgMzJjLTYxLjkgMC0xMzEuNSAxNi45LTE4NC4yIDU1LjQtNS4xIDMuMS05LjEgOS4yLTcuMiAxOS40IDEuMSA1LjEgNS4xIDI3LjQgMTAuMiAzOS42IDQuMSAxMC4yIDE0LjIgMTAuMiAyMC4zIDYuMSAzMi41LTIyLjMgOTYuNS00Ny43IDE1Mi4zLTQ3LjcgNTcuOSAwIDU4LjkgMjguNCA1OC45IDczLjFsMCAzOC41QzIwMy4xIDIyNy43IDc4LjMgMjUxIDQ2LjggMjY0LjIgMTEuMyAyODAuNSAxNi40IDM1Ny43IDE2LjQgMzc2UzMxLjYgNDgwIDE0MS4zIDQ4MGM0Ny44IDAgMTEzLjctMjAuNyAxNTMuMy00Mi4xbDAgMjUuNGMwIDMgMi4xIDguMiA2LjEgOS4xIDMuMSAxIDUwLjcgMiA1OS45IDJzNjIuNSAuMyA2Ni41LS43YzQuMS0xIDUuMS02LjEgNS4xLTkuMWwwLTI5Ni42Yy0uMS04MC4zLTU3LjktMTM2LTE5Mi0xMzZ6bTUwLjIgMzQ4Yy0yMS40IDEzLjItNDguNyAyNC40LTc5LjEgMjQuNC01Mi44IDAtNTguOS0zMy41LTU5LTQ0LjcgMC0xMi4yLTMtNDIuNyAxOC4zLTUyLjkgMjQuMy0xMy4yIDc1LjEtMjkuNCAxMTkuOC0zMy41bDAgMTA2Ljd6Il19LEwwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhc3ltbWV0cmlrIixpY29uOls1NzYsNTEyLFtdLCJmMzcyIiwiTTUxNy41IDMwOS4yYzM4LjgtNDAgNTguMS04MCA1OC41LTExNi4xIC44LTY1LjUtNTkuNC0xMTguMi0xNjkuNC0xMzUtMTI4LjctMTkuNy0yODguNSAxNS41LTQwNi42IDgyLjQgNTItMjYuNSAxMTAuNi00OC4yIDE3MC43LTU4LjIgNzQuNS0yMC41IDE1My0yNS40IDIyMS4zLTE0LjggMTUyLjUgMjMuOCAxOTYuOCAxMjcuNSA5OC44IDIzMS43LTEwLjIgMTAuOC0yMiAyMS4xLTM1IDMwLjZMMzA0LjkgMTAzLjQgMTE0LjcgMzg4LjljLTY1LjYtMjkuNC03Ni41LTkwLjItMTkuMS0xNTEuMiAyMC44LTIyLjIgNDguMy00MS45IDc5LjUtNTguMSAyMC0xMi4yIDM5LjctMjIuNiA2Mi0zMC43LTY1LjEgMjAuMy0xMjIuNyA1Mi45LTE2MS42IDkyLjktMjcuNyAyOC42LTQxLjQgNTcuMS00MS43IDgyLjktLjUgMzUuMSAyMy40IDY1LjEgNjguNCA4M2wtMzQuNSA1MS43IDEwMS42IDAgMjItMzQuNGMyMi4yIDEgNDUuMyAwIDY4LjYtMi43bC0yMi44IDM3LjEgMTM1LjUgMC0zMi42LTUzLjFjMTguNi01LjMgMzYuOS0xMS41IDU0LjUtMTguN2w0NS45IDcxLjggMTAxLjYgMC03My40LTExMC40YzE4LjUtMTIuMSAzNS0yNS41IDQ4LjktMzkuOHpNMzI5LjkgMzg5LjdsLTI1LTQwLjYtMzIuNyA1My4zYy0yMy40IDMuNS00Ni43IDUuMS02OS4yIDQuNGwxMDEuOS0xNTkuMyA3OC43IDEyM2MtMTcuMiA3LjQtMzUuMyAxMy45LTUzLjcgMTkuMnoiXX0sVDB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBoYWJyaWNhdG9yIixpY29uOls1MTIsNTEyLFtdLCJmM2RiIiwiTTMzMS4xIDI2Mi4xbC0uMS0xM3MyMS43LTE5LjggMjEuMS0yMS4ybC05LjUtMjBjLS42LTEuNC0yOS41LS41LTI5LjUtLjVsLTkuNC05LjNzLjItMjguNS0xLjItMjkuMWwtMjAuMS05LjJjLTEuNC0uNi0yMC43IDIxLTIwLjcgMjFsLTEzLjEtLjJzLTIwLjUtMjEuNC0yMS45LTIwLjhsLTIwIDguM2MtMS40IC41IC4yIDI4LjkgLjIgMjguOWwtOS4xIDkuMXMtMjkuMi0uOS0yOS43IC40TDE2MCAyMjYuM2MtLjYgMS40IDIxIDIxIDIxIDIxbC4xIDEyLjlTMTU5LjQgMjgwIDE2MCAyODEuNGw5LjUgMjBjLjYgMS40IDI5LjUgLjUgMjkuNSAuNWw5LjQgOS4zcy0uMiAzMS44IDEuMiAzMi4zbDIwLjEgOC4zYzEuNCAuNiAyMC43LTIzLjUgMjAuNy0yMy41bDEzLjEgLjJzMjAuNSAyMy44IDIxLjggMjMuM2wyMC03LjVjMS40LS42LS4yLTMyLjEtLjItMzIuMWw5LjEtOS4xczI5LjIgLjkgMjkuNy0uNWw4LjEtMTkuOGMuNy0xLjEtMjAuOS0yMC43LTIwLjktMjAuN3ptLTQ0LjktOC43Yy43IDE3LjEtMTIuOCAzMS42LTMwLjEgMzIuNHMtMzIuMS0xMi41LTMyLjgtMjkuNiAxMi44LTMxLjYgMzAuMS0zMi4zYzE3LjMtLjggMzIuMSAxMi41IDMyLjggMjkuNXptMjAxLjItMzcuOWwtOTctOTctLjEgLjFjLTc1LjEtNzMuMy0xOTUuNC03Mi44LTI2OS44IDEuNi01MC45IDUxLTI3LjggMjcuOS05NS43IDk1LjMtMjIuMyAyMi4zLTIyLjMgNTguNyAwIDgxIDY5LjkgNjkuNCA0Ni40IDQ2IDk3LjQgOTdsLjEtLjFjNzUuMSA3My4zIDE5NS40IDcyLjkgMjY5LjgtMS42IDUxLTUwLjkgMjcuOS0yNy45IDk1LjMtOTUuMyAyMi4zLTIyLjMgMjIuMy01OC43IDAtODF6TTM2My41IDE0OC4yYTE1Mi4zIDE1Mi4zIDAgMSAxIC0yMTUgMjE1LjYgMTUyLjMgMTUyLjMgMCAxIDEgMjE1LTIxNS42eiJdfSxfMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYm90cyIsaWNvbjpbNjQwLDUxMixbXSwiZTM0MCIsIk04Ni4zIDE5Ny44Yy04LS4xLTE1LjkgMS43LTIzLjEgNS4xcy0xMy41IDguNi0xOC40IDE0LjlsMC02MS45YzAtMi4yLS45LTQuMy0yLjQtNS44cy0zLjYtMi40LTUuOC0yLjRsLTI4LjQgMGMtMi4yIDAtNC4zIC45LTUuOCAyLjRTMCAxNTMuOCAwIDE1NkwwIDMzMy42YzAgMS4xIC4yIDIuMSAuNiAzLjFzMSAxLjkgMS44IDIuNyAxLjcgMS40IDIuNyAxLjggMi4xIC42IDMuMSAuNmwyOC40IDBjMS4xIDAgMi4xLS4yIDMuMS0uNnMxLjktMSAyLjctMS44IDEuNC0xLjcgMS44LTIuNyAuNi0yLjEgLjYtMy4xbDAtOC4xYzExLjYgMTMuNCAyNS45IDE5LjggNDEuNiAxOS44IDM0LjYgMCA2MS45LTI2LjIgNjEuOS03My44IDAtNDUuOS0yNy03My42LTYxLjktNzMuNnpNNzEuNSAzMDUuN2MtOS42IDAtMjEuMi00LjktMjYuNy0xMi41bDAtNDNjNS41LTcuNiAxNy4yLTEyLjggMjYuNy0xMi44IDE3LjcgMCAzMS4xIDEzLjEgMzEuMSAzNCAwIDIxLjItMTMuNCAzNC4zLTMxLjEgMzQuM3ptMTU2LjQtNTlhMTcuNCAxNy40IDAgMSAwIDAgMzQuOCAxNy40IDE3LjQgMCAxIDAgMC0zNC44em00Ni4xLTkwbDAtNDQuN2MyLjgtMS4yIDUuMi0zLjMgNi42LTZzMS45LTUuOCAxLjMtOC45LTIuMi01LjctNC42LTcuNy01LjQtMy04LjQtMy02LjEgMS4xLTguNCAzLTQgNC43LTQuNiA3LjctLjEgNi4xIDEuMyA4LjkgMy44IDQuOCA2LjYgNmwwIDQ0LjdjLTI4IDEuMy01NC40IDEzLjYtNzMuNiAzNC4xcy0yOS41IDQ3LjctMjguOCA3NS44IDEyLjMgNTQuNyAzMi40IDc0LjMgNDcgMzAuNiA3NS4xIDMwLjYgNTUtMTEgNzUuMS0zMC42IDMxLjctNDYuMyAzMi40LTc0LjMtOS43LTU1LjMtMjguOC03NS44LTQ1LjUtMzIuOC03My42LTM0LjF6bTg2IDEwNy40YzAgMzAuNS00MC44IDU1LjMtOTEuMSA1NS4zcy05MS4xLTI0LjctOTEuMS01NS4zIDQwLjgtNTUuMyA5MS4xLTU1LjMgOTEuMSAyNC43IDkxLjEgNTUuM2wwIDB6bS01MC4yIDE3LjRjMy40IDAgNi44LTEgOS43LTIuOXM1LjEtNC42IDYuNC03LjggMS43LTYuNyAxLTEwLjEtMi4zLTYuNS00LjgtOC45LTUuNS00LjEtOC45LTQuOC02LjktLjMtMTAuMSAxLTUuOSAzLjUtNy44IDYuNC0yLjkgNi4yLTIuOSA5LjdjMCA0LjYgMS44IDkgNS4xIDEyLjNzNy43IDUuMSAxMi4zIDUuMWwwIDB6bTI3MC45LTMxYy0xNC44LTIuNi0yMi40LTMuOC0yMi40LTkuOSAwLTUuNSA3LjMtOS45IDE3LjctOS45IDEyLjIgLjEgMjQuMiAzLjYgMzQuNSAxMC4xIDEuOCAxLjIgNCAxLjYgNi4yIDEuMXM0LTEuNyA1LjEtMy42Yy4xLS4xIC4xLS4yIC4yLS4zbDguNi0xNC45YzEuMS0xLjkgMS40LTQuMSAuOC02LjFzLTEuOS0zLjktMy43LTVjLTE1LjctOS40LTMzLjctMTQuMy01Mi0xNC4xLTM5IDAtNjAuMiAyMS41LTYwLjIgNDYuMiAwIDM2LjMgMzMuNyA0MS45IDU3LjYgNDUuNiAxMy40IDIuMyAyNC4xIDQuNCAyNC4xIDExIDAgNi40LTUuNSAxMC44LTE4LjkgMTAuOC0xMy42IDAtMzEtNi4yLTQyLjYtMTMuNi0uOS0uNi0xLjktMS0zLTEuMnMtMi4xLS4yLTMuMiAuMS0yLjEgLjctMi45IDEuMy0xLjYgMS40LTIuMiAyLjNjMCAuMS0uMSAuMS0uMSAuMmwtMTAuMiAxNi45Yy0xLjEgMS44LTEuNCA0LTEgNnMxLjcgMy45IDMuNSA1YzE1LjIgMTAuMyAzNy43IDE2LjcgNTkuNCAxNi43IDQwLjQgMCA2NC0xOS44IDY0LTQ2LjUgMC0zOC4xLTM1LjUtNDMuOS01OS4zLTQ4LjN6bS05NS45IDYwLjhjLS41LTItMS44LTMuNy0zLjYtNC44cy0zLjktMS41LTUuOS0xLjFjLTEuNCAuMy0yLjggLjQtNC4yIC40LTcuOCAwLTEyLjUtNi4xLTEyLjUtMTQuMmwwLTUxLjIgMjAuMyAwYzIuMiAwIDQuMi0uOSA1LjgtMi40czIuNC0zLjYgMi40LTUuOGwwLTIyLjdjMC0yLjItLjktNC4yLTIuNC01LjhzLTMuNi0yLjQtNS44LTIuNGwtMjAuMyAwIDAtMzAuMmMwLTIuMi0uOS00LjItMi40LTUuOHMtMy42LTIuNC01LjgtMi40bC0yOC4yIDBjLTIuMiAwLTQuMiAuOS01LjggMi40cy0yLjQgMy42LTIuNCA1LjhsMCAzMC4yLTE1LjEgMGMtMS4xIDAtMi4xIC4yLTMuMSAuNnMtMS45IDEtMi42IDEuOC0xLjQgMS43LTEuOCAyLjYtLjYgMi0uNiAzLjFsMCAyMi43YzAgMS4xIC4yIDIuMSAuNiAzLjFzMSAxLjkgMS44IDIuNiAxLjcgMS40IDIuNiAxLjggMiAuNiAzLjEgLjZsMTUuMSAwIDAgNjMuN2MwIDI3IDE1LjQgNDEuMyA0My45IDQxLjMgMTIuMiAwIDIxLjQtMi4yIDI3LjYtNS40IDEuNi0uOCAyLjktMi4yIDMuNy0zLjlzLjktMy42IC41LTUuNGwtNS0xOS4zeiJdfSxBMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmluZSIsaWNvbjpbMzg0LDUxMixbXSwiZjFjYSIsIk0zODQgMjU0LjdsMCA1Mi4xYy0xOC40IDQuMi0zNi45IDYuMS01Mi4xIDYuMS0zNi45IDc3LjQtMTAzIDE0My44LTEyNS4xIDE1Ni4yLTE0IDcuOS0yNy4xIDguNC00Mi43LS44LTI3LjEtMTYuMy0xMjkuOS0xMDAuNi0xNjQuMS0zNjUuNmw3NC41IDBjMTguNyAxNTkuMSA2NC41IDI0MC43IDExNC44IDMwMS44IDI3LjktMjcuOSA1NC44LTY1LjEgNzUuNi0xMDYuOS00OS44LTI1LjMtODAuMS04MC45LTgwLjEtMTQ1LjYgMC02NS42IDM3LjctMTE1LjEgMTAyLjItMTE1LjEgMTE0LjkgMCAxMDYuMiAxMjcuOSA4MS42IDE4MS41IDAgMC00Ni40IDkuMi02My41LTIwLjUgMy40LTExLjMgOC4yLTMwLjggOC4yLTQ4LjUgMC0zMS4zLTExLjMtNDYuNi0yOC40LTQ2LjYtMTguMiAwLTMwLjggMTcuMS0zMC44IDUwIC4xIDc5LjIgNTkuNCAxMTguNyAxMjkuOSAxMDEuOXoiXX0sJDB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1lZHJ0IixpY29uOls1NzYsNTEyLFtdLCJmM2M4IiwiTTEyOS43IDI1NmMwIDEyMS44IDgzLjkgMjIyLjggMTkzLjUgMjQxLjEtMTguNyA0LjUtMzguMiA2LjktNTguMiA2LjktMTM3LjYgMC0yNDktMTExLTI0OS0yNDhTMTI3LjQgOCAyNjQuOSA4YzIwLjEgMCAzOS42IDIuNCA1OC4yIDYuOS0xMDkuNiAxOC4zLTE5My40IDExOS4zLTE5My40IDI0MS4xek00MjcuMSAzNTYuM2MtNzcuNyA1NS40LTE3OS42IDQ3LjUtMjQwLjQtMTQuNiA1LjUgMTQuMSAxMi43IDI3LjcgMjEuNyA0MC41IDYxLjYgODguMiAxODIuNCAxMDkuMyAyNjkuNyA0N3MxMDguMS0xODQuMyA0Ni41LTI3Mi42Yy05LTEyLjktMTkuMy0yNC4zLTMwLjUtMzQuMiAzNy40IDc4LjggMTAuNyAxNzguNS02NyAyMzMuOXptLTIxOC44LTI0NGMtMS40IDEtMi43IDIuMS00IDMuMSA2NC4zLTE3LjggMTM1LjkgNCAxNzguOSA2MC41IDM1LjcgNDcgNDIuOSAxMDYuNiAyNC40IDE1OCA1Ni43LTU2LjIgNjcuNi0xNDIuMSAyMi4zLTIwMS44LTUwLTY1LjUtMTQ5LjEtNzQuNC0yMjEuNi0xOS44ek0zMTIgMjI0Yy00LjQgMC04LTMuNi04LThsMC00MGMwLTQuNC0zLjYtOC04LThsLTQ4IDBjLTQuNCAwLTggMy42LTggOGwwIDQwYzAgNC40LTMuNiA4LTggOGwtNDAgMGMtNC40IDAtOCAzLjYtOCA4bDAgNDhjMCA0LjQgMy42IDggOCA4bDQwIDBjNC40IDAgOCAzLjYgOCA4bDAgNDBjMCA0LjQgMy42IDggOCA4bDQ4IDBjNC40IDAgOC0zLjYgOC04bDAtNDBjMC00LjQgMy42LTggOC04bDQwIDBjNC40IDAgOC0zLjYgOC04bDAtNDhjMC00LjQtMy42LTgtOC04bC00MCAweiJdfSxEMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToib3NpIixpY29uOls1MTIsNTEyLFtdLCJmNDFhIiwiTTggMjY2LjRjMi4zLTEzNS44IDk3LjQtMjMyLjQgMjEzLjgtMjQ4LjEgMTM4LjgtMTguNiAyNTUuNiA3NS44IDI3OCAyMDEuMSAyMS4zIDExOC44LTQ0IDIzMC0xNTEuNiAyNzQtOS4zIDMuOC0xNC40IDEuNy0xOC03LjctMTcuOC00Ni4zLTM1LjYtOTIuNi01My40LTEzOS0zLjEtOC4xLTEtMTMuMiA3LTE2LjggMjQuMi0xMSAzOS4zLTI5LjQgNDMuMy01NS44IDEuNS05LjcgMS0xOS42LTEuNS0yOS4xcy02LjktMTguNC0xMi45LTI2LjEtMTMuNi0xNC4xLTIyLjItMTguOC0xOC4xLTcuNS0yNy45LTguM2MtMzktMy40LTcxLjggMjMuNy03Ny41IDU5LjctNS4yIDMzIDExLjEgNjMuNyA0MS45IDc3LjcgOS42IDQuNCAxMS41IDguNiA3LjggMTguNC0xNy45IDQ2LjYtMzUuOCA5My4yLTUzLjcgMTM5LjktMi42IDYuOS04LjMgOS4zLTE1LjUgNi41LTUyLjYtMjAuMy0xMDEuNC02MS0xMzAuOC0xMTktMjQuOS00OS4yLTI1LjItODcuNy0yNi44LTEwOC43em0yMC45LTEuOWMuNCA2LjYgLjYgMTQuMyAxLjMgMjIuMSA2LjMgNzEuOSA0OS42IDE0My41IDEzMSAxODMuMSAzLjIgMS41IDQuNCAuOCA1LjYtMi4zIDE0LjktMzkuMSAyOS45LTc4LjIgNDUtMTE3LjMgMS4zLTMuMyAuNi00LjgtMi40LTYuNy0zMS42LTE5LjktNDcuMy00OC41LTQ1LjYtODYgMS0yMS42IDkuMy00MC41IDIzLjgtNTYuMyAzMC0zMi43IDc3LTM5LjggMTE1LjUtMTcuNiAxNS42IDkgMjguMiAyMi4zIDM2LjIgMzguNHMxMS4yIDM0LjIgOSA1MmMtMy42IDMwLjYtMTkuMyA1My45LTQ1LjcgNjkuOC0yLjcgMS42LTMuNSAyLjktMi4zIDYgMTUuMiAzOS4yIDMwLjMgNzguNCA0NS4yIDExNy43IDEuMiAzLjEgMi40IDMuOCA1LjYgMi4zIDM1LjUtMTYuNiA2NS4yLTQwLjMgODguMS03MiAzNC44LTQ4LjIgNDkuMS0xMDEuOSA0Mi4zLTE2MS0xMy43LTExNy41LTExOS40LTIxNC44LTI1NS41LTE5OC0xMDYuMSAxMy0xOTUuMyAxMDIuNS0xOTcuMSAyMjUuOHoiXX0sRTB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdnIixpY29uOls1MTIsNTEyLFtdLCJmMjYwIiwiTTE3OS4yIDIzMC40bDEwMi40IDEwMi40LTEwMi40IDEwMi40LTE3OS4yLTE3OS4yIDE3OS4yLTE3OS4yIDQ0LjggNDQuOC0yNS42IDI1LjYtMTkuMi0xOS4yLTEyOCAxMjggMTI4IDEyOCA1MS41LTUxLjUtNzcuMS03Ni41IDI1LjYtMjUuNnpNMzMyLjggNzYuOGwtMTAyLjQgMTAyLjQgMTAyLjQgMTAyLjQgMjUuNi0yNS42LTc3LjEtNzYuNSA1MS41LTUxLjUgMTI4IDEyOC0xMjggMTI4LTE5LjItMTkuMi0yNS42IDI1LjYgNDQuOCA0NC44IDE3OS4yLTE3OS4yLTE3OS4yLTE3OS4yeiJdfSxOMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYnV5c2VsbGFkcyIsaWNvbjpbNDQ4LDUxMixbXSwiZjIwZCIsIk0yMjQgMTUwLjdsNDIuOSAxNjAuNy04NS44IDAgNDIuOS0xNjAuN3pNNDQ4IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMzgyLjcgNDA1LjNsLTk0LjUtMjk4LjctMTI4LjQgMC05NC41IDI5OC43IDkwLjcgMCAxMTEuNy05MS42IDI0LjIgOTEuNiA5MC44IDB6Il19LFAwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnb29nbGUtcGx1cyIsaWNvbjpbNTEyLDUxMixbXSwiZjJiMyIsIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTE4NS4zIDM4MGMtMzIuOSAwLTY0LjQtMTMuMS04Ny43LTM2LjNzLTM2LjMtNTQuOC0zNi4zLTg3LjcgMTMuMS02NC40IDM2LjMtODcuNyA1NC44LTM2LjMgODcuNy0zNi4zYzMxLjMgMCA2MC4xIDExIDgzIDMyLjNsLTMzLjYgMzIuNmMtMTMuMi0xMi45LTMxLjMtMTkuMS00OS40LTE5LjEtNDIuOSAwLTc3LjIgMzUuNS03Ny4yIDc4LjFTMTQyLjMgMzM0IDE4NS4zIDMzNGMzMi42IDAgNjQuOS0xOS4xIDcwLjEtNTMuM2wtNzAuMSAwIDAtNDIuNiAxMTYuOSAwYzEuMyA2LjggMS45IDEzLjggMS45IDIwLjcgMCA3MC44LTQ3LjUgMTIxLjItMTE4LjggMTIxLjJ6TTQxNS41IDI3My44bDAgMzUuNS0zNS41IDAgMC0zNS41LTM1LjUgMCAwLTM1LjUgMzUuNSAwIDAtMzUuNSAzNS41IDAgMCAzNS41IDM1LjIgMCAwIDM1LjUtMzUuMiAweiJdfSxJMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2NyZWVucGFsIixpY29uOls1MTIsNTEyLFtdLCJlNTcwIiwiTTI3OC42IDIyLjVhMjIuNSAyMi41IDAgMSAxIC00NSAwIDIyLjUgMjIuNSAwIDEgMSA0NSAwek0xOTguNyAyNTlhNTcuNCA1Ny40IDAgMSAxIDExNC44IDAgNTcuNCA1Ny40IDAgMSAxIC0xMTQuOCAwem0xMzguNiA5MWMyMi4zLTE5LjkgMzYuNS00Ny4zIDM5LjktNzdsMTE5LjUgMGMtMy41IDYxLjQtMzAuNCAxMTkuMi03NS4yIDE2MS40LTQ0LjcgNDIuMi0xMDMuOSA2NS44LTE2NS40IDY1LjhTMTM1LjQgNDc2LjYgOTAuNyA0MzQuNEM0NS45IDM5Mi4yIDE5LjEgMzM0LjQgMTUuNSAyNzNsMTE5LjcgMGMzLjQgMjkuNyAxNy42IDU3LjEgMzkuOSA3N3M1MS4yIDMwLjkgODEuMSAzMC45YzI5IDAgNTguNy0xMSA4MS4xLTMwLjl6TTI4LjMgMTQxLjdhMjIuNSAyMi41IDAgMSAxIDQ1LTEuNCAyMi41IDIyLjUgMCAxIDEgLTQ1IDEuNHptNDU1LjYtLjdhMjIuNCAyMi40IDAgMSAxIC00NC45IDAgMjIuNCAyMi40IDAgMSAxIDQ0LjkgMHpNMzE4IDk1LjNjLTE3LjMgMTMuOC0zOS4yIDIyLjgtNjEuOSAyMi44cy00NC42LTktNjEuOS0yMi44Yy0xNy4zLTE0LjctMjguOC0zNS4xLTMyLjQtNTcuNSAxNS4xLTYuNCAzMC44LTExLjMgNDYuOS0xNC41IDAgMTIuNiA1IDI0LjYgMTMuOSAzMy41czIwLjkgMTMuOSAzMy41IDEzLjkgMjQuNi01IDMzLjUtMTMuOSAxMy45LTIwLjkgMTMuOS0zMy41YzE2LjEgMy4yIDMxLjggOC4xIDQ2LjkgMTQuNS0zLjYgMjIuNC0xNS4xIDQyLjgtMzIuNCA1Ny41ek04Mi45IDIzMWMtMjEuNCA3LjYtNDQuNyA3LjQtNjUuOS0uNiAyLTE2LjMgNS42LTMyLjMgMTAuOC00Ny45IDUuNCAzLjEgMTEuMyA1LjEgMTcuNSA2IDYuMiAuOCAxMi40IC40IDE4LjUtMS4yIDYtMS43IDExLjYtNC40IDE2LjYtOC4yczkuMS04LjUgMTIuMi0xMy45IDUuMS0xMS40IDYtMTcuNWMuOC02LjIgLjQtMTIuNS0xLjItMTguNXMtNC40LTExLjYtOC4yLTE2LjZjLTMuOC00LjktOC41LTkuMS0xMy45LTEyLjIgMTAuOC0xMi4zIDIyLjktMjMuNSAzNi0zMy4zIDE3LjYgMTQuMyAyOS41IDM0LjUgMzMuNiA1Ni44cy4xIDQ1LjQtMTEuMiA2NWMtMTEuNCAxOS42LTI5LjQgMzQuNS01MC43IDQyLjF6bTM0Ni40IC4xYy0yMS4zLTcuNi0zOS4zLTIyLjYtNTAuNy00Mi4yLTExLjMtMTkuNi0xNS4yLTQyLjctMTEuMS02NSA0LjEtMjIuMiAxNi00Mi40IDMzLjUtNTYuNyAxMy4xIDkuOCAyNS4yIDIxIDM2IDMzLjMtMTAuNyA2LjQtMTguNCAxNi43LTIxLjUgMjguOC0zLjIgMTItMi4zIDI0LjggNC44IDM1LjYgNi4yIDEwLjggMTYuNCAxOC43IDI4LjQgMjJzMjQuOSAxLjcgMzUuNy00LjNjNS4zIDE1LjUgOC45IDMxLjYgMTAuOSA0Ny44LTIyLjEgOC4xLTQ0LjYgOC4zLTY2IC43eiJdfSxGMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYml0Y29pbiIsaWNvbjpbNTEyLDUxMixbXSwiZjM3OSIsIk04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem0zNTQuMy0zNS4zYzQuOS0zMy0yMC4yLTUwLjctNTQuNi02Mi42bDExLjEtNDQuNy0yNy4yLTYuOC0xMC45IDQzLjVjLTcuMi0xLjgtMTQuNS0zLjUtMjEuOC01LjFsMTAuOS00My44LTI3LjItNi44LTExLjIgNDQuN2MtNS45LTEuMy0xMS43LTIuNy0xNy40LTQuMWwwLS4xLTM3LjUtOS40LTcuMiAyOS4xczIwLjIgNC42IDE5LjggNC45YzExIDIuOCAxMyAxMCAxMi43IDE1LjhsLTEyLjcgNTAuOWMuOCAuMiAxLjcgLjUgMi44IC45LS45LS4yLTEuOS0uNS0yLjktLjdsLTE3LjggNzEuM2MtMS4zIDMuMy00LjggOC40LTEyLjUgNi41IC4zIC40LTE5LjgtNC45LTE5LjgtNC45bC0xMy41IDMxLjEgMzUuNCA4LjhjNi42IDEuNyAxMyAzLjQgMTkuNCA1bC0xMS4zIDQ1LjIgMjcuMiA2LjggMTEuMi00NC43YzcuMiAyIDE0LjQgMy44IDIxLjcgNS42bC0xMS4xIDQ0LjUgMjcuMiA2LjggMTEuMy00NS4xYzQ2LjQgOC44IDgxLjMgNS4yIDk2LTM2LjcgMTEuOC0zMy44LS42LTUzLjMtMjUtNjYgMTcuOC00LjEgMzEuMi0xNS44IDM0LjctMzkuOXptLTYyLjIgODcuMmMtOC40IDMzLjgtNjUuMyAxNS41LTgzLjggMTAuOWwxNC45LTU5LjljMTguNCA0LjYgNzcuNiAxMy43IDY4LjggNDl6bTguNC04Ny43Yy03LjcgMzAuNy01NSAxNS4xLTcwLjQgMTEuM2wxMy41LTU0LjNjMTUuNCAzLjggNjQuOCAxMSA1Ni44IDQzeiJdfSxPMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3dpZnQiLGljb246WzQ0OCw1MTIsW10sImY4ZTEiLCJNNDQ4IDE1Ni4xYzAtNC41LS4xLTktLjItMTMuNS0uMS05LjktMS0xOS43LTIuNi0yOS40LTEuNy05LjctNC44LTE5LjItOS4yLTI4LTktMTcuNy0yMy40LTMyLjEtNDEuMi00MS4xLTguOC00LjUtMTguMy03LjYtMjgtOS4yLTkuNy0xLjYtMTkuNi0yLjUtMjkuNC0yLjYtNC41LS4xLTktLjItMTMuNS0uMkwxMjQuMSAzMmMtNC41IDAtOSAuMS0xMy41IC4yLTIuNCAuMS00LjkgLjItNy40IC4zLTcuNCAuMy0xNC44IDEuMS0yMi4xIDIuMy03LjMgMS4zLTE0LjQgMy4zLTIxLjIgNi4xLTIuMyAxLTQuNiAyLTYuOCAzLjEtNi42IDMuNC0xMi44IDcuNS0xOC40IDEyLjMtMS45IDEuNi0zLjcgMy4zLTUuNCA1LTcgNy0xMi45IDE1LTE3LjQgMjMuOC00LjQgOC44LTcuNiAxOC4zLTkuMiAyOC0xLjYgOS43LTIuNCAxOS42LTIuNSAyOS40LS4xIDQuNS0uMiA5LS4yIDEzLjVMMCAzNTUuOWMwIDQuNSAuMSA5IC4yIDEzLjUgLjEgOS45IDEgMTkuNyAyLjYgMjkuNCAxLjcgOS43IDQuOCAxOS4yIDkuMiAyOCA5IDE3LjcgMjMuNCAzMi4xIDQxLjEgNDEuMSA4LjggNC40IDE4LjMgNy41IDI4IDkuMiA5LjcgMS42IDE5LjYgMi41IDI5LjQgMi42IDQuNSAuMSA5IC4yIDEzLjUgLjJsMTk5LjggMGM0LjUgMCA5LS4xIDEzLjUtLjIgOS45LS4xIDE5LjctMSAyOS40LTIuNiA5LjctMS43IDE5LjItNC44IDI4LTkuMiAxNy43LTkgMzIuMS0yMy40IDQxLjEtNDEuMiA0LjQtOC44IDcuNi0xOC4zIDkuMi0yOCAxLjYtOS43IDIuNS0xOS42IDIuNi0yOS40IC4xLTQuNSAuMi05IC4yLTEzLjVsMC0xODMuOGMwLTUuNCAwLTEwLjcgMC0xNnptLTY5LjkgMjQxYy0yMC0zOC45LTU3LjItMjkuMy03Ni4zLTE5LjUtMS43IDEtMy41IDItNS4yIDNsLS40IC4yYy0zOS41IDIxLTkyLjUgMjIuNS0xNDUuOC0uNC00My40LTE4LjgtODAuMS01MC4zLTEwNS4zLTkwLjQgMTIuMyA5LjEgMjUuNCAxNi45IDM5LjIgMjMuNCA1Ni40IDI2LjQgMTEzIDI0LjUgMTUzIDAtNTctNDMuOC0xMDQuNi0xMDEtMTQxLjEtMTQ3LjItNy04LjEtMTMuMi0xNi44LTE4LjgtMjUuOSA0My43IDQwIDExMi43IDkwLjIgMTM3LjUgMTA0LjEtNTIuNi01NS41LTk4LjktMTIzLjktOTYuNy0xMjEuNyA4Mi44IDgzLjQgMTU5LjIgMTMwLjYgMTU5LjIgMTMwLjYgMi45IDEuNiA1IDIuOCA2LjcgNCAxLjYtNC4xIDMtOC4yIDQuMi0xMi41IDEzLjItNDguMy0xLjctMTAzLjYtMzUuMy0xNDkuMiA3Ni44IDQ2LjEgMTIyLjIgMTMzLjcgMTAzLjYgMjA3LjgtLjQgMS43LTEgMy40LTEuNCA1LjEgMzguNSA0Ny40IDI4IDk4LjIgMjMuMSA4OC42bDAgMHoiXX0sQjB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZpbGVzLXBpbndoZWVsIixpY29uOls1MTIsNTEyLFtdLCJlNjlmIiwiTTI1My41IDI0Ni40TDEzNy4yIDEzMC4yYy0uNi0uNi0xLTEuMy0xLjQtMnMtLjUtMS42LS41LTIuNCAuMi0xLjYgLjUtMi40IC44LTEuNCAxLjQtMkwyNTMuNiA1LjFjLjktLjkgMi0xLjUgMy4yLTEuN3MyLjUtLjEgMy42IC4zIDIuMSAxLjMgMi44IDIuMyAxLjEgMi4yIDEuMSAzLjVsMCAyMzIuNWMwIDEuMy0uMyAyLjUtMSAzLjZzLTEuNyAxLjktMi45IDIuNC0yLjUgLjYtMy43IC4zLTIuNC0uOS0zLjItMS45em00MC4zLTQuNGwwLTEzNC40YzAtLjggLjEtMS42IC41LTIuNHMuOC0xLjUgMS4zLTIuMSAxLjMtMS4xIDItMS40IDEuNi0uNSAyLjQtLjVsMTM0LjQgMGMxLjIgMCAyLjUgLjQgMy41IDEuMXMxLjggMS43IDIuMyAyLjggLjYgMi40IC4zIDMuNi0uOSAyLjMtMS43IDMuMkwzMDQuMyAyNDYuNGMtLjkgLjgtMiAxLjQtMy4yIDEuNnMtMi40IC4xLTMuNS0uNC0yLjEtMS4zLTIuOC0yLjMtMS4xLTIuMi0xLjEtMy40bC4xIC4xem0zMC42IDM1Yy0xLjIgMC0yLjUtLjMtMy41LTFzLTEuOS0xLjYtMi40LTIuOC0uNi0yLjQtLjQtMy42IC44LTIuMyAxLjctMy4yTDQwNCAxODIuMmMuNi0uNiAxLjMtMSAyLTEuNHMxLjYtLjUgMi40LS41IDEuNiAuMiAyLjQgLjUgMS40IC44IDIgMS40bDg0LjQgODQuMmMuOSAuOSAxLjUgMiAxLjcgMy4ycy4xIDIuNS0uMyAzLjYtMS4zIDIuMS0yLjMgMi44LTIuMiAxLjEtMy41IDEuMWwtMTY4LjUgMCAuMS0uMXptOTAuNyAxMzFsLTk1LjMtOTUuMmMtLjktLjktMS41LTItMS43LTMuMnMtLjEtMi41IC40LTMuNyAxLjMtMi4xIDIuNC0yLjggMi4zLTEgMy41LTFsOTUuMiAwYzEuNyAwIDMuMiAuNyA0LjQgMS44czEuOCAyLjggMS44IDQuNGwwIDk1LjNjMCAxLjItLjQgMi41LTEuMSAzLjVzLTEuNyAxLjgtMi44IDIuMy0yLjQgLjYtMy42IC4zLTIuMy0uOS0zLjItMS43ek0xNi44IDMwMi4xbDIxNi45IDBjMS4yIDAgMi41IC40IDMuNSAxLjFzMS44IDEuNyAyLjMgMi44IC42IDIuNCAuMyAzLjYtLjggMi4zLTEuNyAzLjJMMTI5LjcgNDIxLjJjLS42IC42LTEuMyAxLTIgMS40cy0xLjYgLjUtMi40IC41LTEuNi0uMi0yLjQtLjUtMS40LS44LTItMS40TDEyLjMgMzEyLjhjLS45LS45LTEuNS0yLTEuNy0zLjJzLS4xLTIuNSAuNC0zLjYgMS4zLTIuMSAyLjMtMi44IDIuMy0xIDMuNS0xbDAtLjF6TTI2NC4zIDQ2NS4zYzAgLjgtLjIgMS42LS41IDIuNHMtLjggMS41LTEuNCAyLTEuMyAxLTIgMS40LTEuNiAuNS0yLjQgLjVsLTEyOCAwYy0xLjIgMC0yLjUtLjQtMy41LTEuMXMtMS44LTEuNy0yLjMtMi44LS42LTIuNC0uMy0zLjYgLjgtMi4zIDEuNy0zLjJsMTI4LTEyOGMuOS0uOSAyLTEuNSAzLjItMS43czIuNS0uMSAzLjYgLjMgMi4xIDEuMyAyLjggMi4zIDEuMSAyLjIgMS4xIDMuNWwwIDEyOHptNDAtMTMyLjVsODIuOCA4Mi43Yy42IC42IDEgMS4zIDEuNCAycy41IDEuNiAuNSAyLjQtLjIgMS42LS41IDIuNC0uOCAxLjQtMS40IDJMMzA0LjMgNTA3Yy0uOSAuOS0yIDEuNS0zLjIgMS43cy0yLjUgLjEtMy42LS4zLTIuMS0xLjMtMi44LTIuMy0xLjEtMi4yLTEuMS0zLjVsMC0xNjUuNGMwLTEuMiAuNC0yLjUgMS4xLTMuNXMxLjctMS44IDIuOC0yLjMgMi40LS42IDMuNi0uMyAyLjMgLjggMy4yIDEuN3pNNzkgMTIyLjRjMC0xLjIgLjMtMi41IDEtMy41czEuNy0xLjggMi44LTIuMyAyLjQtLjYgMy42LS40IDIuMyAuOCAzLjIgMS43TDIzOC4xIDI2Ni40Yy45IC45IDEuNSAyIDEuNyAzLjJzLjEgMi41LS4zIDMuNi0xLjMgMi4xLTIuMyAyLjgtMi4yIDEuMS0zLjUgMS4xbC0xNDguNCAwYy0xLjcgMC0zLjItLjctNC40LTEuOHMtMS44LTIuOC0xLjgtNC40bDAtMTQ4LjQtLjEtLjF6Il19LFIwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsYXJhdmVsIixpY29uOls1MTIsNTEyLFtdLCJmM2JkIiwiTTUwNC42IDExNS44Yy0uMS0uMi0uMi0uNS0uMy0uNy0uMS0uNC0uMy0uOC0uNS0xLjItLjItLjItLjMtLjUtLjUtLjctLjItLjMtLjUtLjYtLjctLjktLjItLjItLjUtLjQtLjgtLjYtLjMtLjItLjYtLjUtLjktLjdMNDA0LjYgNTUuNWMtMS4yLS43LTIuNi0xLjEtNC0xLjFzLTIuOCAuNC00IDEuMUwzMDAuMyAxMTFjLS4zIC4yLS42IC40LS45IC43LS4zIC4yLS41IC40LS44IC42LS4zIC4zLS41IC42LS43IC45LS4yIC4yLS40IC40LS41IC43LS4yIC40LS40IC44LS41IDEuMi0uMSAuMi0uMiAuNC0uMyAuNy0uMiAuNy0uMyAxLjQtLjMgMi4xbDAgMTA1LjItODAuMiA0Ni4yIDAtMjA1LjljMC0uNy0uMS0xLjQtLjMtMi4xLS4xLS4yLS4yLS40LS4zLS43LS4xLS40LS4zLS44LS41LTEuMi0uMS0uMy0uNC0uNS0uNS0uNy0uMi0uMy0uNS0uNi0uNy0uOS0uMi0uMi0uNS0uNC0uOC0uNi0uMy0uMi0uNi0uNS0uOS0uN0wxMTUuOCAxLjFjLTEuMi0uNy0yLjYtMS4xLTQtMS4xcy0yLjggLjQtNCAxLjFMMTEuNSA1Ni41Yy0uMyAuMi0uNiAuNC0uOSAuNy0uMyAuMi0uNSAuNC0uOCAuNi0uMyAuMy0uNSAuNi0uNyAuOS0uMiAuMy0uNCAuNS0uNiAuNy0uMiAuNC0uNCAuOC0uNSAxLjItLjEgLjItLjIgLjQtLjMgLjctLjIgLjctLjMgMS40LS4zIDIuMWwwIDMyOS43YzAgMS40IC40IDIuOCAxLjEgNHMxLjcgMi4yIDIuOSAyLjlMMjA0IDUxMC45Yy40IC4yIC45IC40IDEuMyAuNSAuMiAuMSAuNCAuMiAuNiAuMyAxLjMgLjQgMi44IC40IDQuMSAwIC4yLS4xIC40LS4yIC42LS4yIC41LS4yIDEtLjMgMS40LS42TDQwNC42IDQwMC4xYzEuMi0uNyAyLjItMS43IDIuOS0yLjlzMS4xLTIuNiAxLjEtNGwwLTEwNS4zIDkyLjItNTMuMWMxLjItLjcgMi4yLTEuNyAyLjktM3MxLjEtMi42IDEuMS00bDAtMTA5LjhjMC0uNy0uMS0xLjQtLjItMi4xek0xMTEuOCAxNy4zbDgwLjIgNDYuMS04MC4yIDQ2LjItODAuMi00Ni4yIDgwLjItNDYuMnptODguMiA2MGwwIDIwMS4zYy0zMy4yIDE5LjEtNTkuOSAzNC41LTgwLjIgNDYuMmwwLTIwMS4zQzE1MyAxMDQuNCAxNzkuNyA4OSAyMDAgNzcuM3ptMCA0MTIuOEwyMy41IDM4OC41IDIzLjUgNzcuM2MyMC4zIDExLjcgNDcuMSAyNy4xIDgwLjIgNDYuMmwwIDIxNS4yYzAgLjMgLjEgLjYgLjEgLjkgMCAuNCAuMSAuOCAuMiAxLjIgLjEgLjMgLjIgLjYgLjQgLjkgLjEgLjMgLjMgLjcgLjQgMSAuMiAuMyAuNCAuNSAuNiAuOCAuMiAuMyAuNCAuNiAuNyAuOCAuMiAuMiAuNSAuNCAuOCAuNiAuMyAuMiAuNiAuNSAuOSAuN2w5Mi4yIDUyLjIgLjEgOTIuNHptOC0xMDYuMkwxMjggMzM4LjZjNTQuNy0zMS41IDExMy41LTY1LjMgMTc2LjMtMTAxLjVsODAuMSA0Ni4xQzM1NSAzMDAgMjk2LjIgMzMzLjUgMjA4IDM4My45em0xODQuNSA0LjZsLTE3Ni41IDEwMS42IDAtOTIuM0MzMTcuNCAzNDAgMzc2LjIgMzA2LjQgMzkyLjUgMjk3bDAgOTEuNHptMC0xMTkuMWMtMjAuMy0xMS42LTQ3LjEtMjctODAuMi00Ni4xbDAtOTEuNGMyMC4zIDExLjcgNDcuMSAyNy4xIDgwLjIgNDYuMmwwIDkxLjN6bTgtMTA1LjNsLTgwLjItNDYuMiA4MC4yLTQ2LjIgODAuMiA0Ni4xLTgwLjIgNDYuMnptOCAxMDUuM2wwLTkxLjNjMzMuMi0xOS4xIDYwLTM0LjUgODAuMy00Ni4ybDAgOTEuNC04MC4zIDQ2LjJ6Il19LEgwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3cGZvcm1zIixpY29uOls0NDgsNTEyLFtdLCJmMjk4IiwiTTQ0OCA3NS4ybDAgMzYxLjdjMCAyNC4zLTE5IDQzLjItNDMuMiA0My4ybC0zNjEuNiAwQzE5LjMgNDgwIDAgNDYxLjQgMCA0MzYuOEwwIDc1LjJDMCA1MS4xIDE4LjggMzIgNDMuMiAzMmwzNjEuNyAwYzI0IDAgNDMuMSAxOC44IDQzLjEgNDMuMnpNNDEwLjcgNDM2LjhsMC0zNjEuNmMwLTMtMi42LTUuOC01LjgtNS44bC05LjMgMC0xMTAuMyA3NC42LTYxLjMtNDkuOS02MS4yIDQ5LjktMTEwLjMtNzQuNy05LjMgMGMtMy4yIDAtNS44IDIuOC01LjggNS44bDAgMzYxLjdjMCAzIDIuNiA1LjggNS44IDUuOGwzNjEuNyAwYzMuMiAuMSA1LjgtMi43IDUuOC01Ljh6TTE1MC4yIDE4NmwwIDM3LTczLjUgMCAwLTM3IDczLjUgMHptMCA3NC40bDAgMzcuMy03My41IDAgMC0zNy4zIDczLjUgMHptMTEuMS0xNDcuM2w1NC00My43LTExOC41IDAgNjQuNSA0My43em0yMTAgNzIuOWwwIDM3LTE5NiAwIDAtMzcgMTk2IDB6bTAgNzQuNGwwIDM3LjMtMTk2IDAgMC0zNy4zIDE5NiAwek0yODYuNyAxMTMuMWw2NC41LTQzLjctMTE4LjQgMCA1My45IDQzLjd6TTM3MS4zIDMzNWwwIDM3LjMtOTkuNCAwIDAtMzcuMyA5OS40IDB6Il19LHEwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcGVha2VyLWRlY2siLGljb246WzUxMiw1MTIsW10sImY4M2MiLCJNMjEzLjkgMjk2TDEwMCAyOTZjLTI2LjUgMC01Mi0xMC41LTcwLjctMjkuM1MwIDIyMi41IDAgMTk2IDEwLjUgMTQ0IDI5LjMgMTI1LjMgNzMuNSA5NiAxMDAgOTZsMTMyLjggMGMxMC42IDAgMjAuOCA0LjIgMjguMyAxMS43czExLjcgMTcuNyAxMS43IDI4LjMtNC4yIDIwLjgtMTEuNyAyOC4zLTE3LjcgMTEuNy0yOC4zIDExLjdMOTggMTc2Yy0yNi41IDAtMjYuNCA0MCAwIDQwbDExMy44IDBjMjYuNSAwIDUyIDEwLjUgNzAuNyAyOS4zczI5LjMgNDQuMiAyOS4zIDcwLjctMTAuNSA1Mi0yOS4zIDcwLjctNDQuMiAyOS4zLTcwLjcgMjkuM0w0MCA0MTZjLTEwLjYgMC0yMC44LTQuMi0yOC4zLTExLjdTMCAzODYuNiAwIDM3NiA0LjIgMzU1LjIgMTEuNyAzNDcuNyAyOS40IDMzNiA0MCAzMzZsMTczLjkgMGMyNi41IDAgMjYuNS00MCAwLTQwek0yOTggNDE2YzEzLjUtOS4yIDI1LTIxIDMzLjgtMzQuN3MxNC43LTI5LjIgMTcuMy00NS4zbDY0LjYgMGMyLjYgMCA1LjItLjYgNy42LTEuNnM0LjYtMi41IDYuNC00LjQgMy4zLTQuMSA0LjItNi41IDEuNS01IDEuNC03LjZsMC0xMjBjMC0yLjYtLjUtNS4yLTEuNC03LjZzLTIuNC00LjYtNC4yLTYuNS00LTMuMy02LjQtNC40LTUtMS42LTcuNi0xLjZsLTExNy4yIDBjOS43LTExLjEgMTUtMjUuMyAxNS00MHMtNS4zLTI4LjktMTUtNDBsMTM2LjkgMGM0My40IDAgNzguNiAzNS44IDc4LjYgODBsMCAxNjBjMCA0NC4yLTM1LjIgODAtNzguNiA4MEwyOTggNDE2eiJdfSxWMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmxpY2tyIixpY29uOls0NDgsNTEyLFtdLCJmMTZlIiwiTTQwMCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDM1MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0xNDQuNSAxOTJhNjMuNSA2My41IDAgMSAxIDAgMTI3IDYzLjUgNjMuNSAwIDEgMSAwLTEyN3ptMTU5IDBhNjMuNSA2My41IDAgMSAxIDAgMTI3IDYzLjUgNjMuNSAwIDEgMSAwLTEyN3oiXX0sVTB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNjLXZpc2EiLGljb246WzU3Niw1MTIsW10sImYxZjAiLCJNNDcwLjEgMjMxLjNzNy42IDM3LjIgOS4zIDQ1bC0zMy40IDBjMy4zLTguOSAxNi00My41IDE2LTQzLjUtLjIgLjMgMy4zLTkuMSA1LjMtMTQuOWwyLjggMTMuNHpNNTc2IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmw0ODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTUyLjUgMzMxLjJsNjMuMi0xNTUuMi00Mi41IDAtMzkuMyAxMDYtNC4zLTIxLjUtMTQtNzEuNGMtMi4zLTkuOS05LjQtMTIuNy0xOC4yLTEzLjFsLTY0LjcgMC0uNyAzLjFjMTUuOCA0IDI5LjkgOS44IDQyLjIgMTcuMWwzNS44IDEzNSA0Mi41IDB6bTk0LjQgLjJsMjUuMi0xNTUuNC00MC4yIDAtMjUuMSAxNTUuNCA0MC4xIDB6bTEzOS45LTUwLjhjLjItMTcuNy0xMC42LTMxLjItMzMuNy00Mi4zLTE0LjEtNy4xLTIyLjctMTEuOS0yMi43LTE5LjIgLjItNi42IDcuMy0xMy40IDIzLjEtMTMuNCAxMy4xLS4zIDIyLjcgMi44IDI5LjkgNS45bDMuNiAxLjcgNS41LTMzLjZjLTcuOS0zLjEtMjAuNS02LjYtMzYtNi42LTM5LjcgMC02Ny42IDIxLjItNjcuOCA1MS40LS4zIDIyLjMgMjAgMzQuNyAzNS4yIDQyLjIgMTUuNSA3LjYgMjAuOCAxMi42IDIwLjggMTkuMy0uMiAxMC40LTEyLjYgMTUuMi0yNC4xIDE1LjItMTYgMC0yNC42LTIuNS0zNy43LTguM2wtNS4zLTIuNS01LjYgMzQuOWM5LjQgNC4zIDI2LjggOC4xIDQ0LjggOC4zIDQyLjIgLjEgNjkuNy0yMC44IDcwLTUzek01MjggMzMxLjRsLTMyLjQtMTU1LjQtMzEuMSAwYy05LjYgMC0xNi45IDIuOC0yMSAxMi45bC01OS43IDE0Mi41IDQyLjIgMHM2LjktMTkuMiA4LjQtMjMuM2w1MS42IDBjMS4yIDUuNSA0LjggMjMuMyA0LjggMjMuM2wzNy4yIDB6Il19LGowdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1cHdvcmsiLGljb246WzY0MCw1MTIsW10sImU2NDEiLCJNNDkzLjkgMjk1LjZjLTUwLjMgMC04My41LTM4LjktOTIuOC01My45IDExLjktOTUuMyA0Ni44LTEyNS40IDkyLjgtMTI1LjQgNDUuNSAwIDgwLjkgMzYuNCA4MC45IDg5LjdzLTM1LjQgODkuNy04MC45IDg5LjdsMC0uMXptMC0yMzcuOGMtODEuOSAwLTEyNy44IDUzLjQtMTQxIDEwOC40LTE0LjktMjgtMjUuOS02NS41LTM0LjUtMTAwLjNsLTExMy4yIDAgMCAxNDFjMCA1MS4xLTIzLjMgODktNjguOCA4OXMtNzEuNi0zNy44LTcxLjYtODlsLjUtMTQxLTY1LjMgMCAwIDE0MWMwIDQxLjEgMTMuMyA3OC40IDM3LjYgMTA1LjEgMjUgMjcuNSA1OS4yIDQxLjggOTguOCA0MS44IDc4LjggMCAxMzMuOC02MC40IDEzMy44LTE0Ni45bDAtOTQuOGM4LjIgMzEuMiAyNy44IDkxLjEgNjUuMyAxNDMuNmwtMzUgMTk5LjQgNjYuNCAwIDIzLjEtMTQxLjNjNy42IDYuMyAxNS43IDEyIDI0LjIgMTcgMjIuMiAxNCA0Ny43IDIxLjkgNzMuOSAyMi44IDAgMCA0IC4yIDYuMSAuMiA4MS4yIDAgMTQ1LjktNjIuOSAxNDUuOS0xNDcuOFM1NzUuMyA1Ny45IDQ5NC4xIDU3LjlsLS4yLS4xeiJdfSxXMHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToia2FrYW8tdGFsayIsaWNvbjpbNTc2LDUxMixbXSwiZTdkNyIsIk0yODggMi41YzE1OS4xIDAgMjg4IDEwMS43IDI4OCAyMjcuMSAwIDEyNS40LTEyOC45IDIyNy4xLTI4OCAyMjcuMS0xNy41IDAtMzQuNi0xLjItNTEuMi0zLjYtMTYuNiAxMS43LTExMi42IDc5LjEtMTIxLjcgODAuNCAwIDAtMy43IDEuNC02LjktLjRzLTIuNi02LjctMi42LTYuN0MxMDYuNiA1MTkuOCAxMzAuNiA0MzcuMiAxMzUgNDIxLjkgNTMuOSAzODEuOCAwIDMxMC42IDAgMjI5LjUgMCAxMDQuMSAxMjguOSAyLjUgMjg4IDIuNXpNODYuMiAxNjEuN2MtOSAwLTE2LjMgNy4zLTE2LjMgMTYuM3M3LjMgMTYuMyAxNi4zIDE2LjNsMjUuOSAwIDAgOTguN2MwIDguOCA3LjUgMTUuOSAxNi42IDE1LjlzMTYuNi03LjEgMTYuNi0xNS45bDAtOTguNyAyNS45IDBjOSAwIDE2LjMtNy4zIDE2LjMtMTYuM3MtNy4zLTE2LjMtMTYuMy0xNi4zbC04NS4xIDB6bTE0MC44IDBjLTEwLjggLjItMTkuMyA4LjQtMjIuMSAxNi40TDE2NS4yIDI4Mi43Yy01IDE1LjctLjYgMjEuNSAzLjkgMjMuNiAzLjIgMS41IDYuOSAyLjMgMTAuNiAyLjMgNi45IDAgMTIuMi0yLjggMTMuOC03LjNsOC4yLTIxLjYgNTAuNyAwIDguMiAyMS41YzEuNiA0LjUgNi45IDcuMyAxMy44IDcuMyAzLjcgMCA3LjMtLjggMTAuNi0yLjMgNC42LTIuMSA5LTcuOSAzLjktMjMuNkwyNDkuMiAxNzguMWMtMi44LTgtMTEuMy0xNi4yLTIyLjItMTYuNHptMTgwLjkgMGMtOS4yIDAtMTYuNiA3LjUtMTYuNiAxNi42bDAgMTEzLjdjMCA5LjIgNy41IDE2LjYgMTYuNiAxNi42czE2LjYtNy41IDE2LjYtMTYuNmwwLTM2LjIgNS44LTUuOCAzOC45IDUxLjZjMy4yIDQuMiA4IDYuNiAxMy4zIDYuNiAzLjYgMCA3LjEtMS4xIDEwLTMuMyAzLjUtMi43IDUuOC02LjYgNi40LTExcy0uNS04LjgtMy4yLTEyLjNsLTQwLjktNTQuMiAzNy45LTM3LjhjMi42LTIuNiAzLjktNi4yIDMuNy0xMC4xLS4yLTMuOS0yLTcuNi00LjktMTAuNS0zLjEtMy4xLTcuMy00LjktMTEuNC00LjktMy42IDAtNi44IDEuMy05LjIgMy43bC00Ni4zIDQ2LjQgMC0zNS43YzAtOS4yLTcuNS0xNi42LTE2LjYtMTYuNnptLTkxLjMgMGMtOS4zIDAtMTYuOSA3LjUtMTYuOSAxNi42bDAgMTEyLjhjMCA4LjQgNy4xIDE1LjIgMTUuOSAxNS4zbDUzLjMgMGM4LjggMCAxNS45LTYuOSAxNS45LTE1LjNzLTcuMi0xNS4yLTE1LjktMTUuMmwtMzUuMyAwIDAtOTcuNmMwLTkuMi03LjYtMTYuNi0xNy0xNi42em0tNzMgODguNmwtMzMuMiAwIDE2LjYtNDcuMSAxNi42IDQ3LjF6Il19LEcwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmbHV0dGVyIixpY29uOls0NDgsNTEyLFtdLCJlNjk0IiwiTTQyOS41IDIzNi4zTDI5MS43IDM3NC4xIDQyOS41IDUxMiAyNzIgNTEyYy0zNi4xLTM2LjEtODIuMS04Mi4xLTEzNy45LTEzNy45bDEzNy45LTEzNy44IDE1Ny41IDB6TTI3MiAwTDE2IDI1NiA5NC44IDMzNC44IDQyOS41IDAgMjcyIDB6Il19LFkwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJidWZmZXIiLGljb246WzQ0OCw1MTIsW10sImY4MzciLCJNNDI4LjIgMzgwLjdMMjMxLjcgNDc4LjVjLTIuMyAxLTQuOCAxLjUtNy4zIDEuNXMtNS0uNS03LjMtMS41TDIwLjUgMzgwLjdjLTQtMi00LTUuMyAwLTcuM0w2Ny42IDM1MGMyLjMtMSA0LjgtMS41IDcuMy0xLjVzNSAuNSA3LjMgMS41bDEzNC44IDY3YzIuMyAxIDQuOCAxLjUgNy4zIDEuNXM1LS41IDcuMy0xLjVsMTM0LjgtNjdjMi4zLTEgNC44LTEuNSA3LjMtMS41czUgLjUgNy4zIDEuNWw0Ny4xIDIzLjRjNCAyIDQgNS4yIDAgNy4yem0wLTEzNi41bC00Ny4xLTIzLjRjLTIuMy0xLTQuOC0xLjUtNy4zLTEuNXMtNSAuNS03LjMgMS41TDIzMS43IDI4Ny44Yy0yLjMgMS00LjggMS41LTcuMyAxLjVzLTUtLjUtNy4zLTEuNUw4Mi4zIDIyMC43Yy0yLjMtMS00LjgtMS41LTcuMy0xLjVzLTUgLjUtNy4zIDEuNUwyMC41IDI0NC4xYy00IDItNCA1LjMgMCA3LjNsMTk2LjUgOTcuOGMyLjMgMSA0LjggMS41IDcuMyAxLjVzNS0uNSA3LjMtMS41bDE5Ni41LTk3LjhjNC0yIDQtNS4zIDAtNy4zek0yMC41IDEzMC40TDIxNyAyMjAuN2M0LjcgMS45IDEwIDEuOSAxNC43IDBsMTk2LjUtOTAuM2M0LTEuOSA0LTQuOSAwLTYuN0wyMzEuNyAzMy40Yy00LjctMS45LTEwLTEuOS0xNC43IDBMMjAuNSAxMjMuN2MtNCAxLjgtNCA0LjkgMCA2Ljd6Il19LFowdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJncmF0aXBheSIsaWNvbjpbNTEyLDUxMixbXSwiZjE4NCIsIk0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTM3NC4zIDIzMy43TDI1Ny43IDM5MS4zIDE0MS4zIDIzMy43Yy05LTEyLjMtMTkuNy01MiAxNC03NC4zIDI5LTE4LjcgNTYuNC00LjMgNzAuNyAxMi4zIDE2LjQgMTguNSA0OC4xIDE3LjQgNjMuNyAwIDE0LjMtMTYuNiA0MS43LTMxIDcwLjMtMTIuMyAzNCAyMi4zIDIzLjMgNjEuOSAxNC4yIDc0LjN6Il19LFgwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnb29nbGUtcGF5IixpY29uOls2NDAsNTEyLFtdLCJlMDc5IiwiTTEwNS43IDIxNWwwIDQxLjIgNTcuMSAwYy0xLjIgNi42LTMuNiAxMi45LTcuMiAxOC41cy04LjQgMTAuNC0xMy45IDE0LjFjLTkuNSA2LjYtMjEuNyAxMC4zLTM2IDEwLjMtMjcuNiAwLTUwLjktMTguOS01OS4zLTQ0LjItNC40LTEzLjMtNC40LTI3LjcgMC00MSA4LjQtMjUuNSAzMS43LTQ0LjQgNTkuMy00NC40IDcuNS0uMSAxNC45IDEuMiAyMS45IDRzMTMuMyA2LjkgMTguNiAxMi4xTDE3Ni41IDE1NWMtMTkuMS0xOC4xLTQ0LjQtMjguMS03MC43LTI3LjgtMTkuNyAuMS0zOC45IDUuNy01NS42IDE2LjFzLTMwLjEgMjUuMy0zOC44IDQzQzMuOSAyMDEuMiAwIDIxNy43IDAgMjM0LjRzMy45IDMzLjIgMTEuMyA0OC4xbDAgLjJjOC43IDE3LjcgMjIuMSAzMi41IDM4LjggNDNzMzUuOSAxNiA1NS42IDE2YzI4LjUgMCA1Mi41LTkuNSA3MC0yNS45IDIwLTE4LjYgMzEuNC00Ni4yIDMxLjQtNzguOSAwLTcuMy0uNi0xNC42LTEuOC0yMS44bC05OS43IDB6bTM4OS40LTRjLTEwLjEtOS40LTIzLjktMTQuMS00MS40LTE0LjEtMjIuNSAwLTM5LjMgOC4zLTUwLjUgMjQuOUw0MjQuMSAyMzVjNy42LTExLjMgMTguMS0xNyAzMS4zLTE3IDguNCAwIDE2LjUgMy4yIDIyLjcgOC44IDMgMi42IDUuNSA1LjkgNy4xIDkuNnMyLjUgNy42IDIuNSAxMS43bDAgNS41Yy05LjEtNS4xLTIwLjYtNy44LTM0LjYtNy44LTE2LjQgMC0yOS42IDMuOS0zOS41IDExLjhzLTE0LjggMTguMy0xNC44IDMxLjZjLS4yIDUuOSAxIDExLjggMy40IDE3LjJzNiAxMC4yIDEwLjUgMTQuMWM5LjIgOC4zIDIxIDEyLjUgMzQuOCAxMi41IDE2LjMgMCAyOS4yLTcuMyAzOS0yMS45bDEgMCAwIDE3LjcgMjIuNiAwIDAtNzguN2MuMS0xNi42LTQuOS0yOS43LTE1LTM5em0tMTkuMiA4OS4zYy0zLjUgMy41LTcuNiA2LjMtMTIuMiA4LjJzLTkuNSAyLjktMTQuNCAyLjljLTYuNyAuMS0xMy4xLTIuMS0xOC4zLTYuMi0yLjQtMS44LTQuNC00LjItNS43LTYuOXMtMi01LjctMi04LjdjMC03IDMuMi0xMi44IDkuNS0xNy40czE0LjUtNyAyNC4xLTdjMTMuMi0uMiAyMy41IDIuOCAzMC44IDguOCAwIDEwLjEtNCAxOC45LTExLjcgMjYuNHptLTkzLjctMTQyYy01LjMtNS4zLTExLjYtOS41LTE4LjYtMTIuM3MtMTQuNC00LjItMjEuOS00bC02Mi43IDAgMCAxODYuNyAyMy42IDAgMC03NS42IDM5IDBjMTYgMCAyOS41LTUuNCA0MC41LTE1LjkgLjktLjkgMS44LTEuOCAyLjYtMi43IDkuNi0xMC41IDE0LjgtMjQuNCAxNC4zLTM4LjZzLTYuNi0yNy43LTE2LjktMzcuNmwwIDB6bS0xNi42IDYyLjJjLTMgMy4yLTYuNiA1LjctMTAuNiA3LjRzLTguNCAyLjUtMTIuNyAyLjNsLTM5LjYgMCAwLTY1LjIgMzkuNiAwYzguNSAwIDE2LjYgMy4zIDIyLjYgOS4yIDYuMSA2LjEgOS42IDE0LjMgOS44IDIzcy0zLjEgMTctOSAyMy4zbDAgMHpNNjE0LjMgMjAxbC0zNi41IDkxLjctLjUgMC0zNy40LTkxLjctMjUuNyAwIDUxLjggMTE5LjYtMjkuNCA2NC4zIDI0LjMgMCA3OS0xODMuOS0yNS43IDB6Il19LFEwdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhcHBsZSIsaWNvbjpbMzg0LDUxMixbXSwiZjE3OSIsIk0zMTkuMSAyNjguN2MtLjItMzYuNyAxNi40LTY0LjQgNTAtODQuOC0xOC44LTI2LjktNDcuMi00MS43LTg0LjctNDQuNi0zNS41LTIuOC03NC4zIDIwLjctODguNSAyMC43LTE1IDAtNDkuNC0xOS43LTc2LjQtMTkuNy01NS44IC45LTExNS4xIDQ0LjUtMTE1LjEgMTMzLjIgMCAyNi4yIDQuOCA1My4zIDE0LjQgODEuMiAxMi44IDM2LjcgNTkgMTI2LjcgMTA3LjIgMTI1LjIgMjUuMi0uNiA0My0xNy45IDc1LjgtMTcuOSAzMS44IDAgNDguMyAxNy45IDc2LjQgMTcuOSA0OC42LS43IDkwLjQtODIuNSAxMDIuNi0xMTkuMy02NS4yLTMwLjctNjEuNy05MC02MS43LTkxLjl6TTI2Mi41IDEwNC41YzI3LjMtMzIuNCAyNC44LTYxLjkgMjQtNzIuNS0yNC4xIDEuNC01MiAxNi40LTY3LjkgMzQuOS0xNy41IDE5LjgtMjcuOCA0NC4zLTI1LjYgNzEuOSAyNi4xIDIgNDkuOS0xMS40IDY5LjUtMzQuM3oiXX0sSzB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InR1bWJsciIsaWNvbjpbMzIwLDUxMixbXSwiZjE3MyIsIk0zMDkuOSA0ODAuM2MtMTMuNiAxNC41LTUwIDMxLjctOTcuNCAzMS43LTEyMC44IDAtMTQ3LTg4LjgtMTQ3LTE0MC42bDAtMTQ0LTQ3LjUgMGMtNS41IDAtMTAtNC41LTEwLTEwbDAtNjhjMC03LjIgNC41LTEzLjYgMTEuMy0xNiA2Mi0yMS44IDgxLjUtNzYgODQuMy0xMTcuMSAuOC0xMSA2LjUtMTYuMyAxNi4xLTE2LjNsNzAuOSAwYzUuNSAwIDEwIDQuNSAxMCAxMGwwIDExNS4yIDgzIDBjNS41IDAgMTAgNC40IDEwIDkuOWwwIDgxLjdjMCA1LjUtNC41IDEwLTEwIDEwbC04My40IDAgMCAxMzMuMmMwIDM0LjIgMjMuNyA1My42IDY4IDM1LjggNC44LTEuOSA5LTMuMiAxMi43LTIuMiAzLjUgLjkgNS44IDMuNCA3LjQgNy45bDIyIDY0LjNjMS44IDUgMy4zIDEwLjYtLjQgMTQuNXoiXX0sSjB0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBob2VuaXgtc3F1YWRyb24iLGljb246WzUxMiw1MTIsW10sImY1MTEiLCJNOTYgNjMuNGM0Ni41LTM2LjEgMTA1LjYtNTYuMSAxNjQuNS01NC42IDI5LjYtLjQgNTkuMSA1LjQgODYuOSAxNS4zLTI0LjEtNC42LTQ5LTYuMy03My40LTIuNS00Mi45IDUuMy04MyAyNy4yLTExMS44IDU5LjIgNS43LTEgMTAuOC0zLjcgMTYtNS45IDE4LjEtNy45IDM3LjUtMTMuMyA1Ny4yLTE0LjggMTkuNy0yLjEgMzkuNi0uNCA1OS4zIDEuOS0xNC40IDIuOC0yOS4xIDQuNi00MyA5LjYtMzQuNCAxMS4xLTY1LjMgMzMuMi04Ni4zIDYyLjYtMTMuOCAxOS43LTIzLjYgNDIuOS0yNC43IDY3LjEtLjQgMTYuNSA1LjIgMzQuOCAxOS44IDQ0IDExLjIgNi44IDI0LjYgOS4yIDM3LjUgNi43IDE1LjQtMi41IDMwLjEtOC42IDQzLjYtMTYuMyAxMS41LTYuOCAyMi43LTE0LjYgMzItMjQuMyAzLjgtMy4yIDIuNS04LjQgMi42LTEyLjgtMi4xLS4zLTQuNC0xLjEtNi4zIC4zLTExLjQgNi4zLTIzLjQgMTEuNC0zNS44IDE1LjQtMjAgNi4yLTQyLjIgOC41LTYyLjEgLjggMTIuOCAxLjcgMjYuMSAuMyAzNy43LTUuNCAyMC4yLTkuNyAzNi44LTI1LjIgNTQuNC0zOC44IDI3LjctMjEuMyA1Ny41LTM5LjkgODguOS01NS4zIDI1LjctMTIgNTIuOS0yMi44IDgxLjYtMjQuMS0xNS42IDEzLjctMzIuMSAyNi41LTQ2LjggNDEuNC0xNC41IDE0LTI3LjUgMjkuNS00MC4xIDQ1LjItMy41IDQuNi05IDYuOS0xMy42IDEwLjItMjIuNCAxNS00MC4zIDM1LjgtNTEuOSA2MC4xLTkuMyAxOS43LTE0LjUgNDEuOS0xMS44IDYzLjYgMS45IDEzLjcgOC43IDI3LjYgMjAuOSAzNC45IDEyLjkgOCAyOSA4LjEgNDMuNSA1LjEgMzIuOC03LjQgNjEuNC0yOC45IDgxLTU1LjggMjAuNC0yNy41IDMwLjUtNjIuMiAyOS4yLTk2LjMtLjUtNy41LTEuNi0xNS0xLjctMjIuNSA4IDE5LjUgMTQuOCAzOS43IDE2LjYgNjAuOCAyIDE0LjMgLjcgMjguOC0xLjYgNDIuOS0xLjkgMTEtNS43IDIxLjUtNy44IDMyLjQgMjAuNC0yMi45IDM0LTUwLjkgMzkuMy04MS4xIDUuNi0zNS41IC43LTcxLjktMTQuMi0xMDQuNiAyMC44IDMyIDMyLjMgNjkuNiAzNS43IDEwNy41IC41IDEyLjcgLjUgMjUuNSAwIDM4LjItMi44IDM0LjMtMTIuOSA2Ny42LTI5LjYgOTcuOC0yNi4xIDQ3LjMtNjggODUuNi0xMTcuMiAxMDgtNzguMyAzNi4yLTE3NC43IDMxLjMtMjQ4LTE0LjctMzktMjMuOC03MC42LTU4LTkxLjQtOTguNy0xNC43LTI4LjktMjMuMy02MC41LTI1LjQtOTIuOWwwLTMxLjNDMy45IDE3MiA0MC45IDEwNS44IDk2IDYzLjR6bTIyMiA4MC4zYzUuNS0uOSAxMC44LTIuNCAxNi00LjUgNS0xLjggOS4yLTUuOSAxMC4zLTExLjItOSA1LTE4IDkuOS0yNi4zIDE1Ljd6Il19LGU0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjZW50ZXJjb2RlIixpY29uOls1MTIsNTEyLFtdLCJmMzgwIiwiTTIwMS44IDI1NC44YTY0LjEgNjQuMSAwIDEgMSAxMjcuNCAxMy44IDY0LjEgNjQuMSAwIDEgMSAtMTI3LjQtMTMuOHptNDEuNiAyNDguOUM5Ni43IDQ5Ni04LjIgMzY1LjUgMTAuMSAyMjQuMyAyMS4zIDEzNy43IDc1LjkgNjcuNCAxNDkuMiAzMi4zIDMxMC4yLTQ0LjggNDk4LjkgNjkuNyA1MDMuOSAyNDguOSA1MDggMzk1LjkgMzg1LjUgNTExLjEgMjQzLjQgNTAzLjd6bTE3OS45LTE4MGMyNy45LTExOC0xNjAuNS0yMDUuOS0yMzcuMi0yMzQuMi01Ny41IDU2LjMtNjkuMSAxODguNi0zMy44IDM0NC40IDY4LjggMTUuOCAxNjkuMS0yNi40IDI3MS0xMTAuMnoiXX0sdDR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRlYmlhbiIsaWNvbjpbNDQ4LDUxMixbXSwiZTYwYiIsIk0zODAuNCAyNDUuNmMzLTcuNiA1LjUtMTQgNS4yLTI0LjRsLTQuMyA5YzQuNC0xMy4yIDQtMjcuMSAzLjYtNDAuNC0uMi02LS4zLTExLjggMC0xNy40bC0xLjgtLjVjLTEuNS00NS4yLTQwLjYtOTMuMS03NS4zLTEwOS40LTMwLTEzLjgtNzYuMS0xNi4yLTk3LjMtNS44IDEuMy0xLjEgNC4yLTIgNi44LTIuN2wuMy0uMWMzLjMtMSA2LTEuNyA0LTIuOS0xOS4yIDEuOS0yNC45IDUuNS0zMS4xIDkuNGwtLjEgMGMtNC42IDIuOS05LjUgNi0yMC4zIDguNy0zLjUgMy40IDEuNyAyIDUuOCAuOXM3LjItMS45LS4xIDIuNGMtMy41IDEtNi42IDEuMy05LjYgMS42bC0uMSAwYy04LjMgLjgtMTUuOCAxLjYtMzAuNyAxNyAuOCAxLjMgMy40LS4yIDUuMy0xLjNsLjEtLjFjMi4zLTEuNCAzLjQtMi0xLjcgNC40LTE5LjEtMi40LTYwLjMgNDMuNy02OS4xIDU5bDQuNiAuOGMtMy4yIDgtNi44IDE0LjgtMTAgMjAuOC00LjMgOC4xLTcuOSAxNC45LTguNyAyMS4zLS4zIDUuMS0xIDExLTEuNyAxNy4zLS4xIDEtLjIgMi0uMyAzbC0uMSAuNmMtMyAyNy4zLTYuNyA2MC44IDMuOSA3M2wtMS4zIDEzYy42IDEuMiAxLjEgMi4zIDEuNiAzLjUgLjIgLjQgLjQgLjggLjUgMS4xIDEgMi4xIDIgNC4yIDMuMyA2LjJsLTMgLjJjNyAyMi4xIDEwLjggMjIuNSAxNS4xIDIyLjkgNC40IC40IDkuMyAuOSAxOC43IDI0LjItMi43LS45LTUuNS0xLjktOS40LTcuMi0uNSA0LjEgNS44IDE2LjMgMTMuMSAyNS44bC0zLjEgMy42YzIuMSAzLjcgNC44IDYuMiA3LjYgOC44IDEgLjkgMi4xIDEuOSAzLjEgMi45LTExLjktNi41IDMuMiAxMy43IDExLjkgMjUuMiAuOCAxLjEgMS41IDIgMi4yIDIuOSAxLjQgMS45IDIuNSAzLjQgMi45IDQuMWwyLjQtNC4yYy0uMyA2LjEgNC4zIDEzLjkgMTMuMSAyNC43bDcuMy0uM2MzIDYgMTQgMTYuNyAyMC43IDE3LjJsLTQuNCA1LjhjOC4xIDIuNiAxMC4zIDQuMyAxMi43IDYuMiAyLjYgMi4xIDUuNCA0LjMgMTYuMSA4LjFsLTQuMi03LjRjMy41IDMgNi4yIDUuOSA4LjggOC43bC4xIC4xYzUuMiA1LjYgOS45IDEwLjYgMTkuNyAxNS4zIDEwLjcgMy43IDE2LjYgNC43IDIyLjcgNS44IC4zIDAgLjYgLjEgLjkgLjEgNS40IC44IDExLjIgMS44IDIwLjggNC41LTEuMS0uMS0yLjItLjEtMy4zLS4xLTIuMy0uMS00LjctLjEtNy0uMS0xNC40LS4yLTI5LjItLjQtNDIuNy01LjItOTYuNi0yNS43LTE4NC45LTEzOS0xNzguNC0yNTUuNi0uNi05LjktLjMtMjAuOSAwLTMwLjcgLjQtMTMuNSAuNy0yNC44LTEuNi0yOC4zbDEtMy4xYzUuMy0xNy40IDExLjctMzguMiAyMy44LTYyLjhsLS4xLS4yIDAtLjFjLjQgLjQgMy40IDMuNCA4LjgtNS44IC44LTEuOCAxLjYtMy43IDIuNC01LjYgLjUtMS4xIC45LTIuMiAxLjQtMy4yIDIuNS02LjEgNS4xLTEyLjMgOC40LTE3LjlsMi42LS42YzEuNy0xMC4xIDE3LTIzLjggMjkuOC0zNS4ybDEuMS0xYzUuNy01LjEgMTAuNy05LjcgMTMuNi0xMy4xbC43IDQuNGMxNy0xNS45IDQ0LjYtMjcuNSA2NS42LTM2LjRsLjUtLjJjNC44LTIgOS4zLTMuOSAxMy4zLTUuNy0zLjQgMy44IDIuMiAyLjcgMTAgMSA0LjgtMSAxMC40LTIuMSAxNS4zLTIuNGwtMy45IDIuMWMtMi43IDEuNC01LjQgMi44LTggNC42IDguMS0yIDExLjctMS40IDE1LjctLjhsLjMgMGMzLjUgLjYgNy4zIDEuMiAxNC42IC4yLTUuNiAuOC0xMi4zIDMtMTEuMiAzLjggNy45IC45IDEyLjgtLjEgMTcuMi0xbC4yIDBjNS41LTEuMSAxMC4zLTIgMTkuMyAuOWwtMS00LjhjNy4zIDIuNiAxMi43IDQuMyAxNy41IDUuOGwuNSAuMWMxMCAzIDE3LjYgNS4zIDM0LjIgMTQuMSAzLjIgLjIgNS4zLS41IDcuNC0xLjJsLjEgMGMzLjYtMS4xIDctMi4xIDE1LjIgMS4yIC4zIC41IC41IDEgLjcgMS40IC4xIC4yIC4yIC41IC4zIC43bDAgLjFjMSAyLjYgMS44IDQuNiAxNC42IDEyLjEgMS43LS43LTIuNy00LjctNi40LTguMmwtLjEtLjFjLS4yLS4xLS4zLS4zLS41LS40IDMyLjIgMTcuMyA2Ny4zIDU0LjEgNzggOTMuNS02LTExLjEtNS4yLTUuNS00LjMgLjUgLjYgNCAxLjIgOC4xLS4yIDcuNSA0LjUgMTIuMSA4LjEgMjQuNSAxMC40IDM3LjRsLS44LTIuOS0uMS0uM2MtMy4zLTExLjktOS42LTM0LjMtMTkuOS00OS4zLS40IDQuMy0yLjggMy45LTUuMiAzLjVsLS4xIDBjLTMuMy0uNi02LjItMS4xLTEuOSAxMi42IDIuNiAzLjggMy4xIDIuNCAzLjUgMS4xIC41LTEuNSAuOS0yLjcgNC43IDUuMiAuMSA0LjEgMSA4LjIgMi4xIDEyLjdsLjEgLjZjLjEgLjMgLjEgLjUgLjIgLjhsLjEgLjZjLjYgMi42IDEuMyA1LjQgMS44IDguNC0xLjEtLjItMi4zLTIuMi0zLjQtNC4yLTEuNC0yLjQtMi44LTQuNy0zLjctMy4yIDIuNCAxMS41IDYuNSAxNy40IDggMTguMy0uMyAuNi0uNiAuNy0xLjEgLjctLjggMC0xLjggLjEtMS45IDUuMyAuNyAxMy43IDMuMyAxMi41IDUuMyAxMS42IC42LS4zIDEuMi0uNiAxLjctLjQtLjYgMi41LTEuNiA1LjEtMi43IDcuOS0yLjggNy4xLTYgMTUuNC0zLjQgMjYuMS0uOC0zLTItNi0zLjEtOC45bC0uMS0uNGMtLjItLjUtLjQtMS0uNi0xLjUtLjMtLjgtLjYtMS42LS45LTIuMy0uNiA0LjQtLjMgNy43LS4xIDEwLjZsMCAuN2MuNCA1LjMgLjcgMTAtMyAxOS45IDQuMy0xNC4yIDMuOC0yNi45LS4yLTIwLjggMSAxMC45LTMuNyAyMC40LTggMjguOWwtLjEgLjJjLTMuNiA3LjEtNi44IDEzLjUtNS45IDE5LjNsLTUuMi03LjFjLTcuNSAxMC45LTcgMTMuMy02LjUgMTUuNWwwIC4xYy41IDEuOSAxIDMuOC0zLjQgMTAuOCAxLjctMi45IDEuMy0zLjYgMS00LjItLjQtLjgtLjctMS41IDEuNy01LjEtMS42IC4xLTUuNSAzLjktMTAuMSA4LjUtMy45IDMuOS04LjUgOC40LTEyLjggMTEuOC0zNy41IDMwLjEtODIuMyAzNC0xMjUuNiAxNy44IC4yLTEtLjItMi4xLTMuMS00LjEtMzYuOC0yOC4yLTU4LjUtNTIuMS01MC45LTEwNy41IDIuMS0xLjYgMy42LTUuOCA1LjMtMTAuOGwuMi0uNCAuMS0uMyAwLS4xYzIuOS04LjQgNi41LTE4LjggMTQuMy0yMy44IDcuOC0xNy4zIDMxLjMtMzMuMyA1Ni40LTMzLjcgMjUuNi0xLjQgNDcuMiAxMy43IDU4LjEgMjcuOS0xOS44LTE4LjQtNTIuMS0yNC03OS43LTEwLjQtMjguMiAxMi43LTQ1IDQzLjgtNDIuNSA3NC43IC4zLS40IC42LS42IC45LS44bC4yLS4yYy42LS41IDEuMS0uOSAxLjQtMy4zLS45IDYwLjIgNjQuOCAxMDQuMyAxMTIuMSA4MmwuNiAxLjNjMTIuNy0zLjUgMTUuOS02LjUgMjAuMy0xMC43bC4xLS4xYzIuMi0yLjEgNC43LTQuNSA4LjktNy4zLS4zIC43LTEuMyAxLjctMi40IDIuNy0yLjIgMi4xLTQuNiA0LjUtMS42IDQuNiA1LTEuMyAxOC41LTEzLjQgMjguNS0yMi4zIC42LS41IDEuMi0xIDEuNy0xLjUgMS41LTEuMyAyLjgtMi41IDQtMy42bC4zLS4zYzEuOS00LjIgMS42LTUuNiAxLjMtN2wwLS4xYy0uNC0xLjYtLjgtMy4zIDIuNC05LjZsNy4zLTMuN2MuOC0yLjEgMS41LTQuMSAyLjItNiAuMi0uNiAuNS0xLjIgLjctMS44bC0uNC0uMi0uMS0uMXpNMjQ4IDMzNC4xYy02LTMtMTMuNy04LjktMTQuOC0xMS40bC0uNCAuM2MtLjMgLjYtLjUgMS4zLS4yIDIuMi0xMi4yLTUuNy0yMy40LTE0LjMtMzIuNi0yNC45IDQuOSA3LjEgMTAuMSAxNC4xIDE3IDE5LjUtNi45LTIuMy0xNS4xLTExLjgtMjEuNi0xOS4zbC0uMS0uMWMtNC4zLTUtNy45LTkuMS05LjctOS41IDE5LjggMzUuNSA4MC41IDYyLjMgMTEyLjMgNDktMTQuNyAuNS0zMy40IC4zLTQ5LjktNS44em03OS4zLTExOS43bC0uMS0uMmMtLjUtMS41LTEuMS0zLjEtMS43LTMuNCAxLjQtNS44IDUuNC0xMC43IDQuNCA0LjYtMSAzLjgtMS44IDEuNS0yLjYtMXptLTQuMiAyMi4yYy0xLjMgNy45LTUgMTUuNS0xMC4xIDIyLjUgLjItMi0xLjItMi40LTIuNi0yLjgtMi45LS44LTUuOS0xLjYgNS42LTE2LjEtLjUgMS45LTIuMSA0LjYtMy43IDcuM2wtLjMgLjRjLTMuNiA1LjktNi43IDExIDQgNC4zbDEtMS44YzIuNi00LjUgNS04LjggNi0xMy44bC4xIDB6bS01NS42IDMzLjljNy4xIC42IDE0LjEgLjYgMjEtMS4xLTIuNSAyLjQtNS4yIDQuOC04LjMgNy4yLTExLjEtMS43LTIxLjItNi0xMi43LTYuMXptLTkyLjYgMTEuNmMzLjYgNy4xIDYuNCAxMS41IDkgMTUuN2wuMSAuMmMyLjMgMy43IDQuNCA3LjEgNi44IDExLjctNS4xLTQuMi04LjctOS41LTEyLjUtMTVsLS4zLS41Yy0xLjQtMi4xLTIuOC00LjItNC40LTYuMmwxLjItNS45IC4xIDB6bTcuNS05LjZjMS42IDMuMyAzLjIgNi40IDUuNyA5LjFsMi42IDcuNy0xLjMtMi4xYy0zLjItNS4zLTYuMy0xMC42LTgtMTYuN2wxIDJ6bTIzOC45LTQxLjZjLTIuMyAxNy40LTcuNyAzNC42LTE2IDUwLjMgNy42LTE0LjkgMTIuNS0zMC45IDE0LjgtNDcuMmwxLjItMy4xek0zNS44IDExMC42Yy40IC44IDEuNCAuNSAyLjMgLjMgMS45LS41IDMuNi0uOS0uMSA3LjYtLjUgLjMtMSAuNy0xLjUgMS0xLjQgLjktMi44IDEuOS0zLjkgMyAxLjktMy44IDMuNS03LjQgMy4yLTExLjl6TTI1LjUgMTUyLjNjLS43IDMuNy0xLjUgNy45LTMuNCAxMy45IC4yLTEuOSAwLTMuNS0uMi00LjlsMC0uMWMtLjQtMy40LS43LTYuMyA0LjMtMTIuOC0uMyAxLjItLjUgMi41LS43IDMuOGwwIC4xeiJdfSxhNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWFzdG9kb24iLGljb246WzQ0OCw1MTIsW10sImY0ZjYiLCJNNDMzIDE3OS4xYzAtOTcuMi02My43LTEyNS43LTYzLjctMTI1LjctNjIuNS0yOC43LTIyOC42LTI4LjQtMjkwLjUgMCAwIDAtNjMuNyAyOC41LTYzLjcgMTI1LjcgMCAxMTUuNy02LjYgMjU5LjQgMTA1LjYgMjg5LjEgNDAuNSAxMC43IDc1LjMgMTMgMTAzLjMgMTEuNCA1MC44LTIuOCA3OS4zLTE4LjEgNzkuMy0xOC4xbC0xLjctMzYuOXMtMzYuMyAxMS40LTc3LjEgMTAuMWMtNDAuNC0xLjQtODMtNC40LTg5LjYtNTQtLjYtNC42LS45LTkuMy0uOS0xMy45IDg1LjYgMjAuOSAxNTguNyA5LjEgMTc4LjcgNi43IDU2LjEtNi43IDEwNS00MS4zIDExMS4yLTcyLjkgOS44LTQ5LjggOS0xMjEuNSA5LTEyMS41ek0zNTcuOSAzMDQuM2wtNDYuNiAwIDAtMTE0LjJjMC00OS43LTY0LTUxLjYtNjQgNi45bDAgNjIuNS00Ni4zIDAgMC02Mi41YzAtNTguNS02NC01Ni42LTY0LTYuOWwwIDExNC4yLTQ2LjcgMGMwLTEyMi4xLTUuMi0xNDcuOSAxOC40LTE3NSAyNS45LTI4LjkgNzkuOC0zMC44IDEwMy44IDYuMWwxMS42IDE5LjUgMTEuNi0xOS41YzI0LjEtMzcuMSA3OC4xLTM0LjggMTAzLjgtNi4xIDIzLjcgMjcuMyAxOC40IDUzIDE4LjQgMTc1bDAgMHoiXX0scjR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNrZXRjaCIsaWNvbjpbNTEyLDUxMixbXSwiZjdjNiIsIk0yNy44IDE2Mi4ybC0xOC41IDI0LjkgOTAuNSAwIDYuOS0xMzAuNy03OC45IDEwNS44ek0zOTYuNiA0NS43TDI2OCAzMiA0MDMuNyAxNzkuMiAzOTYuNiA0NS43ek0xMTIuNSAyMTguM2wtMTEuMi0yMi05MS4xIDAgMjI0LjkgMjYxLjctMTIyLjYtMjM5Ljd6bTItMzEuMmwyODQgMEMzNDAuNiAxMjQuMyAyOTMuMyA3Mi45IDI1Ni42IDMzTDExNC41IDE4Ny4xem0yOTcuMyA5LjFsLTEzMy45IDI2MS44IDIyNC44LTI2MS43LTkwLjkgMCAwLS4xek00MTUuNyA2OWwtOS40LTEyLjYgLjkgMTcuMyA2LjEgMTEzLjQgOTAuMyAwLTg3LjktMTE4LjF6TTExMy44IDkzLjVMMTA5LjIgMTc5LjEgMjQ1IDMyIDExNi40IDQ1LjcgMTEzLjggOTMuNXpNNDAxLjUgMTk2LjJsLTI5MCAwYzE4LjIgMzUuNiA2Ni42IDEzMC4yIDE0NS4xIDI4My44TDQwMS41IDE5Ni4yeiJdfSxpNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2ViLWF3ZXNvbWUiLGljb246WzY0MCw1MTIsW10sImU2ODIiLCJNMzcyLjIgNTJjMCAyMC45LTEyLjQgMzktMzAuMiA0Ny4yTDQ0OCAxOTIgNTUyLjQgMTcxLjFjLTUuMy03LjctOC40LTE3LjEtOC40LTI3LjEgMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGMwIDI2LTIwLjYgNDcuMS00Ni40IDQ4TDQ4MSA0NDIuM2MtMTAuMyAyMy0zMy4yIDM3LjctNTguNCAzNy43bC0yMDUuMiAwYy0yNS4yIDAtNDgtMTQuOC01OC40LTM3LjdMNDYuNCAxOTJDMjAuNiAxOTEuMSAwIDE3MCAwIDE0NCAwIDExNy41IDIxLjUgOTYgNDggOTZzNDggMjEuNSA0OCA0OGMwIDEwLjEtMy4xIDE5LjQtOC40IDI3LjFMMTkyIDE5MiAyOTguMSA5OS4xYy0xNy43LTguMy0zMC0yNi4zLTMwLTQ3LjEgMC0yOC43IDIzLjMtNTIgNTItNTJzNTIgMjMuMyA1MiA1MmwuMSAweiJdfSxvNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2FzcyIsaWNvbjpbNjQwLDUxMixbXSwiZjQxZSIsIk0zMDEuOCAzNzguOWwwIDB6bTI0OS4xLTg3Yy0yMC4xIDAtNDAgNC42LTU4IDEzLjUtNS45LTExLjktMTItMjIuMy0xMy0zMC4xLTEuMi05LjEtMi41LTE0LjUtMS4xLTI1LjNzNy43LTI2LjEgNy42LTI3LjItMS40LTYuNi0xNC4zLTYuNy0yNCAyLjUtMjUuMyA1LjljLTIuMyA2LjItNC4xIDEyLjYtNS4zIDE5LjEtMi4zIDExLjctMjUuOCA1My41LTM5LjEgNzUuMy00LjQtOC41LTguMS0xNi04LjktMjItMS4yLTkuMS0yLjUtMTQuNS0xLjEtMjUuM3M3LjctMjYuMSA3LjYtMjcuMi0xLjQtNi42LTE0LjMtNi43LTI0IDIuNS0yNS4zIDUuOS0yLjcgMTEuNC01LjMgMTkuMS0zMy45IDc3LjMtNDIuMSA5NS40Yy00LjIgOS4yLTcuOCAxNi42LTEwLjQgMjEuNi0uNCAuOC0uNyAxLjMtLjkgMS43IC4zLS41IC41LTEgLjUtLjgtMi4yIDQuMy0zLjUgNi43LTMuNSA2LjdsMCAuMWMtMS43IDMuMi0zLjYgNi4xLTQuNSA2LjEtLjYgMC0xLjktOC40IC4zLTE5LjkgNC43LTI0LjIgMTUuOC02MS44IDE1LjctNjMuMS0uMS0uNyAyLjEtNy4yLTcuMy0xMC43LTkuMS0zLjMtMTIuNCAyLjItMTMuMiAyLjJzLTEuNCAyLTEuNCAyIDEwLjEtNDIuNC0xOS40LTQyLjRjLTE4LjQgMC00NCAyMC4yLTU2LjYgMzguNS03LjkgNC4zLTI1IDEzLjYtNDMgMjMuNS02LjkgMy44LTE0IDcuNy0yMC43IDExLjQtLjUtLjUtLjktMS0xLjQtMS41LTM1LjgtMzguMi0xMDEuOS02NS4yLTk5LjEtMTE2LjUgMS0xOC43IDcuNS02Ny44IDEyNy4xLTEyNy40IDk4LTQ4LjggMTc2LjMtMzUuNCAxODkuOC01LjYgMTkuNCA0Mi41LTQxLjkgMTIxLjYtMTQzLjcgMTMzLTM4LjggNC4zLTU5LjItMTAuNy02NC4zLTE2LjMtNS4zLTUuOS02LjEtNi4yLTguMS01LjEtMy4zIDEuOC0xLjIgNyAwIDEwLjEgMyA3LjkgMTUuNSAyMS45IDM2LjggMjguOSAxOC43IDYuMSA2NC4yIDkuNSAxMTkuMi0xMS44IDYxLjgtMjMuOCAxMDkuOS05MC4xIDk1LjgtMTQ1LjYtMTQuNC01Ni40LTEwNy45LTc0LjktMTk2LjMtNDMuNS01Mi43IDE4LjctMTA5LjcgNDguMS0xNTAuNyA4Ni40LTQ4LjcgNDUuNi01Ni41IDg1LjMtNTMuMyAxMDEuOSAxMS40IDU4LjkgOTIuNiA5Ny4zIDEyNS4xIDEyNS43LTEuNiAuOS0zLjEgMS43LTQuNSAyLjUtMTYuMyA4LjEtNzguMiA0MC41LTkzLjcgNzQuNy0xNy41IDM4LjggMi45IDY2LjYgMTYuMyA3MC40IDQxLjggMTEuNiA4NC42LTkuMyAxMDcuNi00My42czIwLjItNzkuMSA5LjYtOTkuNWMtLjEtLjMtLjMtLjUtLjQtLjggNC4yLTIuNSA4LjUtNSAxMi44LTcuNSA4LjMtNC45IDE2LjQtOS40IDIzLjUtMTMuMy00IDEwLjgtNi45IDIzLjgtOC40IDQyLjYtMS44IDIyIDcuMyA1MC41IDE5LjEgNjEuNyA1LjIgNC45IDExLjUgNSAxNS40IDUgMTMuOCAwIDIwLTExLjQgMjYuOS0yNSA4LjUtMTYuNiAxNi0zNS45IDE2LTM1LjlzLTkuNCA1Mi4yIDE2LjMgNTIuMmM5LjQgMCAxOC44LTEyLjEgMjMtMTguM2wwIC4xcy4yLS40IC43LTEuMmMxLTEuNSAxLjUtMi40IDEuNS0yLjRsMC0uM2MzLjgtNi41IDEyLjEtMjEuNCAyNC42LTQ2IDE2LjItMzEuOCAzMS43LTcxLjUgMzEuNy03MS41IDEuNSA4LjcgMy42IDE3LjMgNi4yIDI1LjggMi44IDkuNSA4LjcgMTkuOSAxMy40IDMwLTMuOCA1LjItNi4xIDguMi02LjEgOC4yIDAgLjEgMCAuMSAuMSAuMi0zIDQtNi40IDguMy05LjkgMTIuNS0xMi44IDE1LjItMjggMzIuNi0zMCAzNy42LTIuNCA1LjktMS44IDEwLjMgMi44IDEzLjcgMy40IDIuNiA5LjQgMyAxNS43IDIuNSAxMS41LS44IDE5LjYtMy42IDIzLjUtNS40IDcuMi0yLjYgMTQtNi4xIDIwLjItMTAuNiAxMi41LTkuMiAyMC4xLTIyLjQgMTkuNC0zOS44LS40LTkuNi0zLjUtMTkuMi03LjMtMjguMiAxLjEtMS42IDIuMy0zLjMgMy40LTUgMTkuOC0yOC45IDM1LjEtNjAuNiAzNS4xLTYwLjYgMS41IDguNyAzLjYgMTcuMyA2LjIgMjUuOCAyLjQgOC4xIDcuMSAxNyAxMS40IDI1LjctMTguNiAxNS4xLTMwLjEgMzIuNi0zNC4xIDQ0LjEtNy40IDIxLjMtMS42IDMwLjkgOS4zIDMzLjEgNC45IDEgMTEuOS0xLjMgMTcuMS0zLjUgNy43LTIuNiAxNS02LjMgMjEuNi0xMS4xIDEyLjUtOS4yIDI0LjYtMjIuMSAyMy44LTM5LjYtLjMtNy45LTIuNS0xNS44LTUuNC0yMy40IDE1LjctNi42IDM2LjEtMTAuMiA2Mi4xLTcuMiA1NS43IDYuNSA2Ni42IDQxLjMgNjQuNSA1NS44cy0xMy44IDIyLjYtMTcuNyAyNS01LjEgMy4zLTQuOCA1LjFjLjUgMi42IDIuMyAyLjUgNS42IDEuOSA0LjYtLjggMjkuMi0xMS44IDMwLjMtMzguNyAxLjYtMzQtMzEuMS03MS40LTg5LTcxLjFsMCAwek0xMjEuOCA0MzYuNmMtMTguNCAyMC4xLTQ0LjIgMjcuNy01NS4zIDIxLjMtMTEuOS02LjktNy4yLTM2LjUgMTUuNS01Ny45IDEzLjgtMTMgMzEuNi0yNSA0My40LTMyLjQgMi43LTEuNiA2LjYtNCAxMS40LTYuOSAuOC0uNSAxLjItLjcgMS4yLS43IC45LS42IDEuOS0xLjEgMi45LTEuNyA4LjMgMzAuNCAuMyA1Ny4yLTE5LjEgNzguM2wwIDB6bTEzNC40LTkxLjRjLTYuNCAxNS43LTE5LjkgNTUuNy0yOC4xIDUzLjYtNy0xLjgtMTEuMy0zMi4zLTEuNC02Mi4zIDUtMTUuMSAxNS42LTMzLjEgMjEuOS00MC4xIDEwLjEtMTEuMyAyMS4yLTE0LjkgMjMuOC0xMC40IDMuNSA1LjktMTIuMiA0OS40LTE2LjIgNTkuMnptMTExIDUzYy0yLjcgMS40LTUuMiAyLjMtNi40IDEuNi0uOS0uNSAxLjEtMi40IDEuMS0yLjRzMTMuOS0xNC45IDE5LjQtMjEuN2MzLjItNCA2LjktOC43IDEwLjktMTMuOSAwIC41IC4xIDEgLjEgMS42LS4xIDE3LjktMTcuMyAzMC0yNS4xIDM0LjhsMCAwem04NS42LTE5LjVjLTItMS40LTEuNy02LjEgNS0yMC43IDIuNi01LjcgOC42LTE1LjMgMTktMjQuNSAxLjIgMy41IDEuOCA3LjEgMS45IDEwLjgtLjEgMjIuNS0xNi4yIDMwLjktMjUuOSAzNC40bDAgMHoiXX0sSzFlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS13aGF0c2FwcCIsaWNvbjpbNDQ4LDUxMixbIndoYXRzYXBwLXNxdWFyZSJdLCJmNDBjIiwiTTkyLjEgMjU0LjZjMCAyNC45IDcgNDkuMiAyMC4yIDcwLjFsMy4xIDUtMTMuMyA0OC42IDQ5LjktMTMuMSA0LjggMi45YzIwLjIgMTIgNDMuNCAxOC40IDY3LjEgMTguNGwuMSAwYzcyLjYgMCAxMzMuMy01OS4xIDEzMy4zLTEzMS44IDAtMzUuMi0xNS4yLTY4LjMtNDAuMS05My4yLTI1LTI1LTU4LTM4LjctOTMuMi0zOC43LTcyLjcgMC0xMzEuOCA1OS4xLTEzMS45IDEzMS44ek0yNzQuOCAzMzBjLTEyLjYgMS45LTIyLjQgLjktNDcuNS05LjktMzYuOC0xNS45LTYxLjgtNTEuNS02Ni45LTU4LjctLjQtLjYtLjctLjktLjgtMS4xLTItMi42LTE2LjItMjEuNS0xNi4yLTQxIDAtMTguNCA5LTI3LjkgMTMuMi0zMi4zIC4zLS4zIC41LS41IC43LS44IDMuNi00IDcuOS01IDEwLjYtNSAyLjYgMCA1LjMgMCA3LjYgLjFsLjggMGMyLjMgMCA1LjIgMCA4LjEgNi44IDEuMiAyLjkgMyA3LjMgNC45IDExLjggMy4zIDggNi43IDE2LjMgNy4zIDE3LjYgMSAyIDEuNyA0LjMgLjMgNi45LTMuNCA2LjgtNi45IDEwLjQtOS4zIDEzLTMuMSAzLjItNC41IDQuNy0yLjMgOC42IDE1LjMgMjYuMyAzMC42IDM1LjQgNTMuOSA0Ny4xIDQgMiA2LjMgMS43IDguNi0xIDIuMy0yLjYgOS45LTExLjYgMTIuNS0xNS41IDIuNi00IDUuMy0zLjMgOC45LTJzMjMuMSAxMC45IDI3LjEgMTIuOWMuOCAuNCAxLjUgLjcgMi4xIDEgMi44IDEuNCA0LjcgMi4zIDUuNSAzLjYgLjkgMS45IC45IDkuOS0yLjQgMTkuMS0zLjMgOS4zLTE5LjEgMTcuNy0yNi43IDE4Ljh6TTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0xNDguMSAzOTMuOUw2NCA0MTYgODYuNSAzMzMuOGMtMTMuOS0yNC0yMS4yLTUxLjMtMjEuMi03OS4zIC4xLTg3LjQgNzEuMi0xNTguNSAxNTguNi0xNTguNSA0Mi40IDAgODIuMiAxNi41IDExMi4yIDQ2LjUgMjkuOSAzMCA0Ny45IDY5LjggNDcuOSAxMTIuMiAwIDg3LjQtNzIuNyAxNTguNS0xNjAuMSAxNTguNS0yNi42IDAtNTIuNy02LjctNzUuOC0xOS4zeiJdfSxzNHQ9SzFlLG40dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJza3lwZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjE3ZSIsIk00MjQuNyAyOTkuOGMyLjktMTQgNC43LTI4LjkgNC43LTQzLjggMC0xMTMuNS05MS45LTIwNS4zLTIwNS4zLTIwNS4zLTE0LjkgMC0yOS43IDEuNy00My44IDQuNy0xOS0xNC43LTQyLjYtMjMuNC02OC4zLTIzLjQtNjEuOCAwLTExMiA1MC4yLTExMiAxMTIgMCAyNS43IDguNyA0OS4zIDIzLjMgNjguMi0yLjkgMTQtNC43IDI4LjktNC43IDQzLjggMCAxMTMuNSA5MS45IDIwNS4zIDIwNS4zIDIwNS4zIDE0LjkgMCAyOS43LTEuNyA0My44LTQuNyAxOSAxNC42IDQyLjYgMjMuMyA2OC4yIDIzLjMgNjEuOCAwIDExMi01MC4yIDExMi0xMTIgLjEtMjUuNi04LjYtNDkuMi0yMy4yLTY4LjF6TTIzMC4xIDM5MS4zYy02NS42IDAtMTIwLjUtMjkuMi0xMjAuNS02NSAwLTE2IDktMzAuNiAyOS41LTMwLjYgMzEuMiAwIDM0LjEgNDQuOSA4OC4xIDQ0LjkgMjUuNyAwIDQyLjMtMTEuNCA0Mi4zLTI2LjMgMC0xOC43LTE2LTIxLjYtNDItMjgtNjIuNS0xNS40LTExNy44LTIyLTExNy44LTg3LjIgMC01OS4yIDU4LjYtODEuMSAxMDkuMS04MS4xIDU1LjEgMCAxMTAuOCAyMS45IDExMC44IDU1LjQgMCAxNi45LTExLjQgMzEuOC0zMC4zIDMxLjgtMjguMyAwLTI5LjItMzMuNS03NS0zMy41LTI1LjcgMC00MiA3LTQyIDIyLjUgMCAxOS44IDIwLjggMjEuOCA2OS4xIDMzIDQxLjQgOS4zIDkwLjcgMjYuOCA5MC43IDc3LjYgMCA1OS4xLTU3LjEgODYuNS0xMTIgODYuNXoiXX0sbDR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFuZ3VsYXIiLGljb246WzQ0OCw1MTIsW10sImY0MjAiLCJNMTg1LjcgMjY4LjFsNzYuMiAwLTM4LjEtOTEuNi0zOC4xIDkxLjZ6TTIyMy44IDMyTDE2IDEwNi40IDQ3LjggMzgyLjEgMjIzLjggNDgwIDM5OS44IDM4Mi4xIDQzMS42IDEwNi40IDIyMy44IDMyek0zNTQgMzczLjhsLTQ4LjYgMC0yNi4yLTY1LjQtMTEwLjYgMC0yNi4yIDY1LjQtNDguNyAwIDEzMC4xLTI5Mi4zIDEzMC4yIDI5Mi4zeiJdfSxjNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToib3BlbnN1c2UiLGljb246WzY0MCw1MTIsW10sImU2MmIiLCJNNDcxLjEgMTAyLjdzLS4zIDE4LjMtLjMgMjAuM2MtOS4xLTMtNzQuNC0yNC4xLTEzNS43LTI2LjMtNTEuOS0xLjgtMTIyLjgtNC4zLTIyMyA1Ny4zLTE5LjQgMTIuNC03My45IDQ2LjEtOTkuNiAxMDkuNy01LjUgMTMuMy0xMi42IDQzLjMtNS41IDcxLjQgMy4zIDEyLjggOC45IDI0LjkgMTYuNSAzNS43IDE3LjQgMjUgNDYuNiA0MS42IDc4LjEgNDQuNCA0NC40IDMuOSA3OC4xLTE2IDkwLTUzLjMgOC4yLTI1LjggMC02My42LTMxLjUtODIuOS0yNS42LTE1LjctNTMuMy0xMi4xLTY5LjItMS42LTEzLjkgOS4yLTIxLjggMjMuNS0yMS42IDM5LjIgLjMgMjcuOCAyNC4zIDQyLjYgNDEuNSA0Mi42IDUuNCAwIDEwLjctLjkgMTUuOC0yLjcgNi41LTEuOCAxMy4zLTYuNSAxMy4zLTE0LjkgMC0xMi4xLTExLjYtMTQuOC0xNi44LTEzLjktMi45IC41LTQuNSAyLTExLjggMi40LTItLjItMTItMy4xLTEyLTE0bDAtLjFjLjItMTIuMyAxMy4yLTE4IDI1LjUtMTYuOSAzMi4zIDIuOCA0Ny43IDQwLjcgMjguNSA2NS43LTE4LjMgMjMuNy03Ni42IDIzLjItOTkuNy0yMC40LTI2LTQ5LjIgMTIuNy0xMTEuMiA4Ny05OC40IDMzLjIgNS43IDgzLjYgMzUuNSAxMDIuNCAxMDQuM2w0NS45IDBjLTUuNy0xNy42LTguOS02OC4zIDQyLjctNjguMyA1Ni43IDAgNjMuOSAzOS45IDc5LjggNjguM2w0OC42IDBjLTEyLjgtMTguMy0yMS43LTM4LjctMTguOS01NS44IDUuNi0zMy44IDM5LjctMTguNCA4Mi40LTE3LjQgNjYuNSAuNCAxMDIuMS0yNyAxMDMuMS0yOCAzLjctMy4xIDYuNS0xNS44IDctMTcuNyAxLjMtNS4xLTMuMi0yLjQtMy4yLTIuNC04LjcgNS4yLTMwLjUgMTUuMi01MC45IDE1LjYtMjUuMyAuNS03Ni4yLTI1LjQtODEuNi0yOC4yLS4zLS40IC4xIDEuMi0xMS0yNS41IDg4LjQgNTguMyAxMTguMyA0MC41IDE0NS4yIDIxLjcgLjgtLjYgNC4zLTIuOSAzLjYtNS43LTEzLjgtNDguMS0yMi40LTYyLjctMzQuNS02OS42LTM3LTIxLjYtMTI1LTM0LjctMTI5LjItMzUuMyAuMS0uMS0uOS0uMy0uOSAuN3ptNjAuNCA3Mi44YTM3LjYgMzcuNiAwIDEgMSA3NS4yIDIuNiAzNy42IDM3LjYgMCAxIDEgLTc1LjItMi42em0zOC42LTI1LjNjLTMuNi0uMy03LjEgLjEtMTAuNSAxLjJzLTYuNSAyLjktOS4yIDUuMy00LjggNS4zLTYuMyA4LjUtMi40IDYuNy0yLjUgMTAuMyAuNSA3LjEgMS44IDEwLjQgMy4zIDYuMyA1LjggOC45IDUuNSA0LjUgOC44IDUuOSA2LjkgMiAxMC40IDEuOWMzLjYgLjMgNy4xLS4xIDEwLjUtMS4yczYuNS0yLjkgOS4yLTUuMyA0LjgtNS4zIDYuMy04LjUgMi40LTYuNyAyLjUtMTAuMy0uNS03LjEtMS44LTEwLjQtMy4zLTYuMy01LjgtOC45LTUuNS00LjUtOC44LTUuOS02LjktMi0xMC40LTEuOXptNC4zIDI4LjhjLTE1LjQgMC0xNS40LTE1LjYgMC0xNS42czE1LjQgMTUuNiAwIDE1LjZ6Il19LGQ0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkcm9wYm94IixpY29uOls1NzYsNTEyLFtdLCJmMTZiIiwiTTI4OC40IDExNi4zbC0xMzIgODQuMyAxMzIgODQuMy0xMzIgODQuMy0xMzIuNC04NS4xIDEzMi4zLTg0LjMtMTMyLjMtODMuNSAxMzIuMy04NC4zIDEzMi4xIDg0LjN6TTE1NS42IDM5NS43bDEzMi04NC4zIDEzMiA4NC4zLTEzMiA4NC4zLTEzMi04NC4zek0yODguNCAyODQuMWwxMzItODQuMy0xMzItODMuNiAxMzEuMy04NC4yIDEzMi4zIDg0LjMtMTMyLjMgODQuMyAxMzIuMyA4NC4yLTEzMi4zIDg0LjMtMTMxLjMtODV6Il19LGY0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkZWV6ZXIiLGljb246WzUxMiw1MTIsW10sImUwNzciLCJNMTQuOCAxMDEuMUM2LjYgMTAxLjEgMCAxMjcuNiAwIDE2MC4zczYuNiA1OS4yIDE0LjggNTkuMiAxNC44LTI2LjUgMTQuOC01OS4yLTYuNi01OS4yLTE0LjgtNTkuMnpNNDQ4LjcgNDAuOWMtNy43IDAtMTQuNSAxNy4xLTE5LjQgNDQuMS03LjctNDYuNy0yMC4yLTc3LTM0LjItNzctMTYuOCAwLTMxLjEgNDIuOS0zOCAxMDUuNC02LjYtNDUuNC0xNi44LTc0LjItMjguMy03NC4yLTE2LjEgMC0yOS42IDU2LjktMzQuNyAxMzYuMi05LjQtNDAuOC0yMy4yLTY2LjMtMzguMy02Ni4zcy0yOC44IDI1LjUtMzguMyA2Ni4zYy01LjEtNzkuMy0xOC42LTEzNi4yLTM0LjctMTM2LjItMTEuNSAwLTIxLjcgMjguOC0yOC4zIDc0LjItNi42LTYyLjUtMjEuMi0xMDUuNC0zNy44LTEwNS40LTE0IDAtMjYuNSAzMC40LTM0LjIgNzctNC44LTI3LTExLjctNDQuMS0xOS40LTQ0LjEtMTQuMyAwLTI2IDU5LjItMjYgMTMyLjFTNDkgMzA1LjIgNjMuMyAzMDUuMmM1LjkgMCAxMS41LTkuOSAxNS44LTI2LjggNi45IDYxLjcgMjEuMiAxMDQuMSAzOCAxMDQuMSAxMyAwIDI0LjUtMjUuNSAzMi4xLTY1LjYgNS40IDc2LjMgMTguNiAxMzAuNCAzNC4yIDEzMC40IDkuNyAwIDE4LjYtMjEuNCAyNS4zLTU2LjQgNy45IDcyLjIgMjYuMyAxMjIuNyA0Ny43IDEyMi43czM5LjUtNTAuNSA0Ny43LTEyMi43YzYuNiAzNSAxNS42IDU2LjQgMjUuMyA1Ni40IDE1LjYgMCAyOC44LTU0LjEgMzQuMi0xMzAuNCA3LjcgNDAuMSAxOS40IDY1LjYgMzIuMSA2NS42IDE2LjYgMCAzMC45LTQyLjMgMzgtMTA0LjEgNC4zIDE2LjggOS43IDI2LjggMTUuOCAyNi44IDE0LjMgMCAyNi01OS4yIDI2LTEzMi4xUzQ2MyA0MC45IDQ0OC43IDQwLjl6bTQ4LjUgNjAuMmMtOC4yIDAtMTQuOCAyNi41LTE0LjggNTkuMnM2LjYgNTkuMiAxNC44IDU5LjIgMTQuOC0yNi41IDE0LjgtNTkuMi02LjYtNTkuMi0xNC44LTU5LjJ6Il19LHU0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjcmVhdGl2ZS1jb21tb25zLXNhbXBsaW5nIixpY29uOls1MTIsNTEyLFtdLCJmNGYwIiwiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptMy42IDUzLjJjMi44LS4zIDExLjUgMSAxMS41IDExLjVsNi42IDEwNy4yIDQuOS01OS4zYzAtNiA0LjctMTAuNiAxMC42LTEwLjZzMTAuNiA0LjcgMTAuNiAxMC42YzAgMi41LS41LTUuNyA1LjcgODEuNWw1LjgtNjQuMmMuMy0yLjkgMi45LTkuMyAxMC4yLTkuMyAzLjggMCA5LjkgMi4zIDEwLjYgOC45bDExLjUgOTYuNSA1LjMtMTIuOGMxLjgtNC40IDUuMi02LjYgMTAuMi02LjZsNTggMCAwIDIxLjMtNTAuOSAwLTE4LjIgNDQuM2MtMy45IDkuOS0xOS41IDkuMS0yMC44LTMuMWwtNC0zMS45LTcuNSA5Mi42Yy0uMyAzLTMgOS4zLTEwLjIgOS4zLTMgMC05LjgtMi4xLTEwLjYtOS4zIDAtMS45IC42IDUuOC02LjItNzcuOWwtNS4zIDcyLjJjLTEuMSA0LjgtNC44IDkuMy0xMC42IDkuMy0yLjkgMC05LjgtMi0xMC42LTkuMyAwLTEuOSAuNSA2LjctNS44LTg3LjdMMjU1IDM4My45YzAgNi4zLTMuNiAxMi40LTEwLjYgMTIuNC01LjIgMC0xMC42LTQuMS0xMC42LTEyTDIyOCAyOTYuNmMtNS44IDkyLjUtNS4zIDg0LTUuMyA4NS45LTEuMSA0LjgtNC44IDkuMy0xMC42IDkuMy0zIDAtOS44LTIuMS0xMC42LTkuMyAwLS43LS40LTEuMS0uNC0yLjZsLTYuMi04OC42LTQuOSA1Ni43Yy0uNyA2LjUtNi43IDkuMy0xMC42IDkuMy01LjggMC05LjYtNC4xLTEwLjYtOC45TDE1Ny43IDI3MmMtMiA0LTMuNSA4LjQtMTEuMSA4LjRsLTUxLjQgMCAwLTIxLjMgNDQuOCAwIDEzLjctMjcuOWM0LjQtOS45IDE4LjItNy4yIDE5LjkgMi43bDMuMSAyMC40IDguNC05Ny45YzAtNiA0LjgtMTAuNiAxMC42LTEwLjYgLjUgMCAxMC42LS4yIDEwLjYgMTIuNGw0LjkgNjkuMSA2LjYtOTIuNmMwLTEwLjEgOS41LTEwLjYgMTAuMi0xMC42IC42IDAgMTAuNiAuNyAxMC42IDEwLjZsNS4zIDgwLjYgNi4yLTk3LjljLjEtMS4xLS42LTEwLjMgOS45LTExLjV6Il19LHA0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJqZWRpLW9yZGVyIixpY29uOls0NDgsNTEyLFtdLCJmNTBlIiwiTTM5OC45IDM3My42Yzk1LjktMTIyLjEgMTcuMi0yMzMuMSAxNy4yLTIzMy4xIDQ1LjQgODUuOC00MS40IDE3MC41LTQxLjQgMTcwLjUgMTA1LTE3MS41LTYwLjUtMjcxLjUtNjAuNS0yNzEuNSA5Ni45IDcyLjctMTAuMSAxOTAuNy0xMC4xIDE5MC43IDg1LjggMTU4LjQtNjguNiAyMzAuMS02OC42IDIzMC4xcy0uNC0xNi45LTIuMi04NS43YzQuMyA0LjUgMzQuNSAzNi4yIDM0LjUgMzYuMmwtMjQuMi00Ny40IDYyLjYtOS4xLTYyLjYtOS4xIDIwLjItNTUuNS0zMS40IDQ1LjljLTIuMi04Ny43LTcuOC0zMDUuMS03LjktMzA2LjkgMCAxLTUuNiAyMTktNy45IDMwNi45bC0zMS40LTQ1LjkgMjAuMiA1NS41LTYyLjYgOS4xIDYyLjYgOS4xLTI0LjIgNDcuNCAzNC41LTM2LjJjLTEuOCA2OC44LTIuMiA4NS43LTIuMiA4NS43UzU5LjEgMzg4LjYgMTQ0LjkgMjMwLjJjMCAwLTEwNy0xMTguMS0xMC4xLTE5MC43IDAgMC0xNjUuNSA5OS45LTYwLjUgMjcxLjUgMCAwLTg2LjgtODQuOC00MS40LTE3MC41IDAgMC03OC43IDExMSAxNy4yIDIzMy4xIDAgMC0yNi4yLTE2LjEtNDkuNC03Ny43IDAgMCAxNi45IDE4My4zIDIyMiAxODUuN2w0LjEgMGMyMDUtMi40IDIyMi0xODUuNyAyMjItMTg1LjctMjMuNiA2MS41LTQ5LjkgNzcuNy00OS45IDc3Ljd6Il19LGg0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyLXByb2plY3QiLGljb246WzU3Niw1MTIsW10sImY0ZjciLCJNNTc4LjUgMjI2LjZDNTc4LjUgMTE5LjEgNDQ4LjQgMzIgMjg4IDMyUy0yLjUgMTE5LjEtMi41IDIyNi42YzAgOTUuOCAxMDMuMyAxNzUuNCAyMzkuNCAxOTEuNWwwIDYxLjkgOTkuMSAwIDAtNjEuNWMyNC4zLTIuNyA0Ny42LTcuNCA2OS40LTEzLjlsNDAuMSA3NS40IDExMiAwLTY3LjQtMTEzLjdjNTQuNS0zNS40IDg4LjQtODQuOSA4OC40LTEzOS43ek0xMTEuNyAyNDEuMWMwLTczLjUgOTguOS0xMzMgMjIwLjgtMTMzczIxMS45IDQwLjcgMjExLjkgMTMzYzAgNTAuMS0yNi41IDg1LTcwLjMgMTA2LjQtMi40LTEuNi00LjctMi45LTYuNC0zLjctMTAuMi01LjItMjcuOC0xMC41LTI3LjgtMTAuNXM4Ni42LTYuNCA4Ni42LTkyLjctOTAuNi04Ny45LTkwLjYtODcuOWwtMTk5IDAgMCAyMDguM2MtNzQuMS0yMS41LTEyNS4yLTY3LjEtMTI1LjItMTE5Ljl6bTIyNS4xIDM4LjNsMC01NS42YzU3LjggMCA4Ny44LTYuOCA4Ny44IDI3LjMgMCAzNi41LTM4LjIgMjguMy04Ny44IDI4LjN6bS0uOSA3Mi41bDI2LjYgMGMxMC44IDAgMTguOSAxMS43IDI0IDE5LjItMTYuMSAxLjktMzMgMi44LTUwLjYgMi45bDAtMjIuMXoiXX0sbTR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imluc3RhbG9kIixpY29uOls1MTIsNTEyLFtdLCJlMDgxIiwiTTE1My42IDQ4MGwyMzMuNyAwIDExNS40LTIwNC4yLTI5OC4zIDU3LjQtNTAuOCAxNDYuOHpNNTA1IDI0MC4xTDM4Ny40IDMyIDE1NS45IDMyIDM2MC41IDI2Ny45IDUwNSAyNDAuMXpNMTI0LjYgNDguOEw3LjUgMjU2IDEyMy41IDQ2MS4yIDIyNS45IDE2NS42IDEyNC42IDQ4Ljh6Il19LGc0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjYW5hZGlhbi1tYXBsZS1sZWFmIixpY29uOls1MTIsNTEyLFtdLCJmNzg1IiwiTTM4My44IDM1MS43YzIuNS0yLjUgMTA1LjItOTIuNCAxMDUuMi05Mi40bC0xNy41LTcuNWMtMTAtNC45LTcuNC0xMS41LTUtMTcuNCAyLjQtNy42IDIwLjEtNjcuMyAyMC4xLTY3LjNzLTQ3LjcgMTAtNTcuNyAxMi41Yy03LjUgMi40LTEwLTIuNS0xMi41LTcuNXMtMTUtMzIuNC0xNS0zMi40LTUyLjYgNTkuOS01NS4xIDYyLjNjLTEwIDcuNS0yMC4xIDAtMTcuNi0xMCAwLTEwIDI3LjYtMTI5LjYgMjcuNi0xMjkuNnMtMzAuMSAxNy40LTQwLjEgMjIuNGMtNy41IDUtMTIuNiA1LTE3LjYtNS01LjEtNy41LTQyLjctNzkuOC00Mi43LTc5LjhzLTM3LjUgNzIuMy00Mi41IDc5LjhjLTUgMTAtMTAgMTAtMTcuNiA1LTEwLTUtNDAuMS0yMi40LTQwLjEtMjIuNFMxODMuMyAxODIgMTgzLjMgMTkyYzIuNSAxMC03LjUgMTcuNS0xNy42IDEwLTIuNS0yLjUtNTUuMS02Mi4zLTU1LjEtNjIuM3MtMTIuNSAyNy4zLTE1IDMyLjMtNSA5LjktMTIuNSA3LjVDNzMgMTc3IDI1LjQgMTY3IDI1LjQgMTY3UzQzIDIyNi43IDQ1LjUgMjM0LjNjMi40IDYgNSAxMi41LTUgMTcuNEwyMyAyNTkuM3MxMDIuNiA4OS45IDEwNS4yIDkyLjRjNS4xIDUgMTAgNy41IDUuMSAyMi41LTUuMSAxNS0xMC4xIDM1LjEtMTAuMSAzNS4xczk1LjItMjAuMSAxMDUuMy0yMi42YzguNy0uOSAxOC4zIDIuNSAxOC4zIDEyLjVTMjQxIDUxMiAyNDEgNTEybDMwIDBzLTUuOC0xMDIuNy01LjgtMTEyLjggOS41LTEzLjQgMTguNC0xMi41YzEwIDIuNSAxMDUuMiAyMi42IDEwNS4yIDIyLjZzLTUtMjAuMS0xMC0zNS4xIDAtMTcuNSA1LTIyLjV6Il19LHg0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJldGhlcmV1bSIsaWNvbjpbMzIwLDUxMixbXSwiZjQyZSIsIk0zMTEuOSAyNjAuOEwxNjAgMzUzLjYgOCAyNjAuOCAxNjAgMCAzMTEuOSAyNjAuOHpNMTYwIDM4My40TDggMjkwLjYgMTYwIDUxMiAzMTIgMjkwLjYgMTYwIDM4My40eiJdfSxiNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaG91enoiLGljb246WzQ0OCw1MTIsW10sImYyN2MiLCJNMjc2IDMzMC43bC0xMDQuNiAwIDAgMTQ5LjMtMTU0LjMgMCAwLTQ0OCAxMDkuNSAwIDAgMTA0LjUgMzA1LjEgODUuNiAwIDI1Ny45LTE1NS43IDAgMC0xNDkuM3oiXX0sdjR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InZpYmVyIixpY29uOls1MTIsNTEyLFtdLCJmNDA5IiwiTTQ0NC4zIDQ5LjljLTEyLjctMTEuNy02NC4xLTQ5LTE3OC43LTQ5LjUgMCAwLTEzNS4xLTguMS0yMDAuOSA1Mi4zLTM2LjYgMzYuNi00OS41IDkwLjMtNTAuOSAxNTYuOHMtMy4xIDE5MS4xIDExNyAyMjQuOWwuMSAwLS4xIDUxLjZzLS44IDIwLjkgMTMgMjUuMWMxNi42IDUuMiAyNi40LTEwLjcgNDIuMy0yNy44IDguNy05LjQgMjAuNy0yMy4yIDI5LjgtMzMuNyA4Mi4yIDYuOSAxNDUuMy04LjkgMTUyLjUtMTEuMiAxNi42LTUuNCAxMTAuNS0xNy40IDEyNS43LTE0MiAxNS44LTEyOC42LTcuNi0yMDkuOC00OS44LTI0Ni41ek00NTguMiAyODdjLTEyLjkgMTA0LTg5IDExMC42LTEwMyAxMTUuMS02IDEuOS02MS41IDE1LjctMTMxLjIgMTEuMiAwIDAtNTIgNjIuNy02OC4yIDc5LTUuMyA1LjMtMTEuMSA0LjgtMTEtNS43IDAtNi45IC40LTg1LjcgLjQtODUuN2wwIDBDNDMuNCAzNzIuNyA0OS40IDI2Ni42IDUwLjUgMjExLjFzMTEuNi0xMDEgNDIuNi0xMzEuNmM1NS43LTUwLjUgMTcwLjQtNDMgMTcwLjQtNDMgOTYuOSAuNCAxNDMuMyAyOS42IDE1NC4xIDM5LjQgMzUuNyAzMC42IDUzLjkgMTAzLjggNDAuNiAyMTEuMXptLTEzOS04MC44Yy40IDguNi0xMi41IDkuMi0xMi45IC42LTEuMS0yMi0xMS40LTMyLjctMzIuNi0zMy45LTguNi0uNS03LjgtMTMuNCAuNy0xMi45IDI3LjkgMS41IDQzLjQgMTcuNSA0NC44IDQ2LjJ6bTIwLjMgMTEuM2MxLTQyLjQtMjUuNS03NS42LTc1LjgtNzkuMy04LjUtLjYtNy42LTEzLjUgLjktMTIuOSA1OCA0LjIgODguOSA0NC4xIDg3LjggOTIuNS0uMSA4LjYtMTMuMSA4LjItMTIuOS0uM3ptNDcgMTMuNGMuMSA4LjYtMTIuOSA4LjctMTIuOSAuMS0uNi04MS41LTU0LjktMTI1LjktMTIwLjgtMTI2LjQtOC41LS4xLTguNS0xMi45IDAtMTIuOSA3My43IC41IDEzMyA1MS40IDEzMy43IDEzOS4yek0zNzUuMiAzMjlsMCAuMmMtMTAuOCAxOS0zMSA0MC01MS44IDMzLjNsLS4yLS4zYy0yMS4xLTUuOS03MC44LTMxLjUtMTAyLjItNTYuNS0xNi4yLTEyLjgtMzEtMjcuOS00Mi40LTQyLjQtMTAuMy0xMi45LTIwLjctMjguMi0zMC44LTQ2LjYtMjEuMy0zOC41LTI2LTU1LjctMjYtNTUuNy02LjctMjAuOCAxNC4yLTQxIDMzLjMtNTEuOGwuMiAwYzkuMi00LjggMTgtMy4yIDIzLjkgMy45IDAgMCAxMi40IDE0LjggMTcuNyAyMi4xIDUgNi44IDExLjcgMTcuNyAxNS4yIDIzLjggNi4xIDEwLjkgMi4zIDIyLTMuNyAyNi42bC0xMiA5LjZjLTYuMSA0LjktNS4zIDE0LTUuMyAxNHMxNy44IDY3LjMgODQuMyA4NC4zYzAgMCA5LjEgLjggMTQtNS4zbDkuNi0xMmM0LjYtNiAxNS43LTkuOCAyNi42LTMuNyAxNC43IDguMyAzMy40IDIxLjIgNDUuOCAzMi45IDcgNS43IDguNiAxNC40IDMuOCAyMy42eiJdfSxKMWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToia2lja3N0YXJ0ZXIiLGljb246WzQ0OCw1MTIsWyJzcXVhcmUta2lja3N0YXJ0ZXIiXSwiZjNiYiIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0zMjAuOCAyMzNsLTIzLjMgMjMuMSAyMy4zIDIyLjljMjQuMSAyMy45IDI0LjEgNjMgMCA4Ni45cy02My40IDIzLjktODcuNiAwbC04LjUtOC40Yy0xMS4zIDE2LTI5LjcgMjYuNS01MC45IDI2LjUtMzQuMSAwLTYxLjktMjcuNS02MS45LTYxLjRsMC0xMzMuMmMwLTMzLjggMjcuNy02MS40IDYxLjktNjEuNCAyMS4xIDAgMzkuNiAxMC41IDUwLjkgMjYuNWw4LjUtOC40YzI0LjEtMjMuOSA2My40LTIzLjkgODcuNiAwczI0LjEgNjMgMCA4Ni45eiJdfSx5NHQ9SjFlLHc0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcG90aWZ5IixpY29uOls1MTIsNTEyLFtdLCJmMWJjIiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMzU2LjcgMzcyLjljLTQuMiAwLTYuOC0xLjMtMTAuNy0zLjYtNjIuNC0zNy42LTEzNS0zOS4yLTIwNi43LTI0LjUtMy45IDEtOSAyLjYtMTEuOSAyLjYtOS43IDAtMTUuOC03LjctMTUuOC0xNS44IDAtMTAuMyA2LjEtMTUuMiAxMy42LTE2LjggODEuOS0xOC4xIDE2NS42LTE2LjUgMjM3IDI2LjIgNi4xIDMuOSA5LjcgNy40IDkuNyAxNi41cy03LjEgMTUuNC0xNS4yIDE1LjR6bTI2LjktNjUuNmMtNS4yIDAtOC43LTIuMy0xMi4zLTQuMi02Mi41LTM3LTE1NS43LTUxLjktMjM4LjYtMjkuNC00LjggMS4zLTcuNCAyLjYtMTEuOSAyLjYtMTAuNyAwLTE5LjQtOC43LTE5LjQtMTkuNHM1LjItMTcuOCAxNS41LTIwLjdjMjcuOC03LjggNTYuMi0xMy42IDk3LjgtMTMuNiA2NC45IDAgMTI3LjYgMTYuMSAxNzcgNDUuNSA4LjEgNC44IDExLjMgMTEgMTEuMyAxOS43LS4xIDEwLjgtOC41IDE5LjUtMTkuNCAxOS41em0zMS03Ni4yYy01LjIgMC04LjQtMS4zLTEyLjktMy45LTcxLjItNDIuNS0xOTguNS01Mi43LTI4MC45LTI5LjctMy42IDEtOC4xIDIuNi0xMi45IDIuNi0xMy4yIDAtMjMuMy0xMC4zLTIzLjMtMjMuNiAwLTEzLjYgOC40LTIxLjMgMTcuNC0yMy45IDM1LjItMTAuMyA3NC42LTE1LjIgMTE3LjUtMTUuMiA3MyAwIDE0OS41IDE1LjIgMjA1LjQgNDcuOCA3LjggNC41IDEyLjkgMTAuNyAxMi45IDIyLjYgMCAxMy42LTExIDIzLjMtMjMuMiAyMy4zeiJdfSxNNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibGVhbnB1YiIsaWNvbjpbNTc2LDUxMixbXSwiZjIxMiIsIk0zODYuNiAxMTEuNWwxNS4xIDI0OS0xMS0uM2MtMzYuMi0uOC03MS42IDguOC0xMDIuNyAyOC0zMS0xOS4yLTY2LjQtMjgtMTAyLjctMjgtNDUuNiAwLTgyLjEgMTAuNy0xMjMuNSAyNy43TDkzLjIgMTI5LjZjMjguNS0xMS44IDYxLjUtMTguMSA5Mi4yLTE4LjEgNDEuMiAwIDczLjggMTMuMiAxMDIuNyA0Mi41IDI3LjctMjguMyA1OS00MS43IDk4LjUtNDIuNXpNNTY5LjIgNDQ4Yy0yNS41IDAtNDcuNS01LjItNzAuNS0xNS42LTM0LjMtMTUuNi03MC0yNS0xMDcuOS0yNS0zOSAwLTc0LjkgMTIuOS0xMDIuNyA0MC42LTI3LjctMjcuNy02My43LTQwLjYtMTAyLjctNDAuNi0zNy45IDAtNzMuNiA5LjMtMTA3LjkgMjUtMjIuMiA5LjktNDQuNyAxNS42LTY5LjIgMTUuNkw3IDQ0OCA0OS42IDk4LjljMzkuMy0yMi4yIDg3LTM0LjkgMTMyLjMtMzQuOSAzNy4xIDAgNzUuMiA3LjcgMTA2LjIgMjkuMSAzMS0yMS40IDY5LjItMjkuMSAxMDYuMi0yOS4xIDQ1LjMgMCA5MyAxMi42IDEzMi4zIDM0LjlMNTY5LjIgNDQ4em0tNDMuNC00NC43TDQ5MS44IDEyM2MtMzAuNy0xNC02Ny4yLTIxLjQtMTAxLTIxLjQtMzguNCAwLTc0LjQgMTIuMS0xMDIuNyAzOC43LTI4LjMtMjYuNi02NC4yLTM4LjctMTAyLjctMzguNy0zMy44IDAtNzAuMyA3LjQtMTAxIDIxLjRsLTM0IDI4MC4yYzQ3LjItMTkuNSA4Mi45LTMzLjUgMTM1LTMzLjUgMzcuNiAwIDcwLjggOS42IDEwMi43IDI5LjYgMzEuOC0yMCA2NS4xLTI5LjYgMTAyLjctMjkuNiA1Mi4yIDAgODcuOCAxNCAxMzUgMzMuNXoiXX0sejR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImphdmEiLGljb246WzM4NCw1MTIsW10sImY0ZTQiLCJNMjc3LjggMzEyLjljOS44LTYuNyAyMy40LTEyLjUgMjMuNC0xMi41cy0zOC43IDctNzcuMiAxMC4yYy00Ny4xIDMuOS05Ny43IDQuNy0xMjMuMSAxLjMtNjAuMS04IDMzLTMwLjEgMzMtMzAuMXMtMzYuMS0yLjQtODAuNiAxOWMtNTIuNSAyNS40IDEzMCAzNyAyMjQuNSAxMi4xem0tODUuNC0zMi4xYy0xOS00Mi43LTgzLjEtODAuMiAwLTE0NS44IDEwMy43LTgxLjggNTAuNS0xMzUgNTAuNS0xMzUgMjEuNSA4NC41LTc1LjYgMTEwLjEtMTEwLjcgMTYyLjYtMjMuOSAzNS45IDExLjcgNzQuNCA2MC4yIDExOC4yek0zMDcgMTA0LjZjLjEgMC0xNzUuMiA0My44LTkxLjUgMTQwLjIgMjQuNyAyOC40LTYuNSA1NC02LjUgNTRzNjIuNy0zMi40IDMzLjktNzIuOUMyMTYgMTg4LjEgMTk1LjQgMTY5LjMgMzA3IDEwNC42em0tNi4xIDI3MC41Yy0uNSAxLTEuMiAxLjgtMiAyLjYgMTI4LjMtMzMuNyA4MS4xLTExOC45IDE5LjgtOTcuMy0zLjMgMS4yLTYuMiAzLjQtOC4yIDYuMyAzLjYtMS4zIDcuMy0yLjMgMTEtMyAzMS02LjUgNzUuNSA0MS41LTIwLjYgOTEuNHpNMzQ4IDQzNy40czE0LjUgMTEuOS0xNS45IDIxLjJjLTU3LjkgMTcuNS0yNDAuOCAyMi44LTI5MS42IC43LTE4LjMtNy45IDE2LTE5IDI2LjgtMjEuMyAxMS4yLTIuNCAxNy43LTIgMTcuNy0yLTIwLjMtMTQuMy0xMzEuMyAyOC4xLTU2LjQgNDAuMiAyMDQuMiAzMy4yIDM3Mi40LTE0LjkgMzE5LjQtMzguOHpNMTI0LjUgMzk2Yy03OC43IDIyIDQ3LjkgNjcuNCAxNDguMSAyNC41LTkuOC0zLjgtMTkuMi04LjQtMjguMi0xMy44LTQ0LjcgOC41LTY1LjQgOS4xLTEwNiA0LjUtMzMuNS0zLjgtMTMuOS0xNS4yLTEzLjktMTUuMnptMTc5LjggOTcuMmMtNzguNyAxNC44LTE3NS44IDEzLjEtMjMzLjMgMy42IDAtLjEgMTEuOCA5LjcgNzIuNCAxMy42IDkyLjIgNS45IDIzMy44LTMuMyAyMzcuMS00Ni45IDAgMC02LjQgMTYuNS03Ni4yIDI5Ljd6TTI2MC43IDM1M2MtNTkuMiAxMS40LTkzLjUgMTEuMS0xMzYuOCA2LjYtMzMuNS0zLjUtMTEuNi0xOS43LTExLjYtMTkuNy04Ni44IDI4LjggNDguMiA2MS40IDE2OS41IDI1LjktNy44LTIuOC0xNS03LjEtMjEuMS0xMi44eiJdfSxrNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibmZjLXN5bWJvbCIsaWNvbjpbNTEyLDUxMixbXSwiZTUzMSIsIk0zNjAuOSAzMi40YzcuNy0xLjMgMTUuNyAuNSAyMS4yIDUgODQuMSA1OC43IDEyOS45IDEzNi4zIDEyOS45IDIxNy43IDAgODMuMS00NS44IDE2MC44LTEyOS45IDIxOS41LTQuOCA0LTExLjcgNS45LTE4LjYgNS4zLTctLjYtMTMuNS0zLjYtMTguNC04LjVMMTYxLjcgMjg4LjdjLTUuNi01LjUtOC43LTEzLTkuNi0yMC45IDAtNy44IDQtMTUuMyA5LjUtMjAuOSA1LjYtNS41IDEzLjEtOC43IDIwLjktOC43IDcuOSAwIDE1LjQgMy4xIDIwLjkgOC42TDM2OC41IDQxMS4yYzU0LjYtNDQuNyA4NC4zLTk5LjIgODQuMy0xNTYuMSAwLTYxLjYtMzYuOS0xMjIuMi0xMDMuOS0xNjkuMy02LjQtNC41LTEwLjgtMTEuNC0xMi4xLTE5LjEtMS40LTcuNyAuNC0xNS43IDUtMjIuMSA0LjUtNi40IDExLjQtMTAuOCAxOS4xLTEyLjF6bS0yMDYgNDQ3LjJjLTcuNyAxLjMtMTUuNi0uNS0yMi4xLTUtODMuMS01OC43LTEyOS0xMzYuNC0xMjktMjE5LjUgMC04MS40IDQ1LjgtMTU5IDEyOS0yMTcuNyA1LjctNCAxMi42LTUuOSAxOS42LTUuMyA2LjkgLjYgMTMuNCAzLjYgMTguMyA4LjVMMzU0LjEgMjIzLjNjNS42IDUuNSA4LjcgMTMgOC43IDIwLjkgLjEgNi45LTMgMTUuMy04LjYgMjAuOS01LjUgNS41LTEzIDguNy0yMC45IDguNy03LjggMC0xNi4yLTMuMS0yMC45LTguNkwxNDcuMyAxMDAuN2MtNTQuNiA0NS4yLTg0LjMgOTkuMi04NC4zIDE1NC40IDAgNjMuNCAzNi45IDEyNCAxMDMuMSAxNzEuMSA3LjMgNC42IDExLjYgMTEuNCAxMyAxOS4yIDEuMyA3LjctLjUgMTUuNy01IDIyLjFzLTExLjQgMTAuNy0xOS4yIDEyLjF6Il19LFM0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3b2R1IixpY29uOls2NDAsNTEyLFtdLCJlMDg4IiwiTTE3OC40IDMzOS43bC0zNy4zIDAtMjguOS0xMTYuMi0uNSAwLTI4LjUgMTE2LjItMzggMC00NS4yLTE3MC44IDM3LjUgMCAyNyAxMTYuMiAuNSAwIDI5LjctMTE2LjIgMzUuMiAwIDI5LjIgMTE3LjcgLjUgMCAyOC0xMTcuNyAzNi44IDAtNDUuOSAxNzAuOHptOTMtMTI3YzM5IDAgNjQuMSAyNS44IDY0LjEgNjUuMyAwIDM5LjItMjUuMSA2NS02NC4xIDY1LTM4LjcgMC02My45LTI1LjgtNjMuOS02NSAwLTM5LjUgMjUuMS02NS4zIDYzLjktNjUuM3ptMCAxMDQuOGMyMy4yIDAgMzAuMS0xOS45IDMwLjEtMzkuNSAwLTE5LjktNi45LTM5LjctMzAuMS0zOS43LTI3LjcgMC0yOS45IDE5LjktMjkuOSAzOS43IDAgMTkuNiA2LjkgMzkuNSAyOS45IDM5LjV6bTE2My43IDYuNWwtLjUgMGMtNy45IDEzLjQtMjEuOCAxOS4xLTM3LjUgMTkuMS0zNy4zIDAtNTUuNS0zMi01NS41LTY2LjIgMC0zMy4yIDE4LjQtNjQuMSA1NC44LTY0LjEgMTQuNiAwIDI4LjkgNi4yIDM2LjggMTguNGwuMiAwIDAtNjIuMiAzNCAwIDAgMTcwLjgtMzIuMyAwIDAtMTUuOHptLTI5LjctODUuNmMtMjIuMiAwLTI5LjkgMTkuMS0yOS45IDM5LjUgMCAxOS40IDguOCAzOS43IDI5LjkgMzkuNyAyMi41IDAgMjkuMi0xOS42IDI5LjItMzkuOSAwLTIwLjEtNy4yLTM5LjItMjkuMi0zOS4yek01OTMgMzM5LjdsLTMyLjMgMCAwLTE3LjItLjcgMGMtOC42IDEzLjktMjMuNCAyMC42LTM3LjggMjAuNi0zNi4xIDAtNDUuMi0yMC4zLTQ1LjItNTAuOWwwLTc2LjEgMzQgMCAwIDY5LjhjMCAyMC4zIDYgMzAuNCAyMS44IDMwLjQgMTguNCAwIDI2LjMtMTAuMyAyNi4zLTM1LjRsMC02NC44IDM0IDAgMCAxMjMuNnptOS41LTM2LjhsMzcuNSAwIDAgMzYuOC0zNy41IDAgMC0zNi44eiJdfSxlMmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLXN0ZWFtIixpY29uOls0NDgsNTEyLFsic3RlYW0tc3F1YXJlIl0sImYxYjciLCJNMTY1LjYgMzA5LjFjMTguNiA3LjcgMjcuMyAyOC45IDE5LjYgNDcuNHMtMjkgMjcuMi00Ny42IDE5LjRsLTI4LjUtMTEuOGM1IDEwLjYgMTMuOCAxOS40IDI1LjQgMjQuMiAyNS4yIDEwLjUgNTQuMS0xLjQgNjQuNi0yNi41IDUuMS0xMi4xIDUuMS0yNS41IC4xLTM3LjctNS4xLTEyLjEtMTQuNS0yMS42LTI2LjctMjYuNy0xMi4xLTUtMjUtNC44LTM2LjQtLjVsMjkuNSAxMi4yek00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NmwwIDE0NC43IDExNi42IDQ4LjFjMTItOC4yIDI2LjItMTIuMSA0MC43LTExLjNsNTUuNC04MC4yIDAtMS4xYzAtNDguMiAzOS4zLTg3LjUgODcuNi04Ny41czg3LjYgMzkuMyA4Ny42IDg3LjVjMCA0OS4yLTQwLjkgODguNy04OS42IDg3LjVsLTc5IDU2LjNjMS42IDM4LjUtMjkuMSA2OC44LTY1LjcgNjguOC0zMS44IDAtNTguNS0yMi43LTY0LjUtNTIuN0wwIDMxOS4yIDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNDEuOSAxOTYuMmE1OC40IDU4LjQgMCAxIDAgMTE2LjggMCA1OC40IDU4LjQgMCAxIDAgLTExNi44IDB6bTEwMi40LS4xYTQzLjkgNDMuOSAwIDEgMSAtODcuOCAwIDQzLjkgNDMuOSAwIDEgMSA4Ny44IDB6Il19LEM0dD1lMmUsTDR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNyZWF0aXZlLWNvbW1vbnMtbmMtZXUiLGljb246WzUxMiw1MTIsW10sImY0ZTkiLCJNMjU1LjcgOEMxMTEuNiA4IDggMTI0LjggOCAyNTYgOCAzOTIuMyAxMTkuNyA1MDQgMjU1LjcgNTA0IDM4NS45IDUwNCA1MDQgNDAzLjEgNTA0IDI1NiA1MDQgMTE3IDM5Ni40IDggMjU1LjcgOHptLjYgNDUwLjdjLTExMiAwLTIwMy42LTkyLjUtMjAzLjYtMjAyLjcgMC0yMy4yIDMuNy00NS4yIDEwLjktNjZsNjUuNyAyOS4xLTQuNyAwIDAgMjkuNSAyMy4zIDBjMCA2LjItLjQgMy4yLS40IDE5LjVsLTIyLjggMCAwIDI5LjUgMjcgMGMxMS40IDY3IDY3LjIgMTAxLjMgMTI0LjYgMTAxLjMgMjYuNiAwIDUwLjYtNy45IDY0LjgtMTUuOGwtMTAtNDYuMWMtOC43IDQuNi0yOC4yIDEwLjgtNDcuMyAxMC44LTI4LjIgMC01OC4xLTEwLjktNjcuMy01MC4ybDkwLjMgMCAxMjguMyA1Ni44Yy0xLjUgMi4xLTU2LjIgMTA0LjMtMTc4LjggMTA0LjN6TTIzOS42IDI2OC4xbC0uNS0uNCAuOSAuNC0uNCAwem03Ny4yLTE5LjVsMy43IDAgMC0yOS41LTcwLjMgMC0yOC42LTEyLjZjMi41LTUuNSA1LjQtMTAuNSA4LjgtMTQuMyAxMi45LTE1LjggMzEuMS0yMi40IDUxLjEtMjIuNCAxOC4zIDAgMzUuMyA1LjQgNDYuMSAxMGwxMS42LTQ3LjNjLTE1LTYuNi0zNy0xMi40LTYyLjMtMTIuNC0zOSAwLTcyLjIgMTUuOC05NS45IDQyLjMtNS4zIDYuMS05LjggMTIuOS0xMy45IDIwLjFMODUuNSAxNDYuNGM2NC42LTk2LjggMTU3LjctOTMuNiAxNzAuNy05My42IDExMyAwIDIwMyA5MC4yIDIwMyAyMDMuNCAwIDE4LjctMi4xIDM2LjMtNi4zIDUyLjlMMzE2LjggMjQ4LjZ6Il19LFQ0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJucG0iLGljb246WzU3Niw1MTIsW10sImYzZDQiLCJNMjg4IDI4OGwtMzIgMCAwLTY0IDMyIDAgMCA2NHpNNTc2IDE2MGwwIDE5Mi0yODggMCAwIDMyLTEyOCAwIDAtMzItMTYwIDAgMC0xOTIgNTc2IDB6TTE2MCAxOTJsLTEyOCAwIDAgMTI4IDY0IDAgMC05NiAzMiAwIDAgOTYgMzIgMCAwLTEyOHptMTYwIDBsLTEyOCAwIDAgMTYwIDY0IDAgMC0zMiA2NCAwIDAtMTI4em0yMjQgMGwtMTkyIDAgMCAxMjggNjQgMCAwLTk2IDMyIDAgMCA5NiAzMiAwIDAtOTYgMzIgMCAwIDk2IDMyIDAgMC0xMjh6Il19LF80dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjbG91ZHNjYWxlIixpY29uOls0NDgsNTEyLFtdLCJmMzgzIiwiTTMxOC4xIDE1NGwtOS40IDcuNmMtMjIuNS0xOS4zLTUxLjUtMzMuNi04My4zLTMzLjYtNzEuNiAwLTEyOS40IDYwLjgtMTI5LjQgMTMyLjMgMCA2LjYgLjQgMTMuMSAxLjQgMTkuNC0yLTU2IDQxLjgtOTcuNCA5Mi42LTk3LjQgMjQuMiAwIDQ2LjIgOS40IDYyLjYgMjQuN2wtMjUuMiAyMC40Yy04LjMtLjktMTYuOCAxLjgtMjMuMSA4LjEtMTEuMSAxMS0xMS4xIDI4LjkgMCA0MCAxMS4xIDExIDI4LjkgMTEgNDAgMCA2LjMtNi4zIDktMTQuOSA4LjEtMjMuMWw3NS4yLTg4LjhjNi4zLTYuNS0zLjMtMTUuOS05LjUtOS42ek0yMTMuNyAyNDYuNWExNCAxNCAwIDEgMSAyMC42IDE5IDE0IDE0IDAgMSAxIC0yMC42LTE5ek0yMjQgMzJhMjI0IDIyNCAwIDEgMCAwIDQ0OCAyMjQgMjI0IDAgMSAwIDAtNDQ4em0wIDY0YTE2MCAxNjAgMCAxIDEgMCAzMjAgMTYwIDE2MCAwIDEgMSAwLTMyMHoiXX0sQTR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InRoZW1lY28iLGljb246WzQ0OCw1MTIsW10sImY1YzYiLCJNMjAyLjkgOC40YzkuOS01LjcgMjYtNS44IDM2LS4yTDQzMCAxMTUuOWMxMCA1LjYgMTggMTkuNCAxOCAzMC45TDQ0OCAzNjRjMCAxMS40LTguMSAyNS4zLTE4IDMxTDIzOC44IDUwMy43Yy05LjkgNS43LTI2IDUuNi0zNS44LS4yTDE3LjkgMzk1LjFDOCAzODkuMyAwIDM3NS40IDAgMzY0TDAgMTQ2LjdjMC0xMS40IDgtMjUuNCAxNy45LTMxLjFMMjAyLjkgOC40ek0xMjUuNSAyMDguM2MtMTUuOSAwLTMxLjkgLjEtNDcuOCAuMWwwIDEwMS40IDE5LjEgMCAwLTI5LjggMjguNyAwYzQ5LjcgMCA0OS42LTcxLjcgMC03MS43ek0yNjUuNiAzMDguNmwtMzAuNy0zNC42YzM3LTcuNSAzNC44LTY1LjItMTAuOS02NS41LTE2LjEgMC0zMi4yLS4xLTQ4LjMtLjFsMCAxMDEuNiAxOS4xIDAgMC0zMy45IDE4LjQgMCAyOS42IDMzLjkgMjIuOCAwIDAtMS4zem0tNDEuNi04Mi4zYzIzLjMgMCAyMy4zIDMyLjUgMCAzMi41bC0yOS4xIDAgMC0zMi41IDI5LjEgMHptLTk1LjYtMS42YzIxLjIgMCAyMS4xIDM4LjkgMCAzOC45bC0zMi4zIDAgMC0zOC44IDMyLjMgMHptMTkyLjYtMTguMmMtNjguNSAwLTcxIDEwNS44IDAgMTA1LjggNjkuNSAwIDY5LjQtMTA1LjggMC0xMDUuOHptMCAxNy40YzQ0LjEgMCA0NC44IDcwLjkgMCA3MC45cy00NC40LTcwLjkgMC03MC45eiJdfSwkNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ29vZ2xlLXBsYXkiLGljb246WzQ0OCw1MTIsW10sImYzYWIiLCJNMjkzLjYgMjM0LjNMNzIuOSAxMyAzNTMuNyAxNzQuMiAyOTMuNiAyMzQuM3pNMTUuMyAwQzIuMyA2LjgtNi40IDE5LjItNi40IDM1LjNsMCA0NDEuM2MwIDE2LjEgOC43IDI4LjUgMjEuNyAzNS4zTDI3MS45IDI1NS45IDE1LjMgMHpNNDQwLjUgMjI1LjZsLTU4LjktMzQuMS02NS43IDY0LjUgNjUuNyA2NC41IDYwLjEtMzQuMWMxOC0xNC4zIDE4LTQ2LjUtMS4yLTYwLjh6TTcyLjkgNDk5TDM1My43IDMzNy44IDI5My42IDI3Ny43IDcyLjkgNDk5eiJdfSxENHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToia29ydnVlIixpY29uOls0NDgsNTEyLFtdLCJmNDJmIiwiTTM4Ny42IDM0bC0zMjcgMEMyNy45IDM0IDEuMSA2MC44IDEuMSA5My41bDAgMzI3LjFjMCAzMi42IDI2LjggNTkuNCA1OS41IDU5LjRsMzI3LjEgMGMzMyAwIDU5LjUtMjYuOCA1OS41LTU5LjVsMC0zMjdDNDQ3LjEgNjAuOCA0MjAuMyAzNCAzODcuNiAzNHpNODguMiAxMjAuOGw5NiAwIDAgMTE2IDYxLjgtMTE2IDExMC45IDAtODEuMiAxMzItMTg3LjUgMCAwLTEzMnpNMjUwIDM5Mi45bC02NS43LTExMy42IDAgMTEzLjYtOTYgMCAwLTEzMC44IDE5MS41IDAgODguNiAxMzAuOC0xMTguNCAweiJdfSxFNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidzNjIixpY29uOls2NDAsNTEyLFtdLCJlN2RlIiwiTTEwNS4yIDMwNS4zbDMwLjktMTA0LjdjNy45LTI2LjcgOC42LTQwLjYgLjItNjguOGwtMTAuMS0zMy45IDQ0LjEgMCA2MSAyMDcuNCA0NS43LTE1NS41YzEzLjMtNDUuMyAyMS4xLTUxLjkgNTkuNC01MS45bDEzMi44IDBjLTI0LjIgNDIuOS00OS4zIDg1LjItNzMuOSAxMjcuOSAyLjYgLjggNS4yIDEuOCA3LjcgMi44IDE3LjMgNy4xIDMyLjIgMTkuNCA0MiAzNS41IDExLjIgMTguNSAxNi44IDQwLjIgMTYuOCA2NS4yIDAgMzAuOC04LjIgNTYuOC0yNC42IDc3LjgtMTQuNSAxOC42LTM1IDI5LjUtNTguMiAzMS4yIDAgLjMtNS4yIC40LTUuOCAuNC0zOS43LS4xLTcwLjgtMzIuMS04My4xLTY4LjdsNDIuOSAwYzMuNSA1LjMgNi44IDEwLjcgMTEuMiAxNS41IDguMSA3LjMgMTguNSAxMC45IDI5LjMgMTEuMSAxMy4xIDAgMjMuMy05LjEgMjkuOS0xOS44IDguMS0xMy4yIDEyLjItMjkgMTIuMi00Ny41IDAtMTMuMS0xLjgtMjQuMy01LjMtMzMuNi0uOS0yLjMtMS45LTQuNS0zLTYuNi0xLjQtMi42LTIuOS01LjEtNC43LTcuNC0xMC4xLTEzLjItMjkuMy0xOS43LTQ3LjUtMTkuOGwtMjguMiAwIDcwLjMtMTIyLTM1LjYgMGMtNDMuMSAwLTM1LjktNS40LTUwLjQgNDMuM2wtNzUuNyAyNTUuMy00LjIgMC02My4xLTIxMS4xLTYzLjEgMjExLjEtNC4yIDAtMTAxLTM0MC43IDQ0LjIgMCA2MSAyMDcuNHpNNDY3IDMzNS43Yy4zIC42IDExLjMgMjAuMyAxOC4zIDMwLjMgNy4xIDEwLjEgMTkuOCAyMC45IDI0LjggMjQuNnMxOS4xIDEyLjUgMzQuMyAxMy45YzE1LjIgMS41IDIzLjMgLjIgMzguNy02LjYgMTUuNC02LjggMjcuOS0yMC40IDM0LjktMjguMSA2LjktNy42IDE3LjktMjcuMyAxOC4yLTI3LjdsMy4zIDE2LjhjMS43IDktMSAyMy43LTQuMSAzMC00LjMgOC42LTcuNiAxMy41LTE0IDIwLjMtNi4xIDYuNS0xNi43IDEzLjUtMjEuMyAxNi40LTQuNiAyLjktMjMuMSAxNS4xLTUwLjEgMTAuM3MtNDQuNy0yNS45LTUzLjktMzguMmMtOS44LTEzLjItMTYuNy0yOC4zLTE5LTMzLjItMy44LTguNC05LjktMjguMi0xMC4xLTI4Ljh6bTE2OS43LTIxOGMzLjMgMjAuMy0uMSAyOC43LTkuMSA0NmwtMTIuNyAyNC4yYy0uMy0uNi0xMC0yMC43LTI1LjktMzEuOS0xMy42LTkuNi0yMi41LTExLjctMzYuMy04LjgtMTcuOCAzLjctMzggMjUtNDYuOCA1MS4yLTEwLjUgMzEuNC0xMC43IDQ2LjYtMTEgNjAuNi0uNiAyMi40IDIuOSAzNS42IDIuOSAzNS42cy0xNS40LTI4LjUtMTUuMi03MC4xYy4xLTI5LjcgNC44LTU2LjcgMTguNS04My4zIDEyLjEtMjMuNCAzMC4xLTM3LjQgNDYuMS0zOS4xIDE2LjUtMS43IDI5LjYgNi4zIDM5LjcgMTQuOSAxMC42IDkgMjEuMyAyOC44IDIxLjMgMjguOGwyNC45LTQ5LjggMy42IDIxLjh6Il19LE40dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJncmF2IixpY29uOls1MTIsNTEyLFtdLCJmMmQ2IiwiTTMwMi42IDIxMC42YzQuNSA0LjUgNC41IDEyLjMgMCAxNi44bC0xMCAxMGMtNC41IDQuOS0xMi4zIDQuOS0xNy4xIDBsLTEwLjgtMTAuOGMtNC41LTQuOS00LjUtMTIuMyAwLTE3LjFsMTAtMTBjNC41LTQuNSAxMi4zLTQuNSAxNy4xIDBsMTAuOCAxMS4xem0tMzEuMi0yMC4zYTcuNyA3LjcgMCAxIDAgLTEwLjYtMTEgNy43IDcuNyAwIDEgMCAxMC42IDExem0tMjYuOCA1LjVhNy41IDcuNSAwIDEgMCAxMC43IDEwLjUgNy41IDcuNSAwIDEgMCAtMTAuNy0xMC41ek0zMTkuNCAxODJjLTIwLjUtMTQuOS0zNC45LTQ0LjYtMTIuMy03MC4zIDIyLjMtMjUuNyA0Mi0xNy44IDYxLjcgLjggMTIuMyAxMS43IDMwLjIgMjUuNyAxNy44IDQ5LjgtMTIuOSAyNC4zLTQ2LjYgMzQuMy02Ny4yIDE5Ljd6bTQ5LjItNDUuOWMtOS4yLTEwLjMtMjQuMSA3LjEtMTYgMTYuNiA3LjYgOS4zIDMzLjEgMi41IDE2LTE2LjZ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTQ0My43IDQ0YzIuNi0xNi42LTIwLjktMTcuMS0yNi0yNi41LTE0LTI0LjktMjguNi0zOC01Ni4zLTMxLjQgMTItOC4zIDI0LjMtNi4zIDI0LjMtNi4zIC4zLTYuNiAwLTEzLjQtOS43LTI1LjcgNC0xMi45IC4zLTIzLjEgLjMtMjMuMSAxNi04LjkgMjcuNy0yNS4yIDMwLTQ0LjYgMy43LTMyLTE5LjQtNjEuMS01MS40LTY0LjgtMjIuOC0yLjYtNDUuMSA3LjktNTYuMSAyNi41LTIzLjkgNDEuNCAxLjQgNzMuMiAyMy4xIDg0LTE0LjktMS40LTM1LjQtMTIuMy00MS40LTM1LjQtNi44LTI2LjUgMi45LTUxLjQgOS4yLTYzLjQgMCAwLTQuNS02LTguMy05LjIgMCAwLTE0LjIgMC0yNS40IDUuNSAxMi4zLTE1LjcgMjYtMTQuOSAyNi0xNC45IDAtNi42LS42LTE1LjQtMy43LTIyLjMtNS42LTExLjQtMjQuNi0xMy4zLTMyLjcgMi45IC4xLS4yIC4zLS40IC40LS41LTUuMiAxMi4zLTEuMSA1Ny43IDE3LjQgOTAtMi42IDEuNC05LjQgNi4zLTEzLjQgMTAuMy0yMi4zIDEwLTU4IDYyLjItNTggNjIuMi0yOS4xIDExLjEtNzkuNyA1Mi41LTcyLjkgODIuMyAuMyAzLjEgMS40IDUuNyAzLjEgNy43LTIuOSAyLjMtNS43IDUuMi04LjYgOC42LTEyLjMgMTQuMi01LjUgMzYuMyAxOC4zIDI1LjIgMTYuMy03LjQgMzAuNi0yMC45IDM3LjUtMzEuNCAwIDAtNS43LTUuMi0xNi44LTQuNSAyOC42LTYuOCAzNS40LTkuNyA0Ny43LTkuNCA4LjMgNCA4LjMtMzUuNCA4LjMtMzUuNCAwLTE1LjItMi4zLTMyLTExLjUtNDIuOCAxMi45IDEyLjYgMzAgMzMuOCAyOC45IDYyLjYtLjggMTguOS0xNS43IDIzLjctMTUuNyAyMy43LTkuNCAxNy4xLTQ0LjYgNjgtMzEuNCAxMDkuNCAwIDAtMTAtMTUuNC0xMC41LTIyLjgtMTggMjAtNDggNTQtMjUuNCA2Ni42IDI3LjUgMTUuMiAxMTIuMy05MS41IDEzMC4zLTE0Ni45IDM1LjctMjEuNSA1Ny4yLTQ4LjggNjYtNjcuMSAyMi43IDQ0LjkgOTguNCA5Ny41IDEwNC40IDYwLjl6Il19LFA0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhd3MiLGljb246WzY0MCw1MTIsW10sImYzNzUiLCJNMTgwLjQgMjAzYy0uNyAyMi42IDEwLjYgMzIuNyAxMC45IDM5LS4xIDEuMy0uNiAyLjUtMS4zIDMuNnMtMS43IDItMi44IDIuNmwtMTIuOCA5Yy0xLjcgMS4yLTMuNiAxLjgtNS42IDEuOS0uNCAwLTguMiAxLjgtMjAuNS0yNS42LTcuNSA5LjQtMTcgMTYuOS0yNy45IDIycy0yMi43IDcuNy0zNC43IDcuNWMtMTYuMyAuOS02MC40LTkuMi01OC4xLTU2LjItMS42LTM4LjMgMzQuMS02Mi4xIDcwLjktNjAgNy4xIDAgMjEuNiAuNCA0NyA2LjNsMC0xNS42YzIuNy0yNi41LTE0LjctNDctNDQuOC00My45LTIuNCAwLTE5LjQtLjUtNDUuOCAxMC4xLTcuNCAzLjQtOC4zIDIuOC0xMC44IDIuOC03LjQgMC00LjQtMjEuNS0yLjktMjQuMiA1LjItNi40IDM1LjktMTguNCA2NS45LTE4LjIgMjAuMS0xLjggNDAuMSA0LjQgNTUuNyAxNy4zIDYuMyA3LjEgMTEuMiAxNS40IDE0LjIgMjQuNHM0LjIgMTguNSAzLjUgMjhsMCA2OS4zek05NCAyMzUuNGMzMi40LS41IDQ2LjItMjAgNDkuMy0zMC41IDIuNS0xMC4xIDIuMS0xNi40IDIuMS0yNy40LTkuNy0yLjMtMjMuNi00LjktMzkuNi00LjktMTUuMi0xLjEtNDIuOCA1LjYtNDEuNyAzMi4zLTEuMiAxNi44IDExLjEgMzEuNCAzMCAzMC41em0xNzAuOSAyMy4xYy03LjkgLjctMTEuNS00LjktMTIuNy0xMC40TDIwMi40IDgzLjRjLTEtMi44LTEuNi01LjYtMS45LTguNi0uMi0xLjIgLjEtMi40IC44LTMuNHMxLjgtMS42IDMtMS44Yy4yIDAtMi4xIDAgMjIuMiAwIDguOC0uOSAxMS42IDYgMTIuNiAxMC40TDI3NC45IDIyMC44IDMwOC4xIDgwYy41LTMuMiAyLjktMTEuMSAxMi44LTEwLjJsMTcuMiAwYzIuMi0uMiAxMS4xLS41IDEyLjcgMTAuNEwzODQuMSAyMjIuNyA0MjEgODAuMWMuNS0yLjIgMi43LTExLjQgMTIuNy0xMC40bDE5LjcgMGMuOS0uMSA2LjItLjggNS4zIDguNi0uNCAxLjggMy40LTEwLjctNTIuOCAxNjkuOS0xLjEgNS41LTQuOCAxMS4xLTEyLjcgMTAuNGwtMTguNyAwYy0xMC45IDEuMi0xMi41LTkuNy0xMi43LTEwLjdsLTMzLjItMTM3LjEtMzIuOCAxMzdjLS4yIDEuMS0xLjcgMTEuOS0xMi43IDEwLjdsLTE4LjMgMCAwIDB6bTI3My41IDUuNmMtNS45IDAtMzMuOS0uMy01Ny40LTEyLjMtMi4zLTEtNC4zLTIuNi01LjctNC44cy0yLjEtNC42LTIuMS03LjFsMC0xMC43YzAtOC41IDYuMi02LjkgOC44LTUuOSAxMCA0LjEgMTYuNSA3LjEgMjguOCA5LjYgMzYuNyA3LjUgNTIuOC0yLjMgNTYuNy00LjUgMTMuMi03LjggMTQuMi0yNS43IDUuMy0zNC45LTEwLjUtOC44LTE1LjUtOS4xLTUzLjEtMjEtNC42LTEuMy00My43LTEzLjYtNDMuOC01Mi40LS42LTI4LjIgMjUtNTYuMiA2OS41LTU2IDEyLjcgMCA0Ni40IDQuMSA1NS42IDE1LjYgMS40IDIuMSAyIDQuNiAxLjkgN2wwIDEwLjFjMCA0LjQtMS42IDYuNy00LjkgNi43LTcuNy0uOS0yMS40LTExLjItNDkuMi0xMC44LTYuOS0uNC0zOS45IC45LTM4LjQgMjUtLjQgMTkgMjYuNiAyNi4xIDI5LjcgMjYuOSAzNi41IDExIDQ4LjYgMTIuOCA2My4xIDI5LjYgMTcuMSAyMi4yIDcuOSA0OC4zIDQuMyA1NS40LTE5LjEgMzcuNS02OC40IDM0LjQtNjkuMyAzNC40em00MC4yIDEwNC45Yy03MCA1MS43LTE3MS43IDc5LjItMjU4LjUgNzkuMi0xMTcuMSAuOC0yMzAuMy00Mi4zLTMxNy4zLTEyMC43LTYuNS01LjktLjgtMTQgNy4yLTkuNSA5Ni41IDU1LjIgMjA1LjcgODQuMiAzMTYuOSA4NC4xIDgzLS40IDE2NS4xLTE3LjMgMjQxLjYtNDkuNSAxMS44LTUgMjEuOCA3LjggMTAuMSAxNi40em0yOS4yLTMzLjNjLTktMTEuNS01OS4zLTUuNC04MS44LTIuNy02LjggLjgtNy45LTUuMS0xLjgtOS41IDQwLjEtMjguMiAxMDUuOS0yMC4xIDExMy40LTEwLjYgNy41IDkuNS0yLjEgNzUuNC0zOS42IDEwNi45LTUuOCA0LjktMTEuMyAyLjMtOC43LTQuMSA4LjQtMjEuMyAyNy40LTY4LjUgMTguNC04MHoiXX0sSTR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdsaWRlLWciLGljb246WzQ0OCw1MTIsW10sImYyYTYiLCJNNDA3LjEgMjExLjJjLTMuNS0xLjQtMTEuNi0zLjgtMTUuNC0zLjgtMzcuMSAwLTYyLjIgMTYuOC05My41IDM0LjVsLS45LS45YzctNDcuMyAyMy41LTkxLjkgMjMuNS0xNDAuNCAwLTcxLjUtMzguMi0xMDAuNi0xMDguNC0xMDAuNi0xMTUuMSAwLTE3My40IDExMy43LTE3My40IDE5OC40IDAgODcuOSA1MS4zIDEzNi42IDEzOC42IDEzNi42IDEyIDAgMTEtMSAxMSAzLjgtMTYuOSAxMjguOS05MC44IDEzMy4xLTkwLjggOTQuNiAwLTM5LjIgNDUtNTguNiA0NS41LTYxLS4zLTEyLjItNDctMjcuNi01OC45LTI3LjYtMzMuOSAuMS01Mi40IDUxLjItNTIuNCA3OS4zIDAgNTEuOSAzMi44IDg3LjkgODUuNSA4Ny45IDc3LjQgMCAxMzQtNzcuOCAxNTEuNC0xNDUuNCAxNS4xLTYwLjUgMTEuMi02My4zIDE5LjctNjcuNiAzMi4yLTE2LjIgNTcuNS0yNyA5My44LTI3IDE3LjggMCAzMC41IDMuNyA1OC45IDguNCAyLjkgMCA2LjctMi45IDYuNy01LjggMC04LTMzLjQtNjAuNS00MC45LTYzLjR6TTIzMS44IDEyNi44Yy05LjMgNDQuNy0xOC42IDg5LjYtMjcuOCAxMzQuMy0yLjMgMTAuMi0xMy4zIDcuOC0yMiA3LjgtMzguMyAwLTQ5LTQxLjgtNDktNzMuMSAwLTQ3IDE4LTEwOS4zIDYxLjgtMTMzLjQgNy00LjEgMTQuOC02LjcgMjIuNi02LjcgMTguNiAwIDIwIDEzLjMgMjAgMjguNy0uMSAxNC4zLTIuNyAyOC41LTUuNiA0Mi40eiJdfSxGNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToianNmaWRkbGUiLGljb246WzU3Niw1MTIsW10sImYxY2MiLCJNNTExLjEgMjM3LjVjLTQuNy0yLjYtNS43LTUuNy02LjQtMTAuOC0yLjQtMTYuNS0zLjUtMzMuNi05LjEtNDkuMS0zNS45LTEwMC0xNTQtMTQzLjQtMjQ2LjgtOTEuNi0yNy40IDE1LjItNDkgMzYuNC02NS41IDYzLjktMy4yLTEuNS01LjUtMi43LTcuOC0zLjctMzAuMS0xMi40LTU5LTEwLjEtODUuMyA5LjItMjUuNSAxOC43LTM2LjQgNDQuNS0zMi43IDc2LjQgLjQgMy0yIDcuNi00LjUgOS41LTM5LjcgMzAtNTYgNzguMS00MS45IDEyNC42IDEzLjggNDUuNiA1Ny41IDc5LjggMTA1LjYgODEuNCAzMC4zIDEgNjAuNiAuNSA5MSAuNSA4NCAwIDE2OC4xIC41IDI1Mi4xLS41IDUyLjctLjYgOTYuMS0zNi45IDEwOC4yLTg3LjMgMTEuNS00OC4xLTExLjEtOTcuMy01Ni44LTEyMi42em0yMS4xIDE1Ni45Yy0xOC4yIDIyLjQtNDIuMyAzNS4zLTcxLjMgMzUuNy01Ni45IC44LTExMy44IC4yLTE3MC43IC4yIDAgLjctMTYzIC4yLTE2My43IC4yLTQzLjktLjMtNzYuNy0xOS44LTk1LjItNjAtMTguOS00MS4yLTQtOTAuOCAzNC4yLTExNi4xIDkuMi02LjEgMTIuNS0xMS42IDEwLjEtMjMuMS01LjUtMjYuNCA0LjUtNDggMjYuNC02MyAyMy0xNS43IDQ3LjQtMTYuMSA3Mi0zLjEgMTAuMyA1LjQgMTQuNiAxMS42IDIyLjItMi41IDE0LjItMjYuNCAzNC42LTQ2LjcgNjAuNy02MS4zIDk3LjUtNTQuNCAyMjguNCA3LjYgMjMwLjIgMTMyLjcgLjEgOC4yIDIuNCAxMi40IDkuOCAxNS45IDU3LjYgMjYuOCA3NC41IDk2LjEgMzUuMSAxNDQuNXptLTg3LjgtODAuNWMtNS44IDMxLjItMzQuNiA1NS4xLTY2LjcgNTUuMS0xNyAwLTMyLjEtNi41LTQ0LjEtMTcuNy0yNy43LTI1LjctNzEuMS03NS05NS45LTkzLjQtMjAuMS0xNC45LTQyLTEyLjMtNjAuMyAzLjgtNTAgNDQuMSAxNS45IDEyMS44IDY3LjEgNzcuMiA0LjUtNCA3LjgtOS41IDEyLjctMTIuOCA4LjItNS41IDIwLjgtLjkgMTMuMiAxMC42LTE3LjQgMjYuMy00OS4zIDM4LjItNzguOSAyOS4zLTI4LjktOC43LTQ4LjgtMzYtNDguNi03MC4yIDEuMi0yMi41IDEyLjQtNDMuMSAzNS40LTU2IDIyLjYtMTIuNiA0Ni40LTEzLjEgNjcgMi41IDUwLjggMzguNSA3NS42IDgxLjcgMTA3LjMgMTAxLjIgMjQuNiAxNS4xIDU0LjMgNy40IDY4LjgtMTcuNSAyOC44LTQ5LjItMzQuNi0xMDUtNzguOS02My41LTQgMy43LTYuOSA4LjktMTEuNCAxMS43LTExIDYuOC0xNy4zLTQuMS0xMi44LTEwLjQgMjAuNy0yOC42IDUwLjUtNDAuNCA4My4zLTI4LjIgMzEuNCAxMS43IDQ5LjEgNDQuNCA0Mi44IDc4LjJ6Il19LE80dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJrZXliYXNlIixpY29uOls0NDgsNTEyLFtdLCJmNGY1IiwiTTI4Ni4yIDQxOWExOCAxOCAwIDEgMCAwIDM2IDE4IDE4IDAgMSAwIDAtMzZ6TTM5OC4xIDI3MS40Yy05LjUtMTQuNi0zOS40LTUyLjQtODcuMy03My43LTYuMS0yLjctMTIuMi01LjEtMTguNC03LjMgNC4xLTkuOSA2LTIwLjYgNS44LTMxLjRzLTIuNy0yMS4zLTcuMi0zMS4xLTEwLjktMTguNS0xOC45LTI1LjctMTcuNC0xMi42LTI3LjYtMTZjLTEyLjQtNC4xLTIzLjMtNi0zMi40LTUuOC0uNi0yLTEuOS0xMSA5LjQtMzVsLTIyLjktMTMuNS01LjUgNy42Yy04LjcgMTIuMS0xNi45IDIzLjYtMjQuMyAzNC45LTIuNy0uNi01LjUtMS4xLTguMy0xLjItNDEuNS0yLjQtMzktMi4zLTQxLjEtMi4zLTUwLjYgMC01MC44IDUyLjEtNTAuOCA0NS45bC0yLjQgMzYuN2MtMS42IDI3IDE5LjggNTAuMiA0Ny42IDUxLjhsOC45IC41QzEwNiAyMTUuNSA5MC40IDIyNy41IDc2LjYgMjQxLjQgMTQgMzA0LjcgMTQgMzc0IDE0IDQyOS44bDAgMzMuNiAyMy4zLTI5LjhjMy4xIDEzLjEgOCAyNS44IDE0LjYgMzcuNiA1LjggMTAuMSAxNC45IDkuNCAxOS42IDcuMyA0LjItMS45IDEwLTYuOSAzLjgtMjAuMS04LTE2LjgtMTMuMy0zNC43LTE1LjgtNTMuMWw0Ni44LTU5LjgtMjQuNyA3NC4xYzU4LjItNDIuNCAxNTcuNC02MS44IDIzNi4yLTM4LjYgMzQuMiAxMC4xIDY3LjQgLjcgODQuNy0yMy44IC43LTEgMS4yLTIuMiAxLjgtMy4yIDEuOCA5LjQgMi43IDE4LjkgMi44IDI4LjQgMCAyMy4zLTMuNyA1Mi45LTE0LjkgODEuNi0yLjUgNi41IDEuOCAxNC41IDguNiAxNS43IDcuNCAxLjYgMTUuMy0zLjEgMTguNC0xMS4xIDkuNi0yNS41IDE0LjYtNTQuNiAxNC42LTg2LjIgMC0zOC42LTEzLTc3LjUtMzUuOS0xMTAuOXpNMTQyLjQgMTI4LjZsLTE1LjctLjktMS40IDIxLjggMTMuMSAuOGMtLjYgNi41LS41IDEzLjEgLjMgMTkuNmwtMjIuNC0xLjNjLTEuNi0uMS0zLjItLjUtNC43LTEuMXMtMi44LTEuNi0zLjktMi44LTEuOS0yLjYtMi41LTQuMS0uOC0zLjEtLjctNC43TDEwNyAxMTljMS0xMi4yIDEzLjktMTEuMyAxMy4zLTExLjNsMjkuMSAxLjdjLTIuOCA2LjItNS4xIDEyLjYtNyAxOS4yek0yOTAuOCAzMDAuOGMtMi4xIDEuNi00LjggMi40LTcuNSAyLjJzLTUuMS0xLjUtNi45LTMuNWwtOS43LTExLjUtMzQuNCAyN2MtMS42IDEuMy0zLjcgMS45LTUuOCAxLjdzLTQtMS4yLTUuMy0yLjhsLTE1LjgtMTguNmMtMS4yLTEuNi0xLjctMy41LTEuNS01LjRzMS4zLTMuNyAyLjgtNC45bDM0LjYtMjcuMi0xNC4xLTE2LjctMTcuMSAxMy41Yy0xLjYgMS4yLTMuNSAxLjgtNS41IDEuNnMtMy44LTEuMS01LjEtMi42YzAgMC0zLjctNC40LTMuOC00LjUtMS4yLTEuNi0xLjctMy41LTEuNS01LjVzMS4zLTMuNyAyLjgtNC45TDIxNCAyMjUuMnMtMTguNS0yMi0xOC42LTIyLjFjLS44LTEtMS4zLTIuMS0xLjctMy4zcy0uNC0yLjUtLjMtMy43IC42LTIuNCAxLjItMy41IDEuNS0yIDIuNS0yLjhjMi4xLTEuNyA0LjgtMi40IDcuNC0yLjJzNS4xIDEuNSA2LjkgMy42bDgxLjEgOTYuM2MuOCAxIDEuMyAyLjEgMS43IDMuM3MuNCAyLjUgLjMgMy43LS42IDIuNS0xLjIgMy41LTEuNSAyLjEtMi41IDIuOHpNMTg3LjQgNDE5YTE4IDE4IDAgMSAwIDAgMzYgMTggMTggMCAxIDAgMC0zNnoiXX0sQjR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imx1bW9uLWRyb3AiLGljb246WzU3Niw1MTIsW10sImU3ZTMiLCJNNDgwIDMyYzUzIDAgOTYgNDMgOTYgOTZsMCAyMjRjMCA1My00MyA5Ni05NiA5Nkw5NiA0NDhjLTUzIDAtOTYtNDMtOTYtOTZMMCAxMjhDMCA3NSA0MyAzMiA5NiAzMmwzODQgMHpNMzAyLjQgMTE0LjdjLTkuOC0xNi40LTIwLjUtMTYuNC0yOS42IDBsLTY4LjkgMTE0Yy0xMC43IDE1LjYtMTYuNCAzMi44LTE2LjQgNTIuNSAwIDUwLjkgNDQuMyA5NC4zIDEwMC4xIDk0LjMgNTUgMCAxMDAuOS00My41IDEwMC45LTk0LjMgMC0xOS43LTYuNi0zNy44LTE3LjItNTIuNWwtNjguOS0xMTR6Il19LFI0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3ZWVibHkiLGljb246WzUxMiw1MTIsW10sImY1Y2MiLCJNNDI1LjEgNjUuOGMtMzkuOSAwLTczLjMgMjUuNy04My43IDY0LjMtMTguMi01OC4xLTY1LjUtNjQuMy04NS02NC4zLTE5LjggMC02Ni44IDYuMy04NS4zIDY0LjMtMTAuNC0zOC42LTQzLjQtNjQuMy04My43LTY0LjMtNDkgMC04Ny41IDMzLjktODcuNSA3Ny4yIDAgMjkgNC4yIDMzLjMgNzcuMiAyMzMuNSAyMi40IDYwLjYgNjcuOCA2OS40IDkyLjcgNjkuNCAzOS4yIDAgNzAtMTkuNSA4NS45LTU0IDE1LjkgMzQuOCA0Ni43IDU0LjMgODUuOSA1NC4zIDI1IDAgNzAuNC05LjEgOTIuNy02OS43IDc2LjYtMjA4LjYgNzcuNS0yMDUuNiA3Ny41LTIyNy4yIC42LTQ4LjMtMzYtODMuNS04Ni45LTgzLjV6bTI2LjMgMTE0LjhMMzg1LjkgMzU3LjFjLTcuOSAyMS41LTIxLjIgMzcuMi00Ni4yIDM3LjItMjMuNCAwLTM3LjQtMTIuNC00NC0zMy45bC0zOS4zLTExNy40LTEgMC0zOS4zIDExNy40Yy03IDIxLjUtMjAuOSAzMy42LTQ0IDMzLjYtMjUgMC0zOC4zLTE1LjctNDYuMi0zNy4yTDYwLjkgMTgxLjZjLTUuNC0xNC44LTcuOS0yMy45LTcuOS0zNC41IDAtMTYuMyAxNS44LTI5LjQgMzguMy0yOS40IDE4LjcgMCAzMiAxMS44IDM2LjEgMjkuMWw0NCAxMzkuOCAxIDAgNDQuNy0xMzYuOGM2LTE5LjcgMTYuNS0zMi4xIDM5LTMyLjFzMzIuOSAxMi4xIDM5IDMyLjFsNDQuNyAxMzYuOCAxIDAgNDQtMTM5LjhjNC4xLTE3LjIgMTcuNC0yOS4xIDM2LjEtMjkuMSAyMi4yIDAgMzguMyAxMy4zIDM4LjMgMzUuNy0uMyA3LjktNC4xIDE2LTcuNiAyNy4yeiJdfSxINHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZG9ja2VyIixpY29uOls2NDAsNTEyLFtdLCJmMzk1IiwiTTM0OS45IDIzNi4zbC02Ni4xIDAgMC01OS40IDY2LjEgMCAwIDU5LjR6bTAtMjA0LjNsLTY2LjEgMCAwIDYwLjcgNjYuMSAwIDAtNjAuN3ptNzguMiAxNDQuOGwtNjYuMSAwIDAgNTkuNCA2Ni4xIDAgMC01OS40ek0yNzEuOCAxMDQuN2wtNjYuMSAwIDAgNjAuMSA2Ni4xIDAgMC02MC4xem03OC4xIDBsLTY2LjEgMCAwIDYwLjEgNjYuMSAwIDAtNjAuMXptMjc2LjggMTAwYy0xNC40LTkuNy00Ny42LTEzLjItNzMuMS04LjQtMy4zLTI0LTE2LjctNDQuOS00MS4xLTYzLjdsLTE0LTkuMy05LjMgMTRjLTE4LjQgMjcuOC0yMy40IDczLjYtMy43IDEwMy44LTguNyA0LjctMjUuOCAxMS4xLTQ4LjQgMTAuN2wtNDM0LjcgMGMtOC43IDUwLjggNS44IDExNi44IDQ0IDE2Mi4xIDM3LjEgNDMuOSA5Mi43IDY2LjIgMTY1LjQgNjYuMiAxNTcuNCAwIDI3My45LTcyLjUgMzI4LjQtMjA0LjIgMjEuNCAuNCA2Ny42IC4xIDkxLjMtNDUuMiAxLjUtMi41IDYuNi0xMy4yIDguNS0xNy4xbC0xMy4zLTguOXpNMTE1LjYgMTc2LjhsLTY2IDAgMCA1OS40IDY2LjEgMCAwLTU5LjQtLjEgMHptNzguMSAwbC02Ni4xIDAgMCA1OS40IDY2LjEgMCAwLTU5LjR6bTc4LjEgMGwtNjYuMSAwIDAgNTkuNCA2Ni4xIDAgMC01OS40em0tNzguMS03Mi4xbC02Ni4xIDAgMCA2MC4xIDY2LjEgMCAwLTYwLjF6Il19LHE0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJtYWdlbnRvIixpY29uOls0NDgsNTEyLFtdLCJmM2M0IiwiTTQ0NS45IDEyNy45bDAgMjU2LjEtNjMuNCAzNi41IDAtMjU1LjgtMTU4LjUtOTEuNi0xNTguNiA5MS42IC40IDI1NS45LTYzLjMtMzYuNiAwLTI1NS45IDIyMS45LTEyOC4xIDIyMS41IDEyNy45ek0yNTUuOCA0MjAuNWwtMzEuNiAxOC40LTMxLjgtMTguMiAwLTI1Ni02My4zIDM2LjYgLjEgMjU1LjkgOTQuOSA1NC45IDk1LjEtNTQuOSAwLTI1Ni02My40LTM2LjYgMCAyNTUuOXoiXX0sVjR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdpdC1hbHQiLGljb246WzQ0OCw1MTIsW10sImY4NDEiLCJNNDM5LjYgMjM2LjFMMjQ0IDQwLjVDMjM4LjYgMzUgMjMxLjIgMzIgMjIzLjYgMzJzLTE1IDMtMjAuNCA4LjRsLTQwLjcgNDAuNiA1MS41IDUxLjVjMjcuMS05LjEgNTIuNyAxNi44IDQzLjQgNDMuN2w0OS43IDQ5LjdjMzQuMi0xMS44IDYxLjIgMzEgMzUuNSA1Ni43LTI2LjUgMjYuNS03MC4yLTIuOS01Ni0zNy4zbC00Ni4zLTQ2LjMgMCAxMjEuOWMyNS4zIDEyLjUgMjIuMyA0MS44IDkuMSA1NS02LjQgNi40LTE1LjIgMTAuMS0yNC4zIDEwLjFzLTE3LjgtMy42LTI0LjMtMTAuMWMtMTcuNi0xNy42LTExLjEtNDYuOSAxMS4yLTU2bDAtMTIzYy0yMC44LTguNS0yNC42LTMwLjctMTguNi00NUwxNDIuNiAxMDEgOC41IDIzNS4xQzMgMjQwLjYgMCAyNDcuOSAwIDI1NS41czMgMTUgOC41IDIwLjRMMjA0LjEgNDcxLjZjNS40IDUuNCAxMi43IDguNCAyMC40IDguNHMxNS0zIDIwLjQtOC40TDQzOS42IDI3Ni45YzUuNC01LjQgOC40LTEyLjggOC40LTIwLjRzLTMtMTUtOC40LTIwLjR6Il19LFU0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmaXJlZm94LWJyb3dzZXIiLGljb246WzUxMiw1MTIsW10sImUwMDciLCJNMTMwLjIgMTI3LjVsMCAwem0zNTEuNCA0NS40Yy0xMC42LTI1LjUtMzIuMS01My00OC45LTYxLjcgMTMuNyAyNi45IDIxLjcgNTMuOSAyNC43IDc0IDAgLjEgMCAuMyAuMSAuNC0yNy42LTY4LjgtNzQuNC05Ni41LTExMi42LTE1Ni44LTE1LTIzLjctMTAuOS0yNS4yLTEzLjEtMjQuN2wtLjEgLjFjLTQ2LjcgMjYtNzUuMyA3OC40LTgyLjYgMTIyLjctMTYuNiAuOS0zMi45IDUtNDcuOSAxMi4xLTEuNCAuNi0yLjUgMS43LTMuMSAzcy0uOSAyLjgtLjYgNC4zYy4yIC44IC42IDEuNiAxLjEgMi4zczEuMiAxLjMgMS45IDEuNyAxLjYgLjcgMi40IC44IDEuNyAwIDIuNS0uM2wuNS0uMmMxNS41LTcuMyAzMi40LTExLjIgNDkuNS0xMS4zIDYyLjgtLjYgOTcuMiA0NCAxMDcuNiA2Mi4zLTEzLTkuMi0zNi40LTE4LjItNTguOC0xNC4zIDg3LjcgNDMuOSA2NC4yIDE5NC41LTU3LjQgMTg5LjItNTkuNS0yLjYtOTcuMS01MS0xMDAuNS05MC44IDAgMCAxMS4yLTQxLjkgODAuNi00MS45IDcuNSAwIDI4LjktMjAuOSAyOS4zLTI3LS4xLTItNDIuNS0xOC45LTU5LjEtMzUuMi04LjgtOC43LTEzLjEtMTIuOS0xNi44LTE2LjEtMi0xLjctNC4xLTMuMy02LjMtNC44LTUuNi0xOS41LTUuOC00MC0uNy01OS42LTI1LjEgMTEuNC00NC42IDI5LjQtNTguNyA0NS40bC0uMSAwYy05LjctMTIuMi05LTUyLjYtOC40LTYxLjEtLjEtLjUtNy4yIDMuNy04LjIgNC4zLTguNiA2LjEtMTYuNSAxMi45LTIzLjggMjAuNC0xNi4zIDE2LjYtNDQuMSA1MC4yLTU1LjUgMTAxLjItNC41IDIwLjQtNi44IDQ0LjQtNi44IDUyLjMgMCAxMzQuNyAxMDkuMiAyNDMuOSAyNDMuOSAyNDMuOSAxMjAuNiAwIDIyMy04Ny4yIDI0MC40LTIwMi42IDExLjYtNzYuNy0xNC43LTEzMS4xLTE0LjctMTMyeiJdfSxqNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY2xvdWRzbWl0aCIsaWNvbjpbNTEyLDUxMixbXSwiZjM4NCIsIk01MTIgMjI3LjZMNTEyIDI4NC41IDI4NC40IDUxMiAyMjcuNiA1MTIgMCAyODQuNCAwIDIyNy42IDIyNy42IDAgMjg0LjUgMCA1MTIgMjI3LjZ6bS0yNTYgMTYyYzE3LjggLjUgMzUuNi0yLjYgNTIuMi05LjFzMzEuOC0xNi4yIDQ0LjYtMjguNyAyMy0yNy4zIDI5LjktNDMuOCAxMC41LTM0LjEgMTAuNS01Mi0zLjYtMzUuNS0xMC41LTUyLTE3LjEtMzEuMy0yOS45LTQzLjgtMjgtMjIuMi00NC42LTI4LjctMzQuNC05LjYtNTIuMi05LjFjLTE3LjgtLjUtMzUuNiAyLjYtNTIuMiA5LjFzLTMxLjggMTYuMy00NC42IDI4LjctMjMgMjcuMy0yOS45IDQzLjgtMTAuNSAzNC4xLTEwLjUgNTIgMy42IDM1LjUgMTAuNSA1MiAxNy4xIDMxLjMgMjkuOSA0My44IDI4IDIyLjIgNDQuNiAyOC43IDM0LjQgOS42IDUyLjIgOS4xeiJdfSxXNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2l6YXJkcy1vZi10aGUtY29hc3QiLGljb246WzY0MCw1MTIsW10sImY3MzAiLCJNMjE5LjIgMzQ1LjdjLTEuOSAxLjQtMTEuMSA4LjQtLjMgMjMuNiA0LjYgNi40IDE0LjEgMTIuOCAyMS43IDYuNiA2LjUtNC45IDcuNC0xMi45IC4zLTIzLTUuNS03LjgtMTQuMy0xMi45LTIxLjctNy4xem0zMzYuOCA3NS45Yy0uMyAxLjctLjYgMS43IC44IDAgMi4xLTQuMiA0LjItMTAuMiA1LTE5LjkgMy4xLTM4LjUtNDAuMy03MS41LTEwMS4zLTc4LTU0LjctNi0xMjQuNCA5LjItMTg4LjggNjAuNWwtLjMgMS42YzIuNiA1IDUgMTAuNyAzLjQgMjEuMmwuOCAuM2M2My45LTU4LjQgMTMxLjItNzcuMiAxODQuNC03My44IDU4LjQgMy43IDEwMCAzNCAxMDAgNjguMSAwIDEwLTIuNiAxNS43LTMuOSAyMC4yek0zOTIuMyAyNDAuNGMuOCA3LjEgNC4yIDEwLjIgOS4yIDEwLjUgNS41IC4zIDkuNC0yLjYgMTAuNS02LjYgLjgtMy40IDIuMS0yOS44IDIuMS0yOS44UzQwMi44IDIyMSAzOTkuMSAyMjVjLTMuNyAzLjctNy4zIDguNC02LjggMTUuNXptLTUwLTE1MS4xYy0yMDQuNSAwLTMyOS4yIDEzNy41LTM0MS41IDE1MS45LTEgLjUtMS4zIC44IC44IDEuMyA2MC41IDE2LjUgMTU1LjggODEuMiAxOTYuMSAyMDIuMmwxIC4zYzU1LjItNjkuOSAxNDAuOS0xMjguMSAyMzctMTI4LjEgODAuOSAwIDEzMC4yIDQyLjIgMTMwLjIgODAuNCAwIDE4LjMtNi42IDMzLjUtMjIuMyA0Ni4zIDAgMS0uMiAuOCAuOCAuOCAxNC43LTEwLjcgMjcuNS0yOC44IDI3LjUtNDguMiAwLTIyLjgtMTIuMS0zOC4yLTEyLjEtMzguMiA3LjEgNy4xIDEwLjcgMTYuMiAxMC43IDE2LjIgNS44LTQwLjkgMjctNjIuMyAyNy02Mi4zLTIuNC05LjctNi44LTE3LjgtNi44LTE3LjggNy42IDguMSAxNC40IDI3LjUgMTQuNCA0MS40IDAgMTAuNS0zLjQgMjIuOC0xMi42IDMxLjlsLjMgLjVjOC4xLTUgMTYuNS0xNi44IDE2LjUtMzggMC0xNS43LTQuNy0yNS45LTQuNy0yNS45IDUuOC01LjIgMTEuMy05LjIgMTYtMTEuOCAuOCAzLjQgMi4xIDkuNyAyLjQgMTQuOSAwIDEgLjggMS44IDEgMCAuOC01LjgtLjMtMTYuMi0uMy0xNi41IDYtMy4xIDkuNy00LjUgOS43LTQuNS0xNS43LTExMC4zLTE0NC0xOTYuOS0yOTEuMi0xOTYuOXpNMjQzIDM3OC45Yy0xMS4xIDktMjQuMiA0LjEtMzAuNi00LjItNy40LTkuNi02LjgtMjQuMSA0LjItMzIuNSAxNC44LTExLjQgMjcuMS0uNSAzMS4yIDUuNSAuMyAuNCAxMi4xIDE2LjYtNC43IDMxLjJ6bTIuMS0xMzYuNGw5LjQtMTcuOCAxMS44IDcxLTEyLjYgNi0yNC42LTI4LjggMTQuMS0yNi43IDMuNyA0LjQtMS44LTguMXptMTguNiAxMTcuNmwtLjMtLjNjMi00LjEtMi41LTYuNi0xNy41LTMxLjctMS4zLTIuNC0zLjEtMi45LTQuNC0yLjZsLS4zLS41YzcuOS01LjggMTUuNC0xMC4yIDI1LjQtMTUuN2wuNSAuM2MxLjMgMS44IDIuMSAyLjkgMy40IDQuN2wtLjMgLjVjLTEtLjMtMi40LS44LTUuMiAuMy0yLjEgLjgtNy45IDMuNy0xMi4zIDcuNmwwIDEuM2MxLjYgMi40IDMuOSA2LjYgNS44IDkuN2wuMyAwYzEwLTYuMyA3LjYtNC41IDExLjUtNy45bC4zIDBjLjUgMS44IC41IDEuOCAxLjggNS41bC0uMyAuM2MtMy4xIC42LTQuNyAuMy0xMS41IDUuNWwwIC4zYzkuNSAxNyAxMSAxNi44IDEyLjYgMTZsLjMgLjNjLTIuMyAxLjYtNi4zIDQuMi05LjcgNi42ek0zMTkgMzI3LjZjLTMuMSAxLjYtNiAyLjktMTAgNWwtLjMtLjNjMS4zLTIuNiAxLjItMi43LTExLjgtMzIuNWwtLjMtLjNjLS4yIDAtOC45IDMuNy0xMCA3LjNsLS41IDAtMS01LjggLjMtLjVjNy4zLTQuNiAyNS41LTExLjYgMjcuOC0xMi42bC41IC4zIDMuMSA1LS4zIC41Yy0zLjUtMS44LTcuNCAuOC0xMi4zIDIuNmwwIC4zYzEyLjMgMzIgMTIuNyAzMC42IDE0LjcgMzAuNmwwIC4yem00NC44LTE2LjVjLTQuMiAxLTUuMiAxLjMtOS43IDIuOWwtLjMtLjMgLjUtNC41Yy0xLTMuNC0zLjEtMTEuNS0zLjctMTMuNmwtLjMtLjNjLTMuNCAuOC04LjkgMi42LTEyLjggMy45bC0uMyAuM2MuOCAyLjYgMy4xIDkuOSA0LjIgMTMuOSAuOCAyLjQgMS44IDIuOSAyLjkgMy4xbDAgLjVjLTMuNyAxLTcuMSAyLjYtMTAuMiAzLjlsLS4zLS4zYzEtMS4zIDEtMi45IC4zLTUtMS0zLjEtOC4xLTIzLjgtOS4yLTI3LjItLjUtMS44LTEuNi0zLjEtMi42LTMuMWwwLS41YzMuMS0xIDYtMi4xIDEwLjctMy40bC4zIC4zLS4zIDQuN2MxLjMgMy45IDIuNCA3LjYgMy4xIDkuN2wuMyAwYzMuOS0xLjMgOS40LTIuOSAxMi44LTMuOWwuMy0uMy0yLjYtOS40Yy0uNS0xLjgtMS0zLjQtMi42LTMuOWwwLS4zYzQuNC0xIDcuMy0xLjggMTAuNy0yLjRsLjMgLjNjLTEgMS4zLTEgMi45LS41IDQuNCAxLjYgNi4zIDQuNyAyMC40IDYuMyAyNi41IC41IDIuNiAxLjggMy40IDIuNiAzLjl6bTMyLjItNi44bC0uMyAuM2MtNC43IC41LTE0LjEgMi40LTIyLjUgNC4ybC0uMy0uMyAuOC00LjJjLTEuNi03LjktMy40LTE4LjYtNS0yNi4yLS4zLTEuOC0uOC0yLjktMi42LTMuN2wuOC0uNWM5LjItMS42IDIwLjItMi40IDI0LjktMi42bC4zIC4zYy41IDIuNCAuOCAzLjEgMS42IDUuNWwtLjMgLjNjLTEuMS0xLjEtMy4zLTMuMi0xNi4yLS44bC0uMyAuM2MuMyAxLjYgMSA2LjYgMS42IDkuOWwuMyAuM2M5LjUtMS43IDQuOC0uMSAxMC43LTIuNGwuMyAwYzAgMS42LS4zIDEuOC0uMyA1LjJsLS4zIDBjLTQuOC0xLTIuMi0uOS0xMC4yIDBsLS4zIC4zYy4zIDIuMSAxLjYgOS40IDIuMSAxMi42bC4zIC4zYzEuMiAuNCAxNC4yLS42IDE2LjItNC43bC4zIDBjLS41IDIuNC0xIDQuMi0xLjYgNnptMTAuNy00NC41Yy00LjUgMi40LTguMSAyLjktMTEgMi45LS4yIDAtMTEuNCAxLjEtMTcuNS0xMC02LjctMTAuOC0xLTI1LjIgNS41LTMxLjcgOC44LTguMSAyMy40LTEwLjEgMjguNS0xNyA4LTEwLjMtMTMtMjIuMy0yOS42LTUuOGwtMi42LTIuOSA1LjItMTYuMmMyNS42LTEuNiA0NS4yLTMgNTAgMTYuMiAuOCAzLjEgMCA5LjQtLjMgMTIuMSAwIDIuNi0xLjggMTguOC0yLjEgMjMtLjUgNC4yLS44IDE4LjMtLjggMjAuNyAuMyAyLjQgLjUgNC4yIDEuNiA1LjUgMS42IDEuOCA1LjggMS44IDUuOCAxLjhsLS44IDQuN2MtMTEuOC0xLjEtMTAuMy0uNi0yMC40LTEtMy4yLTUuMS0yLjItMy4zLTQuMi03LjkgMCAwLTQuMiAzLjktNy4zIDUuNXpNNDQzLjkgMjgxYy02LjQtMTAuNi0xOS44LTcuMi0yMS43IDUuNS0yLjYgMTcuMSAxNC4zIDE5LjggMjAuNyAxMC4ybC4zIC4zYy0uNSAxLjgtMS44IDYtMS44IDYuM2wtLjUgLjVjLTEwLjMgNi45LTI4LjUtMi41LTI1LjctMTguNiAxLjktMTAuOSAxNC40LTE4LjkgMjguOC05LjlsLjMgLjVjMCAxLjEtLjMgMy40LS4zIDUuM3ptNS44LTg3LjdsMC02LjZjLjcgMCAxOS42IDMuMyAyNy44IDcuM2wtMS42IDE3LjVzMTAuMi05LjQgMTUuNC0xMC43YzUuMi0xLjYgMTQuOSA3LjMgMTQuOSA3LjNsLTExLjMgMTEuM2MtMTIuMS02LjQtMTkuNi0uMS0yMC43IC44LTUuMyAzOC43LTguNiA0Mi4yIDQuNCA0Ni4xbC0uNSA0LjdjLTE3LjYtNC4zLTE4LjUtNC41LTM2LjktNy4zbC44LTQuN2M3LjMgMCA3LjUtNS4zIDcuNi02LjggMCAwIDUtNTMuMiA1LTU1LjMgMC0yLjktNS0zLjctNS0zLjd6bTExIDExNC40Yy04LjEtMi4xLTE0LjEtMTEtMTAuNy0yMC43IDMuMS05LjQgMTIuMy0xMi4zIDE4LjktMTAuMiA5LjIgMi42IDEyLjggMTEuOCAxMC43IDE5LjQtMi42IDguOS05LjQgMTMuOS0xOC45IDExLjV6bTQyLjIgOS43Yy0yLjQtLjUtNy4xLTIuNC04LjYtMi45bDAtLjMgMS42LTEuOGMuNi04LjIgLjYtNy4zIC4zLTcuNi00LjgtMS44LTYuNy0yLjQtNy4xLTIuNC0xLjMgMS44LTIuOSA0LjUtMy43IDUuNWwtLjggMy40IDAgLjNjLTEuMy0uMy0zLjktMS4zLTYtMS42bDAtLjMgMi42LTEuOGMzLjQtNC43IDEwLTE0LjEgMTMuOS0yMC4ybDAtMi4xIC41LS4zYzIuMSAuOCA1LjUgMi4xIDcuNiAyLjkgLjUgLjUgLjItMS45LTEgMjUuMS0uMiAxLjggMCAyLjYgLjggMy45em0tNC43LTg5LjhjMTEuMy0xOC4zIDMwLjgtMTYuMiAzNC0zLjRsNy42LTI2LjJjMi4zLTYuMi0yLjgtOS45LTQuNS0xMS4zbDEuOC0zLjdjMTIuMiAxMC40IDE2LjQgMTQgMjIuNSAyMC40LTI1LjkgNzMuMS0zMC44IDgwLjgtMjQuNiA4NC4zbC0xLjggNC40Yy02LjQtMy4zLTguOS00LjQtMTcuOC04LjZsMi4xLTYuOGMtLjMtLjMtMy45IDMuOS05LjcgMy43LTE5LjEtMS4zLTIyLjktMzEuNy05LjctNTIuOXptMjkuMyA3OS4zYzAtNS43LTYuMy03LjktNy45LTUuMi0xLjMgMi4xIDEgNSAyLjkgOC40IDEuNiAyLjYgMi42IDYuMyAxIDkuNC0yLjYgNi4zLTEyLjQgNS4zLTE1LjQtLjggMC0uNy0uMyAuMSAxLjgtNC43bC44LS4zYy0uNiA1LjcgNi4xIDkuNiA4LjQgNSAxLTIuMS0uNS01LjUtMi4xLTguNC0xLjYtMi42LTMuNy02LjMtMS44LTkuNyAyLjctNS4xIDExLjMtNC41IDE0LjcgMi40bDAgLjUtMi40IDMuNHptMjEuMiAxMy40Yy0yLTMuMy0uOS0yLjEtNC41LTQuN2wtLjMgMGMtMi40IDQuMi01LjggMTAuNS04LjYgMTYuMi0xLjMgMi40LTEgMy40LS44IDMuOWwtLjMgLjMtNS44LTQuNCAuMy0uMyAyLjEtMS4zYzMuMS01LjggNi42LTEyLjEgOS4yLTE3bDAtLjNjLTIuNi0yLTEuMi0xLjUtNi0xLjhsMC0uMyAzLjEtMy40IC4zIDBjMy43IDIuNCAxMCA2LjggMTIuMyA4LjlsLjMgLjMtMS4zIDMuOXpNNTc1LjggMjc2bC0yLjktMi45Yy44LTIuNCAxLjgtNSAyLjEtNy42IC43LTkuNy0xMS41LTExLjgtMTEuNS01IDAgNSA3LjkgMTkuNCA3LjkgMjcuOCAwIDEwLjItNS44IDE1LjctMTMuOSAxNi41LTguNCAuOC0yMC4yLTEwLjUtMjAuMi0xMC41bDUtMTQuNCAyLjkgMi4xYy0zIDE3LjggMTcuNyAyMC40IDEzLjMgNS4yLTEuMS00LTE4LjctMzQuMiAyLjEtMzguMiAxMy42LTIuNCAyMyAxNi41IDIzIDE2LjVMNTc1LjggMjc2em0zNS42LTEwLjJjLTExLTMwLjQtNjAuNS0xMjcuNS0xOTItMTI5LjYtNTMuNC0xLTk0LjMgMTUuNC0xMzIuOCAzOGw4NS42LTkuMi05MS40IDIwLjcgMjUuMSAxOS42LTMuOS0xNi41YzcuNS0xLjcgMzkuMS04LjUgNjYuOC04LjlsLTIyLjMgODAuNGMxMy42LS43IDE5LTkgMTkuNi0yMi44bDUtMSAuMyAyNi43Yy0yMi41IDMuMi0zNy4zIDYuNy00OS41IDkuOWwxMy4xLTQzLjItNjEuNS0zNi43IDIuNCA4LjEgMTAuMiA1YzYuMyAxOC42IDE5LjQgNTYuNiAyMC40IDU4LjcgMiA0LjMgMy4yIDUuOCAxMiA0LjVsMS4xIDVjLTE2LjEgNC45LTIzLjcgNy42LTM5IDE0LjRsLTIuNC00LjdjNC40LTIuOSA4LjctMy45IDUuNS0xMi44LTIzLjctNjIuNS0yMS41LTU4LjEtMjIuOC01OS40bDIuNC00LjQgMzMuNSA2Ny4zYy0zLjgtMTEuOSAxLjcgMS43LTMzLTc4LjhsLTQxLjkgODguNSA0LjctMTMuOS0zNS45LTQyLjIgMjcuOCA5My41LTExLjggOC40Yy0xMTEuOS0xMDEuNy0xMDUuOC05OC40LTExMy43LTk4LjctNS41LS4zLTEzLjYgNS41LTEzLjYgNS41bC01LTZjMzAuNi0yMy41IDMxLjYtMjQuMyA1OC40LTQyLjdsNC4yIDcuMXMtNS44IDQuMi03LjkgNy4xYy01LjkgOS4zIDEuNyAxMy4zIDYxLjggNzUuN2wtMTguOC01OC45IDM5LjgtMTAuMiAyNS43IDMwLjYgNC40LTEyLjMtNS0yNC42IDEzLjEtMy40IC41IDMuMSAzLjctMTAuNS05NC4zIDI5LjMgMTEuMy01LTEzLjYtNDIuNCAxNy4zLTkuMiAzMC4xIDM2LjEgMjguNS0xMy4xYy0xLjQtNy41LTIuNS0xNC41LTQuNy0xOS42bDE3LjMgMTMuOSA0LjctMi4xLTU5LjItNDIuNyAyMy4xIDExLjVjMTktNi4xIDI1LjItNy41IDMyLjItOS43bDIuNiAxMWMtMTIuNiAxMi42IDEuNCAxNi44IDYuNSAxOS40bC0xMy42LTYxIDEyIDI4LjNjNC4yLTEuMyA3LjMtMi4xIDcuMy0yLjFsMi42IDguNnMtMy4xIDEtNi4zIDIuMWw4LjkgMjEgMzMuOC02NS43LTIwLjcgNjFjNDIuNC0yNC4xIDgxLjQtMzYuNyAxMzItMzUuOSA2NyAxIDE2Ny4zIDQwLjggMTk5LjggMTM5LjggLjggMi4xIDAgMi42LS44IC4zem0tNDA4LTExMy40czEuOC0uNSA0LjItMS4zbDkuNCA3LjZjLS40IDAtMy40LS4zLTExLjMgMi40bC0yLjQtOC42em0xNDMuOCAzOC41Yy0xLjYtLjYtMjYuNS00LjgtMzMuMyAyMC43bDIxLjcgMTcgMTEuNS0zNy43ek0zMTguNCA2Ny4xYy01OC40IDAtMTA2LjEgMTItMTE1IDE0LjRsMCAuOGM4LjQgMi4xIDE0LjQgNC4yIDIxLjIgMTEuOGwxLjYgLjNjNi42LTEuOCA0OS0xMy45IDExMC4yLTEzLjkgMTgwLjIgMCAzMDEuNyAxMTYuOCAzMDEuNyAyMjMuNGwwIDEwYzAgMS4zIC44IDIuNiAxLjEgLjUgLjUtMi4xIC44LTguNiAuOC0xOS42IC4zLTgzLjgtOTYuNi0yMjcuNi0zMjEuNi0yMjcuNnpNNTI5LjUgMjM2LjhjMS4zLTUuOCAwLTEyLjMtNy4zLTEzLjEtOS42LTEuMS0xNi4xIDIzLjgtMTcgMzMuNS0uOCA1LjUtMS4zIDE0LjkgNiAxNC45IDQuNyAwIDkuNy0uOSAxOC4zLTM1LjR6TTQ2OCAyNzkuN2MtMi42LS44LTkuNC0uOC0xMi42IDEwLjUtMS44IDYuOCAuNSAxMy40IDYgMTQuNyAzLjcgMS4xIDguOSAuNSAxMS44LTEwLjcgMi42LTkuOS0xLjgtMTMuNi01LjItMTQuNHptMjMgMjFjMS44IC41IDMuMSAxIDUuOCAxLjggMC0xLjggLjUtOC40IC44LTEyLjEtMSAxLjMtNS41IDguMS02LjYgMTBsMCAuM3oiXX0sRzR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNyZWF0aXZlLWNvbW1vbnMtbmQiLGljb246WzUxMiw1MTIsW10sImY0ZWIiLCJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zem05NCAxNDQuM2wwIDQyLjUtMTgwLjMgMCAwLTQyLjUgMTgwLjMgMHptMCA3OS44bDAgNDIuNS0xODAuMyAwIDAtNDIuNSAxODAuMyAweiJdfSxZNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidXNwcyIsaWNvbjpbNTEyLDUxMixbXSwiZjdlMSIsIk00MjguMyAyNDEuN2MyNS44LTQxLjMgMTUuMi00OC44LTExLjctNDguOGwtMjcgMGMtLjEgMC0xLjUtMS40LTEwLjkgOC0xMS4yIDUuNi0zNy45IDYuMy0zNy45IDguNyAwIDQuNSA3MC4zLTMuMSA4OC4xIDAgOS41IDEuNS0xLjUgMjAuNC00LjQgMzItLjUgNC41IDIuNCAyLjMgMy44IC4xek0zMTYuMiAyNjQuM2M2NC0yMS4zIDk3LjMtMjMuOSAxMDItMjYuMiA0LjQtMi45LTQuNC02LjYtMjYuMi01LjgtNTEuNyAyLjItMTM3LjYgMzcuMS0xNzIuNiA1My45bC0zMC43LTkzLjMgMTk2LjYgMGMtMi43LTI4LjItMTUyLjktMjIuNi0zMzcuOS0yMi42TC01IDQxNS44YzE5Ni40LTk3LjMgMjU4LjktMTMwLjMgMzIxLjItMTUxLjV6TTYyLjcgOTZjMjUzLjMgNTMuNyAzMzAgNjUuNyAzMzIuMSA4NS4yIDM2LjQgMCA0NS45IDAgNTIuNCA2LjYgMjEuMSAxOS43LTE0LjYgNjcuNy0xNC42IDY3LjctNC40IDIuOS00MDYuNCAxNjAuMi00MDYuNCAxNjAuMkw0NDkuMyA0MTUuNyA1MTcgOTYgNjIuNyA5NnoiXX0sWjR0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1sZXR0ZXJib3hkIixpY29uOls0NDgsNTEyLFtdLCJlNjJlIiwiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTEwNS4xIDE4N0M2Ni40IDE4NyAzNSAyMTguMyAzNSAyNTdzMzEuNCA3MCA3MC4xIDcwYzI0LjggMCA0Ni41LTEyLjggNTktMzIuMmwuNS0uNy0uNC0uNmMtNi41LTEwLjYtMTAuMi0yMy4xLTEwLjItMzYuNSAwLTEzLjYgMy45LTI2LjMgMTAuNi0zNy4xLTEyLjQtMTkuOC0zNC40LTMyLjktNTkuNS0zMi45ek0yMjQgMTg3Yy0yNC44IDAtNDYuNSAxMi44LTU5IDMyLjJsLS41IC43IC40IC42YzYuNSAxMC42IDEwLjIgMjMuMSAxMC4yIDM2LjUgMCAxMy42LTMuOSAyNi4zLTEwLjYgMzcuMSAxMi40IDE5LjcgMzQuNCAzMi45IDU5LjUgMzIuOSAyNC44IDAgNDYuNS0xMi44IDU5LTMyLjJsLjUtLjctLjQtLjZjLTYuNS0xMC42LTEwLjItMjMuMS0xMC4yLTM2LjUgMC0xMy42IDMuOS0yNi4zIDEwLjYtMzcuMS0xMi40LTE5LjctMzQuNC0zMi45LTU5LjUtMzIuOXptMTE4LjkgMGMtMjQuOCAwLTQ2LjUgMTIuOC01OSAzMi4ybC0uNSAuNyAuNCAuNmM2LjUgMTAuNiAxMC4yIDIzLjEgMTAuMiAzNi41IDAgMTMuNi0zLjkgMjYuMy0xMC42IDM3LjEgMTIuNCAxOS44IDM0LjQgMzIuOSA1OS41IDMyLjkgMzguNyAwIDcwLjEtMzEuMyA3MC4xLTcwcy0zMS40LTcwLTcwLjEtNzB6Il19LFg0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJtYW5kYWxvcmlhbiIsaWNvbjpbMzg0LDUxMixbXSwiZjUwZiIsIk0yMDAuNiA1MTEuOWMtMS0zLjMtMS43LTE1LjgtMS40LTI0LjYgLjYtMTUuOSAxLTI0LjcgMS40LTI4LjggLjYtNi4yIDIuOS0yMC43IDMuMy0yMS40IC42LTEgLjQtMjcuOS0uMi0zMy4xLS4zLTIuNi0uNi0xMS45LS43LTIwLjctLjEtMTYuNS0uNS0yMC4xLTIuNy0yNC44LTEuMS0yLjMtMS4yLTMuOC0xLTExLjQgLjItNC4yIC4xLTguNS0uMy0xMi43LTItMTMtMy41LTI3LjctMy4yLTMzLjlzLjQtNy4xIDIuMS05LjdjMy4xLTQuNyA2LjUtMTQgOC42LTIzLjMgMi4zLTkuOSAzLjktMTcuMiA0LjYtMjAuNyAxLjEtNS4xIDIuNi0xMC4xIDQuNC0xNS4xIDIuMy02LjIgMi41LTE1LjQgLjQtMTUuNC0uMyAwLTEuNCAxLjItMi40IDIuN3MtNC44IDQuOC04LjMgNy40Yy04LjQgNi4xLTExLjcgOS40LTEyLjcgMTIuNnMtMSA3LjItLjIgNy44Yy4zIC4yIDEuMyAyLjQgMi4xIDQuOSAxLjYgNSAxLjkgMTAuMyAuNyAxNS40LS40IDEuOC0xIDUuNS0xLjUgOC4ycy0xIDYuNS0xLjMgOC4yYy0uMiAxLjUtLjcgMy0xLjUgNC4zLTEgMS0xLjEgLjktMi4xLS41LS43LTEuNS0xLjItMy4xLTEuNC00LjctLjItMS43LTEuNi03LjEtMy4xLTExLjktMy4zLTEwLjktMy41LTE2LjItMS0yMSAuOC0xLjQgMS40LTMgMS43LTQuNiAwLTIuNC0yLjItNS4zLTcuNC05LjktNy02LjItOC42LTcuOS0xMC4yLTExLjMtMS43LTMuNi0zLjEtNC4xLTQuNS0xLjUtMS44IDMtMi42IDkuMS0zIDIybC0uMyAxMi4yIDIgMi4yYzMuMiAzLjcgMTIuMSAxNi41IDEzLjggMTkuOCAzLjQgNi43IDQuMyAxMS43IDQuNCAyMy42czEgMjIuOCAyIDI0LjdjLjQgLjcgLjUgMS40IC4zIDEuNXMuNCAyLjEgMS4zIDQuM2MxIDIuOSAxLjcgNS45IDIuMSA5IC40IDMuNSAuOSA3IDEuNyAxMC40IDIuMiA5LjYgMi44IDE0LjEgMi40IDIwLjEtLjIgMy4zLS41IDExLjEtLjcgMTcuMy0xLjMgNDEuOC0xLjggNTgtMiA2MS4yLS4xIDItLjQgMTEuNS0uNiAyMS4xLS40IDE2LjMtMS4zIDI3LjQtMi40IDI4LjYtLjYgLjctOC4xLTQuOS0xMi41LTkuNS0zLjgtMy45LTQtNC44LTIuOC05LjkgLjctMyAyLjMtMTguMyAzLjMtMzIuNiAuNC00LjggLjgtMTAuNSAxLTEyLjcgLjgtOS40IDEuNy0yMC4zIDIuNi0zNC44IC42LTguNSAxLjMtMTYuNCAxLjctMTcuN3MuOS05LjkgMS4xLTE5LjFsLjQtMTYuOC0yLjMtNC4zYy0xLjctMy4zLTQuOS02LjktMTMuMi0xNS4zLTYtNi4xLTExLjgtMTIuMy0xMi45LTEzLjhsLTItMi44IC44LTEwLjljMS4xLTE1LjcgMS4xLTQ4LjYgMC01OS4xbC0uOS04LjctMy4zLTQuNWMtNS45LTguMS01LjgtNy43LTYuMi0zMy4zLS4xLTYuMS0uNC0xMS41LS42LTEyLjEtLjgtMS45LTMtMi43LTguNS0zLTguOS0uNi0xMS0xLjktMjMuOC0xNC42LTYuMi02LTEyLjMtMTItMTMuOC0xMy4yLTIuOC0yLjQtMi44LTItLjYtOS42bDEuNC00LjYtMS43LTNjLS44LTEuNC0xLjYtMi44LTIuNi00LjEtMS4zLTEuNS01LjUtMTAuOS02LTEzLjUtLjItLjctLjItMS40LS4xLTIuMXMuNS0xLjMgLjktMS44YzIuMi0yLjkgMy40LTUuNyA0LjUtMTAuNyAyLjMtMTEuMiA3LjctMjYuMSAxMC42LTI5LjIgMy4yLTMuNSA3LjctMSA5LjQgNSAxLjMgNC44IDEuNCA5LjggLjEgMTguNi0uNSAzLjctLjkgNy40LTEgMTEuMSAwIDQgLjIgNC43IDIuMyA3LjQgMy4zIDQuNCA3LjcgNy40IDE1LjIgMTAuNSAxLjcgLjcgMy4zIDEuNyA0LjcgMi44IDExLjIgMTAuNyAxOC42IDE2LjIgMjIuOSAxNi45IDUuMiAuOCA4IDQuNSAxMCAxMy40IDEuMyA1LjcgNCAxMS4xIDUuNSAxMS4xIDEuMi0uMiAyLjMtLjcgMy4zLTEuNCAyLTEuMiAyLjItMS43IDIuMi00LjItLjMtNi0uOS0xMS45LTItMTcuOC0uNC0xLjctLjgtNC4xLS45LTUuNHMtLjYtMy44LTEtNS43Yy0yLjYtMTEuMi0zLjYtMTUuNS00LjEtMTYtMS42LTItNC4xLTEwLjItNC45LTE1LjktMS42LTExLjEtNC0xNC4yLTEyLjktMTcuNC00LjktMS44LTkuNC00LjUtMTMuMy03LjktMS4yLTEtNC0zLjItNi40LTUuMXMtNC40LTMuNS00LjYtMy44Yy0uOC0uNy0xLjctMS40LTIuNy0yLTYuMi00LjItOC44LTctMTEuMy0xMmwtMi40LTVjLS4xLTguNy0uMy0xNy4zLS40LTI2bDYuOS02LjZjNC0zLjggOC41LTcuNCAxMC42LTguNCAzLjMtMS43IDQuNC0xLjkgMTEuNC0yIDguNS0uMiAxMC4xIDAgMTEuNyAxLjZzMS40IDYuNC0uMyA4LjVjLS42IC43LTEuMSAxLjUtMS4zIDIuMyAwIC42LTIuNiA0LjktNS40IDktMS4xIDIuMi0xLjkgNC41LTIuNCA2LjggMjAuNCAxMy40IDIxLjYgMy44IDE0LjEgMjlsMTEuNCAyLjVjMy4xLTguNyA2LjUtMTcuMyA4LjYtMjYuMiAuMy03LjYtMTItNC4yLTE1LjQtOC43LTIuMy01LjkgMy4xLTE0LjIgNi4xLTE5LjIgMS42LTIuMyA2LjYtNC43IDguOC00LjEgLjkgLjIgNC4yLS40IDcuNC0xLjMgMi41LS44IDUtMS4zIDcuNS0xLjcgMi0uMiA0LjEtLjcgNi0xLjMgMy43LTEuMSA0LjUtMS4yIDYuMy0uNCAxLjkgLjYgMy44IDEuMSA1LjggMS40IDIuMSAuMyA0LjEgLjkgNiAxLjkgMS42IC45IDMuMyAxLjcgNSAyLjIgMi41IC43IDMgLjYgNy0xLjdMMjI2IDUuNCAyMzYuNyA1YzEwLjQtLjQgMTAuOC0uNSAxNS4zLTIuN0wyNTYuNSAwIDI1OSAxLjRjMS44IDEgMy4xIDIuNyA0LjkgNiAyLjQgNC41IDIuNCA0LjYgMS40IDcuNC0uOSAyLjQtLjkgMy4zLS4xIDYuNCAuNSAyIDEuMiA0IDIuMSA1LjkgLjYgMS4zIDEuMSAyLjYgMS4zIDQgLjMgNC4zIDAgNS4zLTIuNCA2LjktMi4yIDEuNS03IDcuOS03IDkuMy0uMiAxLS42IDItMS4xIDMtNSAxMS41LTYuOCAxMy42LTE0LjMgMTctOS4yIDQuMi0xMi4zIDUuMi0xNi4yIDUuMi0zLjEgMC00IC4yLTQuNSAxLjMtMS4yIDEuNC0yLjUgMi43LTQuMSAzLjctMS44IDEuMi0zLjMgMi45LTQuNCA0LjgtLjUgMS4yLTEuNCAyLjItMi41IDIuOS0uOSAuNC0xLjggMS0yLjUgMS43LTIuMiAxLjktNC42IDMuNy03IDUuNC0zLjMgMi4zLTYuOSA1LTcuOSA2LS43IC43LTEuNSAxLjMtMi40IDEuNy0uOCAuNC0xLjYgLjktMi4xIDEuNi0xLjMgMS40LTEuNSAyLjEtMS4xIDQuNiAuMyAyIC44IDQgMS40IDUuOSAxLjMgMy44IDEuMyA3LjkgMCAxMC42cy0uOSA2LjcgMS40IDkuNmMyIDIuNiAyLjIgNC42IC43IDguOC0uOCAyLjktMS4xIDUuOS0xLjEgOC45IDAgNC45IC4yIDYuMyAxLjUgOC40czEuOCAyLjUgMy4yIDIuM2MyLS4yIDIuMy0xLjEgNC43LTEyLjEgMi4yLTEwIDMuNy0xMS45IDEzLjgtMTcuMSAyLjktMS41IDcuNS00IDEwLTUuNHM2LjgtMy43IDkuNC00LjljNS45LTIuNiAxMS4yLTYuNiAxNS4yLTExLjcgNy4xLTguOCAxMC0xNi4yIDEyLjgtMzMuMyAuNC0yLjggMS4zLTUuNCAyLjktNy43IDEuNC0yLjIgMi40LTQuNyAyLjktNy4zIDEtNS4zIDIuOS05LjEgNS42LTExLjUgNC43LTQuMiA2LTEuMSA0LjYgMTAuOS0uNSAzLjktMS4xIDEwLjMtMS40IDE0LjRsLS42IDcuNGMzIDIuNyA1LjkgNS41IDguOSA4LjJsLjEgOC40Yy4xIDQuNiAuNSA5LjUgLjkgMTAuOWwuOCAyLjUtNi40IDYuM2MtOC41IDguMy0xMi45IDEzLjktMTYuOCAyMS42LTEuOCAzLjUtMy43IDcuMS00LjQgOC0yLjIgMy4xLTYuNSAxMy04LjggMjAuM2wtMi4zIDcuMi03IDYuNWMtMy44IDMuNi04IDcuMi05LjIgOC4yLTMgMi4zLTQuMyA1LjEtNC4zIDEwLS4xIDIuNSAuNCA1IDEuNiA3LjMgLjggMS42IDEuNSAzLjIgMi4xIDQuOCAuMyAxIC45IDIgMS42IDIuOSAxLjQgMS42IDEuOSAxNi4xIC44IDIzLjItLjcgNC41LTMuNiAxMi00LjcgMTItMS44IDAtNC4xIDkuMy01LjEgMjAuNy0uMiAyLS42IDUuOS0xIDguN3MtMSAxMC0xLjQgMTZjLS44IDEyLjItLjIgMTguOCAyIDIzLjIgMy40IDYuNyAuNSAxMi43LTExIDIyLjhsLTQgMy41IC4xIDUuMmMuMSAzIC40IDYgMS4xIDguOSA0LjYgMTYgNC43IDE2LjkgNC40IDM3LjEtLjUgMjYuNC0uMyA0MC4zIC42IDQ0LjIgLjUgMi4zIC45IDQuNiAxLjEgNyAuMiAyIC43IDUuMyAxLjEgNy40IC41IDIuMyAuOCAxMSAuOCAyMi43bDAgMTkuMS0xLjggMi42Yy0yLjcgMy45LTE1LjEgMTMuNS0xNS41IDEyLjNsLjEgMHptMjkuNS00NS4xYy0uMi0uMy0uMy02LjktLjMtMTQuNiAwLTE0LjEtLjktMjcuNS0yLjMtMzQuNC0uNC0yLS44LTkuNy0uOS0xNy4xLS4yLTExLjktMS40LTI0LjQtMi42LTI2LjQtLjctMS4xLTMtMTcuNy0zLTIxLjMgMC00LjIgMS02IDUuMy05LjFzNC45LTMuMSA1LjUtLjdjLjMgMS4xIDEuNCA1LjYgMi42IDEwIDMuOSAxNS4xIDQuMSAxNi4zIDQgMjEuNy0uMSA1LjgtLjEgNi4xLTEuNyAxNy43LTEgNy4xLTEuMiAxMi40LTEgMjguNCAuMiAxOS40LS42IDM1LjctMiA0MS4zLS43IDIuOC0yLjggNS41LTMuNCA0LjRsLS4xIDB6bS03MS0zNy42Yy0uOC0zLjYtMS4zLTcuMi0xLjctMTAuOHMtMS03LjItMS43LTEwLjhjLS41LTIuMS0uOS00LjMtMS02LjUtLjMtMy4yLS45LTcuNS0xLjMtOS41LTEtNC44LTMuMy0xOS40LTMuNC0yMS4xIDAtLjctLjMtNC0uNy03LjQtLjctNi4yLS44LTI3LjctLjItMjguMyAxLTEgNi42IDIuOCAxMS4zIDcuNGw1LjMgNS4zLS40IDYuNWMtLjIgMy42LS42IDEwLjItLjggMTQuOC0uNSAxMy4zLS43IDguNy0xLjYgMjguNC0uOCAxNy40LTEuOSAzMS4zLTIuNiAzMi0uMSAuMS0uMiAuMS0uMiAuMnMtLjIgMC0uMyAwLS4yIDAtLjMtLjEtLjEtLjEtLjItLjJsMCAwek03MiAxNjIuNmMyMS4xIDEyLjggMTcuOCAxNC4yIDI4LjUgMTcuNyAxMyA0LjMgMTguOSA3LjEgMjMuMiAxNi45LTQzLjcgMzYuMS02OSA1Ny45LTc2LjcgNzAuOS0zMSA1Mi02IDEwMS42IDYyLjggODcuMi0xNC4yIDI5LjItNzggMjguNi05OC43LTQuOS0yNC43LTQwLTIyLjEtMTE4LjMgNjEtMTg3LjdsMCAwem0yMTAuOCAxNzljNTYuNyA2LjkgODIuMy0zNy43IDQ2LjUtODkuMiAwIDAtMjYuOS0yOS4zLTY0LjMtNjggMy0xNS41IDkuNS0zMi4xIDMwLjYtNTMuOCA4OS4yIDYzLjUgOTIgMTQxLjYgOTIuNSAxNDkuNCA0LjMgNzAuNi03OC43IDkxLjItMTA1LjMgNjEuN2wwIDB6Il19LHQyZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzbGFjayIsaWNvbjpbNDQ4LDUxMixbNjI0NDcsInNsYWNrLWhhc2giXSwiZjE5OCIsIk05NC4xIDMxNS4xYzAgMjUuOS0yMS4yIDQ3LjEtNDcuMSA0Ny4xUzAgMzQxIDAgMzE1LjEgMjEuMiAyNjggNDcuMSAyNjhsNDcuMSAwIDAgNDcuMXptMjMuNyAwYzAtMjUuOSAyMS4yLTQ3LjEgNDcuMS00Ny4xUzIxMiAyODkuMiAyMTIgMzE1LjFsMCAxMTcuOGMwIDI1LjktMjEuMiA0Ny4xLTQ3LjEgNDcuMXMtNDcuMS0yMS4yLTQ3LjEtNDcuMWwwLTExNy44em00Ny4xLTE4OWMtMjUuOSAwLTQ3LjEtMjEuMi00Ny4xLTQ3LjFTMTM5IDMyIDE2NC45IDMyIDIxMiA1My4yIDIxMiA3OS4xbDAgNDcuMS00Ny4xIDB6bTAgMjMuN2MyNS45IDAgNDcuMSAyMS4yIDQ3LjEgNDcuMVMxOTAuOCAyNDQgMTY0LjkgMjQ0TDQ3LjEgMjQ0QzIxLjIgMjQ0IDAgMjIyLjggMCAxOTYuOXMyMS4yLTQ3LjEgNDcuMS00Ny4xbDExNy44IDB6bTE4OSA0Ny4xYzAtMjUuOSAyMS4yLTQ3LjEgNDcuMS00Ny4xUzQ0OCAxNzEgNDQ4IDE5Ni45IDQyNi44IDI0NCA0MDAuOSAyNDRsLTQ3LjEgMCAwLTQ3LjF6bS0yMy43IDBjMCAyNS45LTIxLjIgNDcuMS00Ny4xIDQ3LjFTMjM2IDIyMi44IDIzNiAxOTYuOWwwLTExNy44QzIzNiA1My4yIDI1Ny4yIDMyIDI4My4xIDMyczQ3LjEgMjEuMiA0Ny4xIDQ3LjFsMCAxMTcuOHptLTQ3LjEgMTg5YzI1LjkgMCA0Ny4xIDIxLjIgNDcuMSA0Ny4xUzMwOSA0ODAgMjgzLjEgNDgwIDIzNiA0NTguOCAyMzYgNDMyLjlsMC00Ny4xIDQ3LjEgMHptMC0yMy43Yy0yNS45IDAtNDcuMS0yMS4yLTQ3LjEtNDcuMVMyNTcuMiAyNjggMjgzLjEgMjY4bDExNy44IDBjMjUuOSAwIDQ3LjEgMjEuMiA0Ny4xIDQ3LjFzLTIxLjIgNDcuMS00Ny4xIDQ3LjFsLTExNy44IDB6Il19LGhWPXQyZSxRNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYW5nZWxsaXN0IixpY29uOlszODQsNTEyLFtdLCJmMjA5IiwiTTMxNS42IDIxNS40YzExLjctMzIuNiA0NS40LTEyNi45IDQ1LjQtMTU3LjEgMC0yNi42LTE1LjctNDguOS00My43LTQ4LjktNDQuNiAwLTg0LjYgMTMxLjctOTcuMSAxNjMuMS05LjctMjguNS01NS4xLTE3Mi41LTk1LjEtMTcyLjUtMzEuMSAwLTQ1LjcgMjIuOS00NS43IDUxLjcgMCAzNS4zIDM0LjIgMTI2LjggNDYuNiAxNjItNi4zLTIuMy0xMy4xLTQuMy0yMC00LjMtMjMuNCAwLTQ4LjMgMjkuMS00OC4zIDUyLjYgMCA4LjkgNC45IDIxLjQgOCAyOS43LTM2LjkgMTAtNTEuMSAzNC42LTUxLjEgNzEuNy0uMSA3Mi4yIDY4LjMgMTQ4LjYgMTY0LjUgMTQ4LjYgMTE4IDAgMTkxLjQtODguNiAxOTEuNC0yMDIuOSAwLTQzLjEtNi45LTgyLTU0LjktOTMuN3pNMjgwLjIgMTA4YzQtMTIuMyAyMS4xLTY0LjMgMzcuMS02NC4zIDguNiAwIDEwLjkgOC45IDEwLjkgMTYgMCAxOS4xLTM4LjYgMTI0LjYtNDcuMSAxNDhsLTM0LTYgMzMuMS05My43ek0xMTAuOCA0OC4zYzAtMTEuOSAxNC41LTQ1LjcgNDYuMyA0Ny4xbDM0LjYgMTAwLjNjLTE1LjYtMS4zLTI3LjctMy0zNS40IDEuNC0xMC45LTI4LjgtNDUuNS0xMTkuNy00NS41LTE0OC44ek0xMDguNSAyNDRjMjkuMyAwIDY3LjEgOTQuNiA2Ny4xIDEwNy40IDAgNS4xLTQuOSAxMS40LTEwLjYgMTEuNC0yMC45IDAtNzYuOS03Ni45LTc2LjktOTcuNyAuMS03LjcgMTIuNy0yMS4xIDIwLjQtMjEuMXpNMjkyLjggNDMwLjNjLTI5LjEgMzItNjYuMyA0OC42LTEwOS43IDQ4LjYtNTkuNCAwLTEwNi4zLTMyLjYtMTI4LjktODguMy0xNy4xLTQzLjQgMy44LTY4LjMgMjAuNi02OC4zIDExLjQgMCA1NC4zIDYwLjMgNTQuMyA3My4xIDAgNC45LTcuNyA4LjMtMTEuNyA4LjMtMTYuMSAwLTIyLjQtMTUuNS01MS4xLTUxLjQtMjkuNyAyOS43IDIwLjUgODYuOSA1OC4zIDg2LjkgMjYuMSAwIDQzLjEtMjQuMiAzOC00MiAzLjcgMCA4LjMgLjMgMTEuNy0uNiAxLjEgMjcuMSA5LjEgNTkuNCA0MS43IDYxLjcgMC0uOSAyLTcuMSAyLTcuNCAwLTE3LjQtMTAuNi0zMi42LTEwLjYtNTAuMyAwLTI4LjMgMjEuNy01NS43IDQzLjctNzEuNyA4LTYgMTcuNy05LjcgMjcuMS0xMy4xIDkuNy0zLjcgMjAtOCAyNy40LTE1LjQtMS4xLTExLjItNS43LTIxLjEtMTYuOS0yMS4xLTI3LjcgMC0xMjAuNiA0LTEyMC42LTM5LjcgMC02LjcgLjEtMTMuMSAxNy40LTEzLjEgMzIuMyAwIDExNC4zIDggMTM4LjMgMjkuMSAxOC4xIDE2LjEgMjQuMyAxMTMuMi0zMSAxNzQuN3ptLTk4LjYtMTI2YzkuNyAzLjEgMTkuNyA0IDI5LjcgNi03LjQgNS40LTE0IDEyLTIwLjMgMTkuMS0yLjgtOC41LTYuMi0xNi44LTkuNC0yNS4xeiJdfSxLNHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYW5kcm9pZCIsaWNvbjpbNTc2LDUxMixbXSwiZjE3YiIsIk00MjAuNSAyNTMuOWEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bS0yNjUuMSAwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMjczLjctOTYuNWw0Ny45LTgzYy44LTEuMSAxLjMtMi40IDEuNS0zLjhzLjItMi43LS4xLTQuMS0uOS0yLjYtMS43LTMuNy0xLjgtMi0zLTIuNy0yLjUtMS4xLTMuOS0xLjMtMi43IDAtNCAuNC0yLjUgMS4xLTMuNiAxLjktMS45IDItMi41IDMuMmwtNDguNSA4NC4xYy0zOC44LTE3LjQtODAuOC0yNi40LTEyMy4zLTI2LjRzLTg0LjUgOS0xMjMuMyAyNi40TDExNi4yIDY0LjRjLS42LTEuMi0xLjUtMi4zLTIuNS0zLjJzLTIuMy0xLjUtMy42LTEuOS0yLjctLjUtNC0uNC0yLjcgLjYtMy45IDEuMy0yLjIgMS42LTMgMi43LTEuNCAyLjQtMS43IDMuNy0uMyAyLjctLjEgNC4xIC44IDIuNiAxLjUgMy44bDQ3LjkgODNDNjQuNSAyMDIuMiA4LjIgMjg1LjUgMCAzODRsNTc2IDBjLTguMi05OC41LTY0LjUtMTgxLjgtMTQ2LjktMjI2LjZ6Il19LEo0dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJtZWV0dXAiLGljb246WzU3Niw1MTIsW10sImYyZTAiLCJNMTMxLjEgNDE0LjNjMS4xIDUuNy0yLjMgMTEuMS04IDEyLjMtNS40IDEuMS0xMC45LTIuMy0xMi04LTEuMS01LjQgMi4zLTExLjEgNy43LTEyLjNzMTEuMSAyLjMgMTIuMyA4em0xNDMuMSA3MS40Yy02LjMgNC42LTggMTMuNC0zLjcgMjAgNC42IDYuNiAxMy40IDguMyAyMCAzLjcgNi4zLTQuNiA4LTEzLjQgMy40LTIwLTQuMi02LjUtMTMuMS04LjMtMTkuNy0zLjd6bS04Ni00NjIuM2ExMS44IDExLjggMCAxIDAgLTQuOS0yMyAxMS44IDExLjggMCAxIDAgNC45IDIzek02Ni41IDIyNi4zYTIyLjIgMjIuMiAwIDEgMCAtMjQuNyAzNi45IDIyLjIgMjIuMiAwIDEgMCAyNC43LTM2Ljl6bTI3Mi0xNzAuOWEyMi4xIDIyLjEgMCAxIDAgLTIyLjQtMzggMjIuMSAyMi4xIDAgMSAwIDIyLjQgMzh6bS0xOTEuMSA1OGExNi45IDE2LjkgMCAxIDAgLTE4LjgtMjggMTYuOSAxNi45IDAgMSAwIDE4LjggMjh6bTM3Mi4zIDE1NmMtNy40IDEuNy0xMi4zIDkuMS0xMC42IDE2LjkgMS40IDcuNCA4LjkgMTIuMyAxNi4zIDEwLjYgNy40LTEuNCAxMi4zLTguOSAxMC42LTE2LjYtMS41LTcuNC04LjktMTIuMy0xNi4zLTEwLjl6bTM5LjctNTYuOGExMC4xIDEwLjEgMCAxIDAgLTE5LjggNC4zIDEwLjEgMTAuMSAwIDEgMCAxOS44LTQuM3ptLTgwLjMtNzMuN2ExOC44IDE4LjggMCAxIDAgMjAuNyAzMS4zIDE4LjggMTguOCAwIDEgMCAtMjAuNy0zMS4zem0tNi4zIDEzOS40YzI2LjMgNDMuMSAxNS4xIDEwMC0yNi4zIDEyOS4xLTE3LjQgMTIuMy0zNy4xIDE3LjctNTYuOSAxNy4xLTEyIDQ3LjEtNjkuNCA2NC42LTEwNS4xIDMyLjYtMS4xIC45LTIuNiAxLjctMy43IDIuOS0zOS4xIDI3LjEtOTIuMyAxNy40LTExOS40LTIyLjMtOS43LTE0LjMtMTQuNi0zMC42LTE1LjEtNDYuOS02NS40LTEwLjktOTAtOTQtNDEuMS0xMzkuNy0yOC4zLTQ2LjkgLjYtMTA3LjQgNTMuNC0xMTQuOSAyNS4xLTY2LjIgMTA3LjYtOTcuNiAxNjMuNi01NC4yIDY3LjQtMjIuMyAxMzYuMyAyOS40IDEzMC45IDEwMS4xIDQxLjEgMTIuNiA1Mi44IDY2LjkgMTkuNyA5NS4yem0tNzAgNzQuM2MtMy4xLTIwLjYtNDAuOS00LjYtNDMuMS0yNy4xLTMuMS0zMiA0My43LTEwMS4xIDQwLTEyOC0zLjQtMjQtMTkuNC0yOS4xLTMzLjQtMjkuNC0xMy40LS4zLTE2LjkgMi0yMS40IDQuNi0yLjkgMS43LTYuNiA0LjktMTEuNy0uMy02LjMtNi0xMS4xLTExLjctMTkuNC0xMi45LTEyLjMtMi0xNy43IDItMjYuNiA5LjctMy40IDIuOS0xMiAxMi45LTIwIDkuMS0zLjQtMS43LTE1LjQtNy43LTI0LTExLjQtMTYuMy03LjEtNDAgNC42LTQ4LjYgMjAtMTIuOSAyMi45LTM4IDExMy4xLTQxLjcgMTI1LjEtOC42IDI2LjYgMTAuOSA0OC42IDM2LjkgNDcuMSAxMS4xLS42IDE4LjMtNC42IDI1LjQtMTcuNCA0LTcuNCA0MS43LTEwNy43IDQ0LjYtMTEyLjYgMi0zLjQgOC45LTggMTQuNi01LjEgNS43IDMuMSA2LjkgOS40IDYgMTUuMS0xLjEgOS43LTI4IDcwLjktMjguOSA3Ny43LTMuNCAyMi45IDI2LjkgMjYuNiAzOC42IDQgMy43LTcuMSA0NS43LTkyLjYgNDkuNC05OC4zIDQuMy02LjMgNy40LTguMyAxMS43LTggMy4xIDAgOC4zIC45IDcuMSAxMC45LTEuNCA5LjQtMzUuMSA3Mi4zLTM4LjkgODcuNy00LjYgMjAuNiA2LjYgNDEuNCAyNC45IDUwLjYgMTEuNCA1LjcgNjIuNSAxNS43IDU4LjUtMTEuMXptNS43IDkyLjNhMjMuMyAyMy4zIDAgMSAwIDI2LjIgMzguNCAyMy4zIDIzLjMgMCAxIDAgLTI2LjItMzguNHoiXX0sZTN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZvbnRpY29ucy1maSIsaWNvbjpbMzg0LDUxMixbXSwiZjNhMiIsIk0xMTQuNCAyMjRsOTIuNCAwLTE1LjIgNTEuMi03Ni40IDAgMCAxNTcuOGMwIDgtMi44IDkuMiA0LjQgMTBsNTkuNiA1LjYgMCAzNC40LTE3OS4yIDAgMC0zNS4yIDI5LjItMi44YzcuMi0uOCA5LjItMy4yIDkuMi0xMC44bDAtMTU1LjhjMC0zLjItNC0zLjItOC0zLjJsLTMwLjQgMCAwLTUxLjIgMzguNCAwIDAtMjguOGMwLTY4IDM2LjQtOTYgMTA2LTk2IDQ2LjggMCA4OC44IDExLjIgODguOCA3Mi40TDE2My42IDE4MGMuNC0yNS42LTYtMzEuNi0yMi40LTMxLjYtMjUuMiAwLTI2IDEzLjYtMjYgMzcuNmwwIDMyYzAgMy4yLTQuOCA2LS44IDZ6TTM4NCA0ODNsLTE0MC44IDAgMC0zNC40IDI4LTMuNmM3LjItLjggMTAuNC0yLjQgMTAuNC0xMGwwLTE0OGMwLTUuNi00LTkuMi05LjItMTAuOGwtMzMuMi04LjggOS4yLTQwLjQgMTEwIDAgMCAyMDhjMCA4LTMuNiA4LjggNCAxMGwyMS42IDMuNiAwIDM0LjR6TTM1NCAxMzUuOGwxMi40IDQ1LjYtMTAgMTAtNDIuOC0yMi44LTQyLjggMjIuOC0xMC0xMCAxMi40LTQ1LjYtMzAtMzYuNCA0LjgtMTAgMzggMCAyMS4yLTM4LjQgMTIuOCAwIDIxLjIgMzguNCAzOCAwIDQuOCAxMy4yLTMwIDMzLjJ6Il19LHQzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwYWxmZWQiLGljb246WzU3Niw1MTIsW10sImYzZDgiLCJNMzg0LjkgMTkzLjljMC00Ny40LTU1LjItNDQuMi05NS40LTI5LjgtMS4zIDM5LjQtMi41IDgwLjctMyAxMTkuOCAuNyAyLjggMi42IDYuMiAxNS4xIDYuMiAzNi44IDAgODMuNC00Mi44IDgzLjMtOTYuMnpNMTkwLjQgMjY2LjFjLjIgMCA2LjUtMi43IDExLjItMi43IDI2LjYgMCAyMC43IDQ0LjEtMTQuNCA0NC4xLTIxLjUgMC0zNy4xLTE4LjEtMzcuMS00MyAwLTQyIDQyLjktOTUuNiAxMDAuNy0xMjYuNSAxLTEyLjQgMy0yMiAxMC41LTI4LjIgMTEuMi05IDI2LjYtMy41IDI5LjUgMTEuMSA3Mi4yLTIyLjIgMTM1LjIgMSAxMzUuMiA3MiAwIDc3LjktNzkuMyAxNTIuNi0xNDAuMSAxMzguMi0uMSAzOS40IC45IDc0LjQgMi43IDEwMGwwIC4yYy4yIDMuNCAuNiAxMi41LTUuMyAxOS4xLTkuNiAxMC42LTMzLjQgMTAtMzYuNC0yMi4zLTQuMS00NC40IC4yLTIwNi4xIDEuNC0yNDIuNS0yMS41IDE1LTU4LjUgNTAuMy01OC41IDc1LjkgLjIgMi41IC40IDQgLjYgNC42ek04IDE4MS4xcy0uMSAzNy40IDM4LjQgMzcuNGwzMCAwIDIyLjQgMjE3LjJzMCA0NC4zIDQ0LjcgNDQuM2wyODguOSAwczQ0LjctLjQgNDQuNy00NC4zbDIyLjQtMjE3LjIgMzAgMHMzOC40IDEuMiAzOC40LTM3LjRjMCAwIC4xLTM3LjQtMzguNC0zNy40bC0zMC4xIDBjLTcuMy0yNS42LTMwLjItNzQuMy0xMTkuNC03NC4zbC0yOCAwIDAtMTkuMXMtMi43LTE4LjQtMjEuMS0xOC40bC04NS44IDBTMjI0IDMxLjkgMjI0IDUwLjNsMCAxOS4xLTI4LjEgMHMtMTA1IDQuMi0xMjAuNSA3NC4zbC0yOSAwUzggMTQyLjUgOCAxODEuMXoiXX0sYTN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6IndwYmVnaW5uZXIiLGljb246WzUxMiw1MTIsW10sImYyOTciLCJNNDYzLjIgMzIyLjRjNTYuMiA2NC4zIDQuMiAxNTcuNi05MS45IDE1Ny42LTM5LjYgMC03OC44LTE3LjctMTAwLjEtNTAtNi45IC40LTIyLjcgLjQtMjkuNiAwLTIxLjQgMzIuNC02MC42IDUwLTEwMC4xIDUwLTk1LjUgMC0xNDguMy05My05MS45LTE1Ny42LTc5LjEtMTMxLjkgMzEuMy0yOTAuNCAyMDYuOC0yOTAuNCAxNzUuNiAwIDI4NS45IDE1OC42IDIwNi44IDI5MC40em0tMzM5LjYtODNsNDEuNSAwIDAtNTguMS00MS41IDAgMCA1OC4xem0yMTcuMiA4Ni4xbDAtMjMuOGMtNjAuNSAyMC45LTEzMi40IDkuMi0xODcuNi0zNGwuMiAyNC45YzUxLjEgNDYuNCAxMzEuNyA1Ny45IDE4Ny4zIDMyLjl6TTE5MCAyMzkuNGwxNjYuMSAwIDAtNTguMS0xNjYuMSAwIDAgNTguMXoiXX0scjN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRpYXNwb3JhIixpY29uOls0NDgsNTEyLFtdLCJmNzkxIiwiTTIxOS43IDM1NC42Yy0xLjQgMC04OCAxMTkuOS04OC43IDExOS45UzQ0LjQgNDE0IDQ0IDQxMy4zIDEzMC42IDI4Ny41IDEzMC42IDI4NS44YzAtMi4yLTEyOS42LTQ0LTEzNy42LTQ3LjEtMS4zLS41IDMxLjQtMTAxLjggMzEuNy0xMDIuMSAuNi0uNyAxNDQuNCA0NyAxNDUuNSA0NyAuNCAwIC45LS42IDEtMS4zIC40LTIgMS0xNDguNiAxLjctMTQ5LjYgLjgtMS4yIDEwNC41LS43IDEwNS4xLS4zIDEuNSAxIDMuNSAxNTYuMSA2LjEgMTU2LjEgMS40IDAgMTM4LjctNDcgMTM5LjMtNDYuMyAuOCAuOSAzMS45IDEwMi4yIDMxLjUgMTAyLjYtLjkgLjktMTQwLjIgNDcuMS0xNDAuNiA0OC44LS4zIDEuNCA4Mi44IDEyMi4xIDgyLjUgMTIyLjlzLTg1LjUgNjMuNS04Ni4zIDYzLjVjLTEtLjItODktMTI1LjUtOTAuOS0xMjUuNWwwIDB6Il19LGkzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwcm9kdWN0LWh1bnQiLGljb246WzUxMiw1MTIsW10sImYyODgiLCJNMzI2LjMgMjE4LjhjMCAyMC41LTE2LjcgMzcuMi0zNy4yIDM3LjJsLTcwLjMgMCAwLTc0LjQgNzAuMyAwYzIwLjUgMCAzNy4yIDE2LjcgMzcuMiAzNy4yek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem0zNjcuOS0zNy4yYzAtNDcuOS0zOC45LTg2LjgtODYuOC04Ni44bC0xMTkuOSAwIDAgMjQ4IDQ5LjYgMCAwLTc0LjQgNzAuMyAwYzQ3LjkgMCA4Ni44LTM4LjkgODYuOC04Ni44eiJdfSxvM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLXVwd29yayIsaWNvbjpbNDQ4LDUxMixbXSwiZTY3YyIsIk01NiAzMmwzMzYgMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDMzNmMwIDMwLjktMjUuMSA1Ni01NiA1Nkw1NiA0ODBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgODhDMCA1Ny4xIDI1LjEgMzIgNTYgMzJ6TTI3MC45IDI3NC4yYzYuNi01Mi45IDI1LjktNjkuNSA1MS40LTY5LjUgMjUuMyAwIDQ0LjkgMjAuMiA0NC45IDQ5LjdzLTE5LjcgNDkuNy00NC45IDQ5LjdjLTI3LjkgMC00Ni4zLTIxLjUtNTEuNC0yOS45em0tMjYuNy00MS44Yy04LjItMTUuNS0xNC4zLTM2LjMtMTkuMi01NS42bC02Mi45IDAgMCA3OC4xYzAgMjguNC0xMi45IDQ5LjQtMzguMiA0OS40Uzg0LjEgMjgzLjQgODQuMSAyNTVsLjMtNzguMS0zNi4yIDAgMCA3OC4xYzAgMjIuOCA3LjQgNDMuNSAyMC45IDU4LjIgMTMuOSAxNS4yIDMyLjggMjMuMiA1NC44IDIzLjIgNDMuNyAwIDc0LjItMzMuNSA3NC4yLTgxLjVsMC01Mi41YzQuNiAxNy4zIDE1LjQgNTAuNSAzNi4yIDc5LjdsLTE5LjMgMTEwLjUgMzYuOCAwIDEyLjgtNzguNGM0LjIgMy41IDguNyA2LjYgMTMuNCA5LjQgMTIuMyA3LjggMjYuNCAxMi4yIDQwLjkgMTIuNmwzLjQgMGM0NS4xIDAgODAuOS0zNC45IDgwLjktODEuOXMtMzUuOS04Mi4yLTgwLjktODIuMmMtNDUuNCAwLTcwLjkgMjkuNy03OC4xIDYwLjFsMCAuMnoiXX0sczN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImN1dHRsZWZpc2giLGljb246WzQ0OCw1MTIsW10sImYzOGMiLCJNMzQ4IDMwNS41Yy0xNy41IDMxLjYtNTcuNCA1NC41LTk2IDU0LjUtNTYuNiAwLTEwNC00Ny40LTEwNC0xMDRzNDcuNC0xMDQgMTA0LTEwNGMzOC42IDAgNzguNSAyMi45IDk2IDU0LjUgMTMuNy01MC45IDQxLjctOTMuMyA4Ny0xMTcuOC00NS4zLTQ5LjYtMTEwLjUtODAuNy0xODMtODAuNy0xMzcgMC0yNDggMTExLTI0OCAyNDhTMTE1IDUwNCAyNTIgNTA0YzcyLjUgMCAxMzcuNy0zMS4xIDE4My04MC43LTQ1LjMtMjQuNS03My4zLTY2LjktODctMTE3Ljh6Il19LG4zdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJtZWRhcHBzIixpY29uOlszMjAsNTEyLFtdLCJmM2M2IiwiTTExOC4zIDIzOC40YzMuNS0xMi41IDYuOS0zMy42IDEzLjItMzMuNiA4LjMgMS44IDkuNiAyMy40IDE4LjYgMzYuNiA0LjYtMjMuNSA1LjMtODUuMSAxNC4xLTg2LjcgOS0uNyAxOS43IDY2LjUgMjIgNzcuNSA5LjkgNC4xIDQ4LjkgNi42IDQ4LjkgNi42IDEuOSA3LjMtMjQgNy42LTQwIDcuOC00LjYgMTQuOC01LjQgMjcuNy0xMS40IDI4LTQuNyAuMi04LjItMjguOC0xNy41LTQ5LjZsLTkuNCA2NS41Yy00LjQgMTMtMTUuNS0yMi41LTIxLjktMzkuMy0zLjMtLjEtNjIuNC0xLjYtNDcuNi03LjhsMzEtNXpNMjI4IDQ0OGMyMS4yIDAgMjEuMi0zMiAwLTMyTDkyIDQxNmMtMjEuMiAwLTIxLjIgMzIgMCAzMmwxMzYgMHptLTI0IDY0YzIxLjIgMCAyMS4yLTMyIDAtMzJsLTg4IDBjLTIxLjIgMC0yMS4yIDMyIDAgMzJsODggMHptMzQuMi0xNDEuNWMzLjItMTguOSA1LjItMzYuNCAxMS45LTQ4LjggNy45LTE0LjcgMTYuMS0yOC4xIDI0LTQxIDI0LjYtNDAuNCA0NS45LTc1LjIgNDUuOS0xMjUuNSAwLTg1LjYtNzEuOC0xNTUuMi0xNjAtMTU1LjJTMCA2OS42IDAgMTU1LjJjMCA1MC4yIDIxLjMgODUuMSA0NS45IDEyNS41IDcuOSAxMi45IDE2IDI2LjMgMjQgNDEgNi43IDEyLjUgOC43IDI5LjggMTEuOSA0OC45IDMuNSAyMSAzNi4xIDE1LjcgMzIuNi01LjEtMy42LTIxLjctNS42LTQwLjctMTUuMy01OC42LTMyLjYtNjAuNC02Ni4xLTk1LjYtNjYuMS0xNTEuNyAwLTY3LjkgNTctMTIzLjIgMTI3LTEyMy4yUzI4NyA4Ny4zIDI4NyAxNTUuMmMwIDU2LjEtMzMuNSA5MS4zLTY2LjEgMTUxLjYtOS43IDE4LTExLjcgMzcuNC0xNS4zIDU4LjYtMy40IDIwLjYgMjkgMjYuNCAzMi42IDUuMXoiXX0sbDN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBpeCIsaWNvbjpbNTEyLDUxMixbXSwiZTQzYSIsIk0yNDIuNCAyOTIuNWM1LjQtNS40IDE0LjctNS40IDIwLjEgMGw3NyA3N2MxNC4yIDE0LjIgMzMuMSAyMiA1My4xIDIybDE1LjEgMC05Ny4xIDk3LjFjLTMwLjMgMjkuNS03OS41IDI5LjUtMTA5LjggMGwtOTcuNS05Ny40IDkuMyAwYzIwIDAgMzguOS03LjggNTMuMS0yMmw3Ni43LTc2Ljd6bTIwLjEtNzMuNmMtNi40IDUuNS0xNC42IDUuNi0yMC4xIDBsLTc2LjctNzYuN2MtMTQuMi0xNS4xLTMzLjEtMjItNTMuMS0yMmwtOS4zIDAgOTcuNC05Ny40YzMwLjQtMzAuMyA3OS42LTMwLjMgMTA5LjkgMGw5Ny4yIDk3LjEtMTUuMiAwYy0yMCAwLTM4LjkgNy44LTUzLjEgMjJsLTc3IDc3ek0xMTIuNiAxNDIuN2MxMy44IDAgMjYuNSA1LjYgMzcuMSAxNS40bDc2LjcgNzYuN2M3LjIgNi4zIDE2LjYgMTAuOCAyNi4xIDEwLjggOS40IDAgMTguOC00LjUgMjYtMTAuOGw3Ny03N2M5LjgtOS43IDIzLjMtMTUuMyAzNy4xLTE1LjNsMzcuNyAwIDU4LjMgNTguM2MzMC4zIDMwLjMgMzAuMyA3OS41IDAgMTA5LjhsLTU4LjMgNTguMy0zNy43IDBjLTEzLjggMC0yNy4zLTUuNi0zNy4xLTE1LjRsLTc3LTc3Yy0xMy45LTEzLjktMzguMi0xMy45LTUyLjEgLjFsLTc2LjcgNzYuNmMtMTAuNiA5LjgtMjMuMyAxNS40LTM3LjEgMTUuNGwtMzEuOCAwLTU4LTU4Yy0zMC4zLTMwLjMtMzAuMy03OS41IDAtMTA5LjhsNTgtNTguMSAzMS44IDB6Il19LGEyZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtdHVtYmxyIixpY29uOls0NDgsNTEyLFsidHVtYmxyLXNxdWFyZSJdLCJmMTc0IiwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNTYuOCA0MTZjLTc1LjUgMC05MS45LTU1LjUtOTEuOS04Ny45bDAtOTAtMjkuNyAwYy0zLjQgMC02LjItMi44LTYuMi02LjJsMC00Mi41YzAtNC41IDIuOC04LjUgNy4xLTEwIDM4LjgtMTMuNyA1MC45LTQ3LjUgNTIuNy03My4yIC41LTYuOSA0LjEtMTAuMiAxMC0xMC4ybDQ0LjMgMGMzLjQgMCA2LjIgMi44IDYuMiA2LjJsMCA3MiA1MS45IDBjMy40IDAgNi4yIDIuOCA2LjIgNi4ybDAgNTEuMWMwIDMuNC0yLjggNi4yLTYuMiA2LjJsLTUyLjEgMCAwIDgzLjNjMCAyMS40IDE0LjggMzMuNSA0Mi41IDIyLjQgMy0xLjIgNS42LTIgOC0xLjQgMi4yIC41IDMuNiAyLjEgNC42IDQuOUwzMTggMzg3LjFjMSAzLjIgMiA2LjctLjMgOS4xLTguNSA5LjEtMzEuMiAxOS44LTYwLjkgMTkuOHoiXX0sYzN0PWEyZSxkM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicmVhY3QiLGljb246WzUxMiw1MTIsW10sImY0MWIiLCJNNDE4LjIgMTc3LjJjLTUuNC0xLjgtMTAuOC0zLjUtMTYuMi01LjEgLjktMy43IDEuNy03LjQgMi41LTExLjEgMTIuMy01OS42IDQuMi0xMDcuNS0yMy4xLTEyMy4zLTI2LjMtMTUuMS02OS4yIC42LTExMi42IDM4LjQtNC4zIDMuNy04LjUgNy42LTEyLjUgMTEuNS0yLjctMi42LTUuNS01LjItOC4zLTcuNy00NS41LTQwLjQtOTEuMS01Ny40LTExOC40LTQxLjUtMjYuMiAxNS4yLTM0IDYwLjMtMjMgMTE2LjcgMS4xIDUuNiAyLjMgMTEuMSAzLjcgMTYuNy02LjQgMS44LTEyLjcgMy44LTE4LjYgNS45LTUzLjQgMTguNS05MS43IDQ3LjctOTEuNyA3Ny45IDAgMzEuMiA0MC44IDYyLjUgOTYuMyA4MS41IDQuNSAxLjUgOSAzIDEzLjYgNC4zLTEuNSA2LTIuOCAxMS45LTQgMTgtMTAuNSA1NS41LTIuMyA5OS41IDIzLjkgMTE0LjYgMjcgMTUuNiA3Mi40LS40IDExNi42LTM5LjEgMy41LTMuMSA3LTYuMyAxMC41LTkuNyA0LjQgNC4zIDkgOC40IDEzLjYgMTIuNCA0Mi44IDM2LjggODUuMSA1MS43IDExMS4yIDM2LjYgMjctMTUuNiAzNS44LTYyLjkgMjQuNC0xMjAuNS0uOS00LjQtMS45LTguOS0zLTEzLjUgMy4yLS45IDYuMy0xLjkgOS40LTIuOSA1Ny43LTE5LjEgOTkuNS01MCA5OS41LTgxLjcgMC0zMC4zLTM5LjQtNTkuNy05My44LTc4LjR6TTI4Mi45IDkyLjNjMzcuMi0zMi40IDcxLjktNDUuMSA4Ny43LTM2IDE2LjkgOS43IDIzLjQgNDguOSAxMi44IDEwMC40LS43IDMuNC0xLjQgNi43LTIuMyAxMC0yMi4yLTUtNDQuNy04LjYtNjcuMy0xMC42LTEzLTE4LjYtMjcuMi0zNi40LTQyLjYtNTMuMSAzLjktMy43IDcuNy03LjIgMTEuNy0xMC43ek0xNjcuMiAzMDcuNWM1LjEgOC43IDEwLjMgMTcuNCAxNS44IDI1LjktMTUuNi0xLjctMzEuMS00LjItNDYuNC03LjUgNC40LTE0LjQgOS45LTI5LjMgMTYuMy00NC41IDQuNiA4LjggOS4zIDE3LjUgMTQuMyAyNi4xek0xMzYuOSAxODcuMmMxNC40LTMuMiAyOS43LTUuOCA0NS42LTcuOC01LjMgOC4zLTEwLjUgMTYuOC0xNS40IDI1LjQtNC45IDguNS05LjcgMTcuMi0xNC4yIDI2LTYuMy0xNC45LTExLjYtMjkuNS0xNi00My42em0yNy40IDY4LjljNi42LTEzLjggMTMuOC0yNy4zIDIxLjQtNDAuNnMxNS44LTI2LjIgMjQuNC0zOC45YzE1LTEuMSAzMC4zLTEuNyA0NS45LTEuN3MzMSAuNiA0NS45IDEuN2M4LjUgMTIuNiAxNi42IDI1LjUgMjQuMyAzOC43czE0LjkgMjYuNyAyMS43IDQwLjRjLTYuNyAxMy44LTEzLjkgMjcuNC0yMS42IDQwLjgtNy42IDEzLjMtMTUuNyAyNi4yLTI0LjIgMzktMTQuOSAxLjEtMzAuNCAxLjYtNDYuMSAxLjZzLTMwLjktLjUtNDUuNi0xLjRjLTguNy0xMi43LTE2LjktMjUuNy0yNC42LTM5cy0xNC44LTI2LjgtMjEuNS00MC42em0xODAuNiA1MS4yYzUuMS04LjggOS45LTE3LjcgMTQuNi0yNi43IDYuNCAxNC41IDEyIDI5LjIgMTYuOSA0NC4zLTE1LjUgMy41LTMxLjIgNi4yLTQ3IDggNS40LTguNCAxMC41LTE3IDE1LjUtMjUuNnptMTQuNC03Ni41Yy00LjctOC44LTkuNS0xNy42LTE0LjUtMjYuMi00LjktOC41LTEwLTE2LjktMTUuMy0yNS4yIDE2LjEgMiAzMS41IDQuNyA0NS45IDgtNC42IDE0LjgtMTAgMjkuMi0xNi4xIDQzLjR6TTI1Ni4yIDExOC4zYzEwLjUgMTEuNCAyMC40IDIzLjQgMjkuNiAzNS44LTE5LjgtLjktMzkuNy0uOS01OS41IDAgOS44LTEyLjkgMTkuOS0yNC45IDI5LjktMzUuOHpNMTQwLjIgNTdjMTYuOC05LjggNTQuMSA0LjIgOTMuNCAzOSAyLjUgMi4yIDUgNC42IDcuNiA3LTE1LjUgMTYuNy0yOS44IDM0LjUtNDIuOSA1My4xLTIyLjYgMi00NSA1LjUtNjcuMiAxMC40LTEuMy01LjEtMi40LTEwLjMtMy41LTE1LjUtOS40LTQ4LjQtMy4yLTg0LjkgMTIuNi05NHpNMTE1LjcgMzIwLjZjLTQuMi0xLjItOC4zLTIuNS0xMi40LTMuOS0yMS4zLTYuNy00NS41LTE3LjMtNjMtMzEuMi0xMC4xLTctMTYuOS0xNy44LTE4LjgtMjkuOSAwLTE4LjMgMzEuNi00MS43IDc3LjItNTcuNiA1LjctMiAxMS41LTMuOCAxNy4zLTUuNSA2LjggMjEuNyAxNSA0MyAyNC41IDYzLjYtOS42IDIwLjktMTcuOSA0Mi41LTI0LjggNjQuNXptMTE2LjYgOThjLTE2LjUgMTUuMS0zNS42IDI3LjEtNTYuNCAzNS4zLTExLjEgNS4zLTIzLjkgNS44LTM1LjMgMS4zLTE1LjktOS4yLTIyLjUtNDQuNS0xMy41LTkyIDEuMS01LjYgMi4zLTExLjIgMy43LTE2LjcgMjIuNCA0LjggNDUgOC4xIDY3LjkgOS44IDEzLjIgMTguNyAyNy43IDM2LjYgNDMuMiA1My40LTMuMiAzLjEtNi40IDYuMS05LjYgOC45em0yNC41LTI0LjNjLTEwLjItMTEtMjAuNC0yMy4yLTMwLjMtMzYuMyA5LjYgLjQgMTkuNSAuNiAyOS41IC42IDEwLjMgMCAyMC40LS4yIDMwLjQtLjctOS4yIDEyLjctMTkuMSAyNC44LTI5LjYgMzYuNHptMTMwLjcgMzBjLS45IDEyLjItNi45IDIzLjYtMTYuNSAzMS4zLTE1LjkgOS4yLTQ5LjgtMi44LTg2LjQtMzQuMi00LjItMy42LTguNC03LjUtMTIuNy0xMS41IDE1LjMtMTYuOSAyOS40LTM0LjggNDIuMi01My42IDIyLjktMS45IDQ1LjctNS40IDY4LjItMTAuNSAxIDQuMSAxLjkgOC4yIDIuNyAxMi4yIDQuOSAyMS42IDUuNyA0NC4xIDIuNSA2Ni4zem0xOC4yLTEwNy41Yy0yLjggLjktNS42IDEuOC04LjUgMi42LTctMjEuOC0xNS42LTQzLjEtMjUuNS02My44IDkuNi0yMC40IDE3LjctNDEuNCAyNC41LTYyLjkgNS4yIDEuNSAxMC4yIDMuMSAxNSA0LjcgNDYuNiAxNiA3OS4zIDM5LjggNzkuMyA1OCAwIDE5LjYtMzQuOSA0NC45LTg0LjggNjEuNHpNMjU2IDMwMS44YTQ1LjggNDUuOCAwIDEgMCAwLTkxLjYgNDUuOCA0NS44IDAgMSAwIDAgOTEuNnoiXX0sZjN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imp4bCIsaWNvbjpbNDQ4LDUxMixbXSwiZTY3YiIsIk00MTIuMiAzMkwzNS44IDMyQzE2IDMyIDAgNDggMCA2Ny44TDAgNDQ0LjJDMCA0NjQgMTYgNDgwIDM1LjggNDgwbDM3Ni40IDBjMTkuOCAwIDM1LjgtMTYgMzUuOC0zNS44bDAtMzc2LjRDNDQ4IDQ4IDQzMiAzMiA0MTIuMiAzMnpNMzc4LjYgMzMzLjdjMCA0MC4yLTMyLjYgNzIuOC03Mi44IDcyLjhsLTIzNS42IDBjMC00MC4yIDMyLjYtNzIuOCA3Mi44LTcyLjhsMjM1LjYgMHptMC0xMTMuOWMwIDQwLjItMzIuNiA3Mi44LTcyLjggNzIuOGwtMjM1LjYgMGMwLTQwLjIgMzIuNi03Mi44IDcyLjgtNzIuOGwyMzUuNiAwem0wLTExMy45YzAgNDAuMi0zMi42IDcyLjgtNzIuOCA3Mi44bC0yMzUuNiAwYzAtNDAuMiAzMi42LTcyLjggNzIuOC03Mi44bDIzNS42IDB6Il19LHUzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtbGlua2VkaW4iLGljb246WzQ0OCw1MTIsW10sImU3ZDAiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNSAxNzAuMmw2Ni41IDAgMCAyMTMuOC02Ni41IDAgMC0yMTMuOHptNzEuNy02Ny43YTM4LjUgMzguNSAwIDEgMSAtNzcgMCAzOC41IDM4LjUgMCAxIDEgNzcgMHpNMzE3LjkgNDE2bDAtMTA0YzAtMjQuOC0uNS01Ni43LTM0LjUtNTYuNy0zNC42IDAtMzkuOSAyNy0zOS45IDU0LjlsMCAxMDUuOC02Ni40IDAgMC0yMTMuOCA2My43IDAgMCAyOS4yIC45IDBjOC45LTE2LjggMzAuNi0zNC41IDYyLjktMzQuNSA2Ny4yIDAgNzkuNyA0NC4zIDc5LjcgMTAxLjlsMCAxMTcuMi02Ni40IDB6Il19LHAzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjc3MiLGljb246WzQ0OCw1MTIsW10sImU2YTIiLCJNMzc2LjMgMzJMMCAzMiAwIDQwOC4zYzAgMTkgNy42IDM3LjIgMjEgNTAuN3MzMS43IDIxIDUwLjcgMjFsMzA0LjYgMGMxOSAwIDM3LjItNy42IDUwLjctMjFzMjEtMzEuNyAyMS01MC43bDAtMzA0LjZjMC0xOS03LjYtMzcuMi0yMS01MC43cy0zMS43LTIxLTUwLjctMjF6TTMzMi40IDQzMS40Yy03LjctOC41LTExLjctMjAuNy0xMi0zNi42bDMxLjMgMGMuMiAxNC4xIDUuMSAyMS4xIDE0LjggMjEuMWM0LjkgMCA4LjQtMS42IDEwLjUtNC43YzItMy4xIDMtOCAzLTE0LjhjMC01LjQtMS4zLTkuOS00LTEzLjRjLTMuNS00LjItOC4xLTcuNS0xMy4yLTkuNUwzNTEuMiAzNjhjLTEwLjMtNC45LTE3LjgtMTAuOC0yMi41LTE3LjZjLTQuNS02LjgtNi43LTE2LjMtNi43LTI4LjRjMC0xMy42IDQtMjQuNiAxMS44LTMzLjFjOC4xLTguNSAxOS4xLTEyLjcgMzMuMi0xMi43YzEzLjYgMCAyNC4xIDQuMiAzMS41IDEyLjVjNy41IDguNCAxMS41IDIwLjMgMTEuOCAzNS45bC0zMC4xIDBjLjItNS4xLS45LTEwLjItMy0xNC44Yy0xLjctMy40LTUtNS4xLTEwLTUuMWMtOC44IDAtMTMuMiA1LjItMTMuMiAxNS43YzAgNS4zIDEuMSA5LjQgMy4yIDEyLjZjMy4xIDMuNSA3IDYuMiAxMS40IDcuOGwxMS4xIDQuOWMxMS41IDUuMyAxOS43IDExLjcgMjQuOCAxOS40YzUuMSA3LjcgNy42IDE4IDcuNiAzMWMwIDE1LjUtNCAyNy40LTEyLjMgMzUuN2MtOC4yIDguMy0xOS41IDEyLjUtMzQuMSAxMi41cy0yNS42LTQuMi0zMy40LTEyLjd6bS0xMDEgMGMtNy43LTguNS0xMS43LTIwLjctMTItMzYuNmwzMS4zIDBjLjIgMTQuMSA1LjEgMjEuMSAxNC44IDIxLjFjNC45IDAgOC40LTEuNiAxMC40LTQuN2MyLTMuMSAzLTggMy0xNC44YzAtNS40LTEuMy05LjktMy45LTEzLjRjLTMuNS00LjItOC4xLTcuNS0xMy4yLTkuNUwyNTAuMiAzNjhjLTEwLjMtNC45LTE3LjgtMTAuOC0yMi41LTE3LjZjLTQuNS02LjgtNi43LTE2LjMtNi43LTI4LjRjMC0xMy42IDQtMjQuNiAxMS44LTMzLjFjOC4xLTguNSAxOS4xLTEyLjcgMzMuMi0xMi43YzEzLjYgMCAyNC4xIDQuMiAzMS40IDEyLjVjNy42IDguNCAxMS41IDIwLjMgMTEuOSAzNS45bC0zMC4xIDBjLjItNS4xLS45LTEwLjItMy0xNC44Yy0xLjctMy40LTUtNS4xLTEwLTUuMWMtOC44IDAtMTMuMiA1LjItMTMuMiAxNS43YzAgNS4zIDEuMSA5LjQgMy4yIDEyLjZjMy4xIDMuNSA3IDYuMiAxMS40IDcuOGwxMS4xIDQuOWMxMS41IDUuMyAxOS43IDExLjcgMjQuOCAxOS40YzUuMSA3LjcgNy42IDE4IDcuNiAzMWMwIDE1LjUtNC4xIDI3LjQtMTIuMyAzNS43cy0xOS41IDEyLjUtMzQuMSAxMi41cy0yNS42LTQuMi0zMy40LTEyLjd6bS0xMDUuNiAxLjFjLTguNC03LjctMTIuNS0xOS4yLTEyLjUtMzQuNWwwLTc1LjRjMC0xNS4yIDQuNC0yNi43IDEzLjItMzQuNmM4LjktNy44IDIwLjctMTEuOCAzNS4yLTExLjhjMTQuMSAwIDI1LjIgNCAzMy40IDEyYzguMyA4IDEyLjUgMjAgMTIuNSAzNS45bDAgNi0zMy4xIDAgMC01LjhjMC02LjEtMS4zLTEwLjctNC0xMy42Yy0xLjEtMS41LTIuNi0yLjctNC4zLTMuNXMtMy41LTEuMi01LjQtMS4xYy01LjQgMC05LjIgMS44LTExLjQgNS42Yy0yLjMgNS4yLTMuMyAxMC44LTMgMTYuNGwwIDY1LjVjMCAxMy43IDQuOCAyMC42IDE0LjQgMjAuOGM0LjUgMCA3LjktMS42IDEwLjItNC44YzIuNS00LjEgMy43LTguOCAzLjUtMTMuNmwwLTQuOSAzMy4xIDAgMCA1LjFjMCAxMC42LTIuMSAxOS41LTYuMiAyNi42Yy00IDYuOS05LjkgMTIuNS0xNy4xIDE2Yy03LjcgMy43LTE2LjEgNS41LTI0LjYgNS4zYy0xNC4yIDAtMjUuNS0zLjktMzMuOC0xMS42eiJdfSxoM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaGFzaG5vZGUiLGljb246WzUxMiw1MTIsW10sImU0OTkiLCJNMzUuNyAxNzEuMWMtNDYuOSA0Ni00Ni45IDEyMi45IDAgMTY5LjhMMTcxLjYgNDc2LjhjNDYgNDYuOSAxMjIuOSA0Ni45IDE2OS44IDBMNDc3LjMgMzQwLjljNDYuOS00Ni45IDQ2LjktMTIzLjggMC0xNjkuOEwzNDEuNCAzNS4yYy00Ni45LTQ2LjktMTIzLjgtNDYuOS0xNjkuOCAwTDM1LjcgMTcxLjF6TTE5NiAxOTYuNWE4NC41IDg0LjUgMCAxIDEgMTIwIDExOSA4NC41IDg0LjUgMCAxIDEgLTEyMC0xMTl6Il19LG0zdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyZWRkaXQtYWxpZW4iLGljb246WzUxMiw1MTIsW10sImYyODEiLCJNMzczIDEzOC42Yy0yNS4yIDAtNDYuMy0xNy41LTUxLjktNDEtMzAuNiA0LjMtNTQuMiAzMC43LTU0LjIgNjIuNGwwIC4yYzQ3LjQgMS44IDkwLjYgMTUuMSAxMjQuOSAzNi4zIDEyLjYtOS43IDI4LjQtMTUuNSA0NS41LTE1LjUgNDEuMyAwIDc0LjcgMzMuNCA3NC43IDc0LjcgMCAyOS44LTE3LjQgNTUuNS00Mi43IDY3LjUtMi40IDg2LjgtOTcgMTU2LjYtMjEzLjIgMTU2LjZTNDUuNSA0MTAuMSA0MyAzMjMuNGMtMjUuNC0xMS45LTQzLTM3LjctNDMtNjcuNyAwLTQxLjMgMzMuNC03NC43IDc0LjctNzQuNyAxNy4yIDAgMzMgNS44IDQ1LjcgMTUuNiAzNC0yMS4xIDc2LjgtMzQuNCAxMjMuNy0zNi40bDAtLjNjMC00NC4zIDMzLjctODAuOSA3Ni44LTg1LjUgNC45LTI0LjIgMjYuMy00Mi40IDUyLjEtNDIuNCAyOS40IDAgNTMuMyAyMy45IDUzLjMgNTMuM3MtMjMuOSA1My4zLTUzLjMgNTMuM3pNMTU3LjUgMjU1LjNjLTIwLjkgMC0zOC45IDIwLjgtNDAuMiA0Ny45czE3LjEgMzguMSAzOCAzOC4xIDM2LjYtOS44IDM3LjgtMzYuOS0xNC43LTQ5LjEtMzUuNy00OS4xbC4xIDB6TTM5NSAzMDMuMWMtMS4yLTI3LjEtMTkuMi00Ny45LTQwLjItNDcuOXMtMzYuOSAyMi0zNS43IDQ5LjEgMTYuOSAzNi45IDM3LjggMzYuOSAzOS4zLTExIDM4LTM4LjFsLjEgMHptLTYwLjEgNzAuOGMxLjUtMy42LTEtNy43LTQuOS04LjEtMjMtMi4zLTQ3LjktMy42LTczLjgtMy42cy01MC44IDEuMy03My44IDMuNmMtMy45IC40LTYuNCA0LjUtNC45IDguMSAxMi45IDMwLjggNDMuMyA1Mi40IDc4LjcgNTIuNHM2NS44LTIxLjYgNzguNy01Mi40eiJdfSxtVj17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0aWt0b2siLGljb246WzQ0OCw1MTIsW10sImUwN2IiLCJNNDQ4LjUgMjA5LjljLTQ0IC4xLTg3LTEzLjYtMTIyLjgtMzkuMmwwIDE3OC43YzAgMzMuMS0xMC4xIDY1LjQtMjkgOTIuNnMtNDUuNiA0OC03Ni42IDU5LjYtNjQuOCAxMy41LTk2LjkgNS4zLTYwLjktMjUuOS04Mi43LTUwLjgtMzUuMy01Ni0zOS04OC45IDIuOS02Ni4xIDE4LjYtOTUuMiA0MC01Mi43IDY5LjYtNjcuNyA2Mi45LTIwLjUgOTUuNy0xNmwwIDg5LjljLTE1LTQuNy0zMS4xLTQuNi00NiAuNHMtMjcuOSAxNC42LTM3IDI3LjMtMTQgMjguMS0xMy45IDQzLjkgNS4yIDMxIDE0LjUgNDMuNyAyMi40IDIyLjEgMzcuNCAyNi45IDMxLjEgNC44IDQ2LS4xIDI4LTE0LjQgMzcuMi0yNy4xIDE0LjItMjguMSAxNC4yLTQzLjhsMC0zNDkuNCA4OCAwYy0uMSA3LjQgLjYgMTQuOSAxLjkgMjIuMiAzLjEgMTYuMyA5LjQgMzEuOSAxOC43IDQ1LjdzMjEuMyAyNS42IDM1LjIgMzQuNmMxOS45IDEzLjEgNDMuMiAyMC4xIDY3IDIwLjFsMCA4Ny40eiJdfSxnM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid29yZHByZXNzIixpY29uOls1MTIsNTEyLFtdLCJmMTlhIiwiTTYxLjcgMTY5LjRsMTAxLjUgMjc4Yy03MS0zNC40LTExOS45LTEwNy4yLTExOS45LTE5MS40IDAtMzAuOSA2LjYtNjAuMSAxOC40LTg2LjZ6bTMzNy45IDc1LjljMC0yNi4zLTkuNC00NC41LTE3LjUtNTguNy0xMC44LTE3LjUtMjAuOS0zMi40LTIwLjktNDkuOSAwLTE5LjYgMTQuOC0zNy44IDM1LjctMzcuOCAuOSAwIDEuOCAuMSAyLjggLjItMzcuOS0zNC43LTg4LjMtNTUuOS0xNDMuNy01NS45LTc0LjMgMC0xMzkuNyAzOC4xLTE3Ny44IDk1LjkgNSAuMiA5LjcgLjMgMTMuNyAuMyAyMi4yIDAgNTYuNy0yLjcgNTYuNy0yLjcgMTEuNS0uNyAxMi44IDE2LjIgMS40IDE3LjUgMCAwLTExLjUgMS4zLTI0LjMgMmw3Ny41IDIzMC40IDQ2LjYtMTM5LjYtMzMuMS05MC44Yy0xMS41LS43LTIyLjMtMi0yMi4zLTItMTEuNS0uNy0xMC4xLTE4LjIgMS4zLTE3LjUgMCAwIDM1LjEgMi43IDU2IDIuNyAyMi4yIDAgNTYuNy0yLjcgNTYuNy0yLjcgMTEuNS0uNyAxMi44IDE2LjIgMS40IDE3LjUgMCAwLTExLjUgMS4zLTI0LjMgMmw3Ni45IDIyOC43IDIxLjItNzAuOWM5LTI5LjQgMTYtNTAuNSAxNi02OC43ek0yNTkuNyAyNzQuNkwxOTUuOSA0NjAuMWMxOS4xIDUuNiAzOS4yIDguNyA2MC4xIDguNyAyNC44IDAgNDguNS00LjMgNzAuNi0xMi4xLS42LS45LTEuMS0xLjktMS41LTIuOUwyNTkuNyAyNzQuNnptMTgzLTEyMC43Yy45IDYuOCAxLjQgMTQgMS40IDIxLjkgMCAyMS42LTQgNDUuOC0xNi4yIDc2LjJsLTY1IDE4Ny45YzYzLjMtMzYuOSAxMDUuOC0xMDUuNCAxMDUuOC0xODMuOSAwLTM3LTkuNC03MS44LTI2LTEwMi4xek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem00ODQuNiAwYTIzNi42IDIzNi42IDAgMSAwIC00NzMuMiAwIDIzNi42IDIzNi42IDAgMSAwIDQ3My4yIDB6Il19LHgzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJpZGVhbCIsaWNvbjpbNTEyLDUxMixbXSwiZTAxMyIsIk05My44IDE2NS41YTQ5LjEgNDkuMSAwIDEgMCAwIDk4LjEgNDkuMSA0OS4xIDAgMSAwIDAtOTguMXpNNTQuMyA0MjUuOGw3OC45IDAgMC0xNDAuNS03OC45IDAgMCAxNDAuNXpNMjA1LjggMjE0LjJjMC0yMC0xMC0yMi41LTE4LjctMjIuNWwtMTQgMCAwIDQ1LjggMTQgMGM5LjcgMCAxOC43LTIuOCAxOC43LTIzLjN6bTIwMS43IDQ2bDAtOTEuMyAyMi44IDAgMCA2OC42IDMzLjcgMEM0NTQuNiAxMTMuMSAzNTYuOCA4Ni4yIDI2Ny44IDg2LjJsLTk0LjggMCAwIDgyLjggMTQgMGMyNS42IDAgNDEuNSAxNy40IDQxLjUgNDUuMyAwIDI4LjgtMTUuNSA0Ni00MS41IDQ2bC0xNCAwIDAgMTY1LjYgOTQuOCAwYzE0NC42IDAgMTk0LjktNjcuMiAxOTYuNy0xNjUuNmwtNTcuMSAwem0tMTA5LjggMGwtNTYuMiAwIDAtOTEuMiA1NC40IDAgMCAyMi43LTMxLjcgMCAwIDEwLjYgMzAgMCAwIDIyLjctMzAgMCAwIDEyLjUgMzMuNSAwIDAgMjIuN3ptNzQuNyAwbC01LjItMTcuNy0yOS43IDAtNS4yIDE3LjctMjMuNyAwIDI3LjUtOTEuMyAzMi4zIDAgMjcuNSA5MS4zLTIzLjcgMHpNMjY3LjggMzJMLjEgMzIgLjEgNDgwIDI2Ny44IDQ4MGMxNjEuOCAwIDI1MS03OS43IDI1MS0yMjQuNSAwLTgzLjUtMzIuNi0yMjMuNS0yNTEtMjIzLjV6bTAgNDI2LjlsLTI0Ni42IDAgMC00MDUuOSAyNDYuNiAwYzE0Mi4xIDAgMjI5LjkgNjQuNiAyMjkuOSAyMDIuNCAwIDEzNC4xLTgxIDIwMy40LTIyOS45IDIwMy40em04My45LTI2NC45bC03LjUgMjUuOCAxNi40IDAtNy41LTI1LjgtMS40IDB6Il19LGIzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaWVkLXBpcGVyLXBwIixpY29uOls0NDgsNTEyLFtdLCJmMWE3IiwiTTIwNS4zIDE3NC42YzAgMjEuMS0xNC4yIDM4LjEtMzEuNyAzOC4xLTcuMSAwLTEyLjgtMS4yLTE3LjItMy43bDAtNjhjNC40LTIuNyAxMC4xLTQuMiAxNy4yLTQuMiAxNy41IDAgMzEuNyAxNi45IDMxLjcgMzcuOHptNTIuNiA2N2MtNy4xIDAtMTIuOCAxLjUtMTcuMiA0LjJsMCA2OGM0LjQgMi41IDEwLjEgMy43IDE3LjIgMy43IDE3LjQgMCAzMS43LTE2LjkgMzEuNy0zNy44IDAtMjEuMS0xNC4zLTM4LjEtMzEuNy0zOC4xek00NDggODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xODUgMjU1LjFjNDEgMCA3NC4yLTM1LjYgNzQuMi03OS42UzIyNiA5NS45IDE4NSA5NS45Yy0xMiAwLTI0LjEgMy4yLTM0LjYgOC44bC00NS43IDAgMCAyMDYuMyA1MS44LTEwLjEgMC01MC42YzguNiAzLjEgMTguMSA0LjggMjguNSA0Ljh6bTE1OC40IDI1LjNjMC00NC0zMy4yLTc5LjYtNzMuOS03OS42LTMuMiAwLTYuNCAuMi05LjYgLjctMy43IDEyLjUtMTAuMSAyMy44LTE5LjIgMzMuNC0xMy44IDE1LTMyLjIgMjMuOC01MS44IDI0LjhsMCAxNTYuMyA1MS44LTEwLjEgMC01MC42YzguNiAzLjIgMTguMiA0LjcgMjguNyA0LjcgNDAuOCAwIDc0LTM1LjYgNzQtNzkuNnoiXX0sdjN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InVzc3VubmFoIixpY29uOls1MTIsNTEyLFtdLCJmNDA3IiwiTTQ5Ni45IDI2OC4xYzAgNjMuOS0yNS40IDEyNS4yLTcwLjYgMTcwLjNTMzE5LjkgNTA5IDI1NiA1MDkgMTMwLjggNDgzLjUgODUuNyA0MzguNCAxNS4xIDMzMS45IDE1LjEgMjY4YzAtNjMuOSAyNS40LTEyNS4yIDcwLjYtMTcwLjRTMTkyLjIgMjcuMSAyNTYuMSAyNy4xIDM4MS4zIDUyLjQgNDI2LjUgOTcuNiA0OTcgMjA0LjEgNDk3IDI2OGwtLjEgLjF6TTM5LjUgMjY4Yy0uNiAyOC44IDQuNSA1Ny41IDE1LjEgODQuM3MyNi40IDUxLjIgNDYuNiA3MS44IDQ0LjIgMzcgNzAuOCA0OC4xIDU1LjEgMTYuOSA4My45IDE2LjkgNTcuNC01LjggODMuOS0xNi45IDUwLjYtMjcuNSA3MC44LTQ4LjEgMzYtNDUgNDYuNi03MS44IDE1LjctNTUuNSAxNS4xLTg0LjNjLjYtMjguOC00LjUtNTcuNS0xNS4xLTg0LjNzLTI2LjQtNTEuMi00Ni42LTcxLjgtNDQuMi0zNy03MC44LTQ4LjEtNTUuMS0xNi45LTgzLjktMTYuOS01Ny40IDUuOC04My45IDE2LjktNTAuNiAyNy41LTcwLjggNDguMS0zNiA0NS00Ni42IDcxLjgtMTUuNyA1NS41LTE1LjEgODQuM3ptMzg1LjkgNjMuM2MtMTIuNyAwLTIxLjYtMS45LTI2LjctNS45LTUuNS00LjMtOC4yLTEyLjMtOC4yLTIzLjhsMC05Ni41YzAtNi41LTUuMi0yMC4yLTE1LjctNDEuMiA3IDAgMTctOS4xIDMwLTI3LjJsMCAxNDcuOGMwIDExIDIuNCAxOS40IDcgMjUuMyAzLjcgNC43IDEwLjEgOC45IDE5IDEyLjYgMS4yIC40IDIuNiAuOSA0LjEgMS40IDIuOSAuOSA2LjMgMi4xIDEwLjMgMy41LTEuOCAyLjctOC4zIDQtMTkuOSA0bC4xIDB6bS0yMTkgMGMtMS4zIDIuNC0zLjYgNS41LTYuOCA5LjRsLTE4LjUgMjIuNWMtMS02LjEtNC0xMy05LjMtMjAuNnMtOS43LTExLjQtMTMuNC0xMS40bC04OS44IDBjMy4zLTUuMyA0LjktOC44IDQuOS0xMC44cy0uOC01LjMtMi40LTkuN2MtMS41LTQuNC0yLjQtOC41LTIuNC0xMi40IDAtNy40IDIuMS0xMy45IDYuMy0xOS4zbDIwLTI1LjYtNy4xLTE3LjcgMTYuMS0xOS44IDYuNyAxNi44IDgtMTAuM2MtMS44IDYuNC0yLjYgMTIuMy0yLjYgMTcuNyAwIDQuMiAyLjggMTMuMyA4LjMgMjcuM2wxNi4yIDQwLjcgMTcuNyAwYzIuOCAuNCA3LjcgNSAxNC42IDEzLjkgMS44IDIuNCA0LjMgNS44IDcuNyAxMC4yIDEuNCAxLjkgMi45IDMuOSA0LjYgNi4xIDEuMy0yLjMgMi00LjYgMi03LjEgMC0yLTEuMy02LjYtNC0xMy40TDE3OCAzMDQuMWMtNC0xMC42LTYuMS0xNy43LTYuMS0yMS4zIDAtNi4zIDEuOS0xMi4zIDUuOC0xNy45IC41LS42IDEtMS4zIDEuNS0xLjkgNC40LTUuNiA4LjgtMTEuMSAxMy4zLTE2LjUtMS4xIDQuNi0xLjcgOC43LTEuNyAxMiAwIDMuNyAxLjcgOS45IDUuMSAxOC44bDcuOSAyMC40YzEuOSA0LjcgMyA4LjIgMy43IDEwLjNsMjUuOSAwLS45LTIuNmMtMS40LTMuOS00LTctNy43LTkuM2wxNS42LTIwLjEgMTIuMyAzMiAxMy40IDAtNi4xLTE1LjhjLTEuNS0zLjktNC03LTcuNy05LjNsMTUuNy0yMC4xIDE3LjMgNDUuMiAxMy40IDAtMTEuNC0yOS40Yy0xLjUtMy45LTQtNy03LjctOS4zbDE1LjYtMjAgMjIuNCA1OC43IDI2LjIgMGMxLjUgMCAzLTEuMSA0LjUtMy4xczIuMi00LjEgMi4yLTYuM2wwLTkzLjVjMC02LjUtNC41LTIwLjMtMTMuNy00MS4yIDUuNCAwIDE0LjEtOS4xIDI2LjItMjcuMmwwIDE2My41YzAgNy4yIC42IDEyIDEuNyAxNC42IDEuNiAzLjQgNS4zIDYuMiAxMS4xIDguMi0zLjkgNS42LTguNyA4LjUtMTQuNSA4LjVsLTE1NC44IDAtLjEtLjJ6bS05OC00NGMtMi43LTYuNy00LTExLjctNC0xNS0uNiAxLjItMi40IDMuNy01LjQgNy42LTEuNCAxLjktMi4yIDMuNy0yLjIgNS4zIDAgMi42IC44IDUuNyAyLjIgOS4zbDUuNiAxMy45YzUgMCA5IDAgMTEuOS0uMWwtOC4yLTIwLjkgLjEtLjF6bTEzLjUtNzIuNGMtMy01LjItNy05LjMtMTEuOS0xMS45LTMuNS0xLjktNS4zLTQuMy01LjMtNy40IDAtMi40IDQuNi04LjYgMTQtMTguMyAuMiAzLjggMS45IDcuNiA0LjkgMTEuMiAzLjEgMy42IDQuNiA3IDQuNiAxMC4xIDAgMi42LTIuMSA4LTYuMiAxNi4zbC0uMSAwem0tMjcuNiAwYy0zLTUuMi03LTkuMy0xMS45LTExLjktMy41LTEuOS01LjMtNC4zLTUuMy03LjQgMC0yLjQgNC42LTguNiAxNC0xOC4zIC4yIDMuOCAxLjkgNy42IDQuOSAxMS4yIDMuMSAzLjYgNC42IDcgNC42IDEwLjEgMCAyLjYtMi4xIDgtNi4yIDE2LjNsLS4xIDB6bTg3IDI3LjVjLTMtNS4yLTctOS4zLTExLjktMTEuOS0zLjUtMS45LTUuMy00LjMtNS4zLTcuNCAwLTIuNCA0LjYtOC42IDE0LTE4LjMgLjIgMy44IDEuOSA3LjYgNC45IDExLjIgMy4xIDMuNiA0LjYgNyA0LjYgMTAuMSAwIDIuNi0yLjEgOC02LjIgMTYuM2wtLjEgMHoiXX0seTN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZvcnQtYXdlc29tZS1hbHQiLGljb246WzUxMiw1MTIsW10sImYzYTMiLCJNMjA4IDIzNy40bC0yMi4yIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDUxLjdjMCAyLjEgMS42IDMuNyAzLjcgMy43bDIyLjIgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC01MS43YzAtMi4xLTEuNi0zLjctMy43LTMuN3ptMTE4LjIgMGwtMjIuMiAwYy0yLjEgMC0zLjcgMS42LTMuNyAzLjdsMCA1MS43YzAgMi4xIDEuNiAzLjcgMy43IDMuN2wyMi4yIDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtNTEuN2MtLjEtMi4xLTEuNy0zLjctMy43LTMuN3ptMTMyLTEyNS4xYy0yLjMtMy4yLTQuNi02LjQtNy4xLTkuNS05LjgtMTIuNS0yMC44LTI0LTMyLjgtMzQuNC00LjUtMy45LTkuMS03LjYtMTMuOS0xMS4yLTEuNi0xLjItMy4yLTIuMy00LjgtMy41LTI3LjYtMTkuNi01OS4zLTMzLjctOTMuNi00MC43LTE2LjItMy4zLTMyLjktNS01MC01cy0zMy45IDEuNy01MCA1Yy0zNC4zIDcuMS02NiAyMS4yLTkzLjMgNDAuOC0xLjYgMS4xLTMuMiAyLjMtNC44IDMuNS00LjggMy42LTkuNCA3LjMtMTMuOSAxMS4yLTMgMi42LTUuOSA1LjMtOC44IDhzLTUuNyA1LjUtOC40IDguNGMtNS41IDUuNy0xMC43IDExLjgtMTUuNiAxOC0yLjQgMy4xLTQuOCA2LjMtNy4xIDkuNS0yOC45IDQwLjYtNDUuOCA5MC4xLTQ1LjggMTQzLjYgMCAyIC4xIDQgLjEgNiAuMSAuNyAuMSAxLjMgLjEgMiAuMSAxLjMgLjEgMi43IC4yIDQgMCAuOCAuMSAxLjUgLjEgMi4zIDAgMS4zIC4xIDIuNSAuMiAzLjcgLjEgLjggLjEgMS42IC4yIDIuNCAuMSAxLjEgLjIgMi4zIC4zIDMuNSAwIC44IC4xIDEuNiAuMiAyLjQgLjEgMS4yIC4zIDIuNCAuNCAzLjYgLjEgLjggLjIgMS41IC4zIDIuMyAuMSAxLjMgLjMgMi42IC41IDMuOSAuMSAuNiAuMiAxLjMgLjMgMS45bC45IDUuN2MuMSAuNiAuMiAxLjEgLjMgMS43IC4zIDEuMyAuNSAyLjcgLjggNCAuMiAuOCAuMyAxLjYgLjUgMi40IC4yIDEgLjUgMi4xIC43IDMuMiAuMiAuOSAuNCAxLjcgLjYgMi42IC4yIDEgLjQgMiAuNyAzIC4yIC45IC41IDEuOCAuNyAyLjcgLjMgMSAuNSAxLjkgLjggMi45IC4zIC45IC41IDEuOCAuOCAyLjcgLjIgLjkgLjUgMS45IC44IDIuOHMuNSAxLjggLjggMi43Yy4zIDEgLjYgMS45IC45IDIuOCAuNiAxLjYgMS4xIDMuMyAxLjcgNC45IC40IDEgLjcgMS45IDEgMi44IC4zIDEgLjcgMiAxLjEgMyAuMyAuOCAuNiAxLjUgLjkgMi4zbDEuMiAzYy4zIC43IC42IDEuNSAuOSAyLjIgLjQgMSAuOSAyIDEuMyAzbC45IDIuMWMuNSAxIC45IDIgMS40IDMgLjMgLjcgLjYgMS4zIC45IDIgLjUgMSAxIDIuMSAxLjUgMy4xIC4yIC42IC41IDEuMSAuOCAxLjcgLjYgMS4xIDEuMSAyLjIgMS43IDMuMyAuMSAuMiAuMiAuMyAuMyAuNSAyLjIgNC4xIDQuNCA4LjIgNi44IDEyLjIgLjIgLjQgLjUgLjggLjcgMS4yIC43IDEuMSAxLjMgMi4yIDIgMy4zIC4zIC41IC42IC45IC45IDEuNCAuNiAxLjEgMS4zIDIuMSAyIDMuMiAuMyAuNSAuNiAuOSAuOSAxLjQgLjcgMS4xIDEuNCAyLjEgMi4xIDMuMiAuMiAuNCAuNSAuOCAuOCAxLjIgLjcgMS4xIDEuNSAyLjIgMi4zIDMuMyAuMiAuMiAuMyAuNSAuNSAuNyAzNy41IDUxLjcgOTQuNCA4OC41IDE2MCA5OS40IC45IC4xIDEuNyAuMyAyLjYgLjQgMSAuMiAyLjEgLjQgMy4xIC41czEuOSAuMyAyLjggLjRjMSAuMiAyIC4zIDMgLjQgLjkgLjEgMS45IC4yIDIuOSAuM3MxLjkgLjIgMi45IC4zIDIuMSAuMiAzLjEgLjNjLjkgLjEgMS44IC4xIDIuNyAuMiAxLjEgLjEgMi4zIC4xIDMuNCAuMiAuOCAwIDEuNyAuMSAyLjUgLjEgMS4zIDAgMi42IC4xIDMuOSAuMSAuNyAuMSAxLjQgLjEgMi4xIC4xIDIgLjEgNCAuMSA2IC4xczQtLjEgNi0uMWMuNyAwIDEuNC0uMSAyLjEtLjEgMS4zIDAgMi42IDAgMy45LS4xIC44IDAgMS43LS4xIDIuNS0uMSAxLjEtLjEgMi4zLS4xIDMuNC0uMiAuOSAwIDEuOC0uMSAyLjctLjIgMS0uMSAyLjEtLjIgMy4xLS4zczEuOS0uMiAyLjktLjNjLjktLjEgMS45LS4yIDIuOS0uM3MyLS4zIDMtLjQgMS45LS4zIDIuOC0uNGMxLS4yIDIuMS0uMyAzLjEtLjUgLjktLjEgMS43LS4zIDIuNi0uNCA2NS42LTExIDEyMi41LTQ3LjcgMTYwLjEtMTAyLjQgLjItLjIgLjMtLjUgLjUtLjcgLjgtMS4xIDEuNS0yLjIgMi4zLTMuMyAuMi0uNCAuNS0uOCAuOC0xLjIgLjctMS4xIDEuNC0yLjEgMi4xLTMuMiAuMy0uNSAuNi0uOSAuOS0xLjQgLjYtMS4xIDEuMy0yLjEgMi0zLjIgLjMtLjUgLjYtLjkgLjktMS40IC43LTEuMSAxLjMtMi4yIDItMy4zIC4yLS40IC41LS44IC43LTEuMiAyLjQtNCA0LjYtOC4xIDYuOC0xMi4yIC4xLS4yIC4yLS4zIC4zLS41IC42LTEuMSAxLjEtMi4yIDEuNy0zLjMgLjItLjYgLjUtMS4xIC44LTEuNyAuNS0xIDEtMi4xIDEuNS0zLjEgLjMtLjcgLjYtMS4zIC45LTIgLjUtMSAxLTIgMS40LTNsLjktMi4xYy41LTEgLjktMiAxLjMtMyAuMy0uNyAuNi0xLjUgLjktMi4ybDEuMi0zYy4zLS44IC42LTEuNSAuOS0yLjMgLjQtMSAuNy0yIDEuMS0zcy43LTEuOSAxLTIuOGMuNi0xLjYgMS4yLTMuMyAxLjctNC45IC4zLTEgLjYtMS45IC45LTIuOHMuNS0xLjggLjgtMi43Yy4yLS45IC41LTEuOSAuOC0yLjhzLjYtMS44IC44LTIuN2MuMy0xIC41LTEuOSAuOC0yLjkgLjItLjkgLjUtMS44IC43LTIuNyAuMi0xIC41LTIgLjctMyAuMi0uOSAuNC0xLjcgLjYtMi42IC4yLTEgLjUtMi4xIC43LTMuMiAuMi0uOCAuMy0xLjYgLjUtMi40IC4zLTEuMyAuNi0yLjcgLjgtNCAuMS0uNiAuMi0xLjEgLjMtMS43bC45LTUuN2MuMS0uNiAuMi0xLjMgLjMtMS45IC4xLTEuMyAuMy0yLjYgLjUtMy45IC4xLS44IC4yLTEuNSAuMy0yLjMgLjEtMS4yIC4zLTIuNCAuNC0zLjYgMC0uOCAuMS0xLjYgLjItMi40IC4xLTEuMSAuMi0yLjMgLjMtMy41IC4xLS44IC4xLTEuNiAuMi0yLjQgLjEgMS43IC4xIC41IC4yLS43IDAtLjggLjEtMS41IC4xLTIuMyAuMS0xLjMgLjItMi43IC4yLTQgLjEtLjcgLjEtMS4zIC4xLTIgLjEtMiAuMS00IC4xLTYgMC01My41LTE2LjktMTAzLTQ1LjgtMTQzLjd6TTQ0OCAzNzEuNWMtOS40IDE1LjUtMjAuNiAyOS45LTMzLjYgNDIuOS0yMC42IDIwLjYtNDQuNSAzNi43LTcxLjIgNDgtMTMuOSA1LjgtMjguMiAxMC4zLTQyLjkgMTMuMmwwLTc1LjhjMC01OC42LTg4LjYtNTguNi04OC42IDBsMCA3NS44Yy0xNC43LTIuOS0yOS03LjMtNDIuOS0xMy4yLTI2LjctMTEuMy01MC42LTI3LjQtNzEuMi00OC0xMy0xMy0yNC4yLTI3LjQtMzMuNi00Mi45bDAtNzEuM2MwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMSAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDI1LjggMjkuNiAwIDAtMTQ0YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4xIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4yIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtNC44IDYuNS0zLjcgOS41LTMuN2wwLTkwLjJjLTQuNC0yLTcuNC02LjctNy40LTExLjUgMC0xNi44IDI1LjQtMTYuOCAyNS40IDAgMCA0LjgtMyA5LjQtNy40IDExLjVsMCAzLjljNi4zLTEuNCAxMi43LTIuMyAxOS4yLTIuMyA5LjQgMCAxOC40IDMuNSAyNi4zIDMuNSA3LjIgMCAxNS4yLTMuNSAxOS40LTMuNSAyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCA0OC40YzAgNS42LTE4LjcgNi41LTIyLjQgNi41LTguNiAwLTE2LjYtMy41LTI1LjQtMy41LTcgMC0xNC4xIDEuMi0yMC44IDIuOGwwIDMwLjdjMyAwIDkuNS0xLjEgOS41IDMuN2wwIDI1LjkgMjkuNSAwIDAtMjUuOWMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMiAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDI1LjkgMjkuNSAwIDAtMjUuOWMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMSAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDE0NCAyOS41IDAgMC0yNS44YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4yIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgNzEuM3oiXX0sdzN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJ1cm9tb2JlbGV4cGVydGUiLGljb246WzQ0OCw1MTIsW10sImYzN2YiLCJNMCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMTIwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTE2MCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMjgwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTMyMCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNNDQwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTAgMTkybDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0xMjAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0yODAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek00NDAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnpNMCAzNTJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTEyMCA0NzJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyem00MC0xMjBsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTI4MCA0NzJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyem00MC0xMjBsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6Il19LE0zdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJiaWxpYmlsaSIsaWNvbjpbNTEyLDUxMixbXSwiZTNkOSIsIk00ODguNiAxMDQuMWMxNi43IDE4LjEgMjQuNCAzOS43IDIzLjMgNjUuN2wwIDIwMi40Yy0uNCAyNi40LTkuMiA0OC4xLTI2LjUgNjUuMS0xNy4yIDE3LTM5LjEgMjUuOS02NS41IDI2LjdMOTIgNDY0Yy0yNi40LS44LTQ4LjItOS44LTY1LjMtMjcuMi0xNy4xLTE3LjQtMjYtNDAuMy0yNi43LTY4LjZMMCAxNjkuOGMuOC0yNiA5LjctNDcuNiAyNi43LTY1LjcgMTcuMS0xNi4zIDM4LjgtMjUuMyA2NS4zLTI2LjFsMjkuNCAwLTI1LjQtMjUuOGMtNS43LTUuNy04LjYtMTMtOC42LTIxLjhzMi45LTE2LjEgOC42LTIxLjggMTMtOC42IDIxLjktOC42IDE2LjEgMi45IDIxLjkgOC42bDczLjMgNjkuNCA4OCAwIDc0LjUtNjkuNEMzODEuNyAyLjkgMzg5LjIgMCAzOTggMHMxNi4xIDIuOSAyMS45IDguNmM1LjcgNS43IDguNiAxMyA4LjYgMjEuOHMtMi45IDE2LjEtOC42IDIxLjhMMzk0LjYgNzggNDIzLjkgNzhjMjYuNCAuOCA0OCA5LjggNjQuNyAyNi4xem0tMzguOCA2OS43Yy0uNC05LjYtMy43LTE3LjQtMTAuNy0yMy41LTUuMi02LjEtMTQtOS40LTIyLjctOS44bC0zMjAuNCAwYy05LjYgLjQtMTcuNCAzLjctMjMuNiA5LjgtNi4xIDYuMS05LjQgMTMuOS05LjggMjMuNWwwIDE5NC40YzAgOS4yIDMuMyAxNyA5LjggMjMuNXMxNC40IDkuOCAyMy42IDkuOGwzMjAuNCAwYzkuMiAwIDE3LTMuMyAyMy4zLTkuOHM5LjctMTQuMyAxMC4xLTIzLjVsMC0xOTQuNHpNMTg1LjUgMjE2LjVjNi4zIDYuMyA5LjcgMTQuMSAxMC4xIDIzLjJsMCAzMy4zYy0uNCA5LjItMy43IDE2LjktOS44IDIzLjItNi4yIDYuMy0xNCA5LjUtMjMuNiA5LjVzLTE3LjUtMy4yLTIzLjYtOS41LTkuNC0xNC05LjgtMjMuMmwwLTMzLjNjLjQtOS4xIDMuOC0xNi45IDEwLjEtMjMuMnMxMy4yLTkuNiAyMy4zLTEwYzkuMiAuNCAxNyAzLjcgMjMuMyAxMHptMTkxLjUgMGM2LjMgNi4zIDkuNyAxNC4xIDEwLjEgMjMuMmwwIDMzLjNjLS40IDkuMi0zLjcgMTYuOS05LjggMjMuMnMtMTQgOS41LTIzLjYgOS41LTE3LjQtMy4yLTIzLjYtOS41Yy03LTYuMy05LjQtMTQtOS43LTIzLjJsMC0zMy4zYy4zLTkuMSAzLjctMTYuOSAxMC0yMy4yczE0LjEtOS42IDIzLjMtMTBjOS4yIC40IDE3IDMuNyAyMy4zIDEweiJdfSx6M3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibmVvcyIsaWNvbjpbNDQ4LDUxMixbXSwiZjYxMiIsIk0zODMuOCA1MTJsLTk1LjEgMC0xMDguMi0xNTQuNSAwIDkxLjEtODYuNCA2My40LTk3LjcgMCAwLTQ4Mi4yIDQwLjUtMjkuOCAxMDggMCAxMjMuNyAxNzYuMSAwLTExMi43IDg2LjQtNjMuNCA5Ny43IDAgMCA0NjEuNS02OC45IDUwLjV6TTcuMiAzNS4zbDAgNDYwLjcgNzItNTIuOSAwLTI0OS4xIDIxNS41IDMwNy42IDg0LjggMCA1Mi40LTM4LjItNzguMyAwLTMxNi4xLTQ1MC41LTMwLjIgMjIuM3pNODkuNyA1MDEuOWw4MC01OC44IDAtMTAxLTc5LjgtMTE0LjQgMCAyMjAuOS03Mi42IDUzLjMgNzIuMyAwIDAgMHpNNDkgMTAuOGwzMTAuNiA0NDIuNiA4Mi40IDAgMC00NDIuNi03OS44IDAgMCAzMTcuNi0yMjIuOS0zMTcuNi05MC4zIDB6TTI3OS40IDE5MS42bDcyIDEwMi44IDAtMjc4LjUtNzIgNTMgMCAxMjIuN3oiXX0sazN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRldiIsaWNvbjpbNDQ4LDUxMixbXSwiZjZjYyIsIk0xMjAuMSAyMDguM2MtMy45LTIuOS03LjgtNC4zLTExLjYtNC4zbC0xNy40IDAgMCAxMDQuNSAxNy40IDBjMy45IDAgNy44LTEuNCAxMS42LTQuM3M1LjgtNy4zIDUuOC0xMy4xbDAtNjkuN2MwLTUuOC0yLTEwLjItNS44LTEzLjF6TTQwNC4xIDMyTDQzLjkgMzJDMTkuNyAzMiAuMSA1MS42IDAgNzUuOEwwIDQzNi4yQy4xIDQ2MC40IDE5LjcgNDgwIDQzLjkgNDgwbDM2MC4yIDBjMjQuMiAwIDQzLjgtMTkuNiA0My45LTQzLjhsMC0zNjAuNEM0NDcuOSA1MS42IDQyOC4zIDMyIDQwNC4xIDMyek0xNTQuMiAyOTEuMmMwIDE4LjgtMTEuNiA0Ny4zLTQ4LjQgNDcuM2wtNDYuNCAwIDAtMTY1LjUgNDcuNCAwYzM1LjQgMCA0Ny40IDI4LjUgNDcuNCA0Ny4zbDAgNzAuOXptMTAwLjctODguN2wtNTMuMyAwIDAgMzguNCAzMi42IDAgMCAyOS42LTMyLjYgMCAwIDM4LjQgNTMuMyAwIDAgMjkuNi02Mi4yIDBjLTExLjIgLjMtMjAuNC04LjUtMjAuNy0xOS43bDAtMTI1LjFjLS4zLTExLjEgOC42LTIwLjQgMTkuNy0yMC43bDYzLjIgMCAwIDI5LjV6TTM1OC41IDMxNy44Yy0xMy4yIDMwLjctMzYuOCAyNC42LTQ3LjQgMGwtMzguNS0xNDQuOCAzMi42IDAgMjkuNyAxMTMuNyAyOS42LTExMy43IDMyLjYgMC0zOC41IDE0NC44eiJdfSxTM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaG90amFyIixpY29uOls1MTIsNTEyLFtdLCJmM2IxIiwiTTM2MS44IDBjMCAxMzEuNi04MC43IDE3Ni44LTE0MC4yIDIwOS40LS42IC4zLTEuMSAuNi0xLjYgLjktNTMuOCAzMC4yLTg4LjcgNDkuOC04OS42IDEyMmwtOTguMSAwYzAtMTMxLjUgODAuNy0xNzYuNyAxNDAuMi0yMDkuMyA1NC44LTI5LjggOTAuMy01MCA5MC4zLTEyM2w5OSAwek0zMDEuMyAzMDIuNmM1NC44LTI5LjggOTAuMy01MCA5MC4zLTEyM2w5OCAwYzAgMTMxLjYtODAuNyAxNzYuNy0xNDAuMiAyMDkuNC01NC44IDI5LjgtOTAuMyA1MC05MC4zIDEyM2wtOTggMGMwLTEzMS42IDgwLjctMTc2LjggMTQwLjItMjA5LjR6Il19LEMzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkb2NodWIiLGljb246WzQ0OCw1MTIsW10sImYzOTQiLCJNNDEzLjkgMTYwTDI3MiAxNjAgMjcyIDE5LjYgNDEzLjkgMTYwek0zMjAgMTkybDAgMTMwYzAgNjYuOC0zNi41IDEwMC4xLTExMy4zIDEwMC4xbC05NC43IDAgMC0zMzcuMyA5NC43IDBjMTIgMCAyMy4xIC44IDMzLjEgMi41bDAtODRDMjI4LjkgMS4xIDIxNy40IDAgMjA1LjIgMEwxNiAwIDE2IDUxMiAyMDUuMiA1MTJDMzQ1LjcgNTEyIDQxNiA0NDcuNCA0MTYgMzE4LjFsMC0xMjYuMS05NiAweiJdfSxMM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmltZW8iLGljb246WzQ0OCw1MTIsW10sImY0MGEiLCJNNDAzLjIgMzJMNDQuOCAzMkMyMC4xIDMyIDAgNTIuMSAwIDc2LjhMMCA0MzUuMkMwIDQ1OS45IDIwLjEgNDgwIDQ0LjggNDgwbDM1OC40IDBjMjQuNyAwIDQ0LjgtMjAuMSA0NC44LTQ0LjhsMC0zNTguNEM0NDggNTIuMSA0MjcuOSAzMiA0MDMuMiAzMnpNMzc3IDE4MC44Yy0xLjQgMzEuNS0yMy40IDc0LjctNjYgMTI5LjQtNDQgNTcuMi04MS4zIDg1LjgtMTExLjcgODUuOC0xOC45IDAtMzQuOC0xNy40LTQ3LjktNTIuMy0yNS41LTkzLjMtMzYuNC0xNDgtNTcuNC0xNDgtMi40IDAtMTAuOSA1LjEtMjUuNCAxNS4yTDUzLjQgMTkxLjNjMzcuMy0zMi44IDcyLjktNjkuMiA5NS4yLTcxLjIgMjUuMi0yLjQgNDAuNyAxNC44IDQ2LjUgNTEuNyAyMC43IDEzMS4yIDI5LjkgMTUxIDY3LjYgOTEuNiAxMy41LTIxLjQgMjAuOC0zNy43IDIxLjgtNDguOSAzLjUtMzMuMi0yNS45LTMwLjktNDUuOC0yMi40IDE1LjktNTIuMSA0Ni4zLTc3LjQgOTEuMi03NiAzMy4zIC45IDQ5IDIyLjUgNDcuMSA2NC43eiJdfSxUM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWF4Y2RuIixpY29uOls1MTIsNTEyLFtdLCJmMTM2IiwiTTQ2MS4xIDQ0Mi43bC05Ny40IDAgNTEuOS0yNDIuN2MyLjMtMTAuMiAuOS0xOS41LTQuNC0yNS43LTUtNi4xLTEzLjctOS42LTI0LjItOS42bC00OS4zIDAtNTkuNSAyNzgtOTcuNCAwIDU5LjUtMjc4LTgzLjQgMC01OS41IDI3OC05Ny40IDAgNTkuNS0yNzgtNDQuNi05NS40IDM3Mi4xIDBjMzkuNCAwIDc1LjMgMTYuMyA5OC4zIDQ0LjkgMjMuMyAyOC42IDMxLjggNjcuNCAyMy42IDEwNS45TDQ2MS4xIDQ0Mi43eiJdfSxyMmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLWZvbnQtYXdlc29tZS1zdHJva2UiLGljb246WzQ0OCw1MTIsWyJmb250LWF3ZXNvbWUtYWx0Il0sImYzNWMiLCJNNjQgNjRDNDYuMyA2NCAzMiA3OC4zIDMyIDk2bDAgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDY0IDY0ek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTU0IDU4YzAgOS4zLTQuOCAxNy40LTEyLjEgMjJsMTg4LjkgMGM3LjMgMCAxMy4yIDUuOSAxMy4yIDEzLjIgMCAxLjgtLjQgMy43LTEuMSA1LjRMMzEyIDI2NCAzNDIuOSAzMzMuNGMuOCAxLjcgMS4xIDMuNSAxLjEgNS40IDAgNy4zLTUuOSAxMy4yLTEzLjIgMTMuMmwtMTg2LjggMCAwIDMyLTMyIDAgMC0yMDkuNWMtNi4xLTQuOC0xMC0xMi4yLTEwLTIwLjUgMC0xNC40IDExLjYtMjYgMjYtMjZzMjYgMTEuNiAyNiAyNnoiXX0sXzN0PXIyZSxBM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3BlYWthcCIsaWNvbjpbNDQ4LDUxMixbXSwiZjNmMyIsIk02NC40IDM5MS44Qy0xNSAzMDMuNi03LjYgMTY3LjQgODEuMSA4Ny42czIyNC44LTczIDMwNC4yIDE1LjIgNzIgMjI0LjQtMTYuNiAzMDQuMWMtMTguNyAxNi45IDY0IDQzLjEgNDIgNTIuMy04Mi4xIDM0LjItMjUzLjkgMzUtMzQ2LjItNjcuNWwwIDB6TTI3Ny43IDE4MC4ybDM4LjUtNDAuOWMtOS42LTguOS0zMi0yNi44LTc2LjItMjcuNi01Mi4zLS45LTk1LjkgMjguMy05Ni44IDgwLS4yIDExLjMgLjMgMzYuNyAyOS40IDU0LjggMzQuNSAyMS40IDg2LjUgMjEuNSA4NiA1Mi4zLS40IDIxLjMtMjYuNCAyNS44LTM4LjYgMjUuNi0zIDAtMzAuMi0uNS00Ny42LTI0LjZsLTQwIDQyLjZjMjguMiAyNyA1OSAzMi42IDgzLjUgMzMgMTAuMiAuMiA5Ni40IC4zIDk3LjgtODEgLjMtMTUuOC0yLjEtMzkuNy0yOC45LTU2LjYtMzQuNC0yMS42LTg1LTE5LjQtODQuNC00OS43IC40LTIzLjMgMzEtMjUuNCAzNy41LTI1LjMgLjQgMCAyNi42IC4zIDM5LjYgMTcuNGwwIDB6Il19LCQzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmYW50YXN5LWZsaWdodC1nYW1lcyIsaWNvbjpbNTEyLDUxMixbXSwiZjZkYyIsIk0yNTYgMzIuOUwzMi45IDI1NiAyNTYgNDc5LjEgNDc5LjEgMjU2IDI1NiAzMi45ek04OC4zIDI1NS44YzItMiAxMS45LTEyLjMgOTYuNS05Ny41IDQxLjQtNDEuOCA4Ni4yLTQzLjggMTE5LjgtMTguNyAyNC42IDE4LjQgNjIuMSA1OC45IDYyLjEgNTkgLjcgLjcgMS4xIDIuOSAuNiAzLjQtMTEuMyAxMS44LTIyLjcgMjMuNS0zMy41IDM0LjctMzQuMi0zMi4zLTQwLjUtMzguMi00OC41LTQ0LTE3LjgtMTIuNy00MS40LTEwLjEtNTcgNS4xLTIuMiAyLjEtMS44IDMuNCAuMSA1LjQgMi45IDIuOSAyOC4xIDI4LjMgMzUuMSAzNS44LTExLjkgMTEuNi0yMy43IDIzLTM1LjcgMzQuNy0xMi0xMi41LTI0LjUtMjUuNS0zNi41LTM4LjEtMjEuNCAyMS4xLTQxLjcgNDEuMS02MS44IDYxTDg4LjMgMjU1Ljh6TTMyMy4yIDM1Ny40Yy0zNS41IDM1LjQtNzguMSAzOC4xLTEwNyAyMC41LTIyLjEtMTMuNS0zOS40LTMyLjEtNzIuOS02Ni44IDEyLTEyLjQgMjMuOC0yNC40IDM1LjQtMzYuMyAzMyAzMS45IDM3LjEgMzYgNDQuNyA0Mi4xIDE4LjUgMTQuNyA0Mi41IDEzLjcgNTkuMy0xLjggMy43LTMuNCAzLjctMy42IC4xLTcuMi0xMC42LTEwLjctMjEuMi0yMS40LTMxLjgtMzIuMi0xLjMtMS4zLTMtMi41LS44LTQuNyAxMC44LTEwLjcgMjEuNS0yMS41IDMyLjItMzIuMyAuMy0uMyAuNi0uNCAxLjktMS4xIDEyLjQgMTIuOSAyNC45IDI1LjkgMzcuMiAzOC44IDIxLTIwLjcgNDEuMi00MC43IDYxLjMtNjAuNCAxMy43IDEzLjQgMjcuMSAyNi42IDQwLjkgNDAtMjAuMiAyMC45LTgxLjcgODIuNy0xMDAuNSAxMDEuNXpNMjU2IDBMMCAyNTYgMjU2IDUxMiA1MTIgMjU2IDI1NiAwek0xNiAyNTZMMjU2IDE2IDQ5NiAyNTYgMjU2IDQ5NiAxNiAyNTZ6Il19LEQzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsaW51eCIsaWNvbjpbNDQ4LDUxMixbXSwiZjE3YyIsIk0yMjAuOSAxMjMuM2MxIC41IDEuOCAxLjcgMyAxLjcgMS4xIDAgMi44LS40IDIuOS0xLjUgLjItMS40LTEuOS0yLjMtMy4yLTIuOS0xLjctLjctMy45LTEtNS41LS4xLS40IC4yLS44IC43LS42IDEuMSAuMyAxLjMgMi4zIDEuMSAzLjQgMS43ek0xOTkgMTI1YzEuMiAwIDItMS4yIDMtMS43IDEuMS0uNiAzLjEtLjQgMy41LTEuNiAuMi0uNC0uMi0uOS0uNi0xLjEtMS42LS45LTMuOC0uNi01LjUgLjEtMS4zIC42LTMuNCAxLjUtMy4yIDIuOSAuMSAxIDEuOCAxLjUgMi44IDEuNHpNNDIwIDQwMy44Yy0zLjYtNC01LjMtMTEuNi03LjItMTkuNy0xLjgtOC4xLTMuOS0xNi44LTEwLjUtMjIuNC0xLjMtMS4xLTIuNi0yLjEtNC0yLjktMS4zLS44LTIuNy0xLjUtNC4xLTIgOS4yLTI3LjMgNS42LTU0LjUtMy43LTc5LjEtMTEuNC0zMC4xLTMxLjMtNTYuNC00Ni41LTc0LjQtMTcuMS0yMS41LTMzLjctNDEuOS0zMy40LTcyIC41LTQ1LjkgNS4xLTEzMS4yLTc1LjgtMTMxLjMtMTAyLjQtLjItNzYuOCAxMDMuNC03Ny45IDEzNS4yLTEuNyAyMy40LTYuNCA0MS44LTIyLjUgNjQuNy0xOC45IDIyLjUtNDUuNSA1OC44LTU4LjEgOTYuNy02IDE3LjktOC44IDM2LjEtNi4yIDUzLjMtNi41IDUuOC0xMS40IDE0LjctMTYuNiAyMC4yLTQuMiA0LjMtMTAuMyA1LjktMTcgOC4zcy0xNCA2LTE4LjUgMTQuNWMtMi4xIDMuOS0yLjggOC4xLTIuOCAxMi40IDAgMy45IC42IDcuOSAxLjIgMTEuOCAxLjIgOC4xIDIuNSAxNS43IC44IDIwLjgtNS4yIDE0LjQtNS45IDI0LjQtMi4yIDMxLjcgMy44IDcuMyAxMS40IDEwLjUgMjAuMSAxMi4zIDE3LjMgMy42IDQwLjggMi43IDU5LjMgMTIuNSAxOS44IDEwLjQgMzkuOSAxNC4xIDU1LjkgMTAuNCAxMS42LTIuNiAyMS4xLTkuNiAyNS45LTIwLjIgMTIuNS0uMSAyNi4zLTUuNCA0OC4zLTYuNiAxNC45LTEuMiAzMy42IDUuMyA1NS4xIDQuMSAuNiAyLjMgMS40IDQuNiAyLjUgNi43bDAgLjFjOC4zIDE2LjcgMjMuOCAyNC4zIDQwLjMgMjMgMTYuNi0xLjMgMzQuMS0xMSA0OC4zLTI3LjkgMTMuNi0xNi40IDM2LTIzLjIgNTAuOS0zMi4yIDcuNC00LjUgMTMuNC0xMC4xIDEzLjktMTguMyAuNC04LjItNC40LTE3LjMtMTUuNS0yOS43ek0yMjMuOCA4Ny4zYzkuOC0yMi4yIDM0LjItMjEuOCA0NC0uNCA2LjUgMTQuMiAzLjYgMzAuOS00LjMgNDAuNC0xLjYtLjgtNS45LTIuNi0xMi42LTQuOSAxLjEtMS4yIDMuMS0yLjcgMy45LTQuNiA0LjgtMTEuOC0uMi0yNy05LjEtMjcuMy03LjMtLjUtMTMuOSAxMC44LTExLjggMjMtNC4xLTItOS40LTMuNS0xMy00LjQtMS02LjktLjMtMTQuNiAyLjktMjEuOHpNMTgzLjEgNzUuOGMxMC4xIDAgMjAuOCAxNC4yIDE5LjEgMzMuNS0zLjUgMS03LjEgMi41LTEwLjIgNC42IDEuMi04LjktMy4zLTIwLjEtOS42LTE5LjYtOC40IC43LTkuOCAyMS4yLTEuOCAyOC4xIDEgLjggMS45LS4yLTUuOSA1LjUtMTUuNi0xNC42LTEwLjUtNTIuMSA4LjQtNTIuMXptLTEzLjYgNjAuN2M2LjItNC42IDEzLjYtMTAgMTQuMS0xMC41IDQuNy00LjQgMTMuNS0xNC4yIDI3LjktMTQuMiA3LjEgMCAxNS42IDIuMyAyNS45IDguOSA2LjMgNC4xIDExLjMgNC40IDIyLjYgOS4zIDguNCAzLjUgMTMuNyA5LjcgMTAuNSAxOC4yLTIuNiA3LjEtMTEgMTQuNC0yMi43IDE4LjEtMTEuMSAzLjYtMTkuOCAxNi0zOC4yIDE0LjktMy45LS4yLTctMS05LjYtMi4xLTgtMy41LTEyLjItMTAuNC0yMC0xNS04LjYtNC44LTEzLjItMTAuNC0xNC43LTE1LjMtMS40LTQuOSAwLTkgNC4yLTEyLjN6bTMuMyAzMzRjLTIuNyAzNS4xLTQzLjkgMzQuNC03NS4zIDE4LTI5LjktMTUuOC02OC42LTYuNS03Ni41LTIxLjktMi40LTQuNy0yLjQtMTIuNyAyLjYtMjYuNGwwLS4yYzIuNC03LjYgLjYtMTYtLjYtMjMuOS0xLjItNy44LTEuOC0xNSAuOS0yMCAzLjUtNi43IDguNS05LjEgMTQuOC0xMS4zIDEwLjMtMy43IDExLjgtMy40IDE5LjYtOS45IDUuNS01LjcgOS41LTEyLjkgMTQuMy0xOCA1LjEtNS41IDEwLTguMSAxNy43LTYuOSA4LjEgMS4yIDE1LjEgNi44IDIxLjkgMTZsMTkuNiAzNS42YzkuNSAxOS45IDQzLjEgNDguNCA0MSA2OC45em0tMS40LTI1LjljLTQuMS02LjYtOS42LTEzLjYtMTQuNC0xOS42IDcuMSAwIDE0LjItMi4yIDE2LjctOC45IDIuMy02LjIgMC0xNC45LTcuNC0yNC45LTEzLjUtMTguMi0zOC4zLTMyLjUtMzguMy0zMi41LTEzLjUtOC40LTIxLjEtMTguNy0yNC42LTI5LjlzLTMtMjMuMy0uMy0zNS4yYzUuMi0yMi45IDE4LjYtNDUuMiAyNy4yLTU5LjIgMi4zLTEuNyAuOCAzLjItOC43IDIwLjgtOC41IDE2LjEtMjQuNCA1My4zLTIuNiA4Mi40IC42LTIwLjcgNS41LTQxLjggMTMuOC02MS41IDEyLTI3LjQgMzcuMy03NC45IDM5LjMtMTEyLjcgMS4xIC44IDQuNiAzLjIgNi4yIDQuMSA0LjYgMi43IDguMSA2LjcgMTIuNiAxMC4zIDEyLjQgMTAgMjguNSA5LjIgNDIuNCAxLjIgNi4yLTMuNSAxMS4yLTcuNSAxNS45LTkgOS45LTMuMSAxNy44LTguNiAyMi4zLTE1IDcuNyAzMC40IDI1LjcgNzQuMyAzNy4yIDk1LjcgNi4xIDExLjQgMTguMyAzNS41IDIzLjYgNjQuNiAzLjMtLjEgNyAuNCAxMC45IDEuNCAxMy44LTM1LjctMTEuNy03NC4yLTIzLjMtODQuOS00LjctNC42LTQuOS02LjYtMi42LTYuNSAxMi42IDExLjIgMjkuMiAzMy43IDM1LjIgNTkgMi44IDExLjYgMy4zIDIzLjcgLjQgMzUuNyAxNi40IDYuOCAzNS45IDE3LjkgMzAuNyAzNC44LTIuMi0uMS0zLjIgMC00LjIgMCAzLjItMTAuMS0zLjktMTcuNi0yMi44LTI2LjEtMTkuNi04LjYtMzYtOC42LTM4LjMgMTIuNS0xMi4xIDQuMi0xOC4zIDE0LjctMjEuNCAyNy4zLTIuOCAxMS4yLTMuNiAyNC43LTQuNCAzOS45LS41IDcuNy0zLjYgMTgtNi44IDI5LTMyLjEgMjIuOS03Ni43IDMyLjktMTE0LjMgNy4yem0yNTcuNC0xMS41Yy0uOSAxNi44LTQxLjIgMTkuOS02My4yIDQ2LjUtMTMuMiAxNS43LTI5LjQgMjQuNC00My42IDI1LjVzLTI2LjUtNC44LTMzLjctMTkuM2MtNC43LTExLjEtMi40LTIzLjEgMS4xLTM2LjMgMy43LTE0LjIgOS4yLTI4LjggOS45LTQwLjYgLjgtMTUuMiAxLjctMjguNSA0LjItMzguNyAyLjYtMTAuMyA2LjYtMTcuMiAxMy43LTIxLjEgLjMtLjIgLjctLjMgMS0uNSAuOCAxMy4yIDcuMyAyNi42IDE4LjggMjkuNSAxMi42IDMuMyAzMC43LTcuNSAzOC40LTE2LjMgOS0uMyAxNS43LS45IDIyLjYgNS4xIDkuOSA4LjUgNy4xIDMwLjMgMTcuMSA0MS42IDEwLjYgMTEuNiAxNCAxOS41IDEzLjcgMjQuNnpNMTczLjQgMTQ4LjdjMiAxLjkgNC43IDQuNSA4IDcuMSA2LjYgNS4yIDE1LjggMTAuNiAyNy4zIDEwLjYgMTEuNiAwIDIyLjUtNS45IDMxLjgtMTAuOCA0LjktMi42IDEwLjktNyAxNC44LTEwLjRzNS45LTYuMyAzLjEtNi42LTIuNiAyLjYtNiA1LjFjLTQuNCAzLjItOS43IDcuNC0xMy45IDkuOC03LjQgNC4yLTE5LjUgMTAuMi0yOS45IDEwLjJzLTE4LjctNC44LTI0LjktOS43Yy0zLjEtMi41LTUuNy01LTcuNy02LjktMS41LTEuNC0xLjktNC42LTQuMy00LjktMS40LS4xLTEuOCAzLjcgMS43IDYuNXoiXX0sRTN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNvdHRvbi1idXJlYXUiLGljb246WzUxMiw1MTIsW10sImY4OWUiLCJNNDc0LjMgMzMwLjRDNDUwLjYgNDIyLjMgMzgwLjEgNDc1IDI3Mi40IDQ3OC44bDAtNDkuMmMwLTQ4IDI2LjQtNzQuNCA3NC40LTc0LjQgNjIgMCA5OS4yLTM3LjIgOTkuMi05OS4yIDAtNjEuNC0zNi41LTk4LjMtOTcuNC05OS4xLTMzLTY5LjMtMTQ2LjUtNjQuNy0xNzcuMiAwLTYwLjkgLjgtOTcuNCAzNy43LTk3LjQgOTkuMSAwIDYyLjEgMzcuMyA5OS40IDk5LjQgOTkuNCA0OCAwIDc0LjYgMjYuMiA3NC42IDc0LjRsMCA0OS4yYy0xMzQuNC01LTIxMS4xLTg1LjEtMjExLjEtMjIzIDAtMTQxLjggODEuNC0yMjMuMiAyMjMuMi0yMjMuMiAxMTQuOCAwIDE4OS44IDUzLjIgMjE0LjcgMTQ4LjhsMjUuMyAwQzQ3My45IDcxLjUgMzg4LjIgOCAyNTkuOCA4IDEwNSA4IDEyIDEwMS4yIDEyIDI1NS44IDEyIDQxMS4xIDEwNS4yIDUwNC4zIDI1OS44IDUwNCAzODguMSA1MDQgNDczLjcgNDQwLjIgNDk5LjUgMzMwLjRsLTI1LjIgMHpNMzU3IDE4Mi4zYzQxLjQgMy40IDY0LjIgMjkgNjQuMiA3My43IDAgNDgtMjYuNCA3NC40LTc0LjQgNzQuNC0yOC42IDAtNDkuMy05LjYtNjEuNi0yNy4zIDgzLjEtMTYuNSA3NS42LTk5LjcgNzEuOC0xMjAuN3ptLTgxLjcgOTcuNGMtMi41LTEwLjMtMTYuMy04NyA1Ni4yLTk3IDIuMyAxMC4xIDE2LjUgODcuMS01Ni4zIDk3bDAgMHpNMjYwIDEzMmMyOC42IDAgNDkgOS43IDYxLjQgMjcuNi0yOC40IDUuNS00OS40IDIwLjYtNjEuNiA0My40LTEyLjItMjIuOS0zMy4yLTM4LTYxLjYtNDMuNCAxMi40LTE3LjcgMzMuMy0yNy40IDYxLjYtMjcuNGwuMi0uM3ptLTcxLjUgNTAuN2M3My4yIDEwLjYgNTguOSA4Ni44IDU2LjUgOTctNzIuNC05LjgtNTktODctNTYuMi05N2wtLjIgMHpNMTczLjIgMzMwLjRjLTQ4IDAtNzQuNC0yNi40LTc0LjQtNzQuNCAwLTQ0LjQgMjIuOS03MCA2NC4yLTczLjctNi44IDM3LjItMS40IDEwNi41IDcxLjYgMTIwLjctMTIuMSAxNy42LTMyLjggMjcuMy02MS4xIDI3LjNsLS4zIDB6bTUzLjIgMTIuNGMxNC4zLTcuNiAyNi0xOS4zIDMzLjYtMzMuNSA3LjggMTQuNSAxOS4zIDI1LjUgMzMuOCAzMy41LTE0LjQgNy42LTI2LjEgMTkuNC0zMy42IDMzLjgtOC0xNC41LTE5LjEtMjYuMi0zMy42LTMzLjhsLS4zIDB6Il19LE4zdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnb29nbGUtd2FsbGV0IixpY29uOls0NDgsNTEyLFtdLCJmMWVlIiwiTTE1Ni44IDEyNi44YzM3LjYgNjAuNiA2NC4yIDExMy4xIDg0LjMgMTYyLjUtOC4zIDMzLjgtMTguOCA2Ni41LTMxLjMgOTguMy0xMy4yLTUyLjMtMjYuNS0xMDEuMy01Ni0xNDguNSA2LjUtMzYuNCAyLjMtNzMuNiAzLTExMi4zek0xMDkuMyAyMDBsLTkzLjIgMGMtNi41IDAtMTAuNSA3LjUtNi41IDEyLjcgNDIuMiA1NC4zIDcxLjcgMTE3LjggOTEuNyAxODcuM2wxMDMuNSAwYy0xNi4yLTY5LjctMzguNy0xMzMuNy04Mi41LTE5My41LTMtNC04LTYuNS0xMy02LjV6bTQ3LjgtODhjNjguNSAxMDggMTMwIDIzNC41IDEzOC4yIDM2OEw0MDkgNDgwYy0xMi0xMzgtNjguNC0yNjUtMTQzLjItMzY4bC0xMDguNyAwek00MDguOSA0My41Yy0xLjgtNi44LTguMi0xMS41LTE1LjItMTEuNWwtODguMyAwYy01LjMgMC05IDUtNy44IDEwLjMgMTMuMiA0Ni41IDIyLjMgOTUuNSAyNi41IDE0NiA0OC4yIDg2LjIgNzkuNyAxNzguMyA5MC42IDI3MC44IDE1LjgtNjAuNSAyNS4zLTEzMy41IDI1LjMtMjAzIDAtNzMuNi0xMi4xLTE0NS4xLTMxLjEtMjEyLjZ6Il19LFAzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmb3Vyc3F1YXJlIixpY29uOlszODQsNTEyLFtdLCJmMTgwIiwiTTMzMS4xIDNMNTcuOSAzQzIwLjQgMyA4IDMxLjMgOCA0OS4xTDggNDgyLjljMCAyMC4zIDEyLjEgMjcuNyAxOC4yIDMwLjEgNi4yIDIuNSAyMi44IDQuNiAzMi45LTcuMSAxMjguOS0xNDkuNCAxMzEuMS0xNTEuOSAxMzEuMS0xNTEuOSAzLjEtMy40IDMuNC0zLjEgNi44LTMuMWw4My40IDBjMzUuMSAwIDQwLjYtMjUuMiA0NC4zLTM5LjdsNDguNi0yNDNDMzgxLjggMjUuOCAzNzEuMSAzIDMzMS4xIDN6TTMxNC44IDc2LjhsLTExLjQgNTkuN2MtMS4yIDYuNS05LjUgMTMuMi0xNi45IDEzLjJsLTEwNi40IDBjLTEyIDAtMjAuNiA4LjMtMjAuNiAyMC4zbDAgMTNjMCAxMiA4LjYgMjAuNiAyMC42IDIwLjZsOTAuNCAwYzguMyAwIDE2LjYgOS4yIDE0LjggMTguMi0xLjggOC45LTEwLjUgNTMuOC0xMS40IDU4LjgtLjkgNC45LTYuOCAxMy41LTE2LjkgMTMuNWwtNzMuNSAwYy0xMy41IDAtMTcuMiAxLjgtMjYuNSAxMi42IDAgMC04LjkgMTEuNC04OS41IDEwOC4zLS45IC45LTEuOCAuNi0xLjgtLjNsMC0zMzguOGMwLTcuNyA2LjgtMTYuNiAxNi42LTE2LjZsMjE5IDBjOC4yIDAgMTUuNiA3LjcgMTMuNSAxNy41eiJdfSxJM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2hpcnRzaW5idWxrIixpY29uOls0NDgsNTEyLFtdLCJmMjE0IiwiTTEwMCA0MTAuM2wzMC42IDEzLjQgNC40LTkuOS0zMC42LTEzLjQtNC40IDkuOXptMzkuNCAxNy41bDMwLjYgMTMuNCA0LjQtOS45LTMwLjYtMTMuNC00LjQgOS45em0xNzIuMS0xNGw0LjQgOS45IDMwLjYtMTMuNC00LjQtOS45LTMwLjYgMTMuNHpNMTc5LjEgNDQ1bDMwLjMgMTMuNyA0LjQtOS45LTMwLjMtMTMuNC00LjQgOS42ek02MC40IDM5Mi44bDMwLjYgMTMuNCA0LjQtOS42LTMwLjYtMTMuNy00LjQgOS45em0yMTEuNCAzOC41bDQuNCA5LjkgMzAuNi0xMy40LTQuNC05LjktMzAuNiAxMy40em0tMzkuMyAxNy41bDQuNCA5LjkgMzAuNi0xMy43LTQuNC05LjYtMzAuNiAxMy40em0xMTguNC01Mi4ybDQuNCA5LjYgMzAuNi0xMy40LTQuNC05LjktMzAuNiAxMy43ek0xNzAgNDYuNmwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em0tNDcuMiAwbC0zMy42IDAgMCAxMC41IDMzLjUgMCAuMS0xMC41em0tNDcuMyAwbC0zMy4yIDAgMCAxMC41IDMzLjMgMC0uMS0xMC41em0xNDEuNSAwbC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6bTk0LjUgMGwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em00Ny4zIDBsLTMzLjUgMCAwIDEwLjUgMzMuNSAwIDAtMTAuNXptLTk0LjYgMGwtMzMuMiAwIDAgMTAuNSAzMy4yIDAgMC0xMC41em0xNDEuNSAwbC0zMy4zIDAgMCAxMC41IDMzLjMgMCAwLTEwLjV6TTUyLjggMzUxLjFsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXptNzAtMjE1LjlsLTMzLjYgMCAwIDEwLjUgMzMuNSAwIC4xLTEwLjV6bS03MCAxMC42bDIyLjggMCAwLTEwLjUtMzMuNiAwIDAgMzMuNSAxMC44IDAgMC0yM3pNMjIxLjcgMzc0LjRhOTEuMyA5MS4zIDAgMSAwIDAtMTgyLjYgOTEuMyA5MS4zIDAgMSAwIDAgMTgyLjZ6TTE3My41IDI2My4zYzAtMjUuNCAyOS41LTMxLjggNDkuNi0zMS44IDE2LjkgMCAyOS4yIDUuOCA0NC4zIDEybC04LjggMTYuOS0uOSAwYy02LjQtOS45LTI0LjgtMTMuMS0zNS42LTEzLjEtOSAwLTI5LjggMS44LTI5LjggMTQuOSAwIDIxLjYgNzguNS0xMC4yIDc4LjUgMzcuOSAwIDI1LjQtMzEuNSAzMS4yLTUxIDMxLjItMTguMSAwLTMyLjQtMi45LTQ3LjItMTIuMmw5LTE4LjQgLjkgMGM2LjEgMTIuMiAyMy42IDE0LjkgMzUuOSAxNC45IDguNyAwIDMyLjctMS4yIDMyLjctMTQuMyAwLTI2LjEtNzcuNiA2LjMtNzcuNi0zOHpNNTIuOCAxNzguNGwtMTAuOCAwIDAgMzMuNiAxMC44IDAgMC0zMy42ek0zOTUuMiAzODQuNmwxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6TTUyLjggMzA3LjlsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXpNMCAzLjdsMCA0MDYgMjIxLjcgOTguNiAyMjYuMy05OC42IDAtNDA2LTQ0OCAwek00MTguOCAzOTAuOGwtMTk2LjggODUuNy0xOTIuOC04NS43IDAtMjcwLjEgMzg5LjcgMCAwIDI3MC4xLS4xIDB6bTAtMjk5LjNsLTM4OS42IDAgMC01OC42IDM4OS43IDAgMCA1OC42LS4xIDB6TTUyLjggMjIxLjZsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXptMCA0My4ybC0xMC44IDAgMCAzMy41IDEwLjggMCAwLTMzLjV6TTE3MCAxMzUuMmwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41ek0zOTUuMiAyOTguM2wxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6bTAtNDMuMmwxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6TTIxNyAxMzUuMmwtMzMuMiAwIDAgMTAuNSAzMy4yIDAgMC0xMC41ek0zOTUuMiAyMTJsMTAuOCAwIDAtMzMuNS0xMC44IDAgMCAzMy41em0wIDEyOS41bDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXptLTEzMS0yMDYuM2wtMzMuMiAwIDAgMTAuNSAzMy4yIDAgMC0xMC41em00Ny4zIDBsLTMzLjUgMCAwIDEwLjUgMzMuNSAwIDAtMTAuNXptODMuNyAzMy42bDEwLjggMCAwLTMzLjUtMzMuNSAwIDAgMTAuNSAyMi44IDAtLjEgMjN6bS0zNi40LTMzLjZsLTMzLjUgMCAwIDEwLjUgMzMuNSAwIDAtMTAuNXoiXX0sRjN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1pbnRiaXQiLGljb246WzUxMiw1MTIsW10sImU2MmYiLCJNNzMuMiA1MTJsMC03My4xIDI5Mi41IDAgMC03My4yIDczLjIgMCAwLTE0Ni4zIDczLjEgMCAwLTIxOS40LTIxOS40IDAgMCA3My4xLTE0Ni4zIDAgMCA3My4yLTczLjEgMCAwIDI5Mi42LTczLjIgMCAwIDczLjEgNzMuMiAwem03My4xLTIxOS40bDczLjIgMCAwIDczLjEtNzMuMiAwIDAtNzMuMXptNzMuMi03My4xbDczLjEgMCAwIDczLjEtNzMuMiAwIDAtNzMuMiAuMSAuMXptNzMuMSAwbDAtNzMuMiA3My4yIDAgMCA3My4xLTczLjIgMCAwIC4xek0zNjUuNyA3My4xbDczLjIgMCAwIDczLjItNzMuMiAwIDAtNzMuMnoiXX0sTzN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN0YXlsaW5rZWQiLGljb246WzQ0OCw1MTIsW10sImYzZjUiLCJNMzg2LjcgMjkyLjVsMi43IDIuNy0xNzAtMTY3LjNjLTMuNS0zLjUtOS43LTMuNy0xMy44LS41TDE0OC4zIDE3MWMtNC4yIDMuMi00LjYgOC43LTEuMSAxMi4ybDY4LjEgNjQuM2MzLjYgMy41IDkuOSAzLjcgMTQgLjVsLjEtLjFjNC4xLTMuMiAxMC40LTMgMTQgLjVsODQgODEuM2MzLjYgMy41IDMuMiA5LS45IDEyLjJsLTkzLjIgNzRjLTQuMiAzLjMtMTAuNSAzLjEtMTQuMi0uNEw2Ny4yIDI2OGMtMy41LTMuNS05LjctMy43LTEzLjktLjVMNy41IDMwMi40Yy00LjIgMy4yLTQuNyA4LjctMS4yIDEyLjJMMjE1IDUxMC43czcuNCA2LjggMTcuMy0uOEw0MzAuMyAzNDZjNC0zLjIgNC40LTguNyAuNy0xMi4ybC00NC4zLTQxLjN6bTU0LjUtODMuNEwyMzAuNyAyLjVjLTEuNS0xLjItOC01LjUtMTYuMyAxLjFMNy42IDE2NS43Yy00LjIgMy4yLTQuOCA4LjctMS4yIDEyLjJsNDIuMyA0MS43IDE3MS43IDE2NS4xYzMuNyAzLjUgMTAuMSAzLjcgMTQuMyAuNGw1MC4yLTM4LjgtLjMtLjMgNy43LTZjNC4yLTMuMiA0LjYtOC43IC45LTEyLjJsLTU3LjEtNTQuNGMtMy42LTMuNS0xMC0zLjctMTQuMi0uNWwtLjEgLjFjLTQuMiAzLjItMTAuNSAzLjEtMTQuMi0uNEwxMTMgMTgwLjhjLTMuNi0zLjUtMy4xLTguOSAxLjEtMTIuMmw5Mi4yLTcxLjVjNC4xLTMuMiAxMC4zLTMgMTMuOSAuNWwxNjAuNCAxNTljMy43IDMuNSAxMCAzLjcgMTQuMSAuNWw0NS44LTM1LjhjNC4xLTMuMiA0LjQtOC43IC43LTEyLjJ6Il19LEIzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3ZWJmbG93IixpY29uOls2NDAsNTEyLFtdLCJlNjVjIiwiTTY0MCA2NGwtMjA0LjIgMzk5LjItMTkxLjggMCA4NS41LTE2NS41LTMuOCAwQzI1NS4xIDM4OS4zIDE0OS45IDQ0OS41IDAgNDYzLjJMMCAzMDAuMXM5NS45LTUuNyAxNTIuMy02NC45bC0xNTIuMyAwIDAtMTcxLjIgMTcxLjEgMCAwIDE0MC44IDMuOCAwIDcwLTE0MC44IDEyOS40IDAgMCAxMzkuOSAzLjggMCA3Mi42LTEzOS45IDE4OS4zIDB6Il19LFIzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyZW5yZW4iLGljb246WzUxMiw1MTIsW10sImYxOGIiLCJNMjE0IDE2OS4xQzIxNCAyNzkuNSAxNTMgMzc0LjUgNjYuNCA0MTYuNSAzMCAzNzMuMiA4IDMxNy43IDggMjU2LjYgOCAxMzMuOSA5Ny4xIDMyLjIgMjE0IDEyLjVsMCAxNTYuNnpNMjU1IDUwNGMtNDIuOSAwLTgzLjMtMTEtMTE4LjUtMzAuNCA1Ny4yLTM2LjEgMTAzLjQtOTAuNyAxMTguNS0xNTQuNiAxNS41IDYzLjkgNjEuNyAxMTguNSAxMTguOCAxNTQuNy0zNS4xIDE5LjMtNzUuNSAzMC4zLTExOC44IDMwLjN6bTE5MC42LTg3LjVDMzU5IDM3NC41IDI5OCAyNzkuNiAyOTggMTY5LjFsMC0xNTYuNmMxMTYuOSAxOS43IDIwNiAxMjEuNCAyMDYgMjQ0LjEgMCA2MS4xLTIyIDExNi42LTU4LjQgMTU5Ljl6Il19LEgzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyZXYiLGljb246WzQ0OCw1MTIsW10sImY1YjIiLCJNMTU4LjcgMjc0LjlhNjUuNiA2NS42IDAgMSAxIDEzMS4yIDAgNjUuNiA2NS42IDAgMSAxIC0xMzEuMiAwem0yNzAuNy01LjFsLS4xIDBjLS43LTI5LjMtNy43LTU4LjItMjAuNS04NC42cy0zMS4yLTQ5LjctNTMuOC02OC40TDMwOS42IDE0M2MyMiAxNC4yIDQwLjEgMzMuOCA1Mi43IDU2LjhzMTkuMSA0OC44IDE5LjEgNzUuMWMwIDg2LjYtNzAuNSAxNTcuMS0xNTcuMSAxNTcuMVM2Ny4yIDM2MS41IDY3LjIgMjc0LjljMC04MS45IDYzLTE0OS4zIDE0My0xNTYuNGwwIDM5LjEgMTA4LjgtNjIuOC0xMDguOC02Mi44IDAgMzguM2MtMTA2LjcgNy4yLTE5MSA5Ni0xOTEgMjA0LjYgMCAxMTEuNiA4OS4xIDIwMi4zIDIwMC4xIDIwNWwwIC4xIDIxMC4yIDAgMC0yMTAuMnoiXX0scTN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImtleWNkbiIsaWNvbjpbNTEyLDUxMixbXSwiZjNiYSIsIk02My44IDQwOS4zbDYwLjUtNTljMzIuMSA0Mi44IDcxLjEgNjYgMTI2LjYgNjcuNCAzMC41IC43IDYwLjMtNyA4Ni40LTIyLjQgNS4xIDUuMyAxOC41IDE5LjUgMjAuOSAyMi0zMi4yIDIwLjctNjkuNiAzMS4xLTEwOC4xIDMwLjItNDMuMy0xLjEtODQuNi0xNi43LTExNy43LTQ0LjQgLjMtLjYtMzguMiAzNy41LTM4LjYgMzcuOSA5LjUgMjkuOC0xMy4xIDYyLjQtNDYuMyA2Mi40LTI2LjgtLjEtNDcuNS0yMS43LTQ3LjUtNDguNSAwLTM0LjMgMzMuMS01Ni42IDYzLjgtNDUuNnpNNDE4LjcgMTU2LjljMTkuMSAzMS4zIDI5LjYgNjcuNCAyOC43IDEwNC0xLjEgNDQuOC0xOSA4Ny41LTQ4LjYgMTIxIC4zIC4zIDIzLjggMjUuMiAyNC4xIDI1LjUgOS42LTEuMyAxOS4yIDIgMjUuOSA5LjEgMTEuMyAxMiAxMC45IDMwLjktMS4xIDQyLjQtMTIgMTEuMy0zMC45IDEwLjktNDIuNC0xLjEtNi43LTctOS40LTE2LjgtNy42LTI2LjMtMjQuOS0yNi42LTQ0LjQtNDcuMi00NC40LTQ3LjIgNDIuNy0zNC4xIDYzLjMtNzkuNiA2NC40LTEyNC4yIC43LTI4LjktNy4yLTU3LjItMjEuMS04Mi4ybDIyLjEtMjF6TTEwNCA1My4xYzYuNyA3IDkuNCAxNi44IDcuNiAyNi4zbDQ1LjkgNDguMWMtNC43IDMuOC0xMy4zIDEwLjQtMjIuOCAyMS4zLTI1LjQgMjguNS0zOS42IDY0LjgtNDAuNyAxMDIuOS0uNyAyOC45IDYuMSA1Ny4yIDIwIDgyLjRMOTIgMzU1LjZjLTE5LjMtMzEuNi0yOC45LTY3LjctMjcuOC0xMDQuNyAxLTQ0LjYgMTguMy04Ny42IDQ3LjUtMTIxLjFMODYuNCAxMDMuNGMtOS42IDEuMy0xOS4yLTItMjUuOS05LjEtMTEuMy0xMi0xMC45LTMwLjkgMS4xLTQyLjQgMTEuOS0xMS4yIDMwLjYtMTAuOSA0Mi40IDEuMnpNNDY0LjkgOGMyNiAwIDQ3LjEgMjIuNCA0Ny4xIDQ4LjNTNDkwLjkgMTA0IDQ2NC45IDEwNGMtNi4zIC4xLTE0LTEuMS0xNS45LTEuOGwtNjIuOSA1OS43Yy0zMi43LTQzLjYtNzYuNy02NS45LTEyNi45LTY3LjItMzAuNS0uNy02MC4zIDYuOC04Ni4yIDIyLjRsLTIxLjEtMjJDMTg0LjEgNzQuMyAyMjEuNSA2NCAyNjAgNjQuOSAzMDMuMyA2NiAzNDQuNiA4MS42IDM3Ny43IDEwOS41bDQxLjEtMzguNmMtMS41LTQuNy0yLjItOS42LTIuMi0xNC41LS4xLTI2LjcgMjIuMy00OC40IDQ4LjMtNDguNHpNMjU2LjcgMTEzLjRjNS41IDAgMTAuOSAuNCAxNi40IDEuMSA3OC4xIDkuOCAxMzMuNCA4MS4xIDEyMy44IDE1OS4xLTkuOCA3OC4xLTgxLjEgMTMzLjQtMTU5LjEgMTIzLjgtNzguMS05LjgtMTMzLjQtODEuMS0xMjMuOC0xNTkuMiA5LjMtNzIuNCA3MC4xLTEyNC42IDE0Mi43LTEyNC44em0tNTkgMTE5LjRjLjYgMjIuNyAxMi4yIDQxLjggMzIuNCA1Mi4ybC0xMSA1MS43IDczLjcgMC0xMS01MS43YzIwLjEtMTAuOSAzMi4xLTI5IDMyLjQtNTIuMi0uNC0zMi44LTI1LjgtNTcuNS01OC4zLTU4LjMtMzIuMSAuOC01Ny4zIDI0LjgtNTguMiA1OC4zeiJdfSxWM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaGlyZS1hLWhlbHBlciIsaWNvbjpbNTEyLDUxMixbXSwiZjNiMCIsIk00NDMuMSAwTDcxLjkgMEM2Ny45IDM3LjMgMzcuNCA2Ny44IDAgNzEuN0wwIDQ0My4yYzM3LjQgNC45IDY2IDMyLjQgNzEuOSA2OC44bDM3Mi4yIDBjMy0zNi40IDMyLjUtNjUuOCA2Ny45LTY5LjhsMC0zNzAuNUM0NzUuNiA2NS44IDQ0NyAzNi40IDQ0My4xIDB6bS0zNyA0MDQuOWMtMzYuMyAwLTE4LjgtMi01NS4xLTItMzUuOCAwLTIxIDItNTYuMSAyLTUuOSAwLTQuOS04LjIgMC05LjggMjIuOC03LjYgMjIuOS0xMC4yIDI0LjYtMTIuOCAxMC40LTE1LjYgNS45LTgzIDUuOS0xMTMgMC01LjMtNi40LTEyLjgtMTMuOC0xMi44bC0xMTEuMiAwYy03LjQgMC0xMy44IDcuNS0xMy44IDEyLjggMCAzMC00LjUgOTcuNCA1LjkgMTEzIDEuNyAyLjUgMS44IDUuMiAyNC42IDEyLjggNC45IDEuNiA2IDkuOCAwIDkuOC0zNS4xIDAtMjAuMy0yLTU2LjEtMi0zNi4zIDAtMTguOCAyLTU1LjEgMi03LjkgMC01LjgtMTAuOCAwLTEwLjggMTAuMi0zLjQgMTMuNS0zLjUgMjEuNy0xMy44IDcuNy0xMi45IDcuOS00NC40IDcuOS0xMjcuOGwwLTEwMS4yYzAtMjIuMi0xMi4yLTI4LjMtMjguNi0zMi40LTguOC0yLjItNC0xMS44IDEtMTEuOCAzNi41IDAgMjAuNiAyIDU3LjEgMiAzMi43IDAgMTYuNS0yIDQ5LjItMiAzLjMgMCA4LjUgOC4zIDEgMTAuOC00LjkgMS42LTI3LjYgMy43LTI3LjYgMzkuMyAwIDQ1LjYtLjIgNTUuOCAxIDY4LjggMCAxLjMgMi4zIDEyLjggMTIuOCAxMi44bDEwOS4yIDBjMTAuNSAwIDEyLjgtMTEuNSAxMi44LTEyLjggMS4yLTEzIDEtMjMuMiAxLTY4LjggMC0zNS42LTIyLjctMzcuNy0yNy42LTM5LjMtNy41LTIuNS0yLjMtMTAuOCAxLTEwLjggMzIuNyAwIDE2LjUgMiA0OS4yIDIgMzYuNSAwIDIwLjYtMiA1Ny4xLTIgNC45IDAgOS45IDkuNiAxIDExLjgtMTYuNCA0LjEtMjguNiAxMC4zLTI4LjYgMzIuNGwwIDEwMS4yYzAgODMuNCAuMSAxMTQuOSA3LjkgMTI3LjggOC4yIDEwLjIgMTEuNCAxMC40IDIxLjcgMTMuOCA1LjggMCA3LjggMTAuOCAwIDEwLjh6Il19LGkyZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtaGFja2VyLW5ld3MiLGljb246WzQ0OCw1MTIsWyJoYWNrZXItbmV3cy1zcXVhcmUiXSwiZjNhZiIsIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjEgMjI5LjJzLjEtLjEgLjEtLjIgLjEtLjIgLjItLjJjMCAuMSAwIC4zLS4xIC40bC0uMiAwek0yMzkuMiAzODRsLTMxLjQgMCAwLTEwMi43LTc5LjgtMTUzLjMgMzcuMyAwYzQxLjUgNzcuNyA0OC4xIDk1LjggNTQuMSAxMTIgMS42IDQuMyAzLjEgOC41IDUuMiAxMy42IDMuMi03IDUuMS0xMS45IDcuMS0xNy4zIDUuOS0xNS4zIDEyLjgtMzMuMiA1My41LTEwOC4zbDM0LjggMC04MC44IDE1NS4xIDAgMTAwLjl6Il19LFUzdD1pMmUsajN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNyZWF0aXZlLWNvbW1vbnMtcGQtYWx0IixpY29uOls1MTIsNTEyLFtdLCJmNGVkIiwiTTI1NS42IDhDMTEyLjcgOCA4IDEyMy4xIDggMjU2IDggMzk0LjUgMTIxLjYgNTA0IDI1NS42IDUwNCAzODUuNSA1MDQgNTA0IDQwMy4xIDUwNCAyNTYgNTA0IDExOC4xIDM5Ny40IDggMjU1LjYgOHptLjggNDUwLjhjLTExMi41IDAtMjAzLjctOTMtMjAzLjctMjAyLjggMC0xMDUuNCA4NS41LTIwMy4zIDIwMy43LTIwMy4zIDExMi42IDAgMjAyLjkgODkuNSAyMDIuOCAyMDMuMyAwIDEyMS43LTk5LjYgMjAyLjgtMjAyLjggMjAyLjh6TTMyNC43IDE4NmwtNTMuMiAwIDAgMTM3LjIgNTMuMiAwYzIxLjQgMCA3MC01LjEgNzAtNjguNiAwLTYzLjQtNDguNi02OC42LTcwLTY4LjZ6bS44IDEwOC41bC0xOS45IDAgMC03OS43IDE5LjQtLjFjMy44IDAgMzUtMi4xIDM1IDM5LjkgMCAyNC42LTEwLjUgMzkuOS0zNC41IDM5Ljl6TTIxMS43IDE4NmwtNjguMiAwIDAgMTM3LjMgMzQuNiAwIDAtNDQuMyAyNyAwYzU0LjEgMCA1Ny4xLTM3LjUgNTcuMS00Ni41IDAtMzEtMTYuOC00Ni41LTUwLjUtNDYuNXptLTQuOSA2Ny4zbC0yOS4yIDAgMC00MS42IDI4LjMgMGMzMC45IDAgMjguOCA0MS42IC45IDQxLjZ6Il19LFczdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJvcmNpZCIsaWNvbjpbNTEyLDUxMixbXSwiZjhkMiIsIk0yOTQuNyAxODguMmwtNDUuOSAwIDAgMTUzLjggNDcuNSAwYzY3LjYgMCA4My4xLTUxLjMgODMuMS03Ni45IDAtNDEuNi0yNi41LTc2LjktODQuNy03Ni45ek0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTE3NS4yIDM2OC44bC0yOS44IDAgMC0yMDcuNSAyOS44IDAgMCAyMDcuNXpNMTYwLjMgOTguNWExOS42IDE5LjYgMCAxIDEgMCAzOS4yIDE5LjYgMTkuNiAwIDEgMSAwLTM5LjJ6TTMwMCAzNjlsLTgxIDAgMC0yMDcuNyA4MC42IDBjNzYuNyAwIDExMC40IDU0LjggMTEwLjQgMTAzLjkgMCA1My4zLTQxLjcgMTAzLjktMTEwIDEwMy45eiJdfSxHM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYmVoYW5jZSIsaWNvbjpbNTc2LDUxMixbXSwiZjFiNCIsIk0yMzIgMjM3LjJjMzEuOC0xNS4yIDQ4LjQtMzguMiA0OC40LTc0IDAtNzAuNi01Mi42LTg3LjgtMTEzLjMtODcuOGwtMTY3LjEgMCAwIDM1NC40IDE3MS44IDBjNjQuNCAwIDEyNC45LTMwLjkgMTI0LjktMTAyLjkgMC00NC41LTIxLjEtNzcuNC02NC43LTg5Ljd6TTc3LjkgMTM1LjlsNzMuMSAwYzI4LjEgMCA1My40IDcuOSA1My40IDQwLjUgMCAzMC4xLTE5LjcgNDIuMi00Ny41IDQyLjJsLTc5IDAgMC04Mi43em04My4zIDIzMy43bC04My4zIDAgMC05Ny42IDg0LjkgMGMzNC4zIDAgNTYgMTQuMyA1NiA1MC42IDAgMzUuOC0yNS45IDQ3LTU3LjYgNDd6TTUxOS43IDEyOC45bC0xNDMuNyAwIDAtMzQuOSAxNDMuNyAwIDAgMzQuOXpNNTc2IDMwNS4yYzAtNzUuOS00NC40LTEzOS4yLTEyNC45LTEzOS4yLTc4LjIgMC0xMzEuMyA1OC44LTEzMS4zIDEzNS44IDAgNzkuOSA1MC4zIDEzNC43IDEzMS4zIDEzNC43IDYxLjMgMCAxMDEtMjcuNiAxMjAuMS04Ni4zbC02Mi4yIDBjLTYuNyAyMS45LTM0LjMgMzMuNS01NS43IDMzLjUtNDEuMyAwLTYzLTI0LjItNjMtNjUuM2wxODUuMSAwYy4zLTQuMiAuNi04LjcgLjYtMTMuMnpNMzkwLjQgMjc0YzIuMy0zMy43IDI0LjctNTQuOCA1OC41LTU0LjggMzUuNCAwIDUzLjIgMjAuOCA1Ni4yIDU0LjhsLTExNC43IDB6Il19LFkzdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJtb25lcm8iLGljb246WzUxMiw1MTIsW10sImYzZDAiLCJNMzYwIDM4NGwxMDguNCAwQzQyNSA0NTUuOSAzNDYuMSA1MDQgMjU2IDUwNFM4NyA0NTUuOSA0My42IDM4NGwxMDguNCAwIDAtMTI3LjggMTA0IDEwNC44IDEwNC0xMDUgMCAxMjh6TTk2IDMzNmwwLTIwOCAxNTkuNCAxNTkuNCAxNjAuNi0xNTkuNCAwIDIwOCA3NC44IDBjOC41LTI1LjEgMTMuMi01MiAxMy4yLTgwIDAtMTM3LTExMS0yNDgtMjQ4LTI0OFM4IDExOSA4IDI1NmMwIDI4IDQuNiA1NC45IDEzLjIgODBMOTYgMzM2eiJdfSxaM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmlnbWEiLGljb246WzM4NCw1MTIsW10sImY3OTkiLCJNMTQgOTUuOEMxNCA0Mi45IDU2LjkgMCAxMDkuOCAwTDI3NC4yIDBjNTIuOSAwIDk1LjggNDIuOSA5NS44IDk1LjggMCAzMy41LTE3LjIgNjMtNDMuMiA4MC4xIDI2IDE3LjEgNDMuMiA0Ni42IDQzLjIgODAuMSAwIDUyLjktNDIuOSA5NS44LTk1LjggOTUuOGwtMi4xIDBjLTI0LjggMC00Ny40LTkuNC02NC40LTI0LjlsMCA4OC4zYzAgNTMuNi00NCA5Ni44LTk3LjQgOTYuOC01Mi44IDAtOTYuMy00Mi44LTk2LjMtOTUuOCAwLTMzLjUgMTcuMi02MyA0My4yLTgwLjEtMjYtMTcuMS00My4yLTQ2LjYtNDMuMi04MC4xczE3LjItNjMgNDMuMi04MC4xQzMxLjIgMTU4LjggMTQgMTI5LjMgMTQgOTUuOHptMTYyLjMgOTUuOGwtNjYuNSAwYy0zNS42IDAtNjQuNCAyOC44LTY0LjQgNjQuNCAwIDM1LjQgMjguNiA2NC4yIDY0IDY0LjRsNjYuOSAwIDAtMTI4Ljh6TTIwNy43IDI1NmMwIDM1LjYgMjguOCA2NC40IDY0LjQgNjQuNGwyLjEgMGMzNS42IDAgNjQuNC0yOC44IDY0LjQtNjQuNHMtMjguOC02NC40LTY0LjQtNjQuNGwtMi4xIDBjLTM1LjYgMC02NC40IDI4LjgtNjQuNCA2NC40em0tOTcuOSA5NS44bC0uNCAwYy0zNS40IC4yLTY0IDI5LTY0IDY0LjRzMjkuMiA2NC40IDY0LjkgNjQuNGMzNi4zIDAgNjYtMjkuNCA2Ni02NS41bDAtNjMuNC02Ni41IDB6bTAtMzIwLjRjLTM1LjYgMC02NC40IDI4LjgtNjQuNCA2NC40czI4LjggNjQuNCA2NC40IDY0LjRsNjYuNSAwIDAtMTI4LjgtNjYuNSAwem05Ny45IDEyOC44bDY2LjUgMGMzNS42IDAgNjQuNC0yOC44IDY0LjQtNjQuNHMtMjguOC02NC40LTY0LjQtNjQuNGwtNjYuNSAwIDAgMTI4Ljh6Il19LGdWPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imluc3RhZ3JhbSIsaWNvbjpbNDQ4LDUxMixbXSwiZjE2ZCIsIk0yMjQuMyAxNDFhMTE1IDExNSAwIDEgMCAtLjYgMjMwIDExNSAxMTUgMCAxIDAgLjYtMjMwem0tLjYgNDAuNGE3NC42IDc0LjYgMCAxIDEgLjYgMTQ5LjIgNzQuNiA3NC42IDAgMSAxIC0uNi0xNDkuMnptOTMuNC00NS4xYTI2LjggMjYuOCAwIDEgMSA1My42IDAgMjYuOCAyNi44IDAgMSAxIC01My42IDB6bTEyOS43IDI3LjJjLTEuNy0zNS45LTkuOS02Ny43LTM2LjItOTMuOS0yNi4yLTI2LjItNTgtMzQuNC05My45LTM2LjItMzctMi4xLTE0Ny45LTIuMS0xODQuOSAwLTM1LjggMS43LTY3LjYgOS45LTkzLjkgMzYuMXMtMzQuNCA1OC0zNi4yIDkzLjljLTIuMSAzNy0yLjEgMTQ3LjkgMCAxODQuOSAxLjcgMzUuOSA5LjkgNjcuNyAzNi4yIDkzLjlzNTggMzQuNCA5My45IDM2LjJjMzcgMi4xIDE0Ny45IDIuMSAxODQuOSAwIDM1LjktMS43IDY3LjctOS45IDkzLjktMzYuMiAyNi4yLTI2LjIgMzQuNC01OCAzNi4yLTkzLjkgMi4xLTM3IDIuMS0xNDcuOCAwLTE4NC44ek0zOTkgMzg4Yy03LjggMTkuNi0yMi45IDM0LjctNDIuNiA0Mi42LTI5LjUgMTEuNy05OS41IDktMTMyLjEgOXMtMTAyLjcgMi42LTEzMi4xLTljLTE5LjYtNy44LTM0LjctMjIuOS00Mi42LTQyLjYtMTEuNy0yOS41LTktOTkuNS05LTEzMi4xcy0yLjYtMTAyLjcgOS0xMzIuMWM3LjgtMTkuNiAyMi45LTM0LjcgNDIuNi00Mi42IDI5LjUtMTEuNyA5OS41LTkgMTMyLjEtOXMxMDIuNy0yLjYgMTMyLjEgOWMxOS42IDcuOCAzNC43IDIyLjkgNDIuNiA0Mi42IDExLjcgMjkuNSA5IDk5LjUgOSAxMzIuMXMyLjcgMTAyLjctOSAxMzIuMXoiXX0sWDN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBlcmJ5dGUiLGljb246WzQ0OCw1MTIsW10sImUwODMiLCJNMzA1LjMgMjg0LjZsLTU4LjcgMCAwIDk4LjcgNTguNyAwYzE2LjMgMCAyOS00LjYgMzguMi0xMy44czEzLjgtMjEuMiAxMy44LTM2LjFjMC0xNC42LTQuNy0yNi4zLTE0LTM1LjNzLTIyLTEzLjUtMzcuOS0xMy41ek0xNDkuNCAxMjguN2wtNTguNyAwIDAgOTguNyA1OC43IDBjMTYuMyAwIDI5LTQuNiAzOC4yLTEzLjhzMTMuOC0yMS4yIDEzLjgtMzYuMWMwLTE0LjYtNC43LTI2LjMtMTQtMzUuM3MtMjItMTMuNS0zNy45LTEzLjV6TTM2Ni42IDMyTDgxLjQgMzJjLTIxLjYgMC00Mi4yIDguNi01Ny41IDIzLjlTMCA5MS44IDAgMTEzLjRMMCAzOTguNmMwIDIxLjYgOC42IDQyLjIgMjMuOSA1Ny41UzU5LjggNDgwIDgxLjQgNDgwbDI4NS4zIDBjMjEuNiAwIDQyLjItOC42IDU3LjUtMjMuOVM0NDggNDIwLjIgNDQ4IDM5OC42bDAtMjg1LjNjMC0yMS42LTguNi00Mi4yLTIzLjktNTcuNVMzODguMiAzMiAzNjYuNiAzMnptNjMuNiAzNjYuNmMwIDE2LjktNi43IDMzLTE4LjcgNDVzLTI4LjEgMTguNi00NSAxOC43bC0yODUuMyAwYy0xNi45IDAtMzMtNi43LTQ1LTE4LjdzLTE4LjYtMjguMS0xOC43LTQ1bDAtMjg1LjNjMC0xNi45IDYuNy0zMyAxOC43LTQ1czI4LjEtMTguNiA0NS0xOC43bDI4NS4zIDBjMTYuOSAwIDMzIDYuNyA0NSAxOC43czE4LjYgMjguMSAxOC43IDQ1bDAgMjg1LjN6bS0xMjUtMjY5LjlsLTU4LjcgMCAwIDk4LjcgNTguNyAwYzE2LjMgMCAyOS00LjYgMzguMi0xMy44czEzLjgtMjEuMiAxMy44LTM2LjFjMC0xNC42LTQuNy0yNi4zLTE0LTM1LjNzLTIyLTEzLjUtMzcuOS0xMy41eiJdfSxvMmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLXZpbWVvIixpY29uOls0NDgsNTEyLFsidmltZW8tc3F1YXJlIl0sImYxOTQiLCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTMxOC41IDMwOS41Yy00My41IDU2LjUtODAuMyA4NC44LTExMC40IDg0LjgtMTguNyAwLTM0LjQtMTcuMi00Ny4zLTUxLjYtMy44LTEzLjktNy4zLTI2LjktMTAuNS0zOS0xOC4yLTY4LjMtMjguNi0xMDcuNC00Ni4yLTEwNy40LTIuNCAwLTEwLjggNS0yNS4xIDE1LjFMNjQgMTkyYzctNi4xIDEzLjktMTIuNCAyMC42LTE4LjUgMjkuMS0yNi4zIDU1LjYtNTAuMyA3My41LTUxLjkgMjQuOS0yLjQgNDAuMiAxNC42IDQ2IDUxLjEgMjAuNSAxMjkuNiAyOS42IDE0OS4yIDY2LjggOTAuNSAxMy40LTIxLjIgMjAuNi0zNy4yIDIxLjUtNDguMyAzLjQtMzIuOC0yNS42LTMwLjYtNDUuMi0yMi4yIDE1LjctNTEuNSA0NS44LTc2LjUgOTAuMS03NS4xIDMyLjkgMSA0OC40IDIyLjQgNDYuNSA2NC0xLjQgMzEuMS0yMy4yIDczLjgtNjUuMyAxMjcuOXoiXX0sUTN0PW8yZSxLM3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicHVzaGVkIixpY29uOls0NDgsNTEyLFtdLCJmM2UxIiwiTTQxNS4xIDExMS45bC05OC41LTkgMTQtMzMuNGMxMC40LTIzLjUtMTAuOC00MC40LTI4LjctMzdMMzAuNiA3Ni45Yy0xNS4xIDIuNy0yNiAxOC4zLTIxLjQgMzYuNkwxMTQuMyA0NjEuOGM2LjUgMjEuMyAzNi43IDI0LjIgNDcuNyA3TDE5Ny4zIDM4OCA0MzIuNSAxNTYuN2MxNi40LTE2LjggNC4zLTQyLjktMTcuNC00NC44ek0zMDUuNyA1My42YzUuMS0uNyA3LjUgMi41IDUuMiA3LjRsLTE2LjggMzkuOS0xNzcuNC0xNi4zIDE4OS0zMXpNMzAuOCAxMDcuOWMtMy4xLTUuMSAxLTEwIDYuMS05LjFsMjQ4LjcgMjIuNy05Ni45IDIzMC43LTE1Ny45LTI0NC4zek0xNDQuMSA0NTYuNGMtMi42IDQtNy45IDMuMS05LjQtMS4yTDUxLjYgMTc5LjcgMTc5LjMgMzc3LjNjLTcgMTUtMzUuMiA3OS4xLTM1LjIgNzkuMXpNNDE2LjkgMTQxLjlsLTE5OC43IDE5NS40IDg5LjctMjEzLjcgMTA2LjQgOS43YzQgMS4xIDUuNyA1LjMgMi42IDguNnoiXX0sSjN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1peGNsb3VkIixpY29uOls2NDAsNTEyLFtdLCJmMjg5IiwiTTIxMyAzNDYuNmwtMzMuMiAwIDAtMTUxLjUgNi4yLTIxLjYtMTAuNyAwLTM4LjEgMTczLjEtNjEgMC0zOC40LTE3My4xLTEwLjUgMCA1LjkgMjEuNiAwIDE1MS41LTMzLjIgMCAwLTE4MS42IDY1LjcgMCAzNi42IDE3My4xIDguNSAwIDM2LjYtMTczLjEgNjUuNyAwIDAgMTgxLjZ6bTMzMS41LTYzbC04NiA2Mi4xIDAtMzguMSA3Mi45LTUxLjgtNzIuOS01MS44IDAtMzguMSA4NiA2Mi4zIDkuMyAwIDg2LjMtNjIuMyAwIDM4LjEtNzMuMSA1MS44IDczLjEgNTEuOCAwIDM4LjEtODYuMy02Mi4xLTkuMyAwek00MzAuMiAyNzIuM2wtMTgyIDAgMC0zMy4xIDE4MiAwIDAgMzMuMXoiXX0sZWx0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InlhbmRleC1pbnRlcm5hdGlvbmFsIixpY29uOlszMjAsNTEyLFtdLCJmNDE0IiwiTTEyOS41IDUxMmwwLTE2Ni4xLTExMS0yOTcuOSA1NS44IDAgODEuOCAyMjkuNyA5NC4xLTI3Ny43IDUxLjMgMC0xMjAuNyAzNDcuOCAwIDE2NC4yLTUxLjMgMHoiXX0sdGx0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImhpdmUiLGljb246WzUxMiw1MTIsW10sImUwN2YiLCJNMjYwLjQgMjU0LjlMMTMxLjUgMzMuMWMtLjItLjMtLjUtLjYtLjgtLjhzLS43LS4zLTEuMS0uMy0uOCAuMS0xLjEgLjMtLjYgLjUtLjggLjhMLjMgMjU0LjljLS4yIC4zLS4zIC43LS4zIDEuMXMuMSAuOCAuMyAxLjFMMTI5LjEgNDc4LjljLjIgLjMgLjUgLjYgLjggLjhzLjcgLjMgMS4xIC4zIC44LS4xIDEuMS0uMyAuNi0uNSAuOC0uOEwyNjAuNCAyNTcuMWMuMi0uMyAuMy0uNyAuMy0xLjFzLS4xLS44LS4zLTEuMXptMzkuMS0yNS43Yy4yIC4zIC41IC42IC44IC44cy43IC4zIDEuMSAuM2w2Ni41IDBjLjQgMCAuOC0uMSAxLjEtLjNzLjYtLjUgLjgtLjggLjMtLjcgLjMtMS4xLS4xLS44LS4zLTEuMUwyNTkuMSAzMy4xYy0uMi0uMy0uNS0uNi0uOC0uOHMtLjctLjMtMS4xLS4zbC02Ni41IDBjLS40IDAtLjggLjEtMS4xIC4zcy0uNiAuNS0uOCAuOC0uMyAuNy0uMyAxLjEgLjEgLjggLjMgMS4xTDI5OS40IDIyOS4yem0yMTIuMyAyNS43TDM4NC45IDMzLjFjLS4yLS4zLS41LS42LS44LS44cy0uNy0uMy0xLjEtLjNsLTY2LjYgMGMtLjQgMC0uOCAuMS0xLjEgLjNzLS42IC41LS44IC44LS4zIC43LS4zIDEuMSAuMSAuOCAuMyAxLjFMNDQwLjcgMjU2IDMxNC41IDQ3Ni43Yy0uMiAuMy0uMyAuNy0uMyAxLjFzLjEgLjggLjMgMS4xIC41IC42IC44IC44IC43IC4zIDEuMSAuM2w2Ni42IDBjLjQgMCAuOC0uMSAxLjEtLjNzLjYtLjUgLjgtLjhMNTExLjcgMjU3LjFjLjItLjMgLjMtLjcgLjMtMS4xcy0uMS0uOC0uMy0xLjF6TTM2NiAyODQuOWwtNjYuNSAwYy0uNCAwLS44IC4xLTEuMSAuM3MtLjYgLjUtLjggLjhMMTg4LjggNDc2LjdjLS4yIC4zLS4zIC43LS4zIDEuMXMuMSAuOCAuMyAxLjEgLjUgLjYgLjggLjggLjcgLjMgMS4xIC4zbDY2LjUgMGMuNCAwIC44LS4xIDEuMS0uM3MuNi0uNSAuOC0uOEwzNjcuOSAyODguM2MuMi0uMyAuMy0uNyAuMy0xLjFzLS4xLS44LS4zLTEuMS0uNS0uNi0uOC0uOC0uNy0uMy0xLjEtLjN6Il19LGFsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjcmVhdGl2ZS1jb21tb25zLXplcm8iLGljb246WzUxMiw1MTIsW10sImY0ZjMiLCJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zem0tLjQgNjAuNWMtODEuOSAwLTEwMi41IDc3LjMtMTAyLjUgMTQyLjhTMTc0LjEgMzk4LjggMjU2IDM5OC44IDM1OC41IDMyMS41IDM1OC41IDI1NiAzMzcuOSAxMTMuMiAyNTYgMTEzLjJ6bTAgNTMuOWMzLjMgMCA2LjQgLjUgOS4yIDEuMiA1LjkgNS4xIDguOCAxMi4xIDMuMSAyMS45TDIxMy44IDI5MC40Yy0xLjctMTIuNy0xLjktMjUuMS0xLjktMzQuNCAwLTI4LjggMi04OC45IDQ0LjEtODguOXptNDAuOCA0Ni4yYzIuOSAxNS40IDMuMyAzMS40IDMuMyA0Mi43IDAgMjguOS0yIDg4LjktNDQuMSA4OC45LTEzLjUgMC0zMi42LTcuNy0yMC4xLTI2LjRsNjAuOS0xMDUuMnoiXX0sczJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1zbmFwY2hhdCIsaWNvbjpbNDQ4LDUxMixbInNuYXBjaGF0LXNxdWFyZSJdLCJmMmFkIiwiTTM4NCAzMkw2NCAzMmMtMTcgMC0zMy4zIDYuNy00NS4zIDE4LjdTMCA3OSAwIDk2TDAgNDE2YzAgMTcgNi43IDMzLjMgMTguNyA0NS4zUzQ3IDQ4MCA2NCA0ODBsMzIwIDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdTNDQ4IDQzMyA0NDggNDE2bDAtMzIwYzAtMTctNi43LTMzLjMtMTguNy00NS4zUzQwMSAzMiAzODQgMzJ6bS0zLjkgMzE5LjNsLS4xIC4xYy0yLjUgMi44LTUuNCA1LjEtOC43IDYuOC02LjUgMy42LTEzLjQgNi4zLTIwLjYgOC4yLTEuNCAuNC0yLjcgMS0zLjkgMS44LTIuMiAxLjktMi4xIDQuNi00LjQgOC42LTEuNyAzLTQgNS41LTYuOCA3LjUtNi43IDQuNi0xNC4yIDQuOS0yMi4yIDUuMi03LjIgLjMtMTUuNCAuNi0yNC43IDMuNy0zLjggMS4yLTcuOCAzLjctMTIuNCA2LjUtMTEuMyA2LjktMjYuNyAxNi40LTUyLjMgMTYuNHMtNDAuOS05LjQtNTIuMS0xNi4zYy00LjctMi45LTguNy01LjQtMTIuNS02LjYtOS4zLTMuMS0xNy41LTMuNC0yNC43LTMuNy04LS4zLTE1LjUtLjYtMjIuMi01LjItMi40LTEuNi00LjQtMy43LTYtNi4xLTMuMi00LjYtMi45LTcuOC01LjMtOS45LTEuMy0uOC0yLjYtMS41LTQuMS0xLjgtNy4xLTEuOS0xMy45LTQuNi0yMC4zLTguMS0zLjEtMS42LTUuOS0zLjgtOC4zLTYuMy02LjYtNi44LTguMy0xNC44LTUuNy0yMS44IDMuNC05LjMgMTEuNi0xMi4xIDE5LjQtMTYuMyAxNC44LTggMjYuMy0xOC4xIDM0LjQtMjkuOSAyLjMtMy4zIDQuMy02LjkgNi0xMC42IC44LTIuMiAuOC0zLjMgLjItNC40LS42LS45LTEuMy0xLjYtMi4yLTIuMi0yLjUtMS43LTUuMS0zLjQtNi45LTQuNS0zLjMtMi4xLTUuOS0zLjgtNy41LTUtNi4zLTQuNC0xMC42LTktMTMuNC0xNC4yLTEuOS0zLjYtMy03LjYtMy4zLTExLjZzLjQtOC4xIDEuOS0xMS45YzQuMS0xMC45IDE0LjUtMTcuNyAyNy0xNy43IDIuNiAwIDUuMyAuMyA3LjggLjggLjcgLjIgMS40IC4zIDIgLjUtLjEtNy40IC4xLTE1LjQgLjctMjMuMSAyLjQtMjcuMyAxMS45LTQxLjYgMjEuOS01MyA2LjQtNy4yIDEzLjktMTMuMiAyMi4zLTE3LjkgMTUuMS04LjYgMzIuMi0xMyA1MC45LTEzczM1LjggNC40IDUwLjkgMTNjOC4zIDQuNyAxNS45IDEwLjggMjIuMiAxNy45IDEwIDExLjQgMTkuNSAyNS43IDIxLjkgNTMgLjYgNy43IC45IDE1LjQgLjcgMjMuMSAuNy0uMiAxLjQtLjMgMi4xLS41IDIuNi0uNiA1LjItLjggNy44LS44IDEyLjUgMCAyMi44IDYuOCAyNyAxNy43IDEuNSAzLjggMi4xIDcuOSAxLjkgMTEuOXMtMS40IDgtMy4zIDExLjZjLTIuNyA1LjItNy4xIDkuOS0xMy40IDE0LjItMS43IDEuMi00LjMgMi45LTcuNSA1LTEuOCAxLjItNC41IDIuOS03LjIgNC43LS44IC41LTEuNCAxLjItMS45IDItLjUgMS0uNSAyLjIgLjIgNC4yIDEuNyAzLjggMy43IDcuNCA2LjEgMTAuOCA4LjMgMTIuMSAyMC4yIDIyLjMgMzUuNSAzMC40IDEuNSAuOCAzIDEuNSA0LjQgMi4zIC43IC4zIDEuNiAuOCAyLjUgMS4zIDQuOSAyLjcgOS4yIDYgMTEuNSAxMi4yIDIuNSA2LjkgMSAxNC43LTUuMiAyMS4zem0tMTYuNy0xOC41Yy01MC4zLTI0LjMtNTguMy02MS45LTU4LjctNjQuNy0uNC0zLjQtLjktNiAyLjgtOS41IDMuNi0zLjMgMTkuNS0xMy4yIDI0LTE2LjMgNy4zLTUuMSAxMC41LTEwLjIgOC4yLTE2LjUtMS43LTQuMy01LjctNi0xMC02LTEuMyAwLTIuNyAuMi00IC40LTggMS43LTE1LjggNS44LTIwLjQgNi45LS41IC4xLTEuMSAuMi0xLjcgLjItMi40IDAtMy4zLTEuMS0zLjEtNCAuNi04LjggMS44LTI1LjkgLjQtNDEuOS0xLjktMjItOS0zMi45LTE3LjQtNDIuNi00LjEtNC42LTIzLjEtMjQuNy01OS41LTI0LjdzLTU1LjQgMjAuMS01OS41IDI0LjhjLTguNCA5LjctMTUuNSAyMC42LTE3LjQgNDIuNi0xLjQgMTYtLjEgMzMuMSAuNCA0MS45IC4yIDIuOC0uNyA0LTMuMSA0LS42IDAtMS4xLS4xLTEuNy0uMi00LjUtMS4xLTEyLjMtNS4xLTIwLjMtNi45LTEuMy0uMy0yLjYtLjQtNC0uNC00LjMgMC04LjMgMS42LTEwIDYtMi40IDYuMyAuOCAxMS40IDguMiAxNi41IDQuNCAzLjEgMjAuNCAxMyAyNCAxNi4zIDMuNyAzLjQgMy4yIDYuMSAyLjggOS41LS40IDIuOC04LjQgNDAuNC01OC43IDY0LjctMi45IDEuNC04IDQuNCAuOSA5LjMgMTMuOSA3LjYgMjMuMSA2LjggMzAuMyAxMS40IDYuMSAzLjkgMi41IDEyLjQgNi45IDE1LjQgNS41IDMuOCAyMS42LS4zIDQyLjMgNi42IDE3LjQgNS43IDI4LjEgMjIgNTkgMjJzNDEuOC0xNi4zIDU4LjktMjJjMjAuOC02LjkgMzYuOS0yLjggNDIuMy02LjYgNC40LTMuMSAuOC0xMS41IDYuOS0xNS40IDcuMi00LjYgMTYuNC0zLjggMzAuMy0xMS41IDguOC00LjkgMy44LTcuOSAuOS05LjR6Il19LHJsdD1zMmUsaWx0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InRoZW1laXNsZSIsaWNvbjpbNTEyLDUxMixbXSwiZjJiMiIsIk0yMDggODguM2MwLTEwIDYuMy0yMS43IDE3LjctMjEuNyAxMS4xIDAgMTcuNyAxMS43IDE3LjcgMjEuNyAwIDEwLjMtNi42IDIxLjctMTcuNyAyMS43LTExLjQgMC0xNy43LTExLjQtMTcuNy0yMS43em0zMDQgMTYwYzAgMzYtMTEuNCAxMDIuMy0zNi4zIDEyOS43LTIyLjkgMjQuOS04Ny40IDYxLjEtMTIwLjkgNzAuNmwtMS4xIC4zIDAgMzIuNmMwIDE2LjMtMTIuNiAzMC42LTI5LjEgMzAuNi0xMCAwLTE5LjQtNS43LTI0LjYtMTQuMy01LjQgOC42LTE0LjkgMTQuMy0yNC45IDE0LjNzLTE5LjQtNS43LTI0LjktMTQuM2MtNS4xIDguNi0xNC42IDE0LjMtMjQuNiAxNC4zLTEwLjMgMC0xOS40LTUuNy0yNC45LTE0LjMtNS4xIDguNi0xNC42IDE0LjMtMjQuNiAxNC4zLTE4LjkgMC0yOS40LTE1LjctMjkuNC0zMi45LTE2LjMgMTIuMy0zNS43IDE5LjQtNTYuNiAxOS40LTIyIDAtNDMuNC04LjMtNjAuMy0yMi45IDEwLjMtLjMgMjAuNi0yLjMgMzAuMy01LjctMjAuOS01LjctMzkuNC0xOC45LTUyLTM2LjMgMjEuNCA0LjYgNDYuMiAxLjcgNjcuMS0xMS4xLTIyLTIyLTU2LjYtNTguOS02OC42LTg3LjQtNS43LTEzLjQtNi45LTMxLjQtNi45LTQ1LjcgMC00OS43IDIwLjMtMTYwIDg2LjMtMTYwIDEwLjYgMCAxOC45IDQuOSAyMy4xIDE0LjkgMy43LTUuNCA3LjctMTAuNSAxMi0xNS40IDItMi42IDUuNy01LjQgNy4xLTguMyA4LTEyLjYgMTEuNy0yMS4xIDIxLjctMzQgMzIuMy00MS4xIDgxLjctNjkuNCAxMzQuOS02OS40IDYgMCAxMiAuMyAxNy43IDEuMSAxMC45LTExLjcgMjYtMTguMyA0MS43LTE4LjMgMTQuNiAwIDI5LjcgNiA0MCAxNi4zIC45IC45IDEuNCAyLjMgMS40IDMuNCAwIDMuNy0xMC4zIDEzLjQtMTIuOSAxNi4zIDQuMyAxLjQgMTUuNyA2LjkgMTUuNyAxMiAwIDIuOS0yLjkgNS4xLTQuNiA3LjEgMzEuNCAyNy43IDQ5LjQgNjcuMSA1Ni4zIDEwOCA0LjMtNS4xIDEwLjMtOC42IDE3LjEtOC42IDEwLjYgMCAyMC45IDcuMSAyOC42IDE0IDIwLjkgMTguNiAyNS43IDUzLjEgMjUuNyA3OS43ek0xODggODkuNGMwIDE4LjMgMTIuNiAzNy4xIDMyLjMgMzcuMXMzMi4zLTE4LjkgMzIuMy0zNy4xYzAtMTgtMTIuNi0zNi45LTMyLjMtMzYuOVMxODggNzEuNCAxODggODkuNHpNMjM3LjcgMTk0YzAtMTkuNyAzLjctMzkuMSA4LjYtNTguMy01MiA3OS41LTEzLjUgMTg0LjYgNjguOSAxODQuNiAyMS40IDAgNDIuNi03LjcgNjAtMjAgMi03LjQgMy43LTE0LjkgMy43LTIyLjYgMC0xNC4zLTYuMy0yMS40LTIwLjYtMjEuNC00LjYgMC05LjEgLjktMTMuNCAxLjctNjMuMyAxMi43LTEwNy4xIDMuNy0xMDcuMS02NHpNMTk2LjYgNDQ4LjljMC0xMS4xLTguOS0yMC45LTIwLjMtMjAuOXMtMjAgOS43LTIwIDIwLjlsMCAzMi42YzAgMTEuMSA4LjYgMjEuMSAyMCAyMS4xczIwLjMtOS43IDIwLjMtMjEuMWwwLTMyLjZ6bTQ5LjEgMGMwLTExLjEtOC42LTIwLjktMjAtMjAuOXMtMjAuMyA5LjctMjAuMyAyMC45bDAgMzIuNmMwIDExLjEgOC45IDIxLjEgMjAuMyAyMS4xczIwLTEwIDIwLTIxLjFsMC0zMi42em00OS43IDBjMC0xMS4xLTguOS0yMC45LTIwLjMtMjAuOXMtMjAuMyA5LjctMjAuMyAyMC45bDAgMzIuNmMwIDExLjEgOC45IDIxLjEgMjAuMyAyMS4xczIwLjMtOS43IDIwLjMtMjEuMWwwLTMyLjZ6bTQ5LjcgMGMwLTExLjEtOC45LTIwLjktMjAuMy0yMC45cy0yMC4zIDkuNy0yMC4zIDIwLjlsMCAzMi42YzAgMTEuMSA4LjkgMjEuMSAyMC4zIDIxLjFzMjAuMy0xMCAyMC4zLTIxLjFsMC0zMi42ek00MjEuNyAyODZjLTMwLjkgNTkuMS05MC4zIDEwMi42LTE1OC42IDEwMi42LTk2LjYgMC0xNjAuNi04NC42LTE2MC42LTE3Ni42IDAtMTYuOSAyLTMzLjQgNi00OS43LTIwIDMzLjctMjkuNyA3Mi42LTI5LjcgMTExLjQgMCA2MC4zIDI0LjkgMTIxLjcgNzEuNCAxNjAuOSA1LjEtOS43IDE0LjktMTYuMyAyNi0xNi4zIDEwIDAgMTkuNCA1LjcgMjQuNiAxNC4zIDUuNC04LjYgMTQuNi0xNC4zIDI0LjktMTQuMyAxMCAwIDE5LjQgNS43IDI0LjYgMTQuMyA1LjQtOC42IDE0LjktMTQuMyAyNC45LTE0LjNzMTkuNCA1LjcgMjQuOSAxNC4zYzUuMS04LjYgMTQuNi0xNC4zIDI0LjYtMTQuMyAxMC45IDAgMjAuOSA2LjYgMjUuNyAxNiA0My40LTM2LjMgNjguNi05MiA3MS40LTE0OC4zem0xMC42LTk5LjdjMC01My43LTM0LjYtMTA1LjctOTIuNi0xMDUuNy0zMC4zIDAtNTguNiAxNS4xLTc4LjkgMzYuOS0yMCA2Ni40LTI3LjQgMTM2LjYgNDEuNCAxMzYuNiAyOC44IDAgOTcuNC0yOC41IDg0LjMgMzYuOSAyOC45LTI2IDQ1LjctNjUuNyA0NS43LTEwNC42eiJdfSxvbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGFydC1sYW5nIixpY29uOls1MTIsNTEyLFtdLCJlNjkzIiwiTTM3OC42IDc4LjljLTIuOC0uMS01LjYtLjItOC41LS4ybC0yNjQuMSAwIDE0My4yLTcyYzcuNC00LjQgMTguOC02LjcgMzAuNC02LjcgMTMuNSAwIDI5LjQgOS4yIDM3IDE2LjhsNjIgNjIgMCAuMXpNMTA3LjMgOTYuNWwyNjIuOCAwYzE2IDAgMjUuNCAxLjQgMzUuNCA5LjNsMTA2LjUgMTA2LjQgMCAyMDguOC03OS4zIC43LTMyNS40LTMyNS4yek05Ni41IDM3M2wwLTI2Mi4yIDMyMy44IDMyMy44IC43IDc3LjQtMjEyLjIgMC05OC4xLTk4LjJDOTkuNCA0MDIuNSA5Ni41IDM5OC41IDk2LjUgMzczek03OC43IDEwNS4zbDAgMjY3LjdjMCAzLjMgLjEgNi4zIC4yIDkuMWwtNjItNjJDNi41IDMwOS4zIDAgMjk0LjMgMCAyNzkuNiAwIDI3Mi44IDMuOSAyNjIuMSA2LjcgMjU2bDcyLTE1MC43eiJdfSxzbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGVwbG95ZG9nIixpY29uOls1MTIsNTEyLFtdLCJmMzhlIiwiTTM4Mi4yIDEzNmw1MS43IDAgMCAyMzkuNi01MS43IDAgMC0yMC43Yy0xOS44IDI0LjgtNTIuOCAyNC4xLTczLjggMTQuNy0yNi4yLTExLjctNDQuMy0zOC4xLTQ0LjMtNzEuOCAwLTI5LjggMTQuOC01Ny45IDQzLjMtNzAuOCAyMC4yLTkuMSA1Mi43LTEwLjYgNzQuOCAxMi45bDAtMTAzLjl6TTMxNy41IDI5Ny44YTMzLjIgMzMuMiAwIDEgMCA2Ni40IDEgMzMuMiAzMy4yIDAgMSAwIC02Ni40LTF6TTE4OC41IDEzNmw1MS43IDAgMCAyMzkuNi01MS43IDAgMC0yMC43Yy0xOS44IDI0LjgtNTIuOCAyNC4xLTczLjggMTQuNy0yNi4yLTExLjctNDQuMy0zOC4xLTQ0LjMtNzEuOCAwLTI5LjggMTQuOC01Ny45IDQzLjMtNzAuOCAyMC4yLTkuMSA1Mi43LTEwLjYgNzQuOCAxMi45bDAtMTAzLjl6TTEyMy44IDI5Ny44YTMzLjIgMzMuMiAwIDEgMCA2Ni40IDEgMzMuMiAzMy4yIDAgMSAwIC02Ni40LTF6TTQ0OCA5NmMxNy41IDAgMzIgMTQuNCAzMiAzMmwwIDI1NmMwIDE3LjUtMTQuNCAzMi0zMiAzMkw2NCA0MTZjLTE3LjUgMC0zMi0xNC40LTMyLTMybDAtMjU2YzAtMTcuNSAxNC40LTMyIDMyLTMybDM4NCAwem0wLTMyTDY0IDY0QzI4LjggNjQgMCA5Mi44IDAgMTI4TDAgMzg0YzAgMzUuMiAyOC44IDY0IDY0IDY0bDM4NCAwYzM1LjIgMCA2NC0yOC44IDY0LTY0bDAtMjU2YzAtMzUuMi0yOC44LTY0LTY0LTY0eiJdfSxubHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmxpcGJvYXJkIixpY29uOls0NDgsNTEyLFtdLCJmNDRkIiwiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTM1OC40IDIxMS4ybC04OS42IDAgMCA4OS42LTg5LjYgMCAwIDg5LjYtODkuNiAwIDAtMjY4LjggMjY4LjggMCAwIDg5LjZ6Il19LGxsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJidXktbi1sYXJnZSIsaWNvbjpbNTc2LDUxMixbXSwiZjhhNiIsIk0yODguMiAzMkMxMzMuNSAzMiA4IDEzMi4zIDggMjU2UzEzMy41IDQ4MCAyODguMiA0ODAgNTY4LjQgMzc5LjcgNTY4LjQgMjU2IDQ0Mi45IDMyIDI4OC4yIDMyek0yMDIuOCAzODkuMmwtMTM4LjUgMS40IDc3LjItMjkwLjcgMTMzLjQgMGM2My4yIDAgODQuOSAyOC42IDc4IDcyLjgtLjQgMi4zLS45IDQuNi0xLjUgNi45LTUuNi0xLjMtMTEuNC0xLjktMTcuMi0xLjktNDIuMyAwLTc2LjcgMzMuOS03Ni43IDc1LjcgMCAzNy4xIDI3LjEgNjggNjIuOSA3NC41LTE4LjIgMzcuMi01Ni4yIDYwLjktMTE3LjcgNjEuNXpNMzU4LjIgMjA3LjFsMzIgMC0yMi4yIDkwLjMtMzUuNCAwLTExLjItMzUuNi03LjggMzUuNi0zNy44IDAgMjYuNi05MC4zIDMxLjMgMCAxNSAzNi44IDkuNC0zNi44ek01MDQuMSAzODkuMmwtMTk3LjEgMCAxNS44LTYxLjJjMy44IC42IDcuNiAuOCAxMS41IC44IDQyLjMgMCA3Ni43LTMzLjkgNzYuNy03NS42IDAtMzIuNi0yMS02MC41LTUwLjQtNzEuMWwyMS4zLTgyLjQgOTIuNSAwLTUzIDIwNS40IDEwMy45IDAtMjEuMiA4NC4xek0yMTEuOSAyNjkuNGwtMjQuNyAwLTEzLjggNTYuNSAyNC43IDBjMTYuMSAwIDMyLjEtMy4yIDM3LjktMjYuNiA1LjYtMjIuMy04LTI5LjgtMjQuMS0yOS44ek0yMzMuMiAxNzBsLTIxLjMgMC0xMS43IDQ3LjcgMjEuNCAwYzE4IDAgMzUuNC0xNC42IDM5LjItMzAuMSA0LjYtMTguOS05LjUtMTcuNi0yNy42LTE3LjZ6Il19LGNsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3YXRjaG1hbi1tb25pdG9yaW5nIixpY29uOls1MTIsNTEyLFtdLCJlMDg3IiwiTTI1NiAxNmEyNDAgMjQwIDAgMSAwIDAgNDgwIDI0MCAyNDAgMCAxIDAgMC00ODB6TTEyMS43IDQyOS4xYy01MS42LTQwLjItODQuOS0xMDIuOC04NC45LTE3My4xIDAtMjEuNyAzLjItNDMuMyA5LjYtNjQuMWwxMDIuOS0xNy45LS4xIDExLTEzLjkgMnMtLjEgMTIuNS0uMSAxOS41YzAgMiAuNCA0IDEuMiA1LjhzMi4xIDMuNCAzLjcgNC42bDkuNSA3LjQtMjcuNyAyMDQuOXpNMjI3LjQgMTQ1LjlsOC41LTcuNnM2LjktNS40LS4xLTkuM2MtNy4yLTQtMzkuNS0zNC41LTM5LjUtMzQuNS01LjMtNS41LTguMy03LjMtMTUuNSAwIDAgMC0zMi4zIDMwLjUtMzkuNSAzNC41LTcuMSA0LS4xIDkuMy0uMSA5LjNsOC41IDcuNiAwIDQuNC03My41LTE5LjJjMzkuNi01Ni45IDEwNS41LTk0LjMgMTgwLTk0LjMgMzEuMyAwIDYyLjIgNi43IDkwLjYgMTkuNnM1My44IDMxLjggNzQuMyA1NS40bC0xOTMuNSAzNy43IDAtMy42em0zNC4xIDMyOS4zbC0zMy45LTI1MC45IDkuNS03LjRjMS42LTEuMiAyLjgtMi44IDMuNy00LjZzMS4zLTMuOCAxLjItNS44YzAtNy0uMS0xOS41LS4xLTE5LjVsLTEzLjktMi0uMS0xMC41IDI0MS43IDMxLjRjMy45IDE2LjQgNS44IDMzLjMgNS44IDUwLjEgMCAxMTkuMS05NS40IDIxNi4yLTIxMy44IDIxOS4xeiJdfSxkbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaGlwcyIsaWNvbjpbNjQwLDUxMixbXSwiZjQ1MiIsIk0yNTEuNiAxNTcuNmMwLTEuOS0uOS0yLjgtMi44LTIuOGwtNDAuOSAwYy0xLjYgMC0yLjcgMS40LTIuNyAyLjhsMCAyMDEuOGMwIDEuNCAxLjEgMi44IDIuNyAyLjhsNDAuOSAwYzEuOSAwIDIuOC0uOSAyLjgtMi44bDAtMjAxLjh6TTE1Ni41IDE2OGMtMTYuMS0xMS44LTM2LjMtMTcuOS02MC4zLTE4LTE4LjEtLjEtMzQuNiAzLjctNDkuOCAxMS40bDAtODEuMmMwLTEuOC0uOS0yLjctMi44LTIuN2wtNDAuOSAwQy45IDc3LjUgMCA3OC40IDAgODAuMkwwIDM1OS40YzAgMS45IC45IDIuOCAyLjcgMi44bDQxIDBjMS45IDAgMi44LS45IDIuOC0yLjhsMC0xMzYuMWMwLS44LTIuOC0yNyA0NS44LTI3IDQ4LjUgMCA0NS44IDI2LjEgNDUuOCAyN2wwIDEyMi42YzAgOSA3LjMgMTYuMyAxNi40IDE2LjNsMjcuMyAwYzEuOCAwIDIuNy0uOSAyLjctMi44bDAtMTM2LjFjMC0yMy40LTkuMy00MS44LTI4LTU1LjN6TTYzNC45IDI3OC4xYy02LjgtMTUuNy0xOC40LTI3LTM0LjktMzQuMWwtNTcuNi0yNS4zYy04LjYtMy42LTkuMi0xMS4yLTIuNi0xNi4xIDcuNC01LjUgNDQuMy0xMy45IDg0IDYuOCAxLjcgMSA0LS4zIDQtMi40bDAtNDQuN2MwLTEuMy0uNi0yLjEtMS45LTIuNi0xNy43LTYuNi0zNi4xLTkuOS01NS4xLTkuOS0yNi41IDAtNDUuMyA1LjgtNTguNSAxNS40LS41IC40LTI4LjQgMjAtMjIuNyA1My43IDMuNCAxOS42IDE1LjggMzQuMiAzNy4yIDQzLjZMNTgwLjQgMjg2YzExLjYgNS4xIDE1LjIgMTMuMyAxMi4yIDIxLjItMy43IDkuMS0xMy4yIDEzLjYtMzYuNSAxMy42LTI0LjMgMC00NC43LTguOS01OC40LTE5LjEtMi4xLTEuNC00LjQgLjItNC40IDIuM2wwIDM0LjRjMCAxMC40IDQuOSAxNy4zIDE0LjYgMjAuNyAxNS42IDUuNSAzMS42IDguMiA0OC4yIDguMiAxMi43IDAgMjUuOC0xLjIgMzYuMy00LjMgLjctLjMgMzYtOC45IDQ1LjYtNDUuOCAzLjUtMTMuNSAyLjQtMjYuNS0zLjEtMzkuMXpNMzc2LjIgMTQ5LjhjLTMxLjcgMC0xMDQuMiAyMC4xLTEwNC4yIDEwMy41bDAgMTgzLjVjMCAuOCAuNiAyLjcgMi43IDIuN2w0MC45IDBjMS45IDAgMi44LS45IDIuOC0yLjdsMC04OC44YzE2LjUgMTIuNyAzNS44IDE5LjEgNTcuNyAxOS4xIDYwLjUgMCAxMDguNy00OC41IDEwOC43LTEwOC43IC4xLTYwLjMtNDguMi0xMDguNi0xMDguNi0xMDguNnptMCA0Ni42YTYyLjIgNjIuMiAwIDEgMSAwIDEyNC4zIDYyLjIgNjIuMiAwIDEgMSAwLTEyNC4zek0yMjguMyA3Mi41Yy0xNS45IDAtMjguOCAxMi45LTI4LjkgMjguOSAwIDE1LjYgMTIuNyAyOC45IDI4LjkgMjguOXMyOC45LTEzLjEgMjguOS0yOC45YzAtMTYuMi0xMy0yOC45LTI4LjktMjguOXoiXX0sZmx0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNsb3VkdmVyc2lmeSIsaWNvbjpbNjQwLDUxMixbXSwiZjM4NSIsIk0xNjAuNiAzMDRjOC4yIDY4LjUgNjcuNCAxMTUuNSAxNDYgMTExLjMgNTEuMiA0My4zIDEzNi44IDQ1LjggMTg2LjQtNS42IDY5LjIgMS4xIDExOC41LTQ0LjYgMTMxLjUtOTkuNSAxNC44LTYyLjUtMTguMi0xMzIuNS05Mi4xLTE1NS4xLTMzLTg4LjEtMTMxLjQtMTAxLjUtMTg2LjUtODUtNTcuMyAxNy4zLTg0LjMgNTMuMi05OS4zIDEwOS43LTcuOCAyLjctMjYuNSA4LjktNDUgMjQuMSAxMS43IDAgMTUuMiA4LjkgMTUuMiAxOS41bDAgMjAuNGMwIDEwLjctOC43IDE5LjUtMTkuNSAxOS41bC0yMC4yIDBjLTEwLjcgMC0xOS41LTYtMTkuNS0xNi43bDAtNi42LTQ2LjggMGMtMy44IDAtMTAuOCA0LjMtMTAuOCAxMS45bDAgNDAuNGMwIDYuNCA1LjMgMTEuOCAxMS43IDExLjhsNDguOSAwIDAtLjF6TTM4OCAzMTJjLTEwLjcgNDYuMyAyMS43IDcyLjQgNTUuMyA4Ni44LTEwNy4yIDMzLjgtMTcxLjYtNTAuOC0xMzUuMy0xMTAuOC0zMy4yIDIxLjYtMzMuNyA3MS4yLTI5LjIgOTIuOS0xNy45LTEyLjQtNTMuOC0zMi40LTU3LjQtNzkuOC0zLTM5LjkgMjEuNS03NS43IDU3LTkzLjkgMzAuNi0xNS44IDEwMy41LTguNSAxMzMuNiA0MC44LTE0LjEtNDgtNTMuOC03MC4xLTEwMS44LTc0LjggMzAuOS0zMC43IDY0LjQtNTAuMyAxMTQuMi00My43IDY5LjggOS4zIDEzMy4yIDgyLjggNjcuNyAxNTAuNSAzNS0xNi4zIDQ4LjctNTQuNCA0Ny41LTc2LjlsMTAuNSAxOS42YzExLjggMjIgMTUuMiA0Ny42IDkuNCA3Mi05LjIgMzktNDAuNiA2OC44LTc5LjcgNzYuNS0zMi4xIDYuMy04My4xLTUuMS05MS44LTU5LjJ6TTE0MCAyMDhsLTM5LjggMGMtOC45IDAtMTYuMi03LjMtMTYuMi0xNi4ybDAtMzkuNmMwLTguOSA3LjMtMTYuMiAxNi4yLTE2LjJsMzkuOCAwYzguOSAwIDE2LjIgNy4zIDE2LjIgMTYuMmwwIDM5LjZjMCA4LjktNy4zIDE2LjItMTYuMiAxNi4yek0yMi4xIDE2OGMtNS42IDAtMTAuMS00LjUtMTAuMS0xMC4xbDAtMjcuOGMwLTUuNiA0LjUtMTAuMSAxMC4xLTEwLjFsMjcuNyAwYzUuNSAwIDEwLjEgNC41IDEwLjEgMTAuMWwwIDI3LjhjMCA1LjYtNC41IDEwLjEtMTAuMSAxMC4xbC0yNy43IDB6TTE4MCAxNDIuN2wwLTIxLjRjMC01LjEgNC4yLTkuMyA5LjMtOS4zbDIxLjQgMGM1LjEgMCA5LjMgNC4yIDkuMyA5LjNsMCAyMS40YzAgNS4xLTQuMiA5LjMtOS4zIDkuM2wtMjEuNCAwYy01LjEgMC05LjMtNC4yLTkuMy05LjN6TTY4IDIzNS41bDAgMjVjMCA2LjMtNS4xIDExLjUtMTEuNCAxMS41bC0yNS4yIDBjLTYuMyAwLTExLjQtNS4yLTExLjQtMTEuNWwwLTI1YzAtNi4zIDUuMS0xMS41IDExLjQtMTEuNWwyNS4xIDBjNi40IDAgMTEuNSA1LjIgMTEuNSAxMS41eiJdfSx1bHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ29vZHJlYWRzIixpY29uOls0NDgsNTEyLFtdLCJmM2E4IiwiTTI5OS45IDE5MS4yYzUuMSAzNy4zLTQuNyA3OS0zNS45IDEwMC43LTIyLjMgMTUuNS01Mi44IDE0LjEtNzAuOCA1LjctMzcuMS0xNy4zLTQ5LjUtNTguNi00Ni44LTk3LjIgNC4zLTYwLjkgNDAuOS04Ny45IDc1LjMtODcuNSA0Ni45LS4yIDcxLjggMzEuOCA3OC4yIDc4LjN6TTQ0OCA4OGwwIDMzNmMwIDMwLjktMjUuMSA1Ni01NiA1Nkw1NiA0ODBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgODhDMCA1Ny4xIDI1LjEgMzIgNTYgMzJsMzM2IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZ6TTMzMCAzMTMuMnMtLjEtMzQtLjEtMjE3LjNsLTI5IDAgMCA0MC4zYy0uOCAuMy0xLjItLjUtMS42LTEuMi05LjYtMjAuNy0zNS45LTQ2LjMtNzYtNDYtNTEuOSAuNC04Ny4yIDMxLjItMTAwLjYgNzcuOC00LjMgMTQuOS01LjggMzAuMS01LjUgNDUuNiAxLjcgNzcuOSA0NS4xIDExNy44IDExMi40IDExNS4yIDI4LjktMS4xIDU0LjUtMTcgNjktNDUuMiAuNS0xIDEuMS0xLjkgMS43LTIuOSAuMiAuMSAuNCAuMSAuNiAuMiAuMyAzLjggLjIgMzAuNyAuMSAzNC41LS4yIDE0LjgtMiAyOS41LTcuMiA0My41LTcuOCAyMS0yMi4zIDM0LjctNDQuNSAzOS41LTE3LjggMy45LTM1LjYgMy44LTUzLjItMS4yLTIxLjUtNi4xLTM2LjUtMTktNDEuMS00MS44LS4zLTEuNi0xLjMtMS4zLTIuMy0xLjNsLTI2LjggMGMuOCAxMC42IDMuMiAyMC4zIDguNSAyOS4yIDI0LjIgNDAuNSA4Mi43IDQ4LjUgMTI4LjIgMzcuNCA0OS45LTEyLjMgNjcuMy01NC45IDY3LjQtMTA2LjN6Il19LHBsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0aWRhbCIsaWNvbjpbNjQwLDUxMixbXSwiZTdkYyIsIk0xMDcuMiA0OGwtMS4zIDBjLTMyLjMgMzMuMS02NS40IDY1LjUtOTggOTguNS0yLjYgMi44LTYuMSA1LjEtNy45IDguNiAzNS42IDM1LjQgNzEgNzEgMTA2LjYgMTA2LjQgMzUuNC0zNS4zIDcwLjctNzAuOCAxMDYuMS0xMDYuMWwwLTEuMy03My4yLTczLjJDMTI4LjggNjkuOCAxMTcuMyA1OS42IDEwNy4yIDQ4em0yMTMuNSAwbC0xLjMgMGMtMzQuOSAzNi4xLTcxLjUgNzEtMTA2LjMgMTA3LjIgMzUuOSAzNS4xIDcxIDcxIDEwNi43IDEwNi4zIDM0LjMtMzQuMSA2OC40LTY4LjQgMTAyLjYtMTAyLjQgMS41LTEuNSAzLjMtMi44IDQuMS00LjgtMzQuNi0zMy44LTY4LjQtNjguMi0xMDIuNi0xMDIuMS0xLjMtMS4zLTIuMy0yLjYtMy4zLTQuMXptMjEzLjUgMGwtMS4zIDBjLTE3LjIgMTgtMzUuMSAzNS4zLTUyLjYgNTMtMTcuOSAxNy43LTM1LjQgMzUuNy01My41IDUzLjMgLjggMi4zIDMgMy42IDQuNiA1LjVMNTMzLjMgMjYxLjVjMzYuMS0zNC45IDcwLjgtNzEuMiAxMDYuNy0xMDYuMS0uNS0yLjItMi42LTMuNS00LTVMNTU1LjggNzAuMmMtNy4xLTcuNC0xNC45LTE0LjItMjEuNS0yMi4yek0zMTkuNiAyNjEuN2MtMzQuOSAzNS4xLTcwIDcwLTEwNC45IDEwNC45LS4zIC43LS43IDEuNy0xIDIuMyAyNCAyMy43IDQ3LjcgNDcuNSA3MS41IDcxLjMgMTEuOCAxMS4zIDIyLjggMjMuNSAzNC45IDM0LjQgOC40LTcuNCAxNi40LTE2LjQgMjQuNy0yNC4zIDI1LjUtMjUuMyA1MS01MSA3Ni41LTc2LjMgMS44LTIuMiA0LjMtMy42IDUuNS02LjMtMzUuNC0zNC45LTcwLjUtNzAuMi0xMDUuNi0xMDUuNGwtMS41LS43eiJdfSxobHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidW5pdHkiLGljb246WzQ0OCw1MTIsW10sImUwNDkiLCJNMjQzLjYgOTEuNmw4MC4xIDQ2LjhjMi45IDEuNiAzIDYuMiAwIDcuOGwtOTUuMiA1NS42Yy0yLjkgMS43LTYuMyAxLjYtOSAwbC05NS4yLTU1LjZjLTIuOS0xLjYtMy02LjMgMC03LjhsODAuMS00Ni44IDAtOTEuNi0yMDQuNCAxMTkuNCAwIDIzOC44IDc4LjQtNDUuOCAwLTkzLjZjLS4xLTMuMyAzLjgtNS43IDYuNy0zLjlsOTUuMiA1NS42YzIuOSAxLjcgNC41IDQuNyA0LjUgNy44bDAgMTExLjJjLjEgMy4zLTMuOCA1LjctNi43IDMuOUw5OCAzNDYuOCAxOS42IDM5Mi42IDIyNCA1MTIgNDI4LjQgMzkyLjYgMzUwIDM0Ni44IDI2OS45IDM5My42Yy0yLjggMS43LTYuOC0uNS02LjctMy45bDAtMTExLjJjMC0zLjMgMS44LTYuMyA0LjUtNy44TDM2Mi45IDIxNWMyLjgtMS43IDYuOCAuNSA2LjcgMy45bDAgOTMuNiA3OC40IDQ1LjggMC0yMzguOC0yMDQuNC0xMTkuNCAwIDkxLjZ6Il19LG1sdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0ZW5jZW50LXdlaWJvIixpY29uOlszMjAsNTEyLFtdLCJmMWQ1IiwiTTQwLjUgNDk1LjhjMS40IDE5LjktMjcuNiAyMi4yLTI5LjcgMi45LTExLjYtMTI5LjkgMzEuMS0yMzkuNSAxMDEuNC0zMTMuMi0xNS42LTM0IDkuMi03Ny4xIDUwLjYtNzcuMSAzMC4zIDAgNTUuMSAyNC42IDU1LjEgNTUuMSAwIDQ0LTQ5LjUgNzAuOC04Ni45IDQ1LjEtNjUuNyA3MS4zLTEwMS40IDE2OS44LTkwLjUgMjg3LjJ6TTE2MC4yIC4xYy0xMjUuOSAwLTIwNC4zIDEzNC4yLTE0OC4zIDI0Mi4zIDguNyAxNy40IDM1LjMgNC41IDI2LjMtMTMuNC00Ni4zLTkyLjYgMjEtMTk5LjIgMTIyLTE5OS4yIDc1LjQgMCAxMzYuOSA2MS40IDEzNi45IDEzNi45IDAgOTAuOC04Ni45IDE1My45LTE2Ny43IDEzMy4xLTE5LjEtNC4xLTI1LjYgMjQuNC02LjYgMjkuMSAxMTAuNyAyMy4yIDIwNC02MCAyMDQtMTYyLjMgMC05MS45LTc0LjYtMTY2LjUtMTY2LjYtMTY2LjV6Il19LGdsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmcmVlLWNvZGUtY2FtcCIsaWNvbjpbNTc2LDUxMixbXSwiZjJjNSIsIk05Ny40IDk2LjJjMTAuNC0xMC42IDE2LTE3LjEgMTYtMjEuOSAwLTIuOC0xLjktNS41LTMuOC03LjQtMi40LTEuOC01LjQtMi44LTguNC0yLjgtOC41IDAtMjAuOSA4LjgtMzUuOCAyNS43LTQxLjUgNDcuMy02Mi43IDkzLjEtNjEuOCAxNjAuNlMyMSAzNjcuMyA1Ny42IDQxMi4yYzE4LjggMjMuNiAzMy4yIDM1LjggNDMuNSAzNS44IDMuMi0uMyA2LjEtMS42IDguNC0zLjggMS45LTIuOCAzLjgtNS42IDMuOC04LjQgMC01LjYtMy45LTEyLjItMTMuMi0yMC42LTQ0LjUtNDIuMy02Ny4zLTk3LTY3LjUtMTY1LS4yLTYxLjQgMjEuNi0xMTIuNCA2NC44LTE1NHpNMjM5LjYgNDIwLjFjLjYgLjQgLjkgLjYgLjkgLjZsLS45LS42em05My44IC42bC4yLS4xYy0uMiAuMS0uMyAuMi0uMiAuMXptMy4xLTE1OC4yYy0xNi4yLTQuMiA1MC40LTgyLjktNjguMS0xNzcuMiAwIDAgMTUuNSA0OS40LTYyLjggMTU5LjYtNzQuMyAxMDQuNCAyMy41IDE2OC43IDM0IDE3NS4yLTYuNy00LjMtNDcuNC0zNS43IDkuNi0xMjguNiAxMS0xOC4zIDI1LjUtMzQuOSA0My41LTcyLjIgMCAwIDE1LjkgMjIuNCA3LjYgNzEuMS0xMi41IDczLjYgNTMuOCA1Mi41IDU0LjggNTMuNSAyMi44IDI2LjgtMTcuNyA3My41LTIxLjYgNzYuNiA1LjUtMy43IDExNy43LTc4IDMzLTE4OC4xLTYgNi0xMy44IDM0LjItMzAgMzAuMXpNNTExIDg5LjdjLTE0LjktMTYuOS0yNy40LTI1LjctMzUuOS0yNS43LTMgLjEtNS45IDEuMS04LjQgMi44LTEuOSAxLjktMy44IDQuNy0zLjggNy40IDAgNC44IDUuNiAxMS4zIDE2IDIxLjkgNDMuMiA0MS42IDY1IDkyLjYgNjQuOCAxNTQuMS0uMiA2OC0yMyAxMjIuNi02Ny41IDE2NS05LjMgOC40LTEzLjIgMTQuOS0xMy4yIDIwLjYgMCAyLjcgMS45IDUuNiAzLjggOC40IDIuMyAyLjIgNS4yIDMuNiA4LjQgMy44IDEwLjMgMCAyNC43LTEyLjEgNDMuNS0zNS44IDM2LjYtNDQuOSA1My4xLTk0LjQgNTQuMS0xNjEuOVM1NTIuNSAxMzcgNTExIDg5Ljd6Il19LHhsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ4LXR3aXR0ZXIiLGljb246WzQ0OCw1MTIsW10sImU2MWIiLCJNMzU3LjIgNDhMNDI3LjggNDggMjczLjYgMjI0LjIgNDU1IDQ2NCAzMTMgNDY0IDIwMS43IDMxOC42IDc0LjUgNDY0IDMuOCA0NjQgMTY4LjcgMjc1LjUtNS4yIDQ4IDE0MC40IDQ4IDI0MC45IDE4MC45IDM1Ny4yIDQ4ek0zMzIuNCA0MjEuOGwzOS4xIDAtMjUyLjQtMzMzLjgtNDIgMCAyNTUuMyAzMzMuOHoiXX0sYmx0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN0aWNrZXItbXVsZSIsaWNvbjpbNTc2LDUxMixbXSwiZjNmNyIsIk01NjEuNyAxOTkuNmwwIDB6bS02LjItNzcuNGMtNy43LTIyLjMtNS4xLTcuMi0xMy40LTM2LjktMS42LTYuNS0zLjYtMTQuNS02LjItMjAtNC40LTguNy00LjYtNy41LTQuNi05LjUgMC01LjMgMzAuNy00NS4zIDE5LTQ2LjktNS43LS42LTEyLjIgMTEuNi0yMC42IDE3LTguNiA0LjItOCA1LTEwLjMgNS0yLjYgMC01LjctMy02LjItNS0yLTUuNyAxLjktMjUuOS0zLjYtMjUuOS0zLjYgMC0xMi4zIDI0LjgtMTcgMjUuOC01LjIgMS4zLTI3LjktMTEuNC03NS4xIDE4LTI1LjMgMTMuMi04Ni45IDY1LjItODcgNjUuMy02LjcgNC43LTIwIDQuNy0zNS41IDE2LTQ0LjQgMzAuMS0xMDkuNiA5LjQtMTEwLjcgOS0xMTAuNi0yNi44LTEyOC0xNS4yLTE1OSAxMS41LTIwLjggMTcuOS0yMy43IDM2LjUtMjQuMiAzOC45LTQuMiAyMC40IDUuMiA0OC4zIDYuNyA2NC4zIDEuOCAxOS4zLTIuNyAxNy43IDcuNyA5OC4zIC41IDEgNC4xIDAgNS4xIDEuNSAwIDguNC0zLjggMTIuMS00LjEgMTMtMS41IDQuNS0xLjUgMTAuNSAwIDE2IDIuMyA4LjIgOC4yIDM3LjIgOC4yIDQ2LjkgMCA0MS44IC40IDQ0IDIuNiA0OS40IDMuOSAxMCAxMi41IDkuMSAxNyAxMiAzLjEgMy41LS41IDguNSAxIDEyLjUgLjUgMiAzLjYgNCA2LjIgNSA5LjIgMy42IDI3IC4zIDI5LjktMi41IDEuNi0xLjUgLjUtNC41IDMuMS01IDUuMSAwIDEwLjgtLjUgMTQuNC0yLjUgNS4xLTIuNSA0LjEtNiAxLjUtMTAuNS0uNC0uOC03LTEzLjMtOS44LTE2LTIuMS0yLTUuMS0zLTcuMi00LjUtNS44LTQuOS0xMC4zLTE5LjQtMTAuMy0xOS41LTQuNi0xOS40LTEwLjMtNDYuMy00LjEtNjYuOCA0LjYtMTcuMiAzOS41LTg3LjcgMzkuNi04Ny44IDQuMS02LjUgMTctMTEuNSAyNy4zLTcgNiAxLjkgMTkuMyAyMiA2NS40IDMwLjkgNDcuOSA4LjcgOTcuNC0yIDExMi4yLTIgMi44IDItMS45IDEzLS41IDM4LjkgMCAyNi40LS40IDEzLjctNC4xIDI5LjktMi4yIDkuNyAzLjQgMjMuMi0xLjUgNDYuOS0xLjQgOS44LTkuOSAzMi43LTguMiA0My40IC41IDEgMSAyIDEuNSAzLjUgLjUgNC41IDEuNSA4LjUgNC42IDEwIDcuMyAzLjYgMTItMy41IDkuOCAxMS41LS43IDMuMS0yLjYgMTIgMS41IDE1IDQuNCAzLjcgMzAuNiAzLjQgMzYuNSAuNSAyLjYtMS41IDEuNi00LjUgNi40LTcuNCAxLjktLjkgMTEuMy0uNCAxMS4zLTYuNSAuMy0xLjgtOS4yLTE5LjktOS4zLTIwLTIuNi0zLjUtOS4yLTQuNS0xMS4zLTgtNi45LTEwLjEtMS43LTUyLjYgLjUtNTkuNCAzLTExIDUuNi0yMi40IDguNy0zMi40IDExLTQyLjUgMTAuMy01MC42IDE2LjUtNjguMyAuOC0xLjggNi40LTIzLjEgMTAuMy0yOS45IDkuMy0xNyAyMS43LTMyLjQgMzMuNS00Ny40IDE4LTIyLjkgMzQtNDYuOSA1Mi02OS44IDYuMS03IDguMi0xMy43IDE4LTggMTAuOCA1LjcgMjEuNiA3IDMxLjkgMTcgMTQuNiAxMi44IDEwLjIgMTguMiAxMS44IDIyLjkgMS41IDUgNy43IDEwLjUgMTQuOSA5LjUgMTAuNC0yIDEzLTIuNSAxMy40LTIuNSAyLjYtLjUgNS43LTUgNy4yLTggMy4xLTUuNSA3LjItOSA3LjItMTYuNSAwLTcuNy0uNC0yLjgtMjAuNi01Mi45eiJdfSx2bHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidHdpdGNoIixpY29uOls0NDgsNTEyLFtdLCJmMWU4IiwiTTM1OS40IDEwMy41bC0zOC42IDAgMCAxMDkuNyAzOC42IDAgMC0xMDkuN3pNMjUzLjIgMTAzbC0zOC42IDAgMCAxMDkuOCAzOC42IDAgMC0xMDkuOHpNODkgMGwtOTYuNSA5MS40IDAgMzI5LjIgMTE1LjggMCAwIDkxLjQgOTYuNS05MS40IDc3LjMgMCAxNzMuOC0xNjQuNiAwLTI1Ni0zNjYuOSAwek00MTcuMyAyMzcuOGwtNzcuMiA3My4xLTc3LjIgMC02Ny42IDY0IDAtNjQtODYuOSAwIDAtMjc0LjMgMzA4LjkgMCAwIDIwMS4yeiJdfSx5bHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToia2lja3N0YXJ0ZXItayIsaWNvbjpbNDQ4LDUxMixbXSwiZjNiYyIsIk0zNTYuNyAyNTYuMmw0MC44LTQwLjVjNDIuMi00MS45IDQyLjItMTEwLjMgMC0xNTIuMXMtMTExLTQxLjktMTUzLjIgMEwyMjkuMyA3OC40QzIwOS42IDUwLjMgMTc3LjEgMzIgMTQwLjIgMzIgODAuNSAzMiAzMiA4MC4yIDMyIDEzOS41bDAgMjMzYzAgNTkuNCA0OC41IDEwNy41IDEwOC4yIDEwNy41IDM3LjEgMCA2OS4zLTE4LjMgODktNDYuNGwxNC45IDE0LjdjNDIuMiA0MS45IDExMSA0MS45IDE1My4yIDBzNDIuMi0xMTAuMyAwLTE1Mi4xbC00MC44LTQwIC4xIDB6Il19LHdsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjcml0aWNhbC1yb2xlIixpY29uOls0NDgsNTEyLFtdLCJmNmM5IiwiTTIyNS44IDBjLjMgLjIgMjE2LjYgMTI0LjUgMjE3LjEgMTI0LjcgMyAxLjIgMy43IDMuNSAzLjcgNi42LS4xIDgzLjQtLjEgMTY2LjkgMCAyNTAuNCAuMSAxLjItLjIgMi40LS44IDMuNHMtMS41IDEuOS0yLjYgMi40Yy0yMS40IDEyLTIwNy45IDExOC4zLTIxOC45IDEyNC42bC0zIDBjLTc5LjMtNDUuNy0yMTguMy0xMjUuNC0yMTguNC0xMjUuNS0uNi0uMy0xLjEtLjctMS40LTEuM3MtLjUtMS4yLS40LTEuOWMwLS45IDAtMjI1LjktLjEtMjUzLjEtLjEtMSAuMi0yIC43LTIuOXMxLjMtMS42IDIuMi0yQzI3LjIgMTEyLjEgMjEzLjIgNiAyMjQuMSAwbDEuOCAwek0yMTUuNCAyMC40bC0uMi0uMmMtNjQuNyAzNi45LTEyOS41IDczLjctMTk0LjIgMTEwLjYgMCAuMSAuMSAuMiAuMSAuNEw1MiAxNDIuOWMtNy43IDYtOC4zIDYtMTAuNiA1LjEtLjEgMC0yNC4yLTkuMy0yNi44LTEwbDAgMjMwLjRjLjktMS40IDY0LjEtMTEwLjkgNjQuMS0xMTEgMS42LTIuOCAzLTEuOSA5LjEtMS41IDEuNCAuMSAxLjUgLjIgLjggMS40LTQxLjIgNzEuMy0zNi40IDYzLTY3LjUgMTE2LjktLjggMS40LS42IDEuMSAxLjIgMS4xbDE4Ni41IDBjMS40IDAgMS43LS4yIDEuNy0xLjZsMC04LjljMC0xLjMgMi40LS44LTE4LjQtMS03LjUtLjEtMTQuMS0zLjItMjEuNC0xMi43LTcuNC05LjctMTQuNi0xOS40LTIxLjgtMjkuMi0yLjMtMy4xLTMuNC0yLjQtMTYuOC0yLjQtMS44IDAtMS44IDAtMS44IDEuOCAuMyAyNi4yIC4yIDI1LjMgMSAzMi43IC41IDQuNCAyLjIgNC4yIDkuNyA0LjggMy4xIC4zIDMuOSA0LjEgLjUgNC45LTEuNiAuNC0zMS42IC41LTMzLjctLjEtLjUtLjEtMS0uNS0xLjMtLjlzLS41LTEtLjQtMS42IC4zLTEuMSAuNi0xLjUgLjktLjcgMS40LS44YzMuMy0uOCA2LjIgLjggNi43LTQuNCAxLjMtMTMuNyAxLjItOSAxLjEtNzkuNCAwLTEwLjgtLjQtMTIuNi01LjQtMTMuNi0xLjItLjItMy41LS4yLTQuNy0uNi0yLjktMS0yLTQuOCAxLjgtNC44IDMzLjcgMCA0Ni4xLTEuMSA1Ni4xIDQuOSA3LjcgNC42IDEyIDExLjUgMTIuNSAyMC40IC45IDE0LjYtNi41IDIyLjMtMTUgMzIuNi0uMiAuMS0uMyAuMy0uNCAuNXMtLjEgLjQtLjEgLjYgMCAuNCAuMSAuNiAuMiAuNCAuNCAuNWMyLjYgMy4yIDUgNi42IDcuNyA5LjggMjcuNiAzMy4yIDI0LjEgMzAuNSA0MS4zIDMzLjEgLjkgLjEgMS0uNCAxLTEuMmwwLTExYzAtMSAuMy0xLjQgMS40LTEuMyA3LjggMS4yIDE1LjggMS4xIDIzLjYtLjMgMS4xLS4xIDEuNSAuMiAxLjUgMS4zIDAgLjEgLjkgMjYuNyAuOSAyNi44IDAgMS41IC43IDEuNiAxLjkgMS42bDE4Ni43IDBjLTI3LjItNDctNTQuMi05NC04MS4yLTE0MC44IDIuMy0uNy0uNCAwIDYuNy0xLjQgMi0uNCAyLjEtLjQgMy4xIDEuNCA3LjMgMTIuNiA3Ny4zIDEzNCA3Ny40IDEzNC4xbDAtMjMwLjRjLTEuNyAuNS0xMDMuMyAzOC43LTEwNS44IDM5LjctMS4xIC40LTEuNSAuMi0xLjktLjktLjYtMS45LTEuMy0zLjgtMi4xLTUuNi0uMy0uOC0uMS0xLjEgLjYtMS40IC4xIDAgOTUuNS0zNS44IDEwMy0zOC44LTY1LjQtMzcuNi0xMzAuNi03NS0xOTYtMTEyLjZsODYuOCAxNTAuNC0uMyAuM2MtOS42LS45LTEwLjUtMS42LTExLjgtMy45LTEtMS43LTczLjUtMTI3LjctODItMTQyLjItOS4xIDE0LjctODMuNiAxNDYuMi04NS40IDE0Ni4zLTIuOSAuMi01LjkgLjEtOS4yIC4xIDI4LjgtNDkuOCA1Ny42LTk5LjUgODYuMi0xNDlsMCAwem01MS45IDEyOS45YzEuOS0uMSAzLjctLjQgNS41LS44IDEuNy0uMyAyLjUgLjIgMi42IDEuOSAwIC4xIC4xIDE5LjEtLjkgMjAuNXMtMS45IDEuMi0yLjYtLjJjLTUtOS43IDYuMi05LjctMzkuMS0xMi0uNyAwLTEgLjItMSAuOSAwIC4xIDMuNyAxMjIgMy43IDEyMi4xIDAgLjkgLjUgMS4yIDEuMiAxLjUgMyAxLjIgNS45IDIuNSA4LjcgNCA3LjMgNC4zIDExLjQgMTAuOCAxMi40IDE5LjMgMS40IDExLjgtMi44IDM1LjgtMzIuMiAzNy4xLTIuOCAuMS0yOC4zIDEuMS0zNC4xLTIzLjMtNC43LTE5LjMgOC4zLTMyLjcgMTkuOS0zNi40IC42LS4xIDEuMi0uNCAxLjUtLjlzLjUtMS4xIC41LTEuN2MuMS01LjYgMy0xMDcuMSAzLjctMTIxLjMgMC0xLjEtLjYtMS4yLTEuNC0xLjEtMzIuMyAuNS0zNi43LS4zLTQwLjIgOC41LTIuNCA2LjItNC4xIDEuMy00IC4yIDEuMS02IDIuMi0xMiAzLjMtMTggLjQtMi4xIDEuNC0yLjYgMy40LTEuOSA1LjYgMi4xIDYuNyAxLjcgMzcuMiAxLjkgMS43IDAgMS44LS4xIDEuOC0xLjggLjctMjcuNSAuNi0yMi42IDEtMjkuNiAuMS0uNi0uMS0xLjItLjMtMS43cy0uNy0uOS0xLjMtMS4xYy01LjYtMi45LTguOC03LjYtOC45LTEzLjktLjQtMTQuOCAxNy43LTIxLjcgMjcuNC0xMS41IDYuOCA3LjIgNS44IDE4LjktMi41IDI0LjItLjggLjQtMS40IDEuMS0xLjggMS44cy0uNiAxLjYtLjQgMi41YzAgLjYtLjEtNC4zIDEgMzAgMCAuOSAuNCAxLjEgMS4yIDEuMSAuMSAwIDIzLS4xIDM0LjUtLjRsMC0uMXpNNjguMyAxNDEuN2MxOS44LTQuNSAzMi43LS42IDUyLjUgMS43IDIuOCAuMyAzLjcgMS4yIDMuNiA0LS4yIDUtMS4yIDIyLjMtMS4yIDIzLjEgMCAuNS0uMiAxLS41IDEuNHMtLjcgLjctMS4yIC45Yy00LjEgMS43LTMuNi00LjQtNC03LjMtMy4xLTIyLjQtNzMuOS0zMi43LTc0LjYgMjUuNC0uMyAyMy45IDE3IDUzLjYgNTQuMSA1MC45IDI3LjItMiAxOS0yMC4yIDI0LjgtMjAuNSAuNC0uMSAuOSAwIDEuMyAuMXMuOCAuNCAxLjEgLjcgLjUgLjcgLjYgMS4yIC4xIC45IDAgMS4zYy0xLjggMTAuOC0zLjQgMTktMy40IDE5LjItMS41IDkuMi04Ni43IDIyLjEtOTMuNC00Mi4xLTIuNy0yNS44IDEwLjQtNTMuNCA0MC4zLTYwLjJ6bTgwIDg3LjdsLTE5LjUgMGMtLjYgMC0xLjItLjEtMS42LS40cy0uOC0uOC0xLTEuNGMyLjQtMy44IDUuOSAuOSA1LjktNi4xLS4xLTI1LjggLjItMzggLjItNDAuMSAwLTMuNC0uNS00LjYtMy4zLTQuOS03LS43LTMuMS0zLjQtMS4xLTMuNCAxMS44LS4xIDIyLjYtLjIgMzAgLjcgOC44IDEuMSAxNi43IDEyLjYgNy45IDIyLjYtMiAyLjItNCA0LjQtNi4xIDYuNyAxIDEuMiA2LjkgOC44IDE3LjMgMTkuNyAyLjcgMi44IDYuMiAzLjUgOS45IDMuMSAuNiAwIDEuMS0uMiAxLjUtLjZzLjctLjkgLjctMS41Yy4zLTMuNCAuMyA0LjcgLjQtNDAuNiAwLTUuNi0uMy02LjYtMy4yLTYuOC00LS40LTQtMi4zLS43LTMuNGwxOS4xLS4xYy4zIDAgNC41IC41IDEgMy40IDAgMC0uMiAwLS4yIDAtMy42IC4zLTMuOSAxLTQgNC42LS4zIDQzLjkgLjEgNDAuMiAuNCA0Mi44IC4xIC44IC4zIDIuMiA1LjEgMi4xIDIuNSAwIDMuOSAzLjQgMCAzLjQtMTAuNCAuMS0yMC43IDAtMzEuMSAuMS0xMC43IDAtMTMuNS02LjItMjQuMi0yMC44LTEuNi0yLjItOC4zLTIuNC04LjItLjQgLjkgMTYuNSAwIDE3LjggNCAxNy43IDQuOC0uMSA0LjcgMy42IC44IDMuNWwuMSAwem0yNzUtMTAuMWMtMS4yIDcuMSAuMiAxMC40LTUuMyAxMC4zLTYxLjUtLjQtNDcuOC0uMi01MC43LS4zLTEuMi0uMS0yLjQtLjQtMy42LS43LTIuNS0uNiAxLjUtMS4yLS40LTUuNi0xLjQtMy40LTIuOC02LjgtNC4xLTEwLjItLjEtLjQtLjQtLjgtLjctMS4xcy0uOC0uNC0xLjMtLjRjLTQuOS0uMi05LjctLjItMTQuNiAuMS0uMyAwLS42IC4yLS45IC4zcy0uNSAuNC0uNyAuN2MtMS42IDMuNi0zLjEgNy4zLTQuNSAxMS0xLjMgMy4yIDcuOSAxLjMgMTIuMiAyLjIgMyAuNiA0LjUgMy43IC43IDMuN2wtMjYuNCAwYy0yLjkgMC0zLjEtMy4yLS43LTMuMiAxLjIgLjEgMi40LS4yIDMuNS0uOXMxLjktMS41IDIuNC0yLjZjMS41LTMgMi44LTYgNC4xLTkuMSAxOC4yLTQyLjEgMTcuMS00MC4yIDE4LjQtNDEuNiAuMi0uMiAuNC0uNCAuNy0uNnMuNi0uMiAuOC0uMiAuNiAuMSAuOCAuMiAuNSAuMyAuNyAuNmMyLjkgMy4zIDE4LjQgNDQuNyAyMy42IDUxLjkgMiAyLjcgNS43IDIgNi40IDIgMy42IC4xIDQtMS4xIDQuMS00LjMgLjEtMS45IC4xIDEuMiAuMS00MS4yIDAtNC41LTIuNC0zLjctNS42LTQuMy0uMyAwLTIuNi0uNi0uMS0zLjEgLjItLjItLjktLjIgMjEuNy0uMiAyLjMgMCA1LjMgMi44LTEuMiAzLjQtLjQgMC0uNyAwLTEuMSAuMnMtLjYgLjMtLjkgLjYtLjQgLjYtLjYgLjktLjIgLjctLjEgMS4xYy0uMSAxLjYtLjIgMzguOSAuMyA0MS4yIC4yIC43IC42IDEuNCAxLjIgMS44czEuMyAuNyAyLjEgLjZjMTMuMyAuNCAxNC45IC40IDE2LTMuNCAxLjctNS44IDQuMS0yLjUgMy43LS4ybDAgLjF6TTMxOC42IDI4My42Yy00LjIgMC00LjQtMy40LS42LTMuNCAzNS45LS4yIDI4LjEgLjQgMzcuMi0uNiAxLjctLjIgMi40IC4yIDIuMyAxLjktLjMgMy40LS42IDYuOC0xIDEwLjItLjIgMi4yLTMuMiAyLjYtMy40LS4yLS40LTUuMy0yLjItNC41LTE1LjYtNS4xLTEuNi0uMS0xLjYgMC0xLjYgMS41bDAgMTYuMWMwIDEuNyAwIDEuNiAxLjYgMS41IDMuMS0uMiAxMC4zIC4zIDE1LjctMS41IC41LS4yIDMuMy0xLjggMy4xIDEuOCAwIC4yLS44IDEwLjQtMS4yIDExLjQtLjUgMS4zLTEuOSAxLjUtMi42IC4zLTEuMi0yIDAtNS4xLTMuNy01LjMtMTUuNC0uOS0xMi45LTIuNS0xMi45IDYgMCAxMi4zLS44IDE2LjEgMy45IDE2LjIgMTYuNiAuNSAxNC40IDAgMTYuNC01LjcgLjgtMi40IDMuNS0xLjggMy4yIC42LS40IDMuMi0uOCA2LjQtMS4yIDkuNiAwIC40LS4yIDIuNC00LjcgMi40LTM3LjItLjEtMzQuNS0uMi0zNS4yLS4zLTIuNy0uNS0yLjItMyAuMi0zLjQgMS4xLS4yIDQgLjUgNC4yLTIuNiAyLjQtNTYuMi0uMS01MS4zLTMuOS01MS4zbDAgMHptLS40LTEwOS41YzIuNSAuNiAzLjEgMS44IDMgNC42LS4zIDUuMy0uMyA5LS42IDkuNy0uNyAyLjItMy4xIDIuMS0zLjMtLjMtLjQtNC44LTMtNy44LTcuNi05LjEtMjYuMy03LjctMzIuOCAxNS41LTI3LjIgMzAuMiA1LjkgMTUuNCAyMiAxNS45IDI4LjkgMTMuOCA1LjktMS45IDUuOS02LjUgNi45LTcuNiAxLjItMS4zIDIuMi0xLjggMy4xIDEuMSAwIC4xIC42IDExLjktNiAxMi43LTEuNiAuMi0xOS40IDMuNy0zMi43LTMuNC0yMS0xMS4yLTE2LjctMzUuNS02LjktNDUuMyAxNC0xNC4xIDM5LjktNy4xIDQyLjMtNi41bDAgMHpNMjg5LjggMjgwLjFjMy4zIDAgMy43IDMgLjIgMy40LTIuNiAuMy01LS40LTUgNS41IDAgMi0uMiAyOSAuNCA0MS40IC4xIDIuMyAxLjIgMy41IDMuNCAzLjcgMjIgMS4yIDE1LTEuNyAxOC44LTYuMyAxLjgtMi4yIDIuOCAuOCAyLjggMS4xIC4zIDEzLjYtNCAxMi40LTUuMiAxMi40bC0zOC4yLS4yYy0xLjktLjItMi4xLTMtLjQtMy40IDItLjUgNC45IC40IDUuMS0yLjggMS0xNS45IC42LTQ0LjYgLjMtNDcuOC0uMy0zLjgtMi44LTMuMy01LjctMy43LTIuNS0uNC0yLTMuMiAuMy0zLjIgMS40IDAgMTggMCAyMy4xIDB6bS0zMS42LTU3LjhjLjEgNC4xIDIuOSAzLjUgNiAzLjYgMi42IC4xIDIuNSAzLjQtLjEgMy40LTYuNSAwLTEzLjcgMC0yMS42LS4xLTMuOCAwLTMuNC0zLjQgMC0zLjQgNC41IDAgMy4yIDEuNiAzLjQtNDUuNSAwLTUuMS0zLjMtMy41LTQuNy00LjItMi42LTEuMi0xLjQtMy4xIC40LTMuMiAxLjMgMCAyMC4yLS40IDIxLjIgLjJzMS45IDEuNi0uNCAyLjljLTEgLjUtMy45LS4zLTQuMiAyLjUgMCAuMi0uOCAxLjYtLjEgNDMuOGwwIDB6TTIyMS4zIDQ5Ni42Yy41IC4zIDEgLjUgMS42IC41czEuMS0uMiAxLjYtLjVjMTctOS44IDE4Mi0xMDMuNiAxOTcuNC0xMTIuNS0uMS0uNCAxMS4zLS4yLTE4MS41LS4zLTEuMiAwLTEuNiAuNC0xLjUgMS42IDAgLjEgMS4zIDQ0LjUgMS4yIDUwLjQtLjEgMi42LS42IDUuMi0xLjQgNy43LS42IDEuOCAuNC0uNS0xMy41IDMyLjItLjcgMS43LTEgMi4yLTItLjEtNC4yLTEwLjMtOC4zLTIwLjctMTIuNi0zMS0xLjUtMy40LTIuMi03LjEtMi0xMC44IC4yLTIuNSAuOC0xNi4xIDEuNS00OCAwLTEuOSAwLTItMi0ybC0xODMgMGMyLjYgMS42IDE3OC4zIDEwMi42IDE5NiAxMTIuOGwuMSAwek0xMzAuNCAzMDcuOWMwIDIuNCAuNCAyLjggMi44IDMgMTEuNSAxLjIgMjEgMy43IDI1LjYtNy4zIDYtMTQuNSAyLjctMzQuNC0xMi41LTM4LjgtMi0uNi0xNi0yLjgtMTUuOSAxLjUgMCA4IDAgMTEuNiAwIDQxLjZ6bTEwNS44LTE1YzAgMi4xIDEuMSAzOC43IDEuMSAzOS4xIC4zIDkuOS0yNS42IDUuOC0yNS4yLTIuNiAuMS0yIDEuNC0zNy40IDEuMS0zOS40LTE0LjEgNy40LTE0LjQgNDAuMiA2LjQgNDguOCA0IDEuNyA4LjQgMS45IDEyLjUgLjZzNy42LTQgOS45LTcuN2M0LjktNy44IDYuOC0yOS41LTUuNC0zOS0uMSAuMS0uMiAuMS0uNCAuMWwwIDB6bS0xMi4zLTE5OGMtOS44IDAtOS43IDE0LjgtLjEgMTQuOXMxMC4xLTE0LjkgLjEtMTQuOWwwIDB6TTE0My43IDE5OC42YzAgMS44IC40IDIuNCAyLjIgMi42IDEzLjYgMS40IDEyLjUtMTEgMTIuMi0xMy40LTEuNy0xMS4yLTE0LjQtMTAuMi0xNC40LTcuOCAwIDQuNSAwIDEzLjcgMCAxOC42ek0zNTYgMjA1bC02LjEtMTUuOGMtMi4yIDUuNS00LjIgMTAuNi02LjIgMTUuOGwxMi4zIDB6Il19LE1sdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzdGVhbS1zeW1ib2wiLGljb246WzQ0OCw1MTIsW10sImYzZjYiLCJNMjczLjUgMTc3LjVhNjEgNjEgMCAxIDEgMTIyIDAgNjEgNjEgMCAxIDEgLTEyMiAwem0xNzQuNSAuMmMwIDYzLTUxIDExMy44LTExMy43IDExMy44TDIyNSAzNzEuM2MtNCA0My00MC41IDc2LjgtODQuNSA3Ni44LTQwLjUgMC03NC43LTI4LjgtODMtNjdMMCAzNTggMCAyNTAuNyA5Ny4yIDI5MGMxNS4xLTkuMiAzMi4yLTEzLjMgNTItMTEuNWw3MS0xMDEuN0MyMjAuNyAxMTQuNSAyNzEuNyA2NCAzMzQuMiA2NCAzOTcgNjQgNDQ4IDExNSA0NDggMTc3Ljd6TTIwMyAzNjNjMC0zNC43LTI3LjgtNjIuNS02Mi41LTYyLjUtNC41IDAtOSAuNS0xMy41IDEuNWwyNiAxMC41YzI1LjUgMTAuMiAzOCAzOSAyNy43IDY0LjUtMTAuMiAyNS41LTM5LjIgMzgtNjQuNyAyNy41LTEwLjItNC0yMC41LTguMy0zMC43LTEyLjIgMTAuNSAxOS43IDMxLjIgMzMuMiA1NS4yIDMzLjIgMzQuNyAwIDYyLjUtMjcuOCA2Mi41LTYyLjV6TTQxMC41IDE3Ny43YTc2LjQgNzYuNCAwIDEgMCAtMTUyLjggMCA3Ni40IDc2LjQgMCAxIDAgMTUyLjggMHoiXX0semx0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1haWxjaGltcCIsaWNvbjpbNDQ4LDUxMixbXSwiZjU5ZSIsIk0zMzEgMjQzLjVjMy4xLS40IDYuMi0uNCA5LjMgMCAxLjctMy44IDItMTAuNCAuNS0xNy42LTIuMi0xMC43LTUuMy0xNy4xLTExLjUtMTYuMXMtNi41IDguNy00LjIgMTkuNGMxLjMgNiAzLjUgMTEuMSA2IDE0LjNsMCAwek0yNzcuNCAyNTJjNC41IDIgNy4yIDMuMyA4LjMgMi4xIDEuOS0xLjktMy41LTkuNC0xMi4xLTEzLjEtNS0yLjEtMTAuNC0yLjgtMTUuOC0yLjJzLTEwLjUgMi43LTE0LjggNS44Yy0zIDIuMi01LjggNS4yLTUuNCA3LjEgLjkgMy43IDEwLTIuNyAyMi42LTMuNSA3LS40IDEyLjggMS44IDE3LjMgMy43bDAgMHptLTkgNS4xYy05LjEgMS40LTE1IDYuNS0xMy41IDEwLjEgLjkgLjMgMS4yIC44IDUuMi0uOCA2LTIuMyAxMi40LTIuOSAxOC43LTEuOSAyLjkgLjMgNC4zIC41IDQuOS0uNSAxLjUtMi4yLTUuNy04LTE1LjQtNi45bDAgMHptNTQuMiAxNy4xYzMuNC02LjktMTAuOS0xMy45LTE0LjMtN3MxMC45IDEzLjkgMTQuMyA3bDAgMHptMTUuNy0yMC41Yy03LjctLjEtOCAxNS44LS4zIDE1LjlzOC0xNS44IC4zLTE2bDAgMHpNMTE5LjUgMzMyLjdjLTEuMyAuMy02IDEuNS04LjUtMi4zLTUuMi04IDExLjEtMjAuNCAzLTM1LjgtOS4xLTE3LjUtMjcuOC0xMy41LTM1LTUuNS04LjcgOS42LTguNyAyMy41LTUgMjQuMSA0LjMgLjYgNC4xLTYuNSA3LjQtMTEuNiAuOS0xLjQgMi4xLTIuNiAzLjUtMy42czMtMS42IDQuNi0yIDMuNC0uNCA1IDAgMy4zIDEgNC43IDEuOWMxMS42IDcuNiAxLjQgMTcuOCAyLjMgMjguNiAxLjQgMTYuNyAxOC40IDE2LjQgMjEuNiA5IC4yLS40IC4zLS44IC4zLTEuMnMtLjItLjgtLjUtMS4xYzAgLjkgLjctMS4zLTMuNC0uNGwwIDB6bTI5OS43LTE3LjFjLTMuMy0xMS43LTIuNi05LjItNi44LTIwLjUgMi40LTMuNyAxNS4zLTI0LTMuMS00My4zLTEwLjQtMTAuOS0zMy45LTE2LjUtNDEuMS0xOC41LTEuNS0xMS40IDQuNi01OC43LTIxLjUtODMgMjAuOC0yMS42IDMzLjgtNDUuMyAzMy43LTY1LjctLjEtMzkuMi00OC4yLTUxLTEwNy40LTI2LjVsLTEyLjUgNS4zYy0uMSAwLTIyLjctMjIuMy0yMy4xLTIyLjYtNjcuNS01OC45LTI3OC44IDE3NS45LTIxMS4zIDIzMi45bDE0LjggMTIuNWMtNCAxMC43LTUuNCAyMi4yLTQuMSAzMy41IDMuNCAzMy40IDM2IDYwLjQgNjcuNSA2MC40IDU3LjcgMTMzLjEgMjY3LjkgMTMzLjMgMzIyLjMgMyAxLjctNC41IDkuMS0yNC42IDkuMS00Mi40cy0xMC4xLTI1LjMtMTYuNS0yNS4zbDAgMHptLTMxNiA0OC4yYy0yMi44LS42LTQ3LjUtMjEuMS00OS45LTQ1LjUtNi4yLTYxLjMgNzQuMy03NS4zIDg0LTEyLjMgNC41IDI5LjYtNC43IDU4LjUtMzQuMSA1Ny44bDAgMHpNODQuNyAyNDkuNmMtMTUuMiAzLTI4LjUgMTEuNS0zNi43IDIzLjUtNC45LTQuMS0xNC0xMi0xNS42LTE1LTEzLTI0LjggMTQuMi03MyAzMy4zLTEwMC4yIDQ3LjEtNjcuMiAxMjAuOS0xMTguMSAxNTUtMTA4LjkgNS41IDEuNiAyMy45IDIyLjkgMjMuOSAyMi45cy0zNC4xIDE4LjktNjUuOCA0NS4zQzEzNi4yIDE1MCAxMDQgMTk3LjcgODQuNyAyNDkuNnpNMzIzLjYgMzUwLjdzLTM1LjcgNS4zLTY5LjUtNy4xYzYuMi0yMC4yIDI3IDYuMSA5Ni40LTEzLjggMTUuMy00LjQgMzUuNC0xMyA1MS0yNS40IDMuNCA3LjggNS44IDE1LjkgNy4xIDI0LjMgMy43LS43IDE0LjItLjUgMTEuNCAxOC4xLTMuMyAxOS45LTExLjcgMzYtMjUuOSA1MC44LTguOSA5LjYtMTkuNCAxNy41LTMxLjIgMjMuMy02LjUgMy40LTEzLjMgNi4zLTIwLjMgOC42LTUzLjUgMTcuNS0xMDguMy0xLjctMTI2LTQzLTEuNC0zLjEtMi42LTYuNC0zLjYtOS43LTcuNS0yNy4yLTEuMS01OS44IDE4LjgtODAuNCAxLjItMS4zIDIuNS0yLjkgMi41LTQuOC0uMi0xLjctLjgtMy4zLTEuOS00LjUtNy0xMC4xLTMxLjItMjcuNC0yNi4zLTYwLjggMy41LTI0IDI0LjUtNDAuOSA0NC4xLTM5LjlsNSAuM2M4LjUgLjUgMTUuOSAxLjYgMjIuOSAxLjkgMTEuNyAuNSAyMi4yLTEuMiAzNC42LTExLjYgNC4yLTMuNSA3LjYtNi41IDEzLjMtNy41IDIuMy0uNiA0LjctLjcgNy0uM3M0LjYgMS4yIDYuNiAyLjVjMTAgNi42IDExLjQgMjIuNyAxMS45IDM0LjUgLjMgNi43IDEuMSAyMyAxLjQgMjcuNiAuNiAxMC43IDMuNCAxMi4yIDkuMSAxNCAzLjIgMSA2LjIgMS44IDEwLjUgMy4xIDEzLjIgMy43IDIxIDcuNSAyNiAxMi4zIDIuNSAyLjUgNC4yIDUuOCA0LjcgOS4zIDEuNiAxMS40LTguOCAyNS40LTM2LjMgMzguMi00Ni43IDIxLjctOTMuNyAxNC40LTEwMC41IDEzLjctMjAuMi0yLjctMzEuNiAyMy4zLTE5LjUgNDEuMSAyMi42IDMzLjQgMTIyLjQgMjAgMTUxLjQtMjEuNCAuNy0xIC4xLTEuNi0uNy0xLTQxLjggMjguNi05Ny4xIDM4LjItMTI4LjUgMjYtNC44LTEuOC0xNC43LTYuNC0xNS45LTE2LjcgNDMuNiAxMy41IDcxIC43IDcxIC43czItMi44LS42LTIuNXpNMTcxLjcgMTU3LjVjMTYuNy0xOS40IDM3LjQtMzYuMiA1NS44LTQ1LjYgLjEtLjEgLjMtLjEgLjUtLjFzLjMgLjEgLjQgLjIgLjIgLjMgLjIgLjQgMCAuMy0uMSAuNWMtMS41IDIuNy00LjMgOC4zLTUuMiAxMi43IDAgLjEgMCAuMyAwIC40cy4yIC4zIC4zIC40IC4zIC4xIC40IC4xIC4zIDAgLjQtLjFjMTEuNS03LjggMzEuNS0xNi4yIDQ5LTE3LjMgLjIgMCAuMyAwIC41IC4xcy4yIC4yIC4zIC40IC4xIC4zIDAgLjUtLjEgLjMtLjMgLjRjLTIuOSAyLjItNS41IDQuOC03LjcgNy43LS4xIC4xLS4xIC4yLS4xIC40czAgLjMgLjEgLjQgLjIgLjIgLjMgLjMgLjIgLjEgLjQgLjFjMTIuMyAuMSAyOS43IDQuNCA0MSAxMC43IC44IC40IC4yIDEuOS0uNiAxLjctNjkuNS0xNS45LTEyMy4xIDE4LjUtMTM0LjUgMjYuOC0uMiAuMS0uMyAuMS0uNSAuMXMtLjMtLjEtLjUtLjItLjItLjMtLjItLjUgLjEtLjQgLjItLjVsLS4xIDB6Il19LGtsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsdW1vbiIsaWNvbjpbNjQwLDUxMixbXSwiZTdlMiIsIk00NTIuNSAyMjMuNWM5LjggMCAxNi41IDYuMyAxNi41IDE2LjZsMCAzMS44YzAgMTAuMy02LjYgMTYuNi0xNi42IDE2LjZsLTU2LjIgMGMtOS44IDAtMTYuNS02LjMtMTYuNS0xNi42bDAtMzEuOGMwLTEwLjMgNi43LTE2LjYgMTYuNS0xNi42bDU2LjMgMHptLTI1LjcgMTMuMWMtMS41LTIuNi0zLjItMi42LTQuNiAwbC0xMC43IDE3LjZjLTEuNyAyLjQtMi42IDUuMS0yLjYgOC4yIDAgNy45IDYuOSAxNC42IDE1LjYgMTQuNiA4LjUgMCAxNS42LTYuNyAxNS42LTE0LjYgMC0zLTEtNS44LTIuNy04LjJsLTEwLjctMTcuNnpNODUuOCAyMjMuOGMxIDAgMS41IC42IDEuNSAxLjVsMCA1MC4zIDY0LjYgMGMxIDAgMS42IC42IDEuNiAxLjVsMCA5LjdjMCAuOS0uNiAxLjUtMS42IDEuNWwtNzguNCAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTIuMyAwem04OC4zIDBjMSAwIDEuNSAuNiAxLjUgMS41bDAgNDVjMCA0IDIgNS4yIDUuNyA1LjJsNDYuOSAwYzMuOCAwIDUuNy0xLjMgNS43LTUuMmwwLTQ1YzAtLjkgLjUtMS41IDEuNS0xLjVsMTIuMyAwYzEgMCAxLjYgLjYgMS42IDEuNWwwIDQ2YzAgMTAuNS01LjMgMTYuOC0xNy42IDE2LjhsLTU0IDBjLTEyLjMgMC0xNy42LTYuMy0xNy42LTE2LjhsMC00NmMwLS45IC42LTEuNSAxLjYtMS41bDEyLjMgMHptMTA4LjIgMGMxIDAgMS42IC41IDIuMiAxLjRsMzAuNSA0Ni40IDEuNCAwIDMwLjUtNDYuNGMuNi0uOSAxLjItMS40IDIuMi0xLjRsMTggMGMxIDAgMS41IC42IDEuNSAxLjVsMCA2MS40YzAgLjktLjUgMS41LTEuNSAxLjVsLTEyLjMgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNDMuOC0xLjEgMC0yOC43IDQzLjhjLS42IC45LTEuMyAxLjUtMi40IDEuNWwtMTAuNyAwYy0xIDAtMS43LS42LTIuMy0xLjVsLTI4LjctNDMuOC0xLjEgMCAwIDQzLjhjMCAuOS0uNSAxLjUtMS41IDEuNWwtMTIuMyAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTcuOSAwem0yMTQuNCAwYy45IDAgMS4zIC40IDIuMiAxLjFsNTIuNyA0Ni4zIDEuMyAwIDAtNDZjMC0uOSAuNi0xLjUgMS42LTEuNWwxMi4zIDBjMSAwIDEuNiAuNiAxLjYgMS41bDAgNjEuNGMwIC45LS42IDEuNS0xLjYgMS41bC0xNC40IDBjLTEgMC0xLjQtLjQtMi4zLTEuMWwtNTIuNi00Ni4zLTEuNCAwIDAgNDZjMCAuOS0uNSAxLjUtMS41IDEuNWwtMTIuMyAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTQuNCAwek0zMjAgMTE0LjFjODcuOSAwIDE2Ny43IDE1LjcgMjI1LjUgNDFsMi43IDEuMkM1ODcuMSAxNzMuOCA2NDAgMjA2LjUgNjQwIDI1NnMtNTIuOSA4Mi4yLTkxLjggOTkuNmwtMi43IDEuMmMtNTcuOCAyNS40LTEzNy42IDQxLTIyNS41IDQxLTc2LjIgMC0xNTUuMS0xMC41LTIyNS41LTQxLTM5LjYtMTcuNC05NC41LTUwLjMtOTQuNS0xMDAuOHM1NC45LTgzLjUgOTQuNS0xMDAuOGM3MC40LTMwLjUgMTQ5LjMtNDEgMjI1LjUtNDF6bS04OC45IDIyOWMyMC4zIDI5IDUyLjggNDkuNiA4OC45IDQ5LjYgMzYuMiAwIDY4LjctMjAuNiA4OS00OS43bC0xNzcuOSAuMXptLTk2LjEgMGM0My4zIDI5LjcgOTYuNyA0My41IDE0OC40IDQ4LTI0LjItOS4xLTQ0LjQtMjYuNy01OC42LTQ4LjFsLTg5LjkgMHptMjgwLjMtLjFjLTE0LjIgMjEuNC0zNC40IDM5LjEtNTguNiA0OC4xIDUxLjgtNC41IDEwNS4zLTE4LjMgMTQ4LjYtNDguMmwtOTAgMHptLTMzNy40IC4xYzQ0LjEgMjMuMSA5My43IDM1LjQgMTQyLjcgNDIuNi0zMy40LTguNi02Ni41LTIxLjktOTQuNC00Mi42bC00OC4zIDB6bTQzNi4yLS4yYy0yNy45IDIwLjgtNjEuMSAzNC4yLTk0LjYgNDIuOCA0Ny4zLTYuOSA4OS42LTE4LjUgMTIzLjktMzMuNmwxLjctLjhjNi4xLTIuNyAxMS45LTUuNSAxNy40LTguNGwtNDguNSAwek01MjAgMTczLjZjMTAuNyA4LjcgMTkuOCAxOC4xIDI3IDI4LjIgLjQgLjYgLjUgMS4zIC4xIDJzLTEgMS0xLjcgMWwtMS42IDBjLS42IDAtMS4yLS4zLTEuNS0uOC03LjktMTAuOS0xOC4yLTIxLjEtMzAuNi0zMC40bC05My41IDBjNS40IDguOCA5LjkgMTguNSAxMy40IDI4LjYgLjIgLjYgLjEgMS4yLS4yIDEuN3MtLjkgLjgtMS42IC44bC0xLjQgMGMtLjggMC0xLjUtLjUtMS44LTEuMy0zLjgtMTAuNy04LjctMjAuOC0xNC41LTI5LjlsLTE4NC4zIC4xYy01LjggOS4xLTEwLjcgMTkuMS0xNC40IDI5LjgtLjMgLjgtMSAxLjMtMS44IDEuM2wtMS40IDBjLS42IDAtMS4yLS4zLTEuNi0uOHMtLjUtMS4xLS4yLTEuN2MzLjUtMTAuMiA4LTE5LjcgMTMuNC0yOC42bC05My42IDBjLTEyLjMgOS4zLTIyLjYgMTkuNC0zMC40IDMwLjMtLjQgLjUtLjkgLjgtMS41IC44bC0xLjYgMGMtLjcgMC0xLjQtLjQtMS43LTFzLS4zLTEuNCAuMS0yYzcuNi0xMC41IDE2LjctMTkuOSAyNi44LTI4bC01MSAwYy0yOC45IDE2LjYtNjIgNDMuMy02My41IDc5LjdsNDQuNyAwYy41IDAgMSAuMiAxLjMgLjZzLjYgLjggLjYgMS4zbDAgMS4zYzAgMS4xLS45IDEuOS0xLjkgMS45bC00NC43IDBDNi44IDI5NSA0MCAzMjEuNyA2OSAzMzguM2w1MC45IDBjLTEwLjMtOC40LTE5LjEtMTcuNC0yNi4xLTI3bC0uOC0xLjFjLS40LS42LS41LTEuMy0uMS0yczEtMSAxLjctMWwxLjYgMCAuMiAwYy41IC4xIDEgLjMgMS4zIC44IDcuOSAxMC45IDE4LjEgMjEgMzAuNSAzMC4zbDkzLjYgMGMtNS4zLTguOC05LjgtMTguNC0xMy40LTI4LjUtLjItLjYtLjEtMS4yIC4yLTEuN3MuOS0uOCAxLjYtLjhsMS40IDAgLjIgMGMuNyAuMSAxLjQgLjYgMS43IDEuMyAzLjggMTAuNyA4LjYgMjAuNyAxNC40IDI5LjhsMTg0LjUtLjFjNS44LTkuMSAxMC42LTE5LjEgMTQuNC0yOS43bC4xLS4xYy4zLS43IDEtMS4xIDEuNy0xLjFsMS40IDBjLjYgMCAxLjIgLjMgMS42IC44cy41IDEuMiAuMiAxLjdjLTMuNSAxMC4xLTggMTkuNy0xMy4zIDI4LjVsOTMuNyAwYzEyLjMtOS4zIDIyLjUtMTkuNCAzMC4zLTMwLjJsLjEtLjJjLjQtLjQgLjktLjYgMS40LS42bDEuNiAwYy43IDAgMS40IC40IDEuNyAxcy4zIDEuNC0uMSAyYy03LjEgMTAtMTYuMSAxOS4zLTI2LjcgMjcuOWw1MS4xIDBjMjguOC0xNi42IDYxLjgtNDMuMyA2My40LTc5LjZsLTQ0LjcgMGMtMSAwLTEuOS0uOS0xLjktMS45bDAtMS4zYzAtMS4xIC45LTEuOSAxLjktMS45bDQ0LjcgMGMtMS42LTM2LjUtMzQuOS02My4zLTYzLjktNzkuOWwtNTAuOSAwek0yMjAuNSAxMjYuMmMtNDkuMSA3LjEtOTguNyAxOS41LTE0MyA0Mi43bDQ4LjQgMGMyNy45LTIwLjggNjEtMzQuMSA5NC41LTQyLjd6bTYyLjgtNS40Yy01MS44IDQuNS0xMDUuMiAxOC4zLTE0OC42IDQ4LjFsOTAgMGMxNC4yLTIxLjQgMzQuNC0zOSA1OC42LTQ4LjF6bTM2LjYtMS42Yy0zNi4yIDAtNjguNyAyMC42LTg5IDQ5LjdsMTc3LjktLjFjLTIwLjMtMjkuMS01Mi43LTQ5LjYtODguOS00OS42em0zNi42IDEuNmMyNC4yIDkuMSA0NC40IDI2LjYgNTguNSA0OGw4OS44IDBjLTQzLjMtMjkuNy05Ni42LTQzLjUtMTQ4LjMtNDh6bTYyLjggNS40YzMzLjQgOC41IDY2LjQgMjEuOSA5NC4zIDQyLjVsNDguMyAwYy00NC4xLTIzLjEtOTMuNi0zNS40LTE0Mi42LTQyLjV6Il19LFNsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJudXRyaXRpb25peCIsaWNvbjpbNDQ4LDUxMixbXSwiZjNkNiIsIk0xMTIgOC4xUzI0NS40LS4xIDIzMyAxMTIuNWMwIDAgMTkuMS03NC45IDEwMy00MC42IDAgMC0xNy43IDc0LTg4IDU2IDAgMCAxNC42LTU0LjYgNjYuMS01Ni42IDAgMC0zOS45LTEwLjMtODIuMSA0OC44IDAgMC0xOS44LTk0LjUtOTMuNi05OS43IDAgMCA3NS4yIDE5LjQgNzcuNiAxMDcuNSAwIC4xLTEwNi40IDctMTA0LTExOS44ek00MjQgMzIzLjdjMCA0OC41LTkuNyA5NS4zLTMyIDEzMi4zLTQyLjIgMzAuOS0xMDUgNDgtMTY4IDQ4LTYyLjkgMC0xMjUuOC0xNy4xLTE2OC00OC0yMi4zLTM3LTMyLTgzLjgtMzItMTMyLjMgMC00OC40IDE3LjctOTQuNyA0MC0xMzEuNyA0Mi4yLTMwLjkgOTcuMS00OC42IDE2MC00OC42IDYzIDAgMTE3LjggMTcuNiAxNjAgNDguNiAyMi4zIDM3IDQwIDgzLjMgNDAgMTMxLjd6TTE0NCA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0yMTYgNDI4YTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHpNMjg4IDQyOGEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTM2MCA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0zODQgMjU2Yy00LjgtMjIuMy03LjQtMzYuOS0xNi01Ni0zOC44LTE5LjktOTAuNS0zMi0xNDQtMzJTMTE4LjggMTgwLjEgODAgMjAwYy04LjggMTkuNS0xMS4yIDMzLjktMTYgNTYgNDIuMi03LjkgOTguNy0xNC44IDE2MC0xNC44czExNy44IDYuOSAxNjAgMTQuOHoiXX0sQ2x0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNyZWF0aXZlLWNvbW1vbnMtc2FtcGxpbmctcGx1cyIsaWNvbjpbNTEyLDUxMixbXSwiZjRmMSIsIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTEwNyAyMDUuNmMtNC43IDAtOSAyLjgtMTAuNyA3LjJsLTQgOS41LTExLTkyLjhjLTEuNy0xMy45LTIyLTEzLjQtMjMuMSAuNGwtNC4zIDUxLjQtNS4yLTY4LjhjLTEuMS0xNC4zLTIyLjEtMTQuMi0yMy4yIDBsLTMuNSA0NC45LTUuOS05NC4zYy0uOS0xNC41LTIyLjMtMTQuNC0yMy4yIDBsLTUuMSA4My43LTQuMy02Ni4zYy0uOS0xNC40LTIyLjItMTQuNC0yMy4yIDBsLTUuMyA4MC4yLTQuMS01N2MtMS4xLTE0LjMtMjItMTQuMy0yMy4yLS4ybC03LjcgODkuOC0xLjgtMTIuMmMtMS43LTExLjQtMTcuMS0xMy42LTIyLTMuM2wtMTMuMiAyNy43LTQzLjkgMCAwIDIzLjIgNTEuMyAwYzQuNCAwIDguNC0yLjUgMTAuNC02LjRsMTAuNyA3My4xYzIgMTMuNSAyMS45IDEzIDIzLjEtLjdsMy44LTQzLjYgNS43IDc4LjNjMS4xIDE0LjQgMjIuMyAxNC4yIDIzLjItLjFsNC42LTcwLjQgNC44IDczLjNjLjkgMTQuNCAyMi4zIDE0LjQgMjMuMi0uMWw0LjktODAuNSA0LjUgNzEuOGMuOSAxNC4zIDIyLjEgMTQuNSAyMy4yIC4ybDQuNi01OC42IDQuOSA2NC40YzEuMSAxNC4zIDIyIDE0LjIgMjMuMSAuMWw2LjgtODMgMi43IDIyLjNjMS40IDExLjggMTcuNyAxNC4xIDIyLjMgMy4xbDE4LTQzLjQgNTAuNSAwIDAtMjMuMi01OC40IC4zem0tNzggNS4ybC0yMS45IDAgMCAyMS45YzAgNC4xLTMuMyA3LjUtNy41IDcuNS00LjEgMC03LjUtMy4zLTcuNS03LjVsMC0yMS45LTIxLjkgMGMtNC4xIDAtNy41LTMuMy03LjUtNy41IDAtNC4xIDMuNC03LjUgNy41LTcuNWwyMS45IDAgMC0yMS45YzAtNC4xIDMuNC03LjUgNy41LTcuNXM3LjUgMy4zIDcuNSA3LjVsMCAyMS45IDIxLjkgMGM0LjEgMCA3LjUgMy4zIDcuNSA3LjUgMCA0LjEtMy40IDcuNS03LjUgNy41eiJdfSxMbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicmVkaGF0IixpY29uOls1MTIsNTEyLFtdLCJmN2JjIiwiTTM0MS41IDI4NS42YzMzLjcgMCA4Mi4zLTYuOSA4Mi4zLTQ3IC4yLTYuNyAuOS0xLjgtMjAuOS05Ni4yLTQuNi0xOS4xLTguNy0yNy44LTQyLjMtNDQuNi0yNi4xLTEzLjMtODIuOS0zNS40LTk5LjctMzUuNC0xNS43IDAtMjAuMiAyMC4yLTM4LjkgMjAuMi0xOCAwLTMxLjMtMTUuMS00OC4xLTE1LjEtMTYuMSAwLTI2LjcgMTEtMzQuOCAzMy42LTI3LjUgNzcuNi0yNi4zIDc0LjMtMjYuMSA3OC4zIDAgMjQuOCA5Ny42IDEwNi4xIDIyOC41IDEwNi4xek00MjkgMjU0LjhjNC43IDIyIDQuNyAyNC4zIDQuNyAyNy4yIDAgMzcuNy00Mi4zIDU4LjYtOTggNTguNi0xMjUuNyAuMS0yMzUuOS03My42LTIzNS45LTEyMi4zIDAtNi44IDEuNC0xMy41IDQuMS0xOS43LTQ1LjIgMi4zLTEwMy44IDEwLjMtMTAzLjggNjIgMCA4NC43IDIwMC42IDE4OSAzNTkuNSAxODkgMTIxLjggMCAxNTIuNS01NS4xIDE1Mi41LTk4LjYgMC0zNC4yLTI5LjYtNzMtODIuOS05Ni4yeiJdfSxuMmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLXBpZWQtcGlwZXIiLGljb246WzQ0OCw1MTIsWyJwaWVkLXBpcGVyLXNxdWFyZSJdLCJlMDFlIiwiTTMyLjEgNDE5bC0zMiA2MC4yIC44LTMyOEMuOSA4NS4zIDU0LjEgMzIgMTIwLjEgMzJsMzI3LjIgMEMzNTQuMyA2MC45IDI1Ny40IDEyNi4yIDE5My40IDIwMC42IDEyMi44IDI4MiA4Mi43IDMzOCAzMi4xIDQxOXptNDE2LTM4N1MzMDUuMyA5OC44IDI2MS43IDE5OS4xYy0yMy4yIDUzLjYtMjguOSAxMTguMS03MSAxNTguNi0yOC45IDI3LjgtNjkuOCAzOC4yLTEwNS4zIDU2LjMtMjMuMiAxMi02Ni40IDQwLjUtODQuOSA2NmwzMjguNCAwYzY2IDAgMTE5LjMtNTMuMyAxMTkuMy0xMTkuMi0uMSAwLS4xLTMyOC44LS4xLTMyOC44eiJdfSxUbHQ9bjJlLF9sdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3aGF0c2FwcCIsaWNvbjpbNDQ4LDUxMixbXSwiZjIzMiIsIk0zODAuOSA5Ny4xYy00MS45LTQyLTk3LjctNjUuMS0xNTctNjUuMS0xMjIuNCAwLTIyMiA5OS42LTIyMiAyMjIgMCAzOS4xIDEwLjIgNzcuMyAyOS42IDExMUwwIDQ4MCAxMTcuNyA0NDkuMWMzMi40IDE3LjcgNjguOSAyNyAxMDYuMSAyN2wuMSAwYzEyMi4zIDAgMjI0LjEtOTkuNiAyMjQuMS0yMjIgMC01OS4zLTI1LjItMTE1LTY3LjEtMTU3em0tMTU3IDM0MS42Yy0zMy4yIDAtNjUuNy04LjktOTQtMjUuN2wtNi43LTQtNjkuOCAxOC4zIDE4LjYtNjguMS00LjQtN2MtMTguNS0yOS40LTI4LjItNjMuMy0yOC4yLTk4LjIgMC0xMDEuNyA4Mi44LTE4NC41IDE4NC42LTE4NC41IDQ5LjMgMCA5NS42IDE5LjIgMTMwLjQgNTQuMXM1Ni4yIDgxLjIgNTYuMSAxMzAuNWMwIDEwMS44LTg0LjkgMTg0LjYtMTg2LjYgMTg0LjZ6TTMyNS4xIDMwMC41Yy01LjUtMi44LTMyLjgtMTYuMi0zNy45LTE4LTUuMS0xLjktOC44LTIuOC0xMi41IDIuOHMtMTQuMyAxOC0xNy42IDIxLjhjLTMuMiAzLjctNi41IDQuMi0xMiAxLjQtMzIuNi0xNi4zLTU0LTI5LjEtNzUuNS02Ni01LjctOS44IDUuNy05LjEgMTYuMy0zMC4zIDEuOC0zLjcgLjktNi45LS41LTkuN3MtMTIuNS0zMC4xLTE3LjEtNDEuMmMtNC41LTEwLjgtOS4xLTkuMy0xMi41LTkuNS0zLjItLjItNi45LS4yLTEwLjYtLjJzLTkuNyAxLjQtMTQuOCA2LjljLTUuMSA1LjYtMTkuNCAxOS0xOS40IDQ2LjNzMTkuOSA1My43IDIyLjYgNTcuNGMyLjggMy43IDM5LjEgNTkuNyA5NC44IDgzLjggMzUuMiAxNS4yIDQ5IDE2LjUgNjYuNiAxMy45IDEwLjctMS42IDMyLjgtMTMuNCAzNy40LTI2LjRzNC42LTI0LjEgMy4yLTI2LjRjLTEuMy0yLjUtNS0zLjktMTAuNS02LjZ6Il19LEFsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJpbWRiIixpY29uOls0NDgsNTEyLFtdLCJmMmQ4IiwiTTg5LjUgMzIzLjZsLTM1LjYgMCAwLTEzNy40IDM1LjYgMCAwIDEzNy40em02Ni42LTczLjFsOS4xLTY0LjMgNDYuMyAwIDAgMTM3LjQtMzEgMCAwLTkyLjctMTMuNCA5Mi43LTIxLjMgMC0xMy05MC43LS4xIDkwLjctMzEuMiAwIDAtMTM3LjQgNDYuMSAwYy41IDguMyAyLjggMTguMSA0LjMgMjkuNGw0LjIgMzQuOXptNjcuNiA3My4xbDAtMTM3LjQgMjYuNiAwYzE3IDAgMjcgLjkgMzMgMi40IDYuMSAxLjcgMTAuNyA0LjIgMTMuOSA3LjkgMy4xIDMuMyA1LjEgNi42IDUuOCAxMiAuOSA0LjQgMS40IDEzLjEgMS40IDI2LjJsMCA0OC4yYzAgMTIuMy0uNyAyMC41LTEuOSAyNC43LTEuMSA0LjEtMy4xIDcuNC02IDkuNy0yLjggMi40LTYuNCA0LjEtMTAuNyA1LTQuMiAuOC0xMC42IDEuMy0xOS4xIDEuM2wtNDMgMHptMzUuNS0xMTMuOWwwIDg5LjRjNS4xIDAgOC4zLTEgOS40LTIuMyAxLjEtMiAxLjgtNy42IDEuOC0xNi43bDAtNTMuM2MwLTYuMi0uMS0xMC4yLS43LTEyLS4zLTEuOC0xLjItMy0yLjYtNC43LTEuNCAwLTQuMS0uNC03LjktLjR6bTU3LjMgMTEzLjlsMC0xMzcuNCAzNC4xIDAgMCA0My45YzIuOS0yLjQgNi4xLTQuOSA5LjUtNi42IDMuNi0xLjUgOC44LTIuNCAxMi44LTIuNCA0LjggMCA4LjkgLjggMTIuMyAyLjIgMy40IDEuNSA2IDMuNSA4IDYuMiAxLjcgMi42IDIuNyA1LjMgMy4xIDcuOCAuNCAyLjYtLjIgOC0uMiAxNi4ybDAgMzguNmMwIDguMiAuMiAxNC4zLS44IDE4LjQtMS4xIDQtMy44IDcuNi03LjggOS42LTQuMSAzLjktOC45IDUuMy0xNC42IDUuMy00IDAtOS4yLS45LTEyLjctMi41LTMuNS0xLjgtNi43LTQuNS05LjYtOGwtMi4xIDguNy0zMiAwem00NS4xLTIwLjdjLjctMS44IDEtNiAxLTEyLjVsMC0zNS40YzAtNS42LS4zLTkuNS0xLjEtMTEuMi0uNy0xLjktMy43LTIuNy01LjgtMi43LTIgMC0zLjQgLjgtNC4xIDIuMy0uNiAxLjUtMSA1LjQtMSAxMS42bDAgMzYuNGMwIDYuMSAuNCAxMCAxLjIgMTEuNiAuNiAxLjcgMi4xIDIuNSA0LjEgMi41IDIuMiAwIDQuMi0uOCA1LjctMi42ek00MTguNCAzMmMxNS43IDEuMiAyOC43IDE1LjIgMjguNyAzMS45bDAgMzg0LjJjMCAxNi40LTExLjkgMzAuNC0yOC4yIDMxLS4zIDAtLjUgLjktLjggLjlMMjkuOSA0ODBjLS4zIDAtLjYtLjktLjgtLjEtMTUuNy0xLjQtMjcuOS0xMy44LTI5LTMwLjJMMCA2MS44QzEuMSA0NS45IDEzLjggMzMuMSAzMC4zIDMxLjFsMzg3LjQgMGMuMiAwIC41IC45IC43IC45ek0zMC4zIDQxLjNDMTkgNDIgMTAgNTEgOS4zIDYyLjRsMCAzODcuM2MuNCA1LjQgMi43IDEwLjUgNi40IDE0LjMgMy44IDMuOSA4LjggNi4zIDE0LjIgNi43bDM4OC4yIDBjMTEuNS0xIDIwLjYtMTEuNiAyMC42LTIyLjZsMC0zODQuMmMwLTUuNy0yLjEtMTEuMy02LTE1LjVzLTkuMy02LjgtMTUtNy4ybC0zODcuNCAweiJdfSwkbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicHl0aG9uIixpY29uOls0NDgsNTEyLFtdLCJmM2UyIiwiTTQzOS44IDIwMC41Yy03LjctMzAuOS0yMi4zLTU0LjItNTMuNC01NC4ybC00MC4xIDAgMCA0Ny40YzAgMzYuOC0zMS4yIDY3LjgtNjYuOCA2Ny44bC0xMDYuOCAwYy0yOS4yIDAtNTMuNCAyNS01My40IDU0LjNsMCAxMDEuOGMwIDI5IDI1LjIgNDYgNTMuNCA1NC4zIDMzLjggOS45IDY2LjMgMTEuNyAxMDYuOCAwIDI2LjktNy44IDUzLjQtMjMuNSA1My40LTU0LjNsMC00MC43LTEwNi43IDAgMC0xMy42IDE2MC4yIDBjMzEuMSAwIDQyLjYtMjEuNyA1My40LTU0LjIgMTEuMi0zMy41IDEwLjctNjUuNyAwLTEwOC42ek0yODYuMiA0NDQuN2EyMC40IDIwLjQgMCAxIDEgMC00MC43IDIwLjQgMjAuNCAwIDEgMSAwIDQwLjd6TTE2Ny44IDI0OC4xbDEwNi44IDBjMjkuNyAwIDUzLjQtMjQuNSA1My40LTU0LjNsMC0xMDEuOWMwLTI5LTI0LjQtNTAuNy01My40LTU1LjYtMzUuOC01LjktNzQuNy01LjYtMTA2LjggLjEtNDUuMiA4LTUzLjQgMjQuNy01My40IDU1LjZsMCA0MC43IDEwNi45IDAgMCAxMy42LTE0NyAwYy0zMS4xIDAtNTguMyAxOC43LTY2LjggNTQuMi05LjggNDAuNy0xMC4yIDY2LjEgMCAxMDguNiA3LjYgMzEuNiAyNS43IDU0LjIgNTYuOCA1NC4ybDM2LjcgMCAwLTQ4LjhjMC0zNS4zIDMwLjUtNjYuNCA2Ni44LTY2LjR6TTE2MS4yIDY0LjdhMjAuNCAyMC40IDAgMSAxIDAgNDAuOCAyMC40IDIwLjQgMCAxIDEgMC00MC44eiJdfSxEbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY2FzaC1hcHAiLGljb246WzQ0OCw1MTIsW10sImU3ZDQiLCJNNDQwLjMgOTYuOWMtOS40LTI2LjUtMzAuMy00Ny40LTU2LjgtNTctMjQuMS03LjktNDYuMy03LjktOTEuNi03LjlMMTU2IDMyYy00NC44IDAtNjcuMiAwLTkxLjMgNy41LTI2LjUgOS42LTQ3LjQgMzAuNS01NyA1Ny03LjcgMjQuMy03LjcgNDYuNy03LjcgOTEuN0wwIDMyMy44YzAgNDUuMiAwIDY3LjQgNy41IDkxLjUgOS42IDI2LjUgMzAuNSA0Ny40IDU3IDU3IDI0LjMgNy43IDQ2LjcgNy43IDkxLjYgNy43bDEzNS43IDBjNDUgMCA2Ny40IDAgOTEuNi03LjcgMjYuNS05LjYgNDcuNC0zMC41IDU3LTU3IDcuNy0yNC4zIDcuNy00Ni43IDcuNy05MS41bDAtMTM1LjVjMC00NSAwLTY3LjQtNy43LTkxLjV6TTMyMy4xIDE4NS40bC0yNS44IDIxLjFjLTIuMyAxLjktNS41IDEuNS03LjMtLjktMTMuMi0xNi4yLTMzLjctMjUuNC01Ni4xLTI1LjQtMjUgMC00MC42IDEwLjktNDAuNiAyNi4yLS40IDEyLjggMTEuNyAxOS42IDQ5LjEgMjcuNyA0Ny4yIDEwIDY4LjcgMjkuNyA2OC43IDYyLjcgMCA0MS40LTMzLjcgNzEuOS04Ni40IDc1LjNsLTUuMSAyNC41Yy0uNCAyLjMtMi42IDQuMS01LjEgNC4xbC00MC42IDBjLTMuNCAwLTUuOC0zLjItNS4xLTYuNGw2LjQtMjcuM2MtMjYtNy41LTQ3LjItMjItNTkuMy0zOS43LTEuNS0yLjMtMS4xLTUuMyAxLjEtN2wyOC4yLTIyYzIuMy0xLjkgNS44LTEuMyA3LjUgMS4xIDE0LjkgMjAuOSAzOCAzMy4zIDY1LjcgMzMuMyAyNSAwIDQzLjgtMTIuMiA0My44LTI5LjcgMC0xMy40LTkuNC0xOS42LTQxLjItMjYuMi01NC4yLTExLjctNzUuOC0zMS44LTc1LjgtNjQuOSAwLTM4LjQgMzIuMi02Ny4yIDgwLjktNzFsNS4zLTI1LjRjLjQtMi4zIDIuNi00LjEgNS4xLTQuMWwzOS45IDBjMy4yIDAgNS44IDMgNS4xIDYuMmwtNi4yIDI4LjRjMjAuOSA2LjQgMzggMTcuOSA0OC43IDMyLjIgMS43IDIuMSAxLjMgNS4zLS45IDd6Il19LEVsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaW50ZXJlc3QtcCIsaWNvbjpbMzg0LDUxMixbXSwiZjIzMSIsIk0yMDQgNi41Yy0xMDIuNiAwLTIwNCA2OC40LTIwNCAxNzkuMSAwIDcwLjQgMzkuNiAxMTAuNCA2My42IDExMC40IDkuOSAwIDE1LjYtMjcuNiAxNS42LTM1LjQgMC05LjMtMjMuNy0yOS4xLTIzLjctNjcuOCAwLTgwLjQgNjEuMi0xMzcuNCAxNDAuNC0xMzcuNCA2OC4xIDAgMTE4LjUgMzguNyAxMTguNSAxMDkuOCAwIDUzLjEtMjEuMyAxNTIuNy05MC4zIDE1Mi43LTI0LjkgMC00Ni4yLTE4LTQ2LjItNDMuOCAwLTM3LjggMjYuNC03NC40IDI2LjQtMTEzLjQgMC02Ni4yLTkzLjktNTQuMi05My45IDI1LjggMCAxNi44IDIuMSAzNS40IDkuNiA1MC43LTEzLjggNTkuNC00MiAxNDcuOS00MiAyMDkuMSAwIDE4LjkgMi43IDM3LjUgNC41IDU2LjQgMy40IDMuOCAxLjcgMy40IDYuOSAxLjUgNTAuNC02OSA0OC42LTgyLjUgNzEuNC0xNzIuOCAxMi4zIDIzLjQgNDQuMSAzNiA2OS4zIDM2IDEwNi4yIDAgMTUzLjktMTAzLjUgMTUzLjktMTk2LjggMC05OS4zLTg1LjgtMTY0LjEtMTgwLTE2NC4xeiJdfSxObHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2htY3MiLGljb246WzQ0OCw1MTIsW10sImY0MGQiLCJNNDQ4IDE2MWwwLTIxLjMtMjguNS04LjgtMi4yLTEwLjQgMjAuMS0yMC43LTEwLjQtMTkuNC0yOSA3LjUtNy4yLTcuNSA3LjUtMjguMi0xOS4xLTExLjYtMjEuMyAyMS0xMC43LTMuMi03LTI2LjQtMjIuNiAwLTYuMiAyNi40LTEyLjEgMy4yLTE5LjctMjEtMTkuNCAxMSA4LjEgMjcuNy04LjEgOC40LTI4LjUtNy41LTExIDE5LjEgMjAuNyAyMS0yLjkgMTAuNC0yOC41IDcuOC0uMyAyMS43IDI4LjggNy41IDIuNCAxMi4xLTIwLjEgMTkuOSAxMC40IDE4LjUgMjkuNi03LjUgNy4yIDguNi04LjEgMjYuOSAxOS45IDExLjYgMTkuNC0yMC40IDExLjYgMi45IDYuNyAyOC41IDIyLjYgLjMgNi43LTI4LjggMTEuNi0zLjUgMjAuNyAyMS42IDIwLjQtMTIuMS04LjgtMjggNy44LTguMSAyOC44IDguOCAxMC4zLTIwLjEtMjAuOS0xOC44IDIuMi0xMi4xIDI5LjEtN3pNMzI4LjggOTIuNmE1Ni44IDU2LjggMCAxIDEgMCAxMTMuNiA1Ni44IDU2LjggMCAxIDEgMC0xMTMuNnptNzIuMyAxMzBsNDYuOSAxNC41IDAgMzkuOS01NS4xIDEzLjQtNC4xIDIyLjcgMzguOSAzNS4zLTE5LjIgMzcuOS01NC0xNi43LTE0LjYgMTUuMiAxNi43IDUyLjUtMzguMyAyMi43LTM4LjktNDAuNS0yMS43IDYuNi0xMi42IDU0LTQyLjQtLjUtMTIuNi01My42LTIxLjctNS42LTM2LjQgMzguNC0zNy40LTIxLjcgMTUuMi01MC41LTEzLjctMTYuMS01NS41IDE0LjEtMTkuNy0zNC44IDM3LjktMzcuNC00LjgtMjIuOC01NC0xNC4xIC41LTQwLjkgNTMuNS0xNC43IDUuNy0xOS43LTM4LjktMzkuNCAyMC43LTM1LjggNTMuNiAxNC4xIDE1LjItMTUuNy0xNS4yLTUyIDM2LjQtMjAuNyAzNi44IDM5LjQgMjIuNy02LjEgMTEuNi01MiA0Mi40IDAgMTEuNiA0NS45LTIyLjYtNS45LTYuMy0xLjctMy4zIDUuNy0xMSAxOS4xLTMuMyA1LjYgNC42IDQuNiAxNy4yIDE3LjQtLjMgMS0yMy44IDYuNS02LjIgMS43YzAgMy4yLS4xIDkuNi0uMyAxOS4zLTQ3LjUgMTAuNC04My4zIDUyLjgtODMuMyAxMDMuNSAwIDU4LjMgNDcuMyAxMDUuNyAxMDUuNyAxMDUuNyA1MC41IDAgOTIuNy0zNS40IDEwMy4yLTgyLjggOS45IC4xIDE2LjYgLjIgMjAuMSAuM2wxLjYtNi43IDUuNi0yNCAxLjktLjYgMTcuMSAxNy44IDQuNyA0LjkgNS44LTMuNCAyMC40LTEyLjEgNS44LTMuNS0yLTYuNS02LjgtMjEuMnoiXX0sUGx0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImpvZ2V0IixpY29uOls1MTIsNTEyLFtdLCJmM2I3IiwiTTM4Ni4xIDQ1QzM0NS42IDE5LjkgMzAwLjYgOCAyNTYuMiA4IDE3MyA4IDkxLjggNDkuOSA0NC45IDEyNS45LTI3IDI0Mi41IDkuMyAzOTUuMiAxMjUuOSA0NjcuMXMyNjkuMyAzNS42IDM0MS4yLTgwLjlDNTM5IDI2OS42IDUwMi43IDExNi44IDM4Ni4xIDQ1em01MS44IDMyMy4yYy00MC40IDY1LjUtMTEwLjQgMTAxLjUtMTgyIDEwMS41LTYuOCAwLTEzLjYtLjQtMjAuNC0xLTktMTMuNi0xOS45LTMzLjMtMjMuNy00Mi40LTUuNy0xMy43LTI3LjItNDUuNiAzMS4yLTY3LjEgNTEuNy0xOS4xIDE3Ni43LTE2LjUgMjA4LjgtMTcuNi00IDktOC42IDE3LjktMTMuOSAyNi42ek0yMzcuMSAyODEuOWMtNTUuNS0xLjQtODEuNy0yMC44LTU4LjUtNDguMnM1MS4xLTQwLjcgNjguOS01MS4yYzE3LjktMTAuNSAyNy4zLTMzLjctMjMuNi0yOS43LTEyOC42IDguNy0xNjcuMyA5OS4zLTE3OC4zIDE0MC4yLTguOC00OS43LS4xLTEwMi43IDI4LjUtMTQ5LjEgNjEuOS0xMDAuNSAxOTMuNS0xMzEuNyAyOTQtNjkuOCA3NC44IDQ2LjEgMTExLjIgMTMwLjkgOTkuMyAyMTIuNy0yNC45LS41LTE3OS4zLTMuNi0yMzAuMy00Ljl6bTE4My44LTU0LjhjLTIyLjctNi01NyAxMS4zLTg2LjcgMjcuMi0yOS43IDE1LjgtMzEuMSA4LjItMzEuMSA4LjJzNDAuMi0yOC4xIDUwLjctMzQuNSAzMS45LTE0IDEzLjQtMjQuNmMtMy4yLTEuOC02LjctMi43LTEwLjQtMi43LTE3LjggMC00MS41IDE4LjctNjcuNSAzNS42LTMxLjUgMjAuNS02NS4zIDMxLjMtNjUuMyAzMS4zTDM5My41IDI2NiA0NDAgMjQyLjZzMy42LTkuNS0xOS4xLTE1LjV6Il19LGwyZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUteW91dHViZSIsaWNvbjpbNDQ4LDUxMixbNjE3OTgsInlvdXR1YmUtc3F1YXJlIl0sImY0MzEiLCJNMjgyIDI1Ni4ybC05NS4yLTU0LjEgMCAxMDguMiA5NS4yLTU0LjF6TTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0em0xNC40IDEzNi4xYzcuNiAyOC42IDcuNiA4OC4yIDcuNiA4OC4yczAgNTkuNi03LjYgODguMWMtNC4yIDE1LjgtMTYuNSAyNy43LTMyLjIgMzEuOS0yOC4zIDcuNy0xNDIuMiA3LjctMTQyLjIgNy43cy0xMTMuOSAwLTE0Mi4yLTcuNmMtMTUuNy00LjItMjgtMTYuMS0zMi4yLTMxLjktNy42LTI4LjYtNy42LTg4LjItNy42LTg4LjJzMC01OS43IDcuNi04OC4yYzQuMi0xNS44IDE2LjUtMjguMiAzMi4yLTMyLjQgMjguMy03LjcgMTQyLjItNy43IDE0Mi4yLTcuN3MxMTMuOSAwIDE0Mi4yIDcuN2MxNS43IDQuMiAyOCAxNi42IDMyLjIgMzIuNHoiXX0sSWx0PWwyZSxGbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYXRsYXNzaWFuIixpY29uOls1MTIsNTEyLFtdLCJmNzdiIiwiTTE1Mi4yIDIzNi40Yy03LjctOC4yLTE5LjctNy43LTI0LjggMi44TDEuNiA0OTAuMmMtNSAxMCAyLjQgMjEuNyAxMy40IDIxLjdsMTc1IDBjNS44IC4xIDExLTMuMiAxMy40LTguNCAzNy45LTc3LjggMTUuMS0xOTYuMy01MS4yLTI2Ny4xek0yNDQuNCA4LjFjLTEyMi4zIDE5My40LTguNSAzNDguNiA2NSA0OTUuNSAyLjUgNS4xIDcuNyA4LjQgMTMuNCA4LjRMNDk3IDUxMmMxMS4yIDAgMTguNC0xMS44IDEzLjQtMjEuNyAwIDAtMjM0LjUtNDcwLjYtMjQwLjQtNDgyLjMtNS4zLTEwLjYtMTguOC0xMC44LTI1LjYgLjF6Il19LE9sdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaWVkLXBpcGVyLWhhdCIsaWNvbjpbNjQwLDUxMixbXSwiZjRlNSIsIk02NDAgMjQuOWMtODAuOCA1My42LTg5LjQgOTIuNS05Ni40IDEwNC40LTYuNyAxMi4yLTExLjcgNjAuMy0yMy4zIDgzLjYtMTEuNyAyMy42LTU0LjIgNDIuMi02Ni4xIDUwLTExLjcgNy44LTI4LjMgMzguMS00MS45IDY0LjItMTA4LjEtNC40LTE2Ny40IDM4LjgtMjU5LjIgOTMuNiAyOS40LTkuNyA0My4zLTE2LjcgNDMuMy0xNi43IDk0LjItMzYgMTM5LjMtNjguMyAyODEuMS00OS4yIDEuMSAwIDEuOSAuNiAyLjggLjggMy45IDIuMiA1LjMgNi45IDMuMSAxMC44bC01My45IDk1LjhjLTIuNSA0LjctNy44IDcuMi0xMy4xIDYuMS0xMjYuOC0yMy44LTIyNi45IDE3LjMtMzE4LjkgMTguNi03My40IDEuMS05Ny41LTMzLjUtOTcuNS0zNS4xIDAtMS4xIC42LTEuNyAxLjctMS43IDAgMCAzOC4zIDAgMTAzLjEtMTUuMyA3My42LTE0MC4zIDEzOS4yLTE4OS40IDIxMC42LTE4OS40IDAgMCA3MS43IDAgOTAuNiA2MS45IDIyLjgtMzkuNyAyOC4zLTQ5LjIgMjguMy00OS4yIDUuMy05LjQgMzUtNzcuMiA4Ni40LTE0MS40IDUxLjUtNjQgOTAuNC03OS45IDExOS4zLTkxLjh6Il19LEJsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJpbnRlcm5ldC1leHBsb3JlciIsaWNvbjpbNTEyLDUxMixbXSwiZjI2YiIsIk00ODMuMSAxNTkuN2MxMC45LTI0LjYgMjEuNC02MC40IDIxLjQtODcuOSAwLTcyLjctNzkuNi05OC40LTIwOS43LTM4LjYtMTA3LjYtNy4yLTIxMS4yIDczLjctMjM3LjEgMTg2LjUgMzAuOS0zNC45IDc4LjMtODIuMyAxMjItMTAxLjItNTQuMyA0OC4zLTEwMC42IDEwOS40LTEzNS43IDE3My4yLTIwLjcgMzcuOS00NCA5OS4yLTQ0IDE0NSAwIDk4LjYgOTIuOSA4Ni41IDE4MC4zIDQyIDMxLjQgMTUuNCA2Ni42IDE1LjYgMTAxLjcgMTUuNiA5Ny4xIDAgMTg0LjItNTQuMyAyMTYuOC0xNDZsLTEyMC44IDBjLTUyLjUgODguNi0xOTYuOCA1My0xOTYuOC00Ny40bDMyOC44IDBjNi40LTQzLjYtMS43LTk1LjctMjYuOS0xNDEuMnpNNjQuNiAzNDYuOUM4Mi4zIDM5OCAxMTguMyA0NDIuNyAxNjQuOCA0NzAuMiA3Ni4xIDUxOS4xLTguNCA0OTkuMyA2NC42IDM0Ni45ek0xODAuNSAyMzhjMi01NS4yIDUwLjMtOTQuOSAxMDQtOTQuOSA1My40IDAgMTAyIDM5LjcgMTA0IDk0LjlsLTIwOCAwek0zNjUuMSA1MC40YzIxLjQtMTAuMyA0OC42LTIyIDcyLjYtMjIgMzEuNCAwIDU0LjMgMjEuNyA1NC4zIDUzLjcgMCAyMC03LjQgNDktMTQuNiA2Ny45LTI2LjMtNDIuMy02Ni04MS42LTExMi4zLTk5LjZ6Il19LFJsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhaXJibmIiLGljb246WzQ0OCw1MTIsW10sImY4MzQiLCJNMjI0LjUgMzczLjFjLTI1LjItMzEuNy00MC4xLTU5LjQtNDUtODMuMi0yMi41LTg4IDExMi42LTg4IDkwLjEgMC01LjQgMjQuMi0yMC4zIDUyLTQ1IDgzLjJsLS4xIDB6bTEzOC4yIDczLjJjLTQyLjEgMTguMy04My43LTEwLjktMTE5LjMtNTAuNSAxMDMuOS0xMzAuMSA0Ni4xLTIwMC0xOC44LTIwMC01NC45IDAtODUuMiA0Ni41LTczLjMgMTAwLjUgNi45IDI5LjIgMjUuMiA2Mi40IDU0LjQgOTkuNS0zMi41IDM2LTYwLjUgNTIuNy04NS4yIDU0LjktNTAgNy40LTg5LjEtNDEuMS03MS4zLTkxLjEgMTUuMS0zOS4yIDExMS43LTIzMS4yIDExNS45LTI0MS42IDE1LjgtMzAuMSAyNS42LTU3LjQgNTkuNC01Ny40IDMyLjMgMCA0My40IDI1LjkgNjAuNCA1OS45IDM2IDcwLjYgODkuNCAxNzcuNSAxMTQuOCAyMzkuMSAxMy4yIDMzLjEtMS40IDcxLjMtMzcgODYuNnptNDctMTM2LjFjLTEyOC45LTI3NC4zLTEzNi0yNzguMi0xODUuMS0yNzguMi00NS41IDAtNjQuOSAzMS43LTg0LjcgNzIuOC0xMDYuMiAyMTIuMy0xMTYuNCAyNDIuNC0xMTcuMyAyNDUtMjUuMiA2OS4zIDI2LjcgMTMwLjIgODkuNiAxMzAuMiAyMS43IDAgNjAuNi02LjEgMTEyLjQtNjIuNCA1OC43IDYzLjggMTAxLjMgNjIuNCAxMTIuNCA2Mi40IDYyLjkgLjEgMTE0LjktNjAuOSA4OS42LTEzMC4yIDAtMy45LTE2LjgtMzguOS0xNi44LTM5LjZsMCAweiJdfSxIbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToianMiLGljb246WzQ0OCw1MTIsW10sImYzYjgiLCJNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMjQzLjggMzgxLjRjMCA0My42LTI1LjYgNjMuNS02Mi45IDYzLjUtMzMuNyAwLTUzLjItMTcuNC02My4yLTM4LjVMMTUyIDM4NS43YzYuNiAxMS43IDEyLjYgMjEuNiAyNy4xIDIxLjYgMTMuOCAwIDIyLjYtNS40IDIyLjYtMjYuNWwwLTE0My4xIDQyLjEgMCAwIDE0My43em05OS42IDYzLjVjLTM5LjEgMC02NC40LTE4LjYtNzYuNy00M0wzMDEgMzgyLjFjOSAxNC43IDIwLjggMjUuNiA0MS41IDI1LjYgMTcuNCAwIDI4LjYtOC43IDI4LjYtMjAuOCAwLTE0LjQtMTEuNC0xOS41LTMwLjctMjhsLTEwLjUtNC41Yy0zMC40LTEyLjktNTAuNS0yOS4yLTUwLjUtNjMuNSAwLTMxLjYgMjQuMS01NS42IDYxLjYtNTUuNiAyNi44IDAgNDYgOS4zIDU5LjggMzMuN0wzNjggMjkwYy03LjItMTIuOS0xNS0xOC0yNy4xLTE4LTEyLjMgMC0yMC4xIDcuOC0yMC4xIDE4IDAgMTIuNiA3LjggMTcuNyAyNS45IDI1LjZsMTAuNSA0LjVjMzUuOCAxNS4zIDU1LjkgMzEgNTUuOSA2Ni4yIDAgMzcuOC0yOS44IDU4LjYtNjkuNyA1OC42eiJdfSxxbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicXVpbnNjYXBlIixpY29uOls1MTIsNTEyLFtdLCJmNDU5IiwiTTMxMy43IDQ3NC42bC0xIDBjLTQxLjkgMC04Mi4xLTE2LjctMTExLjgtNDYuM3MtNDYuMy02OS45LTQ2LjMtMTExLjggMTYuNy04Mi4xIDQ2LjMtMTExLjggNjkuOS00Ni4zIDExMS44LTQ2LjNjOTQuOSAwIDE2OC4yIDgzLjEgMTU3IDE3Ni42IDQgNS4xIDguMiA5LjYgMTEuMiAxNS4zIDEzLjQtMzAuMyAyMC4zLTYyLjQgMjAuMy05Ny43IDAtMTM1LjEtMTA5LjUtMjQ0LjYtMjQ0LjYtMjQ0LjZTMTIuMSAxMTcuNSAxMi4xIDI1Mi42IDEyMS42IDQ5Ny4yIDI1Ni42IDQ5Ny4yYzIzLjggLjIgNDcuNi0zLjIgNzAuNC0xMC4xLTUuMi0zLjUtOC45LTguMS0xMy4zLTEyLjV6bTc4LjMtMTY5YTk5LjIgOTkuMiAwIDEgMCAwIDE5OC40IDk5LjIgOTkuMiAwIDEgMCAwLTE5OC40eiJdfSxWbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYWR2ZXJzYWwiLGljb246WzUxMiw1MTIsW10sImYzNmEiLCJNNDgyLjEgMzJMMjguNyAzMkM1LjggMzIgMCAzNy45IDAgNjAuOUwwIDQ1MS4xQzAgNDc0LjQgNS44IDQ4MCAyOC43IDQ4MGw0NTMuNCAwYzI0LjQgMCAyOS45LTUuMiAyOS45LTI5LjdsMC0zODguMWMwLTI0LjYtNS40LTMwLjItMjkuOS0zMC4yek0xNzguNCAyMjAuM2MtMjcuNS0yMC4yLTcyLjEtOC43LTg0LjIgMjMuNC00LjMgMTEuMS05LjMgOS41LTE3LjUgOC4zLTkuNy0xLjUtMTcuMi0zLjItMjIuNS01LjUtMjguOC0xMS40IDguNi01NS4zIDI0LjktNjQuMyA0MS4xLTIxLjQgODMuNC0yMi4yIDEyNS4zLTQuOCA0MC45IDE2LjggMzQuNSA1OS4yIDM0LjUgMTI4LjUgMi43IDI1LjgtNC4zIDU4LjMgOS4zIDg4LjggMS45IDQuNCAuNCA3LjktMi43IDEwLjctOC40IDYuNy0zOS4zIDIuMi00Ni42LTcuNC0xLjktMi4yLTEuOC0zLjYtMy45LTYuMi0zLjYtMy45LTcuMy0yLjItMTEuOSAxLTU3LjQgMzYuNC0xNDAuMyAyMS40LTE0Ny00My4zLTMuMS0yOS4zIDEyLjQtNTcuMSAzOS42LTcxIDM4LjItMTkuNSAxMTIuMi0xMS44IDExNC0zMC45IDEuMS0xMC4yLTEuOS0yMC4xLTExLjMtMjcuM3ptMjg2LjcgMjIyYzAgMTUuMS0xMS4xIDkuOS0xNy44IDkuOWwtMzk0LjkgMGMtNy40IDAtMTguMiA0LjgtMTcuOC0xMC43IC40LTEzLjkgMTAuNS05LjEgMTcuMS05LjEgMTMyLjMtLjQgMjY0LjUtLjQgMzk2LjggMCA2LjggMCAxNi42LTQuNCAxNi42IDkuOXptMy44LTM0MC41bDAgMjkxYzAgNS43LS43IDEzLjktOC4xIDEzLjktMTIuNC0uNC0yNy41IDcuMS0zNi4xLTUuNi01LjgtOC43LTcuOC00LTEyLjQtMS4yLTUzLjQgMjkuNy0xMjguMSA3LjEtMTQ0LjQtODUuMi02LjEtMzMuNC0uNy02Ny4xIDE1LjctMTAwIDExLjgtMjMuOSA1Ni45LTc2LjEgMTM2LjEtMzAuNWwwLTcxYzAtMjYuMi0uMS0yNi4yIDI2LTI2LjIgMy4xIDAgNi42IC40IDkuNyAwIDEwLjEtLjggMTMuNiA0LjQgMTMuNiAxNC4zLS4xIC4yLS4xIC4zLS4xIC41ek00MTcuNCAzMzQuMWMtMTkuNSA0Ny42LTcyLjkgNDMuMy05MCA1LjItMTUuMS0zMy4zLTE1LjUtNjguMiAuNC0xMDEuNSAxNi4zLTM0LjEgNTkuNy0zNS43IDgxLjUtNC44IDIwLjYgMjguOCAxNC45IDg0LjYgOC4xIDEwMS4xek0xMjIuNiAzNjkuNGMtNy41LTEuMy0zMy0zLjMtMzMuNy0yNy44LS40LTEzLjkgNy44LTIzIDE5LjgtMjUuOCAyNC40LTUuOSA0OS4zLTkuOSA3My43LTE0LjcgOC45LTIgNy40IDQuNCA3LjggOS41IDEuNCAzMy0yNi4xIDU5LjItNjcuNiA1OC44eiJdfSxVbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY3JlYXRpdmUtY29tbW9ucyIsaWNvbjpbNTEyLDUxMixbXSwiZjI1ZSIsIk0yNTMuOCAyMTQuOWwtMzMuMiAxNy4zYy05LjQtMTkuNi0yNS4yLTE5LjktMjcuNS0xOS45LTIyLjEgMC0zMy4yIDE0LjYtMzMuMiA0My44IDAgMjMuNiA5LjIgNDMuOCAzMy4yIDQzLjggMTQuNSAwIDI0LjYtNy4xIDMwLjYtMjEuM2wzMC42IDE1LjVjLTYuMiAxMS41LTI1LjcgMzktNjUuMSAzOS0yMi42IDAtNzQtMTAuMy03NC03NyAwLTU4LjcgNDMtNzcuMSA3Mi42LTc3LjEgMzAuNyAwIDUyLjcgMTEuOSA2NiAzNS45em0xNDMgMGwtMzIuOCAxNy4zYy05LjUtMTkuOC0yNS43LTE5LjktMjcuOS0xOS45LTIyLjEgMC0zMy4yIDE0LjYtMzMuMiA0My44IDAgMjMuNSA5LjIgNDMuOCAzMy4yIDQzLjggMTQuNCAwIDI0LjYtNy4xIDMwLjUtMjEuM2wzMSAxNS41Yy0yLjEgMy44LTIxLjQgMzktNjUuMSAzOS0yMi43IDAtNzQtOS45LTc0LTc3IDAtNTguNyA0My03Ny4xIDcyLjYtNzcuMSAzMC43IDAgNTIuNiAxMS45IDY1LjYgMzUuOXpNMjU1LjYgOEMxMTIuNyA4IDggMTIzLjEgOCAyNTYuMSA4IDM5NC41IDEyMS42IDUwNC4xIDI1NS42IDUwNC4xIDM4NS41IDUwNC4xIDUwNCA0MDMuMiA1MDQgMjU2LjEgNTA0IDExOC4yIDM5Ny40IDggMjU1LjYgOHptLjkgNDUwLjhjLTExMi41IDAtMjAzLjctOTMtMjAzLjctMjAyLjggMC0xMDUuNCA4NS40LTIwMy4zIDIwMy43LTIwMy4zIDExMi41IDAgMjAyLjggODkuNSAyMDIuOCAyMDMuMyAwIDEyMS43LTk5LjcgMjAyLjgtMjAyLjggMjAyLjh6Il19LGpsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJub3Rpb24iLGljb246WzUxMiw1MTIsW10sImU3ZDkiLCJNOTQuOSAxMDAuMmMxNC45IDEyLjEgMjAuNSAxMS4yIDQ4LjYgOS4zTDQwNy44IDkzLjZjNS42IDAgLjktNS42LS45LTYuNUwzNjIuOSA1NS40Yy04LjQtNi41LTE5LjYtMTQtNDEuMS0xMi4xTDY1LjkgNjEuOWMtOS4zIC45LTExLjIgNS42LTcuNSA5LjNsMzYuNCAyOC45em0xNS45IDYxLjZsMCAyNzguMWMwIDE0LjkgNy41IDIwLjUgMjQuMyAxOS42bDI5MC41LTE2LjhjMTYuOC0uOSAxOC43LTExLjIgMTguNy0yMy4zbDAtMjc2LjJjMC0xMi4xLTQuNy0xOC43LTE1LTE3LjdMMTI1LjcgMTQzLjFjLTExLjIgLjktMTQuOSA2LjUtMTQuOSAxOC43em0yODYuNyAxNC45YzEuOSA4LjQgMCAxNi44LTguNCAxNy44bC0xNCAyLjggMCAyMDUuM2MtMTIuMiA2LjUtMjMuNCAxMC4zLTMyLjcgMTAuMy0xNSAwLTE4LjctNC43LTI5LjktMTguN2wtOTEuNS0xNDMuNyAwIDEzOSAyOSA2LjVzMCAxNi44LTIzLjQgMTYuOGwtNjQuNCAzLjdjLTEuOS0zLjcgMC0xMy4xIDYuNS0xNC45bDE2LjgtNC43IDAtMTgzLjgtMjMuMy0xLjljLTEuOS04LjQgMi44LTIwLjUgMTUuOS0yMS41bDY5LjEtNC43IDk1LjMgMTQ1LjYgMC0xMjguOC0yNC4zLTIuOGMtMS45LTEwLjMgNS42LTE3LjcgMTQuOS0xOC43bDY0LjUtMy44ek00NC40IDM2LjdMMzEwLjYgMTcuMWMzMi43LTIuOCA0MS4xLS45IDYxLjYgMTRsODUgNTkuN2MxNCAxMC4zIDE4LjcgMTMuMSAxOC43IDI0LjNsMCAzMjcuNmMwIDIwLjUtNy41IDMyLjctMzMuNiAzNC41TDEzMy4yIDQ5NS44Yy0xOS42IC45LTI5LTEuOS0zOS4yLTE0LjlMMzEuNCAzOTkuN2MtMTEuMi0xNC45LTE1LjktMjYuMS0xNS45LTM5LjJsMC0yOTEuMmMwLTE2LjggNy41LTMwLjggMjguOS0zMi43eiJdfSxXbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY2hyb21lY2FzdCIsaWNvbjpbNTEyLDUxMixbXSwiZjgzOCIsIk00NDggNjRMNjQuMiA2NGMtMjMuNiAwLTQyLjcgMTkuMS00Mi43IDQyLjdsMCA2My45IDQyLjcgMCAwLTYzLjkgMzgzLjggMCAwIDI5OC42LTE0OS4yIDAgMCA0Mi43IDE0OS40IDBjMjMuNiAwIDQyLjctMTkuMSA0Mi43LTQyLjdsMC0yOTguNkM0OTAuOSA4My4xIDQ3MS42IDY0IDQ0OCA2NHpNMjEuNSAzODMuNmwwIDYzLjkgNjMuOSAwYzAtMzUuMy0yOC42LTYzLjktNjMuOS02My45em0wLTg1bDAgNDIuNGM1OC45IDAgMTA2LjYgNDguMSAxMDYuNiAxMDdsNDIuNyAwYy4xLTgyLjQtNjYuOS0xNDkuMy0xNDkuMy0xNDkuNHpNMjEzLjYgNDQ4bDQyLjcgMEMyNTUuOCAzMTguNSAxNTEgMjEzLjcgMjEuNSAyMTMuNGwwIDQyLjRjMTA2LS4yIDE5MiA4Ni4yIDE5Mi4xIDE5Mi4yeiJdfSxHbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2lraXBlZGlhLXciLGljb246WzY0MCw1MTIsW10sImYyNjYiLCJNNjQwIDUxLjJsLS4zIDEyLjJjLTI4LjEgLjgtNDUgMTUuOC01NS44IDQwLjMtMjUgNTcuOC0xMDMuMyAyNDAtMTU1LjMgMzU4LjZsLTEzLjYgMC04MS45LTE5My4xYy0zMi41IDYzLjYtNjguMyAxMzAtOTkuMiAxOTMuMS0uMyAuMy0xNSAwLTE1LS4zLTQ2LjktMTA5LjctOTYuMS0yMTguNi0xNDMuMS0zMjguNi0xMS40LTI2LjctNDkuNC03MC03NS42LTY5LjcgMC0zLjEtLjMtMTAtLjMtMTQuMmwxNjEuOSAwIDAgMTMuOWMtMTkuMiAxLjEtNTIuOCAxMy4zLTQzLjMgMzQuMiAyMS45IDQ5LjcgMTAzLjYgMjQwLjMgMTI1LjYgMjg4LjYgMTUtMjkuNyA1Ny44LTEwOS4yIDc1LjMtMTQyLjgtMTMuOS0yOC4zLTU4LjYtMTMzLjktNzIuOC0xNjAtOS43LTE3LjgtMzYuMS0xOS40LTU1LjgtMTkuN2wwLTEzLjkgMTQyLjUgLjMgMCAxMy4xYy0xOS40IC42LTM4LjEgNy44LTI5LjQgMjYuMSAxOC45IDQwIDMwLjYgNjguMSA0OC4xIDEwNC43IDUuNi0xMC44IDM0LjctNjkuNCA0OC4xLTEwMC44IDguOS0yMC42LTMuOS0yOC42LTM4LjYtMjkuNCAuMy0zLjYgMC0xMC4zIC4zLTEzLjYgNDQuNC0uMyAxMTEuMS0uMyAxMjMuMS0uNmwwIDEzLjZDNDYyLjQgNjQgNDM5LjEgNzYgNDI2LjggOTQuOUwzNjcuNiAyMTcuN2M2LjQgMTYuMSA2My4zIDE0Mi44IDY5LjIgMTU2LjdMNTU5LjIgOTEuOGMtOC42LTIzLjEtMzYuNC0yOC4xLTQ3LjItMjguM2wwLTEzLjkgMTI3LjggMS4xIC4yIC41eiJdfSxZbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2l0cm94IixpY29uOls0NDgsNTEyLFtdLCJlNDRhIiwiTTIxMi40IDBsMCAwIDIzNS42IDAgMCAxMjgtMzg0IDBDNjQgNTcuNiAxNDEuOCAuNSAyMTIuNCAwem0yNC44IDE5MmwwIDBjNjkuOSAuNSAxNDYuNyA1Ny42IDE0Ni43IDEyOGwtMTczLjIgMCAwIDBDMTQwLjkgMzE5LjYgNjQgMjYyLjQgNjQgMTkybDE3My4zIDB6bS0xLjcgMzIwYzcwLjctLjUgMTQ4LjQtNTcuNiAxNDguNC0xMjhsLTM4NCAwIDAgMTI4IDIzNS42IDAgMCAweiJdfSxjMmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLWdpdGxhYiIsaWNvbjpbNDQ4LDUxMixbImdpdGxhYi1zcXVhcmUiXSwiZTVhZSIsIk0wIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZ6bTMzNy41IDEyLjVsNDQuNiAxMTYuNCAuNCAxLjJjNS42IDE2LjggNy4yIDM1LjIgMi4zIDUyLjUtNSAxNy4yLTE1LjQgMzIuNC0yOS44IDQzLjNsLS4yIC4xLTY4LjQgNTEuMi01NC4xIDQwLjljLS41IC4yLTEuMSAuNS0xLjcgLjgtMiAxLTQuNCAyLTYuNyAyLTMgMC02LjgtMS44LTguMy0yLjhsLTU0LjItNDAuOS02Ny45LTUwLjktLjQtLjMtLjItLjFjLTE0LjMtMTAuOC0yNC44LTI2LTI5LjctNDMuM3MtNC4yLTM1LjcgMi4yLTUyLjVsLjUtMS4yIDQ0LjctMTE2LjRjLjktMi4zIDIuNS00LjMgNC41LTUuNiAxLjYtMSAzLjQtMS42IDUuMi0xLjggMS4zLS43IDIuMS0uNCAzLjQgLjEgLjYgLjIgMS4yIC41IDIgLjcgMSAuNCAxLjYgLjkgMi40IDEuNSAuNiAuNCAxLjIgMSAyLjEgMS41IDEuMiAxLjQgMi4yIDMgMi43IDQuOGwyOS4yIDkyLjIgMTIyLjkgMCAzMC4yLTkyLjJjLjUtMS44IDEuNC0zLjQgMi42LTQuOHMyLjgtMi40IDQuNS0zLjFjMS43LS42IDMuNi0uOSA1LjQtLjdzMy42IC44IDUuMiAxLjhjMiAxLjMgMy43IDMuMyA0LjYgNS42eiJdfSxabHQ9YzJlLFhsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzaG9lbGFjZSIsaWNvbjpbNTEyLDUxMixbXSwiZTYwYyIsIk00MDUuMiAzMzFjMi4yLTEuMSA0LjQtMi4zIDYuNS0zLjdsOC4zLTQuOGMxLjUtMS4xIDQuNC0zLjQgOC43LTYuN2wuNS0uNWMzLjQtMy40IDcuMi01IDExLjMtNC45IDEuOCAwIDMuOSAuNSA2LjQgMS41bDMxLTI3LjVjLjktLjcgMS43LTEuMyAyLjYtMS44bC4yIDBjMy4zLTEuOSA2LTEuOCA4LjIgLjQgMy45IDIuMSA0LjIgNS42IC45IDEwLjZMNDU3LjIgMzIyYy4yIC41IC40IDEgLjQgMS41IC41IDIuMiAuMyA0LjQtLjUgNi42LS43IDEuNS0xLjggMi45LTMuMSA0LjItMS40IDEuNC0yLjcgMi44LTQuMiA0LjJMNDMxIDM1Mi4yYy0xLjcgMS4yLTMuNCAyLjMtNS4xIDMuMy0yLjEgMS4zLTQuMyAyLjUtNi42IDMuNi0xIC40LTEuOSAuOS0yLjkgMS4zLTUuOSAyLjUtMTEuOSA0LjItMTguMiA1LTIuOSAyNC41LTExLjMgNDcuMS0yNS4xIDY3LjgtMTcuNSAyNS43LTQxLjQgNDUuNC03MS44IDU4LjgtMzAuMiAxMy41LTYzIDIwLjItOTguMiAyMC4yLTQ4LjYtLjUtODgtMTEuNC0xMTguMi0zMi44LTM1LjEtMjUtNTIuNi01Ny45LTUyLjYtOTkuMWwwLTUuNmMxLjItMjguMSA5LjUtNTQuNiAyNC44LTc5LjggMTUuMS0yNC45IDM3LjEtNDEuNyA2Ni4xLTUwLjUgMTQuOS00LjQgMjkuOS02LjYgNDUtNi42IDE1LjUgMCAzMS42IDIuOSA0OC4xIDguNnMzNS4yIDE1LjUgNTUuOSAyOS41bDU0LjEgMzYuM2MxNS4xIDkuOCAyOC44IDE2LjUgNDEuMiAyMC0yLjYtMjUuMS0xMS43LTQ2LjYtMjcuMy02NC41LTE1LjctMTguMS0zNS42LTMxLjMtNTkuOS0zOS43TDI1NyAyMjBjLTIxLjQtNy41LTM3LjMtMTQuOS00Ny43LTIyLjItMjguMi0xOS4xLTQzLjgtNDUuMi00Ny03OC41bC0uNS05LjhjMC0zMi4xIDEzLTU4LjkgMzktODAuNSAyMy0xOS4zIDUwLjYtMjkgODIuNS0yOSAyNCAwIDQ1LjYgNi45IDY0LjcgMjAuOCAxOS4yIDE0IDMwLjEgMzMuOCAzMi42IDU5LjRsLjUgMTBjMCAxOC42LTQuOCAzNC41LTE0LjQgNDcuNy05LjggMTMuMi0xOC41IDE5LjktMjYgMTkuOS0xLjYtLjEtMy4xLS4zLTQuNS0uNmwtMzQgMzJjLTUuNSAzLTkuMiAyLjUtMTEuMS0xLjYtMS45LTIuMi0xLjgtNC45IC41LTguMmwuMi0uMmMuNS0uNyAxLjItMS41IDItMi40bDMxLjYtMzBjLS40LTEuNS0uNi0zLjEtLjYtNC44IDAtNC4xIDEuNi03LjYgNC45LTEwLjQgMTMuOC0xMi40IDIwLjgtMjYuNyAyMC44LTQyLjggMC0xNi02LjEtMjkuNS0xOC4yLTQwLjRzLTI4LjctMTYuNS00OS43LTE2LjhjLTI2LjIgMC00Ny44IDcuOS02NC43IDIzLjdTMTkyLjYgODkuOSAxOTIuNiAxMTJjMCAxNy44IDYuOSAzMy45IDIwLjYgNDguMyAxMy42IDE0LjIgMzQuNiAyNS40IDYzIDMzLjUgMzkuOCAxMS41IDcwLjIgMzEgOTEuMyA1OC4zIDE4LjcgMjQuMiAyOS4xIDUxLjMgMzEuMyA4MS40IDIuMi0uNyA0LjMtMS41IDYuNS0yLjZsLS4xIC4xek0yOTQuNCAxNzguN2MwIDEuMSAuNiAxLjYgMS44IDEuNiAuMSAwIDkuNy04LjkgMjguOC0yNi42IDAtMi40LTUuMSAuOS0xNS4zIDEwLTEwLjIgOS4yLTE1LjMgMTQuMi0xNS4zIDE0LjlsMCAuMXptOCA2LjRjMC0xLS41LTEuNS0xLjUtMS41LTEuMSAwLTIuMSAuNS0yLjkgMS42LTEuOS0uMS0zLjMgLjEtNC4yIC43LS40IC4yLS41IC41LS41IC43IDAgLjcgLjUgMS4zIDEuNSAxLjZsMy4zIDBjMi45LTEuMSA0LjQtMi4yIDQuNC0zLjNsLS4xIC4yek0zMjUgMTY1LjJjMC0yLjgtMS42LTIuOC00LjkgMC0xLjYgMS41LTMuNiAzLjUtNiA2LjItLjggLjYtMi42IDIuMi01LjMgNC45LTIuOCAyLjktNC4yIDQuNy00LjIgNS4zbC4yIDEuM2MuNyAuMiAxLjIgLjQgMS41IC40IC4xIDAgMy4zLTIuOSA5LjUtOC43czkuMy04LjkgOS4zLTkuM2wtLjEtLjF6bTE1OS43IDEyMGwtMzAuNiAyN2MxLjggMSAzLjIgMi40IDQgNC4ybDMwLjItMjdjLjItMS4yIC4xLTIuMi0uNS0yLjktLjYtLjUtMS42LS45LTMuMS0xLjN6bS0xLjYtLjlsLS43LS43LTI3IDIxLjkgMS42IDIgMjYtMjMuMSAuMS0uMXpNMzY2LjkgMzYzLjljLTgtMi4xLTE1LjQtNC42LTIyLjItNy41LTE1LjMtNi4yLTM0LjMtMTctNTctMzIuNGwtMzcuNC0yNS4zYy0xNS44LTEwLjEtMzAuMi0xNy42LTQzLjItMjIuNi0xMy4xLTQuOS0yNi03LjMtMzguNi03LjNsLTUuNSAwYy0zMi4yIDEuNy01Ny4yIDEzLjgtNzUgMzYuMi0xNi42IDIwLjgtMjUgNDUuMy0yNSA3My42IDAgMzEuOCAxMi44IDU2LjcgMzguMiA3NC43IDI1LjQgMTguMSA2MC4yIDI3LjEgMTA0LjQgMjcuMSAzNC43IDAgNjQtNi4yIDg3LjgtMTguNiAyMy43LTEyLjQgNDIuMS0yOC44IDU1LjItNDkuMiA5LjgtMTUuNSAxNS45LTMxLjggMTguMi00OC44bC4xIC4xeiJdfSxRbHQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2VsbGNhc3QiLGljb246WzQ0OCw1MTIsW10sImYyZGEiLCJNMzUzLjUgMzJMOTQuOCAzMkM0Mi43IDMyIC4xIDc0LjYgLjEgMTI2LjZsMCAyNTguN0MuMSA0MzcuNCA0Mi43IDQ4MCA5NC44IDQ4MGwyNTguNyAwYzUyLjEgMCA5NC43LTQyLjYgOTQuNy05NC42bDAtMjU4LjhjMC01Mi00Mi42LTk0LjYtOTQuNy05NC42em0tNTAgMzE2LjRjLTI3LjkgNDguMi04OS45IDY0LjktMTM4LjIgMzcuMi0yMi45IDM5LjgtNTQuOSA4LjYtNDIuMy0xMy4ybDE1LjctMjcuMmM1LjktMTAuMyAxOS4yLTEzLjkgMjkuNS03LjkgMTguNiAxMC44LS4xLS4xIDE4LjUgMTAuNyAyNy42IDE1LjkgNjMuNCA2LjMgNzkuNC0yMS4zIDE1LjktMjcuNiA2LjMtNjMuNC0yMS4zLTc5LjQtMTcuOC0xMC4yLS42LS40LTE4LjYtMTAuNi0yNC42LTE0LjItMy40LTUxLjkgMjEuNi0zNy41IDE4LjYgMTAuOC0uMS0uMSAxOC41IDEwLjcgNDguNCAyOCA2NS4xIDkwLjMgMzcuMiAxMzguNXptMjEuOC0yMDguOGMtMTcgMjkuNS0xNi4zIDI4LjgtMTkgMzEuNS02LjUgNi41LTE2LjMgOC43LTI2LjUgMy42LTE4LjYtMTAuOCAuMSAuMS0xOC41LTEwLjctMjcuNi0xNS45LTYzLjQtNi4zLTc5LjQgMjEuM3MtNi4zIDYzLjQgMjEuMyA3OS40YzAgMCAxOC41IDEwLjYgMTguNiAxMC42IDI0LjYgMTQuMiAzLjQgNTEuOS0yMS42IDM3LjUtMTguNi0xMC44IC4xIC4xLTE4LjUtMTAuNy00OC4yLTI3LjgtNjQuOS05MC4xLTM3LjEtMTM4LjQgMjcuOS00OC4yIDg5LjktNjQuOSAxMzguMi0zNy4ybDQuOC04LjRjMTQuMy0yNC45IDUyLTMuMyAzNy43IDIxLjV6Il19LEtsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJtaXgiLGljb246WzQ0OCw1MTIsW10sImYzY2IiLCJNMCA2NEwwIDQxMi45YzAgNTYuMiA4OCA1OC4xIDg4IDBsMC0yMzguNmM3LjktNTIuOSA4OC01MC40IDg4IDYuNWwwIDE3NS4zYzAgNTcuOSA5NiA1OCA5NiAwTDI3MiAyNDBjNS4zLTU0LjcgODgtNTIuNSA4OCA0LjNsMCAyMy44YzAgNTkuOSA4OCA1Ni42IDg4IDBMNDQ4IDY0IDAgNjR6Il19LEpsdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjYy1hcHBsZS1wYXkiLGljb246WzU3Niw1MTIsW10sImY0MTYiLCJNMzAyLjIgMjE4LjRjMCAxNy4yLTEwLjUgMjcuMS0yOSAyNy4xbC0yNC4zIDAgMC01NC4yIDI0LjQgMGMxOC40IDAgMjguOSA5LjggMjguOSAyNy4xek0zNDkuNyAyODFjMCA4LjMgNy4yIDEzLjcgMTguNSAxMy43IDE0LjQgMCAyNS4yLTkuMSAyNS4yLTIxLjlsMC03LjctMjMuNSAxLjVjLTEzLjMgLjktMjAuMiA1LjgtMjAuMiAxNC40ek01NzYgNzlsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDc5Yy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDc5QzAgNTIuNSAyMS41IDMxIDQ4IDMxbDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xMjcuOCAxOTcuMmM4LjQgLjcgMTYuOC00LjIgMjIuMS0xMC40IDUuMi02LjQgOC42LTE1IDcuNy0yMy43LTcuNCAuMy0xNi42IDQuOS0yMS45IDExLjMtNC44IDUuNS04LjkgMTQuNC03LjkgMjIuOHptNjAuNiA3NC41Yy0uMi0uMi0xOS42LTcuNi0xOS44LTMwLS4yLTE4LjcgMTUuMy0yNy43IDE2LTI4LjItOC44LTEzLTIyLjQtMTQuNC0yNy4xLTE0LjctMTIuMi0uNy0yMi42IDYuOS0yOC40IDYuOS01LjkgMC0xNC43LTYuNi0yNC4zLTYuNC0xMi41IC4yLTI0LjIgNy4zLTMwLjUgMTguNi0xMy4xIDIyLjYtMy40IDU2IDkuMyA3NC40IDYuMiA5LjEgMTMuNyAxOS4xIDIzLjUgMTguNyA5LjMtLjQgMTMtNiAyNC4yLTYgMTEuMyAwIDE0LjUgNiAyNC4zIDUuOSAxMC4yLS4yIDE2LjUtOS4xIDIyLjgtMTguMiA2LjktMTAuNCA5LjgtMjAuNCAxMC0yMXptMTM1LjQtNTMuNGMwLTI2LjYtMTguNS00NC44LTQ0LjktNDQuOGwtNTEuMiAwIDAgMTM2LjQgMjEuMiAwIDAtNDYuNiAyOS4zIDBjMjYuOCAwIDQ1LjYtMTguNCA0NS42LTQ1em05MCAyMy43YzAtMTkuNy0xNS44LTMyLjQtNDAtMzIuNC0yMi41IDAtMzkuMSAxMi45LTM5LjcgMzAuNWwxOS4xIDBjMS42LTguNCA5LjQtMTMuOSAyMC0xMy45IDEzIDAgMjAuMiA2IDIwLjIgMTcuMmwwIDcuNS0yNi40IDEuNmMtMjQuNiAxLjUtMzcuOSAxMS42LTM3LjkgMjkuMSAwIDE3LjcgMTMuNyAyOS40IDMzLjQgMjkuNCAxMy4zIDAgMjUuNi02LjcgMzEuMi0xNy40bC40IDAgMCAxNi40IDE5LjYgMCAwLTY4IC4xIDB6TTUxNiAyMTAuOWwtMjEuNSAwLTI0LjkgODAuNi0uNCAwLTI0LjktODAuNi0yMi4zIDAgMzUuOSA5OS4zLTEuOSA2Yy0zLjIgMTAuMi04LjUgMTQuMi0xNy45IDE0LjItMS43IDAtNC45LS4yLTYuMi0uM2wwIDE2LjRjMS4yIC40IDYuNSAuNSA4LjEgLjUgMjAuNyAwIDMwLjQtNy45IDM4LjktMzEuOEw1MTYgMjEwLjl6Il19LGVjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJicmF2ZSIsaWNvbjpbNDQ4LDUxMixbXSwiZTYzYyIsIk0xNDUuNiAwbDE1NyAwIDQ0LjcgNTAuOHMzOS4zLTEwLjkgNTcuOCA3LjYgMzMuOCAzNC45IDMzLjggMzQuOWwtMTIgMjkuNSAxNS4zIDQzLjdzLTQ0LjkgMTcwLjItNTAuMSAxOTFjLTEwLjQgNDAuOS0xNy40IDU2LjgtNDYuOSA3Ny41cy04Mi45IDU2LjgtOTEuNiA2Mi4yYy0xLjkgMS4yLTMuOSAyLjUtNS45IDMuOS03LjUgNS4xLTE1LjggMTAuOC0yMy41IDEwLjhzLTE2LjEtNS43LTIzLjUtMTAuOGMtMi0xLjQtNC0yLjgtNS45LTMuOS04LjctNS41LTYyLjEtNDEuNS05MS42LTYyLjJzLTM2LjUtMzYuNi00Ni45LTc3LjVjLTUuMy0yMC44LTUwLjEtMTkxLTUwLjEtMTkxTDIxLjUgMTIyLjggOS4zIDkzLjNzMTUuMy0xNi40IDMzLjgtMzQuOSA1Ny44LTcuNiA1Ny44LTcuNkwxNDUuNiAwem03OC41IDQwNy42YzMuNyAwIDguOS00LjcgMTMtOC40IC42LS41IDEuMi0xLjEgMS43LTEuNSA0LjItMy43IDQ3LjgtMzcuNSA1MS0zOS44czUuNC02LjUgMS45LTguN2MtMi44LTEuNy0xMC01LjUtMjAuMy0xMC44LTMtMS42LTYuMy0zLjItOS43LTUtMTUuNC04LTM0LjUtMTQuNy0zNy41LTE0LjdzLTIyLjEgNi44LTM3LjUgMTQuN2MtMy41IDEuOC02LjcgMy41LTkuNyA1LTEwLjMgNS4zLTE3LjYgOS4xLTIwLjMgMTAuOC0zLjYgMi4yLTEuNCA2LjQgMS45IDguN3M0Ni44IDM2LjEgNTEgMzkuOGMuNSAuNSAxLjEgMSAxLjcgMS41IDQuMSAzLjcgOS4zIDguNCAxMyA4LjRsLS4yIDB6bTAtMTY1LjdjNC43IDAgMTcuNi0zIDI2LjQtNWwyLS41YzcuOC0xLjggNy4zLTYuMyA2LjQtMTMtLjEtLjgtLjItMS42LS4zLTIuNC0uNi02LjEtNS44LTMzLjEtOS4xLTUwLjMtMS4xLTUuOC0yLTEwLjUtMi40LTEyLjktMS41LTguMS0uNi05LjQgLjctMTEuMyAuMi0uMyAuNS0uNyAuNy0xLjEgMS40LTIuMyAxNi02LjIgMjcuOS05LjUgMi41LS43IDQuOC0xLjMgNi45LTEuOSAxMC42LTMgMzIuNC0uNiA0NC4yIC42IDEuOCAuMiAzLjQgLjQgNC43IC41IDkuNiAuOSAxMC40IDIuMyA3LjIgMy44LTIuMyAxLjEtMTYuMiA2LjMtMjguNyAxMC45LTQuNyAxLjgtOS4yIDMuNS0xMi44IDQuOC0xLjUgLjUtMyAxLjEtNC41IDEuNy0xMi41IDQuNi0yNy4yIDEwLTI4LjkgMTkuNC0xLjUgOC4zIDUuMiAxOS45IDExLjMgMzAuMyAxLjYgMi44IDMuMiA1LjUgNC42IDguMSA2LjMgMTEuOSA2LjUgMTMuMyA2LjEgMTguMS0uNCAzLjktMTQuNSAxMi43LTIyLjQgMTcuNi0xLjggMS4xLTMuMyAyLjEtNC4yIDIuNy0uOCAuNS0yLjEgMS40LTMuOCAyLjQtOC42IDUuMi0yNi4zIDE2LTI2LjMgMjIuNSAwIDcuOCAyNC42IDI4LjEgMzIuNCAzMy4yczI4LjkgMTYuMSAzNy45IDE3LjggMjMtOC41IDMxLjItMjMuOGM3LjctMTQuNCAxLjctMjguNS0zLjItNDBsLS45LTIuMmMtNC41LTEwLjYgMS45LTE3IDYuMi0yMS4zIC41LS41IDEtMSAxLjQtMS40bDQzLTQ1LjdjMS4zLTEuMyAyLjUtMi42IDMuNy0zLjggNS44LTUuNyAxMC44LTEwLjUgMTAuOC0yMi44IDAtMTQuOS01Ny41LTg0LjUtNTcuNS04NC41cy00OC41IDkuMy01NS4xIDkuM2MtNS4yIDAtMTUuMy0zLjUtMjUuOC03LjEtMi43LS45LTUuNC0xLjktOC0yLjctMTMtNC4zLTIxLjgtNC40LTIxLjgtNC40cy04LjcgMC0yMS44IDQuNGMtMi43IC45LTUuNCAxLjgtOCAyLjctMTAuNSAzLjYtMjAuNiA3LjEtMjUuOCA3LjEtNi41IDAtNTUuMS05LjMtNTUuMS05LjNzLTU3LjUgNjkuNi01Ny41IDg0LjVjMCAxMi4zIDQuOSAxNy4xIDEwLjggMjIuOCAxLjIgMS4yIDIuNSAyLjQgMy43IDMuOGw0My4xIDQ1LjhjLjQgLjUgLjkgLjkgMS40IDEuNCA0LjMgNC4zIDEwLjYgMTAuNyA2LjIgMjEuM2wtLjkgMi4yYy00LjkgMTEuNS0xMSAyNS42LTMuMiA0MCA4LjIgMTUuMyAyMi4yIDI1LjUgMzEuMiAyMy44czMwLjEtMTIuNyAzNy45LTE3LjggMzIuNC0yNS40IDMyLjQtMzMuMmMwLTYuNS0xNy43LTE3LjMtMjYuMy0yMi41LTEuNy0xLTMuMS0xLjktMy44LTIuNC0uOS0uNi0yLjQtMS41LTQuMi0yLjctNy45LTQuOS0yMi0xMy43LTIyLjQtMTcuNi0uNC00LjgtLjMtNi4yIDYuMS0xOC4xIDEuMy0yLjUgMi45LTUuMyA0LjYtOC4xIDYtMTAuNCAxMi44LTIyIDExLjMtMzAuMy0xLjctOS40LTE2LjQtMTQuOC0yOC45LTE5LjQtMS42LS42LTMuMS0xLjEtNC41LTEuNy0zLjYtMS40LTguMS0zLjEtMTIuOC00LjhsLS4xIDBjLTEyLjUtNC43LTI2LjQtOS45LTI4LjctMTAuOS0zLjItMS41LTIuMy0yLjggNy4yLTMuOCAxLjMtLjEgMi45LS4zIDQuNy0uNSAxMS44LTEuMyAzMy42LTMuNiA0NC4yLS42IDIuMSAuNiA0LjQgMS4yIDYuOSAxLjkgMTEuOSAzLjIgMjYuNSA3LjIgMjcuOSA5LjUgLjIgLjQgLjUgLjcgLjcgMS4xIDEuMyAxLjkgMi4yIDMuMiAuNyAxMS4zLS40IDIuNC0xLjMgNy4xLTIuNCAxMi45LTMuMyAxNy4yLTguNSA0NC4yLTkuMSA1MC4zLS4xIC44LS4yIDEuNy0uMyAyLjQtLjggNi43LTEuNCAxMS4yIDYuNCAxM2wyIC41YzguOCAyIDIxLjggNSAyNi40IDVsMC0uMXoiXX0sdGN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImV0c3kiLGljb246WzM4NCw1MTIsW10sImYyZDciLCJNMzg0IDM0OGMtMS44IDEwLjctMTMuOCAxMTAtMTUuNSAxMzItMTE3LjktNC4zLTIxOS45LTQuNy0zNjguNSAwbDAtMjUuNWM0NS41LTguOSA2MC42LTggNjEtMzUuMiAxLjgtNzIuMyAzLjUtMjQ0LjEgMC0zMjItMS0yOC41LTEyLjEtMjYuOC02MS0zNkwwIDM1LjhjNzMuOSAyLjQgMjU1LjkgOC42IDM2My0zLjgtMy41IDM4LjItNy44IDEyNi41LTcuOCAxMjYuNWwtMjMuMiAwQzMyMC45IDExNS43IDMxMy4yIDY4IDI3Ny4zIDY4bC0xMzcgMGMtMTAuMiAwLTEwLjcgMy41LTEwLjcgOS44bDAgMTYzLjhjNTggLjUgODguNS0yLjUgODguNS0yLjUgMjkuOC0xIDI3LjYtOC41IDQwLjctNjUuM2wyNS44IDBjLTQuNCAxMDEuNC0zLjkgNjEuOC0xLjggMTYwLjNMMjU3IDMzNGMtOS4yLTQwLjEtOS4xLTYxLTM5LjUtNjEuNSAwIDAtMjEuNS0yLTg4LTJsMCAxMzljMCAyNiAxNC4zIDM4LjMgNDQuMyAzOC4zbDg5LjMgMGM2My42IDAgNjYuNi0yNSA5OC43LTk5LjhsMjIuMiAweiJdfSxhY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYnRjIixpY29uOlszODQsNTEyLFtdLCJmMTVhIiwiTTMxMC40IDI0Mi42YzI3LjctMTQuMiA0NS40LTM5LjQgNDEuMy04MS4zLTUuNC01Ny40LTUyLjUtNzYuNi0xMTQuOC04MS45bDAtNzkuNC00OC41IDAgMCA3Ny4yYy0xMi42IDAtMjUuNSAuMy0zOC40IC42bDAtNzcuOC00OC41IDAgMCA3OS40Yy0xNy44IC41LTM4LjYgLjMtOTcuNCAwbDAgNTEuN2MzOC4zLS43IDU4LjQtMy4xIDYzIDIxLjRsMCAyMTcuNGMtMi45IDE5LjUtMTguNSAxNi43LTUzLjMgMTYuMUw0IDQ0My43Yzg4LjUgMCA5Ny40IC4zIDk3LjQgLjNsMCA2OCA0OC41IDAgMC02Ny4xYzEzLjIgLjMgMjYuMiAuMyAzOC40IC4zbDAgNjYuNyA0OC41IDAgMC02OGM4MS4zLTQuNCAxMzUuNi0yNC45IDE0Mi45LTEwMS41IDUuNy02MS40LTIzLjMtODguOS02OS4zLTk5Ljl6TTE1MC44IDEzNC42YzI3LjQgMCAxMTMuMS04LjUgMTEzLjEgNDguNSAwIDU0LjUtODUuNyA0OC4yLTExMy4xIDQ4LjJsMC05Ni43em0wIDI1MS44bDAtMTA2LjVjMzIuOCAwIDEzMy4xLTkuMSAxMzMuMSA1My4zIDAgNjAuMi0xMDAuNCA1My4zLTEzMy4xIDUzLjN6Il19LHJjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhZG4iLGljb246WzUxMiw1MTIsW10sImYxNzAiLCJNMjU2IDE2Ny41bDY0LjkgOTguOC0xMjkuOCAwIDY0LjktOTguOHpNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptMzk2LjIgODIuN2wtMTQ4LjItMjIzLjItMTQ4LjIgMjIzLjIgMzAuNCAwIDMzLjYtNTEuNyAxNjguNiAwIDMzLjYgNTEuNyAzMC4yIDB6Il19LGljdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUteC10d2l0dGVyIixpY29uOls0NDgsNTEyLFtdLCJlNjFhIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTI5Ny4xIDg0bC0xMDMuOCAxMTguNiAxMjIuMSAxNjEuNC05NS42IDAtNzQuOC05Ny45LTg1LjcgOTcuOS00Ny41IDAgMTExLTEyNi45LTExNy4xLTE1My4xIDk4IDAgNjcuNyA4OS41IDc4LjItODkuNSA0Ny41IDB6TTMyMy4zIDM2Ny42bC0xNjkuOS0yMjQuNy0yOC4zIDAgMTcxLjggMjI0LjcgMjYuNCAweiJdfSxvY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLWZvbnQtYXdlc29tZSIsaWNvbjpbNDQ4LDUxMixbXSwiZTVhZCIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem05MCAxMjJjMCA5LjMtNC44IDE3LjQtMTIuMSAyMmwxODguOSAwYzcuMyAwIDEzLjIgNS45IDEzLjIgMTMuMiAwIDEuOC0uNCAzLjctMS4xIDUuNEwzMTIgMjY0IDM0Mi45IDMzMy40Yy43IDEuNyAxLjEgMy41IDEuMSA1LjQgMCA3LjMtNS45IDEzLjItMTMuMiAxMy4ybC0xODYuOCAwIDAgMzItMzIgMCAwLTIwOS41Yy02LjEtNC44LTEwLTEyLjItMTAtMjAuNSAwLTE0LjQgMTEuNi0yNiAyNi0yNnMyNiAxMS42IDI2IDI2eiJdfSxzY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZm9ydW1iZWUiLGljb246WzQ0OCw1MTIsW10sImYyMTEiLCJNNS44IDMwOS43QzIgMjkyLjcgMCAyNzUuNSAwIDI1OC4zIDAgMTM1IDk5LjggMzUgMjIzLjEgMzUgMjM5LjcgMzUgMjU2LjQgMzcgMjcyLjQgNDAuNSAxNDkgODcuNSA1MS45IDE4NiA1LjggMzA5Ljd6TTM5OC43IDEyMC41Yy0xMy43LTE3LjUtMjkuNy0zMi43LTQ3LjgtNDUuMy0xNDkuNiA0NC4zLTI2Ni4zIDE2Mi4xLTMwOS43IDMxMiAxMi41IDE4LjEgMjggMzUuNiA0NS4yIDQ5IDQzLjEtMTUxLjMgMTYxLjItMjcxLjcgMzEyLjMtMzE1Ljd6bTE1LjggMjUyLjdjMTUuMi0yNS4xIDI1LjQtNTMuNyAyOS41LTgyLjgtNzkuNCA0Mi45LTE0NSAxMTAuNi0xODcuNiAxOTAuMyAzMC00LjQgNTguOS0xNS4zIDg0LjYtMzEuMyAzNSAxMy4xIDcwLjkgMjQuMyAxMDcgMzMuNi05LjMtMzYuNS0yMC40LTc0LjUtMzMuNS0xMDkuOHptMjkuNy0xNDUuNWMtMi42LTE5LjUtNy45LTM4LjctMTUuOC01Ni44LTEzNy45IDQ1LjgtMjQ2LjQgMTU2LjYtMjkxLjMgMjk1LjEgMTguMSA3LjYgMzcgMTIuNSA1Ni42IDE1LjIgNDYuMy0xMTQuMSAxMzYuOC0yMDYuOCAyNTAuNS0yNTMuNXoiXX0sZDJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6IjQyLWdyb3VwIixpY29uOls2NDAsNTEyLFsiaW5ub3NvZnQiXSwiZTA4MCIsIk0zMjAgOTZsMCAzMjBjMjEgMCA0MS44LTQuMSA2MS4yLTEyLjJzMzctMTkuOCA1MS45LTM0LjcgMjYuNi0zMi41IDM0LjctNTEuOSAxMi4yLTQwLjIgMTIuMi02MS4yLTQuMS00MS44LTEyLjItNjEuMi0xOS44LTM3LjEtMzQuNy01MS45LTMyLjUtMjYuNi01MS45LTM0LjctNDAuMi0xMi4yLTYxLjItMTIuMnpNMCAyNTZMMTYwIDQxNiAzMjAgMjU2IDE2MCA5NiAwIDI1NnptNDgwIDBjMCAyMSA0LjEgNDEuOCAxMi4yIDYxLjJzMTkuOCAzNyAzNC43IDUxLjkgMzIuNSAyNi42IDUxLjkgMzQuNyA0MC4yIDEyLjIgNjEuMiAxMi4ybDAtMzIwYy00Mi40IDAtODMuMSAxNi45LTExMy4xIDQ2LjlTNDgwIDIxMy42IDQ4MCAyNTZ6Il19LG5jdD1kMmUsbGN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN0dW1ibGV1cG9uLWNpcmNsZSIsaWNvbjpbNTEyLDUxMixbXSwiZjFhMyIsIk0yNjQgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTAgMTc3LjVjLTkuOCAwLTE3LjggOC0xNy44IDE3LjhsMCAxMDYuOWMwIDQwLjktMzMuOSA3My45LTc0LjkgNzMuOS00MS40IDAtNzQuOS0zMy41LTc0LjktNzQuOWwwLTQ2LjUgNTcuMyAwIDAgNDUuOGMwIDEwIDggMTcuOCAxNy44IDE3LjhzMTcuOC03LjkgMTcuOC0xNy44bDAtMTA4LjRjMC00MCAzNC4yLTcyLjEgNzQuNy03Mi4xIDQwLjcgMCA3NC43IDMyLjMgNzQuNyA3Mi42bDAgMjMuNy0zNC4xIDEwLjEtMjIuOS0xMC43IDAtMjAuNmMuMS05LjYtNy45LTE3LjYtMTcuNy0xNy42ek00MzEuNiAzMDkuMWMwIDQxLjQtMzMuNSA3NC45LTc0LjkgNzQuOS00MS4yIDAtNzQuOS0zMy4yLTc0LjktNzQuMmwwLTQ2LjggMjIuOSAxMC43IDM0LjEtMTAuMSAwIDQ3LjFjMCA5LjggOCAxNy42IDE3LjggMTcuNnMxNy44LTcuOSAxNy44LTE3LjZsMC00OCA1Ny4zIDBjLS4xIDQ1LjktLjEgNDYuNC0uMSA0Ni40eiJdfSxjY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3ltZm9ueSIsaWNvbjpbNTEyLDUxMixbXSwiZjgzZCIsIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTM4OS43IDE1MS41Yy0xMS41IC40LTE5LjQtNi40LTE5LjgtMTYuOS0uMy05LjIgNi43LTEzLjQgNi41LTE4LjktLjItNi41LTEwLjItNi44LTEyLjktNi43LTM5LjggMS4zLTQ4LjYgNTctNTguOSAxMTMuOCAyMS40IDMuMiAzNi42LS43IDQ1LjEtNi4yIDEyLTcuNy0zLjMtMTUuNy0xLjQtMjQuNiA0LTE4LjIgMzIuNi0xOSAzMiA1LjMtLjQgMTcuOS0yNS45IDQxLjgtNzcuNiAzNS43LTEwLjggNTkuNS0xOC40IDExNS01OC4yIDE2MS43LTI5IDM0LjUtNTguNCAzOS44LTcxLjYgNDAuMy0yNC42IC45LTQxLTEyLjMtNDEuNi0yOS44LS42LTE3IDE0LjQtMjYuMyAyNC4zLTI2LjYgMjEuOS0uOCAzMC4xIDI1LjcgMTQuOSAzNC0xMi4xIDkuNyAuMSAxMi42IDIuMSAxMi42IDEwLjQtLjQgMTcuMy01LjUgMjIuMi05IDI0LTIwIDMzLjItNTQuOSA0NS40LTExOC4zIDguMi00OS43IDE3LTc4IDE4LjItODItMTYuOS0xMi43LTI3LjEtMjguNi00OS44LTM0LjctMTUuNi00LjItMjUuMS0uNi0zMS44IDcuOC03LjkgMTAtNS4zIDIzIDIuNCAzMC43bDEyLjYgMTRjMTUuNSAxNy45IDI0IDMxLjkgMjAuOCA1MC42LTUuMSAyOS45LTQwLjcgNTIuOS04Mi45IDM5LjktMzYtMTEuMS00Mi43LTM2LjYtMzguNC01MC42IDcuNS0yNC4yIDQyLjQtMTEuNyAzNC42IDEzLjYtMi44IDguNi00LjkgOC43LTYuMyAxMy4xLTQuNiAxNC44IDQxLjggMjguNCA1MS0xLjQgNC41LTE0LjUtNS4zLTIxLjctMjIuMi0zOS45LTI4LjUtMzEuNy0xNi02NS41IDIuOS03OS43IDUyLjgtMzkuNCAxMDAuNSAxNy41IDExMC42IDI1LjggMzcuMi0xMDkgMTAwLjUtMTA1LjUgMTAyLjQtMTA1LjUgMjUuMi0uOCA0NC4yIDEwLjYgNDQuOCAyOC42IC4yIDcuNy00LjIgMjIuNi0xOS41IDIzLjF6Il19LGRjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzYWxlc2ZvcmNlIixpY29uOls2NDAsNTEyLFtdLCJmODNiIiwiTTI0OS40IDI0NS42bC0yNi40IDBjLjctNS4yIDMuMy0xNC4xIDEzLjYtMTQuMSA2LjggMCAxMiAzLjggMTIuNyAxNC4xek0zODYgMjMxLjhjLS41IDAtMTQuMS0xLjgtMTQuMSAyMHMxMy42IDIwIDE0LjEgMjBjMTMgMCAxNC4xLTEzLjUgMTQuMS0yMCAwLTIxLjgtMTMuNy0yMC0xNC4xLTIwek0xNDIuOCAyNTUuNWMtMS4xIC45LTIgMi0yLjUgMy4ycy0uOCAyLjctLjcgNGMwIDQuOCAyLjEgNi4xIDMuMyA3IDQuNyAzLjcgMTUuMSAyLjEgMjAuOSAxbDAtMTYuOWMtNS4zLTEuMS0xNi43LTItMjAuOSAxLjZ6TTY0MC41IDIzMmMwIDg3LjYtODAgMTU0LjQtMTY1LjQgMTM2LjQtMTguNCAzMy03MC43IDcwLjgtMTMyLjIgNDEuNi00MS4yIDk2LTE3Ny45IDkyLjItMjEzLjgtNS4yLTExOS43IDIzLjktMTc4LjgtMTM4LjQtNzUuMy0xOTkuMy0zNC44LTc5LjQgMjIuNi0xNzMuNiAxMTQuMy0xNzMuNiAxOS4xIDAgMzcuOSA0LjQgNTUgMTIuOXMzMiAyMC43IDQzLjYgMzUuOGMyMC43LTIxLjQgNDkuNC0zNC44IDgxLjEtMzQuOCA0Mi4zIDAgNzkgMjMuNSA5OC44IDU4LjYgOTIuOC00MC43IDE5My44IDI4LjIgMTkzLjggMTI3LjV6TTEyMC45IDI2My44YzAtMTEuOC0xMS43LTE1LjItMTcuOS0xNy4yLTUuMy0yLjEtMTMuNC0zLjUtMTMuNC04LjkgMC05LjUgMTctNi43IDI1LjItMi4xIDAgMCAxLjIgLjcgMS42LS41IC4yLS43IDIuNC02LjYgMi42LTcuMyAuMS0uMyAuMS0uNi0uMS0uOHMtLjQtLjUtLjYtLjZjLTEyLjMtNy42LTQwLjctOC41LTQwLjcgMTIuNyAwIDEyLjUgMTEuNSAxNS40IDE3LjkgMTcuMiA0LjcgMS42IDEzLjIgMyAxMy4yIDguNyAwIDQtMy41IDcuMS05LjIgNy4xLTYuOSAwLTEzLjUtMi4yLTE5LTYuMy0uNS0uMi0xLjQtLjctMS42IC43bC0yLjQgNy41Yy0uNSAuOSAuMiAxLjIgLjIgMS40IDEuOCAxLjQgMTAuMyA2LjYgMjIuOCA2LjYgMTMuMiAwIDIxLjQtNy4xIDIxLjQtMTguMWwwIDB6bTMyLTQyLjZjLTEwLjEgMC0xOC43IDMuMi0yMS40IDUuMi0uMSAuMS0uMiAuMi0uMyAuM3MtLjEgLjItLjEgLjQgMCAuMyAwIC40IC4xIC4zIC4yIC40bDIuNiA3LjFjLjEgLjIgLjIgLjUgLjUgLjZzLjUgLjIgLjcgLjFjLjYgMCA2LjgtNCAxNi45LTQgNCAwIDcuMSAuNyA5LjIgMi40IDMuNiAyLjggMy4xIDguMyAzLjEgMTAuNi00LjgtLjMtMTkuMS0zLjQtMjkuNCAzLjgtMi4zIDEuNi00LjMgMy44LTUuNSA2LjNzLTEuOSA1LjQtMS44IDguMmMwIDUuOSAxLjUgMTAuNCA2LjYgMTQuNCAxMi4yIDguMiAzNi4zIDIgMzguMSAxLjQgMS42LS4zIDMuNS0uNyAzLjUtMS45bDAtMzMuOWMwLTQuNiAuMy0yMS42LTIyLjgtMjEuNmwwIC4xem00Ni42LTIxYzAtLjIgMC0uMy0uMS0uNXMtLjEtLjMtLjMtLjQtLjItLjItLjQtLjMtLjMtLjEtLjUtLjFsLTkuOCAwYy0uMiAwLS4zIDAtLjUgLjFzLS4zIC4xLS40IC4zLS4yIC4yLS4zIC40LS4xIC4zLS4xIC41bDAgNzljMCAuMiAwIC4zIC4xIC41cy4xIC4zIC4zIC40IC4yIC4yIC40IC4zIC4zIC4xIC41IC4xbDkuOSAwYy4yIDAgLjMgMCAuNS0uMXMuMy0uMSAuNC0uMyAuMi0uMiAuMy0uNCAuMS0uMyAuMS0uNWwtLjEtNzl6bTU1LjcgMjguOWMtMi4xLTIuMy02LjgtNy41LTE3LjYtNy41LTMuNSAwLTE0LjIgLjItMjAuNyA4LjktNi40IDcuNi02LjYgMTguMS02LjYgMjEuNCAwIDMuMSAuMiAxNC4zIDcuMSAyMS4yIDIuNiAyLjkgOS4xIDguMiAyMi44IDguMiAxMC44IDAgMTYuNS0yLjMgMTguNi0zLjggLjUtLjIgLjctLjcgLjItMS45bC0yLjMtNi44Yy0uMS0uMy0uMy0uNS0uNi0uNnMtLjUtLjItLjgtLjFjLTIuNiAuOS02LjMgMi44LTE1LjMgMi44LTE3LjQgMC0xNi44LTE0LjctMTYuOS0xNi43bDM3LjIgMGMuMyAwIC41LS4xIC43LS4zcy40LS40IC40LS43Yy0uMyAwIDIuMS0xNC43LTYuMS0yNC4ybDAgMHptMzYuNyA1Mi43YzEzLjIgMCAyMS40LTcuMSAyMS40LTE4LjEgMC0xMS44LTExLjctMTUuMi0xNy45LTE3LjItNC4xLTEuNy0xMy40LTMuNC0xMy40LTguOSAwLTMuOCAzLjMtNi40IDguNS02LjQgNS44IC4xIDExLjUgMS42IDE2LjcgNC4yIDAgMCAxLjIgLjcgMS42LS41IC4yLS43IDIuNC02LjYgMi42LTcuMyAuMS0uMyAuMS0uNi0uMS0uOHMtLjQtLjUtLjYtLjZjLTcuOS00LjktMTYuNy00LjktMjAuMi00LjktMTIgMC0yMC41IDcuMy0yMC41IDE3LjYgMCAxMi41IDExLjUgMTUuNCAxNy45IDE3LjIgNi4xIDIgMTMuMiAzLjMgMTMuMiA4LjcgMCA0LTMuNSA3LjEtOS4yIDcuMS02LjkgMC0xMy41LTIuMi0xOS02LjQtLjEtLjEtLjMtLjItLjUtLjJzLS40IDAtLjUgLjEtLjMgLjItLjQgLjMtLjIgLjMtLjIgLjVsLTIuMyA3LjVjLS41IC45IC4yIDEuMiAuMiAxLjQgMS43IDEuNCAxMC4zIDYuNiAyMi44IDYuNmwwIDB6TTM1Ny42IDIyNGMwLS43LS4yLTEuMi0xLjItMS4ybC0xMS44IDBjMC0uMSAuOS04LjkgNC41LTEyLjUgNC4yLTQuMiAxMS44LTEuNiAxMi0xLjYgMS4yIC41IDEuNCAwIDEuNi0uNWwyLjgtNy44Yy43LS45IDAtMS4yLS4yLTEuNC01LjEtMi0xNy40LTIuOS0yNC41IDQuMi01LjUgNS41LTcgMTMuOS04IDE5LjVsLTguNSAwYy0uMyAwLS42IC4yLS44IC40cy0uMyAuNS0uNCAuOGwtMS40IDcuOGMwIC43IC4yIDEuMiAxLjIgMS4ybDguMiAwYy04LjUgNDcuOS04LjcgNTAuMi0xMC4zIDU1LjUtMS4xIDMuNi0zLjMgNi45LTUuOSA3LjgtLjEgMC0zLjkgMS43LTkuNi0uMiAwIDAtLjktLjUtMS40IC43LS4yIC43LTIuNiA2LjgtMi44IDcuNXMwIDEuNCAuNSAxLjRjNS4xIDIgMTMgMS44IDE3LjkgMCA2LjMtMi4zIDkuNy03LjkgMTEuNS0xMi45IDIuOC03LjcgMi44LTkuOCAxMS44LTU5LjdsMTIuMiAwYy4zIDAgLjYtLjIgLjgtLjRzLjMtLjUgLjQtLjhsMS40LTcuOHpNNDExIDI0MGMtLjYtMS43LTUuMS0xOC4xLTI1LjItMTguMS0xNS4yIDAtMjMgMTAtMjUuMiAxOC4xLTEgMy0zLjIgMTQgMCAyMy41IC4xIC4zIDQuNCAxOC4xIDI1LjIgMTguMSAxNSAwIDIyLjktOS42IDI1LjItMTguMSAzLjItOS42IDEtMjAuNSAwLTIzLjV6bTQ1LjQtMTYuN2MtNS0xLjctMTYuNi0xLjktMjIuMSA1LjRsMC00LjVjMC0uMiAwLS4zLS4xLS41cy0uMS0uMy0uMy0uNC0uMi0uMi0uNC0uMy0uMy0uMS0uNS0uMWwtOS40IDBjLS4yIDAtLjMgMC0uNSAuMXMtLjMgLjEtLjQgLjMtLjIgLjItLjMgLjQtLjEgLjMtLjEgLjVsMCA1NS4zYzAgLjIgMCAuMyAuMSAuNXMuMSAuMyAuMyAuNCAuMiAuMiAuNCAuMyAuMyAuMSAuNSAuMWw5LjYgMGMuMiAwIC4zIDAgLjUtLjFzLjMtLjEgLjQtLjMgLjItLjIgLjMtLjQgLjEtLjMgLjEtLjVsMC0yNy44YzAtMi45IC4xLTExLjQgNC41LTE1LjEgNC45LTQuOSAxMi0zLjQgMTMuNC0zLjEgLjMgMCAuNi0uMSAuOC0uM3MuNC0uNCAuNi0uN2MxLjItMi42IDIuMi01LjMgMy4xLTggLjEtLjMgLjEtLjUgMC0uOHMtLjMtLjUtLjUtLjZsMCAwem00Ni44IDU0LjFsLTIuMS03LjNjLS41LTEuMi0xLjQtLjctMS40LS43LTQuMiAxLjgtMTAuMSAxLjktMTEuMyAxLjktNC42IDAtMTcuMi0xLjEtMTcuMi0xOS44IDAtNi4yIDEuOC0xOS44IDE2LjUtMTkuOCAzLjktLjEgNy44IC41IDExLjUgMS42IDAgMCAuOSAuNSAxLjItLjcgLjktMi42IDEuNi00LjUgMi42LTcuNSAuMi0uOS0uNS0xLjItLjctMS4yLTExLjYtMy45LTIyLjMtMi41LTI3LjggMC0xLjYgLjctMTYuMiA2LjUtMTYuMiAyNy41IDAgMi45LS42IDMwLjEgMjguOSAzMC4xIDUuMyAwIDEwLjYtMSAxNS41LTIuOCAuMi0uMiAuNC0uNCAuNS0uNnMuMS0uNSAwLS44bDAgMHptNTMuOS0zOS41Yy0uOC0zLTUuNC0xNi4yLTIyLjMtMTYuMi0xNiAwLTIzLjUgMTAuMS0yNS42IDE4LjYtMS4yIDMuOC0xLjcgNy44LTEuNyAxMS44IDAgMjUuOSAxOC44IDI5LjQgMjkuOSAyOS40IDEwLjggMCAxNi41LTIuMyAxOC42LTMuOCAuNS0uMiAuNy0uNyAuMi0xLjlsLTIuNC02LjhjLS4xLS4zLS4zLS41LS42LS42cy0uNi0uMi0uOC0uMWMtMi42IC45LTYuMyAyLjgtMTUuMyAyLjgtMTcuNCAwLTE2LjktMTQuNy0xNi45LTE2LjdsMzcuMiAwYy4zIDAgLjUtLjEgLjctLjNzLjQtLjQgLjQtLjdjLS4yIDAgLjktNy4xLTEuNC0xNS41bDAgMHptLTIzLjMtNi40Yy0xMC4zIDAtMTMgOS0xMy42IDE0LjFsMjYuNCAwYy0uOS0xMS45LTcuNi0xNC4xLTEyLjctMTQuMWwwIDB6Il19LGZjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzb3VyY2V0cmVlIixpY29uOls0NDgsNTEyLFtdLCJmN2QzIiwiTTQyNy40IDIwM2MwLTExMi4xLTkwLjktMjAzLTIwMy0yMDMtMTEyLjEtLjItMjAzIDkwLjYtMjAzLjIgMjAyLjYtLjEgNDMgMTMuNSA4NC44IDM4LjcgMTE5LjZzNjAuOSA2MC42IDEwMS44IDczLjhsMCAxMDEuN2MwIDMuOCAxLjUgNy40IDQuMiAxMC4xczYuMyA0LjIgMTAuMSA0LjJsOTYuNCAwYzMuOCAwIDcuNC0xLjUgMTAuMS00LjJzNC4yLTYuMyA0LjItMTAuMWwwLTEwMS42YzQwLjgtMTMuMiA3Ni41LTM5IDEwMS43LTczLjdzMzguOS03Ni41IDM5LTExOS40em0tMjcxLjYgMGMwLTkwLjggMTM3LjMtOTAuOCAxMzcuMyAwLS4xIDg5LjktMTM3LjMgOTEtMTM3LjMgMHoiXX0sdWN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImxpbmtlZGluLWluIixpY29uOls0NDgsNTEyLFtdLCJmMGUxIiwiTTEwMC4zIDQ0OGwtOTIuOSAwIDAtMjk5LjEgOTIuOSAwIDAgMjk5LjF6TTUzLjggMTA4LjFDMjQuMSAxMDguMSAwIDgzLjUgMCA1My44IDAgMzkuNSA1LjcgMjUuOSAxNS44IDE1LjhzMjMuOC0xNS44IDM4LTE1LjggMjcuOSA1LjcgMzggMTUuOCAxNS44IDIzLjggMTUuOCAzOGMwIDI5LjctMjQuMSA1NC4zLTUzLjggNTQuM3pNNDQ3LjkgNDQ4bC05Mi43IDAgMC0xNDUuNmMwLTM0LjctLjctNzkuMi00OC4zLTc5LjItNDguMyAwLTU1LjcgMzcuNy01NS43IDc2LjdsMCAxNDguMS05Mi44IDAgMC0yOTkuMSA4OS4xIDAgMCA0MC44IDEuMyAwYzEyLjQtMjMuNSA0Mi43LTQ4LjMgODcuOS00OC4zIDk0IDAgMTExLjMgNjEuOSAxMTEuMyAxNDIuM2wwIDE2NC4zLS4xIDB6Il19LHBjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJodG1sNSIsaWNvbjpbMzg0LDUxMixbXSwiZjEzYiIsIk0wIDMyTDM0LjkgNDI3LjggMTkxLjUgNDgwIDM0OS4xIDQyNy44IDM4NCAzMiAwIDMyek0zMDguMiAxNTkuOWwtMTgzLjggMCA0LjEgNDkuNCAxNzUuNiAwLTEzLjYgMTQ4LjQtOTcuOSAyNyAwIC4zLTEuMSAwLTk4LjctMjcuMy02LTc1LjggNDcuNyAwIDMuNSAzOC4xIDUzLjUgMTQuNSA1My43LTE0LjUgNi02Mi4yLTE2Ni45IDAtMTIuOC0xNDUuNiAyNDEuMSAwLTQuNCA0Ny43eiJdfSxoY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicnVzdCIsaWNvbjpbNTEyLDUxMixbXSwiZTA3YSIsIk01MDguNSAyNDkuOGwtMjEuOC0xMy41Yy0uMi0yLS4zLTMuOS0uNS01LjlsMTguNy0xNy41Yy45LS45IDEuNi0xLjkgMi0zLjFzLjUtMi41IC4yLTMuNy0uOC0yLjQtMS42LTMuMy0xLjgtMS43LTMtMi4xbC0yNC05Yy0uNS0xLjktMS4xLTMuOC0xLjctNS42bDE1LTIwLjhjLjctMSAxLjItMi4yIDEuMy0zLjRzMC0yLjUtLjUtMy43LTEuMi0yLjItMi4yLTIuOS0yLjEtMS4zLTMuNC0xLjVsLTI1LjQtNC4yYy0uOS0xLjctMS44LTMuNC0yLjctNS4ybDEwLjctMjMuNGMuNS0xLjEgLjctMi40IC42LTMuNnMtLjUtMi40LTEuMi0zLjUtMS42LTEuOS0yLjgtMi41LTIuNC0uOC0zLjYtLjhsLTI1LjggLjljLTEuMi0xLjUtMi40LTIuOS0zLjYtNC40TDQzOSA4MS44Yy4zLTEuMiAuMy0yLjUtLjEtMy43cy0xLTIuMy0xLjktMy4yLTItMS41LTMuMi0xLjktMi41LS40LTMuNy0uMUw0MDUgNzguOWMtMS40LTEuMi0yLjktMi40LTQuNC0zLjZsLjktMjUuOGMuMS0xLjMtLjItMi41LS44LTMuNnMtMS40LTIuMS0yLjUtMi44LTIuMi0xLjEtMy41LTEuMi0yLjUgLjEtMy43IC42TDM2Ny43IDUzLjJjLTEuNy0uOS0zLjQtMS44LTUuMS0yLjdsLTQuMi0yNS40Yy0uMi0xLjItLjctMi40LTEuNS0zLjRzLTEuOC0xLjctMi45LTIuMi0yLjQtLjctMy43LS41LTIuNCAuNi0zLjQgMS4zTDMyNiAzNS4zYy0xLjktLjYtMy44LTEuMS01LjYtMS43bC05LTI0Yy0uNC0xLjItMS4yLTIuMi0yLjEtM3MtMi4xLTEuNC0zLjMtMS42LTIuNS0uMi0zLjcgLjItMi4zIDEuMS0zLjEgMkwyODEuNiAyNS45Yy0yLS4yLTMuOS0uNC01LjktLjVMMjYyLjMgMy41Yy0uNy0xLjEtMS42LTEuOS0yLjctMi42cy0yLjMtLjktMy42LS45LTIuNSAuMy0zLjYgLjktMiAxLjUtMi43IDIuNkwyMzYuMiAyNS4zYy0yIC4yLTMuOSAuMy01LjkgLjZMMjEyLjkgNy4xYy0uOS0uOS0xLjktMS42LTMuMS0ycy0yLjUtLjUtMy43LS4yLTIuNCAuOC0zLjMgMS42LTEuNyAxLjgtMi4xIDNsLTkgMjRjLTEuOSAuNi0zLjggMS4xLTUuNyAxLjdsLTIwLjgtMTVjLTEtLjctMi4yLTEuMi0zLjQtMS4zcy0yLjUgMC0zLjcgLjUtMi4yIDEuMi0yLjkgMi4yLTEuMyAyLjEtMS41IDMuNGwtNC4yIDI1LjRjLTEuNyAuOS0zLjQgMS44LTUuMiAyLjdMMTIwLjkgNDIuNmMtMS4xLS41LTIuNC0uNy0zLjctLjZzLTIuNSAuNS0zLjUgMS4yLTEuOSAxLjctMi41IDIuOC0uOCAyLjQtLjggMy42bC45IDI1LjhjLTEuNSAxLjItMyAyLjQtNC40IDMuNkw4MS44IDczYy0xLjItLjMtMi41LS4zLTMuNyAuMXMtMi4zIDEtMy4yIDEuOS0xLjUgMi0xLjkgMy4yLS40IDIuNS0uMSAzLjdMNzguOSAxMDdjLTEuMiAxLjQtMi40IDIuOS0zLjYgNC40bC0yNS44LS45Yy0xLjMgMC0yLjUgLjItMy42IC44cy0yLjEgMS40LTIuOCAyLjQtMS4xIDIuMi0xLjIgMy41IC4xIDIuNSAuNiAzLjZsMTAuNyAyMy40Yy0uOSAxLjctMS44IDMuNC0yLjcgNS4ybC0yNS40IDQuMWMtMS4yIC4yLTIuNCAuNy0zLjQgMS41cy0xLjcgMS44LTIuMiAyLjktLjcgMi40LS41IDMuNyAuNiAyLjQgMS4zIDMuNGwxNSAyMC44Yy0uNiAxLjktMS4xIDMuOC0xLjcgNS43bC0yNCA5Yy0xLjIgLjQtMi4yIDEuMi0zIDIuMXMtMS40IDIuMS0xLjYgMy4zLS4yIDIuNSAuMiAzLjcgMS4xIDIuMyAyIDMuMWwxOC43IDE3LjVjLS4yIDItLjQgMy45LS42IDUuOUwzLjUgMjQ5LjhjLTEuMSAuNy0xLjkgMS42LTIuNiAyLjdzLS45IDIuMy0uOSAzLjYgLjMgMi41IC45IDMuNiAxLjUgMiAyLjYgMi43bDIxLjggMTMuNWMuMiAyIC4zIDMuOSAuNiA1LjlMNy4xIDI5OS4xYy0uOSAuOS0xLjYgMS45LTIgMy4xcy0uNSAyLjUtLjIgMy43IC44IDIuNCAxLjYgMy4zIDEuOCAxLjcgMyAyLjFsMjQgOWMuNiAxLjkgMS4xIDMuOCAxLjcgNS42bC0xNSAyMC44Yy0uNyAxLTEuMiAyLjItMS4zIDMuNHMwIDIuNSAuNSAzLjcgMS4yIDIuMiAyLjIgMi45IDIuMSAxLjMgMy40IDEuNWwyNS40IDQuMmMuOSAxLjcgMS44IDMuNCAyLjcgNS4xTDQyLjYgMzkxLjFjLS41IDEuMS0uNyAyLjQtLjYgMy42cy41IDIuNSAxLjIgMy41Yy43IDEuMSAxLjYgMS45IDIuNyAyLjVzMi40IC44IDMuNiAuOGwyNS44LS45YzEuMiAxLjUgMi40IDIuOSAzLjYgNC40TDczIDQzMC4yYy0uMyAxLjItLjMgMi41IC4xIDMuN3MxIDIuMyAxLjkgMy4yIDIgMS41IDMuMiAxLjkgMi41IC40IDMuNyAuMWwyNS4yLTUuOWMxLjUgMS4yIDIuOSAyLjQgNC40IDMuNmwtLjkgMjUuOGMwIDEuMyAuMiAyLjUgLjggMy42czEuNCAyLjEgMi41IDIuOCAyLjIgMS4xIDMuNSAxLjIgMi41LS4xIDMuNi0uNmwyMy40LTEwLjdjMS43IC45IDMuNCAxLjggNS4xIDIuN2w0LjIgMjUuNGMuMiAxLjIgLjcgMi40IDEuNSAzLjRzMS44IDEuOCAyLjkgMi4yIDIuNCAuNyAzLjcgLjUgMi40LS42IDMuNC0xLjNsMjAuOC0xNWMxLjkgLjYgMy44IDEuMSA1LjYgMS43bDkgMjRjLjQgMS4yIDEuMiAyLjIgMi4xIDNzMi4xIDEuNCAzLjMgMS42IDIuNSAuMiAzLjctLjIgMi4zLTEuMSAzLjEtMmwxNy41LTE4LjdjMiAuMiAzLjkgLjQgNS45IC42bDEzLjUgMjEuOGMuNyAxLjEgMS42IDEuOSAyLjcgMi42czIuMyAuOSAzLjYgLjkgMi41LS4zIDMuNi0uOSAyLTEuNSAyLjctMi42bDEzLjUtMjEuOGMyLS4yIDMuOS0uMyA1LjktLjZsMTcuNSAxOC43Yy45IC45IDEuOSAxLjYgMy4xIDJzMi41IC41IDMuNyAuMiAyLjQtLjggMy4zLTEuNiAxLjctMS44IDIuMS0zbDktMjRjMS45LS42IDMuOC0xLjEgNS42LTEuN2wyMC44IDE1YzEgLjcgMi4yIDEuMiAzLjQgMS4zczIuNSAwIDMuNy0uNSAyLjItMS4yIDIuOS0yLjIgMS4zLTIuMSAxLjUtMy40bDQuMi0yNS40YzEuNy0uOSAzLjQtMS44IDUuMS0yLjdsMjMuNCAxMC43YzEuMSAuNSAyLjQgLjcgMy42IC42czIuNC0uNSAzLjUtMS4yIDEuOS0xLjYgMi41LTIuOCAuOC0yLjQgLjgtMy42bC0uOS0yNS44YzEuNS0xLjIgMi45LTIuNCA0LjQtMy42bDI1LjIgNS45YzEuMiAuMyAyLjUgLjMgMy43LS4xczIuMy0xIDMuMi0xLjkgMS41LTIgMS45LTMuMiAuNC0yLjUgLjEtMy43TDQzMy4xIDQwNWMxLjItMS40IDIuNC0yLjkgMy42LTQuNGwyNS44IC45YzEuMyAuMSAyLjUtLjIgMy42LS44czIuMS0xLjQgMi44LTIuNWMuNy0xIDEuMS0yLjIgMS4yLTMuNXMtLjEtMi41LS42LTMuNmwtMTAuNy0yMy40Yy45LTEuNyAxLjgtMy40IDIuNy01LjFsMjUuNC00LjJjMS4yLS4yIDIuNC0uNyAzLjQtMS41czEuOC0xLjggMi4yLTIuOSAuNy0yLjQgLjUtMy43LS42LTIuNC0xLjMtMy40bC0xNS0yMC44Yy42LTEuOSAxLjEtMy44IDEuNy01LjZsMjQtOWMxLjItLjQgMi4yLTEuMiAzLTIuMXMxLjQtMi4xIDEuNi0zLjMgLjItMi41LS4yLTMuNy0xLjEtMi4zLTItMy4xbC0xOC43LTE3LjVjLjItMS45IC40LTMuOSAuNi01LjlsMjEuOC0xMy41YzEuMS0uNyAxLjktMS42IDIuNi0yLjdzLjktMi4zIC45LTMuNi0uMy0yLjUtLjktMy42LTEuNS0yLTIuNi0yLjdsMCAwem0tMTUxIDEyOS4xYy0zLjYtLjgtNy40LS4xLTEwLjUgMS45cy01LjMgNS4yLTYgOC44bC03LjYgMzUuN2MtMjQuNiAxMS4xLTUxLjMgMTYuOC03OC4zIDE2LjdzLTUzLjYtNi4xLTc4LjEtMTcuNGwtNy42LTM1LjdjLS40LTEuOC0xLjEtMy41LTIuMS01cy0yLjQtMi44LTMuOS0zLjgtMy4yLTEuNy01LTItMy42LS4zLTUuNCAuMWwtMzEuNSA2LjhjLTUuOC02LTExLjMtMTIuNS0xNi4zLTE5LjJsMTUzLjIgMGMxLjcgMCAyLjktLjMgMi45LTEuOWwwLTU0LjJjMC0xLjYtMS4yLTEuOS0yLjktMS45bC00NC44IDAgMC0zNC40IDQ4LjUgMGM0LjQgMCAyMy43IDEuMyAyOS44IDI1LjkgMS45IDcuNSA2LjIgMzIuMSA5LjEgNDAgMi45IDguOCAxNC42IDI2LjUgMjcuMSAyNi41bDc5IDBjLTUuMyA3LjEtMTEuMSAxMy44LTE3LjMgMjAuMWwtMzIuMS02Ljl6bTI1LjggMzQuNWMwIDMtLjkgNi0yLjYgOC41cy00IDQuNS02LjggNS42LTUuOCAxLjUtOC44IC45LTUuNy0yLTcuOC00LjItMy42LTQuOC00LjItNy44LS4zLTYgLjgtOC44IDMuMS01LjIgNS42LTYuOSA1LjQtMi42IDguNS0yLjZsLjQgMGM0IC4xIDcuNyAxLjggMTAuNSA0LjZzNC4zIDYuNyA0LjMgMTAuNmwuMSAwem0tMjI1LjYtLjdjMCAzLS45IDYtMi42IDguNXMtNC4xIDQuNS02LjggNS42LTUuOCAxLjUtOC44IC45LTUuNy0yLTcuOC00LjItMy42LTQuOC00LjItNy44LS4zLTYgLjktOC44IDMuMS01LjIgNS42LTYuOCA1LjQtMi42IDguNS0yLjZsLjUgMGM0IC4xIDcuNyAxLjggMTAuNSA0LjZzNC4zIDYuNyA0LjMgMTAuNmwuMSAwek02OS42IDIzNC4ybDMyLjgtMTQuNmMxLjctLjcgMy4yLTEuOCA0LjQtMy4xczIuMi0yLjkgMi45LTQuNiAxLTMuNSAuOS01LjMtLjUtMy42LTEuMi01LjNsLTYuOC0xNS4yIDI2LjYgMCAwIDExOS43LTUzLjYgMGMtNi42LTIzLjItOC43LTQ3LjYtNi4xLTcxLjZ6TTU4LjMgMTk4LjFjMC0yIC40LTQgMS4yLTUuOHMxLjktMy41IDMuMy00LjkgMy4xLTIuNSA0LjktMy4zIDMuOC0xLjIgNS44LTEuMmwuNSAwYzMgLjEgNS45IDEgOC4zIDIuOHM0LjMgNC4xIDUuNCA2LjkgMS4zIDUuOCAuNyA4LjgtMi4xIDUuNi00LjMgNy43LTQuOSAzLjUtNy44IDQuMS02IC4yLTguNy0uOS01LjEtMy4xLTYuOC01LjYtMi41LTUuNC0yLjUtOC40bDAgMHptMTU1LjIgMjQuNWwwLTM1LjMgNjMuMyAwYzMuMyAwIDIzLjEgMy44IDIzLjEgMTguNiAwIDEyLjMtMTUuMiAxNi43LTI3LjcgMTYuN2wtNTguNyAwek0zOTkgMzA2LjdjLTkuOCAxLjEtMjAuNi00LjEtMjItMTAuMS01LjgtMzIuNS0xNS40LTM5LjQtMzAuNi01MS40IDE4LjktMTIgMzguNS0yOS42IDM4LjUtNTMuMyAwLTI1LjUtMTcuNS00MS42LTI5LjQtNDkuNS0xNi44LTExLTM1LjMtMTMuMi00MC4zLTEzLjJsLTE5OC45IDBjMjcuNS0zMC43IDY0LjQtNTEuNSAxMDQuOS01OS4ybDIzLjUgMjQuNmMxLjMgMS4zIDIuOCAyLjQgNC40IDMuMXMzLjUgMS4xIDUuMyAxLjIgMy42LS4zIDUuMy0uOSAzLjItMS43IDQuNi0yLjlsMjYuMy0yNWMyNi44IDUgNTIuMSAxNS44IDc0LjMgMzEuNnM0MC42IDM2LjIgNTQuMSA1OS45bC0xOCA0MC42Yy0xLjUgMy40LTEuNSA3LjItLjIgMTAuNnMzLjkgNi4yIDcuMyA3LjdsMzQuNiAxNS4zYzEuMSAxMC44IDEuMiAyMS43IC40IDMyLjVsLTE5LjMgMGMtMS45IDAtMi43IDEuMy0yLjcgMy4xbDAgOC44YzAgMjAuOC0xMS43IDI1LjMtMjIgMjYuNXpNMjQwIDYwLjJjMC00IDEuNi03LjkgNC41LTEwLjdzNi43LTQuNSAxMC43LTQuNWwuNCAwYzMgLjEgNS45IDEgOC40IDIuOHM0LjMgNC4xIDUuNCA2LjkgMS4zIDUuOCAuNyA4LjgtMi4xIDUuNi00LjMgNy43LTQuOSAzLjUtNy44IDQtNiAuMi04LjctLjktNS4xLTMuMS02LjgtNS42LTIuNS01LjQtMi41LTguNHpNNDM2LjggMjE0Yy0yIDAtNC0uNC01LjgtMS4ycy0zLjUtMS45LTQuOS0zLjMtMi41LTMuMS0zLjMtNC45LTEuMi0zLjgtMS4yLTUuOCAuNC00IDEuMi01LjggMS45LTMuNSAzLjMtNC45IDMuMS0yLjUgNC45LTMuMyAzLjgtMS4yIDUuOC0xLjJsLjQgMGM0IC4xIDcuOSAxLjcgMTAuNyA0LjZzNC40IDYuOCA0LjMgMTAuOC0xLjcgNy45LTQuNiAxMC43LTYuOCA0LjQtMTAuOCA0LjN6Il19LG1jdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJob3JuYmlsbCIsaWNvbjpbNTEyLDUxMixbXSwiZjU5MiIsIk03Ni44IDM3MC4zYzEgNy44LS40IDE1LjgtNC4xIDIyLjhzLTkuNiAxMi42LTE2LjcgMTYuMS0xNS4xIDQuNy0yMi45IDMuMy0xNS01LjEtMjAuNi0xMC43LTkuMi0xMi45LTEwLjUtMjAuNyAwLTE1LjggMy42LTIyLjkgOS4zLTEyLjggMTYuMy0xNi41IDE1LTUgMjIuOS0zLjljLTc4LjMtMTExLjMgNTItMTkwLjUgNTItMTkwLjUtNS45IDQzLTguMiA5MS4yLTguMiA5MS4yLTY3LjMgNDEuNSAuOSA2NC4xIDM5LjggNzIuOSA5LjkgMjcgMjcuOCA1MC4yIDUxLjQgNjYuN3M1MS42IDI1LjMgODAuMyAyNS4zYzEuOSAwIDMuOC0uMiA1LjctLjNsLjEgMTguOWMtOTkuMiAxLjQtMTU4LjctMjkuMS0xODguOS01MS42em0xMDgtMzI3LjdjLjktNy4yLS4yLTE0LjYtMy40LTIxLjItMy02LjItNy42LTExLjUtMTMuNC0xNS4zcy0xMi41LTUuOS0xOS40LTYuMi0xMy44IDEuNC0xOS44IDQuNy0xMS4xIDguMy0xNC41IDE0LjMtNS4yIDEyLjgtNSAxOS43IDIuMiAxMy43IDUuOSAxOS41IDguOSAxMC42IDE1LjEgMTMuNiAxMy4xIDQuNCAyMCAzLjljLTIyLjYgMjkuOS01My44IDg5LjYtNTIuNCAxOTBsMjEuOC0uMmMwLS45LS4xLTEuOC0uMS0yLjcgMC0yOCA4LjQtNTUuMyAyNC4xLTc4LjVzMzcuOS00MS4yIDYzLjgtNTEuNmM4LTM3LjcgMzAuNy0xMTQuMyA3My44LTQ0LjMgMCAwIDQ4LjEgMi40IDkxLjIgOC4yIDAgMC03Ny44LTEyOC0xODcuNi01NC4xbDAgMHpNNDg5IDE3Ni44YzYuMy0zIDExLjctNy43IDE1LjUtMTMuNnM1LjktMTIuNyA2LjEtMTkuOC0xLjYtMTQtNS4yLTIwLTguNy0xMS0xNC45LTE0LjMtMTMuMi00LjgtMjAuMi00LjQtMTMuOCAyLjgtMTkuNSA2LjktMTAuMiA5LjYtMTMgMTYuMS0zLjcgMTMuNi0yLjcgMjAuNWMtMzEuNy0yMS45LTg5LjgtNDkuMS0xODMuNC00Ny43bC4xIDIyLjVjMi43LS4yIDUuNC0uNCA4LjEtLjQgMjguMSAwIDU1LjYgOC41IDc4LjkgMjQuM3M0MS4yIDM4LjMgNTEuNiA2NC41YzM5LjEgOSAxMDUuMSAzMS42IDM4LjUgNzIuNSAwIDAtMi4zIDQ4LjEtOC4yIDkxLjIgMCAwIDEzMy40LTgxLjIgNDktMTk0LjYgNi42IC42IDEzLjMtLjYgMTkuMy0zLjVsMCAwek0zNzQuNCA0MzYuMmMyMS40LTMyLjUgNDYuNC04OS43IDQ1LjEtMTc5LjdsLTE5LjUgLjFjLjEgMi4xIC4zIDQuMSAuMyA2LjIgMCAyOC42LTguOCA1Ni41LTI1LjEgODBzLTM5LjUgNDEuNC02Ni4zIDUxLjRjLTguOSAzOS0zMS40IDEwNi43LTcyLjggMzkuNSAwIDAtNDguMS0yLjMtOTEuMi04LjIgMCAwIDc5LjkgMTMxLjMgMTkxLjkgNTEgLjMgNC45IDEuNSA5LjYgMy42IDE0IDIuOSA2LjEgNy41IDExLjQgMTMuMSAxNS4xczEyLjIgNiAxOSA2LjQgMTMuNi0xLjEgMTkuNi00LjIgMTEuMS03LjggMTQuNy0xMy42IDUuNi0xMi40IDUuNy0xOS4yLTEuNS0xMy41LTQuOC0xOS40LTguMi0xMC45LTE0LjEtMTQuMy0xMi42LTUuMi0xOS40LTUuMWwwLS4xeiJdfSxnY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicGhwIixpY29uOls2NDAsNTEyLFtdLCJmNDU3IiwiTTMyMCAxMDQuNWMxNzEuNCAwIDMwMy4yIDcyLjIgMzAzLjIgMTUxLjVTNDkxLjMgNDA3LjUgMzIwIDQwNy41QzE0OC42IDQwNy41IDE2LjggMzM1LjMgMTYuOCAyNTZTMTQ4LjcgMTA0LjUgMzIwIDEwNC41em0wLTE2LjhDMTQzLjMgODcuNyAwIDE2MyAwIDI1NlMxNDMuMyA0MjQuMyAzMjAgNDI0LjMgNjQwIDM0OSA2NDAgMjU2IDQ5Ni43IDg3LjcgMzIwIDg3Ljd6TTIxOC4yIDI0Mi41Yy03LjkgNDAuNS0zNS44IDM2LjMtNzAuMSAzNi4zbDEzLjctNzAuNmMzOCAwIDYzLjgtNC4xIDU2LjQgMzQuM3pNOTcuNCAzNTAuM2wzNi43IDAgOC43LTQ0LjhjNDEuMSAwIDY2LjYgMyA5MC4yLTE5LjEgMjYuMS0yNCAzMi45LTY2LjcgMTQuMy04OC4xLTkuNy0xMS4yLTI1LjMtMTYuNy00Ni41LTE2LjdsLTcwLjcgMC0zMi43IDE2OC43ek0yODMuMSAxMzYuN2wzNi41IDAtOC43IDQ0LjhjMzEuNSAwIDYwLjctMi4zIDc0LjggMTAuNyAxNC44IDEzLjYgNy43IDMxLTguMyAxMTMuMWwtMzcgMGMxNS40LTc5LjQgMTguMy04NiAxMi43LTkyLTUuNC01LjgtMTcuNy00LjYtNDcuNC00LjZsLTE4LjggOTYuNi0zNi41IDAgMzIuNy0xNjguNnpNNTA1IDI0Mi41Yy04IDQxLjEtMzYuNyAzNi4zLTcwLjEgMzYuM2wxMy43LTcwLjZjMzguMiAwIDYzLjgtNC4xIDU2LjQgMzQuM3pNMzg0LjIgMzUwLjNsMzYuOCAwIDguNy00NC44YzQzLjIgMCA2Ny4xIDIuNSA5MC4yLTE5LjEgMjYuMS0yNCAzMi45LTY2LjcgMTQuMy04OC4xLTkuNy0xMS4yLTI1LjMtMTYuNy00Ni41LTE2LjdsLTcwLjcgMC0zMi44IDE2OC43eiJdfSx4Y3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGlzcXVzIixpY29uOls1NzYsNTEyLFtdLCJlN2Q1IiwiTTI5MC4yIDUxMmMtNjIuNiAwLTExOS45LTIyLjktMTY0LjItNjAuOEwxNyA0NjYuMSA1OS4xIDM2Mi4yYy0xNC43LTMyLjQtMjIuOS02OC4zLTIyLjktMTA2LjIgMC0xNDEuNCAxMTMuNy0yNTYgMjU0LTI1NiAxNDAuMyAwIDI1NCAxMTQuNiAyNTQgMjU2IDAgMTQxLjQtMTEzLjcgMjU2LTI1NCAyNTZ6TTQyOC45IDI1NS4zbDAtLjdDNDI4LjkgMTgwLjcgMzc2LjggMTI4IDI4NyAxMjhsLTk3IDAgMCAyNTYgOTUuNiAwYzkwLjUgMCAxNDMuNC01NC45IDE0My40LTEyOC43ek0yODggMzIxLjFsLTI4LjQgMCAwLTEzMC4yIDI4LjQgMGM0MS43IDAgNjkuMyAyMy44IDY5LjMgNjQuN2wwIC43YzAgNDEuMy0yNy43IDY0LjctNjkuMyA2NC43eiJdfSxiY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiNTAwcHgiLGljb246WzM4NCw1MTIsW10sImYyNmUiLCJNNzEuOCAzNDQuM2MtNi41LTE0LjItNi45LTE4LjMgNy40LTIzLjEgMjUuNi04IDggOS4yIDQzLjIgNDkuMmwuMyAwIDAtOTMuOWMxLjItNTAuMiA0NC05Mi4yIDk3LjctOTIuMiA1My45IDAgOTcuNyA0My41IDk3LjcgOTYuOCAwIDYzLjQtNjAuOCAxMTMuMi0xMjguNSA5My4zLTEwLjUtNC4yLTIuMS0zMS43IDguNS0yOC42IDUzIDAgODkuNC0xMC4xIDg5LjQtNjQuNCAwLTYxLTc3LjEtODkuNi0xMTYuOS00NC42LTIzLjUgMjYuNC0xNy42IDQyLjEtMTcuNiAxNTcuNiA1MC43IDMxIDExOC4zIDIyIDE2MC40LTIwLjEgMjQuOC0yNC44IDM4LjUtNTggMzguNS05MyAwLTM1LjItMTMuOC02OC4yLTM4LjgtOTMuMy0yNC44LTI0LjgtNTcuOC0zOC41LTkzLjMtMzguNVMxNTEgMTYzLjMgMTI2LjMgMTg4Yy0uMyAuMy0xNiAxNi41LTIxLjIgMjMuOWwtLjUgLjZjLTMuMyA0LjctNi4zIDkuMS0yMC4xIDYuMS02LjktMS43LTE0LjMtNS44LTE0LjMtMTEuOEw3MC4yIDIwYzAtNSAzLjktMTAuNSAxMC41LTEwLjVMMzIyIDkuNWM4LjMgMCA4LjMgMTEuNiA4LjMgMTUuMSAwIDMuOSAwIDE1LjEtOC4zIDE1LjFsLTIyMy4yIDAgMCAxMzIuOSAuMyAwYzEwNC4yLTEwOS44IDI4Mi44LTM2IDI4Mi44IDEwOC45IDAgMTc4LjEtMjQ0LjggMjIwLjMtMzEwLjEgNjIuOHpNMTM1LjEgODMuNWMtLjUgNC4yIDQuNiAyNC41IDE0LjYgMjAuNiAxMjQuOC00Ny41IDIwMi44IDQwLjQgMjA5LjQgNDAuNCA0LjggMCAyMi44LTE1LjMgMTQuMy0yMi44LTkzLjItODktMjM0LjUtNTctMjM4LjMtMzguMnpNMzYxLjUgNDE0LjdjLTExMCAxMDkuOS0yOTkgNjAuOC0zMzItMTA0LjIgMC0xMi4yLTMwLjQtNy40LTI4LjkgMy4zIDI0IDE3My40IDI0NiAyNTYuOSAzODEuNiAxMjEuMyA2LjktNy44LTEyLjYtMjguNC0yMC43LTIwLjR6TTE4Mi4xIDMwNi42YzAgNCA0LjMgNy4zIDUuNSA4LjUgMyAzIDYuMSA0LjQgOC41IDQuNCAzLjggMCAyLjYgLjIgMjIuMy0xOS41IDE5LjYgMTkuMyAxOS4xIDE5LjUgMjIuMyAxOS41IDUuNCAwIDE4LjUtMTAuNCAxMC43LTE4LjJsLTE3LjMtMTcuMyAxOC4yLTE4LjJjNi4zLTYuOC0xMC4xLTIxLjgtMTYuMi0xNS43TDIxOC4yIDI2OGMtMTguNi0xOC44LTE4LjQtMTkuNS0yMS41LTE5LjUtNSAwLTE4IDExLjctMTIuNCAxNy4zTDIwMi41IDI4NGMtMTguMSAxNy45LTIwLjQgMTkuMi0yMC40IDIyLjZ6Il19LHZjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhZmZpbGlhdGV0aGVtZSIsaWNvbjpbNTEyLDUxMixbXSwiZjM2YiIsIk0xNTkuNyAyMzcuNEMxMDguNCAzMDguMyA0My4xIDM0OC4yIDE0IDMyNi42LTE1LjIgMzA0LjkgMi44IDIzMCA1NC4yIDE1OS4xIDEwNS41IDg4LjIgMTcwLjggNDguMyAxOTkuOSA2OS45czExLjEgOTYuNi00MC4yIDE2Ny41em0zNTEuMi01Ny4zYy03My44IDEyMy40LTE5MS45IDE4Ny43LTI2NC41IDE0My42LTI1LTE1LjItNDEuMy00MS4yLTQ5LTczLjgtMzMuNiA2NC44LTkyLjggMTEzLjgtMTY0LjEgMTMzLjIgNDkuOCA1OS4zIDEyNC4xIDk2LjkgMjA3IDk2LjkgMTUwIDAgMjcxLjYtMTIzLjEgMjcxLjYtMjc0LjkgLjEtOC41LS4zLTE2LjgtMS0yNXoiXX0seWN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InJlZC1yaXZlciIsaWNvbjpbNDQ4LDUxMixbXSwiZjNlMyIsIk0zNTMuMiAzMkw5NC44IDMyQzQyLjQgMzIgMCA3NC40IDAgMTI2LjhMMCAzODUuMkMwIDQzNy42IDQyLjQgNDgwIDk0LjggNDgwbDI1OC40IDBjNTIuNCAwIDk0LjgtNDIuNCA5NC44LTk0LjhsMC0yNTguNEM0NDggNzQuNCA0MDUuNiAzMiAzNTMuMiAzMnpNMTQ0LjkgMjAwLjlsMCA1Ni4zYzAgMjctMjEuOSA0OC45LTQ4LjkgNDguOWwwLTE1NC4yYzAtMTMuMiAxMC43LTIzLjkgMjMuOS0yMy45bDE1NC4yIDBjMCAyNy0yMS45IDQ4LjktNDguOSA0OC45bC01Ni4zIDBjLTEyLjMtLjYtMjQuNiAxMS42LTI0IDI0em0xNzYuMyA3MmwtNTYuMyAwYy0xMi4zLS42LTI0LjYgMTEuNi0yNCAyNGwwIDU2LjNjMCAyNy0yMS45IDQ4LjktNDguOSA0OC45bDAtMTU0LjJjMC0xMy4yIDEwLjctMjMuOSAyMy45LTIzLjlsMTU0LjIgMGMwIDI3LTIxLjkgNDguOS00OC45IDQ4Ljl6Il19LHhWPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InR3aXR0ZXIiLGljb246WzUxMiw1MTIsW10sImYwOTkiLCJNNDU5LjQgMTUxLjdjLjMgNC41IC4zIDkuMSAuMyAxMy42IDAgMTM4LjctMTA1LjYgMjk4LjYtMjk4LjYgMjk4LjYtNTkuNSAwLTExNC43LTE3LjItMTYxLjEtNDcuMSA4LjQgMSAxNi42IDEuMyAyNS4zIDEuMyA0OS4xIDAgOTQuMi0xNi42IDEzMC4zLTQ0LjgtNDYuMS0xLTg0LjgtMzEuMi05OC4xLTcyLjggNi41IDEgMTMgMS42IDE5LjggMS42IDkuNCAwIDE4LjgtMS4zIDI3LjYtMy42LTQ4LjEtOS43LTg0LjEtNTItODQuMS0xMDNsMC0xLjNjMTQgNy44IDMwLjIgMTIuNyA0Ny40IDEzLjMtMjguMy0xOC44LTQ2LjgtNTEtNDYuOC04Ny40IDAtMTkuNSA1LjItMzcuNCAxNC4zLTUzIDUxLjcgNjMuNyAxMjkuMyAxMDUuMyAyMTYuNCAxMDkuOC0xLjYtNy44LTIuNi0xNS45LTIuNi0yNCAwLTU3LjggNDYuOC0xMDQuOSAxMDQuOS0xMDQuOSAzMC4yIDAgNTcuNSAxMi43IDc2LjcgMzMuMSAyMy43LTQuNSA0Ni41LTEzLjMgNjYuNi0yNS4zLTcuOCAyNC40LTI0LjQgNDQuOC00Ni4xIDU3LjggMjEuMS0yLjMgNDEuNi04LjEgNjAuNC0xNi4yLTE0LjMgMjAuOC0zMi4yIDM5LjMtNTIuNiA1NC4zeiJdfSx3Y3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZm9ydC1hd2Vzb21lIixpY29uOls1MTIsNTEyLFtdLCJmMjg2IiwiTTQ4OS41IDI4Ny45bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAzMi0zNi42IDAgMC0xNzguM2MwLTIuNi0yLTQuNi00LjYtNC42bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAzMi0zNi42IDAgMC0zMmMwLTIuNi0yLTQuNi00LjYtNC42bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAzMi0zNi42IDAgMC0zMmMwLTYtOC00LjYtMTEuNy00LjZsMC0zOGM4LjMtMiAxNy4xLTMuNCAyNS43LTMuNCAxMC45IDAgMjAuOSA0LjMgMzEuNCA0LjMgNC42IDAgMjcuNy0xLjEgMjcuNy04bDAtNjBjMC0yLjYtMi00LjYtNC42LTQuNi01LjEgMC0xNS4xIDQuMy0yNCA0LjMtOS43IDAtMjAuOS00LjMtMzIuNi00LjMtOCAwLTE2IDEuMS0yMy43IDIuOWwwLTQuOWM1LjQtMi42IDkuMS04LjMgOS4xLTE0LjMgMC0yMC43LTMxLjQtMjAuOC0zMS40IDAgMCA2IDMuNyAxMS43IDkuMSAxNC4zbDAgMTExLjdjLTMuNyAwLTExLjctMS40LTExLjcgNC42bDAgMzItMzYuNiAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuMyAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMTc4LjMtMzYuNiAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMjE5LjUgMTgyLjkgMCAwLTk2YzAtNzIuNiAxMDkuNy03Mi42IDEwOS43IDBsMCA5NiAxODIuOSAwIDAtMjE5LjVjLjEtMi42LTEuOS00LjYtNC41LTQuNnptLTI4OC4xLTQuNWMwIDIuNi0yIDQuNi00LjYgNC42bC0yNy40IDBjLTIuNiAwLTQuNi0yLTQuNi00LjZsMC02NGMwLTIuNiAyLTQuNiA0LjYtNC42bDI3LjQgMGMyLjYgMCA0LjYgMiA0LjYgNC42bDAgNjR6bTE0Ni40IDBjMCAyLjYtMiA0LjYtNC42IDQuNmwtMjcuNCAwYy0yLjYgMC00LjYtMi00LjYtNC42bDAtNjRjMC0yLjYgMi00LjYgNC42LTQuNmwyNy40IDBjMi42IDAgNC42IDIgNC42IDQuNmwwIDY0eiJdfSxNY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWl4ZXIiLGljb246WzQ0OCw1MTIsW10sImUwNTYiLCJNODIuNiA3Ni4xYy0zLjgtNS4xLTguNy05LjQtMTQuMi0xMi41cy0xMS43LTUuMS0xOC4xLTUuNy0xMi44IC4xLTE4LjggMi4yLTExLjYgNS4zLTE2LjMgOS42Yy0xNy42IDE2LjItMTkgNDMuNS00LjggNjIuOGw5MS44IDEyMy05Mi4zIDEyNC4xYy0xNC4yIDE5LjMtMTMuMSA0Ni42IDQuNyA2Mi44IDQuNyA0LjMgMTAuMyA3LjYgMTYuMyA5LjZzMTIuNSAyLjggMTguOCAyLjIgMTIuNS0yLjUgMTguMS01LjcgMTAuNC03LjQgMTQuMi0xMi41TDIxMC45IDI2Mi43YzEuNS0yLjEgMi4zLTQuNiAyLjMtNy4xcy0uOC01LTIuMy03LjFMODIuNiA3Ni4xek00MzguMiAzNzkuNmwtOTIuMy0xMjQuMSA5MS44LTEyM2MxNC4yLTE5LjIgMTIuOC00Ni42LTQuNy02Mi44LTQuNy00LjMtMTAuMy03LjYtMTYuMy05LjZzLTEyLjUtMi44LTE4LjgtMi4yLTEyLjUgMi41LTE4LjEgNS43LTEwLjQgNy40LTE0LjIgMTIuNWwtMTI4IDE3Mi4xYy0xLjUgMi4xLTIuMyA0LjYtMi4zIDcuMXMuOCA1IDIuMyA3LjFMMzY2IDQzNS45YzMuOCA1LjEgOC43IDkuNCAxNC4yIDEyLjVzMTEuNyA1LjEgMTguMSA1LjcgMTIuOC0uMSAxOC44LTIuMiAxMS42LTUuMyAxNi4zLTkuNmMxNy44LTE2LjIgMTktNDMuNSA0LjctNjIuOHoiXX0semN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imx5ZnQiLGljb246WzUxMiw1MTIsW10sImYzYzMiLCJNMCA4MS4xbDc3LjggMCAwIDIwOC43YzAgMzMuMSAxNSA1Mi44IDI3LjIgNjEtMTIuNyAxMS4xLTUxLjIgMjAuOS04MC4yLTIuOC0xNy0xNC0yNC44LTM3LjMtMjQuOC01OUwwIDgxLjF6TTQ4NS45IDI1NC42bDAtMjIgMjMuOCAwIDAtNzYuOC0yNi4xIDBjLTEwLjEtNDYuMy01MS4yLTgwLjctMTAwLjMtODAuNy01Ni42IDAtMTAyLjcgNDYtMTAyLjcgMTAyLjdsMCAxNzkuMmMxNiAyLjMgMzUuNC0uMyA1MS43LTE0IDE3LjEtMTQgMjQuOC0zNy4yIDI0LjgtNTlsMC02LjcgMzguOCAwIDAtNzYuOC0zOC44IDAgMC0yMy4zYzAtMzQuNiA1Mi4yLTM0LjYgNTIuMiAwbDAgNzcuMWMwIDU2LjYgNDYgMTAyLjcgMTAyLjcgMTAyLjdsMC03Ni41Yy0xNC41IDAtMjYuMS0xMS43LTI2LjEtMjUuOXptLTI5NC4zLTk5bDAgMTEzYzAgMTUuNC0yMy44IDE1LjQtMjMuOCAwbDAtMTEzLTc2LjggMCAwIDEzMi43YzAgMjMuOCA4IDU0IDQ1IDYzLjkgMzcgOS44IDU4LjItMTAuNiA1OC4yLTEwLjYtMi4xIDEzLjQtMTQuNSAyMy4zLTM0LjkgMjUuMy0xNS41IDEuNi0zNS4yLTMuNi00NS03LjhsMCA3MC4zYzI1LjEgNy41IDUxLjUgOS44IDc3LjYgNC43IDQ3LjEtOS4xIDc2LjgtNDguNCA3Ni44LTEwMC44bDAtMTc4LjItNzcuMSAwIDAgLjV6Il19LGtjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhcHBsZS1wYXkiLGljb246WzY0MCw1MTIsW10sImY0MTUiLCJNMTE2LjkgMTU4LjVjLTcuNSA4LjktMTkuNSAxNS45LTMxLjUgMTQuOS0xLjUtMTIgNC40LTI0LjggMTEuMy0zMi42IDcuNS05LjEgMjAuNi0xNS42IDMxLjMtMTYuMSAxLjIgMTIuNC0zLjcgMjQuNy0xMS4xIDMzLjh6bTEwLjkgMTcuMmMtMTcuNC0xLTMyLjMgOS45LTQwLjUgOS45LTguNCAwLTIxLTkuNC0zNC44LTkuMS0xNy45IC4zLTM0LjUgMTAuNC00My42IDI2LjUtMTguOCAzMi4zLTQuOSA4MCAxMy4zIDEwNi4zIDguOSAxMyAxOS41IDI3LjMgMzMuNSAyNi44IDEzLjMtLjUgMTguNS04LjYgMzQuNS04LjYgMTYuMSAwIDIwLjggOC42IDM0LjggOC40IDE0LjUtLjMgMjMuNi0xMyAzMi41LTI2IDEwLjEtMTQuOCAxNC4zLTI5LjEgMTQuNS0yOS45LS4zLS4zLTI4LTEwLjktMjguMy00Mi45LS4zLTI2LjggMjEuOS0zOS41IDIyLjktNDAuMy0xMi41LTE4LjYtMzItMjAuNi0zOC44LTIxLjF6bTEwMC40LTM2LjJsMCAxOTQuOSAzMC4zIDAgMC02Ni42IDQxLjkgMGMzOC4zIDAgNjUuMS0yNi4zIDY1LjEtNjQuM3MtMjYuNC02NC02NC4xLTY0bC03My4yIDB6TTI1OC41IDE2NWwzNC45IDBjMjYuMyAwIDQxLjMgMTQgNDEuMyAzOC42cy0xNSAzOC44LTQxLjQgMzguOGwtMzQuOCAwIDAtNzcuNHpNNDIwLjcgMzM1LjljMTkgMCAzNi42LTkuNiA0NC42LTI0LjlsLjYgMCAwIDIzLjQgMjggMCAwLTk3YzAtMjguMS0yMi41LTQ2LjMtNTcuMS00Ni4zLTMyLjEgMC01NS45IDE4LjQtNTYuOCA0My42bDI3LjMgMGMyLjMtMTIgMTMuNC0xOS45IDI4LjYtMTkuOSAxOC41IDAgMjguOSA4LjYgMjguOSAyNC41bDAgMTAuOC0zNy44IDIuM2MtMzUuMSAyLjEtNTQuMSAxNi41LTU0LjEgNDEuNSAuMSAyNS4yIDE5LjcgNDIgNDcuOCA0MnptOC4yLTIzLjFjLTE2LjEgMC0yNi40LTcuOC0yNi40LTE5LjYgMC0xMi4zIDkuOS0xOS40IDI4LjgtMjAuNWwzMy42LTIuMSAwIDExYzAgMTguMi0xNS41IDMxLjItMzYgMzEuMnptMTAyLjUgNzQuNmMyOS41IDAgNDMuNC0xMS4zIDU1LjUtNDUuNGw1My4xLTE0OS0zMC44IDAtMzUuNiAxMTUuMS0uNiAwLTM1LjYtMTE1LjEtMzEuNiAwIDUxLjIgMTQxLjktMi44IDguNmMtNC42IDE0LjYtMTIuMSAyMC4zLTI1LjUgMjAuMy0yLjQgMC03LS4zLTguOS0uNWwwIDIzLjRjMS44IC40IDkuMyAuNyAxMS42IC43eiJdfSxTY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYXJ0c3RhdGlvbiIsaWNvbjpbNTEyLDUxMixbXSwiZjc3YSIsIk0yLjEgMzc3LjRsNDMgNzQuM2M0LjMgOC41IDEwLjggMTUuNyAxOC45IDIwLjdzMTcuNCA3LjYgMjcgNy42bDI4NS40IDAtNTkuMi0xMDIuNi0zMTUuMSAwek01MDEuOSAzNTBMMzM1LjcgNTkuM2MtNC40LTguMi0xMC45LTE1LjEtMTguOS0yMFMyOTkuNyAzMiAyOTAuNCAzMmwtODguNCAwIDI1Ny4zIDQ0Ny42IDQwLjctNzAuNWMxLjktMy4yIDIxLTI5LjcgMi01OS4xek0yNzUuMiAzMDQuNWwtMTE1LjUtMjAwLTExNS41IDIwMCAyMzEgMHoiXX0sQ2N0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im5vZGUtanMiLGljb246WzQ0OCw1MTIsW10sImYzZDMiLCJNMjI0LjUgNTA4Yy02LjcgMC0xMy41LTEuOC0xOS40LTUuMmwtNjEuNy0zNi41Yy05LjItNS4yLTQuNy03LTEuNy04IDEyLjMtNC4zIDE0LjgtNS4yIDI3LjktMTIuNyAxLjQtLjggMy4yLS41IDQuNiAuNGw0Ny40IDI4LjFjMS43IDEgNC4xIDEgNS43IDBMNDEyIDM2Ny41YzEuNy0xIDIuOC0zIDIuOC01bDAtMjEzLjJjMC0yLjEtMS4xLTQtMi45LTUuMUwyMjcuMyAzNy43Yy0xLjctMS00LTEtNS43IDBMMzcuMSAxNDQuM2MtMS44IDEtMi45IDMtMi45IDUuMWwwIDIxMy4xYzAgMiAxLjEgNCAyLjkgNC45bDUwLjYgMjkuMmMyNy41IDEzLjcgNDQuMy0yLjQgNDQuMy0xOC43bDAtMjEwLjRjMC0zIDIuNC01LjMgNS40LTUuM2wyMy40IDBjMi45IDAgNS40IDIuMyA1LjQgNS4zbDAgMjEwLjVjMCAzNi42LTIwIDU3LjYtNTQuNyA1Ny42LTEwLjcgMC0xOS4xIDAtNDIuNS0xMS42TDIwLjYgMzk2LjFjLTEyLTYuOS0xOS40LTE5LjgtMTkuNC0zMy43bDAtMjEzLjFjMC0xMy44IDcuNC0yNi44IDE5LjQtMzMuN0wyMDUuMSA5YzExLjctNi42IDI3LjItNi42IDM4LjggMEw0MjguNiAxMTUuN2MxMiA2LjkgMTkuNCAxOS44IDE5LjQgMzMuN2wwIDIxMy4xYzAgMTMuOC03LjQgMjYuNy0xOS40IDMzLjdMMjQzLjkgNTAyLjhjLTUuOSAzLjQtMTIuNiA1LjItMTkuNCA1LjJ6TTM3My42IDI5Ny45YzAtMzkuOS0yNy01MC41LTgzLjctNTgtNTcuNC03LjYtNjMuMi0xMS41LTYzLjItMjQuOSAwLTExLjEgNC45LTI1LjkgNDcuNC0yNS45IDM3LjkgMCA1MS45IDguMiA1Ny43IDMzLjggLjUgMi40IDIuNyA0LjIgNS4yIDQuMmwyNCAwYzEuNSAwIDIuOS0uNiAzLjktMS43czEuNS0yLjYgMS40LTQuMWMtMy43LTQ0LjEtMzMtNjQuNi05Mi4yLTY0LjYtNTIuNyAwLTg0LjEgMjIuMi04NC4xIDU5LjUgMCA0MC40IDMxLjMgNTEuNiA4MS44IDU2LjYgNjAuNSA1LjkgNjUuMiAxNC44IDY1LjIgMjYuNyAwIDIwLjYtMTYuNiAyOS40LTU1LjUgMjkuNC00OC45IDAtNTkuNi0xMi4zLTYzLjItMzYuNi0uNC0yLjYtMi42LTQuNS01LjMtNC41bC0yMy45IDBjLTMgMC01LjMgMi40LTUuMyA1LjMgMCAzMS4xIDE2LjkgNjguMiA5Ny44IDY4LjIgNTguNC0uMSA5Mi0yMy4yIDkyLTYzLjR6Il19LExjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1bmNoYXJ0ZWQiLGljb246WzQ0OCw1MTIsW10sImUwODQiLCJNMTcxLjggMjMyLjhjMS4xIDAgMi4xLS4zIDMtLjlzMS42LTEuNCAyLTIuNGMyLjItOS44IDcuNC0xOC42IDE0LjktMjUuMyAxLjItLjggMS43LTIuNSAxLjctNC4xLS4xLS43LS4zLTEuMy0uNi0xLjlzLS45LTEuMS0xLjQtMS40TDc0LjUgMTI4LjUgMTQ5LjEgODVjMS41LS44IDIuNy0yIDMuNi0zLjVzMS40LTMuMSAxLjQtNC44YzAtMS43LS40LTMuNC0xLjMtNC45cy0yLjItMi43LTMuNy0zLjRMMTI2LjcgNTUuNmMtMS41LS44LTMuMS0xLjItNC44LTEuMnMtMy4zIC40LTQuOCAxLjJMMTcgMTEzLjZjLTEuNSAuOC0yLjcgMi0zLjYgMy41cy0xLjQgMy4xLTEuNCA0LjhMMTIgMjM3YzAgMS43IC40IDMuNCAxLjMgNC45czIuMiAyLjcgMy43IDMuNGwyMi40IDEyLjhjMS41IC45IDMuMiAxLjMgNSAxLjIgMi40IC4xIDQuOC0uOCA2LjYtMi41IDEuOC0xLjkgMi44LTQuNCAyLjktN2wwLTg1LjMgMTE1LjkgNjcuOWMuNiAuMyAxLjQgLjQgMi4xIC40ek0zMjMuNCAzNzcuN2MtMS43IC4xLTMuNCAuNS01IDEuMmwtNzQuNSA0My4xIDAtMTM0LjJjMC0yLjktMi45LTUuOC02LjItNC42LTkuNCAyLjgtMTkuNSAzLTI5IC40LS43LS4yLTEuNS0uMi0yLjItLjFzLTEuNCAuNC0yIC45LTEuMSAxLTEuNCAxLjctLjUgMS40LS41IDIuMWwwIDEzMy4zLTc0LjUtNDMuMWMtMS41LS45LTMuMi0xLjMtNS0xLjItMi41IDAtNC45IDEtNi43IDIuOHMtMi44IDQuMi0yLjggNi43bDAgMjYuMWMwIDEuNyAuNCAzLjQgMS4zIDQuOXMyLjIgMi43IDMuNyAzLjRsMTAwLjIgNTcuNmMxLjUgLjkgMy4yIDEuMyA1IDEuMiAxLjcgMCAzLjQtLjQgNS0xLjJsMTAwLjItNTcuNmMxLjUtLjggMi43LTIgMy42LTMuNXMxLjQtMy4xIDEuNC00LjhsMC0yNi4xYy0uOC00LjYtNS40LTkuMS0xMC40LTkuMXpNMjg2LjEgNzhhMjMgMjMgMCAxIDAgMC00NiAyMyAyMyAwIDEgMCAwIDQ2em02My42LTEwLjFhMjMgMjMgMCAxIDAgMCA0NiAyMyAyMyAwIDEgMCAwLTQ2em02My4yIDgzLjdhMjMgMjMgMCAxIDAgMC00NiAyMyAyMyAwIDEgMCAwIDQ2em0tNjMuMi05LjJhMjMgMjMgMCAxIDAgMCA0NiAyMyAyMyAwIDEgMCAwLTQ2em0tNjMuNiA4My4yYzQuNSAwIDktMS4zIDEyLjgtMy45czYuNy02LjEgOC41LTEwLjMgMi4yLTguOCAxLjMtMTMuMy0zLjEtOC42LTYuMy0xMS44LTcuMy01LjQtMTEuOC02LjMtOS4xLS40LTEzLjMgMS4zLTcuOCA0LjctMTAuMyA4LjUtMy45IDguMi0zLjkgMTIuOGMwIDMgLjYgNiAxLjggOC44czIuOSA1LjMgNSA3LjUgNC43IDMuOCA3LjUgNSA1LjggMS44IDguOCAxLjhsMCAwek0yMjQgMjYyYzQuNSAwIDktMS40IDEyLjgtMy45czYuNy02LjEgOC41LTEwLjMgMi4yLTguOCAxLjMtMTMuMy0zLjEtOC42LTYuMy0xMS44LTcuMy01LjQtMTEuOC02LjMtOS4xLS40LTEzLjMgMS4zLTcuOCA0LjctMTAuMyA4LjUtMy45IDguMi0zLjkgMTIuOGMwIDMgLjYgNiAxLjcgOC44czIuOCA1LjMgNSA3LjUgNC43IDMuOCA3LjUgNSA1LjggMS44IDguOCAxLjhsMCAwem0xODguOS04Mi40Yy00LjYgMC05IDEuMy0xMi44IDMuOXMtNi43IDYuMS04LjUgMTAuMy0yLjIgOC44LTEuMyAxMy4zIDMuMSA4LjYgNi4zIDExLjggNy4zIDUuNCAxMS44IDYuMyA5LjEgLjQgMTMuMy0xLjMgNy44LTQuNyAxMC4zLTguNSAzLjktOC4yIDMuOS0xMi44YzAtNi4xLTIuNC0xMS45LTYuNy0xNi4zcy0xMC4yLTYuNy0xNi4zLTYuN2wwIDB6bTAgNzIuM2MtNC42IDAtOSAxLjMtMTIuOCAzLjlzLTYuNyA2LjEtOC41IDEwLjMtMi4yIDguOC0xLjMgMTMuMyAzLjEgOC42IDYuMyAxMS44IDcuMyA1LjQgMTEuOCA2LjMgOS4xIC40IDEzLjMtMS4zIDcuOC00LjcgMTAuMy04LjUgMy45LTguMiAzLjktMTIuOGMwLTYuMS0yLjQtMTEuOS02LjctMTYuM3MtMTAuMi02LjctMTYuMy02LjdsMCAweiJdfSxUY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicGxheXN0YXRpb24iLGljb246WzU3Niw1MTIsW10sImYzZGYiLCJNNTcxIDM3Mi4zYy0xMS4zIDE0LjItMzguOCAyNC4zLTM4LjggMjQuM2wtMjA1LjEgNzMuNiAwLTU0LjMgMTUwLjktNTMuOGMxNy4xLTYuMSAxOS44LTE0LjggNS44LTE5LjQtMTMuOS00LjYtMzkuMS0zLjMtNTYuMiAyLjlsLTEwMC41IDM1LjUgMC01Ni40YzIzLjItNy44IDQ3LjEtMTMuNiA3NS43LTE2LjggNDAuOS00LjUgOTAuOSAuNiAxMzAuMiAxNS41IDQ0LjIgMTQgNDkuMiAzNC43IDM4IDQ4Ljl6TTM0Ni42IDI3OS44bDAtMTM5YzAtMTYuMy0zLTMxLjMtMTguMy0zNS42LTExLjctMy44LTE5IDcuMS0xOSAyMy40bDAgMzQ3LjktOTMuOC0yOS44IDAtNDE0LjdjMzkuOSA3LjQgOTggMjQuOSAxMjkuMiAzNS40IDc5LjUgMjcuMyAxMDYuNCA2MS4zIDEwNi40IDEzNy44IDAgNzQuNS00NiAxMDIuOC0xMDQuNSA3NC42ek00My4zIDQxMC4yYy00NS40LTEyLjgtNTMtMzkuNS0zMi4zLTU0LjggMTkuMS0xNC4yIDUxLjctMjQuOSA1MS43LTI0LjlsMTM0LjUtNDcuOCAwIDU0LjUtOTYuOCAzNC42Yy0xNy4xIDYuMS0xOS43IDE0LjgtNS44IDE5LjRzMzkuMSAzLjMgNTYuMi0yLjlsNDYuNC0xNi45IDAgNDguOGMtNTEuNiA5LjMtMTAxLjQgNy4zLTE1My45LTEweiJdfSxfY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWljcm9ibG9nIixpY29uOls0NDgsNTEyLFtdLCJlMDFhIiwiTTM5OS44IDM2Mi4yYzI5LjUtMzQuNyA0Ny4xLTc4LjMgNDcuMS0xMjUuOCAwLTExMy05OS42LTIwNC40LTIyMi41LTIwNC40UzIgMTIzLjUgMiAyMzYuNCAxMDEuNiA0NDAuOSAyMjQuNSA0NDAuOWMyNyAwIDUzLjktNC41IDc5LjQtMTMuNCAxLjQtLjUgMy0uNSA0LjUtLjFzMi43IDEuNCAzLjYgMi42YzE4LjYgMjUuMSA0Ny42IDQyLjcgNzkuOSA0OS45IDEuMSAuMiAyLjMgMCAzLjMtLjZzMS43LTEuNiAxLjktMi44Yy4xLS42IC4xLTEuMyAwLTEuOXMtLjQtMS4yLS44LTEuN2MtMTIuMy0xNi0xOC43LTM1LjgtMTgtNTZzOC40LTM5LjUgMjEuNy01NC43bC0uMiAuMXpNMzMwIDIxMi40bC01Ny4zIDQzLjUgMjAuOCA2OC45Yy40IDEuMyAuNCAyLjctLjEgNHMtMS4yIDIuNC0yLjMgMy4yLTIuNCAxLjItMy44IDEuMi0yLjctLjQtMy44LTEuMmwtNTkuMS00MS01OS4xIDQxLjFjLTEuMSAuOC0yLjQgMS4yLTMuOCAxLjJzLTIuNy0uNC0zLjgtMS4yLTEuOS0xLjktMi4zLTMuMi0uNS0yLjctLjEtNGwyMC44LTY4LjktNTcuMy00My41Yy0xLjEtLjgtMS45LTEuOS0yLjMtMy4ycy0uNC0yLjcgMC00IDEuMi0yLjQgMi4zLTMuMiAyLjQtMS4zIDMuNy0xLjNsNzEuOS0xLjUgMjMuNy02Ny45Yy40LTEuMyAxLjMtMi40IDIuNC0zLjJzMi40LTEuMiAzLjgtMS4yIDIuNyAuNCAzLjggMS4yIDEuOSAxLjkgMi40IDMuMmwyMy43IDY3LjkgNzEuOSAxLjVjMS40IDAgMi43IC40IDMuOCAxLjJzMS45IDEuOSAyLjMgMy4yIC40IDIuNyAwIDQtMS4yIDIuNC0yLjMgMy4zbDAgMHoiXX0sQWN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdpdGtyYWtlbiIsaWNvbjpbNTc2LDUxMixbXSwiZjNhNiIsIk01NTcuNyAxMTguMWMtMi4zLTYuMS05LjMtOS4yLTE1LjMtNi42LTUuNyAyLjQtOC41IDguOS02LjMgMTQuNiAxMC45IDI5IDE2LjkgNjAuNSAxNi45IDkzLjMgMCAxMzQuNi0xMDAuMyAyNDUuNy0yMzAuMiAyNjIuN2wwLTEyMy43YzcuOS0xLjUgMTUuNS0zLjYgMjMtNi4ybDAgMTA0YzEwNi43LTI1LjkgMTg1LjktMTIyLjEgMTg1LjktMjM2LjggMC05MS44LTUwLjgtMTcxLjgtMTI1LjgtMjEzLjMtNS43LTMuMi0xMy0uOS0xNS45IDUtMi43IDUuNS0uNiAxMi4yIDQuNyAxNS4xIDY3LjkgMzcuNiAxMTMuOSAxMTAgMTEzLjkgMTkzLjIgMCA5My4zLTU3LjkgMTczLjEtMTM5LjggMjA1LjRsMC05Mi4yYzE0LjItNC41IDI0LjktMTcuNyAyNC45LTMzLjUgMC0xMy4xLTYuOC0yNC40LTE3LjMtMzAuNSA4LjMtNzkuNSA0NC41LTU4LjYgNDQuNS04My45bDAtMTQuN2MwLTM4LTg3LjktMTYxLjgtMTI5LTE2NC43LTIuNS0uMi01LS4yLTcuNiAwLTQxLjIgMy0xMjkuMSAxMjYuNy0xMjkuMSAxNjQuN2wwIDE0LjhjMCAyNS4zIDM2LjMgNC4zIDQ0LjUgODMuOS0xMC42IDYuMS0xNy4zIDE3LjQtMTcuMyAzMC41IDAgMTUuOCAxMC42IDI5IDI0LjggMzMuNWwwIDkyLjJjLTgxLjktMzIuMi0xMzkuOC0xMTItMTM5LjgtMjA1LjQgMC04My4xIDQ2LTE1NS41IDExMy45LTE5My4yIDUuNC0zIDcuNC05LjYgNC43LTE1LjEtMi45LTUuOS0xMC4xLTguMi0xNS45LTUtNzUgNDEuNS0xMjUuOCAxMjEuNS0xMjUuOCAyMTMuMyAwIDExNC43IDc5LjIgMjEwLjggMTg1LjkgMjM2LjhsMC0xMDRjNy42IDIuNSAxNS4xIDQuNiAyMyA2LjJsMCAxMjMuN2MtMTI5LjgtMTctMjMwLjItMTI4LjEtMjMwLjItMjYyLjcgMC0zMi44IDYtNjQuMyAxNi45LTkzLjMgMi4yLTUuOC0uNi0xMi4yLTYuMy0xNC42LTYtMi42LTEzIC40LTE1LjMgNi42LTExLjggMzEuNS0xOC4zIDY1LjYtMTguMyAxMDEuMyAwIDE1NS4xIDEyMi42IDI4MS42IDI3Ni4zIDI4Ny44bDAtMTQ1LjljNi44IC40IDE1IC41IDIzLjQgMGwwIDE0NS44YzE1My43LTYuMSAyNzYuMy0xMzIuNiAyNzYuMy0yODcuNyAwLTM1LjctNi41LTY5LjgtMTguMy0xMDEuNHpNMzU3LjkgMzIyLjlhMjMuNyAyMy43IDAgMSAxIDAtNDcuNCAyMy43IDIzLjcgMCAxIDEgMCA0Ny40ek0yMTguMSAyNzUuNGEyMy43IDIzLjcgMCAxIDEgMCA0Ny40IDIzLjcgMjMuNyAwIDEgMSAwLTQ3LjR6Il19LGYyZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0ZWxlZ3JhbSIsaWNvbjpbNTEyLDUxMixbNjI0NjIsInRlbGVncmFtLXBsYW5lIl0sImYyYzYiLCJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0zNzEgMTc2LjdjLTMuNyAzOS4yLTE5LjkgMTM0LjQtMjguMSAxNzguMy0zLjUgMTguNi0xMC4zIDI0LjgtMTYuOSAyNS40LTE0LjQgMS4zLTI1LjMtOS41LTM5LjMtMTguNy0yMS44LTE0LjMtMzQuMi0yMy4yLTU1LjMtMzcuMi0yNC41LTE2LjEtOC42LTI1IDUuMy0zOS41IDMuNy0zLjggNjcuMS02MS41IDY4LjMtNjYuNyAuMi0uNyAuMy0zLjEtMS4yLTQuNHMtMy42LS44LTUuMS0uNWMtMi4yIC41LTM3LjEgMjMuNS0xMDQuNiA2OS4xLTkuOSA2LjgtMTguOSAxMC4xLTI2LjkgOS45LTguOS0uMi0yNS45LTUtMzguNi05LjEtMTUuNS01LTI3LjktNy43LTI2LjgtMTYuMyAuNi00LjUgNi43LTkgMTguNC0xMy43IDcyLjMtMzEuNSAxMjAuNS01Mi4zIDE0NC42LTYyLjMgNjguOS0yOC42IDgzLjItMzMuNiA5Mi41LTMzLjggMi4xIDAgNi42IC41IDkuNiAyLjkgMiAxLjcgMy4yIDQuMSAzLjUgNi43IC41IDMuMiAuNiA2LjUgLjQgOS44eiJdfSwkY3Q9ZjJlLERjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJpdHVuZXMtbm90ZSIsaWNvbjpbMzg0LDUxMixbXSwiZjNiNSIsIk0zODEuOSAzODguMmMtNi40IDI3LjQtMjcuMiA0Mi44LTU1LjEgNDgtMjQuNSA0LjUtNDQuOSA1LjYtNjQuNS0xMC4yLTIzLjktMjAuMS0yNC4yLTUzLjQtMi43LTc0LjQgMTctMTYuMiA0MC45LTE5LjUgNzYuOC0yNS44IDYtMS4xIDExLjItMi41IDE1LjYtNy40IDYuNC03LjIgNC40LTQuMSA0LjQtMTYzLjIgMC0xMS4yLTUuNS0xNC4zLTE3LTEyLjMtOC4yIDEuNC0xODUuNyAzNC42LTE4NS43IDM0LjYtMTAuMiAyLjItMTMuNCA1LjItMTMuNCAxNi43IDAgMjM0LjcgMS4xIDIyMy45LTIuNSAyMzkuNS00LjIgMTguMi0xNS40IDMxLjktMzAuMiAzOS41LTE2LjggOS4zLTQ3LjIgMTMuNC02My40IDEwLjQtNDMuMi04LjEtNTguNC01OC0yOS4xLTg2LjYgMTctMTYuMiA0MC45LTE5LjUgNzYuOC0yNS44IDYtMS4xIDExLjItMi41IDE1LjYtNy40IDEwLjEtMTEuNSAxLjgtMjU2LjYgNS4yLTI3MC4yIC44LTUuMiAzLTkuNiA3LjEtMTIuOSA0LjItMy41IDExLjgtNS41IDEzLjQtNS41IDIwNC0zOC4yIDIyOC45LTQzLjEgMjMyLjQtNDMuMSAxMS41LS44IDE4LjEgNiAxOC4xIDE3LjYgLjIgMzQ0LjUgMS4xIDMyNi0xLjggMzM4LjV6Il19LEVjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsZXNzIixpY29uOls2NDAsNTEyLFtdLCJmNDFkIiwiTTYxMy4yIDIxOWMwLTIwLjUgMy4yLTMyLjYgMy4yLTU0LjYgMC0zNC4yLTEyLjYtNDUuMi00MC41LTQ1LjJsLTIwLjUgMCAwIDI0LjIgNi4zIDBjMTQuMiAwIDE3LjMgNC43IDE3LjMgMjIuMSAwIDE2LjMtMS42IDMyLjYtMS42IDUxLjUgMCAyNC4yIDcuOSAzMy42IDIzLjYgMzcuM2wwIDEuNmMtMTUuOCAzLjctMjMuNiAxMy4xLTIzLjYgMzcuMyAwIDE4LjkgMS42IDM0LjIgMS42IDUxLjUgMCAxNy45LTMuNyAyMi42LTE3LjMgMjIuNmwwIC41LTYuMyAwIDAgMjUuMiAyMC41IDBjMjcuOCAwIDQwLjUtMTEgNDAuNS00NS4yIDAtMjIuNi0zLjItMzQuMi0zLjItNTQuNiAwLTExIDYuOC0yMi42IDI3LjMtMjMuNmwwLTI3LjNjLTIwLjUtLjctMjcuMy0xMi4zLTI3LjMtMjMuM3pNNTA3LjYgMjUxYy0xNS44LTYuMy0zMC41LTEwLTMwLjUtMjAuNSAwLTcuOSA2LjMtMTIuNiAxNy45LTEyLjZzMjIuMSA0LjcgMzMuNiAxMy4xbDIxLTI3LjhjLTEzLjEtMTAtMzEtMjAuNS01NS4yLTIwLjUtMzUuNyAwLTU5LjkgMjAuNS01OS45IDQ5LjQgMCAyNS43IDIyLjYgMzguOSA0MS41IDQ2LjIgMTYuMyA2LjMgMzIuMSAxMS42IDMyLjEgMjIuMSAwIDcuOS02LjMgMTMuMS0yMC41IDEzLjEtMTMuMSAwLTI2LjMtNS4zLTQwLjUtMTYuM2wtMjEgMzAuNWMxNS44IDEzLjEgMzkuOSAyMi4xIDU5LjkgMjIuMSA0MiAwIDY0LjYtMjIuMSA2NC42LTUxcy0yMi41LTQxLTQzLTQ3Ljh6TTE0OC43IDMxMC40Yy0zLjcgMC04LjQtMy4yLTguNC0xMy4xbDAtMTc4LjItNzQuNiAwYy0yOC40IDAtNDEgMTEtNDEgNDUuMiAwIDIyLjYgMy4yIDM1LjIgMy4yIDU0LjYgMCAxMS02LjggMjIuNi0yNy4zIDIzLjZsMCAyNy4zYzIwLjUgLjUgMjcuMyAxMi4xIDI3LjMgMjMuMSAwIDE5LjQtMy4yIDMxLTMuMiA1My42IDAgMzQuMiAxMi42IDQ1LjIgNDAuNSA0NS4ybDIwLjUgMCAwLTI0LjItNi4zIDBjLTEzLjEgMC0xNy4zLTUuMy0xNy4zLTIyLjZzMS42LTMyLjEgMS42LTUxLjVjMC0yNC4yLTcuOS0zMy42LTIzLjYtMzcuM2wwLTEuNmMxNS44LTMuNyAyMy42LTEzLjEgMjMuNi0zNy4zIDAtMTguOS0xLjYtMzQuMi0xLjYtNTEuNXMzLjctMjIuMSAxNy4zLTIyLjFsMTQuMSAwIDAgMTUwLjhjMCAzMi4xIDExIDUzLjEgNDMuMSA1My4xIDEwIDAgMTcuOS0xLjYgMjMuNi0zLjdsLTUuMy0zNC4yYy0zLjEgLjgtNC42IC44LTYuMiAuOHpNMzgwLjQgMjUxYy0xNi4zLTYuMy0zMS0xMC0zMS0yMC41IDAtNy45IDYuMy0xMi42IDE3LjktMTIuNnMyMi4xIDQuNyAzMy42IDEzLjFsMjEtMjcuOGMtMTMuMS0xMC0zMS0yMC41LTU1LjItMjAuNS0zNS43IDAtNTkuOSAyMC41LTU5LjkgNDkuNCAwIDI1LjcgMjIuNiAzOC45IDQxLjUgNDYuMiAxNi4zIDYuMyAzMi4xIDExLjYgMzIuMSAyMi4xIDAgNy45LTYuMyAxMy4xLTIwLjUgMTMuMS0xMy4xIDAtMjYuMy01LjMtNDAuNS0xNi4zbC0yMC41IDMwLjVjMTUuOCAxMy4xIDM5LjkgMjIuMSA1OS45IDIyLjEgNDIgMCA2NC42LTIyLjEgNjQuNi01MSAuMS0yOC45LTIyLjUtNDEtNDMtNDcuOHptLTE1NS02OC44Yy0zOC40IDAtNzUuMSAzMi4xLTc0LjEgODIuNSAwIDUyIDM0LjIgODIuNSA3OS4zIDgyLjUgMTguOSAwIDM5LjktNi44IDU2LjItMTcuOUwyNzEgMzAxLjVjLTExLjYgNi44LTIyLjYgMTAtMzQuMiAxMC0yMSAwLTM3LjMtMTAtNDEuNS0zNC4ybDk1LjIgMGMuNS0zLjcgMS42LTExIDEuNi0xOS40IC42LTQyLjYtMjIuNi03NS43LTY2LjctNzUuN3ptLTMwIDY2LjJjMy4yLTIxIDE1LjgtMzEgMzAuNS0zMSAxOC45IDAgMjYuMyAxMy4xIDI2LjMgMzFsLTU2LjggMHoiXX0sTmN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZpcmVmb3giLGljb246WzUxMiw1MTIsW10sImYyNjkiLCJNNTAzLjUgMjQxLjVjLS4xLTEuNi0uMi0zLjEtLjItNC43bDAtLjEtLjQtNC43IDAtLjFjLTEuMy0xMy45LTMuNy0yNy43LTcuMy00MS4yIDAtLjEgMC0uMS0uMS0uMmwtMS4xLTRjLS4xLS4yLS4xLS41LS4yLS42LS40LTEuMi0uNy0yLjUtMS4xLTMuNy0uMS0uMi0uMS0uNi0uMi0uOC0uNC0xLjItLjctMi40LTEuMS0zLjUtLjEtLjQtLjItLjYtLjQtMS0uNC0xLjItLjctMi4zLTEuMi0zLjVsLS40LTEuMWMtLjQtMS4xLS44LTIuMy0xLjItMy40LS4xLS4zLS4yLS43LS40LTEtLjUtMS4xLS44LTIuMy0xLjMtMy40LS4xLS4yLS4yLS42LS40LS44LS41LTEuMi0xLTIuMy0xLjQtMy41IDAtLjEtLjEtLjItLjEtLjQtMS42LTMuOC0zLjItNy43LTUtMTEuNGwtLjQtLjdjLS41LTEtLjgtMS44LTEuMy0yLjYtLjItLjUtLjUtMS4xLS43LTEuNi0uNC0uOC0uOC0xLjYtMS4yLTIuNC0uNC0uNi0uNi0xLjItMS0xLjhzLS44LTEuNC0xLjItMi4zYy0uNC0uNi0uNy0xLjMtMS4xLTEuOXMtLjgtMS40LTEuMi0yLjJjLS40LS43LS44LTEuNC0xLjItMi0uNC0uNy0uOC0xLjMtMS4yLTJzLS44LTEuMy0xLjItMi0uOC0xLjMtMS4yLTEuOS0uOC0xLjQtMS4zLTIuMmMtLjQtLjYtLjgtMS4yLTEuMi0xLjhsLTEuNC0yLjFjLS40LS42LS44LTEuMi0xLjItMS44LS41LS43LTEuMS0xLjYtMS42LTIuMy0uNC0uNS0uNy0xLjEtMS4xLTEuNmwtMS44LTIuNWMtLjQtLjUtLjYtLjgtMS0xLjMtMS0xLjMtMS44LTIuNS0yLjgtMy43LTcuMi05LjQtMTUtMTguMy0yMy41LTI2LjYtNS43LTYtMTEuOC0xMS41LTE4LjMtMTYuNy00LTMuNS04LjItNi43LTEyLjUtOS44LTcuNy01LjgtMTYtMTAuOC0yNC42LTE1LjEtMi40LTEuMy00LjgtMi41LTcuMi0zLjctMTcuNy04LjYtMzYuMy0xNS4yLTU1LjQtMTkuNi0xLjktLjQtMy44LS44LTUuNi0xLjJsLS4xIDBjLTEtLjEtMS44LS40LTIuOC0uNS0xMi41LTIuNC0yNS4yLTMuNy0zOC00bC0xMC42IDBjLTE1LjMgLjItMzAuNSAxLjktNDUuNSA1LTMzLjYgNy4xLTYzLjIgMjEuMi04Mi45IDM5LTEuMSAxLTEuOSAxLjctMi40IDIuMmwtLjUgLjUgLjEgMGMwIDAgLjEgMCAuMSAwczAtLjEgMC0uMWwtLjEgLjFjLjEtLjEgLjEtLjEgLjItLjEgMTQuNi04LjggMzQuOS0xNiA0OS40LTE5LjZsNS45LTEuNGMuNC0uMSAuOC0uMSAxLjItLjIgMS43LS40IDMuNC0uNyA1LjItMS4xIC4yIDAgLjYtLjEgLjgtLjEgNjQuMi0xMS43IDEzMi42IDcuNSAxODAuMiA1MyAxMC4zIDkuOCAxOS4zIDIwLjggMjYuOSAzMi44IDMwLjQgNDkuMiAyNy41IDExMS4xIDMuOCAxNDcuNi0zNC40IDUzLTExMS40IDcxLjMtMTU5IDI0LjgtMTYtMTUuNS0yNS4yLTM2LjctMjUuNi01OS0uMi0xMC43IDItMjEuMiA2LjItMzEgMS43LTMuOCAxMy4xLTI1LjcgMTguMi0yNC42LTEzLjEtMi44LTM3LjUgMi42LTU0LjcgMjguMi0xNS40IDIyLjktMTQuNSA1OC4yLTUgODMuMy02LTEyLjQtMTAuMS0yNS42LTEyLjEtMzkuMi0xMi4yLTgyLjYgNDMuMy0xNTMgOTQuMy0xNzAuNS0yNy41LTI0LTk2LjUtMjIuMy0xNDcuNyAxNS40LTI5LjkgMjItNTEuMiA1My4yLTYyLjUgOTAuNCAxLjctMjAuOSA5LjYtNTIuMSAyNS44LTgzLjktMTcuMiA4LjktMzkgMzctNDkuOCA2Mi45LTE1LjYgMzcuNC0yMSA4Mi4yLTE2LjEgMTI0LjggLjQgMy4yIC43IDYuNCAxLjEgOS42IDE5LjkgMTE3LjEgMTIyIDIwNi40IDI0NC44IDIwNi40IDEzNy4xIDAgMjQ4LjMtMTExLjIgMjQ4LjMtMjQ4LjQtLjEtNC41LS4yLTkuMS0uNS0xMy41eiJdfSxQY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToia2FnZ2xlIixpY29uOlszMjAsNTEyLFtdLCJmNWZhIiwiTTMwNC4yIDUwMS41TDE1OC40IDMyMC4zIDI5OC4yIDE4NWMyLjYtMi43IDEuNy0xMC41LTUuMy0xMC41bC02OS4yIDBjLTMuNSAwLTcgMS44LTEwLjUgNS4zbC0xMzIuMyAxMzMuNyAwLTMwNmMwLTUtMi41LTcuNS03LjUtNy41TDIxLjUgMEMxNi41IDAgMTQgMi41IDE0IDcuNWwwIDQ5N2MwIDUgMi41IDcuNSA3LjUgNy41bDUxLjkgMGM1IDAgNy41LTIuNSA3LjUtNy41bDAtMTA5IDMwLjgtMjkuMyAxMTAuNSAxNDAuNmMzIDMuNSA2LjUgNS4zIDEwLjUgNS4zbDY2LjkgMGMzLjUgMCA1LjUtMSA2LTNsLTEuNC03LjZ6Il19LEljdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmYWNlYm9vay1tZXNzZW5nZXIiLGljb246WzUxMiw1MTIsW10sImYzOWYiLCJNMjU2LjYgOGMtMTQwIDAtMjQ4LjYgMTAyLjMtMjQ4LjYgMjQwLjYgMCA3Mi4zIDI5LjcgMTM0LjggNzguMSAxNzcuOSA4LjMgNy41IDYuNiAxMS45IDggNTguMiAuMSAzLjIgMSA2LjQgMi42IDkuMnMzLjkgNS4yIDYuNyA2LjkgNS45IDIuOCA5LjEgMyA2LjUtLjMgOS41LTEuNkMxNzQuOSA0NzkgMTc1LjYgNDc3LjIgMTg0LjYgNDc5LjYgMzM3LjggNTIxLjggNTA0IDQyMy43IDUwNCAyNDguNiA1MDQgMTEwLjMgMzk2LjYgOCAyNTYuNiA4ek00MDUuOCAxOTMuMWwtNzMgMTE1LjZjLTIuOCA0LjMtNi40IDguMS0xMC42IDExcy05LjEgNC44LTE0LjEgNS44LTEwLjMgLjgtMTUuMy0uNC05LjctMy40LTEzLjgtNi40bC01OC4xLTQzLjVjLTIuNi0xLjktNS44LTMtOS0zcy02LjQgMS4xLTkgM2wtNzguNCA1OS40Yy0xMC41IDcuOS0yNC4yLTQuNi0xNy4xLTE1LjdsNzMtMTE1LjZjMi44LTQuMyA2LjQtOC4xIDEwLjYtMTFzOS4xLTQuOCAxNC4xLTUuOCAxMC4zLS44IDE1LjMgLjQgOS43IDMuNCAxMy45IDYuNGw1OC4xIDQzLjVjMi42IDEuOSA1LjggMyA5IDNzNi40LTEuMSA5LTNsNzguNC01OS40YzEwLjQtOCAyNC4xIDQuNSAxNy4xIDE1LjZ6Il19LEZjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhdWRpYmxlIixpY29uOls2NDAsNTEyLFtdLCJmMzczIiwiTTY0MCAxOTkuOWwwIDU0LTMyMCAyMDAtMzIwLTE5OS45IDAtNTQgMzIwIDIwMCAzMjAtMjAwLjF6bS0xOTQuNSA3Mmw0Ny4xLTI5LjRjLTM3LjItNTUuOC0xMDAuNy05Mi42LTE3Mi43LTkyLjZzLTEzNS41IDM2LjctMTcyLjYgOTIuNGwuMyAwYzIuNS0yLjMgNS4xLTQuNSA3LjctNi43IDg5LjctNzQuNCAyMTkuNC01OC4xIDI5MC4yIDM2LjN6TTIyNS40IDI5MC43YzE2LjktMTEuOSAzNi41LTE4LjcgNTcuNC0xOC43IDM0LjQgMCA2NS4yIDE4LjQgODYuNCA0Ny42bDQ1LjQtMjguNGMtMjAuOS0yOS45LTU1LjYtNDkuNS05NC44LTQ5LjUtMzguOSAwLTczLjQgMTkuNC05NC40IDQ5ek0xMDMuNiAxNjEuMUMyMzUuNCA1Ni44IDQyMS44IDg0LjcgNTIxLjEgMjIzLjJsLjcgMSA0OC44LTMwLjRjLTUzLjUtODEuNy0xNDUuOC0xMzUuNy0yNTAuNy0xMzUuNy0xMDMuNSAwLTE5Ni42IDUzLjUtMjUwLjUgMTM1LjYgOS45LTEwLjUgMjIuNy0yMy41IDM0LjItMzIuNnoiXX0sT2N0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBhdHJlb24iLGljb246WzUxMiw1MTIsW10sImYzZDkiLCJNNDkwIDE1My44Yy0uMS02NS40LTUxLTExOS0xMTAuNy0xMzguMy03NC4yLTI0LTE3Mi0yMC41LTI0Mi45IDEyLjktODUuOCA0MC41LTExMi44IDEyOS4zLTExMy44IDIxNy44LS44IDcyLjggNi40IDI2NC40IDExNC42IDI2NS44IDgwLjMgMSA5Mi4zLTEwMi41IDEyOS41LTE1Mi4zIDI2LjQtMzUuNSA2MC41LTQ1LjUgMTAyLjQtNTUuOSA3Mi0xNy44IDEyMS4xLTc0LjcgMTIxLTE1MGwtLjEgMHoiXX0sQmN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InZudiIsaWNvbjpbNjQwLDUxMixbXSwiZjQwYiIsIk0xMDQuOSAzNTJjLTM0LjEgMC00Ni40LTMwLjQtNDYuNC0zMC40TDIuNiAyMTAuMVMtNy44IDE5MiAxMyAxOTJsMzIuOCAwYzEwLjQgMCAxMy4yIDguNyAxOC44IDE4LjFsMzYuNyA3NC41czUuMiAxMy4xIDIxLjEgMTMuMSAyMS4xLTEzLjEgMjEuMS0xMy4xbDM2LjctNzQuNWM1LjYtOS41IDguNC0xOC4xIDE4LjgtMTguMWwzMi44IDBjMjAuOCAwIDEwLjQgMTguMSAxMC40IDE4LjFMMTg2LjQgMzIxLjZTMTc0LjIgMzUyIDE0MCAzNTJsLTM1LjEgMHptMzk1IDBjLTM0LjEgMC00Ni40LTMwLjQtNDYuNC0zMC40TDM5Ny42IDIxMC4xUzM4Ny4yIDE5MiA0MDggMTkybDMyLjggMGMxMC40IDAgMTMuMiA4LjcgMTguOCAxOC4xbDM2LjcgNzQuNXM1LjIgMTMuMSAyMS4xIDEzLjEgMjEuMS0xMy4xIDIxLjEtMTMuMWwzNi44LTc0LjVjNS42LTkuNSA4LjQtMTguMSAxOC44LTE4LjFsMzIuOSAwYzIwLjggMCAxMC40IDE4LjEgMTAuNCAxOC4xTDU4MS41IDMyMS42UzU2OS4zIDM1MiA1MzUuMSAzNTJsLTM1LjIgMHpNMzM3LjYgMTkyYzM0LjEgMCA0Ni40IDMwLjQgNDYuNCAzMC40bDU1LjkgMTExLjVTNDUwLjMgMzUyIDQyOS41IDM1MmwtMzIuOCAwYy0xMC40IDAtMTMuMi04LjctMTguOC0xOC4xbC0zNi43LTc0LjVzLTUuMi0xMy4xLTIxLjEtMTMuMS0yMS4xIDEzLjEtMjEuMSAxMy4xbC0zNi43IDc0LjVjLTUuNiA5LjQtOC40IDE4LjEtMTguOCAxOC4xbC0zMi45IDBjLTIwLjggMC0xMC40LTE4LjEtMTAuNC0xOC4xbDU1LjktMTExLjVTMjY4LjMgMTkyIDMwMi41IDE5MmwzNS4xIDB6Il19LFJjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwYWdlbGluZXMiLGljb246WzM4NCw1MTIsW10sImYxOGMiLCJNMzg0LjEgMzEyLjdjLTU1LjEgMTM2LjctMTg3LjEgNTQtMTg3LjEgNTQtNDAuNSA4MS44LTEwNy40IDEzNC40LTE4NC42IDEzNC43LTE2LjEgMC0xNi42LTI0LjQgMC0yNC40IDY0LjQtLjMgMTIwLjUtNDIuNyAxNTcuMi0xMTAuMS00MS4xIDE1LjktMTE4LjYgMjcuOS0xNjEuNi04Mi4yIDEwOS00NC45IDE1OS4xIDExLjIgMTc4LjMgNDUuNSA5LjktMjQuNCAxNy01MC45IDIxLjYtNzkuNyAwIDAtMTM5LjcgMjEuOS0xNDkuNS05OC4xIDExOS4xLTQ3LjkgMTUyLjYgNzYuNyAxNTIuNiA3Ni43IDEuNi0xNi43IDMuMy01Mi42IDMuMy01My40IDAgMC0xMDYuMy03My43LTM4LjEtMTY1LjIgMTI0LjYgNDMgNjEuNCAxNjIuNCA2MS40IDE2Mi40IC41IDEuNiAuNSAyMy44IDAgMzMuNCAwIDAgNDUuMi04OSAxMzYuNC01Ny41LTQuMiAxMzQtMTQxLjkgMTA2LjQtMTQxLjkgMTA2LjQtNC40IDI3LjQtMTEuMiA1My40LTIwIDc3LjUgMCAwIDgzLTkxLjggMTcyLTIweiJdfSxIY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYW1hem9uIixpY29uOls0NDgsNTEyLFtdLCJmMjcwIiwiTTI1Ny43IDE2Mi43Yy00OC43IDEuOC0xNjkuNSAxNS41LTE2OS41IDExNy41IDAgMTA5LjUgMTM4LjMgMTE0IDE4My41IDQzLjIgNi41IDEwLjIgMzUuNCAzNy41IDQ1LjMgNDYuOGw1Ni44LTU2cy0zMi4zLTI1LjMtMzIuMy01Mi44bDAtMTQ3LjFDMzQxLjUgODkgMzE3IDMyIDIyOS4yIDMyIDE0MS4yIDMyIDk0LjUgODcgOTQuNSAxMzYuM2w3My41IDYuOGMxNi4zLTQ5LjUgNTQuMi00OS41IDU0LjItNDkuNSA0MC43LS4xIDM1LjUgMjkuOCAzNS41IDY5LjF6bTAgODYuOGMwIDgwLTg0LjIgNjgtODQuMiAxNy4yIDAtNDcuMiA1MC41LTU2LjcgODQuMi01Ny44bDAgNDAuNnpNMzkzLjcgNDEzYy03LjcgMTAtNzAgNjctMTc0LjUgNjdTMzQuNyA0MDguNSAxMC4yIDM3OWMtNi44LTcuNyAxLTExLjMgNS41LTguMyA3My4zIDQ0LjUgMTg3LjggMTE3LjggMzcyLjUgMzAuMyA3LjUtMy43IDEzLjMgMiA1LjUgMTJ6bTM5LjggMi4yYy02LjUgMTUuOC0xNiAyNi44LTIxLjIgMzEtNS41IDQuNS05LjUgMi43LTYuNS0zLjhzMTkuMy00Ni41IDEyLjctNTVjLTYuNS04LjMtMzctNC4zLTQ4LTMuMi0xMC44IDEtMTMgMi0xNC0uMy0yLjMtNS43IDIxLjctMTUuNSAzNy41LTE3LjUgMTUuNy0xLjggNDEtLjggNDYgNS43IDMuNyA1LjEgMCAyNy4xLTYuNSA0My4xeiJdfSxxY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZW52aXJhIixpY29uOls0NDgsNTEyLFtdLCJmMjk5IiwiTTAgMzJjNDc3LjYgMCAzNjYuNiAzMTcuMyAzNjcuMSAzNjYuM2w4MC45IDgxLjctMjYgMC03MC40LTcxLjJDMzEyLjYgNDEzIDIyNy4yIDQ0My4zIDEzNy4yIDM3MS44IDQ3IDMwMC4zIDUyIDIxNC43IDAgMzJ6TTc5LjcgNzhjLTQ5LjctMjMuNS01LjIgOS4yLTUuMiA5LjIgNDUuMiAzMS4yIDY2IDczLjcgOTAuMiAxMTkuOSAzMS41IDYwLjIgNzkgMTM5LjcgMTQ0LjIgMTY3LjcgNjUgMjggMzQuMiAxMi41IDYtOC41LTI4LjItMjEuMi02OC4yLTg3LTkxLTEzMC4yLTMxLjctNjAtNjEtMTE4LjYtMTQ0LjItMTU4LjF6Il19LFZjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsaW5vZGUiLGljb246WzQ0OCw1MTIsW10sImYyYjgiLCJNMzY2LjMgMTg2LjlsLTU5LjUgMzYuOS0uOCAzNi45LTI5LjMtMTkuMy0zOS40IDI0LjNjMi4yIDU1LjIgMi41IDU5LjMgMi41IDU5LjVsLTk3LjIgNjUuNC0xNS4xLTEwNC43IDEwOC4xLTYyLTQwLjItMjYtNzUuNCAzOC41LTIxLTE0My4zIDEyOS00OS40LTkxLjMtNDMuNi0xMjUuNyAzOS40IDI3LjcgMTM0LjkgNDEuOSAzMi43LTMxLjggMTUuMSAyMC45IDEwMS40IDI5LjMgMjcuNy0yMC45IDEyLjYgMTYuOCA3OC44IDY2LjIgNjkuNmMtMTAuOC03NC44LTExLjctNzguNi0xMS43LTc4LjhsNzcuOS01NS4zQzI0NCAzNjUuNCAyNDIuMyAzNjcgMjQyLjMgMzY3bC44IDI0LjMgMzMuNSAyOC41LS44LTc3LjEgNDYuOS0zMy41IDI2LjgtMTguNC0yLjUgMzYgMjUuMSAxNy42IDYuNy03NC42IDU4LjctNDMuNi03MS4yLTM5LjR6Il19LFVjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhY2N1c29mdCIsaWNvbjpbNjQwLDUxMixbXSwiZjM2OSIsIk0zMjIuMSAyNTJsMC0xLTUxLjItNjUuOHMtMTIgMS42LTI1IDE1LjFjLTkgOS4zLTI0Mi4xIDIzOS4xLTI0My40IDI0MC45LTcgMTAgMS42IDYuOCAxNS43IDEuNyAuOCAwIDExNC41LTM2LjYgMTE0LjUtMzYuNiAuNS0uNi0uMS0uMSAuNi0uNi0uNC01LjEtLjgtMjYuMi0xLTI3LjctLjYtNS4yIDIuMi02LjkgNy04LjlsOTIuNi0zMy44Yy42LS44IDg4LjUtODEuNyA5MC4yLTgzLjN6TTQ4Mi4yIDM3Mi4xYzEzLjMgMTYuMSAyMC43IDEzLjMgMzAuOCA5LjMgMy4yLTEuMiAxMTUuNC00Ny42IDExNy44LTQ4LjkgOC00LjMtMS43LTE2LjctNy4yLTIzLjQtMi4xLTIuNS0yMDUuMS0yNDUuNi0yMDcuMi0yNDguMy05LjctMTIuMi0xNC4zLTEyLjktMzguNC0xMi44LTEwLjIgMC0xMDYuOCAuNS0xMTYuNSAuNi0xOS4yIC4xLTMyLjktLjMtMTkuMiAxNi45IDcuNyA5LjUgMjM0LjIgMjk5LjcgMjM5LjkgMzA2LjZ6bTE1Mi43IDEuNmMtMi4zLS4zLTI0LjYtNC43LTM4LTcuMiAwIDAtMTE1IDUwLjQtMTE3LjUgNTEuNi0xNiA3LjMtMjYuOS0zLjItMzYuNy0xNC42bC01Ny4xLTc0Yy01LjQtLjktNjAuNC05LjYtNjUuMy05LjMtMy4xIC4yLTkuNiAuOC0xNC40IDIuOS00LjkgMi4xLTE0NS4yIDUyLjgtMTUwLjIgNTQuNy01LjEgMi0xMS40IDMuNi0xMS4xIDcuNiAuMiAyLjUgMiAyLjYgNC42IDMuNSAyLjcgLjggMzAwLjkgNjcuNiAzMDggNjkuMSAxNS42IDMuMyAzOC41IDEwLjUgNTMuNiAxLjcgMi4xLTEuMiAxMjMuOC03Ni40IDEyNS44LTc3LjggNS40LTQgNC4zLTYuOC0xLjctOC4yeiJdfSxqY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZXJsYW5nIixpY29uOls2NDAsNTEyLFtdLCJmMzlkIiwiTTg3LjIgNTMuNWwtODcuMiAwIDAgNDA1IDEwMC40IDBjLTQ5LjctNTIuNi03OC44LTEyNS4zLTc4LjctMjEyLjEtLjEtNzYuNyAyNC0xNDIuNyA2NS41LTE5Mi45em0yMzguMiA5LjdjLTQ1LjkgLjEtODUuMSAzMy41LTg5LjIgODMuMmwxNjkuOSAwYy0xLjEtNDkuNy0zNC41LTgzLjEtODAuNy04My4yem0yMzAuNy05LjZsLjMgMC0uMS0uMS0uMiAuMXptLjMgMGMzMS40IDQyLjcgNDguNyA5Ny41IDQ2LjIgMTYyLjcgLjUgNiAuNSAxMS43IDAgMjQuMWwtMzcyLjQgMGMtLjIgMTA5LjcgMzguOSAxOTQuOSAxMzguNiAxOTUuMyA2OC41LS4zIDExOC01MSAxNTEuOS0xMDYuMWw5Ni40IDQ4LjJjLTE3LjQgMzAuOS0zNi41IDU3LjgtNTcuOSA4MC44bDgwLjggMCAwLTQwNS04My42IDB6Il19LFdjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjYy1kaXNjb3ZlciIsaWNvbjpbNTc2LDUxMixbXSwiZjFmMiIsIk01MjAuNCAxOTYuMWMwLTcuOS01LjUtMTIuMS0xNS42LTEyLjFsLTQuOSAwIDAgMjQuOSA0LjcgMGMxMC4zIDAgMTUuOC00LjQgMTUuOC0xMi44ek01MjggMzJMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0ODAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OHpNNDgzLjkgMTcwLjljMjIuNiAwIDUyLjktNC4xIDUyLjkgMjQuNCAwIDEyLjYtNi42IDIwLjctMTguNyAyMy4ybDI1LjggMzQuNC0xOS42IDAtMjIuMi0zMi44LTIuMiAwIDAgMzIuOC0xNiAwIDAtODJ6TTQyOCAxNzFsNDUuMyAwIDAgMTQtMjkuMyAwIDAgMTguMiAyOC4zIDAgMCAxMy44LTI4LjMgMCAwIDIyLjIgMjkuMyAwIDAgMTMuOC00NS4zIDAgMC04MnptLTY4LjcgMGwyMS45IDU1LjIgMjIuMi01NS4yIDE3LjUgMC0zNS41IDg0LjItOC42IDAtMzUtODQuMiAxNy41IDB6bS01NS45IDg2LjJhNDQuNiA0NC42IDAgMSAxIDAtODkuMiA0NC42IDQ0LjYgMCAxIDEgMCA4OS4yem0tNDkuMy04My4xbDAgMTljLTIwLjEtMjAuMS00Ni44LTQuNy00Ni44IDE5IDAgMjUgMjcuNSAzOC41IDQ2LjggMTkuMmwwIDE5Yy0yOS43IDE0LjMtNjMuMy01LjctNjMuMy0zOC4yIDAtMzEuMiAzMy4xLTUzIDYzLjMtMzh6bS05Ny4yIDY2LjNjMTEuNCAwIDIyLjQtMTUuMy0zLjMtMjQuNC0xNS01LjUtMjAuMi0xMS40LTIwLjItMjIuNyAwLTIzLjIgMzAuNi0zMS40IDQ5LjctMTQuM2wtOC40IDEwLjhjLTEwLjQtMTEuNi0yNC45LTYuMi0yNC45IDIuNSAwIDQuNCAyLjcgNi45IDEyLjMgMTAuMyAxOC4yIDYuNiAyMy42IDEyLjUgMjMuNiAyNS42IDAgMjkuNS0zOC44IDM3LjQtNTYuNiAxMS4zbDEwLjMtOS45YzMuNyA3LjEgOS45IDEwLjggMTcuNSAxMC44ek01NS40IDI1M2wtMjMuNCAwIDAtODIgMjMuNCAwYzI2LjEgMCA0NC4xIDE3IDQ0LjEgNDEuMSAwIDE4LjUtMTMuMiA0MC45LTQ0LjEgNDAuOXptNjcuNSAwbC0xNiAwIDAtODIgMTYgMCAwIDgyek01NDQgNDMzYzAgOC4yLTYuOCAxNS0xNSAxNWwtNDAxIDBjMTg5LjYtMzUuNiAzODIuNy0xMzkuMiA0MTYtMTYwbDAgMTQ1ek03NC4xIDE5MS42Yy01LjItNC45LTExLjYtNi42LTIxLjktNi42bC00LjIgMCAwIDU0LjIgNC4yIDBjMTAuMyAwIDE3LTIgMjEuOS02LjQgNS43LTUuMiA4LjktMTIuOCA4LjktMjAuN3MtMy4yLTE1LjUtOC45LTIwLjV6Il19LEdjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzYWZhcmkiLGljb246WzUxMiw1MTIsW10sImYyNjciLCJNMjc0LjcgMjc0LjdMMjM3LjMgMjM3LjMgMTY2IDM0NiAyNzQuNyAyNzQuN3pNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MTEuOCAxODIuOGwxNC44LTYuMWMxLS40IDItLjYgMy4xLS42czIuMSAuMiAzLjEgLjYgMS44IDEgMi42IDEuNyAxLjMgMS42IDEuNyAyLjYgLjYgMiAuNiAzLjEtLjIgMi4xLS42IDMuMS0xIDEuOS0xLjcgMi42LTEuNiAxLjMtMi42IDEuN0w0MTggMTk3LjZjLTIgLjgtNC4yIC44LTYuMSAwcy0zLjUtMi40LTQuMy00LjMtLjgtNC4yIDAtNi4xIDIuNC0zLjUgNC4zLTQuM3pNMzE0LjQgOTRsNi4xLTE0LjhjLjgtMiAyLjQtMy41IDQuMy00LjNzNC4yLS44IDYuMSAwIDMuNSAyLjQgNC4zIDQuMyAuOCA0LjIgMCA2LjFsLTYuMSAxNC44Yy0uOCAyLTIuNCAzLjUtNC4zIDQuM3MtNC4yIC44LTYuMSAwYy0xLS40LTEuOS0xLTIuNi0xLjdzLTEuMy0xLjYtMS43LTIuNi0uNi0yLS42LTMuMSAuMi0yLjEgLjYtMy4xek0yNTYgNjBjMi4xIDAgNC4yIC44IDUuNyAyLjNTMjY0IDY1LjkgMjY0IDY4bDAgMTZjMCAyLjEtLjggNC4yLTIuMyA1LjdzLTMuNSAyLjMtNS43IDIuMy00LjItLjgtNS43LTIuMy0yLjMtMy41LTIuMy01LjdsMC0xNmMwLTIuMSAuOC00LjIgMi4zLTUuN1MyNTMuOSA2MCAyNTYgNjB6TTE4MSA3NC45YzEtLjQgMi0uNiAzLjEtLjZzMi4xIC4yIDMuMSAuNiAxLjkgMSAyLjYgMS43IDEuMyAxLjYgMS43IDIuNkwxOTcuNiA5NGMuNCAxIC43IDIgLjcgMy4xcy0uMiAyLjEtLjYgMy4xLTEgMS45LTEuNyAyLjYtMS42IDEuNC0yLjYgMS44LTIgLjYtMy4xIC42LTIuMS0uMi0zLjEtLjYtMS45LTEtMi42LTEuOC0xLjMtMS43LTEuNy0yLjdsLTYuMS0xNC44Yy0uOC0yLS44LTQuMiAwLTYuMXMyLjQtMy41IDQuMy00LjN6bS02My42IDQyLjVjMS41LTEuNSAzLjUtMi4zIDUuNy0yLjNzNC4yIC44IDUuNyAyLjNMMTQwIDEyOC43YzEuNSAxLjUgMi4zIDMuNSAyLjMgNS42cy0uOCA0LjEtMi4zIDUuNmMtMS41IDEuNS0zLjUgMi4zLTUuNyAyLjNzLTQuMi0uOC01LjctMi4zbC0xMS4zLTExLjNjLTEuNS0xLjUtMi4zLTMuNS0yLjMtNS42cy44LTQuMSAyLjMtNS42bDAgMHpNNjAgMjU2YzAtMi4xIC44LTQuMiAyLjMtNS43UzY1LjkgMjQ4IDY4IDI0OGwxNiAwYzIuMSAwIDQuMiAuOCA1LjcgMi4zczIuMyAzLjUgMi4zIDUuNy0uOCA0LjItMi4zIDUuNy0zLjUgMi4zLTUuNyAyLjNsLTE2IDBjLTIuMSAwLTQuMi0uOC01LjctMi4zUzYwIDI1OC4xIDYwIDI1NnptNDAuMiA3My4ybC0xNC44IDYuMWMtMSAuNC0yIC42LTMuMSAuNnMtMi4xLS4yLTMuMS0uNi0xLjktMS0yLjYtMS43LTEuMy0xLjYtMS43LTIuNi0uNi0yLS42LTMuMSAuMi0yLjEgLjYtMy4xIDEtMS45IDEuNy0yLjYgMS42LTEuMyAyLjYtMS43TDk0IDMxNC40YzItLjggNC4yLS44IDYuMSAwczMuNSAyLjQgNC4zIDQuMyAuOCA0LjIgMCA2LjEtMi40IDMuNS00LjMgNC4zem00LjMtMTM2Yy0uNCAxLTEgMS45LTEuNyAyLjZzLTEuNiAxLjMtMi42IDEuNy0yIC42LTMuMSAuNi0yLjEtLjItMy4xLS42bC0xNC44LTYuMWMtMi0uOC0zLjUtMi40LTQuMy00LjNzLS44LTQuMiAwLTYuMSAyLjQtMy41IDQuMy00LjMgNC4yLS44IDYuMSAwbDE0LjggNi4xYzIgLjggMy41IDIuNCA0LjMgNC4zcy44IDQuMiAwIDYuMWwwIDB6TTE5Ny42IDQxOGwtNi4xIDE0LjhjLS40IDEtMSAxLjktMS43IDIuNnMtMS42IDEuMy0yLjYgMS43LTIgLjYtMy4xIC42LTIuMS0uMi0zLjEtLjYtMS45LTEtMi42LTEuNy0xLjMtMS42LTEuNy0yLjYtLjYtMi0uNi0zLjEgLjItMi4xIC42LTMuMWw2LjEtMTQuOGMuNC0xIDEtMS45IDEuNy0yLjdzMS42LTEuNCAyLjYtMS44IDItLjYgMy4xLS42IDIuMSAuMiAzLjEgLjYgMS45IDEgMi42IDEuOCAxLjMgMS43IDEuNyAyLjYgLjYgMiAuNiAzLjEtLjIgMi4xLS43IDMuMXpNMjY0IDQ0NGMwIDIuMS0uOCA0LjItMi4zIDUuN3MtMy41IDIuMy01LjcgMi4zLTQuMi0uOC01LjctMi4zLTIuMy0zLjUtMi4zLTUuN2wwLTE2YzAtMi4xIC44LTQuMiAyLjMtNS43czMuNS0yLjMgNS43LTIuMyA0LjIgLjggNS43IDIuMyAyLjMgMy41IDIuMyA1LjdsMCAxNnptNjctNi45Yy0xIC40LTIgLjYtMy4xIC42cy0yLjEtLjItMy4xLS42LTEuOS0xLTIuNi0xLjctMS4zLTEuNi0xLjctMi42TDMxNC40IDQxOGMtLjgtMi0uOC00LjIgMC02LjFzMi40LTMuNSA0LjMtNC4zIDQuMi0uOCA2LjEgMCAzLjUgMi40IDQuMyA0LjNsNi4xIDE0LjhjLjggMiAuOCA0LjIgMCA2LjFzLTIuNCAzLjUtNC4zIDQuM3ptNjMuNi00Mi41Yy0xLjUgMS41LTMuNSAyLjMtNS43IDIuM3MtNC4yLS44LTUuNy0yLjNMMzcyIDM4My4zYy0xLjUtMS41LTIuMy0zLjUtMi4zLTUuNnMuOC00LjEgMi4zLTUuNiAzLjUtMi4zIDUuNy0yLjMgNC4yIC44IDUuNyAyLjNsMTEuMyAxMS4zYzEuNSAxLjUgMi4zIDMuNSAyLjMgNS42cy0uOCA0LjEtMi4zIDUuNmwwIDB6TTI4Ni4yIDI4Ni4yTDExMC4zIDQwMS43IDIyNS44IDIyNS44IDQwMS43IDExMC4zIDI4Ni4yIDI4Ni4yek00MzcuMSAzMzFjLS44IDItMi40IDMuNS00LjMgNC4zcy00LjIgLjgtNi4xIDBsLTE0LjgtNi4xYy0yLS44LTMuNS0yLjQtNC4zLTQuM3MtLjgtNC4yIDAtNi4xYy40LTEgMS0xLjkgMS43LTIuNnMxLjYtMS4zIDIuNi0xLjcgMi0uNiAzLjEtLjYgMi4xIC4yIDMuMSAuNmwxNC44IDYuMWMyIC44IDMuNSAyLjQgNC4zIDQuM3MuOCA0LjIgMCA2LjF6bTYuOS02N2wtMTYgMGMtMi4xIDAtNC4yLS44LTUuNy0yLjNzLTIuMy0zLjUtMi4zLTUuNyAuOC00LjIgMi4zLTUuNyAzLjUtMi4zIDUuNy0yLjNsMTYgMGMyLjEgMCA0LjIgLjggNS43IDIuM3MyLjMgMy41IDIuMyA1LjctLjggNC4yLTIuMyA1LjctMy41IDIuMy01LjcgMi4zeiJdfSxZY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3BhY2UtYXdlc29tZSIsaWNvbjpbNTEyLDUxMixbXSwiZTVhYyIsIk05NiAyNTZsMzIgMCAwIDI1Ni0xMjggMCAwLTE2MCAzMiAwIDAtMzIgMzIgMCAwLTMyIDMyIDAgMC0zMnptNDE2IDk2bDAgMTYwLTEyOCAwIDAtMjU2IDMyIDAgMCAzMiAzMiAwIDAgMzIgMzIgMCAwIDMyIDMyIDB6TTMyMCA2NGwzMiAwIDAgMzg0LTMyIDAgMC0zMi0xMjggMCAwIDMyLTMyIDAgMC0zODQgMzIgMCAwLTMyIDMyIDAgMC0zMiA2NCAwIDAgMzIgMzIgMCAwIDMyem0tMzIgNjRsLTY0IDAgMCA2NCA2NCAwIDAtNjR6Il19LFpjdD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJub2RlIixpY29uOls2NDAsNTEyLFtdLCJmNDE5IiwiTTMxNi4zIDQ1MmMtMi4xIDAtNC4yLS42LTYuMS0xLjZMMjkxIDQzOWMtMi45LTEuNi0xLjUtMi4yLS41LTIuNSAzLjgtMS4zIDQuNi0xLjYgOC43LTQgLjQtLjIgMS0uMSAxLjQgLjFsMTQuOCA4LjhjLjUgLjMgMS4zIC4zIDEuOCAwTDM3NSA0MDhjLjUtLjMgLjktLjkgLjktMS42bDAtNjYuN2MwLS43LS4zLTEuMy0uOS0xLjZsLTU3LjgtMzMuM2MtLjUtLjMtMS4yLS4zLTEuOCAwbC01Ny44IDMzLjNjLS42IC4zLS45IDEtLjkgMS42bDAgNjYuN2MwIC42IC40IDEuMiAuOSAxLjVsMTUuOCA5LjFjOC42IDQuMyAxMy45LS44IDEzLjktNS44bDAtNjUuOWMwLS45IC43LTEuNyAxLjctMS43bDcuMyAwYy45IDAgMS43IC43IDEuNyAxLjdsMCA2NS45YzAgMTEuNS02LjIgMTgtMTcuMSAxOC0zLjMgMC02IDAtMTMuMy0zLjZsLTE1LjItOC43Yy0zLjctMi4yLTYuMS02LjItNi4xLTEwLjVsMC02Ni43YzAtNC4zIDIuMy04LjQgNi4xLTEwLjVsNTcuOC0zMy40YzMuNy0yLjEgOC41LTIuMSAxMi4xIDBsNTcuOCAzMy40YzMuNyAyLjIgNi4xIDYuMiA2LjEgMTAuNWwwIDY2LjdjMCA0LjMtMi4zIDguNC02LjEgMTAuNWwtNTcuOCAzMy40Yy0xLjcgMS4xLTMuOCAxLjctNiAxLjd6TTM2MyAzODYuMmMwLTEyLjUtOC40LTE1LjgtMjYuMi0xOC4yLTE4LTIuNC0xOS44LTMuNi0xOS44LTcuOCAwLTMuNSAxLjUtOC4xIDE0LjgtOC4xIDExLjkgMCAxNi4zIDIuNiAxOC4xIDEwLjYgLjIgLjggLjggMS4zIDEuNiAxLjNsNy41IDBjLjUgMCAuOS0uMiAxLjItLjUgLjMtLjQgLjUtLjggLjQtMS4zLTEuMi0xMy44LTEwLjMtMjAuMi0yOC44LTIwLjItMTYuNSAwLTI2LjMgNy0yNi4zIDE4LjYgMCAxMi43IDkuOCAxNi4xIDI1LjYgMTcuNyAxOC45IDEuOSAyMC40IDQuNiAyMC40IDguMyAwIDYuNS01LjIgOS4yLTE3LjQgOS4yLTE1LjMgMC0xOC43LTMuOC0xOS44LTExLjQtLjEtLjgtLjgtMS40LTEuNy0xLjRsLTcuNSAwYy0uOSAwLTEuNyAuNy0xLjcgMS43IDAgOS43IDUuMyAyMS4zIDMwLjYgMjEuMyAxOC41IDAgMjktNy4yIDI5LTE5Ljh6bTU0LjUtNTAuMWMwIDYuMS01IDExLjEtMTEuMSAxMS4xcy0xMS4xLTUtMTEuMS0xMS4xYzAtNi4zIDUuMi0xMS4xIDExLjEtMTEuMSA2LS4xIDExLjEgNC44IDExLjEgMTEuMXptLTEuOCAwYzAtNS4yLTQuMi05LjMtOS40LTkuMy01LjEgMC05LjMgNC4xLTkuMyA5LjNzNC4yIDkuNCA5LjMgOS40YzUuMi0uMSA5LjQtNC4zIDkuNC05LjR6bS00LjUgNi4ybC0yLjYgMGMtLjEtLjYtLjUtMy44LS41LTMuOS0uMi0uNy0uNC0xLjEtMS4zLTEuMWwtMi4yIDAgMCA1LTIuNCAwIDAtMTIuNSA0LjMgMGMxLjUgMCA0LjQgMCA0LjQgMy4zIDAgMi4zLTEuNSAyLjgtMi40IDMuMSAxLjcgLjEgMS44IDEuMiAyLjEgMi44IC4xIDEgLjMgMi43IC42IDMuM3ptLTIuOC04LjhjMC0xLjctMS4yLTEuNy0xLjgtMS43bC0yIDAgMCAzLjUgMS45IDBjMS42IDAgMS45LTEuMSAxLjktMS44ek0xMzcuMyAxOTFjMC0yLjctMS40LTUuMS0zLjctNi40TDcyLjMgMTQ5LjNjLTEtLjYtMi4yLS45LTMuNC0xbC0uNiAwYy0xLjIgMC0yLjMgLjQtMy40IDFMMy43IDE4NC42QzEuNCAxODUuOSAwIDE4OC40IDAgMTkxbC4xIDk1YzAgMS4zIC43IDIuNSAxLjggMy4yczIuNSAuNyAzLjcgMEw0MiAyNjguM2MyLjMtMS40IDMuNy0zLjggMy43LTYuNGwwLTQ0LjRjMC0yLjYgMS40LTUuMSAzLjctNi40bDE1LjUtOC45YzEuMi0uNyAyLjQtMSAzLjctMXMyLjYgLjMgMy43IDFsMTUuNSA4LjljMi4zIDEuMyAzLjcgMy44IDMuNyA2LjRsMCA0NC40YzAgMi42IDEuNCA1LjEgMy43IDYuNGwzNi40IDIwLjljMS4xIC43IDIuNiAuNyAzLjcgMCAxLjEtLjYgMS44LTEuOSAxLjgtMy4ybC4yLTk1ek00NzIuNSA4Ny4zbDAgMTc2LjRjMCAyLjYtMS40IDUuMS0zLjcgNi40bC02MS4zIDM1LjRjLTIuMyAxLjMtNS4xIDEuMy03LjQgMGwtNjEuMy0zNS40Yy0yLjMtMS4zLTMuNy0zLjgtMy43LTYuNGwwLTcwLjhjMC0yLjYgMS40LTUuMSAzLjctNi40bDYxLjMtMzUuNGMyLjMtMS4zIDUuMS0xLjMgNy40IDBsMTUuMyA4LjhjMS43IDEgMy45LS4zIDMuOS0yLjJsMC05NGMwLTIuOCAzLTQuNiA1LjUtMy4ybDM2LjUgMjAuNGMyLjMgMS4yIDMuOCAzLjcgMy44IDYuNHptLTQ2IDEyOC45YzAtLjctLjQtMS4zLS45LTEuNmwtMjEtMTIuMmMtLjYtLjMtMS4zLS4zLTEuOSAwbC0yMSAxMi4yYy0uNiAuMy0uOSAuOS0uOSAxLjZsMCAyNC4zYzAgLjcgLjQgMS4zIC45IDEuNmwyMSAxMi4xYy42IC4zIDEuMyAuMyAxLjggMGwyMS0xMi4xYy42LS4zIC45LS45IC45LTEuNmwwLTI0LjMgLjEgMHptMjA5LjgtLjdjMi4zLTEuMyAzLjctMy44IDMuNy02LjRsMC0xNy4xYzAtMi42LTEuNC01LjEtMy43LTYuNGwtNjAuOS0zNS40Yy0yLjMtMS4zLTUuMS0xLjMtNy40IDBsLTYxLjMgMzUuNGMtMi4zIDEuMy0zLjcgMy44LTMuNyA2LjRsMCA3MC44YzAgMi43IDEuNCA1LjEgMy43IDYuNGw2MC45IDM0LjdjMi4yIDEuMyA1IDEuMyA3LjMgMGwzNi44LTIwLjVjMi41LTEuNCAyLjUtNSAwLTYuNEw1NTAgMjQxLjZjLTEuMi0uNy0xLjktMS45LTEuOS0zLjJsMC0yMi4yYzAtMS4zIC43LTIuNSAxLjktMy4ybDE5LjItMTEuMWMxLjEtLjcgMi42LS43IDMuNyAwTDU5Mi4xIDIxM2MxLjEgLjcgMS45IDEuOSAxLjkgMy4ybDAgMTcuNGMwIDIuOCAzLjEgNC42IDUuNiAzLjJsMzYuNy0yMS4zek01NTkgMjE5Yy0uNCAuMy0uNyAuNy0uNyAxLjJsMCAxMy42YzAgLjUgLjMgMSAuNyAxLjJsMTEuOCA2LjhjLjQgLjMgMSAuMyAxLjQgMEw1ODQgMjM1Yy40LS4zIC43LS43IC43LTEuMmwwLTEzLjZjMC0uNS0uMy0xLS43LTEuMmwtMTEuOC02LjhjLS40LS4zLTEtLjMtMS40IDBMNTU5IDIxOXpNMzA0LjggMjYyLjVsMC03MC40YzAtMi42LTEuNi01LjEtMy45LTYuNGwtNjEuMS0zNS4yYy0yLjEtMS4yLTUtMS40LTcuNCAwbC02MS4xIDM1LjJjLTIuMyAxLjMtMy45IDMuNy0zLjkgNi40bDAgNzAuNGMwIDIuOCAxLjkgNS4yIDQgNi40bDYxLjIgMzUuMmMyLjQgMS40IDUuMiAxLjMgNy40IDBsNjEtMzUuMmMxLjgtMSAzLjEtMi43IDMuNi00LjcgLjEtLjUgLjItMS4xIC4yLTEuN3pNMjMwLjUgMTM3LjZsLS44IC41IDEuMSAwLS4zLS41em03Ni4yIDEzMC4ybC0uNC0uNyAwIC45IC40LS4yeiJdfSxYY3Q9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY29kZXBlbiIsaWNvbjpbNTEyLDUxMixbXSwiZjFjYiIsIk01MDIuMyAxNTkuN2wtMjM0LTE1NmMtOC00LjktMTYuNS01LTI0LjYgMGwtMjM0IDE1NmMtNiA0LTkuNyAxMS4xLTkuNyAxOC4zTDAgMzM0YzAgNy4xIDMuNyAxNC4zIDkuNyAxOC4zbDIzNCAxNTZjOCA0LjkgMTYuNSA1IDI0LjYgMGwyMzQtMTU2YzYtNCA5LjctMTEuMSA5LjctMTguM2wwLTE1NmMwLTcuMS0zLjctMTQuMy05LjctMTguM3pNMjc4IDYzLjFsMTcyLjMgMTE0LjktNzYuOSA1MS40LTk1LjQtNjMuNyAwLTEwMi42em0tNDQgMEwyMzQgMTY1LjcgMTM4LjYgMjI5LjQgNjEuNyAxNzggMjM0IDYzLjF6TTQ0IDIxOS4xTDk5LjEgMjU2IDQ0IDI5Mi44IDQ0IDIxOS4xek0yMzQgNDQ4LjhMNjEuNyAzMzQgMTM4LjYgMjgyLjYgMjM0IDM0Ni4zIDIzNCA0NDguOHpNMjU2IDMwOGwtNzcuNy01MiA3Ny43LTUyIDc3LjcgNTItNzcuNyA1MnptMjIgMTQwLjlsMC0xMDIuNiA5NS40LTYzLjcgNzYuOSA1MS40LTE3Mi4zIDExNC45em0xOTAtMTU2bC01NS4xLTM2LjkgNTUuMS0zNi45IDAgNzMuN3oiXX0sUWN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InJhdmVscnkiLGljb246WzUxMiw1MTIsW10sImYyZDkiLCJNNDk4LjYgMjM0LjJjLTEuMi0xMC4zLTEuNy0yMC44LTMuNy0zMS0yLjUtMTIuNC01LjctMjQuNi05LjYtMzYuNi02LjgtMjAuOS0xNy4yLTQwLjMtMzAuOS01Ny41LTUuOS03LjYtMTIuMS0xNC44LTE4LjgtMjEuNy0xNC4xLTE0LTMwLTI2LjEtNDcuMS0zNi4xLTE3LjgtMTAuNi0zNi44LTE4LjktNTYuNy0yNC43LTExLTMuMS0yMi4zLTUuNC0zMy41LTcuNi02LjgtMS4zLTEzLjctMS43LTIwLjYtMi41LS4zIDAtLjYtLjQtLjktLjYtMTAuOCAwLTIxLjUgMC0zMi4zIDAtMi40IC40LTQuOCAuOS03LjIgMS4yLTExLjYgMS4yLTIzLjEgMy42LTM0LjMgNy4xLTEzLjggNC4xLTI3LjEgOS42LTM5LjggMTYuNC0xMy4zIDctMjYuMSAxNS4xLTM4LjEgMjQuMi02LjIgNC42LTEyLjMgOS40LTE4IDE0LjUtMTAuMiA5LjItMjAuNCAxOC40LTI5LjkgMjguMy0xMi44IDEzLjMtMjQuMSAyOC4xLTMzLjYgNDQtOC42IDE0LTE1LjUgMjktMjAuNSA0NC42LTcuMiAyMi43LTEwLjMgNDYuNi05LjIgNzAuMyAuNiAxMy41IDIgMjYuOSA0LjQgNDAuMiAzLjQgMTguNCA5IDM2LjMgMTYuNyA1My4zIDEzLjYgMjkuMiAzMi4xIDUxLjUgNTAuNCA2Ny45IDEyLjggMTEuNiAyNi44IDIxLjkgNDEuOCAzMC42IDE3LjcgMTAuNCAzNi40IDE4LjkgNTUuOSAyNS4zIDEzLjMgNC4zIDI2LjkgNy42IDQwLjYgOS44IDYuMSAxIDEyLjMgMS4zIDE4LjQgMS45IC40IC4xIC44IC4zIDEuMiAuNmwzMi4zIDBjMi41LS40IDUtLjkgNy41LTEuMSAxNi4zLTEuMyAzMi4xLTUuMyA0Ny41LTEwLjcgMTcuMi01LjkgMzMuNy0xMy45IDQ5LTIzLjggOS43LTYuNCAxOS40LTEzLjEgMjguNy0yMC4xIDUuOC00LjMgMTEtOS41IDE2LjMtMTQuNSA0LTMuNyA3LjgtNy42IDExLjUtMTEuNSAxMi0xMi43IDIyLjYtMjYuNiAzMS40LTQxLjYgOS41LTE2IDE3LjQtMzIuOSAyMi4zLTUwLjkgMi45LTEwLjQgNC45LTIxIDctMzEuNyAxLTUuMyAxLjMtMTAuNyAxLjktMTYuMSAwLS4zIC40LS42IC42LS45bDAtMzcuMWMtLjItLjYtLjQtMS4yLS42LTEuOHptLTE2MS4xLTEuMnMtMTYuNi0zLTI4LjUtM2MtMjcuMiAwLTMzLjYgMTQuOS0zMy42IDM3bDAgOTMuNy03My41IDAgMC0xOTAuNyA3My41IDAgMCAzMS45YzguOS0yNi44IDI2LjgtMzYuMiA2Mi0zNi4ybDAgNjcuM3oiXX0sS2N0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFsaXBheSIsaWNvbjpbNDQ4LDUxMixbXSwiZjY0MiIsIk0zNzcuNyAzMkw3MC4zIDMyQzMxLjQgMzIgMCA2My40IDAgMTAyLjNMMCA0MDkuN0MwIDQ0OC42IDMxLjQgNDgwIDcwLjMgNDgwbDMwNy41IDBjMzguNSAwIDY5LjgtMzEuMSA3MC4zLTY5LjYtNDYtMjUuNi0xMTAuNi02MC4zLTE3MS42LTg4LjQtMzIuMSA0NC04NC4xIDgxLTE0OC42IDgxLTcwLjYgMC05My43LTQ1LjMtOTctNzYuNC00LTM5IDE0LjktODEuNSA5OS41LTgxLjUgMzUuNCAwIDc5LjQgMTAuMiAxMjcuMSAyNSAxNi41LTMwLjEgMjYuNS02MC4zIDI2LjUtNjAuM2wtMTc4LjIgMCAwLTE2LjcgOTIuMSAwIDAtMzEuMi0xMDkuNCAwIDAtMTkgMTA5LjQgMCAwLTUwLjQgNTAuOSAwIDAgNTAuNCAxMDkuNCAwIDAgMTktMTA5LjQgMCAwIDMxLjIgODguOCAwcy0xNS4yIDQ2LjYtMzguMyA5MC45YzQ4LjkgMTYuNyAxMDAgMzYgMTQ4LjYgNTIuN2wwLTIzNC40Yy4yLTM4LjctMzEuMi03MC4zLTY5LjktNzAuM3pNNDcuMyAzMjNjMSAyMC4yIDEwLjIgNTMuNyA2OS45IDUzLjcgNTIuMSAwIDkyLjYtMzkuNyAxMTcuOS03Mi45LTQ0LjYtMTguNy04NC41LTMxLjQtMTA5LjQtMzEuNC02Ny40IDAtNzkuNCAzMy4xLTc4LjQgNTAuNnoiXX0sSmN0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNjLWFtZXgiLGljb246WzU3Niw1MTIsW10sImYxZjMiLCJNMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xLjEtNjEuNyAwLTMxLjktMzUuMS0zMS45IDM1LjEtMjAzLjcgMCAwLTE2My44LTY1LjggMCA4MS43LTE4NC43IDc4LjYgMCAyOC4xIDYzLjIgMC02My4yIDk3LjIgMCAxNi45IDQ3LjYgMTctNDcuNiA3NS41IDAgMC0yLjRjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMnptNDQwLjQtMjEuN2w0Mi4yLTQ2LjMgNDIgNDYuMyA1MS40IDAtNjgtNzIuMSA2OC03Mi4xLTUwLjYgMC00MiA0Ni43LTQxLjUtNDYuNy01MS40IDAgNjcuNSA3Mi41LTY3LjQgNzEuNiAwLTMzLjEtODMgMCAwLTIyLjIgODAuOSAwIDAtMzIuMy04MC45IDAgMC0yMi40IDgzIDAgMC0zMy4xLTEyMiAwIDAgMTQzLjIgMTcxLjggMHptOTYuMy03MmwzOS4zIDQxLjkgMC04My4zLTM5LjMgNDEuNHptLTM2LjMtOTJsMzYuOS0xMDAuNiAwIDEwMC42IDM4LjcgMCAwLTE0My4zLTYwLjIgMC0zMi4yIDg5LjMtMzEuOS04OS4zLTYxLjIgMCAwIDE0My4xLTYzLjItMTQzLjEtNTEuMiAwLTYyLjQgMTQzLjMgNDMgMCAxMS45LTI4LjcgNjUuOSAwIDEyIDI4LjcgODIuNyAwIDAtMTAwLjMgMzYuOCAxMDAuMyAzNC40IDB6TTI4MiAxODUuNGwxOS41LTQ2LjkgMTkuNCA0Ni45LTM4LjkgMHoiXX0sZTZ0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBpZWQtcGlwZXItYWx0IixpY29uOls1NzYsNTEyLFtdLCJmMWE4IiwiTTI0NCAyNDZjLTMuMi0yLTYuMy0yLjktMTAuMS0yLjktNi42IDAtMTIuNiAzLjItMTkuMyAzLjdsMS43IDQuOSAyNy43LTUuN3pNMzc5LjkgNDQzLjljLTE5IDAtNjQuMSA5LjUtNzkuOSAxOS44bDYuOSA0NS4xYzM1LjcgNi4xIDcwLjEgMy42IDEwNi05LjgtNC44LTEwLTIzLjUtNTUuMS0zMy01NS4xek0zNDAuOCAxNzdjNi42IDIuOCAxMS41IDkuMiAyMi43IDIyLjEgMi0xLjQgNy41LTUuMiA3LjUtOC42IDAtNC45LTExLjgtMTMuMi0xMy4yLTIzIDExLjItNS43IDI1LjItNiAzNy42LTguOSA2OC4xLTE2LjQgMTE2LjMtNTIuOSAxNDYuOC0xMTYuNyA2LjEtMTIuNiAxMS44LTI1LjggMTIuNC0zOS45bC0yIDIuNmMtMjguNCA1MC0zMyA2My4yLTgxLjMgMTAwLTMxLjkgMjQuNC02OS4yIDQwLjItMTA2LjYgNTQuNmwtNi4zLS4zIDAtMjEuOGMtMTkuNiAxLjYtMTkuNy0xNC42LTMxLjYtMjMtMTguNyAyMC42LTMxLjYgNDAuOC01OC45IDUxLjEtMTIuNyA0LjgtMTkuNiAxMC0yNS45IDIxLjggMzQuOS0xNi40IDkxLjItMTMuNSA5OC44LTEwek01NTUuNSAwbC0uNiAxLjEtLjMgLjkgLjYtLjYgLjMtMS40ek00OTYuMyAzODIuMWMtMzMuOS01Ni45LTc1LjMtMTE4LjQtMTUwLTExNS41bC0uMy02Yy0xLjEtMTMuNSAzMi44IDMuMiAzNS4xLTMxbC0xNC40IDcuMmMtMTkuOC00NS43LTguNi01NC4zLTY1LjUtNTQuMy0xNC43IDAtMjYuNyAxLjctNDEuNCA0LjYgMi45IDE4LjYgMi4yIDM2LjctMTAuOSA1MC4zbDE5LjUgNS41Yy0xLjcgMy4yLTIuOSA2LjMtMi45IDkuOCAwIDIxIDQyLjggMi45IDQyLjggMzMuNiAwIDE4LjQtMzYuOCA2MC4xLTU0LjkgNjAuMS04IDAtNTMuNy01MC01My40LTYwLjFsLjMtNC42IDUyLjMtMTEuNWMxMy0yLjYgMTIuMy0yMi43LTIuOS0yMi43LTMuNyAwLTQzLjEgOS4yLTQ5LjQgMTAuNi0yLTUuMi03LjUtMTQuMS0xMy44LTE0LjEtMy4yIDAtNi4zIDMuMi05LjUgNC05LjIgMi42LTMxIDIuOS0yMS41IDIwLjFMMTUuOSAyOTguNWMtNS41IDEuMS04LjkgNi4zLTguOSAxMS44IDAgNiA1LjUgMTAuOSAxMS41IDEwLjkgOCAwIDEzMS4zLTI4LjQgMTQ3LjQtMzIuMiAyLjYgMy4yIDQuNiA2LjMgNy44IDguNiAyMC4xIDE0LjQgNTkuOCA4NS45IDc2LjQgODUuOSAyNC4xIDAgNTgtMjIuNCA3MS4zLTQxLjkgMy4yLTQuMyA2LjktNy41IDEyLjQtNi45IC42IDEzLjgtMzEuNiAzNC4yLTMzIDQzLjctMS40IDEwLjItMSAzNS4yLS4zIDQxLjEgMjYuNyA4LjEgNTItMy42IDc3LjktMi45IDQuMy0yMSAxMC42LTQxLjkgOS44LTYzLjVsLS4zLTkuNWMtMS40LTM0LjItMTAuOS0zOC41LTM0LjgtNTguNi0xLjEtMS4xLTIuNi0yLjYtMy43LTQgMi4yLTEuNCAxLjEtMSA0LjYtMS43IDg4LjUgMCA1Ni4zIDE4My42IDExMS41IDIyOS45IDMzLjEtMTUgNzIuNS0yNy45IDEwMy41LTQ3LjItMjktMjUuNi01Mi42LTQ1LjctNzIuNy03OS45ek0zMDAuMSA0MjguMmwwIDI3LjIgMTEuOC0zLjQtMi45LTIzLjgtOC45IDB6TTIzMS40IDI3Ny44bDI0LjEgNjEuMiAyMS0xMy44LTMxLjMtNTAuOS0xMy44IDMuNXptODQuNCAxNTQuOWwyIDEyLjRjOS0xLjUgNTguNC02LjYgNTguNC0xNC4xIDAtMS40LS42LTMuMi0uOS00LjYtMjYuOCAwLTM2LjkgMy44LTU5LjUgNi4zeiJdfSx0NnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibGV0dGVyYm94ZCIsaWNvbjpbNjQwLDUxMixbXSwiZTYyZCIsIk01MjEuMyAxMjhDNTg2LjkgMTI4IDY0MCAxODEuMSA2NDAgMjQ2LjZTNTg2LjkgMzY1LjIgNTIxLjMgMzY1LjJjLTQyLjUgMC03OS43LTIyLjMtMTAwLjctNTUuOCAxMS40LTE4LjIgMTgtMzkuNyAxOC02Mi44cy02LjYtNDQuNi0xOC02Mi44bC44LTEuMmMyMC44LTMyLjMgNTYuOC01My45IDk3LjktNTQuNmwyIDB6TTMyMCAxMjhjNDIuNSAwIDc5LjcgMjIuMyAxMDAuNyA1NS44LTExLjQgMTguMi0xOCAzOS43LTE4IDYyLjhzNi42IDQ0LjYgMTggNjIuOGwtLjggMS4yYy0yMC44IDMyLjMtNTYuOCA1My45LTk3LjkgNTQuNmwtMiAwYy00Mi41IDAtNzkuNy0yMi4zLTEwMC43LTU1LjggMTEuNC0xOC4yIDE4LTM5LjcgMTgtNjIuOHMtNi42LTQ0LjYtMTgtNjIuOGwuOC0xLjJjMjAuOC0zMi4zIDU2LjgtNTMuOSA5Ny45LTU0LjZsMiAwem0tMjAxLjMgMGM0Mi41IDAgNzkuNyAyMi4zIDEwMC43IDU1LjgtMTEuNCAxOC4yLTE4IDM5LjctMTggNjIuOHM2LjYgNDQuNiAxOCA2Mi44bC0uOCAxLjJjLTIwLjggMzIuMy01Ni44IDUzLjktOTcuOSA1NC42bC0yIDBDNTMuMSAzNjUuMSAwIDMxMi4xIDAgMjQ2LjZTNTMuMSAxMjggMTE4LjcgMTI4eiJdfSxhNnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToib3BlcmEiLGljb246WzUxMiw1MTIsW10sImYyNmEiLCJNMzIxLjkgMzIuN2MtMTcwLjIgMC0yNTIuNiAyMjMuOC0xNDcuNSAzNTUuMSAzNi41IDQ1LjQgODguNiA3NS42IDE0Ny41IDc1LjYgMzYuMyAwIDcwLjMtMTEuMSA5OS40LTMwLjQtNDMuOCAzOS4yLTEwMS45IDYzLTE2NS4zIDYzLTMuOSAwLTggMC0xMS45LS4zLTEzMS41LTYuMS0yMzYuMS0xMTQuNi0yMzYuMS0yNDcuNyAwLTEzNyAxMTEtMjQ4IDI0OC0yNDhsLjggMGM2My4xIC4zIDEyMC43IDI0LjEgMTY0LjQgNjMuMS0yOS0xOS40LTYzLjEtMzAuNC05OS4zLTMwLjR6TTQyMy43IDQzMC40Yy00MC45IDI0LjctOTAuNyAyMy42LTEzMi01LjggNTYuMi0yMC41IDk3LjctOTEuNiA5Ny43LTE3Ni42IDAtODQuNy00MS4yLTE1NS44LTk3LjQtMTc2LjYgNDEuOC0yOS4yIDkxLjItMzAuMyAxMzIuOS01IDEwNS45IDk4LjcgMTA1LjUgMjY1LjctMS4yIDM2NHoiXX0scjZ0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6IndlaWJvIixpY29uOls1MTIsNTEyLFtdLCJmMThhIiwiTTQwNyAxNzcuNmM3LjYtMjQtMTMuNC00Ni44LTM3LjQtNDEuNy0yMiA0LjgtMjguOC0yOC4xLTcuMS0zMi44IDUwLjEtMTAuOSA5Mi4zIDM3LjEgNzYuNSA4NC44LTYuOCAyMS4yLTM4LjggMTAuOC0zMi0xMC4zek0yMTQuOCA0NDYuN2MtMTA2LjMgMC0yMTQuOC01MS40LTIxNC44LTEzNi4zIDAtNDQuMyAyOC05NS40IDc2LjMtMTQzLjcgOTkuNy05OS43IDIwMy4yLTEwMC45IDE3My42LTUuNy00IDEzLjEgMTIuMyA1LjcgMTIuMyA2IDc5LjUtMzMuNiAxNDAuNS0xNi44IDExNCA1MS40LTMuNyA5LjQgMS4xIDEwLjkgOC4zIDEzLjEgMTM1LjcgNDIuMyAzNC44IDIxNS4yLTE2OS43IDIxNS4yek0zNTguNSAzMDAuNGMtNS40LTU1LjctNzguNS05NC0xNjMuNC04NS43LTg0LjggOC42LTE0OC44IDYwLjMtMTQzLjQgMTE2czc4LjUgOTQgMTYzLjQgODUuN2M4NC44LTguNiAxNDguOC02MC4zIDE0My40LTExNnpNMzQ3LjkgMzUuMWMtMjUuOSA1LjYtMTYuOCA0My43IDguMyAzOC4zIDcyLjMtMTUuMiAxMzQuOCA1Mi44IDExMS43IDEyNC03LjQgMjQuMiAyOS4xIDM3IDM3LjQgMTIgMzEuOS05OS44LTU1LjEtMTk1LjktMTU3LjQtMTc0LjN6bS03OC41IDMxMWMtMTcuMSAzOC44LTY2LjggNjAtMTA5LjEgNDYuMy00MC44LTEzLjEtNTgtNTMuNC00MC4zLTg5LjcgMTcuNy0zNS40IDYzLjEtNTUuNCAxMDMuNC00NS4xIDQyIDEwLjggNjMuMSA1MC4yIDQ2IDg4LjV6bS04Ni4zLTMwYy0xMi45LTUuNC0zMCAuMy0zOCAxMi45LTguMyAxMi45LTQuMyAyOCA4LjYgMzQgMTMuMSA2IDMwLjggLjMgMzkuMS0xMi45IDgtMTMuMSAzLjctMjguMy05LjctMzR6bTMyLjYtMTMuNGMtNS4xLTEuNy0xMS40IC42LTE0LjMgNS40LTIuOSA1LjEtMS40IDEwLjYgMy43IDEyLjkgNS4xIDIgMTEuNy0uMyAxNC42LTUuNCAyLjgtNS4yIDEuMS0xMC45LTQtMTIuOXoiXX0saTZ0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InJlYWRtZSIsaWNvbjpbNTc2LDUxMixbXSwiZjRkNSIsIk01MjguMyA0Ni41bC0xMzkuOCAwYy00OC4xIDAtODkuOSAzMy4zLTEwMC40IDgwLjMtMTAuNi00Ny01Mi4zLTgwLjMtMTAwLjQtODAuM0w0OCA0Ni41QzIxLjUgNDYuNSAwIDY4IDAgOTQuNUwwIDM0MC4zYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDg5LjcgMGMxMDIuMiAwIDEzMi43IDI0LjQgMTQ3LjMgNzUgLjcgMi44IDUuMiAyLjggNiAwIDE0LjctNTAuNiA0NS4yLTc1IDE0Ny4zLTc1bDg5LjcgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTI0NS43YzAtMjYuNC0yMS4zLTQ3LjktNDcuNy00OC4xek0yNDIgMzExLjljMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHptMC02MC45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjljMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOS0uMSAwek01MDEuMyAzMTEuOGMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjljMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOS0uMSAwem0wLTYwLjljMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHptMC02MC45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOGMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi44LS4xIDB6Il19LG82dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnb2xhbmciLGljb246WzY0MCw1MTIsW10sImU0MGYiLCJNNDAwLjEgMTk0LjhjLTEwLjkgMi44LTE5LjkgNC4zLTI5LjEgNy42LTcuMyAxLjktMTQuNyAzLjktMjMuMiA2LjFsLS42IC4xYy00LjIgMS4yLTQuNiAxLjMtOC41LTMuMi00LjctNS4zLTguMS04LjctMTQuNi0xMS45LTE5LjctOS42LTM4LjctNi44LTU2LjQgNC43LTIxLjIgMTMuNy0zMi4xIDM0LTMxLjggNTkuMiAuMyAyNSAxNy40IDQ1LjUgNDEuMiA0OC45IDIyIDIuOCAzOS44LTQuNiA1My44LTIwLjUgMi4xLTIuNiA0LTUuMyA2LjEtOC4zIC44LTEgMS41LTIuMSAyLjMtMy4zbC02MC4xIDBjLTYuNSAwLTguMS00LTUuOS05LjMgNC05LjcgMTEuNS0yNS45IDE1LjktMzQgLjktMS44IDMuMS01LjggNi45LTUuOGwxMDEuMSAwYzQuNS0xMy40IDExLjgtMjYuOSAyMS42LTM5LjcgMjIuNy0yOS45IDQ5LjMtNDUuNSA4Ny4yLTUyIDMxLjgtNS42IDYxLjctMi41IDg4LjkgMTUuOSAyNC42IDE2LjggMzkuOCAzOS42IDQzLjkgNjkuNSA1LjMgNDIuMS02LjkgNzYuMy0zNi43IDEwNS42LTE5LjcgMjAuOS00NC45IDM0LTczLjkgMzkuOS01LjYgMS0xMS4xIDEuNS0xNi41IDItMi45IC4yLTUuNyAuNS04LjUgLjgtMjguMy0uNi01NC4yLTguNy03Ni0yNy40LTE1LjMtMTMuMy0yNS45LTI5LjYtMzEuMS00OC41LTMuNyA3LjMtOCAxNC40LTE0IDIxLjEtMjEuNiAyOS42LTUwLjkgNDgtODcuOSA1Mi45LTMwLjYgNC4xLTU4LjktMS44LTgzLjktMjAuNS0yMy0xNy41LTM2LjEtNDAuNS0zOS41LTY5LjItNC4xLTM0IDUuOS02NS40IDI2LjQtOTEuMyAyMi4yLTI5IDUxLjUtNDcuNCA4Ny4zLTUzLjkgMjkuMy02LjIgNTcuMy0xLjkgODIuNiAxNS4zIDE2LjUgMTAuOSAyOC4zIDI1LjggMzYuMSA0My45IDEuOSAyLjggLjYgNC40LTMuMSA1LjN6TTQ4LjMgMjAwLjRjLTEuMyAwLTEuNi0uNi0uOS0xLjZsNi42LTguNGMuNi0uOSAyLjItMS41IDMuNC0xLjVsMTExLjMgMGMxLjIgMCAxLjUgLjkgLjkgMS44bC01LjMgOC4xYy0uNiAxLTIuMiAxLjktMy4xIDEuOWwtMTEyLjgtLjN6TTEuMiAyMjkuMWMtMS4yIDAtMS42LS43LS45LTEuNmw2LjUtOC40Yy42LS45IDIuMi0xLjYgMy40LTEuNmwxNDIuMSAwYzEuMiAwIDEuOCAxIDEuNSAxLjlsLTIuNSA3LjVjLS4zIDEuMi0xLjUgMS45LTIuOCAxLjlMMS4yIDIyOS4xem03NC41IDI2LjhjLS42IC45LS4zIDEuOCAuOSAxLjhsNjggLjNjLjkgMCAyLjItLjkgMi4yLTIuMWwuNi03LjVjMC0xLjMtLjYtMi4yLTEuOS0yLjJsLTYyLjMgMGMtMS4yIDAtMi41IC45LTMuMSAxLjlsLTQuNCA3Ljh6bTUwMS41LTE4Yy0uMi0yLjYtLjMtNC44LS43LTctNS42LTMwLjgtMzQtNDguMy02My42LTQxLjQtMjkgNi41LTQ3LjcgMjQuOS01NC41IDU0LjItNS42IDI0LjMgNi4yIDQ4LjkgMjguNiA1OC45IDE3LjIgNy41IDM0LjMgNi42IDUwLjgtMS45IDI0LjYtMTMuNiAzOC0zMi43IDM5LjYtNTkuNS0uMS0xLjItLjEtMi4zLS4yLTMuM3oiXX0sczZ0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN0YWNrLWV4Y2hhbmdlIixpY29uOls0NDgsNTEyLFtdLCJmMThkIiwiTTE4LjEgMzMyLjNsNDEyLjcgMCAwIDIyYzAgMzcuNy0yOS4zIDY4LTY1LjMgNjhsLTE5IDAtODYuOCA4OS43IDAtODkuNy0xNzYuMyAwYy0zNiAwLTY1LjMtMzAuMy02NS4zLTY4bDAtMjJ6bTAtMjMuNmw0MTIuNyAwIDAtODUtNDEyLjcgMCAwIDg1em0wLTEwOS40bDQxMi43IDAgMC04NS00MTIuNyAwIDAgODV6TTM2NS40IDBMODMuNCAwYy0zNiAwLTY1LjMgMzAuMy02NS4zIDY3LjdsMCAyMi4zIDQxMi43IDAgMC0yMi4zQzQzMC43IDMwLjMgNDAxLjQgMCAzNjUuNCAweiJdfSxuNnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ3VscCIsaWNvbjpbMjU2LDUxMixbXSwiZjNhZSIsIk0yMTAgMzkxLjFsLTE0LjEgMjQuNi00LjYgODAuMmMwIDguOS0yOC4zIDE2LjEtNjMuMSAxNi4xcy02My4xLTcuMi02My4xLTE2LjFsLTUuOC03OS40LTE0LjktMjUuNGM0MS4yIDE3LjMgMTI2IDE2LjcgMTY1LjYgMHpNMTQgMTM3LjhMMjcuNiAyNjMuM2M1LjktMjAgMjAuOC00NyA0MC01NS4yIDYuMy0yLjcgMTIuNy0yLjcgMTguNyAuOSA1LjIgMyA5LjYgOS4zIDEwLjEgMTEuOCAxLjIgNi41LTIgOS4xLTQuNSA5LjEtMyAwLTUuMy00LjYtNi44LTcuMy00LjEtNy4zLTEwLjMtNy42LTE2LjktMi44LTYuOSA1LTEyLjkgMTMuNC0xNy4xIDIwLjctNS4xIDguOC05LjQgMTguNS0xMiAyOC4yLTEuNSA1LjYtMi45IDE0LjYtLjYgMTkuOSAxIDIuMiAyLjUgMy42IDQuOSAzLjYgNSAwIDEyLjMtNi42IDE1LjgtMTAuMSA0LjUtNC41IDEwLjMtMTEuNSAxMi41LTE2bDUuMi0xNS41YzIuNi02LjggOS45LTUuNiA5LjkgMCAwIDEwLjItMy43IDEzLjYtMTAgMzQuNy01LjggMTkuNS03LjYgMjUuOC03LjYgMjUuOC0uNyAyLjgtMy40IDcuNS02LjMgNy41LTEuMiAwLTIuMS0uNC0yLjYtMS4yLTEtMS40LS45LTUuMy0uOC02LjMgLjItMy4yIDYuMy0yMi4yIDcuMy0yNS4yLTIgMi4yLTQuMSA0LjQtNi40IDYuNi01LjQgNS4xLTE0LjEgMTEuOC0yMS41IDExLjgtMy40IDAtNS42LS45LTcuNy0yLjRsNy42IDc5LjZjMiA1IDM5LjIgMTcuMSA4OC4yIDE3LjEgNDkuMSAwIDg2LjMtMTIuMiA4OC4yLTE3LjFsMTAuOS05NC42Yy01LjcgNS4yLTEyLjMgMTEuNi0xOS42IDE0LjgtNS40IDIuMy0xNy40IDMuOC0xNy40LTUuNyAwLTUuMiA5LjEtMTQuOCAxNC40LTIxLjUgMS40LTEuNyA0LjctNS45IDQuNy04LjEgMC0yLjktNi0yLjItMTEuNyAyLjUtMy4yIDIuNy02LjIgNi4zLTguNyA5LjctNC4zIDYtNi42IDExLjItOC41IDE1LjUtNi4yIDE0LjItNC4xIDguNi05LjEgMjItNSAxMy4zLTQuMiAxMS44LTUuMiAxNC0uOSAxLjktMi4yIDMuNS00IDQuNS0xLjkgMS00LjUgLjktNi4xLS4zLS45LS42LTEuMy0xLjktMS4zLTMuNyAwLS45IC4xLTEuOCAuMy0yLjcgMS41LTYuMSA3LjgtMTguMSAxNS0zNC4zIDEuNi0zLjcgMS0yLjYgLjgtMi4zLTYuMiA2LTEwLjkgOC45LTE0LjQgMTAuNS01LjggMi42LTEzIDIuNi0xNC41LTQuMS0uMS0uNC0uMS0uOC0uMi0xLjItMTEuOCA5LjItMjQuMyAxMS43LTIwLTguMS00LjYgOC4yLTEyLjYgMTQuOS0yMi40IDE0LjktNC4xIDAtNy4xLTEuNC04LjYtNS4xLTIuMy01LjUgMS4zLTE0LjkgNC42LTIzLjggMS43LTQuNSA0LTkuOSA3LjEtMTYuMiAxLjYtMy40IDQuMi01LjQgNy42LTQuNSAuNiAuMiAxLjEgLjQgMS42IC43IDIuNiAxLjggMS42IDQuNSAuMyA3LjItMy44IDcuNS03LjEgMTMtOS4zIDIwLjgtLjkgMy4zLTIgOSAxLjUgOSAyLjQgMCA0LjctLjggNi45LTIuNCA0LjYtMy40IDguMy04LjUgMTEuMS0xMy41IDItMy42IDQuNC04LjMgNS42LTEyLjMgLjUtMS43IDEuMS0zLjMgMS44LTQuOCAxLjEtMi41IDIuNi01LjEgNS4yLTUuMSAxLjMgMCAyLjQgLjUgMy4yIDEuNSAxLjcgMi4yIDEuMyA0LjUgLjQgNi45LTIgNS42LTQuNyAxMC42LTYuOSAxNi43LTEuMyAzLjUtMi43IDgtMi43IDExLjcgMCAzLjQgMy43IDIuNiA2LjggMS4yIDIuNC0xLjEgNC44LTIuOCA2LjgtNC41IDEuMi00LjkgLjktMy44IDI2LjQtNjguMiAxLjMtMy4zIDMuNy00LjcgNi4xLTQuNyAxLjIgMCAyLjIgLjQgMy4yIDEuMSAxLjcgMS4zIDEuNyA0LjEgMSA2LjItLjcgMS45LS42IDEuMy00LjUgMTAuNS01LjIgMTIuMS04LjYgMjAuOC0xMy4yIDMxLjktMS45IDQuNi03LjcgMTguOS04LjcgMjIuMy0uNiAyLjItMS4zIDUuOCAxIDUuOCA1LjQgMCAxOS4zLTEzLjEgMjMuMS0xNyAuMi0uMyAuNS0uNCAuOS0uNiAuNi0xLjkgMS4yLTMuNyAxLjctNS41IDEuNC0zLjggMi43LTguMiA1LjMtMTEuMyAuOC0xIDEuNy0xLjYgMi43LTEuNiAyLjggMCA0LjIgMS4yIDQuMiA0IDAgMS4xLS43IDUuMS0xLjEgNi4yIDEuNC0xLjUgMi45LTMgNC41LTQuNSAxNS0xMy45IDI1LjctNi44IDI1LjcgLjIgMCA3LjQtOC45IDE3LjctMTMuOCAyMy40LTEuNiAxLjktNC45IDUuNC01IDYuNCAwIDEuMyAuOSAxLjggMi4yIDEuOCAyIDAgNi40LTMuNSA4LTQuNyA1LTMuOSAxMS44LTkuOSAxNi42LTE0LjFsMTQuOC0xMzYuOGMtMzAuNSAxNy4xLTE5Ny42IDE3LjItMjI4LjMgLjJ6bTIyOS43LTguNWMwIDIxLTIzMS4yIDIxLTIzMS4yIDAgMC04LjggNTEuOC0xNS45IDExNS42LTE1LjkgOSAwIDE3LjggLjEgMjYuMyAuNEwxNjcgNjUuMSAyMjguMyAuNmMxLjQtMS40IDUuOC0uMiA5LjkgMy41czYuNiA3LjkgNS4zIDkuM2wtLjEgLjEtNTcuMyA2MC41LTEwIDQwLjdjMzkuOSAyLjYgNjcuNiA4LjEgNjcuNiAxNC42em0tNjkuNCA0LjZjMC0uOC0uOS0xLjUtMi41LTIuMWwtLjIgLjhjMCAxLjMtNSAyLjQtMTEuMSAyLjRzLTExLjEtMS4xLTExLjEtMi40YzAtLjEgMC0uMiAuMS0uM2wuMi0uN2MtMS44IC42LTMgMS40LTMgMi4zIDAgMi4xIDYuMiAzLjcgMTMuNyAzLjcgNy43IC4xIDEzLjktMS42IDEzLjktMy43eiJdfSxsNnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToieWVscCIsaWNvbjpbMzg0LDUxMixbXSwiZjFlOSIsIk00Mi45IDI0MC4zbDk5LjYgNDguNmMxOS4yIDkuNCAxNi4yIDM3LjUtNC41IDQyLjdMMzAuNSAzNTguNWMtMy4yIC44LTYuNCAuOS05LjYgLjNzLTYuMi0xLjgtOC45LTMuNy00LjktNC4zLTYuNi03LjEtMi43LTUuOS0zLjEtOS4yYy0zLjMtMjguOC0uMi01Ny45IDktODUuMyAxLTMuMSAyLjctNS45IDQuOS04LjNzNC45LTQuMiA3LjktNS41IDYuMi0xLjggOS41LTEuOCA2LjQgLjkgOS4zIDIuM3ptNDQgMjM5LjNjMjMuOCAxNi4zIDUwLjkgMjcuMyA3OS40IDMyLjEgMy4yIC42IDYuNSAuNCA5LjYtLjRzNi4xLTIuMyA4LjYtNC40IDQuNi00LjYgNi03LjUgMi4zLTYuMSAyLjQtOS40bDMuOS0xMTAuOGMuNy0yMS4zLTI1LjUtMzEuOS0zOS44LTE2LjFMODIuOCA0NDUuNWMtMi4yIDIuNC0zLjggNS4zLTQuOCA4LjRzLTEuMyA2LjQtLjkgOS42IDEuNSA2LjMgMy4xIDkuMSAzLjkgNS4yIDYuNiA3bDAgMHpNMjMyLjIgMzY5LjdsNTguOCA5NGMxLjcgMi44IDQgNS4xIDYuOCA2LjlzNS44IDMgOSAzLjUgNi41IC4zIDkuNy0uNSA2LjEtMi40IDguNi00LjRjMjIuMy0xOC40IDQwLjMtNDEuNSA1Mi43LTY3LjYgMS40LTIuOSAyLjEtNi4xIDIuMi05LjRzLS42LTYuNS0xLjktOS40LTMuMi01LjctNS42LTcuOC01LjItMy45LTguMy00LjlMMjU4LjcgMzM1LjdjLTIwLjMtNi41LTM3LjggMTUuOC0yNi41IDMzLjl6TTM4MC42IDIzNy40Yy0xMS41LTI2LjUtMjguNy01MC4yLTUwLjQtNjkuMy0yLjQtMi4xLTUuMy0zLjctOC40LTQuN3MtNi40LTEuMi05LjYtLjgtNi4zIDEuNS05LjEgMy4yLTUuMSA0LTYuOSA2LjdsLTYyIDkxLjljLTExLjkgMTcuNyA0LjcgNDAuNiAyNS4yIDM0LjdMMzY2IDI2OC42YzMuMS0uOSA2LTIuNSA4LjUtNC42czQuNS00LjcgNS44LTcuNyAyLjEtNi4yIDIuMi05LjQtLjYtNi41LTEuOS05LjVsMCAwek02Mi4xIDMwLjJjLTIuOCAxLjQtNS40IDMuMy03LjQgNS43cy0zLjYgNS4yLTQuNSA4LjItMS4yIDYuMi0uOSA5LjMgMS4zIDYuMSAyLjkgOC45TDE1Ni4zIDI0Mi42YzExLjcgMjAuMiA0Mi42IDExLjkgNDIuNi0xMS40bDAtMjA4LjNjMC0zLjEtLjYtNi4zLTEuOC05LjJzLTMuMS01LjUtNS40LTcuNi01LTMuOC04LTQuOC02LjEtMS40LTkuMy0xLjJjLTM5IDMuMS03NyAxMy4zLTExMi4zIDMwLjF6Il19LGM2dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnb2ZvcmUiLGljb246WzQ0OCw1MTIsW10sImYzYTciLCJNMzQ4IDMxOS44bC0xMy4yIDAgMCAzNC43Yy0yNC41IDIzLjEtNTYuMyAzNS44LTg5LjkgMzUuOC03My4yIDAtMTMyLjQtNjAuMi0xMzIuNC0xMzQuNCAwLTc0LjEgNTkuMi0xMzQuNCAxMzIuNC0xMzQuNCAzNS4zIDAgNjguNiAxNCA5My42IDM5LjRsNjIuMy02My4zYy00MS44LTQyLjMtOTcuMS02NS42LTE1Ni4xLTY1LjYtMTIyLjcgMC0yMjAuNyAxMDAuNi0yMjAuNyAyMjQgMCAxMjIuNSA5NyAyMjQgMjIwLjcgMjI0IDYzLjIgMCAxMjQuNS0yNi4yIDE3MS04Mi41LTItMjcuNi0xMy40LTc3LjctNjcuNy03Ny43ek0zMzUuOSAyMDcuM2wtMTA2LjMgMCAwIDg5IDExOC40IDBjMzMuNSAwIDYwLjUgMTUuMSA3NiA0MS44bDAtMzAuNmMwLTY1LjItNDAuNC0xMDAuMi04OC4xLTEwMC4yeiJdfSxkNnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYXZpYXRvIixpY29uOls2NDAsNTEyLFtdLCJmNDIxIiwiTTEwNy4yIDI4My41bC0xOS00MS44LTUyLjEgMC0xOSA0MS44LTE3LjEgMCA2Mi4yLTEzMS40IDYyLjIgMTMxLjQtMTcuMiAwem0tNDUtOTguMWwtMTkuNiA0Mi41IDM5LjIgMC0xOS42LTQyLjV6TTE3NC45IDI4Ny44bC02Mi4yLTEzMS40IDE3LjEgMCA0NS4xIDk2IDQ1LjEtOTYgMTcgMC02Mi4xIDEzMS40em04MC42LTQuM2wwLTEyNy4xIDE1LjUgMCAwIDEyNy4xLTE1LjUgMHpNNDY0LjYgMTY3LjlsMCAxMTUuNi0xNy4zIDAgMC0xMTUuNi00MS4yIDAgMC0xMS41IDk5LjYgMCAwIDExLjUtNDEuMSAwek02NDAgMjE4LjhjMCA5LjItMS43IDE3LjgtNS4xIDI1LjhzLTguMiAxNS4xLTE0LjIgMjEuMS0xMy4xIDEwLjgtMjEuMSAxNC4yLTE2LjYgNS4xLTI1LjggNS4xLTE3LjgtMS43LTI1LjgtNS4xLTE1LjEtOC4yLTIxLjEtMTQuMi0xMC44LTEzLTE0LjItMjEuMWMtMy40LTgtNS4xLTE2LjYtNS4xLTI1LjhzMS43LTE3LjggNS4xLTI1LjggOC4yLTE1LjEgMTQuMi0yMS4xIDEzLTguNCAyMS4xLTExLjljOC0zLjQgMTYuNi01LjEgMjUuOC01LjFzMTcuOCAxLjcgMjUuOCA1LjEgMTUuMSA1LjggMjEuMSAxMS45YzYgNiAxMC43IDEzLjEgMTQuMiAyMS4xIDMuNCA4IDUuMSAxNi42IDUuMSAyNS44em0tMTUuNSAwYzAtNy4zLTEuMy0xNC0zLjktMjAuM3MtNi4yLTExLjctMTAuOC0xNi4zLTEwLTguMi0xNi4yLTEwLjktMTIuOC00LTE5LjgtNC0xMy42IDEuMy0xOS44IDQtMTEuNiA2LjMtMTYuMiAxMC45LTguMiAxMC0xMC44IDE2LjMtMy45IDEzLjEtMy45IDIwLjNjMCA3LjMgMS4zIDE0IDMuOSAyMC4zczYuMiAxMS43IDEwLjggMTYuMyAxMCA4LjIgMTYuMiAxMC45IDEyLjggNCAxOS44IDQgMTMuNi0xLjMgMTkuOC00IDExLjYtNi4zIDE2LjItMTAuOSA4LjItMTAgMTAuOC0xNi4zIDMuOS0xMy4xIDMuOS0yMC4zem0tOTQuOCA5Ni43bDAtNi4zIDg4LjktMTAtMjQyLjkgMTMuNGMuNi0yLjIgMS4xLTQuNiAxLjQtNy4yIC4zLTIgLjUtNC4yIC42LTYuNWw2NC44LTguMS02NC45IDEuOWMwLS40LS4xLS43LS4xLTEuMS0yLjgtMTcuMi0yNS41LTIzLjctMjUuNS0yMy43bC0xLjEtMjYuMyAyMy44IDAgMTkgNDEuOCAxNy4xIDAtNjIuMi0xMzEuNC02Mi4yIDEzMS40IDE3LjEgMCAxOS00MS44IDIzLjYgMC0xLjEgMjYuNHMtMjIuNyA2LjUtMjUuNSAyMy43Yy0uMSAuMy0uMSAuNy0uMSAxLjFsLTY0LjktMS45IDY0LjggOC4xYy4xIDIuMyAuMyA0LjQgLjYgNi41IC4zIDIuNiAuOCA1IDEuNCA3LjJsLTI0Mi45LTEzLjUgODguOSAxMCAwIDYuM2MtNS45IC45LTEwLjUgNi0xMC41IDEyLjIgMCA2LjggNS42IDEyLjQgMTIuNCAxMi40czEyLjQtNS42IDEyLjQtMTIuNGMwLTYuMi00LjYtMTEuMy0xMC41LTEyLjJsMC01LjggODAuMyA5IDAgNS40Yy01LjcgMS4xLTkuOSA2LjItOS45IDEyLjEgMCA2LjggNS42IDEwLjIgMTIuNCAxMC4yczEyLjQtMy40IDEyLjQtMTAuMmMwLTYtNC4zLTExLTkuOS0xMi4xbDAtNC45IDI4LjQgMy4yIDAgMjMuNy01LjkgMCAwIDEzLjkgNS45IDAgMC02LjYgNSAwIDAgNi42IDUuOSAwIDAtMTMuOC01LjkgMCAwLTIzLjIgMzguMyA0LjNjOC4xIDExLjQgMTkgMTMuNiAxOSAxMy42bC0uMSA2LjctNS4xIC4yLS4xIDEyLjEgNC4xIDAgLjEtNSA1LjIgMCAuMSA1IDQuMSAwLS4xLTEyLjEtNS4xLS4yLS4xLTYuN3MxMC45LTIuMSAxOS0xMy42bDM4LjMtNC4zIDAgMjMuMi01LjkgMCAwIDEzLjggNS45IDAgMC02LjYgNSAwIDAgNi42IDUuOSAwIDAtMTMuOC01LjkgMCAwLTIzLjcgMjguNC0zLjIgMCA0LjljLTUuNyAxLjEtOS45IDYuMi05LjkgMTIuMSAwIDYuOCA1LjYgMTAuMiAxMi40IDEwLjJzMTIuNC0zLjQgMTIuNC0xMC4yYzAtNi00LjMtMTEtOS45LTEyLjFsMC01LjQgODAuMy05IDAgNS44Yy01LjkgLjktMTAuNSA2LTEwLjUgMTIuMiAwIDYuOCA1LjYgMTIuNCAxMi40IDEyLjRzMTIuNC01LjYgMTIuNC0xMi40Yy0uMi02LjMtNC43LTExLjQtMTAuNy0xMi4zek0zMjguOSAyMjcuOWwxOS42LTQyLjUgMTkuNiA0Mi41LTE3LjkgMC0xLjctNDAuMy0xLjcgNDAuMy0xNy45IDB6Il19LGY2dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwYWRsZXQiLGljb246WzY0MCw1MTIsW10sImU0YTAiLCJNMjk3LjkgMGwuMSAwYzcuNiAuMSAxNC40IDQuNyAxNy41IDExLjhsMTMyIDMwOC41IC4zLS4xIC4yIC40LTIuOCAxMC00Mi45IDE1OGMtMy43IDE2LjItMTkuNyAyNi4zLTM1LjggMjIuNmwtNjguNC0xNS42LTY4LjUgMTUuNmMtMTYuMSAzLjctMzIuMS02LjQtMzUuOC0yMi42bC00Mi45LTE1OC0yLjctMTAgLjEtLjQgMTMyLjEtMzA4LjRjMy03IDkuOS0xMS42IDE3LjUtMTEuOHpNMTYwLjEgMzIyLjFsMTMxIDM5LjEgNi45IDEyMi41IDcuOS0xMjEuNSAxMzAuNi0zOS4zIC4yLS4xLTEzMSAyNS4xLTguNi0zMjAuMi01LjIgMzIwLjItMTMxLjgtMjUuOHpNNDI2IDIyMi42bDk0LjQtNDEgNzMuOCAwLTE1NyAyNDcuNiAzMS42LTEwOS00Mi44LTk3LjZ6bTE3MS41LTQxLjJsNDEuNCA3Ni4yYzQgNy41LTMuOSAxNS45LTExLjYgMTIuMmwtNDcuNi0yMi43IDE3LjgtNjUuN3pNMTI3LjMgMzE4LjVMMTU4LjcgNDMwIDEuNiAxNTQuNWMtNS45LTEwLjQgNS41LTIyIDE1LjktMTYuMmwxNTEuOCA4NC4yLTQyLjEgOTZ6Il19LHU2dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJlZGdlLWxlZ2FjeSIsaWNvbjpbNDQ4LDUxMixbXSwiZTA3OCIsIk0tNiAyMjguMmwuNC0uNWMwIC4yIDAgLjMtLjEgLjVsLS4zIDB6bTQ2MC42IDE1LjVjMC00NC03LjgtODQuNS0yOC44LTEyMi40LTQxLTczLjQtMTEzLjYtMTEzLjMtMTk4LjYtMTEzLjMtMTM5LjktLjMtMjE4LjMgMTA1LjItMjMyLjggMjE5LjcgNDIuNC02MS4zIDExNy4xLTEyMS40IDIyMC40LTEyNSAwIDAgMTA5LjcgMCA5OS40IDEwNWwtMTc1LjggMGM2LjQtMzcuNCAxOC41LTU5IDM0LjMtNzguOS03NSAzNC45LTEyMS44IDk2LjEtMTIwLjggMTg4LjMgLjggNzEuNSA1MC4xIDE0NC44IDEyMC44IDE3MiA4My40IDMxLjggMTkyLjggNy4yIDI0MC4xLTIxLjNsMC0xMDQuNGMtODAuOSA1Ni41LTI3MC45IDYwLjktMjcyLjMtNjcuNmwzMTQuMSAwIDAtNTIuMXoiXX0sdTJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1sYXN0Zm0iLGljb246WzQ0OCw1MTIsWyJsYXN0Zm0tc3F1YXJlIl0sImYyMDMiLCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTIxMC43IDI4MC44Yy0xLjgtNS41LTMuNC0xMC44LTUtMTUuOS0xMi45LTQxLjktMjEtNjguNC01OC02OC40LTIyLjQgMC00NS4xIDE2LjEtNDUuMSA2MS4yIDAgMzUuMiAxOCA1Ny4yIDQzLjMgNTcuMiAyOC42IDAgNDcuNi0yMS4zIDQ3LjYtMjEuM2wxMS43IDMxLjlzLTE5LjggMTkuNC02MS4yIDE5LjRjLTUxLjMgMC03OS45LTMwLjEtNzkuOS04NS44IDAtNTcuOSAyOC42LTkyIDgyLjUtOTIgNjcuOSAwIDc5LjMgMzUuMyA5Ni40IDg4LjQgMS40IDQuNCAyLjkgOC45IDQuNCAxMy41IDguOCAyNi44IDI0LjIgNDYuMiA2MS4yIDQ2LjIgMjQuOSAwIDM4LjEtNS41IDM4LjEtMTkuMSAwLTE3LjUtMTYuOS0yMS4yLTQwLTI2LjQtMy4yLS43LTYuNS0xLjQtOS45LTIuMi0zMC40LTcuMy00Mi41LTIzLjEtNDIuNS00OCAwLTQwIDMyLjMtNTIuNCA2NS4yLTUyLjQgMzcuNCAwIDYwLjEgMTMuNiA2MyA0Ni42bC0zNi43IDQuNGMtMS41LTE1LjgtMTEtMjIuNC0yOC42LTIyLjQtMTYuMSAwLTI2IDcuMy0yNiAxOS44IDAgMTEgNC44IDE3LjYgMjAuOSAyMS4zIDIuMiAuNSA0LjUgMSA2LjcgMS40IDMxLjEgNi41IDY1LjEgMTMuNyA2NS4xIDU2LjEgLjEgMzYuNy0zMC43IDUwLjYtNzYuMSA1MC42LTYzLjQgMC04NS40LTI4LjYtOTcuMS02NC4xeiJdfSxwNnQ9dTJlLGg2dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnb29kcmVhZHMtZyIsaWNvbjpbMzIwLDUxMixbXSwiZjNhOSIsIk0xMC44IDQwMy4zbDIuOCAwYzEyLjcgMCAyNS41IDAgMzguMiAuMSAxLjYgMCAzLjEtLjQgMy42IDIuMSA3LjEgMzQuOSAzMCA1NC42IDYyLjkgNjMuOSAyNi45IDcuNiA1NC4xIDcuOCA4MS4zIDEuOCAzMy44LTcuNCA1Ni0yOC4zIDY4LTYwLjQgOC0yMS41IDEwLjctNDMuOCAxMS02Ni41IC4xLTUuOCAuMy00Ny0uMi01Mi44bC0uOS0uM2MtLjggMS41LTEuNyAyLjktMi41IDQuNC0yMi4xIDQzLjEtNjEuMyA2Ny40LTEwNS40IDY5LjEtMTAzIDQtMTY5LjQtNTctMTcyLTE3Ni4yLS41LTIzLjcgMS44LTQ2LjkgOC4zLTY5LjcgMjAuNi03MS4xIDc0LjYtMTE4LjIgMTUzLjktMTE4LjggNjEuMy0uNCAxMDEuNSAzOC43IDExNi4yIDcwLjMgLjUgMS4xIDEuMyAyLjMgMi40IDEuOWwwLTYxLjYgNDQuMyAwYzAgMjgwLjMgLjEgMzMyLjIgLjEgMzMyLjItLjEgNzguNS0yNi43IDE0My43LTEwMyAxNjIuMi02OS41IDE2LjktMTU5IDQuOC0xOTYtNTcuMi04LTEzLjUtMTEuOC0yOC4zLTEzLTQ0LjV6TTE1Ny4xIDM2LjVjLTUyLjUtLjUtMTA4LjUgNDAuNy0xMTUgMTMzLjgtNC4xIDU5IDE0LjggMTIyLjIgNzEuNSAxNDguNiAyNy42IDEyLjkgNzQuMyAxNSAxMDguMy04LjcgNDcuNi0zMy4yIDYyLjctOTcgNTQuOC0xNTQtOS43LTcxLjEtNDcuOC0xMjAtMTE5LjYtMTE5Ljd6Il19LG02dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjYy1tYXN0ZXJjYXJkIixpY29uOls1NzYsNTEyLFtdLCJmMWYxIiwiTTQ4Mi45IDQxMC4zYzAgNi44LTQuNiAxMS43LTExLjIgMTEuNy02LjggMC0xMS4yLTUuMi0xMS4yLTExLjdzNC40LTExLjcgMTEuMi0xMS43YzYuNiAwIDExLjIgNS4yIDExLjIgMTEuN3pNMTcyLjEgMzk4LjZjLTcuMSAwLTExLjIgNS4yLTExLjIgMTEuN1MxNjUgNDIyIDE3Mi4xIDQyMmM2LjUgMCAxMC45LTQuOSAxMC45LTExLjctLjEtNi41LTQuNC0xMS43LTEwLjktMTEuN3ptMTE3LjUtLjNjLTUuNCAwLTguNyAzLjUtOS41IDguN2wxOS4xIDBjLS45LTUuNy00LjQtOC43LTkuNi04Ljd6bTEwNy44IC4zYy02LjggMC0xMC45IDUuMi0xMC45IDExLjdzNC4xIDExLjcgMTAuOSAxMS43IDExLjItNC45IDExLjItMTEuN2MwLTYuNS00LjQtMTEuNy0xMS4yLTExLjd6bTEwNS45IDI2LjFjMCAuMyAuMyAuNSAuMyAxLjEgMCAuMy0uMyAuNS0uMyAxLjEtLjMgLjMtLjMgLjUtLjUgLjgtLjMgLjMtLjUgLjUtMS4xIC41LS4zIC4zLS41IC4zLTEuMSAuMy0uMyAwLS41IDAtMS4xLS4zLS4zIDAtLjUtLjMtLjgtLjUtLjMtLjMtLjUtLjUtLjUtLjgtLjMtLjUtLjMtLjgtLjMtMS4xIDAtLjUgMC0uOCAuMy0xLjEgMC0uNSAuMy0uOCAuNS0xLjEgLjMtLjMgLjUtLjMgLjgtLjUgLjUtLjMgLjgtLjMgMS4xLS4zIC41IDAgLjggMCAxLjEgLjMgLjUgLjMgLjggLjMgMS4xIC41cy4yIC42IC41IDEuMXptLTIuMiAxLjRjLjUgMCAuNS0uMyAuOC0uMyAuMy0uMyAuMy0uNSAuMy0uOHMwLS41LS4zLS44Yy0uMyAwLS41LS4zLTEuMS0uM2wtMS42IDAgMCAzLjUgLjggMCAwLTEuNCAuMyAwIDEuMSAxLjQgLjggMC0xLjEtMS4zek01NzYgODFsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgxYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgxQzAgNTQuNSAyMS41IDMzIDQ4IDMzbDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek02NCAyMjAuNmMwIDc2LjUgNjIuMSAxMzguNSAxMzguNSAxMzguNSAyNy4yIDAgNTMuOS04LjIgNzYuNS0yMy4xLTcyLjktNTkuMy03Mi40LTE3MS4yIDAtMjMwLjUtMjIuNi0xNS00OS4zLTIzLjEtNzYuNS0yMy4xLTc2LjQtLjEtMTM4LjUgNjItMTM4LjUgMTM4LjJ6TTI4OCAzMjkuNGM3MC41LTU1IDcwLjItMTYyLjIgMC0yMTcuNS03MC4yIDU1LjMtNzAuNSAxNjIuNiAwIDIxNy41ek0xNDUuNyA0MDUuN2MwLTguNy01LjctMTQuNC0xNC43LTE0LjctNC42IDAtOS41IDEuNC0xMi44IDYuNS0yLjQtNC4xLTYuNS02LjUtMTIuMi02LjUtMy44IDAtNy42IDEuNC0xMC42IDUuNGwwLTQuNC04LjIgMCAwIDM2LjcgOC4yIDBjMC0xOC45LTIuNS0zMC4yIDktMzAuMiAxMC4yIDAgOC4yIDEwLjIgOC4yIDMwLjJsNy45IDBjMC0xOC4zLTIuNS0zMC4yIDktMzAuMiAxMC4yIDAgOC4yIDEwIDguMiAzMC4ybDguMiAwIDAtMjMtLjIgMHpNMTkwLjYgMzkybC03LjkgMCAwIDQuNGMtMi43LTMuMy02LjUtNS40LTExLjctNS40LTEwLjMgMC0xOC4yIDguMi0xOC4yIDE5LjMgMCAxMS4yIDcuOSAxOS4zIDE4LjIgMTkuMyA1LjIgMCA5LTEuOSAxMS43LTUuNGwwIDQuNiA3LjkgMCAwLTM2Ljh6bTQwLjUgMjUuNmMwLTE1LTIyLjktOC4yLTIyLjktMTUuMiAwLTUuNyAxMS45LTQuOCAxOC41LTEuMWwzLjMtNi41Yy05LjQtNi4xLTMwLjItNi0zMC4yIDguMiAwIDE0LjMgMjIuOSA4LjMgMjIuOSAxNSAwIDYuMy0xMy41IDUuOC0yMC43IC44bC0zLjUgNi4zYzExLjIgNy42IDMyLjYgNiAzMi42LTcuNXptMzUuNCA5LjNsLTIuMi02LjhjLTMuOCAyLjEtMTIuMiA0LjQtMTIuMi00LjFsMC0xNi42IDEzLjEgMCAwLTcuNC0xMy4xIDAgMC0xMS4yLTguMiAwIDAgMTEuMi03LjYgMCAwIDcuMyA3LjYgMCAwIDE2LjdjMCAxNy42IDE3LjMgMTQuNCAyMi42IDEwLjl6bTEzLjMtMTMuNGwyNy41IDBjMC0xNi4yLTcuNC0yMi42LTE3LjQtMjIuNi0xMC42IDAtMTguMiA3LjktMTguMiAxOS4zIDAgMjAuNSAyMi42IDIzLjkgMzMuOCAxNC4ybC0zLjgtNmMtNy44IDYuNC0xOS42IDUuOC0yMS45LTQuOXpNMzM4LjkgMzkyYy00LjYtMi0xMS42LTEuOC0xNS4yIDQuNGwwLTQuNC04LjIgMCAwIDM2LjcgOC4yIDAgMC0yMC43YzAtMTEuNiA5LjUtMTAuMSAxMi44LTguNGwyLjQtNy42em0xMC42IDE4LjNjMC0xMS40IDExLjYtMTUuMSAyMC43LTguNGwzLjgtNi41Yy0xMS42LTkuMS0zMi43LTQuMS0zMi43IDE1IDAgMTkuOCAyMi40IDIzLjggMzIuNyAxNWwtMy44LTYuNWMtOS4yIDYuNS0yMC43IDIuNi0yMC43LTguNnpNNDE2LjIgMzkybC04LjIgMCAwIDQuNGMtOC4zLTExLTI5LjktNC44LTI5LjkgMTMuOSAwIDE5LjIgMjIuNCAyNC43IDI5LjkgMTMuOWwwIDQuNiA4LjIgMCAwLTM2Ljh6bTMzLjcgMGMtMi40LTEuMi0xMS0yLjktMTUuMiA0LjRsMC00LjQtNy45IDAgMCAzNi43IDcuOSAwIDAtMjAuN2MwLTExIDktMTAuMyAxMi44LTguNGwyLjQtNy42em00MC4zLTE0LjlsLTcuOSAwIDAgMTkuM2MtOC4yLTEwLjktMjkuOS01LjEtMjkuOSAxMy45IDAgMTkuNCAyMi41IDI0LjYgMjkuOSAxMy45bDAgNC42IDcuOSAwIDAtNTEuN3ptNy42LTc1LjFsMCA0LjYgLjggMCAwLTQuNiAxLjkgMCAwLS44LTQuNiAwIDAgLjggMS45IDB6bTYuNiAxMjMuOGMwLS41IDAtMS4xLS4zLTEuNi0uMy0uMy0uNS0uOC0uOC0xLjFzLS44LS41LTEuMS0uOGMtLjUgMC0xLjEtLjMtMS42LS4zLS4zIDAtLjggLjMtMS40IC4zLS41IC4zLS44IC41LTEuMSAuOC0uNSAuMy0uOCAuOC0uOCAxLjEtLjMgLjUtLjMgMS4xLS4zIDEuNiAwIC4zIDAgLjggLjMgMS40IDAgLjMgLjMgLjggLjggMS4xIC4zIC4zIC41IC41IDEuMSAuOCAuNSAuMyAxLjEgLjMgMS40IC4zIC41IDAgMS4xIDAgMS42LS4zIC4zLS4zIC44LS41IDEuMS0uOHMuNS0uOCAuOC0xLjFjLjMtLjYgLjMtMS4xIC4zLTEuNHptMy4yLTEyNC43bC0xLjQgMC0xLjYgMy41LTEuNi0zLjUtMS40IDAgMCA1LjQgLjggMCAwLTQuMSAxLjYgMy41IDEuMSAwIDEuNC0zLjUgMCA0LjEgMS4xIDAgMC01LjR6bTQuNC04MC41YzAtNzYuMi02Mi4xLTEzOC4zLTEzOC41LTEzOC4zLTI3LjIgMC01My45IDguMi03Ni41IDIzLjEgNzIuMSA1OS4zIDczLjIgMTcxLjUgMCAyMzAuNSAyMi42IDE1IDQ5LjUgMjMuMSA3Ni41IDIzLjEgNzYuNCAuMSAxMzguNS02MS45IDEzOC41LTEzOC40eiJdfSxnNnQ9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGlzY291cnNlIixpY29uOls0NDgsNTEyLFtdLCJmMzkzIiwiTTIyNS45IDMyQzEwMy4zIDMyIDAgMTMwLjUgMCAyNTIuMSAwIDI1NiAuMSA0ODAgLjEgNDgwbDIyNS44LS4yQzM0OC42IDQ3OS44IDQ0OCAzNzcuNSA0NDggMjU1LjlTMzQ4LjYgMzIgMjI1LjkgMzJ6TTIyNCAzODRjLTE5LjQgMC0zNy45LTQuMy01NC40LTEyLjFMODguNSAzOTIgMTExLjQgMzE3Yy05LjgtMTguMS0xNS40LTM4LjktMTUuNC02MSAwLTcwLjcgNTcuMy0xMjggMTI4LTEyOHMxMjggNTcuMyAxMjggMTI4LTU3LjMgMTI4LTEyOCAxMjh6Il19LHg2dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJibGFjay10aWUiLGljb246WzQ0OCw1MTIsW10sImYyN2UiLCJNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMzE2LjUgMzU3LjJsLTkyLjUgODguNy05Mi41LTg4LjcgNjQuNS0xODQtNjQuNS04Ni42IDE4NC45IDAtNjQuNCA4Ni42IDY0LjUgMTg0eiJdfSxwMmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLWZhY2Vib29rIixpY29uOls0NDgsNTEyLFsiZmFjZWJvb2stc3F1YXJlIl0sImYwODIiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw5OC4yIDAgMC0xNDUuOC01Mi44IDAgMC03OC4yIDUyLjggMCAwLTMzLjdjMC04Ny4xIDM5LjQtMTI3LjUgMTI1LTEyNy41IDE2LjIgMCA0NC4yIDMuMiA1NS43IDYuNGwwIDcwLjhjLTYtLjYtMTYuNS0xLTI5LjYtMS00MiAwLTU4LjIgMTUuOS01OC4yIDU3LjJsMCAyNy44IDgzLjYgMC0xNC40IDc4LjItNjkuMyAwIDAgMTQ1LjggMTI5IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6Il19LGI2dD1wMmUsdjZ0PXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJhdHRsZS1uZXQiLGljb246WzUxMiw1MTIsW10sImY4MzUiLCJNNDQ4LjggMjI1LjZjMjYuOSAuMiAzNS42LTcuNCAzOC45LTEyLjQgMTIuNS0xNi4zLTcuMS00Ny42LTUyLjgtNzEuMyAxNy44LTMzLjYgMzAuMS02My43IDM2LjMtODUuMyAzLjQtMTEuOCAxLjEtMTkgLjUtMjAuMy0xLjcgMTAuNS0xNS44IDQ4LjUtNDguMiAxMDAtMjUtMTEuMi01Ni41LTIwLjEtOTMuOC0yMy44LTguOS0xNi45LTM0LjktNjMuOS02MC41LTg4LjktMTYuOC0xNi41LTMwLjMtMjIuNi00MC44LTIzLjVsMCAwYy0xMy44LTEuNi0yMi43IDUuOC0yNy40IDExLTE3LjIgMTguNS0yNC4zIDQ4LjktMjUgODQuMS03LjItMTIuMy0xNy4yLTI0LjYtMjguNS0yNS45bC0uMiAwYy0yMC43LTMuNS0zOC40IDI5LjItMzYgODEuMy0zOC40IDEuNC03MSA1LjgtOTMgMTEuMi05LjkgMi40LTE2LjIgNy4zLTE3LjggOS43IDEtLjQgMjIuNC05LjIgMTExLjYtOS4yIDUuMiA1MyAyOS44IDEwMS44IDI2IDkzLjItOS43IDE1LjQtMzguMiA2Mi40LTQ3LjMgOTcuNy01LjkgMjIuOS00LjQgMzcuNiAuMiA0Ny4xIDUuNiAxMi44IDE2LjQgMTYuNyAyMy4yIDE4LjMgMjUgNS43IDU1LjQtMy42IDg2LjctMjEuMS03LjUgMTIuOC0xMy45IDI4LjUtOS4xIDM5LjMgNy4zIDE5LjYgNDQuNSAxOC43IDg4LjQtOS40IDIwLjIgMzIuMiA0MC4xIDU3LjkgNTUuNyA3NC4xIDIuNiAyLjggNS41IDUuMiA4LjggNy4xIDUuMSAzLjIgOC42IDMuNCA4LjYgMy40LTguMi02LjctMzQtMzgtNjIuNS05MS44IDIyLjItMTYgNDUuNy0zOC45IDY3LjUtNjkuMyAxMjIuOCA0LjYgMTQzLjMtMjQuOCAxNDgtMzEuNiAxNC43LTE5LjkgMy40LTU3LjQtNTcuMy05My43ek0zNzEgMzMxLjhjMjMuOC0zNy43IDMwLjMtNjcuOCAyOS40LTkyLjMgMjcuOSAxNy42IDQ3LjIgMzcuNiA0OS4xIDU4LjggMS4xIDEyLjktOC4xIDI5LjEtNzguNSAzMy41ek0yMTcuMSAzODcuN2M5LjgtNi4yIDE5LjUtMTMuMSAyOS4yLTIwLjUgNi43IDEzLjMgMTMuNiAyNi4xIDIwLjYgMzguMi00MC42IDIxLjktNjguOCAxMi44LTQ5LjgtMTcuN3ptMjE1LTE3MS4zYy0xMC4zLTUuMy0yMS4yLTEwLjMtMzIuNC0xNSA3LjktMTIuMSAxNS41LTI0LjQgMjIuNy0zNi45IDM5LjEgMjQuMSA0NS45IDUzLjIgOS42IDUxLjl6TTI3OS40IDM5OGMtNS41LTExLjQtMTEtMjMuNS0xNi41LTM2LjQgNDMuMiAxLjMgNjIuNC0xOC43IDYzLjMtMjAuNCAwIC4xLTI1IDE1LjYtNjIuNSAxMi4yIDMwLjYtMjUuNiA1OS4xLTUzLjcgODUuMS04NCA4LjctMTAuMiAxNy0yMC42IDI0LjktMzEuMS0uNC0uMy0xLjUtMy0xNi41LTEyLTUxLjcgNjAuMy0xMDIuMyA5OC0xMzIuOCAxMTUuOS0yMC42LTExLjItNDAuOC0zMS44LTU1LjctNjEuNS0yMC0zOS45LTMwLTgyLjQtMzEuNi0xMTYuMSAxMi4zIC45IDI1LjMgMi4yIDM4LjggMy45LTIyLjMgMzYuOC0xNC40IDYzLTEzLjUgNjQuMiAwLS4xLTEtMjkuMiAyMC4xLTU5LjYgOSA1Mi41IDI0IDEwMy44IDQ0LjcgMTUyLjggLjktLjQgMS44IC45IDE4LjctOC4yLTI2LjMtNzQuNS0zMy44LTEzOC4yLTM0LTE3My40IDIwLTEyLjQgNDguMi0xOS44IDgxLjYtMTcuOCA0NC42IDIuNyA4Ni40IDE1LjIgMTE2LjMgMzAuNy03LjEgMTAuNC0xNC45IDIxLjMtMjMuMyAzMi41LTIwLjctMzcuNy00Ny4zLTQzLjktNDguOS00My43IC4xIDAgMjUuOSAxNC4xIDQxLjUgNDcuMi0zNy41LTEzLjgtNzYuMS0yNC40LTExNS4zLTMxLjctMTMuMS0yLjQtMjYuMi00LjQtMzkuNC02LS4xIC40LTEuOCAxLjgtMi4yIDIwLjMgNzcuOSAxNC41IDEzNi42IDM5LjkgMTY3LjIgNTcuMiAuNyAyMy42LTcgNTEuNi0yNS40IDc5LjYtMjQuNiAzNy4zLTU2LjQgNjcuMi04NC44IDg1LjR6bTI3LjQtMjg3Yy00NC42LTEuNy03My42IDcuNC05NC43IDIwLjcgMi01Mi4zIDIxLjMtNzYuNCAzOC4yLTc1LjMgMTYuOS00LjIgNTQuOSA1Mi4yIDU2LjUgNTQuNnptLTEzMC43IDMuMWMuNSAxMi4xIDEuNiAyNC42IDMuMiAzNy4zLTE0LjYtLjktMjguNy0xLjMtNDIuNC0xLjMtLjEgMy4yLS4xLTUxIDI0LjctNDkuNmwuMSAwYzUuOCAxLjEgMTAuNiA2LjkgMTQuNCAxMy42em0tMjguMSAxNjJjMjAuOCAzOS43IDQzLjMgNjAuNiA2NS4zIDcyLjMtNDYuOCAyNC44LTc3LjUgMjAtODQuOSA0LjUtLjItLjItMTEuMS0xNS4zIDE5LjctNzYuOGwwIDB6Il19LHk2dD17cHJlZml4OiJmYWIiLGljb25OYW1lOiJiaW1vYmplY3QiLGljb246WzQ0OCw1MTIsW10sImYzNzgiLCJNNDE2IDMyTDMyIDMyQzE0LjQgMzIgMCA0Ni40IDAgNjRMMCA0NDhjMCAxNy42IDE0LjQgMzIgMzIgMzJsMzg0IDBjMTcuNiAwIDMyLTE0LjQgMzItMzJsMC0zODRjMC0xNy42LTE0LjQtMzItMzItMzJ6TTM1MiAyODkuNGMwIDQ5LjQtMTEuNCA4Mi42LTEwMy44IDgyLjZsLTE2LjkgMGMtNDQuMSAwLTYyLjQtMTQuOS03MC40LTM4LjhsLS45IDAgMCAzNC44LTY0IDAgMC0yMzIgNjQgMCAwIDc0LjcgMS4xIDBjNC42LTMwLjUgMzkuNy0zOC44IDY5LjctMzguOGwxNy4zIDBjOTIuNCAwIDEwMy44IDMzLjEgMTAzLjggODIuNWwwIDM1IC4xIDB6bS02NC0yOC45bDAgMjIuOWMwIDIxLjctMy40IDMzLjgtMzguNCAzMy44bC00NS4zIDBjLTI4LjkgMC00NC4xLTYuNS00NC4xLTM1LjdsMC0xOWMwLTI5LjMgMTUuMi0zNS43IDQ0LjEtMzUuN2w0NS4zIDBjMzUtLjIgMzguNCAxMiAzOC40IDMzLjd6Il19LHVvMT17ZmFTcXVhcmVHaXRodWI6UDFlLGZhR2l0aHViU3F1YXJlOmVpdCxmYVRoaW5rUGVha3M6dGl0LGZhR29vZ2xlRHJpdmU6YWl0LGZhQXV0b3ByZWZpeGVyOnJpdCxmYVNxdWFyZVZpYWRlbzpJMWUsZmFWaWFkZW9TcXVhcmU6aWl0LGZhQ3BhbmVsOm9pdCxmYU1lbmRlbGV5OnNpdCxmYURyYWZ0MmRpZ2l0YWw6bml0LGZhUmVwbHlkOmxpdCxmYUVtcGlyZTpjaXQsZmFBY2Nlc3NpYmxlSWNvbjpkaXQsZmFRdW9yYTpmaXQsZmFDY0pjYjp1aXQsZmFGZWRvcmE6cGl0LGZhRHVvbGluZ286aGl0LGZhRmlyc3RkcmFmdDptaXQsZmFGcmVlYnNkOmdpdCxmYU9keXNlZTp4aXQsZmFHZ0NpcmNsZTpiaXQsZmFDbG91ZGZsYXJlOnZpdCxmYUhhY2tlcnJhbms6eWl0LGZhU2t5YXRsYXM6d2l0LGZhRGVza3BybzpNaXQsZmFSZXNvbHZpbmc6eml0LGZhQmxhY2tiZXJyeTpraXQsZmFTdHJpcGVTOlNpdCxmYVNxdWFyZUJlaGFuY2U6RjFlLGZhQmVoYW5jZVNxdWFyZTpDaXQsZmFTZXJ2aWNlc3RhY2s6TGl0LGZhUm9ja2V0Y2hhdDpUaXQsZmFSZWJlbDpfaXQsZmFTcXVhcmVXZWJBd2Vzb21lOkFpdCxmYUxpbmt0cmVlOiRpdCxmYVNpbXBseWJ1aWx0OkRpdCxmYVN0dWJiZXI6RWl0LGZhQXBwZXI6Tml0LGZhR29vZ2xlU2Nob2xhcjpQaXQsZmFZYXJuOklpdCxmYVN0YWNrT3ZlcmZsb3c6Rml0LGZhQmx1ZXRvb3RoOk9pdCxmYUNyZWF0aXZlQ29tbW9uc05jSnA6Qml0LGZhUmVkZGl0OlJpdCxmYUNvbm5lY3RkZXZlbG9wOkhpdCxmYVJlc2VhcmNoZ2F0ZTpxaXQsZmFTaWduYWxNZXNzZW5nZXI6Vml0LGZhWGluZzpVaXQsZmFTcXVhcmVKczpPMWUsZmFKc1NxdWFyZTpqaXQsZmFGb250aWNvbnM6V2l0LGZhVXBzOkdpdCxmYUFtYXpvblBheTpZaXQsZmFQYW5kb3JhOlppdCxmYU9wZW5pZDpYaXQsZmFWc2NvOlFpdCxmYVVidW50dTpLaXQsZmFWaWFjb2luOkppdCxmYVpoaWh1OmVvdCxmYVlhbmRleDp0b3QsZmFQaXhpdjphb3QsZmFPcGVuYWk6cm90LGZhU2l0aDppb3QsZmFOZmNEaXJlY3Rpb25hbDpvb3QsZmFDcmVhdGl2ZUNvbW1vbnNCeTpzb3QsZmFVbWJyYWNvOm5vdCxmYUhvb2xpOmxvdCxmYVNxdWFyZUdpdDpCMWUsZmFHaXRTcXVhcmU6Y290LGZhT2Rub2tsYXNzbmlraTpkb3QsZmFEcnVwYWw6Zm90LGZhQmxvZ2dlckI6dW90LGZhSW52aXNpb246cG90LGZhRmFjZWJvb2tGOmhvdCxmYUNlbnRvczptb3QsZmFDY0FtYXpvblBheTpnb3QsZmFFYmF5OnhvdCxmYUNvbnRhbzpib3QsZmFFbGxvOnZvdCxmYVNpc3RyaXg6eW90LGZhUGVyaXNjb3BlOndvdCxmYUV4cGVkaXRlZHNzbDpNb3QsZmFOYXBzdGVyOnpvdCxmYURlbGljaW91czprb3QsZmFHdWlsZGVkOlNvdCxmYVhib3g6Q290LGZhVW50YXBwZDpMb3QsZmFHb29nbGVQbHVzRzpUb3QsZmFHaXRodWJBbHQ6X290LGZhR2V0UG9ja2V0OkFvdCxmYUdsaWRlOiRvdCxmYUJpdHk6RG90LGZhV3BleHBsb3JlcjpFb3QsZmFNZWdhcG9ydDpOb3QsZmFNZGI6UG90LGZhUGFnZTQ6SW90LGZhVGhlUmVkWWV0aTpGb3QsZmFKaXJhOk9vdCxmYUZlZGV4OkJvdCxmYUV2ZXJub3RlOlJvdCxmYVVzYjpIb3QsZmFBbmdyeWNyZWF0aXZlOnFvdCxmYU1penVuaTpWb3QsZmFJdGNoSW86VW90LGZhV2luZG93czpqb3QsZmFTdHVtYmxldXBvbjpXb3QsZmFHb29nbGU6ZlYsZmFEaXNjb3JkOkdvdCxmYUhhY2tlck5ld3M6WW90LGZhRWxldmVudHk6UjFlLGZhMTF0eTpab3QsZmFUZWFtc3BlYWs6WG90LGZhU3VwcGxlOlFvdCxmYVNxdWFyZVR3aXR0ZXI6SDFlLGZhVHdpdHRlclNxdWFyZTpLb3QsZmFGb250QXdlc29tZTpkVixmYUZvbnRBd2Vzb21lRmxhZzpKb3QsZmFGb250QXdlc29tZUxvZ29GdWxsOmVzdCxmYVdpcnNpbmRoYW5kd2VyazpxMWUsZmFXc2g6dHN0LGZhQ29uZmx1ZW5jZTphc3QsZmFEaWdnOnJzdCxmYVRocmVhZHM6aXN0LGZhV3ByZXNzcjpWMWUsZmFSZW5kYWN0Om9zdCxmYVlvYXN0OnNzdCxmYU5pbWJscjpuc3QsZmFQaXhlbGZlZDpsc3QsZmFZYWhvbzpjc3QsZmFCbHVlc2t5OmRzdCxmYVNjcmliZDpmc3QsZmFDcmVhdGl2ZUNvbW1vbnNQZDp1c3QsZmFFYXJseWJpcmRzOnBzdCxmYVNxdWFyZU9kbm9rbGFzc25pa2k6VTFlLGZhT2Rub2tsYXNzbmlraVNxdWFyZTpoc3QsZmFNYXJrZG93bjptc3QsZmFUeXBvMzpnc3QsZmFKb29tbGE6eHN0LGZhV2VpeGluOmJzdCxmYUdydW50OnZzdCxmYVJvY2tybXM6eXN0LGZhVW5zcGxhc2g6d3N0LGZhU3F1YXJlSW5zdGFncmFtOmoxZSxmYUluc3RhZ3JhbVNxdWFyZTpNc3QsZmFGaXJzdE9yZGVyQWx0OnpzdCxmYUZ1bGNydW06a3N0LGZhQnJhdmVSZXZlcnNlOlNzdCxmYUF2aWFuZXg6Q3N0LGZhTnM4OkxzdCxmYVNxdWFyZVBpbnRlcmVzdDpXMWUsZmFQaW50ZXJlc3RTcXVhcmU6VHN0LGZhQmx1ZXRvb3RoQjpfc3QsZmFHcmlwZmlyZTpBc3QsZmFTcXVhcmVHb29nbGVQbHVzOkcxZSxmYUdvb2dsZVBsdXNTcXVhcmU6JHN0LGZhQXBwU3RvcmU6RHN0LGZhV2l4OkVzdCxmYUludGVyY29tOk5zdCxmYVJlYWN0ZXVyb3BlOlBzdCxmYVdhemU6SXN0LGZhQ3JlYXRpdmVDb21tb25zUmVtaXg6RnN0LGZhQmFuZGNhbXA6T3N0LGZhU3F1YXJlV2ViQXdlc29tZVN0cm9rZTpCc3QsZmFWaW1lb1Y6UnN0LGZhU3RyYXZhOkhzdCxmYVVuaXJlZ2lzdHJ5OnFzdCxmYUNjRGluZXJzQ2x1YjpWc3QsZmFQaW50ZXJlc3Q6VXN0LGZhQWxnb2xpYTpqc3QsZmFTdGFja3BhdGg6V3N0LGZhT2N0b3B1c0RlcGxveTpHc3QsZmFZYW1tZXI6WXN0LGZhTW9keDpac3QsZmFTcXVhcmVUaHJlYWRzOlhzdCxmYU9sZFJlcHVibGljOlFzdCxmYVN1c2U6S3N0LGZhQXBwU3RvcmVJb3M6SnN0LGZhU3F1YXJlRHJpYmJibGU6WTFlLGZhRHJpYmJibGVTcXVhcmU6ZW50LGZhVWlraXQ6dG50LGZhU3VwZXJwb3dlcnM6YW50LGZhWW91dHViZTpybnQsZmFFbWJlcjppbnQsZmFCb290c3RyYXA6b250LGZhSXR1bmVzOnNudCxmYVNxdWFyZVhpbmc6WjFlLGZhWGluZ1NxdWFyZTpubnQsZmFDc3MzQWx0OmxudCxmYVNxdWFyZXNwYWNlOmNudCxmYVRyZWxsbzpkbnQsZmFWaWFkZW86Zm50LGZhU2VhcmNoZW5naW46dW50LGZhUGF5cGFsOnBudCxmYVNxdWFyZUJsdWVza3k6aG50LGZhREFuZERCZXlvbmQ6bW50LGZhTWljcm9zb2Z0OmdudCxmYUZseTp4bnQsZmFDY1N0cmlwZTpibnQsZmFXb3JkcHJlc3NTaW1wbGU6dm50LGZhU2VsbHN5OnludCxmYURhc2hjdWJlOndudCxmYUdpdHRlcjpNbnQsZmFXb2xmUGFja0JhdHRhbGlvbjp6bnQsZmFMYXN0Zm06a250LGZhU2hvcHdhcmU6U250LGZhQmxvZ2dlcjpDbnQsZmFFZGdlOkxudCxmYUlveGhvc3Q6VG50LGZhU2NobGl4Ol9udCxmYURBbmREOkFudCxmYVZ1ZWpzOiRudCxmYU1ldGE6RG50LGZhQ3JlYXRpdmVDb21tb25zU2hhcmU6RW50LGZhU3R1ZGlvdmluYXJpOk5udCxmYUJpdGJ1Y2tldDpQbnQsZmFWazpJbnQsZmFHaXRodWI6Rm50LGZhQ29kaWVwaWU6T250LGZhUGllZFBpcGVyOkJudCxmYVJhc3BiZXJyeVBpOlJudCxmYUNzczM6SG50LGZhSHVic3BvdDpxbnQsZmFDbXBsaWQ6Vm50LGZhRHlhbG9nOlVudCxmYUVsZW1lbnRvcjpqbnQsZmFGaXJzdE9yZGVyOldudCxmYURyaWJiYmxlOkdudCxmYUxpbmtlZGluOnVWLGZhQ2NQYXlwYWw6WW50LGZhRGhsOlpudCxmYVRleDpYbnQsZmFTaG9waWZ5OlFudCxmYVNxdWFyZVJlZGRpdDpYMWUsZmFSZWRkaXRTcXVhcmU6S250LGZhQ3JlYXRpdmVDb21tb25zTmM6Sm50LGZhR2FsYWN0aWNSZXB1YmxpYzplMHQsZmFGYWNlYm9vazpwVixmYUdpdGxhYjp0MHQsZmFRcTphMHQsZmFTdHJpcGU6cjB0LGZhRGFpbHltb3Rpb246aTB0LGZhU3RlYW06bzB0LGZhU25hcGNoYXQ6UTFlLGZhU25hcGNoYXRHaG9zdDpzMHQsZmFHYWxhY3RpY1NlbmF0ZTpuMHQsZmFQaG9lbml4RnJhbWV3b3JrOmwwdCxmYUdpdDpjMHQsZmFPcHRpbk1vbnN0ZXI6ZDB0LGZhSmVua2luczpmMHQsZmFTbGlkZXNoYXJlOnUwdCxmYVViZXI6cDB0LGZhRGlnaXRhbE9jZWFuOmgwdCxmYVNvdW5kY2xvdWQ6bTB0LGZhU3F1YXJlRmlnbWE6ZzB0LGZhQ3JlYXRpdmVDb21tb25zU2E6eDB0LGZhQ2hyb21lOmIwdCxmYVRyYWRlRmVkZXJhdGlvbjp2MHQsZmFWYWFkaW46eTB0LGZhRGV2aWFudGFydDp3MHQsZmFNZWRpdW06R2QsZmFNZWRpdW1NOk0wdCxmYU9wZW5jYXJ0OnowdCxmYVlDb21iaW5hdG9yOmswdCxmYUxpbmU6UzB0LGZhQW1pbGlhOkMwdCxmYUFzeW1tZXRyaWs6TDB0LGZhUGhhYnJpY2F0b3I6VDB0LGZhQm90czpfMHQsZmFWaW5lOkEwdCxmYU1lZHJ0OiQwdCxmYU9zaTpEMHQsZmFHZzpFMHQsZmFCdXlzZWxsYWRzOk4wdCxmYUdvb2dsZVBsdXM6UDB0LGZhU2NyZWVucGFsOkkwdCxmYUJpdGNvaW46RjB0LGZhU3dpZnQ6TzB0LGZhRmlsZXNQaW53aGVlbDpCMHQsZmFMYXJhdmVsOlIwdCxmYVdwZm9ybXM6SDB0LGZhU3BlYWtlckRlY2s6cTB0LGZhRmxpY2tyOlYwdCxmYUNjVmlzYTpVMHQsZmFVcHdvcms6ajB0LGZhS2FrYW9UYWxrOlcwdCxmYUZsdXR0ZXI6RzB0LGZhQnVmZmVyOlkwdCxmYUdyYXRpcGF5OlowdCxmYUdvb2dsZVBheTpYMHQsZmFBcHBsZTpRMHQsZmFUdW1ibHI6SzB0LGZhUGhvZW5peFNxdWFkcm9uOkowdCxmYUNlbnRlcmNvZGU6ZTR0LGZhRGViaWFuOnQ0dCxmYU1hc3RvZG9uOmE0dCxmYVNrZXRjaDpyNHQsZmFXZWJBd2Vzb21lOmk0dCxmYVNhc3M6bzR0LGZhU3F1YXJlV2hhdHNhcHA6SzFlLGZhV2hhdHNhcHBTcXVhcmU6czR0LGZhU2t5cGU6bjR0LGZhQW5ndWxhcjpsNHQsZmFPcGVuc3VzZTpjNHQsZmFEcm9wYm94OmQ0dCxmYURlZXplcjpmNHQsZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZzp1NHQsZmFKZWRpT3JkZXI6cDR0LGZhUlByb2plY3Q6aDR0LGZhSW5zdGFsb2Q6bTR0LGZhQ2FuYWRpYW5NYXBsZUxlYWY6ZzR0LGZhRXRoZXJldW06eDR0LGZhSG91eno6YjR0LGZhVmliZXI6djR0LGZhS2lja3N0YXJ0ZXI6SjFlLGZhU3F1YXJlS2lja3N0YXJ0ZXI6eTR0LGZhU3BvdGlmeTp3NHQsZmFMZWFucHViOk00dCxmYUphdmE6ejR0LGZhTmZjU3ltYm9sOms0dCxmYVdvZHU6UzR0LGZhU3F1YXJlU3RlYW06ZTJlLGZhU3RlYW1TcXVhcmU6QzR0LGZhQ3JlYXRpdmVDb21tb25zTmNFdTpMNHQsZmFOcG06VDR0LGZhQ2xvdWRzY2FsZTpfNHQsZmFUaGVtZWNvOkE0dCxmYUdvb2dsZVBsYXk6JDR0LGZhS29ydnVlOkQ0dCxmYVczYzpFNHQsZmFHcmF2Ok40dCxmYUF3czpQNHQsZmFHbGlkZUc6STR0LGZhSnNmaWRkbGU6RjR0LGZhS2V5YmFzZTpPNHQsZmFMdW1vbkRyb3A6QjR0LGZhV2VlYmx5OlI0dCxmYURvY2tlcjpINHQsZmFNYWdlbnRvOnE0dCxmYUdpdEFsdDpWNHQsZmFGaXJlZm94QnJvd3NlcjpVNHQsZmFDbG91ZHNtaXRoOmo0dCxmYVdpemFyZHNPZlRoZUNvYXN0Olc0dCxmYUNyZWF0aXZlQ29tbW9uc05kOkc0dCxmYVVzcHM6WTR0LGZhU3F1YXJlTGV0dGVyYm94ZDpaNHQsZmFNYW5kYWxvcmlhbjpYNHQsZmFTbGFjazp0MmUsZmFTbGFja0hhc2g6aFYsZmFBbmdlbGxpc3Q6UTR0LGZhQW5kcm9pZDpLNHQsZmFNZWV0dXA6SjR0LGZhRm9udGljb25zRmk6ZTN0LGZhUGFsZmVkOnQzdCxmYVdwYmVnaW5uZXI6YTN0LGZhRGlhc3BvcmE6cjN0LGZhUHJvZHVjdEh1bnQ6aTN0LGZhU3F1YXJlVXB3b3JrOm8zdCxmYUN1dHRsZWZpc2g6czN0LGZhTWVkYXBwczpuM3QsZmFQaXg6bDN0LGZhU3F1YXJlVHVtYmxyOmEyZSxmYVR1bWJsclNxdWFyZTpjM3QsZmFSZWFjdDpkM3QsZmFKeGw6ZjN0LGZhU3F1YXJlTGlua2VkaW46dTN0LGZhQ3NzOnAzdCxmYUhhc2hub2RlOmgzdCxmYVJlZGRpdEFsaWVuOm0zdCxmYVRpa3RvazptVixmYVdvcmRwcmVzczpnM3QsZmFJZGVhbDp4M3QsZmFQaWVkUGlwZXJQcDpiM3QsZmFVc3N1bm5haDp2M3QsZmFGb3J0QXdlc29tZUFsdDp5M3QsZmFCdXJvbW9iZWxleHBlcnRlOnczdCxmYUJpbGliaWxpOk0zdCxmYU5lb3M6ejN0LGZhRGV2OmszdCxmYUhvdGphcjpTM3QsZmFEb2NodWI6QzN0LGZhVmltZW86TDN0LGZhTWF4Y2RuOlQzdCxmYVNxdWFyZUZvbnRBd2Vzb21lU3Ryb2tlOnIyZSxmYUZvbnRBd2Vzb21lQWx0Ol8zdCxmYVNwZWFrYXA6QTN0LGZhRmFudGFzeUZsaWdodEdhbWVzOiQzdCxmYUxpbnV4OkQzdCxmYUNvdHRvbkJ1cmVhdTpFM3QsZmFHb29nbGVXYWxsZXQ6TjN0LGZhRm91cnNxdWFyZTpQM3QsZmFTaGlydHNpbmJ1bGs6STN0LGZhTWludGJpdDpGM3QsZmFTdGF5bGlua2VkOk8zdCxmYVdlYmZsb3c6QjN0LGZhUmVucmVuOlIzdCxmYVJldjpIM3QsZmFLZXljZG46cTN0LGZhSGlyZUFIZWxwZXI6VjN0LGZhU3F1YXJlSGFja2VyTmV3czppMmUsZmFIYWNrZXJOZXdzU3F1YXJlOlUzdCxmYUNyZWF0aXZlQ29tbW9uc1BkQWx0OmozdCxmYU9yY2lkOlczdCxmYUJlaGFuY2U6RzN0LGZhTW9uZXJvOlkzdCxmYUZpZ21hOlozdCxmYUluc3RhZ3JhbTpnVixmYVBlcmJ5dGU6WDN0LGZhU3F1YXJlVmltZW86bzJlLGZhVmltZW9TcXVhcmU6UTN0LGZhUHVzaGVkOkszdCxmYU1peGNsb3VkOkozdCxmYVlhbmRleEludGVybmF0aW9uYWw6ZWx0LGZhSGl2ZTp0bHQsZmFDcmVhdGl2ZUNvbW1vbnNaZXJvOmFsdCxmYVNxdWFyZVNuYXBjaGF0OnMyZSxmYVNuYXBjaGF0U3F1YXJlOnJsdCxmYVRoZW1laXNsZTppbHQsZmFEYXJ0TGFuZzpvbHQsZmFEZXBsb3lkb2c6c2x0LGZhRmxpcGJvYXJkOm5sdCxmYUJ1eU5MYXJnZTpsbHQsZmFXYXRjaG1hbk1vbml0b3Jpbmc6Y2x0LGZhSGlwczpkbHQsZmFDbG91ZHZlcnNpZnk6Zmx0LGZhR29vZHJlYWRzOnVsdCxmYVRpZGFsOnBsdCxmYVVuaXR5OmhsdCxmYVRlbmNlbnRXZWlibzptbHQsZmFGcmVlQ29kZUNhbXA6Z2x0LGZhWFR3aXR0ZXI6eGx0LGZhU3RpY2tlck11bGU6Ymx0LGZhVHdpdGNoOnZsdCxmYUtpY2tzdGFydGVySzp5bHQsZmFDcml0aWNhbFJvbGU6d2x0LGZhU3RlYW1TeW1ib2w6TWx0LGZhTWFpbGNoaW1wOnpsdCxmYUx1bW9uOmtsdCxmYU51dHJpdGlvbml4OlNsdCxmYUNyZWF0aXZlQ29tbW9uc1NhbXBsaW5nUGx1czpDbHQsZmFSZWRoYXQ6TGx0LGZhU3F1YXJlUGllZFBpcGVyOm4yZSxmYVBpZWRQaXBlclNxdWFyZTpUbHQsZmFXaGF0c2FwcDpfbHQsZmFJbWRiOkFsdCxmYVB5dGhvbjokbHQsZmFDYXNoQXBwOkRsdCxmYVBpbnRlcmVzdFA6RWx0LGZhV2htY3M6Tmx0LGZhSm9nZXQ6UGx0LGZhU3F1YXJlWW91dHViZTpsMmUsZmFZb3V0dWJlU3F1YXJlOklsdCxmYUF0bGFzc2lhbjpGbHQsZmFQaWVkUGlwZXJIYXQ6T2x0LGZhSW50ZXJuZXRFeHBsb3JlcjpCbHQsZmFBaXJibmI6Umx0LGZhSnM6SGx0LGZhUXVpbnNjYXBlOnFsdCxmYUFkdmVyc2FsOlZsdCxmYUNyZWF0aXZlQ29tbW9uczpVbHQsZmFOb3Rpb246amx0LGZhQ2hyb21lY2FzdDpXbHQsZmFXaWtpcGVkaWFXOkdsdCxmYVNpdHJveDpZbHQsZmFTcXVhcmVHaXRsYWI6YzJlLGZhR2l0bGFiU3F1YXJlOlpsdCxmYVNob2VsYWNlOlhsdCxmYVNlbGxjYXN0OlFsdCxmYU1peDpLbHQsZmFDY0FwcGxlUGF5OkpsdCxmYUJyYXZlOmVjdCxmYUV0c3k6dGN0LGZhQnRjOmFjdCxmYUFkbjpyY3QsZmFTcXVhcmVYVHdpdHRlcjppY3QsZmFTcXVhcmVGb250QXdlc29tZTpvY3QsZmFGb3J1bWJlZTpzY3QsZmE0Mkdyb3VwOmQyZSxmYUlubm9zb2Z0Om5jdCxmYVN0dW1ibGV1cG9uQ2lyY2xlOmxjdCxmYVN5bWZvbnk6Y2N0LGZhU2FsZXNmb3JjZTpkY3QsZmFTb3VyY2V0cmVlOmZjdCxmYUxpbmtlZGluSW46dWN0LGZhSHRtbDU6cGN0LGZhUnVzdDpoY3QsZmFIb3JuYmlsbDptY3QsZmFQaHA6Z2N0LGZhRGlzcXVzOnhjdCxmYTUwMHB4OmJjdCxmYUFmZmlsaWF0ZXRoZW1lOnZjdCxmYVJlZFJpdmVyOnljdCxmYVR3aXR0ZXI6eFYsZmFGb3J0QXdlc29tZTp3Y3QsZmFNaXhlcjpNY3QsZmFMeWZ0OnpjdCxmYUFwcGxlUGF5OmtjdCxmYUFydHN0YXRpb246U2N0LGZhTm9kZUpzOkNjdCxmYVVuY2hhcnRlZDpMY3QsZmFQbGF5c3RhdGlvbjpUY3QsZmFNaWNyb2Jsb2c6X2N0LGZhR2l0a3Jha2VuOkFjdCxmYVRlbGVncmFtOmYyZSxmYVRlbGVncmFtUGxhbmU6JGN0LGZhSXR1bmVzTm90ZTpEY3QsZmFMZXNzOkVjdCxmYUZpcmVmb3g6TmN0LGZhS2FnZ2xlOlBjdCxmYUZhY2Vib29rTWVzc2VuZ2VyOkljdCxmYUF1ZGlibGU6RmN0LGZhUGF0cmVvbjpPY3QsZmFWbnY6QmN0LGZhUGFnZWxpbmVzOlJjdCxmYUFtYXpvbjpIY3QsZmFFbnZpcmE6cWN0LGZhTGlub2RlOlZjdCxmYUFjY3Vzb2Z0OlVjdCxmYUVybGFuZzpqY3QsZmFDY0Rpc2NvdmVyOldjdCxmYVNhZmFyaTpHY3QsZmFTcGFjZUF3ZXNvbWU6WWN0LGZhTm9kZTpaY3QsZmFDb2RlcGVuOlhjdCxmYVJhdmVscnk6UWN0LGZhQWxpcGF5OktjdCxmYUNjQW1leDpKY3QsZmFQaWVkUGlwZXJBbHQ6ZTZ0LGZhTGV0dGVyYm94ZDp0NnQsZmFPcGVyYTphNnQsZmFXZWlibzpyNnQsZmFSZWFkbWU6aTZ0LGZhR29sYW5nOm82dCxmYVN0YWNrRXhjaGFuZ2U6czZ0LGZhR3VscDpuNnQsZmFZZWxwOmw2dCxmYUdvZm9yZTpjNnQsZmFBdmlhdG86ZDZ0LGZhUGFkbGV0OmY2dCxmYUVkZ2VMZWdhY3k6dTZ0LGZhU3F1YXJlTGFzdGZtOnUyZSxmYUxhc3RmbVNxdWFyZTpwNnQsZmFHb29kcmVhZHNHOmg2dCxmYUNjTWFzdGVyY2FyZDptNnQsZmFEaXNjb3Vyc2U6ZzZ0LGZhQmxhY2tUaWU6eDZ0LGZhU3F1YXJlRmFjZWJvb2s6cDJlLGZhRmFjZWJvb2tTcXVhcmU6YjZ0LGZhQmF0dGxlTmV0OnY2dCxmYUJpbW9iamVjdDp5NnR9fSk7dmFyIHBvMSxoMmUsTTZ0LHo2dCxtMmUsazZ0LFhkLFM2dCxDNnQsTDZ0LFQ2dCxnMmUsXzZ0LEE2dCwkNnQsUWQsRDZ0LHgyZSxFNnQsYjJlLE42dCxQNnQsSTZ0LEY2dCx2MmUsTzZ0LHkyZSxCNnQsdzJlLFI2dCxNMmUsSDZ0LHoyZSxxNnQsazJlLFY2dCxTMmUsVTZ0LGo2dCxDMmUsVzZ0LEwyZSxHNnQsVDJlLFk2dCxfMmUsWjZ0LFg2dCxBMmUsUTZ0LCQyZSxLNnQsRDJlLEo2dCxFMmUsZTV0LE4yZSx0NXQsYTV0LHI1dCxiVixpNXQsbzV0LHM1dCxuNXQsbDV0LGM1dCxkNXQsZjV0LHZWLHU1dCxwNXQsUDJlLGg1dCxtNXQsZzV0LHg1dCxiNXQsdjV0LHk1dCx3NXQsSTJlLE01dCx6NXQsazV0LFE2LFM1dCxDNXQsRjJlLEw1dCxUNXQsTzJlLF81dCxDVixBNXQsJDV0LHlWLEQ1dCxFNXQsQjJlLE41dCxQNXQsSTV0LFIyZSxGNXQsSDJlLE81dCx3VixCNXQsUjV0LHEyZSxINXQsVjJlLHE1dCxWNXQsVTV0LFUyZSxqNXQsajJlLFc1dCxXMmUsRzV0LEcyZSxZNXQsWjV0LFg1dCxRNXQsWTJlLEs1dCxKNXQsWjJlLGU4dCx0OHQsWDJlLGE4dCxyOHQsUTJlLGk4dCxvOHQsczh0LFlkLG44dCxsOHQsYzh0LEtkLGQ4dCxmOHQsdTh0LEsyZSxwOHQsaDh0LEoyZSxtOHQsZWFlLGc4dCxaZCx4OHQsYjh0LHY4dCx0YWUseTh0LE1WLHc4dCxNOHQsejh0LGs4dCxhYWUsUzh0LHpWLEM4dCxMOHQscmFlLFQ4dCxpYWUsXzh0LEE4dCxvYWUsJDh0LHNhZSxEOHQsa1YsRTh0LE44dCxQOHQsSmQsSTh0LEY4dCxPOHQsQjh0LG5hZSxSOHQsbGFlLEg4dCxjYWUscTh0LGRhZSxWOHQsZmFlLFU4dCx1YWUsajh0LFNWLFc4dCxHOHQsWTh0LFo4dCxwYWUsWDh0LGhhZSxROHQsbWFlLEs4dCxnYWUsSjh0LGVkdCx0ZHQsYWR0LHJkdCxpZHQsb2R0LHhhZSxzZHQsYmFlLG5kdCxsZHQsdmFlLGNkdCx5YWUsZGR0LHdhZSxmZHQsTFYsdWR0LE1hZSxwZHQsaGR0LHphZSxtZHQsa2FlLGdkdCx4ZHQsYmR0LFNhZSx2ZHQseWR0LENhZSx3ZHQsTWR0LHpkdCxrZHQsTGFlLFNkdCxUYWUsQ2R0LF9hZSxMZHQsVGR0LF9kdCxBYWUsQWR0LCRhZSwkZHQsRGFlLERkdCxFZHQsRWFlLE5kdCxOYWUsUGR0LElkdCxQYWUsRmR0LE9kdCxCZHQsaG8xLFJkdD1uKCgpPT57cG8xPSJmYXIiLGgyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJzcXVhcmUtbWludXMiLGljb246WzQ0OCw1MTIsWzYxNzY3LCJtaW51cy1zcXVhcmUiXSwiZjE0NiIsIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTM2IDIzMmwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LE02dD1oMmUsejZ0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNhbGVuZGFyLWNoZWNrIixpY29uOls0NDgsNTEyLFtdLCJmMjc0IiwiTTMyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMTYwIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNjQgMTEyYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZMNjQgMTEyem0yMzAuNyA2NS45YzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuMyAxMC43IDcuOCAxMy4xIDIyLjggNS4zIDMzLjVMMjExLjQgMzc0LjFjLTQuMSA1LjctMTAuNSA5LjMtMTcuNSA5LjgtNyAuNS0xMy45LTItMTguOC02LjlsLTU1LjktNTUuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDM2IDM2IDEwNS42LTE0NS4yeiJdfSxtMmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1raXNzIixpY29uOls1MTIsNTEyLFsxMjg1MzUsImtpc3MiXSwiZjU5NiIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI0MCAwbDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxMi4zLTQuNiAyMy41LTEyLjIgMzIgNy42IDguNSAxMi4yIDE5LjcgMTIuMiAzMiAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bS05Ni00OGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxrNnQ9bTJlLFhkPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InBhc3RlIixpY29uOls1MTIsNTEyLFsiZmlsZS1jbGlwYm9hcmQiXSwiZjBlYSIsIk02NCA0OGwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OCA0OCAwIDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTEyIDAgMC00OC0xMTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnptMTc2IDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0TDEwNCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDUuNiAwYzguOC04LjYgMTktMTUuOCAzMC4yLTIxLjEgLjEtLjkgLjItMS45IC4yLTIuOXpNNDQ4IDQ2NGwtMTYwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsMTAxLjUgMGM0LjIgMCA4LjMgMS43IDExLjMgNC43bDU4LjUgNTguNWMzIDMgNC43IDcuMSA0LjcgMTEuM0w0NjQgNDQ4YzAgOC44LTcuMiAxNi0xNiAxNnpNMjI0IDIyNGwwIDIyNGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2NS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zbC01OC41LTU4LjVjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdMMjg4IDE2MGMtMzUuMyAwLTY0IDI4LjctNjQgNjR6Il19LFM2dD1YZCxDNnQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaGFuZC1wb2ludC1sZWZ0IixpY29uOls1MTIsNTEyLFtdLCJmMGE1IiwiTTY0IDEyOGwxNzcuNiAwYy0xIDUuMi0xLjYgMTAuNS0xLjYgMTZsMCAxNi0xNzYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMjI0IDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI0IDBjNjYuMyAwIDEyMCA1My43IDEyMCAxMjBsMCA0OGMwIDUyLjUtMzMuNyA5Ny4xLTgwLjcgMTEzLjQgLjUtMy4xIC43LTYuMiAuNy05LjQgMC0yMC05LjItMzcuOS0yMy42LTQ5LjcgNC45LTkgNy42LTE5LjQgNy42LTMwLjMgMC0xNS4xLTUuMy0yOS0xNC00MCA4LjgtMTEgMTQtMjQuOSAxNC00MGwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MHptMzItODBsMCAwYy0xOCAwLTM0LjYgNi00OCAxNkw2NCA4MEMyOC43IDgwIDAgMTA4LjcgMCAxNDRzMjguNyA2NCA2NCA2NGw4MiAwYy0xLjMgNS4xLTIgMTAuNS0yIDE2IDAgMjUuMyAxNC43IDQ3LjIgMzYgNTcuNi0yLjYgNy00IDE0LjUtNCAyMi40IDAgMjAgOS4yIDM3LjkgMjMuNiA0OS43LTQuOSA5LTcuNiAxOS40LTcuNiAzMC4zIDAgMzUuMyAyOC43IDY0IDY0IDY0bDg4IDBjOTIuOCAwIDE2OC03NS4yIDE2OC0xNjhsMC00OGMwLTkyLjgtNzUuMi0xNjgtMTY4LTE2OGwtMjQgMHpNMjU2IDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw2NCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC02NCAwek0yNDAgMjI0YzAgNS41IC43IDEwLjkgMiAxNmwtMzQgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwzMiAwIDAgMTZ6bTI0IDY0bDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTY0IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMjQgMHoiXX0sTDZ0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZpbGUtZXhjZWwiLGljb246WzM4NCw1MTIsW10sImYxYzMiLCJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHptOTkuMiAyNjUuNmMtOC0xMC42LTIzLTEyLjgtMzMuNi00LjhzLTEyLjggMjMtNC44IDMzLjZMMTYyIDM0NCAxMjQuOCAzOTMuNmMtOCAxMC42LTUuOCAyNS42IDQuOCAzMy42czI1LjYgNS44IDMzLjYtNC44TDE5MiAzODQgMjIwLjggNDIyLjRjOCAxMC42IDIzIDEyLjggMzMuNiA0LjhzMTIuOC0yMyA0LjgtMzMuNkwyMjIgMzQ0IDI1OS4yIDI5NC40YzgtMTAuNiA1LjgtMjUuNi00LjgtMzMuNnMtMjUuNi01LjgtMzMuNiA0LjhMMTkyIDMwNCAxNjMuMiAyNjUuNnoiXX0sVDZ0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImVudmVsb3BlIixpY29uOls1MTIsNTEyLFsxMjgzODYsOTk5Myw2MTQ0M10sImYwZTAiLCJNNjEuNCA2NEMyNy41IDY0IDAgOTEuNSAwIDEyNS40IDAgMTI2LjMgMCAxMjcuMSAuMSAxMjhMMCAxMjggMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTYtLjEgMGMwLS45IC4xLTEuNyAuMS0yLjYgMC0zMy45LTI3LjUtNjEuNC02MS40LTYxLjRMNjEuNCA2NHpNNDY0IDE5Mi4zTDQ2NCAzODRjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTkxLjcgMTU0LjggMTE3LjRjMzEuNCAyMy45IDc0LjkgMjMuOSAxMDYuNCAwTDQ2NCAxOTIuM3pNNDggMTI1LjRDNDggMTE4IDU0IDExMiA2MS40IDExMmwzODkuMiAwYzcuNCAwIDEzLjQgNiAxMy40IDEzLjQgMCA0LjItMiA4LjItNS4zIDEwLjdMMjgwLjIgMjcxLjVjLTE0LjMgMTAuOC0zNC4xIDEwLjgtNDguNCAwTDUzLjMgMTM2LjFjLTMuMy0yLjUtNS4zLTYuNS01LjMtMTAuN3oiXX0sZzJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InNxdWFyZS1jYXJldC1kb3duIixpY29uOls0NDgsNTEyLFsiY2FyZXQtc3F1YXJlLWRvd24iXSwiZjE1MCIsIk0zODQgNDMyYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDB6bTY0LTE2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMHpNMjI0IDM1MmMtNi43IDAtMTMtMi44LTE3LjYtNy43bC0xMDQtMTEyYy02LjUtNy04LjItMTcuMi00LjQtMjUuOVMxMTAuNSAxOTIgMTIwIDE5MmwyMDggMGM5LjUgMCAxOC4yIDUuNyAyMiAxNC40czIuMSAxOC45LTQuNCAyNS45bC0xMDQgMTEyYy00LjUgNC45LTEwLjkgNy43LTE3LjYgNy43eiJdfSxfNnQ9ZzJlLEE2dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJ0cnVjayIsaWNvbjpbNTc2LDUxMixbMTI4NjY2LDk5NTFdLCJmMGQxIiwiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMuMyAwYzEwLjQtMzYuOSA0NC40LTY0IDg0LjctNjRzNzQuMiAyNy4xIDg0LjcgNjRsMTAyLjYgMGM0LjktMTcuNCAxNS4xLTMyLjcgMjguNy00My45TDM2OCA5NmMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6bTMuMyAzNjhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIgNTUuNCAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43bDQwLjYgNDAuNmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDU3NiAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMuMyAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NGwtMTAyLjYgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjR6TTQxNiAyNTZsMTEyIDAgMC0yMy40YzAtNC4yLTEuNy04LjMtNC43LTExLjNsLTQwLjYtNDAuNmMtMy0zLTcuMS00LjctMTEuMy00LjdsLTU1LjQgMCAwIDgwem0wIDQ4bDAgMzIuNGMyLjYtLjIgNS4zLS40IDgtLjQgNDAuMyAwIDc0LjIgMjcuMSA4NC43IDY0bDMuMyAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTgwLTExMiAwek0xNTIgNDY0YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHptMjcyIDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdfSwkNnQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiYmVsbCIsaWNvbjpbNDQ4LDUxMixbMTI4Mjc2LDYxNjAyXSwiZjBmMyIsIk0yMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA5LjdDMTE4LjYgNDUuMyA1NiAxMTUuNCA1NiAyMDBsMCAxNC41YzAgMzcuNy0xMCA3NC43LTI5IDEwNy4zTDUuMSAzNTkuMkMxLjggMzY1IDAgMzcxLjUgMCAzNzguMiAwIDM5OS4xIDE2LjkgNDE2IDM3LjggNDE2bDM3Mi40IDBjMjAuOSAwIDM3LjgtMTYuOSAzNy44LTM3LjggMC02LjctMS44LTEzLjMtNS4xLTE5TDQyMSAzMjEuN2MtMTktMzIuNi0yOS02OS42LTI5LTEwNy4zbDAtMTQuNWMwLTg0LjYtNjIuNi0xNTQuNy0xNDQtMTY2LjNsMC05LjdjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTM5Mi40IDM2OGwtMzM2LjkgMCAxMi45LTIyLjFDOTEuNyAzMDYgMTA0IDI2MC42IDEwNCAyMTQuNWwwLTE0LjVjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjBzMTIwIDUzLjcgMTIwIDEyMGwwIDE0LjVjMCA0Ni4yIDEyLjMgOTEuNSAzNS41IDEzMS40TDM5Mi40IDM2OHpNMTU2LjEgNDY0YzkuOSAyOCAzNi42IDQ4IDY3LjkgNDhzNTgtMjAgNjcuOS00OGwtMTM1LjggMHoiXX0sUWQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToibWVzc2FnZSIsaWNvbjpbNTEyLDUxMixbImNvbW1lbnQtYWx0Il0sImYyN2EiLCJNMjAzLjcgNTEyLjlzMCAwIDAgMGwtMzcuOCAyNi43Yy03LjMgNS4yLTE2LjkgNS44LTI0LjkgMS43UzEyOCA1MjkgMTI4IDUyMGwwLTcyLTMyIDBjLTUzIDAtOTYtNDMtOTYtOTZMMCAxMjhDMCA3NSA0MyAzMiA5NiAzMmwzMjAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgNTMtNDMgOTYtOTYgOTZsLTEyMC40IDAtOTEuOSA2NC45em02NC4zLTEwNC4xYzguMS01LjcgMTcuOC04LjggMjcuNy04LjhMNDE2IDQwMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyNGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiA4MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAyMjRjMCAyNi41IDIxLjUgNDggNDggNDhsNTYgMGMxMC40IDAgMTkuMyA2LjYgMjIuNiAxNS45IC45IDIuNSAxLjQgNS4yIDEuNCA4LjFsMCA0OS43YzMyLjctMjMuMSA2My4zLTQ0LjcgOTEuOS02NC45eiJdfSxENnQ9UWQseDJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZGl6enkiLGljb246WzUxMiw1MTIsWyJkaXp6eSJdLCJmNTY3IiwiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMTM0LjEgMTUzLjlsMjUuOSAyNS45IDI1LjktMjUuOWM3LjgtNy44IDIwLjUtNy44IDI4LjMgMHM3LjggMjAuNSAwIDI4LjNsLTI1LjkgMjUuOSAyNS45IDI1LjljNy44IDcuOCA3LjggMjAuNSAwIDI4LjNzLTIwLjUgNy44LTI4LjMgMGwtMjUuOS0yNS45LTI1LjkgMjUuOWMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBzLTcuOC0yMC41IDAtMjguM2wyNS45LTI1LjktMjUuOS0yNS45Yy03LjgtNy44LTcuOC0yMC41IDAtMjguM3MyMC41LTcuOCAyOC4zIDB6bTE5MiAwbDI1LjkgMjUuOSAyNS45LTI1LjljNy44LTcuOCAyMC41LTcuOCAyOC4zIDBzNy44IDIwLjUgMCAyOC4zbC0yNS45IDI1LjkgMjUuOSAyNS45YzcuOCA3LjggNy44IDIwLjUgMCAyOC4zcy0yMC41IDcuOC0yOC4zIDBsLTI1LjktMjUuOS0yNS45IDI1LjljLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwcy03LjgtMjAuNSAwLTI4LjNsMjUuOS0yNS45LTI1LjktMjUuOWMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwek0yNTYgMjg4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdfSxFNnQ9eDJlLGIyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjYWxlbmRhci1kYXlzIixpY29uOls0NDgsNTEyLFsiY2FsZW5kYXItYWx0Il0sImYwNzMiLCJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0zODQgNDMyYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0LTg4IDAgMCA4MCA3MiAwem0xNi0xMjhsMC04MC04OCAwIDAgODAgODggMHptLTEzNiAwbDAtODAtODAgMCAwIDgwIDgwIDB6bS0xMjggMGwwLTgwLTg4IDAgMCA4MCA4OCAwek00OCAzNTJsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsNzIgMCAwLTgwLTg4IDB6bTEzNiAwbDAgODAgODAgMCAwLTgwLTgwIDB6TTEyMCAxMTJsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4IDM1MiAwIDAtNDhjMC04LjgtNy4yLTE2LTE2LTE2bC0yNjQgMHoiXX0sTjZ0PWIyZSxQNnQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaGFuZC1wb2ludC11cCIsaWNvbjpbMzg0LDUxMixbOTc1N10sImYwYTYiLCJNNjQgNjRsMCAxNzcuNmM1LjItMSAxMC41LTEuNiAxNi0xLjZsMTYgMCAwLTE3NmMwLTguOC03LjItMTYtMTYtMTZTNjQgNTUuMiA2NCA2NHpNODAgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDI0YzAgNjYuMyA1My43IDEyMCAxMjAgMTIwbDQ4IDBjNTIuNSAwIDk3LjEtMzMuNyAxMTMuNC04MC43LTMuMSAuNS02LjIgLjctOS40IC43LTIwIDAtMzcuOS05LjItNDkuNy0yMy42LTkgNC45LTE5LjQgNy42LTMwLjMgNy42LTE1LjEgMC0yOS01LjMtNDAtMTQtMTEgOC44LTI0LjkgMTQtNDAgMTRsLTQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDAgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtODAgMHpNMCAzMjBsMCAwYzAtMTggNi0zNC42IDE2LTQ4TDE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBzNjQgMjguNyA2NCA2NGwwIDgyYzUuMS0xLjMgMTAuNS0yIDE2LTIgMjUuMyAwIDQ3LjIgMTQuNyA1Ny42IDM2IDctMi42IDE0LjUtNCAyMi40LTQgMjAgMCAzNy45IDkuMiA0OS43IDIzLjYgOS00LjkgMTkuNC03LjYgMzAuMy03LjYgMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA4OGMwIDkyLjgtNzUuMiAxNjgtMTY4IDE2OGwtNDggMEM3NS4yIDUxMiAwIDQzNi44IDAgMzQ0bDAtMjR6bTMzNi02NGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHpNMTYwIDI0MGM1LjUgMCAxMC45IC43IDE2IDJsMC0zNGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDMyIDE2IDB6bTY0IDI0bDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMjR6Il19LEk2dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJoYW5kLWxpemFyZCIsaWNvbjpbNTEyLDUxMixbXSwiZjI1OCIsIk03MiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTY4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE1MiAwYzQuNSAwIDguOSAxLjMgMTIuNyAzLjZsNjQgNDBjNyA0LjQgMTEuMyAxMi4xIDExLjMgMjAuNGwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTAuNy00Ni45LTI5LjMtMTQ1LjEgMGMtMzkuOCAwLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MmwxMDQgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkw3MiAyMDhjLTM5LjggMC03Mi0zMi4yLTcyLTcyUzMyLjIgNjQgNzIgNjRsMjA5LjYgMGM0Ni43IDAgOTAuOSAyMS41IDExOS43IDU4LjNsNzguNCAxMDAuMWMyMC45IDI2LjcgMzIuMyA1OS43IDMyLjMgOTMuN0w1MTIgNDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTA3LjljMC0yMy4yLTcuOC00NS44LTIyLjEtNjQuMUwzNjMuNSAxNTEuOWMtMTkuNy0yNS4yLTQ5LjktMzkuOS04MS45LTM5LjlMNzIgMTEyeiJdfSxGNnQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToic3F1YXJlLWZ1bGwiLGljb246WzUxMiw1MTIsWzEyODk5NywxMjg5OTgsMTI4OTk5LDEyOWUzLDEyOTAwMSwxMjkwMDIsMTI5MDAzLDExMDM1LDExMDM2XSwiZjQ1YyIsIk00NDggNDhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzg0YzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZsMzg0IDB6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6Il19LHYyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjaXJjbGUtcGF1c2UiLGljb246WzUxMiw1MTIsWzYyMDkyLCJwYXVzZS1jaXJjbGUiXSwiZjI4YiIsIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE0NHptMTEyIDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE0NHoiXX0sTzZ0PXYyZSx5MmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaGFyZC1kcml2ZSIsaWNvbjpbNDQ4LDUxMixbMTI4NDM2LCJoZGQiXSwiZjBhMCIsIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTYyYzUuMS0xLjMgMTAuNS0yIDE2LTJsMzIwIDBjNS41IDAgMTAuOSAuNyAxNiAybDAtMTYyYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHpNNDggMzIwbDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCAzMDRjLTguOCAwLTE2IDcuMi0xNiAxNnpNMCAzMjBMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtOTZ6bTIxNiA0OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdfSxCNnQ9eTJlLHcyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmaWxlLXppcHBlciIsaWNvbjpbMzg0LDUxMixbImZpbGUtYXJjaGl2ZSJdLCJmMWM2IiwiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6TTgwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptNjQgNTZsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDhjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tMTYgNjRhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyeiJdfSxSNnQ9dzJlLE0yZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmbG9wcHktZGlzayIsaWNvbjpbNDQ4LDUxMixbMTI4MTkwLDEyODQyNiwic2F2ZSJdLCJmMGM3IiwiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0Mi43YzAtNC4yLTEuNy04LjMtNC43LTExLjNMMzIwIDg2LjYgMzIwIDE3NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTYtMzIgMHptODAgMGwwIDgwIDEyOCAwIDAtODAtMTI4IDB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjQyLjcgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w0MjkuMyAxMjhjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0w0NDggNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTYwIDMyMGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6Il19LEg2dD1NMmUsejJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi10b25ndWUtc3F1aW50IixpY29uOls1MTIsNTEyLFsxMjg1NDEsImdyaW4tdG9uZ3VlLXNxdWludCJdLCJmNThhIiwiTTQ2NCAyNTZjMC0xMTQuOS05My4xLTIwOC0yMDgtMjA4UzQ4IDE0MS4xIDQ4IDI1NmMwIDc1LjkgNDAuNyAxNDIuNCAxMDEuNSAxNzguNy0zLjYtMTAuOS01LjUtMjIuNi01LjUtMzQuN2wwLTM3LjVjLTEwLjItMTIuNi0xOC4zLTI2LjktMjMuOC00Mi40LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNiAxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtNS41IDE1LjYtMTMuNiAyOS45LTIzLjggNDIuNWwwIDM3LjVjMCAxMi4xLTEuOSAyMy44LTUuNSAzNC43IDYwLjgtMzYuMyAxMDEuNS0xMDIuNyAxMDEuNS0xNzguN3pNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTI1LjgtNzUuN2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXMxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjN6bTI2My42LTIxLjFjNC41IDYuOCAzLjEgMTUuOS0zLjEgMjEuMUwzNTMgMjA4IDM4Ni4yIDIzNS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41ek0zMjAgNDE2bDAtMzcuNGMwLTE0LjctMTEuOS0yNi42LTI2LjYtMjYuNmwtMiAwYy0xMS4zIDAtMjEuMSA3LjktMjMuNiAxOC45LTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDAtMi41LTExLjEtMTIuMy0xOC45LTIzLjYtMTguOWwtMiAwYy0xNC43IDAtMjYuNiAxMS45LTI2LjYgMjYuNmwwIDM3LjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXX0scTZ0PXoyZSxrMmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2FtZXJhIixpY29uOls1MTIsNTEyLFs2MjI1OCwiY2FtZXJhLWFsdCJdLCJmMDMwIiwiTTE5My4xIDMyYy0xOC43IDAtMzYuMiA5LjQtNDYuNiAyNC45TDEyMC41IDk2IDY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtNTYuNSAwLTI2LTM5LjFDMzU1LjEgNDEuNCAzMzcuNiAzMiAzMTguOSAzMkwxOTMuMSAzMnptLTYuNyA1MS42YzEuNS0yLjIgNC0zLjYgNi43LTMuNmwxMjUuNyAwYzIuNyAwIDUuMiAxLjMgNi43IDMuNmwzMy4yIDQ5LjhjNC41IDYuNyAxMS45IDEwLjcgMjAgMTAuN2w2OS4zIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjU2YzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsNjkuMyAwYzggMCAxNS41LTQgMjAtMTAuN2wzMy4yLTQ5Ljh6TTI1NiAzODRhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0ek0xOTIgMjcyYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXX0sVjZ0PWsyZSxTMmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1ncmluLXN0YXJzIixpY29uOls1MTIsNTEyLFsxMjkzMjEsImdyaW4tc3RhcnMiXSwiZjU4NyIsIk0wIDI1NmMwLTI5LjYgNS01Ny45IDE0LjItODQuNGwxNy4zIDE2LjktNC42IDI3Yy00LjIgMjQuNCA1LjYgNDYuMiAyMiA1OS45IDkuOCAxMDUuOCA5OC44IDE4OC43IDIwNy4xIDE4OC43czE5Ny40LTgyLjggMjA3LjEtMTg4LjZjMTYuNC0xMy43IDI2LjEtMzUuNCAyMi01OS45bC00LjYtMjcgMTcuMy0xNi45YzkuMiAyNi40IDE0LjIgNTQuOCAxNC4yIDg0LjQgMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMwIDM5Ny40IDAgMjU2ek0yNTYgNDhjLTE1LjIgMC0zMCAxLjYtNDQuMyA0LjdMMjAxLjQgMzEuOEMxOTcgMjMgMTkxLjEgMTUuOCAxODQuMiAxMC4yIDIwNyAzLjYgMjMxLjEgMCAyNTYgMHM0OSAzLjYgNzEuOCAxMC4yQzMyMC45IDE1LjggMzE1IDIzIDMxMC42IDMxLjhMMzAwLjMgNTIuN0MyODYgNDkuNiAyNzEuMiA0OCAyNTYgNDh6TTM3Mi4yIDMwMi4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42ek0zNTMuNyA1My4xYzUuOS0xMS45IDIyLjgtMTEuOSAyOC43IDBsMjMuMyA0Ny4yIDUyIDcuNmMxMy4xIDEuOSAxOC40IDE4IDguOSAyNy4zbC0zNy43IDM2LjcgOC45IDUxLjhjMi4yIDEzLjEtMTEuNSAyMy0yMy4yIDE2LjlMMzY4IDIxNiAzMjEuNSAyNDAuNWMtMTEuNyA2LjItMjUuNS0zLjgtMjMuMi0xNi45bDguOS01MS44LTM3LjctMzYuN2MtOS41LTkuMy00LjMtMjUuNCA4LjktMjcuM2w1Mi03LjYgMjMuMy00Ny4yem0tMTk1LjMgMGwyMy4zIDQ3LjIgNTIgNy42YzEzLjEgMS45IDE4LjQgMTggOC45IDI3LjNsLTM3LjcgMzYuNyA4LjkgNTEuOGMyLjIgMTMuMS0xMS41IDIzLTIzLjIgMTYuOUwxNDQgMjE2IDk3LjUgMjQwLjVjLTExLjcgNi4yLTI1LjUtMy44LTIzLjItMTYuOWw4LjktNTEuOC0zNy43LTM2LjdjLTkuNS05LjMtNC4zLTI1LjQgOC45LTI3LjNsNTItNy42IDIzLjMtNDcuMmM1LjktMTEuOSAyMi44LTExLjkgMjguNyAweiJdfSxVNnQ9UzJlLGo2dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJleWUiLGljb246WzU3Niw1MTIsWzEyODA2NV0sImYwNmUiLCJNMjg4IDgwQzIyMi44IDgwIDE2OS4yIDEwOS42IDEyOC4xIDE0Ny43IDg5LjYgMTgzLjUgNjMgMjI2IDQ5LjQgMjU2IDYzIDI4NiA4OS42IDMyOC41IDEyOC4xIDM2NC4zIDE2OS4yIDQwMi40IDIyMi44IDQzMiAyODggNDMyczExOC44LTI5LjYgMTU5LjktNjcuN0M0ODYuNCAzMjguNSA1MTMgMjg2IDUyNi42IDI1NiA1MTMgMjI2IDQ4Ni40IDE4My41IDQ0Ny45IDE0Ny43IDQwNi44IDEwOS42IDM1My4yIDgwIDI4OCA4MHpNOTUuNCAxMTIuNkMxNDIuNSA2OC44IDIwNy4yIDMyIDI4OCAzMnMxNDUuNSAzNi44IDE5Mi42IDgwLjZjNDYuOCA0My41IDc4LjEgOTUuNCA5MyAxMzEuMSAzLjMgNy45IDMuMyAxNi43IDAgMjQuNi0xNC45IDM1LjctNDYuMiA4Ny43LTkzIDEzMS4xLTQ3LjEgNDMuNy0xMTEuOCA4MC42LTE5Mi42IDgwLjZTMTQyLjUgNDQzLjIgOTUuNCAzOTkuNGMtNDYuOC00My41LTc4LjEtOTUuNC05My0xMzEuMS0zLjMtNy45LTMuMy0xNi43IDAtMjQuNiAxNC45LTM1LjcgNDYuMi04Ny43IDkzLTEzMS4xek0yODggMzM2YzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtMjkuNi0xNi4xLTU1LjUtNDAtNjkuMy0xLjQgNTkuNy00OS42IDEwNy45LTEwOS4zIDEwOS4zIDEzLjggMjMuOSAzOS43IDQwIDY5LjMgNDB6bS03OS42LTg4LjRjMi41IC4zIDUgLjQgNy42IC40IDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMi42LS4yLTUuMS0uNC03LjYtMzcuNCAzLjktNjcuMiAzMy43LTcxLjEgNzEuMXptNDUuNi0xMTVjMTAuOC0zIDIyLjItNC41IDMzLjktNC41IDguOCAwIDE3LjUgLjkgMjUuOCAyLjYgLjMgLjEgLjUgLjEgLjggLjIgNTcuOSAxMi4yIDEwMS40IDYzLjcgMTAxLjQgMTI1LjIgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjgtNjEuNiAwLTExMy00My41LTEyNS4yLTEwMS40LTEuOC04LjYtMi44LTE3LjUtMi44LTI2LjYgMC0xMSAxLjQtMjEuOCA0LTMyIC4yLS43IC4zLTEuMyAuNS0xLjkgMTEuOS00My40IDQ2LjEtNzcuNiA4OS41LTg5LjV6Il19LEMyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLXNhZC10ZWFyIixpY29uOls1MTIsNTEyLFsxMjg1NDYsInNhZC10ZWFyIl0sImY1YjQiLCJNNDY0IDI1NmMwLTExNC45LTkzLjEtMjA4LTIwOC0yMDhTNDggMTQxLjEgNDggMjU2YzAgNDEuOCAxMi4zIDgwLjcgMzMuNiAxMTMuMyA4LjIgNDQuNyA0Ny4zIDc4LjYgOTQuMyA3OC43IDI0LjcgMTAuMyA1MS43IDE2IDgwLjEgMTYgMTE0LjkgMCAyMDgtOTMuMSAyMDgtMjA4ek0yODggMzUyYy01LjUgMC0xMC45IC42LTE2IDEuOCAwLS42IDAtMS4yIDAtMS44IDAtMTYuMi00LTMxLjUtMTEuMS00NC45IDguNy0yIDE3LjgtMy4xIDI3LjEtMy4xIDQwLjIgMCA3NS43IDE5LjggOTcuNSA1MCA3LjcgMTAuOCA1LjMgMjUuOC01LjUgMzMuNXMtMjUuOCA1LjMtMzMuNS01LjVjLTEzLjEtMTguMi0zNC40LTMwLTU4LjUtMzB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ni04MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xODUuNCAyNzYuOGM2LjUgNy44IDEyLjYgMTYuMSAxOC4zIDI0LjYgOSAxMy40IDIwLjMgMzAuMiAyMC4zIDQ3LjQgMCAyOC4zLTIxLjUgNTEuMi00OCA1MS4ycy00OC0yMi45LTQ4LTUxLjJjMC0xNy4yIDExLjItMzQgMjAuMy00Ny40IDUuNy04LjUgMTEuOS0xNi43IDE4LjMtMjQuNiAyLjQtMi45IDUuNy00LjggOS40LTQuOHM3IDEuOSA5LjQgNC44eiJdfSxXNnQ9QzJlLEwyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJzaGFyZS1mcm9tLXNxdWFyZSIsaWNvbjpbNTc2LDUxMixbNjE1MDksInNoYXJlLXNxdWFyZSJdLCJmMTRkIiwiTTQyNS41IDdjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMzg0LjUgMTQuMyAzODQuNSAyNGwwIDU2LTQ4IDBjLTg4LjQgMC0xNjAgNzEuNi0xNjAgMTYwIDAgNDYuNyAyMC43IDgwLjQgNDMuNiAxMDMuNCA4LjEgOC4yIDE2LjUgMTQuOSAyNC4zIDIwLjQgOS4yIDYuNSAyMS43IDUuNyAzMC4xLTEuOXMxMC4yLTIwIDQuNS0yOS44Yy0zLjYtNi4zLTYuNS0xNC45LTYuNS0yNi43IDAtMzYuMiAyOS4zLTY1LjUgNjUuNS02NS41bDQ2LjUgMCAwIDU2YzAgOS43IDUuOCAxOC41IDE0LjggMjIuMnMxOS4zIDEuNyAyNi4yLTUuMmwxMzYtMTM2YzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDQyNS41IDd6bTcgOTdsMC0yMi4xIDc4LjEgNzguMS03OC4xIDc4LjEgMC0yMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0TDMzOCAxOTJjLTUwLjkgMC05My45IDMzLjUtMTA4LjMgNzkuNi0zLjMtOS40LTUuMi0xOS44LTUuMi0zMS42IDAtNjEuOSA1MC4xLTExMiAxMTItMTEybDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjR6bS0zMjAtOGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyNTZjMCA0NC4yIDM1LjggODAgODAgODBsMjU2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQgMHoiXX0sRzZ0PUwyZSxUMmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToibm90ZS1zdGlja3kiLGljb246WzQ0OCw1MTIsWzYyMDI2LCJzdGlja3ktbm90ZSJdLCJmMjQ5IiwiTTI0MCA0MzJMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZMNDggOTZjMC04LjggNy4yLTE2IDE2LTE2bDMyMCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE3Ni04OCAwYy0zOS44IDAtNzIgMzIuMi03MiA3MmwwIDg4ek0zODAuMSAzMjBMMjg4IDQxMi4xIDI4OCAzNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNjguMSAwek0wIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTcuNSAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDQyOS4zIDMzOC43YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZ6Il19LFk2dD1UMmUsXzJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhhbmQtYmFjay1maXN0IixpY29uOlszODQsNTEyLFsiaGFuZC1yb2NrIl0sImYyNTUiLCJNOTYgNDAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgNDAwek03My4yIDM1Mmw2NC42IDAtNzkuNS04OC4zQzUxLjcgMjU2LjMgNDggMjQ2LjggNDggMjM2LjlMNDggMjA0YzAtMTYuMSAxMS45LTI5LjUgMjcuNC0zMS43IDExLjgtMS43IDIwLjYtMTEuOCAyMC42LTIzLjhMOTYgNzJjMC0xMy4zIDEwLjctMjQgMjQtMjQgNy4yIDAgMTMuNiAzLjEgMTggOC4xIDQuNiA1LjIgMTEuMSA4LjEgMTggOC4xczEzLjQtMyAxOC04LjFjNC40LTUgMTAuOC04LjEgMTgtOC4xIDguNSAwIDE1LjkgNC40IDIwLjIgMTEuMSA2LjkgMTAuNyAyMC45IDE0LjIgMzIgOCAzLjUtMS45IDcuNC0zLjEgMTEuOC0zLjEgMTAuNiAwIDE5LjcgNi45IDIyLjggMTYuNiAzLjggMTEuNyAxNS45IDE4LjcgMjggMTYgMS43LS40IDMuNC0uNiA1LjItLjYgMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA5Mi4yYzAgMTQuNC0zLjUgMjguNS0xMC4yIDQxLjJsLTUyLjIgOTguNiA1NC4zIDAgNDAuMy03Ni4yYzEwLjQtMTkuNiAxNS44LTQxLjUgMTUuOC02My42bDAtOTIuMmMwLTM4LjQtMzAuMS02OS44LTY4LjEtNzEuOS0xMi45LTE5LjMtMzQuOS0zMi4xLTU5LjktMzIuMS01LjcgMC0xMS4yIC43LTE2LjUgMS45LTEyLjctMTEuMS0yOS4zLTE3LjktNDcuNS0xNy45LTEzLjEgMC0yNS40IDMuNS0zNiA5LjYtMTAuNi02LjEtMjIuOS05LjYtMzYtOS42LTM5LjggMC03MiAzMi4yLTcyIDcybDAgNTguN0MxOS43IDE0MyAwIDE3MS4yIDAgMjA0bDAgMzIuOWMwIDIxLjcgOCA0Mi43IDIyLjYgNTguOUw3My4yIDM1MnoiXX0sWjZ0PV8yZSxYNnQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2hlc3MtcXVlZW4iLGljb246WzUxMiw1MTIsWzk4MTldLCJmNDQ1IiwiTTMyNS4zIDkwLjhjOS4xLTQuOCAyMC42LTMuMyAyOC4yIDQuM2wzOS44IDM5LjggMy43IDMuM2M5LjEgNy4xIDIwLjkgMTAgMzIuNCA3LjdsNDYuNC05LjMgMy41LS40YzgtLjQgMTUuOCAzLjIgMjAuNiA5LjggNS41IDcuNiA2LjEgMTcuNiAxLjYgMjUuOGwtMTEyLjYgMjAyLjYgNTEuNSA3MC45IDEuOCAyLjdjNCA2LjYgNi4yIDE0LjIgNi4yIDIyIDAgMjMuMy0xOC45IDQyLjEtNDIuMSA0Mi4xbC0yOTkuOCAwYy0yMS44IDAtMzkuOC0xNi42LTQxLjktMzcuOGwtLjItNC4zIC4xLTMuM2MuNi03LjcgMy40LTE1LjEgNy45LTIxLjRsNTEuNS03MC45LTExMi41LTIwMi42Yy00LjUtOC4yLTMuOS0xOC4zIDEuNi0yNS44czE0LjktMTEuMiAyNC4xLTkuNGw0Ni40IDkuM2MxMy4xIDIuNiAyNi43LTEuNSAzNi4xLTEwLjlMMTU5LjUgOTUgMTYzIDkyLjJjOC42LTUuOCAyMC4xLTUuNiAyOC41IDEuMWw0MCAzMiAyLjggMi4xYzE0LjQgOS42IDMzLjUgOC45IDQ3LjItMi4xbDQwLTMyIDMuOC0yLjV6TTE2NC43IDQwMGwtNDYuNiA2NCAyNzYuNyAwLTQ2LjYtNjQtMTgzLjYgMHpNMzExLjUgMTYyLjhjLTMwLjEgMjQuMS03Mi4xIDI1LjYtMTAzLjggNC41bC02LjItNC41LTIzLjMtMTguNi0yNC42IDI0LjZjLTE5LjggMTkuOC00Ny43IDI4LjktNzUuMSAyNC44bDg4LjEgMTU4LjUgMTc5LjggMCA4OC0xNTguNWMtMjUuNyAzLjgtNTEuNy0zLjktNzEuMS0yMWwtNC0zLjctMjQuNi0yNC42LTIzLjIgMTguNnpNMjU2LjUgNzJhNDAgNDAgMCAxIDEgMC04MCA0MCA0MCAwIDEgMSAwIDgweiJdfSxBMmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1ncmluLXRlYXJzIixpY29uOls2NDAsNTEyLFsxMjg1MTQsImdyaW4tdGVhcnMiXSwiZjU4OCIsIk01MDQuMSAzNTNDNTEyLjkgMzY3LjIgNTI1LjMgMzc5IDUzOS44IDM4Ny4yIDQ5NS4xIDQ2MiA0MTMuNCA1MTIgMzIwIDUxMlMxNDQuOSA0NjIgMTAwLjIgMzg3LjJjMTQuNi04LjIgMjYuOS0yMCAzNS44LTM0LjMgMzQuOSA2NiAxMDQuMiAxMTEgMTg0LjEgMTExczE0OS4yLTQ1IDE4NC4xLTExMXptMTYuNC0xNTIuNUM0OTYuMiAxMTIuNiA0MTUuNyA0OCAzMjAgNDhTMTQzLjggMTEyLjYgMTE5LjUgMjAwLjVjLTEwLjYtNC44LTIyLjctNi44LTM1LjQtNWwtMTMuNCAxLjlDOTcuMiA4NC4zIDE5OC44IDAgMzIwIDBTNTQyLjggODQuMyA1NjkuMyAxOTcuNGwtMTMuNC0xLjljLTEyLjctMS44LTI0LjggLjItMzUuNCA1ek00NTUuOCAzMjBjLTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjYgMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44ek0yMTIgMjA4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6bTE4OC0yOGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHpNNjQwIDMwMC42YzAgMjguNC0yMyA1MS40LTUxLjQgNTEuNC0yNS42IDAtNDcuMy0xOC44LTUwLjktNDQuMUw1MzEgMjYxLjFjLTEuNS0xMC42IDcuNS0xOS42IDE4LjEtMTguMWw0Ni43IDYuN2MyNS4zIDMuNiA0NC4xIDI1LjMgNDQuMSA1MC45em0tNjQwIDBjMC0yNS42IDE4LjgtNDcuMyA0NC4xLTUwLjlMOTAuOSAyNDNjMTAuNi0xLjUgMTkuNiA3LjUgMTguMSAxOC4xbC02LjcgNDYuN0M5OC43IDMzMy4yIDc3IDM1MiA1MS40IDM1MiAyMyAzNTIgMCAzMjkgMCAzMDAuNnoiXX0sUTZ0PUEyZSwkMmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToicGVuLXRvLXNxdWFyZSIsaWNvbjpbNTEyLDUxMixbImVkaXQiXSwiZjA0NCIsIk00NDEgNTguOUw0NTMuMSA3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUw0MjQgMTM0LjEgMzc3LjkgODggNDA3IDU4LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDB6TTIwOS44IDI1Ni4yTDM0NCAxMjEuOSAzOTAuMSAxNjggMjU1LjggMzAyLjJjLTIuOSAyLjktNi41IDUtMTAuNCA2LjFsLTU4LjUgMTYuNyAxNi43LTU4LjVjMS4xLTMuOSAzLjItNy41IDYuMS0xMC40ek0zNzMuMSAyNUwxNzUuOCAyMjIuMmMtOC43IDguNy0xNSAxOS40LTE4LjMgMzEuMWwtMjguNiAxMDBjLTIuNCA4LjQtLjEgMTcuNCA2LjEgMjMuNnMxNS4yIDguNSAyMy42IDYuMWwxMDAtMjguNmMxMS44LTMuNCAyMi41LTkuNyAzMS4xLTE4LjNMNDg3IDEzOC45YzI4LjEtMjguMSAyOC4xLTczLjcgMC0xMDEuOEw0NzQuOSAyNUM0NDYuOC0zLjEgNDAxLjItMy4xIDM3My4xIDI1ek04OCA2NEMzOS40IDY0IDAgMTAzLjQgMCAxNTJMMCA0MjRjMCA0OC42IDM5LjQgODggODggODhsMjcyIDBjNDguNiAwIDg4LTM5LjQgODgtODhsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAyMi4xLTE3LjkgNDAtNDAgNDBMODggNDY0Yy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTI3MmMwLTIyLjEgMTcuOS00MCA0MC00MGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCA2NHoiXX0sSzZ0PSQyZSxEMmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1ncmluLWJlYW0tc3dlYXQiLGljb246WzU3Niw1MTIsWzEyODUxNywiZ3Jpbi1iZWFtLXN3ZWF0Il0sImY1ODMiLCJNNTMwLjIgMTUuOWMtOC44LTEwLjctMTguNS0yMC45LTI5LTMwLTMtMi42LTcuNC0yLjYtMTAuNCAwLTEwLjUgOS4xLTIwLjEgMTkuMy0yOSAzMC0xNC43IDE3LjgtMjkuOCA0MC4xLTI5LjggNjQuMSAwIDM2LjQgMjcuNiA2NCA2NCA2NHM2NC0yNy42IDY0LTY0YzAtMjQtMTUuMi00Ni4zLTI5LjgtNjQuMXptLTEzMiA4LjlDMzY0LjggOC45IDMyNy40IDAgMjg4IDAgMTQ2LjYgMCAzMiAxMTQuNiAzMiAyNTZTMTQ2LjYgNTEyIDI4OCA1MTIgNTQ0IDM5Ny40IDU0NCAyNTZjMC0yNC40LTMuNC00OC05LjgtNzAuNC0xMS45IDQuMi0yNC43IDYuNC0zOC4yIDYuNC0zLjQgMC02LjgtLjEtMTAuMi0uNCA2LjYgMjAuMyAxMC4yIDQxLjkgMTAuMiA2NC40IDAgMTE0LjktOTMuMSAyMDgtMjA4IDIwOFM4MCAzNzAuOSA4MCAyNTYgMTczLjEgNDggMjg4IDQ4YzM0LjggMCA2Ny41IDguNSA5Ni4zIDIzLjYgMS40LTE3LjQgNi45LTMzLjEgMTMuOC00Ni44ek00MjMuOCAzMjBjNC4xLTExLjYtNy44LTIxLjQtMTkuNi0xNy44LTM0LjggMTAuNi03NC4zIDE2LjYtMTE2LjMgMTYuNi00MS45IDAtODEuNC02LTExNi4xLTE2LjUtMTEuOC0zLjYtMjMuNyA2LjEtMTkuNiAxNy44IDE5LjggNTUuOSA3My4xIDk1LjkgMTM1LjggOTUuOSA2Mi43IDAgMTE2LTQwLjEgMTM1LjgtOTZ6TTE4MCAyMDhjMC0xNS41IDEyLjUtMjggMjgtMjhzMjggMTIuNSAyOCAyOGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMzcuNi0zMC40LTY4LTY4LTY4cy02OCAzMC40LTY4IDY4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTh6bTE4OC0yOGMxNS41IDAgMjggMTIuNSAyOCAyOGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMzcuNi0zMC40LTY4LTY4LTY4cy02OCAzMC40LTY4IDY4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0xNS41IDEyLjUtMjggMjgtMjh6Il19LEo2dD1EMmUsRTJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNsb2NrIixpY29uOls1MTIsNTEyLFsxMjgzMzksImNsb2NrLWZvdXIiXSwiZjAxNyIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDEgLTQxNiAwIDIwOCAyMDggMCAxIDEgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDAgMjU2IDI1NiAwIDEgMCAtNTEyIDB6TTIzMiAxMjBsMCAxMzZjMCA4IDQgMTUuNSAxMC43IDIwbDk2IDY0YzExIDcuNCAyNS45IDQuNCAzMy4zLTYuN3M0LjQtMjUuOS02LjctMzMuM0wyODAgMjQzLjIgMjgwIDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXX0sZTV0PUUyZSxOMmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1sYXVnaC13aW5rIixpY29uOls1MTIsNTEyLFsibGF1Z2gtd2luayJdLCJmNTljIiwiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTE4LjMgNTguMmMtNC4yLTEzLjcgNy4xLTI2LjIgMjEuNC0yNi4ybDIzMi42IDBjMTQuMyAwIDI1LjYgMTIuNSAyMS40IDI2LjItMTggNTguOS03Mi45IDEwMS44LTEzNy43IDEwMS44UzEzNi4zIDM3My4xIDExOC4zIDMxNC4yek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il19LHQ1dD1OMmUsYTV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InBhcGVyLXBsYW5lIixpY29uOls1NzYsNTEyLFs2MTkxM10sImYxZDgiLCJNMjkwLjUgMjg3LjdMNDkxLjQgODYuOSAzNTkgNDU2LjMgMjkwLjUgMjg3Ljd6TTQ1Ny40IDUzTDI1Ni42IDI1My44IDg4IDE4NS4zIDQ1Ny40IDUzek0zOC4xIDIxNi44bDIwNS44IDgzLjYgODMuNiAyMDUuOGM1LjMgMTMuMSAxOC4xIDIxLjcgMzIuMyAyMS43IDE0LjcgMCAyNy44LTkuMiAzMi44LTIzLjFMNTcwLjYgOGMzLjUtOS44IDEtMjAuNi02LjMtMjhzLTE4LjItOS44LTI4LTYuM0wzOS40IDE1MS43Yy0xMy45IDUtMjMuMSAxOC4xLTIzLjEgMzIuOCAwIDE0LjIgOC42IDI3IDIxLjcgMzIuM3oiXX0scjV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhlYXJ0IixpY29uOls1MTIsNTEyLFsxMjgxNTMsMTI4MTU0LDEyODE1NSwxMjgxNTYsMTI4NDIwLDEyOTI5MywxMjkyOTQsMTI5NTA1LDk4MjksMTAwODQsNjE1NzhdLCJmMDA0IiwiTTM3OC45IDgwYy0yNy4zIDAtNTMgMTMuMS02OSAzNS4ybC0zNC40IDQ3LjZjLTQuNSA2LjItMTEuNyA5LjktMTkuNCA5LjlzLTE0LjktMy43LTE5LjQtOS45bC0zNC40LTQ3LjZjLTE2LTIyLjEtNDEuNy0zNS4yLTY5LTM1LjItNDcgMC04NS4xIDM4LjEtODUuMSA4NS4xIDAgNDkuOSAzMiA5OC40IDY4LjEgMTQyLjMgNDEuMSA1MCA5MS40IDk0IDEyNS45IDEyMC4zIDMuMiAyLjQgNy45IDQuMiAxNCA0LjJzMTAuOC0xLjggMTQtNC4yYzM0LjUtMjYuMyA4NC44LTcwLjQgMTI1LjktMTIwLjMgMzYuMi00My45IDY4LjEtOTIuNCA2OC4xLTE0Mi4zIDAtNDctMzguMS04NS4xLTg1LjEtODUuMXpNMjcxIDg3LjFjMjUtMzQuNiA2NS4yLTU1LjEgMTA3LjktNTUuMSA3My41IDAgMTMzLjEgNTkuNiAxMzMuMSAxMzMuMSAwIDY4LjYtNDIuOSAxMjguOS03OS4xIDE3Mi44LTQ0LjEgNTMuNi05Ny4zIDEwMC4xLTEzMy44IDEyNy45LTEyLjMgOS40LTI3LjUgMTQuMS00My4xIDE0LjFzLTMwLjgtNC43LTQzLjEtMTQuMUMxNzYuNCA0MzggMTIzLjIgMzkxLjUgNzkuMSAzMzggNDIuOSAyOTQuMSAwIDIzMy43IDAgMTY1LjEgMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43eiJdfSxiVj17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmb250LWF3ZXNvbWUiLGljb246WzUxMiw1MTIsWzYyNTAxLDYyNjk0LCJmb250LWF3ZXNvbWUtZmxhZyIsImZvbnQtYXdlc29tZS1sb2dvLWZ1bGwiXSwiZjJiNCIsIk05MS43IDk2QzEwNi4zIDg2LjggMTE2IDcwLjUgMTE2IDUyIDExNiAyMy4zIDkyLjcgMCA2NCAwUzEyIDIzLjMgMTIgNTJjMCAxNi43IDcuOCAzMS41IDIwIDQxbDAgNDE5IDQ4IDAgMC02NCAzODkuNiAwYzE0LjYgMCAyNi40LTExLjggMjYuNC0yNi40IDAtMy43LS44LTcuMy0yLjMtMTAuN0w0MzIgMjcyIDQ5My43IDEzMy4xYzEuNS0zLjQgMi4zLTcgMi4zLTEwLjcgMC0xNC42LTExLjgtMjYuNC0yNi40LTI2LjRMOTEuNyA5NnpNODAgNDAwbDAtMjU2IDM1Ni40IDAtNDguMiAxMDguNWMtNS41IDEyLjQtNS41IDI2LjYgMCAzOUw0MzYuNCA0MDAgODAgNDAweiJdfSxpNXQ9YlYsbzV0PWJWLHM1dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjbG9uZSIsaWNvbjpbNTEyLDUxMixbXSwiZjI0ZCIsIk0yODggNDY0TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0OCAwIDAtNDgtNDggMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC00OC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2ek0yMjQgMzA0Yy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTIyNCAwem0tNjQtMTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjI0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0eiJdfSxuNXQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZm9sZGVyLW9wZW4iLGljb246WzU3Niw1MTIsWzEyODE5NCwxMjg0NDksNjE3MTddLCJmMDdjIiwiTTk3LjUgNDAwbDUwLTE2MCAzNzkuNCAwLTUwIDE2MC0zNzkuNCAwem0xOTAuNyA0OEw0NzcgNDQ4YzIxIDAgMzkuNi0xMy42IDQ1LjgtMzMuN2w1MC0xNjBjOS43LTMwLjktMTMuNC02Mi4zLTQ1LjgtNjIuM2wtMzc5LjQgMGMtMjEgMC0zOS42IDEzLjYtNDUuOCAzMy43TDgwLjIgMjk0LjQgODAuMiA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTM4LjcgMGMzLjUgMCA2LjggMS4xIDkuNiAzLjJMMjgyLjkgMTEyYzEzLjggMTAuNCAzMC43IDE2IDQ4IDE2bDExNy4zIDBjOC44IDAgMTYgNy4yIDE2IDE2bDQ4IDBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMzMwLjkgODBjLTYuOSAwLTEzLjctMi4yLTE5LjItNi40TDI3My4zIDQ0LjhDMjYyLjIgMzYuNSAyNDguOCAzMiAyMzQuOSAzMkw5Ni4yIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMHoiXX0sbDV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6IndpbmRvdy1taW5pbWl6ZSIsaWNvbjpbNTEyLDUxMixbMTI4NDY5XSwiZjJkMSIsIk0wIDQyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0NjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA0NDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdfSxjNXQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToic3Rhci1oYWxmIixpY29uOls1NzYsNTEyLFs2MTczMV0sImYwODkiLCJNMjg1LjctMTUuOGMxMC44IDIuNiAxOC40IDEyLjIgMTguNCAyMy4zbDAgMzg3LjFjMCA5LTUuMSAxNy4zLTEzLjEgMjEuNEwxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM0wxOTMuMSAxMjUuMyAyNTguOC0zLjNjNS05LjkgMTYuMi0xNSAyNy0xMi40ek0yNTYuMSAxMDcuNEwyMzAuMyAxNThjLTMuNSA2LjgtMTAgMTEuNi0xNy42IDEyLjhsLTEyNS41IDIwIDg5LjggODkuOWM1LjQgNS40IDcuOSAxMy4xIDYuNyAyMC43bC0xOS44IDEyNS41IDkyLjItNDYuOSAwLTI3Mi42eiJdfSxkNXQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiYWxhcm0tY2xvY2siLGljb246WzUxMiw1MTIsWzkyMDBdLCJmMzRlIiwiTTQwMi42IDUwLjJjLTUuNCAxLjctMTEuMyAxLjgtMTYuMi0uOS01LjgtMy4yLTExLjgtNi4yLTE3LjgtOC45LTEwLjQtNC43LTEzLjctMTguMy00LjEtMjQuNiAxNS05LjkgMzMtMTUuNyA1Mi4zLTE1LjcgNTIuNiAwIDk1LjIgNDIuNiA5NS4yIDk1LjIgMCAxMy4yLTIuNyAyNS44LTcuNiAzNy4zLTQuNSAxMC41LTE4LjQgOS44LTI0LjkgLjQtMy44LTUuNS03LjgtMTAuOC0xMi0xNi0zLjUtNC40LTQuNS0xMC4yLTMuOC0xNS44IC4yLTEuOSAuNC0zLjkgLjQtNS45IDAtMjYuMS0yMS4yLTQ3LjItNDcuMi00Ny4yLTQuOSAwLTkuNyAuOC0xNC4yIDIuMnpNMzIuNSAxMzIuOWMtNi41IDkuNC0yMC41IDEwLjEtMjQuOS0uNC00LjktMTEuNS03LjYtMjQuMS03LjYtMzcuMyAwLTUyLjYgNDIuNi05NS4yIDk1LjItOTUuMiAxOS4zIDAgMzcuMyA1LjggNTIuMyAxNS43IDkuNiA2LjMgNi4zIDE5LjktNC4xIDI0LjYtNi4xIDIuOC0xMiA1LjctMTcuOCA4LjktNC45IDIuNy0xMC45IDIuNi0xNi4yIC45LTQuNS0xLjQtOS4yLTIuMi0xNC4yLTIuMi0yNi4xIDAtNDcuMiAyMS4yLTQ3LjIgNDcuMiAwIDIgLjEgNCAuNCA1LjkgLjcgNS42LS4zIDExLjQtMy44IDE1LjgtNC4yIDUuMi04LjIgMTAuNS0xMiAxNnpNNDMyIDI4OGExNzYgMTc2IDAgMSAwIC0zNTIgMCAxNzYgMTc2IDAgMSAwIDM1MiAwek0zOTYuNSA0NjIuNUMzNTguMSA0OTMuNCAzMDkuMiA1MTIgMjU2IDUxMnMtMTAyLjEtMTguNi0xNDAuNS00OS41TDczIDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Mi41LTQyLjVDNTAuNiAzOTAuMSAzMiAzNDEuMiAzMiAyODggMzIgMTY0LjMgMTMyLjMgNjQgMjU2IDY0UzQ4MCAxNjQuMyA0ODAgMjg4YzAgNTMuMi0xOC42IDEwMi4xLTQ5LjUgMTQwLjVMNDczIDQ3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Mi41LTQyLjV6TTI4MCAxODRsMCA5NC4xIDQxIDQxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ4LTQ4Yy00LjUtNC41LTctMTAuNi03LTE3bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il19LGY1dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJuZXdzcGFwZXIiLGljb246WzUxMiw1MTIsWzEyODI0MF0sImYxZWEiLCJNMTY4IDgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMwNGMwIDguNC0xLjQgMTYuNS00LjEgMjRMNDQwIDQzMmMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTMwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNEwxNjggODB6TTcyIDQ4MGMtMzkuOCAwLTcyLTMyLjItNzItNzJMMCAxMTJDMCA5OC43IDEwLjcgODggMjQgODhzMjQgMTAuNyAyNCAyNGwwIDI5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzA0YzAtMzkuOCAzMi4yLTcyIDcyLTcybDI3MiAwYzM5LjggMCA3MiAzMi4yIDcyIDcybDAgMzA0YzAgMzkuOC0zMi4yIDcyLTcyIDcyTDcyIDQ4MHpNMTkyIDE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDh6bTE1MiAyNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yMTYgMjU2bDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCA4MGwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LHZWPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6Imhvc3BpdGFsIixpY29uOls1NzYsNTEyLFsxMjc5NzMsNjI1ODksImhvc3BpdGFsLWFsdCIsImhvc3BpdGFsLXdpZGUiXSwiZjBmOCIsIk0xNzYgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA0OC00OCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3MmMwLTM1LjMtMjguNy02NC02NC02NGwtNDggMCAwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE3NiAwek0xNjAgNjRjMC04LjggNy4yLTE2IDE2LTE2bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDcyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjcyYzAgOC44LTcuMiAxNi0xNiAxNmwtMTc2IDAgMC04MGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA4MC0xNzYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjcyYzAtOC44IDcuMi0xNiAxNi0xNmw3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNzJ6TTExMiAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNOTYgMzM2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTMyMCAwbDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2LTExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0yNjQgMTA0bDAgMzItMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDAgMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMiAzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMCAwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdfSx1NXQ9dlYscDV0PXZWLFAyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjaXJjbGUtc3RvcCIsaWNvbjpbNTEyLDUxMixbNjIwOTQsInN0b3AtY2lyY2xlIl0sImYyOGQiLCJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjAgMTkybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTQ4IDExMmwwLTk2IDk2IDAgMCA5Ni05NiAweiJdfSxoNXQ9UDJlLG01dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJvYmplY3QtdW5ncm91cCIsaWNvbjpbNjQwLDUxMixbXSwiZjI0OCIsIk00OC4yIDY2LjhjLS4xLS44LS4yLTEuNy0uMi0yLjVsMC0uMmMwLTguOCA3LjItMTYgMTYtMTYgLjkgMCAxLjkgLjEgMi44IC4yIDcuNSAxLjMgMTMuMiA3LjkgMTMuMiAxNS44IDAgOC44LTcuMiAxNi0xNiAxNi03LjkgMC0xNC41LTUuNy0xNS44LTEzLjJ6TTAgNjRjMCAyNi45IDE2LjUgNDkuOSA0MCA1OS4zbDAgMTA1LjNjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NCAyNi45IDAgNDkuOS0xNi41IDU5LjMtNDBsMjAxLjMgMGM5LjUgMjMuNSAzMi41IDQwIDU5LjMgNDAgMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMTA1LjNjMjMuNS05LjUgNDAtMzIuNSA0MC01OS4zIDAtMzUuMy0yOC43LTY0LTY0LTY0LTI2LjkgMC00OS45IDE2LjUtNTkuMyA0MEwxMjMuMyA0MEMxMTMuOSAxNi41IDkwLjkgMCA2NCAwIDI4LjcgMCAwIDI4LjcgMCA2NHptMzY4IDBhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHpNMzI0LjcgODhjNi41IDE2IDE5LjMgMjguOSAzNS4zIDM1LjNsMCAxMDUuM2MtMTYgNi41LTI4LjkgMTkuMy0zNS4zIDM1LjNsLTIwMS4zIDBjLTYuNS0xNi0xOS4zLTI4LjktMzUuMy0zNS4zbDAtMTA1LjNjMTYtNi41IDI4LjktMTkuMyAzNS4zLTM1LjNsMjAxLjMgMHpNMzg0IDI3MmExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6TTgwIDI4OGMwIDcuOS01LjcgMTQuNS0xMy4yIDE1LjgtLjggLjEtMS43IC4yLTIuNSAuMmwtLjIgMGMtOC44IDAtMTYtNy4yLTE2LTE2IDAtLjkgLjEtMS45IC4yLTIuOCAxLjMtNy41IDcuOS0xMy4yIDE1LjgtMTMuMiA4LjggMCAxNiA3LjIgMTYgMTZ6bTQzNi43LTQwYzYuNSAxNiAxOS4zIDI4LjkgMzUuMyAzNS4zbDAgMTA1LjNjLTE2IDYuNS0yOC45IDE5LjMtMzUuMyAzNS4zbC0yMDEuMyAwYy02LjUtMTYtMTkuMy0yOC45LTM1LjMtMzUuM2wwLTIwLjctNDggMCAwIDIwLjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NCAyNi45IDAgNDkuOS0xNi41IDU5LjMtNDBsMjAxLjMgMGM5LjUgMjMuNSAzMi41IDQwIDU5LjMgNDAgMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMTA1LjNjMjMuNS05LjUgNDAtMzIuNSA0MC01OS4zIDAtMzUuMy0yOC43LTY0LTY0LTY0LTI2LjkgMC00OS45IDE2LjUtNTkuMyA0MGwtNTIuNyAwIDAgOS42YzEwLjcgMTAuOSAxOS4xIDIzLjkgMjQuNiAzOC40bDI4IDB6bTU5LjMtOGExNiAxNiAwIDEgMSAwLTMyIDE2IDE2IDAgMSAxIDAgMzJ6TTI3MS44IDQ1MC43YTE2IDE2IDAgMSAxIC0zMS41LTUuNSAxNiAxNiAwIDEgMSAzMS41IDUuNXptMzAxLjUgMTNjLTcuNS0xLjMtMTMuMi03LjktMTMuMi0xNS44IDAtOC44IDcuMi0xNiAxNi0xNiA3LjkgMCAxNC41IDUuNyAxNS44IDEzLjJsMCAuMWMuMSAuOSAuMiAxLjggLjIgMi43IDAgOC44LTcuMiAxNi0xNiAxNi0uOSAwLTEuOS0uMS0yLjgtLjJ6Il19LGc1dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjb21tZW50IixpY29uOls1MTIsNTEyLFsxMjg0ODksNjE2NjldLCJmMDc1IiwiTTUxLjkgMzg0LjlDMTkuMyAzNDQuNiAwIDI5NC40IDAgMjQwIDAgMTA3LjUgMTE0LjYgMCAyNTYgMFM1MTIgMTA3LjUgNTEyIDI0MCAzOTcuNCA0ODAgMjU2IDQ4MGMtMzYuNSAwLTcxLjItNy4yLTEwMi42LTIwTDM3IDUwOS45Yy0zLjcgMS42LTcuNSAyLjEtMTEuNSAyLjEtMTQuMSAwLTI1LjUtMTEuNC0yNS41LTI1LjUgMC00LjMgMS4xLTguNSAzLjEtMTIuMmw0OC44LTg5LjR6bTM3LjMtMzAuMmMxMi4yIDE1LjEgMTQuMSAzNi4xIDQuOCA1My4ybC0xOCAzMy4xIDU4LjUtMjUuMWMxMS44LTUuMSAyNS4yLTUuMiAzNy4xLS4zIDI1LjcgMTAuNSA1NC4yIDE2LjQgODQuMyAxNi40IDExNy44IDAgMjA4LTg4LjggMjA4LTE5MlMzNzMuOCA0OCAyNTYgNDggNDggMTM2LjggNDggMjQwYzAgNDIuOCAxNS4xIDgyLjQgNDEuMiAxMTQuN3oiXX0seDV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNoZXNzLXBhd24iLGljb246WzM4NCw1MTIsWzk4MjNdLCJmNDQzIiwiTTE5Mi0zMmM2Ni4zIDAgMTIwIDUzLjcgMTIwIDEyMCAwIDI3LjYtOS4zIDUyLjktMjQuOSA3My4yIDkuOCAzIDE2LjkgMTIuMSAxNi45IDIyLjggMCAxMy4zLTEwLjcgMjQtMjQgMjRsLS42IDAgMjQuNiAxNjAgNTMuNiA2N2M2LjcgOC40IDEwLjQgMTguOCAxMC40IDI5LjYgMCAyNi4yLTIxLjIgNDcuNC00Ny40IDQ3LjRMNjMuNCA1MTJjLTI2LjIgMC00Ny40LTIxLjItNDcuNC00Ny40IDAtMTAuOCAzLjctMjEuMiAxMC40LTI5LjZsNTMuNi02NyAyNC42LTE2MC0uNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEwLjggNy4xLTE5LjggMTYuOS0yMi44LTE1LjYtMjAuMy0yNC45LTQ1LjYtMjQuOS03My4yIDAtNjYuMyA1My43LTEyMCAxMjAtMTIwek0xMTUuOSA0MDBsLTUxLjIgNjQgMjU0LjcgMC01MS4yLTY0LTE1Mi4yIDB6bTM2LjItMTg0LjdsLTIxIDEzNi43IDEyMS45IDAtMjEtMTM2LjctMS4xLTcuMy03Ny42IDAtMS4xIDcuM3pNMTkyIDE2YTcyIDcyIDAgMSAwIDAgMTQ0IDcyIDcyIDAgMSAwIDAtMTQ0eiJdfSxiNXQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2FsZW5kYXItcGx1cyIsaWNvbjpbNDQ4LDUxMixbXSwiZjI3MSIsIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwem0xMDQgNjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OCA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwIDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXX0sdjV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNsaXBib2FyZCIsaWNvbjpbMzg0LDUxMixbMTI4MjAzXSwiZjMyOCIsIk0yMzIgOTZsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptMCA0OGMzNy4xIDAgNjcuNi0yOCA3MS42LTY0TDMyMCA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzNTJjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNi40IDBjNCAzNiAzNC41IDY0IDcxLjYgNjRsODAgMHpNMjkxLjkgMzJDMjc5IDEyLjcgMjU3IDAgMjMyIDBMMTUyIDBjLTI1IDAtNDcgMTIuNy01OS45IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zNTJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTI4LjEgMHoiXX0seTV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InRodW1icy1kb3duIixpY29uOls1MTIsNTEyLFsxMjgwNzgsNjE1NzZdLCJmMTY1IiwiTTM2MCAzMmw3LjQgLjRjMzUgMy42IDYyLjUgMzIuMiA2NC40IDY3LjcgMTcuOCAxMS44IDMwLjEgMzEuNCAzMiA1My45bC4yIDZjMCA1LjctLjcgMTEuMi0yIDE2LjUgMTAuMiAxMS41IDE2LjggMjYuMyAxNy44IDQyLjdsLjIgNC44YzAgMTMuMi0zLjYgMjUuNC05LjggMzYgNC45IDguNCA4LjIgMTcuOSA5LjMgMjhsLjQgOGMwIDM3LjMtMjguMyA2Ny45LTY0LjYgNzEuNmwtNy40IC40LTEwOS43IDAgMTQuMSAzMCAzLjEgNy42YzEyLjUgMzUuNy0xLjggNzUuNS0zNC4yIDk1bC03LjIgMy45Yy0zNy41IDE3LjYtODEuNyAzLjYtMTAyLjYtMzEuMmwtLjYtLjktMi43LTUtLjYtMS4yLTMwLjEtNjRjLTkuNCAxNy44LTI4IDI5LjktNDkuNSAyOS45bC0zMiAwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDE1MmMwLTMwLjkgMjUuMS01NiA1Ni01NmwzMiAwYzEyLjQgMCAyMy45IDQuMSAzMy4yIDExIDEzLjItMjEuNCAzMi0zOS40IDU1LTUxLjZsMTIuMi02LjUgLjctLjMgNi42LTMuMiAuNy0uMyA3LjEtM2MxNi43LTYuNiAzNC41LTkuOSA1Mi42LTkuOUwzNjAgMzJ6TTI1NS45IDgwYy0xMiAwLTIzLjkgMi4zLTM1LjEgNi42bC00LjcgMi01LjMgMi42IDAgMC0xMi4yIDYuNWMtMjkuMiAxNS41LTQ4LjMgNDQuOS01MC43IDc3LjZsLS4yIDggMCAxMTIuOSAuMSA0LjFjLjUgOC4yIDIuNSAxNi4yIDYgMjMuN2w1Ni44IDEyMC45IDIuMSAzLjhjOC40IDEzLjcgMjYgMTkuMSA0MC44IDEyLjJsMi45LTEuNmMxMy03LjggMTguNy0yMy43IDEzLjctMzhsLTEuMi0zLTMwLjItNjQuMmMtMy41LTcuNC0yLjktMTYuMSAxLjUtMjMuMXMxMi0xMS4xIDIwLjItMTEuMWwxNDcuNSAwIDIuNC0uMWMxMS4zLTEuMSAyMC4zLTEwLjEgMjEuNC0yMS40bC4xLTIuNWMwLTcuMS0zLjEtMTMuNS04LjItMTgtNS4yLTQuNi04LjItMTEuMS04LjItMThzMy0xMy40IDguMi0xOGM0LjQtMy45IDcuNC05LjMgOC0xNS4zbC4yLTIuN2MwLTguNC00LjQtMTUuOS0xMS4yLTIwLjItMTAuNy02LjktMTQuMi0yMC45LTgtMzIgMS41LTIuNiAyLjUtNS42IDIuOS04LjZsLjItMy4yYzAtMTAuNi02LjktMTkuNi0xNi42LTIyLjgtMTEuNy0zLjgtMTguNy0xNS45LTE2LTI4IC4yLS45IC4zLTEuOCAuNC0yLjZsLjItMi42YzAtMTIuNC05LjUtMjIuNi0yMS42LTIzLjhMMzYwIDgwIDI1NS45IDgwek01NiAxNDRjLTQuNCAwLTggMy42LTggOGwwIDIyNGMwIDQuNCAzLjYgOCA4IDhsMzIgMGM0LjQgMCA4LTMuNiA4LThsMC0yMjRjMC00LjQtMy42LTgtOC04bC0zMiAweiJdfSx3NXQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaWQtYmFkZ2UiLGljb246WzM4NCw1MTIsW10sImYyYzEiLCJNMjU2IDQ4bDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zODRjMC04LjgtNy4yLTE2LTE2LTE2bC02NCAwek0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTE2MCAzMjBsNjQgMGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTZMOTYgNDE2Yy04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODB6bS0yNC05NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6Il19LEkyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJzcXVhcmUtY2hlY2siLGljb246WzQ0OCw1MTIsWzk3NDUsOTk4OSw2MTUxMCwiY2hlY2stc3F1YXJlIl0sImYxNGEiLCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHptMjMwLjcgODkuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjMgMTAuNyA3LjggMTMuMSAyMi44IDUuMyAzMy41TDIxMS40IDM2Ni4xYy00LjEgNS43LTEwLjUgOS4zLTE3LjUgOS44LTcgLjUtMTMuOS0yLTE4LjgtNi45bC01NS45LTU1LjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzNiAzNiAxMDUuNi0xNDUuMnoiXX0sTTV0PUkyZSx6NXQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2hlc3MtYmlzaG9wIixpY29uOlszMjAsNTEyLFs5ODIxXSwiZjQzYSIsIk0yMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMCA4MS44IDk4LjFjMjQuNyAyOS42IDM4LjIgNjcgMzguMiAxMDUuNiAwIDQzLjctMTcuNCA4NS43LTQ4LjMgMTE2LjZsLTguNiA4LjYgNDYuNSA1OC4yYzYuNyA4LjQgMTAuNCAxOC44IDEwLjQgMjkuNiAwIDI2LjItMjEuMiA0Ny40LTQ3LjQgNDcuNEw0Ny40IDUxMkMyMS4yIDUxMiAwIDQ5MC44IDAgNDY0LjYgMCA0NTMuOSAzLjcgNDQzLjQgMTAuNCA0MzVsNDYuNS01OC4yLTguNi04LjZDMTcuNCAzMzcuNCAwIDI5NS40IDAgMjUxLjcgMCAyMTMuMSAxMy41IDE3NS44IDM4LjIgMTQ2LjFMMTIwIDQ4IDEwNCA0OEM5MC43IDQ4IDgwIDM3LjMgODAgMjRTOTAuNyAwIDEwNCAwTDIxNiAwek05NC40IDQwNi44bC00NS43IDU3LjIgMjIyLjcgMC00NS43LTU3LjEtNS41LTYuOS0xMjAuMyAwLTUuNSA2Ljh6TTE1Ni45IDc4LjdMNzUuMSAxNzYuOGMtMTUuMyAxOC40LTI0LjYgNDEtMjYuNyA2NC43TDQ4IDI1MS43YzAgMzEgMTIuMyA2MC43IDM0LjIgODIuN2wxNy43IDE3LjcgMTIwLjIgMGM2LjItNi4yIDEyLjEtMTIuMSAxNy44LTE3LjcgMjEuOS0yMS45IDM0LjItNTEuNiAzNC4yLTgyLjZsLS40LTEwLjJjLTEuNS0xNy02LjctMzMuMy0xNS4yLTQ4TDIwOSAyNDFjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTEuOC01MS44LTYzLjctNzYuNS0zLjEtMy44LTMuMSAzLjh6Il19LGs1dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJlbnZlbG9wZS1vcGVuIixpY29uOls1MTIsNTEyLFs2MjEzNV0sImYyYjYiLCJNNTEyIDQxNmMwIDM1LjMtMjguNSA2NC02My45IDY0TDY0IDQ4MGMtMzUuNCAwLTY0LTI4LjctNjQtNjRMMCAxNjRjLjEtMTUuNSA3LjgtMzAgMjAuNS0zOC44TDIwNi0yLjdjMzAuMS0yMC43IDY5LjgtMjAuNyA5OS45IDBMNDkxLjUgMTI1LjJjMTIuOCA4LjggMjAuNCAyMy4zIDIwLjUgMzguOGwwIDI1MnpNNjQgNDMybDM4NC4xIDBjOC44IDAgMTUuOS03LjEgMTUuOS0xNmwwLTE5MS43LTE1NC44IDExNy40Yy0zMS40IDIzLjktNzQuOSAyMy45LTEwNi40IDBMNDggMjI0LjMgNDggNDE2YzAgOC45IDcuMiAxNiAxNiAxNnpNNDYzLjYgMTY0LjRMMjc4LjcgMzYuOGMtMTMuNy05LjQtMzEuNy05LjQtNDUuNCAwTDQ4LjQgMTY0LjQgMjMxLjggMzAzLjVjMTQuMyAxMC44IDM0LjEgMTAuOCA0OC40IDBMNDYzLjYgMTY0LjR6Il19LFE2PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZS14bWFyayIsaWNvbjpbNTEyLDUxMixbNjE1MzIsInRpbWVzLWNpcmNsZSIsInhtYXJrLWNpcmNsZSJdLCJmMDU3IiwiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY3IDE2N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXX0sUzV0PVE2LEM1dD1RNixGMmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToic3F1YXJlLWNhcmV0LXVwIixpY29uOls0NDgsNTEyLFsiY2FyZXQtc3F1YXJlLXVwIl0sImYxNTEiLCJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTIyNCA2NGM2LjcgMCAxMyAyLjggMTcuNiA3LjdsMTA0IDExMmM2LjUgNyA4LjIgMTcuMiA0LjQgMjUuOVMzMzcuNSAzMjAgMzI4IDMyMGwtMjA4IDBjLTkuNSAwLTE4LjItNS43LTIyLTE0LjRzLTIuMS0xOC45IDQuNC0yNS45bDEwNC0xMTJjNC41LTQuOSAxMC45LTcuNyAxNy42LTcuN3oiXX0sTDV0PUYyZSxUNXQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmlsZS1pbWFnZSIsaWNvbjpbMzg0LDUxMixbMTI4NDQzXSwiZjFjNSIsIk0xNzYgNDhMNjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsMjU2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjQwLTg4IDBjLTM5LjggMC03Mi0zMi4yLTcyLTcybDAtODh6TTMxNi4xIDE2MEwyMjQgNjcuOSAyMjQgMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDY4LjEgMHpNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMTk3LjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxNDEuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek0yNTkuNCA0MzJsLTEzNC44IDBjLTE1LjggMC0yOC42LTEyLjgtMjguNi0yOC42IDAtNi40IDIuMS0xMi41IDYtMTcuNmw2Ny42LTg2LjlDMTc1IDI5MiAxODMuMyAyODggMTkyIDI4OHMxNyA0IDIyLjQgMTAuOUwyODIgMzg1LjljMy45IDUgNiAxMS4yIDYgMTcuNiAwIDE1LjgtMTIuOCAyOC42LTI4LjYgMjguNnpNMTEyIDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LE8yZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJzcXVhcmUtY2FyZXQtcmlnaHQiLGljb246WzQ0OCw1MTIsWyJjYXJldC1zcXVhcmUtcmlnaHQiXSwiZjE1MiIsIk00MDAgOTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMHpNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMzIwIDI1NmMwIDYuNy0yLjggMTMtNy43IDE3LjZsLTExMiAxMDRjLTcgNi41LTE3LjIgOC4yLTI1LjkgNC40UzE2MCAzNjkuNSAxNjAgMzYwbDAtMjA4YzAtOS41IDUuNy0xOC4yIDE0LjQtMjJzMTguOS0yLjEgMjUuOSA0LjRsMTEyIDEwNGM0LjkgNC41IDcuNyAxMC45IDcuNyAxNy42eiJdfSxfNXQ9TzJlLENWPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InN1biIsaWNvbjpbNTc2LDUxMixbOTcyOF0sImYxODUiLCJNMjAwLjYtNy45Yy02LjctNC40LTE1LjEtNS4yLTIyLjUtMi4yUzE2NS40LS41IDE2My45IDcuM0wxNDMgMTEwLjYgMzkuNyAxMzEuNGMtNy44IDEuNi0xNC40IDctMTcuNCAxNC4zcy0yLjIgMTUuOCAyLjIgMjIuNUw4Mi43IDI1NiAyNC41IDM0My44Yy00LjQgNi43LTUuMiAxNS4xLTIuMiAyMi41czkuNiAxMi44IDE3LjQgMTQuM0wxNDMgNDAxLjQgMTYzLjkgNTA0LjdjMS42IDcuOCA3IDE0LjQgMTQuMyAxNy40czE1LjggMi4yIDIyLjUtMi4ybDg3LjgtNTguMiA4Ny44IDU4LjJjNi43IDQuNCAxNS4xIDUuMiAyMi41IDIuMnMxMi44LTkuNiAxNC4zLTE3LjRsMjAuOS0xMDMuMiAxMDMuMi0yMC45YzcuOC0xLjYgMTQuNC03IDE3LjQtMTQuM3MyLjItMTUuOC0yLjItMjIuNWwtNTguMi04Ny44IDU4LjItODcuOGM0LjQtNi43IDUuMi0xNS4xIDIuMi0yMi41cy05LjYtMTIuOC0xNy40LTE0LjNMNDMzLjggMTEwLjYgNDEzIDcuM0M0MTEuNC0uNSA0MDYtNyAzOTguNi0xMC4xcy0xNS44LTIuMi0yMi41IDIuMkwyODguNCA1MC4zIDIwMC42LTcuOXpNMTg2LjkgMTM1LjdsMTctODMuOSA3MS4zIDQ3LjNjOCA1LjMgMTguNSA1LjMgMjYuNSAwbDcxLjMtNDcuMyAxNyA4My45YzEuOSA5LjUgOS4zIDE2LjggMTguOCAxOC44bDgzLjkgMTctNDcuMyA3MS4zYy01LjMgOC01LjMgMTguNSAwIDI2LjVsNDcuMyA3MS4zLTgzLjkgMTdjLTkuNSAxLjktMTYuOSA5LjMtMTguOCAxOC44bC0xNyA4My45LTcxLjMtNDcuM2MtOC01LjMtMTguNS01LjMtMjYuNSAwbC03MS4zIDQ3LjMtMTctODMuOWMtMS45LTkuNS05LjMtMTYuOS0xOC44LTE4LjhsLTgzLjktMTcgNDcuMy03MS4zYzUuMy04IDUuMy0xOC41IDAtMjYuNWwtNDcuMy03MS4zIDgzLjktMTdjOS41LTEuOSAxNi44LTkuMyAxOC44LTE4Ljh6TTIzOS42IDI1NmE0OC40IDQ4LjQgMCAxIDEgOTYuOCAwIDQ4LjQgNDguNCAwIDEgMSAtOTYuOCAwem0xNDQuOCAwYTk2LjQgOTYuNCAwIDEgMCAtMTkyLjggMCA5Ni40IDk2LjQgMCAxIDAgMTkyLjggMHoiXX0sQTV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImltYWdlIixpY29uOls0NDgsNTEyLFtdLCJmMDNlIiwiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xMjggMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMzYgNzJjOC41IDAgMTYuNCA0LjUgMjAuNyAxMS44bDgwIDEzNmM0LjQgNy40IDQuNCAxNi42IC4xIDI0LjFTMzUyLjYgMzg0IDM0NCAzODRsLTI0MCAwYy04LjkgMC0xNy4yLTUtMjEuMy0xMi45cy0zLjUtMTcuNSAxLjYtMjQuOGw1Ni04MGM0LjUtNi40IDExLjgtMTAuMiAxOS43LTEwLjJzMTUuMiAzLjggMTkuNyAxMC4ybDE3LjIgMjQuNiA0Ni41LTc5YzQuMy03LjMgMTIuMi0xMS44IDIwLjctMTEuOHoiXX0sJDV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImxpZ2h0YnVsYiIsaWNvbjpbMzg0LDUxMixbMTI4MTYxXSwiZjBlYiIsIk0yOTYuNSAyOTEuMUMzMjEgMjY1LjIgMzM2IDIzMC40IDMzNiAxOTIgMzM2IDExMi41IDI3MS41IDQ4IDE5MiA0OFM0OCAxMTIuNSA0OCAxOTJjMCAzOC40IDE1IDczLjIgMzkuNSA5OS4xIDIxLjMgMjIuNCA0NC45IDU0IDUzLjMgOTIuOWwxMDIuNCAwYzguNC0zOSAzMi03MC41IDUzLjMtOTIuOXptMzQuOCAzM0MzMDcuNyAzNDkgMjg4IDM3OS40IDI4OCA0MTMuN2wwIDE4LjNjMCA0NC4yLTM1LjggODAtODAgODBsLTMyIDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMTguM0M5NiAzNzkuNCA3Ni4zIDM0OSA1Mi43IDMyNC4xIDIwIDI4OS43IDAgMjQzLjIgMCAxOTIgMCA4NiA4NiAwIDE5MiAwUzM4NCA4NiAzODQgMTkyYzAgNTEuMi0yMCA5Ny43LTUyLjcgMTMyLjF6TTE0NCAxODRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00OC42IDM5LjQtODggODgtODggMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjEgMC00MCAxNy45LTQwIDQweiJdfSx5Vj17cHJlZml4OiJmYXIiLGljb25OYW1lOiJhZGRyZXNzLWNhcmQiLGljb246WzU3Niw1MTIsWzYyMTQwLCJjb250YWN0LWNhcmQiLCJ2Y2FyZCJdLCJmMmJiIiwiTTUxMiA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMjBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQzMmMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDk2YzAtOC44IDcuMi0xNiAxNi0xNmw0NDggMHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjA4IDI0OGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnptLTMyIDQwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwek0zNzYgMTQ0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHoiXX0sRDV0PXlWLEU1dD15VixCMmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1tZWgiLGljb246WzUxMiw1MTIsWzEyODUyOCwibWVoIl0sImYxMWEiLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAxIC00MTYgMCAyMDggMjA4IDAgMSAxIDQxNiAwek0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTE3NiAyNDBhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xOTItMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTg0IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il19LE41dD1CMmUsUDV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6Im1hcCIsaWNvbjpbNTEyLDUxMixbMTI4NTA2LDYyMDcyXSwiZjI3OSIsIk01MTIgNDhjMC04LjMtNC4zLTE2LTExLjMtMjAuNHMtMTUuOS00LjgtMjMuMy0xLjFMMzUyLjUgODguMSAxODAgMjkuNGMtMTMuNy00LjctMjguNy0zLjgtNDEuOSAyLjNMMTMuOCA5MC4zQzUuNCA5NC4yIDAgMTAyLjcgMCAxMTJMMCA0NjRjMCA4LjIgNC4yIDE1LjkgMTEuMSAyMC4zczE1LjYgNC45IDIzLjEgMS40bDEyNy4zLTU5LjkgMTcwLjcgNTYuOWMxMy43IDQuNiAyOC41IDMuNyA0MS42LTIuNWwxMjQuNC01OC41YzguNC00IDEzLjgtMTIuNCAxMy44LTIxLjdsMC0zNTJ6TTE0NCA4Mi4xbDAgMjk5LTk2IDQ1LjIgMC0yOTkgOTYtNDUuMnptNDggMzAzLjNsMC0zMDEuMSAxMjggNDMuNSAwIDMwMC4zLTEyOC00Mi43ek0zNjggMTM0bDk2LTQ3LjQgMCAyOTguMi05NiA0NS4yIDAtMjk2eiJdfSxJNXQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaGFuZC1wb2ludC1kb3duIixpY29uOlszODQsNTEyLFtdLCJmMGE3IiwiTTY0IDQ0OGwwLTE3Ny42YzUuMiAxIDEwLjUgMS42IDE2IDEuNmwxNiAwIDAgMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2ek04MCAyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjRjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjBsNDggMGM1Mi41IDAgOTcuMSAzMy43IDExMy40IDgwLjctMy4xLS41LTYuMi0uNy05LjQtLjctMjAgMC0zNy45IDkuMi00OS43IDIzLjYtOS00LjktMTkuNC03LjYtMzAuMy03LjYtMTUuMSAwLTI5IDUuMy00MCAxNC0xMS04LjgtMjQuOS0xNC00MC0xNGwtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC04MCAwek0wIDE5MmwwIDBjMCAxOCA2IDM0LjYgMTYgNDhsMCAyMDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGwwLTgyYzUuMSAxLjMgMTAuNSAyIDE2IDIgMjUuMyAwIDQ3LjItMTQuNyA1Ny42LTM2IDcgMi42IDE0LjUgNCAyMi40IDQgMjAgMCAzNy45LTkuMiA0OS43LTIzLjYgOSA0LjkgMTkuNCA3LjYgMzAuMyA3LjYgMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC04OEMzODQgNzUuMiAzMDguOCAwIDIxNiAwTDE2OCAwQzc1LjIgMCAwIDc1LjIgMCAxNjhsMCAyNHptMzM2IDY0YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDY0ek0xNjAgMjcyYzUuNSAwIDEwLjktLjcgMTYtMmwwIDM0YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMzIgMTYgMHptNjQtMjRsMC00MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0yNHoiXX0sUjJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtbWVoLWJsYW5rIixpY29uOls1MTIsNTEyLFsxMjg1NjYsIm1laC1ibGFuayJdLCJmNWE0IiwiTTI1NiA0OGEyMDggMjA4IDAgMSAwIDAgNDE2IDIwOCAyMDggMCAxIDAgMC00MTZ6TTUxMiAyNTZhMjU2IDI1NiAwIDEgMSAtNTEyIDAgMjU2IDI1NiAwIDEgMSA1MTIgMHpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxGNXQ9UjJlLEgyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWdyaW4tdG9uZ3VlIixpY29uOls1MTIsNTEyLFsxMjg1MzksImdyaW4tdG9uZ3VlIl0sImY1ODkiLCJNNDY0IDI1NmMwLTExNC45LTkzLjEtMjA4LTIwOC0yMDhTNDggMTQxLjEgNDggMjU2YzAgNzQuMSAzOC44IDEzOS4yIDk3LjEgMTc2LS43LTUuMi0xLjEtMTAuNi0xLjEtMTZsMC01My41Yy0xMC4yLTEyLjYtMTguMy0yNi45LTIzLjgtNDIuNC00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjYgMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTUuNSAxNS42LTEzLjYgMjkuOS0yMy44IDQyLjVsMCA1My41YzAgNS40LS40IDEwLjgtMS4xIDE2IDU4LjQtMzYuOCA5Ny4xLTEwMS45IDk3LjEtMTc2em00OCAwYzAgMTE2LjMtNzcuNiAyMTQuNi0xODMuOSAyNDUuNy0xOS41IDE2LjQtNDQuNiAyNi4zLTcyLjEgMjYuM3MtNTIuNi05LjktNzIuMS0yNi4zQzc3LjYgNDcwLjYgMCAzNzIuMyAwIDI1NiAwIDExNC42IDExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZ6TTE3NiAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTYgMjA4bDAtMzcuNGMwLTE0LjctMTEuOS0yNi42LTI2LjYtMjYuNmwtMiAwYy0xMS4zIDAtMjEuMSA3LjktMjMuNiAxOC45LTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDAtMi41LTExLjEtMTIuMy0xOC45LTIzLjYtMTguOWwtMiAwYy0xNC43IDAtMjYuNiAxMS45LTI2LjYgMjYuNmwwIDM3LjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXX0sTzV0PUgyZSx3Vj17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmdXRib2wiLGljb246WzUxMiw1MTIsWzk5MTcsImZ1dGJvbC1iYWxsIiwic29jY2VyLWJhbGwiXSwiZjFlMyIsIk0zODcgMjI4LjNjLTQuNC0yLjgtNy42LTctOS4yLTExLjlzLTEuNC0xMC4yIC41LTE1TDQxMS42IDExOGMtMTkuOS0yMi40LTQ0LjYtNDAuNS03Mi40LTUyLjdsLTY5LjEgNTcuNmMtNCAzLjMtOSA1LjEtMTQuMSA1LjFzLTEwLjItMS44LTE0LjEtNS4xTDE3Mi44IDY1LjNjLTI3LjggMTIuMi01Mi41IDMwLjMtNzIuNCA1Mi43bDMzLjQgODMuNGMxLjkgNC44IDIuMSAxMC4xIC41IDE1cy00LjkgOS4xLTkuMiAxMS45TDQ5IDI3Ni4yYzMgMzAuOSAxMi43IDU5LjcgMjcuNiA4NS4ybDg5LjctNmM1LjItLjMgMTAuMyAxLjEgMTQuNSA0LjJzNy4yIDcuNCA4LjQgMTIuNWwyMiA4Ny4yYzE0LjQgMy4yIDI5LjQgNC44IDQ0LjggNC44czMwLjMtMS43IDQ0LjgtNC44bDIyLTg3LjJjMS4zLTUgNC4yLTkuNCA4LjQtMTIuNXM5LjMtNC41IDE0LjUtNC4ybDg5LjcgNmMxNS0yNS40IDI0LjctNTQuMyAyNy42LTg1LjFMMzg3IDIyOC4zek0yNTYgMGEyNTYgMjU2IDAgMSAxIDAgNTEyIDI1NiAyNTYgMCAxIDEgMC01MTJ6bTYyIDIyMWM4LjQgNi4xIDExLjkgMTYuOSA4LjcgMjYuOGwtMTguMyA1Ni4zYy0zLjIgOS45LTEyLjQgMTYuNi0yMi44IDE2LjZsLTU5LjIgMGMtMTAuNCAwLTE5LjYtNi43LTIyLjgtMTYuNmwtMTguMy01Ni4zYy0zLjItOS45IC4zLTIwLjcgOC43LTI2LjhsNDcuOS0zNC44YzguNC02LjEgMTkuOC02LjEgMjguMiAwTDMxOCAyMjF6Il19LEI1dD13VixSNXQ9d1YscTJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2Utc3VycHJpc2UiLGljb246WzUxMiw1MTIsWzEyODU1OCwic3VycHJpc2UiXSwiZjVjMiIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ni04MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tNDggODBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il19LEg1dD1xMmUsVjJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZvbGRlciIsaWNvbjpbNTEyLDUxMixbMTI4MTkzLDEyODQ0Nyw2MTcxNiwiZm9sZGVyLWJsYW5rIl0sImYwN2IiLCJNNjQgNDAwbDM4NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0MGMwLTguOC03LjItMTYtMTYtMTZsLTE0OS4zIDBjLTE3LjMgMC0zNC4yLTUuNi00OC0xNkwyMTIuMyA4My4yYy0yLjgtMi4xLTYuMS0zLjItOS42LTMuMkw2NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNnptMzg0IDQ4TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwxMzguNyAwYzEzLjggMCAyNy4zIDQuNSAzOC40IDEyLjhsMzguNCAyOC44YzUuNSA0LjIgMTIuMyA2LjQgMTkuMiA2LjRMNDQ4IDgwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwYzAgMzUuMy0yOC43IDY0LTY0IDY0eiJdfSxxNXQ9VjJlLFY1dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjbG91ZCIsaWNvbjpbNTc2LDUxMixbOTcyOV0sImYwYzIiLCJNODAgMTkyYzAtODguNCA3MS42LTE2MCAxNjAtMTYwIDQ3LjEgMCA4OS40IDIwLjQgMTE4LjcgNTIuNyAxMC42LTMuMSAyMS44LTQuNyAzMy4zLTQuNyA2Ni4zIDAgMTIwIDUzLjcgMTIwIDEyMCAwIDEzLjItMi4xIDI1LjktNi4xIDM3LjggNDEuNiAyMS4xIDcwLjEgNjQuMyA3MC4xIDExNC4yIDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0zMDQgMGMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC01Ni44IDMyLjktMTA1LjkgODAuNy0xMjkuNC0uNC00LjgtLjctOS43LS43LTE0LjZ6TTI0MCA4MGMtNjEuOSAwLTExMiA1MC4xLTExMiAxMTIgMCA4LjQgLjkgMTYuNiAyLjcgMjQuNSAyLjcgMTIuMS00LjMgMjQuMy0xNi4xIDI4LjEtMzguNyAxMi40LTY2LjYgNDguNy02Ni42IDkxLjQgMCA1MyA0MyA5NiA5NiA5NmwzMDQgMGM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTM3LjQtMjUuNy02OC45LTYwLjUtNzcuNi03LjUtMS45LTEzLjYtNy4yLTE2LjUtMTQuM3MtMi4xLTE1LjIgMi0yMS43YzctMTEuMSAxMS0yNC4yIDExLTM4LjMgMC0zOS44LTMyLjItNzItNzItNzItMTEuMSAwLTIxLjUgMi41LTMwLjggNi45LTEwLjUgNS0yMy4xIDEuNy0yOS44LTcuOC0yMC4zLTI4LjYtNTMuNy00Ny4xLTkxLjMtNDcuMXoiXX0sVTV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZSIsaWNvbjpbNTEyLDUxMixbMTI4MzA4LDEyODMwOSwxMjg5OTIsMTI4OTkzLDEyODk5NCwxMjg5OTUsMTI4OTk2LDk2NzksOTg5OCw5ODk5LDExMDQ0LDYxNzA4LDYxOTE1XSwiZjExMSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il19LFUyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWdyaW4tc3F1aW50IixpY29uOls1MTIsNTEyLFsxMjg1MTgsImdyaW4tc3F1aW50Il0sImY1ODUiLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zNzIuMiA0Ni4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42em0tMjQ5LjYtMTQzYzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMjA4IDEyNS44IDE4MC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAyMDggMzg2LjIgMjM1LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il19LGo1dD1VMmUsajJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZS11c2VyIixpY29uOls1MTIsNTEyLFs2MjE0MiwidXNlci1jaXJjbGUiXSwiZjJiZCIsIk00MDYuNSAzOTkuNkMzODcuNCAzNTIuOSAzNDEuNSAzMjAgMjg4IDMyMGwtNjQgMGMtNTMuNSAwLTk5LjQgMzIuOS0xMTguNSA3OS42LTM1LjYtMzcuMy01Ny41LTg3LjktNTcuNS0xNDMuNiAwLTExNC45IDkzLjEtMjA4IDIwOC0yMDhzMjA4IDkzLjEgMjA4IDIwOGMwIDU1LjctMjEuOSAxMDYuMi01Ny41IDE0My42em0tNDAuMSAzMi43QzMzNC40IDQ1Mi40IDI5Ni42IDQ2NCAyNTYgNDY0cy03OC40LTExLjYtMTEwLjUtMzEuN2M3LjMtMzYuNyAzOS43LTY0LjMgNzguNS02NC4zbDY0IDBjMzguOCAwIDcxLjIgMjcuNiA3OC41IDY0LjN6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTI3MmE0MCA0MCAwIDEgMSAwLTgwIDQwIDQwIDAgMSAxIDAgODB6bS04OC00MGE4OCA4OCAwIDEgMCAxNzYgMCA4OCA4OCAwIDEgMCAtMTc2IDB6Il19LFc1dD1qMmUsVzJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InJlY3RhbmdsZS1saXN0IixpY29uOls1MTIsNTEyLFsibGlzdC1hbHQiXSwiZjAyMiIsIk02NCAxMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI1NmMwIDguOCA3LjIgMTYgMTYgMTZsMzg0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjU2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCAxMTJ6TTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6TTE2MCAzMjBhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptLTMyLTk2YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMTA0LTU2bDE2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNjAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCAxMjhsMTYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSxHNXQ9VzJlLEcyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJoYW5kIixpY29uOls1MTIsNTEyLFsxMjkzMDYsOTk5NSwiaGFuZC1wYXBlciJdLCJmMjU2IiwiTTI1Ni41IDBjLTI1LjMgMC00Ny4yIDE0LjctNTcuNiAzNi03LTIuNi0xNC41LTQtMjIuNC00LTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMTY1LjUtMi43LTIuN2MtMjUtMjUtNjUuNS0yNS05MC41IDBzLTI1IDY1LjUgMCA5MC41TDEwNyA0MzdjNDggNDggMTEzLjEgNzUgMTgxIDc1bDE2LjUgMGMxLjUgMCAzLS4xIDQuNS0uNCA5MS43LTYuMiAxNjUtNzkuNCAxNzEuMS0xNzEuMSAuMy0xLjUgLjQtMyAuNC00LjVsMC0xNzZjMC0zNS4zLTI4LjctNjQtNjQtNjQtNS41IDAtMTAuOSAuNy0xNiAybDAtMmMwLTM1LjMtMjguNy02NC02NC02NC03LjkgMC0xNS40IDEuNC0yMi40IDQtMTAuNC0yMS4zLTMyLjMtMzYtNTcuNi0zNnptLTE2IDk2LjFsMC0uMSAwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEzNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTcyLjljLS4xIC42LS4xIDEuMy0uMiAxLjktMy40IDY5LjctNTkuMyAxMjUuNi0xMjkgMTI5LS42IDAtMS4zIC4xLTEuOSAuMkwyODggNDY0QzIzMi45IDQ2NCAxODAgNDQyLjEgMTQxIDQwMy4xTDUzLjIgMzE1LjNjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGw0My43IDQzLjdjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMnMxNC44LTEyLjUgMTQuOC0yMi4ybDAtMjIzLjRjMC04LjggNy4yLTE2IDE2LTE2IDguOCAwIDE2IDcuMSAxNiAxNS45bDAgMTM2LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEzNS45eiJdfSxZNXQ9RzJlLFo1dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJ0aHVtYnMtdXAiLGljb246WzUxMiw1MTIsWzEyODA3Nyw2MTU3NV0sImYxNjQiLCJNMTcxLjUgMzguOEMxOTIuMyA0IDIzNi41LTEwIDI3NCA3LjZsNy4yIDMuOEMzMTYgMzIuMyAzMzAgNzYuNSAzMTIuNCAxMTRsMCAwLTE0LjEgMzAgMTA5LjcgMCA3LjQgLjRjMzYuMyAzLjcgNjQuNiAzNC40IDY0LjYgNzEuNiAwIDEzLjItMy42IDI1LjQtOS44IDM2IDYuMSAxMC42IDkuNyAyMi44IDkuOCAzNiAwIDE4LjMtNi45IDM0LjgtMTggNDcuNSAxLjMgNS4zIDIgMTAuOCAyIDE2LjUgMCAyNS4xLTEyLjkgNDctMzIuMiA1OS45LTEuOSAzNS41LTI5LjQgNjQuMi02NC40IDY3LjdsLTcuNCAuNC0xMDQuMSAwYy0xOCAwLTM1LjktMy40LTUyLjYtOS45bC03LjEtMy0uNy0uMy02LjYtMy4yLS43LS4zLTEyLjItNi41Yy0xMi4zLTYuNS0yMy4zLTE0LjctMzIuOS0yNC4xLTQuMSAyNi45LTI3LjMgNDcuNC01NS4zIDQ3LjRsLTMyIDBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgMjAwYzAtMzAuOSAyNS4xLTU2IDU2LTU2bDMyIDBjMTAuOCAwIDIwLjkgMy4xIDI5LjUgOC41bDUwLjEtMTA2LjUgLjYtMS4yIDIuNy01IC42LS45ek01NiAxOTJjLTQuNCAwLTggMy42LTggOGwwIDIyNGMwIDQuNCAzLjYgOCA4IDhsMzIgMGM0LjQgMCA4LTMuNiA4LThsMC0yMjRjMC00LjQtMy42LTgtOC04bC0zMiAwek0yNTMuNiA1MWMtMTQuOC02LjktMzIuMy0xLjYtNDAuNyAxMmwtMi4yIDQtNTYuOCAxMjAuOWMtMy41IDcuNS01LjUgMTUuNS02IDIzLjdsLS4xIDQuMiAwIDExMi45IC4yIDcuOWMyLjQgMzIuNyAyMS40IDYyLjEgNTAuNyA3Ny43bDExLjUgNi4xIDYuMyAzLjFjMTIuNCA1LjYgMjUuOCA4LjUgMzkuNCA4LjVsMTA0LjEgMCAyLjQtLjFjMTIuMS0xLjIgMjEuNi0xMS41IDIxLjYtMjMuOWwtLjItMi42Yy0uMS0uOS0uMi0xLjctLjQtMi42LTIuNy0xMi4xIDQuMy0yNC4yIDE2LTI4IDkuNy0zLjEgMTYuNi0xMi4yIDE2LjYtMjIuOCAwLTQuMy0xLjEtOC4yLTMuMS0xMS44LTYuMy0xMS4xLTIuOC0yNS4yIDgtMzIgNi44LTQuMyAxMS4yLTExLjggMTEuMi0yMC4yIDAtNy4xLTMuMS0xMy41LTguMi0xOC01LjItNC42LTguMi0xMS4xLTguMi0xOHMzLTEzLjQgOC4yLTE4YzUuMS00LjUgOC4yLTEwLjkgOC4yLTE4bC0uMS0yLjRjLTEuMS0xMS4zLTEwLjEtMjAuMy0yMS40LTIxLjRsLTIuNC0uMS0xNDcuNSAwYy04LjIgMC0xNS44LTQuMi0yMC4yLTExLjEtNC40LTYuOS01LTE1LjctMS41LTIzLjFMMjY5IDkzLjZjNy0xNSAxLjQtMzIuNy0xMi41LTQxTDI1My42IDUxeiJdfSxYNXQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiYnVpbGRpbmciLGljb246WzM4NCw1MTIsWzEyNzk3MCw2MTY4N10sImYxYWQiLCJNNjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsODAgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MCA4MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTM4NGMwLTguOC03LjItMTYtMTYtMTZMNjQgNDh6TTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptOTYgNDhjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjQwIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTk2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXX0sUTV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNoZXNzLXJvb2siLGljb246WzM4NCw1MTIsWzk4MjBdLCJmNDQ3IiwiTTM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTM4LjdjMCAxMy44LTQuNSAyNy4zLTEyLjggMzguNGwtMzUuMiA0Ni45IDAgMTEyIDQwLjggNjguMWM0LjcgNy44IDcuMiAxNi43IDcuMiAyNS44IDAgMjcuNy0yMi40IDUwLjEtNTAuMSA1MC4xTDUwLjEgNTEyYy0yNy43IDAtNTAuMS0yMi40LTUwLjEtNTAuMSAwLTkuMSAyLjUtMTggNy4yLTI1LjhMNDggMzY4IDQ4IDI1NiAxMi44IDIwOS4xQzQuNSAxOTggMCAxODQuNSAwIDE3MC43TDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDM1MiAwek00OC4zIDQ2MC44bC0uMyAxLjFjMCAxLjIgMSAyLjEgMi4xIDIuMWwyODMuOCAwYzEuMiAwIDIuMS0xIDIuMS0yLjFsLS4zLTEuMS0zNi41LTYwLjgtMjE0LjQgMC0zNi41IDYwLjh6TTQ4IDE3MC43YzAgMi42IC42IDUuMSAxLjggNy40bDEuNCAyLjIgMCAwIDM1LjIgNDYuOSA5LjYgMTIuOCAwIDExMiAxOTIgMCAwLTExMiA5LjYtMTIuOCAzNS4yLTQ2LjkgMCAwIDEuNC0yLjJjMS4yLTIuMyAxLjgtNC44IDEuOC03LjRsMC0xMjIuNy02NCAwIDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yNC02NCAwIDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yNC02NCAwIDAgMTIyLjd6Il19LFkyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjaXJjbGUtcXVlc3Rpb24iLGljb246WzUxMiw1MTIsWzYyMTA4LCJxdWVzdGlvbi1jaXJjbGUiXSwiZjA1OSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1Ni04MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDQ3LjItMzYgNjcuMi01NiA3NC41bDAgMy44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC4xYzAtMjAuNSAxNC44LTM1LjIgMzAuMS00MC4yIDYuNC0yLjEgMTMuMi01LjUgMTguMi0xMC4zIDQuMy00LjIgNy43LTEwIDcuNy0xOS42IDAtMTcuNy0xNC4zLTMyLTMyLTMyek0yMjQgMzY4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LEs1dD1ZMmUsSjV0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZpbGUiLGljb246WzM4NCw1MTIsWzEyODE5NiwxMjg0NTksNjE0NjJdLCJmMTViIiwiTTE3NiA0OEw2NCA0OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDAtODggMGMtMzkuOCAwLTcyLTMyLjItNzItNzJsMC04OHpNMzE2LjEgMTYwTDIyNCA2Ny45IDIyNCAxMzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjguMSAwek0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwxOTcuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDE0MS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6Il19LFoyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLXNhZC1jcnkiLGljb246WzUxMiw1MTIsWzEyODU1Nywic2FkLWNyeSJdLCJmNWIzIiwiTTQwMCA0MDYuMUw0MDAgMjg4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTUyLjZjLTI4LjcgMTUtNjEuNCAyMy40LTk2IDIzLjRzLTY3LjMtOC41LTk2LTIzLjRMMTYwIDI4OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDExOC4xQzcyLjYgMzY4LjIgNDggMzE1IDQ4IDI1NiA0OCAxNDEuMSAxNDEuMSA0OCAyNTYgNDhzMjA4IDkzLjEgMjA4IDIwOGMwIDU5LTI0LjYgMTEyLjItNjQgMTUwLjF6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNTIgMTk2bDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjAgOS0yMCAyMC0yMHptMTcyIDIwYzAtMTEgOS0yMCAyMC0yMGwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwek0yMDggMzM2bDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGwwLTMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4eiJdfSxlOHQ9WjJlLHQ4dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjYWxlbmRhci1taW51cyIsaWNvbjpbNDQ4LDUxMixbXSwiZjI3MiIsIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwem0zMiAxMzZsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSxYMmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS10aXJlZCIsaWNvbjpbNTEyLDUxMixbMTI4NTU1LCJ0aXJlZCJdLCJmNWM4IiwiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc2LjUgNjQuM0MxOTYuMSAzMDIuMSAyMjMuOCAyODggMjU2IDI4OHM1OS45IDE0LjEgNzkuNSAzMi4zYzE5IDE3LjggMzIuNSA0MS43IDMyLjUgNjMuNyAwIDUuNC0yLjcgMTAuNC03LjIgMTMuNHMtMTAuMiAzLjQtMTUuMiAxLjNsLTE3LjItNy41Yy0yMi44LTEwLTQ3LjUtMTUuMS03Mi40LTE1LjFzLTQ5LjYgNS4yLTcyLjQgMTUuMWwtMTcuMiA3LjVjLTQuOSAyLjItMTAuNyAxLjctMTUuMi0xLjNzLTcuMi04LTcuMi0xMy40YzAtMjIgMTMuNS00NS45IDMyLjUtNjMuN3pNMTIyLjYgMTU5LjJjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXX0sYTh0PVgyZSxyOHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaGFuZC1wb2ludC1yaWdodCIsaWNvbjpbNTEyLDUxMixbXSwiZjBhNCIsIk00NDggMTI4bC0xNzcuNiAwYzEgNS4yIDEuNiAxMC41IDEuNiAxNmwwIDE2IDE3NiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2ek0yMjQgMTQ0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yNCAwYy02Ni4zIDAtMTIwIDUzLjctMTIwIDEyMGwwIDQ4YzAgNTIuNSAzMy43IDk3LjEgODAuNyAxMTMuNC0uNS0zLjEtLjctNi4yLS43LTkuNCAwLTIwIDkuMi0zNy45IDIzLjYtNDkuNy00LjktOS03LjYtMTkuNC03LjYtMzAuMyAwLTE1LjEgNS4zLTI5IDE0LTQwLTguOC0xMS0xNC0yNC45LTE0LTQwbDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MHpNMTkyIDY0bDAgMGMxOCAwIDM0LjYgNiA0OCAxNmwyMDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtODIgMGMxLjMgNS4xIDIgMTAuNSAyIDE2IDAgMjUuMy0xNC43IDQ3LjItMzYgNTcuNiAyLjYgNyA0IDE0LjUgNCAyMi40IDAgMjAtOS4yIDM3LjktMjMuNiA0OS43IDQuOSA5IDcuNiAxOS40IDcuNiAzMC4zIDAgMzUuMy0yOC43IDY0LTY0IDY0bC04OCAwQzc1LjIgNDQ4IDAgMzcyLjggMCAyODBsMC00OEMwIDEzOS4yIDc1LjIgNjQgMTY4IDY0bDI0IDB6bTY0IDMzNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw2NCAwem0xNi0xNzZjMCA1LjUtLjcgMTAuOS0yIDE2bDM0IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTMyIDAgMCAxNnptLTI0IDY0bC00MCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDY0IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTI0IDB6Il19LFEyZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjaXJjbGUtdXAiLGljb246WzUxMiw1MTIsWzYxNDY3LCJhcnJvdy1hbHQtY2lyY2xlLXVwIl0sImYzNWIiLCJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xMS4zLTM4Ny4zYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMGwtMTA0IDEwNGMtNC42IDQuNi01LjkgMTEuNS0zLjUgMTcuNHM4LjMgOS45IDE0LjggOS45bDcyIDAgMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTEwNCA3MiAwYzYuNSAwIDEyLjMtMy45IDE0LjgtOS45czEuMS0xMi45LTMuNS0xNy40bC0xMDQtMTA0eiJdfSxpOHQ9UTJlLG84dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJoYW5kLXNjaXNzb3JzIixpY29uOls1MTIsNTEyLFtdLCJmMjU3IiwiTS4yIDI3Ni4zYy0xLjItMzUuMyAyNi40LTY1IDYxLjctNjYuMmwzLjMtLjEtOC4yLTEuOEMyMi41IDIwMC41IC43IDE2Ni4zIDguMyAxMzEuOFM1MC4yIDc1LjUgODQuNyA4My4ybDE3MyAzOC4zYzIuMy0yLjkgNC42LTUuNyA3LjEtOC41bDE4LjQtMjAuM0MyOTkuOSA3NC41IDMyMy41IDY0IDM0OC4zIDY0bDEwLjIgMGM1NC4xIDAgMTA0LjEgMjguNyAxMzEuMyA3NS40bDEuNSAyLjZjMTMuNiAyMy4yIDIwLjcgNDkuNyAyMC43IDc2LjZMNTEyIDM0NGMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtMTA0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMi44IC4yLTUuNiAuNS04LjMtMTkuNC0xMS0zMi41LTMxLjgtMzIuNS01NS43IDAtLjggMC0xLjYgMC0yLjRMNjYuNCAzMzhjLTM1LjMgMS4yLTY1LTI2LjQtNjYuMi02MS43em02My40LTE4LjJjLTguOCAuMy0xNS43IDcuNy0xNS40IDE2LjZzNy43IDE1LjcgMTYuNSAxNS40bDE2MS41LTUuNmM5LjgtLjMgMTguNyA1LjMgMjIuNyAxNC4yczIuMiAxOS4zLTQuNSAyNi40Yy0yLjggMi45LTQuNCA2LjctNC40IDExIDAgOC44IDcuMiAxNiAxNiAxNiA5LjEgMCAxNy40IDUuMSAyMS41IDEzLjNzMy4yIDE3LjktMi4zIDI1LjFjLTIgMi43LTMuMiA2LTMuMiA5LjYgMCA4LjggNy4yIDE2IDE2IDE2bDEwNCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcybDAtMTI1LjRjMC0xOC40LTQuOS0zNi41LTE0LjItNTIuNGwtMS41LTIuNmMtMTguNi0zMi01Mi44LTUxLjYtODkuOC01MS42bC0xMC4yIDBjLTExLjMgMC0yMiA0LjgtMjkuNiAxMy4xbDAgMC0xOC40IDIwLjNjLS42IC42LTEuMSAxLjMtMS43IDEuOWw1NyAxMy4yYzguNiAyIDE0IDEwLjYgMTIgMTkuMnMtMTAuNiAxNC0xOS4yIDEyTDI2Mi44IDE3MS44IDc0LjMgMTMwYy04LjYtMS45LTE3LjIgMy41LTE5LjEgMTIuMnMzLjUgMTcuMiAxMi4yIDE5LjFsMTg3LjUgNDEuNmMxMC4yIDIuMyAxNy44IDEwLjkgMTguNyAyMS40bC4xIDFjLjYgNi42LTEuNSAxMy4xLTUuOCAxOC4xcy0xMC42IDcuOS0xNy4yIDguMkw2My42IDI1OC4xeiJdfSxzOHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZ2VtIixpY29uOls1MTIsNTEyLFsxMjgxNDJdLCJmM2E1IiwiTTE2OC41IDcybDg3LjUgOTMgODcuNS05My0xNzUgMHpNMzgzLjkgOTkuMWwtNzIuMyA3Ni45IDEyOSAwLTU2LjYtNzYuOXptNTAgMTI0LjlMNzguMSAyMjQgMjU2IDQyMC4zIDQzMy45IDIyNHpNNzEuNSAxNzZsMTI5IDAtNzIuMy03Ni45LTU2LjYgNzYuOXptNDM0LjMgNDAuMWwtMjMyIDI1NmMtNC41IDUtMTEgNy45LTE3LjggNy45cy0xMy4yLTIuOS0xNy44LTcuOWwtMjMyLTI1NmMtNy43LTguNS04LjMtMjEuMi0xLjUtMzAuNGwxMTItMTUyYzQuNS02LjEgMTEuNy05LjggMTkuMy05LjhsMjQwIDBjNy42IDAgMTQuOCAzLjYgMTkuMyA5LjhsMTEyIDE1MmM2LjggOS4yIDYuMSAyMS45LTEuNSAzMC40eiJdfSxZZD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJyZWN0YW5nbGUteG1hcmsiLGljb246WzUxMiw1MTIsWzYyMTY0LCJyZWN0YW5nbGUtdGltZXMiLCJ0aW1lcy1yZWN0YW5nbGUiLCJ3aW5kb3ctY2xvc2UiXSwiZjQxMCIsIk02NCAxMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI1NmMwIDguOCA3LjIgMTYgMTYgMTZsMzg0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjU2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCAxMTJ6TTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTMzNC4xIDQ5LjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTQ0LjEgNDQuMSA0NC4xIDQ0LjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDQuMS00NC4xLTQ0LjEgNDQuMWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0NC4xLTQ0LjEtNDQuMS00NC4xYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDQuMSA0NC4xIDQ0LjEtNDQuMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXX0sbjh0PVlkLGw4dD1ZZCxjOHQ9WWQsS2Q9e3ByZWZpeDoiZmFyIixpY29uTmFtZToidHJhc2gtY2FuIixpY29uOls0NDgsNTEyLFs2MTQ2MCwidHJhc2gtYWx0Il0sImYyZWQiLCJNMTY2LjItMTZjLTEzLjMgMC0yNS4zIDguMy0zMCAyMC44TDEyMCA0OCAyNCA0OEMxMC43IDQ4IDAgNTguNyAwIDcyUzEwLjcgOTYgMjQgOTZsNDAwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTk2IDAtMTYuMi00My4yQzMwNy4xLTcuNyAyOTUuMi0xNiAyODEuOC0xNkwxNjYuMi0xNnpNMzIgMTQ0bDAgMzA0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzA0LTQ4IDAgMCAzMDRjMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzA0LTQ4IDB6bTE2MCA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTc2em0xMTIgMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTc2eiJdfSxkOHQ9S2QsZjh0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImxpZmUtcmluZyIsaWNvbjpbNTEyLDUxMixbXSwiZjFjZCIsIk0zODUuMSA0MTkuMUMzNDkuNyA0NDcuMiAzMDQuOCA0NjQgMjU2IDQ2NHMtOTMuNy0xNi44LTEyOS4xLTQ0LjlsODAuNC04MC40YzE0LjMgOC40IDMxIDEzLjMgNDguOCAxMy4zczM0LjUtNC44IDQ4LjgtMTMuM2w4MC40IDgwLjR6bTY4LjEgLjJDNDg5LjkgMzc0LjkgNTEyIDMxOC4xIDUxMiAyNTZTNDg5LjkgMTM3LjEgNDUzLjIgOTIuN0w0NjUgODFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw0MTkuMyA1OC44QzM3NC45IDIyLjEgMzE4LjEgMCAyNTYgMFMxMzcuMSAyMi4xIDkyLjcgNTguOEw4MSA0N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTMzcuNyA3MS42IDQ3IDgxTDU4LjggOTIuN0MyMi4xIDEzNy4xIDAgMTkzLjkgMCAyNTZTMjIuMSAzNzQuOSA1OC44IDQxOS4zTDQ3IDQzMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDExLjgtMTEuOEMxMzcuMSA0ODkuOSAxOTMuOSA1MTIgMjU2IDUxMnMxMTguOS0yMi4xIDE2My4zLTU4LjhMNDMxIDQ2NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTExLjgtMTEuOHptLTM0LjEtMzQuMWwtODAuNC04MC40YzguNC0xNC4zIDEzLjMtMzEgMTMuMy00OC44cy00LjgtMzQuNS0xMy4zLTQ4LjhsODAuNC04MC40QzQ0Ny4yIDE2Mi4zIDQ2NCAyMDcuMiA0NjQgMjU2cy0xNi44IDkzLjctNDQuOSAxMjkuMXpNMzg1LjEgOTIuOWwtODAuNCA4MC40Yy0xNC4zLTguNC0zMS0xMy4zLTQ4LjgtMTMuM3MtMzQuNSA0LjgtNDguOCAxMy4zTDEyNi45IDkyLjlDMTYyLjMgNjQuOCAyMDcuMiA0OCAyNTYgNDhzOTMuNyAxNi44IDEyOS4xIDQ0Ljl6TTE3My4zIDMwNC44TDkyLjkgMzg1LjFDNjQuOCAzNDkuNyA0OCAzMDQuOCA0OCAyNTZzMTYuOC05My43IDQ0LjktMTI5LjFsODAuNCA4MC40Yy04LjQgMTQuMy0xMy4zIDMxLTEzLjMgNDguOHM0LjggMzQuNSAxMy4zIDQ4Ljh6TTIwOCAyNTZhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXX0sdTh0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNvcHlyaWdodCIsaWNvbjpbNTEyLDUxMixbMTY5XSwiZjFmOSIsIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwNS4xIDMwNi45Yy0yOC4xLTI4LjEtMjguMS03My43IDAtMTAxLjhzNzMuNy0yOC4xIDEwMS44IDBjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45Yy00Ni45LTQ2LjktMTIyLjgtNDYuOS0xNjkuNyAwcy00Ni45IDEyMi44IDAgMTY5LjcgMTIyLjggNDYuOSAxNjkuNyAwYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBjLTI4LjEgMjguMS03My43IDI4LjEtMTAxLjggMHoiXX0sSzJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZS1sZWZ0IixpY29uOls1MTIsNTEyLFs2MTg0MCwiYXJyb3ctYWx0LWNpcmNsZS1sZWZ0Il0sImYzNTkiLCJNNDggMjU2YTIwOCAyMDggMCAxIDEgNDE2IDAgMjA4IDIwOCAwIDEgMSAtNDE2IDB6bTQ2NCAwYTI1NiAyNTYgMCAxIDAgLTUxMiAwIDI1NiAyNTYgMCAxIDAgNTEyIDB6TTEyNC43IDI0NC43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmwxMDQgMTA0YzQuNiA0LjYgMTEuNSA1LjkgMTcuNCAzLjVzOS45LTguMyA5LjktMTQuOGwwLTcyIDEwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTEwNCAwIDAtNzJjMC02LjUtMy45LTEyLjMtOS45LTE0LjhzLTEyLjktMS4xLTE3LjQgMy41bC0xMDQgMTA0eiJdfSxwOHQ9SzJlLGg4dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjYWxlbmRhciIsaWNvbjpbNDQ4LDUxMixbMTI4MTk3LDEyODE5OF0sImYxMzMiLCJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDggMzUyIDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwek00OCAyMjRsMCAxOTJjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE5Mi0zNTIgMHoiXX0sSjJlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZnJvd24tb3BlbiIsaWNvbjpbNTEyLDUxMixbMTI4NTUwLCJmcm93bi1vcGVuIl0sImY1N2EiLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xODIuNCAzODIuNWMtMTIuNCA1LjItMjYuNS00LjEtMjEuMS0xNi40IDE2LTM2LjYgNTIuNC02Mi4xIDk0LjgtNjIuMXM3OC44IDI1LjYgOTQuOCA2Mi4xYzUuNCAxMi4zLTguNyAyMS42LTIxLjEgMTYuNC0yMi40LTkuNS00Ny40LTE0LjgtNzMuNy0xNC44cy01MS4zIDUuMy03My43IDE0Ljh6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sbTh0PUoyZSxlYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2hhcnQtYmFyIixpY29uOls1MTIsNTEyLFsiYmFyLWNoYXJ0Il0sImYwODAiLCJNNDggNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCA0Mi43IDAgNTZMMCA0MDBjMCA0NC4yIDM1LjggODAgODAgODBsNDA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODAgNDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMkw0OCA1NnptMTA0IDcybDIwOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDE1MiA4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptMCA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6bTAgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNzIgMHoiXX0sZzh0PWVhZSxaZD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJob3VzZSIsaWNvbjpbNTEyLDUxMixbMTI3OTY4LDYzNDk4LDYzNTAwLCJob21lIiwiaG9tZS1hbHQiLCJob21lLWxnLWFsdCJdLCJmMDE1IiwiTTI0MCA2LjFjOS4xLTguMiAyMi45LTguMiAzMiAwbDIzMiAyMDhjOS45IDguOCAxMC43IDI0IDEuOCAzMy45cy0yNCAxMC43LTMzLjkgMS44bC04LTcuMiAwIDIwNS4zYzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMDUuMy04IDcuMmMtOS45IDguOC0yNSA4LTMzLjktMS44cy04LTI1IDEuOC0zMy45TDI0MCA2LjF6bTE2IDUwLjFMOTYgMTk5LjcgOTYgNDQ4YzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAtMTA0YzAtMzkuOCAzMi4yLTcyIDcyLTcybDQ4IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAxMDQgNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDguMy0xNjAtMTQzLjR6TTIwOCA0NjRsOTYgMCAwLTEwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMDR6Il19LHg4dD1aZCxiOHQ9WmQsdjh0PVpkLHRhZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWZyb3duIixpY29uOls1MTIsNTEyLFs5Nzg1LCJmcm93biJdLCJmMTE5IiwiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMzM0LjcgMzg0LjZDMzE5LjcgMzY5IDI5My42IDM1MiAyNTYgMzUycy02My43IDE3LTc4LjcgMzIuNmMtOS4yIDkuNi0yNC40IDkuOS0zMy45IC43cy05LjktMjQuNC0uNy0zMy45YzIyLjEtMjMgNjAtNDcuNCAxMTMuMy00Ny40czkxLjIgMjQuNCAxMTMuMyA0Ny40YzkuMiA5LjYgOC45IDI0LjgtLjcgMzMuOXMtMjQuOCA4LjktMzMuOS0uN3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSx5OHQ9dGFlLE1WPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InVzZXIiLGljb246WzQ0OCw1MTIsWzEyODEwMCw2MjE0NCw2MjQ3MCwidXNlci1hbHQiLCJ1c2VyLWxhcmdlIl0sImYwMDciLCJNMTQ0IDEyOGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6bTIwOCAwYTEyOCAxMjggMCAxIDAgLTI1NiAwIDEyOCAxMjggMCAxIDAgMjU2IDB6TTQ4IDQ4MGMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOGw5NiAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOGMwLTk3LjItNzguOC0xNzYtMTc2LTE3NmwtOTYgMEM3OC44IDMwNCAwIDM4Mi44IDAgNDgwbDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOHoiXX0sdzh0PU1WLE04dD1NVix6OHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToic25vd2ZsYWtlIixpY29uOls1MTIsNTEyLFsxMDA1MiwxMDA1NF0sImYyZGMiLCJNMjgwLjEtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDc4LjEtMjMtMjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTcgNTcgMCA3Ni41LTY2LjItMzguMi0yMC45LTc3LjhjLTMuNC0xMi44LTE2LjYtMjAuNC0yOS40LTE3Uzk1LjIgOTggOTguNyAxMTAuOGw4LjQgMzEuNS02Ny42LTM5QzI4IDk2LjYgMTMuMyAxMDAuNSA2LjcgMTEyUzQgMTM4LjIgMTUuNSAxNDQuOGw2Ny42IDM5LTMxLjUgOC40Yy0xMi44IDMuNC0yMC40IDE2LjYtMTcgMjkuNHMxNi42IDIwLjQgMjkuNCAxN2w3Ny44LTIwLjkgNjYuMiAzOC4yLTY2LjIgMzguMi03Ny44LTIwLjljLTEyLjgtMy40LTI2IDQuMi0yOS40IDE3czQuMiAyNiAxNyAyOS40bDMxLjUgOC40LTY3LjYgMzlDNCAzNzMuOCAuMSAzODguNSA2LjcgNDAwczIxLjMgMTUuNCAzMi44IDguOGw2Ny42LTM5LTguNCAzMS41Yy0zLjQgMTIuOCA0LjIgMjYgMTcgMjkuNHMyNi00LjIgMjkuNC0xN2wyMC45LTc3LjggNjYuMi0zOC4yIDAgNzYuNS01NyA1N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDIzLTIzIDAgNzguMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzguMSAyMyAyM2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU3LTU3IDAtNzYuNSA2Ni4yIDM4LjIgMjAuOSA3Ny44YzMuNCAxMi44IDE2LjYgMjAuNCAyOS40IDE3czIwLjQtMTYuNiAxNy0yOS40bC04LjQtMzEuNSA2Ny42IDM5YzExLjUgNi42IDI2LjIgMi43IDMyLjgtOC44czIuNy0yNi4yLTguOC0zMi44bC02Ny42LTM5IDMxLjUtOC40YzEyLjgtMy40IDIwLjQtMTYuNiAxNy0yOS40cy0xNi42LTIwLjQtMjkuNC0xN2wtNzcuOCAyMC45LTY2LjItMzguMiA2Ni4yLTM4LjIgNzcuOCAyMC45YzEyLjggMy40IDI2LTQuMiAyOS40LTE3cy00LjItMjYtMTctMjkuNGwtMzEuNS04LjQgNjcuNi0zOWMxMS41LTYuNiAxNS40LTIxLjMgOC44LTMyLjhzLTIxLjMtMTUuNC0zMi44LTguOGwtNjcuNiAzOSA4LjQtMzEuNWMzLjQtMTIuOC00LjItMjYtMTctMjkuNHMtMjYgNC4yLTI5LjQgMTdsLTIwLjkgNzcuOC02Ni4yIDM4LjIgMC03Ni41IDU3LTU3YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTIzIDIzIDAtNzguMXoiXX0sazh0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImJvb2ttYXJrIixpY29uOlszODQsNTEyLFsxMjgyNzgsNjE1OTFdLCJmMDJlIiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDE3LjFjMCAyNS42LTI4LjUgNDAuOC00OS44IDI2LjZMMTkyIDQxMi44IDQ5LjggNTA3LjdDMjguNSA1MjEuOSAwIDUwNi42IDAgNDgxLjFMMCA2NHpNNjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4Ny4yIDExNy40LTc4LjJjMTYuMS0xMC43IDM3LjEtMTAuNyA1My4yIDBMMzM2IDQ1MS4yIDMzNiA2NGMwLTguOC03LjItMTYtMTYtMTZMNjQgNDh6Il19LGFhZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJzcXVhcmUtY2FyZXQtbGVmdCIsaWNvbjpbNDQ4LDUxMixbImNhcmV0LXNxdWFyZS1sZWZ0Il0sImYxOTEiLCJNNDggNDE2YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjB6bTE2IDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MHptNjQtMjI0YzAtNi43IDIuOC0xMyA3LjctMTcuNmwxMTItMTA0YzctNi41IDE3LjItOC4yIDI1LjktNC40UzI4OCAxNDIuNSAyODggMTUybDAgMjA4YzAgOS41LTUuNyAxOC4yLTE0LjQgMjJzLTE4LjkgMi4xLTI1LjktNC40bC0xMTItMTA0Yy00LjktNC41LTcuNy0xMC45LTcuNy0xNy42eiJdfSxTOHQ9YWFlLHpWPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhhbmRzaGFrZSIsaWNvbjpbNjQwLDUxMixbMTI5MzA5LDYyNjYyLCJoYW5kc2hha2UtYWx0IiwiaGFuZHNoYWtlLXNpbXBsZSJdLCJmMmI1IiwiTTU5OC4xIDc1LjRjMTAuNy03LjggMTMuMS0yMi44IDUuMy0zMy41cy0yMi44LTEzLjEtMzMuNS01LjNsLTc0LjUgNTQuMi05LjktNi42QzQ2NS44IDcxIDQ0Mi42IDY0IDQxOC45IDY0bC01OS4yIDAtLjQgMC0xNDMuNiAwYy0yNi43IDAtNTIuNSA4LjktNzMuNCAyNS4xTDcwLjEgMzYuNmMtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNzLTUuNCAyNS43IDUuMyAzMy41bDg4IDY0YzkuNiA2LjkgMjIuNyA1LjkgMzEuMS0yLjRsMy45LTMuOWMxMy41LTEzLjUgMzEuOC0yMS4xIDUwLjktMjEuMWw0Ni4zIDAtOTEuNyA5MS43Yy0xNS42IDE1LjYtMTUuNiA0MC45IDAgNTYuNmwuOCAuOEMyMTggMzA4IDI5NCAzMDggMzQwLjkgMjYxLjFsMjcuMS0yNy4xIDk3LjggOTcuOGMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtOS44IDkuOC0zMS0zMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwyOCAyOGMtMTcuNSAxMC40LTM3LjIgMTYuNy01Ny42IDE4LjVMMzEzIDM5OWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNSAxNS0zLjggMGMtMzYuMSAwLTcwLjctMTQuMy05Ni4yLTM5LjhMNjUgMjc5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45TDE2MC4yIDQ0Mi4xYzM0LjUgMzQuNSA4MS4zIDUzLjkgMTMwLjEgNTMuOWw1MS44IDAgMSAxIDEtMSA1LjcgMGM0OC44IDAgOTUuNi0xOS40IDEzMC4xLTUzLjlsMTkuOS0xOS45YzEuMi0xLjIgMi4zLTIuMyAzLjQtMy41IC43LS41IDEuMy0xLjEgMS45LTEuN0w2MDkgMzEzYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTUzLjggNTMuOGMtNC4yLTEyLjgtMTEuMy0yNC45LTIxLjUtMzUuMUwzODUgMTgzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNDQuMSA0NC4xYy0yNi41IDI2LjUtNjguNSAyOC05Ni43IDQuNmw5OC43LTk4LjdjMTMuNC0xMy40IDMxLjYtMjEgNTAuNi0yMS4xbDguNSAwIC4yIDAgNTAuOCAwYzE0LjIgMCAyOC4xIDQuMiAzOS45IDEyLjFMNDgyLjcgMTQwYzguNCA1LjYgMTkuMyA1LjMgMjcuNC0uNmw4OC02NHoiXX0sQzh0PXpWLEw4dD16VixyYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1zbWlsZS13aW5rIixpY29uOls1MTIsNTEyLFsxMjg1MjEsInNtaWxlLXdpbmsiXSwiZjRkYSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ny4zIDYzLjRDMTkyLjMgMzM1IDIxOC40IDM1MiAyNTYgMzUyczYzLjctMTcgNzguNy0zMi42YzkuMi05LjYgMjQuNC05LjkgMzMuOS0uN3M5LjkgMjQuNCAuNyAzMy45Yy0yMi4xIDIzLTYwIDQ3LjQtMTEzLjMgNDcuNHMtOTEuMi0yNC40LTExMy4zLTQ3LjRjLTkuMi05LjYtOC45LTI0LjggLjctMzMuOXMyNC44LTguOSAzMy45IC43ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il19LFQ4dD1yYWUsaWFlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi1zcXVpbnQtdGVhcnMiLGljb246WzUxMiw1MTIsWzEyOTMxNSwiZ3Jpbi1zcXVpbnQtdGVhcnMiXSwiZjU4NiIsIk00MDMuMSA0MDMuMWM2Ny4yLTY3LjIgNzguOC0xNjguOSAzNC45LTI0OGwzNi43LTUuMmM0LjUtLjYgOC44LTEuNiAxMy4xLTIuOCA0NC42IDk0LjkgMjcuNyAyMTEuNS01MC43IDI5MHMtMTk1LjEgOTUuMy0yOTAgNTAuN2MxLjItNC4yIDIuMS04LjYgMi44LTEzLjFsNS4yLTM2LjdjNzkuMSA0My45IDE4MC44IDMyLjMgMjQ4LTM0Ljl6TTc1IDc1Yzc4LjQtNzguNCAxOTUuMS05NS4zIDI5MC01MC43LTEuMiA0LjItMi4xIDguNi0yLjggMTMuMWwtNS4yIDM2LjdjLTc5LjEtNDMuOS0xODAuOC0zMi4zLTI0OCAzNC45cy03OC44IDE2OC45LTM0LjkgMjQ4bC0zNi43IDUuMmMtNC41IC42LTguOCAxLjYtMTMuMSAyLjgtNDQuNi05NC45LTI3LjctMjExLjUgNTAuNy0yOTB6TTM3MC45IDIwNi41YzUuOC0xMC45IDIxLjEtMTIuNCAyNi40LTEuMyAyNS42IDUzLjUgMTYuMiAxMTkuNi0yOC4yIDE2My45LTQ0LjMgNDQuMy0xMTAuMyA1My43LTE2My44IDI4LjItMTEuMS01LjMtOS42LTIwLjYgMS4zLTI2LjQgMzItMTcuMSA2NC4yLTQwLjggOTMuOC03MC40IDI5LjctMjkuNyA1My40LTYxLjkgNzAuNS05NHpNOTMuMyAyODEuOWMtMS43LTggMi45LTE1LjkgMTAuNi0xOC40bDg0LjYtMjhjNS43LTEuOSAxMi4xLS40IDE2LjMgMy45czUuOCAxMC42IDMuOSAxNi4zbC0yOCA4NC42Yy0yLjYgNy43LTEwLjUgMTIuMy0xOC40IDEwLjZzLTEzLjQtOS0xMi43LTE3LjFsMy45LTQzLjEtNDMuMSAzLjljLTguMSAuNy0xNS41LTQuNy0xNy4xLTEyLjd6TTI5NC42IDExMC40bC0zLjkgNDMuMSA0My4xLTMuOWM4LjEtLjcgMTUuNSA0LjcgMTcuMSAxMi43cy0yLjkgMTUuOS0xMC42IDE4LjRsLTg0LjYgMjhjLTUuNyAxLjktMTIuMSAuNC0xNi4zLTMuOXMtNS44LTEwLjYtMy45LTE2LjNsMjgtODQuNmMyLjYtNy43IDEwLjUtMTIuMyAxOC40LTEwLjZzMTMuNCA5IDEyLjcgMTcuMXpNNTEyIDUxLjRjMCAyNS42LTE4LjggNDcuMy00NC4xIDUwLjlMNDIxLjEgMTA5Yy0xMC42IDEuNS0xOS42LTcuNS0xOC4xLTE4LjFsNi43LTQ2LjdDNDEzLjMgMTguOCA0MzUgMCA0NjAuNiAwIDQ4OSAwIDUxMiAyMyA1MTIgNTEuNHpNNDQuMSA0MDkuN0w5MC45IDQwM2MxMC42LTEuNSAxOS42IDcuNSAxOC4xIDE4LjFsLTYuNyA0Ni43Qzk4LjcgNDkzLjIgNzcgNTEyIDUxLjQgNTEyIDIzIDUxMiAwIDQ4OSAwIDQ2MC42IDAgNDM1IDE4LjggNDEzLjMgNDQuMSA0MDkuN3oiXX0sXzh0PWlhZSxBOHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmlsZS1hdWRpbyIsaWNvbjpbMzg0LDUxMixbXSwiZjFjNyIsIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek0yMjEuOSAyNjcuNmMtNC43IDEwLS4zIDIxLjkgOS43IDI2LjYgMTkuMiA4LjkgMzIuNCAyOC4zIDMyLjQgNTAuOHMtMTMuMiA0MS45LTMyLjQgNTAuOGMtMTAgNC43LTE0LjQgMTYuNi05LjcgMjYuNnMxNi42IDE0LjQgMjYuNiA5LjdDMjgxLjIgNDE2LjggMzA0IDM4My42IDMwNCAzNDVzLTIyLjgtNzEuOS01NS42LTg3LjFjLTEwLTQuNy0yMS45LS4zLTI2LjYgOS43ek0xMDQgMzA1Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDAgMjcuMiAzNGMzIDMuOCA3LjYgNiAxMi41IDZsLjMgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMjhjMC04LjgtNy4yLTE2LTE2LTE2bC0uMyAwYy00LjkgMC05LjUgMi4yLTEyLjUgNmwtMjcuMiAzNC0xNiAwek0yMjMuMyAzNzNjOS45LTUuNCAxNi43LTE2IDE2LjctMjguMXMtNi43LTIyLjctMTYuNy0yOC4xYy03LjgtNC4yLTE1LjMgMy4zLTE1LjMgMTIuMWwwIDMyYzAgOC44IDcuNiAxNi4zIDE1LjMgMTIuMXoiXX0sb2FlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNhbGVuZGFyLXhtYXJrIixpY29uOls0NDgsNTEyLFsiY2FsZW5kYXItdGltZXMiXSwiZjI3MyIsIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwem0xNzEuOSA5Mi4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC0zMy45IDMzLjkgMzMuOSAzMy45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTMzLjktMzMuOS0zMy45IDMzLjljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45LTMzLjktMzMuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDMzLjkgMzMuOSAzMy45LTMzLjljOS40LTkuNCAyNC42LTkuNCAzMy45IDB6Il19LCQ4dD1vYWUsc2FlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZS1kb3duIixpY29uOls1MTIsNTEyLFs2MTQ2NiwiYXJyb3ctYWx0LWNpcmNsZS1kb3duIl0sImYzNTgiLCJNMjU2IDQ2NGEyMDggMjA4IDAgMSAxIDAtNDE2IDIwOCAyMDggMCAxIDEgMCA0MTZ6TTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMjQ0LjcgMzg3LjNjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsMTA0LTEwNGM0LjYtNC42IDUuOS0xMS41IDMuNS0xNy40UzM2Ni41IDI1NiAzNjAgMjU2bC03MiAwIDAtMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEwNC03MiAwYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjRsMTA0IDEwNHoiXX0sRDh0PXNhZSxrVj17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmaWxlLWxpbmVzIixpY29uOlszODQsNTEyLFsxMjg0NDEsMTI4NDYyLDYxNjg2LCJmaWxlLWFsdCIsImZpbGUtdGV4dCJdLCJmMTVjIiwiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6bTU2IDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdfSxFOHQ9a1YsTjh0PWtWLFA4dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjb21tZW50cyIsaWNvbjpbNTc2LDUxMixbMTI4NDkwLDYxNjcwXSwiZjA4NiIsIk03Ni4yIDI1OC43YzYuMS0xNS4yIDQtMzIuNi01LjYtNDUuOS0xNC41LTIwLjEtMjIuNi00My43LTIyLjYtNjguOCAwLTY2LjggNjAuNS0xMjggMTQ0LTEyOHMxNDQgNjEuMiAxNDQgMTI4LTYwLjUgMTI4LTE0NCAxMjhjLTE1LjkgMC0zMS4xLTIuMy00NS4zLTYuNS0xMC4zLTMuMS0yMS40LTIuNS0zMS40IDEuNWwtNTAuNCAyMC4yIDExLjQtMjguNXpNMCAxNDRjMCAzNS44IDExLjYgNjkuMSAzMS43IDk2LjhMMS45IDMxNS4yYy0xLjMgMy4yLTEuOSA2LjYtMS45IDEwIDAgMTQuOCAxMiAyNi44IDI2LjggMjYuOCAzLjQgMCA2LjgtLjcgMTAtMS45bDk2LjMtMzguNWMxOC42IDUuNSAzOC40IDguNCA1OC45IDguNCAxMDYgMCAxOTItNzguOCAxOTItMTc2UzI5OC0zMiAxOTItMzIgMCA0Ni44IDAgMTQ0ek0zODQgNTEyYzIwLjYgMCA0MC4zLTMgNTguOS04LjRsOTYuMyAzOC41YzMuMiAxLjMgNi42IDEuOSAxMCAxLjkgMTQuOCAwIDI2LjgtMTIgMjYuOC0yNi44IDAtMy40LS43LTYuOC0xLjktMTBsLTI5LjctNzQuNGMyMC0yNy44IDMxLjctNjEuMSAzMS43LTk2LjggMC04Mi40LTYxLjctMTUxLjUtMTQ1LTE3MC43LTEuNiAxNi4zLTUuMSAzMS45LTEwLjEgNDYuOSA2My45IDE0LjggMTA3LjIgNjcuMyAxMDcuMiAxMjMuOSAwIDI1LjEtOC4xIDQ4LjctMjIuNiA2OC44LTkuNiAxMy4zLTExLjcgMzAuNi01LjYgNDUuOWwxMS40IDI4LjUtNTAuNC0yMC4yYy0xMC00LTIxLjEtNC41LTMxLjQtMS41LTE0LjIgNC4yLTI5LjQgNi41LTQ1LjMgNi41LTcyLjIgMC0xMjcuMS00NS43LTE0MC43LTEwMS4yLTE1LjYgMy4yLTMxLjcgNS00OC4xIDUuMiAxNi40IDgxLjkgOTQuNyAxNDQgMTg4LjggMTQ0eiJdfSxKZD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjaXJjbGUtY2hlY2siLGljb246WzUxMiw1MTIsWzYxNTMzLCJjaGVjay1jaXJjbGUiXSwiZjA1OCIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnptMC00NjRhMjA4IDIwOCAwIDEgMCAwIDQxNiAyMDggMjA4IDAgMSAwIDAtNDE2em03MC43IDEyMS45YzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuMyAxMC43IDcuOCAxMy4xIDIyLjggNS4zIDMzLjVMMjQzLjQgMzY2LjFjLTQuMSA1LjctMTAuNSA5LjMtMTcuNSA5LjgtNyAuNS0xMy45LTItMTguOC02LjlsLTU1LjktNTUuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDM2IDM2IDEwNS42LTE0NS4yeiJdfSxJOHQ9SmQsRjh0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6Im1vb24iLGljb246WzUxMiw1MTIsWzEyNzc2OSw5MjE0XSwiZjE4NiIsIk0yMzkuMyA0OC43Yy0xMDcuMSA4LjUtMTkxLjMgOTguMS0xOTEuMyAyMDcuMyAwIDExNC45IDkzLjEgMjA4IDIwOCAyMDggMzMuMyAwIDY0LjctNy44IDkyLjYtMjEuNy0xMDMuNC0yMy40LTE4MC42LTExNS44LTE4MC42LTIyNi4zIDAtNjUuOCAyNy40LTEyNS4xIDcxLjMtMTY3LjN6TTAgMjU2YzAtMTQxLjQgMTE0LjYtMjU2IDI1Ni0yNTYgMTkuNCAwIDM4LjQgMi4yIDU2LjcgNi4zIDkuOSAyLjIgMTcuMyAxMC41IDE4LjUgMjAuNXMtNCAxOS44LTEzLjEgMjQuNGMtNjAuNiAzMC4yLTEwMi4xIDkyLjctMTAyLjEgMTY0LjggMCAxMDEuNiA4Mi40IDE4NCAxODQgMTg0IDUgMCA5LjktLjIgMTQuOC0uNiAxMC4xLS44IDE5LjYgNC44IDIzLjggMTQuMXMyIDIwLjEtNS4zIDI3LjFDMzg3LjMgNDg0LjggMzI0LjggNTEyIDI1NiA1MTIgMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZ6Il19LE84dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjbG9zZWQtY2FwdGlvbmluZyIsaWNvbjpbNTEyLDUxMixbXSwiZjIwYSIsIk00NDggMTEyYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI1NmMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDM4NCAwek02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptODggMTQ0bDMyIDBjNC40IDAgOCAzLjYgOCA4IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTMyIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgODBjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzIgMGMzMC45IDAgNTYtMjUuMSA1Ni01NiAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTgwYzAtNC40IDMuNi04IDgtOHptMTY4IDhjMC00LjQgMy42LTggOC04bDMyIDBjNC40IDAgOCAzLjYgOCA4IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTMyIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgODBjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzIgMGMzMC45IDAgNTYtMjUuMSA1Ni01NiAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTgweiJdfSxCOHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaW1hZ2VzIixpY29uOls1NzYsNTEyLFtdLCJmMzAyIiwiTTQ4MCA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyNTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMjAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwzMjAgMHpNMTYwIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEwxNjAgMzJ6bTgwIDExMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0xNDAuNyAzLjhjLTQuMy03LjMtMTIuMi0xMS44LTIwLjctMTEuOHMtMTYuNCA0LjUtMjAuNyAxMS44bC00Ni41IDc5LTE3LjItMjQuNmMtNC41LTYuNC0xMS44LTEwLjItMTkuNy0xMC4ycy0xNS4yIDMuOC0xOS43IDEwLjJsLTU2IDgwYy01LjEgNy4zLTUuOCAxNi45LTEuNiAyNC44UzE5MS4xIDMyMCAyMDAgMzIwbDI0MCAwYzguNiAwIDE2LjYtNC42IDIwLjgtMTIuMXM0LjItMTYuNy0uMS0yNC4xbC04MC0xMzZ6TTQ4IDE1MmMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDEzOC43IDAgMTUyTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM2MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjk2eiJdfSxuYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2lyY2xlLXJpZ2h0IixpY29uOls1MTIsNTEyLFs2MTgzOCwiYXJyb3ctYWx0LWNpcmNsZS1yaWdodCJdLCJmMzVhIiwiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMSAtNDE2IDAgMjA4IDIwOCAwIDEgMSA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMCAyNTYgMjU2IDAgMSAwIC01MTIgMHptMzg3LjMgMTEuM2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtMTA0LTEwNGMtNC42LTQuNi0xMS41LTUuOS0xNy40LTMuNVMyNTYgMTQ1LjUgMjU2IDE1MmwwIDcyLTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDEwNCAwIDAgNzJjMCA2LjUgMy45IDEyLjMgOS45IDE0LjhzMTIuOSAxLjEgMTcuNC0zLjVsMTA0LTEwNHoiXX0sUjh0PW5hZSxsYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaWQtY2FyZCIsaWNvbjpbNTc2LDUxMixbNjIxNDcsImRyaXZlcnMtbGljZW5zZSJdLCJmMmMyIiwiTTQ4IDQxNmwwLTI1NiA0ODAgMCAwIDI1NmMwIDguOC03LjIgMTYtMTYgMTZsLTE5MiAwYzAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwYy00NC4yIDAtODAgMzUuOC04MCA4MGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMDggMzEyYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek0zNzYgMjA4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHoiXX0sSDh0PWxhZSxjYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2lyY2xlLXBsYXkiLGljb246WzUxMiw1MTIsWzYxNDY5LCJwbGF5LWNpcmNsZSJdLCJmMTQ0IiwiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjEyLjUgMTQ3LjVjLTcuNC00LjUtMTYuNy00LjctMjQuMy0uNVMxNzYgMTU5LjMgMTc2IDE2OGwwIDE3NmMwIDguNyA0LjcgMTYuNyAxMi4zIDIwLjlzMTYuOCA0LjEgMjQuMy0uNWwxNDQtODhjNy4xLTQuNCAxMS41LTEyLjEgMTEuNS0yMC41cy00LjQtMTYuMS0xMS41LTIwLjVsLTE0NC04OHpNMjk4IDI1NmwtNzQgNDUuMiAwLTkwLjQgNzQgNDUuMnoiXX0scTh0PWNhZSxkYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1sYXVnaC1iZWFtIixpY29uOls1MTIsNTEyLFsxMjg1MTMsImxhdWdoLWJlYW0iXSwiZjU5YSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTExOC4zIDU4LjJjLTQuMi0xMy43IDcuMS0yNi4yIDIxLjQtMjYuMmwyMzIuNiAwYzE0LjMgMCAyNS42IDEyLjUgMjEuNCAyNi4yLTE4IDU4LjktNzIuOSAxMDEuOC0xMzcuNyAxMDEuOFMxMzYuMyAzNzMuMSAxMTguMyAzMTQuMnpNMTc2IDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il19LFY4dD1kYWUsZmFlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImFkZHJlc3MtYm9vayIsaWNvbjpbNTEyLDUxMixbNjIxMzgsImNvbnRhY3QtYm9vayJdLCJmMmI5IiwiTTM4NCA0OGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzODRjMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDgwIDY0YzAtOC44IDcuMi0xNiAxNi0xNmwyODggMHpNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyODggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw5NiAwek0yNDAgMjQ4YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem0tMzIgNDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxOTIgMGM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDB6TTUxMiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHpNNDk2IDE5MmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnptMTYgMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0eiJdfSxVOHQ9ZmFlLHVhZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJob3VyZ2xhc3MiLGljb246WzM4NCw1MTIsWzkyMDMsNjIwMzIsImhvdXJnbGFzcy1lbXB0eSJdLCJmMjU0IiwiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhsOCAwIDAgMTljMCA0MC4zIDE2IDc5IDQ0LjUgMTA3LjVsODEuNSA4MS41LTgxLjUgODEuNUM0OCAzNjYgMzIgNDA0LjcgMzIgNDQ1bDAgMTktOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04IDAgMC0xOWMwLTQwLjMtMTYtNzktNDQuNS0xMDcuNWwtODEuNS04MS41IDgxLjUtODEuNUMzMzYgMTQ2IDM1MiAxMDcuMyAzNTIgNjdsMC0xOSA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzczLjMgMCAzNjAgMEwyNCAwek0xOTIgMjg5LjlsODEuNSA4MS41QzI5MyAzOTEgMzA0IDQxNy40IDMwNCA0NDVsMCAxOS0yMjQgMCAwLTE5YzAtMjcuNiAxMS01NCAzMC41LTczLjVMMTkyIDI4OS45em0wLTY3LjlsLTgxLjUtODEuNUM5MSAxMjEgODAgOTQuNiA4MCA2N2wwLTE5IDIyNCAwIDAgMTljMCAyNy42LTExIDU0LTMwLjUgNzMuNUwxOTIgMjIyLjF6Il19LGo4dD11YWUsU1Y9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaGVhZHBob25lcyIsaWNvbjpbNDQ4LDUxMixbMTI3OTExLDYyODYzLCJoZWFkcGhvbmVzLWFsdCIsImhlYWRwaG9uZXMtc2ltcGxlIl0sImYwMjUiLCJNNDggMjI0YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2czE3NiA3OC44IDE3NiAxNzZsMCA0NC44Yy0xNC4xLTguMi0zMC41LTEyLjgtNDgtMTIuOGwtMTYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxMjhjMCAyNi41IDIxLjUgNDggNDggNDhsMTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMTYwQzQ0OCAxMDAuMyAzNDcuNyAwIDIyNCAwUzAgMTAwLjMgMCAyMjRMMCAzODRjMCA1MyA0MyA5NiA5NiA5NmwxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTI4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0xNiAwYy0xNy41IDAtMzMuOSA0LjctNDggMTIuOEw0OCAyMjR6bTAgMTI4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2IDAgMCAxMjgtMTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zMnptMzUyIDBsMCAzMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYgMCAwLTEyOCAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4eiJdfSxXOHQ9U1YsRzh0PVNWLFk4dD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmaWxlLXBvd2VycG9pbnQiLGljb246WzM4NCw1MTIsW10sImYxYzQiLCJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHptODggMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEyOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgMjggMGMzNy42IDAgNjgtMzAuNCA2OC02OHMtMzAuNC02OC02OC02OGwtNTIgMHptNTIgODhsLTI4IDAgMC00MCAyOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMHoiXX0sWjh0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6IndpbmRvdy1tYXhpbWl6ZSIsaWNvbjpbNTEyLDUxMixbMTI4NDcwXSwiZjJkMCIsIk00OCAyMjRsMCAxNjBjMCA4LjggNy4yIDE2IDE2IDE2bDM4NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2MC00MTYgMHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHoiXX0scGFlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNvbW1lbnQtZG90cyIsaWNvbjpbNTEyLDUxMixbMTI4MTcyLDYyMDc1LCJjb21tZW50aW5nIl0sImY0YWQiLCJNMCAyNDBjMCA1NC40IDE5LjMgMTA0LjYgNTEuOSAxNDQuOUwzLjEgNDc0LjNjLTIgMy43LTMuMSA3LjktMy4xIDEyLjIgMCAxNC4xIDExLjQgMjUuNSAyNS41IDI1LjUgNCAwIDcuOC0uNiAxMS41LTIuMUwxNTMuNCA0NjBjMzEuNCAxMi45IDY2LjEgMjAgMTAyLjYgMjAgMTQxLjQgMCAyNTYtMTA3LjUgMjU2LTI0MFMzOTcuNCAwIDI1NiAwIDAgMTA3LjUgMCAyNDB6TTk0IDQwNy45YzkuMy0xNy4xIDcuNC0zOC4xLTQuOC01My4yLTI2LjEtMzIuMy00MS4yLTcxLjktNDEuMi0xMTQuNyAwLTEwMy4yIDkwLjItMTkyIDIwOC0xOTJzMjA4IDg4LjggMjA4IDE5Mi05MC4yIDE5Mi0yMDggMTkyYy0zMC4yIDAtNTguNy01LjktODQuMy0xNi40LTExLjktNC45LTI1LjMtNC44LTM3LjEgLjNMNzYgNDQwLjkgOTQgNDA3Ljl6TTE0NCAyNzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xNDQtMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptODAgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxYOHQ9cGFlLGhhZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWdyaW4tdG9uZ3VlLXdpbmsiLGljb246WzUxMiw1MTIsWzEyODU0MCwiZ3Jpbi10b25ndWUtd2luayJdLCJmNThiIiwiTTM2Ni45IDQzMmMuOC01LjIgMS4xLTEwLjYgMS4xLTE2bDAtNTMuNWMxMC4yLTEyLjYgMTguMy0yNi45IDIzLjgtNDIuNSA0LjEtMTEuNi03LjgtMjEuNC0xOS42LTE3LjgtMzQuOCAxMC42LTc0LjMgMTYuNi0xMTYuMyAxNi42LTQxLjkgMC04MS40LTYtMTE2LjEtMTYuNS0xMS44LTMuNi0yMy43IDYuMS0xOS42IDE3LjggNS41IDE1LjUgMTMuNiAyOS45IDIzLjggNDIuNGwwIDUzLjVjMCA1LjQgLjQgMTAuOCAxLjEgMTYtNTguNC0zNi44LTk3LjEtMTAxLjktOTcuMS0xNzYgMC0xMTQuOSA5My4xLTIwOCAyMDgtMjA4czIwOCA5My4xIDIwOCAyMDhjMCA3NC4xLTM4LjggMTM5LjItOTcuMSAxNzZ6bS0zOC44IDY5LjdDNDM0LjQgNDcwLjYgNTEyIDM3Mi4zIDUxMiAyNTYgNTEyIDExNC42IDM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NkMwIDM3Mi4zIDc3LjYgNDcwLjYgMTgzLjkgNTAxLjcgMjAzLjQgNTE4LjEgMjI4LjUgNTI4IDI1NiA1MjhzNTIuNi05LjkgNzIuMS0yNi4zek0zMjAgMzc4LjZsMCAzNy40YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0bDAtMzcuNGMwLTE0LjcgMTEuOS0yNi42IDI2LjYtMjYuNmwyIDBjMTEuMyAwIDIxLjEgNy45IDIzLjYgMTguOSAyLjggMTIuNiAyMC44IDEyLjYgMjMuNiAwIDIuNS0xMS4xIDEyLjMtMTguOSAyMy42LTE4LjlsMiAwYzE0LjcgMCAyNi42IDExLjkgMjYuNiAyNi42ek0xMzIgMjMyYzAtMTEgOS0yMCAyMC0yMGwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwem0yMjguNC0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0yODggMjA4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTEyOCAwYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHoiXX0sUTh0PWhhZSxtYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaG91cmdsYXNzLWhhbGYiLGljb246WzM4NCw1MTIsWyJob3VyZ2xhc3MtMiJdLCJmMjUyIiwiTTAgMjRDMCAxMC43IDEwLjcgMCAyNCAwTDM2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCAxOWMwIDQwLjMtMTYgNzktNDQuNSAxMDcuNWwtODEuNSA4MS41IDgxLjUgODEuNUMzMzYgMzY2IDM1MiA0MDQuNyAzNTIgNDQ1bDAgMTkgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC0xOWMwLTQwLjMgMTYtNzkgNDQuNS0xMDcuNWw4MS41LTgxLjUtODEuNS04MS41QzQ4IDE0NiAzMiAxMDcuMyAzMiA2N2wwLTE5LTggMEMxMC43IDQ4IDAgMzcuMyAwIDI0ek0xMTAuNSAzNzEuNWMtMy45IDMuOS03LjUgOC4xLTEwLjcgMTIuNWwxODQuNCAwYy0zLjItNC40LTYuOC04LjYtMTAuNy0xMi41bC04MS41LTgxLjUtODEuNSA4MS41ek04MC44IDQzMmMtLjUgNC4zLS44IDguNi0uOCAxM2wwIDE5IDIyNCAwIDAtMTljMC00LjQtLjMtOC43LS44LTEzTDgwLjggNDMyek0yNTQuMSAxNjBsLTEyNC4xIDAgNjIuMSA2Mi4xIDYyLjEtNjIuMXptMzkuNy00OEMzMDAuNCA5OC4xIDMwNCA4Mi43IDMwNCA2N2wwLTE5LTIyNCAwIDAgMTljMCAxNS43IDMuNiAzMS4xIDEwLjIgNDVsMjAzLjUgMHoiXX0sSzh0PW1hZSxnYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY3JlZGl0LWNhcmQiLGljb246WzUxMiw1MTIsWzEyODE3OSw2MjA4MywiY3JlZGl0LWNhcmQtYWx0Il0sImYwOWQiLCJNNDQ4IDExMmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMi00MTYgMCAwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzODQgMHptMTYgMTEybDAgMTYwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2MCA0MTYgMHpNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6TTgwIDM0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMTQ0IDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6Il19LEo4dD1nYWUsZWR0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhhbmQtc3BvY2siLGljb246WzUxMiw1MTIsWzEyODQwNl0sImYyNTkiLCJNMTM4LjMgODAuOGMtOS4yLTMzLjggMTAuNS02OC44IDQ0LjMtNzguNCAzNC05LjYgNjkuNCAxMC4yIDc5IDQ0LjJMMjkxLjkgMTUzLjcgMzA1LjEgODRjNi42LTM0LjcgNDAuMS01Ny41IDc0LjgtNTAuOSAzMS40IDYgNTMgMzMuOSA1MiA2NC45IDEwLTIuNiAyMC44LTIuOCAzMS41LS4xIDM0LjMgOC42IDU1LjEgNDMuMyA0Ni42IDc3LjZMNDU0LjcgMzk3LjJDNDM3LjggNDY0LjcgMzc3LjIgNTEyIDMwNy42IDUxMmwtMzMuNyAwYy01Ni45IDAtMTEyLjItMTktMTU3LjItNTMuOWwtOTItNzEuNmMtMjcuOS0yMS43LTMyLjktNjEuOS0xMS4yLTg5LjhzNjEuOS0zMi45IDg5LjgtMTEuMmwxNyAxMy4yLTUxLjgtMTMxLjJjLTEzLTMyLjkgMy4yLTcwLjEgMzYtODMgMTEuMS00LjQgMjIuNy01LjQgMzMuNy0zLjd6bTc3LjEtMjEuMmMtMi40LTguNS0xMS4yLTEzLjQtMTkuNy0xMXMtMTMuNCAxMS4yLTExIDE5LjdsNTQuOCAxODIuNGMzLjUgMTIuMy0zLjMgMjUuMi0xNS40IDI5LjNzLTI1LjMtMi0zMC0xMy45TDE0Mi45IDEzOC4xYy0zLjItOC4yLTEyLjUtMTIuMy0yMC44LTlzLTEyLjMgMTIuNS05IDIwLjhsNzMuMyAxODUuNmMxMiAzMC4zLTIzLjcgNTctNDkuNCAzN0w3My44IDMyMy40Yy03LTUuNC0xNy00LjItMjIuNSAyLjhzLTQuMiAxNyAyLjggMjIuNWw5MiA3MS42YzM2LjUgMjguNCA4MS40IDQzLjggMTI3LjcgNDMuOGwzMy43IDBjNDcuNSAwIDg5LTMyLjQgMTAwLjUtNzguNWw1NS40LTIyMS42YzIuMS04LjYtMy4xLTE3LjMtMTEuNi0xOS40cy0xNy4zIDMuMS0xOS40IDExLjZsLTI2IDEwNGMtMi45IDExLjctMTMuNCAxOS45LTI1LjUgMTkuOS0xNi41IDAtMjguOS0xNS0yNS44LTMxLjJMMzgzLjcgOTljMS43LTguNy00LTE3LjEtMTIuNy0xOC43UzM1NCA4NC4zIDM1Mi4zIDkzTDMyMC41IDI2MGMtMi4yIDExLjYtMTIuNCAyMC0yNC4yIDIwLTExIDAtMjAuNy03LjMtMjMuNy0xNy45TDIxNS40IDU5LjZ6Il19LHRkdD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJiZWxsLXNsYXNoIixpY29uOls1NzYsNTEyLFsxMjgyNzcsNjE5NDNdLCJmMWY2IiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTg3LjgtODcuOGMxNy41LTMuMyAzMC44LTE4LjcgMzAuOC0zNy4xIDAtNi43LTEuOC0xMy4zLTUuMS0xOUw0ODUgMzIxLjdjLTE5LTMyLjYtMjktNjkuNi0yOS0xMDcuM2wwLTE0LjVjMC04NC42LTYyLjYtMTU0LjctMTQ0LTE2Ni4zbDAtOS43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgOS43Yy00Mi4yIDYtNzkuNCAyNy44LTEwNS40IDU5LjFMNDEtMjQuOXpNMTkyLjggMTI2LjlDMjE0LjcgOTguNCAyNDkuMiA4MCAyODggODAgMzU0LjMgODAgNDA4IDEzMy43IDQwOCAyMDBsMCAxNC41YzAgNDYuMiAxMi4zIDkxLjUgMzUuNSAxMzEuNGwxMi45IDIyLjEtMjIuNiAwLTI0MS4xLTI0MS4xek0xMzIuNSAzNDUuOWMxOS41LTMzLjQgMzEuMy03MC43IDM0LjYtMTA5bC00Ni43LTQ2LjdjLS4yIDMuMy0uMyA2LjYtLjMgOS45bDAgMTQuNWMwIDM3LjctMTAgNzQuNy0yOSAxMDcuM0w2OS4xIDM1OS4yYy0zLjQgNS44LTUuMSAxMi4zLTUuMSAxOSAwIDIwLjkgMTYuOSAzNy44IDM3LjggMzcuOGwyNDQuNCAwLTQ4LTQ4LTE3OC42IDAgMTIuOS0yMi4xek0yMjAuMSA0NjRjOS45IDI4IDM2LjYgNDggNjcuOSA0OHM1OC0yMCA2Ny45LTQ4bC0xMzUuOCAweiJdfSxhZHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToic3RhciIsaWNvbjpbNTc2LDUxMixbMTEwODgsNjE0NDZdLCJmMDA1IiwiTTI4OC4xLTMyYzkgMCAxNy4zIDUuMSAyMS40IDEzLjFMMzgzIDEyNS4zIDU0Mi45IDE1MC43YzguOSAxLjQgMTYuMyA3LjcgMTkuMSAxNi4zcy41IDE4LTUuOCAyNC40TDQ0MS43IDMwNS45IDQ2NyA0NjUuOGMxLjQgOC45LTIuMyAxNy45LTkuNiAyMy4ycy0xNyA2LjEtMjUgMkwyODguMSA0MTcuNiAxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM2wxNTkuOS0yNS40IDczLjYtMTQ0LjJjNC4xLTggMTIuNC0xMy4xIDIxLjQtMTMuMXptMCA3Ni44TDIzMC4zIDE1OGMtMy41IDYuOC0xMCAxMS42LTE3LjYgMTIuOGwtMTI1LjUgMjAgODkuOCA4OS45YzUuNCA1LjQgNy45IDEzLjEgNi43IDIwLjdsLTE5LjggMTI1LjUgMTEzLjMtNTcuNmM2LjgtMy41IDE0LjktMy41IDIxLjggMGwxMTMuMyA1Ny42LTE5LjgtMTI1LjVjLTEuMi03LjYgMS4zLTE1LjMgNi43LTIwLjdsODkuOC04OS45LTEyNS41LTIwYy03LjYtMS4yLTE0LjEtNi0xNy42LTEyLjhMMjg4LjEgNDQuOHoiXX0scmR0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZsYWciLGljb246WzQ0OCw1MTIsWzEyNzk4OCw2MTcyNV0sImYwMjQiLCJNNDggMjRDNDggMTAuNyAzNy4zIDAgMjQgMFMwIDEwLjcgMCAyNEwwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTAwIDgwLjMtMjAuMWM0MS4xLTEwLjMgODQuNi01LjUgMTIyLjUgMTMuNCA0NC4yIDIyLjEgOTUuNSAyNC44IDE0MS43IDcuNGwzNC43LTEzYzEyLjUtNC43IDIwLjgtMTYuNiAyMC44LTMwbDAtMjc5LjdjMC0yMy0yNC4yLTM4LTQ0LjgtMjcuN2wtOS42IDQuOGMtNDYuMyAyMy4yLTEwMC44IDIzLjItMTQ3LjEgMC0zNS4xLTE3LjYtNzUuNC0yMi0xMTMuNS0xMi41TDQ4IDUyIDQ4IDI0em0wIDc3LjVsOTYuNi0yNC4yYzI3LTYuNyA1NS41LTMuNiA4MC40IDguOCA1NC45IDI3LjQgMTE4LjcgMjkuNyAxNzUgNi44bDAgMjQxLjgtMjQuNCA5LjFjLTMzLjcgMTIuNi03MS4yIDEwLjctMTAzLjQtNS40LTQ4LjItMjQuMS0xMDMuMy0zMC4xLTE1NS42LTE3LjFsLTY4LjYgMTcuMiAwLTIzN3oiXX0saWR0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImxlbW9uIixpY29uOls0NDgsNTEyLFsxMjc4MTldLCJmMDk0IiwiTTM2OCA4MGMtMy4yIDAtNi4yIC40LTguOSAxLjMtMTkuMSA1LjUtNDYuMSAxMC43LTc0LjMgMy4zLTU3LjQtMTQuOS0xMjQuNiA3LjQtMTc0LjcgNTcuNVMzNy43IDI1OS40IDUyLjYgMzE2LjhjNy4zIDI4LjIgMi4yIDU1LjItMy4zIDc0LjMtLjggMi44LTEuMyA1LjgtMS4zIDguOSAwIDE3LjcgMTQuMyAzMiAzMiAzMiAzLjIgMCA2LjItLjQgOC45LTEuMyAxOS4xLTUuNSA0Ni4xLTEwLjcgNzQuMy0zLjMgNTcuNCAxNC45IDEyNC42LTcuNCAxNzQuNy01Ny41czcyLjQtMTE3LjMgNTcuNS0xNzQuN2MtNy4zLTI4LjItMi4yLTU1LjIgMy4zLTc0LjMgLjgtMi44IDEuMy01LjggMS4zLTguOSAwLTE3LjctMTQuMy0zMi0zMi0zMnptMC00OGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDcuNy0xLjEgMTUuMi0zLjEgMjIuMy00LjYgMTUuOC03LjEgMzIuOS0zIDQ4LjkgMjAuMSA3Ny42LTEwLjkgMTYxLjUtNzAgMjIwLjdzLTE0My4xIDkwLjItMjIwLjcgNzBjLTE2LTQuMS0zMy0xLjYtNDguOSAzLTcuMSAyLTE0LjYgMy4xLTIyLjMgMy4xLTQ0LjIgMC04MC0zNS44LTgwLTgwIDAtNy43IDEuMS0xNS4yIDMuMS0yMi4zIDQuNi0xNS44IDcuMS0zMi45IDMtNDguOS0yMC4xLTc3LjYgMTAuOS0xNjEuNSA3MC0yMjAuN1MyMTkuMyAxOCAyOTYuOCAzOC4xYzE2IDQuMSAzMyAxLjYgNDguOS0zIDcuMS0yIDE0LjYtMy4xIDIyLjMtMy4xek0yNDYuNyAxNjdjLTUyIDE1LjItOTYuNSA1OS43LTExMS43IDExMS43LTMuNyAxMi43LTE3LjEgMjAtMjkuOCAxNi4zUzg1LjIgMjc4IDg5IDI2NS4zYzE5LjgtNjcuNyA3Ni42LTEyNC41IDE0NC4zLTE0NC4zIDEyLjctMy43IDI2LjEgMy42IDI5LjggMTYuM3MtMy42IDI2LjEtMTYuMyAyOS44eiJdfSxvZHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToid2luZG93LXJlc3RvcmUiLGljb246WzU3Niw1MTIsW10sImYyZDIiLCJNNTEyIDgwTDIyNCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTYtNDggMCAwLTE2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0bC00OCAwIDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xOTJjMC04LjgtNy4yLTE2LTE2LTE2ek0zNjggMjg4bC0zMjAgMCAwIDEyOGMwIDguOCA3LjIgMTYgMTYgMTZsMjg4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTI4ek02NCAxNjBsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NHoiXX0seGFlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi1oZWFydHMiLGljb246WzUxMiw1MTIsWzEyODUyNSwiZ3Jpbi1oZWFydHMiXSwiZjU4NCIsIk00NjQgMjU2YzAgMTE0LjktOTMuMSAyMDgtMjA4IDIwOFM0OCAzNzAuOSA0OCAyNTZjMC0zLjUgLjEtNy4xIC4zLTEwLjYtMTQtMTMuOS0yOS43LTMzLjEtMzkuMy01Ni43LTUuOCAyMS40LTguOSA0NC04LjkgNjcuMyAwIDE0MS40IDExNC42IDI1NiAyNTYgMjU2UzUxMiAzOTcuNCA1MTIgMjU2YzAtMjMuMy0zLjEtNDUuOS04LjktNjcuMy05LjYgMjMuNy0yNS40IDQyLjgtMzkuMyA1Ni43IC4yIDMuNSAuMyA3IC4zIDEwLjZ6TTM2OCA1OC45YzExLjctNiAyNC41LTkuNiAzNy43LTEwLjYtNDIuMS0zMC40LTkzLjgtNDguMy0xNDkuNy00OC4zUzE0OC40IDE3LjkgMTA2LjMgNDguM2MxMy4yIDEgMjYgNC42IDM3LjcgMTAuNiAxMy44LTcuMSAyOS4zLTEwLjkgNDUuMS0xMC45bDIuOSAwYzguOSAwIDE3LjYgMS4yIDI1LjggMy41IDEyLjQtMi4zIDI1LjItMy41IDM4LjItMy41czI1LjggMS4yIDM4LjIgMy41YzguMi0yLjMgMTYuOS0zLjUgMjUuOC0zLjVsMi45IDBjMTUuOCAwIDMxLjMgMy44IDQ1LjEgMTAuOXptNC4yIDI0My40Yy0zNC44IDEwLjYtNzQuMyAxNi42LTExNi4zIDE2LjYtNDEuOSAwLTgxLjQtNi0xMTYuMS0xNi41LTExLjgtMy42LTIzLjcgNi4xLTE5LjYgMTcuOCAxOS44IDU1LjkgNzMuMSA5NS45IDEzNS44IDk1LjkgNjIuNyAwIDExNi00MC4xIDEzNS44LTk2IDQuMS0xMS42LTcuOC0yMS40LTE5LjYtMTcuOHpNMzIyLjkgOTZMMzIwIDk2Yy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDUzLjQgNjYuOSA5NS43IDg5IDEwOC4yIDQuNCAyLjUgOS42IDIuNSAxNCAwIDIyLjEtMTIuNSA4OS01NC44IDg5LTEwOC4yIDAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yLjkgMGMtMTMuNSAwLTI2LjUgNS40LTM2IDE0LjlsLTkuMSA5LjEtOS4xLTkuMWMtOS41LTkuNS0yMi41LTE0LjktMzYtMTQuOXptLTE4OCAxNC45Yy05LjUtOS41LTIyLjUtMTQuOS0zNi0xNC45TDk2IDk2Yy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDUzLjQgNjYuOSA5NS43IDg5IDEwOC4yIDQuNCAyLjUgOS42IDIuNSAxNCAwIDIyLjEtMTIuNSA4OS01NC44IDg5LTEwOC4yIDAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yLjkgMGMtMTMuNSAwLTI2LjUgNS40LTM2IDE0LjlsLTkuMSA5LjEtOS4xLTkuMXoiXX0sc2R0PXhhZSxiYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1raXNzLWJlYW0iLGljb246WzUxMiw1MTIsWzEyODUzNywia2lzcy1iZWFtIl0sImY1OTciLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNDAgMTZsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptLTY0LTkyYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXX0sbmR0PWJhZSxsZHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmlsZS1wZGYiLGljb246WzU3Niw1MTIsW10sImYxYzEiLCJNMjA4IDQ4TDk2IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODRjMCA4LjggNy4yIDE2IDE2IDE2bDgwIDAgMCA0OC04MCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDIyOS41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzk3LjMgMTQxLjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM2wwIDE0OS41LTQ4IDAgMC0xMjgtODggMGMtMzkuOCAwLTcyLTMyLjItNzItNzJsMC04OHpNMzQ4LjEgMTYwTDI1NiA2Ny45IDI1NiAxMzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjguMSAwek0yNDAgMzgwbDMyIDBjMzMuMSAwIDYwIDI2LjkgNjAgNjBzLTI2LjkgNjAtNjAgNjBsLTEyIDAgMCAyOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0xMjhjMC0xMSA5LTIwIDIwLTIwem0zMiA4MGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTEyIDAgMCA0MCAxMiAwem05Ni04MGwzMiAwYzI4LjcgMCA1MiAyMy4zIDUyIDUybDAgNjRjMCAyOC43LTIzLjMgNTItNTIgNTJsLTMyIDBjLTExIDAtMjAtOS0yMC0yMGwwLTEyOGMwLTExIDktMjAgMjAtMjB6bTMyIDEyOGM2LjYgMCAxMi01LjQgMTItMTJsMC02NGMwLTYuNi01LjQtMTItMTItMTJsLTEyIDAgMCA4OCAxMiAwem03Ni0xMDhjMC0xMSA5LTIwIDIwLTIwbDQ4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC0yOCAwIDAgMjQgMjggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTI4IDAgMCA0NGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0xMjh6Il19LHZhZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWdyaW4td2lkZSIsaWNvbjpbNTEyLDUxMixbMTI4NTE1LCJncmluLWFsdCJdLCJmNTgxIiwiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzcyLjIgNDYuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnpNMjI0IDE5MmMwIDM1LjMtMTQuMyA2NC0zMiA2NHMtMzItMjguNy0zMi02NCAxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjR6bTk2IDY0Yy0xNy43IDAtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjQtMTQuMyA2NC0zMiA2NHoiXX0sY2R0PXZhZSx5YWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1sYXVnaC1zcXVpbnQiLGljb246WzUxMiw1MTIsWyJsYXVnaC1zcXVpbnQiXSwiZjU5YiIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTEyNS4yIDc2LjRjLTYuNS0xNCA1LTI4LjQgMjAuNC0yOC40bDIyMC44IDBjMTUuNCAwIDI2LjggMTQuNCAyMC40IDI4LjQtMjIuOCA0OS40LTcyLjggODMuNi0xMzAuOCA4My42cy0xMDcuOS0zNC4yLTEzMC44LTgzLjZ6bS0yLjYtMTczLjJjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXX0sZGR0PXlhZSx3YWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1raXNzLXdpbmstaGVhcnQiLGljb246WzY0MCw1MTIsWzEyODUzNiwia2lzcy13aW5rLWhlYXJ0Il0sImY1OTgiLCJNMzg2IDQzOS41Yy0yOS4yIDE1LjYtNjIuNSAyNC41LTk4IDI0LjUtMTE0LjkgMC0yMDgtOTMuMS0yMDgtMjA4UzE3My4yIDQ4IDI4OCA0OGMxMTMuMiAwIDIwNS4yIDkwLjQgMjA3LjkgMjAyLjkgMTQuMyAxLjUgMjguNiA2IDQxLjkgMTMuNyAyIDEuMiA0IDIuNCA1LjkgMy43IC4yLTQuMSAuMy04LjIgLjMtMTIuMyAwLTE0MS40LTExNC42LTI1Ni0yNTYtMjU2UzMyIDExNC42IDMyIDI1NiAxNDYuNiA1MTIgMjg4IDUxMmM0MS40IDAgODAuNS05LjggMTE1LjEtMjcuMy01LjgtMTIuOS0xMi0yOC41LTE3LjItNDUuMnpNMjU2IDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDMyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC0xMi4zLTQuNi0yMy41LTEyLjItMzIgNy42LTguNSAxMi4yLTE5LjcgMTIuMi0zMiAwLTI2LjUtMjEuNS00OC00OC00OGwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0tNDgtNDhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xNTItNDRsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMCA5LTIwIDIwLTIwek01NDIuOCAzNTBjLTIuMi0xOC4zLTEyLjktMzQuNi0yOC45LTQzLjgtMjguMS0xNi4yLTYzLjktNi42LTgwLjEgMjEuNWwtMi43IDQuNmMtMjQuNSA0Mi41IDcuOSAxMTcuOSAyNC40IDE1MC44IDUuMSAxMC4xIDE1LjUgMTYuMSAyNi44IDE1LjUgMzYuNy0yLjIgMTE4LjItMTEuNyAxNDIuOC01NC4ybDIuNy00LjZjMTYuMi0yOC4xIDYuNi02My45LTIxLjUtODAuMS0xNi05LjItMzUuNC0xMC40LTUyLjQtMy4xbC05LjggNC4yLTEuMy0xMC42eiJdfSxmZHQ9d2FlLExWPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNvcHkiLGljb246WzQ0OCw1MTIsW10sImYwYzUiLCJNMzg0IDMzNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsMTMzLjUgMGM0LjIgMCA4LjMgMS43IDExLjMgNC43bDU4LjUgNTguNWMzIDMgNC43IDcuMSA0LjcgMTEuM0w0MDAgMzIwYzAgOC44LTcuMiAxNi0xNiAxNnpNMTkyIDM4NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDM3MC43IDE4LjdDMzU4LjcgNi43IDM0Mi41IDAgMzI1LjUgMEwxOTIgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjR6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNi00OCAwIDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwIDAtNDgtMTYgMHoiXX0sdWR0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNoZXNzLWtpbmciLGljb246WzQ0OCw1MTIsWzk4MThdLCJmNDNmIiwiTTIyNC0zMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDAgMCA4MCAxNjEuOCAwYzIxLjEgMCAzOC4yIDE3LjEgMzguMiAzOC4yIDAgNi40LTEuNiAxMi43LTQuNyAxOC4zTDM1Ny4yIDM3NC41IDQwNS42IDQzNWM2LjcgOC40IDEwLjQgMTguOCAxMC40IDI5LjYgMCAyNi4yLTIxLjIgNDcuNC00Ny40IDQ3LjRMNzkuNCA1MTJjLTI2LjIgMC00Ny40LTIxLjItNDcuNC00Ny40IDAtMTAuOCAzLjctMjEuMiAxMC40LTI5LjZMOTAuOCAzNzQuNSA0LjcgMjE2LjZDMS42IDIxMC45IDAgMjA0LjYgMCAxOTguMiAwIDE3Ny4xIDE3LjEgMTYwIDM4LjIgMTYwbDE2MS44IDAgMC04MC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMTMxLjggNDAwbC0zLjYgNC40LTQ3LjYgNTkuNiAyODYuNiAwLTQ3LjYtNTkuNi0zLjYtNC40LTE4NC4zIDB6bTEuMS00OC41bC4zIC41IDE4MS42IDAgLjMtLjUgNzguMy0xNDMuNS0zMzguNyAwIDc4LjMgMTQzLjV6Il19LE1hZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJzcXVhcmUtcGx1cyIsaWNvbjpbNDQ4LDUxMixbNjE4NDYsInBsdXMtc3F1YXJlIl0sImYwZmUiLCJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTIwMCAzNDRsMC02NC02NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDY0IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNjQgNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNjQgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0eiJdfSxwZHQ9TWFlLGhkdD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmaWxlLWNvZGUiLGljb246WzM4NCw1MTIsW10sImYxYzkiLCJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHpNMTcwLjIgMjk1LjZjOC42LTEwLjEgNy41LTI1LjItMi42LTMzLjhzLTI1LjItNy41LTMzLjggMi42bC00OCA1NmMtNy43IDktNy43IDIyLjIgMCAzMS4ybDQ4IDU2YzguNiAxMC4xIDIzLjggMTEuMiAzMy44IDIuNnMxMS4yLTIzLjggMi42LTMzLjhsLTM0LjYtNDAuNCAzNC42LTQwLjR6bTgwLTMxLjJjLTguNi0xMC4xLTIzLjgtMTEuMi0zMy44LTIuNnMtMTEuMiAyMy44LTIuNiAzMy44bDM0LjYgNDAuNC0zNC42IDQwLjRjLTguNiAxMC4xLTcuNSAyNS4yIDIuNiAzMy44czI1LjIgNy41IDMzLjgtMi42bDQ4LTU2YzcuNy05IDcuNy0yMi4yIDAtMzEuMmwtNDgtNTZ6Il19LHphZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWdyaW4td2luayIsaWNvbjpbNTEyLDUxMixbImdyaW4td2luayJdLCJmNThjIiwiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzcyLjIgNDYuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjQgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIweiJdfSxtZHQ9emFlLGthZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJtb25leS1iaWxsLTEiLGljb246WzUxMiw1MTIsWyJtb25leS1iaWxsLWFsdCJdLCJmM2QxIiwiTTExMiAxMTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRsMCAxNjBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMjg4IDBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMC0xNjBjLTM1LjMgMC02NC0yOC43LTY0LTY0bC0yODggMHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMjU2IDE2YTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHptLTE2IDQ0Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGw0OCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNCAwIDAtNjhjMC0xMS05LTIwLTIwLTIwbC0xNiAweiJdfSxnZHQ9a2FlLHhkdD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJleWUtc2xhc2giLGljb246WzU3Niw1MTIsW10sImYwNzAiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTYuNC05Ni40YzIuNy0yLjQgNS40LTQuOCA4LTcuMiA0Ni44LTQzLjUgNzguMS05NS40IDkzLTEzMS4xIDMuMy03LjkgMy4zLTE2LjcgMC0yNC42LTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjEtNDcuMS00My43LTExMS44LTgwLjYtMTkyLjYtODAuNi01Ni44IDAtMTA1LjYgMTguMi0xNDYgNDQuMkw0MS0yNC45ek0xNzYuOSAxMTEuMWMzMi4xLTE4LjkgNjkuMi0zMS4xIDExMS4xLTMxLjEgNjUuMiAwIDExOC44IDI5LjYgMTU5LjkgNjcuNyAzOC41IDM1LjcgNjUuMSA3OC4zIDc4LjYgMTA4LjMtMTMuNiAzMC00MC4yIDcyLjUtNzguNiAxMDguMy0zLjEgMi44LTYuMiA1LjYtOS40IDguNEwzOTMuOCAzMjhjMTQtMjAuNSAyMi4yLTQ1LjMgMjIuMi03MiAwLTcwLjctNTcuMy0xMjgtMTI4LTEyOC0yNi43IDAtNTEuNSA4LjItNzIgMjIuMmwtMzkuMS0zOS4xem0xODIgMTgybC0xMDgtMTA4YzExLjEtNS44IDIzLjctOS4xIDM3LjEtOS4xIDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgMTMuNC0zLjMgMjYtOS4xIDM3LjF6TTEwMy40IDE3My4ybC0zNC0zNGMtMzIuNiAzNi44LTU1IDc1LjgtNjYuOSAxMDQuNS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjYgMzcuMyAwIDcxLjItNy45IDEwMS41LTIwLjZMMzUyLjIgNDIyYy0yMCA2LjQtNDEuNCAxMC02NC4yIDEwLTY1LjIgMC0xMTguOC0yOS42LTE1OS45LTY3LjctMzguNS0zNS43LTY1LjEtNzguMy03OC42LTEwOC4zIDEwLjQtMjMuMSAyOC42LTUzLjYgNTQtODIuOHoiXX0sYmR0PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZpbGUtd29yZCIsaWNvbjpbMzg0LDUxMixbXSwiZjFjMiIsIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwem03MS4zIDI3NC4yYy0zLjItMTIuOS0xNi4yLTIwLjctMjkuMS0xNy41Uzg1LjUgMjczIDg4LjcgMjg1LjhsMzIgMTI4YzIuNSAxMC4yIDExLjQgMTcuNSAyMS45IDE4LjFzMjAuMS01LjcgMjMuOC0xNS41bDI1LjUtNjguMSAyNS41IDY4LjFjMy43IDkuOCAxMy4zIDE2LjEgMjMuOCAxNS41czE5LjQtNy45IDIxLjktMTguMWwzMi0xMjhjMy4yLTEyLjktNC42LTI1LjktMTcuNS0yOS4xcy0yNS45IDQuNi0yOS4xIDE3LjVsLTEzLjMgNTMuMi0yMC45LTU1LjhDMjExIDI2Mi4yIDIwMiAyNTYgMTkyIDI1NnMtMTkgNi4yLTIyLjUgMTUuNmwtMjAuOSA1NS44LTEzLjMtNTMuMnoiXX0sU2FlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtYW5ncnkiLGljb246WzUxMiw1MTIsWzEyODU0NCwiYW5ncnkiXSwiZjU1NiIsIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtMTQ0YzI0LjEgMCA0NS40IDExLjggNTguNSAzMCA3LjcgMTAuOCAyMi43IDEzLjIgMzMuNSA1LjVzMTMuMi0yMi43IDUuNS0zMy41Yy0yMS43LTMwLjItNTcuMy01MC05Ny41LTUwcy03NS43IDE5LjgtOTcuNSA1MGMtNy43IDEwLjgtNS4zIDI1LjggNS41IDMzLjVzMjUuOCA1LjMgMzMuNS01LjVjMTMuMS0xOC4yIDM0LjQtMzAgNTguNS0zMHptLTgwLTk2YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtLjMgOS43IDMuMmMxMC41IDMuNSAyMS44LTIuMiAyNS4zLTEyLjZzLTIuMi0yMS44LTEyLjYtMjUuM2wtOTYtMzJjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNsMjguOSA5LjZjLTQuMSA1LjQtNi42IDEyLjEtNi42IDE5LjQgMCAxNy43IDE0LjMgMzIgMzIgMzJ6bTE5Mi0zMmMwLTcuMy0yLjQtMTQtNi42LTE5LjRsMjguOS05LjZjMTAuNS0zLjUgMTYuMS0xNC44IDEyLjYtMjUuM3MtMTQuOC0xNi4xLTI1LjMtMTIuNmwtOTYgMzJjLTEwLjUgMy41LTE2LjEgMTQuOC0xMi42IDI1LjNzMTQuOCAxNi4xIDI1LjMgMTIuNmw5LjctMy4yIDAgLjNjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnoiXX0sdmR0PVNhZSx5ZHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2hlc3Mta25pZ2h0IixpY29uOls0NDgsNTEyLFs5ODIyXSwiZjQ0MSIsIk0yMzItMzJjMTEwLjUgMCAyMDAgODkuNSAyMDAgMjAwbDAgMTI3LjdjMCAxOC45LTYuMSAzNy4xLTE3LjIgNTIuMmwtNS4xIDYuMi0zNi4zIDQwLjcgMzIuMSA0MC4yYzYuNyA4LjQgMTAuNCAxOC44IDEwLjQgMjkuNmwtLjIgNC44Yy0yLjQgMjMuOS0yMi42IDQyLjUtNDcuMSA0Mi41bC0yODkuMiAwLTQuOC0uMmMtMjMuOS0yLjQtNDIuNS0yMi42LTQyLjUtNDcuMSAwLTEwLjggMy43LTIxLjIgMTAuNC0yOS42bDM3LjYtNDcgMC0yNC4zYzAtMjQuMyAxMC4xLTQ3LjYgMjcuOC02NC4ybDYzLjUtNTkuNS0xNy40IDAtLjIgLjJjLTIwLjMgMjAuMy00OS42IDI4LjItNzcuMSAyMS4xbC01LjUtMS42Yy0zMC45LTEwLjMtNTIuMy0zOC01NC45LTcwLjFsLS4yLTYuNCAwLTEuNGMwLTE5LjcgNy4xLTM4LjggMTkuOS01My44bDc2LjEtODguOCAwLTQ3LjEgLjEtMi41QzExMy40LTIyLjYgMTIzLjYtMzIgMTM2LTMybDk2IDB6TTgwLjcgNDY0bDI4Ni42IDAtMzguNC00OC0yMDkuOSAwLTM4LjQgNDh6TTE2MCA0OGMwIDUuNy0yLjEgMTEuMy01LjggMTUuNkw3Mi4zIDE1OS4xQzY3IDE2NS40IDY0IDE3My40IDY0IDE4MS43bDAgMS40IC40IDUuMmMxLjkgMTEuOSAxMC4zIDIxLjkgMjEuOSAyNS44bDQuNSAxLjFjMTAuNSAxLjkgMjEuMy0xLjQgMjktOWw3LjItNy4yIDMuNy0zYzMuOS0yLjYgOC41LTQgMTMuMy00bDg4IDBjOS44IDAgMTguNyA2IDIyLjMgMTUuMnMxLjMgMTkuNi01LjkgMjYuM2wtMTA3LjggMTAxYy04LjEgNy42LTEyLjcgMTguMS0xMi43IDI5LjJsMCA0LjMgMjA1LjIgMCA0MC43LTQ1LjggMi4zLTIuOGM1LjEtNi44IDcuOC0xNS4yIDcuOC0yMy43TDM4NCAxNjhjMC04My45LTY4LjEtMTUyLTE1Mi0xNTJsLTcyIDAgMCAzMnptMzIgNzJhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4eiJdfSxDYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1ncmluLWJlYW0iLGljb246WzUxMiw1MTIsWzEyODUxNiwiZ3Jpbi1iZWFtIl0sImY1ODIiLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zNzIuMiA0Ni4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42ek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXX0sd2R0PUNhZSxNZHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaGFuZC1wZWFjZSIsaWNvbjpbNDQ4LDUxMixbOTk5Nl0sImYyNWIiLCJNMjE5IDEuNGMtMzUuMi0zLjctNjYuNiAyMS44LTcwLjMgNTdsLTYuNCA2MC42LTE3LjQtNDkuNEMxMTMuMiAzNi4zIDc2LjYgMTguOCA0My4zIDMwLjVTLTcuNiA3OC44IDQuMSAxMTIuMUw1Ni45IDI2Mi4yQzQxLjcgMjc2LjcgMzIuMiAyOTcuMyAzMi4yIDMyMGwwIDI0YzAgOTIuOCA3NS4yIDE2OCAxNjggMTY4bDQ4IDBjOTIuOCAwIDE2OC03NS4yIDE2OC0xNjhsMC0xMjBjMC0zNS4zLTI4LjctNjQtNjQtNjQtNy45IDAtMTUuNCAxLjQtMjIuNCA0LTEwLjQtMjEuMy0zMi4zLTM2LTU3LjYtMzYtLjcgMC0xLjUgMC0yLjIgMGw1LjktNTYuM2MzLjctMzUuMi0yMS44LTY2LjYtNTctNzAuM3ptLS4yIDE1NS40Yy02LjYgMTAuMS0xMC41IDIyLjItMTAuNSAzNS4ybDAgNDhjMCAuNyAwIDEuNCAwIDItNS4xLTEuMy0xMC41LTItMTYtMmwtNy40IDAtNS40LTE1LjMgMTctMTYxLjNjLjktOC44IDguOC0xNS4yIDE3LjYtMTQuMnMxNS4yIDguOCAxNC4yIDE3LjZsLTkuNSA5MC4xek03OS42IDg1LjZsNTQuMyAxNTQuNC0yMS43IDBjLTQgMC04IC4zLTExLjkgLjlMNDkuNCA5Ni4yYy0yLjktOC4zIDEuNS0xNy41IDkuOC0yMC40czE3LjUgMS41IDIwLjQgOS44ek0yNTYuMiAxOTJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDh6bTM4LjQgMTA4YzEwLjQgMjEuMyAzMi4zIDM2IDU3LjYgMzYgNS41IDAgMTAuOS0uNyAxNi0ybDAgMTBjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBsLTQ4IDBjLTY2LjMgMC0xMjAtNTMuNy0xMjAtMTIwbDAtMjRjMC0xNy43IDE0LjMtMzIgMzItMzJsODAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0IDAtLjcgMC0xLjQgMC0yIDUuMSAxLjMgMTAuNSAyIDE2IDIgNy45IDAgMTUuNC0xLjQgMjIuNC00em03My42LTI4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4eiJdfSx6ZHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY29tcGFzcyIsaWNvbjpbNTEyLDUxMixbMTI5NTE3XSwiZjE0ZSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTMwNi43IDY5LjFMMTYyLjQgMzgwLjZjLTE5LjQgNy41LTM4LjUtMTEuNi0zMS0zMWw1NS41LTE0NC4zYzMuMy04LjUgOS45LTE1LjEgMTguNC0xOC40bDE0NC4zLTU1LjVjMTkuNC03LjUgMzguNSAxMS42IDMxIDMxTDMyNS4xIDMwNi43Yy0zLjMgOC41LTkuOSAxNS4xLTE4LjQgMTguNHpNMjg4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdfSxrZHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToic3F1YXJlIixpY29uOls0NDgsNTEyLFs5NjMyLDk3MjMsOTcyNCw2MTU5MF0sImYwYzgiLCJNMzg0IDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyMGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZMNDggOTZjMC04LjggNy4yLTE2IDE2LTE2bDMyMCAwek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdfSxMYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1ncmluIixpY29uOls1MTIsNTEyLFsxMjg1MTIsImdyaW4iXSwiZjU4MCIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sU2R0PUxhZSxUYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1zbWlsZSIsaWNvbjpbNTEyLDUxMixbMTI4NTc4LCJzbWlsZSJdLCJmMTE4IiwiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc3LjMgNjMuNEMxOTIuMyAzMzUgMjE4LjQgMzUyIDI1NiAzNTJzNjMuNy0xNyA3OC43LTMyLjZjOS4yLTkuNiAyNC40LTkuOSAzMy45LS43czkuOSAyNC40IC43IDMzLjljLTIyLjEgMjMtNjAgNDcuNC0xMTMuMyA0Ny40cy05MS4yLTI0LjQtMTEzLjMtNDcuNGMtOS4yLTkuNi04LjktMjQuOCAuNy0zMy45czI0LjgtOC45IDMzLjkgLjd6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sQ2R0PVRhZSxfYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1zbWlsZS1iZWFtIixpY29uOls1MTIsNTEyLFsxMjg1MjIsInNtaWxlLWJlYW0iXSwiZjViOCIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ny4zIDYzLjRDMTkyLjMgMzM1IDIxOC40IDM1MiAyNTYgMzUyczYzLjctMTcgNzguNy0zMi42YzkuMi05LjYgMjQuNC05LjkgMzMuOS0uN3M5LjkgMjQuNCAuNyAzMy45Yy0yMi4xIDIzLTYwIDQ3LjQtMTEzLjMgNDcuNHMtOTEuMi0yNC40LTExMy4zLTQ3LjRjLTkuMi05LjYtOC45LTI0LjggLjctMzMuOXMyNC44LTguOSAzMy45IC43ek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXX0sTGR0PV9hZSxUZHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZm9sZGVyLWNsb3NlZCIsaWNvbjpbNTEyLDUxMixbXSwiZTE4NSIsIk00NDggNDAwTDY0IDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTQ0IDQxNiAwIDAgMTQ0YzAgOC44LTcuMiAxNi0xNiAxNnptMTYtMjA4bC00MTYgMCAwLTk2YzAtOC44IDcuMi0xNiAxNi0xNmwxMzguNyAwYzMuNSAwIDYuOCAxLjEgOS42IDMuMkwyNTAuNyAxMTJjMTMuOCAxMC40IDMwLjcgMTYgNDggMTZMNDQ4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OHpNNjQgNDQ4bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjQwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDI5OC43IDgwYy02LjkgMC0xMy43LTIuMi0xOS4yLTYuNEwyNDEuMSA0NC44QzIzMCAzNi41IDIxNi41IDMyIDIwMi43IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjR6Il19LF9kdD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJrZXlib2FyZCIsaWNvbjpbNTc2LDUxMixbOWUzXSwiZjExYyIsIk02NCAxMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI1NmMwIDguOCA3LjIgMTYgMTYgMTZsNDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjU2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCAxMTJ6TTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6TTE3NiAzMjBsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0yMjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2em0tNzItNzJjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNnptMTYtOTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptNjQgOTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNnptMTYtOTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptNjQgOTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNnptMTYtOTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptNjQgOTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNnptMTYtOTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptNjQgOTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNnptMTYtOTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnoiXX0sQWFlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2Utcm9sbGluZy1leWVzIixpY29uOls1MTIsNTEyLFsxMjg1ODAsIm1laC1yb2xsaW5nLWV5ZXMiXSwiZjVhNSIsIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3NiAzNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMTYwIDI2NGMtMjIuMSAwLTQwLTE3LjktNDAtNDAgMC05LjUgMy4zLTE4LjEgOC44LTI1IDMuMiAxNC4zIDE2IDI1IDMxLjIgMjVzMjgtMTAuNyAzMS4yLTI1YzUuNSA2LjggOC44IDE1LjUgOC44IDI1IDAgMjIuMS0xNy45IDQwLTQwIDQwem0wIDQwYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0xOTItNDBjLTIyLjEgMC00MC0xNy45LTQwLTQwIDAtOS41IDMuMy0xOC4xIDguOC0yNSAzLjIgMTQuMyAxNiAyNSAzMS4yIDI1czI4LTEwLjcgMzEuMi0yNWM1LjUgNi44IDguOCAxNS41IDguOCAyNSAwIDIyLjEtMTcuOSA0MC00MCA0MHptMCA0MGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHoiXX0sQWR0PUFhZSwkYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1ncmltYWNlIixpY29uOls1MTIsNTEyLFsxMjg1NTYsImdyaW1hY2UiXSwiZjU3ZiIsIk0yNTYgNDhhMjA4IDIwOCAwIDEgMCAwIDQxNiAyMDggMjA4IDAgMSAwIDAtNDE2ek01MTIgMjU2YTI1NiAyNTYgMCAxIDEgLTUxMiAwIDI1NiAyNTYgMCAxIDEgNTEyIDB6TTE1MiAzNTJjMCAxMS45IDguNiAyMS44IDIwIDIzLjdsMC00Ny4zYy0xMS40IDEuOS0yMCAxMS44LTIwIDIzLjd6bTg0IDI0bDAtNDgtMjQgMCAwIDQ4IDI0IDB6bTY0IDBsMC00OC0yNCAwIDAgNDggMjQgMHptNDAtLjNjMTEuNC0xLjkgMjAtMTEuOCAyMC0yMy43cy04LjYtMjEuOC0yMC0yMy43bDAgNDcuM3pNMTc2IDI4OGwxNjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtMTYwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjR6bTAtMTEyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LCRkdD0kYWUsRGFlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZS1kb3QiLGljb246WzUxMiw1MTIsWzEyODI4MCwiZG90LWNpcmNsZSJdLCJmMTkyIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyem0wLTQ2NGEyMDggMjA4IDAgMSAwIDAgNDE2IDIwOCAyMDggMCAxIDAgMC00MTZ6bTAgMzA0YTk2IDk2IDAgMSAxIDAtMTkyIDk2IDk2IDAgMSAxIDAgMTkyeiJdfSxEZHQ9RGFlLEVkdD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJvYmplY3QtZ3JvdXAiLGljb246WzU3Niw1MTIsW10sImYyNDciLCJNNDAgNjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptNDggNTkuM2MxNi02LjUgMjguOS0xOS4zIDM1LjMtMzUuM2wzMjkuMyAwYzYuNSAxNiAxOS4zIDI4LjkgMzUuMyAzNS4zbDAgMjY1LjNjLTE2IDYuNS0yOC45IDE5LjMtMzUuMyAzNS4zbC0zMjkuMyAwYy02LjUtMTYtMTkuMy0yOC45LTM1LjMtMzUuM2wwLTI2NS4zek01MTIgMGMtMjYuOSAwLTQ5LjkgMTYuNS01OS4zIDQwTDEyMy4zIDQwQzExMy45IDE2LjUgOTAuOSAwIDY0IDAgMjguNyAwIDAgMjguNyAwIDY0IDAgOTAuOSAxNi41IDExMy45IDQwIDEyMy4zbDAgMjY1LjNjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NCAyNi45IDAgNDkuOS0xNi41IDU5LjMtNDBsMzI5LjMgMGM5LjUgMjMuNSAzMi41IDQwIDU5LjMgNDAgMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjY1LjNjMjMuNS05LjUgNDAtMzIuNSA0MC01OS4zIDAtMzUuMy0yOC43LTY0LTY0LTY0ek00ODggNjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNjQgNDI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDI0IDI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTE5MiAxNzZsODggMCAwIDU2LTg4IDAgMC01NnptLTgtNDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTA0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC03MmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTA0IDB6bTcyIDE4NGwwIDI0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTI0IDBjMCAxNC42LTMuOSAyOC4yLTEwLjcgNDBsMjYuNyAwIDAgNTYtODggMCAwLTE2LjRjLTIuNiAuMy01LjMgLjQtOCAuNGwtMzIgMHoiXX0sRWFlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZmx1c2hlZCIsaWNvbjpbNTEyLDUxMixbMTI4NTYzLCJmbHVzaGVkIl0sImY1NzkiLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAxIC00MTYgMCAyMDggMjA4IDAgMSAxIDQxNiAwek0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTE2MCAyNDhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yMTYtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMTkyIDM1MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMjggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTI4IDB6TTE2MCAxNzZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0wIDEyOGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTQ0LTgwYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTEyOCAwYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHoiXX0sTmR0PUVhZSxOYWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToic3Rhci1oYWxmLXN0cm9rZSIsaWNvbjpbNTc2LDUxMixbInN0YXItaGFsZi1hbHQiXSwiZjVjMCIsIk0zMDkuNS0xOC45Yy00LjEtOC0xMi40LTEzLjEtMjEuNC0xMy4xcy0xNy4zIDUuMS0yMS40IDEzLjFMMTkzLjEgMTI1LjMgMzMuMiAxNTAuN2MtOC45IDEuNC0xNi4zIDcuNy0xOS4xIDE2LjNzLS41IDE4IDUuOCAyNC40bDExNC40IDExNC41LTI1LjIgMTU5LjljLTEuNCA4LjkgMi4zIDE3LjkgOS42IDIzLjJzMTYuOSA2LjEgMjUgMkwyODguMSA0MTcuNiA0MzIuNCA0OTFjOCA0LjEgMTcuNyAzLjMgMjUtMnMxMS0xNC4yIDkuNi0yMy4yTDQ0MS43IDMwNS45IDU1Ni4xIDE5MS40YzYuNC02LjQgOC42LTE1LjggNS44LTI0LjRzLTEwLjEtMTQuOS0xOS4xLTE2LjNMMzgzIDEyNS4zIDMwOS41LTE4Ljl6TTI2NC4xIDkxLjhsMCAyODQuMS0xMDAuMSA1MC45IDE5LjgtMTI1LjVjMS4yLTcuNi0xLjMtMTUuMy02LjctMjAuN2wtODkuOC04OS45IDEyNS41LTIwYzcuNi0xLjIgMTQuMS02IDE3LjYtMTIuOGwzMy44LTY2LjJ6bTQ4IDI4NC4xbDAtMjg0LjEgMzMuOCA2Ni4yYzMuNSA2LjggMTAgMTEuNiAxNy42IDEyLjhsMTI1LjUgMjAtODkuOCA4OS45Yy01LjQgNS40LTcuOSAxMy4xLTYuNyAyMC43bDE5LjggMTI1LjUtMTAwLjEtNTAuOXoiXX0sUGR0PU5hZSxJZHQ9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmlsZS12aWRlbyIsaWNvbjpbMzg0LDUxMixbXSwiZjFjOCIsIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek04MCAyODhsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjQgMzUgMzVjMy4yIDMuMiA3LjUgNSAxMiA1IDkuNCAwIDE3LTcuNiAxNy0xN2wwLTk0LjFjMC05LjQtNy42LTE3LTE3LTE3LTQuNSAwLTguOCAxLjgtMTIgNWwtMzUgMzUgMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il19LFBhZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWxhdWdoIixpY29uOls1MTIsNTEyLFsibGF1Z2giXSwiZjU5OSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTExOC4zIDU4LjJjLTQuMi0xMy43IDcuMS0yNi4yIDIxLjQtMjYuMmwyMzIuNiAwYzE0LjMgMCAyNS42IDEyLjUgMjEuNCAyNi4yLTE4IDU4LjktNzIuOSAxMDEuOC0xMzcuNyAxMDEuOFMxMzYuMyAzNzMuMSAxMTguMyAzMTQuMnpNMTQ0IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxGZHQ9UGFlLE9kdD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJoYW5kLXBvaW50ZXIiLGljb246WzQ0OCw1MTIsW10sImYyNWEiLCJNMTYwIDY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxMzZjMCAxMC4zIDYuNiAxOS41IDE2LjQgMjIuOHMyMC42LS4xIDI2LjgtOC4zYzMtMy45IDcuNi02LjQgMTIuOC02LjQgOC44IDAgMTYgNy4yIDE2IDE2IDAgMTAuMyA2LjYgMTkuNSAxNi40IDIyLjhzMjAuNi0uMSAyNi44LTguM2MzLTMuOSA3LjYtNi40IDEyLjgtNi40IDcuOCAwIDE0LjMgNS42IDE1LjcgMTMgMS42IDguMiA3LjMgMTUuMSAxNS4xIDE4czE2LjcgMS42IDIzLjMtMy42YzIuNy0yLjEgNi4xLTMuNCA5LjktMy40IDguOCAwIDE2IDcuMiAxNiAxNmwwIDEyMGMwIDM5LjgtMzIuMiA3Mi03MiA3MmwtMTE2LjYgMGMtMzcuNCAwLTcyLjQtMTguNy05My4yLTQ5LjlMNTAuNyAzMTIuOWMtNC45LTcuNC0yLjktMTcuMyA0LjQtMjIuMnMxNy4zLTIuOSAyMi4yIDQuNEwxMTYgMzUzLjJjNS45IDguOCAxNi44IDEyLjcgMjYuOSA5LjdzMTctMTIuNCAxNy0yM0wxNjAgNjR6TTE3NiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDE5Ny43QzkxLjIgMjM4IDU1LjUgMjMyLjggMjguNSAyNTAuNy0uOSAyNzAuNC04LjkgMzEwLjEgMTAuOCAzMzkuNUw3OC4zIDQ0MC44YzI5LjcgNDQuNSA3OS42IDcxLjIgMTMzLjEgNzEuMkwzMjggNTEyYzY2LjMgMCAxMjAtNTMuNyAxMjAtMTIwbDAtMTIwYzAtMzUuMy0yOC43LTY0LTY0LTY0LTQuNSAwLTguOCAuNS0xMyAxLjMtMTEuNy0xNS40LTMwLjItMjUuMy01MS0yNS4zLTYuOSAwLTEzLjUgMS4xLTE5LjcgMy4xLTExLjYtMTYuNC0zMC43LTI3LjEtNTIuMy0yNy4xLTIuNyAwLTUuNCAuMi04IC41TDI0MCA2NGMwLTM1LjMtMjguNy02NC02NC02NHptNDggMzA0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2em00OC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNnptODAgMTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZ6Il19LEJkdD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJyZWdpc3RlcmVkIixpY29uOls1MTIsNTEyLFsxNzRdLCJmMjVkIiwiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjAwIDE0NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTU2IDM0LjQgMCA0MSA2OC4zYzYuOCAxMS40IDIxLjYgMTUgMzIuOSA4LjJzMTUtMjEuNiA4LjItMzIuOWwtMzAuMi01MC4zYzI0LjYtMTEuNSA0MS42LTM2LjQgNDEuNi02NS4zIDAtMzkuOC0zMi4yLTcyLTcyLTcybC04MCAwem03MiA5NmwtNDggMCAwLTQ4IDU2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMHoiXX0saG8xPXtmYVNxdWFyZU1pbnVzOmgyZSxmYU1pbnVzU3F1YXJlOk02dCxmYUNhbGVuZGFyQ2hlY2s6ejZ0LGZhRmFjZUtpc3M6bTJlLGZhS2lzczprNnQsZmFQYXN0ZTpYZCxmYUZpbGVDbGlwYm9hcmQ6UzZ0LGZhSGFuZFBvaW50TGVmdDpDNnQsZmFGaWxlRXhjZWw6TDZ0LGZhRW52ZWxvcGU6VDZ0LGZhU3F1YXJlQ2FyZXREb3duOmcyZSxmYUNhcmV0U3F1YXJlRG93bjpfNnQsZmFUcnVjazpBNnQsZmFCZWxsOiQ2dCxmYU1lc3NhZ2U6UWQsZmFDb21tZW50QWx0OkQ2dCxmYUZhY2VEaXp6eTp4MmUsZmFEaXp6eTpFNnQsZmFDYWxlbmRhckRheXM6YjJlLGZhQ2FsZW5kYXJBbHQ6TjZ0LGZhSGFuZFBvaW50VXA6UDZ0LGZhSGFuZExpemFyZDpJNnQsZmFTcXVhcmVGdWxsOkY2dCxmYUNpcmNsZVBhdXNlOnYyZSxmYVBhdXNlQ2lyY2xlOk82dCxmYUhhcmREcml2ZTp5MmUsZmFIZGQ6QjZ0LGZhRmlsZVppcHBlcjp3MmUsZmFGaWxlQXJjaGl2ZTpSNnQsZmFGbG9wcHlEaXNrOk0yZSxmYVNhdmU6SDZ0LGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQ6ejJlLGZhR3JpblRvbmd1ZVNxdWludDpxNnQsZmFDYW1lcmE6azJlLGZhQ2FtZXJhQWx0OlY2dCxmYUZhY2VHcmluU3RhcnM6UzJlLGZhR3JpblN0YXJzOlU2dCxmYUV5ZTpqNnQsZmFGYWNlU2FkVGVhcjpDMmUsZmFTYWRUZWFyOlc2dCxmYVNoYXJlRnJvbVNxdWFyZTpMMmUsZmFTaGFyZVNxdWFyZTpHNnQsZmFOb3RlU3RpY2t5OlQyZSxmYVN0aWNreU5vdGU6WTZ0LGZhSGFuZEJhY2tGaXN0Ol8yZSxmYUhhbmRSb2NrOlo2dCxmYUNoZXNzUXVlZW46WDZ0LGZhRmFjZUdyaW5UZWFyczpBMmUsZmFHcmluVGVhcnM6UTZ0LGZhUGVuVG9TcXVhcmU6JDJlLGZhRWRpdDpLNnQsZmFGYWNlR3JpbkJlYW1Td2VhdDpEMmUsZmFHcmluQmVhbVN3ZWF0Oko2dCxmYUNsb2NrOkUyZSxmYUNsb2NrRm91cjplNXQsZmFGYWNlTGF1Z2hXaW5rOk4yZSxmYUxhdWdoV2luazp0NXQsZmFQYXBlclBsYW5lOmE1dCxmYUhlYXJ0OnI1dCxmYUZvbnRBd2Vzb21lOmJWLGZhRm9udEF3ZXNvbWVGbGFnOmk1dCxmYUZvbnRBd2Vzb21lTG9nb0Z1bGw6bzV0LGZhQ2xvbmU6czV0LGZhRm9sZGVyT3BlbjpuNXQsZmFXaW5kb3dNaW5pbWl6ZTpsNXQsZmFTdGFySGFsZjpjNXQsZmFBbGFybUNsb2NrOmQ1dCxmYU5ld3NwYXBlcjpmNXQsZmFIb3NwaXRhbDp2VixmYUhvc3BpdGFsQWx0OnU1dCxmYUhvc3BpdGFsV2lkZTpwNXQsZmFDaXJjbGVTdG9wOlAyZSxmYVN0b3BDaXJjbGU6aDV0LGZhT2JqZWN0VW5ncm91cDptNXQsZmFDb21tZW50Omc1dCxmYUNoZXNzUGF3bjp4NXQsZmFDYWxlbmRhclBsdXM6YjV0LGZhQ2xpcGJvYXJkOnY1dCxmYVRodW1ic0Rvd246eTV0LGZhSWRCYWRnZTp3NXQsZmFTcXVhcmVDaGVjazpJMmUsZmFDaGVja1NxdWFyZTpNNXQsZmFDaGVzc0Jpc2hvcDp6NXQsZmFFbnZlbG9wZU9wZW46azV0LGZhQ2lyY2xlWG1hcms6UTYsZmFUaW1lc0NpcmNsZTpTNXQsZmFYbWFya0NpcmNsZTpDNXQsZmFTcXVhcmVDYXJldFVwOkYyZSxmYUNhcmV0U3F1YXJlVXA6TDV0LGZhRmlsZUltYWdlOlQ1dCxmYVNxdWFyZUNhcmV0UmlnaHQ6TzJlLGZhQ2FyZXRTcXVhcmVSaWdodDpfNXQsZmFTdW46Q1YsZmFJbWFnZTpBNXQsZmFMaWdodGJ1bGI6JDV0LGZhQWRkcmVzc0NhcmQ6eVYsZmFDb250YWN0Q2FyZDpENXQsZmFWY2FyZDpFNXQsZmFGYWNlTWVoOkIyZSxmYU1laDpONXQsZmFNYXA6UDV0LGZhSGFuZFBvaW50RG93bjpJNXQsZmFGYWNlTWVoQmxhbms6UjJlLGZhTWVoQmxhbms6RjV0LGZhRmFjZUdyaW5Ub25ndWU6SDJlLGZhR3JpblRvbmd1ZTpPNXQsZmFGdXRib2w6d1YsZmFGdXRib2xCYWxsOkI1dCxmYVNvY2NlckJhbGw6UjV0LGZhRmFjZVN1cnByaXNlOnEyZSxmYVN1cnByaXNlOkg1dCxmYUZvbGRlcjpWMmUsZmFGb2xkZXJCbGFuazpxNXQsZmFDbG91ZDpWNXQsZmFDaXJjbGU6VTV0LGZhRmFjZUdyaW5TcXVpbnQ6VTJlLGZhR3JpblNxdWludDpqNXQsZmFDaXJjbGVVc2VyOmoyZSxmYVVzZXJDaXJjbGU6VzV0LGZhUmVjdGFuZ2xlTGlzdDpXMmUsZmFMaXN0QWx0Okc1dCxmYUhhbmQ6RzJlLGZhSGFuZFBhcGVyOlk1dCxmYVRodW1ic1VwOlo1dCxmYUJ1aWxkaW5nOlg1dCxmYUNoZXNzUm9vazpRNXQsZmFDaXJjbGVRdWVzdGlvbjpZMmUsZmFRdWVzdGlvbkNpcmNsZTpLNXQsZmFGaWxlOko1dCxmYUZhY2VTYWRDcnk6WjJlLGZhU2FkQ3J5OmU4dCxmYUNhbGVuZGFyTWludXM6dDh0LGZhRmFjZVRpcmVkOlgyZSxmYVRpcmVkOmE4dCxmYUhhbmRQb2ludFJpZ2h0OnI4dCxmYUNpcmNsZVVwOlEyZSxmYUFycm93QWx0Q2lyY2xlVXA6aTh0LGZhSGFuZFNjaXNzb3JzOm84dCxmYUdlbTpzOHQsZmFSZWN0YW5nbGVYbWFyazpZZCxmYVJlY3RhbmdsZVRpbWVzOm44dCxmYVRpbWVzUmVjdGFuZ2xlOmw4dCxmYVdpbmRvd0Nsb3NlOmM4dCxmYVRyYXNoQ2FuOktkLGZhVHJhc2hBbHQ6ZDh0LGZhTGlmZVJpbmc6Zjh0LGZhQ29weXJpZ2h0OnU4dCxmYUNpcmNsZUxlZnQ6SzJlLGZhQXJyb3dBbHRDaXJjbGVMZWZ0OnA4dCxmYUNhbGVuZGFyOmg4dCxmYUZhY2VGcm93bk9wZW46SjJlLGZhRnJvd25PcGVuOm04dCxmYUNoYXJ0QmFyOmVhZSxmYUJhckNoYXJ0Omc4dCxmYUhvdXNlOlpkLGZhSG9tZTp4OHQsZmFIb21lQWx0OmI4dCxmYUhvbWVMZ0FsdDp2OHQsZmFGYWNlRnJvd246dGFlLGZhRnJvd246eTh0LGZhVXNlcjpNVixmYVVzZXJBbHQ6dzh0LGZhVXNlckxhcmdlOk04dCxmYVNub3dmbGFrZTp6OHQsZmFCb29rbWFyazprOHQsZmFTcXVhcmVDYXJldExlZnQ6YWFlLGZhQ2FyZXRTcXVhcmVMZWZ0OlM4dCxmYUhhbmRzaGFrZTp6VixmYUhhbmRzaGFrZUFsdDpDOHQsZmFIYW5kc2hha2VTaW1wbGU6TDh0LGZhRmFjZVNtaWxlV2luazpyYWUsZmFTbWlsZVdpbms6VDh0LGZhRmFjZUdyaW5TcXVpbnRUZWFyczppYWUsZmFHcmluU3F1aW50VGVhcnM6Xzh0LGZhRmlsZUF1ZGlvOkE4dCxmYUNhbGVuZGFyWG1hcms6b2FlLGZhQ2FsZW5kYXJUaW1lczokOHQsZmFDaXJjbGVEb3duOnNhZSxmYUFycm93QWx0Q2lyY2xlRG93bjpEOHQsZmFGaWxlTGluZXM6a1YsZmFGaWxlQWx0OkU4dCxmYUZpbGVUZXh0Ok44dCxmYUNvbW1lbnRzOlA4dCxmYUNpcmNsZUNoZWNrOkpkLGZhQ2hlY2tDaXJjbGU6STh0LGZhTW9vbjpGOHQsZmFDbG9zZWRDYXB0aW9uaW5nOk84dCxmYUltYWdlczpCOHQsZmFDaXJjbGVSaWdodDpuYWUsZmFBcnJvd0FsdENpcmNsZVJpZ2h0OlI4dCxmYUlkQ2FyZDpsYWUsZmFEcml2ZXJzTGljZW5zZTpIOHQsZmFDaXJjbGVQbGF5OmNhZSxmYVBsYXlDaXJjbGU6cTh0LGZhRmFjZUxhdWdoQmVhbTpkYWUsZmFMYXVnaEJlYW06Vjh0LGZhQWRkcmVzc0Jvb2s6ZmFlLGZhQ29udGFjdEJvb2s6VTh0LGZhSG91cmdsYXNzOnVhZSxmYUhvdXJnbGFzc0VtcHR5Omo4dCxmYUhlYWRwaG9uZXM6U1YsZmFIZWFkcGhvbmVzQWx0Olc4dCxmYUhlYWRwaG9uZXNTaW1wbGU6Rzh0LGZhRmlsZVBvd2VycG9pbnQ6WTh0LGZhV2luZG93TWF4aW1pemU6Wjh0LGZhQ29tbWVudERvdHM6cGFlLGZhQ29tbWVudGluZzpYOHQsZmFGYWNlR3JpblRvbmd1ZVdpbms6aGFlLGZhR3JpblRvbmd1ZVdpbms6UTh0LGZhSG91cmdsYXNzSGFsZjptYWUsZmFIb3VyZ2xhc3MyOks4dCxmYUNyZWRpdENhcmQ6Z2FlLGZhQ3JlZGl0Q2FyZEFsdDpKOHQsZmFIYW5kU3BvY2s6ZWR0LGZhQmVsbFNsYXNoOnRkdCxmYVN0YXI6YWR0LGZhRmxhZzpyZHQsZmFMZW1vbjppZHQsZmFXaW5kb3dSZXN0b3JlOm9kdCxmYUZhY2VHcmluSGVhcnRzOnhhZSxmYUdyaW5IZWFydHM6c2R0LGZhRmFjZUtpc3NCZWFtOmJhZSxmYUtpc3NCZWFtOm5kdCxmYUZpbGVQZGY6bGR0LGZhRmFjZUdyaW5XaWRlOnZhZSxmYUdyaW5BbHQ6Y2R0LGZhRmFjZUxhdWdoU3F1aW50OnlhZSxmYUxhdWdoU3F1aW50OmRkdCxmYUZhY2VLaXNzV2lua0hlYXJ0OndhZSxmYUtpc3NXaW5rSGVhcnQ6ZmR0LGZhQ29weTpMVixmYUNoZXNzS2luZzp1ZHQsZmFTcXVhcmVQbHVzOk1hZSxmYVBsdXNTcXVhcmU6cGR0LGZhRmlsZUNvZGU6aGR0LGZhRmFjZUdyaW5XaW5rOnphZSxmYUdyaW5XaW5rOm1kdCxmYU1vbmV5QmlsbDE6a2FlLGZhTW9uZXlCaWxsQWx0OmdkdCxmYUV5ZVNsYXNoOnhkdCxmYUZpbGVXb3JkOmJkdCxmYUZhY2VBbmdyeTpTYWUsZmFBbmdyeTp2ZHQsZmFDaGVzc0tuaWdodDp5ZHQsZmFGYWNlR3JpbkJlYW06Q2FlLGZhR3JpbkJlYW06d2R0LGZhSGFuZFBlYWNlOk1kdCxmYUNvbXBhc3M6emR0LGZhU3F1YXJlOmtkdCxmYUZhY2VHcmluOkxhZSxmYUdyaW46U2R0LGZhRmFjZVNtaWxlOlRhZSxmYVNtaWxlOkNkdCxmYUZhY2VTbWlsZUJlYW06X2FlLGZhU21pbGVCZWFtOkxkdCxmYUZvbGRlckNsb3NlZDpUZHQsZmFLZXlib2FyZDpfZHQsZmFGYWNlUm9sbGluZ0V5ZXM6QWFlLGZhTWVoUm9sbGluZ0V5ZXM6QWR0LGZhRmFjZUdyaW1hY2U6JGFlLGZhR3JpbWFjZTokZHQsZmFDaXJjbGVEb3Q6RGFlLGZhRG90Q2lyY2xlOkRkdCxmYU9iamVjdEdyb3VwOkVkdCxmYUZhY2VGbHVzaGVkOkVhZSxmYUZsdXNoZWQ6TmR0LGZhU3RhckhhbGZTdHJva2U6TmFlLGZhU3RhckhhbGZBbHQ6UGR0LGZhRmlsZVZpZGVvOklkdCxmYUZhY2VMYXVnaDpQYWUsZmFMYXVnaDpGZHQsZmFIYW5kUG9pbnRlcjpPZHQsZmFSZWdpc3RlcmVkOkJkdH19KTt2YXIgbW8xLEhkdCxxZHQsVmR0LFVkdCxqZHQsV2R0LEdkdCxZZHQsWmR0LFhkdCxUVixRZHQsS2R0LEpkdCxlN3QsSWFlLHQ3dCxGYWUsYTd0LHI3dCxpN3QsT2FlLG83dCxzN3Qsbjd0LGw3dCxnNyxjN3QsZDd0LEJhZSxmN3QsdTd0LHA3dCxoN3QsbTd0LGc3dCx4N3QsYjd0LFJhZSx2N3QseTd0LHc3dCxIYWUsTTd0LHo3dCxrN3QsUzd0LEM3dCx4NyxMN3QscWFlLFQ3dCxfN3QsX1YsQTd0LCQ3dCxWYWUsRDd0LFVhZSxFN3QsTjd0LGphZSxQN3QsV2FlLEk3dCxHYWUsRjd0LE83dCxCN3QsUjd0LEg3dCxxN3QsVjd0LFlhZSxVN3Qsajd0LFc3dCxHN3QsWmFlLFk3dCxaN3QsWDd0LFE3dCxLN3QsSjd0LEFWLGVmdCx0ZnQsYWZ0LCRWLHJmdCxpZnQsb2Z0LFhhZSxzZnQsbmZ0LGxmdCxjZnQsUWFlLGRmdCxTVSxmZnQsQ1UsdWZ0LHBmdCxLYWUsaGZ0LEphZSxtZnQsZ2Z0LERWLHhmdCxiZnQsdmZ0LHlmdCx3ZnQsTWZ0LHpmdCxrZnQsTFUsYjcsU2Z0LENmdCxlcmUsTGZ0LFRmdCxlNyxfZnQsQWZ0LCRmdCx0cmUsRGZ0LEVmdCxOZnQsYXJlLFBmdCxycmUsSWZ0LEZmdCxPZnQsQmZ0LGlyZSxSZnQsSGZ0LHFmdCxvcmUsVmZ0LHNyZSxVZnQsamZ0LFdmdCxHZnQsRVYsWWZ0LFpmdCxYZnQsUWZ0LEtmdCxKZnQsZXV0LG5yZSx0dXQsYXV0LHJ1dCxpdXQsb3V0LGxyZSxzdXQsbnV0LHQ3LGx1dCxjdXQsZHV0LGZ1dCx1dXQscHV0LE5WLGh1dCxtdXQsZ3V0LHh1dCxidXQsY3JlLHZ1dCx5dXQsd3V0LE11dCx6dXQsZHJlLGt1dCxTdXQsQ3V0LEx1dCxmcmUsVHV0LF91dCxBdXQsdXJlLCR1dCxEdXQscHJlLEV1dCxocmUsTnV0LFB1dCxtcmUsSXV0LEZ1dCxncmUsT3V0LHhyZSxCdXQsUnV0LHY3LEh1dCx5NyxxdXQsVnV0LFBWLFV1dCxqdXQsV3V0LGJyZSxHdXQsWXV0LHZyZSxadXQsWHV0LFF1dCxLdXQseXJlLEp1dCxlcHQsdHB0LGFwdCxycHQsd3JlLGlwdCxvcHQsc3B0LG5wdCxNcmUsbHB0LHpyZSxjcHQsZHB0LGZwdCx1cHQscHB0LGtyZSxocHQsbXB0LGdwdCx4cHQsU3JlLGJwdCx2cHQsQ3JlLHlwdCxMcmUsd3B0LE1wdCx6cHQsa3B0LFNwdCxDcHQsVHJlLExwdCxUcHQsX3B0LEFwdCwkcHQsX3JlLERwdCxFcHQsTnB0LFBwdCxBcmUsSXB0LCRyZSxGcHQsVFUsX1UsRHJlLE9wdCxFcmUsQnB0LFJwdCxIcHQsRDcsTnJlLHFwdCxWcHQsVXB0LGpwdCxXcHQsR3B0LFByZSxZcHQsQVUsWnB0LFhwdCxRcHQsS3B0LEpwdCxJcmUsZTl0LEZyZSx0OXQsYTl0LHI5dCxpOXQsT3JlLG85dCxJVixzOXQsbjl0LGw5dCxCcmUsYzl0LGQ5dCxmOXQsdTl0LFJyZSxwOXQsaDl0LG05dCxnOXQsSHJlLHg5dCxiOXQsdjl0LHk5dCx3OXQsTTl0LHo5dCxrOXQsUzl0LEM5dCxMOXQsVDl0LF85dCxxcmUsQTl0LCQ5dCxEOXQsRTl0LE45dCxQOXQsSTl0LFZyZSxGOXQsTzl0LEI5dCxLNixSOXQsSDl0LHE5dCxWOXQsVTl0LFVyZSxqOXQsanJlLFc5dCxXcmUsRzl0LEdyZSxZOXQsWXJlLFo5dCx3NyxYOXQsWnJlLFE5dCxYcmUsSzl0LFFyZSxKOXQsZWh0LHRodCxhaHQsS3JlLHJodCxpaHQsSnJlLG9odCxzaHQsZWllLG5odCxsaHQsY2h0LGRodCx0aWUsZmh0LHVodCxwaHQsYWllLGhodCxtaHQsYTcsZ2h0LHhodCxiaHQsdmh0LHlodCx3aHQscmllLE1odCxpaWUsemh0LGtodCxTaHQsb2llLENodCxMaHQsVGh0LHNpZSxfaHQsbmllLEFodCxGViwkaHQsRGh0LEVodCxOaHQsUGh0LElodCxGaHQsT2h0LEJodCxSaHQsSGh0LHFodCxWaHQsVWh0LHI3LGpodCxXaHQsR2h0LFlodCxaaHQsWGh0LFFodCxLaHQsbGllLEpodCxlbXQsdG10LGFtdCxybXQsaW10LG9tdCxzbXQsbm10LGxtdCxjaWUsY210LGRtdCxmbXQsdW10LHBtdCxobXQsbW10LGRpZSxnbXQsZmllLHhtdCxibXQsdWllLHZtdCx5bXQsd210LHBpZSxNbXQsem10LGttdCxoaWUsU210LG1pZSxDbXQsTG10LGdpZSxUbXQsX210LEFtdCwkbXQseGllLERtdCxFbXQsTm10LCRVLFBtdCxJbXQsRm10LGJpZSxPbXQsQm10LFJtdCxIbXQscW10LHZpZSxWbXQsVW10LGptdCxXbXQsR210LHlpZSxZbXQsWm10LFhtdCx3aWUsUW10LEttdCxPVixKbXQsZWd0LHRndCxhZ3QsTWllLHJndCxpZ3Qsb2d0LHppZSxzZ3Qsa2llLG5ndCxsZ3QsY2d0LGRndCxNNyxmZ3QsU2llLHVndCxwZ3QsaGd0LG1ndCxnZ3QsQ2llLHhndCxMaWUsYmd0LFRpZSx2Z3QseWd0LEJWLHdndCxNZ3QsX2llLHpndCxSVixrZ3QsU2d0LENndCxMZ3QsVGd0LF9ndCxBZ3QsJGd0LEFpZSxEZ3QsRWd0LE5ndCxQZ3QsSWd0LCRpZSxGZ3QsT2d0LEJndCxEaWUsUmd0LEVpZSxIZ3QsTmllLHFndCxWZ3QsVWd0LGpndCxXZ3QsR2d0LFlndCxQaWUsWmd0LFhndCxRZ3QsS2d0LElpZSxKZ3QsZXh0LHR4dCxheHQscnh0LGl4dCxGaWUsb3h0LHN4dCxPaWUsbnh0LGx4dCxCaWUsY3h0LGR4dCxmeHQsdXh0LFJpZSxweHQsaHh0LG14dCxIaWUsZ3h0LHFpZSx4eHQsYnh0LHZ4dCx5eHQsVmllLHd4dCxNeHQsenh0LGt4dCxTeHQsVWllLEN4dCxqaWUsTHh0LFdpZSxUeHQsX3h0LEdpZSxBeHQsWWllLCR4dCxEeHQsRXh0LE54dCxQeHQsSXh0LEZ4dCxPeHQsQnh0LFJ4dCxIeHQsSFYscXh0LFZ4dCxhNSxVeHQsanh0LFd4dCxxVixHeHQsWXh0LFp4dCxYeHQsUXh0LEt4dCxKeHQsWmllLGVidCxYaWUsdGJ0LGFidCxyYnQsUWllLGlidCxLaWUsb2J0LHNidCxWVixuYnQsbGJ0LGNidCxkYnQsSjYsZmJ0LHVidCxwYnQsaGJ0LG1idCxnYnQseGJ0LEppZSxiYnQsdmJ0LHlidCx3YnQsZW9lLE1idCx6YnQsa2J0LFNidCxDYnQsTGJ0LFRidCx0b2UsX2J0LEFidCwkYnQsRGJ0LEVidCxOYnQsYW9lLFBidCxEVSxyb2UsSWJ0LEZidCxPYnQsaW9lLEJidCxvb2UsUmJ0LEhidCxxYnQsc29lLFZidCxVYnQsbm9lLGpidCxXYnQsR2J0LFlidCxsb2UsWmJ0LFhidCxRYnQsS2J0LEpidCxldnQsY29lLHR2dCxhdnQsRVUscnZ0LGl2dCxkb2Usb3Z0LHN2dCxudnQsaTcsbHZ0LGN2dCxkdnQsZnZ0LG83LHV2dCxwdnQsaHZ0LG12dCxndnQseHZ0LGZvZSxidnQsVVYsdnZ0LHl2dCx3dnQsdW9lLE12dCx6dnQsa3Z0LFN2dCxDdnQsTHZ0LFR2dCxwb2UsX3Z0LE5VLEF2dCwkdnQsRHZ0LGhvZSxFdnQsbW9lLE52dCxQdnQsZ29lLEl2dCxzNyxGdnQsT3Z0LEJ2dCxSdnQsSHZ0LHF2dCxWdnQsVXZ0LGp2dCx4b2UsV3Z0LEd2dCxZdnQsWnZ0LGpWLFh2dCxRdnQsYm9lLEt2dCxKdnQsZXl0LHZvZSx0eXQsYXl0LHJ5dCx5b2UsaXl0LG95dCxzeXQsbnl0LGx5dCxjeXQsZHl0LGZ5dCx1eXQsd29lLHB5dCxNb2UsaHl0LG15dCxneXQseHl0LGJ5dCx2eXQsem9lLHl5dCx3eXQsTXl0LGtvZSx6eXQsa3l0LFNvZSxTeXQsQ29lLEN5dCxMb2UsTHl0LFR5dCxfeXQsVG9lLEF5dCxfb2UsJHl0LEFvZSxEeXQsRXl0LCRvZSxOeXQsRG9lLFB5dCxFb2UsSXl0LE5vZSxGeXQsT3l0LEJ5dCxSeXQsSHl0LHF5dCxWeXQsVXl0LGp5dCxQb2UsV3l0LElvZSxHeXQsRm9lLFl5dCxaeXQsUFUsWHl0LE9vZSxReXQsS3l0LEp5dCxCb2UsZXd0LHR3dCxSb2UsYXd0LHo3LHJ3dCxpd3Qsb3d0LEhvZSxzd3QscW9lLG53dCxsd3QsVm9lLGN3dCxVb2UsZHd0LGpvZSxmd3QsdXd0LHB3dCxod3QsbXd0LFdvZSxnd3QsR29lLHh3dCxid3Qsdnd0LHl3dCxZb2Usd3d0LE13dCx6d3QsWm9lLGt3dCxTd3QsQ3d0LFhvZSxMd3QsVHd0LF93dCxBd3QsUW9lLCR3dCxEd3QsS29lLEV3dCxOd3QsUHd0LEpvZSxJd3QsRnd0LE93dCxlc2UsQnd0LHRzZSxSd3QsV1YsSHd0LHF3dCxWd3QsYXNlLFV3dCxqd3QsV3d0LHJzZSxHd3QsWXd0LFp3dCxpc2UsWHd0LFF3dCxLd3QsSnd0LGVNdCx0TXQsYU10LHJNdCxpTXQsb010LHNNdCxuTXQsb3NlLGxNdCxJVSxjTXQsc3NlLGRNdCxmTXQsdU10LHBNdCxuc2UsaE10LG1NdCxnTXQseE10LGJNdCx2TXQseU10LG43LHdNdCxNTXQsek10LGtNdCxrNyxTTXQsbHNlLENNdCxMTXQsVE10LGNzZSxfTXQsQU10LGRzZSwkTXQsRE10LEVNdCxOTXQsUE10LGZzZSxJTXQsdXNlLEZNdCxPTXQsQk10LHBzZSxSTXQsSE10LHFNdCxoc2UsVk10LFVNdCxqTXQsV010LEdNdCxZTXQsWk10LG1zZSxYTXQsRlUsUU10LEtNdCxKTXQsZ3NlLGV6dCx0enQseHNlLGF6dCxic2Uscnp0LGl6dCxvenQsdnNlLHN6dCx5c2Usbnp0LHdzZSxsenQsY3p0LE1zZSxkenQsZnp0LHV6dCxwenQsenNlLGh6dCxsNyxtenQsZ3p0LHh6dCxienQsa3NlLHZ6dCxTc2UseXp0LHd6dCxNenQsenp0LENzZSxrenQsYzcsU3p0LEN6dCxMenQsTHNlLFR6dCxfenQsQXp0LCR6dCxUc2UsRHp0LF9zZSxFenQsTnp0LFB6dCxBc2UsSXp0LCRzZSxGenQsT3p0LERzZSxCenQsRXNlLFJ6dCxOc2UsSHp0LFBzZSxxenQsVnp0LFV6dCxqenQsSXNlLFd6dCxHenQsWXp0LFp6dCxYenQsUXp0LEt6dCxKenQsRnNlLGVrdCxPc2UsdGt0LGFrdCxya3QsaWt0LEJzZSxva3Qsc2t0LEdWLG5rdCxsa3QsY2t0LGRrdCxma3QsdWt0LGQ3LHBrdCxoa3QsbWt0LGdrdCx4a3QsYmt0LHZrdCx5a3Qsd2t0LE1rdCx6a3Qsa2t0LFNrdCxZVixDa3QsTGt0LFRrdCxfa3QsQWt0LCRrdCxSc2UsRGt0LEhzZSxFa3QsTmt0LFBrdCxaVixJa3QsRmt0LE9rdCxxc2UsQmt0LFhWLFJrdCxIa3QscWt0LFZrdCxPVSxRVixVa3Qsamt0LFZzZSxXa3QsR2t0LFlrdCxaa3QsVXNlLFhrdCxRa3QsanNlLEtrdCxKa3QsV3NlLGVTdCx0U3QsYVN0LHJTdCxpU3Qsb1N0LEtWLHNTdCxuU3QsR3NlLGxTdCxjU3QsZFN0LGZTdCx1U3QscFN0LGhTdCxtU3QsWXNlLGdTdCx4U3QsWnNlLGJTdCxYc2UsdlN0LHlTdCxpcyx3U3QsTVN0LHpTdCxrU3QsUXNlLFNTdCxDU3QsTFN0LFRTdCxLc2UsX1N0LEpzZSxBU3QsSlYsJFN0LERTdCxFU3QsZW5lLE5TdCxCVSxQU3QsSVN0LHRuZSxGU3QsZVUsT1N0LEJTdCxSU3QsSFN0LHFTdCxWU3QsUzcsVVN0LGFuZSxqU3QsV1N0LEdTdCxybmUsWVN0LGluZSxaU3QsZjcsWFN0LFFTdCxLU3QsSlN0LGVDdCx0Q3QsYUN0LG9uZSxyQ3QsaUN0LHNuZSxvQ3Qsbm5lLHNDdCxsbmUsbkN0LGxDdCxjQ3QsZEN0LGZDdCx1Q3QsY25lLHBDdCxoQ3QsbUN0LGdDdCx4Q3QsZG5lLGJDdCxmbmUsdkN0LHVuZSx5Q3Qsd0N0LE1DdCx0VSx6Q3Qsa0N0LFNDdCxDQ3QsTEN0LHBuZSxUQ3QsaG5lLF9DdCxBQ3QsJEN0LERDdCxtbmUsRUN0LGduZSxOQ3QsUEN0LGFVLElDdCxGQ3QsT0N0LEJDdCxSQ3QseG5lLEhDdCxxQ3QsYm5lLFZDdCx2bmUsVUN0LGpDdCxXQ3QsR0N0LFlDdCxaQ3QsWEN0LFFDdCxLQ3QsSkN0LHluZSxlTHQsdEx0LGFMdCxyVSxyTHQsaUx0LG9MdCxzTHQsd25lLG5MdCxsTHQsTW5lLGNMdCxkTHQsZkx0LHVMdCx6bmUscEx0LGhMdCxtTHQsQzcsZ0x0LHhMdCxpVSxiTHQsdkx0LGtuZSx5THQsd0x0LE1MdCx6THQsa0x0LFNuZSxTTHQsQ0x0LENuZSxMTHQsTG5lLFRMdCxfTHQsQUx0LCRMdCxETHQsVG5lLEVMdCxfbmUsTkx0LEFuZSxQTHQsSUx0LEZMdCxPTHQsJG5lLEJMdCxSTHQsRG5lLEhMdCxxTHQsVkx0LEVuZSxVTHQsakx0LG9VLFdMdCxHTHQsTm5lLFlMdCxQbmUsWkx0LEluZSxYTHQsUlUsRm5lLFFMdCxPbmUsS0x0LEpMdCxlVHQsdFR0LGFUdCxyVHQsc1UsaVR0LG9UdCxzVHQsQm5lLG5UdCxsVHQsY1R0LG5VLGRUdCxmVHQsdVR0LHBUdCxsVSxoVHQsbVR0LGdUdCx4VHQsUm5lLGJUdCxIbmUsdlR0LHlUdCx3VHQsTVR0LGNVLHpUdCxrVHQsU1R0LENUdCxMVHQsVFR0LGRVLF9UdCxBVHQsJFR0LHFuZSxEVHQsRVR0LE5UdCxQVHQsVm5lLElUdCxGVHQsT1R0LEJUdCxSVHQsSFR0LFVuZSxxVHQsVlR0LFVUdCxqVHQsam5lLFdUdCxHVHQsdTcsWVR0LFpUdCxYVHQsV25lLFFUdCxLVHQsSlR0LGVfdCx0X3QsYV90LHJfdCxpX3Qsb190LEduZSxzX3Qsbl90LFluZSxsX3QsY190LGRfdCxabmUsZl90LHVfdCxwX3QsaF90LFhuZSxtX3QsSFUsUW5lLGdfdCx4X3QsYl90LHZfdCx5X3QsS25lLHdfdCxNX3Qsel90LGtfdCxTX3QsSm5lLENfdCxMX3QsVF90LF9fdCxBX3QsZlUsJF90LERfdCxFX3QsTl90LFBfdCxlMGUsSV90LHQwZSxGX3QsT190LEJfdCx1VSxSX3QsSF90LHFfdCxhMGUsVl90LHIwZSxVX3Qsal90LFdfdCxHX3QsWV90LFpfdCxpMGUsWF90LFFfdCxvMGUsS190LHMwZSxKX3QsbjBlLGVBdCx0QXQsbDBlLGFBdCxjMGUsckF0LGlBdCxvQXQsc0F0LG5BdCxsQXQsY0F0LGRBdCxmQXQsZDBlLHVBdCxwQXQscFUsaEF0LG1BdCxmMGUsZ0F0LHhBdCxiQXQsdTBlLHZBdCx5QXQsd0F0LE1BdCxwMGUsekF0LGtBdCxTQXQsQ0F0LExBdCxoMGUsVEF0LF9BdCxBQXQsaFUsJEF0LERBdCxFQXQsTkF0LFBBdCxJQXQsbVUsRkF0LE9BdCxCQXQsbTBlLFJBdCxnMGUsSEF0LHFBdCxWQXQsVUF0LHgwZSxqQXQsYjBlLFdBdCxHQXQsdjBlLFlBdCxaQXQseTBlLFhBdCxRQXQsS0F0LEpBdCx3MGUsZSR0LHQkdCxhJHQsciR0LEw3LGkkdCxxVSxvJHQscyR0LG4kdCxsJHQsTTBlLGMkdCx6MGUsZCR0LGYkdCx1JHQscCR0LHA3LGgkdCxtJHQsZyR0LGg3LHgkdCxiJHQsdiR0LGswZSx5JHQsdyR0LGdVLE0kdCx6JHQsayR0LFMkdCxTMGUsQyR0LEwkdCxUJHQsQzBlLF8kdCxBJHQsJCR0LEQkdCxFJHQsTDBlLE4kdCx4VSxQJHQsSSR0LEYkdCxPJHQsQiR0LFQwZSxSJHQsXzBlLEgkdCxBMGUscSR0LFYkdCwkMGUsVSR0LFZVLEQwZSxqJHQsVyR0LEckdCxFMGUsWSR0LFokdCxVVSxOMGUsWCR0LFEkdCxLJHQsSiR0LGU1LGVEdCx0RHQsYUR0LHJEdCxQMGUsaUR0LG9EdCxzRHQsSTBlLG5EdCxsRHQsY0R0LGREdCxGMGUsZkR0LHVEdCxwRHQsaER0LG1EdCxiVSxnRHQseER0LFQ3LGJEdCxPMGUsdkR0LEIwZSx5RHQsd0R0LE1EdCx6RHQsa0R0LFNEdCxDRHQsUjBlLExEdCxURHQsX0R0LEgwZSxBRHQsJER0LEREdCxFRHQscTBlLE5EdCxQRHQsSUR0LFYwZSxGRHQsT0R0LEJEdCxfNyxSRHQsSER0LFUwZSxxRHQsajBlLFZEdCxXMGUsVUR0LEcwZSxqRHQsV0R0LFkwZSxHRHQsWUR0LFpEdCxYRHQsUUR0LEtEdCxaMGUsSkR0LGVFdCxYMGUsdEV0LGFFdCxRMGUsckV0LGlFdCxvRXQsSzBlLHNFdCxuRXQsbEV0LGNFdCxkRXQsdDUsZkV0LHVFdCxwRXQsaEV0LG1FdCxnRXQseEV0LGJFdCx2RXQseUV0LHdFdCxNRXQsekV0LGtFdCxTRXQsQ0V0LExFdCxKMGUsVEV0LF9FdCxBRXQsJEV0LGU0ZSxERXQsRUV0LE5FdCxtNyxQRXQsSUV0LEZFdCxPRXQsQkV0LHQ0ZSxSRXQsQTcsSEV0LHFFdCxWRXQsYTRlLFVFdCxqRXQsV0V0LEdFdCxyNGUsWUV0LFpFdCxpNGUsWEV0LFFFdCxLRXQsbzRlLEpFdCxlTnQsczRlLHROdCxuNGUsYU50LHJOdCxpTnQsb050LHNOdCxsNGUsbk50LGxOdCxjTnQsYzRlLGROdCxmTnQsdU50LHBOdCxoTnQsbU50LGdOdCxkNGUseE50LGY0ZSxiTnQsdTRlLHZOdCx2VSx5TnQsd050LHA0ZSxNTnQsaDRlLHpOdCxtNGUsa050LFNOdCxDTnQsTE50LFROdCxfTnQsZzRlLEFOdCx4NGUsJE50LEROdCxFTnQsTk50LFBOdCxiNGUsSU50LHY0ZSxGTnQseTRlLE9OdCx3NGUsQk50LFJOdCxITnQscU50LE00ZSxWTnQsVU50LHlVLGpOdCxXTnQsejRlLEdOdCxZTnQsWk50LGs0ZSxYTnQsUU50LEtOdCxKTnQsUzRlLGVQdCxyNSx0UHQsYVB0LEM0ZSxyUHQsTDRlLGlQdCxvUHQsc1B0LHdVLG5QdCxsUHQsY1B0LFQ0ZSxkUHQsXzRlLGZQdCxBNGUsdVB0LCQ0ZSxwUHQsaFB0LG1QdCxnUHQseFB0LGJQdCxNVSx2UHQseVB0LHdQdCxNUHQselB0LEQ0ZSxrUHQsU1B0LENQdCxMUHQsVFB0LEU0ZSxfUHQsQVB0LE40ZSwkUHQsRFB0LHpVLEVQdCxOUHQsUFB0LCQ3LElQdCxGUHQsT1B0LFA0ZSxCUHQsSTRlLFJQdCxIUHQscVB0LFZQdCxVUHQsRjRlLGpQdCxXUHQsR1B0LFlQdCxaUHQsa1UsWFB0LFFQdCxLUHQsSlB0LGVJdCxPNGUsdEl0LEI0ZSxhSXQsckl0LFI0ZSxpSXQsSDRlLG9JdCxxNGUsc0l0LFY0ZSxuSXQsbEl0LFU0ZSxjSXQsZEl0LGZJdCx1SXQscEl0LGhJdCxnbzEsbUl0PW4oKCk9PnttbzE9ImZhcyIsSGR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IjAiLGljb246WzMyMCw1MTIsW10sIjMwIiwiTTAgMTkyQzAgMTAzLjYgNzEuNiAzMiAxNjAgMzJzMTYwIDcxLjYgMTYwIDE2MGwwIDEyOGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQwOC40IDAgMzIwTDAgMTkyek0xNjAgOTZjLTUzIDAtOTYgNDMtOTYgOTZsMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2eiJdfSxxZHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiMSIsaWNvbjpbMjU2LDUxMixbXSwiMzEiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDY0IDAgMCAzMjAtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMnoiXX0sVmR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IjIiLGljb246WzM4NCw1MTIsW10sIjMyIiwiTTQ4IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE3MSAwYzYwLjIgMCAxMDkgNDguOCAxMDkgMTA5IDAgNDMuOC0yNi4yIDgzLjMtNjYuNCAxMDAuNGwtMTM5LjEgNTlDMTE5IDMxNS40IDk2IDM1MC4yIDk2IDM4OC43bDAgMjcuMyAyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw2NCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNTkuM2MwLTY0LjIgMzguNC0xMjIuMiA5Ny41LTE0Ny4zbDEzOS4xLTU5YzE2LjYtNy4xIDI3LjQtMjMuNCAyNy40LTQxLjQgMC0yNC45LTIwLjItNDUtNDUtNDVMODAgOTZDNjIuMyA5NiA0OCA4MS43IDQ4IDY0eiJdfSxVZHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiMyIsaWNvbjpbMzIwLDUxMixbXSwiMzMiLCJNODAgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDExMiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0TDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmwxNjAgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOCAwIDM4LjItMTYuOCA3Mi41LTQzLjMgOTYgMjYuNiAyMy41IDQzLjMgNTcuOCA0My4zIDk2IDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4TDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NEw4MCAyODh6Il19LGpkdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiI0IixpY29uOlszODQsNTEyLFtdLCIzNCIsIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjI0LTE5MiAwIDAtMjI0eiJdfSxXZHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiNSIsaWNvbjpbMzIwLDUxMixbXSwiMzUiLCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDAgMCAxMTIgMTIwIDBjNzUuMSAwIDEzNiA2MC45IDEzNiAxMzZTMjU5LjEgNDgwIDE4NCA0ODBMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE1MiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcycy0zMi4yLTcyLTcyLTcyTDMyIDI3MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCA2NHoiXX0sR2R0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IjYiLGljb246WzM4NCw1MTIsW10sIjM2IiwiTTI1NiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtODggMGMtNDguNiAwLTg4IDM5LjQtODggODhsMCAzMi4yYzIyLjktMTUuMyA1MC40LTI0LjIgODAtMjQuMmw0OCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0UzI4Ny41IDQ4MCAyMDggNDgwbC00OCAwQzgwLjUgNDgwIDE2IDQxNS41IDE2IDMzNmwwLTE1MkMxNiAxMDAuMSA4NC4xIDMyIDE2OCAzMmw4OCAwek04MCAzMzZjMCA0NC4yIDM1LjggODAgODAgODBsNDggMGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MGwtNDggMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6Il19LFlkdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiI3IixpY29uOlszMjAsNTEyLFtdLCIzNyIsIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDI1NiAwYzExLjUgMCAyMiA2LjEgMjcuNyAxNi4xczUuNyAyMi4yLS4xIDMyLjFsLTIyNCAzODRjLTguOSAxNS4zLTI4LjUgMjAuNC00My44IDExLjVzLTIwLjQtMjguNS0xMS41LTQzLjhMMjMyLjMgOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXX0sWmR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IjgiLGljb246WzMyMCw1MTIsW10sIjM4IiwiTTMwNCAxNjBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhsLTMyIDBjLTcwLjcgMC0xMjggNTcuMy0xMjggMTI4IDAgMzQuNiAxMy43IDY2IDM2IDg5LTMxLjUgMjMuMy01MiA2MC44LTUyIDEwMyAwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGw2NCAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4IDAtNDIuMi0yMC41LTc5LjctNTItMTAzIDIyLjMtMjMgMzYtNTQuNCAzNi04OXpNMTc2LjEgMjg4bDE1LjkgMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGw0OC4xIDB6bTAtNjRMMTQ0IDIyNGMtMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDM1LjMtMjguNiA2NC02NCA2NHoiXX0sWGR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IjkiLGljb246WzM4NCw1MTIsW10sIjM5IiwiTTIwOCAzMjBjMjkuNiAwIDU3LjEtOC45IDgwLTI0LjJsMCAzMi4yYzAgNDguNi0zOS40IDg4LTg4IDg4TDk2IDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMDQgMGM4My45IDAgMTUyLTY4LjEgMTUyLTE1MmwwLTE1Mi4xQzM1MS45IDk2LjQgMjg3LjUgMzIgMjA4IDMybC00OCAwQzgwLjUgMzIgMTYgOTYuNSAxNiAxNzZTODAuNSAzMjAgMTYwIDMyMGw0OCAwem04MC0xNDRjMCA0NC4yLTM1LjggODAtODAgODBsLTQ4IDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwczM1LjgtODAgODAtODBsNDggMGM0NC4yIDAgODAgMzUuOCA4MCA4MHoiXX0sVFY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZG9sbGFyLXNpZ24iLGljb246WzMyMCw1MTIsWzEyODE3OCw2MTc4MSwiZG9sbGFyIiwidXNkIl0sIjI0IiwiTTEzNiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTE0LjkgMGMtMjQuOSAwLTQ1LjEgMjAuMi00NS4xIDQ1LjEgMCAyMi41IDE2LjUgNDEuNSAzOC43IDQ0LjdsOTEuNiAxMy4xYzUzLjggNy43IDkzLjcgNTMuNyA5My43IDEwOCAwIDYwLjMtNDguOSAxMDkuMS0xMDkuMSAxMDkuMWwtMTAuOSAwIDAgNDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00MC03MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDEzMC45IDBjMjQuOSAwIDQ1LjEtMjAuMiA0NS4xLTQ1LjEgMC0yMi41LTE2LjUtNDEuNS0zOC43LTQ0LjdsLTkxLjYtMTMuMUM1NS45IDI3My41IDE2IDIyNy40IDE2IDE3My4xIDE2IDExMi45IDY0LjkgNjQgMTI1LjEgNjRsMTAuOSAwIDAtNDB6Il19LFFkdD1UVixLZHQ9VFYsSmR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRvZyIsaWNvbjpbNTc2LDUxMixbMTI4MDIxXSwiZjZkMyIsIk0zMiAxMTJjMTYuNiAwIDMwLjIgMTIuNiAzMS44IDI4LjdsLjMgNi42QzY1LjggMTYzLjQgNzkuNCAxNzYgOTYgMTc2bDE3OS4xIDAgMTQwLjkgNjAuNCAwIDI0My42YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEzMS4zQzI5NiAzNjEgMjY4LjggMzY4IDI0MCAzNjhzLTU2LTctODAtMTkuM0wxNjAgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI0NS42Yy0zNy4zLTEzLjItNjQtNDguNi02NC05MC40IDAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTUuOC0zMmM3LjcgMCAxNC45IDMuNiAxOS42IDkuOEwzOTIgMCA0NDQuMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjFMNDk2IDMyIDU1MiAzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI0YzAgNDQuMi0zNS44IDgwLTgwIDgwbC02NCAwLTcgMjgtMTI0LjctNTMuNCAzMS42LTE0Ny4yQzMzNC4zLTIzLjkgMzQ0LjItMzIgMzU1LjgtMzJ6TTQ0OCA0NGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6Il19LGU3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cnVjay1tb3ZpbmciLGljb246WzY0MCw1MTIsW10sImY0ZGYiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQyNGMwIDQ4LjYgMzkuNCA4OCA4OCA4OCAyNS4yIDAgNDgtMTAuNiA2NC0yNy42IDE2IDE3IDM4LjggMjcuNiA2NCAyNy42IDQwLjMgMCA3NC4yLTI3LjEgODQuNy02NGwxMzQuNiAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjQgNDMgMCA3OC45LTMwLjkgODYuNS03MS43IDIwLTEwLjggMzMuNS0zMiAzMy41LTU2LjNsMC0xNDYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1NzYgMTQ2LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdsLTUwLjcgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek00ODAgMTkybDUwLjcgMCA0NS4zIDQ1LjMgMCA1MC43LTk2IDAgMC05NnpNODggMzg0YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMzkyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTIxNiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdfSxJYWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicm90YXRlIixpY29uOls1MTIsNTEyLFsxMjgyNjAsInN5bmMtYWx0Il0sImYyZjEiLCJNNDgwLjEgMTkybDcuOSAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTQ0YzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMlM0NzcuOSAuMiA0NzEgN0w0MTkuMyA1OC44QzM3NSAyMi4xIDMxOCAwIDI1NiAwIDEyNyAwIDIwLjMgOTUuNCAyLjYgMjE5LjUgLjEgMjM3IDEyLjIgMjUzLjIgMjkuNyAyNTUuN3MzMy43LTkuNyAzNi4yLTI3LjFDNzkuMiAxMzUuNSAxNTkuMyA2NCAyNTYgNjQgMzAwLjQgNjQgMzQxLjIgNzkgMzczLjcgMTA0LjNMMzI3IDE1MWMtNi45IDYuOS04LjkgMTcuMi01LjIgMjYuMlMzMzQuMyAxOTIgMzQ0IDE5MmwxMzYuMSAwem0yOS40IDEwMC41YzIuNS0xNy41LTkuNy0zMy43LTI3LjEtMzYuMnMtMzMuNyA5LjctMzYuMiAyNy4xYy0xMy4zIDkzLTkzLjQgMTY0LjUtMTkwLjEgMTY0LjUtNDQuNCAwLTg1LjItMTUtMTE3LjctNDAuM0wxODUgMzYxYzYuOS02LjkgOC45LTE3LjIgNS4yLTI2LjJTMTc3LjcgMzIwIDE2OCAzMjBMMjQgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNEwwIDQ4OGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJTMzQuMSA1MTEuOCA0MSA1MDVsNTEuOC01MS44QzEzNyA0ODkuOSAxOTQgNTEyIDI1NiA1MTIgMzg1IDUxMiA0OTEuNyA0MTYuNiA1MDkuNCAyOTIuNXoiXX0sdDd0PUlhZSxGYWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLW1pbnVzIixpY29uOls0NDgsNTEyLFs2MTc2NywibWludXMtc3F1YXJlIl0sImYxNDYiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNzIgMjAwbDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sYTd0PUZhZSxyN3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYWxpZ24tanVzdGlmeSIsaWNvbjpbNDQ4LDUxMixbXSwiZjAzOSIsIk00NDggNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem0wIDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6TTAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTQ0OCA0NDhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyeiJdfSxpN3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FsZW5kYXItY2hlY2siLGljb246WzQ0OCw1MTIsW10sImYyNzQiLCJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0yMiAxNjEuN2MtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNMMTg5LjEgMzMxLjIgMTM3IDI3OS4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzUgNSAxMS45IDcuNSAxOC44IDdzMTMuNC00LjEgMTcuNS05LjhMMzQ3LjMgMTk1LjJjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6Il19LE9hZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWtpc3MiLGljb246WzUxMiw1MTIsWzEyODUzNSwia2lzcyJdLCJmNTk2IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yNDAgMjg4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxMi4zLTQuNiAyMy41LTEyLjIgMzIgNy42IDguNSAxMi4yIDE5LjcgMTIuMiAzMiAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bS05Ni04MGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxvN3Q9T2FlLHM3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJraXRjaGVuLXNldCIsaWNvbjpbNTc2LDUxMixbXSwiZTUxYSIsIk0yNDAgMTQ0YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHptNDQuNCAzMkMyNjkuOSAyNDAuMSAyMTIuNSAyODggMTQ0IDI4OCA2NC41IDI4OCAwIDIyMy41IDAgMTQ0UzY0LjUgMCAxNDQgMGM2OC41IDAgMTI1LjkgNDcuOSAxNDAuNCAxMTJsNzEuOCAwYzguOC05LjggMjEuNi0xNiAzNS44LTE2bDEwNCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xMDQgMGMtMTQuMiAwLTI3LTYuMi0zNS44LTE2bC03MS44IDB6TTE0NCA4MGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNDAwIDI0MGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDggOTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOTYgMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTI4OCA0NjRsMC0xMTIgMjI0IDAgMCAxMTJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OHpNNDggMzIwbDEyOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xNiAwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnptMTI4IDY0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwIDAgMzIgMTYgMHpNMjQgNDY0bDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sbjd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRuYSIsaWNvbjpbMzg0LDUxMixbMTI5NTE2XSwiZjQ3MSIsIk0zNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMiAwIDU3LjgtMjQuNCAxMDQuOC01Ny40IDE0NC41LTI0LjEgMjguOS01My44IDU1LjEtODMuNiA3OS41IDI5LjggMjQuNSA1OS41IDUwLjYgODMuNiA3OS41IDMzIDM5LjYgNTcuNCA4Ni43IDU3LjQgMTQ0LjUgMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJMNjQgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDk3LjcgMCA0ODBDMCA0MjIuMiAyNC40IDM3NS4yIDU3LjQgMzM1LjUgODEuNSAzMDYuNiAxMTEuMiAyODAuNSAxNDEgMjU2IDExMS4yIDIzMS41IDgxLjUgMjA1LjQgNTcuNCAxNzYuNSAyNC40IDEzNi44IDAgODkuOCAwIDMyIDAgMTQuMyAxNC4zIDAgMzIgMFM2NCAxNC4zIDY0IDMybDI1NiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yODMuNSAzODRsLTE4Mi45IDBjLTguMiAxMC41LTE1LjEgMjEuMS0yMC42IDMybDIyNC4yIDBjLTUuNi0xMC45LTEyLjUtMjEuNS0yMC42LTMyek0yMzggMzM2Yy0xNC4zLTEzLTI5LjgtMjUuOC00Ni0zOS0xNi4yIDEzLjEtMzEuNyAyNi00NiAzOWw5MiAwek0xMDAuNSAxMjhsMTgyLjkgMGM4LjItMTAuNSAxNS4xLTIxLjEgMjAuNi0zMkw3OS45IDk2YzUuNiAxMC45IDEyLjUgMjEuNSAyMC42IDMyek0xNDYgMTc2YzE0LjMgMTMgMjkuOCAyNS44IDQ2IDM5IDE2LjItMTMuMSAzMS43LTI2IDQ2LTM5bC05MiAweiJdfSxsN3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hpbGQtcmVhY2hpbmciLGljb246WzM4NCw1MTIsW10sImU1OWQiLCJNMjU2IDY0YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNMTUyLjkgMTY5LjNjLTIzLjctOC40LTQ0LjUtMjQuMy01OC44LTQ1LjhMNzQuNiA5NC4yQzY0LjggNzkuNSA0NSA3NS42IDMwLjMgODUuNFMxMS42IDExNSAyMS40IDEyOS44TDQwLjkgMTU5YzE4LjEgMjcuMSA0Mi44IDQ4LjQgNzEuMSA2Mi40TDExMiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDMyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU4LjRjMjkuMS0xNC4yIDU0LjQtMzYuMiA3Mi43LTY0LjJsMTguMi0yNy45YzkuNi0xNC44IDUuNC0zNC42LTkuNC00NC4zcy0zNC42LTUuNS00NC4zIDkuNEwyOTEgMTIyLjRjLTIxLjggMzMuNC01OC45IDUzLjYtOTguOCA1My42LTEyLjYgMC0yNC45LTItMzYuNi01LjgtLjktLjMtMS44LS43LTIuNy0uOXoiXX0sZzc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGFzdGUiLGljb246WzUxMiw1MTIsWyJmaWxlLWNsaXBib2FyZCJdLCJmMGVhIiwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDExMiAwIDAtMjI0YzAtNjEuOSA1MC4xLTExMiAxMTItMTEybDY0IDAgMC00OGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek0yNDggMTEybC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptNDAgNDhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE2MCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTY1LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNsLTU4LjUtNTguNWMtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0wyODggMTYweiJdfSxjN3Q9ZzcsZDd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1ldGVvciIsaWNvbjpbNTEyLDUxMixbOTczMl0sImY3NTMiLCJNNDkzLjcgLjlsLTE5NC4yIDc0LjcgMi4zLTI5LjNjMS0xMi44LTEyLjgtMjEuNS0yNC0xNS4xTDEwMS4zIDEzMy40QzM4LjYgMTY5LjcgMCAyMzYuNiAwIDMwOSAwIDQyMS4xIDkwLjkgNTEyIDIwMyA1MTIgMjc1LjQgNTEyIDM0Mi4zIDQ3My40IDM3OC42IDQxMC43TDQ4MC44IDIzNC4zYzYuNS0xMS4xLTIuMi0yNS0xNS4xLTI0bC0yOS4zIDIuMyA3NC43LTE5NC4yYy42LTEuNSAuOS0zLjIgLjktNC44IDAtNy41LTYtMTMuNS0xMy41LTEzLjUtMS43IDAtMy4zIC4zLTQuOCAuOXpNMTkyIDE5MmExMjggMTI4IDAgMSAxIDAgMjU2IDEyOCAxMjggMCAxIDEgMC0yNTZ6bTAgOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTYgOTZhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyeiJdfSxCYWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2VhcnMiLGljb246WzY0MCw1MTIsWyJjb2dzIl0sImYwODUiLCJNNDE1LjkgMjEwLjVjMTIuMi0zLjMgMjUgMi41IDMwLjUgMTMuOEw0NjUgMjYxLjljMTAuMyAxLjQgMjAuNCA0LjIgMjkuOSA4LjFsMzUtMjMuM2MxMC41LTcgMjQuNC01LjYgMzMuMyAzLjNsMTkuMiAxOS4yYzguOSA4LjkgMTAuMyAyMi45IDMuMyAzMy4zbC0yMy4zIDM0LjljMS45IDQuNyAzLjYgOS42IDUgMTQuNyAxLjQgNS4xIDIuMyAxMC4xIDMgMTUuMmwzNy43IDE4LjZjMTEuMyA1LjYgMTcuMSAxOC40IDEzLjggMzAuNWwtNyAyNi4yYy0zLjMgMTIuMS0xNC42IDIwLjMtMjcuMiAxOS41bC00Mi0yLjdjLTYuMyA4LjEtMTMuNiAxNS42LTIxLjkgMjJsMi43IDQxLjljLjggMTIuNi03LjQgMjQtMTkuNSAyNy4ybC0yNi4yIDdjLTEyLjIgMy4zLTI0LjktMi41LTMwLjUtMTMuOGwtMTguNi0zNy42Yy0xMC4zLTEuNC0yMC40LTQuMi0yOS45LTguMWwtMzUgMjMuM2MtMTAuNSA3LTI0LjQgNS42LTMzLjMtMy4zbC0xOS4yLTE5LjJjLTguOS04LjktMTAuMy0yMi44LTMuMy0zMy4zbDIzLjMtMzVjLTEuOS00LjctMy42LTkuNi01LTE0LjdzLTIuMy0xMC4yLTMtMTUuMmwtMzcuNy0xOC42Yy0xMS4zLTUuNi0xNy0xOC40LTEzLjgtMzAuNWw3LTI2LjJjMy4zLTEyLjEgMTQuNi0yMC4zIDI3LjItMTkuNWw0MS45IDIuN2M2LjMtOC4xIDEzLjYtMTUuNiAyMS45LTIybC0yLjctNDEuOGMtLjgtMTIuNiA3LjQtMjQgMTkuNS0yNy4ybDI2LjItN3pNNDQ4LjQgMzQwYTQ0IDQ0IDAgMSAwIC4xIDg4IDQ0IDQ0IDAgMSAwIC0uMS04OHpNMjI0LjktNDUuNWwyNi4yIDdjMTIuMSAzLjMgMjAuMyAxNC43IDE5LjUgMjcuMmwtMi43IDQxLjhjOC4zIDYuNCAxNS42IDEzLjggMjEuOSAyMmw0Mi0yLjdjMTIuNS0uOCAyMy45IDcuNCAyNy4yIDE5LjVsNyAyNi4yYzMuMiAxMi4xLTIuNSAyNC45LTEzLjggMzAuNWwtMzcuNyAxOC42Yy0uNyA1LjEtMS43IDEwLjItMyAxNS4ycy0zLjEgMTAtNSAxNC43bDIzLjMgMzVjNyAxMC41IDUuNiAyNC40LTMuMyAzMy4zTDMwNy4zIDI2MmMtOC45IDguOS0yMi44IDEwLjMtMzMuMyAzLjNMMjM5IDI0MmMtOS41IDMuOS0xOS42IDYuNy0yOS45IDguMWwtMTguNiAzNy42Yy01LjYgMTEuMy0xOC40IDE3LTMwLjUgMTMuOGwtMjYuMi03Yy0xMi4yLTMuMy0yMC4zLTE0LjctMTkuNS0yNy4ybDIuNy00MS45Yy04LjMtNi40LTE1LjYtMTMuOC0yMS45LTIybC00MiAyLjdjLTEyLjUgLjgtMjMuOS03LjQtMjcuMi0xOS41bC03LTI2LjJjLTMuMi0xMi4xIDIuNS0yNC45IDEzLjgtMzAuNWwzNy43LTE4LjZjLjctNS4xIDEuNy0xMC4xIDMtMTUuMiAxLjQtNS4xIDMtMTAgNS0xNC43TDU1LjEgNDYuNWMtNy0xMC41LTUuNi0yNC40IDMuMy0zMy4zTDc3LjYtNmM4LjktOC45IDIyLjgtMTAuMyAzMy4zLTMuM2wzNSAyMy4zYzkuNS0zLjkgMTkuNi02LjcgMjkuOS04LjFsMTguNi0zNy42YzUuNi0xMS4zIDE4LjMtMTcgMzAuNS0xMy44ek0xOTIuNCA4NGE0NCA0NCAwIDEgMCAwIDg4IDQ0IDQ0IDAgMSAwIDAtODh6Il19LGY3dD1CYWUsdTd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtY2lyY2xlLXBsdXMiLGljb246WzU3Niw1MTIsWzU4NjA2XSwiZTQ5NCIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0xNi0yMDhsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDQ4IDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2eiJdfSxwN3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaWNpY2xlcyIsaWNvbjpbNTEyLDUxMixbXSwiZjdhZCIsIk03NS44IDMwNC44TDEgMzUuN0MuMyAzMy4yIDAgMzAuNyAwIDI4LjIgMCAxMi42IDEyLjYgMCAyOC4yIDBMNDgyLjQgMGMxNi4zIDAgMjkuNiAxMy4yIDI5LjYgMjkuNiAwIDEuNi0uMSAzLjMtLjQgNC45TDQzNC42IDQ5Ni4xYy0xLjUgOS4yLTkuNSAxNS45LTE4LjggMTUuOS05LjIgMC0xNy4xLTYuNi0xOC43LTE1LjZMMzM2IDE2MCAzMDcuMiAzMDMuOWMtMS45IDkuMy0xMC4xIDE2LjEtMTkuNiAxNi4xLTkuMiAwLTE3LjItNi4yLTE5LjQtMTUuMUwyNDAgMTkyIDIxMC42IDM2OC4yYy0xLjUgOS4xLTkuNCAxNS44LTE4LjYgMTUuOHMtMTcuMS02LjctMTguNi0xNS44TDE0NCAxOTIgMTE1LjkgMzA0LjNjLTIuMyA5LjItMTAuNiAxNS43LTIwLjEgMTUuNy05LjMgMC0xNy41LTYuMi0yMC0xNS4yeiJdfSxoN3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdHJlbmQtdXAiLGljb246WzU3Niw1MTIsW10sImUwOTgiLCJNMzg0IDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTgyLjctMTY5LjQgMTY5LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwTDE5MiAyNjkuMyA1NC42IDQwNi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwTDMyMCAzMDYuNyA0NjYuNyAxNjAgMzg0IDE2MHoiXX0sbTd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhleGFnb24tbm9kZXMtYm9sdCIsaWNvbjpbNTc2LDUxMixbXSwiZTY5YSIsIk0yNDggMTA2LjZjMTguOS05IDMyLTI4LjMgMzItNTAuNmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NmMwIDIyLjMgMTMuMSA0MS42IDMyIDUwLjZsMCA5OC44Yy0yLjggMS4zLTUuNSAyLjktOCA0LjdsLTgwLjEtNDUuOGMxLjYtMjAuOC04LjYtNDEuNi0yNy45LTUyLjhDNTcuMiA5NiAyMyAxMDUuMiA3LjUgMTMyUzEuMiAxOTMgMjggMjA4LjVjMS4zIC44IDIuNiAxLjUgNCAyLjFsMCA5MC44Yy0xLjMgLjYtMi43IDEuMy00IDIuMUMxLjIgMzE5LTggMzUzLjIgNy41IDM4MFM1Ny4yIDQxNiA4NCA0MDAuNWMxOS4zLTExLjEgMjkuNC0zMiAyNy44LTUyLjhsNTAuNS0yOC45Yy0xMS41LTExLjItMTkuOS0yNS42LTIzLjgtNDEuN0w4OCAzMDYuMWMtMi42LTEuOC01LjItMy4zLTgtNC43bDAtOTAuOGMyLjgtMS4zIDUuNS0yLjkgOC00LjdsODAuMSA0NS44Yy0uMSAxLjQtLjIgMi44LS4yIDQuM2MwIDIyLjMgMTMuMSA0MS42IDMyIDUwLjZsMCA5OC44Yy0xOC45IDktMzIgMjguMy0zMiA1MC42YzAgMzAuOSAyNS4xIDU2IDU2IDU2YzMwLjcgMCA1NS42LTI0LjcgNTYtNTUuMmMtNy41LTEyLjktMTMuNS0yNi44LTE3LjYtNDEuNWMtNC4yLTQtOS4xLTcuMy0xNC40LTkuOWwwLTk4LjhjMi44LTEuMyA1LjUtMi45IDgtNC43bDEwLjUgNmM1LjUtMTUuMyAxMy4xLTI5LjUgMjIuNC00Mi41bC05LjEtNS4yYy4xLTEuNCAuMi0yLjggLjItNC4zYzAtMjIuMy0xMy4xLTQxLjYtMzItNTAuNmwwLTk4Ljh6TTQ0MC41IDEzMkM0MjUgMTA1LjIgMzkwLjggOTYgMzY0IDExMS41Yy0xOS4zIDExLjEtMjkuNCAzMi0yNy44IDUyLjhsLTUwLjYgMjguOWMxMS41IDExLjIgMTkuOSAyNS42IDIzLjggNDEuN0wzNjAgMjA1LjljLjQgLjMgLjggLjYgMS4zIC45YzIxLjctOS41IDQ1LjYtMTQuOCA3MC44LTE0LjhjMiAwIDQgMCA1LjkgLjFjMTIuMS0xNy4zIDEzLjgtNDAuNiAyLjYtNjAuMXpNNDMyIDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTQ3LjktMjI1YzQuMyAzLjcgNS40IDkuOSAyLjYgMTQuOUw0NTIuNCAzNTZsMzUuNiAwYzUuMiAwIDkuOCAzLjMgMTEuNCA4LjJzLS4xIDEwLjMtNC4yIDEzLjRsLTk2IDcyYy00LjUgMy40LTEwLjggMy4yLTE1LjEtLjZzLTUuNC05LjktMi42LTE0LjlMNDExLjYgMzgwIDM3NiAzODBjLTUuMiAwLTkuOC0zLjMtMTEuNC04LjJzLjEtMTAuMyA0LjItMTMuNGw5Ni03MmM0LjUtMy40IDEwLjgtMy4yIDE1LjEgLjZ6Il19LGc3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJxdWVzdGlvbiIsaWNvbjpbMzIwLDUxMixbMTAwNjcsMTAwNjgsNjE3MzZdLCIzZiIsIk02NCAxNjBjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmMwIDQyLjctMjcuOSA3OC45LTY2LjUgOTEuNC0yOC40IDkuMi02MS41IDM1LjMtNjEuNSA3Ni42bDAgMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0YzAtMS43IC42LTQuMSAzLjUtNy4zIDMtMy4zIDcuOS02LjUgMTMuNy04LjQgNjQuMy0yMC43IDExMC44LTgxIDExMC44LTE1Mi4zIDAtODguNC03MS42LTE2MC0xNjAtMTYwUzAgNzEuNiAwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem05NiAzNTJjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDAtNDAgMTcuOS00MCA0MCAxNy45IDQwIDQwIDQweiJdfSx4N3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZHMtYm91bmQiLGljb246WzU3Niw1MTIsW10sImU0ZjkiLCJNNjQgMzJDNjQgMTQuMyA0OS43IDAgMzIgMFMwIDE0LjMgMCAzMkwwIDIxMy45YzAgMTQuMiA1LjEgMjcuOSAxNC4zIDM4LjdMOTkuNiAzNTIgOTYgMzUyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDM4NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zLjYgMCA4NS4zLTk5LjVjOS4yLTEwLjggMTQuMy0yNC41IDE0LjMtMzguN0w1NzYgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMTIuOC02OS4zIDkyLjRjLTUuNyA3LjYtMTYuMSA5LjYtMjQuMiA0LjgtOS43LTUuNy0xMi4xLTE4LjctNS4xLTI3LjVMNDQxIDE4MGMxMC44LTEzLjUgOC45LTMzLjMtNC40LTQ0LjVzLTMzLTkuOC00NC41IDMuMmwtNDYuNyA1Mi41QzMyOSAyMDkuNyAzMjAgMjMzLjQgMzIwIDI1OC4xbDAgOTMuOS02NCAwIDAtOTMuOWMwLTI0LjYtOS00OC40LTI1LjQtNjYuOGwtNDYuNy01Mi41Yy0xMS41LTEzLTMxLjMtMTQuNC00NC41LTMuMlMxMjQuMiAxNjYuNCAxMzUgMTgwbDI3LjYgMzQuNWM3IDguOCA0LjcgMjEuOC01LjEgMjcuNS04LjEgNC44LTE4LjYgMi43LTI0LjItNC44TDY0IDE0NC44IDY0IDMyem02NCA0NDhsMCAzMiAxMjggMCAwLTMyIDY0IDAgMCAzMiAxMjggMCAwLTMyIDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMOTYgNDMyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDB6Il19LGI3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24td2Fsa2luZy1sdWdnYWdlIixpY29uOls1MTIsNTEyLFtdLCJlNTU0IiwiTTI2NC4zIDI0YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptLTggMTgxLjNsLTIyLjYgMjIuNmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgMzcuNWMwIDEyLjMtNyAyMy0xNy4yIDI4LjQtLjkgNC4yLTIuNCA4LjQtNC4zIDEyLjNsLTY5IDEzOC4xLS44LS40LTI3LjcgNTUuM2MtOS45IDE5LjgtMzMuOSAyNy44LTUzLjcgMTcuOUwxNC42IDUyMWMtMTkuOC05LjktMjcuOC0zMy45LTE3LjktNTMuN0w0Ny4zIDM2Ni4zYzkuOS0xOS44IDMzLjktMjcuOCA1My43LTE3LjlsMzAuNyAxNS4zIDI4LjMtNTYuNmMuMy0uNiAuNC0xLjIgLjQtMS44bDAtMTYuOWMwLS4yIDAtLjMgMC0uNWwwLTM3LjVjMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlsMzUuMS0zNS4xYzIyLjgtMjIuOCA1My42LTM1LjYgODUuOC0zNS42IDM2LjkgMCA3MS44IDE2LjggOTQuOCA0NS42TDQyMi4xIDE4MGM2LjEgNy42IDE1LjMgMTIgMjUgMTJsMzMuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMy4yIDBjLTI5LjIgMC01Ni43LTEzLjMtNzUtMzZsLTMuOC00LjcgMCAxMTUuMiAzNC41IDI5LjZjMTcuNyAxNS4yIDI5LjMgMzYuMiAzMi42IDU5LjNMNDQ4IDUwNy41YzIuNSAxNy41LTkuNyAzMy43LTI3LjIgMzYuMnMtMzMuNy05LjctMzYuMi0yNy4yTDM3MiA0MjguNGMtMS4xLTcuNy01LTE0LjctMTAuOS0xOS44bC03MS40LTYxLjJjLTIxLjMtMTguMi0zMy41LTQ0LjktMzMuNS03Mi45bDAtNjkuM3ptLjEgMTY1LjhjMi40IDIuMyA0LjggNC42IDcuNCA2LjhsNDYgMzkuNC0yLjIgNy42Yy00LjUgMTUuNy0xMi45IDMwLTI0LjQgNDEuNWwtNjguMyA2OC4zYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyMzggNDIxLjFjMy44LTMuOCA2LjYtOC42IDguMS0xMy44TDI1Ni40IDM3MXoiXX0sUmFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtYXJyb3ctZG93biIsaWNvbjpbMzg0LDUxMixbImZpbGUtZG93bmxvYWQiXSwiZjU2ZCIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTc1IDQ0MWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw2NC02NGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0yMyAyMyAwLTg2LjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA4Ni4xLTIzLTIzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDY0IDY0eiJdfSx2N3Q9UmFlLHk3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tYm9vdGgiLGljb246WzU3Niw1MTIsW10sImY3NTYiLCJNNDAgMjRBNTYgNTYgMCAxIDEgMTUyIDI0IDU2IDU2IDAgMSAxIDQwIDI0em01MS4xIDg4YzIzLjUgMCA0NS41IDExLjMgNTkuMSAzMC40bDQ4LjcgNjguMmM2IDguNCAxNS43IDEzLjQgMjYgMTMuNGwzMS4xIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMxLjEgMGMtMzEgMC02MC4xLTE1LTc4LjEtNDAuMmwtMi44LTMuOSAwIDgwLjEgNDEuNiAzMS4yQzIwOS44IDM3My4zIDIyNCA0MDEuOCAyMjQgNDMybDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MGMwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42TDcwLjQgMzQ4LjhDNDYuMiAzMzAuNyAzMiAzMDIuMiAzMiAyNzJsMC0xMDAuOUMzMiAxMzguNSA1OC41IDExMiA5MS4xIDExMnpNMzIgNTEybDAtMTMyLjdjMy4xIDIuNyA2LjMgNS40IDkuNiA3LjlMOTYgNDI4IDk2IDUxMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptNTQ0LTg4bDAgOTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03Mi0xNjggMGMtNy4xIDAtMTMuOC0zLjEtMTguNC04LjZzLTYuNS0xMi42LTUuMy0xOS42bDMwLjctMTc2LjctNjMuMS0xMzcuNiAwIDcyYy01LjItMS0xMC41LTEuNi0xNi0xLjZsLTMyIDAgMC0xMjBjMC0zMC45IDI1LjEtNTYgNTYtNTZMNTIwIDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCAzNjh6TTI4OCAzMzZjNS41IDAgMTAuOC0uNiAxNi0xLjZMMzA0IDUyMGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE4NCAzMiAweiJdfSx3N3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibG9jdXN0IixpY29uOls1NzYsNTEyLFtdLCJlNTIwIiwiTTMyOCAzMmMxMzcgMCAyNDggMTExIDI0OCAyNDhsMCA0MC0uNCA4LjJDNTcxLjUgMzY4LjUgNTM3LjQgNDAwIDQ5NiA0MDBsLTEyLjMgMCAyNS4yIDQ0LjFjNi42IDExLjUgMi42IDI2LjItOC45IDMyLjhzLTI2LjIgMi42LTMyLjctOC45bC0zOC44LTY3LjktODAuNCAwLTQ4LjIgNjkuN2MtNy41IDEwLjktMjIuNSAxMy42LTMzLjQgNi4xcy0xMy42LTIyLjUtNi4xLTMzLjRsMjkuMy00Mi4zLTc0LjUgMC01MS43IDcwLjJjLTcuOSAxMC43LTIyLjkgMTIuOS0zMy42IDUuMXMtMTIuOS0yMi45LTUuMS0zMy42bDQwLjUtNTUtNDMtMTYuNC03OS4zIDEwMC41Yy04LjIgMTAuNC0yMy4zIDEyLjItMzMuNyA0cy0xMi4yLTIzLjMtNC0zMy43bDI0MC0zMDQgMi4xLTIuM2M1LjItNS4xIDEyLjUtNy41IDE5LjktNi42IDguNCAxLjEgMTUuNiA2LjUgMTguOSAxNC4zbDIxLjcgNTAuNyA0MC45LTU1LjUgMi4xLTIuNGM1LjEtNS4zIDEyLjUtOCAyMC03LjIgOC41IDEgMTUuOSA2LjUgMTkuMyAxNC40bDQxLjggOTcuNSA2NC4yIDBjMTAuMiAwIDIwIDIgMjkgNS41LTE2LjQtOTQtOTguMy0xNjUuNS0xOTctMTY1LjVsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTYgMHpNNDg4IDI5NmEyNCAyNCAwIDEgMCAwIDQ4IDI0IDI0IDAgMSAwIDAtNDh6TTQzLjUgMzMxLjFDMzYuMiAzMjEuNCAzMiAzMDkuNSAzMiAyOTYuOCAzMiAyNjUuNSA1Ny41IDI0MCA4OC45IDI0MGwyNy42IDAtNzIuOSA5MS4xek0yMjUuMSAyNDBsNDguMiAwIDEuNC0xLjktMTYuOS0zOS41LTMyLjcgNDEuNXptMTA3LjggMGw0Ni43IDAtMTcuMi00MC0yOS41IDQweiJdfSxIYWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmlnaHQtbG9uZyIsaWNvbjpbNTc2LDUxMixbImxvbmctYXJyb3ctYWx0LXJpZ2h0Il0sImYzMGIiLCJNNTY2LjYgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTEyOCAxMjhjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM4NCAzOTYuOSAzODQgMzg0bDAtNjQtMzM2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzJjMC0yNi41IDIxLjUtNDggNDgtNDhsMzM2IDAgMC02NGMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDEyOCAxMjh6Il19LE03dD1IYWUsejd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRydWNrLWRyb3BsZXQiLGljb246WzU3Niw1MTIsW10sImU1OGMiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzLjMgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDEwMi42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwzLjMgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTUxMiAyMzcuM2wwIDUwLjctOTYgMCAwLTk2IDUwLjcgMCA0NS4zIDQ1LjN6TTE1MiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yMzIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMjA4IDMwNGMtMzkuOCAwLTcyLTMyLjItNzItNzIgMC0zMy4yIDM0LjUtNzggNTUuOC0xMDIuNCA4LjctMTAgMjMuOC0xMCAzMi41IDAgMjEuMiAyNC40IDU1LjggNjkuMSA1NS44IDEwMi40IDAgNDgtMzIuMiA3Mi03MiA3MnoiXX0sazd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtaG9sZGluZy1tZWRpY2FsIixpY29uOls1NzYsNTEyLFtdLCJlMDVjIiwiTTI0MCAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNTYgNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC01NiAwIDAgNTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNTYtNTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw1NiAwIDAtNTZ6TTY2LjcgMzg0bDQyLjUtNDIuNWMyNC0yNCA1Ni42LTM3LjUgOTAuNS0zNy41TDM1MiAzMDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyLjYgMCAxMTkuNy04OC4yYzE3LjgtMTMuMSA0Mi44LTkuMyA1NS45IDguNXM5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0ODUuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM0LjcgMHoiXX0sUzd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtcG9pbnQtbGVmdCIsaWNvbjpbNTEyLDUxMixbXSwiZjBhNSIsIk0zMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhzMTQuMyAzMiAzMiAzMmwyMDggMCAwLTY0LTIwOCAwek0xOTIgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6bS02NC02NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTYgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6bTg4LTk2bC0uNiAwYzUuNCA5LjQgOC42IDIwLjMgOC42IDMyIDAgMTMuMi00IDI1LjQtMTAuOCAzNS42IDI0LjkgOC43IDQyLjggMzIuNSA0Mi44IDYwLjQgMCAxMS43LTMuMSAyMi42LTguNiAzMmw4LjYgMGM4OC40IDAgMTYwLTcxLjYgMTYwLTE2MGwwLTYxLjdjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC0xMS42LTExLjZDNDI5LjUgNzcuNSAzOTYuOSA2NCAzNjMgNjRsLTI3IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgODhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTU2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA1NmMwIDM5LjgtMzIuMiA3Mi03MiA3MnoiXX0sQzd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbGN1bGF0b3IiLGljb246WzM4NCw1MTIsWzEyODQyNV0sImYxZWMiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNOTYgNjRsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE2IDE2OGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwem04MCAyNGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6bTEyOC0yNGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwek04OCAzNTJhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4em0xMjgtMjRhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHptODAgMjRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4ek02NCA0MjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggNDQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMjMyLTI0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0LTI0LTEwLjctMjQtMjQgMTAuNy0yNCAyNC0yNHoiXX0seDc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWludXMiLGljb246WzQ0OCw1MTIsWzgyMTEsODcyMiwxMDEzNCwic3VidHJhY3QiXSwiZjA2OCIsIk0wIDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxMN3Q9eDcscWFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXVwLXotYSIsaWNvbjpbNTEyLDUxMixbInNvcnQtYWxwaGEtdXAtYWx0Il0sImY4ODIiLCJNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTgwIDgwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgMjUuNCAyNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwek0yODggNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNTAuNyAwLTczLjQgNzMuNGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMzA3LjEgMjI0IDMyMCAyMjRsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUwLjcgMCA3My40LTczLjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDYxIDMyIDQ0OCAzMkwzMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek00MTIuNiAyNzMuN0M0MDcuMiAyNjIuOCAzOTYuMSAyNTYgMzg0IDI1NnMtMjMuMiA2LjgtMjguNiAxNy43bC04MCAxNjBjLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM2w3LjItMTQuMyA4OC40IDAgNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45bC04MC0xNjB6TTM4NCAzNTkuNmwyMC4yIDQwLjQtNDAuNCAwIDIwLjItNDAuNHoiXX0sVDd0PXFhZSxfN3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWljcm9waG9uZS1zbGFzaCIsaWNvbjpbNTc2LDUxMixbXSwiZjEzMSIsIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQyNC43IDM1OC44QzQ1OC45IDMyNC4yIDQ4MCAyNzYuNiA0ODAgMjI0bDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MGMwIDM5LjMtMTUuNyA3NC45LTQxLjMgMTAwLjlMMzU2LjggMjkxQzM3My42IDI3My43IDM4NCAyNTAgMzg0IDIyNGwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDMwLjItMTUxLTE1MXptMjk4LjMgNDM0bC00MS40LTQxLjRjLTMuMyAuMi02LjUgLjMtOS44IC4zLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0bDAtMTAuMi00My42LTQzLjZjLTIuOCAzLjktNC40IDguNy00LjQgMTMuOGwwIDQwYzAgOTcuOSA3My4zIDE3OC43IDE2OCAxOTAuNWwwIDQ5LjUtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ5LjVjOS4zLTEuMiAxOC40LTMgMjcuMy01LjR6Il19LF9WPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1wZW4iLGljb246WzQ0OCw1MTIsWyJwZW4tc3F1YXJlIiwicGVuY2lsLXNxdWFyZSJdLCJmMTRiIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTMyNS44IDEzOS43bDE0LjQgMTQuNGMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtMjMuOCAyMy44LTcxLTcxIDIzLjgtMjMuOGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMHpNMTE5LjkgMjg5bDkxLjUtOTEuNiA3MSA3MS05MS42IDkxLjVjLTQuMSA0LjEtOS4yIDctMTQuOSA4LjRsLTYwLjEgMTVjLTUuNSAxLjQtMTEuMi0uMi0xNS4yLTQuMnMtNS42LTkuNy00LjItMTUuMmwxNS02MC4xYzEuNC01LjYgNC4zLTEwLjggOC40LTE0Ljl6Il19LEE3dD1fViwkN3Q9X1YsVmFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtZmlzdCIsaWNvbjpbMzg0LDUxMixbOTk5NCwiZmlzdC1yYWlzZWQiXSwiZjZkZSIsIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMi02NCAwIDAtMTEyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMlM5NiA0Ni4zIDk2IDY0bDAgODAtNjQgMCAwLTgwem0xOTIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NnptOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bS05NiA4OGwwLS42YzkuNCA1LjQgMjAuMyA4LjYgMzIgOC42IDEzLjIgMCAyNS40LTQgMzUuNi0xMC44IDguNyAyNC45IDMyLjUgNDIuOCA2MC40IDQyLjggMTEuNyAwIDIyLjYtMy4xIDMyLTguNmwwIDguNmMwIDUyLjMtMjUuMSA5OC44LTY0IDEyOGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC03OC40Yy0xNy4zLTcuOS0zMy4yLTE4LjgtNDYuOS0zMi41TDM3LjUgMzU3LjVDMTMuNSAzMzMuNSAwIDMwMC45IDAgMjY3bDAtMjdjMC0zNS4zIDI4LjctNjQgNjQtNjRsODggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw1NiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyeiJdfSxEN3Q9VmFlLFVhZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb21tZW50LXNtcyIsaWNvbjpbNTEyLDUxMixbInNtcyJdLCJmN2NkIiwiTTI1NiA0ODBjMTQxLjQgMCAyNTYtMTA3LjUgMjU2LTI0MFMzOTcuNCAwIDI1NiAwIDAgMTA3LjUgMCAyNDBjMCA1NC4zIDE5LjIgMTA0LjMgNTEuNiAxNDQuNUwyLjggNDc2LjhjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNXMxNy44IDkuOCAyNy4xIDUuOGwxMTguNC01MC43QzE4My43IDQ3Mi42IDIxOC45IDQ4MCAyNTYgNDgwek0xNDAuOCAxNzIuOGwxOS4yIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE5LjIgMGMtNS4zIDAtOS42IDQuMy05LjYgOS42czQuMyA5LjYgOS42IDkuNmMyMyAwIDQxLjYgMTguNiA0MS42IDQxLjZzLTE4LjYgNDEuNi00MS42IDQxLjZsLTI1LjYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwyNS42IDBjNS4zIDAgOS42LTQuMyA5LjYtOS42cy00LjMtOS42LTkuNi05LjZjLTIzIDAtNDEuNi0xOC42LTQxLjYtNDEuNnMxOC42LTQxLjYgNDEuNi00MS42em0xODguOCA0MS42YzAtMjMgMTguNi00MS42IDQxLjYtNDEuNmwxOS4yIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE5LjIgMGMtNS4zIDAtOS42IDQuMy05LjYgOS42czQuMyA5LjYgOS42IDkuNmMyMyAwIDQxLjYgMTguNiA0MS42IDQxLjZzLTE4LjYgNDEuNi00MS42IDQxLjZsLTI1LjYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwyNS42IDBjNS4zIDAgOS42LTQuMyA5LjYtOS42cy00LjMtOS42LTkuNi05LjZjLTIzIDAtNDEuNi0xOC42LTQxLjYtNDEuNnptLTk4LjMtMzMuOGwyNC43IDQxLjEgMjQuNy00MS4xYzMuNy02LjIgMTEuMS05LjEgMTgtNy4yczExLjcgOC4yIDExLjcgMTUuNGwwIDEwMi40YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDQuNi04LjcgMTQuNWMtMi45IDQuOC04LjEgNy44LTEzLjcgNy44cy0xMC44LTMtMTMuNy03LjhsLTguNy0xNC41IDAgNDQuNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTEwMi40YzAtNy4yIDQuOC0xMy41IDExLjctMTUuNHMxNC4zIDEgMTggNy4yeiJdfSxFN3Q9VWFlLE43dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaW0tY2FyZCIsaWNvbjpbMzg0LDUxMixbXSwiZjdjNCIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyNTguNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDgwYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTk2IDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0MCAxMjggMCAwLTcyLTk2IDB6TTY0IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwIDAtNzItODAgMCAwIDQwem0yNTYgMGwwLTQwLTEyOCAwIDAgNzIgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnptMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsLTQ4IDAgMCA3MiA4MCAwIDAtNDB6Il19LGphZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzY2FsZS1iYWxhbmNlZCIsaWNvbjpbNjQwLDUxMixbOTg3OCwiYmFsYW5jZS1zY2FsZSJdLCJmMjRlIiwiTTM4NCAzMmwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzOTguNCA5NmMtNS4yIDI1LjgtMjIuOSA0Ny4xLTQ2LjQgNTcuM2wwIDI5NC43IDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zODQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMCAwLTI5NC43Yy0yMy41LTEwLjMtNDEuMi0zMS42LTQ2LjQtNTcuM0wxMjggOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTI4IDBjMTQuNi0xOS40IDM3LjgtMzIgNjQtMzJzNDkuNCAxMi42IDY0IDMyem01NS42IDI4OEw1ODQuNCAzMjAgNTEyIDE5NS44IDQzOS42IDMyMHpNNTEyIDQxNmMtNjIuOSAwLTExNS4yLTM0LTEyNi03OC45LTIuNi0xMSAxLTIyLjMgNi43LTMyLjFsOTUuMi0xNjMuMmM1LTguNiAxNC4yLTEzLjggMjQuMS0xMy44czE5LjEgNS4zIDI0LjEgMTMuOGw5NS4yIDE2My4yYzUuNyA5LjggOS4zIDIxLjEgNi43IDMyLjEtMTAuOCA0NC44LTYzLjEgNzguOS0xMjYgNzguOXpNMTI2LjggMTk1LjhMNTQuNCAzMjAgMTk5LjMgMzIwIDEyNi44IDE5NS44ek0uOSAzMzcuMWMtMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMS0xMC44IDQ0LjgtNjMuMSA3OC45LTEyNiA3OC45UzExLjcgMzgyIC45IDMzNy4xeiJdfSxQN3Q9amFlLFdhZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXIiLGljb246WzUxMiw1MTIsWzEyODY2NCwiYXV0b21vYmlsZSJdLCJmMWI5IiwiTTEzNS4yIDExNy40bC0yNi4xIDc0LjYgMjkzLjggMC0yNi4xLTc0LjZDMzcyLjMgMTA0LjYgMzYwLjIgOTYgMzQ2LjYgOTZMMTY1LjQgOTZjLTEzLjYgMC0yNS43IDguNi0zMC4yIDIxLjR6TTM5LjYgMTk2LjhMNzQuOCA5Ni4zQzg4LjMgNTcuOCAxMjQuNiAzMiAxNjUuNCAzMmwxODEuMiAwYzQwLjggMCA3Ny4xIDI1LjggOTAuNiA2NC4zbDM1LjIgMTAwLjVjMjMuMiA5LjYgMzkuNiAzMi41IDM5LjYgNTkuMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMi0zMjAgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDI1NmMwLTI2LjcgMTYuNC00OS42IDM5LjYtNTkuMnpNMTI4IDMwNGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yODggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxJN3Q9V2FlLEdhZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjcm9wLXNpbXBsZSIsaWNvbjpbNTEyLDUxMixbImNyb3AtYWx0Il0sImY1NjUiLCJNMTI4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDE0LjMgNjQgMzJsMCAzMi0zMiAwQzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwOCAwIDAtNjQtMjA4IDAgMC0zNTJ6TTM4NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTIwOCAwIDAgNjQgMjA4IDAgMCAzNTJ6Il19LEY3dD1HYWUsTzd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1lZGFsIixpY29uOls0NDgsNTEyLFsxMjc5NDFdLCJmNWEyIiwiTTIyNC4zIDEyOEwxMzkuNy0xMi45Yy02LjUtMTAuOC0yMC4xLTE0LjctMzEuMy05LjFMMjEuOCAyMS4zQzkuOSAyNy4yIDUuMSA0MS42IDExIDUzLjVMODAuNiAxOTIuNmMtMzAuMSAzMy45LTQ4LjMgNzguNS00OC4zIDEyNy40IDAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtNDguOS0xOC4zLTkzLjUtNDguMy0xMjcuNEw0MzcuNiA1My41YzUuOS0xMS45IDEuMS0yNi4zLTEwLjctMzIuMkwzNDAuMi0yMi4xYy0xMS4yLTUuNi0yNC45LTEuNi0zMS4zIDkuMUwyMjQuMyAxMjh6bTMwLjggMTQyLjVjMS40IDIuOCA0IDQuNyA3IDUuMWw1MC4xIDcuM2M3LjcgMS4xIDEwLjcgMTAuNSA1LjIgMTZsLTM2LjMgMzUuNGMtMi4yIDIuMi0zLjIgNS4yLTIuNyA4LjNsOC42IDQ5LjljMS4zIDcuNi02LjcgMTMuNS0xMy42IDkuOWwtNDQuOC0yMy42Yy0yLjctMS40LTYtMS40LTguNyAwbC00NC44IDIzLjZjLTYuOSAzLjYtMTQuOS0yLjItMTMuNi05LjlsOC42LTQ5LjljLjUtMy0uNS02LjEtMi43LTguM2wtMzYuMy0zNS40Yy01LjYtNS40LTIuNS0xNC44IDUuMi0xNmw1MC4xLTcuM2MzLS40IDUuNy0yLjQgNy01LjFsMjIuNC00NS40YzMuNC03IDEzLjMtNyAxNi44IDBsMjIuNCA0NS40eiJdfSxCN3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2Nyb2xsIixpY29uOls1NzYsNTEyLFsxMjgyMjBdLCJmNzBlIiwiTTAgMTEyQzAgNzAuNSAzMS42IDM2LjQgNzIgMzIuNGwwLS40IDI4MCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAxNzYtMTc2IDBjLTM5LjggMC03MiAzMi4yLTcyIDcybDAgNjBjMCAyNC4zLTE5LjcgNDQtNDQgNDRzLTQ0LTE5LjctNDQtNDRsMC0yMjgtNjQgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC00OHpNMjM2LjggNDgwYzcuMS0xMy4xIDExLjItMjguMSAxMS4yLTQ0bDAtNjBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMjQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNGMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMjI3LjIgMHpNODAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDggNjQgMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdfSxSN3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1leGNlbCIsaWNvbjpbMzg0LDUxMixbXSwiZjFjMyIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTY0IDI2Ni43Yy03LjQtMTEtMjIuMy0xNC0zMy4zLTYuN3MtMTQgMjIuMy02LjcgMzMuM0wxNjMuMiAzNTIgMTI0IDQxMC43Yy03LjQgMTEtNC40IDI1LjkgNi43IDMzLjNzMjUuOSA0LjQgMzMuMy02LjdsMjgtNDIgMjggNDJjNy40IDExIDIyLjMgMTQgMzMuMyA2LjdzMTQtMjIuMyA2LjctMzMuM0wyMjAuOCAzNTIgMjYwIDI5My4zYzcuNC0xMSA0LjQtMjUuOS02LjctMzMuM3MtMjUuOS00LjQtMzMuMyA2LjdsLTI4IDQyLTI4LTQyeiJdfSxIN3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsdGVyIixpY29uOls1MTIsNTEyLFtdLCJmMGIwIiwiTTMyIDY0QzE5LjEgNjQgNy40IDcxLjggMi40IDgzLjhTLjIgMTA5LjUgOS40IDExOC42TDE5MiAzMDEuMyAxOTIgNDE2YzAgOC41IDMuNCAxNi42IDkuNCAyMi42bDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45UzMyMCA0OTIuOSAzMjAgNDgwbDAtMTc4LjcgMTgyLjYtMTgyLjZjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgNjQgNDgwIDY0TDMyIDY0eiJdfSxxN3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZHJ1bSIsaWNvbjpbNTEyLDUxMixbMTI5MzQ1XSwiZjU2OSIsIk01MDEuMiA3Ni4xYzExLjEtNy4zIDE0LjItMjIuMSA2LjktMzMuMnMtMjIuMS0xNC4yLTMzLjItNi45TDM3MC4yIDEwNC41QzMzNS44IDk4LjcgMjk3IDk2IDI1NiA5NiAxMTQuNiA5NiAwIDEyOCAwIDIwOEwwIDM2OGMwIDMxLjMgMjcuNCA1OC44IDcyIDc4LjdMNzIgMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMTkuNGMzMyA4LjkgNzEuMSAxNC41IDExMiAxNi4xTDIzMiAzNzZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwMy41YzQwLjktMS42IDc5LTcuMiAxMTItMTYuMUwzOTIgMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDIuN2M0NC42LTE5LjkgNzItNDcuNCA3Mi03OC43bDAtMTYwYzAtNDEuMS0zMC4yLTY5LjUtNzguOC04Ny40bDY3LjktNDQuNXpNMzA3LjQgMTQ1LjZsLTY0LjYgNDIuM2MtMTEuMSA3LjMtMTQuMiAyMi4xLTYuOSAzMy4yczIyLjEgMTQuMiAzMy4yIDYuOWwxMTEuMS03Mi44YzE0LjcgMy4yIDI3LjkgNyAzOS40IDExLjUgMzguOCAxNS4xIDQ0LjQgMzAuNiA0NC40IDQxLjMgMCAuOC0yLjcgMTcuMi00NiAzNS45LTM4LjkgMTYuOC05NiAyOC4xLTE2MiAyOC4xUzEzMi45IDI2MC43IDk0IDI0My45Yy00My4zLTE4LjctNDYtMzUuMS00Ni0zNS45IDAtMTAuNiA1LjYtMjYuMiA0NC40LTQxLjMgMzguMy0xNC45IDk1LjQtMjIuNyAxNjMuNi0yMi43IDE4IDAgMzUuMSAuNSA1MS40IDEuNnoiXX0sVjd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcC1waW4iLGljb246WzMyMCw1MTIsWzEyODIwNV0sImYyNzYiLCJNMTkyIDI4NC40QzI1Ni4xIDI2OS45IDMwNCAyMTIuNSAzMDQgMTQ0IDMwNCA2NC41IDIzOS41IDAgMTYwIDBTMTYgNjQuNSAxNiAxNDRjMCA2OC41IDQ3LjkgMTI1LjkgMTEyIDE0MC40TDEyOCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE5NS42ek0xNjggOTZjLTMwLjkgMC01NiAyNS4xLTU2IDU2IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNTcuNCA0Ni42LTEwNCAxMDQtMTA0IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0eiJdfSxZYWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2NhbGUtdW5iYWxhbmNlZC1mbGlwIixpY29uOls2NDAsNTEyLFsiYmFsYW5jZS1zY2FsZS1yaWdodCJdLCJmNTE2IiwiTTExOC4yIDYyLjRDMTAxLjUgNTYuOCA5Mi40IDM4LjYgOTggMjEuOVMxMjEuNy0zLjkgMTM4LjUgMS42bDExMyAzNy43YzEzLjktMjMuNSAzOS42LTM5LjMgNjguOS0zOS4zIDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgMy0uMiA1LjktLjUgOC44bDEyMi42IDQwLjljMTYuOCA1LjYgMjUuOCAyMy43IDIwLjIgNDAuNXMtMjMuNyAyNS44LTQwLjUgMjAuMkwzNjYuNyAxNDUuMmMtNC41IDMuMi05LjMgNS45LTE0LjQgOC4ybDAgMzI2LjdjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwIDAtMjk0LjdjLTIxLTkuMi0zNy4yLTI3LTQ0LjItNDlsLTEyNS45LTQyek0yMDAuOCAyODhMMTI4LjMgMTYzLjggNTUuOSAyODggMjAwLjggMjg4em0tNzIuNCA5NmMtNjIuOSAwLTExNS4yLTM0LTEyNi03OC45LTIuNi0xMSAxLTIyLjMgNi43LTMyLjFsOTUuMi0xNjMuMmM1LTguNiAxNC4yLTEzLjggMjQuMS0xMy44czE5LjEgNS4zIDI0LjEgMTMuOGw5NS4yIDE2My4yYzUuNyA5LjggOS4zIDIxLjEgNi43IDMyLjEtMTAuOCA0NC44LTYzLjEgNzguOS0xMjYgNzguOXptMzgyLjgtOTIuMmwtNzIuNCAxMjQuMiAxNDQuOSAwLTcyLjQtMTI0LjJ6bTEyNiAxNDEuM0M2MjYuNCA0NzggNTc0LjEgNTEyIDUxMS4yIDUxMnMtMTE1LjItMzQtMTI2LTc4LjljLTIuNi0xMSAxLTIyLjMgNi43LTMyLjFsOTUuMi0xNjMuMmM1LTguNiAxNC4yLTEzLjggMjQuMS0xMy44czE5LjEgNS4zIDI0LjEgMTMuOGw5NS4yIDE2My4yYzUuNyA5LjggOS4zIDIxLjEgNi43IDMyLjF6Il19LFU3dD1ZYWUsajd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93cy10by1jaXJjbGUiLGljb246WzUxMiw1MTIsW10sImU0YmQiLCJNOS40IDkuNEMyMS45LTMuMSA0Mi4xLTMuMSA1NC42IDkuNEwxMjggODIuNyAxMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE4LjcgMC03My40LTczLjRDLTMuMSA0Mi4xLTMuMSAyMS45IDkuNCA5LjR6TTIwMCAyNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek01MDIuNiA1NC42TDQyOS4zIDEyOCA0NDggMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxOC43IDczLjQtNzMuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0tNDUuMyA0NDhMMzg0IDQyOS4zIDM4NCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOC43IDAgNzMuNCA3My40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwek05LjQgNDU3LjRMODIuNyAzODQgNjQgMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4LjctNzMuNCA3My40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM3oiXX0sVzd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImVudmVsb3BlIixpY29uOls1MTIsNTEyLFsxMjgzODYsOTk5Myw2MTQ0M10sImYwZTAiLCJNNDggNjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4IDAgMTUuMSA3LjEgMjkuMyAxOS4yIDM4LjRsMjA4IDE1NmMxNy4xIDEyLjggNDAuNSAxMi44IDU3LjYgMGwyMDgtMTU2YzEyLjEtOS4xIDE5LjItMjMuMyAxOS4yLTM4LjQgMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggNjR6TTAgMTk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTg4LTE5OC40IDE0OC44Yy0zNC4xIDI1LjYtODEuMSAyNS42LTExNS4yIDBMMCAxOTZ6Il19LEc3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYWJ5IixpY29uOlszODQsNTEyLFtdLCJmNzdjIiwiTTEyMCA4OGE3MiA3MiAwIDEgMSAxNDQgMCA3MiA3MiAwIDEgMSAtMTQ0IDB6TTcuNyAxNDQuNWMxMy0xNy45IDM4LTIxLjggNTUuOS04LjhMOTkuOCAxNjJjMjYuOCAxOS41IDU5LjEgMzAgOTIuMiAzMHM2NS40LTEwLjUgOTIuMi0zMGwzNi4yLTI2LjRjMTcuOS0xMyA0Mi45LTkgNTUuOSA4LjhzOSA0Mi45LTguOCA1NS45bC0zNi4yIDI2LjRjLTEzLjYgOS45LTI4LjEgMTguMi00My4zIDI1bDAgMzYuMy0xOTIgMCAwLTM2LjNjLTE1LjItNi43LTI5LjctMTUuMS00My4zLTI1TDE2LjUgMjAwLjNjLTE3LjktMTMtMjEuOC0zOC04LjgtNTUuOXpNOTcuNSAzMjkuM2w2MC42IDUzLTI2IDM3LjIgMjQuMyAyNC4zYzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42cy00MC45IDE1LjYtNTYuNiAwbC00OC00OEMzOCA0MzguNiAzNi4xIDQxNyA0Ny4yIDQwMS4xbDUwLjItNzEuOHptMTI4LjUgNTNsNjAuNi01MyA1MC4yIDcxLjhjMTEuMSAxNS45IDkuMiAzNy41LTQuNSA1MS4ybC00OCA0OGMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZsMjQuMy0yNC4zLTI2LTM3LjJ6Il19LFphZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtY2FyZXQtZG93biIsaWNvbjpbNDQ4LDUxMixbImNhcmV0LXNxdWFyZS1kb3duIl0sImYxNTAiLCJNMzg0IDQ4MGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwek0yMjQgMzUyYy02LjcgMC0xMy0yLjgtMTcuNi03LjdsLTEwNC0xMTJjLTYuNS03LTguMi0xNy4yLTQuNC0yNS45UzExMC41IDE5MiAxMjAgMTkybDIwOCAwYzkuNSAwIDE4LjIgNS43IDIyIDE0LjRzMi4xIDE4LjktNC40IDI1LjlsLTEwNCAxMTJjLTQuNSA0LjktMTAuOSA3LjctMTcuNiA3Ljd6Il19LFk3dD1aYWUsWjd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlbnQiLGljb246WzUxMiw1MTIsW10sImU1N2QiLCJNMjYuOSAyMDYuOUwzLjcgNDQ0LjlDMS44IDQ2My43IDE2LjYgNDgwIDM1LjUgNDgwbDE3Mi43IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xMjljMC04LjMgNi43LTE1IDE1LTE1IDUuNSAwIDEwLjYgMyAxMy4yIDcuOWw4Ni4xIDE1OWM4LjQgMTUuNSAyNC42IDI1LjEgNDIuMiAyNS4xbDY0LjEgMGMxOC45IDAgMzMuNy0xNi4zIDMxLjgtMzUuMUw0ODUuNiAyMDcuMWMtMS45LTE5LjYtMTIuOC0zNy4zLTI5LjUtNDcuOEwyODAuOSA0OC4zYy0xNS43LTEwLTM1LjgtOS45LTUxLjUgLjFMNTYuMSAxNTkuMmMtMTYuNSAxMC42LTI3LjMgMjguMi0yOS4yIDQ3Ljd6Il19LFg3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhIixpY29uOlszODQsNTEyLFs5N10sIjQxIiwiTTIyMS41IDUxLjdDMjE2LjYgMzkuOCAyMDQuOSAzMiAxOTIgMzJzLTI0LjYgNy44LTI5LjUgMTkuN2MtOTMuMyAyMjQtMTQ2LjcgMzUyLTE2MCAzODQtNi44IDE2LjMgLjkgMzUgMTcuMiA0MS44czM1LS45IDQxLjgtMTcuMmwzMS44LTc2LjMgMTk3LjMgMCAzMS44IDc2LjNjNi44IDE2LjMgMjUuNSAyNCA0MS44IDE3LjJzMjQtMjUuNSAxNy4yLTQxLjhjLTEzLjMtMzItNjYuNy0xNjAtMTYwLTM4NHpNMjY0IDMyMGwtMTQ0IDAgNzItMTcyLjggNzIgMTcyLjh6Il19LFE3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwYXJhY2h1dGUtYm94IixpY29uOls1MTIsNTEyLFtdLCJmNGNkIiwiTTEyOCAyMjRDMTI4IDE1Mi4yIDE0NC4zIDg4LjQgMTY5LjUgNDMuNCAxOTUuMS0yLjQgMjI2LjYtMjQgMjU2LTI0czYwLjkgMjEuNiA4Ni41IDY3LjRDMzY3LjcgODguNCAzODQgMTUyLjIgMzg0IDIyNGwtMTA0IDAgMCA5NiA4IDBjOS4zIDAgMTguMSAyIDI2IDUuNWwxMTguNC0xMDEuNS0uNSAwYzAtNzguNC0xNy43LTE1MC42LTQ3LjYtMjA0LTYuMS0xMS0xMi45LTIxLjMtMjAuMy0zMC45IDg2LjUgMzUuOSAxNDcuOCAxMTUuMSAxNDcuOCAyMTguOSAwIDctMy4xIDEzLjctOC40IDE4LjJMMzQ3LjQgMzYwLjFjMyA3LjQgNC42IDE1LjQgNC42IDIzLjlsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTguNCAxLjYtMTYuNSA0LjYtMjMuOUw4LjQgMjI2LjJDMy4xIDIyMS43IDAgMjE1IDAgMjA4IDAgMTA0LjIgNjEuMyAyNC45IDE0Ny44LTEwLjkgMTQwLjUtMS40IDEzMy43IDkgMTI3LjYgMjAgOTcuNyA3My40IDgwIDE0NS42IDgwIDIyNGwtLjUgMCAxMTguNCAxMDEuNWM4LTMuNSAxNi44LTUuNSAyNi01LjVsOCAwIDAtOTYtMTA0IDB6Il19LEs3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXJ0LWFycm93LWRvd24iLGljb246WzY0MCw1MTIsW10sImYyMTgiLCJNMCA4QzAtNS4zIDEwLjctMTYgMjQtMTZsNDUuMyAwYzI3LjEgMCA1MC4zIDE5LjQgNTUuMSA0NmwuNCAyIDE4Ny4yIDAgMCAxMDIuMS0zMS0zMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw3Mi03MmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xIDE3Ny40IDBjMjAgMCAzNS4xIDE4LjIgMzEuNCAzNy45TDUzNy44IDIzNS44Yy01LjcgMzAuMy0zMi4xIDUyLjItNjIuOSA1Mi4ybC0zMDMuNiAwIDUuMSAyOC4zYzIuMSAxMS40IDEyIDE5LjcgMjMuNiAxOS43TDQ1NiAzMzZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI1NS45IDBjLTM0LjggMC02NC42LTI0LjktNzAuOC01OS4xTDc3LjIgMzguNmMtLjctMy44LTQtNi42LTcuOS02LjZMMjQgMzJDMTAuNyAzMiAwIDIxLjMgMCA4ek0xNjAgNDY0YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTIyNCAwYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6Il19LEo3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicmlkZ2UtY2lyY2xlLWV4Y2xhbWF0aW9uIixpY29uOls1NzYsNTEyLFtdLCJlNGNhIiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw4IDAgMCA2NC00MCAwIDAgMTEyYzM3LjYgOS40IDY0IDQzLjIgNjQgODJsMCA5NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NiA2LjQgMCAxMi43IC42IDE4LjcgMS44IDM0LjctNDkuNSA5Mi4yLTgxLjggMTU3LjMtODEuOCAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTY1LjQtNDAgMCAwLTY0IDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnpNNDI0IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTI5NiA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek04OCA5Nmw4MCAwIDAgNjQtODAgMCAwLTY0ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXX0sQVY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQtYXJyb3ctdXAiLGljb246WzU3Niw1MTIsWzYyMzM4LCJjbG91ZC11cGxvYWQiLCJjbG91ZC11cGxvYWQtYWx0Il0sImYwZWUiLCJNMTQ0IDQ4MGMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC02My40IDQxLTExNy4yIDk3LjktMTM2LjUtMS4zLTcuNy0xLjktMTUuNS0xLjktMjMuNSAwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NCA1NS40IDAgMTAzLjUgMzEuMyAxMjcuNiA3Ny4xIDE0LjItOC4zIDMwLjgtMTMuMSA0OC40LTEzLjEgNTMgMCA5NiA0MyA5NiA5NiAwIDE1LjctMy44IDMwLjYtMTAuNSA0My43IDQ0IDIwLjMgNzQuNSA2NC43IDc0LjUgMTE2LjMgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMwNCAwek0zMDUgMTkxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNzIgNzJjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwzMS0zMSAwIDEwMi4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDIuMSAzMSAzMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTcyLTcyeiJdfSxlZnQ9QVYsdGZ0PUFWLGFmdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhdCIsaWNvbjpbNTEyLDUxMixbNjE5NDZdLCI0MCIsIk0yNTYgNjRDMTUwIDY0IDY0IDE1MCA2NCAyNTZzODYgMTkyIDE5MiAxOTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJDMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMCA1MTIgMTE0LjYgNTEyIDI1NmwwIDMyYzAgNTMtNDMgOTYtOTYgOTYtMjkuMyAwLTU1LjYtMTMuMi03My4yLTMzLjktMjIuOCAyMS01My4zIDMzLjktODYuOCAzMy45LTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4czU3LjMtMTI4IDEyOC0xMjhjMjcuOSAwIDUzLjcgOC45IDc0LjcgMjQuMSA1LjctNSAxMy4xLTguMSAyMS4zLTguMSAxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJjMC0xMDYtODYtMTkyLTE5Mi0xOTJ6bTY0IDE5MmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6Il19LCRWPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImluZGlhbi1ydXBlZS1zaWduIixpY29uOlszMjAsNTEyLFsiaW5kaWFuLXJ1cGVlIiwiaW5yIl0sImUxYmMiLCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwyNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNzYuNyAwYzE3LjcgMTkuOCAzMC4xIDQ0LjYgMzQuNyA3Mmw0MiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MiAwYy0xMC40IDYyLjItNjAuOCAxMTAuOS0xMjMuOCAxMTguOUwyNzQuNiA0MjJjMTQuNCAxMC4zIDE3LjcgMzAuMyA3LjQgNDQuNnMtMzAuMyAxNy43LTQ0LjYgNy40TDEzLjQgMzE0QzIuMSAzMDYtMi43IDI5MS41IDEuNSAyNzguMlMxOC4xIDI1NiAzMiAyNTZsODAgMGMzNS44IDAgNjYuMS0yMy41IDc2LjMtNTZMMjQgMjAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2NC4zIDBjLTEwLjItMzIuNS00MC41LTU2LTc2LjMtNTZMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXX0scmZ0PSRWLGlmdD0kVixvZnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJ1Y2siLGljb246WzU3Niw1MTIsWzEyODY2Niw5OTUxXSwiZjBkMSIsIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIgNTAuNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDU1Ny4zIDE5MmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDU3NiAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMuMyAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NGwtMTAyLjYgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek01MTIgMjg4bDAtNTAuNy00NS4zLTQ1LjMtNTAuNyAwIDAgOTYgOTYgMHpNMTkyIDQyNGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwem0yMzIgNDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdfSxYYWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hhbGtib2FyZC11c2VyIixpY29uOls2NDAsNTEyLFsiY2hhbGtib2FyZC10ZWFjaGVyIl0sImY1MWMiLCJNMTI4IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwLTk2IDAgMC0xNmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxNi0xMjkuMSAwYzEwLjktMTguOCAxNy4xLTQwLjcgMTcuMS02NCAwLTcwLjctNTcuMy0xMjgtMTI4LTEyOC01LjQgMC0xMC44IC4zLTE2IDFsMC00OXpNMzMzIDQ0OGMtNS4xLTI0LjItMTYuMy00Ni4xLTMyLjEtNjRMNjA4IDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjExIDB6TTY0IDI3MmE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6TTAgNDgwYzAtNTMgNDMtOTYgOTYtOTZsOTYgMGM1MyAwIDk2IDQzIDk2IDk2IDAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il19LHNmdD1YYWUsbmZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItY2hlY2siLGljb246WzY0MCw1MTIsW10sImY0ZmMiLCJNMjg2IDMwNGM5OC41IDAgMTc4LjMgNzkuOCAxNzguMyAxNzguMyAwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0w3OCA1MTJjLTE2LjQgMC0yOS43LTEzLjMtMjkuNy0yOS43IDAtOTguNSA3OS44LTE3OC4zIDE3OC4zLTE3OC4zbDU5LjQgMHpNNTg1LjcgMTA1LjljNy44LTEwLjcgMjIuOC0xMy4xIDMzLjUtNS4zczEzLjEgMjIuOCA1LjMgMzMuNUw1MjIuMSAyNzQuOWMtNC4yIDUuNy0xMC43IDkuNC0xNy43IDkuOHMtMTQtMi4yLTE4LjktNy4zbC00Ni40LTQ4Yy05LjItOS41LTktMjQuNyAuNi0zMy45IDkuNS05LjIgMjQuNy04LjkgMzMuOSAuNmwyNi41IDI3LjQgODUuNi0xMTcuN3pNMjU2LjMgMjQ4YTEyMCAxMjAgMCAxIDEgMC0yNDAgMTIwIDEyMCAwIDEgMSAwIDI0MHoiXX0sbGZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItbmluamEiLGljb246WzQ0OCw1MTIsWzEyOTM5OV0sImY1MDQiLCJNMzUyIDEyOGMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOC01Ny4yIDAtMTA1LjYtMzcuNS0xMjItODkuMy0xLjEgMS4zLTIuMiAyLjYtMy41IDMuOC0xNS44IDE1LjgtMzguOCAyMC43LTUzLjYgMjIuMS04LjEgLjgtMTQuNi01LjctMTMuOC0xMy44IDEuNC0xNC43IDYuMy0zNy44IDIyLjEtNTMuNiA1LjgtNS44IDEyLjYtMTAuMSAxOS42LTEzLjQtNy0zLjItMTMuOC03LjYtMTkuNi0xMy40LTE1LjgtMTUuOC0yMC43LTM4LjgtMjIuMS01My42LS44LTguMSA1LjctMTQuNiAxMy44LTEzLjggMTQuNyAxLjQgMzcuOCA2LjMgNTMuNiAyMi4xIDQuOCA0LjggOC43IDEwLjQgMTEuNyAxNi4xIDIxLjMtNDEuMiA2NC4zLTY5LjQgMTEzLjgtNjkuNCA3MC43IDAgMTI4IDU3LjMgMTI4IDEyOHpNMTQ0IDExMmMwIDguOCA3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZMMTYwIDk2Yy04LjggMC0xNiA3LjItMTYgMTZ6bS0xLjQgMjExbDY3IDUwLjJjOC41IDYuNCAyMC4zIDYuNCAyOC44IDBsNjctNTAuMmM2LjUtNC45IDE1LjItNi4yIDIyLjYtMi44IDYxLjQgMjguMiAxMDQuMSA5MC4yIDEwNC4xIDE2Mi4xIDAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43TDQ1LjcgNTEyYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuNyAwLTcyIDQyLjctMTM0IDEwNC4xLTE2Mi4xIDcuNC0zLjQgMTYuMS0yLjEgMjIuNiAyLjh6Il19LGNmdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbGFudC13aWx0IixpY29uOls1MTIsNTEyLFtdLCJlNWFhIiwiTTM0NC0zMmM2Ni4zIDAgMTIwIDUzLjcgMTIwIDEyMGwwIDYuMmMyOS4zIDEyLjIgNDggNDEuMyA0OCA3Ni45IDAgMjcuOS0yNS4zIDc0LjgtNjYgMTExLjctMy44IDMuNS04LjggNS4zLTE0IDUuM3MtMTAuMi0xLjgtMTQtNS4zYy00MC43LTM2LjgtNjYtODMuNy02Ni0xMTEuNyAwLTM1LjYgMTguNy02NC43IDQ4LTc2LjlsMC02LjJjMC0zMC45LTI1LjEtNTYtNTYtNTZzLTU2IDI1LjEtNTYgNTZsMCA0MjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yOTZjMC0zMC45LTI1LjEtNTYtNTYtNTZzLTU2IDI1LjEtNTYgNTZsMCAzOC4yYzI5LjMgMTIuMiA0OCA0MS4zIDQ4IDc2LjkgMCAyNy45LTI1LjMgNzQuOC02NiAxMTEuNy0zLjggMy41LTguOCA1LjMtMTQgNS4zcy0xMC4yLTEuOC0xNC01LjNDMjUuMyA0MDUuOSAwIDM1OSAwIDMzMS4xIDAgMjk1LjQgMTguNyAyNjYuNCA0OCAyNTQuMkw0OCAyMTZjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjAgMjAuMiAwIDM5LjMgNSA1NiAxMy44TDIyNCA4OGMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMHoiXX0sUWFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndlaWdodC1zY2FsZSIsaWNvbjpbNDQ4LDUxMixbIndlaWdodCJdLCJmNDk2IiwiTTExNi42IDE5MmMtMy0xMC4xLTQuNi0yMC45LTQuNi0zMiAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMlMzMzYgOTguMSAzMzYgMTYwYzAgMTEuMS0xLjYgMjEuOS00LjYgMzJsLTcxIDAgMjQuNi00NC4zYzYuNC0xMS42IDIuMy0yNi4yLTkuMy0zMi42cy0yNi4yLTIuMy0zMi42IDkuM2wtMzcuNiA2Ny43LTg4LjggMHpNMTI4IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDBDMjkzLjMgMTEuOSAyNjAgMCAyMjQgMHMtNjkuMyAxMS45LTk2IDMyeiJdfSxkZnQ9UWFlLFNVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhcmV0LXJpZ2h0IixpY29uOlsyNTYsNTEyLFtdLCJmMGRhIiwiTTI0OS4zIDIzNS44YzEwLjIgMTIuNiA5LjUgMzEuMS0yLjIgNDIuOGwtMTI4IDEyOGMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTNjQuNSAzOTYuOSA2NC41IDM4NGwwLTI1NmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDEyOCAxMjggMi4yIDIuNHoiXX0sZmZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZsb3Jpbi1zaWduIixpY29uOlszODQsNTEyLFtdLCJlMTg0IiwiTTMxNC43IDMyYy0zOC44IDAtNzMuNyAyMy4zLTg4LjYgNTkuMUwxNzAuNyAyMjQgNjQgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDgwIDAtNDUuMSAxMDguM2MtNSAxMS45LTE2LjYgMTkuNy0yOS41IDE5LjdMMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM3LjMgMGMzOC44IDAgNzMuNy0yMy4zIDg4LjYtNTkuMUwyMTMuMyAyODggMzIwIDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtODAgMCA0NS4xLTEwOC4zYzUtMTEuOSAxNi42LTE5LjcgMjkuNS0xOS43TDM1MiA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzcuMyAweiJdfSxDVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiZWxsIixpY29uOls0NDgsNTEyLFsxMjgyNzYsNjE2MDJdLCJmMGYzIiwiTTIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMuMkMxMTkgNTAgNjQgMTE0LjYgNjQgMTkybDAgMjEuN2MwIDQ4LjEtMTYuNCA5NC44LTQ2LjQgMTMyLjRMNy44IDM1OC4zQzIuNyAzNjQuNiAwIDM3Mi40IDAgMzgwLjUgMCA0MDAuMSAxNS45IDQxNiAzNS41IDQxNmwzNzYuOSAwYzE5LjYgMCAzNS41LTE1LjkgMzUuNS0zNS41IDAtOC4xLTIuNy0xNS45LTcuOC0yMi4ybC05LjgtMTIuMkM0MDAuNCAzMDguNSAzODQgMjYxLjggMzg0IDIxMy43bDAtMjEuN2MwLTc3LjQtNTUtMTQyLTEyOC0xNTYuOGwwLTMuMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMTYyIDQ2NGM3LjEgMjcuNiAzMi4yIDQ4IDYyIDQ4czU0LjktMjAuNCA2Mi00OGwtMTI0IDB6Il19LHVmdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsYXJpLXNpZ24iLGljb246WzM4NCw1MTIsW10sImUxYzgiLCJNMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MS41YzcuOS0xIDE1LjktMS41IDI0LTEuNXMxNi4xIC41IDI0IDEuNUwyMTYgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDU0YzU4LjkgMjMuOCAxMDMuMiA3NiAxMTYuMiAxMzkuNyAzLjUgMTcuMy03LjcgMzQuMi0yNSAzNy43cy0zNC4yLTcuNy0zNy43LTI1Yy02LjctMzMuMi0yNi40LTYxLjgtNTMuNC04MC4ybDAgODEuOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTEwMS44Yy03LjgtMS41LTE1LjgtMi4yLTI0LTIuMnMtMTYuMiAuOC0yNCAyLjJMMTY4IDIzMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTgxLjhjLTMzLjggMjMtNTYgNjEuOS01NiAxMDUuOCAwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYuOSAwQzE4LjUgMzUwIDAgMzA1LjIgMCAyNTYgMCAxNzUuNCA0OS42IDEwNi40IDEyMCA3OGwwLTU0YzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdfSxwZnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWlsbC1zaWduIixpY29uOlszODQsNTEyLFtdLCJlMWVkIiwiTTI5Ny0yMi4yYzEyLjMgNSAxOC4yIDE5IDEzLjIgMzEuM2wtMjkgNzEuM0MzMzguOCA4NS4xIDM4NCAxMzMuMyAzODQgMTkybDAgMjA4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjA4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4LTYuNCAwLTEyLjUgMS4yLTE4IDMuNWwtMzAgNzMuOCAwIDE3OC43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjEuMi01Ny44IDE0Mi4yYy01IDEyLjMtMTkgMTguMi0zMS4zIDEzLjJzLTE4LjItMTktMTMuMi0zMS4zTDE2MCAyNTEuMyAxNjAgMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4bDAgMjA4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDE3LjcgMCA0MDBMMCAxMTJjMC0xNy43IDE0LjMtMzIgMzItMzIgMTAuOSAwIDIwLjUgNS40IDI2LjMgMTMuNyAxNi04LjcgMzQuMy0xMy43IDUzLjctMTMuNyAzMS4zIDAgNTkuNyAxMi45IDgwIDMzLjYgOS42LTkuOCAyMC45LTE3LjggMzMuNS0yMy41TDI2NS44LTljNS0xMi4zIDE5LTE4LjIgMzEuMy0xMy4yeiJdfSxLYWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXNub3dib2FyZGluZyIsaWNvbjpbNTc2LDUxMixbMTI3OTM4LCJzbm93Ym9hcmRpbmciXSwiZjdjZSIsIk00MjQuNSAxNmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMTY2LjQgNDUuNWMxMC4yLTE0LjQgMzAuMi0xNy45IDQ0LjYtNy43bDI3MiAxOTJjMTQuNCAxMC4yIDE3LjkgMzAuMiA3LjcgNDQuNnMtMzAuMiAxNy45LTQ0LjYgNy43bC05Mi4yLTY1LjEtNjIuMiA1My4zIDMyLjEgMjYuN2MxOC4yIDE1LjIgMjguOCAzNy43IDI4LjggNjEuNWwwIDg3LjggNzcuNSAxNS4yYzYuMiAxLjIgMTIuNiAuOSAxOC43LS44bDQxLjItMTEuOGMxMi43LTMuNiAyNiAzLjcgMjkuNyAxNi41cy0zLjcgMjYtMTYuNSAyOS43bC00MS4yIDExLjhjLTEzLjQgMy44LTI3LjQgNC40LTQxLjEgMS44TDg3LjEgNDQzLjNjLTE3LjItMy40LTMzLTExLjgtNDUuMy0yNC4xTDE1LjUgMzkzYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMjYuMiAyNi4yYzUuNiA1LjYgMTIuOCA5LjQgMjAuNiAxMWw2NC4yIDEyLjYgMC0xMjMuN2MwLTI3LjcgMTItNTQgMzIuOC03Mi4ybDY5LTYwLjQtODguMi02Mi4zQzE1OS42IDgwIDE1Ni4yIDYwIDE2Ni40IDQ1LjV6bTU4LjEgMzc1LjdsNjQgMTIuNSAwLTc1LjNjMC00LjctMi4xLTkuMy01LjgtMTIuM2wtNTguMi00OC41IDAgMTIzLjZ6Il19LGhmdD1LYWUsSmFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InR0eSIsaWNvbjpbNTEyLDUxMixbInRlbGV0eXBlIl0sImYxZTQiLCJNNDUwLjIgMjY2LjhjMTUuOCA2LjUgMzQuMSAuMyA0Mi42LTE0LjZsMi40LTQuMmMyNy45LTQ4LjkgMjMuNi0xMTguOC0zMS4zLTE1NC41LTEyNi04Mi0yODkuNi04Mi00MTUuNiAwLTU0LjkgMzUuNy01OS4zIDEwNS43LTMxLjMgMTU0LjVsMi40IDQuMmM4LjUgMTQuOSAyNi43IDIxLjEgNDIuNiAxNC42bDgxLjktMzMuN2MxMy45LTUuNyAyMi40LTE5LjkgMjAuOS0zNC45bC01LjEtNTFjNjIuNS0yMSAxMzAuOC0xOS45IDE5Mi42IDMuM2wtNC44IDQ3LjdjLTEuNSAxNSA3IDI5LjIgMjAuOSAzNC45bDgxLjkgMzMuN3pNMzIgMzUyYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6bTk2IDBhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHpNNjQgNDE2YTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptMzUyIDMyYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6TTI1NiAzMjBhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em02NCAzMmEzMiAzMiAwIDEgMCA2NCAwIDMyIDMyIDAgMSAwIC02NCAwem0xMjgtMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek0xMjggNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il19LG1mdD1KYWUsZ2Z0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXJzLXJlY3RhbmdsZSIsaWNvbjpbNTc2LDUxMixbXSwiZTU5NCIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0yMjQgNzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTAgMTUyYzUzIDAgOTYgNDMgOTYgOTZsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMjRjMC01MyA0My05NiA5Ni05NnptOTYtNjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMTY4IDI3Mi4zYy0xNS4yIDIyLjgtMjQgNTAuMi0yNCA3OS43bDAgMjRjMCA4LjQgMS40IDE2LjUgNC4xIDI0bC00Ni44IDBDODkuNiA0MDAgODAgMzkwLjQgODAgMzc4LjdMODAgMzY4YzAtNTAuMyAzOC43LTkxLjYgODgtOTUuN3pNNDI3LjkgNDAwYzIuNy03LjUgNC4xLTE1LjYgNC4xLTI0bDAtMjRjMC0yOS41LTguOC01Ni45LTI0LTc5LjcgNDkuMyA0LjEgODggNDUuMyA4OCA5NS43bDAgMTAuN2MwIDExLjgtOS42IDIxLjMtMjEuMyAyMS4zbC00Ni44IDB6TTk2IDE5MmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdfSxEVj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb2JpbGUiLGljb246WzM4NCw1MTIsWzEyODI0MSwibW9iaWxlLWFuZHJvaWQiLCJtb2JpbGUtcGhvbmUiXSwiZjNjZSIsIk04MCAwQzQ0LjcgMCAxNiAyOC43IDE2IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDgwIDB6bTcyIDQxNmw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSx4ZnQ9RFYsYmZ0PURWLHZmdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvd3MtdHVybi10by1kb3RzIixpY29uOls0NDgsNTEyLFtdLCJlNGMxIiwiTTI2NS40LTYuNmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zTDI4NS4zIDY0IDM1MiA2NGM1MyAwIDk2IDQzIDk2IDk2bDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjYuNyAwIDI1LjQgMjUuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDgwLTgwem0tODIuNyAyNzJsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wxNjIuNyA0MDAgOTYgNDAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDgxLjcgMCA0NjRsMC0zMmMwLTUzIDQzLTk2IDk2LTk2bDY2LjcgMC0yNS40LTI1LjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDB6TTMyMCAzNjhhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek02NCAxNjBhNjQgNjQgMCAxIDEgMC0xMjggNjQgNjQgMCAxIDEgMCAxMjh6Il19LHlmdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJleGNsYW1hdGlvbiIsaWNvbjpbMTI4LDUxMixbMTAwNjksMTAwNzEsNjE3MzhdLCIyMSIsIk02NCA0MzJjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDAtNDAtMTcuOS00MC00MGMwLTIyLjEgMTcuOS00MCA0MC00MHpNNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIC42IDAgMS4xIDAgMS43bC0xNiAzMDRjLS45IDE3LTE1IDMwLjMtMzIgMzAuM1MzMyAzNzAuNyAzMiAzNTMuN0wxNiA0OS43YzAtLjYgMC0xLjEgMC0xLjcgMC0yNi41IDIxLjUtNDggNDgtNDh6Il19LHdmdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaHVyY2giLGljb246WzUxMiw1MTIsWzk5NjJdLCJmNTFkIiwiTTI4MC04YzAtMTMuMy0xMC43LTI0LTI0LTI0UzIzMi0yMS4zIDIzMi04bDAgMjQtMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgNDgtOTguNiA2NS44QzEyMCAxODYuNyAxMTIgMjAxLjYgMTEyIDIxNy43bDAgMzguMy03OS44IDQ1LjZDMTIuMyAzMTMgMCAzMzQuMiAwIDM1Ny4xTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0IDc0LjcgMCA4NS40IDAgMzIwIDBsNjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTkwLjljMC0yMy0xMi4zLTQ0LjItMzIuMi01NS42TDQwMCAyNTYgNDAwIDIxNy43YzAtMTYtOC0zMS0yMS40LTM5LjlsLTk4LjYtNjUuOCAwLTQ4IDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyIDAgMC0yNHpNMjU2IDMyMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDgwLTEyOCAwIDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjR6Il19LE1mdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0b2dnbGUtb2ZmIixpY29uOls1NzYsNTEyLFtdLCJmMjA0IiwiTTM4NCAxMjhjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhTNDU0LjcgMzg0IDM4NCAzODRsLTE5MiAwYy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHM1Ny4zLTEyOCAxMjgtMTI4bDE5MiAwek01NzYgMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkyTDE5MiA2NEM4NiA2NCAwIDE1MCAwIDI1NlM4NiA0NDggMTkyIDQ0OGwxOTIgMGMxMDYgMCAxOTItODYgMTkyLTE5MnpNMTkyIDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHoiXX0semZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNob2UtcHJpbnRzIixpY29uOls1NzYsNTEyLFtdLCJmNTRiIiwiTTI5NiAxOTJjLTIxLjEtMTIuMS00Mi4zLTI0LjItNzItMjkuM2wwLTE0MC4zQzI1Ny43IDEzIDMxMS40IDAgMzUyIDAgNDQ4IDAgNTc2IDQ4IDU3NiAxMjhzLTExOS42IDk2LTE3NiA5NmMtNDggMC03Ni0xNi0xMDQtMzJ6TTEyOCAzMmw0OCAwIDAgMTI4LTQ4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjR6TTIzMiAzMjBjMjgtMTYgNTYtMzIgMTA0LTMyIDU2LjQgMCAxNzYgMTYgMTc2IDk2UzM4NCA1MTIgMjg4IDUxMmMtNDAuNSAwLTk0LjMtMTMtMTI4LTIyLjRsMC0xNDAuM2MyOS43LTUuMiA1MC45LTE3LjMgNzItMjkuNHpNNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0bDQ4IDAgMCAxMjgtNDggMHoiXX0sa2Z0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtY2lyY2xlLWV4Y2xhbWF0aW9uIixpY29uOls1NzYsNTEyLFtdLCJlNGViIiwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il19LExVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndhbGxldCIsaWNvbjpbNTEyLDUxMixbXSwiZjU1NSIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDcyIDEyOGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTNTguNyA4MCA3MiA4MGwzODQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw2NCAzMnpNNDE2IDI1NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LGI3PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1lc3NhZ2UiLGljb246WzUxMiw1MTIsWyJjb21tZW50LWFsdCJdLCJmMjdhIiwiTTAgMzUyTDAgMTI4QzAgNzUgNDMgMzIgOTYgMzJsMzIwIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDIyNGMwIDUzLTQzIDk2LTk2IDk2bC0xMjAgMGMtNS4yIDAtMTAuMiAxLjctMTQuNCA0LjhMMTY2LjQgNTM5LjJjLTQuMiAzLjEtOS4yIDQuOC0xNC40IDQuOC0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTcyLTMyIDBjLTUzIDAtOTYtNDMtOTYtOTZ6Il19LFNmdD1iNyxDZnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJvcGh5IixpY29uOls1MTIsNTEyLFsxMjc5NDJdLCJmMDkxIiwiTTE0NC4zIDBsMjI0IDBjMjYuNSAwIDQ4LjEgMjEuOCA0Ny4xIDQ4LjItLjIgNS4zLS40IDEwLjYtLjcgMTUuOGw0OS42IDBjMjYuMSAwIDQ5LjEgMjEuNiA0Ny4xIDQ5LjgtNy41IDEwMy43LTYwLjUgMTYwLjctMTE4IDE5MC41LTE1LjggOC4yLTMxLjkgMTQuMy00Ny4yIDE4LjgtMjAuMiAyOC42LTQxLjIgNDMuNy01Ny45IDUxLjhsMCA3My4xIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDAgMC03My4xYy0xNi03LjctMzUuOS0yMi01NS4zLTQ4LjMtMTguNC00LjgtMzguNC0xMi4xLTU3LjktMjMuMS01NC4xLTMwLjMtMTAyLjktODcuNC0xMDkuOS0xODkuOS0xLjktMjguMSAyMS00OS43IDQ3LjEtNDkuN2w0OS42IDBjLS4zLTUuMi0uNS0xMC40LS43LTE1LjgtMS0yNi41IDIwLjYtNDguMiA0Ny4xLTQ4LjJ6TTEwMS41IDExMmwtNTIuNCAwYzYuMiA4NC43IDQ1LjEgMTI3LjEgODUuMiAxNDkuNi0xNC40LTM3LjMtMjYuMy04Ni0zMi44LTE0OS42ek0zODAgMjU2LjhjNDAuNS0yMy44IDc3LjEtNjYuMSA4My4zLTE0NC44TDQxMSAxMTJjLTYuMiA2MC45LTE3LjQgMTA4LjItMzEgMTQ0Ljh6Il19LGVyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWRpenp5IixpY29uOls1MTIsNTEyLFsiZGl6enkiXSwiZjU2NyIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTM0LjEgMTUzLjlsMjUuOSAyNS45IDI1LjktMjUuOWM3LjgtNy44IDIwLjUtNy44IDI4LjMgMHM3LjggMjAuNSAwIDI4LjNsLTI1LjkgMjUuOSAyNS45IDI1LjljNy44IDcuOCA3LjggMjAuNSAwIDI4LjNzLTIwLjUgNy44LTI4LjMgMGwtMjUuOS0yNS45LTI1LjkgMjUuOWMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBzLTcuOC0yMC41IDAtMjguM2wyNS45LTI1LjktMjUuOS0yNS45Yy03LjgtNy44LTcuOC0yMC41IDAtMjguM3MyMC41LTcuOCAyOC4zIDB6bTE5MiAwbDI1LjkgMjUuOSAyNS45LTI1LjljNy44LTcuOCAyMC41LTcuOCAyOC4zIDBzNy44IDIwLjUgMCAyOC4zbC0yNS45IDI1LjkgMjUuOSAyNS45YzcuOCA3LjggNy44IDIwLjUgMCAyOC4zcy0yMC41IDcuOC0yOC4zIDBsLTI1LjktMjUuOS0yNS45IDI1LjljLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwcy03LjgtMjAuNSAwLTI4LjNsMjUuOS0yNS45LTI1LjktMjUuOWMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwek0yNTYgMzA0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdfSxMZnQ9ZXJlLFRmdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYWN0ZXJpYSIsaWNvbjpbNjQwLDUxMixbXSwiZTA1OSIsIk0yNTYtMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMWM4LjYgMi4yIDE2LjkgNS42IDI0LjggMTAuM0wzMTEgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTYuMyA2LjNjNC42IDcuOCA4IDE2LjIgMTAuMyAyNC44bDExIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTExIDBjLTIuMiA4LjYtNS42IDE2LjktMTAuMyAyNC44TDM0NSAxNTFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNC4xLTQuMS0zMC4xIDMwLjEgNC4xIDQuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00LjEtNC4xYy0xMCAxMC0yMCAyMC0zMC4xIDMwLjFMMjE3IDI3OWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC02LjMtNi4zYy03LjggNC42LTE2LjIgOC0yNC44IDEwLjNsMCAxMWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTExYy04LjYtMi4yLTE2LjktNS42LTI0LjgtMTAuM0w3MyAzMTNjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNi4zLTYuM2MtNC42LTcuOC04LTE2LjItMTAuMy0yNC44bC0xMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExIDBjMi4yLTguNiA1LjYtMTYuOSAxMC4zLTI0LjhMMzkgMTY5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNC4xIDQuMWMxMC0xMCAyMC0yMCAzMC4xLTMwLjFMMTAzIDEwNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQuMSA0LjEgMzAuMS0zMC4xLTQuMS00LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45UzE5MS42LTIuMyAyMDEgN2w2LjMgNi4zYzcuOC00LjYgMTYuMi04IDI0LjgtMTAuM2wwLTExYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0xMjggMjU2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMjQwIDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yOTYgNDBsMCAxMWM4LjYgMi4yIDE2LjkgNS42IDI0LjggMTAuM0w1NjcgMTk5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNi4zIDYuM2M0LjYgNy44IDggMTYuMiAxMC4zIDI0LjhsMTEgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEgMGMtMi4yIDguNi01LjYgMTYuOS0xMC4zIDI0LjhMNjAxIDM0M2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00LjEtNC4xLTMwLjEgMzAuMSA0LjEgNC4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQuMS00LjFjLTEwIDEwLTIwIDIwLTMwLjEgMzAuMUw0NzMgNDcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTYuMy02LjNjLTcuOCA0LjYtMTYuMiA4LTI0LjggMTAuM2wwIDExYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTFjLTguNi0yLjItMTYuOS01LjYtMjQuOC0xMC4zTDMyOSA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNi4zLTYuM2MtNC42LTcuOC04LTE2LjItMTAuMy0yNC44bC0xMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExIDBjMi4yLTguNiA1LjYtMTYuOSAxMC4zLTI0LjhMMjk1IDM2MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQuMSA0LjFjMTAtMTAgMjAtMjAgMzAuMS0zMC4xTDM1OSAyOTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0LjEgNC4xIDMwLjEtMzAuMS00LjEtNC4xYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNi4zIDYuM2M3LjgtNC42IDE2LjItOCAyNC44LTEwLjNsMC0xMWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek00NDggMzg0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il19LGU3PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImVhci1kZWFmIixpY29uOls1MTIsNTEyLFsiZGVhZiIsImRlYWZuZXNzIiwiaGFyZC1vZi1oZWFyaW5nIl0sImYyYTQiLCJNNTAyLjYgNTQuNmwtNDAgNDBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDQwLTQwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6bS0zMjAgMzIwbC0xMjggMTI4Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxMjgtMTI4YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTI0MCAxMjhjLTU3LjYgMC0xMDUuMSA0My42LTExMS4zIDk5LjUtMS45IDE3LjYtMTcuOCAzMC4yLTM1LjMgMjguM3MtMzAuMi0xNy44LTI4LjMtMzUuM2M5LjctODggODQuMy0xNTYuNSAxNzQuOS0xNTYuNSA5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDQ2LTE3LjcgODcuOS00Ni42IDExOS4zLTEyIDEzLTE3LjQgMjQuOC0xNy40IDM0LjdsMCA2LjFjMCA2MS45LTUwLjEgMTEyLTExMiAxMTItMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTYuMWMwLTMyLjkgMTcuNC01OS42IDM0LjQtNzggMTguNC0yMCAyOS42LTQ2LjYgMjkuNi03NS45IDAtNjEuOS01MC4xLTExMi0xMTItMTEyem0wIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdfSxfZnQ9ZTcsQWZ0PWU3LCRmdD1lNyx0cmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVvcGxlLWFycm93cyIsaWNvbjpbNTEyLDUxMixbInBlb3BsZS1hcnJvd3MtbGVmdC1yaWdodCJdLCJlMDY4IiwiTTMyIDY0QTY0IDY0IDAgMSAxIDE2MCA2NCA2NCA2NCAwIDEgMSAzMiA2NHpNMCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMGMzLjIgMCA2LjQgLjIgOS41IC43TDkzLjEgMjA1LjFDNjUgMjMzLjIgNjUgMjc4LjggOTMuMSAzMDYuOWw1NiA1NmMzLjQgMy40IDcgNi40IDEwLjkgOWwwIDkyLjFjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTIwLjZDMTIuOSAzMzIuNCAwIDMxMS43IDAgMjg4bDAtNjR6TTM1MiA2NGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6bTY2LjkgMTQxLjFsLTQ0LjQtNDQuNGMzLjEtLjUgNi4zLS43IDkuNS0uN2w2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40TDQ4MCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTIuMWMzLjktMi42IDcuNS01LjYgMTAuOS05bDU2LTU2YzI4LjEtMjguMSAyOC4xLTczLjcgMC0xMDEuOHpNMzAyLjggMTc3LjhjOS0zLjcgMTkuMy0xLjcgMjYuMiA1LjJsNTYgNTZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTU2IDU2Yy02LjkgNi45LTE3LjIgOC45LTI2LjIgNS4yUzI4OCAzMjEuNyAyODggMzEybDAtMjQtNjQgMCAwIDI0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTU2LTU2Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw1Ni01NmM2LjktNi45IDE3LjItOC45IDI2LjItNS4yUzIyNCAxOTAuMyAyMjQgMjAwbDAgMjQgNjQgMCAwLTI0YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnoiXX0sRGZ0PXRyZSxFZnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZHMtY2xhcHBpbmciLGljb246WzUxMiw1MTIsW10sImUxYTgiLCJNMzQ0IDhsMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0UzM0NC01LjMgMzQ0IDh6TTIyMCAxMC43bDMyIDQ4YzcuNCAxMSA0LjQgMjUuOS02LjcgMzMuM3MtMjUuOSA0LjQtMzMuMy02LjdsLTMyLTQ4Yy03LjQtMTEtNC40LTI1LjkgNi43LTMzLjNTMjEyLjYtLjMgMjIwIDEwLjd6TTEzNSAxMTljOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMjkyLjcgMjQyLjdjMTAuMSAxMC4xIDI3LjMgMi45IDI3LjMtMTEuM2wwLTM5LjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE1My42YzAgNTcuMS0zMCAxMTAtNzguOSAxMzkuNC02NCAzOC40LTE0NS44IDI4LjMtMTk4LjUtMjQuNEw3IDM2MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDUzIDUzYzYuMSA2LjEgMTYgNi4xIDIyLjEgMHM2LjEtMTYgMC0yMi4xTDIzIDI2NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDkzIDkzYzYuMSA2LjEgMTYgNi4xIDIyLjEgMHM2LjEtMTYgMC0yMi4xTDU1IDE4NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDExNyAxMTdjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFsLTkzLTkzYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpNNDMzLjEgNDg0LjljLTI0LjIgMTQuNS01MC45IDIyLjEtNzcuNyAyMy4xIDQ4LjEtMzkuNiA3Ni42LTk5IDc2LjYtMTYyLjRsMC05OC4xYzguMi0uMSAxNi02LjQgMTYtMTZsMC0zOS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNTMuNmMwIDU3LjEtMzAgMTEwLTc4LjkgMTM5LjR6TTQ1My4zIDRjMTEgNy40IDE0IDIyLjMgNi43IDMzLjNsLTMyIDQ4Yy03LjQgMTEtMjIuMyAxNC0zMy4zIDYuN3MtMTQtMjIuMy02LjctMzMuM2wzMi00OGM3LjQtMTEgMjIuMy0xNCAzMy4zLTYuN3oiXX0sTmZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZpcnVzLWNvdmlkLXNsYXNoIixpY29uOls1NzYsNTEyLFtdLCJlNGE5IiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTgzLTgzIDExLjQtMTEuNGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0xMS4zIDExLjMtMjMuOC0yMy44YzE3LjktMjMuNSAyOS45LTUxLjcgMzQuMS04Mi4zbDMzLjYgMCAwIDE2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2LTMzLjYgMGMtNC4yLTMwLjctMTYuMy01OC44LTM0LjEtODIuM2wyMy44LTIzLjggMTEuMyAxMS4zYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0NDAuNyA0Ni43Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDExLjMgMTEuMy0yMy44IDIzLjhDMzcwLjggOTcuOSAzNDIuNyA4NS44IDMxMiA4MS42bDAtMzMuNiAxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0UzM0MS4zIDAgMzI4IDBMMjQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTYgMCAwIDMzLjZjLTMwLjcgNC4yLTU4LjggMTYuMy04Mi4zIDM0LjFMMTU3LjkgOTIgMTY5LjIgODAuNmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDEyMy45IDU4LjEgNDEtMjQuOXpNMTEzLjYgMjMybC0zMy42IDAgMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNiAzMy42IDBjNC4yIDMwLjcgMTYuMyA1OC44IDM0LjEgODIuM2wtMjMuOCAyMy44LTExLjMtMTEuM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw1Ni42IDU2LjZjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xMS4zLTExLjMgMjMuOC0yMy44YzIzLjUgMTcuOSA1MS43IDI5LjkgODIuMyAzNC4xbDAgMzMuNi0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE2IDAgMC0zMy42YzEzLjQtMS44IDI2LjQtNS4yIDM4LjctOS45TDEyMy41IDE5My4zYy00LjcgMTIuMy04IDI1LjItOS45IDM4Ljd6Il19LGFyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYWxlbmRhci1kYXlzIixpY29uOls0NDgsNTEyLFsiY2FsZW5kYXItYWx0Il0sImYwNzMiLCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAyNDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTI4IDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTQ0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTY0IDM2OGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il19LFBmdD1hcmUscnJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRpYW1vbmQtdHVybi1yaWdodCIsaWNvbjpbNTEyLDUxMixbImRpcmVjdGlvbnMiXSwiZjVlYiIsIk0yMTUgMTdMMTcgMjE1QzYuMSAyMjUuOSAwIDI0MC42IDAgMjU2czYuMSAzMC4xIDE3IDQxTDIxNSA0OTVjMTAuOSAxMC45IDI1LjYgMTcgNDEgMTdzMzAuMS02LjEgNDEtMTdMNDk1IDI5N2MxMC45LTEwLjkgMTctMjUuNiAxNy00MXMtNi4xLTMwLjEtMTctNDFMMjk3IDE3QzI4Ni4xIDYuMSAyNzEuNCAwIDI1NiAwcy0zMC4xIDYuMS00MSAxN3pNMzg1IDI1N2wtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtNzguMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDBjMC0zOS44IDMyLjItNzIgNzItNzJsNzguMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjl6Il19LElmdD1ycmUsRmZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtcG9pbnQtdXAiLGljb246WzM4NCw1MTIsWzk3NTddLCJmMGE2IiwiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBTOTYgMTQuMyA5NiAzMmwwIDIwOC02NCAwIDAtMjA4ek0yMjQgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0em0tNjQtNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xNjAgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bS05NiA4OGwwLS42YzkuNCA1LjQgMjAuMyA4LjYgMzIgOC42IDEzLjIgMCAyNS40LTQgMzUuNi0xMC44IDguNyAyNC45IDMyLjUgNDIuOCA2MC40IDQyLjggMTEuNyAwIDIyLjYtMy4xIDMyLTguNmwwIDguNmMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MGwtNjEuNyAwYy00Mi40IDAtODMuMS0xNi45LTExMy4xLTQ2LjlMMzcuNSA0NTMuNUMxMy41IDQyOS41IDAgMzk2LjkgMCAzNjNsMC0yN2MwLTM1LjMgMjguNy02NCA2NC02NGw4OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDU2IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJ6Il19LE9mdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiZXppZXItY3VydmUiLGljb246WzY0MCw1MTIsW10sImY1NWIiLCJNMjk2IDEzNmwwLTQ4IDQ4IDAgMCA0OC00OCAwek0yODggMzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNC0xMTguNCAwQzExMS4yIDYyLjcgODkuMyA0OCA2NCA0OCAyOC43IDQ4IDAgNzYuNyAwIDExMnMyOC43IDY0IDY0IDY0YzI1LjMgMCA0Ny4yLTE0LjcgNTcuNi0zNmw2Ni45IDBjLTU4LjkgMzkuNi05OC45IDEwNS0xMDQgMTgwTDgwIDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMuMyAwYzUuOS02NyA0OC41LTEyMy40IDEwNy41LTE0OS4xIDguNiAxMi43IDIzLjIgMjEuMSAzOS44IDIxLjFsNjQgMGMxNi42IDAgMzEuMS04LjQgMzkuOC0yMS4xIDU5IDI1LjcgMTAxLjYgODIuMSAxMDcuNSAxNDkuMWwtMy4zIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00LjUgMGMtNS03NS00NS4xLTE0MC40LTEwNC0xODBsNjYuOSAwYzEwLjQgMjEuMyAzMi4zIDM2IDU3LjYgMzYgMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRjLTI1LjMgMC00Ny4yIDE0LjctNTcuNiAzNmwtMTE4LjQgMCAwLTRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTg4IDM3Nmw0OCAwIDAgNDgtNDggMCAwLTQ4em00MTYgNDhsMC00OCA0OCAwIDAgNDgtNDggMHoiXX0sQmZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1oYWxmLWRyZXNzIixpY29uOlszODQsNTEyLFtdLCJlNTQ4IiwiTTE0My40LTMuOWM5LjctMTYuOCAyNy44LTI4LjEgNDguNi0yOC4xIDMwLjkgMCA1NiAyNS4xIDU2IDU2IDAgMjUuNC0xNi45IDQ2LjgtNDAgNTMuN2wwIDBjLTUuMSAxLjUtMTAuNCAyLjMtMTYgMi4zLTMwLjkgMC01Ni0yNS4xLTU2LTU2bDAgMGMwLTEwLjEgMi43LTE5LjcgNy40LTI3Ljl6TTMxOC4zIDI5OS4xTDI3MiAyMzYuNyAyNzIgNTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwIDAtLjQgMC0yMzguNmMzNi4yIDQuNCA2OS4yIDIzLjQgOTEuMiA1M2w3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZ6TTE3NiAxMTNsMCAzOTljMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMjUuOCAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWw0My0xMjktNDguMyA2NS4xYy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NWMyMi0yOS42IDU1LjEtNDguNiA5MS4yLTUzeiJdfSxpcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLXBvbGwtaG9yaXpvbnRhbCIsaWNvbjpbNDQ4LDUxMixbInBvbGwtaCJdLCJmNjgyIiwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNTYgMTUyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xMTIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHptNzIgODBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTIwOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIwOCAwek0xOTIgMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjR6Il19LFJmdD1pcmUsSGZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNjaG9vbC1jaXJjbGUteG1hcmsiLGljb246WzY0MCw1MTIsW10sImU1NmQiLCJNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNzYgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtOTAuOSAwIDAtODhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMxIDAgMS45IDAgMi45IC4xIDI2LjMtNzQuNiA5Ny41LTEyOC4xIDE4MS4xLTEyOC4xIDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtMzMuNGMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMC0xMjcuOS0xMTUuMWMtMTguMy0xNi40LTQ2LTE2LjQtNjQuMiAwTDEyOCAxMjggNjQgMTI4em02NCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMnpNMTEyIDI1NmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2ek0yODggMTI4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXX0scWZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtbGl6YXJkIixpY29uOls1MTIsNTEyLFtdLCJmMjU4IiwiTTAgMTEyQzAgODUuNSAyMS41IDY0IDQ4IDY0bDIzOC41IDBjMzYuOCAwIDcxLjIgMTggOTIuMSA0OC4ybDExMy41IDE2NGMxMyAxOC43IDE5LjkgNDEgMTkuOSA2My44bDAgNzZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTMuOC03OC4xLTUwLjItMTYxLjkgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OEw0OCAxNjBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4eiJdfSxvcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hhbGtib2FyZCIsaWNvbjpbNTc2LDUxMixbImJsYWNrYm9hcmQiXSwiZjUxYiIsIk05NiA2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgNjR6TTQ4MCAzODRsLTY0IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0xNjAgMCAwLTI1NiAzODQgMCAwIDI1NnoiXX0sVmZ0PW9yZSxzcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXAtcmlnaHQtZnJvbS1zcXVhcmUiLGljb246WzUxMiw1MTIsWyJleHRlcm5hbC1saW5rLWFsdCJdLCJmMzVkIiwiTTI5MC40IDE5LjhDMjk1LjQgNy44IDMwNy4xIDAgMzIwIDBMNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjBjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlMNDAwIDE1Ny4zIDI0Ni42IDMxMC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wzNTQuNyAxMTIgMjk3LjQgNTQuNmMtOS4yLTkuMi0xMS45LTIyLjktNi45LTM0Ljl6TTAgMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwbDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI1NmMwIDguOCA3LjIgMTYgMTYgMTZsMjU2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDgwYzAgNDQuMi0zNS44IDgwLTgwIDgwTDgwIDUxMmMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCAxNzZ6Il19LFVmdD1zcmUsamZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1mdWxsIixpY29uOls1MTIsNTEyLFsxMjg5OTcsMTI4OTk4LDEyODk5OSwxMjllMywxMjkwMDEsMTI5MDAyLDEyOTAwMywxMTAzNSwxMTAzNl0sImY0NWMiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0eiJdfSxXZnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdmVyIixpY29uOls1MTIsNTEyLFtdLCJlMTM5IiwiTTMxMC40IDE2QzM0Ni42IDE2IDM3NiA0NS40IDM3NiA4MS43bDAgNS4yYzAgMTEuMi0yLjcgMjIuMy03LjggMzIuMmwtMi4zIDQuMi0yMC4xIDMzLjVjLTEuMSAxLjktMS4yIDMuNC0xLjEgNC41IC4yIDEuMyAuOSAyLjcgMi4xIDMuOXMyLjYgMS45IDMuOSAyLjFjMS4xIC4yIDIuNiAuMSA0LjUtMS4xbDMzLjUtMjAuMSA0LjItMi4zYzEwLTUuMSAyMS03LjggMzIuMi03LjhsNS4yIDBjMzYuMiAwIDY1LjYgMjkuNCA2NS42IDY1LjcgMCAxNy40LTYuOSAzNC4xLTE5LjIgNDYuNGwtMS4zIDEuM2MtMy43IDMuNy0zLjcgOS42IDAgMTMuM2wxLjMgMS4zYzEyLjMgMTIuMyAxOS4yIDI5IDE5LjIgNDYuNCAwIDM2LjItMjkuNCA2NS42LTY1LjYgNjUuNmwtNS4yIDBjLTEyLjggMC0yNS41LTMuNS0zNi41LTEwLjFsLTMzLjUtMjAuMWMtMS45LTEuMS0zLjQtMS4yLTQuNS0xLjEtMS4zIC4yLTIuNyAuOS0zLjkgMi4xcy0xLjkgMi42LTIuMSAzLjljLS4yIDEuMS0uMSAyLjYgMS4xIDQuNWwyMC4xIDMzLjVjNi42IDExIDEwLjEgMjMuNiAxMC4xIDM2LjVsMCA1LjJjMCAzNi4yLTI5LjQgNjUuNi02NS42IDY1LjYtMTcuNCAwLTM0LjEtNi45LTQ2LjQtMTkuMmwtMS4zLTEuM2MtMy43LTMuNy05LjYtMy43LTEzLjMgMGwtMS4zIDEuM2MtMTIuMyAxMi4zLTI5IDE5LjItNDYuNCAxOS4yLTM2LjIgMC02NS42LTI5LjQtNjUuNy02NS42bDAtNS4yYzAtMTIuOCAzLjUtMjUuNSAxMC4xLTM2LjVsMjAuMS0zMy41YzEuMS0xLjkgMS4yLTMuNCAxLjEtNC41LS4yLTEuMy0uOS0yLjctMi4xLTMuOXMtMi42LTEuOS0zLjktMi4xYy0uNS0uMS0xLjItLjEtMS45IDBsLTIuNSAxLTMzLjUgMjAuMWMtMTEgNi42LTIzLjYgMTAuMS0zNi41IDEwLjFsLTUuMiAwQzQ1LjQgMzc2IDE2IDM0Ni42IDE2IDMxMC40IDE2IDI5MyAyMi45IDI3Ni4zIDM1LjIgMjY0bDEuMy0xLjMgMS4yLTEuNWMyLjEtMy4xIDIuMS03LjIgMC0xMC4zbC0xLjItMS41LTEuMy0xLjNDMjIuOSAyMzUuOCAxNiAyMTkuMSAxNiAyMDEuNyAxNiAxNjUuNCA0NS40IDEzNiA4MS43IDEzNmw1LjIgMGMxMi44IDAgMjUuNSAzLjUgMzYuNSAxMC4xbDMzLjUgMjAuMSAyLjUgMWMuNyAuMSAxLjQgLjEgMS45IC4xIDEuMy0uMiAyLjctLjkgMy45LTIuMXMxLjktMi42IDIuMS0zLjljLjEtLjUgLjEtMS4yLS4xLTEuOWwtMS0yLjUtMjAuMS0zMy41Yy02LjYtMTEtMTAuMS0yMy42LTEwLjEtMzYuNWwwLTUuMmMwLTM2LjIgMjkuNC02NS43IDY1LjctNjUuNyAxNy40IDAgMzQuMSA2LjkgNDYuNCAxOS4ybDEuMyAxLjNjMy43IDMuNiA5LjYgMy43IDEzLjMgMGwxLjMtMS4zIDQuOC00LjRDMjgwLjUgMjEuMyAyOTUuMSAxNiAzMTAuNCAxNnoiXX0sR2Z0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlZXRoLW9wZW4iLGljb246WzUxMiw1MTIsW10sImY2MmYiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NmwwIDgwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTAgMjcyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzA0em04MC0xNjBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0em0xMjggMGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMjR6TTgwIDExMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0zMjAgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0ek00OCAzODRsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptMTQ0IDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNmw2NCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4em0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHptMTEyLTE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMyeiJdfSxFVj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYXJzLXN0YWdnZXJlZCIsaWNvbjpbNTEyLDUxMixbInJlb3JkZXIiLCJzdHJlYW0iXSwiZjU1MCIsIk0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDEyOEMxNC4zIDEyOCAwIDExMy43IDAgOTZ6TTY0IDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw5NiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnoiXX0sWWZ0PUVWLFpmdD1FVixYZnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2FyZWhvdXNlIixpY29uOls1NzYsNTEyLFtdLCJmNDk0IiwiTTAgMTQyLjFMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI0MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzM3LjljMC0yNy41LTE3LjYtNTItNDMuOC02MC43TDMwMy4yIDUuMWMtOS45LTMuMy0yMC41LTMuMy0zMC40IDBMNDMuOCA4MS40QzE3LjYgOTAuMSAwIDExNC42IDAgMTQyLjF6TTQ2NCAyNTZsLTM1MiAwIDAgNjQgMzUyIDAgMC02NHpNMTEyIDQxNmwzNTIgMCAwLTY0LTM1MiAwIDAgNjR6bTM1MiAzMmwtMzUyIDAgMCA2NCAzNTIgMCAwLTY0eiJdfSxRZnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3dhdGNoYm9vayIsaWNvbjpbNTEyLDUxMixbXSwiZjVjMyIsIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzY4YzAgNTMtNDMgOTYtOTYgOTZTMCA0NjkgMCA0MTZMMCA0OHpNMjQwIDQwOS42bDAtMjcxLjUgNDguMS00OC4xYzE4LjctMTguNyA0OS4xLTE4LjcgNjcuOSAwbDY3LjkgNjcuOWMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOUwyNDAgNDA5LjZ6TTIwNS41IDUxMmwxOTItMTkyIDY2LjYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yNTguNSAwek04MCA2NGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2TDgwIDY0ek02NCAyMDhsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNOTYgNDQwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXX0sS2Z0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbXBncm91bmQiLGljb246WzUxMiw1MTIsWzk5NzhdLCJmNmJiIiwiTTM0NC44IDUyLjNjMTEuMi0xMy43IDkuMi0zMy44LTQuNS00NXMtMzMuOC05LjItNDUgNC41bC0zOS4yIDQ4LTM5LjItNDhDMjA1LjYtMS45IDE4NS40LTQgMTcxLjcgNy4ycy0xNS43IDMxLjQtNC41IDQ1bDQ3LjQgNTgtMjAyIDI0Ni45QzQuNSAzNjcuMSAwIDM3OS42IDAgMzkyLjZMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zOS40YzAtMTIuOS00LjUtMjUuNS0xMi43LTM1LjVsLTIwMi0yNDYuOSA0Ny40LTU4ek0yNTYgMjg4bDExMiAxMjgtMjI0IDAgMTEyLTEyOHoiXX0sSmZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi13YWxraW5nLWFycm93LXJpZ2h0IixpY29uOls1NzYsNTEyLFtdLCJlNTUyIiwiTTEwNC41IDI0YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptLTggMTgxLjNMNzMuOSAyMjcuOWMtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgMzcuNWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTM3LjVjMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlsMzUuMS0zNS4xYzIyLjgtMjIuOCA1My42LTM1LjYgODUuOC0zNS42IDM2LjkgMCA3MS44IDE2LjggOTQuOCA0NS42TDI2Mi4zIDE4MGM2LjEgNy42IDE1LjMgMTIgMjUgMTJsMzMuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMy4yIDBjLTI5LjIgMC01Ni43LTEzLjMtNzUtMzZsLTMuOC00LjcgMCAxMTUuMiAzNC41IDI5LjZjMTcuNyAxNS4yIDI5LjMgMzYuMiAzMi42IDU5LjNsMTIuNiA4OC4xYzIuNSAxNy41LTkuNyAzMy43LTI3LjIgMzYuMnMtMzMuNy05LjctMzYuMi0yNy4ybC0xMi42LTg4LjFjLTEuMS03LjctNS0xNC43LTEwLjktMTkuOEwxMzAgMzQ3LjVjLTIxLjMtMTguMi0zMy41LTQ0LjktMzMuNS03Mi45bDAtNjkuM3pNOTYuNiAzNzFjMi40IDIuMyA0LjggNC42IDcuNCA2LjhsNDYgMzkuNC0yLjIgNy42Yy00LjUgMTUuNy0xMi45IDMwLTI0LjQgNDEuNUw1NS4xIDUzNC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w2OC4zLTY4LjNjMy44LTMuOCA2LjYtOC42IDguMS0xMy44TDk2LjYgMzcxek01MDUuNSAzNDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtMTAyLjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMDIuMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyeiJdfSxldXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2xhc3NlcyIsaWNvbjpbNTc2LDUxMixbXSwiZjUzMCIsIk0xNDMuMyA5NmMtMTQgMC0yNi41IDkuMi0zMC42IDIyLjZMNzAuNCAyNTYgMjI0IDI1NmMxNy43IDAgMzIgMTQuMyAzMiAzMmw2NCAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDE1My42IDAtNDIuMy0xMzcuNEM0NTkuMiAxMDUuMiA0NDYuOCA5NiA0MzIuNyA5Nkw0MDAgOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIuNyAwYzQyLjEgMCA3OS40IDI3LjUgOTEuOCA2Ny44bDQ1LjQgMTQ3LjVjNC4xIDEzLjIgNi4xIDI2LjkgNi4xIDQwLjdsMCA5NmMwIDUzLTQzIDk2LTk2IDk2bC02NCAwYy01MyAwLTk2LTQzLTk2LTk2bDAtMzItNjQgMCAwIDMyYzAgNTMtNDMgOTYtOTYgOTZsLTY0IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC05NmMwLTEzLjggMi4xLTI3LjUgNi4xLTQwLjdMNTEuNSA5OS44QzYzLjkgNTkuNSAxMDEuMSAzMiAxNDMuMyAzMkwxNzYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyLjcgMHpNNjQgMzIwbDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0LTEyOCAwem00MTYgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NC0xMjggMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDB6Il19LG5yZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtcGF1c2UiLGljb246WzUxMiw1MTIsWzYyMDkyLCJwYXVzZS1jaXJjbGUiXSwiZjI4YiIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjI0IDE5MmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xMjggMGwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdfSx0dXQ9bnJlLGF1dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtZW1vcnkiLGljb246WzUxMiw1MTIsW10sImY1MzgiLCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhsMCA3LjRDMCAxNDIuMiA0LjQgMTQ4IDEwLjEgMTUxLjcgMjMuMyAxNjAuMyAzMiAxNzUuMSAzMiAxOTJzLTguNyAzMS43LTIxLjkgNDAuM0M0LjQgMjM2IDAgMjQxLjggMCAyNDguNmwwIDU1LjQgNTEyIDAgMC01NS40YzAtNi44LTQuNC0xMi42LTEwLjEtMTYuMy0xMy4yLTguNi0yMS45LTIzLjQtMjEuOS00MC4zczguNy0zMS43IDIxLjktNDAuM2M1LjctMy43IDEwLjEtOS41IDEwLjEtMTYuM2wwLTcuNGMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNNTEyIDQxNmwwLTY0LTUxMiAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMCAwLTI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyNCA4OCAwIDAtMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI0IDg4IDAgMC0yNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMTYwIDE2MGwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwbDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdfSxydXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2lmdCIsaWNvbjpbNTEyLDUxMixbMTI3ODczXSwiZjA2YiIsIk0zMjEuNSA2OC44QzMyOS4xIDU1LjkgMzQyLjkgNDggMzU3LjggNDhsMi4yIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBsLTczLjMgMCAzNC44LTU5LjJ6bS0xMzEgMGwzNC44IDU5LjItNzMuMyAwYy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwbDIuMiAwYzE0LjkgMCAyOC44IDcuOSAzNi4zIDIwLjh6bTg5LjYtMjQuM2wtMjQuMSA0MS0yNC4xLTQxQzIxNS43IDE2LjkgMTg2LjEgMCAxNTQuMiAwTDE1MiAwYy00OC42IDAtODggMzkuNC04OCA4OCAwIDE0LjQgMy41IDI4IDkuNiA0MEwzMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNDEuNiAwYzYuMS0xMiA5LjYtMjUuNiA5LjYtNDAgMC00OC42LTM5LjQtODgtODgtODhsLTIuMiAwYy0zMS45IDAtNjEuNSAxNi45LTc3LjcgNDQuNHpNNDgwIDI3MmwtMjAwIDAgMCAyMDggMTM2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNDR6bS0yNDggMGwtMjAwIDAgMCAxNDRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTM2IDAgMC0yMDh6Il19LGl1dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb25leS1iaWxsLXdoZWF0IixpY29uOls1MTIsNTEyLFtdLCJlNTJhIiwiTTE3Ni0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODAgMC04LjggNy4yLTE2IDE2LTE2ek01NiAwbDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNTYgNDhDNDIuNyA0OCAzMiAzNy4zIDMyIDI0UzQyLjcgMCA1NiAwek0yNCA3MmwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCAxMjBDMTAuNyAxMjAgMCAxMDkuMyAwIDk2UzEwLjcgNzIgMjQgNzJ6bTggOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI3MiAwYzAtOC44IDcuMi0xNiAxNi0xNiA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODB6TTQwMC0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODAgMC04LjggNy4yLTE2IDE2LTE2em04MCAxNDRjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDExMmM4LjggMCAxNiA3LjIgMTYgMTYgMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tOTYgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMCAzMDRjMC0yNi41IDIxLjUtNDggNDgtNDhsNDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjBjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDMwNHpNNDggNDE2bDAgNDggNDggMGMwLTI2LjUtMjEuNS00OC00OC00OHpNOTYgMzA0bC00OCAwIDAgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6TTQ2NCA0MTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDQ4IDAgMC00OHpNNDE2IDMwNGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwwLTQ4LTQ4IDB6bS05NiA4MGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6Il19LG91dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkdW5nZW9uIixpY29uOls1MTIsNTEyLFtdLCJmNmQ5IiwiTTM0Ny41IDE0NC44YzYuNSA1LjQgMTIuNSAxMS4zIDE4IDE3LjcgOC43IDEwLjIgMjMuNyAxNCAzNS4xIDYuOWw1NC4xLTMzLjhjMTEuMi03IDE0LjctMjEuNyA2LjktMzIuMi0xNS4zLTIwLjUtMzMuNS0zOC42LTU0LjEtNTMuOC0xMC40LTcuNi0yNC43LTQuMy0zMS44IDYuNGwtMzUuMSA1Mi42Yy03LjggMTEuNi0zLjggMjcuMyA3IDM2LjJ6TTMyNy44IDQxLjFjOC42LTEyLjkgMi45LTMwLjUtMTIuMi0zNC4xLTE5LjEtNC42LTM5LjEtNy01OS42LTdzLTQwLjQgMi40LTU5LjYgN2MtMTUuMSAzLjYtMjAuOCAyMS4yLTEyLjIgMzQuMWw0MCA2MGM1LjIgNy44IDE0LjUgMTEuNyAyMy45IDExLjIgNS4yLS4zIDEwLjYtLjMgMTUuOCAwIDkuNCAuNSAxOC43LTMuNCAyMy45LTExLjJsNDAtNjB6TTUwLjUgMTAzLjNjLTcuOSAxMC41LTQuMyAyNS4zIDYuOSAzMi4ybDU0LjEgMzMuOGMxMS40IDcuMSAyNi4zIDMuMyAzNS4xLTYuOSA1LjUtNi40IDExLjUtMTIuMyAxOC0xNy43IDEwLjgtOC45IDE0LjgtMjQuNiA3LTM2LjJMMTM2LjQgNTUuOWMtNy4xLTEwLjctMjEuNS0xNC0zMS44LTYuNC0yMC42IDE1LjEtMzguOCAzMy4zLTU0LjEgNTMuOHptNjIgMTQxLjFjLjgtOS45LTMuMy0xOS45LTExLjgtMjUuMUw0MSAxODJjLTEyLjktOC0yOS45LTIuMy0zMy42IDEyLjUtNC45IDE5LjctNy41IDQwLjMtNy41IDYxLjZsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0zLjkgLjItNy44IC41LTExLjZ6bTI4Ny4xIDBjLjMgMy44IC41IDcuNyAuNSAxMS42bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMjEuMi0yLjYtNDEuOC03LjUtNjEuNi0zLjYtMTQuNy0yMC43LTIwLjUtMzMuNi0xMi41bC01OS43IDM3LjNjLTguNCA1LjMtMTIuNiAxNS4yLTExLjggMjUuMXpNODggMzUybC02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNEwwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0em00MDAgMGwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMjgwIDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzA0em0tODAgMzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI3MnptMTYwIDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI3MnoiXX0sbHJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN1aXRjYXNlLW1lZGljYWwiLGljb246WzUxMiw1MTIsWyJtZWRraXQiXSwiZjBmYSIsIk0xOTIgNTZsMCA0MCAxMjggMCAwLTQwYzAtNC40LTMuNi04LTgtOEwyMDAgNDhjLTQuNCAwLTggMy42LTggOHptLTQ4IDhsMC04YzAtMzAuOSAyNS4xLTU2IDU2LTU2TDMxMiAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgNDI0LTIyNCAwIDAtNDE2ek05NiAxNzZsMCAzMDQtMzIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMCAwIDgwek00MTYgNDgwbDAtMzg0IDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMyIDB6TTI0NCAyMDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM2LTM2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI0YzAgOC44IDcuMiAxNiAxNiAxNmwzNiAwIDAgMzZjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzYgMzYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNGMwLTguOC03LjItMTYtMTYtMTZsLTM2IDAgMC0zNmMwLTguOC03LjItMTYtMTYtMTZsLTI0IDB6Il19LHN1dD1scmUsbnV0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1jYW5lIixpY29uOls0NDgsNTEyLFtdLCJlNTNjIiwiTTIzMi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMTQ0IDIzNi43TDk3LjcgMjk5LjFjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1QzE0MiAxMzIgMTgxLjcgMTEyIDIyNCAxMTJzODIgMjAgMTA3LjIgNTMuOWw3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZMMzA0IDIzNi43IDMwNCA1MTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yNzUuM3pNMzkyIDM4NGMtNC40IDAtOCAzLjYtOCA4IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMjhjMC00LjQtMy42LTgtOC04eiJdfSx0Nz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnYXVnZSIsaWNvbjpbNTEyLDUxMixbImRhc2hib2FyZCIsImdhdWdlLW1lZCIsInRhY2hvbWV0ZXItYWx0LWF2ZXJhZ2UiXSwiZjYyNCIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0yNi45LTE2LjUtNDkuOS00MC01OS4zTDI4MCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTE0NCAxNzZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0tMTYgODBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjg4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNNDAwIDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdfSxsdXQ9dDcsY3V0PXQ3LGR1dD10NyxmdXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZW52ZWxvcGUtb3Blbi10ZXh0IixpY29uOls1NzYsNTEyLFtdLCJmNjU4IiwiTTI4OCAzMy45TDk2LjQgMTc1LjggMjU0LjUgMjkzYzUuMyAzLjkgMTEuMiA2LjkgMTcuNSA4LjdMMjcyIDQ2NGMwIDUuNSAuNSAxMC44IDEuMyAxNkw5NiA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMjM5LjljMC0yMC4zIDkuNi0zOS40IDI1LjktNTEuNEwyNTQuNS0yMWM5LjctNy4yIDIxLjQtMTEgMzMuNS0xMXMyMy44IDMuOSAzMy41IDExTDUxOC4xIDEyNC43YzcuMiA1LjMgMTMuMSAxMiAxNy40IDE5LjYtMi41LS4yLTUtLjMtNy41LS4zTDQzNi42IDE0NCAyODggMzMuOXpNMzIwIDI0MGMwLTI2LjUgMjEuNS00OCA0OC00OGwxNjAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDIyNGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYwIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjI0em04MCAxNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC05NiAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU2IDB6Il19LHV1dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0b29sYm94IixpY29uOls1MTIsNTEyLFsxMjk1MjBdLCJmNTUyIiwiTTE3NiA1NmwwIDQwIDE2MCAwIDAtNDBjMC00LjQtMy42LTgtOC04TDE4NCA0OGMtNC40IDAtOCAzLjYtOCA4ek0xMjggOTZsMC00MGMwLTMwLjkgMjUuMS01NiA1Ni01NkwzMjggMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDQwIDI4LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xbDUxLjkgNTEuOWM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOWwwIDc2LjEtMTM2IDAgMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2LTE0NCAwIDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNi0xMzYgMCAwLTc2LjFjMC0xMi43IDUuMS0yNC45IDE0LjEtMzMuOWw1MS45LTUxLjljOS05IDIxLjItMTQuMSAzMy45LTE0LjFMMTI4IDk2ek0wIDQxNmwwLTk2IDEzNiAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDE0NCAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDEzNiAwIDAgOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHoiXX0scHV0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBvd2VyLW9mZiIsaWNvbjpbNTEyLDUxMixbOTIxMV0sImYwMTEiLCJNMjg4IDBjMC0xNy43LTE0LjMtMzItMzItMzJTMjI0LTE3LjcgMjI0IDBsMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkwyODggMHpNMTQ2LjMgOTguNGMxNC41LTEwLjEgMTgtMzAuMSA3LjktNDQuNnMtMzAuMS0xOC00NC42LTcuOUM0My40IDkyLjEgMCAxNjkgMCAyNTYgMCAzOTcuNCAxMTQuNiA1MTIgMjU2IDUxMlM1MTIgMzk3LjQgNTEyIDI1NmMwLTg3LTQzLjQtMTYzLjktMTA5LjctMjEwLjEtMTQuNS0xMC4xLTM0LjQtNi42LTQ0LjYgNy45cy02LjYgMzQuNCA3LjkgNDQuNmM0OS44IDM0LjggODIuMyA5Mi40IDgyLjMgMTU3LjYgMCAxMDYtODYgMTkyLTE5MiAxOTJTNjQgMzYyIDY0IDI1NmMwLTY1LjIgMzIuNS0xMjIuOSA4Mi4zLTE1Ny42eiJdfSxOVj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaWduYWwiLGljb246WzUxMiw1MTIsWzEyODI0Niwic2lnbmFsLTUiLCJzaWduYWwtcGVyZmVjdCJdLCJmMDEyIiwiTTQ4OCA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwMGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAwek0zNjAgMTI4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzA0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0yODAgMjQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yMDh6TTE1MiAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTQ4IDM4NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il19LGh1dD1OVixtdXQ9TlYsZ3V0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93cy1zcGluIixpY29uOls1MTIsNTEyLFtdLCJlNGJiIiwiTTQ4MS43IDI0MC4xYy0xNy42LTEuMi0zMi45IDEyLTM0LjIgMjkuNy0zLjMgNDctMjMuNiA4OS40LTU0LjggMTIxTDM2MSAzNTljLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMzIwIDM2Ni4zIDMyMCAzNzZsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjOS43IDAgMTguNS01LjggMjIuMi0xNC44czEuNy0xOS4zLTUuMi0yNi4ybC0zNS0zNWM0MS43LTQyLjIgNjguOS05OC44IDczLjQtMTYxLjggMS4yLTE3LjYtMTItMzIuOS0yOS43LTM0LjJ6TTM5IDQxTDc0IDc2Yy00MS43IDQyLjItNjguOSA5OC44LTczLjQgMTYxLjgtMS4yIDE3LjYgMTIgMzIuOSAyOS43IDM0LjJzMzIuOS0xMiAzNC4yLTI5LjdjMy4zLTQ3IDIzLjYtODkuNCA1NC44LTEyMUwxNTEgMTUzYzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJTMTkyIDE0NS43IDE5MiAxMzZsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRMNTYgMEM0Ni4zIDAgMzcuNSA1LjggMzMuOCAxNC44UzMyLjIgMzQuMSAzOSA0MXptMjAxLTEwLjdjLTEuMiAxNy42IDEyIDMyLjkgMjkuNyAzNC4yIDQ3IDMuMyA4OS40IDIzLjYgMTIxIDU0LjhMMzU5IDE1MWMtNi45IDYuOS04LjkgMTcuMi01LjIgMjYuMlMzNjYuMyAxOTIgMzc2IDE5MmwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTkuNy01LjgtMTguNS0xNC44LTIyLjJTNDc3LjkgMzIuMiA0NzEgMzlMNDM2IDc0Yy00Mi4yLTQxLjctOTguOC02OC45LTE2MS44LTczLjQtMTcuNi0xLjItMzIuOSAxMi0zNC4yIDI5Ljd6TTQxIDQ3M2wzNS0zNWM0Mi4yIDQxLjcgOTguOCA2OC45IDE2MS44IDczLjQgMTcuNiAxLjIgMzIuOS0xMiAzNC4yLTI5LjdzLTEyLTMyLjktMjkuNy0zNC4yYy00Ny0zLjMtODkuNC0yMy42LTEyMS01NC44TDE1MyAzNjFjNi45LTYuOSA4LjktMTcuMiA1LjItMjYuMlMxNDUuNyAzMjAgMTM2IDMyMEwyNCAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0TDAgNDU2YzAgOS43IDUuOCAxOC41IDE0LjggMjIuMlMzNC4xIDQ3OS44IDQxIDQ3M3oiXX0seHV0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImpvaW50IixpY29uOls1NzYsNTEyLFtdLCJmNTk1IiwiTTM2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTljMCA0MC4zIDE2IDc5IDQ0LjUgMTA3LjVsMjEgMjFDNDY5IDE5MSA0ODAgMjE3LjQgNDgwIDI0NWwwIDE5YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTljMC0xNC45LTUuOS0yOS4xLTE2LjQtMzkuNmwtMjEtMjFDMzU3LjEgMTQ2LjkgMzM2IDk2IDMzNiA0M2wwLTE5YzAtMTMuMyAxMC43LTI0IDI0LTI0ek01NTIgMjg4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE5YzAtNDAuMy0xNi03OS00NC41LTEwNy41bC0yMS0yMUM0NDMgOTcgNDMyIDcwLjYgNDMyIDQzbDAtMTljMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE5YzAgMTQuOSA1LjkgMjkuMSAxNi40IDM5LjZsMjEgMjFDNTU0LjkgMTQxLjEgNTc2IDE5MiA1NzYgMjQ1bDAgMTljMCAxMy4zLTEwLjcgMjQtMjQgMjR6TTI5Mi43IDMyMGM1LjYgMCAxMC43IDIuOSAxMy42IDcuNkwzOTQuNiA0NzFjMS4zIDIuMSAwIDQuOS0yLjQgNS4yLTE2LjEgMi41LTMyLjQgMy43LTQ4LjcgMy43bC0zOC4xIDBjLTUuNiAwLTEwLjctMi45LTEzLjYtNy42bC03OS0xMjguNGMtNi05LjggMC0yMi42IDExLjUtMjMuMyA2LjctLjQgMTMuNC0uNiAyMC4yLS42bDQ4LjMgMHpNNDU5LjMgNDY1LjljLTYuNCAxLTEyLjctMS45LTE2LjEtNy40TDM3NC4xIDM0Ni4xYy02LjctMTAuOSAxLjUtMjQuNyAxNC4yLTIyLjkgMS4zIC4yIDIuNiAuNCAzLjggLjZsMTM2LjQgMjFjMjcuMyA0LjIgNDcuNCAyNy43IDQ3LjQgNTUuM3MtMjAuMSA1MS4xLTQ3LjQgNTUuM2wtNjkuMiAxMC42ek0xMzguNyAzMzZjNi43LTEuNSAxMy42IDEuNCAxNy4yIDcuMmw2OC45IDExMmM2LjYgMTAuNy0xLjIgMjQuNC0xMy44IDIzLjEtMTMtMS40LTI1LjktMy41LTM4LjYtNi41TDMxLjIgNDM5LjJDMTIuOSA0MzUgMCA0MTguNyAwIDQwMHMxMi45LTM1IDMxLjItMzkuMkwxMzguNyAzMzZ6Il19LGJ1dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicmFpbGxlIixpY29uOlszODQsNTEyLFtdLCJmMmExIiwiTTgwIDE0NGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMCAxOTJhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAgMTM2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0IDI0IDEwLjcgMjQgMjQtMTAuNyAyNC0yNCAyNHptMCA1NmM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MC04MCAzNS44LTgwIDgwIDM1LjggODAgODAgODB6bTI0OC04MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNCAxMC43LTI0IDI0LTI0IDI0IDEwLjcgMjQgMjR6bTU2IDBjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODAgMzUuOCA4MCA4MCA4MCA4MC0zNS44IDgwLTgwek0zMDQgMjMyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMCAxMDRhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAtMTkyYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYweiJdfSxjcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFza2V0LXNob3BwaW5nIixpY29uOls1NzYsNTEyLFsic2hvcHBpbmctYmFza2V0Il0sImYyOTEiLCJNMjg4IDBjNi42IDAgMTIuOSAyLjcgMTcuNCA3LjVsMTQ0IDE1MiAuNSAuNSA3OC4xIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzIgMCAxNC41LTkuNiAyNi43LTIyLjggMzAuN0w0OTEuMSA0MjkuOWMtNi41IDI5LjMtMzIuNSA1MC4xLTYyLjUgNTAuMWwtMjgxLjMgMGMtMzAgMC01Ni0yMC44LTYyLjUtNTAuMWwtNDYtMjA3LjJjLTEzLjItMy45LTIyLjgtMTYuMi0yMi44LTMwLjcgMC0xNy43IDE0LjMtMzIgMzItMzJsNzguMSAwIC41LS41IDE0NC0xNTJDMjc1LjEgMi43IDI4MS40IDAgMjg4IDB6bTAgNTguOUwxOTIuMiAxNjAgMzgzLjggMTYwIDI4OCA1OC45ek0yMDggMjY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMTJ6bTgwLTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xMjggMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMnoiXX0sdnV0PWNyZSx5dXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnJpZGdlIixpY29uOls1MTIsNTEyLFtdLCJlNGM4IiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw4IDAgMCA2NC00MCAwIDAgMTEyYzM3LjYgOS40IDY0IDQzLjIgNjQgODJsMCA5NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NGMwLTM4LjggMjYuNC03Mi42IDY0LTgybDAtMTEyLTQwIDAgMC02NCA4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTQyNCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0yOTYgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNODggOTZsODAgMCAwIDY0LTgwIDAgMC02NHoiXX0sd3V0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsYW5lLWFycml2YWwiLGljb246WzU3Niw1MTIsWzEyODc0OF0sImY1YWYiLCJNMzg2LjYgMTkzLjFMMjY1LjkgMy43Yy00LjgtNy42LTEyLjYtMTIuOC0yMS40LTE0LjNsLTQzLjEtNy42Yy0xMC44LTEuOS0yMC4yIDcuMy0xOC42IDE4LjFsMjQgMTYxLjYtMTA1LTE4LjUtMzMuOC02MS44QzY0LjUgNzQuNyA1OC4yIDcwLjIgNTEuMSA2OUwzNCA2NmMtOS44LTEuNy0xOC44IDUuOS0xOC44IDE1LjhsLjYgMTA2LjNjLjIgMzAuOSAyMi40IDU3LjMgNTIuOSA2Mi43bDEzLjUgMi40IDAgMCA0MTcuNiA3My42YzMwLjUgNS40IDU5LjUtMTUgNjQuOS00NS40cy0xNS01OS41LTQ1LjQtNjQuOUwzODYuNiAxOTMuMXpNMjI0IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTEzMS4yLTE1LjNhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQ0OHoiXX0sTXV0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhc2gtcmVnaXN0ZXIiLGljb246WzUxMiw1MTIsW10sImY3ODgiLCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NHMyOC43IDY0IDY0IDY0bDQ4IDAgMCAzMi01NyAwYy0zMS42IDAtNTguNSAyMy4xLTYzLjMgNTQuNEwxLjEgMzY0LjFDLjQgMzY4LjggMCAzNzMuNiAwIDM3OC40TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjkuNmMwLTQuOC0uNC05LjYtMS4xLTE0LjRMNDg4LjIgMjE0LjRDNDgzLjUgMTgzLjEgNDU2LjYgMTYwIDQyNSAxNjBsLTIxNyAwIDAtMzIgNDggMGMzNS4zIDAgNjQtMjguNyA2NC02NFMyOTEuMyAwIDI1NiAwTDk2IDB6bTAgNDhsMTYwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZMOTYgODBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6TTY0IDQyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCA0NDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0em00OC0xNjBhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4em0xMjAtMjRhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNMTYwIDM0NGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6TTMyOCAyNDBhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNMjU2IDM0NGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6TTQyNCAyNDBhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNMzUyIDM0NGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6Il19LHp1dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyaW5nIixpY29uOls1MTIsNTEyLFtdLCJmNzBiIiwiTTY0IDIwOGMwIDcuOCA0LjQgMTguNyAxNy4xIDMwLjMgNDUuNC0yNC4yIDEwNy43LTM4LjMgMTc0LjktMzguM3MxMjkuNSAxNC4xIDE3NC45IDM4LjNjMTIuOC0xMS42IDE3LjEtMjIuNSAxNy4xLTMwLjMgMC0xMi4zLTEwLjgtMzItNDcuOS01MC42LTM1LjItMTcuNi04Ni4xLTI5LjQtMTQ0LjEtMjkuNHMtMTA4LjkgMTEuOC0xNDQuMSAyOS40Qzc0LjggMTc2IDY0IDE5NS43IDY0IDIwOHptMTkyIDQwYy00NyAwLTg5LjMgNy42LTEyMi45IDE5LjcgMzMuMiAxMi40IDc1LjcgMjAuMyAxMjIuOSAyMC4zczg5LjctNy44IDEyMi45LTIwLjNDMzQ1LjMgMjU1LjYgMzAzIDI0OCAyNTYgMjQ4ek0wIDIwOEMwIDE1OC40IDM5LjQgMTIyLjIgODMuMyAxMDAuMiAxMjkuMSA3Ny4zIDE5MC4zIDY0IDI1NiA2NHMxMjYuOSAxMy4zIDE3Mi43IDM2LjJjNDMuOSAyMiA4My4zIDU4LjIgODMuMyAxMDcuOGwwIDk2YzAgNDkuNi0zOS40IDg1LjgtODMuMyAxMDcuOC00NS45IDIyLjktMTA3IDM2LjItMTcyLjcgMzYuMlMxMjkuMSA0MzQuNyA4My4zIDQxMS44QzM5LjQgMzg5LjggMCAzNTMuNiAwIDMwNGwwLTk2eiJdfSxkcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hhcmUtbm9kZXMiLGljb246WzUxMiw1MTIsWyJzaGFyZS1hbHQiXSwiZjFlMCIsIk0zODQgMTkyYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2LTk2IDQzLTk2IDk2YzAgNS40IC41IDEwLjggMS4zIDE2TDE1OS42IDE4NC4xYy0xNi45LTE1LTM5LjItMjQuMS02My42LTI0LjEtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmMyNC40IDAgNDYuNi05LjEgNjMuNi0yNC4xTDI4OS4zIDQwMGMtLjkgNS4yLTEuMyAxMC41LTEuMyAxNiAwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2LTQzLTk2LTk2LTk2Yy0yNC40IDAtNDYuNiA5LjEtNjMuNiAyNC4xTDE5MC43IDI3MmMuOS01LjIgMS4zLTEwLjUgMS4zLTE2cy0uNS0xMC44LTEuMy0xNmwxMjkuNy03Mi4xYzE2LjkgMTUgMzkuMiAyNC4xIDYzLjYgMjQuMXoiXX0sa3V0PWRyZSxTdXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTUzZiIsIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdfSxDdXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmlub2N1bGFycyIsaWNvbjpbNTEyLDUxMixbXSwiZjFlNSIsIk0xMjggMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyLTk2IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptNjQgOTZsMCAzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTU5LjFjMC0zNC42IDkuNC02OC42IDI3LjItOTguMyAxMy43LTIyLjggMjIuNS00OC4yIDI1LjgtNzQuNkw2MC41IDE1NmMyLTE2IDE1LjYtMjggMzEuOC0yOGw5OS44IDB6bTIyNy44IDBjMTYuMSAwIDI5LjggMTIgMzEuOCAyOEw0NTkgMjE2YzMuMyAyNi40IDEyLjEgNTEuOCAyNS44IDc0LjYgMTcuOCAyOS43IDI3LjIgNjMuNyAyNy4yIDk4LjNsMCA1OS4xYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMjAgOTkuOCAwek0zMjAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyLTk2IDAgMC0zMnptLTMyIDY0bDAgMTYwLTY0IDAgMC0xNjAgNjQgMHoiXX0sTHV0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImtpcC1zaWduIixpY29uOlszODQsNTEyLFtdLCJlMWM0IiwiTTM0MC44IDg4LjNjMTMuNC0xMS41IDE1LTMxLjcgMy41LTQ1LjFzLTMxLjctMTUtNDUuMS0zLjVMMTI4IDE4Ni40IDEyOCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCA0Ni4zIDY0IDY0bDAgMTY4LTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDE2OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTIyLjQgMTcxLjIgMTQ2LjdjMTMuNCAxMS41IDMzLjYgOS45IDQ1LjEtMy41czkuOS0zMy42LTMuNS00NS4xTDE3My4yIDI4MCAzNTIgMjgwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDE3My4yIDIzMiAzNDAuOCA4OC4zeiJdfSxmcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFyZC1kcml2ZSIsaWNvbjpbNDQ4LDUxMixbMTI4NDM2LCJoZGQiXSwiZjBhMCIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMjYwLjFDMTguMSAyNDcuNCA0MC4yIDI0MCA2NCAyNDBsMzIwIDBjMjMuOCAwIDQ1LjkgNy40IDY0IDIwLjFMNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek00NDggMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDI4OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0ek0yMjQgMzg0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTEyOC0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LFR1dD1mcmUsX3V0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJhbmtpbmctc3RhciIsaWNvbjpbNTc2LDUxMixbXSwiZTU2MSIsIk0zMjEuOCA1NC4xTDI5OC4yIDYuM2MtMy45LTguMy0xNi4xLTguNi0yMC40IDBsLTIzLjYgNDcuOC01Mi4zIDcuNWMtOS4zIDEuNC0xMy4zIDEyLjktNi40IDE5LjhsMzggMzctOSA1Mi4xYy0xLjQgOS4zIDguMiAxNi41IDE2LjggMTIuMmw0Ni45LTI0LjggNDYuNiAyNC40YzguNiA0LjMgMTguMy0yLjkgMTYuOC0xMi4ybC05LTUyLjEgMzgtMzYuNmM2LjgtNi44IDIuOS0xOC4zLTYuNC0xOS44bC01Mi4zLTcuNXpNMjU2IDI1NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNjBjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE2MGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNNDggMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNNDE2IDQzMmwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh6Il19LEF1dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLXRpZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjUwOCIsIk0yMjQgMjQ4YTEyMCAxMjAgMCAxIDEgMC0yNDAgMTIwIDEyMCAwIDEgMSAwIDI0MHptLTMwLjUgNTZsNjEgMGM5LjcgMCAxNy41IDcuOCAxNy41IDE3LjUgMCA0LjItMS41IDguMi00LjIgMTEuNGwtMjcuNCAzMiAzMSAxMTUuMSAuNiAwIDM0LjYtMTM4LjVjMi4yLTguNyAxMS4xLTE0IDE5LjUtMTAuOCA2MS45IDIzLjYgMTA1LjkgODMuNiAxMDUuOSAxNTMuOCAwIDE1LjEtMTIuMyAyNy40LTI3LjQgMjcuNEw0My40IDUxMmMtMTUuMSAwLTI3LjQtMTIuMy0yNy40LTI3LjQgMC03MC4yIDQ0LTEzMC4yIDEwNS45LTE1My44IDguNC0zLjIgMTcuMyAyLjEgMTkuNSAxMC44bDM0LjYgMTM4LjUgLjYgMCAzMS0xMTUuMS0yNy40LTMyYy0yLjctMy4yLTQuMi03LjItNC4yLTExLjQgMC05LjcgNy44LTE3LjUgMTcuNS0xNy41eiJdfSx1cmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZWxsaXBzaXMiLGljb246WzQ0OCw1MTIsWyJlbGxpcHNpcy1oIl0sImYxNDEiLCJNMCAyNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0xNjggMGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTIyNC01NmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnoiXX0sJHV0PXVyZSxEdXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RvcmUtc2xhc2giLGljb246WzU3Niw1MTIsW10sImUwNzEiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTguNi01OC42YzEuMS00IDEuNi04LjIgMS42LTEyLjVsMC0xNTEuMmMtMTIuNSA0LjYtMjYuMSA3LjItNDAuNSA3LjItOC4xIDAtMTUuOS0uOC0yMy41LTIuNGwwIDY2LjQtMzAuMiAwLTEzNy41LTEzNy41YzIuOS0zLjYgNS41LTcuNCA3LjYtMTEuNSAxMS42IDIyIDM0LjcgMzcgNjEuMyAzNyAyNi44IDAgNDkuOC0xNS4xIDYxLjQtMzcuMSAxMS40IDIyLjEgMzQuNSAzNy4xIDYwLjggMzcuMSA0NS42IDAgNzguNC00My43IDY1LjYtODcuNUw1MTMuOCA3Mi4zQzUwNi44IDQ4LjQgNDg0LjkgMzIgNDYwIDMyTDExNiAzMmMtNS41IDAtMTAuOCAuOC0xNS45IDIuM0w0MS0yNC45ek0xNTEuNSAyMjEuM0w0OC43IDExOC42IDM4LjkgMTUyLjVjLTEyLjggNDMuNyAyMCA4Ny41IDY1LjYgODcuNSAxOC4xIDAgMzQuNy03LjEgNDctMTguN3pNNDEwLjIgNDgwbC0xMjgtMTI4LTE1NC4yIDAgMC02Ni40Yy03LjYgMS42LTE1LjUgMi40LTIzLjUgMi40LTE0LjQgMC0yOC0yLjYtNDAuNS03LjJMNjQgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI5OC4yIDB6Il19LHByZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJjZW50IixpY29uOls0NDgsNTEyLFs2MjEwMSw2Mjc4NSwicGVyY2VudGFnZSJdLCIyNSIsIk0xOTIgMTI4YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHpNNDQ4IDM4NGE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6TTQzOC42IDg2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTM4NCAzODRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMzg0LTM4NHoiXX0sRXV0PXByZSxocmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS16aXBwZXIiLGljb246WzM4NCw1MTIsWyJmaWxlLWFyY2hpdmUiXSwiZjFjNiIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNNjQgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCA0OEM3NC43IDQ4IDY0IDU4LjcgNjQgNzJ6bTAgOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTY0IDcybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTE2IDY0YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnoiXX0sTnV0PWhyZSxQdXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGlzcGxheSIsaWNvbjpbNTEyLDUxMixbXSwiZTE2MyIsIk00NDggOTZsMCAyNTYtMzg0IDAgMC0yNTYgMzg0IDB6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTQ0IDAtMTYgNDgtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMC0xNi00OCAxNDQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnoiXX0sbXJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imljb25zIixpY29uOls1MTIsNTEyLFsiaGVhcnQtbXVzaWMtY2FtZXJhLWJvbHQiXSwiZjg2ZCIsIk0xNzQuOSAyNzJjMTAuNyAwIDIwLjcgNS4zIDI2LjYgMTQuMmwxMS44IDE3LjggMjYuNyAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTEyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAzNTJjMC0yNi41IDIxLjUtNDggNDgtNDhsMjYuNyAwIDExLjgtMTcuOGM1LjktOC45IDE1LjktMTQuMiAyNi42LTE0LjJsNjEuNyAwem0yNzguNi0xMmM1LjYtNC45IDEzLjktNS4zIDE5LjktLjlzOC4zIDEyLjQgNS4zIDE5LjNMNDQwLjMgMzY4IDQ5NiAzNjhjNi43IDAgMTIuNiA0LjEgMTUgMTAuNHMuNiAxMy4zLTQuNCAxNy43bC0xMjggMTEyYy01LjYgNC45LTEzLjkgNS4zLTE5LjkgLjlzLTguMy0xMi40LTUuMy0xOS4zbDM4LjUtODkuNy01NS44IDBjLTYuNyAwLTEyLjYtNC4xLTE1LTEwLjRzLS42LTEzLjMgNC40LTE3LjdsMTI4LTExMnpNMTQ0IDM2MGE0OCA0OCAwIDEgMCAwIDk2IDQ4IDQ4IDAgMSAwIDAtOTZ6TTQ4My44IC40YzYuNS0xLjEgMTMuMSAuNCAxOC41IDQuNCA2LjEgNC41IDkuNyAxMS43IDkuNyAxOS4ybDAgMTUyLS4zIDQuOWMtMy4zIDI0LjItMzAuNSA0My4xLTYzLjcgNDMuMS0zNS4zIDAtNjQtMjEuNS02NC00OHMyOC43LTQ4IDY0LTQ4YzUuNSAwIDEwLjkgLjYgMTYgMS42bDAtNDkuMy0xMTIgMzMuNiAwIDExMC4yLS4zIDQuOWMtMy4zIDI0LjItMzAuNSA0My4xLTYzLjcgNDMuMS0zNS4zIDAtNjQtMjEuNS02NC00OHMyOC43LTQ4IDY0LTQ4YzUuNSAwIDEwLjkgLjYgMTYgMS42TDMwNCA3MmMwLTEwLjYgNy0yMCAxNy4xLTIzbDE2MC00OCAyLjctLjZ6TTE4OC45IDBDMjI2IDAgMjU2IDMwIDI1NiA2Ny4xbDAgNi4xYzAgNTYuMS03NS4yIDExMi4xLTExMC4zIDEzNS4zLTEwLjggNy4xLTI0LjYgNy4xLTM1LjQgMC0zNS4xLTIzLjEtMTEwLjMtNzkuMi0xMTAuMy0xMzUuM2wwLTYuMUMwIDMwIDMwIDAgNjcuMSAwIDg4LjIgMCAxMDggOS45IDEyMC43IDI2LjhsNy4zIDkuOCA3LjMtOS44QzE0OCA5LjkgMTY3LjggMCAxODguOSAweiJdfSxJdXQ9bXJlLEZ1dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJydWxlci12ZXJ0aWNhbCIsaWNvbjpbMjU2LDUxMixbXSwiZjU0OCIsIk0wIDE2QzAtMTAuNSAyMS41LTMyIDQ4LTMybDE2MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjQtMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA0IDAgMCA0OC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDAgMCA0OC0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDQ4LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMCAwIDQ4LTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNCAwIDAgMjRjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTQ0Yy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE2eiJdfSxncmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFwLWxvY2F0aW9uLWRvdCIsaWNvbjpbNjQwLDUxMixbIm1hcC1tYXJrZWQtYWx0Il0sImY1YTAiLCJNNTc2IDQ4YzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40TDQxMy41IDc3LjUgMjM0LjEgMTcuNmMtOC4xLTIuNy0xNi44LTIuMS0yNC40IDEuN2wtMTI4IDY0QzcwLjggODguOCA2NCA5OS45IDY0IDExMmwwIDM1MmMwIDExLjEgNS43IDIxLjQgMTUuMiAyNy4yczIxLjIgNi40IDMxLjEgMS40bDExNi4xLTU4LjEgMTczLjMgNTcuOGMtNC4zLTYuNC04LjUtMTMuMS0xMi42LTE5LjktMTEtMTguMy0yMS45LTM5LjMtMzAtNjEuOGwtMTAxLjItMzMuNyAwLTI4NC41IDEyOCA0Mi43IDAgOTkuM2MzMS0zNS44IDc3LTU4LjQgMTI4LTU4LjQgMjIuNiAwIDQ0LjIgNC40IDY0IDEyLjVMNTc2IDQ4ek01MTIgMjI0Yy02Ni4zIDAtMTIwIDUyLjgtMTIwIDExNy45IDAgNjguOSA2NC4xIDE1MC40IDk4LjYgMTg5LjMgMTEuNiAxMyAzMS4zIDEzIDQyLjkgMCAzNC41LTM4LjkgOTguNi0xMjAuNCA5OC42LTE4OS4zIDAtNjUuMS01My43LTExNy45LTEyMC0xMTcuOXpNNDcyIDM0NGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAweiJdfSxPdXQ9Z3JlLHhyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZWFydC1jcmFjayIsaWNvbjpbNTEyLDUxMixbMTI4MTQ4LCJoZWFydC1icm9rZW4iXSwiZjdhOSIsIk0xMzMuMSAzMmMxNy4zIDAgMzQuMiAzLjQgNDkuOSA5LjdsNTQuOCA4NS4yLTc1LjQgNzUuNGMtMS41IDEuNS0yLjQgMy42LTIuMyA1LjhzMSA0LjIgMi42IDUuN2wxMTIgMTA0YzIuOSAyLjcgNy40IDIuOSAxMC41IC4zczMuOC03IDEuNy0xMC40bC02MC40LTk4LjEgOTAuNy03NS42YzIuNi0yLjEgMy41LTUuNyAyLjQtOC44TDI5Ni40IDYwLjZDMzE5LjYgNDIuMyAzNDguNiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxMTIuMi0xMzkuOSAyNDIuNS0yMTIuOSAyOTguMi0xMi40IDkuNC0yNy42IDE0LjEtNDMuMSAxNC4xcy0zMC44LTQuNi00My4xLTE0LjFDMTM5LjkgNDEwLjIgMCAyNzkuOSAwIDE2Ny43bDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyeiJdfSxCdXQ9eHJlLFJ1dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb3ciLGljb246WzY0MCw1MTIsWzEyODAwNF0sImY2YzgiLCJNOTYgMjI0bDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC04OC4yYzkuOSA2LjYgMjAuNiAxMiAzMiAxNi4xbDAgMjQuMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTYuOWM1LjMgLjYgMTAuNiAuOSAxNiAuOXMxMC43LS4zIDE2LS45bDAgMTYuOWMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMjQuMmMxMS40LTQgMjIuMS05LjQgMzItMTYuMWwwIDg4LjJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2MCAzMiAzMiAwIDQ5LjVjMCA5LjUgMi44IDE4LjcgOC4xIDI2LjZMNTMwIDQyN2M4LjggMTMuMSAyMy41IDIxIDM5LjMgMjEgMjIuNSAwIDQxLjktMTUuOSA0Ni4zLTM4bDIwLjMtMTAxLjZjMi42LTEzLS4zLTI2LjUtOC0zNy4zbC0zLjktNS41IDAtODEuNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE0LjQtNTIuOS03NC4xQzQ5NiA4Ni41IDQ1Mi40IDY0IDQwNS45IDY0TDE0NCA2NEM3Ny43IDY0IDI0IDExNy43IDI0IDE4NGwwIDU0QzkuNCAyNDkuOCAwIDI2Ny44IDAgMjg4bDAgMTcuNmMwIDggNi40IDE0LjQgMTQuNCAxNC40IDMxLjggMCA1Ny42LTI1LjggNTcuNi01Ny42TDcyIDE4NGMwLTI0LjMgMTIuMS00NS44IDMwLjUtNTguOS00LjIgMTAuOC02LjUgMjIuNi02LjUgMzQuOWwwIDY0ek01NjAgMzM2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6TTE2Ni42IDE2Ni42Yy00LjItNC4yLTYuNi0xMC02LjYtMTYgMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZsMTc4LjcgMGMxMi41IDAgMjIuNiAxMC4xIDIyLjYgMjIuNiAwIDYtMi40IDExLjgtNi42IDE2bC0yMy40IDIzLjRDMzMyLjIgMjExLjggMzAyLjcgMjI0IDI3MiAyMjRzLTYwLjItMTIuMi04MS45LTMzLjlsLTIzLjQtMjMuNHoiXX0sdjc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicnNzIixpY29uOls0NDgsNTEyLFsiZmVlZCJdLCJmMDllIiwiTTAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzIgMjI5LjggMCA0MTYgMTg2LjIgNDE2IDQxNiAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkMzODQgMjUzLjYgMjI2LjQgOTYgMzIgOTYgMTQuMyA5NiAwIDgxLjcgMCA2NHpNMCA0MTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek0zMiAxNjBjMTU5LjEgMCAyODggMTI4LjkgMjg4IDI4OCAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTEyMy43LTEwMC4zLTIyNC0yMjQtMjI0LTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il19LEh1dD12Nyx5Nz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYWduaWZ5aW5nLWdsYXNzIixpY29uOls1MTIsNTEyLFsxMjgyNjksInNlYXJjaCJdLCJmMDAyIiwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjA4IDM1MmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6Il19LHF1dD15NyxWdXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQtbW9vbiIsaWNvbjpbNjQwLDUxMixbXSwiZjZjMyIsIk00ODAgMGMxNC42IDAgMjguOCAxLjYgNDIuNSA0LjcgNy40IDEuNyAxMyA3LjggMTMuOSAxNS40cy0zIDE0LjktOS44IDE4LjNjLTQ1LjQgMjIuNi03Ni42IDY5LjUtNzYuNiAxMjMuNiAwIDc2LjIgNjEuOCAxMzggMTM4IDEzOCAzLjcgMCA3LjQtLjEgMTEuMS0uNCA3LjYtLjYgMTQuNyAzLjYgMTcuOCAxMC42czEuNSAxNS4xLTMuOSAyMC40Yy0yNiAyNS01OS4xIDQyLjctOTUuOSA0OS45LTExLjEtMjUuMy0zMC4yLTQ2LjMtNTQuMS01OS44LTcuNi02My40LTYxLjYtMTEyLjYtMTI3LjEtMTEyLjYtMTEuMiAwLTIyLjEgMS41LTMyLjUgNC4yLTQuOC00LjItOS45LTguMi0xNS4yLTExLjgtLjEtMi44LS4yLTUuNi0uMi04LjQgMC0xMDYgODYtMTkyIDE5Mi0xOTJ6bS0uMSA0MzEuOWMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMjcxLjkgMGMtNTMgMC05Ni00My05Ni05NiAwLTQ3LjYgMzQuNi04NyA4MC05NC42LS40LTUyLjggNDIuOS05Ny4zIDk2LTk3LjMgMzQuOSAwIDY1LjQgMTguNiA4Mi4yIDQ2LjQgMTMtOS4xIDI4LjgtMTQuNCA0NS44LTE0LjQgNDQuMiAwIDgwIDM1LjggODAgODAgMCA1LjktLjYgMTEuNy0xLjkgMTcuMiAzNy40IDYuNyA2NS44IDM5LjQgNjUuOCA3OC43eiJdfSxQVj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib3hlcy1zdGFja2VkIixpY29uOls1MTIsNTEyLFs2MjYyNSwiYm94ZXMiLCJib3hlcy1hbHQiXSwiZjQ2OCIsIk0yMjQgMGwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0IDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjhjMCA1LjUtLjcgMTAuOS0yIDE2bC0yNTIgMGMtMS4zLTUuMS0yLTEwLjUtMi0xNmwwLTEyOGMwLTM1LjMgMjguNy02NCA2NC02NGwzMiAwem05NiA1MTJjLTExLjIgMC0yMS44LTIuOS0zMS04IDkuNS0xNi41IDE1LTM1LjYgMTUtNTZsMC0xMjhjMC0yMC40LTUuNS0zOS41LTE1LTU2IDkuMi01LjEgMTkuNy04IDMxLThsMzIgMCAwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0IDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEyOCAwek0wIDMyMGMwLTM1LjMgMjguNy02NCA2NC02NGwzMiAwIDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjQgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzIweiJdfSxVdXQ9UFYsanV0PVBWLFd1dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb2RlLWJyYW5jaCIsaWNvbjpbNDQ4LDUxMixbXSwiZjEyNiIsIk04MCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04MC0yNGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgNzAuNyAxNzYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyLjdjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjMgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgMjIuN2MwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMTc2IDAgMCA3MC43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjMgMCA0NC4yLTM1LjggODAtODAgODBTMCA0NzYuMiAwIDQzMmMwLTMyLjggMTkuNy02MSA0OC03My4zbDAtMjA1LjNDMTkuNyAxNDEgMCAxMTIuOCAwIDgwIDAgMzUuOCAzNS44IDAgODAgMHM4MCAzNS44IDgwIDgwem0yMzIgMGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek04MCA0NTZhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxicmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFuIixpY29uOls1MTIsNTEyLFsxMjg2ODMsImNhbmNlbCJdLCJmMDVlIiwiTTM2Ny4yIDQxMi41TDk5LjUgMTQ0LjhjLTIyLjQgMzEuNC0zNS41IDY5LjgtMzUuNSAxMTEuMiAwIDEwNiA4NiAxOTIgMTkyIDE5MiA0MS41IDAgNzkuOS0xMy4xIDExMS4yLTM1LjV6bTQ1LjMtNDUuM2MyMi40LTMxLjQgMzUuNS02OS44IDM1LjUtMTExLjIgMC0xMDYtODYtMTkyLTE5Mi0xOTItNDEuNSAwLTc5LjkgMTMuMS0xMTEuMiAzNS41TDQxMi41IDM2Ny4yek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdfSxHdXQ9YnJlLFl1dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJqdWctZGV0ZXJnZW50IixpY29uOlszODQsNTEyLFtdLCJlNTE5IiwiTTk2IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggOTZDNzQuNyA5NiA2NCA4NS4zIDY0IDcyUzc0LjcgNDggODggNDhsOCAwIDAtMjR6TTAgMjU2YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4bDEyOCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyNTZ6bTI1NiAwbDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyeiJdfSx2cmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmVwbHkiLGljb246WzUxMiw1MTIsWzYxNzE0LCJtYWlsLXJlcGx5Il0sImYzZTUiLCJNMjA0LjIgMTguNGMxMiA1IDE5LjggMTYuNiAxOS44IDI5LjZsMCA4MCAxMTIgMGM5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDExMy4zLTgxLjUgMTYzLjktMTAwLjIgMTc0LjEtMi41IDEuNC01LjMgMS45LTguMSAxLjktMTAuOSAwLTE5LjctOC45LTE5LjctMTkuNyAwLTcuNSA0LjMtMTQuNCA5LjgtMTkuNSA5LjQtOC44IDIyLjItMjYuNCAyMi4yLTU2LjcgMC01My00My05Ni05Ni05NmwtOTYgMCAwIDgwYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYwYzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45eiJdfSxadXQ9dnJlLFh1dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdW4tcGxhbnQtd2lsdCIsaWNvbjpbNjQwLDUxMixbXSwiZTU3YSIsIk0xNjAgMGMtNS41IDAtMTAuNiAyLjgtMTMuNSA3LjRsLTEuMSAyLjEtMjQuOCA1NS40LTU2LjctMjEuN2MtNS45LTIuMi0xMi41LS44LTE3IDMuN1M0MSA1OCA0My4yIDYzLjlsMjEuNyA1Ni43LTU1LjQgMjQuOEMzLjcgMTQ4IDAgMTUzLjcgMCAxNjBzMy43IDEyIDkuNSAxNC42bDU1LjQgMjQuOC0yMS43IDU2LjdjLTIuMiA1LjktLjggMTIuNSAzLjcgMTdzMTEuMSA1LjkgMTcgMy43bDU2LjctMjEuNyAyNC44IDU1LjRjMi42IDUuOCA4LjMgOS41IDE0LjYgOS41czEyLTMuNyAxNC42LTkuNWwyNC44LTU1LjQgNTYuOCAyMS43YzUuOSAyLjIgMTIuNSAuOCAxNy0zLjdzNS45LTExLjEgMy43LTE3bC0yMS43LTU2LjcgNTUuNC0yNC44YzUuOC0yLjYgOS41LTguMyA5LjUtMTQuNnMtMy43LTEyLTkuNS0xNC42bC01NS40LTI0LjggMjEuNy01Ni43IC43LTIuMmMxLjItNS4zLS40LTEwLjktNC4zLTE0LjhzLTkuNS01LjUtMTQuOC00LjNsLTIuMiAuNy01Ni44IDIxLjctMjQuOC01NS40QzE3MiAzLjcgMTY2LjMgMCAxNjAgMHptMCA5NmE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptMzIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMzc2IDE2bDAgNTMuNGMtMTQuOCA3LjctMjQgMjMuMS0yNCA0NC42IDAgMTYuOCAxNiA0NCAzNy40IDY3LjIgNS44IDYuMiAxNS41IDYuMiAyMS4yIDAgMjEuNC0yMy4zIDM3LjQtNTAuNiAzNy40LTY3LjIgMC0yMS41LTkuMi0zNy0yNC00NC42bDAtNTMuNGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDIyLjdjLTkuOC00LjMtMjAuNi02LjctMzItNi43LTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjEuNGMtMTQuOCA3LjYtMjQgMjMuMS0yNCA0NC42IDAgMTYuOCAxNiA0NCAzNy40IDY3LjIgNS44IDYuMiAxNS41IDYuMiAyMS4yIDAgMjEuNC0yMy4zIDM3LjQtNTAuNiAzNy40LTY3LjIgMC0yMS41LTkuMi0zNy0yNC00NC42bDAtMjEuNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc2LTQyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDU3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMDQgMCAwLTI3MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdfSxRdXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFjdGVyaXVtIixpY29uOls1NzYsNTEyLFtdLCJlMDVhIiwiTTQwOCAxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNFMzNjAgMi43IDM2MCAxNmwwIDIzLjRjLTEzLjkgNS4zLTI2LjkgMTMuNS0zOC4yIDI0LjVMMzA1IDQ3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDE2LjggMTYuOC0zMC4xIDMwLjEtMTYuOC0xNi44Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDE2LjggMTYuOGMtMTAgMTAtMjAgMjAtMzAuMSAzMC4xTDE3NyAxNzVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTYuOCAxNi44LTMwLjEgMzAuMS0xNi44LTE2LjhjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTYuOCAxNi44Yy0xMSAxMS4zLTE5LjIgMjQuMy0yNC41IDM4LjJMNDggMzI4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE2LjMgMGMxLjMgMTguMyA3LjEgMzYuNCAxNy40IDUyLjRMNzEgNDM5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTAuNi0xMC42YzE2IDEwLjMgMzQuMSAxNi4xIDUyLjQgMTcuNGwwIDE2LjNjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIzLjRjMTMuOS01LjMgMjYuOS0xMy41IDM4LjItMjQuNUwyNzEgNDY1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTYuOC0xNi44IDMwLjEtMzAuMSAxNi44IDE2LjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNi44LTE2LjhjMTAtMTAgMjAtMjAgMzAuMS0zMC4xTDM5OSAzMzdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNi44LTE2LjggMzAuMS0zMC4xIDE2LjggMTYuOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE2LjgtMTYuOGMxMS0xMS4zIDE5LjItMjQuMyAyNC41LTM4LjJsMjMuNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNi4zIDBjLTEuMy0xOC4zLTcuMS0zNi40LTE3LjQtNTIuNEw1MDUgNzNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw0NjAuNCA0OS43Yy0xNi0xMC4zLTM0LjEtMTYuMS01Mi40LTE3LjRMNDA4IDE2ek0xNjAgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTI3MiAyNDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxLdXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmVjb3JkLXZpbnlsIixpY29uOls1MTIsNTEyLFtdLCJmOGQ5IiwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1Ni05NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptMCAyNDBhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTExMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LHlyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmbG9wcHktZGlzayIsaWNvbjpbNDQ4LDUxMixbMTI4MTkwLDEyODQyNiwic2F2ZSJdLCJmMGM3IiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNDIuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wzNTIgNTAuN0MzNDAgMzguNyAzMjMuNyAzMiAzMDYuNyAzMkw2NCAzMnptMzIgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjR6TTIyNCAyODhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il19LEp1dD15cmUsZXB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRvaWxldHMtcG9ydGFibGUiLGljb246WzUxMiw1MTIsW10sImU1ODQiLCJNNjQgMGw5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYtMjI0IDAgMC0xNkMwIDI4LjcgMjguNyAwIDY0IDB6TTAgMTI4bDIyNCAwIDAgMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC0xMjggMCAwIDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRTMCA1MDEuMyAwIDQ4OEwwIDEyOHpNMTI4IDI0OGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDI0IDAgMC05Ni0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMzUyIDBsOTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2LTIyNCAwIDAtMTZjMC0zNS4zIDI4LjctNjQgNjQtNjR6TTI4OCAxMjhsMjI0IDAgMCAzNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LTEyOCAwIDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTM2MHpNNDE2IDI0OGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDI0IDAgMC05Ni0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHoiXX0sdHB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im8iLGljb246WzQ0OCw1MTIsWzExMV0sIjRmIiwiTTIyNCA5NmExNjAgMTYwIDAgMSAwIDAgMzIwIDE2MCAxNjAgMCAxIDAgMC0zMjB6TTQ0OCAyNTZhMjI0IDIyNCAwIDEgMSAtNDQ4IDAgMjI0IDIyNCAwIDEgMSA0NDggMHoiXX0sYXB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBhbGV0dGUiLGljb246WzUxMiw1MTIsWzEyNzkxMl0sImY1M2YiLCJNNTEyIDI1NmMwIC45IDAgMS44IDAgMi43LS40IDM2LjUtMzMuNiA2MS4zLTcwLjEgNjEuM0wzNDQgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDMuNCAuNCA2LjcgMSA5LjkgMi4xIDEwLjIgNi41IDIwIDEwLjggMjkuOSA2LjEgMTMuOCAxMi4xIDI3LjUgMTIuMSA0MiAwIDMxLjgtMjEuNiA2MC43LTUzLjQgNjItMy41IC4xLTcgLjItMTAuNiAuMi0xNDEuNCAwLTI1Ni0xMTQuNi0yNTYtMjU2UzExNC42IDAgMjU2IDAgNTEyIDExNC42IDUxMiAyNTZ6TTEyOCAyODhhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC05NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTI4OCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiA5NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LHJwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1bmxvY2siLGljb246WzM4NCw1MTIsWzEyODI3NV0sImYwOWMiLCJNMTI4IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0IDMxLjcgMCA1OCAyMyA2My4xIDUzLjMgMi45IDE3LjQgMTkuNCAyOS4yIDM2LjkgMjYuM3MyOS4yLTE5LjQgMjYuMy0zNi45QzMwOC4xIDE0LjEgMjU1LjUtMzIgMTkyLTMyIDEyMS4zLTMyIDY0IDI1LjMgNjQgOTZsMCA2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTE5MiAwIDAtNjR6Il19LHdyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlYXItbGlzdGVuIixpY29uOls1MTIsNTEyLFsiYXNzaXN0aXZlLWxpc3RlbmluZy1zeXN0ZW1zIl0sImYyYTIiLCJNMzc5LjYgLjNjLTguOSAxLjItMTcuMiA2LjItMjIuNCAxNC4xLTYuOCAxMC40LTcgMjQuMS0uNCAzNC42IDUuNiA4LjkgMTUuNSAxMi43IDIzLjggMTguNSA3LjUgNS4yIDE3LjYgMTMuMiAyNy43IDI0LjIgMjAgMjEuNyAzOS41IDU0LjMgMzkuNSAxMDAuMyAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNjYtMjguNS0xMTMuNC01Ni41LTE0My43LTEzLjktMTUuMS0yNy44LTI2LjEtMzguMy0zMy4zLTExLTcuNi0yMy41LTE2LjYtMzcuNi0xNC43ek0yNDAgMTI4Yy01Ny42IDAtMTA1LjEgNDMuNi0xMTEuMyA5OS41LTEuOSAxNy42LTE3LjggMzAuMi0zNS4zIDI4LjNzLTMwLjItMTcuOC0yOC4zLTM1LjNjOS43LTg4IDg0LjMtMTU2LjUgMTc0LjktMTU2LjUgOTcuMiAwIDE3NiA3OC44IDE3NiAxNzYgMCA0Ni0xNy43IDg3LjktNDYuNiAxMTkuMy0xMiAxMy0xNy40IDI0LjgtMTcuNCAzNC43bDAgNi4xYzAgNjEuOS01MC4xIDExMi0xMTIgMTEyLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02LjFjMC0zMi45IDE3LjQtNTkuNiAzNC40LTc4IDE4LjQtMjAgMjkuNi00Ni42IDI5LjYtNzUuOSAwLTYxLjktNTAuMS0xMTItMTEyLTExMnpNMCA0ODBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTYwLTk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNODYuNiAzNjEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6TTI0MCAyMDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6Il19LGlwdD13cmUsb3B0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvZGUtcHVsbC1yZXF1ZXN0IixpY29uOls1MTIsNTEyLFtdLCJlMTNjIiwiTTMyOCAyNGMwLTkuNy01LjgtMTguNS0xNC44LTIyLjJTMjkzLjkgLjIgMjg3IDdMMjMxIDYzYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NiA1NmM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzMyOCAxNDUuNyAzMjggMTM2bDAtMjQgMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIxNC43Yy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM0w0NDggMTQ0YzAtNTMtNDMtOTYtOTYtOTZsLTI0IDAgMC0yNHpNNzIgODBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptNTYgNzMuM2MyOC4zLTEyLjMgNDgtNDAuNSA0OC03My4zIDAtNDQuMi0zNS44LTgwLTgwLTgwUzE2IDM1LjggMTYgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDIwNS4zYy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM2wwLTIwNS4zek03MiA0MzJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMzQ0LTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXX0sc3B0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImtleSIsaWNvbjpbNTEyLDUxMixbMTI4MjczXSwiZjA4NCIsIk0zMzYgMzUyYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2UzQzMy4yIDAgMzM2IDAgMTYwIDc4LjggMTYwIDE3NmMwIDE4LjcgMi45IDM2LjggOC4zIDUzLjdMNyAzOTFjLTQuNSA0LjUtNyAxMC42LTcgMTdsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjNi40IDAgMTIuNS0yLjUgMTctN2wzMy4zLTMzLjNjMTYuOSA1LjQgMzUgOC4zIDUzLjcgOC4zek0zNzYgOTZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdfSxucHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2t1bGwiLGljb246WzUxMiw1MTIsWzEyODEyOF0sImY1NGMiLCJNNDE2IDQyNy40YzU4LjUtNDQgOTYtMTExLjYgOTYtMTg3LjQgMC0xMzIuNS0xMTQuNi0yNDAtMjU2LTI0MFMwIDEwNy41IDAgMjQwYzAgNzUuOCAzNy41IDE0My40IDk2IDE4Ny40TDk2IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDY0IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM2LjZ6TTk2IDI1NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6bTI1Ni02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXX0sTXJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcnMtc3Ryb2tlLXVwIixpY29uOlszODQsNTEyLFs5ODk2LCJtYXJzLXN0cm9rZS12Il0sImYyMmEiLCJNMTkyIDI1NmExMTIgMTEyIDAgMSAwIDAgMjI0IDExMiAxMTIgMCAxIDAgMC0yMjR6TTE2IDM2OGMwLTg2LjMgNjIuMS0xNTguMSAxNDQuMS0xNzMuMS0uMS0uOS0uMS0xLjktLjEtMi45bDAtMTYtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjEuNC0yOCAyMi40Yy0xMy44IDExLTMzLjkgOC44LTQ1LTVzLTguOC0zMy45IDUtNDVsODAtNjRjMTEuNy05LjMgMjguMy05LjMgNDAgMGw4MCA2NGMxMy44IDExIDE2IDMxLjIgNSA0NXMtMzEuMiAxNi00NSA1bC0yOC0yMi40IDAgNjEuNCAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMTZjMCAxIDAgMS45LS4xIDIuOSA4MiAxNSAxNDQuMSA4Ni44IDE0NC4xIDE3My4xIDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2UzE2IDQ2NS4yIDE2IDM2OHoiXX0sbHB0PU1yZSx6cmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlyZS1mbGFtZS1zaW1wbGUiLGljb246WzM4NCw1MTIsWyJidXJuIl0sImY0NmEiLCJNMzcyLjUgMjU2LjVsLS43LTEuOUMzMzcuOCAxNjAuOCAyODIgNzYuNSAyMDkuMSA4LjVsLTMuMy0zQzIwMi4xIDIgMTk3LjEgMCAxOTIgMHMtMTAuMSAyLTEzLjggNS41bC0zLjMgM0MxMDIgNzYuNSA0Ni4yIDE2MC44IDEyLjIgMjU0LjZsLS43IDEuOUMzLjkgMjc3LjMgMCAyOTkuNCAwIDMyMS42IDAgNDI2LjcgODYuOCA1MTIgMTkyIDUxMnMxOTItODUuMyAxOTItMTkwLjRjMC0yMi4yLTMuOS00NC4yLTExLjUtNjUuMXptLTkwLjggNDkuNWM0LjEgOS4zIDYuMiAxOS40IDYuMiAyOS41IDAgNTMtNDMgOTYuNS05NiA5Ni41cy05Ni00My41LTk2LTk2LjVjMC0xMC4xIDIuMS0yMC4zIDYuMi0yOS41bDEuOS00LjNjMTUuOC0zNS40IDM3LjktNjcuNyA2NS4zLTk1LjFsOC45LTguOWMzLjYtMy42IDguNS01LjYgMTMuNi01LjZzMTAgMiAxMy42IDUuNmw4LjkgOC45YzI3LjQgMjcuNCA0OS42IDU5LjcgNjUuMyA5NS4xbDEuOSA0LjN6Il19LGNwdD16cmUsZHB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyZWUiLGljb246WzQ0OCw1MTIsWzEyNzc5NF0sImYxYmIiLCJNMjI0LTMyYzcgMCAxMy43IDMuMSAxOC4zIDguNWwxMzYgMTYwYzYuMSA3LjEgNy40IDE3LjEgMy41IDI1LjZTMzY5LjQgMTc2IDM2MCAxNzZsLTI0LjkgMCA3NS4yIDg4LjVjNi4xIDcuMSA3LjQgMTcuMSAzLjUgMjUuNlM0MDEuNCAzMDQgMzkyIDMwNGwtMzguNSAwIDg4LjggMTA0LjVjNi4xIDcuMSA3LjQgMTcuMSAzLjUgMjUuNlM0MzMuNCA0NDggNDI0IDQ0OGwtMTY4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0LTE2OCAwYy05LjQgMC0xNy45LTUuNC0yMS44LTEzLjlzLTIuNi0xOC41IDMuNS0yNS42TDk0LjUgMzA0IDU2IDMwNGMtOS40IDAtMTcuOS01LjQtMjEuOC0xMy45cy0yLjYtMTguNSAzLjUtMjUuNkwxMTIuOSAxNzYgODggMTc2Yy05LjQgMC0xNy45LTUuNC0yMS44LTEzLjlzLTIuNi0xOC41IDMuNS0yNS42bDEzNi0xNjBDMjEwLjMtMjguOSAyMTctMzIgMjI0LTMyeiJdfSxmcHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic21vZyIsaWNvbjpbNTc2LDUxMixbXSwiZjc1ZiIsIk0xNzYgMjg4Qzk2LjUgMjg4IDMyIDIyMy41IDMyIDE0NFM5Ni41IDAgMTc2IDBjMjcuMiAwIDUyLjYgNy41IDc0LjMgMjAuNiAyMC4xLTEzIDQ0LTIwLjYgNjkuNy0yMC42IDQ3LjQgMCA4OC43IDI1LjcgMTEwLjkgNjRsMS4xIDBjNjEuOSAwIDExMiA1MC4xIDExMiAxMTIgMCA2MC4zLTQ3LjYgMTA5LjQtMTA3LjIgMTExLjktMjIuNiAyMC01Mi4zIDMyLjEtODQuOCAzMi4xLTMyLjUgMC02Mi4xLTEyLjEtODQuNy0zMkwxNzYgMjg4ek01MTIgMzkyYzAgMTMuMy0xMC43IDI0LTI0IDI0TDI0IDQxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0NjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHpNODggNDY0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTE3NiAwbDI4OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yODggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sdXB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InMiLGljb246WzMyMCw1MTIsWzExNV0sIjUzIiwiTTAgMTU3LjVDMCA4OC4yIDU2LjIgMzIgMTI1LjUgMzJMMjcyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDEyNS41IDk2Yy0zNCAwLTYxLjUgMjcuNS02MS41IDYxLjUgMCAzMSAyMy4xIDU3LjIgNTMuOSA2MUwyMTAuMSAyMzBDMjcyLjkgMjM3LjkgMzIwIDI5MS4yIDMyMCAzNTQuNSAzMjAgNDIzLjggMjYzLjggNDgwIDE5NC41IDQ4MEw0OCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTQ2LjUgMGMzNCAwIDYxLjUtMjcuNSA2MS41LTYxLjUgMC0zMS0yMy4xLTU3LjItNTMuOS02MUwxMDkuOSAyODJDNDcuMSAyNzQuMSAwIDIyMC44IDAgMTU3LjV6Il19LHBwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJqZWRpIixpY29uOls1NzYsNTEyLFtdLCJmNjY5IiwiTTI0NiAzMTUuN2wtMjEuMi0zMS45Yy0yLjEtMy4yLTEuNy03LjQgMS0xMC4xczYuOS0zLjEgMTAuMS0xbDI5LjUgMTkuN2MyLjEgMS40IDQuOS0uMSA1LTIuNkwyNzkuNyA4Yy4xLTQuNSAzLjgtOCA4LjMtOHM4LjEgMy41IDguMyA4bDkuNCAyODEuOWMuMSAyLjUgMi45IDMuOSA1IDIuNmwyOS41LTE5LjdjMy4yLTIuMSA3LjQtMS43IDEwLjEgMXMzLjEgNi45IDEgMTAuMUwzMzAgMzE1LjdjLTEuMyAxLjktLjIgNC41IDIgNC45bDM3LjYgNy41YzMuNyAuNyA2LjQgNCA2LjQgNy44cy0yLjcgNy4xLTYuNCA3LjhMMzMyIDM1MS40Yy0yLjIgLjQtMy4zIDMtMiA0LjlsMjEuMiAzMS45YzIuMSAzLjIgMS43IDcuNC0xIDEwLjFzLTYuOSAzLjEtMTAuMSAxbC0yNi4zLTE3LjZjLTIuMi0xLjQtNS4xIC4yLTUgMi44bDIuMSA2MS41YzU5LjgtMTAuOCAxMDUuMS02My4xIDEwNS4xLTEyNiAwLTM3LTE1LjctNzAuNC00MC44LTkzLjctNy02LjUtNi41LTE4LjYgMS0yNC40IDM0LTI2LjMgNTUuOC02Ny41IDU1LjgtMTEzLjkgMC0xNi44LTIuOS0zMy04LjItNDgtNC42LTEzIDEwLjItMzAgMjEuNC0yMiA1My41IDM4IDkyLjcgOTQuOCAxMDcuOCAxNjAuNyAuNSAyLjEtLjIgNC4zLTEuNyA1LjlsLTI4LjQgMjguNGMtNCA0LTEuMiAxMC45IDQuNSAxMC45bDI2IDBjMy40IDAgNi4yIDIuNiA2LjMgNiAuMSAzLjMgLjIgNi42IC4yIDEwIDAgMTcuNS0xLjcgMzQuNy00LjggNTEuMy0uMiAxLjItLjkgMi40LTEuNyAzLjNsLTQ2LjUgNDYuNWMtNCA0LTEuMiAxMC45IDQuNSAxMC45bDE0LjYgMGM0LjYgMCA3LjcgNC44IDUuNyA5LTQ0LjUgODkuNS0xMzYuOSAxNTEtMjQzLjcgMTUxUzg4LjggNDUwLjUgNDQuMyAzNjFjLTIuMS00LjIgMS05IDUuNy05bDE0LjYgMGM1LjcgMCA4LjYtNi45IDQuNS0xMC45TDIyLjYgMjk0LjZjLS45LS45LTEuNS0yLTEuNy0zLjMtMy4yLTE2LjYtNC44LTMzLjgtNC44LTUxLjMgMC0zLjMgLjEtNi43IC4yLTEwIC4xLTMuNCAyLjktNiA2LjMtNmwyNiAwYzUuNyAwIDguNi02LjkgNC41LTEwLjlMMjQuNiAxODQuNmMtMS41LTEuNS0yLjItMy44LTEuNy01LjkgMTUuMi02NiA1NC4zLTEyMi44IDEwNy44LTE2MC43IDExLjMtOCAyNiA4LjkgMjEuNCAyMi01LjMgMTUtOC4yIDMxLjItOC4yIDQ4IDAgNDYuMyAyMS45IDg3LjUgNTUuOCAxMTMuOSA3LjUgNS44IDggMTcuOSAxIDI0LjQtMjUuMSAyMy40LTQwLjggNTYuNy00MC44IDkzLjcgMCA2Mi45IDQ1LjQgMTE1LjIgMTA1LjEgMTI2bDIuMS02MS41Yy4xLTIuNi0yLjgtNC4yLTUtMi44bC0yNi4zIDE3LjZjLTMuMiAyLjEtNy40IDEuNy0xMC4xLTFzLTMuMS02LjktMS0xMC4xTDI0NiAzNTYuM2MxLjMtMS45IC4yLTQuNS0yLTQuOWwtMzcuNi03LjVjLTMuNy0uNy02LjQtNC02LjQtNy44czIuNy03LjEgNi40LTcuOGwzNy42LTcuNWMyLjItLjQgMy4zLTMgMi00Ljl6Il19LGtyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24taGlraW5nIixpY29uOls0NDgsNTEyLFsiaGlraW5nIl0sImY2ZWMiLCJNMTkyLTMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0xMjggMTczLjZjMC0zNCAyNy42LTYxLjYgNjEuNi02MS42IDIwLjMgMCAzOS43IDguMSA1NCAyMi40bDQ4LjIgNDguMmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRsMzcuNSAwYzUuOCAwIDExLjMgMS42IDE2IDQuM2wwLTc2LjNjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwMGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI2OC4zYy00LjcgMi43LTEwLjIgNC4zLTE2IDQuM2wtMzcuNSAwYy0yNS41IDAtNDkuOS0xMC4xLTY3LjktMjguMWwtNi42LTYuNiAwIDEwOS4yIDM0LjUgMjkuNmMxNy43IDE1LjIgMjkuMyAzNi4yIDMyLjYgNTkuM2wxMi42IDg4LjFjMi41IDE3LjUtOS43IDMzLjctMjcuMiAzNi4ycy0zMy43LTkuNy0zNi4yLTI3LjJsLTEyLjYtODguMWMtMS4xLTcuNy01LTE0LjctMTAuOS0xOS44bC03MS40LTYxLjJjLTIxLjMtMTguMi0zMy41LTQ0LjktMzMuNS03Mi45bDAtMTAxem0tNC44IDIwMy43YzIuMyAyLjMgNC43IDQuNCA3LjEgNi41bDQ0LjkgMzguNWMtMy42IDguNC04LjUgMTYuMy0xNC40IDIzLjRMODguNiA1MzIuNWMtMTEuMyAxMy42LTMxLjUgMTUuNC00NS4xIDQuMXMtMTUuNC0zMS41LTQuMS00NS4xbDcyLjMtODYuN2MyLjYtMy4xIDQuNS02LjYgNS44LTEwLjRsNS43LTE3LjF6TTAgMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0IDE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2eiJdfSxocHQ9a3JlLG1wdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvd3MtdXAtdG8tbGluZSIsaWNvbjpbNDQ4LDUxMixbXSwiZTRjMiIsIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQzMy43IDAgNDE2IDBMMzIgMHptODYuNiAxMzcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDY0IDIzNy4zIDY0IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjQyLjcgOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHptMjU2IDBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw5LjQtOS40IDAgMjQyLjdjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0Mi43IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6Il19LGdwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXJzLWRvdWJsZSIsaWNvbjpbNjQwLDUxMixbOTg5MV0sImYyMjciLCJNMjg4IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyTDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNTAuNy05NSA5NWMxOS41IDI4LjQgMzEgNjIuNyAzMSA5OS44IDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2UzAgNDAxLjIgMCAzMDQgNzguOCAxMjggMTc2IDEyOGMzNyAwIDcxLjQgMTEuNCA5OS44IDMxbDk1LTk1LTUwLjcgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTE3NiA0MTZhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0em0xNjAgNjRjLTYuOCAwLTEzLjQtLjQtMjAtMS4xIDIzLjYtMTguOSA0My4zLTQyLjUgNTcuNi02OS40IDQzLjMtMTUuNSA3NC40LTU2LjkgNzQuNC0xMDUuNSAwLTI1LjItOC4zLTQ4LjUtMjIuNC02Ny4yIDcuMSAyLjEgMTQuNiAzLjIgMjIuNCAzLjIgMTcgMCAzMi43LTUuMyA0NS43LTE0LjMgMTEuNyAyMy42IDE4LjMgNTAuMiAxOC4zIDc4LjMgMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZ6TTUyOCAxNTcuM0w1MjggMzJjMC0xMS40LTIuNC0yMi4yLTYuNy0zMkw2MDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTUwLjctNDggNDh6Il19LHhwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0aGVybW9tZXRlciIsaWNvbjpbNTEyLDUxMixbXSwiZjQ5MSIsIk05NiAzODIuMWwwLTg4LjhjMC0xNC45IDUuOS0yOS4xIDE2LjQtMzkuNmwyMS43LTIxLjcgNDEgNDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00MS00MSA0Ni4xLTQ2LjEgNDEgNDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00MS00MSA0Ni4xLTQ2LjEgNDEgNDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00MS00MSA3LjgtNy44YzE5LjQtMTkuNCA0NS42LTMwLjIgNzMtMzAuMiA1NyAwIDEwMy4yIDQ2LjIgMTAzLjIgMTAzLjIgMCAyNy40LTEwLjkgNTMuNi0zMC4yIDczTDI1OC4zIDM5OS42Yy0xMC41IDEwLjUtMjQuNyAxNi40LTM5LjYgMTYuNGwtODguOCAwLTg5IDg5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMFMtMi4zIDQ4MC40IDcgNDcxbDg5LTg5eiJdfSxTcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGFpbnRicnVzaCIsaWNvbjpbNTc2LDUxMixbMTI4Mzk2LCJwYWludC1icnVzaCJdLCJmMWZjIiwiTTQ4MC41IDEwLjNMMjU5LjEgMTU4Yy0yOS4xIDE5LjQtNDcuNiA1MC45LTUwLjYgODUuMyA2Mi4zIDEyLjggMTExLjQgNjEuOSAxMjQuMyAxMjQuMyAzNC41LTMgNjUuOS0yMS41IDg1LjMtNTAuNkw1NjUuNyA5NS41YzYuNy0xMC4xIDEwLjMtMjEuOSAxMC4zLTM0LjEgMC0zMy45LTI3LjUtNjEuNC02MS40LTYxLjQtMTIuMSAwLTI0IDMuNi0zNC4xIDEwLjN6TTI4OCA0MDBjMC02MS45LTUwLjEtMTEyLTExMi0xMTJTNjQgMzM4LjEgNjQgNDAwYzAgMy45IC4yIDcuOCAuNiAxMS42IDEuOCAxNy41LTEwLjIgMzYuNC0yNy44IDM2LjRMMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE0NCAwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyeiJdfSxicHQ9U3JlLHZwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJuZXV0ZXIiLGljb246WzM4NCw1MTIsWzk5MDZdLCJmMjJjIiwiTTgwIDE3NmExMTIgMTEyIDAgMSAxIDIyNCAwIDExMiAxMTIgMCAxIDEgLTIyNCAwek0yMjMuOSAzNDkuMUMzMDUuOSAzMzQuMSAzNjggMjYyLjMgMzY4IDE3NiAzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NC4xIDE3My4xLS4xIDEtLjEgMS45LS4xIDIuOWwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtMSAwLTEuOS0uMS0yLjl6Il19LENyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtcGhvbmUtZmxpcCIsaWNvbjpbNDQ4LDUxMixbInBob25lLXNxdWFyZS1hbHQiXSwiZjg3YiIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0yMzIgOTYuN2wyLjggLjhjMzIuMyA4LjggNTkuOSA0MC4xIDUxLjggNzguMi0xOC41IDg3LjUtODcuNCAxNTYuMy0xNzQuOSAxNzQuOS0zOC4xIDguMS02OS40LTE5LjUtNzguMi01MS44bC0uOC0yLjhjLTIuNy05LjggMi40LTIwLjEgMTEuOC0yNGw0OC43LTIwLjNjOC4zLTMuNCAxNy44LTEuMSAyMy41IDUuOWwxOS4zIDIzLjZjMzUuMS0xNy40IDYzLjQtNDYuNiA3OS42LTgyLjRsLTIyLjEtMThjLTYuOS01LjctOS4zLTE1LjItNS45LTIzLjVsMjAuMy00OC43YzMuOS05LjQgMTQuMi0xNC40IDI0LTExLjh6Il19LHlwdD1DcmUsTHJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi10b25ndWUtc3F1aW50IixpY29uOls1MTIsNTEyLFsxMjg1NDEsImdyaW4tdG9uZ3VlLXNxdWludCJdLCJmNThhIiwiTTAgMjU2YzAgMTA0LjQgNjIuNSAxOTQuMiAxNTIuMiAyMzQuMS01LjMtMTMtOC4yLTI3LjItOC4yLTQyLjFsMC02MS43Yy0xNi45LTE2LjUtMzAuMS0zNi43LTM4LjMtNTkuMy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjFjMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTguMyAyMi42LTIxLjUgNDIuOC0zOC4zIDU5LjNsMCA2MS43YzAgMTQuOS0yLjkgMjkuMS04LjIgNDIuMSA4OS43LTM5LjggMTUyLjItMTI5LjYgMTUyLjItMjM0LjEgMC0xNDEuNC0xMTQuNi0yNTYtMjU2LTI1NlMwIDExNC42IDAgMjU2em0xMjUuOC05MS43Yy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xczEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDE5MiAxMjUuOCAxNjQuM3ptMjYzLjYtMjEuMWM0LjUgNi44IDMuMSAxNS45LTMuMSAyMS4xTDM1MyAxOTIgMzg2LjIgMjE5LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjV6TTMyMCA0NDhsMC00NS40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgNDUuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdfSx3cHQ9THJlLE1wdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb21tZW50LWRvbGxhciIsaWNvbjpbNTEyLDUxMixbXSwiZjY1MSIsIk0yNTYgNDgwYzE0MS40IDAgMjU2LTEwNy41IDI1Ni0yNDBTMzk3LjQgMCAyNTYgMCAwIDEwNy41IDAgMjQwYzAgNTQuMyAxOS4yIDEwNC4zIDUxLjYgMTQ0LjVMMi44IDQ3Ni44Yy00LjggOS0zLjMgMjAgMy42IDI3LjVzMTcuOCA5LjggMjcuMSA1LjhsMTE4LjQtNTAuN0MxODMuNyA0NzIuNiAyMTguOSA0ODAgMjU2IDQ4MHptNC0zNTJjMTEgMCAyMCA5IDIwIDIwbDAgNCA4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC00Ny41IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDYuMSA0LjQgMTEuMyAxMC40IDEyLjNsNDEuNyA3YzI1LjMgNC4yIDQzLjkgMjYuMSA0My45IDUxLjggMCAyNi4xLTE5IDQ3LjctNDQgNTEuOGwwIDQuN2MwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC00LTI0IDBjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDU1LjUgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC02LjEtNC40LTExLjMtMTAuNC0xMi4zbC00MS43LTdjLTI1LjMtNC4yLTQzLjktMjYuMS00My45LTUxLjggMC0yOC44IDIzLjItNTIuMiA1Mi01Mi41bDAtNGMwLTExIDktMjAgMjAtMjB6Il19LHpwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoaXBwbyIsaWNvbjpbNjQwLDUxMixbMTI5NDM1XSwiZjZlZCIsIk00MDcgNDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMTcuMiAxNy4yYzEuOS0uMSAzLjktLjIgNS44LS4ybDMyIDBjMTEuMiAwIDIxLjkgMi4zIDMxLjYgNi41TDU0MyA1NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMNTY0IDEwMS45YzcuNiAxMi4yIDEyIDI2LjcgMTIgNDIuMSAwIDEwLjIgNy40IDE4LjggMTYuNyAyMyAyNy45IDEyLjUgNDcuMyA0MC41IDQ3LjMgNzMgMCAyNi4yLTEyLjYgNDkuNC0zMiA2NGwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTYtNjQgMCAwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTcuNmMtMTEuOC0yLjQtMjIuNy03LjQtMzItMTQuNC0xLjUtMS4xLTIuOS0yLjMtNC4zLTMuNS0xNy0xNC43LTI3LjctMzYuNC0yNy43LTYwLjUgMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZjMCA0NC43IDI2LjIgODMuMiA2NCAxMDEuMmwwIDEwLjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTc2Yy0xOS44IDcuNy00MS40IDEyLTY0IDEycy00NC4yLTQuMy02NC0xMmwwIDc2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTExOC45LTE4LjEgNDAuN2MtNS40IDEyLjEtMTkuNiAxNy42LTMxLjcgMTIuMlMtMy4zIDM2Mi40IDIuMSAzNTAuM0wyNCAzMDAuOWM1LjMtMTEuOSA4LTI0LjcgOC0zNy43IDAtMTA3LjUgODUuMi0xOTUuMiAxOTEuOC0xOTkuMWwuMi0uMSA2NCAwYzQxLjcgMCA4My40IDEyLjEgMTE3LjIgMjUuNyAxLjctMS44IDMuNS0zLjYgNS4zLTUuMkw0MDcgODFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45em03MyAxODVhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptODggMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek00ODAgMTQ0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnoiXX0sa3B0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvd2wtZm9vZCIsaWNvbjpbNTEyLDUxMixbXSwiZTRjNiIsIk0wIDE3NmMwLTM1LjMgMjguNy02NCA2NC02NCAuNSAwIDEuMSAwIDEuNiAwIDcuNC0zNi41IDM5LjctNjQgNzguNC02NCAxNSAwIDI5IDQuMSA0MC45IDExLjIgMTMuMy0yNS43IDQwLjEtNDMuMiA3MS4xLTQzLjJzNTcuOCAxNy42IDcxLjEgNDMuMmMxMi03LjEgMjYtMTEuMiA0MC45LTExLjIgMzguNyAwIDcxIDI3LjUgNzguNCA2NCAuNSAwIDEuMSAwIDEuNiAwIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMTEuNy0zLjEgMjIuNi04LjYgMzJMOC42IDIwOEMzLjEgMTk4LjYgMCAxODcuNyAwIDE3NnpNMCAyODMuNEMwIDI2OC4zIDEyLjMgMjU2IDI3LjQgMjU2bDQ1Ny4xIDBjMTUuMSAwIDI3LjQgMTIuMyAyNy40IDI3LjQgMCA3MC41LTQ0LjQgMTMwLjctMTA2LjcgMTU0LjFMNDAzLjUgNDUyYy0yIDE2LTE1LjYgMjgtMzEuOCAyOGwtMjMxLjUgMGMtMTYuMSAwLTI5LjgtMTItMzEuOC0yOGwtMS44LTE0LjRDNDQuNCA0MTQuMSAwIDM1My45IDAgMjgzLjR6Il19LFNwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtdmlydXMiLGljb246WzQ0OCw1MTIsW10sImU1NzgiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMTYwIDgwYzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMjIuOSAyNy43IDM0LjQgNDMuOSAxOC4yIDkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMTYuMiAxNi4yLTQuNyA0My45IDE4LjIgNDMuOSAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuOSAwLTM0LjQgMjcuNy0xOC4yIDQzLjkgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMTYuMi0xNi4yLTQzLjktNC43LTQzLjkgMTguMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTIyLjktMjcuNy0zNC40LTQzLjktMTguMi05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzE2LjItMTYuMiA0LjctNDMuOS0xOC4yLTQzLjktMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyMi45IDAgMzQuNC0yNy43IDE4LjItNDMuOS05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMTYuMiAxNi4yIDQzLjkgNC43IDQzLjktMTguMiAwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMTkyIDI0OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTg4IDQwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il19LENwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG91ZC1zdW4tcmFpbiIsaWNvbjpbNTc2LDUxMixbMTI3NzgyXSwiZjc0MyIsIk0zMDMuMi0zLjJjLTEuMS01LjItNC42LTkuNS05LjUtMTEuNnMtMTAuNS0xLjUtMTQuOSAxLjRMMjA4IDMzLjYgMTM3LjMtMTMuM2MtNC40LTIuOS0xMC0zLjUtMTQuOS0xLjRzLTguNSA2LjQtOS41IDExLjZMOTYgODAgMTIuOCA5Ni44Yy01LjIgMS4xLTkuNSA0LjYtMTEuNiA5LjVzLTEuNSAxMC41IDEuNCAxNC45TDQ5LjYgMTkyIDIuNyAyNjIuN2MtMi45IDQuNC0zLjUgMTAtMS40IDE0LjlzNi40IDguNSAxMS42IDkuNUw5NiAzMDQgMTEyLjggMzg3LjJjMS4xIDUuMiA0LjYgOS41IDkuNSAxMS42czEwLjUgMS41IDE0LjktMS40bDY3LjMtNDQuNmMtMTUuOC0xOS40LTI2LTQzLjUtMjguMi02OS45LTM3LjUtMTMuMS02NC40LTQ4LjctNjQuNC05MC43IDAtNTMgNDMtOTYgOTYtOTYgMjEuNyAwIDQxLjggNy4yIDU3LjggMTkuNCAxNS41LTE3LjYgMzYuOS0zMCA2MS4xLTM0TDMyMCA4MCAzMDMuMi0zLjJ6TTI0MyAxNTkuMWMtOC44LTkuMy0yMS4yLTE1LjEtMzUtMTUuMS0yNi41IDAtNDggMjEuNS00OCA0OCAwIDE3IDguOSAzMiAyMi4yIDQwLjUgMTAuMi0zMS40IDMyLjEtNTcuNCA2MC43LTczbC4xLS40ek0zMDQgMzUybDE5MiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtMzMuOS0yMS4xLTYyLjktNTAuOS03NC41IDEuOS02LjggMi45LTE0IDIuOS0yMS41IDAtNDQuMi0zNS44LTgwLTgwLTgwLTMwLjggMC01Ny41IDE3LjQtNzAuOSA0Mi44LTkuMy02LjgtMjAuNy0xMC44LTMzLjEtMTAuOC0zMC45IDAtNTYgMjUuMS01NiA1NiAwIDMuMiAuMyA2LjQgLjggOS40LTM2LjkgNy4xLTY0LjggMzkuNi02NC44IDc4LjYgMCA0NC4yIDM1LjggODAgODAgODB6bS0xOSA0OS4xYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjQgNjQuMWMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40em0xMjAgMGMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS40IDY0LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHptMTIwIDBjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuNCA2NC4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6Il19LFRyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1yaWdodC1sb25nIixpY29uOls1NzYsNTEyLFsibG9uZy1hcnJvdy1yaWdodCJdLCJmMTc4IiwiTTU2Ni42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0NjYuNyAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDQzNC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il19LExwdD1UcmUsVHB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLXVuIixpY29uOls1MTIsNTEyLFtdLCJlNGQ5IiwiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNzItMTEyIDBjLTIwLjkgMC0zOS41IDEwLjEtNTEuMiAyNS42LTgtNi0xOC05LjYtMjguOC05LjYtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NCA2NCAwIDAgNDgtMTQ0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDY0ek0xNDQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE0NCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTQyNy40IDM4MC41YzktMi4xIDE4LjMgMi4yIDIyLjUgMTAuNWwyNi4xIDUyLjIgMC00My4zYzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIwbDAgMTI4YzAgOS4zLTYuNCAxNy4zLTE1LjQgMTkuNXMtMTguMy0yLjItMjIuNS0xMC41TDQ1MiA0ODQuNyA0NTIgNTI4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTEyOGMwLTkuMyA2LjQtMTcuMyAxNS40LTE5LjV6TTMyNCA0MDBsMCA5NmMwIDYuNiA1LjQgMTIgMTIgMTJzMTItNS40IDEyLTEybDAtOTZjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjBsMCA5NmMwIDI4LjctMjMuMyA1Mi01MiA1MnMtNTItMjMuMy01Mi01MmwwLTk2YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIweiJdfSxfcHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGVtcGVyYXR1cmUtbG93IixpY29uOls1MTIsNTEyLFtdLCJmNzZiIiwiTTk2IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFM0OCA0NDcuNSA0OCAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMOTYgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yOC43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjguN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00NjQgODBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzUyIDgwYTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHoiXX0sQXB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRvb3Itb3BlbiIsaWNvbjpbNDQ4LDUxMixbXSwiZjUyYiIsIk0yODggNjRsNjQgMCAwIDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC05NiAwIDAgMC0xNjAgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQxNnpNMTYwIDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdfSwkcHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYWxpZ24tbGVmdCIsaWNvbjpbNDQ4LDUxMixbXSwiZjAzNiIsIk0yODggNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyem0wIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiAzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyeiJdfSxfcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FtZXJhIixpY29uOls1MTIsNTEyLFs2MjI1OCwiY2FtZXJhLWFsdCJdLCJmMDMwIiwiTTE0OS4xIDY0LjhMMTM4LjcgOTYgNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC03NC43IDAtMTAuNC0zMS4yQzM1Ni40IDQ1LjIgMzM4LjEgMzIgMzE3LjQgMzJMMTk0LjYgMzJjLTIwLjcgMC0zOSAxMy4yLTQ1LjUgMzIuOHpNMjU2IDE5MmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXX0sRHB0PV9yZSxFcHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlcnMtcmF5cyIsaWNvbjpbNjQwLDUxMixbXSwiZTU5MyIsIk0zMS0zM0MyMS43LTIzLjYgMjEuNy04LjQgMzEgMUw4NyA1N2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNjUtMzNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwek02MDktMzNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDUxOSAyM2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwTDYwOSAxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45ek02NSA1NDVsNTYtNTZjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwzMSA1MTFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMHptNTQ0IDBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTU2LTU2Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU2IDU2YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwek0zMjAgMjA4YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4em0wIDMyYy02MS45IDAtMTEyIDUwLjEtMTEyIDExMmwwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC04YzAtNjEuOS01MC4xLTExMi0xMTItMTEyem0yMTYtODBhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwek00NTEuMiAyNjAuNEM0NjkuNCAyODYuMyA0ODAgMzE3LjkgNDgwIDM1MmwwIDhjMCA4LjQtMS40IDE2LjUtNC4xIDI0bDc4LjggMGMxMS44IDAgMjEuMy05LjYgMjEuMy0yMS4zbDAtMTAuN2MwLTUzLTQzLTk2LTk2LTk2LTEwIDAtMTkuNyAxLjUtMjguOCA0LjR6bS0yNjIuNCAwYy05LjEtMi45LTE4LjgtNC40LTI4LjgtNC40LTUzIDAtOTYgNDMtOTYgOTZsMCAxMC43YzAgMTEuOCA5LjYgMjEuMyAyMS4zIDIxLjNsNzguOCAwYy0yLjctNy41LTQuMS0xNS42LTQuMS0yNGwwLThjMC0zNC4xIDEwLjYtNjUuNyAyOC44LTkxLjZ6TTIxNiAxNjBhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAweiJdfSxOcHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmFpbmJvdyIsaWNvbjpbNjQwLDUxMixbMTI3NzUyXSwiZjc1YiIsIk0zMjAgOTZDMTc4LjYgOTYgNjQgMjEwLjYgNjQgMzUybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0MzMuNyAwIDQxNmwwLTY0QzAgMTc1LjMgMTQzLjMgMzIgMzIwIDMyUzY0MCAxNzUuMyA2NDAgMzUybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NEM1NzYgMjEwLjYgNDYxLjQgOTYgMzIwIDk2em0wIDExMmMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDRsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTE0LjkgOTMuMS0yMDggMjA4LTIwOHMyMDggOTMuMSAyMDggMjA4bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NHpNMjg4IDM1MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6Il19LFBwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaXRlbWFwIixpY29uOls1MTIsNTEyLFtdLCJmMGU4IiwiTTE5MiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTggMCAwIDY0IDEyMCAwYzM5LjggMCA3MiAzMi4yIDcyIDcybDAgNTYgOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsOCAwIDAtNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTEyMCAwIDAgODAgOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsOCAwIDAtODAtMTIwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNTYgOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsOCAwIDAtNTZjMC0zOS44IDMyLjItNzIgNzItNzJsMTIwIDAgMC02NC04IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjR6Il19LEFyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWdyaW4tc3RhcnMiLGljb246WzUxMiw1MTIsWzEyOTMyMSwiZ3Jpbi1zdGFycyJdLCJmNTg3IiwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NiAwLTI0LjQtMy40LTQ4LjEtOS44LTcwLjUgMTguNi0zNi4xLTIuNy04My42LTQ2LjctOTAtNDYuOS01OC4zLTExOC45LTk1LjUtMTk5LjUtOTUuNVMxMDMuNCAzNy4zIDU2LjUgOTUuNWMtNDQgNi40LTY1LjMgNTMuOS00Ni43IDkwLTYuNCAyMi40LTkuOCA0Ni05LjggNzAuNSAwIDE0MS40IDExNC42IDI1NiAyNTYgMjU2ek0zODYuNyAzMjQuOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgNDA0LjIgMTA1LjcgMzQyLjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXptLTMxLjYtMjMxYzUuMy0xMC43IDIwLjUtMTAuNyAyNS44IDBsMjAuOSA0Mi40IDQ2LjcgNi44YzExLjggMS43IDE2LjUgMTYuMiA4IDI0LjVsLTMzLjggMzMgOCA0Ni42YzIgMTEuNy0xMC4zIDIwLjctMjAuOSAxNS4ybC00MS44LTIyLTQxLjggMjJjLTEwLjUgNS41LTIyLjktMy40LTIwLjktMTUuMmw4LTQ2LjYtMzMuOC0zM2MtOC41LTguMy0zLjgtMjIuOCA4LTI0LjVsNDYuNy02LjggMjAuOS00Mi40em0tMTk4LjIgMGwyMC45IDQyLjQgNDYuNyA2LjhjMTEuOCAxLjcgMTYuNSAxNi4yIDggMjQuNWwtMzMuOCAzMyA4IDQ2LjZjMiAxMS43LTEwLjMgMjAuNy0yMC45IDE1LjJsLTQxLjgtMjItNDEuOCAyMmMtMTAuNSA1LjUtMjIuOS0zLjQtMjAuOS0xNS4ybDgtNDYuNi0zMy44LTMzYy04LjUtOC4zLTMuOC0yMi44IDgtMjQuNWw0Ni43LTYuOCAyMC45LTQyLjRjNS4zLTEwLjcgMjAuNS0xMC43IDI1LjggMHoiXX0sSXB0PUFyZSwkcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic29ydC11cCIsaWNvbjpbMzg0LDUxMixbInNvcnQtYXNjIl0sImYwZGUiLCJNMzIgMjI0Yy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44Uy4yIDE3OC41IDkuNCAxNjkuNGwxNjAtMTYwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzY0LjkgMjI0IDM1MiAyMjRMMzIgMjI0eiJdfSxGcHQ9JHJlLFRVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImV5ZSIsaWNvbjpbNTc2LDUxMixbMTI4MDY1XSwiZjA2ZSIsIk0yODggMzJjLTgwLjggMC0xNDUuNSAzNi44LTE5Mi42IDgwLjYtNDYuOCA0My41LTc4LjEgOTUuNC05MyAxMzEuMS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjZzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42ek0xNDQgMjU2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC02NGMwIDM1LjMtMjguNyA2NC02NCA2NC0xMS41IDAtMjIuMy0zLTMxLjctOC40LTEgMTAuOS0uMSAyMi4xIDIuOSAzMy4yIDEzLjcgNTEuMiA2Ni40IDgxLjYgMTE3LjYgNjcuOXM4MS42LTY2LjQgNjcuOS0xMTcuNmMtMTIuMi00NS43LTU1LjUtNzQuOC0xMDEuMS03MC44IDUuMyA5LjMgOC40IDIwLjEgOC40IDMxLjd6Il19LF9VPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhcmV0LWxlZnQiLGljb246WzI1Niw1MTIsW10sImYwZDkiLCJNNy43IDIzNS44Yy0xMC4zIDEyLjYtOS41IDMxLjEgMi4yIDQyLjhsMTI4IDEyOGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOXMxOS44LTE2LjYgMTkuOC0yOS42bDAtMjU2YzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC0xMjggMTI4LTIuMiAyLjR6Il19LERyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcHBsZS13aG9sZSIsaWNvbjpbNDQ4LDUxMixbMTI3ODIyLDEyNzgyMywiYXBwbGUtYWx0Il0sImY1ZDEiLCJNMjI0IDExMmMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODBsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMTYgMHpNMCAyODhjMC03Ni4zIDM1LjctMTYwIDExMi0xNjAgMjcuMyAwIDU5LjcgMTAuMyA4Mi43IDE5LjMgMTguOCA3LjMgMzkuOSA3LjMgNTguNyAwIDIyLjktOC45IDU1LjQtMTkuMyA4Mi43LTE5LjMgNzYuMyAwIDExMiA4My43IDExMiAxNjAgMCAxMjgtODAgMjI0LTE2MCAyMjQtMTYuNSAwLTM4LjEtNi42LTUxLjUtMTEuMy04LjEtMi44LTE2LjktMi44LTI1IDAtMTMuNCA0LjctMzUgMTEuMy01MS41IDExLjMtODAgMC0xNjAtOTYtMTYwLTIyNHoiXX0sT3B0PURyZSxFcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2Nyb2xsLXRvcmFoIixpY29uOls1NzYsNTEyLFsidG9yYWgiXSwiZjZhMCIsIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMCA2OC45IDAgODYuNyAxMy40IDkzLjMgMzJsMzg5LjUgMGM2LjYtMTguNiAyNC40LTMyIDQ1LjMtMzIgMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0MTZjMCAyNi41LTIxLjUgNDgtNDggNDgtMjAuOSAwLTM4LjctMTMuNC00NS4zLTMyTDkzLjMgNDgwYy02LjYgMTguNi0yNC40IDMyLTQ1LjMgMzItMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA0OHpNMTc3LjkgMzAxYy0xLjIgMi0xLjkgNC4yLTEuOSA2LjYgMCA2LjkgNS42IDEyLjUgMTIuNSAxMi41bDU2LjkgMCAzMC41IDQ5LjJjMi42IDQuMiA3LjIgNi44IDEyLjIgNi44czkuNi0yLjYgMTIuMi02LjhsMzAuNS00OS4yIDU2LjkgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC0yLjMtLjYtNC42LTEuOS02LjZsLTI3LjgtNDUgMjcuOC00NWMxLjItMiAxLjktNC4yIDEuOS02LjYgMC02LjktNS42LTEyLjUtMTIuNS0xMi41bC01Ni45IDAtMzAuNS00OS4yYy0yLjYtNC4yLTcuMi02LjgtMTIuMi02LjhzLTkuNiAyLjYtMTIuMiA2LjhsLTMwLjUgNDkuMi01Ni45IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDIuMyAuNiA0LjYgMS45IDYuNmwyNy44IDQ1LTI3LjggNDV6Il19LEJwdD1FcmUsUnB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWxvY2siLGljb246WzY0MCw1MTIsW10sImU1MTAiLCJNNTI4IDIyNC4xYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHpNMjY4LjYgNi41YzEyLjItOS4zIDI5LjctOC43IDQxLjIgMmwxODUgMTcxLjhDNDQwLjIgMTk1IDQwMCAyNDQuOCA0MDAgMzA0bDAgMjQuNGMtMTkuNiAxNy42LTMyIDQzLjEtMzIgNzEuNWwwIDk2YzAgNS41IC41IDEwLjkgMS4zIDE2LjFMMTQ0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4IDIuNC0yek0yNzIgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2IDk2IDAgMC04Ny4zYzAtMTYuNSA3LTMxLjUgMTguNC00Mi4xLTguNy05LTIwLjktMTQuNi0zNC40LTE0LjZsLTMyIDB6bTI1Ni00Ny45Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3LjljMC0xNy43LTE0LjMtMzItMzItMzJ6Il19LEhwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvd3MtbGVmdC1yaWdodC10by1saW5lIixpY29uOls1NzYsNTEyLFtdLCJlNGJhIiwiTTMyIDk2QzE0LjMgOTYgMCAxMTAuMyAwIDEyOEwwIDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0zOTAuNiAzNDIuNmw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDkuNCA5LjQtMTMzLjUgMCA5LjQtOS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtNiA2LTkuNCAxNC4xLTkuNCAyMi42czMuNCAxNi42IDkuNCAyMi42bDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjQgMTMzLjUgMC05LjQgOS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwek01NzYgMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNTZ6Il19LEQ3PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyYXNoIixpY29uOls0NDgsNTEyLFtdLCJmMWY4IiwiTTEzNi43IDUuOUwxMjggMzIgMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwLTguNy0yNi4xQzMwNi45LTcuMiAyOTQuNy0xNiAyODAuOS0xNkwxNjcuMS0xNmMtMTMuOCAwLTI2IDguOC0zMC40IDIxLjl6TTQxNiAxNDRMMzIgMTQ0IDUzLjEgNDY3LjFDNTQuNyA0OTIuNCA3NS43IDUxMiAxMDEgNTEyTDM0NyA1MTJjMjUuMyAwIDQ2LjMtMTkuNiA0Ny45LTQ0LjlMNDE2IDE0NHoiXX0sTnJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2Utc2FkLXRlYXIiLGljb246WzUxMiw1MTIsWzEyODU0Niwic2FkLXRlYXIiXSwiZjViNCIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNzEgOThjNS41LTEuMyAxMS4xLTIgMTctMiAyNC4xIDAgNDUuNCAxMS44IDU4LjUgMzAgNy43IDEwLjggMjIuNyAxMy4yIDMzLjUgNS41czEzLjItMjIuNyA1LjUtMzMuNWMtMjEuNy0zMC4yLTU3LjMtNTAtOTcuNS01MC0xMi41IDAtMjQuNiAxLjktMzUuOSA1LjUgOS44IDEyLjcgMTYuNSAyNy45IDE4LjkgNDQuNnpNMTc2IDI0MGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE5Mi0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xODUuNCAyOTIuOGMtMi40LTIuOS01LjctNC44LTkuNC00LjhzLTcgMS45LTkuNCA0LjhjLTYuNSA3LjgtMTIuNiAxNi4xLTE4LjMgMjQuNi05IDEzLjQtMjAuMyAzMC4yLTIwLjMgNDcuNCAwIDI4LjMgMjEuNSA1MS4yIDQ4IDUxLjJzNDgtMjIuOSA0OC01MS4yYzAtMTcuMi0xMS4yLTM0LTIwLjMtNDcuNC01LjctOC41LTExLjktMTYuNy0xOC4zLTI0LjZ6Il19LHFwdD1OcmUsVnB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZheCIsaWNvbjpbNTEyLDUxMixbMTI4MjI0LDEyODQzOV0sImYxYWMiLCJNMTYwIDY0bDAgODAgNjQgMCAwLTgwIDE0Ni43IDAgNDUuMyA0NS4zIDAgMzQuNyA2NCAwIDAtMzQuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w0MTYgMTguN0M0MDQgNi43IDM4Ny43IDAgMzcwLjcgMEwyMjQgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjR6TTMyIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNDggMHptNDQ4IDY0bC0zMjAgMCAwIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjI0IDI4OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0wIDk2YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTMzNiAyNjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0zMTIgMzg0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTQyNCAyNjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek00MDAgMzg0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il19LFVwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tY2lyY2xlLXBsdXMiLGljb246WzY0MCw1MTIsW10sImU1NDEiLCJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMTYtMjA4bDAgNDggNDggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw0OCAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnoiXX0sanB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbXNhIixpY29uOls1MTIsNTEyLFtdLCJmNjY1IiwiTTM0LjYgMjg4TDgwIDI4OGM4LjggMCAxNi03LjIgMTYtMTZMOTYgNzJjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDEzMmMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTE2NGMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMTY0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMTMyYzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyMDBjMCA4LjggNy4yIDE2IDE2IDE2bDQ1LjQgMGMxOS4xIDAgMzQuNiAxNS41IDM0LjYgMzQuNiAwIDguNi0zLjIgMTYuOS05IDIzLjNMNDE2LjYgNDQxYy00MS4xIDQ1LjItOTkuNCA3MS0xNjAuNiA3MVMxMzYuNiA0ODYuMiA5NS40IDQ0MUw5IDM0NS45Yy01LjgtNi40LTktMTQuNy05LTIzLjMgMC0xOS4xIDE1LjUtMzQuNiAzNC42LTM0LjZ6TTI1NiAyODhjLTM4LjQgMC03Ni44IDM1LjgtOTAuNiA1MC4yLTMuNiAzLjctNS40IDguNy01LjQgMTMuOHMxLjggMTAuMSA1LjQgMTMuOEMxNzkuMiAzODAuMiAyMTcuNiA0MTYgMjU2IDQxNnM3Ni44LTM1LjggOTAuNi01MC4yYzMuNi0zLjcgNS40LTguNyA1LjQtMTMuOHMtMS44LTEwLjEtNS40LTEzLjhDMzMyLjggMzIzLjggMjk0LjQgMjg4IDI1NiAyODh6bTAgMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxXcHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWNpcmNsZS1xdWVzdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTU0MiIsIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTAwYy0xMS42IDAtMjEuMyA4LjItMjMuNSAxOS4yLTEuOCA4LjctMTAuMiAxNC4zLTE4LjkgMTIuNXMtMTQuMy0xMC4yLTEyLjUtMTguOWM1LjItMjUuNiAyNy44LTQ0LjggNTQuOS00NC44IDMwLjkgMCA1NiAyNS4xIDU2IDU2IDAgMTkuOC0xMS43IDM3LjgtMjkuOCA0NS45bC0xMC40IDQuNmMtMS4yIDcuNy03LjggMTMuNS0xNS44IDEzLjUtOC44IDAtMTYtNy4yLTE2LTE2IDAtMTEuMiA2LjYtMjEuMyAxNi44LTI1LjlsMTIuNC01LjVjNi42LTIuOSAxMC44LTkuNCAxMC44LTE2LjYgMC0xMy4zLTEwLjctMjQtMjQtMjR6Il19LEdwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbGlwYm9hcmQtY2hlY2siLGljb246WzM4NCw1MTIsW10sImY0NmMiLCJNMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMybDguNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzUyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw4LjYgMEM4My42IDEyLjkgMTA0LjMgMCAxMjggMEwyNTYgMHptMjYuOSAyMTIuNmMtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNsLTg1LjYgMTE3LjctMjYuNS0yNy40Yy05LjItOS41LTI0LjQtOS44LTMzLjktLjZzLTkuOCAyNC40LS42IDMzLjlsNDYuNCA0OGM0LjkgNS4xIDExLjggNy44IDE4LjkgNy4zczEzLjYtNC4xIDE3LjgtOS44TDI4OC4yIDI0Ni4xYzcuOC0xMC43IDUuNC0yNS43LTUuMy0zMy41ek0xMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTM2IDY0eiJdfSxQcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hhcmUtZnJvbS1zcXVhcmUiLGljb246WzU3Niw1MTIsWzYxNTA5LCJzaGFyZS1zcXVhcmUiXSwiZjE0ZCIsIk0zODQuNSAyNGwwIDcyLTY0IDBjLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgOTMuNCA4Mi44IDEzNC44IDEwMC42IDE0Mi42IDIuMiAxIDQuNiAxLjQgNy4xIDEuNGwyLjUgMGM5LjggMCAxNy44LTggMTcuOC0xNy44IDAtOC4zLTUuOS0xNS41LTEyLjgtMjAuMy04LjktNi4yLTE5LjItMTguMi0xOS4yLTQwLjUgMC00NSAzNi41LTgxLjUgODEuNS04MS41bDMwLjUgMCAwIDcyYzAgOS43IDUuOCAxOC41IDE0LjggMjIuMnMxOS4zIDEuNyAyNi4yLTUuMmwxMzYtMTM2YzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDQyNS41IDdjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMzg0LjUgMTQuMyAzODQuNSAyNHptLTI3MiA3MmMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyNTZjMCA0NC4yIDM1LjggODAgODAgODBsMjU2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMjU2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYgMHoiXX0sWXB0PVByZSxBVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyZWNlaXB0IixpY29uOlszODQsNTEyLFsxMjk1MzRdLCJmNTQzIiwiTTE0IDIuMkMyMi41LTEuNyAzMi41LS4zIDM5LjYgNS44TDgwIDQwLjQgMTIwLjQgNS44YzktNy43IDIyLjMtNy43IDMxLjIgMEwxOTIgNDAuNCAyMzIuNCA1LjhjOS03LjcgMjIuMi03LjcgMzEuMiAwTDMwNCA0MC40IDM0NC40IDUuOGM3LjEtNi4xIDE3LjEtNy41IDI1LjYtMy42UzM4NCAxNC42IDM4NCAyNGwwIDQ2NGMwIDkuNC01LjUgMTcuOS0xNCAyMS44cy0xOC41IDIuNS0yNS42LTMuNmwtNDAuNC0zNC42LTQwLjQgMzQuNmMtOSA3LjctMjIuMiA3LjctMzEuMiAwbC00MC40LTM0LjYtNDAuNCAzNC42Yy05IDcuNy0yMi4zIDcuNy0zMS4yIDBMODAgNDcxLjYgMzkuNiA1MDYuMmMtNy4xIDYuMS0xNy4xIDcuNS0yNS42IDMuNlMwIDQ5Ny40IDAgNDg4TDAgMjRDMCAxNC42IDUuNSA2LjEgMTQgMi4yek0xMDQgMTM2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMHpNODAgMzUyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTI0LTEyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDB6Il19LFpwdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlcXVhbHMiLGljb246WzQ0OCw1MTIsWzYyNzY0XSwiM2QiLCJNMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDEyOHptMCAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzIweiJdfSxYcHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hldnJvbi11cCIsaWNvbjpbNDQ4LDUxMixbXSwiZjA3NyIsIk0yMDEuNCAxMDUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxOTIgMTkyYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDIyNCAxNzMuMyA1NC42IDM0Mi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxOTItMTkyeiJdfSxRcHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidmlydXMtc2xhc2giLGljb246WzU3Niw1MTIsW10sImUwNzUiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODguNi04OC42YzEuNy0xMi4xLTItMjQuOC0xMS4zLTM0LTMxLjItMzEuMi05LjEtODQuNSAzNS04NC41IDIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwYy00NC4xIDAtNjYuMS01My4zLTM1LTg0LjUgMTUuNi0xNS42IDE1LjYtNDAuOSAwLTU2LjZzLTQwLjktMTUuNi01Ni42IDBjLTMxLjIgMzEuMi04NC41IDkuMS04NC41LTM1IDAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgNDQuMS01My4zIDY2LjEtODQuNSAzNS05LjMtOS4zLTIyLTEzLTM0LTExLjNMNDEtMjQuOXpNNzIgMjE2Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwYzQ0LjEgMCA2Ni4xIDUzLjMgMzUgODQuNS0xNS42IDE1LjYtMTUuNiA0MC45IDAgNTYuNnM0MC45IDE1LjYgNTYuNiAwYzMxLjItMzEuMiA4NC41LTkuMSA4NC41IDM1IDAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBjMC0yMS40IDEyLjYtMzcuNiAyOS4xLTQ1LjFsLTI0MC0yNDBDMTA5LjYgMjAzLjQgOTMuNCAyMTYgNzIgMjE2eiJdfSxLcHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2xhc2giLGljb246WzU3Niw1MTIsW10sImY3MTUiLCJNNy0yNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEw1NjkgNTAzYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA5Qy0yLjMtLjQtMi4zLTE1LjYgNy0yNXoiXX0sSnB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImV4cGFuZCIsaWNvbjpbNDQ4LDUxMixbXSwiZjA2NSIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0bDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTY0IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDMzNC4zIDAgMzUybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTY0ek0zMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMHpNNDQ4IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2eiJdfSxJcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibm90ZS1zdGlja3kiLGljb246WzQ0OCw1MTIsWzYyMDI2LCJzdGlja3ktbm90ZSJdLCJmMjQ5IiwiTTY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIxMy41YzAgMTctNi43IDMzLjMtMTguNyA0NS4zTDMyMi43IDQ2MS4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDY0IDQ4MHpNMzg5LjUgMzA0TDI5NiAzMDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgOTMuNSAxMTcuNS0xMTcuNXoiXX0sZTl0PUlyZSxGcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGFibGUtY29sdW1ucyIsaWNvbjpbNDQ4LDUxMixbImNvbHVtbnMiXSwiZjBkYiIsIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptNjQgNjRsMCAyNTYgMTI4IDAgMC0yNTYtMTI4IDB6bTMyMCAwbC0xMjggMCAwIDI1NiAxMjggMCAwLTI1NnoiXX0sdDl0PUZyZSxhOXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXNoZWx0ZXIiLGljb246WzUxMiw1MTIsW10sImU1NGYiLCJNMjcxLjkgNC4yYy05LjgtNS42LTIxLjktNS42LTMxLjggMGwtMjI0IDEyOEM2LjIgMTM3LjkgMCAxNDguNSAwIDE2MEwwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDY0IDE3OC42IDI1NiA2OC45IDQ0OCAxNzguNiA0NDggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMjBjMC0xMS41LTYuMi0yMi4xLTE2LjEtMjcuOGwtMjI0LTEyOHpNMjU2IDIwOGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6bS04IDE5MmwxNiAwIDAgODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE3NC41IDI2LjkgNDkuOWM2LjMgMTEuNyAyMC44IDE2IDMyLjUgOS44czE2LTIwLjggOS44LTMyLjVsLTMzLjItNjEuN0MzMjkuNyAyNDUuMSAyOTQuNCAyMjQgMjU2IDIyNHMtNzMuNyAyMS4xLTkxLjkgNTQuOWwtMzMuMiA2MS43Yy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEwyMDAgMzEzLjUgMjAwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODh6Il19LHI5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtbm90Y2giLGljb246WzUxMiw1MTIsW10sImYxY2UiLCJNMjIyLjcgMzIuMWM1IDE2LjktNC42IDM0LjgtMjEuNSAzOS44LTc5LjMgMjMuNi0xMzcuMSA5Ny4xLTEzNy4xIDE4NC4xIDAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtODYuOS01Ny44LTE2MC40LTEzNy4xLTE4NC4xLTE2LjktNS0yNi42LTIyLjktMjEuNS0zOS44czIyLjktMjYuNiAzOS44LTIxLjVDNDM0LjkgNDIuMSA1MTIgMTQwIDUxMiAyNTYgNTEyIDM5Ny40IDM5Ny40IDUxMiAyNTYgNTEyUzAgMzk3LjQgMCAyNTZjMC0xMTYgNzcuMS0yMTMuOSAxODIuOS0yNDUuNCAxNi45LTUgMzQuOCA0LjYgMzkuOCAyMS41eiJdfSxpOXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2F0ZXIiLGljb246WzUxMiw1MTIsW10sImY3NzMiLCJNNDEwLjYgMTI0LjFjMjAuNyAxNS42IDQ2IDMwLjcgNzQuMiAzNC41IDEzLjEgMS44IDI1LjItNy41IDI3LTIwLjZzLTcuNS0yNS4yLTIwLjYtMjdjLTE1LjktMi4xLTMzLjItMTEuMy01MS43LTI1LjItMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMTguNSAxMy45LTM1LjggMjMuMS01MS43IDI1LjItMTMuMSAxLjgtMjIuNCAxMy44LTIwLjYgMjdzMTMuOCAyMi40IDI3IDIwLjZjMjguMi0zLjggNTMuNi0xOC45IDc0LjItMzQuNSAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwem0wIDE0NGMyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuNy0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bS03MS4yIDE0NGMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuOC0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il19LE9yZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkZWxldGUtbGVmdCIsaWNvbjpbNjQwLDUxMixbOTAwMywiYmFja3NwYWNlIl0sImY1NWEiLCJNNTc2IDEyOGMwLTM1LjMtMjguNy02NC02NC02NEwyMDUuMyA2NGMtMTcgMC0zMy4zIDYuNy00NS4zIDE4LjdMOS40IDIzMy40Yy02IDYtOS40IDE0LjEtOS40IDIyLjZzMy40IDE2LjYgOS40IDIyLjZMMTYwIDQyOS4zYzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdMNTEyIDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NnpNMjg0LjEgMTg4LjFjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzMuOSAzMy45IDMzLjktMzMuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTMzLjkgMzMuOSAzMy45IDMzLjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMzMuOS0zMy45LTMzLjkgMzMuOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMy45LTMzLjktMzMuOS0zMy45Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXX0sbzl0PU9yZSxJVj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicm9vbS1iYWxsIixpY29uOls1NzYsNTEyLFsicXVpZGRpdGNoIiwicXVpZGRpdGNoLWJyb29tLWJhbGwiXSwiZjQ1OCIsIk00OTYgNTQ0YTgwIDgwIDAgMSAxIDAtMTYwIDgwIDgwIDAgMSAxIDAgMTYwek0xMDYuOCAyNzcuMmMzMC42LTMwLjYgNzMuMS00NS45IDExNS44LTQyLjJMMzQxIDM1My4zYzMuNyA0Mi44LTExLjYgODUuMi00Mi4yIDExNS45LTI3LjQgMjcuNC02NC42IDQyLjgtMTAzLjMgNDIuOEwyMi4xIDUxMmMtMTIuMiAwLTIyLjEtOS45LTIyLjEtMjIuMSAwLTYuMyAyLjctMTIuMyA3LjMtMTYuNUwxMzMuNyAzNTkuN2M0LjItMy43LS40LTEwLjQtNS40LTcuOUw3Ny4yIDM3Ny40Yy02LjEgMy0xMy4yLTEuNC0xMy4yLTguMiAwLTMxLjUgMTIuNS02MS44IDM0LjgtODRsOC04em00MTctMjcwYzEyLjYtMTAuMyAzMS4xLTkuNSA0Mi44IDIuMnMxMi40IDMwLjIgMi4yIDQyLjhsLTIuMiAyLjQtMTkyIDE5MiAzNC44IDM0LjdjNC4yIDQuMiA2LjYgMTAgNi42IDE2IDAgMTIuNS0xMC4xIDIyLjYtMjIuNiAyMi42bC0yOS4xIDAtMTA4LjMtMTA4LjMgMC0yOS4xYzAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42IDYgMCAxMS44IDIuNCAxNiA2LjZsMzQuOCAzNC43IDE5Mi0xOTIgMi40LTIuMnoiXX0sczl0PUlWLG45dD1JVixsOXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaiIsaWNvbjpbMzIwLDUxMixbMTA2XSwiNGEiLCJNMjg4IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDA4LjQgMCAzMjBsMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzJjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXX0sQnJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNodXR0bGUtc3BhY2UiLGljb246WzU3Niw1MTIsWyJzcGFjZS1zaHV0dGxlIl0sImYxOTciLCJNMCAzNjhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw1MCAwYzQwLjYgMCA4MC40LTExIDExNS4yLTMxLjlsMTMzLjUtODAuMS05My4zIDAtNjQuOSAzOC45Yy0xNCA4LjQtMjguOSAxNC43LTQ0LjUgMTlsMC02Ni40YzkuNy01LjYgMTcuOC0xMy43IDIzLjQtMjMuNGwxOTguOCAwYzY3LjEgMCAxMjcuOC0yMC42IDE3MC4zLTcwLjYgNC42LTUuNCA0LjYtMTMuMyAwLTE4LjgtNDIuNS01MC4xLTEwMy4yLTcwLjYtMTcwLjMtNzAuNmwtMTk4LjggMGMtNS42LTkuNy0xMy43LTE3LjgtMjMuNC0yMy40bDAtNjYuNGMxNS42IDQuMiAzMC42IDEwLjYgNDQuNSAxOWw2NC45IDM4LjkgOTMuMyAwLTEzMy41LTgwLjFDMTc4LjQgNDMgMTM4LjYgMzIgOTggMzJMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDM2OHptOTYgMGwwIDY0LTQ4IDAgMC02NCA0OCAwek05NiA4MGwwIDY0LTQ4IDAgMC02NCA0OCAwek00MTYgMjI0YzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2eiJdfSxjOXQ9QnJlLGQ5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ5aW4teWFuZyIsaWNvbjpbNTEyLDUxMixbOTc3NV0sImY2YWQiLCJNMjI0IDE2MGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiAzNTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTQ0OGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5Ni05NiA0My05NiA5NiA0MyA5NiA5NiA5NkMxNTAgNDQ4IDY0IDM2MiA2NCAyNTZTMTUwIDY0IDI1NiA2NHpNMjI0IDM1MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdfSxmOXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RvcCIsaWNvbjpbNDQ4LDUxMixbOTIwOV0sImYwNGQiLCJNNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyeiJdfSx1OXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJvd2VsIixpY29uOls1NzYsNTEyLFtdLCJlNTg5IiwiTTQwNy45IDE4MS40TDI3Ny4zIDMxMiAzNDIuNiAzNzcuNGM3LjkgNy45IDExLjEgMTkuNCA4LjQgMzAuM3MtMTAuOCAxOS42LTIxLjUgMjIuOWwtMjU2IDgwYy0xMS40IDMuNS0yMy44IC41LTMyLjItNy45cy0xMS41LTIwLjgtNy45LTMyLjJsODAtMjU2YzMuMy0xMC43IDEyLTE4LjkgMjIuOS0yMS41czIyLjQgLjUgMzAuMyA4LjRMMjMyIDI2Ni43IDM2Mi42IDEzNi4xYy0xNC4zLTE0LjYtMTQuMi0zOCAuMy01Mi41bDk1LjQtOTUuNGMyNi45LTI2LjkgNzAuNS0yNi45IDk3LjUgMHMyNi45IDcwLjUgMCA5Ny41bC05NS40IDk1LjRjLTE0LjUgMTQuNS0zNy45IDE0LjYtNTIuNSAuM3oiXX0sUnJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtYmFjay1maXN0IixpY29uOlszODQsNTEyLFsiaGFuZC1yb2NrIl0sImYyNTUiLCJNNy40IDI1My42QzIuNiAyNDUuOSAwIDIzNy4xIDAgMjI4bDAtMzZjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMCAwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4IDE3LjMgMCAzMi40IDkuMSA0MC45IDIyLjggNC4zLTIyLjEgMjMuOC0zOC44IDQ3LjEtMzguOCAyMy40IDAgNDIuOSAxNi44IDQ3LjEgMzguOSA3LjMtNC40IDE1LjgtNi45IDI0LjktNi45IDIyLjEgMCA0MC44IDE1IDQ2LjMgMzUuNCA1LjUtMi4yIDExLjQtMy40IDE3LjctMy40IDI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTYuOWMwIDkuOS0yLjMgMTkuNy02LjggMjguNmwtMzkuNiA3OS4xYy0xMC44IDIxLjctMzMgMzUuNC01Ny4yIDM1LjRMOTYgMzUyYy0xNi41IDAtMzEuOC04LjQtNDAuNi0yMi40bC00OC03NnpNMzIgNDgwbDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkw2NCA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxwOXQ9UnJlLGg5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW1wZXJhdHVyZS1oaWdoIixpY29uOls1MTIsNTEyLFtdLCJmNzY5IiwiTTk2IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFM0OCA0NDcuNSA0OCAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMOTYgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNMMjE2IDk2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjEyLjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHpNNDY0IDgwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM1MiA4MGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6Il19LG05dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJncmVhdGVyLXRoYW4iLGljb246WzUxMiw1MTIsWzYyNzY5XSwiM2UiLCJNMzQuOSA1MC42Yy03LjQgMTYtLjQgMzUuMSAxNS42IDQyLjVMNDAzLjYgMjU2IDUwLjYgNDE5Yy0xNiA3LjQtMjMuMSAyNi40LTE1LjYgNDIuNXMyNi40IDIzIDQyLjUgMTUuNmw0MTYtMTkyYzExLjMtNS4yIDE4LjYtMTYuNiAxOC42LTI5LjFzLTcuMy0yMy44LTE4LjYtMjkuMUw3Ny40IDM1Yy0xNi03LjQtMzUuMS0uNC00Mi41IDE1LjZ6Il19LGc5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjcnV0Y2giLGljb246WzUxMiw1MTIsW10sImY3ZjciLCJNMjk3LjQgOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTEuNC0xLjQtMTU4LjYgMTU4LjZjLTE4IDE4LTQyLjQgMjguMS02Ny45IDI4LjFsLTU5IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40LTYxLjcgNjEuNy05Mi44IDkyLjgtOTMuMyA5My4zLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2LTE2IDAgMCA3Ny4zLTc3LjNjNi02IDkuNC0xNC4xIDkuNC0yMi42bDAtNTljMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlMMjk4LjcgNTYgMjk3LjQgNTQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6TTM0NCAxMDEuM0wyNjEuMyAxODQgMzI4IDI1MC43IDQxMC43IDE2OCAzNDQgMTAxLjN6bS0xMjggMTI4bC0zMC42IDMwLjZjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDUzLjUgNTMuNSAwYzguNSAwIDE2LjYtMy40IDIyLjYtOS40TDI4Mi43IDI5NiAyMTYgMjI5LjN6Il19LEhyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzZXB0YWdvbiIsaWNvbjpbNTc2LDUxMixbImhlcHRhZ29uIl0sImU4MjAiLCJNMjY3LjQtMzEuNWMxNS45LTUuNSAzMy41LTQuNiA0OC44IDIuN2wxNzIuNCA4MyA2LjMgMy41YzE0LjIgOSAyNC41IDIzLjMgMjguMyAzOS45bDQyLjYgMTg2LjUgMS4yIDcuMmMxLjYgMTQuMy0xLjcgMjguOC05LjQgNDEuMWwtNC4yIDUuOS0xMTkuMyAxNDkuNmMtMTIuMSAxNS4yLTMwLjYgMjQuMS01MCAyNC4xbC0xOTEuMyAwYy0xOS41IDAtMzcuOS04LjktNTAtMjQuMUwyMy41IDMzOC40Yy0xMi4xLTE1LjItMTYuNy0zNS4yLTEyLjMtNTQuMmw0Mi42LTE4Ni41IDItN2M1LjYtMTUuOSAxNy4yLTI5IDMyLjYtMzYuNGwxNzIuNC04MyA2LjctMi43eiJdfSx4OXQ9SHJlLGI5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdHJlZXQtdmlldyIsaWNvbjpbNTEyLDUxMixbXSwiZjIxZCIsIk0yNTYgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNMjI0IDE2MGw2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEuOCAwLTExLjEgOTkuNWMtMS44IDE2LjItMTUuNSAyOC41LTMxLjggMjguNWwtMzguNyAwYy0xNi4zIDAtMzAtMTIuMy0zMS44LTI4LjVsLTExLjEtOTkuNS0xLjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC00OGMwLTM1LjMgMjguNy02NCA2NC02NHpNNDEyLjQgNDAwLjJjLTE2LjEtNC4yLTM0LjgtNy42LTU1LjQtMTAuMmw1LjMtNDcuN2MyMi43IDIuOSA0My43IDYuNyA2Mi4xIDExLjUgMjIuNCA1LjggNDIuNiAxMy4zIDU3LjggMjMuMyAxNC43IDkuNiAyOS44IDI0LjkgMjkuOCA0N3MtMTUuMSAzNy40LTI5LjggNDdjLTE1LjIgOS45LTM1LjUgMTcuNS01Ny44IDIzLjMtNDUuMSAxMS43LTEwNS4zIDE3LjgtMTY4LjQgMTcuOHMtMTIzLjMtNi4xLTE2OC40LTE3LjhDNjUuMiA0ODguNCA0NSA0ODAuOSAyOS44IDQ3MSAxNS4xIDQ2MS40IDAgNDQ2LjEgMCA0MjRzMTUuMS0zNy40IDI5LjgtNDdjMTUuMi05LjkgMzUuNS0xNy41IDU3LjgtMjMuMyAxOC41LTQuOCAzOS41LTguNiA2Mi4xLTExLjVMMTU1IDM5MGMtMjAuNiAyLjYtMzkuMyA2LjEtNTUuNCAxMC4yLTU2LjYgMTQuNi01Ni42IDMyLjkgMCA0Ny41IDM5LjkgMTAuMyA5NS44IDE2LjIgMTU2LjQgMTYuMnMxMTYuNS01LjkgMTU2LjQtMTYuMmM1Ni42LTE0LjYgNTYuNi0zMi45IDAtNDcuNXoiXX0sdjl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndhdmUtc3F1YXJlIixpY29uOls1MTIsNTEyLFtdLCJmODNlIiwiTTY0IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjg4IDk2IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjg4LTk2IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTEyOHoiXX0seTl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFuZ2xlLWxlZnQiLGljb246WzI1Niw1MTIsWzgyNDldLCJmMTA0IiwiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2IDIxNC42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYweiJdfSx3OXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2NyZXdkcml2ZXIiLGljb246WzU3Niw1MTIsWzEyOTY5MV0sImY1NGEiLCJNMzUyLjEgMTQ2LjdsMC00OS42YzAtMTAuNyA1LjMtMjAuNyAxNC4yLTI2LjZMNDg1LjItOC43YzYuMy00LjIgMTQuOC0zLjQgMjAuMiAybDQ1LjQgNDUuNWM1LjQgNS40IDYuMiAxMy44IDIgMjAuMkw0NzMuNiAxNzcuOGMtNS45IDguOS0xNS45IDE0LjItMjYuNiAxNC4ybC00OS42IDAtOTAuNyA5MC43YzE1IDMzLjMgOC45IDczLjktMTguNSAxMDEuM0wxNjIuMSA1MTAuMWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMzQuMSA0NDkuOWMtMTguNy0xOC43LTE4LjctNDkuMSAwLTY3LjlMMTYwLjEgMjU2YzI3LjQtMjcuNCA2Ny45LTMzLjYgMTAxLjMtMTguNWw5MC43LTkwLjd6Il19LE05dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cmFjdG9yIixpY29uOls1NzYsNTEyLFsxMjg2NjhdLCJmNzIyIiwiTTE2MCA5NmwwIDk2IDEzMy40IDAtNTcuNi05Ni03NS44IDB6TTk2IDIyM0w5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMDcuOCAwYzIyLjUgMCA0My4zIDExLjggNTQuOSAzMS4xbDc3LjQgMTI4LjkgNjQgMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA3MiA0OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDEuNWMwIDE0LjItNi4zIDI3LjgtMTcuMyAzNi45bC0zNSAyOS4yYzI2LjUgMTUuMiA0NC4zIDQzLjcgNDQuMyA3Ni40IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMTQuNCAzLjUtMjggOS42LTQwbC0xMDEuMiAwYy0zIDEzLjQtNy45IDI2LTE0LjQgMzcuNyA3LjcgOS40IDcuMiAyMy40LTEuNiAzMi4ybC0yMi42IDIyLjZjLTguOCA4LjgtMjIuNyA5LjMtMzIuMiAxLjYtOS4zIDUuMi0xOS4zIDkuMy0yOS44IDEyLjMtMS4yIDEyLjEtMTEuNCAyMS42LTIzLjkgMjEuNmwtMzIgMGMtMTIuNCAwLTIyLjctOS41LTIzLjktMjEuNi0xMC41LTMtMjAuNC03LjItMjkuOC0xMi4zLTkuNCA3LjctMjMuNCA3LjItMzIuMi0xLjZMMzUuNSA0NTMuOGMtOC44LTguOC05LjMtMjIuNy0xLjYtMzIuMi01LjItOS4zLTkuMy0xOS4zLTEyLjMtMjkuOC0xMi4xLTEuMi0yMS42LTExLjQtMjEuNi0yMy45bDAtMzJjMC0xMi40IDkuNS0yMi43IDIxLjYtMjMuOSAzLTEwLjUgNy4yLTIwLjQgMTIuMy0yOS44LTcuNy05LjQtNy4yLTIzLjQgMS42LTMyLjJsMjIuNi0yMi42YzguOC04LjggMjIuNy05LjMgMzIuMi0xLjYgMS45LTEgMy43LTIgNS43LTN6bTY0IDY1YTY0IDY0IDAgMSAwIDAgMTI4IDY0IDY0IDAgMSAwIDAtMTI4ek00NDAgNDI0YTQwIDQwIDAgMSAwIDgwIDAgNDAgNDAgMCAxIDAgLTgwIDB6Il19LHo5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicmlkZ2UtY2lyY2xlLXhtYXJrIixpY29uOls1NzYsNTEyLFtdLCJlNGNiIiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw4IDAgMCA2NC00MCAwIDAgMTEyYzM3LjYgOS40IDY0IDQzLjIgNjQgODJsMCA5NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NiA2LjQgMCAxMi43IC42IDE4LjcgMS44IDM0LjctNDkuNSA5Mi4yLTgxLjggMTU3LjMtODEuOCAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTY1LjQtNDAgMCAwLTY0IDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnpNNDI0IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTI5NiA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek04OCA5Nmw4MCAwIDAgNjQtODAgMCAwLTY0ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXX0sazl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZpYWxzIixpY29uOls1MTIsNTEyLFtdLCJmNDkzIiwiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAzNTJjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTM1MiA2NCAwIDAgMzUyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0zNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJTNDk3LjcgMCA0ODAgMEwzMiAwek0xNjAgNjRsMCAxMjgtNjQgMCAwLTEyOCA2NCAwem0yNTYgMGwwIDEyOC02NCAwIDAtMTI4IDY0IDB6Il19LFM5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdGV0aG9zY29wZSIsaWNvbjpbNTc2LDUxMixbMTI5NjU4XSwiZjBmMSIsIk0zMiA0OEMzMiAyMS41IDUzLjUgMCA4MCAwbDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMlMyMzguMyAwIDI1NiAwbDQ4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNDRjMCA3Ny40LTU1IDE0Mi0xMjggMTU2LjhsMCAxOS4yYzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJsMC04NS41Yy0zNy4zLTEzLjItNjQtNDguNy02NC05MC41IDAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCA0MS44LTI2LjcgNzcuNC02NCA5MC41bDAgODUuNWMwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMxNjAgNDY1LjIgMTYwIDM2OGwwLTE5LjJDODcgMzM0IDMyIDI2OS40IDMyIDE5MkwzMiA0OHpNNDgwIDIyNGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LEM5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwb2RjYXN0IixpY29uOls0NDgsNTEyLFtdLCJmMmNlIiwiTTMzNiAzNTkuOGMzOS4xLTMyLjMgNjQtODEuMSA2NC0xMzUuOCAwLTk3LjItNzguOC0xNzYtMTc2LTE3NlM0OCAxMjYuOCA0OCAyMjRDNDggMjc4LjcgNzIuOSAzMjcuNSAxMTIgMzU5LjggMTEyLjQgMzc3LjQgMTE1LjIgNDAwLjIgMTE4LjQgNDIxLjYgNDggMzgzLjkgMCAzMDkuNSAwIDIyNCAwIDEwMC4zIDEwMC4zIDAgMjI0IDBTNDQ4IDEwMC4zIDQ0OCAyMjRjMCA4NS42LTQ4IDE1OS45LTExOC41IDE5Ny42IDMuMy0yMS40IDYtNDQuMiA2LjQtNjEuOHptLTE0LTUzLjRjLTguMy0xMi42LTE5LjItMjEuNi0zMC40LTI3LjgtMi4xLTEuMS00LjItMi4yLTYuMy0zLjIgMTEuNy0xMy45IDE4LjgtMzEuOSAxOC44LTUxLjUgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAxOS42IDcuMSAzNy42IDE4LjggNTEuNS0yLjEgMS00LjIgMi02LjMgMy4yLTExLjIgNi4yLTIyLjEgMTUuMi0zMC40IDI3LjgtMTguOC0yMi4zLTMwLjEtNTEtMzAuMS04Mi40IDAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4czEyOCA1Ny4zIDEyOCAxMjhjMCAzMS40LTExLjMgNjAuMi0zMC4xIDgyLjR6TTIyNCAzMTJjMzIuOSAwIDY0IDguNiA2NCA0My44IDAgMzMtMTIuOSAxMDQuMS0yMC42IDEzMi45LTUuMSAxOS0yNC41IDIzLjQtNDMuNCAyMy40cy0zOC4yLTQuNC00My40LTIzLjRjLTcuOC0yOC41LTIwLjYtOTkuNy0yMC42LTEzMi44IDAtMzUuMSAzMS4xLTQzLjggNjQtNDMuOHptMC0xMjhhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdfSxMOXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAtcmlnaHQtZG90cyIsaWNvbjpbNTEyLDUxMixbXSwiZTRiNyIsIk05NiAzMkM3OC4zIDMyIDY0IDQ2LjMgNjQgNjRTNzguMyA5NiA5NiA5NkwxMTQuNyA5NiA5LjQgMjAxLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTYwIDE0MS4zIDE2MCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDMyek00MDMuOCA3MC4xYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6TTI3OS43IDE5NC4yYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6bTE2Mi4yLTM4LjFhMzguMSAzOC4xIDAgMSAwIDAgNzYuMiAzOC4xIDM4LjEgMCAxIDAgMC03Ni4yek0xNTYuMiAzMTcuOGEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAwem0xNjEuNi0zOC4xYTM4LjEgMzguMSAwIDEgMCAwIDc2LjIgMzguMSAzOC4xIDAgMSAwIDAtNzYuMnptODYuMSAzOC4xYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6TTcwLjEgNDAzLjhhMzguMSAzOC4xIDAgMSAwIDAgNzYuMiAzOC4xIDM4LjEgMCAxIDAgMC03Ni4yem04Ni4xIDM4LjFhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHptMTYxLjYtMzguMWEzOC4xIDM4LjEgMCAxIDAgMCA3Ni4yIDM4LjEgMzguMSAwIDEgMCAwLTc2LjJ6bTg2LjEgMzguMWEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAweiJdfSxUOXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hlc3MtcXVlZW4iLGljb246WzUxMiw1MTIsWzk4MTldLCJmNDQ1IiwiTTI1NiA4MGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTUuNSAxODVMMTI4IDM4NCA3MS44IDQ1NC4zYy01IDYuMy03LjggMTQuMS03LjggMjIuMiAwIDE5LjYgMTUuOSAzNS41IDM1LjUgMzUuNWwzMTIuOSAwYzE5LjYgMCAzNS41LTE1LjkgMzUuNS0zNS41IDAtOC4xLTIuNy0xNS45LTcuOC0yMi4yTDM4NCAzODQgNTA2LjUgMTg1YzMuNi01LjkgNS41LTEyLjcgNS41LTE5LjZsMC0uNmMwLTIwLjMtMTYuNS0zNi44LTM2LjgtMzYuOC03LjMgMC0xNC40IDIuMi0yMC40IDYuMmwtMTYuOSAxMS4zYy0xMi43IDguNS0yOS42IDYuOC00MC40LTRsLTM0LjEtMzQuMUMzNTYuMSAxMDAuMSAzNDYuMiA5NiAzMzYgOTZzLTIwLjEgNC4xLTI3LjMgMTEuM2wtMzAuMSAzMC4xYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMzAuMS0zMC4xQzE5Ni4xIDEwMC4xIDE4Ni4yIDk2IDE3NiA5NnMtMjAuMSA0LjEtMjcuMyAxMS4zbC0zNC4xIDM0LjFjLTEwLjggMTAuOC0yNy43IDEyLjUtNDAuNCA0TDU3LjMgMTM0LjJjLTYuMS00LTEzLjItNi4yLTIwLjQtNi4yLTIwLjMgMC0zNi44IDE2LjUtMzYuOCAzNi44bDAgLjZjMCA2LjkgMS45IDEzLjcgNS41IDE5LjZ6Il19LF85dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbmNob3ItY2lyY2xlLWV4Y2xhbWF0aW9uIixpY29uOls2NDAsNTEyLFtdLCJlNGFiIiwiTTMyMC41IDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmMtNTMgMC05NiA0My05NiA5NiAwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCAyNTcuOWMtNjIuOS0xNC4zLTExMC4yLTY5LjctMTExLjktMTM2LjVsMTYuMSAxNC4xYzEwIDguNyAyNS4xIDcuNyAzMy45LTIuM3M3LjctMjUuMS0yLjMtMzMuOWwtNjQtNTZjLTktNy45LTIyLjYtNy45LTMxLjYgMGwtNjQgNTZjLTEwIDguNy0xMSAyMy45LTIuMyAzMy45czIzLjkgMTEgMzMuOSAyLjNsMTYuMi0xNC4yYzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAxNi42IDAgMzIuNy0xLjkgNDguMi01LjYtMjAuMy0zMC41LTMyLjItNjctMzIuMi0xMDYuNCAwLTI3LjMgNS43LTUzLjMgMTYtNzYuOWwwLTEzNi42YzM3LjMtMTMuMiA2NC00OC43IDY0LTkwLjUgMC01My00My05Ni05Ni05NnptMjA4IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il19LHFyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlbGxpcHNpcy12ZXJ0aWNhbCIsaWNvbjpbMTI4LDUxMixbImVsbGlwc2lzLXYiXSwiZjE0MiIsIk02NCAxNDRhNTYgNTYgMCAxIDEgMC0xMTIgNTYgNTYgMCAxIDEgMCAxMTJ6bTAgMjI0YzMwLjkgMCA1NiAyNS4xIDU2IDU2cy0yNS4xIDU2LTU2IDU2LTU2LTI1LjEtNTYtNTYgMjUuMS01NiA1Ni01NnptNTYtMTEyYzAgMzAuOS0yNS4xIDU2LTU2IDU2cy01Ni0yNS4xLTU2LTU2IDI1LjEtNTYgNTYtNTYgNTYgMjUuMSA1NiA1NnoiXX0sQTl0PXFyZSwkOXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVhcnQtY2lyY2xlLWV4Y2xhbWF0aW9uIixpY29uOls1NzYsNTEyLFtdLCJlNGZlIiwiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTQzMiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDIyOGEyMCAyMCAwIDEgMCAwLTQwIDIwIDIwIDAgMSAwIDAgNDB6bTAtMTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2eiJdfSxEOXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVpbGRpbmctY2lyY2xlLWV4Y2xhbWF0aW9uIixpY29uOls1NzYsNTEyLFtdLCJlNGQzIiwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTc0LjkgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMiAwIDQgLjIgNS45IC41IDYtMjMuNiAxNi4zLTQ1LjQgMzAuMS02NC41bC00IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDRjMjcuNS0xOS44IDYwLjMtMzIuNCA5Ni0zNS40TDQxNiA2NGMwLTM1LjMtMjguNy02NC02NC02NEw5NiAwem0zMiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTEyOCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il19LEU5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tYXJyb3ctdXAtZnJvbS1saW5lIixpY29uOls1NzYsNTEyLFtdLCJlNTM5IiwiTTE5Mi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMzE4LjMgMjk5LjFsLTQ2LjMtNjIuNCAwIDI0My4zIDI3MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDU0NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MCAwIDAtMjQzLjMtNDYuMyA2Mi40Yy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxMTAgMTMyIDE0OS43IDExMiAxOTIgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42ek0yMDggNDgwbDAtMTI4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTI4IDMyIDB6TTU2Ni42IDEwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEw0OTYgNzcuMyA0OTYgMjI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTQ2LjctMjUuNCAyNS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w4MC04MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3oiXX0sTjl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im5vdC1lcXVhbCIsaWNvbjpbNDQ4LDUxMixbXSwiZjUzZSIsIk0zNzguNiA4MS44YzkuOC0xNC43IDUuOC0zNC42LTguOS00NC40cy0zNC42LTUuOC00NC40IDguOUwyNzAuOSAxMjggMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5Ni4yIDAtODUuMyAxMjgtMTEwLjkgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2OC4yIDAtMzAuOCA0Ni4yYy05LjggMTQuNy01LjggMzQuNiA4LjkgNDQuNHMzNC42IDUuOCA0NC40LTguOUwxNzcuMSAzODQgNDE2IDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTk2LjIgMCA4NS4zLTEyOCAxMTAuOSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02OC4yIDAgMzAuOC00Ni4yeiJdfSxQOXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJhaW4tdHJhbSIsaWNvbjpbMzg0LDUxMixbMTI4NjUwXSwiZTViNCIsIk0wIDhDMC01LjMgMTAuNy0xNiAyNC0xNmwzMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC0xMjAgMCAwIDY0IDQwIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDE2MGMwIDMxLjItMTQuOSA1OS0zOCA3Ni41bDY0LjMgNzZjOC42IDEwLjEgNy4zIDI1LjMtMi44IDMzLjhzLTI1LjMgNy4zLTMzLjgtMi44bC03NC42LTg4LjFjLTMuNiAuNC03LjMgLjYtMTEuMSAuNmwtMTI4IDBjLTMuOCAwLTcuNS0uMi0xMS4xLS42TDQyLjMgNTM1LjVjLTguNiAxMC4xLTIzLjcgMTEuNC0zMy44IDIuOHMtMTEuNC0yMy43LTIuOC0zMy44bDY0LjMtNzZDNDYuOSA0MTEgMzIgMzgzLjIgMzIgMzUybDAtMTYwYzAtNTMgNDMtOTYgOTYtOTZsNDAgMCAwLTY0LTEyMCAwIDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNFMwIDUzLjMgMCA0MEwwIDh6TTEyOCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTI4IDB6bTMyIDE5MmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LEk5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbGFuZS1kZXBhcnR1cmUiLGljb246WzU3Niw1MTIsWzEyODc0N10sImY1YjAiLCJNMzcyIDE0My45TDE3Mi43IDQwLjJjLTgtNC4xLTE3LjMtNC44LTI1LjctMS43bC00MS4xIDE1Yy0xMC4zIDMuNy0xMy44IDE2LjQtNy4xIDI1TDIwMC4zIDIwNi40IDEwMC4xIDI0Mi44IDQwIDIwNi4yYy02LjItMy44LTEzLjgtNC41LTIwLjctMi4xTDMgMjEwLjFjLTkuNCAzLjQtMTMuNCAxNC41LTguMyAyMy4xbDUzLjYgOTEuOGMxNS42IDI2LjcgNDguMSAzOC40IDc3LjEgMjcuOGwxMi45LTQuNyAwIDAgMzk4LjQtMTQ1YzI5LjEtMTAuNiA0NC00Mi43IDMzLjUtNzEuOHMtNDIuNy00NC03MS44LTMzLjVMMzcyIDE0My45ek0zMi4yIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNTEyIDB6Il19LFZyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyaWdodC10by1icmFja2V0IixpY29uOls1MTIsNTEyLFsic2lnbi1pbi1hbHQiXSwiZjJmNiIsIk0zNDUgMjczYzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDIwMSA5NWMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMxNjAgMTAyLjMgMTYwIDExMmwwIDgwLTExMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDExMiAwIDAgODBjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4yTDM0NSAyNzN6bTcgMTQzYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTI1NmMwLTUzLTQzLTk2LTk2LTk2bC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDB6Il19LEY5dD1WcmUsTzl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNkLWNhcmQiLGljb246WzM4NCw1MTIsW10sImY3YzIiLCJNMzg0IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyNS4zIDBDMTA4LjMgMCA5MiA2LjcgODAgMTguN0wxOC43IDgwQzYuNyA5MiAwIDEwOC4zIDAgMTI1LjNMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODR6TTE2MCA4OGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHptODggMGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHptODggMGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXX0sQjl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTUwYSIsIk00OTYgNTQ0YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNMjY4LjYgNi41YzEyLjItOS4zIDI5LjctOC43IDQxLjIgMmwyMTcuNiAyMDJjLTEwLjItMS43LTIwLjctMi42LTMxLjMtMi42LTc4LjYgMC0xNDYuMSA0Ny4yLTE3NS44IDExNC44LTUuMS0xLjgtMTAuNS0yLjgtMTYuMi0yLjhsLTMyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgOTEgMGM2LjEgMTcuMyAxNC42IDMzLjQgMjUuMSA0OEwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTQ5NiA0NDRhMjAgMjAgMCAxIDAgMCA0MCAyMCAyMCAwIDEgMCAwLTQwem0wLTE0MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2IDguOCAwIDE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnoiXX0sSzY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hla2VsLXNpZ24iLGljb246WzQ0OCw1MTIsWzgzNjIsImlscyIsInNoZWtlbCIsInNoZXFlbCIsInNoZXFlbC1zaWduIl0sImYyMGIiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzUyIDEyOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhMMzIgMzJ6TTMyMCA0ODBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0yODhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEyOCAwIDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAweiJdfSxSOXQ9SzYsSDl0PUs2LHE5dD1LNixWOXQ9SzYsVTl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJhZGlvIixpY29uOls1MTIsNTEyLFsxMjgyNTFdLCJmOGQ3IiwiTTQ5NC44IDE1YzEyLjctMy43IDIwLTE3LjEgMTYuMy0yOS44UzQ5NC0zNC44IDQ4MS4zLTMxTDUxLjggOTQuOUM0Mi40IDk3LjYgMzMuOSAxMDIuMSAyNi42IDEwOCAxMC41IDExOS43IDAgMTM4LjYgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjE4LjUgOTYgNDk0LjggMTV6TTM2OCAyMDhhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTY0IDI0OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCAyNzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDM2OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il19LFVyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLWRvdHMiLGljb246WzUxMiw1MTIsWyJhbGxlcmdpZXMiXSwiZjQ2MSIsIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNzJjMCAxLjUgMCAzLjEgLjEgNC42TDY3LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNFMtMy42IDMyNS43IDEyLjQgMzQxTDEyNC44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0bDE5LjIgMGM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NmwwLTIwOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTIwOHpNMjAwIDM1MmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0tODggMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdfSxqOXQ9VXJlLGpyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib29rLXNrdWxsIixpY29uOls0NDgsNTEyLFsiYm9vay1kZWFkIl0sImY2YjciLCJNOTYgNTEybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtNjYuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNsMC0yODhjMC0yNi41LTIxLjUtNDgtNDgtNDhMOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2ek02NCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDAgMCA2NC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTI3MiAxNjMuMmwwIDEyLjhjMCA4LjgtNy4yIDE2LTE2IDE2bC02NCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xMi44Yy0xOS40LTExLjctMzItMzAuMy0zMi01MS4yIDAtMzUuMyAzNS44LTY0IDgwLTY0czgwIDI4LjcgODAgNjRjMCAyMC45LTEyLjYgMzkuNS0zMiA1MS4yek0yMDggMTEyYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptNzQuMiA5NS43YzQuNiAxMC4xIC4xIDIxLjktOS45IDI2LjVsLTQ3LjkgMjEuOCA0Ny45IDIxLjhjMTAuMSA0LjYgMTQuNSAxNi40IDkuOSAyNi41cy0xNi40IDE0LjUtMjYuNSA5LjlMMjI0IDI5NCAxNDQuMyAzMzAuMmMtMTAuMSA0LjYtMjEuOSAuMS0yNi41LTkuOXMtLjEtMjEuOSA5LjktMjYuNWw0Ny45LTIxLjgtNDcuOS0yMS44Yy0xMC4xLTQuNi0xNC41LTE2LjQtOS45LTI2LjVzMTYuNC0xNC41IDI2LjUtOS45TDIyNCAyNTAgMzAzLjcgMjEzLjhjMTAuMS00LjYgMjEuOS0uMSAyNi41IDkuOXoiXX0sVzl0PWpyZSxXcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidW5sb2NrLWtleWhvbGUiLGljb246WzM4NCw1MTIsWyJ1bmxvY2stYWx0Il0sImYxM2UiLCJNMTkyIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0IDE5MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMC02NGMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOCA2My41IDAgMTE2LjEgNDYuMSAxMjYuMiAxMDYuNyAyLjkgMTcuNC04LjggMzMuOS0yNi4zIDM2LjlzLTMzLjktOC44LTM2LjktMjYuM0MyNTAgNTUuMSAyMjMuNyAzMiAxOTIgMzJ6bTQwIDMyOGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAweiJdfSxHOXQ9V3JlLEdyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWFycm93LXVwIixpY29uOlszODQsNTEyLFsiZmlsZS11cGxvYWQiXSwiZjU3NCIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMjA5IDI2M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTY0IDY0Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMjMtMjMgMCA4Ni4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04Ni4xIDIzIDIzYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNjQtNjR6Il19LFk5dD1HcmUsWXJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi10ZWFycyIsaWNvbjpbNjQwLDUxMixbMTI4NTE0LCJncmluLXRlYXJzIl0sImY1ODgiLCJNNTU0LjggMjAzLjRsMTYuMyAyLjNDNTQ3LjcgODguNCA0NDQuMiAwIDMyMCAwUzkyLjMgODguNCA2OC45IDIwNS43bDE2LjMtMi4zYzM3LTUuMyA2OC42IDI2LjQgNjMuNCA2My40bC02LjcgNDYuN2MtNC4xIDI5LTIxLjYgNTMuMi00NS44IDY2LjggNDMuNyA3OC41IDEyNy42IDEzMS43IDIyMy44IDEzMS43czE4MC4xLTUzLjEgMjIzLjgtMTMxLjdjLTI0LjEtMTMuNS00MS42LTM3LjgtNDUuOC02Ni44bC02LjctNDYuN2MtNS4zLTM3IDI2LjQtNjguNiA2My40LTYzLjR6TTQ3MC4zIDMyNi45QzQ0Ny45IDM4OC4yIDM4OS4xIDQzMiAzMjAgNDMyUzE5Mi4xIDM4OC4yIDE2OS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjFjMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xek0yMTIgMjA4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6bTE4OC0yOGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHpNNjQwIDMwMC42YzAtMjUuNi0xOC44LTQ3LjMtNDQuMS01MC45TDU0OS4xIDI0M2MtMTAuNi0xLjUtMTkuNiA3LjUtMTguMSAxOC4xbDYuNyA0Ni43YzMuNiAyNS4zIDI1LjMgNDQuMSA1MC45IDQ0LjEgMjguNCAwIDUxLjQtMjMgNTEuNC01MS40em0tNjQwIDBDMCAzMjkgMjMgMzUyIDUxLjQgMzUyIDc3IDM1MiA5OC43IDMzMy4yIDEwMi4zIDMwNy45bDYuNy00Ni43YzEuNS0xMC42LTcuNS0xOS42LTE4LjEtMTguMWwtNDYuNyA2LjdDMTguOCAyNTMuMyAwIDI3NSAwIDMwMC42eiJdfSxaOXQ9WXJlLHc3PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlbi10by1zcXVhcmUiLGljb246WzUxMiw1MTIsWyJlZGl0Il0sImYwNDQiLCJNNDcxLjYgMjEuN2MtMjEuOS0yMS45LTU3LjMtMjEuOS03OS4yIDBMMzY4IDQ2LjEgNDY1LjkgMTQ0IDQ5MC4zIDExOS42YzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDQ3MS42IDIxLjd6bS0yOTkuMiAyMjBjLTYuMSA2LjEtMTAuOCAxMy42LTEzLjUgMjEuOWwtMjkuNiA4OC44Yy0yLjkgOC42LS42IDE4LjEgNS44IDI0LjZzMTUuOSA4LjcgMjQuNiA1LjhsODguOC0yOS42YzguMi0yLjcgMTUuNy03LjQgMjEuOS0xMy41TDQzMiAxNzcuOSAzMzQuMSA4MCAxNzIuNCAyNDEuN3pNOTYgNjRDNDMgNjQgMCAxMDcgMCAxNjBMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NmwyNTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgNjR6Il19LFg5dD13NyxacmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZWFydGgtZXVyb3BlIixpY29uOls1MTIsNTEyLFsiZ2xvYmUtZXVyb3BlIl0sImY3YTIiLCJNMjU2LjIgNDhjMTE0LjggLjEgMjA3LjggOTMuMiAyMDcuOCAyMDggMCAyMi4xLTMuNCA0My40LTkuOCA2My40LTIgLjQtNC4xIC42LTYuMiAuNmwtMi43IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40bC0yOS4zLTI5LjNjLTYtNi05LjQtMTQuMS05LjQtMjIuNmwwLTUwLjdjMC04LjggNy4yLTE2IDE2LTE2czE2LTcuMiAxNi0xNi03LjItMTYtMTYtMTZsLTI0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0cy0xMC43IDI0LTI0IDI0bC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZzLTcuMiAxNi0xNiAxNmwtMjUuNCAwYy0xMi41IDAtMjIuNi0xMC4xLTIyLjYtMjIuNiAwLTYgMi40LTExLjggNi42LTE2bDcwLjEtNzAuMWMyLjEtMi4xIDMuMy01IDMuMy04IDAtNi4yLTUuMS0xMS4zLTExLjMtMTEuM2wtMTQuMSAwYy0xMi41IDAtMjIuNi0xMC4xLTIyLjYtMjIuNiAwLTYgMi40LTExLjggNi42LTE2bDIzLjEtMjMuMWMuOC0uOCAxLjYtMS41IDIuNS0yLjJ6TTQzOC40IDM1Ni4xYy0zMi44IDU5LjYtOTMuOSAxMDEuNC0xNjUuMiAxMDcuMi0uNy0yLjMtMS4xLTQuOC0xLjEtNy4zIDAtMTMuMy0xMC43LTI0LTI0LTI0bC0yNi43IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40bC0yOS4zLTI5LjNjLTYtNi05LjQtMTQuMS05LjQtMjIuNmwwLTY2LjdjMC0xNy43IDE0LjMtMzIgMzItMzJsOTguNyAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDI5LjMgMjkuM2M2IDYgMTQuMSA5LjQgMjIuNiA5LjRsNS41IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRsMTYgMTZjNC4yIDQuMiAxMCA2LjYgMTYgNi42IDQuOCAwIDkuMyAxLjUgMTMgNC4xek0yNTYgNTEybDI2LjItMS4zYy04LjYgLjktMTcuMyAxLjMtMjYuMiAxLjN6bTI2LjItMS4zQzQxMS4zIDQ5Ny42IDUxMiAzODguNiA1MTIgMjU2IDUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwbDAgMEMxMTQuNiAwIDAgMTE0LjYgMCAyNTYgMCAzODMuNSA5My4yIDQ4OS4zIDIxNS4zIDUwOC44IDIyOC41IDUxMC45IDI0Mi4xIDUxMiAyNTYgNTEyek0xODcuMyAxMjMuM2wtMzIgMzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzItMzJjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdfSxROXQ9WnJlLFhyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWdyaW4tYmVhbS1zd2VhdCIsaWNvbjpbNTc2LDUxMixbMTI4NTE3LCJncmluLWJlYW0tc3dlYXQiXSwiZjU4MyIsIk01NDYuMi0uMWMxNC43IDE3LjggMjkuOCA0MC4xIDI5LjggNjQuMSAwIDM2LjQtMjcuNiA2NC02NCA2NHMtNjQtMjcuNi02NC02NGMwLTI0IDE1LjItNDYuMyAyOS44LTY0LjEgOC44LTEwLjcgMTguNS0yMC44IDI5LTMwIDMtMi42IDcuNC0yLjYgMTAuNCAwIDEwLjUgOS4xIDIwLjEgMTkuMyAyOSAzMHpNMjg4IDBjNDIuNSAwIDgyLjYgMTAuNCAxMTcuOCAyOC43LTMuNiAxMC45LTUuOCAyMi43LTUuOCAzNS4zIDAgNjIuOSA0OS4xIDExMiAxMTIgMTEyIDYuNCAwIDEyLjctLjUgMTguOC0xLjUgOC42IDI1LjYgMTMuMiA1MyAxMy4yIDgxLjUgMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMzMiAzOTcuNCAzMiAyNTYgMTQ2LjYgMCAyODggMHpNNDE4LjcgMzA4LjlDMzc5LjUgMzIxLjEgMzM1LjEgMzI4IDI4OCAzMjhzLTkxLjUtNi45LTEzMC43LTE5LjFjLTExLjktMy43LTIzLjkgNi4zLTE5LjYgMTguMSAyMi40IDYxLjMgODEuMyAxMDUuMSAxNTAuMyAxMDUuMXMxMjcuOS00My44IDE1MC4zLTEwNS4xYzQuMy0xMS44LTcuNy0yMS44LTE5LjYtMTguMXpNMjA4IDE4MGMxNS41IDAgMjggMTIuNSAyOCAyOGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMzcuNi0zMC40LTY4LTY4LTY4cy02OCAzMC40LTY4IDY4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0xNS41IDEyLjUtMjggMjgtMjh6bTEzMiAyOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHMyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOHoiXX0sSzl0PVhyZSxRcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWhhbGYtc3Ryb2tlIixpY29uOls1MTIsNTEyLFs5NjgwLCJhZGp1c3QiXSwiZjA0MiIsIk00NDggMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkybDAgMzg0YzEwNiAwIDE5Mi04NiAxOTItMTkyek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdfSxKOXQ9UXJlLGVodD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tbWlsaXRhcnktdG8tcGVyc29uIixpY29uOls1MTIsNTEyLFtdLCJlNTRjIiwiTTcxIDEyLjVjLTguNiAxLTE1IDguMi0xNSAxNi44IDAgOS4zIDcuNSAxNi44IDE2LjcgMTYuOWwxMTEuNCAwYzguOC0uMSAxNS45LTcuMiAxNS45LTE2TDIwMCAxNmMwLTkuNS04LjMtMTctMTcuOC0xNS45TDcxIDEyLjV6TTE4OS41IDc4LjFsLTEyMi45IDBjLTEuNiA1LjctMi41IDExLjctMi41IDE3LjkgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTYuMi0uOS0xMi4yLTIuNS0xNy45ek0zMiAyNTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxLjggMCAzLjUtLjEgNS4yLS40TDUzIDIwOC42QzQwLjEgMjIwLjMgMzIgMjM3LjIgMzIgMjU2em0xOTAuMiA0Mi41YzEuMS0zLjMgMS44LTYuOCAxLjgtMTAuNWwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwYy0zLjcgMC03LjQgLjMtMTAuOSAuOUwyMjIuMiAyOTguNXpNMzg0IDE2MGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHptLTMyIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDB6TTIxNS44IDQ1MC4xYzUuMi00LjYgOC4yLTExLjEgOC4yLTE4LjFzLTMtMTMuNS04LjItMTguMWwtNjQtNTZjLTcuMS02LjItMTcuMS03LjctMjUuNy0zLjhTMTEyIDM2Ni42IDExMiAzNzZsMCAzMi04OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDg4IDAgMCAzMmMwIDkuNCA1LjUgMTggMTQuMSAyMS45czE4LjYgMi40IDI1LjctMy44bDY0LTU2ek0yODggNDMxLjljMCA2LjkgMyAxMy41IDguMSAxOC4xbDY0IDU2LjRjNy4xIDYuMiAxNy4xIDcuOCAyNS43IDMuOVM0MDAgNDk3LjggNDAwIDQ4OC40bDAtMzIuNCA4OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04OCAwIDAtMzJjMC05LjQtNS41LTE4LTE0LjEtMjEuOXMtMTguNi0yLjQtMjUuNyAzLjhsLTY0IDU2Yy01LjIgNC41LTguMiAxMS4xLTguMiAxOHoiXX0sdGh0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhYmxlLWNlbGxzLWNvbHVtbi1sb2NrIixpY29uOls2NDAsNTEyLFtdLCJlNjc4IiwiTTI1NiAyMjRsMCAxOTIgNjQgMCAwLTE5Mi02NCAwem0yNTYtNzljLTQ2LjcgNS44LTg1LjYgMzYuOC0xMDIuNyA3OWwtMjUuMyAwIDAgOTAuOGMtMTAuMSAxNS4yLTE2IDMzLjQtMTYgNTMuMWwwIDk2YzAgNS41IC41IDEwLjkgMS4zIDE2LjFMMTI4IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA0OXpNMTI4IDIyNGwwIDE5MiA2NCAwIDAtMTkyLTY0IDB6bTQzMiA0OC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNNDE2IDM2OGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXX0sYWh0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRydWNrLWZpZWxkLXVuIixpY29uOls2NDAsNTEyLFtdLCJlNThlIiwiTTk2IDMyQzYwLjcgMzIgMzIgNjAuNyAzMiA5NmwwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDAgNDhjMCAyMS4xIDEzLjcgMzkuMSAzMi42IDQ1LjUtLjQgMy40LS42IDctLjYgMTAuNSAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bDE0NC43IDBjLS4yIDIuNi0uNCA1LjMtLjQgOCAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bC40IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtMjQuNyAwLTEuNy00LjItNDMuOC0xMDYuM2MtMTIuMy0zMC00MS42LTQ5LjUtNzQtNDkuNWwtNDAuNCAwQzM2NC40IDQ0LjkgMzQzLjcgMzIgMzIwIDMyTDk2IDMyek0zODQgMjI0bDAtOTYgMzEuOSAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45bDM1LjQgODYuMS04Mi4xIDB6TTE1MiAzNTJhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yODAgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMjU2LjYgMTMyLjlsMjcuNCA0MSAwLTI5LjljMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjBsMCA5NmMwIDguOC01LjggMTYuNi0xNC4yIDE5LjFzLTE3LjUtLjctMjIuNC04bC0yNy40LTQxIDAgMjkuOWMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC05NmMwLTguOCA1LjgtMTYuNiAxNC4yLTE5LjFzMTcuNSAuNyAyMi40IDh6TTEzMiAxNDRsMCA2NGMwIDYuNiA1LjQgMTIgMTIgMTJzMTItNS40IDEyLTEybDAtNjRjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjBsMCA2NGMwIDI4LjctMjMuMyA1Mi01MiA1MnMtNTItMjMuMy01Mi01MmwwLTY0YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIweiJdfSxLcmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvY2siLGljb246WzUxMiw1MTIsWzEyODMzOSwiY2xvY2stZm91ciJdLCJmMDE3IiwiTTI1NiAwYTI1NiAyNTYgMCAxIDEgMCA1MTIgMjU2IDI1NiAwIDEgMSAwLTUxMnpNMjMyIDEyMGwwIDEzNmMwIDggNCAxNS41IDEwLjcgMjBsOTYgNjRjMTEgNy40IDI1LjkgNC40IDMzLjMtNi43czQuNC0yNS45LTYuNy0zMy4zTDI4MCAyNDMuMiAyODAgMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0eiJdfSxyaHQ9S3JlLGlodD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib29rIixpY29uOls0NDgsNTEyLFsxMjgyMTJdLCJmMDJkIiwiTTM4NCA1MTJMOTYgNTEyYy01MyAwLTk2LTQzLTk2LTk2TDAgOTZDMCA0MyA0MyAwIDk2IDBMNDAwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyODhjMCAyMC45LTEzLjQgMzguNy0zMiA0NS4zbDAgNjYuN2MxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMHpNOTYgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI1NiAwIDAtNjQtMjU2IDB6bTMyLTIzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0yNCA3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDB6Il19LEpyZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWxhdWdoLXdpbmsiLGljb246WzUxMiw1MTIsWyJsYXVnaC13aW5rIl0sImY1OWMiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwMS42IDMxNGMtMy43LTEzLjcgNy41LTI2IDIxLjctMjZsMjY1LjQgMGMxNC4yIDAgMjUuNCAxMi4zIDIxLjcgMjYtMTguNSA2OC04MC42IDExOC0xNTQuNCAxMThTMTIwIDM4MiAxMDEuNiAzMTR6TTE0NCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXX0sb2h0PUpyZSxzaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQtbWVhdGJhbGwiLGljb246WzUxMiw1MTIsW10sImY3M2IiLCJNMCAyMjRjMCA1MyA0MyA5NiA5NiA5NmwyNi45IDBjMy41LTEyLjEgMTAuMS0yMy4zIDE5LjItMzIuNGwxLjQtMS40YzE1LTE1IDM1LjMtMjIuOSA1Ni4xLTIyLjIgMTQuMi0xNS4xIDM0LjItMjMuOSA1NS40LTIzLjlsMiAwYzIxLjEgMCA0MS4xIDguOCA1NS40IDIzLjkgMjAuOC0uNiA0MS4xIDcuMyA1Ni4xIDIyLjJsMS40IDEuNGM5LjIgOS4yIDE1LjcgMjAuNCAxOS4yIDMyLjRsMjYuOSAwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwIDEuMS01LjIgMS42LTEwLjUgMS42LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwLTI0LjMgMC00Ni4xIDEwLjktNjAuOCAyOC0xOC43LTM1LjctNTYuMS02MC05OS4yLTYwLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyIDAgNy4xIC43IDE0LjEgMS45IDIwLjgtMzguMyAxMi42LTY1LjkgNDguNy02NS45IDkxLjJ6TTE1Ni41IDQyNC4zYzkuNSA2LjMgMTQuMiAxNy43IDExLjkgMjguOC0xLjggOS4yIDEgMTguNyA3LjcgMjUuM2wxLjQgMS40YzYuNiA2LjYgMTYuMSA5LjUgMjUuMyA3LjcgMTEuMS0yLjIgMjIuNSAyLjUgMjguOCAxMS45IDUuMiA3LjggMTQgMTIuNSAyMy4zIDEyLjVsMiAwYzkuNCAwIDE4LjEtNC43IDIzLjMtMTIuNSA2LjMtOS41IDE3LjctMTQuMiAyOC44LTExLjkgOS4yIDEuOCAxOC43LTEgMjUuMy03LjdsMS40LTEuNGM2LjYtNi42IDkuNS0xNi4xIDcuNy0yNS4zLTIuMi0xMS4xIDIuNS0yMi41IDExLjktMjguOCA3LjgtNS4yIDEyLjUtMTQgMTIuNS0yMy4zbDAtMmMwLTkuNC00LjctMTguMS0xMi41LTIzLjMtOS41LTYuMy0xNC4yLTE3LjctMTEuOS0yOC44IDEuOC05LjItMS0xOC43LTcuNy0yNS4zbC0xLjQtMS40Yy02LjYtNi42LTE2LjEtOS41LTI1LjMtNy43LTExLjEgMi4yLTIyLjUtMi41LTI4LjgtMTEuOS01LjItNy44LTE0LTEyLjUtMjMuMy0xMi41bC0yIDBjLTkuNCAwLTE4LjEgNC43LTIzLjMgMTIuNS02LjMgOS41LTE3LjcgMTQuMi0yOC44IDExLjktOS4yLTEuOC0xOC43IDEtMjUuMyA3LjdsLTEuNCAxLjRjLTYuNiA2LjYtOS41IDE2LjEtNy43IDI1LjMgMi4yIDExLjEtMi41IDIyLjUtMTEuOSAyOC44LTcuOCA1LjItMTIuNSAxNC0xMi41IDIzLjNsMCAyYzAgOS40IDQuNyAxOC4xIDEyLjUgMjMuM3pNNDggNDQ4YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptNDE2IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdfSxlaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hhcnQtYXJlYSIsaWNvbjpbNTEyLDUxMixbImFyZWEtY2hhcnQiXSwiZjFmZSIsIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMzNmMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgNDgwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyek0yNDAgOTZjNi43IDAgMTMuMSAyLjggMTcuNyA3LjhMMzI4LjggMTgxLjMgMzc1IDEzNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw2NCA2NGM0LjUgNC41IDcgMTAuNiA3IDE3bDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC0zMDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xMTJjMC02IDIuMy0xMS44IDYuMy0xNi4ybDg4LTk2YzQuNS01IDExLTcuOCAxNy43LTcuOHoiXX0sbmh0PWVpZSxsaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicnVwaWFoLXNpZ24iLGljb246WzUxMiw1MTIsW10sImUyM2QiLCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw4MCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgNTQuMy0zMCAxMDEuNS03NC40IDEyNi4xbDQxIDEzNi43YzUuMSAxNi45LTQuNSAzNC44LTIxLjUgMzkuOHMtMzQuOC00LjUtMzkuOC0yMS41TDEyMC4xIDMxOS44Yy0yLjcgLjEtNS40IC4yLTguMSAuMmwtNDggMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjR6TTY0IDI1Nmw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwIDAgMTYwem0yNTYtMzJsODAgMGM2MS45IDAgMTEyIDUwLjEgMTEyIDExMlM0NjEuOSA0NDggNDAwIDQ0OGwtNDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem04MCAxNjBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCA5NiA0OCAweiJdfSxjaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGV4dC13aWR0aCIsaWNvbjpbNDQ4LDUxMixbXSwiZjAzNSIsIk00MCAwQzE3LjkgMCAwIDE3LjkgMCA0MEwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAxMjggMCAwIDE2MC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMTYwIDEyOCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTU2YzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDB6bTc4LjYgNDA2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDIyOS41IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDkuNCA5LjQtMjI5LjUgMCA5LjQtOS40eiJdfSxkaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2F0ZWxsaXRlIixpY29uOls1MTIsNTEyLFsxMjg3NTJdLCJmN2JmIiwiTTE5OSA3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDg5LjQgODkuNCA1NS01NWMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw0OCA0OGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNTUgNTUgODkuNCA4OS40YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC05NiA5NmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTg5LjQtODkuNC0xNS41IDE1LjVjMTEuNCAyNC42IDE3LjggNTIgMTcuOCA4MC45IDAgMzEuNy03LjcgNjEuNS0yMS4yIDg3LjgtNC43IDktMTYuNyAxMC4zLTIzLjggMy4xbC05Ni4zLTk2LjMtNjAgNjBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDYwLTYwLTk2LjMtOTYuM2MtNy4yLTcuMi01LjktMTkuMiAzLjEtMjMuOCAyNi4zLTEzLjYgNTYuMi0yMS4yIDg3LjgtMjEuMiAyOC45IDAgNTYuMyA2LjQgODAuOSAxNy44TDE5Mi40IDIyNi4zIDEwMyAxMzdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDE5OSA3em0xNyA1MC45bC02Mi4xIDYyLjEgNzIuNCA3Mi40IDYyLjEtNjIuMS03Mi40LTcyLjR6TTM5MiAzNTguMWw2Mi4xLTYyLjEtNzIuNC03Mi40LTYyLjEgNjIuMSA3Mi40IDcyLjR6Il19LHRpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYWduaWZ5aW5nLWdsYXNzLW1pbnVzIixpY29uOls1MTIsNTEyLFsic2VhcmNoLW1pbnVzIl0sImYwMTAiLCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0xMzYgMTg0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXX0sZmh0PXRpZSx1aHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVvcGxlLWdyb3VwIixpY29uOls1MTIsNTEyLFtdLCJlNTMzIiwiTTI1NiAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em05NiAzMTJjMCAyNS0xMi43IDQ3LTMyIDU5LjlsMCA5Mi4xYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTkyLjFDMTcyLjcgMzU5IDE2MCAzMzcgMTYwIDMxMmwwLTQwYzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCA0MHpNOTYgMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTE2IDI0MGwwIDMyYzAgMzIuNSAxMi4xIDYyLjEgMzIgODQuN2wwIDc1LjNjMCAxLjIgMCAyLjUgLjEgMy43LTguNSA3LjYtMTkuNyAxMi4zLTMyLjEgMTIuM2wtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC01Ni42QzEyLjkgMzY0LjQgMCAzNDMuNyAwIDMyMGwwLTMyYzAtNTMgNDMtOTYgOTYtOTYgMTIuNyAwIDI0LjggMi41IDM1LjkgNi45LTEyLjYgMjEuNC0xOS45IDQ2LjQtMTkuOSA3My4xek0zNjggNDY0bDAtNzUuM2MxOS45LTIyLjUgMzItNTIuMiAzMi04NC43bDAtMzJjMC0yNi43LTcuMy01MS42LTE5LjktNzMuMSAxMS4xLTQuNSAyMy4yLTYuOSAzNS45LTYuOSA1MyAwIDk2IDQzIDk2IDk2bDAgMzJjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgNTYuNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMTIuMyAwLTIzLjYtNC42LTMyLjEtMTIuMyAwLTEuMiAuMS0yLjUgLjEtMy43ek00MTYgMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6Il19LHBodD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtYmluYXJ5IixpY29uOls0NDgsNTEyLFtdLCJlNjliIiwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xNDQgNGMtMjQuMyAwLTQ0IDE5LjctNDQgNDRsMCA0OGMwIDI0LjMgMTkuNyA0NCA0NCA0NGwzMiAwYzI0LjMgMCA0NC0xOS43IDQ0LTQ0bDAtNDhjMC0yNC4zLTE5LjctNDQtNDQtNDRsLTMyIDB6bS00IDQ0YzAtMi4yIDEuOC00IDQtNGwzMiAwYzIuMiAwIDQgMS44IDQgNGwwIDQ4YzAgMi4yLTEuOCA0LTQgNGwtMzIgMGMtMi4yIDAtNC0xLjgtNC00bDAtNDh6bTE0MC00NGMtMTEgMC0yMCA5LTIwIDIwIDAgOS43IDYuOSAxNy43IDE2IDE5LjZsMCA3Ni40YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOTZjMC0xMS05LTIwLTIwLTIwbC0xNiAwek0xMzIgMjk2YzAgOS43IDYuOSAxNy43IDE2IDE5LjZsMCA3Ni40YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOTZjMC0xMS05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6bTk2IDI0bDAgNDhjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMzIgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLTQ4YzAtMjQuMy0xOS43LTQ0LTQ0LTQ0bC0zMiAwYy0yNC4zIDAtNDQgMTkuNy00NCA0NHptNDQtNGwzMiAwYzIuMiAwIDQgMS44IDQgNGwwIDQ4YzAgMi4yLTEuOCA0LTQgNGwtMzIgMGMtMi4yIDAtNC0xLjgtNC00bDAtNDhjMC0yLjIgMS44LTQgNC00eiJdfSxhaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFza3MtdGhlYXRlciIsaWNvbjpbNTc2LDUxMixbMTI3OTE3LCJ0aGVhdGVyLW1hc2tzIl0sImY2MzAiLCJNLTUgMTE4TDIzLjUgMjc5LjdjMTQgNzkuNSA3Ni4zIDE0MS44IDE1NS44IDE1NS44bDEyLjcgMi4yYy0xNi41LTI4LjYtMjcuMS02MC43LTMwLjYtOTQuNWwtMjQuMSA0LjNjLTkuNyAxLjctMTguOC01LjgtMTYuOS0xNS41IDQuOC0yNC43IDE5LjEtNDYuNiAzOS43LTYwLjlsMC03NC42Yy0xLjQgLjgtMyAxLjMtNC43IDEuNmwtNjMgMTEuMWMtOC43IDEuNS0xNy4zLTQuNC0xNS45LTEzLjEgMy4xLTE5LjYgMTguNC0zNiAzOS4xLTM5LjcgMTcuMi0zIDMzLjkgMy41IDQ0LjYgMTUuOGwwLTIyLjdjMC0yMi41IDYuOS01Mi40IDMyLjMtNzMuNCAyNi0yMS41IDY3LjctNDMuOSAxMjQuOS01NC4yLTMwLjUtMTYuMy04Ni4zLTMyLTE2My44LTE4LjQtODAuMyAxNC4yLTEyOCA1MC4xLTE1MC4xIDc2LjEtOSAxMC41LTEwLjggMjQuOS04LjQgMzguNXpNMjA4IDEzOC43bDAgMTc0LjhjMCA4MC43IDUwLjUgMTUyLjkgMTI2LjQgMTgwLjRMMzYyLjEgNTA0YzE0LjEgNS4xIDI5LjYgNS4xIDQzLjcgMEw0MzMuNiA0OTRDNTA5LjUgNDY2LjQgNTYwIDM5NC4zIDU2MCAzMTMuNWwwLTE3NC44YzAtNi45LTIuMS0xMy44LTctMTguNi0yMi42LTIyLjUtNzguMi01Ni0xNjktNTZzLTE0Ni40IDMzLjYtMTY5IDU2Yy00LjkgNC45LTcgMTEuNy03IDE4LjZ6bTY2LjEgMTg3LjFjLTEuNC03IDctMTEgMTIuNy02LjYgMjYuOSAyMC42IDYwLjYgMzIuOSA5Ny4yIDMyLjlzNzAuMi0xMi4zIDk3LjItMzIuOWM1LjctNC40IDE0LjEtLjQgMTIuNyA2LjYtMTAuMSA1MS40LTU1LjUgOTAuMy0xMDkuOSA5MC4zcy05OS44LTM4LjgtMTA5LjktOTAuM3ptLjUtMTAxLjVDMjgxLjIgMjA1LjUgMjk5IDE5MiAzMjAgMTkyczM4LjkgMTMuNSA0NS40IDMyLjNjMi45IDguNC00LjUgMTUuNy0xMy40IDE1LjdsLTY0IDBjLTguOCAwLTE2LjMtNy40LTEzLjQtMTUuN3pNNDgwIDI0MGwtNjQgMGMtOC44IDAtMTYuMy03LjQtMTMuNC0xNS43IDYuNS0xOC44IDI0LjQtMzIuMyA0NS40LTMyLjNzMzguOSAxMy41IDQ1LjQgMzIuM2MyLjkgOC40LTQuNSAxNS43LTEzLjQgMTUuN3oiXX0saGh0PWFpZSxtaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FydC1wbHVzIixpY29uOls2NDAsNTEyLFtdLCJmMjE3IiwiTTAgOEMwLTUuMyAxMC43LTE2IDI0LTE2bDQ1LjMgMGMyNy4xIDAgNTAuMyAxOS40IDU1LjEgNDZsLjQgMiA0MTIuNyAwYzIwIDAgMzUuMSAxOC4yIDMxLjQgMzcuOUw1MzcuOCAyMzUuOGMtNS43IDMwLjMtMzIuMSA1Mi4yLTYyLjkgNTIuMmwtMzAzLjYgMCA1LjEgMjguM2MyLjEgMTEuNCAxMiAxOS43IDIzLjYgMTkuN0w0NTYgMzM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNTUuOSAwYy0zNC44IDAtNjQuNi0yNC45LTcwLjgtNTkuMUw3Ny4yIDM4LjZjLS43LTMuOC00LTYuNi03LjktNi42TDI0IDMyQzEwLjcgMzIgMCAyMS4zIDAgOHpNMTYwIDQ2NGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0yMjQgMGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0zMzYgNzguNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMy42LTMzLjYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMy42IDAgMCAzMy42YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMy42IDMzLjYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzMuNiAwIDAtMzMuNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sYTc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZHMtYXNsLWludGVycHJldGluZyIsaWNvbjpbNjQwLDUxMixbImFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nIiwiYXNsLWludGVycHJldGluZyIsImhhbmRzLWFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nIl0sImYyYTMiLCJNMTU2LjYgNDYuM2M3LjktMTUuOCAxLjUtMzUtMTQuMy00Mi45cy0zNS0xLjUtNDIuOSAxNC4zTDEzLjUgMTg5LjRDNC42IDIwNy4yIDAgMjI2LjggMCAyNDYuN0wwIDI1NmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGw4MCAwIDAtLjNjMzUuMi0yLjcgNjUuNC0yMi44IDgyLjEtNTEuNyA4LjgtMTUuMyAzLjYtMzQuOS0xMS43LTQzLjdzLTM0LjktMy42LTQzLjcgMTEuN2MtNyAxMi0xOS45IDIwLTM0LjcgMjAtMjIuMSAwLTQwLTE3LjktNDAtNDBzMTcuOS00MCA0MC00MGMxNC44IDAgMjcuNyA4IDM0LjcgMjAgOC44IDE1LjMgMjguNCAyMC41IDQzLjcgMTEuN3MyMC41LTI4LjQgMTEuNy00My43Yy0xMi44LTIyLjEtMzMuNi0zOS4xLTU4LjQtNDcuMWw4MC44LTIyYzE3LTQuNiAyNy4xLTIyLjIgMjIuNS0zOS4zcy0yMi4yLTI3LjEtMzkuMy0yMi41bC0xMDAuNyAyNy41IDgxLjYtNjhjMTMuNi0xMS4zIDE1LjQtMzEuNSA0LjEtNDUuMVMyNDkuMS0zLjkgMjM1LjUgNy40bC0xMDEuOSA4NC45IDIzLTQ2ek00ODMuNCA0NjUuN2MtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDg1LjktMTcxLjdjOC45LTE3LjggMTMuNS0zNy40IDEzLjUtNTcuMmwwLTkuM2MwLTcwLjctNTcuMy0xMjgtMTI4LTEyOGwtODAgMCAwIC4zYy0zNS4yIDIuNy02NS40IDIyLjgtODIuMSA1MS43LTguOSAxNS4zLTMuNiAzNC45IDExLjcgNDMuN3MzNC45IDMuNiA0My43LTExLjdjNy0xMiAxOS45LTIwIDM0LjctMjAgMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBjLTE0LjggMC0yNy43LTgtMzQuNy0yMC04LjktMTUuMy0yOC40LTIwLjUtNDMuNy0xMS43cy0yMC41IDI4LjQtMTEuNyA0My43YzEyLjggMjIuMSAzMy42IDM5LjEgNTguNCA0Ny4xbC04MC44IDIyYy0xNy4xIDQuNi0yNy4xIDIyLjItMjIuNSAzOS4zczIyLjIgMjcuMSAzOS4zIDIyLjVsMTAwLjctMjcuNS04MS42IDY4Yy0xMy42IDExLjMtMTUuNCAzMS41LTQuMSA0NS4xczMxLjUgMTUuNCA0NS4xIDQuMWwxMDEuOS04NC45LTIzIDQ2eiJdfSxnaHQ9YTcseGh0PWE3LGJodD1hNyx2aHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGFibGUtY2VsbHMtcm93LXVubG9jayIsaWNvbjpbNjQwLDUxMixbXSwiZTY5MSIsIk0yNTYgMjI0bDAgMTkyIDY0IDAgMC0xOTItNjQgMHptMjU2LTc5Yy00Ni43IDUuOC04NS42IDM2LjgtMTAyLjcgNzlsLTI1LjMgMCAwIDkwLjhjLTEwLjEgMTUuMi0xNiAzMy40LTE2IDUzLjFsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDEyOCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDY0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDl6TTEyOCAyMjRsMCAxOTIgNjQgMCAwLTE5Mi02NCAwem00MzIgNDhjLS4xLTE3LjYtMTQuNC0zMS45LTMyLTMxLjktMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MCA0NC4yIDAgNzkuOSAzNS44IDgwIDc5LjlsLTQ4IDB6Il19LHlodD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyb2NrZXQiLGljb246WzUxMiw1MTIsW10sImYxMzUiLCJNMTI4IDMyMEwyNC41IDMyMGMtMjQuOSAwLTQwLjItMjcuMS0yNy40LTQ4LjVMNTAgMTgzLjNDNTguNyAxNjguOCA3NC4zIDE2MCA5MS4yIDE2MGw5NSAwYzc2LjEtMTI4LjkgMTg5LjYtMTM1LjQgMjY1LjUtMTI0LjMgMTIuOCAxLjkgMjIuOCAxMS45IDI0LjYgMjQuNiAxMS4xIDc1LjkgNC42IDE4OS40LTEyNC4zIDI2NS41bDAgOTVjMCAxNi45LTguOCAzMi41LTIzLjMgNDEuMmwtODguMiA1Mi45Yy0yMS4zIDEyLjgtNDguNS0yLjYtNDguNS0yNy40TDE5MiAzODRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLS4xIDB6TTQwMCAxNjBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXX0sd2h0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNocmltcCIsaWNvbjpbNTEyLDUxMixbMTI5NDI0XSwiZTQ0OCIsIk03MiAzMkMzMi4yIDMyIDAgNjQuMiAwIDEwNCAwIDE0MS45IDI5LjMgMTcyLjkgNjYuNCAxNzUuOCA3Ny42IDI1Ny4yIDE0Ny40IDMyMCAyMzIgMzIwbDU2IDAgMC0xOTItMjE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0UzU4LjcgODAgNzIgODBsMzg0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNzIgMzJ6TTIyNCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNzIgMCAwLTcyLjItNjQuMS0yMi40Yy0xMi41LTQuNC0yNi4yIDIuMi0zMC42IDE0LjdzMi4yIDI2LjIgMTQuNyAzMC42bDQuNSAxLjZDMjMzIDQzMy45IDIyNCA0NDMuOSAyMjQgNDU2em0xMjggMjMuM2MzNi40LTMuMyA2OS41LTE3LjYgOTYuMS0zOS42bC04Ni41LTM0LjZjLTMgMS44LTYuMiAzLjItOS42IDQuM2wwIDY5Ljl6TTQ3Mi42IDQxNWMyNC42LTMwLjMgMzkuNC02OC45IDM5LjQtMTExIDAtMTIuMy0xLjMtMjQuMy0zLjctMzUuOUwzODIuOCAzNTUuMWMuOCAzLjQgMS4yIDcgMS4yIDEwLjYgMCA0LjYtLjcgOS0xLjkgMTMuMUw0NzIuNiA0MTV6TTMzNiAxMjhsLTE2IDAgMCAxOTIgMTguMyAwYzkuOSAwIDE5LjEgMy4yIDI2LjYgOC41bDEzMy41LTkyLjRDNDcxLjggMTcyLjYgNDA5LjEgMTI4IDMzNiAxMjh6TTE2OCAxOTJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXX0scmllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlbmdlLXNpZ24iLGljb246WzM4NCw1MTIsWzgzNzYsInRlbmdlIl0sImY3ZDciLCJNMCA1NkMwIDQyLjcgMTAuNyAzMiAyNCAzMmwzMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA4MEMxMC43IDgwIDAgNjkuMyAwIDU2ek0wIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDAgMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yNTYtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxNaHQ9cmllLGlpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZS1jaGltbmV5LW1lZGljYWwiLGljb246WzUxMiw1MTIsWyJjbGluaWMtbWVkaWNhbCJdLCJmN2YyIiwiTTIzNC4yIDguNmMxMi4zLTExLjQgMzEuMy0xMS40IDQzLjUgMEwzNjggOTIuMyAzNjggODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEwMS41IDM3LjggMzUuMWM5LjYgOSAxMi44IDIyLjkgOCAzNS4xUzQ5My4yIDI3MiA0ODAgMjcybC0xNiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4ek0yMjQgMjQ4bDAgNDAtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDAgMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC00MCA0MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDAgMCAwLTQwYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdfSx6aHQ9aWllLGtodD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2Vycy1zbGFzaCIsaWNvbjpbNjQwLDUxMixbXSwiZTA3MyIsIk03My0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMyOS43LS4zIDM5IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwzMjEuOCAyMjRjNTYuNi0xIDEwMi4yLTQ3LjIgMTAyLjItMTA0IDAtNTcuNC00Ni42LTEwNC0xMDQtMTA0LTU2LjggMC0xMDMgNDUuNi0xMDQgMTAyLjJMNzMtMjQuOXpNNTEyIDI4OGMtMTcuMiAwLTMzLjcgMy40LTQ4LjcgOS42bDE3MCAxNzBjNC4yLTUuNCA2LjctMTIuMiA2LjctMTkuNmwwLTMyYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4ek01OS45IDk3LjdjLTIxLjUgMTIuNS0zNS45IDM1LjctMzUuOSA2Mi4zIDAgMzkuOCAzMi4yIDcyIDcyIDcyIDI2LjYgMCA0OS44LTE0LjQgNjIuMy0zNS45TDU5LjkgOTcuN3pNMjUwLjIgMjg4QzE5Ni44IDMxMy45IDE2MCAzNjguNyAxNjAgNDMybDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjUwLjIgMC0xOTItMTkyek0xMjggMjg4QzU3LjMgMjg4IDAgMzQ1LjMgMCA0MTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw4Ni43IDBjLTQuMy05LjgtNi43LTIwLjYtNi43LTMybDAtMTZjMC01My4yIDIwLTEwMS44IDUyLjktMTM4LjYtMTEuNy0zLjUtMjQuMS01LjQtMzYuOS01LjR6TTYxNiAxNjBhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAweiJdfSxTaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGFwZXItcGxhbmUiLGljb246WzU3Niw1MTIsWzYxOTEzXSwiZjFkOCIsIk01MzYuNC0yNi4zYzkuOC0zLjUgMjAuNi0xIDI4IDYuM3M5LjggMTguMiA2LjMgMjhsLTE3OCA0OTYuOWMtNSAxMy45LTE4LjEgMjMuMS0zMi44IDIzLjEtMTQuMiAwLTI3LTguNi0zMi4zLTIxLjdsLTY0LjItMTU4Yy00LjUtMTEtMi41LTIzLjYgNS4yLTMyLjZsOTQuNS0xMTIuNGM1LjEtNi4xIDQuNy0xNS0uOS0yMC42cy0xNC42LTYtMjAuNi0uOUwyMjkuMiAyNzYuMWMtOS4xIDcuNi0yMS42IDkuNi0zMi42IDUuMkwzOC4xIDIxNi44Yy0xMy4xLTUuMy0yMS43LTE4LjEtMjEuNy0zMi4zIDAtMTQuNyA5LjItMjcuOCAyMy4xLTMyLjhsNDk2LjktMTc4eiJdfSxvaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9vay1hdGxhcyIsaWNvbjpbNDQ4LDUxMixbImF0bGFzIl0sImY1NTgiLCJNOTYgNTEybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtNjYuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNsMC0yODhjMC0yNi41LTIxLjUtNDgtNDgtNDhMOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2ek02NCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDAgMCA2NC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTMxMC42IDIwOEwyNzkgMjA4Yy0xLjQgMjMuMS02IDQ0LjItMTIuNiA2MS4yIDIyLjctMTIuNSAzOS40LTM0LjggNDQuMi02MS4yem0tMTczLjEgMGM0LjggMjYuNCAyMS41IDQ4LjcgNDQuMiA2MS4yLTYuNy0xNy0xMS4yLTM4LTEyLjYtNjEuMmwtMzEuNiAwem03Ni40IDU1YzQuNSA5LjYgOC4yIDEzLjggMTAuMiAxNS41IDItMS43IDUuNy01LjggMTAuMi0xNS41IDYuMi0xMy40IDExLjEtMzIuNSAxMi43LTU1bC00NS44IDBjMS42IDIyLjUgNi41IDQxLjYgMTIuNyA1NXptLTEyLjctODdsNDUuOCAwYy0xLjYtMjIuNS02LjUtNDEuNi0xMi43LTU1LTQuNS05LjYtOC4yLTEzLjgtMTAuMi0xNS41LTIgMS43LTUuNyA1LjgtMTAuMiAxNS41LTYuMiAxMy40LTExLjEgMzIuNS0xMi43IDU1em0xMDkuNSAwYy00LjgtMjYuNC0yMS41LTQ4LjctNDQuMi02MS4yIDYuNyAxNyAxMS4yIDM4IDEyLjYgNjEuMmwzMS42IDB6TTE2OSAxNzZjMS40LTIzLjEgNi00NC4yIDEyLjYtNjEuMi0yMi43IDEyLjUtMzkuNCAzNC44LTQ0LjIgNjEuMmwzMS42IDB6TTk2IDE5MmExMjggMTI4IDAgMSAxIDI1NiAwIDEyOCAxMjggMCAxIDEgLTI1NiAweiJdfSxDaHQ9b2llLExodD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YWJsZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjBjZSIsIk0yNTYgMTYwbDAgOTYgMTI4IDAgMC05Ni0xMjggMHptLTY0IDBsLTEyOCAwIDAgOTYgMTI4IDAgMC05NnpNMCAzMjBMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtOTZ6bTM4NCAwbC0xMjggMCAwIDk2IDEyOCAwIDAtOTZ6TTE5MiA0MTZsMC05Ni0xMjggMCAwIDk2IDEyOCAweiJdfSxUaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVhcnQiLGljb246WzUxMiw1MTIsWzEyODE1MywxMjgxNTQsMTI4MTU1LDEyODE1NiwxMjg0MjAsMTI5MjkzLDEyOTI5NCwxMjk1MDUsOTgyOSwxMDA4NCw2MTU3OF0sImYwMDQiLCJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDExMi4yLTEzOS45IDI0Mi41LTIxMi45IDI5OC4yLTEyLjQgOS40LTI3LjYgMTQuMS00My4xIDE0LjFzLTMwLjgtNC42LTQzLjEtMTQuMUMxMzkuOSA0MTAuMiAwIDI3OS45IDAgMTY3LjdsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6Il19LHNpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtY2hldnJvbi11cCIsaWNvbjpbNTEyLDUxMixbImNoZXZyb24tY2lyY2xlLXVwIl0sImYxMzkiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM3NyAyNzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtODctODctODcgODdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMjM5IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwzNzcgMjcxeiJdfSxfaHQ9c2llLG5pZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYXR0ZXJ5LWhhbGYiLGljb246WzY0MCw1MTIsWyJiYXR0ZXJ5LTMiXSwiZjI0MiIsIk01MjggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTQxNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQxNiAwek0xMTIgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjI0YzAgNDQuMiAzNS44IDgwIDgwIDgwbDQxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwTDExMiA2NHptNTYgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il19LEFodD1uaWUsRlY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZm9udC1hd2Vzb21lIixpY29uOls1MTIsNTEyLFs2MjUwMSw2MjY5NCwiZm9udC1hd2Vzb21lLWZsYWciLCJmb250LWF3ZXNvbWUtbG9nby1mdWxsIl0sImYyYjQiLCJNOTEuNyA5NkMxMDYuMyA4Ni44IDExNiA3MC41IDExNiA1MiAxMTYgMjMuMyA5Mi43IDAgNjQgMFMxMiAyMy4zIDEyIDUyYzAgMTYuNyA3LjggMzEuNSAyMCA0MWwwIDQxOSA2NCAwIDAtNjQgMzczLjYgMGMxNC42IDAgMjYuNC0xMS44IDI2LjQtMjYuNCAwLTMuNy0uOC03LjMtMi4zLTEwLjdMNDMyIDI3MiA0OTMuNyAxMzMuMWMxLjUtMy40IDIuMy03IDIuMy0xMC43IDAtMTQuNi0xMS44LTI2LjQtMjYuNC0yNi40TDkxLjcgOTZ6Il19LCRodD1GVixEaHQ9RlYsRWh0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmRjdWZmcyIsaWNvbjpbNTc2LDUxMixbXSwiZTRmOCIsIk0zMjAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyek0xOTIgNjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0xNTIgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTZjMCAxIC4xIDEuOSAuMiAyLjktNzQuNyAyNi4zLTEyOC4yIDk3LjUtMTI4LjIgMTgxLjEgMCAxMDYgODYgMTkyIDE5MiAxOTJzMTkyLTg2IDE5Mi0xOTJjMC04My43LTUzLjUtMTU0LjgtMTI4LjItMTgxLjEgLjEtLjkgLjItMS45IC4yLTIuOWwwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC04MCAwek02NCAzMjBhMTI4IDEyOCAwIDEgMSAyNTYgMCAxMjggMTI4IDAgMSAxIC0yNTYgMHptNDQ4IDBjMCA2Ni45LTUxLjMgMTIxLjgtMTE2LjYgMTI3LjUtMTQuMyAyMi44LTMyLjQgNDMuMS01My40IDU5LjkgMTMuNSAzIDI3LjYgNC42IDQyIDQuNiAxMDYgMCAxOTItODYgMTkyLTE5MiAwLTgzLjctNTMuNS0xNTQuOC0xMjguMi0xODEuMSAuMS0uOSAuMi0xLjkgLjItMi45bDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTgwIDBjLTEyLjMgMC0yMi40IDkuMi0yMy44IDIxLjEgMzAuMyAxOS4yIDU2LjEgNDUgNzUuMiA3NS40IDY1LjQgNS44IDExNi42IDYwLjYgMTE2LjYgMTI3LjV6TTM4NCA2NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LE5odD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYXQtY293Ym95LXNpZGUiLGljb246WzY0MCw1MTIsW10sImY4YzEiLCJNNjQwIDM4OC4zYzAgMTYuOS03LjEgMzIuMi0xOC40IDQzLjFsLTM1LTIzLjMtMjkyLjctMTk1LjFjLTM2LjEtMjQuMS03OC42LTM2LjktMTIyLTM2LjlsLTMuOSAwYy0yLjcgMC01LjQgMC04IC4xbDIyLjItMTAwYzUuNy0yNS44IDI4LjYtNDQuMSA1NS00NC4xIDEyLjIgMCAyNC4xIDQgMzMuOCAxMS4zbDQuNyAzLjVjMjYuMyAxOS43IDYyLjQgMTkuNyA4OC42IDBsNC43LTMuNWM5LjgtNy4zIDIxLjYtMTEuMyAzMy44LTExLjMgMjYuNCAwIDQ5LjMgMTguMyA1NSA0NC4xbDMzIDE0OC41QzU3NC41IDIzMi4zIDY0MCAzMDIuNiA2NDAgMzg4LjN6TTE3MS45IDIyNGMzMy45IDAgNjcuMSAxMCA5NS40IDI4LjlMNTYwIDQ0OCA1NiA0NDhjLTMwLjkgMC01Ni0yNS4xLTU2LTU2IDAtOTIuOCA3NS4yLTE2OCAxNjgtMTY4bDMuOSAweiJdfSxQaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaW5kdXN0cnkiLGljb246WzUxMiw1MTIsW10sImYyNzUiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0MTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTI3OS44YzAtMTguMi0xOS40LTI5LjctMzUuNC0yMS4xbC0xNTYuNiA4NC4zIDAtNjMuMmMwLTE4LjItMTkuNC0yOS43LTM1LjQtMjEuMUwxMjggMjE1LjQgMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdfSxJaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGluZXMtbGVhbmluZyIsaWNvbjpbMzg0LDUxMixbXSwiZTUxZSIsIk0xOTAuNCA3NC4xYzUuNi0xNi44LTMuNS0zNC45LTIwLjItNDAuNXMtMzQuOSAzLjUtNDAuNSAyMC4ybC0xMjggMzg0Yy01LjYgMTYuOCAzLjUgMzQuOSAyMC4yIDQwLjVzMzQuOS0zLjUgNDAuNS0yMC4ybDEyOC0zODR6bTcwLjktNDEuN2MtMTcuNC0yLjktMzMuOSA4LjktMzYuOCAyNi4zbC02NCAzODRjLTIuOSAxNy40IDguOSAzMy45IDI2LjMgMzYuOHMzMy45LTguOSAzNi44LTI2LjNsNjQtMzg0YzIuOS0xNy40LTguOS0zMy45LTI2LjMtMzYuOHpNMzUyIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdfSxGaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGFzc3BvcnQiLGljb246WzM4NCw1MTIsW10sImY1YWIiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek05NiA0MDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMjc4LjYgMjA4Yy00LjggMjYuNC0yMS41IDQ4LjctNDQuMiA2MS4yIDYuNy0xNyAxMS4yLTM4IDEyLjYtNjEuMmwzMS42IDB6bS0xNzMuMSAwbDMxLjYgMGMxLjQgMjMuMSA2IDQ0LjIgMTIuNiA2MS4yLTIyLjctMTIuNS0zOS40LTM0LjgtNDQuMi02MS4yem03Ni40IDU1Yy02LjItMTMuNC0xMS4xLTMyLjUtMTIuNy01NWw0NS44IDBjLTEuNiAyMi41LTYuNSA0MS42LTEyLjcgNTUtNC41IDkuNi04LjIgMTMuOC0xMC4yIDE1LjUtMi0xLjctNS43LTUuOC0xMC4yLTE1LjV6bTAtMTQyYzQuNS05LjYgOC4yLTEzLjggMTAuMi0xNS41IDIgMS43IDUuNyA1LjggMTAuMiAxNS41IDYuMiAxMy40IDExLjEgMzIuNSAxMi43IDU1bC00NS44IDBjMS42LTIyLjUgNi41LTQxLjYgMTIuNy01NXptOTYuNyA1NUwyNDcgMTc2Yy0xLjQtMjMuMS02LTQ0LjItMTIuNi02MS4yIDIyLjcgMTIuNSAzOS40IDM0LjggNDQuMiA2MS4yek0xMzcgMTc2bC0zMS42IDBjNC44LTI2LjQgMjEuNS00OC43IDQ0LjItNjEuMi02LjcgMTctMTEuMiAzOC0xMi42IDYxLjJ6bTE4MyAxNmExMjggMTI4IDAgMSAwIC0yNTYgMCAxMjggMTI4IDAgMSAwIDI1NiAweiJdfSxPaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaW5maW5pdHkiLGljb246WzY0MCw1MTIsWzg3MzQsOTg1NF0sImY1MzQiLCJNMCAyNTZjMC04OC40IDcxLjYtMTYwIDE2MC0xNjAgNTAuNCAwIDk3LjggMjMuNyAxMjggNjRsMzIgNDIuNyAzMi00Mi43YzMwLjItNDAuMyA3Ny42LTY0IDEyOC02NCA4OC40IDAgMTYwIDcxLjYgMTYwIDE2MFM1NjguNCA0MTYgNDgwIDQxNmMtNTAuNCAwLTk3LjgtMjMuNy0xMjgtNjRsLTMyLTQyLjctMzIgNDIuN2MtMzAuMiA0MC4zLTc3LjYgNjQtMTI4IDY0LTg4LjQgMC0xNjAtNzEuNi0xNjAtMTYwem0yODAgMGwtNDMuMi01Ny42Yy0xOC4xLTI0LjItNDYuNi0zOC40LTc2LjgtMzguNC01MyAwLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2YzMwLjIgMCA1OC43LTE0LjIgNzYuOC0zOC40TDI4MCAyNTZ6bTgwIDBsNDMuMiA1Ny42YzE4LjEgMjQuMiA0Ni42IDM4LjQgNzYuOCAzOC40IDUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0zMC4yIDAtNTguNyAxNC4yLTc2LjggMzguNEwzNjAgMjU2eiJdfSxCaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvbmUiLGljb246WzUxMiw1MTIsW10sImYyNGQiLCJNMjg4IDQ0OGwtMjI0IDAgMC0yMjQgNDggMCAwLTY0LTQ4IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNDgtNjQgMCAwIDQ4em0tNjQtOTZsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjI0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0eiJdfSxSaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZm9yd2FyZCIsaWNvbjpbNTc2LDUxMixbOTE5M10sImYwNGUiLCJNMzcxLjcgNDMuMUMzNjAuMSAzMiAzNDMgMjguOSAzMjguMyAzNS4yUzMwNCA1NiAzMDQgNzJsMCAxMzYuMy0xNzIuMy0xNjUuMUMxMjAuMSAzMiAxMDMgMjguOSA4OC4zIDM1LjJTNjQgNTYgNjQgNzJsMCAzNjhjMCAxNiA5LjYgMzAuNSAyNC4zIDM2LjhzMzEuOCAzLjIgNDMuNC03LjlMMzA0IDMwMy43IDMwNCA0NDBjMCAxNiA5LjYgMzAuNSAyNC4zIDM2LjhzMzEuOCAzLjIgNDMuNC03LjlsMTkyLTE4NGM3LjktNy41IDEyLjMtMTggMTIuMy0yOC45cy00LjUtMjEuMy0xMi4zLTI4LjlsLTE5Mi0xODR6Il19LEhodD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtIixpY29uOls0NDgsNTEyLFsxMDldLCI0ZCIsIk0yMi43IDMzLjRjMTMuNS00LjEgMjguMSAxLjEgMzUuOSAxMi45TDIyNCAyOTQuMyAzODkuNCA0Ni4zYzcuOC0xMS43IDIyLjQtMTcgMzUuOS0xMi45UzQ0OCA0OS45IDQ0OCA2NGwwIDM4NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI3OC4zLTEzMy40IDIwMC4xYy01LjkgOC45LTE1LjkgMTQuMi0yNi42IDE0LjJzLTIwLjctNS4zLTI2LjYtMTQuMkw2NCAxNjkuNyA2NCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0QzAgNDkuOSA5LjIgMzcuNSAyMi43IDMzLjR6Il19LHFodD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyb2FkLXNwaWtlcyIsaWNvbjpbNjQwLDUxMixbXSwiZTU2OCIsIk02NCAxMTYuOGMwLTE1LjggMjAuNS0yMiAyOS4zLTguOWw5OC43IDE0OCAwLTEzOS4yYzAtMTUuOCAyMC41LTIyIDI5LjMtOC45bDk4LjcgMTQ4IDAtMTM5LjJjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlsOTguNyAxNDggMC0xMzkuMmMwLTE1LjggMjAuNS0yMiAyOS4zLTguOUw2MDYuOCAzMDIuMmMxNC4yIDIxLjMtMS4xIDQ5LjgtMjYuNiA0OS44TDY0IDM1MiA2NCAxMTYuOHpNMzIgMzg0bDU3NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXX0sVmh0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vdW50YWluIixpY29uOls1MTIsNTEyLFsxMjc5NTZdLCJmNmZjIiwiTTI1Ni41IDBjMTQuNyAwIDI4LjIgOC4xIDM1LjIgMjFsMjE2IDQwMGM2LjcgMTIuNCA2LjQgMjcuNC0uOCAzOS41LTcuMiAxMi4xLTIwLjMgMTkuNS0zNC4zIDE5LjVsLTQzMiAwYy0xNC4xIDAtMjcuMS03LjQtMzQuMy0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDAgMi45LTQuNkMyMzEuNyA2LjIgMjQzLjYgMCAyNTYuNSAwek0xNzAuNCAyNDkuOWwyNi44IDI2LjhjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNDMuMy00My4zYzYtNiAxNC4xLTkuNCAyMi42LTkuNGw0Mi44IDAtNzIuMS0xMzMuNS04Ni4xIDE1OS40eiJdfSxVaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hlc3MiLGljb246WzUxMiw1MTIsW10sImY0MzkiLCJNMTY4IDU2bDAgNDAtNzguMSAwYy0xNC4zIDAtMjUuOSAxMS42LTI1LjkgMjUuOSAwIDQgLjkgOCAyLjcgMTEuNmwzMy40IDY2LjhjLTExLjQgMS44LTIwLjIgMTEuNy0yMC4yIDIzLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRsNS42IDAtMTMuNiAxMzYtNTYuMiA3MC4zYy01IDYuMy03LjggMTQuMS03LjggMjIuMiAwIDE5LjYgMTUuOSAzNS41IDM1LjUgMzUuNWwyNDguOSAwYzE5LjYgMCAzNS41LTE1LjkgMzUuNS0zNS41IDAtOC4xLTIuNy0xNS45LTcuOC0yMi4yTDI4OCAzODQgMjc0LjQgMjQ4IDI4MCAyNDhjMTMuMyAwIDI0LTEwLjcgMjQtMjQgMC0xMS45LTguNy0yMS45LTIwLjItMjMuN2wzMy40LTY2LjhjMS44LTMuNiAyLjctNy42IDIuNy0xMS42IDAtMTQuMy0xMS42LTI1LjktMjUuOS0yNS45bC03OC4xIDAgMC00MCAxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0UzI0NS4zIDggMjMyIDhsLTE2IDAgMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNFMxNjgtMjEuMyAxNjgtOGwwIDE2LTE2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTYgMHpNMzI1LjggMjc5LjZsOC41IDg1LjUgNDcuNCA1OS4yIDQuMiA1LjdjOS4yIDEzLjcgMTQuMSAyOS45IDE0LjEgNDYuNSAwIDEyLjctMi44IDI0LjgtNy45IDM1LjVsODMuMSAwYzIwLjMgMCAzNi44LTE2LjUgMzYuOC0zNi44IDAtNy4zLTIuMi0xNC40LTYuMi0yMC40bC0yNS44LTM4LjcgMC02NCAxMy4zLTEzLjNjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1MTIgMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTYtMzIgMCAwLTE2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzJjMCAyMi40LTEwLjIgNDIuNC0yNi4yIDU1LjZ6Il19LHI3PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlbXBlcmF0dXJlLXRocmVlLXF1YXJ0ZXJzIixpY29uOlszMjAsNTEyLFsidGVtcGVyYXR1cmUtMyIsInRoZXJtb21ldGVyLTMiLCJ0aGVybW9tZXRlci10aHJlZS1xdWFydGVycyJdLCJmMmM4IiwiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM0wxMzYgMTUyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNTYuN2MyMy41IDkuNSA0MCAzMi41IDQwIDU5LjN6Il19LGpodD1yNyxXaHQ9cjcsR2h0PXI3LFlodD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiIixpY29uOlszMjAsNTEyLFs5OF0sIjQyIiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjggMC00Ni41LTI0LjgtODcuMy02Mi0xMDkuNyAxOC43LTIyLjMgMzAtNTEgMzAtODIuMyAwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEwzMiAzMnpNMTYwIDIyNGwtOTYgMCAwLTEyOCA5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0ek02NCAyODhsMTI4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTEyOCAwIDAtMTI4eiJdfSxaaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hpZWxkLXZpcnVzIixpY29uOls1MTIsNTEyLFtdLCJlMDZjIiwiTTI1My40IDIuOUMyNDkuMiAxIDI0NC43IDAgMjQwIDBzLTkuMiAxLTEzLjQgMi45TDM4LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yIC41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMiAxNi43IDggMzYuMSA4IDUyLjggMCAxNzIuNC04Mi41IDIxMy4yLTI2NCAyMTMuNi0zNjMuMiAuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjUzLjQgMi45ek0yNDAgMTI4YzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMjIuOSAyNy43IDM0LjQgNDMuOSAxOC4yIDkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMTYuMiAxNi4yLTQuNyA0My45IDE4LjIgNDMuOSAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuOSAwLTM0LjQgMjcuNy0xOC4yIDQzLjkgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMTYuMi0xNi4yLTQzLjktNC43LTQzLjkgMTguMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTIyLjktMjcuNy0zNC40LTQzLjktMTguMi05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzE2LjItMTYuMiA0LjctNDMuOS0xOC4yLTQzLjktMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyMi45IDAgMzQuNC0yNy43IDE4LjItNDMuOS05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMTYuMiAxNi4yIDQzLjkgNC43IDQzLjktMTguMiAwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjA4IDI2NGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTg4IDQwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il19LFhodD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsaXRlY29pbi1zaWduIixpY29uOlszODQsNTEyLFtdLCJlMWQzIiwiTTEyOCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCA0Ni4zIDY0IDY0bDAgMTU3LjktMzguNiAxMWMtMTIuNyAzLjYtMjAuMSAxNi45LTE2LjUgMjkuN3MxNi45IDIwLjEgMjkuNyAxNi41TDY0IDI3MS44IDY0IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjI0IDAgMC0xNjIuNSAxMzQuNi0zOC41YzEyLjctMy42IDIwLjEtMTYuOSAxNi41LTI5LjdzLTE2LjktMjAuMS0yOS43LTE2LjVMMTI4IDIwMy42IDEyOCA2NHoiXX0sUWh0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRpY2UtZDYiLGljb246WzUxMiw1MTIsW10sImY2ZDEiLCJNMjI0LjQgOC4zQzI0NC0yLjggMjY4LTIuOCAyODcuNiA4LjNsMTc2IDk5LjdjMjAgMTEuNCAzMi40IDMyLjYgMzIuNCA1NS43bDAgMTk3LjRjMCAyMy0xMi40IDQ0LjMtMzIuNCA1NS43bC0xNzYgOTkuN2MtMTkuNiAxMS4xLTQzLjYgMTEuMS02My4xIDBsLTE3Ni05OS43QzI4LjQgNDA1LjUgMTYgMzg0LjIgMTYgMzYxLjJsMC0xOTcuNGMwLTIzIDEyLjQtNDQuMyAzMi40LTU1LjdsMTc2LTk5Ljd6TTEwMi42IDE1NS42Yy04LjgtMy4xLTE4LjggLjMtMjMuOCA4LjZzLTMuMiAxOC43IDMuNiAyNWwzLjIgMi40IDE1MC4yIDkwLjIgMCAxNDguN2MwIDExIDkgMjAgMjAgMjAgMTEgMCAyMC05IDIwLTIwbDAtMTQ4LjcgMTUwLjMtOTAuMmM5LjUtNS43IDEyLjYtMTggNi45LTI3LjRzLTE4LTEyLjUtMjcuNC02LjlsLTE0OS43IDg5LjgtMTQ5LjctODkuOC0zLjctMS43eiJdfSxLaHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ3JpcC1saW5lcy12ZXJ0aWNhbCIsaWNvbjpbMTkyLDUxMixbXSwiZjdhNSIsIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDY0IDY0em0xMjggMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0eiJdfSxsaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ29sZi1iYWxsLXRlZSIsaWNvbjpbMzg0LDUxMixbImdvbGYtYmFsbCJdLCJmNDUwIiwiTTI5OC41IDM4NC4xYzEyLjEgMS4yIDIxLjUgMTEuNSAyMS41IDIzLjlzLTkuNCAyMi42LTIxLjUgMjMuOWwtMi41IC4xLTgwIDAgMCA4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTg4LTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0IDAtMTIuNCA5LjQtMjIuNiAyMS41LTIzLjlsMi41LS4xIDIwOCAwIDIuNSAuMXpNMTkyIDBjMTA2IDAgMTkyIDg2IDE5MiAxOTIgMCA1Ny40LTI1LjIgMTA4LjgtNjUuMSAxNDRMNjUuMSAzMzZDMjUuMiAzMDAuOCAwIDI0OS40IDAgMTkyIDAgODYgODYgMCAxOTIgMHptMzIgMjQwYy03LjcgMC0xNC4yIDUuNS0xNS43IDEyLjhsLS42IDYuNGMtMS4zIDYuMy02LjIgMTEuMi0xMi41IDEyLjVsLTYuNCAuNmMtNy4zIDEuNS0xMi44IDgtMTIuOCAxNS43IDAgOC44IDcuMiAxNiAxNiAxNiAyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZ6bTY0LTY0Yy03LjcgMC0xNC4yIDUuNS0xNS43IDEyLjhsLS42IDYuNGMtMS4zIDYuMy02LjIgMTEuMi0xMi41IDEyLjVsLTYuNCAuNmMtNy4zIDEuNS0xMi44IDgtMTIuOCAxNS43IDAgOC44IDcuMiAxNiAxNiAxNiAyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZ6bS04MC0xNmMtNy43IDAtMTQuMiA1LjUtMTUuNyAxMi44bC0uNiA2LjRjLTEuMyA2LjMtNi4yIDExLjItMTIuNSAxMi41bC02LjQgLjZjLTcuMyAxLjUtMTIuOCA4LTEyLjggMTUuNyAwIDguOCA3LjIgMTYgMTYgMTYgMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC04LjgtNy4yLTE2LTE2LTE2eiJdfSxKaHQ9bGllLGVtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZXhhZ29uIixpY29uOls1NzYsNTEyLFsxMTA0M10sImYzMTIiLCJNMzMuNSAyMjAuM2MtMTIuNyAyMi4yLTEyLjcgNDkuNCAwIDcxLjVsOTYuMiAxNjguMWMxMi44IDIyLjQgMzYuNyAzNi4yIDYyLjUgMzYuMmwxOTEuNiAwYzI1LjggMCA0OS43LTEzLjggNjIuNS0zNi4ybDk2LjItMTY4LjFjMTIuNy0yMi4yIDEyLjctNDkuNCAwLTcxLjVMNDQ2LjMgNTIuMkM0MzMuNSAyOS44IDQwOS42IDE2IDM4My44IDE2TDE5Mi4yIDE2Yy0yNS44IDAtNDkuNyAxMy44LTYyLjUgMzYuMkwzMy41IDIyMC4zeiJdfSx0bXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZm9sZGVyLW9wZW4iLGljb246WzU3Niw1MTIsWzEyODE5NCwxMjg0NDksNjE3MTddLCJmMDdjIiwiTTU2IDIyNS42TDMyLjQgMjk2LjIgMzIuNCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwxMzguNyAwYzEzLjggMCAyNy4zIDQuNSAzOC40IDEyLjhsMzguNCAyOC44YzUuNSA0LjIgMTIuMyA2LjQgMTkuMiA2LjRsMTE3LjMgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2LTM2NS40IDBjLTQxLjMgMC03OCAyNi40LTkxLjEgNjUuNnpNNDc3LjggNDQ4TDk5IDQ0OGMtMzIuOCAwLTU1LjktMzIuMS00NS41LTYzLjJsNDgtMTQ0QzEwOCAyMjEuMiAxMjYuNCAyMDggMTQ3IDIwOGwzNzguOCAwYzMyLjggMCA1NS45IDMyLjEgNDUuNSA2My4ybC00OCAxNDRjLTYuNSAxOS42LTI0LjkgMzIuOC00NS41IDMyLjh6Il19LGFtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJrYWFiYSIsaWNvbjpbNTEyLDUxMixbMTI4MzMxXSwiZjY2YiIsIk0yNTYgNTEuM0w5Mi44IDExMi40IDI0Ny41IDE3MS4xYzUuNSAyLjEgMTEuNSAyLjEgMTcgMEw0MTkuMiAxMTIuNCAyNTYgNTEuM3pNMCAxMjkuM2MwLTIwIDEyLjQtMzcuOSAzMS4xLTQ0LjlsMjA4LTc4YzEwLjktNC4xIDIyLjgtNC4xIDMzLjcgMGwyMDggNzhjMTguNyA3IDMxLjEgMjQuOSAzMS4xIDQ0LjlsMCAzNi0yNTMuMiA5NmMtMS44IC43LTMuOCAuNy01LjcgMGwtMjUzLjItOTYgMC0zNnptMCAxNDBsMC01Mi43IDIzNi4xIDg5LjZjMTIuOCA0LjkgMjYuOSA0LjkgMzkuNyAwbDIzNi4xLTg5LjYgMCA1Mi43LTEyOCA0OC42IDAgNTEuMyAxMjgtNDguNiAwIDYyLjJjMCAyMC0xMi40IDM3LjktMzEuMSA0NC45bC0yMDggNzhjLTEwLjkgNC4xLTIyLjggNC4xLTMzLjcgMGwtMjA4LTc4QzEyLjQgNDIwLjcgMCA0MDIuNyAwIDM4Mi43bDAtNjIuMiAxMjggNDguNiAwLTUxLjMtMTI4LTQ4LjZ6TTIzNi4xIDQxMC4xYzEyLjggNC45IDI2LjkgNC45IDM5LjcgMGw2MC4xLTIyLjggMC01MS4zLTc3LjIgMjkuM2MtMS44IC43LTMuOCAuNy01LjcgMGwtNzcuMi0yOS4zIDAgNTEuMyA2MC4xIDIyLjh6Il19LHJtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLWhvbGRpbmciLGljb246WzU3Niw1MTIsW10sImY0YmQiLCJNNjYuNyAzODRsNDIuNS00Mi41YzI0LTI0IDU2LjYtMzcuNSA5MC41LTM3LjVMMzUyIDMwNGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIuNiAwIDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41czkuMyA0Mi44LTguNSA1NS45TDQzMy4xIDQ4NS41Yy0yMy40IDE3LjItNTEuNiAyNi41LTgwLjcgMjYuNUwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzQuNyAweiJdfSxpbXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2luZ2xlLXF1b3RlLXJpZ2h0IixpY29uOlsxOTIsNTEyLFtdLCJlODFjIiwiTTY0IDQxNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC04LTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEzNmMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtOCAweiJdfSxvbXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm90dGxlLWRyb3BsZXQiLGljb246WzMyMCw1MTIsW10sImU0YzQiLCJNODAgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTAzLjNjNjQuOSAyMC40IDExMiA4MSAxMTIgMTUyLjdsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDI4OGMwLTcxLjYgNDcuMS0xMzIuMyAxMTItMTUyLjdMMTEyIDMyQzk0LjMgMzIgODAgMTcuNyA4MCAwem04MCA0MTZjMzUuMyAwIDY0LTMyLjQgNjQtNjQgMC0yMS4yLTI4LjktNjQuNS00Ny45LTkwLjYtOC4xLTExLjEtMjQuMi0xMS4xLTMyLjMgMC0xOSAyNi4xLTQ3LjkgNjkuNC00Ny45IDkwLjYgMCAzMS42IDI4LjcgNjQgNjQgNjR6Il19LHNtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3aW5kb3ctbWluaW1pemUiLGljb246WzUxMiw1MTIsWzEyODQ2OV0sImYyZDEiLCJNMCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXX0sbm10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoZXZyb24tcmlnaHQiLGljb246WzMyMCw1MTIsWzkwMDJdLCJmMDU0IiwiTTMxMS4xIDIzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xOTIgMTkyYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDMuMiAyNTYgNzMuOSA4Ni42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJ6Il19LGxtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlZ2ciLGljb246WzM4NCw1MTIsWzEyOTM3MF0sImY3ZmIiLCJNMTkyIDQ5NkM4NiA0OTYgMCAzOTQgMCAyODggMCAxNzYgNjQgMTYgMTkyIDE2UzM4NCAxNzYgMzg0IDI4OGMwIDEwNi04NiAyMDgtMTkyIDIwOHpNMTU0LjggMTM0YzYuNS02IDctMTYuMSAxLTIyLjZzLTE2LjEtNy0yMi42LTFjLTIzLjkgMjEuOC00MS4xIDUyLjctNTIuMyA4NC4yLTExLjIgMzEuNi0xNi45IDY1LjEtMTYuOSA5My41IDAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZjMC0yNC41IDUtNTQuNCAxNS4xLTgyLjggMTAuMS0yOC41IDI1LTU0LjEgNDMuNy03MS4yeiJdfSxjaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGFuZG1hcmstZG9tZSIsaWNvbjpbNTEyLDUxMixbImxhbmRtYXJrLWFsdCJdLCJmNzUyIiwiTTI1NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIC45IDAgMS44IC4xIDIuNi04MC41IDEzLjQtMTQ0IDc2LjktMTU3LjUgMTU3LjRMNjQgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgMTYwLTUxLjIgMzguNEM0LjcgNDYwLjQgMCA0NjkuOSAwIDQ4MCAwIDQ5Ny43IDE0LjMgNTEyIDMyIDUxMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42TDQ0OCA0MTYgNDQ4IDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMi43IDBjLTEzLjUtODAuNC03Ny0xNDMuOS0xNTcuNS0xNTcuNCAuMS0uOSAuMS0xLjcgLjEtMi42IDAtMTcuNy0xNC4zLTMyLTMyLTMyem04MCAyNTZsNjQgMCAwIDE2MC02NCAwIDAtMTYwek0yMjQgNDE2bDAtMTYwIDY0IDAgMCAxNjAtNjQgMHpNMTEyIDI1Nmw2NCAwIDAgMTYwLTY0IDAgMC0xNjB6Il19LGNtdD1jaWUsZG10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Indvcm0iLGljb246WzQ0OCw1MTIsW10sImU1OTkiLCJNMjI0IDk2YzAtNTMgNDMtOTYgOTYtOTZsMzguNCAwQzQwNy45IDAgNDQ4IDQwLjEgNDQ4IDg5LjZMNDQ4IDM3NmMwIDc1LjEtNjAuOSAxMzYtMTM2IDEzNlMxNzYgNDUxLjEgMTc2IDM3NmwwLTgwYzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwbDAgMTY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4UzAgNDkwLjUgMCA0NjRMMCAyOTZjMC03NS4xIDYwLjktMTM2IDEzNi0xMzZzMTM2IDYwLjkgMTM2IDEzNmwwIDgwYzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC0xODQtMzIgMGMtNTMgMC05Ni00My05Ni05NnptMTQ0LThhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXX0sZm10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItaW5qdXJlZCIsaWNvbjpbNDQ4LDUxMixbXSwiZjcyOCIsIk0yNDIuNyA4MEwzMzQgODBjLTEwLjctMjQuNi0yOS41LTQ0LjktNTIuOS01Ny42TDI0Mi43IDgwem0tLjktNzAuN0MyMzYgOC40IDIzMCA4IDIyNCA4IDE3NC44IDggMTMyLjUgMzcuNiAxMTQgODBsODAuNiAwIDQ3LjEtNzAuN3pNMjI0IDI0OGM2Ni4zIDAgMTIwLTUzLjcgMTIwLTEyMGwtMjQwIDBjMCA2Ni4zIDUzLjcgMTIwIDEyMCAxMjB6TTk4LjcgMzQxLjhDNDkuMyAzNzAuMiAxNiA0MjMuNSAxNiA0ODQuNiAxNiA0OTkuNyAyOC4zIDUxMiA0My40IDUxMmwxNTEgMC05NS44LTE3MC4yem00NS4xLTE3LjdsNDIuNyA3NS45IDg1LjUgMGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDExLjQtMi40IDIyLjItNi43IDMybDU5LjIgMGMxNS4xIDAgMjcuNC0xMi4zIDI3LjQtMjcuNCAwLTkwLjktNzMuNy0xNjQuNi0xNjQuNi0xNjQuNmwtODYuOSAwYy0xMi42IDAtMjQuOSAxLjQtMzYuNyA0LjF6TTIxMy41IDQ0OGwzNiA2NCAyMi41IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTU4LjUgMHoiXX0sdW10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN0cmlrZXRocm91Z2giLGljb246WzUxMiw1MTIsW10sImYwY2MiLCJNOTYgMTU3LjVDOTYgODguMiAxNTIuMiAzMiAyMjEuNSAzMkwzNjggMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMjIxLjUgOTZjLTM0IDAtNjEuNSAyNy41LTYxLjUgNjEuNSAwIDMxIDIzLjEgNTcuMiA1My45IDYxbDQ0LjEgNS41IDIyMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4My4xIDBDMTAzIDIwNC42IDk2IDE4MS44IDk2IDE1Ny41ek0zNDkuMiAzMzZsNjUuNSAwYy45IDYuMSAxLjQgMTIuMiAxLjQgMTguNSAwIDY5LjMtNTYuMiAxMjUuNS0xMjUuNSAxMjUuNUwxNDQgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE0Ni41IDBjMzQgMCA2MS41LTI3LjUgNjEuNS02MS41IDAtNi40LTEtMTIuNy0yLjgtMTguNXoiXX0scG10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJsb2ciLGljb246WzUxMiw1MTIsW10sImY3ODEiLCJNMjI0IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0IDE0NS44IDAgMjY0IDExOC4yIDI2NCAyNjQgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMTkuMy05Ni43LTIxNi0yMTYtMjE2LTEzLjMgMC0yNC0xMC43LTI0LTI0ek04MCA5NmMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDIyNGMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4LTIxLjUtNDgtNDgtNDhjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNiA3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NFMyNTUuNSA1MTIgMTc2IDUxMiAzMiA0NDcuNSAzMiAzNjhsMC0yMjRjMC0yNi41IDIxLjUtNDggNDgtNDh6bTE2OCAwYzkyLjggMCAxNjggNzUuMiAxNjggMTY4IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNjYuMy01My43LTEyMC0xMjAtMTIwLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LGhtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdG9wd2F0Y2gtMjAiLGljb246WzQ0OCw1MTIsW10sImUwNmYiLCJNMTY4LjUgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMjUuM2MtMTA4IDExLjktMTkyIDEwMy41LTE5MiAyMTQuNyAwIDExOS4zIDk2LjcgMjE2IDIxNiAyMTZzMjE2LTk2LjcgMjE2LTIxNmMwLTM5LjgtMTAuOC03Ny4xLTI5LjYtMTA5LjJsMjguMi0yOC4yYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0yMy40IDIzLjRjLTMyLjktMzAuMi03NS4yLTUwLjMtMTIyLTU1LjVsMC0yNS4zIDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwem0tNjAgMjQwYzAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJsMCAzLjhjMCAxMS43LTMuMiAyMy4xLTkuMyAzM2wtNDMuOCA3MS4yIDMzLjEgMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTU3LjggMGMtMTQuNSAwLTI2LjItMTEuNy0yNi4yLTI2LjIgMC00LjkgMS4zLTkuNiAzLjktMTMuOGw1Ni43LTkyLjFjMi4yLTMuNiAzLjQtNy44IDMuNC0xMi4xbDAtMy44YzAtNi42LTUuNC0xMi0xMi0xMnMtMTIgNS40LTEyIDEyYzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMHptMTgwLTUyYzI4LjcgMCA1MiAyMy4zIDUyIDUybDAgOTZjMCAyOC43LTIzLjMgNTItNTIgNTJzLTUyLTIzLjMtNTItNTJsMC05NmMwLTI4LjcgMjMuMy01MiA1Mi01MnptLTEyIDUybDAgOTZjMCA2LjYgNS40IDEyIDEyIDEyczEyLTUuNCAxMi0xMmwwLTk2YzAtNi42LTUuNC0xMi0xMi0xMnMtMTIgNS40LTEyIDEyeiJdfSxtbXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJ1Y2stcGlja3VwIixpY29uOls2NDAsNTEyLFsxMjg3NjNdLCJmNjNjIiwiTTM2My44IDk2bDU3LjYgOTYtMTMzLjQgMCAwLTk2IDc1LjggMHpNNDk2IDE5Mkw0MTguNiA2My4xQzQwNy4xIDQzLjggMzg2LjIgMzIgMzYzLjggMzJMMjU2IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDEyOC0xNDQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMi40IDBjLS4yIDIuNi0uNCA1LjMtLjQgOCAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bDE2MC43IDBjLS4yIDIuNi0uNCA1LjMtLjQgOCAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bDMyLjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwek0xMTIgMzkyYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6bTM3Ni00MGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il19LGRpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzZWVkbGluZyIsaWNvbjpbNTEyLDUxMixbMTI3NzkzLCJzcHJvdXQiXSwiZjRkOCIsIk01MTIgMzJDNTEyIDE0MC4xIDQzNS40IDIzMC4zIDMzMy42IDI1MS40IDMyNS43IDE5My4zIDI5OS42IDE0MSAyNjEuMSAxMDAuNSAzMDEuMiA0MCAzNjkuOSAwIDQ0OCAwbDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjRsMzIgMGMxMjMuNyAwIDIyNCAxMDAuMyAyMjQgMjI0bDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwQzEwMC4zIDMyMCAwIDIxOS43IDAgOTZ6Il19LGdtdD1kaWUsZmllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyYW5zZ2VuZGVyIixpY29uOls1NzYsNTEyLFs5ODk1LCJ0cmFuc2dlbmRlci1hbHQiXSwiZjIyNSIsIk0xMjgtMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMOTcuOSAzMiAxMzYgNzAuMSAxNTEgNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0xNSAxNSAxNC4yIDE0LjJjMjcuOS0yMy44IDY0LjItMzguMiAxMDMuOC0zOC4yIDM2LjcgMCA3MC42IDEyLjQgOTcuNiAzMy4yTDQ2Ni43IDMyIDQ0OCAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOC43LTg0LjQgODQuNGMxMyAyMy4xIDIwLjQgNDkuOSAyMC40IDc4LjMgMCA3Ny40LTU1IDE0Mi0xMjggMTU2LjhsMCAzNS4yIDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTM1LjJjLTczLTE0LjgtMTI4LTc5LjQtMTI4LTE1Ni44IDAtMzEuNCA5LTYwLjcgMjQuNy04NS40bC0xNi43LTE2LjctMTUgMTVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMTUtMTUtMzguMS0zOC4xIDAgMzAuMWMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDExMy43IDAgOTZMMCAwQzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDB6TTI4OCAzMzZhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAxIDAgMCAxOTJ6Il19LHhtdD1maWUsYm10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN0YXItaGFsZiIsaWNvbjpbNTc2LDUxMixbNjE3MzFdLCJmMDg5IiwiTTMwNC4xIDcuNmMwLTExLjEtNy42LTIwLjctMTguNC0yMy4zcy0yMS45IDIuNS0yNyAxMi40TDE5My4xIDEyNS4zIDMzLjIgMTUwLjdjLTguOSAxLjQtMTYuMyA3LjctMTkuMSAxNi4zcy0uNSAxOCA1LjggMjQuNGwxMTQuNCAxMTQuNS0yNS4yIDE1OS45Yy0xLjQgOC45IDIuMyAxNy45IDkuNiAyMy4yczE2LjkgNi4xIDI1IDJMMjkxIDQxNi4xYzgtNC4xIDEzLjEtMTIuNCAxMy4xLTIxLjRsMC0zODcuMXoiXX0sdWllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBob3RvLWZpbG0iLGljb246WzY0MCw1MTIsWyJwaG90by12aWRlbyJdLCJmODdjIiwiTTE5MiA2NGMwLTM1LjMgMjguNy02NCA2NC02NEw1NzYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMzIwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMjI0ek0zMjAgOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTU2LjUgMTEuNUM0NzIuMSAxMDAuNCA0NjQuNCA5NiA0NTYgOTZzLTE2LjEgNC40LTIwLjUgMTEuNWwtNTQgODguMy0xNy45LTI1LjZjLTQuNS02LjQtMTEuOC0xMC4yLTE5LjctMTAuMnMtMTUuMiAzLjgtMTkuNyAxMC4ybC01NiA4MGMtNS4xIDcuMy01LjggMTYuOS0xLjYgMjQuOFMyNzkuMSAyODggMjg4IDI4OGwyNTYgMGM4LjcgMCAxNi43LTQuNyAyMC45LTEyLjNzNC4xLTE2LjgtLjUtMjQuM2wtODgtMTQ0ek0xNDQgMTI4bDAgMTYwYzAgNjEuOSA1MC4xIDExMiAxMTIgMTEybDE5MiAwIDAgMTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw4MCAwek01MiAxOTZsMCAyNGMwIDguOCA3LjIgMTYgMTYgMTZsMjQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNGMwLTguOC03LjItMTYtMTYtMTZsLTI0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI0YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMHptMCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjRjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjRjMC04LjgtNy4yLTE2LTE2LTE2bC0yNCAweiJdfSx2bXQ9dWllLHltdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwdW1wLW1lZGljYWwiLGljb246WzMyMCw1MTIsW10sImUwNmEiLCJNOTYgMGwwIDgwIDEyOCAwIDAtMjQgNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMzMDkuMyA4IDI5NiA4bC03MiAwIDAtOGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMEMxMTAuMy0zMiA5Ni0xNy43IDk2IDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMTI4em02NCAxMjBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il19LHdtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaXJlIixpY29uOls0NDgsNTEyLFsxMjgyOTNdLCJmMDZkIiwiTTE2MC41LTI2LjRjOS4zLTcuOCAyMy03LjUgMzEuOSAuOSAxMi4zIDExLjYgMjMuMyAyNC40IDMzLjkgMzcuNCAxMy41IDE2LjUgMjkuNyAzOC4zIDQ1LjMgNjQuMiA1LjItNi44IDEwLTEyLjggMTQuMi0xNy45IDEuMS0xLjMgMi4yLTIuNyAzLjMtNC4xIDcuOS05LjggMTcuNy0yMi4xIDMwLjgtMjIuMSAxMy40IDAgMjIuOCAxMS45IDMwLjggMjIuMSAxLjMgMS43IDIuNiAzLjMgMy45IDQuOCAxMC4zIDEyLjQgMjQgMzAuMyAzNy43IDUyLjQgMjcuMiA0My45IDU1LjYgMTA2LjQgNTUuNiAxNzYuNiAwIDEyMy43LTEwMC4zIDIyNC0yMjQgMjI0UzAgNDExLjcgMCAyODhjMC05MS4xIDQxLjEtMTcwIDgwLjUtMjI1IDE5LjktMjcuNyAzOS43LTQ5LjkgNTQuNi02NS4xIDguMi04LjQgMTYuNS0xNi43IDI1LjUtMjQuMnpNMjI1LjcgNDE2YzI1LjMgMCA0Ny43LTcgNjguOC0yMSA0Mi4xLTI5LjQgNTMuNC04OC4yIDI4LjEtMTM0LjQtNC41LTktMTYtOS42LTIyLjUtMmwtMjUuMiAyOS4zYy02LjYgNy42LTE4LjUgNy40LTI0LjctLjUtMTcuMy0yMi4xLTQ5LjEtNjIuNC02NS4zLTgzLTUuNC02LjktMTUuMi04LTIxLjUtMS45LTE4LjMgMTcuOC01MS41IDU2LjgtNTEuNSAxMDQuMyAwIDY4LjYgNTAuNiAxMDkuMiAxMTMuNyAxMDkuMnoiXX0scGllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hZ25pZnlpbmctZ2xhc3MtcGx1cyIsaWNvbjpbNTEyLDUxMixbInNlYXJjaC1wbHVzIl0sImYwMGUiLCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0yMDggMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4LTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMCAwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00OCA0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwIDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il19LE1tdD1waWUsem10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZsYXNrIixpY29uOls0NDgsNTEyLFtdLCJmMGMzIiwiTTI4OCAwTDEyOCAwQzExMC4zIDAgOTYgMTQuMyA5NiAzMnMxNC4zIDMyIDMyIDMyTDEyOCAyMTUuNSA3LjUgNDI2LjNDMi42IDQzNSAwIDQ0NC43IDAgNDU0LjcgMCA0ODYuNCAyNS42IDUxMiA1Ny4zIDUxMmwzMzMuNCAwYzMxLjYgMCA1Ny4zLTI1LjYgNTcuMy01Ny4zIDAtMTAtMi42LTE5LjgtNy41LTI4LjRMMzIwIDIxNS41IDMyMCA2NGMxNy43IDAgMzItMTQuMyAzMi0zMlMzMzcuNyAwIDMyMCAwTDI4OCAwek0xOTIgMjE1LjVsMC0xNTEuNSA2NCAwIDAgMTUxLjVjMCAxMS4xIDIuOSAyMi4xIDguNCAzMS44bDQxLjYgNzIuNy0xNjQgMCA0MS42LTcyLjdjNS41LTkuNyA4LjQtMjAuNiA4LjQtMzEuOHoiXX0sa210PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFsaWduLXJpZ2h0IixpY29uOls0NDgsNTEyLFtdLCJmMDM4IiwiTTQ0OCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkwxOTIgOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6Il19LGhpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYWJsZS1jYXIiLGljb246WzUxMiw1MTIsWzEyODY3Myw1NzU1MSwidHJhbSJdLCJmN2RhIiwiTTI4OC0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE2MCAyNGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0zMiAyODhjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTM2IDAgMC05Ni4yLTE5My40IDU1LjNjLTEyLjcgMy42LTI2LTMuNy0yOS43LTE2LjVzMy43LTI2IDE2LjUtMjkuN2wyMjQtNjQgMCAwIDIyNC02NGMxMi43LTMuNiAyNiAzLjcgMjkuNyAxNi41cy0zLjcgMjYtMTYuNSAyOS43bC0yMDYuNiA1OSAwIDEwOS45IDEzNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNjB6bTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmw1NiAwIDAtOTYtNTYgMHptMTg0IDk2bDAtOTYtODAgMCAwIDk2IDgwIDB6bTQ4IDBsNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZsLTU2IDAgMCA5NnoiXX0sU210PWhpZSxtaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToia2l0LW1lZGljYWwiLGljb246WzUxMiw1MTIsWyJmaXJzdC1haWQiXSwiZjQ3OSIsIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNiAwIDAtMzg0LTE2IDB6bTY0IDBsMCAzODQgMjU2IDAgMC0zODQtMjU2IDB6TTQ0OCA0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTE2IDAgMCAzODQgMTYgMHpNMjI0IDE4NGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXX0sQ210PW1pZSxMbXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ3JpcC1saW5lcyIsaWNvbjpbNDQ4LDUxMixbXSwiZjdhNCIsIk0zMiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMjg4em0wLTEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxNjB6Il19LGdpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidXJnZXIiLGljb246WzUxMiw1MTIsWyJoYW1idXJnZXIiXSwiZjgwNSIsIk00OCAzODRjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwyODggMGM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTguOC03LjItMTYtMTYtMTZMNDggMzg0ek0zMiAyMDJjMCAxMi4yIDkuOSAyMiAyMiAyMkw0NTggMjI0YzEyLjIgMCAyMi05LjkgMjItMjIgMC0xNy4yLTIuNi0zNC40LTEwLjgtNDkuNS0yMi4yLTQwLjgtODIuMy0xMjAuNS0yMTMuMi0xMjAuNVM2NSAxMTEuNiA0Mi44IDE1Mi41QzM0LjYgMTY3LjYgMzIgMTg0LjggMzIgMjAyek0wIDMwNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAyNzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0yNTYgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0xMjAgMTI4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTI0OC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il19LFRtdD1naWUsX210PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNub3dtYW4iLGljb246WzY0MCw1MTIsWzk3MzEsOTkyNF0sImY3ZDAiLCJNNDAzIDIxMS43YzMyLjItMjQuOSA1My02My45IDUzLTEwNy43IDAtNzUuMS02MC45LTEzNi0xMzYtMTM2UzE4NCAyOC45IDE4NCAxMDRjMCA0My45IDIwLjggODIuOSA1MyAxMDcuNy0zMi4yIDE2LjMtNTkgNDEuOC03Ni44IDczLjFMMTEyIDI2NC4yIDExMiAyMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxOS42LTIyLjUtOS43Yy0xMi4yLTUuMi0yNi4zIC40LTMxLjUgMTIuNnMuNCAyNi4zIDEyLjYgMzEuNWMzNi4xIDE1LjUgNzUuOSAzMi41IDExOS40IDUxLjItMy45IDE0LjktNiAzMC42LTYgNDYuNyAwIDcwIDM5LjEgMTMwLjggOTYuNiAxNjEuOSA3LjkgNC4zIDE2LjkgNi4xIDI1LjkgNi4xbDEyMyAwYzkgMCAxOC0xLjggMjUuOS02LjEgNTcuNS0zMS4xIDk2LjYtOTIgOTYuNi0xNjEuOSAwLTE2LjItMi4xLTMxLjgtNi00Ni43IDQzLjUtMTguNyA4My40LTM1LjcgMTE5LjQtNTEuMiAxMi4yLTUuMiAxNy44LTE5LjMgMTIuNi0zMS41cy0xOS4zLTE3LjgtMzEuNS0xMi42bC0yMi41IDkuNyAwLTE5LjZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MC4yLTQ4LjIgMjAuNmMtMTcuOS0zMS4zLTQ0LjYtNTYuOC03Ni44LTczLjF6TTI5NiA0MTZhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMjQtMTIwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMjQ4IDgwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTM2OCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTI5Mi4yIDE1OS4zYy0yLjctNC44LTQuMi0xMC4yLTQuMi0xNS43IDAtMTcuNSAxNC4yLTMxLjYgMzEuNi0zMS42bC44IDBjMTcuNSAwIDMxLjYgMTQuMiAzMS42IDMxLjYgMCA1LjUtMS40IDEwLjktNC4yIDE1LjdMMzI3IDE5NS44Yy0zLjEgNS40LTEwLjggNS40LTEzLjkgMGwtMjAuOS0zNi42eiJdfSxBbXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG90ZWwiLGljb246WzUxMiw1MTIsWzEyNzk3Nl0sImY1OTQiLCJNMTYgMjRDMTYgMTAuNyAyNi43IDAgNDAgMEw0NzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgNDE2IDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw0MCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtNDE2LTggMEMyNi43IDQ4IDE2IDM3LjMgMTYgMjR6bTIwOCA4OGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xMjggOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptOTYgMTEybDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTM1MiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0xMTIgMjA4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTI0MC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0yODggMzg0bDQzLjggMGM5LjkgMCAxNy41LTkgMTQtMTguMi0xMy44LTM2LjEtNDguOC02MS44LTg5LjctNjEuOHMtNzUuOSAyNS43LTg5LjcgNjEuOGMtMy41IDkuMiA0LjEgMTguMiAxNCAxOC4ybDQzLjggMCAwIDgwIDY0IDAgMC04MHoiXX0sJG10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InByaW50IixpY29uOls1MTIsNTEyLFsxMjg0MjQsMTI4NDM4LDkxMTNdLCJmMDJmIiwiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDM0MS41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsNDIuNSA0Mi41YzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNsMCAzNy41LTM4NCAwIDAtODB6TTAgMjU2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDAgMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjU2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjQtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NnpNMTI4IDQxNmwwIDMyIDI1NiAwIDAtOTYtMjU2IDAgMCA2NHpNNDU2IDI3MmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdfSx4aWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidm9sbGV5YmFsbCIsaWNvbjpbNTEyLDUxMixbMTI3OTUyLCJ2b2xsZXliYWxsLWJhbGwiXSwiZjQ1ZiIsIk01MTIgMjU4LjljLTIzLjQgOC00Ny44IDEzLjEtNzIuNiAxNS4xIDUuOS05OC42LTMwLjctMTkxLjEtOTQuOS0yNTguMyA5Ny44IDM2IDE2Ny41IDEzMCAxNjcuNSAyNDAuMyAwIDEgMCAxLjkgMCAyLjl6bS01LjkgNTJjLTUuMiAyMy43LTEzLjYgNDYuMi0yNC45IDY2LjktOTQuNyA1Mi4yLTIxNCA1MC0zMDguNC0xMy42IDIxLjctMzEuMyA0OS44LTU4LjkgODMuOC04MC41IDc5LjUgNDEuNiAxNjguNSA0OS4xIDI0OS41IDI3LjF6TTI3OS43IDI0MS42Yy0zLjctODkuNy00MS43LTE3MC41LTEwMS4zLTIyOS43IDIyLjMtNy4xIDQ2LTExLjIgNzAuNS0xMS45IDkyLjUgNTUuOSAxNTAuMyAxNjAuMyAxNDIuNCAyNzMuOC0zOC0zLjItNzUuOS0xMy43LTExMS42LTMyLjN6TTEzMC41IDMyLjhDMTQ5LjEgNDkuMSAxNjUuOCA2Ny43IDE3OS45IDg4LjIgOTEuNSAxMzIuMyAyOS43IDIxMC4zIDMuNyAyOTkuNSAxLjMgMjg1LjMgMCAyNzAuOCAwIDI1NiAwIDE2MC4yIDUyLjYgNzYuNyAxMzAuNSAzMi44em03My40IDk3YzE2LjMgMzQuNSAyNi4xIDcyLjYgMjcuOSAxMTIuOC03NS44IDQ4LTEyNi44IDEyMS4zLTE0OC4zIDIwMi41LTE3LjYtMTYuMS0zMy0zNC42LTQ1LjUtNTUgMi4xLTEwOC4xIDYzLjctMjEwLjQgMTY1LjktMjYwLjN6TTI1NiA1MTJjLTQ3LjcgMC05Mi4zLTEzLTEzMC41LTM1LjcgNC44LTI0LjMgMTIuNi00OCAyMy4yLTcwLjQgODIuNCA1NC40IDE4MC44IDY4LjkgMjcxIDQ3LTQ0LjQgMzctMTAxLjUgNTkuMi0xNjMuNyA1OS4yeiJdfSxEbXQ9eGllLEVtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cmFmZmljLWxpZ2h0IixpY29uOlszMjAsNTEyLFsxMjg2NzhdLCJmNjM3IiwiTTY0LTMyQzI4LjctMzIgMC0zLjMgMCAzMkwwIDM4NGMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MHMxNjAtNzEuNiAxNjAtMTYwbDAtMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0LTMyem05NiAzOTJjMzAuOSAwIDU2IDI1LjEgNTYgNTZzLTI1LjEgNTYtNTYgNTYtNTYtMjUuMS01Ni01NiAyNS4xLTU2IDU2LTU2em01Ni0xMDRhNTYgNTYgMCAxIDEgLTExMiAwIDU2IDU2IDAgMSAxIDExMiAwek0xNjAgMTUyYTU2IDU2IDAgMSAxIDAtMTEyIDU2IDU2IDAgMSAxIDAgMTEyeiJdfSxObXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGxhbmUtY2lyY2xlLWNoZWNrIixpY29uOls2NDAsNTEyLFtdLCJlNTU1IiwiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgNzggNzEuNWMtNjkuMyAyOS0xMTggOTcuNC0xMTggMTc3LjIgMCA0OS4zIDE4LjYgOTQuMyA0OS4xIDEyOC4zTDI4OCA1MTIgMTc5LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDNTguNyAzOTYuNCA0OCAzODguNyA0OCAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMzIgMTUxLjMgMjMyIDI0ek0zNTIgNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIwMS40LTYwLjljLTcuMS01LjItMTcuMi0zLjYtMjIuNCAzLjVsLTUzIDcyLjktMjYuOC0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjZzOC45LTIuOCAxMS43LTYuNWw2NC04OGM1LjItNy4xIDMuNi0xNy4yLTMuNS0yMi4zeiJdfSwkVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VycyIsaWNvbjpbNjQwLDUxMixbXSwiZjBjMCIsIk0zMjAgMTZhMTA0IDEwNCAwIDEgMSAwIDIwOCAxMDQgMTA0IDAgMSAxIDAtMjA4ek05NiA4OGE3MiA3MiAwIDEgMSAwIDE0NCA3MiA3MiAwIDEgMSAwLTE0NHpNMCA0MTZjMC03MC43IDU3LjMtMTI4IDEyOC0xMjggMTIuOCAwIDI1LjIgMS45IDM2LjkgNS40LTMyLjkgMzYuOC01Mi45IDg1LjQtNTIuOSAxMzguNmwwIDE2YzAgMTEuNCAyLjQgMjIuMiA2LjcgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyem01MjEuMyA2NGM0LjMtOS44IDYuNy0yMC42IDYuNy0zMmwwLTE2YzAtNTMuMi0yMC0xMDEuOC01Mi45LTEzOC42IDExLjctMy41IDI0LjEtNS40IDM2LjktNS40IDcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTg2LjcgMHpNNDcyIDE2MGE3MiA3MiAwIDEgMSAxNDQgMCA3MiA3MiAwIDEgMSAtMTQ0IDB6TTE2MCA0MzJjMC04OC40IDcxLjYtMTYwIDE2MC0xNjBzMTYwIDcxLjYgMTYwIDE2MGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnoiXX0sUG10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNlcnRpZmljYXRlIixpY29uOls1NzYsNTEyLFtdLCJmMGEzIiwiTTIzOS4yLThjLTYuMS02LjItMTUtOC43LTIzLjQtNi40UzIwMC45LTUuNiAxOTguOCAyLjhMMTgzLjUgNjNjLTEuMSA0LjQtNS42IDctOS45IDUuN0wxMTMuOCA1MS45Yy04LjQtMi40LTE3LjQgMC0yMy41IDYuMXMtOC41IDE1LjEtNi4xIDIzLjVsMTYuOSA1OS44YzEuMiA0LjMtMS40IDguOC01LjcgOS45TDM1LjEgMTY2LjVjLTguNCAyLjEtMTUgOC43LTE3LjMgMTcuMXMuMiAxNy4zIDYuNCAyMy40bDQ0LjUgNDMuM2MzLjIgMy4xIDMuMiA4LjMgMCAxMS41TDI0LjMgMzA1LjFjLTYuMiA2LjEtOC43IDE1LTYuNCAyMy40czguOSAxNC45IDE3LjMgMTcuMWw2MC4yIDE1LjNjNC40IDEuMSA3IDUuNiA1LjcgOS45TDg0LjIgNDMwLjVjLTIuNCA4LjQgMCAxNy40IDYuMSAyMy41czE1LjEgOC41IDIzLjUgNi4xbDU5LjgtMTYuOWM0LjMtMS4yIDguOCAxLjQgOS45IDUuN2wxNS4zIDYwLjJjMi4xIDguNCA4LjcgMTUgMTcuMSAxNy4zczE3LjMtLjIgMjMuNC02LjRsNDMuMy00NC41YzMuMS0zLjIgOC4zLTMuMiAxMS41IDBMMzM3LjMgNTIwYzYuMSA2LjIgMTUgOC43IDIzLjQgNi40czE0LjktOC45IDE3LjEtMTcuM0wzOTMuMSA0NDljMS4xLTQuNCA1LjYtNyA5LjktNS43bDU5LjggMTYuOWM4LjQgMi40IDE3LjQgMCAyMy41LTYuMXM4LjUtMTUuMSA2LjEtMjMuNWwtMTYuOS01OS44Yy0xLjItNC4zIDEuNC04LjggNS43LTkuOWw2MC4yLTE1LjNjOC40LTIuMSAxNS04LjcgMTcuMy0xNy4xcy0uMi0xNy40LTYuNC0yMy40bC00NC41LTQzLjNjLTMuMi0zLjEtMy4yLTguMyAwLTExLjVsNDQuNS00My4zYzYuMi02LjEgOC43LTE1IDYuNC0yMy40cy04LjktMTQuOS0xNy4zLTE3LjFsLTYwLjItMTUuM2MtNC40LTEuMS03LTUuNi01LjctOS45bDE2LjktNTkuOGMyLjQtOC40IDAtMTcuNC02LjEtMjMuNXMtMTUuMS04LjUtMjMuNS02LjFMNDAzIDY4LjhjLTQuMyAxLjItOC44LTEuNC05LjktNS43TDM3Ny44IDIuOGMtMi4xLTguNC04LjctMTUtMTcuMS0xNy4zcy0xNy4zIC4yLTIzLjQgNi40TDI5NCAzNi41Yy0zLjEgMy4yLTguMyAzLjItMTEuNSAwTDIzOS4yLTh6Il19LEltdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbGFybS1jbG9jayIsaWNvbjpbNTEyLDUxMixbOTIwMF0sImYzNGUiLCJNNTA0LjQgMTMyLjVjLTQuNSAxMC41LTE4LjQgOS44LTI0LjkgLjQtMjcuOC00MC02Ni4xLTcyLjItMTExLTkyLjYtMTAuNC00LjctMTMuNy0xOC4zLTQuMS0yNC42IDE1LTkuOSAzMy0xNS43IDUyLjMtMTUuNyA1Mi42IDAgOTUuMiA0Mi42IDk1LjIgOTUuMiAwIDEzLjItMi43IDI1LjgtNy42IDM3LjN6bS00NzEuOSAuNGMtNi41IDkuNC0yMC41IDEwLjEtMjQuOS0uNC00LjktMTEuNS03LjYtMjQuMS03LjYtMzcuMyAwLTUyLjYgNDIuNi05NS4yIDk1LjItOTUuMiAxOS4zIDAgMzcuMyA1LjggNTIuMyAxNS43IDkuNiA2LjMgNi4zIDE5LjktNC4xIDI0LjYtNDQuOCAyMC40LTgzLjEgNTIuNi0xMTEgOTIuNnpNMzkwLjIgNDY3LjRDMzUyLjggNDk1LjQgMzA2LjMgNTEyIDI1NiA1MTJzLTk2LjgtMTYuNi0xMzQuMS00NC42TDg2LjYgNTAyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDM1LjItMzUuMkM0OC42IDM4NC44IDMyIDMzOC4zIDMyIDI4OCAzMiAxNjQuMyAxMzIuMyA2NCAyNTYgNjRTNDgwIDE2NC4zIDQ4MCAyODhjMCA1MC4zLTE2LjYgOTYuOC00NC42IDEzNC4ybDM1LjIgMzUuMmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtMzUuMi0zNS4yek0yODAgMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTA0YzAgNi40IDIuNSAxMi41IDcgMTdsNTYgNTZjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00OS00OSAwLTk0LjF6Il19LEZtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZWxpY29wdGVyLXN5bWJvbCIsaWNvbjpbNTEyLDUxMixbXSwiZTUwMiIsIk00NDUuNCAyMjRsNjQuNyAwQzQ5NS42IDEwOC4yIDQwMy44IDE2LjQgMjg4IDJsMCA2NC43QzM2OC40IDgwLjEgNDMxLjkgMTQzLjYgNDQ1LjQgMjI0ek01MTAgMjg4bC02NC43IDBDNDMxLjkgMzY4LjQgMzY4LjQgNDMxLjkgMjg4IDQ0NS4zbDAgNjQuN2MxMTUuOC0xNC40IDIwNy42LTEwNi4yIDIyMi0yMjJ6TTIgMjg4QzE2LjQgNDAzLjggMTA4LjIgNDk1LjYgMjI0IDUxMGwwLTY0LjdDMTQzLjYgNDMxLjkgODAuMiAzNjguNCA2Ni43IDI4OEwyIDI4OHptMC02NGw2NC43IDBDODAuMiAxNDMuNiAxNDMuNiA4MC4xIDIyNCA2Ni43TDIyNCAyQzEwOC4yIDE2LjQgMTYuNCAxMDguMiAyIDIyNHptMjA2LTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA5NiAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0LTk2IDAgMC02NHoiXX0sYmllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWNoaW1uZXktY3JhY2siLGljb246WzUxMiw1MTIsWyJob3VzZS1kYW1hZ2UiXSwiZjZmMSIsIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTA1LjYgMC0zOC40LTY0IDgwLjgtNjcuM2M3LjgtNi41IDcuNi0xOC42LS40LTI0LjlMMjE4LjYgMjYzLjJjLTE0LjYtMTEuNS0zMy44IDctMjIuOCAyMkwyNTYgMzY4IDE3MC41IDQzOS4yYy02LjEgNS03LjUgMTMuOC0zLjUgMjAuNWwzMS4zIDUyLjItODYuNCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDh6Il19LE9tdD1iaWUsQm10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1taWxpdGFyeS1wb2ludGluZyIsaWNvbjpbNTEyLDUxMixbXSwiZTU0YSIsIk0yMTQuOSAxNC4xQzIwMiAxNS4yIDE5MiAyNiAxOTIgMzkgMTkyIDUyLjggMjAzLjIgNjQgMjE3IDY0bDE1MSAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMwLjZDMzg0IDggMzc2IC43IDM2Ni43IDEuNEwyMTQuOSAxNC4xek0yMDggMTEyYzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC01LjUtLjYtMTAuOC0xLjYtMTZMMjA5LjYgOTZjLTEgNS4yLTEuNiAxMC41LTEuNiAxNnpNNDAgMjI0Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDE1MiAwIDAgODkuNCAxNjIuOC0xNjIuOGMtMTMuMy00LjMtMjcuMy02LjUtNDEuNi02LjVMNDAgMjI0em0zNDUuNyAyMC45bC0xNzEuMSAxNzEuMSAxNjkuNCAwIDAtNDYuMyA1My42IDkwLjZjMTEuMiAxOSAzNS44IDI1LjMgNTQuOCAxNC4xczI1LjMtMzUuOCAxNC4xLTU0LjhMNDMwLjMgMjkwLjhjLTExLjItMTktMjYuNi0zNC41LTQ0LjYtNDUuOXpNMTkyIDQ0OGwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzItMTkyIDB6Il19LFJtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkYXRhYmFzZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjFjMCIsIk00NDggMjA1LjhjLTE0LjggOS44LTMxLjggMTcuNy00OS41IDI0LTQ3IDE2LjgtMTA4LjcgMjYuMi0xNzQuNSAyNi4yUzk2LjQgMjQ2LjUgNDkuNSAyMjkuOGMtMTcuNi02LjMtMzQuNy0xNC4yLTQ5LjUtMjRMMCAyODhjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODBsMC04Mi4yem0wLTc3LjhsMC00OEM0NDggMzUuOCAzNDcuNyAwIDIyNCAwUzAgMzUuOCAwIDgwbDAgNDhjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODB6TTM5OC41IDM4OS44QzM1MS42IDQwNi41IDI4OS45IDQxNiAyMjQgNDE2Uzk2LjQgNDA2LjUgNDkuNSAzODkuOGMtMTcuNi02LjMtMzQuNy0xNC4yLTQ5LjUtMjRMMCA0MzJjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODBsMC02Ni4yYy0xNC44IDkuOC0zMS44IDE3LjctNDkuNSAyNHoiXX0sSG10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im5ld3NwYXBlciIsaWNvbjpbNTEyLDUxMixbMTI4MjQwXSwiZjFlYSIsIk0wIDQxNkwwIDEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRMOTYgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHpNMTYwIDEyOGwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTI0IDI0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQwIDB6bS0yNC03MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwyNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek0zNjAgMTc2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDB6Il19LHFtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG91ZC1yYWluIixpY29uOls1MTIsNTEyLFsxMjc3ODMsOTkyNl0sImY3M2QiLCJNOTYgMzIwYy01MyAwLTk2LTQzLTk2LTk2IDAtNDIuNSAyNy42LTc4LjYgNjUuOS05MS4yLTEuMy02LjctMS45LTEzLjctMS45LTIwLjggMC02MS45IDUwLjEtMTEyIDExMi0xMTIgNDMuMSAwIDgwLjUgMjQuMyA5OS4yIDYwIDE0LjctMTcuMSAzNi41LTI4IDYwLjgtMjggNDQuMiAwIDgwIDM1LjggODAgODAgMCA1LjUtLjYgMTAuOC0xLjYgMTYgLjUgMCAxLjEgMCAxLjYgMCA1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5Nkw5NiAzMjB6bTEuNiA2OC4yYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNmwzMC4yLTY4LjJ6bTE1MiAwYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNmwzMC4yLTY4LjJ6bTEyMS44IDY4LjJsMzAuMi02OC4yYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNnoiXX0sdmllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1heGltaXplIixpY29uOls0NDgsNTEyLFsiZXhwYW5kLWFycm93cy1hbHQiXSwiZjMxZSIsIk0xNjggMzJMMjQgMzJDMTAuNyAzMiAwIDQyLjcgMCA1NkwwIDIwMGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJTMzQuMSAyMjMuOCA0MSAyMTdsNDAtNDAgNzkgNzktNzkgNzktNDAtNDBjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMCAzMDIuMyAwIDMxMkwwIDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNDQgMGM5LjcgMCAxOC41LTUuOCAyMi4yLTE0LjhzMS43LTE5LjMtNS4yLTI2LjJsLTQwLTQwIDc5LTc5IDc5IDc5LTQwIDQwYy02LjkgNi45LTguOSAxNy4yLTUuMiAyNi4yUzI3MC4zIDQ4MCAyODAgNDgwbDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTQ0YzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMnMtMTkuMy0xLjctMjYuMiA1LjJsLTQwIDQwLTc5LTc5IDc5LTc5IDQwIDQwYzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJTNDQ4IDIwOS43IDQ0OCAyMDBsMC0xNDRjMC0xMy4zLTEwLjctMjQtMjQtMjRMMjgwIDMyYy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhTMjU2LjIgNjYuMSAyNjMgNzNsNDAgNDAtNzkgNzktNzktNzkgNDAtNDBjNi45LTYuOSA4LjktMTcuMiA1LjItMjYuMlMxNzcuNyAzMiAxNjggMzJ6Il19LFZtdD12aWUsVW10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxvY2F0aW9uLWFycm93IixpY29uOls1MTIsNTEyLFtdLCJmMTI0IiwiTTQ3Ny45IDc1LjVjNC41LTExLjggMS43LTI1LjItNy4yLTM0LjFzLTIyLjMtMTEuOC0zNC4xLTcuMmwtNDE2IDE2MEM3LjkgMTk5LS4zIDIxMS4yIDAgMjI0LjdzOS4xIDI1LjQgMjEuOSAyOS42bDE3Ni44IDU4LjkgNTguOSAxNzYuOGM0LjMgMTIuOCAxNi4xIDIxLjYgMjkuNiAyMS45czI1LjctNy45IDMwLjYtMjAuNWwxNjAtNDE2eiJdfSxqbXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2l0eSIsaWNvbjpbNTc2LDUxMixbMTI3OTYxXSwiZjY0ZiIsIk0zMjAgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMi00OCAwIDAtNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3Mi02NCAwIDAtNzJDOTYgMTAuNyA4NS4zIDAgNzIgMFM0OCAxMC43IDQ4IDI0bDAgNzRjLTI3LjYgNy4xLTQ4IDMyLjItNDggNjJMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDAgMC0xMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRMMzIwIDB6bTY0IDExMmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2em0tMTYgODBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMHptMTYgMTEybDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZ6bTExMi0xNmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwek0yNTYgMzA0bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZ6TTI0MCAxOTJjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMHpNMTI4IDMwNGwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2ek0xMTIgMTkyYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6Il19LFdtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ4LXJheSIsaWNvbjpbNTEyLDUxMixbXSwiZjQ5NyIsIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMzIwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0em0yODAgNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNi02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY0IDAgMCA0OC04MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDAgMCA0OC02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY0IDAgMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMCAwLTQ4IDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDAgMC00OCA2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC02NCAwIDAtMTZ6Il19LEdtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1bWJyZWxsYS1iZWFjaCIsaWNvbjpbNTEyLDUxMixbMTI3OTU4XSwiZjVjYSIsIk00OTcuNSAzNDEuMWMtNS45IDE2LjctMjUuMyAyMy00MS4xIDE1LjFsLTE3OC4yLTg5LjEtMS42IDMuMi04OC44IDE3Ny43IDI5Mi4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDg0LjIgMCAxMDMuMi0yMDYuMyAxLjYtMy4yLTE2NS40LTgyLjdjLTE1LjgtNy45LTIyLjQtMjcuMy0xMi41LTQyIDQ1LjktNjguNiAxMjQuMS0xMTMuOCAyMTIuOS0xMTMuOCAxNDEuNCAwIDI1NiAxMTQuNiAyNTYgMjU2IDAgMjkuOC01LjEgNTguNS0xNC41IDg1LjF6Il19LHlpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1yaWdodC10by1icmFja2V0IixpY29uOls1MTIsNTEyLFsic2lnbi1pbiJdLCJmMDkwIiwiTTM1MiA5Nmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTI1NmMwLTUzLTQzLTk2LTk2LTk2bC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0tOS40IDE4Mi42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wyNDIuNyAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIxMC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il19LFltdD15aWUsWm10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYWRzZXQiLGljb246WzQ0OCw1MTIsW10sImY1OTAiLCJNMjI0IDY0Yy03OSAwLTE0NC43IDU3LjMtMTU3LjcgMTMyLjcgOS4zLTMgMTkuMy00LjcgMjkuNy00LjdsMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNiAwYy01MyAwLTk2LTQzLTk2LTk2bDAtNjRDMCAxMDAuMyAxMDAuMyAwIDIyNCAwUzQ0OCAxMDAuMyA0NDggMjI0bDAgMTY4LjFjMCA2Ni4zLTUzLjggMTIwLTEyMC4xIDEyMGwtODcuOS0uMS0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAwIDQwIDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0yMC45Yy0xNC4xIDguMi0zMC41IDEyLjgtNDggMTIuOGwtMTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OGwxNiAwYzEwLjQgMCAyMC4zIDEuNiAyOS43IDQuNy0xMy03NS4zLTc4LjYtMTMyLjctMTU3LjctMTMyLjd6Il19LFhtdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcGxvdGNoIixpY29uOls1MTIsNTEyLFtdLCJmNWJjIiwiTTIwOC41IDYyLjNsMjguMS0zNi45QzI0OC44IDkuNCAyNjcuOCAwIDI4OCAwIDMxNi41IDAgMzQxLjYgMTguNyAzNDkuOCA0NmwxNy44IDU5LjRjMTAuMyAzNC40IDM2LjEgNjIgNjkuOCA3NC42bDM5LjggMTQuOWMyMC45IDcuOSAzNC44IDI3LjkgMzQuOCA1MC4yIDAgMTYuOS03LjkgMzIuOC0yMS41IDQyLjlsLTY3LjMgNTAuNWMtMjQuMyAxOC4yLTM3LjIgNDcuOS0zMy44IDc4LjFsMi41IDIyLjdjNC4zIDM4LjctMjYgNzIuNi02NSA3Mi42LTE0LjggMC0yOS4zLTUuMS00MC45LTE0LjNsLTU1LjMtNDQuM2MtNC41LTMuNi05LjMtNi43LTE0LjUtOS4yLTE1LjgtNy45LTMzLjctMTAuNC01MS03LjNMODIuNCA0NTEuOWMtMzQuNiA2LjMtNjYuNC0yMC4zLTY2LjQtNTUuNCAwLTEzLjIgNC43LTI2IDEzLjEtMzYuMmwxMS4yLTEzLjRjMTQuNi0xNy40IDIyLjYtMzkuNCAyMi42LTYyLjEgMC0xOC44LTUuNS0zNy4yLTE1LjgtNTNMOC44IDE3My41QzMuMSAxNjQuNyAwIDE1NC40IDAgMTQzLjkgMCAxMTAuNSAzMC4xIDg1LjEgNjMgOTAuN2w1MS4zIDguN2MzNS45IDYuMSA3Mi4yLTguMiA5NC4yLTM3LjF6Il19LHdpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1cC1sb25nIixpY29uOlszMjAsNTEyLFsibG9uZy1hcnJvdy1hbHQtdXAiXSwiZjMwYyIsIk0xMzcuNC0yMi42YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDEyOCAxMjhjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzAwLjkgMTYwIDI4OCAxNjBsLTY0IDAgMCAzMzZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzM2LTY0IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhTLjIgMTE0LjUgOS40IDEwNS40bDEyOC0xMjh6Il19LFFtdD13aWUsS210PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhleGFnb24tbm9kZXMiLGljb246WzQ0OCw1MTIsW10sImU2OTkiLCJNMjQ4IDEwNi42YzE4LjktOSAzMi0yOC4zIDMyLTUwLjZjMC0zMC45LTI1LjEtNTYtNTYtNTZzLTU2IDI1LjEtNTYgNTZjMCAyMi4zIDEzLjEgNDEuNiAzMiA1MC42bDAgOTguOGMtMi44IDEuMy01LjUgMi45LTggNC43bC04MC4xLTQ1LjhjMS42LTIwLjgtOC42LTQxLjYtMjcuOS01Mi44QzU3LjIgOTYgMjMgMTA1LjIgNy41IDEzMlMxLjIgMTkzIDI4IDIwOC41YzEuMyAuOCAyLjYgMS41IDQgMi4xbDAgOTAuOGMtMS4zIC42LTIuNyAxLjMtNCAyLjFDMS4yIDMxOS04IDM1My4yIDcuNSAzODBTNTcuMiA0MTYgODQgNDAwLjVjMTkuMy0xMS4xIDI5LjQtMzIgMjcuOC01Mi44bDUwLjUtMjguOWMtMTEuNS0xMS4yLTE5LjktMjUuNi0yMy44LTQxLjdMODggMzA2LjFjLTIuNi0xLjgtNS4yLTMuMy04LTQuN2wwLTkwLjhjMi44LTEuMyA1LjUtMi45IDgtNC43bDgwLjEgNDUuOGMtLjEgMS40LS4yIDIuOC0uMiA0LjNjMCAyMi4zIDEzLjEgNDEuNiAzMiA1MC42bDAgOTguOGMtMTguOSA5LTMyIDI4LjMtMzIgNTAuNmMwIDMwLjkgMjUuMSA1NiA1NiA1NnM1Ni0yNS4xIDU2LTU2YzAtMjIuMy0xMy4xLTQxLjYtMzItNTAuNmwwLTk4LjhjMi44LTEuMyA1LjUtMi45IDgtNC43bDgwLjEgNDUuOGMtMS42IDIwLjggOC42IDQxLjYgMjcuOCA1Mi44YzI2LjggMTUuNSA2MSA2LjMgNzYuNS0yMC41czYuMy02MS0yMC41LTc2LjVjLTEuMy0uOC0yLjctMS41LTQtMi4xbDAtOTAuOGMxLjQtLjYgMi43LTEuMyA0LTIuMWMyNi44LTE1LjUgMzYtNDkuNyAyMC41LTc2LjVTMzkwLjggOTYgMzY0IDExMS41Yy0xOS4zIDExLjEtMjkuNCAzMi0yNy44IDUyLjhsLTUwLjYgMjguOWMxMS41IDExLjIgMTkuOSAyNS42IDIzLjggNDEuN0wzNjAgMjA1LjljMi42IDEuOCA1LjIgMy4zIDggNC43bDAgOTAuOGMtMi44IDEuMy01LjUgMi45LTggNC42bC04MC4xLTQ1LjhjLjEtMS40IC4yLTIuOCAuMi00LjNjMC0yMi4zLTEzLjEtNDEuNi0zMi01MC42bDAtOTguOHoiXX0sT1Y9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG9zcGl0YWwiLGljb246WzU3Niw1MTIsWzEyNzk3Myw2MjU4OSwiaG9zcGl0YWwtYWx0IiwiaG9zcGl0YWwtd2lkZSJdLCJmMGY4IiwiTTEyOCA2NGMwLTM1LjMgMjguNy02NCA2NC02NEwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDAtNjR6TTI3MiAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgODAgOTYgMCAwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwek0xMjggMzY4bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTExMiAyNTZjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHpNNTEyIDM2OGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek00OTYgMjU2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6TTI2NCAxMDRsMCAzMi0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMCAwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyIDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwIDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il19LEptdD1PVixlZ3Q9T1YsdGd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1oYXJhc3NpbmciLGljb246WzU3Niw1MTIsW10sImU1NDkiLCJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNTkuNCAzMDQuNUw4OCAyNTYuOSA4OCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxNiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDQuNyA0Ny40IDU3LjFjMTEuMyAxMy42IDMxLjUgMTUuNSA0NS4xIDQuMnMxNS41LTMxLjUgNC4yLTQ1LjFsLTczLjctODguOWMtMTguMi0yMi00NS4zLTM0LjctNzMuOS0zNC43bC0zNS45IDBjLTMzLjcgMC02NC45IDE3LjctODIuMyA0Ni42bC01OC4zIDk3Yy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45ek00ODAgMjQwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTQ2NCAzNDRsMCA1OC43LTQxLjQtNDEuNGMtNy4zLTcuMy0xNy42LTEwLjYtMjcuOC05cy0xOC45IDguMS0yMy41IDE3LjNsLTQ4IDk2Yy03LjkgMTUuOC0xLjUgMzUgMTQuMyA0Mi45czM1IDEuNSA0Mi45LTE0LjNsMjguMS01Ni4zIDU0LjcgNTQuN2MxMi40IDEyLjQgMjkuMSAxOS4zIDQ2LjYgMTkuMyAzNi40IDAgNjUuOS0yOS41IDY1LjktNjUuOUw1NzYgMzQ0YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2ek0yODggNDhjMCA4LjggNy4yIDE2IDE2IDE2bDU2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnptLS44IDQ5LjdjLTcuOS00LTE3LjUtLjctMjEuNSA3LjJzLS43IDE3LjUgNy4yIDIxLjVsNDggMjRjNy45IDQgMTcuNSAuNyAyMS41LTcuMnMuNy0xNy41LTcuMi0yMS41bC00OC0yNHoiXX0sYWd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vbmV5LWJpbGwtdHJlbmQtdXAiLGljb246WzUxMiw1MTIsW10sImU1MjkiLCJNNDgwIDhjMC0xMy4zLTEwLjctMjQtMjQtMjRMMzU0LjItMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDMuOSAwLTExMS4zIDExMS4zLTk1LjEtODEuNWMtOS03LjctMjIuMi03LjctMzEuMiAwbC0xMTIgOTZjLTEwLjEgOC42LTExLjIgMjMuOC0yLjYgMzMuOHMyMy44IDExLjIgMzMuOCAyLjZsOTYuNC04Mi42IDk2LjQgODIuNmM5LjUgOC4yIDIzLjcgNy42IDMyLjYtMS4zbDEyNy0xMjcgMCA0My45YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRMNDgwIDh6TTQ4IDI1NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhMMCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNjBjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMjU2em00Ny4zIDU2Yy0zLjQgMjAuMS0xOS4yIDM2LTM5LjQgMzkuNC00LjQgLjctOC0yLjktOC03LjNsMC0zMmMwLTQuNCAzLjYtOCA4LThsMzIgMGM0LjQgMCA4LjEgMy42IDcuMyA4em0wIDE0NC4xYy43IDQuNC0yLjkgOC03LjMgOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtMzJjMC00LjQgMy42LTguMSA4LTcuMyAyMC4xIDMuNCAzNiAxOS4yIDM5LjQgMzkuNHpNNDU2IDQxNi43YzQuNC0uNyA4IDIuOSA4IDcuM2wwIDMyYzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC4xLTMuNi03LjMtOCAzLjQtMjAuMSAxOS4yLTM2IDM5LjQtMzkuNHpNNDE2LjcgMzEyYy0uNy00LjQgMi45LTggNy4zLThsMzIgMGM0LjQgMCA4IDMuNiA4IDhsMCAzMmMwIDQuNC0zLjYgOC4xLTggNy4zLTIwLjEtMy40LTM2LTE5LjItMzkuNC0zOS40ek0xOTIgMzg0YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXX0sTWllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlbi1ydWxlciIsaWNvbjpbNTEyLDUxMixbInBlbmNpbC1ydWxlciJdLCJmNWFlIiwiTTQwNCAwYzE5LjIgMCAzNy42IDcuNiA1MS4xIDIxLjJsMzUuNyAzNS43QzUwNC40IDcwLjQgNTEyIDg4LjggNTEyIDEwOHMtNy42IDM3LjYtMjEuMiA1MS4xTDQ0NS45IDIwNCAzMDggNjYuMSAzNTIuOSAyMS4yQzM2Ni40IDcuNiAzODQuOCAwIDQwNCAwek01OC45IDMxNS4xTDI3NC4xIDEwMCA0MTIgMjM3LjkgMTk2LjkgNDUzLjFjLTEwLjcgMTAuNy0yNC4xIDE4LjUtMzguNyAyMi42TDMwLjQgNTExLjFjLTguMyAyLjMtMTcuMyAwLTIzLjQtNi4ycy04LjUtMTUuMS02LjItMjMuNEwzNi40IDM1My44YzQuMS0xNC42IDExLjgtMjcuOSAyMi42LTM4Ljd6TTIyNS40IDgwLjhMODAuOCAyMjUuNCAxMS43IDE1Ni4zYy0xNS42LTE1LjYtMTUuNi00MC45IDAtNTYuNmw4OC04OGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMGw1LjkgNS45LTU2LjMgNTYuM2MtNy44IDcuOC03LjggMjAuNSAwIDI4LjNzMjAuNSA3LjggMjguMyAwbDU2LjMtNTYuMyAzNC45IDM0Ljl6TTQzMS4yIDI4Ni42bDM0LjkgMzQuOS01Ni4zIDU2LjNjLTcuOCA3LjgtNy44IDIwLjUgMCAyOC4zczIwLjUgNy44IDI4LjMgMGw1Ni4zLTU2LjMgNS45IDUuOWMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtODggODhjLTE1LjYgMTUuNi00MC45IDE1LjYtNTYuNiAwbC02OS4xLTY5LjEgMTQ0LjYtMTQ0LjZ6Il19LHJndD1NaWUsaWd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJlcGVhdCIsaWNvbjpbNTEyLDUxMixbMTI4MjU3XSwiZjM2MyIsIk00NzAuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzM1MiAxOS4xIDM1MiAzMmwwIDMyLTE2MCAwQzg2IDY0IDAgMTUwIDAgMjU2IDAgMjczLjcgMTQuMyAyODggMzIgMjg4czMyLTE0LjMgMzItMzJjMC03MC43IDU3LjMtMTI4IDEyOC0xMjhsMTYwIDAgMCAzMmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDY0LTY0ek00MS40IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOVMxNjAgNDkyLjkgMTYwIDQ4MGwwLTMyIDE2MCAwYzEwNiAwIDE5Mi04NiAxOTItMTkyIDAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0xNjAgMCAwLTMyYzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC02NCA2NHoiXX0sb2d0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvbmUiLGljb246WzY0MCw1MTIsWzEyOTQ2MF0sImY1ZDciLCJNMTk3LjQgMTYwYy0zLjkgMC03LjItMi44LTguMS02LjYtMTAuMi00Mi4xLTQ4LjEtNzMuNC05My4zLTczLjQtNTMgMC05NiA0My05NiA5NiAwIDI5LjEgMTIuOSA1NS4xIDMzLjMgNzIuNyA0LjMgMy43IDQuMyAxMC44IDAgMTQuNS0yMC40IDE3LjYtMzMuMyA0My43LTMzLjMgNzIuNyAwIDUzIDQzIDk2IDk2IDk2IDQ1LjIgMCA4My4xLTMxLjMgOTMuMy03My40IC45LTMuOCA0LjItNi42IDguMS02LjZsMjQ1LjEgMGMzLjkgMCA3LjIgMi44IDguMSA2LjYgMTAuMiA0Mi4xIDQ4LjEgNzMuNCA5My4zIDczLjQgNTMgMCA5Ni00MyA5Ni05NiAwLTI5LjEtMTIuOS01NS4xLTMzLjMtNzIuNy00LjMtMy43LTQuMy0xMC44IDAtMTQuNSAyMC40LTE3LjYgMzMuMy00My43IDMzLjMtNzIuNyAwLTUzLTQzLTk2LTk2LTk2LTQ1LjIgMC04My4xIDMxLjMtOTMuMyA3My40LS45IDMuOC00LjIgNi42LTguMSA2LjZsLTI0NS4xIDB6Il19LHppZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaXJlLWZsYW1lLWN1cnZlZCIsaWNvbjpbMzg0LDUxMixbImZpcmUtYWx0Il0sImY3ZTQiLCJNMTUzLjYgMjkuOWwxNi0yMS4zQzE3My42IDMuMiAxODAgMCAxODYuNyAwIDE5OC40IDAgMjA4IDkuNiAyMDggMjEuM2wwIDIyLjFjMCAxMy4xIDUuNCAyNS43IDE0LjkgMzQuN0wzMDcuNiAxNTlDMzU2LjQgMjA1LjYgMzg0IDI3MC4yIDM4NCAzMzcuNyAzODQgNDM0IDMwNiA1MTIgMjA5LjcgNTEyTDE5MiA1MTJDODYgNTEyIDAgNDI2IDAgMzIwbDAtMy44YzAtNDguOCAxOS40LTk1LjYgNTMuOS0xMzAuMWwzLjUtMy41YzQuMi00LjIgMTAtNi42IDE2LTYuNiAxMi41IDAgMjIuNiAxMC4xIDIyLjYgMjIuNkw5NiAyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGwwLTMuOWMwLTE4LTcuMi0zNS4zLTE5LjktNDhsLTM4LjYtMzguNmMtMjQtMjQtMzcuNS01Ni43LTM3LjUtOTAuNyAwLTI3LjcgOS01NC44IDI1LjYtNzYuOXoiXX0sc2d0PXppZSxraWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVzLXNpbXBsZSIsaWNvbjpbNDQ4LDUxMixbImJ1cy1hbHQiXSwiZjU1ZSIsIk05NiAwQzQzIDAgMCA0MyAwIDk2TDAgMzg0YzAgMjkuOCAyMC40IDU0LjkgNDggNjJsMCAzNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIgMTkyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzRjMjcuNi03LjEgNDgtMzIuMiA0OC02MmwwLTI4OGMwLTUzLTQzLTk2LTk2LTk2TDk2IDB6TTY0IDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NnpNOTYgMzIwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMjU2IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxuZ3Q9a2llLGxndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2ZW51cy1tYXJzIixpY29uOls2NDAsNTEyLFs5ODkyXSwiZjIyOCIsIk00ODAtNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyUzQ2Mi4zIDAgNDgwIDBMNTMwLjcgMCA0NzQgNTYuN2MtMjYuMy0xNS43LTU3LjEtMjQuNy05MC0yNC43LTM1LjQgMC02OC40IDEwLjUtOTYgMjguNS0yNy42LTE4LTYwLjYtMjguNS05Ni0yOC41LTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2IDAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMWwwIDM0LjktMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zNC45YzIzLjMtNC4zIDQ0LjktMTMuMSA2NC0yNS42IDI3LjYgMTggNjAuNiAyOC41IDk2IDI4LjUgOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzYgMC00MS4xLTE0LjEtNzktMzcuOC0xMDlMNTc2IDQ1LjMgNTc2IDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMNDgwLTY0ek0zMzYgMzA5LjJjMjAuMi0yOC42IDMyLTYzLjUgMzItMTAxLjJzLTExLjgtNzIuNi0zMi0xMDEuMmMxNC42LTYuOSAzMC44LTEwLjggNDgtMTAuOCA2MS45IDAgMTEyIDUwLjEgMTEyIDExMlM0NDUuOSAzMjAgMzg0IDMyMGMtMTcuMiAwLTMzLjUtMy45LTQ4LTEwLjh6TTI4OCAxNTAuM2MxMC4yIDE2LjkgMTYgMzYuNiAxNiA1Ny43cy01LjggNDAuOS0xNiA1Ny43Yy0xMC4yLTE2LjktMTYtMzYuNi0xNi01Ny43czUuOC00MC45IDE2LTU3Ljd6bS00OC00My41Yy0yMC4yIDI4LjYtMzIgNjMuNS0zMiAxMDEuMnMxMS44IDcyLjYgMzIgMTAxLjJjLTE0LjUgNi45LTMwLjggMTAuOC00OCAxMC44LTYxLjkgMC0xMTItNTAuMS0xMTItMTEyUzEzMC4xIDk2IDE5MiA5NmMxNy4yIDAgMzMuNSAzLjkgNDggMTAuOHoiXX0sY2d0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJsZW5kZXIiLGljb246WzUxMiw1MTIsW10sImY1MTciLCJNMCA1NkMwIDI1LjEgMjUuMSAwIDU2IDBMNDM3LjYgMGMyMS4zIDAgMzYuNiAyMC4zIDMwLjggNDAuOEw0NTcuMSA4MCAzNDQgODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTkuNCAwLTE4LjMgNjQtODEuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY3LjQgMC0yNy40IDk2LTI1NiAwLTkuMS05Ni02Mi45IDBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgNTZ6TTExNC4zIDE5MkwxMDAuNiA0OCA1NiA0OGMtNC40IDAtOCAzLjYtOCA4bDAgMTI4YzAgNC40IDMuNiA4IDggOGw1OC4zIDB6TTEzNiAzODRsMjQwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtMjQwIDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDB6bTEyMCA4OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il19LGRndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1IixpY29uOlszODQsNTEyLFsxMTddLCI1NSIsIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIyNGMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4bDAtMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyMjRjMCAxMDYtODYgMTkyLTE5MiAxOTJTMCAzOTQgMCAyODhMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnoiXX0sTTc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hhcmUiLGljb246WzUxMiw1MTIsWyJtYWlsLWZvcndhcmQiXSwiZjA2NCIsIk0zMDcuOCAxOC40Yy0xMiA1LTE5LjggMTYuNi0xOS44IDI5LjZsMCA4MC0xMTIgMGMtOTcuMiAwLTE3NiA3OC44LTE3NiAxNzYgMCAxMTMuMyA4MS41IDE2My45IDEwMC4yIDE3NC4xIDIuNSAxLjQgNS4zIDEuOSA4LjEgMS45IDEwLjkgMCAxOS43LTguOSAxOS43LTE5LjcgMC03LjUtNC4zLTE0LjQtOS44LTE5LjUtOS40LTguOC0yMi4yLTI2LjQtMjIuMi01Ni43IDAtNTMgNDMtOTYgOTYtOTZsOTYgMCAwIDgwYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02Ljl6Il19LGZndD1NNyxTaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGhvbmUtZmxpcCIsaWNvbjpbNTEyLDUxMixbMTI4MzgxLCJwaG9uZS1hbHQiXSwiZjg3OSIsIk0zNTEuOCAyNWM3LjgtMTguOCAyOC40LTI4LjkgNDguMS0yMy41bDUuNSAxLjVjNjQuNiAxNy42IDExOS44IDgwLjIgMTAzLjcgMTU2LjQtMzcuMSAxNzUtMTc0LjggMzEyLjctMzQ5LjggMzQ5LjgtNzYuMyAxNi4yLTEzOC44LTM5LjEtMTU2LjQtMTAzLjdsLTEuNS01LjVjLTUuNC0xOS43IDQuNy00MC4zIDIzLjUtNDguMWw5Ny4zLTQwLjVjMTYuNS02LjkgMzUuNi0yLjEgNDcgMTEuOGwzOC42IDQ3LjJjNzAuMy0zNC45IDEyNi44LTkzLjMgMTU5LjMtMTY0LjlsLTQ0LjEtMzYuMWMtMTMuOS0xMS4zLTE4LjYtMzAuNC0xMS44LTQ3TDM1MS44IDI1eiJdfSx1Z3Q9U2llLHBndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0b2lsZXQtcG9ydGFibGUiLGljb246WzMyMCw1MTIsW10sImU1ODMiLCJNMCA2NGwwIDE2IDMyMCAwIDAtMTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMEMyOC43IDAgMCAyOC43IDAgNjR6bTI0IDY0TDAgMTI4IDAgNDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04IDIyNCAwIDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzYwLTI5NiAwem0yMjQgOTZsMjQgMCAwIDk2LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il19LGhndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tcHJlZ25hbnQiLGljb246WzM4NCw1MTIsW10sImUzMWUiLCJNMTkyIDgwYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem04MCAzMjEuMmM4LjYtNC41IDE2LjgtMTAgMjQuMy0xNi41bDQtMy40YzIyLjYtMTkuNCAzNS43LTQ3LjcgMzUuNy03Ny42IDAtMzUuOS0xOC44LTY5LjEtNDkuNi04Ny42bC0zMC40LTE4LjIgMC0xLjhjMC00Ni41LTM3LjctODQuMS04NC4xLTg0LjEtMjguMSAwLTU0LjQgMTQuMS03MCAzNy41TDIxLjQgMjcwLjJjLTkuOCAxNC43LTUuOCAzNC42IDguOSA0NC40czM0LjYgNS44IDQ0LjQtOC45bDI5LTQzLjUtMzAuNSAxMTMuNWMtMi42IDkuNi0uNiAxOS45IDUuNSAyNy44Uzk0IDQxNiAxMDQgNDE2bDggMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTExMC44eiJdfSxtZ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGVzcy10aGFuIixpY29uOls1MTIsNTEyLFs2Mjc3NF0sIjNjIiwiTTQ3Ny4xIDUwLjZjNy40IDE2IC40IDM1LjEtMTUuNiA0Mi41TDEwOC40IDI1NiA0NjEuNCA0MTljMTYgNy40IDIzIDI2LjQgMTUuNiA0Mi41cy0yNi40IDIzLTQyLjUgMTUuNmwtNDE2LTE5MkM3LjMgMjc5LjggMCAyNjguNSAwIDI1NlM3LjMgMjMyLjIgMTguNiAyMjdsNDE2LTE5MmMxNi03LjQgMzUuMS0uNCA0Mi41IDE1LjZ6Il19LGdndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdXBlcnNjcmlwdCIsaWNvbjpbNTc2LDUxMixbXSwiZjEyYiIsIk01NDQgMzJjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRsLTMyIDE2QzQ0OS45IDI3LjMgNDQzLjUgNDYuNSA0NTEuNCA2Mi4zIDQ1NyA3My41IDQ2OC4zIDgwIDQ4MCA4MGwwIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMjh6TTk2IDY0Qzc4LjMgNjQgNjQgNzguMyA2NCA5NnMxNC4zIDMyIDMyIDMybDE1LjMgMCA4OS42IDEyOC04OS42IDEyOC0xNS4zIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMGMxMC40IDAgMjAuMi01LjEgMjYuMi0xMy42TDI0MCAzMTEuOCAzMjUuOCA0MzQuNGM2IDguNiAxNS44IDEzLjYgMjYuMiAxMy42bDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE1LjMgMC04OS42LTEyOCA4OS42LTEyOCAxNS4zIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTEwLjQgMC0yMC4yIDUuMS0yNi4yIDEzLjZMMjQwIDIwMC4yIDE1NC4yIDc3LjZDMTQ4LjIgNjkuMSAxMzguNCA2NCAxMjggNjRMOTYgNjR6Il19LENpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtc3RvcCIsaWNvbjpbNTEyLDUxMixbNjIwOTQsInN0b3AtY2lyY2xlIl0sImYyOGQiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAxNjBsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXX0seGd0PUNpZSxMaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3dzLXVwLWRvd24iLGljb246WzI1Niw1MTIsWyJhcnJvd3MtdiJdLCJmMDdkIiwiTTE1MC42LTIyLjZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiA3Ny4zIDk2IDQzNC43IDU0LjYgMzkzLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzYgNiAxNC4xIDkuNCAyMi42IDkuNHMxNi42LTMuNCAyMi42LTkuNGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNDEuNCA0MS40IDAtMzU3LjUgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2eiJdfSxiZ3Q9TGllLFRpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwb28tc3Rvcm0iLGljb246WzUxMiw1MTIsWyJwb28tYm9sdCJdLCJmNzVhIiwiTTI2OC45LTMxLjhjLTUuNS0uNy0xMSAxLjQtMTQuNSA1LjdzLTQuNiAxMC4xLTIuOCAxNS4zYzIuOCA4LjIgNC4zIDE2LjkgNC4zIDI2LjEgMCAyMS43LTguNSAzNy4yLTIxLjkgNDcuNi0xMy45IDEwLjgtMzQuMSAxNy01OC4xIDE3bC0yNCAwYy00OC42IDAtODggMzkuNC04OCA4OCAwIDE0LjggMy43IDI4LjggMTAuMiA0MS4xLTQyIDYuNi03NC4yIDQzLTc0LjIgODYuOSAwIDQ2LjYgMzYuMiA4NC43IDgxLjkgODcuOCAzLjEtMTIuNCA5LjktMjMuOCAxOS42LTMyLjVMMjQyLjcgMjI1YzEyLjItMTAuOSAyOC0xNyA0NC40LTE3IDQ0LjYgMCA3Ni41IDQzIDYzLjcgODUuN2wtMTIuNyA0Mi40YzI4LjggMS4yIDUyLjcgMjEuMSA1OS44IDQ3LjlsMjYuMiAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4IDAtNDMuOS0zMi4xLTgwLjMtNzQuMi04Ni45IDYuNS0xMi4zIDEwLjItMjYuMiAxMC4yLTQxLjEgMC00OC42LTM5LjQtODgtODgtODhsLTkuNCAwYy45LTUuNCAxLjQtMTAuOSAxLjQtMTYuNiAwLTQ4LjctMzYuMS04OC45LTgzLjEtOTUuMnpNMTQ0LjYgNDE2bDYxLjggMC0zMS4yIDEwNC4xYy0zLjYgMTEuOSA1LjMgMjMuOSAxNy44IDIzLjkgNC42IDAgOS0xLjcgMTIuNC00LjdMMzQ2LjUgNDEyLjljMy41LTMuMSA1LjUtNy42IDUuNS0xMi40IDAtOS4yLTcuNC0xNi42LTE2LjYtMTYuNmwtNjEuOCAwIDMxLjItMTA0LjFjMy42LTExLjktNS4zLTIzLjktMTcuOC0yMy45LTQuNiAwLTkgMS43LTEyLjQgNC43TDEzMy41IDM4Ny4xYy0zLjUgMy4xLTUuNSA3LjYtNS41IDEyLjQgMCA5LjIgNy40IDE2LjYgMTYuNiAxNi42eiJdfSx2Z3Q9VGllLHlndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2aWRlby1zbGFzaCIsaWNvbjpbNTc2LDUxMixbXSwiZjRlMiIsIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNTMtMTUzIDAtMjIyLjJjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTI5LjggNjQgNDEtMjQuOXpNMzIgMTI4bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzcuOCAwIDE1LjMtMS40IDIyLjItNEwzNiAxMDUuOGMtMi42IDYuOS00IDE0LjQtNCAyMi4yek00NjQgMzM2bDczLjUgNTguOGM0LjIgMy40IDkuNCA1LjIgMTQuOCA1LjIgMTMuMSAwIDIzLjctMTAuNiAyMy43LTIzLjdsMC0yNDAuNmMwLTEzLjEtMTAuNi0yMy43LTIzLjctMjMuNy01LjQgMC0xMC42IDEuOC0xNC44IDUuMkw0NjQgMTc2IDQ2NCAzMzZ6Il19LEJWPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS14bWFyayIsaWNvbjpbNDQ4LDUxMixbMTAwNjIsInRpbWVzLXNxdWFyZSIsInhtYXJrLXNxdWFyZSJdLCJmMmQzIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTcxIDEzNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXX0sd2d0PUJWLE1ndD1CVixfaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZC1ob2xkaW5nLWRyb3BsZXQiLGljb246WzU3Niw1MTIsWyJoYW5kLWhvbGRpbmctd2F0ZXIiXSwiZjRjMSIsIk0yNzUuNSA2LjZMMjA5LjIgMTAzQzE5OCAxMTkuMyAxOTIgMTM4LjYgMTkyIDE1OC4zbDAgMS43YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xLjdjMC0xOS44LTYtMzktMTcuMi01NS4zTDMwMC41IDYuNkMyOTcuNyAyLjUgMjkzIDAgMjg4IDBzLTkuNyAyLjUtMTIuNSA2LjZ6TTEwOS4zIDM0MS41TDY2LjcgMzg0IDMyIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAuNSAwYzI5IDAgNTcuMy05LjMgODAuNy0yNi41bDEyNi42LTkzLjNjMTcuOC0xMy4xIDIxLjYtMzguMSA4LjUtNTUuOXMtMzguMS0yMS42LTU1LjktOC41TDM5Mi42IDQxNiAyODAgNDE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE1Mi4yIDBjLTMzLjkgMC02Ni41IDEzLjUtOTAuNSAzNy41eiJdfSx6Z3Q9X2llLFJWPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Indvbi1zaWduIixpY29uOls1MTIsNTEyLFs4MzYxLCJrcnciLCJ3b24iXSwiZjE1OSIsIk02Mi40IDUzLjlDNTYuOCAzNy4xIDM4LjcgMjguMSAyMS45IDMzLjZTLTMuOSA1Ny40IDEuNyA3NC4xTDU2LjkgMjQwIDMyIDI0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MC45IDAgNTYuNyAxNzAuMWM0LjUgMTMuNSAxNy40IDIyLjQgMzEuNiAyMS45czI2LjQtMTAuNCAyOS44LTI0LjJMMjMzIDI4OCAyNzkgMjg4IDMyMSA0NTUuOGMzLjQgMTMuOCAxNS42IDIzLjcgMjkuOCAyNC4yczI3LjEtOC40IDMxLjYtMjEuOUw0MzkuMSAyODggNDgwIDI4OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQuOSAwIDU1LjMtMTY1LjljNS42LTE2LjgtMy41LTM0LjktMjAuMi00MC41cy0zNC45IDMuNS00MC41IDIwLjJsLTYyIDE4Ni4xLTU0LjYgMC00NS45LTE4My44QzI4My41IDQyIDI3MC43IDMyIDI1NiAzMnMtMjcuNSAxMC0zMSAyNC4yTDE3OSAyNDAgMTI0LjQgMjQwIDYyLjQgNTMuOXptNzggMjM0LjFsMjYuNiAwLTExLjQgNDUuNi0xNS4yLTQ1LjZ6TTI0NSAyNDBsMTEtNDQuMSAxMSA0NC4xLTIyIDB6bTEwMCA0OGwyNi42IDAtMTUuMiA0NS42LTExLjQtNDUuNnoiXX0sa2d0PVJWLFNndD1SVixDZ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToib2JqZWN0LXVuZ3JvdXAiLGljb246WzY0MCw1MTIsW10sImYyNDgiLCJNMzIgMTE5LjRDMTIuOSAxMDguNCAwIDg3LjcgMCA2NCAwIDI4LjcgMjguNyAwIDY0IDAgODcuNyAwIDEwOC40IDEyLjkgMTE5LjQgMzJsMjA5LjEgMGMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDExMy4xYzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjQgMCAzNS4zLTI4LjcgNjQtNjQgNjQtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0yMDkuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGwwLTExMy4xek0xMTkuNCA5NmMtNS42IDkuNy0xMy43IDE3LjgtMjMuNCAyMy40bDAgMTEzLjFjOS43IDUuNiAxNy44IDEzLjcgMjMuNCAyMy40bDIwOS4xIDBjNS42LTkuNyAxMy43LTE3LjggMjMuNC0yMy40bDAtMTEzLjFjLTkuNy01LjYtMTcuOC0xMy43LTIzLjQtMjMuNEwxMTkuNCA5NnpNNTQ0IDI3OS40Yy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRsLTI5LjIgMGMtNS4zLTE3LjctMTQuOC0zMy41LTI3LjQtNDYuNGwwLTE3LjYgNTYuNiAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMTEzLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNCAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTIwOS4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjQuNiA2NCAwIDAgMjQuNmM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRsMjA5LjEgMGM1LjYtOS43IDEzLjctMTcuOCAyMy40LTIzLjRsMC0xMTMuMXoiXX0sTGd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvbW1lbnQiLGljb246WzUxMiw1MTIsWzEyODQ4OSw2MTY2OV0sImYwNzUiLCJNNTEyIDI0MGMwIDEzMi41LTExNC42IDI0MC0yNTYgMjQwLTM3LjEgMC03Mi4zLTcuNC0xMDQuMS0yMC43TDMzLjUgNTEwLjFjLTkuNCA0LTIwLjIgMS43LTI3LjEtNS44Uy0yIDQ4NS44IDIuOCA0NzYuOGw0OC44LTkyLjJDMTkuMiAzNDQuMyAwIDI5NC4zIDAgMjQwIDAgMTA3LjUgMTE0LjYgMCAyNTYgMFM1MTIgMTA3LjUgNTEyIDI0MHoiXX0sVGd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhpbGwtYXZhbGFuY2hlIixpY29uOls1NzYsNTEyLFtdLCJlNTA3IiwiTTQ0MC4xIDQwMS45YzM0LjIgMjMuMSA4MS4xIDE5LjUgMTExLjQtMTAuOCAzNC40LTM0LjQgMzQuNC05MC4xIDAtMTI0LjUtMjcuOC0yNy44LTY5LjUtMzMuMS0xMDIuNi0xNi0xMS44IDYuMS0xNi40IDIwLjYtMTAuMyAzMi4zczIwLjYgMTYuNCAzMi4zIDEwLjNjMTUuMS03LjggMzQtNS4zIDQ2LjYgNy4zIDE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42cy00MC45IDE1LjYtNTYuNiAwbC04MS43LTgxLjdjMjIuMy0xNC4yIDM3LjEtMzkuMSAzNy4xLTY3LjUgMC0zMy45LTIxLjEtNjIuOS01MC45LTc0LjUgMS45LTYuOCAyLjktMTQgMi45LTIxLjUgMC00NC4yLTM1LjgtODAtODAtODAtMjcuMyAwLTUxLjUgMTMuNy02NS45IDM0LjYtNS44LTIwLTI0LjItMzQuNi00Ni4xLTM0LjYtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCA0IC41IDcuOSAxLjQgMTEuNkw0NDAuMSA0MDEuOXpNNDgwLjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMCAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek02OC43IDg3QzQzLjUgNjEuOCAuNCA3OS43IC40IDExNS4zTC40IDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwzMTYuNyAwYzM1LjYgMCA1My41LTQzLjEgMjguMy02OC4zTDY4LjcgODd6Il19LF9ndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvd3MtdG8tZXllIixpY29uOls2NDAsNTEyLFtdLCJlNGJmIiwiTTE3NiA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDM4LjEtNjMtNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUzIxLjcgNTUuNiAzMSA2NWw2MyA2My0zOC4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTk2em0wIDQwMGwwLTk2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC05NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDM4LjEgMC02MyA2M2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDYzLTYzIDAgMzguMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0em0zMTIgMjRjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0zOC4xIDYzIDYzYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNjMtNjMgMzguMSAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC05NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0ek00NjQgNTZsMCA5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw5NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zOC4xIDAgNjMtNjNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNjMgNjMgMC0zOC4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0ek0zMjAgMTIwYy01Ny4zIDAtOTkuNCAzNC0xMjUuNiA2NC4zLTIwIDIzLjEtMzIuNCA0NS44LTM3LjYgNTYuMS0yLjUgNS00LjkgOS43LTQuOSAxNS42czIuMyAxMC42IDQuOSAxNS42YzUuMiAxMC4zIDE3LjYgMzMgMzcuNiA1Ni4xIDI2LjIgMzAuMyA2OC4yIDY0LjMgMTI1LjYgNjQuM3M5OS40LTM0IDEyNS42LTY0LjNjMjAtMjMuMSAzMi40LTQ1LjggMzcuNi01Ni4xIDIuNS01IDQuOS05LjcgNC45LTE1LjZzLTIuMy0xMC42LTQuOS0xNS42Yy01LjItMTAuMy0xNy42LTMzLTM3LjYtNTYuMS0yNi4yLTMwLjMtNjguMi02NC4zLTEyNS42LTY0LjN6TTI1NiAyNTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdfSxBZ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic25vd3Bsb3ciLGljb246WzY0MCw1MTIsW10sImY3ZDIiLCJNMTI4IDE2MGwwLTk2YzAtMzUuMyAyOC43LTY0IDY0LTY0TDI5Ni40IDBjMjQuMiAwIDQ2LjQgMTMuNyA1Ny4yIDM1LjRsODcuNiAxNzUuMWM0LjQgOC45IDYuOCAxOC43IDYuOCAyOC42bDAgNTYuOSA4MCAwIDAtODBjMC00OC42IDM5LjQtODggODgtODggMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgMjA4YzAgMjIuMSAxNy45IDQwIDQwIDQwIDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy00OC42IDAtODgtMzkuNC04OC04OGwwLTgwLTYzIDBjOS41IDE2LjUgMTUgMzUuNiAxNSA1NiAwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMjI0IDBjLTYxLjkgMC0xMTItNTAuMS0xMTItMTEyIDAtMzAuNSAxMi4yLTU4LjIgMzItNzguNEw2NCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjR6bTkxLjcgMzQuOWw0My42IDI5LjEgMTEzLjIgMC04MC0xNjAtMTA0LjQgMCAwIDEwOC44IDI3LjcgMjIuMXpNNDE2IDQwMGMwLTI2LjUtMjEuNS00OC00OC00OGwtMjI0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6bS0yODAgMGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0yMTYtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yMzIgNDAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il19LCRndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGFydC1nYW50dCIsaWNvbjpbNTEyLDUxMixbXSwiZTBlNCIsIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQwMGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MDAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCA0MTZjLTguOCAwLTE2LTcuMi0xNi0xNkw2NCA2NHptOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwem02NCAxMTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEyOCAwek0zODQgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6Il19LEFpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2aWRlbyIsaWNvbjpbNTc2LDUxMixbInZpZGVvLWNhbWVyYSJdLCJmMDNkIiwiTTk2IDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw5NiA2NHpNNDY0IDMzNmw3My41IDU4LjhjNC4yIDMuNCA5LjQgNS4yIDE0LjggNS4yIDEzLjEgMCAyMy43LTEwLjYgMjMuNy0yMy43bDAtMjQwLjZjMC0xMy4xLTEwLjYtMjMuNy0yMy43LTIzLjctNS40IDAtMTAuNiAxLjgtMTQuOCA1LjJMNDY0IDE3NiA0NjQgMzM2eiJdfSxEZ3Q9QWllLEVndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVzcy1wYXduIixpY29uOlszODQsNTEyLFs5ODIzXSwiZjQ0MyIsIk0xOTItMzJjNjYuMyAwIDEyMCA1My43IDEyMCAxMjAgMCAyNy04LjkgNTEuOS0yNCA3MiAxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTAuNyAwIDI2LjcgMTYwIDU2LjIgNzAuM2M1IDYuMyA3LjggMTQuMSA3LjggMjIuMiAwIDE5LjYtMTUuOSAzNS41LTM1LjUgMzUuNUw1MS41IDUxMmMtMTkuNiAwLTM1LjUtMTUuOS0zNS41LTM1LjUgMC04LjEgMi43LTE1LjkgNy44LTIyLjJMODAgMzg0IDEwNi43IDIyNCA5NiAyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJjLTE1LjEtMjAuMS0yNC00NS0yNC03MiAwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMHoiXX0sTmd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN5bmFnb2d1ZSIsaWNvbjpbNTc2LDUxMixbMTI4MzMzXSwiZjY5YiIsIk0xNiA4MGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0bDAgMzItMTI4IDAgMC0zMnptMCAzNjhsMC0yODggMTI4IDAgMTI2LjItODQuMmMxMC43LTcuMiAyNC44LTcuMiAzNS41IDBsMTI2LjIgODQuMiAxMjggMCAwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0ek01NjAgMTEybC0xMjggMCAwLTMyYzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCAzMnpNMjI0IDM4NGwwIDgwIDEyOCAwIDAtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjR6bTY0LTE1MmE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il19LFBndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidWlsZGluZy1jaXJjbGUtY2hlY2siLGljb246WzU3Niw1MTIsW10sImU0ZDIiLCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtNzQuOSAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMyIDAgNCAuMiA1LjkgLjUgNi0yMy42IDE2LjMtNDUuNCAzMC4xLTY0LjVsLTQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNGMyNy41LTE5LjggNjAuMy0zMi40IDk2LTM1LjRMNDE2IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6bTMyIDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek01NzYgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXX0sSWd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbGVuZGFyLXBsdXMiLGljb246WzQ0OCw1MTIsW10sImYyNzEiLCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAxOTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDgtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwIDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4IDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sJGllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndoZWVsY2hhaXItbW92ZSIsaWNvbjpbNDQ4LDUxMixbIndoZWVsY2hhaXItYWx0Il0sImUyY2UiLCJNMzEyIDU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMjA1LjQgMTI0LjFjLTYuNC01LjItMTUuNi00LjctMjEuNCAxLjFsLTMzLjQgMzMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTM4LjggODBjMjktMjkgNzUuMi0zMS40IDEwNy01LjVsODEuMyA2NmMyMS40IDE3LjQgMjMuOCA0OS4yIDUuMiA2OS41bC00MS44IDQ2IDk4IDBjMzAuMyAwIDUzIDI3LjcgNDcuMSA1Ny40TDQwNy40IDQ1NC4zYy0zLjUgMTcuMy0yMC4zIDI4LjYtMzcuNyAyNS4xcy0yOC42LTIwLjMtMjUuMS0zNy43TDM2OSAzMjAgMzE2LjggMzIwYzIuMSAxMC4zIDMuMiAyMSAzLjIgMzIgMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0NDAuNCAwIDM1MiA3MS42IDE5MiAxNjAgMTkyYzYgMCAxMS45IC4zIDE3LjggMWw1MC40LTUwLjQtMjIuNy0xOC41ek0xNjAgNDQ4YTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMSAwIDAgMTkyeiJdfSxGZ3Q9JGllLE9ndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLXNoaWVsZCIsaWNvbjpbNTc2LDUxMixbXSwiZjUwNSIsIk0yMjQgMjQ4YTEyMCAxMjAgMCAxIDAgMC0yNDAgMTIwIDEyMCAwIDEgMCAwIDI0MHptLTI5LjcgNTZDOTUuOCAzMDQgMTYgMzgzLjggMTYgNDgyLjMgMTYgNDk4LjcgMjkuMyA1MTIgNDUuNyA1MTJsMjUxLjUgMEMyNjEgNDY5LjQgMjQwIDQxNC41IDI0MCAzNTYuNGwwLTMxLjFjMC03LjMgMS0xNC41IDIuOS0yMS4zbC00OC42IDB6bTI1MSAxODQuNWwtMTMuMyA2LjMgMC0xODguMSA5NiAzMiAwIDE5LjZjMCA1NS44LTMyLjIgMTA2LjUtODIuNyAxMzAuM3pNNDIxLjkgMjU5LjVsLTExMiAzNy4zYy0xMy4xIDQuNC0yMS45IDE2LjYtMjEuOSAzMC40bDAgMzEuMWMwIDc0LjQgNDMgMTQyLjEgMTEwLjIgMTczLjdsMTguNSA4LjdjNC44IDIuMiAxMCAzLjQgMTUuMiAzLjRzMTAuNS0xLjIgMTUuMi0zLjRsMTguNS04LjdDNTMzIDUwMC4zIDU3NiA0MzIuNiA1NzYgMzU4LjJsMC0zMS4xYzAtMTMuOC04LjgtMjYtMjEuOS0zMC40bC0xMTItMzcuM2MtNi42LTIuMi0xMy43LTIuMi0yMC4yIDB6Il19LEJndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib2xkIixpY29uOlszODQsNTEyLFtdLCJmMDMyIiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NmwzMiAwIDAgMzIwLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjggMC00Ni41LTI0LjgtODcuMy02Mi0xMDkuNyAxOC43LTIyLjMgMzAtNTEgMzAtODIuMyAwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEwzMiAzMnpNMjg4IDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NGwtOTYgMCAwLTEyOCA5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0ek0xMjggNDE2bDAtMTI4IDEyOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC0xMjggMHoiXX0sRGllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYXJ0LXB1bHNlIixpY29uOls1MTIsNTEyLFsiaGVhcnRiZWF0Il0sImYyMWUiLCJNMjU2IDEwNy45TDI0MSA4Ny4xQzIxNiA1Mi41IDE3NS45IDMyIDEzMy4xIDMyIDU5LjYgMzIgMCA5MS42IDAgMTY1LjFsMCAyLjZjMCAyMy42IDYuMiA0OCAxNi42IDcyLjNsMTA2IDBjMy4yIDAgNi4xLTEuOSA3LjQtNC45bDMxLjgtNzYuM2MzLjctOC44IDEyLjMtMTQuNiAyMS44LTE0LjhzMTguMyA1LjQgMjIuMiAxNC4xbDUxLjMgMTEzLjkgNDEuNC04Mi44YzQuMS04LjEgMTIuNC0xMy4zIDIxLjUtMTMuM3MxNy40IDUuMSAyMS41IDEzLjNsMjMuMiA0Ni4zYzEuNCAyLjcgNC4xIDQuNCA3LjIgNC40bDEyMy42IDBjMTAuNS0yNC4zIDE2LjYtNDguNyAxNi42LTcyLjNsMC0yLjZDNTEyIDkxLjYgNDUyLjQgMzIgMzc4LjkgMzIgMzM2LjIgMzIgMjk2IDUyLjUgMjcxIDg3LjFsLTE1IDIwLjd6TTQ2OS42IDI4OGwtOTcuOCAwYy0yMS4yIDAtNDAuNi0xMi01MC4xLTMxbC0xLjctMy40LTQyLjUgODUuMWMtNC4xIDguMy0xMi43IDEzLjUtMjIgMTMuM3MtMTcuNi01LjctMjEuNC0xNC4xbC00OS4zLTEwOS41LTEwLjUgMjUuMmMtOC43IDIwLjktMjkuMSAzNC41LTUxLjcgMzQuNWwtODAuMiAwYzQ3LjIgNzMuOCAxMjMgMTQxLjcgMTcwLjQgMTc3LjkgMTIuNCA5LjQgMjcuNiAxNC4xIDQzLjEgMTQuMXMzMC44LTQuNiA0My4xLTE0LjFDMzQ2LjYgNDI5LjcgNDIyLjQgMzYxLjggNDY5LjYgMjg4eiJdfSxSZ3Q9RGllLEVpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtcm9vdC12YXJpYWJsZSIsaWNvbjpbNTc2LDUxMixbInNxdWFyZS1yb290LWFsdCJdLCJmNjk4IiwiTTI4Mi42IDc4LjFjOC0yNy4zIDMzLTQ2LjEgNjEuNC00Ni4xbDIwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDM0NCA5NiAyMzguNyA0NTdjLTMuNiAxMi4zLTE0LjEgMjEuMi0yNi44IDIyLjhzLTI1LjEtNC42LTMxLjUtMTUuNkw3Ny42IDI4OCAzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNDUuNiAwYzIyLjggMCA0My44IDEyLjEgNTUuMyAzMS44bDY1LjIgMTExLjggODQuNC0yODkuNXpNMzkzLjQgMjMzLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNDEuNCA0MS40IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC00MS40IDQxLjQgNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC00MS40LTQxLjQtNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w0MS40LTQxLjQtNDEuNC00MS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3oiXX0sSGd0PUVpZSxOaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZHMtYnViYmxlcyIsaWNvbjpbNTEyLDUxMixbImhhbmRzLXdhc2giXSwiZTA1ZSIsIk0zODQgNjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em05NiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0xMjggNDY0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTAgMTYwbC4xIDcyLjZjMCA0NC44IDE3LjYgODcuMSA0Ny45IDExOC40IC4zLTc3IDQwLjEtMTQ4LjQgMTA1LjQtMTg5LjNsMS45LTEuMmMtMi41LTMuNy0yLjgtOC42LS40LTEyLjdsNjItMTA3LjRjNi42LTExLjUgMi43LTI2LjItOC44LTMyLjhTMTgyIDUgMTc1LjQgMTYuNWwtNjggMTE3LjggMCAwIDAgMC00My4zIDc1IDAtNDkuM2MwLTE3LjctMTQuNC0zMi0zMi0zMlMwIDE0Mi40IDAgMTYwem0yMTMuNi0zNS45YzE0LjEtOC44IDI5LjgtMTIuNyA0NS4yLTEyLjFsMzYuNS02My4zYzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOGwtNjcuMSAxMTYuMiAyNy0xNi45em04Ni41LTM1LjdsLTE2LjQgMjguNGMxNS4xIDUuNSAyOC42IDE1LjYgMzguMyAyOS43bDE5LjctMzQuMmM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4Ljh6bTQ2LjQgNjMuN2wtMTIuNSAyMS43YzIgOC42IDIuNSAxNy41IDEuNyAyNi4xbDQuMyAwIDAgMCAzNC40IDAgMTMuNy0yMy44YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOHpNMjgzLjEgMTc1Yy05LjQtMTUtMjkuMS0xOS41LTQ0LjEtMTAuMmwtNjAuMiAzNy42QzEyNy4zIDIzNC43IDk2IDI5MS4yIDk2IDM1MmwwIDhjMCA4LjkgLjggMTcuNiAyLjIgMjYuMSAzNS40IDguMiA2MS44IDQwIDYxLjggNzcuOSAwIDYuMy0uNyAxMi41LTIuMSAxOC40IDI1LjIgMTguNiA1Ni40IDI5LjYgOTAuMSAyOS42bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC05MiAwYy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEybDEyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMjQgMGMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMmwxNTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTU2IDBjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMTI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTEzNiAwIDAgMCAwIDAtOTMuMiAwIDQ2LjItMjguOWMxNS05LjQgMTkuNS0yOS4xIDEwLjItNDQuMXoiXX0scWd0PU5pZSxWZ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFya2VyIixpY29uOls1MTIsNTEyLFtdLCJmNWExIiwiTTQwOC44IDBjLTI3LjQgMC01My42IDEwLjktNzMgMzAuMkwzMTguMSA0OCAzMDUgMzQuOWMtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwTDEwMyAxMzVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMEwyMzcuMSA2OC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDI4NC4xIDgxLjkgMTg0IDE4Mi4xIDMyOS45IDMyOCA0ODEuOCAxNzYuMmMxOS40LTE5LjQgMzAuMi00NS42IDMwLjItNzMgMC01Ny00Ni4yLTEwMy4yLTEwMy4yLTEwMy4yek0xMDIuNCAyNjMuN2MtNDkuOSA0OS45LTgzLjMgMTE0LTk1LjUgMTgzLjVMLjQgNDgzLjhDLTEgNDkxLjYgMS41IDQ5OS40IDcgNTA1czEzLjQgOCAyMS4xIDYuN2wzNi43LTYuNWM2OS41LTEyLjMgMTMzLjYtNDUuNiAxODMuNS05NS41TDI5NiAzNjEuOSAxNTAuMSAyMTYgMTAyLjQgMjYzLjd6Il19LFVndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbGlwYm9hcmQiLGljb246WzM4NCw1MTIsWzEyODIwM10sImYzMjgiLCJNMzIwIDMybC04LjYgMEMzMDAuNCAxMi45IDI3OS43IDAgMjU2IDBMMTI4IDBDMTA0LjMgMCA4My42IDEyLjkgNzIuNiAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0xMzYgMTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMTIgMHoiXX0samd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsYWNlLW9mLXdvcnNoaXAiLGljb246WzUxMiw1MTIsW10sImY2N2YiLCJNMTYwIDc5bDAgODEtNDQuOCAzMy42QzEwMy4xIDIwMi43IDk2IDIxNi45IDk2IDIzMmwwIDQwLTYwLjYgMzAuM0MxMy43IDMxMy4yIDAgMzM1LjMgMCAzNTkuNkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NCA3NC43IDAgODUuNCAwIDMyMCAwbDY0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC04OC40YzAtMjQuMi0xMy43LTQ2LjQtMzUuNC01Ny4yTDQxNiAyNzIgNDE2IDIzMmMwLTE1LjEtNy4xLTI5LjMtMTkuMi0zOC40TDM1MiAxNjAgMzUyIDc5YzAtOS41LTQuMi0xOC41LTExLjUtMjQuNkwyNzEuNC0zLjJjLTguOS03LjQtMjEuOC03LjQtMzAuNyAwTDE3MS41IDU0LjRDMTY0LjIgNjAuNSAxNjAgNjkuNSAxNjAgNzl6bTk2IDI0MWMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDgwLTEyOCAwIDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjR6Il19LFdndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYW5uYWJpcyIsaWNvbjpbNTEyLDUxMixbXSwiZjU1ZiIsIk0yNTYgMGM1LjMgMCAxMC4zIDIuNyAxMy4zIDcuMSAxNS44IDIzLjUgMzYuNyA2My43IDQ5LjIgMTA5IDcuMyAyNi40IDExLjggNTUuMyAxMC4zIDg0IDExLjYtOC45IDIzLjctMTYuNyAzNS45LTIzLjcgNDEtMjMuMyA4NC40LTM2LjkgMTEyLjItNDIuNSA1LjItMSAxMC43IC42IDE0LjQgNC40czUuNCA5LjIgNC40IDE0LjVjLTUuNiAyNy43LTE5LjMgNzAuOS00Mi43IDExMS43LTkuMSAxNS45LTE5LjkgMzEuNy0zMi41IDQ2LjMgMjcuOSA2LjYgNTIuNSAxNy4yIDY3LjMgMjUuNCA1LjEgMi44IDguMiA4LjIgOC4yIDE0cy0zLjIgMTEuMi04LjIgMTRjLTE1LjIgOC40LTQwLjkgMTkuNS02OS44IDI2LjEtMjAuMiA0LjYtNDIuOSA3LjItNjUuMiA0LjZsOC4zIDMzLjJjMS41IDYuMS0uNiAxMi41LTUuNSAxNi40cy0xMS42IDQuNi0xNy4yIDEuOEwyODAgNDE3LjIgMjgwIDQ4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTcwLjgtNTguNSAyOS4xYy01LjYgMi44LTEyLjMgMi4xLTE3LjItMS44cy03LTEwLjMtNS41LTE2LjRsOC4zLTMzLjJjLTIyLjIgMi42LTQ1IDAtNjUuMi00LjYtMjguOS02LjYtNTQuNS0xNy42LTY5LjgtMjYuMS01LjEtMi44LTguMi04LjItOC4yLTE0czMuMi0xMS4yIDguMi0xNGw2LjItMy4zYzE1LTcuNiAzNi44LTE2LjQgNjEuMS0yMi4yLTEyLjUtMTQuNS0yMy4zLTMwLjQtMzIuNC00Ni4yLTIzLjQtNDAuOC0zNy4xLTg0LTQyLjctMTExLjctMS4xLTUuMiAuNi0xMC43IDQuNC0xNC41czkuMi01LjQgMTQuNC00LjRjMjcuOSA1LjUgNzEuMiAxOS4yIDExMi4yIDQyLjUgMTIuMiA2LjkgMjQuMyAxNC44IDM1LjggMjMuNy0xLjQtMjguNyAzLjEtNTcuNiAxMC4zLTg0IDEyLjUtNDUuMyAzMy40LTg1LjUgNDkuMi0xMDlsMS4yLTEuNkMyNDYuOSAyIDI1MS4zIDAgMjU2IDB6Il19LEdndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZW9wbGUtcm9vZiIsaWNvbjpbNTc2LDUxMixbXSwiZTUzNyIsIk0zMDIuMy0xMi42Yy05LTQuNS0xOS42LTQuNS0yOC42IDBsLTI1NiAxMjhDMS45IDEyMy4zLTQuNSAxNDIuNSAzLjQgMTU4LjNzMjcuMSAyMi4yIDQyLjkgMTQuM0wyODggNTEuOCA1MjkuNyAxNzIuNmMxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlsLTI1Ni0xMjh6TTI4OCAyNzJhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6bTAgNDhjLTUzIDAtOTYgNDMtOTYgOTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtNTMtNDMtOTYtOTYtOTZ6TTE2MCAyNTZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHptMzUyIDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTEyIDMzNmMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAzMy4xYzAgMTcgMTMuOCAzMC45IDMwLjkgMzAuOWw4Ny44IDBjLTQuMy05LjgtNi43LTIwLjYtNi43LTMybDAtNDhjMC0xOC40IDMuNS0zNiA5LjgtNTIuMi0xMi4yLTcuNS0yNi41LTExLjgtNDEuOC0xMS44ek00MjUuNCA0ODBsODcuOCAwYzE3IDAgMzAuOS0xMy44IDMwLjktMzAuOWwwLTMzLjFjMC00NC4yLTM1LjgtODAtODAtODAtMTUuMyAwLTI5LjYgNC4zLTQxLjggMTEuOCA2LjMgMTYuMiA5LjggMzMuOCA5LjggNTIuMmwwIDQ4YzAgMTEuNC0yLjQgMjIuMi02LjcgMzJ6Il19LFlndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaXNlYXNlIixpY29uOls1MTIsNTEyLFtdLCJmN2ZhIiwiTTIzNi41IDI5LjRMMjI0IDQ4Yy0yMCAzMC01My42IDQ4LTg5LjcgNDhMNjggOTZjLTM3LjUgMC02Ny45IDMwLjQtNjcuOSA2Ny45IDAgMTggNy4yIDM1LjIgMTkuOSA0Ny45bDI3IDI3YzExIDExIDE3LjIgMjUuOSAxNy4yIDQxLjUgMCAxNS44LTYuNCAzMC45LTE3LjcgNDJMMzMuNCAzMzUuMWMtMTEuMSAxMC44LTE3LjMgMjUuNy0xNy4zIDQxLjIgMCAzNi44IDM0LjEgNjQuMiA3MC4xIDU2LjJsNjIuMy0xMy44YzcuNy0xLjcgMTUuNy0yLjYgMjMuNi0yLjYgMzIuOCAwIDY0LjIgMTQuNiA4NS4yIDM5LjhsMzAuNSAzNi42YzEwLjQgMTIuNCAyNS43IDE5LjYgNDEuOSAxOS42IDMwLjEgMCA1NC41LTI0LjQgNTQuNS01NC41bDAtNTEuMmMwLTQxLjQgMjUuNC03OC41IDY0LTkzLjVsMjIuMi04LjZjMjUuMi05LjggNDEuOC0zNC4xIDQxLjgtNjEuMSAwLTI2LjQtMTUuOS01MC4zLTQwLjMtNjAuNUw0MjkgMTY0LjhjLTMzLjItMTMuOS01Ny42LTQzLTY1LjUtNzguMWwtNy45LTM1LjJjLTYuOC0zMC4xLTMzLjUtNTEuNS02NC4zLTUxLjUtMjIgMC00Mi42IDExLTU0LjggMjkuNHpNMTYwIDE5MmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzIgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxQaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9vay1iaWJsZSIsaWNvbjpbNDQ4LDUxMixbImJpYmxlIl0sImY2NDciLCJNOTYgNTEyYy01MyAwLTk2LTQzLTk2LTk2TDAgOTZDMCA0MyA0MyAwIDk2IDBMNDAwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyODhjMCAyMC45LTEzLjQgMzguNy0zMiA0NS4zbDAgNjYuN2MxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw5NiA1MTJ6bTAtMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI1NiAwIDAtNjQtMjU2IDB6TTE5MiA4MGwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTExMiA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDggMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdfSxaZ3Q9UGllLFhndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVzcy1ib2FyZCIsaWNvbjpbNDQ4LDUxMixbXSwiZjQzYyIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem02NCA2NGwwIDY0IDY0IDAgMC02NCA2NCAwIDAgNjQgNjQgMCAwLTY0IDY0IDAgMCA2NC02NCAwIDAgNjQgNjQgMCAwIDY0LTY0IDAgMCA2NCA2NCAwIDAgNjQtNjQgMCAwLTY0LTY0IDAgMCA2NC02NCAwIDAtNjQtNjQgMCAwIDY0LTY0IDAgMC02NCA2NCAwIDAtNjQtNjQgMCAwLTY0IDY0IDAgMC02NC02NCAwIDAtNjQgNjQgMHptNjQgMTI4bDY0IDAgMC02NC02NCAwIDAgNjR6bTAgNjRsMC02NC02NCAwIDAgNjQgNjQgMHptNjQgMGwtNjQgMCAwIDY0IDY0IDAgMC02NHptMCAwbDY0IDAgMC02NC02NCAwIDAgNjR6Il19LFFndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXJzIixpY29uOls1MTIsNTEyLFs5Nzk0XSwiZjIyMiIsIk0zMjAgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJMNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC01MC43LTk1IDk1YzE5LjUgMjguNCAzMSA2Mi43IDMxIDk5LjggMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZTMzIgNDAxLjIgMzIgMzA0IDExMC44IDEyOCAyMDggMTI4YzM3IDAgNzEuNCAxMS40IDk5LjggMzFsOTUtOTUtNTAuNyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMjA4IDQxNmExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6Il19LEtndD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsYXB0b3AiLGljb246WzY0MCw1MTIsWzEyODE4N10sImYxMDkiLCJNMTI4IDMyQzkyLjcgMzIgNjQgNjAuNyA2NCA5NmwwIDI0MCA2NCAwIDAtMjQwIDM4NCAwIDAgMjQwIDY0IDAgMC0yNDBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTI4IDMyek0xOS4yIDM4NEM4LjYgMzg0IDAgMzkyLjYgMCA0MDMuMiAwIDQ0NS42IDM0LjQgNDgwIDc2LjggNDgwbDQ4Ni40IDBjNDIuNCAwIDc2LjgtMzQuNCA3Ni44LTc2LjggMC0xMC42LTguNi0xOS4yLTE5LjItMTkuMkwxOS4yIDM4NHoiXX0sSWllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXIteG1hcmsiLGljb246WzY0MCw1MTIsWyJ1c2VyLXRpbWVzIl0sImYyMzUiLCJNMTM2LjQgMTI4YTEyMCAxMjAgMCAxIDEgMjQwIDAgMTIwIDEyMCAwIDEgMSAtMjQwIDB6bS04OCAzNTQuM2MwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM2w1OS40IDBjOTguNSAwIDE3OC4zIDc5LjggMTc4LjMgMTc4LjMgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNzguMSA1MTJjLTE2LjQgMC0yOS43LTEzLjMtMjkuNy0yOS43ek02MTIuMyAxMjQuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtMzMuOSAzMy45IDMzLjkgMzMuOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0zMy45LTMzLjktMzMuOSAzMy45Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOS0zMy45LTMzLjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMy45IDMzLjkgMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAweiJdfSxKZ3Q9SWllLGV4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmbGFnLXVzYSIsaWNvbjpbNDQ4LDUxMixbXSwiZjc0ZCIsIk0zMiAwQzQ5LjcgMCA2NCAxNC4zIDY0IDMybDAgMTYgNjktMTcuMmMzOC4xLTkuNSA3OC4zLTUuMSAxMTMuNSAxMi41IDQ2LjMgMjMuMiAxMDAuOCAyMy4yIDE0Ny4xIDBsOS42LTQuOEM0MjMuOCAyOC4xIDQ0OCA0My4xIDQ0OCA2Ni4xbDAgMzYuMS00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTIwLjMtOS00MS44LTE0LjctNjMuNi0xNi45bDAgMzIuMmMxNy40IDIuMSAzNC40IDYuNyA1MC42IDEzLjlsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNGwzMy43LTEyLjMgMCA2Mi00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTQwLjItMTcuOS04NS0yMi41LTEyOC4xLTEzLjNsLTYzLjUgMTMuNiAwIDMyLjcgNzAuMi0xNS4xYzM2LjQtNy44IDc0LjMtMy45IDEwOC40IDExLjNsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNGwzMy43LTEyLjMgMCA2MS45LTQ0LjcgMTYuMmMtNDIuOCAxNS42LTkwIDEzLjktMTMxLjYtNC42bC0xNi4xLTcuMmMtNDAuMi0xNy45LTg1LTIyLjUtMTI4LjEtMTMuM2wtNjMuNSAxMy42IDAgMzIuNyA3MC4yLTE1LjFjMzYuNC03LjggNzQuMy0zLjkgMTA4LjQgMTEuM2wxNi4xIDcuMmM0OS4yIDIxLjkgMTA1IDIzLjggMTU1LjYgNS40bDMzLjctMTIuMyAwIDMzLjVjMCAxMy4zLTguMyAyNS4zLTIwLjggMzBsLTM0LjcgMTNjLTQ2LjIgMTcuMy05Ny42IDE0LjYtMTQxLjctNy40LTM3LjktMTktODEuNC0yMy43LTEyMi41LTEzLjRMNjQgNDAwIDY0IDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ5Ny43IDAgNDgwTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwem04MCA5NmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0zMiAwYTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptLTMyIDQ4YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTMyIDBhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyeiJdfSx0eHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZC1taWRkbGUtZmluZ2VyIixpY29uOls0NDgsNTEyLFsxMjg0MDVdLCJmODA2IiwiTTIzMiAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDE2NC4yYy04LjUtNy42LTE5LjctMTIuMi0zMi0xMi4yLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC01NS43Yy0yIDEuNC0zLjkgMy01LjggNC41TDU1IDI4NC44QzQwLjQgMjk3IDMyIDMxNSAzMiAzMzRMMzIgMzcyYzAgMzggMTYuOSA3NCA0Ni4xIDk4LjNsNS40IDQuNWMyOC44IDI0IDY1IDM3LjEgMTAyLjQgMzcuMUwzMDQgNTEyYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDgtMTIuNCAwLTIzLjYgNC43LTMyLjEgMTIuMy0xLjktMjQuOC0yMi42LTQ0LjMtNDcuOS00NC4zLTEyLjMgMC0yMy41IDQuNi0zMiAxMi4yTDI3MiA0MGMwLTIyLjEtMTcuOS00MC00MC00MHoiXX0sYXh0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vcnRhci1wZXN0bGUiLGljb246WzUxMiw1MTIsW10sImY1YTciLCJNNTA0LjMgMTEuMUM0OTMuMy0xLjYgNDc0LjUtMy43IDQ2MSA2LjJMMjUyLjMgMTYwIDM5Ny4zIDE2MCA1MDIuNiA1NC42YzExLjgtMTEuOCAxMi42LTMwLjggMS42LTQzLjV6TTMyIDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmMwIDgyLjUgNDMuNCAxNDcuNyAxMjMuOSAxNzYuMi0xMS4xIDEzLjktMTkuNCAzMC4zLTIzLjkgNDguMS00LjQgMTcuMSAxMC40IDMxLjcgMjguMSAzMS43bDE5MiAwYzE3LjcgMCAzMi40LTE0LjYgMjguMS0zMS43LTQuNS0xNy44LTEyLjgtMzQuMS0yMy45LTQ4LjEgODAuNS0yOC42IDEyMy45LTkzLjcgMTIzLjktMTc2LjIgMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMTkyeiJdfSxyeHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVhZC1zaWRlLWNvdWdoIixpY29uOls1MTIsNTEyLFtdLCJlMDYxIiwiTTk2IDUxMmw2NCAwYzUzIDAgOTYtNDMgOTYtOTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZsMSAwYzI2IDAgNDctMjEgNDctNDcgMC0xMS0zLjktMjEuNi0xMC45LTMwLjFMMjczLjMgMjAwQzI3MS40IDE5Ny42IDI3MC4xIDE5NC43IDI2OS43IDE5MS43IDI1NCA4My4zIDE2MC43IDAgNDggMCA0MC40IDAgMzIuOSAuNCAyNS40IDEuMSAxMC41IDIuNiAwIDE1LjkgMCAzMC45TDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDB6bTE2LTMyMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem02My4xIDIzNy4ybC00MS41LTMuNWMtMTIuMi0xLTIxLjYtMTEuMi0yMS42LTIzLjQgMC0xMC44IDcuMy0yMC4yIDE3LjgtMjIuOGw0MC40LTEwLjFjMTkuMi00LjggMzcuOCA5LjcgMzcuOCAyOS41IDAgMTcuOC0xNS4yIDMxLjgtMzIuOSAzMC4zek00ODAgMzEyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptLTQwIDI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bS02NCA0OGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwem0xMjggMGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek00ODAgNTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptLTQwLTcyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il19LGl4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbGFuZS1sb2NrIixpY29uOls2NDAsNTEyLFtdLCJlNTU4IiwiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgODIuMSA3NS4yQzQwOS43IDI0OC4xIDQwMCAyNzQuOSA0MDAgMzA0bDAgMjQuNGMtNy4zIDYuNi0xMy42IDE0LjItMTguNyAyMi43bC0zNy4zLTEyLjQgMCA5OS43IDI0IDE5LjIgMCAzOC4zYzAgMTMuNSAyLjggMjYuNCA3LjggMzguMUwyODggNTEyIDE3OS45IDUzOWMtMTAuMSAyLjUtMTkuOS01LjEtMTkuOS0xNS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw2Ni01Mi44IDAtOTkuNy0xNjIuOSA1NC4zQzU4LjcgMzk2LjQgNDggMzg4LjcgNDggMzc3LjhsMC00My43YzAtOSAzLjgtMTcuNSAxMC40LTIzLjZMMjMyIDE1MS4zIDIzMiAyNHpNNTYwIDMwNC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNNDE2IDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXX0sRmllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhdHRlcnktdGhyZWUtcXVhcnRlcnMiLGljb246WzY0MCw1MTIsWyJiYXR0ZXJ5LTQiXSwiZjI0MSIsIk01MjggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTQxNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQxNiAwek0xMTIgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjI0YzAgNDQuMiAzNS44IDgwIDgwIDgwbDQxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwTDExMiA2NHptNTYgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwyMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMjI0IDB6Il19LG94dD1GaWUsc3h0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZyYW5jLXNpZ24iLGljb246WzMyMCw1MTIsW10sImUxOGYiLCJNODAgMzJDNjIuMyAzMiA0OCA0Ni4zIDQ4IDY0bDAgMjU2LTI0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjQgMCAwIDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC04MCA4OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04OCAwIDAtNjQgMTQ0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE0NCAwIDAtOTYgMTc2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgMzJ6Il19LE9pZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWx0ZXItY2lyY2xlLWRvbGxhciIsaWNvbjpbNTc2LDUxMixbImZ1bm5lbC1kb2xsYXIiXSwiZjY2MiIsIk0zMiA2NEMxOS4xIDY0IDcuNCA3MS44IDIuNCA4My44Uy4yIDEwOS41IDkuNCAxMTguNkwxOTIgMzAxLjMgMTkyIDQxNmMwIDguNSAzLjQgMTYuNiA5LjQgMjIuNmw2NCA2NGMyLjUgMi41IDUuMyA0LjUgOC4zIDYtMjEuMi0zMC45LTMzLjYtNjguMy0zMy42LTEwOC42IDAtOTkuNCA3NS41LTE4MS4xIDE3Mi4zLTE5MWw5MC40LTkwLjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgNjQgNDgwIDY0TDMyIDY0ek01NzYgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTQxNiAzMjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDggMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDUuOCAwYy01LjYgMC0xMC4yIDQuNi0xMC4yIDEwLjIgMCA0LjkgMy41IDkuMSA4LjMgMTBsNDUgOC4yYzIwIDMuNiAzNC42IDIxLjEgMzQuNiA0MS41IDAgMjMuMy0xOC45IDQyLjItNDIuMiA0Mi4ybC01LjggMCAwIDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04LTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsNTMuOCAwYzUuNiAwIDEwLjItNC42IDEwLjItMTAuMiAwLTQuOS0zLjUtOS4xLTguMy0xMGwtNDUtOC4yYy0yMC0zLjYtMzQuNi0yMS4xLTM0LjYtNDEuNSAwLTIyLjYgMTcuNy00MSA0MC00Mi4xbDAtOC4xeiJdfSxueHQ9T2llLGx4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVlc2UiLGljb246WzUxMiw1MTIsW10sImY3ZWYiLCJNNTEyIDI0MC4ybDAgMTUuOC01MTIgMGMwLTIwIDEwLTM4LjcgMjYuNi00OS44TDI3NC45IDQwLjdjOC42LTUuNyAxOC42LTguNyAyOC45LTguNyAxMTUgMCAyMDguMiA5My4yIDIwOC4yIDIwOC4yem0wIDYzLjhsMCAxMTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTExMiA1MTIgMHoiXX0sQmllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1oIixpY29uOls1MTIsNTEyLFs5NDA1LCJob3NwaXRhbC1zeW1ib2wiXSwiZjQ3ZSIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptOTYtMzQ0bDAgMTc2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNjQtOTYgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA2NCA5NiAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXX0sY3h0PUJpZSxkeHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2Nob29sIixpY29uOls1NzYsNTEyLFsxMjc5NzldLCJmNTQ5IiwiTTAgMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDAgMTI3LjktMTE1LjFjMTguMy0xNi40IDQ2LTE2LjQgNjQuMiAwTDQ0OCAxMjggNTEyIDEyOGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTkyek0yMjQgMzc2bDAgODggMTI4IDAgMC04OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6bS0xMTIgOGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNNDk2IDM4NGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNMjg4IDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHoiXX0sZnh0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRpY2UtZml2ZSIsaWNvbjpbNDQ4LDUxMixbOTg2MF0sImY1MjMiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek05NiAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMjI0IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0LTY0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDE2MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LHV4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0b3JuYWRvIixpY29uOls0NDgsNTEyLFsxMjc3ODZdLCJmNzZmIiwiTTAgMzJMMCA0NS42QzAgNjIuNyAxLjcgNzkuNiA1IDk2bDM1Mi44IDBjMy4yLTYuOSA3LjUtMTMuMyAxMy0xOC44bDM4LjYtMzguNmM0LjItNC4yIDYuNi0xMCA2LjYtMTYgMC0xMi41LTEwLjEtMjIuNi0yMi42LTIyLjZMMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJ6TTM1NS43IDE0NGwtMzM2IDBjMTIuNCAyOS43IDMwLjIgNTYuOCA1Mi43IDgwbDMzOS42IDAtNDcuMi02Mi45Yy0zLjktNS4yLTctMTEtOS4yLTE3LjF6TTI0Mi42IDMzNC43YzguMiA0LjggMTUuOCAxMC43IDIyLjUgMTcuM0w0NDUgMzUyYzItOS44IDMtMTkuOSAzLTMwLjEgMC0xNy4xLTIuOS0zNC04LjYtNDkuOUwxMzYgMjcyIDI0Mi42IDMzNC43ek0yOTQuMyA0MDBjNS4zIDE3IDYuNSAzNS4yIDMuNiA1M2wtNS45IDM1LjdjLTIgMTIuMiA3LjQgMjMuNCAxOS44IDIzLjQgNS4zIDAgMTAuNC0yLjEgMTQuMi01LjlsNzguMi03OC4yYzguNS04LjUgMTUuOC0xNy44IDIxLjktMjcuOWwtMTMxLjggMHoiXX0sUmllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImpldC1maWdodGVyIixpY29uOls1NzYsNTEyLFsiZmlnaHRlci1qZXQiXSwiZjBmYiIsIk00OTYuMiAyMDYuOGMtMTAuNy00LjUtMjIuMi02LjgtMzMuOC02LjhMMzYyIDIwMCAyNDggNDggMjk2IDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0UzMwOS4zIDAgMjk2IDBMMTUyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOCAwIDAgMTUyLTU0LjQgMC01Mi44LTY2Yy0zLTMuOC03LjYtNi0xMi41LTZMMTYgMTI4Yy04LjggMC0xNiA3LjItMTYgMTZsMCA4OCA0MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwIDAgODhjMCA4LjggNy4yIDE2IDE2IDE2bDI0LjMgMGM0LjkgMCA5LjUtMi4yIDEyLjUtNmw1Mi44LTY2IDU0LjQgMCAwIDE1Mi04IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMTE0LTE1MiAxMDAuNCAwYzExLjYgMCAyMy4xLTIuMyAzMy44LTYuOGw2NS0yNy4xYzguOS0zLjcgMTQuOC0xMi41IDE0LjgtMjIuMnMtNS44LTE4LjQtMTQuOC0yMi4ybC02NS0yNy4xeiJdfSxweHQ9UmllLGh4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0aHVtYnMtZG93biIsaWNvbjpbNTEyLDUxMixbMTI4MDc4LDYxNTc2XSwiZjE2NSIsIk0zODQgMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCA2LjMtMS4zIDEyLjItMy40IDE3LjcgMjAuNCA1LjUgMzUuNCAyNC4xIDM1LjQgNDYuMyAwIDkuMS0yLjYgMTcuNi03IDI0LjkgMjIuMiA0LjIgMzkgMjMuNyAzOSA0Ny4xIDAgMTkuNy0xMS45IDM2LjYtMjguOSA0NCAxNyA3LjQgMjguOSAyNC4zIDI4LjkgNDQgMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwIDI4LjIgNzAuNGMyLjUgNi4zIDMuOCAxMy4xIDMuOCAxOS45bDAgNC4yYzAgMjcuMy0yMi4xIDQ5LjQtNDkuNCA0OS40LTE4LjcgMC0zNS44LTEwLjYtNDQuMi0yNy4zTDE3MC4xIDM1Ni4zYy02LjctMTMuMy0xMC4xLTI4LTEwLjEtNDIuOWwwLTE4Ni42YzAtMTkuNCA4LjktMzcuOCAyNC01MGwxMi4yLTkuN0MyMjQuNiA0NC40IDI1OS44IDMyIDI5Ni4xIDMyTDM4NCAzMnpNODAgOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTQ4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDQ4IDB6Il19LG14dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicm9vbSIsaWNvbjpbNTc2LDUxMixbMTI5NTI5XSwiZjUxYSIsIk01NjYuNiA1NC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xOTIgMTkyLTM0LjctMzQuN2MtNC4yLTQuMi0xMC02LjYtMTYtNi42LTEyLjUgMC0yMi42IDEwLjEtMjIuNiAyMi42bDAgMjkuMSAxMDguMyAxMDguMyAyOS4xIDBjMTIuNSAwIDIyLjYtMTAuMSAyMi42LTIyLjYgMC02LTIuNC0xMS44LTYuNi0xNmwtMzQuNy0zNC43IDE5Mi0xOTJ6TTM0MS4xIDM1My40TDIyMi42IDIzNC45Yy00Mi43LTMuNy04NS4yIDExLjctMTE1LjggNDIuM2wtOCA4Yy0yMi4zIDIyLjMtMzQuOCA1Mi41LTM0LjggODQgMCA2LjggNy4xIDExLjIgMTMuMiA4LjJsNTEuMS0yNS41YzUtMi41IDkuNSA0LjEgNS40IDcuOUw3LjMgNDczLjRDMi43IDQ3Ny42IDAgNDgzLjYgMCA0ODkuOSAwIDUwMi4xIDkuOSA1MTIgMjIuMSA1MTJsMTczLjMgMGMzOC44IDAgNzUuOS0xNS40IDEwMy40LTQyLjggMzAuNi0zMC42IDQ1LjktNzMuMSA0Mi4zLTExNS44eiJdfSxIaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1pbXBvcnQiLGljb246WzM4NCw1MTIsWyJhcnJvdy1yaWdodC10by1maWxlIl0sImY1NmYiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCAyNDAgMTgyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xODIuMSAwIDAgOTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnoiXX0sZ3h0PUhpZSxxaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXRlbnNpbHMiLGljb246WzUxMiw1MTIsWzEyNzg2MCw2MTY4NSwiY3V0bGVyeSJdLCJmMmU3IiwiTTYzLjkgMTQuNEM2My4xIDYuMiA1Ni4yIDAgNDggMHMtMTUuMSA2LjItMTYgMTQuM0wxNy45IDE0OS43Yy0xLjMgNi0xLjkgMTIuMS0xLjkgMTguMiAwIDQ1LjkgMzUuMSA4My42IDgwIDg3LjdMOTYgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMjQuNGM0NC45LTQuMSA4MC00MS44IDgwLTg3LjcgMC02LjEtLjYtMTIuMi0xLjktMTguMkwyMjMuOSAxNC4zQzIyMy4xIDYuMiAyMTYuMiAwIDIwOCAwcy0xNS4xIDYuMi0xNS45IDE0LjRMMTc4LjUgMTQ5LjljLS42IDUuNy01LjQgMTAuMS0xMS4xIDEwLjEtNS44IDAtMTAuNi00LjQtMTEuMi0xMC4yTDE0My45IDE0LjZDMTQzLjIgNi4zIDEzNi4zIDAgMTI4IDBzLTE1LjIgNi4zLTE1LjkgMTQuNkw5OS44IDE0OS44Yy0uNSA1LjgtNS40IDEwLjItMTEuMiAxMC4yLTUuOCAwLTEwLjYtNC40LTExLjEtMTAuMUw2My45IDE0LjR6TTQ0OCAwQzQzMiAwIDMyMCAzMiAzMjAgMTc2bDAgMTEyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyIDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQ0OGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXX0seHh0PXFpZSxieHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaWQtYmFkZ2UiLGljb246WzM4NCw1MTIsW10sImYyYzEiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHptOTYgMzUybDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQ0OGMtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tMjQtOTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xNTIgNjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sdnh0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNwaWRlciIsaWNvbjpbNTEyLDUxMixbMTI4Mzc1XSwiZjcxNyIsIk0zNjkuMy0zMWMxMS45LTMuNSAyNC40IDIuNyAyOSAxMy45bC44IDIuMyA0MCAxMzZjMi41IDguNCAuMSAxNy41LTYuMSAyMy43bC02NC4xIDY0LjEgNzYuNC0yMC44IDE5LjktNTkuOCAuOS0yLjNjNS0xMS4xIDE3LjctMTYuOCAyOS41LTEyLjkgMTEuOCAzLjkgMTguNSAxNi4xIDE1LjggMjhsLS43IDIuNC0yNCA3MmMtMi41IDcuNi04LjcgMTMuNC0xNi41IDE1LjZsLTkxLjEgMjQuOCA5MS4xIDI0LjhjNy43IDIuMSAxMy45IDggMTYuNSAxNS42bDI0IDcyIC43IDIuNGMyLjcgMTEuOS00LjEgMjQuMS0xNS44IDI4LTExLjggMy45LTI0LjUtMS44LTI5LjUtMTIuOWwtLjktMi4zLTE5LjktNTkuOC03Ni40LTIwLjggNjQuMSA2NC4xYzYuMSA2LjEgOC41IDE1LjEgNi4yIDIzLjRsLTQwIDE0NC0uOCAyLjNjLTQuNCAxMS4zLTE2LjggMTcuNy0yOC44IDE0LjQtMTItMy4zLTE5LjMtMTUuMi0xNy4yLTI3LjJsLjUtMi40IDM2LjItMTMwLjUtMzcuMi0zNy4yQzM1MSA0MDYgMzA4LjQgNDQ4IDI1NiA0NDhzLTk1LTQyLTk2LTk0LjFsLTM3IDM3IDM2IDEyMi4zIC42IDIuNGMyLjIgMTEuOS00LjkgMjMuOS0xNi44IDI3LjQtMTEuOSAzLjUtMjQuNC0yLjctMjktMTMuOWwtLjgtMi4zLTQwLTEzNmMtMi41LTguNC0uMS0xNy41IDYuMS0yMy44bDY0LjEtNjQuMS03Ni40IDIwLjgtMTkuOSA1OS44LS45IDIuM2MtNSAxMS4xLTE3LjcgMTYuOC0yOS41IDEyLjlzLTE4LjUtMTYuMS0xNS44LTI4bC43LTIuNCAyNC03MmMyLjUtNy42IDguNy0xMy40IDE2LjUtMTUuNmw5MS4xLTI0LjgtOTEuMS0yNC44Yy03LjctMi4xLTEzLjktOC0xNi41LTE1LjZsLTI0LTcyLS43LTIuNGMtMi43LTExLjkgNC4xLTI0LjEgMTUuOC0yOHMyNC41IDEuOCAyOS41IDEyLjlsLjkgMi4zIDE5LjkgNTkuOCA3Ni40IDIwLjgtNjQuMS02NC4xYy02LjItNi4yLTguNS0xNS4zLTYuMS0yMy43bDQwLTEzNiAuOC0yLjNjNC42LTExLjMgMTcuMS0xNy40IDI5LTEzLjkgMTEuOSAzLjUgMTkgMTUuNSAxNi44IDI3LjRsLS42IDIuNC0zNiAxMjIuMyA1MyA1M2MxLTQzLjMgMzYuNC03OC4xIDc5LjktNzguMXM3OC45IDM0LjggNzkuOSA3OC4ybDUzLjEtNTMuMS0zNi0xMjIuMy0uNi0yLjRjLTIuMi0xMiA0LjktMjMuOSAxNi44LTI3LjR6Il19LHl4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb2JpbGUtcmV0cm8iLGljb246WzM4NCw1MTIsW10sImU1MjciLCJNMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMEwzMDQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDE2IDY0em04MCA5NmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOCAxOTJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNCA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNCAxMC43IDI0IDI0IDI0IDI0LTEwLjcgMjQtMjR6bTY0LTcyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjQgNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjQgMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0em02NC03MmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0IDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0IDEwLjcgMjQgMjQgMjQgMjQtMTAuNyAyNC0yNHpNMTY4IDQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il19LFZpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaWducy1wb3N0IixpY29uOls1MTIsNTEyLFsibWFwLXNpZ25zIl0sImYyNzciLCJNMjU2LjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0xNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNjAgMCAwIDY0LTE1My40IDBjLTQuMiAwLTguMyAxLjctMTEuMyA0LjdsLTQ4IDQ4Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmw0OCA0OGMzIDMgNy4xIDQuNyAxMS4zIDQuN2wxNTMuNCAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE2MCAwIDAtNjQgMTUzLjQgMGM0LjIgMCA4LjMtMS43IDExLjMtNC43bDQ4LTQ4YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC00OC00OGMtMy0zLTcuMS00LjctMTEuMy00LjdsLTE1My40IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXX0sd3h0PVZpZSxNeHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ3JvdXAtYXJyb3dzLXJvdGF0ZSIsaWNvbjpbNTEyLDUxMixbXSwiZTRmNiIsIk0zNy42IDEyMi4zYy0xMS41IDE4LjctMjAuNiAzOS0yNyA2MC41LTUgMTYuOSA0LjYgMzQuOCAyMS41IDM5LjhzMzQuOC00LjYgMzkuOC0yMS41YzE4LjQtNjEuOSA2Ny4zLTExMC44IDEyOS4yLTEyOS4yIDE2LjktNSAyNi42LTIyLjkgMjEuNS0zOS44UzE5OS44IDUuNiAxODIuOSAxMC42QzE2MS40IDE3IDE0MS4xIDI2LjEgMTIyLjMgMzcuNiAxMTIuMyAxNS40IDg5LjkgMCA2NCAwIDI4LjcgMCAwIDI4LjcgMCA2NCAwIDg5LjkgMTUuNCAxMTIuMyAzNy42IDEyMi4zem00MzYuNyAwYzIyLjItMTAgMzcuNi0zMi40IDM3LjYtNTguMyAwLTM1LjMtMjguNy02NC02NC02NC0yNS45IDAtNDguMyAxNS40LTU4LjMgMzcuNi0xOC43LTExLjUtMzktMjAuNi02MC41LTI3LTE2LjktNS0zNC44IDQuNi0zOS44IDIxLjVzNC42IDM0LjggMjEuNSAzOS44YzYxLjkgMTguNCAxMTAuOCA2Ny4zIDEyOS4yIDEyOS4yIDUgMTYuOSAyMi45IDI2LjYgMzkuOCAyMS41czI2LjYtMjIuOSAyMS41LTM5LjhjLTYuNC0yMS41LTE1LjUtNDEuOC0yNy02MC41ek01MTIgNDQ4YzAtMjUuOS0xNS40LTQ4LjMtMzcuNi01OC4zIDExLjUtMTguNyAyMC42LTM5IDI3LTYwLjUgNS0xNi45LTQuNi0zNC44LTIxLjUtMzkuOHMtMzQuOCA0LjYtMzkuOCAyMS41Yy0xOC40IDYxLjktNjcuMyAxMTAuOC0xMjkuMiAxMjkuMi0xNi45IDUtMjYuNiAyMi45LTIxLjUgMzkuOHMyMi45IDI2LjYgMzkuOCAyMS41YzIxLjUtNi40IDQxLjgtMTUuNSA2MC41LTI3IDEwIDIyLjIgMzIuNCAzNy42IDU4LjMgMzcuNiAzNS4zIDAgNjQtMjguNyA2NC02NHpNMzcuNiAzODkuN2MtMjIuMiAxMC0zNy42IDMyLjQtMzcuNiA1OC4zIDAgMzUuMyAyOC43IDY0IDY0IDY0IDI1LjkgMCA0OC4zLTE1LjQgNTguMy0zNy42IDE4LjcgMTEuNSAzOSAyMC42IDYwLjUgMjcgMTYuOSA1IDM0LjgtNC42IDM5LjgtMjEuNXMtNC42LTM0LjgtMjEuNS0zOS44Yy02MS45LTE4LjQtMTEwLjgtNjcuMy0xMjkuMi0xMjkuMi01LTE2LjktMjIuOS0yNi42LTM5LjgtMjEuNVM1LjYgMzEyLjIgMTAuNiAzMjkuMWM2LjQgMjEuNSAxNS41IDQxLjggMjcgNjAuNXpNMjU2IDE5MmMxNS42IDAgMzAgNS42IDQxLjEgMTQuOWwtMTUuMyAxNS4zYy02LjYgNi42LTEuOSAxNy44IDcuNCAxNy44bDYwLjUgMGM1LjcgMCAxMC40LTQuNyAxMC40LTEwLjRsMC02MC41YzAtOS4zLTExLjItMTMuOS0xNy44LTcuNGwtMTEuMiAxMS4yYy0xOS44LTE3LjktNDYuMi0yOC45LTc1LjEtMjguOS00My42IDAtODEuMyAyNC45LTk5LjggNjEuMS02IDExLjgtMS40IDI2LjMgMTAuNCAzMi4zczI2LjMgMS40IDMyLjMtMTAuNGMxMC42LTIwLjggMzIuMi0zNC45IDU3LTM0Ljl6bTU4LjYgOTMuMWMtMTAuNiAyMC44LTMyLjIgMzQuOS01NyAzNC45LTE1LjcgMC0zMC01LjYtNDEuMS0xNC45bDE1LjMtMTUuM2M2LjYtNi42IDEuOS0xNy44LTcuNC0xNy44TDE2NCAyNzJjLTUuNyAwLTEwLjQgNC43LTEwLjQgMTAuNGwwIDYwLjVjMCA5LjMgMTEuMiAxMy45IDE3LjggNy40bDExLjItMTEuMmMxOS44IDE3LjkgNDYuMiAyOC45IDc1LjEgMjguOSA0My42IDAgODEuMy0yNC45IDk5LjgtNjEuMSA2LTExLjggMS40LTI2LjMtMTAuNC0zMi4zcy0yNi4zLTEuNC0zMi4zIDEwLjR6Il19LHp4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvd3Mtc3BsaXQtdXAtYW5kLWxlZnQiLGljb246WzUxMiw1MTIsW10sImU0YmMiLCJNMzQyLjYtMjIuNmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDQxLjQtNDEuNCAwIDE5NS45Yy0xOC44LTEwLjktNDAuNy0xNy4xLTY0LTE3LjFsLTExNC43IDAgNDEuNC00MS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyAzMjAgMjI0IDMyMGMzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMwNi43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnoiXX0sa3h0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGwtZHJpcCIsaWNvbjpbNTc2LDUxMixbXSwiZjU3NiIsIk0zMDkuNyA3MS42bC02NC40IDY0LjQgMzMuNCAzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC0zMy40LTMzLjQtOTYuNCA5Ni40Yy0yLjkgMi45LTUuMSA2LjUtNi4zIDEwLjNsMzIxLjUgMCA1My43LTUzLjdjNC45LTQuOSA3LjYtMTEuNSA3LjYtMTguM3MtMi43LTEzLjUtNy42LTE4LjNMMzQ2LjMgNzEuNkMzNDEuNSA2Ni43IDMzNC45IDY0IDMyOCA2NHMtMTMuNSAyLjctMTguMyA3LjZ6TTU4LjMgMjMyLjRsOTYuNC05Ni40LTQ5LjQtNDkuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwyMDAgOTAuNyAyNjQuNCAyNi4zQzI4MS4zIDkuNSAzMDQuMSAwIDMyOCAwczQ2LjcgOS41IDYzLjYgMjYuM0w1MTcuNyAxNTIuNEM1MzQuNSAxNjkuMyA1NDQgMTkyLjEgNTQ0IDIxNnMtOS41IDQ2LjctMjYuMyA2My42TDMxMS42IDQ4NS43QzI5NC43IDUwMi41IDI3MS45IDUxMiAyNDggNTEycy00Ni43LTkuNS02My42LTI2LjNMNTguMyAzNTkuNkM0MS41IDM0Mi43IDMyIDMxOS45IDMyIDI5NnM5LjUtNDYuNyAyNi4zLTYzLjZ6TTUxMiA1NDRjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjUuMiAzMi42LTc5LjYgNTEuMi0xMDguNyA2LTkuNCAxOS41LTkuNCAyNS41IDAgMTguNyAyOS4xIDUxLjIgODMuNSA1MS4yIDEwOC43IDAgMzUuMy0yOC43IDY0LTY0IDY0eiJdfSxTeHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hpZWxkLWhlYXJ0IixpY29uOls1MTIsNTEyLFtdLCJlNTc0IiwiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yIC41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMiAxNi43IDggMzYuMSA4IDUyLjggMCAxNzIuNC04Mi41IDIxMy4yLTI2NCAyMTMuNi0zNjMuMiAuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0yNDkuNiAxODMuNWw2LjQgOC41IDYuNC04LjVjMTEuMS0xNC44IDI4LjUtMjMuNSA0Ni45LTIzLjUgMzIuNCAwIDU4LjcgMjYuMyA1OC43IDU4LjdsMCA1LjNjMCA0OS4xLTY1LjggOTguMS05Ni41IDExOC4zLTkuNSA2LjItMjEuNSA2LjItMzAuOSAwLTMwLjctMjAuMi05Ni41LTY5LjMtOTYuNS0xMTguM2wwLTUuM2MwLTMyLjQgMjYuMy01OC43IDU4LjctNTguNyAxOC41IDAgMzUuOSA4LjcgNDYuOSAyMy41eiJdfSxVaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXNraWluZy1ub3JkaWMiLGljb246WzU3Niw1MTIsWyJza2lpbmctbm9yZGljIl0sImY3Y2EiLCJNNDI0LjggMTZhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTk5LjggMTkzLjdjNy42IDE1LjIgMS45IDMzLjYtMTIuNiA0MmwwIDE4MC4zLTMyIDAgMC0xNjQuMi0xMC4xIDVjLTI3LjQgMTMuNy02MC43IDYuMS03OS40LTE4LjJsLTE5LjYtMjUuNS0zOS41IDY4LjggMjQuOCAxMi40YzI5LjUgMTQuNyA0Mi45IDQ5LjUgMzEuMSA4MC4ybC0yOC4yIDczLjQgMTQ5LjQgMGM3LjkgMCAxNS42LTIuMyAyMi4yLTYuN2w3LjktNS4zYzExLTcuNCAyNS45LTQuNCAzMy4zIDYuN3M0LjQgMjUuOS02LjcgMzMuM2wtNy45IDUuM0M1NDMgNTA2LjkgNTI2IDUxMiA1MDguNiA1MTJsLTE4OS4xIDBjLS41IDAtMSAwLTEuNSAwTDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4OCAwYzAtOC4yIDMuMS0xNi40IDkuNC0yMi42bDc0LjEtNzQuMSAxMC4yLTM1LjljMTEuMyAxOC4zIDI3LjcgMzMuOCA0OC40IDQ0LjJsNC44IDIuNC0xLjkgNi44Yy0zIDEwLjUtOC42IDIwLTE2LjMgMjcuN2wtNTEuNSA1MS41IDEwMS4zIDAgMzcuMS05Ni40LTU1LjYtMjcuOEMyMzAuNCAzMTkgMjE1LjMgMjY3IDIzOS4zIDIyNy4xbDM3LjctNjIuNy0yNy43LTcuN2MtOS0yLjUtMTguMSAzLjItMjAgMTIuM2wtNS45IDI5LjNjLTMuMSAxNS42LTE3LjEgMjYuMy0zMi41IDI1LjdsLTEzMCAyMDgtMzcuNyAwIDE0MC42LTIyNWMtMy40LTYuMy00LjYtMTMuOC0zLjEtMjEuM2w1LjktMjkuM2M5LjEtNDUuNiA1NS4xLTczLjggOTkuOS02MS40bDMyLjUgOWM0Ni43IDEzIDg4IDQwLjggMTE3LjYgNzkuM2wyNC45IDMyLjMgNDAuNC0yMC4yYzE1LjgtNy45IDM1LTEuNSA0Mi45IDE0LjN6Il19LEN4dD1VaWUsamllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1jaGVjayIsaWNvbjpbNDQ4LDUxMixbOTc0NSw5OTg5LDYxNTEwLCJjaGVjay1zcXVhcmUiXSwiZjE0YSIsIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0zNDIgMTQ1LjdjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zTDE4OS4xIDMxNS4yIDEzNyAyNjMuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM1IDUgMTEuOSA3LjUgMTguOCA3czEzLjQtNC4xIDE3LjUtOS44TDM0Ny4zIDE3OS4yYzcuOC0xMC43IDUuNC0yNS43LTUuMy0zMy41eiJdfSxMeHQ9amllLFdpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYXRoIixpY29uOls1MTIsNTEyLFsxMjg3MDUsImJhdGh0dWIiXSwiZjJjZCIsIk05NiA3Ny4zYzAtNy4zIDUuOS0xMy4zIDEzLjMtMTMuMyAzLjUgMCA2LjkgMS40IDkuNCAzLjlsMTQuOSAxNC45Yy0zLjYgOS4xLTUuNSAxOC45LTUuNSAyOS4yIDAgMTkuOSA3LjIgMzggMTkuMiA1Mi01LjMgOS4yLTQgMjEuMSAzLjggMjkgOS40IDkuNCAyNC42IDkuNCAzMy45IDBMMjg5IDg5YzkuNC05LjQgOS40LTI0LjYgMC0zMy45LTcuOC03LjktMTkuOC05LjEtMjktMy44LTE0LTEyLTMyLjEtMTkuMi01Mi0xOS4yLTEwLjMgMC0yMC4yIDItMjkuMiA1LjVMMTYzLjkgMjIuNkMxNDkuNCA4LjEgMTI5LjcgMCAxMDkuMyAwIDY2LjYgMCAzMiAzNC42IDMyIDc3LjNMMzIgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgNDhjMCAyOC40IDEyLjQgNTQgMzIgNzEuNkw2NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2IDI1NiAwIDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQwLjRjMTkuNi0xNy42IDMyLTQzLjEgMzItNzEuNmwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDk2IDI1NiA5NiA3Ny4zeiJdfSxUeHQ9V2llLF94dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVzcy1iaXNob3AiLGljb246WzMyMCw1MTIsWzk4MjFdLCJmNDNhIiwiTTY0IDM4NEw0OC4zIDM2OC4zQzE3LjQgMzM3LjQgMCAyOTUuNCAwIDI1MS43IDAgMjEzLjEgMTMuNSAxNzUuOCAzOC4yIDE0Ni4xTDEwNi43IDY0IDk2IDY0Qzc4LjMgNjQgNjQgNDkuNyA2NCAzMlM3OC4zIDAgOTYgMEwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTAuNyAwIDQ3LjYgNTcuMS04NS45IDg1LjljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4Mi4zLTgyLjNjMTguNyAyNy4zIDI4LjcgNTkuNyAyOC43IDkzIDAgNDMuNy0xNy40IDg1LjctNDguMyAxMTYuNkwyNTYgMzg0IDMxMi4yIDQ1NC4zYzUgNi4zIDcuOCAxNC4xIDcuOCAyMi4yIDAgMTkuNi0xNS45IDM1LjUtMzUuNSAzNS41TDM1LjUgNTEyYy0xOS42IDAtMzUuNS0xNS45LTM1LjUtMzUuNSAwLTguMSAyLjctMTUuOSA3LjgtMjIuMkw2NCAzODR6Il19LEdpZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwcmVzY3JpcHRpb24tYm90dGxlLW1lZGljYWwiLGljb246WzM4NCw1MTIsWyJwcmVzY3JpcHRpb24tYm90dGxlLWFsdCJdLCJmNDg2IiwiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NEwwIDMyek0zMiAxNDRsMzIwIDAgMCAzMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMwNHpNMTYwIDI0OGwwIDQwLTQwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0MCAwIDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDAgNDAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQwIDAgMC00MGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXX0sQXh0PUdpZSxZaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZHJhdy1wb2x5Z29uIixpY29uOls1MTIsNTEyLFs1ODA1NSwidmVjdG9yLXBvbHlnb24iXSwiZjVlZSIsIk02NCAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMmwyNzMuMSAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAzNC0yNi41IDYxLjgtNjAgNjMuOWwtMi4xIDIuOS03MS41IDk5LjFjMy42IDggNS42IDE2LjkgNS42IDI2LjJzLTIgMTguMi01LjYgMjYuMmwyLjIgMy4xIDY5LjMgOTYgMi4xIDIuOWMzMy41IDIuMSA2MCAyOS45IDYwIDYzLjkgMCAzNS4zLTI4LjcgNjQtNjQgNjQtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0yNzMuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGwwLTI3My4xQzEyLjkgMTA4LjQgMCA4Ny43IDAgNjQgMCAyOC43IDI4LjcgMCA2NCAwek0zOTQuMiA0MTMuNGwtNjUuNS05MC42LTIuMi0zLjFjLTIuMSAuMi00LjMgLjMtNi41IC4zLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMi4yIDAgNC40IC4xIDYuNSAuM2w2Ny43LTkzLjdjLS42LS45LTEuMS0xLjctMS42LTIuNkwxMTkuNCA5NmMtNS42IDkuNy0xMy43IDE3LjgtMjMuNCAyMy40bDAgMjczLjFjOS43IDUuNiAxNy44IDEzLjcgMjMuNCAyMy40bDI3My4xIDBjLjUtLjkgMS4xLTEuOCAxLjYtMi42eiJdfSwkeHQ9WWllLER4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpLWN1cnNvciIsaWNvbjpbMjU2LDUxMixbXSwiZjI0NiIsIk0uMSAyOS4zQy0xLjQgNDcgMTEuNyA2Mi40IDI5LjMgNjMuOWw4IC43QzcwLjUgNjcuMyA5NiA5NSA5NiAxMjguM2wwIDk1LjctMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgOTUuN2MwIDMzLjMtMjUuNSA2MS01OC43IDYzLjhsLTggLjdDMTEuNyA0NDkuNi0xLjQgNDY1IC4xIDQ4Mi43UzE3IDUxMy40IDM0LjcgNTExLjlsOC0uN2MzNC4xLTIuOCA2NC4yLTE4LjkgODUuNC00Mi45IDIxLjIgMjQgNTEuMiA0MCA4NS40IDQyLjlsOCAuN2MxNy42IDEuNSAzMy4xLTExLjYgMzQuNS0yOS4ycy0xMS42LTMzLjEtMjkuMi0zNC41bC04LS43QzE4NS41IDQ0NC43IDE2MCA0MTcgMTYwIDM4My43bDAtOTUuNyAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtOTUuN2MwLTMzLjMgMjUuNS02MSA1OC43LTYzLjhsOC0uN2MxNy42LTEuNSAzMC43LTE2LjkgMjkuMi0zNC41UzIzOS0xLjQgMjIxLjMgLjFsLTggLjdjLTM0LjEgMi44LTY0LjIgMTguOS04NS40IDQyLjktMjEuMi0yNC01MS4yLTQwLTg1LjQtNDIuOWwtOC0uN0MxNy0xLjQgMS42IDExLjcgLjEgMjkuM3oiXX0sRXh0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYXJ0LWNpcmNsZS1wbHVzIixpY29uOls1NzYsNTEyLFtdLCJlNTAwIiwiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTQzMiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0xNiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNDggMCAwIDQ4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC00OCA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC00OCAwIDAtNDh6Il19LE54dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaGllbGQtZG9nIixpY29uOls1MTIsNTEyLFtdLCJlNTczIiwiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yIC41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMiAxNi43IDggMzYuMSA4IDUyLjggMCAxNzIuNC04Mi41IDIxMy4yLTI2NCAyMTMuNi0zNjMuMiAuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0xNjAuOSAyODYuMmM0LjggMS4yIDkuOSAxLjggMTUuMSAxLjggMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NCA0NC4yIDBjMTIuMSAwIDIzLjIgNi44IDI4LjYgMTcuN2w3LjIgMTQuMyA2NCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgNDQuMi0zNS44IDgwLTgwIDgwbC00OCAwIDAgNTAuN2MwIDcuMy01LjkgMTMuMy0xMy4zIDEzLjMtMS44IDAtMy42LS40LTUuMi0xLjFsLTk4LjctNDIuM2MtNi42LTIuOC0xMC44LTkuMy0xMC44LTE2LjQgMC0yLjggLjYtNS41IDEuOS04bDE1LTMwek0xNjAgMTYwbDQ4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnptMTI4IDQ4YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6Il19LFB4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJncmVhdGVyLXRoYW4tZXF1YWwiLGljb246WzQ0OCw1MTIsW10sImY1MzIiLCJNMjEuOSA5NC40QzUuMSA4OC44LTMuOSA3MC42IDEuNyA1My45UzI1LjQgMjguMSA0Mi4xIDMzLjZsMzg0IDEyOEM0MzkuMiAxNjYgNDQ4IDE3OC4yIDQ0OCAxOTJzLTguOCAyNi0yMS45IDMwLjRsLTM4NCAxMjhjLTE2LjggNS42LTM0LjktMy41LTQwLjUtMjAuMnMzLjUtMzQuOSAyMC4yLTQwLjVMMzE0LjggMTkyIDIxLjkgOTQuNHpNNDE2IDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDB6Il19LEl4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlbnZlbG9wZS1vcGVuIixpY29uOls1MTIsNTEyLFs2MjEzNV0sImYyYjYiLCJNNjQuNCAxNzUuOEwyNTYgMzMuOSA0NDcuNiAxNzUuOCAyODkuNSAyOTNjLTkuNyA3LjItMjEuNCAxMS0zMy41IDExcy0yMy44LTMuOS0zMy41LTExTDY0LjQgMTc1Ljh6TTI1Ni0zMmMtMTIuMSAwLTIzLjggMy45LTMzLjUgMTFMMjUuOSAxMjQuN0M5LjYgMTM2LjggMCAxNTUuOCAwIDE3Ni4xTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjM5LjljMC0yMC4zLTkuNi0zOS40LTI1LjktNTEuNEwyODkuNS0yMWMtOS43LTcuMi0yMS40LTExLTMzLjUtMTF6Il19LEZ4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb3VuZCIsaWNvbjpbNTEyLDUxMixbXSwiZTUyZCIsIk0xMTIuNCAxNzkuMkMxNDIgMTI3LjcgMTk2LjggOTYgMjU2LjIgOTZzMTE0LjIgMzEuNyAxNDMuOSA4My4yTDUwOC43IDM2OGMxMi4zIDIxLjMtMy4xIDQ4LTI3LjcgNDhMMzEuNSA0MTZjLTI0LjYgMC00MC0yNi42LTI3LjctNDhMMTEyLjQgMTc5LjJ6Il19LE94dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2b2ljZW1haWwiLGljb246WzY0MCw1MTIsW10sImY4OTciLCJNMTQ0IDE2MGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNMjYzLjggMzIwYzE1LjMtMjIuOSAyNC4yLTUwLjQgMjQuMi04MCAwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NFMwIDE2MC41IDAgMjQwIDY0LjUgMzg0IDE0NCAzODRsMzUyIDBjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRTNTc1LjUgOTYgNDk2IDk2IDM1MiAxNjAuNSAzNTIgMjQwYzAgMjkuNiA4LjkgNTcuMSAyNC4yIDgwbC0xMTIuNSAwek00OTYgMTYwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYweiJdfSxCeHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidmVzdCIsaWNvbjpbNDQ4LDUxMixbXSwiZTA4NSIsIk0yMDAgNDY0bDAtMTcwLjFjMC0zLjktLjUtNy44LTEuNC0xMS42TDE0NC40IDY1LjRDMTYyLjEgNzcuMiAxODguMiA4OCAyMjQgODhzNjEuOS0xMC44IDc5LjYtMjIuNkwyNDkuNCAyODIuM2MtMSAzLjgtMS40IDcuNy0xLjQgMTEuNkwyNDggNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEwNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkzLjVjMC05LjUtMi44LTE4LjctOC4xLTI2LjZsLTQ3LjktNzEuOGMtNS4zLTcuOS04LjEtMTcuMS04LjEtMjYuNkwzODQgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMuNSAwYy0uMyAwLS42IDAtMSAwLS42IDAtMS4yIDAtMS44IDAtMTguOCAwLTM0LjEgOS43LTQ0LjEgMTguOC05LjMgOC40LTI4LjUgMjEuMi02MS43IDIxLjJzLTUyLjQtMTIuOC02MS43LTIxLjJjLTEwLTkuMS0yNS4zLTE4LjgtNDQuMS0xOC44LS42IDAtMS4yIDAtMS44IDAtLjMgMC0uNiAwLTEgMEwxMTIgMEM4NS41IDAgNjQgMjEuNSA2NCA0OGwwIDk3LjVjMCA5LjUtMi44IDE4LjctOC4xIDI2LjZMOC4xIDI0My45QzIuOCAyNTEuOCAwIDI2MS4xIDAgMjcwLjVMMCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMTA0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6Il19LFJ4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhdWRpby1kZXNjcmlwdGlvbiIsaWNvbjpbNTEyLDUxMixbXSwiZjI5ZSIsIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em05NiA5NmwwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjQgNDggMCAwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTE2IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0em00OCAzMmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyLTQ4IDB6bTE1Mi05NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMzOS44IDAgNzItMzIuMiA3Mi03MmwwLTQ4YzAtMzkuOC0zMi4yLTcyLTcyLTcybC00OCAwem00OCAxNDRsLTI0IDAgMC05NiAyNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjR6Il19LEh4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3IixpY29uOls1NzYsNTEyLFsxMTldLCI1NyIsIk0yMC44IDM0YzE2LjUtNi4yIDM1IDIuMiA0MS4yIDE4LjdMMTcyLjIgMzQ2LjcgMjU3LjMgNTVjNC0xMy43IDE2LjUtMjMgMzAuNy0yM3MyNi43IDkuNCAzMC43IDIzTDQwMy44IDM0Ni43IDUxNCA1Mi44YzYuMi0xNi41IDI0LjYtMjQuOSA0MS4yLTE4LjdTNTgwLjIgNTguNyA1NzQgNzUuMmwtMTQ0IDM4NGMtNC44IDEyLjktMTcuNCAyMS4zLTMxLjIgMjAuN3MtMjUuNy05LjgtMjkuNS0yM0wyODggMTc4LjMgMjA2LjcgNDU3Yy0zLjkgMTMuMi0xNS44IDIyLjUtMjkuNSAyM3MtMjYuMy03LjgtMzEuMi0yMC43TDIgNzUuMkMtNC4yIDU4LjcgNC4yIDQwLjIgMjAuOCAzNHoiXX0sSFY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZXllLWRyb3BwZXIiLGljb246WzUxMiw1MTIsWyJleWUtZHJvcHBlci1lbXB0eSIsImV5ZWRyb3BwZXIiXSwiZjFmYiIsIk0zNDEuNiAyOS4ybC0xMDEuNiAxMDEuNi05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjQgMTAxLjYtMTAxLjZjMzktMzkgMzktMTAyLjIgMC0xNDEuMXMtMTAyLjItMzktMTQxLjEgMHpNNTUuNCAzMjMuM2MtMTUgMTUtMjMuNCAzNS40LTIzLjQgNTYuNmwwIDQyLjQtMjYuNiAzOS45Yy04LjUgMTIuNy02LjggMjkuNiA0IDQwLjRzMjcuNyAxMi41IDQwLjQgNGwzOS45LTI2LjYgNDIuNCAwYzIxLjIgMCA0MS42LTguNCA1Ni42LTIzLjRsMTA5LjQtMTA5LjQtNDUuMy00NS4zLTEwOS40IDEwOS40Yy0zIDMtNy4xIDQuNy0xMS4zIDQuN2wtMzYuMSAwIDAtMzYuMWMwLTQuMiAxLjctOC4zIDQuNy0xMS4zbDEwOS40LTEwOS40LTQ1LjMtNDUuMy0xMDkuNCAxMDkuNHoiXX0scXh0PUhWLFZ4dD1IVixhNT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUteG1hcmsiLGljb246WzUxMiw1MTIsWzYxNTMyLCJ0aW1lcy1jaXJjbGUiLCJ4bWFyay1jaXJjbGUiXSwiZjA1NyIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY3IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXX0sVXh0PWE1LGp4dD1hNSxXeHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJhaWxlciIsaWNvbjpbNjQwLDUxMixbXSwiZTA0MSIsIk0zMiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yOTYuNCAwYy4yIDIuNiAuNCA1LjMgLjQgOCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTIuNyAuMS01LjQgLjQtOEw5NiA0MTZjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDk2em00MDggMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTYwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNjBjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTExMiAxMzZsMCAxNjBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptMTc2LTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE2MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYwYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0yNjQgNDI0YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6Il19LHFWPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InR1cmtpc2gtbGlyYS1zaWduIixpY29uOls0NDgsNTEyLFsidHJ5IiwidHVya2lzaC1saXJhIl0sImUyYmIiLCJNMTYwIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDMuNiAxMjEuNC0zNC43YzEyLjctMy42IDI2IDMuNyAyOS43IDE2LjVzLTMuNyAyNi0xNi41IDI5LjdsLTEzNC42IDM4LjUgMCA0Ni4xIDEyMS40LTM0LjdjMTIuNy0zLjYgMjYgMy43IDI5LjcgMTYuNXMtMy43IDI2LTE2LjUgMjkuN2wtMTM0LjYgMzguNSAwIDE2Mi41IDcyIDBjNTMgMCA5Ni00MyA5Ni05NiAwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyYzAgODguNC03MS42IDE2MC0xNjAgMTYwbC0xMDQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNzYuMi0yNS40IDcuM2MtMTIuNyAzLjYtMjYtMy43LTI5LjctMTYuNXMzLjctMjYgMTYuNS0yOS43bDM4LjYtMTEgMC00Ni4xLTI1LjQgNy4zYy0xMi43IDMuNi0yNi0zLjctMjkuNy0xNi41czMuNy0yNiAxNi41LTI5LjdsMzguNi0xMSAwLTYxLjljMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LEd4dD1xVixZeHQ9cVYsWnh0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZvbGNhbm8iLGljb246WzUxMiw1MTIsWzEyNzc1NV0sImY3NzAiLCJNMTYwIDE0NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxNS43IDAgMzAgNS42IDQxLjIgMTUgMTEuMi0xOC42IDMxLjYtMzEgNTQuOC0zMXM0My42IDEyLjQgNTQuOCAzMWMxMS4xLTkuNCAyNS41LTE1IDQxLjItMTUgMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRjLTE0LjcgMC0yOC4zLTUtMzkuMS0xMy4zbC0zMiA0OEMyNzUuMyAxODcgMjY2IDE5MiAyNTYgMTkycy0xOS4zLTUtMjQuOS0xMy4zbC0zMi00OEMxODguMyAxMzkgMTc0LjcgMTQ0IDE2MCAxNDR6TTE0NCAzNTJsNDguNC0yNC4yYzEwLjItNS4xIDIxLjYtNy44IDMzLTcuOCAxOS42IDAgMzguNCA3LjggNTIuMiAyMS42bDMyLjUgMzIuNWM2LjMgNi4zIDE0LjkgOS45IDIzLjggOS45IDExLjMgMCAyMS44LTUuNiAyOC0xNWw5LjctMTQuNi01OS02Ni4zYy05LjEtMTAuMi0yMi4yLTE2LjEtMzUuOS0xNi4xbC00MS44IDBjLTEzLjcgMC0yNi44IDUuOS0zNS45IDE2LjFsLTU5LjkgNjcuNCA0LjctMy41em0xOS40LTk1LjhjMTguMi0yMC41IDQ0LjMtMzIuMiA3MS44LTMyLjJsNDEuOCAwYzI3LjQgMCA1My41IDExLjcgNzEuOCAzMi4ybDE1MC4yIDE2OWM4LjUgOS41IDEzLjIgMjEuOSAxMy4yIDM0LjcgMCAyOC44LTIzLjQgNTIuMi01Mi4yIDUyLjJMNTIuMiA1MTJDMjMuNCA1MTIgMCA0ODguNiAwIDQ1OS44IDAgNDQ3LjEgNC43IDQzNC43IDEzLjIgNDI1LjJsMTUwLjItMTY5eiJdfSxYeHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2FuZC1zcGFya2xlcyIsaWNvbjpbNTEyLDUxMixbXSwiZjcyYiIsIk00NjQgNi4xYzkuNS04LjUgMjQtOC4xIDMzIC45bDggOGM5IDkgOS40IDIzLjUgLjkgMzNsLTg1LjggOTUuOWMtMi42IDIuOS00LjEgNi43LTQuMSAxMC43bDAgMjEuNGMwIDguOC03LjIgMTYtMTYgMTZsLTE1LjggMGMtNC42IDAtOC45IDEuOS0xMS45IDUuM0wxMDAuNyA1MDAuOWMtNi4zIDcuMS0xNS4zIDExLjEtMjQuOCAxMS4xLTguOCAwLTE3LjMtMy41LTIzLjUtOS44TDkuNyA0NTkuN2MtNi4yLTYuMi05LjctMTQuNy05LjctMjMuNSAwLTkuNSA0LTE4LjUgMTEuMS0yNC44bDExMS42LTk5LjhjMy40LTMgNS4zLTcuNCA1LjMtMTEuOWwwLTI3LjZjMC04LjggNy4yLTE2IDE2LTE2bDM0LjYgMGMzLjkgMCA3LjctMS41IDEwLjctNC4xTDQ2NCA2LjF6TTQzMiAyODhjMy42IDAgNi43IDIuNCA3LjcgNS44bDE0LjggNTEuNyA1MS43IDE0LjhjMy40IDEgNS44IDQuMSA1LjggNy43cy0yLjQgNi43LTUuOCA3LjdsLTUxLjcgMTQuOC0xNC44IDUxLjdjLTEgMy40LTQuMSA1LjgtNy43IDUuOHMtNi43LTIuNC03LjctNS44bC0xNC44LTUxLjctNTEuNy0xNC44Yy0zLjQtMS01LjgtNC4xLTUuOC03LjdzMi40LTYuNyA1LjgtNy43bDUxLjctMTQuOCAxNC44LTUxLjdjMS0zLjQgNC4xLTUuOCA3LjctNS44ek04Ny43IDY5LjhsMTQuOCA1MS43IDUxLjcgMTQuOGMzLjQgMSA1LjggNC4xIDUuOCA3LjdzLTIuNCA2LjctNS44IDcuN2wtNTEuNyAxNC44LTE0LjggNTEuN2MtMSAzLjQtNC4xIDUuOC03LjcgNS44cy02LjctMi40LTcuNy01LjhMNTcuNSAxNjYuNSA1LjggMTUxLjdjLTMuNC0xLTUuOC00LjEtNS44LTcuN3MyLjQtNi43IDUuOC03LjdsNTEuNy0xNC44IDE0LjgtNTEuN2MxLTMuNCA0LjEtNS44IDcuNy01LjhzNi43IDIuNCA3LjcgNS44ek0yMDggMGMzLjcgMCA2LjkgMi41IDcuOCA2LjFsNi44IDI3LjMgMjcuMyA2LjhjMy42IC45IDYuMSA0LjEgNi4xIDcuOHMtMi41IDYuOS02LjEgNy44bC0yNy4zIDYuOC02LjggMjcuM2MtLjkgMy42LTQuMSA2LjEtNy44IDYuMXMtNi45LTIuNS03LjgtNi4xbC02LjgtMjcuMy0yNy4zLTYuOGMtMy42LS45LTYuMS00LjEtNi4xLTcuOHMyLjUtNi45IDYuMS03LjhsMjcuMy02LjggNi44LTI3LjNjLjktMy42IDQuMS02LjEgNy44LTYuMXoiXX0sUXh0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1pY3JvcGhvbmUiLGljb246WzM4NCw1MTIsW10sImYxMzAiLCJNMTkyIDBDMTM5IDAgOTYgNDMgOTYgOTZsMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2ek00OCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxNzAuNyAwIDE4NGwwIDQwYzAgOTcuOSA3My4zIDE3OC43IDE2OCAxOTAuNWwwIDQ5LjUtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ5LjVjOTQuNy0xMS44IDE2OC05Mi42IDE2OC0xOTAuNWwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTNDggMzAzLjUgNDggMjI0bDAtNDB6Il19LEt4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjcm93biIsaWNvbjpbNTc2LDUxMixbMTI4MDgxXSwiZjUyMSIsIk0zMTMgODcuMmM5LjItNy4zIDE1LTE4LjYgMTUtMzEuMiAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDEyLjYgNS45IDIzLjkgMTUgMzEuMkwxOTQuNiAxOTQuOGMtMTAgMTUuNy0zMS4zIDE5LjYtNDYuMiA4LjRMODguOSAxNTguN2M0LjUtNi40IDcuMS0xNC4zIDcuMS0yMi43IDAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgMjEuOCAxNy41IDM5LjYgMzkuMiA0MEw4Ny44IDM5My41YzQuNyAzMS4zIDMxLjYgNTQuNSA2My4zIDU0LjVsMjczLjggMGMzMS43IDAgNTguNi0yMy4yIDYzLjMtNTQuNUw1MjAuOCAxNzZjMjEuNy0uNCAzOS4yLTE4LjIgMzkuMi00MCAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDguNCAyLjYgMTYuMyA3LjEgMjIuN2wtNTkuNCA0NC42Yy0xNC45IDExLjItMzYuMiA3LjMtNDYuMi04LjRMMzEzIDg3LjJ6Il19LEp4dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW50LWFycm93LXR1cm4tbGVmdCIsaWNvbjpbNTEyLDUxMixbXSwiZTU4MCIsIk0tLjUgMTEzbDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMzEtMzEgMzUwLjEgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNGMwLTQ4LjYtMzkuNC04OC04OC04OGwtMzUwLjEgMCAzMS0zMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOVM4MC45LTIuMyA3MS41IDdMLS41IDc5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXpNNjAuMyAyOTIuNkwzNy4xIDQ3NmMtMi40IDE5LjEgMTIuNSAzNiAzMS43IDM2bDE1NC41IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMTcuNGMwLTUuOSA0LjctMTAuNiAxMC42LTEwLjYgNCAwIDcuNyAyLjMgOS41IDUuOWw2OC4yIDEzNi41YzUuNCAxMC44IDE2LjUgMTcuNyAyOC42IDE3LjdsNzEuOSAwYzE5LjMgMCAzNC4yLTE2LjkgMzEuNy0zNkw0NTIuNyAyOTIuN2MtMS4yLTkuNy02LjktMTguNC0xNS4zLTIzLjRMMjcxLjkgMTY5LjljLTEwLjItNi4xLTIyLjktNi4xLTMzLjEgLjFMNzUuNCAyNjkuM2MtOC4zIDUuMS0xMy45IDEzLjctMTUuMSAyMy4zeiJdfSxaaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJ1Y2stZmFzdCIsaWNvbjpbNjQwLDUxMixbInNoaXBwaW5nLWZhc3QiXSwiZjQ4YiIsIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyIDUwLjcgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w2MjEuMyAxOTJjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0w2NDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zLjMgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjRsLTEwMi42IDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0bC0zLjMgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC00OC00MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDI0MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwyNCAxNDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0UzEwLjcgOTYgMjQgOTZsNDAgMHpNNTc2IDI4OGwwLTUwLjctNDUuMy00NS4zLTUwLjcgMCAwIDk2IDk2IDB6TTI1NiA0MjRhNDAgNDAgMCAxIDAgLTgwIDAgNDAgNDAgMCAxIDAgODAgMHptMjMyIDQwYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHoiXX0sZWJ0PVppZSxYaWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1wZW4iLGljb246WzY0MCw1MTIsWyJ1c2VyLWVkaXQiXSwiZjRmZiIsIk0yNTYuMSAyNDhhMTIwIDEyMCAwIDEgMCAwLTI0MCAxMjAgMTIwIDAgMSAwIDAgMjQwem0tMjkuNyA1NmMtOTguNSAwLTE3OC4zIDc5LjgtMTc4LjMgMTc4LjMgMCAxNi40IDEzLjMgMjkuNyAyOS43IDI5LjdsMTk2LjUgMCAxMC45LTU0LjVjNC4zLTIxLjcgMTUtNDEuNiAzMC42LTU3LjJsNjcuMy02Ny4zYy0yOC0xOC4zLTYxLjQtMjguOS05Ny40LTI4LjlsLTU5LjQgMHpNMzMyLjMgNDY2LjlsLTExLjkgNTkuNmMtLjIgLjktLjMgMS45LS4zIDIuOSAwIDggNi41IDE0LjYgMTQuNiAxNC42IDEgMCAxLjktLjEgMi45LS4zbDU5LjYtMTEuOWMxMi40LTIuNSAyMy44LTguNiAzMi43LTE3LjVsMTE4LjktMTE4LjktODAtODAtMTE4LjkgMTE4LjljLTguOSA4LjktMTUgMjAuMy0xNy41IDMyLjd6bTI2Ny44LTEyM2MyMi4xLTIyLjEgMjIuMS01Ny45IDAtODBzLTU3LjktMjIuMS04MCAwbC0yOC44IDI4LjggODAgODAgMjguOC0yOC44eiJdfSx0YnQ9WGllLGFidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLWNsb2NrIixpY29uOls1NzYsNTEyLFtdLCJmNGZkIiwiTTIyNCA4YTEyMCAxMjAgMCAxIDEgMCAyNDAgMTIwIDEyMCAwIDEgMSAwLTI0MHpNMTk0LjMgMzA0bDU5LjQgMGMzLjkgMCA3LjkgLjEgMTEuOCAuNC0xNi4yIDI4LjItMjUuNSA2MC44LTI1LjUgOTUuNiAwIDQxLjggMTMuNCA4MC41IDM2IDExMkw0NS43IDUxMkMyOS4zIDUxMiAxNiA0OTguNyAxNiA0ODIuMyAxNiAzODMuOCA5NS44IDMwNCAxOTQuMyAzMDR6TTI4OCA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQ0LTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsNDggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMzIgMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNnoiXX0scmJ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNob3dlciIsaWNvbjpbNTEyLDUxMixbMTI4NzAzXSwiZjJjYyIsIk02NCAxMzEuOWMwLTE5LjggMTYuMS0zNS45IDM1LjktMzUuOSA5LjUgMCAxOC42IDMuOCAyNS40IDEwLjVsMTYuMiAxNi4yYy0yMSAzOC45LTE3LjQgODcuNSAxMC45IDEyM0wxNTEgMjQ3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBMMzQ1IDEyMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0xLjMgMS4zYy0zNS41LTI4LjMtODQuMS0zMS45LTEyMy0xMC45TDE3MC41IDYxLjNDMTUxLjggNDIuNSAxMjYuNCAzMiA5OS45IDMyIDQ0LjcgMzIgMCA3Ni43IDAgMTMxLjlMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMxNi4xek0yNTYgMzUyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptNjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC0xMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em02NCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0wLTEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTY0IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTMyLTMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0sUWllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1jYXJldC11cCIsaWNvbjpbNDQ4LDUxMixbImNhcmV0LXNxdWFyZS11cCJdLCJmMTUxIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIyNCAxNjBjNi43IDAgMTMgMi44IDE3LjYgNy43bDEwNCAxMTJjNi41IDcgOC4yIDE3LjIgNC40IDI1LjlTMzM3LjUgMzIwIDMyOCAzMjBsLTIwOCAwYy05LjUgMC0xOC4yLTUuNy0yMi0xNC40cy0yLjEtMTguOSA0LjQtMjUuOWwxMDQtMTEyYzQuNS00LjkgMTAuOS03LjcgMTcuNi03Ljd6Il19LGlidD1RaWUsS2llPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcC1sb2NhdGlvbiIsaWNvbjpbNjQwLDUxMixbIm1hcC1tYXJrZWQiXSwiZjU5ZiIsIk01NzYgNDhjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRMNDEzLjUgNzcuNSAyMzQuMSAxNy42Yy04LjEtMi43LTE2LjgtMi4xLTI0LjQgMS43bC0xMjggNjRDNzAuOCA4OC44IDY0IDk5LjkgNjQgMTEybDAgMzUyYzAgMTEuMSA1LjcgMjEuNCAxNS4yIDI3LjJzMjEuMiA2LjQgMzEuMSAxLjRsMTE2LjEtNTguMSAxNzMuMyA1Ny44Yy00LjMtNi40LTguNS0xMy4xLTEyLjYtMTkuOS0xMS0xOC4zLTIxLjktMzkuMy0zMC02MS44bC0xMDEuMi0zMy43IDAtMjg0LjUgMTI4IDQyLjcgMCA5OS4zYzMxLTM1LjggNzctNTguNCAxMjgtNTguNCAyMi42IDAgNDQuMiA0LjQgNjQgMTIuNUw1NzYgNDh6TTM5MiAzNDEuOWMwIDY4LjkgNjQuMSAxNTAuNCA5OC42IDE4OS4zIDExLjYgMTMgMzEuMyAxMyA0Mi45IDAgMzQuNS0zOC45IDk4LjYtMTIwLjQgOTguNi0xODkuMyAwLTY1LjEtNTMuNy0xMTcuOS0xMjAtMTE3LjlTMzkyIDI3Ni44IDM5MiAzNDEuOXoiXX0sb2J0PUtpZSxzYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVuLWZhbmN5IixpY29uOls1MTIsNTEyLFsxMjgzOTUsMTAwMDJdLCJmNWFjIiwiTTM3My41IDI3LjFjMTUtMTcuMiAzNi43LTI3LjEgNTkuNi0yNy4xIDQzLjYgMCA3OSAzNS40IDc5IDc5IDAgMjIuOC05LjkgNDQuNi0yNy4xIDU5LjZMMjgzLjcgMzEzLjggMjczIDMwMyAyMDkgMjM5IDE5OC4yIDIyOC4zIDM3My41IDI3LjF6TTE2MS4xIDI1OUMxNjIgMjYwIDE4OCAyODYgMjM5IDMzN2wxMy45IDEzLjktMTcuMSA3NC4yYy0zLjkgMTcuMS0xNi45IDMwLjctMzMuOCAzNS40bC0xNjkuOCA0Ny41IDkyLjMtOTIuM2MxLjIgLjEgMi4zIC4yIDMuNSAuMiAxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyYzAgMS4yIC4xIDIuNCAuMiAzLjVMMy45IDQ3OS44IDUxLjUgMzEwYzQuNy0xNi45IDE4LjMtMjkuOSAzNS40LTMzLjhMMTYxLjEgMjU5eiJdfSxWVj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJldXJvLXNpZ24iLGljb246WzQ0OCw1MTIsWzgzNjQsImV1ciIsImV1cm8iXSwiZjE1MyIsIk03My4zIDE5MkMxMDAuOCA5OS41IDE4Ni41IDMyIDI4OCAzMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy02NS42IDAtMTIyIDM5LjUtMTQ2LjcgOTZMMjcyIDE5MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQzLjIgMGMtLjUgNS4zLS44IDEwLjYtLjggMTZzLjMgMTAuNyAuOCAxNkwyNzIgMjcyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMzAuNyAwYzI0LjcgNTYuNSA4MS4xIDk2IDE0Ni43IDk2bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTEwMS41IDAtMTg3LjItNjcuNS0yMTQuNy0xNjBMNDAgMzIwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI0LjYgMGMtLjctMTAuNS0uNy0yMS41IDAtMzJMNDAgMjQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDMzLjMgMHoiXX0sbmJ0PVZWLGxidD1WVixjYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtY2lyY2xlLXhtYXJrIixpY29uOls2NDAsNTEyLFtdLCJlNTBiIiwiTTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMSAwLTI4OCAxNDQgMTQ0IDAgMSAxIDAgMjg4ek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDIxNy42IDIwMmMtMTAuMi0xLjctMjAuNy0yLjYtMzEuMy0yLjYtNzguNiAwLTE0Ni4yIDQ3LjItMTc1LjkgMTE0LjgtNS0xLjgtMTAuNS0yLjgtMTYuMS0yLjhsLTMyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgOTAuOSAwYzYuMSAxNy4zIDE0LjYgMzMuNCAyNS4yIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNTU1LjMgMzQwLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwbC0zNi43IDM2LjctMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDM2LjcgMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzNi43LTM2LjcgMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzYuNy0zNi43IDM2LjctMzYuN2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnoiXX0sZGJ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxpcmEtc2lnbiIsaWNvbjpbMzg0LDUxMixbODM1Nl0sImYxOTUiLCJNODQuOSAyNTZsLTI4LjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMS42IDBDNTMuMiAxMjQuNyAxMTYuOCA0MiAyMDcuNiA0Mmw4LjIgMGMzMy42IDAgNjYuMiAxMS4zIDkyLjUgMzIuMmwxNi4xIDEyLjdjMTMuOSAxMSAxNi4yIDMxLjEgNS4yIDQ1cy0zMS4xIDE2LjItNDUgNS4ybC0xNi4xLTEyLjdjLTE1LTExLjktMzMuNi0xOC40LTUyLjgtMTguNGwtOC4yIDBjLTUzLjggMC05MC4xIDUyLjktNzMuNSAxMDJsMTYyLjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ1LjEgMGMyLjMgMTAuNiAzLjYgMjEuMyAzLjkgMzJsMTQxLjIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwxNTAgMzM2Yy00LjggMTguNi0xMi42IDM2LjUtMjMuNiA1Mi45bC0xOC4xIDI3LjEgMjEyLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjcyIDBjLTExLjggMC0yMi42LTYuNS0yOC4yLTE2LjlzLTUtMjMgMS42LTMyLjlsNTEuMi03Ni44YzMuNy01LjYgNi45LTExLjQgOS40LTE3LjRsLTI2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMzQuOCAwYy0uNS0xMC44LTIuNi0yMS42LTYuNC0zMnoiXX0sSjY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToieWVuLXNpZ24iLGljb246WzM4NCw1MTIsWzE2NSwiY255IiwianB5Iiwicm1iIiwieWVuIl0sImYxNTciLCJNNzQuOSA0Ni43Yy05LjYtMTQuOS0yOS40LTE5LjItNDQuMi05LjZTMTEuNSA2Ni40IDIxLjEgODEuM0wxNDMuNyAyNzIgODggMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDAgMCAzMi03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDAgMCA0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDggNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMCAwLTMyIDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU1LjcgMCAxMjIuNi0xOTAuN2M5LjYtMTQuOSA1LjMtMzQuNy05LjYtNDQuMnMtMzQuNy01LjMtNDQuMiA5LjZMMTkyIDIyOC44IDc0LjkgNDYuN3oiXX0sZmJ0PUo2LHVidD1KNixwYnQ9SjYsaGJ0PUo2LG1idD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib3gtb3BlbiIsaWNvbjpbNjQwLDUxMixbXSwiZjQ5ZSIsIk01NjAuMyAyMzcuMmMxMC40IDExLjggMjguMyAxNC40IDQxLjggNS41IDE0LjctOS44IDE4LjctMjkuNyA4LjktNDQuNGwtNDgtNzJjLTIuOC00LjItNi42LTcuNy0xMS4xLTEwLjJMMzUxLjQgNC43Yy0xOS4zLTEwLjctNDIuOC0xMC43LTYyLjIgMEw4OC44IDExNmMtNS40IDMtOS43IDcuNC0xMi42IDEyLjhMMjcuNyAyMTguN2MtMTIuNiAyMy40LTMuOCA1Mi41IDE5LjYgNjUuMWwzMyAxNy43IDAgNTMuM2MwIDIzIDEyLjQgNDQuMyAzMi40IDU1LjdsMTc2IDk5LjdjMTkuNiAxMS4xIDQzLjUgMTEuMSA2My4xIDBsMTc2LTk5LjdjMjAuMS0xMS40IDMyLjQtMzIuNiAzMi40LTU1LjdsMC0xMTcuNXptLTI0MC05LjhMMTcwLjIgMTQ0IDMyMC4zIDYwLjYgNDcwLjQgMTQ0IDMyMC4zIDIyNy40em0tNDEuNSA1MC4ybC0yMS4zIDQ2LjItMTY1LjgtODguOCAyNS40LTQ3LjIgMTYxLjcgODkuOHoiXX0sZ2J0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRydWNrLWZpZWxkIixpY29uOls2NDAsNTEyLFtdLCJlNThkIiwiTTMyIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDIyNCAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMmw0MC40IDBjMzIuNCAwIDYxLjYgMTkuNiA3NCA0OS41bDQzLjggMTA2LjMgMS43IDQuMiAyNC43IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtLjQgMGMuMiAyLjYgLjQgNS4zIC40IDggMCA0OC42LTM5LjQgODgtODggODhzLTg4LTM5LjQtODgtODhjMC0yLjcgLjEtNS40IC40LThsLTE0NC43IDBjLjIgMi42IC40IDUuMyAuNCA4IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMy42IC4yLTcuMSAuNi0xMC41LTE5LTYuNC0zMi42LTI0LjQtMzIuNi00NS41bDAtNDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMC0zMnptMzUyIDMybDAgOTYgODIuMSAwLTM1LjQtODYuMWMtMi41LTYtOC4zLTkuOS0xNC44LTkuOUwzODQgMTI4ek0xOTIgMzkyYTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6bTI4MCA0MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il19LHhidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsb2NhdGlvbi1waW4tbG9jayIsaWNvbjpbNTEyLDUxMixbXSwiZTUxZiIsIk0wIDE4OC42QzAgODQuNCA4NiAwIDE5MiAwIDI5NC4xIDAgMzc3LjYgNzguMyAzODMuNiAxNzcgMzIwLjcgMTg1LjEgMjcyIDIzOC44IDI3MiAzMDRsMCAyNC40Yy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgNzUuN2MtOS45IDExLjYtMTguOSAyMS43LTI2LjQgMjkuOC0xMS44IDEyLjgtMzEuNSAxMi44LTQzLjMgMC01MC4yLTU0LjUtMTcwLjQtMTk3LjUtMTcwLjQtMzE2Ljh6TTE5MiAyNTZhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6bTI0MCA0OC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNMjg4IDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXX0sSmllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1wcmF5aW5nIixpY29uOlszODQsNTEyLFsxMjg3MjAsInByYXkiXSwiZjY4MyIsIk0zMjAgNjRhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek0yMDAuNyAyNjRsMjIuOSAzMS41YzYuNSA4LjkgMTYuMyAxNC43IDI3LjIgMTYuMXMyMS45LTEuNyAzMC40LTguN2w4OC03MmMxNy4xLTE0IDE5LjYtMzkuMiA1LjYtNTYuM3MtMzkuMi0xOS42LTU2LjMtNS42bC01NS4yIDQ1LjItMjYuMi0zNmMtMTUuNi0yMS41LTQwLjYtMzQuMi02Ny4yLTM0LjItMzAuOSAwLTU5LjIgMTcuMS03My42IDQ0LjRMNDcuOCAyODAuOWMtMjAuMiAzOC41LTkuNCA4NS45IDI1LjYgMTExLjhMMTI2LjYgNDMyIDQwIDQzMmMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGwyMDggMGMxNy4zIDAgMzIuNi0xMS4xIDM4LTI3LjVzLS4zLTM0LjQtMTQuMi00NC43bC0xMTYuMS04NS44IDQ1LTkweiJdfSxiYnQ9SmllLHZidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbGlwYm9hcmQtbGlzdCIsaWNvbjpbMzg0LDUxMixbXSwiZjQ2ZCIsIk0zMTEuNCAzMmw4LjYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM1MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsOC42IDBDODMuNiAxMi45IDEwNC4zIDAgMTI4IDBMMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMyek0yNDggMTEyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDEzNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMHpNMTI4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zMiAwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTAgMTI4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTk2IDQxNmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LHlidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzYWNrLWRvbGxhciIsaWNvbjpbNTEyLDUxMixbMTI4MTc2XSwiZjgxZCIsIk0zMjggMTEybC0xNDQgMC0zNy4zLTc0LjVjLTEuOC0zLjYtMi43LTcuNi0yLjctMTEuNiAwLTE0LjMgMTEuNi0yNS45IDI1LjktMjUuOUwzNDIuMSAwYzE0LjMgMCAyNS45IDExLjYgMjUuOSAyNS45IDAgNC0uOSA4LTIuNyAxMS42TDMyOCAxMTJ6TTE2OS42IDE2MGwxNzIuOCAwIDQ4LjcgNDAuNkM0NTcuNiAyNTYgNDk2IDMzOCA0OTYgNDI0LjUgNDk2IDQ3Mi44IDQ1Ni44IDUxMiA0MDguNSA1MTJsLTMwNS4xIDBDNTUuMiA1MTIgMTYgNDcyLjggMTYgNDI0LjUgMTYgMzM4IDU0LjQgMjU2IDEyMC45IDIwMC42TDE2OS42IDE2MHpNMjYwIDIyNGMtMTEgMC0yMCA5LTIwIDIwbDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDIxNiAzODRjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjB6Il19LHdidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb3VudGFpbi1zdW4iLGljb246WzU3Niw1MTIsW10sImU1MmYiLCJNMjU2LjUgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjUtNy4yIDEyLjEtMjAuMyAxOS41LTM0LjMgMTkuNWwtNDMyIDBjLTE0LjEgMC0yNy4xLTcuNC0zNC4zLTE5LjVzLTcuNS0yNy4xLS44LTM5LjVsMjE2LTQwMCAyLjktNC42QzIzMS43IDYuMiAyNDMuNiAwIDI1Ni41IDB6TTE3MC40IDI0OS45bDI2LjggMjYuOGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw0My4zLTQzLjNjNi02IDE0LjEtOS40IDIyLjYtOS40bDQyLjggMC03Mi4xLTEzMy41LTg2LjEgMTU5LjR6TTQ5Ni41IDE2MGE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHoiXX0sZW9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXVwLXdpZGUtc2hvcnQiLGljb246WzU3Niw1MTIsWyJzb3J0LWFtb3VudC11cCJdLCJmMTYxIiwiTTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnpNMzIwIDQ4MGwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTEyOGw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTEyOGwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4bDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnoiXX0sTWJ0PWVvZSx6YnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlcnMtbGluZSIsaWNvbjpbNTc2LDUxMixbXSwiZTU5MiIsIk0yMjQgMTI4YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTc2IDMzNmMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMnMxMTIgNTAuMSAxMTIgMTEybDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtOHpNMzkyIDE0NGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTI3LjIgMTAwLjRjOS4xLTIuOSAxOC44LTQuNCAyOC44LTQuNCA1MyAwIDk2IDQzIDk2IDk2bDAgMTAuN2MwIDExLjgtOS42IDIxLjMtMjEuMyAyMS4zbC03OC44IDBjMi43LTcuNSA0LjEtMTUuNiA0LjEtMjRsMC04YzAtMzQuMS0xMC42LTY1LjctMjguOC05MS42em0tMjYyLjQgMGMtMTguMiAyNi0yOC44IDU3LjUtMjguOCA5MS42bDAgOGMwIDguNCAxLjQgMTYuNSA0LjEgMjRsLTc4LjggMEM0MS42IDM2OCAzMiAzNTguNCAzMiAzNDYuN0wzMiAzMzZjMC01MyA0My05NiA5Ni05NiAxMCAwIDE5LjcgMS41IDI4LjggNC40ek03MiAxNDRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0wIDQ0MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA0NjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdfSxrYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3Rhci1vZi1kYXZpZCIsaWNvbjpbNTEyLDUxMixbMTAwMTddLCJmNjlhIiwiTTQxNS45IDMxMS45bC0yNy44IDQ4LjEgNTUuNyAwLTI3LjgtNDguMXpNMzgzLjYgMjU2bC02MC4yLTEwNC0xMzQuOCAwLTYwLjIgMTA0IDYwLjIgMTA0IDEzNC44IDAgNjAuMi0xMDR6bTY0LjcgMGw1OC40IDEwMC45YzMuNSA2IDUuMyAxMi44IDUuMyAxOS43IDAgMjEuNy0xNy42IDM5LjQtMzkuNCAzOS40bC0xMTcgMC02MS4zIDEwNS44QzI4Ni41IDUzNS42IDI3MS44IDU0NCAyNTYgNTQ0cy0zMC41LTguNC0zOC40LTIyLjJsLTYxLjMtMTA1LjgtMTE3IDBjLTIxLjcgMC0zOS40LTE3LjYtMzkuNC0zOS40IDAtNi45IDEuOC0xMy43IDUuMy0xOS43TDYzLjcgMjU2IDUuMyAxNTUuMUMxLjggMTQ5LjEgMCAxNDIuMyAwIDEzNS40IDAgMTEzLjYgMTcuNiA5NiAzOS40IDk2bDExNyAwIDYxLjMtMTA1LjhDMjI1LjUtMjMuNiAyNDAuMi0zMiAyNTYtMzJzMzAuNSA4LjQgMzguNCAyMi4ybDYxLjMgMTA1LjggMTE3IDBjMjEuNyAwIDM5LjQgMTcuNiAzOS40IDM5LjQgMCA2LjktMS44IDEzLjctNS4zIDE5LjdMNDQ4LjMgMjU2ek0zODguMSAxNTJsMjcuOCA0OC4xIDI3LjgtNDguMS01NS43IDB6TTI5MSA5NmwtMzUtNjAuNC0zNSA2MC40IDcwIDB6TTEyMy45IDE1MmwtNTUuNyAwIDI3LjggNDguMSAyNy44LTQ4LjF6TTk2LjEgMzExLjlsLTI3LjggNDguMSA1NS43IDAtMjcuOC00OC4xek0yMjEgNDE2bDM1IDYwLjQgMzUtNjAuNC03MCAweiJdfSxTYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibm90ZXMtbWVkaWNhbCIsaWNvbjpbNTEyLDUxMixbXSwiZjQ4MSIsIk05NiAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgxLjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN0w0OTMuMyAyOTAuN2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDUxMiA2NGMwLTM1LjMtMjguNy02NC02NC02NEwxNjAgMEMxMjQuNyAwIDk2IDI4LjcgOTYgNjRsMCAyODh6TTI4OCAxMTJsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQ4IDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZ6TTQ4IDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDEwNi43IDAgMTIwTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzI4eiJdfSxDYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXVzdHJhbC1zaWduIixpY29uOls0NDgsNTEyLFtdLCJlMGE5IiwiTTI2Ni41IDI0MGwtODUgMCA0Mi41LTEwNi40IDQyLjUgMTA2LjR6bTY4LjkgMEwyNjIuOSA1OC4zQzI1Ni41IDQyLjQgMjQxLjEgMzIgMjI0IDMycy0zMi41IDEwLjQtMzguOSAyNi4zTDExMi42IDI0MCAzMiAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjEuNCAwLTE5LjIgNDgtNDIuMyAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDIzLjEgMC0yMC44IDUyLjFjLTYuNiAxNi40IDEuNCAzNSAxNy45IDQxLjZzMzUtMS40IDQxLjYtMTcuOWwzMC4zLTc1LjkgMjAwIDAgMzAuMyA3NS45YzYuNiAxNi40IDI1LjIgMjQuNCA0MS42IDE3LjlzMjQuNC0yNS4yIDE3LjktNDEuNkwzOTIuOSAzODQgNDE2IDM4NGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDIuMyAwLTE5LjItNDggNjEuNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MC42IDB6bS00OS43IDQ4bDE5LjIgNDgtMTYxLjYgMCAxOS4yLTQ4IDEyMy4zIDB6Il19LExidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbGlwYm9hcmQtdXNlciIsaWNvbjpbMzg0LDUxMixbXSwiZjdmMyIsIk0zMTEuNCAzMmw4LjYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM1MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsOC42IDBDODMuNiAxMi45IDEwNC4zIDAgMTI4IDBMMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMyek0yNDggMTEyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDEzNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMHpNMTkyIDM0NGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNOTguMyA0MTNjLTEyLjkgMTUuNiAyLjIgMzUgMjIuNCAzNWwxNDIuNSAwYzIwLjIgMCAzNS4zLTE5LjQgMjIuNC0zNS0xNC43LTE3LjctMzYuOS0yOS02MS43LTI5bC02NCAwYy0yNC44IDAtNDcgMTEuMy02MS43IDI5eiJdfSxUYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1pbWFnZSIsaWNvbjpbMzg0LDUxMixbMTI4NDQzXSwiZjFjNSIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTI4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek05Mi42IDQ0OGwxOTguOCAwYzE1LjggMCAyOC42LTEyLjggMjguNi0yOC42IDAtNy4zLTIuOC0xNC40LTcuOS0xOS43TDIxNS4zIDI5Ny45Yy02LTYuMy0xNC40LTkuOS0yMy4yLTkuOWwtLjMgMGMtOC44IDAtMTcuMSAzLjYtMjMuMiA5LjlMNzEuOSAzOTkuN0M2Ni44IDQwNSA2NCA0MTIuMSA2NCA0MTkuNCA2NCA0MzUuMiA3Ni44IDQ0OCA5Mi42IDQ0OHoiXX0sdG9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1jYXJldC1yaWdodCIsaWNvbjpbNDQ4LDUxMixbImNhcmV0LXNxdWFyZS1yaWdodCJdLCJmMTUyIiwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0zMjAgMjU2YzAgNi43LTIuOCAxMy03LjcgMTcuNmwtMTEyIDEwNGMtNyA2LjUtMTcuMiA4LjItMjUuOSA0LjRTMTYwIDM2OS41IDE2MCAzNjBsMC0yMDhjMC05LjUgNS43LTE4LjIgMTQuNC0yMnMxOC45LTIuMSAyNS45IDQuNGwxMTIgMTA0YzQuOSA0LjUgNy43IDEwLjkgNy43IDE3LjZ6Il19LF9idD10b2UsQWJ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZpYWwiLGljb246WzUxMiw1MTIsWzEyOTUxNF0sImY0OTIiLCJNMzQyLjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wzMDYuNyA2NCAyOC4xIDM0Mi42QzEwLjEgMzYwLjYgMCAzODUgMCA0MTAuNUwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2bDUuNSAwYzI1LjUgMCA0OS45LTEwLjEgNjcuOS0yOC4xbDI3OC42LTI3OC42IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHpNMjA1LjMgMjU2bDE0Ni43LTE0Ni43IDUwLjcgNTAuNy05NiA5Ni0xMDEuNSAweiJdfSwkYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVsaWNvcHRlciIsaWNvbjpbNTc2LDUxMixbMTI4NjQxXSwiZjUzMyIsIk0xNzYgMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTUyIDAgMCA0OC0yMjAuOCAwLTMyLjgtMzkuNEM2OS45IDgzLjIgNjMuMSA4MCA1NiA4MEwyNCA4MEMxNS43IDgwIDggODQuMyAzLjYgOTEuNHMtNC44IDE1LjktMS4xIDIzLjRsNDggOTZDNTQuNiAyMTguOSA2Mi45IDIyNCA3MiAyMjRsMTA3LjggMCAxMDQgMTQzLjFjMTUuMSAyMC43IDM5LjEgMzIuOSA2NC43IDMyLjlsNzUuNSAwYzc1LjEgMCAxMzYtNjAuOSAxMzYtMTM2UzQ5OS4xIDEyOCA0MjQgMTI4bC00OCAwIDAtNDggMTUyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTc2IDMyek0zNzYgMTkybDQ4IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJzLTMyLjIgNzItNzIgNzJsLTQ4IDAgMC0xNDR6TTU1MiA0MTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0IDAgNC40LTMuNiA4LTggOGwtMjcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjcyIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTYgMC0xMy4zLTEwLjctMjQtMjQtMjR6Il19LERidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtaXR0ZW4iLGljb246WzQ0OCw1MTIsW10sImY3YjUiLCJNMzUyIDM4NEw2NCAzODQgNS40IDE3OC45QzEuOCAxNjYuNCAwIDE1My40IDAgMTQwLjMgMCA2Mi44IDYyLjggMCAxNDAuMyAwbDMuNCAwYzY2IDAgMTIzLjUgNDQuOSAxMzkuNSAxMDguOWwzMS40IDEyNS44IDE3LjYtMjAuMUMzNDQuOCAyMDAuMiAzNjIuOSAxOTIgMzgyIDE5MmwyLjggMGMzNC45IDAgNjMuMyAyOC4zIDYzLjMgNjMuMyAwIDE1LjktNiAzMS4yLTE2LjggNDIuOUwzNTIgMzg0ek0zMiA0NjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkw2NCA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZ6Il19LEVidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnYXMtcHVtcCIsaWNvbjpbNTEyLDUxMixbOTk4MV0sImY1MmYiLCJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEwyNTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5MiA4IDBjNDguNiAwIDg4IDM5LjQgODggODhsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTU0Yy0yNy42LTcuMS00OC0zMi4yLTQ4LTYybDAtNTkuNS0yNS44LTI4LjNjLTguOS05LjgtOC4yLTI1IDEuNi0zMy45czI1LTguMiAzMy45IDEuNmw3MS43IDc4LjhjOS40IDEwLjMgMTQuNiAyMy43IDE0LjYgMzcuN0w1MTIgMzc2YzAgMzkuOC0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcybDAtMzJjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTggMCAwIDE2MS40YzkuMyAzLjMgMTYgMTIuMiAxNiAyMi42IDAgMTMuMy0xMC43IDI0LTI0IDI0TDQwIDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMC41IDYuNy0xOS4zIDE2LTIyLjZMMzIgNjR6TTk2IDgwbDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNkwxMTIgNjRjLTguOCAwLTE2IDcuMi0xNiAxNnoiXX0sTmJ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImVudmVsb3BlLWNpcmNsZS1jaGVjayIsaWNvbjpbNjQwLDUxMixbXSwiZTRlOCIsIk02NCAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhsNDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA4MS40Yy0yNC40LTExLjItNTEuNC0xNy40LTgwLTE3LjQtODcuNyAwLTE2MS43IDU4LjgtMTg0LjcgMTM5LjItNy4xLTEuMy0xNC4xLTQuMi0yMC4xLTguOGwtMjA4LTE1NkM3MS4xIDE0MS4zIDY0IDEyNy4xIDY0IDExMnpNMzA0IDM2OGMwIDI4LjYgNi4yIDU1LjYgMTcuNCA4MEwxMjggNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE4OCAxOTguNCAxNDguOGMxMi42IDkuNCAyNi45IDE1LjQgNDEuNyAxNy45IDAgMS44LS4xIDMuNS0uMSA1LjN6bTQ4IDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il19LGFvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tc2thdGluZyIsaWNvbjpbNTEyLDUxMixbInNrYXRpbmciXSwiZjdjNSIsIk0zNjggNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMjggMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE1MC4xIDBjNDkuOSAwIDc0LjkgNjAuMyAzOS42IDk1LjZsLTYzLjkgNjMuOSA2OS44IDMxYzE3LjMgNy43IDI4LjUgMjQuOSAyOC41IDQzLjlsMCA4NS42YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNzUuMi04Mi40LTM2LjZjLTQxLTE4LjItNTEtNzItMTkuMy0xMDMuN2w0MC40LTQwLjQtOTguNyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNODkuNCAzNjEuNGw3NS45LTc1LjljNy43IDE5LjcgMjEuNiAzNy4zIDQxIDQ5LjZsLTcxLjYgNzEuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjN6bTM0Ni41IDg3LjFjOC42IDIuMSAxMy44IDEwLjggMTEuNiAxOS40bC0uNCAxLjdjLTYuMiAyNC45LTI4LjYgNDIuNC01NC4zIDQyLjRMMzA0IDUxMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw4OC44IDBjMTEgMCAyMC42LTcuNSAyMy4zLTE4LjJsLjQtMS43YzIuMS04LjYgMTAuOC0xMy44IDE5LjQtMTEuNnpNMTQzLjIgNDg2LjNsLTYuMiAzLjFjLTIxLjYgMTAuOC00Ny42IDYuNi02NC42LTEwLjVMMTIuNyA0MTkuM2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDU5LjYgNTkuNmM3LjMgNy4zIDE4LjUgOS4xIDI3LjcgNC41bDYuMi0zLjFjNy45LTQgMTcuNS0uNyAyMS41IDcuMnMuNyAxNy41LTcuMiAyMS41eiJdfSxQYnQ9YW9lLERVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN1biIsaWNvbjpbNTc2LDUxMixbOTcyOF0sImYxODUiLCJNMTc4LjItMTAuMWM3LjQtMy4xIDE1LjgtMi4yIDIyLjUgMi4ybDg3LjggNTguMiA4Ny44LTU4LjJjNi43LTQuNCAxNS4xLTUuMiAyMi41LTIuMlM0MTEuNC0uNSA0MTMgNy4zbDIwLjkgMTAzLjIgMTAzLjIgMjAuOWM3LjggMS42IDE0LjQgNyAxNy40IDE0LjNzMi4yIDE1LjgtMi4yIDIyLjVsLTU4LjIgODcuOCA1OC4yIDg3LjhjNC40IDYuNyA1LjIgMTUuMSAyLjIgMjIuNXMtOS42IDEyLjgtMTcuNCAxNC4zTDQzMy44IDQwMS40IDQxMyA1MDQuN2MtMS42IDcuOC03IDE0LjQtMTQuMyAxNy40cy0xNS44IDIuMi0yMi41LTIuMmwtODcuOC01OC4yLTg3LjggNTguMmMtNi43IDQuNC0xNS4xIDUuMi0yMi41IDIuMnMtMTIuOC05LjYtMTQuMy0xNy40TDE0MyA0MDEuNCAzOS43IDM4MC41Yy03LjgtMS42LTE0LjQtNy0xNy40LTE0LjNzLTIuMi0xNS44IDIuMi0yMi41TDgyLjcgMjU2IDI0LjUgMTY4LjJjLTQuNC02LjctNS4yLTE1LjEtMi4yLTIyLjVzOS42LTEyLjggMTcuNC0xNC4zTDE0MyAxMTAuNiAxNjMuOSA3LjNjMS42LTcuOCA3LTE0LjQgMTQuMy0xNy40ek0yMDcuNiAyNTZhODAuNCA4MC40IDAgMSAxIDE2MC44IDAgODAuNCA4MC40IDAgMSAxIC0xNjAuOCAwem0yMDguOCAwYTEyOC40IDEyOC40IDAgMSAwIC0yNTYuOCAwIDEyOC40IDEyOC40IDAgMSAwIDI1Ni44IDB6Il19LHJvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYXNlYmFsbCIsaWNvbjpbNTEyLDUxMixbMTI5MzU4LDk5MTgsImJhc2ViYWxsLWJhbGwiXSwiZjQzMyIsIk0yMzIuNCAxLjFjLTEyMi4yIDExLjQtMjE5LjUgMTA4LjctMjMwLjkgMjMwLjkgMTYuMi0uMSAzMi0xLjggNDcuMi01IDEzLTIuNyAyNS43IDUuNSAyOC40IDE4LjVzLTUuNSAyNS43LTE4LjUgMjguNGMtMTguNCAzLjktMzcuNiA2LTU3LjEgNi4xIDExLjQgMTIyLjIgMTA4LjcgMjE5LjUgMjMwLjkgMjMwLjkgLjEtMTkuNSAyLjItMzguNyA2LjEtNTcuMSAyLjctMTMgMTUuNS0yMS4zIDI4LjQtMTguNXMyMS4zIDE1LjUgMTguNSAyOC40Yy0zLjIgMTUuMi00LjkgMzEtNSA0Ny4yIDEyMi4yLTExLjQgMjE5LjUtMTA4LjcgMjMwLjktMjMwLjktMTYuMiAuMS0zMiAxLjgtNDcuMiA1LTEzIDIuNy0yNS43LTUuNS0yOC40LTE4LjVzNS41LTI1LjcgMTguNS0yOC40YzE4LjQtMy45IDM3LjYtNiA1Ny4xLTYuMS0xMS40LTEyMi4yLTEwOC43LTIxOS41LTIzMC45LTIzMC45LS4xIDE5LjUtMi4yIDM4LjctNi4xIDU3LjEtMi43IDEzLTE1LjUgMjEuMy0yOC40IDE4LjVzLTIxLjMtMTUuNS0xOC41LTI4LjRjMy4yLTE1LjIgNC45LTMxIDUtNDcuMnptMi44IDE1MS40Yy0yMS40IDMyLjktNDkuNSA2MC45LTgyLjMgODIuMy0xMS4xIDcuMi0yNiA0LjEtMzMuMi03cy00LjEtMjYgNy0zMy4yYzI3LjItMTcuNyA1MC41LTQxIDY4LjMtNjguMyA3LjItMTEuMSAyMi4xLTE0LjMgMzMuMi03czE0LjMgMjIuMSA3IDMzLjJ6TTM5My4xIDI4NC4yYzcuMiAxMS4xIDQuMSAyNi03IDMzLjItMjcuMiAxNy43LTUwLjUgNDEtNjguMyA2OC4zLTcuMiAxMS4xLTIyLjEgMTQuMy0zMy4yIDdzLTE0LjMtMjIuMS03LTMzLjJjMjEuNC0zMi45IDQ5LjUtNjAuOSA4Mi4zLTgyLjMgMTEuMS03LjIgMjYtNC4xIDMzLjIgN3oiXX0sSWJ0PXJvZSxGYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaW1hZ2UiLGljb246WzQ0OCw1MTIsW10sImYwM2UiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgODBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2ek0yNzIgMjI0YzguNCAwIDE2LjEgNC40IDIwLjUgMTEuNWw4OCAxNDRjNC41IDcuNCA0LjcgMTYuNyAuNSAyNC4zUzM2OC43IDQxNiAzNjAgNDE2TDg4IDQxNmMtOC45IDAtMTcuMi01LTIxLjMtMTIuOXMtMy41LTE3LjUgMS42LTI0LjhsNTYtODBjNC41LTYuNCAxMS44LTEwLjIgMTkuNy0xMC4yczE1LjIgMy44IDE5LjcgMTAuMmwyNi40IDM3LjggNjEuNC0xMDAuNWM0LjQtNy4xIDEyLjEtMTEuNSAyMC41LTExLjV6Il19LE9idD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJub3RkZWYiLGljb246WzM4NCw1MTIsW10sImUxZmUiLCJNNjQgMzkwLjNMMTUzLjUgMjU2IDY0IDEyMS43IDY0IDM5MC4zek0xMDIuNSA0NDhMMjgxLjUgNDQ4IDE5MiAzMTMuNyAxMDIuNSA0NDh6bTEyOC0xOTJMMzIwIDM5MC4zIDMyMCAxMjEuNyAyMzAuNSAyNTZ6TTI4MS41IDY0TDEwMi41IDY0IDE5MiAxOTguMyAyODEuNSA2NHpNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBMMzM2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0MTZjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDQ4eiJdfSxpb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFza2V0YmFsbCIsaWNvbjpbNTEyLDUxMixbMTI3OTM2LCJiYXNrZXRiYWxsLWJhbGwiXSwiZjQzNCIsIk05Mi43IDU4LjhsNzguNCA3OC40YzE4LjItMjUgMjguOS01NS45IDI4LjktODkuMiAwLTE0LjEtMS45LTI3LjctNS41LTQwLjYtMzggOS40LTcyLjYgMjcuMi0xMDEuOCA1MS40ek01OC44IDkyLjdjLTI0LjIgMjkuMi00MiA2My44LTUxLjQgMTAxLjggMTIuOSAzLjYgMjYuNSA1LjUgNDAuNiA1LjUgMzMuMyAwIDY0LjEtMTAuNyA4OS4yLTI4LjlMNTguOCA5Mi43ek0yNTYgMGMtNC42IDAtOS4yIC4xLTEzLjcgLjQgMy43IDE1LjMgNS43IDMxLjIgNS43IDQ3LjYgMCA0Ni42LTE1LjkgODkuNC00Mi42IDEyMy40TDI1NiAyMjIuMSA0MTkuMyA1OC44QzM3NC45IDIyLjEgMzE4LjEgMCAyNTYgMHpNNDggMjQ4Yy0xNi40IDAtMzIuNC0yLTQ3LjYtNS43LS4yIDQuNS0uNCA5LjEtLjQgMTMuNyAwIDYyLjEgMjIuMSAxMTguOSA1OC44IDE2My4zTDIyMi4xIDI1NiAxNzEuNCAyMDUuNEMxMzcuNCAyMzIuMSA5NC42IDI0OCA0OCAyNDh6bTQ2My42IDIxLjdjLjItNC41IC40LTkuMSAuNC0xMy43IDAtNjIuMS0yMi4xLTExOC45LTU4LjgtMTYzLjNMMjg5LjkgMjU2IDM0MC42IDMwNi42YzM0LTI2LjcgNzYuOS00Mi42IDEyMy40LTQyLjYgMTYuNCAwIDMyLjQgMiA0Ny42IDUuN3ptLTcuMSA0Ny44Yy0xMi45LTMuNi0yNi41LTUuNS00MC42LTUuNS0zMy4zIDAtNjQuMSAxMC43LTg5LjIgMjguOWw3OC40IDc4LjRjMjQuMi0yOS4yIDQyLTYzLjggNTEuNC0xMDEuOHpNMzQwLjkgMzc0LjhjLTE4LjIgMjUtMjguOSA1NS45LTI4LjkgODkuMiAwIDE0LjEgMS45IDI3LjcgNS41IDQwLjYgMzgtOS40IDcyLjYtMjcuMiAxMDEuOC01MS40bC03OC40LTc4LjR6bS0zNC4zLTM0LjNMMjU2IDI4OS45IDkyLjcgNDUzLjJjNDQuMyAzNi43IDEwMS4yIDU4LjggMTYzLjMgNTguOCA0LjYgMCA5LjItLjEgMTMuNy0uNC0zLjctMTUuMy01LjctMzEuMi01LjctNDcuNiAwLTQ2LjYgMTUuOS04OS40IDQyLjYtMTIzLjR6Il19LEJidD1pb2Usb29lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlbmNpbCIsaWNvbjpbNTEyLDUxMixbOTk5OSw2MTUwNCwicGVuY2lsLWFsdCJdLCJmMzAzIiwiTTM2LjQgMzUzLjJjNC4xLTE0LjYgMTEuOC0yNy45IDIyLjYtMzguN2wxODEuMi0xODEuMiAzMy45LTMzLjljMTYuNiAxNi42IDUxLjMgNTEuMyAxMDQgMTA0bDMzLjkgMzMuOS0zMy45IDMzLjktMTgxLjIgMTgxLjJjLTEwLjcgMTAuNy0yNC4xIDE4LjUtMzguNyAyMi42TDMwLjQgNTEwLjZjLTguMyAyLjMtMTcuMyAwLTIzLjQtNi4yUy0xLjQgNDg5LjMgLjkgNDgxTDM2LjQgMzUzLjJ6bTU1LjYtMy43Yy00LjQgNC43LTcuNiAxMC40LTkuMyAxNi42bC0yNC4xIDg2LjkgODYuOS0yNC4xYzYuNC0xLjggMTIuMi01LjEgMTctOS43TDkxLjkgMzQ5LjV6bTM1NC0xNDYuMWMtMTYuNi0xNi42LTUxLjMtNTEuMy0xMDQtMTA0TDMwOCA2NS41QzMzNC41IDM5IDM0OS40IDI0LjEgMzUyLjkgMjAuNiAzNjYuNCA3IDM4NC44LS42IDQwNC0uNlM0NDEuNiA3IDQ1NS4xIDIwLjZsMzUuNyAzNS43QzUwNC40IDY5LjkgNTEyIDg4LjMgNTEyIDEwNy40cy03LjYgMzcuNi0yMS4yIDUxLjFjLTMuNSAzLjUtMTguNCAxOC40LTQ0LjkgNDQuOXoiXX0sUmJ0PW9vZSxIYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXdhbGtpbmctYXJyb3ctbG9vcC1sZWZ0IixpY29uOls2NDAsNTEyLFtdLCJlNTUxIiwiTTE2MCA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNNzMuNCAyMjcuOWwyMi42LTIyLjYgMCA2OS4zYzAgMjggMTIuMiA1NC43IDMzLjUgNzIuOWw3MS40IDYxLjJjNS45IDUuMSA5LjggMTIuMSAxMC45IDE5LjhsMTIuNiA4OC4xYzIuNSAxNy41IDE4LjcgMjkuNyAzNi4yIDI3LjJzMjkuNy0xOC43IDI3LjItMzYuMmwtMTIuNi04OC4xYy0zLjMtMjMuMS0xNC45LTQ0LjEtMzIuNi01OS4zbC0zNC41LTI5LjYgMC0xMTUuMiAzLjggNC43YzE4LjIgMjIuOCA0NS44IDM2IDc1IDM2bDMzLjIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzMuMiAwYy05LjcgMC0xOC45LTQuNC0yNS0xMmwtMTcuOS0yMi40Yy0yMy0yOC44LTU3LjktNDUuNi05NC44LTQ1LjYtMzIuMiAwLTYzLjEgMTIuOC04NS44IDM1LjZMMjguMSAxODIuNkMxMC4xIDIwMC42IDAgMjI1IDAgMjUwLjVMMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM3LjVjMC04LjUgMy40LTE2LjYgOS40LTIyLjZ6TTg1LjggNDA3LjNjLTEuNSA1LjItNC4zIDEwLTguMSAxMy44TDkuNCA0ODkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC4zLTY4LjNjMTEuNS0xMS41IDE5LjktMjUuOCAyNC40LTQxLjVsMi4yLTcuNi00Ni0zOS40Yy0yLjUtMi4yLTUtNC40LTcuNC02LjhMODUuOCA0MDcuM3pNMzU5IDMzNWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMS0zMSAxMDIuMSAwYzEuMiAwIDIuNC0uMSAzLjUtLjMgNTYuMS0zLjkgMTAwLjUtNTAuNiAxMDAuNS0xMDcuNyAwLTU5LjYtNDguNC0xMDgtMTA4LTEwOGwtOTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5MiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwcy0yNi45IDYwLTYwIDYwbC05OC4xIDAgMzEtMzFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNzIgNzJ6Il19LHFidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaWNlLXNpeCIsaWNvbjpbNDQ4LDUxMixbOTg2MV0sImY1MjYiLCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTE2MCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xMjggMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIwIDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxzb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5nbGVzLWRvd24iLGljb246WzM4NCw1MTIsWyJhbmdsZS1kb3VibGUtZG93biJdLCJmMTAzIiwiTTIxNC42IDQ3MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwxOTIgNDAyLjcgMzI5LjQgMjY1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MHptMTYwLTM1MmwtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTE2MC0xNjBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMTkyIDIxMC43IDMyOS40IDczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3oiXX0sVmJ0PXNvZSxVYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3lyaW5nZSIsaWNvbjpbNTc2LDUxMixbMTI4MTM3XSwiZjQ4ZSIsIk00OTcuNS0xN2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNSAxNS00Ni4xIDQ2LjEtNjMtNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNyA3LTc4LjEgNzguMSA0MSA0MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00MS00MS00Ni4xIDQ2LjEgNDEgNDFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDEtNDEtMzcuNyAzNy43Yy0xMC41IDEwLjUtMTYuNCAyNC43LTE2LjQgMzkuNmwwIDg4LjgtNTcgNTdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1Ny01NyA4OC44IDBjMTQuOSAwIDI5LjEtNS45IDM5LjYtMTYuNGwyMjkuNy0yMjkuNyA3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02My02MyA0Ni4xLTQ2LjEgMTUgMTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NC02NHoiXX0sbm9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndoZWF0LWF3biIsaWNvbjpbNTc2LDUxMixbIndoZWF0LWFsdCJdLCJlMmNkIiwiTTc5LjcgMjM0LjZjNi4yLTQuMSAxNC43LTMuNCAyMC4xIDIuMWw0Ni4xIDQ2LjEgNi4xIDYuN2MxOS43IDIzLjggMjYuMyA1NSAxOS4yIDgzLjkgMzEuNy03LjcgNjYuMiAxIDkwLjYgMjUuM2w0Ni4xIDQ2LjFjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcuNCA3LjRjLTM3LjUgMzcuNS05OC4zIDM3LjUtMTM1LjggMEwxMzQuMSA0NDQuMyA0OS40IDUyOWMtOS40IDkuNC0yNC41IDkuNC0zMy45IDAtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODQuNy04NC43LTMwLjUtMzAuNWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXptMTA0LTEwNGM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDQ2LjEgNDYuMSA2LjEgNi43YzE5LjcgMjMuOCAyNi4zIDU1IDE5LjIgODMuOSAzMS43LTcuNyA2Ni4yIDEgOTAuNiAyNS4zbDQ2LjEgNDYuMWM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNy40IDcuNGMtMzcuNSAzNy41LTk4LjMgMzcuNS0xMzUuOCAwbC05NC45LTk0LjljLTM3LjUtMzcuNS0zNy41LTk4LjMgMC0xMzUuN2w3LjQtNy40IDIuNS0yLjF6TTQ5NS4yIDE1YzkuNC05LjQgMjQuNi05LjQgMzQgMCA4LjggOC44IDkuMyAyMi43IDEuNiAzMi4yTDUyOS4yIDQ5IDQxNC43IDE2My40YzcuNyAxIDE1LjIgMyAyMi41IDUuOUw0OTUuNSAxMTFjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjFsLTEuNyAxLjgtNTIuNyA1Mi43IDM5IDM5YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03LjQgNy40Yy0zNy41IDM3LjUtOTguMyAzNy41LTEzNS44IDBsLTk0LjktOTQuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMWM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDM5IDM5IDUyLjctNTIuN2M5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMWwtMS43IDEuOC01OC4zIDU4LjNjMi44IDcuMSA0LjcgMTQuNSA1LjcgMjIuMUw0OTUuMiAxNXoiXX0samJ0PW5vZSxXYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGxhbmUtdXAiLGljb246WzUxMiw1MTIsW10sImUyMmQiLCJNMjAwIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyAxNzMuNiAxNTkuMmM2LjYgNi4xIDEwLjQgMTQuNiAxMC40IDIzLjZsMCA0My43YzAgMTAuOS0xMC43IDE4LjYtMjEuMSAxNS4ybC0xNjIuOS01NC4zIDAgOTkuNyA2NiA1Mi44YzMuOCAzIDYgNy42IDYgMTIuNWwwIDE5LjhjMCAxMC40LTkuOCAxOC0xOS45IDE1LjVMMjU2IDUxMiAxNDcuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0MyNi43IDM5Ni40IDE2IDM4OC43IDE2IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIwMCAxNTEuMyAyMDAgMjR6Il19LEdidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbGlnbi1jZW50ZXIiLGljb246WzQ0OCw1MTIsW10sImYwMzciLCJNMzUyIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDEyOCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnptOTYgMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzUyIDMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6Il19LFlidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob2NrZXktcHVjayIsaWNvbjpbNTEyLDUxMixbXSwiZjQ1MyIsIk0yNTYgMjU2QzExNC42IDI1NiAwIDIxMyAwIDE2MHMxMTQuNi05NiAyNTYtOTYgMjU2IDQzIDI1NiA5Ni0xMTQuNiA5Ni0yNTYgOTZ6TTAgMzUyTDAgMjQyLjdjMTYuOSAxMi4zIDM3IDIyLjIgNTguMSAzMC4xIDUzIDE5LjkgMTIzIDMxLjIgMTk3LjkgMzEuMnMxNDQuOS0xMS4zIDE5Ny45LTMxLjJjMjEuMi03LjkgNDEuMi0xNy44IDU4LjEtMzAuMUw1MTIgMzUyYzAgNTMtMTE0LjYgOTYtMjU2IDk2UzAgNDA1IDAgMzUyeiJdfSxsb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWFycm93LWxlZnQiLGljb246WzUxMiw1MTIsWyJhcnJvdy1jaXJjbGUtbGVmdCJdLCJmMGE4IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMzUgMjM5bDgwLTgwYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzkgMzkgMTUwLjEgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTUwLjEgMCAzOSAzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC04MC04MGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il19LFpidD1sb2UsWGJ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsdWctY2lyY2xlLWJvbHQiLGljb246WzY0MCw1MTIsW10sImU1NWIiLCJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTIgNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE3Ny40LTc3Yy01LjgtNC4yLTEzLjgtNC0xOS40IC41bC04MCA2NGMtNS4zIDQuMi03LjQgMTEuNC01LjEgMTcuOFM0MzMuMiA0MTYgNDQwIDQxNmwzMi45IDAtMTUuOSA0Mi40Yy0yLjUgNi43LS4yIDE0LjMgNS42IDE4LjZzMTMuOCA0IDE5LjQtLjVsODAtNjRjNS4zLTQuMiA3LjQtMTEuNCA1LjEtMTcuOFM1NTguOCAzODQgNTUyIDM4NGwtMzIuOSAwIDE1LjktNDIuNGMyLjUtNi43IC4yLTE0LjMtNS42LTE4LjZ6Il19LFFidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyZXN0cm9vbSIsaWNvbjpbNjQwLDUxMixbXSwiZjdiZCIsIk04MCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNTQuOGMtOC4xIDkuMi0yMS4xIDEzLjItMzMuNSA5LjQtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQ0LjQgMTU2LjkgODMuNiAxMjggMTI4IDEyOHM4My42IDI4LjkgOTYuOCA3MS4ybDI5LjcgOTUuMmM1LjMgMTYuOS00LjEgMzQuOC0yMSA0MC4xLTEyLjQgMy45LTI1LjQtLjItMzMuNS05LjRMMjAwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOC0xNiAwek0zMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ2NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDY0IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTQ0MCA0ODBsMC05Ni0xNy44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDktMjYuOWMtMy4yIDAtNi40LS41LTkuNS0xLjUtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQyOC40IDE1Ni45IDQ2Ny42IDEyOCA1MTIgMTI4czgzLjYgMjguOSA5Ni44IDcxLjJsMjkuNyA5NS4yYzUuMyAxNi45LTQuMSAzNC44LTIxIDQwLjEtMy4yIDEtNi40IDEuNS05LjUgMS41bDkgMjYuOWMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFsLTE3LjggMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyeiJdfSxLYnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5jaG9yLWxvY2siLGljb246WzY0MCw1MTIsW10sImU0YWQiLCJNMzIwLjUgOTZhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptLTMyLTk2Yy01MyAwLTk2IDQzLTk2IDk2IDAgNDEuOCAyNi43IDc3LjQgNjQgOTAuNWwwIDI1Ny45Yy02Mi45LTE0LjMtMTEwLjItNjkuNy0xMTEuOS0xMzYuNWwxNi4xIDE0LjFjMTAgOC43IDI1LjEgNy43IDMzLjktMi4zczcuNy0yNS4xLTIuMy0zMy45bC02NC01NmMtOS03LjktMjIuNi03LjktMzEuNiAwbC02NCA1NmMtMTAgOC43LTExIDIzLjktMi4zIDMzLjlzMjMuOSAxMSAzMy45IDIuM2wxNi4yLTE0LjJjMi4xIDExMy4xIDk0LjQgMjA0LjEgMjA4IDIwNC4xIDI4LjMgMCA1NS40LTUuNyA4MC0xNS45bDAtLjIgMC03Mi4yYy0xNC40IDkuNi0zMC42IDE2LjctNDggMjAuN2wwLTI1Ny45YzM3LjMtMTMuMiA2NC00OC43IDY0LTkwLjUgMC01My00My05Ni05Ni05NnptMjcyIDMwNC4xbDAgNDcuOS02NCAwIDAtNDcuOWMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyek00MTYuNSA0MDBsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjAuOS0xMy40LTM4LjctMzItNDUuM2wwLTUwLjZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBsMCA1MC42Yy0xOC42IDYuNi0zMiAyNC40LTMyIDQ1LjN6Il19LEpidD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0aW1lbGluZSIsaWNvbjpbNTc2LDUxMixbXSwiZTI5YyIsIk0xNjAgMTY5LjNjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuMyAwLTQ0LjItMzUuOC04MC04MC04MFM0OCA1MS44IDQ4IDk2YzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCA1NC43LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDAgMCA1NC43Yy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM2wwLTU0LjcgMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC01NC43YzI4LjMtMTIuMyA0OC00MC41IDQ4LTczLjMgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDU0LjctMjU2IDAgMC01NC43eiJdfSxldnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGlnaHRidWxiIixpY29uOlszODQsNTEyLFsxMjgxNjFdLCJmMGViIiwiTTI5Mi45IDM4NGM3LjMtMjIuMyAyMS45LTQyLjUgMzguNC01OS45IDMyLjctMzQuNCA1Mi43LTgwLjkgNTIuNy0xMzIuMSAwLTEwNi04Ni0xOTItMTkyLTE5MlMwIDg2IDAgMTkyYzAgNTEuMiAyMCA5Ny43IDUyLjcgMTMyLjEgMTYuNSAxNy40IDMxLjIgMzcuNiAzOC40IDU5LjlsMjAxLjcgMHpNMjg4IDQzMmwtMTkyIDAgMCAxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwzMiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtMTZ6TTE4NCAxMTJjLTM5LjggMC03MiAzMi4yLTcyIDcyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNjYuMyA1My43LTEyMCAxMjAtMTIwIDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0eiJdfSxjb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWFycm93LXJpZ2h0IixpY29uOls1MTIsNTEyLFsiYXJyb3ctY2lyY2xlLXJpZ2h0Il0sImYwYTkiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTQxLTE1OWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzOS0zOS0xNTAuMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE1MC4xIDAtMzktMzljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw4MCA4MGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtODAgODB6Il19LHR2dD1jb2UsYXZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcnMtYW5kLXZlbnVzIixpY29uOls1MTIsNTEyLFs5ODkzXSwiZjIyNCIsIk0zNjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTM0LjctNjMgNjNjMTkuNSAyOC40IDMxIDYyLjcgMzEgOTkuOCAwIDg2LjMtNjIuMSAxNTguMS0xNDQgMTczLjFsMCAzNC45IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTM0LjljLTgxLjktMTUtMTQ0LTg2LjgtMTQ0LTE3My4xIDAtOTcuMiA3OC44LTE3NiAxNzYtMTc2IDM3IDAgNzEuNCAxMS40IDk5LjggMzFsNjMtNjMtMzQuNyAwek0zNTIgMjA4YTExMiAxMTIgMCAxIDAgLTIyNCAwIDExMiAxMTIgMCAxIDAgMjI0IDB6Il19LEVVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im5ldHdvcmstd2lyZWQiLGljb246WzU3Niw1MTIsW10sImY2ZmYiLCJNMjQ4IDg4bDgwIDAgMCA0OC04MCAwIDAtNDh6bS04LTU2Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE2IDAgMCAzMi0yMjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwIDAgMzItMTYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTE2IDAgMC0zMiAxOTIgMCAwIDMyLTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsOTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0xNiAwIDAtMzIgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjI0IDAgMC0zMiAxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTk2IDB6TTQ0OCAzNzZsOCAwIDAgNDgtODAgMCAwLTQ4IDcyIDB6bS0yNTYgMGw4IDAgMCA0OC04MCAwIDAtNDggNzIgMHoiXX0scnZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLXNoaWVsZCIsaWNvbjpbNTc2LDUxMixbXSwiZTRkOCIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwMS4yIDBjLTEyLjUtMTQuNy0yMy4yLTMwLjgtMzEuOC00OGwtODkuNSAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMCAwLTI2LjdjMC0xOC4xIDYuMS0zNS4yIDE2LjYtNDguOC0uNC0xLjQtLjYtMi45LS42LTQuNWwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDEgODYuNy0yOC45YzMuMS0xIDYuMi0xLjggOS4zLTIuNUw0MTYgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTQ0NS4zIDQ4OC41bC0xMy4zIDYuMyAwLTE4OC4xIDk2IDMyIDAgMTkuNmMwIDU1LjgtMzIuMiAxMDYuNS04Mi43IDEzMC4zek00MjEuOSAyNTkuNWwtMTEyIDM3LjNjLTEzLjEgNC40LTIxLjkgMTYuNi0yMS45IDMwLjRsMCAzMS4xYzAgNzQuNCA0MyAxNDIuMSAxMTAuMiAxNzMuN2wxOC41IDguN2M0LjggMi4yIDEwIDMuNCAxNS4yIDMuNHMxMC41LTEuMiAxNS4yLTMuNGwxOC41LTguN0M1MzMgNTAwLjMgNTc2IDQzMi42IDU3NiAzNTguMmwwLTMxLjFjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTExMi0zNy4zYy02LjYtMi4yLTEzLjctMi4yLTIwLjIgMHoiXX0saXZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvZGUiLGljb246WzU3Niw1MTIsW10sImYxMjEiLCJNMzYwLjggMS4yYy0xNy00LjktMzQuNyA1LTM5LjYgMjJsLTEyOCA0NDhjLTQuOSAxNyA1IDM0LjcgMjIgMzkuNnMzNC43LTUgMzkuNi0yMmwxMjgtNDQ4YzQuOS0xNy01LTM0LjctMjItMzkuNnptNjQuNiAxMzYuMWMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNzMuNCA3My40LTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwem0tMjc0LjcgMGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2IDE1MC42IDE4Mi42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zeiJdfSxkb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmVhdGhlci1wb2ludGVkIixpY29uOls1MTIsNTEyLFsiZmVhdGhlci1hbHQiXSwiZjU2YiIsIk00NzUuMyAuMWM5LjktLjggMTkuNiAzIDI2LjYgMTBzMTAuOCAxNi43IDEwIDI2LjZjLTQgNDkuMy0xNy40IDEyNi4yLTQ2LjMgMTk5LjctMS44IDQuNS01LjUgNy45LTEwLjIgOS4zTDM3NC41IDI3MGMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDM4LjYgMGMxMiAwIDE5LjcgMTIuOCAxMy41IDIzLjEtNCA2LjctOC4zIDEzLjItMTIuNyAxOS42LTIgMi45LTUgNS04LjQgNi4xTDMxMC41IDM2NmMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDE2IDBjMTQuNiAwIDIxIDE3LjQgOC44IDI1LjQtNjggNDUtMTM3LjcgNDMuMy0xODIuNCAzMS4zLTEyLjctMy40LTI0LTkuOS0zNC40LTE3LjlMNDggNDk2Yy04LjggOC44LTIzLjIgOC44LTMyIDBzLTguOC0yMy4yIDAtMzJsODAtODAgLjUgLjVjLjctMS4zIDEuNi0yLjUgMi43LTMuNkwyNTYgMjI0YzguOC04LjggOC44LTIzLjIgMC0zMnMtMjMuMi04LjgtMzIgMEw4OS43IDMyNi4yYy04LjkgOC45LTI0IDQuNC0yNS04LjItNC4zLTUzLjIgOS4zLTEyMy4xIDcyLjYtMTg2LjQgOTEuMS05MS4xIDI1NC4yLTEyNC43IDMzNy45LTEzMS41eiJdfSxvdnQ9ZG9lLHN2dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWNpcmNsZS1xdWVzdGlvbiIsaWNvbjpbNTc2LDUxMixbXSwiZTRlZiIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTAwYy0xMS42IDAtMjEuMyA4LjItMjMuNSAxOS4yLTEuOCA4LjctMTAuMiAxNC4zLTE4LjkgMTIuNXMtMTQuMy0xMC4yLTEyLjUtMTguOWM1LjItMjUuNiAyNy44LTQ0LjggNTQuOS00NC44IDMwLjkgMCA1NiAyNS4xIDU2IDU2IDAgMTkuOC0xMS43IDM3LjgtMjkuOCA0NS45bC0xMC40IDQuNmMtMS4yIDcuNy03LjggMTMuNS0xNS44IDEzLjUtOC44IDAtMTYtNy4yLTE2LTE2IDAtMTEuMiA2LjYtMjEuMyAxNi44LTI1LjlsMTIuNC01LjVjNi42LTIuOSAxMC44LTkuNCAxMC44LTE2LjYgMC0xMy4zLTEwLjctMjQtMjQtMjR6Il19LG52dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaWduYXR1cmUiLGljb246WzY0MCw1MTIsW10sImY1YjciLCJNMTkyIDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNy44YzAgMjcuNy0yLjQgNTUuMy03LjEgODIuNWwtODQuNCAyNS4zYy00MC42IDEyLjItNjguNCA0OS42LTY4LjQgOTJsMCAzMi40LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIuNSAwYzQuMiAzNiAzNC44IDY0IDcyIDY0IDI2IDAgNTAtMTMuOSA2Mi45LTM2LjVsMTMuOS0yNC4zYzI2LjgtNDcgNDYuNS05Ny43IDU4LjQtMTUwLjVsOTQuNC0yOC4zLTEyLjUgMzcuNWMtMy4zIDkuOC0xLjYgMjAuNSA0LjQgMjguOFM0MDUuNyAzMjAgNDE2IDMyMGwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtODMuNiAwIDE4LTUzLjljMy44LTExLjMgLjktMjMuOC03LjQtMzIuNHMtMjAuNy0xMS44LTMyLjItOC40TDMxNi40IDE5OC4xYzIuNC0yMC43IDMuNi00MS40IDMuNi02Mi4zbDAtNy44YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyem0tOS4yIDE3N2w0OS0xNC43Yy0xMC40IDMzLjgtMjQuNSA2Ni40LTQyLjEgOTcuMmwtMTMuOSAyNC4zYy0xLjUgMi42LTQuMyA0LjMtNy40IDQuMy00LjcgMC04LjUtMy44LTguNS04LjVsMC03MS45YzAtMTQuMSA5LjMtMjYuNiAyMi44LTMwLjd6TTYxNiA0MTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI5Mi45IDBjLTYuNSAxNi4zLTEzLjcgMzIuMy0yMS42IDQ4TDYxNiA0MTZ6Il19LGk3PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImVhcnRoLWFtZXJpY2FzIixpY29uOls1MTIsNTEyLFsxMjc3NTgsImVhcnRoIiwiZWFydGgtYW1lcmljYSIsImdsb2JlLWFtZXJpY2FzIl0sImY1N2QiLCJNNTUuNyAxOTkuN2wzMC45IDMwLjljNiA2IDE0LjEgOS40IDIyLjYgOS40bDIxLjUgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwyOS4zIDI5LjNjNiA2IDkuNCAxNC4xIDkuNCAyMi42bDAgMzcuNWMwIDguNSAzLjQgMTYuNiA5LjQgMjIuNmwxMy4zIDEzLjNjNiA2IDkuNCAxNC4xIDkuNCAyMi42bDAgMTguN2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMi43YzAtOC41IDMuNC0xNi42IDkuNC0yMi42bDQ1LjMtNDUuM2M2LTYgOS40LTE0LjEgOS40LTIyLjZsMC0zNC43YzAtMTcuNy0xNC4zLTMyLTMyLTMybC04Mi43IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40bC0xNi0xNmMtNC4yLTQuMi02LjYtMTAtNi42LTE2IDAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42bDM0LjcgMGMxMi41IDAgMjIuNi0xMC4xIDIyLjYtMjIuNiAwLTYtMi40LTExLjgtNi42LTE2bC0xOS43LTE5LjdDMjQyIDEzMCAyNDAgMTI1LjEgMjQwIDEyMHMyLTEwIDUuNy0xMy43bDE3LjMtMTcuM2M1LjgtNS44IDkuMS0xMy43IDkuMS0yMS45IDAtNy4yLTIuNC0xMy43LTYuNC0xOC45LTMuMi0uMS02LjQtLjItOS42LS4yLTk1LjQgMC0xNzUuNyA2NC4yLTIwMC4zIDE1MS43ek00NjQgMjU2YzAtMzQuNi04LjQtNjcuMi0yMy40LTk1LjgtNi40IC45LTEyLjcgMy45LTE3LjkgOS4xbC0xMy40IDEzLjRjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDM0LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjQuMSAwYzIuNSAwIDUtLjMgNy4zLS44IC40LTUgLjUtMTAuMSAuNS0xNS4yek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdfSxsdnQ9aTcsY3Z0PWk3LGR2dD1pNyxmdnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2Fycm90IixpY29uOls2NDAsNTEyLFsxMjkzNjVdLCJmNzg3IiwiTTQ1My4xLTM2LjdMNDQwLjktMjQuNmMtMzEuMiAzMS4yLTMxLjIgODEuOSAwIDExMy4xIDE1LjYgMTUuNiAzMS4yIDMxLjIgNDYuOSA0Ni45IDMxLjIgMzEuMiA4MS45IDMxLjIgMTEzLjEgMGwxMi4xLTEyLjFjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZMNjAwLjkgODguNmMtMzEuMi0zMS4yLTgxLjktMzEuMi0xMTMuMSAwIDMxLjItMzEuMiAzMS4yLTgxLjkgMC0xMTMuMUw0NzUuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHpNMzMxLjYgOTZjLTQ1LjIgMC04Ny4xIDIwLjQtMTE1IDU0LjNMMjczLjMgMjA3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMMTkxLjYgMTkzLjIgNjcuMiA0NjYuOGMtNS41IDEyLjEtMi45IDI2LjQgNi41IDM1LjlzMjMuNyAxMiAzNS45IDYuNWwxNDEuNi02NC40LTQzLjgtNDMuOGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDU2LjUgNTYuNSA5NS4zLTQzLjNjNTMuMS0yNC4xIDg3LjItNzcuMSA4Ny4yLTEzNS41IDAtODIuMi02Ni42LTE0OC44LTE0OC44LTE0OC44eiJdfSxvNz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW1wZXJhdHVyZS1mdWxsIixpY29uOlszMjAsNTEyLFsidGVtcGVyYXR1cmUtNCIsInRoZXJtb21ldGVyLTQiLCJ0aGVybW9tZXRlci1mdWxsIl0sImYyYzciLCJNMTYwIDBDMTA3IDAgNjQgNDMgNjQgOTZsMCAxNjQuN0MzNC41IDI4NyAxNiAzMjUuNCAxNiAzNjggMTYgNDQ3LjUgODAuNSA1MTIgMTYwIDUxMnMxNDQtNjQuNSAxNDQtMTQ0YzAtNDIuNi0xOC41LTgxLTQ4LTEwNy4zTDI1NiA5NmMwLTUzLTQzLTk2LTk2LTk2em02NCAzNjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNi45IDE2LjUtNDkuOSA0MC01OS4zTDEzNiA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjEyLjdjMjMuNSA5LjUgNDAgMzIuNSA0MCA1OS4zeiJdfSx1dnQ9bzcscHZ0PW83LGh2dD1vNyxtdnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGFibGUtY2VsbHMtcm93LWxvY2siLGljb246WzY0MCw1MTIsW10sImU2N2EiLCJNMjU2IDI4OGwwLTY0IDE1My4zIDBjMTcuMS00Mi4yIDU2LTczLjIgMTAyLjctNzlsMC00OWMwLTM1LjMtMjguNy02NC02NC02NEwxMjggMzJDOTIuNyAzMiA2NCA2MC43IDY0IDk2bDAgMzIwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDI0MS4zIDBjLS45LTUuMi0xLjMtMTAuNi0xLjMtMTYuMWwwLTQ3LjktMTEyIDAgMC02NCAxMTMuMyAwYzMuNy0yMiAxNC44LTQxLjQgMzAuNy01NS42bDAtOC40LTE0NCAwem0wLTE5MmwxOTIgMCAwIDY0LTE5MiAwIDAtNjR6TTU2MCAyNzIuMWwwIDQ3LjktNjQgMCAwLTQ3LjljMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDE2IDM2OGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zbDAtNTAuNmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDUwLjZjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM3oiXX0sZ3Z0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvbHQtbGlnaHRuaW5nIixpY29uOlszODQsNTEyLFtdLCJlMGI3IiwiTTAgMjU2TDI4LjUgMjhjMi0xNiAxNS42LTI4IDMxLjgtMjhMMjI4LjkgMGMxNSAwIDI3LjEgMTIuMSAyNy4xIDI3LjEgMCAzLjItLjYgNi41LTEuNyA5LjVMMjA4IDE2MCAzNDcuMyAxNjBjMjAuMiAwIDM2LjcgMTYuNCAzNi43IDM2LjcgMCA3LjQtMi4yIDE0LjYtNi40IDIwLjdsLTE5Mi4yIDI4MWMtNS45IDguNi0xNS42IDEzLjctMjUuOSAxMy43bC0yLjkgMGMtMTUuNyAwLTI4LjUtMTIuOC0yOC41LTI4LjUgMC0yLjMgLjMtNC42IC45LTYuOUwxNzYgMjg4IDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il19LHh2dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG91ZC1zaG93ZXJzLXdhdGVyIixpY29uOls1MTIsNTEyLFtdLCJlNGU0IiwiTTI3OS4yIDU1LjdDMjYzLjkgMjIuOCAyMzAuNiAwIDE5MiAwIDEzOSAwIDk2IDQzIDk2IDk2IDYwLjcgOTYgMzIgMTI0LjcgMzIgMTYwczI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRsLTEuNiAwYy03LjQtMzYuNS0zOS43LTY0LTc4LjQtNjQtMjIuMiAwLTQyLjMgOS4xLTU2LjggMjMuN3pNNDEwLjYgNDc2LjFjMjAuNyAxNS42IDQ2IDMwLjcgNzQuMiAzNC41IDEzLjEgMS44IDI1LjItNy41IDI3LTIwLjZzLTcuNS0yNS4yLTIwLjYtMjdjLTE1LjktMi4xLTMzLjItMTEuMy01MS43LTI1LjItMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMTguNSAxMy45LTM1LjggMjMuMS01MS43IDI1LjItMTMuMSAxLjgtMjIuNCAxMy44LTIwLjYgMjdzMTMuOCAyMi40IDI3IDIwLjZjMjguMi0zLjggNTMuNi0xOC45IDc0LjItMzQuNSAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwek0xMDAuMSAzMDMuNmM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NEMyOSAzNjUgMzUuOCAzNzguNiA0OC40IDM4Mi44czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMjAgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMTIgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMjAgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0eiJdfSxmb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAtbG9uZyIsaWNvbjpbMzIwLDUxMixbImxvbmctYXJyb3ctdXAiXSwiZjE3NiIsIk0xODIuNi0yMi42Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxMjggNzcuMyAxMjggNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC00MzQuNyA3My40IDczLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOHoiXX0sYnZ0PWZvZSxVVj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhZGRyZXNzLWNhcmQiLGljb246WzU3Niw1MTIsWzYyMTQwLCJjb250YWN0LWNhcmQiLCJ2Y2FyZCJdLCJmMmJiIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTgwIDI1Nmw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNkw4MCAzODRjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTQ0LjIgMzUuOC04MCA4MC04MHptLTI0LTk2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMjQwLTQ4bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMTIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCA5NmwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LHZ2dD1VVix5dnQ9VVYsd3Z0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFuZ2xlLXJpZ2h0IixpY29uOlsyNTYsNTEyLFs4MjUwXSwiZjEwNSIsIk0yNDcuMSAyMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTc5LjIgMjU2IDQxLjkgMTE4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MHoiXX0sdW9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtbWVoIixpY29uOls1MTIsNTEyLFsxMjg1MjgsIm1laCJdLCJmMTFhIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTE3NiAzMjBsMTYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSxNdnQ9dW9lLHp2dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy11cC1mcm9tLWdyb3VuZC13YXRlciIsaWNvbjpbNjQwLDUxMixbXSwiZTRiNSIsIk0zMDMgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw4OCA4OGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00NyAwIDI3OC4xYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjc4LjEtNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMzAzIDd6TTI0MCAxOTJsMCAxNjMuMWMtMTAuNi0yLjItMjEuMy0zLjItMzItMy4xLTMyLjUgLjItNjQuOSAxMC43LTkyLjMgMzEuNC04LjggNi42LTE1LjkgMTAuOS0yMS43IDEzLjVsLS44IC40Yy0zLjcgMS43LTYuNCAyLjktOS44IC4zLTYtNC41LTEyLjYtOC0xOS4zLTEwLjRMNjQgMjQwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDEyOCAwem0zMzYgNDhsMCAxNTUuMmMtMS4xIC44LTIuMiAxLjUtMy4zIDIuNC00LjEgMy4xLTguMyAuOC0xMi42LTEuNS0uNi0uMy0xLjItLjYtMS44LTEtNS4yLTIuNy0xMS4xLTYuNi0xOC0xMS43LTI4LjEtMjEuMS02MS4zLTMxLjYtOTQuNC0zMS40LTE1LjUgLjEtMzEgMi41LTQ2IDcuM2wwLTE2Ny4zIDEyOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek00MDMuNCA0NzYuMUMzNzkuMSA0OTQuMyAzNTEuMSA1MTIgMzIwIDUxMnMtNTkuMS0xNy43LTgzLjQtMzUuOWMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMjMuOCAxNy45LTU0LjEgMzUuNS04OC4xIDM1LjMtMjAuNC0uMS00MC43LTYuNy01OS44LTIxLjEtMTAuNi04LTEyLjctMjMtNC43LTMzLjZzMjMtMTIuNyAzMy42LTQuN2MxMS4zIDguNSAyMS42IDExLjQgMzEuMiAxMS41IDE3LjYgLjEgMzcuMy05LjQgNTguOS0yNS43IDM4LjQtMjkgOTAuNS0yOSAxMjkgMCAyNCAxOC4xIDQwLjcgMjYuMyA1NC41IDI2LjNzMzAuNS04LjIgNTQuNS0yNi4zYzM4LjQtMjkgOTAuNS0yOSAxMjkgMCAxNi45IDEyLjcgMzIuOSAyMS41IDQ3LjggMjQuNiAxMy43IDIuOCAyNy40IC45IDQyLjMtMTAuMyAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI2LjQgMTkuOS01NC4yIDI0LjQtODAuNyAxOS4xLTI1LjMtNS4xLTQ4LjEtMTguOS02Ny4yLTMzLjMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDB6Il19LGt2dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXAiLGljb246WzUxMiw1MTIsWzEyODUwNiw2MjA3Ml0sImYyNzkiLCJNNTEyIDQ4YzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40TDM0OS41IDc3LjUgMTcwLjEgMTcuNmMtOC4xLTIuNy0xNi44LTIuMS0yNC40IDEuN2wtMTI4IDY0QzYuOCA4OC44IDAgOTkuOSAwIDExMkwwIDQ2NGMwIDExLjEgNS43IDIxLjQgMTUuMiAyNy4yczIxLjIgNi40IDMxLjEgMS40bDExNi4xLTU4LjEgMTc5LjQgNTkuOGM4LjEgMi43IDE2LjggMi4xIDI0LjQtMS43bDEyOC02NGMxMC44LTUuNCAxNy43LTE2LjUgMTcuNy0yOC42bDAtMzUyek0xOTIgMzc2LjlsMC0yODQuNSAxMjggNDIuNyAwIDI4NC41LTEyOC00Mi43eiJdfSxTdnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1wbHVzIixpY29uOls2NDAsNTEyLFtdLCJmMjM0IiwiTTEzNiAxMjhhMTIwIDEyMCAwIDEgMSAyNDAgMCAxMjAgMTIwIDAgMSAxIC0yNDAgMHpNNDggNDgyLjNDNDggMzgzLjggMTI3LjggMzA0IDIyNi4zIDMwNGw1OS40IDBjOTguNSAwIDE3OC4zIDc5LjggMTc4LjMgMTc4LjMgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNzcuNyA1MTJDNjEuMyA1MTIgNDggNDk4LjcgNDggNDgyLjN6TTU0NCA5NmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4IDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDAgMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4LTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMCAwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdfSxDdnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidmVudXMiLGljb246WzM4NCw1MTIsWzk3OTJdLCJmMjIxIiwiTTgwIDE3NmExMTIgMTEyIDAgMSAxIDIyNCAwIDExMiAxMTIgMCAxIDEgLTIyNCAwek0yMjMuOSAzNDkuMUMzMDUuOSAzMzQuMSAzNjggMjYyLjMgMzY4IDE3NiAzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NC4xIDE3My4xLS4xIDEtLjEgMS45LS4xIDIuOWwwIDY0LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtNjRjMC0xIDAtMS45LS4xLTIuOXoiXX0sTHZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRpYWdyYW0tc3VjY2Vzc29yIixpY29uOls0NDgsNTEyLFtdLCJlNDdhIiwiTTI4OS4yIDEzNy45YzIuNS02IDguMy05LjkgMTQuOC05LjlsNDAgMCAwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC05OCAwYzEuMyA1LjEgMiAxMC41IDIgMTZsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtOTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwyNTYgMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDI0IDQwIDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlzMS4xIDEyLjktMy41IDE3LjRsLTY0IDY0Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNjQtNjRjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjR6TTM4NCA0ODBMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTE2MCAxNjBsMC02NC05NiAwIDAgNjQgOTYgMHoiXX0sVHZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYWQtc2lkZS1jb3VnaC1zbGFzaCIsaWNvbjpbNTc2LDUxMixbXSwiZTA2MiIsIk01MzUtMjQuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMNDEgNTM3LjFjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMjUtMjUgMC00NDcuMmMwLTE1IDEwLjUtMjguMyAyNS40LTI5LjggNy40LS43IDE0LjktMS4xIDIyLjYtMS4xIDExMi43IDAgMjA2IDgzLjMgMjIxLjcgMTkxLjcgLjQgMyAxLjcgNS45IDMuNiA4LjNsMi4yIDIuNiAyMjcuNS0yMjcuNXpNMTMzLjggNTEyTDI4OCAzNTcuOCAyODggNDE2YzAgNTMtNDMgOTYtOTYgOTZsLTU4LjIgMHpNMTc2IDIyNGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTMzNiA0MGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bS04OCA3MmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0tNjQgNDhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTI4IDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMjQgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0tODgtMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXX0scG9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRpYWdyYW0tcHJvamVjdCIsaWNvbjpbNTEyLDUxMixbInByb2plY3QtZGlhZ3JhbSJdLCJmNTQyIiwiTTAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2IDEyOCAwIDAtMTZjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2LTEyOCAwIDAgMTZjMCA3LjMtMS43IDE0LjMtNC42IDIwLjVsNjguNiA5MS41IDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTcuMyAxLjctMTQuMyA0LjYtMjAuNUwxMjggMjI0IDQ4IDIyNGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MHoiXX0sX3Z0PXBvZSxOVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZXJtaW5hbCIsaWNvbjpbNTEyLDUxMixbXSwiZjEyMCIsIk05LjQgMTE4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTQ2LjcgMjU2IDkuNCAxMTguNnpNMjI0IDM4NGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il19LEF2dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZS1maXJlIixpY29uOls2NDAsNTEyLFtdLCJlNTBjIiwiTTQ0OCAxOTJjMTQuMSAuNCAyMy44IDExLjQgMzIuNyAyMS43IDIgMi4zIDQgNC42IDYgNi43bDE5IDE5LjkgMTIuMi0xMy44YzUuNC02LjEgMTMuMy04LjkgMjAuOS04LjkgNy4yIDAgMTQuMyAyLjYgMTkuOSA3LjggMTkuNyAxOC4zIDM5LjggNDMuMiA1NSA3MC42IDE1LjEgMjcuMiAyNi4yIDU4LjIgMjYuMiA4OC4yIDAgODguNy03MS4zIDE1OS44LTE2MCAxNTkuOC04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44IDAtMzcuMyAxNi03My40IDM2LjgtMTA0LjUgMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4xIDUuNy01LjIgMTMuMS03LjcgMjAuMy03LjV6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMTQ3LjUgMTM3Yy0xOS4yLTQuMy00MCAuNS01NS41IDE0LjQtMzYuNCAzMi42LTY3LjcgNjkuOC05MC4zIDEwNi40LTEwLjMgMTYuNi0xOS43IDM0LjktMjYuOCA1My43TDI3MiAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgNjQuNiAwYzcuMyAxNy4yIDE2LjggMzMuNCAyOC4yIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNDg5LjMgMzQzLjdjLTUuNC00LjctMTMuMS00LjctMTguNSAwLTE3LjcgMTUuNC01NC43IDUxLjktNTQuNyA4OC40IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC0zNi41LTM3LTczLTU0LjctODguNHoiXX0sJHZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hc2siLGljb246WzU3Niw1MTIsW10sImY2ZmEiLCJNMjg4IDY0QzY0IDY0IDAgMTYwIDAgMjcyUzgwIDQ0OCAxNzYgNDQ4bDguNCAwYzI0LjIgMCA0Ni40LTEzLjcgNTcuMi0zNS40bDIzLjItNDYuM2M0LjQtOC44IDEzLjMtMTQuMyAyMy4yLTE0LjNzMTguOCA1LjUgMjMuMiAxNC4zbDIzLjIgNDYuM2MxMC44IDIxLjcgMzMgMzUuNCA1Ny4yIDM1LjRsOC40IDBjOTYgMCAxNzYtNjQgMTc2LTE3NlM1MTIgNjQgMjg4IDY0ek05NiAyNTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwem0zMjAtNjRhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il19LER2dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJodXJyaWNhbmUiLGljb246WzM4NCw1MTIsW10sImY3NTEiLCJNMCAyMDhDMCAxMDQuNCA3NS43IDE4LjUgMTc0LjkgMi42IDE4NCAxLjIgMTkyIDguNiAxOTIgMTcuOWwwIDYzLjNjMCA4LjQgNi41IDE1LjMgMTQuNyAxNi41IDEwMC4zIDE0LjkgMTc3LjMgMTAxLjMgMTc3LjMgMjA1LjcgMCAxMDMuNi03NS43IDE4OS41LTE3NC45IDIwNS40LTkuMiAxLjUtMTcuMS01LjktMTcuMS0xNS4ybDAtNjMuM0MxOTIgNDIxLjkgMTg1LjUgNDE1IDE3Ny4zIDQxMy43IDc3IDM5OC45IDAgMzEyLjQgMCAyMDh6bTI4OCA0OGE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6bS05Ni0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LGhvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlYXJ0aC1hZnJpY2EiLGljb246WzUxMiw1MTIsWzEyNzc1NywiZ2xvYmUtYWZyaWNhIl0sImY1N2MiLCJNNDQ3LjYgMTc1Yy0zMS42LTc0LjYtMTA1LjUtMTI3LTE5MS42LTEyNy0yMi4xIDAtNDMuNCAzLjUtNjMuNCA5LjgtLjQgMi0uNiA0LjEtLjYgNi4ybDAgNzMuNGMwIDEyLjUgMTAuMSAyMi42IDIyLjYgMjIuNiA2IDAgMTEuOC0yLjQgMTYtNi42bDE2LTE2YzYtNiAxNC4xLTkuNCAyMi42LTkuNGw1LjUgMGMyOC41IDAgNDIuOCAzNC41IDIyLjYgNTQuNi02IDYtMTQuMSA5LjQtMjIuNiA5LjRsLTYxLjUgMGMtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjRsLTIxLjMgMjEuM2MtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgNDIuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMi43IDBjOC41IDAgMTYuNi0zLjQgMjIuNi05LjRsMjkuMy0yOS4zYzYtNiA5LjQtMTQuMSA5LjQtMjIuNmwwLTE4LjdjMC04LjggNy4yLTE2IDE2LTE2czE2LTcuMiAxNi0xNmwwLTM0LjdjMC04LjUtMy40LTE2LjYtOS40LTIyLjZsLTE2LTE2Yy00LjItNC4yLTYuNi0xMC02LjYtMTYgMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZsNDUgMGMxMi40IDAgMjIuNy03LjEgMjgtMTd6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il19LEV2dD1ob2UsbW9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRodW1idGFjayIsaWNvbjpbMzg0LDUxMixbMTI4MjA0LDEyODM5MiwidGh1bWItdGFjayJdLCJmMDhkIiwiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBMMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI5LjUgMCAxMC4zIDEzNC4xYzM3LjEgMjEuMiA2NS44IDU2LjQgNzguMiA5OS43bDMuOCAxMy40YzIuOCA5LjcgLjggMjAtNS4yIDI4LjFTMzYyIDM1MiAzNTIgMzUyTDMyIDM1MmMtMTAgMC0xOS41LTQuNy0yNS41LTEyLjdzLTgtMTguNC01LjItMjguMUw1IDI5Ny44YzEyLjQtNDMuMyA0MS03OC41IDc4LjItOTkuN0w5My41IDY0IDY0IDY0QzQ2LjMgNjQgMzIgNDkuNyAzMiAzMnpNMTYwIDQwMGw2NCAwIDAgMTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTEyeiJdfSxOdnQ9bW9lLFB2dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLXBvaW50LWRvd24iLGljb246WzM4NCw1MTIsW10sImYwYTciLCJNMzIgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMDgtNjQgMCAwIDIwOHpNMjI0IDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NHptLTY0IDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnptMTYwLTk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0em0tOTYtODhsMCAuNmM5LjQtNS40IDIwLjMtOC42IDMyLTguNiAxMy4yIDAgMjUuNCA0IDM1LjYgMTAuOCA4LjctMjQuOSAzMi41LTQyLjggNjAuNC00Mi44IDExLjcgMCAyMi42IDMuMSAzMiA4LjZsMC04LjZDMzg0IDcxLjYgMzEyLjQgMCAyMjQgMEwxNjIuMyAwQzExOS44IDAgNzkuMSAxNi45IDQ5LjEgNDYuOUwzNy41IDU4LjVDMTMuNSA4Mi41IDAgMTE1LjEgMCAxNDlsMCAyN2MwIDM1LjMgMjguNyA2NCA2NCA2NGw4OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwbC01NiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDU2IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJ6Il19LGdvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLW1laC1ibGFuayIsaWNvbjpbNTEyLDUxMixbMTI4NTY2LCJtZWgtYmxhbmsiXSwiZjVhNCIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yMDgtNDhhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTI4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0sSXZ0PWdvZSxzNz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW1wZXJhdHVyZS1lbXB0eSIsaWNvbjpbMzIwLDUxMixbInRlbXBlcmF0dXJlLTAiLCJ0aGVybW9tZXRlci0wIiwidGhlcm1vbWV0ZXItZW1wdHkiXSwiZjJjYiIsIk02NCA5NmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgMTY0LjdjMjkuNSAyNi40IDQ4IDY0LjcgNDggMTA3LjMgMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTMTYgNDQ3LjUgMTYgMzY4YzAtNDIuNiAxOC41LTgxIDQ4LTEwNy4zTDY0IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjQtNjQgMjguNy02NCA2NCAyOC43IDY0IDY0IDY0eiJdfSxGdnQ9czcsT3Z0PXM3LEJ2dD1zNyxSdnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9yZGVyLW5vbmUiLGljb246WzQ0OCw1MTIsW10sImY4NTAiLCJNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMnpNMTYwIDMyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNMjg4IDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzJ6TTE2MCA0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyek0yODggMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek00MTYgNDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnptMC0zODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zMiAzMmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6TTQxNiAzNTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zMiAxNjBhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wIDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTQxNiAxNjBhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0eiJdfSxIdnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGlnaGxpZ2h0ZXIiLGljb246WzU3Niw1MTIsW10sImY1OTEiLCJNMzE1IDMxNUw0NzMuNCA5OS45IDQ0NC4xIDcwLjYgMjI5IDIyOSAzMTUgMzE1em0tMTg3IDVsMCAwIDAtNzEuN2MwLTE1LjMgNy4yLTI5LjYgMTkuNS0zOC42TDQyMC42IDguNEM0MjggMi45IDQzNyAwIDQ0Ni4yIDAgNDU3LjYgMCA0NjguNSA0LjUgNDc2LjYgMTIuNmw1NC44IDU0LjhjOC4xIDguMSAxMi42IDE5IDEyLjYgMzAuNSAwIDkuMi0yLjkgMTguMi04LjQgMjUuNkwzMzQuNCAzOTYuNWMtOSAxMi4zLTIzLjQgMTkuNS0zOC42IDE5LjVsLTcxLjcgMC0yNS40IDI1LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC01MC43LTUwLjdjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDEyOCAzMjB6TTcgNDY2LjNsNTEuNy01MS43IDcwLjYgNzAuNi0xOS43IDE5LjdjLTQuNSA0LjUtMTAuNiA3LTE3IDdMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQuN2MwLTYuNCAyLjUtMTIuNSA3LTE3eiJdfSxxdnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9uZXktYmlsbC13YXZlIixpY29uOls1MTIsNTEyLFtdLCJmNTNhIiwiTTAgNDE5LjZMMCAxMDkuNWMwLTIzLjIgMjQuMS0zOC42IDQ2LjMtMzIgODcuNyAyNi4yIDE0OS43IDUuNSAyMTIuMS0xNS4zIDY0LjUtMjEuNSAxMjkuNC00My4xIDIyMy4zLTEzLjEgMTguNSA1LjkgMzAuMyAyMy44IDMwLjMgNDMuM2wwIDMxMC4xYzAgMjMuMi0yNC4xIDM4LjYtNDYuMiAzMi04Ny43LTI2LjItMTQ5LjgtNS41LTIxMi4xIDE1LjMtNjQuNSAyMS41LTEyOS40IDQzLjEtMjIzLjMgMTMuMS0xOC41LTUuOS0zMC4zLTIzLjgtMzAuMy00My4zek0zMzYgMjU2YzAtNTMtMzUuOC05Ni04MC05NnMtODAgNDMtODAgOTYgMzUuOCA5NiA4MCA5NiA4MC00MyA4MC05NnpNMTIwIDQxMy42YzQuNCAwIDcuOS0zLjggNy4yLTguMS00LjYtMjcuOC0yNy00OS41LTU1LjItNTMtNC40LS41LTggMy4xLTggNy41bDAgMzkuOWMwIDMuNiAyLjQgNi44IDYgNy43IDE3LjkgNC4yIDM0LjMgNi4xIDUwIDYuMXptMzE4LjUtNTEuMWM1IC44IDkuNS0zIDkuNS04bDAtNDIuNmMwLTQuNC0zLjYtOC4xLTgtNy41LTI1LjIgMy4xLTQ1LjkgMjAuOS01My4yIDQ0LjYtMS40IDQuNyAyLjMgOS4xIDcuMiA5LjIgMTQuMiAuNCAyOSAxLjcgNDQuNCA0LjN6TTQ0OCAxNTJsMC0zOS45YzAtMy42LTIuNS02LjgtNi03LjctMTcuOS00LjItMzQuMy02LjEtNTAtNi4xLTQuNCAwLTcuOSAzLjgtNy4yIDguMSA0LjYgMjcuOCAyNyA0OS41IDU1LjIgNTMgNC40IC41IDgtMy4xIDgtNy41ek0xMjUuMiAxNjIuOWMxLjQtNC43LTIuMy05LjEtNy4yLTkuMi0xNC4yLS40LTI5LTEuNy00NC40LTQuMy01LS44LTkuNSAzLTkuNSA4TDY0IDIwMGMwIDQuNCAzLjYgOC4xIDggNy41IDI1LjItMy4xIDQ1LjktMjAuOSA1My4yLTQ0LjZ6Il19LFZ2dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0b2lsZXQtcGFwZXItc2xhc2giLGljb246WzU3Niw1MTIsW10sImUwNzIiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTQuNS05NC41YzQwLjItMjMgNjkuNS05Ni45IDY5LjUtMTg0LjYgMC0xMDYtNDMtMTkyLTk2LTE5MnMtOTYgODYtOTYgMTkyYzAgMjQuMSAyLjIgNDcuMiA2LjMgNjguNEwzMDQgMjM4LjIgMzA0IDIyNGMwLTU4LjkgMTEuOC0xMTQuNSAzMy4yLTE1Ny4yIDUuOS0xMS43IDEzLjEtMjMuNyAyMS45LTM0LjhMMTI4IDMyYy04LjMgMC0xNi40IDIuMS0yNC4xIDYuMWwtNjMtNjN6TTMyIDIyNGwwIDI2NGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwxNjAgMGMzMC45IDAgNTYtMjUuMSA1Ni01NmwwLTExNC4yLTI1Ni0yNTZDMzcuOSAxNDguMiAzMiAxODQuNyAzMiAyMjR6bTQxNiA2NGMtMTcuNyAwLTMyLTI4LjctMzItNjRzMTQuMy02NCAzMi02NCAzMiAyOC43IDMyIDY0LTE0LjMgNjQtMzIgNjR6Il19LFV2dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLXNoaWVsZCIsaWNvbjpbNTc2LDUxMixbXSwiZTRmMCIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwMS4yIDBDMjYxIDQ2OS40IDI0MCA0MTQuNSAyNDAgMzU2LjRsMC0zMS4xYzAtMzQuNCAyMi02NSA1NC43LTc1LjlsMTEyLTM3LjNjMy4xLTEgNi4yLTEuOCA5LjMtMi41bDAtMzkuMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnptODcuOCAzMTIuNWwtMTMuMyA2LjMgMC0xODguMSA5NiAzMiAwIDE5LjZjMCA1NS44LTMyLjIgMTA2LjUtODIuNyAxMzAuM3pNNDIxLjkgMjU5LjVsLTExMiAzNy4zYy0xMy4xIDQuNC0yMS45IDE2LjYtMjEuOSAzMC40bDAgMzEuMWMwIDc0LjQgNDMgMTQyLjEgMTEwLjIgMTczLjdsMTguNSA4LjdjNC44IDIuMiAxMCAzLjQgMTUuMiAzLjRzMTAuNS0xLjIgMTUuMi0zLjRsMTguNS04LjdDNTMzIDUwMC4zIDU3NiA0MzIuNiA1NzYgMzU4LjJsMC0zMS4xYzAtMTMuOC04LjgtMjYtMjEuOS0zMC40bC0xMTItMzcuM2MtNi42LTIuMi0xMy43LTIuMi0yMC4yIDB6Il19LGp2dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZXh0LWhlaWdodCIsaWNvbjpbNTc2LDUxMixbXSwiZjAzNCIsIk00MCAzMkMxNy45IDMyIDAgNDkuOSAwIDcybDAgNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDY0IDAgMCAzMjAtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTMyMCA2NCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTU2YzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDMyek00MzguNiAzNjEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTkuNCA5LjQgMC0yMjkuNSA5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy02LTYtMTQuMS05LjQtMjIuNi05LjRzLTE2LjYgMy40LTIyLjYgOS40bC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw5LjQtOS40IDAgMjI5LjUtOS40LTkuNHoiXX0seG9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi10b25ndWUiLGljb246WzUxMiw1MTIsWzEyODUzOSwiZ3Jpbi10b25ndWUiXSwiZjU4OSIsIk0wIDI1NmMwIDEwNC40IDYyLjUgMTk0LjIgMTUyLjIgMjM0LjEtNS4zLTEzLTguMi0yNy4yLTguMi00Mi4xbDAtNjEuN2MtMTYuOS0xNi41LTMwLjEtMzYuNy0zOC4zLTU5LjMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xYzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS04LjMgMjIuNi0yMS41IDQyLjgtMzguMyA1OS4zbDAgNjEuN2MwIDE0LjktMi45IDI5LjEtOC4yIDQyLjEgODkuNy0zOS44IDE1Mi4yLTEyOS42IDE1Mi4yLTIzNC4xIDAtMTQxLjQtMTE0LjYtMjU2LTI1Ni0yNTZTMCAxMTQuNiAwIDI1NnptMTc2LTgwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2IDI0MGwwLTQ1LjRjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZsLTIgMGMtMTEuMyAwLTIxLjEgNy45LTIzLjYgMTguOS0yLjggMTIuNi0yMC44IDEyLjYtMjMuNiAwLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjlsLTIgMGMtMTQuNyAwLTI2LjYgMTEuOS0yNi42IDI2LjZsMCA0NS40YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il19LFd2dD14b2UsR3Z0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtc2lnbmF0dXJlIixpY29uOls2NDAsNTEyLFtdLCJmNTczIiwiTTY0LjEgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRMMjc3LjYgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w0MjkuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgOTcuNS0xMzIgMTMyLTQyLjEgMC0xNi4xLTUzLjZjLTQuNy0xNS43LTE5LjEtMjYuNC0zNS41LTI2LjQtMTEuMyAwLTIxLjkgNS4xLTI4LjkgMTMuOUwxMzMuMyA0MDljLTguMyAxMC4zLTYuNiAyNS41IDMuNyAzMy43czI1LjUgNi42IDMzLjctMy44bDQ3LjEtNTguOCAxNS4yIDUwLjdjMyAxMC4yIDEyLjQgMTcuMSAyMyAxNy4xbDMxLjUgMGMtLjkgMy4xLTEuNyA2LjMtMi4zIDkuNWwtMTAuOSA1NC41LTE0Ni4yIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzg0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNGw5My41IDAtMTE3LjUtMTE3LjV6bTYwLjIgNDA4LjRjMi41LTEyLjQgOC42LTIzLjggMTcuNS0zMi43bDExOC45LTExOC45IDgwIDgwLTExOC45IDExOC45Yy04LjkgOC45LTIwLjMgMTUtMzIuNyAxNy41bC01OS42IDExLjljLS45IC4yLTEuOSAuMy0yLjkgLjMtOCAwLTE0LjYtNi41LTE0LjYtMTQuNiAwLTEgLjEtMS45IC4zLTIuOWwxMS45LTU5LjZ6bTI2Ny44LTEyM2wtMjguOCAyOC44LTgwLTgwIDI4LjgtMjguOGMyMi4xLTIyLjEgNTcuOS0yMi4xIDgwIDBzMjIuMSA1Ny45IDAgODB6Il19LFl2dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidWlsZGluZy13aGVhdCIsaWNvbjpbNjQwLDUxMixbXSwiZTRkYiIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI0OS4zIDBjLTYtMTQuOC05LjMtMzEtOS4zLTQ4IDAtMTcuNyA3LjItMzMuNyAxOC44LTQ1LjMtMTEuOS0xOS40LTE4LjgtNDIuMy0xOC44LTY2LjcgMC0xNy43IDcuMi0zMy43IDE4LjgtNDUuMy0xMS45LTE5LjQtMTguOC00Mi4zLTE4LjgtNjYuNyAwLTI1LjIgMTQuNS00Ni45IDM1LjYtNTcuNC0yLjQtNy4xLTMuNi0xNC43LTMuNi0yMi42bDAtMzJDMzY4IDk2LjcgMzg4IDcwLjEgNDE1LjkgNjAuMSA0MTMuOSAyNi42IDM4NiAwIDM1MiAwTDk2IDB6TTIwOCAzNTJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDgwLTk2IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTI4IDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptMzUyIDBsLTE2IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtOC44LTcuMi0xNi0xNi0xNnptMTYgMTI4YzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODB6bTAgMTEyYzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODB6TTQ5NiA1MjhjMC00NC4yLTM1LjgtODAtODAtODBsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnptLTE2LTk2YzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgNDQuMiAzNS44IDgwIDgwIDgwbDE2IDB6bTE2LTEyOGMwLTQ0LjItMzUuOC04MC04MC04MGwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgNDQuMiAzNS44IDgwIDgwIDgwbDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2ek01MTIgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDRjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTk2IDY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyek00NDAgMTA0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sWnZ0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsdWctY2lyY2xlLW1pbnVzIixpY29uOls2NDAsNTEyLFtdLCJlNTVlIiwiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzUyIDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMjQgMGMwLTguOC03LjItMTYtMTYtMTZsLTEyOCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNnoiXX0salY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZnV0Ym9sIixpY29uOls1MTIsNTEyLFs5OTE3LCJmdXRib2wtYmFsbCIsInNvY2Nlci1iYWxsIl0sImYxZTMiLCJNNDE3LjMgMzYwLjFsLTcxLjYtNC44Yy01LjItLjMtMTAuMyAxLjEtMTQuNSA0LjJzLTcuMiA3LjQtOC40IDEyLjVsLTE3LjYgNjkuNkMyODkuNSA0NDUuOCAyNzMgNDQ4IDI1NiA0NDhzLTMzLjUtMi4yLTQ5LjItNi40TDE4OS4yIDM3MmMtMS4zLTUtNC4zLTkuNC04LjQtMTIuNXMtOS4zLTQuNS0xNC41LTQuMmwtNzEuNiA0LjhjLTE3LjYtMjcuMi0yOC41LTU5LjItMzAuNC05My42TDEyNSAyMjguM2M0LjQtMi44IDcuNi03IDkuMi0xMS45czEuNC0xMC4yLS41LTE1bC0yNi43LTY2LjZDMTI4IDEwOS4yIDE1NS4zIDg5IDE4Ni43IDc2LjlsNTUuMiA0NmM0IDMuMyA5IDUuMSAxNC4xIDUuMXMxMC4yLTEuOCAxNC4xLTUuMWw1NS4yLTQ2YzMxLjMgMTIuMSA1OC43IDMyLjMgNzkuNiA1Ny45bC0yNi43IDY2LjZjLTEuOSA0LjgtMi4xIDEwLjEtLjUgMTVzNC45IDkuMSA5LjIgMTEuOWw2MC43IDM4LjJjLTEuOSAzNC40LTEyLjggNjYuNC0zMC40IDkzLjZ6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xNC4xLTMyNS43Yy04LjQtNi4xLTE5LjgtNi4xLTI4LjIgMEwxOTQgMjIxYy04LjQgNi4xLTExLjkgMTYuOS04LjcgMjYuOGwxOC4zIDU2LjNjMy4yIDkuOSAxMi40IDE2LjYgMjIuOCAxNi42bDU5LjIgMGMxMC40IDAgMTkuNi02LjcgMjIuOC0xNi42bDE4LjMtNTYuM2MzLjItOS45LS4zLTIwLjctOC43LTI2LjhsLTQ3LjktMzQuOHoiXX0sWHZ0PWpWLFF2dD1qVixib2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLXBsdXMiLGljb246WzUxMiw1MTIsWyJwbHVzLWNpcmNsZSJdLCJmMDU1IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMzIgMzQ0bDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXX0sS3Z0PWJvZSxKdnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnJhemlsaWFuLXJlYWwtc2lnbiIsaWNvbjpbNTEyLDUxMixbXSwiZTQ2YyIsIk00MDAgMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNiAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC00OC45IDBjLTI2IDAtNDcuMSAyMS4xLTQ3LjEgNDcuMSAwIDIyLjUgMTUuOSA0MS44IDM3LjkgNDYuMmwzMi44IDYuNmM1MS45IDEwLjQgODkuMyA1NiA4OS4zIDEwOSAwIDUwLjYtMzMuOCA5My4zLTgwIDEwNi43bDAgMjAuNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQuOSAwYzI2IDAgNDcuMS0yMS4xIDQ3LjEtNDcuMSAwLTIyLjUtMTUuOS00MS44LTM3LjktNDYuMmwtMzIuOC02LjZjLTUxLjktMTAuNC04OS4zLTU2LTg5LjMtMTA5IDAtNTAuNiAzMy44LTkzLjIgODAtMTA2LjdMMzY4IDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDgwIDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCA1NC4zLTMwIDEwMS41LTc0LjQgMTI2LjFsNDEgMTM2LjdjNS4xIDE2LjktNC41IDM0LjgtMjEuNSAzOS44cy0zNC44LTQuNS0zOS44LTIxLjVMMTIwLjEgMzE5LjhjLTIuNyAuMS01LjQgLjItOC4xIC4ybC00OCAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjU2bDQ4IDBjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBsLTQ4IDAgMCAxNjB6Il19LGV5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdGFyLWFuZC1jcmVzY2VudCIsaWNvbjpbNTEyLDUxMixbOTc3MF0sImY2OTkiLCJNMCAyNTZjMC0xNDEuNCAxMTQuNi0yNTYgMjU2LTI1NiAzMyAwIDY0LjYgNi4zIDkzLjYgMTcuNyA3LjQgMi45IDExLjUgMTAuNyA5LjggMTguNHMtOC44IDEzLTE2LjcgMTIuNGMtNC44LS4zLTkuNy0uNS0xNC42LS41LTExNC45IDAtMjA4IDkzLjEtMjA4IDIwOHM5My4xIDIwOCAyMDggMjA4YzQuOSAwIDkuOC0uMiAxNC42LS41IDcuOS0uNSAxNSA0LjcgMTYuNyAxMi40cy0yLjQgMTUuNS05LjggMTguNEMzMjAuNiA1MDUuNyAyODkgNTEyIDI1NiA1MTIgMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZ6TTM3NS40IDEzNy40YzMuNS03LjEgMTMuNy03LjEgMTcuMiAwbDMxLjUgNjMuOGMxLjQgMi44IDQuMSA0LjggNy4yIDUuM2w3MC40IDEwLjJjNy45IDEuMSAxMSAxMC44IDUuMyAxNi40bC01MC45IDQ5LjZjLTIuMyAyLjItMy4zIDUuNC0yLjggOC41bDEyIDcwLjFjMS4zIDcuOC02LjkgMTMuOC0xMy45IDEwLjFsLTYzLTMzLjFjLTIuOC0xLjUtNi4xLTEuNS04LjkgMGwtNjMgMzMuMWMtNyAzLjctMTUuMy0yLjMtMTMuOS0xMC4xbDEyLTcwLjFjLjUtMy4xLS41LTYuMy0yLjgtOC41TDI2MSAyMzMuMWMtNS43LTUuNi0yLjYtMTUuMiA1LjMtMTYuNGw3MC40LTEwLjJjMy4xLS41IDUuOC0yLjQgNy4yLTUuM2wzMS41LTYzLjh6Il19LHZvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLXN1cnByaXNlIixpY29uOls1MTIsNTEyLFsxMjg1NTgsInN1cnByaXNlIl0sImY1YzIiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3NiAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTQ4IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdfSx0eXQ9dm9lLGF5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3NwaXRhbC11c2VyIixpY29uOls2NDAsNTEyLFtdLCJmODBkIiwiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTIxLjNjLTQ2LjkgMTktODAgNjUtODAgMTE4LjcgMCAyNy43IDguOCA1My40IDIzLjggNzQuNC01MS41IDIxLTg3LjggNzEuNi04Ny44IDEzMC43IDAgMSAwIDEuOSAwIDIuOWwtMTc2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDY0IDY0ek0yMDggNDAwbDAgNjQgNTMuNCAwYzcuMi0yOS40IDIxLjMtNTYuMSA0MC40LTc4LjMtNi4xLTE5LjUtMjQuMy0zMy43LTQ1LjgtMzMuNy0yNi41IDAtNDggMjEuNS00OCA0OHpNMjQ4IDg4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMi0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMCAwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyIDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwIDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwek00MTYgMzA0YTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHpNMzUyIDUxMmMwLTUzIDQzLTk2IDk2LTk2bDk2IDBjNTMgMCA5NiA0MyA5NiA5NiAwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxyeXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctZG93bi11cC1sb2NrIixpY29uOls1NzYsNTEyLFtdLCJlNGIwIiwiTTI2Mi42IDQyMi42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDI1LjQgMjUuNCAwLTExNC43LTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjU2IDAgMC0xMTQuNy0yNS40IDI1LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDgwLTgwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDgwIDgwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC0yNS40LTI1LjQgMCA5NC44Yy0yNS4zIDIwLjMtNDIuOCA1MC4xLTQ3IDgzLjlsLTE0NSAwIDAgMTE0LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTE5MiAzMmwwIDE0NC02NCAwIDAtMTQ0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTQ5NiAzMDQuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il19LHlvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmb2xkZXIiLGljb246WzUxMiw1MTIsWzEyODE5MywxMjg0NDcsNjE3MTYsImZvbGRlci1ibGFuayJdLCJmMDdiIiwiTTY0IDQ0OGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI0MGMwLTM1LjMtMjguNy02NC02NC02NEwyOTguNyA4MGMtNi45IDAtMTMuNy0yLjItMTkuMi02LjRMMjQxLjEgNDQuOEMyMzAgMzYuNSAyMTYuNSAzMiAyMDIuNyAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0eiJdfSxpeXQ9eW9lLG95dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob2xseS1iZXJyeSIsaWNvbjpbNTEyLDUxMixbXSwiZjdhYSIsIk0yNTYuMiA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS04MCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTI3NyAzODMuOGMxIC4xIDIuMSAuMiAzLjIgLjIgMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAyMi43YzAgMTYuNCAxNiAyNy45IDMxLjYgMjIuOGwxMi44LTQuM2MxOC02IDM3LjMtNi41IDU1LjYtMS41bDE5LjQgNS4zYzE3LjkgNC45IDM0LjQtMTEuNiAyOS41LTI5LjVMNDk1LjkgNDUyYy01LTE4LjMtNC40LTM3LjYgMS41LTU1LjZsNC4zLTEyLjhjNS4yLTE1LjUtNi40LTMxLjYtMjIuOC0zMS42LTM0LjYgMC02Mi43LTI4LjEtNjIuNy02Mi43bDAtMzJjMC0xNi40LTE2LTI3LjktMzEuNi0yMi44bC0xMi44IDQuM2MtMTggNi0zNy4zIDYuNS01NS42IDEuNWwtMjkuNi04LjFjLTIuOS0uOC01LjktMS04LjctLjcgNC4yIDkuNyA1LjggMjAuOCAzLjcgMzIuM2wtNi4zIDM0LjhjLTEuNSA4LjQtMS40IDE3IC41IDI1LjNsNS4zIDIzLjljMi44IDEyLjcgMS4xIDI1LjItNCAzNS45ek0xMjcuOCAyMzQuNWMtMTUuNS01LjItMzEuNiA2LjQtMzEuNiAyMi44bDAgMzJjMCAzNC42LTI4LjEgNjIuNy02Mi43IDYyLjctMTYuNCAwLTI3LjkgMTYtMjIuOCAzMS42TDE1IDM5Ni40YzYgMTggNi41IDM3LjMgMS41IDU1LjZsLTUuMyAxOS40QzYuNCA0ODkuNCAyMi44IDUwNS44IDQwLjcgNTAxbDE5LjQtNS4zYzE4LjMtNSAzNy42LTQuNSA1NS42IDEuNWwxMi44IDQuM2MxNS41IDUuMiAzMS42LTYuNCAzMS42LTIyLjhsMC0zMmMwLTM0LjYgMjguMS02Mi43IDYyLjctNjIuNyAxNi40IDAgMjcuOS0xNiAyMi44LTMxLjZsLTQuMy0xMi44Yy02LTE4LTYuNS0zNy4zLTEuNS01NS42bDUuMy0xOS40YzQuOS0xNy45LTExLjYtMzQuNC0yOS41LTI5LjVsLTE5LjQgNS4zYy0xOC4zIDUtMzcuNiA0LjQtNTUuNi0xLjVsLTEyLjgtNC4zek0zODQuMiAxNDRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXX0sc3l0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZlbnVzLWRvdWJsZSIsaWNvbjpbNjQwLDUxMixbOTg5MF0sImYyMjYiLCJNMTkyIDI4OGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6TTM2OCAxNzZjMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0LjEgMTczLjEgLjEgMSAuMSAxLjkgLjEgMi45bDAgNjQgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjRjMC0xIDAtMS45IC4xLTIuOS04Mi0xNS0xNDQuMS04Ni44LTE0NC4xLTE3My4xIDAtOTcuMiA3OC44LTE3NiAxNzYtMTc2UzM2OCA3OC44IDM2OCAxNzZ6TTM1Ny41IDMyN2MxNC40LTE1LjggMjYuNi0zMy43IDM2LjEtNTMuMSAxNi4xIDkgMzQuNyAxNC4xIDU0LjUgMTQuMSA2MS45IDAgMTEyLTUwLjEgMTEyLTExMlM1MDkuOSA2NCA0NDggNjRjLTE5LjggMC0zOC4zIDUuMS01NC41IDE0LjEtOS41LTE5LjQtMjEuNi0zNy4zLTM2LjEtNTMuMSAyNi40LTE1LjkgNTcuNC0yNSA5MC41LTI1IDk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgODYuMy02Mi4xIDE1OC4xLTE0NC4xIDE3My4xIC4xIC45IC4xIDEuOSAuMSAyLjlsMCA2NCAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC02NGMwLTEgMC0xLjkgLjEtMi45LTIxLjEtMy45LTQwLjktMTEuNS01OC42LTIyLjJ6Il19LG55dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbGlwYm9hcmQtcXVlc3Rpb24iLGljb246WzM4NCw1MTIsW10sImU0ZTMiLCJNMzExLjQgMzJsOC42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDguNiAwQzgzLjYgMTIuOSAxMDQuMyAwIDEyOCAwTDI1NiAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMnpNMjQ4IDExMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDB6TTE5MiAyNDhjMTYuMSAwIDI5LjIgMTMuMSAyOS4yIDI5LjIgMCA4LjctMy4xIDEzLjktNi45IDE3LjctNC41IDQuNC0xMC43IDcuNS0xNi44IDkuNS0xNC45IDUtMjkuNSAxOS4zLTI5LjUgMzkuNSAwIDEzLjMgMTAuNyAyNCAyNCAyNCAxMS41IDAgMjEuMi04LjEgMjMuNS0xOSAxOS4yLTcuMSA1My43LTI2LjMgNTMuNy03MS44IDAtNDIuNi0zNC42LTc3LjItNzcuMi03Ny4ycy03Ny4yIDM0LjYtNzcuMiA3Ny4yYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xNi4xIDEzLjEtMjkuMiAyOS4yLTI5LjJ6bTI4IDE2OGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOCAxMi41IDI4IDI4IDI4IDI4LTEyLjUgMjgtMjh6Il19LGx5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3Rkb2ciLGljb246WzUxMiw1MTIsWzEyNzc4OV0sImY4MGYiLCJNMjg4IDBjLTIwLjUgMC00MC4xIDguMS01NC42IDIyLjZMMjIuNiAyMzMuNEM4LjEgMjQ3LjkgMCAyNjcuNSAwIDI4OCAwIDMwMC4yIDIuOSAzMTIuMSA4LjIgMzIyLjdMMzIyLjcgOC4yQzMxMi4xIDIuOSAzMDAuMiAwIDI4OCAwek0yMjQgNTEyYzIwLjUgMCA0MC4xLTguMSA1NC42LTIyLjZMNDg5LjQgMjc4LjZjMTQuNS0xNC41IDIyLjYtMzQuMSAyMi42LTU0LjYgMC0xMi4yLTIuOS0yNC4xLTguMi0zNC43TDE4OS4zIDUwMy44YzEwLjcgNS40IDIyLjYgOC4yIDM0LjcgOC4yek00NTYuNiAxNjguNmMzMS4yLTMxLjIgMzEuMi04MS45IDAtMTEzLjFzLTgxLjktMzEuMi0xMTMuMSAwbC0yODggMjg4Yy0zMS4yIDMxLjItMzEuMiA4MS45IDAgMTEzLjFzODEuOSAzMS4yIDExMy4xIDBsMjg4LTI4OHoiXX0sY3l0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXVwLWZyb20tYnJhY2tldCIsaWNvbjpbNDQ4LDUxMixbXSwiZTA5YSIsIk0yNDYuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5MiAxMDkuMyAxOTIgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMTAuNyA3My40IDczLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOHpNNjQgMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMzM0LjMgMCAzNTJsMCA2NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHoiXX0sZHl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1pY3Jvc2NvcGUiLGljb246WzUxMiw1MTIsWzEyODMwMF0sImY2MTAiLCJNMTc2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMjA4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NCAzMiAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4UzM5MC43IDQ0OCAzMjAgNDQ4TDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYuOSAwYzMwLjQtMzQgNDguOS03OC44IDQ4LjktMTI4IDAtMTA2LTg2LTE5Mi0xOTItMTkybC0zMiAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTc2IDB6TTEyMCAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAweiJdfSxmeXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQiLGljb246WzU3Niw1MTIsWzk3MjldLCJmMGMyIiwiTTAgMzM2YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0bDMwNCAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4IDAtNTEuNi0zMC41LTk2LjEtNzQuNS0xMTYuMyA2LjctMTMuMSAxMC41LTI4IDEwLjUtNDMuNyAwLTUzLTQzLTk2LTk2LTk2LTE3LjcgMC0zNC4yIDQuOC00OC40IDEzLjEtMjQuMS00NS44LTcyLjItNzcuMS0xMjcuNi03Ny4xLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgOCAuNyAxNS45IDEuOSAyMy41LTU2LjkgMTkuMi05Ny45IDczLjEtOTcuOSAxMzYuNXoiXX0sdXl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhc2ViYWxsLWJhdC1iYWxsIixpY29uOls1NzYsNTEyLFtdLCJmNDMyIiwiTTQ2NC4xIDU0NGE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHptOC40LTU3NmMxNS4xIDAgMjkuNyA1LjggNDAuNyAxNi4ybDQ3LjIgNDQuOGMxMi42IDEyIDE5LjEgMjkgMTcuNSA0Ni4zLTEuMiAxMy4zLTcgMjUuOC0xNi41IDM1LjJMMzYzLjEgMzA5Yy03LjMgNy4zLTE1LjcgMTMuNC0yNSAxOEwyMDYgMzkzYy05LjIgNC42LTE3LjcgMTAuNy0yNSAxOGwtOTIgOTIgMS43IDEuOGM3LjcgOS40IDcuMSAyMy4zLTEuNyAzMi4xcy0yMi43IDkuMy0zMi4xIDEuN2wtMS44LTEuNy00OC00OC0xLjctMS44Yy03LjctOS40LTcuMS0yMy4zIDEuNy0zMi4xczIyLjctOS4zIDMyLjEtMS43bDEuOCAxLjcgOTItOTJjNy4zLTcuMyAxMy40LTE1LjcgMTgtMjVsNjYuMS0xMzIuMWM0LjYtOS4yIDEwLjctMTcuNyAxOC0yNUw0MzAuOC0xNC43QzQ0MS45LTI1LjggNDU2LjktMzIgNDcyLjUtMzJ6Il19LHdvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXItcmVhciIsaWNvbjpbNTEyLDUxMixbImNhci1hbHQiXSwiZjVkZSIsIk0xNjUuNCA5NmwxODEuMiAwYzEzLjYgMCAyNS43IDguNiAzMC4yIDIxLjRsMjYuMSA3NC42LTI5My44IDAgMjYuMS03NC42YzQuNS0xMi44IDE2LjYtMjEuNCAzMC4yLTIxLjR6bS05MC42IC4zTDM5LjYgMTk2LjhDMTYuNCAyMDYuNCAwIDIyOS4zIDAgMjU2bDAgOTZjMCAyMy43IDEyLjkgNDQuNCAzMiA1NS40TDMyIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIgMjU2IDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDAuNmMxOS4xLTExLjEgMzItMzEuNyAzMi01NS40bDAtOTZjMC0yNi43LTE2LjQtNDkuNi0zOS42LTU5LjJMNDM3LjIgOTYuM0M0MjMuNyA1Ny44IDM4Ny40IDMyIDM0Ni42IDMyTDE2NS40IDMyYy00MC44IDAtNzcuMSAyNS44LTkwLjYgNjQuM3pNMjA4IDI4OGw5NiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtOTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek00OCAyODBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTM2MC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSxweXQ9d29lLE1vZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0aHVtYnRhY2stc2xhc2giLGljb246WzU3Niw1MTIsWyJ0aHVtYi10YWNrLXNsYXNoIl0sImU2OGYiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0MTcuOCAzNTIgNDQ4IDM1MmMxMCAwIDE5LjUtNC43IDI1LjUtMTIuN3M4LTE4LjQgNS4yLTI4LjFMNDc1IDI5Ny44Yy0xMi40LTQzLjMtNDEtNzguNS03OC4yLTk5LjdMMzg2LjUgNjQgNDE2IDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQzMy43IDAgNDE2IDBMMTYwIDBjLTcuNCAwLTE0LjEgMi41LTE5LjUgNi42TDE5MC4xIDU2LjMgMTg1LjMgMTE5LjQgNDEtMjQuOXpNMjgyLjIgMzUyTDE0OS43IDIxOS42Yy0yMi43IDIwLjUtMzkuOCA0Ny40LTQ4LjcgNzguM2wtMy44IDEzLjRjLTIuOCA5LjctLjggMjAgNS4yIDI4LjFTMTE4IDM1MiAxMjggMzUybDE1NC4yIDB6TTI1NiA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTExMi02NCAwIDAgMTEyeiJdfSxoeXQ9TW9lLG15dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbHVzLW1pbnVzIixpY29uOlszODQsNTEyLFtdLCJlNDNjIiwiTTIyNCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDEyOC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjggMCAwLTEyOHpNMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXX0sZ3l0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWNpcmNsZS1jaGVjayIsaWNvbjpbNjQwLDUxMixbXSwiZTUwOSIsIk00OTYgNTQ0YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNMjY4LjYgNi41YzEyLjItOS4zIDI5LjctOC43IDQxLjIgMmwyMTcuNiAyMDJjLTEwLjItMS43LTIwLjctMi42LTMxLjMtMi42LTc4LjYgMC0xNDYuMSA0Ny4yLTE3NS44IDExNC44LTUuMS0xLjgtMTAuNS0yLjgtMTYuMi0yLjhsLTMyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgOTEgMGM2LjEgMTcuMyAxNC42IDMzLjQgMjUuMSA0OEwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTU1My40IDMzOS4xYy03LjEtNS4yLTE3LjEtMy42LTIyLjMgMy41bC01MyA3Mi44LTI2LjctMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDAtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuN3M4LjktMi44IDExLjctNi42bDY0LTg4YzUuMi03LjEgMy42LTE3LjEtMy41LTIyLjN6Il19LHh5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYWxlbmRhci1kYXkiLGljb246WzQ0OCw1MTIsW10sImY3ODMiLCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0wIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDB6Il19LGJ5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUiLGljb246WzUxMiw1MTIsWzEyODMwOCwxMjgzMDksMTI4OTkyLDEyODk5MywxMjg5OTQsMTI4OTk1LDEyODk5Niw5Njc5LDk4OTgsOTg5OSwxMTA0NCw2MTcwOCw2MTkxNV0sImYxMTEiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXX0sdnl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vYmlsZS12aWJyYXRlIixpY29uOls1NzYsNTEyLFtdLCJlODE2IiwiTTM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xOTIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zODRjMC0zNS4zIDI4LjctNjQgNjQtNjRMMzg0IDB6TTI0OCA0MTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHpNNDguOCAxMzMuNGM5LjQtNy43IDIzLjMtNy4xIDMyLjEgMS43IDkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC0zMSAzMSAyNS40IDI1LjQgMi45IDMuMmM2LjMgNy43IDkuOCAxNy40IDkuOCAyNy40IDAgMTEuNS00LjYgMjIuNS0xMi43IDMwLjZsLTI1LjQgMjUuNCAzMSAzMSAxLjcgMS44YzcuNyA5LjQgNy4xIDIzLjMtMS43IDMyLjFzLTIyLjcgOS4zLTMyLjEgMS43TDQ3IDM3NyAxMi43IDM0Mi42QzUuNiAzMzUuNSAxLjIgMzI2LjIgLjIgMzE2LjNMMCAzMTIgLjIgMzA3LjdjMS05LjkgNS40LTE5LjIgMTIuNS0yNi4zTDM4LjEgMjU2IDEyLjcgMjMwLjZDNS42IDIyMy41IDEuMiAyMTQuMiAuMiAyMDQuM0wwIDIwMCAuMiAxOTUuN2MxLTkuOSA1LjQtMTkuMiAxMi41LTI2LjNMNDcgMTM1IDQ4LjggMTMzLjR6TTQ5NSAxMzVjOC44LTguOCAyMi43LTkuMyAzMi4xLTEuN2wxLjggMS43IDM0LjMgMzQuM2M3LjEgNy4xIDExLjUgMTYuNCAxMi41IDI2LjNsLjIgNC4zLS4yIDQuM2MtMSA5LjktNS40IDE5LjItMTIuNSAyNi4zbC0yNS40IDI1LjQgMjUuNCAyNS40YzcuMSA3LjEgMTEuNSAxNi40IDEyLjUgMjYuM2wuMiA0LjMtLjIgNC4zYy0xIDkuOS01LjQgMTkuMi0xMi41IDI2LjNsLTM0LjMgMzQuMy0xLjggMS43Yy05LjQgNy43LTIzLjMgNy4xLTMyLjEtMS43cy05LjMtMjIuNy0xLjctMzIuMWwxLjctMS44IDMxLTMxLTI1LjQtMjUuNGMtOC4xLTguMS0xMi43LTE5LjEtMTIuNy0zMC42IDAtMTAgMy41LTE5LjcgOS44LTI3LjRsMi45LTMuMiAyNS40LTI1LjQtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdfSx6b2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1ncmluLXNxdWludCIsaWNvbjpbNTEyLDUxMixbMTI4NTE4LCJncmluLXNxdWludCJdLCJmNTg1IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMTIyLjYgMTQzLjJjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAxOTIgMTI1LjggMTY0LjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDE5MiAzODYuMiAyMTkuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXX0seXl0PXpvZSx3eXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlcnMtYmV0d2Vlbi1saW5lcyIsaWNvbjpbNTc2LDUxMixbXSwiZTU5MSIsIk0yNCAxNmw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA2NEMxMC43IDY0IDAgNTMuMyAwIDQwUzEwLjcgMTYgMjQgMTZ6bTAgNDQ4bDUyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMzkyIDE5MmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTI3LjIgMTAwLjRjOS4xLTIuOSAxOC44LTQuNCAyOC44LTQuNCA1MyAwIDk2IDQzIDk2IDk2bDAgMTAuN2MwIDExLjgtOS42IDIxLjMtMjEuMyAyMS4zbC03OC44IDBjMi43LTcuNSA0LjEtMTUuNiA0LjEtMjRsMC04YzAtMzQuMS0xMC42LTY1LjctMjguOC05MS42em0tMjYyLjQgMEMxMzguNiAzMTguMyAxMjggMzQ5LjkgMTI4IDM4NGwwIDhjMCA4LjQgMS40IDE2LjUgNC4xIDI0bC03OC44IDBDNDEuNiA0MTYgMzIgNDA2LjQgMzIgMzk0LjdMMzIgMzg0YzAtNTMgNDMtOTYgOTYtOTYgMTAgMCAxOS43IDEuNSAyOC44IDQuNHpNNzIgMTkyYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMTUyLTE2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTc2IDM4NGMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMnMxMTIgNTAuMSAxMTIgMTEybDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtOHoiXX0sTXl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLW1lZGljYWwtY2lyY2xlLXhtYXJrIixpY29uOls2NDAsNTEyLFtdLCJlNTEzIiwiTTMwOS44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTNTAuOCAyNzIgNjQgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTk2IDBjLTIxLjItMjkuNS0zNC4zLTY1LjMtMzUuOS0xMDRMMjcyIDQwOGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCAyMCAwYzM0LjktNDguNSA5MS43LTgwIDE1Ni04MCAxMC43IDAgMjEuMSAuOSAzMS4zIDIuNUwzMDkuOCA4LjZ6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMNTE4LjYgNDAweiJdfSxrb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGFibGUtbGlzdCIsaWNvbjpbNDQ4LDUxMixbInRoLWxpc3QiXSwiZjAwYiIsIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptNjQgMGwwIDY0IDY0IDAgMC02NC02NCAwem0zMjAgMGwtMTkyIDAgMCA2NCAxOTIgMCAwLTY0ek02NCAyMjRsMCA2NCA2NCAwIDAtNjQtNjQgMHptMzIwIDBsLTE5MiAwIDAgNjQgMTkyIDAgMC02NHpNNjQgMzUybDAgNjQgNjQgMCAwLTY0LTY0IDB6bTMyMCAwbC0xOTIgMCAwIDY0IDE5MiAwIDAtNjR6Il19LHp5dD1rb2Usa3l0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZsYXNrLXZpYWwiLGljb246WzY0MCw1MTIsW10sImU0ZjMiLCJNMTg0LjYgNDExLjVjLTMuMSA3LjMtNS40IDE0LjktNi44IDIyLjYtMTQuNSA4LjgtMzEuNSAxMy45LTQ5LjggMTMuOS01MyAwLTk2LTQzLTk2LTk2TDMyIDY0QzE0LjMgNjQgMCA0OS43IDAgMzJTMTQuMyAwIDMyIDBMMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAyNTUuNi0zOS40IDkxLjl6TTk2IDY0bDAgMTI4IDY0IDAgMC0xMjgtNjQgMHpNMzUyIDBMNTEyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNTMuNCA5MS4zIDIxM2MyLjMgNS40IDMuOCAxMS4xIDQuNCAxN2wuMyAuNi0uMyAwYy4yIDEuOCAuMyAzLjYgLjMgNS40IDAgMzIuMy0yNi4yIDU4LjYtNTguNiA1OC42bC0yNjYuOSAwYy0zMi4zIDAtNTguNi0yNi4yLTU4LjYtNTguNiAwLTEuOCAuMS0zLjYgLjMtNS40bC0uMyAwIC4zLS42Yy42LTUuOCAyLjEtMTEuNiA0LjQtMTdMMzIwIDIxNy40IDMyMCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMzAyLjMgMCAzMjAgMGwzMiAwek00NTMuMiAyNDIuNmMtMy40LTgtNS4yLTE2LjUtNS4yLTI1LjJsMC0xNTMuNC02NCAwIDAgMTUzLjRjMCA4LjctMS44IDE3LjItNS4yIDI1LjJsLTMzLjIgNzcuNCAxNDAuNyAwLTMzLjItNzcuNHoiXX0sU29lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNTEyLDUxMixbImV4Y2xhbWF0aW9uLWNpcmNsZSJdLCJmMDZhIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyem0wLTE5MmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTAtMTkyYy0xOC4yIDAtMzIuNyAxNS41LTMxLjQgMzMuN2w3LjQgMTA0Yy45IDEyLjYgMTEuNCAyMi4zIDIzLjkgMjIuMyAxMi42IDAgMjMtOS43IDIzLjktMjIuM2w3LjQtMTA0YzEuMy0xOC4yLTEzLjEtMzMuNy0zMS40LTMzLjd6Il19LFN5dD1Tb2UsQ29lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRheGkiLGljb246WzUxMiw1MTIsWzEyODY2MiwiY2FiIl0sImYxYmEiLCJNMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItOC45IDBjLTQyIDAtNzkuMSAyNy4zLTkxLjYgNjcuNGwtMjMgNzMuNUMxNC41IDIxOS4xIDAgMjQzLjkgMCAyNzJMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDMyMCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE3NmMwLTI4LjEtMTQuNS01Mi45LTM2LjQtNjcuMWwtMjMtNzMuNUM0NDAuMSA5MS4zIDQwMi45IDY0IDM2MC45IDY0bC04LjkgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE5MiAwek0xNTEuMSAxMjhsMjA5LjkgMGMxNCAwIDI2LjQgOS4xIDMwLjUgMjIuNWwxMyA0MS41LTI5Ni45IDAgMTMtNDEuNWM0LjItMTMuNCAxNi41LTIyLjUgMzAuNS0yMi41ek05NiAyNzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yODggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXX0sQ3l0PUNvZSxMb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGV4dC1zbGFzaCIsaWNvbjpbNTc2LDUxMixbInJlbW92ZS1mb3JtYXQiXSwiZjg3ZCIsIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDMyMi43IDI1Ni45IDM2OC4yIDk2IDQ3MSA5NiA0NjUgMTIwLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMTEtNDQuMUM1NDUuNiA2MS4zIDUyMi43IDMyIDQ5MS41IDMybC0zMTkgMGMtMTkuOCAwLTM3LjMgMTIuMS00NC41IDMwLjFsLTg3LTg3ek0xODAuNCAxMTQuNWw0LjYtMTguNSAxMTYuNyAwLTMwLjggMTA5LTkwLjUtOTAuNXpNMjQxIDMxMC44TDIxMS4zIDQxNiAxNjAgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00Mi4yIDAgMTUuMS01My4zLTUxLjktNTEuOXoiXX0sTHl0PUxvZSxUeXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVvcGxlLXB1bGxpbmciLGljb246WzU3Niw1MTIsW10sImU1MzUiLCJNODAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyIDkuOCAwIDE4LjUtNC40IDI0LjQtMTEuMkw4MC40IDQ4NS4zYzIuOSAxNy40IDE5LjQgMjkuMiAzNi44IDI2LjNzMjkuMi0xOS40IDI2LjMtMzYuOGwtMjAuNS0xMjIuNyAxNS43IDAgMzAgMTM0LjljMy44IDE3LjMgMjAuOSAyOC4xIDM4LjIgMjQuM3MyOC4xLTIwLjkgMjQuMy0zOC4ybC01Ny4zLTI1OCAxMTYuMyA1My44Yy41IC4zIDEuMSAuNSAxLjYgLjcgOC42IDMuNiAxOCAzLjEgMjUuOS0uNyAzLjQtMS42IDYuNi0zLjkgOS4zLTYuNyAzLjEtMy4yIDUuNS03IDcuMS0xMS40IC4xLS4zIC4yLS43IC4zLTFsMi41LTcuNWM1LjctMTcuMSAxOC4zLTMwLjkgMzQuNy0zOC4ybDgtMy41YzEtLjQgMS45LS44IDIuOS0xLjJsLTE2LjkgNjMuNWMtNS42IDIxLjEtLjEgNDMuNiAxNC43IDU5LjdsNzAuNyA3Ny4xIDIyIDg4LjFjNC4zIDE3LjEgMjEuNyAyNy42IDM4LjggMjMuM3MyNy42LTIxLjcgMjMuMy0zOC44bC0yMy05Mi4xYy0xLjktNy44LTUuOC0xNC45LTExLjItMjAuOGwtNDkuNS01NCAxOS4zLTY1LjUgOS42IDIzYzQuNCAxMC42IDEyLjUgMTkuMyAyMi44IDI0LjVsMjYuNyAxMy4zYzE1LjggNy45IDM1IDEuNSA0Mi45LTE0LjNzMS41LTM1LTE0LjMtNDIuOWwtMjEuNC0xMC43LTE1LjMtMzYuOGMtMTcuMS00MS4xLTU3LjMtNjcuOS0xMDEuOS02Ny45LTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMjQuNCAxMC45LTQ0LjYgMjktNTguMSA1MS42TDE1Ny4zIDEzNi45QzE0NC43IDEzMSAxMzAuOSAxMjggMTE3IDEyOGwtNTMgMHpNNDY0IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMzQ5LjcgMzM1LjZsLTI1IDYyLjQtNTkuNCA1OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDM3Mi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6Il19LF95dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYWNrd2FyZCIsaWNvbjpbNTc2LDUxMixbOTE5NF0sImYwNGEiLCJNMjA0LjMgNDMuMUMyMTUuOSAzMiAyMzMgMjguOSAyNDcuNyAzNS4yUzI3MiA1NiAyNzIgNzJsMCAxMzYuMyAxNzIuMy0xNjUuMUM0NTUuOSAzMiA0NzMgMjguOSA0ODcuNyAzNS4yUzUxMiA1NiA1MTIgNzJsMCAzNjhjMCAxNi05LjYgMzAuNS0yNC4zIDM2LjhzLTMxLjggMy4yLTQzLjQtNy45TDI3MiAzMDMuNyAyNzIgNDQwYzAgMTYtOS42IDMwLjUtMjQuMyAzNi44cy0zMS44IDMuMi00My40LTcuOWwtMTkyLTE4NEM0LjUgMjc3LjMgMCAyNjYuOSAwIDI1NnM0LjUtMjEuMyAxMi4zLTI4LjlsMTkyLTE4NHoiXX0sVG9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhci1idXJzdCIsaWNvbjpbNjQwLDUxMixbImNhci1jcmFzaCJdLCJmNWUxIiwiTTIzMiAxNi4xbDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0ek0zMiAxNjguMWw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0ek0yODEuNSA3MC42YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDMzLjktMzMuOWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDI4MS41IDM2LjZjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45em0tMTgxIDIxNWwzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw2Ni42IDI1MS42Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDB6TTY2LjYgMi43Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDEwMC41IDIuN0M5MS4xLTYuNyA3Ni02LjcgNjYuNiAyLjd6TTM1Mi45IDE3NS40TDUwNSAyMTYuMmM2LjQgMS43IDExLjEgNy4zIDExLjggMTMuOWw3LjIgNzQtMjMxLjUtNjIgNDMuMi02MC41YzMuOS01LjQgMTAuNy03LjkgMTcuMi02LjJ6TTIyMy42IDIyOC41bC0yLjEgMi45Yy0yMS43IDUuNS0zOS45IDIyLjMtNDYuMSA0NS41LTQuMSAxNS41LTEyLjQgNDYuNC0yNC44IDkyLjdsLTguMyAzMC45Yy00LjYgMTcuMSA1LjYgMzQuNiAyMi42IDM5LjJsMTUuNSA0LjFjMTcuMSA0LjYgMzQuNi01LjYgMzkuMi0yMi42bDguMy0zMC45IDI3OC4yIDc0LjUtOC4zIDMwLjljLTQuNiAxNy4xIDUuNiAzNC42IDIyLjYgMzkuMmwxNS41IDQuMWMxNy4xIDQuNiAzNC42LTUuNiAzOS4yLTIyLjYgNC4xLTE1LjUgMTIuNC00Ni40IDI0LjgtOTIuN2w4LjMtMzAuOWM2LjItMjMuMi0xLjEtNDYuOC0xNy4yLTYyLjVsLS4zLTMuNi0xMC0xMDNjLTMuMi0zMy4yLTI2LjctNjAuOS01OC45LTY5LjVMMzY5LjUgMTEzLjZjLTMyLjItOC42LTY2LjQgMy42LTg1LjggMzAuOGwtNjAuMiA4NC4yem00OC43IDU3LjhhMzIgMzIgMCAxIDEgLTE2LjYgNjEuOCAzMiAzMiAwIDEgMSAxNi42LTYxLjh6bTIwOC4xIDg4LjlhMzIgMzIgMCAxIDEgNjEuOCAxNi42IDMyIDMyIDAgMSAxIC02MS44LTE2LjZ6Il19LEF5dD1Ub2UsX29lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxpbmsiLGljb246WzU3Niw1MTIsWzEyODI3OSwiY2hhaW4iXSwiZjBjMSIsIk00MTkuNSA5NmMtMTYuNiAwLTMyLjcgNC41LTQ2LjggMTIuNy0xNS44LTE2LTM0LjItMjkuNC01NC41LTM5LjUgMjguMi0yNCA2NC4xLTM3LjIgMTAxLjMtMzcuMiA4Ni40IDAgMTU2LjUgNzAgMTU2LjUgMTU2LjUgMCA0MS41LTE2LjUgODEuMy00NS44IDExMC42bC03MS4xIDcxLjFjLTI5LjMgMjkuMy02OS4xIDQ1LjgtMTEwLjYgNDUuOC04Ni40IDAtMTU2LjUtNzAtMTU2LjUtMTU2LjUgMC0xLjUgMC0zIC4xLTQuNSAuNS0xNy43IDE1LjItMzEuNiAzMi45LTMxLjFzMzEuNiAxNS4yIDMxLjEgMzIuOWMwIC45IDAgMS44IDAgMi42IDAgNTEuMSA0MS40IDkyLjUgOTIuNSA5Mi41IDI0LjUgMCA0OC05LjcgNjUuNC0yNy4xbDcxLjEtNzEuMWMxNy4zLTE3LjMgMjcuMS00MC45IDI3LjEtNjUuNCAwLTUxLjEtNDEuNC05Mi41LTkyLjUtOTIuNXpNMjc1LjIgMTczLjNjLTEuOS0uOC0zLjgtMS45LTUuNS0zLjEtMTIuNi02LjUtMjctMTAuMi00Mi4xLTEwLjItMjQuNSAwLTQ4IDkuNy02NS40IDI3LjFMOTEuMSAyNTguMmMtMTcuMyAxNy4zLTI3LjEgNDAuOS0yNy4xIDY1LjQgMCA1MS4xIDQxLjQgOTIuNSA5Mi41IDkyLjUgMTYuNSAwIDMyLjYtNC40IDQ2LjctMTIuNiAxNS44IDE2IDM0LjIgMjkuNCA1NC42IDM5LjUtMjguMiAyMy45LTY0IDM3LjItMTAxLjMgMzcuMi04Ni40IDAtMTU2LjUtNzAtMTU2LjUtMTU2LjUgMC00MS41IDE2LjUtODEuMyA0NS44LTExMC42bDcxLjEtNzEuMWMyOS4zLTI5LjMgNjkuMS00NS44IDExMC42LTQ1LjggODYuNiAwIDE1Ni41IDcwLjYgMTU2LjUgMTU2LjkgMCAxLjMgMCAyLjYgMCAzLjktLjQgMTcuNy0xNS4xIDMxLjYtMzIuOCAzMS4ycy0zMS42LTE1LjEtMzEuMi0zMi44YzAtLjggMC0xLjUgMC0yLjMgMC0zMy43LTE4LTYzLjMtNDQuOC03OS42eiJdfSwkeXQ9X29lLEFvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYWNrd2FyZC1zdGVwIixpY29uOlszODQsNTEyLFsic3RlcC1iYWNrd2FyZCJdLCJmMDQ4IiwiTTM2MyAzNi44Yy0xMi45LTctMjguNy02LjMtNDEgMS44TDY0IDIwOC4xIDY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNDQuMSAyNTggMTY5LjZjMTIuMyA4LjEgMjggOC44IDQxIDEuOHMyMS0yMC41IDIxLTM1LjJsMC0zNjhjMC0xNC43LTguMS0yOC4yLTIxLTM1LjJ6Il19LER5dD1Bb2UsRXl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IngiLGljb246WzM4NCw1MTIsWzEyMF0sIjU4IiwiTTM3Ni42IDg0LjVjMTEuMy0xMy42IDkuNS0zMy44LTQuMS00NS4xcy0zMy44LTkuNS00NS4xIDQuMUwxOTIgMjA2IDU2LjYgNDMuNUM0NS4zIDI5LjkgMjUuMSAyOC4xIDExLjUgMzkuNFMtMy45IDcwLjkgNy40IDg0LjVMMTUwLjMgMjU2IDcuNCA0MjcuNWMtMTEuMyAxMy42LTkuNSAzMy44IDQuMSA0NS4xczMzLjggOS41IDQ1LjEtNC4xTDE5MiAzMDYgMzI3LjQgNDY4LjVjMTEuMyAxMy42IDMxLjUgMTUuNCA0NS4xIDQuMXMxNS40LTMxLjUgNC4xLTQ1LjFMMjMzLjcgMjU2IDM3Ni42IDg0LjV6Il19LCRvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtdXNlciIsaWNvbjpbNTEyLDUxMixbNjIxNDIsInVzZXItY2lyY2xlIl0sImYyYmQiLCJNMzk5IDM4NC4yQzM3Ni45IDM0NS44IDMzNS40IDMyMCAyODggMzIwbC02NCAwYy00Ny40IDAtODguOSAyNS44LTExMSA2NC4yIDM1LjIgMzkuMiA4Ni4yIDYzLjggMTQzIDYzLjhzMTA3LjgtMjQuNyAxNDMtNjMuOHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjU2IDE2YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0eiJdfSxOeXQ9JG9lLERvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyZWN0YW5nbGUtbGlzdCIsaWNvbjpbNTEyLDUxMixbImxpc3QtYWx0Il0sImYwMjIiLCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTk2IDI1NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0xMjAtNTZsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDEyOGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LFB5dD1Eb2UsRW9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQiLGljb246WzUxMiw1MTIsWzEyOTMwNiw5OTk1LCJoYW5kLXBhcGVyIl0sImYyNTYiLCJNMjg4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjA4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTc2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjcyYzAgMS41IDAgMy4xIC4xIDQuNkw2Ny42IDI4M2MtMTYtMTUuMi00MS4zLTE0LjYtNTYuNiAxLjRTLTMuNiAzMjUuNyAxMi40IDM0MUwxMjQuOCA0NDhjNDMuMSA0MS4xIDEwMC40IDY0IDE2MCA2NGwxOS4yIDBjOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzZsMC0yMDhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMTJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNzZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0yMDh6Il19LEl5dD1Fb2UsTm9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZhbi1zaHV0dGxlIixpY29uOls1NzYsNTEyLFsxMjg2NTYsInNodXR0bGUtdmFuIl0sImY1YjYiLCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzMzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsLjQgMGM0IDQ0LjkgNDEuNyA4MCA4Ny42IDgwczgzLjYtMzUuMSA4Ny42LTgwbDEwNC43IDBjNCA0NC45IDQxLjcgODAgODcuNiA4MCA0Ni4xIDAgODMuOS0zNS40IDg3LjctODAuNSAzMS43LTMuOCA1Ni4zLTMwLjggNTYuMy02My41bDAtMTAxLjNjMC0xMy44LTQuNS0yNy4zLTEyLjgtMzguNGwtODAtMTA2LjdDNDcxLjEgNzMuNSA0NTIuMSA2NCA0MzIgNjRMNjQgNjR6TTUwNCAyMjRsLTEyMCAwIDAtOTYgNDggMCA3MiA5NnpNNjQgMjI0bDAtOTYgOTYgMCAwIDk2LTk2IDB6bTE2MCAwbDAtOTYgOTYgMCAwIDk2LTk2IDB6TTM5MiAzOTJhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMTUyIDM1MmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il19LEZ5dD1Ob2UsT3l0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN0YWlycyIsaWNvbjpbNTc2LDUxMixbXSwiZTI4OSIsIk0zODQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTk2eiJdfSxCeXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG9yc2UtaGVhZCIsaWNvbjpbNTEyLDUxMixbXSwiZjdhYiIsIk0wIDQ2NEwwIDMxNi45QzAgMjA4LjUgNjguMyAxMTEuOCAxNzAuNSA3NS42TDM0MC4yIDE1LjVjMjEuNC03LjYgNDMuOCA4LjMgNDMuOCAzMC45IDAgMTEtNS41IDIxLjItMTQuNiAyNy4zTDMzNiA5NmM0OC4xIDAgOTEuMiAyOS44IDEwOC4xIDc0LjlsNDguNiAxMjkuNWMxMS44IDMxLjQgNC4xIDY2LjgtMTkuNiA5MC41LTE2IDE2LTM3LjggMjUuMS02MC41IDI1LjFsLTMuNCAwYy0yNi4xIDAtNTAuOS0xMS42LTY3LjYtMzEuN2wtMzIuMy0zOC43Yy0xMS43IDQuMS0yNC4yIDYuNC0zNy4zIDYuNGwtLjEgMGMtNi4zIDAtMTIuNS0uNS0xOC42LTEuNS0zLjYtLjYtNy4yLTEuNC0xMC43LTIuM2wwIDBjLTI4LjktNy44LTUzLjEtMjYuOC02Ny44LTUyLjItNC40LTcuNy0xNC4yLTEwLjMtMjEuOS01LjhzLTEwLjMgMTQuMi01LjggMjEuOWMyNCA0MS41IDY4LjMgNzAgMTE5LjMgNzEuOWw0Ny4yIDcwLjhjNCA2LjEgNi4yIDEzLjIgNi4yIDIwLjQgMCAyMC4zLTE2LjUgMzYuOC0zNi44IDM2LjhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OHpNMzI4IDIyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il19LFJ5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2YXVsdCIsaWNvbjpbNTEyLDUxMixbXSwiZTJjNSIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0IDAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMjU2IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjU2IDI1NmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTY0IDI1NmExMjggMTI4IDAgMSAxIDI1NiAwIDEyOCAxMjggMCAxIDEgLTI1NiAwem0zODQtNDhjMCAxNy44LTkuNyAzMy4zLTI0IDQxLjZsMCA3OC40YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNzguNGMtMTQuMy04LjMtMjQtMjMuOC0yNC00MS42IDAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6Il19LEh5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkcnVtLXN0ZWVscGFuIixpY29uOls1NzYsNTEyLFtdLCJmNTZhIiwiTTI4OCAzMmMxNTkuMSAwIDI4OCA0OCAyODggMTI4bDAgMTkyYzAgODAtMTI4LjkgMTI4LTI4OCAxMjhTMCA0MzIgMCAzNTJMMCAxNjBDMCA4MCAxMjguOSAzMiAyODggMzJ6TTUyOCAxNjBjMC05LjktOC0yOS45LTU1LTQ5LjgtMTguNi03LjktNDAuOS0xNC40LTY2LTE5LjRsLTI3LjggNDMuNmMtNy4zIDExLjUtMTEuMiAyNC44LTExLjIgMzguNCAwIDE3LjUgNi40IDM0LjQgMTguMSA0Ny41bDkuOCAxMWMyOS44LTUuMiA1NS45LTEyLjUgNzcuMi0yMS41IDQ3LjEtMTkuOSA1NS0zOS45IDU1LTQ5Ljh6TTM0OS4yIDIzNy4zYy04LTI2LjItMzIuNC00NS4zLTYxLjItNDUuM3MtNTMuMyAxOS4xLTYxLjIgNDUuM2MxOS40IDEuNyAzOS45IDIuNyA2MS4yIDIuN3M0MS44LS45IDYxLjItMi43ek0xNjkgOTAuOGMtMjUuMiA1LTQ3LjQgMTEuNi02NiAxOS40LTQ3LjEgMTkuOS01NSAzOS45LTU1IDQ5LjhzOCAyOS45IDU1IDQ5LjhjMjEuMyA5IDQ3LjQgMTYuMyA3Ny4yIDIxLjVsOS44LTExYzExLjYtMTMuMSAxOC4xLTMwIDE4LjEtNDcuNSAwLTEzLjYtMy45LTI2LjktMTEuMi0zOC40TDE2OSA5MC44em01Ni4zLThjLS45IDQuMy0xLjQgOC43LTEuNCAxMy4yIDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC00LjUtLjUtOS0xLjQtMTMuMi0xOS44LTEuOC00MC44LTIuOC02Mi42LTIuOHMtNDIuOCAxLTYyLjYgMi44eiJdfSxxeXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGh1bWJzLXVwIixpY29uOls1MTIsNTEyLFsxMjgwNzcsNjE1NzVdLCJmMTY0IiwiTTgwIDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNDggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsNDggMHpNMjcwLjYgMTZDMjk3LjkgMTYgMzIwIDM4LjEgMzIwIDY1LjRsMCA0LjJjMCA2LjgtMS4zIDEzLjYtMy44IDE5LjlMMjg4IDE2MCA0NDggMTYwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTkuNy0xMS45IDM2LjYtMjguOSA0NCAxNyA3LjQgMjguOSAyNC4zIDI4LjkgNDQgMCAyMy40LTE2LjggNDIuOS0zOSA0Ny4xIDQuNCA3LjMgNyAxNS44IDcgMjQuOSAwIDIyLjItMTUgNDAuOC0zNS40IDQ2LjMgMi4yIDUuNSAzLjQgMTEuNSAzLjQgMTcuNyAwIDI2LjUtMjEuNSA0OC00OCA0OGwtODcuOSAwYy0zNi4zIDAtNzEuNi0xMi40LTk5LjktMzUuMUwxODQgNDM1LjJjLTE1LjItMTIuMS0yNC0zMC41LTI0LTUwbDAtMTg2LjZjMC0xNC45IDMuNS0yOS42IDEwLjEtNDIuOUwyMjYuMyA0My4zQzIzNC43IDI2LjYgMjUxLjggMTYgMjcwLjYgMTZ6Il19LFZ5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdGFtcCIsaWNvbjpbNTEyLDUxMixbXSwiZjViZiIsIk0zMTIgMjAxLjhjMC0xNy40IDkuMi0zMy4yIDE5LjktNDcgMTIuNi0xNi4yIDIwLjEtMzYuNiAyMC4xLTU4LjggMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAyMi4xIDcuNSA0Mi41IDIwLjEgNTguOCAxMC43IDEzLjggMTkuOSAyOS42IDE5LjkgNDcgMCAyOS45LTI0LjMgNTQuMi01NC4yIDU0LjJMMTEyIDI1NmMtNjEuOSAwLTExMiA1MC4xLTExMiAxMTIgMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC02MS45LTUwLjEtMTEyLTExMi0xMTJsLTMzLjggMGMtMjkuOSAwLTU0LjItMjQuMy01NC4yLTU0LjJ6TTU2IDQ2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw1NiA0NjR6Il19LFV5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtZW5vcmFoIixpY29uOls2NDAsNTEyLFtdLCJmNjc2IiwiTTIwLjggNy40QzIyLjggMi45IDI3LjEgMCAzMiAwczkuMiAyLjkgMTEuMiA3LjRMNjEuMyA0OS43YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMUw2NCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDgxLjcgMCA2NGwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFMMjAuOCA3LjR6bTk2IDBDMTE4LjggMi45IDEyMy4xIDAgMTI4IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzk2IDgxLjcgOTYgNjRsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xTDExNi44IDcuNHptNzcuOCA0Mi40TDIxMi44IDcuNEMyMTQuOCAyLjkgMjE5LjEgMCAyMjQgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xek0zMDguOCA3LjRDMzEwLjggMi45IDMxNS4xIDAgMzIwIDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMUwzMDguOCA3LjR6bTc3LjggNDIuNEw0MDQuOCA3LjRDNDA2LjggMi45IDQxMS4xIDAgNDE2IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMXpNNTAwLjggNy40QzUwMi44IDIuOSA1MDcuMSAwIDUxMiAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFMNTAwLjggNy40em03Ny44IDQyLjRMNTk2LjggNy40QzU5OC44IDIuOSA2MDMuMSAwIDYwOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjF6TTMyIDEyOGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOTIgMCAwLTE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTYwIDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxMjhjMCA1My00MyA5Ni05NiA5NmwtMTkyIDAgMCA2NCAxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTI4IDAgMC02NC0xOTIgMGMtNTMgMC05Ni00My05Ni05NkwwIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOC02NCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4LTY0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4LTY0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjgtNjQgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXX0sanl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoaWxkcmVuIixpY29uOls2NDAsNTEyLFtdLCJlNGUxIiwiTTE2MC41IDBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bS03MiA0ODBsMC04MC0xNy44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xTDg2LjcgMjg1LjUgNTggMzIzLjNjLTEwLjcgMTQuMS0zMC44IDE2LjgtNDQuOCA2LjJTLTMuNyAyOTguNyA3IDI4NC43TDY1LjkgMjA3YzIyLjQtMjkuNiA1Ny41LTQ3IDk0LjYtNDdzNzIuMiAxNy40IDk0LjYgNDdMMzE0IDI4NC43YzEwLjcgMTQuMSA3LjkgMzQuMi02LjIgNDQuOHMtMzQuMiA3LjktNDQuOC02LjJsLTI4LjctMzcuOCAzMS4xIDkzLjRjMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xbC0xNy44IDAgMCA4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTgwLTE2IDAgMCA4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnpNNDgwLjUgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptLTggMzg0bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNzkuNS0xMi45IDIwLjVjLTkuNCAxNS0yOS4yIDE5LjQtNDQuMSAxMHMtMTkuNC0yOS4yLTEwLTQ0LjFsNTEuNy04Mi4xYzE3LjYtMjcuOSA0OC4zLTQ0LjkgODEuMi00NC45bDEyLjMgMGMzMyAwIDYzLjcgMTYuOSA4MS4yIDQ0LjlMNjE5LjYgMjg3YzkuNCAxNSA0LjkgMzQuNy0xMCA0NC4xcy0zNC43IDQuOS00NC4xLTEwbC0xMi45LTIwLjUgMCAxNzkuNWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2LTE2IDB6Il19LFBvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGFydC1saW5lIixpY29uOls1MTIsNTEyLFsibGluZS1jaGFydCJdLCJmMjAxIiwiTTY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwbDQwMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2TDY0IDY0em00MDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDMyMCAyMTAuNyAyNjIuNiAxNTMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDczLjQtNzMuNCA1Ny40IDU3LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOHoiXX0sV3l0PVBvZSxJb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLWVudmVsb3BlIixpY29uOls0NDgsNTEyLFsiZW52ZWxvcGUtc3F1YXJlIl0sImYxOTkiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjA5LjEgMjY3LjlMMTA4LjQgMjA3LjRjLTcuNy00LjYtMTIuNC0xMi45LTEyLjQtMjEuOSAwLTE0LjEgMTEuNC0yNS41IDI1LjUtMjUuNWwyMDQuOSAwYzE0LjEgMCAyNS41IDExLjQgMjUuNSAyNS41IDAgOS00LjcgMTcuMy0xMi40IDIxLjlMMjM4LjkgMjY3LjljLTQuNSAyLjctOS42IDQuMS0xNC45IDQuMXMtMTAuNC0xLjQtMTQuOS00LjF6TTM1MiAyMzcuM2wwIDgyLjdjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTgyLjcgOTYuNyA1OEMyMDIuMSAzMDEgMjEzIDMwNCAyMjQgMzA0czIxLjktMyAzMS4zLTguN2w5Ni43LTU4eiJdfSxHeXQ9SW9lLEZvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYW4tc21va2luZyIsaWNvbjpbNTEyLDUxMixbMTI4Njg1LCJzbW9raW5nLWJhbiJdLCJmNTRkIiwiTTk5LjUgMTQ0LjhsNzkuMiA3OS4yLTUwLjcgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNDYuNyAwIDkyLjUgOTIuNWMtMzEuNCAyMi40LTY5LjggMzUuNS0xMTEuMiAzNS41LTEwNiAwLTE5Mi04Ni0xOTItMTkyIDAtNDEuNSAxMy4xLTc5LjkgMzUuNS0xMTEuMnpNMzMzLjMgMjg4bC0zMi0zMiA4Mi43IDAgMCAzMi01MC43IDB6bTMyIDMybDE4LjcgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDI2OS4zIDIyNCAxNDQuOCA5OS41YzMxLjQtMjIuNCA2OS44LTM1LjUgMTExLjItMzUuNSAxMDYgMCAxOTIgODYgMTkyIDE5MiAwIDQxLjUtMTMuMSA3OS45LTM1LjUgMTExLjJMMzY1LjMgMzIwek0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjcyIDk2Yy04LjggMC0xNiA3LjItMTYgMTYgMCAyNi41IDIxLjUgNDggNDggNDhsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzNy4yIDE2IDE2IDE2IDE2LTcuMiAxNi0xNmMwLTI2LjUtMjEuNS00OC00OC00OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2cy03LjItMTYtMTYtMTZ6Il19LFl5dD1Gb2UsWnl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRydWNrLWZyb250IixpY29uOls0NDgsNTEyLFtdLCJlMmI3IiwiTTAgMTEyQzAgNjcuOCAzNS44IDMyIDgwIDMybDI4OCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMjU2YzAgMjYuMi0xMi42IDQ5LjQtMzIgNjRsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMi0xOTIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ4QzEyLjYgNDE3LjQgMCAzOTQuMiAwIDM2OEwwIDExMnptOTYgODBsMCA2NCAyNTYgMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTMyIDE2MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yMjQgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxQVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidWlsZGluZyIsaWNvbjpbMzg0LDUxMixbMTI3OTcwLDYxNjg3XSwiZjFhZCIsIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek0xNzYgMzUybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MC05NiAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTk2IDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNDAgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNOTYgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2eiJdfSxYeXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVsbHNleWUiLGljb246WzUxMiw1MTIsW10sImYxNDAiLCJNNDQ4IDI1NmExOTIgMTkyIDAgMSAwIC0zODQgMCAxOTIgMTkyIDAgMSAwIDM4NCAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNTYgODBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAtMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHpNMjI0IDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdfSxPb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctbGVmdC1sb25nIixpY29uOls1NzYsNTEyLFsibG9uZy1hcnJvdy1sZWZ0Il0sImYxNzciLCJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4IDU0NCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQzNC43IDAgNzMuNC03My40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4eiJdfSxReXQ9T29lLEt5dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVzcy1yb29rIixpY29uOlszODQsNTEyLFs5ODIwXSwiZjQ0NyIsIk0wIDMyTDAgMTMzLjVjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNMNjQgMjI0IDY0IDM4NCA3LjggNDU0LjNDMi43IDQ2MC42IDAgNDY4LjQgMCA0NzYuNSAwIDQ5Ni4xIDE1LjkgNTEyIDM1LjUgNTEybDMxMi45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJsLTU2LjItNzAuMyAwLTE2MCA0NS4zLTQ1LjNjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0wzODQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJMMzIwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItNDggMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE3NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTQ4IDAgMC0zMkM5NiAxNC4zIDgxLjcgMCA2NCAwTDMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyeiJdfSxKeXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmxlbmRlci1waG9uZSIsaWNvbjpbNTc2LDUxMixbXSwiZjZiNiIsIk0xNTEuNCAxMy4yYzEwLjIgNS44IDE0LjUgMTguNCAxMCAyOS4zTDEzOC4yIDk4LjhjLTMuOSA5LjYtMTMuNyAxNS40LTI0IDE0LjRsLTIwLjItMkM3OC43IDE1Mi45IDc4IDE5OC45IDkxLjkgMjQxLjFsMjIuNC0yLjJjMTAuMy0xIDIwIDQuOCAyNCAxNC40bDIzLjIgNTYuM2M0LjUgMTAuOSAuMiAyMy40LTEwIDI5LjNsLTIuOSAxLjZjLTMzLjYgMTkuMi04MS43IDE2LjItMTA2LjItMjEuNi01Ni4zLTg2LjYtNTYuMy0xOTkuMSAwLTI4NS43IDI0LjYtMzcuNyA3Mi43LTQwLjcgMTA2LjItMjEuNmwyLjkgMS42ek0yMjQgMzM2TDE5My43IDE3LjVDMTkyLjggOC4xIDIwMC4yIDAgMjA5LjYgMGwzMjQgMGMyMS4zIDAgMzYuNiAyMC4zIDMwLjggNDAuOEw1NTMuMSA4MCA0NDAgODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTkuNCAwLTE4LjMgNjQtODEuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY3LjQgMC0yNy40IDk2LTI1NiAwem04IDQ4bDI0MCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTI0MCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwem0xMjAgODhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxCb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdHVybi11cCIsaWNvbjpbMzg0LDUxMixbImxldmVsLXVwIl0sImYxNDgiLCJNMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTMwNi43IDczLjQgNzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTA5LjMgMTYwIDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMHoiXX0sZXd0PUJvZSx0d3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmljeWNsZSIsaWNvbjpbNjQwLDUxMixbMTI4NjkwXSwiZjIwNiIsIk0zMzEuNyA0My4zQzMzNiAzNi4zIDM0My43IDMyIDM1MiAzMmwxMDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNjUuNiAwIDcyLjIgMTQ4LjRjMTAuNy0yLjkgMjEuOS00LjQgMzMuNC00LjQgNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhzLTU3LjMgMTI4LTEyOCAxMjgtMTI4LTU3LjMtMTI4LTEyOGMwLTQyIDIwLjItNzkuMiA1MS40LTEwMi42bC0yMC40LTQxLjktNzMuNSAxNDdjLTIuMyA0LjgtNi4zIDguOC0xMS40IDExLjItLjYgLjMtMS4yIC41LTEuOCAuNy0yLjkgMS4xLTUuOSAxLjYtOC45IDEuNUwyNzEgMzY4Yy03LjkgNjMuMS02MS43IDExMi0xMjcgMTEyLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4UzczLjMgMjI0IDE0NCAyMjRjMTAuOCAwIDIxLjIgMS4zIDMxLjIgMy44bDI4LjUtNTYuOS0xMS41LTI2LjktNDAuMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDU2IDBjOS42IDAgMTguMyA1LjcgMjIuMSAxNC41bDE0LjMgMzMuNSAxMjMuNyAwLTM3LjctNzcuNWMtMy42LTcuNC0zLjItMTYuMiAxLjItMjMuMnpNMjI4LjUgMjI4LjdsLTQ1LjYgOTEuMyA4NC44IDAtMzkuMS05MS4zek0zMDUuNyAyODdsNDcuNS05NS04OC4yIDAgNDAuNyA5NXptMTY4LjcgNzUuNWwtMjkuNy02MWMtMTIuOCAxMy0yMC43IDMwLjgtMjAuNyA1MC41IDAgMzkuOCAzMi4yIDcyIDcyIDcyczcyLTMyLjIgNzItNzItMzIuMi03Mi03Mi03MmMtMi43IDAtNS41IC4yLTguMSAuNWwyOS43IDYxYzUuOCAxMS45IC44IDI2LjMtMTEuMSAzMi4xcy0yNi4zIC44LTMyLjEtMTEuMXpNMTQ5LjIgMzY4Yy0yMC4yIDAtMzMuNC0yMS4zLTI0LjMtMzkuNGwyNC4yLTQ4LjVjLTEuNy0uMS0zLjQtLjItNS4xLS4yLTM5LjggMC03MiAzMi4yLTcyIDcyczMyLjIgNzIgNzIgNzJjMzQuMyAwIDYyLjktMjMuOSA3MC4yLTU2bC02NSAweiJdfSxSb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWFycm93LWRvd24iLGljb246WzUxMiw1MTIsWyJhcnJvdy1jaXJjbGUtZG93biJdLCJmMGFiIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMzkgMzc3bC04MC04MGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDM5IDM5IDAtMTUwLjFjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE1MC4xIDM5LTM5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtODAgODBjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAweiJdfSxhd3Q9Um9lLHo3PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdlYXIiLGljb246WzUxMiw1MTIsWzk4ODEsImNvZyJdLCJmMDEzIiwiTTE5NS4xIDkuNUMxOTguMS01LjMgMjExLjItMTYgMjI2LjQtMTZsNTkuOCAwYzE1LjIgMCAyOC4zIDEwLjcgMzEuMyAyNS41TDMzMiA3OS41YzE0LjEgNiAyNy4zIDEzLjcgMzkuMyAyMi44bDY3LjgtMjIuNWMxNC40LTQuOCAzMC4yIDEuMiAzNy44IDE0LjRsMjkuOSA1MS44YzcuNiAxMy4yIDQuOSAyOS44LTYuNSAzOS45TDQ0NyAyMzMuM2MuOSA3LjQgMS4zIDE1IDEuMyAyMi43cy0uNSAxNS4zLTEuMyAyMi43bDUzLjQgNDcuNWMxMS40IDEwLjEgMTQgMjYuOCA2LjUgMzkuOWwtMjkuOSA1MS44Yy03LjYgMTMuMS0yMy40IDE5LjItMzcuOCAxNC40bC02Ny44LTIyLjVjLTEyLjEgOS4xLTI1LjMgMTYuNy0zOS4zIDIyLjhsLTE0LjQgNjkuOWMtMy4xIDE0LjktMTYuMiAyNS41LTMxLjMgMjUuNWwtNTkuOCAwYy0xNS4yIDAtMjguMy0xMC43LTMxLjMtMjUuNWwtMTQuNC02OS45Yy0xNC4xLTYtMjcuMi0xMy43LTM5LjMtMjIuOEw3My41IDQzMi4zYy0xNC40IDQuOC0zMC4yLTEuMi0zNy44LTE0LjRMNS44IDM2Ni4xYy03LjYtMTMuMi00LjktMjkuOCA2LjUtMzkuOWw1My40LTQ3LjVjLS45LTcuNC0xLjMtMTUtMS4zLTIyLjdzLjUtMTUuMyAxLjMtMjIuN0wxMi4zIDE4NS44Yy0xMS40LTEwLjEtMTQtMjYuOC02LjUtMzkuOUwzNS43IDk0LjFjNy42LTEzLjIgMjMuNC0xOS4yIDM3LjgtMTQuNGw2Ny44IDIyLjVjMTIuMS05LjEgMjUuMy0xNi43IDM5LjMtMjIuOEwxOTUuMSA5LjV6TTI1Ni4zIDMzNmE4MCA4MCAwIDEgMCAtLjYtMTYwIDgwIDgwIDAgMSAwIC42IDE2MHoiXX0scnd0PXo3LGl3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXJzLWFuZC12ZW51cy1idXJzdCIsaWNvbjpbNjQwLDUxMixbXSwiZTUyMyIsIk00NjQtMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzQuNyAwLTYzIDYzYy0yOC40LTE5LjUtNjIuNy0zMS05OS44LTMxLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2IDAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMWwwIDM0LjktMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zNC45YzgxLjktMTUgMTQ0LTg2LjggMTQ0LTE3My4xIDAtMzctMTEuNC03MS40LTMxLTk5LjhsNjMtNjMgMCAzNC43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMTJjMC0xNy43LTE0LjMtMzItMzItMzJMNDk2LTY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzY4IDk2YTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHpNMTkwLjktMjEuOUMxODguNC0yOCAxODIuNi0zMiAxNzYtMzJzLTEyLjQgNC0xNC45IDEwLjFsLTI5LjQgNzQtNzYuMi0yMy4xYy02LjMtMS45LTEzLjEgLjItMTcuMiA1LjNTMzMuOCA0Ni41IDM3IDUyLjJsMzkuNSA2OS4xLTY1LjYgNDUuMWMtNS40IDMuNy04IDEwLjMtNi41IDE2LjdzNi43IDExLjIgMTMuMSAxMi4ybDc4LjcgMTIuMi01LjYgNzkuNGMtLjUgNi41IDMuMSAxMi43IDkgMTUuNXMxMi45IDEuOCAxNy44LTIuNkwxNTIuMSAyNjhjLTUuMy0xOS4xLTguMS0zOS4yLTguMS02MCAwLTY1LjQgMjgtMTI0LjIgNzIuNi0xNjUuMUwxOTAuOS0yMS45eiJdfSxvd3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToib3R0ZXIiLGljb246WzY0MCw1MTIsWzEyOTQ0Nl0sImY3MDAiLCJNMTgxLjUgMTk3LjFsMTIuOSA2LjRjNS45IDMgMTIuNCA0LjUgMTkuMSA0LjUgMjMuNSAwIDQyLjYtMTkuMSA0Mi42LTQyLjZsMC0yMS40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIxLjRjMCAyMy41IDE5LjEgNDIuNiA0Mi42IDQyLjYgNi42IDAgMTMuMS0xLjUgMTkuMS00LjUgOS4zLTQuNyAxNi40LTguMiAyMS4yLTEwLjZMMTM1LjEgMTg1Yy00LjUtMy03LjEtOC03LjEtMTMuM2wwLTMuN2MwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMy43YzAgNS4zLTIuNyAxMC4zLTcuMSAxMy4zbC0xMS44IDcuOSA4LjQgNC4yem0tOC42IDQ5LjRsLTEyLjktNi40LTEyLjkgNi40Yy0xMi42IDYuMy0yNi41IDkuNi00MC41IDkuNi0zLjYgMC03LjEtLjItMTAuNi0uNmwwIC42YzAgMzUuMyAyOC43IDY0IDY0IDY0bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMTYwIDAgMC02NGMwLTIzLjcgMTIuOS00NC40IDMyLTU1LjQgOS40LTUuNCAyMC4zLTguNiAzMi04LjZsMC0xNmMwLTI2LjUgMjEuNS00OCA0OC00OCA4LjggMCAxNiA3LjIgMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTkuN2MwLTQ4LjItMzAuOC05MS03Ni42LTEwNi4zbC04LjUtMi44Yy04LTIuNy0xMi42LTExLjEtMTAuNC0xOS4zczEwLjMtMTMuMiAxOC42LTExLjZsMTkuOSA0QzU3NiA4Ni4xIDY0MCAxNjQuMiA2NDAgMjU0LjlsMCAxLjEgMCAwYzAgMTIzLjctMTAwLjMgMjI0LTIyNCAyMjRsLTE2MC42IDBDMTMyIDQ4MCAzMiAzODAgMzIgMjU2LjZsMC0zOS44Yy0xMC4xLTE0LjYtMTYtMzIuMy0xNi01MS40bDAtMjEuNCAwLTEuNEM2LjcgMTM5LjMgMCAxMzAuNSAwIDEyMCAwIDEwNi43IDEwLjcgOTYgMjQgOTZsMi44IDBDNDQuOCA1OC4yIDgzLjMgMzIgMTI4IDMybDY0IDBjNDQuNyAwIDgzLjIgMjYuMiAxMDEuMiA2NGwyLjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDEwLjUtNi43IDE5LjMtMTYgMjIuNmwwIDEuNCAwIDIxLjRjMCAxLjQgMCAyLjgtLjEgNC4zIDEyLTYuMiAyNS43LTkuNiA0MC4xLTkuNmw4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4IDU2LjQgMGMtMTUuMiAxNy0yNC40IDM5LjQtMjQuNCA2NGwtMzIgMGMtNDIuMyAwLTc4LjItMjcuNC05MS02NS4zLTUuMSAuOS0xMC4zIDEuMy0xNS42IDEuMy0xNC4xIDAtMjcuOS0zLjMtNDAuNS05LjZ6TTk2IDEyOGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6bTExMiAxNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAweiJdfSxIb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWNoZXZyb24tbGVmdCIsaWNvbjpbNTEyLDUxMixbImNoZXZyb24tY2lyY2xlLWxlZnQiXSwiZjEzNyIsIk01MTIgMjU2YTI1NiAyNTYgMCAxIDAgLTUxMiAwIDI1NiAyNTYgMCAxIDAgNTEyIDB6TTI3MSAxMzVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC04NyA4NyA4NyA4N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDE2NyAyNzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDI3MSAxMzV6Il19LHN3dD1Ib2UscW9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1xdWVzdGlvbiIsaWNvbjpbNTEyLDUxMixbNjIxMDgsInF1ZXN0aW9uLWNpcmNsZSJdLCJmMDU5IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTMzNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDQ3LjItMzYgNjcuMi01NiA3NC41bDAgMy44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC4xYzAtMjAuNSAxNC44LTM1LjIgMzAuMS00MC4yIDYuNC0yLjEgMTMuMi01LjUgMTguMi0xMC4zIDQuMy00LjIgNy43LTEwIDcuNy0xOS42IDAtMTcuNy0xNC4zLTMyLTMyLTMyek0yMjQgMzY4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LG53dD1xb2UsbHd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndhbGtpZS10YWxraWUiLGljb246WzM4NCw1MTIsW10sImY4ZWYiLCJNODgtMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA3MiA0OCAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMzIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjAuOWMwIDkuOS0yLjMgMTkuNy02LjggMjguNmwtMjAuMiA0MC40Yy0zLjMgNi43LTUuMSAxNC01LjEgMjEuNWwwIDg0LjdjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTg0LjdjMC03LjUtMS43LTE0LjgtNS4xLTIxLjVMNi44IDMwMS41QzIuMyAyOTIuNiAwIDI4Mi44IDAgMjcyLjlMMCAxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRsMTYgMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0em0zMiAxNzZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXX0sVm9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItZ3JvdXAiLGljb246WzU3Niw1MTIsWzEyODEwMSwidXNlci1mcmllbmRzIl0sImY1MDAiLCJNNjQgMTI4YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6TTAgNDY0YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2czE3NiA3OC44IDE3NiAxNzZsMCA2YzAgMjMuMi0xOC44IDQyLTQyIDQyTDQyIDUxMmMtMjMuMiAwLTQyLTE4LjgtNDItNDJsMC02ek00MzIgNjRhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTAgMjQwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0bDAgMjIuNGMwIDIzLTE4LjYgNDEuNi00MS42IDQxLjZsLTE0NC44IDBjNi42LTEyLjUgMTAuNC0yNi44IDEwLjQtNDJsMC02YzAtNTEuNS0xNy40LTk4LjktNDYuNS0xMzYuNyAyMi42LTE0LjcgNDkuNi0yMy4zIDc4LjUtMjMuM3oiXX0sY3d0PVZvZSxVb2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtY2hpbW5leSIsaWNvbjpbNTEyLDUxMixbNjM0OTksImhvbWUtbGciXSwiZTNhZiIsIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjg4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOHpNMjQwIDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiAxMjggMCAwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zMiAweiJdfSxkd3Q9VW9lLGpvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyaWdodC1mcm9tLWJyYWNrZXQiLGljb246WzUxMiw1MTIsWyJzaWduLW91dC1hbHQiXSwiZjJmNSIsIk01MDUgMjczYzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDM2MSA5NWMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMzMjAgMTAyLjMgMzIwIDExMmwwIDgwLTExMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDExMiAwIDAgODBjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4yTDUwNSAyNzN6TTE2MCA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiAzMkM0MyAzMiAwIDc1IDAgMTI4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHoiXX0sZnd0PWpvZSx1d3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZSIsaWNvbjpbMzg0LDUxMixbMTI4MTk2LDEyODQ1OSw2MTQ2Ml0sImYxNWIiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnoiXX0scHd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsYW5lLXNsYXNoIixpY29uOls1NzYsNTEyLFtdLCJlMDY5IiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE4My40LTE4My40IDcuMS03LjcgMTI3LjMgMGMzMC45IDAgNTYtMjUuMSA1Ni01NnMtMjUuMS01Ni01Ni01NkwzOTIuNyAyMDAgMjMzLjUgMjYuNEMyMjcuNSAxOS44IDIxOC45IDE2IDIwOS45IDE2bC00My43IDBjLTEwLjkgMC0xOC42IDEwLjctMTUuMiAyMS4xTDE3NS4xIDEwOS4yIDQxLTI0Ljl6TTEzMC4yIDIwMGwtMjQuNiAwLTUyLjgtNjZjLTMtMy44LTcuNi02LTEyLjUtNmwtMTkuOCAwYy0xMC40IDAtMTggOS44LTE1LjUgMTkuOUwzMiAyNTYgNSAzNjQuMUMyLjQgMzc0LjIgMTAuMSAzODQgMjAuNSAzODRsMTkuOCAwYzQuOSAwIDkuNS0yLjIgMTIuNS02bDUyLjgtNjYgOTkuNyAwLTU0LjMgMTYyLjljLTMuNSAxMC40IDQuMyAyMS4xIDE1LjIgMjEuMWw0My43IDBjOSAwIDE3LjUtMy44IDIzLjYtMTAuNEwzMjAuNyAzOTAuNSAxMzAuMiAyMDB6Il19LGh3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG91ZC1zaG93ZXJzLWhlYXZ5IixpY29uOls1MTIsNTEyLFtdLCJmNzQwIiwiTTk2IDMyMGMtNTMgMC05Ni00My05Ni05NiAwLTQyLjUgMjcuNi03OC42IDY1LjktOTEuMi0xLjMtNi43LTEuOS0xMy43LTEuOS0yMC44IDAtNjEuOSA1MC4xLTExMiAxMTItMTEyIDQzLjEgMCA4MC41IDI0LjMgOTkuMiA2MCAxNC43LTE3LjEgMzYuNS0yOCA2MC44LTI4IDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgNS41LS42IDEwLjgtMS42IDE2IC41IDAgMS4xIDAgMS42IDAgNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZMOTYgMzIwem02LjggNzkuNmwtMzIgOTZDNjYuNiA1MDguMiA1MyA1MTUgNDAuNCA1MTAuOFMyMSA0OTMgMjUuMiA0ODAuNGwzMi05NkM2MS40IDM3MS44IDc1IDM2NSA4Ny42IDM2OS4yUzEwNyAzODcgMTAyLjggMzk5LjZ6bTEyMCAwbC0zMiA5NmMtNC4yIDEyLjYtMTcuOCAxOS40LTMwLjQgMTUuMlMxNDEgNDkzIDE0NS4yIDQ4MC40bDMyLTk2YzQuMi0xMi42IDE3LjgtMTkuNCAzMC40LTE1LjJTMjI3IDM4NyAyMjIuOCAzOTkuNnptMTEyIDBsLTMyIDk2Yy00LjIgMTIuNi0xNy44IDE5LjQtMzAuNCAxNS4yUzI1MyA0OTMgMjU3LjIgNDgwLjRsMzItOTZjNC4yLTEyLjYgMTcuOC0xOS40IDMwLjQtMTUuMlMzMzkgMzg3IDMzNC44IDM5OS42em0xMjAgMGwtMzIgOTZjLTQuMiAxMi42LTE3LjggMTkuNC0zMC40IDE1LjJTMzczIDQ5MyAzNzcuMiA0ODAuNGwzMi05NmM0LjItMTIuNiAxNy44LTE5LjQgMzAuNC0xNS4yUzQ1OSAzODcgNDU0LjggMzk5LjZ6Il19LG13dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tZmFsbGluZyIsaWNvbjpbNTEyLDUxMixbXSwiZTU0NiIsIk0zMjAgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA1LjRjMCA0NS0yMy42IDg2LjYtNjIuMSAxMDkuOGwtNC42IDIuOEMxMzEuNCAxODQuNyA5NiAyNDcuMSA5NiAzMTQuNkw5NiAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY5LjRjMC0xNi43IDMuMy0zMyA5LjQtNDhMMzU5LjIgNTAwLjJjMTEuMSAxMy43IDMxLjMgMTUuOCA0NSA0LjdzMTUuOC0zMS4zIDQuNy00NUwyOTUuMiAzMjAgNDAwIDMyMCA0MzguNCAzNzEuMmMxMC42IDE0LjEgMzAuNyAxNyA0NC44IDYuNHMxNy0zMC43IDYuNC00NC44bC00My4yLTU3LjZDNDM3LjMgMjYzLjEgNDIzLjEgMjU2IDQwOCAyNTZsLTg5IDAtNjIuOS03NS41YzQwLjMtMzYgNjMuOS04Ny45IDYzLjktMTQzLjFsMC01LjR6TTEwNCAxNDRhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6Il19LFdvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0dXJuLWRvd24iLGljb246WzM4NCw1MTIsWzEwNTQ5LCJsZXZlbC1kb3duLWFsdCJdLCJmM2JlIiwiTTE2OS40IDUwMi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjhjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzMyLjkgMzIwIDMyMCAzMjBsLTY0IDAgMC0xNjBDMjU2IDcxLjYgMTg0LjQgMCA5NiAwTDMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyTDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE2MC02NCAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOWwxMjggMTI4eiJdfSxnd3Q9V29lLEdvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1cC1yaWdodC1hbmQtZG93bi1sZWZ0LWZyb20tY2VudGVyIixpY29uOls1MTIsNTEyLFsiZXhwYW5kLWFsdCJdLCJmNDI0IiwiTTM0NCAwTDQ4OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTQ0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTM5LTM5LTg3IDg3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMzItMzJjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDg3LTg3LTM5LTM5Yy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yUzMzNC4zIDAgMzQ0IDB6TTE2OCA1MTJMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwwIDM0NGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJTMzQuMSAzMjAuMiA0MSAzMjdsMzkgMzkgODctODdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDM5IDM5YzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJTMTc3LjcgNTEyIDE2OCA1MTJ6Il19LHh3dD1Hb2UsYnd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItdGFnIixpY29uOls2NDAsNTEyLFtdLCJmNTA3IiwiTTI1Ni4xIDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0yMjYuNCAzMDRsNTkuNCAwYzYuNyAwIDEzLjIgLjQgMTkuNyAxLjEtLjkgNC45LTEuNCA5LjktMS40IDE1bDAgOTIuMWMwIDI1LjUgMTAuMSA0OS45IDI4LjEgNjcuOWwzMS45IDMxLjktMjg2LjMgMGMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC05OC41IDc5LjgtMTc4LjMgMTc4LjMtMTc4LjN6TTM1Mi4xIDQxMi4ybDAtOTIuMWMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5Mi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw5NiA5NmMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOWwtNzYuMSA3Ni4xYy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMGwtOTYtOTZjLTktOS0xNC4xLTIxLjItMTQuMS0zMy45em0xMDQtNDQuMmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdfSx2d3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZC1zcGFya2xlcyIsaWNvbjpbNjQwLDUxMixbXSwiZTA1ZCIsIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIwOGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTc2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTExMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc4LjJjLTE5LjIgNS40LTM0LjcgMjAuNC00MC40IDQwLjNsLTYuNSAyMi43LTIyLjcgNi41Yy0yNS4yIDcuMi00Mi41IDMwLjItNDIuNSA1Ni40IDAgMjIuMSAxMi40IDQyIDMxLjQgNTEuOS0yNy41IDE3LjgtNjAuMiAyOC4xLTk1LjQgMjguMWwtMTkuMiAwYy01OS42IDAtMTE2LjktMjIuOS0xNjAtNjRMNzYuNCAzNDFjLTE2LTE1LjItMTYuNi00MC42LTEuNC01Ni42czQwLjYtMTYuNiA1Ni42LTEuNGw2MC41IDU3LjZjMC0xLjUtLjEtMy4xLS4xLTQuNmwwLTI3MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0yMDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS03LjMgMzI2LjZjLTEuMS0zLjktNC43LTYuNi04LjctNi42cy03LjYgMi43LTguNyA2LjZsLTcuMyAyNS40LTI1LjQgNy4zYy0zLjkgMS4xLTYuNiA0LjctNi42IDguN3MyLjcgNy42IDYuNiA4LjdsMjUuNCA3LjMgNy4zIDI1LjRjMS4xIDMuOSA0LjcgNi42IDguNyA2LjZzNy42LTIuNyA4LjctNi42bDcuMy0yNS40IDI1LjQtNy4zYzMuOS0xLjEgNi42LTQuNyA2LjYtOC43cy0yLjctNy42LTYuNi04LjdsLTI1LjQtNy4zLTcuMy0yNS40ek0xMDQgMTIwbDQ4LjMgMTMuOGM0LjYgMS4zIDcuNyA1LjUgNy43IDEwLjJzLTMuMSA4LjktNy43IDEwLjJMMTA0IDE2OCA5MC4yIDIxNi4zYy0xLjMgNC42LTUuNSA3LjctMTAuMiA3LjdzLTguOS0zLjEtMTAuMi03LjdMNTYgMTY4IDcuNyAxNTQuMkMzLjEgMTUyLjkgMCAxNDguNyAwIDE0NHMzLjEtOC45IDcuNy0xMC4yTDU2IDEyMCA2OS44IDcxLjdDNzEuMSA2Ny4xIDc1LjMgNjQgODAgNjRzOC45IDMuMSAxMC4yIDcuN0wxMDQgMTIwek01ODQgNDA4bDQ4LjMgMTMuOGM0LjYgMS4zIDcuNyA1LjUgNy43IDEwLjJzLTMuMSA4LjktNy43IDEwLjJMNTg0IDQ1NiA1NzAuMiA1MDQuM2MtMS4zIDQuNi01LjUgNy43LTEwLjIgNy43cy04LjktMy4xLTEwLjItNy43TDUzNiA0NTYgNDg3LjcgNDQyLjJjLTQuNi0xLjMtNy43LTUuNS03LjctMTAuMnMzLjEtOC45IDcuNy0xMC4yTDUzNiA0MDggNTQ5LjggMzU5LjdjMS4zLTQuNiA1LjUtNy43IDEwLjItNy43czguOSAzLjEgMTAuMiA3LjdMNTg0IDQwOHoiXX0seXd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93cy10by1kb3QiLGljb246WzUxMiw1MTIsW10sImU0YmUiLCJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTkuMi05LjItMTEuOS0yMi45LTYuOS0zNC45UzE3OS4xIDY0IDE5MiA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTE2OS40IDM5My40bDY0LTY0YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDY0IDY0YzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzMzMi45IDQ0OCAzMjAgNDQ4bC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOXpNMzIgMjI0bDMyIDAgMC0zMmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDY0IDY0YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC02NCA2NGMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTNjQgMzMyLjkgNjQgMzIwbDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMjk3LjQgNTQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsNjQtNjRjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTNDQ4IDE3OS4xIDQ0OCAxOTJsMCAzMiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTY0LTY0ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sWW9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2Utc2FkLWNyeSIsaWNvbjpbNTEyLDUxMixbMTI4NTU3LCJzYWQtY3J5Il0sImY1YjMiLCJNMzUyIDQ5My40Yy0yOS42IDEyLTYyLjEgMTguNi05NiAxOC42cy02Ni40LTYuNi05Ni0xOC42TDE2MCAyOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzEuN0M0NC40IDQyMS42IDAgMzQ0IDAgMjU2IDAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NmMwIDg4LTQ0LjQgMTY1LjYtMTEyIDIxMS43TDQwMCAyOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxOTcuNHpNMTUyIDE5NmwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwIDktMjAgMjAtMjB6bTE3MiAyMGMwLTExIDktMjAgMjAtMjBsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMHpNMjA4IDMzNmwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHoiXX0sd3d0PVlvZSxNd3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZG9uZy1zaWduIixpY29uOlszODQsNTEyLFtdLCJlMTY5IiwiTTI4OC0xNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDcyLjJjLTIyLjktMTUuMy01MC40LTI0LjItODAtMjQuMi03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NFM5Ni41IDQzMiAxNzYgNDMyYzMwIDAgNTcuOC05LjEgODAuOC0yNC44IDMuMyAxNC4yIDE2IDI0LjggMzEuMiAyNC44IDE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzA0IDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNOTYgMjg4YTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHpNMjQgNDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDQ2NHoiXX0send0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlb3BsZS1saW5lIixpY29uOls1NzYsNTEyLFtdLCJlNTM0IiwiTTI4OCAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em05NiAzMTJjMCAyNS0xMi43IDQ3LTMyIDU5LjlsMCA0NC4xLTEyOCAwIDAtNDQuMUMyMDQuNyAzNTkgMTkyIDMzNyAxOTIgMzEybDAtNDBjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDQwem0xNiAxMDRsMC0yNy4zYzE5LjktMjIuNSAzMi01Mi4yIDMyLTg0LjdsMC0zMmMwLTI2LjctNy4zLTUxLjYtMTkuOS03My4xIDExLjEtNC41IDIzLjItNi45IDM1LjktNi45IDUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRsMCA0MC42LTExMiAwek02NCAzNzUuNEM0NC45IDM2NC40IDMyIDM0My43IDMyIDMyMGwwLTMyYzAtNTMgNDMtOTYgOTYtOTYgMTIuNyAwIDI0LjggMi41IDM1LjkgNi45LTEyLjYgMjEuNC0xOS45IDQ2LjQtMTkuOSA3My4xbDAgMzJjMCAzMi41IDEyLjEgNjIuMSAzMiA4NC43bDAgMjcuMy0xMTIgMCAwLTQwLjZ6TTEyOCAzMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnptMzIwIDBhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTI0IDQ2NGw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LFpvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtcnNzIixpY29uOls0NDgsNTEyLFsicnNzLXNxdWFyZSJdLCJmMTQzIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTk2IDEzNmMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxMzcgMCAyNDggMTExIDI0OCAyNDggMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMTAuNS04OS41LTIwMC0yMDAtMjAwLTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0IDgzLjkgMCAxNTIgNjguMSAxNTIgMTUyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNTcuNC00Ni42LTEwNC0xMDQtMTA0LTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDEyMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdfSxrd3Q9Wm9lLFN3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYWxlbmRhci1taW51cyIsaWNvbjpbNDQ4LDUxMixbXSwiZjI3MiIsIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTI0IDI2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il19LEN3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGFydC1kaWFncmFtIixpY29uOls1MTIsNTEyLFtdLCJlNjk1IiwiTTgwIDMyQzUzLjUgMzIgMzIgNTMuNSAzMiA4MHMyMS41IDQ4IDQ4IDQ4bDE1MiAwIDAgNDAtNDggNDgtNzIgMGMtMzkuOCAwLTcyIDMyLjItNzIgNzJsMCA2NC04IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC04IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw3MiAwIDQ4IDQ4IDAgNDAtOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOCAwIDAtNDAgNDgtNDggNzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDY0LTggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTggMCAwLTY0YzAtMzkuOC0zMi4yLTcyLTcyLTcybC03MiAwLTQ4LTQ4IDAtNDAgMTUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhMODAgMzJ6Il19LFhvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLXRpcmVkIixpY29uOls1MTIsNTEyLFsxMjg1NTUsInRpcmVkIl0sImY1YzgiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NC43IDMyOC43YzIyLTIyIDUzLjktNDAuNyA5MS4zLTQwLjdzNjkuMyAxOC43IDkxLjMgNDAuN2MxMS4xIDExLjEgMjAuMSAyMy40IDI2LjQgMzUuNCA2LjIgMTEuNyAxMC4zIDI0LjQgMTAuMyAzNS45IDAgNS4yLTIuNiAxMC4yLTYuOSAxMy4ycy05LjggMy43LTE0LjcgMS44bC0yMC41LTcuN2MtMjYuOS0xMC4xLTU1LjUtMTUuMy04NC4zLTE1LjNsLTMuMiAwYy0yOC44IDAtNTcuMyA1LjItODQuMyAxNS4zTDE0OS42IDQxNWMtNC45IDEuOC0xMC40IDEuMi0xNC43LTEuOFMxMjggNDA1LjIgMTI4IDQwMGMwLTExLjYgNC4yLTI0LjIgMTAuMy0zNS45IDYuMy0xMiAxNS4zLTI0LjMgMjYuNC0zNS40ek0xMjIuNiAxNTkuMmM0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMjA4IDM4Ni4yIDIzNS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdfSxMd3Q9WG9lLFR3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLXBvaW50LXJpZ2h0IixpY29uOls1MTIsNTEyLFtdLCJmMGE0IiwiTTQ4MCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjA4IDAgMC02NCAyMDggMHpNMzIwIDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwem02NC02NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNDggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyek0yODggMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDB6bS04OC05NmwuNiAwYy01LjQgOS40LTguNiAyMC4zLTguNiAzMiAwIDEzLjIgNCAyNS40IDEwLjggMzUuNi0yNC45IDguNy00Mi44IDMyLjUtNDIuOCA2MC40IDAgMTEuNyAzLjEgMjIuNiA4LjYgMzJsLTguNiAwQzcxLjYgNDQ4IDAgMzc2LjQgMCAyODhsMC02MS43YzAtNDIuNCAxNi45LTgzLjEgNDYuOS0xMTMuMWwxMS42LTExLjZDODIuNSA3Ny41IDExNS4xIDY0IDE0OSA2NGwyNyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgODhjMCAyMi4xLTE3LjkgNDAtNDAgNDBzLTQwLTE3LjktNDAtNDBsMC01NmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDU2YzAgMzkuOCAzMi4yIDcyIDcyIDcyeiJdfSxfd3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAiLGljb246WzM4NCw1MTIsWzg1OTNdLCJmMDYyIiwiTTIxNC42IDE3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxMTcuMyAxNjAgNDg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNzAuNyAxMDUuNCAxMDUuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYweiJdfSxBd3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY3ViZXMtc3RhY2tlZCIsaWNvbjpbNTEyLDUxMixbXSwiZTRlNiIsIk0xOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0em0zMiAzNTJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xOTIgMGw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTMyMCAxOTJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tMTgyLjYtMy45YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDQ1LjMgNDUuM2MxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNDUuMyA0NS4zYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEw5Mi4xIDI3OC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w0NS4zLTQ1LjN6TTMyIDM4NGw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LFFvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGlsZC1jb21iYXRhbnQiLGljb246WzU3Niw1MTIsWyJjaGlsZC1yaWZsZSJdLCJlNGUwIiwiTTE3Ni41IDEyOGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHptLTE2IDM1MmwwLTk2IDMyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTkyLjIgMjAuOSAzMy4yYzkuNCAxNSAyOS4yIDE5LjQgNDQuMSAxMHMxOS40LTI5LjIgMTAtNDQuMWwtMzkuOS02My4zQzI2Ni44IDE4NCAyMjMuMyAxNjAgMTc2LjUgMTYwUzg2LjIgMTg0IDYxLjMgMjIzLjZMMjEuNCAyODdjLTkuNCAxNS00LjkgMzQuNyAxMCA0NC4xczM0LjcgNC45IDQ0LjEtMTBsMjAuOS0zMy4yIDAgMTkyLjJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNNDQ4LjUgMGwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwwIDEwMC4zYy05LjYgNS41LTE2IDE1LjktMTYgMjcuN2wwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE0NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwIDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2bDU5LjUgMGMxMC40IDAgMTgtOS44IDE1LjUtMTkuOWwtMjMtOTIuMSA0NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtNDggMCAwLTI2LjcgNTMuMS0xNy43YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4ybDAtODQuNWMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDU2LTE2IDUuMyAwLTEwOS4zYzAtMTEuOC02LjQtMjIuMi0xNi0yNy43bDAtMTE2LjNjMC04LjgtNy4yLTE2LTE2LTE2eiJdfSwkd3Q9UW9lLER3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2ZXN0LXBhdGNoZXMiLGljb246WzQ0OCw1MTIsW10sImUwODYiLCJNMjAwIDI5My45TDIwMCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDI3MC41YzAtOS41IDIuOC0xOC43IDguMS0yNi42bDQ3LjktNzEuOGM1LjMtNy45IDguMS0xNy4xIDguMS0yNi42TDY0IDQ4QzY0IDIxLjUgODUuNSAwIDExMiAwbDMuNSAwYy4zIDAgLjYgMCAxIDAgLjYgMCAxLjIgMCAxLjggMCAxOC44IDAgMzQuMSA5LjcgNDQuMSAxOC44IDkuMyA4LjQgMjguNSAyMS4yIDYxLjcgMjEuMnM1Mi40LTEyLjggNjEuNy0yMS4yYzEwLTkuMSAyNS4zLTE4LjggNDQuMS0xOC44IC42IDAgMS4yIDAgMS44IDAgLjMgMCAuNiAwIDEgMEwzMzYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk3LjVjMCA5LjUgMi44IDE4LjcgOC4xIDI2LjZsNDcuOSA3MS44YzUuMyA3LjkgOC4xIDE3LjEgOC4xIDI2LjZMNDQ4IDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTA0IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTcwLjFjMC0zLjkgLjUtNy44IDEuNC0xMS42TDMwMy42IDY1LjRDMjg1LjkgNzcuMiAyNTkuOCA4OCAyMjQgODhzLTYxLjktMTAuOC03OS42LTIyLjZsNTQuMiAyMTYuOGMxIDMuOCAxLjQgNy43IDEuNCAxMS42ek05NiA0NTZhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwek02My41IDI1NS41Yy00LjcgNC43LTQuNyAxMi4zIDAgMTdMNzkgMjg4IDYzLjUgMzAzLjVjLTQuNyA0LjctNC43IDEyLjMgMCAxN3MxMi4zIDQuNyAxNyAwTDk2IDMwNSAxMTEuNSAzMjAuNWM0LjcgNC43IDEyLjMgNC43IDE3IDBzNC43LTEyLjMgMC0xN0wxMTMgMjg4IDEyOC41IDI3Mi41YzQuNy00LjcgNC43LTEyLjMgMC0xN3MtMTIuMy00LjctMTcgMEw5NiAyNzEgODAuNSAyNTUuNWMtNC43LTQuNy0xMi4zLTQuNy0xNyAwek0zMDQgMjgwbDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTggMCAwLThjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il19LEtvZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXJ0aW5pLWdsYXNzLWVtcHR5IixpY29uOls1MTIsNTEyLFsiZ2xhc3MtbWFydGluaSJdLCJmMDAwIiwiTTMyIDMyQzE5LjEgMzIgNy40IDM5LjggMi40IDUxLjhTLjIgNzcuNSA5LjQgODYuNmwyMTQuNiAyMTQuNiAwIDE0Ni43LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC0xNDYuNyAyMTQuNi0yMTQuNmM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSAzMiA0ODAgMzJMMzIgMzJ6TTI1NiAyNDIuN0wxMDkuMyA5NiA0MDIuNyA5NiAyNTYgMjQyLjd6Il19LEV3dD1Lb2UsTnd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hZ25ldCIsaWNvbjpbNDQ4LDUxMixbMTI5NTIyXSwiZjA3NiIsIk0wIDE3NkwwIDI4OEMwIDQxMS43IDEwMC4zIDUxMiAyMjQgNTEyUzQ0OCA0MTEuNyA0NDggMjg4bDAtMTEyLTEyOCAwIDAgMTEyYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bDAtMTEyLTEyOCAwem0wLTQ4bDEyOCAwIDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NGwwIDY0em0zMjAgMGwxMjggMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0eiJdfSxQd3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicm9hZC1iYXJyaWVyIixpY29uOls2NDAsNTEyLFtdLCJlNTYyIiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCAyNjYuMyAxNDkuMiA5NiA2NCA5NiA2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDA1LjIgOTZsLTc0LjMgMC01LjQgMTAuNy05MC42IDE4MS4zIDc0LjMgMCA1LjQtMTAuNyA5MC42LTE4MS4zek0zNjIuOCAyODhsNzQuMyAwIDUuNC0xMC43IDkwLjYtMTgxLjMtNzQuMyAwLTUuNCAxMC43LTkwLjYgMTgxLjN6TTIwMi44IDk2bC01LjQgMTAuNy05MC42IDE4MS4zIDc0LjMgMCA1LjQtMTAuNyA5MC42LTE4MS4zLTc0LjMgMHptMjg4IDE5Mmw4NS4yIDAgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUzLjctODUuMiAxNzAuM3oiXX0sSm9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvbXBhc3MtZHJhZnRpbmciLGljb246WzUxMiw1MTIsWyJkcmFmdGluZy1jb21wYXNzIl0sImY1NjgiLCJNOTkuMyAyNTYuMWw2OS40LTExOS45Yy01LjYtMTIuMi04LjgtMjUuOC04LjgtNDAuMiAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgMTQuMy0zLjEgMjcuOS04LjggNDAuMmw0NC40IDc2LjdjLTIzLjEgMjYtNTMuNyA0NS4xLTg4LjQgNTMuOEwyNTYgMTkxLjkgMTg3LjkgMzA5LjVjMjEuNSA2LjggNDQuMyAxMC41IDY4LjEgMTAuNSA3MC43IDAgMTMzLjgtMzIuNyAxNzQuOS04NCAxMS4xLTEzLjggMzEuMi0xNiA0NS01czE2IDMxLjIgNSA0NWMtNTIuNyA2NS44LTEzMy45IDEwOC0yMjQuOCAxMDgtMzUuNCAwLTY5LjQtNi40LTEwMC43LTE4LjFMOTguNyA0NjMuN0M5NCA0NzEuOCA4NyA0NzguNCA3OC42IDQ4Mi42TDIzLjIgNTEwLjNjLTUgMi41LTEwLjkgMi4yLTE1LjYtLjdTMCA1MDEuNSAwIDQ5NmwwLTU1LjRjMC04LjQgMi4yLTE2LjcgNi41LTI0LjFsNjAtMTAzLjdjLTEyLjgtMTEuMi0yNC42LTIzLjUtMzUuMy0zNi44LTExLjEtMTMuOC04LjgtMzMuOSA1LTQ1czMzLjktOC44IDQ1IDVjNS43IDcuMSAxMS44IDEzLjggMTguMiAyMC4xek0zODEuMSA0MDcuOWMzMi41LTEzIDYyLjQtMzEgODguOS01Mi45bDM1LjYgNjEuNWM0LjIgNy4zIDYuNSAxNS42IDYuNSAyNC4xbDAgNTUuNGMwIDUuNS0yLjkgMTAuNy03LjYgMTMuNnMtMTAuNiAzLjItMTUuNiAuN2wtNTUuNC0yNy43Yy04LjQtNC4yLTE1LjQtMTAuOC0yMC4xLTE4LjlsLTMyLjMtNTUuOHpNMjU2IDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LEl3dD1Kb2UsRnd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1wZXJzb24tY29uZmluZWQiLGljb246WzQ0OCw1MTIsW10sImU1NzciLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptOTYgMTEyYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTgwIDEwNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTAyLjFjMCAzNi40LTI5LjUgNjUuOS02NS45IDY1LjktMTcuNSAwLTM0LjMtNi45LTQ2LjYtMTkuM2wtNTQuNy01NC43LTI4LjEgNTYuM2MtNy45IDE1LjgtMjcuMSAyMi4yLTQyLjkgMTQuM3MtMjIuMi0yNy4xLTE0LjMtNDIuOWw0OC05NmM0LjYtOS4yIDEzLjMtMTUuNiAyMy41LTE3LjNzMjAuNSAxLjcgMjcuOCA5bDQxLjQgNDEuNCAwLTU4Ljd6Il19LE93dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbGF0ZS13aGVhdCIsaWNvbjpbNTEyLDUxMixbXSwiZTU1YSIsIk0xNzYgMzJjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxNmMwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6TTU2IDY0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0UzQyLjcgNjQgNTYgNjR6TTI0IDEzNmwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCAxODRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTggOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI3MiA0OGMwLTguOCA3LjItMTYgMTYtMTYgNDQuMiAwIDgwIDM1LjggODAgODBsMCAxNmMwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0xNnpNNDAwIDMyYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2LTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMTZjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNjBsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MCA4LjggMCAxNiA3LjIgMTYgMTZ6TTM1MiAxNzZjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODB6bS05NiAxNmwwIDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMy41IDM0Ny42QzEuNiAzMzIuOSAxMyAzMjAgMjcuOCAzMjBsNDU2LjQgMGMxNC44IDAgMjYuMiAxMi45IDI0LjQgMjcuNi02LjMgNTAuMi00NC40IDg5LjQtOTIuNiA5OC40bDAgMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMmMtNDguMi05LTg2LjMtNDguMi05Mi41LTk4LjR6Il19LGVzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaWduLWhhbmdpbmciLGljb246WzUxMiw1MTIsWyJzaWduIl0sImY0ZDkiLCJNOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zNTIgMCAwIDM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTM1Mi0zMiAwQzE0LjMgMTI4IDAgMTEzLjcgMCA5NlMxNC4zIDY0IDMyIDY0bDMyIDAgMC0zMkM2NCAxNC4zIDc4LjMgMCA5NiAwek0yMDggMTc2bDI0MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTQ0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNDAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNDRjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LEJ3dD1lc2UsdHNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhci1iYXR0ZXJ5IixpY29uOls1MTIsNTEyLFsiYmF0dGVyeS1jYXIiXSwiZjVkZiIsIk04MCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDk2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMTYgMHpNMzkyIDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMyLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMiAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMzJ6TTY0IDI0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCAyMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0eiJdfSxSd3Q9dHNlLFdWPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNoaXJ0IixpY29uOls2NDAsNTEyLFsxMjgwODUsInQtc2hpcnQiLCJ0c2hpcnQiXSwiZjU1MyIsIk0zMjAuMiAxMTJjNDQuMiAwIDgwLTM1LjggODAtODBsNTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDYxNy42IDE2OS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC01MC43IDUwLjdjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC00MS40LTQxLjQgMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTE5MiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIyNC00MS40IDQxLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwTDIyLjkgMjE0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDE0MS41IDUwLjdjMTItMTIgMjguMy0xOC43IDQ1LjMtMTguN2w1My41IDBjMCA0NC4yIDM1LjggODAgODAgODB6Il19LEh3dD1XVixxd3Q9V1YsVnd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBhcmFncmFwaCIsaWNvbjpbNDQ4LDUxMixbMTgyXSwiZjFkZCIsIk0xNjAgMEw0MTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTQxNi00OCAwIDAgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwLTQ4IDBDNzEuNiAzMjAgMCAyNDguNCAwIDE2MFM3MS42IDAgMTYwIDB6Il19LGFzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlbnZlbG9wZXMtYnVsayIsaWNvbjpbNTc2LDUxMixbIm1haWwtYnVsayJdLCJmNjc0IiwiTTExMiAwQzg1LjUgMCA2NCAyMS41IDY0IDQ4bDAgMTYwIDgwIDAgMC0zMmMwLTUzIDQzLTk2IDk2LTk2bDIwOCAwIDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTEyIDB6TTI0MCAxMjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzIgODAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTEyIDE2MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yODggMHptMjAwIDY0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDggMjU2Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEwLjQgMTU2LjYgODYuMmMxLjEgLjYgMi4yIC45IDMuNCAuOXMyLjQtLjMgMy40LS45TDMyMCAzMTQuNCAzMjAgMzA0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDI1NnpNMzIwIDM2OS4yTDE4Ni42IDQ0Mi42Yy04LjEgNC41LTE3LjMgNi44LTI2LjYgNi44cy0xOC40LTIuNC0yNi42LTYuOEwwIDM2OS4yIDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDIyNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTQuOHoiXX0sVXd0PWFzZSxqd3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ3VpdGFyIixpY29uOls1MTIsNTEyLFtdLCJmN2E2IiwiTTQ2NSA3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEwzODMgNTVjLTIuNCAyLjQtNC4zIDUuMy01LjUgOC41bC0xNS40IDQxLTc3LjUgNzcuNmMtNDUuMS0yOS40LTk5LjMtMzAuMi0xMzEgMS42LTExIDExLTE4IDI0LjYtMjEuNCAzOS42LTMuNyAxNi42LTE5LjEgMzAuNy0zNi4xIDMxLjYtMjUuNiAxLjMtNDkuMyAxMC43LTY3LjMgMjguNi00NC44IDQ0LjgtMzYuNCAxMjUuOCAxOC43IDE4MC45UzE4My42IDUyOCAyMjguNCA0ODMuMmMxNy45LTE3LjkgMjcuNC00MS43IDI4LjYtNjcuMyAuOS0xNyAxNS0zMi4zIDMxLjYtMzYuMSAxNS0zLjQgMjguNi0xMC41IDM5LjYtMjEuNCAzMS44LTMxLjggMzEtODUuOSAxLjYtMTMxbDc3LjYtNzcuNiA0MS0xNS40YzMuMi0xLjIgNi4xLTMuMSA4LjUtNS41bDQ4LTQ4YzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDQ2NSA3ek0yMDggMjU2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnoiXX0sV3d0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN1aXRjYXNlIixpY29uOls1MTIsNTEyLFsxMjk1MjNdLCJmMGYyIiwiTTIwMCA0OGwxMTIgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC0xMjggMCAwLTQwYzAtNC40IDMuNi04IDgtOHptLTU2IDhsMCA0MjQgMjI0IDAgMC00MjRjMC0zMC45LTI1LjEtNTYtNTYtNTZMMjAwIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2ek00MTYgOTZsMCAzODQgMzIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtMzIgMHpNOTYgNDgwbDAtMzg0LTMyIDBDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyIDB6Il19LHJzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtdXAiLGljb246WzUxMiw1MTIsWzYxNDY3LCJhcnJvdy1hbHQtY2lyY2xlLXVwIl0sImYzNWIiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTExLjMtMzg3LjNsMTA0IDEwNGM0LjYgNC42IDUuOSAxMS41IDMuNSAxNy40UzM2Ni41IDI1NiAzNjAgMjU2bC01NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTYtNTYgMGMtNi41IDAtMTIuMy0zLjktMTQuOC05LjlzLTEuMS0xMi45IDMuNS0xNy40bDEwNC0xMDRjNi4yLTYuMiAxNi40LTYuMiAyMi42IDB6Il19LEd3dD1yc2UsWXd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImYiLGljb246WzMyMCw1MTIsWzEwMl0sIjQ2IiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCAxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDAgMC0xMjggMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6Il19LFp3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ4bWFya3MtbGluZXMiLGljb246WzY0MCw1MTIsW10sImU1OWEiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDU3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyem0wIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1NzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZ6TTcgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwek0yNjUgMTY3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NXpNNDU1IDE2N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXX0saXNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImVhcnRoLW9jZWFuaWEiLGljb246WzUxMiw1MTIsWyJnbG9iZS1vY2VhbmlhIl0sImU0N2IiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAxNTAuNmMwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNmw0MS40IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTE2LTE2Yy00LjItNC4yLTYuNi0xMC02LjYtMTZ6TTQzMiAyNTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQxMS4zIDM3OS4zbC0zMiAzMmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzMi0zMmM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6TTIyNCA0MzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnptLTk2LTgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE4LjdjMC04LjUgMy40LTE2LjYgOS40LTIyLjZsNDgtNDhjNC4yLTQuMiAxMC02LjYgMTYtNi42bDYuNiAwYzguOCAwIDE2IDcuMiAxNiAxNnM3LjIgMTYgMTYgMTYgMTYtNy4yIDE2LTE2IDcuMi0xNiAxNi0xNmw2LjYgMGM2IDAgMTEuOCAyLjQgMTYgNi42bDQ4IDQ4YzYgNiA5LjQgMTQuMSA5LjQgMjIuNmwwIDUwLjdjMCAxNy43LTE0LjMgMzItMzIgMzJsLTUwLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTEzLjMtMTMuM2MtNi02LTE0LjEtOS40LTIyLjYtOS40TDEyOCAzNTJ6Il19LFh3dD1pc2UsUXd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvbW1lbnQtc2xhc2giLGljb246WzU3Niw1MTIsW10sImY0YjMiLCJNNDEtMjVDMzEuNi0zNC4zIDE2LjQtMzQuMyA3LTI1Uy0yLjMtLjQgNyA5TDUzNSA1MzdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05Ni42LTk2LjZjNDQuNC00My4yIDcxLjYtMTAxLjggNzEuNi0xNjYuNSAwLTEzMi41LTExNC42LTI0MC0yNTYtMjQwLTYzIDAtMTIwLjggMjEuNC0xNjUuNCA1Ni44TDQxLTI1em0xOS40IDE1NUM0Mi4yIDE2MyAzMiAyMDAuMyAzMiAyMzkuOSAzMiAyOTQuMiA1MS4yIDM0NC4yIDgzLjYgMzg0LjRMMzQuOCA0NzYuN2MtNC44IDktMy4zIDIwIDMuNiAyNy41UzU2LjEgNTE0IDY1LjUgNTEwbDExOC40LTUwLjdjMzEuOCAxMy4zIDY3LjEgMjAuNyAxMDQuMSAyMC43IDM2LjQgMCA3MC45LTcuMSAxMDIuMy0xOS45TDYwLjMgMTMwLjF6Il19LEt3dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbGF5IixpY29uOls0NDgsNTEyLFs5NjU0XSwiZjA0YiIsIk05MS4yIDM2LjljLTEyLjQtNi44LTI3LjQtNi41LTM5LjYgLjdTMzIgNTcuOSAzMiA3MmwwIDM2OGMwIDE0LjEgNy41IDI3LjIgMTkuNiAzNC40czI3LjIgNy41IDM5LjYgLjdsMzM2LTE4NGMxMi44LTcgMjAuOC0yMC41IDIwLjgtMzUuMXMtOC0yOC4xLTIwLjgtMzUuMWwtMzM2LTE4NHoiXX0sSnd0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZpYWwtY2lyY2xlLWNoZWNrIixpY29uOls1MTIsNTEyLFtdLCJlNTk2IiwiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBMMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNjEuNGMtNjYuMSAzMC4zLTExMiA5Ny4xLTExMiAxNzQuNiAwIDM5LjcgMTIgNzYuNiAzMi43IDEwNy4yLTEwLjMgMy4xLTIxLjMgNC44LTMyLjcgNC44LTYxLjkgMC0xMTItNTAuMS0xMTItMTEyTDY0IDY0QzQ2LjMgNjQgMzIgNDkuNyAzMiAzMnptOTYgMzJsMCAxMjggOTYgMCAwLTEyOC05NiAwem05NiAzMzZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il19LGVNdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicmlkZ2UtY2lyY2xlLWNoZWNrIixpY29uOls1NzYsNTEyLFtdLCJlNGM5IiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw4IDAgMCA2NC00MCAwIDAgMTEyYzM3LjYgOS40IDY0IDQzLjIgNjQgODJsMCA5NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NiA2LjQgMCAxMi43IC42IDE4LjcgMS44IDM0LjctNDkuNSA5Mi4yLTgxLjggMTU3LjMtODEuOCAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTY1LjQtNDAgMCAwLTY0IDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnpNNDI0IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTI5NiA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek04OCA5Nmw4MCAwIDAgNjQtODAgMCAwLTY0ek01NzYgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXX0sdE10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNlZGktc2lnbiIsaWNvbjpbMzg0LDUxMixbXSwiZTBkZiIsIk0yMzIgMzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNi41Qzg4LjggNzMuOSAxNiAxNTYuNCAxNiAyNTZTODguOCA0MzguMSAxODQgNDUzLjVsMCAyNi41YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNC42YzQ2LjgtMy43IDg5LjEtMjMuNiAxMjEuMy01My45IDEyLjktMTIuMSAxMy40LTMyLjQgMS4zLTQ1LjJzLTMyLjQtMTMuNC00NS4yLTEuM2MtMjAuNyAxOS42LTQ3LjYgMzIuNy03Ny4zIDM2LjJsMC0yNzAuMWMyOS44IDMuNSA1Ni42IDE2LjYgNzcuMyAzNi4yIDEyLjkgMTIuMSAzMy4xIDExLjUgNDUuMi0xLjNzMTEuNS0zMy4xLTEuMy00NS4yQzMyMS4xIDgwLjIgMjc4LjggNjAuMyAyMzIgNTYuNkwyMzIgMzJ6bS00OCA5MS44bDAgMjY0LjRDMTI0LjMgMzczLjggODAgMzIwLjEgODAgMjU2czQ0LjMtMTE3LjggMTA0LTEzMi4yeiJdfSxhTXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicHV6emxlLXBpZWNlIixpY29uOls1MTIsNTEyLFsxMjk1MTNdLCJmMTJlIiwiTTIyNCAwYzM1LjMgMCA2NCAyMS41IDY0IDQ4IDAgMTAuNC00LjQgMjAtMTIgMjcuOS02LjYgNi45LTEyIDE1LjMtMTIgMjQuOSAwIDE1IDEyLjIgMjcuMiAyNy4yIDI3LjJsNDQuOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDQuOGMwIDE1IDEyLjIgMjcuMiAyNy4yIDI3LjIgOS41IDAgMTgtNS40IDI0LjktMTIgNy45LTcuNSAxNy41LTEyIDI3LjktMTIgMjYuNSAwIDQ4IDI4LjcgNDggNjRzLTIxLjUgNjQtNDggNjRjLTEwLjQgMC0yMC4xLTQuNC0yNy45LTEyLTYuOS02LjYtMTUuMy0xMi0yNC45LTEyLTE1IDAtMjcuMiAxMi4yLTI3LjIgMjcuMkwzODQgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC01Ni44IDBjLTEyLjggMC0yMy4yLTEwLjQtMjMuMi0yMy4yIDAtOS4yIDUuOC0xNy4zIDEzLjItMjIuOCAxMS42LTguNyAxOC44LTIwLjcgMTguOC0zNCAwLTI2LjUtMjguNy00OC02NC00OHMtNjQgMjEuNS02NCA0OGMwIDEzLjMgNy4yIDI1LjMgMTguOCAzNCA3LjQgNS41IDEzLjIgMTMuNSAxMy4yIDIyLjggMCAxMi44LTEwLjQgMjMuMi0yMy4yIDIzLjJMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDM0My4yYzAtMTIuOCAxMC40LTIzLjIgMjMuMi0yMy4yIDkuMiAwIDE3LjMgNS44IDIyLjggMTMuMiA4LjcgMTEuNiAyMC43IDE4LjggMzQgMTguOCAyNi41IDAgNDgtMjguNyA0OC02NHMtMjEuNS02NC00OC02NGMtMTMuMyAwLTI1LjMgNy4yLTM0IDE4LjgtNS41IDcuNC0xMy41IDEzLjItMjIuOCAxMy4yLTEyLjggMC0yMy4yLTEwLjQtMjMuMi0yMy4yTDAgMTc2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDEwOC44IDBjMTUgMCAyNy4yLTEyLjIgMjcuMi0yNy4yIDAtOS41LTUuNC0xOC0xMi0yNC45LTcuNS03LjktMTItMTcuNS0xMi0yNy45IDAtMjYuNSAyOC43LTQ4IDY0LTQ4eiJdfSxyTXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVsbWV0LXVuIixpY29uOls1MTIsNTEyLFtdLCJlNTAzIiwiTTQ3OS41IDIyNEM0NzEuMiA5OC45IDM2Ny4yIDAgMjQwIDAgMTA3LjUgMCAwIDEwNy41IDAgMjQwbDAgNTYuM0MwIDM0NC44IDM5LjIgMzg0IDg3LjcgMzg0bDEyNy4zIDAgMTI4LjYgMTIxLjRjNC41IDQuMiAxMC40IDYuNiAxNi41IDYuNmw5NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04Ni41IDAtMS41LTEuNSAwLTE3NC41IDExMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0uNSAwek0zMjAgNDE3LjJsLTc4LTczLjcgMzIuNC01NS41IDQ1LjYgMCAwIDEyOS4yek0yODUuMyAxMDMuMWwzNC43IDUyIDAtNDMuMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgOTZjMCA3LjEtNC42IDEzLjMtMTEuNCAxNS4zcy0xNC0uNi0xNy45LTYuNGwtMzQuNy01MiAwIDQzLjJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC05NmMwLTcuMSA0LjYtMTMuMyAxMS40LTE1LjNzMTQgLjYgMTcuOSA2LjR6TTE2MCAxMTJsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnoiXX0saU10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdsYXNzLXdhdGVyIixpY29uOlszODQsNTEyLFtdLCJlNGY0IiwiTTMyIDBDMjMuMSAwIDE0LjYgMy43IDguNiAxMC4yUy0uNiAyNS40IC4xIDM0LjNMMjguOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM2wxNjYuNiAwYzQyIDAgNzYuOC0zMi40IDc5LjgtNzQuM0wzODMuOSAzNC4zYy42LTguOS0yLjQtMTcuNi04LjUtMjQuMVMzNjAuOSAwIDM1MiAwTDMyIDB6TTczIDE1Ni41bC02LjYtOTIuNSAyNTEuMyAwLTYuNiA5Mi41LTI0LjIgMTIuMWMtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwLTIwLjktMTAuNC00NS41LTEwLjQtNjYuNCAwLTE5LjQgOS43LTQyLjIgOS43LTYxLjYgMEw3MyAxNTYuNXoiXX0sb010PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYXJ0LWNpcmNsZS1ib2x0IixpY29uOls1NzYsNTEyLFtdLCJlNGZjIiwiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTI4OCA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTc3LjQtNzdjLTUuOC00LjItMTMuOC00LTE5LjQgLjVsLTgwIDY0Yy01LjMgNC4yLTcuNCAxMS40LTUuMSAxNy44UzM2OS4yIDQxNiAzNzYgNDE2bDMyLjkgMC0xNS45IDQyLjRjLTIuNSA2LjctLjIgMTQuMyA1LjYgMTguNnMxMy44IDQgMTkuNC0uNWw4MC02NGM1LjMtNC4yIDcuNC0xMS40IDUuMS0xNy44UzQ5NC44IDM4NCA0ODggMzg0bC0zMi45IDAgMTUuOS00Mi40YzIuNS02LjcgLjItMTQuMy01LjYtMTguNnoiXX0sc010PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InB1bXAtc29hcCIsaWNvbjpbMzIwLDUxMixbXSwiZTA2YiIsIk05NiAwbDAgODAgMTI4IDAgMC0yNCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0UzMwOS4zIDggMjk2IDhsLTcyIDAgMC04YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwQzExMC4zLTMyIDk2LTE3LjcgOTYgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAxMjh6TTIyNCAzNDRjMCAzNS4zLTI4LjcgNTYtNjQgNTZzLTY0LTIwLjctNjQtNTZjMC0zMi41IDM3LTgwLjkgNTAuOS05Ny45IDMuMi0zLjkgOC4xLTYuMSAxMy4xLTYuMXM5LjkgMi4yIDEzLjEgNi4xQzE4NyAyNjMuMSAyMjQgMzExLjUgMjI0IDM0NHoiXX0sbk10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtc2Npc3NvcnMiLGljb246WzUxMiw1MTIsW10sImYyNTciLCJNNDAgMjA4Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDE4MC4yIDBjLTcuNiA4LjUtMTIuMiAxOS43LTEyLjIgMzIgMCAyNS4zIDE5LjUgNDYgNDQuMyA0Ny45LTcuNyA4LjUtMTIuMyAxOS44LTEyLjMgMzIuMSAwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4bDAtMTEzLjFjMC00MC4yLTE2LTc4LjgtNDQuNC0xMDcuMy0yMi44LTIyLjgtNTMuNi0zNS42LTg1LjgtMzUuNkwzMzYgNjRjLTIxLjMgMC0zOS4zIDEzLjktNDUuNiAzMy4xbDc0LjUgMjMuN2M4LjQgMi43IDEzLjEgMTEuNyAxMC40IDIwLjFzLTExLjcgMTMuMS0yMC4xIDEwLjRsLTY3LjEtMjEuNCAwIC4xLTIwNC02NC4xQzYyLjkgNTkuMiA0MC41IDcwLjkgMzMuOSA5MnM1LjEgNDMuNSAyNi4yIDUwLjJMMjY5LjUgMjA4IDQwIDIwOHoiXX0sb3NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRvbGx5IixpY29uOls1NzYsNTEyLFsiZG9sbHktYm94Il0sImY0NzIiLCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGw3Mi45IDAgOTIuMSAyNzYuMmMtMjIuNSAxNy42LTM3IDQ1LTM3IDc1LjggMCA1MyA0MyA5NiA5NiA5NiA1Mi40IDAgOTUuMS00MiA5Ni05NC4zbDIwMi4xLTY3LjRjMTYuOC01LjYgMjUuOC0yMy43IDIwLjItNDAuNXMtMjMuNy0yNS44LTQwLjUtMjAuMkwzMzEuOCAzNTdjLTE3LjItMjIuMS00My45LTM2LjUtNzQtMzdMMTY1LjcgNDMuOEMxNTYuOSAxNy42IDEzMi41IDAgMTA0LjkgMEwzMiAwek0yMDggNDE2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTI4MC41IDg5LjNjLTI1LjIgOC4yLTM5IDM1LjMtMzAuOCA2MC41bDM5LjYgMTIxLjdjOC4yIDI1LjIgMzUuMyAzOSA2MC41IDMwLjhsMTIxLjctMzkuNmMyNS4yLTguMiAzOS0zNS4zIDMwLjgtNjAuNUw0NjIuOCA4MC41Yy04LjItMjUuMi0zNS4zLTM5LTYwLjUtMzAuOEwyODAuNSA4OS4zeiJdfSxsTXQ9b3NlLElVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBhcGVyY2xpcCIsaWNvbjpbNTEyLDUxMixbMTI4MjA2XSwiZjBjNiIsIk0yMjQuNiAxMi44YzU2LjItNTYuMiAxNDcuNC01Ni4yIDIwMy42IDBzNTYuMiAxNDcuNCAwIDIwMy42bC0xNjQgMTY0Yy0zNC40IDM0LjQtOTAuMSAzNC40LTEyNC41IDBzLTM0LjQtOTAuMSAwLTEyNC41TDI5Mi41IDEwMy4zYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTg1IDMwMS4zYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTY0LTE2NGMzMS4yLTMxLjIgMzEuMi04MS45IDAtMTEzLjFzLTgxLjktMzEuMi0xMTMuMSAwbC0xNjQgMTY0Yy01My4xIDUzLjEtNTMuMSAxMzkuMiAwIDE5Mi4zczEzOS4yIDUzLjEgMTkyLjMgMEw0MjguMyAyODQuM2MxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zTDM0My40IDQ1OS42Yy03OC4xIDc4LjEtMjA0LjcgNzguMS0yODIuOCAwcy03OC4xLTIwNC43IDAtMjgyLjhsMTY0LTE2NHoiXX0sY010PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRlbW9jcmF0IixpY29uOls2NDAsNTEyLFtdLCJmNzQ3IiwiTTY0IDMyYzAtOC45IDMuOC0yMC45IDYuMi0yNy4zIDEtMi44IDMuOC00LjcgNi44LTQuNyAxLjkgMCAzLjggLjcgNS4yIDIuMUwxMjggNDUuNyAxNzMuOCAyLjFjMS40LTEuMyAzLjItMi4xIDUuMi0yLjEgMyAwIDUuOCAxLjggNi44IDQuNyAyLjQgNi41IDYuMiAxOC40IDYuMiAyNy4zIDAgMjYuNS0yMS45IDQyLTI5LjUgNDYuNmw3Ni4yIDcyLjZjNiA1LjcgMTMuOSA4LjggMjIuMSA4LjhsMjE5LjIgMCAzMiAwYzQwLjMgMCA3OC4yIDE5IDEwMi40IDUxLjJsMTkuMiAyNS42YzEwLjYgMTQuMSA3LjcgMzQuMi02LjQgNDQuOHMtMzQuMiA3LjctNDQuOC02LjRsLTE5LjItMjUuNmMtNS4zLTctMTEuOC0xMi44LTE5LjItMTdsMCA4Ny40LTM1MiAwLTQwLjQtOTQuM2MtMy45LTkuMi0xNS4zLTEyLjYtMjMuNi03bC00Mi4xIDI4Yy05LjEgNi4xLTE5LjcgOS4zLTMwLjcgOS4zbC0yIDBDMjMuOSAyNTYgMCAyMzIuMSAwIDIwMi43IDAgMTkwLjYgNC4xIDE3OC45IDExLjcgMTY5LjRMODcuNiA3NC42Qzc4LjEgNjcuNCA2NCA1My4yIDY0IDMyek01NDQgMzUybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0LTE2MCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTI4IDM1MiAwek0yNTYgMjgwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjQ4LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTM2OCAyODBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxzc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLWFycm93LXVwLXJpZ2h0IixpY29uOls0NDgsNTEyLFsiZXh0ZXJuYWwtbGluay1zcXVhcmUiXSwiZjE0YyIsIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0yNzIgMjk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTExMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU0LjEgMC0xMDMgMTAzYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTAzLTEwMyAwIDU0LjF6Il19LGRNdD1zc2UsZk10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZlcnJ5IixpY29uOls2NDAsNTEyLFtdLCJlNGVhIiwiTTIyNCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDQ4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxMjgtLjEgMGMuMSAuNyAuMSAxLjMgLjEgMiAwIDMwLjItNy42IDU5LjgtMjIgODYuM2wtMTIuNyAyMy4zLS42IDFjLTIyLjMtMTEuMy00Ni41LTE2LjgtNzAuOC0xNi43LTMyLjUgLjItNjQuOSAxMC43LTkyLjQgMzEuNC0yMi4xIDE2LjYtMjkuMSAxNi42LTUxLjIgMC0yOC4xLTIxLjEtNjEuMy0zMS42LTk0LjQtMzEuNC0yMy42IC4yLTQ3LjEgNS43LTY4LjcgMTYuN2wtLjYtMS0xMi43LTIzLjNjLTE0LjQtMjYuNS0yMi01Ni4yLTIyLTg2LjMgMC0uNyAwLTEuNCAuMS0ybC0uMSAwIDAtMTI4YzAtNDQuMiAzNS44LTgwIDgwLTgwbDQ4IDAgMC0zMnpNMTYwIDI1NmwzMjAgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZsLTI4OCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTJ6TTQwMy40IDQ3Ni4xQzM3OS4xIDQ5NC4zIDM1MS4xIDUxMiAzMjAgNTEycy01OS4xLTE3LjctODMuNC0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC41LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjNjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXX0sdU10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vc3F1aXRvIixpY29uOls1NzYsNTEyLFtdLCJlNTJiIiwiTTE3OC41IDQ5NS4yYy03LjUgOS42LTIxIDEyLjEtMzEuMyA1LjNTMTMzLjUgNDgwIDEzOC45IDQ2OWwxLjItMi4yIDM2LjItNTggMC00MSAuMy00Yy42LTMuOSAyLjItNy43IDQuNi0xMC45bDM5LjMtNTIuMi02Ni4yIDU5LjVjLTE3IDE1LjMtMzkgMjMuNy02MS45IDIzLjhsLTguMSAwYy00Ni42IDAtODQuNC0zNy44LTg0LjQtODQuNCAwLTQzIDMyLjQtNzkuMiA3NS4xLTgzLjlsMTMwLjUtMTQuNS00NC44LTM4LjMtMi40LTIuNGMtNS4zLTYtNy4zLTE0LjQtNS4zLTIyLjNsMTMuMy01My40LTI1LjktMzguOS0xLjMtMi4xYy01LjgtMTAuOC0yLjctMjQuNiA3LjQtMzEuNyAxMC4xLTcuMSAyMy43LTUuMSAzMS40IDQuM2wxLjUgMiAzMiA0OCAxLjQgMi4yYzIuOCA1LjMgMy41IDExLjYgMi4xIDE3LjZsLTEyLjMgNDkuMiA1My4zIDQ1LjcgMC0yOC44YzAtMTEuOCA2LjUtMjIuMSAxNi0yNy43bDAtNjAuNSAuMy0zLjNjMS41LTcuMyA4LTEyLjcgMTUuNy0xMi43czE0LjIgNS41IDE1LjcgMTIuN2wuMyAzLjIgMCA2MC41YzkuNiA1LjUgMTYgMTUuOCAxNiAyNy43bDAgMjguOSA1My40LTQ1LjgtMTIuMy00OS4yYy0xLjUtNS45LS43LTEyLjIgMi4xLTE3LjZsMS40LTIuMiAzMi00OCAxLjUtMmM3LjctOS40IDIxLjMtMTEuNSAzMS40LTQuMyAxMC4xIDcuMSAxMy4xIDIwLjkgNy40IDMxLjdsLTEuMyAyLjEtMjUuOSAzOC45IDEzLjMgNTMuNGMyIDgtLjEgMTYuMy01LjMgMjIuM2wtMi40IDIuNC00NC43IDM4LjMgMTMwLjUgMTQuNWM0Mi44IDQuOCA3NS4xIDQwLjkgNzUuMSA4My45IDAgNDYuNi0zNy44IDg0LjQtODQuNCA4NC40bC04LjEgMGMtMjIuOCAwLTQ0LjktOC41LTYxLjktMjMuOGwtNjYuMS01OS41IDM5LjIgNTIuMmMyLjQgMy4yIDQgNyA0LjYgMTAuOWwuMyA0IDAgNDEgMzYuMiA1OCAxLjIgMi4xYzUuNCAxMSAyIDI0LjctOC4zIDMxLjVzLTIzLjggNC40LTMxLjMtNS4zbC0xLjQtMi00MC02NC0xLjYtMy4xYy0xLjQtMy4xLTIuMS02LjYtMi4xLTEwLjFsMC0zOS44LTMyLjQtNDMuMSAwIDc0LjdjMCAxNy43LTE0LjMgMzItMzIgMzItMTcuNyAwLTMyLTE0LjMtMzItMzJsMC03NC42LTMyLjMgNDMgMCAzOS44YzAgMy41LS43IDYuOS0yLjEgMTAuMWwtMS42IDMuMS00MCA2NC0xLjQgMnoiXX0scE10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLWNpcmNsZS1hcnJvdy1yaWdodCIsaWNvbjpbNTc2LDUxMixbXSwiZTRkMSIsIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTQ0LjdjLTM1LjcgMi45LTY4LjUgMTUuNi05NiAzNS40bDAtNGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0IDBjLTEzLjggMTkuMi0yNC4xIDQxLTMwLjEgNjQuNS0xLjktLjQtMy45LS41LTUuOS0uNWwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA4MCA3NC45IDBjNi4xIDE3LjMgMTQuNiAzMy40IDI1LjEgNDhMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA2NHpNMTQ0IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNDQgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTI4OCA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQwLjctNjcuM2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZsMjguNyAyOC43LTg5LjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw4OS40IDAtMjguNyAyOC43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsNTYtNTZjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTU2LTU2Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHoiXX0sbnNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxlZnQtcmlnaHQiLGljb246WzUxMiw1MTIsWzg1OTYsImFycm93cy1hbHQtaCJdLCJmMzM3IiwiTTUwMi42IDQwNi42bC05NiA5NmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzUyIDQ5Mi45IDM1MiA0ODBsMC02NC0zMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMjAgMCAwLTY0YzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjN6TTkuNCAxNTAuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTMTYwIDE5LjEgMTYwIDMybDAgNjQgMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwIDAgNjRjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTk2LTk2eiJdfSxoTXQ9bnNlLG1NdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2aXJ1cyIsaWNvbjpbNTEyLDUxMixbXSwiZTA3NCIsIk0yOTYgNDBjMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBjMCA0NC4xLTUzLjMgNjYuMS04NC41IDM1LTE1LjYtMTUuNi00MC45LTE1LjYtNTYuNiAwcy0xNS42IDQwLjkgMCA1Ni42YzMxLjIgMzEuMiA5LjEgODQuNS0zNSA4NC41LTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBjNDQuMSAwIDY2LjEgNTMuMyAzNSA4NC41LTE1LjYgMTUuNi0xNS42IDQwLjkgMCA1Ni42czQwLjkgMTUuNiA1Ni42IDBjMzEuMi0zMS4yIDg0LjUtOS4xIDg0LjUgMzUgMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGMwLTQ0LjEgNTMuMy02Ni4xIDg0LjUtMzUgMTUuNiAxNS42IDQwLjkgMTUuNiA1Ni42IDBzMTUuNi00MC45IDAtNTYuNmMtMzEuMi0zMS4yLTkuMS04NC41IDM1LTg0LjUgMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBjLTQ0LjEgMC02Ni4xLTUzLjMtMzUtODQuNSAxNS42LTE1LjYgMTUuNi00MC45IDAtNTYuNnMtNDAuOS0xNS42LTU2LjYgMEMzNDkuMyAxMDYuMSAyOTYgODQuMSAyOTYgNDB6TTE2MCAyMjRhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTYwIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sZ010PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdlbSIsaWNvbjpbNTEyLDUxMixbMTI4MTQyXSwiZjNhNSIsIk0xMTYuNyAzMy44YzQuNS02LjEgMTEuNy05LjggMTkuMy05LjhsMjQwIDBjNy42IDAgMTQuOCAzLjYgMTkuMyA5LjhsMTEyIDE1MmM2LjggOS4yIDYuMSAyMS45LTEuNSAzMC40bC0yMzIgMjU2Yy00LjUgNS0xMSA3LjktMTcuOCA3LjlzLTEzLjItMi45LTE3LjgtNy45bC0yMzItMjU2Yy03LjctOC41LTguMy0yMS4yLTEuNS0zMC40bDExMi0xNTJ6bTM4LjUgMzkuOGMtMy4zIDIuNS00LjIgNy0yLjEgMTAuNUwyMTAuNSAxNzkuOCA2My4zIDE5MmMtNC4xIC4zLTcuMyAzLjgtNy4zIDhzMy4yIDcuNiA3LjMgOGwxOTIgMTZjLjQgMCAuOSAwIDEuMyAwbDE5Mi0xNmM0LjEtLjMgNy4zLTMuOCA3LjMtOHMtMy4yLTcuNi03LjMtOGwtMTQ3LjItMTIuMyA1Ny40LTk1LjZjMi4xLTMuNSAxLjItOC4xLTIuMS0xMC41cy03LjktMi0xMC43IDFMMjU2IDE3Mi4yIDE2NS45IDc0LjZjLTIuOC0zLTcuNC0zLjQtMTAuNy0xeiJdfSx4TXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidG9pbGV0IixpY29uOls0NDgsNTEyLFsxMjg3MDFdLCJmN2Q4IiwiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhsOCAwIDAgMTQ4LjljLTEuOSAxLjQtMy44IDIuOS01LjYgNC40LTE1LjUgMTMuMi0yNi40IDMxLjYtMjYuNCA1NC42IDAgNDYuOSAxNC4zIDg0LjEgMzcgMTEyLjUgMTQuMiAxNy43IDMxLjEgMzEuMyA0OC41IDQxLjhMNjUuNiA0NjkuOWMtMy4zIDkuOC0xLjYgMjAuNSA0LjQgMjguOFM4NS43IDUxMiA5NiA1MTJsMjU2IDBjMTAuMyAwIDE5LjktNC45IDI2LTEzLjNzNy43LTE5LjEgNC40LTI4LjhsLTE5LjgtNTkuNWMxNy40LTEwLjUgMzQuMy0yNC4xIDQ4LjUtNDEuOCAyMi43LTI4LjQgMzctNjUuNSAzNy0xMTIuNSAwLTIzLjEtMTAuOS00MS41LTI2LjQtNTQuNi0xLjgtMS41LTMuNy0zLTUuNi00LjRsMC0xNDguOSA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTNDM3LjMgMCA0MjQgMEwyNCAwek05NiA4MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2ek0yMjQgMjg4Yy04OC40IDAtMTYwLTE0LjMtMTYwLTMyczcxLjYtMzIgMTYwLTMyIDE2MCAxNC4zIDE2MCAzMi03MS42IDMyLTE2MCAzMnoiXX0sYk10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNpbmdsZS1xdW90ZS1sZWZ0IixpY29uOlsxOTIsNTEyLFtdLCJlODFiIiwiTTEyOCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIxNkMwIDE0OS43IDUzLjcgOTYgMTIwIDk2bDggMHoiXX0sdk10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vbmV5LWJpbGxzIixpY29uOls1NzYsNTEyLFtdLCJlMWYzIiwiTTE2MCAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzUyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTYwIDMyem0xNzYgOTZhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTE2MCAxNTJsMC00OGMwLTQuNCAzLjYtOCA4LThsNDggMGM0LjQgMCA4LjEgMy42IDcuNSA4LTMuNiAyOS0yNi42IDUxLjktNTUuNSA1NS41LTQuNCAuNS04LTMuMS04LTcuNXptMCAxMTJjMC00LjQgMy42LTguMSA4LTcuNSAyOSAzLjYgNTEuOSAyNi42IDU1LjUgNTUuNSAuNSA0LjQtMy4xIDgtNy41IDhsLTQ4IDBjLTQuNCAwLTgtMy42LTgtOGwwLTQ4ek01MDQgMTU5LjVjLTI5LTMuNi01MS45LTI2LjYtNTUuNS01NS41LS41LTQuNCAzLjEtOCA3LjUtOGw0OCAwYzQuNCAwIDggMy42IDggOGwwIDQ4YzAgNC40LTMuNiA4LjEtOCA3LjV6TTUxMiAyNjRsMCA0OGMwIDQuNC0zLjYgOC04IDhsLTQ4IDBjLTQuNCAwLTguMS0zLjYtNy41LTggMy42LTI5IDI2LjYtNTEuOSA1NS41LTU1LjUgNC40LS41IDggMy4xIDggNy41ek00OCAxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxMzguNyAwIDE1MkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzOTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI2NHoiXX0seU10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhYmxldC1idXR0b24iLGljb246WzQ0OCw1MTIsW10sImYxMGEiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMjI0IDQwMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LG43PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJlY3RhbmdsZS14bWFyayIsaWNvbjpbNTEyLDUxMixbNjIxNjQsInJlY3RhbmdsZS10aW1lcyIsInRpbWVzLXJlY3RhbmdsZSIsIndpbmRvdy1jbG9zZSJdLCJmNDEwIiwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek0xNjcgMTY3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDU1IDU1IDU1LTU1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNTUgNTUgNTUgNTVjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNTUtNTUtNTUgNTVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTUtNTUtNTUtNTVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdfSx3TXQ9bjcsTU10PW43LHpNdD1uNyxrTXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid3JlbmNoIixpY29uOls1NzYsNTEyLFsxMjgyOTVdLCJmMGFkIiwiTTUwOS40IDk4LjZjNy42LTcuNiAyMC4zLTUuNyAyNC4xIDQuMyA2LjggMTcuNyAxMC41IDM3IDEwLjUgNTcuMSAwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MC0xNy41IDAtMzQuNC0yLjgtNTAuMi04TDE0Ni45IDQ5OC45Yy0yOC4xIDI4LjEtNzMuNyAyOC4xLTEwMS44IDBzLTI4LjEtNzMuNyAwLTEwMS44TDIzMiAyMTAuMmMtNS4yLTE1LjgtOC0zMi42LTgtNTAuMiAwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MCAyMC4xIDAgMzkuNCAzLjcgNTcuMSAxMC41IDEwIDMuOCAxMS44IDE2LjUgNC4zIDI0LjFsLTg4LjcgODguN2MtMyAzLTQuNyA3LjEtNC43IDExLjNsMCA0MS40YzAgOC44IDcuMiAxNiAxNiAxNmw0MS40IDBjNC4yIDAgOC4zLTEuNyAxMS4zLTQuN2w4OC43LTg4Ljd6Il19LGs3PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyYXNoLWNhbiIsaWNvbjpbNDQ4LDUxMixbNjE0NjAsInRyYXNoLWFsdCJdLCJmMmVkIiwiTTEzNi43IDUuOUMxNDEuMS03LjIgMTUzLjMtMTYgMTY3LjEtMTZsMTEzLjkgMGMxMy44IDAgMjYgOC44IDMwLjQgMjEuOUwzMjAgMzIgNDE2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmw5NiAwIDguNy0yNi4xek0zMiAxNDRsMzg0IDAgMCAzMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMwNHptODggNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTkyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xOTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTkyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE5MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sU010PWs3LGxzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YWJsZS1jZWxscyIsaWNvbjpbNDQ4LDUxMixbInRoIl0sImYwMGEiLCJNMzg0IDk2bDAgNjQtNjQgMCAwLTY0IDY0IDB6bTAgMTI4bDAgNjQtNjQgMCAwLTY0IDY0IDB6bTAgMTI4bDAgNjQtNjQgMCAwLTY0IDY0IDB6TTI1NiAyODhsLTY0IDAgMC02NCA2NCAwIDAgNjR6bS02NCA2NGw2NCAwIDAgNjQtNjQgMCAwLTY0em0tNjQtNjRsLTY0IDAgMC02NCA2NCAwIDAgNjR6TTY0IDM1Mmw2NCAwIDAgNjQtNjQgMCAwLTY0em0wLTE5MmwwLTY0IDY0IDAgMCA2NC02NCAwem0xMjggMGwwLTY0IDY0IDAgMCA2NC02NCAwek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdfSxDTXQ9bHNlLExNdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyaWJib24iLGljb246WzM4NCw1MTIsWzEyNzg5NV0sImY0ZDYiLCJNMjM1LjEgMGMzMy40IDAgNjQuNSAxNy40IDgxLjkgNDUuOSAxLjIgMiAxMyAyMS4zIDM1LjMgNTcuOCAyMS4xIDM0LjUgMTguMyA3OC41LTcgMTEwTDI3OC4zIDI5Ny43IDM2NC41IDQwNmM1LjUgNi45IDQuNCAxNi45LTIuNSAyMi41bC04MCA2NGMtNi45IDUuNS0xNyA0LjQtMjIuNS0yLjVMMzguNiAyMTMuOEMxMy4zIDE4Mi4zIDEwLjUgMTM4LjMgMzEuNiAxMDMuOCA1NCA2Ny4yIDY1LjcgNDcuOSA2NyA0NS45IDg0LjQgMTcuNCAxMTUuNCAwIDE0OC45IDBsODYuMyAwek0xOTIgMTg5LjJsNDguNi02MS4yLTk3LjMgMCA0OC42IDYxLjJ6TTc1IDMzNi4ybDg2LjIgMTA3LjgtMzYuOCA0NmMtNS41IDYuOS0xNS42IDgtMjIuNSAyLjVsLTgwLTY0Yy02LjktNS41LTgtMTUuNi0yLjUtMjIuNUw3NSAzMzYuMnoiXX0sVE10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxhbmRtYXJrLWZsYWciLGljb246WzUxMiw1MTIsW10sImU1MWMiLCJNMzUyLTMyTDI0MC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTQ0LTE3NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2IDAgMCAyMjQtNTEuMiAzOC40QzQuNyA0NjAuNCAwIDQ2OS45IDAgNDgwIDAgNDk3LjcgMTQuMyA1MTIgMzIgNTEybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyIDAtMTAuMS00LjctMTkuNi0xMi44LTI1LjZsLTUxLjItMzguNCAwLTIyNCAxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOTIgMCAwLTY0IDgwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2em00OCAyMjRsMCAyMjQtNjQgMCAwLTIyNCA2NCAwem0tMTEyIDBsMCAyMjQtNjQgMCAwLTIyNCA2NCAwem0tMTEyIDBsMCAyMjQtNjQgMCAwLTIyNCA2NCAweiJdfSxjc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXAtZG93bi1sZWZ0LXJpZ2h0IixpY29uOls1MTIsNTEyLFsiYXJyb3dzLWFsdCJdLCJmMGIyIiwiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMxNzkuMSAxMjggMTkyIDEyOGwzMiAwIDAgOTYtOTYgMCAwLTMyYzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlTMTI4IDMzMi45IDEyOCAzMjBsMC0zMiA5NiAwIDAgOTYtMzIgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzMyLjkgMzg0IDMyMCAzODRsLTMyIDAgMC05NiA5NiAwIDAgMzJjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOWw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzM4NCAxNzkuMSAzODQgMTkybDAgMzItOTYgMCAwLTk2IDMyIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtNjQtNjR6Il19LF9NdD1jc2UsQU10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhci1zaWRlIixpY29uOls2NDAsNTEyLFsxMjg2NjNdLCJmNWU0IiwiTTE0NyAxMDYuN2wtMjkuOCA4NS4zIDEyMi45IDAgMC05Ni03Ny45IDBjLTYuOCAwLTEyLjkgNC4zLTE1LjEgMTAuN3pNNDguNiAxOTMuOUw4Ni41IDg1LjZDOTcuOCA1My41IDEyOC4xIDMyIDE2Mi4xIDMyTDM2MCAzMmMyNS4yIDAgNDguOSAxMS45IDY0IDMybDk2LjIgMTI4LjNDNTg3LjEgMTk2LjUgNjQwIDI1Mi4xIDY0MCAzMjBsMCAxNmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTYuNCAwYy00IDQ0LjktNDEuNyA4MC04Ny42IDgwcy04My42LTM1LjEtODcuNi04MGwtMTQ0LjcgMGMtNCA0NC45LTQxLjcgODAtODcuNiA4MHMtODMuNi0zNS4xLTg3LjYtODBsLS40IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtODBjMC0zMC4xIDIwLjctNTUuMyA0OC42LTYyLjF6TTQ0MCAxOTJsLTY3LjItODkuNmMtMy00LTcuOC02LjQtMTIuOC02LjRsLTcyIDAgMCA5NiAxNTIgMHpNMTUyIDQzMmE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6bTM2MC00MGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAweiJdfSxkc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJhc2gtYXJyb3ctdXAiLGljb246WzQ0OCw1MTIsWyJ0cmFzaC1yZXN0b3JlIl0sImY4MjkiLCJNMTY3LjEtMTZsMTEzLjkgMGMxMy44IDAgMjYgOC44IDMwLjQgMjEuOUwzMjAgMzIgNDE2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmw5NiAwIDguNy0yNi4xQzE0MS4xLTcuMiAxNTMuMy0xNiAxNjcuMS0xNnpNMzIgMTQ0bDM4NCAwLTIxLjEgMzIzLjFDMzkzLjMgNDkyLjQgMzcyLjMgNTEyIDM0NyA1MTJMMTAxIDUxMmMtMjUuMyAwLTQ2LjMtMTkuNi00Ny45LTQ0LjlMMzIgMTQ0em0yMDkgNzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC03MiA3MmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDMxLTMxIDAgMTAyLjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwMi4xIDMxIDMxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzItNzJ6Il19LCRNdD1kc2UsRE10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxpZmUtcmluZyIsaWNvbjpbNTEyLDUxMixbXSwiZjFjZCIsIk0zNjcuMiA0MTIuNUMzMzUuOSA0MzQuOSAyOTcuNSA0NDggMjU2IDQ0OHMtNzkuOS0xMy4xLTExMS4yLTM1LjVsNTgtNThjMTUuOCA4LjYgMzQgMTMuNSA1My4zIDEzLjVzMzcuNC00LjkgNTMuMy0xMy41bDU4IDU4em05MC43IC44YzMzLjgtNDMuNCA1NC05OCA1NC0xNTcuM1M0OTEuOCAxNDIuMSA0NTggOTguN2M5LTEyLjUgNy45LTMwLjEtMy40LTQxLjNTNDI1LjggNDUgNDEzLjMgNTRDMzY5LjkgMjAuMiAzMTUuMyAwIDI1NiAwUzE0Mi4xIDIwLjIgOTguNyA1NGMtMTIuNS05LTMwLjEtNy45LTQxLjMgMy40UzQ1IDg2LjIgNTQgOTguN0MyMC4yIDE0Mi4xIDAgMTk2LjcgMCAyNTZTMjAuMiAzNjkuOSA1NCA0MTMuM2MtOSAxMi41LTcuOSAzMC4xIDMuNCA0MS4zUzg2LjIgNDY3IDk4LjcgNDU4YzQzLjQgMzMuOCA5OCA1NCAxNTcuMyA1NHMxMTMuOS0yMC4yIDE1Ny4zLTU0YzEyLjUgOSAzMC4xIDcuOSA0MS4zLTMuNHMxMi40LTI4LjggMy40LTQxLjN6bS00NS41LTQ2LjFsLTU4LTU4YzguNi0xNS44IDEzLjUtMzQgMTMuNS01My4zcy00LjktMzcuNC0xMy41LTUzLjNsNTgtNThDNDM0LjkgMTc2LjEgNDQ4IDIxNC41IDQ0OCAyNTZzLTEzLjEgNzkuOS0zNS41IDExMS4yek0zNjcuMiA5OS41bC01OCA1OGMtMTUuOC04LjYtMzQtMTMuNS01My4zLTEzLjVzLTM3LjQgNC45LTUzLjMgMTMuNWwtNTgtNThDMTc2LjEgNzcuMSAyMTQuNSA2NCAyNTYgNjRzNzkuOSAxMy4xIDExMS4yIDM1LjV6TTE1Ny41IDMwOS4zbC01OCA1OEM3Ny4xIDMzNS45IDY0IDI5Ny41IDY0IDI1NnMxMy4xLTc5LjkgMzUuNS0xMTEuMmw1OCA1OGMtOC42IDE1LjgtMTMuNSAzNC0xMy41IDUzLjNzNC45IDM3LjQgMTMuNSA1My4zek0yMDggMjU2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6Il19LEVNdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb3B5cmlnaHQiLGljb246WzUxMiw1MTIsWzE2OV0sImYxZjkiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwNS4xIDMwNi45YzI4LjEgMjguMSA3My43IDI4LjEgMTAxLjggMCA5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjljLTQ2LjkgNDYuOS0xMjIuOCA0Ni45LTE2OS43IDBzLTQ2LjktMTIyLjggMC0xNjkuNyAxMjIuOC00Ni45IDE2OS43IDBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwcy0yOC4xIDczLjcgMCAxMDEuOHoiXX0sTk10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtcHJlc2NyaXB0aW9uIixpY29uOlszODQsNTEyLFtdLCJmNTcyIiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek04OCAxOTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MCAyMi41IDAgNTguNCA1NS0zMy40IDMxLjZjLTkuNiA5LjEtMTAuMSAyNC4zLS45IDMzLjlzMjQuMyAxMC4xIDMzLjkgLjlsMzUuNC0zMy41IDM1LjYgMzMuNWM5LjcgOS4xIDI0LjggOC42IDMzLjktMXM4LjYtMjQuOC0xLTMzLjlsLTMzLjYtMzEuNiAzMy42LTMxLjhjOS42LTkuMSAxMC4xLTI0LjMgLjktMzMuOXMtMjQuMy0xMC4xLTMzLjktLjlsLTM1LjcgMzMuNy00MC45LTM4LjVjMTIuOS0xMS43IDIxLjEtMjguNiAyMS4xLTQ3LjUgMC0zNS4zLTI4LjctNjQtNjQtNjRsLTU2IDB6bTMyIDgwbC04IDAgMC0zMiAzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0yNCAweiJdfSxQTXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZXJhc2VyIixpY29uOls1NzYsNTEyLFtdLCJmMTJkIiwiTTE3OC41IDQxNmwxMjMgMCA2NS4zLTY1LjMtMTczLjUtMTczLjUtMTI2LjcgMTI2LjcgMTEyIDExMnpNMjI0IDQ4MGwtNDUuNSAwYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0wxNyAzNDVDNi4xIDMzNC4xIDAgMzE5LjQgMCAzMDRzNi4xLTMwLjEgMTctNDFMMjYzIDE3QzI3My45IDYuMSAyODguNiAwIDMwNCAwczMwLjEgNi4xIDQxIDE3TDUyNyAxOTljMTAuOSAxMC45IDE3IDI1LjYgMTcgNDFzLTYuMSAzMC4xLTE3IDQxbC0xMzUgMTM1IDEyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yODggMHoiXX0sZnNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXJnbGFzcy1zdGFydCIsaWNvbjpbMzg0LDUxMixbImhvdXJnbGFzcy0xIl0sImYyNTEiLCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwwIDExYzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMWw2Ny45IDY3LjktNjcuOSA2Ny45QzQ4LjkgMzUzLjkgMzIgMzk0LjYgMzIgNDM3bDAgMTFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMWMwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFsLTY3LjktNjcuOSA2Ny45LTY3LjljMzAtMzAgNDYuOS03MC43IDQ2LjktMTEzLjFsMC0xMWMxNy43IDAgMzItMTQuMyAzMi0zMlMzNjkuNyAwIDM1MiAwTDMyIDB6TTI4OCA0MzdsMCAxMS0xOTIgMCAwLTExYzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45bDY3LjktNjcuOSA2Ny45IDY3LjljMTggMTggMjguMSA0Mi40IDI4LjEgNjcuOXoiXX0sSU10PWZzZSx1c2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWxlZnQiLGljb246WzUxMiw1MTIsWzYxODQwLCJhcnJvdy1hbHQtY2lyY2xlLWxlZnQiXSwiZjM1OSIsIk01MTIgMjU2YTI1NiAyNTYgMCAxIDAgLTUxMiAwIDI1NiAyNTYgMCAxIDAgNTEyIDB6TTEyNC43IDI0NC43bDEwNC0xMDRjNC42LTQuNiAxMS41LTUuOSAxNy40LTMuNXM5LjkgOC4zIDkuOSAxNC44bDAgNTYgOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgNTZjMCA2LjUtMy45IDEyLjMtOS45IDE0LjhzLTEyLjkgMS4xLTE3LjQtMy41bC0xMDQtMTA0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnoiXX0sRk10PXVzZSxPTXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY3J1emVpcm8tc2lnbiIsaWNvbjpbNDQ4LDUxMixbXSwiZTE1MiIsIk0yNDAgOTZjLTg4LjQgMC0xNjAgNzEuNi0xNjAgMTYwIDAgNzEuNiA0Ny4xIDEzMi4zIDExMiAxNTIuN0wxOTIgMjU2YzAtMTMuMyAxMC43LTI0IDI0LTI0IDEyLjggMCAyMy4zIDEwLjEgMjQgMjIuNyAxNS41LTkuNSAzMy41LTE0LjcgNTIuMy0xNC43bDExLjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEuOCAwYy0xOC44IDAtMzYuMSAxMC00NS40IDI2LjMtNC41IDcuOS02LjkgMTYuOC02LjkgMjUuOWwwIDc1LjhjNDIuNSAwIDgxLjEtMTYuNiAxMDkuOC00My42IDEyLjktMTIuMSAzMy4xLTExLjUgNDUuMiAxLjNzMTEuNSAzMy4xLTEuMyA0NS4yQzM1My43IDQ1Ni44IDI5OS41IDQ4MCAyNDAgNDgwIDExNi4zIDQ4MCAxNiAzNzkuNyAxNiAyNTZTMTE2LjMgMzIgMjQwIDMyYzU5LjUgMCAxMTMuNyAyMy4yIDE1My43IDYxLjEgMTIuOSAxMi4xIDEzLjQgMzIuNCAxLjMgNDUuMnMtMzIuNCAxMy40LTQ1LjIgMS4zQzMyMS4xIDExMi42IDI4Mi41IDk2IDI0MCA5NnoiXX0sQk10PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNtb2tpbmciLGljb246WzU3Niw1MTIsWzEyODY4NF0sImY0OGQiLCJNMzYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxOWMwIDQwLjMgMTYgNzkgNDQuNSAxMDcuNWwyMSAyMUM0NjkgMTkxIDQ4MCAyMTcuNCA0ODAgMjQ1bDAgMTljMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xOWMwLTE0LjktNS45LTI5LjEtMTYuNC0zOS42bC0yMS0yMUMzNTcuMSAxNDYuOSAzMzYgOTYgMzM2IDQzbDAtMTljMC0xMy4zIDEwLjctMjQgMjQtMjR6TTU1MiAyODhjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTljMC00MC4zLTE2LTc5LTQ0LjUtMTA3LjVsLTIxLTIxQzQ0MyA5NyA0MzIgNzAuNiA0MzIgNDNsMC0xOWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTljMCAxNC45IDUuOSAyOS4xIDE2LjQgMzkuNmwyMSAyMUM1NTQuOSAxNDEuMSA1NzYgMTkyIDU3NiAyNDVsMCAxOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHpNMzIwIDQ0OGw5NiAwIDAtMzItOTYgMCAwIDMyek0wIDQxNmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMnptNTc2LTQwbDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTEyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il19LHBzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtcG9sbC12ZXJ0aWNhbCIsaWNvbjpbNDQ4LDUxMixbInBvbGwiXSwiZjY4MSIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem01NiAxOTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMTJjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTE4NCA4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OHpNMjI0IDEyOGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDIwOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTIwOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXX0sUk10PXBzZSxITXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWNpcmNsZS1taW51cyIsaWNvbjpbNjQwLDUxMixbXSwiZTU0MCIsIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTY0IDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxMjggMGM4LjggMCAxNiA3LjIgMTYgMTZ6Il19LHFNdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiaW9oYXphcmQiLGljb246WzU3Niw1MTIsWzk3NjNdLCJmNzgwIiwiTTI2MCAxMi42YzAtOC4zLTcuNi0xNC41LTE1LjUtMTIuMS02MC45IDE4LjgtMTA1LjEgNzUuOC0xMDUuMSAxNDMuMSAwIDI1LjEgNi4xIDQ4LjcgMTcgNjkuNS0yMSAxLjgtNDIgOC4yLTYxLjUgMTkuNS01Ny45IDMzLjYtODQuOCAxMDAuMi03MC45IDE2Mi41IDEuOSA4LjQgMTEuNCAxMiAxOC45IDcuNiA1LTIuOSA3LjYtOC42IDcuMS0xNC40LS4zLTMuMy0uNC02LjYtLjQtMTAuMSAwLTEyMy41IDE4NC40LTEyMy41IDE4NC40IDAgMCA4OC40LTk0LjUgMTEzLjYtMTQ4LjIgNzUuNC00LjUtMy4yLTEwLjUtMy45LTE1LjMtMS4xLTcgNC4xLTguNiAxMy42LTIuNyAxOS4xIDQ2LjYgNDMuOCAxMTggNTMuOSAxNzYuMSAyMC4yIDE3LjktMTAuNCAzMi44LTIzLjkgNDQuNS0zOS40IDExLjcgMTUuNiAyNi42IDI5LjEgNDQuNSAzOS40IDU4LjEgMzMuNyAxMjkuNSAyMy42IDE3Ni4xLTIwLjIgNS45LTUuNSA0LjMtMTUuMS0yLjctMTkuMS00LjgtMi44LTEwLjgtMi4xLTE1LjMgMS4xLTUzLjcgMzguMi0xNDguMiAxMy0xNDguMi03NS40IDAtMTIzLjUgMTg0LjQtMTIzLjUgMTg0LjQgMCAwIDMuNC0uMSA2LjgtLjQgMTAuMS0uNSA1LjggMi4xIDExLjUgNy4xIDE0LjQgNy40IDQuMyAxNyAuOCAxOC45LTcuNiAxMy45LTYyLjItMTMtMTI4LjktNzAuOS0xNjIuNS0xOS41LTExLjMtNDAuNC0xNy43LTYxLjUtMTkuNSAxMC45LTIwLjggMTctNDQuNCAxNy02OS41IDAtNjcuMy00NC4yLTEyNC4zLTEwNS4xLTE0My4xLTcuOS0yLjQtMTUuNSAzLjgtMTUuNSAxMi4xIDAgNS45IDQgMTEgOS41IDEzLjIgODMuNCAzMy42IDcwLjggMTc4LjQtMzcuOCAxNzguNFMxNjcuMSA1OS40IDI1MC41IDI1LjhjNS41LTIuMiA5LjUtNy4zIDkuNS0xMy4yek0yNDguNCAyODhhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNNDM1IDMxNy43Yy0xNi4yIDAtMzEuNCA1LjUtNDIuMSAxNS0xMC4xIDkuMS0xOC4xIDIzLjQtMTguMSA0NS42IDAgMjEuMSA3LjIgMzUgMTYuNSA0NC4xIDMyLjItMjQuNiA1NS41LTYwLjUgNjMuOS0xMDEuOC02LjMtMS45LTEzLjItMy0yMC4yLTN6TTIwMiAzNzguM2MwLTIyLjMtOC0zNi42LTE4LjEtNDUuNi0xMC43LTkuNi0yNS45LTE1LTQyLjEtMTUtNyAwLTEzLjkgMS0yMC4yIDMgOC40IDQxLjMgMzEuNiA3Ny4yIDYzLjkgMTAxLjggOS40LTkuMSAxNi41LTIzLjEgMTYuNS00NC4yem00MS4yLTIyNC4zYzkgMTAuMiAyMy4yIDE4LjIgNDUuMiAxOC4yczM2LjItOCA0NS4yLTE4LjJjNi43LTcuNiAxMS41LTE3LjUgMTMuNi0yOC40LTE4LjMtNi44LTM4LjItMTAuNS01OC44LTEwLjVzLTQwLjUgMy43LTU4LjggMTAuNWMyLjIgMTAuOSA2LjkgMjAuOCAxMy42IDI4LjV6Il19LGhzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiZWxsLWNvbmNpZXJnZSIsaWNvbjpbNTEyLDUxMixbMTI4NzE4LCJjb25jaWVyZ2UtYmVsbCJdLCJmNTYyIiwiTTIxNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNiAwIDAgMzMuM0MxMjQuOCAxNTYuNyA0MC4yIDI0My43IDMyLjYgMzUybDQ0Ni45IDBDNDcxLjggMjQzLjcgMzg3LjIgMTU2LjcgMjgwIDE0NS4zbDAtMzMuMyAxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwek0yNCA0MDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMjQgNDAweiJdfSxWTXQ9aHNlLFVNdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJydWxlci1ob3Jpem9udGFsIixpY29uOls1NzYsNTEyLFtdLCJmNTQ3IiwiTTQ4IDM4NGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAxNzZjMC0yNi41IDIxLjUtNDggNDgtNDhsMjQgMCAwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTA0IDQ4IDAgMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzIgNDggMCAwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTA0IDQ4IDAgMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzIgNDggMCAwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTA0IDI0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjBjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggMzg0eiJdfSxqTXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG9yc2UiLGljb246WzU3Niw1MTIsWzEyODAxNF0sImY2ZjAiLCJNNDQ4IDIzOC4xbDAtNzguMSAxNiAwIDkuOCAxOS42YzEyLjUgMjUuMSA0Mi4yIDM2LjQgNjguMyAyNiAyMC41LTguMiAzMy45LTI4IDMzLjktNTAuMUw1NzYgODBjMC0xOS4xLTguNC0zNi4zLTIxLjctNDhsNS43IDBjOC44IDAgMTYtNy4yIDE2LTE2UzU2OC44IDAgNTYwIDBMNDQ4IDBDMzc3LjMgMCAzMjAgNTcuMyAzMjAgMTI4bC0xNzEuMiAwQzExOC4xIDEyOCA5MS4yIDE0NC4zIDc2LjMgMTY4LjggMzMuMiAxNzQuNSAwIDIxMS40IDAgMjU2bDAgNTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTU2YzAtMTMuNCA2LjYtMjUuMiAxNi43LTMyLjUgMS42IDEzIDYuMyAyNS40IDEzLjYgMzYuNGwyOC4yIDQyLjRjOC4zIDEyLjQgNi40IDI4LjctMS4yIDQxLjYtMTYuNSAyOC0yMC42IDYyLjItMTAgOTMuOWwxNy41IDUyLjRjNC40IDEzLjEgMTYuNiAyMS45IDMwLjQgMjEuOWwzMy43IDBjMjEuOCAwIDM3LjMtMjEuNCAzMC40LTQyLjFsLTIwLjgtNjIuNWMtMi4xLTYuNC0uNS0xMy40IDQuMy0xOC4ybDEyLjctMTIuN2MxMy4yLTEzLjIgMjAuNi0zMS4xIDIwLjYtNDkuNyAwLTIuMy0uMS00LjYtLjMtNi45bDg0IDI0YzQuMSAxLjIgOC4yIDIuMSAxMi4zIDIuOEwzMjAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNjQuM2MxOS4yLTE5LjIgMzEuNS00NS43IDMyLTc1LjdsMCAwIDAtMS45ek00OTYgNjRhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyeiJdfSxXTXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FsZW5kYXIiLGljb246WzQ0OCw1MTIsWzEyODE5NywxMjgxOThdLCJmMTMzIiwiTTEyOCAwQzExMC4zIDAgOTYgMTQuMyA5NiAzMmwwIDMyLTMyIDBDMjguNyA2NCAwIDkyLjcgMCAxMjhsMCA0OCA0NDggMCAwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0zMiAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMi0xMjggMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0wIDIyNEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5Mi00NDggMHoiXX0sR010PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmRzLWhvbGRpbmctY2hpbGQiLGljb246WzY0MCw1MTIsW10sImU0ZmEiLCJNMzIwLTMyYTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHpNNDAgNjRjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAxNjAuMmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2w1MS4xIDUxLjFjOC4zIDguMyAyMS4zIDkuNiAzMSAzLjEgMTIuOS04LjYgMTQuNy0yNi45IDMuNy0zNy44LTcuMy03LjMtMjMuMS0yMy4xLTQ3LjItNDcuMi0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwYzI0LjEgMjQuMSAzOS45IDM5LjkgNDcuMiA0Ny4ybDAgMCAyNS4zIDI1LjNjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMmwwIDc4LjljMCAyNi41LTIxLjUgNDgtNDggNDhsLTY2LjcgMGMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdMMjguMSAzOTMuNEMxMC4xIDM3NS40IDAgMzUxIDAgMzI1LjVMMCAxMDRDMCA4MS45IDE3LjkgNjQgNDAgNjR6bTU2MCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMjIxLjVjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlMNTEyIDQ5My4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDQwMCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNzguOWMwLTI5LjcgMTEuOC01OC4yIDMyLjgtNzkuMmwyNS4zLTI1LjMgMCAwYzcuMy03LjMgMjMuMS0yMy4xIDQ3LjItNDcuMiAxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy0yNC4xIDI0LjEtMzkuOSAzOS45LTQ3LjIgNDcuMi0xMSAxMS05LjIgMjkuMiAzLjcgMzcuOCA5LjcgNi41IDIyLjcgNS4yIDMxLTMuMWw1MS4xLTUxLjFjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1NjAgMTA0YzAtMjIuMSAxNy45LTQwIDQwLTQwek0zODQuNSAxNDlsLTE5LjgtMTYuNyAxMS4xIDg4LjhjMS42IDEzLjItNy43IDI1LjEtMjAuOCAyNi44cy0yNS4xLTcuNy0yNi44LTIwLjhsLTQuNC0zNS03LjYgMC00LjQgMzVjLTEuNiAxMy4yLTEzLjYgMjIuNS0yNi44IDIwLjhzLTIyLjUtMTMuNi0yMC44LTI2LjhsMTEuMS04OC44LTE5LjggMTYuN2MtMTAuMSA4LjYtMjUuMyA3LjMtMzMuOC0yLjhzLTcuMy0yNS4zIDIuOC0zMy44bDI3LjktMjMuNkMyNzEuMyA3Mi44IDI5NS4zIDY0IDMyMCA2NHM0OC43IDguOCA2Ny42IDI0LjdsMjcuOSAyMy42YzEwLjEgOC42IDExLjQgMjMuNyAyLjggMzMuOHMtMjMuNyAxMS40LTMzLjggMi44eiJdfSxZTXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaXRhbGljIixpY29uOlszODQsNTEyLFtdLCJmMDMzIiwiTTEyOCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNTguNyAwLTEzMy4zIDMyMCA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw1OC43IDAgMTMzLjMtMzIwLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxaTXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToia2hhbmRhIixpY29uOls1MTIsNTEyLFs5NzcyXSwiZjY2ZCIsIk0yNDAuNyA4YzguOS03LjQgMjEuOC03LjQgMzAuNyAwbDM3LjggMzEuNWM4LjcgNy4zIDExLjEgMTkuNiA2IDI5LjYtMS4yIDIuNC0yLjggNS41LTQuNiA5LjIgMzQuMiAxOS4yIDU3LjMgNTUuOCA1Ny4zIDk3LjhzLTIzLjEgNzguNi01Ny4zIDk3LjhjMS44IDMuNyAzLjMgNi44IDQuNiA5LjIgNS4xIDEwIDIuNyAyMi4zLTYgMjkuNmwtMzcuMiAzMSAwIDE5LjhjMjIuOS0xNS43IDQ4LjQtMzMuMyA3Ni43LTUyLjcgNDIuOC0yOS40IDY4LjQtNzggNjguNC0xMzBsMC0xMS4xYzAtMjMuOS03LjEtNDcuMy0yMC40LTY3LjItNS4xLTcuNy00LjYtMTcuOCAxLjctMjQuNiA2LjYtNy4xIDE3LjItOC4xIDI1LjItMi44IDI3LjUgMTguMSA4OS40IDY3LjUgODkuNCAxNDkuMSAwIDQ2LjUtMjAuMiA4OC42LTQxLjggMTIwLjQtMjEuNiAzMi00NS42IDU1LTU1LjMgNjMuOC03LjggNy4xLTE5IDcuOS0yNy42IDNsLTcwLjgtNDAuMy0zMi43IDIyLjUgNDUuNSAzMS4zYzEuOC0uNCAzLjctLjcgNS43LS43IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0xMi4yIDAtMjIuMy05LjEtMjMuOC0yMWwtNDAuMi0yNy42IDAgMjguOWM5LjYgNS41IDE2IDE1LjkgMTYgMjcuNyAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTExLjggNi40LTIyLjIgMTYtMjcuN2wwLTI4LjEtNDAuMyAyNy43Yy0xLjggMTEuNC0xMS44IDIwLjEtMjMuNyAyMC4xLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMi4yIDAgNC40IC4zIDYuNSAuOWw0NS44LTMxLjUtMzIuNy0yMi41LTcwLjggNDAuM2MtOC43IDQuOS0xOS44IDQuMS0yNy42LTMtOS43LTguOC0zMy43LTMxLjktNTUuMy02My44LTIxLjUtMzEuOC00MS44LTczLjktNDEuOC0xMjAuNCAwLTgxLjcgNjEuOS0xMzEuMSA4OS40LTE0OS4xIDguMS01LjMgMTguNi00LjMgMjUuMiAyLjggNi40IDYuOSA2LjggMTcgMS43IDI0LjYtMTMuMyAxOS45LTIwLjQgNDMuMy0yMC40IDY3LjJsMCAxMS4xYzAgNTEuOSAyNS42IDEwMC42IDY4LjQgMTMwIDI4LjQgMTkuNiA1My43IDM2LjkgNzUuNiA1MmwwLTE5LjEtMzcuMi0zMWMtOC43LTcuMy0xMS4xLTE5LjYtNi0yOS42IDEuMi0yLjQgMi44LTUuNSA0LjYtOS4yLTM0LjItMTkuMi01Ny4zLTU1LjgtNTcuMy05Ny44czIzLjEtNzguNiA1Ny4zLTk3LjhjLTEuOC0zLjctMy4zLTYuOC00LjYtOS4yLTUuMS0xMC0yLjctMjIuMyA2LTI5LjZMMjQwLjcgOHpNMjIwLjMgMTIyLjljLTE3IDExLjUtMjguMiAzMS0yOC4yIDUzLjFzMTEuMiA0MS42IDI4LjIgNTMuMWM2LjgtMTkuMiAxMS44LTM4LjQgMTEuOC01My4xcy00LjktMzMuOS0xMS44LTUzLjF6bTcxLjUgMTA2LjJjMTctMTEuNSAyOC4yLTMxIDI4LjItNTMuMXMtMTEuMi00MS42LTI4LjItNTMuMWMtNi44IDE5LjItMTEuOCAzOC40LTExLjggNTMuMXM0LjkgMzMuOSAxMS44IDUzLjF6Il19LG1zZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWZyb3duLW9wZW4iLGljb246WzUxMiw1MTIsWzEyODU1MCwiZnJvd24tb3BlbiJdLCJmNTdhIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTE4Mi40IDM4Mi41Yy0xMi40IDUuMi0yNi41LTQuMS0yMS4xLTE2LjQgMTYtMzYuNiA1Mi40LTYyLjEgOTQuOC02Mi4xczc4LjggMjUuNiA5NC44IDYyLjFjNS40IDEyLjMtOC43IDIxLjYtMjEuMSAxNi40LTIyLjQtOS41LTQ3LjQtMTQuOC03My43LTE0LjhzLTUxLjMgNS4zLTczLjcgMTQuOHoiXX0sWE10PW1zZSxGVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVjayIsaWNvbjpbNDQ4LDUxMixbMTAwMDMsMTAwMDRdLCJmMDBjIiwiTTQzNC44IDcwLjFjMTQuMyAxMC40IDE3LjUgMzAuNCA3LjEgNDQuN2wtMjU2IDM1MmMtNS41IDcuNi0xNCAxMi4zLTIzLjQgMTMuMXMtMTguNS0yLjctMjUuMS05LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTAxLjUgMTAxLjUgMjM0LTMyMS43YzEwLjQtMTQuMyAzMC40LTE3LjUgNDQuNy03LjF6Il19LFFNdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaW5nZXJwcmludCIsaWNvbjpbNTEyLDUxMixbXSwiZjU3NyIsIk00OCAyNTZjMC0xMTQuOSA5My4xLTIwOCAyMDgtMjA4IDYzLjEgMCAxMTkuNiAyOC4xIDE1Ny44IDcyLjUgOC42IDEwLjEgMjMuOCAxMS4yIDMzLjggMi42czExLjItMjMuOCAyLjYtMzMuOEM0MDMuMyAzNC42IDMzMy43IDAgMjU2IDAgMTE0LjYgMCAwIDExNC42IDAgMjU2bDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwem00NTguNS01Mi45Yy0yLjctMTMtMTUuNS0yMS4zLTI4LjQtMTguNXMtMjEuMyAxNS41LTE4LjUgMjguNGMyLjkgMTMuOSA0LjUgMjguMyA0LjUgNDMuMWwwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MGMwLTE4LjEtMS45LTM1LjgtNS41LTUyLjl6TTI1NiA4MGMtMTkgMC0zNy40IDMtNTQuNSA4LjYtMTUuMiA1LTE4LjcgMjMuNy04LjMgMzUuOSA3LjEgOC4zIDE4LjggMTAuOCAyOS40IDcuOSAxMC42LTIuOSAyMS44LTQuNCAzMy40LTQuNCA3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDI0LjljMCAyNS4yLTEuNSA1MC4zLTQuNCA3NS4zLTEuNyAxNC42IDkuNCAyNy44IDI0LjIgMjcuOCAxMS44IDAgMjEuOS04LjYgMjMuMy0yMC4zIDMuMy0yNy40IDUtNTUgNS04Mi43bDAtMjQuOWMwLTk3LjItNzguOC0xNzYtMTc2LTE3NnpNMTUwLjcgMTQ4LjdjLTkuMS0xMC42LTI1LjMtMTEuNC0zMy45LS40LTIzLjEgMjkuOC0zNi44IDY3LjEtMzYuOCAxMDcuN2wwIDI0LjljMCAyNC4yLTIuNiA0OC40LTcuOCA3MS45LTMuNCAxNS42IDcuOSAzMS4xIDIzLjkgMzEuMSAxMC41IDAgMTkuOS03IDIyLjItMTcuMyA2LjQtMjguMSA5LjctNTYuOCA5LjctODUuOGwwLTI0LjljMC0yNy4yIDguNS01Mi40IDIyLjktNzMuMSA3LjItMTAuNCA4LTI0LjYtLjItMzQuMnpNMjU2IDE2MGMtNTMgMC05NiA0My05NiA5NmwwIDI0LjljMCAzNS45LTQuNiA3MS41LTEzLjggMTA2LjEtMy44IDE0LjMgNi43IDI5IDIxLjUgMjkgOS41IDAgMTcuOS02LjIgMjAuNC0xNS40IDEwLjUtMzkgMTUuOS03OS4yIDE1LjktMTE5LjdsMC0yNC45YzAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJsMCAyNC45YzAgMzYuMy0zLjUgNzIuNC0xMC40IDEwNy45LTIuNyAxMy45IDcuNyAyNy4yIDIxLjggMjcuMiAxMC4yIDAgMTktNyAyMS0xNyA3LjctMzguOCAxMS42LTc4LjMgMTEuNi0xMTguMWwwLTI0LjljMC01My00My05Ni05Ni05NnptMjQgOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNC45YzAgNTkuOS0xMSAxMTkuMy0zMi41IDE3NS4ybC01LjkgMTUuM2MtNC44IDEyLjQgMS40IDI2LjMgMTMuOCAzMXMyNi4zLTEuNCAzMS0xMy44bDUuOS0xNS4zQzI2Ny45IDQxMS45IDI4MCAzNDYuNyAyODAgMjgwLjlsMC0yNC45eiJdfSxLTXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hhcmdpbmctc3RhdGlvbiIsaWNvbjpbNTc2LDUxMixbXSwiZjVlNyIsIk02NCA2NEM2NCAyOC43IDkyLjcgMCAxMjggMEwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDEyYzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMTI3LjdjLTMyLjUtMTAuMi01Ni00MC41LTU2LTc2LjNsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMCAwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OCAzMiAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4IDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCAzNS44LTIzLjUgNjYuMS01NiA3Ni4zTDUyMCAzODBjMCAzNy42LTMwLjQgNjgtNjggNjhzLTY4LTMwLjQtNjgtNjhsMC0xMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwwIDEyOS40YzkuMyAzLjMgMTYgMTIuMiAxNiAyMi42IDAgMTMuMy0xMC43IDI0LTI0IDI0TDcyIDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMC41IDYuNy0xOS4zIDE2LTIyLjZMNjQgNjR6bTgyLjcgMTI1LjdsMzkgMC0yMC45IDY2LjljLTIuNCA3LjYgMy4zIDE1LjQgMTEuMyAxNS40IDIuOSAwIDUuNi0xIDcuOC0yLjlsOTQuNi04MmMzLjEtMi43IDQuOS02LjYgNC45LTEwLjcgMC03LjgtNi4zLTE0LjEtMTQuMS0xNC4xbC0zOSAwIDIwLjktNjYuOWMyLjQtNy42LTMuMy0xNS40LTExLjMtMTUuNC0yLjkgMC01LjYgMS03LjggMi45bC05NC42IDgyYy0zLjEgMi43LTQuOSA2LjYtNC45IDEwLjcgMCA3LjggNi4zIDE0LjEgMTQuMSAxNC4xeiJdfSxKTXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1sb2NrIixpY29uOls1NzYsNTEyLFtdLCJmNTAyIiwiTTIyNCA4YTEyMCAxMjAgMCAxIDEgMCAyNDAgMTIwIDEyMCAwIDEgMSAwLTI0MHpNMTk0LjMgMzA0bDU5LjQgMGMyOS43IDAgNTcuNyA3LjMgODIuMyAyMC4xbDAgNC4zYy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUw0NS43IDUxMkMyOS4zIDUxMiAxNiA0OTguNyAxNiA0ODIuMyAxNiAzODMuOCA5NS44IDMwNCAxOTQuMyAzMDR6bTMwMS43IC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNMzUyIDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXX0sZ3NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vYmlsZS1zY3JlZW4tYnV0dG9uIixpY29uOlszODQsNTEyLFsibW9iaWxlLWFsdCJdLCJmM2NkIiwiTTE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBMMzA0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMODAgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwxNiA2NHptNjQgMGwwIDMwNCAyMjQgMCAwLTMwNC0yMjQgMHpNMTkyIDQ3MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6Il19LGV6dD1nc2UsdHp0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFuY2hvci1jaXJjbGUtY2hlY2siLGljb246WzY0MCw1MTIsW10sImU0YWEiLCJNMzIwIDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6TTI4OCAwYy01MyAwLTk2IDQzLTk2IDk2IDAgNDEuOCAyNi43IDc3LjQgNjQgOTAuNWwwIDI1Ny45Yy02Mi45LTE0LjMtMTEwLjItNjkuNy0xMTEuOS0xMzYuNWwxNi4xIDE0LjFjMTAgOC43IDI1LjEgNy43IDMzLjktMi4zczcuNy0yNS4xLTIuMy0zMy45bC02NC01NmMtOS03LjktMjIuNi03LjktMzEuNiAwbC02NCA1NmMtMTAgOC43LTExIDIzLjktMi4zIDMzLjlzMjMuOSAxMSAzMy45IDIuM0w4MCAzMDcuOWMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMTYuNiAwIDMyLjctMS45IDQ4LjItNS42LTIwLjMtMzAuNS0zMi4yLTY3LTMyLjItMTA2LjQgMC0yNy4zIDUuNy01My4zIDE2LTc2LjlsMC0xMzYuNmMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdfSx4c2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXdhbGtpbmctd2l0aC1jYW5lIixpY29uOls1NzYsNTEyLFsiYmxpbmQiXSwiZjI5ZCIsIk0yMjQtMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE2MCAyMDUuM2wtMjIuNiAyMi42Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNy41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzcuNWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWwzNC40LTM0LjRjMjMuMi0yMy4yIDU0LjYtMzYuMiA4Ny4zLTM2LjIgMzYuMSAwIDcwLjMgMTUuOCA5My44IDQzLjFsNjguNiA4MGMxMS41IDEzLjQgOS45IDMzLjYtMy41IDQ1LjFzLTMzLjYgOS45LTQ1LjEtMy41bC01NS43LTY1IDAgMTE4LjYgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zbDEyLjYgODguMWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMmwtMTIuNi04OC4xYy0xLjEtNy43LTUtMTQuNy0xMC45LTE5LjhsLTcxLjQtNjEuMmMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC02OS4zem0uMSAxNjUuOGMyLjQgMi4zIDQuOCA0LjYgNy40IDYuOGw0NiAzOS40LTIuMiA3LjZjLTQuNSAxNS43LTEyLjkgMzAtMjQuNCA0MS41bC02OC4zIDY4LjNjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY4LjMtNjguM2MzLjgtMy44IDYuNi04LjYgOC4xLTEzLjhMMTYwLjEgMzcxem0yMzMuNS02Mi4yYzEwLjYtOCAyNS42LTUuOCAzMy42IDQuOGwxNDQgMTkyYzggMTAuNiA1LjggMjUuNi00LjggMzMuNnMtMjUuNiA1LjgtMzMuNi00LjhsLTE0NC0xOTJjLTgtMTAuNi01LjgtMjUuNiA0LjgtMzMuNnoiXX0sYXp0PXhzZSxic2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS13YXZlZm9ybSIsaWNvbjpbMzg0LDUxMixbImZpbGUtbWVkaWNhbC1hbHQiXSwiZjQ3OCIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtOTYgNjAuMyAwIDQ4LjggNjIuN2M1LjEgNi42IDEzLjMgMTAgMjEuNiA5LjFzMTUuNS02LjEgMTkuMS0xMy42bDQyLjktOTEuMiA5LjkgMTkuOGM0LjEgOC4xIDEyLjQgMTMuMyAyMS41IDEzLjNsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTcuMiAwLTI1LjQtNTAuN2MtNC4xLTguMi0xMi42LTEzLjQtMjEuOC0xMy4zcy0xNy41IDUuNS0yMS40IDEzLjhsLTQ3LjMgMTAwLjYtMzItNDEuMUM4Ni40IDMwNy40IDc5LjQgMzA0IDcyIDMwNEwwIDMwNCAwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6Il19LHJ6dD1ic2UsaXp0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWNyYWNrIixpY29uOls1MTIsNTEyLFtdLCJlM2IxIiwiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODYuNCAwLTMxLjMtNTIuMmMtNC4xLTYuOC0yLjYtMTUuNSAzLjUtMjAuNUwyNTYgMzY4IDE5NS44IDI4NS4yYy0xMC45LTE1IDguMi0zMy41IDIyLjgtMjJsMTE3LjkgOTIuNmM4IDYuMyA4LjIgMTguNCAuNCAyNC45TDI1NiA0NDggMjk0LjQgNTEyIDQwMCA1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6Il19LG96dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYXQtd2l6YXJkIixpY29uOls1MTIsNTEyLFtdLCJmNmU4IiwiTTY0IDQwMGw4NS43LTIwOC4yYzE3LTQxLjMgNDcuOC03NS4zIDg3LjItOTYuM0wzODMuOCAxNy4yYzEyLjMtNi42IDI2LjUgNC43IDIzIDE4LjJMMzY5LjYgMTc3LjhjLTEuMSA0LjEtMS42IDguMy0xLjYgMTIuNiAwIDYuMyAxLjIgMTIuNiAzLjYgMTguNWw3Ni40IDE5MS4xLTIwNy4xIDAgMTEuOC0zNS40IDQwLjQtMTMuNWM2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMnMtNC40LTEzLTEwLjktMTUuMmwtNDAuNC0xMy41LTEzLjUtNDAuNEMyMzcgMjYwLjQgMjMwLjkgMjU2IDIyNCAyNTZzLTEzIDQuNC0xNS4yIDEwLjlsLTEzLjUgNDAuNC00MC40IDEzLjVDMTQ4LjQgMzIzIDE0NCAzMjkuMSAxNDQgMzM2czQuNCAxMyAxMC45IDE1LjJsNDAuNCAxMy41IDExLjggMzUuNC0xNDMuMSAwek0yNzkuNiAxNDEuNWMtMS4xLTMuMy00LjEtNS41LTcuNi01LjVzLTYuNSAyLjItNy42IDUuNWwtNi43IDIwLjItMjAuMiA2LjdjLTMuMyAxLjEtNS41IDQuMS01LjUgNy42czIuMiA2LjUgNS41IDcuNmwyMC4yIDYuNyA2LjcgMjAuMmMxLjEgMy4zIDQuMSA1LjUgNy42IDUuNXM2LjUtMi4yIDcuNi01LjVsNi43LTIwLjIgMjAuMi02LjdjMy4zLTEuMSA1LjUtNC4xIDUuNS03LjZzLTIuMi02LjUtNS41LTcuNmwtMjAuMi02LjctNi43LTIwLjJ6TTMyIDQ0OGw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il19LHZzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLWRvY3RvciIsaWNvbjpbNDQ4LDUxMixbInVzZXItbWQiXSwiZjBmMCIsIk0yMjQgOGExMjAgMTIwIDAgMSAwIDAgMjQwIDEyMCAxMjAgMCAxIDAgMC0yNDB6bTYwIDMxMi44Yy01LjQtLjUtMTEtLjgtMTYuNi0uOGwtODYuOSAwYy01LjYgMC0xMS4xIC4zLTE2LjYgLjhsMCA2Ny41YzE2LjUgNy42IDI4IDI0LjMgMjggNDMuNiAwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTE5LjQgMTEuNS0zNi4xIDI4LTQzLjZsMC01OC40QzYxIDM1MyAxNiA0MTMuNiAxNiA0ODQuNiAxNiA0OTkuNyAyOC4zIDUxMiA0My40IDUxMmwzNjEuMSAwYzE1LjEgMCAyNy40LTEyLjMgMjcuNC0yNy40IDAtNzEtNDUtMTMxLjUtMTA4LTE1NC42bDAgMzcuNGMyMy4zIDguMiA0MCAzMC41IDQwIDU2LjZsMCAzMmMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0zMmMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCAzMmMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0zMmMwLTI2LjEgMTYuNy00OC4zIDQwLTU2LjZsMC00Ni42eiJdfSxzenQ9dnNlLHlzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGFydC1iYXIiLGljb246WzUxMiw1MTIsWyJiYXItY2hhcnQiXSwiZjA4MCIsIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMzNmMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgNDgwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyem05NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA4MGwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTEybDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXX0sbnp0PXlzZSx3c2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3ByYXktY2FuLXNwYXJrbGVzIixpY29uOls1NzYsNTEyLFsiYWlyLWZyZXNoZW5lciJdLCJmNWQwIiwiTTE2MCAzMmwwIDgwIDEyOCAwIDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJMMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem0wIDEyOGMtNTMgMC05NiA0My05NiA5NmwwIDIwOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIwOGMwLTUzLTQzLTk2LTk2LTk2bC0xMjggMHptNjQgOTZhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTQ0OCA0OGMwLTEuNC0xLTMtMi4yLTMuNkw0MTYgMzIgNDAzLjYgMi4yQzQwMyAxIDQwMS40IDAgNDAwIDBzLTMgMS0zLjYgMi4yTDM4NCAzMiAzNTQuMiA0NC40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDM4NCA2NCAzOTYuNCA5My44QzM5NyA5NSAzOTguNiA5NiA0MDAgOTZzMy0xIDMuNi0yLjJMNDE2IDY0IDQ0NS44IDUxLjZDNDQ3IDUxIDQ0OCA0OS40IDQ0OCA0OHptNzYuNCA0NS44QzUyNSA5NSA1MjYuNiA5NiA1MjggOTZzMy0xIDMuNi0yLjJMNTQ0IDY0IDU3My44IDUxLjZjMS4yLS42IDIuMi0yLjIgMi4yLTMuNiAwLTEuNC0xLTMtMi4yLTMuNkw1NDQgMzIgNTMxLjYgMi4yQzUzMSAxIDUyOS40IDAgNTI4IDBzLTMgMS0zLjYgMi4yTDUxMiAzMiA0ODIuMiA0NC40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDUxMiA2NCA1MjQuNCA5My44em03LjIgMTAwLjRjLS42LTEuMi0yLjItMi4yLTMuNi0yLjJzLTMgMS0zLjYgMi4yTDUxMiAyMjQgNDgyLjIgMjM2LjRjLTEuMiAuNi0yLjIgMi4yLTIuMiAzLjYgMCAxLjQgMSAzIDIuMiAzLjZMNTEyIDI1NiA1MjQuNCAyODUuOGMuNiAxLjIgMi4yIDIuMiAzLjYgMi4yczMtMSAzLjYtMi4yTDU0NCAyNTYgNTczLjggMjQzLjZjMS4yLS42IDIuMi0yLjIgMi4yLTMuNiAwLTEuNC0xLTMtMi4yLTMuNkw1NDQgMjI0IDUzMS42IDE5NC4yek01MTIgMTQ0YzAtMS40LTEtMy0yLjItMy42TDQ4MCAxMjggNDY3LjYgOTguMkM0NjcgOTcgNDY1LjQgOTYgNDY0IDk2cy0zIDEtMy42IDIuMkw0NDggMTI4IDQxOC4yIDE0MC40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDQ0OCAxNjAgNDYwLjQgMTg5LjhjLjYgMS4yIDIuMiAyLjIgMy42IDIuMnMzLTEgMy42LTIuMkw0ODAgMTYwIDUwOS44IDE0Ny42YzEuMi0uNiAyLjItMi4yIDIuMi0zLjZ6Il19LGx6dD13c2UsY3p0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhaHQtc2lnbiIsaWNvbjpbMzIwLDUxMixbXSwiZTBhYyIsIk0xMzYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MC03NC40IDBDMTYuOCA2NCAwIDgwLjggMCAxMDEuNkwwIDQwNi4zYzAgMjMgMTguNyA0MS43IDQxLjcgNDEuN2w3MC4zIDAgMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNDggMGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMiAwLTQwLjEtMjEuMS03NS4zLTUyLjctOTUuMSAxMy4xLTE4LjMgMjAuNy00MC43IDIwLjctNjQuOSAwLTYxLjktNTAuMS0xMTItMTEyLTExMmwtMTYgMCAwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0xMTIgMTI4bDAgOTYtNDggMCAwLTk2IDQ4IDB6bTQ4IDk2bDAtOTYgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGwtMTYgMHptLTQ4IDY0bDAgOTYtNDggMCAwLTk2IDQ4IDB6bTQ4IDk2bDAtOTYgNDggMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGwtNDggMHoiXX0sTXNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlbXBlcmF0dXJlLWFycm93LXVwIixpY29uOls1MTIsNTEyLFsidGVtcGVyYXR1cmUtdXAiXSwiZTA0MCIsIk02NC41IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NHMtMTQ0LTY0LjUtMTQ0LTE0NGMwLTQyLjYgMTguNS04MSA0OC0xMDcuM0w2NC41IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjEyLjdjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMTIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00MzkuMSA5LjRsNjQgNjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTkuNC05LjQgMCAxNzguN2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE3OC43LTkuNCA5LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY0LTY0YzYtNiAxNC4xLTkuNCAyMi42LTkuNHMxNi42IDMuNCAyMi42IDkuNHoiXX0sZHp0PU1zZSxmenQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2ViLWF3ZXNvbWUiLGljb246WzY0MCw1MTIsW10sImU2ODIiLCJNMzcyLjIgNTJjMCAyMC45LTEyLjQgMzktMzAuMiA0Ny4yTDQ0OCAxOTIgNTUyLjQgMTcxLjFjLTUuMy03LjctOC40LTE3LjEtOC40LTI3LjEgMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGMwIDI2LTIwLjYgNDcuMS00Ni40IDQ4TDQ4MSA0NDIuM2MtMTAuMyAyMy0zMy4yIDM3LjctNTguNCAzNy43bC0yMDUuMiAwYy0yNS4yIDAtNDgtMTQuOC01OC40LTM3LjdMNDYuNCAxOTJDMjAuNiAxOTEuMSAwIDE3MCAwIDE0NCAwIDExNy41IDIxLjUgOTYgNDggOTZzNDggMjEuNSA0OCA0OGMwIDEwLjEtMy4xIDE5LjQtOC40IDI3LjFMMTkyIDE5MiAyOTguMSA5OS4xYy0xNy43LTguMy0zMC0yNi4zLTMwLTQ3LjEgMC0yOC43IDIzLjMtNTIgNTItNTJzNTIgMjMuMyA1MiA1MnoiXX0sdXp0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im5vbi1iaW5hcnkiLGljb246WzM4NCw1MTIsW10sImU4MDciLCJNMTkyIDU0NGMtOTcuMiAwLTE3Ni03OC44LTE3Ni0xNzYgMC04Ni4zIDYyLjEtMTU4IDE0NC0xNzNsMC00Ny4yLTQ5LjcgMjQuOC0zIDEuM2MtMTUuMiA1LjctMzIuNS0uOC0zOS45LTE1LjctNy40LTE0LjgtMi4yLTMyLjYgMTEuNS00MS4zbDIuOC0xLjYgMzguOC0xOS40LTM4LjgtMTkuNGMtMTUuOC03LjktMjIuMi0yNy4xLTE0LjMtNDIuOSA3LjQtMTQuOCAyNC44LTIxLjQgNDAtMTUuNmwzIDEuMyA0OS43IDI0LjggMC00NC4yYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0NC4yIDQ5LjctMjQuOCAzLTEuM2MxNS4yLTUuOCAzMi41IC44IDM5LjkgMTUuNnMyLjIgMzIuNy0xMS41IDQxLjNsLTIuOCAxLjYtMzguNyAxOS40IDM4LjcgMTkuM2MxNS44IDcuOSAyMi4yIDI3LjEgMTQuMyA0Mi45LTcuNCAxNC44LTI0LjcgMjEuNC0zOS45IDE1LjZsLTMtMS4zLTQ5LjctMjQuOCAwIDQ3LjJjODEuOSAxNS4xIDE0NCA4Ni44IDE0NCAxNzMgMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZ6bTAtNjRhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0eiJdfSxwenQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibiIsaWNvbjpbMzg0LDUxMixbMTEwXSwiNGUiLCJNMjEuMSAzMy45YzEyLjctNC42IDI2LjktLjcgMzUuNSA5LjZMMzIwIDM1OS42IDMyMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzg0YzAgMTMuNS04LjQgMjUuNS0yMS4xIDMwLjFzLTI2LjkgLjctMzUuNS05LjZMNjQgMTUyLjQgNjQgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDUwLjUgOC40IDM4LjUgMjEuMSAzMy45eiJdfSx6c2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3dzLXVwLWRvd24tbGVmdC1yaWdodCIsaWNvbjpbNTEyLDUxMixbImFycm93cyJdLCJmMDQ3IiwiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDkuNC05LjQgMCAxMTQuNy0xMTQuNyAwIDkuNC05LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDExNC43IDAgMCAxMTQuNy05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOS40IDkuNCAwLTExNC43IDExNC43IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDkuNCA5LjQtMTE0LjcgMCAwLTExNC43IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6Il19LGh6dD16c2UsbDc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UiLGljb246WzUxMiw1MTIsWzEyNzk2OCw2MzQ5OCw2MzUwMCwiaG9tZSIsImhvbWUtYWx0IiwiaG9tZS1sZy1hbHQiXSwiZjAxNSIsIk0yNzcuOCA4LjZjLTEyLjMtMTEuNC0zMS4zLTExLjQtNDMuNSAwbC0yMjQgMjA4Yy05LjYgOS0xMi44IDIyLjktOCAzNS4xUzE4LjggMjcyIDMyIDI3MmwxNiAwIDAgMTc2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTc2IDE2IDBjMTMuMiAwIDI1LTguMSAyOS44LTIwLjNzMS42LTI2LjItOC0zNS4xbC0yMjQtMjA4ek0yNDAgMzIwbDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5Ni0xMjggMCAwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4eiJdfSxtenQ9bDcsZ3p0PWw3LHh6dD1sNyxienQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3Bpbm5lciIsaWNvbjpbNTEyLDUxMixbXSwiZjExMCIsIk0yMDggNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMCA0MTZhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNNDggMjA4YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnptMzY4IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTc1IDM2OS4xQTQ4IDQ4IDAgMSAxIDE0Mi45IDQzNyA0OCA0OCAwIDEgMSA3NSAzNjkuMXpNNzUgNzVBNDggNDggMCAxIDEgMTQyLjkgMTQyLjkgNDggNDggMCAxIDEgNzUgNzV6TTQzNyAzNjkuMUE0OCA0OCAwIDEgMSAzNjkuMSA0MzcgNDggNDggMCAxIDEgNDM3IDM2OS4xeiJdfSxrc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2F2ZWwiLGljb246WzU3Niw1MTIsWyJsZWdhbCJdLCJmMGUzIiwiTTE2OS42IDE1My40bC0xOC43LTE4LjdjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDI2NS42LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBMMzI5LjYtNi42YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zTDIxNC45IDE1My40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHpNMjc2IDIxMS43bC0zMS40LTMxLjQgMTEyLTExMiAxMTkuNCAxMTkuNC0xMTIgMTEyLTMxLjQtMzEuNC0yMzIgMjMyYy0xNS42IDE1LjYtNDAuOSAxNS42LTU2LjYgMHMtMTUuNi00MC45IDAtNTYuNmwyMzItMjMyek0zOTAuOSAzNzQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNMNTA1LjYgMjE0LjZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTguNyAxOC43YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zTDQ1NC45IDM5My40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTguNy0xOC43eiJdfSx2enQ9a3NlLFNzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0aWNrZXQtc2ltcGxlIixpY29uOls1NzYsNTEyLFsidGlja2V0LWFsdCJdLCJmM2ZmIiwiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCA4LjgtNy40IDE1LjctMTUuNyAxOC42LTE4LjggNi41LTMyLjMgMjQuNC0zMi4zIDQ1LjRzMTMuNSAzOC45IDMyLjMgNDUuNGM4LjMgMi45IDE1LjcgOS44IDE1LjcgMTguNmwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NEMwIDMxMS4yIDcuNCAzMDQuMyAxNS43IDMwMS40IDM0LjUgMjk0LjkgNDggMjc3IDQ4IDI1NnMtMTMuNS0zOC45LTMyLjMtNDUuNEM3LjQgMjA3LjcgMCAyMDAuOCAwIDE5MmwwLTY0eiJdfSx5enQ9U3NlLHd6dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkb3ZlIixpY29uOls1MTIsNTEyLFsxMjgzMzBdLCJmNGJhIiwiTTQ5NiA2NGMxMy4yIDAgMjAuNyAxNS4xIDEyLjggMjUuNkw0ODAgMTI4IDQ4MCAzMDRjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRsLTExMiAwLTQ2LjMgNDYuM2MtMTAuNCAxMC40LTI2LjUgMTIuNC0zOS4xIDQuOEw0MS41IDQ0MC45Yy0xNy0xMC4yLTE1LTM1LjUgMy40LTQyLjlMMTYwIDM1MkMyMy44IDMxMS4xIDcuNSAxNjkuOCAyMiA5NS43IDI1LjYgNzcuOSA0NS4zIDcxLjQgNjEuMyA4MC4yTDMyMCAyMjQgMzIwIDE0NGMwLTQ0LjIgMzUuOC04MCA4MC04MGw5NiAwem0tOTYgNTZhMjQgMjQgMCAxIDAgMCA0OCAyNCAyNCAwIDEgMCAwLTQ4ek0xODIuNS05LjZjMTIuNC0xMy43IDMzLjMtOC45IDQyLjUgNy4xbDU2LjQgOTguM2MtNS44IDE0LjQtOS4yIDMwLjEtOS40IDQ2LjVMMTM4LjEgNjhjMTAuMS0zMS42IDI3LTU4LjQgNDQuNC03Ny42eiJdfSxNenQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGFycC1kcm9wbGV0IixpY29uOls1MTIsNTEyLFtdLCJlNTdjIiwiTTI1NiAxNjBjMzUuMyAwIDY0LTI2LjkgNjQtNjAgMC0yNC0zMy43LTcwLjEtNTIuMi05My41LTYuMS03LjctMTcuNS03LjctMjMuNiAwLTE4LjUgMjMuNC01Mi4yIDY5LjUtNTIuMiA5My41IDAgMzMuMSAyOC43IDYwIDY0IDYwek0zNjggOTZjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJTMTQ0IDE1Ny45IDE0NCA5NmMwLTExLjEgMS42LTIxLjkgNC42LTMyTDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI3Ny41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDkzLjMgMzIyLjdjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1MTIgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0bC04NC42IDBjMyAxMC4xIDQuNiAyMC45IDQuNiAzMnptODUuNSAxNzZMMzM2IDM4OS41IDMzNiAyOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsOTMuNSAwek05NiAxMjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSx6enQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJlZS1jaXR5IixpY29uOls2NDAsNTEyLFtdLCJlNTg3IiwiTTI4OCA0OGMwLTI2LjUgMjEuNS00OCA0OC00OGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDggNDggMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA3MiAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzIwYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yNTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC00MTZ6bTY0IDY0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTM1MiAzMDRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNNTI4IDE5MmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek01MTIgMzA0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTk2IDQ4MGwwLTE2MC0xNiAwYy00NC4yIDAtODAtMzUuOC04MC04MCAwLTI2LjcgMTMuMS01MC4zIDMzLjItNjQuOS0uOC00LjktMS4yLTEwLTEuMi0xNS4xIDAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCA5NmMwIDM1LjMtMjguNyA2NC02NCA2NGwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnoiXX0sQ3NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InR1cm4tdXAiLGljb246WzM4NCw1MTIsWzEwNTQ4LCJsZXZlbC11cC1hbHQiXSwiZjNiZiIsIk0xNjkuNCA5LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMzIuOSAxOTIgMzIwIDE5MmwtNjQgMCAwIDE2MGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MGwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTYwLTY0IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45bDEyOC0xMjh6Il19LGt6dD1Dc2UsYzc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGVtcGVyYXR1cmUtcXVhcnRlciIsaWNvbjpbMzIwLDUxMixbInRlbXBlcmF0dXJlLTEiLCJ0aGVybW9tZXRlci0xIiwidGhlcm1vbWV0ZXItcXVhcnRlciJdLCJmMmNhIiwiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM2wwLTI4LjdjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI4LjdjMjMuNSA5LjUgNDAgMzIuNSA0MCA1OS4zeiJdfSxTenQ9YzcsQ3p0PWM3LEx6dD1jNyxMc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2xpZGVycyIsaWNvbjpbNTEyLDUxMixbInNsaWRlcnMtaCJdLCJmMWRlIiwiTTMyIDY0QzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMmw4Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhMNDgwIDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwyNjUuMyA2NEMyNTMgMzUuNyAyMjQuOCAxNiAxOTIgMTZzLTYxIDE5LjctNzMuMyA0OEwzMiA2NHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjQ2LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OGw1NC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTU0LjcgMGMtMTIuMy0yOC4zLTQwLjUtNDgtNzMuMy00OHMtNjEgMTkuNy03My4zIDQ4TDMyIDIyNHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTQuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDhzNjEtMTkuNyA3My4zLTQ4TDQ4MCA0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI0Ni43IDBjLTEyLjMtMjguMy00MC41LTQ4LTczLjMtNDhzLTYxIDE5LjctNzMuMyA0OEwzMiAzODR6Il19LFR6dD1Mc2UsX3p0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vc3F1ZSIsaWNvbjpbNTc2LDUxMixbMTI4MzMyXSwiZjY3OCIsIk0xNzQuOCAyMjRsMjI2LjQgMGM0My41IDAgNzguOC0zNS4zIDc4LjgtNzguOCAwLTI1LjUtMTIuMy00OS40LTMzLjEtNjQuMkwyOTcuMy0yNS40Yy01LjYtMy45LTEzLTMuOS0xOC41IDBMMTI5LjEgODFDMTA4LjMgOTUuOCA5NiAxMTkuNyA5NiAxNDUuMiA5NiAxODguNyAxMzEuMyAyMjQgMTc0LjggMjI0ek01MTIgNTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDgtNDQ4IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDIwNi4zIDAgMjI0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwek0yNDAgMzg0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCA4MC05NiAwIDAtODB6Il19LEF6dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoIixpY29uOlszODQsNTEyLFsxMDRdLCI0OCIsIk0zMjAgMjg4bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNjAtMjU2IDAgMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCAyNTYgMHoiXX0sJHp0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImluZm8iLGljb246WzE5Miw1MTIsW10sImYxMjkiLCJNNDggNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtMjI0LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxUc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXdhbGtpbmciLGljb246WzM4NCw1MTIsWzEyODY5NCwid2Fsa2luZyJdLCJmNTU0IiwiTTE5MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMTA1LjQgMjI3LjlsMjIuNi0yMi42IDAgNjkuM2MwIDI4IDEyLjIgNTQuNyAzMy41IDcyLjlsNzEuNCA2MS4yYzUuOSA1LjEgOS44IDEyLjEgMTAuOSAxOS44bDEyLjYgODguMWMyLjUgMTcuNSAxOC43IDI5LjcgMzYuMiAyNy4yczI5LjctMTguNyAyNy4yLTM2LjJsLTEyLjYtODguMWMtMy4zLTIzLjEtMTQuOS00NC4xLTMyLjYtNTkuM2wtMzQuNS0yOS42IDAtMTE1LjIgMy44IDQuN2MxOC4yIDIyLjggNDUuOCAzNiA3NSAzNmwzMy4yIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMzLjIgMGMtOS43IDAtMTguOS00LjQtMjUtMTJsLTE3LjktMjIuNGMtMjMtMjguOC01Ny45LTQ1LjYtOTQuOC00NS42LTMyLjIgMC02My4xIDEyLjgtODUuOCAzNS42TDYwLjEgMTgyLjZDNDIuMSAyMDAuNiAzMiAyMjUgMzIgMjUwLjVMMzIgMjg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNy41YzAtOC41IDMuNC0xNi42IDkuNC0yMi42em0xMi40IDE3OS40Yy0xLjUgNS4yLTQuMyAxMC04LjEgMTMuOEw0MS40IDQ4OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY4LjMtNjguM2MxMS41LTExLjUgMTkuOS0yNS44IDI0LjQtNDEuNWwyLjItNy42LTQ2LTM5LjRjLTIuNS0yLjItNS00LjQtNy40LTYuOGwtMTAuNCAzNi4yeiJdfSxEenQ9VHNlLF9zZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy10dXJuLWRvd24iLGljb246WzM4NCw1MTIsWyJsZXZlbC1kb3duIl0sImYxNDkiLCJNMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMlMxNC4zIDAgMzIgMGw5NiAwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMDYuNyA3My40LTczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMTYwIDQwMi43IDE2MCA5NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiA2NHoiXX0sRXp0PV9zZSxOenQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicm9hZCIsaWNvbjpbNTEyLDUxMixbMTI4NzM5XSwiZjAxOCIsIk0yMjMuOSAzMmwtNzYuMiAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkwxLjQgNDIwLjVDLTYuMSA0NTAuNyAxNi44IDQ4MCA0OCA0ODBsMTc1LjkgMCAwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NCAxNzYuMSAwYzMxLjIgMCA1NC4xLTI5LjMgNDYuNi01OS41TDQyNi41IDgwLjZDNDE5LjQgNTIuMSAzOTMuOCAzMiAzNjQuMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptNjQgMTkybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdfSxQenQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3BpcmFsIixpY29uOls1MTIsNTEyLFtdLCJlODBhIiwiTTExNS41IDcuNGMxMy42LTExLjMgMzMuOC05LjUgNDUuMSA0LjFzOS41IDMzLjgtNC4xIDQ1LjFDMTAwLjIgMTAzLjUgNjQgMTc1LjIgNjQgMjU2IDY0IDM2MiAxNTAgNDQ4IDI1NiA0NDhzMTkyLTg2IDE5Mi0xOTJjMC03NS4xLTYwLjktMTM2LTEzNi0xMzZTMTc2IDE4MC45IDE3NiAyNTZjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTQ4LjYgMzkuNC04OCA4OC04OHM4OCAzOS40IDg4IDg4YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzExMiAzMzUuNSAxMTIgMjU2YzAtMTEwLjUgODkuNS0yMDAgMjAwLTIwMHMyMDAgODkuNSAyMDAgMjAwYzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NkMwIDE1NS44IDQ1IDY2LjEgMTE1LjUgNy40eiJdfSxBc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1mcm93biIsaWNvbjpbNTEyLDUxMixbOTc4NSwiZnJvd24iXSwiZjExOSIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptOTAuNi0xMTMuOWMtMjAuNC0yOC01My40LTQ2LjEtOTAuNi00Ni4xcy03MC4yIDE4LjEtOTAuNiA0Ni4xYy03LjggMTAuNy0yMi44IDEzLjEtMzMuNSA1LjNzLTEzLjEtMjIuOC01LjMtMzMuNUMxNTUuNyAzMzAgMjAyLjggMzA0IDI1NiAzMDRzMTAwLjMgMjYgMTI5LjQgNjUuOWM3LjggMTAuNyA1LjQgMjUuNy01LjMgMzMuNXMtMjUuNyA1LjQtMzMuNS01LjN6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sSXp0PUFzZSwkc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2luZS1nbGFzcy1lbXB0eSIsaWNvbjpbMzIwLDUxMixbIndpbmUtZ2xhc3MtYWx0Il0sImY1Y2UiLCJNNjQgMEM0OC43IDAgMzUuNiAxMC44IDMyLjYgMjUuN0wzLjIgMTczQzEuMSAxODMuNSAwIDE5NC4yIDAgMjA1bDAgM2MwIDc3LjQgNTUgMTQyIDEyOCAxNTYuOGwwIDExNS4yLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC0xMTUuMkMyNjUgMzUwIDMyMCAyODUuNCAzMjAgMjA4bDAtM2MwLTEwLjctMS4xLTIxLjQtMy4yLTMyTDI4Ny40IDI1LjdDMjg0LjQgMTAuOCAyNzEuMyAwIDI1NiAwTDY0IDB6bTEuOSAxODUuNkw5MC4yIDY0IDIyOS44IDY0IDI1NC4xIDE4NS42YzEuMyA2LjQgMS45IDEyLjkgMS45IDE5LjRsMCAzYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bDAtM2MwLTYuNSAuNi0xMyAxLjktMTkuNHoiXX0sRnp0PSRzZSxPenQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xhcHBlcmJvYXJkIixpY29uOls1MTIsNTEyLFtdLCJlMTMxIiwiTTQ0OCA2NGMyIDAgMy45IC4xIDUuOCAuM2wtOTUuNyA5NS43IDY3LjkgMCA3Mi03MmM4LjggMTEgMTQgMjQuOSAxNCA0MGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDcwLjEgMC05NiA5NiA2Ny45IDAgOTUtOTUgMS0xIDkyLjEgMC05NiA5NiA2Ny45IDAgOTUtOTUgMS0xIDg2LjEgMHoiXX0sRHNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZvcndhcmQtc3RlcCIsaWNvbjpbMzg0LDUxMixbInN0ZXAtZm9yd2FyZCJdLCJmMDUxIiwiTTIxIDM2LjhjMTIuOS03IDI4LjctNi4zIDQxIDEuOEwzMjAgMjA4LjEgMzIwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzODRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNDQuMS0yNTggMTY5LjZjLTEyLjMgOC4xLTI4IDguOC00MSAxLjhTMCA0NTQuNyAwIDQ0MEwwIDcyQzAgNTcuMyA4LjEgNDMuOCAyMSAzNi44eiJdfSxCenQ9RHNlLEVzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtdXAtcmlnaHQiLGljb246WzQ0OCw1MTIsWzg1OTksImV4dGVybmFsLWxpbmstc3F1YXJlLWFsdCJdLCJmMzYwIiwiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTE2OCAxNjBjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsMzUgMzUtNjcgNjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDI0IDI0YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDY3LTY3IDM1IDM1YzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJTMzIwIDMyMS43IDMyMCAzMTJsMC0xMjhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTEyOCAweiJdfSxSenQ9RXNlLE5zZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib29rLWpvdXJuYWwtd2hpbGxzIixpY29uOls0NDgsNTEyLFsiam91cm5hbC13aGlsbHMiXSwiZjY2YSIsIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMjc0LjEgOTkuMmMyLjYtMi42IDYuNy0zLjEgOS45LTEuMSAzMi4xIDIwIDUzLjQgNTUuNiA1My40IDk2LjIgMCA2Mi42LTUwLjcgMTEzLjMtMTEzLjMgMTEzLjNTMTEwLjcgMjU2LjkgMTEwLjcgMTk0LjNjMC00MC42IDIxLjQtNzYuMiA1My40LTk2LjIgMy4xLTIgNy4yLTEuNSA5LjkgMS4xczMuMSA2LjcgMS4yIDkuOGMtNS4yIDguNi04LjIgMTguNy04LjIgMjkuNSAwIDE1LjEgNS45IDI4LjggMTUuNSAzOS4xIDIuNSAyLjcgMi45IDYuNyAuOSA5LjctNC43IDcuNC03LjQgMTYuMS03LjQgMjUuNSAwIDIxLjYgMTQuMyAzOS45IDM0IDQ1LjlsMS0yNC44Yy03LjEtNC40LTExLjgtMTIuMi0xMS44LTIxLjEgMC05LjYgNS41LTE4IDEzLjUtMjIuMWwzLjMtODEuOGMuMi00LjMgMy43LTcuNyA4LTcuN3M3LjggMy40IDggNy43bDMuMyA4MS44YzggNC4xIDEzLjUgMTIuNCAxMy41IDIyLjEgMCA4LjktNC43IDE2LjctMTEuOCAyMS4xbDEgMjQuOGMxOS42LTYgMzMuOS0yNC4xIDM0LTQ1LjZsMC0uNmMtLjEtOS4zLTIuNy0xNy45LTcuNC0yNS4yLTEuOS0zLjEtMS42LTcuMSAuOS05LjcgOS42LTEwLjIgMTUuNS0yMy45IDE1LjUtMzkuMSAwLTEwLjgtMy0yMC45LTguMi0yOS41LTEuOS0zLjItMS40LTcuMiAxLjItOS44eiJdfSxIenQ9TnNlLFBzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGFtcGFnbmUtZ2xhc3NlcyIsaWNvbjpbNjQwLDUxMixbMTI5MzQ2LCJnbGFzcy1jaGVlcnMiXSwiZjc5ZiIsIk0xNTUuNiAxNy4zQzE2MyAzIDE3OS45LTMuNiAxOTUgMS45bDEyNSA0NS42IDEyNS00NS42YzE1LjEtNS41IDMyIDEuMSAzOS40IDE1LjRsNzguOCAxNTIuOWMyOC44IDU1LjggMTAuMyAxMjIuMy0zOC41IDE1Ni42bDMxLjMgODYuMiA0MS0xNWMxNi42LTYgMzUgMi41IDQxIDE5LjFzLTIuNSAzNS0xOS4xIDQxYy00Ny40IDE3LjMtOTQuOCAzNC41LTE0Mi4yIDUxLjgtMTYuNiA2LjEtMzUtMi41LTQxLTE5LjFzMi41LTM1IDE5LjEtNDFsNDEtMTUtMzEuMy04Ni4yYy01OS40IDUuMi0xMTYuMi0zMy45LTEzMC05NS4ybC0xNC42LTY0LjctMTQuNiA2NC43Yy0xMy44IDYxLjMtNzAuNiAxMDAuNC0xMzAgOTUuMmwtMzEuMyA4Ni4yIDQxIDE1YzE2LjYgNi4xIDI1LjIgMjQuNCAxOS4xIDQxcy0yNC40IDI1LjItNDEgMTkuMWMtNDcuNC0xNy4zLTk0LjgtMzQuNi0xNDIuMi01MS44LTE2LjYtNi4xLTI1LjItMjQuNC0xOS4xLTQxUzI2LjMgMzkyIDQyLjkgMzk4bDQxIDE1IDMxLjMtODYuMkM2Ni41IDI5Mi41IDQ4LjEgMjI2IDc2LjkgMTcwLjJMMTU1LjYgMTcuM3ptNDQgNTQuNGwtMjcuMiA1Mi44IDg5LjIgMzIuNSAxMy4xLTU3LjktNzUuMS0yNy40em0yNDAuOSAwbC03NS4xIDI3LjQgMTMuMSA1Ny45IDg5LjItMzIuNS0yNy4yLTUyLjh6Il19LHF6dD1Qc2UsVnp0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImR1bXBzdGVyIixpY29uOls1NzYsNTEyLFtdLCJmNzkzIiwiTTEzMi4zIDY0TDEwNi43IDE5MiAyNCAxOTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNC4xYzAtMi42IC40LTUuMSAxLjItNy42TDI2LjUgODAuNEMyOS44IDcwLjYgMzkgNjQgNDkuMyA2NGw4MyAwem0yMy40IDEyOGwyNS42LTEyOCA4Mi43IDAgMCAxMjgtMTA4LjMgMHpNMzEyIDY0bDgyLjcgMCAyNS42IDEyOC0xMDguMyAwIDAtMTI4em0xMzEuNyAwbDgzIDBjMTAuMyAwIDE5LjUgNi42IDIyLjggMTYuNGwyNS4zIDc1LjljLjggMi40IDEuMiA1IDEuMiA3LjZsMCA0LjFjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTgyLjcgMC0yNS42LTEyOHpNMjUuNyAyNDBsNTI0LjcgMGMtLjQgMi4xLTEzLjMgNzMuNC0zOC45IDIxMy43LTMgMTYuMy0xNy45IDI3LjYtMzQuNCAyNi4xUzQ0OCA0NjQuNiA0NDggNDQ4bDAtMTYtMzIwIDAgMCAxNmMwIDE2LjYtMTIuNiAzMC40LTI5LjEgMzEuOVM2Ny41IDQ3MCA2NC41IDQ1My43QzM5IDMxMy4zIDI2IDI0Mi4xIDI1LjcgMjQweiJdfSxVenQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVhcnQtY2lyY2xlLXhtYXJrIixpY29uOls1NzYsNTEyLFtdLCJlNTAxIiwiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTQzMiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em01OS4zIDEwNy4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTM2LjcgMzYuNy0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsMzYuNyAzNi43LTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDM2LjctMzYuNyAzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zNi43LTM2LjcgMzYuNy0zNi43eiJdfSxqenQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29tcHV0ZXIiLGljb246WzU3Niw1MTIsW10sImU0ZTUiLCJNMzQ4LjggMzJDMzQwLjcgNDYuMSAzMzYgNjIuNSAzMzYgODBsMCAxNi0yNzIgMCAwIDIyNCAyNzIgMCAwIDY0LTI3MiAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI4NC44IDB6TTMzNiA0MzJjMCAxNy41IDQuNyAzMy45IDEyLjggNDhMMTIwIDQ4MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyMTYgMHpNNDMyIDMybDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzUyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em0yNCA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6bTU2IDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdfSxJc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2FuZC1tYWdpYyIsaWNvbjpbNTEyLDUxMixbIm1hZ2ljIl0sImYwZDAiLCJNMzk4LjUgMTIuMmwtODguMiA4OC4yIDEwMS4zIDEwMS4zIDg4LjItODguMkM1MDcuNiAxMDUuNiA1MTIgOTUgNTEyIDg0cy00LjQtMjEuNi0xMi4yLTI5LjVMNDU3LjUgMTIuMkM0NDkuNiA0LjQgNDM5IDAgNDI4IDBzLTIxLjYgNC40LTI5LjUgMTIuMnpNMjc2LjQgMTM0LjNMMTIuMiAzOTguNUM0LjQgNDA2LjQgMCA0MTcgMCA0MjhzNC40IDIxLjYgMTIuMiAyOS41bDQyLjMgNDIuM0M2Mi40IDUwNy42IDczIDUxMiA4NCA1MTJzMjEuNi00LjQgMjkuNS0xMi4yTDM3Ny43IDIzNS42IDI3Ni40IDEzNC4zeiJdfSxXenQ9SXNlLEd6dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicmFpbiIsaWNvbjpbNTEyLDUxMixbMTI5NTA0XSwiZjVkYyIsIk0xMjAgNTZjMC0zMC45IDI1LjEtNTYgNTYtNTZsMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMjkuOCAwLTU0LjktMjAuNC02Mi00OC0uNyAwLTEuMyAwLTIgMC00NC4yIDAtODAtMzUuOC04MC04MCAwLTE4IDYtMzQuNiAxNi00OC0xOS40LTE0LjYtMzItMzcuOC0zMi02NCAwLTMwLjkgMTcuNi01Ny44IDQzLjItNzEuMS03LjEtMTItMTEuMi0yNi0xMS4yLTQwLjkgMC00NC4yIDM1LjgtODAgODAtODBsMC0yNHptMjcyIDBsMCAyNGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDE1LTQuMSAyOS0xMS4yIDQwLjkgMjUuNyAxMy4zIDQzLjIgNDAuMSA0My4yIDcxLjEgMCAyNi4yLTEyLjYgNDkuNC0zMiA2NCAxMCAxMy40IDE2IDMwIDE2IDQ4IDAgNDQuMi0zNS44IDgwLTgwIDgwLS43IDAtMS4zIDAtMiAwLTcuMSAyNy42LTMyLjIgNDgtNjIgNDhsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI0IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZ6Il19LFl6dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicmllZmNhc2UtbWVkaWNhbCIsaWNvbjpbNTEyLDUxMixbXSwiZjQ2OSIsIk0yMDAgNDhsMTEyIDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtMTI4IDAgMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDAtODAgMEMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTgwIDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NkwyMDAgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6bTgwIDE2MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXX0sWnp0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLW1lZGljYWwtY2lyY2xlLWV4Y2xhbWF0aW9uIixpY29uOls2NDAsNTEyLFtdLCJlNTEyIiwiTTMwOS44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTNTAuOCAyNzIgNjQgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTk2IDBjLTIxLjItMjkuNS0zNC4zLTY1LjMtMzUuOS0xMDRMMjcyIDQwOGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCAyMCAwYzM0LjktNDguNSA5MS43LTgwIDE1Ni04MCAxMC43IDAgMjEuMSAuOSAzMS4zIDIuNUwzMDkuOCA4LjZ6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdfSxYenQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29kZS1jb21taXQiLGljb246WzU3Niw1MTIsW10sImYzODYiLCJNMjg4IDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTU2LjgtNDhDNDMwIDM2MSAzNjUuNCA0MTYgMjg4IDQxNlMxNDYgMzYxIDEzMS4yIDI4OEwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTkuMiAwQzE0NiAxNTEgMjEwLjYgOTYgMjg4IDk2czE0MiA1NSAxNTYuOCAxMjhsOTkuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05OS4yIDB6Il19LFF6dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tYnJlYXN0ZmVlZGluZyIsaWNvbjpbNDQ4LDUxMixbXSwiZTUzYSIsIk0yMjQgMGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNNDM2LjggMzgyLjhMMzczLjUgNDYyYy0xNi42IDIwLjctNDYuOCAyNC4xLTY3LjUgNy41LTE3LjYtMTQuMS0yMi43LTM4LjEtMTMuNS01Ny43bC0uNy0uMWMtMzguOS01LjYtNzQuMy0yNS4xLTk5LjctNTQuOGwwLTM2LjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OGMwIC44IDAgMS42IC4xIDIuNGwxMDEuNCA1MC43YzIzLjcgMTEuOSAzMy4zIDQwLjcgMjEuNSA2NC40cy00MC43IDMzLjMtNjQuNCAyMS41TDI3LjIgNDI3LjNjLTEuMS0uNS0yLjItMS4xLTMuMy0xLjctNC45LTIuOC05LjItNi40LTEyLjYtMTAuNi00LjYtNS40LTcuOC0xMS43LTkuNi0xOC40LTMuMy0xMi0xLjktMjUuMiA0LjgtMzYuNiAuNi0xLjEgMS4zLTIuMiAyLTMuMkw3NS42IDI1Ni4xYzI2LjctNDAuMSA3MS43LTY0LjEgMTE5LjgtNjQuMWw3NS4yIDBjNDYuNSAwIDkwLjEgMjIuNSAxMTcuMiA2MC4zbDUwLjcgNzAuOWMyLjIgMyA0IDYuMSA1LjUgOS40IDIuOSA2LjcgNC4zIDEzLjggNCAyMC44LS4zIDEwLjYtNC4yIDIxLTExLjIgMjkuNHpNMzIwIDMzMmE0NCA0NCAwIDEgMCAtODggMCA0NCA0NCAwIDEgMCA4OCAweiJdfSxLenQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXJheXMiLGljb246WzUxMiw1MTIsW10sImU1NGQiLCJNMzEyLjUgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN2w0Ni4zIDYyLjRjMTAuNSAxNC4yIDMwLjYgMTcuMiA0NC44IDYuNnMxNy4yLTMwLjYgNi42LTQ0LjhsLTcwLjUtOTVDMzM4LjUgMTMyIDI5OC44IDExMiAyNTYuNSAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNmw0Ni4zLTYyLjQgMCAyNzUuM2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek03LjUgN2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsODAgODBjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQxLjUgN0MzMi4xLTIuMyAxNi45LTIuMyA3LjUgN3ptNDY0IDBsLTgwIDgwYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODAtODBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMHpNNy41IDUwNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw4MC04MGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC04MCA4MGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjl6bTQ2NCAwYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODAtODBjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsODAgODB6Il19LEp6dD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYW5hdC1zaWduIixpY29uOlszODQsNTEyLFtdLCJlMWQ1IiwiTTE5MiAzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MS41QzczLjMgMTA5LjMgMCAxOTAuMSAwIDI4OEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtNjIuNSA0NC44LTExNC41IDEwNC0xMjUuOEwxNjggNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yOTMuOGM1OS4yIDExLjIgMTA0IDYzLjMgMTA0IDEyNS44bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC05Ny45LTczLjMtMTc4LjctMTY4LTE5MC41TDIxNiA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sRnNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNvcnQiLGljb246WzM4NCw1MTIsWyJ1bnNvcnRlZCJdLCJmMGRjIiwiTTIuNCAyMDQuMmM1IDEyIDE2LjYgMTkuOCAyOS42IDE5LjhsMzIwIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45em0wIDEwMy41Yy01IDEyLTIuMiAyNS43IDYuOSAzNC45bDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzNjQuOSAyODggMzUyIDI4OEwzMiAyODhjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5Ljh6Il19LGVrdD1Gc2UsT3NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1yYWRpYXRpb24iLGljb246WzUxMiw1MTIsWzk3NjIsInJhZGlhdGlvbi1hbHQiXSwiZjdiYSIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem04MCAwbDY0LjMgMGM4LjcgMCAxNS43LTcuMSAxNy4zLTE1LjYgNC40LTI0LjQgMTguMS00NS41IDM3LjItNTkuNyA3LjQtNS41IDEwLjYtMTUuNiA2LTIzLjZsLTMyLjUtNTYuM2MtNC4zLTcuNS0xMy45LTEwLjMtMjEuMi01LjUtNDguMiAzMS41LTgxLjMgODQuMi04Ni4zIDE0NC44LS43IDguOCA2LjUgMTYgMTUuMyAxNnptMTM3LjkgODkuOGMtOC41LTMuNy0xOC44LTEuNC0yMy41IDYuNmwtMzEgNTMuOGMtNC4zIDcuNS0xLjkgMTcuMiA1LjggMjEuMSAyNi4xIDEzLjIgNTUuNSAyMC43IDg2LjggMjAuN3M2MC43LTcuNSA4Ni44LTIwLjdjNy43LTMuOSAxMC4xLTEzLjYgNS44LTIxLjFsLTMxLTUzLjhjLTQuNi04LTE1LTEwLjMtMjMuNS02LjYtMTEuNyA1LTI0LjUgNy44LTM4LjEgNy44cy0yNi40LTIuOC0zOC4xLTcuOHpNMzUwLjQgMjQwLjRjMS42IDguNiA4LjUgMTUuNiAxNy4zIDE1LjZsNjQuMyAwYzguOCAwIDE2LjEtNy4yIDE1LjMtMTYtNS02MC42LTM4LjEtMTEzLjItODYuMy0xNDQuOC03LjMtNC44LTE2LjgtMi0yMS4yIDUuNUwzMDcuMyAxNTdjLTQuNiA4LTEuNCAxOC4xIDYgMjMuNiAxOS4xIDE0LjIgMzIuNyAzNS40IDM3LjIgNTkuN3pNMjU2IDMwNS43YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnoiXX0sdGt0PU9zZSxha3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGFwdG9wLWNvZGUiLGljb246WzY0MCw1MTIsW10sImY1ZmMiLCJNNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDAtNjQgMCAwLTI0MC0zODQgMCAwIDI0MC02NCAwIDAtMjQwek0wIDQwMy4yQzAgMzkyLjYgOC42IDM4NCAxOS4yIDM4NGw2MDEuNiAwYzEwLjYgMCAxOS4yIDguNiAxOS4yIDE5LjIgMCA0Mi40LTM0LjQgNzYuOC03Ni44IDc2LjhMNzYuOCA0ODBDMzQuNCA0ODAgMCA0NDUuNiAwIDQwMy4yek0yODEgMjA5bC0zMSAzMSAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00OC00OGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek0zOTMgMTc1bDQ4IDQ4YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC00OCA0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAweiJdfSxya3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2luayIsaWNvbjpbNTEyLDUxMixbXSwiZTA2ZCIsIk0yODggOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMiAxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzJjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAxOTItNjQgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtODAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwwIDY0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04MCAwIDAtNDBjMC00LjQgMy42LTggOC04bDU2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU2IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgNDAtNjQgMCAwLTE5MnoiXX0saWt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXVwLWZyb20td2F0ZXItcHVtcCIsaWNvbjpbNjQwLDUxMixbXSwiZTRiNiIsIk0xNDQgMzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTc2LTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNzkuNmMxNy42LTIgMzYgMi41IDUxLjMgMTQgMy40IDIuNiA2LjEgMS40IDkuOC0uM2wuOC0uNGM1LjctMi42IDEyLjktNi45IDIxLjctMTMuNSAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjMtMzEuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgMjIuMSAxNi42IDI5LjEgMTYuNiA1MS4yIDAgMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMzMuMS0uMiA2Ni4zIDEwLjIgOTQuNCAzMS40IDYuOSA1LjIgMTIuOCA5IDE4IDExLjcgLjYgLjMgMS4yIC42IDEuOCAxIDQuMiAyLjMgOC41IDQuNiAxMi42IDEuNSAxMC43LTguMSAyMi45LTEyLjcgMzUuMy0xNC4xbDAtNzkuNWMwLTI2LjUtMjEuNS00OC00OC00OGwtNTYgMCAwLTE0Mi4xIDQ3IDQ3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0OTcgMzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC04OCA4OGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDQ3LTQ3IDAgMTQyLjEtMTM2IDAgMC0xNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTQ0IDMyek00NzQuNiA0NzYuMWMxOSAxNC40IDQxLjkgMjguMiA2Ny4yIDMzLjMgMjYuNSA1LjQgNTQuMyAuOCA4MC43LTE5LjEgMTAuNi04IDEyLjctMjMgNC43LTMzLjZzLTIzLTEyLjctMzMuNi00LjdjLTE0LjkgMTEuMi0yOC42IDEzLjEtNDIuMyAxMC4zLTE0LjktMy0zMC45LTExLjktNDcuOC0yNC42LTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTIxLjYgMTYuMy00MS4zIDI1LjgtNTguOSAyNS43LTkuNi0uMS0xOS45LTMtMzEuMi0xMS41LTEwLjYtOC0yNS42LTUuOS0zMy42IDQuN1M3IDQ4Mi4zIDE3LjYgNDkwLjNjMTkuMSAxNC40IDM5LjQgMjEgNTkuOCAyMS4xIDMzLjkgLjIgNjQuMy0xNy40IDg4LjEtMzUuMyAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAweiJdfSxCc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWljcm9waG9uZS1saW5lcy1zbGFzaCIsaWNvbjpbNTc2LDUxMixbIm1pY3JvcGhvbmUtYWx0LXNsYXNoIl0sImY1MzkiLCJNNy0yNC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDE1MSAxNTEgMC0zMC4yYzAtNTMgNDMtOTYgOTYtOTYgNTAuMyAwIDkxLjYgMzguNyA5NS43IDg4TDMyOCA4OGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NiAwIDAgNDgtNTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NS43IDBjLTEuOSAyMi45LTExLjggNDMuNC0yNi45IDU5bDMzLjkgMzMuOWMyNS41LTI2IDQxLjMtNjEuNiA0MS4zLTEwMC45bDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwYzAgNTIuNi0yMS4xIDEwMC4yLTU1LjMgMTM0LjhMNTY5IDUwMy4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA5LjFDLTIuMy0uMy0yLjMtMTUuNSA3LTI0Ljl6TTI5Ny44IDM2Ny43bDQxLjQgNDEuNGMtOC44IDIuNC0xNy45IDQuMy0yNy4zIDUuNGwwIDQ5LjUgNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMCAwLTQ5LjVDMTY5LjMgNDAyLjcgOTYgMzIxLjkgOTYgMjI0bDAtNDBjMC01LjEgMS42LTkuOSA0LjQtMTMuOGw0My42IDQzLjYgMCAxMC4yYzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0IDMuMyAwIDYuNi0uMSA5LjgtLjN6Il19LG9rdD1Cc2Usc2t0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNlcnZlciIsaWNvbjpbNDQ4LDUxMixbXSwiZjIzMyIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjE2IDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNTYgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNjQgMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMjg4em0yMTYgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em01NiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdfSxHVj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyIixpY29uOls0NDgsNTEyLFsxMjgxMDAsNjIxNDQsNjI0NzAsInVzZXItYWx0IiwidXNlci1sYXJnZSJdLCJmMDA3IiwiTTIyNCAyNDhhMTIwIDEyMCAwIDEgMCAwLTI0MCAxMjAgMTIwIDAgMSAwIDAgMjQwem0tMjkuNyA1NkM5NS44IDMwNCAxNiAzODMuOCAxNiA0ODIuMyAxNiA0OTguNyAyOS4zIDUxMiA0NS43IDUxMmwzNTYuNiAwYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43IDAtOTguNS03OS44LTE3OC4zLTE3OC4zLTE3OC4zbC01OS40IDB6Il19LG5rdD1HVixsa3Q9R1YsY2t0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNub3dmbGFrZSIsaWNvbjpbNTEyLDUxMixbMTAwNTIsMTAwNTRdLCJmMmRjIiwiTTI4OC4yIDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2Mi4xLTE1LTE1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDQ5IDQ5IDAgNzAuNi02MS4yLTM1LjMtMTcuOS02Ni45Yy0zLjQtMTIuOC0xNi42LTIwLjQtMjkuNC0xN1M5NS4zIDk4IDk4LjcgMTEwLjhsNS41IDIwLjUtNTMuNy0zMUMzNS4yIDkxLjUgMTUuNiA5Ni43IDYuOCAxMTJzLTMuNiAzNC45IDExLjcgNDMuN2w1My43IDMxLTIwLjUgNS41Yy0xMi44IDMuNC0yMC40IDE2LjYtMTcgMjkuNHMxNi42IDIwLjQgMjkuNCAxN2w2Ni45LTE3LjkgNjEuMiAzNS4zLTYxLjIgMzUuMy02Ni45LTE3LjljLTEyLjgtMy40LTI2IDQuMi0yOS40IDE3czQuMiAyNiAxNyAyOS40bDIwLjUgNS41LTUzLjcgMzFDMy4yIDM2NS4xLTIgMzg0LjcgNi44IDQwMHMyOC40IDIwLjYgNDMuNyAxMS43bDUzLjctMzEtNS41IDIwLjVjLTMuNCAxMi44IDQuMiAyNiAxNyAyOS40czI2LTQuMiAyOS40LTE3bDE3LjktNjYuOSA2MS4yLTM1LjMgMCA3MC42LTQ5IDQ5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTUtMTUgMCA2Mi4xYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02Mi4xIDE1IDE1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDktNDkgMC03MC42IDYxLjIgMzUuMyAxNy45IDY2LjljMy40IDEyLjggMTYuNiAyMC40IDI5LjQgMTdzMjAuNC0xNi42IDE3LTI5LjRsLTUuNS0yMC41IDUzLjcgMzFjMTUuMyA4LjggMzQuOSAzLjYgNDMuNy0xMS43czMuNi0zNC45LTExLjctNDMuN2wtNTMuNy0zMSAyMC41LTUuNWMxMi44LTMuNCAyMC40LTE2LjYgMTctMjkuNHMtMTYuNi0yMC40LTI5LjQtMTdsLTY2LjkgMTcuOS02MS4yLTM1LjMgNjEuMi0zNS4zIDY2LjkgMTcuOWMxMi44IDMuNCAyNi00LjIgMjkuNC0xN3MtNC4yLTI2LTE3LTI5LjRsLTIwLjUtNS41IDUzLjctMzFjMTUuMy04LjggMjAuNi0yOC40IDExLjctNDMuN3MtMjguNC0yMC41LTQzLjctMTEuN2wtNTMuNyAzMSA1LjUtMjAuNWMzLjQtMTIuOC00LjItMjYtMTctMjkuNHMtMjYgNC4yLTI5LjQgMTdsLTE3LjkgNjYuOS02MS4yIDM1LjMgMC03MC42IDQ5LTQ5YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTE1IDE1IDAtNjIuMXoiXX0sZGt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNrdWxsLWNyb3NzYm9uZXMiLGljb246WzQ0OCw1MTIsWzEyODM2OSw5NzYwXSwiZjcxNCIsIk0zODQgMTQ0QzM4NCA2NC41IDMxMi40IDAgMjI0IDBTNjQgNjQuNSA2NCAxNDRjMCA0Ny4xIDI1LjEgODguOSA2NCAxMTUuMmwwIDI4LjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yOC44YzM4LjktMjYuMyA2NC02OC4xIDY0LTExNS4yek0xNjAgMTI4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNNDQ1LjUgMzM5LjdjLTYuOC0xNi4zLTI1LjUtMjQtNDEuOC0xNy4yTDIyNCAzOTcuMyA0NC4zIDMyMi41Yy0xNi4zLTYuOC0zNSAuOS00MS44IDE3LjJzLjkgMzUgMTcuMiA0MS44TDE0MC44IDQzMiAxOS43IDQ4Mi41QzMuNCA0ODkuMy00LjMgNTA4IDIuNSA1MjQuM3MyNS41IDI0IDQxLjggMTcuMkwyMjQgNDY2LjcgNDAzLjcgNTQxLjVjMTYuMyA2LjggMzUtLjkgNDEuOC0xNy4ycy0uOS0zNS0xNy4yLTQxLjhMMzA3LjIgNDMyIDQyOC4zIDM4MS41YzE2LjMtNi44IDI0LTI1LjUgMTcuMi00MS44eiJdfSxma3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVzby1zaWduIixpY29uOls0NDgsNTEyLFtdLCJlMjIyIiwiTTExMiAzMkM5NC4zIDMyIDgwIDQ2LjMgODAgNjRsMCA2NC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAzMi0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDk2IDBjNjUuNiAwIDEyMi0zOS41IDE0Ni43LTk2bDM3LjMgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQuOCAwYy41LTUuMyAuOC0xMC42IC44LTE2cy0uMy0xMC43LS44LTE2bDI0LjggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzcuMyAwQzM2MiA3MS41IDMwNS42IDMyIDI0MCAzMkwxMTIgMzJ6bTE5OS42IDk2bC0xNjcuNiAwIDAtMzIgOTYgMGMyOC40IDAgNTQgMTIuNCA3MS42IDMyek0xNDQgMTc2bDE5MC43IDBjLjkgNS4yIDEuMyAxMC41IDEuMyAxNnMtLjUgMTAuOC0xLjMgMTZsLTE5MC43IDAgMC0zMnptMTY3LjYgODBjLTE3LjYgMTkuNi00My4xIDMyLTcxLjYgMzJsLTk2IDAgMC0zMiAxNjcuNiAweiJdfSx1a3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2luZS1nbGFzcyIsaWNvbjpbMzIwLDUxMixbMTI3ODYzXSwiZjRlMyIsIk0zMi42IDI1LjdDMzUuNiAxMC44IDQ4LjcgMCA2NCAwTDI1NiAwYzE1LjMgMCAyOC40IDEwLjggMzEuNCAyNS43TDMxNi44IDE3M2MyLjEgMTAuNSAzLjIgMjEuMiAzLjIgMzJsMCAzYzAgNzcuNC01NSAxNDItMTI4IDE1Ni44bDAgMTE1LjIgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw2NCA1NDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMCAwLTExNS4yQzU1IDM1MCAwIDI4NS40IDAgMjA4bDAtM2MwLTEwLjcgMS4xLTIxLjQgMy4yLTMyTDMyLjYgMjUuN3pNNzcuNCAxMjhsMTY1LjEgMC0xMi44LTY0LTEzOS41IDAtMTIuOCA2NHoiXX0sZDc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGVtcGVyYXR1cmUtaGFsZiIsaWNvbjpbMzIwLDUxMixbMTI3Nzc3LCJ0ZW1wZXJhdHVyZS0yIiwidGhlcm1vbWV0ZXItMiIsInRoZXJtb21ldGVyLWhhbGYiXSwiZjJjOSIsIk0xNjAgMEMxMDcgMCA2NCA0MyA2NCA5NmwwIDE2NC43QzM0LjUgMjg3IDE2IDMyNS40IDE2IDM2OCAxNiA0NDcuNSA4MC41IDUxMiAxNjAgNTEyczE0NC02NC41IDE0NC0xNDRjMC00Mi42LTE4LjUtODEtNDgtMTA3LjNMMjU2IDk2YzAtNTMtNDMtOTYtOTYtOTZ6bTY0IDM2OGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTI2LjkgMTYuNS00OS45IDQwLTU5LjNsMC05Mi43YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA5Mi43YzIzLjUgOS41IDQwIDMyLjUgNDAgNTkuM3oiXX0scGt0PWQ3LGhrdD1kNyxta3Q9ZDcsZ2t0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRpY2tldCIsaWNvbjpbNTc2LDUxMixbMTI3OTAzXSwiZjE0NSIsIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOGwwIDY0QzAgMjAwLjggNy40IDIwNy43IDE1LjcgMjEwLjYgMzQuNSAyMTcuMSA0OCAyMzUgNDggMjU2cy0xMy41IDM4LjktMzIuMyA0NS40QzcuNCAzMDQuMyAwIDMxMS4yIDAgMzIwbDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTguOC03LjQtMTUuNy0xNS43LTE4LjYtMTguOC02LjUtMzIuMy0yNC40LTMyLjMtNDUuNHMxMy41LTM4LjkgMzIuMy00NS40YzguMy0yLjkgMTUuNy05LjggMTUuNy0xOC42bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6TTQxNiAzMzZsMC0xNjAtMjU2IDAgMCAxNjAgMjU2IDB6TTExMiAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTI4OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE5MnoiXX0seGt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndoZWF0LWF3bi1jaXJjbGUtZXhjbGFtYXRpb24iLGljb246WzY0MCw1MTIsW10sImU1OTgiLCJNNDk2IDU3NmExNDQgMTQ0IDAgMSAxIDAtMjg4IDE0NCAxNDQgMCAxIDEgMCAyODh6TTgxIDUyOWMtOS40IDkuMy0yNC41IDkuMy0zMy45IDAtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMODEgNTI5em0zMC4yLTI5NC40YzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsNDYuMSA0Ni4xIDYuMSA2LjdjMTkuNyAyMy44IDI2LjMgNTUgMTkuMyA4My45IDMxLjctNy43IDY2LjIgMSA5MC42IDI1LjNsMTIgMTJjLS44IDctMS4yIDE0LjItMS4yIDIxLjQgMCAyMCAzIDM5LjMgOC43IDU3LjQtMzYuOCAyMS44LTg1IDE3LTExNi42LTE0LjdMMTY1LjYgNDQ0LjMgODEgNTI5QzY5LjcgNTE3LjcgNTguNCA1MDYuMyA0NyA0OTVsODQuNy04NC43LTMwLjUtMzAuNWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXpNNDk2IDQ3NmEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6bTAtMTQwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTYgOC44IDAgMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2ek0yMTUuMiAxMzAuNmM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDQ2LjEgNDYuMSA2LjEgNi43YzE5LjcgMjMuOCAyNi4zIDU1IDE5LjMgODMuOSAyNC4yLTUuOSA1MC4xLTIuMSA3MS45IDEwLjgtMzIuMiAyNC45LTU2LjIgNTkuOC02Ny40IDEwMC4xLTMuOC0yLjgtNy41LTYtMTEtOS41bC05NC45LTk0LjljLTM3LjUtMzcuNS0zNy41LTk4LjMgMC0xMzUuN2w3LjQtNy40IDIuNS0yLjF6TTUyNi43IDE1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwIDguOCA4LjggOS4zIDIyLjcgMS43IDMyLjFMNTYwLjYgNDkgNDQ2LjIgMTYzLjRjNy43IDEgMTUuMyAzIDIyLjUgNS45TDUyNyAxMTFjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjFsLTEuNyAxLjgtNTIuNyA1Mi43IDM5IDM5YzMuMiAzLjIgNC43IDcuNCA0LjcgMTEuNi0xNy43LTUuNC0zNi41LTguMy01NS45LTguMy0zNC4yIDAtNjYuMyA4LjktOTQuMSAyNC42bC05Mi43LTkyLjdjLTM3LjUtMzcuNS0zNy41LTk4LjMgMC0xMzUuOGw3LjQtNy40IDIuNS0yLjFjNi4yLTQuMSAxNC43LTMuNCAyMC4xIDIuMWwzOSAzOSA1Mi43LTUyLjdjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjFMNDY1IDQ5IDQwNi43IDEwNy4zYzIuOCA3LjEgNC43IDE0LjUgNS44IDIyLjFMNTI2LjcgMTV6Il19LGJrdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvd3MtdHVybi1yaWdodCIsaWNvbjpbNDQ4LDUxMixbXSwiZTRjMCIsIk0zMTMuNC02LjZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wzMzguNyAxMjggMTI4IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDI0MS43IDAgMjI0bDAtMzJDMCAxMjEuMyA1Ny4zIDY0IDEyOCA2NGwyMTAuNyAwLTI1LjQtMjUuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6bS05NiAyNTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDIuNyAzODQgOTYgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhsMC0zMmMwLTUzIDQzLTk2IDk2LTk2bDE0Ni43IDAtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3oiXX0sdmt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbmR5LWNhbmUiLGljb246WzQ0OCw1MTIsW10sImY3ODYiLCJNNDIxLjggMzkuNkM0NTIgODUuMiA0NTYuNSAxNDIuOSA0MzUuMSAxOTJsLTE2NS40IDAgNDEuNC00MS40Yy44LS44IDEuNS0xLjYgMi4yLTIuNEw0MjEuOCAzOS42ek0yNjggMTAyLjljLS44IC43LTEuNiAxLjQtMi40IDIuMmwtMjguMSAyOC4xYy0yNSAyNS02NS41IDI1LTkwLjUgMHMtMjUtNjUuNSAwLTkwLjVMMTc1IDE0LjZDMjI5LjktNDAuMiAzMTQuNS00Ni43IDM3Ni41LTUuNkwyNjggMTAyLjl6TTEyNS43IDMzNmw4MC04MCAxODEgMC04Mi41IDgyLjUgMC0yLjUtMTc4LjUgMHptMTE3IDY0TDE0MS40IDUwMS4zYy0yNSAyNS02NS41IDI1LTkwLjUgMHMtMjUtNjUuNSAwLTkwLjVsMTAuNy0xMC43IDE4MSAweiJdfSx5a3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2hlZWxjaGFpciIsaWNvbjpbNTEyLDUxMixbXSwiZjE5MyIsIk0xMzYgNDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMTcuOSAxOTcuNmwxMi42IDYzYy0zOC42IDEyLjQtNjYuNSA0OC43LTY2LjUgOTEuNCAwIDUzIDQzIDk2IDk2IDk2IDM1LjYgMCA2Ni43LTE5LjQgODMuMy00OC4yIDIuMyAuMSA0LjYgLjIgNyAuMmw0LjEgMGMxIDAgMi4xIDAgMy4xIDBsNTUuMiAwYy0yMC40IDY0LjktODEgMTEyLTE1Mi43IDExMi04OC40IDAtMTYwLTcxLjYtMTYwLTE2MCAwLTczLjggNTAtMTM1LjkgMTE3LjktMTU0LjR6bTE0OC42LTI4LjFsMjMuNyAxMTguNSA2MC41IDBjMzMuMyAwIDYzLjIgMjAuNyA3NC45IDUxLjlsMjUuNSA2OCAxOC43LTYuMmMxNi44LTUuNiAzNC45IDMuNSA0MC41IDIwLjJzLTMuNSAzNC45LTIwLjIgNDAuNWwtNDggMTZjLTE2LjMgNS40LTM0LTMtNDAuMS0xOS4xbC0zNi4zLTk2LjljLTIuMy02LjItOC4zLTEwLjQtMTUtMTAuNGwtODYuMSAwYy0uNCAwLS44IDAtMS4zIDBsLTEzLjEgMGMtMzAuNSAwLTU2LjgtMjEuNS02Mi44LTUxLjRMMTY1LjMgMTg5LjdjLTYuNC0zMS45IDE4LTYxLjcgNTAuNi02MS43IDI0LjYgMCA0NS44IDE3LjQgNTAuNiA0MS41eiJdfSx3a3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3BlbGwtY2hlY2siLGljb246WzU3Niw1MTIsW10sImY4OTEiLCJNMTIwIDMyYy00OC42IDAtODggMzkuNC04OCA4OGwwIDE2OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjQgNjQgMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjhjMC00OC42LTM5LjQtODgtODgtODhsLTE2IDB6bTQwIDEyOGwtNjQgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MHpNMzA0IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDIyNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw3MiAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4IDAtMjMuNi05LjMtNDUtMjQuNC02MC44IDEwLjMtMTQuNCAxNi40LTMyLjEgMTYuNC01MS4yIDAtNDguNi0zOS40LTg4LTg4LTg4bC02NCAwem02NCAxMTJsLTMyIDAgMC00OCAzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0ek0zMzYgMjU2bDAtNDggNDAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDAgMHptMjMzIDg0YzExLTEzLjggOC44LTMzLjktNS00NXMtMzMuOS04LjgtNDUgNWwtMTA1LjcgMTMyLjEtMzguNy0zOC43Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGM2LjQgNi40IDE1LjMgOS44IDI0LjQgOS4zczE3LjUtNC45IDIzLjItMTJMNTY5IDM0MHoiXX0sTWt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZvbHVtZS1vZmYiLGljb246WzMyMCw1MTIsW10sImYwMjYiLCJNOTYgMzUybC00OCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDQ4IDAgMTM0LjEtMTE5LjJjNi40LTUuNyAxNC42LTguOCAyMy4xLTguOCAxOS4yIDAgMzQuOCAxNS42IDM0LjggMzQuOGwwIDM3OC40YzAgMTkuMi0xNS42IDM0LjgtMzQuOCAzNC44LTguNSAwLTE2LjctMy4xLTIzLjEtOC44TDk2IDM1MnoiXX0semt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imx1bmdzIixpY29uOls1NzYsNTEyLFsxMjk3MjldLCJmNjA0IiwiTTMyMCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE0MS45LTMyIDE5LjIgMC0xMTYuN2MwLTI0LjUtMTkuOS00NC40LTQ0LjQtNDQuNC0xMi41IDAtMjQuNCA1LjMtMzIuOCAxNC41bC0yNi40IDI5QzQyLjkgMTYwLjggMCAyNzEuOCAwIDM4N2wwIDMwLjVjMCA1Mi4yIDQyLjMgOTQuNSA5NC41IDk0LjUgMjIgMCA0My43LTUuMSA2My40LTE1bDUtMi41YzM3LjQtMTguNyA2MS01Ni45IDYxLTk4LjhsMC0xMjggNjQtMzguNCA2NCAzOC40IDAgMTI4YzAgNDEuOCAyMy42IDgwLjEgNjEgOTguOGw1IDIuNWMxOS43IDkuOCA0MS40IDE1IDYzLjQgMTUgNTIuMiAwIDk0LjUtNDIuMyA5NC41LTk0LjVsMC02LjJjMC0xMTEuMS0zNi43LTIxOS0xMDQuNC0zMDdMNDI4LjkgNDguN2MtOC4xLTEwLjYtMjAuNy0xNi43LTM0LTE2LjctMjMuNyAwLTQyLjkgMTkuMi00Mi45IDQyLjlsMCAxMTguMi0zMi0xOS4yIDAtMTQxLjl6Il19LGtrdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib29rbWFyayIsaWNvbjpbMzg0LDUxMixbMTI4Mjc4LDYxNTkxXSwiZjAyZSIsIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ4MGMwIDExLjUgNi4yIDIyLjIgMTYuMiAyNy44czIyLjMgNS41IDMyLjItLjRMMTkyIDQyMS4zIDMzNS41IDUwNy40YzkuOSA1LjkgMjIuMiA2LjEgMzIuMiAuNFMzODQgNDkxLjUgMzg0IDQ4MGwwLTQxNmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAweiJdfSxTa3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFyY29kZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjAyYSIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJ6bTg4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDBjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTcyIDMybDAgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6bTIwOC04bDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6bS05NiAwbDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il19LFlWPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imxpc3Qtb2wiLGljb246WzUxMiw1MTIsWyJsaXN0LTEtMiIsImxpc3QtbnVtZXJpYyJdLCJmMGNiIiwiTTAgNzJDMCA1OC44IDEwLjcgNDggMjQgNDhsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDEwNCAyNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC05NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI0IDAgMC04MC0yNCAwQzEwLjcgOTYgMCA4NS4zIDAgNzJ6TTMwLjQgMzAxLjJDNDEuOCAyOTIuNiA1NS43IDI4OCA3MCAyODhsNC45IDBjMzMuNyAwIDYxLjEgMjcuNCA2MS4xIDYxLjEgMCAxOS42LTkuNCAzNy45LTI1LjIgNDkuNGwtMjQgMTcuNSAzMy4yIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTkwLjcgMEMxMy4xIDQ2NCAwIDQ1MC45IDAgNDM0LjcgMCA0MjUuMyA0LjUgNDE2LjUgMTIuMSA0MTFsNzAuNS01MS4zYzMuNC0yLjUgNS40LTYuNCA1LjQtMTAuNiAwLTcuMi01LjktMTMuMS0xMy4xLTEzLjFMNzAgMzM2Yy0zLjkgMC03LjcgMS4zLTEwLjggMy42TDM4LjQgMzU1LjJjLTEwLjYgOC0yNS42IDUuOC0zMy42LTQuOFMtMSAzMjQuOCA5LjYgMzE2LjhsMjAuOC0xNS42ek0yMjQgNjRsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDE2MGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTYwbDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXX0sQ2t0PVlWLExrdD1ZVixUa3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1jaXJjbGUteG1hcmsiLGljb246WzU3Niw1MTIsW10sImU1YTEiLCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMjIuNy0zMS41LTM2LTcwLjItMzYtMTEyIDAtMTAwLjYgNzcuNC0xODMuMiAxNzYtMTkxLjNsMC0zOC4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXX0sX2t0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImN1YmUiLGljb246WzUxMiw1MTIsW10sImYxYjIiLCJNMjI0LjMtMi41YzE5LjgtMTEuNCA0NC4yLTExLjQgNjQgMEw0NjQuMiA5OWMxOS44IDExLjQgMzIgMzIuNiAzMiA1NS40bDAgMjAzYzAgMjIuOS0xMi4yIDQ0LTMyIDU1LjRMMjg4LjMgNTE0LjVjLTE5LjggMTEuNC00NC4yIDExLjQtNjQgMEw0OC41IDQxM2MtMTkuOC0xMS40LTMyLTMyLjYtMzItNTUuNGwwLTIwM2MwLTIyLjkgMTIuMi00NCAzMi01NS40TDIyNC4zLTIuNXptMjA3LjggMzYwbDAtMTY2LjEtMTQzLjggODMgMCAxNjYuMSAxNDMuOC04M3oiXX0sQWt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhcGUiLGljb246WzU3Niw1MTIsW10sImY0ZGIiLCJNNDEyLjggNDE2YzQxLjUtNDAuNyA2Ny4yLTk3LjMgNjcuMi0xNjAgMC0xMjMuNy0xMDAuMy0yMjQtMjI0LTIyNFMzMiAxMzIuMyAzMiAyNTYgMTMyLjMgNDgwIDI1NiA0ODBsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEzMS4yIDB6TTI1NiAxNjBhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTQ4IDk2YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il19LCRrdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib21iIixpY29uOls1NzYsNTEyLFsxMjgxNjNdLCJmMWUyIiwiTTQ4MC0xNmM2LjkgMCAxMyA0LjQgMTUuMiAxMC45bDEzLjUgNDAuNCA0MC40IDEzLjVDNTU1LjYgNTEgNTYwIDU3LjEgNTYwIDY0cy00LjQgMTMtMTAuOSAxNS4ybC00MC40IDEzLjUtMTMuNSA0MC40QzQ5MyAxMzkuNiA0ODYuOSAxNDQgNDgwIDE0NHMtMTMtNC40LTE1LjItMTAuOWwtMTMuNS00MC40LTQwLjQtMTMuNUM0MDQuNCA3NyA0MDAgNzAuOSA0MDAgNjRzNC40LTEzIDEwLjktMTUuMmw0MC40LTEzLjUgMTMuNS00MC40QzQ2Ny0xMS42IDQ3My4xLTE2IDQ4MC0xNnpNMzIxLjQgOTcuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTAuOSAxMC45YzcuOSAyMiAxMi4yIDQ1LjcgMTIuMiA3MC41IDAgMTE0LjktOTMuMSAyMDgtMjA4IDIwOFMzMiA0MTguOSAzMiAzMDQgMTI1LjEgOTYgMjQwIDk2YzI0LjcgMCA0OC41IDQuMyA3MC41IDEyLjNsMTAuOS0xMC45ek0xNDQgMzA0YzAtNTMgNDMtOTYgOTYtOTYgMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6Il19LFJzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzY2FsZS11bmJhbGFuY2VkIixpY29uOls2NDAsNTEyLFsiYmFsYW5jZS1zY2FsZS1sZWZ0Il0sImY1MTUiLCJNNTE5LjggNjIuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41UzUxNi4zLTMuOSA0OTkuNiAxLjZsLTExMyAzNy43Yy0xMy45LTIzLjUtMzkuNi0zOS4zLTY4LjktMzkuMy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDMgLjIgNS45IC41IDguOEwxMTUuNiAxMjkuNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDEzNS41LTQ1LjJjNC41IDMuMiA5LjMgNS45IDE0LjQgOC4ybDAgMzI2LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMjk0LjdjMjEtOS4yIDM3LjItMjcgNDQuMi00OWwxMjUuOS00MnpNNDM3LjMgMjg4bDcyLjQtMTI0LjIgNzIuNCAxMjQuMi0xNDQuOSAwem03Mi40IDk2YzYyLjkgMCAxMTUuMi0zNCAxMjYtNzguOSAyLjYtMTEtMS0yMi4zLTYuNy0zMi4xTDUzMy44IDEwOS44Yy01LTguNi0xNC4yLTEzLjgtMjQuMS0xMy44cy0xOS4xIDUuMy0yNC4xIDEzLjhMMzkwLjQgMjczLjFjLTUuNyA5LjgtOS4zIDIxLjEtNi43IDMyLjEgMTAuOCA0NC44IDYzLjEgNzguOSAxMjYgNzguOXpNMTI2LjggMjkxLjhsNzIuNCAxMjQuMi0xNDQuOSAwIDcyLjQtMTI0LjJ6TS45IDQzMy4xQzExLjcgNDc4IDY0IDUxMiAxMjYuOCA1MTJzMTE1LjItMzQgMTI2LTc4LjljMi42LTExLTEtMjIuMy02LjctMzIuMUwxNTAuOSAyMzcuOGMtNS04LjYtMTQuMi0xMy44LTI0LjEtMTMuOHMtMTkuMSA1LjMtMjQuMSAxMy44TDcuNiA0MDEuMWMtNS43IDkuOC05LjMgMjEuMS02LjcgMzIuMXoiXX0sRGt0PVJzZSxIc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLWNhcmV0LWxlZnQiLGljb246WzQ0OCw1MTIsWyJjYXJldC1zcXVhcmUtbGVmdCJdLCJmMTkxIiwiTTAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZ6TTEyOCAyNTZjMC02LjcgMi44LTEzIDcuNy0xNy42bDExMi0xMDRjNy02LjUgMTcuMi04LjIgMjUuOS00LjRTMjg4IDE0Mi41IDI4OCAxNTJsMCAyMDhjMCA5LjUtNS43IDE4LjItMTQuNCAyMnMtMTguOSAyLjEtMjUuOS00LjRsLTExMi0xMDRjLTQuOS00LjUtNy43LTEwLjktNy43LTE3LjZ6Il19LEVrdD1Ic2UsTmt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJ1bGVyIixpY29uOls1NzYsNTEyLFsxMjgyMDddLCJmNTQ1IiwiTTIwOS4xIDUxNi4yYy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMEwyOC4xIDQwMy4xYy0xOC43LTE4LjctMTguNy00OS4xIDAtNjcuOWwxNy0xNyA3My41IDczLjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03My41LTczLjUgMzMuOS0zMy45IDUwLjkgNTAuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTUwLjktNTAuOSAzMy45LTMzLjkgNzMuNSA3My41YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzMuNS03My41IDMzLjktMzMuOSA1MC45IDUwLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01MC45LTUwLjkgMzMuOS0zMy45IDczLjUgNzMuNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTczLjUtNzMuNSAxNy0xN2MxOC43LTE4LjcgNDkuMS0xOC43IDY3LjkgMEw1NDguNSAxMDguOWMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOUwyMDkuMSA1MTYuMnoiXX0sUGt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImkiLGljb246WzMyMCw1MTIsWzEwNV0sIjQ5IiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw5NiAwIDAgMzIwLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDAgMC0zMjAgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnoiXX0sWlY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidm9sdW1lLXhtYXJrIixpY29uOls1NzYsNTEyLFsidm9sdW1lLW11dGUiLCJ2b2x1bWUtdGltZXMiXSwiZjZhOSIsIk00OCAzNTJsNDggMCAxMzQuMSAxMTkuMmM2LjQgNS43IDE0LjYgOC44IDIzLjEgOC44IDE5LjIgMCAzNC44LTE1LjYgMzQuOC0zNC44bDAtMzc4LjRjMC0xOS4yLTE1LjYtMzQuOC0zNC44LTM0LjgtOC41IDAtMTYuNyAzLjEtMjMuMSA4LjhMOTYgMTYwIDQ4IDE2MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OHpNMzY3IDE3NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNDcgNDctNDcgNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0Ny00NyA0NyA0N2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ3LTQ3IDQ3LTQ3YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTQ3IDQ3LTQ3LTQ3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXX0sSWt0PVpWLEZrdD1aVixPa3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJjaHdheSIsaWNvbjpbNTEyLDUxMixbXSwiZjU1NyIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6bTAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwIDAtMTI4YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxMjggMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0yNzItNDQ4IDAgMCAyNzJ6Il19LHFzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tZGlnZ2luZyIsaWNvbjpbNTc2LDUxMixbImRpZ2dpbmciXSwiZjg1ZSIsIk0yMDggNDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMC41IDE4MS4zYzUuOS0xMS45IDIwLjMtMTYuNyAzMi4yLTEwLjdsMjQuNiAxMi4zIDEyLjItMjAuNGMxOC45LTMxLjUgNTMuMi01MC41IDg5LjYtNTAuNSA0Ni4yIDAgODcuNyAzMC41IDEwMC41IDc1LjRsMzIuMiAxMTIuNyA5Mi45IDQ2LjQgMjUuOC00M2M1LjgtOS42IDE2LjItMTUuNSAyNy40LTE1LjVzMjEuNyA1LjkgMjcuNCAxNS41bDk2IDE2MGM1LjkgOS45IDYuMSAyMi4yIC40IDMyLjJTNTU1LjUgNTEyIDU0NCA1MTJsLTE5MiAwYy0xMS41IDAtMjIuMi02LjItMjcuOC0xNi4ycy01LjUtMjIuMyAuNC0zMi4yTDM3MCAzODcuOCAyMS4zIDIxMy41Yy0xMS45LTUuOS0xNi43LTIwLjMtMTAuNy0zMi4yek05NC4zIDMwNy40bDExMiA1NmMxMC44IDUuNCAxNy43IDE2LjUgMTcuNyAyOC42bDAgODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02OC4yLTYxLjMtMzAuNy0zNi4zIDEwOWMtNS42IDE2LjgtMjMuNyAyNS44LTQwLjUgMjAuMlMtMy45IDQ4Ni42IDEuNyA0NjkuOWw0OC0xNDRjMi45LTguOCA5LjUtMTUuOSAxOC4xLTE5LjRzMTguMy0zLjIgMjYuNiAuOXoiXX0sQmt0PXFzZSxYVj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnYXVnZS1oaWdoIixpY29uOls1MTIsNTEyLFs2MjQ2MSwidGFjaG9tZXRlci1hbHQiLCJ0YWNob21ldGVyLWFsdC1mYXN0Il0sImY2MjUiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMjg4IDk2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTI1NiA0MTZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0xNi4yLTYtMzEuMS0xNi00Mi4zbDY5LjUtMTM4LjljNS45LTExLjkgMS4xLTI2LjMtMTAuNy0zMi4ycy0yNi4zLTEuMS0zMi4yIDEwLjdMMjYxLjEgMjg4LjJjLTEuNy0uMS0zLjQtLjItNS4xLS4yLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjR6TTE3NiAxNDRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNOTYgMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzUyLTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il19LFJrdD1YVixIa3Q9WFYscWt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdlbmRlcmxlc3MiLGljb246WzM4NCw1MTIsW10sImYyMmQiLCJNMTkyIDEyOGExMjggMTI4IDAgMSAxIDAgMjU2IDEyOCAxMjggMCAxIDEgMC0yNTZ6bTAgMzIwYTE5MiAxOTIgMCAxIDAgMC0zODQgMTkyIDE5MiAwIDEgMCAwIDM4NHoiXX0sVmt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNsb3VkLXN1biIsaWNvbjpbNTc2LDUxMixbOTkyNV0sImY2YzQiLCJNNDUzLjYtMTQuOGM0LjkgMiA4LjUgNi40IDkuNSAxMS42TDQ4MCA4MCA1NjMuMiA5Ni44YzUuMiAxLjEgOS41IDQuNiAxMS42IDkuNXMxLjUgMTAuNS0xLjQgMTQuOWwtNDYuOSA3MC43IDQ2LjkgNzAuN2MyLjkgNC40IDMuNSAxMCAxLjQgMTQuOXMtNi40IDguNS0xMS42IDkuNUw1MDEgMjk5LjdjLTExLjktOC43LTI1LjEtMTUuNi0zOS40LTIwLjQtMi41LTEyLjctNi44LTI0LjctMTIuNy0zNS43IDkuNS0xNC45IDE1LjEtMzIuNiAxNS4xLTUxLjcgMC01My00My05Ni05Ni05Ni00Ny45IDAtODcuNiAzNS4xLTk0LjggODAuOS0yNi41LTIwLjMtNTkuNS0zMi41LTk1LjQtMzIuOWwtMTUuMS0yMi43Yy0yLjktNC40LTMuNS0xMC0xLjQtMTQuOXM2LjQtOC41IDExLjYtOS41TDI1NiA4MCAyNzIuOC0zLjJjMS4xLTUuMiA0LjYtOS41IDkuNS0xMS42czEwLjUtMS41IDE0LjkgMS40TDM2OCAzMy42IDQzOC43LTEzLjNjNC40LTIuOSAxMC0zLjUgMTQuOS0xLjR6TTQxNiAxOTJjMCAzLjgtLjQgNy41LTEuMyAxMS4xLTIxLjctMTctNDktMjcuMS03OC43LTI3LjEtNC42IDAtOS4xIC4yLTEzLjUgLjcgNi40LTE5IDI0LjQtMzIuNyA0NS41LTMyLjcgMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTk2IDUxMmMtNTMgMC05Ni00My05Ni05NiAwLTQyLjUgMjcuNi03OC42IDY1LjktOTEuMi0xLjMtNi43LTEuOS0xMy43LTEuOS0yMC44IDAtNjEuOSA1MC4xLTExMiAxMTItMTEyIDQzLjEgMCA4MC41IDI0LjMgOTkuMiA2MCAxNC43LTE3LjEgMzYuNS0yOCA2MC44LTI4IDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgNS41LS42IDEwLjgtMS42IDE2IC41IDAgMS4xIDAgMS42IDAgNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZMOTYgNTEyeiJdfSxPVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1yaWdodCIsaWNvbjpbNTEyLDUxMixbODU5NF0sImYwNjEiLCJNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcwLjcgMC0xMDUuNCAxMDUuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYweiJdfSxRVj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kc2hha2UiLGljb246WzU3Niw1MTIsWzEyOTMwOSw2MjY2MiwiaGFuZHNoYWtlLWFsdCIsImhhbmRzaGFrZS1zaW1wbGUiXSwiZjJiNSIsIk0yNjguOSA4NS4yTDE1Mi4zIDIxNC44Yy00LjYgNS4xLTQuNCAxMyAuNSAxNy45IDMwLjUgMzAuNSA4MCAzMC41IDExMC41IDBsMzEuOC0zMS44YzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM3NiA1NzYgMzIwIDU3NiAzMiA0NjQgOTYgNDQwLjIgODAuMUM0MjQuNCA2OS42IDQwNS45IDY0IDM4Ni45IDY0bC03MC40IDBjLTEuMSAwLTIuMyAwLTMuNCAuMS0xNi45IC45LTMyLjggOC41LTQ0LjIgMjEuMXpNMTE2LjYgMTgyLjdMMjIzLjQgNjQgMTgzLjggNjRjLTI1LjUgMC00OS45IDEwLjEtNjcuOSAyOC4xTDExMiA5NiAwIDMyIDAgMzIwIDE1Ni40IDQ1MC4zYzIzIDE5LjIgNTIgMjkuNyA4MS45IDI5LjdsMTUuNyAwLTctN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQxIDQxIDkgMGMxOS4xIDAgMzcuOC00LjMgNTQuOC0xMi4zTDM1OSA0NDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMiAzMiAxNy41LTE3LjVjOC45LTguOSAxMS41LTIxLjggNy42LTMzLjFsLTEzNy45LTEzNi44LTE0LjkgMTQuOWMtNDkuMyA0OS4zLTEyOS4xIDQ5LjMtMTc4LjQgMC0yMy0yMy0yMy45LTU5LjktMi4yLTg0eiJdfSxVa3Q9UVYsamt0PVFWLFZzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tc2tpaW5nIixpY29uOls1NzYsNTEyLFs5OTc1LCJza2lpbmciXSwiZjdjOSIsIk00MTYgNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0yLjcgMzAwLjljNi4xLTExLjggMjAuNi0xNi4zIDMyLjQtMTAuMmwxOTcuOCAxMDIuNyA2Mi4zLTg3LjItODItOTIuMmMtMTEtMTIuNC0xNi4yLTI3LjUtMTYuMi00Mi40bDExMS42IDUzLjQgNDIuOSA0OC4yYzE0LjkgMTYuNyAxNi4yIDQxLjYgMy4yIDU5LjhsLTY0LjQgOTAuMiAxMjguMyA2Ni42YzEzLjYgNy4xIDI5LjggNy4yIDQzLjYgLjNsMTUuMi03LjZjMTEuOS01LjkgMjYuMy0xLjEgMzIuMiAxMC43czEuMSAyNi4zLTEwLjcgMzIuMmwtMTUuMiA3LjZjLTI3LjUgMTMuNy01OS45IDEzLjUtODcuMi0uN0wxMi45IDMzMy4zQzEuMiAzMjcuMi0zLjQgMzEyLjcgMi43IDMwMC45ek0xMDMgNDkuNmwxOCA4LjcgOC43LTE3LjRjNC03LjkgMTMuNi0xMS4xIDIxLjUtNy4yczExLjEgMTMuNiA3LjIgMjEuNWwtOC41IDE3IDg0LjggNDEgLjQtLjIgNzYuMS0zMy44YzMxLjMtMTMuOSA2Ny45LS43IDgzLjIgMjkuOWwyOC45IDU3LjggNjguNyAyNy41YzE2LjQgNi42IDI0LjQgMjUuMiAxNy44IDQxLjZzLTI1LjIgMjQuNC00MS42IDE3LjhMMzkzLjggMjI0Yy0xMC45LTQuNC0xOS44LTEyLjYtMjUuMS0yMy4xbC0xMS41LTIzLjFjLTE2LjQgOS40LTI1LjkgMTQuOC0yOC41IDE2LjNsLTcuNi0zLjctMTg1LjYtODkuNi05LjIgMTguM2MtNCA3LjktMTMuNiAxMS4xLTIxLjUgNy4ycy0xMS4xLTEzLjYtNy4yLTIxLjVsOS0xNy45LTE3LjYtOC41QzgxLjEgNzQuNiA3Ny44IDY1IDgxLjYgNTdTOTUgNDUuNyAxMDMgNDkuNnoiXX0sV2t0PVZzZSxHa3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnJpZGdlLXdhdGVyIixpY29uOls2NDAsNTEyLFtdLCJlNGNlIiwiTTY0IDY0bDUxMiAwIDAgMTEyYy0zNy42IDkuNC02NCA0My4yLTY0IDgybDAgNzYuNGMtMjEtOS43LTQzLjUtMTQuNS02Ni0xNC40LTEwIC4xLTIwLjEgMS4xLTMwIDMuMWwwLTM1LjFjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMi43Yy01LjMtLjUtMTAuNy0uOC0xNi0uNy0yNy43IC4yLTU1LjQgNy44LTgwIDIzbDAtODVjMC0zOC44LTI2LjQtNzIuNi02NC04Mkw2NCA2NHpNNDAzLjQgNDQ0LjFDMzc5LjEgNDYyLjMgMzUxLjEgNDgwIDMyMCA0ODBzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdfSxZa3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVpbGRpbmctbmdvIixpY29uOls1NzYsNTEyLFtdLCJlNGQ3IiwiTTEyOCAwQzkyLjcgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ4IDAgMC0xMTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjA4IDAgMC0yNzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTI4IDB6bTMyIDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0zMDQgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTYwIDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNTIwIDM4MGMtMjQuMyAwLTQ0IDE5LjctNDQgNDRsMCA4MGMwIDI0LjMgMTkuNyA0NCA0NCA0NGwxNiAwYzI0LjMgMCA0NC0xOS43IDQ0LTQ0bDAtODBjMC0yNC4zLTE5LjctNDQtNDQtNDRsLTE2IDB6bS00IDQ0YzAtMi4yIDEuOC00IDQtNGwxNiAwYzIuMiAwIDQgMS44IDQgNGwwIDgwYzAgMi4yLTEuOCA0LTQgNGwtMTYgMGMtMi4yIDAtNC0xLjgtNC00bDAtODB6bS0xNjggMGwwIDgwYzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDE2IDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC0yNGMwLTExLTktMjAtMjAtMjBsLTggMGMtMTEgMC0yMCA5LTIwIDIwIDAgNi41IDMuMSAxMi40IDggMTZsMCA4YzAgMi4yLTEuOCA0LTQgNGwtMTYgMGMtMi4yIDAtNC0xLjgtNC00bDAtODBjMC0yLjIgMS44LTQgNC00bDIwLjQgMGMxLjkgOS4xIDkuOSAxNiAxOS42IDE2IDExIDAgMjAtOSAyMC0yMCAwLTE5LjktMTYuMS0zNi0zNi0zNmwtMjQgMGMtMjQuMyAwLTQ0IDE5LjctNDQgNDR6bS05MC4xLTMyLjljLTQuMS04LjMtMTMuNS0xMi43LTIyLjUtMTAuNVMyMjAgMzkwLjcgMjIwIDQwMGwwIDEyOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQzLjMgMjYuMSA1Mi4yYzQuMSA4LjMgMTMuNSAxMi43IDIyLjUgMTAuNVMzMjQgNTM3LjMgMzI0IDUyOGwwLTEyOGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCA0My4zLTI2LjEtNTIuMnoiXX0sWmt0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImlnbG9vIixpY29uOls1NzYsNTEyLFtdLCJmN2FlIiwiTTMyMCAzMy44bDAgMTI2LjItMjcxLjUgMGM1MS43LTc3LjIgMTM5LjYtMTI4IDIzOS41LTEyOCAxMC44IDAgMjEuNSAuNiAzMiAxLjh6TTM2OCAxNjBsMC0xMTYuN2M2NiAxOSAxMjIuMiA2MSAxNTkuNSAxMTYuN0wzNjggMTYwek0yMi42IDIwOGw3My40IDAgMCAxMTItOTYgMGMwLTM5LjcgOC03Ny42IDIyLjYtMTEyek0xNzYgMzIwbC0zMiAwIDAtMTEyIDI4OCAwIDAgMTEyLTMyIDAgMCA0OCAxNzYgMCAwIDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC02NCAxNzYgMCAwLTQ4em0zMDQgMGwwLTExMiA3My40IDBDNTY4IDI0Mi40IDU3NiAyODAuMyA1NzYgMzIwbC05NiAwek0yODggMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDgwIDEyOCAwIDAtODBjMC0zNS4zLTI4LjctNjQtNjQtNjR6Il19LFVzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtZG9sbGFyLXRvLXNsb3QiLGljb246WzU3Niw1MTIsWyJkb25hdGUiXSwiZjRiOSIsIk05NiAyMjRhMTkyIDE5MiAwIDEgMSAzODQgMCAxOTIgMTkyIDAgMSAxIC0zODQgMHptMTc2LTkybDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDI0OCAyNzJjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjB6TTQ4IDM0NGwwIDEwNGMwIDguOCA3LjIgMTYgMTYgMTZsNDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdfSxYa3Q9VXNlLFFrdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ5IixpY29uOlszODQsNTEyLFsxMjFdLCI1OSIsIk01OCA0NS40QzQ3LjggMzEgMjcuOCAyNy43IDEzLjQgMzhTLTQuMyA2OC4yIDYgODIuNkwxNjAgMjk4LjMgMTYwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTQ5LjcgMTU0LTIxNS43YzEwLjMtMTQuNCA2LjktMzQuNC03LjQtNDQuNlMzMzYuMiAzMSAzMjYgNDUuNEwxOTIgMjMyLjkgNTggNDUuNHoiXX0sanNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2Utc21pbGUtd2luayIsaWNvbjpbNTEyLDUxMixbMTI4NTIxLCJzbWlsZS13aW5rIl0sImY0ZGEiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NS40IDMyMS45YzIwLjQgMjggNTMuNCA0Ni4xIDkwLjYgNDYuMXM3MC4yLTE4LjEgOTAuNi00Ni4xYzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuM3MxMy4xIDIyLjggNS4zIDMzLjVDMzU2LjMgMzkwIDMwOS4yIDQxNiAyNTYgNDE2cy0xMDAuMy0yNi0xMjkuNC02NS45Yy03LjgtMTAuNy01LjQtMjUuNyA1LjMtMzMuNXMyNS43LTUuNCAzMy41IDUuM3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjQgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIweiJdfSxLa3Q9anNlLEprdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaWNlLWZvdXIiLGljb246WzQ0OCw1MTIsWzk4NTldLCJmNTI0IiwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xNjAgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTI4IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTM1MiAxNjBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIwIDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LFdzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWdyaW4tc3F1aW50LXRlYXJzIixpY29uOls1NzYsNTEyLFsxMjkzMTUsImdyaW4tc3F1aW50LXRlYXJzIl0sImY1ODYiLCJNNTYwIDM1LjRjMCAyNS42LTE4LjggNDcuMy00NC4xIDUwLjlMNDY5LjEgOTNjLTEwLjYgMS41LTE5LjYtNy41LTE4LjEtMTguMWw2LjctNDYuN0M0NjEuMyAyLjggNDgzLTE2IDUwOC42LTE2IDUzNy0xNiA1NjAgNyA1NjAgMzUuNHpNNDAzLjUgNjguMWMtNiA0Mi4yIDMwLjIgNzguNCA3Mi40IDcyLjRsMzcuOC01LjRDNTY1LjcgMjMyIDU1MC44IDM1NS4zIDQ2OSA0MzdzLTIwNSA5Ni42LTMwMS45IDQ0LjdsNS40LTM3LjhjNi00Mi4yLTMwLjItNzguNC03Mi40LTcyLjRsLTM3LjggNS40QzEwLjMgMjgwIDI1LjIgMTU2LjcgMTA3IDc1UzMxMi0yMS43IDQwOC45IDMwLjNsLTUuNCAzNy44ek00MTcuOCAyMDFjLTE5LjEgMzYuNC00NS42IDcyLjctNzguOSAxMDZzLTY5LjYgNTkuOC0xMDYgNzguOWMtMTEuMSA1LjgtMTIuNCAyMS40LTEuMSAyNi42IDU5LjIgMjcuNSAxMzEuOCAxNi44IDE4MC42LTMyczU5LjUtMTIxLjQgMzItMTgwLjZjLTUuMy0xMS4zLTIwLjgtMTAtMjYuNiAxLjF6TTExMy45IDI3MC42YzEuNyA4IDkgMTMuNCAxNy4xIDEyLjdsNDMuMS0zLjktMy45IDQzLjFjLS43IDguMSA0LjcgMTUuNSAxMi43IDE3LjFzMTUuOS0yLjkgMTguNC0xMC42bDI4LTg0LjZjMS45LTUuNyAuNC0xMi4xLTMuOS0xNi4zcy0xMC42LTUuOC0xNi4zLTMuOWwtODQuNiAyOGMtNy43IDIuNi0xMi4zIDEwLjUtMTAuNiAxOC41ek0zMTUuMiA5OS4xYy43LTguMS00LjctMTUuNS0xMi43LTE3LjFzLTE1LjkgMi45LTE4LjUgMTAuNmwtMjggODQuNmMtMS45IDUuNy0uNCAxMi4xIDMuOSAxNi4zczEwLjYgNS44IDE2LjMgMy45bDg0LjYtMjhjNy43LTIuNiAxMi4zLTEwLjUgMTAuNi0xOC40cy05LTEzLjQtMTcuMS0xMi43bC00My4xIDMuOSAzLjktNDMuMXpNNjAuMSA0MjUuN2w0Ni43LTYuN2MxMC42LTEuNSAxOS42IDcuNSAxOC4xIDE4LjFsLTYuNyA0Ni43QzExNC43IDUwOS4yIDkzIDUyOCA2Ny40IDUyOCAzOSA1MjggMTYgNTA1IDE2IDQ3Ni42IDE2IDQ1MSAzNC44IDQyOS4zIDYwLjEgNDI1Ljd6Il19LGVTdD1Xc2UsdFN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtYXVkaW8iLGljb246WzM4NCw1MTIsW10sImYxYzciLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6bTUzLjggMTg1LjJjLTkuMS02LjMtMjEuNS00LjEtMjcuOCA1cy00LjEgMjEuNSA1IDI3LjhjMjMuOSAxNi43IDM5LjQgNDQuMyAzOS40IDc1LjVzLTE1LjYgNTguOS0zOS40IDc1LjVjLTkuMSA2LjMtMTEuMyAxOC44LTUgMjcuOHMxOC44IDExLjMgMjcuOCA1YzM0LjEtMjMuOCA1Ni42LTYzLjUgNTYuNi0xMDguM1MyOTYgMjY3LjUgMjYxLjggMjQzLjd6TTgwIDMxMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDAgMjcuMiAzNGMzIDMuOCA3LjYgNiAxMi41IDZsLjMgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMjhjMC04LjgtNy4yLTE2LTE2LTE2bC0uMyAwYy00LjkgMC05LjUgMi4yLTEyLjUgNmwtMjcuMiAzNC0yNCAwem0xMjggNzIuMmMwIDEwLjcgMTAuNSAxOC4yIDE4LjkgMTEuNiAxMi45LTEwLjMgMjEuMS0yNi4xIDIxLjEtNDMuOHMtOC4yLTMzLjUtMjEuMS00My44Yy04LjQtNi43LTE4LjkgLjktMTguOSAxMS42bDAgNjQuNXoiXX0sYVN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93cy1kb3duLXRvLWxpbmUiLGljb246WzUxMiw1MTIsW10sImU0YjgiLCJNMjE0LjYgMzEwLjZsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMjc0LjcgOTYgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDI0Mi43IDkuNC05LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptMjU2IDBsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsOS40IDkuNCAwLTI0Mi43YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyNDIuNyA5LjQtOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJ6Il19LHJTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnIixpY29uOls0NDgsNTEyLFsxMDNdLCI0NyIsIk0yMjQgOTZDMTM1LjYgOTYgNjQgMTY3LjYgNjQgMjU2czcxLjYgMTYwIDE2MCAxNjBjNzcuNCAwIDE0Mi01NSAxNTYuOC0xMjhMMjU2IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNDQgMGMyNS44IDAgNDkuNiAyMS40IDQ3LjIgNTAuNi05LjUgMTE1LTEwNS44IDIwNS40LTIyMy4yIDIwNS40LTEyMy43IDAtMjI0LTEwMC4zLTIyNC0yMjRTMTAwLjMgMzIgMjI0IDMyYzU3LjQgMCAxMDkuNyAyMS42IDE0OS4zIDU3IDEzLjIgMTEuOCAxNC4zIDMyIDIuNSA0NS4ycy0zMiAxNC4zLTQ1LjIgMi41QzMwMi4zIDExMS40IDI2NSA5NiAyMjQgOTZ6Il19LGlTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2aWhhcmEiLGljb246WzU3Niw1MTIsW10sImY2YTciLCJNMjczLjYtMy4yYzguNS02LjQgMjAuMy02LjQgMjguOCAwTDQ0My4yIDEwMi40YzguMyA2LjIgMTguNCA5LjYgMjguOCA5LjYgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI0IDAgMCA0OCA1OC43IDY0IDEzLjMgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgNDggMjQuNCAzMiAxNS42IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTEyOCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xMjggMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyMi4xIDAgMTcuOS0zMiAwLTQ4LTggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMy4zIDAgNTguNy02NCAwLTQ4LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMTAuNCAwIDIwLjUtMy40IDI4LjgtOS42TDI3My42LTMuMnpNMTI4IDM2OGwzMjAgMCAwLTQ4LTMyMCAwIDAgNDh6TTM4NCAxNjBsLTE5MiAwIDAgNDggMTkyIDAgMC00OHoiXX0sb1N0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZsYWctY2hlY2tlcmVkIixpY29uOls0NDgsNTEyLFsxMjc5MzddLCJmMTFlIiwiTTMyIDBDNDkuNyAwIDY0IDE0LjMgNjQgMzJsMCAxNiA2OS0xNy4yYzM4LjEtOS41IDc4LjMtNS4xIDExMy41IDEyLjUgNDYuMyAyMy4yIDEwMC44IDIzLjIgMTQ3LjEgMGw5LjYtNC44QzQyMy44IDI4LjEgNDQ4IDQzLjEgNDQ4IDY2LjFsMCAyNzkuN2MwIDEzLjMtOC4zIDI1LjMtMjAuOCAzMGwtMzQuNyAxM2MtNDYuMiAxNy4zLTk3LjYgMTQuNi0xNDEuNy03LjQtMzcuOS0xOS04MS40LTIzLjctMTIyLjUtMTMuNEw2NCAzODQgNjQgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDk3LjcgMCA0ODBMMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDB6TTY0IDE4Ny4xbDY0LTEzLjkgMCA2NS41LTY0IDEzLjkgMCA2NS41IDQ4LjgtMTIuMmM1LjEtMS4zIDEwLjEtMi40IDE1LjItMy4zbDAtNjMuOSAzOC45LTguNGM4LjMtMS44IDE2LjctMi41IDI1LjEtMi4xbDAtNjRjMTMuNiAuNCAyNy4yIDIuNiA0MC40IDYuNGwyMy42IDYuOSAwIDY2LjctNDEuNy0xMi4zYy03LjMtMi4xLTE0LjgtMy40LTIyLjMtMy44bDAgNzEuNGMyMS44IDEuOSA0My4zIDYuNyA2NCAxNC40bDAtNjkuOCAyMi43IDYuN2MxMy41IDQgMjcuMyA2LjQgNDEuMyA3LjRsMC02NC4yYy03LjgtLjgtMTUuNi0yLjMtMjMuMi00LjVsLTQwLjgtMTIgMC02MmMtMTMtMy44LTI1LjgtOC44LTM4LjItMTUtOC4yLTQuMS0xNi45LTctMjUuOC04LjhsMCA3Mi40Yy0xMy0uNC0yNiAuOC0zOC43IDMuNmwtMjUuMyA1LjUgMC03NS4yLTY0IDE2IDAgNzMuMXpNMzIwIDMzNS43YzE2LjggMS41IDMzLjktLjcgNTAtNi44bDE0LTUuMiAwLTcxLjctNy45IDEuOGMtMTguNCA0LjMtMzcuMyA1LjctNTYuMSA0LjVsMCA3Ny40em02NC0xNDkuNGwwLTcwLjhjLTIwLjkgNi4xLTQyLjQgOS4xLTY0IDkuMWwwIDY5LjRjMTMuOSAxLjQgMjggLjUgNDEuNy0yLjZsMjIuMy01LjJ6Il19LEtWPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdhdWdlLXNpbXBsZSIsaWNvbjpbNTEyLDUxMixbImdhdWdlLXNpbXBsZS1tZWQiLCJ0YWNob21ldGVyLWF2ZXJhZ2UiXSwiZjYyOSIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0yNi45LTE2LjUtNDkuOS00MC01OS4zTDI4MCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il19LHNTdD1LVixuU3Q9S1YsR3NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJpZ2h0LWxlZnQiLGljb246WzUxMiw1MTIsWyJleGNoYW5nZS1hbHQiXSwiZjM2MiIsIk01MDIuNiAxNTAuNmwtOTYgOTZjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM1MiAyMzYuOSAzNTIgMjI0bDAtNjQtMzIwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzE0LjMgOTYgMzIgOTZsMzIwIDAgMC02NGMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDk2IDk2YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zem0tMzk3LjMgMzUybC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTMTYwIDI3NS4xIDE2MCAyODhsMCA2NCAzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIwIDAgMCA2NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOXoiXX0sbFN0PUdzZSxjU3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGlsbHMiLGljb246WzUxMiw1MTIsW10sImY0ODQiLCJNNjQgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAxMTItOTYgMCAwLTExMnpNMTc2IDM2OGMwLTQ4LjcgMTguMS05My4yIDQ4LTEyN2wwLTEyOUMyMjQgNTAuMSAxNzMuOSAwIDExMiAwUzAgNTAuMSAwIDExMkwwIDQwMGMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMiAzNy4zIDAgNzAuMy0xOC4yIDkwLjctNDYuMy0xNy0yOC42LTI2LjctNjItMjYuNy05Ny43em02NC43IDY3LjRjNC42IDguNyAxNi4zIDkuNyAyMy4zIDIuN0w0MzguMSAyNjRjNy03IDYtMTguNy0yLjctMjMuMy0yMC4xLTEwLjctNDMtMTYuNy02Ny40LTE2LjctNzkuNSAwLTE0NCA2NC41LTE0NCAxNDQgMCAyNC4zIDYgNDcuMyAxNi43IDY3LjR6TTI5Ny45IDQ3MmMtNyA3LTYgMTguNyAyLjcgMjMuMyAyMC4xIDEwLjcgNDMgMTYuNyA2Ny40IDE2LjcgNzkuNSAwIDE0NC02NC41IDE0NC0xNDQgMC0yNC4zLTYtNDcuMy0xNi43LTY3LjQtNC42LTguNy0xNi4zLTkuNy0yMy4zLTIuN0wyOTcuOSA0NzJ6Il19LGRTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJleHBsb3Npb24iLGljb246WzUxMiw1MTIsW10sImU0ZTkiLCJNMjU2LTMyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMCAxNjBjMTIuNCAwIDIyLjcgOS40IDIzLjkgMjEuN0wyOTMuNCAyOTEuNiA0NjcuNiAxMS4zYzYuNy0xMC43IDIwLjUtMTQuNSAzMS43LTguNXMxNS44IDE5LjUgMTAuNiAzMUwzNzIuOCAzMzguNmMyLjIgMi4zIDQuMyA0LjcgNi4zIDcuMWw5Ny4yLTU0LjdjMTAuNS01LjkgMjMuNi0zLjEgMzAuOSA2LjRzNi4zIDIzLTIuMiAzMS41bC04NyA4Ny03MS40IDBjLTEzLjItMzcuMy00OC43LTY0LTkwLjUtNjRzLTc3LjQgMjYuNy05MC41IDY0bC03OS42IDAtNzUuNS01Mi4zQy42IDM1Ny0yLjggMzQ0LjEgMi40IDMzMy41czE3LjQtMTUuOSAyOC43LTEyLjRsOTcuMiAzMC40YzMtMy45IDYuMS03LjYgOS40LTExLjNMNzUuNCAyMzYuM2MtNi4xLTEwLjEtMy45LTIzLjEgNS4xLTMwLjdzMjIuMi03LjUgMzEuMSAuMUwyMTQgMjkzLjZjMS41LS40IDMtLjggNC41LTEuMWwxMy42LTE0Mi43YzEuMi0xMi4zIDExLjUtMjEuNyAyMy45LTIxLjd6TTMyIDQ2NGw0NTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAweiJdfSxmU3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3dzLWRvd24tdG8tcGVvcGxlIixpY29uOls1MTIsNTEyLFtdLCJlNGI5IiwiTTExMyAxNTNjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDE1IDg5QzUuNyA3OS42IDUuNyA2NC40IDE1IDU1UzM5LjYgNDUuNyA0OSA1NUw3MiA3OC4xIDcyLThjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDg2LjEgMjMtMjNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC02NCA2NHptMzIwIDBjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDMzNSA4OWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDIzIDIzIDAtODYuMWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgODYuMSAyMy0yM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTY0IDY0ek0yNTYgMTkyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyem0wIDE2MGM1MyAwIDk2IDQzIDk2IDk2bDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyYzAtNTMgNDMtOTYgOTYtOTZ6TTMyIDI4OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0zNTIgMGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek04MCAzNjhjMTUuMyAwIDI5LjYgNC4zIDQxLjggMTEuOC02LjMgMTYuMi05LjggMzMuOC05LjggNTIuMmwwIDQ4YzAgMTEuNCAyLjQgMjIuMiA2LjcgMzJsLTg3LjggMEMxMy44IDUxMiAwIDQ5OC4yIDAgNDgxLjFMMCA0NDhjMC00NC4yIDM1LjgtODAgODAtODB6TTM5My4zIDUxMmM0LjMtOS44IDYuNy0yMC42IDYuNy0zMmwwLTQ4YzAtMTguNC0zLjUtMzYtOS44LTUyLjIgMTIuMi03LjUgMjYuNS0xMS44IDQxLjgtMTEuOCA0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDMzLjFjMCAxNy0xMy44IDMwLjktMzAuOSAzMC45bC04Ny44IDB6Il19LHVTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2Vycy12aWV3ZmluZGVyIixpY29uOls1NzYsNTEyLFtdLCJlNTk1IiwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0bDAgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTcyYzAtOC44IDcuMi0xNiAxNi0xNmw3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0UzE0OS4zIDAgMTM2IDBMNjQgMHpNNDQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNDQwIDB6TTQ4IDM3NmMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDM2Mi43IDAgMzc2bDAgNzJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNzJ6bTUyOCAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNzJjMCA4LjgtNy4yIDE2LTE2IDE2bC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC03MnpNMjg4IDIxNmE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnptMCA0MGMtNTMgMC05NiA0My05NiA5NmwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC01My00My05Ni05Ni05NnptMTkyLTY0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTE2OCAyNzIuM2MtNDkuMyA0LjEtODggNDUuMy04OCA5NS43bDAgMTAuN2MwIDExLjggOS42IDIxLjMgMjEuMyAyMS4zbDQ2LjggMGMtMi43LTcuNS00LjEtMTUuNi00LjEtMjRsMC0yNGMwLTI5LjUgOC44LTU2LjkgMjQtNzkuN3pNNDI3LjkgNDAwbDQ2LjggMGMxMS44IDAgMjEuMy05LjYgMjEuMy0yMS4zbDAtMTAuN2MwLTUwLjMtMzguNy05MS42LTg4LTk1LjcgMTUuMiAyMi44IDI0IDUwLjIgMjQgNzkuN2wwIDI0YzAgOC40LTEuNCAxNi41LTQuMSAyNHpNMTkyIDE5MmE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAweiJdfSxwU3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FyLW9uIixpY29uOls0NDgsNTEyLFtdLCJlNGRkIiwiTTI0OC04YzAtMTMuMy0xMC43LTI0LTI0LTI0UzIwMC0yMS4zIDIwMC04bDAgNjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTY0ek0xNDUuMyAyMDhsMTU3LjUgMGM2LjcgMCAxMi42IDQuMSAxNSAxMC40bDI2LjEgNjkuNi0yMzkuNiAwIDI2LjEtNjkuNmMyLjMtNi4yIDguMy0xMC40IDE1LTEwLjR6TTM0IDI5Mi44bC0xLjMgMy40QzEzLjIgMzA3LjEgMCAzMjggMCAzNTJMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDI4OCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTI0LTEzLjItNDQuOS0zMi44LTU1LjlsLTEuMy0zLjQtMzYuMy05Ni45Yy0xMS43LTMxLjItNDEuNi01MS45LTc0LjktNTEuOWwtMTU3LjUgMGMtMzMuMyAwLTYzLjIgMjAuNy03NC45IDUxLjlMMzQgMjkyLjh6TTk2IDMzNmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTIyNCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek03IDdDLTIuMyAxNi40LTIuMyAzMS42IDcgNDFMNTUgODljOS40IDkuNCAyNC42IDkuNCAzMy45IDBTOTguMyA2NC40IDg5IDU1TDQxIDdDMzEuNi0yLjMgMTYuNC0yLjMgNyA3ek00MDcgN0wzNTkgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0OC00OGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOVM0MTYuNC0yLjMgNDA3IDd6Il19LGhTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzbGVpZ2giLGljb246WzY0MCw1MTIsW10sImY3Y2MiLCJNNjQgMzJDNDYuMyAzMiAzMiA0Ni4zIDMyIDY0UzQ2LjMgOTYgNjQgOTZsMCAxNjBjMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgNjkuNS03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDUwNCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTgwIDAgMC02NGM1MyAwIDk2LTQzIDk2LTk2bDAtOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTQ4LjkgMGMtNDguNSAwLTkyLjgtMjcuNC0xMTQuNS03MC44bC0yNS4yLTUwLjVDMjM3LjcgNTkuNCAxOTMuNCAzMiAxNDQuOSAzMkw2NCAzMnpNNDMyIDQxNmwtMjU2IDAgMC02NCAyNTYgMCAwIDY0eiJdfSxtU3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZHVtYmJlbGwiLGljb246WzY0MCw1MTIsW10sImY0NGIiLCJNOTYgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAxMTIgMjU2IDAgMC0xMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDE2IDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNiAwIDAgMTZjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0xMTItMjU2IDAgMCAxMTJjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0xNi0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMCAwLTE2eiJdfSxZc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFieS1jYXJyaWFnZSIsaWNvbjpbNTEyLDUxMixbImNhcnJpYWdlLWJhYnkiXSwiZjc3ZCIsIk02NCAyMDhsMCA4MGMwIDUzIDQzIDk2IDk2IDk2bDE5MiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0xMTIgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA1Ni0zMzYgMHptLjItNDhsMjIzLjggMCAwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkwyMzIgMEMxNDEuOSAwIDY4LjQgNzAuOSA2NC4yIDE2MHpNMTYwIDQ2NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem0yODggMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAweiJdfSxnU3Q9WXNlLHhTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJraXdpLWJpcmQiLGljb246WzU3Niw1MTIsW10sImY1MzUiLCJNMjkxLjIgMzg4LjRjMzEuMi0xOC44IDY0LjctMzYuNCAxMDEuMS0zNi40bDU1LjcgMGM0LjYgMCA5LjEtLjIgMTMuNi0uN2w4NS4zIDEyMS45YzQgNS43IDExLjMgOC4yIDE3LjkgNi4xUzU3NiA0NzEgNTc2IDQ2NGwwLTI0MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOGwtNTUuNyAwQzM1NS45IDk2IDMyMi40IDc4LjQgMjkxLjIgNTkuNiAyNjIuMyA0Mi4xIDIyOC4zIDMyIDE5MiAzMiA4NiAzMiAwIDExOCAwIDIyNCAwIDI5NS4xIDM4LjYgMzU3LjEgOTYgMzkwLjNMOTYgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00NmMxNS4zIDMuOSAzMS40IDYgNDggNiA1LjQgMCAxMC43LS4yIDE2LS43bDAgNDAuN2MwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNTAuOWMxMi40LTQuNCAyNC4yLTEwIDM1LjItMTYuN3pNNDQ4IDIwMGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il19LFpzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYWxlbmRhci14bWFyayIsaWNvbjpbNDQ4LDUxMixbImNhbGVuZGFyLXRpbWVzIl0sImYyNzMiLCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yOTEuOSAyMjAuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTMzLjkgMzMuOS0zMy45LTMzLjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzMuOSAzMy45LTMzLjkgMzMuOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDMzLjktMzMuOSAzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMy45LTMzLjkgMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45eiJdfSxiU3Q9WnNlLFhzZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtZG93biIsaWNvbjpbNTEyLDUxMixbNjE0NjYsImFycm93LWFsdC1jaXJjbGUtZG93biJdLCJmMzU4IiwiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMjQ0LjcgMzg3LjNsLTEwNC0xMDRjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjRzOC4zLTkuOSAxNC44LTkuOWw1NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDU2IDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlzMS4xIDEyLjktMy41IDE3LjRsLTEwNCAxMDRjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAweiJdfSx2U3Q9WHNlLHlTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLW1lZGljYWwiLGljb246WzM4NCw1MTIsW10sImY0NzciLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE2MCAyODBsMCA0MC00MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsNDAgMCAwIDQwYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTQwIDQwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC00MCAwIDAtNDBjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il19LGlzPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InhtYXJrIixpY29uOlszODQsNTEyLFsxMjg0NzMsMTAwMDUsMTAwMDYsMTAwNjAsMjE1LCJjbG9zZSIsIm11bHRpcGx5IiwicmVtb3ZlIiwidGltZXMiXSwiZjAwZCIsIk01NS4xIDczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE0Ny4yIDI1NiA5LjkgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyLjUgMzAxLjMgMzI5LjkgNDM4LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wyMzcuOCAyNTYgMzc1LjEgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyLjUgMjEwLjcgNTUuMSA3My40eiJdfSx3U3Q9aXMsTVN0PWlzLHpTdD1pcyxrU3Q9aXMsUXNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNoYXBlcyIsaWNvbjpbNTEyLDUxMixbInRyaWFuZ2xlLWNpcmNsZS1zcXVhcmUiXSwiZjYxZiIsIk0yNTYgMGMxMS4yIDAgMjEuNyA1LjkgMjcuNCAxNS41bDk2IDE2MGM1LjkgOS45IDYuMSAyMi4yIC40IDMyLjJTMzYzLjUgMjI0IDM1MiAyMjRsLTE5MiAwYy0xMS41IDAtMjIuMi02LjItMjcuOC0xNi4ycy01LjUtMjIuMyAuNC0zMi4ybDk2LTE2MEMyMzQuMyA1LjkgMjQ0LjggMCAyNTYgMHpNMTI4IDI3MmExMTIgMTEyIDAgMSAxIDAgMjI0IDExMiAxMTIgMCAxIDEgMC0yMjR6bTIwMCAxNmwxMTIgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDExMmMwIDIyLjEtMTcuOSA0MC00MCA0MGwtMTEyIDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtMTEyYzAtMjIuMSAxNy45LTQwIDQwLTQweiJdfSxTU3Q9UXNlLENTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaWNlLW9uZSIsaWNvbjpbNDQ4LDUxMixbOTg1Nl0sImY1MjUiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjI0IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LExTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsb2NrLW9wZW4iLGljb246WzU3Niw1MTIsW10sImYzYzEiLCJNMzg0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhTMzIwIDI1LjMgMzIwIDk2bDAgNjQtMTYwIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0zMiAwIDAtNjR6Il19LFRTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXBwZXItaG90IixpY29uOls1NzYsNTEyLFsxMjc3OThdLCJmODE2IiwiTTU0NSA2NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDQ3OC45IDYzLjJDNDUyLjMgNDMuNiA0MTkuNSAzMiAzODQgMzIgMzQ4LjkgMzIgMzE2LjUgNDMuMyAyOTAuMSA2Mi40IDI3NC4xIDc0LjEgMjg0LjIgOTYgMzA0IDk2bDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjRjMCAxOS44IDIxLjkgMjkuOSAzMy42IDEzLjkgMTkuMS0yNi40IDMwLjQtNTguOCAzMC40LTkzLjkgMC0zNS41LTExLjYtNjguMy0zMS4yLTk0LjlMNTQ1IDY1ek0yNzAgMTM1LjVsLTE1OS42IDIyOEMxMDEuMyAzNzYuNCA4Ni43IDM4NCA3MSAzODRsLTcgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OGwyNy4xIDBjNjUuNyAwIDEyOS43LTIwLjIgMTgzLjUtNTcuOEw0NDAuNSAzMDYuMUM0MzUgMjk1LjkgNDMyIDI4NC4yIDQzMiAyNzJsLTU2IDBjLTM5LjggMC03Mi0zMi4yLTcyLTcybDAtNTZjLTEyLjIgMC0yMy45LTMtMzQtOC41eiJdfSxLc2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZHJvcGxldC1zbGFzaCIsaWNvbjpbNTc2LDUxMixbInRpbnQtc2xhc2giXSwiZjVjNyIsIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ2My42IDM5Ny44YzEwLjUtMjMuOCAxNi40LTUwLjEgMTYuNC03Ny44IDAtOTEuMi0xMzAuMi0yNzQuMS0xNjYuNi0zMjMuNS01LjktOC0xNS4yLTEyLjUtMjUuMi0xMi41bC0uNCAwYy0xMCAwLTE5LjMgNC41LTI1LjIgMTIuNS0xNS42IDIxLjItNDguNSA2Ni45LTgwLjkgMTE5LjRMNDEtMjQuOXptOTIgMjI3LjdjLTIxLjYgNDMuOC0zNyA4NS45LTM3IDExNy4yIDAgMTA2IDg2IDE5MiAxOTIgMTkyIDQzLjQgMCA4My40LTE0LjQgMTE1LjUtMzguNkwxMzMgMjAyLjh6Il19LF9TdD1Lc2UsSnNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRyb3BsZXQiLGljb246WzM4NCw1MTIsWzEyODE2NywidGludCJdLCJmMDQzIiwiTTE5MiA1MTJDODYgNTEyIDAgNDI2IDAgMzIwIDAgMjI4LjggMTMwLjIgNDUuOSAxNjYuNi0zLjUgMTcyLjUtMTEuNSAxODEuOC0xNiAxOTEuOC0xNmwuNCAwYzEwIDAgMTkuMyA0LjUgMjUuMiAxMi41IDM2LjQgNDkuNCAxNjYuNiAyMzIuMyAxNjYuNiAzMjMuNSAwIDEwNi04NiAxOTItMTkyIDE5MnpNMTEyIDMxMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDc1LjEgNjAuOSAxMzYgMTM2IDEzNiAxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtNDguNiAwLTg4LTM5LjQtODgtODh6Il19LEFTdD1Kc2UsSlY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1saW5lcyIsaWNvbjpbMzg0LDUxMixbMTI4NDQxLDEyODQ2Miw2MTY4NiwiZmlsZS1hbHQiLCJmaWxlLXRleHQiXSwiZjE1YyIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTIwIDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdfSwkU3Q9SlYsRFN0PUpWLEVTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb21tZW50cy1kb2xsYXIiLGljb246WzU3Niw1MTIsW10sImY2NTMiLCJNMTkyIDMyMGMxMDYgMCAxOTItNzguOCAxOTItMTc2UzI5OC0zMiAxOTItMzIgMCA0Ni44IDAgMTQ0YzAgMzkuNiAxNC4zIDc2LjIgMzguNCAxMDUuNkwyLjggMzE2LjhDLTIuMSAzMjYuMS0uNCAzMzcuNSA3IDM0NXMxOC45IDkuMiAyOC4yIDQuMkwxMTYuOCAzMDZjMjMuMSA5IDQ4LjUgMTQgNzUuMiAxNHptMy4yIDQ4YzE2LjQgODEuOSA5NC43IDE0NCAxODguOCAxNDQgMjYuNyAwIDUyLjEtNSA3NS4yLTE0bDgxLjYgNDMuMmM5LjMgNC45IDIwLjcgMy4yIDI4LjItNC4yczkuMi0xOC45IDQuMi0yOC4ybC0zNS42LTY3LjJjMjQuMS0yOS40IDM4LjQtNjYgMzguNC0xMDUuNiAwLTgyLjQtNjEuNy0xNTEuNS0xNDUtMTcwLjctMTEuNSAxMTUuOC0xMTUuOCAyMDEuMi0yMzUuOCAyMDIuN3pNMTk2IDMyYzExIDAgMjAgOSAyMCAyMGwwIDQgOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtNDcuNSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCA2LjEgNC40IDExLjMgMTAuNCAxMi4zbDQxLjcgN2MyNS4zIDQuMiA0My45IDI2LjEgNDMuOSA1MS44IDAgMjYuMS0xOSA0Ny43LTQ0IDUxLjhsMCA0LjdjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtNC0yNCAwYy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGw1NS41IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtNi4xLTQuNC0xMS4zLTEwLjQtMTIuM2wtNDEuNy03Yy0yNS4zLTQuMi00My45LTI2LjEtNDMuOS01MS44IDAtMjguOCAyMy4yLTUyLjIgNTItNTIuNWwwLTRjMC0xMSA5LTIwIDIwLTIweiJdfSxlbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFnbmlmeWluZy1nbGFzcy1sb2NhdGlvbiIsaWNvbjpbNTEyLDUxMixbInNlYXJjaC1sb2NhdGlvbiJdLCJmNjg5IiwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjg4IDE3NmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDQ4LjggNDYuNSAxMTEuNiA2OC42IDEzOC42IDYgNy4zIDE2LjggNy4zIDIyLjcgMCAyMi4xLTI3IDY4LjYtODkuOCA2OC42LTEzOC42em0tMTEyIDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXX0sTlN0PWVuZSxCVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWludm9pY2UiLGljb246WzM4NCw1MTIsW10sImY1NzAiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnpNNjQgMzg0bDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiA0MTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek04OCA2NGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM3NC43IDY0IDg4IDY0em0wIDk2bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LFBTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZW50YWdvbiIsaWNvbjpbNTc2LDUxMixbXSwiZTc5MCIsIk0zMTYuNC0zLjFjLTE2LjgtMTIuMi0zOS42LTEyLjItNTYuNCAwTDM1LjMgMTYwLjJjLTE2LjggMTIuMi0yMy45IDMzLjktMTcuNCA1My43bDg1LjggMjY0LjFjNi40IDE5LjggMjQuOSAzMy4yIDQ1LjcgMzMuMmwyNzcuNyAwYzIwLjggMCAzOS4yLTEzLjQgNDUuNy0zMy4ybDg1LjgtMjY0LjFjNi40LTE5LjgtLjYtNDEuNC0xNy40LTUzLjdMMzE2LjQtMy4xeiJdfSxJU3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmVwdWJsaWNhbiIsaWNvbjpbNjQwLDUxMixbXSwiZjc1ZSIsIk0wIDE5MkMwIDEwMy42IDcxLjYgMzIgMTYwIDMybDIyNCAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwbDAgNjQtNTQ0IDAgMC02NHptMTUyLTMyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTIzMiAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTI4MCAxNjBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMTI4IDI4OGw0MTYgMCAwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwbDAtNDgtMzIgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0LTE5MiAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwIDEyOCAweiJdfSx0bmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hvcCIsaWNvbjpbNTc2LDUxMixbInN0b3JlLWFsdCJdLCJmNTRmIiwiTTIxLjUgMTgxLjFMNzguMyA2Ny40Qzg5LjIgNDUuNyAxMTEuMyAzMiAxMzUuNiAzMmwzMDQuOSAwYzI0LjIgMCA0Ni40IDEzLjcgNTcuMiAzNS40bDU2LjggMTEzLjdjMy42IDcuMiA1LjUgMTUuMSA1LjUgMjMuMiAwIDI3LjMtMjEuMiA0OS43LTQ4IDUxLjZMNTEyIDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE5Mi05NiAwIDAgMTc2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xOTIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNzYuMWMtMjYuOC0xLjktNDgtMjQuMy00OC01MS42IDAtOCAxLjktMTYgNS41LTIzLjJ6TTEyOCAyNTZsMCAxMTJjMCA4LjggNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTExMi0xNjAgMHoiXX0sRlN0PXRuZSxlVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxtIixpY29uOls0NDgsNTEyLFsxMjc5MDIsNjIzNjgsImZpbG0tYWx0IiwiZmlsbS1zaW1wbGUiXSwiZjAwOCIsIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNNDggMzY4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTMwNC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek00OCAyNDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMzA0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTQ4IDExMmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2ek0zNTIgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHoiXX0sT1N0PWVVLEJTdD1lVSxSU3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVpbGRpbmctY2lyY2xlLXhtYXJrIixpY29uOls1NzYsNTEyLFtdLCJlNGQ0IiwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTc0LjkgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMiAwIDQgLjIgNS45IC41IDYtMjMuNiAxNi4zLTQ1LjQgMzAuMS02NC41bC00IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDRjMjcuNS0xOS44IDYwLjMtMzIuNCA5Ni0zNS40TDQxNiA2NGMwLTM1LjMtMjguNy02NC02NC02NEw5NiAwem0zMiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTEyOCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTIyLjYtMTQ0bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkw0NTQuNiA0MDB6Il19LEhTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb21tZW50cyIsaWNvbjpbNTc2LDUxMixbMTI4NDkwLDYxNjcwXSwiZjA4NiIsIk0zODQgMTQ0YzAgOTcuMi04NiAxNzYtMTkyIDE3Ni0yNi43IDAtNTIuMS01LTc1LjItMTRMMzUuMiAzNDkuMmMtOS4zIDQuOS0yMC43IDMuMi0yOC4yLTQuMnMtOS4yLTE4LjktNC4yLTI4LjJsMzUuNi02Ny4yQzE0LjMgMjIwLjIgMCAxODMuNiAwIDE0NCAwIDQ2LjggODYtMzIgMTkyLTMyUzM4NCA0Ni44IDM4NCAxNDR6bTAgMzY4Yy05NC4xIDAtMTcyLjQtNjIuMS0xODguOC0xNDQgMTIwLTEuNSAyMjQuMy04Ni45IDIzNS44LTIwMi43IDgzLjMgMTkuMiAxNDUgODguMyAxNDUgMTcwLjcgMCAzOS42LTE0LjMgNzYuMi0zOC40IDEwNS42bDM1LjYgNjcuMmM0LjkgOS4zIDMuMiAyMC43LTQuMiAyOC4ycy0xOC45IDkuMi0yOC4yIDQuMkw0NTkuMiA0OThjLTIzLjEgOS00OC41IDE0LTc1LjIgMTR6Il19LHFTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YWdzIixpY29uOls1NzYsNTEyLFtdLCJmMDJjIiwiTTQwMS4yIDM5LjFMNTQ5LjQgMTg5LjRjMjcuNyAyOC4xIDI3LjcgNzMuMSAwIDEwMS4yTDM5MyA0NDguOWMtOS4zIDkuNC0yNC41IDkuNS0zMy45IC4ycy05LjUtMjQuNS0uMi0zMy45TDUxNS4zIDI1Ni44YzkuMi05LjMgOS4yLTI0LjQgMC0zMy43TDM2NyA3Mi45Yy05LjMtOS40LTkuMi0yNC42IC4yLTMzLjlzMjQuNi05LjIgMzMuOSAuMnpNMzIuMSAyMjkuNUwzMi4xIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDEzMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsMTQ0IDE0NGMyNSAyNSAyNSA2NS41IDAgOTAuNUwyODUuNCA0MTguN2MtMjUgMjUtNjUuNSAyNS05MC41IDBsLTE0NC0xNDRjLTEyLTEyLTE4LjctMjguMy0xOC43LTQ1LjN6bTE0NC04NS41YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il19LFZTdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJndW4iLGljb246WzU3Niw1MTIsW10sImUxOWIiLCJNNTI4IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgOC00NDggMEMxNC4zIDY0IDAgNzguMyAwIDk2TDAgMjA4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwIDBjMjAuOCAwIDM2LjEgMTkuNiAzMSAzOS44TDMzIDQ0MC4yYy0yLjQgOS42LS4yIDE5LjcgNS44IDI3LjVTNTQuMSA0ODAgNjQgNDgwbDk2IDBjMTQuNyAwIDI3LjUtMTAgMzEtMjQuMkwyMTcgMzUyIDMyMS40IDM1MmMyMy43IDAgNDQuOC0xNC45IDUyLjctMzcuMmwyNi43LTc0LjggMzEuMSAwYzguNSAwIDE2LjYtMy40IDIyLjYtOS40bDIyLjYtMjIuNiA2Ni43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC04MGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTYgMCAwLTh6TTMyMS40IDMwNGwtOTIuNSAwIDE2LTY0IDEwNSAwLTIxIDU4LjdjLTEuMSAzLjItNC4yIDUuMy03LjUgNS4zek04MCAxMjhsMzg0IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZMODAgMTYwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2eiJdfSxTNz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtY2hlY2siLGljb246WzUxMiw1MTIsWzYxNTMzLCJjaGVjay1jaXJjbGUiXSwiZjA1OCIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnpNMzc0IDE0NS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wyMjEuMSAzMTUuMiAxNjkgMjYzLjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjggNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNzkuMyAxNzkuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXX0sVVN0PVM3LGFuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpZC1jYXJkLWNsaXAiLGljb246WzU3Niw1MTIsWyJpZC1jYXJkLWFsdCJdLCJmNDdmIiwiTTI1Ni0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjQtMTI4IDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNjQgMzJsMTEyIDAgMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTMyIDExMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMnpNMTc2IDQwMGMwIDguOCA3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwYy00NC4yIDAtODAgMzUuOC04MCA4MHpNMjg4IDI4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnoiXX0salN0PWFuZSxXU3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9vbiIsaWNvbjpbNTEyLDUxMixbMTI3NzY5LDkyMTRdLCJmMTg2IiwiTTI1NiAwQzExNC42IDAgMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMmM2OC44IDAgMTMxLjMtMjcuMiAxNzcuMy03MS40IDcuMy03IDkuNC0xNy45IDUuMy0yNy4xcy0xMy43LTE0LjktMjMuOC0xNC4xYy00LjkgLjQtOS44IC42LTE0LjggLjYtMTAxLjYgMC0xODQtODIuNC0xODQtMTg0IDAtNzIuMSA0MS41LTEzNC42IDEwMi4xLTE2NC44IDkuMS00LjUgMTQuMy0xNC4zIDEzLjEtMjQuNFMzMjIuNiA4LjUgMzEyLjcgNi4zQzI5NC40IDIuMiAyNzUuNCAwIDI1NiAweiJdfSxHU3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToib2lsLXdlbGwiLGljb246WzU3Niw1MTIsW10sImU1MzIiLCJNNTI4LjMgNjEuM2MtMTEuNC00Mi43LTU1LjMtNjgtOTgtNTYuNkw0MTQuOSA4LjhDMzk3LjggMTMuNCAzODcuNyAzMSAzOTIuMyA0OGwyNC41IDkxLjQtMTA4LjIgMjguMS02LjMtMTguMUMyOTcuNyAxMzYuNiAyODUuNiAxMjggMjcyIDEyOHMtMjUuNyA4LjYtMzAuMiAyMS40bC0xMy42IDM5LTEzMi4yIDM0LjMgMC0zOC42YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjY0LTE2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEzNy4zIDAtNjEuNC0xNzUuNC02Mi4yIDE2LjEgMjIuMSA2My4yLTY2LjYgMCAxOS45LTU2LjktNzQuNiAxOS4zLTQ2LjcgMTMzLjUtNDEuMyAwIDAtMTU5LjIgMzM3LjQtODcuNSAyNS4yIDk0YzQuNiAxNy4xIDIyLjEgMjcuMiAzOS4yIDIyLjZsMTUuNS00LjFjNDIuNy0xMS40IDY4LTU1LjMgNTYuNi05OEw1MjguMyA2MS4zek0yMDUuMSA0NDhsMTYuOC00OCAxMDAuMiAwIDE2LjggNDgtMTMzLjggMHoiXX0scm5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhY2hvZ3JhcGgtZGlnaXRhbCIsaWNvbjpbNTc2LDUxMixbImRpZ2l0YWwtdGFjaG9ncmFwaCJdLCJmNTY2IiwiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTY0IDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek04OCAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTM2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggMzUyem0yNTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6TTQ5NiAxOTJhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek04OCAzMTJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0xMDQtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptNTYgMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxZU3Q9cm5lLGluZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YWJsZXQiLGljb246WzQ0OCw1MTIsWyJ0YWJsZXQtYW5kcm9pZCJdLCJmM2ZiIiwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTE4NCA0MDBsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sWlN0PWluZSxmNz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJydWJsZS1zaWduIixpY29uOls0NDgsNTEyLFs4MzgxLCJyb3VibGUiLCJydWIiLCJydWJsZSJdLCJmMTU4IiwiTTExMiAzMkM5NC4zIDMyIDgwIDQ2LjMgODAgNjRsMCAyMDgtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgNDgtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDE1MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNTIgMCAwLTQ4IDExMiAwYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0UzMzNS41IDMyIDI1NiAzMkwxMTIgMzJ6TTI1NiAyNTZsLTExMiAwIDAtMTYwIDExMiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgweiJdfSxYU3Q9ZjcsUVN0PWY3LEtTdD1mNyxKU3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvc2VkLWNhcHRpb25pbmciLGljb246WzUxMiw1MTIsW10sImYyMGEiLCJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMTUyIDgwbDMyIDBjNC40IDAgOCAzLjYgOCA4IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTMyIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgODBjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzIgMGMzMC45IDAgNTYtMjUuMSA1Ni01NiAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTgwYzAtNC40IDMuNi04IDgtOHptMTY4IDhjMC00LjQgMy42LTggOC04bDMyIDBjNC40IDAgOCAzLjYgOCA4IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTMyIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgODBjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzIgMGMzMC45IDAgNTYtMjUuMSA1Ni01NiAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTgweiJdfSxlQ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVuIixpY29uOls1MTIsNTEyLFsxMjgzOTRdLCJmMzA0IiwiTTM1Mi45IDIxLjJMMzA4IDY2LjEgNDQ1LjkgMjA0IDQ5MC44IDE1OS4xQzUwNC40IDE0NS42IDUxMiAxMjcuMiA1MTIgMTA4cy03LjYtMzcuNi0yMS4yLTUxLjFMNDU1LjEgMjEuMkM0NDEuNiA3LjYgNDIzLjIgMCA0MDQgMHMtMzcuNiA3LjYtNTEuMSAyMS4yek0yNzQuMSAxMDBMNTguOSAzMTUuMWMtMTAuNyAxMC43LTE4LjUgMjQuMS0yMi42IDM4LjdMLjkgNDgxLjZjLTIuMyA4LjMgMCAxNy4zIDYuMiAyMy40czE1LjEgOC41IDIzLjQgNi4ybDEyNy44LTM1LjVjMTQuNi00LjEgMjcuOS0xMS44IDM4LjctMjIuNkw0MTIgMjM3LjkgMjc0LjEgMTAweiJdfSx0Q3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGxhbmUiLGljb246WzU3Niw1MTIsW10sImYwNzIiLCJNNTIwIDIwMGMzMC45IDAgNTYgMjUuMSA1NiA1NnMtMjUuMSA1Ni01NiA1NmwtMTI3LjMgMC0xNTkuMiAxNzMuNmMtNi4xIDYuNi0xNC42IDEwLjQtMjMuNiAxMC40bC00My43IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDU0LjMtMTYyLjktOTkuNyAwLTUyLjggNjZjLTMgMy44LTcuNiA2LTEyLjUgNmwtMTkuOCAwYy0xMC40IDAtMTgtOS44LTE1LjUtMTkuOUwzMiAyNTYgNSAxNDcuOUMyLjQgMTM3LjggMTAuMSAxMjggMjAuNSAxMjhsMTkuOCAwYzQuOSAwIDkuNSAyLjIgMTIuNSA2bDUyLjggNjYgOTkuNyAwLTU0LjMtMTYyLjlDMTQ3LjYgMjYuNyAxNTUuMyAxNiAxNjYuMiAxNmw0My43IDBjOSAwIDE3LjUgMy44IDIzLjYgMTAuNEwzOTIuNyAyMDAgNTIwIDIwMHoiXX0sYUN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImltYWdlcyIsaWNvbjpbNTc2LDUxMixbXSwiZjMwMiIsIk05NiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMzIwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDk2IDk2ek0yNCAxMjhjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyOTZjMCA4LjggNy4yIDE2IDE2IDE2bDM2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTE2OCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE5Ni41IDExLjVjLTQuNC03LjEtMTIuMS0xMS41LTIwLjUtMTEuNXMtMTYuMSA0LjQtMjAuNSAxMS41bC01Ni4zIDkyLjEtMjQuNS0zMC42Yy00LjYtNS43LTExLjQtOS0xOC43LTlzLTE0LjIgMy4zLTE4LjcgOWwtNjQgODBjLTUuOCA3LjItNi45IDE3LjEtMi45IDI1LjRTMTc0LjggMzUyIDE4NCAzNTJsMjcyIDBjOC43IDAgMTYuNy00LjcgMjAuOS0xMi4zczQuMS0xNi44LS41LTI0LjNsLTg4LTE0NHoiXX0sb25lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vYmlsZS1zY3JlZW4iLGljb246WzM4NCw1MTIsWyJtb2JpbGUtYW5kcm9pZC1hbHQiXSwiZjNjZiIsIk0xNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwTDMwNCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDgwIDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMTYgNjR6TTEyOCA0NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTMwNCA2NGwtMjI0IDAgMCAzMDQgMjI0IDAgMC0zMDR6Il19LHJDdD1vbmUsaUN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imd1YXJhbmktc2lnbiIsaWNvbjpbMzg0LDUxMixbXSwiZTE5YSIsIk0xOTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MS41QzczLjMgNzcuMyAwIDE1OC4xIDAgMjU2UzczLjMgNDM0LjcgMTY4IDQ0Ni41bDAgNDEuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDEuNWM5NC43LTExLjggMTY4LTkyLjYgMTY4LTE5MC41IDAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMzYgMCAwLTkzLjhjMjUuMyA0LjggNDcuOSAxNyA2NS42IDM0LjMgMTIuNiAxMi40IDMyLjkgMTIuMiA0NS4zLS40czEyLjItMzIuOS0uNS00NS4zQzI5Ny4yIDkwLjIgMjU4LjggNzAuOCAyMTYgNjUuNUwyMTYgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTE2OCAxMzAuMmwwIDI1MS41QzEwOC44IDM3MC41IDY0IDMxOC41IDY0IDI1NnM0NC44LTExNC41IDEwNC0xMjUuOHptNDggMjUxLjVsMC05My44IDEwMCAwYy0xMi4zIDQ3LjYtNTEuMiA4NC41LTEwMCA5My44eiJdfSxzbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFnLXNob3BwaW5nIixpY29uOls0NDgsNTEyLFsic2hvcHBpbmctYmFnIl0sImYyOTAiLCJNMTYwIDgwYzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCA0OC0xMjggMCAwLTQ4em0tNDggNDhsLTY0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTIwOGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMCAwLTQ4YzAtNjEuOS01MC4xLTExMi0xMTItMTEyUzExMiAxOC4xIDExMiA4MGwwIDQ4em0yNCA0OGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTE1MiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdfSxvQ3Q9c25lLG5uZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtcmlnaHQiLGljb246WzUxMiw1MTIsWzYxODM4LCJhcnJvdy1hbHQtY2lyY2xlLXJpZ2h0Il0sImYzNWEiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMCAyNTYgMjU2IDAgMSAwIC01MTIgMHptMzg3LjMgMTEuM2wtMTA0IDEwNGMtNC42IDQuNi0xMS41IDUuOS0xNy40IDMuNVMyNTYgMzY2LjUgMjU2IDM2MGwwLTU2LTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTU2YzAtNi41IDMuOS0xMi4zIDkuOS0xNC44czEyLjktMS4xIDE3LjQgMy41bDEwNCAxMDRjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZ6Il19LHNDdD1ubmUsbG5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBob25lLXZvbHVtZSIsaWNvbjpbNTc2LDUxMixbInZvbHVtZS1jb250cm9sLXBob25lIl0sImYyYTAiLCJNMzQ0LTMyYzEyOC4xIDAgMjMyIDEwMy45IDIzMiAyMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMDEuNi04Mi40LTE4NC0xODQtMTg0LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTggMTkyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMzIwIDg4YzAtMTMuMyAxMC43LTI0IDI0LTI0IDc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDguNi0zOS40LTg4LTg4LTg4LTEzLjMgMC0yNC0xMC43LTI0LTI0ek0xNDQuMSAxLjRjMTkuNy01LjQgNDAuMyA0LjcgNDguMSAyMy41bDQwLjUgOTcuM2M2LjkgMTYuNSAyLjEgMzUuNi0xMS44IDQ3bC00NC4xIDM2LjFjMzIuNSA3MS42IDg5IDEzMCAxNTkuMyAxNjQuOUwzNzQuNyAzMjNjMTEuMy0xMy45IDMwLjQtMTguNiA0Ny0xMS44TDUxOSAzNTEuOGMxOC44IDcuOCAyOC45IDI4LjQgMjMuNSA0OC4xbC0xLjUgNS41QzUyMy40IDQ3MC4xIDQ2MC45IDUyNS4zIDM4NC42IDUwOS4yIDIwOS42IDQ3Mi4xIDcxLjkgMzM0LjQgMzQuOCAxNTkuNCAxOC43IDgzLjEgNzMuOSAyMC42IDEzOC41IDIuOWw1LjUtMS41eiJdfSxuQ3Q9bG5lLGxDdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjdWJlcyIsaWNvbjpbNTEyLDUxMixbXSwiZjFiMyIsIk0yODQtMS4zYy0xNy4zLTEwLTM4LjctMTAtNTYgMEwxNDMuOCA0Ny4zYy0xNy4zIDEwLTI4IDI4LjUtMjggNDguNWwwIDEwMS45LTg4LjMgNTFjLTE3LjMgMTAtMjggMjguNS0yOCA0OC41bDAgOTcuM2MwIDIwIDEwLjcgMzguNSAyOCA0OC41bDg0LjMgNDguNmMxNy4zIDEwIDM4LjcgMTAgNTYgMGw4OC4zLTUxIDg4LjMgNTFjMTcuMyAxMCAzOC43IDEwIDU2IDBMNDg0LjUgNDQzYzE3LjMtMTAgMjgtMjguNSAyOC00OC41bDAtOTcuM2MwLTIwLTEwLjctMzguNS0yOC00OC41bC04OC4zLTUxIDAtMTAxLjljMC0yMC0xMC43LTM4LjUtMjgtNDguNUwyODQtMS4zek0yMzIgMjkyLjZsMCAxMDYuNS04OC4zIDUxYy0xLjIgLjctMi42IDEuMS00IDEuMWwwLTEwNS4zIDkyLjMtNTMuM3ptMjMxLjQgLjZjLjcgMS4yIDEuMSAyLjYgMS4xIDRsMCA5Ny4zYzAgMi45LTEuNSA1LjUtNCA2LjlsLTg0LjMgNDguNmMtMS4yIC43LTIuNiAxLjEtNCAxLjFsMC0xMDUuMyA5MS4yLTUyLjZ6TTM0OC4zIDk1LjhsMCAxMDEuOS05Mi4zIDUzLjMgMC0xMDYuNSA5MS4yLTUyLjZjLjcgMS4yIDEuMSAyLjYgMS4xIDR6Il19LGNDdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwaG9uZSIsaWNvbjpbNTEyLDUxMixbMTI4MjIyLDEyODM3OV0sImYwOTUiLCJNMTYwLjIgMjVDMTUyLjMgNi4xIDEzMS43LTMuOSAxMTIuMSAxLjRsLTUuNSAxLjVjLTY0LjYgMTcuNi0xMTkuOCA4MC4yLTEwMy43IDE1Ni40IDM3LjEgMTc1IDE3NC44IDMxMi43IDM0OS44IDM0OS44IDc2LjMgMTYuMiAxMzguOC0zOS4xIDE1Ni40LTEwMy43bDEuNS01LjVjNS40LTE5LjctNC43LTQwLjMtMjMuNS00OC4xbC05Ny4zLTQwLjVjLTE2LjUtNi45LTM1LjYtMi4xLTQ3IDExLjhsLTM4LjYgNDcuMkMyMzMuOSAzMzUuNCAxNzcuMyAyNzcgMTQ0LjggMjA1LjNMMTg5IDE2OS4zYzEzLjktMTEuMyAxOC42LTMwLjQgMTEuOC00N0wxNjAuMiAyNXoiXX0sZEN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRvcmlpLWdhdGUiLGljb246WzQ0OCw1MTIsWzk5NjFdLCJmNmExIiwiTTAgOTZMMCAyOC41QzAgMjEuNiA1LjYgMTYgMTIuNSAxNiAxNC44IDE2IDE3IDE2LjYgMTkgMTcuOEw1OCA0MS4yQzgyLjkgNTYuMSAxMTEuMyA2NCAxNDAuMyA2NGwxNjcuNCAwYzI5IDAgNTcuNS03LjkgODIuMy0yMi44bDM5LTIzLjRjMS45LTEuMiA0LjItMS44IDYuNC0xLjggNi45IDAgMTIuNSA1LjYgMTIuNSAxMi41TDQ0OCA5NmMwIDM1LjMtMjguNyA2NC02NCA2NGwwIDY0IDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2IDAgMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOTItMTkyIDAgMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOTItMTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtNjRDMjguNyAxNjAgMCAxMzEuMyAwIDk2ek0xMjggMjI0bDY0IDAgMC02NC02NCAwIDAgNjR6bTEyOCAwbDY0IDAgMC02NC02NCAwIDAgNjR6Il19LGZDdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYWNvbiIsaWNvbjpbNTc2LDUxMixbMTI5MzYzXSwiZjdlNSIsIk01NTcgOTYuN2MxNC40IDE0LjQgMTIuNCAzOC40LTQuMyA1MC4ybC02NC42IDQ1LjdjLTQzLjcgMzAuOS03OS4yIDcxLjktMTAzLjQgMTE5LjZsLTI1LjMgNDkuOGMtMjUuMSA0OS4zLTYyLjEgOTEuNS0xMDcuOCAxMjIuNmwtNzQuMSA1MC42Yy0xMy4xIDguOS0zMC43IDcuMy00MS44LTMuOWwtNDQuOS00NC45IDg2LjUtNjYuNWM0Mi4zLTMyLjUgNzYuNy03NC4zIDEwMC42LTEyMmwyNC41LTQ5LjFjMjQuNS00OSA2MS44LTkwLjYgMTA3LjktMTIwLjJsMTA4LjctNjkuOSAzOCAzOHpNNDg0LjIgMjMuOUwzODQuMyA4OC4yYy01My40IDM0LjMtOTYuNSA4Mi40LTEyNC45IDEzOS4xbC0yNC41IDQ5LjFjLTIwLjYgNDEuMy01MC4zIDc3LjMtODYuOSAxMDUuNGwtOTEuNCA3MC4zLTM2LjktMzYuOWMtMTQuNC0xNC40LTEyLjQtMzguNCA0LjMtNTAuMmw2NC42LTQ1LjdjNDMuNy0zMC45IDc5LjItNzEuOSAxMDMuNC0xMTkuNmwyNS4zLTQ5LjhDMjQyLjMgMTAwLjggMjc5LjMgNTguNiAzMjUgMjcuNGw3NC4xLTUwLjZjMTMuMS04LjkgMzAuNi03LjMgNDEuOCAzLjlsNDMuMyA0My4zeiJdfSx1Q3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWZhbGxpbmctYnVyc3QiLGljb246WzU3Niw1MTIsW10sImU1NDciLCJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA1LjRjMCA1NS4yLTIzLjcgMTA3LTYzLjkgMTQzLjFsNjIuOSA3NS41IDg5IDBjMTUuMSAwIDI5LjMgNy4xIDM4LjQgMTkuMmw0My4yIDU3LjZjMTAuNiAxNC4xIDcuNyAzNC4yLTYuNCA0NC44cy0zNC4yIDcuNy00NC44LTYuNEwzNjggMzIwIDI2My4yIDMyMCAzNzYuOCA0NTkuOGMxMS4xIDEzLjcgOS4xIDMzLjktNC43IDQ1cy0zMy45IDkuMS00NS00LjdMMTM3LjQgMjY2LjZjLTYuMSAxNS05LjQgMzEuMy05LjQgNDhsMCA2OS40YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjkuNGMwLTY3LjQgMzUuNC0xMjkuOSA5My4yLTE2NC42bDQuNi0yLjhDMjAwLjQgMTI0IDIyNCA4Mi40IDIyNCAzNy40bDAtNS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xNiA4OEE1NiA1NiAwIDEgMSAxMjggODggNTYgNTYgMCAxIDEgMTYgODh6bTM3Ni03LjljMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDh6bTEwNCAxNTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMHptLTU0LjUtOTcuNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzMuOSAzMy45Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHoiXX0sY25lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InF1b3RlLXJpZ2h0IixpY29uOls0NDgsNTEyLFs4MjIxLCJxdW90ZS1yaWdodC1hbHQiXSwiZjEwZSIsIk00NDggMjk2YzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC04IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOCAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtOC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMzZ6bS0yNTYgMGMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDggMGMzMC45IDAgNTYtMjUuMSA1Ni01NmwwLTgtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTM2eiJdfSxwQ3Q9Y25lLGhDdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZS1tZWRpY2FsLWZsYWciLGljb246WzY0MCw1MTIsW10sImU1MTQiLCJNNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgMjg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yNjcuNSA1OS4xTDQwMCAxODYuOSA0MDAgNTAzLjRjLTkuNCA1LjQtMjAuMyA4LjYtMzIgOC42bC0yNTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNDQtMTkuOSAwQzEyLjYgMzA0IDAgMjkxLjQgMCAyNzUuOSAwIDI2OC4zIDMuMSAyNjEgOC42IDI1NS43TDIxMi41IDU5LjFDMjE5LjkgNTIgMjI5LjcgNDggMjQwIDQ4czIwLjEgNCAyNy41IDExLjF6TTIwNC44IDI1Ni44bDAgNDQtNDQgMGMtOS43IDAtMTcuNiA3LjktMTcuNiAxNy42bDAgMzUuMmMwIDkuNyA3LjkgMTcuNiAxNy42IDE3LjZsNDQgMCAwIDQ0YzAgOS43IDcuOSAxNy42IDE3LjYgMTcuNmwzNS4yIDBjOS43IDAgMTcuNi03LjkgMTcuNi0xNy42bDAtNDQgNDQgMGM5LjcgMCAxNy42LTcuOSAxNy42LTE3LjZsMC0zNS4yYzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNmwtNDQgMCAwLTQ0YzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNmwtMzUuMiAwYy05LjcgMC0xNy42IDcuOS0xNy42IDE3LjZ6Il19LG1DdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwcmVzY3JpcHRpb24iLGljb246WzQ0OCw1MTIsW10sImY1YjEiLCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJMMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDUwLjcgMCAxMjggMTI4LTEwNS40IDEwNS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDI4OCAzOTcuMyAzOTMuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDMzMy4zIDM1MiA0MzguNiAyNDYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyODggMzA2LjcgMjAyLjIgMjIwLjlDMjUxLjQgMjA5LjEgMjg4IDE2NC44IDI4OCAxMTIgMjg4IDUwLjEgMjM3LjkgMCAxNzYgMEwzMiAwek0xNzYgMTYwbC0xMTIgMCAwLTk2IDExMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4eiJdfSxnQ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGljZS10aHJlZSIsaWNvbjpbNDQ4LDUxMixbOTg1OF0sImY1MjciLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAxMjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTI4IDY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0seEN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLWxvY2siLGljb246WzU3Niw1MTIsW10sImU0ZDYiLCJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyMS4zYy00Ni45IDE5LTgwIDY1LTgwIDExOC43bDAgMjQuNGMtMTkuNiAxNy42LTMyIDQzLjEtMzIgNzEuNWwwIDk2YzAgNS41IC41IDEwLjkgMS4zIDE2LjFMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA2NHpNMTc2IDM4NGwwIDgwIDgwIDAgMC02NC4xYzAtMTMuNyAxLjktMjcgNS41LTM5LjYtNS43LTUuMi0xMy4yLTguMy0yMS41LTguM2wtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTMwNyAyMjQuM2MtMS0uMi0yLS4zLTMtLjNsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNi43IDBjMi4xLTIyLjggOC40LTQ0LjMgMTguMy02My43ek0xNDQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE0NCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMzUyIDgwLjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek0zNTIgNDAwYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdfSxkbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaWQtY2FyZCIsaWNvbjpbNTc2LDUxMixbNjIxNDcsImRyaXZlcnMtbGljZW5zZSJdLCJmMmMyIiwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRMMCA5NnptMCA0OGw1NzYgMCAwIDI3MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTQ0ek0yNDcuMyA0MTZjMjAuMiAwIDM1LjMtMTkuNCAyMi40LTM1LTE0LjctMTcuNy0zNi45LTI5LTYxLjctMjlsLTY0IDBjLTI0LjggMC00NyAxMS4zLTYxLjcgMjktMTIuOSAxNS42IDIuMiAzNSAyMi40IDM1bDE0Mi41IDB6TTE3NiAzMTJhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTM2MCAyMDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHoiXX0sYkN0PWRuZSxmbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLXBsYXkiLGljb246WzUxMiw1MTIsWzYxNDY5LCJwbGF5LWNpcmNsZSJdLCJmMTQ0IiwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTE4OC4zIDE0Ny4xYy03LjYgNC4yLTEyLjMgMTIuMy0xMi4zIDIwLjlsMCAxNzZjMCA4LjcgNC43IDE2LjcgMTIuMyAyMC45czE2LjggNC4xIDI0LjMtLjVsMTQ0LTg4YzcuMS00LjQgMTEuNS0xMi4xIDExLjUtMjAuNXMtNC40LTE2LjEtMTEuNS0yMC41bC0xNDQtODhjLTcuNC00LjUtMTYuNy00LjctMjQuMy0uNXoiXX0sdkN0PWZuZSx1bmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1sYXVnaC1iZWFtIixpY29uOls1MTIsNTEyLFsxMjg1MTMsImxhdWdoLWJlYW0iXSwiZjU5YSIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTAxLjYgMzE0Yy0zLjctMTMuNyA3LjUtMjYgMjEuNy0yNmwyNjUuNCAwYzE0LjIgMCAyNS40IDEyLjMgMjEuNyAyNi0xOC41IDY4LTgwLjYgMTE4LTE1NC40IDExOFMxMjAgMzgyIDEwMS42IDMxNHpNMTc2IDE2NGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il19LHlDdD11bmUsd0N0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxlYWYiLGljb246WzUxMiw1MTIsW10sImYwNmMiLCJNNDcxLjMgNi43QzQ3Ny43IC42IDQ4Ny0xLjYgNDk1LjYgMS4yIDUwNS40IDQuNSA1MTIgMTMuNyA1MTIgMjRsMCAxODYuOWMwIDEzMS4yLTEwOC4xIDIzNy4xLTIzOC44IDIzNy4xLTc3IDAtMTQzLjQtNDkuNS0xNjcuNS0xMTguNy0zNS40IDMwLjgtNTcuNyA3Ni4xLTU3LjcgMTI2LjcgMCAxMy4zLTEwLjcgMjQtMjQgMjRTMCA0NjkuMyAwIDQ1NkMwIDM4MS4xIDM4LjIgMzE1LjEgOTYuMSAyNzYuMyAxMzEuNCAyNTIuNyAxNzMuNSAyNDAgMjE2IDI0MGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwYy0zOS43IDAtNzcuMyA4LjgtMTExIDI0LjUgMjMuMy03MCA4OS4yLTEyMC41IDE2Ny0xMjAuNSA2Ni40IDAgMTE1LjgtMjIuMSAxNDguNy00NCAxOS4yLTEyLjggMzUuNS0yOC4xIDUwLjctNDUuM3oiXX0sTUN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWNoaW1uZXktdXNlciIsaWNvbjpbNTEyLDUxMixbXSwiZTA2NSIsIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjg4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOHpNMzEyIDI1NmE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6TTE0NCA0MzJjMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6Il19LHRVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJvdGF0ZS1yaWdodCIsaWNvbjpbNTEyLDUxMixbInJlZG8tYWx0Iiwicm90YXRlLWZvcndhcmQiXSwiZjJmOSIsIk00ODggMTkybC0xNDQgMGMtOS43IDAtMTguNS01LjgtMjIuMi0xNC44cy0xLjctMTkuMyA1LjItMjYuMmw0Ni43LTQ2LjdjLTc1LjMtNTguNi0xODQuMy01My4zLTI1My41IDE1LjktNzUgNzUtNzUgMTk2LjUgMCAyNzEuNXMxOTYuNSA3NSAyNzEuNSAwYzguMi04LjIgMTUuNS0xNi45IDIxLjktMjYuMSAxMC4xLTE0LjUgMzAuMS0xOCA0NC42LTcuOXMxOCAzMC4xIDcuOSA0NC42Yy04LjUgMTIuMi0xOC4yIDIzLjgtMjkuMSAzNC43LTEwMCAxMDAtMjYyLjEgMTAwLTM2MiAwUy0yNSAxNzUgNzUgNzVjOTQuMy05NC4zIDI0My43LTk5LjYgMzQ0LjMtMTYuMkw0NzEgN2M2LjktNi45IDE3LjItOC45IDI2LjItNS4yUzUxMiAxNC4zIDUxMiAyNGwwIDE0NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHoiXX0sekN0PXRVLGtDdD10VSxTQ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidG9vdGgiLGljb246WzQ0OCw1MTIsWzEyOTQ2M10sImY1YzkiLCJNMTQ1IDUuN0wyMjQgMzIgMzAzIDUuN0MzMTQuMyAxLjkgMzI2IDAgMzM3LjkgMCAzOTguNyAwIDQ0OCA0OS4zIDQ0OCAxMTAuMWwwIDY4LjVjMCAyOS40LTkuNSA1OC4xLTI3LjIgODEuNmwtMS4xIDEuNWMtMTIuOSAxNy4yLTIxLjMgMzcuNC0yNC4zIDU4LjdMMzczLjcgNDcxLjljLTMuMyAyMy0yMyA0MC4xLTQ2LjIgNDAuMS0yMi44IDAtNDIuMy0xNi41LTQ2LTM5TDI2MS4zIDM1MS42Yy0zLTE4LjItMTguOC0zMS42LTM3LjMtMzEuNnMtMzQuMiAxMy40LTM3LjMgMzEuNkwxNjYuNSA0NzNjLTMuOCAyMi41LTIzLjIgMzktNDYgMzktMjMuMiAwLTQyLjktMTcuMS00Ni4yLTQwLjFMNTIuNiAzMjAuNWMtMy0yMS4zLTExLjQtNDEuNS0yNC4zLTU4LjdsLTEuMS0xLjVDOS41IDIzNi43IDAgMjA4LjEgMCAxNzguN2wwLTY4LjVDMCA0OS4zIDQ5LjMgMCAxMTAuMSAwIDEyMiAwIDEzMy43IDEuOSAxNDUgNS43eiJdfSxDQ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtY2hpbW5leS13aW5kb3ciLGljb246WzUxMiw1MTIsW10sImUwMGQiLCJNMjM0LjIgOC42YzEyLjMtMTEuNCAzMS4zLTExLjQgNDMuNSAwTDM2OCA5Mi4zIDM2OCA4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTAxLjUgMzcuOCAzNS4xYzkuNiA5IDEyLjggMjIuOSA4IDM1LjFTNDkzLjIgMjcyIDQ4MCAyNzJsLTE2IDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI4OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDh6TTIxNiAyMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0bC04MCAweiJdfSxMQ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW90b3JjeWNsZSIsaWNvbjpbNjQwLDUxMixbMTI3OTQ5XSwiZjIxYyIsIk0yODAgMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYuNiAwIDIyLjUgNDguNy05NS4xIDcxLjNjLTMzLjQtMjUuMS03NS00MC0xMjAtNDBsLTU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMGM3OC41IDAgMTQzLjIgNTkuNiAxNTEuMiAxMzZsLTI1LjQgMGMtMTEuMi01OS4yLTYzLjMtMTA0LTEyNS44LTEwNC03MC43IDAtMTI4IDU3LjMtMTI4IDEyOFM3My4zIDQ4MCAxNDQgNDgwYzYyLjUgMCAxMTQuNS00NC44IDEyNS44LTEwNGw1MC4yIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yMi41YzAtNDUuMSAyNS43LTg1LjQgNjUuNS0xMDcuN2wxMi4xIDI2LjFjLTMyLjQgMjMuMi01My41IDYxLjItNTMuNSAxMDQuMSAwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4LTU3LjMtMTI4LTEyOC0xMjhjLTEwLjcgMC0yMSAxLjMtMzAuOSAzLjhMNDMzLjggMTYwIDQ4OCAxNjBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNTMuMyAwYy02LjkgMC0xMy43IDIuMi0xOS4yIDYuNGwtMTcuMSAxMi44LTI0LjYtNTMuM0MzNjkuOSAyMS40IDM2MS40IDE2IDM1MiAxNmwtNzIgMHpNNDQ1LjggMzAwLjRsMjguNCA2MS42YzUuNiAxMiAxOS44IDE3LjMgMzEuOCAxMS43czE3LjMtMTkuOCAxMS43LTMxLjhsLTI4LjUtNjEuNmMyLjItLjIgNC40LS4zIDYuNy0uMyAzOS44IDAgNzIgMzIuMiA3MiA3MnMtMzIuMiA3Mi03MiA3Mi03Mi0zMi4yLTcyLTcyYzAtMjAuMiA4LjMtMzguNSAyMS44LTUxLjZ6TTE0NCA0MjRjLTM5LjggMC03Mi0zMi4yLTcyLTcyczMyLjItNzIgNzItNzJjMzEuMyAwIDU4IDIwIDY3LjkgNDhMMTQ0IDMyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2Ny45IDBjLTkuOSAyOC0zNi42IDQ4LTY3LjkgNDh6Il19LHBuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYWNrd2FyZC1mYXN0IixpY29uOls1MTIsNTEyLFs5MTk4LCJmYXN0LWJhY2t3YXJkIl0sImYwNDkiLCJNNDkyLjIgNDc3LjZjLTEyIDUtMjUuNyAyLjItMzQuOS02LjlMMjg4IDMwMS4zIDI4OCA0NDhjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlMNjQgMzAxLjMgNjQgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMlM2NCA0Ni4zIDY0IDY0TDY0IDIxMC43IDIzMy40IDQxLjRjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTMjg4IDUxLjEgMjg4IDY0bDAgMTQ2LjcgMTY5LjQtMTY5LjRjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTNTEyIDUxLjEgNTEyIDY0bDAgMzg0YzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZ6Il19LFRDdD1wbmUsaG5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFkZHJlc3MtYm9vayIsaWNvbjpbNTEyLDUxMixbNjIxMzgsImNvbnRhY3QtYm9vayJdLCJmMmI5IiwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHpNMjA4IDI4OGw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTQ0LjIgMzUuOC04MCA4MC04MHptLTI0LTk2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNNTEyIDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0em0wIDEyOGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHpNNDk2IDMyMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnoiXX0sX0N0PWhuZSxBQ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2FpbGJvYXQiLGljb246WzUxMiw1MTIsW10sImU0NDUiLCJNMjQwIDM1LjlsMCAzNDguMS0yMjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgNjEuOSA1MC4xIDExMiAxMTIgMTEybDI4OCAwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyIDAtOC44LTcuMi0xNi0xNi0xNmwtMjA4IDAgMC00OCAxNjEuNyAwYzEyLjkgMCAyMC41LTE0LjQgMTMuMi0yNUwyNjkuMiAyNi45Yy04LjktMTMtMjkuMi02LjctMjkuMiA5ek0xOTIgMzIwbDAtMTg0LjJjMC0xNi4xLTIxLTIyLjEtMjkuNi04LjVMNDcuMyAzMTEuNWMtNi43IDEwLjcgMSAyNC41IDEzLjYgMjQuNUwxNzYgMzM2YzguOCAwIDE2LTcuMiAxNi0xNnoiXX0sJEN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvb2stYm9va21hcmsiLGljb246WzQ0OCw1MTIsW10sImUwYmIiLCJNOTYgNTEybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtNjYuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNsMC0yODhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCAxNjkuNGMwIDEyLjUtMTAuMSAyMi42LTIyLjYgMjIuNi02IDAtMTEuOC0yLjQtMTYtNi42TDI3MiAxNDQgMjMwLjYgMTg1LjRjLTQuMiA0LjItMTAgNi42LTE2IDYuNi0xMi41IDAtMjIuNi0xMC4xLTIyLjYtMjIuNkwxOTIgMCA5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXX0sREN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hZ25pZnlpbmctZ2xhc3MtYXJyb3ctcmlnaHQiLGljb246WzUxMiw1MTIsW10sImU1MjEiLCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0zMDUgMjI1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45bC03Mi03MmMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMSAzMS0xMDIuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwMi4xIDAtMzEgMzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3Mi03MnoiXX0sbW5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1pY3JvcGhvbmUtbGluZXMiLGljb246WzM4NCw1MTIsWzEyNzg5NywibWljcm9waG9uZS1hbHQiXSwiZjNjOSIsIk05NiA5NmMwLTUzIDQzLTk2IDk2LTk2IDUwLjMgMCA5MS42IDM4LjcgOTUuNyA4OEwyMzIgODhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMCAwIDQ4LTU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTUuNyAwYy00LjEgNDkuMy00NS4zIDg4LTk1LjcgODgtNTMgMC05Ni00My05Ni05Nkw5NiA5NnpNMjQgMTYwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDBjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NGwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MGMwIDk3LjktNzMuMyAxNzguNy0xNjggMTkwLjVsMCA0OS41IDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00OS41QzczLjMgNDAyLjcgMCAzMjEuOSAwIDIyNGwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdfSxFQ3Q9bW5lLGduZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyZXBseS1hbGwiLGljb246WzU3Niw1MTIsWyJtYWlsLXJlcGx5LWFsbCJdLCJmMTIyIiwiTTMzMi4yIDE4LjRjMTIgNSAxOS44IDE2LjYgMTkuOCAyOS42bDAgODAgNDggMGM5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDExMy4zLTgxLjUgMTYzLjktMTAwLjIgMTc0LjEtMi41IDEuNC01LjMgMS45LTguMSAxLjktMTAuOSAwLTE5LjctOC45LTE5LjctMTkuNyAwLTcuNSA0LjMtMTQuNCA5LjgtMTkuNSA5LjQtOC44IDIyLjItMjYuNCAyMi4yLTU2LjcgMC01My00My05Ni05Ni05NmwtMzIgMCAwIDgwYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYwYzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45ek0yMDUuNiAyMy4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDU0LjYgMjA4IDIwNS42IDM1OC45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMMTAgMjMxLjJjLTYuNC02LTEwLTE0LjQtMTAtMjMuMnMzLjYtMTcuMiAxMC0yMy4yTDE3MS42IDIzLjFjOS40LTkuNCAyNC42LTkuNCAzMy45IDB6Il19LE5DdD1nbmUsUEN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVuaXZlcnNhbC1hY2Nlc3MiLGljb246WzUxMiw1MTIsW10sImYyOWEiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTYxLjUtODYuMWMtMTIuMi01LjItMjYuMyAuNC0zMS41IDEyLjZzLjQgMjYuMyAxMi42IDMxLjVsMTEuOSA1LjFjMTcuMyA3LjQgMzUuMiAxMi45IDUzLjYgMTYuM2wwIDUwLjFjMCA0LjMtLjcgOC42LTIuMSAxMi42bC0yOC43IDg2LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjQuNC03My4yYzEuMy0zLjggNC44LTYuNCA4LjgtNi40czcuNiAyLjYgOC44IDYuNGwyNC40IDczLjJjNC4yIDEyLjYgMTcuOCAxOS40IDMwLjQgMTUuMlMzMzkgMzk3IDMzNC44IDM4NC40bC0yOC43LTg2LjFjLTEuNC00LjEtMi4xLTguMy0yLjEtMTIuNmwwLTUwLjFjMTguNC0zLjUgMzYuMy04LjkgNTMuNi0xNi4zbDExLjktNS4xYzEyLjItNS4yIDE3LjgtMTkuMyAxMi42LTMxLjVzLTE5LjMtMTcuOC0zMS41LTEyLjZMMzM4LjcgMTc1Yy0yNi4xIDExLjItNTQuMiAxNy04Mi43IDE3cy01Ni41LTUuOC04Mi43LTE3bC0xMS45LTUuMXpNMjU2IDE2MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il19LGFVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRvaWxldC1wYXBlciIsaWNvbjpbNTEyLDUxMixbMTI5NTMxLDYzMjYzLCJ0b2lsZXQtcGFwZXItYWx0IiwidG9pbGV0LXBhcGVyLWJsYW5rIl0sImY3MWUiLCJNMzI3LjEgMzJjLTguOCAxMS4xLTE2IDIzLjEtMjEuOSAzNC44LTIxLjQgNDIuNy0zMy4yIDk4LjQtMzMuMiAxNTcuMmwwIDI2NGMwIDMwLjktMjUuMSA1Ni01NiA1Nkw1NiA1NDRjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgMjI0QzAgMTE4IDQzIDMyIDk2IDMybDIzMS4xIDB6TTQxNiA0MTZjLTUzIDAtOTYtODYtOTYtMTkyczQzLTE5MiA5Ni0xOTIgOTYgODYgOTYgMTkyLTQzIDE5Mi05NiAxOTJ6bTAtMTI4YzE3LjcgMCAzMi0yOC43IDMyLTY0cy0xNC4zLTY0LTMyLTY0LTMyIDI4LjctMzIgNjQgMTQuMyA2NCAzMiA2NHoiXX0sSUN0PWFVLEZDdD1hVSxPQ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidnItY2FyZGJvYXJkIixpY29uOls1NzYsNTEyLFtdLCJmNzI5IiwiTTUxMiA5Nkw2NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTE3LjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN2wzMy45LTMzLjljNy4yLTcuMiAxNy4xLTExLjMgMjcuMy0xMS4zczIwLjEgNC4xIDI3LjMgMTEuM2wzMy45IDMzLjljMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0w1MTIgNDE2YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0ek04MCAyNDBhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwem0zNTItNjRhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il19LEJDdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwaXp6YS1zbGljZSIsaWNvbjpbNTEyLDUxMixbXSwiZjgxOCIsIk0xNjkuNyAuOWMtMjIuOC0xLjYtNDEuOSAxNC00Ny41IDM0LjdMMTEyLjUgNzJDMjkzLjMgNzIuMyA0MzkuNyAyMTguNyA0NDAgMzk5LjVsMzYuNC05LjdjMjAuOC01LjUgMzYuMy0yNC43IDM0LjctNDcuNS0xMi42LTE4Mi44LTE1OC42LTMyOC44LTM0MS40LTM0MS40em0yMjIgNDExLjVjLjItNC4xIC4zLTguMiAuMy0xMi40IDAtMTU0LjYtMTI1LjQtMjgwLTI4MC0yODAtNC4xIDAtOC4zIC4xLTEyLjQgLjNMLjUgNDkxLjljLTEuNSA1LjUgLjEgMTEuNCA0LjEgMTUuNHM5LjkgNS42IDE1LjQgNC4xbDM3MS42LTk5LjF6TTE3NiAyMDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAxMjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNOTYgMzg0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LFJDdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcHJheS1jYW4iLGljb246WzU3Niw1MTIsW10sImY1YmQiLCJNMTkyIDBsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDgwLTEyOCAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDI1NmMwLTUzIDQzLTk2IDk2LTk2bDEyOCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMDhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTIyNCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTIwOHptMjQwIDgwYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHpNMzIwIDY0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTQ0OCAzMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNNTEyIDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek00NDggMTI4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0seG5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZvbHVtZS1sb3ciLGljb246WzQ0OCw1MTIsWzEyODI2NCwidm9sdW1lLWRvd24iXSwiZjAyNyIsIk00OCAzNTJsNDggMCAxMzQuMSAxMTkuMmM2LjQgNS43IDE0LjYgOC44IDIzLjEgOC44IDE5LjIgMCAzNC44LTE1LjYgMzQuOC0zNC44bDAtMzc4LjRjMC0xOS4yLTE1LjYtMzQuOC0zNC44LTM0LjgtOC41IDAtMTYuNyAzLjEtMjMuMSA4LjhMOTYgMTYwIDQ4IDE2MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OHpNMzgwLjYgMTgxLjVjLTEwLjMtOC40LTI1LjQtNi44LTMzLjggMy41cy02LjggMjUuNCAzLjUgMzMuOEMzNjEuMSAyMjcuNiAzNjggMjQxIDM2OCAyNTZzLTYuOSAyOC40LTE3LjcgMzcuM2MtMTAuMyA4LjQtMTEuOCAyMy41LTMuNSAzMy44czIzLjUgMTEuOCAzMy44IDMuNUM0MDIuMSAzMTIuOSA0MTYgMjg2LjEgNDE2IDI1NnMtMTMuOS01Ni45LTM1LjUtNzQuNXoiXX0sSEN0PXhuZSxxQ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY3Jvc3MiLGljb246WzM4NCw1MTIsWzEyODMyNywxMDAxM10sImY2NTQiLCJNMTc2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgODAtODAgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw4MCAwIDAgMjA4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDMyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMDggODAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC04MCAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTc2IDB6Il19LGJuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24iLGljb246WzM4NCw1MTIsWzEyOTQ4NSwibWFsZSJdLCJmMTgzIiwiTTI0OCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43bDQ2LjMgNjIuNGMxMC41IDE0LjIgMzAuNiAxNy4yIDQ0LjggNi42czE3LjItMzAuNiA2LjYtNDQuOGwtNzAuNS05NUMyNzQgMTMyIDIzNC4zIDExMiAxOTIgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTEyIDIzNi43IDExMiA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3oiXX0sVkN0PWJuZSx2bmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91cmdsYXNzIixpY29uOlszODQsNTEyLFs5MjAzLDYyMDMyLCJob3VyZ2xhc3MtZW1wdHkiXSwiZjI1NCIsIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDExYzAgNDIuNC0xNi45IDgzLjEtNDYuOSAxMTMuMWwtNjcuOSA2Ny45IDY3LjkgNjcuOWMzMCAzMCA0Ni45IDcwLjcgNDYuOSAxMTMuMWwwIDExYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwwLTExYzAtNDIuNCAxNi45LTgzLjEgNDYuOS0xMTMuMWw2Ny45LTY3LjktNjcuOS02Ny45QzQ4LjkgMTU4LjEgMzIgMTE3LjQgMzIgNzVsMC0xMUMxNC4zIDY0IDAgNDkuNyAwIDMyek05NiA2NGwwIDExYzAgMjUuNSAxMC4xIDQ5LjkgMjguMSA2Ny45bDY3LjkgNjcuOSA2Ny45LTY3LjljMTgtMTggMjguMS00Mi40IDI4LjEtNjcuOWwwLTExLTE5MiAwem0wIDM4NGwxOTIgMCAwLTExYzAtMjUuNS0xMC4xLTQ5LjktMjguMS02Ny45bC02Ny45LTY3LjktNjcuOSA2Ny45Yy0xOCAxOC0yOC4xIDQyLjQtMjguMSA2Ny45bDAgMTF6Il19LFVDdD12bmUsakN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpc2giLGljb246WzU3Niw1MTIsWzEyODAzMV0sImY1NzgiLCJNMTgwLjUgMTQxLjVDMjE5LjcgMTA4LjUgMjcyLjYgODAgMzM2IDgwczExNi4zIDI4LjUgMTU1LjUgNjEuNWMzOS4xIDMzIDY2LjkgNzIuNCA4MSA5OS44IDQuNyA5LjIgNC43IDIwLjEgMCAyOS4zLTE0LjEgMjcuNC00MS45IDY2LjgtODEgOTkuOC0zOS4yIDMzLjEtOTIgNjEuNS0xNTUuNSA2MS41cy0xMTYuMy0yOC41LTE1NS41LTYxLjVjLTE2LjItMTMuNy0zMC41LTI4LjUtNDIuNy00My4xTDQ4LjEgMzc5LjZjLTEyLjUgNy4zLTI4LjQgNS4zLTM4LjctNC45cy0xMi40LTI2LTUuMy0zOC42TDUwIDI1NiA0LjIgMTc1LjljLTcuMi0xMi42LTUtMjguNCA1LjMtMzguNnMyNi4xLTEyLjIgMzguNy00LjlsODkuNyA1Mi4zYzEyLjItMTQuNiAyNi41LTI5LjQgNDIuNy00My4xek00NDggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il19LFdDdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkcnVtc3RpY2stYml0ZSIsaWNvbjpbNTEyLDUxMixbXSwiZjZkNyIsIk0xNjAgMjY1LjJjMCA4LjUtMy40IDE2LjYtOS40IDIyLjZsLTI2LjggMjYuOGMtMTIuMyAxMi4zLTMyLjUgMTEuNC00OS40IDcuMi00LjYtMS4xLTkuNS0xLjgtMTQuNS0xLjgtMzMuMSAwLTYwIDI2LjktNjAgNjBzMjYuOSA2MCA2MCA2MGM2LjMgMCAxMiA1LjcgMTIgMTIgMCAzMy4xIDI2LjkgNjAgNjAgNjBzNjAtMjYuOSA2MC02MGMwLTUtLjYtOS44LTEuOC0xNC41LTQuMi0xNi45LTUuMi0zNy4xIDcuMi00OS40bDI2LjgtMjYuOGM2LTYgMTQuMS05LjQgMjIuNi05LjRsODkuMiAwYzYuMyAwIDEyLjQtLjMgMTguNS0xIDExLjktMS4yIDE2LjQtMTUuNSAxMC44LTI2LTguNS0xNS44LTEzLjMtMzMuOC0xMy4zLTUzIDAtNjEuOSA1MC4xLTExMiAxMTItMTEyIDggMCAxNS43IC44IDIzLjIgMi40IDExLjcgMi41IDI0LjEtNS45IDIyLTE3LjYtMTQuNy04Mi4zLTg2LjctMTQ0LjgtMTczLjItMTQ0LjgtOTcuMiAwLTE3NiA3OC44LTE3NiAxNzZsMCA4OS4yeiJdfSxHQ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hhcnQtc2ltcGxlIixpY29uOls1MTIsNTEyLFtdLCJlNDczIiwiTTE5MiA4MGMwLTI2LjUgMjEuNS00OCA0OC00OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTM1MnpNMCAyNzJjMC0yNi41IDIxLjUtNDggNDgtNDhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAyNzJ6TTQzMiA5NmwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjg4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTI4OGMwLTI2LjUgMjEuNS00OCA0OC00OHoiXX0sWUN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImF0b20iLGljb246WzQ0OCw1MTIsWzk4ODNdLCJmNWQyIiwiTTIyNCAzOTguOGMtMTEuOCA1LjEtMjMuNCA5LjctMzQuOSAxMy41IDE2LjcgMzMuOCAzMSAzNS43IDM0LjkgMzUuN3MxOC4xLTEuOSAzNC45LTM1LjdjLTExLjQtMy45LTIzLjEtOC40LTM0LjktMTMuNXpNNDE0IDI1NmMzMyA0NS4yIDQ0LjMgOTAuOSAyMy42IDEyOC0yMC4yIDM2LjMtNjIuNSA0OS4zLTExNS4yIDQzLjItMjIgNTIuMS01NS43IDg0LjgtOTguNCA4NC44cy03Ni40LTMyLjctOTguNC04NC44QzcyLjkgNDMzLjMgMzAuNiA0MjAuMyAxMC40IDM4NC0xMC4zIDM0Ni45IDEgMzAxLjIgMzQgMjU2IDEgMjEwLjgtMTAuMyAxNjUuMSAxMC40IDEyOCAzMC42IDkxLjcgNzIuOSA3OC43IDEyNS42IDg0LjggMTQ3LjYgMzIuNyAxODEuMiAwIDIyNCAwczc2LjQgMzIuNyA5OC40IDg0LjhjNTIuNy02LjEgOTUgNi44IDExNS4yIDQzLjIgMjAuNyAzNy4xIDkuNCA4Mi44LTIzLjYgMTI4em0tNjUuOCA2Ny40Yy0xLjcgMTQuMi0zLjkgMjgtNi43IDQxLjIgMzEuOCAxLjQgMzguNi04LjcgNDAuMi0xMS43IDIuMy00LjIgNy0xNy45LTExLjktNDguMS02LjggNi4zLTE0IDEyLjUtMjEuNiAxOC42em0tNi43LTE3NS45YzIuOCAxMy4xIDUgMjYuOSA2LjcgNDEuMiA3LjYgNi4xIDE0LjggMTIuMyAyMS42IDE4LjYgMTguOS0zMC4yIDE0LjItNDQgMTEuOS00OC4xLTEuNi0yLjktOC40LTEzLTQwLjItMTEuN3pNMjU4LjkgOTkuN0MyNDIuMSA2NS45IDIyNy45IDY0IDIyNCA2NHMtMTguMSAxLjktMzQuOSAzNS43YzExLjQgMy45IDIzLjEgOC40IDM0LjkgMTMuNSAxMS44LTUuMSAyMy40LTkuNyAzNC45LTEzLjV6bS0xNTkgODguOWMxLjctMTQuMyAzLjktMjggNi43LTQxLjItMzEuOC0xLjQtMzguNiA4LjctNDAuMiAxMS43LTIuMyA0LjItNyAxNy45IDExLjkgNDguMSA2LjgtNi4zIDE0LTEyLjUgMjEuNi0xOC42ek03OC4yIDMwNC44Yy0xOC45IDMwLjItMTQuMiA0NC0xMS45IDQ4LjEgMS42IDIuOSA4LjQgMTMgNDAuMiAxMS43LTIuOC0xMy4xLTUtMjYuOS02LjctNDEuMi03LjYtNi4xLTE0LjgtMTIuMy0yMS42LTE4LjZ6TTMwNCAyNTZhODAgODAgMCAxIDAgLTE2MCAwIDgwIDgwIDAgMSAwIDE2MCAwem0tODAtMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxaQ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicCIsaWNvbjpbMzIwLDUxMixbMTEyXSwiNTAiLCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwxMjggMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MFMyNDguNCAzNTIgMTYwIDM1MmwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjg4bDk2IDBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZsLTk2IDAgMCAxOTJ6Il19LFhDdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJqZXQtZmlnaHRlci11cCIsaWNvbjpbNTEyLDUxMixbXSwiZTUxOCIsIk0yMDYuOCA0Ny44QzIwMi4zIDU4LjUgMjAwIDcwIDIwMCA4MS42bDAgMTAwLjQtMTUyIDExNCAwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMjM0LjcgMCAyNDhMMCAzOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTggMTUyIDAgMCA1NC40LTY2IDUyLjhjLTMuOCAzLTYgNy42LTYgMTIuNWwwIDI0LjNjMCA4LjggNy4yIDE2IDE2IDE2bDg4IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgODggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNC4zYzAtNC45LTIuMi05LjUtNi0xMi41bC02Ni01Mi44IDAtNTQuNCAxNTIgMCAwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE0NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQ4LTE1Mi0xMTQgMC0xMDAuNGMwLTExLjYtMi4zLTIzLjEtNi44LTMzLjhsLTI3LjEtNjVDMjc0LjQtMjYuMiAyNjUuNy0zMiAyNTYtMzJzLTE4LjQgNS44LTIyLjIgMTQuOGwtMjcuMSA2NXoiXX0sUUN0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsdWctY2lyY2xlLXhtYXJrIixpY29uOls2NDAsNTEyLFtdLCJlNTYwIiwiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2Ljd6Il19LEtDdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaGVldC1wbGFzdGljIixpY29uOlszODQsNTEyLFtdLCJlNTcxIiwiTTAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE0OS41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMMzY1LjMgMzg2LjdjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0wzODQgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDh6bTIwOCA1LjVsMC05My41YzAtMTMuMyAxMC43LTI0IDI0LTI0bDkzLjUgMC0xMTcuNSAxMTcuNXpNMTUzIDEwNWwtNDggNDhjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45em05NiAzMkwxMzcgMjQ5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDIxNSAxMDNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45eiJdfSxKQ3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidiIsaWNvbjpbMzg0LDUxMixbMTE4XSwiNTYiLCJNMTkuNyAzNC41YzE2LjMtNi44IDM1IC45IDQxLjggMTcuMkwxOTIgMzY0LjggMzIyLjUgNTEuN2M2LjgtMTYuMyAyNS41LTI0IDQxLjgtMTcuMnMyNCAyNS41IDE3LjIgNDEuOGwtMTYwIDM4NGMtNSAxMS45LTE2LjYgMTkuNy0yOS41IDE5LjdzLTI0LjYtNy44LTI5LjUtMTkuN0wyLjUgNzYuM2MtNi44LTE2LjMgLjktMzUgMTcuMi00MS44eiJdfSx5bmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGlzdCIsaWNvbjpbNTEyLDUxMixbImxpc3Qtc3F1YXJlcyJdLCJmMDNhIiwiTTQwIDQ4QzI2LjcgNDggMTYgNTguNyAxNiA3MmwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNEw0MCA0OHpNMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDE5MiA2NHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwem0wIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjg4IDB6TTE2IDIzMmwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTQwIDM2OGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il19LGVMdD15bmUsdEx0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNvbGFyLXBhbmVsIixpY29uOls1NzYsNTEyLFtdLCJmNWJhIiwiTTEyMS44IDMyYy0zMCAwLTU2IDIwLjgtNjIuNSA1MC4xTDkuNiAzMDYuMUMuNyAzNDYuMSAzMS4xIDM4NCA3MiAzODRsMTg0LjEgMCAwIDY0LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC02NCAxODQuMSAwYzQwLjkgMCA3MS40LTM3LjkgNjIuNS03Ny45bC00OS44LTIyNEM1MTAuNCA1Mi44IDQ4NC41IDMyIDQ1NC41IDMyTDEyMS44IDMyek0yNDUuNiA5Nmw4NS4yIDAgNy4zIDg4LTk5LjggMCA3LjMtODh6bS01NS41IDg4bC04Ny44IDAgMTkuNi04OCA3NS42IDAtNy4zIDg4ek05MS42IDIzMmw5NC41IDAtNy4zIDg4LTEwNi43IDAgMTkuNi04OHptMTQyLjYgMGwxMDcuOCAwIDcuMyA4OC0xMjIuNSAwIDcuMy04OHptMTU2IDBsOTQuNSAwIDE5LjYgODgtMTA2LjcgMC03LjMtODh6TTQ3NCAxODRsLTg3LjggMC03LjMtODggNzUuNiAwIDE5LjYgODh6Il19LGFMdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsYW5kLW1pbmUtb24iLGljb246WzU3Niw1MTIsW10sImU1MWIiLCJNMzEyIDBsMCAxMjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRMMjY0IDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpNMTYwIDI4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEw4MCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDhsODAgMCAwLTMyek0xMiAxMTQuN2M3LjQtMTEgMjIuMy0xNCAzMy4zLTYuN2w5NiA2NGMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM3MtMjIuMyAxNC0zMy4zIDYuN2wtOTYtNjRjLTExLTcuNC0xNC0yMi4zLTYuNy0zMy4zek01MzAuNyAxMDhjMTEtNy40IDI1LjktNC40IDMzLjMgNi43czQuNCAyNS45LTYuNyAzMy4zbC05NiA2NGMtMTEgNy40LTI1LjkgNC40LTMzLjMtNi43cy00LjQtMjUuOSA2LjctMzMuM2w5Ni02NHoiXX0sclU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVhZHBob25lcyIsaWNvbjpbNDQ4LDUxMixbMTI3OTExLDYyODYzLCJoZWFkcGhvbmVzLWFsdCIsImhlYWRwaG9uZXMtc2ltcGxlIl0sImYwMjUiLCJNNjQgMjI0YzAtODguNCA3MS42LTE2MCAxNjAtMTYwczE2MCA3MS42IDE2MCAxNjBsMCAzNy41Yy0xMC0zLjUtMjAuOC01LjUtMzItNS41bC0xNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEyOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0xNjBDNDQ4IDEwMC4zIDM0Ny43IDAgMjI0IDBTMCAxMDAuMyAwIDIyNEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xMjhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTE2IDBjLTExLjIgMC0yMiAxLjktMzIgNS41TDY0IDIyNHoiXX0sckx0PXJVLGlMdD1yVSxvTHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVzIixpY29uOls0NDgsNTEyLFsxMjg2NTNdLCJmMjA3IiwiTTk2IDBDNDMgMCAwIDQzIDAgOTZMMCAzODRjMCAyOS44IDIwLjQgNTQuOSA0OCA2MmwwIDM0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAxOTIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zNGMyNy42LTcuMSA0OC0zMi4yIDQ4LTYybDAtMjg4YzAtNTMtNDMtOTYtOTYtOTZMOTYgMHpNNjQgMTc2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEwNCAwIDAgMTEyLTEwNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ4em0xODQgODBsMC0xMTIgMTA0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTA0IDB6TTk2IDMyMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTI1NiAwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMTUyIDcyYzAtMTMuMyAxMC43LTI0IDI0LTI0bDk2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTk2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdfSxzTHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1wb3dlcnBvaW50IixpY29uOlszODQsNTEyLFtdLCJmMWM0IiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xNTIgMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjQgMjQgMGMzOS44IDAgNzItMzIuMiA3Mi03MnMtMzIuMi03Mi03Mi03MmwtNDggMHptNDggOTZsLTI0IDAgMC00OCAyNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0eiJdfSx3bmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicXVvdGUtbGVmdCIsaWNvbjpbNDQ4LDUxMixbODIyMCwicXVvdGUtbGVmdC1hbHQiXSwiZjEwZCIsIk0wIDIxNkMwIDE0OS43IDUzLjcgOTYgMTIwIDk2bDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIxNnptMjU2IDBjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjBsOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgOCA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTM2eiJdfSxuTHQ9d25lLGxMdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGV2cm9uLWRvd24iLGljb246WzQ0OCw1MTIsW10sImYwNzgiLCJNMjAxLjQgNDA2LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTkyLTE5MmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgMzM4LjcgNTQuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTkyIDE5MnoiXX0sTW5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImVhcnRoLWFzaWEiLGljb246WzUxMiw1MTIsWzEyNzc1OSwiZ2xvYmUtYXNpYSJdLCJmNTdlIiwiTTUwIDI4NC44YzQuMiAyLjEgOSAzLjIgMTQgMy4ybDUwLjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwxMy4zIDEzLjNjNiA2IDE0LjEgOS40IDIyLjYgOS40bDE4LjcgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0LTEwLjcgMjQtMjRsMC00Mi43YzAtOC41IDMuNC0xNi42IDkuNC0yMi42bDEzLjMtMTMuM2M2LTYgOS40LTE0LjEgOS40LTIyLjZMMzA0IDU3YzAtMS4yLS4xLTIuMy0uMi0zLjUtMTUuNC0zLjYtMzEuNC01LjUtNDcuOC01LjUtMTE0LjkgMC0yMDggOTMuMS0yMDggMjA4IDAgOS44IC43IDE5LjQgMiAyOC44em00MDMuMyAzNy4zYy0zLjItMS40LTYuNy0yLjEtMTAuNS0yLjFMNDMyIDMyMGMtOC44IDAtMTYtNy4yLTE2LTE2cy03LjItMTYtMTYtMTZsLTM0LjcgMGMtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjRsLTQ1LjMgNDUuM2MtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgMTguN2MwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOC43IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjQgMi4yIDIuMiA0LjcgNC4xIDcuMyA1LjUgMzkuMy0yNS40IDY5LjUtNjMuNiA4NC42LTEwOC44ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xMjggMzY4YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTI3MiAyNTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZ6bTQ4LTExMmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnoiXX0sY0x0PU1uZSxkTHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2VudC1zaWduIixpY29uOlszODQsNTEyLFtdLCJlM2Y1IiwiTTIwOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjUuNGM0My42IDUuMiA4MyAyNC41IDExMy4zIDUzLjEgMTIuOSAxMi4xIDEzLjQgMzIuNCAxLjMgNDUuMnMtMzIuNCAxMy40LTQ1LjIgMS4zYy0yNC40LTIzLTU3LjItMzcuMS05My4zLTM3LjEtNzUuMSAwLTEzNiA2MC45LTEzNiAxMzZzNjAuOSAxMzYgMTM2IDEzNmMzNi4yIDAgNjktMTQuMSA5My4zLTM3LjEgMTIuOS0xMi4xIDMzLjEtMTEuNSA0NS4yIDEuM3MxMS41IDMzLjEtMS4zIDQ1LjJDMzIzIDQzMC4xIDI4My42IDQ0OS40IDI0MCA0NTQuNmwwIDI1LjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yOEM4NC43IDQzMy41IDE2IDM1Mi44IDE2IDI1NlM4NC43IDc4LjUgMTc2IDYwbDAtMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LGZMdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaGllbGQtY2F0IixpY29uOls1MTIsNTEyLFtdLCJlNTcyIiwiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yIC41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMiAxNi43IDggMzYuMSA4IDUyLjggMCAxNzIuNC04Mi41IDIxMy4yLTI2NCAyMTMuNi0zNjMuMiAuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0xNjAgMTU0LjRjMC01LjggNC43LTEwLjQgMTAuNC0xMC40bC4yIDBjMy40IDAgNi41IDEuNiA4LjUgNC4zbDQwIDUzLjNjMyA0IDcuOCA2LjQgMTIuOCA2LjRsNDggMGM1IDAgOS44LTIuNCAxMi44LTYuNGw0MC01My4zYzItMi43IDUuMi00LjMgOC41LTQuM2wuMiAwYzUuOCAwIDEwLjQgNC43IDEwLjQgMTAuNEwzNTIgMjcyYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bDAtMTE3LjZ6TTIxNiAyODhhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem05Ni0xNmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAweiJdfSx1THQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2Nob29sLWNpcmNsZS1jaGVjayIsaWNvbjpbNjQwLDUxMixbXSwiZTU2YiIsIk02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI3NiAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC05MC45IDAgMC04OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzEgMCAxLjkgMCAyLjkgLjEgMjYuMy03NC42IDk3LjUtMTI4LjEgMTgxLjEtMTI4LjEgMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC0zMy40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwLTEyNy45LTExNS4xYy0xOC4zLTE2LjQtNDYtMTYuNC02NC4yIDBMMTI4IDEyOCA2NCAxMjh6bTY0IDI0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyek0xMTIgMjU2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZ6TTI4OCAxMjhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdfSx6bmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFydGluaS1nbGFzcyIsaWNvbjpbNTEyLDUxMixbMTI3ODY0LCJnbGFzcy1tYXJ0aW5pLWFsdCJdLCJmNTdiIiwiTTIuNCA1MS44QzcuNCAzOS44IDE5LjEgMzIgMzIgMzJsNDQ4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUwyODggMzAxLjMgMjg4IDQ0OCAzNTIgNDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwIDAtMTQ2LjctMjE0LjYtMjE0LjZDLjIgNzcuNS0yLjUgNjMuNyAyLjQgNTEuOHpNMzU0LjcgMTQ0bDQ4LTQ4LTI5My41IDAgNDggNDggMTk3LjUgMHoiXX0scEx0PXpuZSxoTHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGx1ZyIsaWNvbjpbNDQ4LDUxMixbMTI4MjY4XSwiZjFlNiIsIk0xMjgtMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNjRjMCA5NS4xLTY5LjIgMTc0LjEtMTYwIDE4OS4zbDAgNjYuN2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTAxLjIgMzk4LjEgMzIgMzE5LjEgMzIgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzE0LjMgOTYgMzIgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdfSxtTHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGFub3JhbWEiLGljb246WzU3Niw1MTIsW10sImUyMDkiLCJNNDMuOSA0OEMxOS43IDQ4IDAgNjcuNyAwIDkxLjlMMCA0MjAuMWMwIDI0LjMgMTkuNyA0My45IDQzLjkgNDMuOSA1LjUgMCAxMC43LTEgMTUuNy0yLjkgMTIuOS00LjkgMTAzLjQtMzcuMSAyMjguNC0zNy4xczIxNS41IDMyLjMgMjI4LjQgMzcuMWM1IDEuOSAxMC4yIDIuOSAxNS43IDIuOSAyNC4zIDAgNDMuOS0xOS43IDQzLjktNDMuOWwwLTMyOC4yYzAtMjQuMy0xOS43LTQzLjktNDMuOS00My45LTUuNSAwLTEwLjcgMS0xNS43IDIuOS0xMi45IDQuOS0xMDMuNCAzNy4xLTIyOC40IDM3LjFTNzIuNSA1NS43IDU5LjYgNTAuOUM1NC42IDQ5IDQ5LjQgNDggNDMuOSA0OHpNNzIgMTc2YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6bTI2NC4xLTE2YzcuNSAwIDE0LjYgMy42IDE5LjEgOS42TDQ3OS43IDMzNi4yYzUuOSA3LjkgNi40IDE4LjUgMS4zIDI2LjlzLTE0LjggMTIuOC0yNC41IDExLjFjLTQ1LjgtNy44LTEwMy4zLTE0LjItMTY4LjQtMTQuMi02NS42IDAtMTIzLjQgNi41LTE2OS4zIDE0LjQtOS44IDEuNy0xOS43LTIuOS0yNC43LTExLjVzLTQuMy0xOS40IDEuOS0yNy4yTDE2NS4zIDI0OWM0LjYtNS43IDExLjUtOSAxOC43LTlzMTQuMiAzLjMgMTguNyA5bDI3LjUgMzQuNCA4Ni43LTExMy45YzQuNi02IDExLjctOS41IDE5LjItOS41eiJdfSxDNz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG9jay1yb3RhdGUtbGVmdCIsaWNvbjpbNTc2LDUxMixbImhpc3RvcnkiXSwiZjFkYSIsIk0yODggNjRjMTA2IDAgMTkyIDg2IDE5MiAxOTJTMzk0IDQ0OCAyODggNDQ4Yy02NS4yIDAtMTIyLjktMzIuNS0xNTcuNi04Mi4zLTEwLjEtMTQuNS0zMC4xLTE4LTQ0LjYtNy45cy0xOCAzMC4xLTcuOSA0NC42QzEyNC4xIDQ2OC42IDIwMSA1MTIgMjg4IDUxMiA0MjkuNCA1MTIgNTQ0IDM5Ny40IDU0NCAyNTZTNDI5LjQgMCAyODggMEMyMDIuMyAwIDEyNi41IDQyLjEgODAgMTA2LjdMODAgODBjMC0xNy43LTE0LjMtMzItMzItMzJTMTYgNjIuMyAxNiA4MGwwIDExMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNC42IDBjLjUgMCAxIDAgMS41IDBsODYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzguMyAwQzE1NC45IDEwMi42IDIxNyA2NCAyODggNjR6bTI0IDg4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTA0YzAgNi40IDIuNSAxMi41IDcgMTdsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NS02NSAwLTk0LjF6Il19LGdMdD1DNyx4THQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiamFyLXdoZWF0IixpY29uOlszMjAsNTEyLFtdLCJlNTE3IiwiTTMyLThjMC0xMy4zIDEwLjctMjQgMjQtMjRsMjA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNTYgMTZDNDIuNyAxNiAzMiA1LjMgMzItOHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMTEyIDMybC00Mi4yIDBjLTMuMiAwLTUuOCAyLjYtNS44IDUuOCAwIDMyLjEgMjYgNTguMiA1OC4yIDU4LjJsNzUuNiAwYzMyLjEgMCA1OC4yLTI2IDU4LjItNTguMiAwLTMuMi0yLjYtNS44LTUuOC01LjhMMjA4IDE2MGMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjctMTEuNy0xMy4zLTI4LjktMjEuNy00OC0yMS43em00OCAxMTcuN2MtMTEuNy0xMy4zLTI4LjktMjEuNy00OC0yMS43bC00Mi4yIDBjLTMuMiAwLTUuOCAyLjYtNS44IDUuOCAwIDMyLjEgMjYgNTguMiA1OC4yIDU4LjJsNzUuNiAwYzMyLjEgMCA1OC4yLTI2IDU4LjItNTguMiAwLTMuMi0yLjYtNS44LTUuOC01LjhMMjA4IDI1NmMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjd6TTExMiAzNTJsLTQyLjIgMGMtMy4yIDAtNS44IDIuNi01LjggNS44IDAgMzIuMSAyNiA1OC4yIDU4LjIgNTguMmwyMS44IDAgMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMzIgMjEuOCAwYzMyLjEgMCA1OC4yLTI2IDU4LjItNTguMiAwLTMuMi0yLjYtNS44LTUuOC01LjhMMjA4IDM1MmMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjctMTEuNy0xMy4zLTI4LjktMjEuNy00OC0yMS43eiJdfSxpVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG91ZC1hcnJvdy1kb3duIixpY29uOls1NzYsNTEyLFs2MjMzNywiY2xvdWQtZG93bmxvYWQiLCJjbG91ZC1kb3dubG9hZC1hbHQiXSwiZjBlZCIsIk0xNDQgNDgwYy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NCAwLTYzLjQgNDEtMTE3LjIgOTcuOS0xMzYuNS0xLjMtNy43LTEuOS0xNS41LTEuOS0yMy41IDAtNzkuNSA2NC41LTE0NCAxNDQtMTQ0IDU1LjQgMCAxMDMuNSAzMS4zIDEyNy42IDc3LjEgMTQuMi04LjMgMzAuOC0xMy4xIDQ4LjQtMTMuMSA1MyAwIDk2IDQzIDk2IDk2IDAgMTUuNy0zLjggMzAuNi0xMC41IDQzLjcgNDQgMjAuMyA3NC41IDY0LjcgNzQuNSAxMTYuMyAwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMzA0IDB6TTM3NyAzMTNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMzEgMzEgMC0xMDIuMWMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDEwMi4xLTMxLTMxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDcyLTcyeiJdfSxiTHQ9aVUsdkx0PWlVLGtuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cnVjay1yYW1wLWJveCIsaWNvbjpbNTc2LDUxMixbInRydWNrLWxvYWRpbmciXSwiZjRkZSIsIk00MDAgMzJjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjQ4LjItMjk3LjIgODkuMkM1LjkgNDU0LjQtMy43IDQ3Mi4zIDEuNCA0ODkuMnMyMi45IDI2LjUgMzkuOCAyMS41bDMxNS41LTk0LjYgNDMuNyAwYy0uMiAyLjYtLjQgNS4zLS40IDggMCA0OC42IDM5LjQgODggODggODhzODgtMzkuNCA4OC04OGwwLTM5Mi0xNzYgMHpNNTI4IDQyNGMwIDIyLjEtMTcuOSA0MC00MCA0MHMtNDAtMTcuOS00MC00MCAxNy45LTQwIDQwLTQwYzIyLjEgMCAzOS45IDE3LjkgNDAgMzkuOWwwIC4xek01MS45IDE0OS41QzE4LjEgMTU5LjgtLjkgMTk1LjYgOS40IDIyOS40bDI4LjEgOTEuOEM0Ny44IDM1NSA4My42IDM3NCAxMTcuNCAzNjMuN2w5MS44LTI4LjFjMzMuOC0xMC4zIDUyLjgtNDYuMSA0Mi41LTc5LjlsLTI4LjEtOTEuOGMtMTAuMy0zMy44LTQ2LjEtNTIuOC03OS45LTQyLjVMNTEuOSAxNDkuNXoiXX0seUx0PWtuZSx3THQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5nbGUtZG93biIsaWNvbjpbMzg0LDUxMixbODk2NF0sImYxMDciLCJNMTY5LjQgMzc0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgMzA2LjcgNTQuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHoiXX0sTUx0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsdWctY2lyY2xlLWNoZWNrIixpY29uOls2NDAsNTEyLFtdLCJlNTVjIiwiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzUyIDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXX0sekx0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndpbmRvdy1tYXhpbWl6ZSIsaWNvbjpbNTEyLDUxMixbMTI4NDcwXSwiZjJkMCIsIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMjQgNjRsMzM2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSxrTHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZHMtaG9sZGluZy1jaXJjbGUiLGljb246WzY0MCw1MTIsW10sImU0ZmIiLCJNMzIwIDBhMTI4IDEyOCAwIDEgMSAwIDI1NiAxMjggMTI4IDAgMSAxIDAtMjU2ek00MCA2NGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDE2MC4yYzAgMTcgNi43IDMzLjMgMTguNyA0NS4zbDUxLjEgNTEuMWM4LjMgOC4zIDIxLjMgOS42IDMxIDMuMSAxMi45LTguNiAxNC43LTI2LjkgMy43LTM3LjgtNy4zLTcuMy0yMy4xLTIzLjEtNDcuMi00Ny4yLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBjMjQuMSAyNC4xIDM5LjkgMzkuOSA0Ny4yIDQ3LjJsMCAwIDI1LjMgMjUuM2MyMSAyMSAzMi44IDQ5LjUgMzIuOCA3OS4ybDAgNzguOWMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNjYuNyAwYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0wyOC4xIDM5My40QzEwLjEgMzc1LjQgMCAzNTEgMCAzMjUuNUwwIDEwNEMwIDgxLjkgMTcuOSA2NCA0MCA2NHptNTYwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAyMjEuNWMwIDI1LjUtMTAuMSA0OS45LTI4LjEgNjcuOUw1MTIgNDkzLjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMNDAwIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC03OC45YzAtMjkuNyAxMS44LTU4LjIgMzIuOC03OS4ybDI1LjMtMjUuMyAwIDBjNy4zLTcuMyAyMy4xLTIzLjEgNDcuMi00Ny4yIDEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTI0LjEgMjQuMS0zOS45IDM5LjktNDcuMiA0Ny4yLTExIDExLTkuMiAyOS4yIDMuNyAzNy44IDkuNyA2LjUgMjIuNyA1LjIgMzEtMy4xbDUxLjEtNTEuMWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDU2MCAxMDRjMC0yMi4xIDE3LjktNDAgNDAtNDB6Il19LFNuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsb2NhdGlvbi1waW4iLGljb246WzM4NCw1MTIsWyJtYXAtbWFya2VyIl0sImYwNDEiLCJNMTkyIDBDODYgMCAwIDg0LjQgMCAxODguNiAwIDMwNy45IDEyMC4yIDQ1MC45IDE3MC40IDUwNS40IDE4Mi4yIDUxOC4yIDIwMS44IDUxOC4yIDIxMy42IDUwNS40IDI2My44IDQ1MC45IDM4NCAzMDcuOSAzODQgMTg4LjYgMzg0IDg0LjQgMjk4IDAgMTkyIDB6Il19LFNMdD1TbmUsQ0x0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvd2xpbmctYmFsbCIsaWNvbjpbNTEyLDUxMixbXSwiZjQzNiIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjQwIDgwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMjA4IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tNjQtNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxDbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FydC1mbGF0YmVkIixpY29uOls1NzYsNTEyLFsiZG9sbHktZmxhdGJlZCJdLCJmNDc0IiwiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyODhjMCAzOS44IDI5LjEgNzIuOCA2Ny4xIDc5LTIgNS4zLTMuMSAxMS0zLjEgMTcgMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGMwLTUuNi0xLTExLTIuNy0xNmwxOTcuNSAwYy0xLjggNS0yLjcgMTAuNC0yLjcgMTYgMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGMwLTUuNi0xLTExLTIuNy0xNmwzNC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQwMCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yODhDMTI4IDM1LjggOTIuMiAwIDQ4IDBMMzIgMHpNMjI0IDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE3NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyNDAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE3NmMwLTI2LjUtMjEuNS00OC00OC00OEwyMjQgNjR6Il19LExMdD1DbmUsTG5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLXVzZXIiLGljb246WzUxMiw1MTIsWyJob21lLXVzZXIiXSwiZTFiMCIsIk0yNzcuOCA4LjZjLTEyLjMtMTEuNC0zMS4zLTExLjQtNDMuNSAwbC0yMjQgMjA4Yy05LjYgOS0xMi44IDIyLjktOCAzNS4xUzE4LjggMjcyIDMyIDI3MmwxNiAwIDAgMTc2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTc2IDE2IDBjMTMuMiAwIDI1LTguMSAyOS44LTIwLjNzMS42LTI2LjItOC0zNS4xbC0yMjQtMjA4ek0yMDAgMjU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTQ0IDQzMmMwLTQ0LjIgMzUuOC04MCA4MC04MGw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnoiXX0sVEx0PUxuZSxfTHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2hvc3QiLGljb246WzM4NCw1MTIsWzEyODEyM10sImY2ZTIiLCJNNDAuMSA0NjcuMWwtMTEuMiA5QzI1LjcgNDc4LjYgMjEuOCA0ODAgMTcuOCA0ODAgOCA0ODAgMCA0NzIgMCA0NjIuMkwwIDE5MkMwIDg2IDg2IDAgMTkyIDBTMzg0IDg2IDM4NCAxOTJsMCAyNzAuMmMwIDkuOC04IDE3LjgtMTcuOCAxNy44LTQgMC03LjktMS40LTExLjEtMy45bC0xMS4yLTljLTEzLjQtMTAuNy0zMi44LTktNDQuMSAzLjlMMjY5LjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZsLTI2LjYtMzAuNWMtMTIuNy0xNC42LTM1LjQtMTQuNi00OC4yIDBMMTQxLjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZMODQuMiA0NzFjLTExLjMtMTIuOS0zMC43LTE0LjYtNDQuMS0zLjl6TTE2MCAxOTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxBTHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29tbWVudC1ub2RlcyIsaWNvbjpbNjQwLDUxMixbXSwiZTY5NiIsIk00ODAgMjA4QzUwMy43IDIwOCA1MjUuNiAyMTUuMyA1NDMuNyAyMjcuOSA1MzYuOSAxMDAuOSA0MjUgMCAyODggMCAxNDYuNiAwIDMyIDEwNy41IDMyIDI0MCAzMiAyOTQuMyA1MS4yIDM0NC4zIDgzLjYgMzg0LjVMMzQuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdjMjcuMiAxMS40IDU2LjkgMTguNCA4OC4xIDIwLjIgLjEtMTguOSA0LjktMzggMTUtNTUuNSAxNy4xLTI5LjcgNDUuOC00OC41IDc3LTU0LjJsOS4yLTE2Yy0zLjQtMTAuNy01LjItMjItNS4yLTMzLjggMC02MS45IDUwLjEtMTEyIDExMi0xMTJ6TTMyOC42IDQ0OGMtMTcuNyAzMC42LTcuMiA2OS43IDIzLjQgODcuNHM2OS43IDcuMiA4Ny40LTIzLjRjMS41LTIuNiAyLjgtNS4zIDMuOS04bDczLjMgMGMxLjEgMi43IDIuNCA1LjQgMy45IDggMTcuNyAzMC42IDU2LjggNDEuMSA4Ny40IDIzLjRzNDEuMS01Ni44IDIzLjQtODcuNGMtMTMuNC0yMy4yLTM5LjEtMzQuOC02NC0zMS40bC0xNy42LTMwLjdjLTExIDExLjctMjUgMjAuNi00MC42IDI1LjZsMTYuNSAyOC45Yy0zLjggNC44LTYuOCAxMC05IDE1LjZsLTczLjQgMGMtMi4yLTUuNi01LjMtMTAuOC05LTE1LjZsMzMtNTcuN2M0LjEgLjggOC40IDEuMyAxMi44IDEuMyAzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NC02NCAyOC43LTY0IDY0YzAgMTMuNCA0LjEgMjUuOCAxMS4yIDM2LjFsLTM0LjYgNjAuNWMtMjUtMy40LTUwLjYgOC4zLTY0IDMxLjR6Il19LCRMdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tYXJyb3ctZG93bi10by1saW5lIixpY29uOls1NzYsNTEyLFtdLCJlNTM4IiwiTTE5Mi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMzE4LjMgMjk5LjFsLTQ2LjMtNjIuNCAwIDI0My4zIDI3MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDU0NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MCAwIDAtMjQzLjMtNDYuMyA2Mi40Yy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxMTAgMTMyIDE0OS43IDExMiAxOTIgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42ek0xNzYgNDgwbDMyIDAgMC0xMjhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAxMjh6TTU2Ni42IDE2Ni42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDQzMiAxNDYuNyA0MzIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTQ2LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6Il19LERMdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbHVnLWNpcmNsZS1wbHVzIixpY29uOls2NDAsNTEyLFtdLCJlNTVmIiwiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTE2IDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNDgtNDggMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTQ4IDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTQ4IDAgMC00OHoiXX0sVG5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1zd2ltbWluZyIsaWNvbjpbNjQwLDUxMixbMTI3OTQ2LCJzd2ltbWVyIl0sImY1YzQiLCJNNTUyIDE1MmE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6TTI5My40IDE5OC4ybC04OC42IDczLjljMS4xIDAgMi4yLS4xIDMuMy0uMSAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgMjIuMSAxNi42IDI5LjEgMTYuNiA1MS4yIDAgMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgNC44IDAgOS43IC4yIDE0LjUgLjYtOC4zLTMwLTI0LjMtNTcuNy00Ni44LTgwLjItMTguNC0xOC40LTQwLjYtMzIuNy02NS00MS44bC02OC42LTI1LjdjLTI3LjQtMTAuMy01OC03LjUtODMuMSA3LjZsLTUzLjUgMzIuMWMtMTUuMiA5LjEtMjAuMSAyOC43LTExIDQzLjlzMjguNyAyMC4xIDQzLjkgMTFMMjMwIDE4Ny4zYzguNC01IDE4LjYtNS45IDI3LjctMi41bDM1LjcgMTMuNHptMTEwIDE4MS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgMzg2LjMgMTcuNiAzOTQuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il19LEVMdD1UbmUsX25lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvbW1lbnQtZG90cyIsaWNvbjpbNTEyLDUxMixbMTI4MTcyLDYyMDc1LCJjb21tZW50aW5nIl0sImY0YWQiLCJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6TTEyOCAyMDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LE5MdD1fbmUsQW5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoYXJ0LXBpZSIsaWNvbjpbNTc2LDUxMixbInBpZS1jaGFydCJdLCJmMjAwIiwiTTUxMi40IDI0MGwtMTc2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTc2YzAtMTcuNyAxNC40LTMyLjIgMzEuOS0yOS45IDEwNyAxNC4yIDE5MS44IDk5IDIwNiAyMDYgMi4zIDE3LjUtMTIuMiAzMS45LTI5LjkgMzEuOXpNMjIyLjYgMzcuMmMxOC4xLTMuOCAzMy44IDExIDMzLjggMjkuNWwwIDE5Ny4zYzAgNS42IDIgMTEgNS41IDE1LjNMMzk0IDQzOC43YzExLjcgMTQuMSA5LjIgMzUuNC02LjkgNDQuMS0zNC4xIDE4LjYtNzMuMiAyOS4yLTExNC43IDI5LjItMTMyLjUgMC0yNDAtMTA3LjUtMjQwLTI0MCAwLTExNS41IDgxLjUtMjExLjkgMTkwLjItMjM0Ljh6TTQ3Ny44IDI4OGw2NCAwYzE4LjUgMCAzMy4zIDE1LjcgMjkuNSAzMy44LTEwLjIgNDguNC0zNSA5MS40LTY5LjYgMTI0LjItMTIuMyAxMS43LTMxLjYgOS4yLTQyLjQtMy45TDM3NC45IDM0MC40Yy0xNy4zLTIwLjktMi40LTUyLjQgMjQuNi01Mi40bDc4LjIgMHoiXX0sUEx0PUFuZSxJTHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZnJvZyIsaWNvbjpbNTc2LDUxMixbXSwiZjUyZSIsIk0zNjggMzJjNDEuNyAwIDc1LjkgMzEuOCA3OS43IDcyLjVsODUuNiAyNi4zYzI1LjQgNy44IDQyLjggMzEuMyA0Mi44IDU3LjkgMCAyMS44LTExLjcgNDEuOS0zMC43IDUyLjdsLTE0NC41IDgyLjEgOTIuNSA5Mi41IDUwLjcgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRMMzQ2LjkgMzYwLjJjMTEuNy0zNiAzLjItNzcuMS0yNS40LTEwNS43LTQwLjYtNDAuNi0xMDYuMy00MC42LTE0Ni45LS4xTDEwMSAzMjQuNGMtNi40IDYuMS02LjcgMTYuMi0uNiAyMi42czE2LjIgNi42IDIyLjYgLjZsNzMuOC03MC4yIC4xLS4xIC4xLS4xYzMuNS0zLjUgNy4zLTYuNiAxMS4zLTkuMiAyNy45LTE4LjUgNjUuOS0xNS40IDkwLjUgOS4yIDI0LjcgMjQuNyAyNy43IDYyLjkgOSA5MC45LTIuNiAzLjgtNS42IDcuNS05IDEwLjlMMjYxLjggNDE2IDM1MiA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNDgwQzI4LjcgNDgwIDAgNDUxLjMgMCA0MTYgMCAyNDkuNiAxMjcgMTEyLjkgMjg5LjMgOTcuNSAyOTYuMiA2MC4yIDMyOC44IDMyIDM2OCAzMnptMCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxGTHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2luZS1ib3R0bGUiLGljb246WzMyMCw1MTIsW10sImY3MmYiLCJNODAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMiAwIDExLjgtNi40IDIyLjItMTYgMjcuN2wwIDE0NS42YzU2LjUgMjQuNyA5NiA4MS4xIDk2IDE0Ni43bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDU3NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyODhjMC02NS42IDM5LjUtMTIyIDk2LTE0Ni43TDk2LTQuM0M4Ni40LTkuOCA4MC0yMC4yIDgwLTMyek05NiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDI4OHoiXX0sT0x0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImluYm94IixpY29uOls1MTIsNTEyLFtdLCJmMDFjIiwiTTkxLjggMzJDNTkuOSAzMiAzMi45IDU1LjQgMjguNCA4Ni45TC42IDI4MS4yYy0uNCAzLS42IDYtLjYgOS4xTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTI1LjdjMC0zLS4yLTYuMS0uNi05LjFMNDgzLjYgODYuOUM0NzkuMSA1NS40IDQ1Mi4xIDMyIDQyMC4yIDMyTDkxLjggMzJ6bTAgNjRsMzI4LjUgMCAyNy40IDE5Mi01OS45IDBjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTE0LjMgMjguNmMtNS40IDEwLjgtMTYuNSAxNy43LTI4LjYgMTcuN2wtMTIwLjQgMGMtMTIuMSAwLTIzLjItNi44LTI4LjYtMTcuN2wtMTQuMy0yOC42Yy01LjQtMTAuOC0xNi41LTE3LjctMjguNi0xNy43TDY0LjMgMjg4IDkxLjggOTZ6Il19LCRuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtaCIsaWNvbjpbNDQ4LDUxMixbImgtc3F1YXJlIl0sImYwZmQiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzIwIDE2OGwwIDE3NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTY0LTk2IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE3NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNjQgOTYgMCAwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il19LEJMdD0kbmUsUkx0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLW1lZGljYWwiLGljb246WzUxMiw1MTIsW10sImUzYjIiLCJNMjc3LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVMxOC44IDI3MiAzMiAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyODggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3NiAxNiAwYzEzLjIgMCAyNS04LjEgMjkuOC0yMC4zczEuNi0yNi4yLTgtMzUuMWwtMjI0LTIwOHpNMjI0IDI0OGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXX0sRG5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1jaGV2cm9uLXJpZ2h0IixpY29uOls1MTIsNTEyLFsiY2hldnJvbi1jaXJjbGUtcmlnaHQiXSwiZjEzOCIsIk0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwIDI1NiAyNTYgMCAxIDAgLTUxMiAwek0yNDEgMzc3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDg3LTg3LTg3LTg3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBMMzQ1IDIzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUwyNDEgMzc3eiJdfSxITHQ9RG5lLHFMdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWNzdiIsaWNvbjpbNTc2LDUxMixbXSwiZjZkZCIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDgwIDAgMC0xMTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTc2IDAgMC0xNjUuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNMjY0IDM4MGMtMjQuMyAwLTQ0IDE5LjctNDQgNDRsMCA4MGMwIDI0LjMgMTkuNyA0NCA0NCA0NGwxNiAwYzI0LjMgMCA0NC0xOS43IDQ0LTQ0bDAtOGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCA4YzAgMi4yLTEuOCA0LTQgNGwtMTYgMGMtMi4yIDAtNC0xLjgtNC00bDAtODBjMC0yLjIgMS44LTQgNC00bDE2IDBjMi4yIDAgNCAxLjggNCA0bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0yNC4zLTE5LjctNDQtNDQtNDRsLTE2IDB6bTEzNiAwYy0yOC43IDAtNTIgMjMuMy01MiA1MnMyMy4zIDUyIDUyIDUyYzYuNiAwIDEyIDUuNCAxMiAxMnMtNS40IDEyLTEyIDEybC0zMiAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwzMiAwYzI4LjcgMCA1Mi0yMy4zIDUyLTUycy0yMy4zLTUyLTUyLTUyYy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEybDI0IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC0yNCAwem05NiAwYy0xMSAwLTIwIDktMjAgMjBsMCAzMS42YzAgMzUuNSAxMC41IDcwLjMgMzAuMiA5OS44bDUuMSA3LjdjMy43IDUuNiAxMCA4LjkgMTYuNiA4LjlzMTIuOS0zLjMgMTYuNi04LjlsNS4xLTcuN2MxOS43LTI5LjYgMzAuMi02NC4zIDMwLjItOTkuOGwwLTMxLjZjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgMzEuNmMwIDE5LjYtNC4xIDM4LjktMTIgNTYuNy03LjktMTcuOC0xMi0zNy4xLTEyLTU2LjdsMC0zMS42YzAtMTEtOS0yMC0yMC0yMHoiXX0sVkx0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhdC1jb3dib3kiLGljb246WzY0MCw1MTIsW10sImY4YzAiLCJNMTgyLjIgNzYuMUwxMzAuOCAzMDcuNUMxNDUuNSAzMjQuOSAxNjcuNCAzMzYgMTkyIDMzNmwyNTYgMGMyNC42IDAgNDYuNS0xMS4xIDYxLjItMjguNUw0NTcuOCA3Ni4xYy01LjctMjUuOC0yOC42LTQ0LjEtNTUtNDQuMS0xMi4yIDAtMjQuMSA0LTMzLjggMTEuM2wtNC43IDMuNWMtMjYuMyAxOS43LTYyLjQgMTkuNy04OC42IDBMMjcxIDQzLjNjLTkuOC03LjMtMjEuNi0xMS4zLTMzLjgtMTEuMy0yNi40IDAtNDkuMyAxOC4zLTU1IDQ0LjF6TTY0IDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDIzOC4zIDAgMjU2QzAgMzYyIDg2IDQ0OCAxOTIgNDQ4bDI1NiAwYzEwNiAwIDE5Mi04NiAxOTItMTkyIDAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0yNTYgMGMtNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjh6Il19LEVuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWdyaW4tdG9uZ3VlLXdpbmsiLGljb246WzUxMiw1MTIsWzEyODU0MCwiZ3Jpbi10b25ndWUtd2luayJdLCJmNThiIiwiTTE1Mi4yIDQ5MC4xQzYyLjUgNDUwLjIgMCAzNjAuNCAwIDI1NiAwIDExNC42IDExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZjMCAxMDQuNC02Mi41IDE5NC4yLTE1Mi4yIDIzNC4xIDUuMy0xMyA4LjItMjcuMiA4LjItNDIuMWwwLTYxLjdjMTYuOS0xNi41IDMwLjEtMzYuNyAzOC4zLTU5LjMgNC4zLTExLjgtNy43LTIxLjgtMTkuNi0xOC4xLTM5LjIgMTIuMi04My43IDE5LjEtMTMwLjcgMTkuMXMtOTEuNS02LjktMTMwLjctMTkuMWMtMTEuOS0zLjctMjMuOSA2LjMtMTkuNiAxOC4xIDguMyAyMi42IDIxLjUgNDIuOCAzOC4zIDU5LjNsMCA2MS43YzAgMTQuOSAyLjkgMjkuMSA4LjIgNDIuMXpNMTUyIDIxMmwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwIDktMjAgMjAtMjB6bTE4NCA2MGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpNMzIwIDQwMi42bDAgNDUuNGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGwwLTQ1LjRjMC0xNC43IDExLjktMjYuNiAyNi42LTI2LjZsMiAwYzExLjMgMCAyMS4xIDcuOSAyMy42IDE4LjkgMi44IDEyLjYgMjAuOCAxMi42IDIzLjYgMCAyLjUtMTEuMSAxMi4zLTE4LjkgMjMuNi0xOC45bDIgMGMxNC43IDAgMjYuNiAxMS45IDI2LjYgMjYuNnpNMzM2IDE4NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il19LFVMdD1FbmUsakx0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImwiLGljb246WzMyMCw1MTIsWzEwOF0sIjRjIiwiTTY0IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzUyIDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMzIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LG9VPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LWRvd24tc2hvcnQtd2lkZSIsaWNvbjpbNTc2LDUxMixbInNvcnQtYW1vdW50LWRlc2MiLCJzb3J0LWFtb3VudC1kb3duLWFsdCJdLCJmODg0IiwiTTI0Ni42IDM3NC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyA0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMzIwIDMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTI4bDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTI4bDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdfSxXTHQ9b1UsR0x0PW9VLE5uZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VyZ2xhc3MtaGFsZiIsaWNvbjpbMzg0LDUxMixbImhvdXJnbGFzcy0yIl0sImYyNTIiLCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwwIDExYzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMWw2Ny45IDY3LjktNjcuOSA2Ny45QzQ4LjkgMzUzLjkgMzIgMzk0LjYgMzIgNDM3bDAgMTFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMWMwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFsLTY3LjktNjcuOSA2Ny45LTY3LjljMzAtMzAgNDYuOS03MC43IDQ2LjktMTEzLjFsMC0xMWMxNy43IDAgMzItMTQuMyAzMi0zMlMzNjkuNyAwIDM1MiAwTDMyIDB6TTk2IDc1bDAtMTEgMTkyIDAgMCAxMWMwIDE5LTUuNiAzNy40LTE2IDUzTDExMiAxMjhjLTEwLjMtMTUuNi0xNi0zNC0xNi01M3ptMTYgMzA5YzMuNS01LjMgNy42LTEwLjMgMTIuMS0xNC45bDY3LjktNjcuOSA2Ny45IDY3LjljNC42IDQuNiA4LjYgOS42IDEyLjIgMTQuOUwxMTIgMzg0eiJdfSxZTHQ9Tm5lLFBuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcG9vbiIsaWNvbjpbNTEyLDUxMixbMTI5MzQ4LDYxODczLCJ1dGVuc2lsLXNwb29uIl0sImYyZTUiLCJNMjQ1LjggMjIwLjljLTE0LjUtMTcuNi0yMS44LTM5LjItMjEuOC02MC44IDAtODAuMiA5Ni0xNjAuMiAxOTItMTYwLjIgNTMgMCA5NiA0MyA5NiA5NiAwIDk2LTgwIDE5Mi0xNjAuMiAxOTItMjEuNiAwLTQzLjItNy4zLTYwLjgtMjEuOEw1NC42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDUuOCAyMjAuOXoiXX0sWkx0PVBuZSxJbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY3JlZGl0LWNhcmQiLGljb246WzUxMiw1MTIsWzEyODE3OSw2MjA4MywiY3JlZGl0LWNhcmQtYWx0Il0sImYwOWQiLCJNMCAxMjhsMCAzMiA1MTIgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4em0wIDgwTDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTc2LTUxMiAwek02NCAzNjBjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTE0NCAwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdfSxYTHQ9SW5lLFJVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtaW52b2ljZS1kb2xsYXIiLGljb246WzM4NCw1MTIsW10sImY1NzEiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTY0IDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNjRDNzQuNyA2NCA2NCA3NC43IDY0IDg4em0wIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0xMTIgNzZsMCA0Yy0yOC44IC4zLTUyIDIzLjctNTIgNTIuNSAwIDI1LjcgMTguNSA0Ny42IDQzLjkgNTEuOGw0MS43IDdjNiAxIDEwLjQgNi4yIDEwLjQgMTIuMyAwIDYuOS01LjYgMTIuNS0xMi41IDEyLjVMMTUyIDQwMGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsMjQgMCAwIDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC00LjdjMjUtNC4xIDQ0LTI1LjcgNDQtNTEuOCAwLTI1LjctMTguNS00Ny42LTQzLjktNTEuOGwtNDEuNy03Yy02LTEtMTAuNC02LjItMTAuNC0xMi4zIDAtNi45IDUuNi0xMi41IDEyLjUtMTIuNWw0Ny41IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC04IDAgMC00YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMHoiXX0sRm5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNwYWdoZXR0aS1tb25zdGVyLWZseWluZyIsaWNvbjpbNjQwLDUxMixbInBhc3RhZmFyaWFuaXNtIl0sImY2N2IiLCJNMjA4IDY0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDBjMCAxNi4yLTYgMzEuMS0xNiA0Mi4zbDE1LjYgMzEuMmMxOC43LTYgMzkuOS05LjUgNjQuNC05LjVzNDUuOCAzLjUgNjQuNCA5LjVMNDAwIDEwNi4zYy0xMC0xMS4zLTE2LTI2LjEtMTYtNDIuMyAwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0LTI4LjcgNjQtNjQgNjRjLTEuNyAwLTMuNC0uMS01LjEtLjJMNDI3LjggMTU4YzIxLjEgMTMuNiAzNy43IDMwLjIgNTEuNCA0Ni40IDcuMSA4LjMgMTMuNSAxNi42IDE5LjMgMjRsMS40IDEuOGM2LjMgOC4xIDExLjYgMTQuOCAxNi43IDIwLjQgMTAuNyAxMS43IDE2LjEgMTMuNCAxOS40IDEzLjQgMi41IDAgNC4zLS42IDcuMS0zLjMgMy43LTMuNSA3LjEtOC44IDEyLjUtMTcuNGwuNi0uOWM0LjYtNy40IDExLTE3LjYgMTkuNC0yNS43IDkuNy05LjMgMjIuOS0xNi43IDQwLjQtMTYuNyAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMi41IDAtNC4zIC42LTcuMSAzLjMtMy43IDMuNS03LjEgOC44LTEyLjUgMTcuNGwtLjYgLjljLTQuNiA3LjQtMTEgMTcuNi0xOS40IDI1LjctOS43IDkuMy0yMi45IDE2LjctNDAuNCAxNi43LTE4LjUgMC0zMi45LTguNS00NC4zLTE4LjYtMy4xIDQtNi42IDguMy0xMC41IDEyLjcgMS40IDQuMyAyLjggOC41IDQgMTIuNSAuOSAzIDEuOCA1LjggMi42IDguNiAzIDkuOCA1LjUgMTguMiA4LjYgMjUuOSAzLjkgOS44IDcuNCAxNS40IDEwLjggMTguNSAyLjYgMi40IDUuOSA0LjMgMTIuOCA0LjMgOC43IDAgMTYuOS00LjIgMzMuNy0xMy4yIDE1LTggMzUuNy0xOC44IDYyLjMtMTguOCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMTMuNCAwLTI0LjcgNS4yLTM5LjcgMTMuMi0xIC42LTIuMSAxLjEtMy4yIDEuNy0xMy4xIDcuMS0zMS42IDE3LjEtNTMuMSAxNy4xLTE4LjQgMC0zMy42LTYuMS00NS41LTE3LjItMTEuMS0xMC4zLTE3LjktMjMuNy0yMi43LTM2LTMuNi05LTYuNy0xOS4xLTkuNS0yOC41LTE2LjQgMTIuMy0zNi4xIDIzLjYtNTguOSAzMS4zIDMuNiAxMC44IDguNCAyMy41IDE0LjQgMzYuMiA3LjUgMTUuOSAxNi4yIDMwLjQgMjUuOCA0MC41IDkuNiAxMC4yIDE3LjcgMTMuNyAyNC41IDEzLjcgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTI1LjIgMC00NS0xMy41LTU5LjUtMjguOC0xNC41LTE1LjQtMjUuNy0zNC45LTM0LjItNTMtOC0xNy0xNC4xLTMzLjgtMTguMy00Ni45LTUuMiAuNC0xMC42IC42LTE2IC42cy0xMC44LS4yLTE2LS42Yy00LjIgMTMtMTAuMyAyOS45LTE4LjMgNDYuOS04LjUgMTguMS0xOS44IDM3LjYtMzQuMiA1My0xNC40IDE1LjMtMzQuMyAyOC44LTU5LjUgMjguOC0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzYuOCAwIDE1LTMuNSAyNC41LTEzLjcgOS41LTEwLjEgMTguMy0yNC42IDI1LjgtNDAuNSA1LjktMTIuNiAxMC43LTI1LjQgMTQuNC0zNi4yLTIyLjgtNy43LTQyLjUtMTktNTguOS0zMS4zLTIuOSA5LjQtNiAxOS41LTkuNSAyOC41LTQuOCAxMi4yLTExLjYgMjUuNi0yMi43IDM2LTExLjkgMTEuMS0yNy4xIDE3LjItNDUuNSAxNy4yLTEzLjEgMC0yNC41LTQuMS0zMy44LTguOS03LjktNC0xNS43LTkuMi0yMi4xLTEzLjVsMCAwLTIuNC0xLjZjLTE1LjMtMTAuMi0yNS44LTE2LTM3LjctMTYtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyOC4xIDAgNDkuNiAxNC4yIDY0LjMgMjRsMi40IDEuNmM2LjkgNC42IDEyLjEgOC4xIDE3LjIgMTAuNyA1LjUgMi44IDkuMSAzLjYgMTIgMy42IDYuOCAwIDEwLjItMS45IDEyLjgtNC4zIDMuNC0zLjIgNy04LjggMTAuOC0xOC41IDMtNy43IDUuNi0xNi4xIDguNi0yNS45IC44LTIuNyAxLjctNS42IDIuNi04LjYgMS4yLTQgMi42LTguMiA0LTEyLjUtMy45LTQuNS03LjQtOC44LTEwLjUtMTIuNy0xMS40IDEwLjEtMjUuOSAxOC42LTQ0LjMgMTguNi0xNy41IDAtMzAuNy03LjQtNDAuNC0xNi43LTguNC04LjEtMTQuOC0xOC4zLTE5LjQtMjUuN2wtLjYtLjljLTUuNC04LjYtOC44LTEzLjktMTIuNS0xNy40LTIuOC0yLjctNC42LTMuMy03LjEtMy4zLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMTcuNSAwIDMwLjcgNy40IDQwLjQgMTYuNyA4LjQgOC4xIDE0LjggMTguMyAxOS40IDI1LjdsLjYgLjljNS40IDguNiA4LjggMTMuOSAxMi41IDE3LjQgMi44IDIuNyA0LjYgMy4zIDcuMSAzLjMgMy4zIDAgOC43LTEuNyAxOS40LTEzLjQgNS4xLTUuNiAxMC40LTEyLjMgMTYuNy0yMC40bDEuNC0xLjhjNS44LTcuNCAxMi4yLTE1LjcgMTkuMy0yNCAxMy44LTE2LjIgMzAuMy0zMi44IDUxLjQtNDYuNGwtMTUuMS0zMC4yYy0xLjcgLjEtMy40IC4yLTUuMSAuMi0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0IDY0IDI4LjcgNjQgNjR6bTIwOCAwYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6Il19LFFMdD1GbmUsT25lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcnRpbmktZ2xhc3MtY2l0cnVzIixpY29uOls2NDAsNTEyLFsiY29ja3RhaWwiXSwiZjU2MSIsIk01NzYgODBjMC00NC4yLTM1LjgtODAtODAtODAtMTggMC0zNC42IDYtNDggMTZsLTgxIDBjMjMuNi00Ny40IDcyLjUtODAgMTI5LTgwIDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0UzU3NS41IDIyNCA0OTYgMjI0Yy02LjUgMC0xMy0uNC0xOS4zLTEuM2w2NC03NC43YzEuMS0xLjMgMi4yLTIuNyAzLjMtNC4xIDE5LjQtMTQuNiAzMi0zNy44IDMyLTY0ek02Ni45IDgyLjZDNzIuMiA3MS4zIDgzLjUgNjQgOTYgNjRsMzg0IDBjMTIuNSAwIDIzLjggNy4zIDI5LjEgMTguNnMzLjQgMjQuNy00LjggMzQuMmwtMTg0LjMgMjE1IDAgMTE2LjIgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMCAwLTExNi4yLTE4NC4zLTIxNWMtOC4xLTkuNS0xMC0yMi44LTQuOC0zNC4yek0xNjUuNiAxMjhMMjg4IDI3MC44IDQxMC40IDEyOCAxNjUuNiAxMjh6Il19LEtMdD1PbmUsSkx0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1bGxob3JuIixpY29uOls1MTIsNTEyLFsxMjgyMjYsMTI4MzYzXSwiZjBhMSIsIk00NjEuMiAxOC45QzQ3Mi43IDI0IDQ4MCAzNS40IDQ4MCA0OGwwIDQxNmMwIDEyLjYtNy4zIDI0LTE4LjggMjkuMXMtMjQuOCAzLjItMzQuMy01LjFsLTQ2LjYtNDAuN2MtNDMuNi0zOC4xLTk4LjctNjAuMy0xNTYuNC02M2wwIDk1LjdjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZDNTcuMyAzODQgMCAzMjYuNyAwIDI1NlM1Ny4zIDEyOCAxMjggMTI4bDg0LjUgMGM2MS44LS4yIDEyMS40LTIyLjcgMTY3LjktNjMuM2w0Ni42LTQwLjdjOS40LTguMyAyMi45LTEwLjIgMzQuMy01LjF6TTIyNCAzMjBsMCAuMmM3MC4zIDIuNyAxMzcuOCAyOC41IDE5MiA3My40bDAtMjc1LjNjLTU0LjIgNDQuOS0xMjEuNyA3MC43LTE5MiA3My40TDIyNCAzMjB6Il19LGVUdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib3gtdGlzc3VlIixpY29uOls1MTIsNTEyLFtdLCJlMDViIiwiTTEwMy45IDMybDE2MSAwYzEzLjggMCAyNiA4LjggMzAuNCAyMS45bDE3LjQgNTIuMmM0LjQgMTMuMSAxNi42IDIxLjkgMzAuNCAyMS45bDYwLjUgMGMyMS44IDAgMzcuMyAyMS40IDMwLjQgNDIuMUwzODQgMzIwIDEyOCAzMjAgNzIuNyA3MC45QzY4LjIgNTEgODMuNCAzMiAxMDMuOSAzMnpNNDggMjU2bDE2LjYgMCAxNi41IDc0LjRDODYgMzUyLjQgMTA1LjUgMzY4IDEyOCAzNjhsMjU2IDBjMjAuNyAwIDM5LTEzLjIgNDUuNS0zMi44bDI2LjQtNzkuMiA4LjEgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDEyOGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzA0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4eiJdfSx0VHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWF0dHJlc3MtcGlsbG93IixpY29uOls1NzYsNTEyLFtdLCJlNTI1IiwiTTI1NiA2NEw2NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMCAwLTM4NHptNDggMzg0bDIwOCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0yMDggMCAwIDM4NHpNNjQgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTkyeiJdfSxhVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hldnJvbi1sZWZ0IixpY29uOlszMjAsNTEyLFs5MDAxXSwiZjA1MyIsIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAyNDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xOTIgMTkyeiJdfSxyVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQtbW9vbi1yYWluIixpY29uOls1NzYsNTEyLFtdLCJmNzNjIiwiTTQ0OCAwYy02OC42IDAtMTI3LjEgNDMuMS0xNDkuOCAxMDMuOCAxNy4xIDE0LjEgMjkuNiAzMy41IDM0LjkgNTUuOCAzOS45IDIxLjcgNjYuOSA2My45IDY2LjkgMTEyLjUgMCAxMy41LTIuMSAyNi41LTUuOSAzOC43IDE2LjkgNiAzNSA5LjMgNTMuOSA5LjMgNDMgMCA4Mi4xLTE3IDExMC44LTQ0LjYgNC42LTQuNCA1LjktMTEuMiAzLjMtMTdzLTguNi05LjMtMTQuOS04LjhjLTMgLjItNi4xIC40LTkuMiAuNC02My41IDAtMTE1LTUxLjUtMTE1LTExNSAwLTQ1LjEgMjYtODQuMiA2My44LTEwMyA1LjctMi44IDktOC45IDguMi0xNS4yUzQ4OS42IDUuMyA0ODMuNCAzLjlDNDcyIDEuNCA0NjAuMiAwIDQ0OCAwek0yNzIgMzUyYzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtMzktMjcuOS03MS41LTY0LjgtNzguNiAuNS0zLjEgLjgtNi4yIC44LTkuNCAwLTMwLjktMjUuMS01Ni01Ni01Ni0xMi40IDAtMjMuOSA0LTMzLjEgMTAuOC0xMy40LTI1LjUtNDAuMS00Mi44LTcwLjktNDIuOC00NC4yIDAtODAgMzUuOC04MCA4MCAwIDcuNCAxIDE0LjYgMi45IDIxLjUtMjkuOCAxMS42LTUwLjkgNDAuNi01MC45IDc0LjUgMCA0NC4yIDM1LjggODAgODAgODBsMTkyIDB6TTY5IDQwMS4xYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJMMTcuMiA0ODAuNEMxMyA0OTMgMTkuOCA1MDYuNiAzMi40IDUxMC44czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40em0xMjAgMGMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS40IDY0LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHptMTIwIDBjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuNCA2NC4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6Il19LHNVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LWRvd24tMS05IixpY29uOls1MTIsNTEyLFsic29ydC1udW1lcmljLWFzYyIsInNvcnQtbnVtZXJpYy1kb3duIl0sImYxNjIiLCJNNDE4LjcgMzhjOC4zIDYgMTMuMyAxNS43IDEzLjMgMjZsMCA5NiAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC01MS42LTUuOSAyYy0xNi44IDUuNi0zNC45LTMuNS00MC41LTIwLjJzMy41LTM0LjkgMjAuMi00MC41bDQ4LTE2YzkuOC0zLjMgMjAuNS0xLjYgMjguOCA0LjR6TTM2NS4xIDQzMC42bDExLjctMThjLTMyLjktOS45LTU2LjgtNDAuNS01Ni44LTc2LjYgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDIyLjktNi42IDQ1LjMtMTkuMSA2NC41bC00Mi4xIDY0LjljLTkuNiAxNC44LTI5LjQgMTkuMS00NC4zIDkuNHMtMTkuMS0yOS40LTkuNC00NC4zek00MjQgMzM2YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTE1MC42IDQ3MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC05NiA5NnoiXX0saVR0PXNVLG9UdD1zVSxzVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZC1zcG9jayIsaWNvbjpbNTEyLDUxMixbMTI4NDA2XSwiZjI1OSIsIk0yMTQuOSAyMy43QzIxMC4zIDYuNiAxOTIuOC0zLjUgMTc1LjcgMS4xcy0yNy4yIDIyLjEtMjIuNiAzOS4yTDIwNiAyMzcuOGMyLjUgOS4yLTQuNSAxOC4yLTE0IDE4LjItNi40IDAtMTItNC4yLTEzLjktMTAuM0wxMzQuNiAxMDIuN2MtNS4xLTE2LjktMjMtMjYuNC0zOS45LTIxLjNzLTI2LjQgMjMtMjEuMyAzOS45bDYyLjggMjA2LjRjMi40IDcuOS03LjIgMTMuOC0xMy4yIDguMUw2Ny42IDI4M2MtMTYtMTUuMi00MS4zLTE0LjYtNTYuNiAxLjRTLTMuNiAzMjUuNyAxMi40IDM0MUwxMjQuOCA0NDhjNDMuMSA0MS4xIDEwMC40IDY0IDE2MCA2NGwxOS4xIDBjLjEgMCAuMS0uMSAuMS0uMXMuMS0uMSAuMS0uMWM1OC4zLTMuNSAxMDguNi00My4yIDEyNS4zLTk5LjdsODEuMi0yNzVjNS0xNi45LTQuNy0zNC43LTIxLjYtMzkuOHMtMzQuNyA0LjctMzkuOCAyMS42TDQxMS41IDI0Ny4xYy0xLjYgNS4zLTYuNCA4LjktMTIgOC45LTcuOSAwLTEzLjgtNy4zLTEyLjItMTUuMWwzNi0xNzAuM2MzLjctMTcuMy03LjQtMzQuMy0yNC43LTM3LjlzLTM0LjMgNy40LTM3LjkgMjQuN0wzMjMuMSAyMzUuMWMtMi42IDEyLjItMTMuMyAyMC45LTI1LjggMjAuOS0xMS45IDAtMjIuNC04LTI1LjQtMTkuNWwtNTctMjEyLjh6Il19LEJuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3YW5kLW1hZ2ljLXNwYXJrbGVzIixpY29uOls1NzYsNTEyLFsibWFnaWMtd2FuZC1zcGFya2xlcyJdLCJlMmNhIiwiTTI2My40LTI3TDI3OC4yIDkuOCAzMTUgMjQuNmMzIDEuMiA1IDQuMiA1IDcuNHMtMiA2LjItNSA3LjRMMjc4LjIgNTQuMiAyNjMuNCA5MWMtMS4yIDMtNC4yIDUtNy40IDVzLTYuMi0yLTcuNC01TDIzMy44IDU0LjIgMTk3IDM5LjRjLTMtMS4yLTUtNC4yLTUtNy40czItNi4yIDUtNy40TDIzMy44IDkuOCAyNDguNi0yN2MxLjItMyA0LjItNSA3LjQtNXM2LjIgMiA3LjQgNXpNMTEwLjcgNDEuN2wyMS41IDUwLjEgNTAuMSAyMS41YzUuOSAyLjUgOS43IDguMyA5LjcgMTQuN3MtMy44IDEyLjItOS43IDE0LjdsLTUwLjEgMjEuNS0yMS41IDUwLjFjLTIuNSA1LjktOC4zIDkuNy0xNC43IDkuN3MtMTIuMi0zLjgtMTQuNy05LjdMNTkuOCAxNjQuMiA5LjcgMTQyLjdDMy44IDE0MC4yIDAgMTM0LjQgMCAxMjhzMy44LTEyLjIgOS43LTE0LjdMNTkuOCA5MS44IDgxLjMgNDEuN0M4My44IDM1LjggODkuNiAzMiA5NiAzMnMxMi4yIDMuOCAxNC43IDkuN3pNNDY0IDMwNGM2LjQgMCAxMi4yIDMuOCAxNC43IDkuN2wyMS41IDUwLjEgNTAuMSAyMS41YzUuOSAyLjUgOS43IDguMyA5LjcgMTQuN3MtMy44IDEyLjItOS43IDE0LjdsLTUwLjEgMjEuNS0yMS41IDUwLjFjLTIuNSA1LjktOC4zIDkuNy0xNC43IDkuN3MtMTIuMi0zLjgtMTQuNy05LjdsLTIxLjUtNTAuMS01MC4xLTIxLjVjLTUuOS0yLjUtOS43LTguMy05LjctMTQuN3MzLjgtMTIuMiA5LjctMTQuN2w1MC4xLTIxLjUgMjEuNS01MC4xYzIuNS01LjkgOC4zLTkuNyAxNC43LTkuN3pNNDYwIDBjMTEgMCAyMS42IDQuNCAyOS41IDEyLjJsNDIuMyA0Mi4zQzUzOS42IDYyLjQgNTQ0IDczIDU0NCA4NHMtNC40IDIxLjYtMTIuMiAyOS41bC04OC4yIDg4LjItMTAxLjMtMTAxLjMgODguMi04OC4yQzQzOC40IDQuNCA0NDkgMCA0NjAgMHpNNDQuMiAzOTguNUwzMDguNCAxMzQuMyA0MDkuNyAyMzUuNiAxNDUuNSA0OTkuOEMxMzcuNiA1MDcuNiAxMjcgNTEyIDExNiA1MTJzLTIxLjYtNC40LTI5LjUtMTIuMkw0NC4yIDQ1Ny41QzM2LjQgNDQ5LjYgMzIgNDM5IDMyIDQyOHM0LjQtMjEuNiAxMi4yLTI5LjV6Il19LG5UdD1CbmUsbFR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvbW1lbnQtbWVkaWNhbCIsaWNvbjpbNTEyLDUxMixbXSwiZjdmNSIsIk0yNTYgNDgwYzE0MS40IDAgMjU2LTEwNy41IDI1Ni0yNDBTMzk3LjQgMCAyNTYgMCAwIDEwNy41IDAgMjQwYzAgNTQuMyAxOS4yIDEwNC4zIDUxLjYgMTQ0LjVMMi44IDQ3Ni44Yy00LjggOS0zLjMgMjAgMy42IDI3LjVzMTcuOCA5LjggMjcuMSA1LjhsMTE4LjQtNTAuN0MxODMuNyA0NzIuNiAyMTguOSA0ODAgMjU2IDQ4MHpNMjE3LjYgMTUzLjZjMC0xMC42IDguNi0xOS4yIDE5LjItMTkuMmwzOC40IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMmwwIDQ4IDQ4IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMmwwIDM4LjRjMCAxMC42LTguNiAxOS4yLTE5LjIgMTkuMmwtNDggMCAwIDQ4YzAgMTAuNi04LjYgMTkuMi0xOS4yIDE5LjJsLTM4LjQgMGMtMTAuNiAwLTE5LjItOC42LTE5LjItMTkuMmwwLTQ4LTQ4IDBjLTEwLjYgMC0xOS4yLTguNi0xOS4yLTE5LjJsMC0zOC40YzAtMTAuNiA4LjYtMTkuMiAxOS4yLTE5LjJsNDggMCAwLTQ4eiJdfSxjVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmVsbC1zbGFzaCIsaWNvbjpbNTc2LDUxMixbMTI4Mjc3LDYxOTQzXSwiZjFmNiIsIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04Ny41LTg3LjVjMTcuMi0yLjQgMzAuNS0xNy4zIDMwLjUtMzUuMiAwLTguMS0yLjctMTUuOS03LjgtMjIuMmwtOS44LTEyLjJDNDY0LjQgMzA4LjUgNDQ4IDI2MS44IDQ0OCAyMTMuN2wwLTIxLjdjMC03Ny40LTU1LTE0Mi0xMjgtMTU2LjhsMC0zLjJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzLjJjLTM4LjYgNy44LTcyLjIgMjkuNi05NS4yIDU5LjdMNDEtMjQuOXptODcgMjM4LjVjMCA0OC4xLTE2LjQgOTQuOC00Ni40IDEzMi40bC05LjggMTIuMmMtNSA2LjMtNy44IDE0LjEtNy44IDIyLjIgMCAxOS42IDE1LjkgMzUuNSAzNS41IDM1LjVsMjM1LjMgMC0yMDYuOS0yMDYuOSAwIDQuNXpNMjg4IDUxMmMyOS44IDAgNTQuOS0yMC40IDYyLTQ4bC0xMjQgMGM3LjEgMjcuNiAzMi4yIDQ4IDYyIDQ4eiJdfSxuVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kc2hha2Utc2xhc2giLGljb246WzU3Niw1MTIsWzU3NDM5LCJoYW5kc2hha2UtYWx0LXNsYXNoIiwiaGFuZHNoYWtlLXNpbXBsZS1zbGFzaCJdLCJlMDYwIiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTI4OC0yODggMTQuMi0xNC4yYzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM3NiA1NzYgMzIwIDU3NiAzMiA0NjQgOTYgNDQwLjIgODAuMUM0MjQuNCA2OS42IDQwNS45IDY0IDM4Ni45IDY0bC03MC40IDBjLTEuMSAwLTIuMyAwLTMuNCAuMS0xNi45IC45LTMyLjggOC41LTQ0LjIgMjEuMWwtNTUuOCA2Mi4xLTM0LTM0IDQ0LjMtNDkuMi0zOS43IDBjLTE1LjMgMC0zMC4xIDMuNi00My41IDEwLjRMNDEtMjQuOXpNMCA2OS44TDAgMzIwIDE1Ni40IDQ1MC4zYzIzIDE5LjIgNTIgMjkuNyA4MS45IDI5LjdsMTUuNyAwLTctN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQxIDQxIDkgMGMyMi4yIDAgNDMuOC01LjggNjIuOC0xNi40TDAgNjkuOHoiXX0sZFR0PW5VLGZUdD1uVSx1VHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm90dGxlLXdhdGVyIixpY29uOlszMjAsNTEyLFtdLCJlNGM1IiwiTTExMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwQzk0LjMgMzIgODAgMTcuNyA4MCAwczE0LjMtMzIgMzItMzJ6TTE2IDE0NGMwLTM1LjMgMjguNy02NCA2NC02NGwxNjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDI0LjEtMTMuMyA0NS4xLTMzIDU2IDE5LjcgMTAuOSAzMyAzMS45IDMzIDU2cy0xMy4zIDQ1LjEtMzMgNTZjMTkuNyAxMC45IDMzIDMxLjkgMzMgNTZzLTEzLjMgNDUuMS0zMyA1NmMxOS43IDEwLjkgMzMgMzEuOSAzMyA1NiAwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1NDRjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjQuMSAxMy4zLTQ1LjEgMzMtNTYtMTkuNy0xMC45LTMzLTMxLjktMzMtNTZzMTMuMy00NS4xIDMzLTU2Yy0xOS43LTEwLjktMzMtMzEuOS0zMy01NnMxMy4zLTQ1LjEgMzMtNTZjLTE5LjctMTAuOS0zMy0zMS45LTMzLTU2eiJdfSxwVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGljZS1kMjAiLGljb246WzUxMiw1MTIsW10sImY2Y2YiLCJNMjI0LjQtOC4yYzE5LjYtMTEuMSA0My42LTExLjEgNjMuMSAwbDE5MiAxMDguOGMyMCAxMS40IDMyLjQgMzIuNiAzMi40IDU1LjdsMCAyMTUuNmMwIDIzLTEyLjQgNDQuMy0zMi40IDU1LjdsLTE5MiAxMDguOGMtMTkuNiAxMS4xLTQzLjYgMTEuMS02My4xIDBMMzIuNCA0MjcuNUMxMi40IDQxNi4xIDAgMzk0LjggMCAzNzEuOEwwIDE1Ni4yYzAtMjMgMTIuNC00NC4zIDMyLjQtNTUuN0wyMjQuNC04LjJ6bTUyIDczLjJDMjY3IDQ5LjggMjQ1IDQ5LjggMjM1LjYgNjVsLTc2LjYgMTIzLjctODUuNC00Ni4zLTMuOC0xLjZjLTguOS0yLjctMTguOCAxLjEtMjMuNCA5LjZzLTIuNCAxOC45IDQuNyAyNC44bDMuMyAyLjMgODMuNCA0NS4yLTc0LjYgMTIwLjZDNTUuMyAzNTYuMiA2MSAzNzMgNzUgMzc4LjRsMTYxIDYxLjkgMCAzOS43YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMzkuNyAxNjEtNjEuOWMxNC01LjQgMTkuNy0yMi4yIDExLjgtMzVsLTc0LjctMTIwLjYgODMuNC00NS4yYzkuNy01LjMgMTMuMy0xNy40IDguMS0yNy4xcy0xNy40LTEzLjMtMjcuMS04LjFMMzUzIDE4OC43IDI3Ni40IDY1em0tNDcgMzI5LjlsLTEyMi00Ni45IDU0LjUtODguMSA2Ny41IDEzNXpNNDA0LjYgMzQ4bC0xMjIgNDYuOSA2Ny41LTEzNSA1NC41IDg4LjF6TTMxOS4zIDIzMkwyNTYgMzU4LjYgMTkyLjcgMjMyIDMxOS4zIDIzMnpNMzA4IDE5MmwtMTA0LjEgMCA1Mi04NCA1MiA4NHoiXX0sbFU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctZG93bi16LWEiLGljb246WzUxMiw1MTIsWyJzb3J0LWFscGhhLWRlc2MiLCJzb3J0LWFscGhhLWRvd24tYWx0Il0sImY4ODEiLCJNMjMwLjYgMzkwLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDI1LjQtMjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0yODggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUwzOTcuMyAxNjAgNDQ4IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45TDM3MC44IDk2IDMyMCA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQxMi42IDI3My43bDgwIDE2MGM3LjkgMTUuOCAxLjUgMzUtMTQuMyA0Mi45cy0zNSAxLjUtNDIuOS0xNC4zbC03LjItMTQuMy04OC40IDAtNy4yIDE0LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsODAtMTYwYzUuNC0xMC44IDE2LjUtMTcuNyAyOC42LTE3LjdzMjMuMiA2LjggMjguNiAxNy43ek0zODQgMzU5LjZsLTIwLjIgNDAuNCA0MC40IDAtMjAuMi00MC40eiJdfSxoVHQ9bFUsbVR0PWxVLGdUdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicnVzaCIsaWNvbjpbMzg0LDUxMixbXSwiZjU1ZCIsIk0xNjIuNCA2Yy0xLjUtMy42LTUtNi04LjktNmwtMTkgMGMtMy45IDAtNy41IDIuNC04LjkgNkwxMDQuOSA1Ny43Yy0zLjIgOC0xNC42IDgtMTcuOCAwTDY2LjQgNmMtMS41LTMuNi01LTYtOC45LTZMNDggMEMyMS41IDAgMCAyMS41IDAgNDhsMCAyMDggMzg0IDAgMC0yMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhMMjMwLjUgMGMtMy45IDAtNy41IDIuNC04LjkgNkwyMDAuOSA1Ny43Yy0zLjIgOC0xNC42IDgtMTcuOCAwTDE2Mi40IDZ6TTAgMzA0bDAgMTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNjQgMCAwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRsMC02NCA2NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTYtMzg0IDB6TTE5MiA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTYgMTYgNy4yIDE2IDE2LTcuMiAxNi0xNiAxNnoiXX0seFR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi13YWxraW5nLWRhc2hlZC1saW5lLWFycm93LXJpZ2h0IixpY29uOls2NDAsNTEyLFtdLCJlNTUzIiwiTTE2MCA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNNzMuNCAyMjcuOWwyMi42LTIyLjYgMCA2OS4zYzAgMjggMTIuMiA1NC43IDMzLjUgNzIuOWw3MS40IDYxLjJjNS45IDUuMSA5LjggMTIuMSAxMC45IDE5LjhsMTIuNiA4OC4xYzIuNSAxNy41IDE4LjcgMjkuNyAzNi4yIDI3LjJzMjkuNy0xOC43IDI3LjItMzYuMmwtMTIuNi04OC4xYy0zLjMtMjMuMS0xNC45LTQ0LjEtMzIuNi01OS4zbC0zNC41LTI5LjYgMC0xMTUuMiAzLjggNC43YzE4LjIgMjIuOCA0NS44IDM2IDc1IDM2bDMzLjIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzMuMiAwYy05LjcgMC0xOC45LTQuNC0yNS0xMmwtMTcuOS0yMi40Yy0yMy0yOC44LTU3LjktNDUuNi05NC44LTQ1LjYtMzIuMiAwLTYzLjEgMTIuOC04NS44IDM1LjZMMjguMSAxODIuNkMxMC4xIDIwMC42IDAgMjI1IDAgMjUwLjVMMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM3LjVjMC04LjUgMy40LTE2LjYgOS40LTIyLjZ6TTg1LjggNDA3LjNjLTEuNSA1LjItNC4zIDEwLTguMSAxMy44TDkuNCA0ODkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC4zLTY4LjNjMTEuNS0xMS41IDE5LjktMjUuOCAyNC40LTQxLjVsMi4yLTcuNi00Ni0zOS40Yy0yLjUtMi4yLTUtNC40LTcuNC02LjhMODUuOCA0MDcuM3pNNDMyIDhjMC0xMy4zLTEwLjctMjQtMjQtMjRTMzg0LTUuMyAzODQgOGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMnptMCAxMjhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJ6TTQwOCAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0yNCAxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJ6TTYwOSAyNzNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTcyLTcyYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDMxIDMxLTEwMi4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTAyLjEgMC0zMSAzMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDcyLTcyeiJdfSxSbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAtc2hvcnQtd2lkZSIsaWNvbjpbNTc2LDUxMixbInNvcnQtYW1vdW50LXVwLWFsdCJdLCJmODg1IiwiTTMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwem0wIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwem0wIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yMjQgMHpNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2eiJdfSxiVHQ9Um5lLEhuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJncmlwLXZlcnRpY2FsIixpY29uOlszMjAsNTEyLFsiZ3JpZC12ZXJ0aWNhbCJdLCJmNThlIiwiTTEyOCA0MGMwLTIyLjEtMTcuOS00MC00MC00MEw0MCAwQzE3LjkgMCAwIDE3LjkgMCA0MEwwIDg4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHptMCAxOTJjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4ek0wIDQyNGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6TTMyMCA0MGMwLTIyLjEtMTcuOS00MC00MC00MEwyMzIgMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDh6TTE5MiAyMzJsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDhjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwek0zMjAgNDI0YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHoiXX0sdlR0PUhuZSx5VHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FyLXR1bm5lbCIsaWNvbjpbNTEyLDUxMixbXSwiZTRkZSIsIk0yNTYgMEMxMTQuNiAwIDAgMTE0LjYgMCAyNTZMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDIuOCAwYy02LjYtNS45LTEwLjgtMTQuNC0xMC44LTI0bDAtMTEzLjFjMC0xMy41IDMuMS0yNi44IDktMzguOWwzOS43LTgwLjhjOS40LTE5LjEgMjguOS0zMS4zIDUwLjItMzEuM0wzMTcgMjI0YzIxLjMgMCA0MC44IDEyLjEgNTAuMiAzMS4zTDQwNyAzMzZjNS45IDEyLjEgOSAyNS40IDkgMzguOUw0MTYgNDg4YzAgOS42LTQuMiAxOC4xLTEwLjggMjRsNDIuOCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyQzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwek0zNjIuOCA1MTJjLTYuNi01LjktMTAuOC0xNC40LTEwLjgtMjRsMC0yNC0xOTIgMCAwIDI0YzAgOS42LTQuMiAxOC4xLTEwLjggMjRsMjEzLjcgMHptLTE3NS0yMzUuNWwtMjkuMyA1OS41IDE5NC45IDAtMjkuMy01OS41Yy0xLjMtMi43LTQuMS00LjUtNy4yLTQuNUwxOTUgMjcyYy0zIDAtNS44IDEuNy03LjIgNC41ek0xNzYgNDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMTg0LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il19LHdUdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGFydC1jb2x1bW4iLGljb246WzUxMiw1MTIsW10sImUwZTMiLCJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDgwIDQ4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnpNMTQ0IDIyNGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE0NC02NGwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem04MCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTUxMiA5NmwwIDIyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdfSxNVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJ1Y2stYXJyb3ctcmlnaHQiLGljb246WzU3Niw1MTIsW10sImU1OGIiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzLjMgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDEwMi42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwzLjMgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTUxMiAyMzcuM2wwIDUwLjctOTYgMCAwLTk2IDUwLjcgMCA0NS4zIDQ1LjN6TTE1MiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yMzIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMzA1IDIyNWwtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtMTAyLjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMDIuMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjl6Il19LGNVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InR2IixpY29uOls1NzYsNTEyLFs2MzcxNywidGVsZXZpc2lvbiIsInR2LWFsdCJdLCJmMjZjIiwiTTY0IDk2bDAgMjQwIDQ0OCAwIDAtMjQwLTQ0OCAwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQwMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTYwIDQ0OGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il19LHpUdD1jVSxrVHQ9Y1UsU1R0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNlY3Rpb24iLGljb246WzI1Niw1MTIsW10sImU0NDciLCJNMTEwIDBDNDkuMiAwIDAgNDkuMiAwIDExMCAwIDEzMy43IDcuNiAxNTUuOCAyMC41IDE3NCA3LjYgMTkyIDAgMjE0LjEgMCAyMzggMCAyOTEuNyAzOC45IDMzNy42IDkxLjkgMzQ2LjRsNjEuNyAxMC4zYzIyLjIgMy43IDM4LjQgMjIuOSAzOC40IDQ1LjMgMCAyNS40LTIwLjYgNDYtNDYgNDZsLTk4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTggMGM2MC43IDAgMTEwLTQ5LjIgMTEwLTExMCAwLTIzLjctNy42LTQ1LjktMjAuNS02NCAxMi45LTE4IDIwLjUtNDAuMSAyMC41LTY0IDAtNTMuOC0zOC45LTk5LjYtOTEuOS0xMDguNWwtNjEuNy0xMC4zQzgwLjIgMTUxLjYgNjQgMTMyLjQgNjQgMTEwIDY0IDg0LjYgODQuNiA2NCAxMTAgNjRsOTggMGMxNy43IDAgMzItMTQuMyAzMi0zMlMyMjUuNyAwIDIwOCAwTDExMCAwem03NC43IDI5OS4xYy02LjUtMi40LTEzLjQtNC4zLTIwLjUtNS41bC02MS43LTEwLjNjLTIyLjItMy43LTM4LjQtMjIuOS0zOC40LTQ1LjMgMC05LjIgMi43LTE3LjggNy40LTI1IDYuNSAyLjQgMTMuNCA0LjMgMjAuNSA1LjVsNjEuNyAxMC4zYzIyLjIgMy43IDM4LjQgMjIuOSAzOC40IDQ1LjMgMCA5LjItMi43IDE3LjgtNy40IDI1eiJdfSxDVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVhY2UiLGljb246WzUxMiw1MTIsWzk3NzRdLCJmNjdjIiwiTTIyNCA0NDUuM2wwLTEyMS44LTk0LjMgNzcuMWMyNi4xIDIyLjggNTguNSAzOC43IDk0LjMgNDQuN3pNODkuMiAzNTEuMUwyMjQgMjQwLjggMjI0IDY2LjdjLTkwLjggMTUuMi0xNjAgOTQuMi0xNjAgMTg5LjMgMCAzNC42IDkuMiA2Ny4xIDI1LjIgOTUuMXptMjkzLjEgNDkuNWwtOTQuMy03Ny4xIDAgMTIxLjhjMzUuNy02IDY4LjEtMjEuOSA5NC4zLTQ0Ljd6bTQwLjYtNDkuNWMxNi0yOCAyNS4yLTYwLjUgMjUuMi05NS4xIDAtOTUuMS02OS4yLTE3NC4xLTE2MC0xODkuM2wwIDE3NC4yIDEzNC44IDExMC4zek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdfSxMVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RhciIsaWNvbjpbNTc2LDUxMixbMTEwODgsNjE0NDZdLCJmMDA1IiwiTTMwOS41LTE4LjljLTQuMS04LTEyLjQtMTMuMS0yMS40LTEzLjFzLTE3LjMgNS4xLTIxLjQgMTMuMUwxOTMuMSAxMjUuMyAzMy4yIDE1MC43Yy04LjkgMS40LTE2LjMgNy43LTE5LjEgMTYuM3MtLjUgMTggNS44IDI0LjRsMTE0LjQgMTE0LjUtMjUuMiAxNTkuOWMtMS40IDguOSAyLjMgMTcuOSA5LjYgMjMuMnMxNi45IDYuMSAyNSAyTDI4OC4xIDQxNy42IDQzMi40IDQ5MWM4IDQuMSAxNy43IDMuMyAyNS0yczExLTE0LjIgOS42LTIzLjJMNDQxLjcgMzA1LjkgNTU2LjEgMTkxLjRjNi40LTYuNCA4LjYtMTUuOCA1LjgtMjQuNHMtMTAuMS0xNC45LTE5LjEtMTYuM0wzODMgMTI1LjMgMzA5LjUtMTguOXoiXX0sVFR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZsYWciLGljb246WzQ0OCw1MTIsWzEyNzk4OCw2MTcyNV0sImYwMjQiLCJNNjQgMzJDNjQgMTQuMyA0OS43IDAgMzIgMFMwIDE0LjMgMCAzMkwwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTIxLjYgNjIuNy0xOC44YzQxLjktMTIuNiA4Ny4xLTguNyAxMjYuMiAxMC45IDQyLjcgMjEuNCA5Mi41IDI0IDEzNy4yIDcuMmwzNy4xLTEzLjljMTIuNS00LjcgMjAuOC0xNi42IDIwLjgtMzBsMC0yNDcuN2MwLTIzLTI0LjItMzgtNDQuOC0yNy43bC0xMS44IDUuOWMtNDQuOSAyMi41LTk3LjggMjIuNS0xNDIuOCAwLTM2LjQtMTguMi03OC4zLTIxLjgtMTE3LjItMTAuMUw2NCA1NC40IDY0IDMyeiJdfSxkVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cmlhbmdsZS1leGNsYW1hdGlvbiIsaWNvbjpbNTEyLDUxMixbOTg4OCwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLCJ3YXJuaW5nIl0sImYwNzEiLCJNMjU2IDBjMTQuNyAwIDI4LjIgOC4xIDM1LjIgMjFsMjE2IDQwMGM2LjcgMTIuNCA2LjQgMjcuNC0uOCAzOS41UzQ4Ni4xIDQ4MCA0NzIgNDgwTDQwIDQ4MGMtMTQuMSAwLTI3LjItNy40LTM0LjQtMTkuNXMtNy41LTI3LjEtLjgtMzkuNWwyMTYtNDAwYzctMTIuOSAyMC41LTIxIDM1LjItMjF6bTAgMzUyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptMC0xOTJjLTE4LjIgMC0zMi43IDE1LjUtMzEuNCAzMy43bDcuNCAxMDRjLjkgMTIuNSAxMS40IDIyLjMgMjMuOSAyMi4zIDEyLjYgMCAyMy05LjcgMjMuOS0yMi4zbDcuNC0xMDRjMS4zLTE4LjItMTMuMS0zMy43LTMxLjQtMzMuN3oiXX0sX1R0PWRVLEFUdD1kVSwkVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2Nob29sLWNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTU2YyIsIk02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI3NiAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC05MC45IDAgMC04OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzEgMCAxLjkgMCAyLjkgLjEgMjYuMy03NC42IDk3LjUtMTI4LjEgMTgxLjEtMTI4LjEgMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC0zMy40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwLTEyNy45LTExNS4xYy0xOC4zLTE2LjQtNDYtMTYuNC02NC4yIDBMMTI4IDEyOCA2NCAxMjh6bTY0IDI0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyek0xMTIgMjU2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZ6TTI4OCAxMjhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdfSxxbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ3JhZHVhdGlvbi1jYXAiLGljb246WzU3Niw1MTIsWzEyNzg5MSwibW9ydGFyLWJvYXJkIl0sImYxOWQiLCJNNDggMTk1LjhsMjA5LjIgODYuMWM5LjggNCAyMC4yIDYuMSAzMC44IDYuMXMyMS0yLjEgMzAuOC02LjFsMjQyLjQtOTkuOGM5LTMuNyAxNC44LTEyLjQgMTQuOC0yMi4xcy01LjgtMTguNC0xNC44LTIyLjFMMzE4LjggMzguMUMzMDkgMzQuMSAyOTguNiAzMiAyODggMzJzLTIxIDIuMS0zMC44IDYuMUwxNC44IDEzNy45QzUuOCAxNDEuNiAwIDE1MC4zIDAgMTYwTDAgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNjAuMnptNDggNzEuN0w5NiAzODRjMCA1MyA4NiA5NiAxOTIgOTZzMTkyLTQzIDE5Mi05NmwwLTExNi42LTE0Mi45IDU4LjljLTE1LjYgNi40LTMyLjIgOS43LTQ5LjEgOS43cy0zMy41LTMuMy00OS4xLTkuN0w5NiAyNjcuNHoiXX0sRFR0PXFuZSxFVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RvcmUiLGljb246WzUxMiw1MTIsW10sImY1NGUiLCJNMzAuNyA3Mi4zQzM3LjYgNDguNCA1OS41IDMyIDg0LjQgMzJsMzQ0IDBjMjQuOSAwIDQ2LjggMTYuNCA1My44IDQwLjNsMjMuNCA4MC4yYzEyLjggNDMuNy0yMC4xIDg3LjUtNjUuNiA4Ny41LTI2LjMgMC00OS40LTE0LjktNjAuOC0zNy4xLTExLjYgMjEuOS0zNC42IDM3LjEtNjEuNCAzNy4xLTI2LjYgMC00OS43LTE1LTYxLjMtMzctMTEuNiAyMi0zNC43IDM3LTYxLjMgMzctMjYuOCAwLTQ5LjgtMTUuMS02MS40LTM3LjEtMTEuNCAyMi4xLTM0LjUgMzcuMS02MC44IDM3LjEtNDUuNiAwLTc4LjQtNDMuNy02NS42LTg3LjVMMzAuNyA3Mi4zek05Ni40IDM1MmwzMjAgMCAwLTY2LjRjNy42IDEuNiAxNS41IDIuNCAyMy41IDIuNCAxNC4zIDAgMjgtMi42IDQwLjUtNy4ybDAgMTUxLjJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTM1MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE1MS4yYzEyLjUgNC42IDI2LjEgNy4yIDQwLjUgNy4yIDguMSAwIDE1LjktLjggMjMuNS0yLjRsMCA2Ni40eiJdfSxOVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1hc3Ryb25hdXQiLGljb246WzQ0OCw1MTIsW10sImY0ZmIiLCJNMjI0IDMzNmM3NC42IDAgMTM4LjQtNDYuNCAxNjQtMTEybDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0bC00IDBDMzYyLjQgMzAuNCAyOTguNi0xNiAyMjQtMTZTODUuNiAzMC40IDYwIDk2bC00IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNCAwYzI1LjYgNjUuNiA4OS40IDExMiAxNjQgMTEyek0yMDggODBsMzIgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NmwtMzIgMGMtNTMgMC05Ni00My05Ni05NnM0My05NiA5Ni05NnpNMTYgNDg0LjZDMTYgNDk5LjcgMjguMyA1MTIgNDMuNCA1MTJsNTIuNiAwIDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OCA1Mi42IDBjMTUuMSAwIDI3LjQtMTIuMyAyNy40LTI3LjQgMC01OS44LTMxLjktMTEyLjItNzkuNi0xNDEtMzYuNCAyNS41LTgwLjYgNDAuNC0xMjguNCA0MC40cy05Mi0xNC45LTEyOC40LTQwLjRDNDcuOSAzNzIuNCAxNiA0MjQuOCAxNiA0ODQuNnpNMTgzLjMgMTQxLjVjLS45LTMuMy0zLjktNS41LTcuMy01LjVzLTYuNCAyLjItNy4zIDUuNWwtNiAyMS4yLTIxLjIgNmMtMy4zIC45LTUuNSAzLjktNS41IDcuM3MyLjIgNi40IDUuNSA3LjNsMjEuMiA2IDYgMjEuMmMuOSAzLjMgMy45IDUuNSA3LjMgNS41czYuNC0yLjIgNy4zLTUuNWw2LTIxLjIgMjEuMi02YzMuMy0uOSA1LjUtMy45IDUuNS03LjNzLTIuMi02LjQtNS41LTcuM2wtMjEuMi02LTYtMjEuMnpNMTUyIDQ4OGwwIDI0IDQ4IDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptMTIwLTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDI0IDQ4IDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sUFR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLWZsYWciLGljb246WzY0MCw1MTIsW10sImU0ZDUiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMTc2IDM1MmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgODAtOTYgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek05NiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjQwIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTk2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yODggMTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMkw0OTYgMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6Il19LFZuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtdWctc2F1Y2VyIixpY29uOls1NzYsNTEyLFsiY29mZmVlIl0sImYwZjQiLCJNNjQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzUyIDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhTNTE4LjcgMjg4IDQ0OCAyODhjMCA1My00MyA5Ni05NiA5NmwtMTkyIDBjLTUzIDAtOTYtNDMtOTYtOTZMNjQgNjR6bTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NGwwIDEyOGMzNS4zIDAgNjQtMjguNyA2NC02NHpNNjQgNDQ4bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXX0sSVR0PVZuZSxGVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGVtb24iLGljb246WzQ0OCw1MTIsWzEyNzgxOV0sImYwOTQiLCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0LTYuNiAwLTEzIDEtMTkgMi45LTIyLjUgNy00OC4xIDE0LjktNzEgOS03NS4yLTE5LjEtMTU2LjQgMTEtMjEzLjcgNjguM1MtNy4yIDI1MC44IDExLjkgMzI2YzUuOCAyMi45LTIgNDguNC05IDcxLTEuOSA2LTIuOSAxMi40LTIuOSAxOSAwIDM1LjMgMjguNyA2NCA2NCA2NCA2LjYgMCAxMy0xIDE5LjEtMi45IDIyLjUtNyA0OC4xLTE0LjkgNzEtOSA3NS4yIDE5LjEgMTU2LjQtMTEgMjEzLjctNjguM1M0NTUuMiAyNjEuMiA0MzYuMSAxODZjLTUuOC0yMi45IDItNDguNCA5LTcxIDEuOS02IDIuOS0xMi40IDIuOS0xOS4xek0yMjIuNyAxNDNjLTUyIDE1LjItOTYuNSA1OS43LTExMS43IDExMS43LTMuNyAxMi43LTE3LjEgMjAtMjkuOCAxNi4zUzYxLjIgMjU0IDY1IDI0MS4zYzE5LjgtNjcuNyA3Ni42LTEyNC41IDE0NC4zLTE0NC4zIDEyLjctMy43IDI2LjEgMy42IDI5LjggMTYuM3MtMy42IDI2LjEtMTYuMyAyOS44eiJdfSxPVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FyYXZhbiIsaWNvbjpbNjQwLDUxMixbXSwiZjhmZiIsIk0zMiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDE5MiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yOTYuNCAwYy4yIDIuNiAuNCA1LjMgLjQgOCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTIuNyAuMS01LjQgLjQtOEw5NiA0MTZjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDk2ek0zNTIgMzUybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00OC0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI0IDAgMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJ6TTE2MCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwem02NCAzMzZhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdfSxCVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicSIsaWNvbjpbNDQ4LDUxMixbMTEzXSwiNTEiLCJNNjQgMjU2YzAgODguNCA3MS42IDE2MCAxNjAgMTYwIDI4LjkgMCA1Ni03LjcgNzkuNC0yMS4xbC03Mi04Ni40Yy0xMS4zLTEzLjYtOS41LTMzLjggNC4xLTQ1LjFzMzMuOC05LjUgNDUuMSA0LjFsNzAuOSA4NS4xYzIwLjQtMjYuOCAzMi41LTYwLjMgMzIuNS05Ni42IDAtODguNC03MS42LTE2MC0xNjAtMTYwUzY0IDE2Ny42IDY0IDI1NnpNMzQ0LjkgNDQ0LjZDMzEwIDQ2NyAyNjguNSA0ODAgMjI0IDQ4MCAxMDAuMyA0ODAgMCAzNzkuNyAwIDI1NlMxMDAuMyAzMiAyMjQgMzIgNDQ4IDEzMi4zIDQ0OCAyNTZjMCA1Ni4xLTIwLjYgMTA3LjQtNTQuNyAxNDYuN2w0Ny4zIDU2LjhjMTEuMyAxMy42IDkuNSAzMy44LTQuMSA0NS4xcy0zMy44IDkuNS00NS4xLTQuMWwtNDYuNi01NS45eiJdfSxSVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibG9jayIsaWNvbjpbMzg0LDUxMixbMTI4Mjc0XSwiZjAyMyIsIk0xMjggOTZsMCA2NCAxMjggMCAwLTY0YzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0ek02NCAxNjBsMC02NEM2NCAyNS4zIDEyMS4zLTMyIDE5Mi0zMlMzMjAgMjUuMyAzMjAgOTZsMCA2NGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0eiJdfSxIVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGFpbnQtcm9sbGVyIixpY29uOls1MTIsNTEyLFtdLCJmNWFhIiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDE2IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCA5NmMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMTYwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE4LjdjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtMTguN2MwLTQ0LjIgMzUuOC04MCA4MC04MGwxNjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgMTkyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0eiJdfSxVbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidm9sdW1lLWhpZ2giLGljb246WzY0MCw1MTIsWzEyODI2Niwidm9sdW1lLXVwIl0sImYwMjgiLCJNNTMzLjYgMzIuNWMtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzU1Ny41IDExMy44IDU5MiAxODAuOCA1OTIgMjU2cy0zNC41IDE0Mi4yLTg4LjcgMTg2LjNjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVDNTk4LjUgNDI2LjcgNjQwIDM0Ni4yIDY0MCAyNTZTNTk4LjUgODUuMiA1MzMuNiAzMi41ek00NzMuMSAxMDdjLTEwLjMtOC40LTI1LjQtNi44LTMzLjggMy41cy02LjggMjUuNCAzLjUgMzMuOEM0NzUuMyAxNzAuNyA0OTYgMjEwLjkgNDk2IDI1NnMtMjAuNyA4NS4zLTUzLjIgMTExLjhjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVjNDMuMi0zNS4yIDcwLjktODguOSA3MC45LTE0OXMtMjcuNy0xMTMuOC03MC45LTE0OXptLTYwLjUgNzQuNWMtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzM5My4xIDIyNy42IDQwMCAyNDEgNDAwIDI1NnMtNi45IDI4LjQtMTcuNyAzNy4zYy0xMC4zIDguNC0xMS44IDIzLjUtMy41IDMzLjhzMjMuNSAxMS44IDMzLjggMy41QzQzNC4xIDMxMi45IDQ0OCAyODYuMSA0NDggMjU2cy0xMy45LTU2LjktMzUuNC03NC41ek04MCAzNTJsNDggMCAxMzQuMSAxMTkuMmM2LjQgNS43IDE0LjYgOC44IDIzLjEgOC44IDE5LjIgMCAzNC44LTE1LjYgMzQuOC0zNC44bDAtMzc4LjRjMC0xOS4yLTE1LjYtMzQuOC0zNC44LTM0LjgtOC41IDAtMTYuNyAzLjEtMjMuMSA4LjhMMTI4IDE2MCA4MCAxNjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDh6Il19LHFUdD1VbmUsVlR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZvbGRlci1wbHVzIixpY29uOls1MTIsNTEyLFtdLCJmNjVlIiwiTTUxMiAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNEw0NDggODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDB6TTI1NiAxNjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDgtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwIDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4IDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sVVR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1lcmN1cnkiLGljb246WzM4NCw1MTIsWzk3OTFdLCJmMjIzIiwiTTExNy00QzEwNi0xNy44IDg1LjgtMjAgNzIuMS05cy0xNiAzMS4yLTUgNDVDNzQuOSA0NS43IDgzLjcgNTQuNSA5My41IDYyLjEgNDYuNyA5My43IDE2IDE0Ny4zIDE2IDIwOCAxNiAyOTQuMyA3OC4xIDM2Ni4xIDE2MCAzODEuMWwwIDM0LjktMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zNC45YzgxLjktMTUgMTQ0LTg2LjggMTQ0LTE3My4xIDAtNjAuNy0zMC43LTExNC4zLTc3LjUtMTQ1LjkgOS44LTcuNyAxOC43LTE2LjQgMjYuNC0yNi4xIDExLjEtMTMuOCA4LjgtMzMuOS01LTQ1UzI3OC0xNy44IDI2Ny00Yy0xNy42IDIyLTQ0LjcgMzYtNzUgMzZTMTM0LjcgMTggMTE3LTR6bTc1IDMyNGMtNjEuOSAwLTExMi01MC4xLTExMi0xMTJTMTMwLjEgOTYgMTkyIDk2IDMwNCAxNDYuMSAzMDQgMjA4YzAgNjEuOC01MC4xIDExMi0xMTEuOSAxMTJsLS4xIDB6Il19LGpUdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbmNob3IiLGljb246WzU3Niw1MTIsWzk4NzVdLCJmMTNkIiwiTTI4OCA2NGEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6TTE5MiA5NmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgNDEuOC0yNi43IDc3LjQtNjQgOTAuNWwwIDI1Ny45YzYyLjktMTQuMyAxMTAuMi02OS43IDExMS45LTEzNi41bC0xNi4xIDE0LjFjLTEwIDguNy0yNS4xIDcuNy0zMy45LTIuM3MtNy43LTI1LjEgMi4zLTMzLjlsNjQtNTZjOS03LjkgMjIuNi03LjkgMzEuNiAwbDY0IDU2YzEwIDguNyAxMSAyMy45IDIuMyAzMy45cy0yMy45IDExLTMzLjkgMi4zTDQ5NiAzMDcuOUM0OTMuOSA0MjEgNDAxLjYgNTEyIDI4OCA1MTJTODIuMSA0MjEgODAgMzA3LjlMNjMuOCAzMjIuMWMtMTAgOC43LTI1LjEgNy43LTMzLjktMi4zcy03LjctMjUuMSAyLjMtMzMuOWw2NC01NmM5LTcuOSAyMi42LTcuOSAzMS42IDBsNjQgNTZjMTAgOC43IDExIDIzLjkgMi4zIDMzLjlzLTIzLjkgMTEtMzMuOSAyLjNsLTE2LjEtMTQuMWMxLjggNjYuOCA0OS4xIDEyMi4yIDExMS45IDEzNi41bDAtMjU3LjljLTM3LjMtMTMuMi02NC00OC43LTY0LTkwLjV6Il19LGpuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtcGFya2luZyIsaWNvbjpbNDQ4LDUxMixbMTI3MzU5LCJwYXJraW5nIl0sImY1NDAiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMTkyIDI1Nmw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00OCAwIDAgNjR6bTQ4IDY0bC00OCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xODRjMC0yMi4xIDE3LjktNDAgNDAtNDBsNzIgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnoiXX0sV1R0PWpuZSxHVHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFudWtpYWgiLGljb246WzY0MCw1MTIsWzEyODMzNF0sImY2ZTYiLCJNMzE0LjIgMy4zYy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zem0tMjg4IDQ4QzIxLjEgNjAuMSA4IDg0LjYgOCAxMDQgOCAxMTcuMyAxOC43IDEyOCAzMiAxMjhzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek04OCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzEwMS4xIDYwLjEgODggODQuNiA4OCAxMDR6bTgyLjItNTIuN2MtNS4xIDguOC0xOC4yIDMzLjMtMTguMiA1Mi43IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNMjE2IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDMjI5LjEgNjAuMSAyMTYgODQuNiAyMTYgMTA0ek0zOTQuMiA1MS4zYy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek00NDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0M0NTMuMSA2MC4xIDQ0MCA4NC42IDQ0MCAxMDR6bTgyLjItNTIuN2MtNS4xIDguOC0xOC4yIDMzLjMtMTguMiA1Mi43IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNNTg0IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDNTk3LjEgNjAuMSA1ODQgODQuNiA1ODQgMTA0ek0xMTIgMTYwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em0xNjAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnpNMzUyIDE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3Ni0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDE3NC4zIDAgMTkybDAgOTZjMCA1MyA0MyA5NiA5NiA5NmwxOTIgMCAwIDY0LTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjggMCAwLTY0IDE5MiAwYzUzIDAgOTYtNDMgOTYtOTZsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMCAwLTE3NnoiXX0sdTc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicm90YXRlLWxlZnQiLGljb246WzUxMiw1MTIsWyJyb3RhdGUtYmFjayIsInJvdGF0ZS1iYWNrd2FyZCIsInVuZG8tYWx0Il0sImYyZWEiLCJNMjQgMTkybDE0NCAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtNDYuNy00Ni43Yzc1LjMtNTguNiAxODQuMy01My4zIDI1My41IDE1LjkgNzUgNzUgNzUgMTk2LjUgMCAyNzEuNXMtMTk2LjUgNzUtMjcxLjUgMGMtMTAuMi0xMC4yLTE5LTIxLjMtMjYuNC0zMy05LjUtMTQuOS0yOS4zLTE5LjMtNDQuMi05LjhzLTE5LjMgMjkuMy05LjggNDQuMkM0OS43IDQwOC43IDYxLjQgNDIzLjUgNzUgNDM3IDE3NSA1MzcgMzM3IDUzNyA0MzcgNDM3UzUzNyAxNzUgNDM3IDc1QzM0Mi44LTE5LjMgMTkzLjMtMjQuNyA5Mi43IDU4LjhMNDEgN0MzNC4xIC4yIDIzLjgtMS45IDE0LjggMS44UzAgMTQuMyAwIDI0TDAgMTY4YzAgMTMuMyAxMC43IDI0IDI0IDI0eiJdfSxZVHQ9dTcsWlR0PXU3LFhUdD11NyxXbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVhZGluZyIsaWNvbjpbNDQ4LDUxMixbImhlYWRlciJdLCJmMWRjIiwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDExMiAyMjQgMCAwLTExMi0xNiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2IDAgMCAzMjAgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtMTQ0LTIyNCAwIDAgMTQ0IDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMCAwLTMyMC0xNiAwQzE0LjMgOTYgMCA4MS43IDAgNjR6Il19LFFUdD1XbmUsS1R0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNyb3NzaGFpcnMiLGljb246WzU3Niw1MTIsW10sImYwNWIiLCJNMjg4LTE2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTguM2M5OC4xIDE0IDE3NS43IDkxLjYgMTg5LjcgMTg5LjdsMTguMyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOC4zIDBjLTE0IDk4LjEtOTEuNiAxNzUuNy0xODkuNyAxODkuN2wwIDE4LjNjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOC4zQzE1Ny45IDQ2My43IDgwLjMgMzg2LjEgNjYuMyAyODhMNDggMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE4LjMgMEM4MC4zIDEyNS45IDE1Ny45IDQ4LjMgMjU2IDM0LjNMMjU2IDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMzEuMiAyODhjMTIuNyA2Mi43IDYyLjEgMTEyLjEgMTI0LjggMTI0LjhsMC0xMi44YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxMi44YzYyLjctMTIuNyAxMTIuMS02Mi4xIDEyNC44LTEyNC44TDQzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTIuOCAwQzQzMi4xIDE2MS4zIDM4Mi43IDExMS45IDMyMCA5OS4ybDAgMTIuOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyLjhDMTkzLjMgMTExLjkgMTQzLjkgMTYxLjMgMTMxLjIgMjI0bDEyLjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTIuOCAwek0yODggMjA4YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnoiXX0sSlR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1ub2RlcyIsaWNvbjpbNTEyLDUxMixbXSwiZTRlMiIsIk00MTguNCAxNTcuOWMzNS4zLTguMyA2MS42LTQwIDYxLjYtNzcuOSAwLTQ0LjItMzUuOC04MC04MC04MC00My40IDAtNzguNyAzNC41LTgwIDc3LjVMMTM2LjIgMTUxLjFDMTIxLjcgMTM2LjggMTAxLjkgMTI4IDgwIDEyOCAzNS44IDEyOCAwIDE2My44IDAgMjA4czM1LjggODAgODAgODBjMTIuMiAwIDIzLjgtMi43IDM0LjEtNy42TDI1OS43IDQwNy44Yy0yLjQgNy42LTMuNyAxNS44LTMuNyAyNC4yIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0yNy43LTE0LTUyLjEtMzUuNC02Ni40bDM3LjgtMjA3Ljd6TTE1Ni4zIDIzMi4yYzIuMi02LjkgMy41LTE0LjIgMy43LTIxLjdsMTgzLjgtNzMuNWMzLjYgMy41IDcuNCA2LjcgMTEuNiA5LjVMMzE3LjYgMzU0LjFjLTUuNSAxLjMtMTAuOCAzLjEtMTUuOCA1LjVMMTU2LjMgMjMyLjJ6Il19LGVfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3aW5kb3ctcmVzdG9yZSIsaWNvbjpbNTc2LDUxMixbXSwiZjJkMiIsIk01MTIgOTZMMTYwIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0bC00OCAwIDAtNjQgNDggMCAwLTE5MnpNMCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNHptNjQgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggMjQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHoiXX0sdF90PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InIiLGljb246WzMyMCw1MTIsWzExNF0sIjUyIiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCA5NS4zIDAgMTAyLjQgMTQ2LjRjMTAuMSAxNC41IDMwLjEgMTggNDQuNiA3LjlzMTgtMzAuMSA3LjktNDQuNkwyMzAuMSAzMDkuNUMyODIuOCAyODguMSAzMjAgMjM2LjQgMzIwIDE3NiAzMjAgOTYuNSAyNTUuNSAzMiAxNzYgMzJMMzIgMzJ6TTE3NiAyNTZsLTExMiAwIDAtMTYwIDExMiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgweiJdfSxhX3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsdGVyLWNpcmNsZS14bWFyayIsaWNvbjpbNTc2LDUxMixbXSwiZTE3YiIsIk0zMiA2NEMxOS4xIDY0IDcuNCA3MS44IDIuNCA4My44Uy4yIDEwOS41IDkuNCAxMTguNkwxOTIgMzAxLjMgMTkyIDQxNmMwIDguNSAzLjQgMTYuNiA5LjQgMjIuNmw2NCA2NGMyLjUgMi41IDUuMyA0LjUgOC4zIDYtMjEuMi0zMC45LTMzLjYtNjguMy0zMy42LTEwOC42IDAtOTkuNCA3NS41LTE4MS4xIDE3Mi4zLTE5MWw5MC40LTkwLjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgNjQgNDgwIDY0TDMyIDY0ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXX0scl90PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdvcHVyYW0iLGljb246WzUxMiw1MTIsW10sImY2NjQiLCJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4IDQwIDAgMC04YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4IDQ4IDAgMC04YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4IDQwIDAgMC04YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMzZjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA4MGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDEyOGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNDggMCAwLTIyNC0zMiAwIDAtMTI4LTQ4IDAgMCAxMjggMzIgMCAwIDIyNC0yMjQgMCAwLTIyNCAzMiAwIDAtMTI4LTQ4IDAgMCAxMjgtMzIgMCAwIDIyNC00OCAwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDMzNmMwLTI2LjUgMjEuNS00OCA0OC00OGwwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4TDk2IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0ek0yNTYgMjA4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4IDY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjA4IDQwMGwwIDY0IDk2IDAgMC02NGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHpNMjU2IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyIDY0IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXX0saV90PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYXJ0LWNpcmNsZS1taW51cyIsaWNvbjpbNTc2LDUxMixbXSwiZTRmZiIsIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTcuNi0zLjQgMzUuNi05LjUgNTMuNy0yMS44LTguNi00NS42LTEzLjQtNzAuNS0xMy40LTEwNiAwLTE5MiA4Ni0xOTIgMTkyIDAgMjguNSA2LjIgNTUuNiAxNy40IDgwLS41IDAtLjkgMC0xLjQgMC0xNS41IDAtMzAuOC00LjYtNDMuMS0xNC4xLTczLTU1LjctMjEyLjktMTg2LTIxMi45LTI5OC4ybDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIyNCAwYzAtOC44LTcuMi0xNi0xNi0xNmwtMTI4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2eiJdfSxvX3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3Rhci1vZi1saWZlIixpY29uOls1MTIsNTEyLFtdLCJmNjIxIiwiTTIwOC41IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNDAuOSAxMjItNzAuNGMxNS4zLTguOCAzNC45LTMuNiA0My43IDExLjdsMTYgMjcuN2M4LjggMTUuMyAzLjYgMzQuOS0xMS43IDQzLjdsLTEyMiA3MC40IDEyMiA3MC40YzE1LjMgOC44IDIwLjYgMjguNCAxMS43IDQzLjdsLTE2IDI3LjdjLTguOCAxNS4zLTI4LjQgMjAuNi00My43IDExLjdsLTEyMi03MC40IDAgMTQwLjljMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTQwLjktMTIyIDcwLjRjLTE1LjMgOC44LTM0LjkgMy42LTQzLjctMTEuN2wtMTYtMjcuN2MtOC44LTE1LjMtMy42LTM0LjkgMTEuNy00My43bDEyMi03MC40LTEyMi03MC40Yy0xNS4zLTguOC0yMC41LTI4LjQtMTEuNy00My43bDE2LTI3LjdjOC44LTE1LjMgMjguNC0yMC41IDQzLjctMTEuN2wxMjIgNzAuNCAwLTE0MC45eiJdfSxHbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVzaW5lc3MtdGltZSIsaWNvbjpbNjQwLDUxMixbImJyaWVmY2FzZS1jbG9jayJdLCJmNjRhIiwiTTI2NCA0OGwxMTIgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC0xMjggMCAwLTQwYzAtNC40IDMuNi04IDgtOHptLTU2IDhsMCA0MC04MCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDk2IDMwNSAwYzMzLjgtMjkuOSA3OC4zLTQ4IDEyNy00OCAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTY1LjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTgwIDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NkwyNjQgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6bTgwIDI5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNi0xOTIgMCAwIDExMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTMuNCAwYy0xMS4yLTI0LjQtMTcuNC01MS40LTE3LjQtODAgMC0xNi42IDIuMS0zMi43IDYtNDhsLTIyIDB6bTM1MiA0OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwek00OTYgMzIwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTQ4IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnoiXX0sc190PUduZSxuX3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlyZS1leHRpbmd1aXNoZXIiLGljb246WzUxMiw1MTIsWzEyOTUxOV0sImYxMzQiLCJNNTEyIDMyYzAtOS42LTQuMy0xOC43LTExLjctMjQuN1M0ODMuMS0xLjMgNDczLjcgLjZsLTE2MCAzMkMzMDEuNSAzNS4xIDI5MiA0NC4zIDI4OSA1NmwtNjUgMCAwLTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDI4LjRjLTU1LjMgMTIuMy0xMDEuMyA0OS41LTEyNS41IDk5LjEtNS44IDExLjktLjkgMjYuMyAxMS4xIDMyLjFzMjYuMyAuOSAzMi4xLTExLjFDNjIgMTQ2LjkgOTEuOCAxMjEuMSAxMjggMTEwbDAgMjguOGMtMzcuOCAxOC02NCA1Ni41LTY0IDEwMS4ybDAgMTI4IDIyNCAwIDAtMTI4YzAtNDQuNy0yNi4yLTgzLjItNjQtMTAxLjJsMC0zNC44IDY1IDBjMyAxMS43IDEyLjUgMjAuOSAyNC43IDIzLjRsMTYwIDMyYzkuNCAxLjkgMTkuMS0uNiAyNi42LTYuNlM1MTIgMTM3LjYgNTEyIDEyOGwwLTk2ek0yODggNDQ4bDAtMzItMjI0IDAgMCAzMmMwIDM1LjMgMjguNyA2NCA2NCA2NGw5NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0eiJdfSxZbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctZG93bi1sb25nIixpY29uOlszMjAsNTEyLFsibG9uZy1hcnJvdy1kb3duIl0sImYxNzUiLCJNMTM3LjQgNTM0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgNDM0LjcgMTkyIDBjMC0xNy43LTE0LjMtMzItMzItMzJTMTI4LTE3LjcgMTI4IDBsMCA0MzQuNy03My40LTczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDEyOCAxMjh6Il19LGxfdD1ZbmUsY190PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItbWludXMiLGljb246WzY0MCw1MTIsW10sImY1MDMiLCJNMTM2IDEyOGExMjAgMTIwIDAgMSAxIDI0MCAwIDEyMCAxMjAgMCAxIDEgLTI0MCAwek00OCA0ODIuM0M0OCAzODMuOCAxMjcuOCAzMDQgMjI2LjMgMzA0bDU5LjQgMGM5OC41IDAgMTc4LjMgNzkuOCAxNzguMyAxNzguMyAwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0w3Ny43IDUxMkM2MS4zIDUxMiA0OCA0OTguNyA0OCA0ODIuM3pNNDcyIDE2OGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LGRfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb25leS1jaGVjayIsaWNvbjpbNTEyLDUxMixbXSwiZjUzYyIsIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4ek05NiAzMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMjQtMTM2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNzIgMHoiXX0sWm5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWxhcHRvcCIsaWNvbjpbNjQwLDUxMixbImxhcHRvcC1ob3VzZSJdLCJlMDY2IiwiTTQ0OCAyNDBsMTkuOSAwYzE1LjUgMCAyOC4xLTEyLjYgMjguMS0yOC4xIDAtNy42LTMuMS0xNC45LTguNi0yMC4yTDI4My41LTQuOUMyNzYuMS0xMiAyNjYuMy0xNiAyNTYtMTZzLTIwLjEgNC0yNy41IDExLjFMMjQuNiAxOTEuN0MxOS4xIDE5NyAxNiAyMDQuMyAxNiAyMTEuOSAxNiAyMjcuNCAyOC42IDI0MCA0NC4xIDI0MGwxOS45IDAgMCAxNDRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODUuNyAwYzcuNC02LjYgMTYuNC0xMS40IDI2LjMtMTRsMC0xMzBjMC01LjUgLjctMTAuOSAyLTE2bC0xMCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNCAxNDQgMHpNMzUyIDM1MmwxNjAgMCAwIDEyOC0xNjAgMCAwLTEyOHptLTY0LTMybDAgMTYwLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDI2LjUgMjEuNSA0OCA0OCA0OGwyODggMGMyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJsLTIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXX0sZl90PVpuZSx1X3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZG93bmxvYWQiLGljb246WzQ0OCw1MTIsW10sImYwMTkiLCJNMjU2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjEwLjctNDEuNC00MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyNTYgMjQyLjcgMjU2IDMyek02NCAzMjBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMzJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMmMwLTM1LjMtMjguNy02NC02NC02NGwtNDYuOSAwLTU2LjYgNTYuNmMtMzEuMiAzMS4yLTgxLjkgMzEuMi0xMTMuMSAwTDExMC45IDMyMCA2NCAzMjB6bTMwNCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il19LHBfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb3VjaCIsaWNvbjpbNjQwLDUxMixbXSwiZjRiOCIsIk0xNDQgMjcyQzE0NCAyMjQuNyAxMDkuOCAxODUuNCA2NC44IDE3Ny41IDcyIDExMy42IDEyNi4yIDY0IDE5MiA2NGwyNTYgMGM2NS44IDAgMTIwIDQ5LjYgMTI3LjIgMTEzLjUtNDUgOC03OS4yIDQ3LjItNzkuMiA5NC41bDAgMzItMzUyIDAgMC0zMnpNMCAzODRMMCAyNzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwIDQ0OCAwIDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0eiJdfSxoX3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicm9hZC1sb2NrIixpY29uOls1NzYsNTEyLFtdLCJlNTY3IiwiTTI1NiAzMmwtNzYuMyAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkwzMy40IDQyMC41QzI1LjkgNDUwLjcgNDguOCA0ODAgODAgNDgwbDE3NS45IDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMiA2LjEgMCAxMS44IDEuNyAxNi43IDQuNyAyLjgtMjMuOSAxNC4zLTQ1LjEgMzEuNC02MC4zbDAtMjQuNGMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOCA2LjIgMCAxMi40IC40IDE4LjQgMS4zTDQ1OC41IDgwLjZDNDUxLjQgNTIuMSA0MjUuOCAzMiAzOTYuMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptNjQgMTkybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xNzYgODAuMWwwIDQ3LjktNjQgMCAwLTQ3LjljMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNMzUyIDQwMGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zbDAtNTAuNmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDUwLjZjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM3oiXX0sWG5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNjaXNzb3JzIixpY29uOls1MTIsNTEyLFs5OTg0LDk5ODYsOTk4OCwiY3V0Il0sImYwYzQiLCJNMTkyIDI1NmwtMzkuNSAzOS41Yy0xMi42LTQuOS0yNi4yLTcuNS00MC41LTcuNS02MS45IDAtMTEyIDUwLjEtMTEyIDExMnM1MC4xIDExMiAxMTIgMTEyIDExMi01MC4xIDExMi0xMTJjMC0xNC4zLTIuNy0yNy45LTcuNS00MC41TDQ5OS4yIDc2LjhjNy4xLTcuMSA3LjEtMTguNSAwLTI1LjYtMjguMy0yOC4zLTc0LjEtMjguMy0xMDIuNCAwTDI1NiAxOTIgMjE2LjUgMTUyLjVjNC45LTEyLjYgNy41LTI2LjIgNy41LTQwLjUgMC02MS45LTUwLjEtMTEyLTExMi0xMTJTMCA1MC4xIDAgMTEyIDUwLjEgMjI0IDExMiAyMjRjMTQuMyAwIDI3LjktMi43IDQwLjUtNy41TDE5MiAyNTZ6bTk3LjkgOTcuOUwzOTYuOCA0NjAuOGMyOC4zIDI4LjMgNzQuMSAyOC4zIDEwMi40IDAgNy4xLTcuMSA3LjEtMTguNSAwLTI1LjZsLTE0NS4zLTE0NS4zLTY0IDY0ek02NCAxMTJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDggMjQwYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnoiXX0sbV90PVhuZSxIVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidWciLGljb246WzU3Niw1MTIsW10sImYxODgiLCJNMTkyIDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAzLjZjMCAxNS43LTEyLjcgMjguNC0yOC40IDI4LjRsLTEzNS4xIDBjLTE1LjcgMC0yOC40LTEyLjctMjguNC0yOC40bDAtMy42em0zNDUuNiAxMi44YzEwLjYgMTQuMSA3LjcgMzQuMi02LjQgNDQuOGwtOTcuOCA3My4zYzUuMyA4LjkgOS4zIDE4LjcgMTEuOCAyOS4xbDk4LjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDMyYzAgMi42LS4xIDUuMy0uMiA3LjlsODMuNCA2Mi41YzE0LjEgMTAuNiAxNyAzMC43IDYuNCA0NC44cy0zMC43IDE3LTQ0LjggNi40bC02My4xLTQ3LjNjLTIzLjIgNDQuMi02Ni41IDc2LjItMTE3LjcgODMuOUwzMTIgMjgwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjMwLjJjLTUxLjItNy43LTk0LjUtMzkuNy0xMTcuNy04My45TDgzLjIgNDczLjZjLTE0LjEgMTAuNi0zNC4yIDcuNy00NC44LTYuNHMtNy43LTM0LjIgNi40LTQ0LjhsODMuNC02Mi41Yy0uMS0yLjYtLjItNS4yLS4yLTcuOWwwLTMyLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTguOCAwYzIuNS0xMC40IDYuNS0yMC4yIDExLjgtMjkuMUw0NC44IDE1My42Yy0xNC4xLTEwLjYtMTctMzAuNy02LjQtNDQuOHMzMC43LTE3IDQ0LjgtNi40TDE5MiAxODRjMTIuMy01LjEgMjUuOC04IDQwLThsMTEyIDBjMTQuMiAwIDI3LjcgMi44IDQwIDhsMTA4LjgtODEuNmMxNC4xLTEwLjYgMzQuMi03LjcgNDQuOCA2LjR6Il19LFFuZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1yaWdodC1mcm9tLWJyYWNrZXQiLGljb246WzUxMiw1MTIsWyJzaWduLW91dCJdLCJmMDhiIiwiTTE2MCA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiAzMkM0MyAzMiAwIDc1IDAgMTI4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHpNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAxOTIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIxMC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il19LGdfdD1RbmUseF90PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtaG9sZGluZy1oYW5kIixpY29uOls1NzYsNTEyLFtdLCJlNGY3IiwiTTQ2Ni44IDE4Ni41bDQyLjUtNDIuNSAzNC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMkwyMjMuNiAxNmMtMjkgMC01Ny4zIDkuMy04MC43IDI2LjVMMTYuMyAxMzUuOGMtMTcuOCAxMy4xLTIxLjYgMzguMS04LjUgNTUuOXMzOC4xIDIxLjYgNTUuOSA4LjVMMTgzLjQgMTEyIDI5NiAxMTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTcyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTUyLjIgMGMzMy45IDAgNjYuNS0xMy41IDkwLjUtMzcuNXptLTM1Ny41IDEzOUw2Ni43IDM2OCAzMiAzNjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MDAgMjgwIDQwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNTIuMiAwYy0zMy45IDAtNjYuNSAxMy41LTkwLjUgMzcuNXoiXX0sYl90PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN0cm9vcHdhZmVsIixpY29uOls1MTIsNTEyLFtdLCJmNTUxIiwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTMxMi42IDYzLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDI1NiA5Ny42IDIyMi4xIDYzLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsMzMuOSAzMy45LTQ1LjMgNDUuMy01Ni42LTU2LjZjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNTYuNiA1Ni42LTQ1LjMgNDUuMy0zMy45LTMzLjljLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZMOTcuNiAyNTYgNjMuNyAyODkuOWMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDMzLjktMzMuOSA0NS4zIDQ1LjMtNTYuNiA1Ni42Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsNTYuNi01Ni42IDQ1LjMgNDUuMy0zMy45IDMzLjljLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzMy45LTMzLjkgMzMuOSAzMy45YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzMuOS0zMy45IDQ1LjMtNDUuMyA1Ni42IDU2LjZjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC01Ni42LTU2LjYgNDUuMy00NS4zIDMzLjkgMzMuOWM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTMzLjktMzMuOSAzMy45LTMzLjljNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzMuOSAzMy45LTQ1LjMtNDUuMyA1Ni42LTU2LjZjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtNTYuNiA1Ni42LTQ1LjMtNDUuMyAzMy45LTMzLjljNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6TTE0Mi45IDI1Nmw0NS4zLTQ1LjMgNDUuMyA0NS4zLTQ1LjMgNDUuMy00NS4zLTQ1LjN6bTY3LjkgNjcuOWw0NS4zLTQ1LjMgNDUuMyA0NS4zLTQ1LjMgNDUuMy00NS4zLTQ1LjN6TTI3OC42IDI1Nmw0NS4zLTQ1LjMgNDUuMyA0NS4zLTQ1LjMgNDUuMy00NS4zLTQ1LjN6bTIyLjYtNjcuOWwtNDUuMyA0NS4zLTQ1LjMtNDUuMyA0NS4zLTQ1LjMgNDUuMyA0NS4zeiJdfSx2X3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hpbGQiLGljb246WzMyMCw1MTIsW10sImYxYWUiLCJNOTYgNjRBNjQgNjQgMCAxIDEgMjI0IDY0IDY0IDY0IDAgMSAxIDk2IDY0em00OCAzMjBsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkw4MCAyODcuOCA1OS4xIDMyMWMtOS40IDE1LTI5LjIgMTkuNC00NC4xIDEwUy00LjUgMzAxLjkgNC45IDI4N2wzOS45LTYzLjNDNjkuNyAxODQgMTEzLjIgMTYwIDE2MCAxNjBzOTAuMyAyNCAxMTUuMiA2My42TDMxNS4xIDI4N2M5LjQgMTUgNC45IDM0LjctMTAgNDQuMXMtMzQuNyA0LjktNDQuMS0xMEwyNDAgMjg3LjggMjQwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2LTMyIDB6Il19LHlfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpY2UtY3JlYW0iLGljb246WzM4NCw1MTIsWzEyNzg0OF0sImY4MTAiLCJNMzM1LjEgMTYwYy42LTUuMyAuOS0xMC42IC45LTE2IDAtNzkuNS02NC41LTE0NC0xNDQtMTQ0UzQ4IDY0LjUgNDggMTQ0YzAgNS40IC4zIDEwLjcgLjkgMTZsLS45IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhsMjg4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLS45IDB6TTY0IDMwNEwxNjkuMiA1MjkuNWM0LjEgOC44IDEzIDE0LjUgMjIuOCAxNC41czE4LjYtNS43IDIyLjgtMTQuNUwzMjAgMzA0IDY0IDMwNHoiXX0sS25lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvbXB1dGVyLW1vdXNlIixpY29uOlszODQsNTEyLFsxMjg0MzMsIm1vdXNlIl0sImY4Y2MiLCJNMCAxOTJsMTY4IDAgMC0xOTItOCAwQzcxLjYgMCAwIDcxLjYgMCAxNjBsMCAzMnptMCA0OEwwIDM1MmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGw2NCAwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwbDAtMTEyLTM4NCAwem0zODQtNDhsMC0zMkMzODQgNzEuNiAzMTIuNCAwIDIyNCAwbC04IDAgMCAxOTIgMTY4IDB6Il19LHdfdD1LbmUsTV90PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhdWNldCIsaWNvbjpbNTEyLDUxMixbXSwiZTAwNSIsIk0xOTIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwIDAgNjQgMTguNyAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDIyLjYgMjIuNiAzMiAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwIDAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzYuMSAwYy0yMC4yIDI5LTUzLjkgNDgtOTEuOSA0OHMtNzEuNy0xOS05MS45LTQ4TDMyIDM1MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDIyLjYtMjIuNmM2LTYgMTQuMS05LjQgMjIuNi05LjRsMTguNyAwIDAtNjQtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA2NCA5NiA2NGw5NiAweiJdfSx6X3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXdhcmQiLGljb246WzQ0OCw1MTIsW10sImY1NTkiLCJNMjQ1LjktMjUuOWMtMTMuNC04LjItMzAuMy04LjItNDMuNyAwLTI0LjQgMTQuOS0zOS41IDE4LjktNjguMSAxOC4zLTE1LjctLjQtMzAuMyA4LjEtMzcuOSAyMS45LTEzLjcgMjUuMS0yNC44IDM2LjItNDkuOSA0OS45LTEzLjggNy41LTIyLjIgMjIuMi0yMS45IDM3LjkgLjcgMjguNi0zLjQgNDMuNy0xOC4zIDY4LjEtOC4yIDEzLjQtOC4yIDMwLjMgMCA0My43IDE0LjkgMjQuNCAxOC45IDM5LjUgMTguMyA2OC4xLS40IDE1LjcgOC4xIDMwLjMgMjEuOSAzNy45IDIyLjEgMTIuMSAzMy4zIDIyLjEgNDUuMSA0MS41TDQyLjcgNDU4LjVjLTUuOSAxMS45LTEuMSAyNi4zIDEwLjcgMzIuMmw4NiA0M2MxMS41IDUuNyAyNS41IDEuNCAzMS43LTkuOGw1Mi44LTk1LjEgNTIuOCA5NS4xYzYuMiAxMS4yIDIwLjIgMTUuNiAzMS43IDkuOGw4Ni00M2MxMS45LTUuOSAxNi43LTIwLjMgMTAuNy0zMi4ybC00OC42LTk3LjJjMTEuNy0xOS40IDIzLTI5LjQgNDUuMS00MS41IDEzLjgtNy41IDIyLjItMjIuMiAyMS45LTM3LjktLjctMjguNiAzLjQtNDMuNyAxOC4zLTY4LjEgOC4yLTEzLjQgOC4yLTMwLjMgMC00My43LTE0LjktMjQuNC0xOC45LTM5LjUtMTguMy02OC4xIC40LTE1LjctOC4xLTMwLjMtMjEuOS0zNy45LTI1LjEtMTMuNy0zNi4yLTI0LjgtNDkuOS00OS45LTcuNS0xMy44LTIyLjItMjIuMi0zNy45LTIxLjktMjguNiAuNy00My43LTMuNC02OC4xLTE4LjN6TTIyNCA5NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXX0sa190PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1kcm93bmluZyIsaWNvbjpbNjQwLDUxMixbXSwiZTU0NSIsIk0yNjQgODhhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMzMuOSA2NS42YzE2LjgtNS42IDM0LjkgMy41IDQwLjUgMjAuMmwxMC45IDMyLjhjOS40IDI4LjMgMzMuMiA0OS41IDYyLjUgNTUuNiA1LjYgMS4yIDExLjMgMS44IDE3LjEgMS44bDg4IDBjMTcuMiAwIDM0LjMtMi44IDUwLjYtOC4ybDExNC40LTM4LjFjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ycy0zLjUgMzQuOS0yMC4yIDQwLjVMNDIzLjcgMjI4LjVjLTguNCAyLjgtMTcgNS4xLTI1LjcgNi45bC0yNi41IDg4LjNjLTYuMSAzLjQtMTIuMSA3LjMtMTcuOSAxMS43LTIyLjEgMTYuNi0yOS4xIDE2LjYtNTEuMiAwLTI2LjItMTkuNy01Ni45LTMwLjItODcuOC0zMS4zbDIwLjItNjcuMmMtNTEuNS0xMC43LTkzLjUtNDguMS0xMTAuMi05OGwtMTAuOS0zMi44Yy01LjYtMTYuOCAzLjUtMzQuOSAyMC4yLTQwLjV6TTQwMy40IDQxMi4xQzM3OS4xIDQzMC4zIDM1MS4xIDQ0OCAzMjAgNDQ4cy01OS4xLTE3LjctODMuNC0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC41LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjNjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXX0sU190PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbWVyYS1yb3RhdGUiLGljb246WzUxMiw1MTIsW10sImUwZDgiLCJNMTM4LjcgOTZsMTAuNC0zMS4yQzE1NS42IDQ1LjIgMTczLjkgMzIgMTk0LjYgMzJsMTIyLjggMGMyMC43IDAgMzkgMTMuMiA0NS41IDMyLjhMMzczLjMgOTYgNDQ4IDk2YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsNzQuNyAwek05NiAzMDUuOWMwIDMuOSAxLjQgNy43IDQgMTAuNmw0OCA1NGM2LjQgNy4yIDE3LjYgNy4yIDIzLjkgMGw0OC01NGMyLjYtMi45IDQtNi43IDQtMTAuNmwwLTEuOWMwLTguOC03LjItMTYtMTYtMTZsLTI0IDBjMC0zOS44IDMyLjItNzIgNzItNzIgNC40IDAgOC43IC40IDEyLjkgMS4ybDM0LjktMzkuM2MtMTQuNi02LjQtMzAuOC05LjktNDcuOC05LjktNjYuMyAwLTEyMCA1My43LTEyMCAxMjBsLTI0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDEuOXptMTk2LTQ2LjVjLTIuNiAyLjktNCA2LjctNCAxMC42bDAgMS45YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzAgMzkuOC0zMi4yIDcyLTcyIDcyLTQuNCAwLTguNy0uNC0xMi45LTEuMmwtMzQuOSAzOS4zYzE0LjcgNi40IDMwLjggOS45IDQ3LjggOS45IDY2LjMgMCAxMjAtNTMuNyAxMjAtMTIwbDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMS45YzAtMy45LTEuNC03LjctNC0xMC42bC00OC01NGMtNi40LTcuMi0xNy42LTcuMi0yMy45IDBsLTQ4IDU0eiJdfSxKbmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1ncmluLWhlYXJ0cyIsaWNvbjpbNTEyLDUxMixbMTI4NTI1LCJncmluLWhlYXJ0cyJdLCJmNTg0IiwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NiAwLTIzLjMtMy4xLTQ1LjktOC45LTY3LjMgNS41LTEzLjUgOC45LTI4LjQgOC45LTQ0LjcgMC01My00My05Ni05Ni05NmwtMi45IDBjLTIuNSAwLTUgLjEtNy40IC4zLTQyLjEtMzAuNC05My44LTQ4LjMtMTQ5LjctNDguM1MxNDguNCAxNy45IDEwNi4zIDQ4LjNjLTIuNS0uMi00LjktLjMtNy40LS4zTDk2IDQ4Yy01MyAwLTk2IDQzLTk2IDk2IDAgMTYuMyAzLjUgMzEuMiA4LjkgNDQuNy01LjggMjEuNC04LjkgNDQtOC45IDY3LjMgMCAxNDEuNCAxMTQuNiAyNTYgMjU2IDI1NnpNMzg2LjcgMzI0LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDQwNC4yIDEwNS43IDM0Mi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTMyMi45IDk2YzEzLjUgMCAyNi41IDUuNCAzNiAxNC45bDkuMSA5LjEgOS4xLTkuMWM5LjUtOS41IDIyLjUtMTQuOSAzNi0xNC45bDIuOSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgNTMuNC02Ni45IDk1LjctODkgMTA4LjItNC40IDIuNS05LjYgMi41LTE0IDAtMjIuMS0xMi41LTg5LTU0LjgtODktMTA4LjIgMC0yNi41IDIxLjUtNDggNDgtNDhsMi45IDB6bS0xODggMTQuOWw5LjEgOS4xIDkuMS05LjFjOS41LTkuNSAyMi41LTE0LjkgMzYtMTQuOWwyLjkgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDUzLjQtNjYuOSA5NS43LTg5IDEwOC4yLTQuNCAyLjUtOS42IDIuNS0xNCAwLTIyLjEtMTIuNS04OS01NC44LTg5LTEwOC4yIDAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDIuOSAwYzEzLjUgMCAyNi41IDUuNCAzNiAxNC45eiJdfSxDX3Q9Sm5lLExfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWZyYWdtZW50IixpY29uOlszODQsNTEyLFtdLCJlNjk3IiwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0bDAgMjQwIDEyOCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTI4IDExMiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjc3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6TTMyIDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDB6Il19LFRfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tbWlsaXRhcnktcmlmbGUiLGljb246WzQ0OCw1MTIsW10sImU1NGIiLCJNMTI4IDM5YzAtMTMgMTAtMjMuOCAyMi45LTI0LjlMMzAyLjcgMS40QzMxMiAuNyAzMjAgOCAzMjAgMTcuNEwzMjAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2TDE1MyA2NGMtMTMuOCAwLTI1LTExLjItMjUtMjV6bTE3LjYgNTdsMTU2LjggMGMxIDUuMiAxLjYgMTAuNSAxLjYgMTYgMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC01LjUgLjYtMTAuOCAxLjYtMTZ6bTIyOCAzNjQuM0wzMjAgMzY5LjcgMzIwIDQ4MGMwIDEuMy0uMSAyLjUtLjIgMy44TDE0NS41IDIzNC45YzE2LjYtNy4xIDM0LjYtMTAuOSA1My4zLTEwLjlsNTAuNCAwYzE1LjkgMCAzMS4zIDIuOCA0NS44IDcuOUwzODkuOSA2Ny43Yy03LjctNC40LTEwLjMtMTQuMi01LjktMjEuOXMxNC4yLTEwLjMgMjEuOS01LjlsMjcuNyAxNmM3LjcgNC40IDEwLjMgMTQuMiA1LjkgMjEuOWwtNTUuNSA5Ni4xIDEuNiAuOWMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43TDM2MC43IDI4MmMyIDIuOCAzLjkgNS44IDUuNyA4LjhsNzYuMSAxMjguOGMxMS4yIDE5IDQuOSA0My41LTE0LjEgNTQuOHMtNDMuNSA0LjktNTQuOC0xNC4xek0yODggNTEybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMTAuMy01My42IDkwLjZjLTExLjIgMTktMzUuOCAyNS4zLTU0LjggMTQuMVMtNS43IDQzOC43IDUuNiA0MTkuN0w4MS43IDI5MC44YzkuNC0xNS44IDIxLjctMjkuMyAzNi00MEwyOTkuMSA1MTBjLTMuNSAxLjMtNy4yIDItMTEuMSAyek0yNjQgMzIwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXX0sX190PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRvZ2dsZS1vbiIsaWNvbjpbNTc2LDUxMixbXSwiZjIwNSIsIk0xOTIgNjRDODYgNjQgMCAxNTAgMCAyNTZTODYgNDQ4IDE5MiA0NDhsMTkyIDBjMTA2IDAgMTkyLTg2IDE5Mi0xOTJTNDkwIDY0IDM4NCA2NEwxOTIgNjR6bTE5MiA5NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXX0sQV90PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imx1bmdzLXZpcnVzIixpY29uOls1NzYsNTEyLFtdLCJlMDY3IiwiTTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE1MS4zYzkuNi00LjggMjAuNS03LjUgMzItNy41czIyLjQgMi43IDMyIDcuNUwzMjAgMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQ1MC4xIDQ1MWM4IDE4LjMgOC4xIDM5LjIgLjIgNTcuNSAxMC4yIDIuMyAyMC42IDMuNSAzMS4yIDMuNSA1Mi4yIDAgOTQuNS00Mi4zIDk0LjUtOTQuNWwwLTYuMmMwLTExMS4xLTM2LjctMjE5LTEwNC40LTMwN0w0MjguOSA0OC43Yy04LjEtMTAuNi0yMC43LTE2LjctMzQtMTYuNy0yMy43IDAtNDIuOSAxOS4yLTQyLjkgNDIuOWwwIDEzOS45YzEuMiAyLjIgMi4yIDQuNiAzLjEgNi45IDI2LjQtMTEuNiA1OC4zLTYuNiA3OS45IDE1czI2LjYgNTMuNiAxNSA3OS45QzQ3NyAzMjcuMiA0OTYgMzUzLjMgNDk2IDM4My44cy0xOSA1Ni43LTQ1LjkgNjcuMXpNMjIwLjkgMjIxLjhjLjktMi40IDItNC43IDMuMS02LjlsMC0xMzguNWMwLTI0LjUtMTkuOS00NC40LTQ0LjQtNDQuNC0xMi41IDAtMjQuNCA1LjMtMzIuOCAxNC41bC0yNi40IDI5QzQyLjkgMTYwLjggMCAyNzEuOCAwIDM4N2wwIDMwLjVjMCA1Mi4yIDQyLjMgOTQuNSA5NC41IDk0LjUgMTAuNSAwIDIxLTEuMiAzMS4yLTMuNS03LjktMTguMy03LjgtMzkuMyAuMi01Ny41LTI2LjktMTAuNC00NS45LTM2LjYtNDUuOS02Ny4xczE5LTU2LjcgNDUuOS02Ny4xYy0xMS42LTI2LjQtNi42LTU4LjMgMTUtNzkuOXM1My42LTI2LjYgNzkuOS0xNXpNMTUyIDQwOGMyOC44IDAgNDMuMiAzNC44IDIyLjkgNTUuMi05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBjMjAuNC0yMC40IDU1LjItNS45IDU1LjIgMjIuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMjguOCAzNC44LTQzLjIgNTUuMi0yMi45IDkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWMtMjAuNC0yMC40LTUuOS01NS4yIDIyLjktNTUuMiAxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtMjguOCAwLTQzLjItMzQuOC0yMi45LTU1LjIgOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGMtMjAuNCAyMC40LTU1LjIgNS45LTU1LjItMjIuOSAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDI4LjgtMzQuOCA0My4yLTU1LjIgMjIuOS05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45YzIwLjQgMjAuNCA1LjkgNTUuMi0yMi45IDU1LjItMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptMTA0LTgwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDAgODhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXX0sZlU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGFibGUtdGVubmlzLXBhZGRsZS1iYWxsIixpY29uOls1MTIsNTEyLFsxMjc5NTUsInBpbmctcG9uZy1wYWRkbGUtYmFsbCIsInRhYmxlLXRlbm5pcyJdLCJmNDVkIiwiTTk3IDEyN2w2Ny40LTY3LjRjMzguMi0zOC4yIDkwLTU5LjYgMTQ0LTU5LjYgMTEyLjUgMCAyMDMuNyA5MS4yIDIwMy43IDIwMy42IDAgNDYuNC0xNS44IDkxLjEtNDQuNSAxMjctMjMuNi0xNi44LTUyLjQtMjYuNy04My41LTI2LjctMzEuMSAwLTU5LjkgOS45LTgzLjQgMjYuNkw5NyAxMjd6TTI0MCA0NDhjMCA5LjcgMSAxOS4xIDIuOCAyOC4yLTE5LjgtNS4yLTM4LTE1LjUtNTIuNy0zMC4yLTEyLjItMTIuMi0zMS45LTEyLjItNDQuMSAwTDk2LjYgNDk1LjRjLTEwLjYgMTAuNi0yNSAxNi42LTQwIDE2LjYtMzEuMiAwLTU2LjYtMjUuMy01Ni42LTU2LjYgMC0xNSA2LTI5LjQgMTYuNi00MGw0OS40LTQ5LjRjMTIuMi0xMi4yIDEyLjItMzEuOSAwLTQ0LjEtMjEuNy0yMS43LTMzLjktNTEuMi0zMy45LTgxLjkgMC0yOS40IDExLjEtNTcuNiAzMS4xLTc5TDI2Ni42IDM2NC42QzI0OS45IDM4OC4xIDI0MCA0MTYuOSAyNDAgNDQ4em0xNDQtOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il19LCRfdD1mVSxEX3Q9ZlUsRV90PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJveGVzLXBhY2tpbmciLGljb246WzU3Niw1MTIsW10sImU0YzciLCJNMjA4IDBsODAgMCAwIDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC01NiA4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMDguOCAwYzguMi0xNC4xIDEyLjgtMzAuNSAxMi44LTQ4bDAtMTYwYzEwLTEzLjQgMTYtMzAgMTYtNDhsMC0zMmMwLTQ0LjItMzUuOC04MC04MC04MGwtMTc2IDAgMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OHpNMzIgMzM2bDMyMCAwIDAgMTI4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDgwIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xMjh6TTQ4IDE5MmwyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDQ4IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXX0sTl90PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1jaGFsa2JvYXJkIixpY29uOls2NDAsNTEyLFtdLCJlNTNkIiwiTTE5MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMTc2IDUxMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMzYgMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDAgMC00OCAxOTIgMCAwIDE5Mi0xOTIgMCAwLTMyLTY0IDAgMCA0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyNGMwLTI2LjUtMjEuNS00OC00OC00OEwzNjggMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NC0xMjIuNyAwYy00NS42IDAtODguNSAyMS42LTExNS42IDU4LjJMMTQuMyAyNjAuOWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDExMiAyMzYuNyAxMTIgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6Il19LFBfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaWNlLXR3byIsaWNvbjpbNDQ4LDUxMixbOTg1N10sImY1MjgiLCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTM1MiAzNTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTI4IDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LGUwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1yaWdodC1hcnJvdy1sZWZ0IixpY29uOls1MTIsNTEyLFs4NjQ0LCJleGNoYW5nZSJdLCJmMGVjIiwiTTUwMi42IDE1MC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMNDAyLjcgMTYwIDMyIDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5NmwzNzAuNyAwLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3ptLTM5Ny4zIDM1MmwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTA5LjMgMzUyIDQ4MCAzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM3MC43IDAgNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAweiJdfSxJX3Q9ZTBlLHQwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmb290YmFsbCIsaWNvbjpbNTEyLDUxMixbMTI3OTQ0LCJmb290YmFsbC1iYWxsIl0sImY0NGUiLCJNMjYxLjEgMjIuNmMtODkgMTgtMTUwLjUgNjMuNC0xOTAgMTIzLjktMjMuMyAzNS42LTM4LjEgNzUuMy00Ni43IDExNS41TDI1MS45IDQ4OS40Yzg5LTE4IDE1MC41LTYzLjQgMTkwLjEtMTIzLjkgMjMuMy0zNS42IDM4LjEtNzUuMyA0Ni43LTExNS41TDI2MS4xIDIyLjZ6bTIzNiAxNjguMWMzLjItNDIuMyAuNy04My4zLTQuOC0xMTguNy00LjQtMjcuOC0yNi44LTQ4LTUzLjEtNTEuNi00My01LjktODIuMi03LjUtMTE3LjgtNS40TDQ5Ny4xIDE5MC42ek0xOTEuNyA0OTcuMUwxNS45IDMyMS40Yy0zLjIgNDIuMy0uNyA4My4zIDQuOCAxMTguNyA0LjQgMjcuOCAyNi44IDQ4IDUzLjEgNTEuNiA0MyA1LjkgODIuMiA3LjUgMTE3LjggNS40ek0yNzEuNSAxNDNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNjQgNjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNjQtNjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45em0tNjQgNjRjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNjQgNjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNjQtNjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45em0tNjQgNjRjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNjQgNjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNjQtNjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdfSxGX3Q9dDBlLE9fdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cnVjay1tb25zdGVyIixpY29uOls1NzYsNTEyLFtdLCJmNjNiIiwiTTMzNiA5Nmw0OCA2NC0xMjggMCAwLTY0IDgwIDB6bTEyOCA2NEwzODcuMiA1Ny42QzM3NS4xIDQxLjUgMzU2LjEgMzIgMzM2IDMyTDIyNCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5Ni0xNDQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDE4LjEgMTAuMSAzMy45IDI0LjkgNDIuMS0uNSA1LjcgMS4xIDExLjYgNC43IDE2LjQtMy43IDYuOS02LjggMTQuMS05IDIxLjgtMTEuNiAxLjctMjAuNiAxMS43LTIwLjYgMjMuOGwwIDE2YzAgMTIuMSA4LjkgMjIuMSAyMC42IDIzLjggMi4yIDcuNiA1LjMgMTQuOSA5IDIxLjgtNyA5LjQtNi4zIDIyLjggMi4zIDMxLjNsMTEuMyAxMS4zYzguNiA4LjYgMjEuOSA5LjMgMzEuMyAyLjIgNi44IDMuNyAxNC4xIDYuOCAyMS43IDkgMS43IDExLjYgMTEuNyAyMC42IDIzLjggMjAuNmwxNiAwYzEyLjEgMCAyMi4xLTguOSAyMy44LTIwLjYgNy42LTIuMiAxNC45LTUuMyAyMS43LTkgOS40IDcgMjIuOCA2LjMgMzEuMy0yLjJsMTEuMy0xMS4zYzguNi04LjYgOS4zLTIxLjkgMi4zLTMxLjMgMy43LTYuOCA2LjgtMTQuMSA5LTIxLjcgMTEuNi0xLjcgMjAuNi0xMS43IDIwLjYtMjMuOGwwLTE2YzAtMTIuMS04LjktMjIuMS0yMC42LTIzLjgtMi4yLTcuNi01LjMtMTQuOS05LTIxLjcgMi40LTMuMiAzLjktNi44IDQuNS0xMC41bDExNC4yIDBjLjYgMy43IDIuMSA3LjMgNC41IDEwLjUtMy43IDYuOS02LjggMTQuMS05IDIxLjgtMTEuNiAxLjctMjAuNiAxMS43LTIwLjYgMjMuOGwwIDE2YzAgMTIuMSA4LjkgMjIuMSAyMC42IDIzLjggMi4yIDcuNiA1LjMgMTQuOSA5IDIxLjgtNyA5LjQtNi4zIDIyLjggMi4yIDMxLjNsMTEuMyAxMS4zYzguNSA4LjYgMjEuOSA5LjMgMzEuMyAyLjIgNi44IDMuNyAxNC4xIDYuOCAyMS43IDkgMS43IDExLjYgMTEuNyAyMC42IDIzLjggMjAuNmwxNiAwYzEyLjEgMCAyMi4xLTguOSAyMy44LTIwLjYgNy42LTIuMiAxNC45LTUuMyAyMS44LTkgOS40IDcgMjIuOCA2LjMgMzEuMy0yLjJsMTEuMy0xMS4zYzguNi04LjYgOS4zLTIxLjkgMi4yLTMxLjMgMy43LTYuOCA2LjgtMTQuMSA5LTIxLjcgMTEuNi0xLjcgMjAuNi0xMS43IDIwLjYtMjMuOGwwLTE2YzAtMTIuMS04LjktMjIuMS0yMC42LTIzLjgtMi4yLTcuNi01LjMtMTQuOS05LTIxLjcgMy42LTQuOCA1LjItMTAuNyA0LjctMTYuNCAxNC44LTguMiAyNC45LTIzLjkgMjQuOS00Mi4xbDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTEyOCAzMzZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0yNzIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXX0sQl90PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFzdGVyaXNrIixpY29uOls0NDgsNTEyLFsxMDAzMyw2MTU0NV0sIjJhIiwiTTIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTY4LjYgMTQ0LTgzLjFjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43czMuNiAzNC45LTExLjcgNDMuN0wyODggMjU2IDQzMiAzMzkuMWMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43cy0yOC40IDIwLjYtNDMuNyAxMS43TDI1NiAzMTEuNCAyNTYgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTY4LjYtMTQ0IDgzLjFjLTE1LjMgOC44LTM0LjkgMy42LTQzLjctMTEuN1MuNyAzNDggMTYgMzM5LjFMMTYwIDI1NiAxNiAxNzIuOUMuNyAxNjQtNC41IDE0NC41IDQuMyAxMjkuMVMzMi43IDEwOC42IDQ4IDExNy40TDE5MiAyMDAuNiAxOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LHVVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhdHRlcnktZnVsbCIsaWNvbjpbNjQwLDUxMixbMTI4MjY3LCJiYXR0ZXJ5IiwiYmF0dGVyeS01Il0sImYyNDAiLCJNNTI4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC00MTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0MTYgMHpNMTEyIDY0Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDIyNGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MEwxMTIgNjR6bTU2IDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMzA0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTMwNCAweiJdfSxSX3Q9dVUsSF90PXVVLHFfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGlsZC1kcmVzcyIsaWNvbjpbMzIwLDUxMixbXSwiZTU5YyIsIk0yMjQgNjRBNjQgNjQgMCAxIDAgOTYgNjQgNjQgNjQgMCAxIDAgMjI0IDY0ek04OCA0MDBsMCA4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtODAgMTYgMCAwIDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC04MCAxNy44IDBjMTAuOSAwIDE4LjYtMTAuNyAxNS4yLTIxLjFsLTMxLjEtOTMuNCAyOC43IDM3LjhjMTAuNyAxNC4xIDMwLjggMTYuOCA0NC44IDYuMnMxNi44LTMwLjcgNi4yLTQ0LjhMMjU0LjYgMjA3Yy0yMi40LTI5LjYtNTcuNS00Ny05NC42LTQ3cy03Mi4yIDE3LjQtOTQuNiA0N0w2LjUgMjg0LjdjLTEwLjcgMTQuMS03LjkgMzQuMiA2LjIgNDQuOHMzNC4yIDcuOSA0NC44LTYuMkw4Ni4yIDI4NS41IDU1IDM3OC45QzUxLjYgMzg5LjMgNTkuMyA0MDAgNzAuMiA0MDBMODggNDAweiJdfSxhMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1raXNzLWJlYW0iLGljb246WzUxMiw1MTIsWzEyODUzNywia2lzcy1iZWFtIl0sImY1OTciLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTI0MCAyODhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpNMTc2IDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il19LFZfdD1hMGUscjBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyYXNoLWNhbi1hcnJvdy11cCIsaWNvbjpbNDQ4LDUxMixbInRyYXNoLXJlc3RvcmUtYWx0Il0sImY4MmEiLCJNMTY3LjEtMTZsMTEzLjkgMGMxMy44IDAgMjYgOC44IDMwLjQgMjEuOUwzMjAgMzIgNDE2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmw5NiAwIDguNy0yNi4xQzE0MS4xLTcuMiAxNTMuMy0xNiAxNjcuMS0xNnpNMzIgMTQ0bDM4NCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDR6bTIwOSA3OWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTcyIDcyYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzEtMzEgMCAxMDIuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTAyLjEgMzEgMzFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03Mi03MnoiXX0sVV90PXIwZSxqX3Q9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZm9udCIsaWNvbjpbNTEyLDUxMixbXSwiZjAzMSIsIk0yODUuMSA1MC43QzI3OS45IDM5LjMgMjY4LjUgMzIgMjU2IDMycy0yMy45IDcuMy0yOS4xIDE4LjdMNTkuNSA0MTYgNDggNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTYuMSAwIDIyLTQ4IDIwOC4zIDAgMjIgNDgtNi4xIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTEuNSAwLTE2Ny40LTM2NS4zek0zMzAuOCAzMDRMMTgxLjIgMzA0IDI1NiAxNDAuOCAzMzAuOCAzMDR6Il19LFdfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib3JlLWhvbGUiLGljb246WzUxMiw1MTIsW10sImU0YzMiLCJNMjU2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjMyLjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjQgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTIzLjctMTIuOS00NC40LTMyLTU1LjRMMjg4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0wIDM4NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjcyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00OCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE0NGMwIDYxLjktNTAuMSAxMTItMTEyIDExMlMxNDQgMzgxLjkgMTQ0IDMyMGwwLTE0NGMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhMMCAzODR6Il19LEdfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2aXJ1cy1jb3ZpZCIsaWNvbjpbNTEyLDUxMixbXSwiZTRhOCIsIk0xOTIgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMCAwIDMzLjZjMzAuNyA0LjIgNTguOCAxNi4zIDgyLjMgMzQuMUwzODYuMSA5MiAzNzQuOCA4MC42Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTYuNiA1Ni42YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTExLjMtMTEuMy0yMy44IDIzLjhjMTcuOSAyMy41IDI5LjkgNTEuNyAzNC4xIDgyLjNsMzMuNiAwIDAtMTZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTYtMzMuNiAwYy00LjIgMzAuNy0xNi4zIDU4LjgtMzQuMSA4Mi4zbDIzLjggMjMuOCAxMS4zLTExLjNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01Ni42IDU2LjZjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMTEuMy0xMS4zLTIzLjgtMjMuOGMtMjMuNSAxNy45LTUxLjcgMjkuOS04Mi4zIDM0LjFsMCAzMy42IDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTYgMCAwLTMzLjZjLTMwLjctNC4yLTU4LjgtMTYuMy04Mi4zLTM0LjFsLTIzLjggMjMuOCAxMS4zIDExLjNjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw0Ni43IDQwOC43Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMTEuMyAxMS4zIDIzLjgtMjMuOEM5Ny45IDMzOC44IDg1LjggMzEwLjcgODEuNiAyODBsLTMzLjYgMCAwIDE2YzAgMTMuMy0xMC43IDI0LTI0IDI0UzAgMzA5LjMgMCAyOTZsMC04MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTYgMzMuNiAwYzQuMi0zMC43IDE2LjMtNTguOCAzNC4xLTgyLjNMOTIgMTI1LjkgODAuNiAxMzcuMmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1Ni42LTU2LjZjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDEyNS45IDkyIDE0OS43IDExNS43YzIzLjUtMTcuOSA1MS43LTI5LjkgODIuMy0zNC4xbDAtMzMuNi0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMzIgMjAwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTk2IDk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0sWV90PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtcGRmIixpY29uOls1NzYsNTEyLFtdLCJmMWMxIiwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODAgMCAwLTExMmMwLTM1LjMgMjguNy02NCA2NC02NGwxNzYgMCAwLTE2NS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek0yNDAgMzgwYy0xMSAwLTIwIDktMjAgMjBsMCAxMjhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0yOCAxMiAwYzMzLjEgMCA2MC0yNi45IDYwLTYwcy0yNi45LTYwLTYwLTYwbC0zMiAwem0zMiA4MGwtMTIgMCAwLTQwIDEyIDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwem05Ni04MGMtMTEgMC0yMCA5LTIwIDIwbDAgMTI4YzAgMTEgOSAyMCAyMCAyMGwzMiAwYzI4LjcgMCA1Mi0yMy4zIDUyLTUybDAtNjRjMC0yOC43LTIzLjMtNTItNTItNTJsLTMyIDB6bTIwIDEyOGwwLTg4IDEyIDBjNi42IDAgMTIgNS40IDEyIDEybDAgNjRjMCA2LjYtNS40IDEyLTEyIDEybC0xMiAwem04OC0xMDhsMCAxMjhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC00NCAyOCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtMjggMCAwLTI0IDI4IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC00OCAwYy0xMSAwLTIwIDktMjAgMjB6Il19LFpfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsYW5ndWFnZSIsaWNvbjpbNTc2LDUxMixbXSwiZjFhYiIsIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05LjYgMC04LjQgMjMuMWMtMTYuNCA0NS4yLTQxLjEgODYuNS03Mi4yIDEyMiAxNC4yIDguOCAyOSAxNi42IDQ0LjQgMjMuNWw1MC40IDIyLjQgNjIuMi0xNDBjNS4xLTExLjYgMTYuNi0xOSAyOS4yLTE5czI0LjEgNy40IDI5LjIgMTlsMTI4IDI4OGM3LjIgMTYuMi0uMSAzNS4xLTE2LjIgNDIuMnMtMzUuMS0uMS00Mi4yLTE2LjJsLTIwLTQ1LTE1Ny41IDAtMjAgNDVjLTcuMiAxNi4yLTI2LjEgMjMuNC00Mi4yIDE2LjJzLTIzLjQtMjYuMS0xNi4yLTQyLjJsMzkuOC04OS41LTUwLjQtMjIuNGMtMjMtMTAuMi00NS0yMi40LTY1LjgtMzYuNC0yMS4zIDE3LjItNDQuNiAzMi4yLTY5LjUgNDQuN0w3OC4zIDM4MC42Yy0xNS44IDcuOS0zNSAxLjUtNDIuOS0xNC4zcy0xLjUtMzUgMTQuMy00Mi45bDM0LjUtMTcuM2MxNi4zLTguMiAzMS44LTE3LjcgNDYuNC0yOC4zLTEzLjgtMTIuNy0yNi44LTI2LjQtMzguOS00MC45TDgxLjYgMjI0LjdjLTExLjMtMTMuNi05LjUtMzMuOCA0LjEtNDUuMXMzMy44LTkuNSA0NS4xIDQuMWwxMC4yIDEyLjJjMTEuNSAxMy45IDI0LjEgMjYuOCAzNy40IDM4LjcgMjcuNS0zMC40IDQ5LjItNjYuMSA2My41LTEwNS40bC41LTEuMi0yMTAuMyAwQzE0LjMgMTI4IDAgMTEzLjcgMCA5NlMxNC4zIDY0IDMyIDY0bDk2IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDE2IDI3MC44TDM2NS43IDM4NCA0NjYuMyAzODQgNDE2IDI3MC44eiJdfSxpMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hpZWxkLWhhbHZlZCIsaWNvbjpbNTEyLDUxMixbInNoaWVsZC1hbHQiXSwiZjNlZCIsIk0yNTYgMGM0LjYgMCA5LjIgMSAxMy40IDIuOUw0NTcuOCA4Mi44YzIyIDkuMyAzOC40IDMxIDM4LjMgNTcuMi0uNSA5OS4yLTQxLjMgMjgwLjctMjEzLjYgMzYzLjItMTYuNyA4LTM2LjEgOC01Mi44IDAtMTcyLjQtODIuNS0yMTMuMS0yNjQtMjEzLjYtMzYzLjItLjEtMjYuMiAxNi4zLTQ3LjkgMzguMy01Ny4yTDI0Mi43IDIuOUMyNDYuOSAxIDI1MS40IDAgMjU2IDB6bTAgNjYuOGwwIDM3OC4xYzEzOC02Ni44IDE3NS4xLTIxNC44IDE3Ni0zMDMuNGwtMTc2LTc0LjYgMCAweiJdfSxYX3Q9aTBlLFFfdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXJldC11cCIsaWNvbjpbMzIwLDUxMixbXSwiZjBkOCIsIk0xNDAuMyAxMzUuMmMxMi42LTEwLjMgMzEuMS05LjUgNDIuOCAyLjJsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMDEuNCAzMjAgMjg4LjUgMzIwbC0yNTYgMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOFMuNyAyNzQuNSA5LjkgMjY1LjRsMTI4LTEyOCAyLjQtMi4yeiJdfSxvMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1wZW4iLGljb246WzY0MCw1MTIsWzEyODIyMSwiZmlsZS1lZGl0Il0sImYzMWMiLCJNMTI4LjEgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTQ2LjIgMCAxMC45LTU0LjVjNC4zLTIxLjcgMTUtNDEuNiAzMC42LTU3LjJsMTMyLjItMTMyLjIgMC05Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDMyMi44IDE4LjdDMzEwLjggNi43IDI5NC41IDAgMjc3LjYgMEwxMjguMSAwek0zODkuNiAxNzZsLTkzLjUgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC05My41IDExNy41IDExNy41ek0zMzIuMyA0NjYuOWwtMTEuOSA1OS42Yy0uMiAuOS0uMyAxLjktLjMgMi45IDAgOCA2LjUgMTQuNiAxNC42IDE0LjYgMSAwIDEuOS0uMSAyLjktLjNsNTkuNi0xMS45YzEyLjQtMi41IDIzLjgtOC42IDMyLjctMTcuNWwxMTguOS0xMTguOS04MC04MC0xMTguOSAxMTguOWMtOC45IDguOS0xNSAyMC4zLTE3LjUgMzIuN3ptMjY3LjgtMTIzYzIyLjEtMjIuMSAyMi4xLTU3LjkgMC04MHMtNTcuOS0yMi4xLTgwIDBsLTI4LjggMjguOCA4MCA4MCAyOC44LTI4Ljh6Il19LEtfdD1vMGUsczBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1iaWtpbmciLGljb246WzU3Niw1MTIsWzEyODY5MiwiYmlraW5nIl0sImY4NGEiLCJNMzY4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMjcuMiA2NGwtNjEuOC00OC44Yy0xNy4zLTEzLjYtNDEuNy0xMy44LTU5LjEtLjNsLTgzLjEgNjQuMmMtMzAuNyAyMy44LTI4LjUgNzAuOCA0LjMgOTEuNkwyNTYgMzA1LjEgMjU2IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTAuNy01LjMtMjAuNy0xNC4yLTI2LjZMMjYzIDIzMi45IDMyMy4zIDE4NC40IDM2NCAyMTdjNS43IDQuNSAxMi43IDcgMjAgN2w2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01Mi44IDB6TTExMiA1MTJhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0em0zNTIgMGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6Il19LEpfdD1zMGUsbjBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvb2stb3Blbi1yZWFkZXIiLGljb246WzUxMiw1MTIsWyJib29rLXJlYWRlciJdLCJmNWRhIiwiTTI1NiAxNTJhODggODggMCAxIDAgMC0xNzYgODggODggMCAxIDAgMCAxNzZ6bTAgMjk4LjdsMC0xNDkuM2MxNi4zLTYuOCAzMi45LTEzLjcgNDkuNy0yMC43IDM5LTE2LjIgODAuOC0yNC42IDEyMy4xLTI0LjZsMTkuMiAwIDAgMTYwLTE5LjIgMGMtNTkuMSAwLTExNy43IDExLjctMTcyLjMgMzQuNWwtLjUgLjJ6TTI1NiAyMzJsLTI1LjEtMTAuNUMxODQuMSAyMDIgMTMzLjkgMTkyIDgzLjIgMTkyTDQ4IDE5MmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMzUuMiAwYzUwLjcgMCAxMDAuOSAxMCAxNDcuNyAyOS41bDEyLjggNS4zYzcuOSAzLjMgMTYuNyAzLjMgMjQuNiAwbDEyLjgtNS4zYzQ2LjgtMTkuNSA5Ny0yOS41IDE0Ny43LTI5LjVsMzUuMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zNS4yIDBjLTUwLjcgMC0xMDAuOSAxMC0xNDcuNyAyOS41TDI1NiAyMzJ6Il19LGVBdD1uMGUsdEF0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdsYXNzLXdhdGVyLWRyb3BsZXQiLGljb246WzM4NCw1MTIsW10sImU0ZjUiLCJNMzIgMEMyMy4xIDAgMTQuNiAzLjcgOC42IDEwLjJTLS42IDI1LjQgLjEgMzQuM0wyOC45IDQzNy43YzMgNDEuOSAzNy44IDc0LjMgNzkuOCA3NC4zbDE2Ni42IDBjNDIgMCA3Ni44LTMyLjQgNzkuOC03NC4zTDM4My45IDM0LjNjLjYtOC45LTIuNC0xNy42LTguNS0yNC4xUzM2MC45IDAgMzUyIDBMMzIgMHpNODMgMjk3LjVMNjYuNCA2NCAzMTcuNiA2NCAzMDEgMjk3LjUgMjg4IDMwNGMtMjAuMSAxMC4xLTQzLjkgMTAuMS02NCAwcy00My45LTEwLjEtNjQgMC00My45IDEwLjEtNjQgMGwtMTMtNi41ek0yNTYgMTk2YzAtMjQtMzMuNy03MC4xLTUyLjItOTMuNS02LjEtNy43LTE3LjUtNy43LTIzLjYgMC0xOC41IDIzLjQtNTIuMiA2OS41LTUyLjIgOTMuNSAwIDMzLjEgMjguNyA2MCA2NCA2MHM2NC0yNi45IDY0LTYweiJdfSxsMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidG93ZXItYnJvYWRjYXN0IixpY29uOls1NzYsNTEyLFsiYnJvYWRjYXN0LXRvd2VyIl0sImY1MTkiLCJNODcuOSAxMS41Yy0xMS4zLTYuOS0yNi4xLTMuMi0zMyA4LjEtMjQuOCA0MS0zOSA4OS4xLTM5IDE0MC40czE0LjIgOTkuNCAzOSAxNDAuNGM2LjkgMTEuMyAyMS42IDE1IDMzIDguMXMxNS0yMS42IDguMS0zM0M3NS43IDI0MS45IDY0IDIwMi4zIDY0IDE2MFM3NS43IDc4LjEgOTYuMSA0NC40YzYuOS0xMS4zIDMuMi0yNi4xLTguMS0zM3ptNDAwLjEgMGMtMTEuMyA2LjktMTUgMjEuNi04LjEgMzMgMjAuNCAzMy43IDMyLjEgNzMuMyAzMi4xIDExNS42cy0xMS43IDgxLjktMzIuMSAxMTUuNmMtNi45IDExLjMtMy4yIDI2LjEgOC4xIDMzczI2LjEgMy4yIDMzLTguMWMyNC44LTQxIDM5LTg5LjEgMzktMTQwLjRTNTQ1LjggNjAuNiA1MjEgMTkuNmMtNi45LTExLjMtMjEuNi0xNS0zMy04LjF6TTMyMCAyMTUuNGMxOS4xLTExLjEgMzItMzEuNyAzMi01NS40IDAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0YzAgMjMuNyAxMi45IDQ0LjQgMzIgNTUuNEwyNTYgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNjQuNnpNMTgwLjIgOTFjNy4yLTExLjIgMy45LTI2LTcuMi0zMy4ycy0yNi0zLjktMzMuMiA3LjJjLTE3LjYgMjcuNC0yNy44IDYwLTI3LjggOTVzMTAuMiA2Ny42IDI3LjggOTVjNy4yIDExLjIgMjIgMTQuNCAzMy4yIDcuMnMxNC40LTIyIDcuMi0zMy4yYy0xMi44LTE5LjktMjAuMi00My42LTIwLjItNjlzNy40LTQ5LjEgMjAuMi02OXpNNDM2LjIgNjVjLTcuMi0xMS4yLTIyLTE0LjQtMzMuMi03LjJzLTE0LjQgMjItNy4yIDMzLjJjMTIuOCAxOS45IDIwLjIgNDMuNiAyMC4yIDY5cy03LjQgNDkuMS0yMC4yIDY5Yy03LjIgMTEuMi0zLjkgMjYgNy4yIDMzLjJzMjYgMy45IDMzLjItNy4yYzE3LjYtMjcuNCAyNy44LTYwIDI3LjgtOTVzLTEwLjItNjcuNi0yNy44LTk1eiJdfSxhQXQ9bDBlLGMwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtaW5pbWl6ZSIsaWNvbjpbNTEyLDUxMixbImNvbXByZXNzLWFycm93cy1hbHQiXSwiZjc4YyIsIk00NTYgMjI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xNDRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yUzMyMi4xIDMyLjIgMzI5IDM5bDQwIDQwIDczLjQtNzMuNEM0NDYgMiA0NTAuOSAwIDQ1NiAwczEwIDIgMTMuNyA1LjdsMzYuNyAzNi43QzUxMCA0NiA1MTIgNTAuOSA1MTIgNTZzLTIgMTAtNS43IDEzLjdMNDMzIDE0MyA0NzMgMTgzYzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJTNDY1LjcgMjI0IDQ1NiAyMjR6bTAgNjRjOS43IDAgMTguNSA1LjggMjIuMiAxNC44czEuNyAxOS4zLTUuMiAyNi4ybC00MCA0MCA3My40IDczLjRjMy42IDMuNiA1LjcgOC41IDUuNyAxMy43cy0yIDEwLTUuNyAxMy43bC0zNi43IDM2LjdDNDY2IDUxMCA0NjEuMSA1MTIgNDU2IDUxMnMtMTAtMi0xMy43LTUuN0wzNjkgNDMzIDMyOSA0NzNjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJTMjg4IDQ2NS43IDI4OCA0NTZsMC0xNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTQ0IDB6bS0yNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE0NGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC00MC00MC03My40IDczLjRDNjYgNTEwIDYxLjEgNTEyIDU2IDUxMnMtMTAtMi0xMy43LTUuN0w1LjcgNDY5LjdDMiA0NjYgMCA0NjEuMSAwIDQ1NnMyLTEwIDUuNy0xMy43TDc5IDM2OSAzOSAzMjljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJTNDYuMyAyODggNTYgMjg4bDE0NCAwek01NiAyMjRjLTkuNyAwLTE4LjUtNS44LTIyLjItMTQuOFMzMi4yIDE4OS45IDM5IDE4M0w3OSAxNDMgNS43IDY5LjdDMiA2NiAwIDYxLjEgMCA1NlMyIDQ2IDUuNyA0Mi4zTDQyLjMgNS43QzQ2IDIgNTAuOSAwIDU2IDBTNjYgMiA2OS43IDUuN0wxNDMgNzkgMTgzIDM5YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJTMjI0IDQ2LjMgMjI0IDU2bDAgMTQ0YzAgMTMuMy0xMC43IDI0LTI0IDI0TDU2IDIyNHoiXX0sckF0PWMwZSxpQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctcmlnaHQtdG8tY2l0eSIsaWNvbjpbNjQwLDUxMixbXSwiZTRiMyIsIk0yODggNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDgwIDQ4IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI4OGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjU2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDE2em02NCA2NGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0zNTIgMzA0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE3Ni04MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek01MTIgMzM2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE1MyAxNjdsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTAyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAweiJdfSxvQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGFwdG9wLW1lZGljYWwiLGljb246WzY0MCw1MTIsW10sImY4MTIiLCJNNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDAtNjQgMCAwLTI0MC0zODQgMCAwIDI0MC02NCAwIDAtMjQwek0wIDQwMy4yQzAgMzkyLjYgOC42IDM4NCAxOS4yIDM4NGw2MDEuNiAwYzEwLjYgMCAxOS4yIDguNiAxOS4yIDE5LjIgMCA0Mi40LTM0LjQgNzYuOC03Ni44IDc2LjhMNzYuOCA0ODBDMzQuNCA0ODAgMCA0NDUuNiAwIDQwMy4yek0yODggMTYwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00MCAwIDAgNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQweiJdfSxzQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnJlYWQtc2xpY2UiLGljb246WzUxMiw1MTIsW10sImY3ZWMiLCJNNjQgNDMybDAtMTc2Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTIxNi41IDUxMi0yMTYuNSA1MTIgMCAwIDM1LjMtMjguNyA2NC02NCA2NGwwIDE3NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjg4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4eiJdfSxuQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2xvYmUiLGljb246WzUxMiw1MTIsWzEyNzc2MF0sImYwYWMiLCJNMzUxLjkgMjgwbC0xOTAuOSAwYzIuOSA2NC41IDE3LjIgMTIzLjkgMzcuNSAxNjcuNCAxMS40IDI0LjUgMjMuNyA0MS44IDM1LjEgNTIuNCAxMS4yIDEwLjUgMTguOSAxMi4yIDIyLjkgMTIuMnMxMS43LTEuNyAyMi45LTEyLjJjMTEuNC0xMC42IDIzLjctMjggMzUuMS01Mi40IDIwLjMtNDMuNSAzNC42LTEwMi45IDM3LjUtMTY3LjR6TTE2MC45IDIzMmwxOTAuOSAwQzM0OSAxNjcuNSAzMzQuNyAxMDguMSAzMTQuNCA2NC42IDMwMyA0MC4yIDI5MC43IDIyLjggMjc5LjMgMTIuMiAyNjguMSAxLjcgMjYwLjQgMCAyNTYuNCAwcy0xMS43IDEuNy0yMi45IDEyLjJjLTExLjQgMTAuNi0yMy43IDI4LTM1LjEgNTIuNC0yMC4zIDQzLjUtMzQuNiAxMDIuOS0zNy41IDE2Ny40em0tNDggMEMxMTYuNCAxNDYuNCAxMzguNSA2Ni45IDE3MC44IDE0LjcgNzguNyA0Ny4zIDEwLjkgMTMxLjIgMS41IDIzMmwxMTEuNCAwek0xLjUgMjgwYzkuNCAxMDAuOCA3Ny4yIDE4NC43IDE2OS4zIDIxNy4zLTMyLjMtNTIuMi01NC40LTEzMS43LTU3LjktMjE3LjNMMS41IDI4MHptMzk4LjQgMGMtMy41IDg1LjYtMjUuNiAxNjUuMS01Ny45IDIxNy4zIDkyLjEtMzIuNyAxNTkuOS0xMTYuNSAxNjkuMy0yMTcuM2wtMTExLjQgMHptMTExLjQtNDhDNTAxLjkgMTMxLjIgNDM0LjEgNDcuMyAzNDIgMTQuNyAzNzQuMyA2Ni45IDM5Ni40IDE0Ni40IDM5OS45IDIzMmwxMTEuNCAweiJdfSxsQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZm9sZGVyLW1pbnVzIixpY29uOls1MTIsNTEyLFtdLCJmNjVkIiwiTTQ0OCA0NDhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNEw0NDggODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDBjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTE4NCAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdfSxjQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFzay1mYWNlIixpY29uOls2NDAsNTEyLFtdLCJlMWQ3IiwiTTMyMCA2NGMtMjcuMiAwLTUzLjggOC03Ni40IDIzLjFsLTM3LjEgMjQuOGMtMTUuOCAxMC41LTM0LjMgMTYuMS01My4zIDE2LjFMNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDc4LjdjMCA2Mi42IDQ1LjIgMTE2IDEwNyAxMjYuM2w5Ny45IDE2LjNjMzMgMjIgNzIuNiAzNC43IDExNS4xIDM0LjdzODIuMi0xMi44IDExNS4xLTM0LjdMNTMzIDM5Ni45YzYxLjctMTAuMyAxMDctNjMuNyAxMDctMTI2LjNsMC03OC43YzAtMzUuMy0yOC43LTY0LTY0LTY0bC04OS4yIDBjLTE5IDAtMzcuNS01LjYtNTMuMy0xNi4xTDM5Ni40IDg3LjFDMzczLjggNzIgMzQ3LjIgNjQgMzIwIDY0ek0xMzUuOSAzMzYuOWwtMTguNC0zLjFDODYuNiAzMjguNyA2NCAzMDIgNjQgMjcwLjdsMC03OC43IDQ4IDAgMCA0OGMwIDM1IDguNiA2Ny45IDIzLjkgOTYuOXptMzg2LjYtMy4xbC0xOC40IDMuMUM1MTkuNCAzMDcuOSA1MjggMjc1IDUyOCAyNDBsMC00OCA0OCAwIDAgNzguN2MwIDMxLjMtMjIuNiA1OC01My41IDYzLjF6TTE5MiAyMzJjMC0xMy4zIDEwLjctMjQgMjQtMjRsMjA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTIwOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptNTYgNTZsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSxkQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9uZyIsaWNvbjpbNTEyLDUxMixbXSwiZjU1YyIsIk00NDguNSAzODRjMCA0MS41LTEzLjEgNzkuOS0zNS41IDExMS4zLTcuOSAxMS4xLTIxLjIgMTYuNy0zNC44IDE2LjdsLTI0My4zIDBjLTEzLjcgMC0yNi45LTUuNi0zNC44LTE2LjctMjIuNC0zMS40LTM1LjUtNjkuOC0zNS41LTExMS4zIDAtNzEuMSAzOC42LTEzMy4xIDk2LTE2Ni4zbDAtMTUzLjdjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNTMuN2MxNC4yIDguMiAyNy4yIDE4LjIgMzguOCAyOS42bDM5LjMtMzkuMy03LTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMxNiAxNiAzMiAzMiA0OCA0OCA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03LTctNDMuMyA0My4zYzE3LjMgMjguOSAyNy4zIDYyLjYgMjcuMyA5OC44ek0yODguNSA2NGwtNjQgMCAwIDE5MC42LTMyIDE4LjVjLTE5LjUgMTEuMy0zNS43IDI3LjUtNDYuOSA0Ni45bDIyMS44IDBjLTExLjItMTkuNC0yNy40LTM1LjYtNDYuOS00Ni45bC0zMi0xOC41IDAtMTkwLjZ6Il19LGZBdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyb2FkLWJyaWRnZSIsaWNvbjpbNTc2LDUxMixbXSwiZTU2MyIsIk0zMiAzMmwyMDggMCAwIDY0LTI0IDAgMCA2NCAyNCAwIDAgMTI5LjNjLTQ1LjQgNy42LTgwIDQ3LjEtODAgOTQuN2wwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk0YzAtMzguOC0yNi40LTcyLjYtNjQtODJsMC0xMTIgNDAgMCAwLTY0LTggMEMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJ6TTg4IDk2bDAgNjQgODAgMCAwLTY0LTgwIDB6TTMzNiAzMmw3MiAwIDAgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTcyIDcyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTcyIDAgMC03MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDcyLTcyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzUyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em05NiAxNjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdfSxkMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAtOS0xIixpY29uOls1MTIsNTEyLFsic29ydC1udW1lcmljLXVwLWFsdCJdLCJmODg3IiwiTTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnpNMzY1LjEgMjA2LjZjLTkuNiAxNC44LTUuNCAzNC42IDkuNCA0NC4zczM0LjYgNS40IDQ0LjMtOS40bDQyLjEtNjQuOWMxMi40LTE5LjIgMTkuMS00MS42IDE5LjEtNjQuNSAwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDM2LjEgMjMuOSA2Ni43IDU2LjggNzYuNmwtMTEuNyAxOHpNMzc2IDExMmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem00Mi43IDE4MmMtOC4zLTYtMTkuMS03LjctMjguOC00LjRsLTQ4IDE2Yy0xNi44IDUuNi0yNS44IDIzLjctMjAuMiA0MC41czIzLjcgMjUuOCA0MC41IDIwLjJsNS45LTIgMCA1MS42LTE2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYgMCAwLTk2YzAtMTAuMy00LjktMTkuOS0xMy4zLTI2eiJdfSx1QXQ9ZDBlLHBBdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb3VudGFpbi1jaXR5IixpY29uOls2NDAsNTEyLFtdLCJlNTJlIiwiTTI1Ni4zIDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OCA0OCAwIDAtNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDcyIDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzMjBjMCAyNi41LTIxLjUgNDgtNDggNDhsLTc3LjggMGM0LTE1LjQgMi40LTMyLjYtNi43LTQ4LjJMMzU0LjYgMjU2IDM2OC4zIDI1NmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTYuMSAwLTExLjQgMy40LTE0LjEgOC41bC00Mi42LTczYy02LTEwLjItMTQuMS0xOC0yMy4zLTIzLjNsMC01Ni4yem02NCA2NGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNjAgOTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptLTI3Mi02NC43bC02NS4xIDExMS42IDMzLjEgMzMuMSA0OC00OCA0MC40IDAtNTYuNC05Ni43em0tMjcuNi00Ny45YzEyLjMtMjEuMiA0Mi45LTIxLjIgNTUuMyAwTDQyMC4zIDQ2My45YzEyLjQgMjEuMy0yLjkgNDguMS0yNy42IDQ4LjFMNTYgNTEyYy0yNC43IDAtNDAuMS0yNi44LTI3LjYtNDguMUwxOTYuNyAxNzUuNHoiXX0scFU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctZG93bi05LTEiLGljb246WzUxMiw1MTIsWyJzb3J0LW51bWVyaWMtZGVzYyIsInNvcnQtbnVtZXJpYy1kb3duLWFsdCJdLCJmODg2IiwiTTIzMC42IDM5MC42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptMTM0LjUtMTg0bDExLjctMThjLTMyLjktOS45LTU2LjgtNDAuNS01Ni44LTc2LjYgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDIyLjktNi42IDQ1LjMtMTkuMSA2NC41bC00Mi4xIDY0LjljLTkuNiAxNC44LTI5LjQgMTkuMS00NC4zIDkuNHMtMTkuMS0yOS40LTkuNC00NC4zek00MjQgMTEyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bS01LjMgMTgyYzguMyA2IDEzLjMgMTUuNyAxMy4zIDI2bDAgOTYgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtNTEuNi01LjkgMmMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNWw0OC0xNmM5LjgtMy4zIDIwLjUtMS42IDI4LjggNC40eiJdfSxoQXQ9cFUsbUF0PXBVLGYwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWdyaW4td2lkZSIsaWNvbjpbNTEyLDUxMixbMTI4NTE1LCJncmluLWFsdCJdLCJmNTgxIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMjA4IDE5MmMwIDM1LjMtMTQuMyA2NC0zMiA2NHMtMzItMjguNy0zMi02NCAxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjR6bTEyOCA2NGMtMTcuNyAwLTMyLTI4LjctMzItNjRzMTQuMy02NCAzMi02NCAzMiAyOC43IDMyIDY0LTE0LjMgNjQtMzIgNjR6Il19LGdBdD1mMGUseEF0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBvb3AiLGljb246WzUxMiw1MTIsW10sImY2MTkiLCJNMjU0LjQgNi42YzMuNS00LjMgOS02LjUgMTQuNS01LjcgNDYuOSA2LjMgODMuMSA0Ni41IDgzLjEgOTUuMSAwIDExLjItMS45IDIyLTUuNSAzMmw1LjUgMGMzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDE5LjEtOC40IDM2LjMtMjEuNyA0OGwxMy43IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzIgMCAyMy4yLTExIDQzLjgtMjggNTcgMzQuMSA1LjcgNjAgMzUuMyA2MCA3MSAwIDM5LjgtMzIuMiA3Mi03MiA3Mkw3MiA1MTJjLTM5LjggMC03Mi0zMi4yLTcyLTcyIDAtMzUuNyAyNS45LTY1LjMgNjAtNzEtMTctMTMuMi0yOC0zMy44LTI4LTU3IDAtMzkuOCAzMi4yLTcyIDcyLTcybDEzLjcgMGMtMTMuMy0xMS43LTIxLjctMjguOS0yMS43LTQ4IDAtMzUuMyAyOC43LTY0IDY0LTY0bDE2LjIgMGM0NC4xLS4xIDc5LjgtMzUuOSA3OS44LTgwIDAtOS4yLTEuNS0xNy45LTQuMy0yNi4xLTEuOC01LjItLjgtMTEuMSAyLjgtMTUuNHoiXX0sYkF0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRoYXJtYWNoYWtyYSIsaWNvbjpbNTEyLDUxMixbOTc4NF0sImY2NTUiLCJNMzM3LjggMjA1LjdsNDguNi00Mi41YzEzLjggMTkuMyAyMy40IDQxLjkgMjcuNCA2Ni4ybC02NC40IDQuM2MtMi40LTEwLjEtNi40LTE5LjUtMTEuNi0yOHptMTQwLjEgMTkuNWMtNS4zLTM4LjgtMjAuNi03NC41LTQzLjItMTA0LjNsLjgtLjdDNDQ5IDEwOC40IDQ0OS43IDg3LjYgNDM3IDc1cy0zMy40LTEyLTQ1LjIgMS41bC0uNyAuOGMtMjkuOC0yMi42LTY1LjUtMzcuOS0xMDQuMy00My4ybC4xLTEuMWMxLjItMTcuOS0xMy0zMy0zMC45LTMzcy0zMi4xIDE1LjItMzAuOSAzM2wuMSAxLjFjLTM4LjggNS4zLTc0LjUgMjAuNi0xMDQuMyA0My4ybC0uNy0uOEMxMDguNCA2MyA4Ny42IDYyLjMgNzUgNzVzLTEyIDMzLjQgMS41IDQ1LjJsLjggLjdjLTIyLjYgMjkuOC0zNy45IDY1LjUtNDMuMiAxMDQuM2wtMS4xLS4xYy0xNy45LTEuMi0zMyAxMy0zMyAzMC45czE1LjIgMzIuMSAzMyAzMC45bDEuMS0uMWM1LjMgMzguOCAyMC42IDc0LjUgNDMuMiAxMDQuM2wtLjggLjdDNjMgNDAzLjYgNjIuMyA0MjQuNCA3NSA0MzdzMzMuNCAxMiA0NS4yLTEuNWwuNy0uOGMyOS44IDIyLjYgNjUuNSAzNy45IDEwNC4zIDQzLjJsLS4xIDEuMWMtMS4yIDE3LjkgMTMgMzMgMzAuOSAzM3MzMi4xLTE1LjIgMzAuOS0zM2wtLjEtMS4xYzM4LjgtNS4zIDc0LjUtMjAuNiAxMDQuMy00My4ybC43IC44YzExLjggMTMuNSAzMi41IDE0LjIgNDUuMiAxLjVzMTItMzMuNC0xLjUtNDUuMmwtLjgtLjdjMjIuNi0yOS44IDM3LjktNjUuNSA0My4yLTEwNC4zbDEuMSAuMWMxNy45IDEuMiAzMy0xMyAzMy0zMC45cy0xNS4yLTMyLjEtMzMtMzAuOWwtMS4xIC4xek0xNjMuMiAxMjUuNmMxOS4zLTEzLjggNDEuOS0yMy40IDY2LjItMjcuNWw0LjMgNjQuNGMtMTAgMi40LTE5LjUgNi40LTI4IDExLjZsLTQyLjUtNDguNnptLTY1IDEwMy44YzQuMS0yNC40IDEzLjctNDYuOSAyNy41LTY2LjJsNDguNiA0Mi41Yy01LjMgOC41LTkuMiAxOC0xMS42IDI4bC02NC40LTQuM3ptMjcuNSAxMTkuNGMtMTMuOC0xOS4zLTIzLjQtNDEuOS0yNy41LTY2LjJsNjQuNC00LjNjMi40IDEwLjEgNi40IDE5LjUgMTEuNiAyOGwtNDguNiA0Mi41em0xMDMuOCA2NWMtMjQuNC00LjEtNDYuOS0xMy43LTY2LjItMjcuNGw0Mi41LTQ4LjZjOC41IDUuMyAxOCA5LjIgMjggMTEuNmwtNC4zIDY0LjR6bTExOS40LTI3LjRjLTE5LjMgMTMuOC00MS45IDIzLjQtNjYuMiAyNy40bC00LjMtNjQuNGMxMC0yLjQgMTkuNS02LjQgMjgtMTEuNmw0Mi41IDQ4LjZ6bTY1LTEwMy44Yy00LjEgMjQuNC0xMy43IDQ2LjktMjcuNCA2Ni4ybC00OC42LTQyLjVjNS4zLTguNiA5LjItMTggMTEuNi0yOGw2NC40IDQuM3ptLTY1LTE1Ni45bC00Mi41IDQ4LjZjLTguNi01LjMtMTgtOS4yLTI4LTExLjZsNC4zLTY0LjRjMjQuNCA0LjEgNDYuOSAxMy43IDY2LjIgMjcuNXpNMjU2IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LHUwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYXR0ZXJ5LXF1YXJ0ZXIiLGljb246WzY0MCw1MTIsWyJiYXR0ZXJ5LTIiXSwiZjI0MyIsIk01MjggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTQxNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQxNiAwek0xMTIgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjI0YzAgNDQuMiAzNS44IDgwIDgwIDgwbDQxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwTDExMiA2NHptNTYgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC02NCAweiJdfSx2QXQ9dTBlLHlBdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbmtoIixpY29uOlszMjAsNTEyLFs5NzY1XSwiZjY0NCIsIk05NiAxMjhjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NGMwIDQxLjYtMjAuNyA3Ni42LTQ2LjYgMTA0LjEtNS45IDYuMi0xMS44IDExLjgtMTcuNCAxNi43LTUuNi00LjktMTEuNS0xMC41LTE3LjQtMTYuNy0yNS45LTI3LjUtNDYuNi02Mi42LTQ2LjYtMTA0LjF6TTE2MCAwQzg5LjMgMCAzMiA1Ny4zIDMyIDEyOCAzMiAxODAuNCA1My41IDIyMy41IDc4LjggMjU2TDMyIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDYuOCAwQzI2Ni41IDIyMy41IDI4OCAxODAuNCAyODggMTI4IDI4OCA1Ny4zIDIzMC43IDAgMTYwIDB6Il19LHdBdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaWFtb25kIixpY29uOls1MTIsNTEyLFs5ODMwXSwiZjIxOSIsIk0xNyAyMTVMMjE1IDE3QzIyNS45IDYuMSAyNDAuNiAwIDI1NiAwczMwLjEgNi4xIDQxIDE3TDQ5NSAyMTVjMTAuOSAxMC45IDE3IDI1LjYgMTcgNDFzLTYuMSAzMC4xLTE3IDQxTDI5NyA0OTVjLTEwLjkgMTAuOS0yNS42IDE3LTQxIDE3cy0zMC4xLTYuMS00MS0xN0wxNyAyOTdDNi4xIDI4Ni4xIDAgMjcxLjQgMCAyNTZzNi4xLTMwLjEgMTctNDF6Il19LE1BdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdWJzY3JpcHQiLGljb246WzU3Niw1MTIsW10sImYxMmMiLCJNOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2czE0LjMgMzIgMzIgMzJsMTUuMyAwIDg5LjYgMTI4LTg5LjYgMTI4LTE1LjMgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwYzEwLjQgMCAyMC4yLTUuMSAyNi4yLTEzLjZMMjQwIDMxMS44IDMyNS44IDQzNC40YzYgOC42IDE1LjggMTMuNiAyNi4yIDEzLjZsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUuMyAwLTg5LjYtMTI4IDg5LjYtMTI4IDE1LjMgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTAuNCAwLTIwLjIgNS4xLTI2LjIgMTMuNkwyNDAgMjAwLjIgMTU0LjIgNzcuNkMxNDguMiA2OS4xIDEzOC40IDY0IDEyOCA2NEw5NiA2NHpNNTQ0IDMyMGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNGwtMzIgMTZjLTE1LjggNy45LTIyLjIgMjcuMS0xNC4zIDQyLjkgNS42IDExLjIgMTYuOSAxNy43IDI4LjYgMTcuN2wwIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMjh6Il19LHAwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJydXBlZS1zaWduIixpY29uOls0NDgsNTEyLFs4MzYwLCJydXBlZSJdLCJmMTU2IiwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsODAgMGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NCAwIDU0LjMtMzAgMTAxLjUtNzQuNCAxMjYuMWw0MSAxMzYuN2M1LjEgMTYuOS00LjUgMzQuOC0yMS41IDM5LjhzLTM0LjgtNC41LTM5LjgtMjEuNUwxMjAuMSAzMTkuOGMtMi43IC4xLTUuNCAuMi04LjEgLjJsLTQ4IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0ek02NCAyNTZsNDggMGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MGwtNDggMCAwIDE2MHptMjg1LjEtMzJsMzQuOSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zNC45IDBjLTcuMiAwLTEzLjEgNS45LTEzLjEgMTMuMSAwIDUuNyAzLjcgMTAuNyA5LjEgMTIuNWw0OS40IDE1LjljMzEuOSAxMC4zIDUzLjUgMzkuOSA1My41IDczLjQgMCA0Mi42LTM0LjUgNzcuMS03Ny4xIDc3LjFMMzIwIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw1MC45IDBjNy4yIDAgMTMuMS01LjkgMTMuMS0xMy4xIDAtNS43LTMuNy0xMC43LTkuMS0xMi41bC00OS40LTE1LjljLTMxLjktMTAuMy01My41LTM5LjktNTMuNS03My40IDAtNDIuNiAzNC41LTc3LjEgNzcuMS03Ny4xeiJdfSx6QXQ9cDBlLGtBdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tcmlmbGUiLGljb246WzUxMiw1MTIsW10sImU1NGUiLCJNNDE2IDBMMzg0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMCAxMDAuM2MtOS42IDUuNS0xNiAxNS45LTE2IDI3LjdsMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxNDRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMCAwIDk2YzAgOC44IDcuMiAxNiAxNiAxNmw1OS41IDBjMTAuNCAwIDE4LTkuOCAxNS41LTE5LjlsLTIzLTkyLjEgNDQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTQ4IDAgMC0yNi43IDUzLjEtMTcuN2M2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMmwwLTg0LjVjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA1Ni0xNiA1LjMgMC0xMDkuM2MwLTExLjgtNi40LTIyLjItMTYtMjcuN0w0MzIgMTZjMC04LjgtNy4yLTE2LTE2LTE2ek0yMjQgMjA4QzExOCAyMDggMzIgMjk0IDMyIDQwMGwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC00OGMwLTMyLjUgMTIuMS02Mi4xIDMyLTg0LjdsMCAxOTYuNyAxNjAgMCAwLTI5My4xYy0yMC03LjEtNDEuNi0xMC45LTY0LTEwLjl6TTI4MCA4OGE3MiA3MiAwIDEgMCAtMTQ0IDAgNzIgNzIgMCAxIDAgMTQ0IDB6Il19LFNBdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkIixpY29uOlszODQsNTEyLFsxMDBdLCI0NCIsIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDEyOCAwYzEyMy43IDAgMjI0IDEwMC4zIDIyNCAyMjRTMjgzLjcgNDgwIDE2MCA0ODBMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDY0ek02NCA5NmwwIDMyMCA5NiAwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwUzI0OC40IDk2IDE2MCA5Nkw2NCA5NnoiXX0sQ0F0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1uZmkiLGljb246WzQ0OCw1MTIsW10sImU1NzYiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNOTMgMTcyLjNsMzUgNjMgMC01MS40YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNDRjMCAxMC45LTcuNCAyMC41LTE4IDIzLjJzLTIxLjctMi0yNy0xMS42bC0zNS02MyAwIDUxLjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNDRjMC0xMC45IDcuNC0yMC41IDE4LTIzLjJzMjEuNyAyIDI3IDExLjZ6TTIwOCAxODRjMC0xMy4zIDEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMCAwIDMyIDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDAgMCA0MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE0NHptMTkyIDBsMCAxNDRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXX0sTEF0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlZXRoIixpY29uOls1MTIsNTEyLFtdLCJmNjJlIiwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0xNDQgMjA4bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4em0xMjggMGwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHpNODAgMTc2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnptMzIwIDMybDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyek00OCAzMzZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZ6bTE0NCA0OGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCAyNi41IDIxLjUgNDggNDggNDh6bTEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OHptMTEyLTE2YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnoiXX0saDBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hZ25pZnlpbmctZ2xhc3MtZG9sbGFyIixpY29uOls1MTIsNTEyLFsic2VhcmNoLWRvbGxhciJdLCJmNjg4IiwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjEyIDk2Yy0xMSAwLTIwIDktMjAgMjBsMCA0Yy0yOC44IC4zLTUyIDIzLjctNTIgNTIuNSAwIDI1LjcgMTguNSA0Ny42IDQzLjkgNTEuOGw0MS43IDdjNiAxIDEwLjQgNi4yIDEwLjQgMTIuMyAwIDYuOS01LjYgMTIuNS0xMi41IDEyLjVMMTY4IDI1NmMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsMjQgMCAwIDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC00LjdjMjUtNC4xIDQ0LTI1LjcgNDQtNTEuOCAwLTI1LjctMTguNS00Ny42LTQzLjktNTEuOGwtNDEuNy03Yy02LTEtMTAuNC02LjItMTAuNC0xMi4zIDAtNi45IDUuNi0xMi41IDEyLjUtMTIuNWw0Ny41IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC04IDAgMC00YzAtMTEtOS0yMC0yMC0yMHoiXX0sVEF0PWgwZSxfQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZHVtcHN0ZXItZmlyZSIsaWNvbjpbNjQwLDUxMixbXSwiZjc5NCIsIk0xNjQuMyA2NEwxMzguNyAxOTIgNTYgMTkyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQuMWMwLTIuNiAuNC01LjEgMS4yLTcuNkw1OC41IDgwLjRDNjEuOCA3MC42IDcxIDY0IDgxLjMgNjRsODMgMHptMjMuNCAxMjhsMjUuNi0xMjggODIuNyAwIDAgMTI4LTEwOC4zIDB6TTM0NCA2NGw4Mi43IDAgMTYgODBjLTE0LjcgLjItMjkuMyA1LjUtNDAuOSAxNS45LTExLjUgMTAuMy0yMi41IDIxLTMyLjggMzIuMWwtMjQuOSAwIDAtMTI4ek05NiAyNDBsMjMzLjIgMGMtNi40IDguOC0xMi4zIDE3LjYtMTcuNyAyNi4zLTIxLjQgMzQuNy0zOS41IDc2LjEtMzkuNSAxMTUuOCAwIDE3LjEgMi4xIDMzLjggNiA0OS45bC0xMjAuNCAwIDEuOSAxMC4zYzMuMiAxNy40LTguNCAzNC0yNS44IDM3LjJzLTM0LTguNC0zNy4yLTI1LjhDNzEgMzEzLjMgNTggMjQyLjEgNTcuNyAyNDBMOTYgMjQwem01MTItNzJjMCAxMS03LjQgMjAuMy0xNy41IDIzLjEtLjktLjgtMS43LTEuNi0yLjYtMi40LTIxLjgtMjAtNTQuMy0yMS44LTc4LTUuNS00LjItNC4zLTguNS04LjUtMTIuOS0xMi42bC0yMS4zLTEwNi42IDgzIDBjMTAuMyAwIDE5LjUgNi42IDIyLjggMTYuNGwyNS4zIDc1LjljLjggMi40IDEuMiA1IDEuMiA3LjZsMCA0LjF6TTUwNS43IDI0MC4zTDUxOCAyMjYuNWM1LjQtNi4xIDEzLjMtOC44IDIwLjktOC45IDcuMiAwIDE0LjMgMi42IDE5LjkgNy44IDE5LjcgMTguMyAzOS44IDQzLjIgNTUgNzAuNiAxNS4xIDI3LjIgMjYuMiA1OC4xIDI2LjIgODguMSAwIDg4LjctNzEuMyAxNTkuOC0xNjAgMTU5LjgtODkuNiAwLTE2MC03MS4zLTE2MC0xNTkuOCAwLTM3LjMgMTYtNzMuNCAzNi44LTEwNC41IDIwLjktMzEuMyA0Ny41LTU5IDcwLjktODAuMiA1LjctNS4yIDEzLjEtNy43IDIwLjMtNy41czEzLjQgMy4yIDE4LjggNy41YzE0LjQgMTEuNCAzOC45IDQwLjcgMzguOSA0MC43ek01NDQgNDMyLjJjMC0zNi41LTM3LTczLTU0LjgtODguNC01LjQtNC43LTEzLjEtNC43LTE4LjUgMC0xNy43IDE1LjQtNTQuOCA1MS45LTU0LjggODguNCAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdfSxBQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXBsb2FkIixpY29uOls0NDgsNTEyLFtdLCJmMDkzIiwiTTI1NiAxMDkuM0wyNTYgMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjEwLjctNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyNTYgMTA5LjN6TTIyNCA0MDBjNDQuMiAwIDgwLTM1LjggODAtODBsODAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMmMwLTM1LjMgMjguNy02NCA2NC02NGw4MCAwYzAgNDQuMiAzNS44IDgwIDgwIDgwem0xNDQgMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxoVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLXNsYXNoIixpY29uOls1NzYsNTEyLFs2MjcxNCwidXNlci1hbHQtc2xhc2giLCJ1c2VyLWxhcmdlLXNsYXNoIl0sImY1MDYiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwzMTEuNSAyNDUuN2M1NS0xMC45IDk2LjUtNTkuNSA5Ni41LTExNy43IDAtNjYuMy01My43LTEyMC0xMjAtMTIwLTU4LjIgMC0xMDYuOCA0MS41LTExNy43IDk2LjVMNDEtMjQuOXpNMjM1LjYgMzA1LjRDMTQ3LjkgMzE2LjYgODAgMzkxLjUgODAgNDgyLjMgODAgNDk4LjcgOTMuMyA1MTIgMTA5LjcgNTEybDMzMi41IDAtMjA2LjYtMjA2LjZ6Il19LCRBdD1oVSxEQXQ9aFUsRUF0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LWxlZnQiLGljb246WzUxMiw1MTIsWzg1OTJdLCJmMDYwIiwiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDI4OCA0ODAgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zNzAuNyAwIDEwNS40LTEwNS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYweiJdfSxOQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidmlhbC12aXJ1cyIsaWNvbjpbNTc2LDUxMixbXSwiZTU5NyIsIk02NCAzMkM2NCAxNC4zIDc4LjMgMCA5NiAwTDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTUxLjdjLTE4LjUgMC0zNyA3LTUxLjEgMjEuMS0yMS42IDIxLjYtMjYuNiA1My42LTE1IDc5LjktMjYuOSAxMC40LTQ1LjkgMzYuNi00NS45IDY3LjFzMTkgNTYuNyA0NS45IDY3LjFjLTcuMyAxNi41LTggMzUuMi0yLjMgNTIuMi0xMy40IDUuNy0yOC4yIDguOC00My42IDguOC02MS45IDAtMTEyLTUwLjEtMTEyLTExMkw5NiA2NEM3OC4zIDY0IDY0IDQ5LjcgNjQgMzJ6bTk2IDMybDAgMTI4IDk2IDAgMC0xMjgtOTYgMHpNMjgwIDQwOGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyOC44IDAgNDMuMi0zNC44IDIyLjktNTUuMi05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMjAuNCAyMC40IDU1LjIgNS45IDU1LjItMjIuOSAwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0YzAgMjguOCAzNC44IDQzLjIgNTUuMiAyMi45IDkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMjAuNCAyMC40LTUuOSA1NS4yIDIyLjkgNTUuMiAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjguOCAwLTQzLjIgMzQuOC0yMi45IDU1LjIgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMjAuNC0yMC40LTU1LjItNS45LTU1LjIgMjIuOSAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTI4LjgtMzQuOC00My4yLTU1LjItMjIuOS05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzIwLjQtMjAuNCA1LjktNTUuMi0yMi45LTU1LjJ6bTEwNC0zMmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTg4IDQwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il19LFBBdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVjay1kb3VibGUiLGljb246WzM4NCw1MTIsW10sImY1NjAiLCJNMjQ5LjkgNjYuOGMxMC40LTE0LjMgNy4yLTM0LjMtNy4xLTQ0LjdzLTM0LjMtNy4yLTQ0LjcgNy4xbC0xMDYgMTQ1LjctMzcuNS0zNy41Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGM2LjYgNi42IDE1LjggMTAgMjUuMSA5LjNzMTcuOS01LjUgMjMuNC0xMy4xbDEyOC0xNzZ6bTEyOCAxMzZjMTAuNC0xNC4zIDcuMi0zNC4zLTcuMS00NC43cy0zNC4zLTcuMi00NC43IDcuMWwtMTcwIDIzMy43LTY5LjUtNjkuNWMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjNi42IDYuNiAxNS44IDEwIDI1LjEgOS4zczE3LjktNS41IDIzLjQtMTMuMWwxOTItMjY0eiJdfSxJQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGF3IixpY29uOls1MTIsNTEyLFtdLCJmMWIwIiwiTTIzNC41IDkyLjljMTQuMyA0Mi45LS4zIDg2LjItMzIuNiA5Ni44cy03MC4xLTE1LjYtODQuNC01OC41IC4zLTg2LjIgMzIuNi05Ni44IDcwLjEgMTUuNiA4NC40IDU4LjV6TTEwMC40IDE5OC42YzE4LjkgMzIuNCAxNC4zIDcwLjEtMTAuMiA4NC4xcy01OS43LS45LTc4LjUtMzMuMy0xNC4zLTcwLjEgMTAuMi04NC4xIDU5LjcgLjkgNzguNSAzMy4zek02OS4yIDQwMS4yQzEyMS42IDI1OS45IDIxNC43IDIyNCAyNTYgMjI0czEzNC40IDM1LjkgMTg2LjggMTc3LjJjMy42IDkuNyA1LjIgMjAuMSA1LjIgMzAuNWwwIDEuNmMwIDI1LjgtMjAuOSA0Ni43LTQ2LjcgNDYuNy0xMS41IDAtMjIuOS0xLjQtMzQtNC4ybC04OC0yMmMtMTUuMy0zLjgtMzEuMy0zLjgtNDYuNiAwbC04OCAyMmMtMTEuMSAyLjgtMjIuNSA0LjItMzQgNC4yLTI1LjggMC00Ni43LTIwLjktNDYuNy00Ni43bDAtMS42YzAtMTAuNCAxLjYtMjAuOCA1LjItMzAuNXpNNDIxLjggMjgyLjdjLTI0LjUtMTQtMjkuMS01MS43LTEwLjItODQuMXM1NC00Ny4zIDc4LjUtMzMuMyAyOS4xIDUxLjcgMTAuMiA4NC4xLTU0IDQ3LjMtNzguNSAzMy4zek0zMTAuMSAxODkuN2MtMzIuMy0xMC42LTQ2LjktNTMuOS0zMi42LTk2LjhzNTIuMS02OS4xIDg0LjQtNTguNSA0Ni45IDUzLjkgMzIuNiA5Ni44LTUyLjEgNjkuMS04NC40IDU4LjV6Il19LG1VPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlbG1ldC1zYWZldHkiLGljb246WzU3Niw1MTIsWyJoYXJkLWhhdCIsImhhdC1oYXJkIl0sImY4MDciLCJNMzUyIDI2NGwwLTIwMGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xODUuOUM5MCAxMDkuOCAzMiAxOTEuOCAzMiAyODhsMCA2NCA1MTIgMCAwLTY0Yy0xLTk1LjItNTguNC0xNzcuNy0xNDQtMjA5LjhMNDAwIDI2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpNNDAgNDAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDQ5NiAwYzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwTDQwIDQwMHoiXX0sRkF0PW1VLE9BdD1tVSxCQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZSIsaWNvbjpbMzIwLDUxMixbMTAxXSwiNDUiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjI0IDAgMC0xMjggMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMTI4IDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdfSxtMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1sYXVnaC1zcXVpbnQiLGljb246WzUxMiw1MTIsWyJsYXVnaC1zcXVpbnQiXSwiZjU5YiIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTA3LjcgMzMyLjFDMTAyIDMxOCAxMTMuNCAzMDQgMTI4LjYgMzA0bDI1NC45IDBjMTUuMiAwIDI2LjYgMTQgMjAuOSAyOC4xLTIzLjggNTguNi04MS4yIDk5LjktMTQ4LjMgOTkuOXMtMTI0LjYtNDEuMy0xNDguMy05OS45em0xNS0xODguOGM0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDE5MiAxMjUuOCAxNjQuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMTkyIDM4Ni4yIDIxOS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdfSxSQXQ9bTBlLGcwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkb3duLWxlZnQtYW5kLXVwLXJpZ2h0LXRvLWNlbnRlciIsaWNvbjpbNTEyLDUxMixbImNvbXByZXNzLWFsdCJdLCJmNDIyIiwiTTQzOS41IDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDM5IDM5YzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJTNDUwLjIgMjQwIDQ0MC41IDI0MGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTQ0YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmwzOSAzOSA4Ny04N3pNNzIuNSAyNzJsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxNDRjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzktMzktODcgODdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC0zMi0zMmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODctODctMzktMzljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJTNjIuOCAyNzIgNzIuNSAyNzJ6Il19LEhBdD1nMGUscUF0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdpZnRzIixpY29uOls1NzYsNTEyLFtdLCJmNzljIiwiTTIwMi0zMC42YzEyLjUgNC40IDE5IDE4LjEgMTQuNiAzMC42bC04LjIgMjMuMSAyNS40LTE4LjVjMTAuNy03LjggMjUuNy01LjQgMzMuNSA1LjNzNS40IDI1LjctNS4zIDMzLjVMMjMzLjggNjQgMjcyIDY0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMi4xYy01NC43IDEwLjQtOTYgNTguNC05NiAxMTZsMCAxLjljMCA4LjkgMSAxNy41IDIuOCAyNS45LTExLjkgMTcuOC0xOC44IDM5LjEtMTguOCA2Mi4xbDAgMTI4YzAgMjMuOCA3LjQgNDUuOSAyMC4xIDY0TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRsMzguMiAwLTI4LjMtMjAuNkM0Ny4yIDM1LjYgNDQuOCAyMC42IDUyLjYgOS45Uzc1LjQtMy4yIDg2LjEgNC42bDI3LjQgMjAtOC4zLTI1QzEwMS0xMyAxMDcuOC0yNi42IDEyMC40LTMwLjhzMjYuMiAyLjYgMzAuNCAxNS4ybDkuOSAyOS44IDEwLjctMzAuMmM0LjQtMTIuNSAxOC4xLTE5IDMwLjYtMTQuNnpNNDg5LjkgMjA4Yy03LjUgMC0xNC41IDMuOC0xOC42IDEwLjFMNDQ2LjkgMjU2IDQ4OCAyNTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xLjljMC0xMi4yLTkuOS0yMi4xLTIyLjEtMjIuMXpNMzg1LjEgMjU2bC0yNC40LTM3LjljLTQuMS02LjMtMTEuMS0xMC4xLTE4LjYtMTAuMS0xMi4yIDAtMjIuMSA5LjktMjIuMSAyMi4xbDAgMS45YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQxLjEgMHpNMjgxLjkgMjY4LjVjLTYuMy0xMC43LTkuOS0yMy4yLTkuOS0zNi41bDAtMS45YzAtMzguNyAzMS40LTcwLjEgNzAuMS03MC4xIDIzLjggMCA0NiAxMi4xIDU4LjkgMzIuMWwxNSAyMy4yIDE1LTIzLjJjMTIuOS0yMCAzNS4xLTMyLjEgNTguOS0zMi4xIDM4LjcgMCA3MC4xIDMxLjQgNzAuMSA3MC4xbDAgMS45YzAgMTMuMy0zLjYgMjUuOC05LjkgMzYuNSAxNS43IDExLjcgMjUuOSAzMC40IDI1LjkgNTEuNWwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNzIgMCAwLTIwOC00OCAwIDAgMjA4LTcyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTI4YzAtMjEuMSAxMC4yLTM5LjggMjUuOS01MS41eiJdfSxWQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmVkIixpY29uOls1NzYsNTEyLFsxMjg3MTZdLCJmMjM2IiwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0IDIyNCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NC00NDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptODAgMTYwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXX0sVUF0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vbmV5LWJpbGwtdHJhbnNmZXIiLGljb246WzY0MCw1MTIsW10sImU1MjgiLCJNMzEgMTA1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOUwxMDMtMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTMxIDMxIDY3LjcgMCAwIDAgMzM4LjMgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE3OC4yLTUuMS01LjFjLTI4LjEtMjguMS03My43LTI4LjEtMTAxLjggMC0yNy4yIDI3LjItMjguMSA3MC42LTIuOCA5OC45bDY3LjcgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS00MDYuMSAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3OC4yIDUuMSA1LjFjMjguMSAyOC4xIDczLjcgMjguMSAxMDEuOCAwIDI3LjItMjcuMiAyOC4xLTcwLjYgMi44LTk4LjlsLTY3LjcgMCAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDMxIDEwNXpNNDE2IDI1NmE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6bTg4LTY0LjVjNC40IC41IDgtMy4xIDgtNy41bDAtNDhjMC00LjQtMy42LTgtOC04bC00OCAwYy00LjQgMC04LjEgMy42LTcuNSA4IDMuNiAyOSAyNi42IDUxLjkgNTUuNSA1NS41em0tMzY4IDEyOWMtNC40LS41LTggMy4xLTggNy41bDAgNDhjMCA0LjQgMy42IDggOCA4bDQ4IDBjNC40IDAgOC4xLTMuNiA3LjUtOC0zLjYtMjktMjYuNi01MS45LTU1LjUtNTUuNXoiXX0seDBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1ydW5uaW5nIixpY29uOls0NDgsNTEyLFsxMjc5MzksInJ1bm5pbmciXSwiZjcwYyIsIk0yNTYuNS0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMTIzLjYgMTc2Yy0zLjMgMC02LjIgMi03LjQgNUw5NC4yIDIzNS45Yy02LjYgMTYuNC0yNS4yIDI0LjQtNDEuNiAxNy44cy0yNC40LTI1LjItMTcuOC00MS42bDIxLjktNTQuOUM2Ny43IDEyOS45IDk0LjEgMTEyIDEyMy42IDExMmw5Ny4zIDBjMjguNSAwIDU0LjggMTUuMSA2OS4xIDM5LjdsMzIuOCA1Ni4zIDYxLjYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjEuNiAwYy0yMi44IDAtNDMuOC0xMi4xLTU1LjMtMzEuOGwtMTAtMTcuMS0yMC43IDcwLjQgNzUuNCAyMi42YzI3LjcgOC4zIDQxLjggMzkgMzAuMSA2NS41TDI4NS43IDUwOWMtNy4yIDE2LjItMjYuMSAyMy40LTQyLjIgMTYuMnMtMjMuNC0yNi4xLTE2LjItNDIuMmw0OS4yLTExMC44LTk1LjktMjguOGMtMzIuNy05LjgtNTItNDMuNy00My43LTc2LjhsMjIuNy05MC42LTM1LjkgMHptLTggMTgxYzEzLjMgMTQuOSAzMC43IDI2LjMgNTEuMiAzMi40bDQuNyAxLjQtNi45IDE5LjNjLTUuOCAxNi4zLTE2IDMwLjgtMjkuMyA0MS44TDUyLjkgNTE5LjhjLTEzLjYgMTEuMi0zMy44IDkuMy00NS00LjNzLTkuMy0zMy44IDQuMy00NWw4Mi40LTY3LjljNC41LTMuNyA3LjgtOC41IDkuOC0xMy45TDExNS42IDM1N3oiXX0sakF0PXgwZSxiMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWNoZXZyb24tZG93biIsaWNvbjpbNTEyLDUxMixbImNoZXZyb24tY2lyY2xlLWRvd24iXSwiZjEzYSIsIk0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTEzNSAyNDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw4NyA4NyA4Ny04N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMMjczIDM0NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMTM1IDI0MXoiXX0sV0F0PWIwZSxHQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1udXJzZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjgyZiIsIk05NiA0NC45YzAtMTIuNyA3LjUtMjQuMiAxOS4yLTI5LjNsOTYtNDJjOC4yLTMuNiAxNy41LTMuNiAyNS43IDBsOTYgNDJDMzQ0LjUgMjAuNyAzNTIgMzIuMiAzNTIgNDQuOWwwIDk5LjFjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhTOTYgMjE0LjcgOTYgMTQ0bDAtOTkuMXpNMzA0IDEyOGwtMTExLjYgMC0uNCAwLTQ4IDAgMCAxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwbDAtMTZ6TTIwOCAxNmwwIDE2LTE2IDBjLTQuNCAwLTggMy42LTggOGwwIDE2YzAgNC40IDMuNiA4IDggOGwxNiAwIDAgMTZjMCA0LjQgMy42IDggOCA4bDE2IDBjNC40IDAgOC0zLjYgOC04bDAtMTYgMTYgMGM0LjQgMCA4LTMuNiA4LThsMC0xNmMwLTQuNC0zLjYtOC04LThsLTE2IDAgMC0xNmMwLTQuNC0zLjYtOC04LThMMjE2IDhjLTQuNCAwLTggMy42LTggOHpNMTQyLjYgMzIzYy02LjUtNC45LTE1LjItNi4yLTIyLjYtMi44LTYxLjQgMjguMi0xMDQuMSA5MC4yLTEwNC4xIDE2Mi4xIDAgMTYuNCAxMy4zIDI5LjcgMjkuNyAyOS43bDM1Ni42IDBjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjcgMC03Mi00Mi43LTEzNC0xMDQuMS0xNjIuMS03LjQtMy40LTE2LjEtMi4xLTIyLjYgMi44bC02NyA1MC4yYy04LjUgNi40LTIwLjMgNi40LTI4LjggMGwtNjctNTAuMnoiXX0sdjBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2Uta2lzcy13aW5rLWhlYXJ0IixpY29uOls2NDAsNTEyLFsxMjg1MzYsImtpc3Mtd2luay1oZWFydCJdLCJmNTk4IiwiTTU0My43IDI2OC4zYy4yLTQuMSAuMy04LjIgLjMtMTIuMyAwLTE0MS40LTExNC42LTI1Ni0yNTYtMjU2UzMyIDExNC42IDMyIDI1NiAxNDYuNiA1MTIgMjg4IDUxMmM0MS40IDAgODAuNS05LjggMTE1LjEtMjcuMy03LjYtMTcuMS0xNi4xLTM4LjgtMjEuOC02MS43LTcuNy0zMC41LTE0LjEtNzYuMiA4LjItMTE0LjdsMi43LTQuNmMyOS41LTUxIDk0LjctNjguNSAxNDUuNy0zOSAyIDEuMiA0IDIuNCA1LjkgMy43ek0yNDAgMzA0YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTIuMy00LjYgMjMuNS0xMi4yIDMyIDcuNiA4LjUgMTIuMiAxOS43IDEyLjIgMzIgMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZ6TTIwOCAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xNTIgMjBjLTExIDAtMjAgOS0yMCAyMHMtOSAyMC0yMCAyMC0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDB6TTU0Mi44IDM1MGMtMi4yLTE4LjMtMTIuOS0zNC42LTI4LjktNDMuOC0yOC4xLTE2LjItNjMuOS02LjYtODAuMSAyMS41bC0yLjcgNC42Yy0yNC41IDQyLjUgNy45IDExNy45IDI0LjQgMTUwLjggNS4xIDEwLjEgMTUuNSAxNi4xIDI2LjggMTUuNSAzNi43LTIuMiAxMTguMi0xMS43IDE0Mi44LTU0LjJsMi43LTQuNmMxNi4yLTI4LjEgNi42LTYzLjktMjEuNS04MC4xLTE2LTkuMi0zNS40LTEwLjQtNTIuNC0zLjFsLTkuOCA0LjItMS4zLTEwLjZ6Il19LFlBdD12MGUsWkF0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGwiLGljb246WzUxMiw1MTIsW10sImY1NzUiLCJNMjk2IDY0YzYuOSAwIDEzLjUgMi43IDE4LjMgNy42TDQ0MC40IDE5Ny43YzQuOSA0LjkgNy42IDExLjUgNy42IDE4LjNzLTIuNyAxMy41LTcuNiAxOC4zTDM4Ni43IDI4OCA2NS4zIDI4OGMxLjMtMy45IDMuNC03LjQgNi4zLTEwLjNsOTYuNC05Ni40IDMzLjQgMzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIxMy4zIDEzNiAyNzcuNyA3MS42YzQuOS00LjkgMTEuNS03LjYgMTguMy03LjZ6TTEyMi43IDEzNkwyNi4zIDIzMi40QzkuNSAyNDkuMyAwIDI3Mi4xIDAgMjk2czkuNSA0Ni43IDI2LjMgNjMuNkwxNTIuNCA0ODUuN0MxNjkuMyA1MDIuNSAxOTIuMSA1MTIgMjE2IDUxMnM0Ni43LTkuNSA2My42LTI2LjNMNDg1LjcgMjc5LjZDNTAyLjUgMjYyLjcgNTEyIDIzOS45IDUxMiAyMTZzLTkuNS00Ni43LTI2LjMtNjMuNkwzNTkuNiAyNi4zQzM0Mi43IDkuNSAzMTkuOSAwIDI5NiAwcy00Ni43IDkuNS02My42IDI2LjNMMTY4IDkwLjcgMTE4LjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMTIyLjcgMTM2eiJdfSx5MGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9uZXktYmlsbC0xLXdhdmUiLGljb246WzUxMiw1MTIsWyJtb25leS1iaWxsLXdhdmUtYWx0Il0sImY1M2IiLCJNMCAxMDkuNUwwIDQxOS42YzAgMTkuNCAxMS44IDM3LjMgMzAuMyA0My4zIDk0IDMwIDE1OC44IDguNCAyMjMuMy0xMy4xIDYyLjQtMjAuOCAxMjQuNC00MS41IDIxMi4xLTE1LjMgMjIuMiA2LjYgNDYuMi04LjggNDYuMi0zMmwwLTMxMC4xYzAtMTkuNC0xMS44LTM3LjMtMzAuMy00My4zLTk0LTMwLTE1OC44LTguNC0yMjMuMyAxMy4xLTYyLjQgMjAuOC0xMjQuNCA0MS41LTIxMi4xIDE1LjMtMjIuMi02LjYtNDYuMyA4LjgtNDYuMyAzMnpNMjU2IDM2OGMtNTMgMC05Ni01MC4xLTk2LTExMnM0My0xMTIgOTYtMTEyIDk2IDUwLjEgOTYgMTEyLTQzIDExMi05NiAxMTJ6TTEyNy4xIDQwNS41Yy43IDQuNC0yLjggOC4xLTcuMiA4LjEtMTUuNyAwLTMyLjEtMS44LTUwLTYuMS0zLjUtLjgtNi00LTYtNy43TDY0IDM2MGMwLTQuNCAzLjYtOC4xIDgtNy41IDI4LjEgMy41IDUwLjYgMjUuMiA1NS4yIDUzek00NDggMzU0LjZjMCA1LTQuNiA4LjgtOS41IDgtMTUuNC0yLjUtMzAuMi0zLjktNDQuNC00LjMtNC45LS4xLTguNy00LjUtNy4yLTkuMiA3LjMtMjMuNyAyOC00MS40IDUzLjItNDQuNiA0LjQtLjUgOCAzLjEgOCA3LjVsMCA0Mi42em0tOC0xOTUuMWMtMjguMS0zLjUtNTAuNi0yNS4yLTU1LjItNTMtLjctNC40IDIuOC04LjEgNy4yLTguMSAxNS43IDAgMzIuMSAxLjggNTAgNi4xIDMuNSAuOCA2IDQgNiA3LjdsMCAzOS45YzAgNC40LTMuNiA4LjEtOCA3LjV6bS0zMjIuMS01LjhjNC45IC4xIDguNyA0LjUgNy4yIDkuMi03LjMgMjMuNy0yOCA0MS40LTUzLjIgNDQuNi00LjQgLjUtOC0zLjEtOC03LjVsMC00Mi42YzAtNSA0LjYtOC44IDkuNS04IDE1LjQgMi41IDMwLjIgMy45IDQ0LjQgNC4zek0yNDAgMTg4Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGw0OCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNCAwIDAtNjhjMC0xMS05LTIwLTIwLTIwbC0xNiAweiJdfSxYQXQ9eTBlLFFBdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsYW5kbWFyayIsaWNvbjpbNTEyLDUxMixbMTI3OTYzXSwiZjY2ZiIsIk0yMzguNyA1LjFjMTAuNS02LjggMjQuMS02LjggMzQuNiAwbDIyNCAxNDRjMTEuOSA3LjcgMTcuNCAyMi4zIDEzLjQgMzUuOXMtMTYuNSAyMy0zMC43IDIzbC0zMiAwIDAgMjA4IDUxLjIgMzguNGM4LjEgNiAxMi44IDE1LjUgMTIuOCAyNS42IDAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzIgMC0xMC4xIDQuNy0xOS42IDEyLjgtMjUuNmw1MS4yLTM4LjQgMCAwIDAtMjA4LTMyIDBjLTE0LjIgMC0yNi43LTkuNC0zMC43LTIzczEuNS0yOC4zIDEzLjQtMzUuOWwyMjQtMTQ0ek0zMzYgMjA4bDAgMjA4IDY0IDAgMC0yMDgtNjQgMHpNMjI0IDQxNmw2NCAwIDAtMjA4LTY0IDAgMCAyMDh6TTExMiAyMDhsMCAyMDggNjQgMCAwLTIwOC02NCAweiJdfSxLQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibXVzaWMiLGljb246WzUxMiw1MTIsWzEyNzkyNV0sImYwMDEiLCJNNDY4IDdjNy42IDYuMSAxMiAxNS4zIDEyIDI1bDAgMzA0YzAgNDQuMi00MyA4MC05NiA4MHMtOTYtMzUuOC05Ni04MCA0My04MCA5Ni04MGMxMS4yIDAgMjIgMS42IDMyIDQuNmwwLTExNi43LTIyNCA0OS44IDAgMjA2LjNjMCA0NC4yLTQzIDgwLTk2IDgwcy05Ni0zNS44LTk2LTgwIDQzLTgwIDk2LTgwYzExLjIgMCAyMiAxLjYgMzIgNC42TDEyOCA5NmMwLTE1IDEwLjQtMjggMjUuMS0zMS4ybDI4OC02NGM5LjUtMi4xIDE5LjQgLjIgMjcgNi4zeiJdfSxKQXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9vay1tZWRpY2FsIixpY29uOls0NDgsNTEyLFtdLCJmN2U2IiwiTTk2IDUxMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY2LjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xOTIgMTIwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00MCAwIDAgNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQweiJdfSx3MGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2h1ZmZsZSIsaWNvbjpbNTEyLDUxMixbMTI4MjU2LCJyYW5kb20iXSwiZjA3NCIsIk00MDMuOCAzNC40YzEyLTUgMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjRjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM4NCAyMDQuOSAzODQgMTkybDAtMzItMzIgMGMtMTAuMSAwLTE5LjYgNC43LTI1LjYgMTIuOGwtMzIuNCA0My4yLTQwLTUzLjMgMjEuMi0yOC4zQzI5My4zIDExMC4yIDMyMS44IDk2IDM1MiA5NmwzMiAwIDAtMzJjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnpNMTU0IDI5Nmw0MCA1My4zLTIxLjIgMjguM0MxNTQuNyA0MDEuOCAxMjYuMiA0MTYgOTYgNDE2bC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDBjMTAuMSAwIDE5LjYtNC43IDI1LjYtMTIuOEwxNTQgMjk2ek00MzguNiA0NzAuNmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzg0IDQ2MC45IDM4NCA0NDhsMC0zMi0zMiAwYy0zMC4yIDAtNTguNy0xNC4yLTc2LjgtMzguNEwxMjEuNiAxNzIuOGMtNi04LjEtMTUuNS0xMi44LTI1LjYtMTIuOGwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5Nmw2NCAwYzMwLjIgMCA1OC43IDE0LjIgNzYuOCAzOC40TDMyNi40IDMzOS4yYzYgOC4xIDE1LjUgMTIuOCAyNS42IDEyLjhsMzIgMCAwLTMyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjR6Il19LGUkdD13MGUsdCR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVuZGVybGluZSIsaWNvbjpbMzg0LDUxMixbXSwiZjBjZCIsIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyUzExMy43IDY0IDk2IDY0bDAgMTYwYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzI3MC4zIDAgMjg4IDBsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDE2MGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMzMiAzMTIuNCAzMiAyMjRMMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMnpNMCA0ODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXX0sYSR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLXVzZXIiLGljb246WzY0MCw1MTIsW10sImU0ZGEiLCJNNjQgNjRDNjQgMjguNyA5Mi43IDAgMTI4IDBMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjEuM2MtNDYuOSAxOS04MCA2NS04MCAxMTguNyAwIDI3LjcgOC44IDUzLjQgMjMuOCA3NC40LTUxLjUgMjEtODcuOCA3MS42LTg3LjggMTMwLjcgMCAxIDAgMS45IDAgMi45bC0xNzYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMNjQgNjR6TTIwOCA0MDBsMCA2NCA1My40IDBjNy4yLTI5LjQgMjEuMy01Ni4xIDQwLjQtNzguMy02LjEtMTkuNS0yNC4zLTMzLjctNDUuOC0zMy43LTI2LjUgMC00OCAyMS41LTQ4IDQ4ek0zMzkgMjI0LjNjLTEtLjItMi0uMy0zLS4zbC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTYuNyAwYzIuMS0yMi44IDguNC00NC4zIDE4LjMtNjMuN3pNMTc2IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNzYgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTI0MCA4MGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6TTM1MiA1MTJjMC01MyA0My05NiA5Ni05Nmw5NiAwYzUzIDAgOTYgNDMgOTYgOTYgMCAxNy43LTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXX0sciR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJvYm90IixpY29uOls2NDAsNTEyLFsxMjkzMDJdLCJmNTQ0IiwiTTM1MiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzI4OC0xNy43IDI4OCAwbDAgNjQtOTYgMGMtNTMgMC05NiA0My05NiA5NmwwIDIyNGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yMjRjMC01My00My05Ni05Ni05NmwtOTYgMCAwLTY0ek0xNjAgMzY4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0xMjAgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMTIwIDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTIyNCAxNzZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0xNDQgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNNjQgMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMjA2LjMgMCAyMjRsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZ6bTU0NC0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJ6Il19LEw3PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsdXMiLGljb246WzQ0OCw1MTIsWzEwMTMzLDYxNTQzLCJhZGQiXSwiMmIiLCJNMjU2IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTYwLTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMTYweiJdfSxpJHQ9TDcscVU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29weSIsaWNvbjpbNDQ4LDUxMixbXSwiZjBjNSIsIk0xOTIgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMDAuNmMwLTE3LjQtNy4xLTM0LjEtMTkuNy00Ni4yTDM3MC42IDE3LjhDMzU4LjcgNi40IDM0Mi44IDAgMzI2LjMgMEwxOTIgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2LTY0IDAgMCAxNi0xOTIgMCAwLTI1NiAxNiAwIDAtNjQtMTYgMHoiXX0sbyR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoZXNzLWtpbmciLGljb246WzQ0OCw1MTIsWzk4MThdLCJmNDNmIiwiTTIyNC0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCA2NCAxNTMuOCAwYzIxLjEgMCAzOC4yIDE3LjEgMzguMiAzOC4yIDAgNi40LTEuNiAxMi43LTQuNyAxOC4zTDM1MiAzODQgNDA4LjIgNDU0LjNjNSA2LjMgNy44IDE0LjEgNy44IDIyLjIgMCAxOS42LTE1LjkgMzUuNS0zNS41IDM1LjVMNjcuNSA1MTJjLTE5LjYgMC0zNS41LTE1LjktMzUuNS0zNS41IDAtOC4xIDIuNy0xNS45IDcuOC0yMi4yTDk2IDM4NCA0LjcgMjE2LjZDMS42IDIxMC45IDAgMjA0LjYgMCAxOTguMiAwIDE3Ny4xIDE3LjEgMTYwIDM4LjIgMTYwbDE1My44IDAgMC02NC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXX0scyR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWZsb29kLXdhdGVyIixpY29uOls2NDAsNTEyLFtdLCJlNTBlIiwiTTQ5NiAyMDhsNC41IDBjMTUuMiAwIDI3LjUtMTIuMyAyNy41LTI3LjUgMC03LjktMy40LTE1LjUtOS40LTIwLjdMMzQ4IDEwLjVDMzQwLjMgMy43IDMzMC4zIDAgMzIwIDBzLTIwLjMgMy43LTI4IDEwLjVMMTIxLjQgMTU5LjhjLTYgNS4yLTkuNCAxMi44LTkuNCAyMC43IDAgMTUuMiAxMi4zIDI3LjUgMjcuNSAyNy41bDQuNSAwIDAgOTQuNGMyMC4zLTkuNCA0Mi4xLTE0LjIgNjQtMTQuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgMjIuMSAxNi42IDI5LjEgMTYuNiA1MS4yIDAgMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMTYuOS0uMSAzMy44IDIuNiA1MCA4bDAtODh6bS0yMjQtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDh6TTQ3NC42IDQxMi4xYzE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgNDE4LjMgMTcuNiA0MjYuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bS03MS4yIDk2YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgNTE0LjMgMTcuNiA1MjIuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il19LG4kdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiaXRjb2luLXNpZ24iLGljb246WzMyMCw1MTIsW10sImUwYjQiLCJNNjQgMjRDNjQgMTAuNyA3NC43IDAgODggMHMyNCAxMC43IDI0IDI0bDAgNDAgMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MS4xYzU0LjMgNy44IDk2IDU0LjQgOTYgMTEwLjkgMCAyNC4yLTcuNyA0Ni42LTIwLjcgNjQuOSAzMS43IDE5LjggNTIuNyA1NSA1Mi43IDk1LjEgMCA2MS45LTUwLjEgMTEyLTExMiAxMTJsLTE2IDAgMCA0MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQwLTMyIDAgMCA0MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQwLTIyLjMgMEMxOC43IDQ0OCAwIDQyOS4zIDAgNDA2LjNMMCAxMDEuNkMwIDgwLjggMTYuOCA2NCAzNy42IDY0TDY0IDY0IDY0IDI0em0wIDIwMGwxMTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OGwtMTEyIDAgMCA5NnptMTEyIDY0bC0xMTIgMCAwIDk2IDE0NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4bC0zMiAweiJdfSxsJHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm94IixpY29uOls0NDgsNTEyLFsxMjgyMzBdLCJmNDY2IiwiTTM2OS40IDEyOGwtMzQuMy00OC0yMjIuMSAwLTM0LjMgNDggMjkwLjcgMHpNMCAxNDguNWMwLTEzLjMgNC4yLTI2LjMgMTEuOS0zNy4yTDYwLjkgNDIuOEM3Mi45IDI2IDkyLjMgMTYgMTEyLjkgMTZsMjIyLjEgMGMyMC43IDAgNDAuMSAxMCA1Mi4xIDI2LjhsNDguOSA2OC41YzcuOCAxMC45IDExLjkgMjMuOSAxMS45IDM3LjJMNDQ4IDQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTQ4LjV6Il19LE0wZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtcGx1cyIsaWNvbjpbNDQ4LDUxMixbNjE4NDYsInBsdXMtc3F1YXJlIl0sImYwZmUiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjAwIDM0NGwwLTY0LTY0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNjQgMCAwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA2NCA2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC02NCAwIDAgNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR6Il19LGMkdD1NMGUsejBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93cy1sZWZ0LXJpZ2h0IixpY29uOls1NzYsNTEyLFsiYXJyb3dzLWgiXSwiZjA3ZSIsIk00NzAuNiAzNzQuNmw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDQxLjQgNDEuNC0zNTcuNSAwIDQxLjQtNDEuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTYgNi05LjQgMTQuMS05LjQgMjIuNnMzLjQgMTYuNiA5LjQgMjIuNmw5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC00MS40LTQxLjQgMzU3LjUgMC00MS40IDQxLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDB6Il19LGQkdD16MGUsZiR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhbiIsaWNvbjpbNTEyLDUxMixbXSwiZjg2MyIsIk0xNjAgMTQ0YzAtNzkuNSA2NC41LTE0NCAxNDQtMTQ0IDguOCAwIDE2IDcuMiAxNiAxNmwwIDE1Mi4yYzE1LTUuMyAzMS4yLTguMiA0OC04LjIgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCA4LjgtNy4yIDE2LTE2IDE2bC0xNTIuMiAwYzUuMyAxNSA4LjIgMzEuMiA4LjIgNDggMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDQtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTUyLjJjLTE1IDUuMy0zMS4yIDguMi00OCA4LjItNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC04LjggNy4yLTE2IDE2LTE2bDE1Mi4yIDBjLTUuMy0xNS04LjItMzEuMi04LjItNDh6bTk2IDE0NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LHUkdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjcm93IixpY29uOls2NDAsNTEyLFtdLCJmNTIwIiwiTTQ1Ni41IDBjLTQ4LjYgMC04OCAzOS40LTg4IDg4bDAgMzYtMzU1LjIgMjY2LjRDLS44IDQwMS0zLjcgNDIxIDYuOSA0MzUuMnMzMC42IDE3IDQ0LjggNi40bDc2LjgtNTcuNiAxMzEuMyAwIDQ2LjYgMTEzLjEgMSAyLjJjNS43IDEwLjcgMTguOCAxNS41IDMwLjMgMTAuOHMxNy4zLTE3LjMgMTMuOS0yOWwtLjgtMi4zLTM5LjEtOTQuOSA0MC45IDBjMS4xIDAgMi4yIDAgMy4yIDBsNDYuNiAxMTMuMiAxIDIuMmM1LjcgMTAuNyAxOC44IDE1LjUgMzAuMyAxMC44czE3LjMtMTcuMyAxMy45LTI5bC0uOC0yLjMtNDItMTAyQzQ4NS4zIDM1NC4xIDU0NC41IDI4MCA1NDQuNSAxOTJsMC03MiA4MC41LTIwLjFjOC42LTIuMSAxMy44LTEwLjggMTEuNi0xOS40LTcuMS0yOC41LTMyLjctNDguNS02Mi4xLTQ4LjVsLTUwLjEgMEM1MDguMiAxMi41IDQ4My44IDAgNDU2LjUgMHptMCA2NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il19LHAkdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWNpcmNsZS1jaGVjayIsaWNvbjpbNTc2LDUxMixbXSwiZTVhMCIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdfSxwNz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsaW5rLXNsYXNoIixpY29uOls1NzYsNTEyLFsiY2hhaW4tYnJva2VuIiwiY2hhaW4tc2xhc2giLCJ1bmxpbmsiXSwiZjEyNyIsIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xMjItMTIyYzQuMi0zLjQgOC4zLTcuMSAxMi4xLTEwLjlsNzEuMS03MS4xYzI5LjMtMjkuMyA0NS44LTY5LjEgNDUuOC0xMTAuNiAwLTg2LjQtNzAtMTU2LjUtMTU2LjUtMTU2LjUtMzcuMyAwLTczLjEgMTMuMy0xMDEuMyAzNy4yIDIwLjMgMTAuMSAzOC43IDIzLjUgNTQuNSAzOS41IDE0LjEtOC4zIDMwLjItMTIuNyA0Ni44LTEyLjcgNTEuMSAwIDkyLjUgNDEuNCA5Mi41IDkyLjUgMCAyNC41LTkuNyA0OC0yNy4xIDY1LjRsLTcxLjEgNzEuMWMtMy45IDMuOS04LjEgNy40LTEyLjYgMTAuNWwtNDcuNS00Ny41YzE2LjUtLjkgMjkuNy0xNC40IDMwLjItMzEuMSAwLTEuMyAwLTIuNiAwLTMuOSAwLTg2LjMtNjkuOS0xNTYuOS0xNTYuNS0xNTYuOS0xOS4yIDAtMzcuOSAzLjUtNTUuNSAxMC4yTDQxLTI0Ljl6TTIyNS45IDE2MGMuNiAwIDEuMSAwIDEuNyAwIDE1LjEgMCAyOS41IDMuNyA0Mi4xIDEwLjIgMS44IDEuMiAzLjYgMi4zIDUuNSAzLjEgMjYuOCAxNi4zIDQ0LjggNDUuOSA0NC44IDc5LjYgMCAuNCAwIC44IDAgMS4yTDIyNS45IDE2MHpNMzQ2LjIgNDE2TDE5MiAyNjEuOGMxLjIgODQuNiA2OS42IDE1Mi45IDE1NC4xIDE1NC4xek0xMzkuNyAyMDkuNWwtNDUuMy00NS4zLTQ4LjYgNDguNmMtMjkuMyAyOS4zLTQ1LjggNjkuMS00NS44IDExMC42IDAgODYuNCA3MCAxNTYuNSAxNTYuNSAxNTYuNSAzNy4yIDAgNzMuMS0xMy4zIDEwMS4zLTM3LjItMjAuMy0xMC4xLTM4LjgtMjMuNS01NC42LTM5LjUtMTQgOC4yLTMwLjEgMTIuNi00Ni43IDEyLjYtNTEuMSAwLTkyLjUtNDEuNC05Mi41LTkyLjUgMC0yNC41IDkuNy00OCAyNy4xLTY1LjRsNDguNi00OC42eiJdfSxoJHQ9cDcsbSR0PXA3LGckdD1wNyxoNz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1yb3RhdGUtcmlnaHQiLGljb246WzUxMiw1MTIsWzg2MzUsImFycm93LXJpZ2h0LXJvdGF0ZSIsImFycm93LXJvdGF0ZS1mb3J3YXJkIiwicmVkbyJdLCJmMDFlIiwiTTQzNi43IDc0LjdMNDQ4IDg1LjQgNDQ4IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ3LjkgMC03LjYtNy4yYy0uMi0uMi0uNC0uNC0uNi0uNi03NS03NS0xOTYuNS03NS0yNzEuNSAwcy03NSAxOTYuNSAwIDI3MS41IDE5Ni41IDc1IDI3MS41IDBjOC4yLTguMiAxNS41LTE2LjkgMjEuOS0yNi4xIDEwLjEtMTQuNSAzMC4xLTE4IDQ0LjYtNy45czE4IDMwLjEgNy45IDQ0LjZjLTguNSAxMi4yLTE4LjIgMjMuOC0yOS4xIDM0LjctMTAwIDEwMC0yNjIuMSAxMDAtMzYyIDBTLTI1IDE3NSA3NSA3NWM5OS45LTk5LjkgMjYxLjctMTAwIDM2MS43LS4zeiJdfSx4JHQ9aDcsYiR0PWg3LHYkdD1oNyxrMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVuLWNsaXAiLGljb246WzUxMiw1MTIsWyJwZW4tYWx0Il0sImYzMDUiLCJNNDA0IDBjMTkuMiAwIDM3LjYgNy42IDUxLjEgMjEuMmwzNS43IDM1LjdDNTA0LjQgNzAuNCA1MTIgODguOCA1MTIgMTA4cy03LjYgMzcuNi0yMS4yIDUxLjFMNDQ1LjkgMjA0IDMwOCA2Ni4xIDM1Mi45IDIxLjJDMzY2LjQgNy42IDM4NC44IDAgNDA0IDB6TTI3NC4xIDEwMGwwIDAgMTM3LjkgMTM3LjktMjE1LjEgMjE1LjFjLTEwLjcgMTAuNy0yNC4xIDE4LjUtMzguNyAyMi42TDMwLjQgNTExLjFjLTguMyAyLjMtMTcuMyAwLTIzLjQtNi4ycy04LjUtMTUuMS02LjItMjMuNEwzNi40IDM1My44YzQuMS0xNC42IDExLjgtMjcuOSAyMi42LTM4LjdMMjQwLjEgMTMzLjkgMjIzIDExNi45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw4OSAyMTdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMTU1LjEgODIuOWMyOC4xLTI4LjEgNzMuNy0yOC4xIDEwMS44IDBMMjc0LjEgMTAweiJdfSx5JHQ9azBlLHckdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkb29yLWNsb3NlZCIsaWNvbjpbNDQ4LDUxMixbMTI4NjgyXSwiZjUyYSIsIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkwzMiA2NHpNMzIwIDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LGdVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LWRvd24td2lkZS1zaG9ydCIsaWNvbjpbNTc2LDUxMixbInNvcnQtYW1vdW50LWFzYyIsInNvcnQtYW1vdW50LWRvd24iXSwiZjE2MCIsIk0yNDYuNiAzNzQuNmwtOTYgOTZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAzNzAuNyA5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzA2LjcgNDEuNC00MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTMyMCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMHptMC0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMHptMC0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2MCAwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMjAgOTZ6Il19LE0kdD1nVSx6JHQ9Z1UsayR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhcmV0LWRvd24iLGljb246WzMyMCw1MTIsW10sImYwZDciLCJNMTQwLjMgMzc2LjhjMTIuNiAxMC4yIDMxLjEgOS41IDQyLjgtMi4ybDEyOC0xMjhjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzAxLjQgMTkyIDI4OC41IDE5MmwtMjU2IDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhTLjcgMjM3LjUgOS45IDI0Ni42bDEyOCAxMjggMi40IDIuMnoiXX0sUyR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImsiLGljb246WzMyMCw1MTIsWzEwN10sIjRiIiwiTTMxMSA4Ni4zYzEyLjMtMTIuNyAxMi0zMi45LS43LTQ1LjJzLTMyLjktMTItNDUuMiAuN0MxNDMuNCAxNjcuMiA3Ni40IDIzNi4zIDY0IDI0OUw2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTA3IDY0LjctNjYuNyAxMzMgMTkyYzEwLjEgMTQuNSAzMCAxOC4xIDQ0LjUgOC4xczE4LjEtMzAgOC4xLTQ0LjVMMTc0LjEgMjI3LjQgMzExIDg2LjN6Il19LFMwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVjay10by1zbG90IixpY29uOls1NzYsNTEyLFsidm90ZS15ZWEiXSwiZjc3MiIsIk01NTIgMjg4YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAzMTJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwNGMwIDguOCA3LjIgMTYgMTYgMTZsNDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0ek00MTYgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI1NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NEw5NiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyNTYgMHptLTM3LjEgODQuNmMtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNsLTg1LjYgMTE3LjctMjYuNS0yNy40Yy05LjItOS41LTI0LjQtOS44LTMzLjktLjYtOS41IDkuMi05LjggMjQuNC0uNiAzMy45bDQ2LjQgNDhjNC45IDUuMSAxMS44IDcuOCAxOC45IDcuM3MxMy42LTQuMSAxNy44LTkuOEwzODQuMiAxNTAuMWM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXX0sQyR0PVMwZSxMJHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlzaC1maW5zIixpY29uOls1NzYsNTEyLFtdLCJlNGYyIiwiTTI3NS4yIDM4LjRjLTEwLjYtOC0yNS04LjUtMzYuMy0xLjVTMjIyIDU3LjMgMjI0LjYgNzAuM2w5LjcgNDguNmMtMTkuNCA5LTM2LjkgMTkuOS01Mi40IDMxLjUtMTUuMyAxMS41LTI5IDIzLjktNDAuNyAzNi4zTDQ4LjEgMTMyLjRjLTEyLjUtNy4zLTI4LjQtNS4zLTM4LjcgNC45cy0xMi40IDI2LTUuMyAzOC42TDUwIDI1NiA0LjIgMzM2LjFjLTcuMiAxMi42LTUgMjguNCA1LjMgMzguNnMyNi4xIDEyLjIgMzguNyA0LjlsOTMuMS01NC4zYzExLjggMTIuMyAyNS40IDI0LjggNDAuNyAzNi4zIDE1LjUgMTEuNiAzMyAyMi41IDUyLjQgMzEuNWwtOS43IDQ4LjZjLTIuNiAxMyAzLjEgMjYuMyAxNC4zIDMzLjNzMjUuNiA2LjUgMzYuMy0xLjVsNzcuNi01OC4yYzU0LjktNCAxMDEuNS0yNyAxMzcuMi01My44IDM5LjItMjkuNCA2Ny4yLTY0LjcgODEuNi04OS41IDUuOC05LjkgNS44LTIyLjIgMC0zMi4xLTE0LjQtMjQuOC00Mi41LTYwLjEtODEuNi04OS41LTM1LjgtMjYuOC04Mi4zLTQ5LjgtMTM3LjItNTMuOEwyNzUuMiAzOC40ek0zODQgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LFQkdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb21wcmVzcyIsaWNvbjpbNDQ4LDUxMixbXSwiZjA2NiIsIk0xNjAgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTOTYgNDYuMyA5NiA2NGwwIDY0LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2ek0zMiAzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMHpNMzUyIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTY0ek0zMjAgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAweiJdfSxDMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAtYS16IixpY29uOls1MTIsNTEyLFsic29ydC1hbHBoYS11cCJdLCJmMTVlIiwiTTQxMi42IDQ5LjdDNDA3LjIgMzguOCAzOTYuMSAzMiAzODQgMzJzLTIzLjIgNi44LTI4LjYgMTcuN2MtNTAuNyAxMDEuMy03Ny4zIDE1NC43LTgwIDE2MC03LjkgMTUuOC0xLjUgMzUgMTQuMyA0Mi45czM1IDEuNSA0Mi45LTE0LjNsNy4yLTE0LjMgODguNCAwIDcuMiAxNC4zYzcuOSAxNS44IDI3LjEgMjIuMiA0Mi45IDE0LjNzMjIuMi0yNy4xIDE0LjMtNDIuOWMtMi43LTUuMy0yOS4zLTU4LjctODAtMTYwek0zODQgMTM1LjZsMjAuMiA0MC40LTQwLjQgMCAyMC4yLTQwLjR6TTI4OCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJsNTAuNyAwLTczLjQgNzMuNGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMzA3LjEgNDgwIDMyMCA0ODBsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUwLjcgMCA3My40LTczLjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDYwLjkgMjg4IDQ0OCAyODhsLTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTgwIDgwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgMjUuNCAyNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgweiJdfSxfJHQ9QzBlLEEkdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLWdyYWR1YXRlIixpY29uOls0NDgsNTEyLFtdLCJmNTAxIiwiTTI0MS4zLTEzYy0xMS40LTIuMy0yMy4xLTIuMy0zNC41IDBMMTkuMyAyNC41QzguMSAyNi43IDAgMzYuNiAwIDQ4IDAgNTguMyA2LjUgNjcuMyAxNiA3MC42TDE2IDE0NCAuMyAyMjIuNmMtLjIgLjktLjMgMS45LS4zIDIuOSAwIDggNi41IDE0LjYgMTQuNiAxNC42bDM0LjkgMGM4IDAgMTQuNi02LjUgMTQuNi0xNC42IDAtMS0uMS0xLjktLjMtMi45TDQ4IDE0NCA0OCA3Ny4zIDk2IDg2LjkgOTYgMTQ0YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjhsMC01Ny4xIDc2LjctMTUuM0M0MzkuOSA2OS4zIDQ0OCA1OS40IDQ0OCA0OHMtOC4xLTIxLjMtMTkuMy0yMy41TDI0MS4zLTEzek0yMjQgMjI0Yy00NC4yIDAtODAtMzUuOC04MC04MGwxNjAgMGMwIDQ0LjItMzUuOCA4MC04MCA4MHpNMTIwLjEgMzIwLjFDNTguNyAzNDguMyAxNiA0MTAuMyAxNiA0ODIuMyAxNiA0OTguNyAyOS4zIDUxMiA0NS43IDUxMmwxNTQuMyAwIDAtMTQ2LTU3LjQtNDNjLTYuNS00LjktMTUuMi02LjItMjIuNi0yLjh6TTI0OCA1MTJsMTU0LjMgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuNyAwLTcyLTQyLjctMTM0LTEwNC4xLTE2Mi4xLTcuNC0zLjQtMTYuMS0yLjEtMjIuNiAyLjhsLTU3LjQgNDMgMCAxNDZ6Il19LCQkdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWNvZGUiLGljb246WzM4NCw1MTIsW10sImYxYzkiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE1NC4yIDI5NS42YzguNi0xMC4xIDcuNS0yNS4yLTIuNi0zMy44cy0yNS4yLTcuNS0zMy44IDIuNmwtNDggNTZjLTcuNyA5LTcuNyAyMi4yIDAgMzEuMmw0OCA1NmM4LjYgMTAuMSAyMy44IDExLjIgMzMuOCAyLjZzMTEuMi0yMy44IDIuNi0zMy44bC0zNC42LTQwLjQgMzQuNi00MC40em0xMTItMzEuMmMtOC42LTEwLjEtMjMuOC0xMS4yLTMzLjgtMi42cy0xMS4yIDIzLjgtMi42IDMzLjhsMzQuNiA0MC40LTM0LjYgNDAuNGMtOC42IDEwLjEtNy41IDI1LjIgMi42IDMzLjhzMjUuMiA3LjUgMzMuOC0yLjZsNDgtNTZjNy43LTkgNy43LTIyLjIgMC0zMS4ybC00OC01NnoiXX0sRCR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNvYXAiLGljb246WzUxMiw1MTIsWzEyOTUzMl0sImUwNmUiLCJNMjA4LTMyYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNMzIwIDk2YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek0zNTIgMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek05NiAxNjBsMTEyIDBjMCAyMy44IDcuNCA0NS45IDIwLjEgNjRMMTYwIDIyNGMtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmwxOTIgMGM1MyAwIDk2LTQzIDk2LTk2IDAtMzUuMS0xOC45LTY1LjktNDctODIuNiAxOS0xOS44IDMwLjctNDYuNiAzMS03Ni4xIDQ1LjQgNy42IDgwIDQ3LjEgODAgOTQuN2wwIDEyOGMwIDUzLTQzIDk2LTk2IDk2TDk2IDQ4MGMtNTMgMC05Ni00My05Ni05NkwwIDI1NmMwLTUzIDQzLTk2IDk2LTk2em02NCAxMTJsMTkyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTE5MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4eiJdfSxFJHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmVjeWNsZSIsaWNvbjpbNTEyLDUxMixbOTg0Miw5ODUwLDk4NTFdLCJmMWI4IiwiTTE1Mi4zIDYwQzE5OC41LTIwIDMxNC0yMCAzNjAuMiA2MGwzNy4zIDY0LjYgMjcuNy0xNmM4LjQtNC45IDE4LjktNC4yIDI2LjYgMS43czExLjEgMTUuOSA4LjYgMjUuM0w0MzYuOSAyMjNjLTMuNCAxMi44LTE2LjYgMjAuNC0yOS40IDE3bC04Ny40LTIzLjRjLTkuNC0yLjUtMTYuMy0xMC40LTE3LjYtMjBzMy40LTE5LjEgMTEuOC0yMy45bDI3LjctMTYtMzcuMy02NC42Yy0yMS42LTM3LjMtNzUuNC0zNy4zLTk3IDBsLTUuMyA5LjFjLTguOCAxNS4zLTI4LjQgMjAuNS00My43IDExLjdTMTM4LjIgODQuNSAxNDcgNjkuMWw1LjMtOS4xek00NDkuNyAyNzkuMWMxNS4zLTguOCAzNC45LTMuNiA0My43IDExLjdsNS4zIDkuMWM0Ni4yIDgwLTExLjUgMTgwLTEwMy45IDE4MGwtNzQuNiAwIDAgMzJjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtNjQtNjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDY0LTY0YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJzMTQuOCAxMi41IDE0LjggMjIuMmwwIDMyIDc0LjYgMGM0My4xIDAgNzAuMS00Ni43IDQ4LjUtODRsLTUuMy05LjFjLTguOC0xNS4zLTMuNi0zNC45IDExLjctNDMuN3pNNTEgMjM1LjRsLTI3LjctMTZjLTguNC00LjktMTMuMS0xNC4zLTExLjgtMjMuOXM4LjItMTcuNSAxNy42LTIwTDExNi41IDE1MmMxMi44LTMuNCAyNiA0LjIgMjkuNCAxN2wyMy40IDg3LjRjMi41IDkuNC0uOSAxOS4zLTguNiAyNS4zcy0xOC4yIDYuNi0yNi42IDEuN2wtMjcuNy0xNi0zNy4zIDY0LjZjLTIxLjYgMzcuMyA1LjQgODQgNDguNSA4NGwxMC42IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwLjYgMEMyNS4zIDQ4MC0zMi40IDM4MCAxMy44IDMwMEw1MSAyMzUuNHoiXX0sTDBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi13aW5rIixpY29uOls1MTIsNTEyLFsiZ3Jpbi13aW5rIl0sImY1OGMiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0zMjggMTk2Yy0xMSAwLTIwIDktMjAgMjBzLTkgMjAtMjAgMjAtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwek0xNzYgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sTiR0PUwwZSx4VT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3YXRlci1sYWRkZXIiLGljb246WzY0MCw1MTIsWyJsYWRkZXItd2F0ZXIiLCJzd2ltbWluZy1wb29sIl0sImY1YzUiLCJNMzc0LjUgNDA1LjdjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjggMjUuNy00LjggMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yNC4yIDE4LjMtNTIuMyAzNS45LTgzLjQgMzUuOXMtNTkuMS0xNy43LTgzLjMtMzUuOWMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMjMuOCAxNy45LTU0LjEgMzUuNS04OC4xIDM1LjMtMjAuNC0uMS00MC43LTYuNy01OS44LTIxLjEtMTAuNi04LTEyLjctMjMtNC43LTMzLjZzMjMtMTIuNyAzMy42LTQuN2MxMS4zIDguNSAyMS42IDExLjQgMzEuMiAxMS41IDE3LjYgLjEgMzcuMy05LjQgNTguOS0yNS43IDM4LjQtMjkgOTAuNi0yOSAxMjkgMCAyNCAxOC4xIDQwLjcgMjYuMyA1NC41IDI2LjNzMzAuNS04LjIgNTQuNS0yNi4zek01MTEuOCAzMmM0OC4zIDAgODkgMzYgOTUgODMuOWwxIDguMmMyLjIgMTcuNS0xMC4yIDMzLjUtMjcuOCAzNS43cy0zMy41LTEwLjItMzUuNy0yNy44bC0xLTguMmMtMi0xNS45LTE1LjUtMjcuOC0zMS41LTI3LjgtMTcuNSAwLTMxLjggMTQuMi0zMS44IDMxLjhsMCAyMTEuOGMtMjMuMS01LjEtNDQuOS00LjQtNjQtLjRsMC01MS4yLTE5MiAwIDAgNDguN2MtNS4zLS41LTEwLjctLjgtMTYtLjctMTYuMiAuMS0zMi40IDIuNy00OCA4bDAtMjE2LjJjMC01Mi45IDQyLjktOTUuOCA5NS43LTk1LjggNDguMyAwIDg5IDM2IDk1IDgzLjlsMSA4LjJjMi4yIDE3LjUtMTAuMiAzMy41LTI3LjggMzUuN3MtMzMuNS0xMC4yLTM1LjctMjcuOGwtMS04LjJjLTItMTUuOS0xNS41LTI3LjgtMzEuNS0yNy44LTE3LjUgMC0zMS43IDE0LjItMzEuNyAzMS44bDAgOTYuMiAxOTIgMCAwLTk2LjJDNDE2IDc0LjkgNDU4LjkgMzIgNTExLjggMzJ6Il19LFAkdD14VSxJJHQ9eFUsRiR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRvd2VyLWNlbGwiLGljb246WzU3Niw1MTIsW10sImU1ODUiLCJNNTkuNiA5LjhDNDcuMyA0LjggMzMuMyAxMC43IDI4LjQgMjMgMTUuMiA1NS41IDggOTAuOSA4IDEyOHM3LjIgNzIuNSAyMC40IDEwNWM1IDEyLjMgMTkgMTguMiAzMS4zIDEzLjJzMTguMi0xOSAxMy4yLTMxLjNDNjIgMTg4LjIgNTYgMTU4LjggNTYgMTI4czYtNjAuMiAxNi45LTg3YzUtMTIuMy0xLTI2LjMtMTMuMi0zMS4zem00NTYuOCAwYy0xMi4zIDUtMTguMiAxOS0xMy4yIDMxLjMgMTAuOSAyNi44IDE2LjkgNTYuMiAxNi45IDg3cy02IDYwLjItMTYuOSA4N2MtNSAxMi4zIDEgMjYuMyAxMy4yIDMxLjNzMjYuMy0xIDMxLjMtMTMuMmMxMy4xLTMyLjUgMjAuNC02Ny45IDIwLjQtMTA1cy03LjItNzIuNS0yMC40LTEwNWMtNS0xMi4zLTE5LTE4LjItMzEuMy0xMy4yek0zNDAuMSAxNjUuMmM3LjUtMTAuNSAxMS45LTIzLjMgMTEuOS0zNy4yIDAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0YzAgMTMuOSA0LjQgMjYuNyAxMS45IDM3LjJMOTguOSA0NjYuOGMtNy4zIDE2LjEtLjIgMzUuMSAxNS45IDQyLjRzMzUuMSAuMiA0Mi40LTE1LjlsMjAuNi00NS4yIDIyMC42IDAgMjAuNiA0NS4yYzcuMyAxNi4xIDI2LjMgMjMuMiA0Mi40IDE1LjlzMjMuMi0yNi4zIDE1LjktNDIuNEwzNDAuMSAxNjUuMnpNMzc2LjUgNDAwbC0xNzcgMCAyMS44LTQ4IDEzMy4zIDAgMjEuOCA0OHpNMjg4IDIwNS4zbDQ0LjggOTguNy04OS43IDAgNDQuOC05OC43ek0xNjMuMyA3My42YzUuMy0xMi4xLS4yLTI2LjMtMTIuNC0zMS42cy0yNi4zIC4yLTMxLjYgMTIuNEMxMDkuNSA3NyAxMDQgMTAxLjkgMTA0IDEyOHM1LjUgNTEgMTUuMyA3My42YzUuMyAxMi4xIDE5LjUgMTcuNyAzMS42IDEyLjRzMTcuNy0xOS41IDEyLjQtMzEuNkMxNTYgMTY1LjggMTUyIDE0Ny40IDE1MiAxMjhzNC0zNy44IDExLjMtNTQuNHpNNDU2LjcgNTQuNGMtNS4zLTEyLjEtMTkuNS0xNy43LTMxLjYtMTIuNHMtMTcuNyAxOS41LTEyLjQgMzEuNkM0MjAgOTAuMiA0MjQgMTA4LjYgNDI0IDEyOHMtNCAzNy44LTExLjMgNTQuNGMtNS4zIDEyLjEgLjIgMjYuMyAxMi40IDMxLjZzMjYuMy0uMiAzMS42LTEyLjRDNDY2LjUgMTc5IDQ3MiAxNTQuMSA0NzIgMTI4cy01LjUtNTEtMTUuMy03My42eiJdfSxPJHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29sb24tc2lnbiIsaWNvbjpbMzg0LDUxMixbXSwiZTE0MCIsIk0yMTMuOCA4LjdjMTIuOSAzLjIgMjAuNyAxNi4yIDE3LjUgMjkuMWwtNC42IDE4LjVjMTUuNCAuOCAzMC40IDMuNCA0NC43IDcuNWw5LjQtMzcuNkMyODMuOSAxMy4zIDI5NyA1LjUgMzA5LjggOC43UzMzMC41IDI1IDMyNy4zIDM3LjhMMzE2IDgyLjhjMTMuNSA3LjggMjYgMTcuMSAzNy4yIDI3LjggMTIuOSAxMi4xIDEzLjQgMzIuNCAxLjMgNDUuMnMtMzIuNCAxMy40LTQ1LjIgMS4zYy0zLjEtMi45LTYuNC01LjgtOS44LTguNEwyMzkuMiAzOTBjMjYuOS00LjYgNTEuMS0xNy4xIDcwLjEtMzUuMSAxMi45LTEyLjEgMzMuMS0xMS41IDQ1LjIgMS4zczExLjUgMzMuMS0xLjMgNDUuMmMtMzQuMyAzMi4zLTgwIDUyLjgtMTMwLjUgNTQuNGwtNy41IDI5LjljLTMuMiAxMi45LTE2LjIgMjAuNy0yOS4xIDE3LjVzLTIwLjctMTYuMi0xNy41LTI5LjFsNS42LTIyLjVjLTE1LTMuMi0yOS40LTgtNDIuOS0xNC40bC0xMi4xIDQ4LjVjLTMuMiAxMi45LTE2LjIgMjAuNy0yOS4xIDE3LjVTNjkuNSA0ODcgNzIuNyA0NzQuMmwxNi02My45QzQ0LjMgMzczLjYgMTYgMzE4LjEgMTYgMjU2IDE2IDE1OS4yIDg0LjggNzguNCAxNzYuMyA2MGw4LjQtMzMuOEMxODcuOSAxMy4zIDIwMSA1LjUgMjEzLjggOC43ek0xNTggMTMyLjljLTQ2LjEgMjEuOC03OCA2OC43LTc4IDEyMy4xIDAgMzAuNSAxMCA1OC42IDI2LjkgODEuM0wxNTggMTMyLjl6TTE0Ny40IDM3My40YzEzIDcuNiAyNy4zIDEzLjEgNDIuNSAxNi4xbDY1LjktMjYzLjZjLTEyLjYtMy44LTI1LjktNS45LTM5LjgtNS45LTEuOCAwLTMuNSAwLTUuMyAuMUwxNDcuNCAzNzMuNHoiXX0sQiR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxhcHRvcC1maWxlIixpY29uOls1NzYsNTEyLFtdLCJlNTFkIiwiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDQxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDgtNjQgMCAwLTQ4LTI4OCAwIDAgMTkyIDExMiAwIDAgOTYtMTYzLjIgMEMzNC40IDM1MiAwIDMxNy42IDAgMjc1LjIgMCAyNjQuNiA4LjYgMjU2IDE5LjIgMjU2TDY0IDI1NiA2NCA2NHpNNTI5LjkgMjU3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNTQ0IDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYwIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjU2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDc2LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xIDIwIDIwIDQ3LjkgNDcuOSA4My45IDgzLjl6TTQxNiAyNzJjMCA4LjggNy4yIDE2IDE2IDE2bDYwLjEgMC03Ni4xLTc2LjEgMCA2MC4xeiJdfSxUMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFoYWkiLGljb246WzU3Niw1MTIsWyJoYXlrYWwiXSwiZjY2NiIsIk0yODguNC04YzEzLjIgMCAyNSA4LjEgMjkuOCAyMC40bDMxLjkgODIgNzcuMi00Mi4zYzExLjYtNi4zIDI1LjgtNC45IDM1LjkgMy41czE0IDIyLjMgOS43IDM0LjhsLTI4LjIgODMuMyA4Ni4zIDE3LjJjMTIuOSAyLjYgMjMgMTIuOCAyNS4zIDI1LjhzLTMuNiAyNi4xLTE0LjkgMzIuOWwtNzUuMiA0NS43IDU1IDY4LjZjOC4zIDEwLjMgOS4zIDI0LjYgMi43IDM2cy0xOS41IDE3LjYtMzIuNiAxNS42bC04Ny0xMy4zLTIgODhjLS4zIDEzLjItOC42IDI0LjgtMjEgMjkuNHMtMjYuMyAxLTM1LTlsLTU4LTY2LjEtNTggNjYuMWMtOC43IDkuOS0yMi42IDEzLjUtMzUgOXMtMjAuOC0xNi4yLTIxLTI5LjRsLTItODgtODcgMTMuM2MtMTMgMi0yNi00LjItMzIuNi0xNS42cy01LjUtMjUuNyAyLjctMzZsNTUtNjguNi03NS4yLTQ1LjdjLTExLjMtNi44LTE3LjItMTkuOS0xNC45LTMyLjlzMTIuMy0yMy4yIDI1LjMtMjUuOGw4Ni4zLTE3LjItMjguMi04My4zYy00LjItMTIuNS0uNC0yNi4zIDkuNy0zNC44czI0LjQtOS45IDM1LjktMy41bDc3LjEgNDIuMyAzMS45LTgyQzI2My4zIC4xIDI3NS4yLTggMjg4LjQtOHptMCAxMjAuMkwyNzMgMTUxLjZjLTMuMyA4LjYtMTAuMiAxNS4zLTE4LjkgMTguNXMtMTguMiAyLjQtMjYuMy0ybC0zNy0yMC4zIDEzLjYgNDBjMyA4LjcgMiAxOC4zLTIuNiAyNi4zcy0xMi40IDEzLjYtMjEuNSAxNS40bC00MS40IDguMyAzNi4xIDIxLjljNy45IDQuOCAxMy4zIDEyLjcgMTQuOSAyMS44cy0uOCAxOC40LTYuNSAyNS42bC0yNi40IDMzIDQxLjgtNi40YzkuMS0xLjQgMTguNCAxLjIgMjUuNCA3LjFzMTEuMiAxNC42IDExLjQgMjMuOGwuOSA0Mi4yIDI3LjktMzEuOGM2LjEtNi45IDE0LjgtMTAuOSAyNC4xLTEwLjlzMTggNCAyNC4xIDEwLjlsMjcuOSAzMS44IC45LTQyLjJjLjItOS4yIDQuNC0xNy45IDExLjQtMjMuOHMxNi4zLTguNSAyNS40LTcuMWw0MS44IDYuNC0yNi40LTMzYy01LjgtNy4yLTguMi0xNi41LTYuNi0yNS42czctMTcgMTQuOS0yMS44bDM2LjEtMjEuOS00MS40LTguM2MtOS0xLjgtMTYuOS03LjQtMjEuNS0xNS40cy01LjUtMTcuNi0yLjYtMjYuM2wxMy42LTQwLTM3IDIwLjNjLTguMSA0LjQtMTcuNyA1LjItMjYuMyAycy0xNS41LTkuOS0xOC45LTE4LjVsLTE1LjMtMzkuNHoiXX0sUiR0PVQwZSxfMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9uZXktYmlsbC0xIixpY29uOls1MTIsNTEyLFsibW9uZXktYmlsbC1hbHQiXSwiZjNkMSIsIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMTkyIDgwYTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHpNNjQgMTg0bDAtNDhjMC00LjQgMy42LTggOC04bDQ4IDBjNC40IDAgOC4xIDMuNiA3LjUgOC0zLjYgMjktMjYuNiA1MS45LTU1LjUgNTUuNS00LjQgLjUtOC0zLjEtOC03LjV6bTAgMTQ0YzAtNC40IDMuNi04LjEgOC03LjUgMjkgMy42IDUxLjkgMjYuNiA1NS41IDU1LjUgLjUgNC40LTMuMSA4LTcuNSA4bC00OCAwYy00LjQgMC04LTMuNi04LThsMC00OHpNNDQwIDE5MS41Yy0yOS0zLjYtNTEuOS0yNi42LTU1LjUtNTUuNS0uNS00LjQgMy4xLTggNy41LThsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0OGMwIDQuNC0zLjYgOC4xLTggNy41ek00NDggMzI4bDAgNDhjMCA0LjQtMy42IDgtOCA4bC00OCAwYy00LjQgMC04LjEtMy42LTcuNS04IDMuNi0yOSAyNi42LTUxLjkgNTUuNS01NS41IDQuNC0uNSA4IDMuMSA4IDcuNXpNMjQwIDE4OGMtMTEgMC0yMCA5LTIwIDIwIDAgOS43IDYuOSAxNy43IDE2IDE5LjZsMCA0OC40LTQgMGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsNDggMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTQgMCAwLTY4YzAtMTEtOS0yMC0yMC0yMGwtMTYgMHoiXX0sSCR0PV8wZSxBMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQtYm9sdCIsaWNvbjpbNTEyLDUxMixbMTI3Nzg1LCJ0aHVuZGVyc3Rvcm0iXSwiZjc2YyIsIk0wIDIyNGMwIDUzIDQzIDk2IDk2IDk2bDM4LjYgMCAxMjQuMS0xMTFjMTIuMi0xMC45IDI4LTE3IDQ0LjQtMTcgNDQuNiAwIDc2LjUgNDMgNjMuNyA4NS43TDM1NC4xIDMyMCA0MTYgMzIwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwIDEuMS01LjIgMS42LTEwLjUgMS42LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwLTI0LjMgMC00Ni4xIDEwLjktNjAuOCAyOC0xOC43LTM1LjctNTYuMS02MC05OS4yLTYwLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyIDAgNy4xIC43IDE0LjEgMS45IDIwLjgtMzguMyAxMi42LTY1LjkgNDguNy02NS45IDkxLjJ6TTE2MC42IDQwMGw2MS44IDAtMzEuMiAxMDQuMWMtMy42IDExLjkgNS4zIDIzLjkgMTcuOCAyMy45IDQuNiAwIDktMS43IDEyLjQtNC43TDM2Mi41IDM5Ni45YzMuNS0zLjEgNS41LTcuNiA1LjUtMTIuNCAwLTkuMi03LjQtMTYuNi0xNi42LTE2LjZsLTYxLjggMCAzMS4yLTEwNC4xYzMuNi0xMS45LTUuMy0yMy45LTE3LjgtMjMuOS00LjYgMC05IDEuNy0xMi40IDQuN0wxNDkuNSAzNzEuMWMtMy41IDMuMS01LjUgNy42LTUuNSAxMi40IDAgOS4yIDcuNCAxNi42IDE2LjYgMTYuNnoiXX0scSR0PUEwZSxWJHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZXRoZXJuZXQiLGljb246WzUxMiw1MTIsW10sImY3OTYiLCJNMCAyMjRMMCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMCAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0IDY0IDAgMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwNCA2NCAwIDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDQgNjQgMCAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE2MCA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdfSwkMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaHJ5dm5pYS1zaWduIixpY29uOlszODQsNTEyLFs4MzcyLCJocnl2bmlhIl0sImY2ZjIiLCJNMzM2IDE0OS40QzMzNiA3NyAyNjguNSAyMy41IDE5OCA0MC4xTDkzLjIgNjQuOUM3NiA2OC45IDY1LjQgODYuMiA2OS40IDEwMy40czIxLjMgMjcuOSAzOC41IDIzLjhsMTA0LjgtMjQuN2MzMC4zLTcuMSA1OS4zIDE1LjggNTkuMyA0Ni45IDAgMTcuNi05LjYgMzMuOC0yNSA0Mi4zbC0uNyAuNC0yMjIuMyAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMi40IDBjNS41LTEzLjMgOC40LTI3LjggOC40LTQyLjZ6TTM2MCAyNzJMMjQgMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzLjMgMGMtNi4xIDEzLjQtOS4zIDI4LjEtOS4zIDQzLjMgMCA2NC4xIDU2LjkgMTEzLjQgMTIwLjQgMTA0LjJsMTM3LjktMTkuOWMxNy41LTIuNSAyOS42LTE4LjcgMjcuMS0zNi4ycy0xOC44LTI5LjYtMzYuMi0yNy4xTDE1OS4yIDQwNC4yYy0yNC45IDMuNi00Ny4yLTE1LjctNDcuMi00MC45IDAtMTUuMSA4LjItMjguOSAyMS40LTM2LjJsMTMtNy4xIDIxMy42IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjR6Il19LFUkdD0kMGUsVlU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZXllLXNsYXNoIixpY29uOls1NzYsNTEyLFtdLCJmMDcwIiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjQtOTYuNGMyLjctMi40IDUuNC00LjggOC03LjIgNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjYtNTYuOCAwLTEwNS42IDE4LjItMTQ2IDQ0LjJMNDEtMjQuOXpNMjA0LjUgMTM4LjdjMjMuNS0xNi44IDUyLjQtMjYuNyA4My41LTI2LjcgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCAzMS4xLTkuOSA1OS45LTI2LjcgODMuNWwtMzQuNy0zNC43YzEyLjctMjEuNCAxNy00Ny43IDEwLjEtNzMuNy0xMy43LTUxLjItNjYuNC04MS42LTExNy42LTY3LjktOC42IDIuMy0xNi43IDUuNy0yNCAxMGwtMzQuNy0zNC43ek0zMjUuMyAzOTUuMWMtMTEuOSAzLjItMjQuNCA0LjktMzcuMyA0LjktNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC0xMi45IDEuNy0yNS40IDQuOS0zNy4zTDY5LjQgMTM5LjJjLTMyLjYgMzYuOC01NSA3NS44LTY2LjkgMTA0LjUtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjYgMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMSA0Ny4xIDQzLjcgMTExLjggODAuNiAxOTIuNiA4MC42IDM3LjMgMCA3MS4yLTcuOSAxMDEuNS0yMC42bC02NC4yLTY0LjJ6Il19LEQwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXJ0LWZsYXRiZWQtc3VpdGNhc2UiLGljb246WzU3Niw1MTIsWyJsdWdnYWdlLWNhcnQiXSwiZjU5ZCIsIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEw0OCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmw0MDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzQuNyAwYzEuOCA1IDIuNyAxMC40IDIuNyAxNiAwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTUuNiAxLTExIDIuNy0xNmwtMTk3LjUgMGMxLjggNSAyLjcgMTAuNCAyLjcgMTYgMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhjMC02IDEuMS0xMS43IDMuMS0xNy0zOC4xLTYuMi02Ny4xLTM5LjItNjcuMS03OUw2NCA4MGMwLTguOC03LjItMTYtMTYtMTZMMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMnpNMTc2IDE0NGMwLTI2LjUgMjEuNS00OCA0OC00OGwzMiAwIDAtMjRjMC0zMC45IDI1LjEtNTYgNTYtNTZsNjQgMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDI0IDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNDRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTI0MCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE0NHpNMzg0IDk2bDAtMjRjMC00LjQtMy42LTgtOC04bC02NCAwYy00LjQgMC04IDMuNi04IDhsMCAyNCA4MCAweiJdfSxqJHQ9RDBlLFckdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyYWRpYXRpb24iLGljb246WzU3Niw1MTIsW10sImY3YjkiLCJNNDQ2LjIgMzQuNWMtMTQuMi0xMC4xLTMzLjUtNC42LTQyLjIgMTAuNUwzMzEuNiAxNzAuM2MzMS4zIDE1LjggNTIuOCA0OC4zIDUyLjggODUuN2wxNDQgMGMxNy43IDAgMzIuMi0xNC40IDMwLjEtMzEuOS05LjEtNzguMS01MS40LTE0Ni4xLTExMi4zLTE4OS42ek0xNzIuNyA0NC45QzE2NCAyOS44IDE0NC43IDI0LjMgMTMwLjUgMzQuNSA2OS42IDc3LjkgMjcuMyAxNDUuOSAxOC4yIDIyNC4xIDE2LjEgMjQxLjYgMzAuNyAyNTYgNDguMyAyNTZsMTQ0IDBjMC0zNy41IDIxLjUtNjkuOSA1Mi44LTg1LjdMMTcyLjcgNDQuOXptLTkuNCA0MTYuOGMtOC43IDE1LjEtMy44IDM0LjUgMTIgNDEuOCAzNC40IDE1LjcgNzIuNyAyNC41IDExMyAyNC41czc4LjYtOC44IDExMy0yNC41YzE1LjgtNy4yIDIwLjctMjYuNyAxMi00MS44TDM0MSAzMzYuM2MtMTUuMSA5LjktMzMuMiAxNS43LTUyLjYgMTUuN3MtMzcuNS01LjgtNTIuNi0xNS43TDE2My4zIDQ2MS43ek0yODguMyAzMDRhNDggNDggMCAxIDAgLS43LTk2IDQ4IDQ4IDAgMSAwIC43IDk2eiJdfSxHJHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS13b3JkIixpY29uOlszODQsNTEyLFtdLCJmMWMyIiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xMzUuNCAyNzQuOGMtMi45LTEyLjktMTUuNy0yMS4xLTI4LjYtMTguMnMtMjEuMSAxNS43LTE4LjIgMjguNmwzMiAxNDRjMi4zIDEwLjUgMTEuNCAxOC4yIDIyLjIgMTguOHMyMC42LTYuMSAyNC0xNi40bDI1LjItNzUuNyAyNS4yIDc1LjdjMy40IDEwLjIgMTMuMiAxNi45IDI0IDE2LjRzMTkuOS04LjIgMjIuMi0xOC44bDMyLTE0NGMyLjktMTIuOS01LjMtMjUuOC0xOC4yLTI4LjZzLTI1LjggNS4zLTI4LjYgMTguMmwtMTMuMiA1OS40LTIwLjYtNjEuOGMtMy4zLTkuOC0xMi40LTE2LjQtMjIuOC0xNi40cy0xOS41IDYuNi0yMi44IDE2LjRsLTIwLjYgNjEuOC0xMy4yLTU5LjR6Il19LEUwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiZWQtcHVsc2UiLGljb246WzY0MCw1MTIsWyJwcm9jZWR1cmVzIl0sImY0ODciLCJNNTMxLjItMjIuNEw1NzIgMzIgNjE2IDMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC01NiAwYy03LjYgMC0xNC43LTMuNi0xOS4yLTkuNmwtMjQuMS0zMi4xLTQ3IDk5LjljLTMuNyA3LjgtMTEuMyAxMy4xLTE5LjkgMTMuN3MtMTYuOS0zLjQtMjEuNy0xMC42TDM4Ny4yIDgwIDM0NCA4MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw1NiAwYzggMCAxNS41IDQgMjAgMTAuN2wyNC40IDM2LjYgNDUuOS05Ny41YzMuNi03LjYgMTAuOS0xMi44IDE5LjMtMTMuN3MxNi42IDIuNyAyMS42IDkuNXpNMzIwIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5LjUgMCAyNi42IDM5LjljMTQuNCAyMS42IDM5LjMgMzMuOCA2NS4yIDMxLjlzNDguOC0xNy42IDU5LjgtNDEuMUw1MjcgMTI5LjJjNDUuOSA3LjIgODEgNDYuOSA4MSA5NC44bDAgMjI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjQtNDQ4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkwzMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMlM5NiA0Ni4zIDk2IDY0bDAgMjI0IDIyNCAwIDAtMTI4ek0xNDQgMTkyYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXX0sWSR0PUUwZSxaJHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGVudHMiLGljb246WzU3Niw1MTIsW10sImU1ODIiLCJNNTM5LjkgMzUybC05NS42IDAtOC40LTY2LjFjLTIuOS0yMy4yLTE1LjktNDMuOS0zNS40LTU2LjhMMjUyLjIgMTMxLjVjLTE4LTExLjktMzkuNy0xNS43LTYwLjEtMTEuNSAyLjUtNC4zIDUuOS03LjkgMTAuMS0xMC43TDM1MC42IDExLjZjMTAuNy03IDI0LjUtNyAzNS4yIDBsMTQ4LjQgOTcuN2M3LjggNS4xIDEzIDEzLjQgMTQuMiAyMi43bDIzLjMgMTg0YzIuNCAxOS4xLTEyLjUgMzYtMzEuNyAzNnpNNC44IDQ3NmwyMy4zLTE4NGMxLjItOS4zIDYuMy0xNy42IDE0LjItMjIuN2wxNDguNC05Ny43YzEwLjctNyAyNC41LTcgMzUuMiAwbDE0OC40IDk3LjdjNy44IDUuMSAxMyAxMy40IDE0LjIgMjIuN2wyMy4zIDE4NGMyLjQgMTkuMS0xMi41IDM2LTMxLjcgMzZsLTQ5LjcgMGMtMTEuMiAwLTIxLjUtNS44LTI3LjMtMTUuNGwtNzctMTI2LjdjLTEuNy0yLjgtNC44LTQuNi04LjEtNC42LTUuMyAwLTkuNSA0LjMtOS41IDkuNWwwIDEwNS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDM2LjUgNTEyYy0xOS4zIDAtMzQuMi0xNi45LTMxLjctMzZ6Il19LFVVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im11Zy1ob3QiLGljb246WzU3Niw1MTIsWzk3NDldLCJmN2I2IiwiTTE1Mi0xNmMtMTMuMyAwLTI0IDEwLjctMjQgMjQgMCAzOC45IDIzLjQgNTkuNCAzOS4xIDczLjFsMS4xIDFjMTYuMyAxNC4zIDIzLjggMjEuOCAyMy44IDM3LjkgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTM4LjktMjMuNC01OS40LTM5LjEtNzMuMWwtMS4xLTFDMTgzLjUgMzEuNyAxNzYgMjQuMSAxNzYgOCAxNzYtNS4zIDE2NS4zLTE2IDE1Mi0xNnpNOTYgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE5MmMwIDUzIDQzIDk2IDk2IDk2bDE5MiAwYzQxLjggMCA3Ny40LTI2LjcgOTAuNS02NGw1LjUgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFM1MTguNyAxOTIgNDQ4IDE5Mkw5NiAxOTJ6TTQ0OCAzODRsMC0xMjhjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6TTI4OCA4YzAtMTMuMy0xMC43LTI0LTI0LTI0UzI0MC01LjMgMjQwIDhjMCAzOC45IDIzLjQgNTkuNCAzOS4xIDczLjFsMS4xIDFjMTYuMyAxNC4zIDIzLjggMjEuOCAyMy44IDM3LjkgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTM4LjktMjMuNC01OS40LTM5LjEtNzMuMWwtMS4xLTFDMjk1LjUgMzEuNyAyODggMjQuMSAyODggOHoiXX0sTjBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvbHQiLGljb246WzQ0OCw1MTIsWzk4ODksInphcCJdLCJmMGU3IiwiTTMzOC44LTkuOWMxMS45IDguNiAxNi4zIDI0LjIgMTAuOSAzNy44TDI3MS4zIDIyNCA0MTYgMjI0YzEzLjUgMCAyNS41IDguNCAzMC4xIDIxLjFzLjcgMjYuOS05LjYgMzUuNWwtMjg4IDI0MGMtMTEuMyA5LjQtMjcuNCA5LjktMzkuMyAxLjNzLTE2LjMtMjQuMi0xMC45LTM3LjhMMTc2LjcgMjg4IDMyIDI4OGMtMTMuNSAwLTI1LjUtOC40LTMwLjEtMjEuMXMtLjctMjYuOSA5LjYtMzUuNWwyODgtMjQwYzExLjMtOS40IDI3LjQtOS45IDM5LjMtMS4zeiJdfSxYJHQ9TjBlLFEkdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJqYXIiLGljb246WzMyMCw1MTIsW10sImU1MTYiLCJNMzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw1NiAxNkM0Mi43IDE2IDMyIDUuMyAzMi04ek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em05NiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTkyeiJdfSxLJHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJ1Y2stcGxhbmUiLGljb246WzY0MCw1MTIsW10sImU1OGYiLCJNMTQ0IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAzMjBjMCAzMi41IDEyLjEgNjIuMSAzMiA4NC43bDAgMjcuM2MwIDcuMSAuOSAxNC4xIDIuNyAyMC43TDE5MiA0ODAgODMuOSA1MDdDNzMuOCA1MDkuNiA2NCA1MDEuOSA2NCA0OTEuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNzQtNTkuMiAwLTU3LjYtMTIyLjEgNDguOEMxMS40IDM5NS40IDAgMzg3LjcgMCAzNzYuNGwwLTQ0YzAtOCAzLTE1LjYgOC4zLTIxLjVMMTQ0IDE2MS42IDE0NCA0OHptMjI0IDgwbDE5MiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTYwYzAgMjYuMi0xMi42IDQ5LjQtMzIgNjRsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTE2MCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00OGMtMTkuNC0xNC42LTMyLTM3LjgtMzItNjRsMC0xNjBjMC00NC4yIDM1LjgtODAgODAtODB6bTAgMTc2bDE5MiAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyem0wIDg4YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjE2LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il19LEokdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLWhvbGRpbmctaGVhcnQiLGljb246WzU3Niw1MTIsW10sImY0YmUiLCJNMjc5LjYgMzFDMjY1LjUgMTEuNSAyNDIuOSAwIDIxOC45IDAgMTc3LjUgMCAxNDQgMzMuNSAxNDQgNzQuOWwwIDIuNGMwIDY0LjQgODIgMTMzLjQgMTIyLjIgMTYzLjMgMTMgOS43IDMwLjUgOS43IDQzLjUgMCA0MC4yLTMwIDEyMi4yLTk4LjkgMTIyLjItMTYzLjNsMC0yLjRjMC00MS40LTMzLjUtNzQuOS03NC45LTc0LjktMjQgMC00Ni42IDExLjUtNjAuNyAzMUwyODggNDIuNyAyNzkuNiAzMXpNMTA5LjMgMzQxLjVMNjYuNyAzODQgMzIgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMC41IDBjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM2MxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2IDI4MCA0MTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUyLjIgMGMtMzMuOSAwLTY2LjUgMTMuNS05MC41IDM3LjV6Il19LGU1PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXJvdGF0ZS1sZWZ0IixpY29uOls1MTIsNTEyLFs4NjM0LCJhcnJvdy1sZWZ0LXJvdGF0ZSIsImFycm93LXJvdGF0ZS1iYWNrIiwiYXJyb3ctcm90YXRlLWJhY2t3YXJkIiwidW5kbyJdLCJmMGUyIiwiTTI1NiA2NGMtNTYuOCAwLTEwNy45IDI0LjctMTQzLjEgNjRsNDcuMSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBTNjQgMTQuMyA2NCAzMmwwIDU0LjdDMTEwLjkgMzMuNiAxNzkuNSAwIDI1NiAwIDM5Ny40IDAgNTEyIDExNC42IDUxMiAyNTZTMzk3LjQgNTEyIDI1NiA1MTJjLTg3IDAtMTYzLjktNDMuNC0yMTAuMS0xMDkuNy0xMC4xLTE0LjUtNi42LTM0LjQgNy45LTQ0LjZzMzQuNC02LjYgNDQuNiA3LjljMzQuOCA0OS44IDkyLjQgODIuMyAxNTcuNiA4Mi4zIDEwNiAwIDE5Mi04NiAxOTItMTkyUzM2MiA2NCAyNTYgNjR6Il19LGVEdD1lNSx0RHQ9ZTUsYUR0PWU1LHJEdD1lNSxQMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1hbmdyeSIsaWNvbjpbNTEyLDUxMixbMTI4NTQ0LCJhbmdyeSJdLCJmNTU2IiwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTI1NiAzNjhjMjQuMSAwIDQ1LjQgMTEuOCA1OC41IDMwIDcuNyAxMC44IDIyLjcgMTMuMiAzMy41IDUuNXMxMy4yLTIyLjcgNS41LTMzLjVjLTIxLjctMzAuMi01Ny4zLTUwLTk3LjUtNTBzLTc1LjcgMTkuOC05Ny41IDUwYy03LjcgMTAuOC01LjMgMjUuOCA1LjUgMzMuNXMyNS44IDUuMyAzMy41LTUuNWMxMy4xLTE4LjIgMzQuNC0zMCA1OC41LTMwem0tODAtOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0uMyA5LjcgMy4yYzEwLjUgMy41IDIxLjgtMi4yIDI1LjMtMTIuNnMtMi4yLTIxLjgtMTIuNi0yNS4zbC05Ni0zMmMtMTAuNS0zLjUtMjEuOCAyLjItMjUuMyAxMi42czIuMiAyMS44IDEyLjYgMjUuM2wyOC45IDkuNmMtNC4xIDUuNC02LjYgMTIuMS02LjYgMTkuNCAwIDE3LjcgMTQuMyAzMiAzMiAzMnptMTkyLTMyYzAtNy4zLTIuNC0xNC02LjYtMTkuNGwyOC45LTkuNmMxMC41LTMuNSAxNi4xLTE0LjggMTIuNi0yNS4zcy0xNC44LTE2LjEtMjUuMy0xMi42bC05NiAzMmMtMTAuNSAzLjUtMTYuMSAxNC44LTEyLjYgMjUuM3MxNC44IDE2LjEgMjUuMyAxMi42bDkuNy0zLjIgMCAuM2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyeiJdfSxpRHQ9UDBlLG9EdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidXJzdCIsaWNvbjpbNTEyLDUxMixbXSwiZTRkYyIsIk0zNy42IDQuMkMyOC0yLjMgMTUuMi0xLjEgNyA3Uy0yLjMgMjggNC4yIDM3LjZsMTEyIDE2My4zLTk5LjYgMzIuM0M2LjcgMjM2LjQgMCAyNDUuNiAwIDI1NnM2LjcgMTkuNiAxNi42IDIyLjhsMTAzLjEgMzMuNC01Mi45IDEwMC42Yy00LjkgOS4zLTMuMiAyMC43IDQuMyAyOC4xczE4LjggOS4yIDI4LjEgNC4zbDEwMC42LTUyLjkgMzMuNCAxMDMuMWMzLjIgOS45IDEyLjQgMTYuNiAyMi44IDE2LjZzMTkuNi02LjcgMjIuOC0xNi42bDMzLjQtMTAzLjEgMTAwLjYgNTIuOWM5LjMgNC45IDIwLjcgMy4yIDI4LjEtNC4zczkuMi0xOC44IDQuMy0yOC4xbC01Mi45LTEwMC42IDEwMy4xLTMzLjRjOS45LTMuMiAxNi42LTEyLjQgMTYuNi0yMi44cy02LjctMTkuNi0xNi42LTIyLjhsLTEwNi41LTM0LjUgMjUuNy03MC40YzMuMi04LjggMS0xOC42LTUuNi0yNS4ycy0xNi40LTguOC0yNS4yLTUuNmwtNzAuNCAyNS43LTM0LjUtMTA2LjVDMjc1LjYgNi43IDI2Ni40IDAgMjU2IDBzLTE5LjYgNi43LTIyLjggMTYuNkwyMDAuOSAxMTYuMiAzNy42IDQuMnoiXX0sc0R0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InoiLGljb246WzM4NCw1MTIsWzEyMl0sIjVhIiwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMzIwIDBjMTIuNCAwIDIzLjcgNy4yIDI5IDE4LjRzMy42IDI0LjUtNC40IDM0LjFMMTAwLjMgNDE2IDM1MiA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xMi40IDAtMjMuNy03LjItMjktMTguNHMtMy42LTI0LjUgNC40LTM0LjFMMjgzLjcgOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXX0sSTBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhbmRhZ2UiLGljb246WzU3Niw1MTIsWzEyOTY1NywiYmFuZC1haWQiXSwiZjQ2MiIsIk00NjQgNDE2bDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTQ4IDAgMCAzMjB6TTQxNiA5NmwtMjU2IDAgMCAzMjAgMjU2IDAgMC0zMjB6TTY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0OCAwIDAtMzIwLTQ4IDB6TTIxNiAyMDhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTIwLTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMjE2IDMwNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdfSxuRHQ9STBlLGxEdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbGFuZS1jaXJjbGUtZXhjbGFtYXRpb24iLGljb246WzY0MCw1MTIsW10sImU1NTYiLCJNMjMyIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyA3OCA3MS41Yy02OS4zIDI5LTExOCA5Ny40LTExOCAxNzcuMiAwIDQ5LjMgMTguNiA5NC4zIDQ5LjEgMTI4LjNMMjg4IDUxMiAxNzkuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0M1OC43IDM5Ni40IDQ4IDM4OC43IDQ4IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIzMiAxNTEuMyAyMzIgMjR6TTQ5NiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDIyOGEyMCAyMCAwIDEgMCAwLTQwIDIwIDIwIDAgMSAwIDAgNDB6bTAtMTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2eiJdfSxjRHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVzLXNpZGUiLGljb246WzY0MCw1MTIsW10sImU4MWQiLCJNNDgwIDBjODguNCAwIDE2MCA3MS42IDE2MCAxNjBsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTUuNiAwYy0xMy4yIDM3LjMtNDguNiA2NC05MC40IDY0cy03Ny4zLTI2LjctOTAuNC02NGwtMTM5LjEgMGMtMTMuMiAzNy4zLTQ4LjcgNjQtOTAuNCA2NHMtNzcuMi0yNi43LTkwLjQtNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNDMgNDMgMCA5NiAwTDQ4MCAwek0xNjAgMzY4YTQ4IDQ4IDAgMSAwIDAgOTYgNDggNDggMCAxIDAgMC05NnptMzIwIDBhNDggNDggMCAxIDAgMCA5NiA0OCA0OCAwIDEgMCAwLTk2em0wLTMwNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2ek0yNDggMjI0bDEwNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTEwNCAwIDAgMTYwek05NiA2NEM3OC4zIDY0IDY0IDc4LjMgNjQgOTZsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMDQgMCAwLTE2MC0xMDQgMHoiXX0sZER0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1Z3MiLGljb246WzU3Niw1MTIsW10sImU0ZDAiLCJNNDQ3LjUgMTc0LjZjOC44LTguNCAyMi43LTguOSAzMi4yLS44czExIDIxLjkgNC4xIDMxLjlsLTEuNSAxLjktMjMgMjYuN2MyNi43IDEzLjUgNDYuMyAzOS4xIDUxLjQgNjkuNmwyNS4zIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI0IDAgMCAzMiAyNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNS4zIDBjLTcuNiA0NS40LTQ3LjEgODAtOTQuNyA4MHMtODctMzQuNi05NC43LTgwTDI5NiA0MzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTMyLTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjUuMyAwYzUuMS0zMC41IDI0LjctNTYuMSA1MS40LTY5LjZsLTIyLjktMjYuN2MtOC42LTEwLjEtNy41LTI1LjIgMi42LTMzLjhzMjUuMi03LjUgMzMuOCAyLjZsMjkuOCAzNC44IDI5LjgtMzQuOCAxLjctMS44em0tMjU2LTE5MmM4LjgtOC40IDIyLjctOC45IDMyLjItLjhzMTEgMjEuOSA0LjEgMzEuOWwtMS41IDEuOS0yMyAyNi43QzIzMCA1NS45IDI0OS41IDgxLjUgMjU0LjcgMTEybDI1LjMgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjQgMCAwIDMyIDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI1LjMgMGMtNy42IDQ1LjQtNDcuMSA4MC05NC43IDgwcy04Ny0zNC42LTk0LjctODBMNDAgMjQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI0IDAgMC0zMi0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI1LjMgMEM3MC41IDgxLjUgOTAgNTUuOSAxMTYuNyA0Mi40TDkzLjggMTUuNkM4NS4yIDUuNiA4Ni4zLTkuNiA5Ni40LTE4LjJzMjUuMi03LjUgMzMuOCAyLjZsMjkuOCAzNC44IDI5LjgtMzQuOCAxLjctMS44eiJdfSxGMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmVlci1tdWctZW1wdHkiLGljb246WzU3Niw1MTIsWyJiZWVyIl0sImYwZmMiLCJNNjQgODBjMC0yNi41IDIxLjUtNDggNDgtNDhsMjg4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNiA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTA4LjJjMCAyNC4yLTEzLjcgNDYuNC0zNS40IDU3LjJMNDQ4IDM3MS44IDQ0OCAzODRjMCA1My00MyA5Ni05NiA5NmwtMTkyIDBjLTUzIDAtOTYtNDMtOTYtOTZMNjQgODB6TTQ0OCAzMDAuMmw2NC0zMiAwLTEwOC4yLTY0IDAgMCAxNDAuMnpNMTkyIDE1MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjA4em04OCAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yMDh6bTg4IDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIwOHoiXX0sZkR0PUYwZSx1RHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWNpcmNsZS1jaGVjayIsaWNvbjpbNjQwLDUxMixbXSwiZTUzZSIsIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdfSxwRHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RhcGxlciIsaWNvbjpbNjQwLDUxMixbXSwiZTVhZiIsIk02NDAgMjk5LjNMNjQwIDQzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEw2NCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDAgMC00OC0zNTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMTYuNi0zMC4yLTUuNGMtMTkuNi0zLjUtMzMuOC0yMC41LTMzLjgtNDAuNCAwLTguOSAyLjktMTcuNSA4LjItMjQuNmwzNS42LTQ3LjVjMzIuOC00My44IDg0LjQtNjkuNiAxMzkuMS02OS42IDI3IDAgNTMuNiA2LjMgNzcuOCAxOC40TDU4Ni45IDIxMy41QzYxOS41IDIyOS43IDY0MCAyNjMgNjQwIDI5OS4zek00NDggMzA0bDAtMTYtMzIwLTU3LjEgMCA3My4xIDMyMCAweiJdfSxoRHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtbWVkaWNhbC1jaXJjbGUtY2hlY2siLGljb246WzY0MCw1MTIsW10sImU1MTEiLCJNMzA5LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVM1MC44IDI3MiA2NCAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTYgMGMtMjEuMi0yOS41LTM0LjMtNjUuMy0zNS45LTEwNEwyNzIgNDA4Yy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDIwIDBjMzQuOS00OC41IDkxLjctODAgMTU2LTgwIDEwLjcgMCAyMS4xIC45IDMxLjMgMi41TDMwOS44IDguNnpNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il19LG1EdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJuYWlyYS1zaWduIixpY29uOls0NDgsNTEyLFtdLCJlMWY2IiwiTTEyMi42IDQ2LjNjLTcuOC0xMS43LTIyLjQtMTctMzUuOS0xMi45UzY0IDQ5LjkgNjQgNjRsMCAxOTItMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMTQ0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNDQgODkuNSAwIDEwNy44IDE2MS44YzcuOCAxMS43IDIyLjQgMTcgMzUuOSAxMi45UzM4NCA0NjIuMSAzODQgNDQ4bDAtMTQ0IDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyIDAgMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxOTItNTcuNSAwLTEzOS44LTIwOS43ek0yOTQuNSAzMDRsMjUuNSAwIDAgMzguMy0yNS41LTM4LjN6TTE4NS41IDI1NmwtNTcuNSAwIDAtODYuMyA1Ny41IDg2LjN6Il19LGJVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndpZmkiLGljb246WzU3Niw1MTIsWyJ3aWZpLTMiLCJ3aWZpLXN0cm9uZyJdLCJmMWViIiwiTTI4OCA5NmMtOTAuOSAwLTE3My4yIDM2LTIzMy43IDk0LjYtMTIuNyAxMi4zLTMzIDEyLTQ1LjItLjdzLTEyLTMzIC43LTQ1LjJDODEuNyA3NC45IDE3OS45IDMyIDI4OCAzMlM0OTQuMyA3NC45IDU2Ni4zIDE0NC43YzEyLjcgMTIuMyAxMyAzMi42IC43IDQ1LjJzLTMyLjYgMTMtNDUuMiAuN0M0NjEuMiAxMzIgMzc4LjkgOTYgMjg4IDk2ek0yNDAgNDMyYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTE2OCAzMjYuMmMtMTEuNyAxMy4zLTMxLjkgMTQuNS00NS4yIDIuOHMtMTQuNS0zMS45LTIuOC00NS4yQzE2MSAyMzcuNCAyMjEuMSAyMDggMjg4IDIwOHMxMjcgMjkuNCAxNjggNzUuOGMxMS43IDEzLjMgMTAuNCAzMy41LTIuOCA0NS4ycy0zMy41IDEwLjQtNDUuMi0yLjhDMzc4LjYgMjkyLjkgMzM1LjggMjcyIDI4OCAyNzJzLTkwLjYgMjAuOS0xMjAgNTQuMnoiXX0sZ0R0PWJVLHhEdD1iVSxUNz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb25leS1jaGVjay1kb2xsYXIiLGljb246WzUxMiw1MTIsWyJtb25leS1jaGVjay1hbHQiXSwiZjUzZCIsIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNMjk2IDI4OGwxMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTI4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bS0yNC04OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTI4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0xNDggMTQ0YzExIDAgMjAgOSAyMCAyMGwwIDQgOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtNDcuNSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCA2LjEgNC40IDExLjMgMTAuNCAxMi4zbDQxLjcgN2MyNS4zIDQuMiA0My45IDI2LjEgNDMuOSA1MS44IDAgMjYuMS0xOSA0Ny43LTQ0IDUxLjhsMCA0LjdjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtNC0yNCAwYy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGw1NS41IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtNi4xLTQuNC0xMS4zLTEwLjQtMTIuM2wtNDEuNy03Qzk0LjUgMjY4IDc2IDI0Ni4xIDc2IDIyMC41IDc2IDE5MS43IDk5LjIgMTY4LjMgMTI4IDE2OGwwLTRjMC0xMSA5LTIwIDIwLTIweiJdfSxiRHQ9VDcsTzBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImV5ZS1sb3ctdmlzaW9uIixpY29uOls1NzYsNTEyLFsibG93LXZpc2lvbiJdLCJmMmE4IiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjQtOTYuNGMyLjctMi40IDUuNC00LjggOC03LjIgNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjYtNTYuOCAwLTEwNS42IDE4LjItMTQ2IDQ0LjJMNDEtMjQuOXpNMjA0LjUgMTM4LjdjMjMuNS0xNi44IDUyLjQtMjYuNyA4My41LTI2LjcgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCAzMS4xLTkuOSA1OS45LTI2LjcgODMuNWwtMzQuNy0zNC43YzEyLjctMjEuNCAxNy00Ny43IDEwLjEtNzMuNy0xMy43LTUxLjItNjYuNC04MS42LTExNy42LTY3LjktOC42IDIuMy0xNi43IDUuNy0yNCAxMGwtMzQuNy0zNC43ek04OCAxNTcuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOUwzMjguMiA0NjZjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDg4IDE1Ny45ek00NS43IDI1MS4zYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45TDE4MS45IDQ1NS41YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0NS43IDI1MS4zeiJdfSx2RHQ9TzBlLEIwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtYXJyb3ctdXAiLGljb246WzUxMiw1MTIsWyJhcnJvdy1jaXJjbGUtdXAiXSwiZjBhYSIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMTctMzc3bDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTM5LTM5IDAgMTUwLjFjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNTAuMS0zOSAzOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw4MC04MGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXX0seUR0PUIwZSx3RHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FtZXJhLXJldHJvIixpY29uOls1MTIsNTEyLFsxMjgyNDddLCJmMDgzIiwiTTAgNDE2bDAtMjA4IDEzNi4yIDBjMTMuNS0yMC4yIDMyLTM2LjggNTMuNy00OEwwIDE2MCAwIDEyNS43YzAtMzUuMyAyOC43LTY0IDY0LTY0bC4xIDBDNjUuMyA0NS4xIDc5LjEgMzIgOTYgMzJsMzIgMGMxNi45IDAgMzAuNyAxMy4xIDMxLjkgMjkuN2wzMi4xIDAgNTEuMi0yMy44YzguNC0zLjkgMTcuNi02IDI2LjktNkw0NDggMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NC0xOTAgMGMyMS43IDExLjIgNDAuMiAyNy44IDUzLjcgNDhsMTM2LjIgMCAwIDIwOGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0ek0yNTYgMTkyYTk2LjEgOTYuMSAwIDEgMCAwIDE5Mi4xIDk2LjEgOTYuMSAwIDEgMCAwLTE5Mi4xeiJdfSxNRHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2Fwc3VsZXMiLGljb246WzU3Niw1MTIsW10sImY0NmIiLCJNOTYgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAxMTItOTYgMCAwLTExMnptLTY0IDBsMCAyODhjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJzMTEyLTUwLjEgMTEyLTExMmwwLTEwNS44IDExNi4zIDE2OS41YzM1LjUgNTEuNyAxMDUuMyA2NC4zIDE1NiAyOC4xczYzLTEwNy41IDI3LjUtMTU5LjJMNDI3LjMgMTQ1LjNjLTM1LjUtNTEuNy0xMDUuMy02NC4zLTE1Ni0yOC4xLTUuNiA0LTEwLjcgOC40LTE1LjMgMTMuMWwwLTE4LjNDMjU2IDUwLjEgMjA1LjkgMCAxNDQgMFMzMiA1MC4xIDMyIDExMnpNMjk2LjYgMjQwLjJjLTE2LTIzLjMtMTAtNTUuMyAxMS45LTcxIDIxLjItMTUuMSA1MC41LTEwLjMgNjYgMTIuMmw2NyA5Ny42LTc5LjkgNTUuOS02NS05NC44eiJdfSx6RHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicG9vIixpY29uOls1MTIsNTEyLFsxMjgxNjldLCJmMmZlIiwiTTI2OC45IC45Yy01LjUtLjctMTEgMS40LTE0LjUgNS43cy00LjYgMTAuMS0yLjggMTUuNGMyLjggOC4yIDQuMyAxNi45IDQuMyAyNi4xIDAgNDQuMS0zNS43IDc5LjktNzkuOCA4MEwxNjAgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NCAwIDE5LjEgOC40IDM2LjMgMjEuNyA0OEwxMDQgMjQwYy0zOS44IDAtNzIgMzIuMi03MiA3MiAwIDIzLjIgMTEgNDMuOCAyOCA1Ny0zNC4xIDUuNy02MCAzNS4zLTYwIDcxIDAgMzkuOCAzMi4yIDcyIDcyIDcybDM2OCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyIDAtMzUuNy0yNS45LTY1LjMtNjAtNzEgMTctMTMuMiAyOC0zMy44IDI4LTU3IDAtMzkuOC0zMi4yLTcyLTcyLTcybC0xMy43IDBjMTMuMy0xMS43IDIxLjctMjguOSAyMS43LTQ4IDAtMzUuMy0yOC43LTY0LTY0LTY0bC01LjUgMGMzLjUtMTAgNS41LTIwLjggNS41LTMyIDAtNDguNi0zNi4yLTg4LjgtODMuMS05NS4xek0xOTIgMjU2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptNjQgMTA4LjNjMCAyLjQtLjcgNC44LTIuMiA2LjctOC4yIDEwLjUtMzkuNSA0NS05My44IDQ1cy04NS42LTM0LjYtOTMuOC00NWMtMS41LTEuOS0yLjItNC4zLTIuMi02LjcgMC02LjggNS41LTEyLjMgMTIuMy0xMi4zbDE2Ny40IDBjNi44IDAgMTIuMyA1LjUgMTIuMyAxMi4zeiJdfSxrRHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZWxldmF0b3IiLGljb246WzUxMiw1MTIsW10sImUxNmQiLCJNMjkyLjctNC43bDY0IDY0YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDY0LTY0YzQuNi00LjYgNS45LTExLjUgMy41LTE3LjRTNDM4LjUtMzIgNDMyLTMyTDMwNC0zMmMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40em0tMTYwLTIyLjZsLTY0IDY0Yy00LjYgNC42LTUuOSAxMS41LTMuNSAxNy40UzczLjUgNjQgODAgNjRsMTI4IDBjNi41IDAgMTIuMy0zLjkgMTQuOC05LjlzMS4xLTEyLjktMy41LTE3LjRsLTY0LTY0Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAxMjh6bTk2IDk2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNODAgNDAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDY0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnptMTkyIDBjMC0yNi41IDIxLjUtNDggNDgtNDhsNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2em0zMi0xMjhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXX0sU0R0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhZyIsaWNvbjpbNTEyLDUxMixbMTI3OTkxXSwiZjAyYiIsIk0zMi41IDk2bDAgMTQ5LjVjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsMTkyIDE5MmMyNSAyNSA2NS41IDI1IDkwLjUgMEw0ODMuMiAzMzMuM2MyNS0yNSAyNS02NS41IDAtOTAuNWwtMTkyLTE5MkMyNzkuMiAzOC43IDI2MyAzMiAyNDYgMzJMOTYuNSAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjR6bTExMiAxNmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LENEdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWNpcmNsZS1taW51cyIsaWNvbjpbNTc2LDUxMixbXSwiZTRlZCIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTY0IDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxMjggMGM4LjggMCAxNiA3LjIgMTYgMTZ6Il19LFIwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkb3duLWxvbmciLGljb246WzMyMCw1MTIsWyJsb25nLWFycm93LWFsdC1kb3duIl0sImYzMDkiLCJNMTM3LjQgNTM0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzMDAuOSAzNTIgMjg4IDM1MmwtNjQgMCAwLTMzNmMwLTI2LjUtMjEuNS00OC00OC00OGwtMzIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzMzYtNjQgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOFMuMiAzOTcuNSA5LjQgNDA2LjZsMTI4IDEyOHoiXX0sTER0PVIwZSxURHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29tcGFjdC1kaXNjIixpY29uOls1MTIsNTEyLFsxMjgxOTEsMTI4MTkyLDEyODQ0MF0sImY1MWYiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjU2IDMyYTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptLTk2LTMyYTk2IDk2IDAgMSAwIDE5MiAwIDk2IDk2IDAgMSAwIC0xOTIgMHptLTU2LTE2YzAtMzIuNCAxNi4zLTY2LjYgNDIuOC05My4yUzIwNy42IDEwNCAyNDAgMTA0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0Yy00Ny45IDAtOTMuNyAyMy41LTEyNy4xIDU2LjlTNTYgMTkyLjEgNTYgMjQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6Il19LF9EdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdWl0Y2FzZS1yb2xsaW5nIixpY29uOlszODQsNTEyLFtdLCJmNWMxIiwiTTE0NCAyNGMwLTQuNCAzLjYtOCA4LThsODAgMGM0LjQgMCA4IDMuNiA4IDhsMCA3Mi05NiAwIDAtNzJ6TTMyMCA5NmwtMzIgMCAwLTcyYzAtMzAuOS0yNS4xLTU2LTU2LTU2bC04MCAwQzEyMS4xLTMyIDk2LTYuOSA5NiAyNGwwIDcyLTMyIDBDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0IDAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI4OGMwLTM1LjMtMjguNy02NC02NC02NHpNMTIwIDIwOGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTAgMTI4bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sSDBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvb2stcXVyYW4iLGljb246WzQ0OCw1MTIsWyJxdXJhbiJdLCJmNjg3IiwiTTY0IDUxMmwyODggMGM1MyAwIDk2LTQzIDk2LTk2bDAtMzIwYzAtNTMtNDMtOTYtOTYtOTZMNDggMEMyMS41IDAgMCAyMS41IDAgNDhMMCAzMzZjMCAyMC45IDEzLjQgMzguNyAzMiA0NS4zTDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwek0zNTIgMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMCAwLTY0IDI1NiAwek0yNzMuMSAxNDQuNGMyLjUtNi4xIDExLjItNi4xIDEzLjcgMGwxMC4zIDI0LjggMjYuOCAyLjFjNi42IC41IDkuMiA4LjcgNC4yIDEzTDMwNy44IDIwMS45IDMxNCAyMjhjMS41IDYuNC01LjUgMTEuNS0xMS4xIDguMWwtMjIuOS0xNC0yMi45IDE0Yy01LjYgMy40LTEyLjYtMS42LTExLjEtOC4xbDYuMi0yNi4xLTIwLjQtMTcuNWMtNS00LjMtMi4zLTEyLjUgNC4yLTEzbDI2LjgtMi4xIDEwLjMtMjQuOHpNMTAwIDE5MmMwLTY4LjUgNTUuNS0xMjQgMTI0LTEyNCAyMy44IDAgNDYuMSA2LjcgNjUgMTguNCA0LjggMi45IDYuOSA4LjggNSAxNC4xcy03LjEgOC42LTEyLjcgOGMtMy4xLS4zLTYuMi0uNS05LjQtLjUtNDYuNCAwLTg0IDM3LjYtODQgODRzMzcuNiA4NCA4NCA4NGMzLjIgMCA2LjMtLjIgOS40LS41IDUuNi0uNiAxMC44IDIuNyAxMi43IDhzLS4zIDExLjItNSAxNC4xYy0xOC45IDExLjctNDEuMiAxOC40LTY1IDE4LjQtNjguNSAwLTEyNC01NS41LTEyNC0xMjR6Il19LEFEdD1IMGUsJER0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBob25lLXNsYXNoIixpY29uOls1NzYsNTEyLFtdLCJmM2RkIiwiTTUzNS0yNC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUw0MSA1MzcuMWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwxNDEuNSAzNjguNkM4OS4yIDMxMC41IDUxLjYgMjM4LjggMzQuOCAxNTkuNCAxOC43IDgzLjEgNzMuOSAyMC42IDEzOC41IDIuOWw1LjUtMS41YzE5LjctNS40IDQwLjMgNC43IDQ4LjEgMjMuNWw0MC41IDk3LjNjNi45IDE2LjUgMi4xIDM1LjYtMTEuOCA0N2wtNDQuMSAzNi4xYzEyLjkgMjguNSAyOS42IDU0LjggNDkuNSA3OC41TDUzNS0yNC45em0tMTUwLjQgNTM0Yy02My0xMy40LTEyMS4zLTM5LjgtMTcxLjctNzYuM0wyOTcuOCAzNDhjMTIuMiA4LjIgMjUgMTUuNiAzOC4zIDIyLjJMMzc0LjcgMzIzYzExLjMtMTMuOSAzMC40LTE4LjYgNDctMTEuOEw1MTkgMzUxLjhjMTguOCA3LjggMjguOSAyOC40IDIzLjUgNDguMWwtMS41IDUuNWMtMTcuNiA2NC42LTgwLjIgMTE5LjgtMTU2LjQgMTAzLjd6Il19LEREdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyb2FkLWNpcmNsZS1jaGVjayIsaWNvbjpbNjQwLDUxMixbXSwiZTU2NCIsIk0yODggMzJsLTc2LjMgMGMtMjkuNCAwLTU1LjEgMjAuMS02Mi4xIDQ4LjZMNjUuNCA0MjAuNUM1Ny45IDQ1MC43IDgwLjggNDgwIDExMiA0ODBsMjA5LjQgMGMtMTEuMi0yNC40LTE3LjQtNTEuNC0xNy40LTgwIDAtMjguNiA2LjItNTUuNyAxNy40LTgwLS41IDAtMSAwLTEuNSAwLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ5YzM1LjItMzkuOSA4Ni43LTY1IDE0NC02NSA5IDAgMTcuOCAuNiAyNi41IDEuOGwtMzItMTI5LjJDNDgzLjQgNTIuMSA0NTcuOCAzMiA0MjguMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHpNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il19LEVEdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaG9wLWxvY2siLGljb246WzY0MCw1MTIsW10sImU0YTUiLCJNMjEuNSAxODEuMUw3OC4zIDY3LjRDODkuMiA0NS43IDExMS4zIDMyIDEzNS42IDMybDMwNC45IDBjMjQuMiAwIDQ2LjQgMTMuNyA1Ny4yIDM1LjRsNTUuNiAxMTEuMWMtOC4yLTEuNi0xNi42LTIuNS0yNS4yLTIuNS01My43IDAtOTkuNyAzMy4xLTExOC43IDgwbC01Ny4zIDAgMCAxNzZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE5MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE3Ni4xYy0yNi44LTEuOS00OC0yNC4zLTQ4LTUxLjYgMC04IDEuOS0xNiA1LjUtMjMuMnpNMTI4IDI1NmwwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTEyLTE2MCAwem00MzIgNDguMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTQxNiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il19LHEwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpbWFnZS1wb3J0cmFpdCIsaWNvbjpbMzg0LDUxMixbInBvcnRyYWl0Il0sImYzZTAiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek04MCAzNjhjMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6TTE5MiAyNDhhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6Il19LE5EdD1xMGUsUER0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJyaWRnZS1sb2NrIixpY29uOls1NzYsNTEyLFtdLCJlNGNjIiwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMCAwIDMyLjJjMTMuOCAuNiAyNy4yIDIuOCA0MCA2LjRsMCA1MC43Yy0xNC44LTYtMzEtOS4zLTQ4LTkuMy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOGwwIDI0LjRjLS40IC4zLS43IC42LTEuMSAxLTE3LjMtMjUtNDYuMi00MS4zLTc4LjktNDEuMy01MyAwLTk2IDQzLTk2IDk2bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTRjMC0zOC44LTI2LjQtNzIuNi02NC04MmwwLTExMiA0MCAwIDAtNjQtOCAwQzE0LjMgOTYgMCA4MS43IDAgNjR6bTQyNCA2OC42bDAtMzYuNi04MCAwIDAgNjQgMTguOCAwYzE4LjItMTIuOCAzOC45LTIyLjIgNjEuMi0yNy40ek0yMTYgOTZsMCA2NCA4MCAwIDAtNjQtODAgMHptLTQ4IDBsLTgwIDAgMCA2NCA4MCAwIDAtNjR6TTQ5NiAzMDQuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il19LElEdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW1tZXIiLGljb246WzY0MCw1MTIsWzEyODI5Nl0sImY2ZTMiLCJNMjQ2LjkgMTguM0wyNzEgMy44YzIxLjYtMTMgNDYuMy0xOS44IDcxLjUtMTkuOCAzNi44IDAgNzIuMiAxNC42IDk4LjIgNDAuN2w2My45IDYzLjljMTUgMTUgMjMuNCAzNS40IDIzLjQgNTYuNmwwIDMwLjkgMTkuNyAxOS43IDAgMGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMHMxNS42IDQwLjkgMCA1Ni42bC02NCA2NGMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZMNDY0IDI0MCA0MzMuMSAyNDBjLTIxLjIgMC00MS42LTguNC01Ni42LTIzLjRsLTQ5LjEtNDkuMWMtMTUtMTUtMjMuNC0zNS40LTIzLjQtNTYuNmwwLTEyLjdjMC0xMS4yLTUuOS0yMS43LTE1LjUtMjcuNGwtNDEuNi0yNWMtMTAuNC02LjItMTAuNC0yMS4yIDAtMjcuNHpNNTAuNyA0MDIuN2wyMjIuMS0yMjIuMSA5MC41IDkwLjUtMjIyLjEgMjIyLjFjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNXoiXX0sVjBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXVwLTEtOSIsaWNvbjpbNTEyLDUxMixbInNvcnQtbnVtZXJpYy11cCJdLCJmMTYzIiwiTTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnpNNDE4LjcgMzhjLTguMy02LTE5LjEtNy43LTI4LjgtNC40bC00OCAxNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDUuOS0yIDAgNTEuNi0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDAgMC05NmMwLTEwLjMtNC45LTE5LjktMTMuMy0yNnpNMzY1LjEgNDMwLjZjLTkuNiAxNC44LTUuNCAzNC42IDkuNCA0NC4zczM0LjYgNS40IDQ0LjMtOS40bDQyLjEtNjQuOWMxMi40LTE5LjIgMTkuMS00MS42IDE5LjEtNjQuNSAwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDM2LjEgMjMuOSA2Ni43IDU2LjggNzYuNmwtMTEuNyAxOHpNMzc2IDMzNmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdfSxGRHQ9VjBlLE9EdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVzcy1rbmlnaHQiLGljb246WzM4NCw1MTIsWzk4MjJdLCJmNDQxIiwiTTE5Mi0zMmMxMDYgMCAxOTIgODYgMTkyIDE5MmwwIDEzMy41YzAgMTctNi44IDMzLjItMTguNyA0NS4yTDMyMCAzODQgMzcwLjggNDM0LjdjOC41IDguNSAxMy4yIDIwIDEzLjIgMzIgMCAyNS0yMC4zIDQ1LjItNDUuMiA0NS4zTDQ1LjMgNTEyYy0yNSAwLTQ1LjItMjAuMy00NS4yLTQ1LjMgMC0xMiA0LjgtMjMuNSAxMy4yLTMyTDY0IDM4NCA2NCAzNDkuNGMwLTE4LjcgOC4yLTM2LjQgMjIuMy00OC42bDg5LjctNzYuOC00OCAwLTEyLjEgMTIuMWMtMTIuNyAxMi43LTMwIDE5LjktNDggMTkuOS0zNy41IDAtNjcuOS0zMC40LTY3LjktNjcuOWwwLTguN2MwLTIyLjggOC4yLTQ0LjkgMjMuMS02Mi4zTDk2IDMyIDk2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHpNMTYwIDcyYTI0IDI0IDAgMSAwIDAgNDggMjQgMjQgMCAxIDAgMC00OHoiXX0sQkR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWZsb29kLXdhdGVyLWNpcmNsZS1hcnJvdy1yaWdodCIsaWNvbjpbNjQwLDUxMixbXSwiZTUwZiIsIk0yODguNSAxMTJhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHpNMTQxLjIgNDQuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMGw1NiA1NmM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNTYgNTZjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMjguNy0yOC43LTg5LjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw4OS40IDAtMjguNy0yOC43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnpNMzM2LjUgMTEyYzAgNzEuMS0zOC42IDEzMy4xLTk2IDE2Ni4zbDAgMTIuOGMyMi4xIDQuNSA0My40IDEzLjkgNjIuNCAyOC4yIDIyLjEgMTYuNiAyOS4xIDE2LjYgNTEuMiAwIDI3LjUtMjAuNyA1OS45LTMxLjIgOTIuNC0zMS40IDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNCA2LjkgNS4yIDEyLjggOSAxOCAxMS43IC42IC4zIDEuMiAuNiAxLjggMSA0LjIgMi4zIDguNSA0LjYgMTIuNiAxLjUgNi00LjUgMTIuNi04IDE5LjMtMTAuNGwwLTExNS4yIDQuNSAwYzE1LjIgMCAyNy41LTEyLjMgMjcuNS0yNy41IDAtNy45LTMuNC0xNS41LTkuNC0yMC43TDQ0NC41IDEwLjVDNDM2LjggMy43IDQyNi44IDAgNDE2LjUgMHMtMjAuMyAzLjctMjggMTAuNUwzMjkuOSA2MS44YzQuMyAxNiA2LjYgMzIuOCA2LjYgNTAuMnptMzIgODhjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4ek00NzUuMSA0MTIuMWMxOSAxNC40IDQxLjkgMjguMiA2Ny4yIDMzLjMgMjYuNSA1LjQgNTQuMyAuOCA4MC43LTE5LjEgMTAuNi04IDEyLjctMjMgNC43LTMzLjZzLTIzLTEyLjctMzMuNi00LjdjLTE0LjkgMTEuMi0yOC42IDEzLjEtNDIuMyAxMC4zLTE0LjktMy0zMC45LTExLjktNDcuOC0yNC42LTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNTMjkwIDM5MS44IDI2NiAzNzMuN2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTIxLjYgMTYuMy00MS4zIDI1LjgtNTguOSAyNS43LTkuNi0uMS0xOS45LTMtMzEuMi0xMS41LTEwLjYtOC0yNS42LTUuOS0zMy42IDQuN3MtNS45IDI1LjYgNC43IDMzLjZjMTkuMSAxNC40IDM5LjQgMjEgNTkuOCAyMS4xIDMzLjkgLjIgNjQuMy0xNy40IDg4LjEtMzUuMyAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwem0tNzEuMiA5NmMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAxOSAxNC40IDQxLjkgMjguMiA2Ny4yIDMzLjMgMjYuNSA1LjQgNTQuMyAuOCA4MC43LTE5LjEgMTAuNi04IDEyLjctMjMgNC43LTMzLjZzLTIzLTEyLjctMzMuNi00LjdjLTE0LjkgMTEuMi0yOC42IDEzLjEtNDIuMyAxMC4zLTE0LjktMy0zMC45LTExLjktNDcuOC0yNC42LTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNTMjkwIDQ4Ny44IDI2NiA0NjkuN2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTIxLjYgMTYuMy00MS4zIDI1LjgtNTguOSAyNS43LTkuNi0uMS0xOS45LTMtMzEuMi0xMS41LTEwLjYtOC0yNS42LTUuOS0zMy42IDQuN3MtNS45IDI1LjYgNC43IDMzLjZjMTkuMSAxNC40IDM5LjQgMjEgNTkuOCAyMS4xIDMzLjkgLjIgNjQuMy0xNy40IDg4LjEtMzUuMyAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45eiJdfSxfNz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy11cC1yaWdodC1mcm9tLXNxdWFyZSIsaWNvbjpbNTEyLDUxMixbImV4dGVybmFsLWxpbmsiXSwiZjA4ZSIsIk0zMjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4Mi43IDAtMjAxLjQgMjAxLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMNDQ4IDEwOS4zIDQ0OCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMjAgMHpNODAgOTZDMzUuOCA5NiAwIDEzMS44IDAgMTc2TDAgNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwbDI1NiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZMODAgNDQ4Yy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDgwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgOTZ6Il19LFJEdD1fNyxIRHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctZG93bi11cC1hY3Jvc3MtbGluZSIsaWNvbjpbNTEyLDUxMixbXSwiZTRhZiIsIk0yNjUuNCAxMDUuNGw5Ni05NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtNDEuNC00MS40IDAgMTE0LjcgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIwIDAgMCAxMTQuNyA0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtOTYgOTZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiA0MDIuNyA5NiAyODggMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyMCAwIDAtMTE0LjctNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM3pNNDE2IDMzNmwwIDE0NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE0NCA2NCAwek05NiAxNzZMOTYgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE0NC02NCAweiJdfSxVMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1ncmluLWJlYW0iLGljb246WzUxMiw1MTIsWzEyODUxNiwiZ3Jpbi1iZWFtIl0sImY1ODIiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXX0scUR0PVUwZSxqMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmVjdGFuZ2xlLWFkIixpY29uOls1MTIsNTEyLFsiYWQiXSwiZjY0MSIsIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNNDE2IDE4NGwwIDE0NGMwIDEzLjMtMTAuNyAyNC0yNCAyNC03LjEgMC0xMy41LTMuMS0xNy45LTgtMTAuMiA1LjEtMjEuOCA4LTM0LjEgOC00MiAwLTc2LTM0LTc2LTc2czM0LTc2IDc2LTc2YzkuOSAwIDE5LjMgMS45IDI4IDUuM2wwLTIxLjNjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHptLTQ4IDkyYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTE2MCAyMDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyIDQ4IDAgMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDB6bTMyIDk2bC00OCAwIDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMDRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEwNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI0eiJdfSxWRHQ9ajBlLFcwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib29rLXRhbmFraCIsaWNvbjpbNDQ4LDUxMixbInRhbmFraCJdLCJmODI3IiwiTTM1MiA1MTJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNjYuN0MxMy40IDM3NC43IDAgMzU2LjkgMCAzMzZMMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBMMzUyIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDMyMGMwIDUzLTQzIDk2LTk2IDk2em0zMi05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjU2IDAgMCA2NCAyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMTEzLjkgMjI5Yy0xLjIgMi0xLjkgNC4yLTEuOSA2LjYgMCA2LjkgNS42IDEyLjUgMTIuNSAxMi41bDU2LjkgMCAzMC41IDQ5LjJjMi42IDQuMiA3LjIgNi44IDEyLjIgNi44czkuNi0yLjYgMTIuMi02LjhsMzAuNS00OS4yIDU2LjkgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC0yLjMtLjYtNC42LTEuOS02LjZsLTI3LjgtNDUgMjcuOC00NWMxLjItMiAxLjktNC4yIDEuOS02LjYgMC02LjktNS42LTEyLjUtMTIuNS0xMi41bC01Ni45IDAtMzAuNS00OS4yQzIzMy42IDY2LjYgMjI5IDY0IDIyNCA2NHMtOS42IDIuNi0xMi4yIDYuOGwtMzAuNSA0OS4yLTU2LjkgMGMtNi45IDAtMTIuNSA1LjYtMTIuNSAxMi41IDAgMi4zIC42IDQuNiAxLjkgNi42bDI3LjggNDUtMjcuOCA0NXoiXX0sVUR0PVcwZSxHMGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG90LXR1Yi1wZXJzb24iLGljb246WzQ0OCw1MTIsWyJob3QtdHViIl0sImY1OTMiLCJNMjQwIDQwYzAgMTMuNiA1LjggMjYuNSAxNS44IDM1LjZsMjYuNSAyMy44YzI0IDIxLjYgMzcuNyA1Mi4zIDM3LjcgODQuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE4LjctNy45LTM2LjQtMjEuOC00OC45bC0yNi41LTIzLjhDMjAzLjUgOTMuMSAxOTIgNjcuMiAxOTIgNDAgMTkyIDI2LjcgMjAyLjcgMTYgMjE2IDE2czI0IDEwLjcgMjQgMjR6TTAgMzM2bDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTkuNyAwYzguMSAwIDE2LjIgMS42IDIzLjggNC42bDEzNy4xIDU0LjhjNy42IDMgMTUuNiA0LjYgMjMuOCA0LjZMMzg0IDI1NmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzM2em05Ni0xNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTE1MiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MHptMTA0LTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMzI4IDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMTMuNiA1LjggMjYuNSAxNS44IDM1LjZsMjYuNSAyMy44YzI0IDIxLjYgMzcuNyA1Mi4zIDM3LjcgODQuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE4LjctNy45LTM2LjQtMjEuOC00OC45bC0yNi41LTIzLjhDMzE1LjUgOTMuMSAzMDQgNjcuMiAzMDQgNDAgMzA0IDI2LjcgMzE0LjcgMTYgMzI4IDE2ek02NCA0MGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnoiXX0sakR0PUcwZSxXRHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1oYWxmLWRhc2hlZCIsaWNvbjpbMzg0LDUxMixbXSwiZTY5OCIsIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NGwwIDI1NiAzODQgMCAwLTE0OS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI1OC43IDE4LjdDMjQ2LjcgNi43IDIzMC41IDAgMjEzLjUgMEw2NCAwek0zMjUuNSAxNzZMMjMyIDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjA4IDU4LjUgMzI1LjUgMTc2ek0wIDM1MmwwIDY0IDY0IDAgMC02NC02NCAwek02NCA1MTJsMC02NC02NCAwYzAgMzUuMyAyOC43IDY0IDY0IDY0em0zMiAwbDgwIDAgMC02NC04MCAwIDAgNjR6bTExMiAwbDgwIDAgMC02NC04MCAwIDAgNjR6bTExMiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bC02NCAwIDAgNjR6bTY0LTE2MGwtNjQgMCAwIDY0IDY0IDAgMC02NHoiXX0sWTBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im91dGRlbnQiLGljb246WzQ0OCw1MTIsWyJkZWRlbnQiXSwiZjAzYiIsIk0uNCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzg0IDBDMTQuOCA5NiAuNCA4MS43IC40IDY0em0xOTIgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTMyIDk2bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNLjQgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zODQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TS43IDI2OC42Yy04LjItNi40LTguMi0xOC45IDAtMjUuM2wxMDEuOS03OS4zYzEwLjUtOC4yIDI1LjgtLjcgMjUuOCAxMi42bDAgMTU4LjZjMCAxMy4zLTE1LjMgMjAuOC0yNS44IDEyLjZMLjcgMjY4LjZ6Il19LEdEdD1ZMGUsWUR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtcGVhY2UiLGljb246WzQ0OCw1MTIsWzk5OTZdLCJmMjViIiwiTTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjA4LTY0IDAgMC0yMDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTY0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek02MS4zIDUxLjJMMTQzLjkgMjQwIDc0LjEgMjQwIDIuNyA3Ni44Qy00LjQgNjAuNiAzIDQxLjggMTkuMiAzNC43UzU0LjIgMzUgNjEuMyA1MS4yem0yNyAyMjEuM2wtLjItLjUgOTUuOSAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDU2IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNiAxMy4yIDAgMjUuNC00IDM1LjYtMTAuOCA4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44IDExLjcgMCAyMi42LTMuMSAzMi04LjZsMCA4LjZjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBsLTYxLjcgMGMtNDIuNCAwLTgzLjEtMTYuOS0xMTMuMS00Ni45TDY5LjUgNDUzLjVDNDUuNSA0MjkuNSAzMiAzOTYuOSAzMiAzNjNsMC0yN2MwLTMyLjcgMjQuNi01OS43IDU2LjMtNjMuNXoiXX0sWkR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYWQtc2lkZS12aXJ1cyIsaWNvbjpbNTEyLDUxMixbXSwiZTA2NCIsIk0zMjkuNyA0NDhjLTUuMSAwLTkuNyAzLjctOS43IDguOGwwIDcuMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYwIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNjMuNmMwLTEyLjYtNS4xLTI0LjUtMTMuMS0zNC4yLTMxLjgtMzguNy01MC45LTg4LjItNTAuOS0xNDIuMiAwLTEyMy43IDEwMC4zLTIyNCAyMjQtMjI0IDExMi43IDAgMjA2IDgzLjMgMjIxLjcgMTkxLjcgLjQgMyAxLjcgNS45IDMuNiA4LjNsMzUuOCA0Mi45YzcgOC40IDEwLjkgMTkuMSAxMC45IDMwLjEgMCAyNS45LTIxIDQ3LTQ3IDQ3bC0xIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zOC4zIDB6TTIyNCA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjQgMCAyMi45LTI3LjcgMzQuNC00My45IDE4LjItOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWMxNi4yIDE2LjIgNC43IDQzLjktMTguMiA0My45LTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRjMjIuOSAwIDM0LjQgMjcuNyAxOC4yIDQzLjktOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwYzE2LjItMTYuMiA0My45LTQuNyA0My45IDE4LjIgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTIyLjkgMjcuNy0zNC40IDQzLjktMTguMiA5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjljLTE2LjItMTYuMi00LjctNDMuOSAxOC4yLTQzLjkgMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTIyLjkgMC0zNC40LTI3LjctMTguMi00My45IDkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBjLTE2LjIgMTYuMi00My45IDQuNy00My45LTE4LjIgMC0xMy4zLTEwLjctMjQtMjQtMjR6bS0zMiA4OGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQwIDg4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il19LFhEdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb21wYXNzIixpY29uOls1MTIsNTEyLFsxMjk1MTddLCJmMTRlIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem01MC43LTE4Ni45TDE2Mi40IDM4MC42Yy0xOS40IDcuNS0zOC41LTExLjYtMzEtMzFsNTUuNS0xNDQuM2MzLjMtOC41IDkuOS0xNS4xIDE4LjQtMTguNGwxNDQuMy01NS41YzE5LjQtNy41IDM4LjUgMTEuNiAzMSAzMUwzMjUuMSAzMDYuN2MtMy4yIDguNS05LjkgMTUuMS0xOC40IDE4LjR6TTI4OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXX0sUUR0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlbi1uaWIiLGljb246WzUxMiw1MTIsWzEwMDAxXSwiZjVhZCIsIk0zNjguNSAxOC4zbC01MC4xIDUwLjEgMTI1LjMgMTI1LjMgNTAuMS01MC4xYzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDQ0Ny43IDE4LjNjLTIxLjktMjEuOS01Ny4zLTIxLjktNzkuMiAwek0yNzkuMyA5Ny4ybC0uNSAuMS0xNDQuMSA0My4yYy0xOS45IDYtMzUuNyAyMS4yLTQyLjMgNDFMMy44IDQ0NS44Yy0yLjkgOC43LTEuOSAxOC4yIDIuNSAyNkwxNjEuNyAzMTYuNGMtMS4xLTQtMS42LTguMS0xLjYtMTIuNCAwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4LTIxLjUgNDgtNDggNDhjLTQuMyAwLTguNS0uNi0xMi40LTEuNkw0MC4zIDUwNS43YzcuOCA0LjQgMTcuMiA1LjQgMjYgMi41bDI2NC4zLTg4LjZjMTkuNy02LjYgMzUtMjIuNCA0MS00Mi4zbDQzLjItMTQ0LjEgLjEtLjUtMTM1LjUtMTM1LjV6Il19LEtEdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW50LWFycm93cy1kb3duIixpY29uOls1MTIsNTEyLFtdLCJlNTgxIiwiTTE4NS41IDEyMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJ6bTI0OCA3Mmw3Mi03MmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDB6TTYwLjMgMjkyLjZMMzcuMSA0NzZjLTIuNCAxOS4xIDEyLjUgMzYgMzEuNyAzNmwxNTQuNSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTE3LjRjMC01LjkgNC43LTEwLjYgMTAuNi0xMC42IDQgMCA3LjcgMi4zIDkuNSA1LjlsNjguMiAxMzYuNWM1LjQgMTAuOCAxNi41IDE3LjcgMjguNiAxNy43bDcxLjkgMGMxOS4zIDAgMzQuMi0xNi45IDMxLjctMzZMNDUyLjcgMjkyLjdjLTEuMi05LjctNi45LTE4LjQtMTUuMy0yMy40TDI3MS45IDE2OS45Yy0xMC4yLTYuMS0yMi45LTYuMS0zMy4xIC4xTDc1LjQgMjY5LjNjLTguMyA1LjEtMTMuOSAxMy43LTE1LjEgMjMuM3oiXX0sWjBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZvcndhcmQtZmFzdCIsaWNvbjpbNTEyLDUxMixbOTE5NywiZmFzdC1mb3J3YXJkIl0sImYwNTAiLCJNMTkuOCA0NzcuNmMxMiA1IDI1LjcgMi4yIDM0LjktNi45TDIyNCAzMDEuMyAyMjQgNDQ4YzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlMNDQ4IDMwMS4zIDQ0OCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE0Ni43LTE2OS40LTE2OS40Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMyMjQgNTEuMSAyMjQgNjRMMjI0IDIxMC43IDU0LjYgNDEuNGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02LjlTMCA1MS4xIDAgNjRMMCA0NDhjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnoiXX0sSkR0PVowZSxlRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY3JvcCIsaWNvbjpbNTEyLDUxMixbXSwiZjEyNSIsIk00NDggMTA5LjNsNTQuNi01NC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDQwMi43IDY0IDE3NiA2NCAxNzYgMTI4IDMzOC43IDEyOCAxMjggMzM4LjcgMTI4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDE0LjMgNjQgMzJsMCAzMi0zMiAwQzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwOCAwIDAtNjQtMTYyLjcgMCAyMTAuNy0yMTAuNyAwIDMwNi43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjc0Ljd6Il19LFgwZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3aGlza2V5LWdsYXNzIixpY29uOls0NDgsNTEyLFsxMjkzNDcsImdsYXNzLXdoaXNrZXkiXSwiZjdhMCIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgMzUyYzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDE5MiAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4bDAtMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyek02NCAyNTZsMC0xNjAgMzIwIDAgMCAxNjAtMzIwIDB6Il19LHRFdD1YMGUsYUV0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZSIsaWNvbjpbNDQ4LDUxMixbOTYzMiw5NzIzLDk3MjQsNjE1OTBdLCJmMGM4IiwiTTY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMnoiXX0sUTBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3JpbiIsaWNvbjpbNTEyLDUxMixbMTI4NTEyLCJncmluIl0sImY1ODAiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LHJFdD1RMGUsaUV0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtY29udHJhY3QiLGljb246WzM4NCw1MTIsW10sImY1NmMiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTg4IDY0Qzc0LjcgNjQgNjQgNzQuNyA2NCA4OHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNjR6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptNzAuMyAxNjBjLTExLjMgMC0yMS45IDUuMS0yOC45IDEzLjlMNjkuMyA0MDljLTguMyAxMC4zLTYuNiAyNS41IDMuNyAzMy43czI1LjUgNi42IDMzLjctMy44bDQ3LjEtNTguOCAxNS4yIDUwLjdjMyAxMC4yIDEyLjQgMTcuMSAyMyAxNy4xbDEwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04Ni4xIDAtMTYuMS01My42Yy00LjctMTUuNy0xOS4xLTI2LjQtMzUuNS0yNi40eiJdfSxvRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5nbGUtdXAiLGljb246WzM4NCw1MTIsWzg5NjNdLCJmMTA2IiwiTTE2OS40IDEzNy40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMTkyIDIwNS4zIDU0LjYgMzQyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2MC0xNjB6Il19LEswZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLXNtaWxlIixpY29uOls1MTIsNTEyLFsxMjg1NzgsInNtaWxlIl0sImYxMTgiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NS40IDMyMS45YzIwLjQgMjggNTMuNCA0Ni4xIDkwLjYgNDYuMXM3MC4yLTE4LjEgOTAuNi00Ni4xYzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuM3MxMy4xIDIyLjggNS4zIDMzLjVDMzU2LjMgMzkwIDMwOS4yIDQxNiAyNTYgNDE2cy0xMDAuMy0yNi0xMjkuNC02NS45Yy03LjgtMTAuNy01LjQtMjUuNyA1LjMtMzMuNXMyNS43LTUuNCAzMy41IDUuM3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxzRXQ9SzBlLG5FdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tZHJlc3MtYnVyc3QiLGljb246WzY0MCw1MTIsW10sImU1NDQiLCJNMjA4IDQwLjFjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0ek04IDE0NC4xYzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em05Mi41IDE0MS40bDMzLjktMzMuOWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDY2LjYgMjUxLjZjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMHpNNjYuNiAyLjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDMzLjkgMzMuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMMTAwLjUgMi43QzkxLjEtNi43IDc2LTYuNyA2Ni42IDIuN3pNMzUyIDgwYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek0yNDYuMiAzODRsMjUuOCAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMzIgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDI1LjggMGMxMC45IDAgMTguNi0xMC43IDE1LjItMjEuMWwtNDMtMTI5IDQ4LjMgNjUuMWMxMC41IDE0LjIgMzAuNiAxNy4yIDQ0LjggNi42czE3LjItMzAuNiA2LjYtNDQuOGwtNzAuNS05NUM0MzQgMTMyIDM5NC4zIDExMiAzNTIgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZsNDguMy02NS4xLTQzIDEyOWMtMy41IDEwLjQgNC4zIDIxLjEgMTUuMiAyMS4xeiJdfSxsRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGl2aWRlIixpY29uOls0NDgsNTEyLFsxMDEzNSwyNDddLCJmNTI5IiwiTTIyNCA0OGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMCAyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTY4IDQwOGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6Il19LGNFdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb2RlLWZvcmsiLGljb246WzQ0OCw1MTIsW10sImUxM2IiLCJNODAgMTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODAtMjRjMCAzMi44LTE5LjcgNjEtNDggNzMuM2wwIDIyLjdjMCAyNi41IDIxLjUgNDggNDggNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMi43Yy0yOC4zLTEyLjMtNDgtNDAuNS00OC03My4zIDAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM2wwIDIyLjdjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJsLTMyIDAgMCA3MC43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjMgMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0zMi44IDE5LjctNjEgNDgtNzMuM2wwLTcwLjctMzIgMEM5OC4xIDI4OCA0OCAyMzcuOSA0OCAxNzZsMC0yMi43QzE5LjcgMTQxIDAgMTEyLjggMCA4MCAwIDM1LjggMzUuOCAwIDgwIDBzODAgMzUuOCA4MCA4MHptMjA4IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpNMjQ4IDQzMmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdfSxkRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtZmxhZyIsaWNvbjpbNjQwLDUxMixbXSwiZTUwZCIsIk00NzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDAgMCAyODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00NDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTI4My41IDU5LjFsMTAwLjUgOTYuOSAwIDM1Ni0yNTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNDQtMTkuOSAwYy0xNS41IDAtMjguMS0xMi42LTI4LjEtMjguMSAwLTcuNiAzLjEtMTQuOSA4LjYtMjAuMkwyMjguNSA1OS4xQzIzNS45IDUyIDI0NS43IDQ4IDI1NiA0OHMyMC4xIDQgMjcuNSAxMS4xek0yMzIgMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMHoiXX0sdDU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVpbGRpbmctY29sdW1ucyIsaWNvbjpbNTEyLDUxMixbImJhbmsiLCJpbnN0aXR1dGlvbiIsIm11c2V1bSIsInVuaXZlcnNpdHkiXSwiZjE5YyIsIk0yNzEuOSAyMC4yYy05LjgtNS42LTIxLjktNS42LTMxLjggMGwtMjI0IDEyOGMtMTIuNiA3LjItMTguOCAyMi0xNS4xIDM2UzE3LjUgMjA4IDMyIDIwOGwzMiAwIDAgMjA4IDAgMC01MS4yIDM4LjRDNC43IDQ2MC40IDAgNDY5LjkgMCA0ODAgMCA0OTcuNyAxNC4zIDUxMiAzMiA1MTJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC0xMC4xLTQuNy0xOS42LTEyLjgtMjUuNmwtNTEuMi0zOC40IDAtMjA4IDMyIDBjMTQuNSAwIDI3LjItOS44IDMwLjktMjMuOHMtMi41LTI4LjgtMTUuMS0zNmwtMjI0LTEyOHpNNDAwIDIwOGwwIDIwOC02NCAwIDAtMjA4IDY0IDB6bS0xMTIgMGwwIDIwOC02NCAwIDAtMjA4IDY0IDB6bS0xMTIgMGwwIDIwOC02NCAwIDAtMjA4IDY0IDB6TTI1NiA5NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LGZFdD10NSx1RXQ9dDUscEV0PXQ1LGhFdD10NSxtRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicnVnIixpY29uOls1NzYsNTEyLFtdLCJlNTY5IiwiTTI0IDY0bDU2IDAgMCAzODQtNTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC00MC04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtMzItOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTMyLTggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC00MC04IDBDMTAuNyAxMTIgMCAxMDEuMyAwIDg4UzEwLjcgNjQgMjQgNjR6bTEwNCAwbDMyMCAwIDAgMzg0LTMyMCAwIDAtMzg0ek01NzYgODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQwIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgMzIgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCAzMiA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQwIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMCAwLTM4NCA1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0eiJdfSxnRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29kZS1tZXJnZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjM4NyIsIk04MCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTMyLjQgOTcuMmMyOC0xMi40IDQ3LjYtNDAuNSA0Ny42LTczLjIgMC00NC4yLTM1LjgtODAtODAtODBTMCAzNS44IDAgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDIwNS4zQzE5LjcgMzcxIDAgMzk5LjIgMCA0MzIgMCA0NzYuMiAzNS44IDUxMiA4MCA1MTJzODAtMzUuOCA4MC04MGMwLTMyLjgtMTkuNy02MS00OC03My4zbDAtODYuNmMyNi43IDIwLjEgNjAgMzIgOTYgMzJsODYuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDggNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBjLTMyLjggMC02MSAxOS43LTczLjMgNDhMMjA4IDI0MGMtNDkuOSAwLTkxLTM4LjEtOTUuNi04Ni44ek04MCA0MDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0zNDQgMjcyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il19LHhFdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZS10c3VuYW1pIixpY29uOls2NDAsNTEyLFtdLCJlNTE1IiwiTTI4OCAxNkMxNTUuNSAxNiA0OCAxMjMuNSA0OCAyNTZTMTU1LjUgNDk2IDI4OCA0OTZjNy40IDAgMTkuNy0yLjMgMzMuNy03LjMgMTMuOC00LjkgMjcuMS0xMS43IDM2LjctMTguOSAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTUuNCAxMS42IDM1LjMgMjEuMSA1NSAyNC40IDE5LjUgMy4zIDM3IC40IDUxLjEtMTAuMiAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI3LjMgMjAuNS01OS4yIDI0LTg3LjkgMTkuMi0yOC41LTQuOC01NS40LTE4LTc1LjktMzMuNC0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0xNC41IDEwLjktMzIuNCAxOS43LTQ5LjUgMjUuOC0xNi44IDYtMzQuOSAxMC4xLTQ5LjkgMTAuMWwtLjEgMEMxMjguOSA1NDMuOSAwIDQxNSAwIDI1NiAwIDk2LjkgMTI4LjktMzIgMjg4LTMyIDMwMS4zLTMyIDMxMi0yMS4zIDMxMi04cy0xMC43IDI0LTI0IDI0em00NC44IDE2Ni40bDk2LTcyYzExLjQtOC41IDI3LjEtOC41IDM4LjUgMGw5NS41IDcyYzggNiAxMi43IDE1LjUgMTIuNyAyNS41bC4zIDEyMS41Yy0yLjIgMS4zLTQuMyAyLjYtNi40IDQuMi00LjMgMy4xLTguNyAuOC0xMy4yLTEuNWwtMS4yLS42LS43LS4zYy01LjQtMi43LTExLjctNi42LTE4LjktMTEuNy0yOS41LTIxLjEtNjQuMy0zMS42LTk5LjEtMzEuNC0zNC4xIC4yLTY4LjEgMTAuNy05NyAzMS40LTcuOCA1LjYtMTMuOCA5LjMtMTkuMyAxMS4yTDMyMCAyMDhjMC0xMC4xIDQuNy0xOS42IDEyLjgtMjUuNnptNTQuNiAyMjkuN2MtMTQuNSAxMC45LTMyLjQgMTkuNy00OS41IDI1LjgtMTYuOCA2LTM0LjkgMTAuMS00OS45IDEwLjEtMTA2IDAtMTkyLTg2LTE5Mi0xOTJTMTgyIDY0IDI4OCA2NGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NGM3LjQgMCAxOS43LTIuMyAzMy43LTcuMyAxMy44LTQuOSAyNy4xLTExLjcgMzYuNy0xOC45IDM4LjQtMjkgOTAuNS0yOSAxMjkgMCAxNS40IDExLjYgMzUuMyAyMS4xIDU1IDI0LjQgMTkuNSAzLjMgMzcgLjQgNTEuMS0xMC4yIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjcuMyAyMC41LTU5LjIgMjQtODcuOSAxOS4yLTI4LjUtNC44LTU1LjQtMTgtNzUuOS0zMy40LTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdfSxiRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFnbmlmeWluZy1nbGFzcy1jaGFydCIsaWNvbjpbNTEyLDUxMixbXSwiZTUyMiIsIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6bS0zMTIgOGwwIDY0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC02NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptODAtOTZsMCAxNjBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptODAgNjRsMCA5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il19LHZFdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1bWJyZWxsYSIsaWNvbjpbNTEyLDUxMixbXSwiZjBlOSIsIk0yNTYtMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyYzEyNi4zIDE1LjcgMjI0IDEyMy41IDIyNCAyNTQgMCAzLjgtLjEgNy41LS4yIDExLjMtLjMgNi45LTUgMTIuOC0xMS43IDE0LjdzLTEzLjgtLjctMTcuNi02LjVjLTE0LjQtMjEuNC0zOC44LTM1LjUtNjYuNS0zNS41LTI5LjMgMC01NC45IDE1LjctNjguOSAzOS4zLTIuNyA0LjYtNy42IDcuNi0xMyA3LjhzLTEwLjUtMi4yLTEzLjctNi41Yy0xNC42LTE5LjgtMzgtMzIuNi02NC41LTMyLjZzLTQ5LjkgMTIuOC02NC41IDMyLjZjLTMuMiA0LjMtOC4zIDYuOC0xMy43IDYuNXMtMTAuMi0zLjItMTMtNy44Yy0xNC0yMy42LTM5LjYtMzkuMy02OC45LTM5LjMtMjcuNyAwLTUyLjEgMTQuMS02Ni41IDM1LjUtMy45IDUuNy0xMSA4LjQtMTcuNiA2LjVTLjUgMjc0LjIgLjIgMjY3LjNDLjEgMjYzLjUgMCAyNTkuOCAwIDI1NiAwIDEyNS41IDk3LjcgMTcuNyAyMjQgMmwwLTJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTMyIDM2MGwwIDEwMi42YzAgNDUtMzYuNSA4MS40LTgxLjQgODEuNC0zMC44IDAtNTktMTcuNC03Mi44LTQ1bC0yLjMtNC43Yy03LjktMTUuOC0xLjUtMzUgMTQuMy00Mi45czM1LTEuNSA0Mi45IDE0LjNsMi4zIDQuN2MzIDUuOSA5IDkuNiAxNS42IDkuNiA5LjYgMCAxNy40LTcuOCAxNy40LTE3LjRMMjI0IDMyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdfSx5RXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGlsbC1yb2Nrc2xpZGUiLGljb246WzU3Niw1MTIsW10sImU1MDgiLCJNMjUyLjQgMTAzLjhsMjcgNDhjMi44IDUgOC4yIDguMiAxMy45IDguMmw1My4zIDBjNS44IDAgMTEuMS0zLjEgMTMuOS04LjJsMjctNDhjMi43LTQuOSAyLjctMTAuOCAwLTE1LjdsLTI3LTQ4Yy0yLjgtNS04LjItOC4yLTEzLjktOC4ybC01My4zIDBjLTUuOCAwLTExLjEgMy4xLTEzLjkgOC4ybC0yNyA0OGMtMi43IDQuOS0yLjcgMTAuOCAwIDE1Ljd6TTY4LjMgODdDNDMuMSA2MS44IDAgNzkuNyAwIDExNS4zTDAgNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwbDMxNi43IDBjMzUuNiAwIDUzLjUtNDMuMSAyOC4zLTY4LjNMNjguMyA4N3pNNTA0LjIgNDAzLjZjNC45IDIuNyAxMC44IDIuNyAxNS43IDBsNDgtMjdjNS0yLjggOC4yLTguMiA4LjItMTMuOWwwLTUzLjNjMC01LjgtMy4xLTExLjEtOC4yLTEzLjlsLTQ4LTI3Yy00LjktMi43LTEwLjgtMi43LTE1LjcgMGwtNDggMjdjLTUgMi44LTguMiA4LjItOC4yIDEzLjlsMCA1My4zYzAgNS44IDMuMSAxMS4xIDguMiAxMy45bDQ4IDI3ek0xOTIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzg0IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LHdFdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLXNlY3JldCIsaWNvbjpbNDQ4LDUxMixbMTI4MzczXSwiZjIxYiIsIk0xNzEtMTZjLTM2LjQgMC01Ny44IDU4LjMtNjguMyAxMTJMNzIgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjQgMCAwIDMyYzAgMTcgMy4zIDMzLjIgOS4zIDQ4bC05LjMgMCAwIDAtMjAuNSAwYy0xNS4yIDAtMjcuNSAxMi4zLTI3LjUgMjcuNSAwIDMgLjUgNS45IDEuNCA4LjdsMjguOSA4Ni42QzQwLjIgMzc5LjYgMTYgNDI4LjEgMTYgNDgyLjMgMTYgNDk4LjcgMjkuMyA1MTIgNDUuNyA1MTJsMzU2LjYgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuNyAwLTU0LjItMjQuMi0xMDIuNy02Mi4zLTEzNS40bDI4LjktODYuNmMuOS0yLjggMS40LTUuNyAxLjQtOC43IDAtMTUuMi0xMi4zLTI3LjUtMjcuNS0yNy41bC0yMC41IDAgMCAwLTkuMyAwYzYtMTQuOCA5LjMtMzEgOS4zLTQ4bDAtMzIgMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzAuNyAwYy0xMC40LTUzLjctMzEuOS0xMTItNjguMy0xMTItOS42IDAtMTkgMy45LTI3LjUgOC4yLTguMiA0LjEtMTguNCA3LjgtMjUuNSA3LjhzLTE3LjMtMy43LTI1LjUtNy44QzE5MC0xMi4xIDE4MC42LTE2IDE3MS0xNnptOTMuNyA0ODQuNGwtMjQuOC03MC45IDI3LjktMzIuNWMyLjctMy4yIDQuMi03LjIgNC4yLTExLjQgMC05LjctNy44LTE3LjUtMTcuNS0xNy41bC02MSAwYy05LjcgMC0xNy41IDcuOC0xNy41IDE3LjUgMCA0LjIgMS41IDguMiA0LjIgMTEuNGwyNy45IDMyLjUtMjQuOCA3MC45LTU3LTE4MC40IDM1LjcgMGMxOC40IDEwLjIgMzkuNSAxNiA2MiAxNnM0My42LTUuOCA2Mi0xNmwzNS43IDAtNTcgMTgwLjR6TTIyNCAyNTZjLTM0LjcgMC02NC4yLTIyLjEtNzUuMy01MyA1LjcgMy4yIDEyLjMgNSAxOS4zIDVsMTIuNCAwYzE2LjUgMCAzMS4xLTEwLjYgMzYuMy0yNi4yIDIuMy03IDEyLjItNyAxNC41IDAgNS4yIDE1LjYgMTkuOSAyNi4yIDM2LjMgMjYuMmwxMi40IDBjNyAwIDEzLjYtMS44IDE5LjMtNS0xMS4xIDMwLjktNDAuNiA1My03NS4zIDUzeiJdfSxNRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGFnZXIiLGljb246WzUxMiw1MTIsWzEyODIyM10sImY4MTUiLCJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptNjQgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTg4IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwem0xMjggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAweiJdfSx6RXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnJpZWZjYXNlIixpY29uOls1MTIsNTEyLFsxMjgxODhdLCJmMGIxIiwiTTIwMCA0OGwxMTIgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC0xMjggMCAwLTQwYzAtNC40IDMuNi04IDgtOHptLTU2IDhsMCA0MC04MCAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MGwwIDk2IDUxMiAwIDAtOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTgwIDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NkwyMDAgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6TTUxMiAzMDRsLTE5MiAwIDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYtMTkyIDAgMCAxMTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xMTJ6Il19LGtFdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cm93ZWwtYnJpY2tzIixpY29uOls1MTIsNTEyLFtdLCJlNThhIiwiTTIyNCAzMmMwLTExLjUtNi4yLTIyLjItMTYuMi0yNy44cy0yMi4zLTUuNS0zMi4yIC40bC0xNjAgOTZDNS45IDEwNi4zIDAgMTE2LjggMCAxMjhzNS45IDIxLjcgMTUuNSAyNy40bDE2MCA5NmM5LjkgNS45IDIyLjIgNi4xIDMyLjIgLjRTMjI0IDIzNS41IDIyNCAyMjRsMC02NCAyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjU2IDAgMC02NHptOTYgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE2MCAwek0wIDQxNmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTIyNC0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yNTYgMHoiXX0sU0V0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNvY2tzIixpY29uOls1MTIsNTEyLFsxMjk1MTBdLCJmNjk2IiwiTTI1Mi44IDBMMTc2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTYgMTEyIDAgMC0xNmMwLTE3LjUgNC43LTMzLjkgMTIuOC00OHpNMTI4IDExMmwwIDEyOGMwIDIwLjEtOS41IDM5LjEtMjUuNiA1MS4ybC02NCA0OGMtMjQuMiAxOC4xLTM4LjQgNDYuNi0zOC40IDc2LjggMCA1MyA0MyA5NiA5NiA5NiAxNS40IDAgMzAuNS0zLjcgNDQtMTAuNy0xNy42LTIzLjktMjgtNTMuNC0yOC04NS4zIDAtNDUuMyAyMS4zLTg4IDU3LjYtMTE1LjJsNjQtNDhjNC0zIDYuNC03LjggNi40LTEyLjhsMC0xMjgtMTEyIDB6bTE2MCAwbDAgMTI4YzAgMjAuMS05LjUgMzkuMS0yNS42IDUxLjJsLTY0IDQ4Yy0yNC4yIDE4LjEtMzguNCA0Ni42LTM4LjQgNzYuOCAwIDUzIDQzIDk2IDk2IDk2IDIwLjggMCA0MS02LjcgNTcuNi0xOS4ybDExNS4yLTg2LjRDNDYxIDM4Mi4yIDQ4MCAzNDQuMyA0ODAgMzA0bDAtMTkyLTE5MiAwek00ODAgNjRsMC0xNmMwLTI2LjUtMjEuNS00OC00OC00OEwzMzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNiAxOTIgMHoiXX0sQ0V0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InQiLGljb246WzM4NCw1MTIsWzExNl0sIjU0IiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NmwxMjggMCAwIDM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzUyIDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdfSxMRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWljcm9jaGlwIixpY29uOls1MTIsNTEyLFtdLCJmMmRiIiwiTTE3NiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgNTYtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgNTYtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwIDU2IDAgMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNTYgMCAwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MGMzNS4zIDAgNjQtMjguNyA2NC02NGw0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwIDAtNTYgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMCAwLTU2IDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDBjMC0zNS4zLTI4LjctNjQtNjQtNjRsMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwLTU2IDAgMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwLTU2IDAgMC00MHpNMTYwIDEyOGwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xNiA0OGwwIDE2MCAxNjAgMCAwLTE2MC0xNjAgMHoiXX0sSjBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRydWNrLW1lZGljYWwiLGljb246WzU3Niw1MTIsWzEyODY1NywiYW1idWxhbmNlIl0sImYwZjkiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzLjMgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDEwMi42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwzLjMgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTUxMiAyMzcuM2wwIDUwLjctOTYgMCAwLTk2IDUwLjcgMCA0NS4zIDQ1LjN6TTE1MiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yMzIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMTc2IDEzNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXX0sVEV0PUowZSxfRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToib20iLGljb246WzU3Niw1MTIsWzEyODMyOV0sImY2NzkiLCJNMzg4LjcgNC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDE2IDE2YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC0xNiAxNmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTE2LTE2Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNmwxNi0xNnpNMTc2IDE2MGMtMTAuOCAwLTIwLjggMy42LTI4LjggOS42LTE0LjEgMTAuNi0zNC4yIDcuOC00NC44LTYuNHMtNy44LTM0LjIgNi40LTQ0LjhjMTguNy0xNC4xIDQyLTIyLjQgNjcuMi0yMi40IDYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyIDAgMTcuMi0zLjkgMzMuNS0xMC44IDQ4bDQ5LjcgMGMxMi43IDAgMjQuOS01IDMzLjktMTQuMWwyMC43LTIwLjdjMTguNy0xOC43IDQ0LjEtMjkuMyA3MC42LTI5LjMgNTUuMiAwIDk5LjkgNDQuNyA5OS45IDk5LjlsMCA5Ni4xYzAgNTUuMi00NC44IDEwMC0xMDAgMTAwUzM1MiA0NDMuMiAzNTIgMzg4bDAtNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNGMwIDE5LjkgMTYuMSAzNiAzNiAzNnMzNi0xNi4xIDM2LTM2bDAtOTYuMWMwLTE5LjgtMTYuMS0zNS45LTM1LjktMzUuOS05LjUgMC0xOC42IDMuOC0yNS40IDEwLjVsLTIwLjcgMjAuN2MtMjEgMjEtNDkuNCAzMi44LTc5LjEgMzIuOGwtMjYuOCAwYzEyLjYgMTkuNiAxOS45IDQyLjggMTkuOSA2OCAwIDc1LjItNjUgMTMyLTE0MCAxMzJTNDAgNDYzLjIgNDAgMzg4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJjMCAzNS4zIDMxLjcgNjggNzYgNjhzNzYtMzIuNyA3Ni02OC0zMS43LTY4LTc2LTY4bC0yMCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDh6TTMzNy4xIDYwLjFjLTExLTEzLjgtMzEuMS0xNi4yLTQ1LTUuMnMtMTYuMiAzMS4xLTUuMiA0NUMzMTIuNiAxMzIuMiAzNTQuNCAxNTIgNDAwIDE1MnM4Ny40LTE5LjggMTEzLjEtNTIuMWMxMS0xMy44IDguNy0zNC01LjItNDVzLTM0LTguNy00NSA1LjJDNDUwLjMgNzYgNDI3LjUgODggNDAwIDg4cy01MC4zLTEyLTYyLjktMjcuOXoiXX0sQUV0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vc3F1aXRvLW5ldCIsaWNvbjpbNjQwLDUxMixbXSwiZTUyYyIsIk01NzYgMzUyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTYgMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMCAwIDQ4IDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDAgMCAxNi0uMSAyLjVDNTk4LjYgNTY2LjYgNTg4LjQgNTc2IDU3NiA1NzZzLTIyLjYtOS40LTIzLjktMjEuNWwtLjEtMi41IDAtMTYtNDggMCAwIDE2LS4xIDIuNUM1MDIuNiA1NjYuNiA0OTIuNCA1NzYgNDgwIDU3NnMtMjIuNi05LjQtMjMuOS0yMS41bC0uMS0yLjUgMC0xNi0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDAgMC00OC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDAgMC0xNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTYgNDggMCAwLTE2YzAtMTMuMyAxMC43LTI0IDI0LTI0ek00MjkuOSAxNi4zYzcuNy05LjQgMjEuMy0xMS41IDMxLjQtNC4zIDEwLjEgNy4xIDEzLjEgMjAuOSA3LjQgMzEuN2wtMS4zIDIuMS0yNS45IDM4LjkgMTMuMyA1My40YzIgOC0uMSAxNi4zLTUuMyAyMi4zbC0yLjQgMi40LTQ0LjcgMzguMyAxMzAuNSAxNC41YzQyLjggNC44IDc1LjEgNDAuOSA3NS4xIDgzLjkgMCAzLjktLjQgNy43LS45IDExLjUtNy4zLTMuNS0xNS4zLTUuOC0yMy44LTYuN0w1NzYgMzA0Yy0xOC41IDAtMzUuMyA3LTQ4IDE4LjQtMTEtOS45LTI1LjEtMTYuNS00MC42LTE4LjFMNDgwIDMwNGMtMzAuMyAwLTU2LjEgMTguNy02Ni44IDQ1LjItMTIuNSA1LTIzLjIgMTMuNC0zMS4xIDI0bC0zMC4yLTQwLjEgMCA3NC43YzAgMTcuNy0xNC4zIDMyLTMyIDMyLTE2LjYgMC0zMC4yLTEyLjYtMzEuOC0yOC43bC0uMi0zLjMgMC03NC42LTMyLjMgNDMgMCAzOS44YzAgMy41LS43IDYuOS0yLjEgMTAuMWwtMS42IDMuMS00MCA2NC0xLjQgMmMtNy41IDkuNi0yMSAxMi4xLTMxLjMgNS4zLTEwLjMtNi44LTEzLjctMjAuNS04LjMtMzEuNWwxLjItMi4yIDM2LjItNTggMC00MSAuMy00Yy42LTMuOSAyLjItNy43IDQuNi0xMC45bDM5LjMtNTIuMi02Ni4yIDU5LjVjLTE3IDE1LjMtMzkgMjMuNy02MS45IDIzLjhsLTguMSAwYy00Ni42IDAtODQuNC0zNy44LTg0LjQtODQuNCAwLTQzIDMyLjQtNzkuMiA3NS4xLTgzLjlsMTMwLjUtMTQuNS00NC43LTM4LjMtMi40LTIuNGMtNS4yLTYtNy4zLTE0LjQtNS4zLTIyLjNsMTMuMy01My40LTI1LjktMzguOS0xLjItMi4xYy01LjctMTAuOC0yLjctMjQuNiA3LjQtMzEuNyAxMC4xLTcuMSAyMy43LTUuMSAzMS40IDQuM2wxLjUgMiAzMiA0OCAxLjQgMi4yYzIuOCA1LjMgMy41IDExLjYgMi4xIDE3LjZsLTEyLjMgNDkuMiA1My4zIDQ1LjcgMC0yOC44IC4yLTMuMmMxLjEtMTAuNCA3LjItMTkuNCAxNS44LTI0LjRsMC02MC41IC4zLTMuMmMxLjUtNy4zIDgtMTIuNyAxNS43LTEyLjggNy43IDAgMTQuMiA1LjUgMTUuNyAxMi44bC4zIDMuMiAwIDYwLjVjOC43IDUgMTQuOCAxNCAxNS44IDI0LjRsLjIgMy4yIDAgMjguOSA1My40LTQ1LjctMTIuMy00OS4yYy0xLjUtNS45LS43LTEyLjIgMi4xLTE3LjZsMS40LTIuMiAzMi00OCAxLjUtMnpNNTA0IDQ4OGw0OCAwIDAtNDgtNDggMCAwIDQ4eiJdfSwkRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicHJlc2NyaXB0aW9uLWJvdHRsZSIsaWNvbjpbMzg0LDUxMixbXSwiZjQ4NSIsIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRMMCAzMnpNMzIgMTQ0bDMyMCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMCAwLTQ4IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAgMC00OCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwIDAtNjR6Il19LGU0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2Vycy1nZWFyIixpY29uOls2NDAsNTEyLFsidXNlcnMtY29nIl0sImY1MDkiLCJNMzIwIDIyNGExMDQgMTA0IDAgMSAwIDAtMjA4IDEwNCAxMDQgMCAxIDAgMCAyMDh6TTk2IDIzMmE3MiA3MiAwIDEgMCAwLTE0NCA3MiA3MiAwIDEgMCAwIDE0NHpNMCA0MTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw4Ni43IDBjLTQuMy05LjgtNi43LTIwLjYtNi43LTMybDAtMTZjMC01My4yIDIwLTEwMS44IDUyLjktMTM4LjYtMTEuNy0zLjUtMjQuMS01LjQtMzYuOS01LjQtNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjh6TTYxNiAxNjBhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAwek0xNjAgNDMybDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTU2LjggMGMtNy4xLTIxLjYtNi4zLTQ0LjQgMTAuNy02NC0xNC0xNi4yLTIwLjUtMzkuNy0xMS40LTYzLjMgNi42LTE3LjEgMTUuOS0zMy4xIDI3LjQtNDcuMyA1LjQtNi42IDExLjYtMTEuNyAxOC4zLTE1LjQtMjIuMS0xMS41LTQ3LjItMTgtNzMuOC0xOC04OC40IDAtMTYwIDcxLjYtMTYwIDE2MHptNDY0LjYtNDQuMWM2LjMtMy42IDkuNS0xMS4xIDYuOC0xOC00LjgtMTIuNC0xMS41LTI0LjEtMTkuOS0zNC40LTQuNi01LjctMTIuNy02LjctMTktMy0yMS44IDEyLjYtNDguNi0yLjgtNDguNi0yOC4xIDAtNy4zLTQuOS0xMy44LTEyLjEtMTQuOS0xMi45LTItMjYuOC0yLTM5LjcgMC03LjIgMS4xLTEyLjEgNy42LTEyLjEgMTQuOSAwIDI1LjItMjYuOCA0MC43LTQ4LjYgMjguMS02LjMtMy42LTE0LjQtMi42LTE5IDMtOC40IDEwLjMtMTUuMSAyMi0xOS45IDM0LjQtMi42IDYuOCAuNSAxNC4zIDYuOCAxNy45IDIxLjkgMTIuNiAyMS45IDQzLjUgMCA1Ni4yLTYuMyAzLjYtOS41IDExLjEtNi44IDE3LjkgNC44IDEyLjQgMTEuNSAyNC4xIDE5LjkgMzQuNCA0LjYgNS43IDEyLjcgNi43IDE5IDMgMjEuOC0xMi42IDQ4LjYgMi45IDQ4LjYgMjguMSAwIDcuMyA0LjkgMTMuOCAxMi4xIDE0LjkgMTIuOSAyIDI2LjggMiAzOS43IDAgNy4yLTEuMSAxMi4xLTcuNiAxMi4xLTE0LjkgMC0yNS4yIDI2LjgtNDAuNyA0OC42LTI4LjEgNi4zIDMuNiAxNC40IDIuNiAxOS0zIDguNC0xMC4zIDE1LjEtMjIgMTkuOS0zNC40IDIuNi02LjgtLjUtMTQuMy02LjgtMTcuOS0yMS45LTEyLjYtMjEuOS00My41IDAtNTYuMnpNNDcyIDQxNmE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAweiJdfSxERXQ9ZTRlLEVFdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyb2FkLWNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTU2NSIsIk0yODggMzJsLTc2LjMgMGMtMjkuNCAwLTU1LjEgMjAuMS02Mi4xIDQ4LjZMNjUuNCA0MjAuNUM1Ny45IDQ1MC43IDgwLjggNDgwIDExMiA0ODBsMjA5LjQgMGMtMTEuMi0yNC40LTE3LjQtNTEuNC0xNy40LTgwIDAtMjguNiA2LjItNTUuNyAxNy40LTgwLS41IDAtMSAwLTEuNSAwLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ5YzM1LjItMzkuOSA4Ni43LTY1IDE0NC02NSA5IDAgMTcuOCAuNiAyNi41IDEuOGwtMzItMTI5LjJDNDgzLjQgNTIuMSA0NTcuOCAzMiA0MjguMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il19LE5FdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwYXVzZSIsaWNvbjpbMzg0LDUxMixbOTIwOF0sImYwNGMiLCJNNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDMyem0yMjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzNTJjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHoiXX0sbTc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RhZmYtc25ha2UiLGljb246WzQ0OCw1MTIsWyJyb2QtYXNjbGVwaXVzIiwicm9kLXNuYWtlIiwic3RhZmYtYWVzY3VsYXBpdXMiXSwiZTU3OSIsIk0xOTIgMzJsMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgNjQgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NmwtMTYgMCAwLTY0IDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMCAxOTIgMzIgMGM1MyAwIDk2IDQzIDk2IDk2IDAgNDcuNi0zNC42IDg3LjEtODAgOTQuN2wwLTY3YzkuNi01LjUgMTYtMTUuOSAxNi0yNy43IDAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwIDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjQtMzIgMGMtNTMgMC05Ni00My05Ni05NiAwLTQ3LjYgMzQuNi04Ny4xIDgwLTk0LjdsMCA2N2MtOS42IDUuNS0xNiAxNS45LTE2IDI3LjcgMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMCAwLTE5Mi03Mi42IDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzJsLTE2IDBDMjEuNSAxMjggMCAxMDYuNSAwIDgwUzIxLjUgMzIgNDggMzJsMTQ0IDB6Il19LFBFdD1tNyxJRXQ9bTcsRkV0PW03LE9FdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwaWdneS1iYW5rIixpY29uOls1NzYsNTEyLFtdLCJmNGQzIiwiTTI4OC0zMmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpNNDggMzA0YzAtNzAuMSA0Ny0xMzEuNCAxMTcuMS0xNjQuOSAyNS4zIDQxLjMgNzAuOSA2OC45IDEyMi45IDY4LjkgNTUuNyAwIDEwNC4xLTMxLjcgMTI4LTc4IDE1LjgtMTEuMyAzNS4xLTE4IDU2LTE4bDE5LjUgMGMxMC40IDAgMTggOS44IDE1LjUgMTkuOWwtMTcuMSA2OC4zYzkuOSAxMi40IDE4LjIgMjUuNyAyNC40IDM5LjhsMjEuNyAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC00MCAwYy0xNi41IDIyLTM4LjUgMzkuNi02NCA1MC43bDAgMjkuM2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzMgMGMtMTQuMyAwLTI2LjgtOS41LTMwLjgtMjMuMmwtNy4xLTI0LjgtODIuMyAwLTcuMSAyNC44QzIzNS44IDUwMi41IDIyMy4zIDUxMiAyMDkgNTEybC0zMyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI5LjNDODcuNSA0MjYgNDggMzY5LjYgNDggMzA0em0zNzYgMTZhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxCRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9udW1lbnQiLGljb246WzM4NCw1MTIsW10sImY1YTYiLCJNMjA5LTMzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw5NSA0N2MtNC4xIDQuMS02LjUgOS40LTcgMTUuMUw1OC40IDQ0OCA0OCA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEwLjQgMC0yOS43LTM4NS44Yy0uNC01LjctMi45LTExLjEtNy0xNS4xTDIwOS0zM3pNMTI4IDI5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXX0sdDRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFuZ2xlcy1yaWdodCIsaWNvbjpbNDQ4LDUxMixbMTg3LCJhbmdsZS1kb3VibGUtcmlnaHQiXSwiZjEwMSIsIk00MzkuMSAyNzguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMzcxLjIgMjU2IDIzMy45IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjB6bS0zNTIgMTYwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE3OS4yIDI1NiA0MS45IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAweiJdfSxSRXQ9dDRlLEE3PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRlc2t0b3AiLGljb246WzUxMiw1MTIsWzEyODQyMSw2MTcwNCwiZGVza3RvcC1hbHQiXSwiZjM5MCIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE0NCAwLTE2IDQ4LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAtMTYtNDggMTQ0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTk2IDk2bDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LEhFdD1BNyxxRXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGxhbmUtY2lyY2xlLXhtYXJrIixpY29uOls2NDAsNTEyLFtdLCJlNTU3IiwiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgNzggNzEuNWMtNjkuMyAyOS0xMTggOTcuNC0xMTggMTc3LjIgMCA0OS4zIDE4LjYgOTQuMyA0OS4xIDEyOC4zTDI4OCA1MTIgMTc5LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDNTguNyAzOTYuNCA0OCAzODguNyA0OCAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMzIgMTUxLjMgMjMyIDI0ek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptNTkuMyAxMDcuM2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC0zNi43IDM2LjctMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDM2LjcgMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzNi43LTM2LjcgMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzYuNy0zNi43IDM2LjctMzYuN3oiXX0sVkV0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJldHdlZXQiLGljb246WzU3Niw1MTIsW10sImYwNzkiLCJNMTE4LjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMxOS4xIDE2MCAzMiAxNjBsMzIgMCAwIDIyNGMwIDUzIDQzIDk2IDk2IDk2bDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yMjQgMzIgMGMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC02NC02NHpNNDU3LjQgNDcwLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNTU2LjkgMzUyIDU0NCAzNTJsLTMyIDAgMC0yMjRjMC01My00My05Ni05Ni05NkwyODggMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMjQtMzIgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjR6Il19LGE0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLWdlYXIiLGljb246WzY0MCw1MTIsWyJ1c2VyLWNvZyJdLCJmNGZlIiwiTTI1Ni41IDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0yMjYuNyAzMDRsNTkuNCAwIDEuNSAwYy0xMi45IDI2LjgtNy44IDU4LjIgMTEuNSA3OS41LTIwLjIgMjIuMy0yNC44IDU1LjgtOS40IDgzLjRsMjIuNSA0MC40Yy45IDEuNiAxLjkgMy4yIDIuOSA0LjdsLTIzNyAwYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuNyAwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM3ptMjA1LjktNTYuNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNi4xYzAgMTguOSAyNC4xIDMyLjggNDAuNSAyMy40bDUtMi45YzExLjYtNi43IDI2LjUtMi42IDMzIDkuMWwyMi40IDQwLjJjNi4yIDExLjIgMi42IDI1LjItOC4yIDMybC00LjcgMi45Yy0xNi4yIDEwLjEtMTYuMiAzOS45IDAgNTAuMWw0LjYgMi45YzEwLjggNi44IDE0LjUgMjAuOCA4LjMgMzJMNjA3IDQ4My44Yy02LjUgMTEuNy0yMS40IDE1LjktMzMgOS4xbC00LjktMi45Yy0xNi40LTkuNS00MC41IDQuNS00MC41IDIzLjRsMCA2LjFjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNS45YzAtMTktMjQuMi0zMy00MC43LTIzLjVsLTQuOCAyLjhjLTExLjYgNi43LTI2LjQgMi42LTMzLTkuMWwtMjIuNi00MC40Yy02LjItMTEuMi0yLjYtMjUuMyA4LjMtMzIuMWw0LjQtMi43YzE2LjMtMTAuMSAxNi4zLTQwLjEgMC01MC4ybC00LjUtMi44Yy0xMC45LTYuOC0xNC41LTIwLjktOC4zLTMyLjFsMjIuNS00MC4zYzYuNS0xMS43IDIxLjQtMTUuOCAzMi45LTkuMWw0LjggMi44YzE2LjUgOS41IDQwLjctNC41IDQwLjctMjMuNWwwLTUuOXptOTkuOSAxMzYuMmE1MiA1MiAwIDEgMCAtMTA0IDAgNTIgNTIgMCAxIDAgMTA0IDB6Il19LFVFdD1hNGUsakV0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvcmRlci1hbGwiLGljb246WzQ0OCw1MTIsW10sImY4NGMiLCJNMzg0IDk2bDAgMTI4LTEyOCAwIDAtMTI4IDEyOCAwem0wIDE5MmwwIDEyOC0xMjggMCAwLTEyOCAxMjggMHpNMTkyIDIyNGwtMTI4IDAgMC0xMjggMTI4IDAgMCAxMjh6TTY0IDI4OGwxMjggMCAwIDEyOC0xMjggMCAwLTEyOHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnoiXX0sV0V0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvaW5zIixpY29uOls1MTIsNTEyLFtdLCJmNTFlIiwiTTEyOCA5NmwwLTE2YzAtNDQuMiA4Ni04MCAxOTItODBTNTEyIDM1LjggNTEyIDgwbDAgMTZjMCAzMC42LTQxLjMgNTcuMi0xMDIgNzAuNy0yLjQtMi44LTQuOS01LjUtNy40LTgtMTUuNS0xNS4zLTM1LjUtMjYuOS01Ni40LTM1LjUtNDEuOS0xNy41LTk2LjUtMjcuMS0xNTQuMi0yNy4xLTIxLjkgMC00My4zIDEuNC02My44IDQuMS0uMi0xLjMtLjItMi43LS4yLTQuMXpNNDMyIDM1M2wwLTQ2LjJjMTUuMS0zLjkgMjkuMy04LjUgNDIuMi0xMy45IDEzLjItNS41IDI2LjEtMTIuMiAzNy44LTIwLjNsMCAxNS40YzAgMjYuOC0zMS41IDUwLjUtODAgNjV6bTAtOTZsMC0zM2MwLTQuNS0uNC04LjgtMS0xMyAxNS41LTMuOSAzMC04LjYgNDMuMi0xNC4yczI2LjEtMTIuMiAzNy44LTIwLjNsMCAxNS40YzAgMjYuOC0zMS41IDUwLjUtODAgNjV6TTAgMjQwbDAtMTZjMC00NC4yIDg2LTgwIDE5Mi04MHMxOTIgMzUuOCAxOTIgODBsMCAxNmMwIDQ0LjItODYgODAtMTkyIDgwUzAgMjg0LjIgMCAyNDB6bTM4NCA5NmMwIDQ0LjItODYgODAtMTkyIDgwUzAgMzgwLjIgMCAzMzZsMC0xNS40YzExLjYgOC4xIDI0LjUgMTQuNyAzNy44IDIwLjMgNDEuOSAxNy41IDk2LjUgMjcuMSAxNTQuMiAyNy4xczExMi4zLTkuNyAxNTQuMi0yNy4xYzEzLjItNS41IDI2LjEtMTIuMiAzNy44LTIwLjNsMCAxNS40em0wIDgwLjZsMCAxNS40YzAgNDQuMi04NiA4MC0xOTIgODBTMCA0NzYuMiAwIDQzMmwwLTE1LjRjMTEuNiA4LjEgMjQuNSAxNC43IDM3LjggMjAuMyA0MS45IDE3LjUgOTYuNSAyNy4xIDE1NC4yIDI3LjFzMTEyLjMtOS43IDE1NC4yLTI3LjFjMTMuMi01LjUgMjYuMS0xMi4yIDM3LjgtMjAuM3oiXX0sR0V0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcnMtc3Ryb2tlIixpY29uOls1NzYsNTEyLFs5ODk0XSwiZjIyOSIsIk00MTYtMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTAuNyAwLTU4LjcgNTguNy0xNy40LTE3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE3LjQgMTcuNC0yMyAyM2MtMjguNC0xOS41LTYyLjctMzEtOTkuOC0zMS05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NnM3OC44IDE3NiAxNzYgMTc2IDE3Ni03OC44IDE3Ni0xNzZjMC0zNy0xMS40LTcxLjQtMzEtOTkuOGwyMy0yMyAxNy40IDE3LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w0NTMuMyAxMzYgNTEyIDc3LjMgNTEyIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDU3NiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDQxNi0zMnpNMTI4IDMwNGExMTIgMTEyIDAgMSAxIDIyNCAwIDExMiAxMTIgMCAxIDEgLTIyNCAweiJdfSxyNGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZHNoYWtlLWFuZ2xlIixpY29uOls1NzYsNTEyLFsiaGFuZHMtaGVscGluZyJdLCJmNGM0IiwiTTI2OC45IDUzLjJMMTUyLjMgMTgyLjhjLTQuNiA1LjEtNC40IDEzIC41IDE3LjkgMzAuNSAzMC41IDgwIDMwLjUgMTEwLjUgMGwzMS44LTMxLjhjNC4yLTQuMiA5LjUtNi41IDE0LjktNi45IDYuOC0uNiAxMy44IDEuNyAxOSA2LjlMNTA1LjYgMzQ0IDU3NiAyODggNTc2IDAgNDY0IDY0IDQ0MC4yIDQ4LjFDNDI0LjQgMzcuNiA0MDUuOSAzMiAzODYuOSAzMmwtNzAuNCAwYy0xLjEgMC0yLjMgMC0zLjQgLjEtMTYuOSAuOS0zMi44IDguNS00NC4yIDIxLjF6TTExNi42IDE1MC43TDIyMy40IDMyIDE4My44IDMyYy0yNS41IDAtNDkuOSAxMC4xLTY3LjkgMjguMUwwIDE5MiAwIDU0NCAxNDQgNDA4IDE1Ni40IDQxOC4zYzIzIDE5LjIgNTIgMjkuNyA4MS45IDI5LjdsMTUuNyAwLTctN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQxIDQxIDkgMGMxOS4xIDAgMzcuOC00LjMgNTQuOC0xMi4zTDM1OSA0MDljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMiAzMiAxNy41LTE3LjVjOC45LTguOSAxMS41LTIxLjggNy42LTMzLjFsLTEzNy45LTEzNi44LTE0LjkgMTQuOWMtNDkuMyA0OS4zLTEyOS4xIDQ5LjMtMTc4LjQgMC0yMy0yMy0yMy45LTU5LjktMi4yLTg0eiJdfSxZRXQ9cjRlLFpFdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1kb3duIixpY29uOlszODQsNTEyLFs4NTk1XSwiZjA2MyIsIk0xNjkuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCA0MDIuNyAyMjQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzNzAuNy0xMDUuNC0xMDUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHoiXX0saTRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxvY2F0aW9uLWRvdCIsaWNvbjpbMzg0LDUxMixbIm1hcC1tYXJrZXItYWx0Il0sImYzYzUiLCJNMCAxODguNkMwIDg0LjQgODYgMCAxOTIgMFMzODQgODQuNCAzODQgMTg4LjZjMCAxMTkuMy0xMjAuMiAyNjIuMy0xNzAuNCAzMTYuOC0xMS44IDEyLjgtMzEuNSAxMi44LTQzLjMgMC01MC4yLTU0LjUtMTcwLjQtMTk3LjUtMTcwLjQtMzE2Ljh6TTE5MiAyNTZhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6Il19LFhFdD1pNGUsUUV0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsdWctY2lyY2xlLWV4Y2xhbWF0aW9uIixpY29uOls2NDAsNTEyLFtdLCJlNTVkIiwiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjI4YTIwIDIwIDAgMSAwIDAtNDAgMjAgMjAgMCAxIDAgMCA0MHptMC0xODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6Il19LEtFdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb29raWUtYml0ZSIsaWNvbjpbNTEyLDUxMixbXSwiZjU2NCIsIk0yNTcuNSAyNy42Yy0uOC01LjQtNC45LTkuOC0xMC4zLTEwLjYtMjIuMS0zLjEtNDQuNiAuOS02NC40IDExLjRsLTc0IDM5LjVDODkuMSA3OC40IDczLjIgOTQuOSA2My40IDExNUwyNi43IDE5MC42Yy05LjggMjAuMS0xMyA0Mi45LTkuMSA2NC45bDE0LjUgODIuOGMzLjkgMjIuMSAxNC42IDQyLjMgMzAuNyA1Ny45bDYwLjMgNTguNGMxNi4xIDE1LjYgMzYuNiAyNS42IDU4LjcgMjguN2w4MyAxMS43YzIyLjEgMy4xIDQ0LjYtLjkgNjQuNC0xMS40bDc0LTM5LjVjMTkuNy0xMC41IDM1LjYtMjcgNDUuNC00Ny4ybDM2LjctNzUuNWM5LjgtMjAuMSAxMy00Mi45IDkuMS02NC45LS45LTUuMy01LjMtOS4zLTEwLjYtMTAuMS01MS41LTguMi05Mi44LTQ3LjEtMTA0LjUtOTcuNC0xLjgtNy42LTgtMTMuNC0xNS43LTE0LjYtNTQuNi04LjctOTcuNy01Mi0xMDYuMi0xMDYuOHpNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sbzRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNjcmV3ZHJpdmVyLXdyZW5jaCIsaWNvbjpbNTc2LDUxMixbInRvb2xzIl0sImY3ZDkiLCJNNzAuOC02LjdjNS40LTUuNCAxMy44LTYuMiAyMC4yLTJMMjA5LjkgNzAuNWM4LjkgNS45IDE0LjIgMTUuOSAxNC4yIDI2LjZsMCA0OS42IDkwLjggOTAuOGMzMy4zLTE1IDczLjktOC45IDEwMS4yIDE4LjVMNTQyLjIgMzgyLjFjMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlsLTYwLjEgNjAuMWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMjg4LjEgMzg0Yy0yNy40LTI3LjQtMzMuNS02Ny45LTE4LjUtMTAxLjJsLTkwLjgtOTAuOC00OS42IDBjLTEwLjcgMC0yMC43LTUuMy0yNi42LTE0LjJMMjMuNCA1OC45Yy00LjItNi4zLTMuNC0xNC44IDItMjAuMkw3MC44LTYuN3ptMTQ1IDMwMy41Yy02LjMgMzYuOSAyLjMgNzUuOSAyNi4yIDEwNy4ybC05NC45IDk1Yy0yOC4xIDI4LjEtNzMuNyAyOC4xLTEwMS44IDBzLTI4LjEtNzMuNyAwLTEwMS44bDEzNS40LTEzNS41IDM1LjIgMzUuMXpNMzg0LjEgMGMyMC4xIDAgMzkuNCAzLjcgNTcuMSAxMC41IDEwIDMuOCAxMS44IDE2LjUgNC4zIDI0LjFMMzg4LjggOTEuM2MtMyAzLTQuNyA3LjEtNC43IDExLjNsMCA0MS40YzAgOC44IDcuMiAxNiAxNiAxNmw0MS40IDBjNC4yIDAgOC4zLTEuNyAxMS4zLTQuN2w1Ni43LTU2LjdjNy42LTcuNSAyMC4zLTUuNyAyNC4xIDQuMyA2LjggMTcuNyAxMC41IDM3IDEwLjUgNTcuMSAwIDQzLjItMTcuMiA4Mi4zLTQ1IDExMS4xbC00OS4xLTQ5LjFjLTMzLjEtMzMtNzguNS00NS43LTEyMS4xLTM4LjRsLTU2LjgtNTYuOCAwLTI5LjctLjItNWMtLjgtMTIuNC00LjQtMjQuMy0xMC41LTM0LjkgMjkuNC0zNSA3My40LTU3LjIgMTIyLjctNTcuM3oiXX0sSkV0PW80ZSxlTnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaW5kZW50IixpY29uOls0NDgsNTEyLFtdLCJmMDNjIiwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNMTkyIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA5NmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTAgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTEyNy44IDI2OC42TDI1LjggMzQ3LjlDMTUuMyAzNTYuMSAwIDM0OC42IDAgMzM1LjNMMCAxNzYuN2MwLTEzLjMgMTUuMy0yMC44IDI1LjgtMTIuNmwxMDEuOSA3OS4zYzguMiA2LjQgOC4yIDE4LjkgMCAyNS4zeiJdfSxzNGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFycyIsaWNvbjpbNDQ4LDUxMixbIm5hdmljb24iXSwiZjBjOSIsIk0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDEyOEMxNC4zIDEyOCAwIDExMy43IDAgOTZ6TTAgMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyeiJdfSx0TnQ9czRlLG40ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kcy1wcmF5aW5nIixpY29uOls2NDAsNTEyLFsicHJheWluZy1oYW5kcyJdLCJmNjg0IiwiTTIyNCAyOTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMTIuNiA4OC4yLTExOS43YzEzLjEtMTcuOCA5LjMtNDIuOC04LjUtNTUuOXMtNDIuOC05LjMtNTUuOSA4LjVMMTA2LjUgMTQyLjlDODkuMyAxNjYuMiA4MCAxOTQuNSA4MCAyMjMuNmwwIDExMC43LTU4LjEgMTkuNEM4LjggMzU4IDAgMzcwLjIgMCAzODRsMCA5NmMwIDEwIDQuNyAxOS41IDEyLjcgMjUuNXMxOC40IDggMjguMSA1LjJsMTU0LjQtNDQuMWM1NS0xNS43IDkyLjgtNjUuOSA5Mi44LTEyMy4xTDI4OCAyMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA3MnptMTkyIDBsMC03MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExOS42YzAgNTcuMiAzNy45IDEwNy40IDkyLjggMTIzLjFsMTU0LjQgNDQuMWM5LjcgMi44IDIwIC44IDI4LjEtNS4yUzY0MCA0OTAgNjQwIDQ4MGwwLTk2YzAtMTMuOC04LjgtMjYtMjEuOS0zMC40bC01OC4xLTE5LjQgMC0xMTAuN2MwLTI5LTkuMy01Ny4zLTI2LjUtODAuN0w0NDAuMiAxNi4zQzQyNy4xLTEuNSA0MDIuMS01LjMgMzg0LjMgNy44cy0yMS42IDM4LjEtOC41IDU1LjlMNDY0IDE4My40IDQ2NCAyOTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR6Il19LGFOdD1uNGUsck50PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZpcnVzZXMiLGljb246WzY0MCw1MTIsW10sImUwNzYiLCJNMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzIgMCAzMC41IDM2LjkgNDUuOCA1OC41IDI0LjIgMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2MtMjEuNiAyMS42LTYuMyA1OC41IDI0LjIgNTguNSAxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmMtMzAuNSAwLTQ1LjggMzYuOS0yNC4yIDU4LjUgMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBjLTIxLjYtMjEuNi01OC41LTYuMy01OC41IDI0LjIgMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC0zMC41LTM2LjktNDUuOC01OC41LTI0LjItMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNDNzcuOCAyNjAuOSA2Mi41IDIyNCAzMiAyMjQgMTQuMyAyMjQgMCAyMDkuNyAwIDE5MnMxNC4zLTMyIDMyLTMyYzMwLjUgMCA0NS44LTM2LjkgMjQuMi01OC41LTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBDMTIzLjEgNzcuOCAxNjAgNjIuNSAxNjAgMzIgMTYwIDE0LjMgMTc0LjMgMCAxOTIgMHpNMTQ0IDE3NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTEyOCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yNDggNDBjMCAyMi45IDI3LjcgMzQuNCA0My45IDE4LjIgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0xNi4yIDE2LjItNC43IDQzLjkgMTguMiA0My45IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yMi45IDAtMzQuNCAyNy43LTE4LjIgNDMuOSA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwYy0xNi4yLTE2LjItNDMuOS00LjctNDMuOSAxOC4yIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMjIuOS0yNy43LTM0LjQtNDMuOS0xOC4yLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMTYuMi0xNi4yIDQuNy00My45LTE4LjItNDMuOS0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzIyLjkgMCAzNC40LTI3LjcgMTguMi00My45LTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMxNi4yIDE2LjIgNDMuOSA0LjcgNDMuOS0xOC4yIDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTUwNCAzODRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXX0saU50PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNjaG9vbC1mbGFnIixpY29uOls1NzYsNTEyLFtdLCJlNTZlIiwiTTI1Ni04YzAtMTMuMyAxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTcyIDAgMCAxOS4yIDEyOCA3Ni44IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDEyOC03Ni44IDAtOTEuMnpNMjQwIDM4NGwwIDgwIDk2IDAgMC04MGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHpNMTEyIDQxNmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNNDk2IDQxNmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnptLTIyNCAwYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnoiXX0sb050PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyYWRlbWFyayIsaWNvbjpbNjQwLDUxMixbODQ4Ml0sImYyNWMiLCJNMzQ2LjYgMTEwLjJjLTcuOC0xMS43LTIyLjQtMTctMzUuOS0xMi45UzI4OCAxMTMuOSAyODggMTI4bDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNTAuMyA2OS40IDEwNC4xYzUuOSA4LjkgMTUuOSAxNC4yIDI2LjYgMTQuMnMyMC43LTUuMyAyNi42LTE0LjJMNTQ0IDIzMy43IDU0NCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1NmMwLTE0LjEtOS4yLTI2LjUtMjIuNy0zMC42cy0yOC4xIDEuMS0zNS45IDEyLjlMNDQ4IDI2Mi4zIDM0Ni42IDExMC4yek0zMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhzMTQuMyAzMiAzMiAzMmw2NCAwIDAgMjI0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA5NnoiXX0sc050PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpcmUtYnVybmVyIixpY29uOls1MTIsNTEyLFtdLCJlNGYxIiwiTTI4MS43IDQ4LjNMMjk0IDM0LjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOSA3LjIgMCAxNC4zIDIuNiAxOS45IDcuOCAxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjYgMTUuMSAyNy4yIDI2LjIgNTguMSAyNi4yIDg4LjEgMCA4OC43LTcxLjMgMTU5LjgtMTYwIDE1OS44LTg5LjYgMC0xNjAtNzEuMy0xNjAtMTU5LjggMC0zNy4zIDE2LTczLjQgMzYuOC0xMDQuNSAyMC45LTMxLjMgNDcuNS01OSA3MC45LTgwLjIgNS43LTUuMiAxMy4xLTcuNyAyMC4zLTcuNXMxMy40IDMuMiAxOC44IDcuNWMxNC40IDExLjQgMzguOSA0MC43IDM4LjkgNDAuN3pNMzIwIDI0MC4yYzAtMzYuNS0zNy03My01NC44LTg4LjQtNS40LTQuNy0xMy4xLTQuNy0xOC41IDAtMTcuNyAxNS40LTU0LjggNTEuOS01NC44IDg4LjQgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNOTIuOCAzMjBjMzcuNyA0OC4zIDk2LjEgODAgMTYzLjIgODAgNjYuNSAwIDEyNS4xLTMxLjcgMTYzLTgwbDQ1IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNjRjMC0yNi41IDIxLjUtNDggNDgtNDhsNDQuOCAwek00NTYgNDAwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il19LGw0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLXNtaWxlLWJlYW0iLGljb246WzUxMiw1MTIsWzEyODUyMiwic21pbGUtYmVhbSJdLCJmNWI4IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjUuNCAzMjEuOWMyMC40IDI4IDUzLjQgNDYuMSA5MC42IDQ2LjFzNzAuMi0xOC4xIDkwLjYtNDYuMWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41QzM1Ni4zIDM5MCAzMDkuMiA0MTYgMjU2IDQxNnMtMTAwLjMtMjYtMTI5LjQtNjUuOWMtNy44LTEwLjctNS40LTI1LjcgNS4zLTMzLjVzMjUuNy01LjQgMzMuNSA1LjN6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdfSxuTnQ9bDRlLGxOdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW50LWFycm93LWxlZnQtcmlnaHQiLGljb246WzUxMiw1MTIsW10sImU1N2YiLCJNLS41IDExM2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNzItNzJjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMSAzMSAzMTAuMSAwIDU0LjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xMDIuMSAwLS4xIDAtMjYyIDAgMzEgMzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNzItNzJ6TTM3LjEgNDc2TDYwLjMgMjkyLjZjMS4yLTkuNyA2LjgtMTguMyAxNS4xLTIzLjNMMjM4LjggMTcwYzEwLjItNi4yIDIyLjktNi4yIDMzLjEtLjFsMTY1LjUgOTkuNGM4LjQgNSAxNCAxMy43IDE1LjMgMjMuNEw0NzUuOSA0NzZjMi40IDE5LjEtMTIuNSAzNi0zMS43IDM2bC03MS45IDBjLTEyLjEgMC0yMy4yLTYuOC0yOC42LTE3LjdMMjc1LjQgMzU3LjljLTEuOC0zLjYtNS41LTUuOS05LjUtNS45LTUuOSAwLTEwLjYgNC43LTEwLjYgMTAuNmwwIDExNy40YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDY4LjggNTEyYy0xOS4zIDAtMzQuMi0xNi45LTMxLjctMzZ6Il19LGNOdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyb3V0ZSIsaWNvbjpbNTEyLDUxMixbXSwiZjRkNyIsIk01MTIgOTZjMCA1MC4yLTU5LjEgMTI1LjEtODQuNiAxNTUtMy44IDQuNC05LjQgNi4xLTE0LjUgNUwzMjAgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZsLTI3Ni40IDBjOC43LTkuOSAxOS4zLTIyLjYgMzAtMzYuOCA2LjMtOC40IDEyLjgtMTcuNiAxOS0yNy4yTDQxNiA0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDBjLTUzIDAtOTYtNDMtOTYtOTZzNDMtOTYgOTYtOTZsMzkuOCAwYy0yMS0zMS41LTM5LjgtNjcuNy0zOS44LTk2IDAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZ6TTExNy4xIDQ4OS4xYy0zLjggNC4zLTcuMiA4LjEtMTAuMSAxMS4zbC0xLjggMi0uMi0uMmMtNiA0LjYtMTQuNiA0LTIwLTEuOC0yNS4yLTI3LjQtODUtOTcuOS04NS0xNDguNCAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgMzAtMjEuMSA2Ny00My41IDk3LjktMTAuNyAxNC43LTIxLjcgMjgtMzAuOCAzOC41bC0uNiAuN3pNMTI4IDM1MmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek00MTYgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0sYzRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFuZ2xlcy11cCIsaWNvbjpbMzg0LDUxMixbImFuZ2xlLWRvdWJsZS11cCJdLCJmMTAyIiwiTTIxNC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5MiAxMDkuMyAzMjkuNCAyNDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwem0xNjAgMzUybC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIgMzAxLjMgMzI5LjQgNDM4LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM3oiXX0sZE50PWM0ZSxmTnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVja2V0IixpY29uOls0NDgsNTEyLFtdLCJlNGNmIiwiTTQ0My43IDIwOGMyLjcgNC43IDQuMyAxMC4yIDQuMyAxNiAwIDE3LjctMTQuMyAzMi0zMiAzMmwtNS4xIDAtMjIuNCAyMTNjLTIuNiAyNC40LTIzLjIgNDMtNDcuOCA0M2wtMjMzLjYgMGMtMjQuNiAwLTQ1LjItMTguNS00Ny44LTQzTDM3LjEgMjU2IDMyIDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzIgMC01LjggMS42LTExLjMgNC4zLTE2bDQzOS40IDB6TTIyNC0xNmM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGwwIDMyLTQ4IDAgMC0zMmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDMyLTQ4IDAgMC0zMkM4MCA0OC41IDE0NC41LTE2IDIyNC0xNnoiXX0sdU50PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imxlc3MtdGhhbi1lcXVhbCIsaWNvbjpbNDQ4LDUxMixbXSwiZjUzNyIsIk00MjYuMSA5NC40YzE2LjgtNS42IDI1LjgtMjMuNyAyMC4yLTQwLjVzLTIzLjctMjUuOC00MC41LTIwLjJsLTM4NCAxMjhDOC44IDE2NiAwIDE3OC4yIDAgMTkyczguOCAyNiAyMS45IDMwLjRsMzg0IDEyOGMxNi44IDUuNiAzNC45LTMuNSA0MC41LTIwLjJzLTMuNS0zNC45LTIwLjItNDAuNUwxMzMuMiAxOTIgNDI2LjEgOTQuNHpNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQxNnoiXX0scE50PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZvbGRlci1jbG9zZWQiLGljb246WzUxMiw1MTIsW10sImUxODUiLCJNNDQ4IDQ0OEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2IDUxMiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0em02NC0yODhMMCAxNjAgMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwxMzguNyAwYzEzLjggMCAyNy4zIDQuNSAzOC40IDEyLjhsMzguNCAyOC44YzUuNSA0LjIgMTIuMyA2LjQgMTkuMiA2LjRMNDQ4IDgwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTZ6Il19LGhOdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tdGhyb3VnaC13aW5kb3ciLGljb246WzY0MCw1MTIsW10sImU1YTkiLCJNNjQgNjRsMjI0IDAgMCA5LjhjMCAzOS0yMy43IDc0LTU5LjkgODguNC02MC41IDI0LjItMTAwLjEgODIuNy0xMDAuMSAxNDcuOWwwIDczLjgtNjQgMCAwLTMyMHptMjg4IDBsMjI0IDAgMCAzMjAtNjcuNyAwLTMuNy00LjUtNzUuMi05MC4yYy05LjEtMTAuOS0yMi42LTE3LjMtMzYuOS0xNy4zbC03MS4xIDAtNDEtNjMuMWMtLjMtLjUtLjYtMS0xLTEuNCA0NC43LTI5IDcyLjUtNzkgNzIuNS0xMzMuNmwwLTkuOHptNzMgMzIwbC0yNi42IDAgNDIuNyA2NCAxNTAuOSAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgNDAwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI2MC4yIDAgMzMuMiA0OS44YzkuOCAxNC43IDI5LjcgMTguNyA0NC40IDguOXMxOC43LTI5LjcgOC45LTQ0LjRsLTg0LjItMTI2LjIgNzQuNiAwIDQwIDQ4em0tMTU5LjUgMGwtNzMuNSAwIDAtNzMuOGMwLTEwLjIgMS42LTIwLjEgNC43LTI5LjVMMjY1LjUgMzg0ek0xOTIgMTI4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il19LG1OdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzY2hvb2wtbG9jayIsaWNvbjpbNjQwLDUxMixbXSwiZTU2ZiIsIk0wIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDEyNy45LTExNS4xYzE4LjMtMTYuNCA0Ni0xNi40IDY0LjIgMEw0NDggMTI4IDUxMiAxMjhjMzMgMCA2MC4yIDI1IDYzLjYgNTcuMi0xNC43LTUuOS0zMC44LTkuMi00Ny42LTkuMi03MC43IDAtMTI4IDU3LjMtMTI4IDEyOGwwIDI0LjRjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJ6TTMzMi4zIDM0MS41Yy02LTMuNS0xMi45LTUuNS0yMC4zLTUuNWwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA4OCA5NiAwIDAtNjQuMWMwLTIwLjggNC40LTQwLjUgMTIuMy01OC40ek0xMTIgMzg0YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2em0yMjQtNDhhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek01NjAgMzUybDAtNDcuOWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMHptLTExMiAyLjdsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjN6Il19LGdOdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tYnVyc3QiLGljb246WzY0MCw1MTIsW10sImU1M2IiLCJNMjA0IDQwLjFjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0ek00IDE0NC4xYzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek05Ni41IDI4NS41Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMOTYuNSAyODUuNXpNNjIuNiAyLjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzMuOSAzMy45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNjIuNiAzNi42Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpNMzUyLjQtMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTQ3OC43IDI5OS4xbC00Ni4zLTYyLjQgMCAyNzUuM2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI3NS4zLTQ2LjMgNjIuNGMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuNnMtMTcuMi0zMC42LTYuNi00NC44bDcwLjUtOTVjMjUuMi0zMy45IDY1LTUzLjkgMTA3LjItNTMuOXM4MiAyMCAxMDcuMiA1My45bDcwLjUgOTVjMTAuNSAxNC4yIDcuNiAzNC4yLTYuNiA0NC44cy0zNC4yIDcuNi00NC44LTYuNnoiXX0sZDRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxlZnQtbG9uZyIsaWNvbjpbNTc2LDUxMixbImxvbmctYXJyb3ctYWx0LWxlZnQiXSwiZjMwYSIsIk05LjQgMjc4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDEyOC0xMjhjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTMTkyIDExNS4xIDE5MiAxMjhsMCA2NCAzMzYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMzYgMCAwIDY0YzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC0xMjgtMTI4eiJdfSx4TnQ9ZDRlLGY0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsb2NhdGlvbi1jcm9zc2hhaXJzIixpY29uOls1NzYsNTEyLFsibG9jYXRpb24iXSwiZjYwMSIsIk0yODgtMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxOC4zYzk4LjEgMTQgMTc1LjcgOTEuNiAxODkuNyAxODkuN2wxOC4zIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjMgMGMtMTQgOTguMS05MS42IDE3NS43LTE4OS43IDE4OS43bDAgMTguM2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4LjNDMTU3LjkgNDYzLjcgODAuMyAzODYuMSA2Ni4zIDI4OEw0OCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTguMyAwQzgwLjMgMTI1LjkgMTU3LjkgNDguMyAyNTYgMzQuM0wyNTYgMTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTEyOCAyNTZhMTYwIDE2MCAwIDEgMCAzMjAgMCAxNjAgMTYwIDAgMSAwIC0zMjAgMHptMTYwLTk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdfSxiTnQ9ZjRlLHU0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tZG90cy1mcm9tLWxpbmUiLGljb246WzUxMiw1MTIsWyJkaWFnbm9zZXMiXSwiZjQ3MCIsIk0xODQgNzJhNzIgNzIgMCAxIDEgMTQ0IDAgNzIgNzIgMCAxIDEgLTE0NCAwek0xNjAgMjk5LjNjLTE5LjkgMjIuNi0zMiA1Mi4yLTMyIDg0LjdsMCAzMi02NCAwIDAtMzJjMC0xMDYgODYtMTkyIDE5Mi0xOTJzMTkyIDg2IDE5MiAxOTJsMCAzMi02NCAwIDAtMzJjMC0zMi41LTEyLjEtNjIuMS0zMi04NC43bDAgMTE2LjctMTkyIDAgMC0xMTYuN3pNMjMyIDM4NGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTg4LTEwNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0yNCA0NjRsNDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek02NCAxODRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptNDI0IDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXX0sdk50PXU0ZSx2VT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnYXVnZS1zaW1wbGUtaGlnaCIsaWNvbjpbNTEyLDUxMixbNjE2NjgsInRhY2hvbWV0ZXIiLCJ0YWNob21ldGVyLWZhc3QiXSwiZjYyYSIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0xNi4yLTYtMzEuMS0xNi00Mi4zbDY5LjUtMTM4LjljNS45LTExLjkgMS4xLTI2LjMtMTAuNy0zMi4ycy0yNi4zLTEuMS0zMi4yIDEwLjdMMjYxLjEgMjg4LjJjLTEuNy0uMS0zLjQtLjItNS4xLS4yLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjQgNjQtMjguNyA2NC02NHoiXX0seU50PXZVLHdOdD12VSxwNGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5nbGVzLWxlZnQiLGljb246WzQ0OCw1MTIsWzE3MSwiYW5nbGUtZG91YmxlLWxlZnQiXSwiZjEwMCIsIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAyMTQuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHptMzUyLTE2MGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDI2OS4zIDI1NiA0MDYuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMHoiXX0sTU50PXA0ZSxoNGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXAtZG93biIsaWNvbjpbNTEyLDUxMixbODU5NywxMTAyMSwiYXJyb3dzLWFsdC12Il0sImYzMzgiLCJNNDA2LjYgNTAyLjZsOTYtOTZjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgMzUyIDQ4MCAzNTJsLTY0IDAgMC0zMjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMjAtNjQgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDB6TTE1MC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMxOS4xIDE2MCAzMiAxNjBsNjQgMCAwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIwIDY0IDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtOTYtOTZ6Il19LHpOdD1oNGUsbTRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhdHRlcnktZW1wdHkiLGljb246WzY0MCw1MTIsWyJiYXR0ZXJ5LTAiXSwiZjI0NCIsIk0xMTIgMTYwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyMjRjMCA4LjggNy4yIDE2IDE2IDE2bDQxNiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTIyNGMwLTguOC03LjItMTYtMTYtMTZsLTQxNiAwek0zMiAxNzZjMC00NC4yIDM1LjgtODAgODAtODBsNDE2IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCA0OGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybDAgNDhjMCA0NC4yLTM1LjggODAtODAgODBsLTQxNiAwYy00NC4yIDAtODAtMzUuOC04MC04MGwwLTIyNHoiXX0sa050PW00ZSxTTnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToia2V5Ym9hcmQiLGljb246WzU3Niw1MTIsWzllM10sImYxMWMiLCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTE2IDY0bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0xNzYgMTI4bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTE2MCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0yMjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MC0xNzZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAtODBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAtODBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXX0sQ050PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvb2tpZSIsaWNvbjpbNTEyLDUxMixbMTI3ODUwXSwiZjU2MyIsIk0yNDcuMiAxN2MtMjIuMS0zLjEtNDQuNiAuOS02NC40IDExLjRsLTc0IDM5LjVDODkuMSA3OC40IDczLjIgOTQuOSA2My40IDExNUwyNi43IDE5MC42Yy05LjggMjAuMS0xMyA0Mi45LTkuMSA2NC45bDE0LjUgODIuOGMzLjkgMjIuMSAxNC42IDQyLjMgMzAuNyA1Ny45bDYwLjMgNTguNGMxNi4xIDE1LjYgMzYuNiAyNS42IDU4LjcgMjguN2w4MyAxMS43YzIyLjEgMy4xIDQ0LjYtLjkgNjQuNC0xMS40bDc0LTM5LjVjMTkuNy0xMC41IDM1LjYtMjcgNDUuNC00Ny4ybDM2LjctNzUuNWM5LjgtMjAuMSAxMy00Mi45IDkuMS02NC45bC0xNC42LTgyLjhjLTMuOS0yMi4xLTE0LjYtNDIuMy0zMC43LTU3LjlMMzg4LjkgNTcuNWMtMTYuMS0xNS42LTM2LjYtMjUuNi01OC43LTI4LjdMMjQ3LjIgMTd6TTIwOCAxNDRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNDQgMzM2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTIyNC02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LExOdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdG9wd2F0Y2giLGljb246WzQ0OCw1MTIsWzkyMDFdLCJmMmYyIiwiTTE2OC41IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDI1LjNjLTEwOCAxMS45LTE5MiAxMDMuNS0xOTIgMjE0LjcgMCAxMTkuMyA5Ni43IDIxNiAyMTYgMjE2czIxNi05Ni43IDIxNi0yMTZjMC0zOS44LTEwLjgtNzcuMS0yOS42LTEwOS4ybDI4LjItMjguMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMjMuNCAyMy40Yy0zMi45LTMwLjItNzUuMi01MC4zLTEyMi01NS41bDAtMjUuMyAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHptODAgMTg0bDAgMTA0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il19LFROdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlamVjdCIsaWNvbjpbNDQ4LDUxMixbOTE2N10sImYwNTIiLCJNMjI0IDMyYzEzLjUgMCAyNi4zIDUuNiAzNS40IDE1LjZsMTc2IDE5MmMxMi45IDE0IDE2LjIgMzQuMyA4LjYgNTEuOFM0MTkgMzIwIDQwMCAzMjBMNDggMzIwYy0xOSAwLTM2LjMtMTEuMi00My45LTI4LjdzLTQuMy0zNy43IDguNi01MS44bDE3Ni0xOTJDMTk3LjcgMzcuNiAyMTAuNSAzMiAyMjQgMzJ6TTAgNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6Il19LF9OdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzYXRlbGxpdGUtZGlzaCIsaWNvbjpbNTEyLDUxMixbMTI4MjI1XSwiZjdjMCIsIk0yMzIgMGMxNTQuNiAwIDI4MCAxMjUuNCAyODAgMjgwIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTI4LjEtMTAzLjktMjMyLTIzMi0yMzItMTMuMyAwLTI0LTEwLjctMjQtMjRTMjE4LjcgMCAyMzIgMHpNMjA4IDEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxMDEuNiAwIDE4NCA4Mi40IDE4NCAxODQgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC03NS4xLTYwLjktMTM2LTEzNi0xMzYtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI2LjQgMTQyLjdjOC44LTE3LjkgMzIuNC0xOS45IDQ2LjUtNS44bDEyOC41IDEyOC41IDMyLTMyYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTMyIDMyIDEyOC41IDEyOC41YzE0LjEgMTQuMSAxMiAzNy42LTUuOCA0Ni41LTM0LjIgMTYuOS03Mi42IDI2LjQtMTEzLjMgMjYuNC0xNDEuNCAwLTI1Ni0xMTQuNi0yNTYtMjU2IDAtNDAuNyA5LjUtNzkuMiAyNi40LTExMy4zeiJdfSxnNGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1yb2xsaW5nLWV5ZXMiLGljb246WzUxMiw1MTIsWzEyODU4MCwibWVoLXJvbGxpbmctZXllcyJdLCJmNWE1IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xOTIgMzUybDEyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMjggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMzItMTI4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYgMTUuNS00OC40IDM3LjgtNTguNC0zLjcgNS4yLTUuOCAxMS42LTUuOCAxOC40IDAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC02LjktMi4yLTEzLjItNS44LTE4LjQgMjIuMyAxMCAzNy44IDMyLjQgMzcuOCA1OC40em0xMjggNjRjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjYgMTUuNS00OC40IDM3LjgtNTguNC0zLjcgNS4yLTUuOCAxMS42LTUuOCAxOC40IDAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC02LjktMi4yLTEzLjItNS44LTE4LjQgMjIuMyAxMCAzNy44IDMyLjQgMzcuOCA1OC40IDAgMzUuMy0yOC43IDY0LTY0IDY0eiJdfSxBTnQ9ZzRlLHg0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsaXN0LWNoZWNrIixpY29uOls1MTIsNTEyLFsidGFza3MiXSwiZjBhZSIsIk0xMzMuOCAzNi4zYzEwLjkgNy42IDEzLjUgMjIuNiA1LjkgMzMuNGwtNTYgODBjLTQuMSA1LjgtMTAuNSA5LjUtMTcuNiAxMC4xUzUyIDE1OCA0NyAxNTNMNyAxMTNDLTIuMyAxMDMuNi0yLjMgODguNCA3IDc5UzMxLjYgNjkuNyA0MSA3OWwxOS44IDE5LjggMzkuNi01Ni42YzcuNi0xMC45IDIyLjYtMTMuNSAzMy40LTUuOXptMCAxNjBjMTAuOSA3LjYgMTMuNSAyMi42IDUuOSAzMy40bC01NiA4MGMtNC4xIDUuOC0xMC41IDkuNS0xNy42IDEwLjFTNTIgMzE4IDQ3IDMxM0w3IDI3M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDE5LjggMTkuOCAzOS42LTU2LjZjNy42LTEwLjkgMjIuNi0xMy41IDMzLjQtNS45ek0yMjQgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTYwIDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjg4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek02NCAzNzZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdfSwkTnQ9eDRlLEROdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzYWNrLXhtYXJrIixpY29uOls1MTIsNTEyLFtdLCJlNTZhIiwiTTMyOCAxMTJsLTE0NCAwLTM3LjMtNzQuNWMtMS44LTMuNi0yLjctNy42LTIuNy0xMS42IDAtMTQuMyAxMS42LTI1LjkgMjUuOS0yNS45TDM0Mi4xIDBjMTQuMyAwIDI1LjkgMTEuNiAyNS45IDI1LjkgMCA0LS45IDgtMi43IDExLjZMMzI4IDExMnpNMTY5LjYgMTYwbDE3Mi44IDAgNDguNyA0MC42QzQ1Ny42IDI1NiA0OTYgMzM4IDQ5NiA0MjQuNSA0OTYgNDcyLjggNDU2LjggNTEyIDQwOC41IDUxMmwtMzA1LjEgMEM1NS4yIDUxMiAxNiA0NzIuOCAxNiA0MjQuNSAxNiAzMzggNTQuNCAyNTYgMTIwLjkgMjAwLjZMMTY5LjYgMTYwek0zMjMuOSAyODQuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTMzLjkgMzMuOS0zMy45LTMzLjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzMuOSAzMy45LTMzLjkgMzMuOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDMzLjktMzMuOSAzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMy45LTMzLjkgMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45eiJdfSxFTnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFzaHRhZyIsaWNvbjpbNTEyLDUxMixbNjIwOThdLCIyMyIsIk0yMTQuNyAuN2MxNy4zIDMuNyAyOC4zIDIwLjcgMjQuNiAzOGwtMTkuMSA4OS4zIDEyNi41IDAgMjItMTAyLjdDMzcyLjQgOCAzODkuNC0zIDQwNi43IC43czI4LjMgMjAuNyAyNC42IDM4TDQxMi4yIDEyOCA0ODAgMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04MS42IDAtMjcuNCAxMjggNjcuOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04MS42IDAtMjIgMTAyLjdjLTMuNyAxNy4zLTIwLjcgMjguMy0zOCAyNC42cy0yOC4zLTIwLjctMjQuNi0zOGwxOS4xLTg5LjMtMTI2LjUgMC0yMiAxMDIuN2MtMy43IDE3LjMtMjAuNyAyOC4zLTM4IDI0LjZzLTI4LjMtMjAuNy0yNC42LTM4TDk5LjggMzg0IDMyIDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MS42IDAgMjcuNC0xMjgtNjcuOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDgxLjYgMCAyMi0xMDIuN0MxODAuNCA4IDE5Ny40LTMgMjE0LjcgLjd6TTIwNi40IDE5MmwtMjcuNCAxMjggMTI2LjUgMCAyNy40LTEyOC0xMjYuNSAweiJdfSxOTnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJhaW4iLGljb246WzM4NCw1MTIsWzEyODY0Nl0sImYyMzgiLCJNMCA5NkMwIDQzIDQzIDAgOTYgMEwyODggMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjU2YzAgNDAuMS0yNC42IDc0LjUtNTkuNSA4OC44bDUzLjkgNjMuN2M4LjYgMTAuMSA3LjMgMjUuMy0yLjggMzMuOHMtMjUuMyA3LjMtMzMuOC0yLjhsLTc0LTg3LjUtMTUxLjMgMC03NCA4Ny41Yy04LjYgMTAuMS0yMy43IDExLjQtMzMuOCAyLjhzLTExLjQtMjMuNy0yLjgtMzMuOGw1My45LTYzLjdDMjQuNiA0MjYuNSAwIDM5Mi4xIDAgMzUyTDAgOTZ6bTY0IDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiA5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTE5MiAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxQTnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2FtZXBhZCIsaWNvbjpbNjQwLDUxMixbXSwiZjExYiIsIk00NDggNjRjMTA2IDAgMTkyIDg2IDE5MiAxOTJTNTU0IDQ0OCA0NDggNDQ4bC0yNTYgMEM4NiA0NDggMCAzNjIgMCAyNTZTODYgNjQgMTkyIDY0bDI1NiAwek0xOTIgMTc2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMiAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMzJjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0MCA5NmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTY0LTk2YTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHoiXX0sYjRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtZXhwb3J0IixpY29uOls1NzYsNTEyLFsiYXJyb3ctcmlnaHQtZnJvbS1maWxlIl0sImY1NmUiLCJNOTYuNSAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTk2IDc4LjEgMC0zMSAzMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDcyLTcyYzkuNC05LjQgOS40LTI0LjYgMC0zMy45bC03Mi03MmMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMSAzMS03OC4xIDAgMC0xMzMuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTEuMiAxOC43QzI3OS4yIDYuNyAyNjMgMCAyNDYgMEw5Ni41IDB6TTM1OCAxNzZsLTkzLjUgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwLjUgNTguNSAzNTggMTc2ek0yMjQuNSAzMjhjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTA0IDAgMCA0OC0xMDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il19LElOdD1iNGUsdjRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3JpbWFjZSIsaWNvbjpbNTEyLDUxMixbMTI4NTU2LCJncmltYWNlIl0sImY1N2YiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTQwMCAzNTJjMCAyNS4yLTE5LjQgNDUuOC00NCA0Ny44bDAtOTUuN2MyNC42IDIgNDQgMjIuNyA0NCA0Ny44ek0yNzYgMzA0bDQwIDAgMCA5Ni00MCAwIDAtOTZ6bS04MCA5NmwwLTk2IDQwIDAgMCA5Ni00MCAwem0tNDAtOTUuOGwwIDk1LjdjLTI0LjYtMi00NC0yMi43LTQ0LTQ3LjhzMTkuNC00NS44IDQ0LTQ3Ljh6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sRk50PXY0ZSx5NGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJhaW4tc3Vid2F5IixpY29uOlszODQsNTEyLFsic3Vid2F5Il0sImYyMzkiLCJNMCA5NkMwIDQzIDQzIDAgOTYgMEwyODggMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjU2YzAgNDAuMS0yNC42IDc0LjUtNTkuNSA4OC44bDUzLjkgNjMuN2M4LjYgMTAuMSA3LjMgMjUuMy0yLjggMzMuOHMtMjUuMyA3LjMtMzMuOC0yLjhsLTc0LTg3LjUtMTUxLjMgMC03NCA4Ny41Yy04LjYgMTAuMS0yMy43IDExLjQtMzMuOCAyLjhzLTExLjQtMjMuNy0yLjgtMzMuOGw1My45LTYzLjdDMjQuNiA0MjYuNSAwIDM5Mi4xIDAgMzUyTDAgOTZ6bTY0IDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsNzIgMCAwLTE2MC03MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMjE2IDI1Nmw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTcyIDAgMCAxNjB6TTk2IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTIyNC0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdfSxPTnQ9eTRlLHc0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtZG90IixpY29uOls1MTIsNTEyLFsxMjgyODAsImRvdC1jaXJjbGUiXSwiZjE5MiIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMC0zNTJhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il19LEJOdD13NGUsUk50PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im9iamVjdC1ncm91cCIsaWNvbjpbNTc2LDUxMixbXSwiZjI0NyIsIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0IDAgMjguNyAyOC43IDAgNjQgMCA4Ny43IDAgMTA4LjQgMTIuOSAxMTkuNCAzMmwzMzcuMSAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMjczLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNCAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTMzNy4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjczLjF6bTQ0OCAwYy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRMMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDI3My4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwzMzcuMSAwYzUuNi05LjcgMTMuNy0xNy44IDIzLjQtMjMuNGwwLTI3My4xek0xNDQgMTc2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDExMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTExMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0ek0yNTYgMzIwbDMyIDBjNDQuMiAwIDgwLTM1LjggODAtODBsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnoiXX0sSE50PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNoaXAiLGljb246WzY0MCw1MTIsWzEyODY3NF0sImYyMWEiLCJNMjcyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTYtMTYgMGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAxMDguOC0yMS42IDguNmMtMTQuOCA1LjktMjIuNSAyMi40LTE3LjQgMzcuNSAxMC40IDMxLjMgMjYuOCA1OS4zIDQ3LjcgODMuMSAyMC4xLTkuMiA0MS43LTEzLjkgNjMuMy0xNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjRsMS42IDEuMiAwLTIxNS0xMDQgNDEuNiAwLTgzLjJjMC04LjggNy4yLTE2IDE2LTE2bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgzLjItMTA0LTQxLjYgMCAyMTUgMS42LTEuMmMyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAyMi4zLS4xIDQ0LjYgNC41IDY1LjMgMTQgMjAuOS0yMy43IDM3LjMtNTEuOCA0Ny43LTgzLjEgNS0xNS4yLTIuNi0zMS42LTE3LjQtMzcuNUw1MTIgMjUyLjggNTEyIDE0NGMwLTQ0LjItMzUuOC04MC04MC04MGwtMTYgMCAwLTE2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDI3MiAwek00MDMuNCA0NzYuMWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAxOSAxNC40IDQxLjkgMjguMiA2Ny4yIDMzLjMgMjYuNSA1LjQgNTQuMyAuOCA4MC43LTE5LjEgMTAuNi04IDEyLjctMjMgNC43LTMzLjZzLTIzLTEyLjctMzMuNi00LjdjLTE0LjkgMTEuMi0yOC42IDEzLjEtNDIuMyAxMC4zLTE0LjktMy0zMC45LTExLjktNDcuOC0yNC42LTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTIxLjYgMTYuMy00MS4zIDI1LjgtNTguOSAyNS43LTkuNi0uMS0xOS45LTMtMzEuMi0xMS41LTEwLjYtOC0yNS42LTUuOS0zMy42IDQuN1M3IDQ4Mi4zIDE3LjYgNDkwLjNjMTkuMSAxNC40IDM5LjQgMjEgNTkuOCAyMS4xIDMzLjkgLjIgNjQuMy0xNy40IDg4LjEtMzUuMyAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45eiJdfSxxTnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYyIsaWNvbjpbMzg0LDUxMixbOTldLCI0MyIsIk0zMjkuMSAxNDIuOWMtNjIuNS02Mi41LTE1NS44LTYyLjUtMjE4LjMgMHMtNjIuNSAxNjMuOCAwIDIyNi4zIDE1NS44IDYyLjUgMjE4LjMgMGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy04Ny41IDg3LjUtMjIxLjMgODcuNS0zMDguOCAwcy04Ny41LTIyOS4zIDAtMzE2LjggMjIxLjMtODcuNSAzMDguOCAwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAweiJdfSxNNGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLXBob25lIixpY29uOls0NDgsNTEyLFsicGhvbmUtc3F1YXJlIl0sImYwOTgiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptODggOTYuN2M5LjgtMi43IDIwLjEgMi40IDI0IDExLjhsMjAuMyA0OC43YzMuNCA4LjMgMS4xIDE3LjgtNS45IDIzLjVsLTIyLjEgMThjMTYuMiAzNS44IDQ0LjUgNjUgNzkuNiA4Mi40bDE5LjMtMjMuNmM1LjctNi45IDE1LjItOS4zIDIzLjUtNS45bDQ4LjcgMjAuM2M5LjQgMy45IDE0LjQgMTQuMiAxMS44IDI0bC0uOCAyLjhjLTguOCAzMi4zLTQwLjEgNTkuOS03OC4yIDUxLjgtODcuNS0xOC41LTE1Ni4zLTg3LjQtMTc0LjktMTc0LjktOC4xLTM4LjEgMTkuNS02OS40IDUxLjgtNzguMmwyLjgtLjh6Il19LFZOdD1NNGUsVU50PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJ1bGVyLWNvbWJpbmVkIixpY29uOls0NDgsNTEyLFtdLCJmNTQ2IiwiTTEgNDQxLjdDNS41IDQ2My41IDI0LjggNDgwIDQ4IDQ4MGwzNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00OCAwIDAgNzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03Mi02NCAwIDAgNzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03Mi03MiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDAgMC02NC03MiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDAgMC00OGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMy4zIC4zIDYuNiAxIDkuN3oiXX0seVU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3dzLXJvdGF0ZSIsaWNvbjpbNTEyLDUxMixbMTI4NDcyLCJyZWZyZXNoIiwic3luYyJdLCJmMDIxIiwiTTY1LjkgMjI4LjVjMTMuMy05MyA5My40LTE2NC41IDE5MC4xLTE2NC41IDUzIDAgMTAxIDIxLjUgMTM1LjggNTYuMiAuMiAuMiAuNCAuNCAuNiAuNmw3LjYgNy4yLTQ3LjkgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUzLjQtMTEuMy0xMC43QzM5MC41IDI4LjYgMzI2LjUgMCAyNTYgMCAxMjcgMCAyMC4zIDk1LjQgMi42IDIxOS41IC4xIDIzNyAxMi4yIDI1My4yIDI5LjcgMjU1LjdzMzMuNy05LjcgMzYuMi0yNy4xem00NDMuNSA2NGMyLjUtMTcuNS05LjctMzMuNy0yNy4xLTM2LjJzLTMzLjcgOS43LTM2LjIgMjcuMWMtMTMuMyA5My05My40IDE2NC41LTE5MC4xIDE2NC41LTUzIDAtMTAxLTIxLjUtMTM1LjgtNTYuMi0uMi0uMi0uNC0uNC0uNi0uNmwtNy42LTcuMiA0Ny45IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzIwYy04LjUgMC0xNi43IDMuNC0yMi43IDkuNVMtLjEgMzQzLjcgMCAzNTIuM2wxIDEyN2MuMSAxNy43IDE0LjYgMzEuOSAzMi4zIDMxLjdTNjUuMiA0OTYuNCA2NSA0NzguN2wtLjQtNTEuNSAxMC43IDEwLjFjNDYuMyA0Ni4xIDExMC4yIDc0LjcgMTgwLjcgNzQuNyAxMjkgMCAyMzUuNy05NS40IDI1My40LTIxOS41eiJdfSxqTnQ9eVUsV050PXlVLHo0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tZHJlc3MiLGljb246WzM4NCw1MTIsWyJmZW1hbGUiXSwiZjE4MiIsIk0xMzYgMjRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMTIgMzg0bC0yNS44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDQzLTEyOS00OC4zIDY1LjFjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1QzExMCAxMzIgMTQ5LjcgMTEyIDE5MiAxMTJzODIgMjAgMTA3LjIgNTMuOWw3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZMMjcwIDIzNCAzMTMgMzYyLjljMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xbC0yNS44IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMzIgMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOHoiXX0sR050PXo0ZSxZTnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9vay1vcGVuIixpY29uOls1MTIsNTEyLFsxMjgyMTQsMTI4MzY2XSwiZjUxOCIsIk0yNTYgMTQxLjNsMCAzMDkuMyAuNS0uMkMzMTEuMSA0MjcuNyAzNjkuNyA0MTYgNDI4LjggNDE2bDE5LjIgMCAwLTMyMC0xOS4yIDBjLTQyLjIgMC04NC4xIDguNC0xMjMuMSAyNC42LTE2LjggNy0zMy40IDEzLjktNDkuNyAyMC43ek0yMzAuOSA2MS41TDI1NiA3MiAyODEuMSA2MS41QzMyNy45IDQyIDM3OC4xIDMyIDQyOC44IDMyTDQ2NCAzMmMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzUuMiAwYy01MC43IDAtMTAwLjkgMTAtMTQ3LjcgMjkuNWwtMTIuOCA1LjNjLTcuOSAzLjMtMTYuNyAzLjMtMjQuNiAwbC0xMi44LTUuM0MxODQuMSA0OTAgMTMzLjkgNDgwIDgzLjIgNDgwTDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNS4yIDBjNTAuNyAwIDEwMC45IDEwIDE0Ny43IDI5LjV6Il19LFpOdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmb2xkZXItdHJlZSIsaWNvbjpbNTc2LDUxMixbXSwiZjgwMiIsIk00OCAyNEM0OCAxMC43IDM3LjMgMCAyNCAwUzAgMTAuNyAwIDI0TDAgMzkyYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDE4NCAwIDAtNDgtMTg0IDBjLTQuNCAwLTgtMy42LTgtOGwwLTIzMiAxOTIgMCAwLTQ4LTE5MiAwIDAtODh6TTMzNiAyMjRsMTkyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtODIuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtOC42LTguNmMtOS05LTIxLjItMTQuMS0zMy45LTE0LjFMMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em0wIDI4OGwxOTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC04Mi43IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40bC04LjYtOC42Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUwzMzYgMjg4Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEyOGMwIDI2LjUgMjEuNSA0OCA0OCA0OHoiXX0sazRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJveC1hcmNoaXZlIixpY29uOls1MTIsNTEyLFsiYXJjaGl2ZSJdLCJmMTg3IiwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiAxMjhDMTQuMyAxMjggMCAxMTMuNyAwIDk2TDAgNjR6TTMyIDE3Nmw0NDggMCAwIDI0MGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMjQwem0xNTIgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdfSxYTnQ9azRlLFFOdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW50LWFycm93LWRvd24tdG8tbGluZSIsaWNvbjpbNTc2LDUxMixbXSwiZTU3ZSIsIk0xODUgMTIxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjFDMTIwIDIuNyAxMDkuMy04IDk2LThTNzIgMi43IDcyIDE2bDAgMTAyLjEtMzEtMzFDMzEuNiA3Ny43IDE2LjQgNzcuNyA3IDg3Uy0yLjMgMTExLjYgNyAxMjFsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJ6TTE1NS44IDI2MC42TDEzMi4xIDQ0OCAzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC0yLjgtLjQtNS41LTEtOEw1NDguMiAyNjAuN2MtMS4yLTkuNy02LjktMTguNC0xNS4zLTIzLjRMMzY3LjQgMTM3LjljLTEwLjItNi4xLTIyLjktNi4xLTMzLjEgLjFMMTcwLjkgMjM3LjNjLTguMyA1LjEtMTMuOSAxMy43LTE1LjEgMjMuM3pNNDQ4IDQ0OGwtOTcuMSAwIDAtMTQ5LjRjMC01LjkgNC43LTEwLjYgMTAuNi0xMC42IDQgMCA3LjcgMi4zIDkuNSA1LjlMNDQ4IDQ0OHoiXX0sS050PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InFyY29kZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjAyOSIsIk02NCAxNjBsNjQgMCAwLTY0LTY0IDAgMCA2NHpNMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODB6TTY0IDQxNmw2NCAwIDAtNjQtNjQgMCAwIDY0ek0wIDMzNmMwLTI2LjUgMjEuNS00OCA0OC00OGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6TTMyMCA5NmwwIDY0IDY0IDAgMC02NC02NCAwek0zMDQgMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek0yODggMzUyYTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMi0zMi0xNC4zLTMyLTMyIDE0LjMtMzIgMzItMzJ6bTk2IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzItMTQuMyAzMi0zMiAzMi0zMi0xNC4zLTMyLTMyem0zMi05NmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bS0zMiAzMmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAweiJdfSxKTnQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZHJhZ29uIixpY29uOls2NDAsNTEyLFsxMjgwMDldLCJmNmQ1IiwiTTM1MiAxMjQuNWwtNTEuOS0xM2MtNi41LTEuNi0xMS4zLTcuMS0xMi0xMy44czIuOC0xMy4xIDguNy0xNi4xbDQwLjgtMjAuNC00My4zLTMyLjVjLTUuNS00LjEtNy44LTExLjMtNS42LTE3LjlTMjk3LjEgMCAzMDQgMEw0NjQgMGMzMC4yIDAgNTguNyAxNC4yIDc2LjggMzguNGw1Ny42IDc2LjhjNi4yIDguMyA5LjYgMTguNCA5LjYgMjguOCAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjEuNSAwYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN2wtMTMuMy0xMy4zLTMyIDAgMCAyMS41YzAgMjQuOCAxMi44IDQ3LjkgMzMuOCA2MS4xbDEwNi42IDY2LjZjMzIuMSAyMC4xIDUxLjYgNTUuMiA1MS42IDkzLjEgMCA2MC42LTQ5LjEgMTA5LjgtMTA5LjggMTA5LjhMMzIuMyA1MTJjLTMuMyAwLTYuNi0uNC05LjYtMS40LTkuMi0yLjgtMTYuNy05LjYtMjAuNC0xOC42LTEuMy0zLjMtMi4yLTYuOS0yLjMtMTAuNy0uMi0zLjcgLjMtNy4zIDEuMy0xMC43IDIuOC05LjIgOS42LTE2LjcgMTguNi0yMC40IDMtMS4yIDYuMi0yIDkuNS0yLjJMNDMzLjMgNDEyYzguMy0uNyAxNC43LTcuNyAxNC43LTE2LjEgMC00LjMtMS43LTguNC00LjctMTEuNGwtNDQuNC00NC40Yy0zMC0zMC00Ni45LTcwLjctNDYuOS0xMTMuMWwwLTEwMi41ek01MTIgNzIuM2MwLS4xIDAtLjIgMC0uM3MwLS4yIDAtLjNsMCAuNnptLTEuMyA3LjRMNDY0LjMgNjguMWMtLjIgMS4zLS4zIDIuNi0uMyAzLjkgMCAxMy4zIDEwLjcgMjQgMjQgMjQgMTAuNiAwIDE5LjUtNi44IDIyLjctMTYuM3pNMTMwLjkgMTE2LjVjMTYuMy0xNC41IDQwLjQtMTYuMiA1OC41LTQuMWwxMzAuNiA4NyAwIDI3LjVjMCAzMi44IDguNCA2NC44IDI0IDkzbC0yMzIgMGMtNi43IDAtMTIuNy00LjItMTUtMTAuNHMtLjUtMTMuMyA0LjYtMTcuN0wxNzEgMjMyLjMgMTguNCAyNTUuOGMtNyAxLjEtMTMuOS0yLjYtMTYuOS05Uy4xIDIzMi44IDUuNCAyMjhMMTMwLjkgMTE2LjV6Il19LFM0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VyZ2xhc3MtZW5kIixpY29uOlszODQsNTEyLFs4OTg3LCJob3VyZ2xhc3MtMyJdLCJmMjUzIiwiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAxMWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFsNjcuOSA2Ny45LTY3LjkgNjcuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN2wwIDExYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTFjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC02Ny45LTY3LjkgNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xbDAtMTFjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzY5LjcgMCAzNTIgMEwzMiAwek05NiA3NWwwLTExIDE5MiAwIDAgMTFjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlsLTY3LjkgNjcuOS02Ny45LTY3LjlDMTA2LjEgMTI0LjkgOTYgMTAwLjQgOTYgNzV6Il19LGVQdD1TNGUscjU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ3JpcCIsaWNvbjpbNTEyLDUxMixbNTgxMTksImdyaWQtaG9yaXpvbnRhbCIsImdyaXAtaG9yaXpvbnRhbCJdLCJmNThkIiwiTTg4IDk2YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMHpNMjgwIDIyNGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDB6bTE5MiAwbC00OCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MHptMCAxOTJsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwek0yODAgMjg4YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMHpNODggNDE2bC00OCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MHoiXX0sdFB0PXI1LGFQdD1yNSxDNGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9yZGVyLXRvcC1sZWZ0IixpY29uOls0NDgsNTEyLFsiYm9yZGVyLXN0eWxlIl0sImY4NTMiLCJNMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM1MiAzNTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDQ4em0xMjggMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMnptMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzJ6bTE2MCAzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6TTM4NCAxOTJhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHptMzIgMTYwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0sclB0PUM0ZSxMNGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGlzdC11bCIsaWNvbjpbNTEyLDUxMixbImxpc3QtZG90cyJdLCJmMGNhIiwiTTQ4IDE0NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTE5MiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwxOTIgNjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yODggMHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwek00OCA0NjRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek05NiAyNTZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXX0saVB0PUw0ZSxvUHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVvcGxlLXJvYmJlcnkiLGljb246WzU3Niw1MTIsW10sImU1MzYiLCJNNDg4LjIgNTkuMUM0NzguMSA5OS42IDQ0MS43IDEyOCA0MDAgMTI4cy03OC4xLTI4LjQtODguMi02OC45TDMwMyAyNC4yQzI5OC44IDcuMSAyODEuNC0zLjMgMjY0LjIgMVMyMzYuNyAyMi42IDI0MSAzOS44bDguNyAzNC45YzExIDQ0IDQwLjIgNzkuNiA3OC4zIDk5LjZMMzI4IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDE2IDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNS43YzM4LjEtMjAgNjcuMy01NS42IDc4LjMtOTkuNkw1NTkgMzkuOGM0LjMtMTcuMS02LjEtMzQuNS0yMy4zLTM4LjhTNTAxLjIgNy4xIDQ5NyAyNC4ybC04LjcgMzQuOXpNNDAwIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNODAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0tOCAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA5NiAwIC42IDAgMTkxLjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxNiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMjcuMyAxMyAyMC41YzUuOSA5LjIgMTYuMSAxNC45IDI3IDE0LjlsNDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzAuNCAwLTM3LjQtNTguOUMxNTcuNiAxNDIgMTMyLjEgMTI4IDEwNC43IDEyOEw3MiAxMjh6Il19LHNQdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb2JpbGUtYnV0dG9uIixpY29uOlszODQsNTEyLFtdLCJmMTBiIiwiTTgwIDBDNDQuNyAwIDE2IDI4LjcgMTYgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMODAgMHpNMTkyIDQ2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6Il19LHdVPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LWRvd24tYS16IixpY29uOls1MTIsNTEyLFsic29ydC1hbHBoYS1hc2MiLCJzb3J0LWFscGhhLWRvd24iXSwiZjE1ZCIsIk0yMzAuNiAzOTAuNmwtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAzNzAuNyA5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzA2LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6bTE4Mi0zNDAuOWM1MC43IDEwMS4zIDc3LjMgMTU0LjcgODAgMTYwIDcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlzLTM1IDEuNS00Mi45LTE0LjNsLTcuMi0xNC4zLTg4LjQgMC03LjIgMTQuM2MtNy45IDE1LjgtMjcuMSAyMi4yLTQyLjkgMTQuM3MtMjIuMi0yNy4xLTE0LjMtNDIuOWMyLjctNS4zIDI5LjMtNTguNyA4MC0xNjAgNS40LTEwLjggMTYuNS0xNy43IDI4LjYtMTcuN3MyMy4yIDYuOCAyOC42IDE3Ljd6TTM4NCAxMzUuNmwtMjAuMiA0MC40IDQwLjQgMC0yMC4yLTQwLjR6TTI4OCAzMjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUwzOTcuMyA0MTYgNDQ4IDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45bDczLjQtNzMuNC01MC43IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxuUHQ9d1UsbFB0PXdVLGNQdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb25leS1iaWxsIixpY29uOls1MTIsNTEyLFtdLCJmMGQ2IiwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em0xOTIgOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTE5MiAyNGMwIDQuNC0zLjYgOC4xLTggNy41LTI5LTMuNi01MS45LTI2LjYtNTUuNS01NS41LS41LTQuNCAzLjEtOCA3LjUtOGw0OCAwYzQuNCAwIDggMy42IDggOGwwIDQ4ek02NCAzMjhjMC00LjQgMy42LTguMSA4LTcuNSAyOSAzLjYgNTEuOSAyNi42IDU1LjUgNTUuNSAuNSA0LjQtMy4xIDgtNy41IDhsLTQ4IDBjLTQuNCAwLTgtMy42LTgtOGwwLTQ4em04LTEzNi41Yy00LjQgLjUtOC0zLjEtOC03LjVsMC00OGMwLTQuNCAzLjYtOCA4LThsNDggMGM0LjQgMCA4LjEgMy42IDcuNSA4LTMuNiAyOS0yNi42IDUxLjktNTUuNSA1NS41em0zNjggMTI5YzQuNC0uNSA4IDMuMSA4IDcuNWwwIDQ4YzAgNC40LTMuNiA4LTggOGwtNDggMGMtNC40IDAtOC4xLTMuNi03LjUtOCAzLjYtMjkgMjYuNi01MS45IDU1LjUtNTUuNXoiXX0sVDRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1taW51cyIsaWNvbjpbNTEyLDUxMixbIm1pbnVzLWNpcmNsZSJdLCJmMDU2IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjggMjMybDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sZFB0PVQ0ZSxfNGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctcG9pbnRlciIsaWNvbjpbNDQ4LDUxMixbIm1vdXNlLXBvaW50ZXIiXSwiZjI0NSIsIk03Ny4zIDIuNWM4LjEtNC4xIDE3LjktMy4yIDI1LjEgMi4zbDMyMCAyMzkuOWM4LjMgNi4yIDExLjYgMTcgOC40IDI2LjhzLTEyLjQgMTYuNC0yMi44IDE2LjRsLTE1Mi4zIDAgODguOSAxNzcuN2M3LjkgMTUuOCAxLjUgMzUtMTQuMyA0Mi45cy0zNSAxLjUtNDIuOS0xNC4zbC04OC45LTE3Ny43LTkxLjMgMTIxLjhjLTYuMiA4LjMtMTcgMTEuNi0yNi44IDguNFM2NCA0MzQuMyA2NCA0MjRMNjQgMjRjMC05LjEgNS4xLTE3LjQgMTMuMy0yMS41eiJdfSxmUHQ9XzRlLEE0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtc2hhcmUtbm9kZXMiLGljb246WzQ0OCw1MTIsWyJzaGFyZS1hbHQtc3F1YXJlIl0sImYxZTEiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzY4IDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NC0xNS40IDAtMjkuNS01LjQtNDAuNi0xNC41bC04NS4zIDQ2LjUgODUuMyA0Ni41YzExLTkuMSAyNS4yLTE0LjUgNDAuNi0xNC41IDM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0LTY0LTI4LjctNjQtNjRjMC0yLjUgLjEtNC45IC40LTcuM0wxNTguNSAzMDBjLTExLjcgMTIuMy0yOC4yIDIwLTQ2LjUgMjAtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxOC4zIDAgMzQuOCA3LjcgNDYuNSAyMGw4MS45LTQ0LjdjLS4zLTIuNC0uNC00LjktLjQtNy4zIDAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6Il19LHVQdD1BNGUsJDRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhYmxlLWNlbGxzLWxhcmdlIixpY29uOls0NDgsNTEyLFsidGgtbGFyZ2UiXSwiZjAwOSIsIk0zODQgOTZsLTEyOCAwIDAgMTI4IDEyOCAwIDAtMTI4em02NCAxMjhsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTI4ek02NCAyODhsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6bTEyOC02NGwwLTEyOC0xMjggMCAwIDEyOCAxMjggMHptNjQgNjRsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6Il19LHBQdD0kNGUsaFB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhdCIsaWNvbjpbNTc2LDUxMixbMTI4MDA4XSwiZjZiZSIsIk02NCA5NmM1MyAwIDk2IDQzIDk2IDk2bDAgODUuOGMyOS43LTQ0LjcgNzcuOC03Ni4yIDEzMy40LTg0IDI1LjYgNjAgODUuMiAxMDIuMSAxNTQuNiAxMDIuMSAxMC45IDAgMjEuNi0xLjEgMzItMy4xTDQ4MCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNDAuOC0xMzYgMTA4LjggNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTQ0IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC0yMjRjMC0xNi42LTEyLjYtMzAuMi0yOC43LTMxLjhsLTYuNi0uM0M0NC42IDE1OC4yIDMyIDE0NC42IDMyIDEyOCAzMiAxMTAuMyA0Ni4zIDk2IDY0IDk2ek01MzMuOCAzLjJDNTQ0LjItNS41IDU2MCAxLjkgNTYwIDE1LjVMNTYwIDEyOGMwIDYxLjktNTAuMSAxMTItMTEyIDExMlMzMzYgMTg5LjkgMzM2IDEyOGwwLTExMi41YzAtMTMuNiAxNS44LTIxIDI2LjItMTIuM0w0MTYgNDggNDgwIDQ4IDUzMy44IDMuMnpNNDAwIDEwOGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6bTk2IDBhMjAgMjAgMCAxIDAgMCA0MCAyMCAyMCAwIDEgMCAwLTQweiJdfSxtUHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FsZW5kYXItd2VlayIsaWNvbjpbNDQ4LDUxMixbXSwiZjc4NCIsIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTAgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE5MiAweiJdfSxnUHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29kZS1jb21wYXJlIixpY29uOls1MTIsNTEyLFtdLCJlMTNhIiwiTTE5OC44IDEuOGM5LTMuNyAxOS4zLTEuNyAyNi4yIDUuMmw1NiA1NmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNTYgNTZjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJTMTg0IDE0NS43IDE4NCAxMzZsMC0yNC0yNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDIxNC43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjMgMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0zMi44IDE5LjctNjEgNDgtNzMuM0w2NCAxNDRjMC01MyA0My05NiA5Ni05NmwyNCAwIDAtMjRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yek0zOTIgODBhMjQgMjQgMCAxIDAgNDggMCAyNCAyNCAwIDEgMCAtNDggMHptLTggNzMuM2MtMjguMy0xMi4zLTQ4LTQwLjUtNDgtNzMuMyAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjNMNDQ4IDM2OGMwIDUzLTQzIDk2LTk2IDk2bC0yNCAwIDAgMjRjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtNTYtNTZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDU2LTU2YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJTMzI4IDM2Ni4zIDMyOCAzNzZsMCAyNCAyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjE0Ljd6TTcyIDQzMmEyNCAyNCAwIDEgMCA0OCAwIDI0IDI0IDAgMSAwIC00OCAweiJdfSx4UHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicm9hZC1jaXJjbGUteG1hcmsiLGljb246WzY0MCw1MTIsW10sImU1NjYiLCJNMjg3LjkgMzJsLTc2LjIgMGMtMjkuNCAwLTU1LjEgMjAuMS02Mi4xIDQ4LjZMNjUuNCA0MjAuNUM1Ny45IDQ1MC43IDgwLjggNDgwIDExMiA0ODBsMjA5LjQgMGMtMTEuMi0yNC40LTE3LjQtNTEuNC0xNy40LTgwIDAtMjguNiA2LjItNTUuNyAxNy40LTgwLS41IDAtMSAwLTEuNiAwLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ5LjJjMzUuMi00MCA4Ni43LTY1LjIgMTQ0LjItNjUuMiA5IDAgMTcuOCAuNiAyNi40IDEuOGwtMzItMTI5LjJDNDgzLjQgNTIuMSA0NTcuOCAzMiA0MjguMyAzMmwtNzYuNSAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il19LGJQdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwYWxsZXQiLGljb246WzU3Niw1MTIsW10sImY0ODIiLCJNMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCA2NC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtNjQgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMjB6bTk2IDY0bDEyOCAwIDAgNjQtMTI4IDAgMC02NHptMTkyIDBsMTI4IDAgMCA2NC0xMjggMCAwLTY0eiJdfSxNVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYWtlLWNhbmRsZXMiLGljb246WzQ0OCw1MTIsWzEyNzg3NCwiYmlydGhkYXktY2FrZSIsImNha2UiXSwiZjFmZCIsIk04Ni40LTEwLjVMNjEuOCAzMS42QzU4IDM4LjEgNTYgNDUuNiA1NiA1My4yTDU2IDU2YzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC0yLjhjMC03LjYtMi0xNS01LjgtMjEuNkwxMDUuNi0xMC41Yy0yLTMuNC01LjctNS41LTkuNi01LjVzLTcuNiAyLjEtOS42IDUuNXptMTI4IDBMMTg5LjggMzEuNmMtMy44IDYuNS01LjggMTQtNS44IDIxLjZsMCAyLjhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTIuOGMwLTcuNi0yLTE1LTUuOC0yMS42TDIzMy42LTEwLjVjLTItMy40LTUuNy01LjUtOS42LTUuNXMtNy42IDIuMS05LjYgNS41ek0zMTcuOCAzMS42Yy0zLjggNi41LTUuOCAxNC01LjggMjEuNmwwIDIuOGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMi44YzAtNy42LTItMTUtNS44LTIxLjZMMzYxLjYtMTAuNWMtMi0zLjQtNS43LTUuNS05LjYtNS41cy03LjYgMi4xLTkuNiA1LjVMMzE3LjggMzEuNnpNMTI4IDE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUzLjVDMjYuNyAyMjYuNiAwIDI2Mi4yIDAgMzA0bDAgMjAuOGMyMC45IDEuMyA0MS42IDcuMyA2MC4zIDE4bDcuMSA0LjFjMjYuMyAxNSA1OC45IDEzLjQgODMuNi00LjIgNDMuNy0zMS4yIDEwMi4zLTMxLjIgMTQ2IDAgMjQuNiAxNy42IDU3LjMgMTkuMyA4My42IDQuMmw3LjEtNC4xYzE4LjctMTAuNyAzOS4zLTE2LjcgNjAuMy0xOGwwLTIwLjhjMC00MS44LTI2LjctNzcuNC02NC05MC41bDAtNTMuNWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4LTY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4LTY0IDAgMC00OHpNNDQ4IDM3M2MtMTIuNyAxLjItMjUuMSA1LTM2LjUgMTEuNWwtNy4xIDQuMWMtNDIuNiAyNC4zLTk1LjQgMjEuNy0xMzUuMy02LjgtMjctMTkuMy02My4yLTE5LjMtOTAuMiAwLTM5LjkgMjguNS05Mi43IDMxLjItMTM1LjMgNi44bC03LjEtNC4xQzI1LjEgMzc4IDEyLjcgMzc0LjEgMCAzNzNsMCA3NWMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTc1eiJdfSx2UHQ9TVUseVB0PU1VLHdQdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidWctc2xhc2giLGljb246WzU3Niw1MTIsW10sImU0OTAiLCJNNy0yNC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDI0MS44IDE3NiAzNDQgMTc2YzE0LjIgMCAyNy43IDIuOCA0MCA4bDEwOC44LTgxLjZjMTQuMS0xMC42IDM0LjItNy43IDQ0LjggNi40czcuNyAzNC4yLTYuNCA0NC44bC05Ny44IDczLjNjNS4zIDguOSA5LjMgMTguNyAxMS44IDI5LjFsOTguOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwIDAgMzJjMCA5LjUtLjggMTguNy0yLjQgMjcuOEw1NjkgNTAzLjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw3IDkuMUMtMi4zLS4zLTIuMy0xNS41IDctMjQuOXpNMzk4LjIgNDY4Yy0yMy4yIDIyLjEtNTMgMzcuMi04Ni4yIDQyLjJsMC0xMjguNCA4Ni4yIDg2LjJ6TTI2NCAzMzMuOGwwIDE3Ni40Yy01MS4yLTcuNy05NC41LTM5LjctMTE3LjctODMuOUw4My4yIDQ3My42Yy0xNC4xIDEwLjYtMzQuMiA3LjctNDQuOC02LjRzLTcuNy0zNC4yIDYuNC00NC44bDgzLjQtNjIuNWMtLjEtMi42LS4yLTUuMi0uMi03LjlsMC0zMi05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk4LjggMGMzLjMtMTMuOSA5LjMtMjYuNyAxNy42LTM3LjhMMjY0IDMzMy44ek0zNTUuNiAxMjhsLTgyLjQgMC03Mi4zLTcyLjNDMjE2LjEgMjIuOCAyNDkuNCAwIDI4OCAwIDM0MSAwIDM4NCA0MyAzODQgOTZsMCAzLjZjMCAxNS43LTEyLjcgMjguNC0yOC40IDI4LjR6Il19LE1QdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YXJwIixpY29uOls1MTIsNTEyLFtdLCJlNTdiIiwiTTQ0OCA2NGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE0OS41YzAgMTctNi43IDMzLjMtMTguNyA0NS4zTDM4Ni43IDQyOS4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDB6bTUuNSAyMDhMMzYwIDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA5My41IDExNy41LTExNy41ek05NiAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSx6UHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGlhZ3JhbS1wcmVkZWNlc3NvciIsaWNvbjpbNDQ4LDUxMixbXSwiZTQ3NyIsIk0yODkuMiAxMzcuOWMyLjUtNiA4LjMtOS45IDE0LjgtOS45bDQwIDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtOTggMGMxLjMgNS4xIDIgMTAuNSAyIDE2bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTk2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjU2IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAyNCA0MCAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45czEuMSAxMi45LTMuNSAxNy40bC02NCA2NGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy00LjYtNC42LTUuOS0xMS41LTMuNS0xNy40ek0zODQgMzUybC0zMjAgMCAwIDY0IDMyMCAwIDAtNjR6bTY0IDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0eiJdfSxENGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1mbHVzaGVkIixpY29uOls1MTIsNTEyLFsxMjg1NjMsImZsdXNoZWQiXSwiZjU3OSIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xNjggMzkyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDEyOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMjggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bS04LTk2YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0em0yNjQtNzJhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAwem0tMjg4IDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTkyIDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXX0sa1B0PUQ0ZSxTUHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGlhZ3JhbS1uZXh0IixpY29uOls0NDgsNTEyLFtdLCJlNDc2IiwiTTM4NCAyMjRjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTI4IDAgMCA2NC0zMiAwYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjRsNjQgNjRjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNjQtNjRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFMyOTQuNSAyODggMjg4IDI4OGwtMzIgMCAwLTY0IDEyOCAwek02NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NGwtMzQgMGM1LjYgMjEuNy0uNSA0NS4xLTE2LjcgNjEuM2wtNjQgNjRjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC02NC02NEM5OC42IDMzMy4xIDkyLjQgMzA5LjcgOTggMjg4bC0zNCAweiJdfSxDUHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5jaG9yLWNpcmNsZS14bWFyayIsaWNvbjpbNjQwLDUxMixbXSwiZTRhYyIsIk0zMjAuNSA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZjLTUzIDAtOTYgNDMtOTYgOTYgMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgMjU3LjljLTYyLjktMTQuMy0xMTAuMi02OS43LTExMS45LTEzNi41bDE2LjEgMTQuMWMxMCA4LjcgMjUuMSA3LjcgMzMuOS0yLjNzNy43LTI1LjEtMi4zLTMzLjlsLTY0LTU2Yy05LTcuOS0yMi42LTcuOS0zMS42IDBsLTY0IDU2Yy0xMCA4LjctMTEgMjMuOS0yLjMgMzMuOXMyMy45IDExIDMzLjkgMi4zbDE2LjItMTQuMmMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMTYuNiAwIDMyLjctMS45IDQ4LjItNS42LTIwLjMtMzAuNS0zMi4yLTY3LTMyLjItMTA2LjQgMC0yNy4zIDUuNy01My4zIDE2LTc2LjlsMC0xMzYuNmMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6bTIwOCA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdfSxMUHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWNpcmNsZS14bWFyayIsaWNvbjpbNjQwLDUxMixbXSwiZTU0MyIsIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMNTE4LjYgNDAweiJdfSxUUHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3BhIixpY29uOls1NzYsNTEyLFtdLCJmNWJiIiwiTTE2OS43IDIyNy41YzM0LjMgMTguNyA2NC41IDQ0LjEgODguOCA3NC41IDExLjEgMTMuOSAyMSAyOC45IDI5LjQgNDQuOCA4LjUtMTUuOSAxOC4zLTMwLjggMjkuNC00NC44IDI0LjMtMzAuNSA1NC41LTU1LjkgODguOC03NC41IDQxLjctMjIuNyA4OS40LTM1LjUgMTM5LjctMzUuNWw5LjkgMGMxMS4xIDAgMjAuMSA5IDIwLjEgMjAuMSAwIDE0OC0xMTkuOSAyNjcuOS0yNjcuOSAyNjcuOWwtNDAuMiAwQzExOS45IDQ4MCAwIDM2MC4xIDAgMjEyLjEgMCAyMDEgOSAxOTIgMjAuMSAxOTJsOS45IDBjNTAuNCAwIDk4LjEgMTIuOCAxMzkuNyAzNS41ek0zMDMuOSAzOGMxNi45IDE1LjkgNjEuNCA2My40IDg5IDE0Mi4zLTQwLjEgMjAuMi03NS44IDQ4LjItMTA0LjkgODIuMS0yOS4yLTMzLjktNjQuOC02MS44LTEwNC45LTgyLjEgMjcuNi03OC45IDcyLjItMTI2LjQgODktMTQyLjMgNC4zLTQuMSAxMC02IDE1LjktNnMxMS42IDIgMTUuOSA2eiJdfSxFNGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFycy1wcm9ncmVzcyIsaWNvbjpbNDQ4LDUxMixbInRhc2tzLWFsdCJdLCJmODI4IiwiTTI4OCAxNjBsOTYgMCAwLTY0LTk2IDAgMCA2NHpNMCAxNjBMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDIyNGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNnpNMTYwIDQxNmwyMjQgMCAwLTY0LTIyNCAwIDAgNjR6TTAgNDE2bDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTZ6Il19LF9QdD1FNGUsQVB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYXJ0LWNpcmNsZS1jaGVjayIsaWNvbjpbNTc2LDUxMixbXSwiZTRmZCIsIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTcuNi0zLjQgMzUuNi05LjUgNTMuNy0yMS44LTguNi00NS42LTEzLjQtNzAuNS0xMy40LTEwNiAwLTE5MiA4Ni0xOTIgMTkyIDAgMjguNSA2LjIgNTUuNiAxNy40IDgwLS41IDAtLjkgMC0xLjQgMC0xNS41IDAtMzAuOC00LjYtNDMuMS0xNC4xLTczLTU1LjctMjEyLjktMTg2LTIxMi45LTI5OC4ybDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIwMS40LTYwLjljLTcuMS01LjItMTcuMi0zLjYtMjIuNCAzLjVsLTUzIDcyLjktMjYuOC0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjZzOC45LTIuOCAxMS43LTYuNWw2NC04OGM1LjItNy4xIDMuNi0xNy4yLTMuNS0yMi4zeiJdfSxONGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFycy1zdHJva2UtcmlnaHQiLGljb246WzY0MCw1MTIsWzk4OTcsIm1hcnMtc3Ryb2tlLWgiXSwiZjIyYiIsIk0zMjAuNSAyNTZhMTEyIDExMiAwIDEgMCAtMjI0IDAgMTEyIDExMiAwIDEgMCAyMjQgMHpNMjA4LjUgODBjODYuMyAwIDE1OC4xIDYyLjEgMTczLjEgMTQ0LjEgMS0uMSAxLjktLjEgMi45LS4xbDE2IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgNjEuNCAwLTIyLjQtMjhjLTExLTEzLjgtOC44LTMzLjkgNS00NXMzMy45LTguOCA0NSA1bDY0IDgwYzkuMyAxMS43IDkuMyAyOC4zIDAgNDBsLTY0IDgwYy0xMSAxMy44LTMxLjIgMTYtNDUgNXMtMTYtMzEuMi01LTQ1bDIyLjQtMjgtNjEuNCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xNiAwYy0xIDAtMS45IDAtMi45LS4xLTE1IDgyLTg2LjggMTQ0LjEtMTczLjEgMTQ0LjEtOTcuMiAwLTE3Ni03OC44LTE3Ni0xNzZzNzguOC0xNzYgMTc2LTE3NnoiXX0sJFB0PU40ZSxEUHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidG93ZXItb2JzZXJ2YXRpb24iLGljb246WzQ0OCw1MTIsW10sImU1ODYiLCJNMjA5LjcgMy40YzktNC41IDE5LjYtNC41IDI4LjYgMGwxNjAgODBjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOS01LjYgMTEuMi0xNi45IDE3LjctMjguNiAxNy43bDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEzIDAgMzIgMTkyIDQ1IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ1IDAgMzItMTkyLTEzIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtODBjLTExLjcgMC0yMy02LjUtMjguNi0xNy43LTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjlsMTYwLTgwek0zMTAuNyA0NDhsLTg2LjctNjEuOS04Ni43IDYxLjkgMTczLjQgMHptLTE1My0xOTJsLTMuNSAyMS4yIDY5LjkgNDkuOSA2OS45LTQ5LjktMy41LTIxLjItMTMyLjcgMHptLTEyLjMgNzMuOWwtMTAuMSA2MC42IDQ3LjUtMzMuOS0zNy40LTI2Ljd6bTExOS45IDI2LjdsNDcuNSAzMy45LTEwLjEtNjAuNi0zNy40IDI2Ljd6TTE1MiAxMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdfSx6VT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdGVybGluZy1zaWduIixpY29uOlszODQsNTEyLFsxNjMsImdicCIsInBvdW5kLXNpZ24iXSwiZjE1NCIsIk05MS4zIDI4OGwtMzQuOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIxLjQgMEMzNy4zIDE0Ny4zIDEwNS4xIDQyIDIwNy42IDQybDguMiAwYzMzLjYgMCA2Ni4yIDExLjMgOTIuNSAzMi4ybDE2LjEgMTIuN2MxMy45IDExIDE2LjIgMzEuMSA1LjIgNDVzLTMxLjEgMTYuMi00NSA1LjJsLTE2LjEtMTIuN2MtMTUtMTEuOS0zMy42LTE4LjQtNTIuOC0xOC40bC04LjIgMGMtNTcuMyAwLTk0LjcgNTkuOS02OS43IDExMS40IDMuNiA3LjQgNi42IDE0LjkgOS4xIDIyLjZsMTQ5LjUgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQxLjIgMGMxIDM1LjMtOC43IDcwLjYtMjguOSAxMDAuOWwtMTguMSAyNy4xIDIxMi4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI3MiAwYy0xMS44IDAtMjIuNi02LjUtMjguMi0xNi45cy01LTIzIDEuNi0zMi45bDUxLjItNzYuOGMxMy4xLTE5LjYgMTkuMi00Mi42IDE4LjItNjUuNHoiXX0sRVB0PXpVLE5QdD16VSxQUHQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmF1Y2V0LWRyaXAiLGljb246WzUxMiw1MTIsWzEyODY4OF0sImUwMDYiLCJNMjI0IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMkw5NiA2NEM3OC4zIDY0IDY0IDc4LjMgNjQgOTZzMTQuMyAzMiAzMiAzMmw5NiAwIDAgNjQtMTguNyAwYy04LjUgMC0xNi42IDMuNC0yMi42IDkuNEwxMjggMjI0IDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMDAuMSAwYzIwLjIgMjkgNTMuOSA0OCA5MS45IDQ4czcxLjctMTkgOTEuOS00OGwzNi4xIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyIDAtODguNC03MS42LTE2MC0xNjAtMTYwbC0zMiAwLTIyLjYtMjIuNmMtNi02LTE0LjEtOS40LTIyLjYtOS40bC0xOC43IDAgMC02NCA5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyek00MzYuOCA0NTUuNGwtMTguMiA0Mi40Yy0xLjggNC4xLTIuNyA4LjYtMi43IDEzLjFsMCAxLjJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEuMmMwLTQuNS0uOS04LjktMi43LTEzLjFsLTE4LjItNDIuNGMtMS45LTQuNS02LjMtNy40LTExLjItNy40cy05LjIgMi45LTExLjIgNy40eiJdfSwkNz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtaW5mbyIsaWNvbjpbNTEyLDUxMixbImluZm8tY2lyY2xlIl0sImYwNWEiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxNjBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTggNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDg4IDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtNjQtMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sSVB0PSQ3LEZQdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmZWF0aGVyIixpY29uOls1MTIsNTEyLFsxMjk3MThdLCJmNTJkIiwiTTM1MiAwYzQxIDAgODAuMyAxNi4zIDEwOS4yIDQ1LjJsNS41IDUuNWMyOSAyOSA0NS4zIDY4LjMgNDUuMyAxMDkuMiAwIDI0LjEtNS43IDQ3LjYtMTYuMiA2OC44LTEuOSAzLjctNS4zIDYuNS05LjMgNy43TDM3NC41IDI3MGMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDMyLjIgMGMxNC4zIDAgMjEuNCAxNy4yIDExLjMgMjcuM2wtMjIuNCAyMi40Yy0xLjkgMS45LTQuMiAzLjItNi43IDRsLTgxIDI0LjNjLTMuOSAxLjItNi41IDQuNy02LjUgOC44IDAgNS4xIDQuMSA5LjIgOS4yIDkuMiAxMy4yIDAgMTguOSAxNS43IDcuOCAyMi45LTQxLjEgMjYuNi04OS4zIDQxLjEtMTM5IDQxLjFsLTg2IDAtNDggNDhjLTguOCA4LjgtMjMuMiA4LjgtMzIgMHMtOC44LTIzLjIgMC0zMkwyNTYgMjI0YzguOC04LjggOC44LTIzLjIgMC0zMnMtMjMuMi04LjgtMzIgMEw3OS41IDMzNi41Yy01LjcgNS43LTE1LjUgMS43LTE1LjUtNi40IDAtNjcuOSAyNy0xMzMgNzUtMTgxTDI0Mi44IDQ1LjJDMjcxLjcgMTYuMyAzMTEgMCAzNTIgMHoiXX0sT1B0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvd2wtcmljZSIsaWNvbjpbNTEyLDUxMixbXSwiZTJlYiIsIk0xNzYgNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTI0IDQ4bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTU2IDE2MGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0wIDI4My40QzAgMjY4LjMgMTIuMyAyNTYgMjcuNCAyNTZsNDU3LjEgMGMxNS4xIDAgMjcuNCAxMi4zIDI3LjQgMjcuNCAwIDcwLjUtNDQuNCAxMzAuNy0xMDYuNyAxNTQuMUw0MDMuNSA0NTJjLTIgMTYtMTUuNiAyOC0zMS44IDI4bC0yMzEuNSAwYy0xNi4xIDAtMjkuOC0xMi0zMS44LTI4bC0xLjgtMTQuNEM0NC40IDQxNC4xIDAgMzUzLjkgMCAyODMuNHpNMjI0IDE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptLTk2IDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTEwNCA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0yMTYgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI5NiA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0xMjAgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTM5MiA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yOTYgMTZsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sUDRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN0YXItaGFsZi1zdHJva2UiLGljb246WzU3Niw1MTIsWyJzdGFyLWhhbGYtYWx0Il0sImY1YzAiLCJNMjg4LjEgMzUzLjZjMTAgMCAxOS45IDIuMyAyOSA3bDc0LjQgMzcuOS0xMy04Mi41Yy0zLjItMjAuMiAzLjUtNDAuNyAxNy45LTU1LjJsNTktNTkuMS04Mi41LTEzLjFjLTIwLjItMy4yLTM3LjctMTUuOS00Ny0zNC4xbC0zOC03NC40IDAgMjczLjZ6TTQ1Ny40IDQ4OWMtNy4zIDUuMy0xNyA2LjEtMjUgMkwyODguMSA0MTcuNiAxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM2wxNTkuOS0yNS40IDczLjYtMTQ0LjJjNC4xLTggMTIuNC0xMy4xIDIxLjQtMTMuMXMxNy4zIDUuMSAyMS40IDEzLjFMMzgzIDEyNS4zIDU0Mi45IDE1MC43YzguOSAxLjQgMTYuMyA3LjcgMTkuMSAxNi4zcy41IDE4LTUuOCAyNC40TDQ0MS43IDMwNS45IDQ2NyA0NjUuOGMxLjQgOC45LTIuMyAxNy45LTkuNiAyMy4yeiJdfSxCUHQ9UDRlLEk0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW1wZXJhdHVyZS1hcnJvdy1kb3duIixpY29uOls1MTIsNTEyLFsidGVtcGVyYXR1cmUtZG93biJdLCJlMDNmIiwiTTY0LjUgOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDE2NC43YzI5LjUgMjYuNCA0OCA2NC43IDQ4IDEwNy4zIDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0cy0xNDQtNjQuNS0xNDQtMTQ0YzAtNDIuNiAxOC41LTgxIDQ4LTEwNy4zTDY0LjUgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yOC43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjguN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00MzkuMSAzMTAuNmMtNiA2LTE0LjEgOS40LTIyLjYgOS40cy0xNi42LTMuNC0yMi42LTkuNGwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsOS40IDkuNCAwLTE3OC43YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzguNyA5LjQtOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTY0IDY0eiJdfSxSUHQ9STRlLEhQdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXNrLXZlbnRpbGF0b3IiLGljb246WzY0MCw1MTIsW10sImU1MjQiLCJNMTUyLjIgMTkyYy0xNS40IDM4LjMtMjQuMiA3Ny4yLTI0LjIgMTA4LjggMCAxMy4zIDEuNSAyNi4yIDQuNCAzOC43bC0xNy0zLjRjLTI5LjktNi01MS40LTMyLjItNTEuNC02Mi44bDAtODEuMyA4OC4yIDB6bTMyLjktNjRMNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDgxLjNjMCA2MSA0My4xIDExMy41IDEwMi45IDEyNS41bDY2LjMgMTMuM2MxOC43IDIyLjEgNDIuOSA0MCA3MC44IDUxLjhsMC04Ny44Yy0xMC4xLTE0LjItMTYtMzEuMy0xNi00OS43IDAtNDkuNSA0My0xMzQuNCA5Ni0xMzQuNCA1Mi41IDAgOTYgODQuOSA5NiAxMzQuNCAwIDE4LjQtNS45IDM1LjQtMTYgNDkuNmwwIDg3LjdjMjcuNi0xMS44IDUxLjctMjkuNiA3MC40LTUxLjZsNjYuNy0xMy4zYzU5LjgtMTIgMTAyLjktNjQuNSAxMDIuOS0xMjUuNWwwLTgxLjNjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTEyMS41IDBjLTM0LjgtNTQuMi04Mi41LTk2LTEzNC41LTk2LTUyLjYgMC0xMDAuMiA0MS44LTEzNC45IDk2em0zMDIuNSA2NGw4OC40IDAgMCA4MS4zYzAgMzAuNS0yMS41IDU2LjgtNTEuNCA2Mi44bC0xNyAzLjRjMi45LTEyLjQgNC41LTI1LjQgNC41LTM4LjcgMC0zMS42LTguOS03MC41LTI0LjQtMTA4Ljh6TTI4OCAzMjBsMCAxOTIgNjQgMCAwLTE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnoiXX0scVB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtdmlkZW8iLGljb246WzM4NCw1MTIsW10sImYxYzgiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTgwIDMwNGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yNCAzNSAzNWMzLjIgMy4yIDcuNSA1IDEyIDUgOS40IDAgMTctNy42IDE3LTE3bDAtOTQuMWMwLTkuNC03LjYtMTctMTctMTctNC41IDAtOC44IDEuOC0xMiA1bC0zNSAzNSAwLTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXX0sVlB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXRyZW5kLWRvd24iLGljb246WzU3Niw1MTIsW10sImUwOTciLCJNMzg0IDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDgyLjctMTY5LjQtMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwTDE5MiAyNDIuNyA1NC42IDEwNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwTDMyMCAyMDUuMyA0NjYuNyAzNTIgMzg0IDM1MnoiXX0sVVB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im9pbC1jYW4iLGljb246WzY0MCw1MTIsW10sImY2MTMiLCJNMzIwIDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwxOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyLTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0LjhjMCAxOSAxMS4yIDM2LjIgMjguNSA0My45bDY3LjUgMzAgMCAyMS4zYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI1OS4xIDBjMTguNCAwIDM1LjgtNy45IDQ4LTIxLjdMNjMzLjUgMTg3LjdjMTIuMy0xMy45LS4zLTM1LjQtMTguNC0zMS41TDQ0OCAxOTIgMzk3LjUgMTY2LjhjLTguOS00LjQtMTguNy02LjgtMjguNi02LjhsLTgwLjkgMCAwLTMyIDMyIDB6TTk2IDIwOGwwIDg2LjEtNDgtMjEuMyAwLTY0LjggNDggMHoiXX0sRjRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlb3BsZS1jYXJyeS1ib3giLGljb246WzU3Niw1MTIsWyJwZW9wbGUtY2FycnkiXSwiZjRjZSIsIk02NC0zMkE1NiA1NiAwIDEgMSA2NCA4MCA1NiA1NiAwIDEgMSA2NC0zMnpNMCAxNzEuMWMwLTMyLjYgMjYuNS01OS4xIDU5LjEtNTkuMSAyMy41IDAgNDUuNSAxMS4zIDU5LjEgMzAuNGw0OC43IDY4LjJjNS44IDguMiAxNS4xIDEzLjEgMjUuMSAxMy40bDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMxMC0uMyAxOS4zLTUuMiAyNS4xLTEzLjRsNDguNy02OC4yYzEzLjYtMTkuMSAzNS42LTMwLjQgNTkuMS0zMC40IDMyLjYgMCA1OS4xIDI2LjUgNTkuMSA1OS4xTDU3NiAyNzJjMCAzMC4yLTE0LjIgNTguNy0zOC40IDc2LjhsLTc2LjggNTcuNmMtOC4xIDYtMTIuOCAxNS41LTEyLjggMjUuNmwwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODBjMC0zMC4yIDE0LjItNTguNyAzOC40LTc2LjhsNDEuNi0zMS4yIDAtODAuMS0yLjggMy45Yy0xOCAyNS4yLTQ3LjEgNDAuMi03OC4xIDQwLjJMMzUyIDI4OGMtLjYgMC0xLjMgMC0xLjktLjEtLjYgMC0xLjMgLjEtMS45IC4xbC0xMjAuNCAwYy0uNiAwLTEuMyAwLTEuOS0uMS0uNiAwLTEuMyAuMS0xLjkgLjFsLTMxLjEgMGMtMzEgMC02MC4xLTE1LTc4LjEtNDAuMmwtMi44LTMuOSAwIDgwLjEgNDEuNiAzMS4yQzE3Ny44IDM3My4zIDE5MiA0MDEuOCAxOTIgNDMybDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MGMwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42TDM4LjQgMzQ4LjhDMTQuMiAzMzAuNyAwIDMwMi4yIDAgMjcyTDAgMTcxLjF6TTAgMzc5LjNjMy4xIDIuNyA2LjMgNS40IDkuNiA3LjlMNjQgNDI4IDY0IDUxMmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDUyOS43IDAgNTEyTDAgMzc5LjN6TTU2OCAyNGE1NiA1NiAwIDEgMSAtMTEyIDAgNTYgNTYgMCAxIDEgMTEyIDB6bTggNDg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODQgNTQuNC00MC44YzMuMy0yLjUgNi41LTUuMSA5LjYtNy45TDU3NiA1MTJ6Il19LGpQdD1GNGUsV1B0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoYWlyIixpY29uOls0NDgsNTEyLFsxMjk2ODFdLCJmNmMwIiwiTTE1MiAyNTZsMC0xODEuOGMtMjQuNSAyMC41LTQwIDUxLjQtNDAgODUuOGwwIDk2IDQwIDB6bTQ4IDBsNDggMCAwLTIwNS40Yy03LjctMS43LTE1LjgtMi42LTI0LTIuNnMtMTYuMyAuOS0yNCAyLjZMMjAwIDI1NnpNMjk2IDc0LjJsMCAxODEuOCA0MCAwIDAtOTZjMC0zNC40LTE1LjUtNjUuMi00MC04NS44ek0zMiAyNTZsMzIgMCAwLTk2QzY0IDcxLjYgMTM1LjYgMCAyMjQgMFMzODQgNzEuNiAzODQgMTYwbDAgOTYgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05Ni0yNTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LEdQdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3aW5kIixpY29uOls1MTIsNTEyLFtdLCJmNzJlIiwiTTI4OCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDMyIDExMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMjggMGM0OC42IDAgODgtMzkuNCA4OC04OFM0MDguNiAwIDM2MCAwTDMyMCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptNjQgMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZMMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMTI4IDUxMmw0MCAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4cy0zOS40LTg4LTg4LTg4TDMyIDMzNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnoiXX0sWVB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxheWVyLWdyb3VwIixpY29uOls1MTIsNTEyLFtdLCJmNWZkIiwiTTIzMi41IDUuMmMxNC45LTYuOSAzMi4xLTYuOSA0NyAwbDIxOC42IDEwMWM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDEzLjkgMTQ5LjhDNS40IDE0NS44IDAgMTM3LjMgMCAxMjhzNS40LTE3LjkgMTMuOS0yMS44TDIzMi41IDUuMnpNNDguMSAyMTguNGwxNjQuMyA3NS45YzI3LjcgMTIuOCA1OS42IDEyLjggODcuMyAwbDE2NC4zLTc1LjkgMzQuMSAxNS44YzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMMTMuOSAyNzcuOEM1LjQgMjczLjggMCAyNjUuMyAwIDI1NnM1LjQtMTcuOSAxMy45LTIxLjhsMzQuMS0xNS44ek0xMy45IDM2Mi4ybDM0LjEtMTUuOCAxNjQuMyA3NS45YzI3LjcgMTIuOCA1OS42IDEyLjggODcuMyAwbDE2NC4zLTc1LjkgMzQuMSAxNS44YzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMMTMuOSA0MDUuOEM1LjQgNDAxLjggMCAzOTMuMyAwIDM4NHM1LjQtMTcuOSAxMy45LTIxLjh6Il19LFpQdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZWFkLXNpZGUtbWFzayIsaWNvbjpbNTEyLDUxMixbXSwiZTA2MyIsIk00NDUuOSAxOTNjLS4xLS40LS4yLS45LS4yLTEuMy0xNS43LTEwOC40LTEwOC45LTE5MS43LTIyMS43LTE5MS43LTg1IDAtMTU5IDQ3LjQtMTk2LjkgMTE3LjJMMjgzLjMgMjg4IDQ1NiAyODggNDQyLjkgMzM2IDMzNiAzMzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsOTguMiAwLTguNyAzMi04OS41IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsODAuNiAwYy02LjcgMTkuMS0yNC44IDMyLTQ1LjMgMzJMMjg4IDQ2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMDQuNS0yNDcuNS0xNjVDMyAxODIuMSAwIDIwMi43IDAgMjI0IDAgMjc4IDE5LjEgMzI3LjUgNTAuOSAzNjYuMiA1OC45IDM3NS45IDY0IDM4Ny44IDY0IDQwMC40TDY0IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjcuMyAwIC43IDAgMTMxLjMgMGM0NC45IDAgODMuOC0zMS4xIDkzLjYtNzQuOWwzMy45LTE1MC4zYzMuMy0xNC40LS4zLTI5LjUtOS43LTQxTDQ0NS45IDE5M3pNMjg4IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdfSxrVT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kcyIsaWNvbjpbNTEyLDUxMixbInNpZ24tbGFuZ3VhZ2UiLCJzaWduaW5nIl0sImYyYTciLCJNNTEyIDE2MGwtLjEgNzIuNmMwIDQ0LjgtMTcuNiA4Ny4xLTQ3LjkgMTE4LjQtLjMtNzctNDAuMS0xNDguNC0xMDUuNC0xODkuM2wtMS45LTEuMmMyLjUtMy43IDIuOC04LjYgLjQtMTIuN2wtNjItMTA3LjRjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44UzMzMCA1IDMzNi42IDE2LjVsNjggMTE3LjggMCAwIDAgMCA0My4zIDc1IC4xLTQ5LjNjMC0xNy43IDE0LjQtMzIgMzItMzJzMzIgMTQuNCAzMiAzMnpNMjk4LjQgMTI0LjJjLTE0LjEtOC44LTI5LjgtMTIuNy00NS4yLTEyLjFMMjE2LjcgNDguOGMtNi42LTExLjUtMi43LTI2LjIgOC44LTMyLjhzMjYuMi0yLjcgMzIuOCA4LjhsNjcuMSAxMTYuMi0yNy0xNi45ek0yMTEuOSA4OC41bDE2LjQgMjguNGMtMTUuMSA1LjUtMjguNiAxNS42LTM4LjMgMjkuN2wtMTkuNy0zNC4yYy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOHptLTQ2LjQgNjMuN2wxMi41IDIxLjdjLTIgOC42LTIuNSAxNy41LTEuNyAyNi4xbC00LjMgMCAwIDAtMzQuNCAwLTEzLjctMjMuOGMtNi42LTExLjUtMi43LTI2LjIgOC44LTMyLjhzMjYuMi0yLjcgMzIuOCA4Ljh6TTIyOC45IDE3NWM5LjQtMTUgMjkuMS0xOS41IDQ0LjEtMTAuMmw2MC4yIDM3LjZDMzg0LjcgMjM0LjcgNDE2IDI5MS4yIDQxNiAzNTJsMCA4YzAgODMuOS02OC4xIDE1Mi0xNTIgMTUyTDg4IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw5MiAwYzYuNiAwIDEyLTUuNCAxMi0xMnMtNS40LTEyLTEyLTEyTDU2IDQ0MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMjQgMGM2LjYgMCAxMi01LjQgMTItMTJzLTUuNC0xMi0xMi0xMkwyNCAzNjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTU2IDBjNi42IDAgMTItNS40IDEyLTEycy01LjQtMTItMTItMTJMNTYgMjk2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEzNiAwIDAgMCAwIDAgOTMuMiAwLTQ2LjItMjguOWMtMTUtOS40LTE5LjUtMjkuMS0xMC4yLTQ0LjF6Il19LFhQdD1rVSxRUHQ9a1UsS1B0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhYmxldHMiLGljb246WzUxMiw1MTIsW10sImY0OTAiLCJNNDk1LjMgNzYuNmMtNC42LTguNy0xNi4zLTkuNy0yMy4zLTIuN0wyOTcuOSAyNDhjLTcgNy02IDE4LjcgMi43IDIzLjMgMjAuMSAxMC43IDQzIDE2LjcgNjcuNCAxNi43IDc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0IDAtMjQuMy02LTQ3LjMtMTYuNy02Ny40ek0yNDAuNyAyMTEuNGM0LjYgOC43IDE2LjMgOS43IDIzLjMgMi43TDQzOC4xIDQwYzctNyA2LTE4LjctMi43LTIzLjMtMjAuMS0xMC43LTQzLTE2LjctNjcuNC0xNi43LTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgMjQuMyA2IDQ3LjMgMTYuNyA2Ny40ek0xNDQgMjI0Qzc5LjIgMjI0IDI0LjQgMjY2LjggNi4zIDMyNS42IDMuNCAzMzUuMSAxMSAzNDQgMjAuOSAzNDRsMjQ2LjIgMGM5LjkgMCAxNy41LTguOSAxNC42LTE4LjQtLjktMy0xLjktNS45LTMtOC43LTM3LjQtMTguMS02OC00OC04Ny04NC44LTE0LjktNS4yLTMwLjktOC4xLTQ3LjYtOC4xek0yODEuNyA0MTAuNGMyLjktOS41LTQuNy0xOC40LTE0LjYtMTguNEwyMC45IDM5MkMxMSAzOTIgMy40IDQwMC45IDYuMyA0MTAuNCAyNC40IDQ2OS4yIDc5LjIgNTEyIDE0NCA1MTJzMTE5LjYtNDIuOCAxMzcuNy0xMDEuNnoiXX0sSlB0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndlaWdodC1oYW5naW5nIixpY29uOls1MTIsNTEyLFtdLCJmNWNkIiwiTTIyNCA5NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjIuNSAzMmMzLjUtMTAgNS41LTIwLjggNS41LTMyIDAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMTEuMiAxLjkgMjIgNS41IDMybC0yMS44IDBjLTI4LjMgMC01My4yIDE4LjUtNjEuMyA0NS42TDIuNCA0NDAuMkMuOCA0NDUuNCAwIDQ1MC44IDAgNDU2LjIgMCA0ODcgMjUgNTEyIDU1LjggNTEybDQwMC40IDBjMzAuOCAwIDU1LjgtMjUgNTUuOC01NS44IDAtNS40LS44LTEwLjgtMi40LTE2bC04MC0yNjYuNWMtOC4xLTI3LjEtMzMtNDUuNi02MS4zLTQ1LjZsLTIxLjggMHoiXX0sZUl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRpY2UiLGljb246WzUxMiw1MTIsWzEyNzkyMl0sImY1MjIiLCJNMTQxLjQgMi4zQzEwMy04IDYzLjUgMTQuOCA1My4zIDUzLjJMMi41IDI0Mi43Qy03LjggMjgxLjEgMTUgMzIwLjYgNTMuNCAzMzAuOWwxODkuNSA1MC44YzM4LjQgMTAuMyA3Ny45LTEyLjUgODguMi01MC45bDUwLjgtMTg5LjVjMTAuMy0zOC40LTEyLjUtNzcuOS01MC45LTg4LjJMMTQxLjQgMi4zem0yMyAyMDUuN2EzMiAzMiAwIDEgMSA1NS40LTMyIDMyIDMyIDAgMSAxIC01NS40IDMyek03OS4yIDIyMC4zYTMyIDMyIDAgMSAxIDMyIDU1LjQgMzIgMzIgMCAxIDEgLTMyLTU1LjR6bTE4NSA5Ni40YTMyIDMyIDAgMSAxIC0zMi01NS40IDMyIDMyIDAgMSAxIDMyIDU1LjR6bTktMjA4LjRhMzIgMzIgMCAxIDEgMzIgNTUuNCAzMiAzMiAwIDEgMSAtMzItNTUuNHptLTEyMSAxNC40YTMyIDMyIDAgMSAxIC0zMi01NS40IDMyIDMyIDAgMSAxIDMyIDU1LjR6TTQxOCAxOTJMMzc3LjQgMzQzLjJjLTE3LjIgNjQtODMgMTAyLTE0NyA4NC45bC0zOC4zLTEwLjMgMCAzMC4yYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDQxOCAxOTJ6Il19LE80ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaG9wLXNsYXNoIixpY29uOls1NzYsNTEyLFsic3RvcmUtYWx0LXNsYXNoIl0sImUwNzAiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTctNTcgMC0xOTAuM2MyNi44LTEuOSA0OC0yNC4zIDQ4LTUxLjYgMC04LTEuOS0xNi01LjUtMjMuMkw0OTcuNyA2Ny40QzQ4Ni44IDQ1LjcgNDY0LjcgMzIgNDQwLjQgMzJMMTM1LjYgMzJjLTEwLjcgMC0yMSAyLjctMzAuMiA3LjZMNDEtMjQuOXpNMzIxLjggMjU2TDQ0OCAyNTYgNDQ4IDM4Mi4yIDMyMS44IDI1NnpNMzUyIDQyMS44bC02NC02NCAwIDEwLjJjMCA4LjgtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTEyIDU4LjIgMC0xMzQuOC0xMzQuOC0yOS45IDU5LjljLTMuNiA3LjItNS41IDE1LjEtNS41IDIzLjIgMCAyNy4zIDIxLjIgNDkuNyA0OCA1MS42TDY0IDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxOTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEwLjJ6Il19LHRJdD1PNGUsQjRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNvcnQtZG93biIsaWNvbjpbMzg0LDUxMixbInNvcnQtZGVzYyJdLCJmMGRkIiwiTTMyIDI4OGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOFMuMiAzMzMuNSA5LjQgMzQyLjZsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzM2NC45IDI4OCAzNTIgMjg4TDMyIDI4OHoiXX0sYUl0PUI0ZSxySXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVzZXRhLXNpZ24iLGljb246WzQ0OCw1MTIsW10sImUyMjEiLCJNMTEyIDMyQzk0LjMgMzIgODAgNDYuMyA4MCA2NGwwIDEwNC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAyMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDk2IDBjODAuMiAwIDE0Ni42LTU5IDE1OC4yLTEzNmwyNS44IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI1LjggMEMzODYuNiA5MSAzMjAuMiAzMiAyNDAgMzJMMTEyIDMyek0zMzMgMTY4bC0xODkgMCAwLTcyIDk2IDBjNDQuNyAwIDgyLjMgMzAuNiA5MyA3MnpNMTQ0IDIxNmwxODkgMGMtMTAuNyA0MS40LTQ4LjIgNzItOTMgNzJsLTk2IDAgMC03MnoiXX0sUjRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhYmxldC1zY3JlZW4tYnV0dG9uIixpY29uOls0NDgsNTEyLFsidGFibGV0LWFsdCJdLCJmM2ZhIiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHpNMjU2IDQzMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zODQgNjRsLTMyMCAwIDAgMjg4IDMyMCAwIDAtMjg4eiJdfSxpSXQ9UjRlLEg0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLWhvbGRpbmctZG9sbGFyIixpY29uOls1NzYsNTEyLFsiaGFuZC1ob2xkaW5nLXVzZCJdLCJmNGMwIiwiTTI4OC0xNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMi0xLjggMGMtMzYuNiAwLTY2LjIgMjkuNy02Ni4yIDY2LjIgMCAzMy40IDI0LjkgNjEuNiA1OCA2NS43bDYxIDcuNmM1LjEgLjYgOSA1IDkgMTAuMiAwIDUuNy00LjYgMTAuMi0xMC4yIDEwLjJMMjQwIDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhzMTIuNSAyOCAyOCAyOGwyNCAwIDAgMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEyIDEuOCAwYzM2LjYgMCA2Ni4yLTI5LjcgNjYuMi02Ni4yIDAtMzMuNC0yNC45LTYxLjYtNTgtNjUuN2wtNjEtNy42Yy01LjEtLjYtOS01LTktMTAuMiAwLTUuNyA0LjYtMTAuMiAxMC4yLTEwLjJMMzI4IDc2YzE1LjUgMCAyOC0xMi41IDI4LTI4cy0xMi41LTI4LTI4LTI4bC0xNiAwIDAtMTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTEwOS4zIDM0MS41TDY2LjcgMzg0IDMyIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAuNSAwYzI5IDAgNTcuMy05LjMgODAuNy0yNi41bDEyNi42LTkzLjNjMTcuOC0xMy4xIDIxLjYtMzguMSA4LjUtNTUuOXMtMzguMS0yMS42LTU1LjktOC41TDM5Mi42IDQxNiAyODAgNDE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE1Mi4yIDBjLTMzLjkgMC02Ni41IDEzLjUtOTAuNSAzNy41eiJdfSxvSXQ9SDRlLHE0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaGllbGQiLGljb246WzUxMiw1MTIsWzEyODczNywic2hpZWxkLWJsYW5rIl0sImYxMzIiLCJNMjU2IDBjNC42IDAgOS4yIDEgMTMuNCAyLjlMNDU3LjggODIuOGMyMiA5LjMgMzguNCAzMSAzOC4zIDU3LjItLjUgOTkuMi00MS4zIDI4MC43LTIxMy42IDM2My4yLTE2LjcgOC0zNi4xIDgtNTIuOCAwLTE3Mi40LTgyLjUtMjEzLjEtMjY0LTIxMy42LTM2My4yLS4xLTI2LjIgMTYuMy00Ny45IDM4LjMtNTcuMkwyNDIuNyAyLjlDMjQ2LjkgMSAyNTEuNCAwIDI1NiAweiJdfSxzSXQ9cTRlLFY0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWxhdWdoIixpY29uOls1MTIsNTEyLFsibGF1Z2giXSwiZjU5OSIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTAxLjYgMzE0Yy0zLjctMTMuNyA3LjUtMjYgMjEuNy0yNmwyNjUuNCAwYzE0LjIgMCAyNS40IDEyLjMgMjEuNyAyNi0xOC41IDY4LTgwLjYgMTE4LTE1NC40IDExOFMxMjAgMzgyIDEwMS42IDMxNHpNMTQ0IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxuSXQ9VjRlLGxJdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kcy1ob2xkaW5nIixpY29uOls2NDAsNTEyLFtdLCJmNGMyIiwiTTgwIDEwNGMwLTIyLjEtMTcuOS00MC00MC00MFMwIDgxLjkgMCAxMDRMMCAzMjUuNWMwIDI1LjUgMTAuMSA0OS45IDI4LjEgNjcuOUwxMjggNDkzLjNjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN2w2Ni43IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC03OC45YzAtMjkuNy0xMS44LTU4LjItMzIuOC03OS4ybC0yNS4zLTI1LjMgMCAwYy03LjMtNy4zLTIzLjEtMjMuMS00Ny4yLTQ3LjItMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNjMjQuMSAyNC4xIDM5LjkgMzkuOSA0Ny4yIDQ3LjIgMTEgMTEgOS4yIDI5LjItMy43IDM3LjgtOS43IDYuNS0yMi43IDUuMi0zMS0zLjFMOTguNyAzMDkuNWMtMTItMTItMTguNy0yOC4zLTE4LjctNDUuM0w4MCAxMDR6bTQ4MCAwbDAgMTYwLjJjMCAxNy02LjcgMzMuMy0xOC43IDQ1LjNsLTUxLjEgNTEuMWMtOC4zIDguMy0yMS4zIDkuNi0zMSAzLjEtMTIuOS04LjYtMTQuNy0yNi45LTMuNy0zNy44IDcuMy03LjMgMjMuMS0yMy4xIDQ3LjItNDcuMiAxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGMtMjQuMSAyNC4xLTM5LjkgMzkuOS00Ny4yIDQ3LjJsMCAwLTI1LjMgMjUuM2MtMjEgMjEtMzIuOCA0OS41LTMyLjggNzkuMmwwIDc4LjljMCAyNi41IDIxLjUgNDggNDggNDhsNjYuNyAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43bDk5LjktOTkuOWMxOC0xOCAyOC4xLTQyLjQgMjguMS02Ny45TDY0MCAxMDRjMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDB6Il19LFU0ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXJ0LXNob3BwaW5nIixpY29uOls2NDAsNTEyLFsxMjg3MjIsInNob3BwaW5nLWNhcnQiXSwiZjA3YSIsIk0yNC0xNkMxMC43LTE2IDAtNS4zIDAgOFMxMC43IDMyIDI0IDMybDQ1LjMgMGMzLjkgMCA3LjIgMi44IDcuOSA2LjZsNTIuMSAyODYuM2M2LjIgMzQuMiAzNiA1OS4xIDcwLjggNTkuMUw0NTYgMzg0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNTUuOSAwYy0xMS42IDAtMjEuNS04LjMtMjMuNi0xOS43bC01LjEtMjguMyAzMDMuNiAwYzMwLjggMCA1Ny4yLTIxLjkgNjIuOS01Mi4yTDU2OC45IDY5LjlDNTcyLjYgNTAuMiA1NTcuNSAzMiA1MzcuNCAzMmwtNDEyLjcgMC0uNC0yYy00LjgtMjYuNi0yOC00Ni01NS4xLTQ2TDI0LTE2ek0yMDggNTEyYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMjI0IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdfSxjSXQ9VTRlLGRJdD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJvY3RhZ29uIixpY29uOls1MTIsNTEyLFsxMjg3MjFdLCJmMzA2IiwiTTE4OC42IC4xYy0xNyAwLTMzLjMgNi43LTQ1LjMgMTguN0wxOS4yIDE0M0M3LjIgMTU1IC41IDE3MS4yIC41IDE4OC4ybDAgMTM1LjZjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNMMTQzLjQgNDkzLjJjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN2wxMzUuNiAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDQ5My42IDM2OWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zbDAtMTM1LjZjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzY5LjUgMTguOGMtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0wxODguNiAuMXoiXX0sZkl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtcG9pbnRlciIsaWNvbjpbNDQ4LDUxMixbXSwiZjI1YSIsIk0xMjggNDBjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDE0OC4yYzguNS03LjYgMTkuNy0xMi4yIDMyLTEyLjIgMjAuNiAwIDM4LjIgMTMgNDUgMzEuMiA4LjgtOS4zIDIxLjItMTUuMiAzNS0xNS4yIDI1LjMgMCA0NiAxOS41IDQ3LjkgNDQuMyA4LjUtNy43IDE5LjgtMTIuMyAzMi4xLTEyLjMgMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMTJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTg1LjMgMGMtNSAwLTkuOS0uMy0xNC43LTEtNTUuMy01LjYtMTA2LjItMzQtMTQwLTc5TDggMzM2Yy0xMy4zLTE3LjctOS43LTQyLjcgOC01NnM0Mi43LTkuNyA1NiA4bDU2IDc0LjcgMC0zMjIuN3pNMjQwIDMwNGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NnptNDgtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZ6bTgwIDE2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2eiJdfSx1SXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmVnaXN0ZXJlZCIsaWNvbjpbNTEyLDUxMixbMTc0XSwiZjI1ZCIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjAwIDE0NGw4MCAwYzM5LjggMCA3MiAzMi4yIDcyIDcyIDAgMjguOS0xNyA1My44LTQxLjYgNjUuM2wzMC4yIDUwLjNjNi44IDExLjQgMy4xIDI2LjEtOC4yIDMyLjlzLTI2LjEgMy4xLTMyLjktOC4ybC00MS02OC4zLTM0LjQgMCAwIDU2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTc2YzAtMTMuMyAxMC43LTI0IDI0LTI0em03MiA5Nmw4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU2IDAgMCA0OCA0OCAweiJdfSxwSXQ9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2Utc2lnbmFsIixpY29uOls1NzYsNTEyLFtdLCJlMDEyIiwiTTUxNS45IDI0MGwtMTkuOSAwIDAgMTQ0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xMzcgMGMtMjQtOTEuNy05My41LTE2NS0xODMtMTk0LjNsMC0xMy43LTE5LjkgMGMtMTUuNSAwLTI4LjEtMTIuNi0yOC4xLTI4LjEgMC03LjYgMy4xLTE0LjkgOC42LTIwLjJMMjc2LjUtNC45QzI4My45LTEyIDI5My43LTE2IDMwNC0xNnMyMC4xIDQgMjcuNSAxMS4xTDUzNS40IDE5MS43YzUuNSA1LjMgOC42IDEyLjYgOC42IDIwLjIgMCAxNS41LTEyLjYgMjguMS0yOC4xIDI4LjF6TTI4MCAxOTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAwek0yNCAyODhjMTI4LjEgMCAyMzIgMTAzLjkgMjMyIDIzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTEwMS42LTgyLjQtMTg0LTE4NC0xODQtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCAxOTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0wIDQwOGMwLTEzLjMgMTAuNy0yNCAyNC0yNCA3NS4xIDAgMTM2IDYwLjkgMTM2IDEzNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ4LjYtMzkuNC04OC04OC04OC0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXX0saEl0PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhbmdsYWRlc2hpLXRha2Etc2lnbiIsaWNvbjpbMzg0LDUxMixbXSwiZTJlNiIsIk0zNiAzMi4zQzE4LjQgMzAuMSAyLjQgNDIuNSAuMyA2MFMxMC41IDkzLjYgMjggOTUuOGw3LjkgMWMxNiAyIDI4IDE1LjYgMjggMzEuOGwwIDMxLjUtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgMTc2YzAgNTMgNDMgOTYgOTYgOTZsMzIgMGMxMDYgMCAxOTItODYgMTkyLTE5MmwwLTMyYzAtNTMtNDMtOTYtOTYtOTZsLTE2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE3NiA0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwIDAtMzEuNUMxMjggODAuMSA5MiAzOS4yIDQzLjkgMzMuMmwtNy45LTF6Il19LGdvMT17ZmEwOkhkdCxmYTE6cWR0LGZhMjpWZHQsZmEzOlVkdCxmYTQ6amR0LGZhNTpXZHQsZmE2OkdkdCxmYTc6WWR0LGZhODpaZHQsZmE5OlhkdCxmYURvbGxhclNpZ246VFYsZmFEb2xsYXI6UWR0LGZhVXNkOktkdCxmYURvZzpKZHQsZmFUcnVja01vdmluZzplN3QsZmFSb3RhdGU6SWFlLGZhU3luY0FsdDp0N3QsZmFTcXVhcmVNaW51czpGYWUsZmFNaW51c1NxdWFyZTphN3QsZmFBbGlnbkp1c3RpZnk6cjd0LGZhQ2FsZW5kYXJDaGVjazppN3QsZmFGYWNlS2lzczpPYWUsZmFLaXNzOm83dCxmYUtpdGNoZW5TZXQ6czd0LGZhRG5hOm43dCxmYUNoaWxkUmVhY2hpbmc6bDd0LGZhUGFzdGU6ZzcsZmFGaWxlQ2xpcGJvYXJkOmM3dCxmYU1ldGVvcjpkN3QsZmFHZWFyczpCYWUsZmFDb2dzOmY3dCxmYUZpbGVDaXJjbGVQbHVzOnU3dCxmYUljaWNsZXM6cDd0LGZhQXJyb3dUcmVuZFVwOmg3dCxmYUhleGFnb25Ob2Rlc0JvbHQ6bTd0LGZhUXVlc3Rpb246Zzd0LGZhSGFuZHNCb3VuZDp4N3QsZmFQZXJzb25XYWxraW5nTHVnZ2FnZTpiN3QsZmFGaWxlQXJyb3dEb3duOlJhZSxmYUZpbGVEb3dubG9hZDp2N3QsZmFQZXJzb25Cb290aDp5N3QsZmFMb2N1c3Q6dzd0LGZhUmlnaHRMb25nOkhhZSxmYUxvbmdBcnJvd0FsdFJpZ2h0Ok03dCxmYVRydWNrRHJvcGxldDp6N3QsZmFIYW5kSG9sZGluZ01lZGljYWw6azd0LGZhSGFuZFBvaW50TGVmdDpTN3QsZmFDYWxjdWxhdG9yOkM3dCxmYU1pbnVzOng3LGZhU3VidHJhY3Q6TDd0LGZhQXJyb3dVcFpBOnFhZSxmYVNvcnRBbHBoYVVwQWx0OlQ3dCxmYU1pY3JvcGhvbmVTbGFzaDpfN3QsZmFTcXVhcmVQZW46X1YsZmFQZW5TcXVhcmU6QTd0LGZhUGVuY2lsU3F1YXJlOiQ3dCxmYUhhbmRGaXN0OlZhZSxmYUZpc3RSYWlzZWQ6RDd0LGZhQ29tbWVudFNtczpVYWUsZmFTbXM6RTd0LGZhU2ltQ2FyZDpON3QsZmFTY2FsZUJhbGFuY2VkOmphZSxmYUJhbGFuY2VTY2FsZTpQN3QsZmFDYXI6V2FlLGZhQXV0b21vYmlsZTpJN3QsZmFDcm9wU2ltcGxlOkdhZSxmYUNyb3BBbHQ6Rjd0LGZhTWVkYWw6Tzd0LGZhU2Nyb2xsOkI3dCxmYUZpbGVFeGNlbDpSN3QsZmFGaWx0ZXI6SDd0LGZhRHJ1bTpxN3QsZmFNYXBQaW46Vjd0LGZhU2NhbGVVbmJhbGFuY2VkRmxpcDpZYWUsZmFCYWxhbmNlU2NhbGVSaWdodDpVN3QsZmFBcnJvd3NUb0NpcmNsZTpqN3QsZmFFbnZlbG9wZTpXN3QsZmFCYWJ5Okc3dCxmYVNxdWFyZUNhcmV0RG93bjpaYWUsZmFDYXJldFNxdWFyZURvd246WTd0LGZhVGVudDpaN3QsZmFBOlg3dCxmYVBhcmFjaHV0ZUJveDpRN3QsZmFDYXJ0QXJyb3dEb3duOks3dCxmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uOko3dCxmYUNsb3VkQXJyb3dVcDpBVixmYUNsb3VkVXBsb2FkOmVmdCxmYUNsb3VkVXBsb2FkQWx0OnRmdCxmYUF0OmFmdCxmYUluZGlhblJ1cGVlU2lnbjokVixmYUluZGlhblJ1cGVlOnJmdCxmYUlucjppZnQsZmFUcnVjazpvZnQsZmFDaGFsa2JvYXJkVXNlcjpYYWUsZmFDaGFsa2JvYXJkVGVhY2hlcjpzZnQsZmFVc2VyQ2hlY2s6bmZ0LGZhVXNlck5pbmphOmxmdCxmYVBsYW50V2lsdDpjZnQsZmFXZWlnaHRTY2FsZTpRYWUsZmFXZWlnaHQ6ZGZ0LGZhQ2FyZXRSaWdodDpTVSxmYUZsb3JpblNpZ246ZmZ0LGZhQmVsbDpDVSxmYUxhcmlTaWduOnVmdCxmYU1pbGxTaWduOnBmdCxmYVBlcnNvblNub3dib2FyZGluZzpLYWUsZmFTbm93Ym9hcmRpbmc6aGZ0LGZhVHR5OkphZSxmYVRlbGV0eXBlOm1mdCxmYVVzZXJzUmVjdGFuZ2xlOmdmdCxmYU1vYmlsZTpEVixmYU1vYmlsZUFuZHJvaWQ6eGZ0LGZhTW9iaWxlUGhvbmU6YmZ0LGZhQXJyb3dzVHVyblRvRG90czp2ZnQsZmFFeGNsYW1hdGlvbjp5ZnQsZmFDaHVyY2g6d2Z0LGZhVG9nZ2xlT2ZmOk1mdCxmYVNob2VQcmludHM6emZ0LGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uOmtmdCxmYVdhbGxldDpMVSxmYU1lc3NhZ2U6YjcsZmFDb21tZW50QWx0OlNmdCxmYVRyb3BoeTpDZnQsZmFGYWNlRGl6enk6ZXJlLGZhRGl6enk6TGZ0LGZhQmFjdGVyaWE6VGZ0LGZhRWFyRGVhZjplNyxmYURlYWY6X2Z0LGZhRGVhZm5lc3M6QWZ0LGZhSGFyZE9mSGVhcmluZzokZnQsZmFQZW9wbGVBcnJvd3M6dHJlLGZhUGVvcGxlQXJyb3dzTGVmdFJpZ2h0OkRmdCxmYUhhbmRzQ2xhcHBpbmc6RWZ0LGZhVmlydXNDb3ZpZFNsYXNoOk5mdCxmYUNhbGVuZGFyRGF5czphcmUsZmFDYWxlbmRhckFsdDpQZnQsZmFEaWFtb25kVHVyblJpZ2h0OnJyZSxmYURpcmVjdGlvbnM6SWZ0LGZhSGFuZFBvaW50VXA6RmZ0LGZhQmV6aWVyQ3VydmU6T2Z0LGZhUGVyc29uSGFsZkRyZXNzOkJmdCxmYVNxdWFyZVBvbGxIb3Jpem9udGFsOmlyZSxmYVBvbGxIOlJmdCxmYVNjaG9vbENpcmNsZVhtYXJrOkhmdCxmYUhhbmRMaXphcmQ6cWZ0LGZhQ2hhbGtib2FyZDpvcmUsZmFCbGFja2JvYXJkOlZmdCxmYVVwUmlnaHRGcm9tU3F1YXJlOnNyZSxmYUV4dGVybmFsTGlua0FsdDpVZnQsZmFTcXVhcmVGdWxsOmpmdCxmYUNsb3ZlcjpXZnQsZmFUZWV0aE9wZW46R2Z0LGZhQmFyc1N0YWdnZXJlZDpFVixmYVJlb3JkZXI6WWZ0LGZhU3RyZWFtOlpmdCxmYVdhcmVob3VzZTpYZnQsZmFTd2F0Y2hib29rOlFmdCxmYUNhbXBncm91bmQ6S2Z0LGZhUGVyc29uV2Fsa2luZ0Fycm93UmlnaHQ6SmZ0LGZhR2xhc3NlczpldXQsZmFDaXJjbGVQYXVzZTpucmUsZmFQYXVzZUNpcmNsZTp0dXQsZmFNZW1vcnk6YXV0LGZhR2lmdDpydXQsZmFNb25leUJpbGxXaGVhdDppdXQsZmFEdW5nZW9uOm91dCxmYVN1aXRjYXNlTWVkaWNhbDpscmUsZmFNZWRraXQ6c3V0LGZhUGVyc29uQ2FuZTpudXQsZmFHYXVnZTp0NyxmYURhc2hib2FyZDpsdXQsZmFHYXVnZU1lZDpjdXQsZmFUYWNob21ldGVyQWx0QXZlcmFnZTpkdXQsZmFFbnZlbG9wZU9wZW5UZXh0OmZ1dCxmYVRvb2xib3g6dXV0LGZhUG93ZXJPZmY6cHV0LGZhU2lnbmFsOk5WLGZhU2lnbmFsNTpodXQsZmFTaWduYWxQZXJmZWN0Om11dCxmYUFycm93c1NwaW46Z3V0LGZhSm9pbnQ6eHV0LGZhQnJhaWxsZTpidXQsZmFCYXNrZXRTaG9wcGluZzpjcmUsZmFTaG9wcGluZ0Jhc2tldDp2dXQsZmFCcmlkZ2U6eXV0LGZhUGxhbmVBcnJpdmFsOnd1dCxmYUNhc2hSZWdpc3RlcjpNdXQsZmFSaW5nOnp1dCxmYVNoYXJlTm9kZXM6ZHJlLGZhU2hhcmVBbHQ6a3V0LGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb246U3V0LGZhQmlub2N1bGFyczpDdXQsZmFLaXBTaWduOkx1dCxmYUhhcmREcml2ZTpmcmUsZmFIZGQ6VHV0LGZhUmFua2luZ1N0YXI6X3V0LGZhVXNlclRpZTpBdXQsZmFFbGxpcHNpczp1cmUsZmFFbGxpcHNpc0g6JHV0LGZhU3RvcmVTbGFzaDpEdXQsZmFQZXJjZW50OnByZSxmYVBlcmNlbnRhZ2U6RXV0LGZhRmlsZVppcHBlcjpocmUsZmFGaWxlQXJjaGl2ZTpOdXQsZmFEaXNwbGF5OlB1dCxmYUljb25zOm1yZSxmYUhlYXJ0TXVzaWNDYW1lcmFCb2x0Okl1dCxmYVJ1bGVyVmVydGljYWw6RnV0LGZhTWFwTG9jYXRpb25Eb3Q6Z3JlLGZhTWFwTWFya2VkQWx0Ok91dCxmYUhlYXJ0Q3JhY2s6eHJlLGZhSGVhcnRCcm9rZW46QnV0LGZhQ293OlJ1dCxmYVJzczp2NyxmYUZlZWQ6SHV0LGZhTWFnbmlmeWluZ0dsYXNzOnk3LGZhU2VhcmNoOnF1dCxmYUNsb3VkTW9vbjpWdXQsZmFCb3hlc1N0YWNrZWQ6UFYsZmFCb3hlczpVdXQsZmFCb3hlc0FsdDpqdXQsZmFDb2RlQnJhbmNoOld1dCxmYUJhbjpicmUsZmFDYW5jZWw6R3V0LGZhSnVnRGV0ZXJnZW50Oll1dCxmYVJlcGx5OnZyZSxmYU1haWxSZXBseTpadXQsZmFTdW5QbGFudFdpbHQ6WHV0LGZhQmFjdGVyaXVtOlF1dCxmYVJlY29yZFZpbnlsOkt1dCxmYUZsb3BweURpc2s6eXJlLGZhU2F2ZTpKdXQsZmFUb2lsZXRzUG9ydGFibGU6ZXB0LGZhTzp0cHQsZmFQYWxldHRlOmFwdCxmYVVubG9jazpycHQsZmFFYXJMaXN0ZW46d3JlLGZhQXNzaXN0aXZlTGlzdGVuaW5nU3lzdGVtczppcHQsZmFDb2RlUHVsbFJlcXVlc3Q6b3B0LGZhS2V5OnNwdCxmYVNrdWxsOm5wdCxmYU1hcnNTdHJva2VVcDpNcmUsZmFNYXJzU3Ryb2tlVjpscHQsZmFGaXJlRmxhbWVTaW1wbGU6enJlLGZhQnVybjpjcHQsZmFUcmVlOmRwdCxmYVNtb2c6ZnB0LGZhUzp1cHQsZmFKZWRpOnBwdCxmYVBlcnNvbkhpa2luZzprcmUsZmFIaWtpbmc6aHB0LGZhQXJyb3dzVXBUb0xpbmU6bXB0LGZhTWFyc0RvdWJsZTpncHQsZmFUaGVybW9tZXRlcjp4cHQsZmFQYWludGJydXNoOlNyZSxmYVBhaW50QnJ1c2g6YnB0LGZhTmV1dGVyOnZwdCxmYVNxdWFyZVBob25lRmxpcDpDcmUsZmFQaG9uZVNxdWFyZUFsdDp5cHQsZmFGYWNlR3JpblRvbmd1ZVNxdWludDpMcmUsZmFHcmluVG9uZ3VlU3F1aW50OndwdCxmYUNvbW1lbnREb2xsYXI6TXB0LGZhSGlwcG86enB0LGZhQm93bEZvb2Q6a3B0LGZhU3F1YXJlVmlydXM6U3B0LGZhQ2xvdWRTdW5SYWluOkNwdCxmYUFycm93UmlnaHRMb25nOlRyZSxmYUxvbmdBcnJvd1JpZ2h0OkxwdCxmYUJ1aWxkaW5nVW46VHB0LGZhVGVtcGVyYXR1cmVMb3c6X3B0LGZhRG9vck9wZW46QXB0LGZhQWxpZ25MZWZ0OiRwdCxmYUNhbWVyYTpfcmUsZmFDYW1lcmFBbHQ6RHB0LGZhVXNlcnNSYXlzOkVwdCxmYVJhaW5ib3c6TnB0LGZhU2l0ZW1hcDpQcHQsZmFGYWNlR3JpblN0YXJzOkFyZSxmYUdyaW5TdGFyczpJcHQsZmFTb3J0VXA6JHJlLGZhU29ydEFzYzpGcHQsZmFFeWU6VFUsZmFDYXJldExlZnQ6X1UsZmFBcHBsZVdob2xlOkRyZSxmYUFwcGxlQWx0Ok9wdCxmYVNjcm9sbFRvcmFoOkVyZSxmYVRvcmFoOkJwdCxmYUhvdXNlTG9jazpScHQsZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmU6SHB0LGZhVHJhc2g6RDcsZmFGYWNlU2FkVGVhcjpOcmUsZmFTYWRUZWFyOnFwdCxmYUZheDpWcHQsZmFQZXJzb25DaXJjbGVQbHVzOlVwdCxmYUhhbXNhOmpwdCxmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uOldwdCxmYUNsaXBib2FyZENoZWNrOkdwdCxmYVNoYXJlRnJvbVNxdWFyZTpQcmUsZmFTaGFyZVNxdWFyZTpZcHQsZmFSZWNlaXB0OkFVLGZhRXF1YWxzOlpwdCxmYUNoZXZyb25VcDpYcHQsZmFWaXJ1c1NsYXNoOlFwdCxmYVNsYXNoOktwdCxmYUV4cGFuZDpKcHQsZmFOb3RlU3RpY2t5OklyZSxmYVN0aWNreU5vdGU6ZTl0LGZhVGFibGVDb2x1bW5zOkZyZSxmYUNvbHVtbnM6dDl0LGZhUGVyc29uU2hlbHRlcjphOXQsZmFDaXJjbGVOb3RjaDpyOXQsZmFXYXRlcjppOXQsZmFEZWxldGVMZWZ0Ok9yZSxmYUJhY2tzcGFjZTpvOXQsZmFCcm9vbUJhbGw6SVYsZmFRdWlkZGl0Y2g6czl0LGZhUXVpZGRpdGNoQnJvb21CYWxsOm45dCxmYUo6bDl0LGZhU2h1dHRsZVNwYWNlOkJyZSxmYVNwYWNlU2h1dHRsZTpjOXQsZmFZaW5ZYW5nOmQ5dCxmYVN0b3A6Zjl0LGZhVHJvd2VsOnU5dCxmYUhhbmRCYWNrRmlzdDpScmUsZmFIYW5kUm9jazpwOXQsZmFUZW1wZXJhdHVyZUhpZ2g6aDl0LGZhR3JlYXRlclRoYW46bTl0LGZhQ3J1dGNoOmc5dCxmYVNlcHRhZ29uOkhyZSxmYUhlcHRhZ29uOng5dCxmYVN0cmVldFZpZXc6Yjl0LGZhV2F2ZVNxdWFyZTp2OXQsZmFBbmdsZUxlZnQ6eTl0LGZhU2NyZXdkcml2ZXI6dzl0LGZhVHJhY3RvcjpNOXQsZmFCcmlkZ2VDaXJjbGVYbWFyazp6OXQsZmFWaWFsczprOXQsZmFTdGV0aG9zY29wZTpTOXQsZmFQb2RjYXN0OkM5dCxmYUFycm93VXBSaWdodERvdHM6TDl0LGZhQ2hlc3NRdWVlbjpUOXQsZmFBbmNob3JDaXJjbGVFeGNsYW1hdGlvbjpfOXQsZmFFbGxpcHNpc1ZlcnRpY2FsOnFyZSxmYUVsbGlwc2lzVjpBOXQsZmFIZWFydENpcmNsZUV4Y2xhbWF0aW9uOiQ5dCxmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb246RDl0LGZhUGVyc29uQXJyb3dVcEZyb21MaW5lOkU5dCxmYU5vdEVxdWFsOk45dCxmYVRyYWluVHJhbTpQOXQsZmFQbGFuZURlcGFydHVyZTpJOXQsZmFSaWdodFRvQnJhY2tldDpWcmUsZmFTaWduSW5BbHQ6Rjl0LGZhU2RDYXJkOk85dCxmYUhvdXNlQ2lyY2xlRXhjbGFtYXRpb246Qjl0LGZhU2hla2VsU2lnbjpLNixmYUlsczpSOXQsZmFTaGVrZWw6SDl0LGZhU2hlcWVsOnE5dCxmYVNoZXFlbFNpZ246Vjl0LGZhUmFkaW86VTl0LGZhSGFuZERvdHM6VXJlLGZhQWxsZXJnaWVzOmo5dCxmYUJvb2tTa3VsbDpqcmUsZmFCb29rRGVhZDpXOXQsZmFVbmxvY2tLZXlob2xlOldyZSxmYVVubG9ja0FsdDpHOXQsZmFGaWxlQXJyb3dVcDpHcmUsZmFGaWxlVXBsb2FkOlk5dCxmYUZhY2VHcmluVGVhcnM6WXJlLGZhR3JpblRlYXJzOlo5dCxmYVBlblRvU3F1YXJlOnc3LGZhRWRpdDpYOXQsZmFFYXJ0aEV1cm9wZTpacmUsZmFHbG9iZUV1cm9wZTpROXQsZmFGYWNlR3JpbkJlYW1Td2VhdDpYcmUsZmFHcmluQmVhbVN3ZWF0Oks5dCxmYUNpcmNsZUhhbGZTdHJva2U6UXJlLGZhQWRqdXN0Oko5dCxmYVBlcnNvbk1pbGl0YXJ5VG9QZXJzb246ZWh0LGZhVGFibGVDZWxsc0NvbHVtbkxvY2s6dGh0LGZhVHJ1Y2tGaWVsZFVuOmFodCxmYUNsb2NrOktyZSxmYUNsb2NrRm91cjpyaHQsZmFCb29rOmlodCxmYUZhY2VMYXVnaFdpbms6SnJlLGZhTGF1Z2hXaW5rOm9odCxmYUNsb3VkTWVhdGJhbGw6c2h0LGZhQ2hhcnRBcmVhOmVpZSxmYUFyZWFDaGFydDpuaHQsZmFSdXBpYWhTaWduOmxodCxmYVRleHRXaWR0aDpjaHQsZmFTYXRlbGxpdGU6ZGh0LGZhTWFnbmlmeWluZ0dsYXNzTWludXM6dGllLGZhU2VhcmNoTWludXM6Zmh0LGZhUGVvcGxlR3JvdXA6dWh0LGZhU3F1YXJlQmluYXJ5OnBodCxmYU1hc2tzVGhlYXRlcjphaWUsZmFUaGVhdGVyTWFza3M6aGh0LGZhQ2FydFBsdXM6bWh0LGZhSGFuZHNBc2xJbnRlcnByZXRpbmc6YTcsZmFBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZzpnaHQsZmFBc2xJbnRlcnByZXRpbmc6eGh0LGZhSGFuZHNBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZzpiaHQsZmFUYWJsZUNlbGxzUm93VW5sb2NrOnZodCxmYVJvY2tldDp5aHQsZmFTaHJpbXA6d2h0LGZhVGVuZ2VTaWduOnJpZSxmYVRlbmdlOk1odCxmYUhvdXNlQ2hpbW5leU1lZGljYWw6aWllLGZhQ2xpbmljTWVkaWNhbDp6aHQsZmFVc2Vyc1NsYXNoOmtodCxmYVBhcGVyUGxhbmU6U2h0LGZhQm9va0F0bGFzOm9pZSxmYUF0bGFzOkNodCxmYVRhYmxlOkxodCxmYUhlYXJ0OlRodCxmYUNpcmNsZUNoZXZyb25VcDpzaWUsZmFDaGV2cm9uQ2lyY2xlVXA6X2h0LGZhQmF0dGVyeUhhbGY6bmllLGZhQmF0dGVyeTM6QWh0LGZhRm9udEF3ZXNvbWU6RlYsZmFGb250QXdlc29tZUZsYWc6JGh0LGZhRm9udEF3ZXNvbWVMb2dvRnVsbDpEaHQsZmFIYW5kY3VmZnM6RWh0LGZhSGF0Q293Ym95U2lkZTpOaHQsZmFJbmR1c3RyeTpQaHQsZmFMaW5lc0xlYW5pbmc6SWh0LGZhUGFzc3BvcnQ6Rmh0LGZhSW5maW5pdHk6T2h0LGZhQ2xvbmU6Qmh0LGZhRm9yd2FyZDpSaHQsZmFNOkhodCxmYVJvYWRTcGlrZXM6cWh0LGZhTW91bnRhaW46Vmh0LGZhQ2hlc3M6VWh0LGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzOnI3LGZhVGVtcGVyYXR1cmUzOmpodCxmYVRoZXJtb21ldGVyMzpXaHQsZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnM6R2h0LGZhQjpZaHQsZmFTaGllbGRWaXJ1czpaaHQsZmFMaXRlY29pblNpZ246WGh0LGZhRGljZUQ2OlFodCxmYUdyaXBMaW5lc1ZlcnRpY2FsOktodCxmYUdvbGZCYWxsVGVlOmxpZSxmYUdvbGZCYWxsOkpodCxmYUhleGFnb246ZW10LGZhRm9sZGVyT3Blbjp0bXQsZmFLYWFiYTphbXQsZmFIYW5kSG9sZGluZzpybXQsZmFTaW5nbGVRdW90ZVJpZ2h0OmltdCxmYUJvdHRsZURyb3BsZXQ6b210LGZhV2luZG93TWluaW1pemU6c210LGZhQ2hldnJvblJpZ2h0Om5tdCxmYUVnZzpsbXQsZmFMYW5kbWFya0RvbWU6Y2llLGZhTGFuZG1hcmtBbHQ6Y210LGZhV29ybTpkbXQsZmFVc2VySW5qdXJlZDpmbXQsZmFTdHJpa2V0aHJvdWdoOnVtdCxmYUJsb2c6cG10LGZhU3RvcHdhdGNoMjA6aG10LGZhVHJ1Y2tQaWNrdXA6bW10LGZhU2VlZGxpbmc6ZGllLGZhU3Byb3V0OmdtdCxmYVRyYW5zZ2VuZGVyOmZpZSxmYVRyYW5zZ2VuZGVyQWx0OnhtdCxmYVN0YXJIYWxmOmJtdCxmYVBob3RvRmlsbTp1aWUsZmFQaG90b1ZpZGVvOnZtdCxmYVB1bXBNZWRpY2FsOnltdCxmYUZpcmU6d210LGZhTWFnbmlmeWluZ0dsYXNzUGx1czpwaWUsZmFTZWFyY2hQbHVzOk1tdCxmYUZsYXNrOnptdCxmYUFsaWduUmlnaHQ6a210LGZhQ2FibGVDYXI6aGllLGZhVHJhbTpTbXQsZmFLaXRNZWRpY2FsOm1pZSxmYUZpcnN0QWlkOkNtdCxmYUdyaXBMaW5lczpMbXQsZmFCdXJnZXI6Z2llLGZhSGFtYnVyZ2VyOlRtdCxmYVNub3dtYW46X210LGZhSG90ZWw6QW10LGZhUHJpbnQ6JG10LGZhVm9sbGV5YmFsbDp4aWUsZmFWb2xsZXliYWxsQmFsbDpEbXQsZmFUcmFmZmljTGlnaHQ6RW10LGZhUGxhbmVDaXJjbGVDaGVjazpObXQsZmFVc2VyczokVSxmYUNlcnRpZmljYXRlOlBtdCxmYUFsYXJtQ2xvY2s6SW10LGZhSGVsaWNvcHRlclN5bWJvbDpGbXQsZmFIb3VzZUNoaW1uZXlDcmFjazpiaWUsZmFIb3VzZURhbWFnZTpPbXQsZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nOkJtdCxmYURhdGFiYXNlOlJtdCxmYU5ld3NwYXBlcjpIbXQsZmFDbG91ZFJhaW46cW10LGZhTWF4aW1pemU6dmllLGZhRXhwYW5kQXJyb3dzQWx0OlZtdCxmYUxvY2F0aW9uQXJyb3c6VW10LGZhQ2l0eTpqbXQsZmFYUmF5OldtdCxmYVVtYnJlbGxhQmVhY2g6R210LGZhQXJyb3dSaWdodFRvQnJhY2tldDp5aWUsZmFTaWduSW46WW10LGZhSGVhZHNldDpabXQsZmFTcGxvdGNoOlhtdCxmYVVwTG9uZzp3aWUsZmFMb25nQXJyb3dBbHRVcDpRbXQsZmFIZXhhZ29uTm9kZXM6S210LGZhSG9zcGl0YWw6T1YsZmFIb3NwaXRhbEFsdDpKbXQsZmFIb3NwaXRhbFdpZGU6ZWd0LGZhUGVyc29uSGFyYXNzaW5nOnRndCxmYU1vbmV5QmlsbFRyZW5kVXA6YWd0LGZhUGVuUnVsZXI6TWllLGZhUGVuY2lsUnVsZXI6cmd0LGZhUmVwZWF0OmlndCxmYUJvbmU6b2d0LGZhRmlyZUZsYW1lQ3VydmVkOnppZSxmYUZpcmVBbHQ6c2d0LGZhQnVzU2ltcGxlOmtpZSxmYUJ1c0FsdDpuZ3QsZmFWZW51c01hcnM6bGd0LGZhQmxlbmRlcjpjZ3QsZmFVOmRndCxmYVNoYXJlOk03LGZhTWFpbEZvcndhcmQ6Zmd0LGZhUGhvbmVGbGlwOlNpZSxmYVBob25lQWx0OnVndCxmYVRvaWxldFBvcnRhYmxlOnBndCxmYVBlcnNvblByZWduYW50OmhndCxmYUxlc3NUaGFuOm1ndCxmYVN1cGVyc2NyaXB0OmdndCxmYUNpcmNsZVN0b3A6Q2llLGZhU3RvcENpcmNsZTp4Z3QsZmFBcnJvd3NVcERvd246TGllLGZhQXJyb3dzVjpiZ3QsZmFQb29TdG9ybTpUaWUsZmFQb29Cb2x0OnZndCxmYVZpZGVvU2xhc2g6eWd0LGZhU3F1YXJlWG1hcms6QlYsZmFUaW1lc1NxdWFyZTp3Z3QsZmFYbWFya1NxdWFyZTpNZ3QsZmFIYW5kSG9sZGluZ0Ryb3BsZXQ6X2llLGZhSGFuZEhvbGRpbmdXYXRlcjp6Z3QsZmFXb25TaWduOlJWLGZhS3J3OmtndCxmYVdvbjpTZ3QsZmFPYmplY3RVbmdyb3VwOkNndCxmYUNvbW1lbnQ6TGd0LGZhSGlsbEF2YWxhbmNoZTpUZ3QsZmFBcnJvd3NUb0V5ZTpfZ3QsZmFTbm93cGxvdzpBZ3QsZmFDaGFydEdhbnR0OiRndCxmYVZpZGVvOkFpZSxmYVZpZGVvQ2FtZXJhOkRndCxmYUNoZXNzUGF3bjpFZ3QsZmFTeW5hZ29ndWU6Tmd0LGZhQnVpbGRpbmdDaXJjbGVDaGVjazpQZ3QsZmFDYWxlbmRhclBsdXM6SWd0LGZhV2hlZWxjaGFpck1vdmU6JGllLGZhV2hlZWxjaGFpckFsdDpGZ3QsZmFVc2VyU2hpZWxkOk9ndCxmYUJvbGQ6Qmd0LGZhSGVhcnRQdWxzZTpEaWUsZmFIZWFydGJlYXQ6Umd0LGZhU3F1YXJlUm9vdFZhcmlhYmxlOkVpZSxmYVNxdWFyZVJvb3RBbHQ6SGd0LGZhSGFuZHNCdWJibGVzOk5pZSxmYUhhbmRzV2FzaDpxZ3QsZmFNYXJrZXI6Vmd0LGZhQ2xpcGJvYXJkOlVndCxmYVBsYWNlT2ZXb3JzaGlwOmpndCxmYUNhbm5hYmlzOldndCxmYVBlb3BsZVJvb2Y6R2d0LGZhRGlzZWFzZTpZZ3QsZmFCb29rQmlibGU6UGllLGZhQmlibGU6Wmd0LGZhQ2hlc3NCb2FyZDpYZ3QsZmFNYXJzOlFndCxmYUxhcHRvcDpLZ3QsZmFVc2VyWG1hcms6SWllLGZhVXNlclRpbWVzOkpndCxmYUZsYWdVc2E6ZXh0LGZhSGFuZE1pZGRsZUZpbmdlcjp0eHQsZmFNb3J0YXJQZXN0bGU6YXh0LGZhSGVhZFNpZGVDb3VnaDpyeHQsZmFQbGFuZUxvY2s6aXh0LGZhQmF0dGVyeVRocmVlUXVhcnRlcnM6RmllLGZhQmF0dGVyeTQ6b3h0LGZhRnJhbmNTaWduOnN4dCxmYUZpbHRlckNpcmNsZURvbGxhcjpPaWUsZmFGdW5uZWxEb2xsYXI6bnh0LGZhQ2hlZXNlOmx4dCxmYUNpcmNsZUg6QmllLGZhSG9zcGl0YWxTeW1ib2w6Y3h0LGZhU2Nob29sOmR4dCxmYURpY2VGaXZlOmZ4dCxmYVRvcm5hZG86dXh0LGZhSmV0RmlnaHRlcjpSaWUsZmFGaWdodGVySmV0OnB4dCxmYVRodW1ic0Rvd246aHh0LGZhQnJvb206bXh0LGZhRmlsZUltcG9ydDpIaWUsZmFBcnJvd1JpZ2h0VG9GaWxlOmd4dCxmYVV0ZW5zaWxzOnFpZSxmYUN1dGxlcnk6eHh0LGZhSWRCYWRnZTpieHQsZmFTcGlkZXI6dnh0LGZhTW9iaWxlUmV0cm86eXh0LGZhU2lnbnNQb3N0OlZpZSxmYU1hcFNpZ25zOnd4dCxmYUdyb3VwQXJyb3dzUm90YXRlOk14dCxmYUFycm93c1NwbGl0VXBBbmRMZWZ0Onp4dCxmYUZpbGxEcmlwOmt4dCxmYVNoaWVsZEhlYXJ0OlN4dCxmYVBlcnNvblNraWluZ05vcmRpYzpVaWUsZmFTa2lpbmdOb3JkaWM6Q3h0LGZhU3F1YXJlQ2hlY2s6amllLGZhQ2hlY2tTcXVhcmU6THh0LGZhQmF0aDpXaWUsZmFCYXRodHViOlR4dCxmYUNoZXNzQmlzaG9wOl94dCxmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWw6R2llLGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0OkF4dCxmYURyYXdQb2x5Z29uOllpZSxmYVZlY3RvclBvbHlnb246JHh0LGZhSUN1cnNvcjpEeHQsZmFIZWFydENpcmNsZVBsdXM6RXh0LGZhU2hpZWxkRG9nOk54dCxmYUdyZWF0ZXJUaGFuRXF1YWw6UHh0LGZhRW52ZWxvcGVPcGVuOkl4dCxmYU1vdW5kOkZ4dCxmYVZvaWNlbWFpbDpPeHQsZmFWZXN0OkJ4dCxmYUF1ZGlvRGVzY3JpcHRpb246Unh0LGZhVzpIeHQsZmFFeWVEcm9wcGVyOkhWLGZhRXllRHJvcHBlckVtcHR5OnF4dCxmYUV5ZWRyb3BwZXI6Vnh0LGZhQ2lyY2xlWG1hcms6YTUsZmFUaW1lc0NpcmNsZTpVeHQsZmFYbWFya0NpcmNsZTpqeHQsZmFUcmFpbGVyOld4dCxmYVR1cmtpc2hMaXJhU2lnbjpxVixmYVRyeTpHeHQsZmFUdXJraXNoTGlyYTpZeHQsZmFWb2xjYW5vOlp4dCxmYVdhbmRTcGFya2xlczpYeHQsZmFNaWNyb3Bob25lOlF4dCxmYUNyb3duOkt4dCxmYVRlbnRBcnJvd1R1cm5MZWZ0Okp4dCxmYVRydWNrRmFzdDpaaWUsZmFTaGlwcGluZ0Zhc3Q6ZWJ0LGZhVXNlclBlbjpYaWUsZmFVc2VyRWRpdDp0YnQsZmFVc2VyQ2xvY2s6YWJ0LGZhU2hvd2VyOnJidCxmYVNxdWFyZUNhcmV0VXA6UWllLGZhQ2FyZXRTcXVhcmVVcDppYnQsZmFNYXBMb2NhdGlvbjpLaWUsZmFNYXBNYXJrZWQ6b2J0LGZhUGVuRmFuY3k6c2J0LGZhRXVyb1NpZ246VlYsZmFFdXI6bmJ0LGZhRXVybzpsYnQsZmFIb3VzZUNpcmNsZVhtYXJrOmNidCxmYUxpcmFTaWduOmRidCxmYVllblNpZ246SjYsZmFDbnk6ZmJ0LGZhSnB5OnVidCxmYVJtYjpwYnQsZmFZZW46aGJ0LGZhQm94T3BlbjptYnQsZmFUcnVja0ZpZWxkOmdidCxmYUxvY2F0aW9uUGluTG9jazp4YnQsZmFQZXJzb25QcmF5aW5nOkppZSxmYVByYXk6YmJ0LGZhQ2xpcGJvYXJkTGlzdDp2YnQsZmFTYWNrRG9sbGFyOnlidCxmYU1vdW50YWluU3VuOndidCxmYUFycm93VXBXaWRlU2hvcnQ6ZW9lLGZhU29ydEFtb3VudFVwOk1idCxmYVVzZXJzTGluZTp6YnQsZmFTdGFyT2ZEYXZpZDprYnQsZmFOb3Rlc01lZGljYWw6U2J0LGZhQXVzdHJhbFNpZ246Q2J0LGZhQ2xpcGJvYXJkVXNlcjpMYnQsZmFGaWxlSW1hZ2U6VGJ0LGZhU3F1YXJlQ2FyZXRSaWdodDp0b2UsZmFDYXJldFNxdWFyZVJpZ2h0Ol9idCxmYVZpYWw6QWJ0LGZhSGVsaWNvcHRlcjokYnQsZmFNaXR0ZW46RGJ0LGZhR2FzUHVtcDpFYnQsZmFFbnZlbG9wZUNpcmNsZUNoZWNrOk5idCxmYVBlcnNvblNrYXRpbmc6YW9lLGZhU2thdGluZzpQYnQsZmFTdW46RFUsZmFCYXNlYmFsbDpyb2UsZmFCYXNlYmFsbEJhbGw6SWJ0LGZhSW1hZ2U6RmJ0LGZhTm90ZGVmOk9idCxmYUJhc2tldGJhbGw6aW9lLGZhQmFza2V0YmFsbEJhbGw6QmJ0LGZhUGVuY2lsOm9vZSxmYVBlbmNpbEFsdDpSYnQsZmFQZXJzb25XYWxraW5nQXJyb3dMb29wTGVmdDpIYnQsZmFEaWNlU2l4OnFidCxmYUFuZ2xlc0Rvd246c29lLGZhQW5nbGVEb3VibGVEb3duOlZidCxmYVN5cmluZ2U6VWJ0LGZhV2hlYXRBd246bm9lLGZhV2hlYXRBbHQ6amJ0LGZhUGxhbmVVcDpXYnQsZmFBbGlnbkNlbnRlcjpHYnQsZmFIb2NrZXlQdWNrOllidCxmYUNpcmNsZUFycm93TGVmdDpsb2UsZmFBcnJvd0NpcmNsZUxlZnQ6WmJ0LGZhUGx1Z0NpcmNsZUJvbHQ6WGJ0LGZhUmVzdHJvb206UWJ0LGZhQW5jaG9yTG9jazpLYnQsZmFUaW1lbGluZTpKYnQsZmFMaWdodGJ1bGI6ZXZ0LGZhQ2lyY2xlQXJyb3dSaWdodDpjb2UsZmFBcnJvd0NpcmNsZVJpZ2h0OnR2dCxmYU1hcnNBbmRWZW51czphdnQsZmFOZXR3b3JrV2lyZWQ6RVUsZmFCdWlsZGluZ1NoaWVsZDpydnQsZmFDb2RlOml2dCxmYUZlYXRoZXJQb2ludGVkOmRvZSxmYUZlYXRoZXJBbHQ6b3Z0LGZhRmlsZUNpcmNsZVF1ZXN0aW9uOnN2dCxmYVNpZ25hdHVyZTpudnQsZmFFYXJ0aEFtZXJpY2FzOmk3LGZhRWFydGg6bHZ0LGZhRWFydGhBbWVyaWNhOmN2dCxmYUdsb2JlQW1lcmljYXM6ZHZ0LGZhQ2Fycm90OmZ2dCxmYVRlbXBlcmF0dXJlRnVsbDpvNyxmYVRlbXBlcmF0dXJlNDp1dnQsZmFUaGVybW9tZXRlcjQ6cHZ0LGZhVGhlcm1vbWV0ZXJGdWxsOmh2dCxmYVRhYmxlQ2VsbHNSb3dMb2NrOm12dCxmYUJvbHRMaWdodG5pbmc6Z3Z0LGZhQ2xvdWRTaG93ZXJzV2F0ZXI6eHZ0LGZhQXJyb3dVcExvbmc6Zm9lLGZhTG9uZ0Fycm93VXA6YnZ0LGZhQWRkcmVzc0NhcmQ6VVYsZmFDb250YWN0Q2FyZDp2dnQsZmFWY2FyZDp5dnQsZmFBbmdsZVJpZ2h0Ond2dCxmYUZhY2VNZWg6dW9lLGZhTWVoOk12dCxmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXI6enZ0LGZhTWFwOmt2dCxmYVVzZXJQbHVzOlN2dCxmYVZlbnVzOkN2dCxmYURpYWdyYW1TdWNjZXNzb3I6THZ0LGZhSGVhZFNpZGVDb3VnaFNsYXNoOlR2dCxmYURpYWdyYW1Qcm9qZWN0OnBvZSxmYVByb2plY3REaWFncmFtOl92dCxmYVRlcm1pbmFsOk5VLGZhSG91c2VGaXJlOkF2dCxmYU1hc2s6JHZ0LGZhSHVycmljYW5lOkR2dCxmYUVhcnRoQWZyaWNhOmhvZSxmYUdsb2JlQWZyaWNhOkV2dCxmYVRodW1idGFjazptb2UsZmFUaHVtYlRhY2s6TnZ0LGZhSGFuZFBvaW50RG93bjpQdnQsZmFGYWNlTWVoQmxhbms6Z29lLGZhTWVoQmxhbms6SXZ0LGZhVGVtcGVyYXR1cmVFbXB0eTpzNyxmYVRlbXBlcmF0dXJlMDpGdnQsZmFUaGVybW9tZXRlcjA6T3Z0LGZhVGhlcm1vbWV0ZXJFbXB0eTpCdnQsZmFCb3JkZXJOb25lOlJ2dCxmYUhpZ2hsaWdodGVyOkh2dCxmYU1vbmV5QmlsbFdhdmU6cXZ0LGZhVG9pbGV0UGFwZXJTbGFzaDpWdnQsZmFGaWxlU2hpZWxkOlV2dCxmYVRleHRIZWlnaHQ6anZ0LGZhRmFjZUdyaW5Ub25ndWU6eG9lLGZhR3JpblRvbmd1ZTpXdnQsZmFGaWxlU2lnbmF0dXJlOkd2dCxmYUJ1aWxkaW5nV2hlYXQ6WXZ0LGZhUGx1Z0NpcmNsZU1pbnVzOlp2dCxmYUZ1dGJvbDpqVixmYUZ1dGJvbEJhbGw6WHZ0LGZhU29jY2VyQmFsbDpRdnQsZmFDaXJjbGVQbHVzOmJvZSxmYVBsdXNDaXJjbGU6S3Z0LGZhQnJhemlsaWFuUmVhbFNpZ246SnZ0LGZhU3RhckFuZENyZXNjZW50OmV5dCxmYUZhY2VTdXJwcmlzZTp2b2UsZmFTdXJwcmlzZTp0eXQsZmFIb3NwaXRhbFVzZXI6YXl0LGZhQXJyb3dEb3duVXBMb2NrOnJ5dCxmYUZvbGRlcjp5b2UsZmFGb2xkZXJCbGFuazppeXQsZmFIb2xseUJlcnJ5Om95dCxmYVZlbnVzRG91YmxlOnN5dCxmYUNsaXBib2FyZFF1ZXN0aW9uOm55dCxmYUhvdGRvZzpseXQsZmFBcnJvd1VwRnJvbUJyYWNrZXQ6Y3l0LGZhTWljcm9zY29wZTpkeXQsZmFDbG91ZDpmeXQsZmFCYXNlYmFsbEJhdEJhbGw6dXl0LGZhQ2FyUmVhcjp3b2UsZmFDYXJBbHQ6cHl0LGZhVGh1bWJ0YWNrU2xhc2g6TW9lLGZhVGh1bWJUYWNrU2xhc2g6aHl0LGZhUGx1c01pbnVzOm15dCxmYUhvdXNlQ2lyY2xlQ2hlY2s6Z3l0LGZhQ2FsZW5kYXJEYXk6eHl0LGZhQ2lyY2xlOmJ5dCxmYU1vYmlsZVZpYnJhdGU6dnl0LGZhRmFjZUdyaW5TcXVpbnQ6em9lLGZhR3JpblNxdWludDp5eXQsZmFVc2Vyc0JldHdlZW5MaW5lczp3eXQsZmFIb3VzZU1lZGljYWxDaXJjbGVYbWFyazpNeXQsZmFUYWJsZUxpc3Q6a29lLGZhVGhMaXN0Onp5dCxmYUZsYXNrVmlhbDpreXQsZmFDaXJjbGVFeGNsYW1hdGlvbjpTb2UsZmFFeGNsYW1hdGlvbkNpcmNsZTpTeXQsZmFUYXhpOkNvZSxmYUNhYjpDeXQsZmFUZXh0U2xhc2g6TG9lLGZhUmVtb3ZlRm9ybWF0Okx5dCxmYVBlb3BsZVB1bGxpbmc6VHl0LGZhQmFja3dhcmQ6X3l0LGZhQ2FyQnVyc3Q6VG9lLGZhQ2FyQ3Jhc2g6QXl0LGZhTGluazpfb2UsZmFDaGFpbjokeXQsZmFCYWNrd2FyZFN0ZXA6QW9lLGZhU3RlcEJhY2t3YXJkOkR5dCxmYVg6RXl0LGZhQ2lyY2xlVXNlcjokb2UsZmFVc2VyQ2lyY2xlOk55dCxmYVJlY3RhbmdsZUxpc3Q6RG9lLGZhTGlzdEFsdDpQeXQsZmFIYW5kOkVvZSxmYUhhbmRQYXBlcjpJeXQsZmFWYW5TaHV0dGxlOk5vZSxmYVNodXR0bGVWYW46Rnl0LGZhU3RhaXJzOk95dCxmYUhvcnNlSGVhZDpCeXQsZmFWYXVsdDpSeXQsZmFEcnVtU3RlZWxwYW46SHl0LGZhVGh1bWJzVXA6cXl0LGZhU3RhbXA6Vnl0LGZhTWVub3JhaDpVeXQsZmFDaGlsZHJlbjpqeXQsZmFDaGFydExpbmU6UG9lLGZhTGluZUNoYXJ0Old5dCxmYVNxdWFyZUVudmVsb3BlOklvZSxmYUVudmVsb3BlU3F1YXJlOkd5dCxmYUJhblNtb2tpbmc6Rm9lLGZhU21va2luZ0JhbjpZeXQsZmFUcnVja0Zyb250Olp5dCxmYUJ1aWxkaW5nOlBVLGZhQnVsbHNleWU6WHl0LGZhQXJyb3dMZWZ0TG9uZzpPb2UsZmFMb25nQXJyb3dMZWZ0OlF5dCxmYUNoZXNzUm9vazpLeXQsZmFCbGVuZGVyUGhvbmU6Snl0LGZhQXJyb3dUdXJuVXA6Qm9lLGZhTGV2ZWxVcDpld3QsZmFCaWN5Y2xlOnR3dCxmYUNpcmNsZUFycm93RG93bjpSb2UsZmFBcnJvd0NpcmNsZURvd246YXd0LGZhR2Vhcjp6NyxmYUNvZzpyd3QsZmFNYXJzQW5kVmVudXNCdXJzdDppd3QsZmFPdHRlcjpvd3QsZmFDaXJjbGVDaGV2cm9uTGVmdDpIb2UsZmFDaGV2cm9uQ2lyY2xlTGVmdDpzd3QsZmFDaXJjbGVRdWVzdGlvbjpxb2UsZmFRdWVzdGlvbkNpcmNsZTpud3QsZmFXYWxraWVUYWxraWU6bHd0LGZhVXNlckdyb3VwOlZvZSxmYVVzZXJGcmllbmRzOmN3dCxmYUhvdXNlQ2hpbW5leTpVb2UsZmFIb21lTGc6ZHd0LGZhUmlnaHRGcm9tQnJhY2tldDpqb2UsZmFTaWduT3V0QWx0OmZ3dCxmYUZpbGU6dXd0LGZhUGxhbmVTbGFzaDpwd3QsZmFDbG91ZFNob3dlcnNIZWF2eTpod3QsZmFQZXJzb25GYWxsaW5nOm13dCxmYVR1cm5Eb3duOldvZSxmYUxldmVsRG93bkFsdDpnd3QsZmFVcFJpZ2h0QW5kRG93bkxlZnRGcm9tQ2VudGVyOkdvZSxmYUV4cGFuZEFsdDp4d3QsZmFVc2VyVGFnOmJ3dCxmYUhhbmRTcGFya2xlczp2d3QsZmFBcnJvd3NUb0RvdDp5d3QsZmFGYWNlU2FkQ3J5OllvZSxmYVNhZENyeTp3d3QsZmFEb25nU2lnbjpNd3QsZmFQZW9wbGVMaW5lOnp3dCxmYVNxdWFyZVJzczpab2UsZmFSc3NTcXVhcmU6a3d0LGZhQ2FsZW5kYXJNaW51czpTd3QsZmFDaGFydERpYWdyYW06Q3d0LGZhRmFjZVRpcmVkOlhvZSxmYVRpcmVkOkx3dCxmYUhhbmRQb2ludFJpZ2h0OlR3dCxmYUFycm93VXA6X3d0LGZhQ3ViZXNTdGFja2VkOkF3dCxmYUNoaWxkQ29tYmF0YW50OlFvZSxmYUNoaWxkUmlmbGU6JHd0LGZhVmVzdFBhdGNoZXM6RHd0LGZhTWFydGluaUdsYXNzRW1wdHk6S29lLGZhR2xhc3NNYXJ0aW5pOkV3dCxmYU1hZ25ldDpOd3QsZmFSb2FkQmFycmllcjpQd3QsZmFDb21wYXNzRHJhZnRpbmc6Sm9lLGZhRHJhZnRpbmdDb21wYXNzOkl3dCxmYVNxdWFyZVBlcnNvbkNvbmZpbmVkOkZ3dCxmYVBsYXRlV2hlYXQ6T3d0LGZhU2lnbkhhbmdpbmc6ZXNlLGZhU2lnbjpCd3QsZmFDYXJCYXR0ZXJ5OnRzZSxmYUJhdHRlcnlDYXI6Und0LGZhU2hpcnQ6V1YsZmFUU2hpcnQ6SHd0LGZhVHNoaXJ0OnF3dCxmYVBhcmFncmFwaDpWd3QsZmFFbnZlbG9wZXNCdWxrOmFzZSxmYU1haWxCdWxrOlV3dCxmYUd1aXRhcjpqd3QsZmFTdWl0Y2FzZTpXd3QsZmFDaXJjbGVVcDpyc2UsZmFBcnJvd0FsdENpcmNsZVVwOkd3dCxmYUY6WXd0LGZhWG1hcmtzTGluZXM6Wnd0LGZhRWFydGhPY2VhbmlhOmlzZSxmYUdsb2JlT2NlYW5pYTpYd3QsZmFDb21tZW50U2xhc2g6UXd0LGZhUGxheTpLd3QsZmFWaWFsQ2lyY2xlQ2hlY2s6Snd0LGZhQnJpZGdlQ2lyY2xlQ2hlY2s6ZU10LGZhQ2VkaVNpZ246dE10LGZhUHV6emxlUGllY2U6YU10LGZhSGVsbWV0VW46ck10LGZhR2xhc3NXYXRlcjppTXQsZmFIZWFydENpcmNsZUJvbHQ6b010LGZhUHVtcFNvYXA6c010LGZhSGFuZFNjaXNzb3JzOm5NdCxmYURvbGx5Om9zZSxmYURvbGx5Qm94OmxNdCxmYVBhcGVyY2xpcDpJVSxmYURlbW9jcmF0OmNNdCxmYVNxdWFyZUFycm93VXBSaWdodDpzc2UsZmFFeHRlcm5hbExpbmtTcXVhcmU6ZE10LGZhRmVycnk6Zk10LGZhTW9zcXVpdG86dU10LGZhQnVpbGRpbmdDaXJjbGVBcnJvd1JpZ2h0OnBNdCxmYUxlZnRSaWdodDpuc2UsZmFBcnJvd3NBbHRIOmhNdCxmYVZpcnVzOm1NdCxmYUdlbTpnTXQsZmFUb2lsZXQ6eE10LGZhU2luZ2xlUXVvdGVMZWZ0OmJNdCxmYU1vbmV5QmlsbHM6dk10LGZhVGFibGV0QnV0dG9uOnlNdCxmYVJlY3RhbmdsZVhtYXJrOm43LGZhUmVjdGFuZ2xlVGltZXM6d010LGZhVGltZXNSZWN0YW5nbGU6TU10LGZhV2luZG93Q2xvc2U6ek10LGZhV3JlbmNoOmtNdCxmYVRyYXNoQ2FuOms3LGZhVHJhc2hBbHQ6U010LGZhVGFibGVDZWxsczpsc2UsZmFUaDpDTXQsZmFSaWJib246TE10LGZhTGFuZG1hcmtGbGFnOlRNdCxmYVVwRG93bkxlZnRSaWdodDpjc2UsZmFBcnJvd3NBbHQ6X010LGZhQ2FyU2lkZTpBTXQsZmFUcmFzaEFycm93VXA6ZHNlLGZhVHJhc2hSZXN0b3JlOiRNdCxmYUxpZmVSaW5nOkRNdCxmYUNvcHlyaWdodDpFTXQsZmFGaWxlUHJlc2NyaXB0aW9uOk5NdCxmYUVyYXNlcjpQTXQsZmFIb3VyZ2xhc3NTdGFydDpmc2UsZmFIb3VyZ2xhc3MxOklNdCxmYUNpcmNsZUxlZnQ6dXNlLGZhQXJyb3dBbHRDaXJjbGVMZWZ0OkZNdCxmYUNydXplaXJvU2lnbjpPTXQsZmFTbW9raW5nOkJNdCxmYVNxdWFyZVBvbGxWZXJ0aWNhbDpwc2UsZmFQb2xsOlJNdCxmYVBlcnNvbkNpcmNsZU1pbnVzOkhNdCxmYUJpb2hhemFyZDpxTXQsZmFCZWxsQ29uY2llcmdlOmhzZSxmYUNvbmNpZXJnZUJlbGw6Vk10LGZhUnVsZXJIb3Jpem9udGFsOlVNdCxmYUhvcnNlOmpNdCxmYUNhbGVuZGFyOldNdCxmYUhhbmRzSG9sZGluZ0NoaWxkOkdNdCxmYUl0YWxpYzpZTXQsZmFLaGFuZGE6Wk10LGZhRmFjZUZyb3duT3Blbjptc2UsZmFGcm93bk9wZW46WE10LGZhQ2hlY2s6RlUsZmFGaW5nZXJwcmludDpRTXQsZmFDaGFyZ2luZ1N0YXRpb246S010LGZhVXNlckxvY2s6Sk10LGZhTW9iaWxlU2NyZWVuQnV0dG9uOmdzZSxmYU1vYmlsZUFsdDplenQsZmFBbmNob3JDaXJjbGVDaGVjazp0enQsZmFQZXJzb25XYWxraW5nV2l0aENhbmU6eHNlLGZhQmxpbmQ6YXp0LGZhRmlsZVdhdmVmb3JtOmJzZSxmYUZpbGVNZWRpY2FsQWx0OnJ6dCxmYUhvdXNlQ3JhY2s6aXp0LGZhSGF0V2l6YXJkOm96dCxmYVVzZXJEb2N0b3I6dnNlLGZhVXNlck1kOnN6dCxmYUNoYXJ0QmFyOnlzZSxmYUJhckNoYXJ0Om56dCxmYVNwcmF5Q2FuU3BhcmtsZXM6d3NlLGZhQWlyRnJlc2hlbmVyOmx6dCxmYUJhaHRTaWduOmN6dCxmYVRlbXBlcmF0dXJlQXJyb3dVcDpNc2UsZmFUZW1wZXJhdHVyZVVwOmR6dCxmYVdlYkF3ZXNvbWU6Znp0LGZhTm9uQmluYXJ5OnV6dCxmYU46cHp0LGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0OnpzZSxmYUFycm93czpoenQsZmFIb3VzZTpsNyxmYUhvbWU6bXp0LGZhSG9tZUFsdDpnenQsZmFIb21lTGdBbHQ6eHp0LGZhU3Bpbm5lcjpienQsZmFHYXZlbDprc2UsZmFMZWdhbDp2enQsZmFUaWNrZXRTaW1wbGU6U3NlLGZhVGlja2V0QWx0Onl6dCxmYURvdmU6d3p0LGZhVGFycERyb3BsZXQ6TXp0LGZhVHJlZUNpdHk6enp0LGZhVHVyblVwOkNzZSxmYUxldmVsVXBBbHQ6a3p0LGZhVGVtcGVyYXR1cmVRdWFydGVyOmM3LGZhVGVtcGVyYXR1cmUxOlN6dCxmYVRoZXJtb21ldGVyMTpDenQsZmFUaGVybW9tZXRlclF1YXJ0ZXI6THp0LGZhU2xpZGVyczpMc2UsZmFTbGlkZXJzSDpUenQsZmFNb3NxdWU6X3p0LGZhSDpBenQsZmFJbmZvOiR6dCxmYVBlcnNvbldhbGtpbmc6VHNlLGZhV2Fsa2luZzpEenQsZmFBcnJvd1R1cm5Eb3duOl9zZSxmYUxldmVsRG93bjpFenQsZmFSb2FkOk56dCxmYVNwaXJhbDpQenQsZmFGYWNlRnJvd246QXNlLGZhRnJvd246SXp0LGZhV2luZUdsYXNzRW1wdHk6JHNlLGZhV2luZUdsYXNzQWx0OkZ6dCxmYUNsYXBwZXJib2FyZDpPenQsZmFGb3J3YXJkU3RlcDpEc2UsZmFTdGVwRm9yd2FyZDpCenQsZmFTcXVhcmVVcFJpZ2h0OkVzZSxmYUV4dGVybmFsTGlua1NxdWFyZUFsdDpSenQsZmFCb29rSm91cm5hbFdoaWxsczpOc2UsZmFKb3VybmFsV2hpbGxzOkh6dCxmYUNoYW1wYWduZUdsYXNzZXM6UHNlLGZhR2xhc3NDaGVlcnM6cXp0LGZhRHVtcHN0ZXI6Vnp0LGZhSGVhcnRDaXJjbGVYbWFyazpVenQsZmFDb21wdXRlcjpqenQsZmFXYW5kTWFnaWM6SXNlLGZhTWFnaWM6V3p0LGZhQnJhaW46R3p0LGZhQnJpZWZjYXNlTWVkaWNhbDpZenQsZmFIb3VzZU1lZGljYWxDaXJjbGVFeGNsYW1hdGlvbjpaenQsZmFDb2RlQ29tbWl0Olh6dCxmYVBlcnNvbkJyZWFzdGZlZWRpbmc6UXp0LGZhUGVyc29uUmF5czpLenQsZmFNYW5hdFNpZ246Snp0LGZhU29ydDpGc2UsZmFVbnNvcnRlZDpla3QsZmFDaXJjbGVSYWRpYXRpb246T3NlLGZhUmFkaWF0aW9uQWx0OnRrdCxmYUxhcHRvcENvZGU6YWt0LGZhU2luazpya3QsZmFBcnJvd1VwRnJvbVdhdGVyUHVtcDppa3QsZmFNaWNyb3Bob25lTGluZXNTbGFzaDpCc2UsZmFNaWNyb3Bob25lQWx0U2xhc2g6b2t0LGZhU2VydmVyOnNrdCxmYVVzZXI6R1YsZmFVc2VyQWx0Om5rdCxmYVVzZXJMYXJnZTpsa3QsZmFTbm93Zmxha2U6Y2t0LGZhU2t1bGxDcm9zc2JvbmVzOmRrdCxmYVBlc29TaWduOmZrdCxmYVdpbmVHbGFzczp1a3QsZmFUZW1wZXJhdHVyZUhhbGY6ZDcsZmFUZW1wZXJhdHVyZTI6cGt0LGZhVGhlcm1vbWV0ZXIyOmhrdCxmYVRoZXJtb21ldGVySGFsZjpta3QsZmFUaWNrZXQ6Z2t0LGZhV2hlYXRBd25DaXJjbGVFeGNsYW1hdGlvbjp4a3QsZmFBcnJvd3NUdXJuUmlnaHQ6Ymt0LGZhQ2FuZHlDYW5lOnZrdCxmYVdoZWVsY2hhaXI6eWt0LGZhU3BlbGxDaGVjazp3a3QsZmFWb2x1bWVPZmY6TWt0LGZhTHVuZ3M6emt0LGZhQm9va21hcms6a2t0LGZhQmFyY29kZTpTa3QsZmFMaXN0T2w6WVYsZmFMaXN0MTI6Q2t0LGZhTGlzdE51bWVyaWM6TGt0LGZhRmlsZUNpcmNsZVhtYXJrOlRrdCxmYUN1YmU6X2t0LGZhVGFwZTpBa3QsZmFCb21iOiRrdCxmYVNjYWxlVW5iYWxhbmNlZDpSc2UsZmFCYWxhbmNlU2NhbGVMZWZ0OkRrdCxmYVNxdWFyZUNhcmV0TGVmdDpIc2UsZmFDYXJldFNxdWFyZUxlZnQ6RWt0LGZhUnVsZXI6Tmt0LGZhSTpQa3QsZmFWb2x1bWVYbWFyazpaVixmYVZvbHVtZU11dGU6SWt0LGZhVm9sdW1lVGltZXM6Rmt0LGZhQXJjaHdheTpPa3QsZmFQZXJzb25EaWdnaW5nOnFzZSxmYURpZ2dpbmc6Qmt0LGZhR2F1Z2VIaWdoOlhWLGZhVGFjaG9tZXRlckFsdDpSa3QsZmFUYWNob21ldGVyQWx0RmFzdDpIa3QsZmFHZW5kZXJsZXNzOnFrdCxmYUNsb3VkU3VuOlZrdCxmYUFycm93UmlnaHQ6T1UsZmFIYW5kc2hha2U6UVYsZmFIYW5kc2hha2VBbHQ6VWt0LGZhSGFuZHNoYWtlU2ltcGxlOmprdCxmYVBlcnNvblNraWluZzpWc2UsZmFTa2lpbmc6V2t0LGZhQnJpZGdlV2F0ZXI6R2t0LGZhQnVpbGRpbmdOZ286WWt0LGZhSWdsb286Wmt0LGZhQ2lyY2xlRG9sbGFyVG9TbG90OlVzZSxmYURvbmF0ZTpYa3QsZmFZOlFrdCxmYUZhY2VTbWlsZVdpbms6anNlLGZhU21pbGVXaW5rOktrdCxmYURpY2VGb3VyOkprdCxmYUZhY2VHcmluU3F1aW50VGVhcnM6V3NlLGZhR3JpblNxdWludFRlYXJzOmVTdCxmYUZpbGVBdWRpbzp0U3QsZmFBcnJvd3NEb3duVG9MaW5lOmFTdCxmYUc6clN0LGZhVmloYXJhOmlTdCxmYUZsYWdDaGVja2VyZWQ6b1N0LGZhR2F1Z2VTaW1wbGU6S1YsZmFHYXVnZVNpbXBsZU1lZDpzU3QsZmFUYWNob21ldGVyQXZlcmFnZTpuU3QsZmFSaWdodExlZnQ6R3NlLGZhRXhjaGFuZ2VBbHQ6bFN0LGZhUGlsbHM6Y1N0LGZhRXhwbG9zaW9uOmRTdCxmYUFycm93c0Rvd25Ub1Blb3BsZTpmU3QsZmFVc2Vyc1ZpZXdmaW5kZXI6dVN0LGZhQ2FyT246cFN0LGZhU2xlaWdoOmhTdCxmYUR1bWJiZWxsOm1TdCxmYUJhYnlDYXJyaWFnZTpZc2UsZmFDYXJyaWFnZUJhYnk6Z1N0LGZhS2l3aUJpcmQ6eFN0LGZhQ2FsZW5kYXJYbWFyazpac2UsZmFDYWxlbmRhclRpbWVzOmJTdCxmYUNpcmNsZURvd246WHNlLGZhQXJyb3dBbHRDaXJjbGVEb3duOnZTdCxmYUZpbGVNZWRpY2FsOnlTdCxmYVhtYXJrOmlzLGZhQ2xvc2U6d1N0LGZhTXVsdGlwbHk6TVN0LGZhUmVtb3ZlOnpTdCxmYVRpbWVzOmtTdCxmYVNoYXBlczpRc2UsZmFUcmlhbmdsZUNpcmNsZVNxdWFyZTpTU3QsZmFEaWNlT25lOkNTdCxmYUxvY2tPcGVuOkxTdCxmYVBlcHBlckhvdDpUU3QsZmFEcm9wbGV0U2xhc2g6S3NlLGZhVGludFNsYXNoOl9TdCxmYURyb3BsZXQ6SnNlLGZhVGludDpBU3QsZmFGaWxlTGluZXM6SlYsZmFGaWxlQWx0OiRTdCxmYUZpbGVUZXh0OkRTdCxmYUNvbW1lbnRzRG9sbGFyOkVTdCxmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uOmVuZSxmYVNlYXJjaExvY2F0aW9uOk5TdCxmYUZpbGVJbnZvaWNlOkJVLGZhUGVudGFnb246UFN0LGZhUmVwdWJsaWNhbjpJU3QsZmFTaG9wOnRuZSxmYVN0b3JlQWx0OkZTdCxmYUZpbG06ZVUsZmFGaWxtQWx0Ok9TdCxmYUZpbG1TaW1wbGU6QlN0LGZhQnVpbGRpbmdDaXJjbGVYbWFyazpSU3QsZmFDb21tZW50czpIU3QsZmFUYWdzOnFTdCxmYUd1bjpWU3QsZmFDaXJjbGVDaGVjazpTNyxmYUNoZWNrQ2lyY2xlOlVTdCxmYUlkQ2FyZENsaXA6YW5lLGZhSWRDYXJkQWx0OmpTdCxmYU1vb246V1N0LGZhT2lsV2VsbDpHU3QsZmFUYWNob2dyYXBoRGlnaXRhbDpybmUsZmFEaWdpdGFsVGFjaG9ncmFwaDpZU3QsZmFUYWJsZXQ6aW5lLGZhVGFibGV0QW5kcm9pZDpaU3QsZmFSdWJsZVNpZ246ZjcsZmFSb3VibGU6WFN0LGZhUnViOlFTdCxmYVJ1YmxlOktTdCxmYUNsb3NlZENhcHRpb25pbmc6SlN0LGZhUGVuOmVDdCxmYVBsYW5lOnRDdCxmYUltYWdlczphQ3QsZmFNb2JpbGVTY3JlZW46b25lLGZhTW9iaWxlQW5kcm9pZEFsdDpyQ3QsZmFHdWFyYW5pU2lnbjppQ3QsZmFCYWdTaG9wcGluZzpzbmUsZmFTaG9wcGluZ0JhZzpvQ3QsZmFDaXJjbGVSaWdodDpubmUsZmFBcnJvd0FsdENpcmNsZVJpZ2h0OnNDdCxmYVBob25lVm9sdW1lOmxuZSxmYVZvbHVtZUNvbnRyb2xQaG9uZTpuQ3QsZmFDdWJlczpsQ3QsZmFQaG9uZTpjQ3QsZmFUb3JpaUdhdGU6ZEN0LGZhQmFjb246ZkN0LGZhUGVyc29uRmFsbGluZ0J1cnN0OnVDdCxmYVF1b3RlUmlnaHQ6Y25lLGZhUXVvdGVSaWdodEFsdDpwQ3QsZmFIb3VzZU1lZGljYWxGbGFnOmhDdCxmYVByZXNjcmlwdGlvbjptQ3QsZmFEaWNlVGhyZWU6Z0N0LGZhQnVpbGRpbmdMb2NrOnhDdCxmYUlkQ2FyZDpkbmUsZmFEcml2ZXJzTGljZW5zZTpiQ3QsZmFDaXJjbGVQbGF5OmZuZSxmYVBsYXlDaXJjbGU6dkN0LGZhRmFjZUxhdWdoQmVhbTp1bmUsZmFMYXVnaEJlYW06eUN0LGZhTGVhZjp3Q3QsZmFIb3VzZUNoaW1uZXlVc2VyOk1DdCxmYVJvdGF0ZVJpZ2h0OnRVLGZhUmVkb0FsdDp6Q3QsZmFSb3RhdGVGb3J3YXJkOmtDdCxmYVRvb3RoOlNDdCxmYUhvdXNlQ2hpbW5leVdpbmRvdzpDQ3QsZmFNb3RvcmN5Y2xlOkxDdCxmYUJhY2t3YXJkRmFzdDpwbmUsZmFGYXN0QmFja3dhcmQ6VEN0LGZhQWRkcmVzc0Jvb2s6aG5lLGZhQ29udGFjdEJvb2s6X0N0LGZhU2FpbGJvYXQ6QUN0LGZhQm9va0Jvb2ttYXJrOiRDdCxmYU1hZ25pZnlpbmdHbGFzc0Fycm93UmlnaHQ6REN0LGZhTWljcm9waG9uZUxpbmVzOm1uZSxmYU1pY3JvcGhvbmVBbHQ6RUN0LGZhUmVwbHlBbGw6Z25lLGZhTWFpbFJlcGx5QWxsOk5DdCxmYVVuaXZlcnNhbEFjY2VzczpQQ3QsZmFUb2lsZXRQYXBlcjphVSxmYVRvaWxldFBhcGVyQWx0OklDdCxmYVRvaWxldFBhcGVyQmxhbms6RkN0LGZhVnJDYXJkYm9hcmQ6T0N0LGZhUGl6emFTbGljZTpCQ3QsZmFTcHJheUNhbjpSQ3QsZmFWb2x1bWVMb3c6eG5lLGZhVm9sdW1lRG93bjpIQ3QsZmFDcm9zczpxQ3QsZmFQZXJzb246Ym5lLGZhTWFsZTpWQ3QsZmFIb3VyZ2xhc3M6dm5lLGZhSG91cmdsYXNzRW1wdHk6VUN0LGZhRmlzaDpqQ3QsZmFEcnVtc3RpY2tCaXRlOldDdCxmYUNoYXJ0U2ltcGxlOkdDdCxmYUF0b206WUN0LGZhUDpaQ3QsZmFKZXRGaWdodGVyVXA6WEN0LGZhUGx1Z0NpcmNsZVhtYXJrOlFDdCxmYVNoZWV0UGxhc3RpYzpLQ3QsZmFWOkpDdCxmYUxpc3Q6eW5lLGZhTGlzdFNxdWFyZXM6ZUx0LGZhU29sYXJQYW5lbDp0THQsZmFMYW5kTWluZU9uOmFMdCxmYUhlYWRwaG9uZXM6clUsZmFIZWFkcGhvbmVzQWx0OnJMdCxmYUhlYWRwaG9uZXNTaW1wbGU6aUx0LGZhQnVzOm9MdCxmYUZpbGVQb3dlcnBvaW50OnNMdCxmYVF1b3RlTGVmdDp3bmUsZmFRdW90ZUxlZnRBbHQ6bkx0LGZhQ2hldnJvbkRvd246bEx0LGZhRWFydGhBc2lhOk1uZSxmYUdsb2JlQXNpYTpjTHQsZmFDZW50U2lnbjpkTHQsZmFTaGllbGRDYXQ6Zkx0LGZhU2Nob29sQ2lyY2xlQ2hlY2s6dUx0LGZhTWFydGluaUdsYXNzOnpuZSxmYUdsYXNzTWFydGluaUFsdDpwTHQsZmFQbHVnOmhMdCxmYVBhbm9yYW1hOm1MdCxmYUNsb2NrUm90YXRlTGVmdDpDNyxmYUhpc3Rvcnk6Z0x0LGZhSmFyV2hlYXQ6eEx0LGZhQ2xvdWRBcnJvd0Rvd246aVUsZmFDbG91ZERvd25sb2FkOmJMdCxmYUNsb3VkRG93bmxvYWRBbHQ6dkx0LGZhVHJ1Y2tSYW1wQm94OmtuZSxmYVRydWNrTG9hZGluZzp5THQsZmFBbmdsZURvd246d0x0LGZhUGx1Z0NpcmNsZUNoZWNrOk1MdCxmYVdpbmRvd01heGltaXplOnpMdCxmYUhhbmRzSG9sZGluZ0NpcmNsZTprTHQsZmFMb2NhdGlvblBpbjpTbmUsZmFNYXBNYXJrZXI6U0x0LGZhQm93bGluZ0JhbGw6Q0x0LGZhQ2FydEZsYXRiZWQ6Q25lLGZhRG9sbHlGbGF0YmVkOkxMdCxmYUhvdXNlVXNlcjpMbmUsZmFIb21lVXNlcjpUTHQsZmFHaG9zdDpfTHQsZmFDb21tZW50Tm9kZXM6QUx0LGZhUGVyc29uQXJyb3dEb3duVG9MaW5lOiRMdCxmYVBsdWdDaXJjbGVQbHVzOkRMdCxmYVBlcnNvblN3aW1taW5nOlRuZSxmYVN3aW1tZXI6RUx0LGZhQ29tbWVudERvdHM6X25lLGZhQ29tbWVudGluZzpOTHQsZmFDaGFydFBpZTpBbmUsZmFQaWVDaGFydDpQTHQsZmFGcm9nOklMdCxmYVdpbmVCb3R0bGU6Rkx0LGZhSW5ib3g6T0x0LGZhU3F1YXJlSDokbmUsZmFIU3F1YXJlOkJMdCxmYUhvdXNlTWVkaWNhbDpSTHQsZmFDaXJjbGVDaGV2cm9uUmlnaHQ6RG5lLGZhQ2hldnJvbkNpcmNsZVJpZ2h0OkhMdCxmYUZpbGVDc3Y6cUx0LGZhSGF0Q293Ym95OlZMdCxmYUZhY2VHcmluVG9uZ3VlV2luazpFbmUsZmFHcmluVG9uZ3VlV2luazpVTHQsZmFMOmpMdCxmYUFycm93RG93blNob3J0V2lkZTpvVSxmYVNvcnRBbW91bnREZXNjOldMdCxmYVNvcnRBbW91bnREb3duQWx0OkdMdCxmYUhvdXJnbGFzc0hhbGY6Tm5lLGZhSG91cmdsYXNzMjpZTHQsZmFTcG9vbjpQbmUsZmFVdGVuc2lsU3Bvb246Wkx0LGZhQ3JlZGl0Q2FyZDpJbmUsZmFDcmVkaXRDYXJkQWx0OlhMdCxmYUZpbGVJbnZvaWNlRG9sbGFyOlJVLGZhU3BhZ2hldHRpTW9uc3RlckZseWluZzpGbmUsZmFQYXN0YWZhcmlhbmlzbTpRTHQsZmFNYXJ0aW5pR2xhc3NDaXRydXM6T25lLGZhQ29ja3RhaWw6S0x0LGZhQnVsbGhvcm46Skx0LGZhQm94VGlzc3VlOmVUdCxmYU1hdHRyZXNzUGlsbG93OnRUdCxmYUNoZXZyb25MZWZ0OmFUdCxmYUNsb3VkTW9vblJhaW46clR0LGZhQXJyb3dEb3duMTk6c1UsZmFTb3J0TnVtZXJpY0FzYzppVHQsZmFTb3J0TnVtZXJpY0Rvd246b1R0LGZhSGFuZFNwb2NrOnNUdCxmYVdhbmRNYWdpY1NwYXJrbGVzOkJuZSxmYU1hZ2ljV2FuZFNwYXJrbGVzOm5UdCxmYUNvbW1lbnRNZWRpY2FsOmxUdCxmYUJlbGxTbGFzaDpjVHQsZmFIYW5kc2hha2VTbGFzaDpuVSxmYUhhbmRzaGFrZUFsdFNsYXNoOmRUdCxmYUhhbmRzaGFrZVNpbXBsZVNsYXNoOmZUdCxmYUJvdHRsZVdhdGVyOnVUdCxmYURpY2VEMjA6cFR0LGZhQXJyb3dEb3duWkE6bFUsZmFTb3J0QWxwaGFEZXNjOmhUdCxmYVNvcnRBbHBoYURvd25BbHQ6bVR0LGZhQnJ1c2g6Z1R0LGZhUGVyc29uV2Fsa2luZ0Rhc2hlZExpbmVBcnJvd1JpZ2h0OnhUdCxmYUFycm93VXBTaG9ydFdpZGU6Um5lLGZhU29ydEFtb3VudFVwQWx0OmJUdCxmYUdyaXBWZXJ0aWNhbDpIbmUsZmFHcmlkVmVydGljYWw6dlR0LGZhQ2FyVHVubmVsOnlUdCxmYUNoYXJ0Q29sdW1uOndUdCxmYVRydWNrQXJyb3dSaWdodDpNVHQsZmFUdjpjVSxmYVRlbGV2aXNpb246elR0LGZhVHZBbHQ6a1R0LGZhU2VjdGlvbjpTVHQsZmFQZWFjZTpDVHQsZmFTdGFyOkxUdCxmYUZsYWc6VFR0LGZhVHJpYW5nbGVFeGNsYW1hdGlvbjpkVSxmYUV4Y2xhbWF0aW9uVHJpYW5nbGU6X1R0LGZhV2FybmluZzpBVHQsZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbjokVHQsZmFHcmFkdWF0aW9uQ2FwOnFuZSxmYU1vcnRhckJvYXJkOkRUdCxmYVN0b3JlOkVUdCxmYVVzZXJBc3Ryb25hdXQ6TlR0LGZhQnVpbGRpbmdGbGFnOlBUdCxmYU11Z1NhdWNlcjpWbmUsZmFDb2ZmZWU6SVR0LGZhTGVtb246RlR0LGZhQ2FyYXZhbjpPVHQsZmFROkJUdCxmYUxvY2s6UlR0LGZhUGFpbnRSb2xsZXI6SFR0LGZhVm9sdW1lSGlnaDpVbmUsZmFWb2x1bWVVcDpxVHQsZmFGb2xkZXJQbHVzOlZUdCxmYU1lcmN1cnk6VVR0LGZhQW5jaG9yOmpUdCxmYVNxdWFyZVBhcmtpbmc6am5lLGZhUGFya2luZzpXVHQsZmFIYW51a2lhaDpHVHQsZmFSb3RhdGVMZWZ0OnU3LGZhUm90YXRlQmFjazpZVHQsZmFSb3RhdGVCYWNrd2FyZDpaVHQsZmFVbmRvQWx0OlhUdCxmYUhlYWRpbmc6V25lLGZhSGVhZGVyOlFUdCxmYUNyb3NzaGFpcnM6S1R0LGZhQ2lyY2xlTm9kZXM6SlR0LGZhV2luZG93UmVzdG9yZTplX3QsZmFSOnRfdCxmYUZpbHRlckNpcmNsZVhtYXJrOmFfdCxmYUdvcHVyYW06cl90LGZhSGVhcnRDaXJjbGVNaW51czppX3QsZmFTdGFyT2ZMaWZlOm9fdCxmYUJ1c2luZXNzVGltZTpHbmUsZmFCcmllZmNhc2VDbG9jazpzX3QsZmFGaXJlRXh0aW5ndWlzaGVyOm5fdCxmYUFycm93RG93bkxvbmc6WW5lLGZhTG9uZ0Fycm93RG93bjpsX3QsZmFVc2VyTWludXM6Y190LGZhTW9uZXlDaGVjazpkX3QsZmFIb3VzZUxhcHRvcDpabmUsZmFMYXB0b3BIb3VzZTpmX3QsZmFEb3dubG9hZDp1X3QsZmFDb3VjaDpwX3QsZmFSb2FkTG9jazpoX3QsZmFTY2lzc29yczpYbmUsZmFDdXQ6bV90LGZhQnVnOkhVLGZhQXJyb3dSaWdodEZyb21CcmFja2V0OlFuZSxmYVNpZ25PdXQ6Z190LGZhSGFuZEhvbGRpbmdIYW5kOnhfdCxmYVN0cm9vcHdhZmVsOmJfdCxmYUNoaWxkOnZfdCxmYUljZUNyZWFtOnlfdCxmYUNvbXB1dGVyTW91c2U6S25lLGZhTW91c2U6d190LGZhRmF1Y2V0Ok1fdCxmYUF3YXJkOnpfdCxmYVBlcnNvbkRyb3duaW5nOmtfdCxmYUNhbWVyYVJvdGF0ZTpTX3QsZmFGYWNlR3JpbkhlYXJ0czpKbmUsZmFHcmluSGVhcnRzOkNfdCxmYUZpbGVGcmFnbWVudDpMX3QsZmFQZXJzb25NaWxpdGFyeVJpZmxlOlRfdCxmYVRvZ2dsZU9uOl9fdCxmYUx1bmdzVmlydXM6QV90LGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsOmZVLGZhUGluZ1BvbmdQYWRkbGVCYWxsOiRfdCxmYVRhYmxlVGVubmlzOkRfdCxmYUJveGVzUGFja2luZzpFX3QsZmFQZXJzb25DaGFsa2JvYXJkOk5fdCxmYURpY2VUd286UF90LGZhQXJyb3dSaWdodEFycm93TGVmdDplMGUsZmFFeGNoYW5nZTpJX3QsZmFGb290YmFsbDp0MGUsZmFGb290YmFsbEJhbGw6Rl90LGZhVHJ1Y2tNb25zdGVyOk9fdCxmYUFzdGVyaXNrOkJfdCxmYUJhdHRlcnlGdWxsOnVVLGZhQmF0dGVyeTpSX3QsZmFCYXR0ZXJ5NTpIX3QsZmFDaGlsZERyZXNzOnFfdCxmYUZhY2VLaXNzQmVhbTphMGUsZmFLaXNzQmVhbTpWX3QsZmFUcmFzaENhbkFycm93VXA6cjBlLGZhVHJhc2hSZXN0b3JlQWx0OlVfdCxmYUZvbnQ6al90LGZhQm9yZUhvbGU6V190LGZhVmlydXNDb3ZpZDpHX3QsZmFGaWxlUGRmOllfdCxmYUxhbmd1YWdlOlpfdCxmYVNoaWVsZEhhbHZlZDppMGUsZmFTaGllbGRBbHQ6WF90LGZhQ2FyZXRVcDpRX3QsZmFGaWxlUGVuOm8wZSxmYUZpbGVFZGl0OktfdCxmYVBlcnNvbkJpa2luZzpzMGUsZmFCaWtpbmc6Sl90LGZhQm9va09wZW5SZWFkZXI6bjBlLGZhQm9va1JlYWRlcjplQXQsZmFHbGFzc1dhdGVyRHJvcGxldDp0QXQsZmFUb3dlckJyb2FkY2FzdDpsMGUsZmFCcm9hZGNhc3RUb3dlcjphQXQsZmFNaW5pbWl6ZTpjMGUsZmFDb21wcmVzc0Fycm93c0FsdDpyQXQsZmFBcnJvd1JpZ2h0VG9DaXR5OmlBdCxmYUxhcHRvcE1lZGljYWw6b0F0LGZhQnJlYWRTbGljZTpzQXQsZmFHbG9iZTpuQXQsZmFGb2xkZXJNaW51czpsQXQsZmFNYXNrRmFjZTpjQXQsZmFCb25nOmRBdCxmYVJvYWRCcmlkZ2U6ZkF0LGZhQXJyb3dVcDkxOmQwZSxmYVNvcnROdW1lcmljVXBBbHQ6dUF0LGZhTW91bnRhaW5DaXR5OnBBdCxmYUFycm93RG93bjkxOnBVLGZhU29ydE51bWVyaWNEZXNjOmhBdCxmYVNvcnROdW1lcmljRG93bkFsdDptQXQsZmFGYWNlR3JpbldpZGU6ZjBlLGZhR3JpbkFsdDpnQXQsZmFQb29wOnhBdCxmYURoYXJtYWNoYWtyYTpiQXQsZmFCYXR0ZXJ5UXVhcnRlcjp1MGUsZmFCYXR0ZXJ5Mjp2QXQsZmFBbmtoOnlBdCxmYURpYW1vbmQ6d0F0LGZhU3Vic2NyaXB0Ok1BdCxmYVJ1cGVlU2lnbjpwMGUsZmFSdXBlZTp6QXQsZmFQZXJzb25SaWZsZTprQXQsZmFEOlNBdCxmYVNxdWFyZU5maTpDQXQsZmFUZWV0aDpMQXQsZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXI6aDBlLGZhU2VhcmNoRG9sbGFyOlRBdCxmYUR1bXBzdGVyRmlyZTpfQXQsZmFVcGxvYWQ6QUF0LGZhVXNlclNsYXNoOmhVLGZhVXNlckFsdFNsYXNoOiRBdCxmYVVzZXJMYXJnZVNsYXNoOkRBdCxmYUFycm93TGVmdDpFQXQsZmFWaWFsVmlydXM6TkF0LGZhQ2hlY2tEb3VibGU6UEF0LGZhUGF3OklBdCxmYUhlbG1ldFNhZmV0eTptVSxmYUhhcmRIYXQ6RkF0LGZhSGF0SGFyZDpPQXQsZmFFOkJBdCxmYUZhY2VMYXVnaFNxdWludDptMGUsZmFMYXVnaFNxdWludDpSQXQsZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlcjpnMGUsZmFDb21wcmVzc0FsdDpIQXQsZmFHaWZ0czpxQXQsZmFCZWQ6VkF0LGZhTW9uZXlCaWxsVHJhbnNmZXI6VUF0LGZhUGVyc29uUnVubmluZzp4MGUsZmFSdW5uaW5nOmpBdCxmYUNpcmNsZUNoZXZyb25Eb3duOmIwZSxmYUNoZXZyb25DaXJjbGVEb3duOldBdCxmYVVzZXJOdXJzZTpHQXQsZmFGYWNlS2lzc1dpbmtIZWFydDp2MGUsZmFLaXNzV2lua0hlYXJ0OllBdCxmYUZpbGw6WkF0LGZhTW9uZXlCaWxsMVdhdmU6eTBlLGZhTW9uZXlCaWxsV2F2ZUFsdDpYQXQsZmFMYW5kbWFyazpRQXQsZmFNdXNpYzpLQXQsZmFCb29rTWVkaWNhbDpKQXQsZmFTaHVmZmxlOncwZSxmYVJhbmRvbTplJHQsZmFVbmRlcmxpbmU6dCR0LGZhQnVpbGRpbmdVc2VyOmEkdCxmYVJvYm90OnIkdCxmYVBsdXM6TDcsZmFBZGQ6aSR0LGZhQ29weTpxVSxmYUNoZXNzS2luZzpvJHQsZmFIb3VzZUZsb29kV2F0ZXI6cyR0LGZhQml0Y29pblNpZ246biR0LGZhQm94OmwkdCxmYVNxdWFyZVBsdXM6TTBlLGZhUGx1c1NxdWFyZTpjJHQsZmFBcnJvd3NMZWZ0UmlnaHQ6ejBlLGZhQXJyb3dzSDpkJHQsZmFGYW46ZiR0LGZhQ3Jvdzp1JHQsZmFGaWxlQ2lyY2xlQ2hlY2s6cCR0LGZhTGlua1NsYXNoOnA3LGZhQ2hhaW5Ccm9rZW46aCR0LGZhQ2hhaW5TbGFzaDptJHQsZmFVbmxpbms6ZyR0LGZhQXJyb3dSb3RhdGVSaWdodDpoNyxmYUFycm93UmlnaHRSb3RhdGU6eCR0LGZhQXJyb3dSb3RhdGVGb3J3YXJkOmIkdCxmYVJlZG86diR0LGZhUGVuQ2xpcDprMGUsZmFQZW5BbHQ6eSR0LGZhRG9vckNsb3NlZDp3JHQsZmFBcnJvd0Rvd25XaWRlU2hvcnQ6Z1UsZmFTb3J0QW1vdW50QXNjOk0kdCxmYVNvcnRBbW91bnREb3duOnokdCxmYUNhcmV0RG93bjprJHQsZmFLOlMkdCxmYUNoZWNrVG9TbG90OlMwZSxmYVZvdGVZZWE6QyR0LGZhRmlzaEZpbnM6TCR0LGZhQ29tcHJlc3M6VCR0LGZhQXJyb3dVcEFaOkMwZSxmYVNvcnRBbHBoYVVwOl8kdCxmYVVzZXJHcmFkdWF0ZTpBJHQsZmFGaWxlQ29kZTokJHQsZmFTb2FwOkQkdCxmYVJlY3ljbGU6RSR0LGZhRmFjZUdyaW5XaW5rOkwwZSxmYUdyaW5XaW5rOk4kdCxmYVdhdGVyTGFkZGVyOnhVLGZhTGFkZGVyV2F0ZXI6UCR0LGZhU3dpbW1pbmdQb29sOkkkdCxmYVRvd2VyQ2VsbDpGJHQsZmFDb2xvblNpZ246TyR0LGZhTGFwdG9wRmlsZTpCJHQsZmFCYWhhaTpUMGUsZmFIYXlrYWw6UiR0LGZhTW9uZXlCaWxsMTpfMGUsZmFNb25leUJpbGxBbHQ6SCR0LGZhQ2xvdWRCb2x0OkEwZSxmYVRodW5kZXJzdG9ybTpxJHQsZmFFdGhlcm5ldDpWJHQsZmFIcnl2bmlhU2lnbjokMGUsZmFIcnl2bmlhOlUkdCxmYUV5ZVNsYXNoOlZVLGZhQ2FydEZsYXRiZWRTdWl0Y2FzZTpEMGUsZmFMdWdnYWdlQ2FydDpqJHQsZmFSYWRpYXRpb246VyR0LGZhRmlsZVdvcmQ6RyR0LGZhQmVkUHVsc2U6RTBlLGZhUHJvY2VkdXJlczpZJHQsZmFUZW50czpaJHQsZmFNdWdIb3Q6VVUsZmFCb2x0Ok4wZSxmYVphcDpYJHQsZmFKYXI6USR0LGZhVHJ1Y2tQbGFuZTpLJHQsZmFIYW5kSG9sZGluZ0hlYXJ0OkokdCxmYUFycm93Um90YXRlTGVmdDplNSxmYUFycm93TGVmdFJvdGF0ZTplRHQsZmFBcnJvd1JvdGF0ZUJhY2s6dER0LGZhQXJyb3dSb3RhdGVCYWNrd2FyZDphRHQsZmFVbmRvOnJEdCxmYUZhY2VBbmdyeTpQMGUsZmFBbmdyeTppRHQsZmFCdXJzdDpvRHQsZmFaOnNEdCxmYUJhbmRhZ2U6STBlLGZhQmFuZEFpZDpuRHQsZmFQbGFuZUNpcmNsZUV4Y2xhbWF0aW9uOmxEdCxmYUJ1c1NpZGU6Y0R0LGZhQnVnczpkRHQsZmFCZWVyTXVnRW1wdHk6RjBlLGZhQmVlcjpmRHQsZmFQZXJzb25DaXJjbGVDaGVjazp1RHQsZmFTdGFwbGVyOnBEdCxmYUhvdXNlTWVkaWNhbENpcmNsZUNoZWNrOmhEdCxmYU5haXJhU2lnbjptRHQsZmFXaWZpOmJVLGZhV2lmaTM6Z0R0LGZhV2lmaVN0cm9uZzp4RHQsZmFNb25leUNoZWNrRG9sbGFyOlQ3LGZhTW9uZXlDaGVja0FsdDpiRHQsZmFFeWVMb3dWaXNpb246TzBlLGZhTG93VmlzaW9uOnZEdCxmYUNpcmNsZUFycm93VXA6QjBlLGZhQXJyb3dDaXJjbGVVcDp5RHQsZmFDYW1lcmFSZXRybzp3RHQsZmFDYXBzdWxlczpNRHQsZmFQb286ekR0LGZhRWxldmF0b3I6a0R0LGZhVGFnOlNEdCxmYUZpbGVDaXJjbGVNaW51czpDRHQsZmFEb3duTG9uZzpSMGUsZmFMb25nQXJyb3dBbHREb3duOkxEdCxmYUNvbXBhY3REaXNjOlREdCxmYVN1aXRjYXNlUm9sbGluZzpfRHQsZmFCb29rUXVyYW46SDBlLGZhUXVyYW46QUR0LGZhUGhvbmVTbGFzaDokRHQsZmFSb2FkQ2lyY2xlQ2hlY2s6RER0LGZhU2hvcExvY2s6RUR0LGZhSW1hZ2VQb3J0cmFpdDpxMGUsZmFQb3J0cmFpdDpORHQsZmFCcmlkZ2VMb2NrOlBEdCxmYUhhbW1lcjpJRHQsZmFBcnJvd1VwMTk6VjBlLGZhU29ydE51bWVyaWNVcDpGRHQsZmFDaGVzc0tuaWdodDpPRHQsZmFIb3VzZUZsb29kV2F0ZXJDaXJjbGVBcnJvd1JpZ2h0OkJEdCxmYUFycm93VXBSaWdodEZyb21TcXVhcmU6XzcsZmFFeHRlcm5hbExpbms6UkR0LGZhQXJyb3dEb3duVXBBY3Jvc3NMaW5lOkhEdCxmYUZhY2VHcmluQmVhbTpVMGUsZmFHcmluQmVhbTpxRHQsZmFSZWN0YW5nbGVBZDpqMGUsZmFBZDpWRHQsZmFCb29rVGFuYWtoOlcwZSxmYVRhbmFraDpVRHQsZmFIb3RUdWJQZXJzb246RzBlLGZhSG90VHViOmpEdCxmYUZpbGVIYWxmRGFzaGVkOldEdCxmYU91dGRlbnQ6WTBlLGZhRGVkZW50OkdEdCxmYUhhbmRQZWFjZTpZRHQsZmFIZWFkU2lkZVZpcnVzOlpEdCxmYUNvbXBhc3M6WER0LGZhUGVuTmliOlFEdCxmYVRlbnRBcnJvd3NEb3duOktEdCxmYUZvcndhcmRGYXN0OlowZSxmYUZhc3RGb3J3YXJkOkpEdCxmYUNyb3A6ZUV0LGZhV2hpc2tleUdsYXNzOlgwZSxmYUdsYXNzV2hpc2tleTp0RXQsZmFTcXVhcmU6YUV0LGZhRmFjZUdyaW46UTBlLGZhR3JpbjpyRXQsZmFGaWxlQ29udHJhY3Q6aUV0LGZhQW5nbGVVcDpvRXQsZmFGYWNlU21pbGU6SzBlLGZhU21pbGU6c0V0LGZhUGVyc29uRHJlc3NCdXJzdDpuRXQsZmFEaXZpZGU6bEV0LGZhQ29kZUZvcms6Y0V0LGZhSG91c2VGbGFnOmRFdCxmYUJ1aWxkaW5nQ29sdW1uczp0NSxmYUJhbms6ZkV0LGZhSW5zdGl0dXRpb246dUV0LGZhTXVzZXVtOnBFdCxmYVVuaXZlcnNpdHk6aEV0LGZhUnVnOm1FdCxmYUNvZGVNZXJnZTpnRXQsZmFIb3VzZVRzdW5hbWk6eEV0LGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQ6YkV0LGZhVW1icmVsbGE6dkV0LGZhSGlsbFJvY2tzbGlkZTp5RXQsZmFVc2VyU2VjcmV0OndFdCxmYVBhZ2VyOk1FdCxmYUJyaWVmY2FzZTp6RXQsZmFUcm93ZWxCcmlja3M6a0V0LGZhU29ja3M6U0V0LGZhVDpDRXQsZmFNaWNyb2NoaXA6TEV0LGZhVHJ1Y2tNZWRpY2FsOkowZSxmYUFtYnVsYW5jZTpURXQsZmFPbTpfRXQsZmFNb3NxdWl0b05ldDpBRXQsZmFQcmVzY3JpcHRpb25Cb3R0bGU6JEV0LGZhVXNlcnNHZWFyOmU0ZSxmYVVzZXJzQ29nOkRFdCxmYVJvYWRDaXJjbGVFeGNsYW1hdGlvbjpFRXQsZmFQYXVzZTpORXQsZmFTdGFmZlNuYWtlOm03LGZhUm9kQXNjbGVwaXVzOlBFdCxmYVJvZFNuYWtlOklFdCxmYVN0YWZmQWVzY3VsYXBpdXM6RkV0LGZhUGlnZ3lCYW5rOk9FdCxmYU1vbnVtZW50OkJFdCxmYUFuZ2xlc1JpZ2h0OnQ0ZSxmYUFuZ2xlRG91YmxlUmlnaHQ6UkV0LGZhRGVza3RvcDpBNyxmYURlc2t0b3BBbHQ6SEV0LGZhUGxhbmVDaXJjbGVYbWFyazpxRXQsZmFSZXR3ZWV0OlZFdCxmYVVzZXJHZWFyOmE0ZSxmYVVzZXJDb2c6VUV0LGZhQm9yZGVyQWxsOmpFdCxmYUNvaW5zOldFdCxmYU1hcnNTdHJva2U6R0V0LGZhSGFuZHNoYWtlQW5nbGU6cjRlLGZhSGFuZHNIZWxwaW5nOllFdCxmYUFycm93RG93bjpaRXQsZmFMb2NhdGlvbkRvdDppNGUsZmFNYXBNYXJrZXJBbHQ6WEV0LGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uOlFFdCxmYUNvb2tpZUJpdGU6S0V0LGZhU2NyZXdkcml2ZXJXcmVuY2g6bzRlLGZhVG9vbHM6SkV0LGZhSW5kZW50OmVOdCxmYUJhcnM6czRlLGZhTmF2aWNvbjp0TnQsZmFIYW5kc1ByYXlpbmc6bjRlLGZhUHJheWluZ0hhbmRzOmFOdCxmYVZpcnVzZXM6ck50LGZhU2Nob29sRmxhZzppTnQsZmFUcmFkZW1hcms6b050LGZhRmlyZUJ1cm5lcjpzTnQsZmFGYWNlU21pbGVCZWFtOmw0ZSxmYVNtaWxlQmVhbTpuTnQsZmFUZW50QXJyb3dMZWZ0UmlnaHQ6bE50LGZhUm91dGU6Y050LGZhQW5nbGVzVXA6YzRlLGZhQW5nbGVEb3VibGVVcDpkTnQsZmFCdWNrZXQ6Zk50LGZhTGVzc1RoYW5FcXVhbDp1TnQsZmFGb2xkZXJDbG9zZWQ6cE50LGZhUGVyc29uVGhyb3VnaFdpbmRvdzpoTnQsZmFTY2hvb2xMb2NrOm1OdCxmYVBlcnNvbkJ1cnN0OmdOdCxmYUxlZnRMb25nOmQ0ZSxmYUxvbmdBcnJvd0FsdExlZnQ6eE50LGZhTG9jYXRpb25Dcm9zc2hhaXJzOmY0ZSxmYUxvY2F0aW9uOmJOdCxmYVBlcnNvbkRvdHNGcm9tTGluZTp1NGUsZmFEaWFnbm9zZXM6dk50LGZhR2F1Z2VTaW1wbGVIaWdoOnZVLGZhVGFjaG9tZXRlcjp5TnQsZmFUYWNob21ldGVyRmFzdDp3TnQsZmFBbmdsZXNMZWZ0OnA0ZSxmYUFuZ2xlRG91YmxlTGVmdDpNTnQsZmFVcERvd246aDRlLGZhQXJyb3dzQWx0Vjp6TnQsZmFCYXR0ZXJ5RW1wdHk6bTRlLGZhQmF0dGVyeTA6a050LGZhS2V5Ym9hcmQ6U050LGZhQ29va2llOkNOdCxmYVN0b3B3YXRjaDpMTnQsZmFFamVjdDpUTnQsZmFTYXRlbGxpdGVEaXNoOl9OdCxmYUZhY2VSb2xsaW5nRXllczpnNGUsZmFNZWhSb2xsaW5nRXllczpBTnQsZmFMaXN0Q2hlY2s6eDRlLGZhVGFza3M6JE50LGZhU2Fja1htYXJrOkROdCxmYUhhc2h0YWc6RU50LGZhVHJhaW46Tk50LGZhR2FtZXBhZDpQTnQsZmFGaWxlRXhwb3J0OmI0ZSxmYUFycm93UmlnaHRGcm9tRmlsZTpJTnQsZmFGYWNlR3JpbWFjZTp2NGUsZmFHcmltYWNlOkZOdCxmYVRyYWluU3Vid2F5Onk0ZSxmYVN1YndheTpPTnQsZmFDaXJjbGVEb3Q6dzRlLGZhRG90Q2lyY2xlOkJOdCxmYU9iamVjdEdyb3VwOlJOdCxmYVNoaXA6SE50LGZhQzpxTnQsZmFTcXVhcmVQaG9uZTpNNGUsZmFQaG9uZVNxdWFyZTpWTnQsZmFSdWxlckNvbWJpbmVkOlVOdCxmYUFycm93c1JvdGF0ZTp5VSxmYVJlZnJlc2g6ak50LGZhU3luYzpXTnQsZmFQZXJzb25EcmVzczp6NGUsZmFGZW1hbGU6R050LGZhQm9va09wZW46WU50LGZhRm9sZGVyVHJlZTpaTnQsZmFCb3hBcmNoaXZlOms0ZSxmYUFyY2hpdmU6WE50LGZhVGVudEFycm93RG93blRvTGluZTpRTnQsZmFRcmNvZGU6S050LGZhRHJhZ29uOkpOdCxmYUhvdXJnbGFzc0VuZDpTNGUsZmFIb3VyZ2xhc3MzOmVQdCxmYUdyaXA6cjUsZmFHcmlkSG9yaXpvbnRhbDp0UHQsZmFHcmlwSG9yaXpvbnRhbDphUHQsZmFCb3JkZXJUb3BMZWZ0OkM0ZSxmYUJvcmRlclN0eWxlOnJQdCxmYUxpc3RVbDpMNGUsZmFMaXN0RG90czppUHQsZmFQZW9wbGVSb2JiZXJ5Om9QdCxmYU1vYmlsZUJ1dHRvbjpzUHQsZmFBcnJvd0Rvd25BWjp3VSxmYVNvcnRBbHBoYUFzYzpuUHQsZmFTb3J0QWxwaGFEb3duOmxQdCxmYU1vbmV5QmlsbDpjUHQsZmFDaXJjbGVNaW51czpUNGUsZmFNaW51c0NpcmNsZTpkUHQsZmFBcnJvd1BvaW50ZXI6XzRlLGZhTW91c2VQb2ludGVyOmZQdCxmYVNxdWFyZVNoYXJlTm9kZXM6QTRlLGZhU2hhcmVBbHRTcXVhcmU6dVB0LGZhVGFibGVDZWxsc0xhcmdlOiQ0ZSxmYVRoTGFyZ2U6cFB0LGZhQ2F0OmhQdCxmYUNhbGVuZGFyV2VlazptUHQsZmFDb2RlQ29tcGFyZTpnUHQsZmFSb2FkQ2lyY2xlWG1hcms6eFB0LGZhUGFsbGV0OmJQdCxmYUNha2VDYW5kbGVzOk1VLGZhQmlydGhkYXlDYWtlOnZQdCxmYUNha2U6eVB0LGZhQnVnU2xhc2g6d1B0LGZhVGFycDpNUHQsZmFEaWFncmFtUHJlZGVjZXNzb3I6elB0LGZhRmFjZUZsdXNoZWQ6RDRlLGZhRmx1c2hlZDprUHQsZmFEaWFncmFtTmV4dDpTUHQsZmFBbmNob3JDaXJjbGVYbWFyazpDUHQsZmFQZXJzb25DaXJjbGVYbWFyazpMUHQsZmFTcGE6VFB0LGZhQmFyc1Byb2dyZXNzOkU0ZSxmYVRhc2tzQWx0Ol9QdCxmYUhlYXJ0Q2lyY2xlQ2hlY2s6QVB0LGZhTWFyc1N0cm9rZVJpZ2h0Ok40ZSxmYU1hcnNTdHJva2VIOiRQdCxmYVRvd2VyT2JzZXJ2YXRpb246RFB0LGZhU3RlcmxpbmdTaWduOnpVLGZhR2JwOkVQdCxmYVBvdW5kU2lnbjpOUHQsZmFGYXVjZXREcmlwOlBQdCxmYUNpcmNsZUluZm86JDcsZmFJbmZvQ2lyY2xlOklQdCxmYUZlYXRoZXI6RlB0LGZhQm93bFJpY2U6T1B0LGZhU3RhckhhbGZTdHJva2U6UDRlLGZhU3RhckhhbGZBbHQ6QlB0LGZhVGVtcGVyYXR1cmVBcnJvd0Rvd246STRlLGZhVGVtcGVyYXR1cmVEb3duOlJQdCxmYU1hc2tWZW50aWxhdG9yOkhQdCxmYUZpbGVWaWRlbzpxUHQsZmFBcnJvd1RyZW5kRG93bjpWUHQsZmFPaWxDYW46VVB0LGZhUGVvcGxlQ2FycnlCb3g6RjRlLGZhUGVvcGxlQ2Fycnk6alB0LGZhQ2hhaXI6V1B0LGZhV2luZDpHUHQsZmFMYXllckdyb3VwOllQdCxmYUhlYWRTaWRlTWFzazpaUHQsZmFIYW5kczprVSxmYVNpZ25MYW5ndWFnZTpYUHQsZmFTaWduaW5nOlFQdCxmYVRhYmxldHM6S1B0LGZhV2VpZ2h0SGFuZ2luZzpKUHQsZmFEaWNlOmVJdCxmYVNob3BTbGFzaDpPNGUsZmFTdG9yZUFsdFNsYXNoOnRJdCxmYVNvcnREb3duOkI0ZSxmYVNvcnREZXNjOmFJdCxmYVBlc2V0YVNpZ246ckl0LGZhVGFibGV0U2NyZWVuQnV0dG9uOlI0ZSxmYVRhYmxldEFsdDppSXQsZmFIYW5kSG9sZGluZ0RvbGxhcjpINGUsZmFIYW5kSG9sZGluZ1VzZDpvSXQsZmFTaGllbGQ6cTRlLGZhU2hpZWxkQmxhbms6c0l0LGZhRmFjZUxhdWdoOlY0ZSxmYUxhdWdoOm5JdCxmYUhhbmRzSG9sZGluZzpsSXQsZmFDYXJ0U2hvcHBpbmc6VTRlLGZhU2hvcHBpbmdDYXJ0OmNJdCxmYU9jdGFnb246ZEl0LGZhSGFuZFBvaW50ZXI6Zkl0LGZhUmVnaXN0ZXJlZDp1SXQsZmFIb3VzZVNpZ25hbDpwSXQsZmFCYW5nbGFkZXNoaVRha2FTaWduOmhJdH19KTt2YXIgRTcsajRlPW4oKCk9PntFNz17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsInN0cm9rZS13aWR0aCI6Miwic3Ryb2tlLWxpbmVjYXAiOiJyb3VuZCIsInN0cm9rZS1saW5lam9pbiI6InJvdW5kIn19KTt2YXIgZ0l0LG9zLFc0ZT1uKCgpPT57ajRlKCk7Z0l0PShbdCxlLGFdKT0+e2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHQpO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGk9PntyLnNldEF0dHJpYnV0ZShpLFN0cmluZyhlW2ldKSl9KSxhPy5sZW5ndGgmJmEuZm9yRWFjaChpPT57bGV0IG89Z0l0KGkpO3IuYXBwZW5kQ2hpbGQobyl9KSxyfSxvcz0odCxlPXt9KT0+e2xldCByPXsuLi5FNywuLi5lfTtyZXR1cm4gZ0l0KFsic3ZnIixyLHRdKX19KTt2YXIgeEl0LGJJdCx2SXQseG8xLGpVLHlJdD1uKCgpPT57VzRlKCk7ajRlKCk7eEl0PXQ9PkFycmF5LmZyb20odC5hdHRyaWJ1dGVzKS5yZWR1Y2UoKGUsYSk9PihlW2EubmFtZV09YS52YWx1ZSxlKSx7fSksYkl0PXQ9PnR5cGVvZiB0PT0ic3RyaW5nIj90OiF0fHwhdC5jbGFzcz8iIjp0LmNsYXNzJiZ0eXBlb2YgdC5jbGFzcz09InN0cmluZyI/dC5jbGFzcy5zcGxpdCgiICIpOnQuY2xhc3MmJkFycmF5LmlzQXJyYXkodC5jbGFzcyk/dC5jbGFzczoiIix2SXQ9dD0+dC5mbGF0TWFwKGJJdCkubWFwKGE9PmEudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmlsdGVyKChhLHIsaSk9PmkuaW5kZXhPZihhKT09PXIpLmpvaW4oIiAiKSx4bzE9dD0+dC5yZXBsYWNlKC8oXHcpKFx3KikoX3wtfFxzKikvZywoZSxhLHIpPT5hLnRvVXBwZXJDYXNlKCkrci50b0xvd2VyQ2FzZSgpKSxqVT0odCx7bmFtZUF0dHI6ZSxpY29uczphLGF0dHJzOnJ9KT0+e2xldCBpPXQuZ2V0QXR0cmlidXRlKGUpO2lmKGk9PW51bGwpcmV0dXJuO2xldCBvPXhvMShpKSxzPWFbb107aWYoIXMpcmV0dXJuIGNvbnNvbGUud2FybihgJHt0Lm91dGVySFRNTH0gaWNvbiBuYW1lIHdhcyBub3QgZm91bmQgaW4gdGhlIHByb3ZpZGVkIGljb25zIG9iamVjdC5gKTtsZXQgbD14SXQodCksZj17Li4uRTcsImRhdGEtbHVjaWRlIjppLC4uLnIsLi4ubH0sYz12SXQoWyJsdWNpZGUiLGBsdWNpZGUtJHtpfWAsbCxyXSk7YyYmT2JqZWN0LmFzc2lnbihmLHtjbGFzczpjfSk7bGV0IHU9b3MocyxmKTtyZXR1cm4gdC5wYXJlbnROb2RlPy5yZXBsYWNlQ2hpbGQodSx0KX19KTt2YXIgTjcsRzRlPW4oKCk9PntONz1bWyJwYXRoIix7ZDoibTE0IDEyIDQgNCA0LTQifV0sWyJwYXRoIix7ZDoiTTE4IDE2VjcifV0sWyJwYXRoIix7ZDoibTIgMTYgNC4wMzktOS42OWEuNS41IDAgMCAxIC45MjMgMEwxMSAxNiJ9XSxbInBhdGgiLHtkOiJNMy4zMDQgMTNoNi4zOTIifV1dfSk7dmFyIFA3LFk0ZT1uKCgpPT57UDc9W1sicGF0aCIse2Q6Im0xNCAxMSA0LTQgNCA0In1dLFsicGF0aCIse2Q6Ik0xOCAxNlY3In1dLFsicGF0aCIse2Q6Im0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYifV0sWyJwYXRoIix7ZDoiTTMuMzA0IDEzaDYuMzkyIn1dXX0pO3ZhciBJNyxaNGU9bigoKT0+e0k3PVtbInBhdGgiLHtkOiJtMTUgMTYgMi41MzYtNy4zMjhhMS4wMiAxLjAyIDEgMCAxIDEuOTI4IDBMMjIgMTYifV0sWyJwYXRoIix7ZDoiTTE1LjY5NyAxNGg1LjYwNiJ9XSxbInBhdGgiLHtkOiJtMiAxNiA0LjAzOS05LjY5YS41LjUgMCAwIDEgLjkyMyAwTDExIDE2In1dLFsicGF0aCIse2Q6Ik0zLjMwNCAxM2g2LjM5MiJ9XV19KTt2YXIgRjcsWDRlPW4oKCk9PntGNz1bWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiI0IixyOiIxIn1dLFsicGF0aCIse2Q6Im0xOCAxOSAxLTctNiAxIn1dLFsicGF0aCIse2Q6Im01IDggMy0zIDUuNSAzLTIuMzYgMy41In1dLFsicGF0aCIse2Q6Ik00LjI0IDE0LjVhNSA1IDAgMCAwIDYuODggNiJ9XSxbInBhdGgiLHtkOiJNMTMuNzYgMTcuNWE1IDUgMCAwIDAtNi44OC02In1dXX0pO3ZhciBPNyxRNGU9bigoKT0+e083PVtbInBhdGgiLHtkOiJNMjIgMTJoLTIuNDhhMiAyIDAgMCAwLTEuOTMgMS40NmwtMi4zNSA4LjM2YS4yNS4yNSAwIDAgMS0uNDggMEw5LjI0IDIuMThhLjI1LjI1IDAgMCAwLS40OCAwbC0yLjM1IDguMzZBMiAyIDAgMCAxIDQuNDkgMTJIMiJ9XV19KTt2YXIgQjcsSzRlPW4oKCk9PntCNz1bWyJwYXRoIix7ZDoiTTE4IDE3LjVhMi41IDIuNSAwIDEgMS00IDIuMDNWMTIifV0sWyJwYXRoIix7ZDoiTTYgMTJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjVhMiAyIDAgMCAxLTIgMmgtMiJ9XSxbInBhdGgiLHtkOiJNNiA4aDEyIn1dLFsicGF0aCIse2Q6Ik02LjYgMTUuNTcyQTIgMiAwIDEgMCAxMCAxN3YtNSJ9XV19KTt2YXIgTm4sSjRlPW4oKCk9PntObj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiOCJ9XSxbInBhdGgiLHtkOiJNNSAzIDIgNiJ9XSxbInBhdGgiLHtkOiJtMjIgNi0zLTMifV0sWyJwYXRoIix7ZDoiTTYuMzggMTguNyA0IDIxIn1dLFsicGF0aCIse2Q6Ik0xNy42NCAxOC42NyAyMCAyMSJ9XSxbInBhdGgiLHtkOiJtOSAxMyAyIDIgNC00In1dXX0pO3ZhciBSNyxlM2U9bigoKT0+e1I3PVtbInBhdGgiLHtkOiJNNSAxN0g0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMmgtMSJ9XSxbInBhdGgiLHtkOiJtMTIgMTUgNSA2SDdaIn1dXX0pO3ZhciBQbix0M2U9bigoKT0+e1BuPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEzIixyOiI4In1dLFsicGF0aCIse2Q6Ik01IDMgMiA2In1dLFsicGF0aCIse2Q6Im0yMiA2LTMtMyJ9XSxbInBhdGgiLHtkOiJNNi4zOCAxOC43IDQgMjEifV0sWyJwYXRoIix7ZDoiTTE3LjY0IDE4LjY3IDIwIDIxIn1dLFsicGF0aCIse2Q6Ik05IDEzaDYifV1dfSk7dmFyIEg3LGEzZT1uKCgpPT57SDc9W1sicGF0aCIse2Q6Ik02Ljg3IDYuODdhOCA4IDAgMSAwIDExLjI2IDExLjI2In1dLFsicGF0aCIse2Q6Ik0xOS45IDE0LjI1YTggOCAwIDAgMC05LjE1LTkuMTUifV0sWyJwYXRoIix7ZDoibTIyIDYtMy0zIn1dLFsicGF0aCIse2Q6Ik02LjI2IDE4LjY3IDQgMjEifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNNCA0IDIgNiJ9XV19KTt2YXIgSW4scjNlPW4oKCk9PntJbj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiOCJ9XSxbInBhdGgiLHtkOiJNNSAzIDIgNiJ9XSxbInBhdGgiLHtkOiJtMjIgNi0zLTMifV0sWyJwYXRoIix7ZDoiTTYuMzggMTguNyA0IDIxIn1dLFsicGF0aCIse2Q6Ik0xNy42NCAxOC42NyAyMCAyMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTB2NiJ9XSxbInBhdGgiLHtkOiJNOSAxM2g2In1dXX0pO3ZhciBxNyxpM2U9bigoKT0+e3E3PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEzIixyOiI4In1dLFsicGF0aCIse2Q6Ik0xMiA5djRsMiAyIn1dLFsicGF0aCIse2Q6Ik01IDMgMiA2In1dLFsicGF0aCIse2Q6Im0yMiA2LTMtMyJ9XSxbInBhdGgiLHtkOiJNNi4zOCAxOC43IDQgMjEifV0sWyJwYXRoIix7ZDoiTTE3LjY0IDE4LjY3IDIwIDIxIn1dXX0pO3ZhciBWNyxvM2U9bigoKT0+e1Y3PVtbInBhdGgiLHtkOiJNMTEgMjFjMC0yLjUgMi0yLjUgMi01In1dLFsicGF0aCIse2Q6Ik0xNiAyMWMwLTIuNSAyLTIuNSAyLTUifV0sWyJwYXRoIix7ZDoibTE5IDgtLjggM2ExLjI1IDEuMjUgMCAwIDEtMS4yIDFIN2ExLjI1IDEuMjUgMCAwIDEtMS4yLTFMNSA4In1dLFsicGF0aCIse2Q6Ik0yMSAzYTEgMSAwIDAgMSAxIDF2MmEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY0YTEgMSAwIDAgMSAxLTF6In1dLFsicGF0aCIse2Q6Ik02IDIxYzAtMi41IDItMi41IDItNSJ9XV19KTt2YXIgVTcsczNlPW4oKCk9PntVNz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIscnk6IjIifV0sWyJwb2x5bGluZSIse3BvaW50czoiMTEgMyAxMSAxMSAxNCA4IDE3IDExIDE3IDMifV1dfSk7dmFyIGo3LG4zZT1uKCgpPT57ajc9W1sicGF0aCIse2Q6Ik0yIDEyaDIwIn1dLFsicGF0aCIse2Q6Ik0xMCAxNnY0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi00In1dLFsicGF0aCIse2Q6Ik0xMCA4VjRhMiAyIDAgMCAwLTItMkg2YTIgMiAwIDAgMC0yIDJ2NCJ9XSxbInBhdGgiLHtkOiJNMjAgMTZ2MWEyIDIgMCAwIDEtMiAyaC0yYTIgMiAwIDAgMS0yLTJ2LTEifV0sWyJwYXRoIix7ZDoiTTE0IDhWN2MwLTEuMS45LTIgMi0yaDJhMiAyIDAgMCAxIDIgMnYxIn1dXX0pO3ZhciBXNyxsM2U9bigoKT0+e1c3PVtbInBhdGgiLHtkOiJNMTIgMnYyMCJ9XSxbInBhdGgiLHtkOiJNOCAxMEg0YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDQifV0sWyJwYXRoIix7ZDoiTTE2IDEwaDRhMiAyIDAgMCAwIDItMlY2YTIgMiAwIDAgMC0yLTJoLTQifV0sWyJwYXRoIix7ZDoiTTggMjBIN2EyIDIgMCAwIDEtMi0ydi0yYzAtMS4xLjktMiAyLTJoMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTRoMWEyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAxLTIgMmgtMSJ9XV19KTt2YXIgRzcsYzNlPW4oKCk9PntHNz1bWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTYiLHg6IjQiLHk6IjIiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjkiLHg6IjE0Iix5OiI5IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMjIgMjJIMiJ9XV19KTt2YXIgWTcsZDNlPW4oKCk9PntZNz1bWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjYiLHg6IjIiLHk6IjQiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiI5IixoZWlnaHQ6IjYiLHg6IjkiLHk6IjE0IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMjIgMjJWMiJ9XV19KTt2YXIgWjcsZjNlPW4oKCk9PntaNz1bWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTQiLHg6IjQiLHk6IjUiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjEwIix4OiIxNCIseToiNyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTE3IDIydi01In1dLFsicGF0aCIse2Q6Ik0xNyA3VjIifV0sWyJwYXRoIix7ZDoiTTcgMjJ2LTMifV0sWyJwYXRoIix7ZDoiTTcgNVYyIn1dXX0pO3ZhciBYNyx1M2U9bigoKT0+e1g3PVtbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiIxNCIseDoiNCIseToiNSIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTAiLHg6IjE0Iix5OiI3IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNCAydjIwIn1dLFsicGF0aCIse2Q6Ik0xNCAydjIwIn1dXX0pO3ZhciBRNyxwM2U9bigoKT0+e1E3PVtbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiIxNCIseDoiNCIseToiNSIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTAiLHg6IjE0Iix5OiI3IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTAgMnYyMCJ9XSxbInBhdGgiLHtkOiJNMjAgMnYyMCJ9XV19KTt2YXIgSzcsaDNlPW4oKCk9PntLNz1bWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTQiLHg6IjIiLHk6IjUiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjEwIix4OiIxNiIseToiNyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MjAifV1dfSk7dmFyIEo3LG0zZT1uKCgpPT57Sjc9W1sicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjE0Iix4OiIyIix5OiI1IixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiIxMCIseDoiMTIiLHk6IjciLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yMiAydjIwIn1dXX0pO3ZhciBlZixnM2U9bigoKT0+e2VmPVtbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiIxNCIseDoiNiIseToiNSIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTAiLHg6IjE2Iix5OiI3IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMiAydjIwIn1dXX0pO3ZhciB0Zix4M2U9bigoKT0+e3RmPVtbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiIxMCIseDoiOSIseToiNyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTQgMjJWMiJ9XSxbInBhdGgiLHtkOiJNMjAgMjJWMiJ9XV19KTt2YXIgYWYsYjNlPW4oKCk9PnthZj1bWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTQiLHg6IjMiLHk6IjUiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjEwIix4OiIxNSIseToiNyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgMnYyMCJ9XSxbInBhdGgiLHtkOiJNMjEgMnYyMCJ9XV19KTt2YXIgcmYsdjNlPW4oKCk9PntyZj1bWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTYiLHg6IjQiLHk6IjYiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjkiLHg6IjE0Iix5OiI2IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMjIgMkgyIn1dXX0pO3ZhciBvZix5M2U9bigoKT0+e29mPVtbInJlY3QiLHt3aWR0aDoiOSIsaGVpZ2h0OiI2Iix4OiI2Iix5OiIxNCIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjYiLHg6IjYiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yIDJ2MjAifV1dfSk7dmFyIHNmLHczZT1uKCgpPT57c2Y9W1sicGF0aCIse2Q6Ik0yMiAxN2gtMyJ9XSxbInBhdGgiLHtkOiJNMjIgN2gtNSJ9XSxbInBhdGgiLHtkOiJNNSAxN0gyIn1dLFsicGF0aCIse2Q6Ik03IDdIMiJ9XSxbInJlY3QiLHt4OiI1Iix5OiIxNCIsd2lkdGg6IjE0IixoZWlnaHQ6IjYiLHJ4OiIyIn1dLFsicmVjdCIse3g6IjciLHk6IjQiLHdpZHRoOiIxMCIsaGVpZ2h0OiI2IixyeDoiMiJ9XV19KTt2YXIgbmYsTTNlPW4oKCk9PntuZj1bWyJyZWN0Iix7d2lkdGg6IjE0IixoZWlnaHQ6IjYiLHg6IjUiLHk6IjE0IixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiMTAiLGhlaWdodDoiNiIseDoiNyIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTIgMjBoMjAifV0sWyJwYXRoIix7ZDoiTTIgMTBoMjAifV1dfSk7dmFyIGxmLHozZT1uKCgpPT57bGY9W1sicmVjdCIse3dpZHRoOiIxNCIsaGVpZ2h0OiI2Iix4OiI1Iix5OiIxNCIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjEwIixoZWlnaHQ6IjYiLHg6IjciLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yIDE0aDIwIn1dLFsicGF0aCIse2Q6Ik0yIDRoMjAifV1dfSk7dmFyIGNmLGszZT1uKCgpPT57Y2Y9W1sicmVjdCIse3dpZHRoOiIxNCIsaGVpZ2h0OiI2Iix4OiI1Iix5OiIxNiIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjEwIixoZWlnaHQ6IjYiLHg6IjciLHk6IjIiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIn1dXX0pO3ZhciBkZixTM2U9bigoKT0+e2RmPVtbInJlY3QiLHt3aWR0aDoiMTQiLGhlaWdodDoiNiIseDoiNSIseToiMTIiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiIxMCIsaGVpZ2h0OiI2Iix4OiI3Iix5OiIyIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMiAyMmgyMCJ9XV19KTt2YXIgZmYsQzNlPW4oKCk9PntmZj1bWyJyZWN0Iix7d2lkdGg6IjE0IixoZWlnaHQ6IjYiLHg6IjUiLHk6IjE2IixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiMTAiLGhlaWdodDoiNiIseDoiNyIseToiNiIscng6IjIifV0sWyJwYXRoIix7ZDoiTTIgMmgyMCJ9XV19KTt2YXIgdWYsTDNlPW4oKCk9Pnt1Zj1bWyJyZWN0Iix7d2lkdGg6IjEwIixoZWlnaHQ6IjYiLHg6IjciLHk6IjkiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yMiAyMEgyIn1dLFsicGF0aCIse2Q6Ik0yMiA0SDIifV1dfSk7dmFyIHBmLFQzZT1uKCgpPT57cGY9W1sicmVjdCIse3dpZHRoOiIxNCIsaGVpZ2h0OiI2Iix4OiI1Iix5OiIxNSIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjEwIixoZWlnaHQ6IjYiLHg6IjciLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yIDIxaDIwIn1dLFsicGF0aCIse2Q6Ik0yIDNoMjAifV1dfSk7dmFyIGhmLF8zZT1uKCgpPT57aGY9W1sicGF0aCIse2Q6Ik0xMCAxMEg2In1dLFsicGF0aCIse2Q6Ik0xNCAxOFY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjExYTEgMSAwIDAgMCAxIDFoMiJ9XSxbInBhdGgiLHtkOiJNMTkgMThoMmExIDEgMCAwIDAgMS0xdi0zLjI4YTEgMSAwIDAgMC0uNjg0LS45NDhsLTEuOTIzLS42NDFhMSAxIDAgMCAxLS41NzgtLjUwMmwtMS41MzktMy4wNzZBMSAxIDAgMCAwIDE2LjM4MiA4SDE0In1dLFsicGF0aCIse2Q6Ik04IDh2NCJ9XSxbInBhdGgiLHtkOiJNOSAxOGg2In1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTgiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiNyIsY3k6IjE4IixyOiIyIn1dXX0pO3ZhciBtZixBM2U9bigoKT0+e21mPVtbInBhdGgiLHtkOiJNMTYgMTJoMyJ9XSxbInBhdGgiLHtkOiJNMTcuNSAxMmE4IDggMCAwIDEtOCA4QTQuNSA0LjUgMCAwIDEgNSAxNS41YzAtNiA4LTQgOC04LjVhMyAzIDAgMSAwLTYgMGMwIDMgMi41IDguNSAxMiAxMyJ9XV19KTt2YXIgZ2YsJDNlPW4oKCk9PntnZj1bWyJwYXRoIix7ZDoiTTEwIDE3Yy01LTMtNy03LTctOWEyIDIgMCAwIDEgNCAwYzAgMi41LTUgMi41LTUgNiAwIDEuNyAxLjMgMyAzIDMgMi44IDAgNS0yLjIgNS01In1dLFsicGF0aCIse2Q6Ik0yMiAxN2MtNS0zLTctNy03LTlhMiAyIDAgMCAxIDQgMGMwIDIuNS01IDIuNS01IDYgMCAxLjcgMS4zIDMgMyAzIDIuOCAwIDUtMi4yIDUtNSJ9XV19KTt2YXIgeGYsRDNlPW4oKCk9Pnt4Zj1bWyJwYXRoIix7ZDoiTTEwIDJ2NS42MzJjMCAuNDI0LS4yNzIuNzk1LS42NTMuOTgyQTYgNiAwIDAgMCA2IDE0Yy4wMDYgNCAzIDcgNSA4In1dLFsicGF0aCIse2Q6Ik0xMCA1SDhhMiAyIDAgMCAwIDAgNGguNjgifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NS42MzJjMCAuNDI0LjI3Mi43OTUuNjUyLjk4MkE2IDYgMCAwIDEgMTggMTRjMCA0LTMgNy01IDgifV0sWyJwYXRoIix7ZDoiTTE0IDVoMmEyIDIgMCAwIDEgMCA0aC0uNjgifV0sWyJwYXRoIix7ZDoiTTE4IDIySDYifV0sWyJwYXRoIix7ZDoiTTkgMmg2In1dXX0pO3ZhciBiZixFM2U9bigoKT0+e2JmPVtbInBhdGgiLHtkOiJNMTIgNnYxNiJ9XSxbInBhdGgiLHtkOiJtMTkgMTMgMi0xYTkgOSAwIDAgMS0xOCAwbDIgMSJ9XSxbInBhdGgiLHtkOiJNOSAxMWg2In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiNCIscjoiMiJ9XV19KTt2YXIgdmYsTjNlPW4oKCk9Pnt2Zj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTE2IDE2cy0xLjUtMi00LTItNCAyLTQgMiJ9XSxbInBhdGgiLHtkOiJNNy41IDggMTAgOSJ9XSxbInBhdGgiLHtkOiJtMTQgOSAyLjUtMSJ9XSxbInBhdGgiLHtkOiJNOSAxMGguMDEifV0sWyJwYXRoIix7ZDoiTTE1IDEwaC4wMSJ9XV19KTt2YXIgeWYsUDNlPW4oKCk9Pnt5Zj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTggMTVoOCJ9XSxbInBhdGgiLHtkOiJNOCA5aDIifV0sWyJwYXRoIix7ZDoiTTE0IDloMiJ9XV19KTt2YXIgd2YsSTNlPW4oKCk9Pnt3Zj1bWyJwYXRoIix7ZDoiTTIgMTIgNyAyIn1dLFsicGF0aCIse2Q6Im03IDEyIDUtMTAifV0sWyJwYXRoIix7ZDoibTEyIDEyIDUtMTAifV0sWyJwYXRoIix7ZDoibTE3IDEyIDUtMTAifV0sWyJwYXRoIix7ZDoiTTQuNSA3aDE1In1dLFsicGF0aCIse2Q6Ik0xMiAxNnY2In1dXX0pO3ZhciBNZixGM2U9bigoKT0+e01mPVtbInBhdGgiLHtkOiJNNyAxMEg2YTQgNCAwIDAgMS00LTQgMSAxIDAgMCAxIDEtMWg0In1dLFsicGF0aCIse2Q6Ik03IDVhMSAxIDAgMCAxIDEtMWgxM2ExIDEgMCAwIDEgMSAxIDcgNyAwIDAgMS03IDdIOGExIDEgMCAwIDEtMS0xeiJ9XSxbInBhdGgiLHtkOiJNOSAxMnY1In1dLFsicGF0aCIse2Q6Ik0xNSAxMnY1In1dLFsicGF0aCIse2Q6Ik01IDIwYTMgMyAwIDAgMSAzLTNoOGEzIDMgMCAwIDEgMyAzIDEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xIn1dXX0pO3ZhciB6ZixPM2U9bigoKT0+e3pmPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJtMTQuMzEgOCA1Ljc0IDkuOTQifV0sWyJwYXRoIix7ZDoiTTkuNjkgOGgxMS40OCJ9XSxbInBhdGgiLHtkOiJtNy4zOCAxMiA1Ljc0LTkuOTQifV0sWyJwYXRoIix7ZDoiTTkuNjkgMTYgMy45NSA2LjA2In1dLFsicGF0aCIse2Q6Ik0xNC4zMSAxNkgyLjgzIn1dLFsicGF0aCIse2Q6Im0xNi42MiAxMi01Ljc0IDkuOTQifV1dfSk7dmFyIGtmLEIzZT1uKCgpPT57a2Y9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNiIseDoiMiIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTYgOGguMDEifV0sWyJwYXRoIix7ZDoiTTEwIDhoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNCA4aC4wMSJ9XV19KTt2YXIgU2YsUjNlPW4oKCk9PntTZj1bWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTAgNHY0In1dLFsicGF0aCIse2Q6Ik0yIDhoMjAifV0sWyJwYXRoIix7ZDoiTTYgNHY0In1dXX0pO3ZhciBDZixIM2U9bigoKT0+e0NmPVtbInBhdGgiLHtkOiJNMTIgNi41MjhWM2ExIDEgMCAwIDEgMS0xaDAifV0sWyJwYXRoIix7ZDoiTTE4LjIzNyAyMUExNSAxNSAwIDAgMCAyMiAxMWE2IDYgMCAwIDAtMTAtNC40NzJBNiA2IDAgMCAwIDIgMTFhMTUuMSAxNS4xIDAgMCAwIDMuNzYzIDEwIDMgMyAwIDAgMCAzLjY0OC42NDggNS41IDUuNSAwIDAgMSA1LjE3OCAwQTMgMyAwIDAgMCAxOC4yMzcgMjEifV1dfSk7dmFyIExmLHEzZT1uKCgpPT57TGY9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI1Iix4OiIyIix5OiIzIixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNNCA4djExYTIgMiAwIDAgMCAyIDJoMiJ9XSxbInBhdGgiLHtkOiJNMjAgOHYxMWEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Im05IDE1IDMtMyAzIDMifV0sWyJwYXRoIix7ZDoiTTEyIDEydjkifV1dfSk7dmFyIFRmLFYzZT1uKCgpPT57VGY9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI1Iix4OiIyIix5OiIzIixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNNCA4djExYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4In1dLFsicGF0aCIse2Q6Im05LjUgMTcgNS01In1dLFsicGF0aCIse2Q6Im05LjUgMTIgNSA1In1dXX0pO3ZhciBfZixVM2U9bigoKT0+e19mPVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiNSIseDoiMiIseToiMyIscng6IjEifV0sWyJwYXRoIix7ZDoiTTQgOHYxMWEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOCJ9XSxbInBhdGgiLHtkOiJNMTAgMTJoNCJ9XV19KTt2YXIgQWYsajNlPW4oKCk9PntBZj1bWyJwYXRoIix7ZDoiTTE5IDlWNmEyIDIgMCAwIDAtMi0ySDdhMiAyIDAgMCAwLTIgMnYzIn1dLFsicGF0aCIse2Q6Ik0zIDE2YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNWEyIDIgMCAwIDAtNCAwdjEuNWEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDAgMS0uNS0uNVYxMWEyIDIgMCAwIDAtNCAweiJ9XSxbInBhdGgiLHtkOiJNNSAxOHYyIn1dLFsicGF0aCIse2Q6Ik0xOSAxOHYyIn1dXX0pO3ZhciAkZixXM2U9bigoKT0+eyRmPVtbInBhdGgiLHtkOiJNMTUgMTFhMSAxIDAgMCAwIDEgMWgyLjkzOWExIDEgMCAwIDEgLjc1IDEuODExbC02LjgzNSA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMS0xLjcwNyAwTDQuMzEgMTMuODFhMSAxIDAgMCAxIC43NS0xLjgxMUg4YTEgMSAwIDAgMCAxLTFWOWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXoifV0sWyJwYXRoIix7ZDoiTTkgNGg2In1dXX0pO3ZhciBEZixHM2U9bigoKT0+e0RmPVtbInBhdGgiLHtkOiJNMTUgMTFhMSAxIDAgMCAwIDEgMWgyLjkzOWExIDEgMCAwIDEgLjc1IDEuODExbC02LjgzNSA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMS0xLjcwNyAwTDQuMzEgMTMuODFhMSAxIDAgMCAxIC43NS0xLjgxMUg4YTEgMSAwIDAgMCAxLTFWNWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXoifV1dfSk7dmFyIEVmLFkzZT1uKCgpPT57RWY9W1sicGF0aCIse2Q6Ik0xMyA5YTEgMSAwIDAgMS0xLTFWNS4wNjFhMSAxIDAgMCAwLTEuODExLS43NWwtNi44MzUgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDAgMCAxLjcwN2w2LjgzNSA2LjgzNWExIDEgMCAwIDAgMS44MTEtLjc1VjE2YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDAgMS0xdi00YTEgMSAwIDAgMC0xLTF6In1dLFsicGF0aCIse2Q6Ik0yMCA5djYifV1dfSk7dmFyIE5mLFozZT1uKCgpPT57TmY9W1sicGF0aCIse2Q6Ik0xMyA5YTEgMSAwIDAgMS0xLTFWNS4wNjFhMSAxIDAgMCAwLTEuODExLS43NWwtNi44MzUgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDAgMCAxLjcwN2w2LjgzNSA2LjgzNWExIDEgMCAwIDAgMS44MTEtLjc1VjE2YTEgMSAwIDAgMSAxLTFoNmExIDEgMCAwIDAgMS0xdi00YTEgMSAwIDAgMC0xLTF6In1dXX0pO3ZhciBQZixYM2U9bigoKT0+e1BmPVtbInBhdGgiLHtkOiJNMTEgOWExIDEgMCAwIDAgMS0xVjUuMDYxYTEgMSAwIDAgMSAxLjgxMS0uNzVsNi44MzYgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwN2wtNi44MzYgNi44MzVhMSAxIDAgMCAxLTEuODExLS43NVYxNmExIDEgMCAwIDAtMS0xSDlhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xeiJ9XSxbInBhdGgiLHtkOiJNNCA5djYifV1dfSk7dmFyIElmLFEzZT1uKCgpPT57SWY9W1sicGF0aCIse2Q6Ik0xMSA5YTEgMSAwIDAgMCAxLTFWNS4wNjFhMSAxIDAgMCAxIDEuODExLS43NWw2LjgzNiA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMSAwIDEuNzA3bC02LjgzNiA2LjgzNWExIDEgMCAwIDEtMS44MTEtLjc1VjE2YTEgMSAwIDAgMC0xLTFINWExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTF6In1dXX0pO3ZhciBGZixLM2U9bigoKT0+e0ZmPVtbInBhdGgiLHtkOiJNOSAxM2ExIDEgMCAwIDAtMS0xSDUuMDYxYTEgMSAwIDAgMS0uNzUtMS44MTFsNi44MzYtNi44MzVhMS4yMDcgMS4yMDcgMCAwIDEgMS43MDcgMGw2LjgzNSA2LjgzNWExIDEgMCAwIDEtLjc1IDEuODExSDE2YTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDEtMSAxaC00YTEgMSAwIDAgMS0xLTF6In1dLFsicGF0aCIse2Q6Ik05IDIwaDYifV1dfSk7dmFyIE9mLEozZT1uKCgpPT57T2Y9W1sicGF0aCIse2Q6Ik05IDEzYTEgMSAwIDAgMC0xLTFINS4wNjFhMSAxIDAgMCAxLS43NS0xLjgxMWw2LjgzNi02LjgzNWExLjIwNyAxLjIwNyAwIDAgMSAxLjcwNyAwbDYuODM1IDYuODM1YTEgMSAwIDAgMS0uNzUgMS44MTFIMTZhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMS0xIDFoLTRhMSAxIDAgMCAxLTEtMXoifV1dfSk7dmFyIEJmLGVsZT1uKCgpPT57QmY9W1sicGF0aCIse2Q6Im0zIDE2IDQgNCA0LTQifV0sWyJwYXRoIix7ZDoiTTcgMjBWNCJ9XSxbInJlY3QiLHt4OiIxNSIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiNiIscnk6IjIifV0sWyJwYXRoIix7ZDoiTTE3IDIwdi02aC0yIn1dLFsicGF0aCIse2Q6Ik0xNSAyMGg0In1dXX0pO3ZhciBSZix0bGU9bigoKT0+e1JmPVtbInBhdGgiLHtkOiJtMyAxNiA0IDQgNC00In1dLFsicGF0aCIse2Q6Ik03IDIwVjQifV0sWyJwYXRoIix7ZDoiTTE3IDEwVjRoLTIifV0sWyJwYXRoIix7ZDoiTTE1IDEwaDQifV0sWyJyZWN0Iix7eDoiMTUiLHk6IjE0Iix3aWR0aDoiNCIsaGVpZ2h0OiI2IixyeToiMiJ9XV19KTt2YXIgRm4sYWxlPW4oKCk9PntGbj1bWyJwYXRoIix7ZDoibTMgMTYgNCA0IDQtNCJ9XSxbInBhdGgiLHtkOiJNNyAyMFY0In1dLFsicGF0aCIse2Q6Ik0yMCA4aC01In1dLFsicGF0aCIse2Q6Ik0xNSAxMFY2LjVhMi41IDIuNSAwIDAgMSA1IDBWMTAifV0sWyJwYXRoIix7ZDoiTTE1IDE0aDVsLTUgNmg1In1dXX0pO3ZhciBIZixybGU9bigoKT0+e0hmPVtbInBhdGgiLHtkOiJNMTkgM0g1In1dLFsicGF0aCIse2Q6Ik0xMiAyMVY3In1dLFsicGF0aCIse2Q6Im02IDE1IDYgNiA2LTYifV1dfSk7dmFyIHFmLGlsZT1uKCgpPT57cWY9W1sicGF0aCIse2Q6Ik0xNyA3IDcgMTcifV0sWyJwYXRoIix7ZDoiTTE3IDE3SDdWNyJ9XV19KTt2YXIgVmYsb2xlPW4oKCk9PntWZj1bWyJwYXRoIix7ZDoibTcgNyAxMCAxMCJ9XSxbInBhdGgiLHtkOiJNMTcgN3YxMEg3In1dXX0pO3ZhciBVZixzbGU9bigoKT0+e1VmPVtbInBhdGgiLHtkOiJNMTIgMnYxNCJ9XSxbInBhdGgiLHtkOiJtMTkgOS03IDctNy03In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMjEiLHI6IjEifV1dfSk7dmFyIGpmLG5sZT1uKCgpPT57amY9W1sicGF0aCIse2Q6Im0zIDE2IDQgNCA0LTQifV0sWyJwYXRoIix7ZDoiTTcgMjBWNCJ9XSxbInBhdGgiLHtkOiJNMTEgNGg0In1dLFsicGF0aCIse2Q6Ik0xMSA4aDcifV0sWyJwYXRoIix7ZDoiTTExIDEyaDEwIn1dXX0pO3ZhciBXZixsbGU9bigoKT0+e1dmPVtbInBhdGgiLHtkOiJNMTIgMTdWMyJ9XSxbInBhdGgiLHtkOiJtNiAxMSA2IDYgNi02In1dLFsicGF0aCIse2Q6Ik0xOSAyMUg1In1dXX0pO3ZhciBHZixjbGU9bigoKT0+e0dmPVtbInBhdGgiLHtkOiJtMyAxNiA0IDQgNC00In1dLFsicGF0aCIse2Q6Ik03IDIwVjQifV0sWyJwYXRoIix7ZDoibTIxIDgtNC00LTQgNCJ9XSxbInBhdGgiLHtkOiJNMTcgNHYxNiJ9XV19KTt2YXIgT24sZGxlPW4oKCk9PntPbj1bWyJwYXRoIix7ZDoibTMgMTYgNCA0IDQtNCJ9XSxbInBhdGgiLHtkOiJNNyAyMFY0In1dLFsicGF0aCIse2Q6Ik0xMSA0aDEwIn1dLFsicGF0aCIse2Q6Ik0xMSA4aDcifV0sWyJwYXRoIix7ZDoiTTExIDEyaDQifV1dfSk7dmFyIEJuLGZsZT1uKCgpPT57Qm49W1sicGF0aCIse2Q6Im0zIDE2IDQgNCA0LTQifV0sWyJwYXRoIix7ZDoiTTcgNHYxNiJ9XSxbInBhdGgiLHtkOiJNMTUgNGg1bC01IDZoNSJ9XSxbInBhdGgiLHtkOiJNMTUgMjB2LTMuNWEyLjUgMi41IDAgMCAxIDUgMFYyMCJ9XSxbInBhdGgiLHtkOiJNMjAgMThoLTUifV1dfSk7dmFyIFlmLHVsZT1uKCgpPT57WWY9W1sicGF0aCIse2Q6Ik0xMiA1djE0In1dLFsicGF0aCIse2Q6Im0xOSAxMi03IDctNy03In1dXX0pO3ZhciBaZixwbGU9bigoKT0+e1pmPVtbInBhdGgiLHtkOiJNOCAzIDQgN2w0IDQifV0sWyJwYXRoIix7ZDoiTTQgN2gxNiJ9XSxbInBhdGgiLHtkOiJtMTYgMjEgNC00LTQtNCJ9XSxbInBhdGgiLHtkOiJNMjAgMTdINCJ9XV19KTt2YXIgWGYsaGxlPW4oKCk9PntYZj1bWyJwYXRoIix7ZDoibTkgNi02IDYgNiA2In1dLFsicGF0aCIse2Q6Ik0zIDEyaDE0In1dLFsicGF0aCIse2Q6Ik0yMSAxOVY1In1dXX0pO3ZhciBRZixtbGU9bigoKT0+e1FmPVtbInBhdGgiLHtkOiJNMyAxOVY1In1dLFsicGF0aCIse2Q6Im0xMyA2LTYgNiA2IDYifV0sWyJwYXRoIix7ZDoiTTcgMTJoMTQifV1dfSk7dmFyIEtmLGdsZT1uKCgpPT57S2Y9W1sicGF0aCIse2Q6Im0xMiAxOS03LTcgNy03In1dLFsicGF0aCIse2Q6Ik0xOSAxMkg1In1dXX0pO3ZhciBKZix4bGU9bigoKT0+e0pmPVtbInBhdGgiLHtkOiJNMyA1djE0In1dLFsicGF0aCIse2Q6Ik0yMSAxMkg3In1dLFsicGF0aCIse2Q6Im0xNSAxOCA2LTYtNi02In1dXX0pO3ZhciBldSxibGU9bigoKT0+e2V1PVtbInBhdGgiLHtkOiJtMTYgMyA0IDQtNCA0In1dLFsicGF0aCIse2Q6Ik0yMCA3SDQifV0sWyJwYXRoIix7ZDoibTggMjEtNC00IDQtNCJ9XSxbInBhdGgiLHtkOiJNNCAxN2gxNiJ9XV19KTt2YXIgdHUsdmxlPW4oKCk9Pnt0dT1bWyJwYXRoIix7ZDoiTTE3IDEySDMifV0sWyJwYXRoIix7ZDoibTExIDE4IDYtNi02LTYifV0sWyJwYXRoIix7ZDoiTTIxIDV2MTQifV1dfSk7dmFyIGF1LHlsZT1uKCgpPT57YXU9W1sicGF0aCIse2Q6Ik01IDEyaDE0In1dLFsicGF0aCIse2Q6Im0xMiA1IDcgNy03IDcifV1dfSk7dmFyIHJ1LHdsZT1uKCgpPT57cnU9W1sicGF0aCIse2Q6Im0zIDggNC00IDQgNCJ9XSxbInBhdGgiLHtkOiJNNyA0djE2In1dLFsicmVjdCIse3g6IjE1Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiI2IixyeToiMiJ9XSxbInBhdGgiLHtkOiJNMTcgMjB2LTZoLTIifV0sWyJwYXRoIix7ZDoiTTE1IDIwaDQifV1dfSk7dmFyIGl1LE1sZT1uKCgpPT57aXU9W1sicGF0aCIse2Q6Im0zIDggNC00IDQgNCJ9XSxbInBhdGgiLHtkOiJNNyA0djE2In1dLFsicGF0aCIse2Q6Ik0xNyAxMFY0aC0yIn1dLFsicGF0aCIse2Q6Ik0xNSAxMGg0In1dLFsicmVjdCIse3g6IjE1Iix5OiIxNCIsd2lkdGg6IjQiLGhlaWdodDoiNiIscnk6IjIifV1dfSk7dmFyIFJuLHpsZT1uKCgpPT57Um49W1sicGF0aCIse2Q6Im0zIDggNC00IDQgNCJ9XSxbInBhdGgiLHtkOiJNNyA0djE2In1dLFsicGF0aCIse2Q6Ik0yMCA4aC01In1dLFsicGF0aCIse2Q6Ik0xNSAxMFY2LjVhMi41IDIuNSAwIDAgMSA1IDBWMTAifV0sWyJwYXRoIix7ZDoiTTE1IDE0aDVsLTUgNmg1In1dXX0pO3ZhciBvdSxrbGU9bigoKT0+e291PVtbInBhdGgiLHtkOiJtMjEgMTYtNCA0LTQtNCJ9XSxbInBhdGgiLHtkOiJNMTcgMjBWNCJ9XSxbInBhdGgiLHtkOiJtMyA4IDQtNCA0IDQifV0sWyJwYXRoIix7ZDoiTTcgNHYxNiJ9XV19KTt2YXIgc3UsU2xlPW4oKCk9PntzdT1bWyJwYXRoIix7ZDoibTUgOSA3LTcgNyA3In1dLFsicGF0aCIse2Q6Ik0xMiAxNlYyIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMjEiLHI6IjEifV1dfSk7dmFyIG51LENsZT1uKCgpPT57bnU9W1sicGF0aCIse2Q6Im0xOCA5LTYtNi02IDYifV0sWyJwYXRoIix7ZDoiTTEyIDN2MTQifV0sWyJwYXRoIix7ZDoiTTUgMjFoMTQifV1dfSk7dmFyIGx1LExsZT1uKCgpPT57bHU9W1sicGF0aCIse2Q6Ik03IDE3VjdoMTAifV0sWyJwYXRoIix7ZDoiTTE3IDE3IDcgNyJ9XV19KTt2YXIgSG4sVGxlPW4oKCk9PntIbj1bWyJwYXRoIix7ZDoibTMgOCA0LTQgNCA0In1dLFsicGF0aCIse2Q6Ik03IDR2MTYifV0sWyJwYXRoIix7ZDoiTTExIDEyaDQifV0sWyJwYXRoIix7ZDoiTTExIDE2aDcifV0sWyJwYXRoIix7ZDoiTTExIDIwaDEwIn1dXX0pO3ZhciBjdSxfbGU9bigoKT0+e2N1PVtbInBhdGgiLHtkOiJNNyA3aDEwdjEwIn1dLFsicGF0aCIse2Q6Ik03IDE3IDE3IDcifV1dfSk7dmFyIGR1LEFsZT1uKCgpPT57ZHU9W1sicGF0aCIse2Q6Ik01IDNoMTQifV0sWyJwYXRoIix7ZDoibTE4IDEzLTYtNi02IDYifV0sWyJwYXRoIix7ZDoiTTEyIDd2MTQifV1dfSk7dmFyIGZ1LCRsZT1uKCgpPT57ZnU9W1sicGF0aCIse2Q6Im0zIDggNC00IDQgNCJ9XSxbInBhdGgiLHtkOiJNNyA0djE2In1dLFsicGF0aCIse2Q6Ik0xMSAxMmgxMCJ9XSxbInBhdGgiLHtkOiJNMTEgMTZoNyJ9XSxbInBhdGgiLHtkOiJNMTEgMjBoNCJ9XV19KTt2YXIgcW4sRGxlPW4oKCk9Pntxbj1bWyJwYXRoIix7ZDoibTMgOCA0LTQgNCA0In1dLFsicGF0aCIse2Q6Ik03IDR2MTYifV0sWyJwYXRoIix7ZDoiTTE1IDRoNWwtNSA2aDUifV0sWyJwYXRoIix7ZDoiTTE1IDIwdi0zLjVhMi41IDIuNSAwIDAgMSA1IDBWMjAifV0sWyJwYXRoIix7ZDoiTTIwIDE4aC01In1dXX0pO3ZhciB1dSxFbGU9bigoKT0+e3V1PVtbInBhdGgiLHtkOiJtNSAxMiA3LTcgNyA3In1dLFsicGF0aCIse2Q6Ik0xMiAxOVY1In1dXX0pO3ZhciBwdSxObGU9bigoKT0+e3B1PVtbInBhdGgiLHtkOiJtNCA2IDMtMyAzIDMifV0sWyJwYXRoIix7ZDoiTTcgMTdWMyJ9XSxbInBhdGgiLHtkOiJtMTQgNiAzLTMgMyAzIn1dLFsicGF0aCIse2Q6Ik0xNyAxN1YzIn1dLFsicGF0aCIse2Q6Ik00IDIxaDE2In1dXX0pO3ZhciBodSxQbGU9bigoKT0+e2h1PVtbInBhdGgiLHtkOiJNMTIgNnYxMiJ9XSxbInBhdGgiLHtkOiJNMTcuMTk2IDkgNi44MDQgMTUifV0sWyJwYXRoIix7ZDoibTYuODA0IDkgMTAuMzkyIDYifV1dfSk7dmFyIG11LElsZT1uKCgpPT57bXU9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjQifV0sWyJwYXRoIix7ZDoiTTE2IDh2NWEzIDMgMCAwIDAgNiAwdi0xYTEwIDEwIDAgMSAwLTQgOCJ9XV19KTt2YXIgZ3UsRmxlPW4oKCk9PntndT1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMSJ9XSxbInBhdGgiLHtkOiJNMjAuMiAyMC4yYzIuMDQtMi4wMy4wMi03LjM2LTQuNS0xMS45LTQuNTQtNC41Mi05Ljg3LTYuNTQtMTEuOS00LjUtMi4wNCAyLjAzLS4wMiA3LjM2IDQuNSAxMS45IDQuNTQgNC41MiA5Ljg3IDYuNTQgMTEuOSA0LjVaIn1dLFsicGF0aCIse2Q6Ik0xNS43IDE1LjdjNC41Mi00LjU0IDYuNTQtOS44NyA0LjUtMTEuOS0yLjAzLTIuMDQtNy4zNi0uMDItMTEuOSA0LjUtNC41MiA0LjU0LTYuNTQgOS44Ny00LjUgMTEuOSAyLjAzIDIuMDQgNy4zNi4wMiAxMS45LTQuNVoifV1dfSk7dmFyIHh1LE9sZT1uKCgpPT57eHU9W1sicGF0aCIse2Q6Ik0yIDEwdjMifV0sWyJwYXRoIix7ZDoiTTYgNnYxMSJ9XSxbInBhdGgiLHtkOiJNMTAgM3YxOCJ9XSxbInBhdGgiLHtkOiJNMTQgOHY3In1dLFsicGF0aCIse2Q6Ik0xOCA1djEzIn1dLFsicGF0aCIse2Q6Ik0yMiAxMHYzIn1dXX0pO3ZhciBidSxCbGU9bigoKT0+e2J1PVtbInBhdGgiLHtkOiJtMTUuNDc3IDEyLjg5IDEuNTE1IDguNTI2YS41LjUgMCAwIDEtLjgxLjQ3bC0zLjU4LTIuNjg3YTEgMSAwIDAgMC0xLjE5NyAwbC0zLjU4NiAyLjY4NmEuNS41IDAgMCAxLS44MS0uNDY5bDEuNTE0LTguNTI2In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiOCIscjoiNiJ9XV19KTt2YXIgdnUsUmxlPW4oKCk9Pnt2dT1bWyJwYXRoIix7ZDoiTTIgMTNhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMSA0IDB2MTNhMiAyIDAgMCAwIDQgMFY0YTIgMiAwIDAgMSA0IDB2MTNhMiAyIDAgMCAwIDQgMHYtNGEyIDIgMCAwIDEgMi0yIn1dXX0pO3ZhciB5dSxIbGU9bigoKT0+e3l1PVtbInBhdGgiLHtkOiJtMTQgMTItOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM0wxMSA5In1dLFsicGF0aCIse2Q6Ik0xNSAxNS41YS41LjUgMCAwIDAgLjUuNUE2LjUgNi41IDAgMCAwIDIyIDkuNWEuNS41IDAgMCAwLS41LS41aC0xLjY3MmEyIDIgMCAwIDEtMS40MTQtLjU4NmwtNS4wNjItNS4wNjJhMS4yMDUgMS4yMDUgMCAwIDAtMS43MDQgMEw5LjM1MiA1LjY0OGExLjIwNSAxLjIwNSAwIDAgMCAwIDEuNzA0bDUuMDYyIDUuMDYyQTIgMiAwIDAgMSAxNSAxMy44Mjh6In1dXX0pO3ZhciBWbixxbGU9bigoKT0+e1ZuPVtbInBhdGgiLHtkOiJNMTMuNSAxMC41IDE1IDkifV0sWyJwYXRoIix7ZDoiTTQgNHYxNWExIDEgMCAwIDAgMSAxaDE1In1dLFsicGF0aCIse2Q6Ik00LjI5MyAxOS43MDcgNiAxOCJ9XSxbInBhdGgiLHtkOiJtOSAxNSAxLjUtMS41In1dXX0pO3ZhciB3dSxWbGU9bigoKT0+e3d1PVtbInBhdGgiLHtkOiJNMTAgMTZjLjUuMyAxLjIuNSAyIC41czEuNS0uMiAyLS41In1dLFsicGF0aCIse2Q6Ik0xNSAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTE5LjM4IDYuODEzQTkgOSAwIDAgMSAyMC44IDEwLjJhMiAyIDAgMCAxIDAgMy42IDkgOSAwIDAgMS0xNy42IDAgMiAyIDAgMCAxIDAtMy42QTkgOSAwIDAgMSAxMiAzYzIgMCAzLjUgMS4xIDMuNSAyLjVzLS45IDIuNS0yIDIuNWMtLjggMC0xLjUtLjQtMS41LTEifV0sWyJwYXRoIix7ZDoiTTkgMTJoLjAxIn1dXX0pO3ZhciBNdSxVbGU9bigoKT0+e011PVtbInBhdGgiLHtkOiJNNCAxMGE0IDQgMCAwIDEgNC00aDhhNCA0IDAgMCAxIDQgNHYxMGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnoifV0sWyJwYXRoIix7ZDoiTTggMTBoOCJ9XSxbInBhdGgiLHtkOiJNOCAxOGg4In1dLFsicGF0aCIse2Q6Ik04IDIydi02YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjYifV0sWyJwYXRoIix7ZDoiTTkgNlY0YTIgMiAwIDAgMSAyLTJoMmEyIDIgMCAwIDEgMiAydjIifV1dfSk7dmFyIHp1LGpsZT1uKCgpPT57enU9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjgiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMi4wMSIseTE6IjE2Iix5MjoiMTYifV1dfSk7dmFyIGt1LFdsZT1uKCgpPT57a3U9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbInBhdGgiLHtkOiJNMTIgN3YxMCJ9XSxbInBhdGgiLHtkOiJNMTUuNCAxMGE0IDQgMCAxIDAgMCA0In1dXX0pO3ZhciBVbixHbGU9bigoKT0+e1VuPVtbInBhdGgiLHtkOiJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloifV0sWyJwYXRoIix7ZDoibTkgMTIgMiAyIDQtNCJ9XV19KTt2YXIgU3UsWWxlPW4oKCk9PntTdT1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dLFsicGF0aCIse2Q6Ik0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgifV0sWyJwYXRoIix7ZDoiTTEyIDE4VjYifV1dfSk7dmFyIEN1LFpsZT1uKCgpPT57Q3U9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbInBhdGgiLHtkOiJNNyAxMmg1In1dLFsicGF0aCIse2Q6Ik0xNSA5LjRhNCA0IDAgMSAwIDAgNS4yIn1dXX0pO3ZhciBMdSxYbGU9bigoKT0+e0x1PVtbInBhdGgiLHtkOiJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloifV0sWyJwYXRoIix7ZDoiTTggOGg4In1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV0sWyJwYXRoIix7ZDoibTEzIDE3LTUtMWgxYTQgNCAwIDAgMCAwLTgifV1dfSk7dmFyIFR1LFFsZT1uKCgpPT57VHU9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjE2Iix5MjoiMTIifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIuMDEiLHkxOiI4Iix5MjoiOCJ9XV19KTt2YXIgX3UsS2xlPW4oKCk9PntfdT1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dLFsicGF0aCIse2Q6Im05IDggMyAzdjcifV0sWyJwYXRoIix7ZDoibTEyIDExIDMtMyJ9XSxbInBhdGgiLHtkOiJNOSAxMmg2In1dLFsicGF0aCIse2Q6Ik05IDE2aDYifV1dfSk7dmFyIEF1LEpsZT1uKCgpPT57QXU9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbImxpbmUiLHt4MToiOCIseDI6IjE2Iix5MToiMTIiLHkyOiIxMiJ9XV19KTt2YXIgJHUsZWNlPW4oKCk9PnskdT1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dLFsicGF0aCIse2Q6Im0xNSA5LTYgNiJ9XSxbInBhdGgiLHtkOiJNOSA5aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTUgMTVoLjAxIn1dXX0pO3ZhciBEdSx0Y2U9bigoKT0+e0R1PVtbInBhdGgiLHtkOiJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiI4Iix5MjoiMTYifV0sWyJsaW5lIix7eDE6IjgiLHgyOiIxNiIseTE6IjEyIix5MjoiMTIifV1dfSk7dmFyIEV1LGFjZT1uKCgpPT57RXU9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbInBhdGgiLHtkOiJNOCAxMmg0In1dLFsicGF0aCIse2Q6Ik0xMCAxNlY5LjVhMi41IDIuNSAwIDAgMSA1IDAifV0sWyJwYXRoIix7ZDoiTTggMTZoNyJ9XV19KTt2YXIgam4scmNlPW4oKCk9Pntqbj1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dLFsicGF0aCIse2Q6Ik05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMi4wMSIseTE6IjE3Iix5MjoiMTcifV1dfSk7dmFyIE51LGljZT1uKCgpPT57TnU9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbInBhdGgiLHtkOiJNOSAxNmg1In1dLFsicGF0aCIse2Q6Ik05IDEyaDVhMiAyIDAgMSAwIDAtNGgtM3Y5In1dXX0pO3ZhciBQdSxvY2U9bigoKT0+e1B1PVtbInBhdGgiLHtkOiJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloifV0sWyJwYXRoIix7ZDoiTTExIDE3VjhoNCJ9XSxbInBhdGgiLHtkOiJNMTEgMTJoMyJ9XSxbInBhdGgiLHtkOiJNOSAxNmg0In1dXX0pO3ZhciBJdSxzY2U9bigoKT0+e0l1PVtbInBhdGgiLHtkOiJNMTEgN3YxMGE1IDUgMCAwIDAgNS01In1dLFsicGF0aCIse2Q6Im0xNSA4LTYgMyJ9XSxbInBhdGgiLHtkOiJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NiJ9XV19KTt2YXIgRnUsbmNlPW4oKCk9PntGdT1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dLFsibGluZSIse3gxOiIxNSIseDI6IjkiLHkxOiI5Iix5MjoiMTUifV0sWyJsaW5lIix7eDE6IjkiLHgyOiIxNSIseTE6IjkiLHkyOiIxNSJ9XV19KTt2YXIgT3UsbGNlPW4oKCk9PntPdT1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dXX0pO3ZhciBCdSxjY2U9bigoKT0+e0J1PVtbInBhdGgiLHtkOiJNMjIgMThINmEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAwLTItMiJ9XSxbInBhdGgiLHtkOiJNMTcgMTRWNGEyIDIgMCAwIDAtMi0yaC0xYTIgMiAwIDAgMC0yIDJ2MTAifV0sWyJyZWN0Iix7d2lkdGg6IjEzIixoZWlnaHQ6IjgiLHg6IjgiLHk6IjYiLHJ4OiIxIn1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMjAiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjIwIixyOiIyIn1dXX0pO3ZhciBSdSxkY2U9bigoKT0+e1J1PVtbInBhdGgiLHtkOiJNMTIgMTZ2MWEyIDIgMCAwIDAgMiAyaDFhMiAyIDAgMCAxIDIgMnYxIn1dLFsicGF0aCIse2Q6Ik0xMiA2YTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTE4IDhjMCA0LTMuNSA4LTYgOHMtNi00LTYtOGE2IDYgMCAwIDEgMTIgMCJ9XV19KTt2YXIgSHUsZmNlPW4oKCk9PntIdT1bWyJwYXRoIix7ZDoiTTQuOTI5IDQuOTI5IDE5LjA3IDE5LjA3MSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgcXUsdWNlPW4oKCk9PntxdT1bWyJwYXRoIix7ZDoiTTQgMTNjMy41LTIgOC0yIDEwIDJhNS41IDUuNSAwIDAgMSA4IDUifV0sWyJwYXRoIix7ZDoiTTUuMTUgMTcuODljNS41Mi0xLjUyIDguNjUtNi44OSA3LTEyQzExLjU1IDQgMTEuNSAyIDEzIDJjMy4yMiAwIDUgNS41IDUgOCAwIDYuNS00LjIgMTItMTAuNDkgMTJDNS4xMSAyMiAyIDIyIDIgMjBjMC0xLjUgMS4xNC0xLjU1IDMuMTUtMi4xMVoifV1dfSk7dmFyIFZ1LHBjZT1uKCgpPT57VnU9W1sicGF0aCIse2Q6Ik0xMCAxMC4wMWguMDEifV0sWyJwYXRoIix7ZDoiTTEwIDE0LjAxaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTQgMTAuMDFoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNCAxNC4wMWguMDEifV0sWyJwYXRoIix7ZDoiTTE4IDZ2MTEuNSJ9XSxbInBhdGgiLHtkOiJNNiA2djEyIn1dLFsicmVjdCIse3g6IjIiLHk6IjYiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxMiIscng6IjIifV1dfSk7dmFyIFV1LGhjZT1uKCgpPT57VXU9W1sicGF0aCIse2Q6Ik0xMiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSJ9XSxbInBhdGgiLHtkOiJtMTYgMTkgMyAzIDMtMyJ9XSxbInBhdGgiLHtkOiJNMTggMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOSAxNnY2In1dLFsicGF0aCIse2Q6Ik02IDEyaC4wMSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIyIn1dXX0pO3ZhciBqdSxtY2U9bigoKT0+e2p1PVtbInBhdGgiLHtkOiJNMTIgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjUifV0sWyJwYXRoIix7ZDoiTTE4IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTkgMjJ2LTYifV0sWyJwYXRoIix7ZDoibTIyIDE5LTMtMy0zIDMifV0sWyJwYXRoIix7ZDoiTTYgMTJoLjAxIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV1dfSk7dmFyIFd1LGdjZT1uKCgpPT57V3U9W1sicGF0aCIse2Q6Ik0xMyAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSJ9XSxbInBhdGgiLHtkOiJtMTcgMTcgNSA1In1dLFsicGF0aCIse2Q6Ik0xOCAxMmguMDEifV0sWyJwYXRoIix7ZDoibTIyIDE3LTUgNSJ9XSxbInBhdGgiLHtkOiJNNiAxMmguMDEifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMiJ9XV19KTt2YXIgR3UseGNlPW4oKCk9PntHdT1bWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjEyIix4OiIyIix5OiI2IixyeDoiMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIyIn1dLFsicGF0aCIse2Q6Ik02IDEyaC4wMU0xOCAxMmguMDEifV1dfSk7dmFyIFl1LGJjZT1uKCgpPT57WXU9W1sicGF0aCIse2Q6Ik0zIDV2MTQifV0sWyJwYXRoIix7ZDoiTTggNXYxNCJ9XSxbInBhdGgiLHtkOiJNMTIgNXYxNCJ9XSxbInBhdGgiLHtkOiJNMTcgNXYxNCJ9XSxbInBhdGgiLHtkOiJNMjEgNXYxNCJ9XV19KTt2YXIgWnUsdmNlPW4oKCk9PntadT1bWyJwYXRoIix7ZDoiTTEwIDNhNDEgNDEgMCAwIDAgMCAxOCJ9XSxbInBhdGgiLHtkOiJNMTQgM2E0MSA0MSAwIDAgMSAwIDE4In1dLFsicGF0aCIse2Q6Ik0xNyAzYTIgMiAwIDAgMSAxLjY4LjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAgMTYuMTZBMiAyIDAgMCAxIDE3IDIxSDdhMiAyIDAgMCAxLTEuNjgtLjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAtMTYuMTZBMiAyIDAgMCAxIDcgM3oifV0sWyJwYXRoIix7ZDoiTTMuODQgMTdoMTYuMzIifV0sWyJwYXRoIix7ZDoiTTMuODQgN2gxNi4zMiJ9XV19KTt2YXIgWHUseWNlPW4oKCk9PntYdT1bWyJwYXRoIix7ZDoiTTQgMjBoMTYifV0sWyJwYXRoIix7ZDoibTYgMTYgNi0xMiA2IDEyIn1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV1dfSk7dmFyIFF1LHdjZT1uKCgpPT57UXU9W1sicGF0aCIse2Q6Ik0xMCA0IDggNiJ9XSxbInBhdGgiLHtkOiJNMTcgMTl2MiJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMCJ9XSxbInBhdGgiLHtkOiJNNyAxOXYyIn1dLFsicGF0aCIse2Q6Ik05IDUgNy42MjEgMy42MjFBMi4xMjEgMi4xMjEgMCAwIDAgNCA1djEyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNSJ9XV19KTt2YXIgS3UsTWNlPW4oKCk9PntLdT1bWyJwYXRoIix7ZDoibTExIDctMyA1aDRsLTMgNSJ9XSxbInBhdGgiLHtkOiJNMTQuODU2IDZIMTZhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJoLTIuOTM1In1dLFsicGF0aCIse2Q6Ik0yMiAxNHYtNCJ9XSxbInBhdGgiLHtkOiJNNS4xNCAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDIuOTM2In1dXX0pO3ZhciBKdSx6Y2U9bigoKT0+e0p1PVtbInBhdGgiLHtkOiJNMTAgMTB2NCJ9XSxbInBhdGgiLHtkOiJNMTQgMTB2NCJ9XSxbInBhdGgiLHtkOiJNMjIgMTR2LTQifV0sWyJwYXRoIix7ZDoiTTYgMTB2NCJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTYiLGhlaWdodDoiMTIiLHJ4OiIyIn1dXX0pO3ZhciBlcCxrY2U9bigoKT0+e2VwPVtbInBhdGgiLHtkOiJNMjIgMTR2LTQifV0sWyJwYXRoIix7ZDoiTTYgMTR2LTQifV0sWyJyZWN0Iix7eDoiMiIseToiNiIsd2lkdGg6IjE2IixoZWlnaHQ6IjEyIixyeDoiMiJ9XV19KTt2YXIgdHAsU2NlPW4oKCk9Pnt0cD1bWyJwYXRoIix7ZDoiTTEwIDl2NiJ9XSxbInBhdGgiLHtkOiJNMTIuNTQzIDZIMTZhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJoLTMuNjA1In1dLFsicGF0aCIse2Q6Ik0yMiAxNHYtNCJ9XSxbInBhdGgiLHtkOiJNNyAxMmg2In1dLFsicGF0aCIse2Q6Ik03LjYwNiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDMuNjA2In1dXX0pO3ZhciBhcCxDY2U9bigoKT0+e2FwPVtbInBhdGgiLHtkOiJNMTAgMTR2LTQifV0sWyJwYXRoIix7ZDoiTTIyIDE0di00In1dLFsicGF0aCIse2Q6Ik02IDE0di00In1dLFsicmVjdCIse3g6IjIiLHk6IjYiLHdpZHRoOiIxNiIsaGVpZ2h0OiIxMiIscng6IjIifV1dfSk7dmFyIHJwLExjZT1uKCgpPT57cnA9W1sicGF0aCIse2Q6Ik0xMCAxN2guMDEifV0sWyJwYXRoIix7ZDoiTTEwIDd2NiJ9XSxbInBhdGgiLHtkOiJNMTQgNmgyYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Ik0yMiAxNHYtNCJ9XSxbInBhdGgiLHtkOiJNNiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDIifV1dfSk7dmFyIGlwLFRjZT1uKCgpPT57aXA9W1sicGF0aCIse2Q6Ik0gMjIgMTQgTCAyMiAxMCJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTYiLGhlaWdodDoiMTIiLHJ4OiIyIn1dXX0pO3ZhciBvcCxfY2U9bigoKT0+e29wPVtbInBhdGgiLHtkOiJNNC41IDNoMTUifV0sWyJwYXRoIix7ZDoiTTYgM3YxNmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlYzIn1dLFsicGF0aCIse2Q6Ik02IDE0aDEyIn1dXX0pO3ZhciBzcCxBY2U9bigoKT0+e3NwPVtbInBhdGgiLHtkOiJNOSA5Yy0uNjQuNjQtMS41MjEuOTU0LTIuNDAyIDEuMTY1QTYgNiAwIDAgMCA4IDIyYTEzLjk2IDEzLjk2IDAgMCAwIDkuOS00LjEifV0sWyJwYXRoIix7ZDoiTTEwLjc1IDUuMDkzQTYgNiAwIDAgMSAyMiA4YzAgMi40MTEtLjYxIDQuNjgtMS42ODMgNi42NiJ9XSxbInBhdGgiLHtkOiJNNS4zNDEgMTAuNjJhNCA0IDAgMCAwIDYuNDg3IDEuMjA4TTEwLjYyIDUuMzQxYTQuMDE1IDQuMDE1IDAgMCAxIDIuMDM5IDIuMDQifV0sWyJsaW5lIix7eDE6IjIiLHgyOiIyMiIseTE6IjIiLHkyOiIyMiJ9XV19KTt2YXIgbnAsJGNlPW4oKCk9PntucD1bWyJwYXRoIix7ZDoiTTEwLjE2NSA2LjU5OEM5Ljk1NCA3LjQ3OCA5LjY0IDguMzYgOSA5Yy0uNjQuNjQtMS41MjEuOTU0LTIuNDAyIDEuMTY1QTYgNiAwIDAgMCA4IDIyYzcuNzMyIDAgMTQtNi4yNjggMTQtMTRhNiA2IDAgMCAwLTExLjgzNS0xLjQwMloifV0sWyJwYXRoIix7ZDoiTTUuMzQxIDEwLjYyYTQgNCAwIDEgMCA1LjI3OS01LjI4In1dXX0pO3ZhciBscCxEY2U9bigoKT0+e2xwPVtbInBhdGgiLHtkOiJNMiAyMHYtOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2OCJ9XSxbInBhdGgiLHtkOiJNNCAxMFY2YTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnY0In1dLFsicGF0aCIse2Q6Ik0xMiA0djYifV0sWyJwYXRoIix7ZDoiTTIgMThoMjAifV1dfSk7dmFyIGNwLEVjZT1uKCgpPT57Y3A9W1sicGF0aCIse2Q6Ik0zIDIwdi04YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY4In1dLFsicGF0aCIse2Q6Ik01IDEwVjZhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjQifV0sWyJwYXRoIix7ZDoiTTMgMThoMTgifV1dfSk7dmFyIGRwLE5jZT1uKCgpPT57ZHA9W1sicGF0aCIse2Q6Ik0yIDR2MTYifV0sWyJwYXRoIix7ZDoiTTIgOGgxOGEyIDIgMCAwIDEgMiAydjEwIn1dLFsicGF0aCIse2Q6Ik0yIDE3aDIwIn1dLFsicGF0aCIse2Q6Ik02IDh2OSJ9XV19KTt2YXIgZnAsUGNlPW4oKCk9PntmcD1bWyJwYXRoIix7ZDoiTTE2LjQgMTMuN0E2LjUgNi41IDAgMSAwIDYuMjggNi42Yy0xLjEgMy4xMy0uNzggMy45LTMuMTggNi4wOEEzIDMgMCAwIDAgNSAxOGM0IDAgOC40LTEuOCAxMS40LTQuMyJ9XSxbInBhdGgiLHtkOiJtMTguNSA2IDIuMTkgNC41YTYuNDggNi40OCAwIDAgMS0yLjI5IDcuMkMxNS40IDIwLjIgMTEgMjIgNyAyMmEzIDMgMCAwIDEtMi42OC0xLjY2TDIuNCAxNi41In1dLFsiY2lyY2xlIix7Y3g6IjEyLjUiLGN5OiI4LjUiLHI6IjIuNSJ9XV19KTt2YXIgdXAsSWNlPW4oKCk9Pnt1cD1bWyJwYXRoIix7ZDoiTTEzIDEzdjUifV0sWyJwYXRoIix7ZDoiTTE3IDExLjQ3VjgifV0sWyJwYXRoIix7ZDoiTTE3IDExaDFhMyAzIDAgMCAxIDIuNzQ1IDQuMjExIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTUgOHYxMmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMnYtMyJ9XSxbInBhdGgiLHtkOiJNNy41MzYgNy41MzVDNi43NjYgNy42NDkgNi4xNTQgOCA1LjUgOGEyLjUgMi41IDAgMCAxLTEuNzY4LTQuMjY4In1dLFsicGF0aCIse2Q6Ik04LjcyNyAzLjIwNEM5LjMwNiAyLjc2NyA5Ljg4NSAyIDExIDJjMS41NiAwIDIgMS41IDMgMS41czEuNzItLjUgMi41LS41YTEgMSAwIDEgMSAwIDVjLS43OCAwLTEuNS0uNS0yLjUtLjVhMy4xNDkgMy4xNDkgMCAwIDAtLjg0Mi4xMiJ9XSxbInBhdGgiLHtkOiJNOSAxNC42VjE4In1dXX0pO3ZhciBwcCxGY2U9bigoKT0+e3BwPVtbInBhdGgiLHtkOiJNMTcgMTFoMWEzIDMgMCAwIDEgMCA2aC0xIn1dLFsicGF0aCIse2Q6Ik05IDEydjYifV0sWyJwYXRoIix7ZDoiTTEzIDEydjYifV0sWyJwYXRoIix7ZDoiTTE0IDcuNWMtMSAwLTEuNDQuNS0zIC41cy0yLS41LTMtLjUtMS43Mi41LTIuNS41YTIuNSAyLjUgMCAwIDEgMC01Yy43OCAwIDEuNTcuNSAyLjUuNVM5LjQ0IDIgMTEgMnMyIDEuNSAzIDEuNSAxLjcyLS41IDIuNS0uNWEyLjUgMi41IDAgMCAxIDAgNWMtLjc4IDAtMS41LS41LTIuNS0uNVoifV0sWyJwYXRoIix7ZDoiTTUgOHYxMmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY4In1dXX0pO3ZhciBocCxPY2U9bigoKT0+e2hwPVtbInBhdGgiLHtkOiJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIn1dLFsicGF0aCIse2Q6Ik0xMy45MTYgMi4zMTRBNiA2IDAgMCAwIDYgOGMwIDQuNDk5LTEuNDExIDUuOTU2LTIuNzQgNy4zMjdBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3MyA5IDkgMCAwIDEtLjU4NS0uNjY1In1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiOCIscjoiMyJ9XV19KTt2YXIgbXAsQmNlPW4oKCk9PnttcD1bWyJwYXRoIix7ZDoiTTE4LjUxOCAxNy4zNDdBNyA3IDAgMCAxIDE0IDE5In1dLFsicGF0aCIse2Q6Ik0xOC44IDRBMTEgMTEgMCAwIDEgMjAgOSJ9XSxbInBhdGgiLHtkOiJNOSA5aC4wMSJ9XSxbImNpcmNsZSIse2N4OiIyMCIsY3k6IjE2IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI5IixyOiI3In1dLFsicmVjdCIse3g6IjQiLHk6IjE2Iix3aWR0aDoiMTAiLGhlaWdodDoiNiIscng6IjIifV1dfSk7dmFyIGdwLFJjZT1uKCgpPT57Z3A9W1sicGF0aCIse2Q6Ik0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAifV0sWyJwYXRoIix7ZDoiTTE1IDhoNiJ9XSxbInBhdGgiLHtkOiJNMTYuMjQzIDMuNzU3QTYgNiAwIDAgMCA2IDhjMCA0LjQ5OS0xLjQxMSA1Ljk1Ni0yLjczOCA3LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQTkuNCA5LjQgMCAwIDEgMTguNjY3IDEyIn1dXX0pO3ZhciB4cCxIY2U9bigoKT0+e3hwPVtbInBhdGgiLHtkOiJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIn1dLFsicGF0aCIse2Q6Ik0xNyAxN0g0YTEgMSAwIDAgMS0uNzQtMS42NzNDNC41OSAxMy45NTYgNiAxMi40OTkgNiA4YTYgNiAwIDAgMSAuMjU4LTEuNzQyIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTguNjY4IDMuMDFBNiA2IDAgMCAxIDE4IDhjMCAyLjY4Ny43NyA0LjY1MyAxLjcwNyA2LjA1In1dXX0pO3ZhciBicCxxY2U9bigoKT0+e2JwPVtbInBhdGgiLHtkOiJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIn1dLFsicGF0aCIse2Q6Ik0xNSA4aDYifV0sWyJwYXRoIix7ZDoiTTE4IDV2NiJ9XSxbInBhdGgiLHtkOiJNMjAuMDAyIDE0LjQ2NGE5IDkgMCAwIDAgLjczOC44NjNBMSAxIDAgMCAxIDIwIDE3SDRhMSAxIDAgMCAxLS43NC0xLjY3M0M0LjU5IDEzLjk1NiA2IDEyLjQ5OSA2IDhhNiA2IDAgMCAxIDguNzUtNS4zMzIifV1dfSk7dmFyIHZwLFZjZT1uKCgpPT57dnA9W1sicGF0aCIse2Q6Ik0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAifV0sWyJwYXRoIix7ZDoiTTIyIDhjMC0yLjMtLjgtNC4zLTItNiJ9XSxbInBhdGgiLHtkOiJNMy4yNjIgMTUuMzI2QTEgMSAwIDAgMCA0IDE3aDE2YTEgMSAwIDAgMCAuNzQtMS42NzNDMTkuNDEgMTMuOTU2IDE4IDEyLjQ5OSAxOCA4QTYgNiAwIDAgMCA2IDhjMCA0LjQ5OS0xLjQxMSA1Ljk1Ni0yLjczOCA3LjMyNiJ9XSxbInBhdGgiLHtkOiJNNCAyQzIuOCAzLjcgMiA1LjcgMiA4In1dXX0pO3ZhciB5cCxVY2U9bigoKT0+e3lwPVtbInBhdGgiLHtkOiJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIn1dLFsicGF0aCIse2Q6Ik0zLjI2MiAxNS4zMjZBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3M0MxOS40MSAxMy45NTYgMTggMTIuNDk5IDE4IDhBNiA2IDAgMCAwIDYgOGMwIDQuNDk5LTEuNDExIDUuOTU2LTIuNzM4IDcuMzI2In1dXX0pO3ZhciBXbixqY2U9bigoKT0+e1duPVtbInJlY3QiLHt3aWR0aDoiMTMiLGhlaWdodDoiNyIseDoiMyIseToiMyIscng6IjEifV0sWyJwYXRoIix7ZDoibTIyIDE1LTMtMyAzLTMifV0sWyJyZWN0Iix7d2lkdGg6IjEzIixoZWlnaHQ6IjciLHg6IjMiLHk6IjE0IixyeDoiMSJ9XV19KTt2YXIgR24sV2NlPW4oKCk9PntHbj1bWyJyZWN0Iix7d2lkdGg6IjEzIixoZWlnaHQ6IjciLHg6IjgiLHk6IjMiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Im0yIDkgMyAzLTMgMyJ9XSxbInJlY3QiLHt3aWR0aDoiMTMiLGhlaWdodDoiNyIseDoiOCIseToiMTQiLHJ4OiIxIn1dXX0pO3ZhciB3cCxHY2U9bigoKT0+e3dwPVtbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiIxMyIseDoiMyIseToiMyIscng6IjEifV0sWyJwYXRoIix7ZDoibTkgMjIgMy0zIDMgMyJ9XSxbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiIxMyIseDoiMTQiLHk6IjMiLHJ4OiIxIn1dXX0pO3ZhciBNcCxZY2U9bigoKT0+e01wPVtbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiIxMyIseDoiMyIseToiOCIscng6IjEifV0sWyJwYXRoIix7ZDoibTE1IDItMyAzLTMtMyJ9XSxbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiIxMyIseDoiMTQiLHk6IjgiLHJ4OiIxIn1dXX0pO3ZhciB6cCxaY2U9bigoKT0+e3pwPVtbInBhdGgiLHtkOiJNMTIuNDA5IDEzLjAxN0E1IDUgMCAwIDEgMjIgMTVjMCAzLjg2Ni00IDctOSA3LTQuMDc3IDAtOC4xNTMtLjgyLTEwLjM3MS0yLjQ2Mi0uNDI2LS4zMTYtLjYzMS0uODMyLS42Mi0xLjM2MkMyLjExOCAxMi43MjMgMi42MjcgMiAxMCAyYTMgMyAwIDAgMSAzIDMgMiAyIDAgMCAxLTIgMmMtMS4xMDUgMC0xLjY0LS40NDQtMi0xIn1dLFsicGF0aCIse2Q6Ik0xNSAxNGE1IDUgMCAwIDAtNy41ODQgMiJ9XSxbInBhdGgiLHtkOiJNOS45NjQgNi44MjVDOC4wMTkgNy45NzcgOS41IDEzIDggMTUifV1dfSk7dmFyIGtwLFhjZT1uKCgpPT57a3A9W1siY2lyY2xlIix7Y3g6IjE4LjUiLGN5OiIxNy41IixyOiIzLjUifV0sWyJjaXJjbGUiLHtjeDoiNS41IixjeToiMTcuNSIscjoiMy41In1dLFsiY2lyY2xlIix7Y3g6IjE1IixjeToiNSIscjoiMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTcuNVYxNGwtMy0zIDQtMyAyIDNoMiJ9XV19KTt2YXIgU3AsUWNlPW4oKCk9PntTcD1bWyJyZWN0Iix7eDoiMTQiLHk6IjE0Iix3aWR0aDoiNCIsaGVpZ2h0OiI2IixyeDoiMiJ9XSxbInJlY3QiLHt4OiI2Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiI2IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNiAyMGg0In1dLFsicGF0aCIse2Q6Ik0xNCAxMGg0In1dLFsicGF0aCIse2Q6Ik02IDE0aDJ2NiJ9XSxbInBhdGgiLHtkOiJNMTQgNGgydjYifV1dfSk7dmFyIENwLEtjZT1uKCgpPT57Q3A9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTEuOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJNNi43IDMuNGMtLjkgMi41IDAgNS4yIDIuMiA2LjdDNi41IDkgMy43IDkuNiAyIDExLjYifV0sWyJwYXRoIix7ZDoibTguOSAxMC4xIDEuNC44In1dLFsicGF0aCIse2Q6Ik0xNy4zIDMuNGMuOSAyLjUgMCA1LjItMi4yIDYuNyAyLjQtMS4yIDUuMi0uNiA2LjkgMS41In1dLFsicGF0aCIse2Q6Im0xNS4xIDEwLjEtMS40LjgifV0sWyJwYXRoIix7ZDoiTTE2LjcgMjAuOGMtMi42LS40LTQuNi0yLjYtNC43LTUuMy0uMiAyLjYtMi4xIDQuOC00LjcgNS4yIn1dLFsicGF0aCIse2Q6Ik0xMiAxMy45djEuNiJ9XSxbInBhdGgiLHtkOiJNMTMuNSA1LjRjLTEtLjItMi0uMi0zIDAifV0sWyJwYXRoIix7ZDoiTTE3IDE2LjRjLjctLjcgMS4yLTEuNiAxLjUtMi41In1dLFsicGF0aCIse2Q6Ik01LjUgMTMuOWMuMy45LjggMS44IDEuNSAyLjUifV1dfSk7dmFyIExwLEpjZT1uKCgpPT57THA9W1sicGF0aCIse2Q6Ik0xMCAxMGg0In1dLFsicGF0aCIse2Q6Ik0xOSA3VjRhMSAxIDAgMCAwLTEtMWgtMmExIDEgMCAwIDAtMSAxdjMifV0sWyJwYXRoIix7ZDoiTTIwIDIxYTIgMiAwIDAgMCAyLTJ2LTMuODUxYzAtMS4zOS0yLTIuOTYyLTItNC44MjlWOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2MTFhMiAyIDAgMCAwIDIgMnoifV0sWyJwYXRoIix7ZDoiTSAyMiAxNiBMIDIgMTYifV0sWyJwYXRoIix7ZDoiTTQgMjFhMiAyIDAgMCAxLTItMnYtMy44NTFjMC0xLjM5IDItMi45NjIgMi00LjgyOVY4YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjExYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik05IDdWNGExIDEgMCAwIDAtMS0xSDZhMSAxIDAgMCAwLTEgMXYzIn1dXX0pO3ZhciBUcCxlNmU9bigoKT0+e1RwPVtbInBhdGgiLHtkOiJNMTIgMTh2NCJ9XSxbInBhdGgiLHtkOiJtMTcgMTggMS45NTYtMTEuNDY4In1dLFsicGF0aCIse2Q6Im0zIDggNy44Mi01LjYxNWEyIDIgMCAwIDEgMi4zNiAwTDIxIDgifV0sWyJwYXRoIix7ZDoiTTQgMThoMTYifV0sWyJwYXRoIix7ZDoiTTcgMTggNS4wNDQgNi41MzIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMCIscjoiMiJ9XV19KTt2YXIgX3AsdDZlPW4oKCk9PntfcD1bWyJwYXRoIix7ZDoiTTE2IDdoLjAxIn1dLFsicGF0aCIse2Q6Ik0zLjQgMThIMTJhOCA4IDAgMCAwIDgtOFY3YTQgNCAwIDAgMC03LjI4LTIuM0wyIDIwIn1dLFsicGF0aCIse2Q6Im0yMCA3IDIgLjUtMiAuNSJ9XSxbInBhdGgiLHtkOiJNMTAgMTh2MyJ9XSxbInBhdGgiLHtkOiJNMTQgMTcuNzVWMjEifV0sWyJwYXRoIix7ZDoiTTcgMThhNiA2IDAgMCAwIDMuODQtMTAuNjEifV1dfSk7dmFyIEFwLGE2ZT1uKCgpPT57QXA9W1sicGF0aCIse2Q6Ik0xMS43NjcgMTkuMDg5YzQuOTI0Ljg2OCA2LjE0LTYuMDI1IDEuMjE2LTYuODk0bS0xLjIxNiA2Ljg5NEw1Ljg2IDE4LjA0N201LjkwOCAxLjA0Mi0uMzQ3IDEuOTdtMS41NjMtOC44NjRjNC45MjQuODY5IDYuMTQtNi4wMjUgMS4yMTUtNi44OTNtLTEuMjE1IDYuODkzLTMuOTQtLjY5NG01LjE1NS02LjJMOC4yOSA0LjI2bTUuOTA4IDEuMDQyLjM0OC0xLjk3TTcuNDggMjAuMzY0bDMuMTI2LTE3LjcyNyJ9XV19KTt2YXIgJHAscjZlPW4oKCk9PnskcD1bWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjkiLHI6IjcifV0sWyJjaXJjbGUiLHtjeDoiMTUiLGN5OiIxNSIscjoiNyJ9XV19KTt2YXIgRHAsaTZlPW4oKCk9PntEcD1bWyJwYXRoIix7ZDoiTTMgM2gxOCJ9XSxbInBhdGgiLHtkOiJNMjAgN0g4In1dLFsicGF0aCIse2Q6Ik0yMCAxMUg4In1dLFsicGF0aCIse2Q6Ik0xMCAxOWgxMCJ9XSxbInBhdGgiLHtkOiJNOCAxNWgxMiJ9XSxbInBhdGgiLHtkOiJNNCAzdjE0In1dLFsiY2lyY2xlIix7Y3g6IjQiLGN5OiIxOSIscjoiMiJ9XV19KTt2YXIgRXAsbzZlPW4oKCk9PntFcD1bWyJwYXRoIix7ZDoiTTEwIDIyVjdhMSAxIDAgMCAwLTEtMUg0YTIgMiAwIDAgMC0yIDJ2MTJhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi01YTEgMSAwIDAgMC0xLTFIMiJ9XSxbInJlY3QiLHt4OiIxNCIseToiMiIsd2lkdGg6IjgiLGhlaWdodDoiOCIscng6IjEifV1dfSk7dmFyIE5wLHM2ZT1uKCgpPT57TnA9W1sicGF0aCIse2Q6Im03IDcgMTAgMTAtNSA1VjJsNSA1TDcgMTcifV0sWyJsaW5lIix7eDE6IjE4Iix4MjoiMjEiLHkxOiIxMiIseTI6IjEyIn1dLFsibGluZSIse3gxOiIzIix4MjoiNiIseTE6IjEyIix5MjoiMTIifV1dfSk7dmFyIFBwLG42ZT1uKCgpPT57UHA9W1sicGF0aCIse2Q6Im0xNyAxNy01IDVWMTJsLTUgNSJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik0xNC41IDkuNSAxNyA3bC01LTV2NC41In1dXX0pO3ZhciBJcCxsNmU9bigoKT0+e0lwPVtbInBhdGgiLHtkOiJtNyA3IDEwIDEwLTUgNVYybDUgNUw3IDE3In1dLFsicGF0aCIse2Q6Ik0yMC44MyAxNC44M2E0IDQgMCAwIDAgMC01LjY2In1dLFsicGF0aCIse2Q6Ik0xOCAxMmguMDEifV1dfSk7dmFyIEZwLGM2ZT1uKCgpPT57RnA9W1sicGF0aCIse2Q6Im03IDcgMTAgMTAtNSA1VjJsNSA1TDcgMTcifV1dfSk7dmFyIE9wLGQ2ZT1uKCgpPT57T3A9W1sicGF0aCIse2Q6Ik02IDEyaDlhNCA0IDAgMCAxIDAgOEg3YTEgMSAwIDAgMS0xLTFWNWExIDEgMCAwIDEgMS0xaDdhNCA0IDAgMCAxIDAgOCJ9XV19KTt2YXIgQnAsZjZlPW4oKCk9PntCcD1bWyJwYXRoIix7ZDoiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0In1dXX0pO3ZhciBScCx1NmU9bigoKT0+e1JwPVtbImNpcmNsZSIse2N4OiIxMSIsY3k6IjEzIixyOiI5In1dLFsicGF0aCIse2Q6Ik0xNC4zNSA0LjY1IDE2LjMgMi43YTIuNDEgMi40MSAwIDAgMSAzLjQgMGwxLjYgMS42YTIuNCAyLjQgMCAwIDEgMCAzLjRsLTEuOTUgMS45NSJ9XSxbInBhdGgiLHtkOiJtMjIgMi0xLjUgMS41In1dXX0pO3ZhciBIcCxwNmU9bigoKT0+e0hwPVtbInBhdGgiLHtkOiJNMTcgMTBjLjctLjcgMS42OSAwIDIuNSAwYTIuNSAyLjUgMCAxIDAgMC01IC41LjUgMCAwIDEtLjUtLjUgMi41IDIuNSAwIDEgMC01IDBjMCAuODEuNyAxLjggMCAyLjVsLTcgN2MtLjcuNy0xLjY5IDAtMi41IDBhMi41IDIuNSAwIDAgMCAwIDVjLjI4IDAgLjUuMjIuNS41YTIuNSAyLjUgMCAxIDAgNSAwYzAtLjgxLS43LTEuOCAwLTIuNVoifV1dfSk7dmFyIHFwLGg2ZT1uKCgpPT57cXA9W1sicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dLFsicGF0aCIse2Q6Im04IDEzIDQtNyA0IDcifV0sWyJwYXRoIix7ZDoiTTkuMSAxMWg1LjcifV1dfSk7dmFyIFZwLG02ZT1uKCgpPT57VnA9W1sicGF0aCIse2Q6Ik0xMiAxM2guMDEifV0sWyJwYXRoIix7ZDoiTTEyIDZ2MyJ9XSxbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XV19KTt2YXIgVXAsZzZlPW4oKCk9PntVcD1bWyJwYXRoIix7ZDoiTTEyIDZ2NyJ9XSxbInBhdGgiLHtkOiJNMTYgOHYzIn1dLFsicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dLFsicGF0aCIse2Q6Ik04IDh2MyJ9XV19KTt2YXIganAseDZlPW4oKCk9PntqcD1bWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV0sWyJwYXRoIix7ZDoibTkgOS41IDIgMiA0LTQifV1dfSk7dmFyIFdwLGI2ZT1uKCgpPT57V3A9W1sicGF0aCIse2Q6Ik01IDdhMiAyIDAgMCAwLTIgMnYxMSJ9XSxbInBhdGgiLHtkOiJNNS44MDMgMThINWEyIDIgMCAwIDAgMCA0aDkuNWEuNS41IDAgMCAwIC41LS41VjIxIn1dLFsicGF0aCIse2Q6Ik05IDE1VjRhMiAyIDAgMCAxIDItMmg5LjVhLjUuNSAwIDAgMSAuNS41djE0YS41LjUgMCAwIDEtLjUuNUgxMWEyIDIgMCAwIDEgMC00aDEwIn1dXX0pO3ZhciBZbix2NmU9bigoKT0+e1luPVtbInBhdGgiLHtkOiJNMTIgMTdoMS41In1dLFsicGF0aCIse2Q6Ik0xMiAyMmgxLjUifV0sWyJwYXRoIix7ZDoiTTEyIDJoMS41In1dLFsicGF0aCIse2Q6Ik0xNy41IDIySDE5YTEgMSAwIDAgMCAxLTEifV0sWyJwYXRoIix7ZDoiTTE3LjUgMkgxOWExIDEgMCAwIDEgMSAxdjEuNSJ9XSxbInBhdGgiLHtkOiJNMjAgMTR2M2gtMi41In1dLFsicGF0aCIse2Q6Ik0yMCA4LjVWMTAifV0sWyJwYXRoIix7ZDoiTTQgMTBWOC41In1dLFsicGF0aCIse2Q6Ik00IDE5LjVWMTQifV0sWyJwYXRoIix7ZDoiTTQgNC41QTIuNSAyLjUgMCAwIDEgNi41IDJIOCJ9XSxbInBhdGgiLHtkOiJNOCAyMkg2LjVhMSAxIDAgMCAxIDAtNUg4In1dXX0pO3ZhciBHcCx5NmU9bigoKT0+e0dwPVtbInBhdGgiLHtkOiJNMTIgMTNWNyJ9XSxbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XSxbInBhdGgiLHtkOiJtOSAxMCAzIDMgMy0zIn1dXX0pO3ZhciBZcCx3NmU9bigoKT0+e1lwPVtbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XSxbInBhdGgiLHtkOiJNOCAxMnYtMmE0IDQgMCAwIDEgOCAwdjIifV0sWyJjaXJjbGUiLHtjeDoiMTUiLGN5OiIxMiIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiMTIiLHI6IjEifV1dfSk7dmFyIFpwLE02ZT1uKCgpPT57WnA9W1sicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dLFsicGF0aCIse2Q6Ik04LjYyIDkuOEEyLjI1IDIuMjUgMCAxIDEgMTIgNi44MzZhMi4yNSAyLjI1IDAgMSAxIDMuMzggMi45NjZsLTIuNjI2IDIuODU2YS45OTguOTk4IDAgMCAxLTEuNTA3IDB6In1dXX0pO3ZhciBYcCx6NmU9bigoKT0+e1hwPVtbInBhdGgiLHtkOiJtMTkgMyAxIDEifV0sWyJwYXRoIix7ZDoibTIwIDItNC41IDQuNSJ9XSxbInBhdGgiLHtkOiJNMjAgNy44OThWMjFhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XSxbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAyaDcuODQ0In1dLFsiY2lyY2xlIix7Y3g6IjE0IixjeToiOCIscjoiMiJ9XV19KTt2YXIgUXAsazZlPW4oKCk9PntRcD1bWyJwYXRoIix7ZDoibTIwIDEzLjctMi4xLTIuMWEyIDIgMCAwIDAtMi44IDBMOS43IDE3In1dLFsicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiOCIscjoiMiJ9XV19KTt2YXIgS3AsUzZlPW4oKCk9PntLcD1bWyJwYXRoIix7ZDoiTTE4IDZWNGEyIDIgMCAxIDAtNCAwdjIifV0sWyJwYXRoIix7ZDoiTTIwIDE1djZhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XSxbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDEwIn1dLFsicmVjdCIse3g6IjEyIix5OiI2Iix3aWR0aDoiOCIsaGVpZ2h0OiI1IixyeDoiMSJ9XV19KTt2YXIgSnAsQzZlPW4oKCk9PntKcD1bWyJwYXRoIix7ZDoiTTEwIDJ2OGwzLTMgMyAzVjIifV0sWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV1dfSk7dmFyIGU5LEw2ZT1uKCgpPT57ZTk9W1sicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dLFsicGF0aCIse2Q6Ik05IDEwaDYifV1dfSk7dmFyIHQ5LFQ2ZT1uKCgpPT57dDk9W1sicGF0aCIse2Q6Ik0xMiAyMVY3In1dLFsicGF0aCIse2Q6Im0xNiAxMiAyIDIgNC00In1dLFsicGF0aCIse2Q6Ik0yMiA2VjRhMSAxIDAgMCAwLTEtMWgtNWE0IDQgMCAwIDAtNCA0IDQgNCAwIDAgMC00LTRIM2ExIDEgMCAwIDAtMSAxdjEzYTEgMSAwIDAgMCAxIDFoNmEzIDMgMCAwIDEgMyAzIDMgMyAwIDAgMSAzLTNoNmExIDEgMCAwIDAgMS0xdi0xLjMifV1dfSk7dmFyIGE5LF82ZT1uKCgpPT57YTk9W1sicGF0aCIse2Q6Ik0xMiA3djE0In1dLFsicGF0aCIse2Q6Ik0xNiAxMmgyIn1dLFsicGF0aCIse2Q6Ik0xNiA4aDIifV0sWyJwYXRoIix7ZDoiTTMgMThhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTFoNWE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMSA0LTRoNWExIDEgMCAwIDEgMSAxdjEzYTEgMSAwIDAgMS0xIDFoLTZhMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAtMy0zeiJ9XSxbInBhdGgiLHtkOiJNNiAxMmgyIn1dLFsicGF0aCIse2Q6Ik02IDhoMiJ9XV19KTt2YXIgcjksQTZlPW4oKCk9PntyOT1bWyJwYXRoIix7ZDoiTTEyIDd2MTQifV0sWyJwYXRoIix7ZDoiTTMgMThhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTFoNWE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMSA0LTRoNWExIDEgMCAwIDEgMSAxdjEzYTEgMSAwIDAgMS0xIDFoLTZhMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAtMy0zeiJ9XV19KTt2YXIgaTksJDZlPW4oKCk9PntpOT1bWyJwYXRoIix7ZDoiTTEyIDd2NiJ9XSxbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XSxbInBhdGgiLHtkOiJNOSAxMGg2In1dXX0pO3ZhciBvOSxENmU9bigoKT0+e285PVtbInBhdGgiLHtkOiJNMTEgMjJINS41YTEgMSAwIDAgMSAwLTVoNC41MDEifV0sWyJwYXRoIix7ZDoibTIxIDIyLTEuODc5LTEuODc4In1dLFsicGF0aCIse2Q6Ik0zIDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNS41IDJIMThhMSAxIDAgMCAxIDEgMXY4In1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTgiLHI6IjMifV1dfSk7dmFyIHM5LEU2ZT1uKCgpPT57czk9W1sicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dLFsicGF0aCIse2Q6Ik04IDExaDgifV0sWyJwYXRoIix7ZDoiTTggN2g2In1dXX0pO3ZhciBuOSxONmU9bigoKT0+e245PVtbInBhdGgiLHtkOiJNMTIgMTNWNyJ9XSxbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XSxbInBhdGgiLHtkOiJtOSAxMCAzLTMgMyAzIn1dXX0pO3ZhciBsOSxQNmU9bigoKT0+e2w5PVtbInBhdGgiLHtkOiJNMTAgMTNoNCJ9XSxbInBhdGgiLHtkOiJNMTIgNnY3In1dLFsicGF0aCIse2Q6Ik0xNiA4VjZIOHYyIn1dLFsicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dXX0pO3ZhciBjOSxJNmU9bigoKT0+e2M5PVtbInBhdGgiLHtkOiJNMTIgMTNWNyJ9XSxbInBhdGgiLHtkOiJNMTggMmgxYTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XSxbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAyIn1dLFsicGF0aCIse2Q6Im05IDEwIDMtMyAzIDMifV0sWyJwYXRoIix7ZDoibTkgNSAzLTMgMyAzIn1dXX0pO3ZhciBkOSxGNmU9bigoKT0+e2Q5PVtbInBhdGgiLHtkOiJNMTUgMTNhMyAzIDAgMSAwLTYgMCJ9XSxbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjgiLHI6IjIifV1dfSk7dmFyIGY5LE82ZT1uKCgpPT57Zjk9W1sicGF0aCIse2Q6Im0xNC41IDctNSA1In1dLFsicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dLFsicGF0aCIse2Q6Im05LjUgNyA1IDUifV1dfSk7dmFyIHU5LEI2ZT1uKCgpPT57dTk9W1sicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dXX0pO3ZhciBwOSxSNmU9bigoKT0+e3A5PVtbInBhdGgiLHtkOiJtMTkgMjEtNy00LTcgNFY1YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMloifV0sWyJwYXRoIix7ZDoibTkgMTAgMiAyIDQtNCJ9XV19KTt2YXIgaDksSDZlPW4oKCk9PntoOT1bWyJwYXRoIix7ZDoibTE5IDIxLTctNC03IDRWNWEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MTZ6In1dLFsibGluZSIse3gxOiIxNSIseDI6IjkiLHkxOiIxMCIseTI6IjEwIn1dXX0pO3ZhciBtOSxxNmU9bigoKT0+e205PVtbInBhdGgiLHtkOiJtMTkgMjEtNy00LTcgNFY1YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxNnoifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiI3Iix5MjoiMTMifV0sWyJsaW5lIix7eDE6IjE1Iix4MjoiOSIseTE6IjEwIix5MjoiMTAifV1dfSk7dmFyIGc5LFY2ZT1uKCgpPT57Zzk9W1sicGF0aCIse2Q6Im0xOSAyMS03LTQtNyA0VjVhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyWiJ9XSxbInBhdGgiLHtkOiJtMTQuNSA3LjUtNSA1In1dLFsicGF0aCIse2Q6Im05LjUgNy41IDUgNSJ9XV19KTt2YXIgeDksVTZlPW4oKCk9Pnt4OT1bWyJwYXRoIix7ZDoibTE5IDIxLTctNC03IDRWNWEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MTZ6In1dXX0pO3ZhciBiOSxqNmU9bigoKT0+e2I5PVtbInBhdGgiLHtkOiJNNCA5VjVhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjQifV0sWyJwYXRoIix7ZDoiTTggOHYxIn1dLFsicGF0aCIse2Q6Ik0xMiA4djEifV0sWyJwYXRoIix7ZDoiTTE2IDh2MSJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTIiLHg6IjIiLHk6IjkiLHJ4OiIyIn1dLFsiY2lyY2xlIix7Y3g6IjgiLGN5OiIxNSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjE1IixyOiIyIn1dXX0pO3ZhciB2OSxXNmU9bigoKT0+e3Y5PVtbInBhdGgiLHtkOiJNMTIgNlYySDgifV0sWyJwYXRoIix7ZDoiTTE1IDExdjIifV0sWyJwYXRoIix7ZDoiTTIgMTJoMiJ9XSxbInBhdGgiLHtkOiJNMjAgMTJoMiJ9XSxbInBhdGgiLHtkOiJNMjAgMTZhMiAyIDAgMCAxLTIgMkg4LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgNCAyMC4yODZWOGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Ik05IDExdjIifV1dfSk7dmFyIHk5LEc2ZT1uKCgpPT57eTk9W1sicGF0aCIse2Q6Ik0xMy42NyA4SDE4YTIgMiAwIDAgMSAyIDJ2NC4zMyJ9XSxbInBhdGgiLHtkOiJNMiAxNGgyIn1dLFsicGF0aCIse2Q6Ik0yMCAxNGgyIn1dLFsicGF0aCIse2Q6Ik0yMiAyMiAyIDIifV0sWyJwYXRoIix7ZDoiTTggOEg2YTIgMiAwIDAgMC0yIDJ2OGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAxLjQxNC0uNTg2In1dLFsicGF0aCIse2Q6Ik05IDEzdjIifV0sWyJwYXRoIix7ZDoiTTkuNjcgNEgxMnYyLjMzIn1dXX0pO3ZhciB3OSxZNmU9bigoKT0+e3c5PVtbInBhdGgiLHtkOiJNMTIgOFY0SDgifV0sWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjEyIix4OiI0Iix5OiI4IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMiAxNGgyIn1dLFsicGF0aCIse2Q6Ik0yMCAxNGgyIn1dLFsicGF0aCIse2Q6Ik0xNSAxM3YyIn1dLFsicGF0aCIse2Q6Ik05IDEzdjIifV1dfSk7dmFyIE05LFo2ZT1uKCgpPT57TTk9W1sicGF0aCIse2Q6Ik0xMCAzYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhNiA2IDAgMCAwIDEuMiAzLjZsLjYuOEE2IDYgMCAwIDEgMTcgMTN2OGExIDEgMCAwIDEtMSAxSDhhMSAxIDAgMCAxLTEtMXYtOGE2IDYgMCAwIDEgMS4yLTMuNmwuNi0uOEE2IDYgMCAwIDAgMTAgNXoifV0sWyJwYXRoIix7ZDoiTTE3IDEzaC00YTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDQifV1dfSk7dmFyIHo5LFg2ZT1uKCgpPT57ejk9W1sicGF0aCIse2Q6Ik0xNyAzaDR2NCJ9XSxbInBhdGgiLHtkOiJNMTguNTc1IDExLjA4MmExMyAxMyAwIDAgMSAxLjA0OCA5LjAyNyAxLjE3IDEuMTcgMCAwIDEtMS45MTQuNTk3TDE0IDE3In1dLFsicGF0aCIse2Q6Ik03IDEwIDMuMjkgNi4yOWExLjE3IDEuMTcgMCAwIDEgLjYtMS45MSAxMyAxMyAwIDAgMSA5LjAzIDEuMDUifV0sWyJwYXRoIix7ZDoiTTcgMTRhMS43IDEuNyAwIDAgMC0xLjIwNy41bC0yLjY0NiAyLjY0NkEuNS41IDAgMCAwIDMuNSAxOEg1YTEgMSAwIDAgMSAxIDF2MS41YS41LjUgMCAwIDAgLjg1NC4zNTRMOS41IDE4LjIwN0ExLjcgMS43IDAgMCAwIDEwIDE3di0yYTEgMSAwIDAgMC0xLTF6In1dLFsicGF0aCIse2Q6Ik05LjcwNyAxNC4yOTMgMjEgMyJ9XV19KTt2YXIgazksUTZlPW4oKCk9PntrOT1bWyJwYXRoIix7ZDoiTTIxIDhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2WiJ9XSxbInBhdGgiLHtkOiJtMy4zIDcgOC43IDUgOC43LTUifV0sWyJwYXRoIix7ZDoiTTEyIDIyVjEyIn1dXX0pO3ZhciBTOSxLNmU9bigoKT0+e1M5PVtbInBhdGgiLHtkOiJNMi45NyAxMi45MkEyIDIgMCAwIDAgMiAxNC42M3YzLjI0YTIgMiAwIDAgMCAuOTcgMS43MWwzIDEuOGEyIDIgMCAwIDAgMi4wNiAwTDEyIDE5di01LjVsLTUtMy00LjAzIDIuNDJaIn1dLFsicGF0aCIse2Q6Im03IDE2LjUtNC43NC0yLjg1In1dLFsicGF0aCIse2Q6Im03IDE2LjUgNS0zIn1dLFsicGF0aCIse2Q6Ik03IDE2LjV2NS4xNyJ9XSxbInBhdGgiLHtkOiJNMTIgMTMuNVYxOWwzLjk3IDIuMzhhMiAyIDAgMCAwIDIuMDYgMGwzLTEuOGEyIDIgMCAwIDAgLjk3LTEuNzF2LTMuMjRhMiAyIDAgMCAwLS45Ny0xLjcxTDE3IDEwLjVsLTUgM1oifV0sWyJwYXRoIix7ZDoibTE3IDE2LjUtNS0zIn1dLFsicGF0aCIse2Q6Im0xNyAxNi41IDQuNzQtMi44NSJ9XSxbInBhdGgiLHtkOiJNMTcgMTYuNXY1LjE3In1dLFsicGF0aCIse2Q6Ik03Ljk3IDQuNDJBMiAyIDAgMCAwIDcgNi4xM3Y0LjM3bDUgMyA1LTNWNi4xM2EyIDIgMCAwIDAtLjk3LTEuNzFsLTMtMS44YTIgMiAwIDAgMC0yLjA2IDBsLTMgMS44WiJ9XSxbInBhdGgiLHtkOiJNMTIgOCA3LjI2IDUuMTUifV0sWyJwYXRoIix7ZDoibTEyIDggNC43NC0yLjg1In1dLFsicGF0aCIse2Q6Ik0xMiAxMy41VjgifV1dfSk7dmFyIFpuLEo2ZT1uKCgpPT57Wm49W1sicGF0aCIse2Q6Ik04IDNIN2EyIDIgMCAwIDAtMiAydjVhMiAyIDAgMCAxLTIgMiAyIDIgMCAwIDEgMiAydjVjMCAxLjEuOSAyIDIgMmgxIn1dLFsicGF0aCIse2Q6Ik0xNiAyMWgxYTIgMiAwIDAgMCAyLTJ2LTVjMC0xLjEuOS0yIDItMmEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAwLTItMmgtMSJ9XV19KTt2YXIgQzksZTVlPW4oKCk9PntDOT1bWyJwYXRoIix7ZDoiTTE2IDNoM2ExIDEgMCAwIDEgMSAxdjE2YTEgMSAwIDAgMS0xIDFoLTMifV0sWyJwYXRoIix7ZDoiTTggMjFINWExIDEgMCAwIDEtMS0xVjRhMSAxIDAgMCAxIDEtMWgzIn1dXX0pO3ZhciBMOSx0NWU9bigoKT0+e0w5PVtbInBhdGgiLHtkOiJNMTIgNWEzIDMgMCAxIDAtNS45OTcuMTI1IDQgNCAwIDAgMC0yLjUyNiA1Ljc3IDQgNCAwIDAgMCAuNTU2IDYuNTg4QTQgNCAwIDEgMCAxMiAxOFoifV0sWyJwYXRoIix7ZDoiTTkgMTNhNC41IDQuNSAwIDAgMCAzLTQifV0sWyJwYXRoIix7ZDoiTTYuMDAzIDUuMTI1QTMgMyAwIDAgMCA2LjQwMSA2LjUifV0sWyJwYXRoIix7ZDoiTTMuNDc3IDEwLjg5NmE0IDQgMCAwIDEgLjU4NS0uMzk2In1dLFsicGF0aCIse2Q6Ik02IDE4YTQgNCAwIDAgMS0xLjk2Ny0uNTE2In1dLFsicGF0aCIse2Q6Ik0xMiAxM2g0In1dLFsicGF0aCIse2Q6Ik0xMiAxOGg2YTIgMiAwIDAgMSAyIDJ2MSJ9XSxbInBhdGgiLHtkOiJNMTIgOGg4In1dLFsicGF0aCIse2Q6Ik0xNiA4VjVhMiAyIDAgMCAxIDItMiJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjEzIixyOiIuNSJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjMiLHI6Ii41In1dLFsiY2lyY2xlIix7Y3g6IjIwIixjeToiMjEiLHI6Ii41In1dLFsiY2lyY2xlIix7Y3g6IjIwIixjeToiOCIscjoiLjUifV1dfSk7dmFyIFQ5LGE1ZT1uKCgpPT57VDk9W1sicGF0aCIse2Q6Im0xMC44NTIgMTQuNzcyLS4zODMuOTIzIn1dLFsicGF0aCIse2Q6Im0xMC44NTIgOS4yMjgtLjM4My0uOTIzIn1dLFsicGF0aCIse2Q6Im0xMy4xNDggMTQuNzcyLjM4Mi45MjQifV0sWyJwYXRoIix7ZDoibTEzLjUzMSA4LjMwNS0uMzgzLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTQuNzcyIDEwLjg1Mi45MjMtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMTQuNzcyIDEzLjE0OC45MjMuMzgzIn1dLFsicGF0aCIse2Q6Ik0xNy41OTggNi41QTMgMyAwIDEgMCAxMiA1YTMgMyAwIDAgMC01LjYzLTEuNDQ2IDMgMyAwIDAgMC0uMzY4IDEuNTcxIDQgNCAwIDAgMC0yLjUyNSA1Ljc3MSJ9XSxbInBhdGgiLHtkOiJNMTcuOTk4IDUuMTI1YTQgNCAwIDAgMSAyLjUyNSA1Ljc3MSJ9XSxbInBhdGgiLHtkOiJNMTkuNTA1IDEwLjI5NGE0IDQgMCAwIDEtMS41IDcuNzA2In1dLFsicGF0aCIse2Q6Ik00LjAzMiAxNy40ODNBNCA0IDAgMCAwIDExLjQ2NCAyMGMuMTgtLjMxMS44OTItLjMxMSAxLjA3MiAwYTQgNCAwIDAgMCA3LjQzMi0yLjUxNiJ9XSxbInBhdGgiLHtkOiJNNC41IDEwLjI5MUE0IDQgMCAwIDAgNiAxOCJ9XSxbInBhdGgiLHtkOiJNNi4wMDIgNS4xMjVhMyAzIDAgMCAwIC40IDEuMzc1In1dLFsicGF0aCIse2Q6Im05LjIyOCAxMC44NTItLjkyMy0uMzgzIn1dLFsicGF0aCIse2Q6Im05LjIyOCAxMy4xNDgtLjkyMy4zODMifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMyJ9XV19KTt2YXIgXzkscjVlPW4oKCk9PntfOT1bWyJwYXRoIix7ZDoiTTEyIDE4VjUifV0sWyJwYXRoIix7ZDoiTTE1IDEzYTQuMTcgNC4xNyAwIDAgMS0zLTQgNC4xNyA0LjE3IDAgMCAxLTMgNCJ9XSxbInBhdGgiLHtkOiJNMTcuNTk4IDYuNUEzIDMgMCAxIDAgMTIgNWEzIDMgMCAxIDAtNS41OTggMS41In1dLFsicGF0aCIse2Q6Ik0xNy45OTcgNS4xMjVhNCA0IDAgMCAxIDIuNTI2IDUuNzcifV0sWyJwYXRoIix7ZDoiTTE4IDE4YTQgNCAwIDAgMCAyLTcuNDY0In1dLFsicGF0aCIse2Q6Ik0xOS45NjcgMTcuNDgzQTQgNCAwIDEgMSAxMiAxOGE0IDQgMCAxIDEtNy45NjctLjUxNyJ9XSxbInBhdGgiLHtkOiJNNiAxOGE0IDQgMCAwIDEtMi03LjQ2NCJ9XSxbInBhdGgiLHtkOiJNNi4wMDMgNS4xMjVhNCA0IDAgMCAwLTIuNTI2IDUuNzcifV1dfSk7dmFyIEE5LGk1ZT1uKCgpPT57QTk9W1sicGF0aCIse2Q6Ik0xNiAzdjIuMTA3In1dLFsicGF0aCIse2Q6Ik0xNyA5YzEgMyAyLjUgMy41IDMuNSA0LjVBNSA1IDAgMCAxIDIyIDE3YTUgNSAwIDAgMS0xMCAwYzAtLjMgMC0uNi4xLS45YTIgMiAwIDEgMCAzLjMtMkMxMyAxMS41IDE2IDkgMTcgOSJ9XSxbInBhdGgiLHtkOiJNMjEgOC4yNzRWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDMuOTM4In1dLFsicGF0aCIse2Q6Ik0zIDE1aDUuMjUzIn1dLFsicGF0aCIse2Q6Ik0zIDloOC4yMjgifV0sWyJwYXRoIix7ZDoiTTggMTV2NiJ9XSxbInBhdGgiLHtkOiJNOCAzdjYifV1dfSk7dmFyICQ5LG81ZT1uKCgpPT57JDk9W1sicGF0aCIse2Q6Ik0xMiA5djEuMjU4In1dLFsicGF0aCIse2Q6Ik0xNiAzdjUuNDYifV0sWyJwYXRoIix7ZDoiTTIxIDkuMTE4VjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg1Ljc1In1dLFsicGF0aCIse2Q6Ik0yMiAxNy41YzAgMi40OTktMS43NSAzLjc0OS0zLjgzIDQuNDc0YS41LjUgMCAwIDEtLjMzNS0uMDA1Yy0yLjA4NS0uNzItMy44MzUtMS45Ny0zLjgzNS00LjQ3VjE0YS41LjUgMCAwIDEgLjUtLjQ5OWMxIDAgMi4yNS0uNiAzLjEyLTEuMzZhLjYuNiAwIDAgMSAuNzYtLjAwMWMuODc1Ljc2NSAyLjEyIDEuMzYgMy4xMiAxLjM2YS41LjUgMCAwIDEgLjUuNXoifV0sWyJwYXRoIix7ZDoiTTMgMTVoNyJ9XSxbInBhdGgiLHtkOiJNMyA5aDEyLjE0MiJ9XSxbInBhdGgiLHtkOiJNOCAxNXY2In1dLFsicGF0aCIse2Q6Ik04IDN2NiJ9XV19KTt2YXIgRDksczVlPW4oKCk9PntEOT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgOXY2In1dLFsicGF0aCIse2Q6Ik0xNiAxNXY2In1dLFsicGF0aCIse2Q6Ik0xNiAzdjYifV0sWyJwYXRoIix7ZDoiTTMgMTVoMTgifV0sWyJwYXRoIix7ZDoiTTMgOWgxOCJ9XSxbInBhdGgiLHtkOiJNOCAxNXY2In1dLFsicGF0aCIse2Q6Ik04IDN2NiJ9XV19KTt2YXIgRTksbjVlPW4oKCk9PntFOT1bWyJwYXRoIix7ZDoiTTEyIDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgNlY0YTIgMiAwIDAgMC0yLTJoLTRhMiAyIDAgMCAwLTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0yMiAxM2ExOC4xNSAxOC4xNSAwIDAgMS0yMCAwIn1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNCIseDoiMiIseToiNiIscng6IjIifV1dfSk7dmFyIE45LGw1ZT1uKCgpPT57Tjk9W1sicGF0aCIse2Q6Ik0xMCAyMHYyIn1dLFsicGF0aCIse2Q6Ik0xNCAyMHYyIn1dLFsicGF0aCIse2Q6Ik0xOCAyMHYyIn1dLFsicGF0aCIse2Q6Ik0yMSAyMEgzIn1dLFsicGF0aCIse2Q6Ik02IDIwdjIifV0sWyJwYXRoIix7ZDoiTTggMTZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxMiJ9XSxbInJlY3QiLHt4OiI0Iix5OiI2Iix3aWR0aDoiMTYiLGhlaWdodDoiMTAiLHJ4OiIyIn1dXX0pO3ZhciBQOSxjNWU9bigoKT0+e1A5PVtbInBhdGgiLHtkOiJNMTIgMTF2NCJ9XSxbInBhdGgiLHtkOiJNMTQgMTNoLTQifV0sWyJwYXRoIix7ZDoiTTE2IDZWNGEyIDIgMCAwIDAtMi0yaC00YTIgMiAwIDAgMC0yIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTggNnYxNCJ9XSxbInBhdGgiLHtkOiJNNiA2djE0In1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNCIseDoiMiIseToiNiIscng6IjIifV1dfSk7dmFyIEk5LGQ1ZT1uKCgpPT57STk9W1sicGF0aCIse2Q6Ik0xNiAyMFY0YTIgMiAwIDAgMC0yLTJoLTRhMiAyIDAgMCAwLTIgMnYxNiJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTQiLHg6IjIiLHk6IjYiLHJ4OiIyIn1dXX0pO3ZhciBGOSxmNWU9bigoKT0+e0Y5PVtbInJlY3QiLHt4OiI4Iix5OiI4Iix3aWR0aDoiOCIsaGVpZ2h0OiI4IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNCAxMGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTE0IDIwYTIgMiAwIDAgMCAyIDJoNGEyIDIgMCAwIDAgMi0ydi00YTIgMiAwIDAgMC0yLTIifV1dfSk7dmFyIE85LHU1ZT1uKCgpPT57Tzk9W1sicGF0aCIse2Q6Im0xNiAyMi0xLTQifV0sWyJwYXRoIix7ZDoiTTE5IDE0YTEgMSAwIDAgMCAxLTF2LTFhMiAyIDAgMCAwLTItMmgtM2ExIDEgMCAwIDEtMS0xVjRhMiAyIDAgMCAwLTQgMHY1YTEgMSAwIDAgMS0xIDFINmEyIDIgMCAwIDAtMiAydjFhMSAxIDAgMCAwIDEgMSJ9XSxbInBhdGgiLHtkOiJNMTkgMTRINWwtMS45NzMgNi43NjdBMSAxIDAgMCAwIDQgMjJoMTZhMSAxIDAgMCAwIC45NzMtMS4yMzN6In1dLFsicGF0aCIse2Q6Im04IDIyIDEtNCJ9XV19KTt2YXIgQjkscDVlPW4oKCk9PntCOT1bWyJwYXRoIix7ZDoibTExIDEwIDMgMyJ9XSxbInBhdGgiLHtkOiJNNi41IDIxQTMuNSAzLjUgMCAxIDAgMyAxNy41YTIuNjIgMi42MiAwIDAgMS0uNzA4IDEuNzkyQTEgMSAwIDAgMCAzIDIxeiJ9XSxbInBhdGgiLHtkOiJNOS45NjkgMTcuMDMxIDIxLjM3OCA1LjYyNGExIDEgMCAwIDAtMy4wMDItMy4wMDJMNi45NjcgMTQuMDMxIn1dXX0pO3ZhciBSOSxoNWU9bigoKT0+e1I5PVtbInBhdGgiLHtkOiJNNy4wMDEgMTUuMDg1QTEuNSAxLjUgMCAwIDEgOSAxNi41In1dLFsiY2lyY2xlIix7Y3g6IjE4LjUiLGN5OiI4LjUiLHI6IjMuNSJ9XSxbImNpcmNsZSIse2N4OiI3LjUiLGN5OiIxNi41IixyOiI1LjUifV0sWyJjaXJjbGUiLHtjeDoiNy41IixjeToiNC41IixyOiIyLjUifV1dfSk7dmFyIEg5LG01ZT1uKCgpPT57SDk9W1sicGF0aCIse2Q6Ik0xMiAyMHYtOCJ9XSxbInBhdGgiLHtkOiJNMTQuMTIgMy44OCAxNiAyIn1dLFsicGF0aCIse2Q6Ik0xNSA3LjEzVjZhMyAzIDAgMCAwLTUuMTQtMi4xTDggMiJ9XSxbInBhdGgiLHtkOiJNMTggMTIuMzRWMTFhNCA0IDAgMCAwLTQtNGgtMS4zIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTIxIDVhNCA0IDAgMCAxLTMuNTUgMy45NyJ9XSxbInBhdGgiLHtkOiJNMjIgMTNoLTMuMzQifV0sWyJwYXRoIix7ZDoiTTMgMjFhNCA0IDAgMCAxIDMuODEtNCJ9XSxbInBhdGgiLHtkOiJNNiAxM0gyIn1dLFsicGF0aCIse2Q6Ik03LjcgNy43QTQgNCAwIDAgMCA2IDExdjNhNiA2IDAgMCAwIDExLjEzIDMuMTMifV1dfSk7dmFyIHE5LGc1ZT1uKCgpPT57cTk9W1sicGF0aCIse2Q6Ik0xMCAxOS42NTVBNiA2IDAgMCAxIDYgMTR2LTNhNCA0IDAgMCAxIDQtNGg0YTQgNCAwIDAgMSA0IDMuOTcifV0sWyJwYXRoIix7ZDoiTTE0IDE1LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdhMSAxIDAgMCAxLTEuNTE3LS44NnoifV0sWyJwYXRoIix7ZDoiTTE0LjEyIDMuODggMTYgMiJ9XSxbInBhdGgiLHtkOiJNMjEgNWE0IDQgMCAwIDEtMy41NSAzLjk3In1dLFsicGF0aCIse2Q6Ik0zIDIxYTQgNCAwIDAgMSAzLjgxLTQifV0sWyJwYXRoIix7ZDoiTTMgNWE0IDQgMCAwIDAgMy41NSAzLjk3In1dLFsicGF0aCIse2Q6Ik02IDEzSDIifV0sWyJwYXRoIix7ZDoibTggMiAxLjg4IDEuODgifV0sWyJwYXRoIix7ZDoiTTkgNy4xM1Y2YTMgMyAwIDEgMSA2IDB2MS4xMyJ9XV19KTt2YXIgVjkseDVlPW4oKCk9PntWOT1bWyJwYXRoIix7ZDoiTTEyIDIwdi05In1dLFsicGF0aCIse2Q6Ik0xNCA3YTQgNCAwIDAgMSA0IDR2M2E2IDYgMCAwIDEtMTIgMHYtM2E0IDQgMCAwIDEgNC00eiJ9XSxbInBhdGgiLHtkOiJNMTQuMTIgMy44OCAxNiAyIn1dLFsicGF0aCIse2Q6Ik0yMSAyMWE0IDQgMCAwIDAtMy44MS00In1dLFsicGF0aCIse2Q6Ik0yMSA1YTQgNCAwIDAgMS0zLjU1IDMuOTcifV0sWyJwYXRoIix7ZDoiTTIyIDEzaC00In1dLFsicGF0aCIse2Q6Ik0zIDIxYTQgNCAwIDAgMSAzLjgxLTQifV0sWyJwYXRoIix7ZDoiTTMgNWE0IDQgMCAwIDAgMy41NSAzLjk3In1dLFsicGF0aCIse2Q6Ik02IDEzSDIifV0sWyJwYXRoIix7ZDoibTggMiAxLjg4IDEuODgifV0sWyJwYXRoIix7ZDoiTTkgNy4xM1Y2YTMgMyAwIDEgMSA2IDB2MS4xMyJ9XV19KTt2YXIgVTksYjVlPW4oKCk9PntVOT1bWyJwYXRoIix7ZDoiTTEwIDEyaDQifV0sWyJwYXRoIix7ZDoiTTEwIDhoNCJ9XSxbInBhdGgiLHtkOiJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIn1dLFsicGF0aCIse2Q6Ik02IDEwSDRhMiAyIDAgMCAwLTIgMnY3YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMlY5YTIgMiAwIDAgMC0yLTJoLTIifV0sWyJwYXRoIix7ZDoiTTYgMjFWNWEyIDIgMCAwIDEgMi0yaDhhMiAyIDAgMCAxIDIgMnYxNiJ9XV19KTt2YXIgajksdjVlPW4oKCk9PntqOT1bWyJwYXRoIix7ZDoiTTEyIDEwaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTRoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiA2aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTBoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDZoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDEwaC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTggNmguMDEifV0sWyJwYXRoIix7ZDoiTTkgMjJ2LTNhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAxIDF2MyJ9XSxbInJlY3QiLHt4OiI0Iix5OiIyIix3aWR0aDoiMTYiLGhlaWdodDoiMjAiLHJ4OiIyIn1dXX0pO3ZhciBXOSx5NWU9bigoKT0+e1c5PVtbInBhdGgiLHtkOiJNNCA2IDIgNyJ9XSxbInBhdGgiLHtkOiJNMTAgNmg0In1dLFsicGF0aCIse2Q6Im0yMiA3LTItMSJ9XSxbInJlY3QiLHt3aWR0aDoiMTYiLGhlaWdodDoiMTYiLHg6IjQiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik00IDExaDE2In1dLFsicGF0aCIse2Q6Ik04IDE1aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTVoLjAxIn1dLFsicGF0aCIse2Q6Ik02IDE5djIifV0sWyJwYXRoIix7ZDoiTTE4IDIxdi0yIn1dXX0pO3ZhciBHOSx3NWU9bigoKT0+e0c5PVtbInBhdGgiLHtkOiJNOCA2djYifV0sWyJwYXRoIix7ZDoiTTE1IDZ2NiJ9XSxbInBhdGgiLHtkOiJNMiAxMmgxOS42In1dLFsicGF0aCIse2Q6Ik0xOCAxOGgzcy41LTEuNy44LTIuOGMuMS0uNC4yLS44LjItMS4yIDAtLjQtLjEtLjgtLjItMS4ybC0xLjQtNUMyMC4xIDYuOCAxOS4xIDYgMTggNkg0YTIgMiAwIDAgMC0yIDJ2MTBoMyJ9XSxbImNpcmNsZSIse2N4OiI3IixjeToiMTgiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTkgMThoNSJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjE4IixyOiIyIn1dXX0pO3ZhciBZOSxNNWU9bigoKT0+e1k5PVtbInBhdGgiLHtkOiJNMTAgM2guMDEifV0sWyJwYXRoIix7ZDoiTTE0IDJoLjAxIn1dLFsicGF0aCIse2Q6Im0yIDkgMjAtNSJ9XSxbInBhdGgiLHtkOiJNMTIgMTJWNi41In1dLFsicmVjdCIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxMCIseDoiNCIseToiMTIiLHJ4OiIzIn1dLFsicGF0aCIse2Q6Ik05IDEydjUifV0sWyJwYXRoIix7ZDoiTTE1IDEydjUifV0sWyJwYXRoIix7ZDoiTTQgMTdoMTYifV1dfSk7dmFyIFo5LHo1ZT1uKCgpPT57Wjk9W1sicGF0aCIse2Q6Ik0xNyAxOWExIDEgMCAwIDEtMS0xdi0yYTIgMiAwIDAgMSAyLTJoMmEyIDIgMCAwIDEgMiAydjJhMSAxIDAgMCAxLTEgMXoifV0sWyJwYXRoIix7ZDoiTTE3IDIxdi0yIn1dLFsicGF0aCIse2Q6Ik0xOSAxNFY2LjVhMSAxIDAgMCAwLTcgMHYxMWExIDEgMCAwIDEtNyAwVjEwIn1dLFsicGF0aCIse2Q6Ik0yMSAyMXYtMiJ9XSxbInBhdGgiLHtkOiJNMyA1VjMifV0sWyJwYXRoIix7ZDoiTTQgMTBhMiAyIDAgMCAxLTItMlY2YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTcgNVYzIn1dXX0pO3ZhciBYOSxrNWU9bigoKT0+e1g5PVtbInBhdGgiLHtkOiJNMTYgMTNIMyJ9XSxbInBhdGgiLHtkOiJNMTYgMTdIMyJ9XSxbInBhdGgiLHtkOiJtNy4yIDcuOS0zLjM4OCAyLjVBMiAyIDAgMCAwIDMgMTIuMDFWMjBhMSAxIDAgMCAwIDEgMWgxNmExIDEgMCAwIDAgMS0xdi04LjY1NGMwLTItMi40NC02LjAyNi02LjQ0LTguMDI2YTEgMSAwIDAgMC0xLjA4Mi4wNTdMMTAuNCA1LjYifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjciLHI6IjIifV1dfSk7dmFyIFE5LFM1ZT1uKCgpPT57UTk9W1sicGF0aCIse2Q6Ik0yMCAyMXYtOGEyIDIgMCAwIDAtMi0ySDZhMiAyIDAgMCAwLTIgMnY4In1dLFsicGF0aCIse2Q6Ik00IDE2cy41LTEgMi0xIDIuNSAyIDQgMiAyLjUtMiA0LTIgMi41IDIgNCAyIDItMSAyLTEifV0sWyJwYXRoIix7ZDoiTTIgMjFoMjAifV0sWyJwYXRoIix7ZDoiTTcgOHYzIn1dLFsicGF0aCIse2Q6Ik0xMiA4djMifV0sWyJwYXRoIix7ZDoiTTE3IDh2MyJ9XSxbInBhdGgiLHtkOiJNNyA0aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgNGguMDEifV0sWyJwYXRoIix7ZDoiTTE3IDRoLjAxIn1dXX0pO3ZhciBLOSxDNWU9bigoKT0+e0s5PVtbInJlY3QiLHt3aWR0aDoiMTYiLGhlaWdodDoiMjAiLHg6IjQiLHk6IjIiLHJ4OiIyIn1dLFsibGluZSIse3gxOiI4Iix4MjoiMTYiLHkxOiI2Iix5MjoiNiJ9XSxbImxpbmUiLHt4MToiMTYiLHgyOiIxNiIseTE6IjE0Iix5MjoiMTgifV0sWyJwYXRoIix7ZDoiTTE2IDEwaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTBoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDEwaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTRoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDE0aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMThoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDE4aC4wMSJ9XV19KTt2YXIgSjksTDVlPW4oKCk9PntKOT1bWyJwYXRoIix7ZDoiTTExIDE0aDF2NCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbInJlY3QiLHt4OiIzIix5OiI0Iix3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHJ4OiIyIn1dXX0pO3ZhciBlaCxUNWU9bigoKT0+e2VoPVtbInBhdGgiLHtkOiJtMTQgMTggNCA0IDQtNCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0xOCAxNHY4In1dLFsicGF0aCIse2Q6Ik0yMSAxMS4zNTRWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDcuMzQzIn1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XV19KTt2YXIgdGgsXzVlPW4oKCk9Pnt0aD1bWyJwYXRoIix7ZDoibTE0IDE4IDQtNCA0IDQifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTggMjJ2LTgifV0sWyJwYXRoIix7ZDoiTTIxIDExLjM0M1Y2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOSJ9XSxbInBhdGgiLHtkOiJNMyAxMGgxOCJ9XSxbInBhdGgiLHtkOiJNOCAydjQifV1dfSk7dmFyIGFoLEE1ZT1uKCgpPT57YWg9W1sicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0yMSAxNFY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOCJ9XSxbInBhdGgiLHtkOiJNMyAxMGgxOCJ9XSxbInBhdGgiLHtkOiJtMTYgMjAgMiAyIDQtNCJ9XV19KTt2YXIgcmgsJDVlPW4oKCk9PntyaD1bWyJwYXRoIix7ZDoiTTggMnY0In1dLFsicGF0aCIse2Q6Ik0xNiAydjQifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiI0IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyAxMGgxOCJ9XSxbInBhdGgiLHtkOiJtOSAxNiAyIDIgNC00In1dXX0pO3ZhciBpaCxENWU9bigoKT0+e2loPVtbInBhdGgiLHtkOiJtMTUuMjI4IDE2Ljg1Mi0uOTIzLS4zODMifV0sWyJwYXRoIix7ZDoibTE1LjIyOCAxOS4xNDgtLjkyMy4zODMifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJtMTYuNDcgMTQuMzA1LjM4Mi45MjMifV0sWyJwYXRoIix7ZDoibTE2Ljg1MiAyMC43NzItLjM4My45MjQifV0sWyJwYXRoIix7ZDoibTE5LjE0OCAxNS4yMjguMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTE5LjUzIDIxLjY5Ni0uMzgyLS45MjQifV0sWyJwYXRoIix7ZDoibTIwLjc3MiAxNi44NTIuOTI0LS4zODMifV0sWyJwYXRoIix7ZDoibTIwLjc3MiAxOS4xNDguOTI0LjM4MyJ9XSxbInBhdGgiLHtkOiJNMjEgMTAuNTkyVjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2In1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE4IixyOiIzIn1dXX0pO3ZhciBvaCxFNWU9bigoKT0+e29oPVtbInBhdGgiLHtkOiJNMTYgMTR2Mi4ybDEuNiAxIn1dLFsicGF0aCIse2Q6Ik0xNiAydjQifV0sWyJwYXRoIix7ZDoiTTIxIDcuNVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMy41In1dLFsicGF0aCIse2Q6Ik0zIDEwaDUifV0sWyJwYXRoIix7ZDoiTTggMnY0In1dLFsiY2lyY2xlIix7Y3g6IjE2IixjeToiMTYiLHI6IjYifV1dfSk7dmFyIHNoLE41ZT1uKCgpPT57c2g9W1sicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV0sWyJwYXRoIix7ZDoiTTggMTRoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDE0aC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxOGguMDEifV0sWyJwYXRoIix7ZDoiTTEyIDE4aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMThoLjAxIn1dXX0pO3ZhciBuaCxQNWU9bigoKT0+e25oPVtbInBhdGgiLHtkOiJNMyAyMGEyIDIgMCAwIDAgMiAyaDEwYTIuNCAyLjQgMCAwIDAgMS43MDYtLjcwNmwzLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDIxIDE2VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNSAyMnYtNWExIDEgMCAwIDEgMS0xaDUifV0sWyJwYXRoIix7ZDoiTTggMnY0In1dLFsicGF0aCIse2Q6Ik0xNiAydjQifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV1dfSk7dmFyIGxoLEk1ZT1uKCgpPT57bGg9W1sicGF0aCIse2Q6Ik0xMi4xMjcgMjJINWEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjUuMTI1In1dLFsicGF0aCIse2Q6Ik0xNC42MiAxOC44QTIuMjUgMi4yNSAwIDEgMSAxOCAxNS44MzZhMi4yNSAyLjI1IDAgMSAxIDMuMzggMi45NjZsLTIuNjI2IDIuODU2YS45OTguOTk4IDAgMCAxLTEuNTA3IDB6In1dLFsicGF0aCIse2Q6Ik0xNiAydjQifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV0sWyJwYXRoIix7ZDoiTTggMnY0In1dXX0pO3ZhciBjaCxGNWU9bigoKT0+e2NoPVtbInBhdGgiLHtkOiJNOCAydjQifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik0xMCAxNmg0In1dXX0pO3ZhciBkaCxPNWU9bigoKT0+e2RoPVtbInBhdGgiLHtkOiJNMTYgMTloNiJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0yMSAxNVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOC41In1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XV19KTt2YXIgZmgsQjVlPW4oKCk9PntmaD1bWyJwYXRoIix7ZDoiTTQuMiA0LjJBMiAyIDAgMCAwIDMgNnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAxLjgyLTEuMTgifV0sWyJwYXRoIix7ZDoiTTIxIDE1LjVWNmEyIDIgMCAwIDAtMi0ySDkuNSJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0zIDEwaDcifV0sWyJwYXRoIix7ZDoiTTIxIDEwaC01LjUifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XV19KTt2YXIgdWgsUjVlPW4oKCk9Pnt1aD1bWyJwYXRoIix7ZDoiTTggMnY0In1dLFsicGF0aCIse2Q6Ik0xNiAydjQifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiI0IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyAxMGgxOCJ9XSxbInBhdGgiLHtkOiJNMTAgMTZoNCJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2NCJ9XV19KTt2YXIgcGgsSDVlPW4oKCk9PntwaD1bWyJwYXRoIix7ZDoiTTE2IDE5aDYifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTkgMTZ2NiJ9XSxbInBhdGgiLHtkOiJNMjEgMTIuNTk4VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg4LjUifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV0sWyJwYXRoIix7ZDoiTTggMnY0In1dXX0pO3ZhciBoaCxxNWU9bigoKT0+e2hoPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xNiAydjQifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV0sWyJwYXRoIix7ZDoiTTggMnY0In1dLFsicGF0aCIse2Q6Ik0xNyAxNGgtNiJ9XSxbInBhdGgiLHtkOiJNMTMgMThINyJ9XSxbInBhdGgiLHtkOiJNNyAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTE3IDE4aC4wMSJ9XV19KTt2YXIgbWgsVjVlPW4oKCk9PnttaD1bWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMjEgMTEuNzVWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDcuMjUifV0sWyJwYXRoIix7ZDoibTIyIDIyLTEuODc1LTEuODc1In1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE4IixyOiIzIn1dXX0pO3ZhciBnaCxVNWU9bigoKT0+e2doPVtbInBhdGgiLHtkOiJNMTEgMTB2NGg0In1dLFsicGF0aCIse2Q6Im0xMSAxNCAxLjUzNS0xLjYwNWE1IDUgMCAwIDEgOCAxLjUifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJtMjEgMTgtMS41MzUgMS42MDVhNSA1IDAgMCAxLTgtMS41In1dLFsicGF0aCIse2Q6Ik0yMSAyMnYtNGgtNCJ9XSxbInBhdGgiLHtkOiJNMjEgOC41VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg0LjMifV0sWyJwYXRoIix7ZDoiTTMgMTBoNCJ9XSxbInBhdGgiLHtkOiJNOCAydjQifV1dfSk7dmFyIHhoLGo1ZT1uKCgpPT57eGg9W1sicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0yMSAxM1Y2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOCJ9XSxbInBhdGgiLHtkOiJNMyAxMGgxOCJ9XSxbInBhdGgiLHtkOiJtMTcgMjIgNS01In1dLFsicGF0aCIse2Q6Im0xNyAxNyA1IDUifV1dfSk7dmFyIGJoLFc1ZT1uKCgpPT57Ymg9W1sicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV0sWyJwYXRoIix7ZDoibTE0IDE0LTQgNCJ9XSxbInBhdGgiLHtkOiJtMTAgMTQgNCA0In1dXX0pO3ZhciB2aCxHNWU9bigoKT0+e3ZoPVtbInBhdGgiLHtkOiJNOCAydjQifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dXX0pO3ZhciB5aCxZNWU9bigoKT0+e3loPVtbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xNS43MjYgMjEuMDFBMiAyIDAgMCAxIDE0IDIySDRhMiAyIDAgMCAxLTItMlYxMGEyIDIgMCAwIDEgMi0yIn1dLFsicGF0aCIse2Q6Ik0xOCAydjIifV0sWyJwYXRoIix7ZDoiTTIgMTNoMiJ9XSxbInBhdGgiLHtkOiJNOCA4aDE0In1dLFsicmVjdCIse3g6IjgiLHk6IjMiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIifV1dfSk7dmFyIHdoLFo1ZT1uKCgpPT57d2g9W1sicGF0aCIse2Q6Ik0xNC41NjQgMTQuNTU4YTMgMyAwIDEgMS00LjEyMi00LjEyMSJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik0yMCAyMEg0YTIgMiAwIDAgMS0yLTJWOWEyIDIgMCAwIDEgMi0yaDEuOTk3YTIgMiAwIDAgMCAuODE5LS4xNzUifV0sWyJwYXRoIix7ZDoiTTkuNjk1IDQuMDI0QTIgMiAwIDAgMSAxMC4wMDQgNGgzLjk5M2EyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY3LjM0NCJ9XV19KTt2YXIgTWgsWDVlPW4oKCk9PntNaD1bWyJwYXRoIix7ZDoiTTEzLjk5NyA0YTIgMiAwIDAgMSAxLjc2IDEuMDVsLjQ4Ni45QTIgMiAwIDAgMCAxOC4wMDMgN0gyMGEyIDIgMCAwIDEgMiAydjlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOWEyIDIgMCAwIDEgMi0yaDEuOTk3YTIgMiAwIDAgMCAxLjc1OS0xLjA0OGwuNDg5LS45MDRBMiAyIDAgMCAxIDEwLjAwNCA0eiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEzIixyOiIzIn1dXX0pO3ZhciB6aCxRNWU9bigoKT0+e3poPVtbInBhdGgiLHtkOiJNNS43IDIxYTIgMiAwIDAgMS0zLjUtMmw4LjYtMTRhNiA2IDAgMCAxIDEwLjQgNiAyIDIgMCAxIDEtMy40NjQtMiAyIDIgMCAxIDAtMy40NjQtMloifV0sWyJwYXRoIix7ZDoiTTE3Ljc1IDcgMTUgMi4xIn1dLFsicGF0aCIse2Q6Ik0xMC45IDQuOCAxMyA5In1dLFsicGF0aCIse2Q6Im03LjkgOS43IDIgNC40In1dLFsicGF0aCIse2Q6Ik00LjkgMTQuNyA3IDE4LjkifV1dfSk7dmFyIGtoLEs1ZT1uKCgpPT57a2g9W1sicGF0aCIse2Q6Ik0xMCAxMHY3LjkifV0sWyJwYXRoIix7ZDoiTTExLjgwMiA2LjE0NWE1IDUgMCAwIDEgNi4wNTMgNi4wNTMifV0sWyJwYXRoIix7ZDoiTTE0IDYuMXYyLjI0MyJ9XSxbInBhdGgiLHtkOiJtMTUuNSAxNS41NzEtLjk2NC45NjRhNSA1IDAgMCAxLTcuMDcxIDAgNSA1IDAgMCAxIDAtNy4wN2wuOTY0LS45NjUifV0sWyJwYXRoIix7ZDoiTTE2IDdWM2ExIDEgMCAwIDEgMS43MDctLjcwNyAyLjUgMi41IDAgMCAwIDIuMTUyLjcxNyAxIDEgMCAwIDEgMS4xMzEgMS4xMzEgMi41IDIuNSAwIDAgMCAuNzE3IDIuMTUyQTEgMSAwIDAgMSAyMSA4aC00In1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTggMTd2NGExIDEgMCAwIDEtMS43MDcuNzA3IDIuNSAyLjUgMCAwIDAtMi4xNTItLjcxNyAxIDEgMCAwIDEtMS4xMzEtMS4xMzEgMi41IDIuNSAwIDAgMC0uNzE3LTIuMTUyQTEgMSAwIDAgMSAzIDE2aDQifV1dfSk7dmFyIFNoLEo1ZT1uKCgpPT57U2g9W1sicGF0aCIse2Q6Ik0xMCA3djEwLjkifV0sWyJwYXRoIix7ZDoiTTE0IDYuMVYxNyJ9XSxbInBhdGgiLHtkOiJNMTYgN1YzYTEgMSAwIDAgMSAxLjcwNy0uNzA3IDIuNSAyLjUgMCAwIDAgMi4xNTIuNzE3IDEgMSAwIDAgMSAxLjEzMSAxLjEzMSAyLjUgMi41IDAgMCAwIC43MTcgMi4xNTJBMSAxIDAgMCAxIDIxIDhoLTQifV0sWyJwYXRoIix7ZDoiTTE2LjUzNiA3LjQ2NWE1IDUgMCAwIDAtNy4wNzIgMGwtMiAyYTUgNSAwIDAgMCAwIDcuMDcgNSA1IDAgMCAwIDcuMDcyIDBsMi0yYTUgNSAwIDAgMCAwLTcuMDcifV0sWyJwYXRoIix7ZDoiTTggMTd2NGExIDEgMCAwIDEtMS43MDcuNzA3IDIuNSAyLjUgMCAwIDAtMi4xNTItLjcxNyAxIDEgMCAwIDEtMS4xMzEtMS4xMzEgMi41IDIuNSAwIDAgMC0uNzE3LTIuMTUyQTEgMSAwIDAgMSAzIDE2aDQifV1dfSk7dmFyIENoLGU4ZT1uKCgpPT57Q2g9W1sicGF0aCIse2Q6Ik0xMiAyMnYtNGMxLjUgMS41IDMuNSAzIDYgMyAwLTEuNS0uNS0zLjUtMi01In1dLFsicGF0aCIse2Q6Ik0xMy45ODggOC4zMjdDMTMuOTAyIDYuMDU0IDEzLjM2NSAzLjgyIDEyIDJhOS4zIDkuMyAwIDAgMC0xLjQ0NSAyLjkifV0sWyJwYXRoIix7ZDoiTTE3LjM3NSAxMS43MjVDMTguODgyIDEwLjUzIDIxIDcuODQxIDIxIDZjLTIuMzI0IDAtNS4wOCAxLjI5Ni02LjY2MiAyLjY4NCJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik0yMS4wMjQgMTUuMzc4QTE1IDE1IDAgMCAwIDIyIDE1Yy0uNDI2LTEuMjc5LTIuNjctMi41NTctNC4yNS0yLjkwNyJ9XSxbInBhdGgiLHtkOiJNNi45OTUgNi45OTJDNS43MTQgNi40IDQuMjkgNiAzIDZjMCAyIDIuNSA1IDQgNi0xLjUgMC00LjUgMS41LTUgMyAzLjUgMS41IDYgMSA2IDEtMS41IDEuNS0yIDMuNS0yIDUgMi41IDAgNC41LTEuNSA2LTMifV1dfSk7dmFyIExoLHQ4ZT1uKCgpPT57TGg9W1sicGF0aCIse2Q6Ik0xMiAyMnYtNCJ9XSxbInBhdGgiLHtkOiJNNyAxMmMtMS41IDAtNC41IDEuNS01IDMgMy41IDEuNSA2IDEgNiAxLTEuNSAxLjUtMiAzLjUtMiA1IDIuNSAwIDQuNS0xLjUgNi0zIDEuNSAxLjUgMy41IDMgNiAzIDAtMS41LS41LTMuNS0yLTUgMCAwIDIuNS41IDYtMS0uNS0xLjUtMy41LTMtNS0zIDEuNS0xIDQtNCA0LTYtMi41IDAtNS41IDEuNS03IDMgMC0yLjUtLjUtNS0yLTctMS41IDItMiA0LjUtMiA3LTEuNS0xLjUtNC41LTMtNy0zIDAgMiAyLjUgNSA0IDYifV1dfSk7dmFyIFRoLGE4ZT1uKCgpPT57VGg9W1sicGF0aCIse2Q6Ik0xMC41IDVIMTlhMiAyIDAgMCAxIDIgMnY4LjUifV0sWyJwYXRoIix7ZDoiTTE3IDExaC0uNSJ9XSxbInBhdGgiLHtkOiJNMTkgMTlINWEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMiJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik03IDExaDQifV0sWyJwYXRoIix7ZDoiTTcgMTVoMi41In1dXX0pO3ZhciBYbixyOGU9bigoKT0+e1huPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTQiLHg6IjMiLHk6IjUiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNNyAxNWg0TTE1IDE1aDJNNyAxMWgyTTEzIDExaDQifV1dfSk7dmFyIF9oLGk4ZT1uKCgpPT57X2g9W1sicGF0aCIse2Q6Im0yMSA4LTIgMi0xLjUtMy43QTIgMiAwIDAgMCAxNS42NDYgNUg4LjRhMiAyIDAgMCAwLTEuOTAzIDEuMjU3TDUgMTAgMyA4In1dLFsicGF0aCIse2Q6Ik03IDE0aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTcgMTRoLjAxIn1dLFsicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiI4Iix4OiIzIix5OiIxMCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTUgMTh2MiJ9XSxbInBhdGgiLHtkOiJNMTkgMTh2MiJ9XV19KTt2YXIgQWgsbzhlPW4oKCk9PntBaD1bWyJwYXRoIix7ZDoiTTEwIDJoNCJ9XSxbInBhdGgiLHtkOiJtMjEgOC0yIDItMS41LTMuN0EyIDIgMCAwIDAgMTUuNjQ2IDVIOC40YTIgMiAwIDAgMC0xLjkwMyAxLjI1N0w1IDEwIDMgOCJ9XSxbInBhdGgiLHtkOiJNNyAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTE3IDE0aC4wMSJ9XSxbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiOCIseDoiMyIseToiMTAiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik01IDE4djIifV0sWyJwYXRoIix7ZDoiTTE5IDE4djIifV1dfSk7dmFyICRoLHM4ZT1uKCgpPT57JGg9W1sicGF0aCIse2Q6Ik0xOSAxN2gyYy42IDAgMS0uNCAxLTF2LTNjMC0uOS0uNy0xLjctMS41LTEuOUMxOC43IDEwLjYgMTYgMTAgMTYgMTBzLTEuMy0xLjQtMi4yLTIuM2MtLjUtLjQtMS4xLS43LTEuOC0uN0g1Yy0uNiAwLTEuMS40LTEuNC45bC0xLjQgMi45QTMuNyAzLjcgMCAwIDAgMiAxMnY0YzAgLjYuNCAxIDEgMWgyIn1dLFsiY2lyY2xlIix7Y3g6IjciLGN5OiIxNyIscjoiMiJ9XSxbInBhdGgiLHtkOiJNOSAxN2g2In1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTciLHI6IjIifV1dfSk7dmFyIERoLG44ZT1uKCgpPT57RGg9W1sicGF0aCIse2Q6Ik0xOCAxOVY5YTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djhhMiAyIDAgMCAwIDIgMmgyIn1dLFsicGF0aCIse2Q6Ik0yIDloM2ExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyIn1dLFsicGF0aCIse2Q6Ik0yMiAxN3YxYTEgMSAwIDAgMS0xIDFIMTB2LTlhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2OSJ9XSxbImNpcmNsZSIse2N4OiI4IixjeToiMTkiLHI6IjIifV1dfSk7dmFyIEVoLGw4ZT1uKCgpPT57RWg9W1sicGF0aCIse2Q6Ik0xMiAxNHY0In1dLFsicGF0aCIse2Q6Ik0xNC4xNzIgMmEyIDIgMCAwIDEgMS40MTQuNTg2bDMuODI4IDMuODI4QTIgMiAwIDAgMSAyMCA3LjgyOFYyMGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJ6In1dLFsicGF0aCIse2Q6Ik04IDE0aDgifV0sWyJyZWN0Iix7eDoiOCIseToiMTAiLHdpZHRoOiI4IixoZWlnaHQ6IjgiLHJ4OiIxIn1dXX0pO3ZhciBOaCxjOGU9bigoKT0+e05oPVtbInBhdGgiLHtkOiJNMi4yNyAyMS43czkuODctMy41IDEyLjczLTYuMzZhNC41IDQuNSAwIDAgMC02LjM2LTYuMzdDNS43NyAxMS44NCAyLjI3IDIxLjcgMi4yNyAyMS43ek04LjY0IDE0bC0yLjA1LTIuMDRNMTUuMzQgMTVsLTIuNDYtMi40NiJ9XSxbInBhdGgiLHtkOiJNMjIgOXMtMS4zMy0yLTMuNS0yQzE2Ljg2IDcgMTUgOSAxNSA5czEuMzMgMiAzLjUgMlMyMiA5IDIyIDl6In1dLFsicGF0aCIse2Q6Ik0xNSAycy0yIDEuMzMtMiAzLjVTMTUgOSAxNSA5czItMS44NCAyLTMuNUMxNyAzLjMzIDE1IDIgMTUgMnoifV1dfSk7dmFyIFBoLGQ4ZT1uKCgpPT57UGg9W1sicGF0aCIse2Q6Ik0xMCA5djcifV0sWyJwYXRoIix7ZDoiTTE0IDZ2MTAifV0sWyJjaXJjbGUiLHtjeDoiMTcuNSIsY3k6IjEyLjUiLHI6IjMuNSJ9XSxbImNpcmNsZSIse2N4OiI2LjUiLGN5OiIxMi41IixyOiIzLjUifV1dfSk7dmFyIEloLGY4ZT1uKCgpPT57SWg9W1sicGF0aCIse2Q6Im0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYifV0sWyJwYXRoIix7ZDoiTTIyIDl2NyJ9XSxbInBhdGgiLHtkOiJNMy4zMDQgMTNoNi4zOTIifV0sWyJjaXJjbGUiLHtjeDoiMTguNSIsY3k6IjEyLjUiLHI6IjMuNSJ9XV19KTt2YXIgRmgsdThlPW4oKCk9PntGaD1bWyJwYXRoIix7ZDoiTTE1IDExaDQuNWExIDEgMCAwIDEgMCA1aC00YS41LjUgMCAwIDEtLjUtLjV2LTlhLjUuNSAwIDAgMSAuNS0uNWgzYTEgMSAwIDAgMSAwIDUifV0sWyJwYXRoIix7ZDoibTIgMTYgNC4wMzktOS42OWEuNS41IDAgMCAxIC45MjMgMEwxMSAxNiJ9XSxbInBhdGgiLHtkOiJNMy4zMDQgMTNoNi4zOTIifV1dfSk7dmFyIE9oLHA4ZT1uKCgpPT57T2g9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNiIseDoiMiIseToiNCIscng6IjIifV0sWyJjaXJjbGUiLHtjeDoiOCIsY3k6IjEwIixyOiIyIn1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV0sWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiIxMCIscjoiMiJ9XSxbInBhdGgiLHtkOiJtNiAyMCAuNy0yLjlBMS40IDEuNCAwIDAgMSA4LjEgMTZoNy44YTEuNCAxLjQgMCAwIDEgMS40IDFsLjcgMyJ9XV19KTt2YXIgQmgsaDhlPW4oKCk9PntCaD1bWyJwYXRoIix7ZDoiTTIgOFY2YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAyaC02In1dLFsicGF0aCIse2Q6Ik0yIDEyYTkgOSAwIDAgMSA4IDgifV0sWyJwYXRoIix7ZDoiTTIgMTZhNSA1IDAgMCAxIDQgNCJ9XSxbImxpbmUiLHt4MToiMiIseDI6IjIuMDEiLHkxOiIyMCIseTI6IjIwIn1dXX0pO3ZhciBSaCxtOGU9bigoKT0+e1JoPVtbInBhdGgiLHtkOiJNMTAgNVYzIn1dLFsicGF0aCIse2Q6Ik0xNCA1VjMifV0sWyJwYXRoIix7ZDoiTTE1IDIxdi0zYTMgMyAwIDAgMC02IDB2MyJ9XSxbInBhdGgiLHtkOiJNMTggM3Y4In1dLFsicGF0aCIse2Q6Ik0xOCA1SDYifV0sWyJwYXRoIix7ZDoiTTIyIDExSDIifV0sWyJwYXRoIix7ZDoiTTIyIDl2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOSJ9XSxbInBhdGgiLHtkOiJNNiAzdjgifV1dfSk7dmFyIEhoLGc4ZT1uKCgpPT57SGg9W1sicGF0aCIse2Q6Ik0xMiA1Yy42NyAwIDEuMzUuMDkgMiAuMjYgMS43OC0yIDUuMDMtMi44NCA2LjQyLTIuMjYgMS40LjU4LS40MiA3LS40MiA3IC41NyAxLjA3IDEgMi4yNCAxIDMuNDRDMjEgMTcuOSAxNi45NyAyMSAxMiAyMXMtOS0zLTktNy41NmMwLTEuMjUuNS0yLjQgMS0zLjQ0IDAgMC0xLjg5LTYuNDItLjUtNyAxLjM5LS41OCA0LjcyLjIzIDYuNSAyLjIzQTkuMDQgOS4wNCAwIDAgMSAxMiA1WiJ9XSxbInBhdGgiLHtkOiJNOCAxNHYuNSJ9XSxbInBhdGgiLHtkOiJNMTYgMTR2LjUifV0sWyJwYXRoIix7ZDoiTTExLjI1IDE2LjI1aDEuNUwxMiAxN2wtLjc1LS43NVoifV1dfSk7dmFyIHFoLHg4ZT1uKCgpPT57cWg9W1sicGF0aCIse2Q6Ik0xNi43NSAxMmgzLjYzMmExIDEgMCAwIDEgLjg5NCAxLjQ0N2wtMi4wMzQgNC4wNjlhMSAxIDAgMCAxLTEuNzA4LjEzNGwtMi4xMjQtMi45NyJ9XSxbInBhdGgiLHtkOiJNMTcuMTA2IDkuMDUzYTEgMSAwIDAgMSAuNDQ3IDEuMzQxbC0zLjEwNiA2LjIxMWExIDEgMCAwIDEtMS4zNDIuNDQ3TDMuNjEgMTIuM2EyLjkyIDIuOTIgMCAwIDEtMS4zLTMuOTFMMy42OSA1LjZhMi45MiAyLjkyIDAgMCAxIDMuOTItMS4zeiJ9XSxbInBhdGgiLHtkOiJNMiAxOWgzLjc2YTIgMiAwIDAgMCAxLjgtMS4xTDkgMTUifV0sWyJwYXRoIix7ZDoiTTIgMjF2LTQifV0sWyJwYXRoIix7ZDoiTTcgOWguMDEifV1dfSk7dmFyIFFuLGI4ZT1uKCgpPT57UW49W1sicGF0aCIse2Q6Ik0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiJ9XSxbInBhdGgiLHtkOiJNNyAxMS4yMDdhLjUuNSAwIDAgMSAuMTQ2LS4zNTNsMi0yYS41LjUgMCAwIDEgLjcwOCAwbDMuMjkyIDMuMjkyYS41LjUgMCAwIDAgLjcwOCAwbDQuMjkyLTQuMjkyYS41LjUgMCAwIDEgLjg1NC4zNTNWMTZhMSAxIDAgMCAxLTEgMUg4YTEgMSAwIDAgMS0xLTF6In1dXX0pO3ZhciBLbix2OGU9bigoKT0+e0tuPVtbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJyZWN0Iix7eDoiNyIseToiMTMiLHdpZHRoOiI5IixoZWlnaHQ6IjQiLHJ4OiIxIn1dLFsicmVjdCIse3g6IjciLHk6IjUiLHdpZHRoOiIxMiIsaGVpZ2h0OiI0IixyeDoiMSJ9XV19KTt2YXIgVmgseThlPW4oKCk9PntWaD1bWyJwYXRoIix7ZDoiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2In1dLFsicGF0aCIse2Q6Ik03IDExaDgifV0sWyJwYXRoIix7ZDoiTTcgMTZoMyJ9XSxbInBhdGgiLHtkOiJNNyA2aDEyIn1dXX0pO3ZhciBVaCx3OGU9bigoKT0+e1VoPVtbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJwYXRoIix7ZDoiTTcgMTFoOCJ9XSxbInBhdGgiLHtkOiJNNyAxNmgxMiJ9XSxbInBhdGgiLHtkOiJNNyA2aDMifV1dfSk7dmFyIGpoLE04ZT1uKCgpPT57amg9W1sicGF0aCIse2Q6Ik0xMSAxM3Y0In1dLFsicGF0aCIse2Q6Ik0xNSA1djQifV0sWyJwYXRoIix7ZDoiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2In1dLFsicmVjdCIse3g6IjciLHk6IjEzIix3aWR0aDoiOSIsaGVpZ2h0OiI0IixyeDoiMSJ9XSxbInJlY3QiLHt4OiI3Iix5OiI1Iix3aWR0aDoiMTIiLGhlaWdodDoiNCIscng6IjEifV1dfSk7dmFyIEpuLHo4ZT1uKCgpPT57Sm49W1sicGF0aCIse2Q6Ik0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiJ9XSxbInBhdGgiLHtkOiJNNyAxNmg4In1dLFsicGF0aCIse2Q6Ik03IDExaDEyIn1dLFsicGF0aCIse2Q6Ik03IDZoMyJ9XV19KTt2YXIgZTAsazhlPW4oKCk9PntlMD1bWyJwYXRoIix7ZDoiTTkgNXY0In1dLFsicmVjdCIse3dpZHRoOiI0IixoZWlnaHQ6IjYiLHg6IjciLHk6IjkiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Ik05IDE1djIifV0sWyJwYXRoIix7ZDoiTTE3IDN2MiJ9XSxbInJlY3QiLHt3aWR0aDoiNCIsaGVpZ2h0OiI4Iix4OiIxNSIseToiNSIscng6IjEifV0sWyJwYXRoIix7ZDoiTTE3IDEzdjMifV0sWyJwYXRoIix7ZDoiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2In1dXX0pO3ZhciB0MCxTOGU9bigoKT0+e3QwPVtbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJyZWN0Iix7eDoiMTUiLHk6IjUiLHdpZHRoOiI0IixoZWlnaHQ6IjEyIixyeDoiMSJ9XSxbInJlY3QiLHt4OiI3Iix5OiI4Iix3aWR0aDoiNCIsaGVpZ2h0OiI5IixyeDoiMSJ9XV19KTt2YXIgV2gsQzhlPW4oKCk9PntXaD1bWyJwYXRoIix7ZDoiTTEzIDE3VjkifV0sWyJwYXRoIix7ZDoiTTE4IDE3di0zIn1dLFsicGF0aCIse2Q6Ik0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiJ9XSxbInBhdGgiLHtkOiJNOCAxN1Y1In1dXX0pO3ZhciBhMCxMOGU9bigoKT0+e2EwPVtbInBhdGgiLHtkOiJNMTMgMTdWOSJ9XSxbInBhdGgiLHtkOiJNMTggMTdWNSJ9XSxbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJwYXRoIix7ZDoiTTggMTd2LTMifV1dfSk7dmFyIEdoLFQ4ZT1uKCgpPT57R2g9W1sicGF0aCIse2Q6Ik0xMSAxM0g3In1dLFsicGF0aCIse2Q6Ik0xOSA5aC00In1dLFsicGF0aCIse2Q6Ik0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiJ9XSxbInJlY3QiLHt4OiIxNSIseToiNSIsd2lkdGg6IjQiLGhlaWdodDoiMTIiLHJ4OiIxIn1dLFsicmVjdCIse3g6IjciLHk6IjgiLHdpZHRoOiI0IixoZWlnaHQ6IjkiLHJ4OiIxIn1dXX0pO3ZhciByMCxfOGU9bigoKT0+e3IwPVtbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJwYXRoIix7ZDoiTTE4IDE3VjkifV0sWyJwYXRoIix7ZDoiTTEzIDE3VjUifV0sWyJwYXRoIix7ZDoiTTggMTd2LTMifV1dfSk7dmFyIFloLEE4ZT1uKCgpPT57WWg9W1sicGF0aCIse2Q6Ik0xMCA2aDgifV0sWyJwYXRoIix7ZDoiTTEyIDE2aDYifV0sWyJwYXRoIix7ZDoiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2In1dLFsicGF0aCIse2Q6Ik04IDExaDcifV1dfSk7dmFyIGkwLCQ4ZT1uKCgpPT57aTA9W1sicGF0aCIse2Q6Ik0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiJ9XSxbInBhdGgiLHtkOiJtMTkgOS01IDUtNC00LTMgMyJ9XV19KTt2YXIgWmgsRDhlPW4oKCk9PntaaD1bWyJwYXRoIix7ZDoibTEzLjExIDcuNjY0IDEuNzggMi42NzIifV0sWyJwYXRoIix7ZDoibTE0LjE2MiAxMi43ODgtMy4zMjQgMS40MjQifV0sWyJwYXRoIix7ZDoibTIwIDQtNi4wNiAxLjUxNSJ9XSxbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI2IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjE2IixjeToiMTIiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjE1IixyOiIyIn1dXX0pO3ZhciBYaCxFOGU9bigoKT0+e1hoPVtbInBhdGgiLHtkOiJNNSAyMVYzIn1dLFsicGF0aCIse2Q6Ik0xMiAyMVY5In1dLFsicGF0aCIse2Q6Ik0xOSAyMXYtNiJ9XV19KTt2YXIgbzAsTjhlPW4oKCk9PntvMD1bWyJwYXRoIix7ZDoiTTUgMjF2LTYifV0sWyJwYXRoIix7ZDoiTTEyIDIxVjkifV0sWyJwYXRoIix7ZDoiTTE5IDIxVjMifV1dfSk7dmFyIHMwLFA4ZT1uKCgpPT57czA9W1sicGF0aCIse2Q6Ik01IDIxdi02In1dLFsicGF0aCIse2Q6Ik0xMiAyMVYzIn1dLFsicGF0aCIse2Q6Ik0xOSAyMVY5In1dXX0pO3ZhciBRaCxJOGU9bigoKT0+e1FoPVtbInBhdGgiLHtkOiJNMTIgMTZ2NSJ9XSxbInBhdGgiLHtkOiJNMTYgMTR2NyJ9XSxbInBhdGgiLHtkOiJNMjAgMTB2MTEifV0sWyJwYXRoIix7ZDoibTIyIDMtOC42NDYgOC42NDZhLjUuNSAwIDAgMS0uNzA4IDBMOS4zNTQgOC4zNTRhLjUuNSAwIDAgMC0uNzA3IDBMMiAxNSJ9XSxbInBhdGgiLHtkOiJNNCAxOHYzIn1dLFsicGF0aCIse2Q6Ik04IDE0djcifV1dfSk7dmFyIG4wLEY4ZT1uKCgpPT57bjA9W1sicGF0aCIse2Q6Ik02IDVoMTIifV0sWyJwYXRoIix7ZDoiTTQgMTJoMTAifV0sWyJwYXRoIix7ZDoiTTEyIDE5aDgifV1dfSk7dmFyIGwwLE84ZT1uKCgpPT57bDA9W1sicGF0aCIse2Q6Ik0yMSAxMmMuNTUyIDAgMS4wMDUtLjQ0OS45NS0uOTk4YTEwIDEwIDAgMCAwLTguOTUzLTguOTUxYy0uNTUtLjA1NS0uOTk4LjM5OC0uOTk4Ljk1djhhMSAxIDAgMCAwIDEgMXoifV0sWyJwYXRoIix7ZDoiTTIxLjIxIDE1Ljg5QTEwIDEwIDAgMSAxIDggMi44MyJ9XV19KTt2YXIgYzAsQjhlPW4oKCk9PntjMD1bWyJjaXJjbGUiLHtjeDoiNy41IixjeToiNy41IixyOiIuNSIsZmlsbDoiY3VycmVudENvbG9yIn1dLFsiY2lyY2xlIix7Y3g6IjE4LjUiLGN5OiI1LjUiLHI6Ii41IixmaWxsOiJjdXJyZW50Q29sb3IifV0sWyJjaXJjbGUiLHtjeDoiMTEuNSIsY3k6IjExLjUiLHI6Ii41IixmaWxsOiJjdXJyZW50Q29sb3IifV0sWyJjaXJjbGUiLHtjeDoiNy41IixjeToiMTYuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbImNpcmNsZSIse2N4OiIxNy41IixjeToiMTQuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV1dfSk7dmFyIEtoLFI4ZT1uKCgpPT57S2g9W1sicGF0aCIse2Q6Ik0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiJ9XSxbInBhdGgiLHtkOiJNNyAxNmMuNS0yIDEuNS03IDQtNyAyIDAgMiAzIDQgMyAyLjUgMCA0LjUtNSA1LTcifV1dfSk7dmFyIEpoLEg4ZT1uKCgpPT57Smg9W1sicGF0aCIse2Q6Ik0xOCA2IDcgMTdsLTUtNSJ9XSxbInBhdGgiLHtkOiJtMjIgMTAtNy41IDcuNUwxMyAxNiJ9XV19KTt2YXIgZW0scThlPW4oKCk9PntlbT1bWyJwYXRoIix7ZDoiTTIwIDRMOSAxNSJ9XSxbInBhdGgiLHtkOiJNMjEgMTlMMyAxOSJ9XSxbInBhdGgiLHtkOiJNOSAxNUw0IDEwIn1dXX0pO3ZhciB0bSxWOGU9bigoKT0+e3RtPVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUifV1dfSk7dmFyIGFtLFU4ZT1uKCgpPT57YW09W1sicGF0aCIse2Q6Ik0xNyAyMWExIDEgMCAwIDAgMS0xdi01LjM1YzAtLjQ1Ny4zMTYtLjg0NC43MjctMS4wNDFhNCA0IDAgMCAwLTIuMTM0LTcuNTg5IDUgNSAwIDAgMC05LjE4NiAwIDQgNCAwIDAgMC0yLjEzNCA3LjU4OGMuNDExLjE5OC43MjcuNTg1LjcyNyAxLjA0MVYyMGExIDEgMCAwIDAgMSAxWiJ9XSxbInBhdGgiLHtkOiJNNiAxN2gxMiJ9XV19KTt2YXIgcm0sajhlPW4oKCk9PntybT1bWyJwYXRoIix7ZDoiTTIgMTdhNSA1IDAgMCAwIDEwIDBjMC0yLjc2LTIuNS01LTUtMy0yLjUtMi01IC4yNC01IDNaIn1dLFsicGF0aCIse2Q6Ik0xMiAxN2E1IDUgMCAwIDAgMTAgMGMwLTIuNzYtMi41LTUtNS0zLTIuNS0yLTUgLjI0LTUgM1oifV0sWyJwYXRoIix7ZDoiTTcgMTRjMy4yMi0yLjkxIDQuMjktOC43NSA1LTEyIDEuNjYgMi4zOCA0Ljk0IDkgNSAxMiJ9XSxbInBhdGgiLHtkOiJNMjIgOWMtNC4yOSAwLTcuMTQtMi4zMy0xMC03IDUuNzEgMCAxMCA0LjY3IDEwIDdaIn1dXX0pO3ZhciBpbSxXOGU9bigoKT0+e2ltPVtbInBhdGgiLHtkOiJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoifV0sWyJwYXRoIix7ZDoiTTE1IDE4YzEuNS0uNjE1IDMtMi40NjEgMy00LjkyM0MxOCA4Ljc2OSAxNC41IDQuNDYyIDEyIDIgOS41IDQuNDYyIDYgOC43NyA2IDEzLjA3NyA2IDE1LjUzOSA3LjUgMTcuMzg1IDkgMTgifV0sWyJwYXRoIix7ZDoibTE2IDctMi41IDIuNSJ9XSxbInBhdGgiLHtkOiJNOSAyaDYifV1dfSk7dmFyIG9tLEc4ZT1uKCgpPT57b209W1sicGF0aCIse2Q6Ik00IDIwYTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINWExIDEgMCAwIDEtMS0xeiJ9XSxbInBhdGgiLHtkOiJtNi43IDE4LTEtMUM0LjM1IDE1LjY4MiAzIDE0LjA5IDMgMTJhNSA1IDAgMCAxIDQuOTUtNWMxLjU4NCAwIDIuNy40NTUgNC4wNSAxLjgxOEMxMy4zNSA3LjQ1NSAxNC40NjYgNyAxNi4wNSA3QTUgNSAwIDAgMSAyMSAxMmMwIDIuMDgyLTEuMzU5IDMuNjczLTIuNyA1bC0xIDEifV0sWyJwYXRoIix7ZDoiTTEwIDRoNCJ9XSxbInBhdGgiLHtkOiJNMTIgMnY2LjgxOCJ9XV19KTt2YXIgc20sWThlPW4oKCk9PntzbT1bWyJwYXRoIix7ZDoiTTUgMjBhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjFhMSAxIDAgMCAxLTEgMUg2YTEgMSAwIDAgMS0xLTF6In1dLFsicGF0aCIse2Q6Ik0xNi41IDE4YzEtMiAyLjUtNSAyLjUtOWE3IDcgMCAwIDAtNy03SDYuNjM1YTEgMSAwIDAgMC0uNzY4IDEuNjRMNyA1bC0yLjMyIDUuODAyYTIgMiAwIDAgMCAuOTUgMi41MjZsMi44NyAxLjQ1NiJ9XSxbInBhdGgiLHtkOiJtMTUgNSAxLjQyNS0xLjQyNSJ9XSxbInBhdGgiLHtkOiJtMTcgOCAxLjUzLTEuNTMifV0sWyJwYXRoIix7ZDoiTTkuNzEzIDEyLjE4NSA3IDE4In1dXX0pO3ZhciBubSxaOGU9bigoKT0+e25tPVtbInBhdGgiLHtkOiJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoifV0sWyJwYXRoIix7ZDoibTE0LjUgMTAgMS41IDgifV0sWyJwYXRoIix7ZDoiTTcgMTBoMTAifV0sWyJwYXRoIix7ZDoibTggMTggMS41LTgifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI2IixyOiI0In1dXX0pO3ZhciBsbSxYOGU9bigoKT0+e2xtPVtbInBhdGgiLHtkOiJNNCAyMGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXoifV0sWyJwYXRoIix7ZDoibTEyLjQ3NCA1Ljk0MyAxLjU2NyA1LjM0YTEgMSAwIDAgMCAxLjc1LjMyOGwyLjYxNi0zLjQwMiJ9XSxbInBhdGgiLHtkOiJtMjAgOS0zIDkifV0sWyJwYXRoIix7ZDoibTUuNTk0IDguMjA5IDIuNjE1IDMuNDAzYTEgMSAwIDAgMCAxLjc1LS4zMjlsMS41NjctNS4zNCJ9XSxbInBhdGgiLHtkOiJNNyAxOCA0IDkifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI0IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjIwIixjeToiNyIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI0IixjeToiNyIscjoiMiJ9XV19KTt2YXIgY20sUThlPW4oKCk9PntjbT1bWyJwYXRoIix7ZDoibTYgOSA2IDYgNi02In1dXX0pO3ZhciBkbSxLOGU9bigoKT0+e2RtPVtbInBhdGgiLHtkOiJtMTcgMTgtNi02IDYtNiJ9XSxbInBhdGgiLHtkOiJNNyA2djEyIn1dXX0pO3ZhciBmbSxKOGU9bigoKT0+e2ZtPVtbInBhdGgiLHtkOiJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoifV0sWyJwYXRoIix7ZDoiTTEwIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTQgMnYyIn1dLFsicGF0aCIse2Q6Im0xNyAxOC0xLTkifV0sWyJwYXRoIix7ZDoiTTYgMnY1YTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjIifV0sWyJwYXRoIix7ZDoiTTYgNGgxMiJ9XSxbInBhdGgiLHtkOiJtNyAxOCAxLTkifV1dfSk7dmFyIHVtLGVkZT1uKCgpPT57dW09W1sicGF0aCIse2Q6Im03IDE4IDYtNi02LTYifV0sWyJwYXRoIix7ZDoiTTE3IDZ2MTIifV1dfSk7dmFyIHBtLHRkZT1uKCgpPT57cG09W1sicGF0aCIse2Q6Im0xNSAxOC02LTYgNi02In1dXX0pO3ZhciBobSxhZGU9bigoKT0+e2htPVtbInBhdGgiLHtkOiJtOSAxOCA2LTYtNi02In1dXX0pO3ZhciBtbSxyZGU9bigoKT0+e21tPVtbInBhdGgiLHtkOiJtMTggMTUtNi02LTYgNiJ9XV19KTt2YXIgZ20saWRlPW4oKCk9PntnbT1bWyJwYXRoIix7ZDoibTcgMjAgNS01IDUgNSJ9XSxbInBhdGgiLHtkOiJtNyA0IDUgNSA1LTUifV1dfSk7dmFyIHhtLG9kZT1uKCgpPT57eG09W1sicGF0aCIse2Q6Im03IDYgNSA1IDUtNSJ9XSxbInBhdGgiLHtkOiJtNyAxMyA1IDUgNS01In1dXX0pO3ZhciBibSxzZGU9bigoKT0+e2JtPVtbInBhdGgiLHtkOiJNMTIgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxMmguMDEifV0sWyJwYXRoIix7ZDoibTE3IDcgNSA1LTUgNSJ9XSxbInBhdGgiLHtkOiJtNyA3LTUgNSA1IDUifV0sWyJwYXRoIix7ZDoiTTggMTJoLjAxIn1dXX0pO3ZhciB2bSxuZGU9bigoKT0+e3ZtPVtbInBhdGgiLHtkOiJtOSA3LTUgNSA1IDUifV0sWyJwYXRoIix7ZDoibTE1IDcgNSA1LTUgNSJ9XV19KTt2YXIgeW0sbGRlPW4oKCk9Pnt5bT1bWyJwYXRoIix7ZDoibTExIDE3LTUtNSA1LTUifV0sWyJwYXRoIix7ZDoibTE4IDE3LTUtNSA1LTUifV1dfSk7dmFyIHdtLGNkZT1uKCgpPT57d209W1sicGF0aCIse2Q6Im0yMCAxNy01LTUgNS01In1dLFsicGF0aCIse2Q6Im00IDE3IDUtNS01LTUifV1dfSk7dmFyIE1tLGRkZT1uKCgpPT57TW09W1sicGF0aCIse2Q6Im02IDE3IDUtNS01LTUifV0sWyJwYXRoIix7ZDoibTEzIDE3IDUtNS01LTUifV1dfSk7dmFyIHptLGZkZT1uKCgpPT57em09W1sicGF0aCIse2Q6Im03IDE1IDUgNSA1LTUifV0sWyJwYXRoIix7ZDoibTcgOSA1LTUgNSA1In1dXX0pO3ZhciBrbSx1ZGU9bigoKT0+e2ttPVtbInBhdGgiLHtkOiJtMTcgMTEtNS01LTUgNSJ9XSxbInBhdGgiLHtkOiJtMTcgMTgtNS01LTUgNSJ9XV19KTt2YXIgU20scGRlPW4oKCk9PntTbT1bWyJwYXRoIix7ZDoiTTEwIDloNCJ9XSxbInBhdGgiLHtkOiJNMTIgN3Y1In1dLFsicGF0aCIse2Q6Ik0xNCAyMXYtM2EyIDIgMCAwIDAtNCAwdjMifV0sWyJwYXRoIix7ZDoibTE4IDkgMy41MiAyLjE0N2ExIDEgMCAwIDEgLjQ4Ljg1NFYxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtNi45OTlhMSAxIDAgMCAxIC40OC0uODU0TDYgOSJ9XSxbInBhdGgiLHtkOiJNNiAyMVY3YTEgMSAwIDAgMSAuMzc2LS43ODJsNS0zLjk5OWExIDEgMCAwIDEgMS4yNDkuMDAxbDUgNEExIDEgMCAwIDEgMTggN3YxNCJ9XV19KTt2YXIgQ20saGRlPW4oKCk9PntDbT1bWyJwYXRoIix7ZDoiTTEyIDEySDNhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoMTMifV0sWyJwYXRoIix7ZDoiTTE4IDhjMC0yLjUtMi0yLjUtMi01In1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTIxIDEyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtLjUuODY2In1dLFsicGF0aCIse2Q6Ik0yMiA4YzAtMi41LTItMi41LTItNSJ9XSxbInBhdGgiLHtkOiJNNyAxMnY0In1dXX0pO3ZhciBkMCxtZGU9bigoKT0+e2QwPVtbInBhdGgiLHtkOiJNMTAuODggMjEuOTQgMTUuNDYgMTQifV0sWyJwYXRoIix7ZDoiTTIxLjE3IDhIMTIifV0sWyJwYXRoIix7ZDoiTTMuOTUgNi4wNiA4LjU0IDE0In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjQifV1dfSk7dmFyIExtLGdkZT1uKCgpPT57TG09W1sicGF0aCIse2Q6Ik0xNyAxMkgzYTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxaDE0In1dLFsicGF0aCIse2Q6Ik0xOCA4YzAtMi41LTItMi41LTItNSJ9XSxbInBhdGgiLHtkOiJNMjEgMTZhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIn1dLFsicGF0aCIse2Q6Ik0yMiA4YzAtMi41LTItMi41LTItNSJ9XSxbInBhdGgiLHtkOiJNNyAxMnY0In1dXX0pO3ZhciBmMCx4ZGU9bigoKT0+e2YwPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjgiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMi4wMSIseTE6IjE2Iix5MjoiMTYifV1dfSk7dmFyIHUwLGJkZT1uKCgpPT57dTA9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik0xMiA4djgifV0sWyJwYXRoIix7ZDoibTggMTIgNCA0IDQtNCJ9XV19KTt2YXIgcDAsdmRlPW4oKCk9PntwMD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoibTEyIDgtNCA0IDQgNCJ9XSxbInBhdGgiLHtkOiJNMTYgMTJIOCJ9XV19KTt2YXIgaDAseWRlPW4oKCk9PntoMD1bWyJwYXRoIix7ZDoiTTIgMTJhMTAgMTAgMCAxIDEgMTAgMTAifV0sWyJwYXRoIix7ZDoibTIgMjIgMTAtMTAifV0sWyJwYXRoIix7ZDoiTTggMjJIMnYtNiJ9XV19KTt2YXIgbTAsd2RlPW4oKCk9PnttMD1bWyJwYXRoIix7ZDoiTTEyIDIyYTEwIDEwIDAgMSAxIDEwLTEwIn1dLFsicGF0aCIse2Q6Ik0yMiAyMiAxMiAxMiJ9XSxbInBhdGgiLHtkOiJNMjIgMTZ2NmgtNiJ9XV19KTt2YXIgZzAsTWRlPW4oKCk9PntnMD1bWyJwYXRoIix7ZDoiTTIgOFYyaDYifV0sWyJwYXRoIix7ZDoibTIgMiAxMCAxMCJ9XSxbInBhdGgiLHtkOiJNMTIgMkExMCAxMCAwIDEgMSAyIDEyIn1dXX0pO3ZhciB4MCx6ZGU9bigoKT0+e3gwPVtbInBhdGgiLHtkOiJNMjIgMTJBMTAgMTAgMCAxIDEgMTIgMiJ9XSxbInBhdGgiLHtkOiJNMjIgMiAxMiAxMiJ9XSxbInBhdGgiLHtkOiJNMTYgMmg2djYifV1dfSk7dmFyIGIwLGtkZT1uKCgpPT57YjA9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Im0xMiAxNiA0LTQtNC00In1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV1dfSk7dmFyIHYwLFNkZT1uKCgpPT57djA9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Im0xNiAxMi00LTQtNCA0In1dLFsicGF0aCIse2Q6Ik0xMiAxNlY4In1dXX0pO3ZhciB5MCxDZGU9bigoKT0+e3kwPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJtOSAxMiAyIDIgNC00In1dXX0pO3ZhciB3MCxMZGU9bigoKT0+e3cwPVtbInBhdGgiLHtkOiJNMjEuODAxIDEwQTEwIDEwIDAgMSAxIDE3IDMuMzM1In1dLFsicGF0aCIse2Q6Im05IDExIDMgM0wyMiA0In1dXX0pO3ZhciBNMCxUZGU9bigoKT0+e00wPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJtMTYgMTAtNCA0LTQtNCJ9XV19KTt2YXIgejAsX2RlPW4oKCk9Pnt6MD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoibTE0IDE2LTQtNCA0LTQifV1dfSk7dmFyIGswLEFkZT1uKCgpPT57azA9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Im0xMCA4IDQgNC00IDQifV1dfSk7dmFyIFMwLCRkZT1uKCgpPT57UzA9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Im04IDE0IDQtNCA0IDQifV1dfSk7dmFyIFRtLERkZT1uKCgpPT57VG09W1sicGF0aCIse2Q6Ik0xMC4xIDIuMTgyYTEwIDEwIDAgMCAxIDMuOCAwIn1dLFsicGF0aCIse2Q6Ik0xMy45IDIxLjgxOGExMCAxMCAwIDAgMS0zLjggMCJ9XSxbInBhdGgiLHtkOiJNMTcuNjA5IDMuNzIxYTEwIDEwIDAgMCAxIDIuNjkgMi43In1dLFsicGF0aCIse2Q6Ik0yLjE4MiAxMy45YTEwIDEwIDAgMCAxIDAtMy44In1dLFsicGF0aCIse2Q6Ik0yMC4yNzkgMTcuNjA5YTEwIDEwIDAgMCAxLTIuNyAyLjY5In1dLFsicGF0aCIse2Q6Ik0yMS44MTggMTAuMWExMCAxMCAwIDAgMSAwIDMuOCJ9XSxbInBhdGgiLHtkOiJNMy43MjEgNi4zOTFhMTAgMTAgMCAwIDEgMi43LTIuNjkifV0sWyJwYXRoIix7ZDoiTTYuMzkxIDIwLjI3OWExMCAxMCAwIDAgMS0yLjY5LTIuNyJ9XV19KTt2YXIgQzAsRWRlPW4oKCk9PntDMD1bWyJsaW5lIix7eDE6IjgiLHgyOiIxNiIseTE6IjEyIix5MjoiMTIifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIxNiIseTI6IjE2In1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiOCIseTI6IjgifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dfSk7dmFyIF9tLE5kZT1uKCgpPT57X209W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgifV0sWyJwYXRoIix7ZDoiTTEyIDE4VjYifV1dfSk7dmFyIEFtLFBkZT1uKCgpPT57QW09W1sicGF0aCIse2Q6Ik0xMC4xIDIuMThhOS45MyA5LjkzIDAgMCAxIDMuOCAwIn1dLFsicGF0aCIse2Q6Ik0xNy42IDMuNzFhOS45NSA5Ljk1IDAgMCAxIDIuNjkgMi43In1dLFsicGF0aCIse2Q6Ik0yMS44MiAxMC4xYTkuOTMgOS45MyAwIDAgMSAwIDMuOCJ9XSxbInBhdGgiLHtkOiJNMjAuMjkgMTcuNmE5Ljk1IDkuOTUgMCAwIDEtMi43IDIuNjkifV0sWyJwYXRoIix7ZDoiTTEzLjkgMjEuODJhOS45NCA5Ljk0IDAgMCAxLTMuOCAwIn1dLFsicGF0aCIse2Q6Ik02LjQgMjAuMjlhOS45NSA5Ljk1IDAgMCAxLTIuNjktMi43In1dLFsicGF0aCIse2Q6Ik0yLjE4IDEzLjlhOS45MyA5LjkzIDAgMCAxIDAtMy44In1dLFsicGF0aCIse2Q6Ik0zLjcxIDYuNGE5Ljk1IDkuOTUgMCAwIDEgMi43LTIuNjkifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMSJ9XV19KTt2YXIgJG0sSWRlPW4oKCk9PnskbT1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMSJ9XV19KTt2YXIgRG0sRmRlPW4oKCk9PntEbT1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTE3IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik03IDEyaC4wMSJ9XV19KTt2YXIgRW0sT2RlPW4oKCk9PntFbT1bWyJwYXRoIix7ZDoiTTcgMTBoMTAifV0sWyJwYXRoIix7ZDoiTTcgMTRoMTAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dfSk7dmFyIE5tLEJkZT1uKCgpPT57Tm09W1sicGF0aCIse2Q6Ik0xMiAyYTEwIDEwIDAgMCAxIDcuMzggMTYuNzUifV0sWyJwYXRoIix7ZDoibTE2IDEyLTQtNC00IDQifV0sWyJwYXRoIix7ZDoiTTEyIDE2VjgifV0sWyJwYXRoIix7ZDoiTTIuNSA4Ljg3NWExMCAxMCAwIDAgMC0uNSAzIn1dLFsicGF0aCIse2Q6Ik0yLjgzIDE2YTEwIDEwIDAgMCAwIDIuNDMgMy40In1dLFsicGF0aCIse2Q6Ik00LjYzNiA1LjIzNWExMCAxMCAwIDAgMSAuODkxLS44NTcifV0sWyJwYXRoIix7ZDoiTTguNjQ0IDIxLjQyYTEwIDEwIDAgMCAwIDcuNjMxLS4zOCJ9XV19KTt2YXIgUG0sUmRlPW4oKCk9PntQbT1bWyJwYXRoIix7ZDoiTTEyIDJhMTAgMTAgMCAwIDEgNy4zOCAxNi43NSJ9XSxbInBhdGgiLHtkOiJNMTIgOHY4In1dLFsicGF0aCIse2Q6Ik0xNiAxMkg4In1dLFsicGF0aCIse2Q6Ik0yLjUgOC44NzVhMTAgMTAgMCAwIDAtLjUgMyJ9XSxbInBhdGgiLHtkOiJNMi44MyAxNmExMCAxMCAwIDAgMCAyLjQzIDMuNCJ9XSxbInBhdGgiLHtkOiJNNC42MzYgNS4yMzVhMTAgMTAgMCAwIDEgLjg5MS0uODU3In1dLFsicGF0aCIse2Q6Ik04LjY0NCAyMS40MmExMCAxMCAwIDAgMCA3LjYzMS0uMzgifV1dfSk7dmFyIEwwLEhkZT1uKCgpPT57TDA9W1sicGF0aCIse2Q6Ik0xNS42IDIuN2ExMCAxMCAwIDEgMCA1LjcgNS43In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTEzLjQgMTAuNiAxOSA1In1dXX0pO3ZhciBUMCxxZGU9bigoKT0+e1QwPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNOCAxMmg4In1dXX0pO3ZhciBJbSxWZGU9bigoKT0+e0ltPVtbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik04LjM1IDIuNjlBMTAgMTAgMCAwIDEgMjEuMyAxNS42NSJ9XSxbInBhdGgiLHtkOiJNMTkuMDggMTkuMDhBMTAgMTAgMCAxIDEgNC45MiA0LjkyIn1dXX0pO3ZhciBfMCxVZGU9bigoKT0+e18wPVtbInBhdGgiLHtkOiJNMTIuNjU2IDdIMTNhMyAzIDAgMCAxIDIuOTg0IDMuMzA3In1dLFsicGF0aCIse2Q6Ik0xMyAxM0g5In1dLFsicGF0aCIse2Q6Ik0xOS4wNzEgMTkuMDcxQTEgMSAwIDAgMSA0LjkzIDQuOTMifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNOC4zNTcgMi42ODdhMTAgMTAgMCAwIDEgMTIuOTU2IDEyLjk1NiJ9XSxbInBhdGgiLHtkOiJNOSAxN1Y5In1dXX0pO3ZhciBBMCxqZGU9bigoKT0+e0EwPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNOSAxN1Y3aDRhMyAzIDAgMCAxIDAgNkg5In1dXX0pO3ZhciAkMCxXZGU9bigoKT0+eyQwPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbImxpbmUiLHt4MToiMTAiLHgyOiIxMCIseTE6IjE1Iix5MjoiOSJ9XSxbImxpbmUiLHt4MToiMTQiLHgyOiIxNCIseTE6IjE1Iix5MjoiOSJ9XV19KTt2YXIgRDAsR2RlPW4oKCk9PntEMD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoibTE1IDktNiA2In1dLFsicGF0aCIse2Q6Ik05IDloLjAxIn1dLFsicGF0aCIse2Q6Ik0xNSAxNWguMDEifV1dfSk7dmFyIEZtLFlkZT1uKCgpPT57Rm09W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTkiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI1IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjE2IixjeToiMTIiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMjAiLGN5OiIxOSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI0IixjeToiMTkiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiOCIsY3k6IjEyIixyOiIyIn1dXX0pO3ZhciBFMCxaZGU9bigoKT0+e0UwPVtbInBhdGgiLHtkOiJNOSA5LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdBMSAxIDAgMCAxIDkgMTQuOTk2eiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgT20sWGRlPW4oKCk9PntPbT1bWyJwYXRoIix7ZDoiTTEwIDE2VjkuNWExIDEgMCAwIDEgNSAwIn1dLFsicGF0aCIse2Q6Ik04IDEyaDQifV0sWyJwYXRoIix7ZDoiTTggMTZoNyJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgTjAsUWRlPW4oKCk9PntOMD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XSxbInBhdGgiLHtkOiJNMTIgOHY4In1dXX0pO3ZhciBQMCxLZGU9bigoKT0+e1AwPVtbInBhdGgiLHtkOiJNMTIgN3Y0In1dLFsicGF0aCIse2Q6Ik03Ljk5OCA5LjAwM2E1IDUgMCAxIDAgOC0uMDA1In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXX0pO3ZhciBOaSxKZGU9bigoKT0+e05pPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMifV0sWyJwYXRoIix7ZDoiTTEyIDE3aC4wMSJ9XV19KTt2YXIgSTAsZTdlPW4oKCk9PntJMD1bWyJwYXRoIix7ZDoiTTIyIDIgMiAyMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgQm0sdDdlPW4oKCk9PntCbT1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJsaW5lIix7eDE6IjkiLHgyOiIxNSIseTE6IjE1Iix5MjoiOSJ9XV19KTt2YXIgUm0sYTdlPW4oKCk9PntSbT1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNiJ9XV19KTt2YXIgSG0scjdlPW4oKCk9PntIbT1bWyJwYXRoIix7ZDoiTTExLjA1MSA3LjYxNmExIDEgMCAwIDEgMS45MDkuMDI0bC43MzcgMS40NTJhMSAxIDAgMCAwIC43MzcuNTM1bDEuNjM0LjI1NmExIDEgMCAwIDEgLjU4OCAxLjgwNmwtMS4xNzIgMS4xNjhhMSAxIDAgMCAwLS4yODIuODY2bC4yNTkgMS42MTNhMSAxIDAgMCAxLTEuNTQxIDEuMTM0bC0xLjQ2NS0uNzVhMSAxIDAgMCAwLS45MTIgMGwtMS40NjUuNzVhMSAxIDAgMCAxLTEuNTM5LTEuMTMzbC4yNTgtMS42MTNhMSAxIDAgMCAwLS4yODItLjg2N2wtMS4xNTYtMS4xNTJhMSAxIDAgMCAxIC41NzItMS44MjJsMS42MzMtLjI1NmExIDEgMCAwIDAgLjczNy0uNTM1eiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgRjAsaTdlPW4oKCk9PntGMD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJyZWN0Iix7eDoiOSIseToiOSIsd2lkdGg6IjYiLGhlaWdodDoiNiIscng6IjEifV1dfSk7dmFyIE8wLG83ZT1uKCgpPT57TzA9W1sicGF0aCIse2Q6Ik0xOCAyMGE2IDYgMCAwIDAtMTIgMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEwIixyOiI0In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXX0pO3ZhciBCMCxzN2U9bigoKT0+e0IwPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEwIixyOiIzIn1dLFsicGF0aCIse2Q6Ik03IDIwLjY2MlYxOWEyIDIgMCAwIDEgMi0yaDZhMiAyIDAgMCAxIDIgMnYxLjY2MiJ9XV19KTt2YXIgUjAsbjdlPW4oKCk9PntSMD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoibTE1IDktNiA2In1dLFsicGF0aCIse2Q6Im05IDkgNiA2In1dXX0pO3ZhciBxbSxsN2U9bigoKT0+e3FtPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgVm0sYzdlPW4oKCk9PntWbT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTEgOWg0YTIgMiAwIDAgMCAyLTJWMyJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJNNyAyMXYtNGEyIDIgMCAwIDEgMi0yaDQifV0sWyJjaXJjbGUiLHtjeDoiMTUiLGN5OiIxNSIscjoiMiJ9XV19KTt2YXIgVW0sZDdlPW4oKCk9PntVbT1bWyJwYXRoIix7ZDoiTTIxLjY2IDE3LjY3YTEuMDggMS4wOCAwIDAgMS0uMDQgMS42QTEyIDEyIDAgMCAxIDQuNzMgMi4zOGExLjEgMS4xIDAgMCAxIDEuNjEtLjA0eiJ9XSxbInBhdGgiLHtkOiJNMTkuNjUgMTUuNjZBOCA4IDAgMCAxIDguMzUgNC4zNCJ9XSxbInBhdGgiLHtkOiJtMTQgMTAtNS41IDUuNSJ9XSxbInBhdGgiLHtkOiJNMTQgMTcuODVWMTBINi4xNSJ9XV19KTt2YXIgam0sZjdlPW4oKCk9PntqbT1bWyJwYXRoIix7ZDoiTTIwLjIgNiAzIDExbC0uOS0yLjRjLS4zLTEuMS4zLTIuMiAxLjMtMi41bDEzLjUtNGMxLjEtLjMgMi4yLjMgMi41IDEuM1oifV0sWyJwYXRoIix7ZDoibTYuMiA1LjMgMy4xIDMuOSJ9XSxbInBhdGgiLHtkOiJtMTIuNCAzLjQgMy4xIDQifV0sWyJwYXRoIix7ZDoiTTMgMTFoMTh2OGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMloifV1dfSk7dmFyIFdtLHU3ZT1uKCgpPT57V209W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjQiLHg6IjgiLHk6IjIiLHJ4OiIxIixyeToiMSJ9XSxbInBhdGgiLHtkOiJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIifV0sWyJwYXRoIix7ZDoibTkgMTQgMiAyIDQtNCJ9XV19KTt2YXIgR20scDdlPW4oKCk9PntHbT1bWyJwYXRoIix7ZDoiTTE2IDE0djIuMmwxLjYgMSJ9XSxbInBhdGgiLHtkOiJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2LjgzMiJ9XSxbInBhdGgiLHtkOiJNOCA0SDZhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDIifV0sWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiIxNiIscjoiNiJ9XSxbInJlY3QiLHt4OiI4Iix5OiIyIix3aWR0aDoiOCIsaGVpZ2h0OiI0IixyeDoiMSJ9XV19KTt2YXIgWW0saDdlPW4oKCk9PntZbT1bWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNCIseDoiOCIseToiMiIscng6IjEiLHJ5OiIxIn1dLFsicGF0aCIse2Q6Ik04IDRINmEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtMiJ9XSxbInBhdGgiLHtkOiJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2NCJ9XSxbInBhdGgiLHtkOiJNMjEgMTRIMTEifV0sWyJwYXRoIix7ZDoibTE1IDEwLTQgNCA0IDQifV1dfSk7dmFyIFptLG03ZT1uKCgpPT57Wm09W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjQiLHg6IjgiLHk6IjIiLHJ4OiIxIixyeToiMSJ9XSxbInBhdGgiLHtkOiJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIifV0sWyJwYXRoIix7ZDoiTTEyIDExaDQifV0sWyJwYXRoIix7ZDoiTTEyIDE2aDQifV0sWyJwYXRoIix7ZDoiTTggMTFoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDE2aC4wMSJ9XV19KTt2YXIgWG0sZzdlPW4oKCk9PntYbT1bWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNCIseDoiOCIseToiMiIscng6IjEiLHJ5OiIxIn1dLFsicGF0aCIse2Q6Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNOSAxNGg2In1dXX0pO3ZhciBRbSx4N2U9bigoKT0+e1FtPVtbInBhdGgiLHtkOiJNMTEgMTRoMTAifV0sWyJwYXRoIix7ZDoiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjEuMzQ0In1dLFsicGF0aCIse2Q6Im0xNyAxOCA0LTQtNC00In1dLFsicGF0aCIse2Q6Ik04IDRINmEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDEuNzkzLTEuMTEzIn1dLFsicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiI4IixoZWlnaHQ6IjQiLHJ4OiIxIn1dXX0pO3ZhciBIMCxiN2U9bigoKT0+e0gwPVtbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI0Iix4OiI4Iix5OiIyIixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNOCA0SDZhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LS41In1dLFsicGF0aCIse2Q6Ik0xNiA0aDJhMiAyIDAgMCAxIDEuNzMgMSJ9XSxbInBhdGgiLHtkOiJNOCAxOGgxIn1dLFsicGF0aCIse2Q6Ik0yMS4zNzggMTIuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoifV1dfSk7dmFyIHEwLHY3ZT1uKCgpPT57cTA9W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjQiLHg6IjgiLHk6IjIiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyaC01LjUifV0sWyJwYXRoIix7ZDoiTTQgMTMuNVY2YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNMTMuMzc4IDE1LjYyNmExIDEgMCAxIDAtMy4wMDQtMy4wMDRsLTUuMDEgNS4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6In1dXX0pO3ZhciBLbSx5N2U9bigoKT0+e0ttPVtbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI0Iix4OiI4Iix5OiIyIixyeDoiMSIscnk6IjEifV0sWyJwYXRoIix7ZDoiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik05IDE0aDYifV0sWyJwYXRoIix7ZDoiTTEyIDE3di02In1dXX0pO3ZhciBKbSx3N2U9bigoKT0+e0ptPVtbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI0Iix4OiI4Iix5OiIyIixyeDoiMSIscnk6IjEifV0sWyJwYXRoIix7ZDoiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik05IDEydi0xaDZ2MSJ9XSxbInBhdGgiLHtkOiJNMTEgMTdoMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTF2NiJ9XV19KTt2YXIgZWcsTTdlPW4oKCk9PntlZz1bWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNCIseDoiOCIseToiMiIscng6IjEiLHJ5OiIxIn1dLFsicGF0aCIse2Q6Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJtMTUgMTEtNiA2In1dLFsicGF0aCIse2Q6Im05IDExIDYgNiJ9XV19KTt2YXIgdGcsejdlPW4oKCk9Pnt0Zz1bWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNCIseDoiOCIseToiMiIscng6IjEiLHJ5OiIxIn1dLFsicGF0aCIse2Q6Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiJ9XV19KTt2YXIgYWcsazdlPW4oKCk9PnthZz1bWyJwYXRoIix7ZDoiTTEyIDZ2NmwyLTQifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dfSk7dmFyIHJnLFM3ZT1uKCgpPT57cmc9W1sicGF0aCIse2Q6Ik0xMiA2djZsLTQtMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgaWcsQzdlPW4oKCk9PntpZz1bWyJwYXRoIix7ZDoiTTEyIDZ2NmwtMi00In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXX0pO3ZhciBvZyxMN2U9bigoKT0+e29nPVtbInBhdGgiLHtkOiJNMTIgNnY2In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXX0pO3ZhciBzZyxUN2U9bigoKT0+e3NnPVtbInBhdGgiLHtkOiJNMTIgNnY2bDQtMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgbmcsXzdlPW4oKCk9PntuZz1bWyJwYXRoIix7ZDoiTTEyIDZ2Nmg0In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXX0pO3ZhciBsZyxBN2U9bigoKT0+e2xnPVtbInBhdGgiLHtkOiJNMTIgNnY2bDQgMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgY2csJDdlPW4oKCk9PntjZz1bWyJwYXRoIix7ZDoiTTEyIDZ2NmwyIDQifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dfSk7dmFyIGRnLEQ3ZT1uKCgpPT57ZGc9W1sicGF0aCIse2Q6Ik0xMiA2djEwIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXX0pO3ZhciBmZyxFN2U9bigoKT0+e2ZnPVtbInBhdGgiLHtkOiJNMTIgNnY2bC0yIDQifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dfSk7dmFyIHVnLE43ZT1uKCgpPT57dWc9W1sicGF0aCIse2Q6Ik0xMiA2djZsLTQgMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgcGcsUDdlPW4oKCk9PntwZz1bWyJwYXRoIix7ZDoiTTEyIDZ2Nkg4In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXX0pO3ZhciBoZyxJN2U9bigoKT0+e2hnPVtbInBhdGgiLHtkOiJNMTIgNnY2bDQgMiJ9XSxbInBhdGgiLHtkOiJNMjAgMTJ2NSJ9XSxbInBhdGgiLHtkOiJNMjAgMjFoLjAxIn1dLFsicGF0aCIse2Q6Ik0yMS4yNSA4LjJBMTAgMTAgMCAxIDAgMTYgMjEuMTYifV1dfSk7dmFyIG1nLEY3ZT1uKCgpPT57bWc9W1sicGF0aCIse2Q6Ik0xMiA2djZsMiAxIn1dLFsicGF0aCIse2Q6Ik0xMi4zMzcgMjEuOTk0YTEwIDEwIDAgMSAxIDkuNTg4LTguNzY3In1dLFsicGF0aCIse2Q6Im0xNCAxOCA0IDQgNC00In1dLFsicGF0aCIse2Q6Ik0xOCAxNHY4In1dXX0pO3ZhciBnZyxPN2U9bigoKT0+e2dnPVtbInBhdGgiLHtkOiJNMTIgNnY2bDEuNTYuNzgifV0sWyJwYXRoIix7ZDoiTTEzLjIyNyAyMS45MjVhMTAgMTAgMCAxIDEgOC43NjctOS41ODgifV0sWyJwYXRoIix7ZDoibTE0IDE4IDQtNCA0IDQifV0sWyJwYXRoIix7ZDoiTTE4IDIydi04In1dXX0pO3ZhciB4ZyxCN2U9bigoKT0+e3hnPVtbInBhdGgiLHtkOiJNMTIgNnY2bDQgMiJ9XSxbInBhdGgiLHtkOiJNMjIgMTJhMTAgMTAgMCAxIDAtMTEgOS45NSJ9XSxbInBhdGgiLHtkOiJtMjIgMTYtNS41IDUuNUwxNCAxOSJ9XV19KTt2YXIgYmcsUjdlPW4oKCk9PntiZz1bWyJwYXRoIix7ZDoiTTEyIDJhMTAgMTAgMCAwIDEgNy4zOCAxNi43NSJ9XSxbInBhdGgiLHtkOiJNMTIgNnY2bDQgMiJ9XSxbInBhdGgiLHtkOiJNMi41IDguODc1YTEwIDEwIDAgMCAwLS41IDMifV0sWyJwYXRoIix7ZDoiTTIuODMgMTZhMTAgMTAgMCAwIDAgMi40MyAzLjQifV0sWyJwYXRoIix7ZDoiTTQuNjM2IDUuMjM1YTEwIDEwIDAgMCAxIC44OTEtLjg1NyJ9XSxbInBhdGgiLHtkOiJNOC42NDQgMjEuNDJhMTAgMTAgMCAwIDAgNy42MzEtLjM4In1dXX0pO3ZhciB2ZyxIN2U9bigoKT0+e3ZnPVtbInBhdGgiLHtkOiJNMTIgNnY2bDMuNjQ0IDEuODIyIn1dLFsicGF0aCIse2Q6Ik0xNiAxOWg2In1dLFsicGF0aCIse2Q6Ik0xOSAxNnY2In1dLFsicGF0aCIse2Q6Ik0yMS45MiAxMy4yNjdhMTAgMTAgMCAxIDAtOC42NTMgOC42NTMifV1dfSk7dmFyIHlnLHE3ZT1uKCgpPT57eWc9W1sicGF0aCIse2Q6Ik0xMiA2djZsNCAyIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXX0pO3ZhciB3ZyxWN2U9bigoKT0+e3dnPVtbInBhdGgiLHtkOiJNMTAgOS4xN2EzIDMgMCAxIDAgMCA1LjY2In1dLFsicGF0aCIse2Q6Ik0xNyA5LjE3YTMgMyAwIDEgMCAwIDUuNjYifV0sWyJyZWN0Iix7eDoiMiIseToiNSIsd2lkdGg6IjIwIixoZWlnaHQ6IjE0IixyeDoiMiJ9XV19KTt2YXIgTWcsVTdlPW4oKCk9PntNZz1bWyJwYXRoIix7ZDoiTTEyIDEydjQifV0sWyJwYXRoIix7ZDoiTTEyIDIwaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTcgMThoLjVhMSAxIDAgMCAwIDAtOWgtMS43OUE3IDcgMCAxIDAgNyAxNy43MDgifV1dfSk7dmFyIHpnLGo3ZT1uKCgpPT57emc9W1sicGF0aCIse2Q6Ik0yMSAxNS4yNTFBNC41IDQuNSAwIDAgMCAxNy41IDhoLTEuNzlBNyA3IDAgMSAwIDMgMTMuNjA3In1dLFsicGF0aCIse2Q6Ik03IDExdjRoNCJ9XSxbInBhdGgiLHtkOiJNOCAxOWE1IDUgMCAwIDAgOS0zIDQuNSA0LjUgMCAwIDAtNC41LTQuNSA0LjgyIDQuODIgMCAwIDAtMy40MSAxLjQxTDcgMTUifV1dfSk7dmFyIGtnLFc3ZT1uKCgpPT57a2c9W1sicGF0aCIse2Q6Im0xNyAxNS01LjUgNS41TDkgMTgifV0sWyJwYXRoIix7ZDoiTTUgMTcuNzQzQTcgNyAwIDEgMSAxNS43MSAxMGgxLjc5YTQuNSA0LjUgMCAwIDEgMS41IDguNzQyIn1dXX0pO3ZhciBTZyxHN2U9bigoKT0+e1NnPVtbInBhdGgiLHtkOiJtMTAuODUyIDE5Ljc3Mi0uMzgzLjkyNCJ9XSxbInBhdGgiLHtkOiJtMTMuMTQ4IDE0LjIyOC4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJNMTMuMTQ4IDE5Ljc3MmEzIDMgMCAxIDAtMi4yOTYtNS41NDRsLS4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTMuNTMgMjAuNjk2LS4zODItLjkyNGEzIDMgMCAxIDEtMi4yOTYtNS41NDQifV0sWyJwYXRoIix7ZDoibTE0Ljc3MiAxNS44NTIuOTIzLS4zODMifV0sWyJwYXRoIix7ZDoibTE0Ljc3MiAxOC4xNDguOTIzLjM4MyJ9XSxbInBhdGgiLHtkOiJNNC4yIDE1LjFhNyA3IDAgMSAxIDkuOTMtOS44NThBNyA3IDAgMCAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjIifV0sWyJwYXRoIix7ZDoibTkuMjI4IDE1Ljg1Mi0uOTIzLS4zODMifV0sWyJwYXRoIix7ZDoibTkuMjI4IDE4LjE0OC0uOTIzLjM4MyJ9XV19KTt2YXIgVjAsWTdlPW4oKCk9PntWMD1bWyJwYXRoIix7ZDoiTTEyIDEzdjhsLTQtNCJ9XSxbInBhdGgiLHtkOiJtMTIgMjEgNC00In1dLFsicGF0aCIse2Q6Ik00LjM5MyAxNS4yNjlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNDM2IDguMjg0In1dXX0pO3ZhciBDZyxaN2U9bigoKT0+e0NnPVtbInBhdGgiLHtkOiJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiJ9XSxbInBhdGgiLHtkOiJNOCAxOXYxIn1dLFsicGF0aCIse2Q6Ik04IDE0djEifV0sWyJwYXRoIix7ZDoiTTE2IDE5djEifV0sWyJwYXRoIix7ZDoiTTE2IDE0djEifV0sWyJwYXRoIix7ZDoiTTEyIDIxdjEifV0sWyJwYXRoIix7ZDoiTTEyIDE2djEifV1dfSk7dmFyIExnLFg3ZT1uKCgpPT57TGc9W1sicGF0aCIse2Q6Ik00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIn1dLFsicGF0aCIse2Q6Ik0xNiAxN0g3In1dLFsicGF0aCIse2Q6Ik0xNyAyMUg5In1dXX0pO3ZhciBUZyxRN2U9bigoKT0+e1RnPVtbInBhdGgiLHtkOiJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiJ9XSxbInBhdGgiLHtkOiJNMTYgMTR2MiJ9XSxbInBhdGgiLHtkOiJNOCAxNHYyIn1dLFsicGF0aCIse2Q6Ik0xNiAyMGguMDEifV0sWyJwYXRoIix7ZDoiTTggMjBoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAxNnYyIn1dLFsicGF0aCIse2Q6Ik0xMiAyMmguMDEifV1dfSk7dmFyIF9nLEs3ZT1uKCgpPT57X2c9W1sicGF0aCIse2Q6Ik02IDE2LjMyNkE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgLjUgOC45NzMifV0sWyJwYXRoIix7ZDoibTEzIDEyLTMgNWg0bC0zIDUifV1dfSk7dmFyIEFnLEo3ZT1uKCgpPT57QWc9W1sicGF0aCIse2Q6Ik0xMSAyMHYyIn1dLFsicGF0aCIse2Q6Ik0xOC4zNzYgMTQuNTEyYTYgNiAwIDAgMCAzLjQ2MS00LjEyN2MuMTQ4LS42MjUtLjY1OS0uOTctMS4yNDgtLjcxNGE0IDQgMCAwIDEtNS4yNTktNS4yNmMuMjU1LS41ODktLjA5LTEuMzk1LS43MTYtMS4yNDhhNiA2IDAgMCAwLTQuNTk0IDUuMzYifV0sWyJwYXRoIix7ZDoiTTMgMjBhNSA1IDAgMSAxIDguOS00SDEzYTMgMyAwIDAgMSAyIDUuMjQifV0sWyJwYXRoIix7ZDoiTTcgMTl2MiJ9XV19KTt2YXIgJGcsZWZlPW4oKCk9PnskZz1bWyJwYXRoIix7ZDoiTTEzIDE2YTMgMyAwIDAgMSAwIDZIN2E1IDUgMCAxIDEgNC45LTZ6In1dLFsicGF0aCIse2Q6Ik0xOC4zNzYgMTQuNTEyYTYgNiAwIDAgMCAzLjQ2MS00LjEyN2MuMTQ4LS42MjUtLjY1OS0uOTctMS4yNDgtLjcxNGE0IDQgMCAwIDEtNS4yNTktNS4yNmMuMjU1LS41ODktLjA5LTEuMzk1LS43MTYtMS4yNDhhNiA2IDAgMCAwLTQuNTk0IDUuMzYifV1dfSk7dmFyIERnLHRmZT1uKCgpPT57RGc9W1sicGF0aCIse2Q6Ik00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIn1dLFsicGF0aCIse2Q6Im05LjIgMjIgMy03In1dLFsicGF0aCIse2Q6Im05IDEzLTMgNyJ9XSxbInBhdGgiLHtkOiJtMTcgMTMtMyA3In1dXX0pO3ZhciBFZyxhZmU9bigoKT0+e0VnPVtbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik01Ljc4MiA1Ljc4MkE3IDcgMCAwIDAgOSAxOWg4LjVhNC41IDQuNSAwIDAgMCAxLjMwNy0uMTkzIn1dLFsicGF0aCIse2Q6Ik0yMS41MzIgMTYuNUE0LjUgNC41IDAgMCAwIDE3LjUgMTBoLTEuNzlBNy4wMDggNy4wMDggMCAwIDAgMTAgNS4wNyJ9XV19KTt2YXIgTmcscmZlPW4oKCk9PntOZz1bWyJwYXRoIix7ZDoiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIifV0sWyJwYXRoIix7ZDoiTTE2IDE0djYifV0sWyJwYXRoIix7ZDoiTTggMTR2NiJ9XSxbInBhdGgiLHtkOiJNMTIgMTZ2NiJ9XV19KTt2YXIgUGcsaWZlPW4oKCk9PntQZz1bWyJwYXRoIix7ZDoiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIifV0sWyJwYXRoIix7ZDoiTTggMTVoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDE5aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTdoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAyMWguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDE1aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTloLjAxIn1dXX0pO3ZhciBJZyxvZmU9bigoKT0+e0lnPVtbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Im00LjkzIDQuOTMgMS40MSAxLjQxIn1dLFsicGF0aCIse2Q6Ik0yMCAxMmgyIn1dLFsicGF0aCIse2Q6Im0xOS4wNyA0LjkzLTEuNDEgMS40MSJ9XSxbInBhdGgiLHtkOiJNMTUuOTQ3IDEyLjY1YTQgNCAwIDAgMC01LjkyNS00LjEyOCJ9XSxbInBhdGgiLHtkOiJNMyAyMGE1IDUgMCAxIDEgOC45LTRIMTNhMyAzIDAgMCAxIDIgNS4yNCJ9XSxbInBhdGgiLHtkOiJNMTEgMjB2MiJ9XSxbInBhdGgiLHtkOiJNNyAxOXYyIn1dXX0pO3ZhciBGZyxzZmU9bigoKT0+e0ZnPVtbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Im00LjkzIDQuOTMgMS40MSAxLjQxIn1dLFsicGF0aCIse2Q6Ik0yMCAxMmgyIn1dLFsicGF0aCIse2Q6Im0xOS4wNyA0LjkzLTEuNDEgMS40MSJ9XSxbInBhdGgiLHtkOiJNMTUuOTQ3IDEyLjY1YTQgNCAwIDAgMC01LjkyNS00LjEyOCJ9XSxbInBhdGgiLHtkOiJNMTMgMjJIN2E1IDUgMCAxIDEgNC45LTZIMTNhMyAzIDAgMCAxIDAgNloifV1dfSk7dmFyIE9nLG5mZT1uKCgpPT57T2c9W1sicGF0aCIse2Q6Im0xNyAxOC0xLjUzNSAxLjYwNWE1IDUgMCAwIDEtOC0xLjUifV0sWyJwYXRoIix7ZDoiTTE3IDIydi00aC00In1dLFsicGF0aCIse2Q6Ik0yMC45OTYgMTUuMjUxQTQuNSA0LjUgMCAwIDAgMTcuNDk1IDhoLTEuNzlhNyA3IDAgMSAwLTEyLjcwOSA1LjYwNyJ9XSxbInBhdGgiLHtkOiJNNyAxMHY0aDQifV0sWyJwYXRoIix7ZDoibTcgMTQgMS41MzUtMS42MDVhNSA1IDAgMCAxIDggMS41In1dXX0pO3ZhciBVMCxsZmU9bigoKT0+e1UwPVtbInBhdGgiLHtkOiJNMTIgMTN2OCJ9XSxbInBhdGgiLHtkOiJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiJ9XSxbInBhdGgiLHtkOiJtOCAxNyA0LTQgNCA0In1dXX0pO3ZhciBCZyxjZmU9bigoKT0+e0JnPVtbInBhdGgiLHtkOiJNMTcuNSAxOUg5YTcgNyAwIDEgMSA2LjcxLTloMS43OWE0LjUgNC41IDAgMSAxIDAgOVoifV1dfSk7dmFyIFJnLGRmZT1uKCgpPT57Umc9W1sicGF0aCIse2Q6Ik0xNy41IDIxSDlhNyA3IDAgMSAxIDYuNzEtOWgxLjc5YTQuNSA0LjUgMCAxIDEgMCA5WiJ9XSxbInBhdGgiLHtkOiJNMjIgMTBhMyAzIDAgMCAwLTMtM2gtMi4yMDdhNS41MDIgNS41MDIgMCAwIDAtMTAuNzAyLjUifV1dfSk7dmFyIEhnLGZmZT1uKCgpPT57SGc9W1sicGF0aCIse2Q6Ik0xNi4xNyA3LjgzIDIgMjIifV0sWyJwYXRoIix7ZDoiTTQuMDIgMTJhMi44MjcgMi44MjcgMCAxIDEgMy44MS00LjE3QTIuODI3IDIuODI3IDAgMSAxIDEyIDQuMDJhMi44MjcgMi44MjcgMCAxIDEgNC4xNyAzLjgxQTIuODI3IDIuODI3IDAgMSAxIDE5Ljk4IDEyYTIuODI3IDIuODI3IDAgMSAxLTMuODEgNC4xN0EyLjgyNyAyLjgyNyAwIDEgMSAxMiAxOS45OGEyLjgyNyAyLjgyNyAwIDEgMS00LjE3LTMuODFBMSAxIDAgMSAxIDQgMTIifV0sWyJwYXRoIix7ZDoibTcuODMgNy44MyA4LjM0IDguMzQifV1dfSk7dmFyIHFnLHVmZT1uKCgpPT57cWc9W1sicGF0aCIse2Q6Ik0xNy4yOCA5LjA1YTUuNSA1LjUgMCAxIDAtMTAuNTYgMEE1LjUgNS41IDAgMSAwIDEyIDE3LjY2YTUuNSA1LjUgMCAxIDAgNS4yOC04LjZaIn1dLFsicGF0aCIse2Q6Ik0xMiAxNy42NkwxMiAyMiJ9XV19KTt2YXIgajAscGZlPW4oKCk9PntqMD1bWyJwYXRoIix7ZDoibTE4IDE2IDQtNC00LTQifV0sWyJwYXRoIix7ZDoibTYgOC00IDQgNCA0In1dLFsicGF0aCIse2Q6Im0xNC41IDQtNSAxNiJ9XV19KTt2YXIgVmcsaGZlPW4oKCk9PntWZz1bWyJwYXRoIix7ZDoibTE2IDE4IDYtNi02LTYifV0sWyJwYXRoIix7ZDoibTggNi02IDYgNiA2In1dXX0pO3ZhciBVZyxtZmU9bigoKT0+e1VnPVtbInBvbHlnb24iLHtwb2ludHM6IjEyIDIgMjIgOC41IDIyIDE1LjUgMTIgMjIgMiAxNS41IDIgOC41IDEyIDIifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIyMiIseTI6IjE1LjUifV0sWyJwb2x5bGluZSIse3BvaW50czoiMjIgOC41IDEyIDE1LjUgMiA4LjUifV0sWyJwb2x5bGluZSIse3BvaW50czoiMiAxNS41IDEyIDguNSAyMiAxNS41In1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiMiIseTI6IjguNSJ9XV19KTt2YXIgamcsZ2ZlPW4oKCk9PntqZz1bWyJwYXRoIix7ZDoiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiI3LjUgNC4yMSAxMiA2LjgxIDE2LjUgNC4yMSJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiI3LjUgMTkuNzkgNy41IDE0LjYgMyAxMiJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIyMSAxMiAxNi41IDE0LjYgMTYuNSAxOS43OSJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjIyLjA4Iix5MjoiMTIifV1dfSk7dmFyIFdnLHhmZT1uKCgpPT57V2c9W1sicGF0aCIse2Q6Ik0xMCAydjIifV0sWyJwYXRoIix7ZDoiTTE0IDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTYgOGExIDEgMCAwIDEgMSAxdjhhNCA0IDAgMCAxLTQgNEg3YTQgNCAwIDAgMS00LTRWOWExIDEgMCAwIDEgMS0xaDE0YTQgNCAwIDEgMSAwIDhoLTEifV0sWyJwYXRoIix7ZDoiTTYgMnYyIn1dXX0pO3ZhciBHZyxiZmU9bigoKT0+e0dnPVtbImNpcmNsZSIse2N4OiI4IixjeToiOCIscjoiNiJ9XSxbInBhdGgiLHtkOiJNMTguMDkgMTAuMzdBNiA2IDAgMSAxIDEwLjM0IDE4In1dLFsicGF0aCIse2Q6Ik03IDZoMXY0In1dLFsicGF0aCIse2Q6Im0xNi43MSAxMy44OC43LjcxLTIuODIgMi44MiJ9XV19KTt2YXIgWWcsdmZlPW4oKCk9PntZZz1bWyJwYXRoIix7ZDoiTTExIDEwLjI3IDcgMy4zNCJ9XSxbInBhdGgiLHtkOiJtMTEgMTMuNzMtNCA2LjkzIn1dLFsicGF0aCIse2Q6Ik0xMiAyMnYtMiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xNCAxMmg4In1dLFsicGF0aCIse2Q6Im0xNyAyMC42Ni0xLTEuNzMifV0sWyJwYXRoIix7ZDoibTE3IDMuMzQtMSAxLjczIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIifV0sWyJwYXRoIix7ZDoibTIwLjY2IDE3LTEuNzMtMSJ9XSxbInBhdGgiLHtkOiJtMjAuNjYgNy0xLjczIDEifV0sWyJwYXRoIix7ZDoibTMuMzQgMTcgMS43My0xIn1dLFsicGF0aCIse2Q6Im0zLjM0IDcgMS43MyAxIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiOCJ9XV19KTt2YXIgVzAseWZlPW4oKCk9PntXMD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgM3YxOCJ9XV19KTt2YXIgUGksd2ZlPW4oKCk9PntQaT1bWyJwYXRoIix7ZDoiTTEwLjUgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjUuNSJ9XSxbInBhdGgiLHtkOiJtMTQuMyAxOS42IDEtLjQifV0sWyJwYXRoIix7ZDoiTTE1IDN2Ny41In1dLFsicGF0aCIse2Q6Im0xNS4yIDE2LjktLjktLjMifV0sWyJwYXRoIix7ZDoibTE2LjYgMjEuNy4zLS45In1dLFsicGF0aCIse2Q6Im0xNi44IDE1LjMtLjQtMSJ9XSxbInBhdGgiLHtkOiJtMTkuMSAxNS4yLjMtLjkifV0sWyJwYXRoIix7ZDoibTE5LjYgMjEuNy0uNC0xIn1dLFsicGF0aCIse2Q6Im0yMC43IDE2LjggMS0uNCJ9XSxbInBhdGgiLHtkOiJtMjEuNyAxOS40LS45LS4zIn1dLFsicGF0aCIse2Q6Ik05IDN2MTgifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxOCIscjoiMyJ9XV19KTt2YXIgRzAsTWZlPW4oKCk9PntHMD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOSAzdjE4In1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4In1dXX0pO3ZhciBaZyx6ZmU9bigoKT0+e1pnPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik03LjUgM3YxOCJ9XSxbInBhdGgiLHtkOiJNMTIgM3YxOCJ9XSxbInBhdGgiLHtkOiJNMTYuNSAzdjE4In1dXX0pO3ZhciBYZyxrZmU9bigoKT0+e1hnPVtbInBhdGgiLHtkOiJNMTQgM2ExIDEgMCAwIDEgMSAxdjVhMSAxIDAgMCAxLTEgMSJ9XSxbInBhdGgiLHtkOiJNMTkgM2ExIDEgMCAwIDEgMSAxdjVhMSAxIDAgMCAxLTEgMSJ9XSxbInBhdGgiLHtkOiJtNyAxNSAzIDMifV0sWyJwYXRoIix7ZDoibTcgMjEgMy0zSDVhMiAyIDAgMCAxLTItMnYtMiJ9XSxbInJlY3QiLHt4OiIxNCIseToiMTQiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxIn1dLFsicmVjdCIse3g6IjMiLHk6IjMiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxIn1dXX0pO3ZhciBRZyxTZmU9bigoKT0+e1FnPVtbInBhdGgiLHtkOiJNMTUgNnYxMmEzIDMgMCAxIDAgMy0zSDZhMyAzIDAgMSAwIDMgM1Y2YTMgMyAwIDEgMC0zIDNoMTJhMyAzIDAgMSAwLTMtMyJ9XV19KTt2YXIgS2csQ2ZlPW4oKCk9PntLZz1bWyJwYXRoIix7ZDoibTE2LjI0IDcuNzYtMS44MDQgNS40MTFhMiAyIDAgMCAxLTEuMjY1IDEuMjY1TDcuNzYgMTYuMjRsMS44MDQtNS40MTFhMiAyIDAgMCAxIDEuMjY1LTEuMjY1eiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgSmcsTGZlPW4oKCk9PntKZz1bWyJwYXRoIix7ZDoiTTE1LjUzNiAxMS4yOTNhMSAxIDAgMCAwIDAgMS40MTRsMi4zNzYgMi4zNzdhMSAxIDAgMCAwIDEuNDE0IDBsMi4zNzctMi4zNzdhMSAxIDAgMCAwIDAtMS40MTRsLTIuMzc3LTIuMzc3YTEgMSAwIDAgMC0xLjQxNCAweiJ9XSxbInBhdGgiLHtkOiJNMi4yOTcgMTEuMjkzYTEgMSAwIDAgMCAwIDEuNDE0bDIuMzc3IDIuMzc3YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc3YTEgMSAwIDAgMCAwLTEuNDE0TDYuMDg4IDguOTE2YTEgMSAwIDAgMC0xLjQxNCAweiJ9XSxbInBhdGgiLHtkOiJNOC45MTYgMTcuOTEyYTEgMSAwIDAgMCAwIDEuNDE1bDIuMzc3IDIuMzc2YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc2YTEgMSAwIDAgMCAwLTEuNDE1bC0yLjM3Ny0yLjM3NmExIDEgMCAwIDAtMS40MTQgMHoifV0sWyJwYXRoIix7ZDoiTTguOTE2IDQuNjc0YTEgMSAwIDAgMCAwIDEuNDE0bDIuMzc3IDIuMzc2YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc2YTEgMSAwIDAgMCAwLTEuNDE0bC0yLjM3Ny0yLjM3N2ExIDEgMCAwIDAtMS40MTQgMHoifV1dfSk7dmFyIGV4LFRmZT1uKCgpPT57ZXg9W1sicmVjdCIse3dpZHRoOiIxNCIsaGVpZ2h0OiI4Iix4OiI1Iix5OiIyIixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiOCIseDoiMiIseToiMTQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik02IDE4aDIifV0sWyJwYXRoIix7ZDoiTTEyIDE4aDYifV1dfSk7dmFyIHR4LF9mZT1uKCgpPT57dHg9W1sicGF0aCIse2Q6Ik0zIDIwYTEgMSAwIDAgMS0xLTF2LTFhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjFhMSAxIDAgMCAxLTEgMVoifV0sWyJwYXRoIix7ZDoiTTIwIDE2YTggOCAwIDEgMC0xNiAwIn1dLFsicGF0aCIse2Q6Ik0xMiA0djQifV0sWyJwYXRoIix7ZDoiTTEwIDRoNCJ9XV19KTt2YXIgYXgsQWZlPW4oKCk9PntheD1bWyJwYXRoIix7ZDoibTIwLjkgMTguNTUtOC0xNS45OGExIDEgMCAwIDAtMS44IDBsLTggMTUuOTgifV0sWyJlbGxpcHNlIix7Y3g6IjEyIixjeToiMTkiLHJ4OiI5IixyeToiMyJ9XV19KTt2YXIgcngsJGZlPW4oKCk9PntyeD1bWyJyZWN0Iix7eDoiMiIseToiNiIsd2lkdGg6IjIwIixoZWlnaHQ6IjgiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Ik0xNyAxNHY3In1dLFsicGF0aCIse2Q6Ik03IDE0djcifV0sWyJwYXRoIix7ZDoiTTE3IDN2MyJ9XSxbInBhdGgiLHtkOiJNNyAzdjMifV0sWyJwYXRoIix7ZDoiTTEwIDE0IDIuMyA2LjMifV0sWyJwYXRoIix7ZDoibTE0IDYgNy43IDcuNyJ9XSxbInBhdGgiLHtkOiJtOCA2IDggOCJ9XV19KTt2YXIgWTAsRGZlPW4oKCk9PntZMD1bWyJwYXRoIix7ZDoiTTE2IDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTcuOTE1IDIyYTYgNiAwIDAgMC0xMiAwIn1dLFsicGF0aCIse2Q6Ik04IDJ2MiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0In1dLFsicmVjdCIse3g6IjMiLHk6IjQiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxOCIscng6IjIifV1dfSk7dmFyIGl4LEVmZT1uKCgpPT57aXg9W1sicGF0aCIse2Q6Ik0xNiAydjIifV0sWyJwYXRoIix7ZDoiTTcgMjJ2LTJhMiAyIDAgMCAxIDItMmg2YTIgMiAwIDAgMSAyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNOCAydjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMSIscjoiMyJ9XSxbInJlY3QiLHt4OiIzIix5OiI0Iix3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHJ4OiIyIn1dXX0pO3ZhciBveCxOZmU9bigoKT0+e294PVtbInBhdGgiLHtkOiJNMjIgNy43YzAtLjYtLjQtMS4yLS44LTEuNWwtNi4zLTMuOWExLjcyIDEuNzIgMCAwIDAtMS43IDBsLTEwLjMgNmMtLjUuMi0uOS44LS45IDEuNHY2LjZjMCAuNS40IDEuMi44IDEuNWw2LjMgMy45YTEuNzIgMS43MiAwIDAgMCAxLjcgMGwxMC4zLTZjLjUtLjMuOS0xIC45LTEuNVoifV0sWyJwYXRoIix7ZDoiTTEwIDIxLjlWMTRMMi4xIDkuMSJ9XSxbInBhdGgiLHtkOiJtMTAgMTQgMTEuOS02LjkifV0sWyJwYXRoIix7ZDoiTTE0IDE5Ljh2LTguMSJ9XSxbInBhdGgiLHtkOiJNMTggMTcuNVY5LjQifV1dfSk7dmFyIHN4LFBmZT1uKCgpPT57c3g9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik0xMiAxOGE2IDYgMCAwIDAgMC0xMnYxMnoifV1dfSk7dmFyIG54LElmZT1uKCgpPT57bng9W1sicGF0aCIse2Q6Ik0xMiAyYTEwIDEwIDAgMSAwIDEwIDEwIDQgNCAwIDAgMS01LTUgNCA0IDAgMCAxLTUtNSJ9XSxbInBhdGgiLHtkOiJNOC41IDguNXYuMDEifV0sWyJwYXRoIix7ZDoiTTE2IDE1LjV2LjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAxMnYuMDEifV0sWyJwYXRoIix7ZDoiTTExIDE3di4wMSJ9XSxbInBhdGgiLHtkOiJNNyAxNHYuMDEifV1dfSk7dmFyIGx4LEZmZT1uKCgpPT57bHg9W1sicGF0aCIse2Q6Ik0yIDEyaDIwIn1dLFsicGF0aCIse2Q6Ik0yMCAxMnY4YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi04In1dLFsicGF0aCIse2Q6Im00IDggMTYtNCJ9XSxbInBhdGgiLHtkOiJtOC44NiA2Ljc4LS40NS0xLjgxYTIgMiAwIDAgMSAxLjQ1LTIuNDNsMS45NC0uNDhhMiAyIDAgMCAxIDIuNDMgMS40NmwuNDUgMS44In1dXX0pO3ZhciBjeCxPZmU9bigoKT0+e2N4PVtbInBhdGgiLHtkOiJtMTIgMTUgMiAyIDQtNCJ9XSxbInJlY3QiLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHg6IjgiLHk6IjgiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIn1dXX0pO3ZhciBkeCxCZmU9bigoKT0+e2R4PVtbImxpbmUiLHt4MToiMTIiLHgyOiIxOCIseTE6IjE1Iix5MjoiMTUifV0sWyJyZWN0Iix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix4OiI4Iix5OiI4IixyeDoiMiIscnk6IjIifV0sWyJwYXRoIix7ZDoiTTQgMTZjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmgxMGMxLjEgMCAyIC45IDIgMiJ9XV19KTt2YXIgZngsUmZlPW4oKCk9PntmeD1bWyJsaW5lIix7eDE6IjE1Iix4MjoiMTUiLHkxOiIxMiIseTI6IjE4In1dLFsibGluZSIse3gxOiIxMiIseDI6IjE4Iix5MToiMTUiLHkyOiIxNSJ9XSxbInJlY3QiLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHg6IjgiLHk6IjgiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIn1dXX0pO3ZhciB1eCxIZmU9bigoKT0+e3V4PVtbImxpbmUiLHt4MToiMTIiLHgyOiIxOCIseTE6IjE4Iix5MjoiMTIifV0sWyJyZWN0Iix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix4OiI4Iix5OiI4IixyeDoiMiIscnk6IjIifV0sWyJwYXRoIix7ZDoiTTQgMTZjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmgxMGMxLjEgMCAyIC45IDIgMiJ9XV19KTt2YXIgcHgscWZlPW4oKCk9PntweD1bWyJyZWN0Iix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix4OiI4Iix5OiI4IixyeDoiMiIscnk6IjIifV0sWyJwYXRoIix7ZDoiTTQgMTZjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmgxMGMxLjEgMCAyIC45IDIgMiJ9XV19KTt2YXIgaHgsVmZlPW4oKCk9PntoeD1bWyJsaW5lIix7eDE6IjEyIix4MjoiMTgiLHkxOiIxMiIseTI6IjE4In1dLFsibGluZSIse3gxOiIxMiIseDI6IjE4Iix5MToiMTgiLHkyOiIxMiJ9XSxbInJlY3QiLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHg6IjgiLHk6IjgiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIn1dXX0pO3ZhciBteCxVZmU9bigoKT0+e214PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNOS4xNyAxNC44M2E0IDQgMCAxIDAgMC01LjY2In1dXX0pO3ZhciBneCxqZmU9bigoKT0+e2d4PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNMTQuODMgMTQuODNhNCA0IDAgMSAxIDAtNS42NiJ9XV19KTt2YXIgeHgsV2ZlPW4oKCk9Pnt4eD1bWyJwYXRoIix7ZDoibTE1IDEwIDUgNS01IDUifV0sWyJwYXRoIix7ZDoiTTQgNHY3YTQgNCAwIDAgMCA0IDRoMTIifV1dfSk7dmFyIGJ4LEdmZT1uKCgpPT57Yng9W1sicGF0aCIse2Q6Ik0yMCA0djdhNCA0IDAgMCAxLTQgNEg0In1dLFsicGF0aCIse2Q6Im05IDEwLTUgNSA1IDUifV1dfSk7dmFyIHZ4LFlmZT1uKCgpPT57dng9W1sicGF0aCIse2Q6Im0xNCAxNS01IDUtNS01In1dLFsicGF0aCIse2Q6Ik0yMCA0aC03YTQgNCAwIDAgMC00IDR2MTIifV1dfSk7dmFyIHl4LFpmZT1uKCgpPT57eXg9W1sicGF0aCIse2Q6Ik0xNCA5IDkgNCA0IDkifV0sWyJwYXRoIix7ZDoiTTIwIDIwaC03YTQgNCAwIDAgMS00LTRWNCJ9XV19KTt2YXIgd3gsWGZlPW4oKCk9Pnt3eD1bWyJwYXRoIix7ZDoibTEwIDE1IDUgNSA1LTUifV0sWyJwYXRoIix7ZDoiTTQgNGg3YTQgNCAwIDAgMSA0IDR2MTIifV1dfSk7dmFyIE14LFFmZT1uKCgpPT57TXg9W1sicGF0aCIse2Q6Im0xMCA5IDUtNSA1IDUifV0sWyJwYXRoIix7ZDoiTTQgMjBoN2E0IDQgMCAwIDAgNC00VjQifV1dfSk7dmFyIHp4LEtmZT1uKCgpPT57eng9W1sicGF0aCIse2Q6Ik0yMCAyMHYtN2E0IDQgMCAwIDAtNC00SDQifV0sWyJwYXRoIix7ZDoiTTkgMTQgNCA5bDUtNSJ9XV19KTt2YXIga3gsSmZlPW4oKCk9PntreD1bWyJwYXRoIix7ZDoibTE1IDE0IDUtNS01LTUifV0sWyJwYXRoIix7ZDoiTTQgMjB2LTdhNCA0IDAgMCAxIDQtNGgxMiJ9XV19KTt2YXIgU3gsZXVlPW4oKCk9PntTeD1bWyJwYXRoIix7ZDoiTTEyIDIwdjIifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTcgMjB2MiJ9XSxbInBhdGgiLHtkOiJNMTcgMnYyIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIifV0sWyJwYXRoIix7ZDoiTTIgMTdoMiJ9XSxbInBhdGgiLHtkOiJNMiA3aDIifV0sWyJwYXRoIix7ZDoiTTIwIDEyaDIifV0sWyJwYXRoIix7ZDoiTTIwIDE3aDIifV0sWyJwYXRoIix7ZDoiTTIwIDdoMiJ9XSxbInBhdGgiLHtkOiJNNyAyMHYyIn1dLFsicGF0aCIse2Q6Ik03IDJ2MiJ9XSxbInJlY3QiLHt4OiI0Iix5OiI0Iix3aWR0aDoiMTYiLGhlaWdodDoiMTYiLHJ4OiIyIn1dLFsicmVjdCIse3g6IjgiLHk6IjgiLHdpZHRoOiI4IixoZWlnaHQ6IjgiLHJ4OiIxIn1dXX0pO3ZhciBDeCx0dWU9bigoKT0+e0N4PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNMTAgOS4zYTIuOCAyLjggMCAwIDAtMy41IDEgMy4xIDMuMSAwIDAgMCAwIDMuNCAyLjcgMi43IDAgMCAwIDMuNSAxIn1dLFsicGF0aCIse2Q6Ik0xNyA5LjNhMi44IDIuOCAwIDAgMC0zLjUgMSAzLjEgMy4xIDAgMCAwIDAgMy40IDIuNyAyLjcgMCAwIDAgMy41IDEifV1dfSk7dmFyIEx4LGF1ZT1uKCgpPT57THg9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNCIseDoiMiIseToiNSIscng6IjIifV0sWyJsaW5lIix7eDE6IjIiLHgyOiIyMiIseTE6IjEwIix5MjoiMTAifV1dfSk7dmFyIFR4LHJ1ZT1uKCgpPT57VHg9W1sicGF0aCIse2Q6Ik0xMC4yIDE4SDQuNzc0YTEuNSAxLjUgMCAwIDEtMS4zNTItLjk3IDExIDExIDAgMCAxIC4xMzItNi40ODcifV0sWyJwYXRoIix7ZDoiTTE4IDEwLjJWNC43NzRhMS41IDEuNSAwIDAgMC0uOTctMS4zNTIgMTEgMTEgMCAwIDAtNi40ODYuMTMyIn1dLFsicGF0aCIse2Q6Ik0xOCA1YTQgMyAwIDAgMSA0IDMgMiAyIDAgMCAxLTIgMiAxMCAxMCAwIDAgMC01LjEzOSAxLjQyIn1dLFsicGF0aCIse2Q6Ik01IDE4YTMgNCAwIDAgMCAzIDQgMiAyIDAgMCAwIDItMiAxMCAxMCAwIDAgMSAxLjQyLTUuMTQifV0sWyJwYXRoIix7ZDoiTTguNzA5IDIuNTU0YTEwIDEwIDAgMCAwLTYuMTU1IDYuMTU1IDEuNSAxLjUgMCAwIDAgLjY3NiAxLjYyNmw5LjgwNyA1LjQyYTIgMiAwIDAgMCAyLjcxOC0yLjcxOGwtNS40Mi05LjgwN2ExLjUgMS41IDAgMCAwLTEuNjI2LS42NzYifV1dfSk7dmFyIF94LGl1ZT1uKCgpPT57X3g9W1sicGF0aCIse2Q6Ik02IDJ2MTRhMiAyIDAgMCAwIDIgMmgxNCJ9XSxbInBhdGgiLHtkOiJNMTggMjJWOGEyIDIgMCAwIDAtMi0ySDIifV1dfSk7dmFyIEF4LG91ZT1uKCgpPT57QXg9W1sicGF0aCIse2Q6Ik00IDlhMiAyIDAgMCAwLTIgMnYyYTIgMiAwIDAgMCAyIDJoNGExIDEgMCAwIDEgMSAxdjRhMiAyIDAgMCAwIDIgMmgyYTIgMiAwIDAgMCAyLTJ2LTRhMSAxIDAgMCAxIDEtMWg0YTIgMiAwIDAgMCAyLTJ2LTJhMiAyIDAgMCAwLTItMmgtNGExIDEgMCAwIDEtMS0xVjRhMiAyIDAgMCAwLTItMmgtMmEyIDIgMCAwIDAtMiAydjRhMSAxIDAgMCAxLTEgMXoifV1dfSk7dmFyICR4LHN1ZT1uKCgpPT57JHg9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsibGluZSIse3gxOiIyMiIseDI6IjE4Iix5MToiMTIiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjIiLHkxOiIxMiIseTI6IjEyIn1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiNiIseTI6IjIifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIyMiIseTI6IjE4In1dXX0pO3ZhciBEeCxudWU9bigoKT0+e0R4PVtbInBhdGgiLHtkOiJNMTEuNTYyIDMuMjY2YS41LjUgMCAwIDEgLjg3NiAwTDE1LjM5IDguODdhMSAxIDAgMCAwIDEuNTE2LjI5NEwyMS4xODMgNS41YS41LjUgMCAwIDEgLjc5OC41MTlsLTIuODM0IDEwLjI0NmExIDEgMCAwIDEtLjk1Ni43MzRINS44MWExIDEgMCAwIDEtLjk1Ny0uNzM0TDIuMDIgNi4wMmEuNS41IDAgMCAxIC43OTgtLjUxOWw0LjI3NiAzLjY2NGExIDEgMCAwIDAgMS41MTYtLjI5NHoifV0sWyJwYXRoIix7ZDoiTTUgMjFoMTQifV1dfSk7dmFyIEV4LGx1ZT1uKCgpPT57RXg9W1sicGF0aCIse2Q6Im0yMS4xMiA2LjQtNi4wNS00LjA2YTIgMiAwIDAgMC0yLjE3LS4wNUwyLjk1IDguNDFhMiAyIDAgMCAwLS45NSAxLjd2NS44MmEyIDIgMCAwIDAgLjg4IDEuNjZsNi4wNSA0LjA3YTIgMiAwIDAgMCAyLjE3LjA1bDkuOTUtNi4xMmEyIDIgMCAwIDAgLjk1LTEuN1Y4LjA2YTIgMiAwIDAgMC0uODgtMS42NloifV0sWyJwYXRoIix7ZDoiTTEwIDIydi04TDIuMjUgOS4xNSJ9XSxbInBhdGgiLHtkOiJtMTAgMTQgMTEuNzctNi44NyJ9XV19KTt2YXIgTngsY3VlPW4oKCk9PntOeD1bWyJwYXRoIix7ZDoibTYgOCAxLjc1IDEyLjI4YTIgMiAwIDAgMCAyIDEuNzJoNC41NGEyIDIgMCAwIDAgMi0xLjcyTDE4IDgifV0sWyJwYXRoIix7ZDoiTTUgOGgxNCJ9XSxbInBhdGgiLHtkOiJNNyAxNWE2LjQ3IDYuNDcgMCAwIDEgNSAwIDYuNDcgNi40NyAwIDAgMCA1IDAifV0sWyJwYXRoIix7ZDoibTEyIDggMS02aDIifV1dfSk7dmFyIFB4LGR1ZT1uKCgpPT57UHg9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjgifV0sWyJsaW5lIix7eDE6IjMiLHgyOiI2Iix5MToiMyIseTI6IjYifV0sWyJsaW5lIix7eDE6IjIxIix4MjoiMTgiLHkxOiIzIix5MjoiNiJ9XSxbImxpbmUiLHt4MToiMyIseDI6IjYiLHkxOiIyMSIseTI6IjE4In1dLFsibGluZSIse3gxOiIyMSIseDI6IjE4Iix5MToiMjEiLHkyOiIxOCJ9XV19KTt2YXIgSXgsZnVlPW4oKCk9PntJeD1bWyJlbGxpcHNlIix7Y3g6IjEyIixjeToiNSIscng6IjkiLHJ5OiIzIn1dLFsicGF0aCIse2Q6Ik0zIDV2MTRhOSAzIDAgMCAwIDE4IDBWNSJ9XV19KTt2YXIgRngsdXVlPW4oKCk9PntGeD1bWyJwYXRoIix7ZDoiTTExIDExLjMxYzEuMTcuNTYgMS41NCAxLjY5IDMuNSAxLjY5IDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSJ9XSxbInBhdGgiLHtkOiJNMTEuNzUgMThjLjM1LjUgMS40NSAxIDIuNzUgMSAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEifV0sWyJwYXRoIix7ZDoiTTIgMTBoNCJ9XSxbInBhdGgiLHtkOiJNMiAxNGg0In1dLFsicGF0aCIse2Q6Ik0yIDE4aDQifV0sWyJwYXRoIix7ZDoiTTIgNmg0In1dLFsicGF0aCIse2Q6Ik03IDNhMSAxIDAgMCAwLTEgMXYxNmExIDEgMCAwIDAgMSAxaDRhMSAxIDAgMCAwIDEtMUwxMCA0YTEgMSAwIDAgMC0xLTF6In1dXX0pO3ZhciBPeCxwdWU9bigoKT0+e094PVtbImVsbGlwc2UiLHtjeDoiMTIiLGN5OiI1IixyeDoiOSIscnk6IjMifV0sWyJwYXRoIix7ZDoiTTMgMTJhOSAzIDAgMCAwIDUgMi42OSJ9XSxbInBhdGgiLHtkOiJNMjEgOS4zVjUifV0sWyJwYXRoIix7ZDoiTTMgNXYxNGE5IDMgMCAwIDAgNi40NyAyLjg4In1dLFsicGF0aCIse2Q6Ik0xMiAxMnY0aDQifV0sWyJwYXRoIix7ZDoiTTEzIDIwYTUgNSAwIDAgMCA5LTMgNC41IDQuNSAwIDAgMC00LjUtNC41Yy0xLjMzIDAtMi41NC41NC0zLjQxIDEuNDFMMTIgMTYifV1dfSk7dmFyIEJ4LGh1ZT1uKCgpPT57Qng9W1siZWxsaXBzZSIse2N4OiIxMiIsY3k6IjUiLHJ4OiI5IixyeToiMyJ9XSxbInBhdGgiLHtkOiJNMyA1VjE5QTkgMyAwIDAgMCAxNSAyMS44NCJ9XSxbInBhdGgiLHtkOiJNMjEgNVY4In1dLFsicGF0aCIse2Q6Ik0yMSAxMkwxOCAxN0gyMkwxOSAyMiJ9XSxbInBhdGgiLHtkOiJNMyAxMkE5IDMgMCAwIDAgMTQuNTkgMTQuODcifV1dfSk7dmFyIFJ4LG11ZT1uKCgpPT57Ung9W1siZWxsaXBzZSIse2N4OiIxMiIsY3k6IjUiLHJ4OiI5IixyeToiMyJ9XSxbInBhdGgiLHtkOiJNMyA1VjE5QTkgMyAwIDAgMCAyMSAxOVY1In1dLFsicGF0aCIse2Q6Ik0zIDEyQTkgMyAwIDAgMCAyMSAxMiJ9XV19KTt2YXIgSHgsZ3VlPW4oKCk9PntIeD1bWyJwYXRoIix7ZDoibTEzIDIxLTMtMyAzLTMifV0sWyJwYXRoIix7ZDoiTTIwIDE4SDEwIn1dLFsicGF0aCIse2Q6Ik0zIDExaC4wMSJ9XSxbInJlY3QiLHt4OiI2Iix5OiIzIix3aWR0aDoiNSIsaGVpZ2h0OiI4IixyeDoiMi41In1dXX0pO3ZhciBxeCx4dWU9bigoKT0+e3F4PVtbInBhdGgiLHtkOiJNMTAgMThoMTAifV0sWyJwYXRoIix7ZDoibTE3IDIxIDMtMy0zLTMifV0sWyJwYXRoIix7ZDoiTTMgMTFoLjAxIn1dLFsicmVjdCIse3g6IjE1Iix5OiIzIix3aWR0aDoiNSIsaGVpZ2h0OiI4IixyeDoiMi41In1dLFsicmVjdCIse3g6IjYiLHk6IjMiLHdpZHRoOiI1IixoZWlnaHQ6IjgiLHJ4OiIyLjUifV1dfSk7dmFyIFZ4LGJ1ZT1uKCgpPT57Vng9W1sicGF0aCIse2Q6Ik0xMCA1YTIgMiAwIDAgMC0xLjM0NC41MTlsLTYuMzI4IDUuNzRhMSAxIDAgMCAwIDAgMS40ODFsNi4zMjggNS43NDFBMiAyIDAgMCAwIDEwIDE5aDEwYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yeiJ9XSxbInBhdGgiLHtkOiJtMTIgOSA2IDYifV0sWyJwYXRoIix7ZDoibTE4IDktNiA2In1dXX0pO3ZhciBVeCx2dWU9bigoKT0+e1V4PVtbInBhdGgiLHtkOiJNMTAuMTYyIDMuMTY3QTEwIDEwIDAgMCAwIDIgMTNhMiAyIDAgMCAwIDQgMHYtMWEyIDIgMCAwIDEgNCAwdjRhMiAyIDAgMCAwIDQgMHYtNGEyIDIgMCAwIDEgNCAwdjFhMiAyIDAgMCAwIDQtLjAwNiAxMCAxMCAwIDAgMC04LjE2MS05LjgyNiJ9XSxbInBhdGgiLHtkOiJNMjAuODA0IDE0Ljg2OWE5IDkgMCAwIDEtMTcuNjA4IDAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI0IixyOiIyIn1dXX0pO3ZhciBqeCx5dWU9bigoKT0+e2p4PVtbImNpcmNsZSIse2N4OiIxOSIsY3k6IjE5IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiI1IixyOiIyIn1dLFsicGF0aCIse2Q6Ik02LjQ4IDMuNjZhMTAgMTAgMCAwIDEgMTMuODYgMTMuODYifV0sWyJwYXRoIix7ZDoibTYuNDEgNi40MSAxMS4xOCAxMS4xOCJ9XSxbInBhdGgiLHtkOiJNMy42NiA2LjQ4YTEwIDEwIDAgMCAwIDEzLjg2IDEzLjg2In1dXX0pO3ZhciBXeCx3dWU9bigoKT0+e1d4PVtbInBhdGgiLHtkOiJNMi43IDEwLjNhMi40MSAyLjQxIDAgMCAwIDAgMy40MWw3LjU5IDcuNTlhMi40MSAyLjQxIDAgMCAwIDMuNDEgMGw3LjU5LTcuNTlhMi40MSAyLjQxIDAgMCAwIDAtMy40MUwxMy43IDIuNzFhMi40MSAyLjQxIDAgMCAwLTMuNDEgMHoifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XV19KTt2YXIgWjAsTXVlPW4oKCk9PntaMD1bWyJwYXRoIix7ZDoiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFMMTMuNyAyLjcxYTIuNDEgMi40MSAwIDAgMC0zLjQxIDBaIn1dLFsicGF0aCIse2Q6Ik05LjIgOS4yaC4wMSJ9XSxbInBhdGgiLHtkOiJtMTQuNSA5LjUtNSA1In1dLFsicGF0aCIse2Q6Ik0xNC43IDE0LjhoLjAxIn1dXX0pO3ZhciBHeCx6dWU9bigoKT0+e0d4PVtbInBhdGgiLHtkOiJNMTIgOHY4In1dLFsicGF0aCIse2Q6Ik0yLjcgMTAuM2EyLjQxIDIuNDEgMCAwIDAgMCAzLjQxbDcuNTkgNy41OWEyLjQxIDIuNDEgMCAwIDAgMy40MSAwbDcuNTktNy41OWEyLjQxIDIuNDEgMCAwIDAgMC0zLjQxTDEzLjcgMi43MWEyLjQxIDIuNDEgMCAwIDAtMy40MSAweiJ9XSxbInBhdGgiLHtkOiJNOCAxMmg4In1dXX0pO3ZhciBZeCxrdWU9bigoKT0+e1l4PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTJoLjAxIn1dXX0pO3ZhciBaeCxTdWU9bigoKT0+e1p4PVtbInBhdGgiLHtkOiJNMi43IDEwLjNhMi40MSAyLjQxIDAgMCAwIDAgMy40MWw3LjU5IDcuNTlhMi40MSAyLjQxIDAgMCAwIDMuNDEgMGw3LjU5LTcuNTlhMi40MSAyLjQxIDAgMCAwIDAtMy40MWwtNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMC0zLjQxIDBaIn1dXX0pO3ZhciBYeCxDdWU9bigoKT0+e1h4PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNMTUgOWguMDEifV0sWyJwYXRoIix7ZDoiTTkgMTVoLjAxIn1dXX0pO3ZhciBReCxMdWU9bigoKT0+e1F4PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNMTYgOGguMDEifV0sWyJwYXRoIix7ZDoiTTEyIDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxNmguMDEifV1dfSk7dmFyIEt4LFR1ZT1uKCgpPT57S3g9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Ik0xNiA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNOCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxNmguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDE2aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTJoLjAxIn1dXX0pO3ZhciBKeCxfdWU9bigoKT0+e0p4PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNMTYgOGguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTZoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDhoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxNmguMDEifV1dfSk7dmFyIGViLEF1ZT1uKCgpPT57ZWI9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Ik0xNiA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNOCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxNmguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDE2aC4wMSJ9XV19KTt2YXIgdGIsJHVlPW4oKCk9Pnt0Yj1bWyJyZWN0Iix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix4OiIyIix5OiIxMCIscng6IjIiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Im0xNy45MiAxNCAzLjUtMy41YTIuMjQgMi4yNCAwIDAgMCAwLTNsLTUtNC45MmEyLjI0IDIuMjQgMCAwIDAtMyAwTDEwIDYifV0sWyJwYXRoIix7ZDoiTTYgMThoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMCAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTE1IDZoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOCA5aC4wMSJ9XV19KTt2YXIgYWIsRHVlPW4oKCk9PnthYj1bWyJwYXRoIix7ZDoiTTEyIDN2MTQifV0sWyJwYXRoIix7ZDoiTTUgMTBoMTQifV0sWyJwYXRoIix7ZDoiTTUgMjFoMTQifV1dfSk7dmFyIHJiLEV1ZT1uKCgpPT57cmI9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjQifV0sWyJwYXRoIix7ZDoiTTEyIDEyaC4wMSJ9XV19KTt2YXIgaWIsTnVlPW4oKCk9PntpYj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTYgMTJjMC0xLjcuNy0zLjIgMS44LTQuMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIyIn1dLFsicGF0aCIse2Q6Ik0xOCAxMmMwIDEuNy0uNyAzLjItMS44IDQuMiJ9XV19KTt2YXIgb2IsUHVlPW4oKCk9PntvYj1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI1In1dLFsicGF0aCIse2Q6Ik0xMiAxMmguMDEifV1dfSk7dmFyIHNiLEl1ZT1uKCgpPT57c2I9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV1dfSk7dmFyIG5iLEZ1ZT1uKCgpPT57bmI9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiNiIscjoiMSJ9XSxbImxpbmUiLHt4MToiNSIseDI6IjE5Iix5MToiMTIiLHkyOiIxMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE4IixyOiIxIn1dXX0pO3ZhciBsYixPdWU9bigoKT0+e2xiPVtbInBhdGgiLHtkOiJNMTUgMmMtMS4zNSAxLjUtMi4wOTIgMy0yLjUgNC41TDE0IDgifV0sWyJwYXRoIix7ZDoibTE3IDYtMi44OTEtMi44OTEifV0sWyJwYXRoIix7ZDoiTTIgMTVjMy4zMzMtMyA2LjY2Ny0zIDEwLTMifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJtMjAgOSAuODkxLjg5MSJ9XSxbInBhdGgiLHtkOiJNMjIgOWMtMS41IDEuMzUtMyAyLjA5Mi00LjUgMi41bC0xLTEifV0sWyJwYXRoIix7ZDoiTTMuMTA5IDE0LjEwOSA0IDE1In1dLFsicGF0aCIse2Q6Im02LjUgMTIuNSAxIDEifV0sWyJwYXRoIix7ZDoibTcgMTggMi44OTEgMi44OTEifV0sWyJwYXRoIix7ZDoiTTkgMjJjMS4zNS0xLjUgMi4wOTItMyAyLjUtNC41TDEwIDE2In1dXX0pO3ZhciBjYixCdWU9bigoKT0+e2NiPVtbInBhdGgiLHtkOiJNMiA4aDIwIn1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNiIseDoiMiIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTYgMTZoMTIifV1dfSk7dmFyIGRiLFJ1ZT1uKCgpPT57ZGI9W1sicGF0aCIse2Q6Im0xMCAxNiAxLjUgMS41In1dLFsicGF0aCIse2Q6Im0xNCA4LTEuNS0xLjUifV0sWyJwYXRoIix7ZDoiTTE1IDJjLTEuNzk4IDEuOTk4LTIuNTE4IDMuOTk1LTIuODA3IDUuOTkzIn1dLFsicGF0aCIse2Q6Im0xNi41IDEwLjUgMSAxIn1dLFsicGF0aCIse2Q6Im0xNyA2LTIuODkxLTIuODkxIn1dLFsicGF0aCIse2Q6Ik0yIDE1YzYuNjY3LTYgMTMuMzMzIDAgMjAtNiJ9XSxbInBhdGgiLHtkOiJtMjAgOSAuODkxLjg5MSJ9XSxbInBhdGgiLHtkOiJNMy4xMDkgMTQuMTA5IDQgMTUifV0sWyJwYXRoIix7ZDoibTYuNSAxMi41IDEgMSJ9XSxbInBhdGgiLHtkOiJtNyAxOCAyLjg5MSAyLjg5MSJ9XSxbInBhdGgiLHtkOiJNOSAyMmMxLjc5OC0xLjk5OCAyLjUxOC0zLjk5NSAyLjgwNy01Ljk5MyJ9XV19KTt2YXIgZmIsSHVlPW4oKCk9PntmYj1bWyJwYXRoIix7ZDoiTTExLjI1IDE2LjI1aDEuNUwxMiAxN3oifV0sWyJwYXRoIix7ZDoiTTE2IDE0di41In1dLFsicGF0aCIse2Q6Ik00LjQyIDExLjI0N0ExMy4xNTIgMTMuMTUyIDAgMCAwIDQgMTQuNTU2QzQgMTguNzI4IDcuNTgyIDIxIDEyIDIxczgtMi4yNzIgOC02LjQ0NGExMS43MDIgMTEuNzAyIDAgMCAwLS40OTMtMy4zMDkifV0sWyJwYXRoIix7ZDoiTTggMTR2LjUifV0sWyJwYXRoIix7ZDoiTTguNSA4LjVjLS4zODQgMS4wNS0xLjA4MyAyLjAyOC0yLjM0NCAyLjUtMS45MzEuNzIyLTMuNTc2LS4yOTctMy42NTYtMS0uMTEzLS45OTQgMS4xNzctNi41MyA0LTcgMS45MjMtLjMyMSAzLjY1MS44NDUgMy42NTEgMi4yMzVBNy40OTcgNy40OTcgMCAwIDEgMTQgNS4yNzdjMC0xLjM5IDEuODQ0LTIuNTk4IDMuNzY3LTIuMjc3IDIuODIzLjQ3IDQuMTEzIDYuMDA2IDQgNy0uMDguNzAzLTEuNzI1IDEuNzIyLTMuNjU2IDEtMS4yNjEtLjQ3Mi0xLjg1NS0xLjQ1LTIuMjM5LTIuNSJ9XV19KTt2YXIgdWIscXVlPW4oKCk9Pnt1Yj1bWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIyIix5MjoiMjIifV0sWyJwYXRoIix7ZDoiTTE3IDVIOS41YTMuNSAzLjUgMCAwIDAgMCA3aDVhMy41IDMuNSAwIDAgMSAwIDdINiJ9XV19KTt2YXIgcGIsVnVlPW4oKCk9PntwYj1bWyJwYXRoIix7ZDoiTTIwLjUgMTBhMi41IDIuNSAwIDAgMS0yLjQtM0gxOGEyLjk1IDIuOTUgMCAwIDEtMi42LTQuNCAxMCAxMCAwIDEgMCA2LjMgNy4xYy0uMy4yLS44LjMtMS4yLjMifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMyJ9XV19KTt2YXIgaGIsVXVlPW4oKCk9PntoYj1bWyJwYXRoIix7ZDoiTTEwIDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTggOVY2YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE0In1dLFsicGF0aCIse2Q6Ik0yIDIwaDgifV0sWyJwYXRoIix7ZDoiTTIwIDE3di0yYTIgMiAwIDEgMC00IDB2MiJ9XSxbInJlY3QiLHt4OiIxNCIseToiMTciLHdpZHRoOiI4IixoZWlnaHQ6IjUiLHJ4OiIxIn1dXX0pO3ZhciBtYixqdWU9bigoKT0+e21iPVtbInBhdGgiLHtkOiJNMTAgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOCAyMFY2YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE0In1dLFsicGF0aCIse2Q6Ik0yIDIwaDIwIn1dXX0pO3ZhciBnYixXdWU9bigoKT0+e2diPVtbImNpcmNsZSIse2N4OiIxMi4xIixjeToiMTIuMSIscjoiMSJ9XV19KTt2YXIgeGIsR3VlPW4oKCk9Pnt4Yj1bWyJwYXRoIix7ZDoiTTExIDIwSDIifV0sWyJwYXRoIix7ZDoiTTExIDQuNTYydjE2LjE1N2ExIDEgMCAwIDAgMS4yNDIuOTdMMTkgMjBWNS41NjJhMiAyIDAgMCAwLTEuNTE1LTEuOTRsLTQtMUEyIDIgMCAwIDAgMTEgNC41NjF6In1dLFsicGF0aCIse2Q6Ik0xMSA0SDhhMiAyIDAgMCAwLTIgMnYxNCJ9XSxbInBhdGgiLHtkOiJNMTQgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0yMiAyMGgtMyJ9XV19KTt2YXIgYmIsWXVlPW4oKCk9PntiYj1bWyJwYXRoIix7ZDoiTTEyIDE1VjMifV0sWyJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQifV0sWyJwYXRoIix7ZDoibTcgMTAgNSA1IDUtNSJ9XV19KTt2YXIgdmIsWnVlPW4oKCk9Pnt2Yj1bWyJwYXRoIix7ZDoibTEyLjk5IDYuNzQgMS45MyAzLjQ0In1dLFsicGF0aCIse2Q6Ik0xOS4xMzYgMTJhMTAgMTAgMCAwIDEtMTQuMjcxIDAifV0sWyJwYXRoIix7ZDoibTIxIDIxLTIuMTYtMy44NCJ9XSxbInBhdGgiLHtkOiJtMyAyMSA4LjAyLTE0LjI2In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiNSIscjoiMiJ9XV19KTt2YXIgeWIsWHVlPW4oKCk9Pnt5Yj1bWyJwYXRoIix7ZDoiTTEwIDExaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTQgNmguMDEifV0sWyJwYXRoIix7ZDoiTTE4IDZoLjAxIn1dLFsicGF0aCIse2Q6Ik02LjUgMTMuMWguMDEifV0sWyJwYXRoIix7ZDoiTTIyIDVjMCA5LTQgMTItNiAxMnMtNi0zLTYtMTJjMC0yIDItMyA2LTNzNiAxIDYgMyJ9XSxbInBhdGgiLHtkOiJNMTcuNCA5LjljLS44LjgtMiAuOC0yLjggMCJ9XSxbInBhdGgiLHtkOiJNMTAuMSA3LjFDOSA3LjIgNy43IDcuNyA2IDguNmMtMy41IDItNC43IDMuOS0zLjcgNS42IDQuNSA3LjggOS41IDguNCAxMS4yIDcuNC45LS41IDEuOS0yLjEgMS45LTQuNyJ9XSxbInBhdGgiLHtkOiJNOS4xIDE2LjVjLjMtMS4xIDEuNC0xLjcgMi40LTEuNCJ9XV19KTt2YXIgd2IsUXVlPW4oKCk9Pnt3Yj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTE5LjEzIDUuMDlDMTUuMjIgOS4xNCAxMCAxMC40NCAyLjI1IDEwLjk0In1dLFsicGF0aCIse2Q6Ik0yMS43NSAxMi44NGMtNi42Mi0xLjQxLTEyLjE0IDEtMTYuMzggNi4zMiJ9XSxbInBhdGgiLHtkOiJNOC41NiAyLjc1YzQuMzcgNiA2IDkuNDIgOCAxNy43MiJ9XV19KTt2YXIgTWIsS3VlPW4oKCk9PntNYj1bWyJwYXRoIix7ZDoiTTEwIDE4YTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDVhMyAzIDAgMCAxLTMtMyAxIDEgMCAwIDEgMS0xeiJ9XSxbInBhdGgiLHtkOiJNMTMgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg5YTEgMSAwIDAgMSAxIDF2NmExIDEgMCAwIDEtMSAxbC0uODEgMy4yNDJhMSAxIDAgMCAxLS45Ny43NThIOCJ9XSxbInBhdGgiLHtkOiJNMTQgNGgzYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0zIn1dLFsicGF0aCIse2Q6Ik0xOCA2aDQifV0sWyJwYXRoIix7ZDoibTUgMTAtMiA4In1dLFsicGF0aCIse2Q6Im03IDE4IDItOCJ9XV19KTt2YXIgemIsSnVlPW4oKCk9Pnt6Yj1bWyJwYXRoIix7ZDoiTTEwIDEwIDcgNyJ9XSxbInBhdGgiLHtkOiJtMTAgMTQtMyAzIn1dLFsicGF0aCIse2Q6Im0xNCAxMCAzLTMifV0sWyJwYXRoIix7ZDoibTE0IDE0IDMgMyJ9XSxbInBhdGgiLHtkOiJNMTQuMjA1IDQuMTM5YTQgNCAwIDEgMSA1LjQzOSA1Ljg2MyJ9XSxbInBhdGgiLHtkOiJNMTkuNjM3IDE0YTQgNCAwIDEgMS01LjQzMiA1Ljg2OCJ9XSxbInBhdGgiLHtkOiJNNC4zNjcgMTBhNCA0IDAgMSAxIDUuNDM4LTUuODYyIn1dLFsicGF0aCIse2Q6Ik05Ljc5NSAxOS44NjJhNCA0IDAgMSAxLTUuNDI5LTUuODczIn1dLFsicmVjdCIse3g6IjEwIix5OiI4Iix3aWR0aDoiNCIsaGVpZ2h0OiI4IixyeDoiMSJ9XV19KTt2YXIga2IsZXBlPW4oKCk9PntrYj1bWyJwYXRoIix7ZDoiTTE4LjcxNSAxMy4xODZDMTguMjkgMTEuODU4IDE3LjM4NCAxMC42MDcgMTYgOS41Yy0yLTEuNi0zLjUtNC00LTYuNWExMC43IDEwLjcgMCAwIDEtLjg4NCAyLjU4NiJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik04Ljc5NSA4Ljc5N0ExMSAxMSAwIDAgMSA4IDkuNUM2IDExLjEgNSAxMyA1IDE1YTcgNyAwIDAgMCAxMy4yMjIgMy4yMDgifV1dfSk7dmFyIFNiLHRwZT1uKCgpPT57U2I9W1sicGF0aCIse2Q6Ik0xMiAyMmE3IDcgMCAwIDAgNy03YzAtMi0xLTMuOS0zLTUuNXMtMy41LTQtNC02LjVjLS41IDIuNS0yIDQuOS00IDYuNUM2IDExLjEgNSAxMyA1IDE1YTcgNyAwIDAgMCA3IDd6In1dXX0pO3ZhciBDYixhcGU9bigoKT0+e0NiPVtbInBhdGgiLHtkOiJNNyAxNi4zYzIuMiAwIDQtMS44MyA0LTQuMDUgMC0xLjE2LS41Ny0yLjI2LTEuNzEtMy4xOVM3LjI5IDYuNzUgNyA1LjNjLS4yOSAxLjQ1LTEuMTQgMi44NC0yLjI5IDMuNzZTMyAxMS4xIDMgMTIuMjVjMCAyLjIyIDEuOCA0LjA1IDQgNC4wNXoifV0sWyJwYXRoIix7ZDoiTTEyLjU2IDYuNkExMC45NyAxMC45NyAwIDAgMCAxNCAzLjAyYy41IDIuNSAyIDQuOSA0IDYuNXMzIDMuNSAzIDUuNWE2Ljk4IDYuOTggMCAwIDEtMTEuOTEgNC45NyJ9XV19KTt2YXIgTGIscnBlPW4oKCk9PntMYj1bWyJwYXRoIix7ZDoibTIgMiA4IDgifV0sWyJwYXRoIix7ZDoibTIyIDItOCA4In1dLFsiZWxsaXBzZSIse2N4OiIxMiIsY3k6IjkiLHJ4OiIxMCIscnk6IjUifV0sWyJwYXRoIix7ZDoiTTcgMTMuNHY3LjkifV0sWyJwYXRoIix7ZDoiTTEyIDE0djgifV0sWyJwYXRoIix7ZDoiTTE3IDEzLjR2Ny45In1dLFsicGF0aCIse2Q6Ik0yIDl2OGExMCA1IDAgMCAwIDIwIDBWOSJ9XV19KTt2YXIgVGIsaXBlPW4oKCk9PntUYj1bWyJwYXRoIix7ZDoiTTE1LjQgMTUuNjNhNy44NzUgNiAxMzUgMSAxIDYuMjMtNi4yMyA0LjUgMy40MyAxMzUgMCAwLTYuMjMgNi4yMyJ9XSxbInBhdGgiLHtkOiJtOC4yOSAxMi43MS0yLjYgMi42YTIuNSAyLjUgMCAxIDAtMS42NSA0LjY1QTIuNSAyLjUgMCAxIDAgOC43IDE4LjNsMi41OS0yLjU5In1dXX0pO3ZhciBfYixvcGU9bigoKT0+e19iPVtbInBhdGgiLHtkOiJNMTcuNTk2IDEyLjc2OGEyIDIgMCAxIDAgMi44MjktMi44MjlsLTEuNzY4LTEuNzY3YTIgMiAwIDAgMCAyLjgyOC0yLjgyOWwtMi44MjgtMi44MjhhMiAyIDAgMCAwLTIuODI5IDIuODI4bC0xLjc2Ny0xLjc2OGEyIDIgMCAxIDAtMi44MjkgMi44Mjl6In1dLFsicGF0aCIse2Q6Im0yLjUgMjEuNSAxLjQtMS40In1dLFsicGF0aCIse2Q6Im0yMC4xIDMuOSAxLjQtMS40In1dLFsicGF0aCIse2Q6Ik01LjM0MyAyMS40ODVhMiAyIDAgMSAwIDIuODI5LTIuODI4bDEuNzY3IDEuNzY4YTIgMiAwIDEgMCAyLjgyOS0yLjgyOWwtNi4zNjQtNi4zNjRhMiAyIDAgMSAwLTIuODI5IDIuODI5bDEuNzY4IDEuNzY3YTIgMiAwIDAgMC0yLjgyOCAyLjgyOXoifV0sWyJwYXRoIix7ZDoibTkuNiAxNC40IDQuOC00LjgifV1dfSk7dmFyIEFiLHNwZT1uKCgpPT57QWI9W1sicGF0aCIse2Q6Ik02IDE4LjVhMy41IDMuNSAwIDEgMCA3IDBjMC0xLjU3LjkyLTIuNTIgMi4wNC0zLjQ2In1dLFsicGF0aCIse2Q6Ik02IDguNWMwLS43NS4xMy0xLjQ3LjM2LTIuMTQifV0sWyJwYXRoIix7ZDoiTTguOCAzLjE1QTYuNSA2LjUgMCAwIDEgMTkgOC41YzAgMS42My0uNDQgMi44MS0xLjA5IDMuNzYifV0sWyJwYXRoIix7ZDoiTTEyLjUgNkEyLjUgMi41IDAgMCAxIDE1IDguNU0xMCAxM2EyIDIgMCAwIDAgMS44Mi0xLjE4In1dLFsibGluZSIse3gxOiIyIix4MjoiMjIiLHkxOiIyIix5MjoiMjIifV1dfSk7dmFyICRiLG5wZT1uKCgpPT57JGI9W1sicGF0aCIse2Q6Ik02IDguNWE2LjUgNi41IDAgMSAxIDEzIDBjMCA2LTYgNi02IDEwYTMuNSAzLjUgMCAxIDEtNyAwIn1dLFsicGF0aCIse2Q6Ik0xNSA4LjVhMi41IDIuNSAwIDAgMC01IDB2MWEyIDIgMCAxIDEgMCA0In1dXX0pO3ZhciBEYixscGU9bigoKT0+e0RiPVtbInBhdGgiLHtkOiJNNyAzLjM0VjVhMyAzIDAgMCAwIDMgMyJ9XSxbInBhdGgiLHtkOiJNMTEgMjEuOTVWMThhMiAyIDAgMCAwLTItMiAyIDIgMCAwIDEtMi0ydi0xYTIgMiAwIDAgMC0yLTJIMi4wNSJ9XSxbInBhdGgiLHtkOiJNMjEuNTQgMTVIMTdhMiAyIDAgMCAwLTIgMnY0LjU0In1dLFsicGF0aCIse2Q6Ik0xMiAyYTEwIDEwIDAgMSAwIDkuNTQgMTMifV0sWyJwYXRoIix7ZDoiTTIwIDZWNGEyIDIgMCAxIDAtNCAwdjIifV0sWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNSIseDoiMTQiLHk6IjYiLHJ4OiIxIn1dXX0pO3ZhciBYMCxjcGU9bigoKT0+e1gwPVtbInBhdGgiLHtkOiJNMjEuNTQgMTVIMTdhMiAyIDAgMCAwLTIgMnY0LjU0In1dLFsicGF0aCIse2Q6Ik03IDMuMzRWNWEzIDMgMCAwIDAgMyAzYTIgMiAwIDAgMSAyIDJjMCAxLjEuOSAyIDIgMmEyIDIgMCAwIDAgMi0yYzAtMS4xLjktMiAyLTJoMy4xNyJ9XSxbInBhdGgiLHtkOiJNMTEgMjEuOTVWMThhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDEtMi0ydi0xYTIgMiAwIDAgMC0yLTJIMi4wNSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgRWIsZHBlPW4oKCk9PntFYj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTEyIDJhNyA3IDAgMSAwIDEwIDEwIn1dXX0pO3ZhciBOYixmcGU9bigoKT0+e05iPVtbImNpcmNsZSIse2N4OiIxMS41IixjeToiMTIuNSIscjoiMy41In1dLFsicGF0aCIse2Q6Ik0zIDhjMC0zLjUgMi41LTYgNi41LTYgNSAwIDQuODMgMyA3LjUgNXM1IDIgNSA2YzAgNC41LTIuNSA2LjUtNyA2LjUtMi41IDAtMi41IDIuNS02IDIuNXMtNy0yLTctNS41YzAtMyAxLjUtMyAxLjUtNUMzLjUgMTAgMyA5IDMgOFoifV1dfSk7dmFyIFBiLHVwZT1uKCgpPT57UGI9W1sicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTIwIDE0LjM0N1YxNGMwLTYtNC0xMi04LTEyLTEuMDc4IDAtMi4xNTcuNDM2LTMuMTU3IDEuMTkifV0sWyJwYXRoIix7ZDoiTTYuMjA2IDYuMjFDNC44NzEgOC40IDQgMTEuMiA0IDE0YTggOCAwIDAgMCAxNC41NjggNC41NjgifV1dfSk7dmFyIEliLHBwZT1uKCgpPT57SWI9W1sicGF0aCIse2Q6Ik0xMiAyQzggMiA0IDggNCAxNGE4IDggMCAwIDAgMTYgMGMwLTYtNC0xMi04LTEyIn1dXX0pO3ZhciBRMCxocGU9bigoKT0+e1EwPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiNSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE5IixyOiIxIn1dXX0pO3ZhciBLMCxtcGU9bigoKT0+e0swPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjE5IixjeToiMTIiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjEyIixyOiIxIn1dXX0pO3ZhciBGYixncGU9bigoKT0+e0ZiPVtbInBhdGgiLHtkOiJNNSAxNWE2LjUgNi41IDAgMCAxIDcgMCA2LjUgNi41IDAgMCAwIDcgMCJ9XSxbInBhdGgiLHtkOiJNNSA5YTYuNSA2LjUgMCAwIDEgNyAwIDYuNSA2LjUgMCAwIDAgNyAwIn1dXX0pO3ZhciBPYix4cGU9bigoKT0+e09iPVtbImxpbmUiLHt4MToiNSIseDI6IjE5Iix5MToiOSIseTI6IjkifV0sWyJsaW5lIix7eDE6IjUiLHgyOiIxOSIseTE6IjE1Iix5MjoiMTUifV0sWyJsaW5lIix7eDE6IjE5Iix4MjoiNSIseTE6IjUiLHkyOiIxOSJ9XV19KTt2YXIgQmIsYnBlPW4oKCk9PntCYj1bWyJwYXRoIix7ZDoiTTIxIDIxSDhhMiAyIDAgMCAxLTEuNDItLjU4N2wtMy45OTQtMy45OTlhMiAyIDAgMCAxIDAtMi44MjhsMTAtMTBhMiAyIDAgMCAxIDIuODI5IDBsNS45OTkgNmEyIDIgMCAwIDEgMCAyLjgyOEwxMi44MzQgMjEifV0sWyJwYXRoIix7ZDoibTUuMDgyIDExLjA5IDguODI4IDguODI4In1dXX0pO3ZhciBSYix2cGU9bigoKT0+e1JiPVtbImxpbmUiLHt4MToiNSIseDI6IjE5Iix5MToiOSIseTI6IjkifV0sWyJsaW5lIix7eDE6IjUiLHgyOiIxOSIseTE6IjE1Iix5MjoiMTUifV1dfSk7dmFyIEhiLHlwZT1uKCgpPT57SGI9W1sicGF0aCIse2Q6Im0xNSAyMCAzLTNoMmEyIDIgMCAwIDAgMi0yVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2OWEyIDIgMCAwIDAgMiAyaDJsMyAzeiJ9XSxbInBhdGgiLHtkOiJNNiA4djEifV0sWyJwYXRoIix7ZDoiTTEwIDh2MSJ9XSxbInBhdGgiLHtkOiJNMTQgOHYxIn1dLFsicGF0aCIse2Q6Ik0xOCA4djEifV1dfSk7dmFyIHFiLHdwZT1uKCgpPT57cWI9W1sicGF0aCIse2Q6Ik00IDEwaDEyIn1dLFsicGF0aCIse2Q6Ik00IDE0aDkifV0sWyJwYXRoIix7ZDoiTTE5IDZhNy43IDcuNyAwIDAgMC01LjItMkE3LjkgNy45IDAgMCAwIDYgMTJjMCA0LjQgMy41IDggNy44IDggMiAwIDMuOC0uOCA1LjItMiJ9XV19KTt2YXIgVmIsTXBlPW4oKCk9PntWYj1bWyJwYXRoIix7ZDoiTTE0IDEzaDJhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMCA0IDB2LTYuOTk4YTIgMiAwIDAgMC0uNTktMS40MkwxOCA1In1dLFsicGF0aCIse2Q6Ik0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2In1dLFsicGF0aCIse2Q6Ik0yIDIxaDEzIn1dLFsicGF0aCIse2Q6Ik0zIDdoMTEifV0sWyJwYXRoIix7ZDoibTkgMTEtMiAzaDNsLTIgMyJ9XV19KTt2YXIgVWIsenBlPW4oKCk9PntVYj1bWyJwYXRoIix7ZDoiTTE1IDNoNnY2In1dLFsicGF0aCIse2Q6Ik0xMCAxNCAyMSAzIn1dLFsicGF0aCIse2Q6Ik0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2In1dXX0pO3ZhciBqYixrcGU9bigoKT0+e2piPVtbInBhdGgiLHtkOiJtMTUgMTUgNiA2In1dLFsicGF0aCIse2Q6Im0xNSA5IDYtNiJ9XSxbInBhdGgiLHtkOiJNMjEgMTZ2NWgtNSJ9XSxbInBhdGgiLHtkOiJNMjEgOFYzaC01In1dLFsicGF0aCIse2Q6Ik0zIDE2djVoNSJ9XSxbInBhdGgiLHtkOiJtMyAyMSA2LTYifV0sWyJwYXRoIix7ZDoiTTMgOFYzaDUifV0sWyJwYXRoIix7ZDoiTTkgOSAzIDMifV1dfSk7dmFyIFdiLFNwZT1uKCgpPT57V2I9W1sicGF0aCIse2Q6Im0xNSAxOC0uNzIyLTMuMjUifV0sWyJwYXRoIix7ZDoiTTIgOGExMC42NDUgMTAuNjQ1IDAgMCAwIDIwIDAifV0sWyJwYXRoIix7ZDoibTIwIDE1LTEuNzI2LTIuMDUifV0sWyJwYXRoIix7ZDoibTQgMTUgMS43MjYtMi4wNSJ9XSxbInBhdGgiLHtkOiJtOSAxOCAuNzIyLTMuMjUifV1dfSk7dmFyIEdiLENwZT1uKCgpPT57R2I9W1sicGF0aCIse2Q6Ik0xMC43MzMgNS4wNzZhMTAuNzQ0IDEwLjc0NCAwIDAgMSAxMS4yMDUgNi41NzUgMSAxIDAgMCAxIDAgLjY5NiAxMC43NDcgMTAuNzQ3IDAgMCAxLTEuNDQ0IDIuNDkifV0sWyJwYXRoIix7ZDoiTTE0LjA4NCAxNC4xNThhMyAzIDAgMCAxLTQuMjQyLTQuMjQyIn1dLFsicGF0aCIse2Q6Ik0xNy40NzkgMTcuNDk5YTEwLjc1IDEwLjc1IDAgMCAxLTE1LjQxNy01LjE1MSAxIDEgMCAwIDEgMC0uNjk2IDEwLjc1IDEwLjc1IDAgMCAxIDQuNDQ2LTUuMTQzIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV1dfSk7dmFyIFliLExwZT1uKCgpPT57WWI9W1sicGF0aCIse2Q6Ik0yLjA2MiAxMi4zNDhhMSAxIDAgMCAxIDAtLjY5NiAxMC43NSAxMC43NSAwIDAgMSAxOS44NzYgMCAxIDEgMCAwIDEgMCAuNjk2IDEwLjc1IDEwLjc1IDAgMCAxLTE5Ljg3NiAwIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjMifV1dfSk7dmFyIFpiLFRwZT1uKCgpPT57WmI9W1sicGF0aCIse2Q6Ik0xMiAxNmguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDE2aC4wMSJ9XSxbInBhdGgiLHtkOiJNMyAxOWEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJWOC41YS41LjUgMCAwIDAtLjc2OS0uNDIybC00LjQ2MiAyLjg0NEEuNS41IDAgMCAxIDE1IDEwLjV2LTJhLjUuNSAwIDAgMC0uNzY5LS40MjJMOS43NyAxMC45MjJBLjUuNSAwIDAgMSA5IDEwLjVWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnoifV0sWyJwYXRoIix7ZDoiTTggMTZoLjAxIn1dXX0pO3ZhciBYYixfcGU9bigoKT0+e1hiPVtbInBhdGgiLHtkOiJNMTggMmgtM2E1IDUgMCAwIDAtNSA1djNIN3Y0aDN2OGg0di04aDNsMS00aC00VjdhMSAxIDAgMCAxIDEtMWgzeiJ9XV19KTt2YXIgUWIsQXBlPW4oKCk9PntRYj1bWyJwYXRoIix7ZDoiTTEwLjgyNyAxNi4zNzlhNi4wODIgNi4wODIgMCAwIDEtOC42MTgtNy4wMDJsNS40MTIgMS40NWE2LjA4MiA2LjA4MiAwIDAgMSA3LjAwMi04LjYxOGwtMS40NSA1LjQxMmE2LjA4MiA2LjA4MiAwIDAgMSA4LjYxOCA3LjAwMmwtNS40MTItMS40NWE2LjA4MiA2LjA4MiAwIDAgMS03LjAwMiA4LjYxOGwxLjQ1LTUuNDEyWiJ9XSxbInBhdGgiLHtkOiJNMTIgMTJ2LjAxIn1dXX0pO3ZhciBLYiwkcGU9bigoKT0+e0tiPVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiJ9XSxbInBhdGgiLHtkOiJNMiA2YTIgMiAwIDAgMSAzLjQxNC0xLjQxNGw2IDZhMiAyIDAgMCAxIDAgMi44MjhsLTYgNkEyIDIgMCAwIDEgMiAxOHoifV1dfSk7dmFyIEpiLERwZT1uKCgpPT57SmI9W1sicGF0aCIse2Q6Ik0xMi42NyAxOWEyIDIgMCAwIDAgMS40MTYtLjU4OGw2LjE1NC02LjE3MmE2IDYgMCAwIDAtOC40OS04LjQ5TDUuNTg2IDkuOTE0QTIgMiAwIDAgMCA1IDExLjMyOFYxOGExIDEgMCAwIDAgMSAxeiJ9XSxbInBhdGgiLHtkOiJNMTYgOCAyIDIyIn1dLFsicGF0aCIse2Q6Ik0xNy41IDE1SDkifV1dfSk7dmFyIGV2LEVwZT1uKCgpPT57ZXY9W1sicGF0aCIse2Q6Ik00IDMgMiA1djE1YzAgLjYuNCAxIDEgMWgyYy42IDAgMS0uNCAxLTFWNVoifV0sWyJwYXRoIix7ZDoiTTYgOGg0In1dLFsicGF0aCIse2Q6Ik02IDE4aDQifV0sWyJwYXRoIix7ZDoibTEyIDMtMiAydjE1YzAgLjYuNCAxIDEgMWgyYy42IDAgMS0uNCAxLTFWNVoifV0sWyJwYXRoIix7ZDoiTTE0IDhoNCJ9XSxbInBhdGgiLHtkOiJNMTQgMThoNCJ9XSxbInBhdGgiLHtkOiJtMjAgMy0yIDJ2MTVjMCAuNi40IDEgMSAxaDJjLjYgMCAxLS40IDEtMVY1WiJ9XV19KTt2YXIgdHYsTnBlPW4oKCk9Pnt0dj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMnY0In1dLFsicGF0aCIse2Q6Im02LjggMTUtMy41IDIifV0sWyJwYXRoIix7ZDoibTIwLjcgNy0zLjUgMiJ9XSxbInBhdGgiLHtkOiJNNi44IDkgMy4zIDcifV0sWyJwYXRoIix7ZDoibTIwLjcgMTctMy41LTIifV0sWyJwYXRoIix7ZDoibTkgMjIgMy04IDMgOCJ9XSxbInBhdGgiLHtkOiJNOCAyMmg4In1dLFsicGF0aCIse2Q6Ik0xOCAxOC43YTkgOSAwIDEgMC0xMiAwIn1dXX0pO3ZhciBhdixQcGU9bigoKT0+e2F2PVtbInBhdGgiLHtkOiJNNSA1LjVBMy41IDMuNSAwIDAgMSA4LjUgMkgxMnY3SDguNUEzLjUgMy41IDAgMCAxIDUgNS41eiJ9XSxbInBhdGgiLHtkOiJNMTIgMmgzLjVhMy41IDMuNSAwIDEgMSAwIDdIMTJWMnoifV0sWyJwYXRoIix7ZDoiTTEyIDEyLjVhMy41IDMuNSAwIDEgMSA3IDAgMy41IDMuNSAwIDEgMS03IDB6In1dLFsicGF0aCIse2Q6Ik01IDE5LjVBMy41IDMuNSAwIDAgMSA4LjUgMTZIMTJ2My41YTMuNSAzLjUgMCAxIDEtNyAweiJ9XSxbInBhdGgiLHtkOiJNNSAxMi41QTMuNSAzLjUgMCAwIDEgOC41IDlIMTJ2N0g4LjVBMy41IDMuNSAwIDAgMSA1IDEyLjV6In1dXX0pO3ZhciBydixJcGU9bigoKT0+e3J2PVtbInBhdGgiLHtkOiJNMTMuNjU5IDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTEuNSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNOCAxMnYtMSJ9XSxbInBhdGgiLHtkOiJNOCAxOHYtMiJ9XSxbInBhdGgiLHtkOiJNOCA3VjYifV0sWyJjaXJjbGUiLHtjeDoiOCIsY3k6IjIwIixyOiIyIn1dXX0pO3ZhciBKMCxGcGU9bigoKT0+e0owPVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtOCAxOCA0LTQifV0sWyJwYXRoIix7ZDoiTTggMTB2OGg4In1dXX0pO3ZhciBlNCxPcGU9bigoKT0+e2U0PVtbInBhdGgiLHtkOiJNMTMgMjJoNWEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMyJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtNy42OSAxNi40NzkgMS4yOSA0Ljg4YS41LjUgMCAwIDEtLjY5OC41OTFsLTEuODQzLS44NDlhMSAxIDAgMCAwLS44NzkuMDAxbC0xLjg0Ni44NWEuNS41IDAgMCAxLS42OTItLjU5M2wxLjI5LTQuODgifV0sWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjE0IixyOiIzIn1dXX0pO3ZhciB0NCxCcGU9bigoKT0+e3Q0PVtbInBhdGgiLHtkOiJNMTQgMjJoNGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjYifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTUgMTRhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMS0xIDEgMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMCAxIDEifV0sWyJwYXRoIix7ZDoiTTkgMjJhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDEgMS0xIDEgMSAwIDAgMS0xLTF2LTJhMSAxIDAgMCAwLTEtMSJ9XV19KTt2YXIgaXYsUnBlPW4oKCk9Pntpdj1bWyJwYXRoIix7ZDoiTTE0LjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYzLjgifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTExLjcgMTQuMiA3IDE3bC00LjctMi44In1dLFsicGF0aCIse2Q6Ik0zIDEzLjFhMiAyIDAgMCAwLS45OTkgMS43NnYzLjI0YTIgMiAwIDAgMCAuOTY5IDEuNzhMNiAyMS43YTIgMiAwIDAgMCAyLjAzLjAxTDExIDE5LjlhMiAyIDAgMCAwIDEtMS43NlYxNC45YTIgMiAwIDAgMC0uOTctMS43OEw4IDExLjNhMiAyIDAgMCAwLTIuMDMtLjAxeiJ9XSxbInBhdGgiLHtkOiJNNyAxN3Y1In1dXX0pO3ZhciBhNCxIcGU9bigoKT0+e2E0PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTAgMTJhMSAxIDAgMCAwLTEgMXYxYTEgMSAwIDAgMS0xIDEgMSAxIDAgMCAxIDEgMXYxYTEgMSAwIDAgMCAxIDEifV0sWyJwYXRoIix7ZDoiTTE0IDE4YTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMSAxIDEgMCAwIDEtMS0xdi0xYTEgMSAwIDAgMC0xLTEifV1dfSk7dmFyIHI0LHFwZT1uKCgpPT57cjQ9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik04IDE4di0yIn1dLFsicGF0aCIse2Q6Ik0xMiAxOHYtNCJ9XSxbInBhdGgiLHtkOiJNMTYgMTh2LTYifV1dfSk7dmFyIGk0LFZwZT1uKCgpPT57aTQ9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik04IDE4di0xIn1dLFsicGF0aCIse2Q6Ik0xMiAxOHYtNiJ9XSxbInBhdGgiLHtkOiJNMTYgMTh2LTMifV1dfSk7dmFyIG80LFVwZT1uKCgpPT57bzQ9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Im0xNiAxMy0zLjUgMy41LTItMkw4IDE3In1dXX0pO3ZhciBzNCxqcGU9bigoKT0+e3M0PVtbInBhdGgiLHtkOiJNMTUuOTQxIDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDRsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2My41MTIifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTQuMDE3IDExLjUxMmE2IDYgMCAxIDAgOC40NjYgOC40NzUifV0sWyJwYXRoIix7ZDoiTTkgMTZhMSAxIDAgMCAxLTEtMXYtNGMwLS41NTIuNDUtMS4wMDguOTk1LS45MTdhNiA2IDAgMCAxIDQuOTIyIDQuOTIyYy4wOTEuNTQ0LS4zNjUuOTk1LS45MTcuOTk1eiJ9XV19KTt2YXIgbjQsV3BlPW4oKCk9PntuND1bWyJwYXRoIix7ZDoiTTEwLjUgMjJINmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHY2In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Im0xNCAyMCAyIDIgNC00In1dXX0pO3ZhciBvdixHcGU9bigoKT0+e292PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtOSAxNSAyIDIgNC00In1dXX0pO3ZhciBzdixZcGU9bigoKT0+e3N2PVtbInBhdGgiLHtkOiJNMTYgMjJoMmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjIuODUifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTggMTR2Mi4ybDEuNiAxIn1dLFsiY2lyY2xlIix7Y3g6IjgiLGN5OiIxNiIscjoiNiJ9XV19KTt2YXIgbDQsWnBlPW4oKCk9PntsND1bWyJwYXRoIix7ZDoiTTQgMTIuMTVWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJoLTMuMzUifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoibTUgMTYtMyAzIDMgMyJ9XSxbInBhdGgiLHtkOiJtOSAyMiAzLTMtMy0zIn1dXX0pO3ZhciBudixYcGU9bigoKT0+e252PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTAgMTIuNSA4IDE1bDIgMi41In1dLFsicGF0aCIse2Q6Im0xNCAxMi41IDIgMi41LTIgMi41In1dXX0pO3ZhciBjNCxRcGU9bigoKT0+e2M0PVtbInBhdGgiLHtkOiJNMTMuODUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0uNTg2LTEuNDE0bC00LTRBMiAyIDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjYuNiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtMy4zMDUgMTkuNTMuOTIzLS4zODIifV0sWyJwYXRoIix7ZDoibTQuMjI4IDE2Ljg1Mi0uOTI0LS4zODMifV0sWyJwYXRoIix7ZDoibTUuODUyIDE1LjIyOC0uMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTUuODUyIDIwLjc3Mi0uMzgzLjkyNCJ9XSxbInBhdGgiLHtkOiJtOC4xNDggMTUuMjI4LjM4My0uOTIzIn1dLFsicGF0aCIse2Q6Im04LjUzIDIxLjY5Ni0uMzgyLS45MjQifV0sWyJwYXRoIix7ZDoibTkuNzczIDE2Ljg1Mi45MjItLjM4MyJ9XSxbInBhdGgiLHtkOiJtOS43NzMgMTkuMTQ4LjkyMi4zODMifV0sWyJjaXJjbGUiLHtjeDoiNyIsY3k6IjE4IixyOiIzIn1dXX0pO3ZhciBsdixLcGU9bigoKT0+e2x2PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNOSAxMGg2In1dLFsicGF0aCIse2Q6Ik0xMiAxM1Y3In1dLFsicGF0aCIse2Q6Ik05IDE3aDYifV1dfSk7dmFyIGN2LEpwZT1uKCgpPT57Y3Y9W1sicGF0aCIse2Q6Ik00IDEyVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyIn1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0xMCAxNmgydjYifV0sWyJwYXRoIix7ZDoiTTEwIDIyaDQifV0sWyJyZWN0Iix7eDoiMiIseToiMTYiLHdpZHRoOiI0IixoZWlnaHQ6IjYiLHJ4OiIyIn1dXX0pO3ZhciBkdixlOWU9bigoKT0+e2R2PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTIgMTh2LTYifV0sWyJwYXRoIix7ZDoibTkgMTUgMyAzIDMtMyJ9XV19KTt2YXIgZDQsdDllPW4oKCk9PntkND1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTEyIDl2NCJ9XSxbInBhdGgiLHtkOiJNMTIgMTdoLjAxIn1dXX0pO3ZhciBJaSxhOWU9bigoKT0+e0lpPVtbInBhdGgiLHtkOiJNNCA2LjgzNVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtLjM0MyJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMiAxOWEyIDIgMCAwIDEgNCAwdjFhMiAyIDAgMCAxLTQgMHYtNGE2IDYgMCAwIDEgMTIgMHY0YTIgMiAwIDAgMS00IDB2LTFhMiAyIDAgMCAxIDQgMCJ9XV19KTt2YXIgZnYscjllPW4oKCk9Pntmdj1bWyJwYXRoIix7ZDoiTTEzIDIyaDVhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY3In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0zLjYyIDE4LjhBMi4yNSAyLjI1IDAgMSAxIDcgMTUuODM2YTIuMjUgMi4yNSAwIDEgMSAzLjM4IDIuOTY2bC0yLjYyNiAyLjg1NmExIDEgMCAwIDEtMS41MDcgMHoifV1dfSk7dmFyIHV2LGk5ZT1uKCgpPT57dXY9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiMTIiLHI6IjIifV0sWyJwYXRoIix7ZDoibTIwIDE3LTEuMjk2LTEuMjk2YTIuNDEgMi40MSAwIDAgMC0zLjQwOCAwTDkgMjIifV1dfSk7dmFyIHB2LG85ZT1uKCgpPT57cHY9W1sicGF0aCIse2Q6Ik00IDExVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtMSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMiAxNWgxMCJ9XSxbInBhdGgiLHtkOiJtOSAxOCAzLTMtMy0zIn1dXX0pO3ZhciBmNCxzOWU9bigoKT0+e2Y0PVtbInBhdGgiLHtkOiJNMTAuNjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxMC4xIn1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Im0xMCAxNSAxIDEifV0sWyJwYXRoIix7ZDoibTExIDE0LTQuNTg2IDQuNTg2In1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiIyMCIscjoiMiJ9XV19KTt2YXIgdTQsbjllPW4oKCk9Pnt1ND1bWyJwYXRoIix7ZDoiTTQgOS44VjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyaC0zIn1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik05IDE3di0yYTIgMiAwIDAgMC00IDB2MiJ9XSxbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI1Iix4OiIzIix5OiIxNyIscng6IjEifV1dfSk7dmFyIHA0LGw5ZT1uKCgpPT57cDQ9W1sicGF0aCIse2Q6Ik0yMCAxNFY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyIn1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0xNCAxOGg2In1dXX0pO3ZhciBodixjOWU9bigoKT0+e2h2PVtbInBhdGgiLHtkOiJNMTEuNjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxMC4zNSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNOCAyMHYtN2wzIDEuNDc0In1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiIyMCIscjoiMiJ9XV19KTt2YXIgbXYsZDllPW4oKCk9Pnttdj1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTkgMTVoNiJ9XV19KTt2YXIgZ3YsZjllPW4oKCk9Pntndj1bWyJwYXRoIix7ZDoiTTQuMjI2IDIwLjkyNUEyIDIgMCAwIDAgNiAyMmgxMmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMTI3In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Im01IDExLTMgMyJ9XSxbInBhdGgiLHtkOiJtNSAxNy0zLTNoMTAifV1dfSk7dmFyIGg0LHU5ZT1uKCgpPT57aDQ9W1sicGF0aCIse2Q6Im0xOC4yMjYgNS4yMjYtMi41Mi0yLjUyQTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi0uMzUxIn1dLFsicGF0aCIse2Q6Ik0yMS4zNzggMTIuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoifV0sWyJwYXRoIix7ZDoiTTggMThoMSJ9XV19KTt2YXIgbTQscDllPW4oKCk9PnttND1bWyJwYXRoIix7ZDoiTTEyLjY1OSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjkuMzQifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTEwLjM3OCAxMi42MjJhMSAxIDAgMCAxIDMgMy4wMDNMOC4zNiAyMC42MzdhMiAyIDAgMCAxLS44NTQuNTA2bC0yLjg2Ny44MzdhLjUuNSAwIDAgMS0uNjItLjYybC44MzYtMi44NjlhMiAyIDAgMCAxIC41MDYtLjg1M3oifV1dfSk7dmFyIGc0LGg5ZT1uKCgpPT57ZzQ9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0xNS4wMzMgMTMuNDRhLjY0Ny42NDcgMCAwIDEgMCAxLjEybC00LjA2NSAyLjM1MmEuNjQ1LjY0NSAwIDAgMS0uOTY4LS41NnYtNC43MDRhLjY0NS42NDUgMCAwIDEgLjk2Ny0uNTZ6In1dXX0pO3ZhciB4dixtOWU9bigoKT0+e3h2PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNOSAxNWg2In1dLFsicGF0aCIse2Q6Ik0xMiAxOHYtNiJ9XV19KTt2YXIgeDQsZzllPW4oKCk9Pnt4ND1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTEyIDE3aC4wMSJ9XSxbInBhdGgiLHtkOiJNOS4xIDlhMyAzIDAgMCAxIDUuODIgMWMwIDItMyAzLTMgMyJ9XV19KTt2YXIgYjQseDllPW4oKCk9PntiND1bWyJwYXRoIix7ZDoiTTExLjM1IDIySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2NS4zNSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTQgMTloNiJ9XSxbInBhdGgiLHtkOiJNMTcgMTZ2NiJ9XV19KTt2YXIgYnYsYjllPW4oKCk9Pntidj1bWyJwYXRoIix7ZDoiTTIwIDEwVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA0bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoNC4zNSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTYgMTRhMiAyIDAgMCAwLTIgMiJ9XSxbInBhdGgiLHtkOiJNMTYgMjJhMiAyIDAgMCAxLTItMiJ9XSxbInBhdGgiLHtkOiJNMjAgMTRhMiAyIDAgMCAxIDIgMiJ9XSxbInBhdGgiLHtkOiJNMjAgMjJhMiAyIDAgMCAwIDItMiJ9XV19KTt2YXIgdjQsdjllPW4oKCk9Pnt2ND1bWyJwYXRoIix7ZDoiTTExLjEgMjJINmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg5IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYzLjI1In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Im0yMSAyMi0yLjg4LTIuODgifV0sWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiIxNyIscjoiMyJ9XV19KTt2YXIgdnYseTllPW4oKCk9Pnt2dj1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJjaXJjbGUiLHtjeDoiMTEuNSIsY3k6IjE0LjUiLHI6IjIuNSJ9XSxbInBhdGgiLHtkOiJNMTMuMyAxNi4zIDE1IDE4In1dXX0pO3ZhciB5NCx3OWU9bigoKT0+e3k0PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNOCAxNWguMDEifV0sWyJwYXRoIix7ZDoiTTExLjUgMTMuNWEyLjUgMi41IDAgMCAxIDAgMyJ9XSxbInBhdGgiLHtkOiJNMTUgMTJhNSA1IDAgMCAxIDAgNiJ9XV19KTt2YXIgeXYsTTllPW4oKCk9Pnt5dj1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTggMTNoMiJ9XSxbInBhdGgiLHtkOiJNMTQgMTNoMiJ9XSxbInBhdGgiLHtkOiJNOCAxN2gyIn1dLFsicGF0aCIse2Q6Ik0xNCAxN2gyIn1dXX0pO3ZhciB3dix6OWU9bigoKT0+e3d2PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNOCAxMmg4In1dLFsicGF0aCIse2Q6Ik0xMCAxMXYyIn1dLFsicGF0aCIse2Q6Ik04IDE3aDgifV0sWyJwYXRoIix7ZDoiTTE0IDE2djIifV1dfSk7dmFyIE12LGs5ZT1uKCgpPT57TXY9W1sicGF0aCIse2Q6Ik0xMSAyMWExIDEgMCAwIDEtMSAxSDRhMSAxIDAgMCAxLTEtMXYtOGExIDEgMCAwIDEgMS0xIn1dLFsicGF0aCIse2Q6Ik0xNiAxNmExIDEgMCAwIDEtMSAxSDlhMSAxIDAgMCAxLTEtMVY4YTEgMSAwIDAgMSAxLTEifV0sWyJwYXRoIix7ZDoiTTIxIDZhMiAyIDAgMCAwLS41ODYtMS40MTRsLTItMkEyIDIgMCAwIDAgMTcgMmgtM2ExIDEgMCAwIDAtMSAxdjhhMSAxIDAgMCAwIDEgMWg2YTEgMSAwIDAgMCAxLTF6In1dXX0pO3ZhciB6dixTOWU9bigoKT0+e3p2PVtbInBhdGgiLHtkOiJNNCAxMVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJ2LTNhMiAyIDAgMCAxIDItMmg3In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Im0xMCAxOCAzLTMtMy0zIn1dXX0pO3ZhciBrdixDOWU9bigoKT0+e2t2PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtOCAxNiAyLTItMi0yIn1dLFsicGF0aCIse2Q6Ik0xMiAxOGg0In1dXX0pO3ZhciBTdixMOWU9bigoKT0+e1N2PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTAgOUg4In1dLFsicGF0aCIse2Q6Ik0xNiAxM0g4In1dLFsicGF0aCIse2Q6Ik0xNiAxN0g4In1dXX0pO3ZhciB3NCxUOWU9bigoKT0+e3c0PVtbInBhdGgiLHtkOiJNMTIgMjJoNmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjYifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTMgMTZ2LTEuNWEuNS41IDAgMCAxIC41LS41aDdhLjUuNSAwIDAgMSAuNS41VjE2In1dLFsicGF0aCIse2Q6Ik02IDIyaDIifV0sWyJwYXRoIix7ZDoiTTcgMTR2OCJ9XV19KTt2YXIgQ3YsXzllPW4oKCk9PntDdj1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTExIDE4aDIifV0sWyJwYXRoIix7ZDoiTTEyIDEydjYifV0sWyJwYXRoIix7ZDoiTTkgMTN2LS41YS41LjUgMCAwIDEgLjUtLjVoNWEuNS41IDAgMCAxIC41LjV2LjUifV1dfSk7dmFyIEx2LEE5ZT1uKCgpPT57THY9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0xMiAxMnY2In1dLFsicGF0aCIse2Q6Im0xNSAxNS0zLTMtMyAzIn1dXX0pO3ZhciBUdiwkOWU9bigoKT0+e1R2PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTYgMjJhNCA0IDAgMCAwLTggMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE1IixyOiIzIn1dXX0pO3ZhciBfdixEOWU9bigoKT0+e192PVtbInBhdGgiLHtkOiJNNCAxMS41NVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMS45NSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTIgMTVhNSA1IDAgMCAxIDAgNiJ9XSxbInBhdGgiLHtkOiJNOCAxNC41MDJhLjUuNSAwIDAgMC0uODI2LS4zODFsLTEuODkzIDEuNjMxYTEgMSAwIDAgMS0uNjUxLjI0M0gzLjVhLjUuNSAwIDAgMC0uNS41MDF2My4wMDZhLjUuNSAwIDAgMCAuNS41MDFoMS4xMjlhMSAxIDAgMCAxIC42NTIuMjQzbDEuODkzIDEuNjMzYS41LjUgMCAwIDAgLjgyNi0uMzh6In1dXX0pO3ZhciBNNCxFOWU9bigoKT0+e000PVtbInBhdGgiLHtkOiJNNCAxMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtMTAgMTcuODQzIDMuMDMzLTEuNzU1YS42NC42NCAwIDAgMSAuOTY3LjU2djQuNzA0YS42NS42NSAwIDAgMS0uOTY3LjU2TDEwIDIwLjE1NyJ9XSxbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiI2Iix4OiIzIix5OiIxNiIscng6IjEifV1dfSk7dmFyIHo0LE45ZT1uKCgpPT57ejQ9W1sicGF0aCIse2Q6Ik0xMSAyMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djUifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoibTE1IDE3IDUgNSJ9XSxbInBhdGgiLHtkOiJtMjAgMTctNSA1In1dXX0pO3ZhciBBdixQOWU9bigoKT0+e0F2PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtMTQuNSAxMi41LTUgNSJ9XSxbInBhdGgiLHtkOiJtOS41IDEyLjUgNSA1In1dXX0pO3ZhciAkdixJOWU9bigoKT0+eyR2PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XV19KTt2YXIgRHYsRjllPW4oKCk9PntEdj1bWyJwYXRoIix7ZDoiTTE1IDJoLTRhMiAyIDAgMCAwLTIgMnYxMWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY4In1dLFsicGF0aCIse2Q6Ik0xNi43MDYgMi43MDZBMi40IDIuNCAwIDAgMCAxNSAydjVhMSAxIDAgMCAwIDEgMWg1YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNnoifV0sWyJwYXRoIix7ZDoiTTUgN2EyIDIgMCAwIDAtMiAydjExYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMS43MzItMSJ9XV19KTt2YXIgRXYsTzllPW4oKCk9PntFdj1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNyAzdjE4In1dLFsicGF0aCIse2Q6Ik0zIDcuNWg0In1dLFsicGF0aCIse2Q6Ik0zIDEyaDE4In1dLFsicGF0aCIse2Q6Ik0zIDE2LjVoNCJ9XSxbInBhdGgiLHtkOiJNMTcgM3YxOCJ9XSxbInBhdGgiLHtkOiJNMTcgNy41aDQifV0sWyJwYXRoIix7ZDoiTTE3IDE2LjVoNCJ9XV19KTt2YXIgazQsQjllPW4oKCk9PntrND1bWyJwYXRoIix7ZDoiTTEyIDEwYTIgMiAwIDAgMC0yIDJjMCAxLjAyLS4xIDIuNTEtLjI2IDQifV0sWyJwYXRoIix7ZDoiTTE0IDEzLjEyYzAgMi4zOCAwIDYuMzgtMSA4Ljg4In1dLFsicGF0aCIse2Q6Ik0xNy4yOSAyMS4wMmMuMTItLjYuNDMtMi4zLjUtMy4wMiJ9XSxbInBhdGgiLHtkOiJNMiAxMmExMCAxMCAwIDAgMSAxOC02In1dLFsicGF0aCIse2Q6Ik0yIDE2aC4wMSJ9XSxbInBhdGgiLHtkOiJNMjEuOCAxNmMuMi0yIC4xMzEtNS4zNTQgMC02In1dLFsicGF0aCIse2Q6Ik01IDE5LjVDNS41IDE4IDYgMTUgNiAxMmE2IDYgMCAwIDEgLjM0LTIifV0sWyJwYXRoIix7ZDoiTTguNjUgMjJjLjIxLS42Ni40NS0xLjMyLjU3LTIifV0sWyJwYXRoIix7ZDoiTTkgNi44YTYgNiAwIDAgMSA5IDUuMnYyIn1dXX0pO3ZhciBOdixSOWU9bigoKT0+e052PVtbInBhdGgiLHtkOiJNMTUgNi41VjNhMSAxIDAgMCAwLTEtMWgtMmExIDEgMCAwIDAtMSAxdjMuNSJ9XSxbInBhdGgiLHtkOiJNOSAxOGg4In1dLFsicGF0aCIse2Q6Ik0xOCAzaC0zIn1dLFsicGF0aCIse2Q6Ik0xMSAzYTYgNiAwIDAgMC02IDZ2MTEifV0sWyJwYXRoIix7ZDoiTTUgMTNoNCJ9XSxbInBhdGgiLHtkOiJNMTcgMTBhNCA0IDAgMCAwLTggMHYxMGEyIDIgMCAwIDAgMiAyaDRhMiAyIDAgMCAwIDItMloifV1dfSk7dmFyIFB2LEg5ZT1uKCgpPT57UHY9W1sicGF0aCIse2Q6Ik0xOCAxMi40N3YuMDNtMC0uNXYuNDdtLS40NzUgNS4wNTZBNi43NDQgNi43NDQgMCAwIDEgMTUgMThjLTMuNTYgMC03LjU2LTIuNTMtOC41LTYgLjM0OC0xLjI4IDEuMTE0LTIuNDMzIDIuMTIxLTMuMzhtMy40NDQtMi4wODhBOC44MDIgOC44MDIgMCAwIDEgMTUgNmMzLjU2IDAgNi4wNiAyLjU0IDcgNi0uMzA5IDEuMTQtLjc4NiAyLjE3Ny0xLjQxMyAzLjA1OCJ9XSxbInBhdGgiLHtkOiJNNyAxMC42N0M3IDggNS41OCA1Ljk3IDIuNzMgNS41Yy0xIDEuNS0xIDUgLjIzIDYuNS0xLjI0IDEuNS0xLjI0IDUtLjIzIDYuNUM1LjU4IDE4LjAzIDcgMTYgNyAxMy4zM203LjQ4LTQuMzcyQTkuNzcgOS43NyAwIDAgMSAxNiA2LjA3bTAgMTEuODZhOS43NyA5Ljc3IDAgMCAxLTEuNzI4LTMuNjE4In1dLFsicGF0aCIse2Q6Im0xNi4wMSAxNy45My0uMjMgMS40QTIgMiAwIDAgMSAxMy44IDIxSDkuNWE1Ljk2IDUuOTYgMCAwIDAgMS40OS0zLjk4TTguNTMgM2g1LjI3YTIgMiAwIDAgMSAxLjk4IDEuNjdsLjIzIDEuNE0yIDJsMjAgMjAifV1dfSk7dmFyIEl2LHE5ZT1uKCgpPT57SXY9W1sicGF0aCIse2Q6Ik0yIDE2czktMTUgMjAtNEMxMSAyMyAyIDggMiA4In1dXX0pO3ZhciBGdixWOWU9bigoKT0+e0Z2PVtbInBhdGgiLHtkOiJNNi41IDEyYy45NC0zLjQ2IDQuOTQtNiA4LjUtNiAzLjU2IDAgNi4wNiAyLjU0IDcgNi0uOTQgMy40Ny0zLjQ0IDYtNyA2cy03LjU2LTIuNTMtOC41LTZaIn1dLFsicGF0aCIse2Q6Ik0xOCAxMnYuNSJ9XSxbInBhdGgiLHtkOiJNMTYgMTcuOTNhOS43NyA5Ljc3IDAgMCAxIDAtMTEuODYifV0sWyJwYXRoIix7ZDoiTTcgMTAuNjdDNyA4IDUuNTggNS45NyAyLjczIDUuNWMtMSAxLjUtMSA1IC4yMyA2LjUtMS4yNCAxLjUtMS4yNCA1LS4yMyA2LjVDNS41OCAxOC4wMyA3IDE2IDcgMTMuMzMifV0sWyJwYXRoIix7ZDoiTTEwLjQ2IDcuMjZDMTAuMiA1Ljg4IDkuMTcgNC4yNCA4IDNoNS44YTIgMiAwIDAgMSAxLjk4IDEuNjdsLjIzIDEuNCJ9XSxbInBhdGgiLHtkOiJtMTYuMDEgMTcuOTMtLjIzIDEuNEEyIDIgMCAwIDEgMTMuOCAyMUg5LjVhNS45NiA1Ljk2IDAgMCAwIDEuNDktMy45OCJ9XV19KTt2YXIgT3YsVTllPW4oKCk9PntPdj1bWyJwYXRoIix7ZDoibTE3LjU4NiAxMS40MTQtNS45MyA1LjkzYTEgMSAwIDAgMS04LThsMy4xMzctMy4xMzdhLjcwNy43MDcgMCAwIDEgMS4yMDcuNVYxMCJ9XSxbInBhdGgiLHtkOiJNMjAuNDE0IDguNTg2IDIyIDcifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxMCIscjoiMiJ9XV19KTt2YXIgQnYsajllPW4oKCk9PntCdj1bWyJwYXRoIix7ZDoiTTE2IDE2Yy0zIDAtNS0yLTgtMmE2IDYgMCAwIDAtNCAxLjUyOCJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik00IDIyVjQifV0sWyJwYXRoIix7ZDoiTTcuNjU2IDJIOGMzIDAgNSAyIDcuMzMzIDJxMiAwIDMuMDY3LS44QTEgMSAwIDAgMSAyMCA0djEwLjM0NyJ9XV19KTt2YXIgUnYsVzllPW4oKCk9PntSdj1bWyJwYXRoIix7ZDoiTTE4IDIyVjIuOGEuOC44IDAgMCAwLTEuMTctLjcxTDUuNDUgNy43OGEuOC44IDAgMCAwIDAgMS40NEwxOCAxNS41In1dXX0pO3ZhciBIdixHOWU9bigoKT0+e0h2PVtbInBhdGgiLHtkOiJNNiAyMlYyLjhhLjguOCAwIDAgMSAxLjE3LS43MWwxMS4zOCA1LjY5YS44LjggMCAwIDEgMCAxLjQ0TDYgMTUuNSJ9XV19KTt2YXIgcXYsWTllPW4oKCk9Pntxdj1bWyJwYXRoIix7ZDoiTTEyIDJjMSAzIDIuNSAzLjUgMy41IDQuNUE1IDUgMCAwIDEgMTcgMTBhNSA1IDAgMSAxLTEwIDBjMC0uMyAwLS42LjEtLjlhMiAyIDAgMSAwIDMuMy0yQzggNC41IDExIDIgMTIgMloifV0sWyJwYXRoIix7ZDoibTUgMjIgMTQtNCJ9XSxbInBhdGgiLHtkOiJtNSAxOCAxNCA0In1dXX0pO3ZhciBWdixaOWU9bigoKT0+e1Z2PVtbInBhdGgiLHtkOiJNNCAyMlY0YTEgMSAwIDAgMSAuNC0uOEE2IDYgMCAwIDEgOCAyYzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTBhMSAxIDAgMCAxLS40LjhBNiA2IDAgMCAxIDE2IDE2Yy0zIDAtNS0yLTgtMmE2IDYgMCAwIDAtNCAxLjUyOCJ9XV19KTt2YXIgVXYsWDllPW4oKCk9PntVdj1bWyJwYXRoIix7ZDoiTTEyIDNxMSA0IDQgNi41dDMgNS41YTEgMSAwIDAgMS0xNCAwIDUgNSAwIDAgMSAxLTMgMSAxIDAgMCAwIDUgMGMwLTItMS41LTMtMS41LTVxMC0yIDIuNS00In1dXX0pO3ZhciBqdixROWU9bigoKT0+e2p2PVtbInBhdGgiLHtkOiJNMTEuNjUyIDZIMTgifV0sWyJwYXRoIix7ZDoiTTEyIDEzdjEifV0sWyJwYXRoIix7ZDoiTTE2IDE2djRhMiAyIDAgMCAxLTIgMmgtNGEyIDIgMCAwIDEtMi0ydi04YTQgNCAwIDAgMC0uOC0yLjRsLS42LS44QTMgMyAwIDAgMSA2IDdWNiJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik03LjY0OSAySDE3YTEgMSAwIDAgMSAxIDF2NGEzIDMgMCAwIDEtLjYgMS44bC0uNi44YTQgNCAwIDAgMC0uNTUgMS4wMDcifV1dfSk7dmFyIFd2LEs5ZT1uKCgpPT57V3Y9W1sicGF0aCIse2Q6Ik0xMiAxM3YxIn1dLFsicGF0aCIse2Q6Ik0xNyAyYTEgMSAwIDAgMSAxIDF2NGEzIDMgMCAwIDEtLjYgMS44bC0uNi44QTQgNCAwIDAgMCAxNiAxMnY4YTIgMiAwIDAgMS0yIDJIMTBhMiAyIDAgMCAxLTItMnYtOGE0IDQgMCAwIDAtLjgtMi40bC0uNi0uOEEzIDMgMCAwIDEgNiA3VjNhMSAxIDAgMCAxIDEtMXoifV0sWyJwYXRoIix7ZDoiTTYgNmgxMiJ9XV19KTt2YXIgR3YsSjllPW4oKCk9PntHdj1bWyJwYXRoIix7ZDoiTTEwIDJ2Mi4zNDMifV0sWyJwYXRoIix7ZDoiTTE0IDJ2Ni4zNDMifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMjAgMjBhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0xLjc1NS0yLjk2bDUuMjI3LTkuNTYzIn1dLFsicGF0aCIse2Q6Ik02LjQ1MyAxNUgxNSJ9XSxbInBhdGgiLHtkOiJNOC41IDJoNyJ9XV19KTt2YXIgWXYsZWhlPW4oKCk9PntZdj1bWyJwYXRoIix7ZDoiTTEwIDJ2Ni4yOTJhNyA3IDAgMSAwIDQgMFYyIn1dLFsicGF0aCIse2Q6Ik01IDE1aDE0In1dLFsicGF0aCIse2Q6Ik04LjUgMmg3In1dXX0pO3ZhciBadix0aGU9bigoKT0+e1p2PVtbInBhdGgiLHtkOiJNMTQgMnY2YTIgMiAwIDAgMCAuMjQ1Ljk2bDUuNTEgMTAuMDhBMiAyIDAgMCAxIDE4IDIySDZhMiAyIDAgMCAxLTEuNzU1LTIuOTZsNS41MS0xMC4wOEEyIDIgMCAwIDAgMTAgOFYyIn1dLFsicGF0aCIse2Q6Ik02LjQ1MyAxNWgxMS4wOTQifV0sWyJwYXRoIix7ZDoiTTguNSAyaDcifV1dfSk7dmFyIFh2LGFoZT1uKCgpPT57WHY9W1sicGF0aCIse2Q6Ik04IDNINWEyIDIgMCAwIDAtMiAydjE0YzAgMS4xLjkgMiAyIDJoMyJ9XSxbInBhdGgiLHtkOiJNMTYgM2gzYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtMyJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIn1dLFsicGF0aCIse2Q6Ik0xMiAydjIifV1dfSk7dmFyIFF2LHJoZT1uKCgpPT57UXY9W1sicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIn1dLFsicGF0aCIse2Q6Ik0xMiAydjIifV1dfSk7dmFyIEt2LGloZT1uKCgpPT57S3Y9W1sicGF0aCIse2Q6Im0xNyAzLTUgNS01LTVoMTAifV0sWyJwYXRoIix7ZDoibTE3IDIxLTUtNS01IDVoMTAifV0sWyJwYXRoIix7ZDoiTTQgMTJIMiJ9XSxbInBhdGgiLHtkOiJNMTAgMTJIOCJ9XSxbInBhdGgiLHtkOiJNMTYgMTJoLTIifV0sWyJwYXRoIix7ZDoiTTIyIDEyaC0yIn1dXX0pO3ZhciBKdixvaGU9bigoKT0+e0p2PVtbInBhdGgiLHtkOiJNMjEgOFY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjMifV0sWyJwYXRoIix7ZDoiTTIxIDE2djNhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTMifV0sWyJwYXRoIix7ZDoiTTQgMTJIMiJ9XSxbInBhdGgiLHtkOiJNMTAgMTJIOCJ9XSxbInBhdGgiLHtkOiJNMTYgMTJoLTIifV0sWyJwYXRoIix7ZDoiTTIyIDEyaC0yIn1dXX0pO3ZhciBleSxzaGU9bigoKT0+e2V5PVtbInBhdGgiLHtkOiJNMTIgNWEzIDMgMCAxIDEgMyAzbS0zLTNhMyAzIDAgMSAwLTMgM20zLTN2MU05IDhhMyAzIDAgMSAwIDMgM005IDhoMW01IDBhMyAzIDAgMSAxLTMgM20zLTNoLTFtLTIgM3YtMSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjgiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTEyIDEwdjEyIn1dLFsicGF0aCIse2Q6Ik0xMiAyMmM0LjIgMCA3LTEuNjY3IDctNS00LjIgMC03IDEuNjY3LTcgNVoifV0sWyJwYXRoIix7ZDoiTTEyIDIyYy00LjIgMC03LTEuNjY3LTctNSA0LjIgMCA3IDEuNjY3IDcgNVoifV1dfSk7dmFyIHR5LG5oZT1uKCgpPT57dHk9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTEyIDE2LjVBNC41IDQuNSAwIDEgMSA3LjUgMTIgNC41IDQuNSAwIDEgMSAxMiA3LjVhNC41IDQuNSAwIDEgMSA0LjUgNC41IDQuNSA0LjUgMCAxIDEtNC41IDQuNSJ9XSxbInBhdGgiLHtkOiJNMTIgNy41VjkifV0sWyJwYXRoIix7ZDoiTTcuNSAxMkg5In1dLFsicGF0aCIse2Q6Ik0xNi41IDEySDE1In1dLFsicGF0aCIse2Q6Ik0xMiAxNi41VjE1In1dLFsicGF0aCIse2Q6Im04IDggMS44OCAxLjg4In1dLFsicGF0aCIse2Q6Ik0xNC4xMiA5Ljg4IDE2IDgifV0sWyJwYXRoIix7ZDoibTggMTYgMS44OC0xLjg4In1dLFsicGF0aCIse2Q6Ik0xNC4xMiAxNC4xMiAxNiAxNiJ9XV19KTt2YXIgYXksbGhlPW4oKCk9PntheT1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMyJ9XSxbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIn1dLFsicGF0aCIse2Q6Ik0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIn1dXX0pO3ZhciByeSxjaGU9bigoKT0+e3J5PVtbInBhdGgiLHtkOiJNMiAxMmg2In1dLFsicGF0aCIse2Q6Ik0yMiAxMmgtNiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xMiA4djIifV0sWyJwYXRoIix7ZDoiTTEyIDE0djIifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIifV0sWyJwYXRoIix7ZDoibTE5IDktMyAzIDMgMyJ9XSxbInBhdGgiLHtkOiJtNSAxNSAzLTMtMy0zIn1dXX0pO3ZhciBpeSxkaGU9bigoKT0+e2l5PVtbInBhdGgiLHtkOiJNMTIgMjJ2LTYifV0sWyJwYXRoIix7ZDoiTTEyIDhWMiJ9XSxbInBhdGgiLHtkOiJNNCAxMkgyIn1dLFsicGF0aCIse2Q6Ik0xMCAxMkg4In1dLFsicGF0aCIse2Q6Ik0xNiAxMmgtMiJ9XSxbInBhdGgiLHtkOiJNMjIgMTJoLTIifV0sWyJwYXRoIix7ZDoibTE1IDE5LTMtMy0zIDMifV0sWyJwYXRoIix7ZDoibTE1IDUtMyAzLTMtMyJ9XV19KTt2YXIgb3ksZmhlPW4oKCk9PntveT1bWyJjaXJjbGUiLHtjeDoiMTUiLGN5OiIxOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJNMjAuOSAxOS44QTIgMiAwIDAgMCAyMiAxOFY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJoNS4xIn1dLFsicGF0aCIse2Q6Ik0xNSAxMXYtMSJ9XSxbInBhdGgiLHtkOiJNMTUgMTd2LTIifV1dfSk7dmFyIHN5LHVoZT1uKCgpPT57c3k9W1sicGF0aCIse2Q6Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloifV0sWyJwYXRoIix7ZDoibTkgMTMgMiAyIDQtNCJ9XV19KTt2YXIgbnkscGhlPW4oKCk9PntueT1bWyJwYXRoIix7ZDoiTTE2IDE0djIuMmwxLjYgMSJ9XSxbInBhdGgiLHtkOiJNNyAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAyIn1dLFsiY2lyY2xlIix7Y3g6IjE2IixjeToiMTYiLHI6IjYifV1dfSk7dmFyIGx5LGhoZT1uKCgpPT57bHk9W1sicGF0aCIse2Q6Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloifV0sWyJwYXRoIix7ZDoiTTIgMTBoMjAifV1dfSk7dmFyIGN5LG1oZT1uKCgpPT57Y3k9W1sicGF0aCIse2Q6Ik0xMCAxMC41IDggMTNsMiAyLjUifV0sWyJwYXRoIix7ZDoibTE0IDEwLjUgMiAyLjUtMiAyLjUifV0sWyJwYXRoIix7ZDoiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyeiJ9XV19KTt2YXIgUzQsZ2hlPW4oKCk9PntTND1bWyJwYXRoIix7ZDoiTTEwLjMgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjk4YTIgMiAwIDAgMSAxLjY5LjlsLjY2IDEuMkEyIDIgMCAwIDAgMTIgNmg4YTIgMiAwIDAgMSAyIDJ2My4zIn1dLFsicGF0aCIse2Q6Im0xNC4zMDUgMTkuNTMuOTIzLS4zODIifV0sWyJwYXRoIix7ZDoibTE1LjIyOCAxNi44NTItLjkyMy0uMzgzIn1dLFsicGF0aCIse2Q6Im0xNi44NTIgMTUuMjI4LS4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTYuODUyIDIwLjc3Mi0uMzgzLjkyNCJ9XSxbInBhdGgiLHtkOiJtMTkuMTQ4IDE1LjIyOC4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTkuNTMgMjEuNjk2LS4zODItLjkyNCJ9XSxbInBhdGgiLHtkOiJtMjAuNzcyIDE2Ljg1Mi45MjQtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMjAuNzcyIDE5LjE0OC45MjQuMzgzIn1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTgiLHI6IjMifV1dfSk7dmFyIGR5LHhoZT1uKCgpPT57ZHk9W1sicGF0aCIse2Q6Ik00IDIwaDE2YTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjkzYTIgMiAwIDAgMS0xLjY2LS45bC0uODItMS4yQTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYzAgMS4xLjkgMiAyIDJaIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjEifV1dfSk7dmFyIGZ5LGJoZT1uKCgpPT57Znk9W1sicGF0aCIse2Q6Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloifV0sWyJwYXRoIix7ZDoiTTEyIDEwdjYifV0sWyJwYXRoIix7ZDoibTE1IDEzLTMgMy0zLTMifV1dfSk7dmFyIHV5LHZoZT1uKCgpPT57dXk9W1sicGF0aCIse2Q6Ik0xOCAxOWE1IDUgMCAwIDEtNS01djgifV0sWyJwYXRoIix7ZDoiTTkgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnY1In1dLFsiY2lyY2xlIix7Y3g6IjEzIixjeToiMTIiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMjAiLGN5OiIxOSIscjoiMiJ9XV19KTt2YXIgcHkseWhlPW4oKCk9PntweT1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiMiJ9XSxbInBhdGgiLHtkOiJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIn1dLFsicGF0aCIse2Q6Ik0xNCAxM2gzIn1dLFsicGF0aCIse2Q6Ik03IDEzaDMifV1dfSk7dmFyIGh5LHdoZT1uKCgpPT57aHk9W1sicGF0aCIse2Q6Ik0xMC42MzggMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYzLjQxNyJ9XSxbInBhdGgiLHtkOiJNMTQuNjIgMTguOEEyLjI1IDIuMjUgMCAxIDEgMTggMTUuODM2YTIuMjUgMi4yNSAwIDEgMSAzLjM4IDIuOTY2bC0yLjYyNiAyLjg1NmEuOTk4Ljk5OCAwIDAgMS0xLjUwNyAweiJ9XV19KTt2YXIgbXksTWhlPW4oKCk9PntteT1bWyJwYXRoIix7ZDoiTTIgOVY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LTEifV0sWyJwYXRoIix7ZDoiTTIgMTNoMTAifV0sWyJwYXRoIix7ZDoibTkgMTYgMy0zLTMtMyJ9XV19KTt2YXIgZ3ksemhlPW4oKCk9PntneT1bWyJwYXRoIix7ZDoiTTQgMjBoMTZhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOTNhMiAyIDAgMCAxLTEuNjYtLjlsLS44Mi0xLjJBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNjMCAxLjEuOSAyIDIgMloifV0sWyJwYXRoIix7ZDoiTTggMTB2NCJ9XSxbInBhdGgiLHtkOiJNMTIgMTB2MiJ9XSxbInBhdGgiLHtkOiJNMTYgMTB2NiJ9XV19KTt2YXIgeHksa2hlPW4oKCk9Pnt4eT1bWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiIyMCIscjoiMiJ9XSxbInBhdGgiLHtkOiJNMTAgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYyIn1dLFsicGF0aCIse2Q6Im0yMiAxNC00LjUgNC41In1dLFsicGF0aCIse2Q6Im0yMSAxNSAxIDEifV1dfSk7dmFyIGJ5LFNoZT1uKCgpPT57Ynk9W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjUiLHg6IjE0Iix5OiIxNyIscng6IjEifV0sWyJwYXRoIix7ZDoiTTEwIDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2Mi41In1dLFsicGF0aCIse2Q6Ik0yMCAxN3YtMmEyIDIgMCAxIDAtNCAwdjIifV1dfSk7dmFyIHZ5LENoZT1uKCgpPT57dnk9W1sicGF0aCIse2Q6Ik05IDEzaDYifV0sWyJwYXRoIix7ZDoiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiJ9XV19KTt2YXIgeXksTGhlPW4oKCk9Pnt5eT1bWyJwYXRoIix7ZDoibTYgMTQgMS40NS0yLjlBMiAyIDAgMCAxIDkuMjQgMTBIMjBhMiAyIDAgMCAxIDEuOTQgMi41bC0xLjU1IDZhMiAyIDAgMCAxLTEuOTQgMS41SDRhMiAyIDAgMCAxLTItMlY1YzAtMS4xLjktMiAyLTJoMy45M2EyIDIgMCAwIDEgMS42Ni45bC44MiAxLjJhMiAyIDAgMCAwIDEuNjYuOUgxOGEyIDIgMCAwIDEgMiAydjIifV0sWyJjaXJjbGUiLHtjeDoiMTQiLGN5OiIxNSIscjoiMSJ9XV19KTt2YXIgd3ksVGhlPW4oKCk9Pnt3eT1bWyJwYXRoIix7ZDoibTYgMTQgMS41LTIuOUEyIDIgMCAwIDEgOS4yNCAxMEgyMGEyIDIgMCAwIDEgMS45NCAyLjVsLTEuNTQgNmEyIDIgMCAwIDEtMS45NSAxLjVINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMThhMiAyIDAgMCAxIDIgMnYyIn1dXX0pO3ZhciBNeSxfaGU9bigoKT0+e015PVtbInBhdGgiLHtkOiJNMiA3LjVWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0xLjUifV0sWyJwYXRoIix7ZDoiTTIgMTNoMTAifV0sWyJwYXRoIix7ZDoibTUgMTAtMyAzIDMgMyJ9XV19KTt2YXIgQzQsQWhlPW4oKCk9PntDND1bWyJwYXRoIix7ZDoiTTIgMTEuNVY1YTIgMiAwIDAgMSAyLTJoMy45Yy43IDAgMS4zLjMgMS43LjlsLjggMS4yYy40LjYgMSAuOSAxLjcuOUgyMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJoLTkuNSJ9XSxbInBhdGgiLHtkOiJNMTEuMzc4IDEzLjYyNmExIDEgMCAxIDAtMy4wMDQtMy4wMDRsLTUuMDEgNS4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6In1dXX0pO3ZhciB6eSwkaGU9bigoKT0+e3p5PVtbInBhdGgiLHtkOiJNMTIgMTB2NiJ9XSxbInBhdGgiLHtkOiJNOSAxM2g2In1dLFsicGF0aCIse2Q6Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloifV1dfSk7dmFyIGt5LERoZT1uKCgpPT57a3k9W1sicGF0aCIse2Q6Ik00IDIwaDE2YTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjkzYTIgMiAwIDAgMS0xLjY2LS45bC0uODItMS4yQTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYzAgMS4xLjkgMiAyIDJaIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTEyIDE1djUifV1dfSk7dmFyIFN5LEVoZT1uKCgpPT57U3k9W1siY2lyY2xlIix7Y3g6IjExLjUiLGN5OiIxMi41IixyOiIyLjUifV0sWyJwYXRoIix7ZDoiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiJ9XSxbInBhdGgiLHtkOiJNMTMuMyAxNC4zIDE1IDE2In1dXX0pO3ZhciBDeSxOaGU9bigoKT0+e0N5PVtbInBhdGgiLHtkOiJNMTAuNyAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjQuMSJ9XSxbInBhdGgiLHtkOiJtMjEgMjEtMS45LTEuOSJ9XSxbImNpcmNsZSIse2N4OiIxNyIsY3k6IjE3IixyOiIzIn1dXX0pO3ZhciBMeSxQaGU9bigoKT0+e0x5PVtbInBhdGgiLHtkOiJNMiA5LjM1VjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDcifV0sWyJwYXRoIix7ZDoibTggMTYgMy0zLTMtMyJ9XV19KTt2YXIgVHksSWhlPW4oKCk9PntUeT1bWyJwYXRoIix7ZDoiTTkgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYuNSJ9XSxbInBhdGgiLHtkOiJNMTIgMTB2NGg0In1dLFsicGF0aCIse2Q6Im0xMiAxNCAxLjUzNS0xLjYwNWE1IDUgMCAwIDEgOCAxLjUifV0sWyJwYXRoIix7ZDoiTTIyIDIydi00aC00In1dLFsicGF0aCIse2Q6Im0yMiAxOC0xLjUzNSAxLjYwNWE1IDUgMCAwIDEtOC0xLjUifV1dfSk7dmFyIF95LEZoZT1uKCgpPT57X3k9W1sicGF0aCIse2Q6Ik0yMCAxMGExIDEgMCAwIDAgMS0xVjZhMSAxIDAgMCAwLTEtMWgtMi41YTEgMSAwIDAgMS0uOC0uNGwtLjktMS4yQTEgMSAwIDAgMCAxNSAzaC0yYTEgMSAwIDAgMC0xIDF2NWExIDEgMCAwIDAgMSAxWiJ9XSxbInBhdGgiLHtkOiJNMjAgMjFhMSAxIDAgMCAwIDEtMXYtM2ExIDEgMCAwIDAtMS0xaC0yLjlhMSAxIDAgMCAxLS44OC0uNTVsLS40Mi0uODVhMSAxIDAgMCAwLS45Mi0uNkgxM2ExIDEgMCAwIDAtMSAxdjVhMSAxIDAgMCAwIDEgMVoifV0sWyJwYXRoIix7ZDoiTTMgNWEyIDIgMCAwIDAgMiAyaDMifV0sWyJwYXRoIix7ZDoiTTMgM3YxM2EyIDIgMCAwIDAgMiAyaDMifV1dfSk7dmFyIEF5LE9oZT1uKCgpPT57QXk9W1sicGF0aCIse2Q6Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloifV0sWyJwYXRoIix7ZDoiTTEyIDEwdjYifV0sWyJwYXRoIix7ZDoibTkgMTMgMy0zIDMgMyJ9XV19KTt2YXIgJHksQmhlPW4oKCk9PnskeT1bWyJwYXRoIix7ZDoiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiJ9XSxbInBhdGgiLHtkOiJtOS41IDEwLjUgNSA1In1dLFsicGF0aCIse2Q6Im0xNC41IDEwLjUtNSA1In1dXX0pO3ZhciBEeSxSaGU9bigoKT0+e0R5PVtbInBhdGgiLHtkOiJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIn1dXX0pO3ZhciBFeSxIaGU9bigoKT0+e0V5PVtbInBhdGgiLHtkOiJNMjAgNWEyIDIgMCAwIDEgMiAydjdhMiAyIDAgMCAxLTIgMkg5YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDIuNWExLjUgMS41IDAgMCAxIDEuMi42bC42LjhhMS41IDEuNSAwIDAgMCAxLjIuNnoifV0sWyJwYXRoIix7ZDoiTTMgOC4yNjhhMiAyIDAgMCAwLTEgMS43MzhWMTlhMiAyIDAgMCAwIDIgMmgxMWEyIDIgMCAwIDAgMS43MzItMSJ9XV19KTt2YXIgTnkscWhlPW4oKCk9PntOeT1bWyJwYXRoIix7ZDoiTTQgMTZ2LTIuMzhDNCAxMS41IDIuOTcgMTAuNSAzIDhjLjAzLTIuNzIgMS40OS02IDQuNS02QzkuMzcgMiAxMCAzLjggMTAgNS41YzAgMy4xMS0yIDUuNjYtMiA4LjY4VjE2YTIgMiAwIDEgMS00IDBaIn1dLFsicGF0aCIse2Q6Ik0yMCAyMHYtMi4zOGMwLTIuMTIgMS4wMy0zLjEyIDEtNS42Mi0uMDMtMi43Mi0xLjQ5LTYtNC41LTZDMTQuNjMgNiAxNCA3LjggMTQgOS41YzAgMy4xMSAyIDUuNjYgMiA4LjY4VjIwYTIgMiAwIDEgMCA0IDBaIn1dLFsicGF0aCIse2Q6Ik0xNiAxN2g0In1dLFsicGF0aCIse2Q6Ik00IDEzaDQifV1dfSk7dmFyIFB5LFZoZT1uKCgpPT57UHk9W1sicGF0aCIse2Q6Ik0xMiAxMkg1YTIgMiAwIDAgMC0yIDJ2NSJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjE5IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiIxOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJNOCAxOWgzbTUtMTd2MTdoNk02IDEyVjdjMC0xLjEuOS0yIDItMmgzbDUgNSJ9XV19KTt2YXIgSXksVWhlPW4oKCk9PntJeT1bWyJwYXRoIix7ZDoiTTQgMTRoNiJ9XSxbInBhdGgiLHtkOiJNNCAyaDEwIn1dLFsicmVjdCIse3g6IjQiLHk6IjE4Iix3aWR0aDoiMTYiLGhlaWdodDoiNCIscng6IjEifV0sWyJyZWN0Iix7eDoiNCIseToiNiIsd2lkdGg6IjE2IixoZWlnaHQ6IjQiLHJ4OiIxIn1dXX0pO3ZhciBGeSxqaGU9bigoKT0+e0Z5PVtbInBhdGgiLHtkOiJtMTUgMTcgNS01LTUtNSJ9XSxbInBhdGgiLHtkOiJNNCAxOHYtMmE0IDQgMCAwIDEgNC00aDEyIn1dXX0pO3ZhciBPeSxXaGU9bigoKT0+e095PVtbImxpbmUiLHt4MToiMjIiLHgyOiIyIix5MToiNiIseTI6IjYifV0sWyJsaW5lIix7eDE6IjIyIix4MjoiMiIseTE6IjE4Iix5MjoiMTgifV0sWyJsaW5lIix7eDE6IjYiLHgyOiI2Iix5MToiMiIseTI6IjIyIn1dLFsibGluZSIse3gxOiIxOCIseDI6IjE4Iix5MToiMiIseTI6IjIyIn1dXX0pO3ZhciBCeSxHaGU9bigoKT0+e0J5PVtbInBhdGgiLHtkOiJNNSAxNlY5aDE0VjJINWwxNCAxNGgtN20tNyAwIDcgN3YtN20tNyAwaDcifV1dfSk7dmFyIFJ5LFloZT1uKCgpPT57Unk9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik0xNiAxNnMtMS41LTItNC0yLTQgMi00IDIifV0sWyJsaW5lIix7eDE6IjkiLHgyOiI5LjAxIix5MToiOSIseTI6IjkifV0sWyJsaW5lIix7eDE6IjE1Iix4MjoiMTUuMDEiLHkxOiI5Iix5MjoiOSJ9XV19KTt2YXIgSHksWmhlPW4oKCk9PntIeT1bWyJwYXRoIix7ZDoiTTE0IDEzaDJhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMCA0IDB2LTYuOTk4YTIgMiAwIDAgMC0uNTktMS40MkwxOCA1In1dLFsicGF0aCIse2Q6Ik0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2In1dLFsicGF0aCIse2Q6Ik0yIDIxaDEzIn1dLFsicGF0aCIse2Q6Ik0zIDloMTEifV1dfSk7dmFyIHF5LFhoZT1uKCgpPT57cXk9W1sicGF0aCIse2Q6Ik0zIDdWNWEyIDIgMCAwIDEgMi0yaDIifV0sWyJwYXRoIix7ZDoiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIifV0sWyJwYXRoIix7ZDoiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiJ9XSxbInBhdGgiLHtkOiJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIifV0sWyJyZWN0Iix7d2lkdGg6IjEwIixoZWlnaHQ6IjgiLHg6IjciLHk6IjgiLHJ4OiIxIn1dXX0pO3ZhciBWeSxRaGU9bigoKT0+e1Z5PVtbInBhdGgiLHtkOiJNMTMuMzU0IDNIM2ExIDEgMCAwIDAtLjc0MiAxLjY3bDcuMjI1IDcuOTg5QTIgMiAwIDAgMSAxMCAxNHY2YTEgMSAwIDAgMCAuNTUzLjg5NWwyIDFBMSAxIDAgMCAwIDE0IDIxdi03YTIgMiAwIDAgMSAuNTE3LTEuMzQxbDEuMjE4LTEuMzQ4In1dLFsicGF0aCIse2Q6Ik0xNiA2aDYifV0sWyJwYXRoIix7ZDoiTTE5IDN2NiJ9XV19KTt2YXIgTDQsS2hlPW4oKCk9PntMND1bWyJwYXRoIix7ZDoiTTEyLjUzMSAzSDNhMSAxIDAgMCAwLS43NDIgMS42N2w3LjIyNSA3Ljk4OUEyIDIgMCAwIDEgMTAgMTR2NmExIDEgMCAwIDAgLjU1My44OTVsMiAxQTEgMSAwIDAgMCAxNCAyMXYtN2EyIDIgMCAwIDEgLjUxNy0xLjM0MWwuNDI3LS40NzMifV0sWyJwYXRoIix7ZDoibTE2LjUgMy41IDUgNSJ9XSxbInBhdGgiLHtkOiJtMjEuNSAzLjUtNSA1In1dXX0pO3ZhciBUNCxKaGU9bigoKT0+e1Q0PVtbInBhdGgiLHtkOiJNMTAgMjBhMSAxIDAgMCAwIC41NTMuODk1bDIgMUExIDEgMCAwIDAgMTQgMjF2LTdhMiAyIDAgMCAxIC41MTctMS4zNDFMMjEuNzQgNC42N0ExIDEgMCAwIDAgMjEgM0gzYTEgMSAwIDAgMC0uNzQyIDEuNjdsNy4yMjUgNy45ODlBMiAyIDAgMCAxIDEwIDE0eiJ9XV19KTt2YXIgVXksZW1lPW4oKCk9PntVeT1bWyJwYXRoIix7ZDoiTTIgN3YxMCJ9XSxbInBhdGgiLHtkOiJNNiA1djE0In1dLFsicmVjdCIse3dpZHRoOiIxMiIsaGVpZ2h0OiIxOCIseDoiMTAiLHk6IjMiLHJ4OiIyIn1dXX0pO3ZhciBqeSx0bWU9bigoKT0+e2p5PVtbInBhdGgiLHtkOiJNMiAzdjE4In1dLFsicmVjdCIse3dpZHRoOiIxMiIsaGVpZ2h0OiIxOCIseDoiNiIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTIyIDN2MTgifV1dfSk7dmFyIFd5LGFtZT1uKCgpPT57V3k9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxNCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTQgMjFoMSJ9XSxbInBhdGgiLHtkOiJNOSAyMWgxIn1dLFsicGF0aCIse2Q6Ik0xNCAyMWgxIn1dLFsicGF0aCIse2Q6Ik0xOSAyMWgxIn1dXX0pO3ZhciBHeSxybWU9bigoKT0+e0d5PVtbInBhdGgiLHtkOiJNNyAyaDEwIn1dLFsicGF0aCIse2Q6Ik01IDZoMTQifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjEyIix4OiIzIix5OiIxMCIscng6IjIifV1dfSk7dmFyIFl5LGltZT1uKCgpPT57WXk9W1sicGF0aCIse2Q6Ik0zIDJoMTgifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjEyIix4OiIzIix5OiI2IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyAyMmgxOCJ9XV19KTt2YXIgWnksb21lPW4oKCk9PntaeT1bWyJsaW5lIix7eDE6IjYiLHgyOiIxMCIseTE6IjExIix5MjoiMTEifV0sWyJsaW5lIix7eDE6IjgiLHgyOiI4Iix5MToiOSIseTI6IjEzIn1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1LjAxIix5MToiMTIiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMTgiLHgyOiIxOC4wMSIseTE6IjEwIix5MjoiMTAifV0sWyJwYXRoIix7ZDoiTTE3LjMyIDVINi42OGE0IDQgMCAwIDAtMy45NzggMy41OWMtLjAwNi4wNTItLjAxLjEwMS0uMDE3LjE1MkMyLjYwNCA5LjQxNiAyIDE0LjQ1NiAyIDE2YTMgMyAwIDAgMCAzIDNjMSAwIDEuNS0uNSAyLTFsMS40MTQtMS40MTRBMiAyIDAgMCAxIDkuODI4IDE2aDQuMzQ0YTIgMiAwIDAgMSAxLjQxNC41ODZMMTcgMThjLjUuNSAxIDEgMiAxYTMgMyAwIDAgMCAzLTNjMC0xLjU0NS0uNjA0LTYuNTg0LS42ODUtNy4yNTgtLjAwNy0uMDUtLjAxMS0uMS0uMDE3LS4xNTFBNCA0IDAgMCAwIDE3LjMyIDV6In1dXX0pO3ZhciBYeSxzbWU9bigoKT0+e1h5PVtbInBhdGgiLHtkOiJNMTEuMTQ2IDE1Ljg1NGExLjIwNyAxLjIwNyAwIDAgMSAxLjcwOCAwbDEuNTYgMS41NkEyIDIgMCAwIDEgMTUgMTguODI4VjIxYTEgMSAwIDAgMS0xIDFoLTRhMSAxIDAgMCAxLTEtMXYtMi4xNzJhMiAyIDAgMCAxIC41ODYtMS40MTR6In1dLFsicGF0aCIse2Q6Ik0xOC44MjggMTVhMiAyIDAgMCAxLTEuNDE0LS41ODZsLTEuNTYtMS41NmExLjIwNyAxLjIwNyAwIDAgMSAwLTEuNzA4bDEuNTYtMS41NkEyIDIgMCAwIDEgMTguODI4IDlIMjFhMSAxIDAgMCAxIDEgMXY0YTEgMSAwIDAgMS0xIDF6In1dLFsicGF0aCIse2Q6Ik02LjU4NiAxNC40MTRBMiAyIDAgMCAxIDUuMTcyIDE1SDNhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xaDIuMTcyYTIgMiAwIDAgMSAxLjQxNC41ODZsMS41NiAxLjU2YTEuMjA3IDEuMjA3IDAgMCAxIDAgMS43MDh6In1dLFsicGF0aCIse2Q6Ik05IDNhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAxIDF2Mi4xNzJhMiAyIDAgMCAxLS41ODYgMS40MTRsLTEuNTYgMS41NmExLjIwNyAxLjIwNyAwIDAgMS0xLjcwOCAwbC0xLjU2LTEuNTZBMiAyIDAgMCAxIDkgNS4xNzJ6In1dXX0pO3ZhciBReSxubWU9bigoKT0+e1F5PVtbImxpbmUiLHt4MToiNiIseDI6IjEwIix5MToiMTIiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiOCIseDI6IjgiLHkxOiIxMCIseTI6IjE0In1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1LjAxIix5MToiMTMiLHkyOiIxMyJ9XSxbImxpbmUiLHt4MToiMTgiLHgyOiIxOC4wMSIseTE6IjExIix5MjoiMTEifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjEyIix4OiIyIix5OiI2IixyeDoiMiJ9XV19KTt2YXIgS3ksbG1lPW4oKCk9PntLeT1bWyJwYXRoIix7ZDoibTEyIDE0IDQtNCJ9XSxbInBhdGgiLHtkOiJNMy4zNCAxOWExMCAxMCAwIDEgMSAxNy4zMiAwIn1dXX0pO3ZhciBKeSxjbWU9bigoKT0+e0p5PVtbInBhdGgiLHtkOiJtMTQgMTMtOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM2w4LjM4NC04LjM4MSJ9XSxbInBhdGgiLHtkOiJtMTYgMTYgNi02In1dLFsicGF0aCIse2Q6Im0yMS41IDEwLjUtOC04In1dLFsicGF0aCIse2Q6Im04IDggNi02In1dLFsicGF0aCIse2Q6Im04LjUgNy41IDggOCJ9XV19KTt2YXIgZXcsZG1lPW4oKCk9Pntldz1bWyJwYXRoIix7ZDoiTTEwLjUgMyA4IDlsNCAxMyA0LTEzLTIuNS02In1dLFsicGF0aCIse2Q6Ik0xNyAzYTIgMiAwIDAgMSAxLjYuOGwzIDRhMiAyIDAgMCAxIC4wMTMgMi4zODJsLTcuOTkgMTAuOTg2YTIgMiAwIDAgMS0zLjI0NyAwbC03Ljk5LTEwLjk4NkEyIDIgMCAwIDEgMi40IDcuOGwyLjk5OC0zLjk5N0EyIDIgMCAwIDEgNyAzeiJ9XSxbInBhdGgiLHtkOiJNMiA5aDIwIn1dXX0pO3ZhciB0dyxmbWU9bigoKT0+e3R3PVtbInBhdGgiLHtkOiJNMTEuNSAyMWE3LjUgNy41IDAgMSAxIDcuMzUtOSJ9XSxbInBhdGgiLHtkOiJNMTMgMTJWMyJ9XSxbInBhdGgiLHtkOiJNNCAyMWgxNiJ9XSxbInBhdGgiLHtkOiJNOSAxMlYzIn1dXX0pO3ZhciBhdyx1bWU9bigoKT0+e2F3PVtbInBhdGgiLHtkOiJNOSAxMGguMDEifV0sWyJwYXRoIix7ZDoiTTE1IDEwaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMmE4IDggMCAwIDAtOCA4djEybDMtMyAyLjUgMi41TDEyIDE5bDIuNSAyLjVMMTcgMTlsMyAzVjEwYTggOCAwIDAgMC04LTh6In1dXX0pO3ZhciBydyxwbWU9bigoKT0+e3J3PVtbInJlY3QiLHt4OiIzIix5OiI4Iix3aWR0aDoiMTgiLGhlaWdodDoiNCIscng6IjEifV0sWyJwYXRoIix7ZDoiTTEyIDh2MTMifV0sWyJwYXRoIix7ZDoiTTE5IDEydjdhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJ2LTcifV0sWyJwYXRoIix7ZDoiTTcuNSA4YTIuNSAyLjUgMCAwIDEgMC01QTQuOCA4IDAgMCAxIDEyIDhhNC44IDggMCAwIDEgNC41LTUgMi41IDIuNSAwIDAgMSAwIDUifV1dfSk7dmFyIGl3LGhtZT1uKCgpPT57aXc9W1sicGF0aCIse2Q6Ik0xNSA2YTkgOSAwIDAgMC05IDlWMyJ9XSxbInBhdGgiLHtkOiJNMjEgMThoLTYifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiI2IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiIxOCIscjoiMyJ9XV19KTt2YXIgb3csbW1lPW4oKCk9Pntvdz1bWyJsaW5lIix7eDE6IjYiLHgyOiI2Iix5MToiMyIseTI6IjE1In1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiNiIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI2IixjeToiMTgiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTE4IDlhOSA5IDAgMCAxLTkgOSJ9XV19KTt2YXIgc3csZ21lPW4oKCk9Pntzdz1bWyJwYXRoIix7ZDoiTTYgM3YxMiJ9XSxbInBhdGgiLHtkOiJNMTggOWEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6In1dLFsicGF0aCIse2Q6Ik02IDIxYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnoifV0sWyJwYXRoIix7ZDoiTTE1IDZhOSA5IDAgMCAwLTkgOSJ9XSxbInBhdGgiLHtkOiJNMTggMTV2NiJ9XSxbInBhdGgiLHtkOiJNMjEgMThoLTYifV1dfSk7dmFyIF80LHhtZT1uKCgpPT57XzQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjMifV0sWyJsaW5lIix7eDE6IjMiLHgyOiI5Iix5MToiMTIiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMTUiLHgyOiIyMSIseTE6IjEyIix5MjoiMTIifV1dfSk7dmFyIG53LGJtZT1uKCgpPT57bnc9W1sicGF0aCIse2Q6Ik0xMiAzdjYifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMyJ9XSxbInBhdGgiLHtkOiJNMTIgMTV2NiJ9XV19KTt2YXIgbHcsdm1lPW4oKCk9Pntsdz1bWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjYiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTEyIDZoNWEyIDIgMCAwIDEgMiAydjcifV0sWyJwYXRoIix7ZDoibTE1IDktMy0zIDMtMyJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjE4IixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xMiAxOEg3YTIgMiAwIDAgMS0yLTJWOSJ9XSxbInBhdGgiLHtkOiJtOSAxNSAzIDMtMyAzIn1dXX0pO3ZhciBjdyx5bWU9bigoKT0+e2N3PVtbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE4IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiI2IixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xMyA2aDNhMiAyIDAgMCAxIDIgMnY3In1dLFsicGF0aCIse2Q6Ik0xMSAxOEg4YTIgMiAwIDAgMS0yLTJWOSJ9XV19KTt2YXIgZHcsd21lPW4oKCk9Pntkdz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxOCIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI2IixjeToiNiIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjYiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTE4IDl2MmMwIC42LS40IDEtMSAxSDdjLS42IDAtMS0uNC0xLTFWOSJ9XSxbInBhdGgiLHtkOiJNMTIgMTJ2MyJ9XV19KTt2YXIgZncsTW1lPW4oKCk9Pntmdz1bWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjYiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTUgOXY2In1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiIxOCIscjoiMyJ9XSxbInBhdGgiLHtkOiJNMTIgM3YxOCJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjYiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTE2IDE1LjdBOSA5IDAgMCAwIDE5IDkifV1dfSk7dmFyIHV3LHptZT1uKCgpPT57dXc9W1siY2lyY2xlIix7Y3g6IjE4IixjeToiMTgiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjYiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTYgMjFWOWE5IDkgMCAwIDAgOSA5In1dXX0pO3ZhciBwdyxrbWU9bigoKT0+e3B3PVtbImNpcmNsZSIse2N4OiI1IixjeToiNiIscjoiMyJ9XSxbInBhdGgiLHtkOiJNNSA5djEyIn1dLFsiY2lyY2xlIix7Y3g6IjE5IixjeToiMTgiLHI6IjMifV0sWyJwYXRoIix7ZDoibTE1IDktMy0zIDMtMyJ9XSxbInBhdGgiLHtkOiJNMTIgNmg1YTIgMiAwIDAgMSAyIDJ2NyJ9XV19KTt2YXIgaHcsU21lPW4oKCk9Pntodz1bWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjYiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTYgOXYxMiJ9XSxbInBhdGgiLHtkOiJtMjEgMy02IDYifV0sWyJwYXRoIix7ZDoibTIxIDktNi02In1dLFsicGF0aCIse2Q6Ik0xOCAxMS41VjE1In1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTgiLHI6IjMifV1dfSk7dmFyIG13LENtZT1uKCgpPT57bXc9W1siY2lyY2xlIix7Y3g6IjUiLGN5OiI2IixyOiIzIn1dLFsicGF0aCIse2Q6Ik01IDl2MTIifV0sWyJwYXRoIix7ZDoibTE1IDktMy0zIDMtMyJ9XSxbInBhdGgiLHtkOiJNMTIgNmg1YTIgMiAwIDAgMSAyIDJ2MyJ9XSxbInBhdGgiLHtkOiJNMTkgMTV2NiJ9XSxbInBhdGgiLHtkOiJNMjIgMThoLTYifV1dfSk7dmFyIGd3LExtZT1uKCgpPT57Z3c9W1siY2lyY2xlIix7Y3g6IjYiLGN5OiI2IixyOiIzIn1dLFsicGF0aCIse2Q6Ik02IDl2MTIifV0sWyJwYXRoIix7ZDoiTTEzIDZoM2EyIDIgMCAwIDEgMiAydjMifV0sWyJwYXRoIix7ZDoiTTE4IDE1djYifV0sWyJwYXRoIix7ZDoiTTIxIDE4aC02In1dXX0pO3ZhciB4dyxUbWU9bigoKT0+e3h3PVtbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE4IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiI2IixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xOCA2VjUifV0sWyJwYXRoIix7ZDoiTTE4IDExdi0xIn1dLFsibGluZSIse3gxOiI2Iix4MjoiNiIseTE6IjkiLHkyOiIyMSJ9XV19KTt2YXIgYncsX21lPW4oKCk9Pntidz1bWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxOCIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI2IixjeToiNiIscjoiMyJ9XSxbInBhdGgiLHtkOiJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2NyJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjYiLHkxOiI5Iix5MjoiMjEifV1dfSk7dmFyIHZ3LEFtZT1uKCgpPT57dnc9W1sicGF0aCIse2Q6Ik0xNSAyMnYtNGE0LjggNC44IDAgMCAwLTEtMy41YzMgMCA2LTIgNi01LjUuMDgtMS4yNS0uMjctMi40OC0xLTMuNS4yOC0xLjE1LjI4LTIuMzUgMC0zLjUgMCAwLTEgMC0zIDEuNS0yLjY0LS41LTUuMzYtLjUtOCAwQzYgMiA1IDIgNSAyYy0uMyAxLjE1LS4zIDIuMzUgMCAzLjVBNS40MDMgNS40MDMgMCAwIDAgNCA5YzAgMy41IDMgNS41IDYgNS41LS4zOS40OS0uNjggMS4wNS0uODUgMS42NS0uMTcuNi0uMjIgMS4yMy0uMTUgMS44NXY0In1dLFsicGF0aCIse2Q6Ik05IDE4Yy00LjUxIDItNS0yLTctMiJ9XV19KTt2YXIgeXcsJG1lPW4oKCk9Pnt5dz1bWyJwYXRoIix7ZDoibTIyIDEzLjI5LTMuMzMtMTBhLjQyLjQyIDAgMCAwLS4xNC0uMTguMzguMzggMCAwIDAtLjIyLS4xMS4zOS4zOSAwIDAgMC0uMjMuMDcuNDIuNDIgMCAwIDAtLjE0LjE4bC0yLjI2IDYuNjdIOC4zMkw2LjEgMy4yNmEuNDIuNDIgMCAwIDAtLjEtLjE4LjM4LjM4IDAgMCAwLS4yNi0uMDguMzkuMzkgMCAwIDAtLjIzLjA3LjQyLjQyIDAgMCAwLS4xNC4xOEwyIDEzLjI5YS43NC43NCAwIDAgMCAuMjcuODNMMTIgMjFsOS42OS02Ljg4YS43MS43MSAwIDAgMCAuMzEtLjgzWiJ9XV19KTt2YXIgd3csRG1lPW4oKCk9Pnt3dz1bWyJwYXRoIix7ZDoiTTUuMTE2IDQuMTA0QTEgMSAwIDAgMSA2LjExIDNoMTEuNzhhMSAxIDAgMCAxIC45OTQgMS4xMDVMMTcuMTkgMjAuMjFBMiAyIDAgMCAxIDE1LjIgMjJIOC44YTIgMiAwIDAgMS0yLTEuNzl6In1dLFsicGF0aCIse2Q6Ik02IDEyYTUgNSAwIDAgMSA2IDAgNSA1IDAgMCAwIDYgMCJ9XV19KTt2YXIgTXcsRW1lPW4oKCk9PntNdz1bWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjE1IixyOiI0In1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTUiLHI6IjQifV0sWyJwYXRoIix7ZDoiTTE0IDE1YTIgMiAwIDAgMC0yLTIgMiAyIDAgMCAwLTIgMiJ9XSxbInBhdGgiLHtkOiJNMi41IDEzIDUgN2MuNy0xLjMgMS40LTIgMy0yIn1dLFsicGF0aCIse2Q6Ik0yMS41IDEzIDE5IDdjLS43LTEuMy0xLjUtMi0zLTIifV1dfSk7dmFyIHp3LE5tZT1uKCgpPT57enc9W1sicGF0aCIse2Q6Ik0xNS42ODYgMTVBMTQuNSAxNC41IDAgMCAxIDEyIDIyYTE0LjUgMTQuNSAwIDAgMSAwLTIwIDEwIDEwIDAgMSAwIDkuNTQyIDEzIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDguNSJ9XSxbInBhdGgiLHtkOiJNMjAgNlY0YTIgMiAwIDEgMC00IDB2MiJ9XSxbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI1Iix4OiIxNCIseToiNiIscng6IjEifV1dfSk7dmFyIGt3LFBtZT1uKCgpPT57a3c9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIn1dXX0pO3ZhciBTdyxJbWU9bigoKT0+e1N3PVtbInBhdGgiLHtkOiJNMTIgMTNWMmw4IDQtOCA0In1dLFsicGF0aCIse2Q6Ik0yMC41NjEgMTAuMjIyYTkgOSAwIDEgMS0xMi41NS01LjI5In1dLFsicGF0aCIse2Q6Ik04LjAwMiA5Ljk5N2E1IDUgMCAxIDAgOC45IDIuMDIifV1dfSk7dmFyIEN3LEZtZT1uKCgpPT57Q3c9W1sicGF0aCIse2Q6Ik0yIDIxVjMifV0sWyJwYXRoIix7ZDoiTTIgNWgxOGEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkgyLjI2In1dLFsicGF0aCIse2Q6Ik03IDE3djNhMSAxIDAgMCAwIDEgMWg1YTEgMSAwIDAgMCAxLTF2LTMifV0sWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiIxMSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI4IixjeToiMTEiLHI6IjIifV1dfSk7dmFyIEx3LE9tZT1uKCgpPT57THc9W1sicGF0aCIse2Q6Ik0yMS40MiAxMC45MjJhMSAxIDAgMCAwLS4wMTktMS44MzhMMTIuODMgNS4xOGEyIDIgMCAwIDAtMS42NiAwTDIuNiA5LjA4YTEgMSAwIDAgMCAwIDEuODMybDguNTcgMy45MDhhMiAyIDAgMCAwIDEuNjYgMHoifV0sWyJwYXRoIix7ZDoiTTIyIDEwdjYifV0sWyJwYXRoIix7ZDoiTTYgMTIuNVYxNmE2IDMgMCAwIDAgMTIgMHYtMy41In1dXX0pO3ZhciBUdyxCbWU9bigoKT0+e1R3PVtbInBhdGgiLHtkOiJNMjIgNVYybC01Ljg5IDUuODkifV0sWyJjaXJjbGUiLHtjeDoiMTYuNiIsY3k6IjE1Ljg5IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjguMTEiLGN5OiI3LjQiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiMTIuMzUiLGN5OiIxMS42NSIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiIxMy45MSIsY3k6IjUuODUiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiMTguMTUiLGN5OiIxMC4wOSIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI2LjU2IixjeToiMTMuMiIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiIxMC44IixjeToiMTcuNDQiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjE5IixyOiIzIn1dXX0pO3ZhciBBNCxSbWU9bigoKT0+e0E0PVtbInBhdGgiLHtkOiJNMTIgM3YxN2ExIDEgMCAwIDEtMSAxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFIMyJ9XSxbInBhdGgiLHtkOiJtMTYgMTkgMiAyIDQtNCJ9XV19KTt2YXIgJDQsSG1lPW4oKCk9PnskND1bWyJwYXRoIix7ZDoiTTEyIDN2MTdhMSAxIDAgMCAxLTEgMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2NmExIDEgMCAwIDEtMSAxSDMifV0sWyJwYXRoIix7ZDoiTTE2IDE5aDYifV0sWyJwYXRoIix7ZDoiTTE5IDIydi02In1dXX0pO3ZhciBENCxxbWU9bigoKT0+e0Q0PVtbInBhdGgiLHtkOiJNMTIgM3YxN2ExIDEgMCAwIDEtMSAxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFIMyJ9XSxbInBhdGgiLHtkOiJtMTYgMTYgNSA1In1dLFsicGF0aCIse2Q6Im0xNiAyMSA1LTUifV1dfSk7dmFyIEU0LFZtZT1uKCgpPT57RTQ9W1sicGF0aCIse2Q6Ik0xMiAzdjE4In1dLFsicGF0aCIse2Q6Ik0zIDEyaDE4In1dLFsicmVjdCIse3g6IjMiLHk6IjMiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxOCIscng6IjIifV1dfSk7dmFyIF93LFVtZT1uKCgpPT57X3c9W1sicGF0aCIse2Q6Ik0xNSAzdjE4In1dLFsicGF0aCIse2Q6Ik0zIDEyaDE4In1dLFsicGF0aCIse2Q6Ik05IDN2MTgifV0sWyJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiJ9XV19KTt2YXIgRmksam1lPW4oKCk9PntGaT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyA5aDE4In1dLFsicGF0aCIse2Q6Ik0zIDE1aDE4In1dLFsicGF0aCIse2Q6Ik05IDN2MTgifV0sWyJwYXRoIix7ZDoiTTE1IDN2MTgifV1dfSk7dmFyIEF3LFdtZT1uKCgpPT57QXc9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiOSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjkiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjkiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxNSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjE1IixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiIxNSIscjoiMSJ9XV19KTt2YXIgJHcsR21lPW4oKCk9Pnskdz1bWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjEyIixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI1IixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiIxOSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxNSIsY3k6IjEyIixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjE1IixjeToiNSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxNSIsY3k6IjE5IixyOiIxIn1dXX0pO3ZhciBEdyxZbWU9bigoKT0+e0R3PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjUiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiI1IixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiI1IixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxMiIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiI1IixjeToiMTIiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxOSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjE5IixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiIxOSIscjoiMSJ9XV19KTt2YXIgRXcsWm1lPW4oKCk9PntFdz1bWyJwYXRoIix7ZDoiTTMgN1Y1YzAtMS4xLjktMiAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNMTcgM2gyYzEuMSAwIDIgLjkgMiAydjIifV0sWyJwYXRoIix7ZDoiTTIxIDE3djJjMCAxLjEtLjkgMi0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTcgMjFINWMtMS4xIDAtMi0uOS0yLTJ2LTIifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiNSIseDoiNyIseToiNyIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiNSIseDoiMTAiLHk6IjEyIixyeDoiMSJ9XV19KTt2YXIgTncsWG1lPW4oKCk9PntOdz1bWyJwYXRoIix7ZDoiTTEzLjE0NCAyMS4xNDRBNy4yNzQgMTAuNDQ1IDQ1IDEgMCAyLjg1NiAxMC44NTYifV0sWyJwYXRoIix7ZDoiTTEzLjE0NCAyMS4xNDRBNy4yNzQgNC4zNjUgNDUgMCAwIDIuODU2IDEwLjg1NmE3LjI3NCA0LjM2NSA0NSAwIDAgMTAuMjg4IDEwLjI4OCJ9XSxbInBhdGgiLHtkOiJNMTYuNTY1IDEwLjQzNSAxOC42IDguNGEyLjUwMSAyLjUwMSAwIDEgMCAxLjY1LTQuNjUgMi41IDIuNSAwIDEgMC00LjY2IDEuNjZsLTIuMDI0IDIuMDI1In1dLFsicGF0aCIse2Q6Im04LjUgMTYuNS0xLTEifV1dfSk7dmFyIFB3LFFtZT1uKCgpPT57UHc9W1sicGF0aCIse2Q6Im0xMS45IDEyLjEgNC41MTQtNC41MTQifV0sWyJwYXRoIix7ZDoiTTIwLjEgMi4zYTEgMSAwIDAgMC0xLjQgMGwtMS4xMTQgMS4xMTRBMiAyIDAgMCAwIDE3IDQuODI4djEuMzQ0YTIgMiAwIDAgMS0uNTg2IDEuNDE0QTIgMiAwIDAgMSAxNy44MjggN2gxLjM0NGEyIDIgMCAwIDAgMS40MTQtLjU4NkwyMS43IDUuM2ExIDEgMCAwIDAgMC0xLjR6In1dLFsicGF0aCIse2Q6Im02IDE2IDIgMiJ9XSxbInBhdGgiLHtkOiJNOC4yMyA5Ljg1QTMgMyAwIDAgMSAxMSA4YTUgNSAwIDAgMSA1IDUgMyAzIDAgMCAxLTEuODUgMi43N2wtLjkyLjM4QTIgMiAwIDAgMCAxMiAxOGE0IDQgMCAwIDEtNCA0IDYgNiAwIDAgMS02LTYgNCA0IDAgMCAxIDQtNCAyIDIgMCAwIDAgMS44NS0xLjIzeiJ9XV19KTt2YXIgSXcsS21lPW4oKCk9PntJdz1bWyJwYXRoIix7ZDoiTTEyIDE2SDRhMiAyIDAgMSAxIDAtNGgxNmEyIDIgMCAxIDEgMCA0aC00LjI1In1dLFsicGF0aCIse2Q6Ik01IDEyYTIgMiAwIDAgMS0yLTIgOSA3IDAgMCAxIDE4IDAgMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNNSAxNmEyIDIgMCAwIDAtMiAyIDMgMyAwIDAgMCAzIDNoMTJhMyAzIDAgMCAwIDMtMyAyIDIgMCAwIDAtMi0ycTAgMCAwIDAifV0sWyJwYXRoIix7ZDoibTYuNjcgMTIgNi4xMyA0LjZhMiAyIDAgMCAwIDIuOC0uNGwzLjE1LTQuMiJ9XV19KTt2YXIgRncsSm1lPW4oKCk9PntGdz1bWyJwYXRoIix7ZDoibTE1IDEyLTkuMzczIDkuMzczYTEgMSAwIDAgMS0zLjAwMS0zTDEyIDkifV0sWyJwYXRoIix7ZDoibTE4IDE1IDQtNCJ9XSxbInBhdGgiLHtkOiJtMjEuNSAxMS41LTEuOTE0LTEuOTE0QTIgMiAwIDAgMSAxOSA4LjE3MnYtLjM0NGEyIDIgMCAwIDAtLjU4Ni0xLjQxNGwtMS42NTctMS42NTdBNiA2IDAgMCAwIDEyLjUxNiAzSDlsMS4yNDMgMS4yNDNBNiA2IDAgMCAxIDEyIDguNDg1VjEwbDIgMmgxLjE3MmEyIDIgMCAwIDEgMS40MTQuNTg2TDE4LjUgMTQuNSJ9XV19KTt2YXIgT3csZWdlPW4oKCk9PntPdz1bWyJwYXRoIix7ZDoiTTExIDE1aDJhMiAyIDAgMSAwIDAtNGgtM2MtLjYgMC0xLjEuMi0xLjQuNkwzIDE3In1dLFsicGF0aCIse2Q6Im03IDIxIDEuNi0xLjRjLjMtLjQuOC0uNiAxLjQtLjZoNGMxLjEgMCAyLjEtLjQgMi44LTEuMmw0LjYtNC40YTIgMiAwIDAgMC0yLjc1LTIuOTFsLTQuMiAzLjkifV0sWyJwYXRoIix7ZDoibTIgMTYgNiA2In1dLFsiY2lyY2xlIix7Y3g6IjE2IixjeToiOSIscjoiMi45In1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiI1IixyOiIzIn1dXX0pO3ZhciBCdyx0Z2U9bigoKT0+e0J3PVtbInBhdGgiLHtkOiJNMTIuMDM1IDE3LjAxMmEzIDMgMCAwIDAtMy0zbC0uMzExLS4wMDJhLjcyLjcyIDAgMCAxLS41MDUtMS4yMjlsMS4xOTUtMS4xOTVBMiAyIDAgMCAxIDEwLjgyOCAxMUgxMmEyIDIgMCAwIDAgMC00SDkuMjQzYTMgMyAwIDAgMC0yLjEyMi44NzlsLTIuNzA3IDIuNzA3QTQuODMgNC44MyAwIDAgMCAzIDE0YTggOCAwIDAgMCA4IDhoMmE4IDggMCAwIDAgOC04VjdhMiAyIDAgMSAwLTQgMHYyYTIgMiAwIDEgMCA0IDAifV0sWyJwYXRoIix7ZDoiTTEzLjg4OCA5LjY2MkEyIDIgMCAwIDAgMTcgOFY1QTIgMiAwIDEgMCAxMyA1In1dLFsicGF0aCIse2Q6Ik05IDVBMiAyIDAgMSAwIDUgNVYxMCJ9XSxbInBhdGgiLHtkOiJNOSA3VjRBMiAyIDAgMSAxIDEzIDRWNy4yNjgifV1dfSk7dmFyIE40LGFnZT1uKCgpPT57TjQ9W1sicGF0aCIse2Q6Ik0xOCAxMS41VjlhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjEuNCJ9XSxbInBhdGgiLHtkOiJNMTQgMTBWOGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTAgOS45VjlhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjUifV0sWyJwYXRoIix7ZDoiTTYgMTRhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAyIn1dLFsicGF0aCIse2Q6Ik0xOCAxMWEyIDIgMCAxIDEgNCAwdjNhOCA4IDAgMCAxLTggOGgtNGE4IDggMCAwIDEtOC04IDIgMiAwIDEgMSA0IDAifV1dfSk7dmFyIFJ3LHJnZT1uKCgpPT57Unc9W1sicGF0aCIse2Q6Ik0xMSAxNGgyYTIgMiAwIDAgMCAwLTRoLTNjLS42IDAtMS4xLjItMS40LjZMMyAxNiJ9XSxbInBhdGgiLHtkOiJtMTQuNDUgMTMuMzkgNS4wNS00LjY5NEMyMC4xOTYgOCAyMSA2Ljg1IDIxIDUuNzVhMi43NSAyLjc1IDAgMCAwLTQuNzk3LTEuODM3LjI3Ni4yNzYgMCAwIDEtLjQwNiAwQTIuNzUgMi43NSAwIDAgMCAxMSA1Ljc1YzAgMS4yLjgwMiAyLjI0OCAxLjUgMi45NDZMMTYgMTEuOTUifV0sWyJwYXRoIix7ZDoibTIgMTUgNiA2In1dLFsicGF0aCIse2Q6Im03IDIwIDEuNi0xLjRjLjMtLjQuOC0uNiAxLjQtLjZoNGMxLjEgMCAyLjEtLjQgMi44LTEuMmw0LjYtNC40YTEgMSAwIDAgMC0yLjc1LTIuOTEifV1dfSk7dmFyIFA0LGlnZT1uKCgpPT57UDQ9W1sicGF0aCIse2Q6Ik0xMSAxMmgyYTIgMiAwIDEgMCAwLTRoLTNjLS42IDAtMS4xLjItMS40LjZMMyAxNCJ9XSxbInBhdGgiLHtkOiJtNyAxOCAxLjYtMS40Yy4zLS40LjgtLjYgMS40LS42aDRjMS4xIDAgMi4xLS40IDIuOC0xLjJsNC42LTQuNGEyIDIgMCAwIDAtMi43NS0yLjkxbC00LjIgMy45In1dLFsicGF0aCIse2Q6Im0yIDEzIDYgNiJ9XV19KTt2YXIgSHcsb2dlPW4oKCk9PntIdz1bWyJwYXRoIix7ZDoiTTE4IDEyLjVWMTBhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjEuNCJ9XSxbInBhdGgiLHtkOiJNMTQgMTFWOWEyIDIgMCAxIDAtNCAwdjIifV0sWyJwYXRoIix7ZDoiTTEwIDEwLjVWNWEyIDIgMCAxIDAtNCAwdjkifV0sWyJwYXRoIix7ZDoibTcgMTUtMS43Ni0xLjc2YTIgMiAwIDAgMC0yLjgzIDIuODJsMy42IDMuNkM3LjUgMjEuMTQgOS4yIDIyIDEyIDIyaDJhOCA4IDAgMCAwIDgtOFY3YTIgMiAwIDEgMC00IDB2NSJ9XV19KTt2YXIgcXcsc2dlPW4oKCk9Pntxdz1bWyJwYXRoIix7ZDoiTTEyIDNWMiJ9XSxbInBhdGgiLHtkOiJtMTUuNCAxNy40IDMuMi0yLjhhMiAyIDAgMSAxIDIuOCAyLjlsLTMuNiAzLjNjLS43LjgtMS43IDEuMi0yLjggMS4yaC00Yy0xLjEgMC0yLjEtLjQtMi44LTEuMmwtMS4zMDItMS40NjRBMSAxIDAgMCAwIDYuMTUxIDE5SDUifV0sWyJwYXRoIix7ZDoiTTIgMTRoMTJhMiAyIDAgMCAxIDAgNGgtMiJ9XSxbInBhdGgiLHtkOiJNNCAxMGgxNiJ9XSxbInBhdGgiLHtkOiJNNSAxMGE3IDcgMCAwIDEgMTQgMCJ9XSxbInBhdGgiLHtkOiJNNSAxNHY2YTEgMSAwIDAgMS0xIDFIMiJ9XV19KTt2YXIgVncsbmdlPW4oKCk9PntWdz1bWyJwYXRoIix7ZDoiTTE4IDExVjZhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAyIn1dLFsicGF0aCIse2Q6Ik0xNCAxMFY0YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xMCAxMC41VjZhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjgifV0sWyJwYXRoIix7ZDoiTTE4IDhhMiAyIDAgMSAxIDQgMHY2YTggOCAwIDAgMS04IDhoLTJjLTIuOCAwLTQuNS0uODYtNS45OS0yLjM0bC0zLjYtMy42YTIgMiAwIDAgMSAyLjgzLTIuODJMNyAxNSJ9XV19KTt2YXIgVXcsbGdlPW4oKCk9PntVdz1bWyJwYXRoIix7ZDoiTTIuMDQ4IDE4LjU2NkEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS45NTItMi40MzRsLTItOUEyIDIgMCAwIDAgMTggOEg2YTIgMiAwIDAgMC0xLjk1MiAxLjU2NnoifV0sWyJwYXRoIix7ZDoiTTggMTFWNmE0IDQgMCAwIDEgOCAwdjUifV1dfSk7dmFyIGp3LGNnZT1uKCgpPT57anc9W1sicGF0aCIse2Q6Im0xMSAxNyAyIDJhMSAxIDAgMSAwIDMtMyJ9XSxbInBhdGgiLHtkOiJtMTQgMTQgMi41IDIuNWExIDEgMCAxIDAgMy0zbC0zLjg4LTMuODhhMyAzIDAgMCAwLTQuMjQgMGwtLjg4Ljg4YTEgMSAwIDEgMS0zLTNsMi44MS0yLjgxYTUuNzkgNS43OSAwIDAgMSA3LjA2LS44N2wuNDcuMjhhMiAyIDAgMCAwIDEuNDIuMjVMMjEgNCJ9XSxbInBhdGgiLHtkOiJtMjEgMyAxIDExaC0yIn1dLFsicGF0aCIse2Q6Ik0zIDMgMiAxNGw2LjUgNi41YTEgMSAwIDEgMCAzLTMifV0sWyJwYXRoIix7ZDoiTTMgNGg4In1dXX0pO3ZhciBXdyxkZ2U9bigoKT0+e1d3PVtbInBhdGgiLHtkOiJNMTIgMnY4In1dLFsicGF0aCIse2Q6Im0xNiA2LTQgNC00LTQifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjgiLHg6IjIiLHk6IjE0IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNiAxOGguMDEifV0sWyJwYXRoIix7ZDoiTTEwIDE4aC4wMSJ9XV19KTt2YXIgR3csZmdlPW4oKCk9PntHdz1bWyJwYXRoIix7ZDoibTE2IDYtNC00LTQgNCJ9XSxbInBhdGgiLHtkOiJNMTIgMnY4In1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI4Iix4OiIyIix5OiIxNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTYgMThoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMCAxOGguMDEifV1dfSk7dmFyIFl3LHVnZT1uKCgpPT57WXc9W1sicGF0aCIse2Q6Ik0xMCAxMFY1YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjUifV0sWyJwYXRoIix7ZDoiTTE0IDZhNiA2IDAgMCAxIDYgNnYzIn1dLFsicGF0aCIse2Q6Ik00IDE1di0zYTYgNiAwIDAgMSA2LTYifV0sWyJyZWN0Iix7eDoiMiIseToiMTUiLHdpZHRoOiIyMCIsaGVpZ2h0OiI0IixyeDoiMSJ9XV19KTt2YXIgWncscGdlPW4oKCk9Pntadz1bWyJsaW5lIix7eDE6IjQiLHgyOiIyMCIseTE6IjkiLHkyOiI5In1dLFsibGluZSIse3gxOiI0Iix4MjoiMjAiLHkxOiIxNSIseTI6IjE1In1dLFsibGluZSIse3gxOiIxMCIseDI6IjgiLHkxOiIzIix5MjoiMjEifV0sWyJsaW5lIix7eDE6IjE2Iix4MjoiMTQiLHkxOiIzIix5MjoiMjEifV1dfSk7dmFyIFh3LGhnZT1uKCgpPT57WHc9W1sibGluZSIse3gxOiIyMiIseDI6IjIiLHkxOiIxMiIseTI6IjEyIn1dLFsicGF0aCIse2Q6Ik01LjQ1IDUuMTEgMiAxMnY2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNmwtMy40NS02Ljg5QTIgMiAwIDAgMCAxNi43NiA0SDcuMjRhMiAyIDAgMCAwLTEuNzkgMS4xMXoifV0sWyJsaW5lIix7eDE6IjYiLHgyOiI2LjAxIix5MToiMTYiLHkyOiIxNiJ9XSxbImxpbmUiLHt4MToiMTAiLHgyOiIxMC4wMSIseTE6IjE2Iix5MjoiMTYifV1dfSk7dmFyIFF3LG1nZT1uKCgpPT57UXc9W1sicGF0aCIse2Q6Ik0xNCAxOGEyIDIgMCAwIDAtNCAwIn1dLFsicGF0aCIse2Q6Im0xOSAxMS0yLjExLTYuNjU3YTIgMiAwIDAgMC0yLjc1Mi0xLjE0OGwtMS4yNzYuNjFBMiAyIDAgMCAxIDEyIDRIOC41YTIgMiAwIDAgMC0xLjkyNSAxLjQ1Nkw1IDExIn1dLFsicGF0aCIse2Q6Ik0yIDExaDIwIn1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTgiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiNyIsY3k6IjE4IixyOiIzIn1dXX0pO3ZhciBLdyxnZ2U9bigoKT0+e0t3PVtbInBhdGgiLHtkOiJtNS4yIDYuMiAxLjQgMS40In1dLFsicGF0aCIse2Q6Ik0yIDEzaDIifV0sWyJwYXRoIix7ZDoiTTIwIDEzaDIifV0sWyJwYXRoIix7ZDoibTE3LjQgNy42IDEuNC0xLjQifV0sWyJwYXRoIix7ZDoiTTIyIDE3SDIifV0sWyJwYXRoIix7ZDoiTTIyIDIxSDIifV0sWyJwYXRoIix7ZDoiTTE2IDEzYTQgNCAwIDAgMC04IDAifV0sWyJwYXRoIix7ZDoiTTEyIDVWMi41In1dXX0pO3ZhciBKdyx4Z2U9bigoKT0+e0p3PVtbInBhdGgiLHtkOiJNMTAgMTJINiJ9XSxbInBhdGgiLHtkOiJNMTAgMTVWOSJ9XSxbInBhdGgiLHtkOiJNMTQgMTQuNWEuNS41IDAgMCAwIC41LjVoMWEyLjUgMi41IDAgMCAwIDIuNS0yLjV2LTFBMi41IDIuNSAwIDAgMCAxNS41IDloLTFhLjUuNSAwIDAgMC0uNS41eiJ9XSxbInBhdGgiLHtkOiJNNiAxNVY5In1dLFsicmVjdCIse3g6IjIiLHk6IjUiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNCIscng6IjIifV1dfSk7dmFyIGVNLGJnZT1uKCgpPT57ZU09W1sicGF0aCIse2Q6Ik0yMiA5YTEgMSAwIDAgMC0xLTFIM2ExIDEgMCAwIDAtMSAxdjRhMSAxIDAgMCAwIDEgMWgxbDIgMmgxMmwyLTJoMWExIDEgMCAwIDAgMS0xWiJ9XSxbInBhdGgiLHtkOiJNNy41IDEyaDkifV1dfSk7dmFyIHRNLHZnZT1uKCgpPT57dE09W1sicGF0aCIse2Q6Ik00IDEyaDgifV0sWyJwYXRoIix7ZDoiTTQgMThWNiJ9XSxbInBhdGgiLHtkOiJNMTIgMThWNiJ9XSxbInBhdGgiLHtkOiJtMTcgMTIgMy0ydjgifV1dfSk7dmFyIGFNLHlnZT1uKCgpPT57YU09W1sicGF0aCIse2Q6Ik00IDEyaDgifV0sWyJwYXRoIix7ZDoiTTQgMThWNiJ9XSxbInBhdGgiLHtkOiJNMTIgMThWNiJ9XSxbInBhdGgiLHtkOiJNMTcuNSAxMC41YzEuNy0xIDMuNSAwIDMuNSAxLjVhMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNMTcgMTcuNWMyIDEuNSA0IC4zIDQtMS41YTIgMiAwIDAgMC0yLTIifV1dfSk7dmFyIHJNLHdnZT1uKCgpPT57ck09W1sicGF0aCIse2Q6Ik00IDEyaDgifV0sWyJwYXRoIix7ZDoiTTQgMThWNiJ9XSxbInBhdGgiLHtkOiJNMTIgMThWNiJ9XSxbInBhdGgiLHtkOiJNMjEgMThoLTRjMC00IDQtMyA0LTYgMC0xLjUtMi0yLjUtNC0xIn1dXX0pO3ZhciBpTSxNZ2U9bigoKT0+e2lNPVtbInBhdGgiLHtkOiJNMTIgMThWNiJ9XSxbInBhdGgiLHtkOiJNMTcgMTB2M2ExIDEgMCAwIDAgMSAxaDMifV0sWyJwYXRoIix7ZDoiTTIxIDEwdjgifV0sWyJwYXRoIix7ZDoiTTQgMTJoOCJ9XSxbInBhdGgiLHtkOiJNNCAxOFY2In1dXX0pO3ZhciBvTSx6Z2U9bigoKT0+e29NPVtbInBhdGgiLHtkOiJNNCAxMmg4In1dLFsicGF0aCIse2Q6Ik00IDE4VjYifV0sWyJwYXRoIix7ZDoiTTEyIDE4VjYifV0sWyJwYXRoIix7ZDoiTTE3IDEzdi0zaDQifV0sWyJwYXRoIix7ZDoiTTE3IDE3LjdjLjQuMi44LjMgMS4zLjMgMS41IDAgMi43LTEuMSAyLjctMi41UzE5LjggMTMgMTguMyAxM0gxNyJ9XV19KTt2YXIgc00sa2dlPW4oKCk9PntzTT1bWyJwYXRoIix7ZDoiTTQgMTJoOCJ9XSxbInBhdGgiLHtkOiJNNCAxOFY2In1dLFsicGF0aCIse2Q6Ik0xMiAxOFY2In1dLFsiY2lyY2xlIix7Y3g6IjE5IixjeToiMTYiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTIwIDEwYy0yIDItMyAzLjUtMyA2In1dXX0pO3ZhciBuTSxTZ2U9bigoKT0+e25NPVtbInBhdGgiLHtkOiJNNiAxMmgxMiJ9XSxbInBhdGgiLHtkOiJNNiAyMFY0In1dLFsicGF0aCIse2Q6Ik0xOCAyMFY0In1dXX0pO3ZhciBsTSxDZ2U9bigoKT0+e2xNPVtbInBhdGgiLHtkOiJNMjEgMTRoLTEuMzQzIn1dLFsicGF0aCIse2Q6Ik05LjEyOCAzLjQ3QTkgOSAwIDAgMSAyMSAxMnYzLjM0MyJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik0yMC40MTQgMjAuNDE0QTIgMiAwIDAgMSAxOSAyMWgtMWEyIDIgMCAwIDEtMi0ydi0zIn1dLFsicGF0aCIse2Q6Ik0zIDE0aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi03YTkgOSAwIDAgMSAyLjYzNi02LjM2NCJ9XV19KTt2YXIgY00sTGdlPW4oKCk9PntjTT1bWyJwYXRoIix7ZDoiTTMgMTRoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTdhOSA5IDAgMCAxIDE4IDB2N2EyIDIgMCAwIDEtMiAyaC0xYTIgMiAwIDAgMS0yLTJ2LTNhMiAyIDAgMCAxIDItMmgzIn1dXX0pO3ZhciBkTSxUZ2U9bigoKT0+e2RNPVtbInBhdGgiLHtkOiJNMyAxMWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNVptMCAwYTkgOSAwIDEgMSAxOCAwbTAgMHY1YTIgMiAwIDAgMS0yIDJoLTFhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDNaIn1dLFsicGF0aCIse2Q6Ik0yMSAxNnYyYTQgNCAwIDAgMS00IDRoLTUifV1dfSk7dmFyIGZNLF9nZT1uKCgpPT57Zk09W1sicGF0aCIse2Q6Ik0xMi40MDkgNS44MjRjLS43MDIuNzkyLTEuMTUgMS40OTYtMS40MTUgMi4xNjZsMi4xNTMgMi4xNTZhLjUuNSAwIDAgMSAwIC43MDdsLTIuMjkzIDIuMjkzYS41LjUgMCAwIDAgMCAuNzA3TDEyIDE1In1dLFsicGF0aCIse2Q6Ik0xMy41MDggMjAuMzEzYTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNWE1LjUgNS41IDAgMCAxIDkuNTkxLTMuNjc3LjYuNiAwIDAgMCAuODE4LjAwMUE1LjUgNS41IDAgMCAxIDIyIDkuNWMwIDIuMjktMS41IDQtMyA1LjV6In1dXX0pO3ZhciB1TSxBZ2U9bigoKT0+e3VNPVtbInBhdGgiLHtkOiJNMTkuNDE0IDE0LjQxNEMyMSAxMi44MjggMjIgMTEuNSAyMiA5LjVhNS41IDUuNSAwIDAgMC05LjU5MS0zLjY3Ni42LjYgMCAwIDEtLjgxOC4wMDFBNS41IDUuNSAwIDAgMCAyIDkuNWMwIDIuMyAxLjUgNCAzIDUuNWw1LjUzNSA1LjM2MmEyIDIgMCAwIDAgMi44NzkuMDUyIDIuMTIgMi4xMiAwIDAgMC0uMDA0LTMgMi4xMjQgMi4xMjQgMCAxIDAgMy0zIDIuMTI0IDIuMTI0IDAgMCAwIDMuMDA0IDAgMiAyIDAgMCAwIDAtMi44MjhsLTEuODgxLTEuODgyYTIuNDEgMi40MSAwIDAgMC0zLjQwOSAwbC0xLjcxIDEuNzFhMiAyIDAgMCAxLTIuODI4IDAgMiAyIDAgMCAxIDAtMi44MjhsMi44MjMtMi43NjIifV1dfSk7dmFyIHBNLCRnZT1uKCgpPT57cE09W1sicGF0aCIse2Q6Im0xNC44NzYgMTguOTktMS4zNjggMS4zMjNhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVhNS4yIDUuMiAwIDAgMS0uMjQ0IDEuNTcyIn1dLFsicGF0aCIse2Q6Ik0xNSAxNWg2In1dXX0pO3ZhciBoTSxEZ2U9bigoKT0+e2hNPVtbInBhdGgiLHtkOiJNMTAuNSA0Ljg5M2E1LjUgNS41IDAgMCAxIDEuMDkxLjkzMS41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWMwIDEuODcyLTEuMDAyIDMuMzU2LTIuMTg3IDQuNjU1In1dLFsicGF0aCIse2Q6Im0xNi45NjcgMTYuOTY3LTMuNDU5IDMuMzQ2YTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNWE1LjUgNS41IDAgMCAxIDIuNzQ3LTQuNzYxIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV1dfSk7dmFyIG1NLEVnZT1uKCgpPT57bU09W1sicGF0aCIse2Q6Im0xNC40NzkgMTkuMzc0LS45NzEuOTM5YTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNWE1LjUgNS41IDAgMCAxIDkuNTkxLTMuNjc2LjU2LjU2IDAgMCAwIC44MTggMEE1LjQ5IDUuNDkgMCAwIDEgMjIgOS41YTUuMiA1LjIgMCAwIDEtLjIxOSAxLjQ5In1dLFsicGF0aCIse2Q6Ik0xNSAxNWg2In1dLFsicGF0aCIse2Q6Ik0xOCAxMnY2In1dXX0pO3ZhciBnTSxOZ2U9bigoKT0+e2dNPVtbInBhdGgiLHtkOiJNMiA5LjVhNS41IDUuNSAwIDAgMSA5LjU5MS0zLjY3Ni41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWMwIDIuMjktMS41IDQtMyA1LjVsLTUuNDkyIDUuMzEzYTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNSJ9XSxbInBhdGgiLHtkOiJNMy4yMiAxM0g5LjVsLjUtMSAyIDQuNSAyLTcgMS41IDMuNWg1LjI3In1dXX0pO3ZhciB4TSxQZ2U9bigoKT0+e3hNPVtbInBhdGgiLHtkOiJNMTEgOGMyLTMtMi0zIDAtNiJ9XSxbInBhdGgiLHtkOiJNMTUuNSA4YzItMy0yLTMgMC02In1dLFsicGF0aCIse2Q6Ik02IDEwaC4wMSJ9XSxbInBhdGgiLHtkOiJNNiAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTEwIDE2di00In1dLFsicGF0aCIse2Q6Ik0xNCAxNnYtNCJ9XSxbInBhdGgiLHtkOiJNMTggMTZ2LTQifV0sWyJwYXRoIix7ZDoiTTIwIDZhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMyJ9XSxbInBhdGgiLHtkOiJNNSAyMHYyIn1dLFsicGF0aCIse2Q6Ik0xOSAyMHYyIn1dXX0pO3ZhciBiTSxJZ2U9bigoKT0+e2JNPVtbInBhdGgiLHtkOiJNMiA5LjVhNS41IDUuNSAwIDAgMSA5LjU5MS0zLjY3Ni41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWMwIDIuMjktMS41IDQtMyA1LjVsLTUuNDkyIDUuMzEzYTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNSJ9XV19KTt2YXIgdk0sRmdlPW4oKCk9Pnt2TT1bWyJwYXRoIix7ZDoiTTExIDE3djQifV0sWyJwYXRoIix7ZDoiTTE0IDN2OGEyIDIgMCAwIDAgMiAyaDUuODY1In1dLFsicGF0aCIse2Q6Ik0xNyAxN3Y0In1dLFsicGF0aCIse2Q6Ik0xOCAxN2E0IDQgMCAwIDAgNC00IDggNiAwIDAgMC04LTYgNiA1IDAgMCAwLTYgNXYzYTIgMiAwIDAgMCAyIDJ6In1dLFsicGF0aCIse2Q6Ik0yIDEwdjUifV0sWyJwYXRoIix7ZDoiTTYgM2gxNiJ9XSxbInBhdGgiLHtkOiJNNyAyMWgxNCJ9XSxbInBhdGgiLHtkOiJNOCAxM0gyIn1dXX0pO3ZhciB5TSxPZ2U9bigoKT0+e3lNPVtbInBhdGgiLHtkOiJNMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZ6In1dXX0pO3ZhciB3TSxCZ2U9bigoKT0+e3dNPVtbInBhdGgiLHtkOiJtOSAxMS02IDZ2M2g5bDMtMyJ9XSxbInBhdGgiLHtkOiJtMjIgMTItNC42IDQuNmEyIDIgMCAwIDEtMi44IDBsLTUuMi01LjJhMiAyIDAgMCAxIDAtMi44TDE0IDQifV1dfSk7dmFyIE1NLFJnZT1uKCgpPT57TU09W1sicGF0aCIse2Q6Ik0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgifV0sWyJwYXRoIix7ZDoiTTMgM3Y1aDUifV0sWyJwYXRoIix7ZDoiTTEyIDd2NWw0IDIifV1dfSk7dmFyIHpNLEhnZT1uKCgpPT57ek09W1sicGF0aCIse2Q6Ik0xMC44MiAxNi4xMmMxLjY5LjYgMy45MS43OSA1LjE4Ljg1LjU1LjAzIDEtLjQyLjk3LS45Ny0uMDYtMS4yNy0uMjYtMy41LS44NS01LjE4In1dLFsicGF0aCIse2Q6Ik0xMS41IDYuNWMxLjY0IDAgNS0uMzggNi43MS0xLjA3LjUyLS4yLjU1LS44Mi4xMi0xLjE3QTEwIDEwIDAgMCAwIDQuMjYgMTguMzNjLjM1LjQzLjk2LjQgMS4xNy0uMTIuNjktMS43MSAxLjA3LTUuMDcgMS4wNy02LjcxIDEuMzQuNDUgMy4xLjkgNC44OC42MmEuODguODggMCAwIDAgLjczLS43NGMuMy0yLjE0LS4xNS0zLjUtLjYxLTQuODgifV0sWyJwYXRoIix7ZDoiTTE1LjYyIDE2Ljk1Yy4yLjg1LjYyIDIuNzYuNSA0LjI4YS43Ny43NyAwIDAgMS0uOS43IDE2LjY0IDE2LjY0IDAgMCAxLTQuMDgtMS4zNiJ9XSxbInBhdGgiLHtkOiJNMTYuMTMgMjEuMDVjMS42NS42MyAzLjY4Ljg0IDQuODcuOTFhLjkuOSAwIDAgMCAuOTYtLjk2IDE3LjY4IDE3LjY4IDAgMCAwLS45LTQuODcifV0sWyJwYXRoIix7ZDoiTTE2Ljk0IDE1LjYyYy44Ni4yIDIuNzcuNjIgNC4yOS41YS43Ny43NyAwIDAgMCAuNy0uOSAxNi42NCAxNi42NCAwIDAgMC0xLjM2LTQuMDgifV0sWyJwYXRoIix7ZDoiTTE3Ljk5IDUuNTJhMjAuODIgMjAuODIgMCAwIDEgMy4xNSA0LjUuOC44IDAgMCAxLS42OCAxLjEzYy0yLjMzLjItNS4zLS4zMi04LjI3LTEuNTcifV0sWyJwYXRoIix7ZDoiTTQuOTMgNC45MyAzIDNhLjcuNyAwIDAgMSAwLTEifV0sWyJwYXRoIix7ZDoiTTkuNTggMTIuMThjMS4yNCAyLjk4IDEuNzcgNS45NSAxLjU3IDguMjhhLjguOCAwIDAgMS0xLjEzLjY4IDIwLjgyIDIwLjgyIDAgMCAxLTQuNS0zLjE1In1dXX0pO3ZhciBrTSxxZ2U9bigoKT0+e2tNPVtbInBhdGgiLHtkOiJNMTAuODIgMTYuMTJjMS42OS42IDMuOTEuNzkgNS4xOC44NS4yOC4wMS41My0uMDkuNy0uMjcifV0sWyJwYXRoIix7ZDoiTTExLjE0IDIwLjU3Yy41Mi4yNCAyLjQ0IDEuMTIgNC4wOCAxLjM3LjQ2LjA2Ljg2LS4yNS45LS43MS4xMi0xLjUyLS4zLTMuNDMtLjUtNC4yOCJ9XSxbInBhdGgiLHtkOiJNMTYuMTMgMjEuMDVjMS42NS42MyAzLjY4Ljg0IDQuODcuOTFhLjkuOSAwIDAgMCAuNy0uMjYifV0sWyJwYXRoIix7ZDoiTTE3Ljk5IDUuNTJhMjAuODMgMjAuODMgMCAwIDEgMy4xNSA0LjUuOC44IDAgMCAxLS42OCAxLjEzYy0xLjE3LjEtMi41LjAyLTMuOS0uMjUifV0sWyJwYXRoIix7ZDoiTTIwLjU3IDExLjE0Yy4yNC41MiAxLjEyIDIuNDQgMS4zNyA0LjA4LjA0LjMtLjA4LjU5LS4zMS43NSJ9XSxbInBhdGgiLHtkOiJNNC45MyA0LjkzYTEwIDEwIDAgMCAwLS42NyAxMy40Yy4zNS40My45Ni40IDEuMTctLjEyLjY5LTEuNzEgMS4wNy01LjA3IDEuMDctNi43MSAxLjM0LjQ1IDMuMS45IDQuODguNjJhLjg1Ljg1IDAgMCAwIC40OC0uMjQifV0sWyJwYXRoIix7ZDoiTTUuNTIgMTcuOTljMS4wNS45NSAyLjkxIDIuNDIgNC41IDMuMTVhLjguOCAwIDAgMCAxLjEzLS42OGMuMi0yLjM0LS4zMy01LjMtMS41Ny04LjI4In1dLFsicGF0aCIse2Q6Ik04LjM1IDIuNjhhMTAgMTAgMCAwIDEgOS45OCAxLjU4Yy40My4zNS40Ljk2LS4xMiAxLjE3LTEuNS42LTQuMy45OC02LjA3IDEuMDUifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XV19KTt2YXIgU00sVmdlPW4oKCk9PntTTT1bWyJwYXRoIix7ZDoiTTEyIDd2NCJ9XSxbInBhdGgiLHtkOiJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIn1dLFsicGF0aCIse2Q6Ik0xNCA5aC00In1dLFsicGF0aCIse2Q6Ik0xOCAxMWgyYTIgMiAwIDAgMSAyIDJ2NmEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtOWEyIDIgMCAwIDEgMi0yaDIifV0sWyJwYXRoIix7ZDoiTTE4IDIxVjVhMiAyIDAgMCAwLTItMkg4YTIgMiAwIDAgMC0yIDJ2MTYifV1dfSk7dmFyIENNLFVnZT1uKCgpPT57Q009W1sicGF0aCIse2Q6Ik0xMCAyMnYtNi41NyJ9XSxbInBhdGgiLHtkOiJNMTIgMTFoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiA3aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTQgMTUuNDNWMjIifV0sWyJwYXRoIix7ZDoiTTE1IDE2YTUgNSAwIDAgMC02IDAifV0sWyJwYXRoIix7ZDoiTTE2IDExaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgN2guMDEifV0sWyJwYXRoIix7ZDoiTTggMTFoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDdoLjAxIn1dLFsicmVjdCIse3g6IjQiLHk6IjIiLHdpZHRoOiIxNiIsaGVpZ2h0OiIyMCIscng6IjIifV1dfSk7dmFyIExNLGpnZT1uKCgpPT57TE09W1sicGF0aCIse2Q6Ik01IDIyaDE0In1dLFsicGF0aCIse2Q6Ik01IDJoMTQifV0sWyJwYXRoIix7ZDoiTTE3IDIydi00LjE3MmEyIDIgMCAwIDAtLjU4Ni0xLjQxNEwxMiAxMmwtNC40MTQgNC40MTRBMiAyIDAgMCAwIDcgMTcuODI4VjIyIn1dLFsicGF0aCIse2Q6Ik03IDJ2NC4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRMMTIgMTJsNC40MTQtNC40MTRBMiAyIDAgMCAwIDE3IDYuMTcyVjIifV1dfSk7dmFyIFRNLFdnZT1uKCgpPT57VE09W1sicGF0aCIse2Q6Ik04LjYyIDEzLjhBMi4yNSAyLjI1IDAgMSAxIDEyIDEwLjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoifV0sWyJwYXRoIix7ZDoiTTMgMTBhMiAyIDAgMCAxIC43MDktMS41MjhsNy02YTIgMiAwIDAgMSAyLjU4MiAwbDcgNkEyIDIgMCAwIDEgMjEgMTB2OWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnoifV1dfSk7dmFyIF9NLEdnZT1uKCgpPT57X009W1sicGF0aCIse2Q6Ik0xMCAxMlY4Ljk2NCJ9XSxbInBhdGgiLHtkOiJNMTQgMTJWOC45NjQifV0sWyJwYXRoIix7ZDoiTTE1IDEyYTEgMSAwIDAgMSAxIDF2MmEyIDIgMCAwIDEtMiAyaC00YTIgMiAwIDAgMS0yLTJ2LTJhMSAxIDAgMCAxIDEtMXoifV0sWyJwYXRoIix7ZDoiTTguNSAyMUg1YTIgMiAwIDAgMS0yLTJ2LTlhMiAyIDAgMCAxIC43MDktMS41MjhsNy02YTIgMiAwIDAgMSAyLjU4MiAwbDcgNkEyIDIgMCAwIDEgMjEgMTB2OWEyIDIgMCAwIDEtMiAyaC01YTIgMiAwIDAgMS0yLTJ2LTIifV1dfSk7dmFyIEFNLFlnZT1uKCgpPT57QU09W1sicGF0aCIse2Q6Ik0xMi4zNSAyMUg1YTIgMiAwIDAgMS0yLTJ2LTlhMiAyIDAgMCAxIC43MS0xLjUzbDctNmEyIDIgMCAwIDEgMi41OCAwbDcgNkEyIDIgMCAwIDEgMjEgMTB2Mi4zNSJ9XSxbInBhdGgiLHtkOiJNMTQuOCAxMi40QTEgMSAwIDAgMCAxNCAxMmgtNGExIDEgMCAwIDAtMSAxdjgifV0sWyJwYXRoIix7ZDoiTTE1IDE4aDYifV0sWyJwYXRoIix7ZDoiTTE4IDE1djYifV1dfSk7dmFyICRNLFpnZT1uKCgpPT57JE09W1sicGF0aCIse2Q6Ik05LjUgMTMuODY2YTQgNCAwIDAgMSA1IC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTdoLjAxIn1dLFsicGF0aCIse2Q6Ik0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6In1dLFsicGF0aCIse2Q6Ik03IDEwLjc1NGE4IDggMCAwIDEgMTAgMCJ9XV19KTt2YXIgSTQsWGdlPW4oKCk9PntJND1bWyJwYXRoIix7ZDoiTTE1IDIxdi04YTEgMSAwIDAgMC0xLTFoLTRhMSAxIDAgMCAwLTEgMXY4In1dLFsicGF0aCIse2Q6Ik0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6In1dXX0pO3ZhciBGNCxRZ2U9bigoKT0+e0Y0PVtbInBhdGgiLHtkOiJNMTIgMTdjNSAwIDgtMi42OSA4LTZINGMwIDMuMzEgMyA2IDggNm0tNCA0aDhtLTQtM3YzTTUuMTQgMTFhMy41IDMuNSAwIDEgMSA2LjcxIDAifV0sWyJwYXRoIix7ZDoiTTEyLjE0IDExYTMuNSAzLjUgMCAxIDEgNi43MSAwIn1dLFsicGF0aCIse2Q6Ik0xNS41IDYuNWEzLjUgMy41IDAgMSAwLTcgMCJ9XV19KTt2YXIgTzQsS2dlPW4oKCk9PntPND1bWyJwYXRoIix7ZDoibTcgMTEgNC4wOCAxMC4zNWExIDEgMCAwIDAgMS44NCAwTDE3IDExIn1dLFsicGF0aCIse2Q6Ik0xNyA3QTUgNSAwIDAgMCA3IDcifV0sWyJwYXRoIix7ZDoiTTE3IDdhMiAyIDAgMCAxIDAgNEg3YTIgMiAwIDAgMSAwLTQifV1dfSk7dmFyIERNLEpnZT1uKCgpPT57RE09W1sicGF0aCIse2Q6Ik0xMy41IDhoLTMifV0sWyJwYXRoIix7ZDoibTE1IDItMSAyaDNhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMyJ9XSxbInBhdGgiLHtkOiJNMTYuODk5IDIyQTUgNSAwIDAgMCA3LjEgMjIifV0sWyJwYXRoIix7ZDoibTkgMiAzIDYifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxNSIscjoiMyJ9XV19KTt2YXIgRU0sZXhlPW4oKCk9PntFTT1bWyJwYXRoIix7ZDoiTTE2IDEwaDIifV0sWyJwYXRoIix7ZDoiTTE2IDE0aDIifV0sWyJwYXRoIix7ZDoiTTYuMTcgMTVhMyAzIDAgMCAxIDUuNjYgMCJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiMTEiLHI6IjIifV0sWyJyZWN0Iix7eDoiMiIseToiNSIsd2lkdGg6IjIwIixoZWlnaHQ6IjE0IixyeDoiMiJ9XV19KTt2YXIgTk0sdHhlPW4oKCk9PntOTT1bWyJwYXRoIix7ZDoiTTEwLjMgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjEwbC0zLjEtMy4xYTIgMiAwIDAgMC0yLjgxNC4wMTRMNiAyMSJ9XSxbInBhdGgiLHtkOiJtMTQgMTkgMyAzdi01LjUifV0sWyJwYXRoIix7ZDoibTE3IDIyIDMtMyJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiOSIscjoiMiJ9XV19KTt2YXIgUE0sYXhlPW4oKCk9PntQTT1bWyJwYXRoIix7ZDoiTTIxIDl2MTBhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDcifV0sWyJsaW5lIix7eDE6IjE2Iix4MjoiMjIiLHkxOiI1Iix5MjoiNSJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJtMjEgMTUtMy4wODYtMy4wODZhMiAyIDAgMCAwLTIuODI4IDBMNiAyMSJ9XV19KTt2YXIgSU0scnhlPW4oKCk9PntJTT1bWyJsaW5lIix7eDE6IjIiLHgyOiIyMiIseTE6IjIiLHkyOiIyMiJ9XSxbInBhdGgiLHtkOiJNMTAuNDEgMTAuNDFhMiAyIDAgMSAxLTIuODMtMi44MyJ9XSxbImxpbmUiLHt4MToiMTMuNSIseDI6IjYiLHkxOiIxMy41Iix5MjoiMjEifV0sWyJsaW5lIix7eDE6IjE4Iix4MjoiMjEiLHkxOiIxMiIseTI6IjE1In1dLFsicGF0aCIse2Q6Ik0zLjU5IDMuNTlBMS45OSAxLjk5IDAgMCAwIDMgNXYxNGEyIDIgMCAwIDAgMiAyaDE0Yy41NSAwIDEuMDUyLS4yMiAxLjQxLS41OSJ9XSxbInBhdGgiLHtkOiJNMjEgMTVWNWEyIDIgMCAwIDAtMi0ySDkifV1dfSk7dmFyIEZNLGl4ZT1uKCgpPT57Rk09W1sicGF0aCIse2Q6Ik0xNiA1aDYifV0sWyJwYXRoIix7ZDoiTTE5IDJ2NiJ9XSxbInBhdGgiLHtkOiJNMjEgMTEuNVYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNy41In1dLFsicGF0aCIse2Q6Im0yMSAxNS0zLjA4Ni0zLjA4NmEyIDIgMCAwIDAtMi44MjggMEw2IDIxIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI5IixyOiIyIn1dXX0pO3ZhciBPTSxveGU9bigoKT0+e09NPVtbInBhdGgiLHtkOiJNMTUgMTUuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiJ9XSxbInBhdGgiLHtkOiJNMjEgMTIuMTdWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYifV0sWyJwYXRoIix7ZDoibTYgMjEgNS01In1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI5IixyOiIyIn1dXX0pO3ZhciBCTSxzeGU9bigoKT0+e0JNPVtbInBhdGgiLHtkOiJNMTAuMyAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTBsLTMuMS0zLjFhMiAyIDAgMCAwLTIuODE0LjAxNEw2IDIxIn1dLFsicGF0aCIse2Q6Im0xNCAxOS41IDMtMyAzIDMifV0sWyJwYXRoIix7ZDoiTTE3IDIydi01LjUifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjkiLHI6IjIifV1dfSk7dmFyIFJNLG54ZT1uKCgpPT57Uk09W1sicGF0aCIse2Q6Ik0xNiAzaDV2NSJ9XSxbInBhdGgiLHtkOiJNMTcgMjFoMmEyIDIgMCAwIDAgMi0yIn1dLFsicGF0aCIse2Q6Ik0yMSAxMnYzIn1dLFsicGF0aCIse2Q6Im0yMSAzLTUgNSJ9XSxbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMiJ9XSxbInBhdGgiLHtkOiJtNSAyMSA0LjE0NC00LjE0NGExLjIxIDEuMjEgMCAwIDEgMS43MTIgMEwxMyAxOSJ9XSxbInBhdGgiLHtkOiJNOSAzaDMifV0sWyJyZWN0Iix7eDoiMyIseToiMTEiLHdpZHRoOiIxMCIsaGVpZ2h0OiIxMCIscng6IjEifV1dfSk7dmFyIEhNLGx4ZT1uKCgpPT57SE09W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLHJ5OiIyIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI5IixyOiIyIn1dLFsicGF0aCIse2Q6Im0yMSAxNS0zLjA4Ni0zLjA4NmEyIDIgMCAwIDAtMi44MjggMEw2IDIxIn1dXX0pO3ZhciBxTSxjeGU9bigoKT0+e3FNPVtbInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2In1dLFsicGF0aCIse2Q6Ik00IDhhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTIifV0sWyJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IifV0sWyJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiJ9XV19KTt2YXIgVk0sZHhlPW4oKCk9PntWTT1bWyJwYXRoIix7ZDoiTTEyIDN2MTIifV0sWyJwYXRoIix7ZDoibTggMTEgNCA0IDQtNCJ9XSxbInBhdGgiLHtkOiJNOCA1SDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC00In1dXX0pO3ZhciBVTSxmeGU9bigoKT0+e1VNPVtbInBvbHlsaW5lIix7cG9pbnRzOiIyMiAxMiAxNiAxMiAxNCAxNSAxMCAxNSA4IDEyIDIgMTIifV0sWyJwYXRoIix7ZDoiTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiJ9XV19KTt2YXIgak0sdXhlPW4oKCk9PntqTT1bWyJwYXRoIix7ZDoiTTYgM2gxMiJ9XSxbInBhdGgiLHtkOiJNNiA4aDEyIn1dLFsicGF0aCIse2Q6Im02IDEzIDguNSA4In1dLFsicGF0aCIse2Q6Ik02IDEzaDMifV0sWyJwYXRoIix7ZDoiTTkgMTNjNi42NjcgMCA2LjY2Ny0xMCAwLTEwIn1dXX0pO3ZhciBXTSxweGU9bigoKT0+e1dNPVtbInBhdGgiLHtkOiJNNiAxNmM1IDAgNy04IDEyLThhNCA0IDAgMCAxIDAgOGMtNSAwLTctOC0xMi04YTQgNCAwIDEgMCAwIDgifV1dfSk7dmFyIEdNLGh4ZT1uKCgpPT57R009W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik0xMiAxNnYtNCJ9XSxbInBhdGgiLHtkOiJNMTIgOGguMDEifV1dfSk7dmFyIFlNLG14ZT1uKCgpPT57WU09W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTcgN2guMDEifV0sWyJwYXRoIix7ZDoiTTE3IDdoLjAxIn1dLFsicGF0aCIse2Q6Ik03IDE3aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTcgMTdoLjAxIn1dXX0pO3ZhciBaTSxneGU9bigoKT0+e1pNPVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMjAiLHg6IjIiLHk6IjIiLHJ4OiI1IixyeToiNSJ9XSxbInBhdGgiLHtkOiJNMTYgMTEuMzdBNCA0IDAgMSAxIDEyLjYzIDggNCA0IDAgMCAxIDE2IDExLjM3eiJ9XSxbImxpbmUiLHt4MToiMTcuNSIseDI6IjE3LjUxIix5MToiNi41Iix5MjoiNi41In1dXX0pO3ZhciBYTSx4eGU9bigoKT0+e1hNPVtbImxpbmUiLHt4MToiMTkiLHgyOiIxMCIseTE6IjQiLHkyOiI0In1dLFsibGluZSIse3gxOiIxNCIseDI6IjUiLHkxOiIyMCIseTI6IjIwIn1dLFsibGluZSIse3gxOiIxNSIseDI6IjkiLHkxOiI0Iix5MjoiMjAifV1dfSk7dmFyIFFNLGJ4ZT1uKCgpPT57UU09W1sicGF0aCIse2Q6Im0xNiAxNCA0IDQtNCA0In1dLFsicGF0aCIse2Q6Ik0yMCAxMGE4IDggMCAxIDAtOCA4aDgifV1dfSk7dmFyIEtNLHZ4ZT1uKCgpPT57S009W1sicGF0aCIse2Q6Ik00IDEwYTggOCAwIDEgMSA4IDhINCJ9XSxbInBhdGgiLHtkOiJtOCAyMi00LTQgNC00In1dXX0pO3ZhciBKTSx5eGU9bigoKT0+e0pNPVtbInBhdGgiLHtkOiJNMTIgOS41VjIxbTAtMTEuNUw2IDNtNiA2LjVMMTggMyJ9XSxbInBhdGgiLHtkOiJNNiAxNWgxMiJ9XSxbInBhdGgiLHtkOiJNNiAxMWgxMiJ9XV19KTt2YXIgZXosd3hlPW4oKCk9Pntlej1bWyJwYXRoIix7ZDoiTTIxIDE3YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjJhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi0yWiJ9XSxbInBhdGgiLHtkOiJNNiAxNXYtMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTVWOSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjYiLHI6IjMifV1dfSk7dmFyIHR6LE14ZT1uKCgpPT57dHo9W1sicGF0aCIse2Q6Ik01IDN2MTQifV0sWyJwYXRoIix7ZDoiTTEyIDN2OCJ9XSxbInBhdGgiLHtkOiJNMTkgM3YxOCJ9XV19KTt2YXIgYXosenhlPW4oKCk9Pnthej1bWyJwYXRoIix7ZDoiTTE4IDE3YTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDAgMi0yeiJ9XSxbInBhdGgiLHtkOiJNMjAuOTcgMy42MWEuNDUuNDUgMCAwIDAtLjU4LS41OEMxMC4yIDYuNiA2LjYgMTAuMiAzLjAzIDIwLjM5YS40NS40NSAwIDAgMCAuNTguNThDMTMuOCAxNy40IDE3LjQgMTMuOCAyMC45NyAzLjYxIn1dLFsicGF0aCIse2Q6Im02LjcwNyA2LjcwNyAxMC41ODYgMTAuNTg2In1dLFsicGF0aCIse2Q6Ik03IDVhMiAyIDAgMSAwLTIgMmgxYTEgMSAwIDAgMCAxLTF6In1dXX0pO3ZhciByeixreGU9bigoKT0+e3J6PVtbInBhdGgiLHtkOiJNMi41ODYgMTcuNDE0QTIgMiAwIDAgMCAyIDE4LjgyOFYyMWExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaDFhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaC4xNzJhMiAyIDAgMCAwIDEuNDE0LS41ODZsLjgxNC0uODE0YTYuNSA2LjUgMCAxIDAtNC00eiJ9XSxbImNpcmNsZSIse2N4OiIxNi41IixjeToiNy41IixyOiIuNSIsZmlsbDoiY3VycmVudENvbG9yIn1dXX0pO3ZhciBpeixTeGU9bigoKT0+e2l6PVtbInBhdGgiLHtkOiJNMTIuNCAyLjdhMi41IDIuNSAwIDAgMSAzLjQgMGw1LjUgNS41YTIuNSAyLjUgMCAwIDEgMCAzLjRsLTMuNyAzLjdhMi41IDIuNSAwIDAgMS0zLjQgMEw4LjcgOS44YTIuNSAyLjUgMCAwIDEgMC0zLjR6In1dLFsicGF0aCIse2Q6Im0xNCA3IDMgMyJ9XSxbInBhdGgiLHtkOiJtOS40IDEwLjYtNi44MTQgNi44MTRBMiAyIDAgMCAwIDIgMTguODI4VjIxYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoMWExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoLjE3MmEyIDIgMCAwIDAgMS40MTQtLjU4NmwuODE0LS44MTQifV1dfSk7dmFyIG96LEN4ZT1uKCgpPT57b3o9W1sicGF0aCIse2Q6Im0xNS41IDcuNSAyLjMgMi4zYTEgMSAwIDAgMCAxLjQgMGwyLjEtMi4xYTEgMSAwIDAgMCAwLTEuNEwxOSA0In1dLFsicGF0aCIse2Q6Im0yMSAyLTkuNiA5LjYifV0sWyJjaXJjbGUiLHtjeDoiNy41IixjeToiMTUuNSIscjoiNS41In1dXX0pO3ZhciBzeixMeGU9bigoKT0+e3N6PVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTYiLHg6IjIiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik02IDhoNCJ9XSxbInBhdGgiLHtkOiJNMTQgOGguMDEifV0sWyJwYXRoIix7ZDoiTTE4IDhoLjAxIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIn1dLFsicGF0aCIse2Q6Ik02IDEydjQifV0sWyJwYXRoIix7ZDoiTTEwIDEydjQifV0sWyJwYXRoIix7ZDoiTTE0IDEydjQifV0sWyJwYXRoIix7ZDoiTTE4IDEydjQifV1dfSk7dmFyIG56LFR4ZT1uKCgpPT57bno9W1sicGF0aCIse2Q6Ik0gMjAgNCBBMiAyIDAgMCAxIDIyIDYifV0sWyJwYXRoIix7ZDoiTSAyMiA2IEwgMjIgMTYuNDEifV0sWyJwYXRoIix7ZDoiTSA3IDE2IEwgMTYgMTYifV0sWyJwYXRoIix7ZDoiTSA5LjY5IDQgTCAyMCA0In1dLFsicGF0aCIse2Q6Ik0xNCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTggOGguMDEifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMjAgMjBINGEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMiJ9XSxbInBhdGgiLHtkOiJNNiA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxMmguMDEifV1dfSk7dmFyIGx6LF94ZT1uKCgpPT57bHo9W1sicGF0aCIse2Q6Ik0xMCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNNiA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNNyAxNmgxMCJ9XSxbInBhdGgiLHtkOiJNOCAxMmguMDEifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE2Iix4OiIyIix5OiI0IixyeDoiMiJ9XV19KTt2YXIgY3osQXhlPW4oKCk9Pntjej1bWyJwYXRoIix7ZDoiTTEyIDJ2NSJ9XSxbInBhdGgiLHtkOiJNMTQuODI5IDE1Ljk5OGEzIDMgMCAxIDEtNS42NTggMCJ9XSxbInBhdGgiLHtkOiJNMjAuOTIgMTQuNjA2QTEgMSAwIDAgMSAyMCAxNkg0YTEgMSAwIDAgMS0uOTItMS4zOTRsMy03QTEgMSAwIDAgMSA3IDdoMTBhMSAxIDAgMCAxIC45Mi42MDZ6In1dXX0pO3ZhciBkeiwkeGU9bigoKT0+e2R6PVtbInBhdGgiLHtkOiJNMTAuMjkzIDIuMjkzYTEgMSAwIDAgMSAxLjQxNCAwbDIuNSAyLjUgNS45OTQgMS4yMjdhMSAxIDAgMCAxIC41MDYgMS42ODdsLTcgN2ExIDEgMCAwIDEtMS42ODctLjUwNmwtMS4yMjctNS45OTQtMi41LTIuNWExIDEgMCAwIDEgMC0xLjQxNHoifV0sWyJwYXRoIix7ZDoibTE0LjIwNyA0Ljc5My0zLjQxNCAzLjQxNCJ9XSxbInBhdGgiLHtkOiJNMyAyMGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINGExIDEgMCAwIDEtMS0xeiJ9XSxbInBhdGgiLHtkOiJtOS4wODYgNi41LTQuNzkzIDQuNzkzYTEgMSAwIDAgMC0uMTggMS4xN0w3IDE4In1dXX0pO3ZhciBmeixEeGU9bigoKT0+e2Z6PVtbInBhdGgiLHtkOiJNMTIgMTB2MTIifV0sWyJwYXRoIix7ZDoiTTE3LjkyOSA3LjYyOUExIDEgMCAwIDEgMTcgOUg3YTEgMSAwIDAgMS0uOTI4LTEuMzcxbDItNUExIDEgMCAwIDEgOSAyaDZhMSAxIDAgMCAxIC45MjguNjI5eiJ9XSxbInBhdGgiLHtkOiJNOSAyMmg2In1dXX0pO3ZhciB1eixFeGU9bigoKT0+e3V6PVtbInBhdGgiLHtkOiJNMTkuOTI5IDE4LjYyOUExIDEgMCAwIDEgMTkgMjBIOWExIDEgMCAwIDEtLjkyOC0xLjM3MWwyLTVBMSAxIDAgMCAxIDExIDEzaDZhMSAxIDAgMCAxIC45MjguNjI5eiJ9XSxbInBhdGgiLHtkOiJNNiAzYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDVhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTF6In1dLFsicGF0aCIse2Q6Ik04IDZoNGEyIDIgMCAwIDEgMiAydjUifV1dfSk7dmFyIHB6LE54ZT1uKCgpPT57cHo9W1sicGF0aCIse2Q6Ik0xOS45MjkgOS42MjlBMSAxIDAgMCAxIDE5IDExSDlhMSAxIDAgMCAxLS45MjgtMS4zNzFsMi01QTEgMSAwIDAgMSAxMSA0aDZhMSAxIDAgMCAxIC45MjguNjI5eiJ9XSxbInBhdGgiLHtkOiJNNiAxNWEyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAxLTIgMkg1YTEgMSAwIDAgMS0xLTF2LTRhMSAxIDAgMCAxIDEtMXoifV0sWyJwYXRoIix7ZDoiTTggMThoNGEyIDIgMCAwIDAgMi0ydi01In1dXX0pO3ZhciBoeixQeGU9bigoKT0+e2h6PVtbInBhdGgiLHtkOiJNMTIgMTJ2NiJ9XSxbInBhdGgiLHtkOiJNNC4wNzcgMTAuNjE1QTEgMSAwIDAgMCA1IDEyaDE0YTEgMSAwIDAgMCAuOTIzLTEuMzg1bC0zLjA3Ny03LjM4NEEyIDIgMCAwIDAgMTUgMkg5YTIgMiAwIDAgMC0xLjg0NiAxLjIzWiJ9XSxbInBhdGgiLHtkOiJNOCAyMGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFIOWExIDEgMCAwIDEtMS0xeiJ9XV19KTt2YXIgbXosSXhlPW4oKCk9Pnttej1bWyJwYXRoIix7ZDoibTEyIDggNi0zLTYtM3YxMCJ9XSxbInBhdGgiLHtkOiJtOCAxMS45OS01LjUgMy4xNGExIDEgMCAwIDAgMCAxLjc0bDguNSA0Ljg2YTIgMiAwIDAgMCAyIDBsOC41LTQuODZhMSAxIDAgMCAwIDAtMS43NEwxNiAxMiJ9XSxbInBhdGgiLHtkOiJtNi40OSAxMi44NSAxMS4wMiA2LjMifV0sWyJwYXRoIix7ZDoiTTE3LjUxIDEyLjg1IDYuNSAxOS4xNSJ9XV19KTt2YXIgZ3osRnhlPW4oKCk9Pntnej1bWyJwYXRoIix7ZDoiTTEwIDE4di03In1dLFsicGF0aCIse2Q6Ik0xMS4xMiAyLjE5OGEyIDIgMCAwIDEgMS43Ni4wMDZsNy44NjYgMy44NDdjLjQ3Ni4yMzMuMzEuOTQ5LS4yMi45NDlIMy40NzRjLS41MyAwLS42OTUtLjcxNi0uMjItLjk0OXoifV0sWyJwYXRoIix7ZDoiTTE0IDE4di03In1dLFsicGF0aCIse2Q6Ik0xOCAxOHYtNyJ9XSxbInBhdGgiLHtkOiJNMyAyMmgxOCJ9XSxbInBhdGgiLHtkOiJNNiAxOHYtNyJ9XV19KTt2YXIgeHosT3hlPW4oKCk9Pnt4ej1bWyJwYXRoIix7ZDoibTUgOCA2IDYifV0sWyJwYXRoIix7ZDoibTQgMTQgNi02IDItMyJ9XSxbInBhdGgiLHtkOiJNMiA1aDEyIn1dLFsicGF0aCIse2Q6Ik03IDJoMSJ9XSxbInBhdGgiLHtkOiJtMjIgMjItNS0xMC01IDEwIn1dLFsicGF0aCIse2Q6Ik0xNCAxOGg2In1dXX0pO3ZhciBieixCeGU9bigoKT0+e2J6PVtbInBhdGgiLHtkOiJNMiAyMGgyMCJ9XSxbInBhdGgiLHtkOiJtOSAxMCAyIDIgNC00In1dLFsicmVjdCIse3g6IjMiLHk6IjQiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxMiIscng6IjIifV1dfSk7dmFyIEI0LFJ4ZT1uKCgpPT57QjQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxMiIseDoiMyIseToiNCIscng6IjIiLHJ5OiIyIn1dLFsibGluZSIse3gxOiIyIix4MjoiMjIiLHkxOiIyMCIseTI6IjIwIn1dXX0pO3ZhciB2eixIeGU9bigoKT0+e3Z6PVtbInBhdGgiLHtkOiJNMTggNWEyIDIgMCAwIDEgMiAydjguNTI2YTIgMiAwIDAgMCAuMjEyLjg5N2wxLjA2OCAyLjEyN2ExIDEgMCAwIDEtLjkgMS40NUgzLjYyYTEgMSAwIDAgMS0uOS0xLjQ1bDEuMDY4LTIuMTI3QTIgMiAwIDAgMCA0IDE1LjUyNlY3YTIgMiAwIDAgMSAyLTJ6In1dLFsicGF0aCIse2Q6Ik0yMC4wNTQgMTUuOTg3SDMuOTQ2In1dXX0pO3ZhciB5eixxeGU9bigoKT0+e3l6PVtbInBhdGgiLHtkOiJNNyAyMmE1IDUgMCAwIDEtMi00In1dLFsicGF0aCIse2Q6Ik03IDE2LjkzYy45Ni40MyAxLjk2Ljc0IDIuOTkuOTEifV0sWyJwYXRoIix7ZDoiTTMuMzQgMTRBNi44IDYuOCAwIDAgMSAyIDEwYzAtNC40MiA0LjQ4LTggMTAtOHMxMCAzLjU4IDEwIDhhNy4xOSA3LjE5IDAgMCAxLS4zMyAyIn1dLFsicGF0aCIse2Q6Ik01IDE4YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNHoifV0sWyJwYXRoIix7ZDoiTTE0LjMzIDIyaC0uMDlhLjM1LjM1IDAgMCAxLS4yNC0uMzJ2LTEwYS4zNC4zNCAwIDAgMSAuMzMtLjM0Yy4wOCAwIC4xNS4wMy4yMS4wOGw3LjM0IDZhLjMzLjMzIDAgMCAxLS4yMS41OWgtNC40OWwtMi41NyAzLjg1YS4zNS4zNSAwIDAgMS0uMjguMTR6In1dXX0pO3ZhciB3eixWeGU9bigoKT0+e3d6PVtbInBhdGgiLHtkOiJNMy43MDQgMTQuNDY3QTEwIDggMCAwIDEgMiAxMGExMCA4IDAgMCAxIDIwIDAgMTAgOCAwIDAgMS0xMCA4IDEwIDggMCAwIDEtNS4xODEtMS4xNTgifV0sWyJwYXRoIix7ZDoiTTcgMjJhNSA1IDAgMCAxLTItMy45OTQifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjE2IixyOiIyIn1dXX0pO3ZhciBNeixVeGU9bigoKT0+e016PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNMTggMTNhNiA2IDAgMCAxLTYgNSA2IDYgMCAwIDEtNi01aDEyWiJ9XSxbImxpbmUiLHt4MToiOSIseDI6IjkuMDEiLHkxOiI5Iix5MjoiOSJ9XSxbImxpbmUiLHt4MToiMTUiLHgyOiIxNS4wMSIseTE6IjkiLHkyOiI5In1dXX0pO3ZhciB6eixqeGU9bigoKT0+e3p6PVtbInBhdGgiLHtkOiJNMTMgMTMuNzRhMiAyIDAgMCAxLTIgMEwyLjUgOC44N2ExIDEgMCAwIDEgMC0xLjc0TDExIDIuMjZhMiAyIDAgMCAxIDIgMGw4LjUgNC44N2ExIDEgMCAwIDEgMCAxLjc0eiJ9XSxbInBhdGgiLHtkOiJtMjAgMTQuMjg1IDEuNS44NDVhMSAxIDAgMCAxIDAgMS43NEwxMyAyMS43NGEyIDIgMCAwIDEtMiAwbC04LjUtNC44N2ExIDEgMCAwIDEgMC0xLjc0bDEuNS0uODQ1In1dXX0pO3ZhciBSNCxXeGU9bigoKT0+e1I0PVtbInBhdGgiLHtkOiJNMTIuODMgMi4xOGEyIDIgMCAwIDAtMS42NiAwTDIuNiA2LjA4YTEgMSAwIDAgMCAwIDEuODNsOC41OCAzLjkxYTIgMiAwIDAgMCAxLjY2IDBsOC41OC0zLjlhMSAxIDAgMCAwIDAtMS44M3oifV0sWyJwYXRoIix7ZDoiTTIgMTJhMSAxIDAgMCAwIC41OC45MWw4LjYgMy45MWEyIDIgMCAwIDAgMS42NSAwbDguNTgtMy45QTEgMSAwIDAgMCAyMiAxMiJ9XSxbInBhdGgiLHtkOiJNMiAxN2ExIDEgMCAwIDAgLjU4LjkxbDguNiAzLjkxYTIgMiAwIDAgMCAxLjY1IDBsOC41OC0zLjlBMSAxIDAgMCAwIDIyIDE3In1dXX0pO3ZhciBreixHeGU9bigoKT0+e2t6PVtbInBhdGgiLHtkOiJNMTIuODMgMi4xOGEyIDIgMCAwIDAtMS42NiAwTDIuNiA2LjA4YTEgMSAwIDAgMCAwIDEuODNsOC41OCAzLjkxYTIgMiAwIDAgMCAuODMuMTggMiAyIDAgMCAwIC44My0uMThsOC41OC0zLjlhMSAxIDAgMCAwIDAtMS44MzF6In1dLFsicGF0aCIse2Q6Ik0xNiAxN2g2In1dLFsicGF0aCIse2Q6Ik0xOSAxNHY2In1dLFsicGF0aCIse2Q6Ik0yIDEyYTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIC44MjUuMTc4In1dLFsicGF0aCIse2Q6Ik0yIDE3YTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIDEuNjUgMGwyLjExNi0uOTYyIn1dXX0pO3ZhciBTeixZeGU9bigoKT0+e1N6PVtbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiI5Iix4OiIzIix5OiIzIixyeDoiMSJ9XSxbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiI1Iix4OiIxNCIseToiMyIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiOSIseDoiMTQiLHk6IjEyIixyeDoiMSJ9XSxbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiI1Iix4OiIzIix5OiIxNiIscng6IjEifV1dfSk7dmFyIEN6LFp4ZT1uKCgpPT57Q3o9W1sicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjciLHg6IjMiLHk6IjMiLHJ4OiIxIn1dLFsicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjciLHg6IjE0Iix5OiIzIixyeDoiMSJ9XSxbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiI3Iix4OiIxNCIseToiMTQiLHJ4OiIxIn1dLFsicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjciLHg6IjMiLHk6IjE0IixyeDoiMSJ9XV19KTt2YXIgTHosWHhlPW4oKCk9PntMej1bWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiNyIseDoiMyIseToiMyIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiNyIseDoiMyIseToiMTQiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Ik0xNCA0aDcifV0sWyJwYXRoIix7ZDoiTTE0IDloNyJ9XSxbInBhdGgiLHtkOiJNMTQgMTVoNyJ9XSxbInBhdGgiLHtkOiJNMTQgMjBoNyJ9XV19KTt2YXIgVHosUXhlPW4oKCk9PntUej1bWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIxIn1dLFsicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjciLHg6IjE0Iix5OiIzIixyeDoiMSJ9XSxbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiI3Iix4OiIxNCIseToiMTQiLHJ4OiIxIn1dXX0pO3ZhciBfeixLeGU9bigoKT0+e196PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiNyIseDoiMyIseToiMyIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiNyIseDoiMyIseToiMTQiLHJ4OiIxIn1dLFsicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjciLHg6IjE0Iix5OiIxNCIscng6IjEifV1dfSk7dmFyIEF6LEp4ZT1uKCgpPT57QXo9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiI3Iix4OiIzIix5OiIzIixyeDoiMSJ9XSxbInJlY3QiLHt3aWR0aDoiOSIsaGVpZ2h0OiI3Iix4OiIzIix5OiIxNCIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjUiLGhlaWdodDoiNyIseDoiMTYiLHk6IjE0IixyeDoiMSJ9XV19KTt2YXIgJHosZWJlPW4oKCk9Pnskej1bWyJwYXRoIix7ZDoiTTExIDIwQTcgNyAwIDAgMSA5LjggNi4xQzE1LjUgNSAxNyA0LjQ4IDE5IDJjMSAyIDIgNC4xOCAyIDggMCA1LjUtNC43OCAxMC0xMCAxMFoifV0sWyJwYXRoIix7ZDoiTTIgMjFjMC0zIDEuODUtNS4zNiA1LjA4LTZDOS41IDE0LjUyIDEyIDEzIDEzIDEyIn1dXX0pO3ZhciBEeix0YmU9bigoKT0+e0R6PVtbInBhdGgiLHtkOiJNMiAyMmMxLjI1LS45ODcgMi4yNy0xLjk3NSAzLjktMi4yYTUuNTYgNS41NiAwIDAgMSAzLjggMS41IDQgNCAwIDAgMCA2LjE4Ny0yLjM1MyAzLjUgMy41IDAgMCAwIDMuNjktNS4xMTZBMy41IDMuNSAwIDAgMCAyMC45NSA4IDMuNSAzLjUgMCAxIDAgMTYgMy4wNWEzLjUgMy41IDAgMCAwLTUuODMxIDEuMzczIDMuNSAzLjUgMCAwIDAtNS4xMTYgMy42OSA0IDQgMCAwIDAtMi4zNDggNi4xNTVDMy40OTkgMTUuNDIgNC40MDkgMTYuNzEyIDQuMiAxOC4xIDMuOTI2IDE5Ljc0MyAzLjAxNCAyMC43MzIgMiAyMiJ9XSxbInBhdGgiLHtkOiJNMiAyMiAxNyA3In1dXX0pO3ZhciBFeixhYmU9bigoKT0+e0V6PVtbInBhdGgiLHtkOiJNMTYgMTJoM2EyIDIgMCAwIDAgMS45MDItMS4zOGwxLjA1Ni0zLjMzM0ExIDEgMCAwIDAgMjEgNkgzYTEgMSAwIDAgMC0uOTU4IDEuMjg3bDEuMDU2IDMuMzM0QTIgMiAwIDAgMCA1IDEyaDMifV0sWyJwYXRoIix7ZDoiTTE4IDZWM2ExIDEgMCAwIDAtMS0xaC0zIn1dLFsicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjEyIix4OiI4Iix5OiIxMCIscng6IjEifV1dfSk7dmFyIE56LHJiZT1uKCgpPT57Tno9W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNNyAzdjE4In1dLFsicGF0aCIse2Q6Ik0yMC40IDE4LjljLjIuNS0uMSAxLjEtLjYgMS4zbC0xLjkuN2MtLjUuMi0xLjEtLjEtMS4zLS42TDExLjEgNS4xYy0uMi0uNS4xLTEuMS42LTEuM2wxLjktLjdjLjUtLjIgMS4xLjEgMS4zLjZaIn1dXX0pO3ZhciBQeixpYmU9bigoKT0+e1B6PVtbInBhdGgiLHtkOiJtMTYgNiA0IDE0In1dLFsicGF0aCIse2Q6Ik0xMiA2djE0In1dLFsicGF0aCIse2Q6Ik04IDh2MTIifV0sWyJwYXRoIix7ZDoiTTQgNHYxNiJ9XV19KTt2YXIgSXosb2JlPW4oKCk9PntJej1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoibTQuOTMgNC45MyA0LjI0IDQuMjQifV0sWyJwYXRoIix7ZDoibTE0LjgzIDkuMTcgNC4yNC00LjI0In1dLFsicGF0aCIse2Q6Im0xNC44MyAxNC44MyA0LjI0IDQuMjQifV0sWyJwYXRoIix7ZDoibTkuMTcgMTQuODMtNC4yNCA0LjI0In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjQifV1dfSk7dmFyIEZ6LHNiZT1uKCgpPT57Rno9W1sicGF0aCIse2Q6Ik0xNCAxMmgydjgifV0sWyJwYXRoIix7ZDoiTTE0IDIwaDQifV0sWyJwYXRoIix7ZDoiTTYgMTJoNCJ9XSxbInBhdGgiLHtkOiJNNiAyMGg0In1dLFsicGF0aCIse2Q6Ik04IDIwVjhhNCA0IDAgMCAxIDcuNDY0LTIifV1dfSk7dmFyIE96LG5iZT1uKCgpPT57T3o9W1sicGF0aCIse2Q6Ik0xNi44IDExLjJjLjgtLjkgMS4yLTIgMS4yLTMuMmE2IDYgMCAwIDAtOS4zLTUifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNNi4zIDYuM2E0LjY3IDQuNjcgMCAwIDAgMS4yIDUuMmMuNy43IDEuMyAxLjUgMS41IDIuNSJ9XSxbInBhdGgiLHtkOiJNOSAxOGg2In1dLFsicGF0aCIse2Q6Ik0xMCAyMmg0In1dXX0pO3ZhciBCeixsYmU9bigoKT0+e0J6PVtbInBhdGgiLHtkOiJNMTUgMTRjLjItMSAuNy0xLjcgMS41LTIuNSAxLS45IDEuNS0yLjIgMS41LTMuNUE2IDYgMCAwIDAgNiA4YzAgMSAuMiAyLjIgMS41IDMuNS43LjcgMS4zIDEuNSAxLjUgMi41In1dLFsicGF0aCIse2Q6Ik05IDE4aDYifV0sWyJwYXRoIix7ZDoiTTEwIDIyaDQifV1dfSk7dmFyIFJ6LGNiZT1uKCgpPT57Uno9W1sicGF0aCIse2Q6Ik03IDMuNWM1LTIgNyAyLjUgMyA0QzEuNSAxMCAyIDE1IDUgMTZjNSAyIDktMTAgMTQtN3MuNSAxMy41LTQgMTJjLTUtMi41LjUtMTEgNi0yIn1dXX0pO3ZhciBIeixkYmU9bigoKT0+e0h6PVtbInBhdGgiLHtkOiJNOSAxN0g3QTUgNSAwIDAgMSA3IDdoMiJ9XSxbInBhdGgiLHtkOiJNMTUgN2gyYTUgNSAwIDEgMSAwIDEwaC0yIn1dLFsibGluZSIse3gxOiI4Iix4MjoiMTYiLHkxOiIxMiIseTI6IjEyIn1dXX0pO3ZhciBxeixmYmU9bigoKT0+e3F6PVtbInBhdGgiLHtkOiJNOSAxN0g3QTUgNSAwIDAgMSA3IDcifV0sWyJwYXRoIix7ZDoiTTE1IDdoMmE1IDUgMCAwIDEgNCA4In1dLFsibGluZSIse3gxOiI4Iix4MjoiMTIiLHkxOiIxMiIseTI6IjEyIn1dLFsibGluZSIse3gxOiIyIix4MjoiMjIiLHkxOiIyIix5MjoiMjIifV1dfSk7dmFyIFZ6LHViZT1uKCgpPT57Vno9W1sicGF0aCIse2Q6Ik0xMCAxM2E1IDUgMCAwIDAgNy41NC41NGwzLTNhNSA1IDAgMCAwLTcuMDctNy4wN2wtMS43MiAxLjcxIn1dLFsicGF0aCIse2Q6Ik0xNCAxMWE1IDUgMCAwIDAtNy41NC0uNTRsLTMgM2E1IDUgMCAwIDAgNy4wNyA3LjA3bDEuNzEtMS43MSJ9XV19KTt2YXIgVXoscGJlPW4oKCk9PntVej1bWyJwYXRoIix7ZDoiTTE2IDhhNiA2IDAgMCAxIDYgNnY3aC00di03YTIgMiAwIDAgMC0yLTIgMiAyIDAgMCAwLTIgMnY3aC00di03YTYgNiAwIDAgMSA2LTZ6In1dLFsicmVjdCIse3dpZHRoOiI0IixoZWlnaHQ6IjEyIix4OiIyIix5OiI5In1dLFsiY2lyY2xlIix7Y3g6IjQiLGN5OiI0IixyOiIyIn1dXX0pO3ZhciBqeixoYmU9bigoKT0+e2p6PVtbInBhdGgiLHtkOiJNMTYgNUgzIn1dLFsicGF0aCIse2Q6Ik0xNiAxMkgzIn1dLFsicGF0aCIse2Q6Ik0xMSAxOUgzIn1dLFsicGF0aCIse2Q6Im0xNSAxOCAyIDIgNC00In1dXX0pO3ZhciBXeixtYmU9bigoKT0+e1d6PVtbInBhdGgiLHtkOiJNMTMgNWg4In1dLFsicGF0aCIse2Q6Ik0xMyAxMmg4In1dLFsicGF0aCIse2Q6Ik0xMyAxOWg4In1dLFsicGF0aCIse2Q6Im0zIDE3IDIgMiA0LTQifV0sWyJwYXRoIix7ZDoibTMgNyAyIDIgNC00In1dXX0pO3ZhciBHeixnYmU9bigoKT0+e0d6PVtbInBhdGgiLHtkOiJNMyA1aDgifV0sWyJwYXRoIix7ZDoiTTMgMTJoOCJ9XSxbInBhdGgiLHtkOiJNMyAxOWg4In1dLFsicGF0aCIse2Q6Im0xNSA1IDMgMyAzLTMifV0sWyJwYXRoIix7ZDoibTE1IDE5IDMtMyAzIDMifV1dfSk7dmFyIFl6LHhiZT1uKCgpPT57WXo9W1sicGF0aCIse2Q6Ik0zIDVoOCJ9XSxbInBhdGgiLHtkOiJNMyAxMmg4In1dLFsicGF0aCIse2Q6Ik0zIDE5aDgifV0sWyJwYXRoIix7ZDoibTE1IDggMy0zIDMgMyJ9XSxbInBhdGgiLHtkOiJtMTUgMTYgMyAzIDMtMyJ9XV19KTt2YXIgWnosYmJlPW4oKCk9Pntaej1bWyJwYXRoIix7ZDoiTTEwIDVoMTEifV0sWyJwYXRoIix7ZDoiTTEwIDEyaDExIn1dLFsicGF0aCIse2Q6Ik0xMCAxOWgxMSJ9XSxbInBhdGgiLHtkOiJtMyAxMCAzLTMtMy0zIn1dLFsicGF0aCIse2Q6Im0zIDIwIDMtMy0zLTMifV1dfSk7dmFyIFh6LHZiZT1uKCgpPT57WHo9W1sicGF0aCIse2Q6Ik0xNiA1SDMifV0sWyJwYXRoIix7ZDoiTTE2IDEySDMifV0sWyJwYXRoIix7ZDoiTTkgMTlIMyJ9XSxbInBhdGgiLHtkOiJtMTYgMTYtMyAzIDMgMyJ9XSxbInBhdGgiLHtkOiJNMjEgNXYxMmEyIDIgMCAwIDEtMiAyaC02In1dXX0pO3ZhciBReix5YmU9bigoKT0+e1F6PVtbInBhdGgiLHtkOiJNMTIgNUgyIn1dLFsicGF0aCIse2Q6Ik02IDEyaDEyIn1dLFsicGF0aCIse2Q6Ik05IDE5aDYifV0sWyJwYXRoIix7ZDoiTTE2IDVoNiJ9XSxbInBhdGgiLHtkOiJNMTkgOFYyIn1dXX0pO3ZhciBLeix3YmU9bigoKT0+e0t6PVtbInBhdGgiLHtkOiJNMiA1aDIwIn1dLFsicGF0aCIse2Q6Ik02IDEyaDEyIn1dLFsicGF0aCIse2Q6Ik05IDE5aDYifV1dfSk7dmFyIE9pLE1iZT1uKCgpPT57T2k9W1sicGF0aCIse2Q6Ik0yMSA1SDExIn1dLFsicGF0aCIse2Q6Ik0yMSAxMkgxMSJ9XSxbInBhdGgiLHtkOiJNMjEgMTlIMTEifV0sWyJwYXRoIix7ZDoibTcgOC00IDQgNCA0In1dXX0pO3ZhciBCaSx6YmU9bigoKT0+e0JpPVtbInBhdGgiLHtkOiJNMjEgNUgxMSJ9XSxbInBhdGgiLHtkOiJNMjEgMTJIMTEifV0sWyJwYXRoIix7ZDoiTTIxIDE5SDExIn1dLFsicGF0aCIse2Q6Im0zIDggNCA0LTQgNCJ9XV19KTt2YXIgSnosa2JlPW4oKCk9PntKej1bWyJwYXRoIix7ZDoiTTE2IDVIMyJ9XSxbInBhdGgiLHtkOiJNMTEgMTJIMyJ9XSxbInBhdGgiLHtkOiJNMTYgMTlIMyJ9XSxbInBhdGgiLHtkOiJNMjEgMTJoLTYifV1dfSk7dmFyIGVrLFNiZT1uKCgpPT57ZWs9W1sicGF0aCIse2Q6Ik0xNiA1SDMifV0sWyJwYXRoIix7ZDoiTTExIDEySDMifV0sWyJwYXRoIix7ZDoiTTExIDE5SDMifV0sWyJwYXRoIix7ZDoiTTIxIDE2VjUifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxNiIscjoiMyJ9XV19KTt2YXIgdGssQ2JlPW4oKCk9Pnt0az1bWyJwYXRoIix7ZDoiTTExIDVoMTAifV0sWyJwYXRoIix7ZDoiTTExIDEyaDEwIn1dLFsicGF0aCIse2Q6Ik0xMSAxOWgxMCJ9XSxbInBhdGgiLHtkOiJNNCA0aDF2NSJ9XSxbInBhdGgiLHtkOiJNNCA5aDIifV0sWyJwYXRoIix7ZDoiTTYuNSAyMEgzLjRjMC0xIDIuNi0xLjkyNSAyLjYtMy41YTEuNSAxLjUgMCAwIDAtMi42LTEuMDIifV1dfSk7dmFyIGFrLExiZT1uKCgpPT57YWs9W1sicGF0aCIse2Q6Ik0xNiA1SDMifV0sWyJwYXRoIix7ZDoiTTExIDEySDMifV0sWyJwYXRoIix7ZDoiTTE2IDE5SDMifV0sWyJwYXRoIix7ZDoiTTE4IDl2NiJ9XSxbInBhdGgiLHtkOiJNMjEgMTJoLTYifV1dfSk7dmFyIHJrLFRiZT1uKCgpPT57cms9W1sicGF0aCIse2Q6Ik0yMSA1SDMifV0sWyJwYXRoIix7ZDoiTTcgMTJIMyJ9XSxbInBhdGgiLHtkOiJNNyAxOUgzIn1dLFsicGF0aCIse2Q6Ik0xMiAxOGE1IDUgMCAwIDAgOS0zIDQuNSA0LjUgMCAwIDAtNC41LTQuNWMtMS4zMyAwLTIuNTQuNTQtMy40MSAxLjQxTDExIDE0In1dLFsicGF0aCIse2Q6Ik0xMSAxMHY0aDQifV1dfSk7dmFyIGlrLF9iZT1uKCgpPT57aWs9W1sicGF0aCIse2Q6Ik0zIDVoNiJ9XSxbInBhdGgiLHtkOiJNMyAxMmgxMyJ9XSxbInBhdGgiLHtkOiJNMyAxOWgxMyJ9XSxbInBhdGgiLHtkOiJtMTYgOC0zLTMgMy0zIn1dLFsicGF0aCIse2Q6Ik0yMSAxOVY3YTIgMiAwIDAgMC0yLTJoLTYifV1dfSk7dmFyIG9rLEFiZT1uKCgpPT57b2s9W1sicGF0aCIse2Q6Ik0xMyA1aDgifV0sWyJwYXRoIix7ZDoiTTEzIDEyaDgifV0sWyJwYXRoIix7ZDoiTTEzIDE5aDgifV0sWyJwYXRoIix7ZDoibTMgMTcgMiAyIDQtNCJ9XSxbInJlY3QiLHt4OiIzIix5OiI0Iix3aWR0aDoiNiIsaGVpZ2h0OiI2IixyeDoiMSJ9XV19KTt2YXIgc2ssJGJlPW4oKCk9Pntzaz1bWyJwYXRoIix7ZDoiTTggNWgxMyJ9XSxbInBhdGgiLHtkOiJNMTMgMTJoOCJ9XSxbInBhdGgiLHtkOiJNMTMgMTloOCJ9XSxbInBhdGgiLHtkOiJNMyAxMGEyIDIgMCAwIDAgMiAyaDMifV0sWyJwYXRoIix7ZDoiTTMgNXYxMmEyIDIgMCAwIDAgMiAyaDMifV1dfSk7dmFyIG5rLERiZT1uKCgpPT57bms9W1sicGF0aCIse2Q6Ik0yMSA1SDMifV0sWyJwYXRoIix7ZDoiTTEwIDEySDMifV0sWyJwYXRoIix7ZDoiTTEwIDE5SDMifV0sWyJwYXRoIix7ZDoiTTE1IDEyLjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdhMSAxIDAgMCAxLTEuNTE3LS44NnoifV1dfSk7dmFyIGxrLEViZT1uKCgpPT57bGs9W1sicGF0aCIse2Q6Ik0xNiA1SDMifV0sWyJwYXRoIix7ZDoiTTExIDEySDMifV0sWyJwYXRoIix7ZDoiTTE2IDE5SDMifV0sWyJwYXRoIix7ZDoibTE1LjUgOS41IDUgNSJ9XSxbInBhdGgiLHtkOiJtMjAuNSA5LjUtNSA1In1dXX0pO3ZhciBINCxOYmU9bigoKT0+e0g0PVtbInBhdGgiLHtkOiJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYifV1dfSk7dmFyIGNrLFBiZT1uKCgpPT57Y2s9W1sicGF0aCIse2Q6Ik0zIDVoLjAxIn1dLFsicGF0aCIse2Q6Ik0zIDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMyAxOWguMDEifV0sWyJwYXRoIix7ZDoiTTggNWgxMyJ9XSxbInBhdGgiLHtkOiJNOCAxMmgxMyJ9XSxbInBhdGgiLHtkOiJNOCAxOWgxMyJ9XV19KTt2YXIgZGssSWJlPW4oKCk9Pntkaz1bWyJwYXRoIix7ZDoiTTIyIDEyYTEgMSAwIDAgMS0xMCAwIDEgMSAwIDAgMC0xMCAwIn1dLFsicGF0aCIse2Q6Ik03IDIwLjdhMSAxIDAgMSAxIDUtOC43IDEgMSAwIDEgMCA1LTguNiJ9XSxbInBhdGgiLHtkOiJNNyAzLjNhMSAxIDAgMSAxIDUgOC42IDEgMSAwIDEgMCA1IDguNiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV19KTt2YXIgZmssRmJlPW4oKCk9Pntmaz1bWyJwYXRoIix7ZDoiTTEyIDJ2NCJ9XSxbInBhdGgiLHtkOiJtMTYuMiA3LjggMi45LTIuOSJ9XSxbInBhdGgiLHtkOiJNMTggMTJoNCJ9XSxbInBhdGgiLHtkOiJtMTYuMiAxNi4yIDIuOSAyLjkifV0sWyJwYXRoIix7ZDoiTTEyIDE4djQifV0sWyJwYXRoIix7ZDoibTQuOSAxOS4xIDIuOS0yLjkifV0sWyJwYXRoIix7ZDoiTTIgMTJoNCJ9XSxbInBhdGgiLHtkOiJtNC45IDQuOSAyLjkgMi45In1dXX0pO3ZhciB1ayxPYmU9bigoKT0+e3VrPVtbImxpbmUiLHt4MToiMiIseDI6IjUiLHkxOiIxMiIseTI6IjEyIn1dLFsibGluZSIse3gxOiIxOSIseDI6IjIyIix5MToiMTIiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjIiLHkyOiI1In1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiMTkiLHkyOiIyMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI3In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjMifV1dfSk7dmFyIHBrLEJiZT1uKCgpPT57cGs9W1sicGF0aCIse2Q6Ik0xMiAxOXYzIn1dLFsicGF0aCIse2Q6Ik0xMiAydjMifV0sWyJwYXRoIix7ZDoiTTE4Ljg5IDEzLjI0YTcgNyAwIDAgMC04LjEzLTguMTMifV0sWyJwYXRoIix7ZDoiTTE5IDEyaDMifV0sWyJwYXRoIix7ZDoiTTIgMTJoMyJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik03LjA1IDcuMDVhNyA3IDAgMCAwIDkuOSA5LjkifV1dfSk7dmFyIGhrLFJiZT1uKCgpPT57aGs9W1sibGluZSIse3gxOiIyIix4MjoiNSIseTE6IjEyIix5MjoiMTIifV0sWyJsaW5lIix7eDE6IjE5Iix4MjoiMjIiLHkxOiIxMiIseTI6IjEyIn1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiMiIseTI6IjUifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIxOSIseTI6IjIyIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjcifV1dfSk7dmFyIHE0LEhiZT1uKCgpPT57cTQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTYiLHI6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjEyIix4OiIzIix5OiIxMCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTcgMTBWN2E1IDUgMCAwIDEgOS4zMy0yLjUifV1dfSk7dmFyIG1rLHFiZT1uKCgpPT57bWs9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTYiLHI6IjEifV0sWyJyZWN0Iix7eDoiMyIseToiMTAiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxMiIscng6IjIifV0sWyJwYXRoIix7ZDoiTTcgMTBWN2E1IDUgMCAwIDEgMTAgMHYzIn1dXX0pO3ZhciBWNCxWYmU9bigoKT0+e1Y0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTEiLHg6IjMiLHk6IjExIixyeDoiMiIscnk6IjIifV0sWyJwYXRoIix7ZDoiTTcgMTFWN2E1IDUgMCAwIDEgOS45LTEifV1dfSk7dmFyIGdrLFViZT1uKCgpPT57Z2s9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxMSIseDoiMyIseToiMTEiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNNyAxMVY3YTUgNSAwIDAgMSAxMCAwdjQifV1dfSk7dmFyIHhrLGpiZT1uKCgpPT57eGs9W1sicGF0aCIse2Q6Im0xMCAxNyA1LTUtNS01In1dLFsicGF0aCIse2Q6Ik0xNSAxMkgzIn1dLFsicGF0aCIse2Q6Ik0xNSAzaDRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyaC00In1dXX0pO3ZhciBiayxXYmU9bigoKT0+e2JrPVtbInBhdGgiLHtkOiJtMTYgMTcgNS01LTUtNSJ9XSxbInBhdGgiLHtkOiJNMjEgMTJIOSJ9XSxbInBhdGgiLHtkOiJNOSAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDQifV1dfSk7dmFyIHZrLEdiZT1uKCgpPT57dms9W1sicGF0aCIse2Q6Ik0zIDVoMSJ9XSxbInBhdGgiLHtkOiJNMyAxMmgxIn1dLFsicGF0aCIse2Q6Ik0zIDE5aDEifV0sWyJwYXRoIix7ZDoiTTggNWgxIn1dLFsicGF0aCIse2Q6Ik04IDEyaDEifV0sWyJwYXRoIix7ZDoiTTggMTloMSJ9XSxbInBhdGgiLHtkOiJNMTMgNWg4In1dLFsicGF0aCIse2Q6Ik0xMyAxMmg4In1dLFsicGF0aCIse2Q6Ik0xMyAxOWg4In1dXX0pO3ZhciB5ayxZYmU9bigoKT0+e3lrPVtbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiI4In1dLFsicGF0aCIse2Q6Im0yMSAyMS00LjMtNC4zIn1dLFsicGF0aCIse2Q6Ik0xMSAxMWEyIDIgMCAwIDAgNCAwIDQgNCAwIDAgMC04IDAgNiA2IDAgMCAwIDEyIDAifV1dfSk7dmFyIHdrLFpiZT1uKCgpPT57d2s9W1sicGF0aCIse2Q6Ik02IDIwYTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNOCAxOFY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjE0In1dLFsicGF0aCIse2Q6Ik0xMCAyMGg0In1dLFsiY2lyY2xlIix7Y3g6IjE2IixjeToiMjAiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiOCIsY3k6IjIwIixyOiIyIn1dXX0pO3ZhciBNayxYYmU9bigoKT0+e01rPVtbInBhdGgiLHtkOiJtMTIgMTUgNCA0In1dLFsicGF0aCIse2Q6Ik0yLjM1MiAxMC42NDhhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNGwyLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMCAxLjcwNCAwbDYuMDI5LTYuMDI5YTEgMSAwIDEgMSAzIDNsLTYuMDI5IDYuMDI5YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsMi4yOTYgMi4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMS43MDQgMGw2LjM2NS02LjM2N0ExIDEgMCAwIDAgOC43MTYgNC4yODJ6In1dLFsicGF0aCIse2Q6Im01IDggNCA0In1dXX0pO3ZhciB6ayxRYmU9bigoKT0+e3prPVtbInBhdGgiLHtkOiJNMjIgMTNWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDgifV0sWyJwYXRoIix7ZDoibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDcifV0sWyJwYXRoIix7ZDoibTE2IDE5IDIgMiA0LTQifV1dfSk7dmFyIGtrLEtiZT1uKCgpPT57a2s9W1sicGF0aCIse2Q6Ik0yMiAxNVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoOCJ9XSxbInBhdGgiLHtkOiJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyJ9XSxbInBhdGgiLHtkOiJNMTYgMTloNiJ9XV19KTt2YXIgU2ssSmJlPW4oKCk9PntTaz1bWyJwYXRoIix7ZDoiTTIxLjIgOC40Yy41LjM4LjguOTcuOCAxLjZ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWMTBhMiAyIDAgMCAxIC44LTEuNmw4LTZhMiAyIDAgMCAxIDIuNCAwbDggNloifV0sWyJwYXRoIix7ZDoibTIyIDEwLTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiAxMCJ9XV19KTt2YXIgQ2ssZXZlPW4oKCk9PntDaz1bWyJwYXRoIix7ZDoiTTIyIDEzVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg4In1dLFsicGF0aCIse2Q6Im0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3In1dLFsicGF0aCIse2Q6Ik0xOSAxNnY2In1dLFsicGF0aCIse2Q6Ik0xNiAxOWg2In1dXX0pO3ZhciBVNCx0dmU9bigoKT0+e1U0PVtbInBhdGgiLHtkOiJNMjIgMTAuNVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoMTIuNSJ9XSxbInBhdGgiLHtkOiJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyJ9XSxbInBhdGgiLHtkOiJNMTggMTUuMjhjLjItLjQuNS0uOC45LTFhMi4xIDIuMSAwIDAgMSAyLjYuNGMuMy40LjUuOC41IDEuMyAwIDEuMy0yIDItMiAyIn1dLFsicGF0aCIse2Q6Ik0yMCAyMnYuMDEifV1dfSk7dmFyIExrLGF2ZT1uKCgpPT57TGs9W1sicGF0aCIse2Q6Ik0yMiAxMi41VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg3LjUifV0sWyJwYXRoIix7ZDoibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDcifV0sWyJwYXRoIix7ZDoiTTE4IDIxYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNloifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxOCIscjoiMyJ9XSxbInBhdGgiLHtkOiJtMjIgMjItMS41LTEuNSJ9XV19KTt2YXIgVGsscnZlPW4oKCk9PntUaz1bWyJwYXRoIix7ZDoiTTIyIDEwLjVWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyLjUifV0sWyJwYXRoIix7ZDoibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDcifV0sWyJwYXRoIix7ZDoiTTIwIDE0djQifV0sWyJwYXRoIix7ZDoiTTIwIDIydi4wMSJ9XV19KTt2YXIgX2ssaXZlPW4oKCk9Pntfaz1bWyJwYXRoIix7ZDoiTTIyIDEzVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg5In1dLFsicGF0aCIse2Q6Im0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3In1dLFsicGF0aCIse2Q6Im0xNyAxNyA0IDQifV0sWyJwYXRoIix7ZDoibTIxIDE3LTQgNCJ9XV19KTt2YXIgQWssb3ZlPW4oKCk9PntBaz1bWyJwYXRoIix7ZDoibTIyIDctOC45OTEgNS43MjdhMiAyIDAgMCAxLTIuMDA5IDBMMiA3In1dLFsicmVjdCIse3g6IjIiLHk6IjQiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNiIscng6IjIifV1dfSk7dmFyICRrLHN2ZT1uKCgpPT57JGs9W1sicGF0aCIse2Q6Ik0yMiAxN2EyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5LjVDMiA3IDQgNSA2LjUgNUgxOGMyLjIgMCA0IDEuOCA0IDR2OFoifV0sWyJwb2x5bGluZSIse3BvaW50czoiMTUsOSAxOCw5IDE4LDExIn1dLFsicGF0aCIse2Q6Ik02LjUgNUM5IDUgMTEgNyAxMSA5LjVWMTdhMiAyIDAgMCAxLTIgMiJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjciLHkxOiIxMCIseTI6IjEwIn1dXX0pO3ZhciBEayxudmU9bigoKT0+e0RrPVtbInBhdGgiLHtkOiJNMTcgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LThhMiAyIDAgMCAxIDEtMS43MzIifV0sWyJwYXRoIix7ZDoibTIyIDUuNS02LjQxOSA0LjE3OWEyIDIgMCAwIDEtMi4xNjIgMEw3IDUuNSJ9XSxbInJlY3QiLHt4OiI3Iix5OiIzIix3aWR0aDoiMTUiLGhlaWdodDoiMTIiLHJ4OiIyIn1dXX0pO3ZhciBFayxsdmU9bigoKT0+e0VrPVtbInBhdGgiLHtkOiJtMTEgMTktMS4xMDYtLjU1MmEyIDIgMCAwIDAtMS43ODggMGwtMy42NTkgMS44M0ExIDEgMCAwIDEgMyAxOS4zODFWNi42MThhMSAxIDAgMCAxIC41NTMtLjg5NGw0LjU1My0yLjI3N2EyIDIgMCAwIDEgMS43ODggMGw0LjIxMiAyLjEwNmEyIDIgMCAwIDAgMS43ODggMGwzLjY1OS0xLjgzQTEgMSAwIDAgMSAyMSA0LjYxOVYxNCJ9XSxbInBhdGgiLHtkOiJNMTUgNS43NjRWMTQifV0sWyJwYXRoIix7ZDoiTTIxIDE4aC02In1dLFsicGF0aCIse2Q6Ik05IDMuMjM2djE1In1dXX0pO3ZhciBOayxjdmU9bigoKT0+e05rPVtbInBhdGgiLHtkOiJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIn1dLFsicGF0aCIse2Q6Im05IDEwIDIgMiA0LTQifV1dfSk7dmFyIFBrLGR2ZT1uKCgpPT57UGs9W1sicGF0aCIse2Q6Ik0xOS40MyAxMi45MzVjLjM1Ny0uOTY3LjU3LTEuOTU1LjU3LTIuOTM1YTggOCAwIDAgMC0xNiAwYzAgNC45OTMgNS41MzkgMTAuMTkzIDcuMzk5IDExLjc5OWExIDEgMCAwIDAgMS4yMDIgMCAzMi4xOTcgMzIuMTk3IDAgMCAwIC44MTMtLjcyOCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEwIixyOiIzIn1dLFsicGF0aCIse2Q6Im0xNiAxOCAyIDIgNC00In1dXX0pO3ZhciBJayxmdmU9bigoKT0+e0lrPVtbInBhdGgiLHtkOiJNMTUgMjJhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgLjQ0NS0uODMybDMtMmExIDEgMCAwIDEgMS4xMSAwbDMgMkExIDEgMCAwIDEgMjIgMTd2NGExIDEgMCAwIDEtMSAxeiJ9XSxbInBhdGgiLHtkOiJNMTggMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAuNjAxLjIifV0sWyJwYXRoIix7ZDoiTTE4IDIydi0zIn1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiMTAiLHI6IjMifV1dfSk7dmFyIEZrLHV2ZT1uKCgpPT57Rms9W1sicGF0aCIse2Q6Ik0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAifV0sWyJwYXRoIix7ZDoiTTkgMTBoNiJ9XV19KTt2YXIgT2sscHZlPW4oKCk9PntPaz1bWyJwYXRoIix7ZDoiTTE4Ljk3NyAxNEMxOS42IDEyLjcwMSAyMCAxMS4zNDMgMjAgMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDMyIDMyIDAgMCAwIC44MjQtLjczOCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEwIixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xNiAxOGg2In1dXX0pO3ZhciBCayxodmU9bigoKT0+e0JrPVtbInBhdGgiLHtkOiJNMTIuNzUgNy4wOWEzIDMgMCAwIDEgMi4xNiAyLjE2In1dLFsicGF0aCIse2Q6Ik0xNy4wNzIgMTcuMDcyYy0xLjYzNCAyLjE3LTMuNTI3IDMuOTEyLTQuNDcxIDQuNzI3YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxLjQzMi00LjU2OCJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik04LjQ3NSAyLjgxOEE4IDggMCAwIDEgMjAgMTBjMCAxLjE4My0uMzEgMi4zNzctLjgxIDMuNTMzIn1dLFsicGF0aCIse2Q6Ik05LjEzIDkuMTNhMyAzIDAgMCAwIDMuNzQgMy43NCJ9XV19KTt2YXIgajQsbXZlPW4oKCk9PntqND1bWyJwYXRoIix7ZDoiTTE3Ljk3IDkuMzA0QTggOCAwIDAgMCAyIDEwYzAgNC42OSA0Ljg4NyA5LjU2MiA3LjAyMiAxMS40NjgifV0sWyJwYXRoIix7ZDoiTTIxLjM3OCAxNi42MjZhMSAxIDAgMCAwLTMuMDA0LTMuMDA0bC00LjAxIDQuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiJ9XSxbImNpcmNsZSIse2N4OiIxMCIsY3k6IjEwIixyOiIzIn1dXX0pO3ZhciBSayxndmU9bigoKT0+e1JrPVtbInBhdGgiLHtkOiJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIn1dLFsicGF0aCIse2Q6Ik0xMiA3djYifV0sWyJwYXRoIix7ZDoiTTkgMTBoNiJ9XV19KTt2YXIgSGsseHZlPW4oKCk9PntIaz1bWyJwYXRoIix7ZDoiTTE5LjkxNCAxMS4xMDVBNy4yOTggNy4yOTggMCAwIDAgMjAgMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDMyIDMyIDAgMCAwIC44MjQtLjczOCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEwIixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xNiAxOGg2In1dLFsicGF0aCIse2Q6Ik0xOSAxNXY2In1dXX0pO3ZhciBxayxidmU9bigoKT0+e3FrPVtbInBhdGgiLHtkOiJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIn1dLFsicGF0aCIse2Q6Im0xNC41IDcuNS01IDUifV0sWyJwYXRoIix7ZDoibTkuNSA3LjUgNSA1In1dXX0pO3ZhciBWayx2dmU9bigoKT0+e1ZrPVtbInBhdGgiLHtkOiJNMTkuNzUyIDExLjkwMUE3Ljc4IDcuNzggMCAwIDAgMjAgMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDE5IDE5IDAgMCAwIC4wOS0uMDc3In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTAiLHI6IjMifV0sWyJwYXRoIix7ZDoibTIxLjUgMTUuNS01IDUifV0sWyJwYXRoIix7ZDoibTIxLjUgMjAuNS01LTUifV1dfSk7dmFyIFVrLHl2ZT1uKCgpPT57VWs9W1sicGF0aCIse2Q6Ik0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMCIscjoiMyJ9XV19KTt2YXIgamssd3ZlPW4oKCk9Pntqaz1bWyJwYXRoIix7ZDoiTTE4IDhjMCAzLjYxMy0zLjg2OSA3LjQyOS01LjM5MyA4Ljc5NWExIDEgMCAwIDEtMS4yMTQgMEM5Ljg3IDE1LjQyOSA2IDExLjYxMyA2IDhhNiA2IDAgMCAxIDEyIDAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI4IixyOiIyIn1dLFsicGF0aCIse2Q6Ik04LjcxNCAxNGgtMy43MWExIDEgMCAwIDAtLjk0OC42ODNsLTIuMDA0IDZBMSAxIDAgMCAwIDMgMjJoMThhMSAxIDAgMCAwIC45NDgtMS4zMTZsLTItNmExIDEgMCAwIDAtLjk0OS0uNjg0aC0zLjcxMiJ9XV19KTt2YXIgV2ssTXZlPW4oKCk9PntXaz1bWyJwYXRoIix7ZDoibTExIDE5LTEuMTA2LS41NTJhMiAyIDAgMCAwLTEuNzg4IDBsLTMuNjU5IDEuODNBMSAxIDAgMCAxIDMgMTkuMzgxVjYuNjE4YTEgMSAwIDAgMSAuNTUzLS44OTRsNC41NTMtMi4yNzdhMiAyIDAgMCAxIDEuNzg4IDBsNC4yMTIgMi4xMDZhMiAyIDAgMCAwIDEuNzg4IDBsMy42NTktMS44M0ExIDEgMCAwIDEgMjEgNC42MTlWMTIifV0sWyJwYXRoIix7ZDoiTTE1IDUuNzY0VjEyIn1dLFsicGF0aCIse2Q6Ik0xOCAxNXY2In1dLFsicGF0aCIse2Q6Ik0yMSAxOGgtNiJ9XSxbInBhdGgiLHtkOiJNOSAzLjIzNnYxNSJ9XV19KTt2YXIgR2ssenZlPW4oKCk9PntHaz1bWyJwYXRoIix7ZDoiTTE0LjEwNiA1LjU1M2EyIDIgMCAwIDAgMS43ODggMGwzLjY1OS0xLjgzQTEgMSAwIDAgMSAyMSA0LjYxOXYxMi43NjRhMSAxIDAgMCAxLS41NTMuODk0bC00LjU1MyAyLjI3N2EyIDIgMCAwIDEtMS43ODggMGwtNC4yMTItMi4xMDZhMiAyIDAgMCAwLTEuNzg4IDBsLTMuNjU5IDEuODNBMSAxIDAgMCAxIDMgMTkuMzgxVjYuNjE4YTEgMSAwIDAgMSAuNTUzLS44OTRsNC41NTMtMi4yNzdhMiAyIDAgMCAxIDEuNzg4IDB6In1dLFsicGF0aCIse2Q6Ik0xNSA1Ljc2NHYxNSJ9XSxbInBhdGgiLHtkOiJNOSAzLjIzNnYxNSJ9XV19KTt2YXIgWWssa3ZlPW4oKCk9PntZaz1bWyJwYXRoIix7ZDoibTE0IDYgNCA0In1dLFsicGF0aCIse2Q6Ik0xNyAzaDR2NCJ9XSxbInBhdGgiLHtkOiJtMjEgMy03Ljc1IDcuNzUifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjE1IixyOiI2In1dXX0pO3ZhciBaayxTdmU9bigoKT0+e1prPVtbInBhdGgiLHtkOiJNMTYgM2g1djUifV0sWyJwYXRoIix7ZDoibTIxIDMtNi43NSA2Ljc1In1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiMTQiLHI6IjYifV1dfSk7dmFyIFhrLEN2ZT1uKCgpPT57WGs9W1sicGF0aCIse2Q6Ik04IDIyaDgifV0sWyJwYXRoIix7ZDoiTTEyIDExdjExIn1dLFsicGF0aCIse2Q6Im0xOSAzLTcgOC03LThaIn1dXX0pO3ZhciBRayxMdmU9bigoKT0+e1FrPVtbInBhdGgiLHtkOiJNMTUgM2g2djYifV0sWyJwYXRoIix7ZDoibTIxIDMtNyA3In1dLFsicGF0aCIse2Q6Im0zIDIxIDctNyJ9XSxbInBhdGgiLHtkOiJNOSAyMUgzdi02In1dXX0pO3ZhciBLayxUdmU9bigoKT0+e0trPVtbInBhdGgiLHtkOiJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzIn1dLFsicGF0aCIse2Q6Ik0yMSA4VjVhMiAyIDAgMCAwLTItMmgtMyJ9XSxbInBhdGgiLHtkOiJNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMyJ9XSxbInBhdGgiLHtkOiJNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zIn1dXX0pO3ZhciBKayxfdmU9bigoKT0+e0prPVtbInBhdGgiLHtkOiJNMTEuNjM2IDZBMTMgMTMgMCAwIDAgMTkuNCAzLjIgMSAxIDAgMCAxIDIxIDR2MTEuMzQ0In1dLFsicGF0aCIse2Q6Ik0xNC4zNzggMTQuMzU3QTEzIDEzIDAgMCAwIDExIDE0SDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMSJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik02IDE0YTEyIDEyIDAgMCAwIDIuNCA3LjIgMiAyIDAgMCAwIDMuMi0yLjRBOCA4IDAgMCAxIDEwIDE0In1dLFsicGF0aCIse2Q6Ik04IDh2NiJ9XV19KTt2YXIgZVMsQXZlPW4oKCk9PntlUz1bWyJwYXRoIix7ZDoiTTExIDZhMTMgMTMgMCAwIDAgOC40LTIuOEExIDEgMCAwIDEgMjEgNHYxMmExIDEgMCAwIDEtMS42LjhBMTMgMTMgMCAwIDAgMTEgMTRINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMnoifV0sWyJwYXRoIix7ZDoiTTYgMTRhMTIgMTIgMCAwIDAgMi40IDcuMiAyIDIgMCAwIDAgMy4yLTIuNEE4IDggMCAwIDEgMTAgMTQifV0sWyJwYXRoIix7ZDoiTTggNnY4In1dXX0pO3ZhciB0UywkdmU9bigoKT0+e3RTPVtbInBhdGgiLHtkOiJNNy4yMSAxNSAyLjY2IDcuMTRhMiAyIDAgMCAxIC4xMy0yLjJMNC40IDIuOEEyIDIgMCAwIDEgNiAyaDEyYTIgMiAwIDAgMSAxLjYuOGwxLjYgMi4xNGEyIDIgMCAwIDEgLjE0IDIuMkwxNi43OSAxNSJ9XSxbInBhdGgiLHtkOiJNMTEgMTIgNS4xMiAyLjIifV0sWyJwYXRoIix7ZDoibTEzIDEyIDUuODgtOS44In1dLFsicGF0aCIse2Q6Ik04IDdoOCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE3IixyOiI1In1dLFsicGF0aCIse2Q6Ik0xMiAxOHYtMmgtLjUifV1dfSk7dmFyIGFTLER2ZT1uKCgpPT57YVM9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsibGluZSIse3gxOiI4Iix4MjoiMTYiLHkxOiIxNSIseTI6IjE1In1dLFsibGluZSIse3gxOiI5Iix4MjoiOS4wMSIseTE6IjkiLHkyOiI5In1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1LjAxIix5MToiOSIseTI6IjkifV1dfSk7dmFyIHJTLEV2ZT1uKCgpPT57clM9W1sicGF0aCIse2Q6Ik0xMiAxMnYtMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTh2LTIifV0sWyJwYXRoIix7ZDoiTTE2IDEydi0yIn1dLFsicGF0aCIse2Q6Ik0xNiAxOHYtMiJ9XSxbInBhdGgiLHtkOiJNMiAxMWgxLjUifV0sWyJwYXRoIix7ZDoiTTIwIDE4di0yIn1dLFsicGF0aCIse2Q6Ik0yMC41IDExSDIyIn1dLFsicGF0aCIse2Q6Ik00IDE4di0yIn1dLFsicGF0aCIse2Q6Ik04IDEydi0yIn1dLFsicGF0aCIse2Q6Ik04IDE4di0yIn1dLFsicmVjdCIse3g6IjIiLHk6IjYiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxMCIscng6IjIifV1dfSk7dmFyIGlTLE52ZT1uKCgpPT57aVM9W1sicGF0aCIse2Q6Im04IDYgNC00IDQgNCJ9XSxbInBhdGgiLHtkOiJNMTIgMnYxMC4zYTQgNCAwIDAgMS0xLjE3MiAyLjg3Mkw0IDIyIn1dLFsicGF0aCIse2Q6Im0yMCAyMi01LTUifV1dfSk7dmFyIG9TLFB2ZT1uKCgpPT57b1M9W1sicGF0aCIse2Q6Ik00IDVoMTYifV0sWyJwYXRoIix7ZDoiTTQgMTJoMTYifV0sWyJwYXRoIix7ZDoiTTQgMTloMTYifV1dfSk7dmFyIHNTLEl2ZT1uKCgpPT57c1M9W1sicGF0aCIse2Q6Im0xMCA5LTMgMyAzIDMifV0sWyJwYXRoIix7ZDoibTE0IDE1IDMtMy0zLTMifV0sWyJwYXRoIix7ZDoiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5In1dXX0pO3ZhciBuUyxGdmU9bigoKT0+e25TPVtbInBhdGgiLHtkOiJNMTAuMSAyLjE4MmExMCAxMCAwIDAgMSAzLjggMCJ9XSxbInBhdGgiLHtkOiJNMTMuOSAyMS44MThhMTAgMTAgMCAwIDEtMy44IDAifV0sWyJwYXRoIix7ZDoiTTE3LjYwOSAzLjcyYTEwIDEwIDAgMCAxIDIuNjkgMi43In1dLFsicGF0aCIse2Q6Ik0yLjE4MiAxMy45YTEwIDEwIDAgMCAxIDAtMy44In1dLFsicGF0aCIse2Q6Ik0yMC4yOCAxNy42MWExMCAxMCAwIDAgMS0yLjcgMi42OSJ9XSxbInBhdGgiLHtkOiJNMjEuODE4IDEwLjFhMTAgMTAgMCAwIDEgMCAzLjgifV0sWyJwYXRoIix7ZDoiTTMuNzIxIDYuMzkxYTEwIDEwIDAgMCAxIDIuNy0yLjY5In1dLFsicGF0aCIse2Q6Im02LjE2MyAyMS4xMTctMi45MDYuODVhMSAxIDAgMCAxLTEuMjM2LTEuMTY5bC45NjUtMi45OCJ9XV19KTt2YXIgbFMsT3ZlPW4oKCk9PntsUz1bWyJwYXRoIix7ZDoiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5In1dLFsicGF0aCIse2Q6Ik03LjgyOCAxMy4wN0EzIDMgMCAwIDEgMTIgOC43NjRhMyAzIDAgMCAxIDUuMDA0IDIuMjI0IDMgMyAwIDAgMS0uODMyIDIuMDgzbC0zLjQ0NyAzLjYyYTEgMSAwIDAgMS0xLjQ1LS4wMDF6In1dXX0pO3ZhciBjUyxCdmU9bigoKT0+e2NTPVtbInBhdGgiLHtkOiJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkifV0sWyJwYXRoIix7ZDoiTTggMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDEyaC4wMSJ9XV19KTt2YXIgZFMsUnZlPW4oKCk9PntkUz1bWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNNC45MyA0LjkyOWExMCAxMCAwIDAgMC0xLjkzOCAxMS40MTIgMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDAgMCAxMS4zMDItMS45ODkifV0sWyJwYXRoIix7ZDoiTTguMzUgMi42OUExMCAxMCAwIDAgMSAyMS4zIDE1LjY1In1dXX0pO3ZhciBmUyxIdmU9bigoKT0+e2ZTPVtbInBhdGgiLHtkOiJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XSxbInBhdGgiLHtkOiJNMTIgOHY4In1dXX0pO3ZhciBXNCxxdmU9bigoKT0+e1c0PVtbInBhdGgiLHtkOiJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkifV0sWyJwYXRoIix7ZDoiTTkuMDkgOWEzIDMgMCAwIDEgNS44MyAxYzAgMi0zIDMtMyAzIn1dLFsicGF0aCIse2Q6Ik0xMiAxN2guMDEifV1dfSk7dmFyIHVTLFZ2ZT1uKCgpPT57dVM9W1sicGF0aCIse2Q6Ik0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSJ9XSxbInBhdGgiLHtkOiJtMTAgMTUtMy0zIDMtMyJ9XSxbInBhdGgiLHtkOiJNNyAxMmg4YTIgMiAwIDAgMSAyIDJ2MSJ9XV19KTt2YXIgcFMsVXZlPW4oKCk9PntwUz1bWyJwYXRoIix7ZDoiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5In1dLFsicGF0aCIse2Q6Ik0xMiA4djQifV0sWyJwYXRoIix7ZDoiTTEyIDE2aC4wMSJ9XV19KTt2YXIgaFMsanZlPW4oKCk9PntoUz1bWyJwYXRoIix7ZDoiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5In1dLFsicGF0aCIse2Q6Im0xNSA5LTYgNiJ9XSxbInBhdGgiLHtkOiJtOSA5IDYgNiJ9XV19KTt2YXIgbVMsV3ZlPW4oKCk9PnttUz1bWyJwYXRoIix7ZDoiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5In1dXX0pO3ZhciBnUyxHdmU9bigoKT0+e2dTPVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Im0xMCA4LTMgMyAzIDMifV0sWyJwYXRoIix7ZDoibTE0IDE0IDMtMy0zLTMifV1dfSk7dmFyIHhTLFl2ZT1uKCgpPT57eFM9W1sicGF0aCIse2Q6Ik0xMiAxOWguMDEifV0sWyJwYXRoIix7ZDoiTTEyIDNoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxOWguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDNoLjAxIn1dLFsicGF0aCIse2Q6Ik0yIDEzaC4wMSJ9XSxbInBhdGgiLHtkOiJNMiAxN3Y0LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUg4In1dLFsicGF0aCIse2Q6Ik0yIDVhMiAyIDAgMCAxIDItMiJ9XSxbInBhdGgiLHtkOiJNMiA5aC4wMSJ9XSxbInBhdGgiLHtkOiJNMjAgM2EyIDIgMCAwIDEgMiAyIn1dLFsicGF0aCIse2Q6Ik0yMiAxM2guMDEifV0sWyJwYXRoIix7ZDoiTTIyIDE3YTIgMiAwIDAgMS0yIDIifV0sWyJwYXRoIix7ZDoiTTIyIDloLjAxIn1dLFsicGF0aCIse2Q6Ik04IDNoLjAxIn1dXX0pO3ZhciBiUyxadmU9bigoKT0+e2JTPVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Ik0xMCAxNWg0In1dLFsicGF0aCIse2Q6Ik0xMCA5aDQifV0sWyJwYXRoIix7ZDoiTTEyIDd2NCJ9XV19KTt2YXIgdlMsWHZlPW4oKCk9Pnt2Uz1bWyJwYXRoIix7ZDoiTTEyLjcgM0g0YTIgMiAwIDAgMC0yIDJ2MTYuMjg2YS43MS43MSAwIDAgMCAxLjIxMi41MDJsMi4yMDItMi4yMDJBMiAyIDAgMCAxIDYuODI4IDE5SDIwYTIgMiAwIDAgMCAyLTJ2LTQuNyJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjYiLHI6IjMifV1dfSk7dmFyIHlTLFF2ZT1uKCgpPT57eVM9W1sicGF0aCIse2Q6Ik0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoifV0sWyJwYXRoIix7ZDoiTTcuNSA5LjVjMCAuNjg3LjI2NSAxLjM4My42OTcgMS44NDRsMy4wMDkgMy4yNjRhMS4xNCAxLjE0IDAgMCAwIC40MDcuMzE0IDEgMSAwIDAgMCAuNzgzLS4wMDQgMS4xNCAxLjE0IDAgMCAwIC4zOTgtLjMxbDMuMDA4LTMuMjY0QTIuNzcgMi43NyAwIDAgMCAxNi41IDkuNSAyLjUgMi41IDAgMCAwIDEyIDhhMi41IDIuNSAwIDAgMC00LjUgMS41In1dXX0pO3ZhciB3UyxLdmU9bigoKT0+e3dTPVtbInBhdGgiLHtkOiJNMjIgOC41VjVhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTYuMjg2YS43MS43MSAwIDAgMCAxLjIxMi41MDJsMi4yMDItMi4yMDJBMiAyIDAgMCAxIDYuODI4IDE5SDEwIn1dLFsicGF0aCIse2Q6Ik0yMCAxNXYtMmEyIDIgMCAwIDAtNCAwdjIifV0sWyJyZWN0Iix7eDoiMTQiLHk6IjE1Iix3aWR0aDoiOCIsaGVpZ2h0OiI1IixyeDoiMSJ9XV19KTt2YXIgTVMsSnZlPW4oKCk9PntNUz1bWyJwYXRoIix7ZDoiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTIgMTFoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxMWguMDEifV0sWyJwYXRoIix7ZDoiTTggMTFoLjAxIn1dXX0pO3ZhciB6UyxleWU9bigoKT0+e3pTPVtbInBhdGgiLHtkOiJNMTkgMTlINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcuNyAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAxLjE4NC0xLjgyNiJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik04LjY1NiAzSDIwYTIgMiAwIDAgMSAyIDJ2MTEuMzQ0In1dXX0pO3ZhciBrUyx0eWU9bigoKT0+e2tTPVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Ik0xMiA4djYifV0sWyJwYXRoIix7ZDoiTTkgMTFoNiJ9XV19KTt2YXIgU1MsYXllPW4oKCk9PntTUz1bWyJwYXRoIix7ZDoiTTE0IDE0YTIgMiAwIDAgMCAyLTJWOGgtMiJ9XSxbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Ik04IDE0YTIgMiAwIDAgMCAyLTJWOEg4In1dXX0pO3ZhciBDUyxyeWU9bigoKT0+e0NTPVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Im0xMCA4LTMgMyAzIDMifV0sWyJwYXRoIix7ZDoiTTE3IDE0di0xYTIgMiAwIDAgMC0yLTJINyJ9XV19KTt2YXIgTFMsaXllPW4oKCk9PntMUz1bWyJwYXRoIix7ZDoiTTEyIDNINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgyMGEyIDIgMCAwIDAgMi0ydi00In1dLFsicGF0aCIse2Q6Ik0xNiAzaDZ2NiJ9XSxbInBhdGgiLHtkOiJtMTYgOSA2LTYifV1dfSk7dmFyIFRTLG95ZT1uKCgpPT57VFM9W1sicGF0aCIse2Q6Ik0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoifV0sWyJwYXRoIix7ZDoiTTcgMTFoMTAifV0sWyJwYXRoIix7ZDoiTTcgMTVoNiJ9XSxbInBhdGgiLHtkOiJNNyA3aDgifV1dfSk7dmFyIF9TLHN5ZT1uKCgpPT57X1M9W1sicGF0aCIse2Q6Ik0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoifV0sWyJwYXRoIix7ZDoiTTEyIDE1aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgN3Y0In1dXX0pO3ZhciBBUyxueWU9bigoKT0+e0FTPVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Im0xNC41IDguNS01IDUifV0sWyJwYXRoIix7ZDoibTkuNSA4LjUgNSA1In1dXX0pO3ZhciAkUyxseWU9bigoKT0+eyRTPVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dXX0pO3ZhciBEUyxjeWU9bigoKT0+e0RTPVtbInBhdGgiLHtkOiJNMTYgMTBhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAxNC4yODZWNGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Ik0yMCA5YTIgMiAwIDAgMSAyIDJ2MTAuMjg2YS43MS43MSAwIDAgMS0xLjIxMi41MDJsLTIuMjAyLTIuMjAyQTIgMiAwIDAgMCAxNy4xNzIgMTlIMTBhMiAyIDAgMCAxLTItMnYtMSJ9XV19KTt2YXIgRVMsZHllPW4oKCk9PntFUz1bWyJwYXRoIix7ZDoiTTEyIDE5djMifV0sWyJwYXRoIix7ZDoiTTE1IDkuMzRWNWEzIDMgMCAwIDAtNS42OC0xLjMzIn1dLFsicGF0aCIse2Q6Ik0xNi45NSAxNi45NUE3IDcgMCAwIDEgNSAxMnYtMiJ9XSxbInBhdGgiLHtkOiJNMTguODkgMTMuMjNBNyA3IDAgMCAwIDE5IDEydi0yIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTkgOXYzYTMgMyAwIDAgMCA1LjEyIDIuMTIifV1dfSk7dmFyIEc0LGZ5ZT1uKCgpPT57RzQ9W1sicGF0aCIse2Q6Im0xMSA3LjYwMS01Ljk5NCA4LjE5YTEgMSAwIDAgMCAuMSAxLjI5OGwuODE3LjgxOGExIDEgMCAwIDAgMS4zMTQuMDg3TDE1LjA5IDEyIn1dLFsicGF0aCIse2Q6Ik0xNi41IDIxLjE3NEMxNS41IDIwLjUgMTQuMzcyIDIwIDEzIDIwYy0yLjA1OCAwLTMuOTI4IDIuMzU2LTYgMi0yLjA3Mi0uMzU2LTIuNzc1LTMuMzY5LTEuNS00LjUifV0sWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiI3IixyOiI1In1dXX0pO3ZhciBOUyx1eWU9bigoKT0+e05TPVtbInBhdGgiLHtkOiJNMTIgMTl2MyJ9XSxbInBhdGgiLHtkOiJNMTkgMTB2MmE3IDcgMCAwIDEtMTQgMHYtMiJ9XSxbInJlY3QiLHt4OiI5Iix5OiIyIix3aWR0aDoiNiIsaGVpZ2h0OiIxMyIscng6IjMifV1dfSk7dmFyIFBTLHB5ZT1uKCgpPT57UFM9W1sicGF0aCIse2Q6Ik0xMCAxMmg0In1dLFsicGF0aCIse2Q6Ik0xMCAxN2g0In1dLFsicGF0aCIse2Q6Ik0xMCA3aDQifV0sWyJwYXRoIix7ZDoiTTE4IDEyaDIifV0sWyJwYXRoIix7ZDoiTTE4IDE4aDIifV0sWyJwYXRoIix7ZDoiTTE4IDZoMiJ9XSxbInBhdGgiLHtkOiJNNCAxMmgyIn1dLFsicGF0aCIse2Q6Ik00IDE4aDIifV0sWyJwYXRoIix7ZDoiTTQgNmgyIn1dLFsicmVjdCIse3g6IjYiLHk6IjIiLHdpZHRoOiIxMiIsaGVpZ2h0OiIyMCIscng6IjIifV1dfSk7dmFyIElTLGh5ZT1uKCgpPT57SVM9W1sicGF0aCIse2Q6Ik02IDE4aDgifV0sWyJwYXRoIix7ZDoiTTMgMjJoMTgifV0sWyJwYXRoIix7ZDoiTTE0IDIyYTcgNyAwIDEgMCAwLTE0aC0xIn1dLFsicGF0aCIse2Q6Ik05IDE0aDIifV0sWyJwYXRoIix7ZDoiTTkgMTJhMiAyIDAgMCAxLTItMlY2aDZ2NGEyIDIgMCAwIDEtMiAyWiJ9XSxbInBhdGgiLHtkOiJNMTIgNlYzYTEgMSAwIDAgMC0xLTFIOWExIDEgMCAwIDAtMSAxdjMifV1dfSk7dmFyIEZTLG15ZT1uKCgpPT57RlM9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNSIseDoiMiIseToiNCIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNyIseDoiNiIseToiOCIscng6IjEifV0sWyJwYXRoIix7ZDoiTTE4IDh2NyJ9XSxbInBhdGgiLHtkOiJNNiAxOXYyIn1dLFsicGF0aCIse2Q6Ik0xOCAxOXYyIn1dXX0pO3ZhciBPUyxneWU9bigoKT0+e09TPVtbInBhdGgiLHtkOiJNMTIgMTN2OCJ9XSxbInBhdGgiLHtkOiJNMTIgM3YzIn1dLFsicGF0aCIse2Q6Ik00IDZhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFoMTNhMiAyIDAgMCAwIDEuMTUyLS4zNjVsMy40MjQtMi4zMTdhMSAxIDAgMCAwIDAtMS42MzVsLTMuNDI0LTIuMzE4QTIgMiAwIDAgMCAxNyA2eiJ9XV19KTt2YXIgQlMseHllPW4oKCk9PntCUz1bWyJwYXRoIix7ZDoiTTggMmg4In1dLFsicGF0aCIse2Q6Ik05IDJ2MS4zNDNNMTUgMnYyLjc4OWE0IDQgMCAwIDAgLjY3MiAyLjIxOWwuNjU2Ljk4NGE0IDQgMCAwIDEgLjY3MiAyLjIydjEuMTMxTTcuOCA3LjhsLS4xMjguMTkyQTQgNCAwIDAgMCA3IDEwLjIxMlYyMGEyIDIgMCAwIDAgMiAyaDZhMiAyIDAgMCAwIDItMnYtMyJ9XSxbInBhdGgiLHtkOiJNNyAxNWE2LjQ3IDYuNDcgMCAwIDEgNSAwIDYuNDcyIDYuNDcyIDAgMCAwIDMuNDM1LjQzNSJ9XSxbImxpbmUiLHt4MToiMiIseDI6IjIyIix5MToiMiIseTI6IjIyIn1dXX0pO3ZhciBSUyxieWU9bigoKT0+e1JTPVtbInBhdGgiLHtkOiJNOCAyaDgifV0sWyJwYXRoIix7ZDoiTTkgMnYyLjc4OWE0IDQgMCAwIDEtLjY3MiAyLjIxOWwtLjY1Ni45ODRBNCA0IDAgMCAwIDcgMTAuMjEyVjIwYTIgMiAwIDAgMCAyIDJoNmEyIDIgMCAwIDAgMi0ydi05Ljc4OWE0IDQgMCAwIDAtLjY3Mi0yLjIxOWwtLjY1Ni0uOTg0QTQgNCAwIDAgMSAxNSA0Ljc4OFYyIn1dLFsicGF0aCIse2Q6Ik03IDE1YTYuNDcyIDYuNDcyIDAgMCAxIDUgMCA2LjQ3IDYuNDcgMCAwIDAgNSAwIn1dXX0pO3ZhciBIUyx2eWU9bigoKT0+e0hTPVtbInBhdGgiLHtkOiJtMTQgMTAgNy03In1dLFsicGF0aCIse2Q6Ik0yMCAxMGgtNlY0In1dLFsicGF0aCIse2Q6Im0zIDIxIDctNyJ9XSxbInBhdGgiLHtkOiJNNCAxNGg2djYifV1dfSk7dmFyIHFTLHl5ZT1uKCgpPT57cVM9W1sicGF0aCIse2Q6Ik04IDN2M2EyIDIgMCAwIDEtMiAySDMifV0sWyJwYXRoIix7ZDoiTTIxIDhoLTNhMiAyIDAgMCAxLTItMlYzIn1dLFsicGF0aCIse2Q6Ik0zIDE2aDNhMiAyIDAgMCAxIDIgMnYzIn1dLFsicGF0aCIse2Q6Ik0xNiAyMXYtM2EyIDIgMCAwIDEgMi0yaDMifV1dfSk7dmFyIFZTLHd5ZT1uKCgpPT57VlM9W1sicGF0aCIse2Q6Ik01IDEyaDE0In1dXX0pO3ZhciBVUyxNeWU9bigoKT0+e1VTPVtbInBhdGgiLHtkOiJtOSAxMCAyIDIgNC00In1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNCIseDoiMiIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTEyIDE3djQifV0sWyJwYXRoIix7ZDoiTTggMjFoOCJ9XV19KTt2YXIgalMsenllPW4oKCk9PntqUz1bWyJwYXRoIix7ZDoiTTExIDEzYTMgMyAwIDEgMSAyLjgzLTRIMTRhMiAyIDAgMCAxIDAgNHoifV0sWyJwYXRoIix7ZDoiTTEyIDE3djQifV0sWyJwYXRoIix7ZDoiTTggMjFoOCJ9XSxbInJlY3QiLHt4OiIyIix5OiIzIix3aWR0aDoiMjAiLGhlaWdodDoiMTQiLHJ4OiIyIn1dXX0pO3ZhciBXUyxreWU9bigoKT0+e1dTPVtbInBhdGgiLHtkOiJNMTIgMTd2NCJ9XSxbInBhdGgiLHtkOiJtMTQuMzA1IDcuNTMuOTIzLS4zODIifV0sWyJwYXRoIix7ZDoibTE1LjIyOCA0Ljg1Mi0uOTIzLS4zODMifV0sWyJwYXRoIix7ZDoibTE2Ljg1MiAzLjIyOC0uMzgzLS45MjQifV0sWyJwYXRoIix7ZDoibTE2Ljg1MiA4Ljc3Mi0uMzgzLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTkuMTQ4IDMuMjI4LjM4My0uOTI0In1dLFsicGF0aCIse2Q6Im0xOS41MyA5LjY5Ni0uMzgyLS45MjQifV0sWyJwYXRoIix7ZDoibTIwLjc3MiA0Ljg1Mi45MjQtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMjAuNzcyIDcuMTQ4LjkyNC4zODMifV0sWyJwYXRoIix7ZDoiTTIyIDEzdjJhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDcifV0sWyJwYXRoIix7ZDoiTTggMjFoOCJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjYiLHI6IjMifV1dfSk7dmFyIEdTLFN5ZT1uKCgpPT57R1M9W1sicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Ik0yMiAxMi4zMDdWMTVhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDguNjkzIn1dLFsicGF0aCIse2Q6Ik04IDIxaDgifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiI2IixyOiIzIn1dXX0pO3ZhciBZUyxDeWU9bigoKT0+e1lTPVtbInBhdGgiLHtkOiJNMTIgMTNWNyJ9XSxbInBhdGgiLHtkOiJtMTUgMTAtMyAzLTMtMyJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTQiLHg6IjIiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Ik04IDIxaDgifV1dfSk7dmFyIFpTLEx5ZT1uKCgpPT57WlM9W1sicGF0aCIse2Q6Ik0xNyAxN0g0YTIgMiAwIDAgMS0yLTJWNWMwLTEuNSAxLTIgMS0yIn1dLFsicGF0aCIse2Q6Ik0yMiAxNVY1YTIgMiAwIDAgMC0yLTJIOSJ9XSxbInBhdGgiLHtkOiJNOCAyMWg4In1dLFsicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV1dfSk7dmFyIFhTLFR5ZT1uKCgpPT57WFM9W1sicGF0aCIse2Q6Ik0xMCAxM1Y3In1dLFsicGF0aCIse2Q6Ik0xNCAxM1Y3In1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNCIseDoiMiIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTEyIDE3djQifV0sWyJwYXRoIix7ZDoiTTggMjFoOCJ9XV19KTt2YXIgUVMsX3llPW4oKCk9PntRUz1bWyJwYXRoIix7ZDoiTTE1LjAzMyA5LjQ0YS42NDcuNjQ3IDAgMCAxIDAgMS4xMmwtNC4wNjUgMi4zNTJhLjY0NS42NDUgMCAwIDEtLjk2OC0uNTZWNy42NDhhLjY0NS42NDUgMCAwIDEgLjk2Ny0uNTZ6In1dLFsicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Ik04IDIxaDgifV0sWyJyZWN0Iix7eDoiMiIseToiMyIsd2lkdGg6IjIwIixoZWlnaHQ6IjE0IixyeDoiMiJ9XV19KTt2YXIgS1MsQXllPW4oKCk9PntLUz1bWyJwYXRoIix7ZDoiTTE4IDhWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnY3YTIgMiAwIDAgMCAyIDJoOCJ9XSxbInBhdGgiLHtkOiJNMTAgMTl2LTMuOTYgMy4xNSJ9XSxbInBhdGgiLHtkOiJNNyAxOWg1In1dLFsicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjEwIix4OiIxNiIseToiMTIiLHJ4OiIyIn1dXX0pO3ZhciBKUywkeWU9bigoKT0+e0pTPVtbInBhdGgiLHtkOiJNNS41IDIwSDgifV0sWyJwYXRoIix7ZDoiTTE3IDloLjAxIn1dLFsicmVjdCIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxNiIseDoiMTIiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik04IDZINGEyIDIgMCAwIDAtMiAydjZhMiAyIDAgMCAwIDIgMmg0In1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTUiLHI6IjEifV1dfSk7dmFyIGVDLER5ZT1uKCgpPT57ZUM9W1sicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Ik04IDIxaDgifV0sWyJyZWN0Iix7eDoiMiIseToiMyIsd2lkdGg6IjIwIixoZWlnaHQ6IjE0IixyeDoiMiJ9XSxbInJlY3QiLHt4OiI5Iix5OiI3Iix3aWR0aDoiNiIsaGVpZ2h0OiI2IixyeDoiMSJ9XV19KTt2YXIgdEMsRXllPW4oKCk9Pnt0Qz1bWyJwYXRoIix7ZDoibTkgMTAgMy0zIDMgMyJ9XSxbInBhdGgiLHtkOiJNMTIgMTNWNyJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTQiLHg6IjIiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Ik04IDIxaDgifV1dfSk7dmFyIGFDLE55ZT1uKCgpPT57YUM9W1sicGF0aCIse2Q6Im0xNC41IDEyLjUtNS01In1dLFsicGF0aCIse2Q6Im05LjUgMTIuNSA1LTUifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE0Iix4OiIyIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTd2NCJ9XSxbInBhdGgiLHtkOiJNOCAyMWg4In1dXX0pO3ZhciByQyxQeWU9bigoKT0+e3JDPVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTQiLHg6IjIiLHk6IjMiLHJ4OiIyIn1dLFsibGluZSIse3gxOiI4Iix4MjoiMTYiLHkxOiIyMSIseTI6IjIxIn1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiMTciLHkyOiIyMSJ9XV19KTt2YXIgaUMsSXllPW4oKCk9PntpQz1bWyJwYXRoIix7ZDoiTTE4IDVoNCJ9XSxbInBhdGgiLHtkOiJNMjAgM3Y0In1dLFsicGF0aCIse2Q6Ik0yMC45ODUgMTIuNDg2YTkgOSAwIDEgMS05LjQ3My05LjQ3MmMuNDA1LS4wMjIuNjE3LjQ2LjQwMi44MDNhNiA2IDAgMCAwIDguMjY4IDguMjY4Yy4zNDQtLjIxNS44MjUtLjAwNC44MDMuNDAxIn1dXX0pO3ZhciBvQyxGeWU9bigoKT0+e29DPVtbInBhdGgiLHtkOiJtMTggMTQtMS0zIn1dLFsicGF0aCIse2Q6Im0zIDkgNiAyYTIgMiAwIDAgMSAyLTJoMmEyIDIgMCAwIDEgMS45OSAxLjgxIn1dLFsicGF0aCIse2Q6Ik04IDE3aDNhMSAxIDAgMCAwIDEtMSA2IDYgMCAwIDEgNi02IDEgMSAwIDAgMCAxLTF2LS43NUE1IDUgMCAwIDAgMTcgNSJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjE3IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiIxNyIscjoiMyJ9XV19KTt2YXIgc0MsT3llPW4oKCk9PntzQz1bWyJwYXRoIix7ZDoiTTIwLjk4NSAxMi40ODZhOSA5IDAgMSAxLTkuNDczLTkuNDcyYy40MDUtLjAyMi42MTcuNDYuNDAyLjgwM2E2IDYgMCAwIDAgOC4yNjggOC4yNjhjLjM0NC0uMjE1LjgyNS0uMDA0LjgwMy40MDEifV1dfSk7dmFyIG5DLEJ5ZT1uKCgpPT57bkM9W1sicGF0aCIse2Q6Im04IDMgNCA4IDUtNSA1IDE1SDJMOCAzeiJ9XSxbInBhdGgiLHtkOiJNNC4xNCAxNS4wOGMyLjYyLTEuNTcgNS4yNC0xLjQzIDcuODYuNDIgMi43NCAxLjk0IDUuNDkgMiA4LjIzLjE5In1dXX0pO3ZhciBsQyxSeWU9bigoKT0+e2xDPVtbInBhdGgiLHtkOiJtOCAzIDQgOCA1LTUgNSAxNUgyTDggM3oifV1dfSk7dmFyIGNDLEh5ZT1uKCgpPT57Y0M9W1sicGF0aCIse2Q6Ik0xMiA2di4zNDMifV0sWyJwYXRoIix7ZDoiTTE4LjIxOCAxOC4yMThBNyA3IDAgMCAxIDUgMTVWOWE3IDcgMCAwIDEgLjc4Mi0zLjIxOCJ9XSxbInBhdGgiLHtkOiJNMTkgMTMuMzQzVjlBNyA3IDAgMCAwIDguNTYgMi45MDIifV0sWyJwYXRoIix7ZDoiTTIyIDIyIDIgMiJ9XV19KTt2YXIgZEMscXllPW4oKCk9PntkQz1bWyJwYXRoIix7ZDoibTE1LjU1IDguNDUgNS4xMzggMi4wODdhLjUuNSAwIDAgMS0uMDYzLjk0N2wtNi4xMjQgMS41OGEyIDIgMCAwIDAtMS40MzggMS40MzVsLTEuNTc5IDYuMTI2YS41LjUgMCAwIDEtLjk0Ny4wNjNMOC40NSAxNS41NTEifV0sWyJwYXRoIix7ZDoiTTIyIDIgMiAyMiJ9XSxbInBhdGgiLHtkOiJtNi44MTYgMTEuNTI4LTIuNzc5LTYuODRhLjQ5NS40OTUgMCAwIDEgLjY1MS0uNjUxbDYuODQgMi43NzkifV1dfSk7dmFyIGZDLFZ5ZT1uKCgpPT57ZkM9W1sicGF0aCIse2Q6Ik00LjAzNyA0LjY4OGEuNDk1LjQ5NSAwIDAgMSAuNjUxLS42NTFsMTYgNi41YS41LjUgMCAwIDEtLjA2My45NDdsLTYuMTI0IDEuNThhMiAyIDAgMCAwLTEuNDM4IDEuNDM1bC0xLjU3OSA2LjEyNmEuNS41IDAgMCAxLS45NDcuMDYzeiJ9XV19KTt2YXIgdUMsVXllPW4oKCk9Pnt1Qz1bWyJwYXRoIix7ZDoiTTIuMDM0IDIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQ0TDguMjA0IDcuNTQ1YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY2IDMuNDQzYS41LjUgMCAwIDEtLjk0NC4wMzN6In1dLFsiY2lyY2xlIix7Y3g6IjE2IixjeToiMTYiLHI6IjYifV0sWyJwYXRoIix7ZDoibTExLjggMTEuOCA4LjQgOC40In1dXX0pO3ZhciBwQyxqeWU9bigoKT0+e3BDPVtbInBhdGgiLHtkOiJNMTQgNC4xIDEyIDYifV0sWyJwYXRoIix7ZDoibTUuMSA4LTIuOS0uOCJ9XSxbInBhdGgiLHtkOiJtNiAxMi0xLjkgMiJ9XSxbInBhdGgiLHtkOiJNNy4yIDIuMiA4IDUuMSJ9XSxbInBhdGgiLHtkOiJNOS4wMzcgOS42OWEuNDk4LjQ5OCAwIDAgMSAuNjUzLS42NTNsMTEgNC41YS41LjUgMCAwIDEtLjA3NC45NDlsLTQuMzQ5IDEuMDQxYTEgMSAwIDAgMC0uNzQuNzM5bC0xLjA0IDQuMzVhLjUuNSAwIDAgMS0uOTUuMDc0eiJ9XV19KTt2YXIgaEMsV3llPW4oKCk9PntoQz1bWyJwYXRoIix7ZDoiTTEyLjU4NiAxMi41ODYgMTkgMTkifV0sWyJwYXRoIix7ZDoiTTMuNjg4IDMuMDM3YS40OTcuNDk3IDAgMCAwLS42NTEuNjUxbDYuNSAxNS45OTlhLjUwMS41MDEgMCAwIDAgLjk0Ny0uMDYybDEuNTY5LTYuMDgzYTIgMiAwIDAgMSAxLjQ0OC0xLjQ3OWw2LjEyNC0xLjU3OWEuNS41IDAgMCAwIC4wNjMtLjk0N3oifV1dfSk7dmFyIG1DLEd5ZT1uKCgpPT57bUM9W1sicmVjdCIse3g6IjUiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIyMCIscng6IjcifV0sWyJwYXRoIix7ZDoiTTEyIDZ2NCJ9XV19KTt2YXIgWTQsWXllPW4oKCk9PntZND1bWyJwYXRoIix7ZDoiTTUgM3YxNmgxNiJ9XSxbInBhdGgiLHtkOiJtNSAxOSA2LTYifV0sWyJwYXRoIix7ZDoibTIgNiAzLTMgMyAzIn1dLFsicGF0aCIse2Q6Im0xOCAxNiAzIDMtMyAzIn1dXX0pO3ZhciBnQyxaeWU9bigoKT0+e2dDPVtbInBhdGgiLHtkOiJNMTkgMTN2NmgtNiJ9XSxbInBhdGgiLHtkOiJNNSAxMVY1aDYifV0sWyJwYXRoIix7ZDoibTUgNSAxNCAxNCJ9XV19KTt2YXIgeEMsWHllPW4oKCk9Pnt4Qz1bWyJwYXRoIix7ZDoiTTExIDE5SDV2LTYifV0sWyJwYXRoIix7ZDoiTTEzIDVoNnY2In1dLFsicGF0aCIse2Q6Ik0xOSA1IDUgMTkifV1dfSk7dmFyIGJDLFF5ZT1uKCgpPT57YkM9W1sicGF0aCIse2Q6Ik0xMSAxOUg1VjEzIn1dLFsicGF0aCIse2Q6Ik0xOSA1TDUgMTkifV1dfSk7dmFyIHZDLEt5ZT1uKCgpPT57dkM9W1sicGF0aCIse2Q6Ik0xOSAxM1YxOUgxMyJ9XSxbInBhdGgiLHtkOiJNNSA1TDE5IDE5In1dXX0pO3ZhciB5QyxKeWU9bigoKT0+e3lDPVtbInBhdGgiLHtkOiJNOCAxOEwxMiAyMkwxNiAxOCJ9XSxbInBhdGgiLHtkOiJNMTIgMlYyMiJ9XV19KTt2YXIgd0MsZXdlPW4oKCk9Pnt3Qz1bWyJwYXRoIix7ZDoiTTYgOEwyIDEyTDYgMTYifV0sWyJwYXRoIix7ZDoiTTIgMTJIMjIifV1dfSk7dmFyIE1DLHR3ZT1uKCgpPT57TUM9W1sicGF0aCIse2Q6Im0xOCA4IDQgNC00IDQifV0sWyJwYXRoIix7ZDoiTTIgMTJoMjAifV0sWyJwYXRoIix7ZDoibTYgOC00IDQgNCA0In1dXX0pO3ZhciB6Qyxhd2U9bigoKT0+e3pDPVtbInBhdGgiLHtkOiJNMTggOEwyMiAxMkwxOCAxNiJ9XSxbInBhdGgiLHtkOiJNMiAxMkgyMiJ9XV19KTt2YXIga0MscndlPW4oKCk9PntrQz1bWyJwYXRoIix7ZDoiTTUgMTFWNUgxMSJ9XSxbInBhdGgiLHtkOiJNNSA1TDE5IDE5In1dXX0pO3ZhciBTQyxpd2U9bigoKT0+e1NDPVtbInBhdGgiLHtkOiJNMTMgNUgxOVYxMSJ9XSxbInBhdGgiLHtkOiJNMTkgNUw1IDE5In1dXX0pO3ZhciBDQyxvd2U9bigoKT0+e0NDPVtbInBhdGgiLHtkOiJNOCA2TDEyIDJMMTYgNiJ9XSxbInBhdGgiLHtkOiJNMTIgMlYyMiJ9XV19KTt2YXIgTEMsc3dlPW4oKCk9PntMQz1bWyJwYXRoIix7ZDoiTTEyIDJ2MjAifV0sWyJwYXRoIix7ZDoibTggMTggNCA0IDQtNCJ9XSxbInBhdGgiLHtkOiJtOCA2IDQtNCA0IDQifV1dfSk7dmFyIFRDLG53ZT1uKCgpPT57VEM9W1sicGF0aCIse2Q6Ik0xMiAydjIwIn1dLFsicGF0aCIse2Q6Im0xNSAxOS0zIDMtMy0zIn1dLFsicGF0aCIse2Q6Im0xOSA5IDMgMy0zIDMifV0sWyJwYXRoIix7ZDoiTTIgMTJoMjAifV0sWyJwYXRoIix7ZDoibTUgOS0zIDMgMyAzIn1dLFsicGF0aCIse2Q6Im05IDUgMy0zIDMgMyJ9XV19KTt2YXIgX0MsbHdlPW4oKCk9PntfQz1bWyJjaXJjbGUiLHtjeDoiOCIsY3k6IjE4IixyOiI0In1dLFsicGF0aCIse2Q6Ik0xMiAxOFYybDcgNCJ9XV19KTt2YXIgQUMsY3dlPW4oKCk9PntBQz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxOCIscjoiNCJ9XSxbInBhdGgiLHtkOiJNMTYgMThWMiJ9XV19KTt2YXIgJEMsZHdlPW4oKCk9PnskQz1bWyJwYXRoIix7ZDoiTTkgMThWNWwxMi0ydjEzIn1dLFsicGF0aCIse2Q6Im05IDkgMTItMiJ9XSxbImNpcmNsZSIse2N4OiI2IixjeToiMTgiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxNiIscjoiMyJ9XV19KTt2YXIgREMsZndlPW4oKCk9PntEQz1bWyJwYXRoIix7ZDoiTTkgMThWNWwxMi0ydjEzIn1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiIxOCIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE2IixyOiIzIn1dXX0pO3ZhciBFQyx1d2U9bigoKT0+e0VDPVtbInBhdGgiLHtkOiJNOS4zMSA5LjMxIDUgMjFsNy00IDcgNC0xLjE3LTMuMTcifV0sWyJwYXRoIix7ZDoiTTE0LjUzIDguODggMTIgMmwtMS4xNyAzLjE3In1dLFsibGluZSIse3gxOiIyIix4MjoiMjIiLHkxOiIyIix5MjoiMjIifV1dfSk7dmFyIE5DLHB3ZT1uKCgpPT57TkM9W1sicG9seWdvbiIse3BvaW50czoiMTIgMiAxOSAyMSAxMiAxNyA1IDIxIDEyIDIifV1dfSk7dmFyIFBDLGh3ZT1uKCgpPT57UEM9W1sicGF0aCIse2Q6Ik04LjQzIDguNDMgMyAxMWw4IDIgMiA4IDIuNTctNS40MyJ9XSxbInBhdGgiLHtkOiJNMTcuMzkgMTEuNzMgMjIgMmwtOS43MyA0LjYxIn1dLFsibGluZSIse3gxOiIyIix4MjoiMjIiLHkxOiIyIix5MjoiMjIifV1dfSk7dmFyIElDLG13ZT1uKCgpPT57SUM9W1sicG9seWdvbiIse3BvaW50czoiMyAxMSAyMiAyIDEzIDIxIDExIDEzIDMgMTEifV1dfSk7dmFyIEZDLGd3ZT1uKCgpPT57RkM9W1sicGF0aCIse2Q6Ik0xNSAxOGgtNSJ9XSxbInBhdGgiLHtkOiJNMTggMTRoLTgifV0sWyJwYXRoIix7ZDoiTTQgMjJoMTZhMiAyIDAgMCAwIDItMlY0YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMS00IDB2LTlhMiAyIDAgMCAxIDItMmgyIn1dLFsicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjQiLHg6IjEwIix5OiI2IixyeDoiMSJ9XV19KTt2YXIgT0MseHdlPW4oKCk9PntPQz1bWyJyZWN0Iix7eDoiMTYiLHk6IjE2Iix3aWR0aDoiNiIsaGVpZ2h0OiI2IixyeDoiMSJ9XSxbInJlY3QiLHt4OiIyIix5OiIxNiIsd2lkdGg6IjYiLGhlaWdodDoiNiIscng6IjEifV0sWyJyZWN0Iix7eDoiOSIseToiMiIsd2lkdGg6IjYiLGhlaWdodDoiNiIscng6IjEifV0sWyJwYXRoIix7ZDoiTTUgMTZ2LTNhMSAxIDAgMCAxIDEtMWgxMmExIDEgMCAwIDEgMSAxdjMifV0sWyJwYXRoIix7ZDoiTTEyIDEyVjgifV1dfSk7dmFyIEJDLGJ3ZT1uKCgpPT57QkM9W1sicGF0aCIse2Q6Ik02IDguMzJhNy40MyA3LjQzIDAgMCAxIDAgNy4zNiJ9XSxbInBhdGgiLHtkOiJNOS40NiA2LjIxYTExLjc2IDExLjc2IDAgMCAxIDAgMTEuNTgifV0sWyJwYXRoIix7ZDoiTTEyLjkxIDQuMWExNS45MSAxNS45MSAwIDAgMSAuMDEgMTUuOCJ9XSxbInBhdGgiLHtkOiJNMTYuMzcgMmEyMC4xNiAyMC4xNiAwIDAgMSAwIDIwIn1dXX0pO3ZhciBSQyx2d2U9bigoKT0+e1JDPVtbInBhdGgiLHtkOiJNMTIgMnYxMCJ9XSxbInBhdGgiLHtkOiJtOC41IDQgNyA0In1dLFsicGF0aCIse2Q6Im04LjUgOCA3LTQifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxNyIscjoiNSJ9XV19KTt2YXIgSEMseXdlPW4oKCk9PntIQz1bWyJwYXRoIix7ZDoiTTEzLjQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi03LjQifV0sWyJwYXRoIix7ZDoiTTIgNmg0In1dLFsicGF0aCIse2Q6Ik0yIDEwaDQifV0sWyJwYXRoIix7ZDoiTTIgMTRoNCJ9XSxbInBhdGgiLHtkOiJNMiAxOGg0In1dLFsicGF0aCIse2Q6Ik0yMS4zNzggNS42MjZhMSAxIDAgMSAwLTMuMDA0LTMuMDA0bC01LjAxIDUuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiJ9XV19KTt2YXIgcUMsd3dlPW4oKCk9PntxQz1bWyJwYXRoIix7ZDoiTTIgNmg0In1dLFsicGF0aCIse2Q6Ik0yIDEwaDQifV0sWyJwYXRoIix7ZDoiTTIgMTRoNCJ9XSxbInBhdGgiLHtkOiJNMiAxOGg0In1dLFsicmVjdCIse3dpZHRoOiIxNiIsaGVpZ2h0OiIyMCIseDoiNCIseToiMiIscng6IjIifV0sWyJwYXRoIix7ZDoiTTE1IDJ2MjAifV0sWyJwYXRoIix7ZDoiTTE1IDdoNSJ9XSxbInBhdGgiLHtkOiJNMTUgMTJoNSJ9XSxbInBhdGgiLHtkOiJNMTUgMTdoNSJ9XV19KTt2YXIgVkMsTXdlPW4oKCk9PntWQz1bWyJwYXRoIix7ZDoiTTIgNmg0In1dLFsicGF0aCIse2Q6Ik0yIDEwaDQifV0sWyJwYXRoIix7ZDoiTTIgMTRoNCJ9XSxbInBhdGgiLHtkOiJNMiAxOGg0In1dLFsicmVjdCIse3dpZHRoOiIxNiIsaGVpZ2h0OiIyMCIseDoiNCIseToiMiIscng6IjIifV0sWyJwYXRoIix7ZDoiTTkuNSA4aDUifV0sWyJwYXRoIix7ZDoiTTkuNSAxMkgxNiJ9XSxbInBhdGgiLHtkOiJNOS41IDE2SDE0In1dXX0pO3ZhciBVQyx6d2U9bigoKT0+e1VDPVtbInBhdGgiLHtkOiJNMiA2aDQifV0sWyJwYXRoIix7ZDoiTTIgMTBoNCJ9XSxbInBhdGgiLHtkOiJNMiAxNGg0In1dLFsicGF0aCIse2Q6Ik0yIDE4aDQifV0sWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjIwIix4OiI0Iix5OiIyIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTYgMnYyMCJ9XV19KTt2YXIgakMsa3dlPW4oKCk9PntqQz1bWyJwYXRoIix7ZDoiTTggMnY0In1dLFsicGF0aCIse2Q6Ik0xMiAydjQifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMjAgMTJ2MiJ9XSxbInBhdGgiLHtkOiJNMjAgMTh2MmEyIDIgMCAwIDEtMiAyaC0xIn1dLFsicGF0aCIse2Q6Ik0xMyAyMmgtMiJ9XSxbInBhdGgiLHtkOiJNNyAyMkg2YTIgMiAwIDAgMS0yLTJ2LTIifV0sWyJwYXRoIix7ZDoiTTQgMTR2LTIifV0sWyJwYXRoIix7ZDoiTTQgOFY2YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNOCAxMGg2In1dLFsicGF0aCIse2Q6Ik04IDE0aDgifV0sWyJwYXRoIix7ZDoiTTggMThoNSJ9XV19KTt2YXIgV0MsU3dlPW4oKCk9PntXQz1bWyJwYXRoIix7ZDoiTTggMnY0In1dLFsicGF0aCIse2Q6Ik0xMiAydjQifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInJlY3QiLHt3aWR0aDoiMTYiLGhlaWdodDoiMTgiLHg6IjQiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik04IDEwaDYifV0sWyJwYXRoIix7ZDoiTTggMTRoOCJ9XSxbInBhdGgiLHtkOiJNOCAxOGg1In1dXX0pO3ZhciBHQyxDd2U9bigoKT0+e0dDPVtbInBhdGgiLHtkOiJNMTIgNFYyIn1dLFsicGF0aCIse2Q6Ik01IDEwdjRhNy4wMDQgNy4wMDQgMCAwIDAgNS4yNzcgNi43ODdjLjQxMi4xMDQuODAyLjI5MiAxLjEwMi41OTJMMTIgMjJsLjYyMS0uNjIxYy4zLS4zLjY5LS40ODggMS4xMDItLjU5MmE3LjAxIDcuMDEgMCAwIDAgNC4xMjUtMi45MzkifV0sWyJwYXRoIix7ZDoiTTE5IDEwdjMuMzQzIn1dLFsicGF0aCIse2Q6Ik0xMiAxMmMtMS4zNDktLjU3My0xLjkwNS0xLjAwNS0yLjUtMi0uNTQ2LjkwMi0xLjA0OCAxLjM1My0yLjUgMi0xLjAxOC0uNjQ0LTEuNDYtMS4wOC0yLTItMS4wMjguNzEtMS42OS45MTgtMyAxIDEuMDgxLTEuMDQ4IDEuNzU3LTIuMDMgMi0zIC4xOTQtLjc3Ni44NC0xLjU1MSAxLjc5LTIuMjFtMTEuNjU0IDUuOTk3Yy44ODctLjQ1NyAxLjI4LS44OTEgMS41NTYtMS43ODcgMS4wMzIuOTE2IDEuNjgzIDEuMTU3IDMgMS0xLjI5Ny0xLjAzNi0xLjc1OC0yLjAzLTItMy0uNS0yLTQtNC04LTQtLjc0IDAtMS40NjEuMDY4LTIuMTUuMTkyIn1dLFsibGluZSIse3gxOiIyIix4MjoiMjIiLHkxOiIyIix5MjoiMjIifV1dfSk7dmFyIFlDLEx3ZT1uKCgpPT57WUM9W1sicGF0aCIse2Q6Ik0xMiA0VjIifV0sWyJwYXRoIix7ZDoiTTUgMTB2NGE3LjAwNCA3LjAwNCAwIDAgMCA1LjI3NyA2Ljc4N2MuNDEyLjEwNC44MDIuMjkyIDEuMTAyLjU5MkwxMiAyMmwuNjIxLS42MjFjLjMtLjMuNjktLjQ4OCAxLjEwMi0uNTkyQTcuMDAzIDcuMDAzIDAgMCAwIDE5IDE0di00In1dLFsicGF0aCIse2Q6Ik0xMiA0QzggNCA0LjUgNiA0IDhjLS4yNDMuOTctLjkxOSAxLjk1Mi0yIDMgMS4zMS0uMDgyIDEuOTcyLS4yOSAzLTEgLjU0LjkyLjk4MiAxLjM1NiAyIDIgMS40NTItLjY0NyAxLjk1NC0xLjA5OCAyLjUtMiAuNTk1Ljk5NSAxLjE1MSAxLjQyNyAyLjUgMiAxLjMxLS42MjEgMS44NjItMS4wNTggMi41LTIgLjYyOS45NzcgMS4xNjIgMS40MjMgMi41IDIgMS4yMDktLjU0OCAxLjY4LS45NjcgMi0yIDEuMDMyLjkxNiAxLjY4MyAxLjE1NyAzIDEtMS4yOTctMS4wMzYtMS43NTgtMi4wMy0yLTMtLjUtMi00LTQtOC00WiJ9XV19KTt2YXIgWjQsVHdlPW4oKCk9PntaND1bWyJwYXRoIix7ZDoiTTEyIDE2aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgOHY0In1dLFsicGF0aCIse2Q6Ik0xNS4zMTIgMmEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NmwtNC42ODgtNC42ODhBMiAyIDAgMCAxIDIgMTUuMzEyVjguNjg4YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQuNjg4LTQuNjg4QTIgMiAwIDAgMSA4LjY4OCAyeiJ9XV19KTt2YXIgWkMsX3dlPW4oKCk9PntaQz1bWyJwYXRoIix7ZDoiTTIuNTg2IDE2LjcyNkEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJoNi42MjRhMiAyIDAgMCAxIDEuNDE0LjU4Nmw0LjY4OCA0LjY4OEEyIDIgMCAwIDEgMjIgOC42ODh2Ni42MjRhMiAyIDAgMCAxLS41ODYgMS40MTRsLTQuNjg4IDQuNjg4YTIgMiAwIDAgMS0xLjQxNC41ODZIOC42ODhhMiAyIDAgMCAxLTEuNDE0LS41ODZ6In1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV1dfSk7dmFyIFg0LEF3ZT1uKCgpPT57WDQ9W1sicGF0aCIse2Q6Ik0xMCAxNVY5In1dLFsicGF0aCIse2Q6Ik0xNCAxNVY5In1dLFsicGF0aCIse2Q6Ik0yLjU4NiAxNi43MjZBMiAyIDAgMCAxIDIgMTUuMzEyVjguNjg4YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQuNjg4LTQuNjg4QTIgMiAwIDAgMSA4LjY4OCAyaDYuNjI0YTIgMiAwIDAgMSAxLjQxNC41ODZsNC42ODggNC42ODhBMiAyIDAgMCAxIDIyIDguNjg4djYuNjI0YTIgMiAwIDAgMS0uNTg2IDEuNDE0bC00LjY4OCA0LjY4OGEyIDIgMCAwIDEtMS40MTQuNTg2SDguNjg4YTIgMiAwIDAgMS0xLjQxNC0uNTg2eiJ9XV19KTt2YXIgUTQsJHdlPW4oKCk9PntRND1bWyJwYXRoIix7ZDoibTE1IDktNiA2In1dLFsicGF0aCIse2Q6Ik0yLjU4NiAxNi43MjZBMiAyIDAgMCAxIDIgMTUuMzEyVjguNjg4YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQuNjg4LTQuNjg4QTIgMiAwIDAgMSA4LjY4OCAyaDYuNjI0YTIgMiAwIDAgMSAxLjQxNC41ODZsNC42ODggNC42ODhBMiAyIDAgMCAxIDIyIDguNjg4djYuNjI0YTIgMiAwIDAgMS0uNTg2IDEuNDE0bC00LjY4OCA0LjY4OGEyIDIgMCAwIDEtMS40MTQuNTg2SDguNjg4YTIgMiAwIDAgMS0xLjQxNC0uNTg2eiJ9XSxbInBhdGgiLHtkOiJtOSA5IDYgNiJ9XV19KTt2YXIgWEMsRHdlPW4oKCk9PntYQz1bWyJwYXRoIix7ZDoiTTIuNTg2IDE2LjcyNkEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJoNi42MjRhMiAyIDAgMCAxIDEuNDE0LjU4Nmw0LjY4OCA0LjY4OEEyIDIgMCAwIDEgMjIgOC42ODh2Ni42MjRhMiAyIDAgMCAxLS41ODYgMS40MTRsLTQuNjg4IDQuNjg4YTIgMiAwIDAgMS0xLjQxNC41ODZIOC42ODhhMiAyIDAgMCAxLTEuNDE0LS41ODZ6In1dXX0pO3ZhciBRQyxFd2U9bigoKT0+e1FDPVtbInBhdGgiLHtkOiJNMyAyMGg0LjVhLjUuNSAwIDAgMCAuNS0uNXYtLjI4MmEuNTIuNTIgMCAwIDAtLjI0Ny0uNDM3IDggOCAwIDEgMSA4LjQ5NC0uMDAxLjUyLjUyIDAgMCAwLS4yNDcuNDM4di4yODJhLjUuNSAwIDAgMCAuNS41SDIxIn1dXX0pO3ZhciBLQyxOd2U9bigoKT0+e0tDPVtbInBhdGgiLHtkOiJNMyAzaDZsNiAxOGg2In1dLFsicGF0aCIse2Q6Ik0xNCAzaDcifV1dfSk7dmFyIEpDLFB3ZT1uKCgpPT57SkM9W1sicGF0aCIse2Q6Ik0yMC4zNDEgNi40ODRBMTAgMTAgMCAwIDEgMTAuMjY2IDIxLjg1In1dLFsicGF0aCIse2Q6Ik0zLjY1OSAxNy41MTZBMTAgMTAgMCAwIDEgMTMuNzQgMi4xNTIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjUiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjE5IixyOiIyIn1dXX0pO3ZhciBlTCxJd2U9bigoKT0+e2VMPVtbInBhdGgiLHtkOiJNMTIgMTJWNGExIDEgMCAwIDEgMS0xaDYuMjk3YTEgMSAwIDAgMSAuNjUxIDEuNzU5bC00LjY5NiA0LjAyNSJ9XSxbInBhdGgiLHtkOiJtMTIgMjEtNy40MTQtNy40MTRBMiAyIDAgMCAxIDQgMTIuMTcyVjYuNDE1YTEuMDAyIDEuMDAyIDAgMCAxIDEuNzA3LS43MDdMMjAgMjAuMDA5In1dLFsicGF0aCIse2Q6Im0xMi4yMTQgMy4zODEgOC40MTQgMTQuOTY2YTEgMSAwIDAgMS0uMTY3IDEuMTk5bC0xLjE2OCAxLjE2M2ExIDEgMCAwIDEtLjcwNi4yOTFINi4zNTFhMSAxIDAgMCAxLS42MjUtLjIxOUwzLjI1IDE4LjhhMSAxIDAgMCAxIC42MzEtMS43ODFsNC4xNjUuMDI3In1dXX0pO3ZhciB0TCxGd2U9bigoKT0+e3RMPVtbInBhdGgiLHtkOiJNMTIgM3Y2In1dLFsicGF0aCIse2Q6Ik0xNi43NiAzYTIgMiAwIDAgMSAxLjggMS4xbDIuMjMgNC40NzlhMiAyIDAgMCAxIC4yMS44OTFWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOS40NzJhMiAyIDAgMCAxIC4yMTEtLjg5NEw1LjQ1IDQuMUEyIDIgMCAwIDEgNy4yNCAzeiJ9XSxbInBhdGgiLHtkOiJNMy4wNTQgOS4wMTNoMTcuODkzIn1dXX0pO3ZhciBhTCxPd2U9bigoKT0+e2FMPVtbInBhdGgiLHtkOiJtMTYgMTYgMiAyIDQtNCJ9XSxbInBhdGgiLHtkOiJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCJ9XSxbInBhdGgiLHtkOiJtNy41IDQuMjcgOSA1LjE1In1dLFsicG9seWxpbmUiLHtwb2ludHM6IjMuMjkgNyAxMiAxMiAyMC43MSA3In1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiMjIiLHkyOiIxMiJ9XV19KTt2YXIgckwsQndlPW4oKCk9PntyTD1bWyJwYXRoIix7ZDoiTTE2IDE2aDYifV0sWyJwYXRoIix7ZDoiTTIxIDEwVjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGwyLTEuMTQifV0sWyJwYXRoIix7ZDoibTcuNSA0LjI3IDkgNS4xNSJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIzLjI5IDcgMTIgMTIgMjAuNzEgNyJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjIyIix5MjoiMTIifV1dfSk7dmFyIGlMLFJ3ZT1uKCgpPT57aUw9W1sicGF0aCIse2Q6Ik0xMiAyMnYtOSJ9XSxbInBhdGgiLHtkOiJNMTUuMTcgMi4yMWExLjY3IDEuNjcgMCAwIDEgMS42MyAwTDIxIDQuNTdhMS45MyAxLjkzIDAgMCAxIDAgMy4zNkw4LjgyIDE0Ljc5YTEuNjU1IDEuNjU1IDAgMCAxLTEuNjQgMEwzIDEyLjQzYTEuOTMgMS45MyAwIDAgMSAwLTMuMzZ6In1dLFsicGF0aCIse2Q6Ik0yMCAxM3YzLjg3YTIuMDYgMi4wNiAwIDAgMS0xLjExIDEuODNsLTYgMy4wOGExLjkzIDEuOTMgMCAwIDEtMS43OCAwbC02LTMuMDhBMi4wNiAyLjA2IDAgMCAxIDQgMTYuODdWMTMifV0sWyJwYXRoIix7ZDoiTTIxIDEyLjQzYTEuOTMgMS45MyAwIDAgMCAwLTMuMzZMOC44MyAyLjJhMS42NCAxLjY0IDAgMCAwLTEuNjMgMEwzIDQuNTdhMS45MyAxLjkzIDAgMCAwIDAgMy4zNmwxMi4xOCA2Ljg2YTEuNjM2IDEuNjM2IDAgMCAwIDEuNjMgMHoifV1dfSk7dmFyIG9MLEh3ZT1uKCgpPT57b0w9W1sicGF0aCIse2Q6Ik0xNiAxNmg2In1dLFsicGF0aCIse2Q6Ik0xOSAxM3Y2In1dLFsicGF0aCIse2Q6Ik0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0In1dLFsicGF0aCIse2Q6Im03LjUgNC4yNyA5IDUuMTUifV0sWyJwb2x5bGluZSIse3BvaW50czoiMy4yOSA3IDEyIDEyIDIwLjcxIDcifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIyMiIseTI6IjEyIn1dXX0pO3ZhciBzTCxxd2U9bigoKT0+e3NMPVtbInBhdGgiLHtkOiJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCJ9XSxbInBhdGgiLHtkOiJtNy41IDQuMjcgOSA1LjE1In1dLFsicG9seWxpbmUiLHtwb2ludHM6IjMuMjkgNyAxMiAxMiAyMC43MSA3In1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiMjIiLHkyOiIxMiJ9XSxbImNpcmNsZSIse2N4OiIxOC41IixjeToiMTUuNSIscjoiMi41In1dLFsicGF0aCIse2Q6Ik0yMC4yNyAxNy4yNyAyMiAxOSJ9XV19KTt2YXIgbkwsVndlPW4oKCk9PntuTD1bWyJwYXRoIix7ZDoiTTIxIDEwVjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGwyLTEuMTQifV0sWyJwYXRoIix7ZDoibTcuNSA0LjI3IDkgNS4xNSJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIzLjI5IDcgMTIgMTIgMjAuNzEgNyJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjIyIix5MjoiMTIifV0sWyJwYXRoIix7ZDoibTE3IDEzIDUgNW0tNSAwIDUtNSJ9XV19KTt2YXIgbEwsVXdlPW4oKCk9PntsTD1bWyJwYXRoIix7ZDoiTTExIDIxLjczYTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzN6In1dLFsicGF0aCIse2Q6Ik0xMiAyMlYxMiJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIzLjI5IDcgMTIgMTIgMjAuNzEgNyJ9XSxbInBhdGgiLHtkOiJtNy41IDQuMjcgOSA1LjE1In1dXX0pO3ZhciBjTCxqd2U9bigoKT0+e2NMPVtbInBhdGgiLHtkOiJNMTEgNyA2IDIifV0sWyJwYXRoIix7ZDoiTTE4Ljk5MiAxMkgyLjA0MSJ9XSxbInBhdGgiLHtkOiJNMjEuMTQ1IDE4LjM4QTMuMzQgMy4zNCAwIDAgMSAyMCAxNi41YTMuMyAzLjMgMCAwIDEtMS4xNDUgMS44OGMtLjU3NS40Ni0uODU1IDEuMDItLjg1NSAxLjU5NUEyIDIgMCAwIDAgMjAgMjJhMiAyIDAgMCAwIDItMi4wMjVjMC0uNTgtLjI4NS0xLjEzLS44NTUtMS41OTUifV0sWyJwYXRoIix7ZDoibTguNSA0LjUgMi4xNDgtMi4xNDhhMS4yMDUgMS4yMDUgMCAwIDEgMS43MDQgMGw3LjI5NiA3LjI5NmExLjIwNSAxLjIwNSAwIDAgMSAwIDEuNzA0bC03LjU5MiA3LjU5MmEzLjYxNSAzLjYxNSAwIDAgMS01LjExMiAwbC0zLjg4OC0zLjg4OGEzLjYxNSAzLjYxNSAwIDAgMSAwLTUuMTEyTDUuNjcgNy4zMyJ9XV19KTt2YXIgZEwsV3dlPW4oKCk9PntkTD1bWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjYiLHg6IjIiLHk6IjIiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xMCAxNnYtMmEyIDIgMCAwIDEgMi0yaDhhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTIifV0sWyJyZWN0Iix7d2lkdGg6IjQiLGhlaWdodDoiNiIseDoiOCIseToiMTYiLHJ4OiIxIn1dXX0pO3ZhciBLNCxHd2U9bigoKT0+e0s0PVtbInBhdGgiLHtkOiJNMTAgMnYyIn1dLFsicGF0aCIse2Q6Ik0xNCAydjQifV0sWyJwYXRoIix7ZDoiTTE3IDJhMSAxIDAgMCAxIDEgMXY5SDZWM2ExIDEgMCAwIDEgMS0xeiJ9XSxbInBhdGgiLHtkOiJNNiAxMmExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMCAwIDIgMmgyYTEgMSAwIDAgMSAxIDF2Mi45YTIgMiAwIDEgMCA0IDBWMTdhMSAxIDAgMCAxIDEtMWgyYTIgMiAwIDAgMCAyLTJ2LTFhMSAxIDAgMCAwLTEtMSJ9XV19KTt2YXIgZkwsWXdlPW4oKCk9PntmTD1bWyJwYXRoIix7ZDoibTE0LjYyMiAxNy44OTctMTAuNjgtMi45MTMifV0sWyJwYXRoIix7ZDoiTTE4LjM3NiAyLjYyMmExIDEgMCAxIDEgMy4wMDIgMy4wMDJMMTcuMzYgOS42NDNhLjUuNSAwIDAgMCAwIC43MDdsLjk0NC45NDRhMi40MSAyLjQxIDAgMCAxIDAgMy40MDhsLS45NDQuOTQ0YS41LjUgMCAwIDEtLjcwNyAwTDguMzU0IDcuMzQ4YS41LjUgMCAwIDEgMC0uNzA3bC45NDQtLjk0NGEyLjQxIDIuNDEgMCAwIDEgMy40MDggMGwuOTQ0Ljk0NGEuNS41IDAgMCAwIC43MDcgMHoifV0sWyJwYXRoIix7ZDoiTTkgOGMtMS44MDQgMi43MS0zLjk3IDMuNDYtNi41ODMgMy45NDhhLjUwNy41MDcgMCAwIDAtLjMwMi44MTlsNy4zMiA4Ljg4M2ExIDEgMCAwIDAgMS4xODUuMjA0QzEyLjczNSAyMC40MDUgMTYgMTYuNzkyIDE2IDE1In1dXX0pO3ZhciB1TCxad2U9bigoKT0+e3VMPVtbInBhdGgiLHtkOiJNMTIgMjJhMSAxIDAgMCAxIDAtMjAgMTAgOSAwIDAgMSAxMCA5IDUgNSAwIDAgMS01IDVoLTIuMjVhMS43NSAxLjc1IDAgMCAwLTEuNCAyLjhsLjMuNGExLjc1IDEuNzUgMCAwIDEtMS40IDIuOHoifV0sWyJjaXJjbGUiLHtjeDoiMTMuNSIsY3k6IjYuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbImNpcmNsZSIse2N4OiIxNy41IixjeToiMTAuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbImNpcmNsZSIse2N4OiI2LjUiLGN5OiIxMi41IixyOiIuNSIsZmlsbDoiY3VycmVudENvbG9yIn1dLFsiY2lyY2xlIix7Y3g6IjguNSIsY3k6IjcuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XV19KTt2YXIgcEwsWHdlPW4oKCk9PntwTD1bWyJwYXRoIix7ZDoiTTExLjI1IDE3LjI1aDEuNUwxMiAxOHoifV0sWyJwYXRoIix7ZDoibTE1IDEyIDIgMiJ9XSxbInBhdGgiLHtkOiJNMTggNi41YS41LjUgMCAwIDAtLjUtLjUifV0sWyJwYXRoIix7ZDoiTTIwLjY5IDkuNjdhNC41IDQuNSAwIDEgMC03LjA0LTUuNSA4LjM1IDguMzUgMCAwIDAtMy4zIDAgNC41IDQuNSAwIDEgMC03LjA0IDUuNUMyLjQ5IDExLjIgMiAxMi44OCAyIDE0LjUgMiAxOS40NyA2LjQ4IDIyIDEyIDIyczEwLTIuNTMgMTAtNy41YzAtMS42Mi0uNDgtMy4zLTEuMy00LjgzIn1dLFsicGF0aCIse2Q6Ik02IDYuNWEuNDk1LjQ5NSAwIDAgMSAuNS0uNSJ9XSxbInBhdGgiLHtkOiJtOSAxMi0yIDIifV1dfSk7dmFyIGhMLFF3ZT1uKCgpPT57aEw9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgMTVoMTgifV0sWyJwYXRoIix7ZDoibTE1IDgtMyAzLTMtMyJ9XV19KTt2YXIgSjQsS3dlPW4oKCk9PntKND1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTQgMTVoMSJ9XSxbInBhdGgiLHtkOiJNMTkgMTVoMiJ9XSxbInBhdGgiLHtkOiJNMyAxNWgyIn1dLFsicGF0aCIse2Q6Ik05IDE1aDEifV1dfSk7dmFyIG1MLEp3ZT1uKCgpPT57bUw9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgMTVoMTgifV0sWyJwYXRoIix7ZDoibTkgMTAgMy0zIDMgMyJ9XV19KTt2YXIgZ0wsZU1lPW4oKCk9PntnTD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyAxNWgxOCJ9XV19KTt2YXIgZTMsdE1lPW4oKCk9PntlMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOSAzdjE4In1dLFsicGF0aCIse2Q6Im0xNiAxNS0zLTMgMy0zIn1dXX0pO3ZhciB0MyxhTWU9bigoKT0+e3QzPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik05IDE0djEifV0sWyJwYXRoIix7ZDoiTTkgMTl2MiJ9XSxbInBhdGgiLHtkOiJNOSAzdjIifV0sWyJwYXRoIix7ZDoiTTkgOXYxIn1dXX0pO3ZhciBhMyxyTWU9bigoKT0+e2EzPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik05IDN2MTgifV0sWyJwYXRoIix7ZDoibTE0IDkgMyAzLTMgMyJ9XV19KTt2YXIgeEwsaU1lPW4oKCk9Pnt4TD1bWyJwYXRoIix7ZDoiTTE1IDEwVjkifV0sWyJwYXRoIix7ZDoiTTE1IDE1di0xIn1dLFsicGF0aCIse2Q6Ik0xNSAyMXYtMiJ9XSxbInBhdGgiLHtkOiJNMTUgNVYzIn1dLFsicGF0aCIse2Q6Ik05IDEwVjkifV0sWyJwYXRoIix7ZDoiTTkgMTV2LTEifV0sWyJwYXRoIix7ZDoiTTkgMjF2LTIifV0sWyJwYXRoIix7ZDoiTTkgNVYzIn1dLFsicmVjdCIse3g6IjMiLHk6IjMiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxOCIscng6IjIifV1dfSk7dmFyIHIzLG9NZT1uKCgpPT57cjM9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCJ9XV19KTt2YXIgYkwsc01lPW4oKCk9PntiTD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCJ9XSxbInBhdGgiLHtkOiJtOCA5IDMgMy0zIDMifV1dfSk7dmFyIGkzLG5NZT1uKCgpPT57aTM9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTE1IDE0djEifV0sWyJwYXRoIix7ZDoiTTE1IDE5djIifV0sWyJwYXRoIix7ZDoiTTE1IDN2MiJ9XSxbInBhdGgiLHtkOiJNMTUgOXYxIn1dXX0pO3ZhciB2TCxsTWU9bigoKT0+e3ZMPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4In1dLFsicGF0aCIse2Q6Im0xMCAxNS0zLTMgMy0zIn1dXX0pO3ZhciB5TCxjTWU9bigoKT0+e3lMPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4In1dXX0pO3ZhciB3TCxkTWU9bigoKT0+e3dMPVtbInBhdGgiLHtkOiJNMTQgMTVoMSJ9XSxbInBhdGgiLHtkOiJNMTQgOWgxIn1dLFsicGF0aCIse2Q6Ik0xOSAxNWgyIn1dLFsicGF0aCIse2Q6Ik0xOSA5aDIifV0sWyJwYXRoIix7ZDoiTTMgMTVoMiJ9XSxbInBhdGgiLHtkOiJNMyA5aDIifV0sWyJwYXRoIix7ZDoiTTkgMTVoMSJ9XSxbInBhdGgiLHtkOiJNOSA5aDEifV0sWyJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiJ9XV19KTt2YXIgTUwsZk1lPW4oKCk9PntNTD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyA5aDE4In1dLFsicGF0aCIse2Q6Im05IDE2IDMtMyAzIDMifV1dfSk7dmFyIG8zLHVNZT1uKCgpPT57bzM9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTE0IDloMSJ9XSxbInBhdGgiLHtkOiJNMTkgOWgyIn1dLFsicGF0aCIse2Q6Ik0zIDloMiJ9XSxbInBhdGgiLHtkOiJNOSA5aDEifV1dfSk7dmFyIHpMLHBNZT1uKCgpPT57ekw9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgOWgxOCJ9XSxbInBhdGgiLHtkOiJtMTUgMTQtMyAzLTMtMyJ9XV19KTt2YXIga0wsaE1lPW4oKCk9PntrTD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOSAzdjE4In1dLFsicGF0aCIse2Q6Ik05IDE1aDEyIn1dXX0pO3ZhciBTTCxtTWU9bigoKT0+e1NMPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0zIDloMTgifV1dfSk7dmFyIENMLGdNZT1uKCgpPT57Q0w9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgMTVoMTIifV0sWyJwYXRoIix7ZDoiTTE1IDN2MTgifV1dfSk7dmFyIHMzLHhNZT1uKCgpPT57czM9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgOWgxOCJ9XSxbInBhdGgiLHtkOiJNOSAyMVY5In1dXX0pO3ZhciBMTCxiTWU9bigoKT0+e0xMPVtbInBhdGgiLHtkOiJtMTYgNi04LjQxNCA4LjU4NmEyIDIgMCAwIDAgMi44MjkgMi44MjlsOC40MTQtOC41ODZhNCA0IDAgMSAwLTUuNjU3LTUuNjU3bC04LjM3OSA4LjU1MWE2IDYgMCAxIDAgOC40ODUgOC40ODVsOC4zNzktOC41NTEifV1dfSk7dmFyIFRMLHZNZT1uKCgpPT57VEw9W1sicGF0aCIse2Q6Ik0xMSAxNWgyIn1dLFsicGF0aCIse2Q6Ik0xMiAxMnYzIn1dLFsicGF0aCIse2Q6Ik0xMiAxOXYzIn1dLFsicGF0aCIse2Q6Ik0xNS4yODIgMTlhMSAxIDAgMCAwIC45NDgtLjY4bDIuMzctNi45ODhhNyA3IDAgMSAwLTEzLjIgMGwyLjM3IDYuOTg4YTEgMSAwIDAgMCAuOTQ4LjY4eiJ9XSxbInBhdGgiLHtkOiJNOSA5YTMgMyAwIDEgMSA2IDAifV1dfSk7dmFyIF9MLHlNZT1uKCgpPT57X0w9W1sicGF0aCIse2Q6Ik04IDIxcy00LTMtNC05IDQtOSA0LTkifV0sWyJwYXRoIix7ZDoiTTE2IDNzNCAzIDQgOS00IDktNCA5In1dXX0pO3ZhciBBTCx3TWU9bigoKT0+e0FMPVtbInBhdGgiLHtkOiJNNS44IDExLjMgMiAyMmwxMC43LTMuNzkifV0sWyJwYXRoIix7ZDoiTTQgM2guMDEifV0sWyJwYXRoIix7ZDoiTTIyIDhoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNSAyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMjIgMjBoLjAxIn1dLFsicGF0aCIse2Q6Im0yMiAyLTIuMjQuNzVhMi45IDIuOSAwIDAgMC0xLjk2IDMuMTJjLjEuODYtLjU3IDEuNjMtMS40NSAxLjYzaC0uMzhjLS44NiAwLTEuNi42LTEuNzYgMS40NEwxNCAxMCJ9XSxbInBhdGgiLHtkOiJtMjIgMTMtLjgyLS4zM2MtLjg2LS4zNC0xLjgyLjItMS45OCAxLjExYy0uMTEuNy0uNzIgMS4yMi0xLjQzIDEuMjJIMTcifV0sWyJwYXRoIix7ZDoibTExIDIgLjMzLjgyYy4zNC44Ni0uMiAxLjgyLTEuMTEgMS45OEM5LjUyIDQuOSA5IDUuNTIgOSA2LjIzVjcifV0sWyJwYXRoIix7ZDoiTTExIDEzYzEuOTMgMS45MyAyLjgzIDQuMTcgMiA1LS44My44My0zLjA3LS4wNy01LTItMS45My0xLjkzLTIuODMtNC4xNy0yLTUgLjgzLS44MyAzLjA3LjA3IDUgMloifV1dfSk7dmFyICRMLE1NZT1uKCgpPT57JEw9W1sicmVjdCIse3g6IjE0Iix5OiIzIix3aWR0aDoiNSIsaGVpZ2h0OiIxOCIscng6IjEifV0sWyJyZWN0Iix7eDoiNSIseToiMyIsd2lkdGg6IjUiLGhlaWdodDoiMTgiLHJ4OiIxIn1dXX0pO3ZhciBETCx6TWU9bigoKT0+e0RMPVtbImNpcmNsZSIse2N4OiIxMSIsY3k6IjQiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiI4IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjIwIixjeToiMTYiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTkgMTBhNSA1IDAgMCAxIDUgNXYzLjVhMy41IDMuNSAwIDAgMS02Ljg0IDEuMDQ1UTYuNTIgMTcuNDggNC40NiAxNi44NEEzLjUgMy41IDAgMCAxIDUuNSAxMFoifV1dfSk7dmFyIEVMLGtNZT1uKCgpPT57RUw9W1sicmVjdCIse3dpZHRoOiIxNCIsaGVpZ2h0OiIyMCIseDoiNSIseToiMiIscng6IjIifV0sWyJwYXRoIix7ZDoiTTE1IDE0aC4wMSJ9XSxbInBhdGgiLHtkOiJNOSA2aDYifV0sWyJwYXRoIix7ZDoiTTkgMTBoNiJ9XV19KTt2YXIgbjMsU01lPW4oKCk9PntuMz1bWyJwYXRoIix7ZDoiTTEzIDIxaDgifV0sWyJwYXRoIix7ZDoiTTIxLjE3NCA2LjgxMmExIDEgMCAwIDAtMy45ODYtMy45ODdMMy44NDIgMTYuMTc0YTIgMiAwIDAgMC0uNS44M2wtMS4zMjEgNC4zNTJhLjUuNSAwIDAgMCAuNjIzLjYyMmw0LjM1My0xLjMyYTIgMiAwIDAgMCAuODMtLjQ5N3oifV1dfSk7dmFyIE5MLENNZT1uKCgpPT57Tkw9W1sicGF0aCIse2Q6Im0xMCAxMC02LjE1NyA2LjE2MmEyIDIgMCAwIDAtLjUuODMzbC0xLjMyMiA0LjM2YS41LjUgMCAwIDAgLjYyMi42MjRsNC4zNTgtMS4zMjNhMiAyIDAgMCAwIC44My0uNUwxNCAxMy45ODIifV0sWyJwYXRoIix7ZDoibTEyLjgyOSA3LjE3MiA0LjM1OS00LjM0NmExIDEgMCAxIDEgMy45ODYgMy45ODZsLTQuMzUzIDQuMzUzIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV1dfSk7dmFyIFBMLExNZT1uKCgpPT57UEw9W1sicGF0aCIse2Q6Ik0xNS43MDcgMjEuMjkzYTEgMSAwIDAgMS0xLjQxNCAwbC0xLjU4Ni0xLjU4NmExIDEgMCAwIDEgMC0xLjQxNGw1LjU4Ni01LjU4NmExIDEgMCAwIDEgMS40MTQgMGwxLjU4NiAxLjU4NmExIDEgMCAwIDEgMCAxLjQxNHoifV0sWyJwYXRoIix7ZDoibTE4IDEzLTEuMzc1LTYuODc0YTEgMSAwIDAgMC0uNzQ2LS43NzZMMy4yMzUgMi4wMjhhMSAxIDAgMCAwLTEuMjA3IDEuMjA3TDUuMzUgMTUuODc5YTEgMSAwIDAgMCAuNzc2Ljc0NkwxMyAxOCJ9XSxbInBhdGgiLHtkOiJtMi4zIDIuMyA3LjI4NiA3LjI4NiJ9XSxbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiIyIn1dXX0pO3ZhciBsMyxUTWU9bigoKT0+e2wzPVtbInBhdGgiLHtkOiJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiJ9XV19KTt2YXIgSUwsX01lPW4oKCk9PntJTD1bWyJwYXRoIix7ZDoiTTEzIDIxaDgifV0sWyJwYXRoIix7ZDoibTE1IDUgNCA0In1dLFsicGF0aCIse2Q6Ik0yMS4xNzQgNi44MTJhMSAxIDAgMCAwLTMuOTg2LTMuOTg3TDMuODQyIDE2LjE3NGEyIDIgMCAwIDAtLjUuODNsLTEuMzIxIDQuMzUyYS41LjUgMCAwIDAgLjYyMy42MjJsNC4zNTMtMS4zMmEyIDIgMCAwIDAgLjgzLS40OTd6In1dXX0pO3ZhciBGTCxBTWU9bigoKT0+e0ZMPVtbInBhdGgiLHtkOiJtMTAgMTAtNi4xNTcgNi4xNjJhMiAyIDAgMCAwLS41LjgzM2wtMS4zMjIgNC4zNmEuNS41IDAgMCAwIC42MjIuNjI0bDQuMzU4LTEuMzIzYTIgMiAwIDAgMCAuODMtLjVMMTQgMTMuOTgyIn1dLFsicGF0aCIse2Q6Im0xMi44MjkgNy4xNzIgNC4zNTktNC4zNDZhMSAxIDAgMSAxIDMuOTg2IDMuOTg2bC00LjM1MyA0LjM1MyJ9XSxbInBhdGgiLHtkOiJtMTUgNSA0IDQifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XV19KTt2YXIgT0wsJE1lPW4oKCk9PntPTD1bWyJwYXRoIix7ZDoiTTEzIDcgOC43IDIuN2EyLjQxIDIuNDEgMCAwIDAtMy40IDBMMi43IDUuM2EyLjQxIDIuNDEgMCAwIDAgMCAzLjRMNyAxMyJ9XSxbInBhdGgiLHtkOiJtOCA2IDItMiJ9XSxbInBhdGgiLHtkOiJtMTggMTYgMi0yIn1dLFsicGF0aCIse2Q6Im0xNyAxMSA0LjMgNC4zYy45NC45NC45NCAyLjQ2IDAgMy40bC0yLjYgMi42Yy0uOTQuOTQtMi40Ni45NC0zLjQgMEwxMSAxNyJ9XSxbInBhdGgiLHtkOiJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiJ9XSxbInBhdGgiLHtkOiJtMTUgNSA0IDQifV1dfSk7dmFyIEJMLERNZT1uKCgpPT57Qkw9W1sicGF0aCIse2Q6Ik0yMS4xNzQgNi44MTJhMSAxIDAgMCAwLTMuOTg2LTMuOTg3TDMuODQyIDE2LjE3NGEyIDIgMCAwIDAtLjUuODNsLTEuMzIxIDQuMzUyYS41LjUgMCAwIDAgLjYyMy42MjJsNC4zNTMtMS4zMmEyIDIgMCAwIDAgLjgzLS40OTd6In1dLFsicGF0aCIse2Q6Im0xNSA1IDQgNCJ9XV19KTt2YXIgUkwsRU1lPW4oKCk9PntSTD1bWyJwYXRoIix7ZDoiTTEwLjgzIDIuMzhhMiAyIDAgMCAxIDIuMzQgMGw4IDUuNzRhMiAyIDAgMCAxIC43MyAyLjI1bC0zLjA0IDkuMjZhMiAyIDAgMCAxLTEuOSAxLjM3SDcuMDRhMiAyIDAgMCAxLTEuOS0xLjM3TDIuMSAxMC4zN2EyIDIgMCAwIDEgLjczLTIuMjV6In1dXX0pO3ZhciBITCxOTWU9bigoKT0+e0hMPVtbImxpbmUiLHt4MToiMTkiLHgyOiI1Iix5MToiNSIseTI6IjE5In1dLFsiY2lyY2xlIix7Y3g6IjYuNSIsY3k6IjYuNSIscjoiMi41In1dLFsiY2lyY2xlIix7Y3g6IjE3LjUiLGN5OiIxNy41IixyOiIyLjUifV1dfSk7dmFyIHFMLFBNZT1uKCgpPT57cUw9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiNSIscjoiMSJ9XSxbInBhdGgiLHtkOiJtOSAyMCAzLTYgMyA2In1dLFsicGF0aCIse2Q6Im02IDggNiAyIDYtMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTB2NCJ9XV19KTt2YXIgVkwsSU1lPW4oKCk9PntWTD1bWyJwYXRoIix7ZDoiTTIwIDExSDQifV0sWyJwYXRoIix7ZDoiTTIwIDdINCJ9XSxbInBhdGgiLHtkOiJNNyAyMVY0YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMCAxMkg3In1dXX0pO3ZhciBVTCxGTWU9bigoKT0+e1VMPVtbInBhdGgiLHtkOiJNMTQgNmg4In1dLFsicGF0aCIse2Q6Im0xOCAyIDQgNC00IDQifV0sWyJwYXRoIix7ZDoiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0In1dXX0pO3ZhciBqTCxPTWU9bigoKT0+e2pMPVtbInBhdGgiLHtkOiJNMTMgMmE5IDkgMCAwIDEgOSA5In1dLFsicGF0aCIse2Q6Ik0xMyA2YTUgNSAwIDAgMSA1IDUifV0sWyJwYXRoIix7ZDoiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0In1dXX0pO3ZhciBXTCxCTWU9bigoKT0+e1dMPVtbInBhdGgiLHtkOiJNMTYgMnY2aDYifV0sWyJwYXRoIix7ZDoibTIyIDItNiA2In1dLFsicGF0aCIse2Q6Ik0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCJ9XV19KTt2YXIgR0wsUk1lPW4oKCk9PntHTD1bWyJwYXRoIix7ZDoibTE2IDIgNiA2In1dLFsicGF0aCIse2Q6Im0yMiAyLTYgNiJ9XSxbInBhdGgiLHtkOiJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQifV1dfSk7dmFyIFlMLEhNZT1uKCgpPT57WUw9W1sicGF0aCIse2Q6Ik0xMC4xIDEzLjlhMTQgMTQgMCAwIDAgMy43MzIgMi42NjggMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyIDE4IDE4IDAgMCAxLTEyLjcyOC01LjI3MiJ9XSxbInBhdGgiLHtkOiJNMjIgMiAyIDIyIn1dLFsicGF0aCIse2Q6Ik00Ljc2IDEzLjU4MkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCAuMjQ0LjQ3MyJ9XV19KTt2YXIgWkwscU1lPW4oKCk9PntaTD1bWyJwYXRoIix7ZDoibTE2IDggNi02In1dLFsicGF0aCIse2Q6Ik0yMiA4VjJoLTYifV0sWyJwYXRoIix7ZDoiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0In1dXX0pO3ZhciBYTCxWTWU9bigoKT0+e1hMPVtbInBhdGgiLHtkOiJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQifV1dfSk7dmFyIFFMLFVNZT1uKCgpPT57UUw9W1sibGluZSIse3gxOiI5Iix4MjoiOSIseTE6IjQiLHkyOiIyMCJ9XSxbInBhdGgiLHtkOiJNNCA3YzAtMS43IDEuMy0zIDMtM2gxMyJ9XSxbInBhdGgiLHtkOiJNMTggMjBjLTEuNyAwLTMtMS4zLTMtM1Y0In1dXX0pO3ZhciBLTCxqTWU9bigoKT0+e0tMPVtbInBhdGgiLHtkOiJNMTguNSA4Yy0xLjQgMC0yLjYtLjgtMy4yLTJBNi44NyA2Ljg3IDAgMCAwIDIgOXYxMWEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTguNUMyMiA5LjYgMjAuNCA4IDE4LjUgOCJ9XSxbInBhdGgiLHtkOiJNMiAxNGgyMCJ9XSxbInBhdGgiLHtkOiJNNiAxNHY0In1dLFsicGF0aCIse2Q6Ik0xMCAxNHY0In1dLFsicGF0aCIse2Q6Ik0xNCAxNHY0In1dLFsicGF0aCIse2Q6Ik0xOCAxNHY0In1dXX0pO3ZhciBKTCxXTWU9bigoKT0+e0pMPVtbInBhdGgiLHtkOiJtMTQgMTMtOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM0wxMSA5Ljk5OSJ9XSxbInBhdGgiLHtkOiJNMTUuOTczIDQuMDI3QTEzIDEzIDAgMCAwIDUuOTAyIDIuMzczYy0xLjM5OC4zNDItMS4wOTIgMi4xNTguMjc3IDIuNjAxYTE5LjkgMTkuOSAwIDAgMSA1LjgyMiAzLjAyNCJ9XSxbInBhdGgiLHtkOiJNMTYuMDAxIDExLjk5OWExOS45IDE5LjkgMCAwIDEgMy4wMjQgNS44MjRjLjQ0NCAxLjM2OSAyLjI2IDEuNjc2IDIuNjAzLjI3OEExMyAxMyAwIDAgMCAyMCA4LjA2OSJ9XSxbInBhdGgiLHtkOiJNMTguMzUyIDMuMzUyYTEuMjA1IDEuMjA1IDAgMCAwLTEuNzA0IDBsLTUuMjk2IDUuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsMi4yOTYgMi4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMS43MDQgMGw1LjI5Ni01LjI5NmExLjIwNSAxLjIwNSAwIDAgMCAwLTEuNzA0eiJ9XV19KTt2YXIgZVQsR01lPW4oKCk9PntlVD1bWyJwYXRoIix7ZDoiTTIxIDlWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMGMwIDEuMS45IDIgMiAyaDQifV0sWyJyZWN0Iix7d2lkdGg6IjEwIixoZWlnaHQ6IjciLHg6IjEyIix5OiIxMyIscng6IjIifV1dfSk7dmFyIHRULFlNZT1uKCgpPT57dFQ9W1sicGF0aCIse2Q6Ik0yIDEwaDZWNCJ9XSxbInBhdGgiLHtkOiJtMiA0IDYgNiJ9XSxbInBhdGgiLHtkOiJNMjEgMTBWN2EyIDIgMCAwIDAtMi0yaC03In1dLFsicGF0aCIse2Q6Ik0zIDE0djJhMiAyIDAgMCAwIDIgMmgzIn1dLFsicmVjdCIse3g6IjEyIix5OiIxNCIsd2lkdGg6IjEwIixoZWlnaHQ6IjciLHJ4OiIxIn1dXX0pO3ZhciBhVCxaTWU9bigoKT0+e2FUPVtbInBhdGgiLHtkOiJNMTEgMTdoM3YyYTEgMSAwIDAgMCAxIDFoMmExIDEgMCAwIDAgMS0xdi0zYTMuMTYgMy4xNiAwIDAgMCAyLTJoMWExIDEgMCAwIDAgMS0xdi0yYTEgMSAwIDAgMC0xLTFoLTFhNSA1IDAgMCAwLTItNFYzYTQgNCAwIDAgMC0zLjIgMS42bC0uMy40SDExYTYgNiAwIDAgMC02IDZ2MWE1IDUgMCAwIDAgMiA0djNhMSAxIDAgMCAwIDEgMWgyYTEgMSAwIDAgMCAxLTF6In1dLFsicGF0aCIse2Q6Ik0xNiAxMGguMDEifV0sWyJwYXRoIix7ZDoiTTIgOHYxYTIgMiAwIDAgMCAyIDJoMSJ9XV19KTt2YXIgclQsWE1lPW4oKCk9PntyVD1bWyJwYXRoIix7ZDoiTTE0IDN2MTEifV0sWyJwYXRoIix7ZDoiTTE0IDloLTNhMyAzIDAgMCAxIDAtNmg5In1dLFsicGF0aCIse2Q6Ik0xOCAzdjExIn1dLFsicGF0aCIse2Q6Ik0yMiAxOEgybDQtNCJ9XSxbInBhdGgiLHtkOiJtNiAyMi00LTQifV1dfSk7dmFyIGlULFFNZT1uKCgpPT57aVQ9W1sicGF0aCIse2Q6Ik0xMCAzdjExIn1dLFsicGF0aCIse2Q6Ik0xMCA5SDdhMSAxIDAgMCAxIDAtNmg4In1dLFsicGF0aCIse2Q6Ik0xNCAzdjExIn1dLFsicGF0aCIse2Q6Im0xOCAxNCA0IDRIMiJ9XSxbInBhdGgiLHtkOiJtMjIgMTgtNCA0In1dXX0pO3ZhciBvVCxLTWU9bigoKT0+e29UPVtbInBhdGgiLHtkOiJNMTMgNHYxNiJ9XSxbInBhdGgiLHtkOiJNMTcgNHYxNiJ9XSxbInBhdGgiLHtkOiJNMTkgNEg5LjVhNC41IDQuNSAwIDAgMCAwIDlIMTMifV1dfSk7dmFyIHNULEpNZT1uKCgpPT57c1Q9W1sicGF0aCIse2Q6Ik0xOCAxMWgtNGExIDEgMCAwIDAtMSAxdjVhMSAxIDAgMCAwIDEgMWg0In1dLFsicGF0aCIse2Q6Ik02IDd2MTNhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWNyJ9XSxbInJlY3QiLHt3aWR0aDoiMTYiLGhlaWdodDoiNSIseDoiNCIseToiMiIscng6IjEifV1dfSk7dmFyIG5ULGV6ZT1uKCgpPT57blQ9W1sicGF0aCIse2Q6Im0xMC41IDIwLjUgMTAtMTBhNC45NSA0Ljk1IDAgMSAwLTctN2wtMTAgMTBhNC45NSA0Ljk1IDAgMSAwIDcgN1oifV0sWyJwYXRoIix7ZDoibTguNSA4LjUgNyA3In1dXX0pO3ZhciBsVCx0emU9bigoKT0+e2xUPVtbInBhdGgiLHtkOiJNMTIgMTd2NSJ9XSxbInBhdGgiLHtkOiJNMTUgOS4zNFY3YTEgMSAwIDAgMSAxLTEgMiAyIDAgMCAwIDAtNEg3Ljg5In1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTkgOXYxLjc2YTIgMiAwIDAgMS0xLjExIDEuNzlsLTEuNzguOUEyIDIgMCAwIDAgNSAxNS4yNFYxNmExIDEgMCAwIDAgMSAxaDExIn1dXX0pO3ZhciBjVCxhemU9bigoKT0+e2NUPVtbInBhdGgiLHtkOiJNMTIgMTd2NSJ9XSxbInBhdGgiLHtkOiJNOSAxMC43NmEyIDIgMCAwIDEtMS4xMSAxLjc5bC0xLjc4LjlBMiAyIDAgMCAwIDUgMTUuMjRWMTZhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xdi0uNzZhMiAyIDAgMCAwLTEuMTEtMS43OWwtMS43OC0uOUEyIDIgMCAwIDEgMTUgMTAuNzZWN2ExIDEgMCAwIDEgMS0xIDIgMiAwIDAgMCAwLTRIOGEyIDIgMCAwIDAgMCA0IDEgMSAwIDAgMSAxIDF6In1dXX0pO3ZhciBkVCxyemU9bigoKT0+e2RUPVtbInBhdGgiLHtkOiJtMTIgOS04LjQxNCA4LjQxNEEyIDIgMCAwIDAgMyAxOC44Mjh2MS4zNDRhMiAyIDAgMCAxLS41ODYgMS40MTRBMiAyIDAgMCAxIDMuODI4IDIxaDEuMzQ0YTIgMiAwIDAgMCAxLjQxNC0uNTg2TDE1IDEyIn1dLFsicGF0aCIse2Q6Im0xOCA5IC40LjRhMSAxIDAgMSAxLTMgM2wtMy44LTMuOGExIDEgMCAxIDEgMy0zbC40LjQgMy40LTMuNGExIDEgMCAxIDEgMyAzeiJ9XSxbInBhdGgiLHtkOiJtMiAyMiAuNDE0LS40MTQifV1dfSk7dmFyIGZULGl6ZT1uKCgpPT57ZlQ9W1sicGF0aCIse2Q6Im0xMiAxNC0xIDEifV0sWyJwYXRoIix7ZDoibTEzLjc1IDE4LjI1LTEuMjUgMS40MiJ9XSxbInBhdGgiLHtkOiJNMTcuNzc1IDUuNjU0YTE1LjY4IDE1LjY4IDAgMCAwLTEyLjEyMSAxMi4xMiJ9XSxbInBhdGgiLHtkOiJNMTguOCA5LjNhMSAxIDAgMCAwIDIuMSA3LjcifV0sWyJwYXRoIix7ZDoiTTIxLjk2NCAyMC43MzJhMSAxIDAgMCAxLTEuMjMyIDEuMjMybC0xOC01YTEgMSAwIDAgMS0uNjk1LTEuMjMyQTE5LjY4IDE5LjY4IDAgMCAxIDE1LjczMiAyLjAzN2ExIDEgMCAwIDEgMS4yMzIuNjk1eiJ9XV19KTt2YXIgdVQsb3plPW4oKCk9Pnt1VD1bWyJwYXRoIix7ZDoiTTIgMjJoMjAifV0sWyJwYXRoIix7ZDoiTTMuNzcgMTAuNzcgMiA5bDItNC41IDEuMS41NWMuNTUuMjguOS44NC45IDEuNDVzLjM1IDEuMTcuOSAxLjQ1TDggOC41bDMtNiAxLjA1LjUzYTIgMiAwIDAgMSAxLjA5IDEuNTJsLjcyIDUuNGEyIDIgMCAwIDAgMS4wOSAxLjUybDQuNCAyLjJjLjQyLjIyLjc4LjU1IDEuMDEuOTZsLjYgMS4wM2MuNDkuODgtLjA2IDEuOTgtMS4wNiAyLjFsLTEuMTguMTVjLS40Ny4wNi0uOTUtLjAyLTEuMzctLjI0TDQuMjkgMTEuMTVhMiAyIDAgMCAxLS41Mi0uMzhaIn1dXX0pO3ZhciBwVCxzemU9bigoKT0+e3BUPVtbInBhdGgiLHtkOiJNMiAyMmgyMCJ9XSxbInBhdGgiLHtkOiJNNi4zNiAxNy40IDQgMTdsLTItNCAxLjEtLjU1YTIgMiAwIDAgMSAxLjggMGwuMTcuMWEyIDIgMCAwIDAgMS44IDBMOCAxMiA1IDZsLjktLjQ1YTIgMiAwIDAgMSAyLjA5LjJsNC4wMiAzYTIgMiAwIDAgMCAyLjEuMmw0LjE5LTIuMDZhMi40MSAyLjQxIDAgMCAxIDEuNzMtLjE3TDIxIDdhMS40IDEuNCAwIDAgMSAuODcgMS45OWwtLjM4Ljc2Yy0uMjMuNDYtLjYuODQtMS4wNyAxLjA4TDcuNTggMTcuMmEyIDIgMCAwIDEtMS4yMi4xOFoifV1dfSk7dmFyIGhULG56ZT1uKCgpPT57aFQ9W1sicGF0aCIse2Q6Ik0xNy44IDE5LjIgMTYgMTFsMy41LTMuNUMyMSA2IDIxLjUgNCAyMSAzYy0xLS41LTMgMC00LjUgMS41TDEzIDggNC44IDYuMmMtLjUtLjEtLjkuMS0xLjEuNWwtLjMuNWMtLjIuNS0uMSAxIC4zIDEuM0w5IDEybC0yIDNINGwtMSAxIDMgMiAyIDMgMS0xdi0zbDMtMiAzLjUgNS4zYy4zLjQuOC41IDEuMy4zbC41LS4yYy40LS4zLjYtLjcuNS0xLjJ6In1dXX0pO3ZhciBtVCxsemU9bigoKT0+e21UPVtbInBhdGgiLHtkOiJNNSA1YTIgMiAwIDAgMSAzLjAwOC0xLjcyOGwxMS45OTcgNi45OThhMiAyIDAgMCAxIC4wMDMgMy40NThsLTEyIDdBMiAyIDAgMCAxIDUgMTl6In1dXX0pO3ZhciBnVCxjemU9bigoKT0+e2dUPVtbInBhdGgiLHtkOiJNOSAydjYifV0sWyJwYXRoIix7ZDoiTTE1IDJ2NiJ9XSxbInBhdGgiLHtkOiJNMTIgMTd2NSJ9XSxbInBhdGgiLHtkOiJNNSA4aDE0In1dLFsicGF0aCIse2Q6Ik02IDExVjhoMTJ2M2E2IDYgMCAxIDEtMTIgMFoifV1dfSk7dmFyIGMzLGR6ZT1uKCgpPT57YzM9W1sicGF0aCIse2Q6Ik02LjMgMjAuM2EyLjQgMi40IDAgMCAwIDMuNCAwTDEyIDE4bC02LTYtMi4zIDIuM2EyLjQgMi40IDAgMCAwIDAgMy40WiJ9XSxbInBhdGgiLHtkOiJtMiAyMiAzLTMifV0sWyJwYXRoIix7ZDoiTTcuNSAxMy41IDEwIDExIn1dLFsicGF0aCIse2Q6Ik0xMC41IDE2LjUgMTMgMTQifV0sWyJwYXRoIix7ZDoibTE4IDMtNCA0aDZsLTQgNCJ9XV19KTt2YXIgeFQsZnplPW4oKCk9Pnt4VD1bWyJwYXRoIix7ZDoiTTEyIDIydi01In1dLFsicGF0aCIse2Q6Ik0xNSA4VjIifV0sWyJwYXRoIix7ZDoiTTE3IDhhMSAxIDAgMCAxIDEgMXY0YTQgNCAwIDAgMS00IDRoLTRhNCA0IDAgMCAxLTQtNFY5YTEgMSAwIDAgMSAxLTF6In1dLFsicGF0aCIse2Q6Ik05IDhWMiJ9XV19KTt2YXIgYlQsdXplPW4oKCk9PntiVD1bWyJwYXRoIix7ZDoiTTUgMTJoMTQifV0sWyJwYXRoIix7ZDoiTTEyIDV2MTQifV1dfSk7dmFyIHZULHB6ZT1uKCgpPT57dlQ9W1sicGF0aCIse2Q6Ik0zIDJ2MWMwIDEgMiAxIDIgMlMzIDYgMyA3czIgMSAyIDItMiAxLTIgMiAyIDEgMiAyIn1dLFsicGF0aCIse2Q6Ik0xOCA2aC4wMSJ9XSxbInBhdGgiLHtkOiJNNiAxOGguMDEifV0sWyJwYXRoIix7ZDoiTTIwLjgzIDguODNhNCA0IDAgMCAwLTUuNjYtNS42NmwtMTIgMTJhNCA0IDAgMSAwIDUuNjYgNS42NloifV0sWyJwYXRoIix7ZDoiTTE4IDExLjY2VjIyYTQgNCAwIDAgMCA0LTRWNiJ9XV19KTt2YXIgeVQsaHplPW4oKCk9Pnt5VD1bWyJwYXRoIix7ZDoiTTIwIDNhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0yMCAwVjVhMiAyIDAgMCAxIDItMnoifV0sWyJwYXRoIix7ZDoibTggMTAgNCA0IDQtNCJ9XV19KTt2YXIgd1QsbXplPW4oKCk9Pnt3VD1bWyJwYXRoIix7ZDoiTTEzIDE3YTEgMSAwIDEgMC0yIDBsLjUgNC41YTAuNSAwLjUgMCAwIDAgMSAweiIsZmlsbDoiY3VycmVudENvbG9yIn1dLFsicGF0aCIse2Q6Ik0xNi44NSAxOC41OGE5IDkgMCAxIDAtOS43IDAifV0sWyJwYXRoIix7ZDoiTTggMTRhNSA1IDAgMSAxIDggMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjExIixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IifV1dfSk7dmFyIE1ULGd6ZT1uKCgpPT57TVQ9W1sicGF0aCIse2Q6Ik0xMCA0LjVWNGEyIDIgMCAwIDAtMi40MS0xLjk1NyJ9XSxbInBhdGgiLHtkOiJNMTMuOSA4LjRhMiAyIDAgMCAwLTEuMjYtMS4yOTUifV0sWyJwYXRoIix7ZDoiTTIxLjcgMTYuMkE4IDggMCAwIDAgMjIgMTR2LTNhMiAyIDAgMSAwLTQgMHYtMWEyIDIgMCAwIDAtMy42My0xLjE1OCJ9XSxbInBhdGgiLHtkOiJtNyAxNS0xLjgtMS44YTIgMiAwIDAgMC0yLjc5IDIuODZMNiAxOS43YTcuNzQgNy43NCAwIDAgMCA2IDIuM2gyYTggOCAwIDAgMCA1LjY1Ny0yLjM0MyJ9XSxbInBhdGgiLHtkOiJNNiA2djgifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XV19KTt2YXIgelQseHplPW4oKCk9Pnt6VD1bWyJwYXRoIix7ZDoiTTIyIDE0YTggOCAwIDAgMS04IDgifV0sWyJwYXRoIix7ZDoiTTE4IDExdi0xYTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMiJ9XSxbInBhdGgiLHtkOiJNMTQgMTBWOWEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MSJ9XSxbInBhdGgiLHtkOiJNMTAgOS41VjRhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjEwIn1dLFsicGF0aCIse2Q6Ik0xOCAxMWEyIDIgMCAxIDEgNCAwdjNhOCA4IDAgMCAxLTggOGgtMmMtMi44IDAtNC41LS44Ni01Ljk5LTIuMzRsLTMuNi0zLjZhMiAyIDAgMCAxIDIuODMtMi44Mkw3IDE1In1dXX0pO3ZhciBrVCxiemU9bigoKT0+e2tUPVtbInBhdGgiLHtkOiJNMTggOGEyIDIgMCAwIDAgMC00IDIgMiAwIDAgMC00IDAgMiAyIDAgMCAwLTQgMCAyIDIgMCAwIDAtNCAwIDIgMiAwIDAgMCAwIDQifV0sWyJwYXRoIix7ZDoiTTEwIDIyIDkgOCJ9XSxbInBhdGgiLHtkOiJtMTQgMjIgMS0xNCJ9XSxbInBhdGgiLHtkOiJNMjAgOGMuNSAwIC45LjQuOCAxbC0yLjYgMTJjLS4xLjUtLjcgMS0xLjIgMUg3Yy0uNiAwLTEuMS0uNC0xLjItMUwzLjIgOWMtLjEtLjYuMy0xIC44LTFaIn1dXX0pO3ZhciBTVCx2emU9bigoKT0+e1NUPVtbInBhdGgiLHtkOiJNMTguNiAxNC40Yy44LS44LjgtMiAwLTIuOGwtOC4xLTguMWE0Ljk1IDQuOTUgMCAxIDAtNy4xIDcuMWw4LjEgOC4xYy45LjcgMi4xLjcgMi45LS4xWiJ9XSxbInBhdGgiLHtkOiJtMjIgMjItNS41LTUuNSJ9XV19KTt2YXIgQ1QseXplPW4oKCk9PntDVD1bWyJwYXRoIix7ZDoiTTE4IDdjMC01LjMzMy04LTUuMzMzLTggMCJ9XSxbInBhdGgiLHtkOiJNMTAgN3YxNCJ9XSxbInBhdGgiLHtkOiJNNiAyMWgxMiJ9XSxbInBhdGgiLHtkOiJNNiAxM2gxMCJ9XV19KTt2YXIgTFQsd3plPW4oKCk9PntMVD1bWyJwYXRoIix7ZDoiTTE4LjM2IDYuNjRBOSA5IDAgMCAxIDIwLjc3IDE1In1dLFsicGF0aCIse2Q6Ik02LjE2IDYuMTZhOSA5IDAgMSAwIDEyLjY4IDEyLjY4In1dLFsicGF0aCIse2Q6Ik0xMiAydjQifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XV19KTt2YXIgVFQsTXplPW4oKCk9PntUVD1bWyJwYXRoIix7ZDoiTTEyIDJ2MTAifV0sWyJwYXRoIix7ZDoiTTE4LjQgNi42YTkgOSAwIDEgMS0xMi43Ny4wNCJ9XV19KTt2YXIgX1QsenplPW4oKCk9PntfVD1bWyJwYXRoIix7ZDoiTTIgM2gyMCJ9XSxbInBhdGgiLHtkOiJNMjEgM3YxMWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlYzIn1dLFsicGF0aCIse2Q6Im03IDIxIDUtNSA1IDUifV1dfSk7dmFyIEFULGt6ZT1uKCgpPT57QVQ9W1sicGF0aCIse2Q6Ik02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Ik02IDlWM2ExIDEgMCAwIDEgMS0xaDEwYTEgMSAwIDAgMSAxIDF2NiJ9XSxbInJlY3QiLHt4OiI2Iix5OiIxNCIsd2lkdGg6IjEyIixoZWlnaHQ6IjgiLHJ4OiIxIn1dXX0pO3ZhciAkVCxTemU9bigoKT0+eyRUPVtbInBhdGgiLHtkOiJNMTMuNSAyMkg3YTEgMSAwIDAgMS0xLTF2LTZhMSAxIDAgMCAxIDEtMWgxMGExIDEgMCAwIDEgMSAxdi41In1dLFsicGF0aCIse2Q6Im0xNiAxOSAyIDIgNC00In1dLFsicGF0aCIse2Q6Ik02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNNiA5VjNhMSAxIDAgMCAxIDEtMWgxMGExIDEgMCAwIDEgMSAxdjYifV1dfSk7dmFyIERULEN6ZT1uKCgpPT57RFQ9W1sicGF0aCIse2Q6Ik01IDcgMyA1In1dLFsicGF0aCIse2Q6Ik05IDZWMyJ9XSxbInBhdGgiLHtkOiJtMTMgNyAyLTIifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjEzIixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xMS44MyAxMkgyMGEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LTRhMiAyIDAgMCAxIDItMmgyLjE3In1dLFsicGF0aCIse2Q6Ik0xNiAxNmgyIn1dXX0pO3ZhciBFVCxMemU9bigoKT0+e0VUPVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTYiLHg6IjIiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xMiA5djExIn1dLFsicGF0aCIse2Q6Ik0yIDloMTNhMiAyIDAgMCAxIDIgMnY5In1dXX0pO3ZhciBOVCxUemU9bigoKT0+e05UPVtbInBhdGgiLHtkOiJNMTUuMzkgNC4zOWExIDEgMCAwIDAgMS42OC0uNDc0IDIuNSAyLjUgMCAxIDEgMy4wMTQgMy4wMTUgMSAxIDAgMCAwLS40NzQgMS42OGwxLjY4MyAxLjY4MmEyLjQxNCAyLjQxNCAwIDAgMSAwIDMuNDE0TDE5LjYxIDE1LjM5YTEgMSAwIDAgMS0xLjY4LS40NzQgMi41IDIuNSAwIDEgMC0zLjAxNCAzLjAxNSAxIDEgMCAwIDEgLjQ3NCAxLjY4bC0xLjY4MyAxLjY4MmEyLjQxNCAyLjQxNCAwIDAgMS0zLjQxNCAwTDguNjEgMTkuNjFhMSAxIDAgMCAwLTEuNjguNDc0IDIuNSAyLjUgMCAxIDEtMy4wMTQtMy4wMTUgMSAxIDAgMCAwIC40NzQtMS42OGwtMS42ODMtMS42ODJhMi40MTQgMi40MTQgMCAwIDEgMC0zLjQxNEw0LjM5IDguNjFhMSAxIDAgMCAxIDEuNjguNDc0IDIuNSAyLjUgMCAxIDAgMy4wMTQtMy4wMTUgMSAxIDAgMCAxLS40NzQtMS42OGwxLjY4My0xLjY4MmEyLjQxNCAyLjQxNCAwIDAgMSAzLjQxNCAweiJ9XV19KTt2YXIgUFQsX3plPW4oKCk9PntQVD1bWyJwYXRoIix7ZDoiTTIuNSAxNi44OGExIDEgMCAwIDEtLjMyLTEuNDNsOS0xMy4wMmExIDEgMCAwIDEgMS42NCAwbDkgMTMuMDFhMSAxIDAgMCAxLS4zMiAxLjQ0bC04LjUxIDQuODZhMiAyIDAgMCAxLTEuOTggMFoifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MjAifV1dfSk7dmFyIElULEF6ZT1uKCgpPT57SVQ9W1sicmVjdCIse3dpZHRoOiI1IixoZWlnaHQ6IjUiLHg6IjMiLHk6IjMiLHJ4OiIxIn1dLFsicmVjdCIse3dpZHRoOiI1IixoZWlnaHQ6IjUiLHg6IjE2Iix5OiIzIixyeDoiMSJ9XSxbInJlY3QiLHt3aWR0aDoiNSIsaGVpZ2h0OiI1Iix4OiIzIix5OiIxNiIscng6IjEifV0sWyJwYXRoIix7ZDoiTTIxIDE2aC0zYTIgMiAwIDAgMC0yIDJ2MyJ9XSxbInBhdGgiLHtkOiJNMjEgMjF2LjAxIn1dLFsicGF0aCIse2Q6Ik0xMiA3djNhMiAyIDAgMCAxLTIgMkg3In1dLFsicGF0aCIse2Q6Ik0zIDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgM2guMDEifV0sWyJwYXRoIix7ZDoiTTEyIDE2di4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTJoMSJ9XSxbInBhdGgiLHtkOiJNMjEgMTJ2LjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAyMXYtMSJ9XV19KTt2YXIgRlQsJHplPW4oKCk9PntGVD1bWyJwYXRoIix7ZDoiTTE2IDNhMiAyIDAgMCAwLTIgMnY2YTIgMiAwIDAgMCAyIDIgMSAxIDAgMCAxIDEgMXYxYTIgMiAwIDAgMS0yIDIgMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDEgNiA2IDAgMCAwIDYtNlY1YTIgMiAwIDAgMC0yLTJ6In1dLFsicGF0aCIse2Q6Ik01IDNhMiAyIDAgMCAwLTIgMnY2YTIgMiAwIDAgMCAyIDIgMSAxIDAgMCAxIDEgMXYxYTIgMiAwIDAgMS0yIDIgMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDEgNiA2IDAgMCAwIDYtNlY1YTIgMiAwIDAgMC0yLTJ6In1dXX0pO3ZhciBPVCxEemU9bigoKT0+e09UPVtbInBhdGgiLHtkOiJNMTMgMTZhMyAzIDAgMCAxIDIuMjQgNSJ9XSxbInBhdGgiLHtkOiJNMTggMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOCAyMWgtOGE0IDQgMCAwIDEtNC00IDcgNyAwIDAgMSA3LTdoLjJMOS42IDYuNGExIDEgMCAxIDEgMi44LTIuOEwxNS44IDdoLjJjMy4zIDAgNiAyLjcgNiA2djFhMiAyIDAgMCAxLTIgMmgtMWEzIDMgMCAwIDAtMyAzIn1dLFsicGF0aCIse2Q6Ik0yMCA4LjU0VjRhMiAyIDAgMSAwLTQgMHYzIn1dLFsicGF0aCIse2Q6Ik03LjYxMiAxMi41MjRhMyAzIDAgMSAwLTEuNiA0LjMifV1dfSk7dmFyIEJULEV6ZT1uKCgpPT57QlQ9W1sicGF0aCIse2Q6Ik0xOS4wNyA0LjkzQTEwIDEwIDAgMCAwIDYuOTkgMy4zNCJ9XSxbInBhdGgiLHtkOiJNNCA2aC4wMSJ9XSxbInBhdGgiLHtkOiJNMi4yOSA5LjYyQTEwIDEwIDAgMSAwIDIxLjMxIDguMzUifV0sWyJwYXRoIix7ZDoiTTE2LjI0IDcuNzZBNiA2IDAgMSAwIDguMjMgMTYuNjcifV0sWyJwYXRoIix7ZDoiTTEyIDE4aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTcuOTkgMTEuNjZBNiA2IDAgMCAxIDE1Ljc3IDE2LjY3In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV0sWyJwYXRoIix7ZDoibTEzLjQxIDEwLjU5IDUuNjYtNS42NiJ9XV19KTt2YXIgUlQsTnplPW4oKCk9PntSVD1bWyJwYXRoIix7ZDoiTTEyIDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTQgMTUuNDY0MWE0IDQgMCAwIDEtNCAwTDcuNTI3ODYgMTkuNzQ1OTcgQSAxIDEgMCAwIDAgNy45OTMwMyAyMS4xNjIxMSAxMCAxMCAwIDAgMCAxNi4wMDY5NyAyMS4xNjIxMSAxIDEgMCAwIDAgMTYuNDcyMTQgMTkuNzQ1OTd6In1dLFsicGF0aCIse2Q6Ik0xNiAxMmE0IDQgMCAwIDAtMi0zLjQ2NGwyLjQ3Mi00LjI4MmExIDEgMCAwIDEgMS40Ni0uMzA1IDEwIDEwIDAgMCAxIDQuMDA2IDYuOTRBMSAxIDAgMCAxIDIxIDEyeiJ9XSxbInBhdGgiLHtkOiJNOCAxMmE0IDQgMCAwIDEgMi0zLjQ2NEw3LjUyOCA0LjI1NGExIDEgMCAwIDAtMS40Ni0uMzA1IDEwIDEwIDAgMCAwLTQuMDA2IDYuOTRBMSAxIDAgMCAwIDMgMTJ6In1dXX0pO3ZhciBIVCxQemU9bigoKT0+e0hUPVtbInBhdGgiLHtkOiJNMyAxMmgzLjI4YTEgMSAwIDAgMSAuOTQ4LjY4NGwyLjI5OCA3LjkzNGEuNS41IDAgMCAwIC45Ni0uMDQ0TDEzLjgyIDQuNzcxQTEgMSAwIDAgMSAxNC43OTIgNEgyMSJ9XV19KTt2YXIgcVQsSXplPW4oKCk9PntxVD1bWyJwYXRoIix7ZDoiTTUgMTZ2MiJ9XSxbInBhdGgiLHtkOiJNMTkgMTZ2MiJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiOCIseDoiMiIseToiOCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTE4IDEyaC4wMSJ9XV19KTt2YXIgVlQsRnplPW4oKCk9PntWVD1bWyJwYXRoIix7ZDoiTTQuOSAxNi4xQzEgMTIuMiAxIDUuOCA0LjkgMS45In1dLFsicGF0aCIse2Q6Ik03LjggNC43YTYuMTQgNi4xNCAwIDAgMC0uOCA3LjUifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI5IixyOiIyIn1dLFsicGF0aCIse2Q6Ik0xNi4yIDQuOGMyIDIgMi4yNiA1LjExLjggNy40NyJ9XSxbInBhdGgiLHtkOiJNMTkuMSAxLjlhOS45NiA5Ljk2IDAgMCAxIDAgMTQuMSJ9XSxbInBhdGgiLHtkOiJNOS41IDE4aDUifV0sWyJwYXRoIix7ZDoibTggMjIgNC0xMSA0IDExIn1dXX0pO3ZhciBVVCxPemU9bigoKT0+e1VUPVtbInBhdGgiLHtkOiJNMTYuMjQ3IDcuNzYxYTYgNiAwIDAgMSAwIDguNDc4In1dLFsicGF0aCIse2Q6Ik0xOS4wNzUgNC45MzNhMTAgMTAgMCAwIDEgMCAxNC4xMzQifV0sWyJwYXRoIix7ZDoiTTQuOTI1IDE5LjA2N2ExMCAxMCAwIDAgMSAwLTE0LjEzNCJ9XSxbInBhdGgiLHtkOiJNNy43NTMgMTYuMjM5YTYgNiAwIDAgMSAwLTguNDc4In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV1dfSk7dmFyIGpULEJ6ZT1uKCgpPT57alQ9W1sicGF0aCIse2Q6Ik0yMC4zNCAxNy41MmExMCAxMCAwIDEgMC0yLjgyIDIuODIifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJtMTMuNDEgMTMuNDEgNC4xOCA0LjE4In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV1dfSk7dmFyIFdULFJ6ZT1uKCgpPT57V1Q9W1sicGF0aCIse2Q6Ik01IDE1aDE0In1dLFsicGF0aCIse2Q6Ik01IDloMTQifV0sWyJwYXRoIix7ZDoibTE0IDIwLTUtNSA2LTYtNS01In1dXX0pO3ZhciBHVCxIemU9bigoKT0+e0dUPVtbInBhdGgiLHtkOiJNMjIgMTdhMTAgMTAgMCAwIDAtMjAgMCJ9XSxbInBhdGgiLHtkOiJNNiAxN2E2IDYgMCAwIDEgMTIgMCJ9XSxbInBhdGgiLHtkOiJNMTAgMTdhMiAyIDAgMCAxIDQgMCJ9XV19KTt2YXIgWVQscXplPW4oKCk9PntZVD1bWyJwYXRoIix7ZDoiTTEzIDIySDRhMiAyIDAgMCAxIDAtNGgxMiJ9XSxbInBhdGgiLHtkOiJNMTMuMjM2IDE4YTMgMyAwIDAgMC0yLjItNSJ9XSxbInBhdGgiLHtkOiJNMTYgOWguMDEifV0sWyJwYXRoIix7ZDoiTTE2LjgyIDMuOTRhMyAzIDAgMSAxIDMuMjM3IDQuODY4bDEuODE1IDIuNTg3YTEuNSAxLjUgMCAwIDEtMS41IDIuMWwtMi44NzItLjQ1M2EzIDMgMCAwIDAtMy41IDMifV0sWyJwYXRoIix7ZDoiTTE3IDQuOTg4YTMgMyAwIDEgMC01LjIgMi4wNTJBNyA3IDAgMCAwIDQgMTQuMDE1IDQgNCAwIDAgMCA4IDE4In1dXX0pO3ZhciBaVCxWemU9bigoKT0+e1pUPVtbInJlY3QiLHt3aWR0aDoiMTIiLGhlaWdodDoiMjAiLHg6IjYiLHk6IjIiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxMiIseDoiMiIseToiNiIscng6IjIifV1dfSk7dmFyIFhULFV6ZT1uKCgpPT57WFQ9W1sicGF0aCIse2Q6Ik00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIn1dLFsicGF0aCIse2Q6Ik0xMiA2LjV2MTEifV0sWyJwYXRoIix7ZDoiTTE1IDkuNGE0IDQgMCAxIDAgMCA1LjIifV1dfSk7dmFyIFFULGp6ZT1uKCgpPT57UVQ9W1sicGF0aCIse2Q6Ik00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIn1dLFsicGF0aCIse2Q6Ik04IDEyaDUifV0sWyJwYXRoIix7ZDoiTTE2IDkuNWE0IDQgMCAxIDAgMCA1LjIifV1dfSk7dmFyIEtULFd6ZT1uKCgpPT57S1Q9W1sicGF0aCIse2Q6Ik00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIn1dLFsicGF0aCIse2Q6Ik04IDdoOCJ9XSxbInBhdGgiLHtkOiJNMTIgMTcuNSA4IDE1aDFhNCA0IDAgMCAwIDAtOCJ9XSxbInBhdGgiLHtkOiJNOCAxMWg4In1dXX0pO3ZhciBKVCxHemU9bigoKT0+e0pUPVtbInBhdGgiLHtkOiJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiJ9XSxbInBhdGgiLHtkOiJtMTIgMTAgMy0zIn1dLFsicGF0aCIse2Q6Im05IDcgMyAzdjcuNSJ9XSxbInBhdGgiLHtkOiJNOSAxMWg2In1dLFsicGF0aCIse2Q6Ik05IDE1aDYifV1dfSk7dmFyIGVfLFl6ZT1uKCgpPT57ZV89W1sicGF0aCIse2Q6Ik00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIn1dLFsicGF0aCIse2Q6Ik04IDEzaDUifV0sWyJwYXRoIix7ZDoiTTEwIDE3VjkuNWEyLjUgMi41IDAgMCAxIDUgMCJ9XSxbInBhdGgiLHtkOiJNOCAxN2g3In1dXX0pO3ZhciB0XyxaemU9bigoKT0+e3RfPVtbInBhdGgiLHtkOiJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiJ9XSxbInBhdGgiLHtkOiJNOCAxNWg1In1dLFsicGF0aCIse2Q6Ik04IDExaDVhMiAyIDAgMSAwIDAtNGgtM3YxMCJ9XV19KTt2YXIgYV8sWHplPW4oKCk9PnthXz1bWyJwYXRoIix7ZDoiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoifV0sWyJwYXRoIix7ZDoiTTEwIDE3VjdoNSJ9XSxbInBhdGgiLHtkOiJNMTAgMTFoNCJ9XSxbInBhdGgiLHtkOiJNOCAxNWg1In1dXX0pO3ZhciByXyxRemU9bigoKT0+e3JfPVtbInBhdGgiLHtkOiJNMTMgMTZIOCJ9XSxbInBhdGgiLHtkOiJNMTQgOEg4In1dLFsicGF0aCIse2Q6Ik0xNiAxMkg4In1dLFsicGF0aCIse2Q6Ik00IDNhMSAxIDAgMCAxIDEtMSAxLjMgMS4zIDAgMCAxIC43LjJsLjkzMy42YTEuMyAxLjMgMCAwIDAgMS40IDBsLjkzNC0uNmExLjMgMS4zIDAgMCAxIDEuNCAwbC45MzMuNmExLjMgMS4zIDAgMCAwIDEuNCAwbC45MzMtLjZhMS4zIDEuMyAwIDAgMSAxLjQgMGwuOTM0LjZhMS4zIDEuMyAwIDAgMCAxLjQgMGwuOTMzLS42QTEuMyAxLjMgMCAwIDEgMTkgMmExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDEgMS4zIDEuMyAwIDAgMS0uNy0uMmwtLjkzMy0uNmExLjMgMS4zIDAgMCAwLTEuNCAwbC0uOTM0LjZhMS4zIDEuMyAwIDAgMS0xLjQgMGwtLjkzMy0uNmExLjMgMS4zIDAgMCAwLTEuNCAwbC0uOTMzLjZhMS4zIDEuMyAwIDAgMS0xLjQgMGwtLjkzNC0uNmExLjMgMS4zIDAgMCAwLTEuNCAwbC0uOTMzLjZhMS4zIDEuMyAwIDAgMS0uNy4yIDEgMSAwIDAgMS0xLTF6In1dXX0pO3ZhciBpXyxLemU9bigoKT0+e2lfPVtbInBhdGgiLHtkOiJNMTAgNi41djExYTUuNSA1LjUgMCAwIDAgNS41LTUuNSJ9XSxbInBhdGgiLHtkOiJtMTQgOC02IDMifV0sWyJwYXRoIix7ZDoiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMXoifV1dfSk7dmFyIG9fLEp6ZT1uKCgpPT57b189W1sicGF0aCIse2Q6Ik00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIn1dLFsicGF0aCIse2Q6Ik0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgifV0sWyJwYXRoIix7ZDoiTTEyIDE3LjV2LTExIn1dXX0pO3ZhciBzXyxla2U9bigoKT0+e3NfPVtbInBhdGgiLHtkOiJNMTQgNHYxNkgzYTEgMSAwIDAgMS0xLTFWNWExIDEgMCAwIDEgMS0xeiJ9XSxbImNpcmNsZSIse2N4OiIxNCIsY3k6IjEyIixyOiI4In1dXX0pO3ZhciBkMyx0a2U9bigoKT0+e2QzPVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTIiLHg6IjIiLHk6IjYiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xMiAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTE3IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNNyAxMmguMDEifV1dfSk7dmFyIG5fLGFrZT1uKCgpPT57bl89W1sicGF0aCIse2Q6Ik0yMCA2YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC00YTIgMiAwIDAgMS0xLjYtLjhsLTEuNi0yLjEzYTEgMSAwIDAgMC0xLjYgMEw5LjYgMTcuMkEyIDIgMCAwIDEgOCAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yeiJ9XV19KTt2YXIgbF8scmtlPW4oKCk9PntsXz1bWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjEyIix4OiIyIix5OiI2IixyeDoiMiJ9XV19KTt2YXIgY18saWtlPW4oKCk9PntjXz1bWyJyZWN0Iix7d2lkdGg6IjEyIixoZWlnaHQ6IjIwIix4OiI2Iix5OiIyIixyeDoiMiJ9XV19KTt2YXIgZF8sb2tlPW4oKCk9PntkXz1bWyJwYXRoIix7ZDoiTTcgMTlINC44MTVhMS44MyAxLjgzIDAgMCAxLTEuNTctLjg4MSAxLjc4NSAxLjc4NSAwIDAgMS0uMDA0LTEuNzg0TDcuMTk2IDkuNSJ9XSxbInBhdGgiLHtkOiJNMTEgMTloOC4yMDNhMS44MyAxLjgzIDAgMCAwIDEuNTU2LS44OSAxLjc4NCAxLjc4NCAwIDAgMCAwLTEuNzc1bC0xLjIyNi0yLjEyIn1dLFsicGF0aCIse2Q6Im0xNCAxNi0zIDMgMyAzIn1dLFsicGF0aCIse2Q6Ik04LjI5MyAxMy41OTYgNy4xOTYgOS41IDMuMSAxMC41OTgifV0sWyJwYXRoIix7ZDoibTkuMzQ0IDUuODExIDEuMDkzLTEuODkyQTEuODMgMS44MyAwIDAgMSAxMS45ODUgM2ExLjc4NCAxLjc4NCAwIDAgMSAxLjU0Ni44ODhsMy45NDMgNi44NDMifV0sWyJwYXRoIix7ZDoibTEzLjM3OCA5LjYzMyA0LjA5NiAxLjA5OCAxLjA5Ny00LjA5NiJ9XV19KTt2YXIgZl8sc2tlPW4oKCk9PntmXz1bWyJwYXRoIix7ZDoibTE1IDE0IDUtNS01LTUifV0sWyJwYXRoIix7ZDoiTTIwIDlIOS41QTUuNSA1LjUgMCAwIDAgNCAxNC41QTUuNSA1LjUgMCAwIDAgOS41IDIwSDEzIn1dXX0pO3ZhciB1Xyxua2U9bigoKT0+e3VfPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE3IixyOiIxIn1dLFsicGF0aCIse2Q6Ik0yMSA3djZoLTYifV0sWyJwYXRoIix7ZDoiTTMgMTdhOSA5IDAgMCAxIDktOSA5IDkgMCAwIDEgNiAyLjNsMyAyLjcifV1dfSk7dmFyIHBfLGxrZT1uKCgpPT57cF89W1sicGF0aCIse2Q6Ik0yMSA3djZoLTYifV0sWyJwYXRoIix7ZDoiTTMgMTdhOSA5IDAgMCAxIDktOSA5IDkgMCAwIDEgNiAyLjNsMyAyLjcifV1dfSk7dmFyIGhfLGNrZT1uKCgpPT57aF89W1sicGF0aCIse2Q6Ik0yMSAxMmE5IDkgMCAwIDAtOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4In1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1In1dLFsicGF0aCIse2Q6Ik0zIDEyYTkgOSAwIDAgMCA5IDkgOS43NSA5Ljc1IDAgMCAwIDYuNzQtMi43NEwyMSAxNiJ9XSxbInBhdGgiLHtkOiJNMTYgMTZoNXY1In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEifV1dfSk7dmFyIG1fLGRrZT1uKCgpPT57bV89W1sicGF0aCIse2Q6Ik0yMSAxMmE5IDkgMCAwIDAtOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4In1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1In1dLFsicGF0aCIse2Q6Ik0zIDEyYTkgOSAwIDAgMCA5IDkgOS43NSA5Ljc1IDAgMCAwIDYuNzQtMi43NEwyMSAxNiJ9XSxbInBhdGgiLHtkOiJNMTYgMTZoNXY1In1dXX0pO3ZhciBnXyxma2U9bigoKT0+e2dfPVtbInBhdGgiLHtkOiJNMjEgOEwxOC43NCA1Ljc0QTkuNzUgOS43NSAwIDAgMCAxMiAzQzExIDMgMTAuMDMgMy4xNiA5LjEzIDMuNDcifV0sWyJwYXRoIix7ZDoiTTggMTZIM3Y1In1dLFsicGF0aCIse2Q6Ik0zIDEyQzMgOS41MSA0IDcuMjYgNS42NCA1LjY0In1dLFsicGF0aCIse2Q6Im0zIDE2IDIuMjYgMi4yNkE5Ljc1IDkuNzUgMCAwIDAgMTIgMjFjMi40OSAwIDQuNzQtMSA2LjM2LTIuNjQifV0sWyJwYXRoIix7ZDoiTTIxIDEyYzAgMS0uMTYgMS45Ny0uNDcgMi44NyJ9XSxbInBhdGgiLHtkOiJNMjEgM3Y1aC01In1dLFsicGF0aCIse2Q6Ik0yMiAyMiAyIDIifV1dfSk7dmFyIHhfLHVrZT1uKCgpPT57eF89W1sicGF0aCIse2Q6Ik0zIDEyYTkgOSAwIDAgMSA5LTkgOS43NSA5Ljc1IDAgMCAxIDYuNzQgMi43NEwyMSA4In1dLFsicGF0aCIse2Q6Ik0yMSAzdjVoLTUifV0sWyJwYXRoIix7ZDoiTTIxIDEyYTkgOSAwIDAgMS05IDkgOS43NSA5Ljc1IDAgMCAxLTYuNzQtMi43NEwzIDE2In1dLFsicGF0aCIse2Q6Ik04IDE2SDN2NSJ9XV19KTt2YXIgYl8scGtlPW4oKCk9PntiXz1bWyJwYXRoIix7ZDoiTTUgNmE0IDQgMCAwIDEgNC00aDZhNCA0IDAgMCAxIDQgNHYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2WiJ9XSxbInBhdGgiLHtkOiJNNSAxMGgxNCJ9XSxbInBhdGgiLHtkOiJNMTUgN3Y2In1dXX0pO3ZhciB2Xyxoa2U9bigoKT0+e3ZfPVtbInBhdGgiLHtkOiJNMTcgM3YxMCJ9XSxbInBhdGgiLHtkOiJtMTIuNjcgNS41IDguNjYgNSJ9XSxbInBhdGgiLHtkOiJtMTIuNjcgMTAuNSA4LjY2LTUifV0sWyJwYXRoIix7ZDoiTTkgMTdhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MmEyIDIgMCAwIDAgMiAyaDJhMiAyIDAgMCAwIDItMnYtMnoifV1dfSk7dmFyIHlfLG1rZT1uKCgpPT57eV89W1sicGF0aCIse2Q6Ik00IDdWNGgxNnYzIn1dLFsicGF0aCIse2Q6Ik01IDIwaDYifV0sWyJwYXRoIix7ZDoiTTEzIDQgOCAyMCJ9XSxbInBhdGgiLHtkOiJtMTUgMTUgNSA1In1dLFsicGF0aCIse2Q6Im0yMCAxNS01IDUifV1dfSk7dmFyIHdfLGdrZT1uKCgpPT57d189W1sicGF0aCIse2Q6Im0xNyAyIDQgNC00IDQifV0sWyJwYXRoIix7ZDoiTTMgMTF2LTFhNCA0IDAgMCAxIDQtNGgxNCJ9XSxbInBhdGgiLHtkOiJtNyAyMi00LTQgNC00In1dLFsicGF0aCIse2Q6Ik0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyJ9XSxbInBhdGgiLHtkOiJNMTEgMTBoMXY0In1dXX0pO3ZhciBNXyx4a2U9bigoKT0+e01fPVtbInBhdGgiLHtkOiJtMiA5IDMtMyAzIDMifV0sWyJwYXRoIix7ZDoiTTEzIDE4SDdhMiAyIDAgMCAxLTItMlY2In1dLFsicGF0aCIse2Q6Im0yMiAxNS0zIDMtMy0zIn1dLFsicGF0aCIse2Q6Ik0xMSA2aDZhMiAyIDAgMCAxIDIgMnYxMCJ9XV19KTt2YXIgel8sYmtlPW4oKCk9Pnt6Xz1bWyJwYXRoIix7ZDoibTE3IDIgNCA0LTQgNCJ9XSxbInBhdGgiLHtkOiJNMyAxMXYtMWE0IDQgMCAwIDEgNC00aDE0In1dLFsicGF0aCIse2Q6Im03IDIyLTQtNCA0LTQifV0sWyJwYXRoIix7ZDoiTTIxIDEzdjFhNCA0IDAgMCAxLTQgNEgzIn1dXX0pO3ZhciBrXyx2a2U9bigoKT0+e2tfPVtbInBhdGgiLHtkOiJNMTQgMTRhMSAxIDAgMCAxIDEgMXY1YTEgMSAwIDAgMS0xIDEifV0sWyJwYXRoIix7ZDoiTTE0IDRhMSAxIDAgMCAxIDEtMSJ9XSxbInBhdGgiLHtkOiJNMTUgMTBhMSAxIDAgMCAxLTEtMSJ9XSxbInBhdGgiLHtkOiJNMTkgMTRhMSAxIDAgMCAxIDEgMXY1YTEgMSAwIDAgMS0xIDEifV0sWyJwYXRoIix7ZDoiTTIxIDRhMSAxIDAgMCAwLTEtMSJ9XSxbInBhdGgiLHtkOiJNMjEgOWExIDEgMCAwIDEtMSAxIn1dLFsicGF0aCIse2Q6Im0zIDcgMyAzIDMtMyJ9XSxbInBhdGgiLHtkOiJNNiAxMFY1YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInJlY3QiLHt4OiIzIix5OiIxNCIsd2lkdGg6IjciLGhlaWdodDoiNyIscng6IjEifV1dfSk7dmFyIFNfLHlrZT1uKCgpPT57U189W1sicGF0aCIse2Q6Ik0xNCA0YTEgMSAwIDAgMSAxLTEifV0sWyJwYXRoIix7ZDoiTTE1IDEwYTEgMSAwIDAgMS0xLTEifV0sWyJwYXRoIix7ZDoiTTIxIDRhMSAxIDAgMCAwLTEtMSJ9XSxbInBhdGgiLHtkOiJNMjEgOWExIDEgMCAwIDEtMSAxIn1dLFsicGF0aCIse2Q6Im0zIDcgMyAzIDMtMyJ9XSxbInBhdGgiLHtkOiJNNiAxMFY1YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInJlY3QiLHt4OiIzIix5OiIxNCIsd2lkdGg6IjciLGhlaWdodDoiNyIscng6IjEifV1dfSk7dmFyIENfLHdrZT1uKCgpPT57Q189W1sicGF0aCIse2Q6Im0xMiAxNy01LTUgNS01In1dLFsicGF0aCIse2Q6Ik0yMiAxOHYtMmE0IDQgMCAwIDAtNC00SDcifV0sWyJwYXRoIix7ZDoibTcgMTctNS01IDUtNSJ9XV19KTt2YXIgTF8sTWtlPW4oKCk9PntMXz1bWyJwYXRoIix7ZDoiTTIwIDE4di0yYTQgNCAwIDAgMC00LTRINCJ9XSxbInBhdGgiLHtkOiJtOSAxNy01LTUgNS01In1dXX0pO3ZhciBUXyx6a2U9bigoKT0+e1RfPVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDAtMy40MTQtMS40MTRsLTYgNmEyIDIgMCAwIDAgMCAyLjgyOGw2IDZBMiAyIDAgMCAwIDEyIDE4eiJ9XSxbInBhdGgiLHtkOiJNMjIgNmEyIDIgMCAwIDAtMy40MTQtMS40MTRsLTYgNmEyIDIgMCAwIDAgMCAyLjgyOGw2IDZBMiAyIDAgMCAwIDIyIDE4eiJ9XV19KTt2YXIgX18sa2tlPW4oKCk9PntfXz1bWyJwYXRoIix7ZDoiTTEyIDExLjIyQzExIDkuOTk3IDEwIDkgMTAgOGEyIDIgMCAwIDEgNCAwYzAgMS0uOTk4IDIuMDAyLTIuMDEgMy4yMiJ9XSxbInBhdGgiLHtkOiJtMTIgMTggMi41Ny0zLjUifV0sWyJwYXRoIix7ZDoiTTYuMjQzIDkuMDE2YTcgNyAwIDAgMSAxMS41MDctLjAwOSJ9XSxbInBhdGgiLHtkOiJNOS4zNSAxNC41MyAxMiAxMS4yMiJ9XSxbInBhdGgiLHtkOiJNOS4zNSAxNC41M0M3LjcyOCAxMi4yNDYgNiAxMC4yMjEgNiA3YTYgNSAwIDAgMSAxMiAwYy0uMDA1IDMuMjItMS43NzggNS4yMzUtMy40MyA3LjVsMy41NTcgNC41MjdhMSAxIDAgMCAxLS4yMDMgMS40M2wtMS44OTQgMS4zNmExIDEgMCAwIDEtMS4zODQtLjIxNUwxMiAxOGwtMi42NzkgMy41OTNhMSAxIDAgMCAxLTEuMzkuMjEzbC0xLjg2NS0xLjM1M2ExIDEgMCAwIDEtLjIwMy0xLjQyMnoifV1dfSk7dmFyIEFfLFNrZT1uKCgpPT57QV89W1sicGF0aCIse2Q6Ik00LjUgMTYuNWMtMS41IDEuMjYtMiA1LTIgNXMzLjc0LS41IDUtMmMuNzEtLjg0LjctMi4xMy0uMDktMi45MWEyLjE4IDIuMTggMCAwIDAtMi45MS0uMDl6In1dLFsicGF0aCIse2Q6Im0xMiAxNS0zLTNhMjIgMjIgMCAwIDEgMi0zLjk1QTEyLjg4IDEyLjg4IDAgMCAxIDIyIDJjMCAyLjcyLS43OCA3LjUtNiAxMWEyMi4zNSAyMi4zNSAwIDAgMS00IDJ6In1dLFsicGF0aCIse2Q6Ik05IDEySDRzLjU1LTMuMDMgMi00YzEuNjItMS4wOCA1IDAgNSAwIn1dLFsicGF0aCIse2Q6Ik0xMiAxNXY1czMuMDMtLjU1IDQtMmMxLjA4LTEuNjIgMC01IDAtNSJ9XV19KTt2YXIgJF8sQ2tlPW4oKCk9PnskXz1bWyJwb2x5bGluZSIse3BvaW50czoiMy41IDIgNi41IDEyLjUgMTggMTIuNSJ9XSxbImxpbmUiLHt4MToiOS41Iix4MjoiNS41Iix5MToiMTIuNSIseTI6IjIwIn1dLFsibGluZSIse3gxOiIxNSIseDI6IjE4LjUiLHkxOiIxMi41Iix5MjoiMjAifV0sWyJwYXRoIix7ZDoiTTIuNzUgMThhMTMgMTMgMCAwIDAgMTguNSAwIn1dXX0pO3ZhciBEXyxMa2U9bigoKT0+e0RfPVtbInBhdGgiLHtkOiJNNiAxOVY1In1dLFsicGF0aCIse2Q6Ik0xMCAxOVY2LjgifV0sWyJwYXRoIix7ZDoiTTE0IDE5di03LjgifV0sWyJwYXRoIix7ZDoiTTE4IDV2NCJ9XSxbInBhdGgiLHtkOiJNMTggMTl2LTYifV0sWyJwYXRoIix7ZDoiTTIyIDE5VjkifV0sWyJwYXRoIix7ZDoiTTIgMTlWOWE0IDQgMCAwIDEgNC00YzIgMCA0IDEuMzMgNiA0czQgNCA2IDRhNCA0IDAgMSAwLTMtNi42NSJ9XV19KTt2YXIgRV8sVGtlPW4oKCk9PntFXz1bWyJwYXRoIix7ZDoiTTE3IDEwaC0xYTQgNCAwIDEgMSA0LTR2LjUzNCJ9XSxbInBhdGgiLHtkOiJNMTcgNmgxYTQgNCAwIDAgMSAxLjQyIDcuNzRsLTIuMjkuODdhNiA2IDAgMCAxLTUuMzM5LTEwLjY4bDIuMDY5LTEuMzEifV0sWyJwYXRoIix7ZDoiTTQuNSAxN2MyLjgtLjUgNC40IDAgNS41LjhzMS44IDIuMiAyLjMgMy43Yy0yIC40LTMuNS40LTQuOC0uMy0xLjItLjYtMi4zLTEuOS0zLTQuMiJ9XSxbInBhdGgiLHtkOiJNOS43NyAxMkM0IDE1IDIgMjIgMiAyMiJ9XSxbImNpcmNsZSIse2N4OiIxNyIsY3k6IjgiLHI6IjIifV1dfSk7dmFyIGYzLF9rZT1uKCgpPT57ZjM9W1sicGF0aCIse2Q6Ik0xNi40NjYgNy41QzE1LjY0MyA0LjIzNyAxMy45NTIgMiAxMiAyIDkuMjM5IDIgNyA2LjQ3NyA3IDEyczIuMjM5IDEwIDUgMTBjLjM0MiAwIC42NzctLjA2OSAxLS4yIn1dLFsicGF0aCIse2Q6Im0xNS4xOTQgMTMuNzA3IDMuODE0IDEuODYtMS44NiAzLjgxNCJ9XSxbInBhdGgiLHtkOiJNMTkgMTUuNTdjLTEuODA0Ljg4NS00LjI3NCAxLjQzLTcgMS40My01LjUyMyAwLTEwLTIuMjM5LTEwLTVzNC40NzctNSAxMC01YzQuODM4IDAgOC44NzMgMS43MTggOS44IDQifV1dfSk7dmFyIE5fLEFrZT1uKCgpPT57Tl89W1sicGF0aCIse2Q6Im0xNC41IDkuNSAxIDEifV0sWyJwYXRoIix7ZDoibTE1LjUgOC41LTQgNCJ9XSxbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzQgOS43NCAwIDAgMC02Ljc0IDIuNzRMMyA4In1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1In1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiMTQiLHI6IjIifV1dfSk7dmFyIFBfLCRrZT1uKCgpPT57UF89W1sicGF0aCIse2Q6Ik0yMCA5VjdhMiAyIDAgMCAwLTItMmgtNiJ9XSxbInBhdGgiLHtkOiJtMTUgMi0zIDMgMyAzIn1dLFsicGF0aCIse2Q6Ik0yMCAxM3Y1YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMmgyIn1dXX0pO3ZhciBJXyxEa2U9bigoKT0+e0lfPVtbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4In1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1In1dXX0pO3ZhciBGXyxFa2U9bigoKT0+e0ZfPVtbInBhdGgiLHtkOiJNMTIgNUg2YTIgMiAwIDAgMC0yIDJ2MyJ9XSxbInBhdGgiLHtkOiJtOSA4IDMtMy0zLTMifV0sWyJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn1dXX0pO3ZhciBPXyxOa2U9bigoKT0+e09fPVtbInBhdGgiLHtkOiJNMjEgMTJhOSA5IDAgMSAxLTktOWMyLjUyIDAgNC45MyAxIDYuNzQgMi43NEwyMSA4In1dLFsicGF0aCIse2Q6Ik0yMSAzdjVoLTUifV1dfSk7dmFyIEJfLFBrZT1uKCgpPT57Ql89W1siY2lyY2xlIix7Y3g6IjYiLGN5OiIxOSIscjoiMyJ9XSxbInBhdGgiLHtkOiJNOSAxOWg4LjVhMy41IDMuNSAwIDAgMCAwLTdoLTExYTMuNSAzLjUgMCAwIDEgMC03SDE1In1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiNSIscjoiMyJ9XV19KTt2YXIgUl8sSWtlPW4oKCk9PntSXz1bWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjE5IixyOiIzIn1dLFsicGF0aCIse2Q6Ik05IDE5aDguNWMuNCAwIC45LS4xIDEuMy0uMiJ9XSxbInBhdGgiLHtkOiJNNS4yIDUuMkEzLjUgMy41MyAwIDAgMCA2LjUgMTJIMTIifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMjEgMTUuM2EzLjUgMy41IDAgMCAwLTMuMy0zLjMifV0sWyJwYXRoIix7ZDoiTTE1IDVoLTQuMyJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjUiLHI6IjMifV1dfSk7dmFyIEhfLEZrZT1uKCgpPT57SF89W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI4Iix4OiIyIix5OiIxNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTYuMDEgMThINiJ9XSxbInBhdGgiLHtkOiJNMTAuMDEgMThIMTAifV0sWyJwYXRoIix7ZDoiTTE1IDEwdjQifV0sWyJwYXRoIix7ZDoiTTE3Ljg0IDcuMTdhNCA0IDAgMCAwLTUuNjYgMCJ9XSxbInBhdGgiLHtkOiJNMjAuNjYgNC4zNGE4IDggMCAwIDAtMTEuMzEgMCJ9XV19KTt2YXIgdTMsT2tlPW4oKCk9Pnt1Mz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyAxMmgxOCJ9XV19KTt2YXIgcDMsQmtlPW4oKCk9PntwMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMjEgOUgzIn1dLFsicGF0aCIse2Q6Ik0yMSAxNUgzIn1dXX0pO3ZhciBxXyxSa2U9bigoKT0+e3FfPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yMSA3LjVIMyJ9XSxbInBhdGgiLHtkOiJNMjEgMTJIMyJ9XSxbInBhdGgiLHtkOiJNMjEgMTYuNUgzIn1dXX0pO3ZhciBWXyxIa2U9bigoKT0+e1ZfPVtbInBhdGgiLHtkOiJNNCAxMWE5IDkgMCAwIDEgOSA5In1dLFsicGF0aCIse2Q6Ik00IDRhMTYgMTYgMCAwIDEgMTYgMTYifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjE5IixyOiIxIn1dXX0pO3ZhciBVXyxxa2U9bigoKT0+e1VfPVtbInBhdGgiLHtkOiJNMTAgMTV2LTMifV0sWyJwYXRoIix7ZDoiTTE0IDE1di0zIn1dLFsicGF0aCIse2Q6Ik0xOCAxNXYtMyJ9XSxbInBhdGgiLHtkOiJNMiA4VjQifV0sWyJwYXRoIix7ZDoiTTIyIDZIMiJ9XSxbInBhdGgiLHtkOiJNMjIgOFY0In1dLFsicGF0aCIse2Q6Ik02IDE1di0zIn1dLFsicmVjdCIse3g6IjIiLHk6IjEyIix3aWR0aDoiMjAiLGhlaWdodDoiOCIscng6IjIifV1dfSk7dmFyIGpfLFZrZT1uKCgpPT57al89W1sicGF0aCIse2Q6Ik0yMS4zIDE1LjNhMi40IDIuNCAwIDAgMSAwIDMuNGwtMi42IDIuNmEyLjQgMi40IDAgMCAxLTMuNCAwTDIuNyA4LjdhMi40MSAyLjQxIDAgMCAxIDAtMy40bDIuNi0yLjZhMi40MSAyLjQxIDAgMCAxIDMuNCAwWiJ9XSxbInBhdGgiLHtkOiJtMTQuNSAxMi41IDItMiJ9XSxbInBhdGgiLHtkOiJtMTEuNSA5LjUgMi0yIn1dLFsicGF0aCIse2Q6Im04LjUgNi41IDItMiJ9XSxbInBhdGgiLHtkOiJtMTcuNSAxNS41IDItMiJ9XV19KTt2YXIgV18sVWtlPW4oKCk9PntXXz1bWyJwYXRoIix7ZDoiTTYgMTFoOGE0IDQgMCAwIDAgMC04SDl2MTgifV0sWyJwYXRoIix7ZDoiTTYgMTVoOCJ9XV19KTt2YXIgR18samtlPW4oKCk9PntHXz1bWyJwYXRoIix7ZDoiTTEwIDJ2MTUifV0sWyJwYXRoIix7ZDoiTTcgMjJhNCA0IDAgMCAxLTQtNCAxIDEgMCAwIDEgMS0xaDE2YTEgMSAwIDAgMSAxIDEgNCA0IDAgMCAxLTQgNHoifV0sWyJwYXRoIix7ZDoiTTkuMTU5IDIuNDZhMSAxIDAgMCAxIDEuNTIxLS4xOTNsOS45NzcgOC45OEExIDEgMCAwIDEgMjAgMTNINGExIDEgMCAwIDEtLjgyNC0xLjU2N3oifV1dfSk7dmFyIFlfLFdrZT1uKCgpPT57WV89W1sicGF0aCIse2Q6Ik03IDIxaDEwIn1dLFsicGF0aCIse2Q6Ik0xMiAyMWE5IDkgMCAwIDAgOS05SDNhOSA5IDAgMCAwIDkgOVoifV0sWyJwYXRoIix7ZDoiTTExLjM4IDEyYTIuNCAyLjQgMCAwIDEtLjQtNC43NyAyLjQgMi40IDAgMCAxIDMuMi0yLjc3IDIuNCAyLjQgMCAwIDEgMy40Ny0uNjMgMi40IDIuNCAwIDAgMSAzLjM3IDMuMzcgMi40IDIuNCAwIDAgMS0xLjEgMy43IDIuNTEgMi41MSAwIDAgMSAuMDMgMS4xIn1dLFsicGF0aCIse2Q6Im0xMyAxMiA0LTQifV0sWyJwYXRoIix7ZDoiTTEwLjkgNy4yNUEzLjk5IDMuOTkgMCAwIDAgNCAxMGMwIC43My4yIDEuNDEuNTQgMiJ9XV19KTt2YXIgWl8sR2tlPW4oKCk9PntaXz1bWyJwYXRoIix7ZDoibTIuMzcgMTEuMjIzIDguMzcyLTYuNzc3YTIgMiAwIDAgMSAyLjUxNiAwbDguMzcxIDYuNzc3In1dLFsicGF0aCIse2Q6Ik0yMSAxNWExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtNS4yNSJ9XSxbInBhdGgiLHtkOiJNMyAxNWExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWg5In1dLFsicGF0aCIse2Q6Im02LjY3IDE1IDYuMTMgNC42YTIgMiAwIDAgMCAyLjgtLjRsMy4xNS00LjIifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjQiLHg6IjIiLHk6IjExIixyeDoiMSJ9XV19KTt2YXIgWF8sWWtlPW4oKCk9PntYXz1bWyJwYXRoIix7ZDoiTTQgMTBhNy4zMSA3LjMxIDAgMCAwIDEwIDEwWiJ9XSxbInBhdGgiLHtkOiJtOSAxNSAzLTMifV0sWyJwYXRoIix7ZDoiTTE3IDEzYTYgNiAwIDAgMC02LTYifV0sWyJwYXRoIix7ZDoiTTIxIDEzQTEwIDEwIDAgMCAwIDExIDMifV1dfSk7dmFyIFFfLFprZT1uKCgpPT57UV89W1sicGF0aCIse2Q6Im0xMy41IDYuNS0zLjE0OC0zLjE0OGExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAwTDYuMzUyIDUuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRMOS41IDEwLjUifV0sWyJwYXRoIix7ZDoiTTE2LjUgNy41IDE5IDUifV0sWyJwYXRoIix7ZDoibTE3LjUgMTAuNSAzLjE0OCAzLjE0OGExLjIwNSAxLjIwNSAwIDAgMSAwIDEuNzA0bC0yLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMS0xLjcwNCAwTDEzLjUgMTQuNSJ9XSxbInBhdGgiLHtkOiJNOSAyMWE2IDYgMCAwIDAtNi02In1dLFsicGF0aCIse2Q6Ik05LjM1MiAxMC42NDhhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNGwyLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMCAxLjcwNCAwbDQuMjk2LTQuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDAtMS43MDRsLTIuMjk2LTIuMjk2YTEuMjA1IDEuMjA1IDAgMCAwLTEuNzA0IDB6In1dXX0pO3ZhciBLXyxYa2U9bigoKT0+e0tfPVtbInBhdGgiLHtkOiJtMjAgMTkuNS01LjUgMS4yIn1dLFsicGF0aCIse2Q6Ik0xNC41IDR2MTEuMjJhMSAxIDAgMCAwIDEuMjQyLjk3TDIwIDE1LjIifV0sWyJwYXRoIix7ZDoibTIuOTc4IDE5LjM1MSA1LjU0OS0xLjM2M0EyIDIgMCAwIDAgMTAgMTZWMiJ9XSxbInBhdGgiLHtkOiJNMjAgMTAgNCAxMy41In1dXX0pO3ZhciBKXyxRa2U9bigoKT0+e0pfPVtbInBhdGgiLHtkOiJNMTAgMnYzYTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTggMTh2LTZhMSAxIDAgMCAwLTEtMWgtNmExIDEgMCAwIDAtMSAxdjYifV0sWyJwYXRoIix7ZDoiTTE4IDIySDRhMiAyIDAgMCAxLTItMlY2In1dLFsicGF0aCIse2Q6Ik04IDE4YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDkuMTcyYTIgMiAwIDAgMSAxLjQxNC41ODZsMi44MjggMi44MjhBMiAyIDAgMCAxIDIyIDYuODI4VjE2YTIgMiAwIDAgMS0yLjAxIDJ6In1dXX0pO3ZhciBlQSxLa2U9bigoKT0+e2VBPVtbInBhdGgiLHtkOiJNMTMgMTNIOGExIDEgMCAwIDAtMSAxdjcifV0sWyJwYXRoIix7ZDoiTTE0IDhoMSJ9XSxbInBhdGgiLHtkOiJNMTcgMjF2LTQifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMjAuNDEgMjAuNDFBMiAyIDAgMCAxIDE5IDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAuNTktMS40MSJ9XSxbInBhdGgiLHtkOiJNMjkuNSAxMS41czUgNSA0IDUifV0sWyJwYXRoIix7ZDoiTTkgM2g2LjJhMiAyIDAgMCAxIDEuNC42bDMuOCAzLjhhMiAyIDAgMCAxIC42IDEuNFYxNSJ9XV19KTt2YXIgdEEsSmtlPW4oKCk9Pnt0QT1bWyJwYXRoIix7ZDoiTTE1LjIgM2EyIDIgMCAwIDEgMS40LjZsMy44IDMuOGEyIDIgMCAwIDEgLjYgMS40VjE5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMnoifV0sWyJwYXRoIix7ZDoiTTE3IDIxdi03YTEgMSAwIDAgMC0xLTFIOGExIDEgMCAwIDAtMSAxdjcifV0sWyJwYXRoIix7ZDoiTTcgM3Y0YTEgMSAwIDAgMCAxIDFoNyJ9XV19KTt2YXIgaDMsZVNlPW4oKCk9PntoMz1bWyJwYXRoIix7ZDoiTTUgN3YxMWExIDEgMCAwIDAgMSAxaDExIn1dLFsicGF0aCIse2Q6Ik01LjI5MyAxOC43MDcgMTEgMTMifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxOSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI1IixjeToiNSIscjoiMiJ9XV19KTt2YXIgYUEsdFNlPW4oKCk9PnthQT1bWyJwYXRoIix7ZDoiTTEyIDN2MTgifV0sWyJwYXRoIix7ZDoibTE5IDggMyA4YTUgNSAwIDAgMS02IDB6VjcifV0sWyJwYXRoIix7ZDoiTTMgN2gxYTE3IDE3IDAgMCAwIDgtMiAxNyAxNyAwIDAgMCA4IDJoMSJ9XSxbInBhdGgiLHtkOiJtNSA4IDMgOGE1IDUgMCAwIDEtNiAwelY3In1dLFsicGF0aCIse2Q6Ik03IDIxaDEwIn1dXX0pO3ZhciByQSxhU2U9bigoKT0+e3JBPVtbInBhdGgiLHtkOiJNMTIgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi03In1dLFsicGF0aCIse2Q6Ik0xNCAxNUg5di01In1dLFsicGF0aCIse2Q6Ik0xNiAzaDV2NSJ9XSxbInBhdGgiLHtkOiJNMjEgMyA5IDE1In1dXX0pO3ZhciBpQSxyU2U9bigoKT0+e2lBPVtbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIn1dLFsicGF0aCIse2Q6Ik0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEifV0sWyJwYXRoIix7ZDoiTTE4Ljk0NCAxMi4zM2ExIDEgMCAwIDAgMC0uNjYgNy41IDcuNSAwIDAgMC0xMy44ODggMCAxIDEgMCAwIDAgMCAuNjYgNy41IDcuNSAwIDAgMCAxMy44ODggMCJ9XV19KTt2YXIgb0EsaVNlPW4oKCk9PntvQT1bWyJwYXRoIix7ZDoiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Ik03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiJ9XSxbInBhdGgiLHtkOiJNOCA3djEwIn1dLFsicGF0aCIse2Q6Ik0xMiA3djEwIn1dLFsicGF0aCIse2Q6Ik0xNyA3djEwIn1dXX0pO3ZhciBzQSxvU2U9bigoKT0+e3NBPVtbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIn1dLFsicGF0aCIse2Q6Ik0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIn1dLFsicGF0aCIse2Q6Ik04IDE0czEuNSAyIDQgMiA0LTIgNC0yIn1dLFsicGF0aCIse2Q6Ik05IDloLjAxIn1dLFsicGF0aCIse2Q6Ik0xNSA5aC4wMSJ9XV19KTt2YXIgbkEsc1NlPW4oKCk9PntuQT1bWyJwYXRoIix7ZDoiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIifV0sWyJwYXRoIix7ZDoiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiJ9XSxbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiJ9XSxbInBhdGgiLHtkOiJNNy44MjggMTMuMDdBMyAzIDAgMCAxIDEyIDguNzY0YTMgMyAwIDAgMSA0LjE3MiA0LjMwNmwtMy40NDcgMy42MmExIDEgMCAwIDEtMS40NDkgMHoifV1dfSk7dmFyIGxBLG5TZT1uKCgpPT57bEE9W1sicGF0aCIse2Q6Ik0zIDdWNWEyIDIgMCAwIDEgMi0yaDIifV0sWyJwYXRoIix7ZDoiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIifV0sWyJwYXRoIix7ZDoiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiJ9XSxbInBhdGgiLHtkOiJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIifV0sWyJwYXRoIix7ZDoiTTcgMTJoMTAifV1dfSk7dmFyIGNBLGxTZT1uKCgpPT57Y0E9W1sicGF0aCIse2Q6Ik0xNyAxMnY0YTEgMSAwIDAgMS0xIDFoLTQifV0sWyJwYXRoIix7ZDoiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIifV0sWyJwYXRoIix7ZDoiTTE3IDhWNyJ9XSxbInBhdGgiLHtkOiJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Ik0zIDdWNWEyIDIgMCAwIDEgMi0yaDIifV0sWyJwYXRoIix7ZDoiTTcgMTdoLjAxIn1dLFsicGF0aCIse2Q6Ik03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiJ9XSxbInJlY3QiLHt4OiI3Iix5OiI3Iix3aWR0aDoiNSIsaGVpZ2h0OiI1IixyeDoiMSJ9XV19KTt2YXIgZEEsY1NlPW4oKCk9PntkQT1bWyJwYXRoIix7ZDoiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Ik03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIzIn1dLFsicGF0aCIse2Q6Im0xNiAxNi0xLjktMS45In1dXX0pO3ZhciBmQSxkU2U9bigoKT0+e2ZBPVtbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIn1dLFsicGF0aCIse2Q6Ik0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIn1dLFsicGF0aCIse2Q6Ik03IDhoOCJ9XSxbInBhdGgiLHtkOiJNNyAxMmgxMCJ9XSxbInBhdGgiLHtkOiJNNyAxNmg2In1dXX0pO3ZhciB1QSxmU2U9bigoKT0+e3VBPVtbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIn1dLFsicGF0aCIse2Q6Ik0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIn1dXX0pO3ZhciBwQSx1U2U9bigoKT0+e3BBPVtbInBhdGgiLHtkOiJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIn1dLFsicGF0aCIse2Q6Ik0xOCA1djE2In1dLFsicGF0aCIse2Q6Im00IDYgNy4xMDYtMy43OWEyIDIgMCAwIDEgMS43ODggMEwyMCA2In1dLFsicGF0aCIse2Q6Im02IDExLTMuNTIgMi4xNDdhMSAxIDAgMCAwLS40OC44NTRWMTlhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi01YTEgMSAwIDAgMC0uNDgtLjg1M0wxOCAxMSJ9XSxbInBhdGgiLHtkOiJNNiA1djE2In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiOSIscjoiMiJ9XV19KTt2YXIgaEEscFNlPW4oKCk9PntoQT1bWyJwYXRoIix7ZDoiTTUuNDIgOS40MiA4IDEyIn1dLFsiY2lyY2xlIix7Y3g6IjQiLGN5OiI4IixyOiIyIn1dLFsicGF0aCIse2Q6Im0xNCA2LTguNTggOC41OCJ9XSxbImNpcmNsZSIse2N4OiI0IixjeToiMTYiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTEwLjggMTQuOCAxNCAxOCJ9XSxbInBhdGgiLHtkOiJNMTYgMTJoLTIifV0sWyJwYXRoIix7ZDoiTTIyIDEyaC0yIn1dXX0pO3ZhciBtQSxoU2U9bigoKT0+e21BPVtbImNpcmNsZSIse2N4OiI2IixjeToiNiIscjoiMyJ9XSxbInBhdGgiLHtkOiJNOC4xMiA4LjEyIDEyIDEyIn1dLFsicGF0aCIse2Q6Ik0yMCA0IDguMTIgMTUuODgifV0sWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjE4IixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xNC44IDE0LjggMjAgMjAifV1dfSk7dmFyIGdBLG1TZT1uKCgpPT57Z0E9W1sicGF0aCIse2Q6Ik0yMSA0aC0zLjVsMiAxMS4wNSJ9XSxbInBhdGgiLHtkOiJNNi45NSAxN2g1LjE0MmMuNTIzIDAgLjk1LS40MDYgMS4wNjMtLjkxNmE2LjUgNi41IDAgMCAxIDUuMzQ1LTUuMDA5In1dLFsiY2lyY2xlIix7Y3g6IjE5LjUiLGN5OiIxNy41IixyOiIyLjUifV0sWyJjaXJjbGUiLHtjeDoiNC41IixjeToiMTcuNSIscjoiMi41In1dXX0pO3ZhciB4QSxnU2U9bigoKT0+e3hBPVtbInBhdGgiLHtkOiJNMTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0zIn1dLFsicGF0aCIse2Q6Ik04IDIxaDgifV0sWyJwYXRoIix7ZDoiTTEyIDE3djQifV0sWyJwYXRoIix7ZDoibTIyIDMtNSA1In1dLFsicGF0aCIse2Q6Im0xNyAzIDUgNSJ9XV19KTt2YXIgYkEseFNlPW4oKCk9PntiQT1bWyJwYXRoIix7ZDoiTTEzIDNINGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtMyJ9XSxbInBhdGgiLHtkOiJNOCAyMWg4In1dLFsicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Im0xNyA4IDUtNSJ9XSxbInBhdGgiLHtkOiJNMTcgM2g1djUifV1dfSk7dmFyIHZBLGJTZT1uKCgpPT57dkE9W1sicGF0aCIse2Q6Ik0xNSAxMmgtNSJ9XSxbInBhdGgiLHtkOiJNMTUgOGgtNSJ9XSxbInBhdGgiLHtkOiJNMTkgMTdWNWEyIDIgMCAwIDAtMi0ySDQifV0sWyJwYXRoIix7ZDoiTTggMjFoMTJhMiAyIDAgMCAwIDItMnYtMWExIDEgMCAwIDAtMS0xSDExYTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDEtNCAwVjVhMiAyIDAgMSAwLTQgMHYyYTEgMSAwIDAgMCAxIDFoMyJ9XV19KTt2YXIgeUEsdlNlPW4oKCk9Pnt5QT1bWyJwYXRoIix7ZDoiTTE5IDE3VjVhMiAyIDAgMCAwLTItMkg0In1dLFsicGF0aCIse2Q6Ik04IDIxaDEyYTIgMiAwIDAgMCAyLTJ2LTFhMSAxIDAgMCAwLTEtMUgxMWExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMSAxLTQgMFY1YTIgMiAwIDEgMC00IDB2MmExIDEgMCAwIDAgMSAxaDMifV1dfSk7dmFyIHdBLHlTZT1uKCgpPT57d0E9W1siY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgifV0sWyJwYXRoIix7ZDoibTIxIDIxLTQuMy00LjMifV0sWyJwYXRoIix7ZDoiTTExIDd2NCJ9XSxbInBhdGgiLHtkOiJNMTEgMTVoLjAxIn1dXX0pO3ZhciBNQSx3U2U9bigoKT0+e01BPVtbInBhdGgiLHtkOiJtMTMgMTMuNSAyLTIuNS0yLTIuNSJ9XSxbInBhdGgiLHtkOiJtMjEgMjEtNC4zLTQuMyJ9XSxbInBhdGgiLHtkOiJNOSA4LjUgNyAxMWwyIDIuNSJ9XSxbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiI4In1dXX0pO3ZhciB6QSxNU2U9bigoKT0+e3pBPVtbInBhdGgiLHtkOiJtOCAxMSAyIDIgNC00In1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgifV0sWyJwYXRoIix7ZDoibTIxIDIxLTQuMy00LjMifV1dfSk7dmFyIGtBLHpTZT1uKCgpPT57a0E9W1sicGF0aCIse2Q6Im0xMy41IDguNS01IDUifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCJ9XSxbInBhdGgiLHtkOiJtMjEgMjEtNC4zLTQuMyJ9XV19KTt2YXIgU0Esa1NlPW4oKCk9PntTQT1bWyJwYXRoIix7ZDoibTEzLjUgOC41LTUgNSJ9XSxbInBhdGgiLHtkOiJtOC41IDguNSA1IDUifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCJ9XSxbInBhdGgiLHtkOiJtMjEgMjEtNC4zLTQuMyJ9XV19KTt2YXIgQ0EsU1NlPW4oKCk9PntDQT1bWyJwYXRoIix7ZDoibTIxIDIxLTQuMzQtNC4zNCJ9XSxbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiI4In1dXX0pO3ZhciBtMyxDU2U9bigoKT0+e20zPVtbInBhdGgiLHtkOiJNMy43MTQgMy4wNDhhLjQ5OC40OTggMCAwIDAtLjY4My42MjdsMi44NDMgNy42MjdhMiAyIDAgMCAxIDAgMS4zOTZsLTIuODQyIDcuNjI3YS40OTguNDk4IDAgMCAwIC42ODIuNjI3bDE4LTguNWEuNS41IDAgMCAwIDAtLjkwNHoifV0sWyJwYXRoIix7ZDoiTTYgMTJoMTYifV1dfSk7dmFyIExBLExTZT1uKCgpPT57TEE9W1sicGF0aCIse2Q6Ik0xNiA1YTQgMyAwIDAgMC04IDBjMCA0IDggMyA4IDdhNCAzIDAgMCAxLTggMCJ9XSxbInBhdGgiLHtkOiJNOCAxOWE0IDMgMCAwIDAgOCAwYzAtNC04LTMtOC03YTQgMyAwIDAgMSA4IDAifV1dfSk7dmFyIFRBLFRTZT1uKCgpPT57VEE9W1sicmVjdCIse3g6IjE0Iix5OiIxNCIsd2lkdGg6IjgiLGhlaWdodDoiOCIscng6IjIifV0sWyJyZWN0Iix7eDoiMiIseToiMiIsd2lkdGg6IjgiLGhlaWdodDoiOCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTcgMTR2MWEyIDIgMCAwIDAgMiAyaDEifV0sWyJwYXRoIix7ZDoiTTE0IDdoMWEyIDIgMCAwIDEgMiAydjEifV1dfSk7dmFyIF9BLF9TZT1uKCgpPT57X0E9W1sicGF0aCIse2Q6Ik0xNC41MzYgMjEuNjg2YS41LjUgMCAwIDAgLjkzNy0uMDI0bDYuNS0xOWEuNDk2LjQ5NiAwIDAgMC0uNjM1LS42MzVsLTE5IDYuNWEuNS41IDAgMCAwLS4wMjQuOTM3bDcuOTMgMy4xOGEyIDIgMCAwIDEgMS4xMTIgMS4xMXoifV0sWyJwYXRoIix7ZDoibTIxLjg1NCAyLjE0Ny0xMC45NCAxMC45MzkifV1dfSk7dmFyIEFBLEFTZT1uKCgpPT57QUE9W1sicGF0aCIse2Q6Im0xNiAxNi00IDQtNC00In1dLFsicGF0aCIse2Q6Ik0zIDEyaDE4In1dLFsicGF0aCIse2Q6Im04IDggNC00IDQgNCJ9XV19KTt2YXIgJEEsJFNlPW4oKCk9PnskQT1bWyJwYXRoIix7ZDoiTTEyIDN2MTgifV0sWyJwYXRoIix7ZDoibTE2IDE2IDQtNC00LTQifV0sWyJwYXRoIix7ZDoibTggOC00IDQgNCA0In1dXX0pO3ZhciBEQSxEU2U9bigoKT0+e0RBPVtbInBhdGgiLHtkOiJtMTAuODUyIDE0Ljc3Mi0uMzgzLjkyMyJ9XSxbInBhdGgiLHtkOiJNMTMuMTQ4IDE0Ljc3MmEzIDMgMCAxIDAtMi4yOTYtNS41NDRsLS4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTMuMTQ4IDkuMjI4LjM4My0uOTIzIn1dLFsicGF0aCIse2Q6Im0xMy41MyAxNS42OTYtLjM4Mi0uOTI0YTMgMyAwIDEgMS0yLjI5Ni01LjU0NCJ9XSxbInBhdGgiLHtkOiJtMTQuNzcyIDEwLjg1Mi45MjMtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMTQuNzcyIDEzLjE0OC45MjMuMzgzIn1dLFsicGF0aCIse2Q6Ik00LjUgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMmgtLjUifV0sWyJwYXRoIix7ZDoiTTQuNSAxNEg0YTIgMiAwIDAgMC0yIDJ2NGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTRhMiAyIDAgMCAwLTItMmgtLjUifV0sWyJwYXRoIix7ZDoiTTYgMThoLjAxIn1dLFsicGF0aCIse2Q6Ik02IDZoLjAxIn1dLFsicGF0aCIse2Q6Im05LjIyOCAxMC44NTItLjkyMy0uMzgzIn1dLFsicGF0aCIse2Q6Im05LjIyOCAxMy4xNDgtLjkyMy4zODMifV1dfSk7dmFyIEVBLEVTZT1uKCgpPT57RUE9W1sicGF0aCIse2Q6Ik02IDEwSDRhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTYgMTRINGEyIDIgMCAwIDAtMiAydjRhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi00YTIgMiAwIDAgMC0yLTJoLTIifV0sWyJwYXRoIix7ZDoiTTYgNmguMDEifV0sWyJwYXRoIix7ZDoiTTYgMThoLjAxIn1dLFsicGF0aCIse2Q6Im0xMyA2LTQgNmg2bC00IDYifV1dfSk7dmFyIE5BLE5TZT1uKCgpPT57TkE9W1sicGF0aCIse2Q6Ik03IDJoMTNhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJoLTUifV0sWyJwYXRoIix7ZDoiTTEwIDEwIDIuNSAyLjVDMiAyIDIgMi41IDIgNXYzYTIgMiAwIDAgMCAyIDJoNnoifV0sWyJwYXRoIix7ZDoiTTIyIDE3di0xYTIgMiAwIDAgMC0yLTJoLTEifV0sWyJwYXRoIix7ZDoiTTQgMTRhMiAyIDAgMCAwLTIgMnY0YTIgMiAwIDAgMCAyIDJoMTYuNWwxLS41LjUuNS04LThINHoifV0sWyJwYXRoIix7ZDoiTTYgMThoLjAxIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV1dfSk7dmFyIFBBLFBTZT1uKCgpPT57UEE9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI4Iix4OiIyIix5OiIyIixyeDoiMiIscnk6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjgiLHg6IjIiLHk6IjE0IixyeDoiMiIscnk6IjIifV0sWyJsaW5lIix7eDE6IjYiLHgyOiI2LjAxIix5MToiNiIseTI6IjYifV0sWyJsaW5lIix7eDE6IjYiLHgyOiI2LjAxIix5MToiMTgiLHkyOiIxOCJ9XV19KTt2YXIgSUEsSVNlPW4oKCk9PntJQT1bWyJwYXRoIix7ZDoiTTE0IDE3SDUifV0sWyJwYXRoIix7ZDoiTTE5IDdoLTkifV0sWyJjaXJjbGUiLHtjeDoiMTciLGN5OiIxNyIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI3IixjeToiNyIscjoiMyJ9XV19KTt2YXIgRkEsRlNlPW4oKCk9PntGQT1bWyJwYXRoIix7ZDoiTTkuNjcxIDQuMTM2YTIuMzQgMi4zNCAwIDAgMSA0LjY1OSAwIDIuMzQgMi4zNCAwIDAgMCAzLjMxOSAxLjkxNSAyLjM0IDIuMzQgMCAwIDEgMi4zMyA0LjAzMyAyLjM0IDIuMzQgMCAwIDAgMCAzLjgzMSAyLjM0IDIuMzQgMCAwIDEtMi4zMyA0LjAzMyAyLjM0IDIuMzQgMCAwIDAtMy4zMTkgMS45MTUgMi4zNCAyLjM0IDAgMCAxLTQuNjU5IDAgMi4zNCAyLjM0IDAgMCAwLTMuMzItMS45MTUgMi4zNCAyLjM0IDAgMCAxLTIuMzMtNC4wMzMgMi4zNCAyLjM0IDAgMCAwIDAtMy44MzFBMi4zNCAyLjM0IDAgMCAxIDYuMzUgNi4wNTFhMi4zNCAyLjM0IDAgMCAwIDMuMzE5LTEuOTE1In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjMifV1dfSk7dmFyIE9BLE9TZT1uKCgpPT57T0E9W1sicGF0aCIse2Q6Ik04LjMgMTBhLjcuNyAwIDAgMS0uNjI2LTEuMDc5TDExLjQgM2EuNy43IDAgMCAxIDEuMTk4LS4wNDNMMTYuMyA4LjlhLjcuNyAwIDAgMS0uNTcyIDEuMVoifV0sWyJyZWN0Iix7eDoiMyIseToiMTQiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxIn1dLFsiY2lyY2xlIix7Y3g6IjE3LjUiLGN5OiIxNy41IixyOiIzLjUifV1dfSk7dmFyIEJBLEJTZT1uKCgpPT57QkE9W1siY2lyY2xlIix7Y3g6IjE4IixjeToiNSIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI2IixjeToiMTIiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxOSIscjoiMyJ9XSxbImxpbmUiLHt4MToiOC41OSIseDI6IjE1LjQyIix5MToiMTMuNTEiLHkyOiIxNy40OSJ9XSxbImxpbmUiLHt4MToiMTUuNDEiLHgyOiI4LjU5Iix5MToiNi41MSIseTI6IjEwLjQ5In1dXX0pO3ZhciBSQSxSU2U9bigoKT0+e1JBPVtbInBhdGgiLHtkOiJNMTIgMnYxMyJ9XSxbInBhdGgiLHtkOiJtMTYgNi00LTQtNCA0In1dLFsicGF0aCIse2Q6Ik00IDEydjhhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi04In1dXX0pO3ZhciBIQSxIU2U9bigoKT0+e0hBPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbImxpbmUiLHt4MToiMyIseDI6IjIxIix5MToiOSIseTI6IjkifV0sWyJsaW5lIix7eDE6IjMiLHgyOiIyMSIseTE6IjE1Iix5MjoiMTUifV0sWyJsaW5lIix7eDE6IjkiLHgyOiI5Iix5MToiOSIseTI6IjIxIn1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1Iix5MToiOSIseTI6IjIxIn1dXX0pO3ZhciBxQSxxU2U9bigoKT0+e3FBPVtbInBhdGgiLHtkOiJNMTQgMTFhMiAyIDAgMSAxLTQgMCA0IDQgMCAwIDEgOCAwIDYgNiAwIDAgMS0xMiAwIDggOCAwIDAgMSAxNiAwIDEwIDEwIDAgMSAxLTIwIDAgMTEuOTMgMTEuOTMgMCAwIDEgMi40Mi03LjIyIDIgMiAwIDEgMSAzLjE2IDIuNDQifV1dfSk7dmFyIFZBLFZTZT1uKCgpPT57VkE9W1sicGF0aCIse2Q6Ik0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiJ9XSxbInBhdGgiLHtkOiJNMTIgOHY0In1dLFsicGF0aCIse2Q6Ik0xMiAxNmguMDEifV1dfSk7dmFyIFVBLFVTZT1uKCgpPT57VUE9W1sicGF0aCIse2Q6Ik0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiJ9XSxbInBhdGgiLHtkOiJtNC4yNDMgNS4yMSAxNC4zOSAxMi40NzIifV1dfSk7dmFyIGpBLGpTZT1uKCgpPT57akE9W1sicGF0aCIse2Q6Ik0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiJ9XSxbInBhdGgiLHtkOiJtOSAxMiAyIDIgNC00In1dXX0pO3ZhciBXQSxXU2U9bigoKT0+e1dBPVtbInBhdGgiLHtkOiJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoifV0sWyJwYXRoIix7ZDoiTTggMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDEyaC4wMSJ9XV19KTt2YXIgR0EsR1NlPW4oKCk9PntHQT1bWyJwYXRoIix7ZDoiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6In1dLFsicGF0aCIse2Q6Ik0xMiAyMlYyIn1dXX0pO3ZhciBZQSxZU2U9bigoKT0+e1lBPVtbInBhdGgiLHtkOiJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoifV0sWyJwYXRoIix7ZDoiTTkgMTJoNiJ9XV19KTt2YXIgWkEsWlNlPW4oKCk9PntaQT1bWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNNSA1YTEgMSAwIDAgMC0xIDF2N2MwIDUgMy41IDcuNSA3LjY3IDguOTRhMSAxIDAgMCAwIC42Ny4wMWMyLjM1LS44MiA0LjQ4LTEuOTcgNS45LTMuNzEifV0sWyJwYXRoIix7ZDoiTTkuMzA5IDMuNjUyQTEyLjI1MiAxMi4yNTIgMCAwIDAgMTEuMjQgMi4yOGExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF2N2E5Ljc4NCA5Ljc4NCAwIDAgMS0uMDggMS4yNjQifV1dfSk7dmFyIFhBLFhTZT1uKCgpPT57WEE9W1sicGF0aCIse2Q6Ik0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiJ9XSxbInBhdGgiLHtkOiJNOSAxMmg2In1dLFsicGF0aCIse2Q6Ik0xMiA5djYifV1dfSk7dmFyIGczLFFTZT1uKCgpPT57ZzM9W1sicGF0aCIse2Q6Ik0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiJ9XSxbInBhdGgiLHtkOiJNOS4xIDlhMyAzIDAgMCAxIDUuODIgMWMwIDItMyAzLTMgMyJ9XSxbInBhdGgiLHtkOiJNMTIgMTdoLjAxIn1dXX0pO3ZhciBRQSxLU2U9bigoKT0+e1FBPVtbInBhdGgiLHtkOiJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoifV0sWyJwYXRoIix7ZDoiTTYuMzc2IDE4LjkxYTYgNiAwIDAgMSAxMS4yNDkuMDAzIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTEiLHI6IjQifV1dfSk7dmFyIHgzLEpTZT1uKCgpPT57eDM9W1sicGF0aCIse2Q6Ik0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiJ9XSxbInBhdGgiLHtkOiJtMTQuNSA5LjUtNSA1In1dLFsicGF0aCIse2Q6Im05LjUgOS41IDUgNSJ9XV19KTt2YXIgS0EsZUNlPW4oKCk9PntLQT1bWyJwYXRoIix7ZDoiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6In1dXX0pO3ZhciBKQSx0Q2U9bigoKT0+e0pBPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI4In1dLFsicGF0aCIse2Q6Ik0xMiAydjcuNSJ9XSxbInBhdGgiLHtkOiJtMTkgNS01LjIzIDUuMjMifV0sWyJwYXRoIix7ZDoiTTIyIDEyaC03LjUifV0sWyJwYXRoIix7ZDoibTE5IDE5LTUuMjMtNS4yMyJ9XSxbInBhdGgiLHtkOiJNMTIgMTQuNVYyMiJ9XSxbInBhdGgiLHtkOiJNMTAuMjMgMTMuNzcgNSAxOSJ9XSxbInBhdGgiLHtkOiJNOS41IDEySDIifV0sWyJwYXRoIix7ZDoiTTEwLjIzIDEwLjIzIDUgNSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIyLjUifV1dfSk7dmFyIGUkLGFDZT1uKCgpPT57ZSQ9W1sicGF0aCIse2Q6Ik0xMiAxMC4xODlWMTQifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MyJ9XSxbInBhdGgiLHtkOiJNMTkgMTNWN2EyIDIgMCAwIDAtMi0ySDdhMiAyIDAgMCAwLTIgMnY2In1dLFsicGF0aCIse2Q6Ik0xOS4zOCAyMEExMS42IDExLjYgMCAwIDAgMjEgMTRsLTguMTg4LTMuNjM5YTIgMiAwIDAgMC0xLjYyNCAwTDMgMTRhMTEuNiAxMS42IDAgMCAwIDIuODEgNy43NiJ9XSxbInBhdGgiLHtkOiJNMiAyMWMuNi41IDEuMiAxIDIuNSAxIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMXMxLjIgMSAyLjUgMWMyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEifV1dfSk7dmFyIHQkLHJDZT1uKCgpPT57dCQ9W1sicGF0aCIse2Q6Ik0yMC4zOCAzLjQ2IDE2IDJhNCA0IDAgMCAxLTggMEwzLjYyIDMuNDZhMiAyIDAgMCAwLTEuMzQgMi4yM2wuNTggMy40N2ExIDEgMCAwIDAgLjk5Ljg0SDZ2MTBjMCAxLjEuOSAyIDIgMmg4YTIgMiAwIDAgMCAyLTJWMTBoMi4xNWExIDEgMCAwIDAgLjk5LS44NGwuNTgtMy40N2EyIDIgMCAwIDAtMS4zNC0yLjIzeiJ9XV19KTt2YXIgYSQsaUNlPW4oKCk9PnthJD1bWyJwYXRoIix7ZDoiTTE2IDEwYTQgNCAwIDAgMS04IDAifV0sWyJwYXRoIix7ZDoiTTMuMTAzIDYuMDM0aDE3Ljc5NCJ9XSxbInBhdGgiLHtkOiJNMy40IDUuNDY3YTIgMiAwIDAgMC0uNCAxLjJWMjBhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjYuNjY3YTIgMiAwIDAgMC0uNC0xLjJsLTItMi42NjdBMiAyIDAgMCAwIDE3IDJIN2EyIDIgMCAwIDAtMS42Ljh6In1dXX0pO3ZhciByJCxvQ2U9bigoKT0+e3IkPVtbInBhdGgiLHtkOiJtMTUgMTEtMSA5In1dLFsicGF0aCIse2Q6Im0xOSAxMS00LTcifV0sWyJwYXRoIix7ZDoiTTIgMTFoMjAifV0sWyJwYXRoIix7ZDoibTMuNSAxMSAxLjYgNy40YTIgMiAwIDAgMCAyIDEuNmg5LjhhMiAyIDAgMCAwIDItMS42bDEuNy03LjQifV0sWyJwYXRoIix7ZDoiTTQuNSAxNS41aDE1In1dLFsicGF0aCIse2Q6Im01IDExIDQtNyJ9XSxbInBhdGgiLHtkOiJtOSAxMSAxIDkifV1dfSk7dmFyIGkkLHNDZT1uKCgpPT57aSQ9W1siY2lyY2xlIix7Y3g6IjgiLGN5OiIyMSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjIxIixyOiIxIn1dLFsicGF0aCIse2Q6Ik0yLjA1IDIuMDVoMmwyLjY2IDEyLjQyYTIgMiAwIDAgMCAyIDEuNThoOS43OGEyIDIgMCAwIDAgMS45NS0xLjU3bDEuNjUtNy40M0g1LjEyIn1dXX0pO3ZhciBvJCxuQ2U9bigoKT0+e28kPVtbInBhdGgiLHtkOiJNMjEuNTYgNC41NmExLjUgMS41IDAgMCAxIDAgMi4xMjJsLS40Ny40N2EzIDMgMCAwIDEtNC4yMTItLjAzIDMgMyAwIDAgMSAwLTQuMjQzbC40NC0uNDRhMS41IDEuNSAwIDAgMSAyLjEyMSAweiJ9XSxbInBhdGgiLHtkOiJNMyAyMmExIDEgMCAwIDEtMS0xdi0zLjU4NmExIDEgMCAwIDEgLjI5My0uNzA3bDMuMzU1LTMuMzU1YTEuMjA1IDEuMjA1IDAgMCAxIDEuNzA0IDBsMy4yOTYgMy4yOTZhMS4yMDUgMS4yMDUgMCAwIDEgMCAxLjcwNGwtMy4zNTUgMy4zNTVhMSAxIDAgMCAxLS43MDcuMjkzeiJ9XSxbInBhdGgiLHtkOiJtOSAxNSA3Ljg3OS03Ljg3OCJ9XV19KTt2YXIgcyQsbENlPW4oKCk9PntzJD1bWyJwYXRoIix7ZDoibTQgNCAyLjUgMi41In1dLFsicGF0aCIse2Q6Ik0xMy41IDYuNWE0Ljk1IDQuOTUgMCAwIDAtNyA3In1dLFsicGF0aCIse2Q6Ik0xNSA1IDUgMTUifV0sWyJwYXRoIix7ZDoiTTE0IDE3di4wMSJ9XSxbInBhdGgiLHtkOiJNMTAgMTZ2LjAxIn1dLFsicGF0aCIse2Q6Ik0xMyAxM3YuMDEifV0sWyJwYXRoIix7ZDoiTTE2IDEwdi4wMSJ9XSxbInBhdGgiLHtkOiJNMTEgMjB2LjAxIn1dLFsicGF0aCIse2Q6Ik0xNyAxNHYuMDEifV0sWyJwYXRoIix7ZDoiTTIwIDExdi4wMSJ9XV19KTt2YXIgbiQsY0NlPW4oKCk9PntuJD1bWyJwYXRoIix7ZDoiTTQgMTNWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djUifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTEwIDIydi01In1dLFsicGF0aCIse2Q6Ik0xNCAxOXYtMiJ9XSxbInBhdGgiLHtkOiJNMTggMjB2LTMifV0sWyJwYXRoIix7ZDoiTTIgMTNoMjAifV0sWyJwYXRoIix7ZDoiTTYgMjB2LTMifV1dfSk7dmFyIGwkLGRDZT1uKCgpPT57bCQ9W1sicGF0aCIse2Q6Ik0xMSAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTEzIDIyYy41LS41IDEuMTItMSAyLjUtMS0xLjM4IDAtMi0uNS0yLjUtMSJ9XSxbInBhdGgiLHtkOiJNMTQgMmEzLjI4IDMuMjggMCAwIDEtMy4yMjcgMS43OThsLTYuMTctLjU2MUEyLjM4NyAyLjM4NyAwIDEgMCA0LjM4NyA4SDE1LjVhMSAxIDAgMCAxIDAgMTMgMSAxIDAgMCAwIDAtNUgxMmE3IDcgMCAwIDEtNy03VjgifV0sWyJwYXRoIix7ZDoiTTE0IDhhOC41IDguNSAwIDAgMSAwIDgifV0sWyJwYXRoIix7ZDoiTTE2IDE2YzIgMCA0LjUtNCA0LTYifV1dfSk7dmFyIGMkLGZDZT1uKCgpPT57YyQ9W1sicGF0aCIse2Q6Im0xNSAxNSA2IDZtLTYtNnY0LjhtMC00LjhoNC44In1dLFsicGF0aCIse2Q6Ik05IDE5LjhWMTVtMCAwSDQuMk05IDE1bC02IDYifV0sWyJwYXRoIix7ZDoiTTE1IDQuMlY5bTAgMGg0LjhNMTUgOWw2LTYifV0sWyJwYXRoIix7ZDoiTTkgNC4yVjltMCAwSDQuMk05IDkgMyAzIn1dXX0pO3ZhciBkJCx1Q2U9bigoKT0+e2QkPVtbInBhdGgiLHtkOiJNMTIgMjJ2LTUuMTcyYTIgMiAwIDAgMC0uNTg2LTEuNDE0TDkuNSAxMy41In1dLFsicGF0aCIse2Q6Ik0xNC41IDE0LjUgMTIgMTcifV0sWyJwYXRoIix7ZDoiTTE3IDguOEE2IDYgMCAwIDEgMTMuOCAyMEgxMEE2LjUgNi41IDAgMCAxIDcgOGE1IDUgMCAwIDEgMTAgMHoifV1dfSk7dmFyIGYkLHBDZT1uKCgpPT57ZiQ9W1sicGF0aCIse2Q6Im0xOCAxNCA0IDQtNCA0In1dLFsicGF0aCIse2Q6Im0xOCAyIDQgNC00IDQifV0sWyJwYXRoIix7ZDoiTTIgMThoMS45NzNhNCA0IDAgMCAwIDMuMy0xLjdsNS40NTQtOC42YTQgNCAwIDAgMSAzLjMtMS43SDIyIn1dLFsicGF0aCIse2Q6Ik0yIDZoMS45NzJhNCA0IDAgMCAxIDMuNiAyLjIifV0sWyJwYXRoIix7ZDoiTTIyIDE4aC02LjA0MWE0IDQgMCAwIDEtMy4zLTEuOGwtLjM1OS0uNDUifV1dfSk7dmFyIHUkLGhDZT1uKCgpPT57dSQ9W1sicGF0aCIse2Q6Ik0yIDIwaC4wMSJ9XSxbInBhdGgiLHtkOiJNNyAyMHYtNCJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2LTgifV0sWyJwYXRoIix7ZDoiTTE3IDIwVjgifV1dfSk7dmFyIHAkLG1DZT1uKCgpPT57cCQ9W1sicGF0aCIse2Q6Ik0xOCA3VjVhMSAxIDAgMCAwLTEtMUg2LjVhLjUuNSAwIDAgMC0uNC44bDQuNSA2YTIgMiAwIDAgMSAwIDIuNGwtNC41IDZhLjUuNSAwIDAgMCAuNC44SDE3YTEgMSAwIDAgMCAxLTF2LTIifV1dfSk7dmFyIGgkLGdDZT1uKCgpPT57aCQ9W1sicGF0aCIse2Q6Ik0yIDIwaC4wMSJ9XSxbInBhdGgiLHtkOiJNNyAyMHYtNCJ9XV19KTt2YXIgbSQseENlPW4oKCk9PnttJD1bWyJwYXRoIix7ZDoiTTIgMjBoLjAxIn1dLFsicGF0aCIse2Q6Ik03IDIwdi00In1dLFsicGF0aCIse2Q6Ik0xMiAyMHYtOCJ9XV19KTt2YXIgZyQsYkNlPW4oKCk9PntnJD1bWyJwYXRoIix7ZDoiTTIgMjBoLjAxIn1dXX0pO3ZhciB4JCx2Q2U9bigoKT0+e3gkPVtbInBhdGgiLHtkOiJNMiAyMGguMDEifV0sWyJwYXRoIix7ZDoiTTcgMjB2LTQifV0sWyJwYXRoIix7ZDoiTTEyIDIwdi04In1dLFsicGF0aCIse2Q6Ik0xNyAyMFY4In1dLFsicGF0aCIse2Q6Ik0yMiA0djE2In1dXX0pO3ZhciBiJCx5Q2U9bigoKT0+e2IkPVtbInBhdGgiLHtkOiJtMjEgMTctMi4xNTYtMS44NjhBLjUuNSAwIDAgMCAxOCAxNS41di41YTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMWMwLTIuNTQ1LTMuOTkxLTMuOTctOC41LTRhMSAxIDAgMCAwIDAgNWM0LjE1MyAwIDQuNzQ1LTExLjI5NSA1LjcwOC0xMy41YTIuNSAyLjUgMCAxIDEgMy4zMSAzLjI4NCJ9XSxbInBhdGgiLHtkOiJNMyAyMWgxOCJ9XV19KTt2YXIgdiQsd0NlPW4oKCk9Pnt2JD1bWyJwYXRoIix7ZDoiTTEwIDlINEwyIDdsMi0yaDYifV0sWyJwYXRoIix7ZDoiTTE0IDVoNmwyIDItMiAyaC02In1dLFsicGF0aCIse2Q6Ik0xMCAyMlY0YTIgMiAwIDEgMSA0IDB2MTgifV0sWyJwYXRoIix7ZDoiTTggMjJoOCJ9XV19KTt2YXIgeSQsTUNlPW4oKCk9Pnt5JD1bWyJwYXRoIix7ZDoiTTEyIDEzdjgifV0sWyJwYXRoIix7ZDoiTTEyIDN2MyJ9XSxbInBhdGgiLHtkOiJNMTggNmEyIDIgMCAwIDEgMS4zODcuNTZsMi4zMDcgMi4yMmExIDEgMCAwIDEgMCAxLjQ0bC0yLjMwNyAyLjIyQTIgMiAwIDAgMSAxOCAxM0g2YTIgMiAwIDAgMS0xLjM4Ny0uNTZsLTIuMzA2LTIuMjJhMSAxIDAgMCAxIDAtMS40NGwyLjMwNi0yLjIyQTIgMiAwIDAgMSA2IDZ6In1dXX0pO3ZhciB3JCx6Q2U9bigoKT0+e3ckPVtbInBhdGgiLHtkOiJNNyAxOHYtNmE1IDUgMCAxIDEgMTAgMHY2In1dLFsicGF0aCIse2Q6Ik01IDIxYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtMWEyIDIgMCAwIDAtMi0ySDdhMiAyIDAgMCAwLTIgMnoifV0sWyJwYXRoIix7ZDoiTTIxIDEyaDEifV0sWyJwYXRoIix7ZDoiTTE4LjUgNC41IDE4IDUifV0sWyJwYXRoIix7ZDoiTTIgMTJoMSJ9XSxbInBhdGgiLHtkOiJNMTIgMnYxIn1dLFsicGF0aCIse2Q6Im00LjkyOSA0LjkyOS43MDcuNzA3In1dLFsicGF0aCIse2Q6Ik0xMiAxMnY2In1dXX0pO3ZhciBNJCxrQ2U9bigoKT0+e00kPVtbInBhdGgiLHtkOiJNMTcuOTcxIDQuMjg1QTIgMiAwIDAgMSAyMSA2djEyYTIgMiAwIDAgMS0zLjAyOSAxLjcxNWwtOS45OTctNS45OThhMiAyIDAgMCAxLS4wMDMtMy40MzJ6In1dLFsicGF0aCIse2Q6Ik0zIDIwVjQifV1dfSk7dmFyIHokLFNDZT1uKCgpPT57eiQ9W1sicGF0aCIse2Q6Im0xMi41IDE3LS41LTEtLjUgMWgxeiJ9XSxbInBhdGgiLHtkOiJNMTUgMjJhMSAxIDAgMCAwIDEtMXYtMWEyIDIgMCAwIDAgMS41Ni0zLjI1IDggOCAwIDEgMC0xMS4xMiAwQTIgMiAwIDAgMCA4IDIwdjFhMSAxIDAgMCAwIDEgMXoifV0sWyJjaXJjbGUiLHtjeDoiMTUiLGN5OiIxMiIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiMTIiLHI6IjEifV1dfSk7dmFyIGskLENDZT1uKCgpPT57ayQ9W1sicGF0aCIse2Q6Ik0yMSA0djE2In1dLFsicGF0aCIse2Q6Ik02LjAyOSA0LjI4NUEyIDIgMCAwIDAgMyA2djEyYTIgMiAwIDAgMCAzLjAyOSAxLjcxNWw5Ljk5Ny01Ljk5OGEyIDIgMCAwIDAgLjAwMy0zLjQzMnoifV1dfSk7dmFyIFMkLExDZT1uKCgpPT57UyQ9W1sicmVjdCIse3dpZHRoOiIzIixoZWlnaHQ6IjgiLHg6IjEzIix5OiIyIixyeDoiMS41In1dLFsicGF0aCIse2Q6Ik0xOSA4LjVWMTBoMS41QTEuNSAxLjUgMCAxIDAgMTkgOC41In1dLFsicmVjdCIse3dpZHRoOiIzIixoZWlnaHQ6IjgiLHg6IjgiLHk6IjE0IixyeDoiMS41In1dLFsicGF0aCIse2Q6Ik01IDE1LjVWMTRIMy41QTEuNSAxLjUgMCAxIDAgNSAxNS41In1dLFsicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjMiLHg6IjE0Iix5OiIxMyIscng6IjEuNSJ9XSxbInBhdGgiLHtkOiJNMTUuNSAxOUgxNHYxLjVhMS41IDEuNSAwIDEgMCAxLjUtMS41In1dLFsicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjMiLHg6IjIiLHk6IjgiLHJ4OiIxLjUifV0sWyJwYXRoIix7ZDoiTTguNSA1SDEwVjMuNUExLjUgMS41IDAgMSAwIDguNSA1In1dXX0pO3ZhciBDJCxUQ2U9bigoKT0+e0MkPVtbInBhdGgiLHtkOiJNMjIgMiAyIDIyIn1dXX0pO3ZhciBMJCxfQ2U9bigoKT0+e0wkPVtbInBhdGgiLHtkOiJNMTEgMTYuNTg2VjE5YTEgMSAwIDAgMS0xIDFIMkwxOC4zNyAzLjYzYTEgMSAwIDEgMSAzIDNsLTkuNjYzIDkuNjYzYTEgMSAwIDAgMS0xLjQxNCAwTDggMTQifV1dfSk7dmFyIFQkLEFDZT1uKCgpPT57VCQ9W1sicGF0aCIse2Q6Ik0xMCA1SDMifV0sWyJwYXRoIix7ZDoiTTEyIDE5SDMifV0sWyJwYXRoIix7ZDoiTTE0IDN2NCJ9XSxbInBhdGgiLHtkOiJNMTYgMTd2NCJ9XSxbInBhdGgiLHtkOiJNMjEgMTJoLTkifV0sWyJwYXRoIix7ZDoiTTIxIDE5aC01In1dLFsicGF0aCIse2Q6Ik0yMSA1aC03In1dLFsicGF0aCIse2Q6Ik04IDEwdjQifV0sWyJwYXRoIix7ZDoiTTggMTJIMyJ9XV19KTt2YXIgYjMsJENlPW4oKCk9PntiMz1bWyJwYXRoIix7ZDoiTTEwIDhoNCJ9XSxbInBhdGgiLHtkOiJNMTIgMjF2LTkifV0sWyJwYXRoIix7ZDoiTTEyIDhWMyJ9XSxbInBhdGgiLHtkOiJNMTcgMTZoNCJ9XSxbInBhdGgiLHtkOiJNMTkgMTJWMyJ9XSxbInBhdGgiLHtkOiJNMTkgMjF2LTUifV0sWyJwYXRoIix7ZDoiTTMgMTRoNCJ9XSxbInBhdGgiLHtkOiJNNSAxMFYzIn1dLFsicGF0aCIse2Q6Ik01IDIxdi03In1dXX0pO3ZhciBfJCxEQ2U9bigoKT0+e18kPVtbInJlY3QiLHt3aWR0aDoiMTQiLGhlaWdodDoiMjAiLHg6IjUiLHk6IjIiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNMTIuNjY3IDggMTAgMTJoNGwtMi42NjcgNCJ9XV19KTt2YXIgQSQsRUNlPW4oKCk9PntBJD1bWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiMTIiLHg6IjIiLHk6IjYiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Ik0xMyA4LjMyYTcuNDMgNy40MyAwIDAgMSAwIDcuMzYifV0sWyJwYXRoIix7ZDoiTTE2LjQ2IDYuMjFhMTEuNzYgMTEuNzYgMCAwIDEgMCAxMS41OCJ9XSxbInBhdGgiLHtkOiJNMTkuOTEgNC4xYTE1LjkxIDE1LjkxIDAgMCAxIC4wMSAxNS44In1dXX0pO3ZhciAkJCxOQ2U9bigoKT0+eyQkPVtbInJlY3QiLHt3aWR0aDoiMTQiLGhlaWdodDoiMjAiLHg6IjUiLHk6IjIiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMThoLjAxIn1dXX0pO3ZhciBEJCxQQ2U9bigoKT0+e0QkPVtbInBhdGgiLHtkOiJNMjIgMTF2MWExMCAxMCAwIDEgMS05LTEwIn1dLFsicGF0aCIse2Q6Ik04IDE0czEuNSAyIDQgMiA0LTIgNC0yIn1dLFsibGluZSIse3gxOiI5Iix4MjoiOS4wMSIseTE6IjkiLHkyOiI5In1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1LjAxIix5MToiOSIseTI6IjkifV0sWyJwYXRoIix7ZDoiTTE2IDVoNiJ9XSxbInBhdGgiLHtkOiJNMTkgMnY2In1dXX0pO3ZhciBFJCxJQ2U9bigoKT0+e0UkPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNOCAxNHMxLjUgMiA0IDIgNC0yIDQtMiJ9XSxbImxpbmUiLHt4MToiOSIseDI6IjkuMDEiLHkxOiI5Iix5MjoiOSJ9XSxbImxpbmUiLHt4MToiMTUiLHgyOiIxNS4wMSIseTE6IjkiLHkyOiI5In1dXX0pO3ZhciBOJCxGQ2U9bigoKT0+e04kPVtbInBhdGgiLHtkOiJNMiAxM2E2IDYgMCAxIDAgMTIgMCA0IDQgMCAxIDAtOCAwIDIgMiAwIDAgMCA0IDAifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiIxMyIscjoiOCJ9XSxbInBhdGgiLHtkOiJNMiAyMWgxMmM0LjQgMCA4LTMuNiA4LThWN2EyIDIgMCAxIDAtNCAwdjYifV0sWyJwYXRoIix7ZDoiTTE4IDMgMTkuMSA1LjIifV0sWyJwYXRoIix7ZDoiTTIyIDMgMjAuOSA1LjIifV1dfSk7dmFyIFAkLE9DZT1uKCgpPT57UCQ9W1sicGF0aCIse2Q6Im0xMCAyMC0xLjI1LTIuNUw2IDE4In1dLFsicGF0aCIse2Q6Ik0xMCA0IDguNzUgNi41IDYgNiJ9XSxbInBhdGgiLHtkOiJtMTQgMjAgMS4yNS0yLjVMMTggMTgifV0sWyJwYXRoIix7ZDoibTE0IDQgMS4yNSAyLjVMMTggNiJ9XSxbInBhdGgiLHtkOiJtMTcgMjEtMy02aC00In1dLFsicGF0aCIse2Q6Im0xNyAzLTMgNiAxLjUgMyJ9XSxbInBhdGgiLHtkOiJNMiAxMmg2LjVMMTAgOSJ9XSxbInBhdGgiLHtkOiJtMjAgMTAtMS41IDIgMS41IDIifV0sWyJwYXRoIix7ZDoiTTIyIDEyaC02LjVMMTQgMTUifV0sWyJwYXRoIix7ZDoibTQgMTAgMS41IDJMNCAxNCJ9XSxbInBhdGgiLHtkOiJtNyAyMSAzLTYtMS41LTMifV0sWyJwYXRoIix7ZDoibTcgMyAzIDZoNCJ9XV19KTt2YXIgSSQsQkNlPW4oKCk9PntJJD1bWyJwYXRoIix7ZDoiTTEwLjUgMnY0In1dLFsicGF0aCIse2Q6Ik0xNCAySDdhMiAyIDAgMCAwLTIgMiJ9XSxbInBhdGgiLHtkOiJNMTkuMjkgMTQuNzZBNi42NyA2LjY3IDAgMCAxIDE3IDExYTYuNiA2LjYgMCAwIDEtMi4yOSAzLjc2Yy0xLjE1LjkyLTEuNzEgMi4wNC0xLjcxIDMuMTkgMCAyLjIyIDEuOCA0LjA1IDQgNC4wNXM0LTEuODMgNC00LjA1YzAtMS4xNi0uNTctMi4yNi0xLjcxLTMuMTkifV0sWyJwYXRoIix7ZDoiTTkuNjA3IDIxSDZhMiAyIDAgMCAxLTItMnYtN2EyIDIgMCAwIDEgMi0yaDdWN2ExIDEgMCAwIDAtMS0xSDlhMSAxIDAgMCAwLTEgMXYzIn1dXX0pO3ZhciBGJCxSQ2U9bigoKT0+e0YkPVtbInBhdGgiLHtkOiJNMjAgOVY2YTIgMiAwIDAgMC0yLTJINmEyIDIgMCAwIDAtMiAydjMifV0sWyJwYXRoIix7ZDoiTTIgMTZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi01YTIgMiAwIDAgMC00IDB2MS41YS41LjUgMCAwIDEtLjUuNWgtMTFhLjUuNSAwIDAgMS0uNS0uNVYxMWEyIDIgMCAwIDAtNCAweiJ9XSxbInBhdGgiLHtkOiJNNCAxOHYyIn1dLFsicGF0aCIse2Q6Ik0yMCAxOHYyIn1dLFsicGF0aCIse2Q6Ik0xMiA0djkifV1dfSk7dmFyIE8kLEhDZT1uKCgpPT57TyQ9W1sicGF0aCIse2Q6Ik0xMSAyaDIifV0sWyJwYXRoIix7ZDoibTE0LjI4IDE0LTQuNTYgOCJ9XSxbInBhdGgiLHtkOiJtMjEgMjItMS41NTgtNEg0LjU1OCJ9XSxbInBhdGgiLHtkOiJNMyAxMHYyIn1dLFsicGF0aCIse2Q6Ik02LjI0NSAxNS4wNEEyIDIgMCAwIDEgOCAxNGgxMmExIDEgMCAwIDEgLjg2NCAxLjUwNWwtMy4xMSA1LjQ1N0EyIDIgMCAwIDEgMTYgMjJINGExIDEgMCAwIDEtLjg2My0xLjUwNnoifV0sWyJwYXRoIix7ZDoiTTcgMmE0IDQgMCAwIDEtNCA0In1dLFsicGF0aCIse2Q6Im04LjY2IDcuNjYgMS40MSAxLjQxIn1dXX0pO3ZhciBCJCxxQ2U9bigoKT0+e0IkPVtbInBhdGgiLHtkOiJNMTIgMjFhOSA5IDAgMCAwIDktOUgzYTkgOSAwIDAgMCA5IDlaIn1dLFsicGF0aCIse2Q6Ik03IDIxaDEwIn1dLFsicGF0aCIse2Q6Ik0xOS41IDEyIDIyIDYifV0sWyJwYXRoIix7ZDoiTTE2LjI1IDNjLjI3LjEuOC41My43NSAxLjM2LS4wNi44My0uOTMgMS4yLTEgMi4wMi0uMDUuNzguMzQgMS4yNC43MyAxLjYyIn1dLFsicGF0aCIse2Q6Ik0xMS4yNSAzYy4yNy4xLjguNTMuNzQgMS4zNi0uMDUuODMtLjkzIDEuMi0uOTggMi4wMi0uMDYuNzguMzMgMS4yNC43MiAxLjYyIn1dLFsicGF0aCIse2Q6Ik02LjI1IDNjLjI3LjEuOC41My43NSAxLjM2LS4wNi44My0uOTMgMS4yLTEgMi4wMi0uMDUuNzguMzQgMS4yNC43NCAxLjYyIn1dXX0pO3ZhciBSJCxWQ2U9bigoKT0+e1IkPVtbInBhdGgiLHtkOiJNMjIgMTd2MWMwIC41LS41IDEtMSAxSDNjLS41IDAtMS0uNS0xLTF2LTEifV1dfSk7dmFyIEgkLFVDZT1uKCgpPT57SCQ9W1sicGF0aCIse2Q6Ik0xMiAxOHY0In1dLFsicGF0aCIse2Q6Ik0yIDE0LjQ5OWE1LjUgNS41IDAgMCAwIDkuNTkxIDMuNjc1LjYuNiAwIDAgMSAuODE4LjAwMUE1LjUgNS41IDAgMCAwIDIyIDE0LjVjMC0yLjI5LTEuNS00LTMtNS41bC01LjQ5Mi01LjMxMmEyIDIgMCAwIDAtMy0uMDJMNSA4Ljk5OWMtMS41IDEuNS0zIDMuMi0zIDUuNSJ9XV19KTt2YXIgcSQsakNlPW4oKCk9PntxJD1bWyJwYXRoIix7ZDoiTTExLjAxNyAyLjgxNGExIDEgMCAwIDEgMS45NjYgMGwxLjA1MSA1LjU1OGEyIDIgMCAwIDAgMS41OTQgMS41OTRsNS41NTggMS4wNTFhMSAxIDAgMCAxIDAgMS45NjZsLTUuNTU4IDEuMDUxYTIgMiAwIDAgMC0xLjU5NCAxLjU5NGwtMS4wNTEgNS41NThhMSAxIDAgMCAxLTEuOTY2IDBsLTEuMDUxLTUuNTU4YTIgMiAwIDAgMC0xLjU5NC0xLjU5NGwtNS41NTgtMS4wNTFhMSAxIDAgMCAxIDAtMS45NjZsNS41NTgtMS4wNTFhMiAyIDAgMCAwIDEuNTk0LTEuNTk0eiJ9XV19KTt2YXIgdjMsV0NlPW4oKCk9Pnt2Mz1bWyJwYXRoIix7ZDoiTTExLjAxNyAyLjgxNGExIDEgMCAwIDEgMS45NjYgMGwxLjA1MSA1LjU1OGEyIDIgMCAwIDAgMS41OTQgMS41OTRsNS41NTggMS4wNTFhMSAxIDAgMCAxIDAgMS45NjZsLTUuNTU4IDEuMDUxYTIgMiAwIDAgMC0xLjU5NCAxLjU5NGwtMS4wNTEgNS41NThhMSAxIDAgMCAxLTEuOTY2IDBsLTEuMDUxLTUuNTU4YTIgMiAwIDAgMC0xLjU5NC0xLjU5NGwtNS41NTgtMS4wNTFhMSAxIDAgMCAxIDAtMS45NjZsNS41NTgtMS4wNTFhMiAyIDAgMCAwIDEuNTk0LTEuNTk0eiJ9XSxbInBhdGgiLHtkOiJNMjAgMnY0In1dLFsicGF0aCIse2Q6Ik0yMiA0aC00In1dLFsiY2lyY2xlIix7Y3g6IjQiLGN5OiIyMCIscjoiMiJ9XV19KTt2YXIgViQsR0NlPW4oKCk9PntWJD1bWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjIwIix4OiI0Iix5OiIyIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgNmguMDEifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxNCIscjoiNCJ9XSxbInBhdGgiLHtkOiJNMTIgMTRoLjAxIn1dXX0pO3ZhciBVJCxZQ2U9bigoKT0+e1UkPVtbInBhdGgiLHtkOiJNOC44IDIwdi00LjFsMS45LjJhMi4zIDIuMyAwIDAgMCAyLjE2NC0yLjFWOC4zQTUuMzcgNS4zNyAwIDAgMCAyIDguMjVjMCAyLjguNjU2IDMuMDU0IDEgNC41NWE1Ljc3IDUuNzcgMCAwIDEgLjAyOSAyLjc1OEwyIDIwIn1dLFsicGF0aCIse2Q6Ik0xOS44IDE3LjhhNy41IDcuNSAwIDAgMCAuMDAzLTEwLjYwMyJ9XSxbInBhdGgiLHtkOiJNMTcgMTVhMy41IDMuNSAwIDAgMC0uMDI1LTQuOTc1In1dXX0pO3ZhciBqJCxaQ2U9bigoKT0+e2okPVtbInBhdGgiLHtkOiJtNiAxNiA2LTEyIDYgMTIifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XSxbInBhdGgiLHtkOiJNNCAyMWMxLjEgMCAxLjEtMSAyLjMtMXMxLjEgMSAyLjMgMWMxLjEgMCAxLjEtMSAyLjMtMSAxLjEgMCAxLjEgMSAyLjMgMSAxLjEgMCAxLjEtMSAyLjMtMSAxLjEgMCAxLjEgMSAyLjMgMSAxLjEgMCAxLjEtMSAyLjMtMSJ9XV19KTt2YXIgVyQsWENlPW4oKCk9PntXJD1bWyJwYXRoIix7ZDoibTYgMTYgNi0xMiA2IDEyIn1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV0sWyJwYXRoIix7ZDoibTE2IDIwIDIgMiA0LTQifV1dfSk7dmFyIEckLFFDZT1uKCgpPT57RyQ9W1sicGF0aCIse2Q6Ik0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiJ9XSxbInBhdGgiLHtkOiJNNSAxN0ExMiAxMiAwIDAgMSAxNyA1In1dLFsiY2lyY2xlIix7Y3g6IjE5IixjeToiNSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI1IixjeToiMTkiLHI6IjIifV1dfSk7dmFyIFkkLEtDZT1uKCgpPT57WSQ9W1siY2lyY2xlIix7Y3g6IjE5IixjeToiNSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI1IixjeToiMTkiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTUgMTdBMTIgMTIgMCAwIDEgMTcgNSJ9XV19KTt2YXIgWiQsSkNlPW4oKCk9PntaJD1bWyJwYXRoIix7ZDoiTTE2IDNoNXY1In1dLFsicGF0aCIse2Q6Ik04IDNIM3Y1In1dLFsicGF0aCIse2Q6Ik0xMiAyMnYtOC4zYTQgNCAwIDAgMC0xLjE3Mi0yLjg3MkwzIDMifV0sWyJwYXRoIix7ZDoibTE1IDkgNi02In1dXX0pO3ZhciBYJCxlTGU9bigoKT0+e1gkPVtbInBhdGgiLHtkOiJNMTcgMTMuNDQgNC40NDIgMTcuMDgyQTIgMiAwIDAgMCA0Ljk4MiAyMUgxOWEyIDIgMCAwIDAgLjU1OC0zLjkyMWwtMS4xMTUtLjMyQTIgMiAwIDAgMSAxNyAxNC44MzdWNy42NiJ9XSxbInBhdGgiLHtkOiJtNyAxMC41NiAxMi41NTgtMy42NDJBMiAyIDAgMCAwIDE5LjAxOCAzSDVhMiAyIDAgMCAwLS41NTggMy45MjFsMS4xMTUuMzJBMiAyIDAgMCAxIDcgOS4xNjN2Ny4xNzgifV1dfSk7dmFyIFEkLHRMZT1uKCgpPT57USQ9W1sicGF0aCIse2Q6Ik0xNS4yOTUgMTkuNTYyIDE2IDIyIn1dLFsicGF0aCIse2Q6Im0xNyAxNiAzLjc1OCAyLjA5OCJ9XSxbInBhdGgiLHtkOiJtMTkgMTIuNSAzLjAyNi0uNTk4In1dLFsicGF0aCIse2Q6Ik03LjYxIDYuM2EzIDMgMCAwIDAtMy45MiAxLjNsLTEuMzggMi43OWEzIDMgMCAwIDAgMS4zIDMuOTFsNi44OSAzLjU5N2ExIDEgMCAwIDAgMS4zNDItLjQ0N2wzLjEwNi02LjIxMWExIDEgMCAwIDAtLjQ0Ny0xLjM0MXoifV0sWyJwYXRoIix7ZDoiTTggOVYyIn1dXX0pO3ZhciBLJCxhTGU9bigoKT0+e0skPVtbInBhdGgiLHtkOiJNMyAzaC4wMSJ9XSxbInBhdGgiLHtkOiJNNyA1aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTEgN2guMDEifV0sWyJwYXRoIix7ZDoiTTMgN2guMDEifV0sWyJwYXRoIix7ZDoiTTcgOWguMDEifV0sWyJwYXRoIix7ZDoiTTMgMTFoLjAxIn1dLFsicmVjdCIse3dpZHRoOiI0IixoZWlnaHQ6IjQiLHg6IjE1Iix5OiI1In1dLFsicGF0aCIse2Q6Im0xOSA5IDIgMnYxMGMwIC42LS40IDEtMSAxaC02Yy0uNiAwLTEtLjQtMS0xVjExbDItMiJ9XSxbInBhdGgiLHtkOiJtMTMgMTQgOC0yIn1dLFsicGF0aCIse2Q6Im0xMyAxOSA4LTIifV1dfSk7dmFyIEokLHJMZT1uKCgpPT57SiQ9W1sicGF0aCIse2Q6Ik0xNCA5LjUzNlY3YTQgNCAwIDAgMSA0LTRoMS41YS41LjUgMCAwIDEgLjUuNVY1YTQgNCAwIDAgMS00IDQgNCA0IDAgMCAwLTQgNGMwIDIgMSAzIDEgNWE1IDUgMCAwIDEtMSAzIn1dLFsicGF0aCIse2Q6Ik00IDlhNSA1IDAgMCAxIDggNCA1IDUgMCAwIDEtOC00In1dLFsicGF0aCIse2Q6Ik01IDIxaDE0In1dXX0pO3ZhciB5MyxpTGU9bigoKT0+e3kzPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xNyAxMmgtMmwtMiA1LTItMTAtMiA1SDcifV1dfSk7dmFyIHczLG9MZT1uKCgpPT57dzM9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoibTE2IDgtOCA4In1dLFsicGF0aCIse2Q6Ik0xNiAxNkg4VjgifV1dfSk7dmFyIE0zLHNMZT1uKCgpPT57TTM9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoibTggOCA4IDgifV0sWyJwYXRoIix7ZDoiTTE2IDh2OEg4In1dXX0pO3ZhciB6MyxuTGU9bigoKT0+e3ozPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xMiA4djgifV0sWyJwYXRoIix7ZDoibTggMTIgNCA0IDQtNCJ9XV19KTt2YXIgazMsbExlPW4oKCk9PntrMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJtMTIgOC00IDQgNCA0In1dLFsicGF0aCIse2Q6Ik0xNiAxMkg4In1dXX0pO3ZhciBTMyxjTGU9bigoKT0+e1MzPVtbInBhdGgiLHtkOiJNMTMgMjFoNmEyIDIgMCAwIDAgMi0yVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2NiJ9XSxbInBhdGgiLHtkOiJtMyAyMSA5LTkifV0sWyJwYXRoIix7ZDoiTTkgMjFIM3YtNiJ9XV19KTt2YXIgQzMsZExlPW4oKCk9PntDMz1bWyJwYXRoIix7ZDoiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2In1dLFsicGF0aCIse2Q6Im0yMSAyMS05LTkifV0sWyJwYXRoIix7ZDoiTTIxIDE1djZoLTYifV1dfSk7dmFyIEwzLGZMZT1uKCgpPT57TDM9W1sicGF0aCIse2Q6Ik0xMyAzaDZhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNiJ9XSxbInBhdGgiLHtkOiJtMyAzIDkgOSJ9XSxbInBhdGgiLHtkOiJNMyA5VjNoNiJ9XV19KTt2YXIgVDMsdUxlPW4oKCk9PntUMz1bWyJwYXRoIix7ZDoiTTIxIDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDYifV0sWyJwYXRoIix7ZDoibTIxIDMtOSA5In1dLFsicGF0aCIse2Q6Ik0xNSAzaDZ2NiJ9XV19KTt2YXIgXzMscExlPW4oKCk9PntfMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOCAxMmg4In1dLFsicGF0aCIse2Q6Im0xMiAxNiA0LTQtNC00In1dXX0pO3ZhciBBMyxoTGU9bigoKT0+e0EzPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik04IDE2VjhoOCJ9XSxbInBhdGgiLHtkOiJNMTYgMTYgOCA4In1dXX0pO3ZhciAkMyxtTGU9bigoKT0+eyQzPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik04IDhoOHY4In1dLFsicGF0aCIse2Q6Im04IDE2IDgtOCJ9XV19KTt2YXIgRDMsZ0xlPW4oKCk9PntEMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJtMTYgMTItNC00LTQgNCJ9XSxbInBhdGgiLHtkOiJNMTIgMTZWOCJ9XV19KTt2YXIgRTMseExlPW4oKCk9PntFMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgOHY4In1dLFsicGF0aCIse2Q6Im04LjUgMTQgNy00In1dLFsicGF0aCIse2Q6Im04LjUgMTAgNyA0In1dXX0pO3ZhciBOMyxiTGU9bigoKT0+e04zPVtbImxpbmUiLHt4MToiNSIseTE6IjMiLHgyOiIxOSIseTI6IjMifV0sWyJsaW5lIix7eDE6IjMiLHkxOiI1Iix4MjoiMyIseTI6IjE5In1dLFsibGluZSIse3gxOiIyMSIseTE6IjUiLHgyOiIyMSIseTI6IjE5In1dLFsibGluZSIse3gxOiI5Iix5MToiMjEiLHgyOiIxMCIseTI6IjIxIn1dLFsibGluZSIse3gxOiIxNCIseTE6IjIxIix4MjoiMTUiLHkyOiIyMSJ9XSxbInBhdGgiLHtkOiJNIDMgNSBBMiAyIDAgMCAxIDUgMyJ9XSxbInBhdGgiLHtkOiJNIDE5IDMgQTIgMiAwIDAgMSAyMSA1In1dLFsicGF0aCIse2Q6Ik0gNSAyMSBBMiAyIDAgMCAxIDMgMTkifV0sWyJwYXRoIix7ZDoiTSAyMSAxOSBBMiAyIDAgMCAxIDE5IDIxIn1dLFsiY2lyY2xlIix7Y3g6IjguNSIsY3k6IjguNSIscjoiMS41In1dLFsibGluZSIse3gxOiI5LjU2MDY2Iix5MToiOS41NjA2NiIseDI6IjEyIix5MjoiMTIifV0sWyJsaW5lIix7eDE6IjE3Iix5MToiMTciLHgyOiIxNC44MiIseTI6IjE0LjgyIn1dLFsiY2lyY2xlIix7Y3g6IjguNSIsY3k6IjE1LjUiLHI6IjEuNSJ9XSxbImxpbmUiLHt4MToiOS41NjA2NiIseTE6IjE0LjQzOTM0Iix4MjoiMTciLHkyOiI3In1dXX0pO3ZhciBSaSx2TGU9bigoKT0+e1JpPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik05IDhoNyJ9XSxbInBhdGgiLHtkOiJNOCAxMmg2In1dLFsicGF0aCIse2Q6Ik0xMSAxNmg1In1dXX0pO3ZhciBQMyx5TGU9bigoKT0+e1AzPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Im05IDEyIDIgMiA0LTQifV1dfSk7dmFyIEkzLHdMZT1uKCgpPT57STM9W1sicGF0aCIse2Q6Ik0yMSAxMC42NTZWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDEyLjM0NCJ9XSxbInBhdGgiLHtkOiJtOSAxMSAzIDNMMjIgNCJ9XV19KTt2YXIgRjMsTUxlPW4oKCk9PntGMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJtMTYgMTAtNCA0LTQtNCJ9XV19KTt2YXIgTzMsekxlPW4oKCk9PntPMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJtMTQgMTYtNC00IDQtNCJ9XV19KTt2YXIgQjMsa0xlPW4oKCk9PntCMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJtMTAgOCA0IDQtNCA0In1dXX0pO3ZhciBSMyxTTGU9bigoKT0+e1IzPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Im04IDE0IDQtNCA0IDQifV1dfSk7dmFyIEgzLENMZT1uKCgpPT57SDM9W1sicGF0aCIse2Q6Im0xMCA5LTMgMyAzIDMifV0sWyJwYXRoIix7ZDoibTE0IDE1IDMtMy0zLTMifV0sWyJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiJ9XV19KTt2YXIgZUQsTExlPW4oKCk9PntlRD1bWyJwYXRoIix7ZDoiTTEwIDkuNSA4IDEybDIgMi41In1dLFsicGF0aCIse2Q6Ik0xNCAyMWgxIn1dLFsicGF0aCIse2Q6Im0xNCA5LjUgMiAyLjUtMiAyLjUifV0sWyJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIn1dLFsicGF0aCIse2Q6Ik05IDIxaDEifV1dfSk7dmFyIHRELFRMZT1uKCgpPT57dEQ9W1sicGF0aCIse2Q6Ik01IDIxYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNOSAyMWgxIn1dLFsicGF0aCIse2Q6Ik0xNCAyMWgxIn1dXX0pO3ZhciBxMyxfTGU9bigoKT0+e3EzPVtbInBhdGgiLHtkOiJNOCA3djcifV0sWyJwYXRoIix7ZDoiTTEyIDd2NCJ9XSxbInBhdGgiLHtkOiJNMTYgN3Y5In1dLFsicGF0aCIse2Q6Ik01IDNhMiAyIDAgMCAwLTIgMiJ9XSxbInBhdGgiLHtkOiJNOSAzaDEifV0sWyJwYXRoIix7ZDoiTTE0IDNoMSJ9XSxbInBhdGgiLHtkOiJNMTkgM2EyIDIgMCAwIDEgMiAyIn1dLFsicGF0aCIse2Q6Ik0yMSA5djEifV0sWyJwYXRoIix7ZDoiTTIxIDE0djEifV0sWyJwYXRoIix7ZDoiTTIxIDE5YTIgMiAwIDAgMS0yIDIifV0sWyJwYXRoIix7ZDoiTTE0IDIxaDEifV0sWyJwYXRoIix7ZDoiTTkgMjFoMSJ9XSxbInBhdGgiLHtkOiJNNSAyMWEyIDIgMCAwIDEtMi0yIn1dLFsicGF0aCIse2Q6Ik0zIDE0djEifV0sWyJwYXRoIix7ZDoiTTMgOXYxIn1dXX0pO3ZhciBWMyxBTGU9bigoKT0+e1YzPVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oifV0sWyJwYXRoIix7ZDoiTTUgM2EyIDIgMCAwIDAtMiAyIn1dLFsicGF0aCIse2Q6Ik0xOSAzYTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMiJ9XSxbInBhdGgiLHtkOiJNOSAzaDEifV0sWyJwYXRoIix7ZDoiTTkgMjFoMiJ9XSxbInBhdGgiLHtkOiJNMTQgM2gxIn1dLFsicGF0aCIse2Q6Ik0zIDl2MSJ9XSxbInBhdGgiLHtkOiJNMjEgOXYyIn1dLFsicGF0aCIse2Q6Ik0zIDE0djEifV1dfSk7dmFyIGFELCRMZT1uKCgpPT57YUQ9W1sicGF0aCIse2Q6Ik0xNCAyMWgxIn1dLFsicGF0aCIse2Q6Ik0yMSAxNHYxIn1dLFsicGF0aCIse2Q6Ik0yMSAxOWEyIDIgMCAwIDEtMiAyIn1dLFsicGF0aCIse2Q6Ik0yMSA5djEifV0sWyJwYXRoIix7ZDoiTTMgMTR2MSJ9XSxbInBhdGgiLHtkOiJNMyA1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMiJ9XSxbInBhdGgiLHtkOiJNMyA5djEifV0sWyJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMiJ9XSxbInBhdGgiLHtkOiJNOSAyMWgxIn1dXX0pO3ZhciBVMyxETGU9bigoKT0+e1UzPVtbInBhdGgiLHtkOiJNNSAzYTIgMiAwIDAgMC0yIDIifV0sWyJwYXRoIix7ZDoiTTE5IDNhMiAyIDAgMCAxIDIgMiJ9XSxbInBhdGgiLHtkOiJNMjEgMTlhMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNNSAyMWEyIDIgMCAwIDEtMi0yIn1dLFsicGF0aCIse2Q6Ik05IDNoMSJ9XSxbInBhdGgiLHtkOiJNOSAyMWgxIn1dLFsicGF0aCIse2Q6Ik0xNCAzaDEifV0sWyJwYXRoIix7ZDoiTTE0IDIxaDEifV0sWyJwYXRoIix7ZDoiTTMgOXYxIn1dLFsicGF0aCIse2Q6Ik0yMSA5djEifV0sWyJwYXRoIix7ZDoiTTMgMTR2MSJ9XSxbInBhdGgiLHtkOiJNMjEgMTR2MSJ9XV19KTt2YXIgajMsRUxlPW4oKCk9PntqMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIscnk6IjIifV0sWyJsaW5lIix7eDE6IjgiLHgyOiIxNiIseTE6IjEyIix5MjoiMTIifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIxNiIseTI6IjE2In1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiOCIseTI6IjgifV1dfSk7dmFyIFczLE5MZT1uKCgpPT57VzM9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMSJ9XV19KTt2YXIgRzMsUExlPW4oKCk9PntHMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNyAxMGgxMCJ9XSxbInBhdGgiLHtkOiJNNyAxNGgxMCJ9XV19KTt2YXIgWTMsSUxlPW4oKCk9PntZMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIscnk6IjIifV0sWyJwYXRoIix7ZDoiTTkgMTdjMiAwIDIuOC0xIDIuOC0yLjhWMTBjMC0yIDEtMy4zIDMuMi0zIn1dLFsicGF0aCIse2Q6Ik05IDExLjJoNS43In1dXX0pO3ZhciBaMyxGTGU9bigoKT0+e1ozPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik04IDd2NyJ9XSxbInBhdGgiLHtkOiJNMTIgN3Y0In1dLFsicGF0aCIse2Q6Ik0xNiA3djkifV1dfSk7dmFyIFgzLE9MZT1uKCgpPT57WDM9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTcgN3YxMCJ9XSxbInBhdGgiLHtkOiJNMTEgN3YxMCJ9XSxbInBhdGgiLHtkOiJtMTUgNyAyIDEwIn1dXX0pO3ZhciBRMyxCTGU9bigoKT0+e1EzPVtbInBhdGgiLHtkOiJNOCAxNlY4LjVhLjUuNSAwIDAgMSAuOS0uM2wyLjcgMy41OTlhLjUuNSAwIDAgMCAuOCAwbDIuNy0zLjZhLjUuNSAwIDAgMSAuOS4zVjE2In1dLFsicmVjdCIse3g6IjMiLHk6IjMiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxOCIscng6IjIifV1dfSk7dmFyIEszLFJMZT1uKCgpPT57SzM9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTcgOGgxMCJ9XSxbInBhdGgiLHtkOiJNNyAxMmgxMCJ9XSxbInBhdGgiLHtkOiJNNyAxNmgxMCJ9XV19KTt2YXIgSjMsSExlPW4oKCk9PntKMz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOCAxMmg4In1dXX0pO3ZhciBlbCxxTGU9bigoKT0+e2VsPVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oifV0sWyJwYXRoIix7ZDoiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2In1dXX0pO3ZhciB0bCxWTGU9bigoKT0+e3RsPVtbInBhdGgiLHtkOiJNMy42IDMuNkEyIDIgMCAwIDEgNSAzaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLS41OSAxLjQxIn1dLFsicGF0aCIse2Q6Ik0zIDguN1YxOWEyIDIgMCAwIDAgMiAyaDEwLjMifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMTMgMTNhMyAzIDAgMSAwIDAtNkg5djIifV0sWyJwYXRoIix7ZDoiTTkgMTd2LTIuMyJ9XV19KTt2YXIgYWwsVUxlPW4oKCk9PnthbD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOSAxN1Y3aDRhMyAzIDAgMCAxIDAgNkg5In1dXX0pO3ZhciBhcixqTGU9bigoKT0+e2FyPVtbInBhdGgiLHtkOiJNMTIgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi03In1dLFsicGF0aCIse2Q6Ik0xOC4zNzUgMi42MjVhMSAxIDAgMCAxIDMgM2wtOS4wMTMgOS4wMTRhMiAyIDAgMCAxLS44NTMuNTA1bC0yLjg3My44NGEuNS41IDAgMCAxLS42Mi0uNjJsLjg0LTIuODczYTIgMiAwIDAgMSAuNTA2LS44NTJ6In1dXX0pO3ZhciByRCxXTGU9bigoKT0+e3JEPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsibGluZSIse3gxOiIxMCIseDI6IjEwIix5MToiMTUiLHkyOiI5In1dLFsibGluZSIse3gxOiIxNCIseDI6IjE0Iix5MToiMTUiLHkyOiI5In1dXX0pO3ZhciBybCxHTGU9bigoKT0+e3JsPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Im0xNSA5LTYgNiJ9XSxbInBhdGgiLHtkOiJNOSA5aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTUgMTVoLjAxIn1dXX0pO3ZhciBpbCxZTGU9bigoKT0+e2lsPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik03IDdoMTAifV0sWyJwYXRoIix7ZDoiTTEwIDd2MTAifV0sWyJwYXRoIix7ZDoiTTE2IDE3YTIgMiAwIDAgMS0yLTJWNyJ9XV19KTt2YXIgb2wsWkxlPW4oKCk9PntvbD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTJIOS41YTIuNSAyLjUgMCAwIDEgMC01SDE3In1dLFsicGF0aCIse2Q6Ik0xMiA3djEwIn1dLFsicGF0aCIse2Q6Ik0xNiA3djEwIn1dXX0pO3ZhciBzbCxYTGU9bigoKT0+e3NsPVtbInJlY3QiLHt4OiIzIix5OiIzIix3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik05IDkuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N0ExIDEgMCAwIDEgOSAxNC45OTZ6In1dXX0pO3ZhciBubCxRTGU9bigoKT0+e25sPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV0sWyJwYXRoIix7ZDoiTTEyIDh2OCJ9XV19KTt2YXIgbGwsS0xlPW4oKCk9PntsbD1bWyJwYXRoIix7ZDoiTTEyIDd2NCJ9XSxbInBhdGgiLHtkOiJNNy45OTggOS4wMDNhNSA1IDAgMSAwIDgtLjAwNSJ9XSxbInJlY3QiLHt4OiIzIix5OiIzIix3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHJ4OiIyIn1dXX0pO3ZhciBpRCxKTGU9bigoKT0+e2lEPVtbInBhdGgiLHtkOiJNNyAxMmgybDIgNSAyLTEwaDQifV0sWyJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiJ9XV19KTt2YXIgY2wsZVRlPW4oKCk9PntjbD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbImNpcmNsZSIse2N4OiI4LjUiLGN5OiI4LjUiLHI6IjEuNSJ9XSxbImxpbmUiLHt4MToiOS41NjA2NiIseTE6IjkuNTYwNjYiLHgyOiIxMiIseTI6IjEyIn1dLFsibGluZSIse3gxOiIxNyIseTE6IjE3Iix4MjoiMTQuODIiLHkyOiIxNC44MiJ9XSxbImNpcmNsZSIse2N4OiI4LjUiLGN5OiIxNS41IixyOiIxLjUifV0sWyJsaW5lIix7eDE6IjkuNTYwNjYiLHkxOiIxNC40MzkzNCIseDI6IjE3Iix5MjoiNyJ9XV19KTt2YXIgb0QsdFRlPW4oKCk9PntvRD1bWyJwYXRoIix7ZDoiTTIxIDExYTggOCAwIDAgMC04LTgifV0sWyJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDQifV1dfSk7dmFyIGRsLGFUZT1uKCgpPT57ZGw9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTE2IDguOVY3SDhsNCA1LTQgNWg4di0xLjkifV1dfSk7dmFyIGZsLHJUZT1uKCgpPT57Zmw9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJsaW5lIix7eDE6IjkiLHgyOiIxNSIseTE6IjE1Iix5MjoiOSJ9XV19KTt2YXIgdWwsaVRlPW4oKCk9Pnt1bD1bWyJwYXRoIix7ZDoiTTggMTlINWMtMSAwLTItMS0yLTJWN2MwLTEgMS0yIDItMmgzIn1dLFsicGF0aCIse2Q6Ik0xNiA1aDNjMSAwIDIgMSAyIDJ2MTBjMCAxLTEgMi0yIDJoLTMifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiI0Iix5MjoiMjAifV1dfSk7dmFyIHBsLG9UZT1uKCgpPT57cGw9W1sicGF0aCIse2Q6Ik01IDhWNWMwLTEgMS0yIDItMmgxMGMxIDAgMiAxIDIgMnYzIn1dLFsicGF0aCIse2Q6Ik0xOSAxNnYzYzAgMS0xIDItMiAySDdjLTEgMC0yLTEtMi0ydi0zIn1dLFsibGluZSIse3gxOiI0Iix4MjoiMjAiLHkxOiIxMiIseTI6IjEyIn1dXX0pO3ZhciBzRCxzVGU9bigoKT0+e3NEPVtbInJlY3QiLHt4OiIzIix5OiIzIix3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHJ4OiIyIn1dLFsicmVjdCIse3g6IjgiLHk6IjgiLHdpZHRoOiI4IixoZWlnaHQ6IjgiLHJ4OiIxIn1dXX0pO3ZhciBuRCxuVGU9bigoKT0+e25EPVtbInBhdGgiLHtkOiJNNCAxMGMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDRjMS4xIDAgMiAuOSAyIDIifV0sWyJwYXRoIix7ZDoiTTEwIDE2Yy0xLjEgMC0yLS45LTItMnYtNGMwLTEuMS45LTIgMi0yaDRjMS4xIDAgMiAuOSAyIDIifV0sWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiOCIseDoiMTQiLHk6IjE0IixyeDoiMiJ9XV19KTt2YXIgbEQsbFRlPW4oKCk9PntsRD1bWyJwYXRoIix7ZDoiTTExLjAzNSA3LjY5YTEgMSAwIDAgMSAxLjkwOS4wMjRsLjczNyAxLjQ1MmExIDEgMCAwIDAgLjczNy41MzVsMS42MzQuMjU2YTEgMSAwIDAgMSAuNTg4IDEuODA2bC0xLjE3MiAxLjE2OGExIDEgMCAwIDAtLjI4Mi44NjZsLjI1OSAxLjYxM2ExIDEgMCAwIDEtMS41NDEgMS4xMzRsLTEuNDY1LS43NWExIDEgMCAwIDAtLjkxMiAwbC0xLjQ2NS43NWExIDEgMCAwIDEtMS41MzktMS4xMzNsLjI1OC0xLjYxM2ExIDEgMCAwIDAtLjI4Mi0uODY2bC0xLjE1Ni0xLjE1M2ExIDEgMCAwIDEgLjU3Mi0xLjgyMmwxLjYzMy0uMjU2YTEgMSAwIDAgMCAuNzM3LS41MzV6In1dLFsicmVjdCIse3g6IjMiLHk6IjMiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxOCIscng6IjIifV1dfSk7dmFyIGNELGNUZT1uKCgpPT57Y0Q9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJyZWN0Iix7eDoiOSIseToiOSIsd2lkdGg6IjYiLGhlaWdodDoiNiIscng6IjEifV1dfSk7dmFyIGhsLGRUZT1uKCgpPT57aGw9W1sicGF0aCIse2Q6Im03IDExIDItMi0yLTIifV0sWyJwYXRoIix7ZDoiTTExIDEzaDQifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIscnk6IjIifV1dfSk7dmFyIG1sLGZUZT1uKCgpPT57bWw9W1sicGF0aCIse2Q6Ik0xOCAyMWE2IDYgMCAwIDAtMTIgMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjExIixyOiI0In1dLFsicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV1dfSk7dmFyIGdsLHVUZT1uKCgpPT57Z2w9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMCIscjoiMyJ9XSxbInBhdGgiLHtkOiJNNyAyMXYtMmEyIDIgMCAwIDEgMi0yaDZhMiAyIDAgMCAxIDIgMnYyIn1dXX0pO3ZhciB4bCxwVGU9bigoKT0+e3hsPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJtMTUgOS02IDYifV0sWyJwYXRoIix7ZDoibTkgOSA2IDYifV1dfSk7dmFyIGRELGhUZT1uKCgpPT57ZEQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV1dfSk7dmFyIGZELG1UZT1uKCgpPT57ZkQ9W1sicGF0aCIse2Q6Ik0xNiAxMnYyYTIgMiAwIDAgMS0yIDJIOWExIDEgMCAwIDAtMSAxdjNhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yVjEwYTIgMiAwIDAgMC0yLTJoMCJ9XSxbInBhdGgiLHtkOiJNNCAxNmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjNhMSAxIDAgMCAxLTEgMWgtNWEyIDIgMCAwIDAtMiAydjIifV1dfSk7dmFyIHVELGdUZT1uKCgpPT57dUQ9W1sicGF0aCIse2Q6Ik0xMCAyMmEyIDIgMCAwIDEtMi0yIn1dLFsicGF0aCIse2Q6Ik0xNCAyYTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTE2IDIyaC0yIn1dLFsicGF0aCIse2Q6Ik0yIDEwVjgifV0sWyJwYXRoIix7ZDoiTTIgNGEyIDIgMCAwIDEgMi0yIn1dLFsicGF0aCIse2Q6Ik0yMCA4YTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTIyIDE0djIifV0sWyJwYXRoIix7ZDoiTTIyIDIwYTIgMiAwIDAgMS0yIDIifV0sWyJwYXRoIix7ZDoiTTQgMTZhMiAyIDAgMCAxLTItMiJ9XSxbInBhdGgiLHtkOiJNOCAxMGEyIDIgMCAwIDEgMi0yaDVhMSAxIDAgMCAxIDEgMXY1YTIgMiAwIDAgMS0yIDJIOWExIDEgMCAwIDEtMS0xeiJ9XSxbInBhdGgiLHtkOiJNOCAyaDIifV1dfSk7dmFyIHBELHhUZT1uKCgpPT57cEQ9W1sicGF0aCIse2Q6Ik0xMCAyMmEyIDIgMCAwIDEtMi0yIn1dLFsicGF0aCIse2Q6Ik0xNiAyMmgtMiJ9XSxbInBhdGgiLHtkOiJNMTYgNGEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDNhMSAxIDAgMCAwIDEtMXYtNWEyIDIgMCAwIDEgMi0yaDVhMSAxIDAgMCAwIDEtMXoifV0sWyJwYXRoIix7ZDoiTTIwIDhhMiAyIDAgMCAxIDIgMiJ9XSxbInBhdGgiLHtkOiJNMjIgMTR2MiJ9XSxbInBhdGgiLHtkOiJNMjIgMjBhMiAyIDAgMCAxLTIgMiJ9XV19KTt2YXIgaEQsYlRlPW4oKCk9PntoRD1bWyJwYXRoIix7ZDoiTTEzLjc3IDMuMDQzYTM0IDM0IDAgMCAwLTMuNTQgMCJ9XSxbInBhdGgiLHtkOiJNMTMuNzcxIDIwLjk1NmEzMyAzMyAwIDAgMS0zLjU0MS4wMDEifV0sWyJwYXRoIix7ZDoiTTIwLjE4IDE3Ljc0Yy0uNTEgMS4xNS0xLjI5IDEuOTMtMi40MzkgMi40NCJ9XSxbInBhdGgiLHtkOiJNMjAuMTggNi4yNTljLS41MS0xLjE0OC0xLjI5MS0xLjkyOS0yLjQ0LTIuNDM4In1dLFsicGF0aCIse2Q6Ik0yMC45NTcgMTAuMjNhMzMgMzMgMCAwIDEgMCAzLjU0In1dLFsicGF0aCIse2Q6Ik0zLjA0MyAxMC4yM2EzNCAzNCAwIDAgMCAuMDAxIDMuNTQxIn1dLFsicGF0aCIse2Q6Ik02LjI2IDIwLjE3OWMtMS4xNS0uNTA4LTEuOTMtMS4yOS0yLjQ0LTIuNDM4In1dLFsicGF0aCIse2Q6Ik02LjI2IDMuODJjLTEuMTQ5LjUxLTEuOTMgMS4yOTEtMi40NCAyLjQ0In1dXX0pO3ZhciBtRCx2VGU9bigoKT0+e21EPVtbInBhdGgiLHtkOiJNNCAxNmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjNhMSAxIDAgMCAwIDEgMWgzYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgxMGEyIDIgMCAwIDEtMi0ydi0zYTEgMSAwIDAgMC0xLTF6In1dXX0pO3ZhciBnRCx5VGU9bigoKT0+e2dEPVtbInBhdGgiLHtkOiJNMTIgM2M3LjIgMCA5IDEuOCA5IDlzLTEuOCA5LTkgOS05LTEuOC05LTkgMS44LTkgOS05In1dXX0pO3ZhciB4RCx3VGU9bigoKT0+e3hEPVtbInBhdGgiLHtkOiJNMTUuMjM2IDIyYTMgMyAwIDAgMC0yLjItNSJ9XSxbInBhdGgiLHtkOiJNMTYgMjBhMyAzIDAgMCAxIDMtM2gxYTIgMiAwIDAgMCAyLTJ2LTJhNCA0IDAgMCAwLTQtNFY0In1dLFsicGF0aCIse2Q6Ik0xOCAxM2guMDEifV0sWyJwYXRoIix7ZDoiTTE4IDZhNCA0IDAgMCAwLTQgNCA3IDcgMCAwIDAtNyA3YzAtNSA0LTUgNC0xMC41YTQuNSA0LjUgMCAxIDAtOSAwIDIuNSAyLjUgMCAwIDAgNSAwQzcgMTAgMyAxMSAzIDE3YzAgMi44IDIuMiA1IDUgNWgxMCJ9XV19KTt2YXIgYkQsTVRlPW4oKCk9PntiRD1bWyJwYXRoIix7ZDoiTTE0IDEzVjguNUMxNCA3IDE1IDcgMTUgNWEzIDMgMCAwIDAtNiAwYzAgMiAxIDIgMSAzLjVWMTMifV0sWyJwYXRoIix7ZDoiTTIwIDE1LjVhMi41IDIuNSAwIDAgMC0yLjUtMi41aC0xMUEyLjUgMi41IDAgMCAwIDQgMTUuNVYxN2ExIDEgMCAwIDAgMSAxaDE0YTEgMSAwIDAgMCAxLTF6In1dLFsicGF0aCIse2Q6Ik01IDIyaDE0In1dXX0pO3ZhciB2RCx6VGU9bigoKT0+e3ZEPVtbInBhdGgiLHtkOiJNOC4zNCA4LjM0IDIgOS4yN2w1IDQuODdMNS44MiAyMSAxMiAxNy43NyAxOC4xOCAyMWwtLjU5LTMuNDMifV0sWyJwYXRoIix7ZDoiTTE4LjQyIDEyLjc2IDIyIDkuMjdsLTYuOTEtMUwxMiAybC0xLjQ0IDIuOTEifV0sWyJsaW5lIix7eDE6IjIiLHgyOiIyMiIseTE6IjIiLHkyOiIyMiJ9XV19KTt2YXIgeUQsa1RlPW4oKCk9Pnt5RD1bWyJwYXRoIix7ZDoiTTEyIDE4LjMzOGEyLjEgMi4xIDAgMCAwLS45ODcuMjQ0TDYuMzk2IDIxLjAxYS41My41MyAwIDAgMS0uNzctLjU2bC44ODEtNS4xMzlhMi4xMiAyLjEyIDAgMCAwLS42MTEtMS44NzlMMi4xNiA5Ljc5NWEuNTMuNTMgMCAwIDEgLjI5NC0uOTA2bDUuMTY1LS43NTVhMi4xMiAyLjEyIDAgMCAwIDEuNTk3LTEuMTZsMi4zMDktNC42NzlBLjUzLjUzIDAgMCAxIDEyIDIifV1dfSk7dmFyIHdELFNUZT1uKCgpPT57d0Q9W1sicGF0aCIse2Q6Ik0xMS41MjUgMi4yOTVhLjUzLjUzIDAgMCAxIC45NSAwbDIuMzEgNC42NzlhMi4xMjMgMi4xMjMgMCAwIDAgMS41OTUgMS4xNmw1LjE2Ni43NTZhLjUzLjUzIDAgMCAxIC4yOTQuOTA0bC0zLjczNiAzLjYzOGEyLjEyMyAyLjEyMyAwIDAgMC0uNjExIDEuODc4bC44ODIgNS4xNGEuNTMuNTMgMCAwIDEtLjc3MS41NmwtNC42MTgtMi40MjhhMi4xMjIgMi4xMjIgMCAwIDAtMS45NzMgMEw2LjM5NiAyMS4wMWEuNTMuNTMgMCAwIDEtLjc3LS41NmwuODgxLTUuMTM5YTIuMTIyIDIuMTIyIDAgMCAwLS42MTEtMS44NzlMMi4xNiA5Ljc5NWEuNTMuNTMgMCAwIDEgLjI5NC0uOTA2bDUuMTY1LS43NTVhMi4xMjIgMi4xMjIgMCAwIDAgMS41OTctMS4xNnoifV1dfSk7dmFyIE1ELENUZT1uKCgpPT57TUQ9W1sicGF0aCIse2Q6Ik0xMy45NzEgNC4yODVBMiAyIDAgMCAxIDE3IDZ2MTJhMiAyIDAgMCAxLTMuMDI5IDEuNzE1bC05Ljk5Ny01Ljk5OGEyIDIgMCAwIDEtLjAwMy0zLjQzMnoifV0sWyJwYXRoIix7ZDoiTTIxIDIwVjQifV1dfSk7dmFyIHpELExUZT1uKCgpPT57ekQ9W1sicGF0aCIse2Q6Ik0xMC4wMjkgNC4yODVBMiAyIDAgMCAwIDcgNnYxMmEyIDIgMCAwIDAgMy4wMjkgMS43MTVsOS45OTctNS45OThhMiAyIDAgMCAwIC4wMDMtMy40MzJ6In1dLFsicGF0aCIse2Q6Ik0zIDR2MTYifV1dfSk7dmFyIGtELFRUZT1uKCgpPT57a0Q9W1sicGF0aCIse2Q6Ik0xMSAydjIifV0sWyJwYXRoIix7ZDoiTTUgMnYyIn1dLFsicGF0aCIse2Q6Ik01IDNINGEyIDIgMCAwIDAtMiAydjRhNiA2IDAgMCAwIDEyIDBWNWEyIDIgMCAwIDAtMi0yaC0xIn1dLFsicGF0aCIse2Q6Ik04IDE1YTYgNiAwIDAgMCAxMiAwdi0zIn1dLFsiY2lyY2xlIix7Y3g6IjIwIixjeToiMTAiLHI6IjIifV1dfSk7dmFyIFNELF9UZT1uKCgpPT57U0Q9W1sicGF0aCIse2Q6Ik0yMSA5YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNSAzSDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ6In1dLFsicGF0aCIse2Q6Ik0xNSAzdjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik04IDEzaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTNoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMCAxNnMuOCAxIDIgMWMxLjMgMCAyLTEgMi0xIn1dXX0pO3ZhciBDRCxBVGU9bigoKT0+e0NEPVtbInBhdGgiLHtkOiJNMTEuMjY0IDIuMjA1QTQgNCAwIDAgMCA2LjQyIDQuMjExbC00IDhhNCA0IDAgMCAwIDEuMzU5IDUuMTE3bDYgNGE0IDQgMCAwIDAgNC40MzggMGw2LTRhNCA0IDAgMCAwIDEuNTc2LTQuNTkybC0yLTZhNCA0IDAgMCAwLTIuNTMtMi41M3oifV0sWyJwYXRoIix7ZDoiTTExLjk5IDIyIDE0IDEybDcuODIyIDMuMTg0In1dLFsicGF0aCIse2Q6Ik0xNCAxMiA4LjQ3IDIuMzAyIn1dXX0pO3ZhciBMRCwkVGU9bigoKT0+e0xEPVtbInBhdGgiLHtkOiJNMjEgOWEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTUgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yeiJ9XSxbInBhdGgiLHtkOiJNMTUgM3Y1YTEgMSAwIDAgMCAxIDFoNSJ9XV19KTt2YXIgVEQsRFRlPW4oKCk9PntURD1bWyJwYXRoIix7ZDoiTTE1IDIxdi01YTEgMSAwIDAgMC0xLTFoLTRhMSAxIDAgMCAwLTEgMXY1In1dLFsicGF0aCIse2Q6Ik0xNy43NzQgMTAuMzFhMS4xMiAxLjEyIDAgMCAwLTEuNTQ5IDAgMi41IDIuNSAwIDAgMS0zLjQ1MSAwIDEuMTIgMS4xMiAwIDAgMC0xLjU0OCAwIDIuNSAyLjUgMCAwIDEtMy40NTIgMCAxLjEyIDEuMTIgMCAwIDAtMS41NDkgMCAyLjUgMi41IDAgMCAxLTMuNzctMy4yNDhsMi44ODktNC4xODRBMiAyIDAgMCAxIDcgMmgxMGEyIDIgMCAwIDEgMS42NTMuODczbDIuODk1IDQuMTkyYTIuNSAyLjUgMCAwIDEtMy43NzQgMy4yNDQifV0sWyJwYXRoIix7ZDoiTTQgMTAuOTVWMTlhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi04LjA1In1dXX0pO3ZhciBfRCxFVGU9bigoKT0+e19EPVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiNiIseDoiMiIseToiNCIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjYiLHg6IjIiLHk6IjE0IixyeDoiMiJ9XV19KTt2YXIgQUQsTlRlPW4oKCk9PntBRD1bWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMjAiLHg6IjQiLHk6IjIiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjIwIix4OiIxNCIseToiMiIscng6IjIifV1dfSk7dmFyICRELFBUZT1uKCgpPT57JEQ9W1sicGF0aCIse2Q6Ik0xNiA0SDlhMyAzIDAgMCAwLTIuODMgNCJ9XSxbInBhdGgiLHtkOiJNMTQgMTJhNCA0IDAgMCAxIDAgOEg2In1dLFsibGluZSIse3gxOiI0Iix4MjoiMjAiLHkxOiIxMiIseTI6IjEyIn1dXX0pO3ZhciBERCxJVGU9bigoKT0+e0REPVtbInBhdGgiLHtkOiJtNCA1IDggOCJ9XSxbInBhdGgiLHtkOiJtMTIgNS04IDgifV0sWyJwYXRoIix7ZDoiTTIwIDE5aC00YzAtMS41LjQ0LTIgMS41LTIuNVMyMCAxNS4zMyAyMCAxNGMwLS40Ny0uMTctLjkzLS40OC0xLjI5YTIuMTEgMi4xMSAwIDAgMC0yLjYyLS40NGMtLjQyLjI0LS43NC42Mi0uOSAxLjA3In1dXX0pO3ZhciBFRCxGVGU9bigoKT0+e0VEPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0In1dLFsicGF0aCIse2Q6Ik0xMiA0aC4wMSJ9XSxbInBhdGgiLHtkOiJNMjAgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAyMGguMDEifV0sWyJwYXRoIix7ZDoiTTQgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNy42NTcgNi4zNDNoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNy42NTcgMTcuNjU3aC4wMSJ9XSxbInBhdGgiLHtkOiJNNi4zNDMgMTcuNjU3aC4wMSJ9XSxbInBhdGgiLHtkOiJNNi4zNDMgNi4zNDNoLjAxIn1dXX0pO3ZhciBORCxPVGU9bigoKT0+e05EPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0In1dLFsicGF0aCIse2Q6Ik0xMiAzdjEifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjEifV0sWyJwYXRoIix7ZDoiTTMgMTJoMSJ9XSxbInBhdGgiLHtkOiJNMjAgMTJoMSJ9XSxbInBhdGgiLHtkOiJtMTguMzY0IDUuNjM2LS43MDcuNzA3In1dLFsicGF0aCIse2Q6Im02LjM0MyAxNy42NTctLjcwNy43MDcifV0sWyJwYXRoIix7ZDoibTUuNjM2IDUuNjM2LjcwNy43MDcifV0sWyJwYXRoIix7ZDoibTE3LjY1NyAxNy42NTcuNzA3LjcwNyJ9XV19KTt2YXIgUEQsQlRlPW4oKCk9PntQRD1bWyJwYXRoIix7ZDoiTTEyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTQuODM3IDE2LjM4NWE2IDYgMCAxIDEtNy4yMjMtNy4yMjJjLjYyNC0uMTQ3Ljk3LjY2LjcxNSAxLjI0OGE0IDQgMCAwIDAgNS4yNiA1LjI1OWMuNTg5LS4yNTUgMS4zOTYuMDkgMS4yNDguNzE1In1dLFsicGF0aCIse2Q6Ik0xNiAxMmE0IDQgMCAwIDAtNC00In1dLFsicGF0aCIse2Q6Im0xOSA1LTEuMjU2IDEuMjU2In1dLFsicGF0aCIse2Q6Ik0yMCAxMmgyIn1dXX0pO3ZhciBJRCxSVGU9bigoKT0+e0lEPVtbInBhdGgiLHtkOiJNMTAgMjF2LTEifV0sWyJwYXRoIix7ZDoiTTEwIDRWMyJ9XSxbInBhdGgiLHtkOiJNMTAgOWEzIDMgMCAwIDAgMCA2In1dLFsicGF0aCIse2Q6Im0xNCAyMCAxLjI1LTIuNUwxOCAxOCJ9XSxbInBhdGgiLHtkOiJtMTQgNCAxLjI1IDIuNUwxOCA2In1dLFsicGF0aCIse2Q6Im0xNyAyMS0zLTYgMS41LTNIMjIifV0sWyJwYXRoIix7ZDoibTE3IDMtMyA2IDEuNSAzIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDEifV0sWyJwYXRoIix7ZDoibTIwIDEwLTEuNSAyIDEuNSAyIn1dLFsicGF0aCIse2Q6Im0zLjY0IDE4LjM2LjctLjcifV0sWyJwYXRoIix7ZDoibTQuMzQgNi4zNC0uNy0uNyJ9XV19KTt2YXIgRkQsSFRlPW4oKCk9PntGRD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNCJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xMiAyMHYyIn1dLFsicGF0aCIse2Q6Im00LjkzIDQuOTMgMS40MSAxLjQxIn1dLFsicGF0aCIse2Q6Im0xNy42NiAxNy42NiAxLjQxIDEuNDEifV0sWyJwYXRoIix7ZDoiTTIgMTJoMiJ9XSxbInBhdGgiLHtkOiJNMjAgMTJoMiJ9XSxbInBhdGgiLHtkOiJtNi4zNCAxNy42Ni0xLjQxIDEuNDEifV0sWyJwYXRoIix7ZDoibTE5LjA3IDQuOTMtMS40MSAxLjQxIn1dXX0pO3ZhciBPRCxxVGU9bigoKT0+e09EPVtbInBhdGgiLHtkOiJNMTIgMnY4In1dLFsicGF0aCIse2Q6Im00LjkzIDEwLjkzIDEuNDEgMS40MSJ9XSxbInBhdGgiLHtkOiJNMiAxOGgyIn1dLFsicGF0aCIse2Q6Ik0yMCAxOGgyIn1dLFsicGF0aCIse2Q6Im0xOS4wNyAxMC45My0xLjQxIDEuNDEifV0sWyJwYXRoIix7ZDoiTTIyIDIySDIifV0sWyJwYXRoIix7ZDoibTggNiA0LTQgNCA0In1dLFsicGF0aCIse2Q6Ik0xNiAxOGE0IDQgMCAwIDAtOCAwIn1dXX0pO3ZhciBCRCxWVGU9bigoKT0+e0JEPVtbInBhdGgiLHtkOiJNMTIgMTBWMiJ9XSxbInBhdGgiLHtkOiJtNC45MyAxMC45MyAxLjQxIDEuNDEifV0sWyJwYXRoIix7ZDoiTTIgMThoMiJ9XSxbInBhdGgiLHtkOiJNMjAgMThoMiJ9XSxbInBhdGgiLHtkOiJtMTkuMDcgMTAuOTMtMS40MSAxLjQxIn1dLFsicGF0aCIse2Q6Ik0yMiAyMkgyIn1dLFsicGF0aCIse2Q6Im0xNiA2LTQgNC00LTQifV0sWyJwYXRoIix7ZDoiTTE2IDE4YTQgNCAwIDAgMC04IDAifV1dfSk7dmFyIFJELFVUZT1uKCgpPT57UkQ9W1sicGF0aCIse2Q6Im00IDE5IDgtOCJ9XSxbInBhdGgiLHtkOiJtMTIgMTktOC04In1dLFsicGF0aCIse2Q6Ik0yMCAxMmgtNGMwLTEuNS40NDItMiAxLjUtMi41UzIwIDguMzM0IDIwIDcuMDAyYzAtLjQ3Mi0uMTctLjkzLS40ODQtMS4yOWEyLjEwNSAyLjEwNSAwIDAgMC0yLjYxNy0uNDM2Yy0uNDIuMjM5LS43MzguNjE0LS44OTkgMS4wNiJ9XV19KTt2YXIgSEQsalRlPW4oKCk9PntIRD1bWyJwYXRoIix7ZDoiTTExIDE3YTQgNCAwIDAgMS04IDBWNWEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMloifV0sWyJwYXRoIix7ZDoiTTE2LjcgMTNIMTlhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINyJ9XSxbInBhdGgiLHtkOiJNIDcgMTdoLjAxIn1dLFsicGF0aCIse2Q6Im0xMSA4IDIuMy0yLjNhMi40IDIuNCAwIDAgMSAzLjQwNC4wMDRMMTguNiA3LjZhMi40IDIuNCAwIDAgMSAuMDI2IDMuNDM0TDkuOSAxOS44In1dXX0pO3ZhciBxRCxXVGU9bigoKT0+e3FEPVtbInBhdGgiLHtkOiJNMTAgMjFWM2g4In1dLFsicGF0aCIse2Q6Ik02IDE2aDkifV0sWyJwYXRoIix7ZDoiTTEwIDkuNWg3In1dXX0pO3ZhciBWRCxHVGU9bigoKT0+e1ZEPVtbInBhdGgiLHtkOiJNMTEgMTlINGEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMmg1In1dLFsicGF0aCIse2Q6Ik0xMyA1aDdhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC01In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjMifV0sWyJwYXRoIix7ZDoibTE4IDIyLTMtMyAzLTMifV0sWyJwYXRoIix7ZDoibTYgMiAzIDMtMyAzIn1dXX0pO3ZhciBVRCxZVGU9bigoKT0+e1VEPVtbInBhdGgiLHtkOiJtMTEgMTktNi02In1dLFsicGF0aCIse2Q6Im01IDIxLTItMiJ9XSxbInBhdGgiLHtkOiJtOCAxNi00IDQifV0sWyJwYXRoIix7ZDoiTTkuNSAxNy41IDIxIDZWM2gtM0w2LjUgMTQuNSJ9XV19KTt2YXIgakQsWlRlPW4oKCk9PntqRD1bWyJwb2x5bGluZSIse3BvaW50czoiMTQuNSAxNy41IDMgNiAzIDMgNiAzIDE3LjUgMTQuNSJ9XSxbImxpbmUiLHt4MToiMTMiLHgyOiIxOSIseTE6IjE5Iix5MjoiMTMifV0sWyJsaW5lIix7eDE6IjE2Iix4MjoiMjAiLHkxOiIxNiIseTI6IjIwIn1dLFsibGluZSIse3gxOiIxOSIseDI6IjIxIix5MToiMjEiLHkyOiIxOSJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIxNC41IDYuNSAxOCAzIDIxIDMgMjEgNiAxNy41IDkuNSJ9XSxbImxpbmUiLHt4MToiNSIseDI6IjkiLHkxOiIxNCIseTI6IjE4In1dLFsibGluZSIse3gxOiI3Iix4MjoiNCIseTE6IjE3Iix5MjoiMjAifV0sWyJsaW5lIix7eDE6IjMiLHgyOiI1Iix5MToiMTkiLHkyOiIyMSJ9XV19KTt2YXIgV0QsWFRlPW4oKCk9PntXRD1bWyJwYXRoIix7ZDoibTE4IDIgNCA0In1dLFsicGF0aCIse2Q6Im0xNyA3IDMtMyJ9XSxbInBhdGgiLHtkOiJNMTkgOSA4LjcgMTkuM2MtMSAxLTIuNSAxLTMuNCAwbC0uNi0uNmMtMS0xLTEtMi41IDAtMy40TDE1IDUifV0sWyJwYXRoIix7ZDoibTkgMTEgNCA0In1dLFsicGF0aCIse2Q6Im01IDE5LTMgMyJ9XSxbInBhdGgiLHtkOiJtMTQgNCA2IDYifV1dfSk7dmFyIEdELFFUZT1uKCgpPT57R0Q9W1sicGF0aCIse2Q6Ik05IDNINWEyIDIgMCAwIDAtMiAydjRtNi02aDEwYTIgMiAwIDAgMSAyIDJ2NE05IDN2MThtMCAwaDEwYTIgMiAwIDAgMCAyLTJWOU05IDIxSDVhMiAyIDAgMCAxLTItMlY5bTAgMGgxOCJ9XV19KTt2YXIgWUQsS1RlPW4oKCk9PntZRD1bWyJwYXRoIix7ZDoiTTEyIDIxdi02In1dLFsicGF0aCIse2Q6Ik0xMiA5VjMifV0sWyJwYXRoIix7ZDoiTTMgMTVoMTgifV0sWyJwYXRoIix7ZDoiTTMgOWgxOCJ9XSxbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dXX0pO3ZhciBaRCxKVGU9bigoKT0+e1pEPVtbInBhdGgiLHtkOiJNMTIgMTVWOSJ9XSxbInBhdGgiLHtkOiJNMyAxNWgxOCJ9XSxbInBhdGgiLHtkOiJNMyA5aDE4In1dLFsicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV1dfSk7dmFyIFhELGVfZT1uKCgpPT57WEQ9W1sicGF0aCIse2Q6Ik0xNiA1SDMifV0sWyJwYXRoIix7ZDoiTTE2IDEySDMifV0sWyJwYXRoIix7ZDoiTTE2IDE5SDMifV0sWyJwYXRoIix7ZDoiTTIxIDVoLjAxIn1dLFsicGF0aCIse2Q6Ik0yMSAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTIxIDE5aC4wMSJ9XV19KTt2YXIgUUQsdF9lPW4oKCk9PntRRD1bWyJwYXRoIix7ZDoiTTE0IDE0djIifV0sWyJwYXRoIix7ZDoiTTE0IDIwdjIifV0sWyJwYXRoIix7ZDoiTTE0IDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTQgOHYyIn1dLFsicGF0aCIse2Q6Ik0yIDE1aDgifV0sWyJwYXRoIix7ZDoiTTIgM2g2YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkgyIn1dLFsicGF0aCIse2Q6Ik0yIDloOCJ9XSxbInBhdGgiLHtkOiJNMjIgMTVoLTQifV0sWyJwYXRoIix7ZDoiTTIyIDNoLTJhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDIifV0sWyJwYXRoIix7ZDoiTTIyIDloLTQifV0sWyJwYXRoIix7ZDoiTTUgM3YxOCJ9XV19KTt2YXIgS0QsYV9lPW4oKCk9PntLRD1bWyJwYXRoIix7ZDoiTTE1IDN2MTgifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMjEgOUgzIn1dLFsicGF0aCIse2Q6Ik0yMSAxNUgzIn1dXX0pO3ZhciBKRCxyX2U9bigoKT0+e0pEPVtbInBhdGgiLHtkOiJNMTQgMTBoMiJ9XSxbInBhdGgiLHtkOiJNMTUgMjJ2LTgifV0sWyJwYXRoIix7ZDoiTTE1IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMiAxMGgyIn1dLFsicGF0aCIse2Q6Ik0yMCAxMGgyIn1dLFsicGF0aCIse2Q6Ik0zIDE5aDE4In1dLFsicGF0aCIse2Q6Ik0zIDIydi02YTIgMiAxMzUgMCAxIDItMmgxNGEyIDIgNDUgMCAxIDIgMnY2In1dLFsicGF0aCIse2Q6Ik0zIDJ2MmEyIDIgNDUgMCAwIDIgMmgxNGEyIDIgMTM1IDAgMCAyLTJWMiJ9XSxbInBhdGgiLHtkOiJNOCAxMGgyIn1dLFsicGF0aCIse2Q6Ik05IDIydi04In1dLFsicGF0aCIse2Q6Ik05IDJ2NCJ9XV19KTt2YXIgZUUsaV9lPW4oKCk9PntlRT1bWyJwYXRoIix7ZDoiTTEyIDN2MTgifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyA5aDE4In1dLFsicGF0aCIse2Q6Ik0zIDE1aDE4In1dXX0pO3ZhciB0RSxvX2U9bigoKT0+e3RFPVtbInJlY3QiLHt3aWR0aDoiMTAiLGhlaWdodDoiMTQiLHg6IjMiLHk6IjgiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik01IDRhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjE2YTIgMiAwIDAgMS0yIDJoLTIuNCJ9XSxbInBhdGgiLHtkOiJNOCAxOGguMDEifV1dfSk7dmFyIGFFLHNfZT1uKCgpPT57YUU9W1sicmVjdCIse3dpZHRoOiIxNiIsaGVpZ2h0OiIyMCIseDoiNCIseToiMiIscng6IjIiLHJ5OiIyIn1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyLjAxIix5MToiMTgiLHkyOiIxOCJ9XV19KTt2YXIgckUsbl9lPW4oKCk9PntyRT1bWyJjaXJjbGUiLHtjeDoiNyIsY3k6IjciLHI6IjUifV0sWyJjaXJjbGUiLHtjeDoiMTciLGN5OiIxNyIscjoiNSJ9XSxbInBhdGgiLHtkOiJNMTIgMTdoMTAifV0sWyJwYXRoIix7ZDoibTMuNDYgMTAuNTQgNy4wOC03LjA4In1dXX0pO3ZhciBpRSxsX2U9bigoKT0+e2lFPVtbInBhdGgiLHtkOiJNMTIuNTg2IDIuNTg2QTIgMiAwIDAgMCAxMS4xNzIgMkg0YTIgMiAwIDAgMC0yIDJ2Ny4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRsOC43MDQgOC43MDRhMi40MjYgMi40MjYgMCAwIDAgMy40MiAwbDYuNTgtNi41OGEyLjQyNiAyLjQyNiAwIDAgMCAwLTMuNDJ6In1dLFsiY2lyY2xlIix7Y3g6IjcuNSIsY3k6IjcuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XV19KTt2YXIgb0UsY19lPW4oKCk9PntvRT1bWyJwYXRoIix7ZDoiTTEzLjE3MiAyYTIgMiAwIDAgMSAxLjQxNC41ODZsNi43MSA2LjcxYTIuNCAyLjQgMCAwIDEgMCAzLjQwOGwtNC41OTIgNC41OTJhMi40IDIuNCAwIDAgMS0zLjQwOCAwbC02LjcxLTYuNzFBMiAyIDAgMCAxIDYgOS4xNzJWM2ExIDEgMCAwIDEgMS0xeiJ9XSxbInBhdGgiLHtkOiJNMiA3djYuMTcyYTIgMiAwIDAgMCAuNTg2IDEuNDE0bDYuNzEgNi43MWEyLjQgMi40IDAgMCAwIDMuMTkxLjE5MyJ9XSxbImNpcmNsZSIse2N4OiIxMC41IixjeToiNi41IixyOiIuNSIsZmlsbDoiY3VycmVudENvbG9yIn1dXX0pO3ZhciBzRSxkX2U9bigoKT0+e3NFPVtbInBhdGgiLHtkOiJNNCA0djE2In1dXX0pO3ZhciBuRSxmX2U9bigoKT0+e25FPVtbInBhdGgiLHtkOiJNNCA0djE2In1dLFsicGF0aCIse2Q6Ik05IDR2MTYifV1dfSk7dmFyIGxFLHVfZT1uKCgpPT57bEU9W1sicGF0aCIse2Q6Ik00IDR2MTYifV0sWyJwYXRoIix7ZDoiTTkgNHYxNiJ9XSxbInBhdGgiLHtkOiJNMTQgNHYxNiJ9XV19KTt2YXIgY0UscF9lPW4oKCk9PntjRT1bWyJwYXRoIix7ZDoiTTQgNHYxNiJ9XSxbInBhdGgiLHtkOiJNOSA0djE2In1dLFsicGF0aCIse2Q6Ik0xNCA0djE2In1dLFsicGF0aCIse2Q6Ik0xOSA0djE2In1dXX0pO3ZhciBkRSxoX2U9bigoKT0+e2RFPVtbInBhdGgiLHtkOiJNNCA0djE2In1dLFsicGF0aCIse2Q6Ik05IDR2MTYifV0sWyJwYXRoIix7ZDoiTTE0IDR2MTYifV0sWyJwYXRoIix7ZDoiTTE5IDR2MTYifV0sWyJwYXRoIix7ZDoiTTIyIDYgMiAxOCJ9XV19KTt2YXIgZkUsbV9lPW4oKCk9PntmRT1bWyJjaXJjbGUiLHtjeDoiMTciLGN5OiI0IixyOiIyIn1dLFsicGF0aCIse2Q6Ik0xNS41OSA1LjQxIDUuNDEgMTUuNTkifV0sWyJjaXJjbGUiLHtjeDoiNCIsY3k6IjE3IixyOiIyIn1dLFsicGF0aCIse2Q6Ik0xMiAyMnMtNC05LTEuNS0xMS41UzIyIDEyIDIyIDEyIn1dXX0pO3ZhciB1RSxnX2U9bigoKT0+e3VFPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI2In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV1dfSk7dmFyIHBFLHhfZT1uKCgpPT57cEU9W1sicGF0aCIse2Q6Im0xMC4wNjUgMTIuNDkzLTYuMTggMS4zMThhLjkzNC45MzQgMCAwIDEtMS4xMDgtLjcwMmwtLjUzNy0yLjE1YTEuMDcgMS4wNyAwIDAgMSAuNjkxLTEuMjY1bDEzLjUwNC00LjQ0In1dLFsicGF0aCIse2Q6Im0xMy41NiAxMS43NDcgNC4zMzItLjkyNCJ9XSxbInBhdGgiLHtkOiJtMTYgMjEtMy4xMDUtNi4yMSJ9XSxbInBhdGgiLHtkOiJNMTYuNDg1IDUuOTRhMiAyIDAgMCAxIDEuNDU1LTIuNDI1bDEuMDktLjI3MmExIDEgMCAwIDEgMS4yMTIuNzI3bDEuNTE1IDYuMDZhMSAxIDAgMCAxLS43MjcgMS4yMTNsLTEuMDkuMjcyYTIgMiAwIDAgMS0yLjQyNS0xLjQ1NXoifV0sWyJwYXRoIix7ZDoibTYuMTU4IDguNjMzIDEuMTE0IDQuNDU2In1dLFsicGF0aCIse2Q6Im04IDIxIDMuMTA1LTYuMjEifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiMiJ9XV19KTt2YXIgaEUsYl9lPW4oKCk9PntoRT1bWyJjaXJjbGUiLHtjeDoiNCIsY3k6IjQiLHI6IjIifV0sWyJwYXRoIix7ZDoibTE0IDUgMy0zIDMgMyJ9XSxbInBhdGgiLHtkOiJtMTQgMTAgMy0zIDMgMyJ9XSxbInBhdGgiLHtkOiJNMTcgMTRWMiJ9XSxbInBhdGgiLHtkOiJNMTcgMTRIN2wtNSA4aDIwWiJ9XSxbInBhdGgiLHtkOiJNOCAxNHY4In1dLFsicGF0aCIse2Q6Im05IDE0IDUgOCJ9XV19KTt2YXIgbUUsdl9lPW4oKCk9PnttRT1bWyJwYXRoIix7ZDoiTTMuNSAyMSAxNCAzIn1dLFsicGF0aCIse2Q6Ik0yMC41IDIxIDEwIDMifV0sWyJwYXRoIix7ZDoiTTE1LjUgMjEgMTIgMTVsLTMuNSA2In1dLFsicGF0aCIse2Q6Ik0yIDIxaDIwIn1dXX0pO3ZhciBibCx5X2U9bigoKT0+e2JsPVtbInBhdGgiLHtkOiJNMjEgNyA2LjgyIDIxLjE4YTIuODMgMi44MyAwIDAgMS0zLjk5LS4wMWEyLjgzIDIuODMgMCAwIDEgMC00TDE3IDMifV0sWyJwYXRoIix7ZDoibTE2IDIgNiA2In1dLFsicGF0aCIse2Q6Ik0xMiAxNkg0In1dXX0pO3ZhciBnRSx3X2U9bigoKT0+e2dFPVtbInBhdGgiLHtkOiJNMTIgMTloOCJ9XSxbInBhdGgiLHtkOiJtNCAxNyA2LTYtNi02In1dXX0pO3ZhciB4RSxNX2U9bigoKT0+e3hFPVtbInBhdGgiLHtkOiJNMTQuNSAydjE3LjVjMCAxLjQtMS4xIDIuNS0yLjUgMi41Yy0xLjQgMC0yLjUtMS4xLTIuNS0yLjVWMiJ9XSxbInBhdGgiLHtkOiJNOC41IDJoNyJ9XSxbInBhdGgiLHtkOiJNMTQuNSAxNmgtNSJ9XV19KTt2YXIgYkUsel9lPW4oKCk9PntiRT1bWyJwYXRoIix7ZDoiTTkgMnYxNy41QTIuNSAyLjUgMCAwIDEgNi41IDIyQTIuNSAyLjUgMCAwIDEgNCAxOS41VjIifV0sWyJwYXRoIix7ZDoiTTIwIDJ2MTcuNWEyLjUgMi41IDAgMCAxLTIuNSAyLjVhMi41IDIuNSAwIDAgMS0yLjUtMi41VjIifV0sWyJwYXRoIix7ZDoiTTMgMmg3In1dLFsicGF0aCIse2Q6Ik0xNCAyaDcifV0sWyJwYXRoIix7ZDoiTTkgMTZINCJ9XSxbInBhdGgiLHtkOiJNMjAgMTZoLTUifV1dfSk7dmFyIHZsLGtfZT1uKCgpPT57dmw9W1sicGF0aCIse2Q6Ik0yMSA1SDMifV0sWyJwYXRoIix7ZDoiTTE3IDEySDcifV0sWyJwYXRoIix7ZDoiTTE5IDE5SDUifV1dfSk7dmFyIHlsLFNfZT1uKCgpPT57eWw9W1sicGF0aCIse2Q6Ik0yMSA1SDMifV0sWyJwYXRoIix7ZDoiTTIxIDEySDkifV0sWyJwYXRoIix7ZDoiTTIxIDE5SDcifV1dfSk7dmFyIHdsLENfZT1uKCgpPT57d2w9W1sicGF0aCIse2Q6Ik0zIDVoMTgifV0sWyJwYXRoIix7ZDoiTTMgMTJoMTgifV0sWyJwYXRoIix7ZDoiTTMgMTloMTgifV1dfSk7dmFyIEhpLExfZT1uKCgpPT57SGk9W1sicGF0aCIse2Q6Ik0yMSA1SDMifV0sWyJwYXRoIix7ZDoiTTE1IDEySDMifV0sWyJwYXRoIix7ZDoiTTE3IDE5SDMifV1dfSk7dmFyIHZFLFRfZT1uKCgpPT57dkU9W1sicGF0aCIse2Q6Ik0xMiAyMGgtMWEyIDIgMCAwIDEtMi0yIDIgMiAwIDAgMS0yIDJINiJ9XSxbInBhdGgiLHtkOiJNMTMgOGg3YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAyaC03In1dLFsicGF0aCIse2Q6Ik01IDE2SDRhMiAyIDAgMCAxLTItMnYtNGEyIDIgMCAwIDEgMi0yaDEifV0sWyJwYXRoIix7ZDoiTTYgNGgxYTIgMiAwIDAgMSAyIDIgMiAyIDAgMCAxIDItMmgxIn1dLFsicGF0aCIse2Q6Ik05IDZ2MTIifV1dfSk7dmFyIHlFLF9fZT1uKCgpPT57eUU9W1sicGF0aCIse2Q6Ik0xNyAyMmgtMWE0IDQgMCAwIDEtNC00VjZhNCA0IDAgMCAxIDQtNGgxIn1dLFsicGF0aCIse2Q6Ik03IDIyaDFhNCA0IDAgMCAwIDQtNHYtMSJ9XSxbInBhdGgiLHtkOiJNNyAyaDFhNCA0IDAgMCAxIDQgNHYxIn1dXX0pO3ZhciB3RSxBX2U9bigoKT0+e3dFPVtbInBhdGgiLHtkOiJNMTcgNUgzIn1dLFsicGF0aCIse2Q6Ik0yMSAxMkg4In1dLFsicGF0aCIse2Q6Ik0yMSAxOUg4In1dLFsicGF0aCIse2Q6Ik0zIDEydjcifV1dfSk7dmFyIE1sLCRfZT1uKCgpPT57TWw9W1sicGF0aCIse2Q6Ik0xNSA1aDYifV0sWyJwYXRoIix7ZDoiTTE1IDEyaDYifV0sWyJwYXRoIix7ZDoiTTMgMTloMTgifV0sWyJwYXRoIix7ZDoibTMgMTIgMy41NTMtNy43MjRhLjUuNSAwIDAgMSAuODk0IDBMMTEgMTIifV0sWyJwYXRoIix7ZDoiTTMuOTIgMTBoNi4xNiJ9XV19KTt2YXIgTUUsRF9lPW4oKCk9PntNRT1bWyJwYXRoIix7ZDoiTTIxIDVIMyJ9XSxbInBhdGgiLHtkOiJNMTAgMTJIMyJ9XSxbInBhdGgiLHtkOiJNMTAgMTlIMyJ9XSxbImNpcmNsZSIse2N4OiIxNyIsY3k6IjE1IixyOiIzIn1dLFsicGF0aCIse2Q6Im0yMSAxOS0xLjktMS45In1dXX0pO3ZhciB6bCxFX2U9bigoKT0+e3psPVtbInBhdGgiLHtkOiJNMTQgMjFoMSJ9XSxbInBhdGgiLHtkOiJNMTQgM2gxIn1dLFsicGF0aCIse2Q6Ik0xOSAzYTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTIxIDE0djEifV0sWyJwYXRoIix7ZDoiTTIxIDE5YTIgMiAwIDAgMS0yIDIifV0sWyJwYXRoIix7ZDoiTTIxIDl2MSJ9XSxbInBhdGgiLHtkOiJNMyAxNHYxIn1dLFsicGF0aCIse2Q6Ik0zIDl2MSJ9XSxbInBhdGgiLHtkOiJNNSAyMWEyIDIgMCAwIDEtMi0yIn1dLFsicGF0aCIse2Q6Ik01IDNhMiAyIDAgMCAwLTIgMiJ9XSxbInBhdGgiLHtkOiJNNyAxMmgxMCJ9XSxbInBhdGgiLHtkOiJNNyAxNmg2In1dLFsicGF0aCIse2Q6Ik03IDhoOCJ9XSxbInBhdGgiLHtkOiJNOSAyMWgxIn1dLFsicGF0aCIse2Q6Ik05IDNoMSJ9XV19KTt2YXIgekUsTl9lPW4oKCk9Pnt6RT1bWyJwYXRoIix7ZDoiTTIgMTBzMy0zIDMtOCJ9XSxbInBhdGgiLHtkOiJNMjIgMTBzLTMtMy0zLTgifV0sWyJwYXRoIix7ZDoiTTEwIDJjMCA0LjQtMy42IDgtOCA4In1dLFsicGF0aCIse2Q6Ik0xNCAyYzAgNC40IDMuNiA4IDggOCJ9XSxbInBhdGgiLHtkOiJNMiAxMHMyIDIgMiA1In1dLFsicGF0aCIse2Q6Ik0yMiAxMHMtMiAyLTIgNSJ9XSxbInBhdGgiLHtkOiJNOCAxNWg4In1dLFsicGF0aCIse2Q6Ik0yIDIydi0xYTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjEifV0sWyJwYXRoIix7ZDoiTTE0IDIydi0xYTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjEifV1dfSk7dmFyIGtsLFBfZT1uKCgpPT57a2w9W1sicGF0aCIse2Q6Im0xNiAxNi0zIDMgMyAzIn1dLFsicGF0aCIse2Q6Ik0zIDEyaDE0LjVhMSAxIDAgMCAxIDAgN0gxMyJ9XSxbInBhdGgiLHtkOiJNMyAxOWg2In1dLFsicGF0aCIse2Q6Ik0zIDVoMTgifV1dfSk7dmFyIGtFLElfZT1uKCgpPT57a0U9W1sicGF0aCIse2Q6Im0xMCAyMC0xLjI1LTIuNUw2IDE4In1dLFsicGF0aCIse2Q6Ik0xMCA0IDguNzUgNi41IDYgNiJ9XSxbInBhdGgiLHtkOiJNMTAuNTg1IDE1SDEwIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDYuNUwxMCA5In1dLFsicGF0aCIse2Q6Ik0yMCAxNC41NGE0IDQgMCAxIDEtNCAwVjRhMiAyIDAgMCAxIDQgMHoifV0sWyJwYXRoIix7ZDoibTQgMTAgMS41IDJMNCAxNCJ9XSxbInBhdGgiLHtkOiJtNyAyMSAzLTYtMS41LTMifV0sWyJwYXRoIix7ZDoibTcgMyAzIDZoMiJ9XV19KTt2YXIgU0UsRl9lPW4oKCk9PntTRT1bWyJwYXRoIix7ZDoiTTEyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTIgOGE0IDQgMCAwIDAtMS42NDUgNy42NDcifV0sWyJwYXRoIix7ZDoiTTIgMTJoMiJ9XSxbInBhdGgiLHtkOiJNMjAgMTQuNTRhNCA0IDAgMSAxLTQgMFY0YTIgMiAwIDAgMSA0IDB6In1dLFsicGF0aCIse2Q6Im00LjkzIDQuOTMgMS40MSAxLjQxIn1dLFsicGF0aCIse2Q6Im02LjM0IDE3LjY2LTEuNDEgMS40MSJ9XV19KTt2YXIgQ0UsT19lPW4oKCk9PntDRT1bWyJwYXRoIix7ZDoiTTE0IDR2MTAuNTRhNCA0IDAgMSAxLTQgMFY0YTIgMiAwIDAgMSA0IDBaIn1dXX0pO3ZhciBMRSxCX2U9bigoKT0+e0xFPVtbInBhdGgiLHtkOiJNOSAxOC4xMiAxMCAxNEg0LjE3YTIgMiAwIDAgMS0xLjkyLTIuNTZsMi4zMy04QTIgMiAwIDAgMSA2LjUgMkgyMGEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMi43NmEyIDIgMCAwIDAtMS43OSAxLjExTDEyIDIyYTMuMTMgMy4xMyAwIDAgMS0zLTMuODhaIn1dLFsicGF0aCIse2Q6Ik0xNyAxNFYyIn1dXX0pO3ZhciBURSxSX2U9bigoKT0+e1RFPVtbInBhdGgiLHtkOiJNMTUgNS44OCAxNCAxMGg1LjgzYTIgMiAwIDAgMSAxLjkyIDIuNTZsLTIuMzMgOEEyIDIgMCAwIDEgMTcuNSAyMkg0YTIgMiAwIDAgMS0yLTJ2LThhMiAyIDAgMCAxIDItMmgyLjc2YTIgMiAwIDAgMCAxLjc5LTEuMTFMMTIgMmEzLjEzIDMuMTMgMCAwIDEgMyAzLjg4WiJ9XSxbInBhdGgiLHtkOiJNNyAxMHYxMiJ9XV19KTt2YXIgX0UsSF9lPW4oKCk9PntfRT1bWyJwYXRoIix7ZDoiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloifV0sWyJwYXRoIix7ZDoibTkgMTIgMiAyIDQtNCJ9XV19KTt2YXIgQUUscV9lPW4oKCk9PntBRT1bWyJwYXRoIix7ZDoiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloifV0sWyJwYXRoIix7ZDoiTTkgMTJoNiJ9XV19KTt2YXIgJEUsVl9lPW4oKCk9PnskRT1bWyJwYXRoIix7ZDoiTTIgOWEzIDMgMCAxIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDEgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloifV0sWyJwYXRoIix7ZDoiTTkgOWguMDEifV0sWyJwYXRoIix7ZDoibTE1IDktNiA2In1dLFsicGF0aCIse2Q6Ik0xNSAxNWguMDEifV1dfSk7dmFyIERFLFVfZT1uKCgpPT57REU9W1sicGF0aCIse2Q6Ik0yIDlhMyAzIDAgMCAxIDAgNnYyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtMmEzIDMgMCAwIDEgMC02VjdhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJaIn1dLFsicGF0aCIse2Q6Ik05IDEyaDYifV0sWyJwYXRoIix7ZDoiTTEyIDl2NiJ9XV19KTt2YXIgRUUsal9lPW4oKCk9PntFRT1bWyJwYXRoIix7ZDoiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloifV0sWyJwYXRoIix7ZDoibTkuNSAxNC41IDUtNSJ9XV19KTt2YXIgTkUsV19lPW4oKCk9PntORT1bWyJwYXRoIix7ZDoiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloifV0sWyJwYXRoIix7ZDoibTkuNSAxNC41IDUtNSJ9XSxbInBhdGgiLHtkOiJtOS41IDkuNSA1IDUifV1dfSk7dmFyIFBFLEdfZT1uKCgpPT57UEU9W1sicGF0aCIse2Q6Ik0yIDlhMyAzIDAgMCAxIDAgNnYyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtMmEzIDMgMCAwIDEgMC02VjdhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJaIn1dLFsicGF0aCIse2Q6Ik0xMyA1djIifV0sWyJwYXRoIix7ZDoiTTEzIDE3djIifV0sWyJwYXRoIix7ZDoiTTEzIDExdjIifV1dfSk7dmFyIElFLFlfZT1uKCgpPT57SUU9W1sicGF0aCIse2Q6Ik0xMC41IDE3aDEuMjI3YTIgMiAwIDAgMCAxLjM0NS0uNTJMMTggMTIifV0sWyJwYXRoIix7ZDoibTEyIDEzLjUgMy43NS41In1dLFsicGF0aCIse2Q6Im0zLjE3MyA4LjE4IDExLTVhMiAyIDAgMCAxIDIuNjQ3Ljk5M0wxOC41NiA4In1dLFsicGF0aCIse2Q6Ik02IDEwVjgifV0sWyJwYXRoIix7ZDoiTTYgMTR2MSJ9XSxbInBhdGgiLHtkOiJNNiAxOXYyIn1dLFsicmVjdCIse3g6IjIiLHk6IjgiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxMyIscng6IjIifV1dfSk7dmFyIEZFLFpfZT1uKCgpPT57RkU9W1sicGF0aCIse2Q6Im0zLjE3MyA4LjE4IDExLTVhMiAyIDAgMCAxIDIuNjQ3Ljk5M0wxOC41NiA4In1dLFsicGF0aCIse2Q6Ik02IDEwVjgifV0sWyJwYXRoIix7ZDoiTTYgMTR2MSJ9XSxbInBhdGgiLHtkOiJNNiAxOXYyIn1dLFsicmVjdCIse3g6IjIiLHk6IjgiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxMyIscng6IjIifV1dfSk7dmFyIE9FLFhfZT1uKCgpPT57T0U9W1sicGF0aCIse2Q6Ik0xMCAyaDQifV0sWyJwYXRoIix7ZDoiTTEyIDE0di00In1dLFsicGF0aCIse2Q6Ik00IDEzYTggOCAwIDAgMSA4LTcgOCA4IDAgMSAxLTUuMyAxNEw0IDE3LjYifV0sWyJwYXRoIix7ZDoiTTkgMTdINHY1In1dXX0pO3ZhciBCRSxRX2U9bigoKT0+e0JFPVtbInBhdGgiLHtkOiJNMTAgMmg0In1dLFsicGF0aCIse2Q6Ik00LjYgMTFhOCA4IDAgMCAwIDEuNyA4LjcgOCA4IDAgMCAwIDguNyAxLjcifV0sWyJwYXRoIix7ZDoiTTcuNCA3LjRhOCA4IDAgMCAxIDEwLjMgMSA4IDggMCAwIDEgLjkgMTAuMiJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik0xMiAxMnYtMiJ9XV19KTt2YXIgUkUsS19lPW4oKCk9PntSRT1bWyJsaW5lIix7eDE6IjEwIix4MjoiMTQiLHkxOiIyIix5MjoiMiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxNSIseTE6IjE0Iix5MjoiMTEifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxNCIscjoiOCJ9XV19KTt2YXIgSEUsSl9lPW4oKCk9PntIRT1bWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjEyIixyOiIzIn1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNCIseDoiMiIseToiNSIscng6IjcifV1dfSk7dmFyIHFFLGVBZT1uKCgpPT57cUU9W1siY2lyY2xlIix7Y3g6IjE1IixjeToiMTIiLHI6IjMifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE0Iix4OiIyIix5OiI1IixyeDoiNyJ9XV19KTt2YXIgVkUsdEFlPW4oKCk9PntWRT1bWyJwYXRoIix7ZDoiTTcgMTJoMTNhMSAxIDAgMCAxIDEgMSA1IDUgMCAwIDEtNSA1aC0uNTk4YS41LjUgMCAwIDAtLjQyNC43NjVsMS41NDQgMi40N2EuNS41IDAgMCAxLS40MjQuNzY1SDUuNDAyYS41LjUgMCAwIDEtLjQyNC0uNzY1TDcgMTgifV0sWyJwYXRoIix7ZDoiTTggMThhNSA1IDAgMCAxLTUtNVY0YTIgMiAwIDAgMSAyLTJoOGEyIDIgMCAwIDEgMiAydjgifV1dfSk7dmFyIFVFLGFBZT1uKCgpPT57VUU9W1sicGF0aCIse2Q6Ik0xMCAxNWg0In1dLFsicGF0aCIse2Q6Im0xNC44MTcgMTAuOTk1LS45NzEtMS40NSAxLjAzNC0xLjIzMmEyIDIgMCAwIDAtMi4wMjUtMy4yMzhsLTEuODIuMzY0TDkuOTEgMy44ODVhMiAyIDAgMCAwLTMuNjI1Ljc0OEw2LjE0MSA2LjU1bC0xLjcyNS40MjZhMiAyIDAgMCAwLS4xOSAzLjc1NmwuNjU3LjI3In1dLFsicGF0aCIse2Q6Im0xOC44MjIgMTAuOTk1IDIuMjYtNS4zOGExIDEgMCAwIDAtLjU1Ny0xLjMxOEwxNi45NTQgMi45YTEgMSAwIDAgMC0xLjI4MS41MzNsLS45MjQgMi4xMjIifV0sWyJwYXRoIix7ZDoiTTQgMTIuMDA2QTEgMSAwIDAgMSA0Ljk5NCAxMUgxOWExIDEgMCAwIDEgMSAxdjdhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJ6In1dXX0pO3ZhciBqRSxyQWU9bigoKT0+e2pFPVtbInBhdGgiLHtkOiJNMTYgMTJ2NCJ9XSxbInBhdGgiLHtkOiJNMTYgNmEyIDIgMCAwIDEgMS40MTQuNTg2bDQgNEEyIDIgMCAwIDEgMjIgMTJ2N2EyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtN2EyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LTRBMiAyIDAgMCAxIDggNnoifV0sWyJwYXRoIix7ZDoiTTE2IDZWNGEyIDIgMCAwIDAtMi0yaC00YTIgMiAwIDAgMC0yIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMiAxNGgyMCJ9XSxbInBhdGgiLHtkOiJNOCAxMnY0In1dXX0pO3ZhciBXRSxpQWU9bigoKT0+e1dFPVtbInBhdGgiLHtkOiJNMjEgNEgzIn1dLFsicGF0aCIse2Q6Ik0xOCA4SDYifV0sWyJwYXRoIix7ZDoiTTE5IDEySDkifV0sWyJwYXRoIix7ZDoiTTE2IDE2aC02In1dLFsicGF0aCIse2Q6Ik0xMSAyMEg5In1dXX0pO3ZhciBHRSxvQWU9bigoKT0+e0dFPVtbImVsbGlwc2UiLHtjeDoiMTIiLGN5OiIxMSIscng6IjMiLHJ5OiIyIn1dLFsiZWxsaXBzZSIse2N4OiIxMiIsY3k6IjEyLjUiLHJ4OiIxMCIscnk6IjguNSJ9XV19KTt2YXIgWUUsc0FlPW4oKCk9PntZRT1bWyJwYXRoIix7ZDoiTTEyIDIwdi02In1dLFsicGF0aCIse2Q6Ik0xOS42NTYgMTRIMjIifV0sWyJwYXRoIix7ZDoiTTIgMTRoMTIifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMjAgMjBINGEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMiJ9XSxbInBhdGgiLHtkOiJNOS42NTYgNEgyMGEyIDIgMCAwIDEgMiAydjEwLjM0NCJ9XV19KTt2YXIgWkUsbkFlPW4oKCk9PntaRT1bWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE2Iix4OiIyIix5OiI0IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMiAxNGgyMCJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2LTYifV1dfSk7dmFyIFhFLGxBZT1uKCgpPT57WEU9W1sicGF0aCIse2Q6Ik0xOC4yIDEyLjI3IDIwIDZINGwxLjggNi4yN2ExIDEgMCAwIDAgLjk1LjczaDEwLjVhMSAxIDAgMCAwIC45Ni0uNzNaIn1dLFsicGF0aCIse2Q6Ik04IDEzdjkifV0sWyJwYXRoIix7ZDoiTTE2IDIydi05In1dLFsicGF0aCIse2Q6Im05IDYgMSA3In1dLFsicGF0aCIse2Q6Im0xNSA2LTEgNyJ9XSxbInBhdGgiLHtkOiJNMTIgNlYyIn1dLFsicGF0aCIse2Q6Ik0xMyAyaC0yIn1dXX0pO3ZhciBRRSxjQWU9bigoKT0+e1FFPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTIiLHg6IjMiLHk6IjgiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Ik0xMCA4VjVjMC0uNi0uNC0xLTEtMUg2YTEgMSAwIDAgMC0xIDF2MyJ9XSxbInBhdGgiLHtkOiJNMTkgOFY1YzAtLjYtLjQtMS0xLTFoLTNhMSAxIDAgMCAwLTEgMXYzIn1dXX0pO3ZhciBLRSxkQWU9bigoKT0+e0tFPVtbInBhdGgiLHtkOiJNMTYuMDUgMTAuOTY2YTUgMi41IDAgMCAxLTguMSAwIn1dLFsicGF0aCIse2Q6Im0xNi45MjMgMTQuMDQ5IDQuNDggMi4wNGExIDEgMCAwIDEgLjAwMSAxLjgzMWwtOC41NzQgMy45YTIgMiAwIDAgMS0xLjY2IDBsLTguNTc0LTMuOTFhMSAxIDAgMCAxIDAtMS44M2w0LjQ4NC0yLjA0In1dLFsicGF0aCIse2Q6Ik0xNi45NDkgMTQuMTRhNSAyLjUgMCAxIDEtOS45IDBMMTAuMDYzIDMuNWEyIDIgMCAwIDEgMy44NzQgMHoifV0sWyJwYXRoIix7ZDoiTTkuMTk0IDYuNTdhNSAyLjUgMCAwIDAgNS42MSAwIn1dXX0pO3ZhciBKRSxmQWU9bigoKT0+e0pFPVtbInBhdGgiLHtkOiJtMTAgMTEgMTEgLjlhMSAxIDAgMCAxIC44IDEuMWwtLjY2NSA0LjE1OGExIDEgMCAwIDEtLjk4OC44NDJIMjAifV0sWyJwYXRoIix7ZDoiTTE2IDE4aC01In1dLFsicGF0aCIse2Q6Ik0xOCA1YTEgMSAwIDAgMC0xIDF2NS41NzMifV0sWyJwYXRoIix7ZDoiTTMgNGg4LjEyOWExIDEgMCAwIDEgLjk5Ljg2M0wxMyAxMS4yNDYifV0sWyJwYXRoIix7ZDoiTTQgMTFWNCJ9XSxbInBhdGgiLHtkOiJNNyAxNWguMDEifV0sWyJwYXRoIix7ZDoiTTggMTAuMVY0In1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTgiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiNyIsY3k6IjE1IixyOiI1In1dXX0pO3ZhciBlTix1QWU9bigoKT0+e2VOPVtbInBhdGgiLHtkOiJNMiAyMlYxMmExMCAxMCAwIDEgMSAyMCAwdjEwIn1dLFsicGF0aCIse2Q6Ik0xNSA2Ljh2MS40YTMgMi44IDAgMSAxLTYgMFY2LjgifV0sWyJwYXRoIix7ZDoiTTEwIDE1aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTQgMTVoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMCAxOWE0IDQgMCAwIDEtNC00di0zYTYgNiAwIDEgMSAxMiAwdjNhNCA0IDAgMCAxLTQgNFoifV0sWyJwYXRoIix7ZDoibTkgMTktMiAzIn1dLFsicGF0aCIse2Q6Im0xNSAxOSAyIDMifV1dfSk7dmFyIHROLHBBZT1uKCgpPT57dE49W1sicGF0aCIse2Q6Ik04IDMuMVY3YTQgNCAwIDAgMCA4IDBWMy4xIn1dLFsicGF0aCIse2Q6Im05IDE1LTEtMSJ9XSxbInBhdGgiLHtkOiJtMTUgMTUgMS0xIn1dLFsicGF0aCIse2Q6Ik05IDE5Yy0yLjggMC01LTIuMi01LTV2LTRhOCA4IDAgMCAxIDE2IDB2NGMwIDIuOC0yLjIgNS01IDVaIn1dLFsicGF0aCIse2Q6Im04IDE5LTIgMyJ9XSxbInBhdGgiLHtkOiJtMTYgMTkgMiAzIn1dXX0pO3ZhciBhTixoQWU9bigoKT0+e2FOPVtbInBhdGgiLHtkOiJNMiAxNyAxNyAyIn1dLFsicGF0aCIse2Q6Im0yIDE0IDggOCJ9XSxbInBhdGgiLHtkOiJtNSAxMSA4IDgifV0sWyJwYXRoIix7ZDoibTggOCA4IDgifV0sWyJwYXRoIix7ZDoibTExIDUgOCA4In1dLFsicGF0aCIse2Q6Im0xNCAyIDggOCJ9XSxbInBhdGgiLHtkOiJNNyAyMiAyMiA3In1dXX0pO3ZhciBTbCxtQWU9bigoKT0+e1NsPVtbInJlY3QiLHt3aWR0aDoiMTYiLGhlaWdodDoiMTYiLHg6IjQiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik00IDExaDE2In1dLFsicGF0aCIse2Q6Ik0xMiAzdjgifV0sWyJwYXRoIix7ZDoibTggMTktMiAzIn1dLFsicGF0aCIse2Q6Im0xOCAyMi0yLTMifV0sWyJwYXRoIix7ZDoiTTggMTVoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxNWguMDEifV1dfSk7dmFyIHJOLGdBZT1uKCgpPT57ck49W1sicGF0aCIse2Q6Ik0xMiAxNnY2In1dLFsicGF0aCIse2Q6Ik0xNCAyMGgtNCJ9XSxbInBhdGgiLHtkOiJNMTggMmg0djQifV0sWyJwYXRoIix7ZDoibTIgMiA3LjE3IDcuMTcifV0sWyJwYXRoIix7ZDoiTTIgNS4zNTVWMmgzLjM1NyJ9XSxbInBhdGgiLHtkOiJtMjIgMi03LjE3IDcuMTcifV0sWyJwYXRoIix7ZDoiTTggNSA1IDgifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNCJ9XV19KTt2YXIgaU4seEFlPW4oKCk9PntpTj1bWyJwYXRoIix7ZDoiTTEwIDExdjYifV0sWyJwYXRoIix7ZDoiTTE0IDExdjYifV0sWyJwYXRoIix7ZDoiTTE5IDZ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNiJ9XSxbInBhdGgiLHtkOiJNMyA2aDE4In1dLFsicGF0aCIse2Q6Ik04IDZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyIn1dXX0pO3ZhciBvTixiQWU9bigoKT0+e29OPVtbInBhdGgiLHtkOiJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2In1dLFsicGF0aCIse2Q6Ik0zIDZoMTgifV0sWyJwYXRoIix7ZDoiTTggNlY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjIifV1dfSk7dmFyIHNOLHZBZT1uKCgpPT57c049W1sicGF0aCIse2Q6Ik04IDE5YTQgNCAwIDAgMS0yLjI0LTcuMzJBMy41IDMuNSAwIDAgMSA5IDYuMDNWNmEzIDMgMCAxIDEgNiAwdi4wNGEzLjUgMy41IDAgMCAxIDMuMjQgNS42NUE0IDQgMCAwIDEgMTYgMTlaIn1dLFsicGF0aCIse2Q6Ik0xMiAxOXYzIn1dXX0pO3ZhciBDbCx5QWU9bigoKT0+e0NsPVtbInBhdGgiLHtkOiJNMTMgOGMwLTIuNzYtMi40Ni01LTUuNS01UzIgNS4yNCAyIDhoMmwxLTEgMSAxaDQifV0sWyJwYXRoIix7ZDoiTTEzIDcuMTRBNS44MiA1LjgyIDAgMCAxIDE2LjUgNmMzLjA0IDAgNS41IDIuMjQgNS41IDVoLTNsLTEtMS0xIDFoLTMifV0sWyJwYXRoIix7ZDoiTTUuODkgOS43MWMtMi4xNSAyLjE1LTIuMyA1LjQ3LS4zNSA3LjQzbDQuMjQtNC4yNS43LS43LjcxLS43MSAyLjEyLTIuMTJjLTEuOTUtMS45Ni01LjI3LTEuOC03LjQyLjM1In1dLFsicGF0aCIse2Q6Ik0xMSAxNS41Yy41IDIuNS0uMTcgNC41LTEgNi41aDRjMi01LjUtLjUtMTItMS0xNCJ9XV19KTt2YXIgbk4sd0FlPW4oKCk9PntuTj1bWyJwYXRoIix7ZDoibTE3IDE0IDMgMy4zYTEgMSAwIDAgMS0uNyAxLjdINC43YTEgMSAwIDAgMS0uNy0xLjdMNyAxNGgtLjNhMSAxIDAgMCAxLS43LTEuN0w5IDloLS4yQTEgMSAwIDAgMSA4IDcuM0wxMiAzbDQgNC4zYTEgMSAwIDAgMS0uOCAxLjdIMTVsMyAzLjNhMSAxIDAgMCAxLS43IDEuN0gxN1oifV0sWyJwYXRoIix7ZDoiTTEyIDIydi0zIn1dXX0pO3ZhciBsTixNQWU9bigoKT0+e2xOPVtbInBhdGgiLHtkOiJNMTAgMTB2LjJBMyAzIDAgMCAxIDguOSAxNkg1YTMgMyAwIDAgMS0xLTUuOFYxMGEzIDMgMCAwIDEgNiAwWiJ9XSxbInBhdGgiLHtkOiJNNyAxNnY2In1dLFsicGF0aCIse2Q6Ik0xMyAxOXYzIn1dLFsicGF0aCIse2Q6Ik0xMiAxOWg4LjNhMSAxIDAgMCAwIC43LTEuN0wxOCAxNGguM2ExIDEgMCAwIDAgLjctMS43TDE2IDloLjJhMSAxIDAgMCAwIC44LTEuN0wxMyAzbC0xLjQgMS41In1dXX0pO3ZhciBjTix6QWU9bigoKT0+e2NOPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbInJlY3QiLHt3aWR0aDoiMyIsaGVpZ2h0OiI5Iix4OiI3Iix5OiI3In1dLFsicmVjdCIse3dpZHRoOiIzIixoZWlnaHQ6IjUiLHg6IjE0Iix5OiI3In1dXX0pO3ZhciBkTixrQWU9bigoKT0+e2ROPVtbInBhdGgiLHtkOiJNMTYgMTdoNnYtNiJ9XSxbInBhdGgiLHtkOiJtMjIgMTctOC41LTguNS01IDVMMiA3In1dXX0pO3ZhciBmTixTQWU9bigoKT0+e2ZOPVtbInBhdGgiLHtkOiJNMTQuODI4IDE0LjgyOCAyMSAyMSJ9XSxbInBhdGgiLHtkOiJNMjEgMTZ2NWgtNSJ9XSxbInBhdGgiLHtkOiJtMjEgMy05IDktNC00LTYgNiJ9XSxbInBhdGgiLHtkOiJNMjEgOFYzaC01In1dXX0pO3ZhciB1TixDQWU9bigoKT0+e3VOPVtbInBhdGgiLHtkOiJNMTYgN2g2djYifV0sWyJwYXRoIix7ZDoibTIyIDctOC41IDguNS01LTVMMiAxNyJ9XV19KTt2YXIgTGwsTEFlPW4oKCk9PntMbD1bWyJwYXRoIix7ZDoibTIxLjczIDE4LTgtMTRhMiAyIDAgMCAwLTMuNDggMGwtOCAxNEEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS43My0zIn1dLFsicGF0aCIse2Q6Ik0xMiA5djQifV0sWyJwYXRoIix7ZDoiTTEyIDE3aC4wMSJ9XV19KTt2YXIgcE4sVEFlPW4oKCk9PntwTj1bWyJwYXRoIix7ZDoiTTEwLjE3IDQuMTkzYTIgMiAwIDAgMSAzLjY2Ni4wMTMifV0sWyJwYXRoIix7ZDoiTTE0IDIxaDIifV0sWyJwYXRoIix7ZDoibTE1Ljg3NCA3Ljc0MyAxIDEuNzMyIn1dLFsicGF0aCIse2Q6Im0xOC44NDkgMTIuOTUyIDEgMS43MzIifV0sWyJwYXRoIix7ZDoiTTIxLjgyNCAxOC4xOGEyIDIgMCAwIDEtMS44MzUgMi44MjQifV0sWyJwYXRoIix7ZDoiTTQuMDI0IDIxYTIgMiAwIDAgMS0xLjgzOS0yLjgzOSJ9XSxbInBhdGgiLHtkOiJtNS4xMzYgMTIuOTUyLTEgMS43MzIifV0sWyJwYXRoIix7ZDoiTTggMjFoMiJ9XSxbInBhdGgiLHtkOiJtOC4xMDIgNy43NDMtMSAxLjczMiJ9XV19KTt2YXIgaE4sX0FlPW4oKCk9PntoTj1bWyJwYXRoIix7ZDoiTTIyIDE4YTIgMiAwIDAgMS0yIDJIM2MtMS4xIDAtMS4zLS42LS40LTEuM0wyMC40IDQuM2MuOS0uNyAxLjYtLjQgMS42LjdaIn1dXX0pO3ZhciBtTixBQWU9bigoKT0+e21OPVtbInBhdGgiLHtkOiJNMTMuNzMgNGEyIDIgMCAwIDAtMy40NiAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTNaIn1dXX0pO3ZhciBnTiwkQWU9bigoKT0+e2dOPVtbInBhdGgiLHtkOiJNMTAgMTQuNjZ2MS42MjZhMiAyIDAgMCAxLS45NzYgMS42OTZBNSA1IDAgMCAwIDcgMjEuOTc4In1dLFsicGF0aCIse2Q6Ik0xNCAxNC42NnYxLjYyNmEyIDIgMCAwIDAgLjk3NiAxLjY5NkE1IDUgMCAwIDEgMTcgMjEuOTc4In1dLFsicGF0aCIse2Q6Ik0xOCA5aDEuNWExIDEgMCAwIDAgMC01SDE4In1dLFsicGF0aCIse2Q6Ik00IDIyaDE2In1dLFsicGF0aCIse2Q6Ik02IDlhNiA2IDAgMCAwIDEyIDBWM2ExIDEgMCAwIDAtMS0xSDdhMSAxIDAgMCAwLTEgMXoifV0sWyJwYXRoIix7ZDoiTTYgOUg0LjVhMSAxIDAgMCAxIDAtNUg2In1dXX0pO3ZhciB4TixEQWU9bigoKT0+e3hOPVtbInBhdGgiLHtkOiJNMTQgMTlWN2EyIDIgMCAwIDAtMi0ySDkifV0sWyJwYXRoIix7ZDoiTTE1IDE5SDkifV0sWyJwYXRoIix7ZDoiTTE5IDE5aDJhMSAxIDAgMCAwIDEtMXYtMy42NWExIDEgMCAwIDAtLjIyLS42MkwxOC4zIDkuMzhhMSAxIDAgMCAwLS43OC0uMzhIMTQifV0sWyJwYXRoIix7ZDoiTTIgMTN2NWExIDEgMCAwIDAgMSAxaDIifV0sWyJwYXRoIix7ZDoiTTQgMyAyLjE1IDUuMTVhLjQ5NS40OTUgMCAwIDAgLjM1Ljg2aDIuMTVhLjQ3LjQ3IDAgMCAxIC4zNS44NkwzIDkuMDIifV0sWyJjaXJjbGUiLHtjeDoiMTciLGN5OiIxOSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI3IixjeToiMTkiLHI6IjIifV1dfSk7dmFyIGJOLEVBZT1uKCgpPT57Yk49W1sicGF0aCIse2Q6Ik0xNCAxOFY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjExYTEgMSAwIDAgMCAxIDFoMiJ9XSxbInBhdGgiLHtkOiJNMTUgMThIOSJ9XSxbInBhdGgiLHtkOiJNMTkgMThoMmExIDEgMCAwIDAgMS0xdi0zLjY1YTEgMSAwIDAgMC0uMjItLjYyNGwtMy40OC00LjM1QTEgMSAwIDAgMCAxNy41MiA4SDE0In1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTgiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiNyIsY3k6IjE4IixyOiIyIn1dXX0pO3ZhciB2TixOQWU9bigoKT0+e3ZOPVtbInBhdGgiLHtkOiJNMTUgNCA1IDkifV0sWyJwYXRoIix7ZDoibTE1IDguNS0xMCA1In1dLFsicGF0aCIse2Q6Ik0xOCAxMmE5IDkgMCAwIDEtOSA5VjMifV1dfSk7dmFyIHlOLFBBZT1uKCgpPT57eU49W1sicGF0aCIse2Q6Ik0xMCAxMi4wMWguMDEifV0sWyJwYXRoIix7ZDoiTTE4IDh2NGE4IDggMCAwIDEtMS4wNyA0In1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiMTIiLHI6IjQifV0sWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiJ9XV19KTt2YXIgd04sSUFlPW4oKCk9Pnt3Tj1bWyJwYXRoIix7ZDoibTEyIDEwIDIgNHYzYTEgMSAwIDAgMCAxIDFoMmExIDEgMCAwIDAgMS0xdi0zYTggOCAwIDEgMC0xNiAwdjNhMSAxIDAgMCAwIDEgMWgyYTEgMSAwIDAgMCAxLTF2LTNsMi00aDRaIn1dLFsicGF0aCIse2Q6Ik00LjgyIDcuOSA4IDEwIn1dLFsicGF0aCIse2Q6Ik0xNS4xOCA3LjkgMTIgMTAifV0sWyJwYXRoIix7ZDoiTTE2LjkzIDEwSDIwYTIgMiAwIDAgMSAwIDRIMiJ9XV19KTt2YXIgTU4sRkFlPW4oKCk9PntNTj1bWyJwYXRoIix7ZDoiTTE1LjAzMyA5LjQ0YS42NDcuNjQ3IDAgMCAxIDAgMS4xMmwtNC4wNjUgMi4zNTJhLjY0NS42NDUgMCAwIDEtLjk2OC0uNTZWNy42NDhhLjY0NS42NDUgMCAwIDEgLjk2Ny0uNTZ6In1dLFsicGF0aCIse2Q6Ik03IDIxaDEwIn1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNCIseDoiMiIseToiMyIscng6IjIifV1dfSk7dmFyIFRsLE9BZT1uKCgpPT57VGw9W1sicGF0aCIse2Q6Ik03IDIxaDEwIn1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNCIseDoiMiIseToiMyIscng6IjIifV1dfSk7dmFyIHpOLEJBZT1uKCgpPT57ek49W1sicGF0aCIse2Q6Im0xNyAyLTUgNS01LTUifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE1Iix4OiIyIix5OiI3IixyeDoiMiJ9XV19KTt2YXIga04sUkFlPW4oKCk9PntrTj1bWyJwYXRoIix7ZDoiTTIxIDJIM3YxNmg1djRsNC00aDVsNC00VjJ6bS0xMCA5VjdtNSA0VjcifV1dfSk7dmFyIFNOLEhBZT1uKCgpPT57U049W1sicGF0aCIse2Q6Ik0yMiA0cy0uNyAyLjEtMiAzLjRjMS42IDEwLTkuNCAxNy4zLTE4IDExLjYgMi4yLjEgNC40LS42IDYtMkMzIDE1LjUuNSA5LjYgMyA1YzIuMiAyLjYgNS42IDQuMSA5IDQtLjktNC4yIDQtNi42IDctMy44IDEuMSAwIDMtMS4yIDMtMS4yeiJ9XV19KTt2YXIgQ04scUFlPW4oKCk9PntDTj1bWyJwYXRoIix7ZDoiTTE0IDE2LjVhLjUuNSAwIDAgMCAuNS41aC41YTIgMiAwIDAgMSAwIDRIOWEyIDIgMCAwIDEgMC00aC41YS41LjUgMCAwIDAgLjUtLjV2LTlhLjUuNSAwIDAgMC0uNS0uNWgtM2EuNS41IDAgMCAwLS41LjVWOGEyIDIgMCAwIDEtNCAwVjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTQgMHYtLjVhLjUuNSAwIDAgMC0uNS0uNWgtM2EuNS41IDAgMCAwLS41LjVaIn1dXX0pO3ZhciBMTixWQWU9bigoKT0+e0xOPVtbInBhdGgiLHtkOiJNMTIgNHYxNiJ9XSxbInBhdGgiLHtkOiJNNCA3VjVhMSAxIDAgMCAxIDEtMWgxNGExIDEgMCAwIDEgMSAxdjIifV0sWyJwYXRoIix7ZDoiTTkgMjBoNiJ9XV19KTt2YXIgVE4sVUFlPW4oKCk9PntUTj1bWyJwYXRoIix7ZDoiTTEyIDEzdjdhMiAyIDAgMCAwIDQgMCJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xOC42NTYgMTNoMi4zMzZhMSAxIDAgMCAwIC45Ny0xLjI3NCAxMC4yODQgMTAuMjg0IDAgMCAwLTEyLjA3LTcuNTEifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNNS45NjEgNS45NTdhMTAuMjggMTAuMjggMCAwIDAtMy45MjIgNS43NjlBMSAxIDAgMCAwIDMgMTNoMTAifV1dfSk7dmFyIF9OLGpBZT1uKCgpPT57X049W1sicGF0aCIse2Q6Ik0xMiAxM3Y3YTIgMiAwIDAgMCA0IDAifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMjAuOTkyIDEzYTEgMSAwIDAgMCAuOTctMS4yNzQgMTAuMjg0IDEwLjI4NCAwIDAgMC0xOS45MjMgMEExIDEgMCAwIDAgMyAxM3oifV1dfSk7dmFyIEFOLFdBZT1uKCgpPT57QU49W1sicGF0aCIse2Q6Ik02IDR2NmE2IDYgMCAwIDAgMTIgMFY0In1dLFsibGluZSIse3gxOiI0Iix4MjoiMjAiLHkxOiIyMCIseTI6IjIwIn1dXX0pO3ZhciAkTixHQWU9bigoKT0+eyROPVtbInBhdGgiLHtkOiJNOSAxNCA0IDlsNS01In1dLFsicGF0aCIse2Q6Ik00IDloMTAuNWE1LjUgNS41IDAgMCAxIDUuNSA1LjVhNS41IDUuNSAwIDAgMS01LjUgNS41SDExIn1dXX0pO3ZhciBETixZQWU9bigoKT0+e0ROPVtbInBhdGgiLHtkOiJNMjEgMTdhOSA5IDAgMCAwLTE1LTYuN0wzIDEzIn1dLFsicGF0aCIse2Q6Ik0zIDd2Nmg2In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTciLHI6IjEifV1dfSk7dmFyIEVOLFpBZT1uKCgpPT57RU49W1sicGF0aCIse2Q6Ik0zIDd2Nmg2In1dLFsicGF0aCIse2Q6Ik0yMSAxN2E5IDkgMCAwIDAtOS05IDkgOSAwIDAgMC02IDIuM0wzIDEzIn1dXX0pO3ZhciBOTixYQWU9bigoKT0+e05OPVtbInBhdGgiLHtkOiJNMTYgMTJoNiJ9XSxbInBhdGgiLHtkOiJNOCAxMkgyIn1dLFsicGF0aCIse2Q6Ik0xMiAydjIifV0sWyJwYXRoIix7ZDoiTTEyIDh2MiJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiJ9XSxbInBhdGgiLHtkOiJtMTkgMTUgMy0zLTMtMyJ9XSxbInBhdGgiLHtkOiJtNSA5LTMgMyAzIDMifV1dfSk7dmFyIFBOLFFBZT1uKCgpPT57UE49W1sicGF0aCIse2Q6Ik0xMiAyMnYtNiJ9XSxbInBhdGgiLHtkOiJNMTIgOFYyIn1dLFsicGF0aCIse2Q6Ik00IDEySDIifV0sWyJwYXRoIix7ZDoiTTEwIDEySDgifV0sWyJwYXRoIix7ZDoiTTE2IDEyaC0yIn1dLFsicGF0aCIse2Q6Ik0yMiAxMmgtMiJ9XSxbInBhdGgiLHtkOiJtMTUgMTktMyAzLTMtMyJ9XSxbInBhdGgiLHtkOiJtMTUgNS0zLTMtMyAzIn1dXX0pO3ZhciBJTixLQWU9bigoKT0+e0lOPVtbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI2Iix4OiI1Iix5OiI0IixyeDoiMSJ9XSxbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI2Iix4OiIxMSIseToiMTQiLHJ4OiIxIn1dXX0pO3ZhciBfbCxKQWU9bigoKT0+e19sPVtbInBhdGgiLHtkOiJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIn1dLFsicGF0aCIse2Q6Ik0xOCAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTE4IDE2aC4wMSJ9XSxbInBhdGgiLHtkOiJNMjIgN2ExIDEgMCAwIDAtMS0xaC0yYTIgMiAwIDAgMS0xLjE0My0uMzU5TDEzLjE0MyAyLjM2YTIgMiAwIDAgMC0yLjI4Ni0uMDAxTDYuMTQzIDUuNjRBMiAyIDAgMCAxIDUgNkgzYTEgMSAwIDAgMC0xIDF2MTJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0yeiJ9XSxbInBhdGgiLHtkOiJNNiAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTYgMTZoLjAxIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTAiLHI6IjIifV1dfSk7dmFyIEZOLGUkZT1uKCgpPT57Rk49W1sicGF0aCIse2Q6Ik0xNSA3aDJhNSA1IDAgMCAxIDAgMTBoLTJtLTYgMEg3QTUgNSAwIDAgMSA3IDdoMiJ9XV19KTt2YXIgT04sdCRlPW4oKCk9PntPTj1bWyJwYXRoIix7ZDoibTE4Ljg0IDEyLjI1IDEuNzItMS43MWgtLjAyYTUuMDA0IDUuMDA0IDAgMCAwLS4xMi03LjA3IDUuMDA2IDUuMDA2IDAgMCAwLTYuOTUgMGwtMS43MiAxLjcxIn1dLFsicGF0aCIse2Q6Im01LjE3IDExLjc1LTEuNzEgMS43MWE1LjAwNCA1LjAwNCAwIDAgMCAuMTIgNy4wNyA1LjAwNiA1LjAwNiAwIDAgMCA2Ljk1IDBsMS43MS0xLjcxIn1dLFsibGluZSIse3gxOiI4Iix4MjoiOCIseTE6IjIiLHkyOiI1In1dLFsibGluZSIse3gxOiIyIix4MjoiNSIseTE6IjgiLHkyOiI4In1dLFsibGluZSIse3gxOiIxNiIseDI6IjE2Iix5MToiMTkiLHkyOiIyMiJ9XSxbImxpbmUiLHt4MToiMTkiLHgyOiIyMiIseTE6IjE2Iix5MjoiMTYifV1dfSk7dmFyIEJOLGEkZT1uKCgpPT57Qk49W1sicGF0aCIse2Q6Im0xOSA1IDMtMyJ9XSxbInBhdGgiLHtkOiJtMiAyMiAzLTMifV0sWyJwYXRoIix7ZDoiTTYuMyAyMC4zYTIuNCAyLjQgMCAwIDAgMy40IDBMMTIgMThsLTYtNi0yLjMgMi4zYTIuNCAyLjQgMCAwIDAgMCAzLjRaIn1dLFsicGF0aCIse2Q6Ik03LjUgMTMuNSAxMCAxMSJ9XSxbInBhdGgiLHtkOiJNMTAuNSAxNi41IDEzIDE0In1dLFsicGF0aCIse2Q6Im0xMiA2IDYgNiAyLjMtMi4zYTIuNCAyLjQgMCAwIDAgMC0zLjRsLTIuNi0yLjZhMi40IDIuNCAwIDAgMC0zLjQgMFoifV1dfSk7dmFyIFJOLHIkZT1uKCgpPT57Uk49W1siY2lyY2xlIix7Y3g6IjEwIixjeToiNyIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiI0IixjeToiMjAiLHI6IjEifV0sWyJwYXRoIix7ZDoiTTQuNyAxOS4zIDE5IDUifV0sWyJwYXRoIix7ZDoibTIxIDMtMyAxIDIgMloifV0sWyJwYXRoIix7ZDoiTTkuMjYgNy42OCA1IDEybDIgNSJ9XSxbInBhdGgiLHtkOiJtMTAgMTQgNSAyIDMuNS0zLjUifV0sWyJwYXRoIix7ZDoibTE4IDEyIDEtMSAxIDEtMSAxWiJ9XV19KTt2YXIgSE4saSRlPW4oKCk9PntITj1bWyJwYXRoIix7ZDoiTTEyIDN2MTIifV0sWyJwYXRoIix7ZDoibTE3IDgtNS01LTUgNSJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCJ9XV19KTt2YXIgcU4sbyRlPW4oKCk9PntxTj1bWyJwYXRoIix7ZDoibTE2IDExIDIgMiA0LTQifV0sWyJwYXRoIix7ZDoiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjciLHI6IjQifV1dfSk7dmFyIFZOLHMkZT1uKCgpPT57Vk49W1sicGF0aCIse2Q6Ik0xMCAxNUg2YTQgNCAwIDAgMC00IDR2MiJ9XSxbInBhdGgiLHtkOiJtMTQuMzA1IDE2LjUzLjkyMy0uMzgyIn1dLFsicGF0aCIse2Q6Im0xNS4yMjggMTMuODUyLS45MjMtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMTYuODUyIDEyLjIyOC0uMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTE2Ljg1MiAxNy43NzItLjM4My45MjQifV0sWyJwYXRoIix7ZDoibTE5LjE0OCAxMi4yMjguMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTE5LjUzIDE4LjY5Ni0uMzgyLS45MjQifV0sWyJwYXRoIix7ZDoibTIwLjc3MiAxMy44NTIuOTI0LS4zODMifV0sWyJwYXRoIix7ZDoibTIwLjc3MiAxNi4xNDguOTI0LjM4MyJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE1IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI3IixyOiI0In1dXX0pO3ZhciBVTixuJGU9bigoKT0+e1VOPVtbImNpcmNsZSIse2N4OiIxMCIsY3k6IjciLHI6IjQifV0sWyJwYXRoIix7ZDoiTTEwLjMgMTVIN2E0IDQgMCAwIDAtNCA0djIifV0sWyJwYXRoIix7ZDoiTTE1IDE1LjVWMTRhMiAyIDAgMCAxIDQgMHYxLjUifV0sWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNSIseDoiMTMiLHk6IjE2IixyeDoiLjg5OSJ9XV19KTt2YXIgak4sbCRlPW4oKCk9PntqTj1bWyJwYXRoIix7ZDoiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjciLHI6IjQifV0sWyJsaW5lIix7eDE6IjIyIix4MjoiMTYiLHkxOiIxMSIseTI6IjExIn1dXX0pO3ZhciBXTixjJGU9bigoKT0+e1dOPVtbInBhdGgiLHtkOiJNMTEuNSAxNUg3YTQgNCAwIDAgMC00IDR2MiJ9XSxbInBhdGgiLHtkOiJNMjEuMzc4IDE2LjYyNmExIDEgMCAwIDAtMy4wMDQtMy4wMDRsLTQuMDEgNC4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6In1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiNyIscjoiNCJ9XV19KTt2YXIgR04sZCRlPW4oKCk9PntHTj1bWyJwYXRoIix7ZDoiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjciLHI6IjQifV0sWyJsaW5lIix7eDE6IjE5Iix4MjoiMTkiLHkxOiI4Iix5MjoiMTQifV0sWyJsaW5lIix7eDE6IjIyIix4MjoiMTYiLHkxOiIxMSIseTI6IjExIn1dXX0pO3ZhciBBbCxmJGU9bigoKT0+e0FsPVtbInBhdGgiLHtkOiJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI4IixyOiI1In1dLFsicGF0aCIse2Q6Im0xNiAxOSAyIDIgNC00In1dXX0pO3ZhciAkbCx1JGU9bigoKT0+eyRsPVtbInBhdGgiLHtkOiJtMTQuMzA1IDE5LjUzLjkyMy0uMzgyIn1dLFsicGF0aCIse2Q6Im0xNS4yMjggMTYuODUyLS45MjMtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMTYuODUyIDE1LjIyOC0uMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTE2Ljg1MiAyMC43NzItLjM4My45MjQifV0sWyJwYXRoIix7ZDoibTE5LjE0OCAxNS4yMjguMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTE5LjUzIDIxLjY5Ni0uMzgyLS45MjQifV0sWyJwYXRoIix7ZDoiTTIgMjFhOCA4IDAgMCAxIDEwLjQzNC03LjYyIn1dLFsicGF0aCIse2Q6Im0yMC43NzIgMTYuODUyLjkyNC0uMzgzIn1dLFsicGF0aCIse2Q6Im0yMC43NzIgMTkuMTQ4LjkyNC4zODMifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI4IixyOiI1In1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTgiLHI6IjMifV1dfSk7dmFyIERsLHAkZT1uKCgpPT57RGw9W1sicGF0aCIse2Q6Ik0yIDIxYTggOCAwIDAgMSAxMy4yOTItNiJ9XSxbImNpcmNsZSIse2N4OiIxMCIsY3k6IjgiLHI6IjUifV0sWyJwYXRoIix7ZDoiTTIyIDE5aC02In1dXX0pO3ZhciBZTixoJGU9bigoKT0+e1lOPVtbInBhdGgiLHtkOiJNMiAyMWE4IDggMCAwIDEgMTAuODIxLTcuNDg3In1dLFsicGF0aCIse2Q6Ik0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI4IixyOiI1In1dXX0pO3ZhciBFbCxtJGU9bigoKT0+e0VsPVtbInBhdGgiLHtkOiJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI4IixyOiI1In1dLFsicGF0aCIse2Q6Ik0xOSAxNnY2In1dLFsicGF0aCIse2Q6Ik0yMiAxOWgtNiJ9XV19KTt2YXIgWk4sZyRlPW4oKCk9PntaTj1bWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI4IixyOiI1In1dLFsicGF0aCIse2Q6Ik0yIDIxYTggOCAwIDAgMSAxMC40MzQtNy42MiJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE4IixyOiIzIn1dLFsicGF0aCIse2Q6Im0yMiAyMi0xLjktMS45In1dXX0pO3ZhciBObCx4JGU9bigoKT0+e05sPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjgiLHI6IjUifV0sWyJwYXRoIix7ZDoiTTIwIDIxYTggOCAwIDAgMC0xNiAwIn1dXX0pO3ZhciBQbCxiJGU9bigoKT0+e1BsPVtbInBhdGgiLHtkOiJNMiAyMWE4IDggMCAwIDEgMTEuODczLTcifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI4IixyOiI1In1dLFsicGF0aCIse2Q6Im0xNyAxNyA1IDUifV0sWyJwYXRoIix7ZDoibTIyIDE3LTUgNSJ9XV19KTt2YXIgWE4sdiRlPW4oKCk9PntYTj1bWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI3IixyOiI0In1dLFsicGF0aCIse2Q6Ik0xMC4zIDE1SDdhNCA0IDAgMCAwLTQgNHYyIn1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTciLHI6IjMifV0sWyJwYXRoIix7ZDoibTIxIDIxLTEuOS0xLjkifV1dfSk7dmFyIFFOLHkkZT1uKCgpPT57UU49W1sicGF0aCIse2Q6Ik0xNi4wNTEgMTIuNjE2YTEgMSAwIDAgMSAxLjkwOS4wMjRsLjczNyAxLjQ1MmExIDEgMCAwIDAgLjczNy41MzVsMS42MzQuMjU2YTEgMSAwIDAgMSAuNTg4IDEuODA2bC0xLjE3MiAxLjE2OGExIDEgMCAwIDAtLjI4Mi44NjZsLjI1OSAxLjYxM2ExIDEgMCAwIDEtMS41NDEgMS4xMzRsLTEuNDY1LS43NWExIDEgMCAwIDAtLjkxMiAwbC0xLjQ2NS43NWExIDEgMCAwIDEtMS41MzktMS4xMzNsLjI1OC0xLjYxM2ExIDEgMCAwIDAtLjI4Mi0uODY2bC0xLjE1Ni0xLjE1M2ExIDEgMCAwIDEgLjU3Mi0xLjgyMmwxLjYzMy0uMjU2YTEgMSAwIDAgMCAuNzM3LS41MzV6In1dLFsicGF0aCIse2Q6Ik04IDE1SDdhNCA0IDAgMCAwLTQgNHYyIn1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiNyIscjoiNCJ9XV19KTt2YXIgS04sdyRlPW4oKCk9PntLTj1bWyJwYXRoIix7ZDoiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjciLHI6IjQifV0sWyJsaW5lIix7eDE6IjE3Iix4MjoiMjIiLHkxOiI4Iix5MjoiMTMifV0sWyJsaW5lIix7eDE6IjIyIix4MjoiMTciLHkxOiI4Iix5MjoiMTMifV1dfSk7dmFyIEpOLE0kZT1uKCgpPT57Sk49W1sicGF0aCIse2Q6Ik0xOSAyMXYtMmE0IDQgMCAwIDAtNC00SDlhNCA0IDAgMCAwLTQgNHYyIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiNyIscjoiNCJ9XV19KTt2YXIgSWwseiRlPW4oKCk9PntJbD1bWyJwYXRoIix7ZDoiTTE4IDIxYTggOCAwIDAgMC0xNiAwIn1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiOCIscjoiNSJ9XSxbInBhdGgiLHtkOiJNMjIgMjBjMC0zLjM3LTItNi41LTQtOGE1IDUgMCAwIDAtLjQ1LTguMyJ9XV19KTt2YXIgZVAsayRlPW4oKCk9PntlUD1bWyJwYXRoIix7ZDoiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIifV0sWyJwYXRoIix7ZDoiTTE2IDMuMTI4YTQgNCAwIDAgMSAwIDcuNzQ0In1dLFsicGF0aCIse2Q6Ik0yMiAyMXYtMmE0IDQgMCAwIDAtMy0zLjg3In1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI3IixyOiI0In1dXX0pO3ZhciBGbCxTJGU9bigoKT0+e0ZsPVtbInBhdGgiLHtkOiJtMTYgMi0yLjMgMi4zYTMgMyAwIDAgMCAwIDQuMmwxLjggMS44YTMgMyAwIDAgMCA0LjIgMEwyMiA4In1dLFsicGF0aCIse2Q6Ik0xNSAxNSAzLjMgMy4zYTQuMiA0LjIgMCAwIDAgMCA2bDcuMyA3LjNjLjcuNyAyIC43IDIuOCAwTDE1IDE1Wm0wIDAgNyA3In1dLFsicGF0aCIse2Q6Im0yLjEgMjEuOCA2LjQtNi4zIn1dLFsicGF0aCIse2Q6Im0xOSA1LTcgNyJ9XV19KTt2YXIgT2wsQyRlPW4oKCk9PntPbD1bWyJwYXRoIix7ZDoiTTMgMnY3YzAgMS4xLjkgMiAyIDJoNGEyIDIgMCAwIDAgMi0yVjIifV0sWyJwYXRoIix7ZDoiTTcgMnYyMCJ9XSxbInBhdGgiLHtkOiJNMjEgMTVWMmE1IDUgMCAwIDAtNSA1djZjMCAxLjEuOSAyIDIgMmgzWm0wIDB2NyJ9XV19KTt2YXIgdFAsTCRlPW4oKCk9Pnt0UD1bWyJwYXRoIix7ZDoiTTEzIDZ2NWExIDEgMCAwIDAgMSAxaDYuMTAyYTEgMSAwIDAgMSAuNzEyLjI5OGwuODk4LjkxYTEgMSAwIDAgMSAuMjg4LjcwMlYxN2ExIDEgMCAwIDEtMSAxaC0zIn1dLFsicGF0aCIse2Q6Ik01IDE4SDNhMSAxIDAgMCAxLTEtMVY4YTIgMiAwIDAgMSAyLTJoMTJjMS4xIDAgMi4xLjggMi40IDEuOGwxLjE3NiA0LjIifV0sWyJwYXRoIix7ZDoiTTkgMThoNSJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjE4IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjciLGN5OiIxOCIscjoiMiJ9XV19KTt2YXIgYVAsVCRlPW4oKCk9PnthUD1bWyJwYXRoIix7ZDoiTTEyIDJ2MjAifV0sWyJwYXRoIix7ZDoiTTIgNWgyMCJ9XSxbInBhdGgiLHtkOiJNMyAzdjIifV0sWyJwYXRoIix7ZDoiTTcgM3YyIn1dLFsicGF0aCIse2Q6Ik0xNyAzdjIifV0sWyJwYXRoIix7ZDoiTTIxIDN2MiJ9XSxbInBhdGgiLHtkOiJtMTkgNS03IDctNy03In1dXX0pO3ZhciByUCxfJGU9bigoKT0+e3JQPVtbInBhdGgiLHtkOiJNOCAyMXMtNC0zLTQtOSA0LTkgNC05In1dLFsicGF0aCIse2Q6Ik0xNiAzczQgMyA0IDktNCA5LTQgOSJ9XSxbImxpbmUiLHt4MToiMTUiLHgyOiI5Iix5MToiOSIseTI6IjE1In1dLFsibGluZSIse3gxOiI5Iix4MjoiMTUiLHkxOiI5Iix5MjoiMTUifV1dfSk7dmFyIGlQLEEkZT1uKCgpPT57aVA9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJjaXJjbGUiLHtjeDoiNy41IixjeToiNy41IixyOiIuNSIsZmlsbDoiY3VycmVudENvbG9yIn1dLFsicGF0aCIse2Q6Im03LjkgNy45IDIuNyAyLjcifV0sWyJjaXJjbGUiLHtjeDoiMTYuNSIsY3k6IjcuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbInBhdGgiLHtkOiJtMTMuNCAxMC42IDIuNy0yLjcifV0sWyJjaXJjbGUiLHtjeDoiNy41IixjeToiMTYuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbInBhdGgiLHtkOiJtNy45IDE2LjEgMi43LTIuNyJ9XSxbImNpcmNsZSIse2N4OiIxNi41IixjeToiMTYuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbInBhdGgiLHtkOiJtMTMuNCAxMy40IDIuNyAyLjcifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMiJ9XV19KTt2YXIgb1AsJCRlPW4oKCk9PntvUD1bWyJwYXRoIix7ZDoiTTE5LjUgN2EyNCAyNCAwIDAgMSAwIDEwIn1dLFsicGF0aCIse2Q6Ik00LjUgN2EyNCAyNCAwIDAgMCAwIDEwIn1dLFsicGF0aCIse2Q6Ik03IDE5LjVhMjQgMjQgMCAwIDAgMTAgMCJ9XSxbInBhdGgiLHtkOiJNNyA0LjVhMjQgMjQgMCAwIDEgMTAgMCJ9XSxbInJlY3QiLHt4OiIxNyIseToiMTciLHdpZHRoOiI1IixoZWlnaHQ6IjUiLHJ4OiIxIn1dLFsicmVjdCIse3g6IjE3Iix5OiIyIix3aWR0aDoiNSIsaGVpZ2h0OiI1IixyeDoiMSJ9XSxbInJlY3QiLHt4OiIyIix5OiIxNyIsd2lkdGg6IjUiLGhlaWdodDoiNSIscng6IjEifV0sWyJyZWN0Iix7eDoiMiIseToiMiIsd2lkdGg6IjUiLGhlaWdodDoiNSIscng6IjEifV1dfSk7dmFyIHNQLEQkZT1uKCgpPT57c1A9W1sicGF0aCIse2Q6Ik0xNiA4cTYgMCA2LTYtNiAwLTYgNiJ9XSxbInBhdGgiLHtkOiJNMTcuNDEgMy41OWExMCAxMCAwIDEgMCAzIDMifV0sWyJwYXRoIix7ZDoiTTIgMmEyNi42IDI2LjYgMCAwIDEgMTAgMjBjLjktNi44MiAxLjUtOS41IDQtMTQifV1dfSk7dmFyIG5QLEUkZT1uKCgpPT57blA9W1sicGF0aCIse2Q6Ik0xOCAxMWMtMS41IDAtMi41LjUtMyAyIn1dLFsicGF0aCIse2Q6Ik00IDZhMiAyIDAgMCAwLTIgMnY0YTUgNSAwIDAgMCA1IDUgOCA4IDAgMCAxIDUgMiA4IDggMCAwIDEgNS0yIDUgNSAwIDAgMCA1LTVWOGEyIDIgMCAwIDAtMi0yaC0zYTggOCAwIDAgMC01IDIgOCA4IDAgMCAwLTUtMnoifV0sWyJwYXRoIix7ZDoiTTYgMTFjMS41IDAgMi41LjUgMyAyIn1dXX0pO3ZhciBsUCxOJGU9bigoKT0+e2xQPVtbInBhdGgiLHtkOiJNMTIgMTV2NyJ9XSxbInBhdGgiLHtkOiJNOSAxOWg2In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiOSIscjoiNiJ9XV19KTt2YXIgY1AsUCRlPW4oKCk9PntjUD1bWyJwYXRoIix7ZDoiTTEwIDIwaDQifV0sWyJwYXRoIix7ZDoiTTEyIDE2djYifV0sWyJwYXRoIix7ZDoiTTE3IDJoNHY0In1dLFsicGF0aCIse2Q6Im0yMSAyLTUuNDYgNS40NiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjExIixyOiI1In1dXX0pO3ZhciBkUCxJJGU9bigoKT0+e2RQPVtbInBhdGgiLHtkOiJtMiA4IDIgMi0yIDIgMiAyLTIgMiJ9XSxbInBhdGgiLHtkOiJtMjIgOC0yIDIgMiAyLTIgMiAyIDIifV0sWyJwYXRoIix7ZDoiTTggOHYxMGMwIC41NS40NSAxIDEgMWg2Yy41NSAwIDEtLjQ1IDEtMXYtMiJ9XSxbInBhdGgiLHtkOiJNMTYgMTAuMzRWNmMwLS41NS0uNDUtMS0xLTFoLTQuMzQifV0sWyJsaW5lIix7eDE6IjIiLHgyOiIyMiIseTE6IjIiLHkyOiIyMiJ9XV19KTt2YXIgZlAsRiRlPW4oKCk9PntmUD1bWyJwYXRoIix7ZDoibTIgOCAyIDItMiAyIDIgMi0yIDIifV0sWyJwYXRoIix7ZDoibTIyIDgtMiAyIDIgMi0yIDIgMiAyIn1dLFsicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjE0Iix4OiI4Iix5OiI1IixyeDoiMSJ9XV19KTt2YXIgdVAsTyRlPW4oKCk9Pnt1UD1bWyJwYXRoIix7ZDoiTTEwLjY2IDZIMTRhMiAyIDAgMCAxIDIgMnYyLjVsNS4yNDgtMy4wNjJBLjUuNSAwIDAgMSAyMiA3Ljg3djguMTk2In1dLFsicGF0aCIse2Q6Ik0xNiAxNmEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dXX0pO3ZhciBwUCxCJGU9bigoKT0+e3BQPVtbInBhdGgiLHtkOiJtMTYgMTMgNS4yMjMgMy40ODJhLjUuNSAwIDAgMCAuNzc3LS40MTZWNy44N2EuNS41IDAgMCAwLS43NTItLjQzMkwxNiAxMC41In1dLFsicmVjdCIse3g6IjIiLHk6IjYiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxMiIscng6IjIifV1dfSk7dmFyIGhQLFIkZT1uKCgpPT57aFA9W1siY2lyY2xlIix7Y3g6IjYiLGN5OiIxMiIscjoiNCJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjEyIixyOiI0In1dLFsibGluZSIse3gxOiI2Iix4MjoiMTgiLHkxOiIxNiIseTI6IjE2In1dXX0pO3ZhciBtUCxIJGU9bigoKT0+e21QPVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTYiLHg6IjIiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yIDhoMjAifV0sWyJjaXJjbGUiLHtjeDoiOCIsY3k6IjE0IixyOiIyIn1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV0sWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiIxNCIscjoiMiJ9XV19KTt2YXIgZ1AscSRlPW4oKCk9PntnUD1bWyJwYXRoIix7ZDoiTTIxIDE3djJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTIifV0sWyJwYXRoIix7ZDoiTTIxIDdWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYyIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEifV0sWyJwYXRoIix7ZDoiTTE4Ljk0NCAxMi4zM2ExIDEgMCAwIDAgMC0uNjYgNy41IDcuNSAwIDAgMC0xMy44ODggMCAxIDEgMCAwIDAgMCAuNjYgNy41IDcuNSAwIDAgMCAxMy44ODggMCJ9XV19KTt2YXIgeFAsViRlPW4oKCk9Pnt4UD1bWyJwYXRoIix7ZDoiTTExLjEgNy4xYTE2LjU1IDE2LjU1IDAgMCAxIDEwLjkgNCJ9XSxbInBhdGgiLHtkOiJNMTIgMTJhMTIuNiAxMi42IDAgMCAxLTguNyA1In1dLFsicGF0aCIse2Q6Ik0xNi44IDEzLjZhMTYuNTUgMTYuNTUgMCAwIDEtOSA3LjUifV0sWyJwYXRoIix7ZDoiTTIwLjcgMTdhMTIuOCAxMi44IDAgMCAwLTguNy01IDEzLjMgMTMuMyAwIDAgMSAwLTEwIn1dLFsicGF0aCIse2Q6Ik02LjMgMy44YTE2LjU1IDE2LjU1IDAgMCAwIDEuOSAxMS41In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXX0pO3ZhciBiUCxVJGU9bigoKT0+e2JQPVtbInBhdGgiLHtkOiJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoifV0sWyJwYXRoIix7ZDoiTTE2IDlhNSA1IDAgMCAxIDAgNiJ9XV19KTt2YXIgdlAsaiRlPW4oKCk9Pnt2UD1bWyJwYXRoIix7ZDoiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6In1dLFsicGF0aCIse2Q6Ik0xNiA5YTUgNSAwIDAgMSAwIDYifV0sWyJwYXRoIix7ZDoiTTE5LjM2NCAxOC4zNjRhOSA5IDAgMCAwIDAtMTIuNzI4In1dXX0pO3ZhciB5UCxXJGU9bigoKT0+e3lQPVtbInBhdGgiLHtkOiJNMTYgOWE1IDUgMCAwIDEgLjk1IDIuMjkzIn1dLFsicGF0aCIse2Q6Ik0xOS4zNjQgNS42MzZhOSA5IDAgMCAxIDEuODg5IDkuOTYifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJtNyA3LS41ODcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4VjExIn1dLFsicGF0aCIse2Q6Ik05LjgyOCA0LjE3MkEuNjg2LjY4NiAwIDAgMSAxMSA0LjY1N3YuNjg2In1dXX0pO3ZhciB3UCxHJGU9bigoKT0+e3dQPVtbInBhdGgiLHtkOiJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoifV0sWyJsaW5lIix7eDE6IjIyIix4MjoiMTYiLHkxOiI5Iix5MjoiMTUifV0sWyJsaW5lIix7eDE6IjE2Iix4MjoiMjIiLHkxOiI5Iix5MjoiMTUifV1dfSk7dmFyIE1QLFkkZT1uKCgpPT57TVA9W1sicGF0aCIse2Q6Ik0xMSA0LjcwMmEuNzA1LjcwNSAwIDAgMC0xLjIwMy0uNDk4TDYuNDEzIDcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4eiJ9XV19KTt2YXIgelAsWiRlPW4oKCk9Pnt6UD1bWyJwYXRoIix7ZDoibTkgMTIgMiAyIDQtNCJ9XSxbInBhdGgiLHtkOiJNNSA3YzAtMS4xLjktMiAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxMkg1VjdaIn1dLFsicGF0aCIse2Q6Ik0yMiAxOUgyIn1dXX0pO3ZhciBCbCxYJGU9bigoKT0+e0JsPVtbInBhdGgiLHtkOiJNMTcgMTRoLjAxIn1dLFsicGF0aCIse2Q6Ik03IDdoMTJhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTQifV1dfSk7dmFyIGtQLFEkZT1uKCgpPT57a1A9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgOWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTMgMTFoM2MuOCAwIDEuNi4zIDIuMS45bDEuMS45YzEuNiAxLjYgNC4xIDEuNiA1LjcgMGwxLjEtLjljLjUtLjUgMS4zLS45IDIuMS0uOUgyMSJ9XV19KTt2YXIgU1AsSyRlPW4oKCk9PntTUD1bWyJwYXRoIix7ZDoiTTE5IDdWNGExIDEgMCAwIDAtMS0xSDVhMiAyIDAgMCAwIDAgNGgxNWExIDEgMCAwIDEgMSAxdjRoLTNhMiAyIDAgMCAwIDAgNGgzYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAwLTEtMSJ9XSxbInBhdGgiLHtkOiJNMyA1djE0YTIgMiAwIDAgMCAyIDJoMTVhMSAxIDAgMCAwIDEtMXYtNCJ9XV19KTt2YXIgQ1AsSiRlPW4oKCk9PntDUD1bWyJwYXRoIix7ZDoiTTEyIDE3djQifV0sWyJwYXRoIix7ZDoiTTggMjFoOCJ9XSxbInBhdGgiLHtkOiJtOSAxNyA2LjEtNi4xYTIgMiAwIDAgMSAyLjgxLjAxTDIyIDE1In1dLFsiY2lyY2xlIix7Y3g6IjgiLGN5OiI5IixyOiIyIn1dLFsicmVjdCIse3g6IjIiLHk6IjMiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNCIscng6IjIifV1dfSk7dmFyIFJsLGVEZT1uKCgpPT57Umw9W1sicGF0aCIse2Q6Im0yMS42NCAzLjY0LTEuMjgtMS4yOGExLjIxIDEuMjEgMCAwIDAtMS43MiAwTDIuMzYgMTguNjRhMS4yMSAxLjIxIDAgMCAwIDAgMS43MmwxLjI4IDEuMjhhMS4yIDEuMiAwIDAgMCAxLjcyIDBMMjEuNjQgNS4zNmExLjIgMS4yIDAgMCAwIDAtMS43MiJ9XSxbInBhdGgiLHtkOiJtMTQgNyAzIDMifV0sWyJwYXRoIix7ZDoiTTUgNnY0In1dLFsicGF0aCIse2Q6Ik0xOSAxNHY0In1dLFsicGF0aCIse2Q6Ik0xMCAydjIifV0sWyJwYXRoIix7ZDoiTTcgOEgzIn1dLFsicGF0aCIse2Q6Ik0yMSAxNmgtNCJ9XSxbInBhdGgiLHtkOiJNMTEgM0g5In1dXX0pO3ZhciBMUCx0RGU9bigoKT0+e0xQPVtbInBhdGgiLHtkOiJNMTUgNFYyIn1dLFsicGF0aCIse2Q6Ik0xNSAxNnYtMiJ9XSxbInBhdGgiLHtkOiJNOCA5aDIifV0sWyJwYXRoIix7ZDoiTTIwIDloMiJ9XSxbInBhdGgiLHtkOiJNMTcuOCAxMS44IDE5IDEzIn1dLFsicGF0aCIse2Q6Ik0xNSA5aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTcuOCA2LjIgMTkgNSJ9XSxbInBhdGgiLHtkOiJtMyAyMSA5LTkifV0sWyJwYXRoIix7ZDoiTTEyLjIgNi4yIDExIDUifV1dfSk7dmFyIFRQLGFEZT1uKCgpPT57VFA9W1sicGF0aCIse2Q6Ik0xOCAyMVYxMGExIDEgMCAwIDAtMS0xSDdhMSAxIDAgMCAwLTEgMXYxMSJ9XSxbInBhdGgiLHtkOiJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMS4xMzItMS44MDNsNy45NS0zLjk3NGEyIDIgMCAwIDEgMS44MzcgMGw3Ljk0OCAzLjk3NEEyIDIgMCAwIDEgMjIgOHoifV0sWyJwYXRoIix7ZDoiTTYgMTNoMTIifV0sWyJwYXRoIix7ZDoiTTYgMTdoMTIifV1dfSk7dmFyIF9QLHJEZT1uKCgpPT57X1A9W1sicGF0aCIse2Q6Ik0zIDZoMyJ9XSxbInBhdGgiLHtkOiJNMTcgNmguMDEifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjIwIix4OiIzIix5OiIyIixyeDoiMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEzIixyOiI1In1dLFsicGF0aCIse2Q6Ik0xMiAxOGEyLjUgMi41IDAgMCAwIDAtNSAyLjUgMi41IDAgMCAxIDAtNSJ9XV19KTt2YXIgQVAsaURlPW4oKCk9PntBUD1bWyJwYXRoIix7ZDoiTTEyIDEwdjIuMmwxLjYgMSJ9XSxbInBhdGgiLHtkOiJtMTYuMTMgNy42Ni0uODEtNC4wNWEyIDIgMCAwIDAtMi0xLjYxaC0yLjY4YTIgMiAwIDAgMC0yIDEuNjFsLS43OCA0LjA1In1dLFsicGF0aCIse2Q6Im03Ljg4IDE2LjM2LjggNGEyIDIgMCAwIDAgMiAxLjYxaDIuNzJhMiAyIDAgMCAwIDItMS42MWwuODEtNC4wNSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI2In1dXX0pO3ZhciAkUCxvRGU9bigoKT0+eyRQPVtbInBhdGgiLHtkOiJNMTIgMTBMMTIgMiJ9XSxbInBhdGgiLHtkOiJNMTYgNkwxMiAxMEw4IDYifV0sWyJwYXRoIix7ZDoiTTIgMTVDMi42IDE1LjUgMy4yIDE2IDQuNSAxNkM3IDE2IDcgMTQgOS41IDE0QzEyLjEgMTQgMTEuOSAxNiAxNC41IDE2QzE3IDE2IDE3IDE0IDE5LjUgMTRDMjAuOCAxNCAyMS40IDE0LjUgMjIgMTUifV0sWyJwYXRoIix7ZDoiTTIgMjFDMi42IDIxLjUgMy4yIDIyIDQuNSAyMkM3IDIyIDcgMjAgOS41IDIwQzEyLjEgMjAgMTEuOSAyMiAxNC41IDIyQzE3IDIyIDE3IDIwIDE5LjUgMjBDMjAuOCAyMCAyMS40IDIwLjUgMjIgMjEifV1dfSk7dmFyIERQLHNEZT1uKCgpPT57RFA9W1sicGF0aCIse2Q6Ik0xMiAydjgifV0sWyJwYXRoIix7ZDoiTTIgMTVjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSJ9XSxbInBhdGgiLHtkOiJNMiAyMWMuNi41IDEuMiAxIDIuNSAxIDIuNSAwIDIuNS0yIDUtMiAyLjYgMCAyLjQgMiA1IDIgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIn1dLFsicGF0aCIse2Q6Im04IDYgNC00IDQgNCJ9XV19KTt2YXIgRVAsbkRlPW4oKCk9PntFUD1bWyJwYXRoIix7ZDoiTTE5IDVhMiAyIDAgMCAwLTIgMnYxMSJ9XSxbInBhdGgiLHtkOiJNMiAxOGMuNi41IDEuMiAxIDIuNSAxIDIuNSAwIDIuNS0yIDUtMiAyLjYgMCAyLjQgMiA1IDIgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIn1dLFsicGF0aCIse2Q6Ik03IDEzaDEwIn1dLFsicGF0aCIse2Q6Ik03IDloMTAifV0sWyJwYXRoIix7ZDoiTTkgNWEyIDIgMCAwIDAtMiAydjExIn1dXX0pO3ZhciBOUCxsRGU9bigoKT0+e05QPVtbInBhdGgiLHtkOiJNMiA2Yy42LjUgMS4yIDEgMi41IDFDNyA3IDcgNSA5LjUgNWMyLjYgMCAyLjQgMiA1IDIgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIn1dLFsicGF0aCIse2Q6Ik0yIDEyYy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEifV0sWyJwYXRoIix7ZDoiTTIgMThjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSJ9XV19KTt2YXIgUFAsY0RlPW4oKCk9PntQUD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI0LjUiLHI6IjIuNSJ9XSxbInBhdGgiLHtkOiJtMTAuMiA2LjMtMy45IDMuOSJ9XSxbImNpcmNsZSIse2N4OiI0LjUiLGN5OiIxMiIscjoiMi41In1dLFsicGF0aCIse2Q6Ik03IDEyaDEwIn1dLFsiY2lyY2xlIix7Y3g6IjE5LjUiLGN5OiIxMiIscjoiMi41In1dLFsicGF0aCIse2Q6Im0xMy44IDE3LjcgMy45LTMuOSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE5LjUiLHI6IjIuNSJ9XV19KTt2YXIgSVAsZERlPW4oKCk9PntJUD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMCIscjoiOCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEwIixyOiIzIn1dLFsicGF0aCIse2Q6Ik03IDIyaDEwIn1dLFsicGF0aCIse2Q6Ik0xMiAyMnYtNCJ9XV19KTt2YXIgRlAsZkRlPW4oKCk9PntGUD1bWyJwYXRoIix7ZDoiTTE3IDE3aC01Yy0xLjA5LS4wMi0xLjk0LjkyLTIuNSAxLjlBMyAzIDAgMSAxIDIuNTcgMTUifV0sWyJwYXRoIix7ZDoiTTkgMy40YTQgNCAwIDAgMSA2LjUyLjY2In1dLFsicGF0aCIse2Q6Im02IDE3IDMuMS01LjhhMi41IDIuNSAwIDAgMCAuMDU3LTIuMDUifV0sWyJwYXRoIix7ZDoiTTIwLjMgMjAuM2E0IDQgMCAwIDEtMi4zLjcifV0sWyJwYXRoIix7ZDoiTTE4LjYgMTNhNCA0IDAgMCAxIDMuMzU3IDMuNDE0In1dLFsicGF0aCIse2Q6Im0xMiA2IC42IDEifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XV19KTt2YXIgT1AsdURlPW4oKCk9PntPUD1bWyJwYXRoIix7ZDoiTTE4IDE2Ljk4aC01Ljk5Yy0xLjEgMC0xLjk1Ljk0LTIuNDggMS45QTQgNCAwIDAgMSAyIDE3Yy4wMS0uNy4yLTEuNC41Ny0yIn1dLFsicGF0aCIse2Q6Im02IDE3IDMuMTMtNS43OGMuNTMtLjk3LjEtMi4xOC0uNS0zLjFhNCA0IDAgMSAxIDYuODktNC4wNiJ9XSxbInBhdGgiLHtkOiJtMTIgNiAzLjEzIDUuNzNDMTUuNjYgMTIuNyAxNi45IDEzIDE4IDEzYTQgNCAwIDAgMSAwIDgifV1dfSk7dmFyIEJQLHBEZT1uKCgpPT57QlA9W1sicGF0aCIse2Q6Ik02LjUgOGEyIDIgMCAwIDAtMS45MDYgMS40NkwyLjEgMTguNUEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS45MjUtMi41NEwxOS40IDkuNUEyIDIgMCAwIDAgMTcuNDggOHoifV0sWyJwYXRoIix7ZDoiTTcuOTk5IDE1YTIuNSAyLjUgMCAwIDEgNCAwIDIuNSAyLjUgMCAwIDAgNCAwIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiNSIscjoiMyJ9XV19KTt2YXIgUlAsaERlPW4oKCk9PntSUD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI1IixyOiIzIn1dLFsicGF0aCIse2Q6Ik02LjUgOGEyIDIgMCAwIDAtMS45MDUgMS40NkwyLjEgMTguNUEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS45MjUtMi41NEwxOS40IDkuNUEyIDIgMCAwIDAgMTcuNDggOFoifV1dfSk7dmFyIEhQLG1EZT1uKCgpPT57SFA9W1sicGF0aCIse2Q6Im0yIDIyIDEwLTEwIn1dLFsicGF0aCIse2Q6Im0xNiA4LTEuMTcgMS4xNyJ9XSxbInBhdGgiLHtkOiJNMy40NyAxMi41MyA1IDExbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEw1IDE5bC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMSAwLTQuOTRaIn1dLFsicGF0aCIse2Q6Im04IDgtLjUzLjUzYTMuNSAzLjUgMCAwIDAgMCA0Ljk0TDkgMTVsMS41My0xLjUzYy41NS0uNTUuODgtMS4yNS45OC0xLjk3In1dLFsicGF0aCIse2Q6Ik0xMC45MSA1LjI2Yy4xNS0uMjYuMzQtLjUxLjU2LS43M0wxMyAzbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIC4yOCA0LjYyIn1dLFsicGF0aCIse2Q6Ik0yMCAyaDJ2MmE0IDQgMCAwIDEtNCA0aC0yVjZhNCA0IDAgMCAxIDQtNFoifV0sWyJwYXRoIix7ZDoiTTExLjQ3IDE3LjQ3IDEzIDE5bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMNSAxOWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIn1dLFsicGF0aCIse2Q6Im0xNiAxNi0uNTMuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMOSAxNWwxLjUzLTEuNTNhMy40OSAzLjQ5IDAgMCAxIDEuOTctLjk4In1dLFsicGF0aCIse2Q6Ik0xOC43NCAxMy4wOWMuMjYtLjE1LjUxLS4zNC43My0uNTZMMjEgMTFsLTEuNTMtMS41M2EzLjUgMy41IDAgMCAwLTQuNjItLjI4In1dLFsibGluZSIse3gxOiIyIix4MjoiMjIiLHkxOiIyIix5MjoiMjIifV1dfSk7dmFyIHFQLGdEZT1uKCgpPT57cVA9W1sicGF0aCIse2Q6Ik0yIDIyIDE2IDgifV0sWyJwYXRoIix7ZDoiTTMuNDcgMTIuNTMgNSAxMWwxLjUzIDEuNTNhMy41IDMuNSAwIDAgMSAwIDQuOTRMNSAxOWwtMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgMC00Ljk0WiJ9XSxbInBhdGgiLHtkOiJNNy40NyA4LjUzIDkgN2wxLjUzIDEuNTNhMy41IDMuNSAwIDAgMSAwIDQuOTRMOSAxNWwtMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgMC00Ljk0WiJ9XSxbInBhdGgiLHtkOiJNMTEuNDcgNC41MyAxMyAzbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEwxMyAxMWwtMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgMC00Ljk0WiJ9XSxbInBhdGgiLHtkOiJNMjAgMmgydjJhNCA0IDAgMCAxLTQgNGgtMlY2YTQgNCAwIDAgMSA0LTRaIn1dLFsicGF0aCIse2Q6Ik0xMS40NyAxNy40NyAxMyAxOWwtMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEtNC45NCAwTDUgMTlsMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgNC45NCAwWiJ9XSxbInBhdGgiLHtkOiJNMTUuNDcgMTMuNDcgMTcgMTVsLTEuNTMgMS41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEw5IDE1bDEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDQuOTQgMFoifV0sWyJwYXRoIix7ZDoiTTE5LjQ3IDkuNDcgMjEgMTFsLTEuNTMgMS41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEwxMyAxMWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIn1dXX0pO3ZhciBWUCx4RGU9bigoKT0+e1ZQPVtbImNpcmNsZSIse2N4OiI3IixjeToiMTIiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTEwIDl2NiJ9XSxbImNpcmNsZSIse2N4OiIxNyIsY3k6IjEyIixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xNCA3djgifV0sWyJwYXRoIix7ZDoiTTIyIDE3djFjMCAuNS0uNSAxLTEgMUgzYy0uNSAwLTEtLjUtMS0xdi0xIn1dXX0pO3ZhciBVUCxiRGU9bigoKT0+e1VQPVtbInBhdGgiLHtkOiJtMTQuMzA1IDE5LjUzLjkyMy0uMzgyIn1dLFsicGF0aCIse2Q6Im0xNS4yMjggMTYuODUyLS45MjMtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMTYuODUyIDE1LjIyOC0uMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTE2Ljg1MiAyMC43NzItLjM4My45MjQifV0sWyJwYXRoIix7ZDoibTE5LjE0OCAxNS4yMjguMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTE5LjUzIDIxLjY5Ni0uMzgyLS45MjQifV0sWyJwYXRoIix7ZDoiTTIgNy44MmExNSAxNSAwIDAgMSAyMCAwIn1dLFsicGF0aCIse2Q6Im0yMC43NzIgMTYuODUyLjkyNC0uMzgzIn1dLFsicGF0aCIse2Q6Im0yMC43NzIgMTkuMTQ4LjkyNC4zODMifV0sWyJwYXRoIix7ZDoiTTUgMTEuODU4YTEwIDEwIDAgMCAxIDExLjUtMS43ODUifV0sWyJwYXRoIix7ZDoiTTguNSAxNS40MjlhNSA1IDAgMCAxIDIuNDEzLTEuMzEifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxOCIscjoiMyJ9XV19KTt2YXIgalAsdkRlPW4oKCk9PntqUD1bWyJwYXRoIix7ZDoiTTEyIDIwaC4wMSJ9XSxbInBhdGgiLHtkOiJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIn1dXX0pO3ZhciBXUCx5RGU9bigoKT0+e1dQPVtbInBhdGgiLHtkOiJNMTIgMjBoLjAxIn1dLFsicGF0aCIse2Q6Ik01IDEyLjg1OWExMCAxMCAwIDAgMSAxNCAwIn1dLFsicGF0aCIse2Q6Ik04LjUgMTYuNDI5YTUgNSAwIDAgMSA3IDAifV1dfSk7dmFyIEdQLHdEZT1uKCgpPT57R1A9W1sicGF0aCIse2Q6Ik0xMiAyMGguMDEifV0sWyJwYXRoIix7ZDoiTTguNSAxNi40MjlhNSA1IDAgMCAxIDcgMCJ9XSxbInBhdGgiLHtkOiJNNSAxMi44NTlhMTAgMTAgMCAwIDEgNS4xNy0yLjY5In1dLFsicGF0aCIse2Q6Ik0xOSAxMi44NTlhMTAgMTAgMCAwIDAtMi4wMDctMS41MjMifV0sWyJwYXRoIix7ZDoiTTIgOC44MmExNSAxNSAwIDAgMSA0LjE3Ny0yLjY0MyJ9XSxbInBhdGgiLHtkOiJNMjIgOC44MmExNSAxNSAwIDAgMC0xMS4yODgtMy43NjQifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XV19KTt2YXIgWVAsTURlPW4oKCk9PntZUD1bWyJwYXRoIix7ZDoiTTIgOC44MmExNSAxNSAwIDAgMSAyMCAwIn1dLFsicGF0aCIse2Q6Ik0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoifV0sWyJwYXRoIix7ZDoiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDEwLjUtMi4yMjIifV0sWyJwYXRoIix7ZDoiTTguNSAxNi40MjlhNSA1IDAgMCAxIDMtMS40MDYifV1dfSk7dmFyIFpQLHpEZT1uKCgpPT57WlA9W1sicGF0aCIse2Q6Ik0xMS45NjUgMTAuMTA1djRMMTMuNSAxMi41YTUgNSAwIDAgMSA4IDEuNSJ9XSxbInBhdGgiLHtkOiJNMTEuOTY1IDE0LjEwNWg0In1dLFsicGF0aCIse2Q6Ik0xNy45NjUgMTguMTA1aDRMMjAuNDMgMTkuNzFhNSA1IDAgMCAxLTgtMS41In1dLFsicGF0aCIse2Q6Ik0yIDguODJhMTUgMTUgMCAwIDEgMjAgMCJ9XSxbInBhdGgiLHtkOiJNMjEuOTY1IDIyLjEwNXYtNCJ9XSxbInBhdGgiLHtkOiJNNSAxMi44NmExMCAxMCAwIDAgMSAzLTIuMDMyIn1dLFsicGF0aCIse2Q6Ik04LjUgMTYuNDI5aC4wMSJ9XV19KTt2YXIgWFAsa0RlPW4oKCk9PntYUD1bWyJwYXRoIix7ZDoiTTEyIDIwaC4wMSJ9XV19KTt2YXIgUVAsU0RlPW4oKCk9PntRUD1bWyJwYXRoIix7ZDoiTTEyIDIwaC4wMSJ9XSxbInBhdGgiLHtkOiJNMiA4LjgyYTE1IDE1IDAgMCAxIDIwIDAifV0sWyJwYXRoIix7ZDoiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDE0IDAifV0sWyJwYXRoIix7ZDoiTTguNSAxNi40MjlhNSA1IDAgMCAxIDcgMCJ9XV19KTt2YXIgS1AsQ0RlPW4oKCk9PntLUD1bWyJwYXRoIix7ZDoiTTEwIDJ2OCJ9XSxbInBhdGgiLHtkOiJNMTIuOCAyMS42QTIgMiAwIDEgMCAxNCAxOEgyIn1dLFsicGF0aCIse2Q6Ik0xNy41IDEwYTIuNSAyLjUgMCAxIDEgMiA0SDIifV0sWyJwYXRoIix7ZDoibTYgNiA0IDQgNC00In1dXX0pO3ZhciBKUCxMRGU9bigoKT0+e0pQPVtbInBhdGgiLHtkOiJNMTIuOCAxOS42QTIgMiAwIDEgMCAxNCAxNkgyIn1dLFsicGF0aCIse2Q6Ik0xNy41IDhhMi41IDIuNSAwIDEgMSAyIDRIMiJ9XSxbInBhdGgiLHtkOiJNOS44IDQuNEEyIDIgMCAxIDEgMTEgOEgyIn1dXX0pO3ZhciBlSSxURGU9bigoKT0+e2VJPVtbInBhdGgiLHtkOiJNOCAyMmg4In1dLFsicGF0aCIse2Q6Ik03IDEwaDNtNyAwaC0xLjM0MyJ9XSxbInBhdGgiLHtkOiJNMTIgMTV2NyJ9XSxbInBhdGgiLHtkOiJNNy4zMDcgNy4zMDdBMTIuMzMgMTIuMzMgMCAwIDAgNyAxMGE1IDUgMCAwIDAgNy4zOTEgNC4zOTFNOC42MzggMi45ODFDOC43NSAyLjY2OCA4Ljg3MiAyLjM0IDkgMmg2YzEuNSA0IDIgNiAyIDggMCAuNDA3LS4wNS44MDktLjE0NSAxLjE5OCJ9XSxbImxpbmUiLHt4MToiMiIseDI6IjIyIix5MToiMiIseTI6IjIyIn1dXX0pO3ZhciB0SSxfRGU9bigoKT0+e3RJPVtbInBhdGgiLHtkOiJNOCAyMmg4In1dLFsicGF0aCIse2Q6Ik03IDEwaDEwIn1dLFsicGF0aCIse2Q6Ik0xMiAxNXY3In1dLFsicGF0aCIse2Q6Ik0xMiAxNWE1IDUgMCAwIDAgNS01YzAtMi0uNS00LTItOEg5Yy0xLjUgNC0yIDYtMiA4YTUgNSAwIDAgMCA1IDVaIn1dXX0pO3ZhciBhSSxBRGU9bigoKT0+e2FJPVtbInBhdGgiLHtkOiJtMTkgMTItMS41IDMifV0sWyJwYXRoIix7ZDoiTTE5LjYzIDE4LjgxIDIyIDIwIn1dLFsicGF0aCIse2Q6Ik02LjQ3IDguMjNhMS42OCAxLjY4IDAgMCAxIDIuNDQgMS45M2wtLjY0IDIuMDhhNi43NiA2Ljc2IDAgMCAwIDEwLjE2IDcuNjdsLjQyLS4yN2ExIDEgMCAxIDAtMi43My00LjIxbC0uNDIuMjdhMS43NiAxLjc2IDAgMCAxLTIuNjMtMS45OWwuNjQtMi4wOEE2LjY2IDYuNjYgMCAwIDAgMy45NCAzLjlsLS43LjRhMSAxIDAgMSAwIDIuNTUgNC4zNHoifV1dfSk7dmFyIHJJLCREZT1uKCgpPT57ckk9W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik03IDExdjRhMiAyIDAgMCAwIDIgMmg0In1dLFsicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjgiLHg6IjEzIix5OiIxMyIscng6IjIifV1dfSk7dmFyIGlJLEREZT1uKCgpPT57aUk9W1sicGF0aCIse2Q6Ik0xNC43IDYuM2ExIDEgMCAwIDAgMCAxLjRsMS42IDEuNmExIDEgMCAwIDAgMS40IDBsMy4xMDYtMy4xMDVjLjMyLS4zMjIuODYzLS4yMi45ODMuMjE4YTYgNiAwIDAgMS04LjI1OSA3LjA1N2wtNy45MSA3LjkxYTEgMSAwIDAgMS0yLjk5OS0zbDcuOTEtNy45MWE2IDYgMCAwIDEgNy4wNTctOC4yNTljLjQzOC4xMi41NC42NjIuMjE5Ljk4NHoifV1dfSk7dmFyIG9JLEVEZT1uKCgpPT57b0k9W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgifV0sWyJwYXRoIix7ZDoibTYgNiAxMiAxMiJ9XV19KTt2YXIgc0ksTkRlPW4oKCk9PntzST1bWyJwYXRoIix7ZDoiTTIuNSAxN2EyNC4xMiAyNC4xMiAwIDAgMSAwLTEwIDIgMiAwIDAgMSAxLjQtMS40IDQ5LjU2IDQ5LjU2IDAgMCAxIDE2LjIgMEEyIDIgMCAwIDEgMjEuNSA3YTI0LjEyIDI0LjEyIDAgMCAxIDAgMTAgMiAyIDAgMCAxLTEuNCAxLjQgNDkuNTUgNDkuNTUgMCAwIDEtMTYuMiAwQTIgMiAwIDAgMSAyLjUgMTcifV0sWyJwYXRoIix7ZDoibTEwIDE1IDUtMy01LTN6In1dXX0pO3ZhciBuSSxQRGU9bigoKT0+e25JPVtbInBhdGgiLHtkOiJNMTAuNTEzIDQuODU2IDEzLjEyIDIuMTdhLjUuNSAwIDAgMSAuODYuNDZsLTEuMzc3IDQuMzE3In1dLFsicGF0aCIse2Q6Ik0xNS42NTYgMTBIMjBhMSAxIDAgMCAxIC43OCAxLjYzbC0xLjcyIDEuNzczIn1dLFsicGF0aCIse2Q6Ik0xNi4yNzMgMTYuMjczIDEwLjg4IDIxLjgzYS41LjUgMCAwIDEtLjg2LS40NmwxLjkyLTYuMDJBMSAxIDAgMCAwIDExIDE0SDRhMSAxIDAgMCAxLS43OC0xLjYzbDQuNTA3LTQuNjQzIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV1dfSk7dmFyIGxJLElEZT1uKCgpPT57bEk9W1sicGF0aCIse2Q6Ik00IDE0YTEgMSAwIDAgMS0uNzgtMS42M2w5LjktMTAuMmEuNS41IDAgMCAxIC44Ni40NmwtMS45MiA2LjAyQTEgMSAwIDAgMCAxMyAxMGg3YTEgMSAwIDAgMSAuNzggMS42M2wtOS45IDEwLjJhLjUuNSAwIDAgMS0uODYtLjQ2bDEuOTItNi4wMkExIDEgMCAwIDAgMTEgMTR6In1dXX0pO3ZhciBjSSxGRGU9bigoKT0+e2NJPVtbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiI4In1dLFsibGluZSIse3gxOiIyMSIseDI6IjE2LjY1Iix5MToiMjEiLHkyOiIxNi42NSJ9XSxbImxpbmUiLHt4MToiMTEiLHgyOiIxMSIseTE6IjgiLHkyOiIxNCJ9XSxbImxpbmUiLHt4MToiOCIseDI6IjE0Iix5MToiMTEiLHkyOiIxMSJ9XV19KTt2YXIgZEksT0RlPW4oKCk9PntkST1bWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCJ9XSxbImxpbmUiLHt4MToiMjEiLHgyOiIxNi42NSIseTE6IjIxIix5MjoiMTYuNjUifV0sWyJsaW5lIix7eDE6IjgiLHgyOiIxNCIseTE6IjExIix5MjoiMTEifV1dfSk7dmFyIEhsPXt9O2V0KEhsLHtBQXJyb3dEb3duOigpPT5ONyxBQXJyb3dVcDooKT0+UDcsQUxhcmdlU21hbGw6KCk9Pkk3LEFjY2Vzc2liaWxpdHk6KCk9PkY3LEFjdGl2aXR5OigpPT5PNyxBY3Rpdml0eVNxdWFyZTooKT0+eTMsQWlyVmVudDooKT0+QjcsQWlycGxheTooKT0+UjcsQWxhcm1DaGVjazooKT0+Tm4sQWxhcm1DbG9jazooKT0+cTcsQWxhcm1DbG9ja0NoZWNrOigpPT5ObixBbGFybUNsb2NrTWludXM6KCk9PlBuLEFsYXJtQ2xvY2tPZmY6KCk9Pkg3LEFsYXJtQ2xvY2tQbHVzOigpPT5JbixBbGFybU1pbnVzOigpPT5QbixBbGFybVBsdXM6KCk9PkluLEFsYXJtU21va2U6KCk9PlY3LEFsYnVtOigpPT5VNyxBbGVydENpcmNsZTooKT0+ZjAsQWxlcnRPY3RhZ29uOigpPT5aNCxBbGVydFRyaWFuZ2xlOigpPT5MbCxBbGlnbkNlbnRlcjooKT0+dmwsQWxpZ25DZW50ZXJIb3Jpem9udGFsOigpPT5qNyxBbGlnbkNlbnRlclZlcnRpY2FsOigpPT5XNyxBbGlnbkVuZEhvcml6b250YWw6KCk9Pkc3LEFsaWduRW5kVmVydGljYWw6KCk9Plk3LEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVDZW50ZXI6KCk9Plo3LEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQ6KCk9PlE3LEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVTdGFydDooKT0+WDcsQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlcjooKT0+SzcsQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZDooKT0+SjcsQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0OigpPT5lZixBbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZDooKT0+dGYsQWxpZ25Ib3Jpem9udGFsU3BhY2VCZXR3ZWVuOigpPT5hZixBbGlnbkp1c3RpZnk6KCk9PndsLEFsaWduTGVmdDooKT0+SGksQWxpZ25SaWdodDooKT0+eWwsQWxpZ25TdGFydEhvcml6b250YWw6KCk9PnJmLEFsaWduU3RhcnRWZXJ0aWNhbDooKT0+b2YsQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXI6KCk9PnNmLEFsaWduVmVydGljYWxEaXN0cmlidXRlRW5kOigpPT5uZixBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZVN0YXJ0OigpPT5sZixBbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlcjooKT0+Y2YsQWxpZ25WZXJ0aWNhbEp1c3RpZnlFbmQ6KCk9PmRmLEFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQ6KCk9PmZmLEFsaWduVmVydGljYWxTcGFjZUFyb3VuZDooKT0+dWYsQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbjooKT0+cGYsQW1idWxhbmNlOigpPT5oZixBbXBlcnNhbmQ6KCk9Pm1mLEFtcGVyc2FuZHM6KCk9PmdmLEFtcGhvcmE6KCk9PnhmLEFuY2hvcjooKT0+YmYsQW5ncnk6KCk9PnZmLEFubm95ZWQ6KCk9PnlmLEFudGVubmE6KCk9PndmLEFudmlsOigpPT5NZixBcGVydHVyZTooKT0+emYsQXBwV2luZG93OigpPT5TZixBcHBXaW5kb3dNYWM6KCk9PmtmLEFwcGxlOigpPT5DZixBcmNoaXZlOigpPT5fZixBcmNoaXZlUmVzdG9yZTooKT0+TGYsQXJjaGl2ZVg6KCk9PlRmLEFyZWFDaGFydDooKT0+UW4sQXJtY2hhaXI6KCk9PkFmLEFycm93QmlnRG93bjooKT0+RGYsQXJyb3dCaWdEb3duRGFzaDooKT0+JGYsQXJyb3dCaWdMZWZ0OigpPT5OZixBcnJvd0JpZ0xlZnREYXNoOigpPT5FZixBcnJvd0JpZ1JpZ2h0OigpPT5JZixBcnJvd0JpZ1JpZ2h0RGFzaDooKT0+UGYsQXJyb3dCaWdVcDooKT0+T2YsQXJyb3dCaWdVcERhc2g6KCk9PkZmLEFycm93RG93bjooKT0+WWYsQXJyb3dEb3duMDE6KCk9PkJmLEFycm93RG93bjEwOigpPT5SZixBcnJvd0Rvd25BWjooKT0+Rm4sQXJyb3dEb3duQXo6KCk9PkZuLEFycm93RG93bkNpcmNsZTooKT0+dTAsQXJyb3dEb3duRnJvbUxpbmU6KCk9PkhmLEFycm93RG93bkxlZnQ6KCk9PnFmLEFycm93RG93bkxlZnRGcm9tQ2lyY2xlOigpPT5oMCxBcnJvd0Rvd25MZWZ0RnJvbVNxdWFyZTooKT0+UzMsQXJyb3dEb3duTGVmdFNxdWFyZTooKT0+dzMsQXJyb3dEb3duTmFycm93V2lkZTooKT0+amYsQXJyb3dEb3duUmlnaHQ6KCk9PlZmLEFycm93RG93blJpZ2h0RnJvbUNpcmNsZTooKT0+bTAsQXJyb3dEb3duUmlnaHRGcm9tU3F1YXJlOigpPT5DMyxBcnJvd0Rvd25SaWdodFNxdWFyZTooKT0+TTMsQXJyb3dEb3duU3F1YXJlOigpPT56MyxBcnJvd0Rvd25Ub0RvdDooKT0+VWYsQXJyb3dEb3duVG9MaW5lOigpPT5XZixBcnJvd0Rvd25VcDooKT0+R2YsQXJyb3dEb3duV2lkZU5hcnJvdzooKT0+T24sQXJyb3dEb3duWkE6KCk9PkJuLEFycm93RG93blphOigpPT5CbixBcnJvd0xlZnQ6KCk9PktmLEFycm93TGVmdENpcmNsZTooKT0+cDAsQXJyb3dMZWZ0RnJvbUxpbmU6KCk9PlhmLEFycm93TGVmdFJpZ2h0OigpPT5aZixBcnJvd0xlZnRTcXVhcmU6KCk9PmszLEFycm93TGVmdFRvTGluZTooKT0+UWYsQXJyb3dSaWdodDooKT0+YXUsQXJyb3dSaWdodENpcmNsZTooKT0+YjAsQXJyb3dSaWdodEZyb21MaW5lOigpPT5KZixBcnJvd1JpZ2h0TGVmdDooKT0+ZXUsQXJyb3dSaWdodFNxdWFyZTooKT0+XzMsQXJyb3dSaWdodFRvTGluZTooKT0+dHUsQXJyb3dVcDooKT0+dXUsQXJyb3dVcDAxOigpPT5ydSxBcnJvd1VwMTA6KCk9Pml1LEFycm93VXBBWjooKT0+Um4sQXJyb3dVcEF6OigpPT5SbixBcnJvd1VwQ2lyY2xlOigpPT52MCxBcnJvd1VwRG93bjooKT0+b3UsQXJyb3dVcEZyb21Eb3Q6KCk9PnN1LEFycm93VXBGcm9tTGluZTooKT0+bnUsQXJyb3dVcExlZnQ6KCk9Pmx1LEFycm93VXBMZWZ0RnJvbUNpcmNsZTooKT0+ZzAsQXJyb3dVcExlZnRGcm9tU3F1YXJlOigpPT5MMyxBcnJvd1VwTGVmdFNxdWFyZTooKT0+QTMsQXJyb3dVcE5hcnJvd1dpZGU6KCk9PkhuLEFycm93VXBSaWdodDooKT0+Y3UsQXJyb3dVcFJpZ2h0RnJvbUNpcmNsZTooKT0+eDAsQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTooKT0+VDMsQXJyb3dVcFJpZ2h0U3F1YXJlOigpPT4kMyxBcnJvd1VwU3F1YXJlOigpPT5EMyxBcnJvd1VwVG9MaW5lOigpPT5kdSxBcnJvd1VwV2lkZU5hcnJvdzooKT0+ZnUsQXJyb3dVcFpBOigpPT5xbixBcnJvd1VwWmE6KCk9PnFuLEFycm93c1VwRnJvbUxpbmU6KCk9PnB1LEFzdGVyaXNrOigpPT5odSxBc3Rlcmlza1NxdWFyZTooKT0+RTMsQXRTaWduOigpPT5tdSxBdG9tOigpPT5ndSxBdWRpb0xpbmVzOigpPT54dSxBdWRpb1dhdmVmb3JtOigpPT52dSxBd2FyZDooKT0+YnUsQXhlOigpPT55dSxBeGlzM0Q6KCk9PlZuLEF4aXMzZDooKT0+Vm4sQmFieTooKT0+d3UsQmFja3BhY2s6KCk9Pk11LEJhZGdlOigpPT5PdSxCYWRnZUFsZXJ0OigpPT56dSxCYWRnZUNlbnQ6KCk9Pmt1LEJhZGdlQ2hlY2s6KCk9PlVuLEJhZGdlRG9sbGFyU2lnbjooKT0+U3UsQmFkZ2VFdXJvOigpPT5DdSxCYWRnZUhlbHA6KCk9PmpuLEJhZGdlSW5kaWFuUnVwZWU6KCk9Pkx1LEJhZGdlSW5mbzooKT0+VHUsQmFkZ2VKYXBhbmVzZVllbjooKT0+X3UsQmFkZ2VNaW51czooKT0+QXUsQmFkZ2VQZXJjZW50OigpPT4kdSxCYWRnZVBsdXM6KCk9PkR1LEJhZGdlUG91bmRTdGVybGluZzooKT0+RXUsQmFkZ2VRdWVzdGlvbk1hcms6KCk9PmpuLEJhZGdlUnVzc2lhblJ1YmxlOigpPT5OdSxCYWRnZVN3aXNzRnJhbmM6KCk9PlB1LEJhZGdlVHVya2lzaExpcmE6KCk9Pkl1LEJhZGdlWDooKT0+RnUsQmFnZ2FnZUNsYWltOigpPT5CdSxCYWxsb29uOigpPT5SdSxCYW46KCk9Pkh1LEJhbmFuYTooKT0+cXUsQmFuZGFnZTooKT0+VnUsQmFua25vdGU6KCk9Pkd1LEJhbmtub3RlQXJyb3dEb3duOigpPT5VdSxCYW5rbm90ZUFycm93VXA6KCk9Pmp1LEJhbmtub3RlWDooKT0+V3UsQmFyQ2hhcnQ6KCk9Pm8wLEJhckNoYXJ0MjooKT0+czAsQmFyQ2hhcnQzOigpPT5yMCxCYXJDaGFydDQ6KCk9PmEwLEJhckNoYXJ0QmlnOigpPT50MCxCYXJDaGFydEhvcml6b250YWw6KCk9PkpuLEJhckNoYXJ0SG9yaXpvbnRhbEJpZzooKT0+S24sQmFyY29kZTooKT0+WXUsQmFycmVsOigpPT5adSxCYXNlbGluZTooKT0+WHUsQmF0aDooKT0+UXUsQmF0dGVyeTooKT0+aXAsQmF0dGVyeUNoYXJnaW5nOigpPT5LdSxCYXR0ZXJ5RnVsbDooKT0+SnUsQmF0dGVyeUxvdzooKT0+ZXAsQmF0dGVyeU1lZGl1bTooKT0+YXAsQmF0dGVyeVBsdXM6KCk9PnRwLEJhdHRlcnlXYXJuaW5nOigpPT5ycCxCZWFrZXI6KCk9Pm9wLEJlYW46KCk9Pm5wLEJlYW5PZmY6KCk9PnNwLEJlZDooKT0+ZHAsQmVkRG91YmxlOigpPT5scCxCZWRTaW5nbGU6KCk9PmNwLEJlZWY6KCk9PmZwLEJlZXI6KCk9PnBwLEJlZXJPZmY6KCk9PnVwLEJlbGw6KCk9PnlwLEJlbGxEb3Q6KCk9PmhwLEJlbGxFbGVjdHJpYzooKT0+bXAsQmVsbE1pbnVzOigpPT5ncCxCZWxsT2ZmOigpPT54cCxCZWxsUGx1czooKT0+YnAsQmVsbFJpbmc6KCk9PnZwLEJldHdlZW5Ib3Jpem9uYWxFbmQ6KCk9PlduLEJldHdlZW5Ib3Jpem9uYWxTdGFydDooKT0+R24sQmV0d2Vlbkhvcml6b250YWxFbmQ6KCk9PlduLEJldHdlZW5Ib3Jpem9udGFsU3RhcnQ6KCk9PkduLEJldHdlZW5WZXJ0aWNhbEVuZDooKT0+d3AsQmV0d2VlblZlcnRpY2FsU3RhcnQ6KCk9Pk1wLEJpY2Vwc0ZsZXhlZDooKT0+enAsQmlrZTooKT0+a3AsQmluYXJ5OigpPT5TcCxCaW5vY3VsYXJzOigpPT5McCxCaW9oYXphcmQ6KCk9PkNwLEJpcmQ6KCk9Pl9wLEJpcmRob3VzZTooKT0+VHAsQml0Y29pbjooKT0+QXAsQmxlbmQ6KCk9PiRwLEJsaW5kczooKT0+RHAsQmxvY2tzOigpPT5FcCxCbHVldG9vdGg6KCk9PkZwLEJsdWV0b290aENvbm5lY3RlZDooKT0+TnAsQmx1ZXRvb3RoT2ZmOigpPT5QcCxCbHVldG9vdGhTZWFyY2hpbmc6KCk9PklwLEJvbGQ6KCk9Pk9wLEJvbHQ6KCk9PkJwLEJvbWI6KCk9PlJwLEJvbmU6KCk9PkhwLEJvb2s6KCk9PnU5LEJvb2tBOigpPT5xcCxCb29rQWxlcnQ6KCk9PlZwLEJvb2tBdWRpbzooKT0+VXAsQm9va0NoZWNrOigpPT5qcCxCb29rQ29weTooKT0+V3AsQm9va0Rhc2hlZDooKT0+WW4sQm9va0Rvd246KCk9PkdwLEJvb2tIZWFkcGhvbmVzOigpPT5ZcCxCb29rSGVhcnQ6KCk9PlpwLEJvb2tJbWFnZTooKT0+UXAsQm9va0tleTooKT0+WHAsQm9va0xvY2s6KCk9PktwLEJvb2tNYXJrZWQ6KCk9PkpwLEJvb2tNaW51czooKT0+ZTksQm9va09wZW46KCk9PnI5LEJvb2tPcGVuQ2hlY2s6KCk9PnQ5LEJvb2tPcGVuVGV4dDooKT0+YTksQm9va1BsdXM6KCk9Pmk5LEJvb2tTZWFyY2g6KCk9Pm85LEJvb2tUZW1wbGF0ZTooKT0+WW4sQm9va1RleHQ6KCk9PnM5LEJvb2tUeXBlOigpPT5sOSxCb29rVXA6KCk9Pm45LEJvb2tVcDI6KCk9PmM5LEJvb2tVc2VyOigpPT5kOSxCb29rWDooKT0+ZjksQm9va21hcms6KCk9Png5LEJvb2ttYXJrQ2hlY2s6KCk9PnA5LEJvb2ttYXJrTWludXM6KCk9Pmg5LEJvb2ttYXJrUGx1czooKT0+bTksQm9va21hcmtYOigpPT5nOSxCb29tQm94OigpPT5iOSxCb3Q6KCk9Pnc5LEJvdE1lc3NhZ2VTcXVhcmU6KCk9PnY5LEJvdE9mZjooKT0+eTksQm90dGxlV2luZTooKT0+TTksQm93QXJyb3c6KCk9Pno5LEJveDooKT0+azksQm94U2VsZWN0OigpPT5VMyxCb3hlczooKT0+UzksQnJhY2VzOigpPT5abixCcmFja2V0czooKT0+QzksQnJhaW46KCk9Pl85LEJyYWluQ2lyY3VpdDooKT0+TDksQnJhaW5Db2c6KCk9PlQ5LEJyaWNrV2FsbDooKT0+RDksQnJpY2tXYWxsRmlyZTooKT0+QTksQnJpY2tXYWxsU2hpZWxkOigpPT4kOSxCcmllZmNhc2U6KCk9Pkk5LEJyaWVmY2FzZUJ1c2luZXNzOigpPT5FOSxCcmllZmNhc2VDb252ZXlvckJlbHQ6KCk9Pk45LEJyaWVmY2FzZU1lZGljYWw6KCk9PlA5LEJyaW5nVG9Gcm9udDooKT0+RjksQnJ1c2g6KCk9PkI5LEJydXNoQ2xlYW5pbmc6KCk9Pk85LEJ1YmJsZXM6KCk9PlI5LEJ1ZzooKT0+VjksQnVnT2ZmOigpPT5IOSxCdWdQbGF5OigpPT5xOSxCdWlsZGluZzooKT0+ajksQnVpbGRpbmcyOigpPT5VOSxCdXM6KCk9Pkc5LEJ1c0Zyb250OigpPT5XOSxDYWJsZTooKT0+WjksQ2FibGVDYXI6KCk9Plk5LENha2U6KCk9PlE5LENha2VTbGljZTooKT0+WDksQ2FsY3VsYXRvcjooKT0+SzksQ2FsZW5kYXI6KCk9PnZoLENhbGVuZGFyMTooKT0+SjksQ2FsZW5kYXJBcnJvd0Rvd246KCk9PmVoLENhbGVuZGFyQXJyb3dVcDooKT0+dGgsQ2FsZW5kYXJDaGVjazooKT0+cmgsQ2FsZW5kYXJDaGVjazI6KCk9PmFoLENhbGVuZGFyQ2xvY2s6KCk9Pm9oLENhbGVuZGFyQ29nOigpPT5paCxDYWxlbmRhckRheXM6KCk9PnNoLENhbGVuZGFyRm9sZDooKT0+bmgsQ2FsZW5kYXJIZWFydDooKT0+bGgsQ2FsZW5kYXJNaW51czooKT0+ZGgsQ2FsZW5kYXJNaW51czI6KCk9PmNoLENhbGVuZGFyT2ZmOigpPT5maCxDYWxlbmRhclBsdXM6KCk9PnBoLENhbGVuZGFyUGx1czI6KCk9PnVoLENhbGVuZGFyUmFuZ2U6KCk9PmhoLENhbGVuZGFyU2VhcmNoOigpPT5taCxDYWxlbmRhclN5bmM6KCk9PmdoLENhbGVuZGFyWDooKT0+YmgsQ2FsZW5kYXJYMjooKT0+eGgsQ2FsZW5kYXJzOigpPT55aCxDYW1lcmE6KCk9Pk1oLENhbWVyYU9mZjooKT0+d2gsQ2FuZGxlc3RpY2tDaGFydDooKT0+ZTAsQ2FuZHk6KCk9PlNoLENhbmR5Q2FuZTooKT0+emgsQ2FuZHlPZmY6KCk9PmtoLENhbm5hYmlzOigpPT5MaCxDYW5uYWJpc09mZjooKT0+Q2gsQ2FwdGlvbnM6KCk9PlhuLENhcHRpb25zT2ZmOigpPT5UaCxDYXI6KCk9PiRoLENhckZyb250OigpPT5faCxDYXJUYXhpRnJvbnQ6KCk9PkFoLENhcmF2YW46KCk9PkRoLENhcmRTaW06KCk9PkVoLENhcnJvdDooKT0+TmgsQ2FzZUxvd2VyOigpPT5QaCxDYXNlU2Vuc2l0aXZlOigpPT5JaCxDYXNlVXBwZXI6KCk9PkZoLENhc3NldHRlVGFwZTooKT0+T2gsQ2FzdDooKT0+QmgsQ2FzdGxlOigpPT5SaCxDYXQ6KCk9PkhoLENjdHY6KCk9PnFoLENoYXJ0QXJlYTooKT0+UW4sQ2hhcnRCYXI6KCk9PkpuLENoYXJ0QmFyQmlnOigpPT5LbixDaGFydEJhckRlY3JlYXNpbmc6KCk9PlZoLENoYXJ0QmFySW5jcmVhc2luZzooKT0+VWgsQ2hhcnRCYXJTdGFja2VkOigpPT5qaCxDaGFydENhbmRsZXN0aWNrOigpPT5lMCxDaGFydENvbHVtbjooKT0+cjAsQ2hhcnRDb2x1bW5CaWc6KCk9PnQwLENoYXJ0Q29sdW1uRGVjcmVhc2luZzooKT0+V2gsQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOigpPT5hMCxDaGFydENvbHVtblN0YWNrZWQ6KCk9PkdoLENoYXJ0R2FudHQ6KCk9PlloLENoYXJ0TGluZTooKT0+aTAsQ2hhcnROZXR3b3JrOigpPT5aaCxDaGFydE5vQXhlc0NvbHVtbjooKT0+czAsQ2hhcnROb0F4ZXNDb2x1bW5EZWNyZWFzaW5nOigpPT5YaCxDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmc6KCk9Pm8wLENoYXJ0Tm9BeGVzQ29tYmluZWQ6KCk9PlFoLENoYXJ0Tm9BeGVzR2FudHQ6KCk9Pm4wLENoYXJ0UGllOigpPT5sMCxDaGFydFNjYXR0ZXI6KCk9PmMwLENoYXJ0U3BsaW5lOigpPT5LaCxDaGVjazooKT0+dG0sQ2hlY2tDaGVjazooKT0+SmgsQ2hlY2tDaXJjbGU6KCk9PncwLENoZWNrQ2lyY2xlMjooKT0+eTAsQ2hlY2tMaW5lOigpPT5lbSxDaGVja1NxdWFyZTooKT0+STMsQ2hlY2tTcXVhcmUyOigpPT5QMyxDaGVmSGF0OigpPT5hbSxDaGVycnk6KCk9PnJtLENoZXNzQmlzaG9wOigpPT5pbSxDaGVzc0tpbmc6KCk9Pm9tLENoZXNzS25pZ2h0OigpPT5zbSxDaGVzc1Bhd246KCk9Pm5tLENoZXNzUXVlZW46KCk9PmxtLENoZXNzUm9vazooKT0+Zm0sQ2hldnJvbkRvd246KCk9PmNtLENoZXZyb25Eb3duQ2lyY2xlOigpPT5NMCxDaGV2cm9uRG93blNxdWFyZTooKT0+RjMsQ2hldnJvbkZpcnN0OigpPT5kbSxDaGV2cm9uTGFzdDooKT0+dW0sQ2hldnJvbkxlZnQ6KCk9PnBtLENoZXZyb25MZWZ0Q2lyY2xlOigpPT56MCxDaGV2cm9uTGVmdFNxdWFyZTooKT0+TzMsQ2hldnJvblJpZ2h0OigpPT5obSxDaGV2cm9uUmlnaHRDaXJjbGU6KCk9PmswLENoZXZyb25SaWdodFNxdWFyZTooKT0+QjMsQ2hldnJvblVwOigpPT5tbSxDaGV2cm9uVXBDaXJjbGU6KCk9PlMwLENoZXZyb25VcFNxdWFyZTooKT0+UjMsQ2hldnJvbnNEb3duOigpPT54bSxDaGV2cm9uc0Rvd25VcDooKT0+Z20sQ2hldnJvbnNMZWZ0OigpPT55bSxDaGV2cm9uc0xlZnRSaWdodDooKT0+dm0sQ2hldnJvbnNMZWZ0UmlnaHRFbGxpcHNpczooKT0+Ym0sQ2hldnJvbnNSaWdodDooKT0+TW0sQ2hldnJvbnNSaWdodExlZnQ6KCk9PndtLENoZXZyb25zVXA6KCk9PmttLENoZXZyb25zVXBEb3duOigpPT56bSxDaHJvbWU6KCk9PmQwLENocm9taXVtOigpPT5kMCxDaHVyY2g6KCk9PlNtLENpZ2FyZXR0ZTooKT0+TG0sQ2lnYXJldHRlT2ZmOigpPT5DbSxDaXJjbGU6KCk9PnFtLENpcmNsZUFsZXJ0OigpPT5mMCxDaXJjbGVBcnJvd0Rvd246KCk9PnUwLENpcmNsZUFycm93TGVmdDooKT0+cDAsQ2lyY2xlQXJyb3dPdXREb3duTGVmdDooKT0+aDAsQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQ6KCk9Pm0wLENpcmNsZUFycm93T3V0VXBMZWZ0OigpPT5nMCxDaXJjbGVBcnJvd091dFVwUmlnaHQ6KCk9PngwLENpcmNsZUFycm93UmlnaHQ6KCk9PmIwLENpcmNsZUFycm93VXA6KCk9PnYwLENpcmNsZUNoZWNrOigpPT55MCxDaXJjbGVDaGVja0JpZzooKT0+dzAsQ2lyY2xlQ2hldnJvbkRvd246KCk9Pk0wLENpcmNsZUNoZXZyb25MZWZ0OigpPT56MCxDaXJjbGVDaGV2cm9uUmlnaHQ6KCk9PmswLENpcmNsZUNoZXZyb25VcDooKT0+UzAsQ2lyY2xlRGFzaGVkOigpPT5UbSxDaXJjbGVEaXZpZGU6KCk9PkMwLENpcmNsZURvbGxhclNpZ246KCk9Pl9tLENpcmNsZURvdDooKT0+JG0sQ2lyY2xlRG90RGFzaGVkOigpPT5BbSxDaXJjbGVFbGxpcHNpczooKT0+RG0sQ2lyY2xlRXF1YWw6KCk9PkVtLENpcmNsZUZhZGluZ0Fycm93VXA6KCk9Pk5tLENpcmNsZUZhZGluZ1BsdXM6KCk9PlBtLENpcmNsZUdhdWdlOigpPT5MMCxDaXJjbGVIZWxwOigpPT5OaSxDaXJjbGVNaW51czooKT0+VDAsQ2lyY2xlT2ZmOigpPT5JbSxDaXJjbGVQYXJraW5nOigpPT5BMCxDaXJjbGVQYXJraW5nT2ZmOigpPT5fMCxDaXJjbGVQYXVzZTooKT0+JDAsQ2lyY2xlUGVyY2VudDooKT0+RDAsQ2lyY2xlUGlsZTooKT0+Rm0sQ2lyY2xlUGxheTooKT0+RTAsQ2lyY2xlUGx1czooKT0+TjAsQ2lyY2xlUG91bmRTdGVybGluZzooKT0+T20sQ2lyY2xlUG93ZXI6KCk9PlAwLENpcmNsZVF1ZXN0aW9uTWFyazooKT0+TmksQ2lyY2xlU2xhc2g6KCk9PkJtLENpcmNsZVNsYXNoMjooKT0+STAsQ2lyY2xlU2xhc2hlZDooKT0+STAsQ2lyY2xlU21hbGw6KCk9PlJtLENpcmNsZVN0YXI6KCk9PkhtLENpcmNsZVN0b3A6KCk9PkYwLENpcmNsZVVzZXI6KCk9PkIwLENpcmNsZVVzZXJSb3VuZDooKT0+TzAsQ2lyY2xlWDooKT0+UjAsQ2lyY3VpdEJvYXJkOigpPT5WbSxDaXRydXM6KCk9PlVtLENsYXBwZXJib2FyZDooKT0+am0sQ2xpcGJvYXJkOigpPT50ZyxDbGlwYm9hcmRDaGVjazooKT0+V20sQ2xpcGJvYXJkQ2xvY2s6KCk9PkdtLENsaXBib2FyZENvcHk6KCk9PlltLENsaXBib2FyZEVkaXQ6KCk9PnEwLENsaXBib2FyZExpc3Q6KCk9PlptLENsaXBib2FyZE1pbnVzOigpPT5YbSxDbGlwYm9hcmRQYXN0ZTooKT0+UW0sQ2xpcGJvYXJkUGVuOigpPT5xMCxDbGlwYm9hcmRQZW5MaW5lOigpPT5IMCxDbGlwYm9hcmRQbHVzOigpPT5LbSxDbGlwYm9hcmRTaWduYXR1cmU6KCk9PkgwLENsaXBib2FyZFR5cGU6KCk9PkptLENsaXBib2FyZFg6KCk9PmVnLENsb2NrOigpPT55ZyxDbG9jazE6KCk9PmFnLENsb2NrMTA6KCk9PnJnLENsb2NrMTE6KCk9PmlnLENsb2NrMTI6KCk9Pm9nLENsb2NrMjooKT0+c2csQ2xvY2szOigpPT5uZyxDbG9jazQ6KCk9PmxnLENsb2NrNTooKT0+Y2csQ2xvY2s2OigpPT5kZyxDbG9jazc6KCk9PmZnLENsb2NrODooKT0+dWcsQ2xvY2s5OigpPT5wZyxDbG9ja0FsZXJ0OigpPT5oZyxDbG9ja0Fycm93RG93bjooKT0+bWcsQ2xvY2tBcnJvd1VwOigpPT5nZyxDbG9ja0NoZWNrOigpPT54ZyxDbG9ja0ZhZGluZzooKT0+YmcsQ2xvY2tQbHVzOigpPT52ZyxDbG9zZWRDYXB0aW9uOigpPT53ZyxDbG91ZDooKT0+QmcsQ2xvdWRBbGVydDooKT0+TWcsQ2xvdWRCYWNrdXA6KCk9PnpnLENsb3VkQ2hlY2s6KCk9PmtnLENsb3VkQ29nOigpPT5TZyxDbG91ZERvd25sb2FkOigpPT5WMCxDbG91ZERyaXp6bGU6KCk9PkNnLENsb3VkRm9nOigpPT5MZyxDbG91ZEhhaWw6KCk9PlRnLENsb3VkTGlnaHRuaW5nOigpPT5fZyxDbG91ZE1vb246KCk9PiRnLENsb3VkTW9vblJhaW46KCk9PkFnLENsb3VkT2ZmOigpPT5FZyxDbG91ZFJhaW46KCk9Pk5nLENsb3VkUmFpbldpbmQ6KCk9PkRnLENsb3VkU25vdzooKT0+UGcsQ2xvdWRTdW46KCk9PkZnLENsb3VkU3VuUmFpbjooKT0+SWcsQ2xvdWRTeW5jOigpPT5PZyxDbG91ZFVwbG9hZDooKT0+VTAsQ2xvdWR5OigpPT5SZyxDbG92ZXI6KCk9PkhnLENsdWI6KCk9PnFnLENvZGU6KCk9PlZnLENvZGUyOigpPT5qMCxDb2RlU3F1YXJlOigpPT5IMyxDb2RlWG1sOigpPT5qMCxDb2RlcGVuOigpPT5VZyxDb2Rlc2FuZGJveDooKT0+amcsQ29mZmVlOigpPT5XZyxDb2c6KCk9PllnLENvaW5zOigpPT5HZyxDb2x1bW5zOigpPT5XMCxDb2x1bW5zMjooKT0+VzAsQ29sdW1uczM6KCk9PkcwLENvbHVtbnMzQ29nOigpPT5QaSxDb2x1bW5zNDooKT0+WmcsQ29sdW1uc1NldHRpbmdzOigpPT5QaSxDb21iaW5lOigpPT5YZyxDb21tYW5kOigpPT5RZyxDb21wYXNzOigpPT5LZyxDb21wb25lbnQ6KCk9PkpnLENvbXB1dGVyOigpPT5leCxDb25jaWVyZ2VCZWxsOigpPT50eCxDb25lOigpPT5heCxDb25zdHJ1Y3Rpb246KCk9PnJ4LENvbnRhY3Q6KCk9Pml4LENvbnRhY3QyOigpPT5ZMCxDb250YWN0Um91bmQ6KCk9PlkwLENvbnRhaW5lcjooKT0+b3gsQ29udHJhc3Q6KCk9PnN4LENvb2tpZTooKT0+bngsQ29va2luZ1BvdDooKT0+bHgsQ29weTooKT0+cHgsQ29weUNoZWNrOigpPT5jeCxDb3B5TWludXM6KCk9PmR4LENvcHlQbHVzOigpPT5meCxDb3B5U2xhc2g6KCk9PnV4LENvcHlYOigpPT5oeCxDb3B5bGVmdDooKT0+bXgsQ29weXJpZ2h0OigpPT5neCxDb3JuZXJEb3duTGVmdDooKT0+YngsQ29ybmVyRG93blJpZ2h0OigpPT54eCxDb3JuZXJMZWZ0RG93bjooKT0+dngsQ29ybmVyTGVmdFVwOigpPT55eCxDb3JuZXJSaWdodERvd246KCk9Pnd4LENvcm5lclJpZ2h0VXA6KCk9Pk14LENvcm5lclVwTGVmdDooKT0+engsQ29ybmVyVXBSaWdodDooKT0+a3gsQ3B1OigpPT5TeCxDcmVhdGl2ZUNvbW1vbnM6KCk9PkN4LENyZWRpdENhcmQ6KCk9Pkx4LENyb2lzc2FudDooKT0+VHgsQ3JvcDooKT0+X3gsQ3Jvc3M6KCk9PkF4LENyb3NzaGFpcjooKT0+JHgsQ3Jvd246KCk9PkR4LEN1Ym9pZDooKT0+RXgsQ3VwU29kYTooKT0+TngsQ3VybHlCcmFjZXM6KCk9PlpuLEN1cnJlbmN5OigpPT5QeCxDeWxpbmRlcjooKT0+SXgsRGFtOigpPT5GeCxEYXRhYmFzZTooKT0+UngsRGF0YWJhc2VCYWNrdXA6KCk9Pk94LERhdGFiYXNlWmFwOigpPT5CeCxEZWNpbWFsc0Fycm93TGVmdDooKT0+SHgsRGVjaW1hbHNBcnJvd1JpZ2h0OigpPT5xeCxEZWxldGU6KCk9PlZ4LERlc3NlcnQ6KCk9PlV4LERpYW1ldGVyOigpPT5qeCxEaWFtb25kOigpPT5aeCxEaWFtb25kTWludXM6KCk9Pld4LERpYW1vbmRQZXJjZW50OigpPT5aMCxEaWFtb25kUGx1czooKT0+R3gsRGljZTE6KCk9Pll4LERpY2UyOigpPT5YeCxEaWNlMzooKT0+UXgsRGljZTQ6KCk9PmViLERpY2U1OigpPT5LeCxEaWNlNjooKT0+SngsRGljZXM6KCk9PnRiLERpZmY6KCk9PmFiLERpc2M6KCk9PnNiLERpc2MyOigpPT5yYixEaXNjMzooKT0+aWIsRGlzY0FsYnVtOigpPT5vYixEaXZpZGU6KCk9Pm5iLERpdmlkZUNpcmNsZTooKT0+QzAsRGl2aWRlU3F1YXJlOigpPT5qMyxEbmE6KCk9PmRiLERuYU9mZjooKT0+bGIsRG9jazooKT0+Y2IsRG9nOigpPT5mYixEb2xsYXJTaWduOigpPT51YixEb251dDooKT0+cGIsRG9vckNsb3NlZDooKT0+bWIsRG9vckNsb3NlZExvY2tlZDooKT0+aGIsRG9vck9wZW46KCk9PnhiLERvdDooKT0+Z2IsRG90U3F1YXJlOigpPT5XMyxEb3dubG9hZDooKT0+YmIsRG93bmxvYWRDbG91ZDooKT0+VjAsRHJhZnRpbmdDb21wYXNzOigpPT52YixEcmFtYTooKT0+eWIsRHJpYmJibGU6KCk9PndiLERyaWxsOigpPT5NYixEcm9uZTooKT0+emIsRHJvcGxldDooKT0+U2IsRHJvcGxldE9mZjooKT0+a2IsRHJvcGxldHM6KCk9PkNiLERydW06KCk9PkxiLERydW1zdGljazooKT0+VGIsRHVtYmJlbGw6KCk9Pl9iLEVhcjooKT0+JGIsRWFyT2ZmOigpPT5BYixFYXJ0aDooKT0+WDAsRWFydGhMb2NrOigpPT5EYixFY2xpcHNlOigpPT5FYixFZGl0OigpPT5hcixFZGl0MjooKT0+bDMsRWRpdDM6KCk9Pm4zLEVnZzooKT0+SWIsRWdnRnJpZWQ6KCk9Pk5iLEVnZ09mZjooKT0+UGIsRWxsaXBzaXM6KCk9PkswLEVsbGlwc2lzVmVydGljYWw6KCk9PlEwLEVxdWFsOigpPT5SYixFcXVhbEFwcHJveGltYXRlbHk6KCk9PkZiLEVxdWFsTm90OigpPT5PYixFcXVhbFNxdWFyZTooKT0+RzMsRXJhc2VyOigpPT5CYixFdGhlcm5ldFBvcnQ6KCk9PkhiLEV1cm86KCk9PnFiLEV2Q2hhcmdlcjooKT0+VmIsRXhwYW5kOigpPT5qYixFeHRlcm5hbExpbms6KCk9PlViLEV5ZTooKT0+WWIsRXllQ2xvc2VkOigpPT5XYixFeWVPZmY6KCk9PkdiLEZhY2Vib29rOigpPT5YYixGYWN0b3J5OigpPT5aYixGYW46KCk9PlFiLEZhc3RGb3J3YXJkOigpPT5LYixGZWF0aGVyOigpPT5KYixGZW5jZTooKT0+ZXYsRmVycmlzV2hlZWw6KCk9PnR2LEZpZ21hOigpPT5hdixGaWxlOigpPT4kdixGaWxlQXJjaGl2ZTooKT0+cnYsRmlsZUF1ZGlvOigpPT5JaSxGaWxlQXVkaW8yOigpPT5JaSxGaWxlQXhpczNEOigpPT5KMCxGaWxlQXhpczNkOigpPT5KMCxGaWxlQmFkZ2U6KCk9PmU0LEZpbGVCYWRnZTI6KCk9PmU0LEZpbGVCYXJDaGFydDooKT0+cjQsRmlsZUJhckNoYXJ0MjooKT0+aTQsRmlsZUJveDooKT0+aXYsRmlsZUJyYWNlczooKT0+YTQsRmlsZUJyYWNlc0Nvcm5lcjooKT0+dDQsRmlsZUNoYXJ0Q29sdW1uOigpPT5pNCxGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOigpPT5yNCxGaWxlQ2hhcnRMaW5lOigpPT5vNCxGaWxlQ2hhcnRQaWU6KCk9PnM0LEZpbGVDaGVjazooKT0+b3YsRmlsZUNoZWNrMjooKT0+bjQsRmlsZUNoZWNrQ29ybmVyOigpPT5uNCxGaWxlQ2xvY2s6KCk9PnN2LEZpbGVDb2RlOigpPT5udixGaWxlQ29kZTI6KCk9Pmw0LEZpbGVDb2RlQ29ybmVyOigpPT5sNCxGaWxlQ29nOigpPT5jNCxGaWxlQ29nMjooKT0+YzQsRmlsZURpZmY6KCk9Pmx2LEZpbGVEaWdpdDooKT0+Y3YsRmlsZURvd246KCk9PmR2LEZpbGVFZGl0OigpPT5tNCxGaWxlRXhjbGFtYXRpb25Qb2ludDooKT0+ZDQsRmlsZUhlYWRwaG9uZTooKT0+SWksRmlsZUhlYXJ0OigpPT5mdixGaWxlSW1hZ2U6KCk9PnV2LEZpbGVJbnB1dDooKT0+cHYsRmlsZUpzb246KCk9PmE0LEZpbGVKc29uMjooKT0+dDQsRmlsZUtleTooKT0+ZjQsRmlsZUtleTI6KCk9PmY0LEZpbGVMaW5lQ2hhcnQ6KCk9Pm80LEZpbGVMb2NrOigpPT51NCxGaWxlTG9jazI6KCk9PnU0LEZpbGVNaW51czooKT0+bXYsRmlsZU1pbnVzMjooKT0+cDQsRmlsZU1pbnVzQ29ybmVyOigpPT5wNCxGaWxlTXVzaWM6KCk9Pmh2LEZpbGVPdXRwdXQ6KCk9Pmd2LEZpbGVQZW46KCk9Pm00LEZpbGVQZW5MaW5lOigpPT5oNCxGaWxlUGllQ2hhcnQ6KCk9PnM0LEZpbGVQbGF5OigpPT5nNCxGaWxlUGx1czooKT0+eHYsRmlsZVBsdXMyOigpPT5iNCxGaWxlUGx1c0Nvcm5lcjooKT0+YjQsRmlsZVF1ZXN0aW9uOigpPT54NCxGaWxlUXVlc3Rpb25NYXJrOigpPT54NCxGaWxlU2NhbjooKT0+YnYsRmlsZVNlYXJjaDooKT0+dnYsRmlsZVNlYXJjaDI6KCk9PnY0LEZpbGVTZWFyY2hDb3JuZXI6KCk9PnY0LEZpbGVTaWduYWw6KCk9Pnk0LEZpbGVTaWduYXR1cmU6KCk9Pmg0LEZpbGVTbGlkZXJzOigpPT53dixGaWxlU3ByZWFkc2hlZXQ6KCk9Pnl2LEZpbGVTdGFjazooKT0+TXYsRmlsZVN5bWxpbms6KCk9Pnp2LEZpbGVUZXJtaW5hbDooKT0+a3YsRmlsZVRleHQ6KCk9PlN2LEZpbGVUeXBlOigpPT5DdixGaWxlVHlwZTI6KCk9Pnc0LEZpbGVUeXBlQ29ybmVyOigpPT53NCxGaWxlVXA6KCk9Pkx2LEZpbGVVc2VyOigpPT5UdixGaWxlVmlkZW86KCk9Pmc0LEZpbGVWaWRlbzI6KCk9Pk00LEZpbGVWaWRlb0NhbWVyYTooKT0+TTQsRmlsZVZvbHVtZTooKT0+X3YsRmlsZVZvbHVtZTI6KCk9Pnk0LEZpbGVXYXJuaW5nOigpPT5kNCxGaWxlWDooKT0+QXYsRmlsZVgyOigpPT56NCxGaWxlWENvcm5lcjooKT0+ejQsRmlsZXM6KCk9PkR2LEZpbG06KCk9PkV2LEZpbHRlcjooKT0+VDQsRmlsdGVyWDooKT0+TDQsRmluZ2VycHJpbnQ6KCk9Pms0LEZpbmdlcnByaW50UGF0dGVybjooKT0+azQsRmlyZUV4dGluZ3Vpc2hlcjooKT0+TnYsRmlzaDooKT0+RnYsRmlzaE9mZjooKT0+UHYsRmlzaFN5bWJvbDooKT0+SXYsRmlzaGluZ0hvb2s6KCk9Pk92LEZsYWc6KCk9PlZ2LEZsYWdPZmY6KCk9PkJ2LEZsYWdUcmlhbmdsZUxlZnQ6KCk9PlJ2LEZsYWdUcmlhbmdsZVJpZ2h0OigpPT5IdixGbGFtZTooKT0+VXYsRmxhbWVLaW5kbGluZzooKT0+cXYsRmxhc2hsaWdodDooKT0+V3YsRmxhc2hsaWdodE9mZjooKT0+anYsRmxhc2tDb25pY2FsOigpPT5adixGbGFza0NvbmljYWxPZmY6KCk9Pkd2LEZsYXNrUm91bmQ6KCk9Pll2LEZsaXBIb3Jpem9udGFsOigpPT5YdixGbGlwSG9yaXpvbnRhbDI6KCk9PlF2LEZsaXBWZXJ0aWNhbDooKT0+SnYsRmxpcFZlcnRpY2FsMjooKT0+S3YsRmxvd2VyOigpPT50eSxGbG93ZXIyOigpPT5leSxGb2N1czooKT0+YXksRm9sZEhvcml6b250YWw6KCk9PnJ5LEZvbGRWZXJ0aWNhbDooKT0+aXksRm9sZGVyOigpPT5EeSxGb2xkZXJBcmNoaXZlOigpPT5veSxGb2xkZXJDaGVjazooKT0+c3ksRm9sZGVyQ2xvY2s6KCk9Pm55LEZvbGRlckNsb3NlZDooKT0+bHksRm9sZGVyQ29kZTooKT0+Y3ksRm9sZGVyQ29nOigpPT5TNCxGb2xkZXJDb2cyOigpPT5TNCxGb2xkZXJEb3Q6KCk9PmR5LEZvbGRlckRvd246KCk9PmZ5LEZvbGRlckVkaXQ6KCk9PkM0LEZvbGRlckdpdDooKT0+cHksRm9sZGVyR2l0MjooKT0+dXksRm9sZGVySGVhcnQ6KCk9Pmh5LEZvbGRlcklucHV0OigpPT5teSxGb2xkZXJLYW5iYW46KCk9Pmd5LEZvbGRlcktleTooKT0+eHksRm9sZGVyTG9jazooKT0+YnksRm9sZGVyTWludXM6KCk9PnZ5LEZvbGRlck9wZW46KCk9Pnd5LEZvbGRlck9wZW5Eb3Q6KCk9Pnl5LEZvbGRlck91dHB1dDooKT0+TXksRm9sZGVyUGVuOigpPT5DNCxGb2xkZXJQbHVzOigpPT56eSxGb2xkZXJSb290OigpPT5reSxGb2xkZXJTZWFyY2g6KCk9PkN5LEZvbGRlclNlYXJjaDI6KCk9PlN5LEZvbGRlclN5bWxpbms6KCk9Pkx5LEZvbGRlclN5bmM6KCk9PlR5LEZvbGRlclRyZWU6KCk9Pl95LEZvbGRlclVwOigpPT5BeSxGb2xkZXJYOigpPT4keSxGb2xkZXJzOigpPT5FeSxGb290cHJpbnRzOigpPT5OeSxGb3JrS25pZmU6KCk9Pk9sLEZvcmtLbmlmZUNyb3NzZWQ6KCk9PkZsLEZvcmtsaWZ0OigpPT5QeSxGb3JtOigpPT5JeSxGb3JtSW5wdXQ6KCk9PmQzLEZvcndhcmQ6KCk9PkZ5LEZyYW1lOigpPT5PeSxGcmFtZXI6KCk9PkJ5LEZyb3duOigpPT5SeSxGdWVsOigpPT5IeSxGdWxsc2NyZWVuOigpPT5xeSxGdW5jdGlvblNxdWFyZTooKT0+WTMsRnVubmVsOigpPT5UNCxGdW5uZWxQbHVzOigpPT5WeSxGdW5uZWxYOigpPT5MNCxHYWxsZXJ5SG9yaXpvbnRhbDooKT0+anksR2FsbGVyeUhvcml6b250YWxFbmQ6KCk9PlV5LEdhbGxlcnlUaHVtYm5haWxzOigpPT5XeSxHYWxsZXJ5VmVydGljYWw6KCk9Pll5LEdhbGxlcnlWZXJ0aWNhbEVuZDooKT0+R3ksR2FtZXBhZDooKT0+UXksR2FtZXBhZDI6KCk9Plp5LEdhbWVwYWREaXJlY3Rpb25hbDooKT0+WHksR2FudHRDaGFydDooKT0+bjAsR2FudHRDaGFydFNxdWFyZTooKT0+UmksR2F1Z2U6KCk9Pkt5LEdhdWdlQ2lyY2xlOigpPT5MMCxHYXZlbDooKT0+SnksR2VtOigpPT5ldyxHZW9yZ2lhbkxhcmk6KCk9PnR3LEdob3N0OigpPT5hdyxHaWZ0OigpPT5ydyxHaXRCcmFuY2g6KCk9Pm93LEdpdEJyYW5jaE1pbnVzOigpPT5pdyxHaXRCcmFuY2hQbHVzOigpPT5zdyxHaXRDb21taXQ6KCk9Pl80LEdpdENvbW1pdEhvcml6b250YWw6KCk9Pl80LEdpdENvbW1pdFZlcnRpY2FsOigpPT5udyxHaXRDb21wYXJlOigpPT5jdyxHaXRDb21wYXJlQXJyb3dzOigpPT5sdyxHaXRGb3JrOigpPT5kdyxHaXRHcmFwaDooKT0+ZncsR2l0TWVyZ2U6KCk9PnV3LEdpdFB1bGxSZXF1ZXN0OigpPT5idyxHaXRQdWxsUmVxdWVzdEFycm93OigpPT5wdyxHaXRQdWxsUmVxdWVzdENsb3NlZDooKT0+aHcsR2l0UHVsbFJlcXVlc3RDcmVhdGU6KCk9Pmd3LEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3c6KCk9Pm13LEdpdFB1bGxSZXF1ZXN0RHJhZnQ6KCk9Pnh3LEdpdGh1YjooKT0+dncsR2l0bGFiOigpPT55dyxHbGFzc1dhdGVyOigpPT53dyxHbGFzc2VzOigpPT5NdyxHbG9iZTooKT0+a3csR2xvYmUyOigpPT5YMCxHbG9iZUxvY2s6KCk9Pnp3LEdvYWw6KCk9PlN3LEdwdTooKT0+Q3csR3JhYjooKT0+TjQsR3JhZHVhdGlvbkNhcDooKT0+THcsR3JhcGU6KCk9PlR3LEdyaWQ6KCk9PkZpLEdyaWQyWDI6KCk9PkU0LEdyaWQyWDJDaGVjazooKT0+QTQsR3JpZDJYMlBsdXM6KCk9PiQ0LEdyaWQyWDJYOigpPT5ENCxHcmlkMngyOigpPT5FNCxHcmlkMngyQ2hlY2s6KCk9PkE0LEdyaWQyeDJQbHVzOigpPT4kNCxHcmlkMngyWDooKT0+RDQsR3JpZDNYMzooKT0+RmksR3JpZDN4MjooKT0+X3csR3JpZDN4MzooKT0+RmksR3JpcDooKT0+RHcsR3JpcEhvcml6b250YWw6KCk9PkF3LEdyaXBWZXJ0aWNhbDooKT0+JHcsR3JvdXA6KCk9PkV3LEd1aXRhcjooKT0+UHcsSGFtOigpPT5OdyxIYW1idXJnZXI6KCk9Pkl3LEhhbW1lcjooKT0+RncsSGFuZDooKT0+VncsSGFuZENvaW5zOigpPT5PdyxIYW5kRmlzdDooKT0+QncsSGFuZEdyYWI6KCk9Pk40LEhhbmRIZWFydDooKT0+UncsSGFuZEhlbHBpbmc6KCk9PlA0LEhhbmRNZXRhbDooKT0+SHcsSGFuZFBsYXR0ZXI6KCk9PnF3LEhhbmRiYWc6KCk9PlV3LEhhbmRzaGFrZTooKT0+ancsSGFyZERyaXZlOigpPT5YdyxIYXJkRHJpdmVEb3dubG9hZDooKT0+V3csSGFyZERyaXZlVXBsb2FkOigpPT5HdyxIYXJkSGF0OigpPT5ZdyxIYXNoOigpPT5adyxIYXRHbGFzc2VzOigpPT5RdyxIYXplOigpPT5LdyxIZDooKT0+SncsSGRtaVBvcnQ6KCk9PmVNLEhlYWRpbmc6KCk9Pm5NLEhlYWRpbmcxOigpPT50TSxIZWFkaW5nMjooKT0+ck0sSGVhZGluZzM6KCk9PmFNLEhlYWRpbmc0OigpPT5pTSxIZWFkaW5nNTooKT0+b00sSGVhZGluZzY6KCk9PnNNLEhlYWRwaG9uZU9mZjooKT0+bE0sSGVhZHBob25lczooKT0+Y00sSGVhZHNldDooKT0+ZE0sSGVhcnQ6KCk9PmJNLEhlYXJ0Q3JhY2s6KCk9PmZNLEhlYXJ0SGFuZHNoYWtlOigpPT51TSxIZWFydE1pbnVzOigpPT5wTSxIZWFydE9mZjooKT0+aE0sSGVhcnRQbHVzOigpPT5tTSxIZWFydFB1bHNlOigpPT5nTSxIZWF0ZXI6KCk9PnhNLEhlbGljb3B0ZXI6KCk9PnZNLEhlbHBDaXJjbGU6KCk9Pk5pLEhlbHBpbmdIYW5kOigpPT5QNCxIZXhhZ29uOigpPT55TSxIaWdobGlnaHRlcjooKT0+d00sSGlzdG9yeTooKT0+TU0sSG9tZTooKT0+STQsSG9wOigpPT56TSxIb3BPZmY6KCk9PmtNLEhvc3BpdGFsOigpPT5TTSxIb3RlbDooKT0+Q00sSG91cmdsYXNzOigpPT5MTSxIb3VzZTooKT0+STQsSG91c2VIZWFydDooKT0+VE0sSG91c2VQbHVnOigpPT5fTSxIb3VzZVBsdXM6KCk9PkFNLEhvdXNlV2lmaTooKT0+JE0sSWNlQ3JlYW06KCk9Pk80LEljZUNyZWFtMjooKT0+RjQsSWNlQ3JlYW1Cb3dsOigpPT5GNCxJY2VDcmVhbUNvbmU6KCk9Pk80LElkQ2FyZDooKT0+RU0sSWRDYXJkTGFueWFyZDooKT0+RE0sSW1hZ2U6KCk9PkhNLEltYWdlRG93bjooKT0+Tk0sSW1hZ2VNaW51czooKT0+UE0sSW1hZ2VPZmY6KCk9PklNLEltYWdlUGxheTooKT0+T00sSW1hZ2VQbHVzOigpPT5GTSxJbWFnZVVwOigpPT5CTSxJbWFnZVVwc2NhbGU6KCk9PlJNLEltYWdlczooKT0+cU0sSW1wb3J0OigpPT5WTSxJbmJveDooKT0+VU0sSW5kZW50OigpPT5CaSxJbmRlbnREZWNyZWFzZTooKT0+T2ksSW5kZW50SW5jcmVhc2U6KCk9PkJpLEluZGlhblJ1cGVlOigpPT5qTSxJbmZpbml0eTooKT0+V00sSW5mbzooKT0+R00sSW5zcGVjdDooKT0+ZWwsSW5zcGVjdGlvblBhbmVsOigpPT5ZTSxJbnN0YWdyYW06KCk9PlpNLEl0YWxpYzooKT0+WE0sSXRlcmF0aW9uQ2N3OigpPT5RTSxJdGVyYXRpb25DdzooKT0+S00sSmFwYW5lc2VZZW46KCk9PkpNLEpveXN0aWNrOigpPT5leixLYW5iYW46KCk9PnR6LEthbmJhblNxdWFyZTooKT0+WjMsS2FuYmFuU3F1YXJlRGFzaGVkOigpPT5xMyxLYXlhazooKT0+YXosS2V5OigpPT5veixLZXlSb3VuZDooKT0+cnosS2V5U3F1YXJlOigpPT5peixLZXlib2FyZDooKT0+bHosS2V5Ym9hcmRNdXNpYzooKT0+c3osS2V5Ym9hcmRPZmY6KCk9Pm56LExhbXA6KCk9Pmh6LExhbXBDZWlsaW5nOigpPT5jeixMYW1wRGVzazooKT0+ZHosTGFtcEZsb29yOigpPT5meixMYW1wV2FsbERvd246KCk9PnV6LExhbXBXYWxsVXA6KCk9PnB6LExhbmRQbG90OigpPT5teixMYW5kbWFyazooKT0+Z3osTGFuZ3VhZ2VzOigpPT54eixMYXB0b3A6KCk9PnZ6LExhcHRvcDI6KCk9PkI0LExhcHRvcE1pbmltYWw6KCk9PkI0LExhcHRvcE1pbmltYWxDaGVjazooKT0+YnosTGFzc286KCk9Pnd6LExhc3NvU2VsZWN0OigpPT55eixMYXVnaDooKT0+TXosTGF5ZXJzOigpPT5SNCxMYXllcnMyOigpPT56eixMYXllcnMzOigpPT5SNCxMYXllcnNQbHVzOigpPT5reixMYXlvdXQ6KCk9PnMzLExheW91dERhc2hib2FyZDooKT0+U3osTGF5b3V0R3JpZDooKT0+Q3osTGF5b3V0TGlzdDooKT0+THosTGF5b3V0UGFuZWxMZWZ0OigpPT5UeixMYXlvdXRQYW5lbFRvcDooKT0+X3osTGF5b3V0VGVtcGxhdGU6KCk9PkF6LExlYWY6KCk9PiR6LExlYWZ5R3JlZW46KCk9PkR6LExlY3Rlcm46KCk9PkV6LExldHRlclRleHQ6KCk9Pk1sLExpYnJhcnk6KCk9PlB6LExpYnJhcnlCaWc6KCk9Pk56LExpYnJhcnlTcXVhcmU6KCk9PlgzLExpZmVCdW95OigpPT5JeixMaWdhdHVyZTooKT0+RnosTGlnaHRidWxiOigpPT5CeixMaWdodGJ1bGJPZmY6KCk9Pk96LExpbmVDaGFydDooKT0+aTAsTGluZVNxdWlnZ2xlOigpPT5SeixMaW5rOigpPT5WeixMaW5rMjooKT0+SHosTGluazJPZmY6KCk9PnF6LExpbmtlZGluOigpPT5VeixMaXN0OigpPT5jayxMaXN0Q2hlY2s6KCk9Pmp6LExpc3RDaGVja3M6KCk9Pld6LExpc3RDaGV2cm9uc0Rvd25VcDooKT0+R3osTGlzdENoZXZyb25zVXBEb3duOigpPT5ZeixMaXN0Q29sbGFwc2U6KCk9Plp6LExpc3RFbmQ6KCk9Plh6LExpc3RGaWx0ZXI6KCk9Pkt6LExpc3RGaWx0ZXJQbHVzOigpPT5ReixMaXN0SW5kZW50RGVjcmVhc2U6KCk9Pk9pLExpc3RJbmRlbnRJbmNyZWFzZTooKT0+QmksTGlzdE1pbnVzOigpPT5KeixMaXN0TXVzaWM6KCk9PmVrLExpc3RPcmRlcmVkOigpPT50ayxMaXN0UGx1czooKT0+YWssTGlzdFJlc3RhcnQ6KCk9PnJrLExpc3RTdGFydDooKT0+aWssTGlzdFRvZG86KCk9Pm9rLExpc3RUcmVlOigpPT5zayxMaXN0VmlkZW86KCk9Pm5rLExpc3RYOigpPT5sayxMb2FkZXI6KCk9PmZrLExvYWRlcjI6KCk9Pkg0LExvYWRlckNpcmNsZTooKT0+SDQsTG9hZGVyUGlud2hlZWw6KCk9PmRrLExvY2F0ZTooKT0+aGssTG9jYXRlRml4ZWQ6KCk9PnVrLExvY2F0ZU9mZjooKT0+cGssTG9jYXRpb25FZGl0OigpPT5qNCxMb2NrOigpPT5nayxMb2NrS2V5aG9sZTooKT0+bWssTG9ja0tleWhvbGVPcGVuOigpPT5xNCxMb2NrT3BlbjooKT0+VjQsTG9nSW46KCk9PnhrLExvZ091dDooKT0+YmssTG9nczooKT0+dmssTG9sbGlwb3A6KCk9PnlrLEx1Z2dhZ2U6KCk9PndrLE1TcXVhcmU6KCk9PlEzLE1hZ25ldDooKT0+TWssTWFpbDooKT0+QWssTWFpbENoZWNrOigpPT56ayxNYWlsTWludXM6KCk9PmtrLE1haWxPcGVuOigpPT5TayxNYWlsUGx1czooKT0+Q2ssTWFpbFF1ZXN0aW9uOigpPT5VNCxNYWlsUXVlc3Rpb25NYXJrOigpPT5VNCxNYWlsU2VhcmNoOigpPT5MayxNYWlsV2FybmluZzooKT0+VGssTWFpbFg6KCk9Pl9rLE1haWxib3g6KCk9PiRrLE1haWxzOigpPT5EayxNYXA6KCk9PkdrLE1hcE1pbnVzOigpPT5FayxNYXBQaW46KCk9PlVrLE1hcFBpbkNoZWNrOigpPT5QayxNYXBQaW5DaGVja0luc2lkZTooKT0+TmssTWFwUGluSG91c2U6KCk9PklrLE1hcFBpbk1pbnVzOigpPT5PayxNYXBQaW5NaW51c0luc2lkZTooKT0+RmssTWFwUGluT2ZmOigpPT5CayxNYXBQaW5QZW46KCk9Pmo0LE1hcFBpblBsdXM6KCk9PkhrLE1hcFBpblBsdXNJbnNpZGU6KCk9PlJrLE1hcFBpblg6KCk9PlZrLE1hcFBpblhJbnNpZGU6KCk9PnFrLE1hcFBpbm5lZDooKT0+amssTWFwUGx1czooKT0+V2ssTWFyczooKT0+WmssTWFyc1N0cm9rZTooKT0+WWssTWFydGluaTooKT0+WGssTWF4aW1pemU6KCk9PktrLE1heGltaXplMjooKT0+UWssTWVkYWw6KCk9PnRTLE1lZ2FwaG9uZTooKT0+ZVMsTWVnYXBob25lT2ZmOigpPT5KayxNZWg6KCk9PmFTLE1lbW9yeVN0aWNrOigpPT5yUyxNZW51OigpPT5vUyxNZW51U3F1YXJlOigpPT5LMyxNZXJnZTooKT0+aVMsTWVzc2FnZUNpcmNsZTooKT0+bVMsTWVzc2FnZUNpcmNsZUNvZGU6KCk9PnNTLE1lc3NhZ2VDaXJjbGVEYXNoZWQ6KCk9Pm5TLE1lc3NhZ2VDaXJjbGVIZWFydDooKT0+bFMsTWVzc2FnZUNpcmNsZU1vcmU6KCk9PmNTLE1lc3NhZ2VDaXJjbGVPZmY6KCk9PmRTLE1lc3NhZ2VDaXJjbGVQbHVzOigpPT5mUyxNZXNzYWdlQ2lyY2xlUXVlc3Rpb246KCk9Plc0LE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcms6KCk9Plc0LE1lc3NhZ2VDaXJjbGVSZXBseTooKT0+dVMsTWVzc2FnZUNpcmNsZVdhcm5pbmc6KCk9PnBTLE1lc3NhZ2VDaXJjbGVYOigpPT5oUyxNZXNzYWdlU3F1YXJlOigpPT4kUyxNZXNzYWdlU3F1YXJlQ29kZTooKT0+Z1MsTWVzc2FnZVNxdWFyZURhc2hlZDooKT0+eFMsTWVzc2FnZVNxdWFyZURpZmY6KCk9PmJTLE1lc3NhZ2VTcXVhcmVEb3Q6KCk9PnZTLE1lc3NhZ2VTcXVhcmVIZWFydDooKT0+eVMsTWVzc2FnZVNxdWFyZUxvY2s6KCk9PndTLE1lc3NhZ2VTcXVhcmVNb3JlOigpPT5NUyxNZXNzYWdlU3F1YXJlT2ZmOigpPT56UyxNZXNzYWdlU3F1YXJlUGx1czooKT0+a1MsTWVzc2FnZVNxdWFyZVF1b3RlOigpPT5TUyxNZXNzYWdlU3F1YXJlUmVwbHk6KCk9PkNTLE1lc3NhZ2VTcXVhcmVTaGFyZTooKT0+TFMsTWVzc2FnZVNxdWFyZVRleHQ6KCk9PlRTLE1lc3NhZ2VTcXVhcmVXYXJuaW5nOigpPT5fUyxNZXNzYWdlU3F1YXJlWDooKT0+QVMsTWVzc2FnZXNTcXVhcmU6KCk9PkRTLE1pYzooKT0+TlMsTWljMjooKT0+RzQsTWljT2ZmOigpPT5FUyxNaWNWb2NhbDooKT0+RzQsTWljcm9jaGlwOigpPT5QUyxNaWNyb3Njb3BlOigpPT5JUyxNaWNyb3dhdmU6KCk9PkZTLE1pbGVzdG9uZTooKT0+T1MsTWlsazooKT0+UlMsTWlsa09mZjooKT0+QlMsTWluaW1pemU6KCk9PnFTLE1pbmltaXplMjooKT0+SFMsTWludXM6KCk9PlZTLE1pbnVzQ2lyY2xlOigpPT5UMCxNaW51c1NxdWFyZTooKT0+SjMsTW9uaXRvcjooKT0+ckMsTW9uaXRvckNoZWNrOigpPT5VUyxNb25pdG9yQ2xvdWQ6KCk9PmpTLE1vbml0b3JDb2c6KCk9PldTLE1vbml0b3JEb3Q6KCk9PkdTLE1vbml0b3JEb3duOigpPT5ZUyxNb25pdG9yT2ZmOigpPT5aUyxNb25pdG9yUGF1c2U6KCk9PlhTLE1vbml0b3JQbGF5OigpPT5RUyxNb25pdG9yU21hcnRwaG9uZTooKT0+S1MsTW9uaXRvclNwZWFrZXI6KCk9PkpTLE1vbml0b3JTdG9wOigpPT5lQyxNb25pdG9yVXA6KCk9PnRDLE1vbml0b3JYOigpPT5hQyxNb29uOigpPT5zQyxNb29uU3RhcjooKT0+aUMsTW9yZUhvcml6b250YWw6KCk9PkswLE1vcmVWZXJ0aWNhbDooKT0+UTAsTW90b3JiaWtlOigpPT5vQyxNb3VudGFpbjooKT0+bEMsTW91bnRhaW5Tbm93OigpPT5uQyxNb3VzZTooKT0+bUMsTW91c2VPZmY6KCk9PmNDLE1vdXNlUG9pbnRlcjooKT0+aEMsTW91c2VQb2ludGVyMjooKT0+ZkMsTW91c2VQb2ludGVyMk9mZjooKT0+ZEMsTW91c2VQb2ludGVyQmFuOigpPT51QyxNb3VzZVBvaW50ZXJDbGljazooKT0+cEMsTW91c2VQb2ludGVyU3F1YXJlRGFzaGVkOigpPT5WMyxNb3ZlOigpPT5UQyxNb3ZlM0Q6KCk9Plk0LE1vdmUzZDooKT0+WTQsTW92ZURpYWdvbmFsOigpPT54QyxNb3ZlRGlhZ29uYWwyOigpPT5nQyxNb3ZlRG93bjooKT0+eUMsTW92ZURvd25MZWZ0OigpPT5iQyxNb3ZlRG93blJpZ2h0OigpPT52QyxNb3ZlSG9yaXpvbnRhbDooKT0+TUMsTW92ZUxlZnQ6KCk9PndDLE1vdmVSaWdodDooKT0+ekMsTW92ZVVwOigpPT5DQyxNb3ZlVXBMZWZ0OigpPT5rQyxNb3ZlVXBSaWdodDooKT0+U0MsTW92ZVZlcnRpY2FsOigpPT5MQyxNdXNpYzooKT0+REMsTXVzaWMyOigpPT5fQyxNdXNpYzM6KCk9PkFDLE11c2ljNDooKT0+JEMsTmF2aWdhdGlvbjooKT0+SUMsTmF2aWdhdGlvbjI6KCk9Pk5DLE5hdmlnYXRpb24yT2ZmOigpPT5FQyxOYXZpZ2F0aW9uT2ZmOigpPT5QQyxOZXR3b3JrOigpPT5PQyxOZXdzcGFwZXI6KCk9PkZDLE5mYzooKT0+QkMsTm9uQmluYXJ5OigpPT5SQyxOb3RlYm9vazooKT0+VUMsTm90ZWJvb2tQZW46KCk9PkhDLE5vdGVib29rVGFiczooKT0+cUMsTm90ZWJvb2tUZXh0OigpPT5WQyxOb3RlcGFkVGV4dDooKT0+V0MsTm90ZXBhZFRleHREYXNoZWQ6KCk9PmpDLE51dDooKT0+WUMsTnV0T2ZmOigpPT5HQyxPY3RhZ29uOigpPT5YQyxPY3RhZ29uQWxlcnQ6KCk9Plo0LE9jdGFnb25NaW51czooKT0+WkMsT2N0YWdvblBhdXNlOigpPT5YNCxPY3RhZ29uWDooKT0+UTQsT21lZ2E6KCk9PlFDLE9wdGlvbjooKT0+S0MsT3JiaXQ6KCk9PkpDLE9yaWdhbWk6KCk9PmVMLE91dGRlbnQ6KCk9Pk9pLFBhY2thZ2U6KCk9PmxMLFBhY2thZ2UyOigpPT50TCxQYWNrYWdlQ2hlY2s6KCk9PmFMLFBhY2thZ2VNaW51czooKT0+ckwsUGFja2FnZU9wZW46KCk9PmlMLFBhY2thZ2VQbHVzOigpPT5vTCxQYWNrYWdlU2VhcmNoOigpPT5zTCxQYWNrYWdlWDooKT0+bkwsUGFpbnRCdWNrZXQ6KCk9PmNMLFBhaW50Um9sbGVyOigpPT5kTCxQYWludGJydXNoOigpPT5mTCxQYWludGJydXNoMjooKT0+SzQsUGFpbnRicnVzaFZlcnRpY2FsOigpPT5LNCxQYWxldHRlOigpPT51TCxQYWxtdHJlZTooKT0+Q2wsUGFuZGE6KCk9PnBMLFBhbmVsQm90dG9tOigpPT5nTCxQYW5lbEJvdHRvbUNsb3NlOigpPT5oTCxQYW5lbEJvdHRvbURhc2hlZDooKT0+SjQsUGFuZWxCb3R0b21JbmFjdGl2ZTooKT0+SjQsUGFuZWxCb3R0b21PcGVuOigpPT5tTCxQYW5lbExlZnQ6KCk9PnIzLFBhbmVsTGVmdENsb3NlOigpPT5lMyxQYW5lbExlZnREYXNoZWQ6KCk9PnQzLFBhbmVsTGVmdEluYWN0aXZlOigpPT50MyxQYW5lbExlZnRPcGVuOigpPT5hMyxQYW5lbExlZnRSaWdodERhc2hlZDooKT0+eEwsUGFuZWxSaWdodDooKT0+eUwsUGFuZWxSaWdodENsb3NlOigpPT5iTCxQYW5lbFJpZ2h0RGFzaGVkOigpPT5pMyxQYW5lbFJpZ2h0SW5hY3RpdmU6KCk9PmkzLFBhbmVsUmlnaHRPcGVuOigpPT52TCxQYW5lbFRvcDooKT0+U0wsUGFuZWxUb3BCb3R0b21EYXNoZWQ6KCk9PndMLFBhbmVsVG9wQ2xvc2U6KCk9Pk1MLFBhbmVsVG9wRGFzaGVkOigpPT5vMyxQYW5lbFRvcEluYWN0aXZlOigpPT5vMyxQYW5lbFRvcE9wZW46KCk9PnpMLFBhbmVsc0xlZnRCb3R0b206KCk9PmtMLFBhbmVsc0xlZnRSaWdodDooKT0+RzAsUGFuZWxzUmlnaHRCb3R0b206KCk9PkNMLFBhbmVsc1RvcEJvdHRvbTooKT0+cDMsUGFuZWxzVG9wTGVmdDooKT0+czMsUGFwZXJjbGlwOigpPT5MTCxQYXJlbnRoZXNlczooKT0+X0wsUGFya2luZ0NpcmNsZTooKT0+QTAsUGFya2luZ0NpcmNsZU9mZjooKT0+XzAsUGFya2luZ01ldGVyOigpPT5UTCxQYXJraW5nU3F1YXJlOigpPT5hbCxQYXJraW5nU3F1YXJlT2ZmOigpPT50bCxQYXJ0eVBvcHBlcjooKT0+QUwsUGF1c2U6KCk9PiRMLFBhdXNlQ2lyY2xlOigpPT4kMCxQYXVzZU9jdGFnb246KCk9Plg0LFBhd1ByaW50OigpPT5ETCxQY0Nhc2U6KCk9PkVMLFBlbjooKT0+bDMsUGVuQm94OigpPT5hcixQZW5MaW5lOigpPT5uMyxQZW5PZmY6KCk9Pk5MLFBlblNxdWFyZTooKT0+YXIsUGVuVG9vbDooKT0+UEwsUGVuY2lsOigpPT5CTCxQZW5jaWxMaW5lOigpPT5JTCxQZW5jaWxPZmY6KCk9PkZMLFBlbmNpbFJ1bGVyOigpPT5PTCxQZW50YWdvbjooKT0+UkwsUGVyY2VudDooKT0+SEwsUGVyY2VudENpcmNsZTooKT0+RDAsUGVyY2VudERpYW1vbmQ6KCk9PlowLFBlcmNlbnRTcXVhcmU6KCk9PnJsLFBlcnNvblN0YW5kaW5nOigpPT5xTCxQaGlsaXBwaW5lUGVzbzooKT0+VkwsUGhvbmU6KCk9PlhMLFBob25lQ2FsbDooKT0+akwsUGhvbmVGb3J3YXJkZWQ6KCk9PlVMLFBob25lSW5jb21pbmc6KCk9PldMLFBob25lTWlzc2VkOigpPT5HTCxQaG9uZU9mZjooKT0+WUwsUGhvbmVPdXRnb2luZzooKT0+WkwsUGk6KCk9PlFMLFBpU3F1YXJlOigpPT5pbCxQaWFubzooKT0+S0wsUGlja2F4ZTooKT0+SkwsUGljdHVyZUluUGljdHVyZTooKT0+dFQsUGljdHVyZUluUGljdHVyZTI6KCk9PmVULFBpZUNoYXJ0OigpPT5sMCxQaWdneUJhbms6KCk9PmFULFBpbGNyb3c6KCk9Pm9ULFBpbGNyb3dMZWZ0OigpPT5yVCxQaWxjcm93UmlnaHQ6KCk9PmlULFBpbGNyb3dTcXVhcmU6KCk9Pm9sLFBpbGw6KCk9Pm5ULFBpbGxCb3R0bGU6KCk9PnNULFBpbjooKT0+Y1QsUGluT2ZmOigpPT5sVCxQaXBldHRlOigpPT5kVCxQaXp6YTooKT0+ZlQsUGxhbmU6KCk9PmhULFBsYW5lTGFuZGluZzooKT0+dVQsUGxhbmVUYWtlb2ZmOigpPT5wVCxQbGF5OigpPT5tVCxQbGF5Q2lyY2xlOigpPT5FMCxQbGF5U3F1YXJlOigpPT5zbCxQbHVnOigpPT54VCxQbHVnMjooKT0+Z1QsUGx1Z1phcDooKT0+YzMsUGx1Z1phcDI6KCk9PmMzLFBsdXM6KCk9PmJULFBsdXNDaXJjbGU6KCk9Pk4wLFBsdXNTcXVhcmU6KCk9Pm5sLFBvY2tldDooKT0+eVQsUG9ja2V0S25pZmU6KCk9PnZULFBvZGNhc3Q6KCk9PndULFBvaW50ZXI6KCk9PnpULFBvaW50ZXJPZmY6KCk9Pk1ULFBvcGNvcm46KCk9PmtULFBvcHNpY2xlOigpPT5TVCxQb3VuZFN0ZXJsaW5nOigpPT5DVCxQb3dlcjooKT0+VFQsUG93ZXJDaXJjbGU6KCk9PlAwLFBvd2VyT2ZmOigpPT5MVCxQb3dlclNxdWFyZTooKT0+bGwsUHJlc2VudGF0aW9uOigpPT5fVCxQcmludGVyOigpPT5BVCxQcmludGVyQ2hlY2s6KCk9PiRULFByb2plY3RvcjooKT0+RFQsUHJvcG9ydGlvbnM6KCk9PkVULFB1enpsZTooKT0+TlQsUHlyYW1pZDooKT0+UFQsUXJDb2RlOigpPT5JVCxRdW90ZTooKT0+RlQsUmFiYml0OigpPT5PVCxSYWRhcjooKT0+QlQsUmFkaWF0aW9uOigpPT5SVCxSYWRpY2FsOigpPT5IVCxSYWRpbzooKT0+VVQsUmFkaW9SZWNlaXZlcjooKT0+cVQsUmFkaW9Ub3dlcjooKT0+VlQsUmFkaXVzOigpPT5qVCxSYWlsU3ltYm9sOigpPT5XVCxSYWluYm93OigpPT5HVCxSYXQ6KCk9PllULFJhdGlvOigpPT5aVCxSZWNlaXB0OigpPT5vXyxSZWNlaXB0Q2VudDooKT0+WFQsUmVjZWlwdEV1cm86KCk9PlFULFJlY2VpcHRJbmRpYW5SdXBlZTooKT0+S1QsUmVjZWlwdEphcGFuZXNlWWVuOigpPT5KVCxSZWNlaXB0UG91bmRTdGVybGluZzooKT0+ZV8sUmVjZWlwdFJ1c3NpYW5SdWJsZTooKT0+dF8sUmVjZWlwdFN3aXNzRnJhbmM6KCk9PmFfLFJlY2VpcHRUZXh0OigpPT5yXyxSZWNlaXB0VHVya2lzaExpcmE6KCk9PmlfLFJlY3RhbmdsZUNpcmNsZTooKT0+c18sUmVjdGFuZ2xlRWxsaXBzaXM6KCk9PmQzLFJlY3RhbmdsZUdvZ2dsZXM6KCk9Pm5fLFJlY3RhbmdsZUhvcml6b250YWw6KCk9PmxfLFJlY3RhbmdsZVZlcnRpY2FsOigpPT5jXyxSZWN5Y2xlOigpPT5kXyxSZWRvOigpPT5wXyxSZWRvMjooKT0+Zl8sUmVkb0RvdDooKT0+dV8sUmVmcmVzaENjdzooKT0+bV8sUmVmcmVzaENjd0RvdDooKT0+aF8sUmVmcmVzaEN3OigpPT54XyxSZWZyZXNoQ3dPZmY6KCk9PmdfLFJlZnJpZ2VyYXRvcjooKT0+Yl8sUmVnZXg6KCk9PnZfLFJlbW92ZUZvcm1hdHRpbmc6KCk9PnlfLFJlcGVhdDooKT0+el8sUmVwZWF0MTooKT0+d18sUmVwZWF0MjooKT0+TV8sUmVwbGFjZTooKT0+U18sUmVwbGFjZUFsbDooKT0+a18sUmVwbHk6KCk9PkxfLFJlcGx5QWxsOigpPT5DXyxSZXdpbmQ6KCk9PlRfLFJpYmJvbjooKT0+X18sUm9ja2V0OigpPT5BXyxSb2NraW5nQ2hhaXI6KCk9PiRfLFJvbGxlckNvYXN0ZXI6KCk9PkRfLFJvc2U6KCk9PkVfLFJvdGF0ZTNEOigpPT5mMyxSb3RhdGUzZDooKT0+ZjMsUm90YXRlQ2N3OigpPT5JXyxSb3RhdGVDY3dLZXk6KCk9Pk5fLFJvdGF0ZUNjd1NxdWFyZTooKT0+UF8sUm90YXRlQ3c6KCk9Pk9fLFJvdGF0ZUN3U3F1YXJlOigpPT5GXyxSb3V0ZTooKT0+Ql8sUm91dGVPZmY6KCk9PlJfLFJvdXRlcjooKT0+SF8sUm93czooKT0+dTMsUm93czI6KCk9PnUzLFJvd3MzOigpPT5wMyxSb3dzNDooKT0+cV8sUnNzOigpPT5WXyxSdWxlcjooKT0+al8sUnVsZXJEaW1lbnNpb25MaW5lOigpPT5VXyxSdXNzaWFuUnVibGU6KCk9PldfLFNhaWxib2F0OigpPT5HXyxTYWxhZDooKT0+WV8sU2FuZHdpY2g6KCk9PlpfLFNhdGVsbGl0ZTooKT0+UV8sU2F0ZWxsaXRlRGlzaDooKT0+WF8sU2F1ZGlSaXlhbDooKT0+S18sU2F2ZTooKT0+dEEsU2F2ZUFsbDooKT0+Sl8sU2F2ZU9mZjooKT0+ZUEsU2NhbGU6KCk9PmFBLFNjYWxlM0Q6KCk9PmgzLFNjYWxlM2Q6KCk9PmgzLFNjYWxpbmc6KCk9PnJBLFNjYW46KCk9PnVBLFNjYW5CYXJjb2RlOigpPT5vQSxTY2FuRXllOigpPT5pQSxTY2FuRmFjZTooKT0+c0EsU2NhbkhlYXJ0OigpPT5uQSxTY2FuTGluZTooKT0+bEEsU2NhblFyQ29kZTooKT0+Y0EsU2NhblNlYXJjaDooKT0+ZEEsU2NhblRleHQ6KCk9PmZBLFNjYXR0ZXJDaGFydDooKT0+YzAsU2Nob29sOigpPT5wQSxTY2hvb2wyOigpPT5fbCxTY2lzc29yczooKT0+bUEsU2Npc3NvcnNMaW5lRGFzaGVkOigpPT5oQSxTY2lzc29yc1NxdWFyZTooKT0+Y2wsU2Npc3NvcnNTcXVhcmVEYXNoZWRCb3R0b206KCk9Pk4zLFNjb290ZXI6KCk9PmdBLFNjcmVlblNoYXJlOigpPT5iQSxTY3JlZW5TaGFyZU9mZjooKT0+eEEsU2Nyb2xsOigpPT55QSxTY3JvbGxUZXh0OigpPT52QSxTZWFyY2g6KCk9PkNBLFNlYXJjaEFsZXJ0OigpPT53QSxTZWFyY2hDaGVjazooKT0+ekEsU2VhcmNoQ29kZTooKT0+TUEsU2VhcmNoU2xhc2g6KCk9PmtBLFNlYXJjaFg6KCk9PlNBLFNlY3Rpb246KCk9PkxBLFNlbmQ6KCk9Pl9BLFNlbmRIb3Jpem9uYWw6KCk9Pm0zLFNlbmRIb3Jpem9udGFsOigpPT5tMyxTZW5kVG9CYWNrOigpPT5UQSxTZXBhcmF0b3JIb3Jpem9udGFsOigpPT5BQSxTZXBhcmF0b3JWZXJ0aWNhbDooKT0+JEEsU2VydmVyOigpPT5QQSxTZXJ2ZXJDb2c6KCk9PkRBLFNlcnZlckNyYXNoOigpPT5FQSxTZXJ2ZXJPZmY6KCk9Pk5BLFNldHRpbmdzOigpPT5GQSxTZXR0aW5nczI6KCk9PklBLFNoYXBlczooKT0+T0EsU2hhcmU6KCk9PlJBLFNoYXJlMjooKT0+QkEsU2hlZXQ6KCk9PkhBLFNoZWxsOigpPT5xQSxTaGllbGQ6KCk9PktBLFNoaWVsZEFsZXJ0OigpPT5WQSxTaGllbGRCYW46KCk9PlVBLFNoaWVsZENoZWNrOigpPT5qQSxTaGllbGRDbG9zZTooKT0+eDMsU2hpZWxkRWxsaXBzaXM6KCk9PldBLFNoaWVsZEhhbGY6KCk9PkdBLFNoaWVsZE1pbnVzOigpPT5ZQSxTaGllbGRPZmY6KCk9PlpBLFNoaWVsZFBsdXM6KCk9PlhBLFNoaWVsZFF1ZXN0aW9uOigpPT5nMyxTaGllbGRRdWVzdGlvbk1hcms6KCk9PmczLFNoaWVsZFVzZXI6KCk9PlFBLFNoaWVsZFg6KCk9PngzLFNoaXA6KCk9PmUkLFNoaXBXaGVlbDooKT0+SkEsU2hpcnQ6KCk9PnQkLFNob3BwaW5nQmFnOigpPT5hJCxTaG9wcGluZ0Jhc2tldDooKT0+ciQsU2hvcHBpbmdDYXJ0OigpPT5pJCxTaG92ZWw6KCk9Pm8kLFNob3dlckhlYWQ6KCk9PnMkLFNocmVkZGVyOigpPT5uJCxTaHJpbXA6KCk9PmwkLFNocmluazooKT0+YyQsU2hydWI6KCk9PmQkLFNodWZmbGU6KCk9PmYkLFNpZGViYXI6KCk9PnIzLFNpZGViYXJDbG9zZTooKT0+ZTMsU2lkZWJhck9wZW46KCk9PmEzLFNpZ21hOigpPT5wJCxTaWdtYVNxdWFyZTooKT0+ZGwsU2lnbmFsOigpPT54JCxTaWduYWxIaWdoOigpPT51JCxTaWduYWxMb3c6KCk9PmgkLFNpZ25hbE1lZGl1bTooKT0+bSQsU2lnbmFsWmVybzooKT0+ZyQsU2lnbmF0dXJlOigpPT5iJCxTaWducG9zdDooKT0+eSQsU2lnbnBvc3RCaWc6KCk9PnYkLFNpcmVuOigpPT53JCxTa2lwQmFjazooKT0+TSQsU2tpcEZvcndhcmQ6KCk9PmskLFNrdWxsOigpPT56JCxTbGFjazooKT0+UyQsU2xhc2g6KCk9PkMkLFNsYXNoU3F1YXJlOigpPT5mbCxTbGljZTooKT0+TCQsU2xpZGVyczooKT0+YjMsU2xpZGVyc0hvcml6b250YWw6KCk9PlQkLFNsaWRlcnNWZXJ0aWNhbDooKT0+YjMsU21hcnRwaG9uZTooKT0+JCQsU21hcnRwaG9uZUNoYXJnaW5nOigpPT5fJCxTbWFydHBob25lTmZjOigpPT5BJCxTbWlsZTooKT0+RSQsU21pbGVQbHVzOigpPT5EJCxTbmFpbDooKT0+TiQsU25vd2ZsYWtlOigpPT5QJCxTb2FwRGlzcGVuc2VyRHJvcGxldDooKT0+SSQsU29mYTooKT0+RiQsU29sYXJQYW5lbDooKT0+TyQsU29ydEFzYzooKT0+SG4sU29ydERlc2M6KCk9Pk9uLFNvdXA6KCk9PkIkLFNwYWNlOigpPT5SJCxTcGFkZTooKT0+SCQsU3BhcmtsZTooKT0+cSQsU3BhcmtsZXM6KCk9PnYzLFNwZWFrZXI6KCk9PlYkLFNwZWVjaDooKT0+VSQsU3BlbGxDaGVjazooKT0+VyQsU3BlbGxDaGVjazI6KCk9PmokLFNwbGluZTooKT0+WSQsU3BsaW5lUG9pbnRlcjooKT0+RyQsU3BsaXQ6KCk9PlokLFNwbGl0U3F1YXJlSG9yaXpvbnRhbDooKT0+dWwsU3BsaXRTcXVhcmVWZXJ0aWNhbDooKT0+cGwsU3Bvb2w6KCk9PlgkLFNwb3RsaWdodDooKT0+USQsU3ByYXlDYW46KCk9PkskLFNwcm91dDooKT0+SiQsU3F1YXJlOigpPT5kRCxTcXVhcmVBY3Rpdml0eTooKT0+eTMsU3F1YXJlQXJyb3dEb3duOigpPT56MyxTcXVhcmVBcnJvd0Rvd25MZWZ0OigpPT53MyxTcXVhcmVBcnJvd0Rvd25SaWdodDooKT0+TTMsU3F1YXJlQXJyb3dMZWZ0OigpPT5rMyxTcXVhcmVBcnJvd091dERvd25MZWZ0OigpPT5TMyxTcXVhcmVBcnJvd091dERvd25SaWdodDooKT0+QzMsU3F1YXJlQXJyb3dPdXRVcExlZnQ6KCk9PkwzLFNxdWFyZUFycm93T3V0VXBSaWdodDooKT0+VDMsU3F1YXJlQXJyb3dSaWdodDooKT0+XzMsU3F1YXJlQXJyb3dVcDooKT0+RDMsU3F1YXJlQXJyb3dVcExlZnQ6KCk9PkEzLFNxdWFyZUFycm93VXBSaWdodDooKT0+JDMsU3F1YXJlQXN0ZXJpc2s6KCk9PkUzLFNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzOigpPT5OMyxTcXVhcmVDaGFydEdhbnR0OigpPT5SaSxTcXVhcmVDaGVjazooKT0+UDMsU3F1YXJlQ2hlY2tCaWc6KCk9PkkzLFNxdWFyZUNoZXZyb25Eb3duOigpPT5GMyxTcXVhcmVDaGV2cm9uTGVmdDooKT0+TzMsU3F1YXJlQ2hldnJvblJpZ2h0OigpPT5CMyxTcXVhcmVDaGV2cm9uVXA6KCk9PlIzLFNxdWFyZUNvZGU6KCk9PkgzLFNxdWFyZURhc2hlZDooKT0+VTMsU3F1YXJlRGFzaGVkQm90dG9tOigpPT50RCxTcXVhcmVEYXNoZWRCb3R0b21Db2RlOigpPT5lRCxTcXVhcmVEYXNoZWRLYW5iYW46KCk9PnEzLFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlcjooKT0+VjMsU3F1YXJlRGFzaGVkVG9wU29saWQ6KCk9PmFELFNxdWFyZURpdmlkZTooKT0+ajMsU3F1YXJlRG90OigpPT5XMyxTcXVhcmVFcXVhbDooKT0+RzMsU3F1YXJlRnVuY3Rpb246KCk9PlkzLFNxdWFyZUdhbnR0Q2hhcnQ6KCk9PlJpLFNxdWFyZUthbmJhbjooKT0+WjMsU3F1YXJlTGlicmFyeTooKT0+WDMsU3F1YXJlTTooKT0+UTMsU3F1YXJlTWVudTooKT0+SzMsU3F1YXJlTWludXM6KCk9PkozLFNxdWFyZU1vdXNlUG9pbnRlcjooKT0+ZWwsU3F1YXJlUGFya2luZzooKT0+YWwsU3F1YXJlUGFya2luZ09mZjooKT0+dGwsU3F1YXJlUGF1c2U6KCk9PnJELFNxdWFyZVBlbjooKT0+YXIsU3F1YXJlUGVyY2VudDooKT0+cmwsU3F1YXJlUGk6KCk9PmlsLFNxdWFyZVBpbGNyb3c6KCk9Pm9sLFNxdWFyZVBsYXk6KCk9PnNsLFNxdWFyZVBsdXM6KCk9Pm5sLFNxdWFyZVBvd2VyOigpPT5sbCxTcXVhcmVSYWRpY2FsOigpPT5pRCxTcXVhcmVSb3VuZENvcm5lcjooKT0+b0QsU3F1YXJlU2Npc3NvcnM6KCk9PmNsLFNxdWFyZVNpZ21hOigpPT5kbCxTcXVhcmVTbGFzaDooKT0+ZmwsU3F1YXJlU3BsaXRIb3Jpem9udGFsOigpPT51bCxTcXVhcmVTcGxpdFZlcnRpY2FsOigpPT5wbCxTcXVhcmVTcXVhcmU6KCk9PnNELFNxdWFyZVN0YWNrOigpPT5uRCxTcXVhcmVTdGFyOigpPT5sRCxTcXVhcmVTdG9wOigpPT5jRCxTcXVhcmVUZXJtaW5hbDooKT0+aGwsU3F1YXJlVXNlcjooKT0+Z2wsU3F1YXJlVXNlclJvdW5kOigpPT5tbCxTcXVhcmVYOigpPT54bCxTcXVhcmVzRXhjbHVkZTooKT0+ZkQsU3F1YXJlc0ludGVyc2VjdDooKT0+dUQsU3F1YXJlc1N1YnRyYWN0OigpPT5wRCxTcXVhcmVzVW5pdGU6KCk9Pm1ELFNxdWlyY2xlOigpPT5nRCxTcXVpcmNsZURhc2hlZDooKT0+aEQsU3F1aXJyZWw6KCk9PnhELFN0YW1wOigpPT5iRCxTdGFyOigpPT53RCxTdGFySGFsZjooKT0+eUQsU3Rhck9mZjooKT0+dkQsU3RhcnM6KCk9PnYzLFN0ZXBCYWNrOigpPT5NRCxTdGVwRm9yd2FyZDooKT0+ekQsU3RldGhvc2NvcGU6KCk9PmtELFN0aWNrZXI6KCk9PlNELFN0aWNreU5vdGU6KCk9PkxELFN0b25lOigpPT5DRCxTdG9wQ2lyY2xlOigpPT5GMCxTdG9yZTooKT0+VEQsU3RyZXRjaEhvcml6b250YWw6KCk9Pl9ELFN0cmV0Y2hWZXJ0aWNhbDooKT0+QUQsU3RyaWtldGhyb3VnaDooKT0+JEQsU3Vic2NyaXB0OigpPT5ERCxTdWJ0aXRsZXM6KCk9PlhuLFN1bjooKT0+RkQsU3VuRGltOigpPT5FRCxTdW5NZWRpdW06KCk9Pk5ELFN1bk1vb246KCk9PlBELFN1blNub3c6KCk9PklELFN1bnJpc2U6KCk9Pk9ELFN1bnNldDooKT0+QkQsU3VwZXJzY3JpcHQ6KCk9PlJELFN3YXRjaEJvb2s6KCk9PkhELFN3aXNzRnJhbmM6KCk9PnFELFN3aXRjaENhbWVyYTooKT0+VkQsU3dvcmQ6KCk9PlVELFN3b3JkczooKT0+akQsU3lyaW5nZTooKT0+V0QsVGFibGU6KCk9PmVFLFRhYmxlMjooKT0+R0QsVGFibGVDZWxsc01lcmdlOigpPT5ZRCxUYWJsZUNlbGxzU3BsaXQ6KCk9PlpELFRhYmxlQ29sdW1uc1NwbGl0OigpPT5RRCxUYWJsZUNvbmZpZzooKT0+UGksVGFibGVPZkNvbnRlbnRzOigpPT5YRCxUYWJsZVByb3BlcnRpZXM6KCk9PktELFRhYmxlUm93c1NwbGl0OigpPT5KRCxUYWJsZXQ6KCk9PmFFLFRhYmxldFNtYXJ0cGhvbmU6KCk9PnRFLFRhYmxldHM6KCk9PnJFLFRhZzooKT0+aUUsVGFnczooKT0+b0UsVGFsbHkxOigpPT5zRSxUYWxseTI6KCk9Pm5FLFRhbGx5MzooKT0+bEUsVGFsbHk0OigpPT5jRSxUYWxseTU6KCk9PmRFLFRhbmdlbnQ6KCk9PmZFLFRhcmdldDooKT0+dUUsVGVsZXNjb3BlOigpPT5wRSxUZW50OigpPT5tRSxUZW50VHJlZTooKT0+aEUsVGVybWluYWw6KCk9PmdFLFRlcm1pbmFsU3F1YXJlOigpPT5obCxUZXN0VHViZTooKT0+eEUsVGVzdFR1YmUyOigpPT5ibCxUZXN0VHViZURpYWdvbmFsOigpPT5ibCxUZXN0VHViZXM6KCk9PmJFLFRleHQ6KCk9PkhpLFRleHRBbGlnbkNlbnRlcjooKT0+dmwsVGV4dEFsaWduRW5kOigpPT55bCxUZXh0QWxpZ25KdXN0aWZ5OigpPT53bCxUZXh0QWxpZ25TdGFydDooKT0+SGksVGV4dEN1cnNvcjooKT0+eUUsVGV4dEN1cnNvcklucHV0OigpPT52RSxUZXh0SW5pdGlhbDooKT0+TWwsVGV4dFF1b3RlOigpPT53RSxUZXh0U2VhcmNoOigpPT5NRSxUZXh0U2VsZWN0OigpPT56bCxUZXh0U2VsZWN0aW9uOigpPT56bCxUZXh0V3JhcDooKT0+a2wsVGhlYXRlcjooKT0+ekUsVGhlcm1vbWV0ZXI6KCk9PkNFLFRoZXJtb21ldGVyU25vd2ZsYWtlOigpPT5rRSxUaGVybW9tZXRlclN1bjooKT0+U0UsVGh1bWJzRG93bjooKT0+TEUsVGh1bWJzVXA6KCk9PlRFLFRpY2tldDooKT0+UEUsVGlja2V0Q2hlY2s6KCk9Pl9FLFRpY2tldE1pbnVzOigpPT5BRSxUaWNrZXRQZXJjZW50OigpPT4kRSxUaWNrZXRQbHVzOigpPT5ERSxUaWNrZXRTbGFzaDooKT0+RUUsVGlja2V0WDooKT0+TkUsVGlja2V0czooKT0+RkUsVGlja2V0c1BsYW5lOigpPT5JRSxUaW1lcjooKT0+UkUsVGltZXJPZmY6KCk9PkJFLFRpbWVyUmVzZXQ6KCk9Pk9FLFRvZ2dsZUxlZnQ6KCk9PkhFLFRvZ2dsZVJpZ2h0OigpPT5xRSxUb2lsZXQ6KCk9PlZFLFRvb2xDYXNlOigpPT5VRSxUb29sYm94OigpPT5qRSxUb3JuYWRvOigpPT5XRSxUb3J1czooKT0+R0UsVG91Y2hwYWQ6KCk9PlpFLFRvdWNocGFkT2ZmOigpPT5ZRSxUb3dlckNvbnRyb2w6KCk9PlhFLFRveUJyaWNrOigpPT5RRSxUcmFjdG9yOigpPT5KRSxUcmFmZmljQ29uZTooKT0+S0UsVHJhaW46KCk9PlNsLFRyYWluRnJvbnQ6KCk9PnROLFRyYWluRnJvbnRUdW5uZWw6KCk9PmVOLFRyYWluVHJhY2s6KCk9PmFOLFRyYW1Gcm9udDooKT0+U2wsVHJhbnNnZW5kZXI6KCk9PnJOLFRyYXNoOigpPT5vTixUcmFzaDI6KCk9PmlOLFRyZWVEZWNpZHVvdXM6KCk9PnNOLFRyZWVQYWxtOigpPT5DbCxUcmVlUGluZTooKT0+bk4sVHJlZXM6KCk9PmxOLFRyZWxsbzooKT0+Y04sVHJlbmRpbmdEb3duOigpPT5kTixUcmVuZGluZ1VwOigpPT51TixUcmVuZGluZ1VwRG93bjooKT0+Zk4sVHJpYW5nbGU6KCk9Pm1OLFRyaWFuZ2xlQWxlcnQ6KCk9PkxsLFRyaWFuZ2xlRGFzaGVkOigpPT5wTixUcmlhbmdsZVJpZ2h0OigpPT5oTixUcm9waHk6KCk9PmdOLFRydWNrOigpPT5iTixUcnVja0VsZWN0cmljOigpPT54TixUdXJraXNoTGlyYTooKT0+dk4sVHVybnRhYmxlOigpPT55TixUdXJ0bGU6KCk9PndOLFR2OigpPT56TixUdjI6KCk9PlRsLFR2TWluaW1hbDooKT0+VGwsVHZNaW5pbWFsUGxheTooKT0+TU4sVHdpdGNoOigpPT5rTixUd2l0dGVyOigpPT5TTixUeXBlOigpPT5MTixUeXBlT3V0bGluZTooKT0+Q04sVW1icmVsbGE6KCk9Pl9OLFVtYnJlbGxhT2ZmOigpPT5UTixVbmRlcmxpbmU6KCk9PkFOLFVuZG86KCk9PkVOLFVuZG8yOigpPT4kTixVbmRvRG90OigpPT5ETixVbmZvbGRIb3Jpem9udGFsOigpPT5OTixVbmZvbGRWZXJ0aWNhbDooKT0+UE4sVW5ncm91cDooKT0+SU4sVW5pdmVyc2l0eTooKT0+X2wsVW5saW5rOigpPT5PTixVbmxpbmsyOigpPT5GTixVbmxvY2s6KCk9PlY0LFVubG9ja0tleWhvbGU6KCk9PnE0LFVucGx1ZzooKT0+Qk4sVXBsb2FkOigpPT5ITixVcGxvYWRDbG91ZDooKT0+VTAsVXNiOigpPT5STixVc2VyOigpPT5KTixVc2VyMjooKT0+TmwsVXNlckNoZWNrOigpPT5xTixVc2VyQ2hlY2syOigpPT5BbCxVc2VyQ2lyY2xlOigpPT5CMCxVc2VyQ2lyY2xlMjooKT0+TzAsVXNlckNvZzooKT0+Vk4sVXNlckNvZzI6KCk9PiRsLFVzZXJMb2NrOigpPT5VTixVc2VyTWludXM6KCk9PmpOLFVzZXJNaW51czI6KCk9PkRsLFVzZXJQZW46KCk9PldOLFVzZXJQbHVzOigpPT5HTixVc2VyUGx1czI6KCk9PkVsLFVzZXJSb3VuZDooKT0+TmwsVXNlclJvdW5kQ2hlY2s6KCk9PkFsLFVzZXJSb3VuZENvZzooKT0+JGwsVXNlclJvdW5kTWludXM6KCk9PkRsLFVzZXJSb3VuZFBlbjooKT0+WU4sVXNlclJvdW5kUGx1czooKT0+RWwsVXNlclJvdW5kU2VhcmNoOigpPT5aTixVc2VyUm91bmRYOigpPT5QbCxVc2VyU2VhcmNoOigpPT5YTixVc2VyU3F1YXJlOigpPT5nbCxVc2VyU3F1YXJlMjooKT0+bWwsVXNlclN0YXI6KCk9PlFOLFVzZXJYOigpPT5LTixVc2VyWDI6KCk9PlBsLFVzZXJzOigpPT5lUCxVc2VyczI6KCk9PklsLFVzZXJzUm91bmQ6KCk9PklsLFV0ZW5zaWxzOigpPT5PbCxVdGVuc2lsc0Nyb3NzZWQ6KCk9PkZsLFV0aWxpdHlQb2xlOigpPT5hUCxWYW46KCk9PnRQLFZhcmlhYmxlOigpPT5yUCxWYXVsdDooKT0+aVAsVmVjdG9yU3F1YXJlOigpPT5vUCxWZWdhbjooKT0+c1AsVmVuZXRpYW5NYXNrOigpPT5uUCxWZW51czooKT0+bFAsVmVudXNBbmRNYXJzOigpPT5jUCxWZXJpZmllZDooKT0+VW4sVmlicmF0ZTooKT0+ZlAsVmlicmF0ZU9mZjooKT0+ZFAsVmlkZW86KCk9PnBQLFZpZGVvT2ZmOigpPT51UCxWaWRlb3RhcGU6KCk9Pm1QLFZpZXc6KCk9PmdQLFZvaWNlbWFpbDooKT0+aFAsVm9sbGV5YmFsbDooKT0+eFAsVm9sdW1lOigpPT5NUCxWb2x1bWUxOigpPT5iUCxWb2x1bWUyOigpPT52UCxWb2x1bWVPZmY6KCk9PnlQLFZvbHVtZVg6KCk9PndQLFZvdGU6KCk9PnpQLFdhbGxldDooKT0+U1AsV2FsbGV0MjooKT0+QmwsV2FsbGV0Q2FyZHM6KCk9PmtQLFdhbGxldE1pbmltYWw6KCk9PkJsLFdhbGxwYXBlcjooKT0+Q1AsV2FuZDooKT0+TFAsV2FuZDI6KCk9PlJsLFdhbmRTcGFya2xlczooKT0+UmwsV2FyZWhvdXNlOigpPT5UUCxXYXNoaW5nTWFjaGluZTooKT0+X1AsV2F0Y2g6KCk9PkFQLFdhdmVzOigpPT5OUCxXYXZlc0Fycm93RG93bjooKT0+JFAsV2F2ZXNBcnJvd1VwOigpPT5EUCxXYXZlc0xhZGRlcjooKT0+RVAsV2F5cG9pbnRzOigpPT5QUCxXZWJjYW06KCk9PklQLFdlYmhvb2s6KCk9Pk9QLFdlYmhvb2tPZmY6KCk9PkZQLFdlaWdodDooKT0+UlAsV2VpZ2h0VGlsZGU6KCk9PkJQLFdoZWF0OigpPT5xUCxXaGVhdE9mZjooKT0+SFAsV2hvbGVXb3JkOigpPT5WUCxXaWZpOigpPT5RUCxXaWZpQ29nOigpPT5VUCxXaWZpSGlnaDooKT0+V1AsV2lmaUxvdzooKT0+alAsV2lmaU9mZjooKT0+R1AsV2lmaVBlbjooKT0+WVAsV2lmaVN5bmM6KCk9PlpQLFdpZmlaZXJvOigpPT5YUCxXaW5kOigpPT5KUCxXaW5kQXJyb3dEb3duOigpPT5LUCxXaW5lOigpPT50SSxXaW5lT2ZmOigpPT5lSSxXb3JrZmxvdzooKT0+ckksV29ybTooKT0+YUksV3JhcFRleHQ6KCk9PmtsLFdyZW5jaDooKT0+aUksWDooKT0+b0ksWENpcmNsZTooKT0+UjAsWE9jdGFnb246KCk9PlE0LFhTcXVhcmU6KCk9PnhsLFlvdXR1YmU6KCk9PnNJLFphcDooKT0+bEksWmFwT2ZmOigpPT5uSSxab29tSW46KCk9PmNJLFpvb21PdXQ6KCk9PmRJfSk7dmFyIHdJdD1uKCgpPT57RzRlKCk7WTRlKCk7WjRlKCk7WDRlKCk7UTRlKCk7SzRlKCk7SjRlKCk7ZTNlKCk7dDNlKCk7YTNlKCk7cjNlKCk7aTNlKCk7bzNlKCk7czNlKCk7bjNlKCk7bDNlKCk7YzNlKCk7ZDNlKCk7ZjNlKCk7dTNlKCk7cDNlKCk7aDNlKCk7bTNlKCk7ZzNlKCk7eDNlKCk7YjNlKCk7djNlKCk7eTNlKCk7dzNlKCk7TTNlKCk7ejNlKCk7azNlKCk7UzNlKCk7QzNlKCk7TDNlKCk7VDNlKCk7XzNlKCk7QTNlKCk7JDNlKCk7RDNlKCk7RTNlKCk7TjNlKCk7UDNlKCk7STNlKCk7RjNlKCk7TzNlKCk7QjNlKCk7UjNlKCk7SDNlKCk7cTNlKCk7VjNlKCk7VTNlKCk7ajNlKCk7VzNlKCk7RzNlKCk7WTNlKCk7WjNlKCk7WDNlKCk7UTNlKCk7SzNlKCk7SjNlKCk7ZWxlKCk7dGxlKCk7YWxlKCk7cmxlKCk7aWxlKCk7b2xlKCk7c2xlKCk7bmxlKCk7bGxlKCk7Y2xlKCk7ZGxlKCk7ZmxlKCk7dWxlKCk7cGxlKCk7aGxlKCk7bWxlKCk7Z2xlKCk7eGxlKCk7YmxlKCk7dmxlKCk7eWxlKCk7d2xlKCk7TWxlKCk7emxlKCk7a2xlKCk7U2xlKCk7Q2xlKCk7TGxlKCk7VGxlKCk7X2xlKCk7QWxlKCk7JGxlKCk7RGxlKCk7RWxlKCk7TmxlKCk7UGxlKCk7SWxlKCk7RmxlKCk7T2xlKCk7QmxlKCk7UmxlKCk7SGxlKCk7cWxlKCk7VmxlKCk7VWxlKCk7amxlKCk7V2xlKCk7R2xlKCk7WWxlKCk7WmxlKCk7WGxlKCk7UWxlKCk7S2xlKCk7SmxlKCk7ZWNlKCk7dGNlKCk7YWNlKCk7cmNlKCk7aWNlKCk7b2NlKCk7c2NlKCk7bmNlKCk7bGNlKCk7Y2NlKCk7ZGNlKCk7ZmNlKCk7dWNlKCk7cGNlKCk7aGNlKCk7bWNlKCk7Z2NlKCk7eGNlKCk7YmNlKCk7dmNlKCk7eWNlKCk7d2NlKCk7TWNlKCk7emNlKCk7a2NlKCk7U2NlKCk7Q2NlKCk7TGNlKCk7VGNlKCk7X2NlKCk7QWNlKCk7JGNlKCk7RGNlKCk7RWNlKCk7TmNlKCk7UGNlKCk7SWNlKCk7RmNlKCk7T2NlKCk7QmNlKCk7UmNlKCk7SGNlKCk7cWNlKCk7VmNlKCk7VWNlKCk7amNlKCk7V2NlKCk7R2NlKCk7WWNlKCk7WmNlKCk7WGNlKCk7UWNlKCk7S2NlKCk7SmNlKCk7ZTZlKCk7dDZlKCk7YTZlKCk7cjZlKCk7aTZlKCk7bzZlKCk7czZlKCk7bjZlKCk7bDZlKCk7YzZlKCk7ZDZlKCk7ZjZlKCk7dTZlKCk7cDZlKCk7aDZlKCk7bTZlKCk7ZzZlKCk7eDZlKCk7YjZlKCk7djZlKCk7eTZlKCk7dzZlKCk7TTZlKCk7ejZlKCk7azZlKCk7UzZlKCk7QzZlKCk7TDZlKCk7VDZlKCk7XzZlKCk7QTZlKCk7JDZlKCk7RDZlKCk7RTZlKCk7TjZlKCk7UDZlKCk7STZlKCk7RjZlKCk7TzZlKCk7QjZlKCk7UjZlKCk7SDZlKCk7cTZlKCk7VjZlKCk7VTZlKCk7ajZlKCk7VzZlKCk7RzZlKCk7WTZlKCk7WjZlKCk7WDZlKCk7UTZlKCk7SzZlKCk7SjZlKCk7ZTVlKCk7dDVlKCk7YTVlKCk7cjVlKCk7aTVlKCk7bzVlKCk7czVlKCk7bjVlKCk7bDVlKCk7YzVlKCk7ZDVlKCk7ZjVlKCk7dTVlKCk7cDVlKCk7aDVlKCk7bTVlKCk7ZzVlKCk7eDVlKCk7YjVlKCk7djVlKCk7eTVlKCk7dzVlKCk7TTVlKCk7ejVlKCk7azVlKCk7UzVlKCk7QzVlKCk7TDVlKCk7VDVlKCk7XzVlKCk7QTVlKCk7JDVlKCk7RDVlKCk7RTVlKCk7TjVlKCk7UDVlKCk7STVlKCk7RjVlKCk7TzVlKCk7QjVlKCk7UjVlKCk7SDVlKCk7cTVlKCk7VjVlKCk7VTVlKCk7ajVlKCk7VzVlKCk7RzVlKCk7WTVlKCk7WjVlKCk7WDVlKCk7UTVlKCk7SzVlKCk7SjVlKCk7ZThlKCk7dDhlKCk7YThlKCk7cjhlKCk7aThlKCk7bzhlKCk7czhlKCk7bjhlKCk7bDhlKCk7YzhlKCk7ZDhlKCk7ZjhlKCk7dThlKCk7cDhlKCk7aDhlKCk7bThlKCk7ZzhlKCk7eDhlKCk7YjhlKCk7djhlKCk7eThlKCk7dzhlKCk7TThlKCk7ejhlKCk7azhlKCk7UzhlKCk7QzhlKCk7TDhlKCk7VDhlKCk7XzhlKCk7QThlKCk7JDhlKCk7RDhlKCk7RThlKCk7TjhlKCk7UDhlKCk7SThlKCk7RjhlKCk7TzhlKCk7QjhlKCk7UjhlKCk7SDhlKCk7cThlKCk7VjhlKCk7VThlKCk7ajhlKCk7VzhlKCk7RzhlKCk7WThlKCk7WjhlKCk7WDhlKCk7UThlKCk7SzhlKCk7SjhlKCk7ZWRlKCk7dGRlKCk7YWRlKCk7cmRlKCk7aWRlKCk7b2RlKCk7c2RlKCk7bmRlKCk7bGRlKCk7Y2RlKCk7ZGRlKCk7ZmRlKCk7dWRlKCk7cGRlKCk7aGRlKCk7bWRlKCk7Z2RlKCk7eGRlKCk7YmRlKCk7dmRlKCk7eWRlKCk7d2RlKCk7TWRlKCk7emRlKCk7a2RlKCk7U2RlKCk7Q2RlKCk7TGRlKCk7VGRlKCk7X2RlKCk7QWRlKCk7JGRlKCk7RGRlKCk7RWRlKCk7TmRlKCk7UGRlKCk7SWRlKCk7RmRlKCk7T2RlKCk7QmRlKCk7UmRlKCk7SGRlKCk7cWRlKCk7VmRlKCk7VWRlKCk7amRlKCk7V2RlKCk7R2RlKCk7WWRlKCk7WmRlKCk7WGRlKCk7UWRlKCk7S2RlKCk7SmRlKCk7ZTdlKCk7dDdlKCk7YTdlKCk7cjdlKCk7aTdlKCk7bzdlKCk7czdlKCk7bjdlKCk7bDdlKCk7YzdlKCk7ZDdlKCk7ZjdlKCk7dTdlKCk7cDdlKCk7aDdlKCk7bTdlKCk7ZzdlKCk7eDdlKCk7YjdlKCk7djdlKCk7eTdlKCk7dzdlKCk7TTdlKCk7ejdlKCk7azdlKCk7UzdlKCk7QzdlKCk7TDdlKCk7VDdlKCk7XzdlKCk7QTdlKCk7JDdlKCk7RDdlKCk7RTdlKCk7TjdlKCk7UDdlKCk7STdlKCk7RjdlKCk7TzdlKCk7QjdlKCk7UjdlKCk7SDdlKCk7cTdlKCk7VjdlKCk7VTdlKCk7ajdlKCk7VzdlKCk7RzdlKCk7WTdlKCk7WjdlKCk7WDdlKCk7UTdlKCk7SzdlKCk7SjdlKCk7ZWZlKCk7dGZlKCk7YWZlKCk7cmZlKCk7aWZlKCk7b2ZlKCk7c2ZlKCk7bmZlKCk7bGZlKCk7Y2ZlKCk7ZGZlKCk7ZmZlKCk7dWZlKCk7cGZlKCk7aGZlKCk7bWZlKCk7Z2ZlKCk7eGZlKCk7YmZlKCk7dmZlKCk7eWZlKCk7d2ZlKCk7TWZlKCk7emZlKCk7a2ZlKCk7U2ZlKCk7Q2ZlKCk7TGZlKCk7VGZlKCk7X2ZlKCk7QWZlKCk7JGZlKCk7RGZlKCk7RWZlKCk7TmZlKCk7UGZlKCk7SWZlKCk7RmZlKCk7T2ZlKCk7QmZlKCk7UmZlKCk7SGZlKCk7cWZlKCk7VmZlKCk7VWZlKCk7amZlKCk7V2ZlKCk7R2ZlKCk7WWZlKCk7WmZlKCk7WGZlKCk7UWZlKCk7S2ZlKCk7SmZlKCk7ZXVlKCk7dHVlKCk7YXVlKCk7cnVlKCk7aXVlKCk7b3VlKCk7c3VlKCk7bnVlKCk7bHVlKCk7Y3VlKCk7ZHVlKCk7ZnVlKCk7dXVlKCk7cHVlKCk7aHVlKCk7bXVlKCk7Z3VlKCk7eHVlKCk7YnVlKCk7dnVlKCk7eXVlKCk7d3VlKCk7TXVlKCk7enVlKCk7a3VlKCk7U3VlKCk7Q3VlKCk7THVlKCk7VHVlKCk7X3VlKCk7QXVlKCk7JHVlKCk7RHVlKCk7RXVlKCk7TnVlKCk7UHVlKCk7SXVlKCk7RnVlKCk7T3VlKCk7QnVlKCk7UnVlKCk7SHVlKCk7cXVlKCk7VnVlKCk7VXVlKCk7anVlKCk7V3VlKCk7R3VlKCk7WXVlKCk7WnVlKCk7WHVlKCk7UXVlKCk7S3VlKCk7SnVlKCk7ZXBlKCk7dHBlKCk7YXBlKCk7cnBlKCk7aXBlKCk7b3BlKCk7c3BlKCk7bnBlKCk7bHBlKCk7Y3BlKCk7ZHBlKCk7ZnBlKCk7dXBlKCk7cHBlKCk7aHBlKCk7bXBlKCk7Z3BlKCk7eHBlKCk7YnBlKCk7dnBlKCk7eXBlKCk7d3BlKCk7TXBlKCk7enBlKCk7a3BlKCk7U3BlKCk7Q3BlKCk7THBlKCk7VHBlKCk7X3BlKCk7QXBlKCk7JHBlKCk7RHBlKCk7RXBlKCk7TnBlKCk7UHBlKCk7SXBlKCk7RnBlKCk7T3BlKCk7QnBlKCk7UnBlKCk7SHBlKCk7cXBlKCk7VnBlKCk7VXBlKCk7anBlKCk7V3BlKCk7R3BlKCk7WXBlKCk7WnBlKCk7WHBlKCk7UXBlKCk7S3BlKCk7SnBlKCk7ZTllKCk7dDllKCk7YTllKCk7cjllKCk7aTllKCk7bzllKCk7czllKCk7bjllKCk7bDllKCk7YzllKCk7ZDllKCk7ZjllKCk7dTllKCk7cDllKCk7aDllKCk7bTllKCk7ZzllKCk7eDllKCk7YjllKCk7djllKCk7eTllKCk7dzllKCk7TTllKCk7ejllKCk7azllKCk7UzllKCk7QzllKCk7TDllKCk7VDllKCk7XzllKCk7QTllKCk7JDllKCk7RDllKCk7RTllKCk7TjllKCk7UDllKCk7STllKCk7RjllKCk7TzllKCk7QjllKCk7UjllKCk7SDllKCk7cTllKCk7VjllKCk7VTllKCk7ajllKCk7VzllKCk7RzllKCk7WTllKCk7WjllKCk7WDllKCk7UTllKCk7SzllKCk7SjllKCk7ZWhlKCk7dGhlKCk7YWhlKCk7cmhlKCk7aWhlKCk7b2hlKCk7c2hlKCk7bmhlKCk7bGhlKCk7Y2hlKCk7ZGhlKCk7ZmhlKCk7dWhlKCk7cGhlKCk7aGhlKCk7bWhlKCk7Z2hlKCk7eGhlKCk7YmhlKCk7dmhlKCk7eWhlKCk7d2hlKCk7TWhlKCk7emhlKCk7a2hlKCk7U2hlKCk7Q2hlKCk7TGhlKCk7VGhlKCk7X2hlKCk7QWhlKCk7JGhlKCk7RGhlKCk7RWhlKCk7TmhlKCk7UGhlKCk7SWhlKCk7RmhlKCk7T2hlKCk7QmhlKCk7UmhlKCk7SGhlKCk7cWhlKCk7VmhlKCk7VWhlKCk7amhlKCk7V2hlKCk7R2hlKCk7WWhlKCk7WmhlKCk7WGhlKCk7UWhlKCk7S2hlKCk7SmhlKCk7ZW1lKCk7dG1lKCk7YW1lKCk7cm1lKCk7aW1lKCk7b21lKCk7c21lKCk7bm1lKCk7bG1lKCk7Y21lKCk7ZG1lKCk7Zm1lKCk7dW1lKCk7cG1lKCk7aG1lKCk7bW1lKCk7Z21lKCk7eG1lKCk7Ym1lKCk7dm1lKCk7eW1lKCk7d21lKCk7TW1lKCk7em1lKCk7a21lKCk7U21lKCk7Q21lKCk7TG1lKCk7VG1lKCk7X21lKCk7QW1lKCk7JG1lKCk7RG1lKCk7RW1lKCk7Tm1lKCk7UG1lKCk7SW1lKCk7Rm1lKCk7T21lKCk7Qm1lKCk7Um1lKCk7SG1lKCk7cW1lKCk7Vm1lKCk7VW1lKCk7am1lKCk7V21lKCk7R21lKCk7WW1lKCk7Wm1lKCk7WG1lKCk7UW1lKCk7S21lKCk7Sm1lKCk7ZWdlKCk7dGdlKCk7YWdlKCk7cmdlKCk7aWdlKCk7b2dlKCk7c2dlKCk7bmdlKCk7bGdlKCk7Y2dlKCk7ZGdlKCk7ZmdlKCk7dWdlKCk7cGdlKCk7aGdlKCk7bWdlKCk7Z2dlKCk7eGdlKCk7YmdlKCk7dmdlKCk7eWdlKCk7d2dlKCk7TWdlKCk7emdlKCk7a2dlKCk7U2dlKCk7Q2dlKCk7TGdlKCk7VGdlKCk7X2dlKCk7QWdlKCk7JGdlKCk7RGdlKCk7RWdlKCk7TmdlKCk7UGdlKCk7SWdlKCk7RmdlKCk7T2dlKCk7QmdlKCk7UmdlKCk7SGdlKCk7cWdlKCk7VmdlKCk7VWdlKCk7amdlKCk7V2dlKCk7R2dlKCk7WWdlKCk7WmdlKCk7WGdlKCk7UWdlKCk7S2dlKCk7SmdlKCk7ZXhlKCk7dHhlKCk7YXhlKCk7cnhlKCk7aXhlKCk7b3hlKCk7c3hlKCk7bnhlKCk7bHhlKCk7Y3hlKCk7ZHhlKCk7ZnhlKCk7dXhlKCk7cHhlKCk7aHhlKCk7bXhlKCk7Z3hlKCk7eHhlKCk7YnhlKCk7dnhlKCk7eXhlKCk7d3hlKCk7TXhlKCk7enhlKCk7a3hlKCk7U3hlKCk7Q3hlKCk7THhlKCk7VHhlKCk7X3hlKCk7QXhlKCk7JHhlKCk7RHhlKCk7RXhlKCk7TnhlKCk7UHhlKCk7SXhlKCk7RnhlKCk7T3hlKCk7QnhlKCk7UnhlKCk7SHhlKCk7cXhlKCk7VnhlKCk7VXhlKCk7anhlKCk7V3hlKCk7R3hlKCk7WXhlKCk7WnhlKCk7WHhlKCk7UXhlKCk7S3hlKCk7SnhlKCk7ZWJlKCk7dGJlKCk7YWJlKCk7cmJlKCk7aWJlKCk7b2JlKCk7c2JlKCk7bmJlKCk7bGJlKCk7Y2JlKCk7ZGJlKCk7ZmJlKCk7dWJlKCk7cGJlKCk7aGJlKCk7bWJlKCk7Z2JlKCk7eGJlKCk7YmJlKCk7dmJlKCk7eWJlKCk7d2JlKCk7TWJlKCk7emJlKCk7a2JlKCk7U2JlKCk7Q2JlKCk7TGJlKCk7VGJlKCk7X2JlKCk7QWJlKCk7JGJlKCk7RGJlKCk7RWJlKCk7TmJlKCk7UGJlKCk7SWJlKCk7RmJlKCk7T2JlKCk7QmJlKCk7UmJlKCk7SGJlKCk7cWJlKCk7VmJlKCk7VWJlKCk7amJlKCk7V2JlKCk7R2JlKCk7WWJlKCk7WmJlKCk7WGJlKCk7UWJlKCk7S2JlKCk7SmJlKCk7ZXZlKCk7dHZlKCk7YXZlKCk7cnZlKCk7aXZlKCk7b3ZlKCk7c3ZlKCk7bnZlKCk7bHZlKCk7Y3ZlKCk7ZHZlKCk7ZnZlKCk7dXZlKCk7cHZlKCk7aHZlKCk7bXZlKCk7Z3ZlKCk7eHZlKCk7YnZlKCk7dnZlKCk7eXZlKCk7d3ZlKCk7TXZlKCk7enZlKCk7a3ZlKCk7U3ZlKCk7Q3ZlKCk7THZlKCk7VHZlKCk7X3ZlKCk7QXZlKCk7JHZlKCk7RHZlKCk7RXZlKCk7TnZlKCk7UHZlKCk7SXZlKCk7RnZlKCk7T3ZlKCk7QnZlKCk7UnZlKCk7SHZlKCk7cXZlKCk7VnZlKCk7VXZlKCk7anZlKCk7V3ZlKCk7R3ZlKCk7WXZlKCk7WnZlKCk7WHZlKCk7UXZlKCk7S3ZlKCk7SnZlKCk7ZXllKCk7dHllKCk7YXllKCk7cnllKCk7aXllKCk7b3llKCk7c3llKCk7bnllKCk7bHllKCk7Y3llKCk7ZHllKCk7ZnllKCk7dXllKCk7cHllKCk7aHllKCk7bXllKCk7Z3llKCk7eHllKCk7YnllKCk7dnllKCk7eXllKCk7d3llKCk7TXllKCk7enllKCk7a3llKCk7U3llKCk7Q3llKCk7THllKCk7VHllKCk7X3llKCk7QXllKCk7JHllKCk7RHllKCk7RXllKCk7TnllKCk7UHllKCk7SXllKCk7RnllKCk7T3llKCk7QnllKCk7UnllKCk7SHllKCk7cXllKCk7VnllKCk7VXllKCk7anllKCk7V3llKCk7R3llKCk7WXllKCk7WnllKCk7WHllKCk7UXllKCk7S3llKCk7SnllKCk7ZXdlKCk7dHdlKCk7YXdlKCk7cndlKCk7aXdlKCk7b3dlKCk7c3dlKCk7bndlKCk7bHdlKCk7Y3dlKCk7ZHdlKCk7ZndlKCk7dXdlKCk7cHdlKCk7aHdlKCk7bXdlKCk7Z3dlKCk7eHdlKCk7YndlKCk7dndlKCk7eXdlKCk7d3dlKCk7TXdlKCk7endlKCk7a3dlKCk7U3dlKCk7Q3dlKCk7THdlKCk7VHdlKCk7X3dlKCk7QXdlKCk7JHdlKCk7RHdlKCk7RXdlKCk7TndlKCk7UHdlKCk7SXdlKCk7RndlKCk7T3dlKCk7QndlKCk7UndlKCk7SHdlKCk7cXdlKCk7VndlKCk7VXdlKCk7andlKCk7V3dlKCk7R3dlKCk7WXdlKCk7WndlKCk7WHdlKCk7UXdlKCk7S3dlKCk7SndlKCk7ZU1lKCk7dE1lKCk7YU1lKCk7ck1lKCk7aU1lKCk7b01lKCk7c01lKCk7bk1lKCk7bE1lKCk7Y01lKCk7ZE1lKCk7Zk1lKCk7dU1lKCk7cE1lKCk7aE1lKCk7bU1lKCk7Z01lKCk7eE1lKCk7Yk1lKCk7dk1lKCk7eU1lKCk7d01lKCk7TU1lKCk7ek1lKCk7a01lKCk7U01lKCk7Q01lKCk7TE1lKCk7VE1lKCk7X01lKCk7QU1lKCk7JE1lKCk7RE1lKCk7RU1lKCk7Tk1lKCk7UE1lKCk7SU1lKCk7Rk1lKCk7T01lKCk7Qk1lKCk7Uk1lKCk7SE1lKCk7cU1lKCk7Vk1lKCk7VU1lKCk7ak1lKCk7V01lKCk7R01lKCk7WU1lKCk7Wk1lKCk7WE1lKCk7UU1lKCk7S01lKCk7Sk1lKCk7ZXplKCk7dHplKCk7YXplKCk7cnplKCk7aXplKCk7b3plKCk7c3plKCk7bnplKCk7bHplKCk7Y3plKCk7ZHplKCk7ZnplKCk7dXplKCk7cHplKCk7aHplKCk7bXplKCk7Z3plKCk7eHplKCk7YnplKCk7dnplKCk7eXplKCk7d3plKCk7TXplKCk7enplKCk7a3plKCk7U3plKCk7Q3plKCk7THplKCk7VHplKCk7X3plKCk7QXplKCk7JHplKCk7RHplKCk7RXplKCk7TnplKCk7UHplKCk7SXplKCk7RnplKCk7T3plKCk7QnplKCk7UnplKCk7SHplKCk7cXplKCk7VnplKCk7VXplKCk7anplKCk7V3plKCk7R3plKCk7WXplKCk7WnplKCk7WHplKCk7UXplKCk7S3plKCk7SnplKCk7ZWtlKCk7dGtlKCk7YWtlKCk7cmtlKCk7aWtlKCk7b2tlKCk7c2tlKCk7bmtlKCk7bGtlKCk7Y2tlKCk7ZGtlKCk7ZmtlKCk7dWtlKCk7cGtlKCk7aGtlKCk7bWtlKCk7Z2tlKCk7eGtlKCk7YmtlKCk7dmtlKCk7eWtlKCk7d2tlKCk7TWtlKCk7emtlKCk7a2tlKCk7U2tlKCk7Q2tlKCk7TGtlKCk7VGtlKCk7X2tlKCk7QWtlKCk7JGtlKCk7RGtlKCk7RWtlKCk7TmtlKCk7UGtlKCk7SWtlKCk7RmtlKCk7T2tlKCk7QmtlKCk7UmtlKCk7SGtlKCk7cWtlKCk7VmtlKCk7VWtlKCk7amtlKCk7V2tlKCk7R2tlKCk7WWtlKCk7WmtlKCk7WGtlKCk7UWtlKCk7S2tlKCk7SmtlKCk7ZVNlKCk7dFNlKCk7YVNlKCk7clNlKCk7aVNlKCk7b1NlKCk7c1NlKCk7blNlKCk7bFNlKCk7Y1NlKCk7ZFNlKCk7ZlNlKCk7dVNlKCk7cFNlKCk7aFNlKCk7bVNlKCk7Z1NlKCk7eFNlKCk7YlNlKCk7dlNlKCk7eVNlKCk7d1NlKCk7TVNlKCk7elNlKCk7a1NlKCk7U1NlKCk7Q1NlKCk7TFNlKCk7VFNlKCk7X1NlKCk7QVNlKCk7JFNlKCk7RFNlKCk7RVNlKCk7TlNlKCk7UFNlKCk7SVNlKCk7RlNlKCk7T1NlKCk7QlNlKCk7UlNlKCk7SFNlKCk7cVNlKCk7VlNlKCk7VVNlKCk7alNlKCk7V1NlKCk7R1NlKCk7WVNlKCk7WlNlKCk7WFNlKCk7UVNlKCk7S1NlKCk7SlNlKCk7ZUNlKCk7dENlKCk7YUNlKCk7ckNlKCk7aUNlKCk7b0NlKCk7c0NlKCk7bkNlKCk7bENlKCk7Y0NlKCk7ZENlKCk7ZkNlKCk7dUNlKCk7cENlKCk7aENlKCk7bUNlKCk7Z0NlKCk7eENlKCk7YkNlKCk7dkNlKCk7eUNlKCk7d0NlKCk7TUNlKCk7ekNlKCk7a0NlKCk7U0NlKCk7Q0NlKCk7TENlKCk7VENlKCk7X0NlKCk7QUNlKCk7JENlKCk7RENlKCk7RUNlKCk7TkNlKCk7UENlKCk7SUNlKCk7RkNlKCk7T0NlKCk7QkNlKCk7UkNlKCk7SENlKCk7cUNlKCk7VkNlKCk7VUNlKCk7akNlKCk7V0NlKCk7R0NlKCk7WUNlKCk7WkNlKCk7WENlKCk7UUNlKCk7S0NlKCk7SkNlKCk7ZUxlKCk7dExlKCk7YUxlKCk7ckxlKCk7aUxlKCk7b0xlKCk7c0xlKCk7bkxlKCk7bExlKCk7Y0xlKCk7ZExlKCk7ZkxlKCk7dUxlKCk7cExlKCk7aExlKCk7bUxlKCk7Z0xlKCk7eExlKCk7YkxlKCk7dkxlKCk7eUxlKCk7d0xlKCk7TUxlKCk7ekxlKCk7a0xlKCk7U0xlKCk7Q0xlKCk7TExlKCk7VExlKCk7X0xlKCk7QUxlKCk7JExlKCk7RExlKCk7RUxlKCk7TkxlKCk7UExlKCk7SUxlKCk7RkxlKCk7T0xlKCk7QkxlKCk7UkxlKCk7SExlKCk7cUxlKCk7VkxlKCk7VUxlKCk7akxlKCk7V0xlKCk7R0xlKCk7WUxlKCk7WkxlKCk7WExlKCk7UUxlKCk7S0xlKCk7SkxlKCk7ZVRlKCk7dFRlKCk7YVRlKCk7clRlKCk7aVRlKCk7b1RlKCk7c1RlKCk7blRlKCk7bFRlKCk7Y1RlKCk7ZFRlKCk7ZlRlKCk7dVRlKCk7cFRlKCk7aFRlKCk7bVRlKCk7Z1RlKCk7eFRlKCk7YlRlKCk7dlRlKCk7eVRlKCk7d1RlKCk7TVRlKCk7elRlKCk7a1RlKCk7U1RlKCk7Q1RlKCk7TFRlKCk7VFRlKCk7X1RlKCk7QVRlKCk7JFRlKCk7RFRlKCk7RVRlKCk7TlRlKCk7UFRlKCk7SVRlKCk7RlRlKCk7T1RlKCk7QlRlKCk7UlRlKCk7SFRlKCk7cVRlKCk7VlRlKCk7VVRlKCk7alRlKCk7V1RlKCk7R1RlKCk7WVRlKCk7WlRlKCk7WFRlKCk7UVRlKCk7S1RlKCk7SlRlKCk7ZV9lKCk7dF9lKCk7YV9lKCk7cl9lKCk7aV9lKCk7b19lKCk7c19lKCk7bl9lKCk7bF9lKCk7Y19lKCk7ZF9lKCk7Zl9lKCk7dV9lKCk7cF9lKCk7aF9lKCk7bV9lKCk7Z19lKCk7eF9lKCk7Yl9lKCk7dl9lKCk7eV9lKCk7d19lKCk7TV9lKCk7el9lKCk7a19lKCk7U19lKCk7Q19lKCk7TF9lKCk7VF9lKCk7X19lKCk7QV9lKCk7JF9lKCk7RF9lKCk7RV9lKCk7Tl9lKCk7UF9lKCk7SV9lKCk7Rl9lKCk7T19lKCk7Ql9lKCk7Ul9lKCk7SF9lKCk7cV9lKCk7Vl9lKCk7VV9lKCk7al9lKCk7V19lKCk7R19lKCk7WV9lKCk7Wl9lKCk7WF9lKCk7UV9lKCk7S19lKCk7Sl9lKCk7ZUFlKCk7dEFlKCk7YUFlKCk7ckFlKCk7aUFlKCk7b0FlKCk7c0FlKCk7bkFlKCk7bEFlKCk7Y0FlKCk7ZEFlKCk7ZkFlKCk7dUFlKCk7cEFlKCk7aEFlKCk7bUFlKCk7Z0FlKCk7eEFlKCk7YkFlKCk7dkFlKCk7eUFlKCk7d0FlKCk7TUFlKCk7ekFlKCk7a0FlKCk7U0FlKCk7Q0FlKCk7TEFlKCk7VEFlKCk7X0FlKCk7QUFlKCk7JEFlKCk7REFlKCk7RUFlKCk7TkFlKCk7UEFlKCk7SUFlKCk7RkFlKCk7T0FlKCk7QkFlKCk7UkFlKCk7SEFlKCk7cUFlKCk7VkFlKCk7VUFlKCk7akFlKCk7V0FlKCk7R0FlKCk7WUFlKCk7WkFlKCk7WEFlKCk7UUFlKCk7S0FlKCk7SkFlKCk7ZSRlKCk7dCRlKCk7YSRlKCk7ciRlKCk7aSRlKCk7byRlKCk7cyRlKCk7biRlKCk7bCRlKCk7YyRlKCk7ZCRlKCk7ZiRlKCk7dSRlKCk7cCRlKCk7aCRlKCk7bSRlKCk7ZyRlKCk7eCRlKCk7YiRlKCk7diRlKCk7eSRlKCk7dyRlKCk7TSRlKCk7eiRlKCk7ayRlKCk7UyRlKCk7QyRlKCk7TCRlKCk7VCRlKCk7XyRlKCk7QSRlKCk7JCRlKCk7RCRlKCk7RSRlKCk7TiRlKCk7UCRlKCk7SSRlKCk7RiRlKCk7TyRlKCk7QiRlKCk7UiRlKCk7SCRlKCk7cSRlKCk7ViRlKCk7VSRlKCk7aiRlKCk7VyRlKCk7RyRlKCk7WSRlKCk7WiRlKCk7WCRlKCk7USRlKCk7SyRlKCk7SiRlKCk7ZURlKCk7dERlKCk7YURlKCk7ckRlKCk7aURlKCk7b0RlKCk7c0RlKCk7bkRlKCk7bERlKCk7Y0RlKCk7ZERlKCk7ZkRlKCk7dURlKCk7cERlKCk7aERlKCk7bURlKCk7Z0RlKCk7eERlKCk7YkRlKCk7dkRlKCk7eURlKCk7d0RlKCk7TURlKCk7ekRlKCk7a0RlKCk7U0RlKCk7Q0RlKCk7TERlKCk7VERlKCk7X0RlKCk7QURlKCk7JERlKCk7RERlKCk7RURlKCk7TkRlKCk7UERlKCk7SURlKCk7RkRlKCk7T0RlKCk7fSk7dmFyIFdyPXt9O2V0KFdyLHtBQXJyb3dEb3duOigpPT5ONyxBQXJyb3dVcDooKT0+UDcsQUxhcmdlU21hbGw6KCk9Pkk3LEFjY2Vzc2liaWxpdHk6KCk9PkY3LEFjdGl2aXR5OigpPT5PNyxBY3Rpdml0eVNxdWFyZTooKT0+eTMsQWlyVmVudDooKT0+QjcsQWlycGxheTooKT0+UjcsQWxhcm1DaGVjazooKT0+Tm4sQWxhcm1DbG9jazooKT0+cTcsQWxhcm1DbG9ja0NoZWNrOigpPT5ObixBbGFybUNsb2NrTWludXM6KCk9PlBuLEFsYXJtQ2xvY2tPZmY6KCk9Pkg3LEFsYXJtQ2xvY2tQbHVzOigpPT5JbixBbGFybU1pbnVzOigpPT5QbixBbGFybVBsdXM6KCk9PkluLEFsYXJtU21va2U6KCk9PlY3LEFsYnVtOigpPT5VNyxBbGVydENpcmNsZTooKT0+ZjAsQWxlcnRPY3RhZ29uOigpPT5aNCxBbGVydFRyaWFuZ2xlOigpPT5MbCxBbGlnbkNlbnRlcjooKT0+dmwsQWxpZ25DZW50ZXJIb3Jpem9udGFsOigpPT5qNyxBbGlnbkNlbnRlclZlcnRpY2FsOigpPT5XNyxBbGlnbkVuZEhvcml6b250YWw6KCk9Pkc3LEFsaWduRW5kVmVydGljYWw6KCk9Plk3LEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVDZW50ZXI6KCk9Plo3LEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQ6KCk9PlE3LEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVTdGFydDooKT0+WDcsQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlcjooKT0+SzcsQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZDooKT0+SjcsQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0OigpPT5lZixBbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZDooKT0+dGYsQWxpZ25Ib3Jpem9udGFsU3BhY2VCZXR3ZWVuOigpPT5hZixBbGlnbkp1c3RpZnk6KCk9PndsLEFsaWduTGVmdDooKT0+SGksQWxpZ25SaWdodDooKT0+eWwsQWxpZ25TdGFydEhvcml6b250YWw6KCk9PnJmLEFsaWduU3RhcnRWZXJ0aWNhbDooKT0+b2YsQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXI6KCk9PnNmLEFsaWduVmVydGljYWxEaXN0cmlidXRlRW5kOigpPT5uZixBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZVN0YXJ0OigpPT5sZixBbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlcjooKT0+Y2YsQWxpZ25WZXJ0aWNhbEp1c3RpZnlFbmQ6KCk9PmRmLEFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQ6KCk9PmZmLEFsaWduVmVydGljYWxTcGFjZUFyb3VuZDooKT0+dWYsQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbjooKT0+cGYsQW1idWxhbmNlOigpPT5oZixBbXBlcnNhbmQ6KCk9Pm1mLEFtcGVyc2FuZHM6KCk9PmdmLEFtcGhvcmE6KCk9PnhmLEFuY2hvcjooKT0+YmYsQW5ncnk6KCk9PnZmLEFubm95ZWQ6KCk9PnlmLEFudGVubmE6KCk9PndmLEFudmlsOigpPT5NZixBcGVydHVyZTooKT0+emYsQXBwV2luZG93OigpPT5TZixBcHBXaW5kb3dNYWM6KCk9PmtmLEFwcGxlOigpPT5DZixBcmNoaXZlOigpPT5fZixBcmNoaXZlUmVzdG9yZTooKT0+TGYsQXJjaGl2ZVg6KCk9PlRmLEFyZWFDaGFydDooKT0+UW4sQXJtY2hhaXI6KCk9PkFmLEFycm93QmlnRG93bjooKT0+RGYsQXJyb3dCaWdEb3duRGFzaDooKT0+JGYsQXJyb3dCaWdMZWZ0OigpPT5OZixBcnJvd0JpZ0xlZnREYXNoOigpPT5FZixBcnJvd0JpZ1JpZ2h0OigpPT5JZixBcnJvd0JpZ1JpZ2h0RGFzaDooKT0+UGYsQXJyb3dCaWdVcDooKT0+T2YsQXJyb3dCaWdVcERhc2g6KCk9PkZmLEFycm93RG93bjooKT0+WWYsQXJyb3dEb3duMDE6KCk9PkJmLEFycm93RG93bjEwOigpPT5SZixBcnJvd0Rvd25BWjooKT0+Rm4sQXJyb3dEb3duQXo6KCk9PkZuLEFycm93RG93bkNpcmNsZTooKT0+dTAsQXJyb3dEb3duRnJvbUxpbmU6KCk9PkhmLEFycm93RG93bkxlZnQ6KCk9PnFmLEFycm93RG93bkxlZnRGcm9tQ2lyY2xlOigpPT5oMCxBcnJvd0Rvd25MZWZ0RnJvbVNxdWFyZTooKT0+UzMsQXJyb3dEb3duTGVmdFNxdWFyZTooKT0+dzMsQXJyb3dEb3duTmFycm93V2lkZTooKT0+amYsQXJyb3dEb3duUmlnaHQ6KCk9PlZmLEFycm93RG93blJpZ2h0RnJvbUNpcmNsZTooKT0+bTAsQXJyb3dEb3duUmlnaHRGcm9tU3F1YXJlOigpPT5DMyxBcnJvd0Rvd25SaWdodFNxdWFyZTooKT0+TTMsQXJyb3dEb3duU3F1YXJlOigpPT56MyxBcnJvd0Rvd25Ub0RvdDooKT0+VWYsQXJyb3dEb3duVG9MaW5lOigpPT5XZixBcnJvd0Rvd25VcDooKT0+R2YsQXJyb3dEb3duV2lkZU5hcnJvdzooKT0+T24sQXJyb3dEb3duWkE6KCk9PkJuLEFycm93RG93blphOigpPT5CbixBcnJvd0xlZnQ6KCk9PktmLEFycm93TGVmdENpcmNsZTooKT0+cDAsQXJyb3dMZWZ0RnJvbUxpbmU6KCk9PlhmLEFycm93TGVmdFJpZ2h0OigpPT5aZixBcnJvd0xlZnRTcXVhcmU6KCk9PmszLEFycm93TGVmdFRvTGluZTooKT0+UWYsQXJyb3dSaWdodDooKT0+YXUsQXJyb3dSaWdodENpcmNsZTooKT0+YjAsQXJyb3dSaWdodEZyb21MaW5lOigpPT5KZixBcnJvd1JpZ2h0TGVmdDooKT0+ZXUsQXJyb3dSaWdodFNxdWFyZTooKT0+XzMsQXJyb3dSaWdodFRvTGluZTooKT0+dHUsQXJyb3dVcDooKT0+dXUsQXJyb3dVcDAxOigpPT5ydSxBcnJvd1VwMTA6KCk9Pml1LEFycm93VXBBWjooKT0+Um4sQXJyb3dVcEF6OigpPT5SbixBcnJvd1VwQ2lyY2xlOigpPT52MCxBcnJvd1VwRG93bjooKT0+b3UsQXJyb3dVcEZyb21Eb3Q6KCk9PnN1LEFycm93VXBGcm9tTGluZTooKT0+bnUsQXJyb3dVcExlZnQ6KCk9Pmx1LEFycm93VXBMZWZ0RnJvbUNpcmNsZTooKT0+ZzAsQXJyb3dVcExlZnRGcm9tU3F1YXJlOigpPT5MMyxBcnJvd1VwTGVmdFNxdWFyZTooKT0+QTMsQXJyb3dVcE5hcnJvd1dpZGU6KCk9PkhuLEFycm93VXBSaWdodDooKT0+Y3UsQXJyb3dVcFJpZ2h0RnJvbUNpcmNsZTooKT0+eDAsQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTooKT0+VDMsQXJyb3dVcFJpZ2h0U3F1YXJlOigpPT4kMyxBcnJvd1VwU3F1YXJlOigpPT5EMyxBcnJvd1VwVG9MaW5lOigpPT5kdSxBcnJvd1VwV2lkZU5hcnJvdzooKT0+ZnUsQXJyb3dVcFpBOigpPT5xbixBcnJvd1VwWmE6KCk9PnFuLEFycm93c1VwRnJvbUxpbmU6KCk9PnB1LEFzdGVyaXNrOigpPT5odSxBc3Rlcmlza1NxdWFyZTooKT0+RTMsQXRTaWduOigpPT5tdSxBdG9tOigpPT5ndSxBdWRpb0xpbmVzOigpPT54dSxBdWRpb1dhdmVmb3JtOigpPT52dSxBd2FyZDooKT0+YnUsQXhlOigpPT55dSxBeGlzM0Q6KCk9PlZuLEF4aXMzZDooKT0+Vm4sQmFieTooKT0+d3UsQmFja3BhY2s6KCk9Pk11LEJhZGdlOigpPT5PdSxCYWRnZUFsZXJ0OigpPT56dSxCYWRnZUNlbnQ6KCk9Pmt1LEJhZGdlQ2hlY2s6KCk9PlVuLEJhZGdlRG9sbGFyU2lnbjooKT0+U3UsQmFkZ2VFdXJvOigpPT5DdSxCYWRnZUhlbHA6KCk9PmpuLEJhZGdlSW5kaWFuUnVwZWU6KCk9Pkx1LEJhZGdlSW5mbzooKT0+VHUsQmFkZ2VKYXBhbmVzZVllbjooKT0+X3UsQmFkZ2VNaW51czooKT0+QXUsQmFkZ2VQZXJjZW50OigpPT4kdSxCYWRnZVBsdXM6KCk9PkR1LEJhZGdlUG91bmRTdGVybGluZzooKT0+RXUsQmFkZ2VRdWVzdGlvbk1hcms6KCk9PmpuLEJhZGdlUnVzc2lhblJ1YmxlOigpPT5OdSxCYWRnZVN3aXNzRnJhbmM6KCk9PlB1LEJhZGdlVHVya2lzaExpcmE6KCk9Pkl1LEJhZGdlWDooKT0+RnUsQmFnZ2FnZUNsYWltOigpPT5CdSxCYWxsb29uOigpPT5SdSxCYW46KCk9Pkh1LEJhbmFuYTooKT0+cXUsQmFuZGFnZTooKT0+VnUsQmFua25vdGU6KCk9Pkd1LEJhbmtub3RlQXJyb3dEb3duOigpPT5VdSxCYW5rbm90ZUFycm93VXA6KCk9Pmp1LEJhbmtub3RlWDooKT0+V3UsQmFyQ2hhcnQ6KCk9Pm8wLEJhckNoYXJ0MjooKT0+czAsQmFyQ2hhcnQzOigpPT5yMCxCYXJDaGFydDQ6KCk9PmEwLEJhckNoYXJ0QmlnOigpPT50MCxCYXJDaGFydEhvcml6b250YWw6KCk9PkpuLEJhckNoYXJ0SG9yaXpvbnRhbEJpZzooKT0+S24sQmFyY29kZTooKT0+WXUsQmFycmVsOigpPT5adSxCYXNlbGluZTooKT0+WHUsQmF0aDooKT0+UXUsQmF0dGVyeTooKT0+aXAsQmF0dGVyeUNoYXJnaW5nOigpPT5LdSxCYXR0ZXJ5RnVsbDooKT0+SnUsQmF0dGVyeUxvdzooKT0+ZXAsQmF0dGVyeU1lZGl1bTooKT0+YXAsQmF0dGVyeVBsdXM6KCk9PnRwLEJhdHRlcnlXYXJuaW5nOigpPT5ycCxCZWFrZXI6KCk9Pm9wLEJlYW46KCk9Pm5wLEJlYW5PZmY6KCk9PnNwLEJlZDooKT0+ZHAsQmVkRG91YmxlOigpPT5scCxCZWRTaW5nbGU6KCk9PmNwLEJlZWY6KCk9PmZwLEJlZXI6KCk9PnBwLEJlZXJPZmY6KCk9PnVwLEJlbGw6KCk9PnlwLEJlbGxEb3Q6KCk9PmhwLEJlbGxFbGVjdHJpYzooKT0+bXAsQmVsbE1pbnVzOigpPT5ncCxCZWxsT2ZmOigpPT54cCxCZWxsUGx1czooKT0+YnAsQmVsbFJpbmc6KCk9PnZwLEJldHdlZW5Ib3Jpem9uYWxFbmQ6KCk9PlduLEJldHdlZW5Ib3Jpem9uYWxTdGFydDooKT0+R24sQmV0d2Vlbkhvcml6b250YWxFbmQ6KCk9PlduLEJldHdlZW5Ib3Jpem9udGFsU3RhcnQ6KCk9PkduLEJldHdlZW5WZXJ0aWNhbEVuZDooKT0+d3AsQmV0d2VlblZlcnRpY2FsU3RhcnQ6KCk9Pk1wLEJpY2Vwc0ZsZXhlZDooKT0+enAsQmlrZTooKT0+a3AsQmluYXJ5OigpPT5TcCxCaW5vY3VsYXJzOigpPT5McCxCaW9oYXphcmQ6KCk9PkNwLEJpcmQ6KCk9Pl9wLEJpcmRob3VzZTooKT0+VHAsQml0Y29pbjooKT0+QXAsQmxlbmQ6KCk9PiRwLEJsaW5kczooKT0+RHAsQmxvY2tzOigpPT5FcCxCbHVldG9vdGg6KCk9PkZwLEJsdWV0b290aENvbm5lY3RlZDooKT0+TnAsQmx1ZXRvb3RoT2ZmOigpPT5QcCxCbHVldG9vdGhTZWFyY2hpbmc6KCk9PklwLEJvbGQ6KCk9Pk9wLEJvbHQ6KCk9PkJwLEJvbWI6KCk9PlJwLEJvbmU6KCk9PkhwLEJvb2s6KCk9PnU5LEJvb2tBOigpPT5xcCxCb29rQWxlcnQ6KCk9PlZwLEJvb2tBdWRpbzooKT0+VXAsQm9va0NoZWNrOigpPT5qcCxCb29rQ29weTooKT0+V3AsQm9va0Rhc2hlZDooKT0+WW4sQm9va0Rvd246KCk9PkdwLEJvb2tIZWFkcGhvbmVzOigpPT5ZcCxCb29rSGVhcnQ6KCk9PlpwLEJvb2tJbWFnZTooKT0+UXAsQm9va0tleTooKT0+WHAsQm9va0xvY2s6KCk9PktwLEJvb2tNYXJrZWQ6KCk9PkpwLEJvb2tNaW51czooKT0+ZTksQm9va09wZW46KCk9PnI5LEJvb2tPcGVuQ2hlY2s6KCk9PnQ5LEJvb2tPcGVuVGV4dDooKT0+YTksQm9va1BsdXM6KCk9Pmk5LEJvb2tTZWFyY2g6KCk9Pm85LEJvb2tUZW1wbGF0ZTooKT0+WW4sQm9va1RleHQ6KCk9PnM5LEJvb2tUeXBlOigpPT5sOSxCb29rVXA6KCk9Pm45LEJvb2tVcDI6KCk9PmM5LEJvb2tVc2VyOigpPT5kOSxCb29rWDooKT0+ZjksQm9va21hcms6KCk9Png5LEJvb2ttYXJrQ2hlY2s6KCk9PnA5LEJvb2ttYXJrTWludXM6KCk9Pmg5LEJvb2ttYXJrUGx1czooKT0+bTksQm9va21hcmtYOigpPT5nOSxCb29tQm94OigpPT5iOSxCb3Q6KCk9Pnc5LEJvdE1lc3NhZ2VTcXVhcmU6KCk9PnY5LEJvdE9mZjooKT0+eTksQm90dGxlV2luZTooKT0+TTksQm93QXJyb3c6KCk9Pno5LEJveDooKT0+azksQm94U2VsZWN0OigpPT5VMyxCb3hlczooKT0+UzksQnJhY2VzOigpPT5abixCcmFja2V0czooKT0+QzksQnJhaW46KCk9Pl85LEJyYWluQ2lyY3VpdDooKT0+TDksQnJhaW5Db2c6KCk9PlQ5LEJyaWNrV2FsbDooKT0+RDksQnJpY2tXYWxsRmlyZTooKT0+QTksQnJpY2tXYWxsU2hpZWxkOigpPT4kOSxCcmllZmNhc2U6KCk9Pkk5LEJyaWVmY2FzZUJ1c2luZXNzOigpPT5FOSxCcmllZmNhc2VDb252ZXlvckJlbHQ6KCk9Pk45LEJyaWVmY2FzZU1lZGljYWw6KCk9PlA5LEJyaW5nVG9Gcm9udDooKT0+RjksQnJ1c2g6KCk9PkI5LEJydXNoQ2xlYW5pbmc6KCk9Pk85LEJ1YmJsZXM6KCk9PlI5LEJ1ZzooKT0+VjksQnVnT2ZmOigpPT5IOSxCdWdQbGF5OigpPT5xOSxCdWlsZGluZzooKT0+ajksQnVpbGRpbmcyOigpPT5VOSxCdXM6KCk9Pkc5LEJ1c0Zyb250OigpPT5XOSxDYWJsZTooKT0+WjksQ2FibGVDYXI6KCk9Plk5LENha2U6KCk9PlE5LENha2VTbGljZTooKT0+WDksQ2FsY3VsYXRvcjooKT0+SzksQ2FsZW5kYXI6KCk9PnZoLENhbGVuZGFyMTooKT0+SjksQ2FsZW5kYXJBcnJvd0Rvd246KCk9PmVoLENhbGVuZGFyQXJyb3dVcDooKT0+dGgsQ2FsZW5kYXJDaGVjazooKT0+cmgsQ2FsZW5kYXJDaGVjazI6KCk9PmFoLENhbGVuZGFyQ2xvY2s6KCk9Pm9oLENhbGVuZGFyQ29nOigpPT5paCxDYWxlbmRhckRheXM6KCk9PnNoLENhbGVuZGFyRm9sZDooKT0+bmgsQ2FsZW5kYXJIZWFydDooKT0+bGgsQ2FsZW5kYXJNaW51czooKT0+ZGgsQ2FsZW5kYXJNaW51czI6KCk9PmNoLENhbGVuZGFyT2ZmOigpPT5maCxDYWxlbmRhclBsdXM6KCk9PnBoLENhbGVuZGFyUGx1czI6KCk9PnVoLENhbGVuZGFyUmFuZ2U6KCk9PmhoLENhbGVuZGFyU2VhcmNoOigpPT5taCxDYWxlbmRhclN5bmM6KCk9PmdoLENhbGVuZGFyWDooKT0+YmgsQ2FsZW5kYXJYMjooKT0+eGgsQ2FsZW5kYXJzOigpPT55aCxDYW1lcmE6KCk9Pk1oLENhbWVyYU9mZjooKT0+d2gsQ2FuZGxlc3RpY2tDaGFydDooKT0+ZTAsQ2FuZHk6KCk9PlNoLENhbmR5Q2FuZTooKT0+emgsQ2FuZHlPZmY6KCk9PmtoLENhbm5hYmlzOigpPT5MaCxDYW5uYWJpc09mZjooKT0+Q2gsQ2FwdGlvbnM6KCk9PlhuLENhcHRpb25zT2ZmOigpPT5UaCxDYXI6KCk9PiRoLENhckZyb250OigpPT5faCxDYXJUYXhpRnJvbnQ6KCk9PkFoLENhcmF2YW46KCk9PkRoLENhcmRTaW06KCk9PkVoLENhcnJvdDooKT0+TmgsQ2FzZUxvd2VyOigpPT5QaCxDYXNlU2Vuc2l0aXZlOigpPT5JaCxDYXNlVXBwZXI6KCk9PkZoLENhc3NldHRlVGFwZTooKT0+T2gsQ2FzdDooKT0+QmgsQ2FzdGxlOigpPT5SaCxDYXQ6KCk9PkhoLENjdHY6KCk9PnFoLENoYXJ0QXJlYTooKT0+UW4sQ2hhcnRCYXI6KCk9PkpuLENoYXJ0QmFyQmlnOigpPT5LbixDaGFydEJhckRlY3JlYXNpbmc6KCk9PlZoLENoYXJ0QmFySW5jcmVhc2luZzooKT0+VWgsQ2hhcnRCYXJTdGFja2VkOigpPT5qaCxDaGFydENhbmRsZXN0aWNrOigpPT5lMCxDaGFydENvbHVtbjooKT0+cjAsQ2hhcnRDb2x1bW5CaWc6KCk9PnQwLENoYXJ0Q29sdW1uRGVjcmVhc2luZzooKT0+V2gsQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOigpPT5hMCxDaGFydENvbHVtblN0YWNrZWQ6KCk9PkdoLENoYXJ0R2FudHQ6KCk9PlloLENoYXJ0TGluZTooKT0+aTAsQ2hhcnROZXR3b3JrOigpPT5aaCxDaGFydE5vQXhlc0NvbHVtbjooKT0+czAsQ2hhcnROb0F4ZXNDb2x1bW5EZWNyZWFzaW5nOigpPT5YaCxDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmc6KCk9Pm8wLENoYXJ0Tm9BeGVzQ29tYmluZWQ6KCk9PlFoLENoYXJ0Tm9BeGVzR2FudHQ6KCk9Pm4wLENoYXJ0UGllOigpPT5sMCxDaGFydFNjYXR0ZXI6KCk9PmMwLENoYXJ0U3BsaW5lOigpPT5LaCxDaGVjazooKT0+dG0sQ2hlY2tDaGVjazooKT0+SmgsQ2hlY2tDaXJjbGU6KCk9PncwLENoZWNrQ2lyY2xlMjooKT0+eTAsQ2hlY2tMaW5lOigpPT5lbSxDaGVja1NxdWFyZTooKT0+STMsQ2hlY2tTcXVhcmUyOigpPT5QMyxDaGVmSGF0OigpPT5hbSxDaGVycnk6KCk9PnJtLENoZXNzQmlzaG9wOigpPT5pbSxDaGVzc0tpbmc6KCk9Pm9tLENoZXNzS25pZ2h0OigpPT5zbSxDaGVzc1Bhd246KCk9Pm5tLENoZXNzUXVlZW46KCk9PmxtLENoZXNzUm9vazooKT0+Zm0sQ2hldnJvbkRvd246KCk9PmNtLENoZXZyb25Eb3duQ2lyY2xlOigpPT5NMCxDaGV2cm9uRG93blNxdWFyZTooKT0+RjMsQ2hldnJvbkZpcnN0OigpPT5kbSxDaGV2cm9uTGFzdDooKT0+dW0sQ2hldnJvbkxlZnQ6KCk9PnBtLENoZXZyb25MZWZ0Q2lyY2xlOigpPT56MCxDaGV2cm9uTGVmdFNxdWFyZTooKT0+TzMsQ2hldnJvblJpZ2h0OigpPT5obSxDaGV2cm9uUmlnaHRDaXJjbGU6KCk9PmswLENoZXZyb25SaWdodFNxdWFyZTooKT0+QjMsQ2hldnJvblVwOigpPT5tbSxDaGV2cm9uVXBDaXJjbGU6KCk9PlMwLENoZXZyb25VcFNxdWFyZTooKT0+UjMsQ2hldnJvbnNEb3duOigpPT54bSxDaGV2cm9uc0Rvd25VcDooKT0+Z20sQ2hldnJvbnNMZWZ0OigpPT55bSxDaGV2cm9uc0xlZnRSaWdodDooKT0+dm0sQ2hldnJvbnNMZWZ0UmlnaHRFbGxpcHNpczooKT0+Ym0sQ2hldnJvbnNSaWdodDooKT0+TW0sQ2hldnJvbnNSaWdodExlZnQ6KCk9PndtLENoZXZyb25zVXA6KCk9PmttLENoZXZyb25zVXBEb3duOigpPT56bSxDaHJvbWU6KCk9PmQwLENocm9taXVtOigpPT5kMCxDaHVyY2g6KCk9PlNtLENpZ2FyZXR0ZTooKT0+TG0sQ2lnYXJldHRlT2ZmOigpPT5DbSxDaXJjbGU6KCk9PnFtLENpcmNsZUFsZXJ0OigpPT5mMCxDaXJjbGVBcnJvd0Rvd246KCk9PnUwLENpcmNsZUFycm93TGVmdDooKT0+cDAsQ2lyY2xlQXJyb3dPdXREb3duTGVmdDooKT0+aDAsQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQ6KCk9Pm0wLENpcmNsZUFycm93T3V0VXBMZWZ0OigpPT5nMCxDaXJjbGVBcnJvd091dFVwUmlnaHQ6KCk9PngwLENpcmNsZUFycm93UmlnaHQ6KCk9PmIwLENpcmNsZUFycm93VXA6KCk9PnYwLENpcmNsZUNoZWNrOigpPT55MCxDaXJjbGVDaGVja0JpZzooKT0+dzAsQ2lyY2xlQ2hldnJvbkRvd246KCk9Pk0wLENpcmNsZUNoZXZyb25MZWZ0OigpPT56MCxDaXJjbGVDaGV2cm9uUmlnaHQ6KCk9PmswLENpcmNsZUNoZXZyb25VcDooKT0+UzAsQ2lyY2xlRGFzaGVkOigpPT5UbSxDaXJjbGVEaXZpZGU6KCk9PkMwLENpcmNsZURvbGxhclNpZ246KCk9Pl9tLENpcmNsZURvdDooKT0+JG0sQ2lyY2xlRG90RGFzaGVkOigpPT5BbSxDaXJjbGVFbGxpcHNpczooKT0+RG0sQ2lyY2xlRXF1YWw6KCk9PkVtLENpcmNsZUZhZGluZ0Fycm93VXA6KCk9Pk5tLENpcmNsZUZhZGluZ1BsdXM6KCk9PlBtLENpcmNsZUdhdWdlOigpPT5MMCxDaXJjbGVIZWxwOigpPT5OaSxDaXJjbGVNaW51czooKT0+VDAsQ2lyY2xlT2ZmOigpPT5JbSxDaXJjbGVQYXJraW5nOigpPT5BMCxDaXJjbGVQYXJraW5nT2ZmOigpPT5fMCxDaXJjbGVQYXVzZTooKT0+JDAsQ2lyY2xlUGVyY2VudDooKT0+RDAsQ2lyY2xlUGlsZTooKT0+Rm0sQ2lyY2xlUGxheTooKT0+RTAsQ2lyY2xlUGx1czooKT0+TjAsQ2lyY2xlUG91bmRTdGVybGluZzooKT0+T20sQ2lyY2xlUG93ZXI6KCk9PlAwLENpcmNsZVF1ZXN0aW9uTWFyazooKT0+TmksQ2lyY2xlU2xhc2g6KCk9PkJtLENpcmNsZVNsYXNoMjooKT0+STAsQ2lyY2xlU2xhc2hlZDooKT0+STAsQ2lyY2xlU21hbGw6KCk9PlJtLENpcmNsZVN0YXI6KCk9PkhtLENpcmNsZVN0b3A6KCk9PkYwLENpcmNsZVVzZXI6KCk9PkIwLENpcmNsZVVzZXJSb3VuZDooKT0+TzAsQ2lyY2xlWDooKT0+UjAsQ2lyY3VpdEJvYXJkOigpPT5WbSxDaXRydXM6KCk9PlVtLENsYXBwZXJib2FyZDooKT0+am0sQ2xpcGJvYXJkOigpPT50ZyxDbGlwYm9hcmRDaGVjazooKT0+V20sQ2xpcGJvYXJkQ2xvY2s6KCk9PkdtLENsaXBib2FyZENvcHk6KCk9PlltLENsaXBib2FyZEVkaXQ6KCk9PnEwLENsaXBib2FyZExpc3Q6KCk9PlptLENsaXBib2FyZE1pbnVzOigpPT5YbSxDbGlwYm9hcmRQYXN0ZTooKT0+UW0sQ2xpcGJvYXJkUGVuOigpPT5xMCxDbGlwYm9hcmRQZW5MaW5lOigpPT5IMCxDbGlwYm9hcmRQbHVzOigpPT5LbSxDbGlwYm9hcmRTaWduYXR1cmU6KCk9PkgwLENsaXBib2FyZFR5cGU6KCk9PkptLENsaXBib2FyZFg6KCk9PmVnLENsb2NrOigpPT55ZyxDbG9jazE6KCk9PmFnLENsb2NrMTA6KCk9PnJnLENsb2NrMTE6KCk9PmlnLENsb2NrMTI6KCk9Pm9nLENsb2NrMjooKT0+c2csQ2xvY2szOigpPT5uZyxDbG9jazQ6KCk9PmxnLENsb2NrNTooKT0+Y2csQ2xvY2s2OigpPT5kZyxDbG9jazc6KCk9PmZnLENsb2NrODooKT0+dWcsQ2xvY2s5OigpPT5wZyxDbG9ja0FsZXJ0OigpPT5oZyxDbG9ja0Fycm93RG93bjooKT0+bWcsQ2xvY2tBcnJvd1VwOigpPT5nZyxDbG9ja0NoZWNrOigpPT54ZyxDbG9ja0ZhZGluZzooKT0+YmcsQ2xvY2tQbHVzOigpPT52ZyxDbG9zZWRDYXB0aW9uOigpPT53ZyxDbG91ZDooKT0+QmcsQ2xvdWRBbGVydDooKT0+TWcsQ2xvdWRCYWNrdXA6KCk9PnpnLENsb3VkQ2hlY2s6KCk9PmtnLENsb3VkQ29nOigpPT5TZyxDbG91ZERvd25sb2FkOigpPT5WMCxDbG91ZERyaXp6bGU6KCk9PkNnLENsb3VkRm9nOigpPT5MZyxDbG91ZEhhaWw6KCk9PlRnLENsb3VkTGlnaHRuaW5nOigpPT5fZyxDbG91ZE1vb246KCk9PiRnLENsb3VkTW9vblJhaW46KCk9PkFnLENsb3VkT2ZmOigpPT5FZyxDbG91ZFJhaW46KCk9Pk5nLENsb3VkUmFpbldpbmQ6KCk9PkRnLENsb3VkU25vdzooKT0+UGcsQ2xvdWRTdW46KCk9PkZnLENsb3VkU3VuUmFpbjooKT0+SWcsQ2xvdWRTeW5jOigpPT5PZyxDbG91ZFVwbG9hZDooKT0+VTAsQ2xvdWR5OigpPT5SZyxDbG92ZXI6KCk9PkhnLENsdWI6KCk9PnFnLENvZGU6KCk9PlZnLENvZGUyOigpPT5qMCxDb2RlU3F1YXJlOigpPT5IMyxDb2RlWG1sOigpPT5qMCxDb2RlcGVuOigpPT5VZyxDb2Rlc2FuZGJveDooKT0+amcsQ29mZmVlOigpPT5XZyxDb2c6KCk9PllnLENvaW5zOigpPT5HZyxDb2x1bW5zOigpPT5XMCxDb2x1bW5zMjooKT0+VzAsQ29sdW1uczM6KCk9PkcwLENvbHVtbnMzQ29nOigpPT5QaSxDb2x1bW5zNDooKT0+WmcsQ29sdW1uc1NldHRpbmdzOigpPT5QaSxDb21iaW5lOigpPT5YZyxDb21tYW5kOigpPT5RZyxDb21wYXNzOigpPT5LZyxDb21wb25lbnQ6KCk9PkpnLENvbXB1dGVyOigpPT5leCxDb25jaWVyZ2VCZWxsOigpPT50eCxDb25lOigpPT5heCxDb25zdHJ1Y3Rpb246KCk9PnJ4LENvbnRhY3Q6KCk9Pml4LENvbnRhY3QyOigpPT5ZMCxDb250YWN0Um91bmQ6KCk9PlkwLENvbnRhaW5lcjooKT0+b3gsQ29udHJhc3Q6KCk9PnN4LENvb2tpZTooKT0+bngsQ29va2luZ1BvdDooKT0+bHgsQ29weTooKT0+cHgsQ29weUNoZWNrOigpPT5jeCxDb3B5TWludXM6KCk9PmR4LENvcHlQbHVzOigpPT5meCxDb3B5U2xhc2g6KCk9PnV4LENvcHlYOigpPT5oeCxDb3B5bGVmdDooKT0+bXgsQ29weXJpZ2h0OigpPT5neCxDb3JuZXJEb3duTGVmdDooKT0+YngsQ29ybmVyRG93blJpZ2h0OigpPT54eCxDb3JuZXJMZWZ0RG93bjooKT0+dngsQ29ybmVyTGVmdFVwOigpPT55eCxDb3JuZXJSaWdodERvd246KCk9Pnd4LENvcm5lclJpZ2h0VXA6KCk9Pk14LENvcm5lclVwTGVmdDooKT0+engsQ29ybmVyVXBSaWdodDooKT0+a3gsQ3B1OigpPT5TeCxDcmVhdGl2ZUNvbW1vbnM6KCk9PkN4LENyZWRpdENhcmQ6KCk9Pkx4LENyb2lzc2FudDooKT0+VHgsQ3JvcDooKT0+X3gsQ3Jvc3M6KCk9PkF4LENyb3NzaGFpcjooKT0+JHgsQ3Jvd246KCk9PkR4LEN1Ym9pZDooKT0+RXgsQ3VwU29kYTooKT0+TngsQ3VybHlCcmFjZXM6KCk9PlpuLEN1cnJlbmN5OigpPT5QeCxDeWxpbmRlcjooKT0+SXgsRGFtOigpPT5GeCxEYXRhYmFzZTooKT0+UngsRGF0YWJhc2VCYWNrdXA6KCk9Pk94LERhdGFiYXNlWmFwOigpPT5CeCxEZWNpbWFsc0Fycm93TGVmdDooKT0+SHgsRGVjaW1hbHNBcnJvd1JpZ2h0OigpPT5xeCxEZWxldGU6KCk9PlZ4LERlc3NlcnQ6KCk9PlV4LERpYW1ldGVyOigpPT5qeCxEaWFtb25kOigpPT5aeCxEaWFtb25kTWludXM6KCk9Pld4LERpYW1vbmRQZXJjZW50OigpPT5aMCxEaWFtb25kUGx1czooKT0+R3gsRGljZTE6KCk9Pll4LERpY2UyOigpPT5YeCxEaWNlMzooKT0+UXgsRGljZTQ6KCk9PmViLERpY2U1OigpPT5LeCxEaWNlNjooKT0+SngsRGljZXM6KCk9PnRiLERpZmY6KCk9PmFiLERpc2M6KCk9PnNiLERpc2MyOigpPT5yYixEaXNjMzooKT0+aWIsRGlzY0FsYnVtOigpPT5vYixEaXZpZGU6KCk9Pm5iLERpdmlkZUNpcmNsZTooKT0+QzAsRGl2aWRlU3F1YXJlOigpPT5qMyxEbmE6KCk9PmRiLERuYU9mZjooKT0+bGIsRG9jazooKT0+Y2IsRG9nOigpPT5mYixEb2xsYXJTaWduOigpPT51YixEb251dDooKT0+cGIsRG9vckNsb3NlZDooKT0+bWIsRG9vckNsb3NlZExvY2tlZDooKT0+aGIsRG9vck9wZW46KCk9PnhiLERvdDooKT0+Z2IsRG90U3F1YXJlOigpPT5XMyxEb3dubG9hZDooKT0+YmIsRG93bmxvYWRDbG91ZDooKT0+VjAsRHJhZnRpbmdDb21wYXNzOigpPT52YixEcmFtYTooKT0+eWIsRHJpYmJibGU6KCk9PndiLERyaWxsOigpPT5NYixEcm9uZTooKT0+emIsRHJvcGxldDooKT0+U2IsRHJvcGxldE9mZjooKT0+a2IsRHJvcGxldHM6KCk9PkNiLERydW06KCk9PkxiLERydW1zdGljazooKT0+VGIsRHVtYmJlbGw6KCk9Pl9iLEVhcjooKT0+JGIsRWFyT2ZmOigpPT5BYixFYXJ0aDooKT0+WDAsRWFydGhMb2NrOigpPT5EYixFY2xpcHNlOigpPT5FYixFZGl0OigpPT5hcixFZGl0MjooKT0+bDMsRWRpdDM6KCk9Pm4zLEVnZzooKT0+SWIsRWdnRnJpZWQ6KCk9Pk5iLEVnZ09mZjooKT0+UGIsRWxsaXBzaXM6KCk9PkswLEVsbGlwc2lzVmVydGljYWw6KCk9PlEwLEVxdWFsOigpPT5SYixFcXVhbEFwcHJveGltYXRlbHk6KCk9PkZiLEVxdWFsTm90OigpPT5PYixFcXVhbFNxdWFyZTooKT0+RzMsRXJhc2VyOigpPT5CYixFdGhlcm5ldFBvcnQ6KCk9PkhiLEV1cm86KCk9PnFiLEV2Q2hhcmdlcjooKT0+VmIsRXhwYW5kOigpPT5qYixFeHRlcm5hbExpbms6KCk9PlViLEV5ZTooKT0+WWIsRXllQ2xvc2VkOigpPT5XYixFeWVPZmY6KCk9PkdiLEZhY2Vib29rOigpPT5YYixGYWN0b3J5OigpPT5aYixGYW46KCk9PlFiLEZhc3RGb3J3YXJkOigpPT5LYixGZWF0aGVyOigpPT5KYixGZW5jZTooKT0+ZXYsRmVycmlzV2hlZWw6KCk9PnR2LEZpZ21hOigpPT5hdixGaWxlOigpPT4kdixGaWxlQXJjaGl2ZTooKT0+cnYsRmlsZUF1ZGlvOigpPT5JaSxGaWxlQXVkaW8yOigpPT5JaSxGaWxlQXhpczNEOigpPT5KMCxGaWxlQXhpczNkOigpPT5KMCxGaWxlQmFkZ2U6KCk9PmU0LEZpbGVCYWRnZTI6KCk9PmU0LEZpbGVCYXJDaGFydDooKT0+cjQsRmlsZUJhckNoYXJ0MjooKT0+aTQsRmlsZUJveDooKT0+aXYsRmlsZUJyYWNlczooKT0+YTQsRmlsZUJyYWNlc0Nvcm5lcjooKT0+dDQsRmlsZUNoYXJ0Q29sdW1uOigpPT5pNCxGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOigpPT5yNCxGaWxlQ2hhcnRMaW5lOigpPT5vNCxGaWxlQ2hhcnRQaWU6KCk9PnM0LEZpbGVDaGVjazooKT0+b3YsRmlsZUNoZWNrMjooKT0+bjQsRmlsZUNoZWNrQ29ybmVyOigpPT5uNCxGaWxlQ2xvY2s6KCk9PnN2LEZpbGVDb2RlOigpPT5udixGaWxlQ29kZTI6KCk9Pmw0LEZpbGVDb2RlQ29ybmVyOigpPT5sNCxGaWxlQ29nOigpPT5jNCxGaWxlQ29nMjooKT0+YzQsRmlsZURpZmY6KCk9Pmx2LEZpbGVEaWdpdDooKT0+Y3YsRmlsZURvd246KCk9PmR2LEZpbGVFZGl0OigpPT5tNCxGaWxlRXhjbGFtYXRpb25Qb2ludDooKT0+ZDQsRmlsZUhlYWRwaG9uZTooKT0+SWksRmlsZUhlYXJ0OigpPT5mdixGaWxlSW1hZ2U6KCk9PnV2LEZpbGVJbnB1dDooKT0+cHYsRmlsZUpzb246KCk9PmE0LEZpbGVKc29uMjooKT0+dDQsRmlsZUtleTooKT0+ZjQsRmlsZUtleTI6KCk9PmY0LEZpbGVMaW5lQ2hhcnQ6KCk9Pm80LEZpbGVMb2NrOigpPT51NCxGaWxlTG9jazI6KCk9PnU0LEZpbGVNaW51czooKT0+bXYsRmlsZU1pbnVzMjooKT0+cDQsRmlsZU1pbnVzQ29ybmVyOigpPT5wNCxGaWxlTXVzaWM6KCk9Pmh2LEZpbGVPdXRwdXQ6KCk9Pmd2LEZpbGVQZW46KCk9Pm00LEZpbGVQZW5MaW5lOigpPT5oNCxGaWxlUGllQ2hhcnQ6KCk9PnM0LEZpbGVQbGF5OigpPT5nNCxGaWxlUGx1czooKT0+eHYsRmlsZVBsdXMyOigpPT5iNCxGaWxlUGx1c0Nvcm5lcjooKT0+YjQsRmlsZVF1ZXN0aW9uOigpPT54NCxGaWxlUXVlc3Rpb25NYXJrOigpPT54NCxGaWxlU2NhbjooKT0+YnYsRmlsZVNlYXJjaDooKT0+dnYsRmlsZVNlYXJjaDI6KCk9PnY0LEZpbGVTZWFyY2hDb3JuZXI6KCk9PnY0LEZpbGVTaWduYWw6KCk9Pnk0LEZpbGVTaWduYXR1cmU6KCk9Pmg0LEZpbGVTbGlkZXJzOigpPT53dixGaWxlU3ByZWFkc2hlZXQ6KCk9Pnl2LEZpbGVTdGFjazooKT0+TXYsRmlsZVN5bWxpbms6KCk9Pnp2LEZpbGVUZXJtaW5hbDooKT0+a3YsRmlsZVRleHQ6KCk9PlN2LEZpbGVUeXBlOigpPT5DdixGaWxlVHlwZTI6KCk9Pnc0LEZpbGVUeXBlQ29ybmVyOigpPT53NCxGaWxlVXA6KCk9Pkx2LEZpbGVVc2VyOigpPT5UdixGaWxlVmlkZW86KCk9Pmc0LEZpbGVWaWRlbzI6KCk9Pk00LEZpbGVWaWRlb0NhbWVyYTooKT0+TTQsRmlsZVZvbHVtZTooKT0+X3YsRmlsZVZvbHVtZTI6KCk9Pnk0LEZpbGVXYXJuaW5nOigpPT5kNCxGaWxlWDooKT0+QXYsRmlsZVgyOigpPT56NCxGaWxlWENvcm5lcjooKT0+ejQsRmlsZXM6KCk9PkR2LEZpbG06KCk9PkV2LEZpbHRlcjooKT0+VDQsRmlsdGVyWDooKT0+TDQsRmluZ2VycHJpbnQ6KCk9Pms0LEZpbmdlcnByaW50UGF0dGVybjooKT0+azQsRmlyZUV4dGluZ3Vpc2hlcjooKT0+TnYsRmlzaDooKT0+RnYsRmlzaE9mZjooKT0+UHYsRmlzaFN5bWJvbDooKT0+SXYsRmlzaGluZ0hvb2s6KCk9Pk92LEZsYWc6KCk9PlZ2LEZsYWdPZmY6KCk9PkJ2LEZsYWdUcmlhbmdsZUxlZnQ6KCk9PlJ2LEZsYWdUcmlhbmdsZVJpZ2h0OigpPT5IdixGbGFtZTooKT0+VXYsRmxhbWVLaW5kbGluZzooKT0+cXYsRmxhc2hsaWdodDooKT0+V3YsRmxhc2hsaWdodE9mZjooKT0+anYsRmxhc2tDb25pY2FsOigpPT5adixGbGFza0NvbmljYWxPZmY6KCk9Pkd2LEZsYXNrUm91bmQ6KCk9Pll2LEZsaXBIb3Jpem9udGFsOigpPT5YdixGbGlwSG9yaXpvbnRhbDI6KCk9PlF2LEZsaXBWZXJ0aWNhbDooKT0+SnYsRmxpcFZlcnRpY2FsMjooKT0+S3YsRmxvd2VyOigpPT50eSxGbG93ZXIyOigpPT5leSxGb2N1czooKT0+YXksRm9sZEhvcml6b250YWw6KCk9PnJ5LEZvbGRWZXJ0aWNhbDooKT0+aXksRm9sZGVyOigpPT5EeSxGb2xkZXJBcmNoaXZlOigpPT5veSxGb2xkZXJDaGVjazooKT0+c3ksRm9sZGVyQ2xvY2s6KCk9Pm55LEZvbGRlckNsb3NlZDooKT0+bHksRm9sZGVyQ29kZTooKT0+Y3ksRm9sZGVyQ29nOigpPT5TNCxGb2xkZXJDb2cyOigpPT5TNCxGb2xkZXJEb3Q6KCk9PmR5LEZvbGRlckRvd246KCk9PmZ5LEZvbGRlckVkaXQ6KCk9PkM0LEZvbGRlckdpdDooKT0+cHksRm9sZGVyR2l0MjooKT0+dXksRm9sZGVySGVhcnQ6KCk9Pmh5LEZvbGRlcklucHV0OigpPT5teSxGb2xkZXJLYW5iYW46KCk9Pmd5LEZvbGRlcktleTooKT0+eHksRm9sZGVyTG9jazooKT0+YnksRm9sZGVyTWludXM6KCk9PnZ5LEZvbGRlck9wZW46KCk9Pnd5LEZvbGRlck9wZW5Eb3Q6KCk9Pnl5LEZvbGRlck91dHB1dDooKT0+TXksRm9sZGVyUGVuOigpPT5DNCxGb2xkZXJQbHVzOigpPT56eSxGb2xkZXJSb290OigpPT5reSxGb2xkZXJTZWFyY2g6KCk9PkN5LEZvbGRlclNlYXJjaDI6KCk9PlN5LEZvbGRlclN5bWxpbms6KCk9Pkx5LEZvbGRlclN5bmM6KCk9PlR5LEZvbGRlclRyZWU6KCk9Pl95LEZvbGRlclVwOigpPT5BeSxGb2xkZXJYOigpPT4keSxGb2xkZXJzOigpPT5FeSxGb290cHJpbnRzOigpPT5OeSxGb3JrS25pZmU6KCk9Pk9sLEZvcmtLbmlmZUNyb3NzZWQ6KCk9PkZsLEZvcmtsaWZ0OigpPT5QeSxGb3JtOigpPT5JeSxGb3JtSW5wdXQ6KCk9PmQzLEZvcndhcmQ6KCk9PkZ5LEZyYW1lOigpPT5PeSxGcmFtZXI6KCk9PkJ5LEZyb3duOigpPT5SeSxGdWVsOigpPT5IeSxGdWxsc2NyZWVuOigpPT5xeSxGdW5jdGlvblNxdWFyZTooKT0+WTMsRnVubmVsOigpPT5UNCxGdW5uZWxQbHVzOigpPT5WeSxGdW5uZWxYOigpPT5MNCxHYWxsZXJ5SG9yaXpvbnRhbDooKT0+anksR2FsbGVyeUhvcml6b250YWxFbmQ6KCk9PlV5LEdhbGxlcnlUaHVtYm5haWxzOigpPT5XeSxHYWxsZXJ5VmVydGljYWw6KCk9Pll5LEdhbGxlcnlWZXJ0aWNhbEVuZDooKT0+R3ksR2FtZXBhZDooKT0+UXksR2FtZXBhZDI6KCk9Plp5LEdhbWVwYWREaXJlY3Rpb25hbDooKT0+WHksR2FudHRDaGFydDooKT0+bjAsR2FudHRDaGFydFNxdWFyZTooKT0+UmksR2F1Z2U6KCk9Pkt5LEdhdWdlQ2lyY2xlOigpPT5MMCxHYXZlbDooKT0+SnksR2VtOigpPT5ldyxHZW9yZ2lhbkxhcmk6KCk9PnR3LEdob3N0OigpPT5hdyxHaWZ0OigpPT5ydyxHaXRCcmFuY2g6KCk9Pm93LEdpdEJyYW5jaE1pbnVzOigpPT5pdyxHaXRCcmFuY2hQbHVzOigpPT5zdyxHaXRDb21taXQ6KCk9Pl80LEdpdENvbW1pdEhvcml6b250YWw6KCk9Pl80LEdpdENvbW1pdFZlcnRpY2FsOigpPT5udyxHaXRDb21wYXJlOigpPT5jdyxHaXRDb21wYXJlQXJyb3dzOigpPT5sdyxHaXRGb3JrOigpPT5kdyxHaXRHcmFwaDooKT0+ZncsR2l0TWVyZ2U6KCk9PnV3LEdpdFB1bGxSZXF1ZXN0OigpPT5idyxHaXRQdWxsUmVxdWVzdEFycm93OigpPT5wdyxHaXRQdWxsUmVxdWVzdENsb3NlZDooKT0+aHcsR2l0UHVsbFJlcXVlc3RDcmVhdGU6KCk9Pmd3LEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3c6KCk9Pm13LEdpdFB1bGxSZXF1ZXN0RHJhZnQ6KCk9Pnh3LEdpdGh1YjooKT0+dncsR2l0bGFiOigpPT55dyxHbGFzc1dhdGVyOigpPT53dyxHbGFzc2VzOigpPT5NdyxHbG9iZTooKT0+a3csR2xvYmUyOigpPT5YMCxHbG9iZUxvY2s6KCk9Pnp3LEdvYWw6KCk9PlN3LEdwdTooKT0+Q3csR3JhYjooKT0+TjQsR3JhZHVhdGlvbkNhcDooKT0+THcsR3JhcGU6KCk9PlR3LEdyaWQ6KCk9PkZpLEdyaWQyWDI6KCk9PkU0LEdyaWQyWDJDaGVjazooKT0+QTQsR3JpZDJYMlBsdXM6KCk9PiQ0LEdyaWQyWDJYOigpPT5ENCxHcmlkMngyOigpPT5FNCxHcmlkMngyQ2hlY2s6KCk9PkE0LEdyaWQyeDJQbHVzOigpPT4kNCxHcmlkMngyWDooKT0+RDQsR3JpZDNYMzooKT0+RmksR3JpZDN4MjooKT0+X3csR3JpZDN4MzooKT0+RmksR3JpcDooKT0+RHcsR3JpcEhvcml6b250YWw6KCk9PkF3LEdyaXBWZXJ0aWNhbDooKT0+JHcsR3JvdXA6KCk9PkV3LEd1aXRhcjooKT0+UHcsSGFtOigpPT5OdyxIYW1idXJnZXI6KCk9Pkl3LEhhbW1lcjooKT0+RncsSGFuZDooKT0+VncsSGFuZENvaW5zOigpPT5PdyxIYW5kRmlzdDooKT0+QncsSGFuZEdyYWI6KCk9Pk40LEhhbmRIZWFydDooKT0+UncsSGFuZEhlbHBpbmc6KCk9PlA0LEhhbmRNZXRhbDooKT0+SHcsSGFuZFBsYXR0ZXI6KCk9PnF3LEhhbmRiYWc6KCk9PlV3LEhhbmRzaGFrZTooKT0+ancsSGFyZERyaXZlOigpPT5YdyxIYXJkRHJpdmVEb3dubG9hZDooKT0+V3csSGFyZERyaXZlVXBsb2FkOigpPT5HdyxIYXJkSGF0OigpPT5ZdyxIYXNoOigpPT5adyxIYXRHbGFzc2VzOigpPT5RdyxIYXplOigpPT5LdyxIZDooKT0+SncsSGRtaVBvcnQ6KCk9PmVNLEhlYWRpbmc6KCk9Pm5NLEhlYWRpbmcxOigpPT50TSxIZWFkaW5nMjooKT0+ck0sSGVhZGluZzM6KCk9PmFNLEhlYWRpbmc0OigpPT5pTSxIZWFkaW5nNTooKT0+b00sSGVhZGluZzY6KCk9PnNNLEhlYWRwaG9uZU9mZjooKT0+bE0sSGVhZHBob25lczooKT0+Y00sSGVhZHNldDooKT0+ZE0sSGVhcnQ6KCk9PmJNLEhlYXJ0Q3JhY2s6KCk9PmZNLEhlYXJ0SGFuZHNoYWtlOigpPT51TSxIZWFydE1pbnVzOigpPT5wTSxIZWFydE9mZjooKT0+aE0sSGVhcnRQbHVzOigpPT5tTSxIZWFydFB1bHNlOigpPT5nTSxIZWF0ZXI6KCk9PnhNLEhlbGljb3B0ZXI6KCk9PnZNLEhlbHBDaXJjbGU6KCk9Pk5pLEhlbHBpbmdIYW5kOigpPT5QNCxIZXhhZ29uOigpPT55TSxIaWdobGlnaHRlcjooKT0+d00sSGlzdG9yeTooKT0+TU0sSG9tZTooKT0+STQsSG9wOigpPT56TSxIb3BPZmY6KCk9PmtNLEhvc3BpdGFsOigpPT5TTSxIb3RlbDooKT0+Q00sSG91cmdsYXNzOigpPT5MTSxIb3VzZTooKT0+STQsSG91c2VIZWFydDooKT0+VE0sSG91c2VQbHVnOigpPT5fTSxIb3VzZVBsdXM6KCk9PkFNLEhvdXNlV2lmaTooKT0+JE0sSWNlQ3JlYW06KCk9Pk80LEljZUNyZWFtMjooKT0+RjQsSWNlQ3JlYW1Cb3dsOigpPT5GNCxJY2VDcmVhbUNvbmU6KCk9Pk80LElkQ2FyZDooKT0+RU0sSWRDYXJkTGFueWFyZDooKT0+RE0sSW1hZ2U6KCk9PkhNLEltYWdlRG93bjooKT0+Tk0sSW1hZ2VNaW51czooKT0+UE0sSW1hZ2VPZmY6KCk9PklNLEltYWdlUGxheTooKT0+T00sSW1hZ2VQbHVzOigpPT5GTSxJbWFnZVVwOigpPT5CTSxJbWFnZVVwc2NhbGU6KCk9PlJNLEltYWdlczooKT0+cU0sSW1wb3J0OigpPT5WTSxJbmJveDooKT0+VU0sSW5kZW50OigpPT5CaSxJbmRlbnREZWNyZWFzZTooKT0+T2ksSW5kZW50SW5jcmVhc2U6KCk9PkJpLEluZGlhblJ1cGVlOigpPT5qTSxJbmZpbml0eTooKT0+V00sSW5mbzooKT0+R00sSW5zcGVjdDooKT0+ZWwsSW5zcGVjdGlvblBhbmVsOigpPT5ZTSxJbnN0YWdyYW06KCk9PlpNLEl0YWxpYzooKT0+WE0sSXRlcmF0aW9uQ2N3OigpPT5RTSxJdGVyYXRpb25DdzooKT0+S00sSmFwYW5lc2VZZW46KCk9PkpNLEpveXN0aWNrOigpPT5leixLYW5iYW46KCk9PnR6LEthbmJhblNxdWFyZTooKT0+WjMsS2FuYmFuU3F1YXJlRGFzaGVkOigpPT5xMyxLYXlhazooKT0+YXosS2V5OigpPT5veixLZXlSb3VuZDooKT0+cnosS2V5U3F1YXJlOigpPT5peixLZXlib2FyZDooKT0+bHosS2V5Ym9hcmRNdXNpYzooKT0+c3osS2V5Ym9hcmRPZmY6KCk9Pm56LExhbXA6KCk9Pmh6LExhbXBDZWlsaW5nOigpPT5jeixMYW1wRGVzazooKT0+ZHosTGFtcEZsb29yOigpPT5meixMYW1wV2FsbERvd246KCk9PnV6LExhbXBXYWxsVXA6KCk9PnB6LExhbmRQbG90OigpPT5teixMYW5kbWFyazooKT0+Z3osTGFuZ3VhZ2VzOigpPT54eixMYXB0b3A6KCk9PnZ6LExhcHRvcDI6KCk9PkI0LExhcHRvcE1pbmltYWw6KCk9PkI0LExhcHRvcE1pbmltYWxDaGVjazooKT0+YnosTGFzc286KCk9Pnd6LExhc3NvU2VsZWN0OigpPT55eixMYXVnaDooKT0+TXosTGF5ZXJzOigpPT5SNCxMYXllcnMyOigpPT56eixMYXllcnMzOigpPT5SNCxMYXllcnNQbHVzOigpPT5reixMYXlvdXQ6KCk9PnMzLExheW91dERhc2hib2FyZDooKT0+U3osTGF5b3V0R3JpZDooKT0+Q3osTGF5b3V0TGlzdDooKT0+THosTGF5b3V0UGFuZWxMZWZ0OigpPT5UeixMYXlvdXRQYW5lbFRvcDooKT0+X3osTGF5b3V0VGVtcGxhdGU6KCk9PkF6LExlYWY6KCk9PiR6LExlYWZ5R3JlZW46KCk9PkR6LExlY3Rlcm46KCk9PkV6LExldHRlclRleHQ6KCk9Pk1sLExpYnJhcnk6KCk9PlB6LExpYnJhcnlCaWc6KCk9Pk56LExpYnJhcnlTcXVhcmU6KCk9PlgzLExpZmVCdW95OigpPT5JeixMaWdhdHVyZTooKT0+RnosTGlnaHRidWxiOigpPT5CeixMaWdodGJ1bGJPZmY6KCk9Pk96LExpbmVDaGFydDooKT0+aTAsTGluZVNxdWlnZ2xlOigpPT5SeixMaW5rOigpPT5WeixMaW5rMjooKT0+SHosTGluazJPZmY6KCk9PnF6LExpbmtlZGluOigpPT5VeixMaXN0OigpPT5jayxMaXN0Q2hlY2s6KCk9Pmp6LExpc3RDaGVja3M6KCk9Pld6LExpc3RDaGV2cm9uc0Rvd25VcDooKT0+R3osTGlzdENoZXZyb25zVXBEb3duOigpPT5ZeixMaXN0Q29sbGFwc2U6KCk9Plp6LExpc3RFbmQ6KCk9Plh6LExpc3RGaWx0ZXI6KCk9Pkt6LExpc3RGaWx0ZXJQbHVzOigpPT5ReixMaXN0SW5kZW50RGVjcmVhc2U6KCk9Pk9pLExpc3RJbmRlbnRJbmNyZWFzZTooKT0+QmksTGlzdE1pbnVzOigpPT5KeixMaXN0TXVzaWM6KCk9PmVrLExpc3RPcmRlcmVkOigpPT50ayxMaXN0UGx1czooKT0+YWssTGlzdFJlc3RhcnQ6KCk9PnJrLExpc3RTdGFydDooKT0+aWssTGlzdFRvZG86KCk9Pm9rLExpc3RUcmVlOigpPT5zayxMaXN0VmlkZW86KCk9Pm5rLExpc3RYOigpPT5sayxMb2FkZXI6KCk9PmZrLExvYWRlcjI6KCk9Pkg0LExvYWRlckNpcmNsZTooKT0+SDQsTG9hZGVyUGlud2hlZWw6KCk9PmRrLExvY2F0ZTooKT0+aGssTG9jYXRlRml4ZWQ6KCk9PnVrLExvY2F0ZU9mZjooKT0+cGssTG9jYXRpb25FZGl0OigpPT5qNCxMb2NrOigpPT5nayxMb2NrS2V5aG9sZTooKT0+bWssTG9ja0tleWhvbGVPcGVuOigpPT5xNCxMb2NrT3BlbjooKT0+VjQsTG9nSW46KCk9PnhrLExvZ091dDooKT0+YmssTG9nczooKT0+dmssTG9sbGlwb3A6KCk9PnlrLEx1Z2dhZ2U6KCk9PndrLE1TcXVhcmU6KCk9PlEzLE1hZ25ldDooKT0+TWssTWFpbDooKT0+QWssTWFpbENoZWNrOigpPT56ayxNYWlsTWludXM6KCk9PmtrLE1haWxPcGVuOigpPT5TayxNYWlsUGx1czooKT0+Q2ssTWFpbFF1ZXN0aW9uOigpPT5VNCxNYWlsUXVlc3Rpb25NYXJrOigpPT5VNCxNYWlsU2VhcmNoOigpPT5MayxNYWlsV2FybmluZzooKT0+VGssTWFpbFg6KCk9Pl9rLE1haWxib3g6KCk9PiRrLE1haWxzOigpPT5EayxNYXA6KCk9PkdrLE1hcE1pbnVzOigpPT5FayxNYXBQaW46KCk9PlVrLE1hcFBpbkNoZWNrOigpPT5QayxNYXBQaW5DaGVja0luc2lkZTooKT0+TmssTWFwUGluSG91c2U6KCk9PklrLE1hcFBpbk1pbnVzOigpPT5PayxNYXBQaW5NaW51c0luc2lkZTooKT0+RmssTWFwUGluT2ZmOigpPT5CayxNYXBQaW5QZW46KCk9Pmo0LE1hcFBpblBsdXM6KCk9PkhrLE1hcFBpblBsdXNJbnNpZGU6KCk9PlJrLE1hcFBpblg6KCk9PlZrLE1hcFBpblhJbnNpZGU6KCk9PnFrLE1hcFBpbm5lZDooKT0+amssTWFwUGx1czooKT0+V2ssTWFyczooKT0+WmssTWFyc1N0cm9rZTooKT0+WWssTWFydGluaTooKT0+WGssTWF4aW1pemU6KCk9PktrLE1heGltaXplMjooKT0+UWssTWVkYWw6KCk9PnRTLE1lZ2FwaG9uZTooKT0+ZVMsTWVnYXBob25lT2ZmOigpPT5KayxNZWg6KCk9PmFTLE1lbW9yeVN0aWNrOigpPT5yUyxNZW51OigpPT5vUyxNZW51U3F1YXJlOigpPT5LMyxNZXJnZTooKT0+aVMsTWVzc2FnZUNpcmNsZTooKT0+bVMsTWVzc2FnZUNpcmNsZUNvZGU6KCk9PnNTLE1lc3NhZ2VDaXJjbGVEYXNoZWQ6KCk9Pm5TLE1lc3NhZ2VDaXJjbGVIZWFydDooKT0+bFMsTWVzc2FnZUNpcmNsZU1vcmU6KCk9PmNTLE1lc3NhZ2VDaXJjbGVPZmY6KCk9PmRTLE1lc3NhZ2VDaXJjbGVQbHVzOigpPT5mUyxNZXNzYWdlQ2lyY2xlUXVlc3Rpb246KCk9Plc0LE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcms6KCk9Plc0LE1lc3NhZ2VDaXJjbGVSZXBseTooKT0+dVMsTWVzc2FnZUNpcmNsZVdhcm5pbmc6KCk9PnBTLE1lc3NhZ2VDaXJjbGVYOigpPT5oUyxNZXNzYWdlU3F1YXJlOigpPT4kUyxNZXNzYWdlU3F1YXJlQ29kZTooKT0+Z1MsTWVzc2FnZVNxdWFyZURhc2hlZDooKT0+eFMsTWVzc2FnZVNxdWFyZURpZmY6KCk9PmJTLE1lc3NhZ2VTcXVhcmVEb3Q6KCk9PnZTLE1lc3NhZ2VTcXVhcmVIZWFydDooKT0+eVMsTWVzc2FnZVNxdWFyZUxvY2s6KCk9PndTLE1lc3NhZ2VTcXVhcmVNb3JlOigpPT5NUyxNZXNzYWdlU3F1YXJlT2ZmOigpPT56UyxNZXNzYWdlU3F1YXJlUGx1czooKT0+a1MsTWVzc2FnZVNxdWFyZVF1b3RlOigpPT5TUyxNZXNzYWdlU3F1YXJlUmVwbHk6KCk9PkNTLE1lc3NhZ2VTcXVhcmVTaGFyZTooKT0+TFMsTWVzc2FnZVNxdWFyZVRleHQ6KCk9PlRTLE1lc3NhZ2VTcXVhcmVXYXJuaW5nOigpPT5fUyxNZXNzYWdlU3F1YXJlWDooKT0+QVMsTWVzc2FnZXNTcXVhcmU6KCk9PkRTLE1pYzooKT0+TlMsTWljMjooKT0+RzQsTWljT2ZmOigpPT5FUyxNaWNWb2NhbDooKT0+RzQsTWljcm9jaGlwOigpPT5QUyxNaWNyb3Njb3BlOigpPT5JUyxNaWNyb3dhdmU6KCk9PkZTLE1pbGVzdG9uZTooKT0+T1MsTWlsazooKT0+UlMsTWlsa09mZjooKT0+QlMsTWluaW1pemU6KCk9PnFTLE1pbmltaXplMjooKT0+SFMsTWludXM6KCk9PlZTLE1pbnVzQ2lyY2xlOigpPT5UMCxNaW51c1NxdWFyZTooKT0+SjMsTW9uaXRvcjooKT0+ckMsTW9uaXRvckNoZWNrOigpPT5VUyxNb25pdG9yQ2xvdWQ6KCk9PmpTLE1vbml0b3JDb2c6KCk9PldTLE1vbml0b3JEb3Q6KCk9PkdTLE1vbml0b3JEb3duOigpPT5ZUyxNb25pdG9yT2ZmOigpPT5aUyxNb25pdG9yUGF1c2U6KCk9PlhTLE1vbml0b3JQbGF5OigpPT5RUyxNb25pdG9yU21hcnRwaG9uZTooKT0+S1MsTW9uaXRvclNwZWFrZXI6KCk9PkpTLE1vbml0b3JTdG9wOigpPT5lQyxNb25pdG9yVXA6KCk9PnRDLE1vbml0b3JYOigpPT5hQyxNb29uOigpPT5zQyxNb29uU3RhcjooKT0+aUMsTW9yZUhvcml6b250YWw6KCk9PkswLE1vcmVWZXJ0aWNhbDooKT0+UTAsTW90b3JiaWtlOigpPT5vQyxNb3VudGFpbjooKT0+bEMsTW91bnRhaW5Tbm93OigpPT5uQyxNb3VzZTooKT0+bUMsTW91c2VPZmY6KCk9PmNDLE1vdXNlUG9pbnRlcjooKT0+aEMsTW91c2VQb2ludGVyMjooKT0+ZkMsTW91c2VQb2ludGVyMk9mZjooKT0+ZEMsTW91c2VQb2ludGVyQmFuOigpPT51QyxNb3VzZVBvaW50ZXJDbGljazooKT0+cEMsTW91c2VQb2ludGVyU3F1YXJlRGFzaGVkOigpPT5WMyxNb3ZlOigpPT5UQyxNb3ZlM0Q6KCk9Plk0LE1vdmUzZDooKT0+WTQsTW92ZURpYWdvbmFsOigpPT54QyxNb3ZlRGlhZ29uYWwyOigpPT5nQyxNb3ZlRG93bjooKT0+eUMsTW92ZURvd25MZWZ0OigpPT5iQyxNb3ZlRG93blJpZ2h0OigpPT52QyxNb3ZlSG9yaXpvbnRhbDooKT0+TUMsTW92ZUxlZnQ6KCk9PndDLE1vdmVSaWdodDooKT0+ekMsTW92ZVVwOigpPT5DQyxNb3ZlVXBMZWZ0OigpPT5rQyxNb3ZlVXBSaWdodDooKT0+U0MsTW92ZVZlcnRpY2FsOigpPT5MQyxNdXNpYzooKT0+REMsTXVzaWMyOigpPT5fQyxNdXNpYzM6KCk9PkFDLE11c2ljNDooKT0+JEMsTmF2aWdhdGlvbjooKT0+SUMsTmF2aWdhdGlvbjI6KCk9Pk5DLE5hdmlnYXRpb24yT2ZmOigpPT5FQyxOYXZpZ2F0aW9uT2ZmOigpPT5QQyxOZXR3b3JrOigpPT5PQyxOZXdzcGFwZXI6KCk9PkZDLE5mYzooKT0+QkMsTm9uQmluYXJ5OigpPT5SQyxOb3RlYm9vazooKT0+VUMsTm90ZWJvb2tQZW46KCk9PkhDLE5vdGVib29rVGFiczooKT0+cUMsTm90ZWJvb2tUZXh0OigpPT5WQyxOb3RlcGFkVGV4dDooKT0+V0MsTm90ZXBhZFRleHREYXNoZWQ6KCk9PmpDLE51dDooKT0+WUMsTnV0T2ZmOigpPT5HQyxPY3RhZ29uOigpPT5YQyxPY3RhZ29uQWxlcnQ6KCk9Plo0LE9jdGFnb25NaW51czooKT0+WkMsT2N0YWdvblBhdXNlOigpPT5YNCxPY3RhZ29uWDooKT0+UTQsT21lZ2E6KCk9PlFDLE9wdGlvbjooKT0+S0MsT3JiaXQ6KCk9PkpDLE9yaWdhbWk6KCk9PmVMLE91dGRlbnQ6KCk9Pk9pLFBhY2thZ2U6KCk9PmxMLFBhY2thZ2UyOigpPT50TCxQYWNrYWdlQ2hlY2s6KCk9PmFMLFBhY2thZ2VNaW51czooKT0+ckwsUGFja2FnZU9wZW46KCk9PmlMLFBhY2thZ2VQbHVzOigpPT5vTCxQYWNrYWdlU2VhcmNoOigpPT5zTCxQYWNrYWdlWDooKT0+bkwsUGFpbnRCdWNrZXQ6KCk9PmNMLFBhaW50Um9sbGVyOigpPT5kTCxQYWludGJydXNoOigpPT5mTCxQYWludGJydXNoMjooKT0+SzQsUGFpbnRicnVzaFZlcnRpY2FsOigpPT5LNCxQYWxldHRlOigpPT51TCxQYWxtdHJlZTooKT0+Q2wsUGFuZGE6KCk9PnBMLFBhbmVsQm90dG9tOigpPT5nTCxQYW5lbEJvdHRvbUNsb3NlOigpPT5oTCxQYW5lbEJvdHRvbURhc2hlZDooKT0+SjQsUGFuZWxCb3R0b21JbmFjdGl2ZTooKT0+SjQsUGFuZWxCb3R0b21PcGVuOigpPT5tTCxQYW5lbExlZnQ6KCk9PnIzLFBhbmVsTGVmdENsb3NlOigpPT5lMyxQYW5lbExlZnREYXNoZWQ6KCk9PnQzLFBhbmVsTGVmdEluYWN0aXZlOigpPT50MyxQYW5lbExlZnRPcGVuOigpPT5hMyxQYW5lbExlZnRSaWdodERhc2hlZDooKT0+eEwsUGFuZWxSaWdodDooKT0+eUwsUGFuZWxSaWdodENsb3NlOigpPT5iTCxQYW5lbFJpZ2h0RGFzaGVkOigpPT5pMyxQYW5lbFJpZ2h0SW5hY3RpdmU6KCk9PmkzLFBhbmVsUmlnaHRPcGVuOigpPT52TCxQYW5lbFRvcDooKT0+U0wsUGFuZWxUb3BCb3R0b21EYXNoZWQ6KCk9PndMLFBhbmVsVG9wQ2xvc2U6KCk9Pk1MLFBhbmVsVG9wRGFzaGVkOigpPT5vMyxQYW5lbFRvcEluYWN0aXZlOigpPT5vMyxQYW5lbFRvcE9wZW46KCk9PnpMLFBhbmVsc0xlZnRCb3R0b206KCk9PmtMLFBhbmVsc0xlZnRSaWdodDooKT0+RzAsUGFuZWxzUmlnaHRCb3R0b206KCk9PkNMLFBhbmVsc1RvcEJvdHRvbTooKT0+cDMsUGFuZWxzVG9wTGVmdDooKT0+czMsUGFwZXJjbGlwOigpPT5MTCxQYXJlbnRoZXNlczooKT0+X0wsUGFya2luZ0NpcmNsZTooKT0+QTAsUGFya2luZ0NpcmNsZU9mZjooKT0+XzAsUGFya2luZ01ldGVyOigpPT5UTCxQYXJraW5nU3F1YXJlOigpPT5hbCxQYXJraW5nU3F1YXJlT2ZmOigpPT50bCxQYXJ0eVBvcHBlcjooKT0+QUwsUGF1c2U6KCk9PiRMLFBhdXNlQ2lyY2xlOigpPT4kMCxQYXVzZU9jdGFnb246KCk9Plg0LFBhd1ByaW50OigpPT5ETCxQY0Nhc2U6KCk9PkVMLFBlbjooKT0+bDMsUGVuQm94OigpPT5hcixQZW5MaW5lOigpPT5uMyxQZW5PZmY6KCk9Pk5MLFBlblNxdWFyZTooKT0+YXIsUGVuVG9vbDooKT0+UEwsUGVuY2lsOigpPT5CTCxQZW5jaWxMaW5lOigpPT5JTCxQZW5jaWxPZmY6KCk9PkZMLFBlbmNpbFJ1bGVyOigpPT5PTCxQZW50YWdvbjooKT0+UkwsUGVyY2VudDooKT0+SEwsUGVyY2VudENpcmNsZTooKT0+RDAsUGVyY2VudERpYW1vbmQ6KCk9PlowLFBlcmNlbnRTcXVhcmU6KCk9PnJsLFBlcnNvblN0YW5kaW5nOigpPT5xTCxQaGlsaXBwaW5lUGVzbzooKT0+VkwsUGhvbmU6KCk9PlhMLFBob25lQ2FsbDooKT0+akwsUGhvbmVGb3J3YXJkZWQ6KCk9PlVMLFBob25lSW5jb21pbmc6KCk9PldMLFBob25lTWlzc2VkOigpPT5HTCxQaG9uZU9mZjooKT0+WUwsUGhvbmVPdXRnb2luZzooKT0+WkwsUGk6KCk9PlFMLFBpU3F1YXJlOigpPT5pbCxQaWFubzooKT0+S0wsUGlja2F4ZTooKT0+SkwsUGljdHVyZUluUGljdHVyZTooKT0+dFQsUGljdHVyZUluUGljdHVyZTI6KCk9PmVULFBpZUNoYXJ0OigpPT5sMCxQaWdneUJhbms6KCk9PmFULFBpbGNyb3c6KCk9Pm9ULFBpbGNyb3dMZWZ0OigpPT5yVCxQaWxjcm93UmlnaHQ6KCk9PmlULFBpbGNyb3dTcXVhcmU6KCk9Pm9sLFBpbGw6KCk9Pm5ULFBpbGxCb3R0bGU6KCk9PnNULFBpbjooKT0+Y1QsUGluT2ZmOigpPT5sVCxQaXBldHRlOigpPT5kVCxQaXp6YTooKT0+ZlQsUGxhbmU6KCk9PmhULFBsYW5lTGFuZGluZzooKT0+dVQsUGxhbmVUYWtlb2ZmOigpPT5wVCxQbGF5OigpPT5tVCxQbGF5Q2lyY2xlOigpPT5FMCxQbGF5U3F1YXJlOigpPT5zbCxQbHVnOigpPT54VCxQbHVnMjooKT0+Z1QsUGx1Z1phcDooKT0+YzMsUGx1Z1phcDI6KCk9PmMzLFBsdXM6KCk9PmJULFBsdXNDaXJjbGU6KCk9Pk4wLFBsdXNTcXVhcmU6KCk9Pm5sLFBvY2tldDooKT0+eVQsUG9ja2V0S25pZmU6KCk9PnZULFBvZGNhc3Q6KCk9PndULFBvaW50ZXI6KCk9PnpULFBvaW50ZXJPZmY6KCk9Pk1ULFBvcGNvcm46KCk9PmtULFBvcHNpY2xlOigpPT5TVCxQb3VuZFN0ZXJsaW5nOigpPT5DVCxQb3dlcjooKT0+VFQsUG93ZXJDaXJjbGU6KCk9PlAwLFBvd2VyT2ZmOigpPT5MVCxQb3dlclNxdWFyZTooKT0+bGwsUHJlc2VudGF0aW9uOigpPT5fVCxQcmludGVyOigpPT5BVCxQcmludGVyQ2hlY2s6KCk9PiRULFByb2plY3RvcjooKT0+RFQsUHJvcG9ydGlvbnM6KCk9PkVULFB1enpsZTooKT0+TlQsUHlyYW1pZDooKT0+UFQsUXJDb2RlOigpPT5JVCxRdW90ZTooKT0+RlQsUmFiYml0OigpPT5PVCxSYWRhcjooKT0+QlQsUmFkaWF0aW9uOigpPT5SVCxSYWRpY2FsOigpPT5IVCxSYWRpbzooKT0+VVQsUmFkaW9SZWNlaXZlcjooKT0+cVQsUmFkaW9Ub3dlcjooKT0+VlQsUmFkaXVzOigpPT5qVCxSYWlsU3ltYm9sOigpPT5XVCxSYWluYm93OigpPT5HVCxSYXQ6KCk9PllULFJhdGlvOigpPT5aVCxSZWNlaXB0OigpPT5vXyxSZWNlaXB0Q2VudDooKT0+WFQsUmVjZWlwdEV1cm86KCk9PlFULFJlY2VpcHRJbmRpYW5SdXBlZTooKT0+S1QsUmVjZWlwdEphcGFuZXNlWWVuOigpPT5KVCxSZWNlaXB0UG91bmRTdGVybGluZzooKT0+ZV8sUmVjZWlwdFJ1c3NpYW5SdWJsZTooKT0+dF8sUmVjZWlwdFN3aXNzRnJhbmM6KCk9PmFfLFJlY2VpcHRUZXh0OigpPT5yXyxSZWNlaXB0VHVya2lzaExpcmE6KCk9PmlfLFJlY3RhbmdsZUNpcmNsZTooKT0+c18sUmVjdGFuZ2xlRWxsaXBzaXM6KCk9PmQzLFJlY3RhbmdsZUdvZ2dsZXM6KCk9Pm5fLFJlY3RhbmdsZUhvcml6b250YWw6KCk9PmxfLFJlY3RhbmdsZVZlcnRpY2FsOigpPT5jXyxSZWN5Y2xlOigpPT5kXyxSZWRvOigpPT5wXyxSZWRvMjooKT0+Zl8sUmVkb0RvdDooKT0+dV8sUmVmcmVzaENjdzooKT0+bV8sUmVmcmVzaENjd0RvdDooKT0+aF8sUmVmcmVzaEN3OigpPT54XyxSZWZyZXNoQ3dPZmY6KCk9PmdfLFJlZnJpZ2VyYXRvcjooKT0+Yl8sUmVnZXg6KCk9PnZfLFJlbW92ZUZvcm1hdHRpbmc6KCk9PnlfLFJlcGVhdDooKT0+el8sUmVwZWF0MTooKT0+d18sUmVwZWF0MjooKT0+TV8sUmVwbGFjZTooKT0+U18sUmVwbGFjZUFsbDooKT0+a18sUmVwbHk6KCk9PkxfLFJlcGx5QWxsOigpPT5DXyxSZXdpbmQ6KCk9PlRfLFJpYmJvbjooKT0+X18sUm9ja2V0OigpPT5BXyxSb2NraW5nQ2hhaXI6KCk9PiRfLFJvbGxlckNvYXN0ZXI6KCk9PkRfLFJvc2U6KCk9PkVfLFJvdGF0ZTNEOigpPT5mMyxSb3RhdGUzZDooKT0+ZjMsUm90YXRlQ2N3OigpPT5JXyxSb3RhdGVDY3dLZXk6KCk9Pk5fLFJvdGF0ZUNjd1NxdWFyZTooKT0+UF8sUm90YXRlQ3c6KCk9Pk9fLFJvdGF0ZUN3U3F1YXJlOigpPT5GXyxSb3V0ZTooKT0+Ql8sUm91dGVPZmY6KCk9PlJfLFJvdXRlcjooKT0+SF8sUm93czooKT0+dTMsUm93czI6KCk9PnUzLFJvd3MzOigpPT5wMyxSb3dzNDooKT0+cV8sUnNzOigpPT5WXyxSdWxlcjooKT0+al8sUnVsZXJEaW1lbnNpb25MaW5lOigpPT5VXyxSdXNzaWFuUnVibGU6KCk9PldfLFNhaWxib2F0OigpPT5HXyxTYWxhZDooKT0+WV8sU2FuZHdpY2g6KCk9PlpfLFNhdGVsbGl0ZTooKT0+UV8sU2F0ZWxsaXRlRGlzaDooKT0+WF8sU2F1ZGlSaXlhbDooKT0+S18sU2F2ZTooKT0+dEEsU2F2ZUFsbDooKT0+Sl8sU2F2ZU9mZjooKT0+ZUEsU2NhbGU6KCk9PmFBLFNjYWxlM0Q6KCk9PmgzLFNjYWxlM2Q6KCk9PmgzLFNjYWxpbmc6KCk9PnJBLFNjYW46KCk9PnVBLFNjYW5CYXJjb2RlOigpPT5vQSxTY2FuRXllOigpPT5pQSxTY2FuRmFjZTooKT0+c0EsU2NhbkhlYXJ0OigpPT5uQSxTY2FuTGluZTooKT0+bEEsU2NhblFyQ29kZTooKT0+Y0EsU2NhblNlYXJjaDooKT0+ZEEsU2NhblRleHQ6KCk9PmZBLFNjYXR0ZXJDaGFydDooKT0+YzAsU2Nob29sOigpPT5wQSxTY2hvb2wyOigpPT5fbCxTY2lzc29yczooKT0+bUEsU2Npc3NvcnNMaW5lRGFzaGVkOigpPT5oQSxTY2lzc29yc1NxdWFyZTooKT0+Y2wsU2Npc3NvcnNTcXVhcmVEYXNoZWRCb3R0b206KCk9Pk4zLFNjb290ZXI6KCk9PmdBLFNjcmVlblNoYXJlOigpPT5iQSxTY3JlZW5TaGFyZU9mZjooKT0+eEEsU2Nyb2xsOigpPT55QSxTY3JvbGxUZXh0OigpPT52QSxTZWFyY2g6KCk9PkNBLFNlYXJjaEFsZXJ0OigpPT53QSxTZWFyY2hDaGVjazooKT0+ekEsU2VhcmNoQ29kZTooKT0+TUEsU2VhcmNoU2xhc2g6KCk9PmtBLFNlYXJjaFg6KCk9PlNBLFNlY3Rpb246KCk9PkxBLFNlbmQ6KCk9Pl9BLFNlbmRIb3Jpem9uYWw6KCk9Pm0zLFNlbmRIb3Jpem9udGFsOigpPT5tMyxTZW5kVG9CYWNrOigpPT5UQSxTZXBhcmF0b3JIb3Jpem9udGFsOigpPT5BQSxTZXBhcmF0b3JWZXJ0aWNhbDooKT0+JEEsU2VydmVyOigpPT5QQSxTZXJ2ZXJDb2c6KCk9PkRBLFNlcnZlckNyYXNoOigpPT5FQSxTZXJ2ZXJPZmY6KCk9Pk5BLFNldHRpbmdzOigpPT5GQSxTZXR0aW5nczI6KCk9PklBLFNoYXBlczooKT0+T0EsU2hhcmU6KCk9PlJBLFNoYXJlMjooKT0+QkEsU2hlZXQ6KCk9PkhBLFNoZWxsOigpPT5xQSxTaGllbGQ6KCk9PktBLFNoaWVsZEFsZXJ0OigpPT5WQSxTaGllbGRCYW46KCk9PlVBLFNoaWVsZENoZWNrOigpPT5qQSxTaGllbGRDbG9zZTooKT0+eDMsU2hpZWxkRWxsaXBzaXM6KCk9PldBLFNoaWVsZEhhbGY6KCk9PkdBLFNoaWVsZE1pbnVzOigpPT5ZQSxTaGllbGRPZmY6KCk9PlpBLFNoaWVsZFBsdXM6KCk9PlhBLFNoaWVsZFF1ZXN0aW9uOigpPT5nMyxTaGllbGRRdWVzdGlvbk1hcms6KCk9PmczLFNoaWVsZFVzZXI6KCk9PlFBLFNoaWVsZFg6KCk9PngzLFNoaXA6KCk9PmUkLFNoaXBXaGVlbDooKT0+SkEsU2hpcnQ6KCk9PnQkLFNob3BwaW5nQmFnOigpPT5hJCxTaG9wcGluZ0Jhc2tldDooKT0+ciQsU2hvcHBpbmdDYXJ0OigpPT5pJCxTaG92ZWw6KCk9Pm8kLFNob3dlckhlYWQ6KCk9PnMkLFNocmVkZGVyOigpPT5uJCxTaHJpbXA6KCk9PmwkLFNocmluazooKT0+YyQsU2hydWI6KCk9PmQkLFNodWZmbGU6KCk9PmYkLFNpZGViYXI6KCk9PnIzLFNpZGViYXJDbG9zZTooKT0+ZTMsU2lkZWJhck9wZW46KCk9PmEzLFNpZ21hOigpPT5wJCxTaWdtYVNxdWFyZTooKT0+ZGwsU2lnbmFsOigpPT54JCxTaWduYWxIaWdoOigpPT51JCxTaWduYWxMb3c6KCk9PmgkLFNpZ25hbE1lZGl1bTooKT0+bSQsU2lnbmFsWmVybzooKT0+ZyQsU2lnbmF0dXJlOigpPT5iJCxTaWducG9zdDooKT0+eSQsU2lnbnBvc3RCaWc6KCk9PnYkLFNpcmVuOigpPT53JCxTa2lwQmFjazooKT0+TSQsU2tpcEZvcndhcmQ6KCk9PmskLFNrdWxsOigpPT56JCxTbGFjazooKT0+UyQsU2xhc2g6KCk9PkMkLFNsYXNoU3F1YXJlOigpPT5mbCxTbGljZTooKT0+TCQsU2xpZGVyczooKT0+YjMsU2xpZGVyc0hvcml6b250YWw6KCk9PlQkLFNsaWRlcnNWZXJ0aWNhbDooKT0+YjMsU21hcnRwaG9uZTooKT0+JCQsU21hcnRwaG9uZUNoYXJnaW5nOigpPT5fJCxTbWFydHBob25lTmZjOigpPT5BJCxTbWlsZTooKT0+RSQsU21pbGVQbHVzOigpPT5EJCxTbmFpbDooKT0+TiQsU25vd2ZsYWtlOigpPT5QJCxTb2FwRGlzcGVuc2VyRHJvcGxldDooKT0+SSQsU29mYTooKT0+RiQsU29sYXJQYW5lbDooKT0+TyQsU29ydEFzYzooKT0+SG4sU29ydERlc2M6KCk9Pk9uLFNvdXA6KCk9PkIkLFNwYWNlOigpPT5SJCxTcGFkZTooKT0+SCQsU3BhcmtsZTooKT0+cSQsU3BhcmtsZXM6KCk9PnYzLFNwZWFrZXI6KCk9PlYkLFNwZWVjaDooKT0+VSQsU3BlbGxDaGVjazooKT0+VyQsU3BlbGxDaGVjazI6KCk9PmokLFNwbGluZTooKT0+WSQsU3BsaW5lUG9pbnRlcjooKT0+RyQsU3BsaXQ6KCk9PlokLFNwbGl0U3F1YXJlSG9yaXpvbnRhbDooKT0+dWwsU3BsaXRTcXVhcmVWZXJ0aWNhbDooKT0+cGwsU3Bvb2w6KCk9PlgkLFNwb3RsaWdodDooKT0+USQsU3ByYXlDYW46KCk9PkskLFNwcm91dDooKT0+SiQsU3F1YXJlOigpPT5kRCxTcXVhcmVBY3Rpdml0eTooKT0+eTMsU3F1YXJlQXJyb3dEb3duOigpPT56MyxTcXVhcmVBcnJvd0Rvd25MZWZ0OigpPT53MyxTcXVhcmVBcnJvd0Rvd25SaWdodDooKT0+TTMsU3F1YXJlQXJyb3dMZWZ0OigpPT5rMyxTcXVhcmVBcnJvd091dERvd25MZWZ0OigpPT5TMyxTcXVhcmVBcnJvd091dERvd25SaWdodDooKT0+QzMsU3F1YXJlQXJyb3dPdXRVcExlZnQ6KCk9PkwzLFNxdWFyZUFycm93T3V0VXBSaWdodDooKT0+VDMsU3F1YXJlQXJyb3dSaWdodDooKT0+XzMsU3F1YXJlQXJyb3dVcDooKT0+RDMsU3F1YXJlQXJyb3dVcExlZnQ6KCk9PkEzLFNxdWFyZUFycm93VXBSaWdodDooKT0+JDMsU3F1YXJlQXN0ZXJpc2s6KCk9PkUzLFNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzOigpPT5OMyxTcXVhcmVDaGFydEdhbnR0OigpPT5SaSxTcXVhcmVDaGVjazooKT0+UDMsU3F1YXJlQ2hlY2tCaWc6KCk9PkkzLFNxdWFyZUNoZXZyb25Eb3duOigpPT5GMyxTcXVhcmVDaGV2cm9uTGVmdDooKT0+TzMsU3F1YXJlQ2hldnJvblJpZ2h0OigpPT5CMyxTcXVhcmVDaGV2cm9uVXA6KCk9PlIzLFNxdWFyZUNvZGU6KCk9PkgzLFNxdWFyZURhc2hlZDooKT0+VTMsU3F1YXJlRGFzaGVkQm90dG9tOigpPT50RCxTcXVhcmVEYXNoZWRCb3R0b21Db2RlOigpPT5lRCxTcXVhcmVEYXNoZWRLYW5iYW46KCk9PnEzLFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlcjooKT0+VjMsU3F1YXJlRGFzaGVkVG9wU29saWQ6KCk9PmFELFNxdWFyZURpdmlkZTooKT0+ajMsU3F1YXJlRG90OigpPT5XMyxTcXVhcmVFcXVhbDooKT0+RzMsU3F1YXJlRnVuY3Rpb246KCk9PlkzLFNxdWFyZUdhbnR0Q2hhcnQ6KCk9PlJpLFNxdWFyZUthbmJhbjooKT0+WjMsU3F1YXJlTGlicmFyeTooKT0+WDMsU3F1YXJlTTooKT0+UTMsU3F1YXJlTWVudTooKT0+SzMsU3F1YXJlTWludXM6KCk9PkozLFNxdWFyZU1vdXNlUG9pbnRlcjooKT0+ZWwsU3F1YXJlUGFya2luZzooKT0+YWwsU3F1YXJlUGFya2luZ09mZjooKT0+dGwsU3F1YXJlUGF1c2U6KCk9PnJELFNxdWFyZVBlbjooKT0+YXIsU3F1YXJlUGVyY2VudDooKT0+cmwsU3F1YXJlUGk6KCk9PmlsLFNxdWFyZVBpbGNyb3c6KCk9Pm9sLFNxdWFyZVBsYXk6KCk9PnNsLFNxdWFyZVBsdXM6KCk9Pm5sLFNxdWFyZVBvd2VyOigpPT5sbCxTcXVhcmVSYWRpY2FsOigpPT5pRCxTcXVhcmVSb3VuZENvcm5lcjooKT0+b0QsU3F1YXJlU2Npc3NvcnM6KCk9PmNsLFNxdWFyZVNpZ21hOigpPT5kbCxTcXVhcmVTbGFzaDooKT0+ZmwsU3F1YXJlU3BsaXRIb3Jpem9udGFsOigpPT51bCxTcXVhcmVTcGxpdFZlcnRpY2FsOigpPT5wbCxTcXVhcmVTcXVhcmU6KCk9PnNELFNxdWFyZVN0YWNrOigpPT5uRCxTcXVhcmVTdGFyOigpPT5sRCxTcXVhcmVTdG9wOigpPT5jRCxTcXVhcmVUZXJtaW5hbDooKT0+aGwsU3F1YXJlVXNlcjooKT0+Z2wsU3F1YXJlVXNlclJvdW5kOigpPT5tbCxTcXVhcmVYOigpPT54bCxTcXVhcmVzRXhjbHVkZTooKT0+ZkQsU3F1YXJlc0ludGVyc2VjdDooKT0+dUQsU3F1YXJlc1N1YnRyYWN0OigpPT5wRCxTcXVhcmVzVW5pdGU6KCk9Pm1ELFNxdWlyY2xlOigpPT5nRCxTcXVpcmNsZURhc2hlZDooKT0+aEQsU3F1aXJyZWw6KCk9PnhELFN0YW1wOigpPT5iRCxTdGFyOigpPT53RCxTdGFySGFsZjooKT0+eUQsU3Rhck9mZjooKT0+dkQsU3RhcnM6KCk9PnYzLFN0ZXBCYWNrOigpPT5NRCxTdGVwRm9yd2FyZDooKT0+ekQsU3RldGhvc2NvcGU6KCk9PmtELFN0aWNrZXI6KCk9PlNELFN0aWNreU5vdGU6KCk9PkxELFN0b25lOigpPT5DRCxTdG9wQ2lyY2xlOigpPT5GMCxTdG9yZTooKT0+VEQsU3RyZXRjaEhvcml6b250YWw6KCk9Pl9ELFN0cmV0Y2hWZXJ0aWNhbDooKT0+QUQsU3RyaWtldGhyb3VnaDooKT0+JEQsU3Vic2NyaXB0OigpPT5ERCxTdWJ0aXRsZXM6KCk9PlhuLFN1bjooKT0+RkQsU3VuRGltOigpPT5FRCxTdW5NZWRpdW06KCk9Pk5ELFN1bk1vb246KCk9PlBELFN1blNub3c6KCk9PklELFN1bnJpc2U6KCk9Pk9ELFN1bnNldDooKT0+QkQsU3VwZXJzY3JpcHQ6KCk9PlJELFN3YXRjaEJvb2s6KCk9PkhELFN3aXNzRnJhbmM6KCk9PnFELFN3aXRjaENhbWVyYTooKT0+VkQsU3dvcmQ6KCk9PlVELFN3b3JkczooKT0+akQsU3lyaW5nZTooKT0+V0QsVGFibGU6KCk9PmVFLFRhYmxlMjooKT0+R0QsVGFibGVDZWxsc01lcmdlOigpPT5ZRCxUYWJsZUNlbGxzU3BsaXQ6KCk9PlpELFRhYmxlQ29sdW1uc1NwbGl0OigpPT5RRCxUYWJsZUNvbmZpZzooKT0+UGksVGFibGVPZkNvbnRlbnRzOigpPT5YRCxUYWJsZVByb3BlcnRpZXM6KCk9PktELFRhYmxlUm93c1NwbGl0OigpPT5KRCxUYWJsZXQ6KCk9PmFFLFRhYmxldFNtYXJ0cGhvbmU6KCk9PnRFLFRhYmxldHM6KCk9PnJFLFRhZzooKT0+aUUsVGFnczooKT0+b0UsVGFsbHkxOigpPT5zRSxUYWxseTI6KCk9Pm5FLFRhbGx5MzooKT0+bEUsVGFsbHk0OigpPT5jRSxUYWxseTU6KCk9PmRFLFRhbmdlbnQ6KCk9PmZFLFRhcmdldDooKT0+dUUsVGVsZXNjb3BlOigpPT5wRSxUZW50OigpPT5tRSxUZW50VHJlZTooKT0+aEUsVGVybWluYWw6KCk9PmdFLFRlcm1pbmFsU3F1YXJlOigpPT5obCxUZXN0VHViZTooKT0+eEUsVGVzdFR1YmUyOigpPT5ibCxUZXN0VHViZURpYWdvbmFsOigpPT5ibCxUZXN0VHViZXM6KCk9PmJFLFRleHQ6KCk9PkhpLFRleHRBbGlnbkNlbnRlcjooKT0+dmwsVGV4dEFsaWduRW5kOigpPT55bCxUZXh0QWxpZ25KdXN0aWZ5OigpPT53bCxUZXh0QWxpZ25TdGFydDooKT0+SGksVGV4dEN1cnNvcjooKT0+eUUsVGV4dEN1cnNvcklucHV0OigpPT52RSxUZXh0SW5pdGlhbDooKT0+TWwsVGV4dFF1b3RlOigpPT53RSxUZXh0U2VhcmNoOigpPT5NRSxUZXh0U2VsZWN0OigpPT56bCxUZXh0U2VsZWN0aW9uOigpPT56bCxUZXh0V3JhcDooKT0+a2wsVGhlYXRlcjooKT0+ekUsVGhlcm1vbWV0ZXI6KCk9PkNFLFRoZXJtb21ldGVyU25vd2ZsYWtlOigpPT5rRSxUaGVybW9tZXRlclN1bjooKT0+U0UsVGh1bWJzRG93bjooKT0+TEUsVGh1bWJzVXA6KCk9PlRFLFRpY2tldDooKT0+UEUsVGlja2V0Q2hlY2s6KCk9Pl9FLFRpY2tldE1pbnVzOigpPT5BRSxUaWNrZXRQZXJjZW50OigpPT4kRSxUaWNrZXRQbHVzOigpPT5ERSxUaWNrZXRTbGFzaDooKT0+RUUsVGlja2V0WDooKT0+TkUsVGlja2V0czooKT0+RkUsVGlja2V0c1BsYW5lOigpPT5JRSxUaW1lcjooKT0+UkUsVGltZXJPZmY6KCk9PkJFLFRpbWVyUmVzZXQ6KCk9Pk9FLFRvZ2dsZUxlZnQ6KCk9PkhFLFRvZ2dsZVJpZ2h0OigpPT5xRSxUb2lsZXQ6KCk9PlZFLFRvb2xDYXNlOigpPT5VRSxUb29sYm94OigpPT5qRSxUb3JuYWRvOigpPT5XRSxUb3J1czooKT0+R0UsVG91Y2hwYWQ6KCk9PlpFLFRvdWNocGFkT2ZmOigpPT5ZRSxUb3dlckNvbnRyb2w6KCk9PlhFLFRveUJyaWNrOigpPT5RRSxUcmFjdG9yOigpPT5KRSxUcmFmZmljQ29uZTooKT0+S0UsVHJhaW46KCk9PlNsLFRyYWluRnJvbnQ6KCk9PnROLFRyYWluRnJvbnRUdW5uZWw6KCk9PmVOLFRyYWluVHJhY2s6KCk9PmFOLFRyYW1Gcm9udDooKT0+U2wsVHJhbnNnZW5kZXI6KCk9PnJOLFRyYXNoOigpPT5vTixUcmFzaDI6KCk9PmlOLFRyZWVEZWNpZHVvdXM6KCk9PnNOLFRyZWVQYWxtOigpPT5DbCxUcmVlUGluZTooKT0+bk4sVHJlZXM6KCk9PmxOLFRyZWxsbzooKT0+Y04sVHJlbmRpbmdEb3duOigpPT5kTixUcmVuZGluZ1VwOigpPT51TixUcmVuZGluZ1VwRG93bjooKT0+Zk4sVHJpYW5nbGU6KCk9Pm1OLFRyaWFuZ2xlQWxlcnQ6KCk9PkxsLFRyaWFuZ2xlRGFzaGVkOigpPT5wTixUcmlhbmdsZVJpZ2h0OigpPT5oTixUcm9waHk6KCk9PmdOLFRydWNrOigpPT5iTixUcnVja0VsZWN0cmljOigpPT54TixUdXJraXNoTGlyYTooKT0+dk4sVHVybnRhYmxlOigpPT55TixUdXJ0bGU6KCk9PndOLFR2OigpPT56TixUdjI6KCk9PlRsLFR2TWluaW1hbDooKT0+VGwsVHZNaW5pbWFsUGxheTooKT0+TU4sVHdpdGNoOigpPT5rTixUd2l0dGVyOigpPT5TTixUeXBlOigpPT5MTixUeXBlT3V0bGluZTooKT0+Q04sVW1icmVsbGE6KCk9Pl9OLFVtYnJlbGxhT2ZmOigpPT5UTixVbmRlcmxpbmU6KCk9PkFOLFVuZG86KCk9PkVOLFVuZG8yOigpPT4kTixVbmRvRG90OigpPT5ETixVbmZvbGRIb3Jpem9udGFsOigpPT5OTixVbmZvbGRWZXJ0aWNhbDooKT0+UE4sVW5ncm91cDooKT0+SU4sVW5pdmVyc2l0eTooKT0+X2wsVW5saW5rOigpPT5PTixVbmxpbmsyOigpPT5GTixVbmxvY2s6KCk9PlY0LFVubG9ja0tleWhvbGU6KCk9PnE0LFVucGx1ZzooKT0+Qk4sVXBsb2FkOigpPT5ITixVcGxvYWRDbG91ZDooKT0+VTAsVXNiOigpPT5STixVc2VyOigpPT5KTixVc2VyMjooKT0+TmwsVXNlckNoZWNrOigpPT5xTixVc2VyQ2hlY2syOigpPT5BbCxVc2VyQ2lyY2xlOigpPT5CMCxVc2VyQ2lyY2xlMjooKT0+TzAsVXNlckNvZzooKT0+Vk4sVXNlckNvZzI6KCk9PiRsLFVzZXJMb2NrOigpPT5VTixVc2VyTWludXM6KCk9PmpOLFVzZXJNaW51czI6KCk9PkRsLFVzZXJQZW46KCk9PldOLFVzZXJQbHVzOigpPT5HTixVc2VyUGx1czI6KCk9PkVsLFVzZXJSb3VuZDooKT0+TmwsVXNlclJvdW5kQ2hlY2s6KCk9PkFsLFVzZXJSb3VuZENvZzooKT0+JGwsVXNlclJvdW5kTWludXM6KCk9PkRsLFVzZXJSb3VuZFBlbjooKT0+WU4sVXNlclJvdW5kUGx1czooKT0+RWwsVXNlclJvdW5kU2VhcmNoOigpPT5aTixVc2VyUm91bmRYOigpPT5QbCxVc2VyU2VhcmNoOigpPT5YTixVc2VyU3F1YXJlOigpPT5nbCxVc2VyU3F1YXJlMjooKT0+bWwsVXNlclN0YXI6KCk9PlFOLFVzZXJYOigpPT5LTixVc2VyWDI6KCk9PlBsLFVzZXJzOigpPT5lUCxVc2VyczI6KCk9PklsLFVzZXJzUm91bmQ6KCk9PklsLFV0ZW5zaWxzOigpPT5PbCxVdGVuc2lsc0Nyb3NzZWQ6KCk9PkZsLFV0aWxpdHlQb2xlOigpPT5hUCxWYW46KCk9PnRQLFZhcmlhYmxlOigpPT5yUCxWYXVsdDooKT0+aVAsVmVjdG9yU3F1YXJlOigpPT5vUCxWZWdhbjooKT0+c1AsVmVuZXRpYW5NYXNrOigpPT5uUCxWZW51czooKT0+bFAsVmVudXNBbmRNYXJzOigpPT5jUCxWZXJpZmllZDooKT0+VW4sVmlicmF0ZTooKT0+ZlAsVmlicmF0ZU9mZjooKT0+ZFAsVmlkZW86KCk9PnBQLFZpZGVvT2ZmOigpPT51UCxWaWRlb3RhcGU6KCk9Pm1QLFZpZXc6KCk9PmdQLFZvaWNlbWFpbDooKT0+aFAsVm9sbGV5YmFsbDooKT0+eFAsVm9sdW1lOigpPT5NUCxWb2x1bWUxOigpPT5iUCxWb2x1bWUyOigpPT52UCxWb2x1bWVPZmY6KCk9PnlQLFZvbHVtZVg6KCk9PndQLFZvdGU6KCk9PnpQLFdhbGxldDooKT0+U1AsV2FsbGV0MjooKT0+QmwsV2FsbGV0Q2FyZHM6KCk9PmtQLFdhbGxldE1pbmltYWw6KCk9PkJsLFdhbGxwYXBlcjooKT0+Q1AsV2FuZDooKT0+TFAsV2FuZDI6KCk9PlJsLFdhbmRTcGFya2xlczooKT0+UmwsV2FyZWhvdXNlOigpPT5UUCxXYXNoaW5nTWFjaGluZTooKT0+X1AsV2F0Y2g6KCk9PkFQLFdhdmVzOigpPT5OUCxXYXZlc0Fycm93RG93bjooKT0+JFAsV2F2ZXNBcnJvd1VwOigpPT5EUCxXYXZlc0xhZGRlcjooKT0+RVAsV2F5cG9pbnRzOigpPT5QUCxXZWJjYW06KCk9PklQLFdlYmhvb2s6KCk9Pk9QLFdlYmhvb2tPZmY6KCk9PkZQLFdlaWdodDooKT0+UlAsV2VpZ2h0VGlsZGU6KCk9PkJQLFdoZWF0OigpPT5xUCxXaGVhdE9mZjooKT0+SFAsV2hvbGVXb3JkOigpPT5WUCxXaWZpOigpPT5RUCxXaWZpQ29nOigpPT5VUCxXaWZpSGlnaDooKT0+V1AsV2lmaUxvdzooKT0+alAsV2lmaU9mZjooKT0+R1AsV2lmaVBlbjooKT0+WVAsV2lmaVN5bmM6KCk9PlpQLFdpZmlaZXJvOigpPT5YUCxXaW5kOigpPT5KUCxXaW5kQXJyb3dEb3duOigpPT5LUCxXaW5lOigpPT50SSxXaW5lT2ZmOigpPT5lSSxXb3JrZmxvdzooKT0+ckksV29ybTooKT0+YUksV3JhcFRleHQ6KCk9PmtsLFdyZW5jaDooKT0+aUksWDooKT0+b0ksWENpcmNsZTooKT0+UjAsWE9jdGFnb246KCk9PlE0LFhTcXVhcmU6KCk9PnhsLFlvdXR1YmU6KCk9PnNJLFphcDooKT0+bEksWmFwT2ZmOigpPT5uSSxab29tSW46KCk9PmNJLFpvb21PdXQ6KCk9PmRJLGNyZWF0ZUVsZW1lbnQ6KCk9Pm9zLGNyZWF0ZUljb25zOigpPT5CRGUsaWNvbnM6KCk9PkhsfSk7dmFyIEJEZSxXVT1uKCgpPT57eUl0KCk7d0l0KCk7VzRlKCk7RzRlKCk7WTRlKCk7WjRlKCk7WDRlKCk7UTRlKCk7SzRlKCk7SjRlKCk7ZTNlKCk7dDNlKCk7YTNlKCk7cjNlKCk7aTNlKCk7bzNlKCk7czNlKCk7bjNlKCk7bDNlKCk7YzNlKCk7ZDNlKCk7ZjNlKCk7dTNlKCk7cDNlKCk7aDNlKCk7bTNlKCk7ZzNlKCk7eDNlKCk7YjNlKCk7djNlKCk7eTNlKCk7dzNlKCk7TTNlKCk7ejNlKCk7azNlKCk7UzNlKCk7QzNlKCk7TDNlKCk7VDNlKCk7XzNlKCk7QTNlKCk7JDNlKCk7RDNlKCk7RTNlKCk7TjNlKCk7UDNlKCk7STNlKCk7RjNlKCk7TzNlKCk7QjNlKCk7UjNlKCk7SDNlKCk7cTNlKCk7VjNlKCk7VTNlKCk7ajNlKCk7VzNlKCk7RzNlKCk7WTNlKCk7WjNlKCk7WDNlKCk7UTNlKCk7SzNlKCk7SjNlKCk7ZWxlKCk7dGxlKCk7YWxlKCk7cmxlKCk7aWxlKCk7b2xlKCk7c2xlKCk7bmxlKCk7bGxlKCk7Y2xlKCk7ZGxlKCk7ZmxlKCk7dWxlKCk7cGxlKCk7aGxlKCk7bWxlKCk7Z2xlKCk7eGxlKCk7YmxlKCk7dmxlKCk7eWxlKCk7d2xlKCk7TWxlKCk7emxlKCk7a2xlKCk7U2xlKCk7Q2xlKCk7TGxlKCk7VGxlKCk7X2xlKCk7QWxlKCk7JGxlKCk7RGxlKCk7RWxlKCk7TmxlKCk7UGxlKCk7SWxlKCk7RmxlKCk7T2xlKCk7QmxlKCk7UmxlKCk7SGxlKCk7cWxlKCk7VmxlKCk7VWxlKCk7amxlKCk7V2xlKCk7R2xlKCk7WWxlKCk7WmxlKCk7WGxlKCk7UWxlKCk7S2xlKCk7SmxlKCk7ZWNlKCk7dGNlKCk7YWNlKCk7cmNlKCk7aWNlKCk7b2NlKCk7c2NlKCk7bmNlKCk7bGNlKCk7Y2NlKCk7ZGNlKCk7ZmNlKCk7dWNlKCk7cGNlKCk7aGNlKCk7bWNlKCk7Z2NlKCk7eGNlKCk7YmNlKCk7dmNlKCk7eWNlKCk7d2NlKCk7TWNlKCk7emNlKCk7a2NlKCk7U2NlKCk7Q2NlKCk7TGNlKCk7VGNlKCk7X2NlKCk7QWNlKCk7JGNlKCk7RGNlKCk7RWNlKCk7TmNlKCk7UGNlKCk7SWNlKCk7RmNlKCk7T2NlKCk7QmNlKCk7UmNlKCk7SGNlKCk7cWNlKCk7VmNlKCk7VWNlKCk7amNlKCk7V2NlKCk7R2NlKCk7WWNlKCk7WmNlKCk7WGNlKCk7UWNlKCk7S2NlKCk7SmNlKCk7ZTZlKCk7dDZlKCk7YTZlKCk7cjZlKCk7aTZlKCk7bzZlKCk7czZlKCk7bjZlKCk7bDZlKCk7YzZlKCk7ZDZlKCk7ZjZlKCk7dTZlKCk7cDZlKCk7aDZlKCk7bTZlKCk7ZzZlKCk7eDZlKCk7YjZlKCk7djZlKCk7eTZlKCk7dzZlKCk7TTZlKCk7ejZlKCk7azZlKCk7UzZlKCk7QzZlKCk7TDZlKCk7VDZlKCk7XzZlKCk7QTZlKCk7JDZlKCk7RDZlKCk7RTZlKCk7TjZlKCk7UDZlKCk7STZlKCk7RjZlKCk7TzZlKCk7QjZlKCk7UjZlKCk7SDZlKCk7cTZlKCk7VjZlKCk7VTZlKCk7ajZlKCk7VzZlKCk7RzZlKCk7WTZlKCk7WjZlKCk7WDZlKCk7UTZlKCk7SzZlKCk7SjZlKCk7ZTVlKCk7dDVlKCk7YTVlKCk7cjVlKCk7aTVlKCk7bzVlKCk7czVlKCk7bjVlKCk7bDVlKCk7YzVlKCk7ZDVlKCk7ZjVlKCk7dTVlKCk7cDVlKCk7aDVlKCk7bTVlKCk7ZzVlKCk7eDVlKCk7YjVlKCk7djVlKCk7eTVlKCk7dzVlKCk7TTVlKCk7ejVlKCk7azVlKCk7UzVlKCk7QzVlKCk7TDVlKCk7VDVlKCk7XzVlKCk7QTVlKCk7JDVlKCk7RDVlKCk7RTVlKCk7TjVlKCk7UDVlKCk7STVlKCk7RjVlKCk7TzVlKCk7QjVlKCk7UjVlKCk7SDVlKCk7cTVlKCk7VjVlKCk7VTVlKCk7ajVlKCk7VzVlKCk7RzVlKCk7WTVlKCk7WjVlKCk7WDVlKCk7UTVlKCk7SzVlKCk7SjVlKCk7ZThlKCk7dDhlKCk7YThlKCk7cjhlKCk7aThlKCk7bzhlKCk7czhlKCk7bjhlKCk7bDhlKCk7YzhlKCk7ZDhlKCk7ZjhlKCk7dThlKCk7cDhlKCk7aDhlKCk7bThlKCk7ZzhlKCk7eDhlKCk7YjhlKCk7djhlKCk7eThlKCk7dzhlKCk7TThlKCk7ejhlKCk7azhlKCk7UzhlKCk7QzhlKCk7TDhlKCk7VDhlKCk7XzhlKCk7QThlKCk7JDhlKCk7RDhlKCk7RThlKCk7TjhlKCk7UDhlKCk7SThlKCk7RjhlKCk7TzhlKCk7QjhlKCk7UjhlKCk7SDhlKCk7cThlKCk7VjhlKCk7VThlKCk7ajhlKCk7VzhlKCk7RzhlKCk7WThlKCk7WjhlKCk7WDhlKCk7UThlKCk7SzhlKCk7SjhlKCk7ZWRlKCk7dGRlKCk7YWRlKCk7cmRlKCk7aWRlKCk7b2RlKCk7c2RlKCk7bmRlKCk7bGRlKCk7Y2RlKCk7ZGRlKCk7ZmRlKCk7dWRlKCk7cGRlKCk7aGRlKCk7bWRlKCk7Z2RlKCk7eGRlKCk7YmRlKCk7dmRlKCk7eWRlKCk7d2RlKCk7TWRlKCk7emRlKCk7a2RlKCk7U2RlKCk7Q2RlKCk7TGRlKCk7VGRlKCk7X2RlKCk7QWRlKCk7JGRlKCk7RGRlKCk7RWRlKCk7TmRlKCk7UGRlKCk7SWRlKCk7RmRlKCk7T2RlKCk7QmRlKCk7UmRlKCk7SGRlKCk7cWRlKCk7VmRlKCk7VWRlKCk7amRlKCk7V2RlKCk7R2RlKCk7WWRlKCk7WmRlKCk7WGRlKCk7UWRlKCk7S2RlKCk7SmRlKCk7ZTdlKCk7dDdlKCk7YTdlKCk7cjdlKCk7aTdlKCk7bzdlKCk7czdlKCk7bjdlKCk7bDdlKCk7YzdlKCk7ZDdlKCk7ZjdlKCk7dTdlKCk7cDdlKCk7aDdlKCk7bTdlKCk7ZzdlKCk7eDdlKCk7YjdlKCk7djdlKCk7eTdlKCk7dzdlKCk7TTdlKCk7ejdlKCk7azdlKCk7UzdlKCk7QzdlKCk7TDdlKCk7VDdlKCk7XzdlKCk7QTdlKCk7JDdlKCk7RDdlKCk7RTdlKCk7TjdlKCk7UDdlKCk7STdlKCk7RjdlKCk7TzdlKCk7QjdlKCk7UjdlKCk7SDdlKCk7cTdlKCk7VjdlKCk7VTdlKCk7ajdlKCk7VzdlKCk7RzdlKCk7WTdlKCk7WjdlKCk7WDdlKCk7UTdlKCk7SzdlKCk7SjdlKCk7ZWZlKCk7dGZlKCk7YWZlKCk7cmZlKCk7aWZlKCk7b2ZlKCk7c2ZlKCk7bmZlKCk7bGZlKCk7Y2ZlKCk7ZGZlKCk7ZmZlKCk7dWZlKCk7cGZlKCk7aGZlKCk7bWZlKCk7Z2ZlKCk7eGZlKCk7YmZlKCk7dmZlKCk7eWZlKCk7d2ZlKCk7TWZlKCk7emZlKCk7a2ZlKCk7U2ZlKCk7Q2ZlKCk7TGZlKCk7VGZlKCk7X2ZlKCk7QWZlKCk7JGZlKCk7RGZlKCk7RWZlKCk7TmZlKCk7UGZlKCk7SWZlKCk7RmZlKCk7T2ZlKCk7QmZlKCk7UmZlKCk7SGZlKCk7cWZlKCk7VmZlKCk7VWZlKCk7amZlKCk7V2ZlKCk7R2ZlKCk7WWZlKCk7WmZlKCk7WGZlKCk7UWZlKCk7S2ZlKCk7SmZlKCk7ZXVlKCk7dHVlKCk7YXVlKCk7cnVlKCk7aXVlKCk7b3VlKCk7c3VlKCk7bnVlKCk7bHVlKCk7Y3VlKCk7ZHVlKCk7ZnVlKCk7dXVlKCk7cHVlKCk7aHVlKCk7bXVlKCk7Z3VlKCk7eHVlKCk7YnVlKCk7dnVlKCk7eXVlKCk7d3VlKCk7TXVlKCk7enVlKCk7a3VlKCk7U3VlKCk7Q3VlKCk7THVlKCk7VHVlKCk7X3VlKCk7QXVlKCk7JHVlKCk7RHVlKCk7RXVlKCk7TnVlKCk7UHVlKCk7SXVlKCk7RnVlKCk7T3VlKCk7QnVlKCk7UnVlKCk7SHVlKCk7cXVlKCk7VnVlKCk7VXVlKCk7anVlKCk7V3VlKCk7R3VlKCk7WXVlKCk7WnVlKCk7WHVlKCk7UXVlKCk7S3VlKCk7SnVlKCk7ZXBlKCk7dHBlKCk7YXBlKCk7cnBlKCk7aXBlKCk7b3BlKCk7c3BlKCk7bnBlKCk7bHBlKCk7Y3BlKCk7ZHBlKCk7ZnBlKCk7dXBlKCk7cHBlKCk7aHBlKCk7bXBlKCk7Z3BlKCk7eHBlKCk7YnBlKCk7dnBlKCk7eXBlKCk7d3BlKCk7TXBlKCk7enBlKCk7a3BlKCk7U3BlKCk7Q3BlKCk7THBlKCk7VHBlKCk7X3BlKCk7QXBlKCk7JHBlKCk7RHBlKCk7RXBlKCk7TnBlKCk7UHBlKCk7SXBlKCk7RnBlKCk7T3BlKCk7QnBlKCk7UnBlKCk7SHBlKCk7cXBlKCk7VnBlKCk7VXBlKCk7anBlKCk7V3BlKCk7R3BlKCk7WXBlKCk7WnBlKCk7WHBlKCk7UXBlKCk7S3BlKCk7SnBlKCk7ZTllKCk7dDllKCk7YTllKCk7cjllKCk7aTllKCk7bzllKCk7czllKCk7bjllKCk7bDllKCk7YzllKCk7ZDllKCk7ZjllKCk7dTllKCk7cDllKCk7aDllKCk7bTllKCk7ZzllKCk7eDllKCk7YjllKCk7djllKCk7eTllKCk7dzllKCk7TTllKCk7ejllKCk7azllKCk7UzllKCk7QzllKCk7TDllKCk7VDllKCk7XzllKCk7QTllKCk7JDllKCk7RDllKCk7RTllKCk7TjllKCk7UDllKCk7STllKCk7RjllKCk7TzllKCk7QjllKCk7UjllKCk7SDllKCk7cTllKCk7VjllKCk7VTllKCk7ajllKCk7VzllKCk7RzllKCk7WTllKCk7WjllKCk7WDllKCk7UTllKCk7SzllKCk7SjllKCk7ZWhlKCk7dGhlKCk7YWhlKCk7cmhlKCk7aWhlKCk7b2hlKCk7c2hlKCk7bmhlKCk7bGhlKCk7Y2hlKCk7ZGhlKCk7ZmhlKCk7dWhlKCk7cGhlKCk7aGhlKCk7bWhlKCk7Z2hlKCk7eGhlKCk7YmhlKCk7dmhlKCk7eWhlKCk7d2hlKCk7TWhlKCk7emhlKCk7a2hlKCk7U2hlKCk7Q2hlKCk7TGhlKCk7VGhlKCk7X2hlKCk7QWhlKCk7JGhlKCk7RGhlKCk7RWhlKCk7TmhlKCk7UGhlKCk7SWhlKCk7RmhlKCk7T2hlKCk7QmhlKCk7UmhlKCk7SGhlKCk7cWhlKCk7VmhlKCk7VWhlKCk7amhlKCk7V2hlKCk7R2hlKCk7WWhlKCk7WmhlKCk7WGhlKCk7UWhlKCk7S2hlKCk7SmhlKCk7ZW1lKCk7dG1lKCk7YW1lKCk7cm1lKCk7aW1lKCk7b21lKCk7c21lKCk7bm1lKCk7bG1lKCk7Y21lKCk7ZG1lKCk7Zm1lKCk7dW1lKCk7cG1lKCk7aG1lKCk7bW1lKCk7Z21lKCk7eG1lKCk7Ym1lKCk7dm1lKCk7eW1lKCk7d21lKCk7TW1lKCk7em1lKCk7a21lKCk7U21lKCk7Q21lKCk7TG1lKCk7VG1lKCk7X21lKCk7QW1lKCk7JG1lKCk7RG1lKCk7RW1lKCk7Tm1lKCk7UG1lKCk7SW1lKCk7Rm1lKCk7T21lKCk7Qm1lKCk7Um1lKCk7SG1lKCk7cW1lKCk7Vm1lKCk7VW1lKCk7am1lKCk7V21lKCk7R21lKCk7WW1lKCk7Wm1lKCk7WG1lKCk7UW1lKCk7S21lKCk7Sm1lKCk7ZWdlKCk7dGdlKCk7YWdlKCk7cmdlKCk7aWdlKCk7b2dlKCk7c2dlKCk7bmdlKCk7bGdlKCk7Y2dlKCk7ZGdlKCk7ZmdlKCk7dWdlKCk7cGdlKCk7aGdlKCk7bWdlKCk7Z2dlKCk7eGdlKCk7YmdlKCk7dmdlKCk7eWdlKCk7d2dlKCk7TWdlKCk7emdlKCk7a2dlKCk7U2dlKCk7Q2dlKCk7TGdlKCk7VGdlKCk7X2dlKCk7QWdlKCk7JGdlKCk7RGdlKCk7RWdlKCk7TmdlKCk7UGdlKCk7SWdlKCk7RmdlKCk7T2dlKCk7QmdlKCk7UmdlKCk7SGdlKCk7cWdlKCk7VmdlKCk7VWdlKCk7amdlKCk7V2dlKCk7R2dlKCk7WWdlKCk7WmdlKCk7WGdlKCk7UWdlKCk7S2dlKCk7SmdlKCk7ZXhlKCk7dHhlKCk7YXhlKCk7cnhlKCk7aXhlKCk7b3hlKCk7c3hlKCk7bnhlKCk7bHhlKCk7Y3hlKCk7ZHhlKCk7ZnhlKCk7dXhlKCk7cHhlKCk7aHhlKCk7bXhlKCk7Z3hlKCk7eHhlKCk7YnhlKCk7dnhlKCk7eXhlKCk7d3hlKCk7TXhlKCk7enhlKCk7a3hlKCk7U3hlKCk7Q3hlKCk7THhlKCk7VHhlKCk7X3hlKCk7QXhlKCk7JHhlKCk7RHhlKCk7RXhlKCk7TnhlKCk7UHhlKCk7SXhlKCk7RnhlKCk7T3hlKCk7QnhlKCk7UnhlKCk7SHhlKCk7cXhlKCk7VnhlKCk7VXhlKCk7anhlKCk7V3hlKCk7R3hlKCk7WXhlKCk7WnhlKCk7WHhlKCk7UXhlKCk7S3hlKCk7SnhlKCk7ZWJlKCk7dGJlKCk7YWJlKCk7cmJlKCk7aWJlKCk7b2JlKCk7c2JlKCk7bmJlKCk7bGJlKCk7Y2JlKCk7ZGJlKCk7ZmJlKCk7dWJlKCk7cGJlKCk7aGJlKCk7bWJlKCk7Z2JlKCk7eGJlKCk7YmJlKCk7dmJlKCk7eWJlKCk7d2JlKCk7TWJlKCk7emJlKCk7a2JlKCk7U2JlKCk7Q2JlKCk7TGJlKCk7VGJlKCk7X2JlKCk7QWJlKCk7JGJlKCk7RGJlKCk7RWJlKCk7TmJlKCk7UGJlKCk7SWJlKCk7RmJlKCk7T2JlKCk7QmJlKCk7UmJlKCk7SGJlKCk7cWJlKCk7VmJlKCk7VWJlKCk7amJlKCk7V2JlKCk7R2JlKCk7WWJlKCk7WmJlKCk7WGJlKCk7UWJlKCk7S2JlKCk7SmJlKCk7ZXZlKCk7dHZlKCk7YXZlKCk7cnZlKCk7aXZlKCk7b3ZlKCk7c3ZlKCk7bnZlKCk7bHZlKCk7Y3ZlKCk7ZHZlKCk7ZnZlKCk7dXZlKCk7cHZlKCk7aHZlKCk7bXZlKCk7Z3ZlKCk7eHZlKCk7YnZlKCk7dnZlKCk7eXZlKCk7d3ZlKCk7TXZlKCk7enZlKCk7a3ZlKCk7U3ZlKCk7Q3ZlKCk7THZlKCk7VHZlKCk7X3ZlKCk7QXZlKCk7JHZlKCk7RHZlKCk7RXZlKCk7TnZlKCk7UHZlKCk7SXZlKCk7RnZlKCk7T3ZlKCk7QnZlKCk7UnZlKCk7SHZlKCk7cXZlKCk7VnZlKCk7VXZlKCk7anZlKCk7V3ZlKCk7R3ZlKCk7WXZlKCk7WnZlKCk7WHZlKCk7UXZlKCk7S3ZlKCk7SnZlKCk7ZXllKCk7dHllKCk7YXllKCk7cnllKCk7aXllKCk7b3llKCk7c3llKCk7bnllKCk7bHllKCk7Y3llKCk7ZHllKCk7ZnllKCk7dXllKCk7cHllKCk7aHllKCk7bXllKCk7Z3llKCk7eHllKCk7YnllKCk7dnllKCk7eXllKCk7d3llKCk7TXllKCk7enllKCk7a3llKCk7U3llKCk7Q3llKCk7THllKCk7VHllKCk7X3llKCk7QXllKCk7JHllKCk7RHllKCk7RXllKCk7TnllKCk7UHllKCk7SXllKCk7RnllKCk7T3llKCk7QnllKCk7UnllKCk7SHllKCk7cXllKCk7VnllKCk7VXllKCk7anllKCk7V3llKCk7R3llKCk7WXllKCk7WnllKCk7WHllKCk7UXllKCk7S3llKCk7SnllKCk7ZXdlKCk7dHdlKCk7YXdlKCk7cndlKCk7aXdlKCk7b3dlKCk7c3dlKCk7bndlKCk7bHdlKCk7Y3dlKCk7ZHdlKCk7ZndlKCk7dXdlKCk7cHdlKCk7aHdlKCk7bXdlKCk7Z3dlKCk7eHdlKCk7YndlKCk7dndlKCk7eXdlKCk7d3dlKCk7TXdlKCk7endlKCk7a3dlKCk7U3dlKCk7Q3dlKCk7THdlKCk7VHdlKCk7X3dlKCk7QXdlKCk7JHdlKCk7RHdlKCk7RXdlKCk7TndlKCk7UHdlKCk7SXdlKCk7RndlKCk7T3dlKCk7QndlKCk7UndlKCk7SHdlKCk7cXdlKCk7VndlKCk7VXdlKCk7andlKCk7V3dlKCk7R3dlKCk7WXdlKCk7WndlKCk7WHdlKCk7UXdlKCk7S3dlKCk7SndlKCk7ZU1lKCk7dE1lKCk7YU1lKCk7ck1lKCk7aU1lKCk7b01lKCk7c01lKCk7bk1lKCk7bE1lKCk7Y01lKCk7ZE1lKCk7Zk1lKCk7dU1lKCk7cE1lKCk7aE1lKCk7bU1lKCk7Z01lKCk7eE1lKCk7Yk1lKCk7dk1lKCk7eU1lKCk7d01lKCk7TU1lKCk7ek1lKCk7a01lKCk7U01lKCk7Q01lKCk7TE1lKCk7VE1lKCk7X01lKCk7QU1lKCk7JE1lKCk7RE1lKCk7RU1lKCk7Tk1lKCk7UE1lKCk7SU1lKCk7Rk1lKCk7T01lKCk7Qk1lKCk7Uk1lKCk7SE1lKCk7cU1lKCk7Vk1lKCk7VU1lKCk7ak1lKCk7V01lKCk7R01lKCk7WU1lKCk7Wk1lKCk7WE1lKCk7UU1lKCk7S01lKCk7Sk1lKCk7ZXplKCk7dHplKCk7YXplKCk7cnplKCk7aXplKCk7b3plKCk7c3plKCk7bnplKCk7bHplKCk7Y3plKCk7ZHplKCk7ZnplKCk7dXplKCk7cHplKCk7aHplKCk7bXplKCk7Z3plKCk7eHplKCk7YnplKCk7dnplKCk7eXplKCk7d3plKCk7TXplKCk7enplKCk7a3plKCk7U3plKCk7Q3plKCk7THplKCk7VHplKCk7X3plKCk7QXplKCk7JHplKCk7RHplKCk7RXplKCk7TnplKCk7UHplKCk7SXplKCk7RnplKCk7T3plKCk7QnplKCk7UnplKCk7SHplKCk7cXplKCk7VnplKCk7VXplKCk7anplKCk7V3plKCk7R3plKCk7WXplKCk7WnplKCk7WHplKCk7UXplKCk7S3plKCk7SnplKCk7ZWtlKCk7dGtlKCk7YWtlKCk7cmtlKCk7aWtlKCk7b2tlKCk7c2tlKCk7bmtlKCk7bGtlKCk7Y2tlKCk7ZGtlKCk7ZmtlKCk7dWtlKCk7cGtlKCk7aGtlKCk7bWtlKCk7Z2tlKCk7eGtlKCk7YmtlKCk7dmtlKCk7eWtlKCk7d2tlKCk7TWtlKCk7emtlKCk7a2tlKCk7U2tlKCk7Q2tlKCk7TGtlKCk7VGtlKCk7X2tlKCk7QWtlKCk7JGtlKCk7RGtlKCk7RWtlKCk7TmtlKCk7UGtlKCk7SWtlKCk7RmtlKCk7T2tlKCk7QmtlKCk7UmtlKCk7SGtlKCk7cWtlKCk7VmtlKCk7VWtlKCk7amtlKCk7V2tlKCk7R2tlKCk7WWtlKCk7WmtlKCk7WGtlKCk7UWtlKCk7S2tlKCk7SmtlKCk7ZVNlKCk7dFNlKCk7YVNlKCk7clNlKCk7aVNlKCk7b1NlKCk7c1NlKCk7blNlKCk7bFNlKCk7Y1NlKCk7ZFNlKCk7ZlNlKCk7dVNlKCk7cFNlKCk7aFNlKCk7bVNlKCk7Z1NlKCk7eFNlKCk7YlNlKCk7dlNlKCk7eVNlKCk7d1NlKCk7TVNlKCk7elNlKCk7a1NlKCk7U1NlKCk7Q1NlKCk7TFNlKCk7VFNlKCk7X1NlKCk7QVNlKCk7JFNlKCk7RFNlKCk7RVNlKCk7TlNlKCk7UFNlKCk7SVNlKCk7RlNlKCk7T1NlKCk7QlNlKCk7UlNlKCk7SFNlKCk7cVNlKCk7VlNlKCk7VVNlKCk7alNlKCk7V1NlKCk7R1NlKCk7WVNlKCk7WlNlKCk7WFNlKCk7UVNlKCk7S1NlKCk7SlNlKCk7ZUNlKCk7dENlKCk7YUNlKCk7ckNlKCk7aUNlKCk7b0NlKCk7c0NlKCk7bkNlKCk7bENlKCk7Y0NlKCk7ZENlKCk7ZkNlKCk7dUNlKCk7cENlKCk7aENlKCk7bUNlKCk7Z0NlKCk7eENlKCk7YkNlKCk7dkNlKCk7eUNlKCk7d0NlKCk7TUNlKCk7ekNlKCk7a0NlKCk7U0NlKCk7Q0NlKCk7TENlKCk7VENlKCk7X0NlKCk7QUNlKCk7JENlKCk7RENlKCk7RUNlKCk7TkNlKCk7UENlKCk7SUNlKCk7RkNlKCk7T0NlKCk7QkNlKCk7UkNlKCk7SENlKCk7cUNlKCk7VkNlKCk7VUNlKCk7akNlKCk7V0NlKCk7R0NlKCk7WUNlKCk7WkNlKCk7WENlKCk7UUNlKCk7S0NlKCk7SkNlKCk7ZUxlKCk7dExlKCk7YUxlKCk7ckxlKCk7aUxlKCk7b0xlKCk7c0xlKCk7bkxlKCk7bExlKCk7Y0xlKCk7ZExlKCk7ZkxlKCk7dUxlKCk7cExlKCk7aExlKCk7bUxlKCk7Z0xlKCk7eExlKCk7YkxlKCk7dkxlKCk7eUxlKCk7d0xlKCk7TUxlKCk7ekxlKCk7a0xlKCk7U0xlKCk7Q0xlKCk7TExlKCk7VExlKCk7X0xlKCk7QUxlKCk7JExlKCk7RExlKCk7RUxlKCk7TkxlKCk7UExlKCk7SUxlKCk7RkxlKCk7T0xlKCk7QkxlKCk7UkxlKCk7SExlKCk7cUxlKCk7VkxlKCk7VUxlKCk7akxlKCk7V0xlKCk7R0xlKCk7WUxlKCk7WkxlKCk7WExlKCk7UUxlKCk7S0xlKCk7SkxlKCk7ZVRlKCk7dFRlKCk7YVRlKCk7clRlKCk7aVRlKCk7b1RlKCk7c1RlKCk7blRlKCk7bFRlKCk7Y1RlKCk7ZFRlKCk7ZlRlKCk7dVRlKCk7cFRlKCk7aFRlKCk7bVRlKCk7Z1RlKCk7eFRlKCk7YlRlKCk7dlRlKCk7eVRlKCk7d1RlKCk7TVRlKCk7elRlKCk7a1RlKCk7U1RlKCk7Q1RlKCk7TFRlKCk7VFRlKCk7X1RlKCk7QVRlKCk7JFRlKCk7RFRlKCk7RVRlKCk7TlRlKCk7UFRlKCk7SVRlKCk7RlRlKCk7T1RlKCk7QlRlKCk7UlRlKCk7SFRlKCk7cVRlKCk7VlRlKCk7VVRlKCk7alRlKCk7V1RlKCk7R1RlKCk7WVRlKCk7WlRlKCk7WFRlKCk7UVRlKCk7S1RlKCk7SlRlKCk7ZV9lKCk7dF9lKCk7YV9lKCk7cl9lKCk7aV9lKCk7b19lKCk7c19lKCk7bl9lKCk7bF9lKCk7Y19lKCk7ZF9lKCk7Zl9lKCk7dV9lKCk7cF9lKCk7aF9lKCk7bV9lKCk7Z19lKCk7eF9lKCk7Yl9lKCk7dl9lKCk7eV9lKCk7d19lKCk7TV9lKCk7el9lKCk7a19lKCk7U19lKCk7Q19lKCk7TF9lKCk7VF9lKCk7X19lKCk7QV9lKCk7JF9lKCk7RF9lKCk7RV9lKCk7Tl9lKCk7UF9lKCk7SV9lKCk7Rl9lKCk7T19lKCk7Ql9lKCk7Ul9lKCk7SF9lKCk7cV9lKCk7Vl9lKCk7VV9lKCk7al9lKCk7V19lKCk7R19lKCk7WV9lKCk7Wl9lKCk7WF9lKCk7UV9lKCk7S19lKCk7Sl9lKCk7ZUFlKCk7dEFlKCk7YUFlKCk7ckFlKCk7aUFlKCk7b0FlKCk7c0FlKCk7bkFlKCk7bEFlKCk7Y0FlKCk7ZEFlKCk7ZkFlKCk7dUFlKCk7cEFlKCk7aEFlKCk7bUFlKCk7Z0FlKCk7eEFlKCk7YkFlKCk7dkFlKCk7eUFlKCk7d0FlKCk7TUFlKCk7ekFlKCk7a0FlKCk7U0FlKCk7Q0FlKCk7TEFlKCk7VEFlKCk7X0FlKCk7QUFlKCk7JEFlKCk7REFlKCk7RUFlKCk7TkFlKCk7UEFlKCk7SUFlKCk7RkFlKCk7T0FlKCk7QkFlKCk7UkFlKCk7SEFlKCk7cUFlKCk7VkFlKCk7VUFlKCk7akFlKCk7V0FlKCk7R0FlKCk7WUFlKCk7WkFlKCk7WEFlKCk7UUFlKCk7S0FlKCk7SkFlKCk7ZSRlKCk7dCRlKCk7YSRlKCk7ciRlKCk7aSRlKCk7byRlKCk7cyRlKCk7biRlKCk7bCRlKCk7YyRlKCk7ZCRlKCk7ZiRlKCk7dSRlKCk7cCRlKCk7aCRlKCk7bSRlKCk7ZyRlKCk7eCRlKCk7YiRlKCk7diRlKCk7eSRlKCk7dyRlKCk7TSRlKCk7eiRlKCk7ayRlKCk7UyRlKCk7QyRlKCk7TCRlKCk7VCRlKCk7XyRlKCk7QSRlKCk7JCRlKCk7RCRlKCk7RSRlKCk7TiRlKCk7UCRlKCk7SSRlKCk7RiRlKCk7TyRlKCk7QiRlKCk7UiRlKCk7SCRlKCk7cSRlKCk7ViRlKCk7VSRlKCk7aiRlKCk7VyRlKCk7RyRlKCk7WSRlKCk7WiRlKCk7WCRlKCk7USRlKCk7SyRlKCk7SiRlKCk7ZURlKCk7dERlKCk7YURlKCk7ckRlKCk7aURlKCk7b0RlKCk7c0RlKCk7bkRlKCk7bERlKCk7Y0RlKCk7ZERlKCk7ZkRlKCk7dURlKCk7cERlKCk7aERlKCk7bURlKCk7Z0RlKCk7eERlKCk7YkRlKCk7dkRlKCk7eURlKCk7d0RlKCk7TURlKCk7ekRlKCk7a0RlKCk7U0RlKCk7Q0RlKCk7TERlKCk7VERlKCk7X0RlKCk7QURlKCk7JERlKCk7RERlKCk7RURlKCk7TkRlKCk7UERlKCk7SURlKCk7RkRlKCk7T0RlKCk7QkRlPSh7aWNvbnM6dD17fSxuYW1lQXR0cjplPSJkYXRhLWx1Y2lkZSIsYXR0cnM6YT17fSxyb290OnI9ZG9jdW1lbnQsaW5UZW1wbGF0ZXM6aX09e30pPT57aWYoIU9iamVjdC52YWx1ZXModCkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgUGxlYXNlIHByb3ZpZGUgYW4gaWNvbnMgb2JqZWN0LgpJZiB5b3Ugd2FudCB0byB1c2UgYWxsIHRoZSBpY29ucyB5b3UgY2FuIGltcG9ydCBpdCBsaWtlOgogXGBpbXBvcnQgeyBjcmVhdGVJY29ucywgaWNvbnMgfSBmcm9tICdsdWNpZGUnOwpsdWNpZGUuY3JlYXRlSWNvbnMoe2ljb25zfSk7XGBgKTtpZih0eXBlb2Ygcj4idSIpdGhyb3cgbmV3IEVycm9yKCJgY3JlYXRlSWNvbnMoKWAgb25seSB3b3JrcyBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuIik7aWYoQXJyYXkuZnJvbShyLnF1ZXJ5U2VsZWN0b3JBbGwoYFske2V9XWApKS5mb3JFYWNoKHM9PmpVKHMse25hbWVBdHRyOmUsaWNvbnM6dCxhdHRyczphfSkpLGkmJkFycmF5LmZyb20oci5xdWVyeVNlbGVjdG9yQWxsKCJ0ZW1wbGF0ZSIpKS5mb3JFYWNoKGw9PkJEZSh7aWNvbnM6dCxuYW1lQXR0cjplLGF0dHJzOmEscm9vdDpsLmNvbnRlbnQsaW5UZW1wbGF0ZXM6aX0pKSxlPT09ImRhdGEtbHVjaWRlIil7bGV0IHM9ci5xdWVyeVNlbGVjdG9yQWxsKCJbaWNvbi1uYW1lXSIpO3MubGVuZ3RoPjAmJihjb25zb2xlLndhcm4oIltMdWNpZGVdIFNvbWUgaWNvbnMgd2VyZSBmb3VuZCB3aXRoIHRoZSBub3cgZGVwcmVjYXRlZCBpY29uLW5hbWUgYXR0cmlidXRlLiBUaGVzZSB3aWxsIHN0aWxsIGJlIHJlcGxhY2VkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0IHdpbGwgbm8gbG9uZ2VyIGJlIHN1cHBvcnRlZCBpbiB2MS4wIGFuZCB5b3Ugc2hvdWxkIHN3aXRjaCB0byBkYXRhLWx1Y2lkZSIpLEFycmF5LmZyb20ocykuZm9yRWFjaChsPT5qVShsLHtuYW1lQXR0cjoiaWNvbi1uYW1lIixpY29uczp0LGF0dHJzOmF9KSkpfX19KTt2YXIgTUl0LHpJdD1uKCgpPT57ZmUoKTtGdCgpO1dVKCk7TUl0PSgpPT57bGV0IHQ9T2JqZWN0LmtleXMoUkRlLmZhKTtjb25zb2xlLmxvZygiRmlyc3QgZmV3IEx1Y2lkZSBrZXlzOiIsT2JqZWN0LmtleXMoV3IpLnNsaWNlKDAsNSkpO2xldCBlPU9iamVjdC5rZXlzKFdyKS5maWx0ZXIobz0+e2xldCBzPW9bMF09PT1vWzBdLnRvVXBwZXJDYXNlKCkmJm9bMF0hPT1vWzBdLnRvTG93ZXJDYXNlKCksbD10eXBlb2YgV3Jbb109PSJmdW5jdGlvbiIsZj0hWyJjcmVhdGVFbGVtZW50IiwiY3JlYXRlSWNvbnMiLCJkZWZhdWx0Il0uaW5jbHVkZXMobyk7cmV0dXJuIGwmJnMmJmZ9KS5tYXAobz0+by5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKStvLnNsaWNlKDEpKTtpZihjb25zb2xlLmxvZyhgRm91bmQgJHtlLmxlbmd0aH0gTHVjaWRlIGljb25zYCksZS5sZW5ndGg9PT0wJiYoY29uc29sZS5sb2coIlRyeWluZyBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBmaW5kIEx1Y2lkZSBpY29ucyIpLEhsKSl7bGV0IG89SGx8fHt9O2UucHVzaCguLi5PYmplY3Qua2V5cyhvKSksY29uc29sZS5sb2coYEZvdW5kICR7ZS5sZW5ndGh9IGljb25zIHZpYSBhbHRlcm5hdGl2ZSBtZXRob2RgKX1sZXQgYT0oKT0+e2xldCBvPXQubWFwKGM9PmBmYToke2N9YCkscz1lLm1hcChjPT5gbHVjaWRlOiR7Y31gKSxsPVsuLi5vLC4uLnNdLGY9bC5qb2luKGAKYCk7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZikudGhlbigoKT0+e2xldCB1PXdpbmRvdy5ldmVudC5jdXJyZW50VGFyZ2V0LGQ9dS50ZXh0Q29udGVudDt1LnRleHRDb250ZW50PWBcdTI3MTMgQ29waWVkICR7bC5sZW5ndGh9IGljb24gbmFtZXMhYCxzZXRUaW1lb3V0KCgpPT57dS50ZXh0Q29udGVudD1kfSwyZTMpfSl9LHI9bz0+e2xldCBzPW8udGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpLGw9by50YXJnZXQuY2xvc2VzdCgiLmRlbW9Db250YWluZXIiKTtsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pY29uQ29udGFpbmVyIikuZm9yRWFjaChjPT57bGV0IHU9Yy5nZXRBdHRyaWJ1dGUoImRhdGEtbmFtZSIpO3M9PT0iInx8dSYmdS5pbmNsdWRlcyhzKT9jLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOmMuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9KSxsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWN0aW9uLWNvbnRhaW5lciIpLmZvckVhY2goYz0+e2xldCB1PWMucXVlcnlTZWxlY3RvckFsbCgiLmljb25Db250YWluZXI6bm90KC5oaWRkZW4pIikubGVuZ3RoLGQ9Yy5xdWVyeVNlbGVjdG9yKCIuaWNvbi1jb3VudCIpO2lmKGQpe2xldCBoPWMuY2xhc3NMaXN0LmNvbnRhaW5zKCJmYS1zZWN0aW9uIik/dC5sZW5ndGg6ZS5sZW5ndGg7ZC50ZXh0Q29udGVudD11PT09aD9gJHtofSBpY29uc2A6YCR7dX0gb2YgJHtofSBpY29uc2B9fSl9LGk9KG8scyk9PntsZXQgbD1gJHtzfToke299YDtuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChsKS50aGVuKCgpPT57bGV0IHU9d2luZG93LmV2ZW50LmN1cnJlbnRUYXJnZXQucXVlcnlTZWxlY3RvcigiLmNvcHktdG9vbHRpcCIpO3UmJih1LnRleHRDb250ZW50PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57dS50ZXh0Q29udGVudD0iQ2xpY2sgdG8gY29weSJ9LDJlMykpfSl9O3JldHVybiBNYAogIDxzdHlsZT4KICAgIC5kZW1vQ29udGFpbmVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgYmFja2dyb3VuZDogIzExMTExMTsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgZm9udC1zaXplOiAzMHB4OwogICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBSb2JvdG8sIE94eWdlbi1TYW5zLCBVYnVudHUsIENhbnRhcmVsbCwgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICAgIH0KICAgIAogICAgLnNlYXJjaC1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAxMHB4OwogICAgfQogICAgCiAgICAjaWNvblNlYXJjaCB7CiAgICAgIGZsZXg6IDE7CiAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogIzIyMjsKICAgICAgY29sb3I6ICNmZmY7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7CiAgICB9CiAgICAKICAgICNpY29uU2VhcmNoOmZvY3VzIHsKICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgYm9yZGVyLWNvbG9yOiAjZTQwMDJiOwogICAgfQogICAgCiAgICAuY29weS1hbGwtYnV0dG9uIHsKICAgICAgcGFkZGluZzogMTJweCAyMHB4OwogICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBiYWNrZ3JvdW5kOiAjZTQwMDJiOwogICAgICBjb2xvcjogI2ZmZjsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIH0KICAgIAogICAgLmNvcHktYWxsLWJ1dHRvbjpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICNjNDAwMWI7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIH0KICAgIAogICAgLmNvcHktYWxsLWJ1dHRvbjphY3RpdmUgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICB9CiAgICAKICAgIGRlZXMtaWNvbiB7CiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgfQoKICAgIC5pY29uQ29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgcGFkZGluZzogMjBweCAxNnB4IDBweCAxNnB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzMzMzOwogICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KICAgIAogICAgLmljb25Db250YWluZXI6aG92ZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOwogICAgfQoKICAgIC5pY29uTmFtZSB7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBjb2xvcjogI2NjYzsKICAgICAgYmFja2dyb3VuZDogIzMzMzMzMzsKICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTZweDsKICAgICAgbWFyZ2luLXJpZ2h0OiAtMTZweDsKICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIG1heC13aWR0aDogMTIwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCA0cHggNHB4OwogICAgfQoKICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgIG1hcmdpbjogMjBweCAwOwogICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzMzMzM7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIH0KICAgIAogICAgLmFwaS1ub3RlIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogI2U0MDAyYjsKICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgcGFkZGluZzogMTBweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U0MDAyYjsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIyOCwgMCwgNDMsIDAuMSk7CiAgICB9CiAgICAKICAgIC5pY29uLWNvdW50IHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogIzg4ODsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgYmFja2dyb3VuZDogIzIyMjsKICAgICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7CiAgICB9CiAgICAKICAgIC5pY29ucy1ncmlkIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KICAgIAogICAgLnNlY3Rpb24tY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7CiAgICB9CiAgICAKICAgIC5jb3B5LXRvb2x0aXAgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJhY2tncm91bmQ6ICMzMzM7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB0b3A6IC0zMHB4OwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3M7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgCiAgICAuaWNvbkNvbnRhaW5lcjpob3ZlciAuY29weS10b29sdGlwIHsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAuaWNvbkNvbnRhaW5lcjpob3ZlciBkZWVzLWljb24gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CiAgICB9CiAgICAKICAgIC5oaWRkZW4gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vQ29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Imljb25TZWFyY2giIHBsYWNlaG9sZGVyPSJTZWFyY2ggaWNvbnMuLi4iIEBpbnB1dD0ke3J9PgogICAgICA8YnV0dG9uIGNsYXNzPSJjb3B5LWFsbC1idXR0b24iIEBjbGljaz0ke2F9PvCfk4sgQ29weSBBbGwgSWNvbiBOYW1lczwvYnV0dG9uPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9ImFwaS1ub3RlIj4KICAgICAgTmV3IEFQSTogVXNlIDxjb2RlPmljb249ImZhOmljb25OYW1lIjwvY29kZT4gb3IgPGNvZGU+aWNvbj0ibHVjaWRlOmljb25OYW1lIjwvY29kZT4gaW5zdGVhZCBvZiA8Y29kZT5pY29uRkE8L2NvZGU+LiAKICAgICAgQ2xpY2sgYW55IGljb24gdG8gY29weSBpdHMgbmV3IGZvcm1hdCB0byBjbGlwYm9hcmQuCiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1jb250YWluZXIgZmEtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPgogICAgICAgIEZvbnRBd2Vzb21lIEljb25zCiAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tY291bnQiPiR7dC5sZW5ndGh9IGljb25zPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaWNvbnMtZ3JpZCI+CiAgICAgICAgJHt0Lm1hcChvPT57bGV0IHM9YGZhOiR7b31gO3JldHVybiBNYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imljb25Db250YWluZXIgZmEtaWNvbiIgZGF0YS1uYW1lPSR7by50b0xvd2VyQ2FzZSgpfSBAY2xpY2s9JHsoKT0+aShvLCJmYSIpfT4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtzfSBpY29uU2l6ZT0iMjQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbk5hbWUiPmZhOiR7b308L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb3B5LXRvb2x0aXAiPkNsaWNrIHRvIGNvcHk8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9KX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWNvbnRhaW5lciBsdWNpZGUtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPgogICAgICAgIEx1Y2lkZSBJY29ucwogICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWNvdW50Ij4ke2UubGVuZ3RofSBpY29uczwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Imljb25zLWdyaWQiPgogICAgICAgICR7ZS5tYXAobz0+e2xldCBzPWBsdWNpZGU6JHtvfWA7cmV0dXJuIE1gCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbkNvbnRhaW5lciBsdWNpZGUtaWNvbiIgZGF0YS1uYW1lPSR7by50b0xvd2VyQ2FzZSgpfSBAY2xpY2s9JHsoKT0+aShvLCJsdWNpZGUiKX0+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7c30gaWNvblNpemU9IjI0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imljb25OYW1lIj5sdWNpZGU6JHtvfTwvZGl2PgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvcHktdG9vbHRpcCI+Q2xpY2sgdG8gY29weTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYH0pfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIGB9fSk7ZnVuY3Rpb24gdm8xKCl7bzUuc2l6ZT5rSXQmJkFycmF5LmZyb20obzUua2V5cygpKS5zbGljZSgwLGtJdC81KS5mb3JFYWNoKGU9Pm81LmRlbGV0ZShlKSl9dmFyIGk1LHJyLGJvMSxSRGUsbzUsa0l0LHlvMSxGdD1uKCgpPT57ZmUoKTtTdCgpO0JlKCk7SnJ0KCk7dzZ0KCk7UmR0KCk7bUl0KCk7ekl0KCk7V1UoKTtXVSgpO2k1PWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0scnI9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LGJvMT17YXJyb3dSaWdodDpPVSxhcnJvd1VwUmlnaHRGcm9tU3F1YXJlOl83LGJlbGw6Q1UsYnVnOkhVLGJ1aWxkaW5nOlBVLGNhcmV0TGVmdDpfVSxjYXJldFJpZ2h0OlNVLGNoZWNrOkZVLGNpcmNsZUluZm86JDcsY2lyY2xlQ2hlY2s6SmQsY2lyY2xlQ2hlY2tTb2xpZDpTNyxjaXJjbGVYbWFyazpRNixjaXJjbGVYbWFya1NvbGlkOmE1LGNsb2NrUm90YXRlTGVmdDpDNyxjb3B5OkxWLGNvcHlTb2xpZDpxVSxkZXNrdG9wOkE3LGV5ZTpUVSxleWVTbGFzaDpWVSxmaWxlSW52b2ljZTpCVSxmaWxlSW52b2ljZURvbGxlcjpSVSxnZWFyOno3LGdyaXA6cjUsbWFnbmlmeWluZ0dsYXNzOnk3LG1lc3NhZ2U6UWQsbWVzc2FnZVNvbGlkOmI3LG1vbmV5Q2hlY2tEb2xsYXI6VDcsbXVnSG90OlVVLG1pbnVzOng3LG5ldHdvcmtXaXJlZDpFVSxwYXBlcmNsaXA6SVUscGFzdGU6WGQscGFzdGVTb2xpZDpnNyxwZW5Ub1NxdWFyZTp3NyxwbHVzOkw3LHJlY2VpcHQ6QVUscnNzOnY3LHNoYXJlOk03LHN1bjpDVixzdW5Tb2xpZDpEVSx0ZXJtaW5hbDpOVSx0cmFzaDpENyx0cmFzaFNvbGlkOkQ3LHRyYXNoQ2FuOktkLHRyYXNoQ2FuU29saWQ6azcsdXNlcnM6JFUsd2FsbGV0OkxVLHhtYXJrOmlzLGZhY2Vib29rOnBWLGdvb2dsZTpmVixpbnN0YWdyYW06Z1YsbGlua2VkaW46dVYsbWVkaXVtOkdkLHNsYWNrOmhWLHRpa3RvazptVix0d2l0dGVyOnhWfSxSRGU9e2ZhOmJvMX0sbzU9bmV3IE1hcCxrSXQ9NTAwO3lvMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtaWNvbiIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdO3ZhciBFPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgQz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOlN0cmluZyxjb252ZXJ0ZXI6e2Zyb21BdHRyaWJ1dGU6ej0+eix0b0F0dHJpYnV0ZTp6PT56fX0pXSxmPVtEKHt0eXBlOlN0cmluZyxjb252ZXJ0ZXI6e2Zyb21BdHRyaWJ1dGU6ej0+eix0b0F0dHJpYnV0ZTp6PT56fX0pXSxkPVtEKHt0eXBlOk51bWJlcn0pXSxiPVtEKHt0eXBlOlN0cmluZ30pXSx2PVtEKHt0eXBlOk51bWJlcn0pXSxpNSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Imljb25GQSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+Imljb25GQSJpbiB6LGdldDp6PT56Lmljb25GQSxzZXQ6KHosUCk9Pnt6Lmljb25GQT1QfX0sbWV0YWRhdGE6Q30scyxsKSxpNSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Imljb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJpY29uImluIHosZ2V0Ono9PnouaWNvbixzZXQ6KHosUCk9Pnt6Lmljb249UH19LG1ldGFkYXRhOkN9LGMsdSksaTUodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpY29uU2l6ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+Imljb25TaXplImluIHosZ2V0Ono9PnouaWNvblNpemUsc2V0Oih6LFApPT57ei5pY29uU2l6ZT1QfX0sbWV0YWRhdGE6Q30saCxnKSxpNSh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNvbG9yIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4iY29sb3IiaW4geixnZXQ6ej0+ei5jb2xvcixzZXQ6KHosUCk9Pnt6LmNvbG9yPVB9fSxtZXRhZGF0YTpDfSx4LG0pLGk1KHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3Ryb2tlV2lkdGgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJzdHJva2VXaWR0aCJpbiB6LGdldDp6PT56LnN0cm9rZVdpZHRoLHNldDooeixQKT0+e3ouc3Ryb2tlV2lkdGg9UH19LG1ldGFkYXRhOkN9LHksdyksaTUobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6Q30sbnVsbCxhKSxFPXI9ZS52YWx1ZSxDJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkN9KX1zdGF0aWMgZGVtbz1NSXQ7I2U9cnIodGhpcyxzLHZvaWQgMCk7Z2V0IGljb25GQSgpe3JldHVybiB0aGlzLiNlfXNldCBpY29uRkEoQyl7dGhpcy4jZT1DfSN0PShycih0aGlzLGwpLHJyKHRoaXMsYyx2b2lkIDApKTtnZXQgaWNvbigpe3JldHVybiB0aGlzLiN0fXNldCBpY29uKEMpe3RoaXMuI3Q9Q30jYT0ocnIodGhpcyx1KSxycih0aGlzLGgsdm9pZCAwKSk7Z2V0IGljb25TaXplKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGljb25TaXplKEMpe3RoaXMuI2E9Q30jcj0ocnIodGhpcyxnKSxycih0aGlzLHgsImN1cnJlbnRDb2xvciIpKTtnZXQgY29sb3IoKXtyZXR1cm4gdGhpcy4jcn1zZXQgY29sb3IoQyl7dGhpcy4jcj1DfSNpPShycih0aGlzLG0pLHJyKHRoaXMseSwyKSk7Z2V0IHN0cm9rZVdpZHRoKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHN0cm9rZVdpZHRoKEMpe3RoaXMuI2k9Q31sYXN0SWNvbj0ocnIodGhpcyx3KSxudWxsKTtsYXN0SWNvblNpemU9bnVsbDtsYXN0Q29sb3I9bnVsbDtsYXN0U3Ryb2tlV2lkdGg9bnVsbDtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksYzEuc2V0dXAoKX1nZXRFZmZlY3RpdmVJY29uKCl7cmV0dXJuIHRoaXMuaWNvbj90aGlzLmljb246dGhpcy5pY29uRkE/dGhpcy5pY29uRkEuc3RhcnRzV2l0aCgibHVjaWRlOiIpP3RoaXMuaWNvbkZBOmBmYToke3RoaXMuaWNvbkZBfWA6bnVsbH1wYXJzZUljb25TdHJpbmcoQyl7bGV0IHo9Qy50b0xvd2VyQ2FzZSgpO3JldHVybiB6LnN0YXJ0c1dpdGgoImZhOiIpP3t0eXBlOiJmYSIsbmFtZTpDLnN1YnN0cmluZygzKX06ei5zdGFydHNXaXRoKCJsdWNpZGU6Iik/e3R5cGU6Imx1Y2lkZSIsbmFtZTpDLnN1YnN0cmluZyg3KX06e3R5cGU6Imx1Y2lkZSIsbmFtZTpDfX1yZW5kZXJMdWNpZGVJY29uKEMpe2xldCB6PWBsdWNpZGU6JHtDfToke3RoaXMuaWNvblNpemV9OiR7dGhpcy5jb2xvcn06JHt0aGlzLnN0cm9rZVdpZHRofWA7aWYobzUuaGFzKHopKXJldHVybiBvNS5nZXQoeil8fCIiO3RyeXtsZXQgUD1DLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK0Muc2xpY2UoMSk7aWYoIVdyW1BdKXJldHVybiBjb25zb2xlLndhcm4oYEx1Y2lkZSBpY29uICcke1B9JyBub3QgZm91bmQgaW4gbHVjaWRlSWNvbnMgb2JqZWN0YCksIiI7bGV0IF89b3MoV3JbUF0se2NvbG9yOnRoaXMuY29sb3Isc2l6ZTp0aGlzLmljb25TaXplLHN0cm9rZVdpZHRoOnRoaXMuc3Ryb2tlV2lkdGh9KTtpZighXylyZXR1cm4gY29uc29sZS53YXJuKGBjcmVhdGVFbGVtZW50IHJldHVybmVkIGVtcHR5IHJlc3VsdCBmb3IgJHtQfWApLCIiO2xldCAkPV8ub3V0ZXJIVE1MO3JldHVybiBvNS5zZXQoeiwkKSx2bzEoKSwkfWNhdGNoKFApe3JldHVybiBjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgTHVjaWRlIGljb24gJHtDfTpgLFApLGA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IiR7dGhpcy5pY29uU2l6ZX0iIGhlaWdodD0iJHt0aGlzLmljb25TaXplfSIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiR7dGhpcy5jb2xvcn0iIHN0cm9rZS13aWR0aD0iJHt0aGlzLnN0cm9rZVdpZHRofSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8dGV4dCB4PSI1MCUiIHk9IjUwJSIgZm9udC1zaXplPSI2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiBmaWxsPSIke3RoaXMuY29sb3J9Ij4ke0N9PC90ZXh0PgogICAgICA8L3N2Zz5gfX1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC8qIEltcHJvdmUgcmVuZGVyaW5nIHBlcmZvcm1hbmNlICovCiAgICAgICNpY29uQ29udGFpbmVyIHN2ZyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07IC8qIEhlbHBzIHdpdGggYW5pbWF0aW9ucyAqLwogICAgICAgIGNvbnRhaW46IHN0cmljdDsgLyogUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uICovCiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICAke2MxLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgICNpY29uQ29udGFpbmVyIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuaWNvblNpemV9cHg7CiAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5pY29uU2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgaWQ9Imljb25Db250YWluZXIiPjwvZGl2PgogICAgYH11cGRhdGVkKCl7dGhpcy5pY29uU2l6ZXx8KHRoaXMuaWNvblNpemU9cGFyc2VJbnQoZ2xvYmFsVGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmZvbnRTaXplLnJlcGxhY2UoL1xEL2csIiIpKSk7bGV0IEM9dGhpcy5nZXRFZmZlY3RpdmVJY29uKCk7aWYodGhpcy5sYXN0SWNvbj09PUMmJnRoaXMubGFzdEljb25TaXplPT09dGhpcy5pY29uU2l6ZSYmdGhpcy5sYXN0Q29sb3I9PT10aGlzLmNvbG9yJiZ0aGlzLmxhc3RTdHJva2VXaWR0aD09PXRoaXMuc3Ryb2tlV2lkdGgpcmV0dXJuO3RoaXMubGFzdEljb249Qyx0aGlzLmxhc3RJY29uU2l6ZT10aGlzLmljb25TaXplLHRoaXMubGFzdENvbG9yPXRoaXMuY29sb3IsdGhpcy5sYXN0U3Ryb2tlV2lkdGg9dGhpcy5zdHJva2VXaWR0aDtsZXQgej10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIiNpY29uQ29udGFpbmVyIik7aWYoISghenx8IUMpKXRyeXtsZXR7dHlwZTpQLG5hbWU6X309dGhpcy5wYXJzZUljb25TdHJpbmcoQyk7aWYoUD09PSJsdWNpZGUiKXt6LmlubmVySFRNTD0iIjt0cnl7bGV0ICQ9Xy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStfLnNsaWNlKDEpO2lmKFdyWyRdKXtsZXQgSD1vcyhXclskXSx7Y29sb3I6dGhpcy5jb2xvcixzaXplOnRoaXMuaWNvblNpemUsc3Ryb2tlV2lkdGg6dGhpcy5zdHJva2VXaWR0aH0pO2lmKEgpe3ouYXBwZW5kQ2hpbGQoSCk7cmV0dXJufX10aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBjcmVhdGUgZWxlbWVudCBmb3IgJHskfWApfWNhdGNoKCQpe2NvbnNvbGUuZXJyb3IoIkVycm9yIHJlbmRlcmluZyBMdWNpZGUgaWNvbjoiLCQpO2xldCBIPXRoaXMucmVuZGVyTHVjaWRlSWNvbihfKTtIJiYoei5pbm5lckhUTUw9SCl9fWVsc2V7bGV0ICQ9UkRlLmZhW19dO2lmKCQpe2xldCBIPU4xZSgkKS5odG1sWzBdO3ouaW5uZXJIVE1MPUh9ZWxzZSBjb25zb2xlLndhcm4oYEZvbnRBd2Vzb21lIGljb24gbm90IGZvdW5kOiAke199YCl9fWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoYEVycm9yIHVwZGF0aW5nIGljb24gJHtDfTpgLFApfX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5sYXN0SWNvbj1udWxsLHRoaXMubGFzdEljb25TaXplPW51bGwsdGhpcy5sYXN0Q29sb3I9bnVsbCx0aGlzLmxhc3RTdHJva2VXaWR0aD1udWxsfXN0YXRpY3tycihyLGEpfX07cmV0dXJuIEU9cn0pKCl9KTt2YXIgbHMsaGEseEVlPW4oKCk9Pntscz17eHRlcm06IjUuMy4wIix4dGVybUFkZG9uRml0OiIwLjguMCIsaGlnaGxpZ2h0SnM6IjExLjExLjEiLGFwZXhjaGFydHM6IjUuMy42Iix0aXB0YXA6IjIuMjMuMCIsZm9udGF3ZXNvbWU6IjcuMS4wIn0saGE9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0ifSk7dmFyIEgyLGtGdD1uKCgpPT57eEVlKCk7SDI9Y2xhc3MgdHtzdGF0aWMgaW5zdGFuY2U7eHRlcm1MaWI9bnVsbDt4dGVybUZpdEFkZG9uTGliPW51bGw7aGlnaGxpZ2h0SnNMaWI9bnVsbDthcGV4Q2hhcnRzTGliPW51bGw7dGlwdGFwTGliPW51bGw7eHRlcm1Mb2FkaW5nUHJvbWlzZT1udWxsO3h0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZT1udWxsO2hpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2U9bnVsbDthcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2U9bnVsbDt0aXB0YXBMb2FkaW5nUHJvbWlzZT1udWxsO2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiB0Lmluc3RhbmNlfHwodC5pbnN0YW5jZT1uZXcgdCksdC5pbnN0YW5jZX1hc3luYyBsb2FkWHRlcm0oKXtyZXR1cm4gdGhpcy54dGVybUxpYj90aGlzLnh0ZXJtTGliOnRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZT90aGlzLnh0ZXJtTG9hZGluZ1Byb21pc2U6KHRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZT0oYXN5bmMoKT0+e2xldCBhPWF3YWl0IGltcG9ydChgJHtoYX0veHRlcm1AJHtscy54dGVybX0vK2VzbWApO3JldHVybiBhd2FpdCB0aGlzLmluamVjdFh0ZXJtU3R5bGVzKCksdGhpcy54dGVybUxpYj17VGVybWluYWw6YS5UZXJtaW5hbH0sdGhpcy54dGVybUxpYn0pKCksdGhpcy54dGVybUxvYWRpbmdQcm9taXNlKX1hc3luYyBsb2FkWHRlcm1GaXRBZGRvbigpe3JldHVybiB0aGlzLnh0ZXJtRml0QWRkb25MaWI/dGhpcy54dGVybUZpdEFkZG9uTGliOnRoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlP3RoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlOih0aGlzLnh0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZT0oYXN5bmMoKT0+e2xldCBhPWF3YWl0IGltcG9ydChgJHtoYX0veHRlcm0tYWRkb24tZml0QCR7bHMueHRlcm1BZGRvbkZpdH0vK2VzbWApO3JldHVybiB0aGlzLnh0ZXJtRml0QWRkb25MaWI9e0ZpdEFkZG9uOmEuRml0QWRkb259LHRoaXMueHRlcm1GaXRBZGRvbkxpYn0pKCksdGhpcy54dGVybUZpdEFkZG9uTG9hZGluZ1Byb21pc2UpfWFzeW5jIGluamVjdFh0ZXJtU3R5bGVzKCl7bGV0IGU9Inh0ZXJtLWNkbi1zdHlsZXMiO2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpKXJldHVybjtsZXQgYT1gJHtoYX0veHRlcm1AJHtscy54dGVybX0vY3NzL3h0ZXJtLmNzc2AsaT1hd2FpdChhd2FpdCBmZXRjaChhKSkudGV4dCgpLG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtvLmlkPWUsby50ZXh0Q29udGVudD1pLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobyl9YXN5bmMgbG9hZEhpZ2hsaWdodEpzKCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMaWI/dGhpcy5oaWdobGlnaHRKc0xpYjp0aGlzLmhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2U/dGhpcy5oaWdobGlnaHRKc0xvYWRpbmdQcm9taXNlOih0aGlzLmhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2U9KGFzeW5jKCk9PntsZXQgYT1hd2FpdCBpbXBvcnQoYCR7aGF9L2hpZ2hsaWdodC5qc0Ake2xzLmhpZ2hsaWdodEpzfS8rZXNtYCk7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMaWI9YS5kZWZhdWx0LHRoaXMuaGlnaGxpZ2h0SnNMaWJ9KSgpLHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZSl9YXN5bmMgbG9hZEFwZXhDaGFydHMoKXtyZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTGliP3RoaXMuYXBleENoYXJ0c0xpYjp0aGlzLmFwZXhDaGFydHNMb2FkaW5nUHJvbWlzZT90aGlzLmFwZXhDaGFydHNMb2FkaW5nUHJvbWlzZToodGhpcy5hcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2U9KGFzeW5jKCk9PntsZXQgYT1hd2FpdCBpbXBvcnQoYCR7aGF9L2FwZXhjaGFydHNAJHtscy5hcGV4Y2hhcnRzfS8rZXNtYCk7cmV0dXJuIHRoaXMuYXBleENoYXJ0c0xpYj1hLmRlZmF1bHQsdGhpcy5hcGV4Q2hhcnRzTGlifSkoKSx0aGlzLmFwZXhDaGFydHNMb2FkaW5nUHJvbWlzZSl9YXN5bmMgbG9hZFRpcHRhcCgpe3JldHVybiB0aGlzLnRpcHRhcExpYj90aGlzLnRpcHRhcExpYjp0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlP3RoaXMudGlwdGFwTG9hZGluZ1Byb21pc2U6KHRoaXMudGlwdGFwTG9hZGluZ1Byb21pc2U9KGFzeW5jKCk9PntsZXQgZT1scy50aXB0YXAsW2EscixpLG8scyxsXT1hd2FpdCBQcm9taXNlLmFsbChbaW1wb3J0KGAke2hhfS9AdGlwdGFwL2NvcmVAJHtlfS8rZXNtYCksaW1wb3J0KGAke2hhfS9AdGlwdGFwL3N0YXJ0ZXIta2l0QCR7ZX0vK2VzbWApLGltcG9ydChgJHtoYX0vQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lQCR7ZX0vK2VzbWApLGltcG9ydChgJHtoYX0vQHRpcHRhcC9leHRlbnNpb24tdGV4dC1hbGlnbkAke2V9Lytlc21gKSxpbXBvcnQoYCR7aGF9L0B0aXB0YXAvZXh0ZW5zaW9uLWxpbmtAJHtlfS8rZXNtYCksaW1wb3J0KGAke2hhfS9AdGlwdGFwL2V4dGVuc2lvbi10eXBvZ3JhcGh5QCR7ZX0vK2VzbWApXSk7cmV0dXJuIHRoaXMudGlwdGFwTGliPXtFZGl0b3I6YS5FZGl0b3IsU3RhcnRlcktpdDpyLmRlZmF1bHR8fHIuU3RhcnRlcktpdCxVbmRlcmxpbmU6aS5kZWZhdWx0fHxpLlVuZGVybGluZSxUZXh0QWxpZ246by5kZWZhdWx0fHxvLlRleHRBbGlnbixMaW5rOnMuZGVmYXVsdHx8cy5MaW5rLFR5cG9ncmFwaHk6bC5kZWZhdWx0fHxsLlR5cG9ncmFwaHl9LHRoaXMudGlwdGFwTGlifSkoKSx0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlKX1hc3luYyBwcmVsb2FkQWxsKCl7YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMubG9hZFh0ZXJtKCksdGhpcy5sb2FkWHRlcm1GaXRBZGRvbigpLHRoaXMubG9hZEhpZ2hsaWdodEpzKCksdGhpcy5sb2FkQXBleENoYXJ0cygpLHRoaXMubG9hZFRpcHRhcCgpXSl9aXNMb2FkZWQoZSl7c3dpdGNoKGUpe2Nhc2UieHRlcm0iOnJldHVybiB0aGlzLnh0ZXJtTGliIT09bnVsbDtjYXNlInh0ZXJtRml0QWRkb24iOnJldHVybiB0aGlzLnh0ZXJtRml0QWRkb25MaWIhPT1udWxsO2Nhc2UiaGlnaGxpZ2h0SnMiOnJldHVybiB0aGlzLmhpZ2hsaWdodEpzTGliIT09bnVsbDtjYXNlImFwZXhDaGFydHMiOnJldHVybiB0aGlzLmFwZXhDaGFydHNMaWIhPT1udWxsO2Nhc2UidGlwdGFwIjpyZXR1cm4gdGhpcy50aXB0YXBMaWIhPT1udWxsO2RlZmF1bHQ6cmV0dXJuITF9fX19KTt2YXIgZWM9bigoKT0+e2tGdCgpO3hFZSgpfSk7dmFyIF9GdD1uKCgpPT57fSk7dmFyIEFGdD1uKCgpPT57X0Z0KCl9KTt2YXIgJEZ0LGFqLHJqLHlFZSxERnQsaWosb2osc2osbmo9bigoKT0+eyRGdD0iaHR0cHM6Ly9zdGFja2JsaXR6LmNvbSIsYWo9ImNvZGUiLHJqPSJlcnJvciIseUVlPSJlcnJvcl9kZXNjcmlwdGlvbiIsREZ0PSJfX3djX2FwaV9iY19fIixpaj0iX193Y19hcGlfdG9rZW5zX18iLG9qPSJfX3djX2FwaV92ZXJpZmllcl9fIixzaj0iX193Y19hcGlfcG9wdXBfXyJ9KTt2YXIgdGMsd0VlPW4oKCk9Pnt0Yz1jbGFzc3tfYnVzPW5ldyBFdmVudFRhcmdldDtsaXN0ZW4oZSl7ZnVuY3Rpb24gYShyKXtlKHIuZGF0YSl9cmV0dXJuIHRoaXMuX2J1cy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKSwoKT0+dGhpcy5fYnVzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGEpfWZpcmVFdmVudChlKXt0aGlzLl9idXMuZGlzcGF0Y2hFdmVudChuZXcgTWVzc2FnZUV2ZW50KCJtZXNzYWdlIix7ZGF0YTplfSkpfX19KTtmdW5jdGlvbiBsaigpe2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGlqKX1mdW5jdGlvbiBGRnQodCl7cmV0dXJuIE5GdC5saXN0ZW4odCl9ZnVuY3Rpb24gdXMxKCl7bGV0IHQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oaWopO2lmKCF0KXJldHVybiBudWxsO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gcHMxKHQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKGlqLEpTT04uc3RyaW5naWZ5KHQpKX1mdW5jdGlvbiBQRnQoe2NyZWF0ZWRfYXQ6dCxleHBpcmVzX2luOmV9KXtyZXR1cm4odCtlKSoxZTN9ZnVuY3Rpb24gSUZ0KHQpe2lmKHR5cGVvZiB0IT0ib2JqZWN0Inx8IXQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFRva2VuIFJlc3BvbnNlIik7aWYodHlwZW9mIHQuYWNjZXNzX3Rva2VuIT0ic3RyaW5nInx8dHlwZW9mIHQucmVmcmVzaF90b2tlbiE9InN0cmluZyJ8fHR5cGVvZiB0LmNyZWF0ZWRfYXQhPSJudW1iZXIifHx0eXBlb2YgdC5leHBpcmVzX2luIT0ibnVtYmVyIil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVG9rZW4gUmVzcG9uc2UiKX1mdW5jdGlvbiBoczEodCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSx0KSl9ZnVuY3Rpb24gbXMxKHQpe05GdC5maXJlRXZlbnQodCl9dmFyIEVGdCxORnQscDUsTUVlPW4oKCk9PntuaigpO3dFZSgpO0VGdD1uZXcgRXJyb3I7RUZ0LnN0YWNrPSIiO05GdD1uZXcgdGMscDU9Y2xhc3MgdHtvcmlnaW47cmVmcmVzaDthY2Nlc3M7ZXhwaXJlcztfcmV2b2tlZD1uZXcgQWJvcnRDb250cm9sbGVyO2NvbnN0cnVjdG9yKGUsYSxyLGkpe3RoaXMub3JpZ2luPWUsdGhpcy5yZWZyZXNoPWEsdGhpcy5hY2Nlc3M9cix0aGlzLmV4cGlyZXM9aX1hc3luYyBhY3RpdmF0ZShlKXtpZih0aGlzLl9yZXZva2VkLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBFcnJvcigiVG9rZW4gcmV2b2tlZCIpO3JldHVybiB0aGlzLmV4cGlyZXM8RGF0ZS5ub3coKSYmIWF3YWl0IHRoaXMuX2ZldGNoTmV3QWNjZXNzVG9rZW4oKT8hMToodGhpcy5fc3luYygpLHRoaXMuX3N0YXJ0UmVmcmVzaFRva2Vuc0xvb3AoZSksITApfWFzeW5jIHJldm9rZShlLGEpe3RoaXMuX3Jldm9rZWQuYWJvcnQoKTt0cnl7aWYoIShhd2FpdCBmZXRjaChgJHt0aGlzLm9yaWdpbn0vb2F1dGgvcmV2b2tlYCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn0sYm9keTpuZXcgVVJMU2VhcmNoUGFyYW1zKHt0b2tlbjp0aGlzLnJlZnJlc2gsdG9rZW5fdHlwZV9oaW50OiJyZWZyZXNoX3Rva2VuIixjbGllbnRfaWQ6ZX0pLG1vZGU6ImNvcnMifSkpLm9rKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIGxvZ291dCIpfWNhdGNoKHIpe2lmKCFhKXRocm93IHJ9bGooKX1zdGF0aWMgZnJvbVN0b3JhZ2UoKXtsZXQgZT11czEoKTtyZXR1cm4gZT9uZXcgdChlLm9yaWdpbixlLnJlZnJlc2gsZS5hY2Nlc3MsZS5leHBpcmVzKTpudWxsfXN0YXRpYyBhc3luYyBmcm9tQXV0aENvZGUoe2VkaXRvck9yaWdpbjplLGNsaWVudElkOmEsY29kZVZlcmlmaWVyOnIsYXV0aENvZGU6aSxyZWRpcmVjdFVyaTpvfSl7bGV0IHM9YXdhaXQgZmV0Y2goYCR7ZX0vb2F1dGgvdG9rZW5gLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifSxib2R5Om5ldyBVUkxTZWFyY2hQYXJhbXMoe2NsaWVudF9pZDphLGNvZGU6aSxjb2RlX3ZlcmlmaWVyOnIsZ3JhbnRfdHlwZToiYXV0aG9yaXphdGlvbl9jb2RlIixyZWRpcmVjdF91cmk6b30pLG1vZGU6ImNvcnMifSk7aWYoIXMub2spdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggdG9rZW46ICR7cy5zdGF0dXN9YCk7bGV0IGw9YXdhaXQgcy5qc29uKCk7SUZ0KGwpO2xldHthY2Nlc3NfdG9rZW46ZixyZWZyZXNoX3Rva2VuOmN9PWwsdT1QRnQobCk7cmV0dXJuIG5ldyB0KGUsYyxmLHUpfWFzeW5jIF9mZXRjaE5ld0FjY2Vzc1Rva2VuKCl7dHJ5e2xldCBlPWF3YWl0IGZldGNoKGAke3RoaXMub3JpZ2lufS9vYXV0aC90b2tlbmAse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9LGJvZHk6bmV3IFVSTFNlYXJjaFBhcmFtcyh7Z3JhbnRfdHlwZToicmVmcmVzaF90b2tlbiIscmVmcmVzaF90b2tlbjp0aGlzLnJlZnJlc2h9KSxtb2RlOiJjb3JzIixzaWduYWw6dGhpcy5fcmV2b2tlZC5zaWduYWx9KTtpZighZS5vayl0aHJvdyBFRnQ7bGV0IGE9YXdhaXQgZS5qc29uKCk7SUZ0KGEpO2xldHthY2Nlc3NfdG9rZW46cixyZWZyZXNoX3Rva2VuOml9PWEsbz1QRnQoYSk7cmV0dXJuIHRoaXMuYWNjZXNzPXIsdGhpcy5leHBpcmVzPW8sdGhpcy5yZWZyZXNoPWksITB9Y2F0Y2h7cmV0dXJuIGxqKCksITF9fV9zeW5jKCl7cHMxKHRoaXMpLG1zMSh0aGlzLmFjY2Vzcyl9YXN5bmMgX3N0YXJ0UmVmcmVzaFRva2Vuc0xvb3AoZSl7Zm9yKDs7KXtsZXQgYT10aGlzLmV4cGlyZXMtRGF0ZS5ub3coKS0xZTM7aWYoYXdhaXQgaHMxKE1hdGgubWF4KGEsMWUzKSksdGhpcy5fcmV2b2tlZC5zaWduYWwuYWJvcnRlZClyZXR1cm47aWYoIXRoaXMuX2ZldGNoTmV3QWNjZXNzVG9rZW4oKSl7ZSgpO3JldHVybn10aGlzLl9zeW5jKCl9fX19KTt2YXIgekVlLGNqLFppLGtFZT1uKCgpPT57bmooKTt6RWU9e30sY2o9bnVsbCxaaT17Z2V0IGVkaXRvck9yaWdpbigpe3JldHVybiBjaj09bnVsbCYmKGNqPW5ldyBVUkwoZ2xvYmFsVGhpcy5XRUJDT05UQUlORVJfQVBJX0lGUkFNRV9VUkw/PyRGdCkub3JpZ2luKSxjan0sc2V0IGVkaXRvck9yaWdpbih0KXtjaj1uZXcgVVJMKHQpLm9yaWdpbn0sc2V0UXVlcnlQYXJhbSh0LGUpe3pFZVt0XT1lfSxnZXQgdXJsKCl7bGV0IHQ9bmV3IFVSTCh0aGlzLmVkaXRvck9yaWdpbik7dC5wYXRobmFtZT0iL2hlYWRsZXNzIjtmb3IobGV0IGUgaW4gekVlKXQuc2VhcmNoUGFyYW1zLnNldChlLHpFZVtlXSk7cmV0dXJuIHQuc2VhcmNoUGFyYW1zLnNldCgidmVyc2lvbiIsIjEuNi4xIiksdH19fSk7YXN5bmMgZnVuY3Rpb24gT0Z0KHQpe2xldCBlPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KSxhPW5ldyBVaW50OEFycmF5KGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IixlKSk7cmV0dXJuIGJ0b2EoYS5yZWR1Y2UoKHIsaSk9PnIrU3RyaW5nLmZyb21Db2RlUG9pbnQoaSksIiIpKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpLnJlcGxhY2UoLz0rJC8sIiIpfWZ1bmN0aW9uIEJGdCgpe2xldCB0PW5ldyBVaW50OEFycmF5KDk2KTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHQpO2xldCBlPSIiO2ZvcihsZXQgYT0wO2E8MzI7KythKWUrPWdzMSh0WzMqYSswXSx0WzMqYSsxXSx0WzMqYSsyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZ3MxKHQsZSxhKXtsZXQgcj10Pj4yLGk9KHQmMyk8PDR8ZT4+NCxvPWUmMTV8KGEmMTkyKT4+MixzPWEmNjM7cmV0dXJuW3IsaSxvLHNdLm1hcCh4czEpLmpvaW4oIiIpfWZ1bmN0aW9uIHhzMSh0KXtsZXQgZTtyZXR1cm4gdDwyNj9lPXQrNjU6dDw1Mj9lPXQtMjYrOTc6dDw2Mj9lPXQtNTIrNDg6ZT10PT09NjI/MzA6NDUsU3RyaW5nLmZyb21DaGFyQ29kZShlKX12YXIgUkZ0PW4oKCk9Pnt9KTtmdW5jdGlvbiBIRnQoKXtsZXQgdCxlO2Z1bmN0aW9uIGEoKXtlPW5ldyBQcm9taXNlKHI9PnQ9cil9cmV0dXJuIGEoKSx7Z2V0IHByb21pc2UoKXtyZXR1cm4gZX0scmVzb2x2ZShyKXtyZXR1cm4gdChyKX0scmVzZXQ6YX19dmFyIHFGdD1uKCgpPT57fSk7ZnVuY3Rpb24gTUkodCl7aHQuYnJvYWRjYXN0Q2hhbm5lbCYmKGh0LmJyb2FkY2FzdENoYW5uZWwucG9zdE1lc3NhZ2UodCksbG9jYWxTdG9yYWdlLmdldEl0ZW0oc2opPT09InRydWUiJiZ0LnR5cGUhPT0iYXV0aC1sb2dvdXQiJiYobG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oc2opLHNldFRpbWVvdXQoKCk9Pnt3aW5kb3cuY2xvc2UoKX0pKSl9ZnVuY3Rpb24gU0VlKCl7YWMuZmlyZUV2ZW50KCksTUkoe3R5cGU6ImF1dGgtbG9nb3V0In0pfWZ1bmN0aW9uIFVGdCgpe3JldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZn1hc3luYyBmdW5jdGlvbiBqRnQoKXtsZXQgdD1CRnQoKTtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShvaix0KTtsZXQgZT1hd2FpdCBPRnQodCksYT1uZXcgVVJMKCIvb2F1dGgvYXV0aG9yaXplIixodC5lZGl0b3JPcmlnaW4pLHtzZWFyY2hQYXJhbXM6cn09YTtyZXR1cm4gci5hcHBlbmQoInJlc3BvbnNlX3R5cGUiLCJjb2RlIiksci5hcHBlbmQoImNsaWVudF9pZCIsaHQuY2xpZW50SWQpLHIuYXBwZW5kKCJyZWRpcmVjdF91cmkiLFVGdCgpKSxyLmFwcGVuZCgic2NvcGUiLGh0Lm9hdXRoU2NvcGUpLHIuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZSIsZSksci5hcHBlbmQoImNvZGVfY2hhbGxlbmdlX21ldGhvZCIsIlMyNTYiKSxhLnRvU3RyaW5nKCl9ZnVuY3Rpb24gQ0VlKHQpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiT29wcyEgVG9rZW5zIGlzIG5vdCBkZWZpbmVkIHdoZW4gaXQgYWx3YXlzIHNob3VsZCBiZS4iKX12YXIgaHQsVkZ0LGFjLFdGdCxMRWU9bigoKT0+e01FZSgpO25qKCk7a0VlKCk7UkZ0KCk7cUZ0KCk7d0VlKCk7aHQ9e2luaXRpYWxpemVkOiExLGJvb3RDYWxsZWQ6ITEsYXV0aENvbXBsZXRlOkhGdCgpLGNsaWVudElkOiIiLG9hdXRoU2NvcGU6IiIsYnJvYWRjYXN0Q2hhbm5lbDpudWxsLGdldCBlZGl0b3JPcmlnaW4oKXtyZXR1cm4gWmkuZWRpdG9yT3JpZ2lufSx0b2tlbnM6bnVsbH0sVkZ0PW5ldyB0YyxhYz1uZXcgdGM7V0Z0PXtpbml0KHtlZGl0b3JPcmlnaW46dCxjbGllbnRJZDplLHNjb3BlOmF9KXtpZihodC5pbml0aWFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkluaXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UiKTtpZighMCYmaHQuYm9vdENhbGxlZCl0aHJvdyBuZXcgRXJyb3IoImBhdXRoLmluaXRgIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBgV2ViQ29udGFpbmVyLmJvb3RgIik7aHQuaW5pdGlhbGl6ZWQ9ITAsaHQudG9rZW5zPXA1LmZyb21TdG9yYWdlKCksaHQuY2xpZW50SWQ9ZSxodC5vYXV0aFNjb3BlPWEsaHQuYnJvYWRjYXN0Q2hhbm5lbD1uZXcgQnJvYWRjYXN0Q2hhbm5lbChERnQpLFppLnNldFF1ZXJ5UGFyYW0oImNsaWVudF9pZCIsZSksdCYmKFppLmVkaXRvck9yaWdpbj1uZXcgVVJMKHQpLm9yaWdpbiksYWMubGlzdGVuKCgpPT5odC5hdXRoQ29tcGxldGUucmVzZXQoKSksaHQuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKTthc3luYyBmdW5jdGlvbiBpKGYpe2xldCBjPWYuZGF0YTtpZihjLnR5cGU9PT0iYXV0aC1jb21wbGV0ZSIpe2h0LnRva2Vucz1wNS5mcm9tU3RvcmFnZSgpLGF3YWl0IGh0LnRva2Vucy5hY3RpdmF0ZShTRWUpLGh0LmF1dGhDb21wbGV0ZS5yZXNvbHZlKCk7cmV0dXJufWlmKGMudHlwZT09PSJhdXRoLWZhaWxlZCIpe1ZGdC5maXJlRXZlbnQoYyk7cmV0dXJufWlmKGMudHlwZT09PSJhdXRoLWxvZ291dCIpe2FjLmZpcmVFdmVudCgpO3JldHVybn19aWYoaHQudG9rZW5zKXtsZXQgZj1odC50b2tlbnM7aWYoZi5vcmlnaW49PT1odC5lZGl0b3JPcmlnaW4pcmV0dXJuKGFzeW5jKCk9PntpZighYXdhaXQgZi5hY3RpdmF0ZShTRWUpKXtpZihodC50b2tlbnMhPT1mKXJldHVybjthYy5maXJlRXZlbnQoKTtyZXR1cm59aHQuYXV0aENvbXBsZXRlLnJlc29sdmUoKX0pKCkse3N0YXR1czoiYXV0aG9yaXplZCJ9O2xqKCksaHQudG9rZW5zPW51bGx9bGV0IG89bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikse3NlYXJjaFBhcmFtczpzfT1vLGw9KCk9PndpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxvKTtpZihzLmhhcyhyaikpe2xldCBmPXMuZ2V0KHJqKSxjPXMuZ2V0KHlFZSk7cmV0dXJuIHMuZGVsZXRlKHJqKSxzLmRlbGV0ZSh5RWUpLGwoKSxNSSh7dHlwZToiYXV0aC1mYWlsZWQiLGVycm9yOmYsZGVzY3JpcHRpb246Y30pLHtzdGF0dXM6ImF1dGgtZmFpbGVkIixlcnJvcjpmLGRlc2NyaXB0aW9uOmN9fWlmKHMuaGFzKGFqKSl7bGV0IGY9cy5nZXQoYWopLGM9aHQuZWRpdG9yT3JpZ2luO3MuZGVsZXRlKGFqKSxsKCk7bGV0IHU9bG9jYWxTdG9yYWdlLmdldEl0ZW0ob2opO3JldHVybiB1Pyhsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShvaikscDUuZnJvbUF1dGhDb2RlKHtlZGl0b3JPcmlnaW46YyxjbGllbnRJZDpodC5jbGllbnRJZCxhdXRoQ29kZTpmLGNvZGVWZXJpZmllcjp1LHJlZGlyZWN0VXJpOlVGdCgpfSkudGhlbihhc3luYyBkPT57aWYoaHQudG9rZW5zPWQsQ0VlKGh0LnRva2VucyksIWF3YWl0IGh0LnRva2Vucy5hY3RpdmF0ZShTRWUpKXRocm93IG5ldyBFcnJvcjtodC5hdXRoQ29tcGxldGUucmVzb2x2ZSgpLE1JKHt0eXBlOiJhdXRoLWNvbXBsZXRlIn0pfSkuY2F0Y2goZD0+e2NvbnNvbGUuZXJyb3IoZCksYWMuZmlyZUV2ZW50KCksTUkoe3R5cGU6ImF1dGgtbG9nb3V0In0pfSkse3N0YXR1czoiYXV0aG9yaXplZCJ9KTp7c3RhdHVzOiJuZWVkLWF1dGgifX1yZXR1cm57c3RhdHVzOiJuZWVkLWF1dGgifX0sYXN5bmMgc3RhcnRBdXRoRmxvdyh7cG9wdXA6dH09e30pe2lmKCFodC5pbml0aWFsaXplZCl0aHJvdyBuZXcgRXJyb3IoImF1dGguaW5pdCBtdXN0IGJlIGNhbGxlZCBmaXJzdCIpO2lmKHQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKHNqLCJ0cnVlIik7bGV0IGU9NTAwLGE9NjIwLHI9d2luZG93LnNjcmVlbkxlZnQrKHdpbmRvdy5vdXRlcldpZHRoLWEpLzIsaT13aW5kb3cuc2NyZWVuVG9wKyh3aW5kb3cub3V0ZXJIZWlnaHQtZSkvMjt3aW5kb3cub3Blbihhd2FpdCBqRnQoKSwiX2JsYW5rIixgcG9wdXAsd2lkdGg9JHthfSxoZWlnaHQ9JHtlfSxsZWZ0PSR7cn0sdG9wPSR7aX1gKX1lbHNlIHdpbmRvdy5sb2NhdGlvbi5ocmVmPWF3YWl0IGpGdCgpfSxhc3luYyBsb2dvdXQoe2lnbm9yZVJldm9rZUVycm9yOnR9PXt9KXthd2FpdCBodC50b2tlbnM/LnJldm9rZShodC5jbGllbnRJZCx0Pz8hMSksYWMuZmlyZUV2ZW50KCksTUkoe3R5cGU6ImF1dGgtbG9nb3V0In0pfSxsb2dnZWRJbigpe3JldHVybiBodC5hdXRoQ29tcGxldGUucHJvbWlzZX0sb24odCxlKXtzd2l0Y2godCl7Y2FzZSJhdXRoLWZhaWxlZCI6cmV0dXJuIFZGdC5saXN0ZW4oZSk7Y2FzZSJsb2dnZWQtb3V0IjpyZXR1cm4gYWMubGlzdGVuKGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBldmVudCB0eXBlICcke3R9Jy5gKX19fX0pO3ZhciBYaSxkaj1uKCgpPT57KGZ1bmN0aW9uKHQpe3QuVW5jYXVnaHRFeGNlcHRpb249IlBSRVZJRVdfVU5DQVVHSFRfRVhDRVBUSU9OIix0LlVuaGFuZGxlZFJlamVjdGlvbj0iUFJFVklFV19VTkhBTkRMRURfUkVKRUNUSU9OIix0LkNvbnNvbGVFcnJvcj0iUFJFVklFV19DT05TT0xFX0VSUk9SIn0pKFhpfHwoWGk9e30pKX0pO2Z1bmN0aW9uICRFZSh0LGU9c2VsZil7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBhKHIpe2lmKCFyfHwhci5kYXRhKXJldHVybjtsZXR7aWQ6aSx0eXBlOm8scGF0aDpzfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxyLmRhdGEpLGw9KHIuZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAocmMpLGY7dHJ5e2xldCBjPXMuc2xpY2UoMCwtMSkucmVkdWNlKChkLGgpPT5kW2hdLHQpLHU9cy5yZWR1Y2UoKGQsaCk9PmRbaF0sdCk7c3dpdGNoKG8pe2Nhc2UgMDpmPXU7YnJlYWs7Y2FzZSAxOmNbcy5zbGljZSgtMSlbMF1dPXJjKHIuZGF0YS52YWx1ZSksZj0hMDticmVhaztjYXNlIDI6Zj11LmFwcGx5KGMsbCk7YnJlYWs7Y2FzZSAzOntsZXQgZD1uZXcgdSguLi5sKTtmPXRPdChkKX1icmVhaztjYXNlIDQ6e2xldHtwb3J0MTpkLHBvcnQyOmh9PW5ldyBNZXNzYWdlQ2hhbm5lbDskRWUodCxoKSxmPWVPdChkLFtkXSl9YnJlYWs7Y2FzZSA1OmY9dm9pZCAwO2JyZWFrfX1jYXRjaChjKXtmPXt2YWx1ZTpjLFtfRWVdOjB9fVByb21pc2UucmVzb2x2ZShmKS5jYXRjaChjPT4oe3ZhbHVlOmMsW19FZV06MH0pKS50aGVuKGM9PntsZXRbdSxkXT1FRWUoYyk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdSkse2lkOml9KSxkKSxvPT09NSYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsYSksWEZ0KGUpKX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIE1zMSh0KXtyZXR1cm4gdC5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBYRnQodCl7TXMxKHQpJiZ0LmNsb3NlKCl9ZnVuY3Rpb24gUUZ0KHQsZSl7cmV0dXJuIERFZSh0LFtdLGUpfWZ1bmN0aW9uIGZqKHQpe2lmKHQpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBERWUodCxlPVtdLGE9ZnVuY3Rpb24oKXt9KXtsZXQgcj0hMSxpPW5ldyBQcm94eShhLHtnZXQobyxzKXtpZihmaihyKSxzPT09WUZ0KXJldHVybigpPT5oNSh0LHt0eXBlOjUscGF0aDplLm1hcChsPT5sLnRvU3RyaW5nKCkpfSkudGhlbigoKT0+e1hGdCh0KSxyPSEwfSk7aWYocz09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5pfTtsZXQgbD1oNSh0LHt0eXBlOjAscGF0aDplLm1hcChmPT5mLnRvU3RyaW5nKCkpfSkudGhlbihyYyk7cmV0dXJuIGwudGhlbi5iaW5kKGwpfXJldHVybiBERWUodCxbLi4uZSxzXSl9LHNldChvLHMsbCl7Zmoocik7bGV0W2YsY109RUVlKGwpO3JldHVybiBoNSh0LHt0eXBlOjEscGF0aDpbLi4uZSxzXS5tYXAodT0+dS50b1N0cmluZygpKSx2YWx1ZTpmfSxjKS50aGVuKHJjKX0sYXBwbHkobyxzLGwpe2ZqKHIpO2xldCBmPWVbZS5sZW5ndGgtMV07aWYoZj09PUdGdClyZXR1cm4gaDUodCx7dHlwZTo0fSkudGhlbihyYyk7aWYoZj09PSJiaW5kIilyZXR1cm4gREVlKHQsZS5zbGljZSgwLC0xKSk7bGV0W2MsdV09S0Z0KGwpO3JldHVybiBoNSh0LHt0eXBlOjIscGF0aDplLm1hcChkPT5kLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpjfSx1KS50aGVuKHJjKX0sY29uc3RydWN0KG8scyl7Zmoocik7bGV0W2wsZl09S0Z0KHMpO3JldHVybiBoNSh0LHt0eXBlOjMscGF0aDplLm1hcChjPT5jLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpsfSxmKS50aGVuKHJjKX19KTtyZXR1cm4gaX1mdW5jdGlvbiB6czEodCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sdCl9ZnVuY3Rpb24gS0Z0KHQpe2xldCBlPXQubWFwKEVFZSk7cmV0dXJuW2UubWFwKGE9PmFbMF0pLHpzMShlLm1hcChhPT5hWzFdKSldfWZ1bmN0aW9uIGVPdCh0LGUpe3JldHVybiBKRnQuc2V0KHQsZSksdH1mdW5jdGlvbiB0T3QodCl7cmV0dXJuIE9iamVjdC5hc3NpZ24odCx7W1RFZV06ITB9KX1mdW5jdGlvbiBrczEodCxlPXNlbGYsYT0iKiIpe3JldHVybntwb3N0TWVzc2FnZToocixpKT0+dC5wb3N0TWVzc2FnZShyLGEsaSksYWRkRXZlbnRMaXN0ZW5lcjplLmFkZEV2ZW50TGlzdGVuZXIuYmluZChlKSxyZW1vdmVFdmVudExpc3RlbmVyOmUucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKGUpfX1mdW5jdGlvbiBFRWUodCl7Zm9yKGxldFtlLGFdb2YgQUVlKWlmKGEuY2FuSGFuZGxlKHQpKXtsZXRbcixpXT1hLnNlcmlhbGl6ZSh0KTtyZXR1cm5be3R5cGU6MyxuYW1lOmUsdmFsdWU6cn0saV19cmV0dXJuW3t0eXBlOjAsdmFsdWU6dH0sSkZ0LmdldCh0KXx8W11dfWZ1bmN0aW9uIHJjKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgMzpyZXR1cm4gQUVlLmdldCh0Lm5hbWUpLmRlc2VyaWFsaXplKHQudmFsdWUpO2Nhc2UgMDpyZXR1cm4gdC52YWx1ZX19ZnVuY3Rpb24gaDUodCxlLGEpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IGk9U3MxKCk7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBvKHMpeyFzLmRhdGF8fCFzLmRhdGEuaWR8fHMuZGF0YS5pZCE9PWl8fCh0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHIocy5kYXRhKSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCksdC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDppfSxlKSxhKX0pfWZ1bmN0aW9uIFNzMSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9dmFyIGJzMSx2czEsRmEsVEVlLEdGdCxZRnQsX0VlLFpGdCx5czEsd3MxLEFFZSxKRnQsYU90PW4oKCk9PnticzE9T2JqZWN0LmRlZmluZVByb3BlcnR5LHZzMT0odCxlKT0+e2Zvcih2YXIgYSBpbiBlKWJzMSh0LGEse2dldDplW2FdLGVudW1lcmFibGU6ITB9KX0sRmE9e307dnMxKEZhLHtjcmVhdGVFbmRwb2ludDooKT0+R0Z0LGV4cG9zZTooKT0+JEVlLHByb3h5OigpPT50T3QscHJveHlNYXJrZXI6KCk9PlRFZSxyZWxlYXNlUHJveHk6KCk9PllGdCx0cmFuc2ZlcjooKT0+ZU90LHRyYW5zZmVySGFuZGxlcnM6KCk9PkFFZSx3aW5kb3dFbmRwb2ludDooKT0+a3MxLHdyYXA6KCk9PlFGdH0pO1RFZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxHRnQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksWUZ0PVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxfRWU9U3ltYm9sKCJDb21saW5rLnRocm93biIpLFpGdD10PT50eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsfHx0eXBlb2YgdD09ImZ1bmN0aW9uIix5czE9e2NhbkhhbmRsZTp0PT5aRnQodCkmJnRbVEVlXSxzZXJpYWxpemUodCl7bGV0e3BvcnQxOmUscG9ydDI6YX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiAkRWUodCxlKSxbYSxbYV1dfSxkZXNlcmlhbGl6ZSh0KXtyZXR1cm4gdC5zdGFydCgpLFFGdCh0KX19LHdzMT17Y2FuSGFuZGxlOnQ9PlpGdCh0KSYmX0VlIGluIHQsc2VyaWFsaXplKHt2YWx1ZTp0fSl7bGV0IGU7cmV0dXJuIHQgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOnQubWVzc2FnZSxuYW1lOnQubmFtZSxzdGFjazp0LnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTp0fSxbZSxbXV19LGRlc2VyaWFsaXplKHQpe3Rocm93IHQuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcih0LnZhbHVlLm1lc3NhZ2UpLHQudmFsdWUpOnQudmFsdWV9fSxBRWU9bmV3IE1hcChbWyJwcm94eSIseXMxXSxbInRocm93Iix3czFdXSk7SkZ0PW5ldyBXZWFrTWFwfSk7dmFyIHJPdD1uKCgpPT57fSk7ZnVuY3Rpb24gTkVlKHQpe3JldHVybiEodD09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QifHwhKCJ0eXBlImluIHQpfHwhQ3MxLmluY2x1ZGVzKHQudHlwZSkpfXZhciBDczEsaU90PW4oKCk9PntkaigpO0NzMT1bWGkuQ29uc29sZUVycm9yLFhpLlVuY2F1Z2h0RXhjZXB0aW9uLFhpLlVuaGFuZGxlZFJlamVjdGlvbl19KTt2YXIgUEVlPW4oKCk9PntyT3QoKTtkaigpO2lPdCgpfSk7ZnVuY3Rpb24gaWModCl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gdD9PYmplY3QuYXNzaWduKGUsdCk6ZX12YXIgb090PW4oKCk9Pnt9KTtmdW5jdGlvbiBJRWUodCl7bGV0IGU9e2Q6e319O2ZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyh0KSl7bGV0IHI9dFthXTtpZigiZmlsZSJpbiByKXtpZigic3ltbGluayJpbiByLmZpbGUpe2UuZFthXT17Zjp7bDpyLmZpbGUuc3ltbGlua319O2NvbnRpbnVlfWxldCBvPXIuZmlsZS5jb250ZW50cyxzPXR5cGVvZiBvPT0ic3RyaW5nIj9vOkxzMS5kZWNvZGUobyksbD10eXBlb2Ygbz09InN0cmluZyI/e306e2I6ITB9O2UuZFthXT17Zjp7YzpzLC4uLmx9fTtjb250aW51ZX1sZXQgaT1JRWUoci5kaXJlY3RvcnkpO2UuZFthXT1pfXJldHVybiBlfWZ1bmN0aW9uIEZFZSh0KXtsZXQgZT1pYygpO2lmKCJmImluIHQpdGhyb3cgbmV3IEVycm9yKCJJdCBpcyBub3QgcG9zc2libGUgdG8gZXhwb3J0IGEgc2luZ2xlIGZpbGUgaW4gdGhlIEpTT04gZm9ybWF0LiIpO2lmKCJkImluIHQpZm9yKGxldCBhIG9mIE9iamVjdC5rZXlzKHQuZCkpe2xldCByPXQuZFthXTsiZCJpbiByP2VbYV09aWMoe2RpcmVjdG9yeTpGRWUocil9KToiZiJpbiByJiYoImMiaW4gci5mP2VbYV09aWMoe2ZpbGU6aWMoe2NvbnRlbnRzOnIuZi5iP1RzMShyLmYuYyk6ci5mLmN9KX0pOiJsImluIHIuZiYmKGVbYV09aWMoe2ZpbGU6aWMoe3N5bWxpbms6ci5mLmx9KX0pKSl9cmV0dXJuIGV9ZnVuY3Rpb24gVHMxKHQpe2xldCBlPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyllW2FdPXRbYV0uY2hhckNvZGVBdCgwKTtyZXR1cm4gZX12YXIgTHMxLHNPdD1uKCgpPT57b090KCk7THMxPW5ldyBUZXh0RGVjb2RlcigibGF0aW4xIil9KTtmdW5jdGlvbiBOSGEodCl7aWYoaHQuYm9vdENhbGxlZCl0aHJvdyBuZXcgRXJyb3IoImBjb25maWd1cmVBUElLZXlgIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBgV2ViQ29udGFpbmVyLmJvb3RgIik7Wmkuc2V0UXVlcnlQYXJhbSgiY2xpZW50X2lkIix0KX1hc3luYyBmdW5jdGlvbiBEczEodCl7bGV0e3NlcnZlclByb21pc2U6ZX09RXMxKHQpLHI9YXdhaXQoYXdhaXQgZSkuYnVpbGQoe2hvc3Q6d2luZG93LmxvY2F0aW9uLmhvc3QsdmVyc2lvbjoiMS42LjEiLHdvcmtkaXJOYW1lOnQud29ya2Rpck5hbWUsZm9yd2FyZFByZXZpZXdFcnJvcnM6dC5mb3J3YXJkUHJldmlld0Vycm9yc30pLFtpLG8sc109YXdhaXQgUHJvbWlzZS5hbGwoW3IuZnMoKSxyLnByZXZpZXdTY3JpcHQoKSxyLnJ1bnRpbWVJbmZvKCldKTtyZXR1cm4gbmV3IHpJKHIsaSxvLHMpfWZ1bmN0aW9uIFZFZSh0KXtpZih0IT1udWxsKXJldHVybiBlPT57ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/dChuT3QuZGVjb2RlKGUpKTplPT1udWxsJiZ0KG51bGwpfX1mdW5jdGlvbiBoaih0KXtpZih0IT1udWxsKXJldHVybiBGYS5wcm94eSh0KX1mdW5jdGlvbiBFczEodCl7aWYocGohPW51bGwpcmV0dXJuIHQuY29lcCE9PU9FZS5jb2VwJiYoY29uc29sZS53YXJuKGBBdHRlbXB0aW5nIHRvIGJvb3QgV2ViQ29udGFpbmVyIHdpdGggJ2NvZXA6ICR7dC5jb2VwfSdgKSxjb25zb2xlLndhcm4oYEZpcnN0IGJvb3QgaGFkICdjb2VwOiAke09FZS5jb2VwfScsIG5ldyBzZXR0aW5ncyB3aWxsIG5vdCB0YWtlIGVmZmVjdCFgKSkse3NlcnZlclByb21pc2U6cGp9O3QuY29lcCYmWmkuc2V0UXVlcnlQYXJhbSgiY29lcCIsdC5jb2VwKSx0LmV4cGVyaW1lbnRhbE5vZGUmJlppLnNldFF1ZXJ5UGFyYW0oImV4cGVyaW1lbnRhbF9ub2RlIiwiMSIpO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Uuc3R5bGUuZGlzcGxheT0ibm9uZSIsZS5zZXRBdHRyaWJ1dGUoImFsbG93IiwiY3Jvc3Mtb3JpZ2luLWlzb2xhdGVkIik7bGV0IGE9WmkudXJsO2Uuc3JjPWEudG9TdHJpbmcoKTtsZXR7b3JpZ2luOnJ9PWE7cmV0dXJuIE9FZT17Li4udH0scGo9bmV3IFByb21pc2UoaT0+e2xldCBvPXM9PntpZihzLm9yaWdpbiE9PXIpcmV0dXJuO2xldHtkYXRhOmx9PXM7aWYobC50eXBlPT09ImluaXQiKXtpKEZhLndyYXAocy5wb3J0c1swXSkpO3JldHVybn1pZihsLnR5cGU9PT0id2FybmluZyIpe2NvbnNvbGVbbC5sZXZlbF0uY2FsbChjb25zb2xlLGwubWVzc2FnZSk7cmV0dXJufX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pfSksZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUoZSxudWxsKSx7c2VydmVyUHJvbWlzZTpwan19ZnVuY3Rpb24gTnMxKHQpe3JldHVybiB0eXBlb2YgdFswXT09InN0cmluZyJ9ZnVuY3Rpb24gUHMxKHQpe3JldHVybiB0WzBdaW5zdGFuY2VvZiBVaW50OEFycmF5fWZ1bmN0aW9uIElzMSgpe2xldCB0PW51bGw7cmV0dXJue3N0cmVhbTpuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KHIpe3Q9cn19KSxwdXNoOnI9PntyIT1udWxsP3Q/LmVucXVldWUocik6KHQ/LmNsb3NlKCksdD1udWxsKX19fWZ1bmN0aW9uIEZzMSh0KXtsZXQgZT0hMSxhPSgpPT57fTtyZXR1cm57c3Vic2NyaWJlKGkpe3JldHVybiBpLnRoZW4obz0+e2E9byxlJiZhKCl9KSwoKT0+e2U9ITAsYSgpfX0sbGlzdGVuZXI6KCguLi5pKT0+e2V8fHQoLi4uaSl9KX19dmFyIEVIYSx1aixwaixPRWUsbk90LF9zMSx6SSxBczEsJHMxLEJFZSxSRWUsSEVlLHFFZSxsT3Q9bigoKT0+e0xFZSgpO2RqKCk7YU90KCk7TEVlKCk7TUVlKCk7a0VlKCk7UEVlKCk7c090KCk7UEVlKCk7RUhhPVdGdCx1aj1udWxsLHBqPW51bGwsT0VlPXt9LG5PdD1uZXcgVGV4dERlY29kZXIsX3MxPW5ldyBUZXh0RW5jb2Rlcix6ST1jbGFzcyB0e19pbnN0YW5jZTtfcnVudGltZUluZm87ZnM7c3RhdGljIF9pbnN0YW5jZT1udWxsO3N0YXRpYyBfdGVhcmRvd25Qcm9taXNlPW51bGw7X3Rvcm5Eb3duPSExO191bnN1YnNjcmliZUZyb21Ub2tlbkNoYW5nZWRMaXN0ZW5lcj0oKT0+e307Y29uc3RydWN0b3IoZSxhLHIsaSl7dGhpcy5faW5zdGFuY2U9ZSx0aGlzLl9ydW50aW1lSW5mbz1pLHRoaXMuZnM9bmV3IHFFZShhKSxodC5pbml0aWFsaXplZCYmKHRoaXMuX3Vuc3Vic2NyaWJlRnJvbVRva2VuQ2hhbmdlZExpc3RlbmVyPUZGdChvPT57dGhpcy5faW5zdGFuY2Uuc2V0Q3JlZGVudGlhbHMoe2FjY2Vzc1Rva2VuOm8sZWRpdG9yT3JpZ2luOmh0LmVkaXRvck9yaWdpbn0pfSksKGFzeW5jKCk9Pnthd2FpdCBodC5hdXRoQ29tcGxldGUucHJvbWlzZSwhdGhpcy5fdG9ybkRvd24mJihDRWUoaHQudG9rZW5zKSxhd2FpdCB0aGlzLl9pbnN0YW5jZS5zZXRDcmVkZW50aWFscyh7YWNjZXNzVG9rZW46aHQudG9rZW5zLmFjY2VzcyxlZGl0b3JPcmlnaW46aHQuZWRpdG9yT3JpZ2lufSkpfSkoKS5jYXRjaChvPT57Y29uc29sZS5lcnJvcihvKX0pKX1hc3luYyBzcGF3bihlLGEscil7bGV0IGk9W107QXJyYXkuaXNBcnJheShhKT9pPWE6cj1hO2xldCBvLHM9bmV3IFJlYWRhYmxlU3RyZWFtO2lmKHI/Lm91dHB1dCE9PSExKXtsZXQgeD1JczEoKTtvPXgucHVzaCxzPXguc3RyZWFtfWxldCBsLGYsYyx1LGQ9aGooVkVlKG8pKSxoPWhqKFZFZShsKSksZz1oaihWRWUoYykpLGI9YXdhaXQgdGhpcy5faW5zdGFuY2UucnVuKHtjb21tYW5kOmUsYXJnczppLGN3ZDpyPy5jd2QsZW52OnI/LmVudix0ZXJtaW5hbDpyPy50ZXJtaW5hbH0saCxnLGQpO3JldHVybiBuZXcgSEVlKGIscyxmLHUpfWFzeW5jIGV4cG9ydChlLGEpe2xldCByPXtmb3JtYXQ6YT8uZm9ybWF0Pz8ianNvbiIsaW5jbHVkZXM6YT8uaW5jbHVkZXMsZXhjbHVkZXM6YT8uZXhjbHVkZXMsZXh0ZXJuYWw6ITB9LGk9YXdhaXQgdGhpcy5faW5zdGFuY2Uuc2VyaWFsaXplKGUscik7aWYoci5mb3JtYXQ9PT0ianNvbiIpe2xldCBvPUpTT04ucGFyc2Uobk90LmRlY29kZShpKSk7cmV0dXJuIEZFZShvKX1yZXR1cm4gaX1vbihlLGEpe2lmKGU9PT0icHJldmlldy1tZXNzYWdlIil7bGV0IG89YTthPShzPT57TkVlKHMpJiZvKHMpfSl9bGV0e2xpc3RlbmVyOnIsc3Vic2NyaWJlOml9PUZzMShhKTtyZXR1cm4gaSh0aGlzLl9pbnN0YW5jZS5vbihlLEZhLnByb3h5KHIpKSl9bW91bnQoZSxhKXtsZXQgcj1lIGluc3RhbmNlb2YgVWludDhBcnJheT9lOmUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9uZXcgVWludDhBcnJheShlKTpfczEuZW5jb2RlKEpTT04uc3RyaW5naWZ5KElFZShlKSkpO3JldHVybiB0aGlzLl9pbnN0YW5jZS5sb2FkRmlsZXMoRmEudHJhbnNmZXIocixbci5idWZmZXJdKSx7bW91bnRQb2ludHM6YT8ubW91bnRQb2ludH0pfXNldFByZXZpZXdTY3JpcHQoZSxhKXtyZXR1cm4gdGhpcy5faW5zdGFuY2Uuc2V0UHJldmlld1NjcmlwdChlLGEpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX3J1bnRpbWVJbmZvLnBhdGh9Z2V0IHdvcmtkaXIoKXtyZXR1cm4gdGhpcy5fcnVudGltZUluZm8uY3dkfXRlYXJkb3duKCl7aWYodGhpcy5fdG9ybkRvd24pdGhyb3cgbmV3IEVycm9yKCJXZWJDb250YWluZXIgYWxyZWFkeSB0b3JuIGRvd24iKTt0aGlzLl90b3JuRG93bj0hMCx0aGlzLl91bnN1YnNjcmliZUZyb21Ub2tlbkNoYW5nZWRMaXN0ZW5lcigpO2xldCBlPWFzeW5jKCk9Pnt0cnl7YXdhaXQgdGhpcy5mcy5fdGVhcmRvd24oKSxhd2FpdCB0aGlzLl9pbnN0YW5jZS50ZWFyZG93bigpfWZpbmFsbHl7dGhpcy5faW5zdGFuY2VbRmEucmVsZWFzZVByb3h5XSgpLHQuX2luc3RhbmNlPT09dGhpcyYmKHQuX2luc3RhbmNlPW51bGwpfX07dC5fdGVhcmRvd25Qcm9taXNlPWUoKX1zdGF0aWMgYXN5bmMgYm9vdChlPXt9KXthd2FpdCB0aGlzLl90ZWFyZG93blByb21pc2UsdC5fdGVhcmRvd25Qcm9taXNlPW51bGw7bGV0e3dvcmtkaXJOYW1lOmF9PWU7aWYod2luZG93LmNyb3NzT3JpZ2luSXNvbGF0ZWQmJmUuY29lcD09PSJub25lIiYmY29uc29sZS53YXJuKGBBIENyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3kgaGVhZGVyIGlzIHJlcXVpcmVkIGluIGNyb3NzIG9yaWdpbiBpc29sYXRlZCBlbnZpcm9ubWVudHMuClNldCB0aGUgJ2NvZXAnIG9wdGlvbiB0byAncmVxdWlyZS1jb3JwJy5gKSxhPy5pbmNsdWRlcygiLyIpfHxhPT09Ii4uInx8YT09PSIuIil0aHJvdyBuZXcgRXJyb3IoIndvcmtkaXJOYW1lIHNob3VsZCBiZSBhIHZhbGlkIGZvbGRlciBuYW1lIik7Zm9yKGh0LmJvb3RDYWxsZWQ9ITA7dWo7KWF3YWl0IHVqO2lmKHQuX2luc3RhbmNlKXRocm93IG5ldyBFcnJvcigiT25seSBhIHNpbmdsZSBXZWJDb250YWluZXIgaW5zdGFuY2UgY2FuIGJlIGJvb3RlZCIpO2xldCByPURzMShlKTt1aj1yLmNhdGNoKCgpPT57fSk7dHJ5e2xldCBpPWF3YWl0IHI7cmV0dXJuIHQuX2luc3RhbmNlPWksaX1maW5hbGx5e3VqPW51bGx9fX07QXMxPTEsJHMxPTIsQkVlPWNsYXNze25hbWU7X3R5cGU7Y29uc3RydWN0b3IoZSxhKXt0aGlzLm5hbWU9ZSx0aGlzLl90eXBlPWF9aXNGaWxlKCl7cmV0dXJuIHRoaXMuX3R5cGU9PT1BczF9aXNEaXJlY3RvcnkoKXtyZXR1cm4gdGhpcy5fdHlwZT09PSRzMX19LFJFZT1jbGFzc3tfYXBpQ2xpZW50O19wYXRoO19vcHRpb25zO19saXN0ZW5lcjtfd3JhcHBlZExpc3RlbmVyO193YXRjaGVyO19jbG9zZWQ9ITE7Y29uc3RydWN0b3IoZSxhLHIsaSl7dGhpcy5fYXBpQ2xpZW50PWUsdGhpcy5fcGF0aD1hLHRoaXMuX29wdGlvbnM9cix0aGlzLl9saXN0ZW5lcj1pLHRoaXMuX2FwaUNsaWVudC5fd2F0Y2hlcnMuYWRkKHRoaXMpLHRoaXMuX3dyYXBwZWRMaXN0ZW5lcj0obyxzKT0+e3RoaXMuX2xpc3RlbmVyJiYhdGhpcy5fY2xvc2VkJiZ0aGlzLl9saXN0ZW5lcihvLHMpfSx0aGlzLl9hcGlDbGllbnQuX2ZzLndhdGNoKHRoaXMuX3BhdGgsdGhpcy5fb3B0aW9ucyxoaih0aGlzLl93cmFwcGVkTGlzdGVuZXIpKS50aGVuKG89PntpZih0aGlzLl93YXRjaGVyPW8sdGhpcy5fY2xvc2VkKXJldHVybiB0aGlzLl90ZWFyZG93bigpfSkuY2F0Y2goY29uc29sZS5lcnJvcil9YXN5bmMgY2xvc2UoKXt0aGlzLl9jbG9zZWR8fCh0aGlzLl9jbG9zZWQ9ITAsdGhpcy5fYXBpQ2xpZW50Ll93YXRjaGVycy5kZWxldGUodGhpcyksYXdhaXQgdGhpcy5fdGVhcmRvd24oKSl9YXN5bmMgX3RlYXJkb3duKCl7YXdhaXQgdGhpcy5fd2F0Y2hlcj8uY2xvc2UoKS5maW5hbGx5KCgpPT57dGhpcy5fd2F0Y2hlcj8uW0ZhLnJlbGVhc2VQcm94eV0oKX0pfX0sSEVlPWNsYXNze291dHB1dDtpbnB1dDtleGl0O19wcm9jZXNzO3N0ZG91dDtzdGRlcnI7Y29uc3RydWN0b3IoZSxhLHIsaSl7dGhpcy5vdXRwdXQ9YSx0aGlzLl9wcm9jZXNzPWUsdGhpcy5pbnB1dD1uZXcgV3JpdGFibGVTdHJlYW0oe3dyaXRlOm89Pnt0aGlzLl9nZXRQcm9jZXNzKCk/LndyaXRlKG8pLmNhdGNoKCgpPT57fSl9fSksdGhpcy5leGl0PXRoaXMuX29uRXhpdCgpLHRoaXMuc3Rkb3V0PXIsdGhpcy5zdGRlcnI9aX1raWxsKCl7dGhpcy5fcHJvY2Vzcz8ua2lsbCgpfXJlc2l6ZShlKXt0aGlzLl9nZXRQcm9jZXNzKCk/LnJlc2l6ZShlKX1hc3luYyBfb25FeGl0KCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9wcm9jZXNzLm9uRXhpdH1maW5hbGx5e3RoaXMuX3Byb2Nlc3M/LltGYS5yZWxlYXNlUHJveHldKCksdGhpcy5fcHJvY2Vzcz1udWxsfX1fZ2V0UHJvY2Vzcygpe3JldHVybiB0aGlzLl9wcm9jZXNzPT1udWxsJiZjb25zb2xlLndhcm4oIlRoaXMgcHJvY2VzcyBhbHJlYWR5IGV4aXRlZCIpLHRoaXMuX3Byb2Nlc3N9fSxxRWU9Y2xhc3N7X2ZzO193YXRjaGVycz1uZXcgU2V0KFtdKTtjb25zdHJ1Y3RvcihlKXt0aGlzLl9mcz1lfXJtKC4uLmUpe3JldHVybiB0aGlzLl9mcy5ybSguLi5lKX1hc3luYyByZWFkRmlsZShlLGEpe3JldHVybiBhd2FpdCB0aGlzLl9mcy5yZWFkRmlsZShlLGEpfWFzeW5jIHJlbmFtZShlLGEpe3JldHVybiBhd2FpdCB0aGlzLl9mcy5yZW5hbWUoZSxhKX1hc3luYyB3cml0ZUZpbGUoZSxhLHIpe2lmKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtsZXQgaT1hLmJ1ZmZlci5zbGljZShhLmJ5dGVPZmZzZXQsYS5ieXRlT2Zmc2V0K2EuYnl0ZUxlbmd0aCk7YT1GYS50cmFuc2ZlcihuZXcgVWludDhBcnJheShpKSxbaV0pfWF3YWl0IHRoaXMuX2ZzLndyaXRlRmlsZShlLGEscil9YXN5bmMgcmVhZGRpcihlLGEpe2xldCByPWF3YWl0IHRoaXMuX2ZzLnJlYWRkaXIoZSxhKTtyZXR1cm4gTnMxKHIpfHxQczEocik/cjpyLm1hcChvPT5uZXcgQkVlKG8ubmFtZSxvWyJTeW1ib2wodHlwZSkiXSkpfWFzeW5jIG1rZGlyKGUsYSl7cmV0dXJuIGF3YWl0IHRoaXMuX2ZzLm1rZGlyKGUsYSl9d2F0Y2goZSxhLHIpe3JldHVybiB0eXBlb2YgYT09ImZ1bmN0aW9uIiYmKHI9YSxhPW51bGwpLG5ldyBSRWUodGhpcyxlLGEscil9YXN5bmMgX3RlYXJkb3duKCl7dGhpcy5fZnNbRmEucmVsZWFzZVByb3h5XSgpLGF3YWl0IFByb21pc2UuYWxsKFsuLi50aGlzLl93YXRjaGVyc10ubWFwKGU9PmUuY2xvc2UoKSkpfX19KTt2YXIgbTUsY090PW4oKCk9PntsT3QoKTttNT1jbGFzcyB0e3N0YXRpYyBzaGFyZWRDb250YWluZXI9bnVsbDtzdGF0aWMgYm9vdFByb21pc2U9bnVsbDtfcmVhZHk9ITE7dHlwZT0id2ViY29udGFpbmVyIjtnZXQgcmVhZHkoKXtyZXR1cm4gdGhpcy5fcmVhZHl9Z2V0IGNvbnRhaW5lcigpe3JldHVybiB0LnNoYXJlZENvbnRhaW5lcn1hc3luYyBpbml0KCl7aWYoISh0aGlzLl9yZWFkeSYmdC5zaGFyZWRDb250YWluZXIpKXtpZih0LmJvb3RQcm9taXNlKXthd2FpdCB0LmJvb3RQcm9taXNlLHRoaXMuX3JlYWR5PSEwO3JldHVybn1pZih0LnNoYXJlZENvbnRhaW5lcil7dGhpcy5fcmVhZHk9ITA7cmV0dXJufWlmKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcj4idSIpdGhyb3cgbmV3IEVycm9yKGBXZWJDb250YWluZXIgcmVxdWlyZXMgU2hhcmVkQXJyYXlCdWZmZXIgd2hpY2ggaXMgbm90IGF2YWlsYWJsZS4gRW5zdXJlIHlvdXIgc2VydmVyIHNlbmRzIHRoZXNlIGhlYWRlcnM6CiAgQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3k6IHNhbWUtb3JpZ2luCiAgQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeTogcmVxdWlyZS1jb3JwYCk7dC5ib290UHJvbWlzZT16SS5ib290KCk7dHJ5e3Quc2hhcmVkQ29udGFpbmVyPWF3YWl0IHQuYm9vdFByb21pc2UsdGhpcy5fcmVhZHk9ITB9Y2F0Y2goZSl7dGhyb3cgdC5ib290UHJvbWlzZT1udWxsLGV9fX1hc3luYyBkZXN0cm95KCl7dC5zaGFyZWRDb250YWluZXImJih0LnNoYXJlZENvbnRhaW5lci50ZWFyZG93bigpLHQuc2hhcmVkQ29udGFpbmVyPW51bGwsdC5ib290UHJvbWlzZT1udWxsLHRoaXMuX3JlYWR5PSExKX1hc3luYyByZWFkRmlsZShlKXtyZXR1cm4gdGhpcy5lbnN1cmVSZWFkeSgpLGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRGaWxlKGUsInV0Zi04Iil9YXN5bmMgd3JpdGVGaWxlKGUsYSl7dGhpcy5lbnN1cmVSZWFkeSgpLGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLndyaXRlRmlsZShlLGEsInV0Zi04Iil9YXN5bmMgcmVhZERpcihlKXtyZXR1cm4gdGhpcy5lbnN1cmVSZWFkeSgpLChhd2FpdCB0aGlzLmNvbnRhaW5lci5mcy5yZWFkZGlyKGUse3dpdGhGaWxlVHlwZXM6ITB9KSkubWFwKHI9Pih7dHlwZTpyLmlzRGlyZWN0b3J5KCk/ImRpcmVjdG9yeSI6ImZpbGUiLG5hbWU6ci5uYW1lLHBhdGg6ZT09PSIvIj9gLyR7ci5uYW1lfWA6YCR7ZX0vJHtyLm5hbWV9YH0pKX1hc3luYyBta2RpcihlKXt0aGlzLmVuc3VyZVJlYWR5KCksYXdhaXQgdGhpcy5jb250YWluZXIuZnMubWtkaXIoZSx7cmVjdXJzaXZlOiEwfSl9YXN5bmMgcm0oZSxhKXt0aGlzLmVuc3VyZVJlYWR5KCksYXdhaXQgdGhpcy5jb250YWluZXIuZnMucm0oZSx7cmVjdXJzaXZlOmE/LnJlY3Vyc2l2ZT8/ITF9KX1hc3luYyBleGlzdHMoZSl7dGhpcy5lbnN1cmVSZWFkeSgpO3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5jb250YWluZXIuZnMucmVhZEZpbGUoZSksITB9Y2F0Y2h7dHJ5e3JldHVybiBhd2FpdCB0aGlzLmNvbnRhaW5lci5mcy5yZWFkZGlyKGUpLCEwfWNhdGNoe3JldHVybiExfX19d2F0Y2goZSxhLHIpe3RoaXMuZW5zdXJlUmVhZHkoKTtsZXQgaT10aGlzLmNvbnRhaW5lci5mcy53YXRjaChlLHtyZWN1cnNpdmU6cj8ucmVjdXJzaXZlPz8hMX0sYSk7cmV0dXJue3N0b3A6KCk9PmkuY2xvc2UoKX19YXN5bmMgc3Bhd24oZSxhPVtdKXt0aGlzLmVuc3VyZVJlYWR5KCk7bGV0IHI9YXdhaXQgdGhpcy5jb250YWluZXIuc3Bhd24oZSxhKTtyZXR1cm57b3V0cHV0OnIub3V0cHV0LGlucHV0OnIuaW5wdXQsZXhpdDpyLmV4aXQsa2lsbDooKT0+ci5raWxsKCl9fWFzeW5jIG1vdW50KGUpe3RoaXMuZW5zdXJlUmVhZHkoKSxhd2FpdCB0aGlzLmNvbnRhaW5lci5tb3VudChlKX1nZXRDb250YWluZXIoKXtyZXR1cm4gdGhpcy5lbnN1cmVSZWFkeSgpLHRoaXMuY29udGFpbmVyfWVuc3VyZVJlYWR5KCl7aWYoIXRoaXMuX3JlYWR5fHwhdGhpcy5jb250YWluZXIpdGhyb3cgbmV3IEVycm9yKCJXZWJDb250YWluZXJFbnZpcm9ubWVudCBub3QgaW5pdGlhbGl6ZWQuIENhbGwgaW5pdCgpIGZpcnN0LiIpfX19KTt2YXIgZE90PW4oKCk9PntjT3QoKX0pO3ZhciBtaj1uKCgpPT57QUZ0KCk7ZE90KCl9KTt2YXIga0ksUWksUnMxLGdqPW4oKCk9PntmZSgpO0JlKCk7RnQoKTtrST1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LFFpPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxSczE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWFjdGlvbmJhciIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdO3ZhciB2PWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgeT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtsZSgpXSxmPVtsZSgpXSxkPVtsZSgpXSxiPVtsZSgpXSxrSSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImN1cnJlbnRCYXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnc9PiJjdXJyZW50QmFyImluIHcsZ2V0Onc9PncuY3VycmVudEJhcixzZXQ6KHcsRSk9Pnt3LmN1cnJlbnRCYXI9RX19LG1ldGFkYXRhOnl9LHMsbCksa0kodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0aW1lUmVtYWluaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4idGltZVJlbWFpbmluZyJpbiB3LGdldDp3PT53LnRpbWVSZW1haW5pbmcsc2V0Oih3LEUpPT57dy50aW1lUmVtYWluaW5nPUV9fSxtZXRhZGF0YTp5fSxjLHUpLGtJKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicHJvZ3Jlc3NQZXJjZW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4icHJvZ3Jlc3NQZXJjZW50ImluIHcsZ2V0Onc9PncucHJvZ3Jlc3NQZXJjZW50LHNldDoodyxFKT0+e3cucHJvZ3Jlc3NQZXJjZW50PUV9fSxtZXRhZGF0YTp5fSxoLGcpLGtJKHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNWaXNpYmxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4iaXNWaXNpYmxlImluIHcsZ2V0Onc9PncuaXNWaXNpYmxlLHNldDoodyxFKT0+e3cuaXNWaXNpYmxlPUV9fSxtZXRhZGF0YTp5fSx4LG0pLGtJKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOnl9LG51bGwsYSksdj1yPWUudmFsdWUseSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp5fSl9c3RhdGljIGRlbW89KCk9PntsZXQgeT16PT56LmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgiLmRlbW8tY29udGFpbmVyIik/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYWN0aW9uYmFyIik7cmV0dXJuIE1gCiAgICAgIDxzdHlsZT4KICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQogICAgICAgIC5kZW1vLWNvbnRlbnQgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRlbnQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0ke2FzeW5jIHo9PntsZXQgUD15KHopO2lmKCFQKXJldHVybjtsZXQgXz1hd2FpdCBQLnNob3coe21lc3NhZ2U6IkZpbGUgY2hhbmdlZCBleHRlcm5hbGx5LiBSZWxvYWQ/Iix0eXBlOiJ3YXJuaW5nIixpY29uOiJsdWNpZGU6YWxlcnRUcmlhbmdsZSIsYWN0aW9uczpbe2lkOiJyZWxvYWQiLGxhYmVsOiJSZWxvYWQiLHByaW1hcnk6ITB9LHtpZDoiaWdub3JlIixsYWJlbDoiSWdub3JlIn1dLHRpbWVvdXQ6e2R1cmF0aW9uOjVlMyxkZWZhdWx0QWN0aW9uSWQ6InJlbG9hZCJ9LGRpc21pc3NpYmxlOiEwfSk7Y29uc29sZS5sb2coIkFjdGlvbiBiYXIgcmVzdWx0OiIsXyl9fT5XYXJuaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHthc3luYyB6PT57bGV0IFA9eSh6KTtpZighUClyZXR1cm47bGV0IF89YXdhaXQgUC5zaG93KHttZXNzYWdlOiJQcm9jZXNzIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAxIix0eXBlOiJlcnJvciIsaWNvbjoibHVjaWRlOnhDaXJjbGUiLGFjdGlvbnM6W3tpZDoicmV0cnkiLGxhYmVsOiJSZXRyeSIscHJpbWFyeTohMH0se2lkOiJkaXNtaXNzIixsYWJlbDoiRGlzbWlzcyJ9XSx0aW1lb3V0OntkdXJhdGlvbjoxZTQsZGVmYXVsdEFjdGlvbklkOiJkaXNtaXNzIn19KTtjb25zb2xlLmxvZygiRXJyb3IgYmFyIHJlc3VsdDoiLF8pfX0+RXJyb3I8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0ke2FzeW5jIHo9PntsZXQgUD15KHopO2lmKCFQKXJldHVybjtsZXQgXz1hd2FpdCBQLnNob3coe21lc3NhZ2U6IlNhdmUgY2hhbmdlcyBiZWZvcmUgY2xvc2luZz8iLHR5cGU6InF1ZXN0aW9uIixpY29uOiJsdWNpZGU6aGVscENpcmNsZSIsYWN0aW9uczpbe2lkOiJzYXZlIixsYWJlbDoiU2F2ZSIscHJpbWFyeTohMH0se2lkOiJkaXNjYXJkIixsYWJlbDoiRGlzY2FyZCJ9LHtpZDoiY2FuY2VsIixsYWJlbDoiQ2FuY2VsIn1dfSk7Y29uc29sZS5sb2coIlF1ZXN0aW9uIGJhciByZXN1bHQ6IixfKX19PlF1ZXN0aW9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgPC9kaXY+CiAgICBgfTtxdWV1ZT1bXTsjZT1RaSh0aGlzLHMsbnVsbCk7Z2V0IGN1cnJlbnRCYXIoKXtyZXR1cm4gdGhpcy4jZX1zZXQgY3VycmVudEJhcih5KXt0aGlzLiNlPXl9I3Q9KFFpKHRoaXMsbCksUWkodGhpcyxjLDApKTtnZXQgdGltZVJlbWFpbmluZygpe3JldHVybiB0aGlzLiN0fXNldCB0aW1lUmVtYWluaW5nKHkpe3RoaXMuI3Q9eX0jYT0oUWkodGhpcyx1KSxRaSh0aGlzLGgsMTAwKSk7Z2V0IHByb2dyZXNzUGVyY2VudCgpe3JldHVybiB0aGlzLiNhfXNldCBwcm9ncmVzc1BlcmNlbnQoeSl7dGhpcy4jYT15fSNyPShRaSh0aGlzLGcpLFFpKHRoaXMseCwhMSkpO2dldCBpc1Zpc2libGUoKXtyZXR1cm4gdGhpcy4jcn1zZXQgaXNWaXNpYmxlKHkpe3RoaXMuI3I9eX10aW1lb3V0SW50ZXJ2YWw9KFFpKHRoaXMsbSksbnVsbCk7Y3VycmVudFJlc29sdmU9bnVsbDtzdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLmFjdGlvbmJhci1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogMGZyOwogICAgICAgIHRyYW5zaXRpb246IGdyaWQtdGVtcGxhdGUtcm93cyAwLjJzIGVhc2Utb3V0OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NiUpIiwiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCJoc2woMCAwJSAyMCUpIil9OwogICAgICB9CgogICAgICA6aG9zdCgudmlzaWJsZSkgLmFjdGlvbmJhci1pdGVtIHsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjsKICAgICAgfQoKICAgICAgLmFjdGlvbmJhci1jb250ZW50IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIDpob3N0KC52aXNpYmxlKSAuYWN0aW9uYmFyLWNvbnRlbnQgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXIgewogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwiaHNsKDAgMCUgMTglKSIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCJoc2woMjEwIDEwMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjFzIGxpbmVhcjsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhci1maWxsLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMzggOTIlIDUwJSkiLCJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXItZmlsbC5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwiaHNsKDAgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXItZmlsbC5xdWVzdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyNzAgNzAlIDUwJSkiLCJoc2woMjcwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtaW4taGVpZ2h0OiAzMnB4OwogICAgICB9CgogICAgICAubWVzc2FnZS1zZWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24uaW5mbyB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDUlKSIsImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAubWVzc2FnZS1pY29uLndhcm5pbmcgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDM4IDkyJSA0NSUpIiwiaHNsKDM4IDkyJSA1NSUpIil9OwogICAgICB9CgogICAgICAubWVzc2FnZS1pY29uLmVycm9yIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwiaHNsKDAgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24ucXVlc3Rpb24gewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNTAlKSIsImhzbCgyNzAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA4NSUpIil9OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLmFjdGlvbnMtc2VjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2Vjb25kYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCJoc2woMCAwJSA3MCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDgwJSkiLCJoc2woMCAwJSAzMCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5zZWNvbmRhcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5MiUpIiwiaHNsKDAgMCUgMTglKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA1MCUpIiwiaHNsKDIxMCAxMDAlIDU1JSkiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQ1JSkiLCJoc2woMjEwIDEwMCUgNTAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeS53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDM4IDkyJSA0NSUpIiwiaHNsKDM4IDkyJSA1MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5Lndhcm5pbmc6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMzggOTIlIDQwJSkiLCJoc2woMzggOTIlIDQ1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsImhzbCgwIDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5LmVycm9yOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgNzAlIDQ1JSkiLCJoc2woMCA3MCUgNTAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeS5xdWVzdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyNzAgNzAlIDUwJSkiLCJoc2woMjcwIDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5LnF1ZXN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNDUlKSIsImhzbCgyNzAgNzAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC5jb3VudGRvd24gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmRpc21pc3MtYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmRpc21pc3MtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsImhzbCgwIDAlIDIyJSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwiaHNsKDAgMCUgNzAlKSIpfTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7bGV0IHk9dGhpcy5jdXJyZW50QmFyLHc9eT8udHlwZXx8ImluZm8iLEU9eT8udGltZW91dCYmdGhpcy50aW1lUmVtYWluaW5nPjA7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbmJhci1pdGVtIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25iYXItY29udGVudCI+CiAgICAgICAgICAke3k/TWAKICAgICAgICAgICAgJHtFP01gCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InByb2dyZXNzLWJhci1maWxsICR7d30iCiAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogJHt0aGlzLnByb2dyZXNzUGVyY2VudH0lIgogICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOiIifQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXNzYWdlLXNlY3Rpb24iPgogICAgICAgICAgICAgICAgJHt5Lmljb24/TWAKICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtZXNzYWdlLWljb24gJHt3fSIKICAgICAgICAgICAgICAgICAgICAuaWNvbj0ke3kuaWNvbn0KICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZT0iMTYiCiAgICAgICAgICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVzc2FnZS10ZXh0Ij4ke3kubWVzc2FnZX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9ucy1zZWN0aW9uIj4KICAgICAgICAgICAgICAgICR7eS5hY3Rpb25zLm1hcChDPT50aGlzLnJlbmRlckFjdGlvbkJ1dHRvbihDLHksRSkpfQogICAgICAgICAgICAgICAgJHt5LmRpc21pc3NpYmxlP01gCiAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzbWlzcy1idXR0b24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMuaGFuZGxlRGlzbWlzcygpfQogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJEaXNtaXNzIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9IGljb25TaXplPSIxNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOiIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyQWN0aW9uQnV0dG9uKHksdyxFKXtsZXQgQz15LnByaW1hcnksej13LnR5cGV8fCJpbmZvIixQPXcudGltZW91dD8uZGVmYXVsdEFjdGlvbklkPT09eS5pZCxfPUUmJlAsJD1NYXRoLmNlaWwodGhpcy50aW1lUmVtYWluaW5nLzFlMyk7cmV0dXJuIE1gCiAgICAgIDxidXR0b24KICAgICAgICBjbGFzcz0iYWN0aW9uLWJ1dHRvbiAke0M/YHByaW1hcnkgJHt6fWA6InNlY29uZGFyeSJ9IgogICAgICAgIEBjbGljaz0keygpPT50aGlzLmhhbmRsZUFjdGlvbih5LmlkLCExKX0KICAgICAgPgogICAgICAgICR7eS5pY29uP01gCiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7eS5pY29ufSBpY29uU2l6ZT0iMTIiPjwvZGVlcy1pY29uPgogICAgICAgIGA6IiJ9CiAgICAgICAgPHNwYW4+JHt5LmxhYmVsfTwvc3Bhbj4KICAgICAgICAke18/TWAKICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudGRvd24iPigkeyR9cyk8L3NwYW4+CiAgICAgICAgYDoiIn0KICAgICAgPC9idXR0b24+CiAgICBgfWFzeW5jIHNob3coeSl7cmV0dXJuIG5ldyBQcm9taXNlKHc9Pnt0aGlzLnF1ZXVlLnB1c2goe29wdGlvbnM6eSxyZXNvbHZlOnd9KSx0aGlzLmN1cnJlbnRCYXJ8fHRoaXMucHJvY2Vzc1F1ZXVlKCl9KX1kaXNtaXNzKCl7dGhpcy5oYW5kbGVEaXNtaXNzKCl9Y2xlYXJRdWV1ZSgpe2ZvcihsZXQgeSBvZiB0aGlzLnF1ZXVlKXkucmVzb2x2ZSh7YWN0aW9uSWQ6ImRpc21pc3NlZCIsdGltZWRPdXQ6ITF9KTt0aGlzLnF1ZXVlPVtdfWFzeW5jIGhpZGVDdXJyZW50QmFyKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJ2aXNpYmxlIiksdGhpcy5pc1Zpc2libGU9ITEsYXdhaXQgbmV3IFByb21pc2UoeT0+c2V0VGltZW91dCh5LDIyMCkpLHRoaXMuY3VycmVudEJhcj1udWxsLHRoaXMuY3VycmVudFJlc29sdmU9bnVsbH1hc3luYyBwcm9jZXNzUXVldWUoKXtpZih0aGlzLnF1ZXVlLmxlbmd0aD09PTApe3RoaXMuaGlkZUN1cnJlbnRCYXIoKTtyZXR1cm59bGV0IHk9dGhpcy5xdWV1ZS5zaGlmdCgpO3RoaXMuY3VycmVudEJhcj15Lm9wdGlvbnMsdGhpcy5jdXJyZW50UmVzb2x2ZT15LnJlc29sdmUsdGhpcy5pc1Zpc2libGU9ITAsYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmNsYXNzTGlzdC5hZGQoInZpc2libGUiKX0pLHkub3B0aW9ucy50aW1lb3V0JiZ0aGlzLnN0YXJ0VGltZW91dCh5Lm9wdGlvbnMudGltZW91dC5kdXJhdGlvbix5Lm9wdGlvbnMudGltZW91dC5kZWZhdWx0QWN0aW9uSWQpfXN0YXJ0VGltZW91dCh5LHcpe3RoaXMudGltZVJlbWFpbmluZz15LHRoaXMucHJvZ3Jlc3NQZXJjZW50PTEwMDtsZXQgRT1EYXRlLm5vdygpLEM9NTA7dGhpcy50aW1lb3V0SW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9PntsZXQgej1EYXRlLm5vdygpLUU7dGhpcy50aW1lUmVtYWluaW5nPU1hdGgubWF4KDAseS16KSx0aGlzLnByb2dyZXNzUGVyY2VudD10aGlzLnRpbWVSZW1haW5pbmcveSoxMDAsdGhpcy50aW1lUmVtYWluaW5nPD0wJiYodGhpcy5jbGVhclRpbWVvdXRJbnRlcnZhbCgpLHRoaXMuaGFuZGxlQWN0aW9uKHcsITApKX0sQyl9Y2xlYXJUaW1lb3V0SW50ZXJ2YWwoKXt0aGlzLnRpbWVvdXRJbnRlcnZhbCYmKGNsZWFySW50ZXJ2YWwodGhpcy50aW1lb3V0SW50ZXJ2YWwpLHRoaXMudGltZW91dEludGVydmFsPW51bGwpfWhhbmRsZUFjdGlvbih5LHcpe3RoaXMuY2xlYXJUaW1lb3V0SW50ZXJ2YWwoKSx0aGlzLmN1cnJlbnRSZXNvbHZlJiZ0aGlzLmN1cnJlbnRSZXNvbHZlKHthY3Rpb25JZDp5LHRpbWVkT3V0Ond9KSx0aGlzLnByb2Nlc3NRdWV1ZSgpfWhhbmRsZURpc21pc3MoKXt0aGlzLmhhbmRsZUFjdGlvbigiZGlzbWlzc2VkIiwhMSl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY2xlYXJUaW1lb3V0SW50ZXJ2YWwoKX1zdGF0aWN7UWkocixhKX19O3JldHVybiB2PXJ9KSgpfSk7dmFyIHhqLFVFZT1uKCgpPT57eGo9Y2xhc3N7dGFicz1uZXcgTWFwO3RhYkNvdW50ZXI9MDt4dGVybUJ1bmRsZT1udWxsO3h0ZXJtRml0QWRkb25CdW5kbGU9bnVsbDtzZXRYdGVybU1vZHVsZXMoZSxhKXt0aGlzLnh0ZXJtQnVuZGxlPWUsdGhpcy54dGVybUZpdEFkZG9uQnVuZGxlPWF9Z2VuZXJhdGVUYWJJZCgpe3JldHVybiB0aGlzLnRhYkNvdW50ZXIrKyxgdGVybWluYWwtJHt0aGlzLnRhYkNvdW50ZXJ9LSR7RGF0ZS5ub3coKX1gfWdldERlZmF1bHRMYWJlbChlLGEpe3N3aXRjaChlKXtjYXNlInNoZWxsIjpyZXR1cm4iYmFzaCI7Y2FzZSJzY3JpcHQiOnJldHVybiBhPy5zY3JpcHROYW1lfHwic2NyaXB0IjtjYXNlInBhY2thZ2UtdXBkYXRlIjpyZXR1cm4gYT8ucGFja2FnZU5hbWU/YHVwZGF0ZSAke2EucGFja2FnZU5hbWV9YDoidXBkYXRlIjtjYXNlImN1c3RvbSI6cmV0dXJuIGE/LmNvbW1hbmR8fCJwcm9jZXNzIjtkZWZhdWx0OnJldHVybiJ0ZXJtaW5hbCJ9fWdldERlZmF1bHRJY29uKGUpe3N3aXRjaChlKXtjYXNlInNoZWxsIjpyZXR1cm4ibHVjaWRlOnRlcm1pbmFsIjtjYXNlInNjcmlwdCI6cmV0dXJuImx1Y2lkZTpwbGF5IjtjYXNlInBhY2thZ2UtdXBkYXRlIjpyZXR1cm4ibHVjaWRlOnBhY2thZ2VDaGVjayI7Y2FzZSJjdXN0b20iOnJldHVybiJsdWNpZGU6Y29kZSI7ZGVmYXVsdDpyZXR1cm4ibHVjaWRlOnRlcm1pbmFsIn19Z2V0VGVybWluYWxUaGVtZShlKXtyZXR1cm4gZT97YmFja2dyb3VuZDoiI2ZmZmZmZiIsZm9yZWdyb3VuZDoiIzMzMzMzMyIsY3Vyc29yOiIjMzMzMzMzIixjdXJzb3JBY2NlbnQ6IiNmZmZmZmYiLHNlbGVjdGlvbjoicmdiYSgwLCAwLCAwLCAwLjIpIixibGFjazoiIzAwMDAwMCIscmVkOiIjY2QzMTMxIixncmVlbjoiIzAwYmMwMCIseWVsbG93OiIjOTQ5ODAwIixibHVlOiIjMDQ1MWE1IixtYWdlbnRhOiIjYmMwNWJjIixjeWFuOiIjMDU5OGJjIix3aGl0ZToiIzU1NTU1NSIsYnJpZ2h0QmxhY2s6IiM2NjY2NjYiLGJyaWdodFJlZDoiI2NkMzEzMSIsYnJpZ2h0R3JlZW46IiMxNGNlMTQiLGJyaWdodFllbGxvdzoiI2I1YmEwMCIsYnJpZ2h0Qmx1ZToiIzA0NTFhNSIsYnJpZ2h0TWFnZW50YToiI2JjMDViYyIsYnJpZ2h0Q3lhbjoiIzA1OThiYyIsYnJpZ2h0V2hpdGU6IiNhNWE1YTUifTp7YmFja2dyb3VuZDoiIzAwMDAwMCIsZm9yZWdyb3VuZDoiI2ZmZmZmZiIsY3Vyc29yOiIjZmZmZmZmIixjdXJzb3JBY2NlbnQ6IiMwMDAwMDAiLHNlbGVjdGlvbjoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIn19Y3JlYXRlVGFiKGUsYSl7aWYoIXRoaXMueHRlcm1CdW5kbGV8fCF0aGlzLnh0ZXJtRml0QWRkb25CdW5kbGUpdGhyb3cgbmV3IEVycm9yKCJUZXJtaW5hbFRhYk1hbmFnZXI6IHh0ZXJtIG1vZHVsZXMgbm90IGluaXRpYWxpemVkLiBDYWxsIHNldFh0ZXJtTW9kdWxlcygpIGZpcnN0LiIpO2xldCByPXRoaXMuZ2VuZXJhdGVUYWJJZCgpLGk9ZS50eXBlLG89bmV3IHRoaXMueHRlcm1CdW5kbGUuVGVybWluYWwoe2NvbnZlcnRFb2w6ITAsY3Vyc29yQmxpbms6ITAsdGhlbWU6dGhpcy5nZXRUZXJtaW5hbFRoZW1lKGEpLGZvbnRGYW1pbHk6J01lbmxvLCBNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZScsZm9udFNpemU6MTMsbGluZUhlaWdodDoxLjJ9KSxzPW5ldyB0aGlzLnh0ZXJtRml0QWRkb25CdW5kbGUuRml0QWRkb247by5sb2FkQWRkb24ocyk7bGV0IGw9e2lkOnIsbGFiZWw6ZS5sYWJlbHx8dGhpcy5nZXREZWZhdWx0TGFiZWwoaSxlLm1ldGFkYXRhKSxpY29uTmFtZTplLmljb25OYW1lfHx0aGlzLmdldERlZmF1bHRJY29uKGkpLHR5cGU6aSxjbG9zZWFibGU6ZS5jbG9zZWFibGU/P2khPT0ic2hlbGwiLHRlcm1pbmFsOm8sZml0QWRkb246cyxwcm9jZXNzOm51bGwsaW5wdXRXcml0ZXI6bnVsbCxleGl0ZWQ6ITEsZXhpdENvZGU6bnVsbCxjcmVhdGVkQXQ6RGF0ZS5ub3coKSxtZXRhZGF0YTplLm1ldGFkYXRhfTtyZXR1cm4gdGhpcy50YWJzLnNldChyLGwpLGx9Z2V0VGFiKGUpe3JldHVybiB0aGlzLnRhYnMuZ2V0KGUpfWdldEFsbFRhYnMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRhYnMudmFsdWVzKCkpLnNvcnQoKGUsYSk9PmUuY3JlYXRlZEF0LWEuY3JlYXRlZEF0KX1nZXRUYWJDb3VudCgpe3JldHVybiB0aGlzLnRhYnMuc2l6ZX1oYXNUYWIoZSl7cmV0dXJuIHRoaXMudGFicy5oYXMoZSl9Y2xvc2VUYWIoZSl7bGV0IGE9dGhpcy50YWJzLmdldChlKTtpZighYSlyZXR1cm4hMTtpZihhLnByb2Nlc3MmJiFhLmV4aXRlZCl0cnl7YS5wcm9jZXNzLmtpbGwoKX1jYXRjaChyKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBraWxsIHByb2Nlc3M6IixyKX10cnl7YS50ZXJtaW5hbC5kaXNwb3NlKCl9Y2F0Y2gocil7Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZGlzcG9zZSB0ZXJtaW5hbDoiLHIpfXJldHVybiB0aGlzLnRhYnMuZGVsZXRlKGUpLCEwfXJlbmFtZVRhYihlLGEpe2xldCByPXRoaXMudGFicy5nZXQoZSk7cmV0dXJuIHI/KHIubGFiZWw9YSwhMCk6ITF9bWFya1RhYkV4aXRlZChlLGEpe2xldCByPXRoaXMudGFicy5nZXQoZSk7ciYmKHIuZXhpdGVkPSEwLHIuZXhpdENvZGU9YSl9c2V0VGFiUHJvY2VzcyhlLGEscil7bGV0IGk9dGhpcy50YWJzLmdldChlKTtpJiYoaS5wcm9jZXNzPWEsaS5pbnB1dFdyaXRlcj1yKX11cGRhdGVBbGxUaGVtZXMoZSl7bGV0IGE9dGhpcy5nZXRUZXJtaW5hbFRoZW1lKGUpO2ZvcihsZXQgciBvZiB0aGlzLnRhYnMudmFsdWVzKCkpci50ZXJtaW5hbC5vcHRpb25zLnRoZW1lPWF9ZGlzcG9zZUFsbCgpe2ZvcihsZXRbZV1vZiB0aGlzLnRhYnMpdGhpcy5jbG9zZVRhYihlKTt0aGlzLnRhYnMuY2xlYXIoKX19fSk7dmFyIHVPdD17fTtldCh1T3Qse0RlZXNXb3Jrc3BhY2VUZXJtaW5hbDooKT0+Zk90fSk7dmFyIGNzLHEyLGZPdCxTST1uKCgpPT57ZmUoKTtTdCgpO0JlKCk7bWooKTtGdCgpO2dqKCk7VUVlKCk7ZWMoKTtjcz1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LHEyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxmT3Q9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbCIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdLEUsQz1bXSx6PVtdLFAsXz1bXSwkPVtdO3ZhciBIPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgTD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOk9iamVjdH0pXSxmPVtEKCldLGQ9W0QoKV0sYj1bRCh7dHlwZTpOdW1iZXJ9KV0sdj1bRCh7dHlwZTpCb29sZWFufSldLEU9W2xlKCldLFA9W2xlKCldLGNzKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXhlY3V0aW9uRW52aXJvbm1lbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJleGVjdXRpb25FbnZpcm9ubWVudCJpbiBrLGdldDprPT5rLmV4ZWN1dGlvbkVudmlyb25tZW50LHNldDooayxOKT0+e2suZXhlY3V0aW9uRW52aXJvbm1lbnQ9Tn19LG1ldGFkYXRhOkx9LHMsbCksY3ModGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZXR1cENvbW1hbmQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJzZXR1cENvbW1hbmQiaW4gayxnZXQ6az0+ay5zZXR1cENvbW1hbmQsc2V0OihrLE4pPT57ay5zZXR1cENvbW1hbmQ9Tn19LG1ldGFkYXRhOkx9LGMsdSksY3ModGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJlbnZpcm9ubWVudFZhcmlhYmxlcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImVudmlyb25tZW50VmFyaWFibGVzImluIGssZ2V0Oms9PmsuZW52aXJvbm1lbnRWYXJpYWJsZXMsc2V0OihrLE4pPT57ay5lbnZpcm9ubWVudFZhcmlhYmxlcz1OfX0sbWV0YWRhdGE6TH0saCxnKSxjcyh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRhYkJhcldpZHRoIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4idGFiQmFyV2lkdGgiaW4gayxnZXQ6az0+ay50YWJCYXJXaWR0aCxzZXQ6KGssTik9PntrLnRhYkJhcldpZHRoPU59fSxtZXRhZGF0YTpMfSx4LG0pLGNzKHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hvd1RhYkJhciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InNob3dUYWJCYXIiaW4gayxnZXQ6az0+ay5zaG93VGFiQmFyLHNldDooayxOKT0+e2suc2hvd1RhYkJhcj1OfX0sbWV0YWRhdGE6TH0seSx3KSxjcyh0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRhYnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJ0YWJzImluIGssZ2V0Oms9PmsudGFicyxzZXQ6KGssTik9PntrLnRhYnM9Tn19LG1ldGFkYXRhOkx9LEMseiksY3ModGhpcyxudWxsLFAse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhY3RpdmVUYWJJZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImFjdGl2ZVRhYklkImluIGssZ2V0Oms9PmsuYWN0aXZlVGFiSWQsc2V0OihrLE4pPT57ay5hY3RpdmVUYWJJZD1OfX0sbWV0YWRhdGE6TH0sXywkKSxjcyhudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpMfSxudWxsLGEpLEg9cj1lLnZhbHVlLEwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TH0pfXN0YXRpYyBkZW1vPSgpPT57bGV0IEw9bmV3IG01O3JldHVybiBNYDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbCAuZXhlY3V0aW9uRW52aXJvbm1lbnQ9JHtMfT48L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsPmB9O3N0YXRpYyBkZW1vR3JvdXA9IldvcmtzcGFjZSI7cmVzaXplT2JzZXJ2ZXI7dGFiTWFuYWdlcjsjZT1xMih0aGlzLHMsbnVsbCk7Z2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCl7cmV0dXJuIHRoaXMuI2V9c2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KEwpe3RoaXMuI2U9TH0jdD0ocTIodGhpcyxsKSxxMih0aGlzLGMsIiIpKTtnZXQgc2V0dXBDb21tYW5kKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHNldHVwQ29tbWFuZChMKXt0aGlzLiN0PUx9I2E9KHEyKHRoaXMsdSkscTIodGhpcyxoLHt9KSk7Z2V0IGVudmlyb25tZW50VmFyaWFibGVzKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGVudmlyb25tZW50VmFyaWFibGVzKEwpe3RoaXMuI2E9TH0jcj0ocTIodGhpcyxnKSxxMih0aGlzLHgsMTYwKSk7Z2V0IHRhYkJhcldpZHRoKCl7cmV0dXJuIHRoaXMuI3J9c2V0IHRhYkJhcldpZHRoKEwpe3RoaXMuI3I9TH0jaT0ocTIodGhpcyxtKSxxMih0aGlzLHksITApKTtnZXQgc2hvd1RhYkJhcigpe3JldHVybiB0aGlzLiNpfXNldCBzaG93VGFiQmFyKEwpe3RoaXMuI2k9TH0jbz0ocTIodGhpcyx3KSxxMih0aGlzLEMsW10pKTtnZXQgdGFicygpe3JldHVybiB0aGlzLiNvfXNldCB0YWJzKEwpe3RoaXMuI289TH0jcz0ocTIodGhpcyx6KSxxMih0aGlzLF8sbnVsbCkpO2dldCBhY3RpdmVUYWJJZCgpe3JldHVybiB0aGlzLiNzfXNldCBhY3RpdmVUYWJJZChMKXt0aGlzLiNzPUx9dGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbj0ocTIodGhpcywkKSxudWxsKTtpc0JyaWdodD0hMTt0ZXJtaW5hbEFjdGlvbmJhcj1udWxsO2Vudmlyb25tZW50RGVmZXJyZWQ9bmV3IEF0LnNtYXJ0cHJvbWlzZS5EZWZlcnJlZDtlbnZpcm9ubWVudFByb21pc2U9dGhpcy5lbnZpcm9ubWVudERlZmVycmVkLnByb21pc2U7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudGFiTWFuYWdlcj1uZXcgeGosdGhpcy5yZXNpemVPYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9Pnt0aGlzLmhhbmRsZVJlc2l6ZSgpfSl9c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgICNhY3RpdmUtdGVybWluYWwtY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgZGVlcy1hY3Rpb25iYXIgewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAvKiBUYWIgYmFyIG9uIHRoZSByaWdodCBzaWRlICovCiAgICAgIC50YWItYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnRhYi1iYXItaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwiaHNsKDAgMCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1iYXItdGl0bGUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLnRhYi1iYXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnRhYi1hY3Rpb24gewogICAgICAgIHdpZHRoOiAyMnB4OwogICAgICAgIGhlaWdodDogMjJweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAudGFiLWFjdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbGlzdCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQ1JSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAudGVybWluYWwtdGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyNSUpIiwiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgOTUlKSIsImhzbCgyMTAgMzAlIDE1JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDAlKSIsImhzbCgyMTAgMTAwJSA3MCUpIil9OwogICAgICB9CgogICAgICAudGVybWluYWwtdGFiLmV4aXRlZCB7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAudGFiLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGFiLWljb24ucnVubmluZyB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMTQyIDcwJSA0MCUpIiwiaHNsKDE0MiA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1sYWJlbCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMXB4IDVweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmV4aXQtYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgxNDIgNzAlIDkwJSkiLCJoc2woMTQyIDMwJSAyMCUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDE0MiA3MCUgMzUlKSIsImhzbCgxNDIgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgNzAlIDkzJSkiLCJoc2woMCAzMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDcwJSA0NSUpIiwiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2UgewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWI6aG92ZXIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICB9CgogICAgICAudGFiLWNsb3NlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCJoc2woMCAwJSAyNSUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIHh0ZXJtLmpzIHN0eWxlcyAqLwogICAgICAueHRlcm0gewogICAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2xpZ2EnIDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAueHRlcm0uZm9jdXMsCiAgICAgIC54dGVybTpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXJzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0taGVscGVyLXRleHRhcmVhIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIHotaW5kZXg6IC01OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzMzMzMzMyIsIiNmZmZmZmYiKX07CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CgogICAgICAueHRlcm0gLmNvbXBvc2l0aW9uLXZpZXcuYWN0aXZlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS12aWV3cG9ydCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gY2FudmFzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tc2Nyb2xsLWFyZWEgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWNoYXItbWVhc3VyZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAueHRlcm0gewogICAgICAgIGN1cnNvcjogdGV4dDsKICAgICAgfQoKICAgICAgLnh0ZXJtLmVuYWJsZS1tb3VzZS1ldmVudHMgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLnh0ZXJtLnh0ZXJtLWN1cnNvci1wb2ludGVyIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC54dGVybS5jb2x1bW4tc2VsZWN0LmZvY3VzIHsKICAgICAgICBjdXJzb3I6IGNyb3NzaGFpcjsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1hY2Nlc3NpYmlsaXR5LAogICAgICAueHRlcm0gLnh0ZXJtLW1lc3NhZ2UgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAueHRlcm0gLmxpdmUtcmVnaW9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogLTk5OTlweDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC54dGVybS1kaW0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLnh0ZXJtLXVuZGVybGluZSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe2xldCBMPXRoaXMuYWN0aXZlVGFiSWQ/dGhpcy50YWJNYW5hZ2VyLmdldFRhYih0aGlzLmFjdGl2ZVRhYklkKTpudWxsO3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgIDwhLS0gTWFpbiB0ZXJtaW5hbCBhcmVhIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWNvbnRlbnQiPgogICAgICAgICAgJHtMP01gCiAgICAgICAgICAgIDxkaXYgaWQ9ImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiPjwvZGl2PgogICAgICAgICAgYDpNYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6dGVybWluYWwifSBpY29uU2l6ZT0iMzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDxzcGFuPk5vIHRlcm1pbmFsIG9wZW48L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYH0KICAgICAgICAgIDxkZWVzLWFjdGlvbmJhcj48L2RlZXMtYWN0aW9uYmFyPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFZlcnRpY2FsIHRhYiBiYXIgb24gdGhlIHJpZ2h0IC0tPgogICAgICAgICR7dGhpcy5zaG93VGFiQmFyP01gCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItYmFyIiBzdHlsZT0id2lkdGg6ICR7dGhpcy50YWJCYXJXaWR0aH1weCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1iYXItaGVhZGVyIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFiLWJhci10aXRsZSI+VGVybWluYWxzPC9zcGFuPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1iYXItYWN0aW9ucyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItYWN0aW9uIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUFkZFRhYn0gdGl0bGU9Ik5ldyBUZXJtaW5hbCI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnBsdXMifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWxpc3QiPgogICAgICAgICAgICAgICR7dGhpcy50YWJzLm1hcChrPT5NYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0idGVybWluYWwtdGFiICR7ay5pZD09PXRoaXMuYWN0aXZlVGFiSWQ/ImFjdGl2ZSI6IiJ9ICR7ay5leGl0ZWQ/ImV4aXRlZCI6IiJ9IgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5zd2l0Y2hUb1RhYihrLmlkKX0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgICAgICAgIC5pY29uPSR7ay5pY29uTmFtZX0KICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZT0iMTQiCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRhYi1pY29uICR7ay5wcm9jZXNzJiYhay5leGl0ZWQ/InJ1bm5pbmciOiIifSIKICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFiLWxhYmVsIj4ke2subGFiZWx9PC9zcGFuPgogICAgICAgICAgICAgICAgICAke2suZXhpdGVkP01gCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImV4aXQtYmFkZ2UgJHtrLmV4aXRDb2RlPT09MD8ic3VjY2VzcyI6ImVycm9yIn0iPgogICAgICAgICAgICAgICAgICAgICAgJHtrLmV4aXRDb2RlfQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICAgICAgJHtrLmNsb3NlYWJsZT9NYAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItY2xvc2UiIEBjbGljaz0ke049PnRoaXMuaGFuZGxlVGFiQ2xvc2UoTixrLmlkKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0gaWNvblNpemU9IjEyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7bGV0IEw9YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7dGhpcy5pc0JyaWdodD1MLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW4sdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uPUwudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoVD0+e3RoaXMuaXNCcmlnaHQ9VCx0aGlzLnRhYk1hbmFnZXIudXBkYXRlQWxsVGhlbWVzKFQpfSk7bGV0IGs9SDIuZ2V0SW5zdGFuY2UoKSxbTixTXT1hd2FpdCBQcm9taXNlLmFsbChbay5sb2FkWHRlcm0oKSxrLmxvYWRYdGVybUZpdEFkZG9uKCldKTt0aGlzLnRhYk1hbmFnZXIuc2V0WHRlcm1Nb2R1bGVzKE4sUyksYXdhaXQgdGhpcy5jcmVhdGVTaGVsbFRhYigpfWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2xldCBMPXRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTtMJiZ0aGlzLnJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShMKSx0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24mJih0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb249bnVsbCksdGhpcy50YWJNYW5hZ2VyLmRpc3Bvc2VBbGwoKSxhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfWFzeW5jIGhhbmRsZUFkZFRhYigpe2F3YWl0IHRoaXMuY3JlYXRlU2hlbGxUYWIoKX1oYW5kbGVUYWJDbG9zZShMLGspe0wuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jbG9zZVRhYihrKX1zd2l0Y2hUb1RhYihMKXtpZihMPT09dGhpcy5hY3RpdmVUYWJJZClyZXR1cm47bGV0IGs9dGhpcy50YWJNYW5hZ2VyLmdldFRhYihMKTtpZighaylyZXR1cm47bGV0IE49dGhpcy5hY3RpdmVUYWJJZDt0aGlzLmFjdGl2ZVRhYklkJiZ0aGlzLmRldGFjaEFjdGl2ZVRlcm1pbmFsKCksdGhpcy5hY3RpdmVUYWJJZD1MLHRoaXMudGFicz10aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpLHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+e3RoaXMuYXR0YWNoVGVybWluYWxUb0NvbnRhaW5lcihrKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc3dpdGNoZWQiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwLGRldGFpbDp7dGFiSWQ6TCxwcmV2aW91c1RhYklkOk59fSkpfSl9ZGV0YWNoQWN0aXZlVGVybWluYWwoKXtsZXQgTD10aGlzLnNoYWRvd1Jvb3Q/LmdldEVsZW1lbnRCeUlkKCJhY3RpdmUtdGVybWluYWwtY29udGFpbmVyIik7TCYmKEwuaW5uZXJIVE1MPSIiKX1hdHRhY2hUZXJtaW5hbFRvQ29udGFpbmVyKEwpe2xldCBrPXRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTtrJiYodGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGspLGsuaW5uZXJIVE1MPSIiLEwudGVybWluYWwub3BlbihrKSxMLmZpdEFkZG9uLmZpdCgpLEwudGVybWluYWwuZm9jdXMoKSl9aGFuZGxlUmVzaXplKCl7aWYodGhpcy5hY3RpdmVUYWJJZCl7bGV0IEw9dGhpcy50YWJNYW5hZ2VyLmdldFRhYih0aGlzLmFjdGl2ZVRhYklkKTtMJiZMLmZpdEFkZG9uLmZpdCgpfX1hc3luYyBzcGF3blByb2Nlc3NGb3JUYWIoTCxrLE49W10pe2lmKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXtMLnRlcm1pbmFsLndyaXRlKCJceDFCWzMxbSIpLEwudGVybWluYWwud3JpdGUoYFx1Mjc0QyBObyBleGVjdXRpb24gZW52aXJvbm1lbnQgYXZhaWxhYmxlLlxyCmApLEwudGVybWluYWwud3JpdGUoIlx4MUJbMG0iKTtyZXR1cm59dHJ5e3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHl8fChMLnRlcm1pbmFsLndyaXRlKGBJbml0aWFsaXppbmcgZW52aXJvbm1lbnQuLi5ccgpgKSxhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LmluaXQoKSk7bGV0IFM9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bihrLE4pO1Mub3V0cHV0LnBpcGVUbyhuZXcgV3JpdGFibGVTdHJlYW0oe3dyaXRlOlI9PntMLnRlcm1pbmFsLndyaXRlKFIpfX0pKTtsZXQgVD1TLmlucHV0LmdldFdyaXRlcigpO0wudGVybWluYWwub25EYXRhKFI9PntULndyaXRlKFIpfSksdGhpcy50YWJNYW5hZ2VyLnNldFRhYlByb2Nlc3MoTC5pZCxTLFQpLHRoaXMudGFicz10aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpLFMuZXhpdC50aGVuKFI9Pnt0aGlzLmhhbmRsZVByb2Nlc3NFeGl0KEwuaWQsUil9KX1jYXRjaChTKXtMLnRlcm1pbmFsLndyaXRlKCJceDFCWzMxbSIpLEwudGVybWluYWwud3JpdGUoYFx1Mjc0QyBGYWlsZWQgdG8gc3Bhd24gcHJvY2VzczogJHtTfVxyCmApLEwudGVybWluYWwud3JpdGUoIlx4MUJbMG0iKSxjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gc3Bhd24gcHJvY2VzczoiLFMpfX1oYW5kbGVQcm9jZXNzRXhpdChMLGspe2xldCBOPXRoaXMudGFiTWFuYWdlci5nZXRUYWIoTCk7aWYoIU4pcmV0dXJuO3RoaXMudGFiTWFuYWdlci5tYXJrVGFiRXhpdGVkKEwsayk7bGV0IFM9az09PTA/YFxyClx4MUJbMzJtW1Byb2Nlc3MgY29tcGxldGVkIHN1Y2Nlc3NmdWxseV1ceDFCWzBtXHIKYDpgXHIKXHgxQlszMW1bUHJvY2VzcyBleGl0ZWQgd2l0aCBjb2RlICR7a31dXHgxQlswbVxyCmA7Ti50ZXJtaW5hbC53cml0ZShTKSx0aGlzLnRhYnM9dGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJwcm9jZXNzLWNvbXBsZXRlIix7YnViYmxlczohMCxjb21wb3NlZDohMCxkZXRhaWw6e3RhYklkOkwsZXhpdENvZGU6a319KSksTi5jbG9zZWFibGUmJnRoaXMuc2hvd0V4aXRlZFRhYkFjdGlvbmJhcihMLE4ubGFiZWwsayl9YXN5bmMgc2hvd0V4aXRlZFRhYkFjdGlvbmJhcihMLGssTil7bGV0IFM9Tj09PTA7KGF3YWl0IHRoaXMuc2hvd0FjdGlvbmJhcih7bWVzc2FnZTpTP2AiJHtrfSIgY29tcGxldGVkLiBDbG9zZSB0YWI/YDpgIiR7a30iIGV4aXRlZCAoY29kZSAke059KS4gQ2xvc2UgdGFiP2AsdHlwZTpTPyJpbmZvIjoid2FybmluZyIsaWNvbjpTPyJsdWNpZGU6Y2hlY2tDaXJjbGUiOiJsdWNpZGU6YWxlcnRUcmlhbmdsZSIsYWN0aW9uczpbe2lkOiJjbG9zZSIsbGFiZWw6IkNsb3NlIFRhYiIscHJpbWFyeTohMH0se2lkOiJrZWVwIixsYWJlbDoiS2VlcCBPcGVuIn1dLHRpbWVvdXQ6e2R1cmF0aW9uOjFlNCxkZWZhdWx0QWN0aW9uSWQ6ImNsb3NlIn0sZGlzbWlzc2libGU6ITB9KSkuYWN0aW9uSWQ9PT0iY2xvc2UiJiZ0aGlzLmNsb3NlVGFiKEwpfWFzeW5jIGNyZWF0ZVNoZWxsVGFiKEwpe2xldCBrPXRoaXMudGFiTWFuYWdlci5jcmVhdGVUYWIoe3R5cGU6InNoZWxsIixsYWJlbDpMfHxgYmFzaCAke3RoaXMudGFiTWFuYWdlci5nZXRUYWJDb3VudCgpKzF9YCxjbG9zZWFibGU6dGhpcy50YWJNYW5hZ2VyLmdldFRhYkNvdW50KCk+MH0sdGhpcy5pc0JyaWdodCk7cmV0dXJuIHRoaXMudGFicz10aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpLHRoaXMuc3dpdGNoVG9UYWIoay5pZCksYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSxhd2FpdCB0aGlzLnNwYXduUHJvY2Vzc0ZvclRhYihrLCJqc2giKSx0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiQ291bnQoKT09PTEmJnRoaXMuc2V0dXBDb21tYW5kJiYoYXdhaXQgdGhpcy53YWl0Rm9yUHJvbXB0KGsudGVybWluYWwsIn4vIiksay5pbnB1dFdyaXRlciYmay5pbnB1dFdyaXRlci53cml0ZSh0aGlzLnNldHVwQ29tbWFuZCkpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jcmVhdGVkIix7YnViYmxlczohMCxjb21wb3NlZDohMCxkZXRhaWw6e3RhYklkOmsuaWR9fSkpLGsuaWR9YXN5bmMgY3JlYXRlUHJvY2Vzc1RhYihMKXtsZXQgaz10aGlzLnRhYk1hbmFnZXIuY3JlYXRlVGFiKEwsdGhpcy5pc0JyaWdodCk7cmV0dXJuIHRoaXMudGFicz10aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpLEwuc3dpdGNoVG9UYWIhPT0hMSYmdGhpcy5zd2l0Y2hUb1RhYihrLmlkKSxhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLEwuY29tbWFuZCYmYXdhaXQgdGhpcy5zcGF3blByb2Nlc3NGb3JUYWIoayxMLmNvbW1hbmQsTC5hcmdzKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY3JlYXRlZCIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITAsZGV0YWlsOnt0YWJJZDprLmlkfX0pKSxrLmlkfWdldEFjdGl2ZVRhYigpe3JldHVybiB0aGlzLmFjdGl2ZVRhYklkJiZ0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRoaXMuYWN0aXZlVGFiSWQpfHxudWxsfWdldFRhYnMoKXtyZXR1cm4gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKX1zZWxlY3RUYWIoTCl7cmV0dXJuIHRoaXMudGFiTWFuYWdlci5oYXNUYWIoTCk/KHRoaXMuc3dpdGNoVG9UYWIoTCksITApOiExfWNsb3NlVGFiKEwpe2xldCBrPXRoaXMudGFiTWFuYWdlci5nZXRUYWIoTCk7aWYoIWt8fCFrLmNsb3NlYWJsZSlyZXR1cm4hMTtpZihMPT09dGhpcy5hY3RpdmVUYWJJZCl7bGV0IE49dGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKSxTPU4uZmluZEluZGV4KFI9PlIuaWQ9PT1MKSxUPU5bUysxXXx8TltTLTFdO1Q/dGhpcy5zd2l0Y2hUb1RhYihULmlkKToodGhpcy5hY3RpdmVUYWJJZD1udWxsLHRoaXMuZGV0YWNoQWN0aXZlVGVybWluYWwoKSl9cmV0dXJuIHRoaXMudGFiTWFuYWdlci5jbG9zZVRhYihMKSx0aGlzLnRhYnM9dGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY2xvc2VkIix7YnViYmxlczohMCxjb21wb3NlZDohMCxkZXRhaWw6e3RhYklkOkx9fSkpLCEwfXdyaXRlVG9UYWIoTCxrKXtsZXQgTj10aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKEwpO3JldHVybiBOPyhOLnRlcm1pbmFsLndyaXRlKGspLCEwKTohMX1zZW5kSW5wdXRUb1RhYihMLGspe2xldCBOPXRoaXMudGFiTWFuYWdlci5nZXRUYWIoTCk7cmV0dXJuIU58fCFOLmlucHV0V3JpdGVyPyExOihOLmlucHV0V3JpdGVyLndyaXRlKGspLCEwKX1hc3luYyBzaG93QWN0aW9uYmFyKEwpe3JldHVybiB0aGlzLnRlcm1pbmFsQWN0aW9uYmFyfHwodGhpcy50ZXJtaW5hbEFjdGlvbmJhcj10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYWN0aW9uYmFyIikpLHRoaXMudGVybWluYWxBY3Rpb25iYXI/LnNob3coTCl9YXN5bmMgd2FpdEZvclByb21wdChMLGspe3JldHVybiBuZXcgUHJvbWlzZShOPT57bGV0IFM9KCk9PntsZXQgVD1MLmJ1ZmZlci5hY3RpdmU7Zm9yKGxldCBSPTA7UjxULmxlbmd0aDtSKyspe2xldCBBPVQuZ2V0TGluZShSKTtpZihBJiZBLnRyYW5zbGF0ZVRvU3RyaW5nKCkuaW5jbHVkZXMoaykpe3NldFRpbWVvdXQoKCk9PntOKCl9LDEwMCk7cmV0dXJufX1zZXRUaW1lb3V0KFMsMTAwKX07UygpfSl9YXN5bmMgc2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoTCl7aWYoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpdGhyb3cgbmV3IEVycm9yKCJObyBleGVjdXRpb24gZW52aXJvbm1lbnQgYXZhaWxhYmxlIik7bGV0IGs9IiI7Zm9yKGxldCBOIGluIEwpays9YGV4cG9ydCAke059PSIke0xbTl19IgpgO2F3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKCIvc291cmNlLmVudiIsayl9Z2V0RXhlY3V0aW9uRW52aXJvbm1lbnQoKXtyZXR1cm4gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudH1zdGF0aWN7cTIocixhKX19O3JldHVybiBIPXJ9KSgpfSk7dmFyIFgxPXtiYXNlOntjb250ZW50OiJhdXRvIixpbnB1dEVsZW1lbnRzOjF9LGZpeGVkOnthcHBCYXI6MTAsc2lkZU1lbnU6MTAsbW9iaWxlTmF2OjI1MH0sYmFja2Ryb3A6e2Ryb3Bkb3duOjE5OTksbW9kYWw6Mjk5OSxjb250ZXh0TWVudTozOTk5fSxvdmVybGF5Ontkcm9wZG93bjoyZTMsbW9kYWw6M2UzLGNvbnRleHRNZW51OjRlMyx0b2FzdDo1ZTN9LG1vZGFsRHJvcGRvd246MzUwMCx3eXNpd3lnTWVudXM6NDUwMH07ZnVuY3Rpb24gczAyKHQsZSl7bGV0IGE9WDFbdF07cmV0dXJuIHR5cGVvZiBhPT0ib2JqZWN0IiYmZT9hW2VdfHwiYXV0byI6dHlwZW9mIGE9PSJudW1iZXIiP2E6ImF1dG8ifXZhciBuMDI9eyJkZWVzLW1vZGFsIjpYMS5vdmVybGF5Lm1vZGFsLCJkZWVzLXdpbmRvd2xheWVyIjpYMS5vdmVybGF5LmRyb3Bkb3duLCJkZWVzLWNvbnRleHRtZW51IjpYMS5vdmVybGF5LmNvbnRleHRNZW51LCJkZWVzLXRvYXN0IjpYMS5vdmVybGF5LnRvYXN0LCJkZWVzLWFwcHVpLW1haW5tZW51IjpYMS5maXhlZC5hcHBCYXIsImRlZXMtbW9iaWxlbmF2aWdhdGlvbiI6WDEuZml4ZWQubW9iaWxlTmF2LCJkZWVzLXNsYXNoLW1lbnUiOlgxLnd5c2l3eWdNZW51cywiZGVlcy1mb3JtYXR0aW5nLW1lbnUiOlgxLnd5c2l3eWdNZW51c30sQnRlPWNsYXNzIHR7c3RhdGljIGluc3RhbmNlO2FjdGl2ZUVsZW1lbnRzPW5ldyBTZXQ7ZWxlbWVudFpJbmRleE1hcD1uZXcgV2Vha01hcDtjdXJyZW50WkluZGV4PTFlMztjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gdC5pbnN0YW5jZXx8KHQuaW5zdGFuY2U9bmV3IHQpLHQuaW5zdGFuY2V9Z2V0TmV4dFpJbmRleCgpe3JldHVybiB0aGlzLmN1cnJlbnRaSW5kZXgrPTEwLHRoaXMuY3VycmVudFpJbmRleH1yZWdpc3RlcihlLGEpe3RoaXMuYWN0aXZlRWxlbWVudHMuYWRkKGUpLHRoaXMuZWxlbWVudFpJbmRleE1hcC5zZXQoZSxhKX11bnJlZ2lzdGVyKGUpe3RoaXMuYWN0aXZlRWxlbWVudHMuZGVsZXRlKGUpLHRoaXMuZWxlbWVudFpJbmRleE1hcC5kZWxldGUoZSksdGhpcy5hY3RpdmVFbGVtZW50cy5zaXplPT09MCYmKHRoaXMuY3VycmVudFpJbmRleD0xZTMpfWdldEVsZW1lbnRaSW5kZXgoZSl7cmV0dXJuIHRoaXMuZWxlbWVudFpJbmRleE1hcC5nZXQoZSl9Z2V0QWN0aXZlQ291bnQoKXtyZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50cy5zaXplfWdldEN1cnJlbnRaSW5kZXgoKXtyZXR1cm4gdGhpcy5jdXJyZW50WkluZGV4fWNsZWFyKCl7dGhpcy5hY3RpdmVFbGVtZW50cy5jbGVhcigpLHRoaXMuZWxlbWVudFpJbmRleE1hcD1uZXcgV2Vha01hcCx0aGlzLmN1cnJlbnRaSW5kZXg9MWUzfWdldEFjdGl2ZUVsZW1lbnRzSW5PcmRlcigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuYWN0aXZlRWxlbWVudHMpLnNvcnQoKGUsYSk9PntsZXQgcj10aGlzLmVsZW1lbnRaSW5kZXhNYXAuZ2V0KGUpfHwwLGk9dGhpcy5lbGVtZW50WkluZGV4TWFwLmdldChhKXx8MDtyZXR1cm4gci1pfSl9fSxzMT1CdGUuZ2V0SW5zdGFuY2UoKTt2YXIgS3RlPXt9O2V0KEt0ZSx7YnVzaW5lc3M6KCk9PnF0ZSxjb2RlOigpPT5WdGUsY29udGFpbmVyOigpPT5VdGUsY29udGVudDooKT0+V3RlLGRhdGFiYXNlOigpPT5SdGUsZGVzY3JpcHRvcnM6KCk9Pmp0ZSxmaW5hbmNlOigpPT5IdGUsZ2VuZXJhbDooKT0+R3RlLG5ldHdvcms6KCk9PlpxLHNhYXM6KCk9Plp0ZSxzdG9yYWdlOigpPT5YdGUsd2Vic2l0ZTooKT0+UXRlfSk7dmFyIHF0ZT17fTt2YXIgUnRlPXt9O3ZhciBIdGU9e307dmFyIFZ0ZT17fTt2YXIgVXRlPXt9O3ZhciBqdGU9e307dmFyIFd0ZT17fTt2YXIgR3RlPXt9O3ZhciBacT17fTtldChacSx7SUNuYW1lRGVzY3JpcHRvcjooKT0+WXRlfSk7dmFyIFl0ZT1jbGFzc3t9O3ZhciBadGU9e307dmFyIFh0ZT17fTt2YXIgUXRlPXt9O3AyKCk7ZmUoKTt2YXIgdmF0PSgpPT5NYAo8c3R5bGU+CiAgLndpdGhNYXJnaW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDIwcHg7CiAgfQogIC5kZW1vLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMjBweDsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBtaW4taGVpZ2h0OiA0MDBweDsKICB9CiAgLmRlbW8tYXJlYSB7CiAgICBwYWRkaW5nOiA0MHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY3Vyc29yOiBjb250ZXh0LW1lbnU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgfQogIC5kZW1vLWFyZWE6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAyKTsKICB9Cjwvc3R5bGU+CjxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJCYXNpYyBDb250ZXh0IE1lbnUgd2l0aCBOZXN0ZWQgU3VibWVudXMiPgogICAgPGRpdiBjbGFzcz0iZGVtby1hcmVhIiBAY29udGV4dG1lbnU9JHt0PT57V3Qub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnModCxbe25hbWU6IkZpbGUiLGljb25OYW1lOiJmaWxlVGV4dCIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJOZXciLGljb25OYW1lOiJmaWxlUGx1cyIsc2hvcnRjdXQ6IkNtZCtOIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk5ldyBmaWxlIil9LHtuYW1lOiJPcGVuIixpY29uTmFtZToiZm9sZGVyT3BlbiIsc2hvcnRjdXQ6IkNtZCtPIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gZmlsZSIpfSx7bmFtZToiU2F2ZSIsaWNvbk5hbWU6InNhdmUiLHNob3J0Y3V0OiJDbWQrUyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJTYXZlIil9LHtkaXZpZGVyOiEwfSx7bmFtZToiRXhwb3J0IGFzIFBERiIsaWNvbk5hbWU6ImRvd25sb2FkIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkV4cG9ydCBQREYiKX0se25hbWU6IkV4cG9ydCBhcyBIVE1MIixpY29uTmFtZToiY29kZSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJFeHBvcnQgSFRNTCIpfV19LHtuYW1lOiJFZGl0IixpY29uTmFtZToiZWRpdDMiLGFjdGlvbjphc3luYygpPT57fSxzdWJtZW51Olt7bmFtZToiQ3V0IixpY29uTmFtZToic2Npc3NvcnMiLHNob3J0Y3V0OiJDbWQrWCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJDdXQiKX0se25hbWU6IkNvcHkiLGljb25OYW1lOiJjb3B5IixzaG9ydGN1dDoiQ21kK0MiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiQ29weSIpfSx7bmFtZToiUGFzdGUiLGljb25OYW1lOiJjbGlwYm9hcmQiLHNob3J0Y3V0OiJDbWQrViIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJQYXN0ZSIpfSx7ZGl2aWRlcjohMH0se25hbWU6IkZpbmQiLGljb25OYW1lOiJzZWFyY2giLHNob3J0Y3V0OiJDbWQrRiIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJGaW5kIil9LHtuYW1lOiJSZXBsYWNlIixpY29uTmFtZToicmVwZWF0IixzaG9ydGN1dDoiQ21kK0giLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiUmVwbGFjZSIpfV19LHtuYW1lOiJWaWV3IixpY29uTmFtZToiZXllIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6Ilpvb20gSW4iLGljb25OYW1lOiJ6b29tSW4iLHNob3J0Y3V0OiJDbWQrKyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJab29tIGluIil9LHtuYW1lOiJab29tIE91dCIsaWNvbk5hbWU6Inpvb21PdXQiLHNob3J0Y3V0OiJDbWQrLSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJab29tIG91dCIpfSx7bmFtZToiUmVzZXQgWm9vbSIsaWNvbk5hbWU6Im1heGltaXplMiIsc2hvcnRjdXQ6IkNtZCswIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlJlc2V0IHpvb20iKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJGdWxsIFNjcmVlbiIsaWNvbk5hbWU6Im1heGltaXplIixzaG9ydGN1dDoiRjExIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkZ1bGwgc2NyZWVuIil9XX0se2RpdmlkZXI6ITB9LHtuYW1lOiJTZXR0aW5ncyIsaWNvbk5hbWU6InNldHRpbmdzIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNldHRpbmdzIil9LHtuYW1lOiJIZWxwIixpY29uTmFtZToiaGVscENpcmNsZSIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJEb2N1bWVudGF0aW9uIixpY29uTmFtZToiYm9vayIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJEb2N1bWVudGF0aW9uIil9LHtuYW1lOiJLZXlib2FyZCBTaG9ydGN1dHMiLGljb25OYW1lOiJrZXlib2FyZCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJTaG9ydGN1dHMiKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJBYm91dCIsaWNvbk5hbWU6ImluZm8iLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiQWJvdXQiKX1dfV0pfX0+CiAgICAgIDxoMz5SaWdodC1jbGljayBhbnl3aGVyZSBpbiB0aGlzIGFyZWE8L2gzPgogICAgICA8cD5BIGNvbnRleHQgbWVudSB3aXRoIG5lc3RlZCBzdWJtZW51cyB3aWxsIGFwcGVhcjwvcD4KICAgIDwvZGl2PgogIDwvZGVlcy1wYW5lbD4KICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJDb21wb25lbnQtU3BlY2lmaWMgQ29udGV4dCBNZW51Ij4KICAgIDxkZWVzLWJ1dHRvbiBzdHlsZT0ibWFyZ2luOiAyMHB4OyIgQGNvbnRleHRtZW51PSR7dD0+e1d0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKHQsW3tuYW1lOiJCdXR0b24gQWN0aW9ucyIsaWNvbk5hbWU6Im1vdXNlUG9pbnRlciIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJDbGljayIsaWNvbk5hbWU6Im1vdXNlIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkNsaWNrIGFjdGlvbiIpfSx7bmFtZToiRG91YmxlIENsaWNrIixpY29uTmFtZToiemFwIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkRvdWJsZSBjbGljayIpfSx7bmFtZToiTG9uZyBQcmVzcyIsaWNvbk5hbWU6ImNsb2NrIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkxvbmcgcHJlc3MiKX1dfSx7bmFtZToiQnV0dG9uIFN0YXRlIixpY29uTmFtZToidG9nZ2xlTGVmdCIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJFbmFibGUiLGljb25OYW1lOiJjaGVja0NpcmNsZSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJFbmFibGUiKX0se25hbWU6IkRpc2FibGUiLGljb25OYW1lOiJ4Q2lyY2xlIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkRpc2FibGUiKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJTaG93IixpY29uTmFtZToiZXllIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNob3ciKX0se25hbWU6IkhpZGUiLGljb25OYW1lOiJleWVPZmYiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiSGlkZSIpfV19LHtkaXZpZGVyOiEwfSx7bmFtZToiRGlzYWJsZWQgQWN0aW9uIixpY29uTmFtZToiYmFuIixkaXNhYmxlZDohMCxhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlRoaXMgc2hvdWxkIG5vdCBydW4iKX0se25hbWU6IlByb3BlcnRpZXMiLGljb25OYW1lOiJzZXR0aW5ncyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJCdXR0b24gcHJvcGVydGllcyIpfV0pfX0+UmlnaHQtY2xpY2sgb24gdGhpcyBidXR0b248L2RlZXMtYnV0dG9uPgogIDwvZGVlcy1wYW5lbD4KCiAgPGRlZXMtcGFuZWwgaGVhZGluZz0iQWR2YW5jZWQgQ29udGV4dCBNZW51IEV4YW1wbGUiPgogICAgPGRpdiBjbGFzcz0iZGVtby1hcmVhIiBAY29udGV4dG1lbnU9JHt0PT57V3Qub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnModCxbe25hbWU6IkZvcm1hdCIsaWNvbk5hbWU6InR5cGUiLGFjdGlvbjphc3luYygpPT57fSxzdWJtZW51Olt7bmFtZToiQm9sZCIsaWNvbk5hbWU6ImJvbGQiLHNob3J0Y3V0OiJDbWQrQiIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJCb2xkIil9LHtuYW1lOiJJdGFsaWMiLGljb25OYW1lOiJpdGFsaWMiLHNob3J0Y3V0OiJDbWQrSSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJJdGFsaWMiKX0se25hbWU6IlVuZGVybGluZSIsaWNvbk5hbWU6InVuZGVybGluZSIsc2hvcnRjdXQ6IkNtZCtVIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlVuZGVybGluZSIpfSx7ZGl2aWRlcjohMH0se25hbWU6IkZvbnQgU2l6ZSIsaWNvbk5hbWU6InR5cGUiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiRm9udCBzaXplIG1lbnUiKX0se25hbWU6IkZvbnQgQ29sb3IiLGljb25OYW1lOiJwYWxldHRlIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkZvbnQgY29sb3IgbWVudSIpfV19LHtuYW1lOiJUcmFuc2Zvcm0iLGljb25OYW1lOiJzaHVmZmxlIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6IlRvIFVwcGVyY2FzZSIsaWNvbk5hbWU6ImFycm93VXAiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiVXBwZXJjYXNlIil9LHtuYW1lOiJUbyBMb3dlcmNhc2UiLGljb25OYW1lOiJhcnJvd0Rvd24iLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiTG93ZXJjYXNlIil9LHtuYW1lOiJDYXBpdGFsaXplIixpY29uTmFtZToidHlwZSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJDYXBpdGFsaXplIil9XX0se2RpdmlkZXI6ITB9LHtuYW1lOiJEZWxldGUiLGljb25OYW1lOiJ0cmFzaDIiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiRGVsZXRlIil9XSl9fT4KICAgICAgPGgzPkFkdmFuY2VkIE5lc3RlZCBNZW51IEV4YW1wbGU8L2gzPgogICAgICA8cD5UaGlzIHNob3dzIGRlZXBseSBuZXN0ZWQgc3VibWVudXMgYW5kIHZhcmlvdXMgZm9ybWF0dGluZyBvcHRpb25zPC9wPgogICAgPC9kaXY+CiAgPC9kZWVzLXBhbmVsPgogIAogIDxkZWVzLXBhbmVsIGhlYWRpbmc9IlN0YXRpYyBDb250ZXh0IE1lbnUgKEFsd2F5cyBWaXNpYmxlKSI+CiAgICA8ZGVlcy1jb250ZXh0bWVudQogICAgICBjbGFzcz0id2l0aE1hcmdpbiIKICAgICAgLm1lbnVJdGVtcz0ke1t7bmFtZToiUHJvamVjdCIsaWNvbk5hbWU6ImZvbGRlciIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJOZXcgUHJvamVjdCIsaWNvbk5hbWU6ImZvbGRlclBsdXMiLHNob3J0Y3V0OiJDbWQrU2hpZnQrTiIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJOZXcgcHJvamVjdCIpfSx7bmFtZToiT3BlbiBQcm9qZWN0IixpY29uTmFtZToiZm9sZGVyT3BlbiIsc2hvcnRjdXQ6IkNtZCtTaGlmdCtPIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gcHJvamVjdCIpfSx7ZGl2aWRlcjohMH0se25hbWU6IlJlY2VudCBQcm9qZWN0cyIsaWNvbk5hbWU6ImNsb2NrIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6IlByb2plY3QgQWxwaGEiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiT3BlbiBBbHBoYSIpfSx7bmFtZToiUHJvamVjdCBCZXRhIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gQmV0YSIpfSx7bmFtZToiUHJvamVjdCBHYW1tYSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJPcGVuIEdhbW1hIil9XX1dfSx7bmFtZToiVG9vbHMiLGljb25OYW1lOiJ0b29sIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6IlRlcm1pbmFsIixpY29uTmFtZToidGVybWluYWwiLHNob3J0Y3V0OiJDbWQrVCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJUZXJtaW5hbCIpfSx7bmFtZToiQ29uc29sZSIsaWNvbk5hbWU6Im1vbml0b3IiLHNob3J0Y3V0OiJDbWQrSyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJDb25zb2xlIil9LHtkaXZpZGVyOiEwfSx7bmFtZToiRXh0ZW5zaW9ucyIsaWNvbk5hbWU6InBhY2thZ2UiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiRXh0ZW5zaW9ucyIpfV19LHtkaXZpZGVyOiEwfSx7bmFtZToiUHJlZmVyZW5jZXMiLGljb25OYW1lOiJzbGlkZXJzIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlByZWZlcmVuY2VzIil9XX0KICAgID48L2RlZXMtY29udGV4dG1lbnU+CiAgPC9kZWVzLXBhbmVsPgo8L2Rpdj4KYDtmZSgpO3ZhciBCZD1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LEFpPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxLYT0oKCk9PntsZXQgdD1bY2UoImRlZXMtd2luZG93bGF5ZXIiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXTt2YXIgdj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IHk9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bbGUoKV0sZj1bbGUoKV0sZD1bbGUoKV0sYj1bRCh7dHlwZTpCb29sZWFufSldLEJkKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToib3B0aW9ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+Im9wdGlvbnMiaW4gdyxnZXQ6dz0+dy5vcHRpb25zLHNldDoodyxFKT0+e3cub3B0aW9ucz1FfX0sbWV0YWRhdGE6eX0scyxsKSxCZCh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImJhY2tkcm9wWkluZGV4IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4iYmFja2Ryb3BaSW5kZXgiaW4gdyxnZXQ6dz0+dy5iYWNrZHJvcFpJbmRleCxzZXQ6KHcsRSk9Pnt3LmJhY2tkcm9wWkluZGV4PUV9fSxtZXRhZGF0YTp5fSxjLHUpLEJkKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29udGVudFpJbmRleCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+ImNvbnRlbnRaSW5kZXgiaW4gdyxnZXQ6dz0+dy5jb250ZW50WkluZGV4LHNldDoodyxFKT0+e3cuY29udGVudFpJbmRleD1FfX0sbWV0YWRhdGE6eX0saCxnKSxCZCh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZpc2libGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnc9PiJ2aXNpYmxlImluIHcsZ2V0Onc9PncudmlzaWJsZSxzZXQ6KHcsRSk9Pnt3LnZpc2libGU9RX19LG1ldGFkYXRhOnl9LHgsbSksQmQobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6eX0sbnVsbCxhKSx2PXI9ZS52YWx1ZSx5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnl9KX1zdGF0aWMgZGVtbz0oKT0+TWA8ZGVlcy13aW5kb3dsYXllcj48L2RlZXMtd2luZG93bGF5ZXI+YDtzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyh5KXtsZXQgdz1zdC5Eb21Ub29scy5nZXRHbG9iYWxEb21Ub29sc1N5bmMoKSxFPW5ldyB2O3JldHVybiBFLm9wdGlvbnM9ey4uLkUub3B0aW9ucywuLi55fSxkb2N1bWVudC5ib2R5LmFwcGVuZChFKSxhd2FpdCB3LmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCksRS5zaG93KCksRX0jZT1BaSh0aGlzLHMse2JsdXI6ITF9KTtnZXQgb3B0aW9ucygpe3JldHVybiB0aGlzLiNlfXNldCBvcHRpb25zKHkpe3RoaXMuI2U9eX0jdD0oQWkodGhpcyxsKSxBaSh0aGlzLGMsMWUzKSk7Z2V0IGJhY2tkcm9wWkluZGV4KCl7cmV0dXJuIHRoaXMuI3R9c2V0IGJhY2tkcm9wWkluZGV4KHkpe3RoaXMuI3Q9eX0jYT0oQWkodGhpcyx1KSxBaSh0aGlzLGgsMTAwMSkpO2dldCBjb250ZW50WkluZGV4KCl7cmV0dXJuIHRoaXMuI2F9c2V0IGNvbnRlbnRaSW5kZXgoeSl7dGhpcy4jYT15fSNyPShBaSh0aGlzLGcpLEFpKHRoaXMseCwhMSkpO2dldCB2aXNpYmxlKCl7cmV0dXJuIHRoaXMuI3J9c2V0IHZpc2libGUoeSl7dGhpcy4jcj15fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxBaSh0aGlzLG0pLHN0LmVsZW1lbnRCYXNpYy5zZXR1cCgpfXJlbmRlcigpe3JldHVybiBNYAogICAgICAke3N0LmVsZW1lbnRCYXNpYy5zdHlsZXN9CiAgICAgIDxzdHlsZT4KICAgICAgICAud2luZG93T3ZlcmxheSB7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICB0b3A6IDBweDsKICAgICAgICAgIGxlZnQ6IDBweDsKICAgICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjApOwogICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBicmlnaHRuZXNzKDEpICR7dGhpcy5vcHRpb25zLmJsdXI/ImJsdXIoMHB4KSI6IiJ9OwogICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgICB6LWluZGV4OiAke3RoaXMuYmFja2Ryb3BaSW5kZXh9OwogICAgICAgIH0KICAgICAgICAuc2xvdENvbnRlbnQgewogICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICAgIHdpZHRoOiAxMDB2dzsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICB6LWluZGV4OiAke3RoaXMuY29udGVudFpJbmRleH07CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNsb3RDb250ZW50ID4gKiB7CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnZpc2libGUgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBicmlnaHRuZXNzKDAuOSkgJHt0aGlzLm9wdGlvbnMuYmx1cj8iYmx1cigycHgpIjoiIn07CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBAY2xpY2s9JHt0aGlzLmRpc3BhdGNoQ2xpY2tlZH0gY2xhc3M9IndpbmRvd092ZXJsYXkgJHt0aGlzLnZpc2libGU/InZpc2libGUiOm51bGx9Ij4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNsb3RDb250ZW50Ij4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgYH1maXJzdFVwZGF0ZWQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy52aXNpYmxlPSEwfSwxMDApfWRpc3BhdGNoQ2xpY2tlZCgpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNsaWNrZWQiKSl9dG9nZ2xlVmlzaWJpbGl0eSgpe3RoaXMudmlzaWJsZT0hdGhpcy52aXNpYmxlfWdldENvbnRlbnRaSW5kZXgoKXtyZXR1cm4gdGhpcy5jb250ZW50WkluZGV4fWFzeW5jIHNob3coKXtsZXQgeT1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTt0aGlzLmJhY2tkcm9wWkluZGV4PXMxLmdldE5leHRaSW5kZXgoKSx0aGlzLmNvbnRlbnRaSW5kZXg9czEuZ2V0TmV4dFpJbmRleCgpLHMxLnJlZ2lzdGVyKHRoaXMsdGhpcy5iYWNrZHJvcFpJbmRleCksYXdhaXQgeS5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApLHRoaXMudmlzaWJsZT0hMH1hc3luYyBoaWRlKCl7YXdhaXQoYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2UpLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCksdGhpcy52aXNpYmxlPSExfWFzeW5jIGRlc3Ryb3koKXtsZXQgeT1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTthd2FpdCB0aGlzLmhpZGUoKSxhd2FpdCB5LmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMzAwKSxzMS51bnJlZ2lzdGVyKHRoaXMpLHRoaXMucmVtb3ZlKCl9c3RhdGlje0FpKHIsYSl9fTtyZXR1cm4gdj1yfSkoKTtmZSgpO1N0KCk7RnQoKTtCZSgpO3ZhciBTSXQ9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxIRGU9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LFd0PSgoKT0+e2xldCB0PVtjZSgiZGVlcy1jb250ZXh0bWVudSIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdO3ZhciBmPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgYz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOkFycmF5fSldLFNJdCh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1lbnVJdGVtcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dT0+Im1lbnVJdGVtcyJpbiB1LGdldDp1PT51Lm1lbnVJdGVtcyxzZXQ6KHUsZCk9Pnt1Lm1lbnVJdGVtcz1kfX0sbWV0YWRhdGE6Y30scyxsKSxTSXQobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6Y30sbnVsbCxhKSxmPXI9ZS52YWx1ZSxjJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmN9KX1zdGF0aWMgZGVtbz12YXQ7c3RhdGljIGNvbnRleHRNZW51RGVhY3RpdmF0ZWQ9ITE7c3RhdGljIGFjY3VtdWxhdGVkTWVudUl0ZW1zPVtdO3N0YXRpYyBpbml0aWFsaXplR2xvYmFsTGlzdGVuZXIoKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsYz0+e2lmKHRoaXMuY29udGV4dE1lbnVEZWFjdGl2YXRlZClyZXR1cm47Yy5wcmV2ZW50RGVmYXVsdCgpLGYuYWNjdW11bGF0ZWRNZW51SXRlbXM9W107bGV0IHU9Yy5jb21wb3NlZFBhdGgoKTtmb3IobGV0IGQgb2YgdSlpZihkLmdldENvbnRleHRNZW51SXRlbXMpe2xldCBoPWQuZ2V0Q29udGV4dE1lbnVJdGVtcygpO2gmJmgubGVuZ3RoPjAmJihmLmFjY3VtdWxhdGVkTWVudUl0ZW1zLmxlbmd0aD4wJiZmLmFjY3VtdWxhdGVkTWVudUl0ZW1zLnB1c2goe2RpdmlkZXI6ITB9KSxmLmFjY3VtdWxhdGVkTWVudUl0ZW1zLnB1c2goLi4uaCkpfWYub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoYyxmLmFjY3VtdWxhdGVkTWVudUl0ZW1zKX0pfXN0YXRpYyBhc3luYyBvcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhjLHUpe2lmKHRoaXMuY29udGV4dE1lbnVEZWFjdGl2YXRlZClyZXR1cm47Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IGQ9bmV3IGY7ZC5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGQuc3R5bGUuekluZGV4PVN0cmluZyhYMS5vdmVybGF5LmNvbnRleHRNZW51KSxkLnN0eWxlLm9wYWNpdHk9IjAiLGQuc3R5bGUudHJhbnNmb3JtPSJzY2FsZSgwLjk1KSB0cmFuc2xhdGVZKC0xMHB4KSIsZC5tZW51SXRlbXM9dSxkLndpbmRvd0xheWVyPWF3YWl0IEthLmNyZWF0ZUFuZFNob3coKSxkLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixhc3luYyB2PT57di50YXJnZXQuY2xvc2VzdCgiZGVlcy1jb250ZXh0bWVudSIpfHxhd2FpdCBkLmRlc3Ryb3koKX0pLGRvY3VtZW50LmJvZHkuYXBwZW5kKGQpLGF3YWl0IEF0LnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7bGV0IGg9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPXdpbmRvdy5pbm5lcldpZHRoLGI9d2luZG93LmlubmVySGVpZ2h0LHg9Yy5jbGllbnRZLG09Yy5jbGllbnRYO20raC53aWR0aD5nJiYobT1nLWgud2lkdGgtMTApLHgraC5oZWlnaHQ+YiYmKHg9Yi1oLmhlaWdodC0xMCksbTwxMCYmKG09MTApLHg8MTAmJih4PTEwKSxkLnN0eWxlLnRvcD1gJHt4fXB4YCxkLnN0eWxlLmxlZnQ9YCR7bX1weGAsZC5zdHlsZS50cmFuc2Zvcm1PcmlnaW49InRvcCBsZWZ0Iixhd2FpdCBBdC5zbWFydGRlbGF5LmRlbGF5Rm9yKDApLGQuc3R5bGUub3BhY2l0eT0iMSIsZC5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDEpIHRyYW5zbGF0ZVkoMCkifSNlPUhEZSh0aGlzLHMsW10pO2dldCBtZW51SXRlbXMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgbWVudUl0ZW1zKGMpe3RoaXMuI2U9Y313aW5kb3dMYXllcj1IRGUodGhpcyxsKTtzdWJtZW51PW51bGw7c3VibWVudVRpbWVvdXQ9bnVsbDtwYXJlbnRNZW51PW51bGw7aXNEZXN0cm95aW5nPSExO2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnRhYkluZGV4PTB9c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzLCB0cmFuc2Zvcm0gMC4yczsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgICBtYXgtd2lkdGg6IDI4MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzAwMDAwMCIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2UwZTBlMCIsIiMyMDIwMjAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7cC5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4zKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzIiwiI2NjYyIpfTsKICAgICAgfQoKICAgICAgLm1lbnVpdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xczsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNCkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CiAgICAgIAogICAgICAubWVudWl0ZW0uaGFzLXN1Ym1lbnU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAn4oC6JzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAubWVudWl0ZW06YWN0aXZlOm5vdCguaGFzLXN1Ym1lbnUpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tZW51aXRlbS5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbS10ZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAubWVudWl0ZW0tc2hvcnRjdXQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM5OTkiLCIjNjY2Iil9OwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLm1lbnUtZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNlMGUwZTAiLCIjMjAyMDIwIil9OwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcChjPT57aWYoImRpdmlkZXIiaW4gYyYmYy5kaXZpZGVyKXJldHVybiBNYDxkaXYgY2xhc3M9Im1lbnUtZGl2aWRlciI+PC9kaXY+YDtsZXQgdT1jLGQ9dS5zdWJtZW51JiZ1LnN1Ym1lbnUubGVuZ3RoPjA7cmV0dXJuIE1gCiAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgY2xhc3M9Im1lbnVpdGVtICR7dS5kaXNhYmxlZD8iZGlzYWJsZWQiOiIifSAke2Q/Imhhcy1zdWJtZW51IjoiIn0iIAogICAgICAgICAgICAgIEBjbGljaz0keygpPT4hdS5kaXNhYmxlZCYmIWQmJnRoaXMuaGFuZGxlQ2xpY2sodSl9CiAgICAgICAgICAgICAgQG1vdXNlZW50ZXI9JHsoKT0+dGhpcy5oYW5kbGVNZW51SXRlbUhvdmVyKHUsZCl9CiAgICAgICAgICAgICAgQG1vdXNlbGVhdmU9JHsoKT0+dGhpcy5oYW5kbGVNZW51SXRlbUxlYXZlKCl9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICAke3UuaWNvbk5hbWU/TWAKICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dS5pY29uTmFtZX0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnVpdGVtLXRleHQiPiR7dS5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAke3Uuc2hvcnRjdXQmJiFkP01gCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudWl0ZW0tc2hvcnRjdXQiPiR7dS5zaG9ydGN1dH08L3NwYW4+CiAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfSl9CiAgICAgICAgJHt0aGlzLm1lbnVJdGVtcy5sZW5ndGg9PT0wP01gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lbnVpdGVtIiBAY2xpY2s9JHsoKT0+e2YuY29udGV4dE1lbnVEZWFjdGl2YXRlZD0hMCx0aGlzLmRlc3Ryb3koKX19PgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249Imx1Y2lkZTp4Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudWl0ZW0tdGV4dCI+QWxsb3cgbmF0aXZlIGNvbnRleHQ8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIGA6TWBgfQogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7dGhpcy5mb2N1cygpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5oYW5kbGVLZXlkb3duKX1oYW5kbGVLZXlkb3duPWM9PntsZXQgdT1BcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWVudWl0ZW06bm90KC5kaXNhYmxlZCkiKSksZD11LmZpbmRJbmRleChoPT5oLm1hdGNoZXMoIjpob3ZlciIpKTtzd2l0Y2goYy5rZXkpe2Nhc2UiQXJyb3dEb3duIjpjLnByZXZlbnREZWZhdWx0KCk7bGV0IGg9ZCsxPHUubGVuZ3RoP2QrMTowO3VbaF0uZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgibW91c2VlbnRlciIpKTticmVhaztjYXNlIkFycm93VXAiOmMucHJldmVudERlZmF1bHQoKTtsZXQgZz1kLTE+PTA/ZC0xOnUubGVuZ3RoLTE7dVtnXS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCJtb3VzZWVudGVyIikpO2JyZWFrO2Nhc2UiRW50ZXIiOmMucHJldmVudERlZmF1bHQoKSxkPj0wJiZ1W2RdLmNsaWNrKCk7YnJlYWs7Y2FzZSJFc2NhcGUiOmMucHJldmVudERlZmF1bHQoKSx0aGlzLmRlc3Ryb3koKTticmVha319O2FzeW5jIGhhbmRsZUNsaWNrKGMpe2MuYWN0aW9uKCksYXdhaXQgdGhpcy5kZXN0cm95QWxsKCl9YXN5bmMgaGFuZGxlTWVudUl0ZW1Ib3ZlcihjLHUpe3RoaXMuc3VibWVudVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5zdWJtZW51VGltZW91dCksdGhpcy5zdWJtZW51VGltZW91dD1udWxsKSx0aGlzLnN1Ym1lbnUmJmF3YWl0IHRoaXMuaGlkZVN1Ym1lbnUoKSx1JiZjLnN1Ym1lbnUmJih0aGlzLnN1Ym1lbnVUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnNob3dTdWJtZW51KGMpfSwyMDApKX1oYW5kbGVNZW51SXRlbUxlYXZlKCl7dGhpcy5zdWJtZW51VGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuc3VibWVudVRpbWVvdXQpLHRoaXMuc3VibWVudVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuc3VibWVudSYmIXRoaXMuc3VibWVudS5tYXRjaGVzKCI6aG92ZXIiKSYmdGhpcy5oaWRlU3VibWVudSgpfSwzMDApfWFzeW5jIHNob3dTdWJtZW51KGMpe2lmKCFjLnN1Ym1lbnV8fGMuc3VibWVudS5sZW5ndGg9PT0wKXJldHVybjtsZXQgZD1BcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWVudWl0ZW0iKSkuZmluZCh5PT55LnF1ZXJ5U2VsZWN0b3IoIi5tZW51aXRlbS10ZXh0Iik/LnRleHRDb250ZW50PT09Yy5uYW1lKTtpZighZClyZXR1cm47dGhpcy5zdWJtZW51PW5ldyBmLHRoaXMuc3VibWVudS5tZW51SXRlbXM9Yy5zdWJtZW51LHRoaXMuc3VibWVudS5wYXJlbnRNZW51PXRoaXMsdGhpcy5zdWJtZW51LnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zdWJtZW51LnN0eWxlLnpJbmRleD1TdHJpbmcocGFyc2VJbnQodGhpcy5zdHlsZS56SW5kZXgpKzEpLHRoaXMuc3VibWVudS5zdHlsZS5vcGFjaXR5PSIwIix0aGlzLnN1Ym1lbnUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZSgwLjk1KSIsZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy5zdWJtZW51KSxhd2FpdCBBdC5zbWFydGRlbGF5LmRlbGF5Rm9yKDApO2xldCBoPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGI9dGhpcy5zdWJtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHg9d2luZG93LmlubmVyV2lkdGgsbT1nLnJpZ2h0LTQsdj1oLnRvcDttK2Iud2lkdGg+eC0xMCYmKG09Zy5sZWZ0LWIud2lkdGgrNCksditiLmhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQtMTAmJih2PXdpbmRvdy5pbm5lckhlaWdodC1iLmhlaWdodC0xMCksdGhpcy5zdWJtZW51LnN0eWxlLmxlZnQ9YCR7bX1weGAsdGhpcy5zdWJtZW51LnN0eWxlLnRvcD1gJHt2fXB4YCxhd2FpdCBBdC5zbWFydGRlbGF5LmRlbGF5Rm9yKDApLHRoaXMuc3VibWVudS5zdHlsZS5vcGFjaXR5PSIxIix0aGlzLnN1Ym1lbnUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZSgxKSIsdGhpcy5zdWJtZW51LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLCgpPT57dGhpcy5zdWJtZW51VGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLnN1Ym1lbnVUaW1lb3V0KSx0aGlzLnN1Ym1lbnVUaW1lb3V0PW51bGwpfSksdGhpcy5zdWJtZW51LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCgpPT57dGhpcy5oYW5kbGVNZW51SXRlbUxlYXZlKCl9KX1hc3luYyBoaWRlU3VibWVudSgpe3RoaXMuc3VibWVudSYmKGF3YWl0IHRoaXMuc3VibWVudS5kZXN0cm95KCksdGhpcy5zdWJtZW51PW51bGwpfWFzeW5jIGRlc3Ryb3koKXt0aGlzLmlzRGVzdHJveWluZ3x8KHRoaXMuaXNEZXN0cm95aW5nPSEwLHRoaXMuc3VibWVudVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5zdWJtZW51VGltZW91dCksdGhpcy5zdWJtZW51VGltZW91dD1udWxsKSx0aGlzLnN1Ym1lbnUmJihhd2FpdCB0aGlzLnN1Ym1lbnUuZGVzdHJveSgpLHRoaXMuc3VibWVudT1udWxsKSx0aGlzLndpbmRvd0xheWVyJiYhdGhpcy5wYXJlbnRNZW51JiZ0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKSx0aGlzLnN0eWxlLm9wYWNpdHk9IjAiLHRoaXMuc3R5bGUudHJhbnNmb3JtPSJzY2FsZSgwLjk1KSB0cmFuc2xhdGVZKC0xMHB4KSIsYXdhaXQgQXQuc21hcnRkZWxheS5kZWxheUZvcigxMDApLHRoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMpKX1hc3luYyBkZXN0cm95QWxsKCl7bGV0IGM9dGhpcztmb3IoO2MucGFyZW50TWVudTspYz1jLnBhcmVudE1lbnU7YXdhaXQgYy5kZXN0cm95KCl9c3RhdGlje0hEZShyLGEpfX07cmV0dXJuIGY9cn0pKCk7V3QuaW5pdGlhbGl6ZUdsb2JhbExpc3RlbmVyKCk7ZmUoKTt2YXIgQ0l0PWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0scURlPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSx3bzE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWRlbW93cmFwcGVyIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W107dmFyIGY9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe2F0dHJpYnV0ZTohMX0pXSxDSXQodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJydW5BZnRlclJlbmRlciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dT0+InJ1bkFmdGVyUmVuZGVyImluIHUsZ2V0OnU9PnUucnVuQWZ0ZXJSZW5kZXIsc2V0Oih1LGQpPT57dS5ydW5BZnRlclJlbmRlcj1kfX0sbWV0YWRhdGE6Y30scyxsKSxDSXQobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6Y30sbnVsbCxhKSxmPXI9ZS52YWx1ZSxjJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmN9KX0jZT1xRGUodGhpcyxzLHZvaWQgMCk7Z2V0IHJ1bkFmdGVyUmVuZGVyKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHJ1bkFmdGVyUmVuZGVyKGMpe3RoaXMuI2U9Y31zdGF0aWMgc3R5bGVzPVt0ZWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPHNsb3Q+PC9zbG90PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXtpZihhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLGF3YWl0IG5ldyBQcm9taXNlKGM9PnNldFRpbWVvdXQoYyw1MCkpLHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjAmJnRoaXMucnVuQWZ0ZXJSZW5kZXIpdHJ5e2F3YWl0IHRoaXMucnVuQWZ0ZXJSZW5kZXIodGhpcyl9Y2F0Y2goYyl7Y29uc29sZS5lcnJvcigiRXJyb3IgaW4gcnVuQWZ0ZXJSZW5kZXI6IixjKX19Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHFEZSh0aGlzLGwpfXN0YXRpY3txRGUocixhKX19O3JldHVybiBmPXJ9KSgpO2ZlKCk7dmFyIExJdD0oKT0+e2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtYXBwdWktYWN0aXZpdHlsb2ciKTtyZXR1cm4gc2V0VGltZW91dCgoKT0+e3QuYWRkTWFueShbe3R5cGU6ImxvZ2luIix1c2VyOiJKb2huIERvZSIsbWVzc2FnZToibG9nZ2VkIGluIGZyb20gQ2hyb21lIG9uIG1hY09TIn0se3R5cGU6ImNyZWF0ZSIsdXNlcjoiSm9obiBEb2UiLG1lc3NhZ2U6J2NyZWF0ZWQgYSBuZXcgcHJvamVjdCAiRnJvbnRlbmQgQXBwIid9LHt0eXBlOiJ1cGRhdGUiLHVzZXI6IkphbmUgU21pdGgiLG1lc3NhZ2U6InVwZGF0ZWQgQVBJIGRvY3VtZW50YXRpb24ifSx7dHlwZToidmlldyIsdXNlcjoiSm9obiBEb2UiLG1lc3NhZ2U6InZpZXdlZCBkYXNoYm9hcmQgYW5hbHl0aWNzIn0se3R5cGU6ImRlbGV0ZSIsdXNlcjoiQWRtaW4iLG1lc3NhZ2U6InJlbW92ZWQgZGVwcmVjYXRlZCBlbmRwb2ludCJ9LHt0eXBlOiJjdXN0b20iLHVzZXI6IlN5c3RlbSIsbWVzc2FnZToic2NoZWR1bGVkIGJhY2t1cCBjb21wbGV0ZWQiLGljb25OYW1lOiJsdWNpZGU6ZGF0YWJhc2UifSx7dHlwZToibG9nb3V0Iix1c2VyOiJBbGljZSBCcm93biIsbWVzc2FnZToibG9nZ2VkIG91dCJ9LHt0eXBlOiJjcmVhdGUiLHVzZXI6IkphbmUgU21pdGgiLG1lc3NhZ2U6ImNyZWF0ZWQgaW52b2ljZSAjMTIzNCJ9XSksdC5lbnRyaWVzJC5zdWJzY3JpYmUoZT0+e2NvbnNvbGUubG9nKCJBY3Rpdml0eSBsb2cgdXBkYXRlZDoiLGUubGVuZ3RoLCJlbnRyaWVzIil9KX0sMTAwKSxNYAogICAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICAgIDxzdHlsZT4KICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y0ZjRmNSIsIiMwOTA5MGIiKX07CiAgICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICAgICR7dH0KICAgICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYH07ZmUoKTtTdCgpO0Z0KCk7QmUoKTt2YXIgR1U9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxxbD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sTW8xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1hcHB1aS1hY3Rpdml0eWxvZyIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdO3ZhciBiPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgeD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtsZSgpXSxmPVtsZSgpXSxkPVtsZSgpXSxHVSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImVudHJpZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJlbnRyaWVzImluIG0sZ2V0Om09Pm0uZW50cmllcyxzZXQ6KG0sdik9PnttLmVudHJpZXM9dn19LG1ldGFkYXRhOnh9LHMsbCksR1UodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWFyY2hRdWVyeSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+InNlYXJjaFF1ZXJ5ImluIG0sZ2V0Om09Pm0uc2VhcmNoUXVlcnksc2V0OihtLHYpPT57bS5zZWFyY2hRdWVyeT12fX0sbWV0YWRhdGE6eH0sYyx1KSxHVSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImZpbHRlckNyaXRlcmlhIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4iZmlsdGVyQ3JpdGVyaWEiaW4gbSxnZXQ6bT0+bS5maWx0ZXJDcml0ZXJpYSxzZXQ6KG0sdik9PnttLmZpbHRlckNyaXRlcmlhPXZ9fSxtZXRhZGF0YTp4fSxoLGcpLEdVKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOnh9LG51bGwsYSksYj1yPWUudmFsdWUseCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp4fSl9c3RhdGljIGRlbW89TEl0O3N0YXRpYyBkZW1vR3JvdXA9IkFwcCBVSSI7I2U9cWwodGhpcyxzLFtdKTtnZXQgZW50cmllcygpe3JldHVybiB0aGlzLiNlfXNldCBlbnRyaWVzKHgpe3RoaXMuI2U9eH0jdD0ocWwodGhpcyxsKSxxbCh0aGlzLGMsIiIpKTtnZXQgc2VhcmNoUXVlcnkoKXtyZXR1cm4gdGhpcy4jdH1zZXQgc2VhcmNoUXVlcnkoeCl7dGhpcy4jdD14fSNhPShxbCh0aGlzLHUpLHFsKHRoaXMsaCx7fSkpO2dldCBmaWx0ZXJDcml0ZXJpYSgpe3JldHVybiB0aGlzLiNhfXNldCBmaWx0ZXJDcml0ZXJpYSh4KXt0aGlzLiNhPXh9ZW50cmllcyQ9KHFsKHRoaXMsZyksbmV3IEF0LnNtYXJ0cngucnhqcy5TdWJqZWN0KTtzdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIDpob3N0IHsKICAgICAgICAvKiBDU1MgVmFyaWFibGVzIGFsaWduZWQgd2l0aCBzZWNvbmRhcnkgbWVudSAqLwogICAgICAgIC0tYWN0aXZpdHlsb2ctYmc6ICR7cC5iZFRoZW1lKCIjZmFmYWZhIiwiIzBhMGEwYSIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWZnOiAke3AuYmRUaGVtZSgiIzUyNTI1MiIsIiNhM2EzYTMiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1mZy1tdXRlZDogJHtwLmJkVGhlbWUoIiM3MzczNzMiLCIjNzM3MzczIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctZmctYWN0aXZlOiAke3AuYmRUaGVtZSgiIzBhMGEwYSIsIiNmYWZhZmEiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1ib3JkZXI6ICR7cC5iZFRoZW1lKCIjZTVlNWU1IiwiIzFhMWExYSIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWhvdmVyOiAke3AuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1hY2NlbnQ6ICR7cC5iZFRoZW1lKCIjNzg3MTZjIiwiI2I1YTk5YSIpfTsKCiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWJnKTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1hY3Rpdml0eWxvZy1ib3JkZXIpOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDI4MHB4OwogICAgICB9CgogICAgICAvKiBIZWFkZXIgd2l0aCBzdHJlYW1pbmcgaW5kaWNhdG9yICovCiAgICAgIC50b3BiYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWN0aXZpdHlsb2ctYmcpOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hY3Rpdml0eWxvZy1ib3JkZXIpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLnRvcGJhciAuaGVhZGluZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5saXZlLWluZGljYXRvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICB9CgogICAgICAubGl2ZS1pbmRpY2F0b3IgLmRvdCB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzIyYzU1ZSIsIiMyMmM1NWUiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGFuaW1hdGlvbjogcHVsc2UgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcHVsc2UgewogICAgICAgIDAlLCAxMDAlIHsgb3BhY2l0eTogMC41OyB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7IH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7IH0KICAgICAgfQoKICAgICAgLyogQWN0aXZpdHkgY29udGFpbmVyICovCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDhweDsKICAgICAgICBib3R0b206IDQ4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKICAgICAgICBzY3JvbGxiYXItY29sb3I6ICR7cC5iZFRoZW1lKCIjZDRkNGQ0IiwiIzMzMzMzMyIpfSB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5Q29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5Q29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZDRkNGQ0IiwiIzMzMzMzMyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjYTNhM2EzIiwiIzUyNTI1MiIpfTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQwcHggMTZweDsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICB9CgogICAgICAvKiBEYXRlIHNlcGFyYXRvciAtIHdhcm0gdGF1cGUgc3R5bGluZyAqLwogICAgICAuZGF0ZS1zZXBhcmF0b3IgewogICAgICAgIHBhZGRpbmc6IDEycHggMTJweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWFjY2VudCk7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY3Rpdml0eWxvZy1iZyk7CiAgICAgIH0KCiAgICAgIC8qIEFjdGl2aXR5IGVudHJ5IC0gbW9kZXJuIHN0YWNrZWQgbGF5b3V0ICovCiAgICAgIC5hY3Rpdml0eWVudHJ5IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgbWFyZ2luOiAycHggNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgICBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2Utb3V0OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmFjdGl2aXR5ZW50cnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWhvdmVyKTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24gewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNCkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmxvZ2luIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgzNCwgMTk3LCA5NCwgMC4wOCkiLCJyZ2JhKDM0LCAxOTcsIDk0LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMxNmEzNGEiLCIjNGFkZTgwIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi5sb2dvdXQgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjA4KSIsInJnYmEoMjM5LCA2OCwgNjgsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiI2RjMjYyNiIsIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLnZpZXcgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wOCkiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMjU2M2ViIiwiIzYwYTVmYSIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24uY3JlYXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgxNjgsIDg1LCAyNDcsIDAuMDgpIiwicmdiYSgxNjgsIDg1LCAyNDcsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzkzMzNlYSIsIiNjMDg0ZmMiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLnVwZGF0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMjUxLCAxNDYsIDYwLCAwLjA4KSIsInJnYmEoMjUxLCAxNDYsIDYwLCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiNlYTU4MGMiLCIjZmI5MjNjIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi5kZWxldGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjA4KSIsInJnYmEoMjM5LCA2OCwgNjgsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiI2RjMjYyNiIsIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmN1c3RvbSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMTAwLCAxMTYsIDEzOSwgMC4wOCkiLCJyZ2JhKDEwMCwgMTE2LCAxMzksIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzQ3NTU2OSIsIiM5NGEzYjgiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXVzZXIgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1hY3RpdmUpOwogICAgICB9CgogICAgICAuYWN0aXZpdHktc2VwYXJhdG9yIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQoKICAgICAgLnRpbWVzdGFtcCB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LW1lc3NhZ2UgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZyk7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLyogU2VhcmNoIGJveCAtIHJlZmluZWQgc3R5bGluZyAqLwogICAgICAuc2VhcmNoYm94IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWJnKTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYWN0aXZpdHlsb2ctYm9yZGVyKTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuc2VhcmNoLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDEwcHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hib3ggaW5wdXQgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1hY3RpdmUpOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDMpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSIpfTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wOCkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHggMCAzNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuc2VhcmNoYm94IGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLnNlYXJjaGJveCBpbnB1dDpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjAyKSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtd3JhcHBlcjpoYXMoaW5wdXQ6Zm9jdXMpIC5zZWFyY2gtaWNvbiB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnKTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7bGV0IHg9dGhpcy5nZXRGaWx0ZXJlZEVudHJpZXMoKSxtPXRoaXMuZ3JvdXBFbnRyaWVzQnlEYXRlKHgpO3JldHVybiBNYAogICAgICAke2MxLnN0eWxlc30KICAgICAgPHN0eWxlPjwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIj5BY3Rpdml0eSBMb2c8L2Rpdj4KICAgICAgICAgICR7eC5sZW5ndGg+MD9NYDxkaXYgY2xhc3M9ImxpdmUtaW5kaWNhdG9yIj48c3BhbiBjbGFzcz0iZG90Ij48L3NwYW4+TGl2ZTwvZGl2PmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHlDb250YWluZXIiPgogICAgICAgICAgJHt4Lmxlbmd0aD09PTA/TWA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+Tm8gYWN0aXZpdHkgZW50cmllczwvZGl2PmA6bS5tYXAodj0+TWAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0ZS1zZXBhcmF0b3IiPiR7di5sYWJlbH08L2Rpdj4KICAgICAgICAgICAgICAgICAgJHt2LmVudHJpZXMubWFwKHk9PnRoaXMucmVuZGVyQWN0aXZpdHlFbnRyeSh5KSl9CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hib3giPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJzZWFyY2gtaWNvbiIgLmljb249JHsibHVjaWRlOnNlYXJjaCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggYWN0aXZpdGllcywgdXNlcnMuLi4iCiAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5zZWFyY2hRdWVyeX0KICAgICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZVNlYXJjaElucHV0fQogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJBY3Rpdml0eUVudHJ5KHgpe2xldCBtPXgudGltZXN0YW1wfHxuZXcgRGF0ZSx2PXRoaXMuZm9ybWF0VGltZShtKSx5PXguaWNvbk5hbWV8fHRoaXMuZ2V0SWNvbkZvclR5cGUoeC50eXBlKTtyZXR1cm4gTWAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJhY3Rpdml0eWVudHJ5IgogICAgICAgIEBjb250ZXh0bWVudT0ke3c9PnRoaXMuaGFuZGxlQ29udGV4dE1lbnUodyx4KX0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5LWljb24gJHt4LnR5cGV9Ij4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHt5fT48L2RlZXMtaWNvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eS1jb250ZW50Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5LWhlYWRlciI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eS11c2VyIj4ke3gudXNlcn08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eS1zZXBhcmF0b3IiPsK3PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZXN0YW1wIj4ke3Z9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eS1tZXNzYWdlIj4ke3gubWVzc2FnZX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWFkZCh4KXtsZXQgbT17Li4ueCxpZDp4LmlkfHx0aGlzLmdlbmVyYXRlSWQoKSx0aW1lc3RhbXA6eC50aW1lc3RhbXB8fG5ldyBEYXRlfTt0aGlzLmVudHJpZXM9W20sLi4udGhpcy5lbnRyaWVzXSx0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKX1hZGRNYW55KHgpe2xldCBtPXgubWFwKHY9Pih7Li4udixpZDp2LmlkfHx0aGlzLmdlbmVyYXRlSWQoKSx0aW1lc3RhbXA6di50aW1lc3RhbXB8fG5ldyBEYXRlfSkpO3RoaXMuZW50cmllcz1bLi4ubS5yZXZlcnNlKCksLi4udGhpcy5lbnRyaWVzXSx0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKX1jbGVhcigpe3RoaXMuZW50cmllcz1bXSx0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKX1nZXRFbnRyaWVzKCl7cmV0dXJuWy4uLnRoaXMuZW50cmllc119ZmlsdGVyKHgpe3JldHVybiB0aGlzLmVudHJpZXMuZmlsdGVyKG09PiEoeC51c2VyJiZtLnVzZXIhPT14LnVzZXJ8fHgudHlwZSYmbS50eXBlIT09eC50eXBlKSl9c2VhcmNoKHgpe2xldCBtPXgudG9Mb3dlckNhc2UoKTtyZXR1cm4gdGhpcy5lbnRyaWVzLmZpbHRlcih2PT52Lm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhtKXx8di51c2VyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobSkpfWdlbmVyYXRlSWQoKXtyZXR1cm5gYWN0aXZpdHktJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpfWB9Z2V0RmlsdGVyZWRFbnRyaWVzKCl7bGV0IHg9dGhpcy5lbnRyaWVzO2lmKHRoaXMuc2VhcmNoUXVlcnkpe2xldCBtPXRoaXMuc2VhcmNoUXVlcnkudG9Mb3dlckNhc2UoKTt4PXguZmlsdGVyKHY9PnYubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG0pfHx2LnVzZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhtKSl9cmV0dXJuKHRoaXMuZmlsdGVyQ3JpdGVyaWEudXNlcnx8dGhpcy5maWx0ZXJDcml0ZXJpYS50eXBlKSYmKHg9eC5maWx0ZXIobT0+ISh0aGlzLmZpbHRlckNyaXRlcmlhLnVzZXImJm0udXNlciE9PXRoaXMuZmlsdGVyQ3JpdGVyaWEudXNlcnx8dGhpcy5maWx0ZXJDcml0ZXJpYS50eXBlJiZtLnR5cGUhPT10aGlzLmZpbHRlckNyaXRlcmlhLnR5cGUpKSkseH1ncm91cEVudHJpZXNCeURhdGUoeCl7bGV0IG09bmV3IE1hcCx2PW5ldyBEYXRlLHk9bmV3IERhdGUodik7eS5zZXREYXRlKHkuZ2V0RGF0ZSgpLTEpO2ZvcihsZXQgdyBvZiB4KXtsZXQgRT13LnRpbWVzdGFtcHx8bmV3IERhdGUsQzt0aGlzLmlzU2FtZURheShFLHYpP0M9IlRvZGF5Ijp0aGlzLmlzU2FtZURheShFLHkpP0M9Illlc3RlcmRheSI6Qz1FLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tVVMiLHttb250aDoic2hvcnQiLGRheToibnVtZXJpYyIseWVhcjpFLmdldEZ1bGxZZWFyKCkhPT12LmdldEZ1bGxZZWFyKCk/Im51bWVyaWMiOnZvaWQgMH0pLG0uaGFzKEMpfHxtLnNldChDLFtdKSxtLmdldChDKS5wdXNoKHcpfXJldHVybiBBcnJheS5mcm9tKG0uZW50cmllcygpKS5tYXAoKFt3LEVdKT0+KHtsYWJlbDp3LGVudHJpZXM6RX0pKX1pc1NhbWVEYXkoeCxtKXtyZXR1cm4geC5nZXRGdWxsWWVhcigpPT09bS5nZXRGdWxsWWVhcigpJiZ4LmdldE1vbnRoKCk9PT1tLmdldE1vbnRoKCkmJnguZ2V0RGF0ZSgpPT09bS5nZXREYXRlKCl9Zm9ybWF0VGltZSh4KXtyZXR1cm4geC50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIix7aG91cjoiMi1kaWdpdCIsbWludXRlOiIyLWRpZ2l0Iixob3VyMTI6ITF9KX1nZXRJY29uRm9yVHlwZSh4KXtsZXQgbT17bG9naW46Imx1Y2lkZTpsb2dJbiIsbG9nb3V0OiJsdWNpZGU6bG9nT3V0Iix2aWV3OiJsdWNpZGU6ZXllIixjcmVhdGU6Imx1Y2lkZTpwbHVzIix1cGRhdGU6Imx1Y2lkZTplZGl0IixkZWxldGU6Imx1Y2lkZTp0cmFzaDIiLGN1c3RvbToibHVjaWRlOmFjdGl2aXR5In07cmV0dXJuIG1beF18fG0uY3VzdG9tfWhhbmRsZVNlYXJjaElucHV0KHgpe2xldCBtPXgudGFyZ2V0O3RoaXMuc2VhcmNoUXVlcnk9bS52YWx1ZX1oYW5kbGVDb250ZXh0TWVudSh4LG0pe3gucHJldmVudERlZmF1bHQoKSxXdC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyh4LFt7bmFtZToiQ29weSBhY3Rpdml0eSIsaWNvbk5hbWU6Imx1Y2lkZTpjb3B5IixhY3Rpb246YXN5bmMoKT0+e2F3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGAke20udXNlcn0gJHttLm1lc3NhZ2V9YCl9fSx7bmFtZToiRmlsdGVyIGJ5IHVzZXIiLGljb25OYW1lOiJsdWNpZGU6dXNlciIsYWN0aW9uOmFzeW5jKCk9Pnt0aGlzLmZpbHRlckNyaXRlcmlhPXt1c2VyOm0udXNlcn19fSx7bmFtZToiRmlsdGVyIGJ5IHR5cGUiLGljb25OYW1lOiJsdWNpZGU6ZmlsdGVyIixhY3Rpb246YXN5bmMoKT0+e3RoaXMuZmlsdGVyQ3JpdGVyaWE9e3R5cGU6bS50eXBlfX19LHtuYW1lOiJDbGVhciBmaWx0ZXJzIixpY29uTmFtZToibHVjaWRlOngiLGFjdGlvbjphc3luYygpPT57dGhpcy5maWx0ZXJDcml0ZXJpYT17fSx0aGlzLnNlYXJjaFF1ZXJ5PSIifX1dKX1zdGF0aWN7cWwocixhKX19O3JldHVybiBiPXJ9KSgpO2ZlKCk7dmFyIFRJdD0oKT0+e2xldCB0PVt7bmFtZToiRmlsZSIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJOZXcgRmlsZSIsc2hvcnRjdXQ6IkNtZCtOIixpY29uTmFtZToiZmlsZS1wbHVzIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk5ldyBmaWxlIil9LHtuYW1lOiJPcGVuLi4uIixzaG9ydGN1dDoiQ21kK08iLGljb25OYW1lOiJmb2xkZXItb3BlbiIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJPcGVuIil9LHtuYW1lOiJPcGVuIFJlY2VudCIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJwcm9qZWN0LWFscGhhLnRzIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gcmVjZW50IDEiKX0se25hbWU6ImNvbmZpZy5qc29uIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gcmVjZW50IDIiKX0se25hbWU6InJlYWRtZS5tZCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJPcGVuIHJlY2VudCAzIil9XX0se2RpdmlkZXI6ITB9LHtuYW1lOiJTYXZlIixzaG9ydGN1dDoiQ21kK1MiLGljb25OYW1lOiJzYXZlIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNhdmUiKX0se25hbWU6IlNhdmUgQXMuLi4iLHNob3J0Y3V0OiJDbWQrU2hpZnQrUyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJTYXZlIGFzIiksZGlzYWJsZWQ6ITB9LHtkaXZpZGVyOiEwfSx7bmFtZToiRXhpdCIsc2hvcnRjdXQ6IkNtZCtRIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkV4aXQiKX1dfSx7bmFtZToiRWRpdCIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJVbmRvIixzaG9ydGN1dDoiQ21kK1oiLGljb25OYW1lOiJ1bmRvIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlVuZG8iKX0se25hbWU6IlJlZG8iLHNob3J0Y3V0OiJDbWQrU2hpZnQrWiIsaWNvbk5hbWU6InJlZG8iLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiUmVkbyIpfSx7ZGl2aWRlcjohMH0se25hbWU6IkN1dCIsc2hvcnRjdXQ6IkNtZCtYIixpY29uTmFtZToic2Npc3NvcnMiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiQ3V0Iil9LHtuYW1lOiJDb3B5IixzaG9ydGN1dDoiQ21kK0MiLGljb25OYW1lOiJjb3B5IixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkNvcHkiKX0se25hbWU6IlBhc3RlIixzaG9ydGN1dDoiQ21kK1YiLGljb25OYW1lOiJjbGlwYm9hcmQiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiUGFzdGUiKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJGaW5kIixzaG9ydGN1dDoiQ21kK0YiLGljb25OYW1lOiJzZWFyY2giLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiRmluZCIpfSx7bmFtZToiUmVwbGFjZSIsc2hvcnRjdXQ6IkNtZCtIIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlJlcGxhY2UiKX1dfSx7bmFtZToiVmlldyIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJUb2dnbGUgRnVsbHNjcmVlbiIsc2hvcnRjdXQ6IkYxMSIsaWNvbk5hbWU6ImV4cGFuZCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJGdWxsc2NyZWVuIil9LHtuYW1lOiJab29tIEluIixzaG9ydGN1dDoiQ21kKysiLGljb25OYW1lOiJ6b29tLWluIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlpvb20gaW4iKX0se25hbWU6Ilpvb20gT3V0IixzaG9ydGN1dDoiQ21kKy0iLGljb25OYW1lOiJ6b29tLW91dCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJab29tIG91dCIpfSx7bmFtZToiUmVzZXQgWm9vbSIsc2hvcnRjdXQ6IkNtZCswIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlJlc2V0IHpvb20iKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJUb2dnbGUgU2lkZWJhciIsc2hvcnRjdXQ6IkNtZCtCIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlRvZ2dsZSBzaWRlYmFyIil9LHtuYW1lOiJUb2dnbGUgVGVybWluYWwiLHNob3J0Y3V0OiJDbWQrSiIsaWNvbk5hbWU6InRlcm1pbmFsIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlRvZ2dsZSB0ZXJtaW5hbCIpfV19LHtuYW1lOiJIZWxwIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6IkRvY3VtZW50YXRpb24iLGljb25OYW1lOiJib29rIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkRvY3VtZW50YXRpb24iKX0se25hbWU6IlJlbGVhc2UgTm90ZXMiLGljb25OYW1lOiJmaWxlLXRleHQiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiUmVsZWFzZSBub3RlcyIpfSx7ZGl2aWRlcjohMH0se25hbWU6IlJlcG9ydCBJc3N1ZSIsaWNvbk5hbWU6ImJ1ZyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJSZXBvcnQgaXNzdWUiKX0se25hbWU6IkFib3V0IixpY29uTmFtZToiaW5mbyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJBYm91dCIpfV19XTtyZXR1cm4gTWAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIGU9PntsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIiNhcHBiYXIiKSxyPWUucXVlcnlTZWxlY3RvckFsbCgiLnN0YXR1cy10b2dnbGUgZGVlcy1idXR0b24iKTtyWzBdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2EudXNlcj17Li4uYS51c2VyLHN0YXR1czoib25saW5lIn19KSxyWzFdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2EudXNlcj17Li4uYS51c2VyLHN0YXR1czoiYnVzeSJ9fSksclsyXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PnthLnVzZXI9ey4uLmEudXNlcixzdGF0dXM6ImF3YXkifX0pLHJbM10uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57YS51c2VyPXsuLi5hLnVzZXIsc3RhdHVzOiJvZmZsaW5lIn19KSxlLnF1ZXJ5U2VsZWN0b3IoIi53aW5kb3ctY29udHJvbHMtdG9nZ2xlIGRlZXMtYnV0dG9uIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57YS5zaG93V2luZG93Q29udHJvbHM9IWEuc2hvd1dpbmRvd0NvbnRyb2xzfSk7bGV0IG89ZS5xdWVyeVNlbGVjdG9yQWxsKCIuYnJlYWRjcnVtYi10b2dnbGUgZGVlcy1idXR0b24iKTtvWzBdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2EuYnJlYWRjcnVtYnM9IkhvbWUgPiBEb2N1bWVudHMgPiBQcm9qZWN0cyA+IE15QXBwID4gc3JjID4gaW5kZXgudHMifSksb1sxXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PnthLmJyZWFkY3J1bWJzPSJEYXNoYm9hcmQifSl9fT4KICAgICAgPHN0eWxlPgogICAgICAgICR7dGVgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbnRlbnQgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBjb2xvcjogI2NjYzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbnRyb2xzIHsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbC1ncm91cCBsYWJlbCB7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLWFwcHVpLWFwcGJhcgogICAgICAgIGlkPSJhcHBiYXIiCiAgICAgICAgLm1lbnVJdGVtcz0ke3R9CiAgICAgICAgLmJyZWFkY3J1bWJzPSR7IlByb2plY3QgPiBzcmMgPiBjb21wb25lbnRzID4gQXBwQmFyLnRzIn0KICAgICAgICAuYnJlYWRjcnVtYlNlcGFyYXRvcj0keyIgPiAifQogICAgICAgIC5zaG93V2luZG93Q29udHJvbHM9JHshMH0KICAgICAgICAuc2hvd1NlYXJjaD0keyEwfQogICAgICAgIC50aGVtZT0keyJkYXJrIn0KICAgICAgICAudXNlcj0ke3tuYW1lOiJKb2huIERvZSIsc3RhdHVzOiJvbmxpbmUifX0KICAgICAgICBAbWVudS1zZWxlY3Q9JHtlPT5jb25zb2xlLmxvZygiTWVudSBzZWxlY3RlZDoiLGUuZGV0YWlsLml0ZW0pfQogICAgICAgIEBicmVhZGNydW1iLW5hdmlnYXRlPSR7ZT0+Y29uc29sZS5sb2coIkJyZWFkY3J1bWIgY2xpY2tlZDoiLGUuZGV0YWlsKX0KICAgICAgICBAc2VhcmNoLWNsaWNrPSR7KCk9PmNvbnNvbGUubG9nKCJTZWFyY2ggY2xpY2tlZCIpfQogICAgICAgIEB1c2VyLW1lbnUtb3Blbj0keygpPT5jb25zb2xlLmxvZygiVXNlciBtZW51IGNsaWNrZWQiKX0KICAgICAgPjwvZGVlcy1hcHB1aS1hcHBiYXI+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICA8aDI+QXBwIEJhciBEZW1vPC9oMj4KICAgICAgICA8cD5UaGlzIGRlbW8gc2hvd3MgdmFyaW91cyBmZWF0dXJlcyBvZiB0aGUgYXBwIGJhciBjb21wb25lbnQ6PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT5EeW5hbWljIG1lbnUgaXRlbXMgd2l0aCBpY29ucywgc2hvcnRjdXRzLCBhbmQgc3VibWVudXM8L2xpPgogICAgICAgICAgPGxpPkJyZWFkY3J1bWIgbmF2aWdhdGlvbjwvbGk+CiAgICAgICAgICA8bGk+VXNlciBhY2NvdW50IHNlY3Rpb24gd2l0aCBzdGF0dXMgaW5kaWNhdG9yPC9saT4KICAgICAgICAgIDxsaT5TZWFyY2ggaWNvbjwvbGk+CiAgICAgICAgICA8bGk+V2luZG93IGNvbnRyb2xzIChwbGF0Zm9ybS1zcGVjaWZpYyk8L2xpPgogICAgICAgICAgPGxpPkRhcmsvbGlnaHQgdGhlbWUgc3VwcG9ydDwvbGk+CiAgICAgICAgICA8bGk+S2V5Ym9hcmQgbmF2aWdhdGlvbiAoVGFiLCBFbnRlciwgRXNjYXBlKTwvbGk+CiAgICAgICAgICA8bGk+Q3VzdG9tIGV2ZW50cyBmb3IgYWxsIGludGVyYWN0aW9uczwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+CiAgICAgICAgICA8bGFiZWw+VGhlbWU8L2xhYmVsPgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGNsYXNzPSJ0aGVtZS10b2dnbGUiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RGFyazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5MaWdodDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgogICAgICAgICAgPGxhYmVsPlVzZXIgU3RhdHVzPC9sYWJlbD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBjbGFzcz0ic3RhdHVzLXRvZ2dsZSI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PbmxpbmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+QnVzeTwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Bd2F5PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPk9mZmxpbmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4KICAgICAgICAgIDxsYWJlbD5XaW5kb3cgQ29udHJvbHM8L2xhYmVsPgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGNsYXNzPSJ3aW5kb3ctY29udHJvbHMtdG9nZ2xlIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlRvZ2dsZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgogICAgICAgICAgPGxhYmVsPkJyZWFkY3J1bWJzPC9sYWJlbD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBjbGFzcz0iYnJlYWRjcnVtYi10b2dnbGUiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+TG9uZyBQYXRoPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlNob3J0IFBhdGg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgfTtmZSgpO3ZhciBfSXQ9W3AuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgOmhvc3QgewogICAgICAgIC8qIENTUyBWYXJpYWJsZXMgZm9yIHRoZW1pbmcgKi8KICAgICAgICAtLWFwcGJhci1oZWlnaHQ6IDQwcHg7CiAgICAgICAgLS1hcHBiYXItZm9udC1zaXplOiAxMnB4OwogICAgICAgIAogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWFwcGJhci1oZWlnaHQpOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2UwZTBlMCIsIiMyMDIwMjAiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzAwMDAwMDgwIiwiI2ZmZmZmZjgwIil9OwogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tYXBwYmFyLWZvbnQtc2l6ZSk7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1dG87CiAgICAgICAgLXdlYmtpdC1hcHAtcmVnaW9uOiBkcmFnOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAubWVudXMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDBweCAxMnB4OwogICAgICAgIG1hcmdpbjogOHB4IDBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgLXdlYmtpdC1hcHAtcmVnaW9uOiBuby1kcmFnOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAvKiBPcHRpb25hbDogU3R5bGUgZm9yIG1lbnUgaXRlbXMgd2l0aCBpY29ucyAobm90IHR5cGljYWxseSB1c2VkIGZvciB0b3AtbGV2ZWwgaXRlbXMpICovCiAgICAgIC5tZW51SXRlbSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiMwMDAwMDAxMCIsIiNmZmZmZmYyMCIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwMDAwMDAiLCIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzAwMDAwMDIwIiwiI2ZmZmZmZjMwIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzAwMDAwMCIsIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbVtkaXNhYmxlZF0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW06Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7cC5iZFRoZW1lKCIjMDAwMDAwODAiLCIjZmZmZmZmODAiKX07CiAgICAgIH0KCgogICAgICAvKiBEcm9wZG93biBzdHlsZXMgKi8KICAgICAgLmRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMwMDAwMDAiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlMGUwZTAiLCIjMjAyMDIwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAke3AuYmRUaGVtZSgiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpIiwiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgdHJhbnNmb3JtIDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi5vcGVuIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbTpob3ZlciwKICAgICAgLmRyb3Bkb3duLWl0ZW0uZm9jdXNlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiMwMDAwMDAxMCIsIiNmZmZmZmYyMCIpfTsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWRpdmlkZXIgewogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZTBlMGUwIiwiIzIwMjAyMCIpfTsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbVtkaXNhYmxlZF0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbSAuc2hvcnRjdXQgewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC8qIEJyZWFkY3J1bWJzICovCiAgICAgIC5icmVhZGNydW1icyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYnJlYWRjcnVtYi1pdGVtIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwMDAwMDA4MCIsIiNmZmZmZmY4MCIpfTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4yczsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItaXRlbTpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDAwMDAwIiwiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItc2VwYXJhdG9yIHsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLyogQWNjb3VudCBzZWN0aW9uICovCiAgICAgIC5hY2NvdW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CgogICAgICAuc2VhcmNoLWljb24gewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgICB9CgogICAgICAuc2VhcmNoLWljb246aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC51c2VyLWluZm8gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CgogICAgICAudXNlci1pbmZvOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzAwMDAwMDEwIiwiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICAudXNlci1hdmF0YXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjMDAwMDAwMjAiLCIjZmZmZmZmMzAiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQoKICAgICAgLnVzZXItYXZhdGFyIGltZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAtMnB4OwogICAgICAgIHJpZ2h0OiAtMnB4OwogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzAwMDAwMCIpfTsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLm9ubGluZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzRjYWY1MDsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLm9mZmxpbmUgewogICAgICAgIGJhY2tncm91bmQ6ICM3NTc1NzU7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5idXN5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjQ0MzM2OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMuYXdheSB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmOTgwMDsKICAgICAgfQoKICAgICAgLyogQWN0aXZpdHkgbG9nIHRvZ2dsZSBidXR0b24gKi8KICAgICAgLmFjdGl2aXR5LXRvZ2dsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMnB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtYXBwLXJlZ2lvbjogbm8tZHJhZzsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwMDAwMDA2MCIsIiNmZmZmZmY2MCIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWN0aXZpdHktdG9nZ2xlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzAwMDAwMDEwIiwiI2ZmZmZmZjE1Iil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzAwMDAwMCIsIiNmZmZmZmYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXRvZ2dsZS5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjMDAwMDAwMTUiLCIjZmZmZmZmMjAiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDAwMDAwIiwiI2ZmZmZmZiIpfTsKICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYWN0aXZpdHktdG9nZ2xlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuYWN0aXZpdHktYmFkZ2UgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICAgIG1pbi13aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiM1MjUyNTIiLCIjNTI1MjUyIil9OwogICAgICAgIGNvbG9yOiAjZmFmYWZhOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIH0KICAgIGBdO2ZlKCk7dmFyIEFJdD10PT5NYAogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVzIj4KICAgICAgICAgICR7dC5zaG93V2luZG93Q29udHJvbHM/TWA8ZGVlcy13aW5kb3djb250cm9scz48L2RlZXMtd2luZG93Y29udHJvbHM+YDoiIn0KICAgICAgICAgICR7dC5yZW5kZXJNZW51SXRlbXMoKX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJicmVhZGNydW1icyI+CiAgICAgICAgICAke3QucmVuZGVyQnJlYWRjcnVtYnMoKX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY2NvdW50Ij4KICAgICAgICAgICR7dC5yZW5kZXJBY2NvdW50U2VjdGlvbigpfQogICAgICAgIDwvZGl2PgogICAgICBgO2ZlKCk7QmUoKTt2YXIgVkRlPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sZkk9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LHpvMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtd2luZG93Y29udHJvbHMiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXTt2YXIgZD1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGg9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7cmVmbGVjdDohMH0pXSxmPVtEKHtyZWZsZWN0OiEwfSldLFZEZSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InR5cGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJ0eXBlImluIGcsZ2V0Omc9PmcudHlwZSxzZXQ6KGcsYik9PntnLnR5cGU9Yn19LG1ldGFkYXRhOmh9LHMsbCksVkRlKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicG9zaXRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJwb3NpdGlvbiJpbiBnLGdldDpnPT5nLnBvc2l0aW9uLHNldDooZyxiKT0+e2cucG9zaXRpb249Yn19LG1ldGFkYXRhOmh9LGMsdSksVkRlKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOmh9LG51bGwsYSksZD1yPWUudmFsdWUsaCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpofSl9c3RhdGljIGRlbW89KCk9Pk1gPGRlZXMtd2luZG93Y29udHJvbHM+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPmA7I2U9ZkkodGhpcyxzLCJtYWMiKTtnZXQgdHlwZSgpe3JldHVybiB0aGlzLiNlfXNldCB0eXBlKGgpe3RoaXMuI2U9aH0jdD0oZkkodGhpcyxsKSxmSSh0aGlzLGMsImxlZnQiKSk7Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHBvc2l0aW9uKGgpe3RoaXMuI3Q9aH1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDE2cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIGRpdiB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICMyMjIyMjI7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyBkaXYuY2xvc2UgewogICAgICAgIGJhY2tncm91bmQ6ICNmZjVmNTc7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4OwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2LnRvRG9jayB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmYmQyZTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyBkaXYubWluTWF4IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMjdjOTNmOwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMzMzMzMzOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgJHt0aGlzLnR5cGU9PT0ibWFjIiYmdGhpcy5wb3NpdGlvbj09PSJsZWZ0Inx8KHRoaXMudHlwZT09PSJsaW51eCJ8fHRoaXMudHlwZT09PSJ3aW5kb3dzIikmJnRoaXMucG9zaXRpb249PT0icmlnaHQiP01gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IndpbmRvd0NvbnRyb2xzIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjbG9zZSI+PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9Eb2NrIj48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtaW5NYXgiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6TWBgfQogICAgYH1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZkkodGhpcyx1KX1zdGF0aWN7ZkkocixhKX19O3JldHVybiBkPXJ9KSgpO2ZlKCk7QmUoKTt2YXIgdUk9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxxaT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sa28xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24iKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXTt2YXIgdj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IHk9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpPYmplY3R9KV0sZj1bRCh7dHlwZTpBcnJheX0pXSxkPVtEKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMH0pXSxiPVtEKHt0eXBlOlN0cmluZ30pXSx1SSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InVzZXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnc9PiJ1c2VyImluIHcsZ2V0Onc9PncudXNlcixzZXQ6KHcsRSk9Pnt3LnVzZXI9RX19LG1ldGFkYXRhOnl9LHMsbCksdUkodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtZW51SXRlbXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnc9PiJtZW51SXRlbXMiaW4gdyxnZXQ6dz0+dy5tZW51SXRlbXMsc2V0Oih3LEUpPT57dy5tZW51SXRlbXM9RX19LG1ldGFkYXRhOnl9LGMsdSksdUkodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc09wZW4iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnc9PiJpc09wZW4iaW4gdyxnZXQ6dz0+dy5pc09wZW4sc2V0Oih3LEUpPT57dy5pc09wZW49RX19LG1ldGFkYXRhOnl9LGgsZyksdUkodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwb3NpdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+InBvc2l0aW9uImluIHcsZ2V0Onc9PncucG9zaXRpb24sc2V0Oih3LEUpPT57dy5wb3NpdGlvbj1FfX0sbWV0YWRhdGE6eX0seCxtKSx1SShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTp5fSxudWxsLGEpLHY9cj1lLnZhbHVlLHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6eX0pfXN0YXRpYyBkZW1vPSgpPT5NYAogICAgPGRlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duCiAgICAgIC51c2VyPSR7e25hbWU6IkpvaG4gRG9lIixlbWFpbDoiam9obi5kb2VAZXhhbXBsZS5jb20iLGF2YXRhcjoiaHR0cHM6Ly9yYW5kb211c2VyLm1lL2FwaS9wb3J0cmFpdHMvbWVuLzEuanBnIixzdGF0dXM6Im9ubGluZSJ9fQogICAgICAubWVudUl0ZW1zPSR7W3tuYW1lOiJQcm9maWxlIFNldHRpbmdzIixpY29uTmFtZToidXNlciIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJQcm9maWxlIil9LHtuYW1lOiJBY2NvdW50IixpY29uTmFtZToic2V0dGluZ3MiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiQWNjb3VudCIpfSx7ZGl2aWRlcjohMH0se25hbWU6IkhlbHAgJiBTdXBwb3J0IixpY29uTmFtZToiaGVscENpcmNsZSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJIZWxwIil9LHtuYW1lOiJLZXlib2FyZCBTaG9ydGN1dHMiLGljb25OYW1lOiJrZXlib2FyZCIsc2hvcnRjdXQ6IkNtZCtLIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNob3J0Y3V0cyIpfSx7ZGl2aWRlcjohMH0se25hbWU6IlNpZ24gT3V0IixpY29uTmFtZToibG9nT3V0IixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNpZ24gb3V0Iil9XX0KICAgICAgLmlzT3Blbj0keyEwfQogICAgPjwvZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24+CiAgYDtzdGF0aWMgZGVtb0dyb3VwPSJBcHAgVUkiOyNlPXFpKHRoaXMscyx2b2lkIDApO2dldCB1c2VyKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHVzZXIoeSl7dGhpcy4jZT15fSN0PShxaSh0aGlzLGwpLHFpKHRoaXMsYyxbXSkpO2dldCBtZW51SXRlbXMoKXtyZXR1cm4gdGhpcy4jdH1zZXQgbWVudUl0ZW1zKHkpe3RoaXMuI3Q9eX0jYT0ocWkodGhpcyx1KSxxaSh0aGlzLGgsITEpKTtnZXQgaXNPcGVuKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGlzT3Blbih5KXt0aGlzLiNhPXl9I3I9KHFpKHRoaXMsZykscWkodGhpcyx4LCJ0b3AtcmlnaHQiKSk7Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuI3J9c2V0IHBvc2l0aW9uKHkpe3RoaXMuI3I9eX1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1pbi13aWR0aDogMjIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTBlMGUwIiwiIzIwMjAyMCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYm94LXNoYWRvdzogJHtwLmJkVGhlbWUoIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICAgIHotaW5kZXg6ICR7WDEub3ZlcmxheS5kcm9wZG93bn07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgdHJhbnNmb3JtIDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpc29wZW5dKSAuZHJvcGRvd24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuYmFja2Ryb3AgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFBvc2l0aW9uIHZhcmlhbnRzICovCiAgICAgIC5kcm9wZG93bi50b3AtcmlnaHQgewogICAgICAgIHRvcDogMTAwJTsKICAgICAgICByaWdodDogMDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi50b3AtbGVmdCB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICB9CgogICAgICAuZHJvcGRvd24uYm90dG9tLXJpZ2h0IHsKICAgICAgICBib3R0b206IDEwMCU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CgogICAgICAuZHJvcGRvd24uYm90dG9tLWxlZnQgewogICAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQoKICAgICAgLyogVXNlciBzZWN0aW9uICovCiAgICAgIC51c2VyLXNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTBlMGUwIiwiIzIwMjAyMCIpfTsKICAgICAgfQoKICAgICAgLnVzZXItaW5mbyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTBweDsKICAgICAgfQoKICAgICAgLnVzZXItYXZhdGFyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2YwZjBmMCIsIiMxYTFhMWEiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzY2NiIsIiM5OTkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnVzZXItYXZhdGFyIGltZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5vbmxpbmUgewogICAgICAgIGJhY2tncm91bmQ6ICM0Y2FmNTA7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5vZmZsaW5lIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNzU3NTc1OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMuYnVzeSB7CiAgICAgICAgYmFja2dyb3VuZDogI2Y0NDMzNjsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLmF3YXkgewogICAgICAgIGJhY2tncm91bmQ6ICNmZjk4MDA7CiAgICAgIH0KCiAgICAgIC51c2VyLWRldGFpbHMgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAudXNlci1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwMDAiLCIjZmZmIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLnVzZXItZW1haWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM2NjYiLCIjOTk5Iil9OwogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgc2VjdGlvbiAqLwogICAgICAubWVudS1zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzIiwiI2NjYyIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbTphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSIpfTsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51LWl0ZW0tdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLm1lbnUtc2hvcnRjdXQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM5OTkiLCIjNjY2Iil9OwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLm1lbnUtZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNlMGUwZTAiLCIjMjAyMDIwIil9OwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KCiAgICAgIC8qIEJhY2tkcm9wIGZvciBtb2JpbGUgKi8KICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLmJhY2tkcm9wIHsKICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgIHRvcDogMDsKICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICByaWdodDogMDsKICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICAgIHotaW5kZXg6ICR7WDEuYmFja2Ryb3AuZHJvcGRvd259OwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbaXNvcGVuXSkgLmJhY2tkcm9wIHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIH0KCiAgICAgICAgLmRyb3Bkb3duIHsKICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgIHRvcDogNTAlOwogICAgICAgICAgbGVmdDogNTAlOwogICAgICAgICAgcmlnaHQ6IGF1dG87CiAgICAgICAgICBib3R0b206IGF1dG87CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgwLjk1KTsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDMycHgpOwogICAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDMycHgpOwogICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbaXNvcGVuXSkgLmRyb3Bkb3duIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEpOwogICAgICAgIH0KICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9ImJhY2tkcm9wIiBAY2xpY2s9JHsoKT0+dGhpcy5jbG9zZSgpfT48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZHJvcGRvd24gJHt0aGlzLnBvc2l0aW9ufSI+CiAgICAgICAgJHt0aGlzLnVzZXI/TWAKICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItaW5mbyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1hdmF0YXIiPgogICAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuYXZhdGFyP01gPGltZyBzcmM9IiR7dGhpcy51c2VyLmF2YXRhcn0iIGFsdD0iJHt0aGlzLnVzZXIubmFtZX0iPmA6dGhpcy5nZXRJbml0aWFscyh0aGlzLnVzZXIubmFtZSl9CiAgICAgICAgICAgICAgICAke3RoaXMudXNlci5zdGF0dXM/TWAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1zdGF0dXMgJHt0aGlzLnVzZXIuc3RhdHVzfSI+PC9kaXY+CiAgICAgICAgICAgICAgICBgOiIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItZGV0YWlscyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLW5hbWUiPiR7dGhpcy51c2VyLm5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgICAke3RoaXMudXNlci5lbWFpbD9NYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWVtYWlsIj4ke3RoaXMudXNlci5lbWFpbH08L2Rpdj4KICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDoiIn0KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LXNlY3Rpb24iPgogICAgICAgICAgJHt0aGlzLm1lbnVJdGVtcy5tYXAoeT0+dGhpcy5yZW5kZXJNZW51SXRlbSh5KSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJNZW51SXRlbSh5KXtpZigiZGl2aWRlciJpbiB5JiZ5LmRpdmlkZXIpcmV0dXJuIE1gPGRpdiBjbGFzcz0ibWVudS1kaXZpZGVyIj48L2Rpdj5gO2xldCB3PXk7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9Im1lbnUtaXRlbSIgQGNsaWNrPSR7KCk9PnRoaXMuaGFuZGxlTWVudUNsaWNrKHcpfT4KICAgICAgICAke3cuaWNvbk5hbWU/TWAKICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7YGx1Y2lkZToke3cuaWNvbk5hbWV9YH0iPjwvZGVlcy1pY29uPgogICAgICAgIGA6IiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnUtaXRlbS10ZXh0Ij4ke3cubmFtZX08L3NwYW4+CiAgICAgICAgJHt3LnNob3J0Y3V0P01gCiAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudS1zaG9ydGN1dCI+JHt3LnNob3J0Y3V0fTwvc3Bhbj4KICAgICAgICBgOiIifQogICAgICA8L2Rpdj4KICAgIGB9Z2V0SW5pdGlhbHMoeSl7cmV0dXJuIHkuc3BsaXQoIiAiKS5tYXAodz0+d1swXSkuam9pbigiIikudG9VcHBlckNhc2UoKS5zbGljZSgwLDIpfWFzeW5jIGhhbmRsZU1lbnVDbGljayh5KXthd2FpdCB5LmFjdGlvbigpLHRoaXMuY2xvc2UoKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtZW51LXNlbGVjdCIse2RldGFpbDp7aXRlbTp5fSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfW9wZW4oKXt0aGlzLmlzT3Blbj0hMH1jbG9zZSgpe3RoaXMuaXNPcGVuPSExfXRvZ2dsZSgpe3RoaXMuaXNPcGVuPSF0aGlzLmlzT3Blbn1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2s9dGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2suYmluZCh0aGlzKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2spfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2spfWhhbmRsZU91dHNpZGVDbGljayh5KXtpZih0aGlzLmlzT3BlbiYmIXRoaXMuY29udGFpbnMoeS50YXJnZXQpKXtsZXQgdz10aGlzLnBhcmVudEVsZW1lbnQ7aWYodyYmdy5jb250YWlucyh5LnRhcmdldCkpcmV0dXJuO3RoaXMuY2xvc2UoKX19Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHFpKHRoaXMsbSl9c3RhdGlje3FpKHIsYSl9fTtyZXR1cm4gdj1yfSkoKTtmZSgpO1N0KCk7RnQoKTt2YXIgVDI9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxSdD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sU28xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1hcHB1aS1hcHBiYXIiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXSx2LHk9W10sdz1bXSxFLEM9W10sej1bXSxQLF89W10sJD1bXSxILEw9W10saz1bXSxOLFM9W10sVD1bXSxSLEE9W10sRj1bXSxhZSxWPVtdLFNlPVtdLHplLFc9W10sTmU9W10sUmUsWD1bXSxJPVtdLE8sRz1bXSxqPVtdLHNlLGtlPVtdLERlPVtdO3ZhciBPZT1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IFU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpBcnJheX0pXSxmPVtEKHt0eXBlOlN0cmluZ30pXSxkPVtEKHt0eXBlOlN0cmluZ30pXSxiPVtEKHt0eXBlOkJvb2xlYW59KV0sdj1bRCh7dHlwZTpPYmplY3R9KV0sRT1bRCh7dHlwZTpBcnJheX0pXSxQPVtEKHt0eXBlOkJvb2xlYW59KV0sSD1bRCh7dHlwZTpCb29sZWFufSldLE49W0Qoe3R5cGU6TnVtYmVyfSldLFI9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxhZT1bbGUoKV0semU9W2xlKCldLFJlPVtsZSgpXSxPPVtsZSgpXSxzZT1bbGUoKV0sVDIodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtZW51SXRlbXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJtZW51SXRlbXMiaW4gQixnZXQ6Qj0+Qi5tZW51SXRlbXMsc2V0OihCLG9lKT0+e0IubWVudUl0ZW1zPW9lfX0sbWV0YWRhdGE6VX0scyxsKSxUMih0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImJyZWFkY3J1bWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpCPT4iYnJlYWRjcnVtYnMiaW4gQixnZXQ6Qj0+Qi5icmVhZGNydW1icyxzZXQ6KEIsb2UpPT57Qi5icmVhZGNydW1icz1vZX19LG1ldGFkYXRhOlV9LGMsdSksVDIodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJicmVhZGNydW1iU2VwYXJhdG9yIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpCPT4iYnJlYWRjcnVtYlNlcGFyYXRvciJpbiBCLGdldDpCPT5CLmJyZWFkY3J1bWJTZXBhcmF0b3Isc2V0OihCLG9lKT0+e0IuYnJlYWRjcnVtYlNlcGFyYXRvcj1vZX19LG1ldGFkYXRhOlV9LGgsZyksVDIodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaG93V2luZG93Q29udHJvbHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJzaG93V2luZG93Q29udHJvbHMiaW4gQixnZXQ6Qj0+Qi5zaG93V2luZG93Q29udHJvbHMsc2V0OihCLG9lKT0+e0Iuc2hvd1dpbmRvd0NvbnRyb2xzPW9lfX0sbWV0YWRhdGE6VX0seCxtKSxUMih0aGlzLG51bGwsdix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InVzZXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJ1c2VyImluIEIsZ2V0OkI9PkIudXNlcixzZXQ6KEIsb2UpPT57Qi51c2VyPW9lfX0sbWV0YWRhdGE6VX0seSx3KSxUMih0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InByb2ZpbGVNZW51SXRlbXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJwcm9maWxlTWVudUl0ZW1zImluIEIsZ2V0OkI9PkIucHJvZmlsZU1lbnVJdGVtcyxzZXQ6KEIsb2UpPT57Qi5wcm9maWxlTWVudUl0ZW1zPW9lfX0sbWV0YWRhdGE6VX0sQyx6KSxUMih0aGlzLG51bGwsUCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dTZWFyY2giLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJzaG93U2VhcmNoImluIEIsZ2V0OkI9PkIuc2hvd1NlYXJjaCxzZXQ6KEIsb2UpPT57Qi5zaG93U2VhcmNoPW9lfX0sbWV0YWRhdGE6VX0sXywkKSxUMih0aGlzLG51bGwsSCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dBY3Rpdml0eUxvZ1RvZ2dsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Qj0+InNob3dBY3Rpdml0eUxvZ1RvZ2dsZSJpbiBCLGdldDpCPT5CLnNob3dBY3Rpdml0eUxvZ1RvZ2dsZSxzZXQ6KEIsb2UpPT57Qi5zaG93QWN0aXZpdHlMb2dUb2dnbGU9b2V9fSxtZXRhZGF0YTpVfSxMLGspLFQyKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWN0aXZpdHlMb2dDb3VudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Qj0+ImFjdGl2aXR5TG9nQ291bnQiaW4gQixnZXQ6Qj0+Qi5hY3Rpdml0eUxvZ0NvdW50LHNldDooQixvZSk9PntCLmFjdGl2aXR5TG9nQ291bnQ9b2V9fSxtZXRhZGF0YTpVfSxTLFQpLFQyKHRoaXMsbnVsbCxSLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWN0aXZpdHlMb2dBY3RpdmUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJhY3Rpdml0eUxvZ0FjdGl2ZSJpbiBCLGdldDpCPT5CLmFjdGl2aXR5TG9nQWN0aXZlLHNldDooQixvZSk9PntCLmFjdGl2aXR5TG9nQWN0aXZlPW9lfX0sbWV0YWRhdGE6VX0sQSxGKSxUMih0aGlzLG51bGwsYWUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhY3RpdmVNZW51IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpCPT4iYWN0aXZlTWVudSJpbiBCLGdldDpCPT5CLmFjdGl2ZU1lbnUsc2V0OihCLG9lKT0+e0IuYWN0aXZlTWVudT1vZX19LG1ldGFkYXRhOlV9LFYsU2UpLFQyKHRoaXMsbnVsbCx6ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im9wZW5Ecm9wZG93bnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJvcGVuRHJvcGRvd25zImluIEIsZ2V0OkI9PkIub3BlbkRyb3Bkb3ducyxzZXQ6KEIsb2UpPT57Qi5vcGVuRHJvcGRvd25zPW9lfX0sbWV0YWRhdGE6VX0sVyxOZSksVDIodGhpcyxudWxsLFJlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZm9jdXNlZEl0ZW0iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJmb2N1c2VkSXRlbSJpbiBCLGdldDpCPT5CLmZvY3VzZWRJdGVtLHNldDooQixvZSk9PntCLmZvY3VzZWRJdGVtPW9lfX0sbWV0YWRhdGE6VX0sWCxJKSxUMih0aGlzLG51bGwsTyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImZvY3VzZWREcm9wZG93bkl0ZW0iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJmb2N1c2VkRHJvcGRvd25JdGVtImluIEIsZ2V0OkI9PkIuZm9jdXNlZERyb3Bkb3duSXRlbSxzZXQ6KEIsb2UpPT57Qi5mb2N1c2VkRHJvcGRvd25JdGVtPW9lfX0sbWV0YWRhdGE6VX0sRyxqKSxUMih0aGlzLG51bGwsc2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc1Byb2ZpbGVEcm9wZG93bk9wZW4iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJpc1Byb2ZpbGVEcm9wZG93bk9wZW4iaW4gQixnZXQ6Qj0+Qi5pc1Byb2ZpbGVEcm9wZG93bk9wZW4sc2V0OihCLG9lKT0+e0IuaXNQcm9maWxlRHJvcGRvd25PcGVuPW9lfX0sbWV0YWRhdGE6VX0sa2UsRGUpLFQyKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOlV9LG51bGwsYSksT2U9cj1lLnZhbHVlLFUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6VX0pfXN0YXRpYyBkZW1vPVRJdDtzdGF0aWMgZGVtb0dyb3VwPSJBcHAgVUkiOyNlPVJ0KHRoaXMscyxbXSk7Z2V0IG1lbnVJdGVtcygpe3JldHVybiB0aGlzLiNlfXNldCBtZW51SXRlbXMoVSl7dGhpcy4jZT1VfSN0PShSdCh0aGlzLGwpLFJ0KHRoaXMsYywiIikpO2dldCBicmVhZGNydW1icygpe3JldHVybiB0aGlzLiN0fXNldCBicmVhZGNydW1icyhVKXt0aGlzLiN0PVV9I2E9KFJ0KHRoaXMsdSksUnQodGhpcyxoLCIgPiAiKSk7Z2V0IGJyZWFkY3J1bWJTZXBhcmF0b3IoKXtyZXR1cm4gdGhpcy4jYX1zZXQgYnJlYWRjcnVtYlNlcGFyYXRvcihVKXt0aGlzLiNhPVV9I3I9KFJ0KHRoaXMsZyksUnQodGhpcyx4LCEwKSk7Z2V0IHNob3dXaW5kb3dDb250cm9scygpe3JldHVybiB0aGlzLiNyfXNldCBzaG93V2luZG93Q29udHJvbHMoVSl7dGhpcy4jcj1VfSNpPShSdCh0aGlzLG0pLFJ0KHRoaXMseSx2b2lkIDApKTtnZXQgdXNlcigpe3JldHVybiB0aGlzLiNpfXNldCB1c2VyKFUpe3RoaXMuI2k9VX0jbz0oUnQodGhpcyx3KSxSdCh0aGlzLEMsW10pKTtnZXQgcHJvZmlsZU1lbnVJdGVtcygpe3JldHVybiB0aGlzLiNvfXNldCBwcm9maWxlTWVudUl0ZW1zKFUpe3RoaXMuI289VX0jcz0oUnQodGhpcyx6KSxSdCh0aGlzLF8sITEpKTtnZXQgc2hvd1NlYXJjaCgpe3JldHVybiB0aGlzLiNzfXNldCBzaG93U2VhcmNoKFUpe3RoaXMuI3M9VX0jbj0oUnQodGhpcywkKSxSdCh0aGlzLEwsITEpKTtnZXQgc2hvd0FjdGl2aXR5TG9nVG9nZ2xlKCl7cmV0dXJuIHRoaXMuI259c2V0IHNob3dBY3Rpdml0eUxvZ1RvZ2dsZShVKXt0aGlzLiNuPVV9I2w9KFJ0KHRoaXMsayksUnQodGhpcyxTLDApKTtnZXQgYWN0aXZpdHlMb2dDb3VudCgpe3JldHVybiB0aGlzLiNsfXNldCBhY3Rpdml0eUxvZ0NvdW50KFUpe3RoaXMuI2w9VX0jYz0oUnQodGhpcyxUKSxSdCh0aGlzLEEsITEpKTtnZXQgYWN0aXZpdHlMb2dBY3RpdmUoKXtyZXR1cm4gdGhpcy4jY31zZXQgYWN0aXZpdHlMb2dBY3RpdmUoVSl7dGhpcy4jYz1VfSNkPShSdCh0aGlzLEYpLFJ0KHRoaXMsVixudWxsKSk7Z2V0IGFjdGl2ZU1lbnUoKXtyZXR1cm4gdGhpcy4jZH1zZXQgYWN0aXZlTWVudShVKXt0aGlzLiNkPVV9I2Y9KFJ0KHRoaXMsU2UpLFJ0KHRoaXMsVyxuZXcgU2V0KSk7Z2V0IG9wZW5Ecm9wZG93bnMoKXtyZXR1cm4gdGhpcy4jZn1zZXQgb3BlbkRyb3Bkb3ducyhVKXt0aGlzLiNmPVV9I3U9KFJ0KHRoaXMsTmUpLFJ0KHRoaXMsWCxudWxsKSk7Z2V0IGZvY3VzZWRJdGVtKCl7cmV0dXJuIHRoaXMuI3V9c2V0IGZvY3VzZWRJdGVtKFUpe3RoaXMuI3U9VX0jcD0oUnQodGhpcyxJKSxSdCh0aGlzLEcsLTEpKTtnZXQgZm9jdXNlZERyb3Bkb3duSXRlbSgpe3JldHVybiB0aGlzLiNwfXNldCBmb2N1c2VkRHJvcGRvd25JdGVtKFUpe3RoaXMuI3A9VX0jaD0oUnQodGhpcyxqKSxSdCh0aGlzLGtlLCExKSk7Z2V0IGlzUHJvZmlsZURyb3Bkb3duT3Blbigpe3JldHVybiB0aGlzLiNofXNldCBpc1Byb2ZpbGVEcm9wZG93bk9wZW4oVSl7dGhpcy4jaD1VfXN0YXRpYyBzdHlsZXM9X0l0O3JlbmRlcigpe3JldHVybiBBSXQodGhpcyl9cmVuZGVyTWVudUl0ZW1zKCl7cmV0dXJuIE1gCiAgICAgICR7dGhpcy5tZW51SXRlbXMubWFwKChVLEIpPT50aGlzLnJlbmRlck1lbnVJdGVtKFUsYG1lbnUtJHtCfWApKX0KICAgIGB9cmVuZGVyTWVudUl0ZW0oVSxCKXtpZigiZGl2aWRlciJpbiBVJiZVLmRpdmlkZXIpcmV0dXJuIE1gPGRpdiBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9kaXY+YDtsZXQgb2U9VSx2ZT10aGlzLmFjdGl2ZU1lbnU9PT1CLHllPW9lLnN1Ym1lbnUmJm9lLnN1Ym1lbnUubGVuZ3RoPjA7cmV0dXJuIE1gCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ibWVudUl0ZW0gJHt2ZT8iYWN0aXZlIjoiIn0iCiAgICAgICAgP2Rpc2FibGVkPSR7b2UuZGlzYWJsZWR9CiAgICAgICAgdGFiaW5kZXg9IiR7b2UuZGlzYWJsZWQ/LTE6MH0iCiAgICAgICAgZGF0YS1pdGVtLWlkPSIke0J9IgogICAgICAgIEBjbGljaz0keygpPT50aGlzLmhhbmRsZU1lbnVDbGljayhvZSxCKX0KICAgICAgICBAa2V5ZG93bj0keyRlPT50aGlzLmhhbmRsZU1lbnVLZXlkb3duKCRlLG9lLEIpfQogICAgICAgIHJvbGU9Im1lbnVpdGVtIgogICAgICAgIGFyaWEtaGFzcG9wdXA9IiR7eWV9IgogICAgICAgIGFyaWEtZXhwYW5kZWQ9IiR7dmV9IgogICAgICA+CiAgICAgICAgJHtvZS5pY29uTmFtZT9NYDxkZWVzLWljb24gLmljb249IiR7YGx1Y2lkZToke29lLmljb25OYW1lfWB9Ij48L2RlZXMtaWNvbj5gOiIifQogICAgICAgICR7b2UubmFtZX0KICAgICAgICAke3llP3RoaXMucmVuZGVyRHJvcGRvd24ob2Uuc3VibWVudSxCLHZlKToiIn0KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlckRyb3Bkb3duKFUsQixvZSl7cmV0dXJuIE1gCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9ImRyb3Bkb3duICR7b2U/Im9wZW4iOiIifSIgCiAgICAgICAgQGNsaWNrPSR7dmU9PnZlLnN0b3BQcm9wYWdhdGlvbigpfQogICAgICAgIEBrZXlkb3duPSR7dmU9PnRoaXMuaGFuZGxlRHJvcGRvd25LZXlkb3duKHZlLFUsQil9CiAgICAgICAgdGFiaW5kZXg9IiR7b2U/MDotMX0iCiAgICAgICAgcm9sZT0ibWVudSIKICAgICAgPgogICAgICAgICR7VS5tYXAoKHZlLHllKT0+dGhpcy5yZW5kZXJEcm9wZG93bkl0ZW0odmUsYCR7Qn0tJHt5ZX1gKSl9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJEcm9wZG93bkl0ZW0oVSxCKXtpZigiZGl2aWRlciJpbiBVJiZVLmRpdmlkZXIpcmV0dXJuIE1gPGRpdiBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9kaXY+YDtsZXQgb2U9VSx2ZT1wYXJzZUludChCLnNwbGl0KCItIikucG9wKCl8fCIwIikseWU9dGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPT09dmU7cmV0dXJuIE1gCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iZHJvcGRvd24taXRlbSAke3llPyJmb2N1c2VkIjoiIn0iCiAgICAgICAgP2Rpc2FibGVkPSR7b2UuZGlzYWJsZWR9CiAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMuaGFuZGxlRHJvcGRvd25JdGVtQ2xpY2sob2UpfQogICAgICAgIEBtb3VzZWVudGVyPSR7KCk9PnRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbT12ZX0KICAgICAgICByb2xlPSJtZW51aXRlbSIKICAgICAgICB0YWJpbmRleD0iJHtvZS5kaXNhYmxlZD8tMTowfSIKICAgICAgPgogICAgICAgICR7b2UuaWNvbk5hbWU/TWA8ZGVlcy1pY29uIC5pY29uPSIke2BsdWNpZGU6JHtvZS5pY29uTmFtZX1gfSI+PC9kZWVzLWljb24+YDoiIn0KICAgICAgICA8c3Bhbj4ke29lLm5hbWV9PC9zcGFuPgogICAgICAgICR7b2Uuc2hvcnRjdXQ/TWA8c3BhbiBjbGFzcz0ic2hvcnRjdXQiPiR7b2Uuc2hvcnRjdXR9PC9zcGFuPmA6IiJ9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJCcmVhZGNydW1icygpe2lmKCF0aGlzLmJyZWFkY3J1bWJzKXJldHVybiBNYGA7bGV0IFU9dGhpcy5icmVhZGNydW1icy5zcGxpdCh0aGlzLmJyZWFkY3J1bWJTZXBhcmF0b3IpO3JldHVybiBNYAogICAgICAke1UubWFwKChCLG9lKT0+TWAKICAgICAgICAke29lPjA/TWA8c3BhbiBjbGFzcz0iYnJlYWRjcnVtYi1zZXBhcmF0b3IiPiR7dGhpcy5icmVhZGNydW1iU2VwYXJhdG9yfTwvc3Bhbj5gOiIifQogICAgICAgIDxzcGFuIAogICAgICAgICAgY2xhc3M9ImJyZWFkY3J1bWItaXRlbSIgCiAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5oYW5kbGVCcmVhZGNydW1iQ2xpY2soQixvZSl9CiAgICAgICAgPgogICAgICAgICAgJHtCfQogICAgICAgIDwvc3Bhbj4KICAgICAgYCl9CiAgICBgfXJlbmRlckFjY291bnRTZWN0aW9uKCl7cmV0dXJuIE1gCiAgICAgICR7dGhpcy5zaG93U2VhcmNoP01gCiAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgY2xhc3M9InNlYXJjaC1pY29uIgogICAgICAgICAgLmljb249JHsibHVjaWRlOnNlYXJjaCJ9CiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZVNlYXJjaENsaWNrfQogICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgYDoiIn0KICAgICAgJHt0aGlzLnVzZXI/TWAKICAgICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItaW5mbyIgQGNsaWNrPSR7dGhpcy5oYW5kbGVVc2VyQ2xpY2t9PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWF2YXRhciI+CiAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuYXZhdGFyP01gPGltZyBzcmM9IiR7dGhpcy51c2VyLmF2YXRhcn0iIGFsdD0iJHt0aGlzLnVzZXIubmFtZX0iPmA6TWAke3RoaXMudXNlci5uYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfWB9CiAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuc3RhdHVzP01gCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLXN0YXR1cyAke3RoaXMudXNlci5zdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgICAgICBgOiIifQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHNwYW4+JHt0aGlzLnVzZXIubmFtZX08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bgogICAgICAgICAgICAudXNlcj0ke3RoaXMudXNlcn0KICAgICAgICAgICAgLm1lbnVJdGVtcz0ke3RoaXMucHJvZmlsZU1lbnVJdGVtc30KICAgICAgICAgICAgLmlzT3Blbj0ke3RoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVufQogICAgICAgICAgICAucG9zaXRpb249JHsidG9wLXJpZ2h0In0KICAgICAgICAgICAgQG1lbnUtc2VsZWN0PSR7VT0+dGhpcy5oYW5kbGVQcm9maWxlTWVudVNlbGVjdChVKX0KICAgICAgICAgID48L2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duPgogICAgICAgIDwvZGl2PgogICAgICBgOiIifQogICAgICAke3RoaXMuc2hvd0FjdGl2aXR5TG9nVG9nZ2xlP01gCiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImFjdGl2aXR5LXRvZ2dsZSAke3RoaXMuYWN0aXZpdHlMb2dBY3RpdmU/ImFjdGl2ZSI6IiJ9IgogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVBY3Rpdml0eVRvZ2dsZX0KICAgICAgICAgIHRpdGxlPSJBY3Rpdml0eSBMb2ciCiAgICAgICAgPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6YWN0aXZpdHkifT48L2RlZXMtaWNvbj4KICAgICAgICAgICR7dGhpcy5hY3Rpdml0eUxvZ0NvdW50PjA/TWAKICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFjdGl2aXR5LWJhZGdlIj4ke3RoaXMuYWN0aXZpdHlMb2dDb3VudD45OT8iOTkrIjp0aGlzLmFjdGl2aXR5TG9nQ291bnR9PC9zcGFuPgogICAgICAgICAgYDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgYDoiIn0KICAgIGB9aGFuZGxlTWVudUNsaWNrKFUsQil7VS5kaXNhYmxlZHx8KFUuc3VibWVudSYmVS5zdWJtZW51Lmxlbmd0aD4wP3RoaXMuYWN0aXZlTWVudT09PUI/dGhpcy5hY3RpdmVNZW51PW51bGw6dGhpcy5hY3RpdmVNZW51PUI6KHRoaXMuYWN0aXZlTWVudT1udWxsLFUuYWN0aW9uJiZVLmFjdGlvbigpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm1lbnUtc2VsZWN0Iix7ZGV0YWlsOntpdGVtOlV9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpKX1oYW5kbGVEcm9wZG93bkl0ZW1DbGljayhVKXtVLmRpc2FibGVkfHwodGhpcy5hY3RpdmVNZW51PW51bGwsVS5hY3Rpb24mJlUuYWN0aW9uKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibWVudS1zZWxlY3QiLHtkZXRhaWw6e2l0ZW06VX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSl9aGFuZGxlTWVudUtleWRvd24oVSxCLG9lKXtzd2l0Y2goVS5rZXkpe2Nhc2UiRW50ZXIiOmNhc2UiICI6VS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaGFuZGxlTWVudUNsaWNrKEIsb2UpO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjppZihCLnN1Ym1lbnUmJnRoaXMuYWN0aXZlTWVudT09PW9lKXtVLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPTA7bGV0IHZlPXRoaXMuZmluZE5leHRWYWxpZEl0ZW0oQi5zdWJtZW51LC0xLDEpO3ZlIT09LTEmJih0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW09dmUsc2V0VGltZW91dCgoKT0+e2xldCB5ZT10aGlzLnJlbmRlclJvb3QucXVlcnlTZWxlY3RvcigiLmRyb3Bkb3duLm9wZW4iKTt5ZSYmeWUuZm9jdXMoKX0sMCkpfWJyZWFrO2Nhc2UiRXNjYXBlIjp0aGlzLmFjdGl2ZU1lbnU9bnVsbCx0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW09LTE7YnJlYWs7Y2FzZSJUYWIiOnRoaXMuYWN0aXZlTWVudT09PW9lJiYodGhpcy5hY3RpdmVNZW51PW51bGwsdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPS0xKTticmVhaztjYXNlIkFycm93UmlnaHQiOlUucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTmV4dE1lbnVJdGVtKG9lLDEpO2JyZWFrO2Nhc2UiQXJyb3dMZWZ0IjpVLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c05leHRNZW51SXRlbShvZSwtMSk7YnJlYWt9fWhhbmRsZUJyZWFkY3J1bWJDbGljayhVLEIpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImJyZWFkY3J1bWItbmF2aWdhdGUiLHtkZXRhaWw6e2JyZWFkY3J1bWI6VSxpbmRleDpCfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZVNlYXJjaENsaWNrKCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoLWNsaWNrIix7YnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVBY3Rpdml0eVRvZ2dsZSgpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFjdGl2aXR5LXRvZ2dsZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlVXNlckNsaWNrKCl7dGhpcy5pc1Byb2ZpbGVEcm9wZG93bk9wZW49IXRoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVuLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInVzZXItbWVudS1vcGVuIix7YnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVQcm9maWxlTWVudVNlbGVjdChVKXt0aGlzLmlzUHJvZmlsZURyb3Bkb3duT3Blbj0hMSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJwcm9maWxlLW1lbnUtc2VsZWN0Iix7ZGV0YWlsOlUuZGV0YWlsLGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlR2xvYmFsQ2xpY2spLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKX1oYW5kbGVHbG9iYWxDbGljaz0oUnQodGhpcyxEZSksVT0+e1Uuc3RvcFByb3BhZ2F0aW9uKCl9KTtoYW5kbGVEb2N1bWVudENsaWNrPSgpPT57dGhpcy5hY3RpdmVNZW51PW51bGwsdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPS0xfTtoYW5kbGVEcm9wZG93bktleWRvd24oVSxCLG9lKXtsZXQgdmU9Qi5maWx0ZXIoeWU9PiEoImRpdmlkZXIiaW4geWUmJnllLmRpdmlkZXIpKTtzd2l0Y2goVS5rZXkpe2Nhc2UiQXJyb3dEb3duIjpVLnByZXZlbnREZWZhdWx0KCk7bGV0IHllPXRoaXMuZmluZE5leHRWYWxpZEl0ZW0oQix0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0sMSk7eWUhPT0tMSYmKHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbT15ZSk7YnJlYWs7Y2FzZSJBcnJvd1VwIjpVLnByZXZlbnREZWZhdWx0KCk7bGV0ICRlPXRoaXMuZmluZE5leHRWYWxpZEl0ZW0oQix0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0sLTEpOyRlIT09LTEmJih0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW09JGUpO2JyZWFrO2Nhc2UiRW50ZXIiOmlmKFUucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0hPT0tMSl7bGV0IEVlPXZlW3RoaXMuZm9jdXNlZERyb3Bkb3duSXRlbV07RWUmJiJhY3Rpb24iaW4gRWUmJiFFZS5kaXNhYmxlZCYmdGhpcy5oYW5kbGVEcm9wZG93bkl0ZW1DbGljayhFZSl9YnJlYWs7Y2FzZSJIb21lIjpVLnByZXZlbnREZWZhdWx0KCk7bGV0IG5lPXRoaXMuZmluZE5leHRWYWxpZEl0ZW0oQiwtMSwxKTtuZSE9PS0xJiYodGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPW5lKTticmVhaztjYXNlIkVuZCI6VS5wcmV2ZW50RGVmYXVsdCgpO2xldCByZT10aGlzLmZpbmROZXh0VmFsaWRJdGVtKEIsQi5sZW5ndGgsLTEpO3JlIT09LTEmJih0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW09cmUpO2JyZWFrO2Nhc2UiRXNjYXBlIjpVLnByZXZlbnREZWZhdWx0KCksdGhpcy5hY3RpdmVNZW51PW51bGwsdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPS0xO2xldCBnZT10aGlzLnJlbmRlclJvb3QucXVlcnlTZWxlY3RvcigiLm1lbnVJdGVtLmFjdGl2ZSIpO2dlJiZnZS5mb2N1cygpO2JyZWFrfX1maW5kTmV4dFZhbGlkSXRlbShVLEIsb2Upe2xldCB2ZT1CK29lO2Zvcig7dmU+PTAmJnZlPFUubGVuZ3RoOyl7bGV0IHllPVVbdmVdO2lmKCEoImRpdmlkZXIiaW4geWUmJnllLmRpdmlkZXIpJiYhKCJkaXNhYmxlZCJpbiB5ZSYmeWUuZGlzYWJsZWQpKXJldHVybiB2ZTt2ZSs9b2V9cmV0dXJuLTF9Zm9jdXNOZXh0TWVudUl0ZW0oVSxCKXtsZXQgb2U9QXJyYXkuZnJvbSh0aGlzLnJlbmRlclJvb3QucXVlcnlTZWxlY3RvckFsbCgiLm1lbnVJdGVtIikpLHZlPW9lLmZpbmRJbmRleChuZT0+bmUuZ2V0QXR0cmlidXRlKCJkYXRhLWl0ZW0taWQiKT09PVUpO2lmKHZlPT09LTEpcmV0dXJuO2xldCB5ZT12ZStCO3llPDA/eWU9b2UubGVuZ3RoLTE6eWU+PW9lLmxlbmd0aCYmKHllPTApO2xldCAkZT0wO2Zvcig7JGU8b2UubGVuZ3RoOyl7bGV0IG5lPW9lW3llXTtpZighbmUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXtuZS5mb2N1cygpLHRoaXMuYWN0aXZlTWVudSYmKHRoaXMuYWN0aXZlTWVudT1udWxsLHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbT0tMSk7YnJlYWt9eWU9KHllK0Irb2UubGVuZ3RoKSVvZS5sZW5ndGgsJGUrK319c3RhdGlje1J0KHIsYSl9fTtyZXR1cm4gT2U9cn0pKCk7ZmUoKTt2YXIgJEl0LERJdD0oKT0+TSgkSXR8fCgkSXQ9aGMoW2AKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8c3R5bGU+CiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1sYWJlbCB7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzczNzM3MzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ib3R0b21iYXItd3JhcHBlciB7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBoc2woMCAwJSAyMCUpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1sYWJlbCI+Qm90dG9tIGJhciB3aXRoIHN0YXR1cyB3aWRnZXRzIGFuZCBhY3Rpb25zPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWJvdHRvbWJhci13cmFwcGVyIj4KICAgICAgICAgICAgPGRlZXMtYXBwdWktYm90dG9tYmFyCiAgICAgICAgICAgICAgaWQ9ImRlbW8tYm90dG9tYmFyIgogICAgICAgICAgICA+PC9kZWVzLWFwcHVpLWJvdHRvbWJhcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1sYWJlbCI+Q29udHJvbHM8L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBmbGV4LXdyYXA6IHdyYXA7Ij4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRTdWNjZXNzV2lkZ2V0KCkiPkFkZCBTdWNjZXNzIFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZFdhcm5pbmdXaWRnZXQoKSI+QWRkIFdhcm5pbmcgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkRXJyb3JXaWRnZXQoKSI+QWRkIEVycm9yIFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZExvYWRpbmdXaWRnZXQoKSI+QWRkIExvYWRpbmcgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkUmlnaHRXaWRnZXQoKSI+QWRkIFJpZ2h0IFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZEFjdGlvbigpIj5BZGQgQWN0aW9uPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iY2xlYXJBbGwoKSI+Q2xlYXIgQWxsPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxzY3JpcHQgdHlwZT0ibW9kdWxlIj4KICAgICAgICBjb25zdCBib3R0b21iYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVtby1ib3R0b21iYXInKTsKCiAgICAgICAgLy8gV2FpdCBmb3IgY29tcG9uZW50IHRvIGluaXRpYWxpemUKICAgICAgICBhd2FpdCBib3R0b21iYXIudXBkYXRlQ29tcGxldGU7CgogICAgICAgIC8vIEFkZCBpbml0aWFsIHdpZGdldHMKICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgIGlkOiAnc3RhdHVzJywKICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmFjdGl2aXR5JywKICAgICAgICAgIGxhYmVsOiAnU3lzdGVtIE9ubGluZScsCiAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJywKICAgICAgICAgIHRvb2x0aXA6ICdBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCcsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygnU3RhdHVzIGNsaWNrZWQnKSwKICAgICAgICAgIGNvbnRleHRNZW51SXRlbXM6IFsKICAgICAgICAgICAgeyBuYW1lOiAnVmlldyBEZXRhaWxzJywgaWNvbk5hbWU6ICdsdWNpZGU6aW5mbycsIGFjdGlvbjogKCkgPT4gYWxlcnQoJ1N5c3RlbSBkZXRhaWxzJykgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsgbmFtZTogJ1JlZnJlc2ggU3RhdHVzJywgaWNvbk5hbWU6ICdsdWNpZGU6cmVmcmVzaEN3JywgYWN0aW9uOiAoKSA9PiBhbGVydCgnUmVmcmVzaGluZy4uLicpIH0sCiAgICAgICAgICBdLAogICAgICAgIH0pOwoKICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgIGlkOiAnbm90aWZpY2F0aW9ucycsCiAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpiZWxsJywKICAgICAgICAgIGxhYmVsOiAnMyBub3RpZmljYXRpb25zJywKICAgICAgICAgIHN0YXR1czogJ3dhcm5pbmcnLAogICAgICAgICAgdG9vbHRpcDogJ1lvdSBoYXZlIHVucmVhZCBub3RpZmljYXRpb25zJywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGNvbnNvbGUubG9nKCdOb3RpZmljYXRpb25zIGNsaWNrZWQnKSwKICAgICAgICB9KTsKCiAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICBpZDogJ3ZlcnNpb24nLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6Z2l0QnJhbmNoJywKICAgICAgICAgIGxhYmVsOiAndjEuMi4zJywKICAgICAgICAgIHRvb2x0aXA6ICdDdXJyZW50IHZlcnNpb24nLAogICAgICAgICAgcG9zaXRpb246ICdyaWdodCcsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygnVmVyc2lvbiBjbGlja2VkJyksCiAgICAgICAgfSk7CgogICAgICAgIC8vIEFkZCBpbml0aWFsIGFjdGlvbnMKICAgICAgICBib3R0b21iYXIuYWRkQWN0aW9uKHsKICAgICAgICAgIGlkOiAnc2V0dGluZ3MnLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6c2V0dGluZ3MnLAogICAgICAgICAgdG9vbHRpcDogJ1NldHRpbmdzJywKICAgICAgICAgIHBvc2l0aW9uOiAncmlnaHQnLAogICAgICAgICAgb25DbGljazogKCkgPT4gYWxlcnQoJ1NldHRpbmdzIGNsaWNrZWQnKSwKICAgICAgICB9KTsKCiAgICAgICAgYm90dG9tYmFyLmFkZEFjdGlvbih7CiAgICAgICAgICBpZDogJ2hlbHAnLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6aGVscENpcmNsZScsCiAgICAgICAgICB0b29sdGlwOiAnSGVscCcsCiAgICAgICAgICBwb3NpdGlvbjogJ3JpZ2h0JywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGFsZXJ0KCdIZWxwIGNsaWNrZWQnKSwKICAgICAgICB9KTsKCiAgICAgICAgLy8gRGVtbyBjb250cm9sIGZ1bmN0aW9ucwogICAgICAgIGxldCB3aWRnZXRDb3VudGVyID0gMDsKICAgICAgICBsZXQgYWN0aW9uQ291bnRlciA9IDA7CgogICAgICAgIHdpbmRvdy5hZGRTdWNjZXNzV2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiAnc3VjY2Vzcy0nICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6Y2hlY2tDaXJjbGUnLAogICAgICAgICAgICBsYWJlbDogJ1N1Y2Nlc3MgJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLAogICAgICAgICAgICB0b29sdGlwOiAnU3VjY2VzcyB3aWRnZXQnLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBib3R0b21iYXIucmVtb3ZlV2lkZ2V0KCdzdWNjZXNzLScgKyB3aWRnZXRDb3VudGVyKSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRXYXJuaW5nV2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiAnd2FybmluZy0nICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6YWxlcnRUcmlhbmdsZScsCiAgICAgICAgICAgIGxhYmVsOiAnV2FybmluZyAnICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgc3RhdHVzOiAnd2FybmluZycsCiAgICAgICAgICAgIHRvb2x0aXA6ICdXYXJuaW5nIHdpZGdldCcsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGJvdHRvbWJhci5yZW1vdmVXaWRnZXQoJ3dhcm5pbmctJyArIHdpZGdldENvdW50ZXIpLAogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmFkZEVycm9yV2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiAnZXJyb3ItJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnhDaXJjbGUnLAogICAgICAgICAgICBsYWJlbDogJ0Vycm9yICcgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsCiAgICAgICAgICAgIHRvb2x0aXA6ICdFcnJvciB3aWRnZXQnLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBib3R0b21iYXIucmVtb3ZlV2lkZ2V0KCdlcnJvci0nICsgd2lkZ2V0Q291bnRlciksCiAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuYWRkTG9hZGluZ1dpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGNvbnN0IGlkID0gJ2xvYWRpbmctJyArIHdpZGdldENvdW50ZXI7CiAgICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgICAgaWQ6IGlkLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpsb2FkZXIyJywKICAgICAgICAgICAgbGFiZWw6ICdMb2FkaW5nLi4uJywKICAgICAgICAgICAgc3RhdHVzOiAnYWN0aXZlJywKICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSwKICAgICAgICAgICAgdG9vbHRpcDogJ0xvYWRpbmcgaW4gcHJvZ3Jlc3MnLAogICAgICAgICAgfSk7CgogICAgICAgICAgLy8gU2ltdWxhdGUgY29tcGxldGlvbiBhZnRlciAzIHNlY29uZHMKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBib3R0b21iYXIudXBkYXRlV2lkZ2V0KGlkLCB7CiAgICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6Y2hlY2snLAogICAgICAgICAgICAgIGxhYmVsOiAnRG9uZSEnLAogICAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLAogICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sIDMwMDApOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRSaWdodFdpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgICBpZDogJ3JpZ2h0LScgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTppbmZvJywKICAgICAgICAgICAgbGFiZWw6ICdSaWdodCAnICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgcG9zaXRpb246ICdyaWdodCcsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGJvdHRvbWJhci5yZW1vdmVXaWRnZXQoJ3JpZ2h0LScgKyB3aWRnZXRDb3VudGVyKSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRBY3Rpb24gPSAoKSA9PiB7CiAgICAgICAgICBhY3Rpb25Db3VudGVyKys7CiAgICAgICAgICBib3R0b21iYXIuYWRkQWN0aW9uKHsKICAgICAgICAgICAgaWQ6ICdhY3Rpb24tJyArIGFjdGlvbkNvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnphcCcsCiAgICAgICAgICAgIHRvb2x0aXA6ICdBY3Rpb24gJyArIGFjdGlvbkNvdW50ZXIsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHsKICAgICAgICAgICAgICBhbGVydCgnQWN0aW9uICcgKyBhY3Rpb25Db3VudGVyICsgJyBjbGlja2VkJyk7CiAgICAgICAgICAgICAgYm90dG9tYmFyLnJlbW92ZUFjdGlvbignYWN0aW9uLScgKyBhY3Rpb25Db3VudGVyKTsKICAgICAgICAgICAgfSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5jbGVhckFsbCA9ICgpID0+IHsKICAgICAgICAgIGJvdHRvbWJhci5jbGVhcldpZGdldHMoKTsKICAgICAgICAgIGJvdHRvbWJhci5jbGVhckFjdGlvbnMoKTsKICAgICAgICAgIHdpZGdldENvdW50ZXIgPSAwOwogICAgICAgICAgYWN0aW9uQ291bnRlciA9IDA7CiAgICAgICAgfTsKICAgICAgPFwvc2NyaXB0PgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGBdKSkpO2ZlKCk7QmUoKTtGdCgpO3ZhciBVRGU9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxwST1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sQ28xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1hcHB1aS1ib3R0b21iYXIiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXTt2YXIgZD1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGg9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bbGUoKV0sZj1bbGUoKV0sVURlKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToid2lkZ2V0cyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+IndpZGdldHMiaW4gZyxnZXQ6Zz0+Zy53aWRnZXRzLHNldDooZyxiKT0+e2cud2lkZ2V0cz1ifX0sbWV0YWRhdGE6aH0scyxsKSxVRGUodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhY3Rpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4iYWN0aW9ucyJpbiBnLGdldDpnPT5nLmFjdGlvbnMsc2V0OihnLGIpPT57Zy5hY3Rpb25zPWJ9fSxtZXRhZGF0YTpofSxjLHUpLFVEZShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpofSxudWxsLGEpLGQ9cj1lLnZhbHVlLGgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6aH0pfXN0YXRpYyBkZW1vPURJdDtzdGF0aWMgZGVtb0dyb3VwPSJBcHAgVUkiOyNlPXBJKHRoaXMscyxbXSk7Z2V0IHdpZGdldHMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgd2lkZ2V0cyhoKXt0aGlzLiNlPWh9I3Q9KHBJKHRoaXMsbCkscEkodGhpcyxjLFtdKSk7Z2V0IGFjdGlvbnMoKXtyZXR1cm4gdGhpcy4jdH1zZXQgYWN0aW9ucyhoKXt0aGlzLiN0PWh9c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuYm90dG9tLWJhciB7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTQlKSIsImhzbCgwIDAlIDYlKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAud2lkZ2V0OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldCBkZWVzLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAud2lkZ2V0LXNlcGFyYXRvciB7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDgwJSkiLCJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgIC8qIFN0YXR1cyBjb2xvcnMgbWF0Y2hpbmcgZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyICovCiAgICAgIC53aWRnZXQuYWN0aXZlIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0NSUpIiwiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQuc3VjY2VzcyB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMTQyIDcwJSAzNSUpIiwiaHNsKDE0MiA3MCUgNTAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC53YXJuaW5nIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsImhzbCgzOCA5MiUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC5lcnJvciB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsImhzbCgwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICB9CgogICAgICAuc3Bpbm5pbmcgewogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5zcGFjZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5kaXNhYmxlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7bGV0IGg9dGhpcy53aWRnZXRzLmZpbHRlcihtPT5tLnBvc2l0aW9uIT09InJpZ2h0Iikuc29ydCgobSx2KT0+KG0ub3JkZXJ8fDApLSh2Lm9yZGVyfHwwKSksZz10aGlzLndpZGdldHMuZmlsdGVyKG09Pm0ucG9zaXRpb249PT0icmlnaHQiKS5zb3J0KChtLHYpPT4obS5vcmRlcnx8MCktKHYub3JkZXJ8fDApKSxiPXRoaXMuYWN0aW9ucy5maWx0ZXIobT0+bS5wb3NpdGlvbj09PSJsZWZ0IikseD10aGlzLmFjdGlvbnMuZmlsdGVyKG09Pm0ucG9zaXRpb24hPT0ibGVmdCIpO3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJib3R0b20tYmFyIj4KICAgICAgICA8IS0tIExlZnQgYWN0aW9ucyAtLT4KICAgICAgICAke2IubWFwKG09PnRoaXMucmVuZGVyQWN0aW9uKG0pKX0KCiAgICAgICAgPCEtLSBMZWZ0IHdpZGdldHMgLS0+CiAgICAgICAgJHtoLm1hcCgobSx2KT0+TWAKICAgICAgICAgICR7dj4wfHxiLmxlbmd0aD4wP01gPGRpdiBjbGFzcz0id2lkZ2V0LXNlcGFyYXRvciI+PC9kaXY+YDoiIn0KICAgICAgICAgICR7dGhpcy5yZW5kZXJXaWRnZXQobSl9CiAgICAgICAgYCl9CgogICAgICAgIDxkaXYgY2xhc3M9InNwYWNlciI+PC9kaXY+CgogICAgICAgIDwhLS0gUmlnaHQgd2lkZ2V0cyAtLT4KICAgICAgICAke2cubWFwKChtLHYpPT5NYAogICAgICAgICAgJHt0aGlzLnJlbmRlcldpZGdldChtKX0KICAgICAgICAgICR7djxnLmxlbmd0aC0xfHx4Lmxlbmd0aD4wP01gPGRpdiBjbGFzcz0id2lkZ2V0LXNlcGFyYXRvciI+PC9kaXY+YDoiIn0KICAgICAgICBgKX0KCiAgICAgICAgPCEtLSBSaWdodCBhY3Rpb25zIC0tPgogICAgICAgICR7eC5tYXAobT0+dGhpcy5yZW5kZXJBY3Rpb24obSkpfQogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyV2lkZ2V0KGgpe2xldCBnPWguc3RhdHVzJiZoLnN0YXR1cyE9PSJpZGxlIj9oLnN0YXR1czoiIixiPWguaWNvbk5hbWU/aC5pY29uTmFtZS5zdGFydHNXaXRoKCJsdWNpZGU6Iik/aC5pY29uTmFtZTpgbHVjaWRlOiR7aC5pY29uTmFtZX1gOiIiO3JldHVybiBNYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9IndpZGdldCAke2d9IgogICAgICAgIHRpdGxlPSIke2gudG9vbHRpcHx8IiJ9IgogICAgICAgIEBjbGljaz0keygpPT5oLm9uQ2xpY2s/LigpfQogICAgICAgIEBjb250ZXh0bWVudT0ke3g9PnRoaXMuaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoeCxoKX0KICAgICAgPgogICAgICAgICR7Yj9NYAogICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAuaWNvbj0ke2J9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgICAgY2xhc3M9IiR7aC5sb2FkaW5nPyJzcGlubmluZyI6IiJ9IgogICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgIGA6IiJ9CiAgICAgICAgJHtoLmxhYmVsP01gPHNwYW4+JHtoLmxhYmVsfTwvc3Bhbj5gOiIifQogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyQWN0aW9uKGgpe2xldCBnPWguaWNvbk5hbWUuc3RhcnRzV2l0aCgibHVjaWRlOiIpP2guaWNvbk5hbWU6YGx1Y2lkZToke2guaWNvbk5hbWV9YDtyZXR1cm4gTWAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJhY3Rpb24tYnV0dG9uICR7aC5kaXNhYmxlZD8iZGlzYWJsZWQiOiIifSIKICAgICAgICB0aXRsZT0iJHtoLnRvb2x0aXB8fCIifSIKICAgICAgICBAY2xpY2s9JHsoKT0+IWguZGlzYWJsZWQmJmgub25DbGljaz8uKCl9CiAgICAgID4KICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAuaWNvbj0ke2d9CiAgICAgICAgICBpY29uU2l6ZT0iMTIiCiAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoaCxnKXtpZighZy5jb250ZXh0TWVudUl0ZW1zfHxnLmNvbnRleHRNZW51SXRlbXMubGVuZ3RoPT09MClyZXR1cm47aC5wcmV2ZW50RGVmYXVsdCgpO2xldCBiPVtdO2ZvcihsZXQgeCBvZiBnLmNvbnRleHRNZW51SXRlbXMpeC5kaXZpZGVyP2IucHVzaCh7ZGl2aWRlcjohMH0pOmIucHVzaCh7bmFtZTp4Lm5hbWUsaWNvbk5hbWU6eC5pY29uTmFtZSxhY3Rpb246YXN5bmMoKT0+e2F3YWl0IHguYWN0aW9uKCl9LGRpc2FibGVkOnguZGlzYWJsZWR9KTthd2FpdCBXdC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhoLGIpfWFkZFdpZGdldChoKXt0aGlzLndpZGdldHM9dGhpcy53aWRnZXRzLmZpbHRlcihnPT5nLmlkIT09aC5pZCksdGhpcy53aWRnZXRzPVsuLi50aGlzLndpZGdldHMsaF19dXBkYXRlV2lkZ2V0KGgsZyl7dGhpcy53aWRnZXRzPXRoaXMud2lkZ2V0cy5tYXAoYj0+Yi5pZD09PWg/ey4uLmIsLi4uZ306Yil9cmVtb3ZlV2lkZ2V0KGgpe3RoaXMud2lkZ2V0cz10aGlzLndpZGdldHMuZmlsdGVyKGc9PmcuaWQhPT1oKX1nZXRXaWRnZXQoaCl7cmV0dXJuIHRoaXMud2lkZ2V0cy5maW5kKGc9PmcuaWQ9PT1oKX1jbGVhcldpZGdldHMoKXt0aGlzLndpZGdldHM9W119YWRkQWN0aW9uKGgpe3RoaXMuYWN0aW9ucz10aGlzLmFjdGlvbnMuZmlsdGVyKGc9PmcuaWQhPT1oLmlkKSx0aGlzLmFjdGlvbnM9Wy4uLnRoaXMuYWN0aW9ucyxoXX1yZW1vdmVBY3Rpb24oaCl7dGhpcy5hY3Rpb25zPXRoaXMuYWN0aW9ucy5maWx0ZXIoZz0+Zy5pZCE9PWgpfWNsZWFyQWN0aW9ucygpe3RoaXMuYWN0aW9ucz1bXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cykscEkodGhpcyx1KX1zdGF0aWN7cEkocixhKX19O3JldHVybiBkPXJ9KSgpO2ZlKCk7dmFyIFZsPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sR3I9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LFNEYT0oKCk9PntsZXQgdD1bY2UoImRlbW8tZGFzaGJvYXJkLXZpZXciKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXTt2YXIgZj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bbGUoKV0sVmwodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhY3RpdmF0ZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnU9PiJhY3RpdmF0ZWQiaW4gdSxnZXQ6dT0+dS5hY3RpdmF0ZWQsc2V0Oih1LGQpPT57dS5hY3RpdmF0ZWQ9ZH19LG1ldGFkYXRhOmN9LHMsbCksVmwobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6Y30sbnVsbCxhKSxmPXI9ZS52YWx1ZSxjJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmN9KSxHcihyLGEpfSNlPUdyKHRoaXMscywhMSk7Z2V0IGFjdGl2YXRlZCgpe3JldHVybiB0aGlzLiNlfXNldCBhY3RpdmF0ZWQoYyl7dGhpcy4jZT1jfWN0eD1Hcih0aGlzLGwpO29uQWN0aXZhdGUoYyl7dGhpcy5jdHg9Yyx0aGlzLmFjdGl2YXRlZD0hMCxjb25zb2xlLmxvZygiRGFzaGJvYXJkIGFjdGl2YXRlZCB3aXRoIGNvbnRleHQ6IixjKSxjLmFwcHVpLnNldFNlY29uZGFyeU1lbnUoe2hlYWRpbmc6IkRhc2hib2FyZCIsZ3JvdXBzOlt7bmFtZToiUXVpY2sgQWNjZXNzIixpY29uTmFtZToibHVjaWRlOnphcCIsaXRlbXM6W3trZXk6Ik92ZXJ2aWV3IixpY29uTmFtZToibGF5b3V0RGFzaGJvYXJkIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJPdmVydmlldyIpfSx7a2V5OiJSZWNlbnQiLGljb25OYW1lOiJjbG9jayIsYmFkZ2U6NSxhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJSZWNlbnQiKX0se3R5cGU6ImRpdmlkZXIifSx7dHlwZToiYWN0aW9uIixrZXk6IlJlZnJlc2ggRGF0YSIsaWNvbk5hbWU6Imx1Y2lkZTpyZWZyZXNoQ3ciLGFjdGlvbjooKT0+YWxlcnQoIlJlZnJlc2hpbmcgZGFzaGJvYXJkIGRhdGEuLi4iKX1dfSx7bmFtZToiRmlsdGVycyIsaWNvbk5hbWU6Imx1Y2lkZTpmaWx0ZXIiLGl0ZW1zOlt7dHlwZToiaGVhZGVyIixsYWJlbDoiVGltZSBSYW5nZSJ9LHt0eXBlOiJmaWx0ZXIiLGtleToiTGl2ZSBVcGRhdGVzIixpY29uTmFtZToibHVjaWRlOnJhZGlvIixhY3RpdmU6ITAsb25Ub2dnbGU6dT0+Y29uc29sZS5sb2coIkxpdmUgdXBkYXRlczoiLHUpfSx7dHlwZToiZmlsdGVyIixrZXk6IlNob3cgQXJjaGl2ZWQiLGljb25OYW1lOiJsdWNpZGU6YXJjaGl2ZSIsYWN0aXZlOiExLG9uVG9nZ2xlOnU9PmNvbnNvbGUubG9nKCJTaG93IGFyY2hpdmVkOiIsdSl9LHt0eXBlOiJkaXZpZGVyIn0se3R5cGU6Im11bHRpRmlsdGVyIixrZXk6IkRhdGEgU291cmNlcyIsaWNvbk5hbWU6Imx1Y2lkZTpkYXRhYmFzZSIsb3B0aW9uczpbe2tleToiYXBpIixsYWJlbDoiQVBJIFNlcnZlciIsY2hlY2tlZDohMCxpY29uTmFtZToibHVjaWRlOnNlcnZlciJ9LHtrZXk6IndlYiIsbGFiZWw6IldlYiBUcmFmZmljIixjaGVja2VkOiEwLGljb25OYW1lOiJsdWNpZGU6Z2xvYmUifSx7a2V5OiJtb2JpbGUiLGxhYmVsOiJNb2JpbGUgQXBwIixjaGVja2VkOiExLGljb25OYW1lOiJsdWNpZGU6c21hcnRwaG9uZSJ9XSxvbkNoYW5nZTp1PT5jb25zb2xlLmxvZygiRGF0YSBzb3VyY2VzOiIsdSl9XX0se25hbWU6IkFuYWx5dGljcyIsaWNvbk5hbWU6Imx1Y2lkZTpiYXJDaGFydDMiLGl0ZW1zOlt7a2V5OiJNZXRyaWNzIixpY29uTmFtZToiYWN0aXZpdHkiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIk1ldHJpY3MiKX0se2tleToiUmVwb3J0cyIsaWNvbk5hbWU6ImZpbGVUZXh0IixiYWRnZToibmV3IixiYWRnZVZhcmlhbnQ6InN1Y2Nlc3MiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIlJlcG9ydHMiKX0se3R5cGU6ImRpdmlkZXIifSx7dHlwZToibGluayIsa2V5OiJBbmFseXRpY3MgRG9jcyIsaWNvbk5hbWU6Imx1Y2lkZTpleHRlcm5hbExpbmsiLGhyZWY6Imh0dHBzOi8vZG9jcy5leGFtcGxlLmNvbS9hbmFseXRpY3MifV19XX0pLGMuYXBwdWkuc2V0Q29udGVudFRhYnMoW3trZXk6Ik92ZXJ2aWV3IixpY29uTmFtZToibHVjaWRlOmxheW91dERhc2hib2FyZCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiT3ZlcnZpZXcgdGFiIil9LHtrZXk6IkFuYWx5dGljcyIsaWNvbk5hbWU6Imx1Y2lkZTpiYXJDaGFydCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiQW5hbHl0aWNzIHRhYiIpfSx7a2V5OiJSZXBvcnRzIixpY29uTmFtZToibHVjaWRlOmZpbGVUZXh0IixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJSZXBvcnRzIHRhYiIpfV0pfW9uRGVhY3RpdmF0ZSgpe3RoaXMuYWN0aXZhdGVkPSExLGNvbnNvbGUubG9nKCJEYXNoYm9hcmQgZGVhY3RpdmF0ZWQiKX1yZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgaDEgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tYm90dG9tOiA4cHg7IH0KICAgICAgICBwIHsgY29sb3I6ICM3MzczNzM7IG1hcmdpbi1ib3R0b206IDMycHg7IH0KICAgICAgICAuZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CiAgICAgICAgLmNhcmQgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAzKTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCk7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgIH0KICAgICAgICAuY2FyZCBoMyB7IGNvbG9yOiAjZmFmYWZhOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IG1hcmdpbi1ib3R0b206IDhweDsgfQogICAgICAgIC5tZXRyaWMgeyBmb250LXNpemU6IDMycHg7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAjZmFmYWZhOyB9CiAgICAgICAgLnN0YXR1cyB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZzogMnB4IDhweDsgYm9yZGVyLXJhZGl1czogOXB4OyBmb250LXNpemU6IDEycHg7IH0KICAgICAgICAuc3RhdHVzLmFjdGl2ZSB7IGJhY2tncm91bmQ6ICMxNDUzMmQ7IGNvbG9yOiAjNGFkZTgwOyB9CgogICAgICAgIC5jdHgtYWN0aW9ucyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMik7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KICAgICAgICAuY3R4LWFjdGlvbnMgaDIgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CiAgICAgICAgLmJ1dHRvbi1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4gewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMSk7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjNjBhNWZhOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG46aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMik7CiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4xKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXI6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC41KTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4uc3VjY2VzcyB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjEpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjMpOwogICAgICAgICAgY29sb3I6ICM0YWRlODA7CiAgICAgICAgfQogICAgICAgIC5jdHgtYnRuLnN1Y2Nlc3M6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgzNCwgMTk3LCA5NCwgMC41KTsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5EYXNoYm9hcmQ8L2gxPgogICAgICA8cD5XZWxjb21lIGJhY2shIEhlcmUncyBhbiBvdmVydmlldyBvZiB5b3VyIHN5c3RlbS48L3A+CiAgICAgIDxkaXYgY2xhc3M9ImdyaWQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICAgICAgPGgzPkFjdGl2ZSBVc2VyczwvaDM+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRyaWMiPjEsMjM0PC9kaXY+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdHVzIGFjdGl2ZSI+T25saW5lPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICAgICAgPGgzPkFQSSBDYWxsczwvaDM+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRyaWMiPjQ1LjJLPC9kaXY+CiAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6ICM0YWRlODA7IGZvbnQtc2l6ZTogMTJweDsgbWFyZ2luOiAwOyI+KzEyJSBmcm9tIGxhc3QgaG91cjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgICAgICAgIDxoMz5TeXN0ZW0gSGVhbHRoPC9oMz4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldHJpYyI+OTkuOSU8L2Rpdj4KICAgICAgICAgIDxwIHN0eWxlPSJjb2xvcjogIzczNzM3MzsgZm9udC1zaXplOiAxMnB4OyBtYXJnaW46IDA7Ij5BbGwgc3lzdGVtcyBvcGVyYXRpb25hbDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJjdHgtYWN0aW9ucyI+CiAgICAgICAgPGgyPkNvbnRleHQgQWN0aW9ucyAoY3R4LmFwcHVpKTwvaDI+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5zZXRNYWluTWVudVZpc2libGUoITEpfT5IaWRlIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKT0+dGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51VmlzaWJsZSghMCl9PlNob3cgTWFpbiBNZW51PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKT0+dGhpcy5jdHg/LmFwcHVpLnNldFNlY29uZGFyeU1lbnVWaXNpYmxlKCExKX0+SGlkZSBTZWNvbmRhcnkgTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKT0+dGhpcy5jdHg/LmFwcHVpLnNldFNlY29uZGFyeU1lbnVWaXNpYmxlKCEwKX0+U2hvdyBTZWNvbmRhcnkgTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic1Zpc2libGUoITEpfT5IaWRlIENvbnRlbnQgVGFiczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKT0+dGhpcy5jdHg/LmFwcHVpLnNldENvbnRlbnRUYWJzVmlzaWJsZSghMCl9PlNob3cgQ29udGVudCBUYWJzPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKT0+dGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51Q29sbGFwc2VkKCEwKX0+Q29sbGFwc2UgTWFpbiBNZW51PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIHN1Y2Nlc3MiIEBjbGljaz0keygpPT50aGlzLmN0eD8uYXBwdWkuc2V0TWFpbk1lbnVDb2xsYXBzZWQoITEpfT5FeHBhbmQgTWFpbiBNZW51PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKT0+dGhpcy5jdHg/LmFwcHVpLnNldEJyZWFkY3J1bWJzKFsiRGFzaGJvYXJkIiwiT3ZlcnZpZXciLCJTdGF0cyJdKX0+U2V0IEJyZWFkY3J1bWJzPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKT0+dGhpcy5jdHg/LmFwcHVpLm5hdmlnYXRlVG9WaWV3KCJwcm9qZWN0cyIpfT5HbyB0byBQcm9qZWN0czwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5uYXZpZ2F0ZVRvVmlldygic2V0dGluZ3MiLHtzZWN0aW9uOiJzZWN1cml0eSJ9KX0+R28gdG8gU2V0dGluZ3MvU2VjdXJpdHk8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpPT50aGlzLmN0eD8uYXBwdWkuYWN0aXZpdHlMb2cuYWRkKHt0eXBlOiJjdXN0b20iLHVzZXI6IkRlbW8gVXNlciIsbWVzc2FnZToiQnV0dG9uIGNsaWNrZWQgZnJvbSBjdHghIixpY29uTmFtZToibHVjaWRlOm1vdXNlLXBvaW50ZXItY2xpY2sifSl9PkFkZCBBY3Rpdml0eSBFbnRyeTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5zZXRNYWluTWVudUJhZGdlKCJ0YXNrcyIsOTkpfT5TZXQgVGFza3MgQmFkZ2UgdG8gOTk8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gZGFuZ2VyIiBAY2xpY2s9JHsoKT0+dGhpcy5jdHg/LmFwcHVpLmNsZWFyTWFpbk1lbnVCYWRnZSgidGFza3MiKX0+Q2xlYXIgVGFza3MgQmFkZ2U8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpPT50aGlzLmN0eD8uYXBwdWkuc2V0Q29udGVudFRhYnNBdXRvSGlkZSghMCwxKX0+QXV0by1oaWRlIFRhYnMgKOKJpDEpPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIGRhbmdlciIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic0F1dG9IaWRlKCExKX0+RGlzYWJsZSBBdXRvLWhpZGU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCk9PnRoaXMuYWRkQ2xvc2VhYmxlVGFiKCl9PkFkZCBDbG9zZWFibGUgVGFiPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH10YWJDb3VudGVyPTA7YWRkQ2xvc2VhYmxlVGFiKCl7aWYoIXRoaXMuY3R4KXJldHVybjt0aGlzLnRhYkNvdW50ZXIrKztsZXQgYz1gVGFiICR7dGhpcy50YWJDb3VudGVyfWA7dGhpcy5jdHguYXBwdWkuYWRkQ29udGVudFRhYih7a2V5OmMsaWNvbk5hbWU6Imx1Y2lkZTpmaWxlIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKGBTZWxlY3RlZCAke2N9YCksY2xvc2VhYmxlOiEwLG9uQ2xvc2U6KCk9Pnt0aGlzLmN0eD8uYXBwdWkucmVtb3ZlQ29udGVudFRhYihjKX19KX19O3JldHVybiBmPXJ9KSgpLENEYT0oKCk9PntsZXQgdD1bY2UoImRlbW8tc2V0dGluZ3MtdmlldyIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdO3ZhciBkPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgaD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtsZSgpXSxmPVtsZSgpXSxWbCh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlY3Rpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJzZWN0aW9uImluIGcsZ2V0Omc9Pmcuc2VjdGlvbixzZXQ6KGcsYik9PntnLnNlY3Rpb249Yn19LG1ldGFkYXRhOmh9LHMsbCksVmwodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJoYXNDaGFuZ2VzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4iaGFzQ2hhbmdlcyJpbiBnLGdldDpnPT5nLmhhc0NoYW5nZXMsc2V0OihnLGIpPT57Zy5oYXNDaGFuZ2VzPWJ9fSxtZXRhZGF0YTpofSxjLHUpLFZsKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOmh9LG51bGwsYSksZD1yPWUudmFsdWUsaCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpofSksR3IocixhKX0jZT1Hcih0aGlzLHMsImdlbmVyYWwiKTtnZXQgc2VjdGlvbigpe3JldHVybiB0aGlzLiNlfXNldCBzZWN0aW9uKGgpe3RoaXMuI2U9aH0jdD0oR3IodGhpcyxsKSxHcih0aGlzLGMsITEpKTtnZXQgaGFzQ2hhbmdlcygpe3JldHVybiB0aGlzLiN0fXNldCBoYXNDaGFuZ2VzKGgpe3RoaXMuI3Q9aH1hcHB1aT1Hcih0aGlzLHUpO29uQWN0aXZhdGUoaCl7dGhpcy5hcHB1aT1oLmFwcHVpLGNvbnNvbGUubG9nKCJTZXR0aW5ncyBhY3RpdmF0ZWQgd2l0aCBwYXJhbXM6IixoLnBhcmFtcyksaC5wYXJhbXM/LnNlY3Rpb24mJih0aGlzLnNlY3Rpb249aC5wYXJhbXMuc2VjdGlvbiksaC5hcHB1aS5zZXRTZWNvbmRhcnlNZW51KHtoZWFkaW5nOiJTZXR0aW5ncyIsZ3JvdXBzOlt7bmFtZToiQWNjb3VudCIsaWNvbk5hbWU6Imx1Y2lkZTp1c2VyIixpdGVtczpbe2tleToiZ2VuZXJhbCIsaWNvbk5hbWU6InNldHRpbmdzIixhY3Rpb246KCk9PnRoaXMuc2hvd1NlY3Rpb24oImdlbmVyYWwiKX0se2tleToicHJvZmlsZSIsaWNvbk5hbWU6InVzZXIiLGFjdGlvbjooKT0+dGhpcy5zaG93U2VjdGlvbigicHJvZmlsZSIpfSx7a2V5OiJzZWN1cml0eSIsaWNvbk5hbWU6InNoaWVsZCIsYWN0aW9uOigpPT50aGlzLnNob3dTZWN0aW9uKCJzZWN1cml0eSIpfV19LHtuYW1lOiJQcmVmZXJlbmNlcyIsaWNvbk5hbWU6Imx1Y2lkZTpzbGlkZXJzIixpdGVtczpbe2tleToibm90aWZpY2F0aW9ucyIsaWNvbk5hbWU6ImJlbGwiLGJhZGdlOjMsYWN0aW9uOigpPT50aGlzLnNob3dTZWN0aW9uKCJub3RpZmljYXRpb25zIil9LHtrZXk6ImFwcGVhcmFuY2UiLGljb25OYW1lOiJwYWxldHRlIixhY3Rpb246KCk9PnRoaXMuc2hvd1NlY3Rpb24oImFwcGVhcmFuY2UiKX1dfV19KSxoLmFwcHVpLnNldFNlY29uZGFyeU1lbnVTZWxlY3Rpb24odGhpcy5zZWN0aW9uKSxoLmFwcHVpLnNldENvbnRlbnRUYWJzKFtdKX1vbkRlYWN0aXZhdGUoKXtjb25zb2xlLmxvZygiU2V0dGluZ3MgZGVhY3RpdmF0ZWQiKSx0aGlzLmhhc0NoYW5nZXM9ITF9Y2FuRGVhY3RpdmF0ZSgpe3JldHVybiB0aGlzLmhhc0NoYW5nZXM/IllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gTGVhdmUgYW55d2F5PyI6ITB9c2hvd1NlY3Rpb24oaCl7dGhpcy5zZWN0aW9uPWgsdGhpcy5hcHB1aT8uc2V0U2Vjb25kYXJ5TWVudVNlbGVjdGlvbihoKX1zaW11bGF0ZUNoYW5nZSgpe3RoaXMuaGFzQ2hhbmdlcz0hMH1yZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgaDEgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tYm90dG9tOiA4cHg7IH0KICAgICAgICBwIHsgY29sb3I6ICM3MzczNzM7IG1hcmdpbi1ib3R0b206IDI0cHg7IH0KICAgICAgICAuc2VjdGlvbi1uYW1lIHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgY29sb3I6ICNmYWZhZmE7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIH0KICAgICAgICAuYWN0aW9ucyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIH0KICAgICAgICBidXR0b24gewogICAgICAgICAgYmFja2dyb3VuZDogIzNiODJmNjsKICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICBidXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogIzI1NjNlYjsKICAgICAgICB9CiAgICAgICAgLndhcm5pbmcgewogICAgICAgICAgY29sb3I6ICNmYmJmMjQ7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGgxPlNldHRpbmdzPC9oMT4KICAgICAgPHA+TWFuYWdlIHlvdXIgYWNjb3VudCBhbmQgYXBwbGljYXRpb24gcHJlZmVyZW5jZXMuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLW5hbWUiPgogICAgICAgIEN1cnJlbnQgc2VjdGlvbjogPHN0cm9uZz4ke3RoaXMuc2VjdGlvbn08L3N0cm9uZz4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbnMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCk9PnRoaXMuc2ltdWxhdGVDaGFuZ2UoKX0+TWFrZSBDaGFuZ2VzPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMuaGFzQ2hhbmdlcz9NYDxwIGNsYXNzPSJ3YXJuaW5nIj5Zb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIE5hdmlnYXRpb24gd2lsbCBwcm9tcHQgZm9yIGNvbmZpcm1hdGlvbi48L3A+YDoiIn0KICAgIGB9fTtyZXR1cm4gZD1yfSkoKSxMRGE9KCgpPT57bGV0IHQ9W2NlKCJkZW1vLXByb2plY3RzLXZpZXciKV0sZSxhPVtdLHIsaT1wZTt2YXIgbz1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IHM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7VmwobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6c30sbnVsbCxhKSxvPXI9ZS52YWx1ZSxzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnN9KSxHcihyLGEpfW9uQWN0aXZhdGUocyl7cy5hcHB1aS5zZXRTZWNvbmRhcnlNZW51KHtoZWFkaW5nOiJQcm9qZWN0cyIsZ3JvdXBzOlt7bmFtZToiTXkgUHJvamVjdHMiLGljb25OYW1lOiJsdWNpZGU6Zm9sZGVyIixpdGVtczpbe2tleToiQWN0aXZlIixpY29uTmFtZToiZm9sZGVyIixiYWRnZTozLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkFjdGl2ZSIpfSx7a2V5OiJBcmNoaXZlZCIsaWNvbk5hbWU6ImFyY2hpdmUiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkFyY2hpdmVkIil9LHtrZXk6IlNoYXJlZCIsaWNvbk5hbWU6InVzZXJzIixiYWRnZToyLGJhZGdlVmFyaWFudDoid2FybmluZyIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiU2hhcmVkIil9XX0se25hbWU6IlF1aWNrIEFjdGlvbnMiLGljb25OYW1lOiJsdWNpZGU6emFwIixpdGVtczpbe3R5cGU6ImFjdGlvbiIsa2V5OiJOZXcgUHJvamVjdCIsaWNvbk5hbWU6Imx1Y2lkZTpmb2xkZXJQbHVzIixhY3Rpb246KCk9PmFsZXJ0KCJDcmVhdGUgbmV3IHByb2plY3QiKX0se3R5cGU6ImFjdGlvbiIsa2V5OiJJbXBvcnQiLGljb25OYW1lOiJsdWNpZGU6ZG93bmxvYWQiLGFjdGlvbjooKT0+YWxlcnQoIkltcG9ydCBwcm9qZWN0Iil9LHt0eXBlOiJkaXZpZGVyIn0se3R5cGU6ImxpbmsiLGtleToiVGVtcGxhdGVzIixpY29uTmFtZToibHVjaWRlOmxheW91dFRlbXBsYXRlIixocmVmOiJodHRwczovL3RlbXBsYXRlcy5leGFtcGxlLmNvbSJ9XX1dfSkscy5hcHB1aS5zZXRDb250ZW50VGFicyhbe2tleToiR3JpZCIsaWNvbk5hbWU6Imx1Y2lkZTpncmlkIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJHcmlkIHZpZXciKX0se2tleToiTGlzdCIsaWNvbk5hbWU6Imx1Y2lkZTpsaXN0IixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJMaXN0IHZpZXciKX0se2tleToiQm9hcmQiLGljb25OYW1lOiJsdWNpZGU6a2FuYmFuIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJCb2FyZCB2aWV3Iil9XSl9cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBjb2xvcjogI2EzYTNhMzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICAgIGgxIHsgY29sb3I6ICNmYWZhZmE7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMjRweDsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC5wcm9qZWN0cyB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CiAgICAgICAgLnByb2plY3QgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAzKTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCk7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnM7CiAgICAgICAgfQogICAgICAgIC5wcm9qZWN0OmhvdmVyIHsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjIpOwogICAgICAgIH0KICAgICAgICAucHJvamVjdCBoMyB7IGNvbG9yOiAjZmFmYWZhOyBtYXJnaW46IDAgMCA4cHggMDsgZm9udC1zaXplOiAxNnB4OyB9CiAgICAgICAgLnByb2plY3QgcCB7IGNvbG9yOiAjNzM3MzczOyBtYXJnaW46IDA7IGZvbnQtc2l6ZTogMTNweDsgfQogICAgICAgIC5iYWRnZSB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMTQ1MzJkOwogICAgICAgICAgY29sb3I6ICM0YWRlODA7CiAgICAgICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5Qcm9qZWN0czwvaDE+CiAgICAgIDxkaXYgY2xhc3M9InByb2plY3RzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9qZWN0Ij4KICAgICAgICAgIDxoMz5Gcm9udGVuZCBBcHAgPHNwYW4gY2xhc3M9ImJhZGdlIj5BY3RpdmU8L3NwYW4+PC9oMz4KICAgICAgICAgIDxwPlJlYWN0LWJhc2VkIGRhc2hib2FyZCBhcHBsaWNhdGlvbjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9qZWN0Ij4KICAgICAgICAgIDxoMz5BUEkgU2VydmVyIDxzcGFuIGNsYXNzPSJiYWRnZSI+QWN0aXZlPC9zcGFuPjwvaDM+CiAgICAgICAgICA8cD5Ob2RlLmpzIFJFU1QgQVBJIGJhY2tlbmQ8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvamVjdCI+CiAgICAgICAgICA8aDM+TW9iaWxlIEFwcCA8c3BhbiBjbGFzcz0iYmFkZ2UiPkFjdGl2ZTwvc3Bhbj48L2gzPgogICAgICAgICAgPHA+UmVhY3QgTmF0aXZlIGlPUy9BbmRyb2lkIGFwcDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9qZWN0Ij4KICAgICAgICAgIDxoMz5Eb2N1bWVudGF0aW9uPC9oMz4KICAgICAgICAgIDxwPlRlY2huaWNhbCBkb2N1bWVudGF0aW9uIHNpdGU8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH19O3JldHVybiBvPXJ9KSgpLFREYT0oKCk9PntsZXQgdD1bY2UoImRlbW8tdGFza3MtdmlldyIpXSxlLGE9W10scixpPXBlO3ZhciBvPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgcz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtWbChudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpzfSxudWxsLGEpLG89cj1lLnZhbHVlLHMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6c30pLEdyKHIsYSl9b25BY3RpdmF0ZShzKXtzLmFwcHVpLnNldFNlY29uZGFyeU1lbnUoe2hlYWRpbmc6IlRhc2tzIixncm91cHM6W3tuYW1lOiJWaWV3cyIsaWNvbk5hbWU6Imx1Y2lkZTpleWUiLGl0ZW1zOlt7a2V5OiJBbGwgVGFza3MiLGljb25OYW1lOiJsaXN0IixiYWRnZToxMixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJBbGwiKX0se2tleToiVG9kYXkiLGljb25OYW1lOiJjYWxlbmRhciIsYmFkZ2U6MyxhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJUb2RheSIpfSx7a2V5OiJVcGNvbWluZyIsaWNvbk5hbWU6ImNsb2NrIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJVcGNvbWluZyIpfSx7a2V5OiJDb21wbGV0ZWQiLGljb25OYW1lOiJjaGVja0NpcmNsZSIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiQ29tcGxldGVkIil9XX0se25hbWU6IkZpbHRlcnMiLGljb25OYW1lOiJsdWNpZGU6ZmlsdGVyIixpdGVtczpbe3R5cGU6ImhlYWRlciIsbGFiZWw6IlByaW9yaXR5In0se3R5cGU6Im11bHRpRmlsdGVyIixrZXk6IlByaW9yaXR5IixpY29uTmFtZToibHVjaWRlOmZsYWciLG9wdGlvbnM6W3trZXk6ImhpZ2giLGxhYmVsOiJIaWdoIixjaGVja2VkOiEwLGljb25OYW1lOiJsdWNpZGU6YWxlcnRDaXJjbGUifSx7a2V5OiJtZWRpdW0iLGxhYmVsOiJNZWRpdW0iLGNoZWNrZWQ6ITAsaWNvbk5hbWU6Imx1Y2lkZTptaW51c0NpcmNsZSJ9LHtrZXk6ImxvdyIsbGFiZWw6IkxvdyIsY2hlY2tlZDohMSxpY29uTmFtZToibHVjaWRlOmNpcmNsZSJ9XSxvbkNoYW5nZTpsPT5jb25zb2xlLmxvZygiUHJpb3JpdHkgZmlsdGVyOiIsbCl9LHt0eXBlOiJkaXZpZGVyIn0se3R5cGU6ImhlYWRlciIsbGFiZWw6Ik9wdGlvbnMifSx7dHlwZToiZmlsdGVyIixrZXk6IlNob3cgU3VidGFza3MiLGljb25OYW1lOiJsdWNpZGU6bGlzdFRyZWUiLGFjdGl2ZTohMCxvblRvZ2dsZTpsPT5jb25zb2xlLmxvZygiU2hvdyBzdWJ0YXNrczoiLGwpfSx7dHlwZToiZmlsdGVyIixrZXk6IlNob3cgQ29tcGxldGVkIixpY29uTmFtZToibHVjaWRlOmNoZWNrU3F1YXJlIixhY3RpdmU6ITEsb25Ub2dnbGU6bD0+Y29uc29sZS5sb2coIlNob3cgY29tcGxldGVkOiIsbCl9XX0se25hbWU6IkFjdGlvbnMiLGljb25OYW1lOiJsdWNpZGU6emFwIixpdGVtczpbe3R5cGU6ImFjdGlvbiIsa2V5OiJBZGQgVGFzayIsaWNvbk5hbWU6Imx1Y2lkZTpwbHVzIixhY3Rpb246KCk9PmFsZXJ0KCJBZGQgbmV3IHRhc2siKX0se3R5cGU6ImFjdGlvbiIsa2V5OiJJbXBvcnQgVGFza3MiLGljb25OYW1lOiJsdWNpZGU6dXBsb2FkIixhY3Rpb246KCk9PmFsZXJ0KCJJbXBvcnQgdGFza3MiKX0se3R5cGU6ImRpdmlkZXIifSx7dHlwZToiYWN0aW9uIixrZXk6IkNsZWFyIENvbXBsZXRlZCIsaWNvbk5hbWU6Imx1Y2lkZTp0cmFzaDIiLHZhcmlhbnQ6ImRhbmdlciIsY29uZmlybU1lc3NhZ2U6IkRlbGV0ZSBhbGwgY29tcGxldGVkIHRhc2tzPyIsYWN0aW9uOigpPT5hbGVydCgiQ2xlYXJlZCBjb21wbGV0ZWQgdGFza3MiKX1dfV19KSxzLmFwcHVpLnNldENvbnRlbnRUYWJzKFt7a2V5OiJMaXN0IixpY29uTmFtZToibHVjaWRlOmxpc3QiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkxpc3QiKX0se2tleToiQ2FsZW5kYXIiLGljb25OYW1lOiJsdWNpZGU6Y2FsZW5kYXIiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkNhbGVuZGFyIil9XSl9cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBjb2xvcjogI2EzYTNhMzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICAgIGgxIHsgY29sb3I6ICNmYWZhZmE7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMjRweDsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC50YXNrLWxpc3QgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLnRhc2sgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICB9CiAgICAgICAgLmNoZWNrYm94IHsKICAgICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzUyNTI1MjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9CiAgICAgICAgLnRhc2stdGV4dCB7IGNvbG9yOiAjZmFmYWZhOyBmbGV4OiAxOyB9CiAgICAgICAgLmR1ZS1kYXRlIHsgY29sb3I6ICM3MzczNzM7IGZvbnQtc2l6ZTogMTJweDsgfQogICAgICAgIC5wcmlvcml0eSB7CiAgICAgICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIH0KICAgICAgICAucHJpb3JpdHkuaGlnaCB7IGJhY2tncm91bmQ6ICM0NTBhMGE7IGNvbG9yOiAjZjg3MTcxOyB9CiAgICAgICAgLnByaW9yaXR5Lm1lZGl1bSB7IGJhY2tncm91bmQ6ICM0NTFhMDM7IGNvbG9yOiAjZmJiZjI0OyB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5UYXNrczwvaDE+CiAgICAgIDxkaXYgY2xhc3M9InRhc2stbGlzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0idGFzayI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveCI+PC9kaXY+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGFzay10ZXh0Ij5SZXZpZXcgcHVsbCByZXF1ZXN0ICM0Mjwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJkdWUtZGF0ZSI+VG9kYXk8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0icHJpb3JpdHkgaGlnaCI+SGlnaDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPlVwZGF0ZSBkb2N1bWVudGF0aW9uPC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImR1ZS1kYXRlIj5Ub21vcnJvdzwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmlvcml0eSBtZWRpdW0iPk1lZGl1bTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPldyaXRlIHVuaXQgdGVzdHM8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iZHVlLWRhdGUiPkRlYyAyMDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfX07cmV0dXJuIG89cn0pKCksRUl0PSgpPT57bGV0IHQ9e2JyYW5kaW5nOntsb2dvSWNvbjoibHVjaWRlOmJveCIsbG9nb1RleHQ6IkFjbWUgQXBwIn0sYXBwQmFyOnttZW51SXRlbXM6W3tuYW1lOiJGaWxlIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6Ik5ldyBQcm9qZWN0IixzaG9ydGN1dDoiQ21kK04iLGljb25OYW1lOiJmaWxlUGx1cyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJOZXciKX0se25hbWU6Ik9wZW4uLi4iLHNob3J0Y3V0OiJDbWQrTyIsaWNvbk5hbWU6ImZvbGRlck9wZW4iLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiT3BlbiIpfSx7bmFtZToiUmVjZW50IFByb2plY3RzIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6Im15LWFwcCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJPcGVuIG15LWFwcCIpfSx7bmFtZToiY29tcG9uZW50LWxpYiIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJPcGVuIGNvbXBvbmVudC1saWIiKX1dfSx7ZGl2aWRlcjohMH0se25hbWU6IlNhdmUgQWxsIixzaG9ydGN1dDoiQ21kK1MiLGljb25OYW1lOiJzYXZlIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNhdmUiKX1dfSx7bmFtZToiRWRpdCIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJVbmRvIixzaG9ydGN1dDoiQ21kK1oiLGljb25OYW1lOiJ1bmRvIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlVuZG8iKX0se25hbWU6IlJlZG8iLHNob3J0Y3V0OiJDbWQrU2hpZnQrWiIsaWNvbk5hbWU6InJlZG8iLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiUmVkbyIpfSx7ZGl2aWRlcjohMH0se25hbWU6IkN1dCIsc2hvcnRjdXQ6IkNtZCtYIixpY29uTmFtZToic2Npc3NvcnMiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiQ3V0Iil9LHtuYW1lOiJDb3B5IixzaG9ydGN1dDoiQ21kK0MiLGljb25OYW1lOiJjb3B5IixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkNvcHkiKX0se25hbWU6IlBhc3RlIixzaG9ydGN1dDoiQ21kK1YiLGljb25OYW1lOiJjbGlwYm9hcmQiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiUGFzdGUiKX1dfSx7bmFtZToiVmlldyIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJUb2dnbGUgU2lkZWJhciIsc2hvcnRjdXQ6IkNtZCtCIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlRvZ2dsZSBzaWRlYmFyIil9LHtuYW1lOiJUb2dnbGUgQWN0aXZpdHkgTG9nIixzaG9ydGN1dDoiQ21kK1NoaWZ0K0EiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiVG9nZ2xlIGFjdGl2aXR5Iil9XX0se25hbWU6IkhlbHAiLGFjdGlvbjphc3luYygpPT57fSxzdWJtZW51Olt7bmFtZToiRG9jdW1lbnRhdGlvbiIsaWNvbk5hbWU6ImJvb2siLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiRG9jcyIpfSx7bmFtZToiS2V5Ym9hcmQgU2hvcnRjdXRzIixpY29uTmFtZToia2V5Ym9hcmQiLHNob3J0Y3V0OiJDbWQrLyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJTaG9ydGN1dHMiKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJBYm91dCIsaWNvbk5hbWU6ImluZm8iLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiQWJvdXQiKX1dfV0sYnJlYWRjcnVtYnM6IkRhc2hib2FyZCIsc2hvd1dpbmRvd0NvbnRyb2xzOiEwLHNob3dTZWFyY2g6ITAsdXNlcjp7bmFtZToiSmFuZSBTbWl0aCIsZW1haWw6ImphbmUuc21pdGhAZXhhbXBsZS5jb20iLHN0YXR1czoib25saW5lIn0scHJvZmlsZU1lbnVJdGVtczpbe25hbWU6IlByb2ZpbGUiLGljb25OYW1lOiJ1c2VyIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlByb2ZpbGUiKX0se25hbWU6IkFjY291bnQgU2V0dGluZ3MiLGljb25OYW1lOiJzZXR0aW5ncyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJTZXR0aW5ncyIpfSx7ZGl2aWRlcjohMH0se25hbWU6IkhlbHAgJiBTdXBwb3J0IixpY29uTmFtZToiaGVscENpcmNsZSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJIZWxwIil9LHtkaXZpZGVyOiEwfSx7bmFtZToiU2lnbiBPdXQiLGljb25OYW1lOiJsb2dPdXQiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiU2lnbiBvdXQiKX1dfSx2aWV3czpbe2lkOiJkYXNoYm9hcmQiLG5hbWU6IkRhc2hib2FyZCIsaWNvbk5hbWU6Imx1Y2lkZTpob21lIixjb250ZW50OiJkZW1vLWRhc2hib2FyZC12aWV3Iixyb3V0ZToiZGFzaGJvYXJkIn0se2lkOiJwcm9qZWN0cyIsbmFtZToiUHJvamVjdHMiLGljb25OYW1lOiJsdWNpZGU6Zm9sZGVyIixjb250ZW50OiJkZW1vLXByb2plY3RzLXZpZXciLHJvdXRlOiJwcm9qZWN0cyIsYmFkZ2U6M30se2lkOiJ0YXNrcyIsbmFtZToiVGFza3MiLGljb25OYW1lOiJsdWNpZGU6Y2hlY2tTcXVhcmUiLGNvbnRlbnQ6ImRlbW8tdGFza3MtdmlldyIscm91dGU6InRhc2tzIixiYWRnZToxMn0se2lkOiJzZXR0aW5ncyIsbmFtZToiU2V0dGluZ3MiLGljb25OYW1lOiJsdWNpZGU6c2V0dGluZ3MiLGNvbnRlbnQ6ImRlbW8tc2V0dGluZ3MtdmlldyIscm91dGU6InNldHRpbmdzLzpzZWN0aW9uPyJ9XSxtYWluTWVudTp7c2VjdGlvbnM6W3tuYW1lOiJNYWluIix2aWV3czpbImRhc2hib2FyZCJdfSx7bmFtZToiV29ya3NwYWNlIix2aWV3czpbInByb2plY3RzIiwidGFza3MiXX1dLGJvdHRvbUl0ZW1zOlsic2V0dGluZ3MiXX0sZGVmYXVsdFZpZXc6ImRhc2hib2FyZCIsYm90dG9tQmFyOnt2aXNpYmxlOiEwLHdpZGdldHM6W3tpZDoic3RhdHVzIixpY29uTmFtZToibHVjaWRlOmFjdGl2aXR5IixsYWJlbDoiU3lzdGVtIE9ubGluZSIsc3RhdHVzOiJzdWNjZXNzIix0b29sdGlwOiJBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCIsb25DbGljazooKT0+Y29uc29sZS5sb2coIlN0YXR1cyBjbGlja2VkIil9LHtpZDoibm90aWZpY2F0aW9ucyIsaWNvbk5hbWU6Imx1Y2lkZTpiZWxsIixsYWJlbDoiMyBub3RpZmljYXRpb25zIixzdGF0dXM6Indhcm5pbmciLHRvb2x0aXA6IllvdSBoYXZlIHVucmVhZCBub3RpZmljYXRpb25zIixvbkNsaWNrOigpPT5jb25zb2xlLmxvZygiTm90aWZpY2F0aW9ucyBjbGlja2VkIil9LHtpZDoidmVyc2lvbiIsaWNvbk5hbWU6Imx1Y2lkZTpnaXRCcmFuY2giLGxhYmVsOiJ2MS4yLjMiLHBvc2l0aW9uOiJyaWdodCIsdG9vbHRpcDoiQ3VycmVudCB2ZXJzaW9uIn1dLGFjdGlvbnM6W3tpZDoidGVybWluYWwiLGljb25OYW1lOiJsdWNpZGU6dGVybWluYWwiLHRvb2x0aXA6Ik9wZW4gVGVybWluYWwiLHBvc2l0aW9uOiJyaWdodCIsb25DbGljazooKT0+Y29uc29sZS5sb2coIlRlcm1pbmFsIGNsaWNrZWQiKX1dfSxvblZpZXdDaGFuZ2U6KHIsaSk9Pntjb25zb2xlLmxvZyhgVmlldyBjaGFuZ2VkIHRvOiAke3J9ICgke2kubmFtZX0pYCl9LG9uU2VhcmNoOnI9Pntjb25zb2xlLmxvZygiU2VhcmNoIHF1ZXJ5OiIscil9fSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuY2xhc3NOYW1lPSJkZW1vLWNvbnRhaW5lciIsZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsiO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtYXBwdWkiKTtyZXR1cm4gZS5hcHBlbmRDaGlsZChhKSxzZXRUaW1lb3V0KGFzeW5jKCk9Pnthd2FpdCBhLnVwZGF0ZUNvbXBsZXRlLGEuY29uZmlndXJlKHQpLHNldFRpbWVvdXQoKCk9PnthLmFjdGl2aXR5TG9nLmFkZE1hbnkoW3t0eXBlOiJsb2dpbiIsdXNlcjoiSmFuZSBTbWl0aCIsbWVzc2FnZToibG9nZ2VkIGluIGZyb20gQ2hyb21lIG9uIG1hY09TIn0se3R5cGU6ImNyZWF0ZSIsdXNlcjoiSmFuZSBTbWl0aCIsbWVzc2FnZTonY3JlYXRlZCBwcm9qZWN0ICJGcm9udGVuZCBBcHAiJ30se3R5cGU6InVwZGF0ZSIsdXNlcjoiSm9obiBEb2UiLG1lc3NhZ2U6InVwZGF0ZWQgQVBJIGRvY3VtZW50YXRpb24ifSx7dHlwZToidmlldyIsdXNlcjoiSmFuZSBTbWl0aCIsbWVzc2FnZToidmlld2VkIGRhc2hib2FyZCBhbmFseXRpY3MifSx7dHlwZToiZGVsZXRlIix1c2VyOiJBZG1pbiIsbWVzc2FnZToicmVtb3ZlZCBkZXByZWNhdGVkIGVuZHBvaW50In0se3R5cGU6ImN1c3RvbSIsdXNlcjoiU3lzdGVtIixtZXNzYWdlOiJzY2hlZHVsZWQgYmFja3VwIGNvbXBsZXRlZCIsaWNvbk5hbWU6Imx1Y2lkZTpkYXRhYmFzZSJ9XSl9LDUwMCksYS52aWV3Q2hhbmdlZCQuc3Vic2NyaWJlKHI9Pntjb25zb2xlLmxvZygiVmlldyBjaGFuZ2VkIGV2ZW50OiIsciksYS5zZXRCcmVhZGNydW1icyhyLnZpZXcubmFtZSl9KSxhLnZpZXdMaWZlY3ljbGUkLnN1YnNjcmliZShyPT57Y29uc29sZS5sb2coIkxpZmVjeWNsZSBldmVudDoiLHIudHlwZSxyLnZpZXdJZCl9KSxzZXRUaW1lb3V0KCgpPT57YS5zZXRNYWluTWVudUJhZGdlKCJ0YXNrcyIsMTUpLGEuYWN0aXZpdHlMb2cuYWRkKHt0eXBlOiJ1cGRhdGUiLHVzZXI6IlN5c3RlbSIsbWVzc2FnZToibmV3IHRhc2tzIGFkZGVkIn0pfSw1ZTMpfSwwKSxNYAogICAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICAgICR7ZX0KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgfTtmZSgpO3ZhciBZVT1jbGFzc3t2aWV3cz1uZXcgTWFwO2luc3RhbmNlcz1uZXcgTWFwO2N1cnJlbnRWaWV3SWQ9bnVsbDthcHB1aT1udWxsO3NldEFwcHVpUmVmKGUpe3RoaXMuYXBwdWk9ZX1yZWdpc3RlcihlKXt0aGlzLnZpZXdzLmhhcyhlLmlkKSYmY29uc29sZS53YXJuKGBWaWV3IHdpdGggaWQgIiR7ZS5pZH0iIGFscmVhZHkgcmVnaXN0ZXJlZC4gT3ZlcndyaXRpbmcuYCksdGhpcy52aWV3cy5zZXQoZS5pZCxlKX1yZWdpc3RlckFsbChlKXtlLmZvckVhY2goYT0+dGhpcy5yZWdpc3RlcihhKSl9Z2V0KGUpe3JldHVybiB0aGlzLnZpZXdzLmdldChlKX1nZXRWaWV3SWRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy52aWV3cy5rZXlzKCkpfWdldEFsbCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMudmlld3MudmFsdWVzKCkpfWdldFJvdXRlKGUpe2xldCBhPXRoaXMudmlld3MuZ2V0KGUpO3JldHVybiBhPy5yb3V0ZXx8YT8uaWR8fCIifWZpbmRCeVJvdXRlKGUpe2ZvcihsZXQgYSBvZiB0aGlzLnZpZXdzLnZhbHVlcygpKXtsZXQgcj1hLnJvdXRlfHxhLmlkLGk9dGhpcy5tYXRjaFJvdXRlKHIsZSk7aWYoaSE9PW51bGwpcmV0dXJue3ZpZXc6YSxwYXJhbXM6aX19fW1hdGNoUm91dGUoZSxhKXtsZXQgcj1lLnNwbGl0KCIvIiksaT1hLnNwbGl0KCIvIik7aWYoci5sZW5ndGg+MCYmcltyLmxlbmd0aC0xXS5lbmRzV2l0aCgiPyIpKXtpZihpLmxlbmd0aDxyLmxlbmd0aC0xfHxpLmxlbmd0aD5yLmxlbmd0aClyZXR1cm4gbnVsbH1lbHNlIGlmKHIubGVuZ3RoIT09aS5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IHM9e307Zm9yKGxldCBsPTA7bDxyLmxlbmd0aDtsKyspe2xldCBmPXJbbF0sYz1mLmVuZHNXaXRoKCI/Iik7aWYoYyYmKGY9Zi5zbGljZSgwLC0xKSksZi5zdGFydHNXaXRoKCI6Iikpe2xldCB1PWYuc2xpY2UoMSk7aWYoaVtsXSE9PXZvaWQgMClzW3VdPWlbbF07ZWxzZSBpZighYylyZXR1cm4gbnVsbH1lbHNlIGlmKGlbbF0hPT1mKXJldHVybiBudWxsfXJldHVybiBzfWFzeW5jIGNhbkxlYXZlQ3VycmVudFZpZXcoKXtpZighdGhpcy5jdXJyZW50Vmlld0lkKXJldHVybiEwO2xldCBlPXRoaXMuaW5zdGFuY2VzLmdldCh0aGlzLmN1cnJlbnRWaWV3SWQpO2lmKCFlKXJldHVybiEwO2xldCBhPWU7cmV0dXJuIHR5cGVvZiBhLmNhbkRlYWN0aXZhdGU9PSJmdW5jdGlvbiI/YXdhaXQgYS5jYW5EZWFjdGl2YXRlKCk6ITB9YXN5bmMgYWN0aXZhdGVWaWV3KGUsYSxyKXtsZXQgaT10aGlzLnZpZXdzLmdldChlKTtpZighaSlyZXR1cm4gY29uc29sZS5lcnJvcihgVmlldyAiJHtlfSIgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCksbnVsbDtsZXQgbz1pLmNhY2hlIT09ITE7dGhpcy5jdXJyZW50Vmlld0lkJiZ0aGlzLmN1cnJlbnRWaWV3SWQhPT1lJiZhd2FpdCB0aGlzLmRlYWN0aXZhdGVWaWV3KHRoaXMuY3VycmVudFZpZXdJZCk7bGV0IHM9bz90aGlzLmluc3RhbmNlcy5nZXQoZSk6dm9pZCAwO2lmKHMpcy5zdHlsZS5kaXNwbGF5PSIiO2Vsc2V7aWYocz1hd2FpdCB0aGlzLmNyZWF0ZVZpZXdFbGVtZW50KGkpLCFzKXJldHVybiBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQgZm9yIHZpZXcgIiR7ZX0iYCksbnVsbDthLmFwcGVuZENoaWxkKHMpLG8mJnRoaXMuaW5zdGFuY2VzLnNldChlLHMpfXJldHVybiB0aGlzLmN1cnJlbnRWaWV3SWQ9ZSxhd2FpdCB0aGlzLmNhbGxPbkFjdGl2YXRlKHMsZSxyKSxzfWFzeW5jIGRlYWN0aXZhdGVWaWV3KGUpe2xldCBhPXRoaXMuaW5zdGFuY2VzLmdldChlKTtpZighYSlyZXR1cm47bGV0IHI9YTt0eXBlb2Ygci5vbkRlYWN0aXZhdGU9PSJmdW5jdGlvbiImJmF3YWl0IHIub25EZWFjdGl2YXRlKCksYS5zdHlsZS5kaXNwbGF5PSJub25lIn1hc3luYyBjcmVhdGVWaWV3RWxlbWVudChlKXtsZXQgYT1lLmNvbnRlbnQ7aWYodHlwZW9mIGE9PSJmdW5jdGlvbiImJiEoYS5wcm90b3R5cGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkmJmEuY29uc3RydWN0b3IubmFtZT09PSJBc3luY0Z1bmN0aW9uIil0cnl7YT1hd2FpdCBhKCl9Y2F0Y2goaSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGFzeW5jIGNvbnRlbnQgZm9yIHZpZXcgIiR7ZS5pZH0iOmAsaSksbnVsbH1sZXQgcjtpZih0eXBlb2YgYT09InN0cmluZyIpcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGEpO2Vsc2UgaWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpaWYoYS5wcm90b3R5cGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudClyPW5ldyBhO2Vsc2V7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5jbGFzc05hbWU9InZpZXctY29udGVudC13cmFwcGVyIixpLnN0eWxlLmNzc1RleHQ9ImRpc3BsYXk6IGNvbnRlbnRzOyI7bGV0IG89YSgpO3dzKG8saSkscj1pfWVsc2UgcmV0dXJuIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgY29udGVudCB0eXBlIGZvciB2aWV3ICIke2UuaWR9ImApLG51bGw7cmV0dXJuIHIuZGF0YXNldC52aWV3SWQ9ZS5pZCxyfWFzeW5jIGNhbGxPbkFjdGl2YXRlKGUsYSxyKXtsZXQgaT1lO2lmKHR5cGVvZiBpLm9uQWN0aXZhdGU9PSJmdW5jdGlvbiIpe2xldCBvPXthcHB1aTp0aGlzLmFwcHVpLHZpZXdJZDphLHBhcmFtczpyfTthd2FpdCBpLm9uQWN0aXZhdGUobyl9fXJlbmRlclZpZXcoZSxhKXtsZXQgcj10aGlzLnZpZXdzLmdldChlKTtpZighcilyZXR1cm4gY29uc29sZS5lcnJvcihgVmlldyAiJHtlfSIgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCksbnVsbDthLmlubmVySFRNTD0iIjtsZXQgaSxvPXIuY29udGVudDtpZih0eXBlb2Ygbz09InN0cmluZyIpaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KG8pO2Vsc2UgaWYodHlwZW9mIG89PSJmdW5jdGlvbiIpaWYoby5wcm90b3R5cGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudClpPW5ldyBvO2Vsc2V7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cy5jbGFzc05hbWU9InZpZXctY29udGVudC13cmFwcGVyIixzLnN0eWxlLmNzc1RleHQ9ImRpc3BsYXk6IGNvbnRlbnRzOyI7bGV0IGw9bygpO3dzKGwscyksaT1zfWVsc2UgcmV0dXJuIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgY29udGVudCB0eXBlIGZvciB2aWV3ICIke2V9ImApLG51bGw7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoaSksdGhpcy5pbnN0YW5jZXMuc2V0KGUsaSksdGhpcy5jdXJyZW50Vmlld0lkPWUsaX1nZXRDdXJyZW50Vmlld0lkKCl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXdJZH1nZXRJbnN0YW5jZShlKXtyZXR1cm4gdGhpcy5pbnN0YW5jZXMuZ2V0KGUpfWNsZWFySW5zdGFuY2UoZSl7bGV0IGE9dGhpcy5pbnN0YW5jZXMuZ2V0KGUpO2EmJmEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLHRoaXMuaW5zdGFuY2VzLmRlbGV0ZShlKSx0aGlzLmN1cnJlbnRWaWV3SWQ9PT1lJiYodGhpcy5jdXJyZW50Vmlld0lkPW51bGwpfWNsZWFySW5zdGFuY2VzKCl7Zm9yKGxldFtlLGFdb2YgdGhpcy5pbnN0YW5jZXMpYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk7dGhpcy5pbnN0YW5jZXMuY2xlYXIoKSx0aGlzLmN1cnJlbnRWaWV3SWQ9bnVsbH11bnJlZ2lzdGVyKGUpe3JldHVybiB0aGlzLmNsZWFySW5zdGFuY2UoZSksdGhpcy52aWV3cy5kZWxldGUoZSl9Y2xlYXIoKXt0aGlzLnZpZXdzLmNsZWFyKCksdGhpcy5jbGVhckluc3RhbmNlcygpfWhhcyhlKXtyZXR1cm4gdGhpcy52aWV3cy5oYXMoZSl9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy52aWV3cy5zaXplfX07ZmUoKTt2YXIgTkl0PSgpPT5NYAogIDxzdHlsZT4KICAgIC5kZW1vLW1haW5tZW51LWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgfQogICAgLmRlbW8tbWFpbm1lbnUtY29udGFpbmVyIC5zcGFjZXIgewogICAgICBmbGV4OiAxOwogICAgICBiYWNrZ3JvdW5kOiAjMGYwZjBmOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0iZGVtby1tYWlubWVudS1jb250YWluZXIiPgogICAgPGRlZXMtYXBwdWktbWFpbm1lbnUKICAgICAgLmxvZ29JY29uPSR7Imx1Y2lkZTpib3gifQogICAgICAubG9nb1RleHQ9JHsiQWNtZSBBcHAifQogICAgICAubWVudUdyb3Vwcz0ke1t7dGFiczpbe2tleToiRGFzaGJvYXJkIixpY29uTmFtZToibHVjaWRlOmhvbWUiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkRhc2hib2FyZCIpfSx7a2V5OiJJbmJveCIsaWNvbk5hbWU6Imx1Y2lkZTppbmJveCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiSW5ib3giKX1dfSx7bmFtZToiV29ya3NwYWNlIix0YWJzOlt7a2V5OiJQcm9qZWN0cyIsaWNvbk5hbWU6Imx1Y2lkZTpmb2xkZXIiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIlByb2plY3RzIil9LHtrZXk6IlRhc2tzIixpY29uTmFtZToibHVjaWRlOmNoZWNrU3F1YXJlIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJUYXNrcyIpfSx7a2V5OiJEb2N1bWVudHMiLGljb25OYW1lOiJsdWNpZGU6ZmlsZVRleHQiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkRvY3VtZW50cyIpfV19LHtuYW1lOiJBbmFseXRpY3MiLHRhYnM6W3trZXk6IlJlcG9ydHMiLGljb25OYW1lOiJsdWNpZGU6YmFyQ2hhcnQzIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJSZXBvcnRzIil9LHtrZXk6Ikluc2lnaHRzIixpY29uTmFtZToibHVjaWRlOmxpZ2h0YnVsYiIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiSW5zaWdodHMiKX1dfV19CiAgICAgIC5ib3R0b21UYWJzPSR7W3trZXk6IlNldHRpbmdzIixpY29uTmFtZToibHVjaWRlOnNldHRpbmdzIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJTZXR0aW5ncyIpfSx7a2V5OiJIZWxwIixpY29uTmFtZToibHVjaWRlOmhlbHBDaXJjbGUiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkhlbHAiKX1dfQogICAgPjwvZGVlcy1hcHB1aS1tYWlubWVudT4KICAgIDxkaXYgY2xhc3M9InNwYWNlciI+PC9kaXY+CiAgPC9kaXY+CmA7ZmUoKTtCZSgpO3ZhciBzcz1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LEIyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxMbzE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWFwcHVpLW1haW5tZW51IildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W107dmFyIEg9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBMPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6U3RyaW5nfSldLGY9W0Qoe3R5cGU6U3RyaW5nfSldLGQ9W0Qoe3R5cGU6QXJyYXl9KV0sYj1bRCh7dHlwZTpBcnJheX0pXSx2PVtEKHt0eXBlOkFycmF5fSldLEU9W0QoKV0sUD1bRCh7dHlwZTpCb29sZWFuLHJlZmxlY3Q6ITB9KV0sc3ModGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsb2dvSWNvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImxvZ29JY29uImluIGssZ2V0Oms9PmsubG9nb0ljb24sc2V0OihrLE4pPT57ay5sb2dvSWNvbj1OfX0sbWV0YWRhdGE6TH0scyxsKSxzcyh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImxvZ29UZXh0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ibG9nb1RleHQiaW4gayxnZXQ6az0+ay5sb2dvVGV4dCxzZXQ6KGssTik9PntrLmxvZ29UZXh0PU59fSxtZXRhZGF0YTpMfSxjLHUpLHNzKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWVudUdyb3VwcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+Im1lbnVHcm91cHMiaW4gayxnZXQ6az0+ay5tZW51R3JvdXBzLHNldDooayxOKT0+e2subWVudUdyb3Vwcz1OfX0sbWV0YWRhdGE6TH0saCxnKSxzcyh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImJvdHRvbVRhYnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJib3R0b21UYWJzImluIGssZ2V0Oms9PmsuYm90dG9tVGFicyxzZXQ6KGssTik9PntrLmJvdHRvbVRhYnM9Tn19LG1ldGFkYXRhOkx9LHgsbSksc3ModGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4idGFicyJpbiBrLGdldDprPT5rLnRhYnMsc2V0OihrLE4pPT57ay50YWJzPU59fSxtZXRhZGF0YTpMfSx5LHcpLHNzKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWRUYWIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJzZWxlY3RlZFRhYiJpbiBrLGdldDprPT5rLnNlbGVjdGVkVGFiLHNldDooayxOKT0+e2suc2VsZWN0ZWRUYWI9Tn19LG1ldGFkYXRhOkx9LEMseiksc3ModGhpcyxudWxsLFAse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb2xsYXBzZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJjb2xsYXBzZWQiaW4gayxnZXQ6az0+ay5jb2xsYXBzZWQsc2V0OihrLE4pPT57ay5jb2xsYXBzZWQ9Tn19LG1ldGFkYXRhOkx9LF8sJCksc3MobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6TH0sbnVsbCxhKSxIPXI9ZS52YWx1ZSxMJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkx9KX1zdGF0aWMgZGVtbz1OSXQ7c3RhdGljIGRlbW9Hcm91cD0iQXBwIFVJIjsjZT1CMih0aGlzLHMsIiIpO2dldCBsb2dvSWNvbigpe3JldHVybiB0aGlzLiNlfXNldCBsb2dvSWNvbihMKXt0aGlzLiNlPUx9I3Q9KEIyKHRoaXMsbCksQjIodGhpcyxjLCIiKSk7Z2V0IGxvZ29UZXh0KCl7cmV0dXJuIHRoaXMuI3R9c2V0IGxvZ29UZXh0KEwpe3RoaXMuI3Q9TH0jYT0oQjIodGhpcyx1KSxCMih0aGlzLGgsW10pKTtnZXQgbWVudUdyb3Vwcygpe3JldHVybiB0aGlzLiNhfXNldCBtZW51R3JvdXBzKEwpe3RoaXMuI2E9TH0jcj0oQjIodGhpcyxnKSxCMih0aGlzLHgsW10pKTtnZXQgYm90dG9tVGFicygpe3JldHVybiB0aGlzLiNyfXNldCBib3R0b21UYWJzKEwpe3RoaXMuI3I9TH0jaT0oQjIodGhpcyxtKSxCMih0aGlzLHksW10pKTtnZXQgdGFicygpe3JldHVybiB0aGlzLiNpfXNldCB0YWJzKEwpe3RoaXMuI2k9TH0jbz0oQjIodGhpcyx3KSxCMih0aGlzLEMsdm9pZCAwKSk7Z2V0IHNlbGVjdGVkVGFiKCl7cmV0dXJuIHRoaXMuI299c2V0IHNlbGVjdGVkVGFiKEwpe3RoaXMuI289TH0jcz0oQjIodGhpcyx6KSxCMih0aGlzLF8sITEpKTtnZXQgY29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGNvbGxhcHNlZChMKXt0aGlzLiNzPUx9c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1tZW51LXdpZHRoLWV4cGFuZGVkOiAyMDBweDsKICAgICAgICAtLW1lbnUtd2lkdGgtY29sbGFwc2VkOiA1NnB4OwogICAgICAgIC0tdG9vbHRpcC1iZzogJHtwLmJkVGhlbWUoIiMxODE4MWIiLCIjZmFmYWZhIil9OwogICAgICAgIC0tdG9vbHRpcC1mZzogJHtwLmJkVGhlbWUoIiNmYWZhZmEiLCIjMTgxODFiIil9OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5tYWluQ29udGFpbmVyIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM2NjYiLCIjY2NjIil9OwogICAgICAgIHotaW5kZXg6ICR7WDEuZml4ZWQuYXBwQmFyfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiB2YXIoLS1tZW51LXdpZHRoLWV4cGFuZGVkKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmYWZhZmEiLCIjMGEwYTBhIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlNWU1IiwiIzFhMWExYSIpfTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tYWluQ29udGFpbmVyIHsKICAgICAgICB3aWR0aDogdmFyKC0tbWVudS13aWR0aC1jb2xsYXBzZWQpOwogICAgICB9CgogICAgICAvKiBGbG9hdGluZyBjb2xsYXBzZSB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5jb2xsYXBzZS10b2dnbGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogLTEycHg7CiAgICAgICAgdG9wOiAyNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTVlNSIsIiMzZjNmNDYiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzczNzM3MyIsIiNhMWExYWEiKX07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzZS10b2dnbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjRmNGY1IiwiIzNmM2Y0NiIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwYTBhMGEiLCIjZmFmYWZhIil9OwogICAgICB9CgogICAgICA6aG9zdCg6aG92ZXIpIC5jb2xsYXBzZS10b2dnbGUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzZS10b2dnbGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC8qIExvZ28gU2VjdGlvbiAqLwogICAgICAubG9nb1NlY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU1ZTUiLCIjMWExYTFhIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5sb2dvU2VjdGlvbiAubG9nb0ljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwYTBhMGEiLCIjZmFmYWZhIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubG9nb1NlY3Rpb24gLmxvZ29UZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzBhMGEwYSIsIiNmYWZhZmEiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmxvZ29TZWN0aW9uIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGdhcDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5sb2dvU2VjdGlvbiAubG9nb1RleHQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIE1pZGRsZSBTZWN0aW9uIChzY3JvbGxhYmxlKSAqLwogICAgICAubWVudVNlY3Rpb24gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMjUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSIpfTsKICAgICAgfQoKICAgICAgLyogTWVudSBHcm91cCAqLwogICAgICAubWVudUdyb3VwIHsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5tZW51R3JvdXA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzM3MzczIiwiIzczNzM3MyIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIG1heC1oZWlnaHQgMC4yNXMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiAzMHB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmdyb3VwSGVhZGVyIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5ncm91cFRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51R3JvdXAgewogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICB9CgogICAgICAvKiBUYWIgSXRlbSAqLwogICAgICAudGFiIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM1MjUyNTIiLCIjYTNhM2EzIil9OwogICAgICB9CgogICAgICAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMjYyNjI2IiwiI2U1ZTVlNSIpfTsKICAgICAgfQoKICAgICAgLnRhYjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDYpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzBhMGEwYSIsIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC50YWIuc2VsZWN0ZWRUYWI6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAzcHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjMGEwYTBhIiwiI2ZhZmFmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDJweCAycHggMDsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBvcGFjaXR5OiAwLjg1OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYiAudGFiTGFiZWwgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICAvKiBDb2xsYXBzZWQgdGFiIHN0eWxlcyAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYiB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiIC50YWJMYWJlbCB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiLnNlbGVjdGVkVGFiOjpiZWZvcmUgewogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgIH0KCiAgICAgIC8qIFRvb2x0aXAgZm9yIGNvbGxhcHNlZCBzdGF0ZSAqLwogICAgICAudGFiLXRvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxMDAlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBtYXJnaW4tbGVmdDogMTJweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10b29sdGlwLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tdG9vbHRpcC1mZyk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgfQoKICAgICAgLnRhYi10b29sdGlwOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtNHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmcpOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYjpob3ZlciAudGFiLXRvb2x0aXAgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMXM7CiAgICAgIH0KCiAgICAgIC8qIEJhZGdlIHN0eWxlcyAqLwogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDZweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgIC5iYWRnZS5kZWZhdWx0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjM2YzZjQ2IiwiI2ExYTFhYSIpfTsKICAgICAgfQoKICAgICAgLmJhZGdlLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZGNmY2U3IiwiIzE0NTMyZCIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMxNjY1MzQiLCIjNGFkZTgwIil9OwogICAgICB9CgogICAgICAuYmFkZ2Uud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZWYzYzciLCIjNDUxYTAzIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzkyNDAwZSIsIiNmYmJmMjQiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZWUyZTIiLCIjNDUwYTBhIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzk5MWIxYiIsIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEJvdHRvbSBTZWN0aW9uICovCiAgICAgIC5ib3R0b21TZWN0aW9uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlNWU1IiwiIzFhMWExYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuYm90dG9tU2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgfQogICAgYF07cmVuZGVyKCl7bGV0IEw9dGhpcy5nZXRBbGxUYWJzKCk7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9Im1haW5Db250YWluZXIiIEBjb250ZXh0bWVudT0ke2s9PntXdC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhrLFt7bmFtZToiYXBwIHNldHRpbmdzIixhY3Rpb246YXN5bmMoKT0+e30saWNvbk5hbWU6ImdlYXIifV0pfX0+CiAgICAgICAgJHt0aGlzLmxvZ29JY29ufHx0aGlzLmxvZ29UZXh0P01gCiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvU2VjdGlvbiI+CiAgICAgICAgICAgICR7dGhpcy5sb2dvSWNvbj9NYDxkZWVzLWljb24gY2xhc3M9ImxvZ29JY29uIiAuaWNvbj0iJHt0aGlzLmxvZ29JY29ufSI+PC9kZWVzLWljb24+YDoiIn0KICAgICAgICAgICAgJHt0aGlzLmxvZ29UZXh0P01gPHNwYW4gY2xhc3M9ImxvZ29UZXh0Ij4ke3RoaXMubG9nb1RleHR9PC9zcGFuPmA6IiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQoKICAgICAgICA8ZGl2IGNsYXNzPSJtZW51U2VjdGlvbiI+CiAgICAgICAgICAke3RoaXMubWVudUdyb3Vwcy5sZW5ndGg+MD90aGlzLnJlbmRlck1lbnVHcm91cHMoKTp0aGlzLnJlbmRlckxlZ2FjeVRhYnMoKX0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLmJvdHRvbVRhYnMubGVuZ3RoPjA/TWAKICAgICAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbVNlY3Rpb24iPgogICAgICAgICAgICAke3RoaXMuYm90dG9tVGFicy5tYXAoaz0+dGhpcy5yZW5kZXJUYWIoaykpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDoiIn0KICAgICAgPC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9ImNvbGxhcHNlLXRvZ2dsZSIgQGNsaWNrPSIkeygpPT50aGlzLnRvZ2dsZUNvbGxhcHNlKCl9Ij4KICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMuY29sbGFwc2VkPyJsdWNpZGU6Y2hldnJvblJpZ2h0IjoibHVjaWRlOmNoZXZyb25MZWZ0In0iPjwvZGVlcy1pY29uPgogICAgICA8L2J1dHRvbj4KICAgIGB9cmVuZGVyTWVudUdyb3Vwcygpe3JldHVybiBNYAogICAgICAke3RoaXMubWVudUdyb3Vwcy5tYXAoTD0+TWAKICAgICAgICA8ZGl2IGNsYXNzPSJtZW51R3JvdXAiPgogICAgICAgICAgJHtMLm5hbWU/TWA8ZGl2IGNsYXNzPSJncm91cEhlYWRlciI+JHtMLm5hbWV9PC9kaXY+YDoiIn0KICAgICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwVGFicyI+CiAgICAgICAgICAgICR7TC5pdGVtcy5tYXAoaz0+dGhpcy5yZW5kZXJUYWIoaykpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGApfQogICAgYH1yZW5kZXJMZWdhY3lUYWJzKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9Im1lbnVHcm91cCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXBUYWJzIj4KICAgICAgICAgICR7dGhpcy50YWJzLm1hcChMPT50aGlzLnJlbmRlclRhYihMKSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJUYWIoTCl7cmV0dXJuIE1gCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0idGFiICR7TD09PXRoaXMuc2VsZWN0ZWRUYWI/InNlbGVjdGVkVGFiIjoiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpPT57dGhpcy51cGRhdGVUYWIoTCl9fSIKICAgICAgPgogICAgICAgIDxkZWVzLWljb24gLmljb249IiR7TC5pY29uTmFtZXx8IiJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICA8c3BhbiBjbGFzcz0idGFiTGFiZWwiPiR7TC5rZXl9PC9zcGFuPgogICAgICAgICR7TC5iYWRnZSE9PXZvaWQgMD9NYAogICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlICR7TC5iYWRnZVZhcmlhbnR8fCJkZWZhdWx0In0iPiR7TC5iYWRnZX08L3NwYW4+CiAgICAgICAgYDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idGFiLXRvb2x0aXAiPiR7TC5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGB9Z2V0QWxsVGFicygpe3JldHVybiB0aGlzLm1lbnVHcm91cHMubGVuZ3RoPjA/Wy4uLnRoaXMubWVudUdyb3Vwcy5mbGF0TWFwKGs9PmsuaXRlbXMpLC4uLnRoaXMuYm90dG9tVGFic106Wy4uLnRoaXMudGFicywuLi50aGlzLmJvdHRvbVRhYnNdfXVwZGF0ZVRhYihMKXt0aGlzLnNlbGVjdGVkVGFiPUwsdGhpcy5zZWxlY3RlZFRhYi5hY3Rpb24oKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0Iix7ZGV0YWlsOnt0YWI6TH0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1maXJzdFVwZGF0ZWQoKXtsZXQgTD10aGlzLmdldEFsbFRhYnMoKTtMLmxlbmd0aD4wJiZ0aGlzLnVwZGF0ZVRhYihMWzBdKX10b2dnbGVDb2xsYXBzZSgpe3RoaXMuY29sbGFwc2VkPSF0aGlzLmNvbGxhcHNlZCx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2xsYXBzZS1jaGFuZ2UiLHtkZXRhaWw6e2NvbGxhcHNlZDp0aGlzLmNvbGxhcHNlZH0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksQjIodGhpcywkKX1zdGF0aWN7QjIocixhKX19O3JldHVybiBIPXJ9KSgpO2ZlKCk7dmFyIFBJdD0oKT0+TWAKICA8c3R5bGU+CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciB7CiAgICAgIGZsZXg6IDE7CiAgICAgIGJhY2tncm91bmQ6ICMwZjBmMGY7CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciBoMyB7CiAgICAgIGNvbG9yOiAjZmFmYWZhOwogICAgICBtYXJnaW4tdG9wOiAwOwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciBjb2RlIHsKICAgICAgYmFja2dyb3VuZDogIzI3MjcyYTsKICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciAuc3BhY2VyIHVsIHsKICAgICAgbGluZS1oZWlnaHQ6IDEuODsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIiPgogICAgPGRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudQogICAgICAuaGVhZGluZz0keyJQcm9qZWN0cyJ9CiAgICAgIC5ncm91cHM9JHtbe25hbWU6Ik5hdmlnYXRpb24iLGljb25OYW1lOiJsdWNpZGU6Y29tcGFzcyIsaXRlbXM6W3trZXk6IkRhc2hib2FyZCIsaWNvbk5hbWU6Imx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkRhc2hib2FyZCBjbGlja2VkIiksYmFkZ2U6MyxiYWRnZVZhcmlhbnQ6Indhcm5pbmcifSx7a2V5OiJQcm9qZWN0cyIsaWNvbk5hbWU6Imx1Y2lkZTpmb2xkZXIiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIlByb2plY3RzIGNsaWNrZWQiKSxiYWRnZToibmV3IixiYWRnZVZhcmlhbnQ6InN1Y2Nlc3MifSx7a2V5OiJBbmFseXRpY3MiLGljb25OYW1lOiJsdWNpZGU6YmFyQ2hhcnQyIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJBbmFseXRpY3MgY2xpY2tlZCIpfV19LHtuYW1lOiJBY3Rpb25zIixpY29uTmFtZToibHVjaWRlOnphcCIsaXRlbXM6W3t0eXBlOiJhY3Rpb24iLGtleToiQ3JlYXRlIE5ldyIsaWNvbk5hbWU6Imx1Y2lkZTpwbHVzIixhY3Rpb246KCk9PmFsZXJ0KCJDcmVhdGUgTmV3IGNsaWNrZWQhIil9LHt0eXBlOiJhY3Rpb24iLGtleToiSW1wb3J0IERhdGEiLGljb25OYW1lOiJsdWNpZGU6dXBsb2FkIixhY3Rpb246KCk9PmFsZXJ0KCJJbXBvcnQgRGF0YSBjbGlja2VkISIpfSx7dHlwZToiZGl2aWRlciJ9LHt0eXBlOiJhY3Rpb24iLGtleToiRGVsZXRlIEFsbCIsaWNvbk5hbWU6Imx1Y2lkZTp0cmFzaDIiLHZhcmlhbnQ6ImRhbmdlciIsY29uZmlybU1lc3NhZ2U6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgYWxsIGl0ZW1zPyIsYWN0aW9uOigpPT5hbGVydCgiRGVsZXRlZCEiKX1dfSx7bmFtZToiRmlsdGVycyIsaWNvbk5hbWU6Imx1Y2lkZTpmaWx0ZXIiLGl0ZW1zOlt7dHlwZToiaGVhZGVyIixsYWJlbDoiU3RhdHVzIn0se3R5cGU6ImZpbHRlciIsa2V5OiJTaG93IEFjdGl2ZSIsaWNvbk5hbWU6Imx1Y2lkZTpjaGVja0NpcmNsZSIsYWN0aXZlOiEwLG9uVG9nZ2xlOnQ9PmNvbnNvbGUubG9nKCJTaG93IEFjdGl2ZToiLHQpfSx7dHlwZToiZmlsdGVyIixrZXk6IlNob3cgQXJjaGl2ZWQiLGljb25OYW1lOiJsdWNpZGU6YXJjaGl2ZSIsYWN0aXZlOiExLG9uVG9nZ2xlOnQ9PmNvbnNvbGUubG9nKCJTaG93IEFyY2hpdmVkOiIsdCl9LHt0eXBlOiJkaXZpZGVyIn0se3R5cGU6Im11bHRpRmlsdGVyIixrZXk6IkNhdGVnb3JpZXMiLGljb25OYW1lOiJsdWNpZGU6dGFnIixjb2xsYXBzZWQ6ITEsb3B0aW9uczpbe2tleToiZnJvbnRlbmQiLGxhYmVsOiJGcm9udGVuZCIsY2hlY2tlZDohMCxpY29uTmFtZToibHVjaWRlOm1vbml0b3IifSx7a2V5OiJiYWNrZW5kIixsYWJlbDoiQmFja2VuZCIsY2hlY2tlZDohMCxpY29uTmFtZToibHVjaWRlOnNlcnZlciJ9LHtrZXk6ImRldm9wcyIsbGFiZWw6IkRldk9wcyIsY2hlY2tlZDohMSxpY29uTmFtZToibHVjaWRlOmNsb3VkIn0se2tleToiZGVzaWduIixsYWJlbDoiRGVzaWduIixjaGVja2VkOiExLGljb25OYW1lOiJsdWNpZGU6cGFsZXR0ZSJ9XSxvbkNoYW5nZTp0PT5jb25zb2xlLmxvZygiU2VsZWN0ZWQgY2F0ZWdvcmllczoiLHQpfV19LHtuYW1lOiJSZXNvdXJjZXMiLGljb25OYW1lOiJsdWNpZGU6Ym9va09wZW4iLGNvbGxhcHNlZDohMCxpdGVtczpbe3R5cGU6ImhlYWRlciIsbGFiZWw6IkRvY3VtZW50YXRpb24ifSx7dHlwZToibGluayIsa2V5OiJBUEkgUmVmZXJlbmNlIixpY29uTmFtZToibHVjaWRlOmZpbGVUZXh0IixocmVmOiJodHRwczovL2FwaS5leGFtcGxlLmNvbS9kb2NzIn0se3R5cGU6ImxpbmsiLGtleToiVXNlciBHdWlkZSIsaWNvbk5hbWU6Imx1Y2lkZTpib29rIixocmVmOiJodHRwczovL2RvY3MuZXhhbXBsZS5jb20vZ3VpZGUifSx7dHlwZToiZGl2aWRlciJ9LHt0eXBlOiJoZWFkZXIiLGxhYmVsOiJTdXBwb3J0In0se3R5cGU6ImxpbmsiLGtleToiSGVscCBDZW50ZXIiLGljb25OYW1lOiJsdWNpZGU6aGVscENpcmNsZSIsaHJlZjoiL2hlbHAiLGV4dGVybmFsOiExfSx7dHlwZToibGluayIsa2V5OiJHaXRIdWIgSXNzdWVzIixpY29uTmFtZToibHVjaWRlOmdpdGh1YiIsaHJlZjoiaHR0cHM6Ly9naXRodWIuY29tL2V4YW1wbGUvaXNzdWVzIn1dfV19CiAgICAgIEBpdGVtLXNlbGVjdD0ke3Q9PmNvbnNvbGUubG9nKCJUYWIgc2VsZWN0ZWQ6Iix0LmRldGFpbCl9CiAgICAgIEBhY3Rpb24tY2xpY2s9JHt0PT5jb25zb2xlLmxvZygiQWN0aW9uIGNsaWNrZWQ6Iix0LmRldGFpbCl9CiAgICAgIEBmaWx0ZXItdG9nZ2xlPSR7dD0+Y29uc29sZS5sb2coIkZpbHRlciB0b2dnbGVkOiIsdC5kZXRhaWwpfQogICAgICBAbXVsdGlmaWx0ZXItY2hhbmdlPSR7dD0+Y29uc29sZS5sb2coIk11bHRpLWZpbHRlciBjaGFuZ2VkOiIsdC5kZXRhaWwpfQogICAgICBAbGluay1jbGljaz0ke3Q9PmNvbnNvbGUubG9nKCJMaW5rIGNsaWNrZWQ6Iix0LmRldGFpbCl9CiAgICA+PC9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnU+CiAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPgogICAgICA8aDM+U2Vjb25kYXJ5IE1lbnUgRGVtbzwvaDM+CiAgICAgIDxwPlRoaXMgZGVtbyBzaG93Y2FzZXMgYWxsIDggaXRlbSB0eXBlczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PGNvZGU+dGFiPC9jb2RlPiAtIFNlbGVjdGFibGUgaXRlbXMgKE5hdmlnYXRpb24gZ3JvdXApPC9saT4KICAgICAgICA8bGk+PGNvZGU+YWN0aW9uPC9jb2RlPiAtIEJsdWUgYWN0aW9ucyAoQWN0aW9ucyBncm91cCk8L2xpPgogICAgICAgIDxsaT48Y29kZT5hY3Rpb248L2NvZGU+IHdpdGggPGNvZGU+dmFyaWFudDogJ2Rhbmdlcic8L2NvZGU+IC0gUmVkIGRhbmdlciBhY3Rpb248L2xpPgogICAgICAgIDxsaT48Y29kZT5maWx0ZXI8L2NvZGU+IC0gQ2hlY2tib3ggdG9nZ2xlcyAoRmlsdGVycyBncm91cCk8L2xpPgogICAgICAgIDxsaT48Y29kZT5tdWx0aUZpbHRlcjwvY29kZT4gLSBDb2xsYXBzaWJsZSBtdWx0aS1zZWxlY3QgKENhdGVnb3JpZXMpPC9saT4KICAgICAgICA8bGk+PGNvZGU+ZGl2aWRlcjwvY29kZT4gLSBWaXN1YWwgc2VwYXJhdG9yczwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmhlYWRlcjwvY29kZT4gLSBTZWN0aW9uIGxhYmVsczwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmxpbms8L2NvZGU+IC0gRXh0ZXJuYWwvaW50ZXJuYWwgbGlua3MgKFJlc291cmNlcyBncm91cCk8L2xpPgogICAgICA8L3VsPgogICAgICA8cD5UcnkgdGhlIGNvbGxhcHNlIHRvZ2dsZSBvbiB0aGUgbGVmdCBlZGdlITwvcD4KICAgIDwvZGl2PgogIDwvZGl2PgpgO0Z0KCk7ZmUoKTtCZSgpO3ZhciBWaT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LG8yPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxUbzE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXSx2LHk9W10sdz1bXSxFLEM9W10sej1bXSxQLF89W10sJD1bXSxILEw9W10saz1bXTt2YXIgTj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IFM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpTdHJpbmd9KV0sZj1bRCh7dHlwZTpBcnJheX0pXSxkPVtEKHt0eXBlOkFycmF5fSldLGI9W0Qoe3R5cGU6T2JqZWN0fSldLHY9W2xlKCldLEU9W2xlKCldLFA9W2xlKCldLEg9W0Qoe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLFZpKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaGVhZGluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VD0+ImhlYWRpbmciaW4gVCxnZXQ6VD0+VC5oZWFkaW5nLHNldDooVCxSKT0+e1QuaGVhZGluZz1SfX0sbWV0YWRhdGE6U30scyxsKSxWaSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Imdyb3VwcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VD0+Imdyb3VwcyJpbiBULGdldDpUPT5ULmdyb3VwcyxzZXQ6KFQsUik9PntULmdyb3Vwcz1SfX0sbWV0YWRhdGE6U30sYyx1KSxWaSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGlvbk9wdGlvbnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJzZWxlY3Rpb25PcHRpb25zImluIFQsZ2V0OlQ9PlQuc2VsZWN0aW9uT3B0aW9ucyxzZXQ6KFQsUik9PntULnNlbGVjdGlvbk9wdGlvbnM9Un19LG1ldGFkYXRhOlN9LGgsZyksVmkodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZEl0ZW0iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJzZWxlY3RlZEl0ZW0iaW4gVCxnZXQ6VD0+VC5zZWxlY3RlZEl0ZW0sc2V0OihULFIpPT57VC5zZWxlY3RlZEl0ZW09Un19LG1ldGFkYXRhOlN9LHgsbSksVmkodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb2xsYXBzZWRHcm91cHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJjb2xsYXBzZWRHcm91cHMiaW4gVCxnZXQ6VD0+VC5jb2xsYXBzZWRHcm91cHMsc2V0OihULFIpPT57VC5jb2xsYXBzZWRHcm91cHM9Un19LG1ldGFkYXRhOlN9LHksdyksVmkodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb2xsYXBzZWRNdWx0aUZpbHRlcnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJjb2xsYXBzZWRNdWx0aUZpbHRlcnMiaW4gVCxnZXQ6VD0+VC5jb2xsYXBzZWRNdWx0aUZpbHRlcnMsc2V0OihULFIpPT57VC5jb2xsYXBzZWRNdWx0aUZpbHRlcnM9Un19LG1ldGFkYXRhOlN9LEMseiksVmkodGhpcyxudWxsLFAse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyZW5kZXJDb3VudGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4icmVuZGVyQ291bnRlciJpbiBULGdldDpUPT5ULnJlbmRlckNvdW50ZXIsc2V0OihULFIpPT57VC5yZW5kZXJDb3VudGVyPVJ9fSxtZXRhZGF0YTpTfSxfLCQpLFZpKHRoaXMsbnVsbCxILHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29sbGFwc2VkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4iY29sbGFwc2VkImluIFQsZ2V0OlQ9PlQuY29sbGFwc2VkLHNldDooVCxSKT0+e1QuY29sbGFwc2VkPVJ9fSxtZXRhZGF0YTpTfSxMLGspLFZpKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOlN9LG51bGwsYSksTj1yPWUudmFsdWUsUyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpTfSl9c3RhdGljIGRlbW89UEl0O3N0YXRpYyBkZW1vR3JvdXA9IkFwcCBVSSI7I2U9bzIodGhpcyxzLCJNZW51Iik7Z2V0IGhlYWRpbmcoKXtyZXR1cm4gdGhpcy4jZX1zZXQgaGVhZGluZyhTKXt0aGlzLiNlPVN9I3Q9KG8yKHRoaXMsbCksbzIodGhpcyxjLFtdKSk7Z2V0IGdyb3Vwcygpe3JldHVybiB0aGlzLiN0fXNldCBncm91cHMoUyl7dGhpcy4jdD1TfSNhPShvMih0aGlzLHUpLG8yKHRoaXMsaCxbXSkpO2dldCBzZWxlY3Rpb25PcHRpb25zKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHNlbGVjdGlvbk9wdGlvbnMoUyl7dGhpcy4jYT1TfSNyPShvMih0aGlzLGcpLG8yKHRoaXMseCxudWxsKSk7Z2V0IHNlbGVjdGVkSXRlbSgpe3JldHVybiB0aGlzLiNyfXNldCBzZWxlY3RlZEl0ZW0oUyl7dGhpcy4jcj1TfSNpPShvMih0aGlzLG0pLG8yKHRoaXMseSxuZXcgU2V0KSk7Z2V0IGNvbGxhcHNlZEdyb3Vwcygpe3JldHVybiB0aGlzLiNpfXNldCBjb2xsYXBzZWRHcm91cHMoUyl7dGhpcy4jaT1TfSNvPShvMih0aGlzLHcpLG8yKHRoaXMsQyxuZXcgU2V0KSk7Z2V0IGNvbGxhcHNlZE11bHRpRmlsdGVycygpe3JldHVybiB0aGlzLiNvfXNldCBjb2xsYXBzZWRNdWx0aUZpbHRlcnMoUyl7dGhpcy4jbz1TfSNzPShvMih0aGlzLHopLG8yKHRoaXMsXywwKSk7Z2V0IHJlbmRlckNvdW50ZXIoKXtyZXR1cm4gdGhpcy4jc31zZXQgcmVuZGVyQ291bnRlcihTKXt0aGlzLiNzPVN9I249KG8yKHRoaXMsJCksbzIodGhpcyxMLCExKSk7Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLiNufXNldCBjb2xsYXBzZWQoUyl7dGhpcy4jbj1TfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIC0tc2lkZWJhci13aWR0aC1leHBhbmRlZDogMjQwcHg7CiAgICAgICAgLS1zaWRlYmFyLXdpZHRoLWNvbGxhcHNlZDogNTZweDsKICAgICAgICAtLXNpZGViYXItYmc6ICR7cC5iZFRoZW1lKCIjZmFmYWZhIiwiIzBhMGEwYSIpfTsKICAgICAgICAtLXNpZGViYXItZmc6ICR7cC5iZFRoZW1lKCIjNTI1MjUyIiwiI2EzYTNhMyIpfTsKICAgICAgICAtLXNpZGViYXItZmctbXV0ZWQ6ICR7cC5iZFRoZW1lKCIjNzM3MzczIiwiIzczNzM3MyIpfTsKICAgICAgICAtLXNpZGViYXItZmctYWN0aXZlOiAke3AuYmRUaGVtZSgiIzBhMGEwYSIsIiNmYWZhZmEiKX07CiAgICAgICAgLS1zaWRlYmFyLWJvcmRlcjogJHtwLmJkVGhlbWUoIiNlNWU1ZTUiLCIjMWExYTFhIil9OwogICAgICAgIC0tc2lkZWJhci1ob3ZlcjogJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNCkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIC0tc2lkZWJhci1hY3RpdmU6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDYpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgICAtLXNpZGViYXItYWNjZW50OiAke3AuYmRUaGVtZSgiIzBhMGEwYSIsIiNmYWZhZmEiKX07CiAgICAgICAgLS10b29sdGlwLWJnOiAke3AuYmRUaGVtZSgiIzE4MTgxYiIsIiNmYWZhZmEiKX07CiAgICAgICAgLS10b29sdGlwLWZnOiAke3AuYmRUaGVtZSgiI2ZhZmFmYSIsIiMxODE4MWIiKX07CgogICAgICAgIC8qIEJhZGdlIGNvbG9ycyAqLwogICAgICAgIC0tYmFkZ2UtZGVmYXVsdC1iZzogJHtwLmJkVGhlbWUoIiNmNGY0ZjUiLCIjMjcyNzJhIil9OwogICAgICAgIC0tYmFkZ2UtZGVmYXVsdC1mZzogJHtwLmJkVGhlbWUoIiMzZjNmNDYiLCIjYTFhMWFhIil9OwogICAgICAgIC0tYmFkZ2Utc3VjY2Vzcy1iZzogJHtwLmJkVGhlbWUoIiNkY2ZjZTciLCIjMTQ1MzJkIil9OwogICAgICAgIC0tYmFkZ2Utc3VjY2Vzcy1mZzogJHtwLmJkVGhlbWUoIiMxNjY1MzQiLCIjNGFkZTgwIil9OwogICAgICAgIC0tYmFkZ2Utd2FybmluZy1iZzogJHtwLmJkVGhlbWUoIiNmZWYzYzciLCIjNDUxYTAzIil9OwogICAgICAgIC0tYmFkZ2Utd2FybmluZy1mZzogJHtwLmJkVGhlbWUoIiM5MjQwMGUiLCIjZmJiZjI0Iil9OwogICAgICAgIC0tYmFkZ2UtZXJyb3ItYmc6ICR7cC5iZFRoZW1lKCIjZmVlMmUyIiwiIzQ1MGEwYSIpfTsKICAgICAgICAtLWJhZGdlLWVycm9yLWZnOiAke3AuYmRUaGVtZSgiIzk5MWIxYiIsIiNmODcxNzEiKX07CgogICAgICAgIC8qIEFjdGlvbiBjb2xvcnMgKi8KICAgICAgICAtLWFjdGlvbi1wcmltYXJ5OiAke3AuYmRUaGVtZSgiIzI1NjNlYiIsIiMzYjgyZjYiKX07CiAgICAgICAgLS1hY3Rpb24tcHJpbWFyeS1ob3ZlcjogJHtwLmJkVGhlbWUoIiMxZDRlZDgiLCIjNjBhNWZhIil9OwogICAgICAgIC0tYWN0aW9uLWRhbmdlcjogJHtwLmJkVGhlbWUoIiNkYzI2MjYiLCIjZWY0NDQ0Iil9OwogICAgICAgIC0tYWN0aW9uLWRhbmdlci1ob3ZlcjogJHtwLmJkVGhlbWUoIiNiOTFjMWMiLCIjZjg3MTcxIil9OwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiB2YXIoLS1zaWRlYmFyLXdpZHRoLWV4cGFuZGVkKTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWJnKTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzYW5zLXNlcmlmOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSB7CiAgICAgICAgd2lkdGg6IHZhcigtLXNpZGViYXItd2lkdGgtY29sbGFwc2VkKTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC8qIEZsb2F0aW5nIGNvbGxhcHNlIHRvZ2dsZSBidXR0b24gKi8KICAgICAgLmNvbGxhcHNlLXRvZ2dsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMTJweDsKICAgICAgICB0b3A6IDI0cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMjcyNzJhIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlNWU1IiwiIzNmM2Y0NiIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzM3MzczIiwiI2ExYTFhYSIpfTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmNvbGxhcHNlLXRvZ2dsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmNGY0ZjUiLCIjM2YzZjQ2Iil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzBhMGEwYSIsIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgLmNvbGxhcHNlLXRvZ2dsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbGxhcHNlLXRvZ2dsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLyogSGVhZGVyIFNlY3Rpb24gKi8KICAgICAgLmhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLmhlYWRlciAuaGVhZGluZyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5oZWFkZXIgewogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmhlYWRlciAuaGVhZGluZyB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAvKiBTY3JvbGxhYmxlIE1lbnUgU2VjdGlvbiAqLwogICAgICAubWVudVNlY3Rpb24gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMjUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSIpfTsKICAgICAgfQoKICAgICAgLyogTWVudSBHcm91cCAqLwogICAgICAubWVudUdyb3VwIHsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUdyb3VwIHsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZSwgbWF4LWhlaWdodCAwLjI1cyBlYXNlOwogICAgICAgIG1heC1oZWlnaHQ6IDQwcHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlcjpob3ZlciB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoInJnYmEoMTQwLCAxMjAsIDEwMCwgMC4wNikiLCJyZ2JhKDE4MCwgMTYwLCAxNDAsIDAuMDgpIil9OwogICAgICAgIHBhZGRpbmc6IDdweCAxMXB4OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXI6bm90KC5jb2xsYXBzZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgxNDAsIDEyMCwgMTAwLCAwLjA2KSIsInJnYmEoMTgwLCAxNjAsIDE0MCwgMC4wOCkiKX07CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXIgLmdyb3VwVGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3ODcxNmMiLCIjYjVhOTlhIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIC5ncm91cFRpdGxlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzc4NzE2YyIsIiNiNWE5OWEiKX07CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciAuY2hldnJvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzg3MTZjIiwiI2I1YTk5YSIpfTsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyLmNvbGxhcHNlZCAuY2hldnJvbiB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTsKICAgICAgfQoKICAgICAgLyogSGlkZSBncm91cCBoZWFkZXJzIHdoZW4gaG9yaXpvbnRhbGx5IGNvbGxhcHNlZCAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmdyb3VwSGVhZGVyIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEdyb3VwIEl0ZW1zIENvbnRhaW5lciAqLwogICAgICAuZ3JvdXBJdGVtcyB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuMjVzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlLCBtYXJnaW4gMC4yNXMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDAwcHg7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICB9CgogICAgICAuZ3JvdXBJdGVtcy5jb2xsYXBzZWQgewogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBBbHdheXMgc2hvdyBpdGVtcyB3aGVuIGhvcml6b250YWxseSBjb2xsYXBzZWQgKHJlZ2FyZGxlc3Mgb2YgZ3JvdXAgY29sbGFwc2Ugc3RhdGUpICovCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuZ3JvdXBJdGVtcyB7CiAgICAgICAgbWF4LWhlaWdodDogbm9uZTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBNZW51IEl0ZW0gQmFzZSAqLwogICAgICAubWVudUl0ZW0gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIG1hcmdpbjogMnB4IDA7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0NTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZyk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ob3Zlcik7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY3RpdmUpOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYWN0aXZlKTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDNweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICB9CgogICAgICAubWVudUl0ZW0gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubWVudUl0ZW0uc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0gLml0ZW1MYWJlbCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC8qIEFjdGlvbiBJdGVtIFN0eWxlcyAqLwogICAgICAubWVudUl0ZW0uYWN0aW9uLXByaW1hcnkgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpb24tcHJpbWFyeSk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tcHJpbWFyeTpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1wcmltYXJ5LWhvdmVyKTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgzNywgOTksIDIzNSwgMC4wOCkiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xMikiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tcHJpbWFyeSBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tZGFuZ2VyIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aW9uLWRhbmdlcik7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tZGFuZ2VyOmhvdmVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aW9uLWRhbmdlci1ob3Zlcik7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMjIwLCAzOCwgMzgsIDAuMDgpIiwicmdiYSgyMzksIDY4LCA2OCwgMC4xMikiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tZGFuZ2VyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLyogRmlsdGVyIEl0ZW0gU3R5bGVzICovCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgewogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmZpbHRlciAuZmlsdGVyLWNoZWNrYm94IHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgJHtwLmJkVGhlbWUoIiNkNGQ0ZDQiLCIjNTI1MjUyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgLmZpbHRlci1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgLmZpbHRlci1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiNmYWZhZmEiLCIjMGEwYTBhIil9OwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIuYWN0aXZlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICB9CgogICAgICAvKiBNdWx0aS1GaWx0ZXIgQ29udGFpbmVyICovCiAgICAgIC5tdWx0aUZpbHRlciB7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wMikiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDIpIil9OwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItaGVhZGVyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWhvdmVyKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlciAubXVsdGlGaWx0ZXItdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItaGVhZGVyIC5tdWx0aUZpbHRlci10aXRsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLm11bHRpRmlsdGVyLWNvdW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctbXV0ZWQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLWRlZmF1bHQtYmcpOwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItaGVhZGVyIC5jaGV2cm9uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1tdXRlZCk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIuY29sbGFwc2VkIC5jaGV2cm9uIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9ucyB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXNpZGViYXItYm9yZGVyKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC4yNXMgZWFzZSwgb3BhY2l0eSAwLjJzIGVhc2U7CiAgICAgICAgbWF4LWhlaWdodDogNTAwcHg7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbnMuY29sbGFwc2VkIHsKICAgICAgICBtYXgtaGVpZ2h0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZyk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItaG92ZXIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb24gLm9wdGlvbi1jaGVja2JveCB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZDRkNGQ0IiwiIzUyNTI1MiIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIC5vcHRpb24tY2hlY2tib3guY2hlY2tlZCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIC5vcHRpb24tY2hlY2tib3ggZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjZmFmYWZhIiwiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbiBkZWVzLWljb24ub3B0aW9uLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC8qIERpdmlkZXIgKi8KICAgICAgLm1lbnVEaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgbWFyZ2luOiA4cHggMTJweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51RGl2aWRlciB7CiAgICAgICAgbWFyZ2luOiA4cHggNHB4OwogICAgICB9CgogICAgICAvKiBIZWFkZXIvTGFiZWwgKi8KICAgICAgLm1lbnVIZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDEycHggMTJweCA0cHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1tdXRlZCk7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUhlYWRlciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTGluayBJdGVtICovCiAgICAgIC5tZW51SXRlbS5saW5rIC5leHRlcm5hbC1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICB9CgogICAgICAvKiBDb2xsYXBzZWQgbWVudSBpdGVtIHN0eWxlcyAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZ2FwOiAwOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtIC5pdGVtTGFiZWwgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtLnNlbGVjdGVkOjpiZWZvcmUgewogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW0gLmZpbHRlci1jaGVja2JveCwKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbSAuZXh0ZXJuYWwtaWNvbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tdWx0aUZpbHRlciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogVG9vbHRpcCBmb3IgY29sbGFwc2VkIHN0YXRlICovCiAgICAgIC5pdGVtLXRvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxMDAlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBtYXJnaW4tbGVmdDogMTJweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10b29sdGlwLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tdG9vbHRpcC1mZyk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgfQoKICAgICAgLml0ZW0tdG9vbHRpcDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogLTRweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgYm9yZGVyOiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS10b29sdGlwLWJnKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbTpob3ZlciAuaXRlbS10b29sdGlwIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDFzOwogICAgICB9CgogICAgICAvKiBCYWRnZSBTdHlsZXMgKi8KICAgICAgLmJhZGdlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIG1pbi13aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuYmFkZ2UuZGVmYXVsdCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2UtZGVmYXVsdC1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLWJhZGdlLWRlZmF1bHQtZmcpOwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2Utc3VjY2Vzcy1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLWJhZGdlLXN1Y2Nlc3MtZmcpOwogICAgICB9CgogICAgICAuYmFkZ2Uud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2Utd2FybmluZy1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLWJhZGdlLXdhcm5pbmctZmcpOwogICAgICB9CgogICAgICAuYmFkZ2UuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLWVycm9yLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tYmFkZ2UtZXJyb3ItZmcpOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmJhZGdlIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBMZWdhY3kgb3B0aW9ucyBjb250YWluZXIgKi8KICAgICAgLmxlZ2FjeU9wdGlvbnMgewogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICB9CgogICAgICAvKiBEaXZpZGVyIChsZWdhY3kpICovCiAgICAgIC5kaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgbWFyZ2luOiA4cHggMTJweDsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVhZGluZyI+JHt0aGlzLmhlYWRpbmd9PC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVTZWN0aW9uIj4KICAgICAgICAgICR7dGhpcy5ncm91cHMubGVuZ3RoPjA/dGhpcy5yZW5kZXJHcm91cHMoKTp0aGlzLnJlbmRlckxlZ2FjeU9wdGlvbnMoKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9ImNvbGxhcHNlLXRvZ2dsZSIgQGNsaWNrPSIkeygpPT50aGlzLnRvZ2dsZUNvbGxhcHNlKCl9Ij4KICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMuY29sbGFwc2VkPyJsdWNpZGU6Y2hldnJvblJpZ2h0IjoibHVjaWRlOmNoZXZyb25MZWZ0In0iPjwvZGVlcy1pY29uPgogICAgICA8L2J1dHRvbj4KICAgIGB9cmVuZGVyR3JvdXBzKCl7cmV0dXJuIE1gCiAgICAgICR7dGhpcy5ncm91cHMubWFwKFM9Pk1gCiAgICAgICAgPGRpdiBjbGFzcz0ibWVudUdyb3VwIj4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9Imdyb3VwSGVhZGVyICR7dGhpcy5jb2xsYXBzZWRHcm91cHMuaGFzKFMubmFtZSk/ImNvbGxhcHNlZCI6IiJ9IgogICAgICAgICAgICBAY2xpY2s9IiR7KCk9PnRoaXMudG9nZ2xlR3JvdXAoUy5uYW1lKX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJncm91cFRpdGxlIj4KICAgICAgICAgICAgICAke1MuaWNvbk5hbWU/TWA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMubm9ybWFsaXplSWNvbihTLmljb25OYW1lKX0iPjwvZGVlcy1pY29uPmA6IiJ9CiAgICAgICAgICAgICAgJHtTLm5hbWV9CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0iY2hldnJvbiIgLmljb249IiR7Imx1Y2lkZTpjaGV2cm9uRG93biJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXBJdGVtcyAke3RoaXMuY29sbGFwc2VkR3JvdXBzLmhhcyhTLm5hbWUpPyJjb2xsYXBzZWQiOiIifSI+CiAgICAgICAgICAgICR7Uy5pdGVtcy5tYXAoVD0+dGhpcy5yZW5kZXJJdGVtKFQsUykpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGApfQogICAgYH1yZW5kZXJJdGVtKFMsVCl7aWYoImhpZGRlbiJpbiBTJiZTLmhpZGRlbilyZXR1cm4gTWBgO3N3aXRjaCgidHlwZSJpbiBTP1MudHlwZToidGFiIil7Y2FzZSJhY3Rpb24iOnJldHVybiB0aGlzLnJlbmRlckFjdGlvbkl0ZW0oUyk7Y2FzZSJmaWx0ZXIiOnJldHVybiB0aGlzLnJlbmRlckZpbHRlckl0ZW0oUyk7Y2FzZSJtdWx0aUZpbHRlciI6cmV0dXJuIHRoaXMucmVuZGVyTXVsdGlGaWx0ZXJJdGVtKFMpO2Nhc2UiZGl2aWRlciI6cmV0dXJuIHRoaXMucmVuZGVyRGl2aWRlcigpO2Nhc2UiaGVhZGVyIjpyZXR1cm4gdGhpcy5yZW5kZXJIZWFkZXIoUyk7Y2FzZSJsaW5rIjpyZXR1cm4gdGhpcy5yZW5kZXJMaW5rSXRlbShTKTtkZWZhdWx0OnJldHVybiB0aGlzLnJlbmRlclRhYkl0ZW0oUyxUKX19cmVuZGVyVGFiSXRlbShTLFQpe2xldCBSPXRoaXMuc2VsZWN0ZWRJdGVtPy5rZXk9PT1TLmtleSxBPVMuZGlzYWJsZWQ9PT0hMDtyZXR1cm4gTWAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSAke1I/InNlbGVjdGVkIjoiIn0gJHtBPyJkaXNhYmxlZCI6IiJ9IgogICAgICAgIEBjbGljaz0iJHsoKT0+IUEmJnRoaXMuc2VsZWN0VGFiSXRlbShTLFQpfSIKICAgICAgICBAY29udGV4dG1lbnU9IiR7Rj0+dGhpcy5oYW5kbGVDb250ZXh0TWVudShGLFMpfSIKICAgICAgPgogICAgICAgICR7Uy5pY29uTmFtZT9NYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKFMuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbUxhYmVsIj4ke1Mua2V5fTwvc3Bhbj4KICAgICAgICAke1MuYmFkZ2UhPT12b2lkIDA/TWAKICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSAke1MuYmFkZ2VWYXJpYW50fHwiZGVmYXVsdCJ9Ij4ke1MuYmFkZ2V9PC9zcGFuPgogICAgICAgIGA6IiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0tdG9vbHRpcCI+JHtTLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJBY3Rpb25JdGVtKFMpe2xldCBUPVMudmFyaWFudHx8InByaW1hcnkiLFI9Uy5kaXNhYmxlZD09PSEwO3JldHVybiBNYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtIGFjdGlvbi0ke1R9ICR7Uj8iZGlzYWJsZWQiOiIifSIKICAgICAgICBAY2xpY2s9IiR7KCk9PiFSJiZ0aGlzLmhhbmRsZUFjdGlvbkNsaWNrKFMpfSIKICAgICAgPgogICAgICAgICR7Uy5pY29uTmFtZT9NYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKFMuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbUxhYmVsIj4ke1Mua2V5fTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbS10b29sdGlwIj4ke1Mua2V5fTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlckZpbHRlckl0ZW0oUyl7bGV0IFQ9Uy5kaXNhYmxlZD09PSEwO3JldHVybiBNYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtIGZpbHRlciAke1MuYWN0aXZlPyJhY3RpdmUiOiIifSAke1Q/ImRpc2FibGVkIjoiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpPT4hVCYmdGhpcy5oYW5kbGVGaWx0ZXJUb2dnbGUoUyl9IgogICAgICA+CiAgICAgICAgJHtTLmljb25OYW1lP01gPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oUy5pY29uTmFtZSl9Ij48L2RlZXMtaWNvbj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7Uy5rZXl9PC9zcGFuPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlci1jaGVja2JveCAke1MuYWN0aXZlPyJjaGVja2VkIjoiIn0iPgogICAgICAgICAgJHtTLmFjdGl2ZT9NYDxkZWVzLWljb24gLmljb249IiR7Imx1Y2lkZTpjaGVjayJ9Ij48L2RlZXMtaWNvbj5gOiIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7Uy5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyTXVsdGlGaWx0ZXJJdGVtKFMpe2xldCBUPXRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzLmhhcyhTLmtleSksUj1TLm9wdGlvbnMuZmlsdGVyKEE9PkEuY2hlY2tlZCkubGVuZ3RoO3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJtdWx0aUZpbHRlciI+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9Im11bHRpRmlsdGVyLWhlYWRlciAke1Q/ImNvbGxhcHNlZCI6IiJ9IgogICAgICAgICAgQGNsaWNrPSIkeygpPT50aGlzLnRvZ2dsZU11bHRpRmlsdGVyKFMua2V5KX0iCiAgICAgICAgPgogICAgICAgICAgPHNwYW4gY2xhc3M9Im11bHRpRmlsdGVyLXRpdGxlIj4KICAgICAgICAgICAgJHtTLmljb25OYW1lP01gPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oUy5pY29uTmFtZSl9Ij48L2RlZXMtaWNvbj5gOiIifQogICAgICAgICAgICAke1Mua2V5fQogICAgICAgICAgPC9zcGFuPgogICAgICAgICAgJHtSPjA/TWA8c3BhbiBjbGFzcz0ibXVsdGlGaWx0ZXItY291bnQiPiR7Un08L3NwYW4+YDoiIn0KICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9ImNoZXZyb24iIC5pY29uPSIkeyJsdWNpZGU6Y2hldnJvbkRvd24ifSI+PC9kZWVzLWljb24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGlGaWx0ZXItb3B0aW9ucyAke1Q/ImNvbGxhcHNlZCI6IiJ9Ij4KICAgICAgICAgICR7Uy5vcHRpb25zLm1hcChBPT5NYAogICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgY2xhc3M9Im11bHRpRmlsdGVyLW9wdGlvbiIKICAgICAgICAgICAgICBAY2xpY2s9IiR7KCk9PnRoaXMuaGFuZGxlTXVsdGlGaWx0ZXJPcHRpb25Ub2dnbGUoUyxBLmtleSl9IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3B0aW9uLWNoZWNrYm94ICR7QS5jaGVja2VkPyJjaGVja2VkIjoiIn0iPgogICAgICAgICAgICAgICAgJHtBLmNoZWNrZWQ/TWA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6Y2hlY2sifSI+PC9kZWVzLWljb24+YDoiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAke0EuaWNvbk5hbWU/TWA8ZGVlcy1pY29uIGNsYXNzPSJvcHRpb24taWNvbiIgLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKEEuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YDoiIn0KICAgICAgICAgICAgICA8c3Bhbj4ke0EubGFiZWx9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGApfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyRGl2aWRlcigpe3JldHVybiBNYDxkaXYgY2xhc3M9Im1lbnVEaXZpZGVyIj48L2Rpdj5gfXJlbmRlckhlYWRlcihTKXtyZXR1cm4gTWA8ZGl2IGNsYXNzPSJtZW51SGVhZGVyIj4ke1MubGFiZWx9PC9kaXY+YH1yZW5kZXJMaW5rSXRlbShTKXtsZXQgVD1TLmV4dGVybmFsPz9TLmhyZWYuc3RhcnRzV2l0aCgiaHR0cCIpLFI9Uy5kaXNhYmxlZD09PSEwO3JldHVybiBNYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtIGxpbmsgJHtSPyJkaXNhYmxlZCI6IiJ9IgogICAgICAgIEBjbGljaz0iJHsoKT0+IVImJnRoaXMuaGFuZGxlTGlua0NsaWNrKFMpfSIKICAgICAgPgogICAgICAgICR7Uy5pY29uTmFtZT9NYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKFMuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbUxhYmVsIj4ke1Mua2V5fTwvc3Bhbj4KICAgICAgICAke1Q/TWA8ZGVlcy1pY29uIGNsYXNzPSJleHRlcm5hbC1pY29uIiAuaWNvbj0iJHsibHVjaWRlOmV4dGVybmFsTGluayJ9Ij48L2RlZXMtaWNvbj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7Uy5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyTGVnYWN5T3B0aW9ucygpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJsZWdhY3lPcHRpb25zIj4KICAgICAgICAke3RoaXMuc2VsZWN0aW9uT3B0aW9ucy5tYXAoUz0+e2lmKCJkaXZpZGVyImluIFMmJlMuZGl2aWRlcilyZXR1cm4gTWA8ZGl2IGNsYXNzPSJkaXZpZGVyIj48L2Rpdj5gO2xldCBUPVMsUj17a2V5OlQua2V5LGljb25OYW1lOlQuaWNvbk5hbWUsYWN0aW9uOlQuYWN0aW9uLGJhZGdlOlQuYmFkZ2UsYmFkZ2VWYXJpYW50OlQuYmFkZ2VWYXJpYW50fTtyZXR1cm4gdGhpcy5yZW5kZXJUYWJJdGVtKFIpfSl9CiAgICAgIDwvZGl2PgogICAgYH1ub3JtYWxpemVJY29uKFMpe3JldHVybiBTLnN0YXJ0c1dpdGgoImx1Y2lkZToiKT9TOmBsdWNpZGU6JHtTfWB9dG9nZ2xlR3JvdXAoUyl7bGV0IFQ9bmV3IFNldCh0aGlzLmNvbGxhcHNlZEdyb3Vwcyk7VC5oYXMoUyk/VC5kZWxldGUoUyk6VC5hZGQoUyksdGhpcy5jb2xsYXBzZWRHcm91cHM9VH10b2dnbGVNdWx0aUZpbHRlcihTKXtsZXQgVD1uZXcgU2V0KHRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzKTtULmhhcyhTKT9ULmRlbGV0ZShTKTpULmFkZChTKSx0aGlzLmNvbGxhcHNlZE11bHRpRmlsdGVycz1UfXRvZ2dsZUNvbGxhcHNlKCl7dGhpcy5jb2xsYXBzZWQ9IXRoaXMuY29sbGFwc2VkLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbGxhcHNlLWNoYW5nZSIse2RldGFpbDp7Y29sbGFwc2VkOnRoaXMuY29sbGFwc2VkfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfXNlbGVjdFRhYkl0ZW0oUyxUKXt0aGlzLnNlbGVjdGVkSXRlbT1TLFMuYWN0aW9uKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1zZWxlY3QiLHtkZXRhaWw6e2l0ZW06Uyxncm91cDpUfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWFzeW5jIGhhbmRsZUFjdGlvbkNsaWNrKFMpe1MuY29uZmlybU1lc3NhZ2UmJiF3aW5kb3cuY29uZmlybShTLmNvbmZpcm1NZXNzYWdlKXx8KGF3YWl0IFMuYWN0aW9uKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYWN0aW9uLWNsaWNrIix7ZGV0YWlsOntpdGVtOlN9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpfWhhbmRsZUZpbHRlclRvZ2dsZShTKXtsZXQgVD0hUy5hY3RpdmU7Uy5hY3RpdmU9VCxTLm9uVG9nZ2xlKFQpLHRoaXMucmVuZGVyQ291bnRlcisrLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbHRlci10b2dnbGUiLHtkZXRhaWw6e2l0ZW06UyxhY3RpdmU6VH0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVNdWx0aUZpbHRlck9wdGlvblRvZ2dsZShTLFQpe2xldCBSPVMub3B0aW9ucy5maW5kKEY9PkYua2V5PT09VCk7UiYmKFIuY2hlY2tlZD0hUi5jaGVja2VkKTtsZXQgQT1TLm9wdGlvbnMuZmlsdGVyKEY9PkYuY2hlY2tlZCkubWFwKEY9PkYua2V5KTtTLm9uQ2hhbmdlKEEpLHRoaXMucmVuZGVyQ291bnRlcisrLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm11bHRpZmlsdGVyLWNoYW5nZSIse2RldGFpbDp7aXRlbTpTLHNlbGVjdGVkS2V5czpBfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZUxpbmtDbGljayhTKXtTLmV4dGVybmFsPz9TLmhyZWYuc3RhcnRzV2l0aCgiaHR0cCIpP3dpbmRvdy5vcGVuKFMuaHJlZiwiX2JsYW5rIiwibm9vcGVuZXIsbm9yZWZlcnJlciIpOndpbmRvdy5sb2NhdGlvbi5ocmVmPVMuaHJlZix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJsaW5rLWNsaWNrIix7ZGV0YWlsOntpdGVtOlN9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlQ29udGV4dE1lbnUoUyxUKXtXdC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhTLFt7bmFtZToiVmlldyBkZXRhaWxzIixhY3Rpb246YXN5bmMoKT0+e30saWNvbk5hbWU6Imx1Y2lkZTpleWUifSx7bmFtZToiRWRpdCIsYWN0aW9uOmFzeW5jKCk9Pnt9LGljb25OYW1lOiJsdWNpZGU6cGVuY2lsIn1dKX1hc3luYyBmaXJzdFVwZGF0ZWQoUyl7aWYoYXdhaXQgc3VwZXIuZmlyc3RVcGRhdGVkKFMpLHRoaXMuZ3JvdXBzLmxlbmd0aD4wKXtsZXQgVD1uZXcgU2V0LFI9bmV3IFNldDtpZih0aGlzLmdyb3Vwcy5mb3JFYWNoKEE9PntBLmNvbGxhcHNlZCYmVC5hZGQoQS5uYW1lKSxBLml0ZW1zLmZvckVhY2goRj0+e2lmKCJ0eXBlImluIEYmJkYudHlwZT09PSJtdWx0aUZpbHRlciIpe2xldCBhZT1GO2FlLmNvbGxhcHNlZCYmUi5hZGQoYWUua2V5KX19KX0pLHRoaXMuY29sbGFwc2VkR3JvdXBzPVQsdGhpcy5jb2xsYXBzZWRNdWx0aUZpbHRlcnM9UiwhdGhpcy5zZWxlY3RlZEl0ZW0pZm9yKGxldCBBIG9mIHRoaXMuZ3JvdXBzKWZvcihsZXQgRiBvZiBBLml0ZW1zKXtsZXQgYWU9InR5cGUiaW4gRj9GLnR5cGU6InRhYiI7aWYoYWU9PT0idGFiInx8YWU9PT12b2lkIDApe2xldCBWPUY7aWYoIVYuZGlzYWJsZWQpe3RoaXMuc2VsZWN0VGFiSXRlbShWLEEpO3JldHVybn19fX1lbHNlIGlmKHRoaXMuc2VsZWN0aW9uT3B0aW9ucy5sZW5ndGg+MCl7bGV0IFQ9dGhpcy5zZWxlY3Rpb25PcHRpb25zLmZpbmQoUj0+ISgiZGl2aWRlciJpbiBSKSk7aWYoVCYmIXRoaXMuc2VsZWN0ZWRJdGVtKXtsZXQgUj17a2V5OlQua2V5LGljb25OYW1lOlQuaWNvbk5hbWUsYWN0aW9uOlQuYWN0aW9ufTt0aGlzLnNlbGVjdFRhYkl0ZW0oUil9fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksbzIodGhpcyxrKX1zdGF0aWN7bzIocixhKX19O3JldHVybiBOPXJ9KSgpO2ZlKCk7dmFyIFVsPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sTmE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LG5FYT0oKCk9PntsZXQgdD1bY2UoImRlbW8tY2xvc2VhYmxlLXRhYnMiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXTt2YXIgZD1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGg9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bbGUoKV0sZj1bbGUoKV0sVWwodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4idGFicyJpbiBnLGdldDpnPT5nLnRhYnMsc2V0OihnLGIpPT57Zy50YWJzPWJ9fSxtZXRhZGF0YTpofSxzLGwpLFVsKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGFiQ291bnRlciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+InRhYkNvdW50ZXIiaW4gZyxnZXQ6Zz0+Zy50YWJDb3VudGVyLHNldDooZyxiKT0+e2cudGFiQ291bnRlcj1ifX0sbWV0YWRhdGE6aH0sYyx1KSxVbChudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpofSxudWxsLGEpLGQ9cj1lLnZhbHVlLGgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6aH0pfSNlPU5hKHRoaXMscyxbe2tleToiTWFpbiIsaWNvbk5hbWU6Imx1Y2lkZTpob21lIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJNYWluIGNsaWNrZWQiKX1dKTtnZXQgdGFicygpe3JldHVybiB0aGlzLiNlfXNldCB0YWJzKGgpe3RoaXMuI2U9aH0jdD0oTmEodGhpcyxsKSxOYSh0aGlzLGMsMCkpO2dldCB0YWJDb3VudGVyKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHRhYkNvdW50ZXIoaCl7dGhpcy4jdD1ofXN0YXRpYyBzdHlsZXM9W3RlYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgIH0KICAgICAgYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMSkiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzYjgyZjYiLCIjNjBhNWZhIil9OwogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIiwicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiKX07CiAgICAgIH0KICAgICAgLmluZm8gewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMDIpIiwicmdiYSgyNTUsMjU1LDI1NSwwLjAyKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgIH0KICAgIGBdO2FkZFRhYigpe3RoaXMudGFiQ291bnRlcisrO2xldCBoPWBEb2N1bWVudCAke3RoaXMudGFiQ291bnRlcn1gO3RoaXMudGFicz1bLi4udGhpcy50YWJzLHtrZXk6aCxpY29uTmFtZToibHVjaWRlOmZpbGUiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coYCR7aH0gY2xpY2tlZGApLGNsb3NlYWJsZTohMCxvbkNsb3NlOigpPT50aGlzLnJlbW92ZVRhYihoKX1dfXJlbW92ZVRhYihoKXt0aGlzLnRhYnM9dGhpcy50YWJzLmZpbHRlcihnPT5nLmtleSE9PWgpfXJlbmRlcigpe3JldHVybiBNYAogICAgICA8ZGVlcy1hcHB1aS10YWJzCiAgICAgICAgLnRhYnM9JHt0aGlzLnRhYnN9CiAgICAgICAgQHRhYi1jbG9zZT0ke2g9PnRoaXMucmVtb3ZlVGFiKGguZGV0YWlsLnRhYi5rZXkpfQogICAgICA+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpPT50aGlzLmFkZFRhYigpfT4rIEFkZCBOZXcgVGFiPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJpbmZvIj4KICAgICAgICBDbGljayB0aGUgWCBidXR0b24gb24gdGFicyB0byBjbG9zZSB0aGVtLiBUaGUgIk1haW4iIHRhYiBpcyBub3QgY2xvc2VhYmxlLgogICAgICAgIDxicj5DdXJyZW50IHRhYnM6ICR7dGhpcy50YWJzLmxlbmd0aH0KICAgICAgPC9kaXY+CiAgICBgfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxOYSh0aGlzLHUpfXN0YXRpY3tOYShyLGEpfX07cmV0dXJuIGQ9cn0pKCksbEVhPSgoKT0+e2xldCB0PVtjZSgiZGVtby1hdXRvaGlkZS10YWJzIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W107dmFyIGI9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCB4PXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W2xlKCldLGY9W2xlKCldLGQ9W2xlKCldLFVsKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGFicyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+InRhYnMiaW4gbSxnZXQ6bT0+bS50YWJzLHNldDoobSx2KT0+e20udGFicz12fX0sbWV0YWRhdGE6eH0scyxsKSxVbCh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImF1dG9IaWRlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4iYXV0b0hpZGUiaW4gbSxnZXQ6bT0+bS5hdXRvSGlkZSxzZXQ6KG0sdik9PnttLmF1dG9IaWRlPXZ9fSxtZXRhZGF0YTp4fSxjLHUpLFVsKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGhyZXNob2xkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4idGhyZXNob2xkImluIG0sZ2V0Om09Pm0udGhyZXNob2xkLHNldDoobSx2KT0+e20udGhyZXNob2xkPXZ9fSxtZXRhZGF0YTp4fSxoLGcpLFVsKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOnh9LG51bGwsYSksYj1yPWUudmFsdWUseCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp4fSl9I2U9TmEodGhpcyxzLFt7a2V5OiJUYWIgMSIsaWNvbk5hbWU6Imx1Y2lkZTpmaWxlIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJUYWIgMSIpfSx7a2V5OiJUYWIgMiIsaWNvbk5hbWU6Imx1Y2lkZTpmaWxlIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJUYWIgMiIpfV0pO2dldCB0YWJzKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHRhYnMoeCl7dGhpcy4jZT14fSN0PShOYSh0aGlzLGwpLE5hKHRoaXMsYywhMCkpO2dldCBhdXRvSGlkZSgpe3JldHVybiB0aGlzLiN0fXNldCBhdXRvSGlkZSh4KXt0aGlzLiN0PXh9I2E9KE5hKHRoaXMsdSksTmEodGhpcyxoLDEpKTtnZXQgdGhyZXNob2xkKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHRocmVzaG9sZCh4KXt0aGlzLiNhPXh9c3RhdGljIHN0eWxlcz1bdGVgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CiAgICAgIC50YWJzLWNvbnRhaW5lciBkZWVzLWFwcHVpLXRhYnMgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjYTFhMWFhIiwiIzcxNzE3YSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICAgIC5jb250cm9scyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIsInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIsInJnYmEoNTksIDEzMCwgMjQ2LCAwLjMpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiM2MGE1ZmEiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4xKSIsInJnYmEoMjM5LCA2OCwgNjgsIDAuMSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4zKSIsInJnYmEoMjM5LCA2OCwgNjgsIDAuMykiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjZWY0NDQ0IiwiI2Y4NzE3MSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4yKSIsInJnYmEoMjM5LCA2OCwgNjgsIDAuMikiKX07CiAgICAgIH0KICAgICAgLmluZm8gewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMDIpIiwicmdiYSgyNTUsMjU1LDI1NSwwLjAyKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgIH0KICAgIGBdO3RhYkNvdW50ZXI9KE5hKHRoaXMsZyksMik7YWRkVGFiKCl7dGhpcy50YWJDb3VudGVyKyssdGhpcy50YWJzPVsuLi50aGlzLnRhYnMse2tleTpgVGFiICR7dGhpcy50YWJDb3VudGVyfWAsaWNvbk5hbWU6Imx1Y2lkZTpmaWxlIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKGBUYWIgJHt0aGlzLnRhYkNvdW50ZXJ9YCl9XX1yZW1vdmVMYXN0VGFiKCl7dGhpcy50YWJzLmxlbmd0aD4wJiYodGhpcy50YWJzPXRoaXMudGFicy5zbGljZSgwLC0xKSl9Y2xlYXJUYWJzKCl7dGhpcy50YWJzPVtdfXJlbmRlcigpe2xldCB4PXRoaXMuYXV0b0hpZGUmJnRoaXMudGFicy5sZW5ndGg8PXRoaXMudGhyZXNob2xkO3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJ0YWJzLWNvbnRhaW5lciI+CiAgICAgICAgJHt4P01gPHNwYW4gY2xhc3M9InBsYWNlaG9sZGVyIj5UYWJzIGhpZGRlbiAoJHt0aGlzLnRhYnMubGVuZ3RofSB0YWJzIOKJpCB0aHJlc2hvbGQgJHt0aGlzLnRocmVzaG9sZH0pPC9zcGFuPmA6TWA8ZGVlcy1hcHB1aS10YWJzCiAgICAgICAgICAgICAgLnRhYnM9JHt0aGlzLnRhYnN9CiAgICAgICAgICAgICAgLmF1dG9IaWRlPSR7dGhpcy5hdXRvSGlkZX0KICAgICAgICAgICAgICAuYXV0b0hpZGVUaHJlc2hvbGQ9JHt0aGlzLnRocmVzaG9sZH0KICAgICAgICAgICAgPjwvZGVlcy1hcHB1aS10YWJzPmB9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKT0+dGhpcy5hZGRUYWIoKX0+KyBBZGQgVGFiPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGFuZ2VyIiBAY2xpY2s9JHsoKT0+dGhpcy5yZW1vdmVMYXN0VGFiKCl9Pi0gUmVtb3ZlIFRhYjwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9ImRhbmdlciIgQGNsaWNrPSR7KCk9PnRoaXMuY2xlYXJUYWJzKCl9PkNsZWFyIEFsbDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCk9Pnt0aGlzLnRocmVzaG9sZD0wfX0+VGhyZXNob2xkOiAwPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKT0+e3RoaXMudGhyZXNob2xkPTF9fT5UaHJlc2hvbGQ6IDE8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpPT57dGhpcy50aHJlc2hvbGQ9Mn19PlRocmVzaG9sZDogMjwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaW5mbyI+CiAgICAgICAgQXV0by1oaWRlOiAke3RoaXMuYXV0b0hpZGU/Ik9OIjoiT0ZGIn0gfCBUaHJlc2hvbGQ6ICR7dGhpcy50aHJlc2hvbGR9IHwgVGFiczogJHt0aGlzLnRhYnMubGVuZ3RofQogICAgICAgIDxicj5UYWJzIHdpbGwgaGlkZSB3aGVuIGNvdW50IOKJpCB0aHJlc2hvbGQuCiAgICAgIDwvZGl2PgogICAgYH1zdGF0aWN7TmEocixhKX19O3JldHVybiBiPXJ9KSgpLElJdD0oKT0+e2xldCB0PVt7a2V5OiJIb21lIixpY29uTmFtZToibHVjaWRlOmhvbWUiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkhvbWUgY2xpY2tlZCIpfSx7a2V5OiJBbmFseXRpY3MgRGFzaGJvYXJkIixpY29uTmFtZToibHVjaWRlOmxpbmVDaGFydCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiQW5hbHl0aWNzIGNsaWNrZWQiKX0se2tleToiUmVwb3J0cyIsaWNvbk5hbWU6Imx1Y2lkZTpmaWxlVGV4dCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiUmVwb3J0cyBjbGlja2VkIil9LHtrZXk6IlVzZXIgU2V0dGluZ3MiLGljb25OYW1lOiJsdWNpZGU6c2V0dGluZ3MiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIlNldHRpbmdzIGNsaWNrZWQiKX0se2tleToiSGVscCIsaWNvbk5hbWU6Imx1Y2lkZTpoZWxwQ2lyY2xlIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJIZWxwIGNsaWNrZWQiKX1dLGU9W3trZXk6IlByb2ZpbGUiLGljb25OYW1lOiJsdWNpZGU6dXNlciIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiUHJvZmlsZSBjbGlja2VkIil9LHtrZXk6IlNlY3VyaXR5IixpY29uTmFtZToibHVjaWRlOnNoaWVsZCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiU2VjdXJpdHkgY2xpY2tlZCIpfSx7a2V5OiJOb3RpZmljYXRpb25zIixpY29uTmFtZToibHVjaWRlOmJlbGwiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIk5vdGlmaWNhdGlvbnMgY2xpY2tlZCIpfSx7a2V5OiJJbnRlZ3JhdGlvbnMiLGljb25OYW1lOiJsdWNpZGU6bGluayIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiSW50ZWdyYXRpb25zIGNsaWNrZWQiKX0se2tleToiQWR2YW5jZWQiLGljb25OYW1lOiJsdWNpZGU6Y29kZSIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiQWR2YW5jZWQgY2xpY2tlZCIpfV0sYT1be2tleToiQWxsIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJBbGwgY2xpY2tlZCIpfSx7a2V5OiJBY3RpdmUiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkFjdGl2ZSBjbGlja2VkIil9LHtrZXk6IkNvbXBsZXRlZCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiQ29tcGxldGVkIGNsaWNrZWQiKX0se2tleToiQXJjaGl2ZWQiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkFyY2hpdmVkIGNsaWNrZWQiKX1dLHI9aT0+TWAKICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDI0cHg7IGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07Ij4KICAgICAgJHtpfQogICAgPC9kaXY+CiAgYDtyZXR1cm4gTWAKICAgIDxzdHlsZT4KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDQ4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmOGY5ZmEiLCIjMGEwYTBhIil9OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICB9CgogICAgICAuc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICB9CgogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAudHdvLWNvbHVtbiB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDIwMHB4IDFmcjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IHN0YXJ0OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Ib3Jpem9udGFsIFRhYnMgd2l0aCBBbmltYXRlZCBJbmRpY2F0b3I8L2Rpdj4KICAgICAgICA8ZGVlcy1hcHB1aS10YWJzIC50YWJzPSR7dH0+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgJHtyKCJTZWxlY3QgYSB0YWIgdG8gc2VlIHRoZSBzbW9vdGggc2xpZGluZyBhbmltYXRpb24gb2YgdGhlIGluZGljYXRvci4gVGhlIGluZGljYXRvciBhdXRvbWF0aWNhbGx5IGFkanVzdHMgaXRzIHdpZHRoIHRvIG1hdGNoIHRoZSB0YWIgY29udGVudCB3aXRoIG1pbmltYWwgcGFkZGluZy4iKX0KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5DbG9zZWFibGUgVGFicyAoQnJvd3Nlci1zdHlsZSk8L2Rpdj4KICAgICAgICA8ZGVtby1jbG9zZWFibGUtdGFicz48L2RlbW8tY2xvc2VhYmxlLXRhYnM+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+QXV0by1oaWRlIFRhYnM8L2Rpdj4KICAgICAgICA8ZGVtby1hdXRvaGlkZS10YWJzPjwvZGVtby1hdXRvaGlkZS10YWJzPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlZlcnRpY2FsIFRhYnMgTGF5b3V0PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idHdvLWNvbHVtbiI+CiAgICAgICAgICA8ZGVlcy1hcHB1aS10YWJzIC50YWJTdHlsZT0keyJ2ZXJ0aWNhbCJ9IC50YWJzPSR7ZX0+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgICAke3IoIlZlcnRpY2FsIHRhYnMgd29yayBncmVhdCBmb3Igc2V0dGluZ3MgcGFnZXMgYW5kIG5hdmlnYXRpb24gbWVudXMuIFRoZSBhbmltYXRlZCBpbmRpY2F0b3Igc21vb3RobHkgdHJhbnNpdGlvbnMgYmV0d2VlbiBzZWxlY3Rpb25zLiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPldpdGhvdXQgSW5kaWNhdG9yPC9kaXY+CiAgICAgICAgPGRlZXMtYXBwdWktdGFicyAuc2hvd1RhYkluZGljYXRvcj0keyExfSAudGFicz0ke2F9PjwvZGVlcy1hcHB1aS10YWJzPgogICAgICAgICR7cigiVGFicyBjYW4gYWxzbyBiZSB1c2VkIHdpdGhvdXQgdGhlIGFuaW1hdGVkIGluZGljYXRvciBieSBzZXR0aW5nIHNob3dUYWJJbmRpY2F0b3IgdG8gZmFsc2UuIil9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYH07ZmUoKTtTdCgpO0JlKCk7dmFyIFVpPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sczI9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LF9vMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtYXBwdWktdGFicyIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdLEUsQz1bXSx6PVtdLFAsXz1bXSwkPVtdLEgsTD1bXSxrPVtdO3ZhciBOPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgUz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOkFycmF5fSldLGY9W0Qoe3R5cGU6T2JqZWN0fSldLGQ9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxiPVtEKHt0eXBlOlN0cmluZ30pXSx2PVtEKHt0eXBlOkJvb2xlYW59KV0sRT1bRCh7dHlwZTpOdW1iZXJ9KV0sUD1bbGUoKV0sSD1bbGUoKV0sVWkodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4idGFicyJpbiBULGdldDpUPT5ULnRhYnMsc2V0OihULFIpPT57VC50YWJzPVJ9fSxtZXRhZGF0YTpTfSxzLGwpLFVpKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWRUYWIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJzZWxlY3RlZFRhYiJpbiBULGdldDpUPT5ULnNlbGVjdGVkVGFiLHNldDooVCxSKT0+e1Quc2VsZWN0ZWRUYWI9Un19LG1ldGFkYXRhOlN9LGMsdSksVWkodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaG93VGFiSW5kaWNhdG9yIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4ic2hvd1RhYkluZGljYXRvciJpbiBULGdldDpUPT5ULnNob3dUYWJJbmRpY2F0b3Isc2V0OihULFIpPT57VC5zaG93VGFiSW5kaWNhdG9yPVJ9fSxtZXRhZGF0YTpTfSxoLGcpLFVpKHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGFiU3R5bGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJ0YWJTdHlsZSJpbiBULGdldDpUPT5ULnRhYlN0eWxlLHNldDooVCxSKT0+e1QudGFiU3R5bGU9Un19LG1ldGFkYXRhOlN9LHgsbSksVWkodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhdXRvSGlkZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VD0+ImF1dG9IaWRlImluIFQsZ2V0OlQ9PlQuYXV0b0hpZGUsc2V0OihULFIpPT57VC5hdXRvSGlkZT1SfX0sbWV0YWRhdGE6U30seSx3KSxVaSh0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImF1dG9IaWRlVGhyZXNob2xkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4iYXV0b0hpZGVUaHJlc2hvbGQiaW4gVCxnZXQ6VD0+VC5hdXRvSGlkZVRocmVzaG9sZCxzZXQ6KFQsUik9PntULmF1dG9IaWRlVGhyZXNob2xkPVJ9fSxtZXRhZGF0YTpTfSxDLHopLFVpKHRoaXMsbnVsbCxQLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY2FuU2Nyb2xsTGVmdCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VD0+ImNhblNjcm9sbExlZnQiaW4gVCxnZXQ6VD0+VC5jYW5TY3JvbGxMZWZ0LHNldDooVCxSKT0+e1QuY2FuU2Nyb2xsTGVmdD1SfX0sbWV0YWRhdGE6U30sXywkKSxVaSh0aGlzLG51bGwsSCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNhblNjcm9sbFJpZ2h0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4iY2FuU2Nyb2xsUmlnaHQiaW4gVCxnZXQ6VD0+VC5jYW5TY3JvbGxSaWdodCxzZXQ6KFQsUik9PntULmNhblNjcm9sbFJpZ2h0PVJ9fSxtZXRhZGF0YTpTfSxMLGspLFVpKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOlN9LG51bGwsYSksTj1yPWUudmFsdWUsUyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpTfSl9c3RhdGljIGRlbW89SUl0O3N0YXRpYyBkZW1vR3JvdXA9IkFwcCBVSSI7I2U9czIodGhpcyxzLFtdKTtnZXQgdGFicygpe3JldHVybiB0aGlzLiNlfXNldCB0YWJzKFMpe3RoaXMuI2U9U30jdD0oczIodGhpcyxsKSxzMih0aGlzLGMsbnVsbCkpO2dldCBzZWxlY3RlZFRhYigpe3JldHVybiB0aGlzLiN0fXNldCBzZWxlY3RlZFRhYihTKXt0aGlzLiN0PVN9I2E9KHMyKHRoaXMsdSksczIodGhpcyxoLCEwKSk7Z2V0IHNob3dUYWJJbmRpY2F0b3IoKXtyZXR1cm4gdGhpcy4jYX1zZXQgc2hvd1RhYkluZGljYXRvcihTKXt0aGlzLiNhPVN9I3I9KHMyKHRoaXMsZyksczIodGhpcyx4LCJob3Jpem9udGFsIikpO2dldCB0YWJTdHlsZSgpe3JldHVybiB0aGlzLiNyfXNldCB0YWJTdHlsZShTKXt0aGlzLiNyPVN9I2k9KHMyKHRoaXMsbSksczIodGhpcyx5LCExKSk7Z2V0IGF1dG9IaWRlKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGF1dG9IaWRlKFMpe3RoaXMuI2k9U30jbz0oczIodGhpcyx3KSxzMih0aGlzLEMsMCkpO2dldCBhdXRvSGlkZVRocmVzaG9sZCgpe3JldHVybiB0aGlzLiNvfXNldCBhdXRvSGlkZVRocmVzaG9sZChTKXt0aGlzLiNvPVN9I3M9KHMyKHRoaXMseiksczIodGhpcyxfLCExKSk7Z2V0IGNhblNjcm9sbExlZnQoKXtyZXR1cm4gdGhpcy4jc31zZXQgY2FuU2Nyb2xsTGVmdChTKXt0aGlzLiNzPVN9I249KHMyKHRoaXMsJCksczIodGhpcyxMLCExKSk7Z2V0IGNhblNjcm9sbFJpZ2h0KCl7cmV0dXJuIHRoaXMuI259c2V0IGNhblNjcm9sbFJpZ2h0KFMpe3RoaXMuI249U31yZXNpemVPYnNlcnZlcj0oczIodGhpcyxrKSxudWxsKTtzdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIuaG9yaXpvbnRhbC13cmFwcGVyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC8qIFNjcm9sbCBmYWRlIGluZGljYXRvcnMgKi8KICAgICAgLnNjcm9sbC1mYWRlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMXB4OwogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwtZmFkZS1sZWZ0IHsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwKICAgICAgICAgICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzE2MTYxNiIpfSAwJSwKICAgICAgICAgICR7cC5iZFRoZW1lKCJyZ2JhKDI1NSwyNTUsMjU1LDApIiwicmdiYSgyMiwyMiwyMiwwKSIpfSAxMDAlKTsKICAgICAgfQoKICAgICAgLnNjcm9sbC1mYWRlLXJpZ2h0IHsKICAgICAgICByaWdodDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwKICAgICAgICAgICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzE2MTYxNiIpfSAwJSwKICAgICAgICAgICR7cC5iZFRoZW1lKCJyZ2JhKDI1NSwyNTUsMjU1LDApIiwicmdiYSgyMiwyMiwyMiwwKSIpfSAxMDAlKTsKICAgICAgfQoKICAgICAgLnNjcm9sbC1mYWRlLnZpc2libGUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgICAgIHNjcm9sbGJhci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLyogU2hvdyBzY3JvbGxiYXIgb24gaG92ZXIgKi8KICAgICAgLnRhYnMtd3JhcHBlcjpob3ZlciAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsIHsKICAgICAgICBzY3JvbGxiYXItY29sb3I6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMikiLCJyZ2JhKDI1NSwyNTUsMjU1LDAuMikiKX0gdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjIpIiwicmdiYSgyNTUsMjU1LDI1NSwwLjIpIil9OwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjM1KSIsInJnYmEoMjU1LDI1NSwyNTUsMC4zNSkiKX07CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLnZlcnRpY2FsIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBnYXA6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmOWZhZmIiLCIjMTgxODFiIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgIH0KCiAgICAgIC5ob3Jpem9udGFsIC50YWIgewogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4IDZweCAwIDA7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAuaG9yaXpvbnRhbCAudGFiOm5vdCg6bGFzdC1jaGlsZCk6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IC0ycHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWIgLnRhYi1jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAudmVydGljYWwgLnRhYiB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDMpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYjpob3Zlcjo6YWZ0ZXIsCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXIgKyAudGFiOjphZnRlciB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDI0NCwgMjQ0LCAyNDUsIDAuNSkiLCJyZ2JhKDM5LCAzOSwgNDIsIDAuNSkiKX07CiAgICAgIH0KCiAgICAgIC5ob3Jpem9udGFsIC50YWIuc2VsZWN0ZWRUYWIgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWIuc2VsZWN0ZWRUYWI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiLnNlbGVjdGVkVGFiICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiLnNlbGVjdGVkVGFiIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAudGFiIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICB9CgogICAgICAudGFiSW5kaWNhdG9yIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CiAgICAgIAogICAgICAudGFiSW5kaWNhdG9yLm5vLXRyYW5zaXRpb24gewogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIgLnRhYkluZGljYXRvciB7CiAgICAgICAgaGVpZ2h0OiAzcHg7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDAgMDsKICAgICAgICB6LWluZGV4OiAzOwogICAgICB9CgogICAgICAudmVydGljYWwtd3JhcHBlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAudmVydGljYWwtd3JhcHBlciAudGFiSW5kaWNhdG9yIHsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMjcyNzJhIil9OwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCk7CiAgICAgIH0KCiAgICAgIC8qIENsb3NlIGJ1dHRvbiAqLwogICAgICAudGFiLWNsb3NlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjNzE3MTdhIil9OwogICAgICB9CgogICAgICAudGFiOmhvdmVyIC50YWItY2xvc2UgewogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjEpIiwicmdiYSgyNTUsMjU1LDI1NSwwLjEpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiI2VmNDQ0NCIsIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC50YWIuc2VsZWN0ZWRUYWIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiOmhvdmVyIC50YWItY2xvc2UgewogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiAudGFiLWNsb3NlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gdGhpcy5hdXRvSGlkZSYmdGhpcy50YWJzLmxlbmd0aDw9dGhpcy5hdXRvSGlkZVRocmVzaG9sZD9NYGA6TWAKICAgICAgJHt0aGlzLnJlbmRlclRhYnNXcmFwcGVyKCl9CiAgICBgfXJlbmRlclRhYnNXcmFwcGVyKCl7bGV0IFM9dGhpcy50YWJTdHlsZT09PSJob3Jpem9udGFsIixUPVM/InRhYnMtd3JhcHBlciBob3Jpem9udGFsLXdyYXBwZXIiOiJ2ZXJ0aWNhbC13cmFwcGVyIixSPWB0YWJzQ29udGFpbmVyICR7dGhpcy50YWJTdHlsZX1gO3JldHVybiBTP01gCiAgICAgICAgPGRpdiBjbGFzcz0iJHtUfSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzY3JvbGwtZmFkZSBzY3JvbGwtZmFkZS1sZWZ0ICR7dGhpcy5jYW5TY3JvbGxMZWZ0PyJ2aXNpYmxlIjoiIn0iPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iJHtSfSIgQHNjcm9sbD0ke3RoaXMuaGFuZGxlU2Nyb2xsfT4KICAgICAgICAgICAgJHt0aGlzLnRhYnMubWFwKEE9PnRoaXMucmVuZGVyVGFiKEEsUykpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzY3JvbGwtZmFkZSBzY3JvbGwtZmFkZS1yaWdodCAke3RoaXMuY2FuU2Nyb2xsUmlnaHQ/InZpc2libGUiOiIifSI+PC9kaXY+CiAgICAgICAgICAke3RoaXMuc2hvd1RhYkluZGljYXRvcj9NYDxkaXYgY2xhc3M9InRhYkluZGljYXRvciI+PC9kaXY+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgYDpNYAogICAgICA8ZGl2IGNsYXNzPSIke1R9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSIke1J9Ij4KICAgICAgICAgICR7dGhpcy50YWJzLm1hcChBPT50aGlzLnJlbmRlclRhYihBLFMpKX0KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuc2hvd1RhYkluZGljYXRvcj9NYDxkaXYgY2xhc3M9InRhYkluZGljYXRvciI+PC9kaXY+YDoiIn0KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlclRhYihTLFQpe2xldCBBPWB0YWIgJHtTPT09dGhpcy5zZWxlY3RlZFRhYj8ic2VsZWN0ZWRUYWIiOiIifWAsRj1TLmNsb3NlYWJsZT9NYAogICAgICA8c3BhbiBjbGFzcz0idGFiLWNsb3NlIiBAY2xpY2s9IiR7Vj0+dGhpcy5jbG9zZVRhYihWLFMpfSI+CiAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9IHN0eWxlPSJmb250LXNpemU6IDEycHg7Ij48L2RlZXMtaWNvbj4KICAgICAgPC9zcGFuPgogICAgYDoiIixhZT1UP01gCiAgICAgIDxzcGFuIGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgICAgJHt0aGlzLnJlbmRlclRhYkljb24oUyl9CiAgICAgICAgJHtTLmtleX0KICAgICAgPC9zcGFuPgogICAgICAke0Z9CiAgICBgOk1gCiAgICAgICR7dGhpcy5yZW5kZXJUYWJJY29uKFMpfQogICAgICAke1Mua2V5fQogICAgICAke0Z9CiAgICBgO3JldHVybiBNYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9IiR7QX0iCiAgICAgICAgQGNsaWNrPSIkeygpPT50aGlzLnNlbGVjdFRhYihTKX0iCiAgICAgID4KICAgICAgICAke2FlfQogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyVGFiSWNvbihTKXtyZXR1cm4gUy5pY29uTmFtZT9NYDxkZWVzLWljb24gLmljb249JHtTLmljb25OYW1lfT48L2RlZXMtaWNvbj5gOiIifXNlbGVjdFRhYihTKXt0aGlzLnNlbGVjdGVkVGFiPVMsUy5hY3Rpb24oKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnNjcm9sbFRhYkludG9WaWV3KFMpfSksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLXNlbGVjdCIse2RldGFpbDp7dGFiOlN9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9Y2xvc2VUYWIoUyxUKXtTLnN0b3BQcm9wYWdhdGlvbigpLFQub25DbG9zZSYmVC5vbkNsb3NlKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLWNsb3NlIix7ZGV0YWlsOnt0YWI6VH0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1maXJzdFVwZGF0ZWQoKXt0aGlzLnRhYnMmJnRoaXMudGFicy5sZW5ndGg+MCYmdGhpcy5zZWxlY3RUYWIodGhpcy50YWJzWzBdKSx0aGlzLnNldHVwUmVzaXplT2JzZXJ2ZXIoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlKCl9KX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5yZXNpemVPYnNlcnZlciYmKHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMucmVzaXplT2JzZXJ2ZXI9bnVsbCl9c2V0dXBSZXNpemVPYnNlcnZlcigpe2lmKHRoaXMudGFiU3R5bGUhPT0iaG9yaXpvbnRhbCIpcmV0dXJuO3RoaXMucmVzaXplT2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT57dGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpfSk7bGV0IFM9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudGFic0NvbnRhaW5lci5ob3Jpem9udGFsIik7UyYmdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKFMpfWhhbmRsZVNjcm9sbD0oKT0+e3RoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKX07dXBkYXRlU2Nyb2xsU3RhdGUoKXtsZXQgUz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWJzQ29udGFpbmVyLmhvcml6b250YWwiKTtpZighUylyZXR1cm47bGV0IFQ9Uy5zY3JvbGxMZWZ0LFI9Uy5zY3JvbGxXaWR0aCxBPVMuY2xpZW50V2lkdGgsRj0yO3RoaXMuY2FuU2Nyb2xsTGVmdD1UPkYsdGhpcy5jYW5TY3JvbGxSaWdodD1UPFItQS1GfXNjcm9sbFRhYkludG9WaWV3KFMpe2lmKHRoaXMudGFiU3R5bGUhPT0iaG9yaXpvbnRhbCIpcmV0dXJuO2xldCBUPXRoaXMudGFicy5pbmRleE9mKFMpO2lmKFQ9PT0tMSlyZXR1cm47bGV0IFI9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudGFic0NvbnRhaW5lci5ob3Jpem9udGFsIiksQT1SPy5xdWVyeVNlbGVjdG9yKGAudGFiOm50aC1jaGlsZCgke1QrMX0pYCk7aWYoQSYmUil7bGV0IEY9Ui5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhZT1BLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2FlLmxlZnQ+PUYubGVmdCYmYWUucmlnaHQ8PUYucmlnaHR8fEEuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgiLGJsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJlc3QifSl9fWFzeW5jIHVwZGF0ZWQoUyl7c3VwZXIudXBkYXRlZChTKSxTLmhhcygidGFicyIpJiZ0aGlzLnRhYnMmJnRoaXMudGFicy5sZW5ndGg+MCYmIXRoaXMuc2VsZWN0ZWRUYWImJnRoaXMuc2VsZWN0VGFiKHRoaXMudGFic1swXSksKFMuaGFzKCJzZWxlY3RlZFRhYiIpfHxTLmhhcygidGFicyIpKSYmKGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsIXRoaXMuaW5kaWNhdG9ySW5pdGlhbGl6ZWQmJmRvY3VtZW50LmZvbnRzJiZhd2FpdCBkb2N1bWVudC5mb250cy5yZWFkeSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnVwZGF0ZVRhYkluZGljYXRvcigpLHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKX0pKX1pbmRpY2F0b3JJbml0aWFsaXplZD0hMTt1cGRhdGVUYWJJbmRpY2F0b3IoKXtpZighdGhpcy5zaG91bGRTaG93SW5kaWNhdG9yKCkpcmV0dXJuO2xldCBTPXRoaXMuZ2V0U2VsZWN0ZWRUYWJFbGVtZW50KCk7aWYoIVMpcmV0dXJuO2xldCBUPXRoaXMuZ2V0SW5kaWNhdG9yRWxlbWVudCgpO1QmJih0aGlzLmhhbmRsZUluaXRpYWxUcmFuc2l0aW9uKFQpLHRoaXMudGFiU3R5bGU9PT0iaG9yaXpvbnRhbCI/dGhpcy51cGRhdGVIb3Jpem9udGFsSW5kaWNhdG9yKFQsUyk6dGhpcy51cGRhdGVWZXJ0aWNhbEluZGljYXRvcihULFMpLFQuc3R5bGUub3BhY2l0eT0iMSIpfXNob3VsZFNob3dJbmRpY2F0b3IoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFRhYiYmdGhpcy5zaG93VGFiSW5kaWNhdG9yJiZ0aGlzLnRhYnMuaW5jbHVkZXModGhpcy5zZWxlY3RlZFRhYil9Z2V0U2VsZWN0ZWRUYWJFbGVtZW50KCl7bGV0IFM9dGhpcy50YWJzLmluZGV4T2YodGhpcy5zZWxlY3RlZFRhYiksUj10aGlzLnRhYlN0eWxlPT09Imhvcml6b250YWwiP2AudGFicy13cmFwcGVyIC50YWJzQ29udGFpbmVyIC50YWI6bnRoLWNoaWxkKCR7UysxfSlgOmAudmVydGljYWwtd3JhcHBlciAudGFic0NvbnRhaW5lciAudGFiOm50aC1jaGlsZCgke1MrMX0pYDtyZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoUil9Z2V0SW5kaWNhdG9yRWxlbWVudCgpe3JldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnRhYkluZGljYXRvciIpfWhhbmRsZUluaXRpYWxUcmFuc2l0aW9uKFMpe3RoaXMuaW5kaWNhdG9ySW5pdGlhbGl6ZWR8fChTLmNsYXNzTGlzdC5hZGQoIm5vLXRyYW5zaXRpb24iKSx0aGlzLmluZGljYXRvckluaXRpYWxpemVkPSEwLHNldFRpbWVvdXQoKCk9PntTLmNsYXNzTGlzdC5yZW1vdmUoIm5vLXRyYW5zaXRpb24iKX0sNTApKX11cGRhdGVIb3Jpem9udGFsSW5kaWNhdG9yKFMsVCl7bGV0IFI9VC5xdWVyeVNlbGVjdG9yKCIudGFiLWNvbnRlbnQiKTtpZighUilyZXR1cm47bGV0IEE9Uy5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEY9Ui5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhZT1GLmxlZnQtQS5sZWZ0LFY9Ri53aWR0aCs4LFNlPWFlLTQ7Uy5zdHlsZS53aWR0aD1gJHtWfXB4YCxTLnN0eWxlLmxlZnQ9YCR7U2V9cHhgfXVwZGF0ZVZlcnRpY2FsSW5kaWNhdG9yKFMsVCl7bGV0IFI9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi52ZXJ0aWNhbC13cmFwcGVyIC50YWJzQ29udGFpbmVyIik7UiYmKFMuc3R5bGUudG9wPWAke1Qub2Zmc2V0VG9wK1Iub2Zmc2V0VG9wfXB4YCxTLnN0eWxlLmhlaWdodD1gJHtULmNsaWVudEhlaWdodH1weGApfXN0YXRpY3tzMihyLGEpfX07cmV0dXJuIE49cn0pKCk7ZmUoKTtTdCgpO0JlKCk7dmFyIHM1PWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0saXI9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LEFvMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtYXBwdWktbWFpbmNvbnRlbnQiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXSx2LHk9W10sdz1bXTt2YXIgRT1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IEM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpBcnJheX0pXSxmPVtEKHt0eXBlOk9iamVjdH0pXSxkPVtEKHt0eXBlOkJvb2xlYW59KV0sYj1bRCh7dHlwZTpCb29sZWFufSldLHY9W0Qoe3R5cGU6TnVtYmVyfSldLHM1KHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGFicyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InRhYnMiaW4geixnZXQ6ej0+ei50YWJzLHNldDooeixQKT0+e3oudGFicz1QfX0sbWV0YWRhdGE6Q30scyxsKSxzNSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkVGFiIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ic2VsZWN0ZWRUYWIiaW4geixnZXQ6ej0+ei5zZWxlY3RlZFRhYixzZXQ6KHosUCk9Pnt6LnNlbGVjdGVkVGFiPVB9fSxtZXRhZGF0YTpDfSxjLHUpLHM1KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hvd1RhYnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJzaG93VGFicyJpbiB6LGdldDp6PT56LnNob3dUYWJzLHNldDooeixQKT0+e3ouc2hvd1RhYnM9UH19LG1ldGFkYXRhOkN9LGgsZyksczUodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJzQXV0b0hpZGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJ0YWJzQXV0b0hpZGUiaW4geixnZXQ6ej0+ei50YWJzQXV0b0hpZGUsc2V0Oih6LFApPT57ei50YWJzQXV0b0hpZGU9UH19LG1ldGFkYXRhOkN9LHgsbSksczUodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJzQXV0b0hpZGVUaHJlc2hvbGQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJ0YWJzQXV0b0hpZGVUaHJlc2hvbGQiaW4geixnZXQ6ej0+ei50YWJzQXV0b0hpZGVUaHJlc2hvbGQsc2V0Oih6LFApPT57ei50YWJzQXV0b0hpZGVUaHJlc2hvbGQ9UH19LG1ldGFkYXRhOkN9LHksdyksczUobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6Q30sbnVsbCxhKSxFPXI9ZS52YWx1ZSxDJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkN9KX1zdGF0aWMgZGVtbz0oKT0+TWAKICAgIDxkZWVzLWFwcHVpLW1haW5jb250ZW50CiAgICAgIC50YWJzPSR7W3trZXk6Ik92ZXJ2aWV3IixpY29uTmFtZToibHVjaWRlOmhvbWUiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIk92ZXJ2aWV3Iil9LHtrZXk6IkRldGFpbHMiLGljb25OYW1lOiJsdWNpZGU6ZmlsZSIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiRGV0YWlscyIpfSx7a2V5OiJTZXR0aW5ncyIsaWNvbk5hbWU6Imx1Y2lkZTpzZXR0aW5ncyIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiU2V0dGluZ3MiKX1dfQogICAgPgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIHN0eWxlPSJwYWRkaW5nOiA0MHB4OyBjb2xvcjogI2NjYzsiPgogICAgICAgIDxoMT5NYWluIENvbnRlbnQgQXJlYTwvaDE+CiAgICAgICAgPHA+VGhpcyBpcyB3aGVyZSB5b3VyIGFwcGxpY2F0aW9uIGNvbnRlbnQgZ29lcy48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kZWVzLWFwcHVpLW1haW5jb250ZW50PgogIGA7c3RhdGljIGRlbW9Hcm91cD0iQXBwIFVJIjsjZT1pcih0aGlzLHMsW3trZXk6Ilx1MjZBMFx1RkUwRiBQbGVhc2Ugc2V0IHRhYnMiLGFjdGlvbjooKT0+Y29uc29sZS53YXJuKCJObyB0YWJzIGNvbmZpZ3VyZWQgZm9yIG1haW5jb250ZW50Iil9XSk7Z2V0IHRhYnMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdGFicyhDKXt0aGlzLiNlPUN9I3Q9KGlyKHRoaXMsbCksaXIodGhpcyxjLG51bGwpKTtnZXQgc2VsZWN0ZWRUYWIoKXtyZXR1cm4gdGhpcy4jdH1zZXQgc2VsZWN0ZWRUYWIoQyl7dGhpcy4jdD1DfSNhPShpcih0aGlzLHUpLGlyKHRoaXMsaCwhMCkpO2dldCBzaG93VGFicygpe3JldHVybiB0aGlzLiNhfXNldCBzaG93VGFicyhDKXt0aGlzLiNhPUN9I3I9KGlyKHRoaXMsZyksaXIodGhpcyx4LCExKSk7Z2V0IHRhYnNBdXRvSGlkZSgpe3JldHVybiB0aGlzLiNyfXNldCB0YWJzQXV0b0hpZGUoQyl7dGhpcy4jcj1DfSNpPShpcih0aGlzLG0pLGlyKHRoaXMseSwwKSk7Z2V0IHRhYnNBdXRvSGlkZVRocmVzaG9sZCgpe3JldHVybiB0aGlzLiNpfXNldCB0YWJzQXV0b0hpZGVUaHJlc2hvbGQoQyl7dGhpcy4jaT1DfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzMzMyIsIiNmZmYiKX07CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMWZyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMxNjE2MTYiKX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQoKICAgICAgLnRvcGJhciB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGdyaWQtdGVtcGxhdGUtcm93cyAwLjNzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b3BiYXIgPiAqIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuY29udGVudC1hcmVhIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtub3RhYnNdKSAudG9wYmFyIHsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDBmcjsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcGJhciI+CiAgICAgICAgICA8ZGVlcy1hcHB1aS10YWJzCiAgICAgICAgICAgIC50YWJzPSR7dGhpcy50YWJzfQogICAgICAgICAgICAuc2VsZWN0ZWRUYWI9JHt0aGlzLnNlbGVjdGVkVGFifQogICAgICAgICAgICAuc2hvd1RhYkluZGljYXRvcj0keyEwfQogICAgICAgICAgICAudGFiU3R5bGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5hdXRvSGlkZT0ke3RoaXMudGFic0F1dG9IaWRlfQogICAgICAgICAgICAuYXV0b0hpZGVUaHJlc2hvbGQ9JHt0aGlzLnRhYnNBdXRvSGlkZVRocmVzaG9sZH0KICAgICAgICAgICAgQHRhYi1zZWxlY3Q9JHtDPT50aGlzLmhhbmRsZVRhYlNlbGVjdChDKX0KICAgICAgICAgICAgQHRhYi1jbG9zZT0ke0M9PnRoaXMuaGFuZGxlVGFiQ2xvc2UoQyl9CiAgICAgICAgICA+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1hcmVhIj4KICAgICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgICAgIDxzbG90IG5hbWU9ImNvbnRlbnQiPjwvc2xvdD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWhhbmRsZVRhYlNlbGVjdChDKXt0aGlzLnNlbGVjdGVkVGFiPUMuZGV0YWlsLnRhYix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0Iix7ZGV0YWlsOkMuZGV0YWlsLGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlVGFiQ2xvc2UoQyl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLWNsb3NlIix7ZGV0YWlsOkMuZGV0YWlsLGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9dXBkYXRlZChDKXtzdXBlci51cGRhdGVkKEMpLEMuaGFzKCJzaG93VGFicyIpJiYodGhpcy5zaG93VGFicz90aGlzLnJlbW92ZUF0dHJpYnV0ZSgibm90YWJzIik6dGhpcy5zZXRBdHRyaWJ1dGUoIm5vdGFicyIsIiIpKX1hc3luYyBmaXJzdFVwZGF0ZWQoQyl7YXdhaXQgc3VwZXIuZmlyc3RVcGRhdGVkKEMpLHRoaXMuc2hvd1RhYnN8fHRoaXMuc2V0QXR0cmlidXRlKCJub3RhYnMiLCIiKTtsZXQgej10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS10YWJzIik7eiYmYXdhaXQgei51cGRhdGVDb21wbGV0ZX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksaXIodGhpcyx3KX1zdGF0aWN7aXIocixhKX19O3JldHVybiBFPXJ9KSgpO2ZlKCk7U3QoKTtCZSgpO3ZhciBMdD1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LEZlPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSwkbzE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWFwcHVpIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W10sSCxMPVtdLGs9W10sTixTPVtdLFQ9W10sUixBPVtdLEY9W10sYWUsVj1bXSxTZT1bXSx6ZSxXPVtdLE5lPVtdLFJlLFg9W10sST1bXSxPLEc9W10saj1bXSxzZSxrZT1bXSxEZT1bXSxPZSxVPVtdLEI9W10sb2UsdmU9W10seWU9W10sJGUsbmU9W10scmU9W10sZ2UsRWU9W10scnQ9W10sdWUsWj1bXSxKPVtdLGRlLEFlPVtdLEhlPVtdLE10LGl0PVtdLHp0PVtdLHF0LFE9W10sSz1bXSxiZSxvdD1bXSxudD1bXSxuMSx2YT1bXSxLcj1bXSxKcixUZT1bXSxqZT1bXSxnMSxLMT1bXSxmMj1bXSwkMix1Mj1bXSxpbz1bXSxvbyxzbz1bXSx3NT1bXSxNNSxoZT1bXSxpZT1bXSxDZSx6MT1bXSx0dD1bXSx0MSxEMj1bXSxRZT1bXSxUMSxFMj1bXSxPYT1bXSx6NSxHST1bXSxrNT1bXSxZSSxrTmU9W10sU05lPVtdO3ZhciBDTmU9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBxPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6QXJyYXl9KV0sZj1bRCh7dHlwZTpTdHJpbmd9KV0sZD1bRCh7dHlwZTpTdHJpbmd9KV0sYj1bRCh7dHlwZTpCb29sZWFufSldLHY9W0Qoe3R5cGU6T2JqZWN0fSldLEU9W0Qoe3R5cGU6QXJyYXl9KV0sUD1bRCh7dHlwZTpCb29sZWFufSldLEg9W0Qoe3R5cGU6U3RyaW5nfSldLE49W0Qoe3R5cGU6U3RyaW5nfSldLFI9W0Qoe3R5cGU6QXJyYXl9KV0sYWU9W0Qoe3R5cGU6QXJyYXl9KV0semU9W0Qoe3R5cGU6QXJyYXl9KV0sUmU9W0Qoe3R5cGU6T2JqZWN0fSldLE89W0Qoe3R5cGU6U3RyaW5nfSldLHNlPVtEKHt0eXBlOkFycmF5fSldLE9lPVtEKHt0eXBlOk9iamVjdH0pXSxvZT1bRCh7dHlwZTpCb29sZWFufSldLCRlPVtEKHt0eXBlOkJvb2xlYW59KV0sZ2U9W0Qoe3R5cGU6Qm9vbGVhbn0pXSx1ZT1bRCh7dHlwZTpCb29sZWFufSldLGRlPVtEKHt0eXBlOkJvb2xlYW59KV0sTXQ9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxxdD1bRCh7dHlwZTpOdW1iZXJ9KV0sYmU9W2xlKCldLG4xPVtsZSgpXSxKcj1bRCh7dHlwZTpBcnJheX0pXSxnMT1bRCh7dHlwZTpPYmplY3R9KV0sJDI9W2xlKCldLG9vPVtsZSgpXSxNNT1bbGUoKV0sQ2U9W2xlKCldLHQxPVtsZSgpXSxUMT1bbGUoKV0sejU9W2xlKCldLFlJPVtsZSgpXSxMdCh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFwcGJhck1lbnVJdGVtcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImFwcGJhck1lbnVJdGVtcyJpbiBZLGdldDpZPT5ZLmFwcGJhck1lbnVJdGVtcyxzZXQ6KFksbWUpPT57WS5hcHBiYXJNZW51SXRlbXM9bWV9fSxtZXRhZGF0YTpxfSxzLGwpLEx0KHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXBwYmFyQnJlYWRjcnVtYnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlk9PiJhcHBiYXJCcmVhZGNydW1icyJpbiBZLGdldDpZPT5ZLmFwcGJhckJyZWFkY3J1bWJzLHNldDooWSxtZSk9PntZLmFwcGJhckJyZWFkY3J1bWJzPW1lfX0sbWV0YWRhdGE6cX0sYyx1KSxMdCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlk9PiJhcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yImluIFksZ2V0Olk9PlkuYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcixzZXQ6KFksbWUpPT57WS5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yPW1lfX0sbWV0YWRhdGE6cX0saCxnKSxMdCh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFwcGJhclNob3dXaW5kb3dDb250cm9scyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImFwcGJhclNob3dXaW5kb3dDb250cm9scyJpbiBZLGdldDpZPT5ZLmFwcGJhclNob3dXaW5kb3dDb250cm9scyxzZXQ6KFksbWUpPT57WS5hcHBiYXJTaG93V2luZG93Q29udHJvbHM9bWV9fSxtZXRhZGF0YTpxfSx4LG0pLEx0KHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXBwYmFyVXNlciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImFwcGJhclVzZXIiaW4gWSxnZXQ6WT0+WS5hcHBiYXJVc2VyLHNldDooWSxtZSk9PntZLmFwcGJhclVzZXI9bWV9fSxtZXRhZGF0YTpxfSx5LHcpLEx0KHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImFwcGJhclByb2ZpbGVNZW51SXRlbXMiaW4gWSxnZXQ6WT0+WS5hcHBiYXJQcm9maWxlTWVudUl0ZW1zLHNldDooWSxtZSk9PntZLmFwcGJhclByb2ZpbGVNZW51SXRlbXM9bWV9fSxtZXRhZGF0YTpxfSxDLHopLEx0KHRoaXMsbnVsbCxQLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXBwYmFyU2hvd1NlYXJjaCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImFwcGJhclNob3dTZWFyY2giaW4gWSxnZXQ6WT0+WS5hcHBiYXJTaG93U2VhcmNoLHNldDooWSxtZSk9PntZLmFwcGJhclNob3dTZWFyY2g9bWV9fSxtZXRhZGF0YTpxfSxfLCQpLEx0KHRoaXMsbnVsbCxILHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbm1lbnVMb2dvSWNvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+Im1haW5tZW51TG9nb0ljb24iaW4gWSxnZXQ6WT0+WS5tYWlubWVudUxvZ29JY29uLHNldDooWSxtZSk9PntZLm1haW5tZW51TG9nb0ljb249bWV9fSxtZXRhZGF0YTpxfSxMLGspLEx0KHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbm1lbnVMb2dvVGV4dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+Im1haW5tZW51TG9nb1RleHQiaW4gWSxnZXQ6WT0+WS5tYWlubWVudUxvZ29UZXh0LHNldDooWSxtZSk9PntZLm1haW5tZW51TG9nb1RleHQ9bWV9fSxtZXRhZGF0YTpxfSxTLFQpLEx0KHRoaXMsbnVsbCxSLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbm1lbnVHcm91cHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlk9PiJtYWlubWVudUdyb3VwcyJpbiBZLGdldDpZPT5ZLm1haW5tZW51R3JvdXBzLHNldDooWSxtZSk9PntZLm1haW5tZW51R3JvdXBzPW1lfX0sbWV0YWRhdGE6cX0sQSxGKSxMdCh0aGlzLG51bGwsYWUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYWlubWVudUJvdHRvbVRhYnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlk9PiJtYWlubWVudUJvdHRvbVRhYnMiaW4gWSxnZXQ6WT0+WS5tYWlubWVudUJvdHRvbVRhYnMsc2V0OihZLG1lKT0+e1kubWFpbm1lbnVCb3R0b21UYWJzPW1lfX0sbWV0YWRhdGE6cX0sVixTZSksTHQodGhpcyxudWxsLHplLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbm1lbnVUYWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4ibWFpbm1lbnVUYWJzImluIFksZ2V0Olk9PlkubWFpbm1lbnVUYWJzLHNldDooWSxtZSk9PntZLm1haW5tZW51VGFicz1tZX19LG1ldGFkYXRhOnF9LFcsTmUpLEx0KHRoaXMsbnVsbCxSZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1haW5tZW51U2VsZWN0ZWRUYWIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlk9PiJtYWlubWVudVNlbGVjdGVkVGFiImluIFksZ2V0Olk9PlkubWFpbm1lbnVTZWxlY3RlZFRhYixzZXQ6KFksbWUpPT57WS5tYWlubWVudVNlbGVjdGVkVGFiPW1lfX0sbWV0YWRhdGE6cX0sWCxJKSxMdCh0aGlzLG51bGwsTyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlY29uZGFyeW1lbnVIZWFkaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4ic2Vjb25kYXJ5bWVudUhlYWRpbmciaW4gWSxnZXQ6WT0+WS5zZWNvbmRhcnltZW51SGVhZGluZyxzZXQ6KFksbWUpPT57WS5zZWNvbmRhcnltZW51SGVhZGluZz1tZX19LG1ldGFkYXRhOnF9LEcsaiksTHQodGhpcyxudWxsLHNlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2Vjb25kYXJ5bWVudUdyb3VwcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+InNlY29uZGFyeW1lbnVHcm91cHMiaW4gWSxnZXQ6WT0+WS5zZWNvbmRhcnltZW51R3JvdXBzLHNldDooWSxtZSk9PntZLnNlY29uZGFyeW1lbnVHcm91cHM9bWV9fSxtZXRhZGF0YTpxfSxrZSxEZSksTHQodGhpcyxudWxsLE9lLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+InNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0iaW4gWSxnZXQ6WT0+WS5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtLHNldDooWSxtZSk9PntZLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW09bWV9fSxtZXRhZGF0YTpxfSxVLEIpLEx0KHRoaXMsbnVsbCxvZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1haW5tZW51Q29sbGFwc2VkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4ibWFpbm1lbnVDb2xsYXBzZWQiaW4gWSxnZXQ6WT0+WS5tYWlubWVudUNvbGxhcHNlZCxzZXQ6KFksbWUpPT57WS5tYWlubWVudUNvbGxhcHNlZD1tZX19LG1ldGFkYXRhOnF9LHZlLHllKSxMdCh0aGlzLG51bGwsJGUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWNvbmRhcnltZW51Q29sbGFwc2VkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4ic2Vjb25kYXJ5bWVudUNvbGxhcHNlZCJpbiBZLGdldDpZPT5ZLnNlY29uZGFyeW1lbnVDb2xsYXBzZWQsc2V0OihZLG1lKT0+e1kuc2Vjb25kYXJ5bWVudUNvbGxhcHNlZD1tZX19LG1ldGFkYXRhOnF9LG5lLHJlKSxMdCh0aGlzLG51bGwsZ2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYWlubWVudVZpc2libGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlk9PiJtYWlubWVudVZpc2libGUiaW4gWSxnZXQ6WT0+WS5tYWlubWVudVZpc2libGUsc2V0OihZLG1lKT0+e1kubWFpbm1lbnVWaXNpYmxlPW1lfX0sbWV0YWRhdGE6cX0sRWUscnQpLEx0KHRoaXMsbnVsbCx1ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlY29uZGFyeW1lbnVWaXNpYmxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4ic2Vjb25kYXJ5bWVudVZpc2libGUiaW4gWSxnZXQ6WT0+WS5zZWNvbmRhcnltZW51VmlzaWJsZSxzZXQ6KFksbWUpPT57WS5zZWNvbmRhcnltZW51VmlzaWJsZT1tZX19LG1ldGFkYXRhOnF9LFosSiksTHQodGhpcyxudWxsLGRlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbmNvbnRlbnRUYWJzVmlzaWJsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+Im1haW5jb250ZW50VGFic1Zpc2libGUiaW4gWSxnZXQ6WT0+WS5tYWluY29udGVudFRhYnNWaXNpYmxlLHNldDooWSxtZSk9PntZLm1haW5jb250ZW50VGFic1Zpc2libGU9bWV9fSxtZXRhZGF0YTpxfSxBZSxIZSksTHQodGhpcyxudWxsLE10LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29udGVudFRhYnNBdXRvSGlkZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImNvbnRlbnRUYWJzQXV0b0hpZGUiaW4gWSxnZXQ6WT0+WS5jb250ZW50VGFic0F1dG9IaWRlLHNldDooWSxtZSk9PntZLmNvbnRlbnRUYWJzQXV0b0hpZGU9bWV9fSxtZXRhZGF0YTpxfSxpdCx6dCksTHQodGhpcyxudWxsLHF0LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQiaW4gWSxnZXQ6WT0+WS5jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkLHNldDooWSxtZSk9PntZLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQ9bWV9fSxtZXRhZGF0YTpxfSxRLEspLEx0KHRoaXMsbnVsbCxiZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFjdGl2aXR5TG9nVmlzaWJsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImFjdGl2aXR5TG9nVmlzaWJsZSJpbiBZLGdldDpZPT5ZLmFjdGl2aXR5TG9nVmlzaWJsZSxzZXQ6KFksbWUpPT57WS5hY3Rpdml0eUxvZ1Zpc2libGU9bWV9fSxtZXRhZGF0YTpxfSxvdCxudCksTHQodGhpcyxudWxsLG4xLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWN0aXZpdHlMb2dDb3VudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImFjdGl2aXR5TG9nQ291bnQiaW4gWSxnZXQ6WT0+WS5hY3Rpdml0eUxvZ0NvdW50LHNldDooWSxtZSk9PntZLmFjdGl2aXR5TG9nQ291bnQ9bWV9fSxtZXRhZGF0YTpxfSx2YSxLciksTHQodGhpcyxudWxsLEpyLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbmNvbnRlbnRUYWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4ibWFpbmNvbnRlbnRUYWJzImluIFksZ2V0Olk9PlkubWFpbmNvbnRlbnRUYWJzLHNldDooWSxtZSk9PntZLm1haW5jb250ZW50VGFicz1tZX19LG1ldGFkYXRhOnF9LFRlLGplKSxMdCh0aGlzLG51bGwsZzEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYWluY29udGVudFNlbGVjdGVkVGFiIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4ibWFpbmNvbnRlbnRTZWxlY3RlZFRhYiJpbiBZLGdldDpZPT5ZLm1haW5jb250ZW50U2VsZWN0ZWRUYWIsc2V0OihZLG1lKT0+e1kubWFpbmNvbnRlbnRTZWxlY3RlZFRhYj1tZX19LG1ldGFkYXRhOnF9LEsxLGYyKSxMdCh0aGlzLG51bGwsJDIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhcHBiYXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlk9PiJhcHBiYXIiaW4gWSxnZXQ6WT0+WS5hcHBiYXIsc2V0OihZLG1lKT0+e1kuYXBwYmFyPW1lfX0sbWV0YWRhdGE6cX0sdTIsaW8pLEx0KHRoaXMsbnVsbCxvbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1haW5tZW51IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4ibWFpbm1lbnUiaW4gWSxnZXQ6WT0+WS5tYWlubWVudSxzZXQ6KFksbWUpPT57WS5tYWlubWVudT1tZX19LG1ldGFkYXRhOnF9LHNvLHc1KSxMdCh0aGlzLG51bGwsTTUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWNvbmRhcnltZW51IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4ic2Vjb25kYXJ5bWVudSJpbiBZLGdldDpZPT5ZLnNlY29uZGFyeW1lbnUsc2V0OihZLG1lKT0+e1kuc2Vjb25kYXJ5bWVudT1tZX19LG1ldGFkYXRhOnF9LGhlLGllKSxMdCh0aGlzLG51bGwsQ2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYWluY29udGVudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+Im1haW5jb250ZW50ImluIFksZ2V0Olk9PlkubWFpbmNvbnRlbnQsc2V0OihZLG1lKT0+e1kubWFpbmNvbnRlbnQ9bWV9fSxtZXRhZGF0YTpxfSx6MSx0dCksTHQodGhpcyxudWxsLHQxLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWN0aXZpdHlsb2dFbGVtZW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4iYWN0aXZpdHlsb2dFbGVtZW50ImluIFksZ2V0Olk9PlkuYWN0aXZpdHlsb2dFbGVtZW50LHNldDooWSxtZSk9PntZLmFjdGl2aXR5bG9nRWxlbWVudD1tZX19LG1ldGFkYXRhOnF9LEQyLFFlKSxMdCh0aGlzLG51bGwsVDEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJib3R0b21iYXJFbGVtZW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4iYm90dG9tYmFyRWxlbWVudCJpbiBZLGdldDpZPT5ZLmJvdHRvbWJhckVsZW1lbnQsc2V0OihZLG1lKT0+e1kuYm90dG9tYmFyRWxlbWVudD1tZX19LG1ldGFkYXRhOnF9LEUyLE9hKSxMdCh0aGlzLG51bGwsejUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJib3R0b21iYXJWaXNpYmxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4iYm90dG9tYmFyVmlzaWJsZSJpbiBZLGdldDpZPT5ZLmJvdHRvbWJhclZpc2libGUsc2V0OihZLG1lKT0+e1kuYm90dG9tYmFyVmlzaWJsZT1tZX19LG1ldGFkYXRhOnF9LEdJLGs1KSxMdCh0aGlzLG51bGwsWUkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXJyZW50VmlldyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImN1cnJlbnRWaWV3ImluIFksZ2V0Olk9PlkuY3VycmVudFZpZXcsc2V0OihZLG1lKT0+e1kuY3VycmVudFZpZXc9bWV9fSxtZXRhZGF0YTpxfSxrTmUsU05lKSxMdChudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpxfSxudWxsLGEpLENOZT1yPWUudmFsdWUscSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpxfSl9c3RhdGljIGRlbW89RUl0O3N0YXRpYyBkZW1vR3JvdXA9IkFwcCBVSSI7dmlld0xpZmVjeWNsZSQ9bmV3IEF0LnNtYXJ0cngucnhqcy5TdWJqZWN0O3ZpZXdDaGFuZ2VkJD1uZXcgQXQuc21hcnRyeC5yeGpzLlN1YmplY3Q7I2U9RmUodGhpcyxzLFtdKTtnZXQgYXBwYmFyTWVudUl0ZW1zKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGFwcGJhck1lbnVJdGVtcyhxKXt0aGlzLiNlPXF9I3Q9KEZlKHRoaXMsbCksRmUodGhpcyxjLCIiKSk7Z2V0IGFwcGJhckJyZWFkY3J1bWJzKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGFwcGJhckJyZWFkY3J1bWJzKHEpe3RoaXMuI3Q9cX0jYT0oRmUodGhpcyx1KSxGZSh0aGlzLGgsIiA+ICIpKTtnZXQgYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcigpe3JldHVybiB0aGlzLiNhfXNldCBhcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yKHEpe3RoaXMuI2E9cX0jcj0oRmUodGhpcyxnKSxGZSh0aGlzLHgsITApKTtnZXQgYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzKCl7cmV0dXJuIHRoaXMuI3J9c2V0IGFwcGJhclNob3dXaW5kb3dDb250cm9scyhxKXt0aGlzLiNyPXF9I2k9KEZlKHRoaXMsbSksRmUodGhpcyx5LHZvaWQgMCkpO2dldCBhcHBiYXJVc2VyKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGFwcGJhclVzZXIocSl7dGhpcy4jaT1xfSNvPShGZSh0aGlzLHcpLEZlKHRoaXMsQyxbXSkpO2dldCBhcHBiYXJQcm9maWxlTWVudUl0ZW1zKCl7cmV0dXJuIHRoaXMuI299c2V0IGFwcGJhclByb2ZpbGVNZW51SXRlbXMocSl7dGhpcy4jbz1xfSNzPShGZSh0aGlzLHopLEZlKHRoaXMsXywhMSkpO2dldCBhcHBiYXJTaG93U2VhcmNoKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGFwcGJhclNob3dTZWFyY2gocSl7dGhpcy4jcz1xfSNuPShGZSh0aGlzLCQpLEZlKHRoaXMsTCwiIikpO2dldCBtYWlubWVudUxvZ29JY29uKCl7cmV0dXJuIHRoaXMuI259c2V0IG1haW5tZW51TG9nb0ljb24ocSl7dGhpcy4jbj1xfSNsPShGZSh0aGlzLGspLEZlKHRoaXMsUywiIikpO2dldCBtYWlubWVudUxvZ29UZXh0KCl7cmV0dXJuIHRoaXMuI2x9c2V0IG1haW5tZW51TG9nb1RleHQocSl7dGhpcy4jbD1xfSNjPShGZSh0aGlzLFQpLEZlKHRoaXMsQSxbXSkpO2dldCBtYWlubWVudUdyb3Vwcygpe3JldHVybiB0aGlzLiNjfXNldCBtYWlubWVudUdyb3VwcyhxKXt0aGlzLiNjPXF9I2Q9KEZlKHRoaXMsRiksRmUodGhpcyxWLFtdKSk7Z2V0IG1haW5tZW51Qm90dG9tVGFicygpe3JldHVybiB0aGlzLiNkfXNldCBtYWlubWVudUJvdHRvbVRhYnMocSl7dGhpcy4jZD1xfSNmPShGZSh0aGlzLFNlKSxGZSh0aGlzLFcsW10pKTtnZXQgbWFpbm1lbnVUYWJzKCl7cmV0dXJuIHRoaXMuI2Z9c2V0IG1haW5tZW51VGFicyhxKXt0aGlzLiNmPXF9I3U9KEZlKHRoaXMsTmUpLEZlKHRoaXMsWCx2b2lkIDApKTtnZXQgbWFpbm1lbnVTZWxlY3RlZFRhYigpe3JldHVybiB0aGlzLiN1fXNldCBtYWlubWVudVNlbGVjdGVkVGFiKHEpe3RoaXMuI3U9cX0jcD0oRmUodGhpcyxJKSxGZSh0aGlzLEcsIiIpKTtnZXQgc2Vjb25kYXJ5bWVudUhlYWRpbmcoKXtyZXR1cm4gdGhpcy4jcH1zZXQgc2Vjb25kYXJ5bWVudUhlYWRpbmcocSl7dGhpcy4jcD1xfSNoPShGZSh0aGlzLGopLEZlKHRoaXMsa2UsW10pKTtnZXQgc2Vjb25kYXJ5bWVudUdyb3Vwcygpe3JldHVybiB0aGlzLiNofXNldCBzZWNvbmRhcnltZW51R3JvdXBzKHEpe3RoaXMuI2g9cX0jbT0oRmUodGhpcyxEZSksRmUodGhpcyxVLHZvaWQgMCkpO2dldCBzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtKCl7cmV0dXJuIHRoaXMuI219c2V0IHNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0ocSl7dGhpcy4jbT1xfSNnPShGZSh0aGlzLEIpLEZlKHRoaXMsdmUsITEpKTtnZXQgbWFpbm1lbnVDb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy4jZ31zZXQgbWFpbm1lbnVDb2xsYXBzZWQocSl7dGhpcy4jZz1xfSN4PShGZSh0aGlzLHllKSxGZSh0aGlzLG5lLCExKSk7Z2V0IHNlY29uZGFyeW1lbnVDb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy4jeH1zZXQgc2Vjb25kYXJ5bWVudUNvbGxhcHNlZChxKXt0aGlzLiN4PXF9I2I9KEZlKHRoaXMscmUpLEZlKHRoaXMsRWUsITApKTtnZXQgbWFpbm1lbnVWaXNpYmxlKCl7cmV0dXJuIHRoaXMuI2J9c2V0IG1haW5tZW51VmlzaWJsZShxKXt0aGlzLiNiPXF9I3Y9KEZlKHRoaXMscnQpLEZlKHRoaXMsWiwhMCkpO2dldCBzZWNvbmRhcnltZW51VmlzaWJsZSgpe3JldHVybiB0aGlzLiN2fXNldCBzZWNvbmRhcnltZW51VmlzaWJsZShxKXt0aGlzLiN2PXF9I3k9KEZlKHRoaXMsSiksRmUodGhpcyxBZSwhMCkpO2dldCBtYWluY29udGVudFRhYnNWaXNpYmxlKCl7cmV0dXJuIHRoaXMuI3l9c2V0IG1haW5jb250ZW50VGFic1Zpc2libGUocSl7dGhpcy4jeT1xfSN3PShGZSh0aGlzLEhlKSxGZSh0aGlzLGl0LCExKSk7Z2V0IGNvbnRlbnRUYWJzQXV0b0hpZGUoKXtyZXR1cm4gdGhpcy4jd31zZXQgY29udGVudFRhYnNBdXRvSGlkZShxKXt0aGlzLiN3PXF9I009KEZlKHRoaXMsenQpLEZlKHRoaXMsUSwwKSk7Z2V0IGNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQoKXtyZXR1cm4gdGhpcy4jTX1zZXQgY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZChxKXt0aGlzLiNNPXF9I3o9KEZlKHRoaXMsSyksRmUodGhpcyxvdCwhMSkpO2dldCBhY3Rpdml0eUxvZ1Zpc2libGUoKXtyZXR1cm4gdGhpcy4jen1zZXQgYWN0aXZpdHlMb2dWaXNpYmxlKHEpe3RoaXMuI3o9cX0jaz0oRmUodGhpcyxudCksRmUodGhpcyx2YSwwKSk7Z2V0IGFjdGl2aXR5TG9nQ291bnQoKXtyZXR1cm4gdGhpcy4ja31zZXQgYWN0aXZpdHlMb2dDb3VudChxKXt0aGlzLiNrPXF9I1M9KEZlKHRoaXMsS3IpLEZlKHRoaXMsVGUsW10pKTtnZXQgbWFpbmNvbnRlbnRUYWJzKCl7cmV0dXJuIHRoaXMuI1N9c2V0IG1haW5jb250ZW50VGFicyhxKXt0aGlzLiNTPXF9I0M9KEZlKHRoaXMsamUpLEZlKHRoaXMsSzEsdm9pZCAwKSk7Z2V0IG1haW5jb250ZW50U2VsZWN0ZWRUYWIoKXtyZXR1cm4gdGhpcy4jQ31zZXQgbWFpbmNvbnRlbnRTZWxlY3RlZFRhYihxKXt0aGlzLiNDPXF9I0w9KEZlKHRoaXMsZjIpLEZlKHRoaXMsdTIsdm9pZCAwKSk7Z2V0IGFwcGJhcigpe3JldHVybiB0aGlzLiNMfXNldCBhcHBiYXIocSl7dGhpcy4jTD1xfSNUPShGZSh0aGlzLGlvKSxGZSh0aGlzLHNvLHZvaWQgMCkpO2dldCBtYWlubWVudSgpe3JldHVybiB0aGlzLiNUfXNldCBtYWlubWVudShxKXt0aGlzLiNUPXF9I189KEZlKHRoaXMsdzUpLEZlKHRoaXMsaGUsdm9pZCAwKSk7Z2V0IHNlY29uZGFyeW1lbnUoKXtyZXR1cm4gdGhpcy4jX31zZXQgc2Vjb25kYXJ5bWVudShxKXt0aGlzLiNfPXF9I0E9KEZlKHRoaXMsaWUpLEZlKHRoaXMsejEsdm9pZCAwKSk7Z2V0IG1haW5jb250ZW50KCl7cmV0dXJuIHRoaXMuI0F9c2V0IG1haW5jb250ZW50KHEpe3RoaXMuI0E9cX0jJD0oRmUodGhpcyx0dCksRmUodGhpcyxEMix2b2lkIDApKTtnZXQgYWN0aXZpdHlsb2dFbGVtZW50KCl7cmV0dXJuIHRoaXMuIyR9c2V0IGFjdGl2aXR5bG9nRWxlbWVudChxKXt0aGlzLiMkPXF9I0Q9KEZlKHRoaXMsUWUpLEZlKHRoaXMsRTIsdm9pZCAwKSk7Z2V0IGJvdHRvbWJhckVsZW1lbnQoKXtyZXR1cm4gdGhpcy4jRH1zZXQgYm90dG9tYmFyRWxlbWVudChxKXt0aGlzLiNEPXF9I0U9KEZlKHRoaXMsT2EpLEZlKHRoaXMsR0ksITApKTtnZXQgYm90dG9tYmFyVmlzaWJsZSgpe3JldHVybiB0aGlzLiNFfXNldCBib3R0b21iYXJWaXNpYmxlKHEpe3RoaXMuI0U9cX0jTj0oRmUodGhpcyxrNSksRmUodGhpcyxrTmUsdm9pZCAwKSk7Z2V0IGN1cnJlbnRWaWV3KCl7cmV0dXJuIHRoaXMuI059c2V0IGN1cnJlbnRWaWV3KHEpe3RoaXMuI049cX12aWV3UmVnaXN0cnk9KEZlKHRoaXMsU05lKSxuZXcgWVUpO3JvdXRlckNsZWFudXA9bnVsbDtzZWFyY2hDYWxsYmFjaz1udWxsO3N0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmMGYwZjAiLCIjMWExYTFhIil9OwogICAgICB9CiAgICAgIC5tYWluZ3JpZCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDQwcHggLSAyNHB4KTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIC8qIGdyaWQtdGVtcGxhdGUtY29sdW1ucyBzZXQgZHluYW1pY2FsbHkgaW4gdGVtcGxhdGUgKi8KICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjsKICAgICAgICB0cmFuc2l0aW9uOiBncmlkLXRlbXBsYXRlLWNvbHVtbnMgMC4zcyBlYXNlLCBoZWlnaHQgMC4zcyBlYXNlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtib3R0b21iYXItaGlkZGVuXSkgLm1haW5ncmlkIHsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDQwcHgpOwogICAgICB9CgogICAgICBkZWVzLWFwcHVpLWJvdHRvbWJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHotaW5kZXg6IDQ7CiAgICAgIH0KCiAgICAgIC8qIFotaW5kZXggbGF5ZXJpbmcgZm9yIHByb3BlciBzdGFja2luZyAqLwogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLW1haW5tZW51IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMzsKICAgICAgfQoKICAgICAgLm1haW5ncmlkID4gZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgfQoKICAgICAgLm1haW5ncmlkID4gZGVlcy1hcHB1aS1tYWluY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgfQoKICAgICAgLm1haW5ncmlkID4gZGVlcy1hcHB1aS1hY3Rpdml0eWxvZyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZSwgdHJhbnNmb3JtIDAuM3MgZWFzZTsKICAgICAgfQoKICAgICAgLm1haW5ncmlkID4gZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy5oaWRkZW4gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDIwcHgpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLWFjdGl2aXR5bG9nLnZpc2libGUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogICAgICB9CgogICAgICAvKiBWaWV3IGNvbnRhaW5lciBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHZpZXdzICovCiAgICAgIC52aWV3LWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogY29udGVudHM7CiAgICAgIH0KCiAgICAgIC52aWV3LWNvbnRhaW5lcjplbXB0eSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkZWVzLWFwcHVpLWFwcGJhcgogICAgICAgIC5tZW51SXRlbXM9JHt0aGlzLmFwcGJhck1lbnVJdGVtc30KICAgICAgICAuYnJlYWRjcnVtYnM9JHt0aGlzLmFwcGJhckJyZWFkY3J1bWJzfQogICAgICAgIC5icmVhZGNydW1iU2VwYXJhdG9yPSR7dGhpcy5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yfQogICAgICAgIC5zaG93V2luZG93Q29udHJvbHM9JHt0aGlzLmFwcGJhclNob3dXaW5kb3dDb250cm9sc30KICAgICAgICAudXNlcj0ke3RoaXMuYXBwYmFyVXNlcn0KICAgICAgICAucHJvZmlsZU1lbnVJdGVtcz0ke3RoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtc30KICAgICAgICAuc2hvd1NlYXJjaD0ke3RoaXMuYXBwYmFyU2hvd1NlYXJjaH0KICAgICAgICAuc2hvd0FjdGl2aXR5TG9nVG9nZ2xlPSR7ITB9CiAgICAgICAgLmFjdGl2aXR5TG9nQ291bnQ9JHt0aGlzLmFjdGl2aXR5TG9nQ291bnR9CiAgICAgICAgLmFjdGl2aXR5TG9nQWN0aXZlPSR7dGhpcy5hY3Rpdml0eUxvZ1Zpc2libGV9CiAgICAgICAgQG1lbnUtc2VsZWN0PSR7cT0+dGhpcy5oYW5kbGVBcHBiYXJNZW51U2VsZWN0KHEpfQogICAgICAgIEBicmVhZGNydW1iLW5hdmlnYXRlPSR7cT0+dGhpcy5oYW5kbGVBcHBiYXJCcmVhZGNydW1iTmF2aWdhdGUocSl9CiAgICAgICAgQHNlYXJjaC1jbGljaz0keygpPT50aGlzLmhhbmRsZUFwcGJhclNlYXJjaENsaWNrKCl9CiAgICAgICAgQHNlYXJjaC1xdWVyeT0ke3E9PnRoaXMuaGFuZGxlQXBwYmFyU2VhcmNoUXVlcnkocSl9CiAgICAgICAgQHVzZXItbWVudS1vcGVuPSR7KCk9PnRoaXMuaGFuZGxlQXBwYmFyVXNlck1lbnVPcGVuKCl9CiAgICAgICAgQHByb2ZpbGUtbWVudS1zZWxlY3Q9JHtxPT50aGlzLmhhbmRsZUFwcGJhclByb2ZpbGVNZW51U2VsZWN0KHEpfQogICAgICAgIEBhY3Rpdml0eS10b2dnbGU9JHsoKT0+dGhpcy50b2dnbGVBY3Rpdml0eUxvZygpfQogICAgICA+PC9kZWVzLWFwcHVpLWFwcGJhcj4KICAgICAgPGRpdiBjbGFzcz0ibWFpbmdyaWQiIHN0eWxlPSJncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0byAxZnIgJHt0aGlzLmFjdGl2aXR5TG9nVmlzaWJsZT8iMjgwcHgiOiIwcHgifTsiPgogICAgICAgICR7dGhpcy5tYWlubWVudVZpc2libGU/TWAKICAgICAgICAgIDxkZWVzLWFwcHVpLW1haW5tZW51CiAgICAgICAgICAgIC5sb2dvSWNvbj0ke3RoaXMubWFpbm1lbnVMb2dvSWNvbn0KICAgICAgICAgICAgLmxvZ29UZXh0PSR7dGhpcy5tYWlubWVudUxvZ29UZXh0fQogICAgICAgICAgICAubWVudUdyb3Vwcz0ke3RoaXMubWFpbm1lbnVHcm91cHN9CiAgICAgICAgICAgIC5ib3R0b21UYWJzPSR7dGhpcy5tYWlubWVudUJvdHRvbVRhYnN9CiAgICAgICAgICAgIC50YWJzPSR7dGhpcy5tYWlubWVudVRhYnN9CiAgICAgICAgICAgIC5zZWxlY3RlZFRhYj0ke3RoaXMubWFpbm1lbnVTZWxlY3RlZFRhYn0KICAgICAgICAgICAgLmNvbGxhcHNlZD0ke3RoaXMubWFpbm1lbnVDb2xsYXBzZWR9CiAgICAgICAgICAgIEB0YWItc2VsZWN0PSR7cT0+dGhpcy5oYW5kbGVNYWlubWVudVRhYlNlbGVjdChxKX0KICAgICAgICAgICAgQGNvbGxhcHNlLWNoYW5nZT0ke3E9PnRoaXMuaGFuZGxlTWFpbm1lbnVDb2xsYXBzZUNoYW5nZShxKX0KICAgICAgICAgID48L2RlZXMtYXBwdWktbWFpbm1lbnU+CiAgICAgICAgYDoiIn0KICAgICAgICAke3RoaXMuc2Vjb25kYXJ5bWVudVZpc2libGU/TWAKICAgICAgICAgIDxkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUKICAgICAgICAgICAgLmhlYWRpbmc9JHt0aGlzLnNlY29uZGFyeW1lbnVIZWFkaW5nfQogICAgICAgICAgICAuZ3JvdXBzPSR7dGhpcy5zZWNvbmRhcnltZW51R3JvdXBzfQogICAgICAgICAgICAuc2VsZWN0ZWRJdGVtPSR7dGhpcy5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtfQogICAgICAgICAgICAuY29sbGFwc2VkPSR7dGhpcy5zZWNvbmRhcnltZW51Q29sbGFwc2VkfQogICAgICAgICAgICBAaXRlbS1zZWxlY3Q9JHtxPT50aGlzLmhhbmRsZVNlY29uZGFyeW1lbnVJdGVtU2VsZWN0KHEpfQogICAgICAgICAgICBAY29sbGFwc2UtY2hhbmdlPSR7cT0+dGhpcy5oYW5kbGVTZWNvbmRhcnltZW51Q29sbGFwc2VDaGFuZ2UocSl9CiAgICAgICAgICA+PC9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnU+CiAgICAgICAgYDoiIn0KICAgICAgICA8ZGVlcy1hcHB1aS1tYWluY29udGVudAogICAgICAgICAgLnRhYnM9JHt0aGlzLm1haW5jb250ZW50VGFic30KICAgICAgICAgIC5zZWxlY3RlZFRhYj0ke3RoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYn0KICAgICAgICAgIC5zaG93VGFicz0ke3RoaXMubWFpbmNvbnRlbnRUYWJzVmlzaWJsZX0KICAgICAgICAgIC50YWJzQXV0b0hpZGU9JHt0aGlzLmNvbnRlbnRUYWJzQXV0b0hpZGV9CiAgICAgICAgICAudGFic0F1dG9IaWRlVGhyZXNob2xkPSR7dGhpcy5jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkfQogICAgICAgICAgQHRhYi1zZWxlY3Q9JHtxPT50aGlzLmhhbmRsZUNvbnRlbnRUYWJTZWxlY3QocSl9CiAgICAgICAgICBAdGFiLWNsb3NlPSR7cT0+dGhpcy5oYW5kbGVDb250ZW50VGFiQ2xvc2UocSl9CiAgICAgICAgPgogICAgICAgICAgPGRpdiBjbGFzcz0idmlldy1jb250YWluZXIiPjwvZGl2PgogICAgICAgICAgPHNsb3QgbmFtZT0ibWFpbmNvbnRlbnQiPjwvc2xvdD4KICAgICAgICA8L2RlZXMtYXBwdWktbWFpbmNvbnRlbnQ+CiAgICAgICAgPGRlZXMtYXBwdWktYWN0aXZpdHlsb2cKICAgICAgICAgIGNsYXNzPSIke3RoaXMuYWN0aXZpdHlMb2dWaXNpYmxlPyJ2aXNpYmxlIjoiaGlkZGVuIn0iCiAgICAgICAgPjwvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZz4KICAgICAgPC9kaXY+CiAgICAgICR7dGhpcy5ib3R0b21iYXJWaXNpYmxlP01gCiAgICAgICAgPGRlZXMtYXBwdWktYm90dG9tYmFyPjwvZGVlcy1hcHB1aS1ib3R0b21iYXI+CiAgICAgIGA6IiJ9CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZCgpe3RoaXMuYXBwYmFyPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWFwcHVpLWFwcGJhciIpLHRoaXMubWFpbm1lbnU9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktbWFpbm1lbnUiKSx0aGlzLnNlY29uZGFyeW1lbnU9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudSIpLHRoaXMubWFpbmNvbnRlbnQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktbWFpbmNvbnRlbnQiKSx0aGlzLmFjdGl2aXR5bG9nRWxlbWVudD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1hY3Rpdml0eWxvZyIpLHRoaXMuYm90dG9tYmFyRWxlbWVudD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1ib3R0b21iYXIiKSx0aGlzLmFjdGl2aXR5bG9nRWxlbWVudCYmdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuZW50cmllcyQuc3Vic2NyaWJlKHE9Pnt0aGlzLmFjdGl2aXR5TG9nQ291bnQ9cS5sZW5ndGh9KSx0aGlzLnZpZXdSZWdpc3RyeS5zZXRBcHB1aVJlZih0aGlzKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5yb3V0ZXJDbGVhbnVwJiYodGhpcy5yb3V0ZXJDbGVhbnVwKCksdGhpcy5yb3V0ZXJDbGVhbnVwPW51bGwpLHRoaXMudmlld0xpZmVjeWNsZSQuY29tcGxldGUoKSx0aGlzLnZpZXdDaGFuZ2VkJC5jb21wbGV0ZSgpfXNldEFwcEJhck1lbnVzKHEpe3RoaXMuYXBwYmFyTWVudUl0ZW1zPVsuLi5xXX11cGRhdGVBcHBCYXJNZW51KHEsWSl7dGhpcy5hcHBiYXJNZW51SXRlbXM9dGhpcy5hcHBiYXJNZW51SXRlbXMubWFwKG1lPT4ibmFtZSJpbiBtZSYmbWUubmFtZT09PXE/ey4uLm1lLC4uLll9Om1lKX1zZXRCcmVhZGNydW1icyhxKXtBcnJheS5pc0FycmF5KHEpP3RoaXMuYXBwYmFyQnJlYWRjcnVtYnM9cS5qb2luKHRoaXMuYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcik6dGhpcy5hcHBiYXJCcmVhZGNydW1icz1xfXNldFVzZXIocSl7dGhpcy5hcHBiYXJVc2VyPXF9c2V0UHJvZmlsZU1lbnVJdGVtcyhxKXt0aGlzLmFwcGJhclByb2ZpbGVNZW51SXRlbXM9Wy4uLnFdfXNldFNlYXJjaFZpc2libGUocSl7dGhpcy5hcHBiYXJTaG93U2VhcmNoPXF9c2V0V2luZG93Q29udHJvbHNWaXNpYmxlKHEpe3RoaXMuYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzPXF9b25TZWFyY2gocSl7dGhpcy5zZWFyY2hDYWxsYmFjaz1xfXNldE1haW5NZW51KHEpe3EubG9nb0ljb24hPT12b2lkIDAmJih0aGlzLm1haW5tZW51TG9nb0ljb249cS5sb2dvSWNvbikscS5sb2dvVGV4dCE9PXZvaWQgMCYmKHRoaXMubWFpbm1lbnVMb2dvVGV4dD1xLmxvZ29UZXh0KSxxLmdyb3VwcyE9PXZvaWQgMCYmKHRoaXMubWFpbm1lbnVHcm91cHM9Wy4uLnEuZ3JvdXBzXSkscS5ib3R0b21UYWJzIT09dm9pZCAwJiYodGhpcy5tYWlubWVudUJvdHRvbVRhYnM9Wy4uLnEuYm90dG9tVGFic10pfXVwZGF0ZU1haW5NZW51R3JvdXAocSxZKXt0aGlzLm1haW5tZW51R3JvdXBzPXRoaXMubWFpbm1lbnVHcm91cHMubWFwKG1lPT5tZS5uYW1lPT09cT97Li4ubWUsLi4uWX06bWUpfWFkZE1haW5NZW51SXRlbShxLFkpe3RoaXMubWFpbm1lbnVHcm91cHM9dGhpcy5tYWlubWVudUdyb3Vwcy5tYXAobWU9Pm1lLm5hbWU9PT1xP3suLi5tZSxpdGVtczpbLi4ubWUuaXRlbXN8fFtdLFldfTptZSl9cmVtb3ZlTWFpbk1lbnVJdGVtKHEsWSl7dGhpcy5tYWlubWVudUdyb3Vwcz10aGlzLm1haW5tZW51R3JvdXBzLm1hcChtZT0+bWUubmFtZT09PXE/ey4uLm1lLGl0ZW1zOihtZS5pdGVtc3x8W10pLmZpbHRlcihOdD0+TnQua2V5IT09WSl9Om1lKX1zZXRNYWluTWVudVNlbGVjdGlvbihxKXtmb3IobGV0IG1lIG9mIHRoaXMubWFpbm1lbnVHcm91cHMpe2xldCBOdD1tZS5pdGVtcz8uZmluZChHMj0+RzIua2V5PT09cSk7aWYoTnQpe3RoaXMubWFpbm1lbnVTZWxlY3RlZFRhYj1OdDtyZXR1cm59fWxldCBZPXRoaXMubWFpbm1lbnVCb3R0b21UYWJzLmZpbmQobWU9Pm1lLmtleT09PXEpO1kmJih0aGlzLm1haW5tZW51U2VsZWN0ZWRUYWI9WSl9c2V0TWFpbk1lbnVDb2xsYXBzZWQocSl7dGhpcy5tYWlubWVudUNvbGxhcHNlZD1xfXNldE1haW5NZW51VmlzaWJsZShxKXt0aGlzLm1haW5tZW51VmlzaWJsZT1xfXNldFNlY29uZGFyeU1lbnVDb2xsYXBzZWQocSl7dGhpcy5zZWNvbmRhcnltZW51Q29sbGFwc2VkPXF9c2V0U2Vjb25kYXJ5TWVudVZpc2libGUocSl7dGhpcy5zZWNvbmRhcnltZW51VmlzaWJsZT1xfXNldENvbnRlbnRUYWJzVmlzaWJsZShxKXt0aGlzLm1haW5jb250ZW50VGFic1Zpc2libGU9cX1zZXRDb250ZW50VGFic0F1dG9IaWRlKHEsWT0wKXt0aGlzLmNvbnRlbnRUYWJzQXV0b0hpZGU9cSx0aGlzLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQ9WX1zZXRNYWluTWVudUJhZGdlKHEsWSl7dGhpcy5tYWlubWVudUdyb3Vwcz10aGlzLm1haW5tZW51R3JvdXBzLm1hcChtZT0+KHsuLi5tZSxpdGVtczoobWUuaXRlbXN8fFtdKS5tYXAoTnQ9Pk50LmtleT09PXE/ey4uLk50LGJhZGdlOll9Ok50KX0pKSx0aGlzLm1haW5tZW51Qm90dG9tVGFicz10aGlzLm1haW5tZW51Qm90dG9tVGFicy5tYXAobWU9Pm1lLmtleT09PXE/ey4uLm1lLGJhZGdlOll9Om1lKX1jbGVhck1haW5NZW51QmFkZ2UocSl7dGhpcy5tYWlubWVudUdyb3Vwcz10aGlzLm1haW5tZW51R3JvdXBzLm1hcChZPT4oey4uLlksaXRlbXM6KFkuaXRlbXN8fFtdKS5tYXAobWU9PntpZihtZS5rZXk9PT1xKXtsZXR7YmFkZ2U6TnQsLi4uRzJ9PW1lO3JldHVybiBHMn1yZXR1cm4gbWV9KX0pKSx0aGlzLm1haW5tZW51Qm90dG9tVGFicz10aGlzLm1haW5tZW51Qm90dG9tVGFicy5tYXAoWT0+e2lmKFkua2V5PT09cSl7bGV0e2JhZGdlOm1lLC4uLk50fT1ZO3JldHVybiBOdH1yZXR1cm4gWX0pfXNldFNlY29uZGFyeU1lbnUocSl7cS5oZWFkaW5nIT09dm9pZCAwJiYodGhpcy5zZWNvbmRhcnltZW51SGVhZGluZz1xLmhlYWRpbmcpLHRoaXMuc2Vjb25kYXJ5bWVudUdyb3Vwcz1bLi4ucS5ncm91cHNdfXVwZGF0ZVNlY29uZGFyeU1lbnVHcm91cChxLFkpe3RoaXMuc2Vjb25kYXJ5bWVudUdyb3Vwcz10aGlzLnNlY29uZGFyeW1lbnVHcm91cHMubWFwKG1lPT5tZS5uYW1lPT09cT97Li4ubWUsLi4uWX06bWUpfWFkZFNlY29uZGFyeU1lbnVJdGVtKHEsWSl7dGhpcy5zZWNvbmRhcnltZW51R3JvdXBzPXRoaXMuc2Vjb25kYXJ5bWVudUdyb3Vwcy5tYXAobWU9Pm1lLm5hbWU9PT1xP3suLi5tZSxpdGVtczpbLi4ubWUuaXRlbXMsWV19Om1lKX1zZXRTZWNvbmRhcnlNZW51U2VsZWN0aW9uKHEpe2ZvcihsZXQgWSBvZiB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMpe2xldCBtZT1ZLml0ZW1zLmZpbmQoTnQ9PiJrZXkiaW4gTnQmJk50LmtleT09PXEpO2lmKG1lJiYoISgidHlwZSJpbiBtZSl8fG1lLnR5cGU9PT0idGFiInx8bWUudHlwZT09PXZvaWQgMCkpe3RoaXMuc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbT1tZTtyZXR1cm59fX1jbGVhclNlY29uZGFyeU1lbnUoKXt0aGlzLnNlY29uZGFyeW1lbnVIZWFkaW5nPSIiLHRoaXMuc2Vjb25kYXJ5bWVudUdyb3Vwcz1bXSx0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW09dm9pZCAwfXNldENvbnRlbnRUYWJzKHEpe3RoaXMubWFpbmNvbnRlbnRUYWJzPVsuLi5xXSxxLmxlbmd0aD4wJiYhdGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiJiYodGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiPXFbMF0pfWFkZENvbnRlbnRUYWIocSl7dGhpcy5tYWluY29udGVudFRhYnM9Wy4uLnRoaXMubWFpbmNvbnRlbnRUYWJzLHFdfXJlbW92ZUNvbnRlbnRUYWIocSl7dGhpcy5tYWluY29udGVudFRhYnM9dGhpcy5tYWluY29udGVudFRhYnMuZmlsdGVyKFk9Plkua2V5IT09cSksdGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiPy5rZXk9PT1xJiYodGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiPXRoaXMubWFpbmNvbnRlbnRUYWJzWzBdKX1zZWxlY3RDb250ZW50VGFiKHEpe2xldCBZPXRoaXMubWFpbmNvbnRlbnRUYWJzLmZpbmQobWU9Pm1lLmtleT09PXEpO1kmJih0aGlzLm1haW5jb250ZW50U2VsZWN0ZWRUYWI9WSl9Z2V0U2VsZWN0ZWRDb250ZW50VGFiKCl7cmV0dXJuIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYn1nZXQgYWN0aXZpdHlMb2coKXtyZXR1cm4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/e2FkZDpxPT50aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5hZGQocSksYWRkTWFueTpxPT50aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5hZGRNYW55KHEpLGNsZWFyOigpPT50aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5jbGVhcigpLGdldEVudHJpZXM6KCk9PnRoaXMuYWN0aXZpdHlsb2dFbGVtZW50LmdldEVudHJpZXMoKSxmaWx0ZXI6cT0+dGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuZmlsdGVyKHEpLHNlYXJjaDpxPT50aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5zZWFyY2gocSl9OnthZGQ6cT0+e3RoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+dGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmFkZChxKSl9LGFkZE1hbnk6cT0+e3RoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+dGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmFkZE1hbnkocSkpfSxjbGVhcjooKT0+e3RoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+dGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmNsZWFyKCkpfSxnZXRFbnRyaWVzOigpPT50aGlzLmFjdGl2aXR5bG9nRWxlbWVudD8uZ2V0RW50cmllcygpfHxbXSxmaWx0ZXI6cT0+dGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmZpbHRlcihxKXx8W10sc2VhcmNoOnE9PnRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5zZWFyY2gocSl8fFtdfX1zZXRBY3Rpdml0eUxvZ1Zpc2libGUocSl7dGhpcy5hY3Rpdml0eUxvZ1Zpc2libGU9cX10b2dnbGVBY3Rpdml0eUxvZygpe3RoaXMuYWN0aXZpdHlMb2dWaXNpYmxlPSF0aGlzLmFjdGl2aXR5TG9nVmlzaWJsZX1nZXRBY3Rpdml0eUxvZ1Zpc2libGUoKXtyZXR1cm4gdGhpcy5hY3Rpdml0eUxvZ1Zpc2libGV9Z2V0IGJvdHRvbUJhcigpe3JldHVybiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/e2FkZFdpZGdldDpxPT50aGlzLmJvdHRvbWJhckVsZW1lbnQuYWRkV2lkZ2V0KHEpLHVwZGF0ZVdpZGdldDoocSxZKT0+dGhpcy5ib3R0b21iYXJFbGVtZW50LnVwZGF0ZVdpZGdldChxLFkpLHJlbW92ZVdpZGdldDpxPT50aGlzLmJvdHRvbWJhckVsZW1lbnQucmVtb3ZlV2lkZ2V0KHEpLGdldFdpZGdldDpxPT50aGlzLmJvdHRvbWJhckVsZW1lbnQuZ2V0V2lkZ2V0KHEpLGNsZWFyV2lkZ2V0czooKT0+dGhpcy5ib3R0b21iYXJFbGVtZW50LmNsZWFyV2lkZ2V0cygpLGFkZEFjdGlvbjpxPT50aGlzLmJvdHRvbWJhckVsZW1lbnQuYWRkQWN0aW9uKHEpLHJlbW92ZUFjdGlvbjpxPT50aGlzLmJvdHRvbWJhckVsZW1lbnQucmVtb3ZlQWN0aW9uKHEpLGNsZWFyQWN0aW9uczooKT0+dGhpcy5ib3R0b21iYXJFbGVtZW50LmNsZWFyQWN0aW9ucygpfTp7YWRkV2lkZ2V0OnE9Pnt0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9PnRoaXMuYm90dG9tYmFyRWxlbWVudD8uYWRkV2lkZ2V0KHEpKX0sdXBkYXRlV2lkZ2V0OihxLFkpPT57dGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpPT50aGlzLmJvdHRvbWJhckVsZW1lbnQ/LnVwZGF0ZVdpZGdldChxLFkpKX0scmVtb3ZlV2lkZ2V0OnE9Pnt0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9PnRoaXMuYm90dG9tYmFyRWxlbWVudD8ucmVtb3ZlV2lkZ2V0KHEpKX0sZ2V0V2lkZ2V0OnE9PnRoaXMuYm90dG9tYmFyRWxlbWVudD8uZ2V0V2lkZ2V0KHEpLGNsZWFyV2lkZ2V0czooKT0+e3RoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+dGhpcy5ib3R0b21iYXJFbGVtZW50Py5jbGVhcldpZGdldHMoKSl9LGFkZEFjdGlvbjpxPT57dGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpPT50aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmFkZEFjdGlvbihxKSl9LHJlbW92ZUFjdGlvbjpxPT57dGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpPT50aGlzLmJvdHRvbWJhckVsZW1lbnQ/LnJlbW92ZUFjdGlvbihxKSl9LGNsZWFyQWN0aW9uczooKT0+e3RoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+dGhpcy5ib3R0b21iYXJFbGVtZW50Py5jbGVhckFjdGlvbnMoKSl9fX1zZXRCb3R0b21CYXJWaXNpYmxlKHEpe3RoaXMuYm90dG9tYmFyVmlzaWJsZT1xLHE/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImJvdHRvbWJhci1oaWRkZW4iKTp0aGlzLnNldEF0dHJpYnV0ZSgiYm90dG9tYmFyLWhpZGRlbiIsIiIpfWdldEJvdHRvbUJhclZpc2libGUoKXtyZXR1cm4gdGhpcy5ib3R0b21iYXJWaXNpYmxlfWFzeW5jIG5hdmlnYXRlVG9WaWV3KHEsWSl7bGV0IG1lPXRoaXMudmlld1JlZ2lzdHJ5LmdldChxKTtpZighbWUpcmV0dXJuIGNvbnNvbGUud2FybihgQ2Fubm90IG5hdmlnYXRlIHRvIHVua25vd24gdmlldzogJHtxfWApLCExO2xldCBOdD1hd2FpdCB0aGlzLnZpZXdSZWdpc3RyeS5jYW5MZWF2ZUN1cnJlbnRWaWV3KCk7aWYoTnQhPT0hMClpZih0eXBlb2YgTnQ9PSJzdHJpbmciKXtpZighd2luZG93LmNvbmZpcm0oTnQpKXJldHVybiExfWVsc2UgcmV0dXJuITE7dGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHt0eXBlOiJsb2FkaW5nIix2aWV3SWQ6cX0pO3RyeXthd2FpdCB0aGlzLmxvYWRWaWV3KG1lLFkpO2xldCBTNT1gIyR7bWUucm91dGV8fHF9YDtyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhhc2ghPT1TNSYmd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt2aWV3SWQ6cX0sIiIsUzUpLCEwfWNhdGNoKEcyKXtyZXR1cm4gdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHt0eXBlOiJsb2FkRXJyb3IiLHZpZXdJZDpxLGVycm9yOkcyfSksITF9fWdldEN1cnJlbnRWaWV3KCl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXd9Z2V0Vmlld1JlZ2lzdHJ5KCl7cmV0dXJuIHRoaXMudmlld1JlZ2lzdHJ5fWNvbmZpZ3VyZShxKXtxLnZpZXdzJiYodGhpcy52aWV3UmVnaXN0cnkuY2xlYXIoKSx0aGlzLnZpZXdSZWdpc3RyeS5yZWdpc3RlckFsbChxLnZpZXdzKSkscS5icmFuZGluZyYmKHRoaXMubWFpbm1lbnVMb2dvSWNvbj1xLmJyYW5kaW5nLmxvZ29JY29ufHwiIix0aGlzLm1haW5tZW51TG9nb1RleHQ9cS5icmFuZGluZy5sb2dvVGV4dHx8IiIpLHEuYXBwQmFyJiYodGhpcy5hcHBiYXJNZW51SXRlbXM9cS5hcHBCYXIubWVudUl0ZW1zfHxbXSx0aGlzLmFwcGJhckJyZWFkY3J1bWJzPXEuYXBwQmFyLmJyZWFkY3J1bWJzfHwiIix0aGlzLmFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3I9cS5hcHBCYXIuYnJlYWRjcnVtYlNlcGFyYXRvcnx8IiA+ICIsdGhpcy5hcHBiYXJTaG93V2luZG93Q29udHJvbHM9cS5hcHBCYXIuc2hvd1dpbmRvd0NvbnRyb2xzPz8hMCx0aGlzLmFwcGJhclNob3dTZWFyY2g9cS5hcHBCYXIuc2hvd1NlYXJjaD8/ITEsdGhpcy5hcHBiYXJVc2VyPXEuYXBwQmFyLnVzZXIsdGhpcy5hcHBiYXJQcm9maWxlTWVudUl0ZW1zPXEuYXBwQmFyLnByb2ZpbGVNZW51SXRlbXN8fFtdKSxxLm1haW5NZW51JiYocS5tYWluTWVudS5zZWN0aW9ucz90aGlzLm1haW5tZW51R3JvdXBzPXRoaXMuYnVpbGRNYWluTWVudUZyb21TZWN0aW9ucyhxKTpxLm1haW5NZW51Lmdyb3VwcyYmKHRoaXMubWFpbm1lbnVHcm91cHM9cS5tYWluTWVudS5ncm91cHMpLHEubWFpbk1lbnUubG9nb0ljb24mJih0aGlzLm1haW5tZW51TG9nb0ljb249cS5tYWluTWVudS5sb2dvSWNvbikscS5tYWluTWVudS5sb2dvVGV4dCYmKHRoaXMubWFpbm1lbnVMb2dvVGV4dD1xLm1haW5NZW51LmxvZ29UZXh0KSxxLm1haW5NZW51LmJvdHRvbVRhYnM/dGhpcy5tYWlubWVudUJvdHRvbVRhYnM9cS5tYWluTWVudS5ib3R0b21UYWJzOnEubWFpbk1lbnUuYm90dG9tSXRlbXMmJih0aGlzLm1haW5tZW51Qm90dG9tVGFicz10aGlzLmJ1aWxkQm90dG9tVGFic0Zyb21JdGVtcyhxLm1haW5NZW51LmJvdHRvbUl0ZW1zKSkpLHEuYm90dG9tQmFyJiYodGhpcy5zZXRCb3R0b21CYXJWaXNpYmxlKHEuYm90dG9tQmFyLnZpc2libGU/PyEwKSxxLmJvdHRvbUJhci53aWRnZXRzJiZxLmJvdHRvbUJhci53aWRnZXRzLmZvckVhY2goWT0+e3RoaXMuYm90dG9tQmFyLmFkZFdpZGdldChZKX0pLHEuYm90dG9tQmFyLmFjdGlvbnMmJnEuYm90dG9tQmFyLmFjdGlvbnMuZm9yRWFjaChZPT57dGhpcy5ib3R0b21CYXIuYWRkQWN0aW9uKFkpfSkpLHRoaXMuc2V0dXBSb3V0ZXJJbnRlZ3JhdGlvbihxKSxxLm9uVmlld0NoYW5nZSYmdGhpcy52aWV3Q2hhbmdlZCQuc3Vic2NyaWJlKFk9PntxLm9uVmlld0NoYW5nZShZLnZpZXdJZCxZLnZpZXcpfSkscS5vblNlYXJjaCYmKHRoaXMuc2VhcmNoQ2FsbGJhY2s9cS5vblNlYXJjaCkscS5kZWZhdWx0VmlldyYmdGhpcy5uYXZpZ2F0ZVRvVmlldyhxLmRlZmF1bHRWaWV3KX1zZXR1cFJvdXRlckludGVncmF0aW9uKHEpe2xldCBZPSgpPT57bGV0IE50PXdpbmRvdy5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpO2lmKCFOdClyZXR1cm47bGV0IEcyPXRoaXMudmlld1JlZ2lzdHJ5LmZpbmRCeVJvdXRlKE50KTtHMiYmdGhpcy5uYXZpZ2F0ZVRvVmlldyhHMi52aWV3LmlkLEcyLnBhcmFtcyl9O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixZKSx0aGlzLnJvdXRlckNsZWFudXA9KCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsWSl9O2xldCBtZT13aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTtpZihtZSl7bGV0IE50PXRoaXMudmlld1JlZ2lzdHJ5LmZpbmRCeVJvdXRlKG1lKTtOdCYmc2V0VGltZW91dCgoKT0+dGhpcy5uYXZpZ2F0ZVRvVmlldyhOdC52aWV3LmlkLE50LnBhcmFtcyksMCl9fWJ1aWxkTWFpbk1lbnVGcm9tU2VjdGlvbnMocSl7cmV0dXJuIHEubWFpbk1lbnU/LnNlY3Rpb25zP3EubWFpbk1lbnUuc2VjdGlvbnMubWFwKFk9Pih7bmFtZTpZLm5hbWUsaXRlbXM6WS52aWV3cy5tYXAobWU9PntsZXQgTnQ9dGhpcy52aWV3UmVnaXN0cnkuZ2V0KG1lKTtyZXR1cm4gTnQ/e2tleTpOdC5pZCxpY29uTmFtZTpOdC5pY29uTmFtZSxhY3Rpb246KCk9PnRoaXMubmF2aWdhdGVUb1ZpZXcobWUpLGJhZGdlOk50LmJhZGdlfTooY29uc29sZS53YXJuKGBWaWV3ICIke21lfSIgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCksbnVsbCl9KS5maWx0ZXIoQm9vbGVhbil9KSk6W119YnVpbGRCb3R0b21UYWJzRnJvbUl0ZW1zKHEpe3JldHVybiBxLm1hcChZPT57bGV0IG1lPXRoaXMudmlld1JlZ2lzdHJ5LmdldChZKTtyZXR1cm4gbWU/e2tleTptZS5pZCxpY29uTmFtZTptZS5pY29uTmFtZSxhY3Rpb246KCk9PnRoaXMubmF2aWdhdGVUb1ZpZXcoWSl9Oihjb25zb2xlLndhcm4oYFZpZXcgIiR7WX0iIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApLG51bGwpfSkuZmlsdGVyKEJvb2xlYW4pfWFzeW5jIGxvYWRWaWV3KHEsWSl7bGV0IG1lPXRoaXMuY3VycmVudFZpZXc7dGhpcy5jdXJyZW50Vmlldz1xO2xldCBOdD10aGlzLm1haW5jb250ZW50Py5xdWVyeVNlbGVjdG9yKCIudmlldy1jb250YWluZXIiKXx8dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudmlldy1jb250YWluZXIiKTtpZihOdCl7bGV0IFM1PWF3YWl0IHRoaXMudmlld1JlZ2lzdHJ5LmFjdGl2YXRlVmlldyhxLmlkLE50LFkpO1M1JiZ0aGlzLnZpZXdMaWZlY3ljbGUkLm5leHQoe3R5cGU6ImFjdGl2YXRlZCIsdmlld0lkOnEuaWQsZWxlbWVudDpTNSxwYXJhbXM6WX0pfXEuc2Vjb25kYXJ5TWVudSYmKHRoaXMuc2Vjb25kYXJ5bWVudUdyb3Vwcz1xLnNlY29uZGFyeU1lbnUsdGhpcy5zZWNvbmRhcnltZW51SGVhZGluZz1xLm5hbWUpLHEuY29udGVudFRhYnMmJih0aGlzLm1haW5jb250ZW50VGFicz1xLmNvbnRlbnRUYWJzKSx0aGlzLnNldE1haW5NZW51U2VsZWN0aW9uKHEuaWQpO2xldCBHMj17dmlld0lkOnEuaWQsdmlldzpxLHByZXZpb3VzVmlldzptZSxwYXJhbXM6WX07dGhpcy52aWV3Q2hhbmdlZCQubmV4dChHMiksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidmlldy1jaGFuZ2UiLHtkZXRhaWw6RzIsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVBcHBiYXJNZW51U2VsZWN0KHEpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1tZW51LXNlbGVjdCIse2RldGFpbDpxLmRldGFpbCxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZUFwcGJhckJyZWFkY3J1bWJOYXZpZ2F0ZShxKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItYnJlYWRjcnVtYi1uYXZpZ2F0ZSIse2RldGFpbDpxLmRldGFpbCxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZUFwcGJhclNlYXJjaENsaWNrKCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYXBwYmFyLXNlYXJjaC1jbGljayIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlQXBwYmFyU2VhcmNoUXVlcnkocSl7dGhpcy5zZWFyY2hDYWxsYmFjayYmdGhpcy5zZWFyY2hDYWxsYmFjayhxLmRldGFpbC5xdWVyeSksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoLXF1ZXJ5Iix7ZGV0YWlsOnEuZGV0YWlsLGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlQXBwYmFyVXNlck1lbnVPcGVuKCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYXBwYmFyLXVzZXItbWVudS1vcGVuIix7YnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVBcHBiYXJQcm9maWxlTWVudVNlbGVjdChxKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItcHJvZmlsZS1tZW51LXNlbGVjdCIse2RldGFpbDpxLmRldGFpbCxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZU1haW5tZW51VGFiU2VsZWN0KHEpe3RoaXMubWFpbm1lbnVTZWxlY3RlZFRhYj1xLmRldGFpbC50YWIsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibWFpbm1lbnUtdGFiLXNlbGVjdCIse2RldGFpbDpxLmRldGFpbCxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZVNlY29uZGFyeW1lbnVJdGVtU2VsZWN0KHEpe3RoaXMuc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbT1xLmRldGFpbC5pdGVtLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlY29uZGFyeW1lbnUtaXRlbS1zZWxlY3QiLHtkZXRhaWw6cS5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVNYWlubWVudUNvbGxhcHNlQ2hhbmdlKHEpe3RoaXMubWFpbm1lbnVDb2xsYXBzZWQ9cS5kZXRhaWwuY29sbGFwc2VkLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm1haW5tZW51LWNvbGxhcHNlLWNoYW5nZSIse2RldGFpbDpxLmRldGFpbCxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZVNlY29uZGFyeW1lbnVDb2xsYXBzZUNoYW5nZShxKXt0aGlzLnNlY29uZGFyeW1lbnVDb2xsYXBzZWQ9cS5kZXRhaWwuY29sbGFwc2VkLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlY29uZGFyeW1lbnUtY29sbGFwc2UtY2hhbmdlIix7ZGV0YWlsOnEuZGV0YWlsLGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlQ29udGVudFRhYlNlbGVjdChxKXt0aGlzLm1haW5jb250ZW50U2VsZWN0ZWRUYWI9cS5kZXRhaWwudGFiLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbnRlbnQtdGFiLXNlbGVjdCIse2RldGFpbDpxLmRldGFpbCxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZUNvbnRlbnRUYWJDbG9zZShxKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb250ZW50LXRhYi1jbG9zZSIse2RldGFpbDpxLmRldGFpbCxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfXN0YXRpY3tGZShyLGEpfX07cmV0dXJuIENOZT1yfSkoKTtmZSgpO3ZhciBGSXQ9KCk9Pk1gCiAgPHN0eWxlPgogICAgJHt0ZWAKICAgICAgLmRlbW8tYmFja2dyb3VuZCB7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsImhzbCgwIDAlIDUlKSIpfTsKICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgbWFyZ2luOiAzMnB4IDAgMTZweCAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWN0aW9uLXRpdGxlOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtM2NvbCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnIgMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk2OHB4KSB7CiAgICAgICAgLmdyaWQtM2NvbCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1iYWNrZ3JvdW5kIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5EZWZhdWx0IFBhbmVsczwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUGFuZWwgQ29tcG9uZW50In0gLnN1YnRpdGxlPSR7IlRoZSBkZWZhdWx0IHBhbmVsIHZhcmlhbnQgd2l0aCBzaGFkY24taW5zcGlyZWQgc3R5bGluZyJ9PgogICAgICAgIDxwPlRoZSBwYW5lbCBjb21wb25lbnQgYXV0b21hdGljYWxseSBmb2xsb3dzIHRoZSB0aGVtZSBhbmQgcHJvdmlkZXMgY29uc2lzdGVudCBzdHlsaW5nIGZvciBncm91cGVkIGNvbnRlbnQuPC9wPgogICAgICAgIDxwPkl0J3MgcGVyZmVjdCBmb3IgY3JlYXRpbmcgc2VjdGlvbnMgaW4geW91ciBhcHBsaWNhdGlvbiB3aXRoIHByb3BlciBzcGFjaW5nIGFuZCBib3JkZXJzLjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGZWF0dXJlIE92ZXJ2aWV3In0gLnN1YnRpdGxlPSR7IktleSBjYXBhYmlsaXRpZXMifT4KICAgICAgICAgIDxwPkdyaWQgbGF5b3V0cyB3b3JrIGdyZWF0IHdpdGggcGFuZWxzIGZvciBjcmVhdGluZyBkYXNoYm9hcmRzIGFuZCBmZWF0dXJlIHNlY3Rpb25zLjwvcD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5MZWFybiBNb3JlPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlF1aWNrIEFjdGlvbnMifSAuc3VidGl0bGU9JHsiQ29tbW9uIHRhc2tzIn0+CiAgICAgICAgICA8cD5FYWNoIHBhbmVsIG1haW50YWlucyBjb25zaXN0ZW50IHNwYWNpbmcgYW5kIHN0eWxpbmcgYWNyb3NzIHlvdXIgYXBwbGljYXRpb24uPC9wPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkdldCBTdGFydGVkPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYW5lbCBWYXJpYW50czwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRGVmYXVsdCBWYXJpYW50In0gLnZhcmlhbnQ9JHsiZGVmYXVsdCJ9PgogICAgICAgIDxwPlRoZSBkZWZhdWx0IHZhcmlhbnQgaGFzIGEgd2hpdGUgYmFja2dyb3VuZCwgc3VidGxlIGJvcmRlciwgYW5kIG1pbmltYWwgc2hhZG93LiBJdCdzIHRoZSBzdGFuZGFyZCBjaG9pY2UgZm9yIG1vc3QgY29udGVudC48L3A+CiAgICAgICAgPHA+VXNlIDxjb2RlPnZhcmlhbnQ9ImRlZmF1bHQiPC9jb2RlPiBvciBvbWl0IHRoZSB2YXJpYW50IHByb3BlcnR5LjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ik91dGxpbmUgVmFyaWFudCJ9IC5zdWJ0aXRsZT0keyJUcmFuc3BhcmVudCBiYWNrZ3JvdW5kIHdpdGggYm9yZGVyIn0gLnZhcmlhbnQ9JHsib3V0bGluZSJ9PgogICAgICAgIDxwPlRoZSBvdXRsaW5lIHZhcmlhbnQgcmVtb3ZlcyB0aGUgYmFja2dyb3VuZCBjb2xvciBhbmQgc2hhZG93LCBrZWVwaW5nIG9ubHkgdGhlIGJvcmRlci48L3A+CiAgICAgICAgPHA+VXNlIDxjb2RlPnZhcmlhbnQ9Im91dGxpbmUiPC9jb2RlPiBmb3IgYSBsaWdodGVyIHZpc3VhbCB3ZWlnaHQuPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiR2hvc3QgVmFyaWFudCJ9IC5zdWJ0aXRsZT0keyJNaW5pbWFsIHN0eWxpbmcgZm9yIHN1YnRsZSBzZWN0aW9ucyJ9IC52YXJpYW50PSR7Imdob3N0In0+CiAgICAgICAgPHA+VGhlIGdob3N0IHZhcmlhbnQgaGFzIG5vIGJvcmRlciBvciBiYWNrZ3JvdW5kIGJ5IGRlZmF1bHQsIG9ubHkgc2hvd2luZyBhIHN1YnRsZSBiYWNrZ3JvdW5kIG9uIGhvdmVyLjwvcD4KICAgICAgICA8cD5Vc2UgPGNvZGU+dmFyaWFudD0iZ2hvc3QiPC9jb2RlPiBmb3IgdGhlIG1vc3QgbWluaW1hbCBhcHBlYXJhbmNlLjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYW5lbCBTaXplczwvaDI+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJncmlkLTNjb2wiPgogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTbWFsbCBQYW5lbCJ9IC5zaXplPSR7InNtIn0+CiAgICAgICAgICA8cD5Db21wYWN0IHBhZGRpbmcgZm9yIGRlbnNlIGxheW91dHMuPC9wPgogICAgICAgICAgPHA+VXNlIDxjb2RlPnNpemU9InNtIjwvY29kZT48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJNZWRpdW0gUGFuZWwifSAuc2l6ZT0keyJtZCJ9PgogICAgICAgICAgPHA+RGVmYXVsdCBzaXplIHdpdGggYmFsYW5jZWQgc3BhY2luZy48L3A+CiAgICAgICAgICA8cD5Vc2UgPGNvZGU+c2l6ZT0ibWQiPC9jb2RlPiBvciBvbWl0LjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkxhcmdlIFBhbmVsIn0gLnNpemU9JHsibGcifT4KICAgICAgICAgIDxwPkdlbmVyb3VzIHBhZGRpbmcgZm9yIHByb21pbmVudCBzZWN0aW9ucy48L3A+CiAgICAgICAgICA8cD5Vc2UgPGNvZGU+c2l6ZT0ibGciPC9jb2RlPjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Db21wbGV4IEV4YW1wbGVzPC9oMj4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiUGFuZWxzIHdvcmsgZ3JlYXQgZm9yIG9yZ2FuaXppbmcgZm9ybSBzZWN0aW9ucyJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQcm9qZWN0IE5hbWUifSAucmVxdWlyZWQ9JHshMH0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJEZXNjcmlwdGlvbiJ9IC5pbnB1dFR5cGU9JHsidGV4dGFyZWEifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duIAogICAgICAgICAgICAubGFiZWw9JHsiQ2F0ZWdvcnkifSAKICAgICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiV2ViIERldmVsb3BtZW50IixrZXk6IndlYiJ9LHtvcHRpb246Ik1vYmlsZSBBcHAiLGtleToibW9iaWxlIn0se29wdGlvbjoiRGVza3RvcCBTb2Z0d2FyZSIsa2V5OiJkZXNrdG9wIn1dfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNyZWF0ZSBQcm9qZWN0PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTmVzdGVkIFBhbmVscyJ9IC5zdWJ0aXRsZT0keyJQYW5lbHMgY2FuIGJlIG5lc3RlZCBmb3IgaGllcmFyY2hpY2FsIG9yZ2FuaXphdGlvbiJ9PgogICAgICAgIDxwPllvdSBjYW4gbmVzdCBwYW5lbHMgdG8gY3JlYXRlIG1vcmUgY29tcGxleCBsYXlvdXRzOjwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTmVzdGVkIFBhbmVsIDEifSAudmFyaWFudD0keyJvdXRsaW5lIn0gLnNpemU9JHsic20ifT4KICAgICAgICAgIDxwPlRoaXMgaXMgYSBuZXN0ZWQgcGFuZWwgd2l0aCBvdXRsaW5lIHZhcmlhbnQgYW5kIHNtYWxsIHNpemUuPC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTmVzdGVkIFBhbmVsIDIifSAudmFyaWFudD0keyJnaG9zdCJ9IC5zaXplPSR7InNtIn0+CiAgICAgICAgICA8cD5UaGlzIGlzIGFub3RoZXIgbmVzdGVkIHBhbmVsIHdpdGggZ2hvc3QgdmFyaWFudC48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8aDIgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlVudGl0bGVkIFBhbmVsczwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbD4KICAgICAgICA8cD5QYW5lbHMgd29yayBncmVhdCBldmVuIHdpdGhvdXQgYSB0aXRsZSBmb3Igc2ltcGxlIGNvbnRlbnQgZ3JvdXBpbmcuPC9wPgogICAgICAgIDxwPlRoZXkgcHJvdmlkZSB2aXN1YWwgc2VwYXJhdGlvbiBhbmQgY29uc2lzdGVudCBwYWRkaW5nIHRocm91Z2hvdXQgeW91ciBpbnRlcmZhY2UuPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+CiAgICAgICAgPGRlZXMtcGFuZWwgLnZhcmlhbnQ9JHsib3V0bGluZSJ9PgogICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW4tdG9wOiAwOyI+Q3VzdG9tIENvbnRlbnQ8L2g0PgogICAgICAgICAgPHA+WW91IGNhbiBhZGQgeW91ciBvd24gaGVhZGluZ3MgYW5kIHN0cnVjdHVyZSB3aXRoaW4gdW50aXRsZWQgcGFuZWxzLjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnZhcmlhbnQ9JHsiZ2hvc3QifT4KICAgICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luLXRvcDogMDsiPk1pbmltYWwgU3R5bGU8L2g0PgogICAgICAgICAgPHA+R2hvc3QgcGFuZWxzIHdpdGhvdXQgdGl0bGVzIGNyZWF0ZSB2ZXJ5IHN1YnRsZSBjb250ZW50IHNlY3Rpb25zLjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7ZmUoKTt2YXIgRG8xPSJHZWlzdCBTYW5zIixFbzE9IkludGVsIE9uZSBNb25vIixqRGU9YCcke0RvMX0nLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCAnT3h5Z2VuJywgJ1VidW50dScsICdDYW50YXJlbGwnLCAnRmlyYSBTYW5zJywgJ0Ryb2lkIFNhbnMnLCAnSGVsdmV0aWNhIE5ldWUnLCBzYW5zLXNlcmlmYCxObzE9YCcke0VvMX0nLCAnU0YgTW9ubycsICdNb25hY28nLCAnSW5jb25zb2xhdGEnLCAnRmlyYSBDb2RlJywgJ0ZpcmEgTW9ubycsICdEcm9pZCBTYW5zIE1vbm8nLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2VgLEp0PUJ0KGpEZSksamw9QnQoTm8xKSxQbzE9IkNhbCBTYW5zIixJbzE9YCcke1BvMX0nLCAke2pEZX1gLE9JdD1CdChJbzEpLEZvMT0iUm9ib3RvIFNsYWIiLE9vMT1gJyR7Rm8xfScsIEdlb3JnaWEsIHNlcmlmYCxmTmE9QnQoT28xKSx1TmE9QnQoYAogIGZvbnQtZmFtaWx5OiAke2pEZX07CiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjdjExJywgJ3RudW0nLCAnY3YwNScgMTsKYCk7ZmUoKTtCZSgpO3ZhciBuNT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LG9yPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxCbzE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLXBhbmVsIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W107dmFyIEU9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBDPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6U3RyaW5nfSldLGY9W0Qoe3R5cGU6U3RyaW5nfSldLGQ9W0Qoe3R5cGU6U3RyaW5nfSldLGI9W0Qoe3R5cGU6U3RyaW5nfSldLHY9W0Qoe2F0dHJpYnV0ZTohMX0pXSxuNSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRpdGxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4idGl0bGUiaW4geixnZXQ6ej0+ei50aXRsZSxzZXQ6KHosUCk9Pnt6LnRpdGxlPVB9fSxtZXRhZGF0YTpDfSxzLGwpLG41KHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3VidGl0bGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJzdWJ0aXRsZSJpbiB6LGdldDp6PT56LnN1YnRpdGxlLHNldDooeixQKT0+e3ouc3VidGl0bGU9UH19LG1ldGFkYXRhOkN9LGMsdSksbjUodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YXJpYW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4idmFyaWFudCJpbiB6LGdldDp6PT56LnZhcmlhbnQsc2V0Oih6LFApPT57ei52YXJpYW50PVB9fSxtZXRhZGF0YTpDfSxoLGcpLG41KHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2l6ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InNpemUiaW4geixnZXQ6ej0+ei5zaXplLHNldDooeixQKT0+e3ouc2l6ZT1QfX0sbWV0YWRhdGE6Q30seCxtKSxuNSh0aGlzLG51bGwsdix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJ1bkFmdGVyUmVuZGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4icnVuQWZ0ZXJSZW5kZXIiaW4geixnZXQ6ej0+ei5ydW5BZnRlclJlbmRlcixzZXQ6KHosUCk9Pnt6LnJ1bkFmdGVyUmVuZGVyPVB9fSxtZXRhZGF0YTpDfSx5LHcpLG41KG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOkN9LG51bGwsYSksRT1yPWUudmFsdWUsQyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpDfSl9c3RhdGljIGRlbW89Rkl0OyNlPW9yKHRoaXMscywiIik7Z2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHRpdGxlKEMpe3RoaXMuI2U9Q30jdD0ob3IodGhpcyxsKSxvcih0aGlzLGMsIiIpKTtnZXQgc3VidGl0bGUoKXtyZXR1cm4gdGhpcy4jdH1zZXQgc3VidGl0bGUoQyl7dGhpcy4jdD1DfSNhPShvcih0aGlzLHUpLG9yKHRoaXMsaCwiZGVmYXVsdCIpKTtnZXQgdmFyaWFudCgpe3JldHVybiB0aGlzLiNhfXNldCB2YXJpYW50KEMpe3RoaXMuI2E9Q30jcj0ob3IodGhpcyxnKSxvcih0aGlzLHgsIm1kIikpO2dldCBzaXplKCl7cmV0dXJuIHRoaXMuI3J9c2V0IHNpemUoQyl7dGhpcy4jcj1DfSNpPShvcih0aGlzLG0pLG9yKHRoaXMseSx2b2lkIDApKTtnZXQgcnVuQWZ0ZXJSZW5kZXIoKXtyZXR1cm4gdGhpcy4jaX1zZXQgcnVuQWZ0ZXJSZW5kZXIoQyl7dGhpcy4jaT1DfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAke0p0fTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IGRlZmF1bHQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9ImRlZmF1bHQiXSkgewogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIGhzbCgwIDAlIDAlIC8gMC4wNSk7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IG91dGxpbmUgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9Im91dGxpbmUiXSkgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IGdob3N0ICovCiAgICAgIDpob3N0KFt2YXJpYW50PSJnaG9zdCJdKSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBib3gtc2hhZG93OiBub25lOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgIH0KCiAgICAgIC8qIFNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXplPSJsZyJdKSB7CiAgICAgICAgcGFkZGluZzogMzJweDsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmhlYWRlcjplbXB0eSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLnRpdGxlIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBUaXRsZSBzaXplIHZhcmlhdGlvbnMgKi8KICAgICAgOmhvc3QoW3NpemU9InNtIl0pIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgLnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5zdWJ0aXRsZSB7CiAgICAgICAgbWFyZ2luOiA0cHggMCAwIDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMDZlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBTdWJ0aXRsZSBzaXplIHZhcmlhdGlvbnMgKi8KICAgICAgOmhvc3QoW3NpemU9InNtIl0pIC5zdWJ0aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgLnN1YnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNnB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsImhzbCgyMTcuOSAxMC42JSA4NC45JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgIH0KCiAgICAgIC8qIENvbnRlbnQgc2l6ZSB2YXJpYXRpb25zICovCiAgICAgIDpob3N0KFtzaXplPSJzbSJdKSAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgLmNvbnRlbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgfQoKICAgICAgLyogUmVtb3ZlIG1hcmdpbnMgZnJvbSBmaXJzdCBhbmQgbGFzdCBjaGlsZHJlbiAqLwogICAgICAuY29udGVudCA6OnNsb3R0ZWQoKjpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IDo6c2xvdHRlZCgqOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBJbnRlcmFjdGl2ZSBzdGF0ZXMgZm9yIGRlZmF1bHQgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZGVmYXVsdCJdOmhvdmVyKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAycHggNHB4IC0ycHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICB9CgogICAgICAvKiBJbnRlcmFjdGl2ZSBzdGF0ZXMgZm9yIG91dGxpbmUgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0ib3V0bGluZSJdOmhvdmVyKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwiaHNsKDAgMCUgNy44JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEludGVyYWN0aXZlIHN0YXRlcyBmb3IgZ2hvc3QgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZ2hvc3QiXTpob3ZlcikgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEZvY3VzIHN0YXRlcyAqLwogICAgICA6aG9zdCg6Zm9jdXMtd2l0aGluKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtwLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAvKiBOZXN0ZWQgcGFuZWxzIHNwYWNpbmcgKi8KICAgICAgOjpzbG90dGVkKGRlZXMtcGFuZWwpIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoZGVlcy1wYW5lbDpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICR7dGhpcy50aXRsZT9NYDxoMyBjbGFzcz0idGl0bGUiPiR7dGhpcy50aXRsZX08L2gzPmA6IiJ9CiAgICAgICAgJHt0aGlzLnN1YnRpdGxlP01gPHAgY2xhc3M9InN1YnRpdGxlIj4ke3RoaXMuc3VidGl0bGV9PC9wPmA6IiJ9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXt0aGlzLnJ1bkFmdGVyUmVuZGVyJiZhd2FpdCB0aGlzLnJ1bkFmdGVyUmVuZGVyKHRoaXMpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxvcih0aGlzLHcpfXN0YXRpY3tvcihyLGEpfX07cmV0dXJuIEU9cn0pKCk7ZmUoKTtTdCgpO3ZhciBXbD1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LGFhPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxYZT0oKCk9PntsZXQgdD1wZSxlLGE9W10scj1bXSxpLG89W10scz1bXSxsLGY9W10sYz1bXSx1LGQ9W10saD1bXSxnLGI9W10seD1bXSxtLHY9W10seT1bXSx3LEU9W10sQz1bXTtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e3N0YXRpY3tsZXQgUD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZSh0W1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtlPVtEKHt0eXBlOlN0cmluZ30pXSxpPVtEKHt0eXBlOlN0cmluZ30pXSxsPVtEKHt0eXBlOlN0cmluZ30pXSx1PVtEKHt0eXBlOlN0cmluZ30pXSxnPVtEKHt0eXBlOkJvb2xlYW59KV0sbT1bRCh7dHlwZTpCb29sZWFufSldLHc9W0Qoe3R5cGU6U3RyaW5nfSldLFdsKHRoaXMsbnVsbCxlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGF5b3V0TW9kZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Xz0+ImxheW91dE1vZGUiaW4gXyxnZXQ6Xz0+Xy5sYXlvdXRNb2RlLHNldDooXywkKT0+e18ubGF5b3V0TW9kZT0kfX0sbWV0YWRhdGE6UH0sYSxyKSxXbCh0aGlzLG51bGwsaSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImxhYmVsUG9zaXRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOl89PiJsYWJlbFBvc2l0aW9uImluIF8sZ2V0Ol89Pl8ubGFiZWxQb3NpdGlvbixzZXQ6KF8sJCk9PntfLmxhYmVsUG9zaXRpb249JH19LG1ldGFkYXRhOlB9LG8scyksV2wodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJrZXkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOl89PiJrZXkiaW4gXyxnZXQ6Xz0+Xy5rZXksc2V0OihfLCQpPT57Xy5rZXk9JH19LG1ldGFkYXRhOlB9LGYsYyksV2wodGhpcyxudWxsLHUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsYWJlbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Xz0+ImxhYmVsImluIF8sZ2V0Ol89Pl8ubGFiZWwsc2V0OihfLCQpPT57Xy5sYWJlbD0kfX0sbWV0YWRhdGE6UH0sZCxoKSxXbCh0aGlzLG51bGwsZyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJlcXVpcmVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpfPT4icmVxdWlyZWQiaW4gXyxnZXQ6Xz0+Xy5yZXF1aXJlZCxzZXQ6KF8sJCk9PntfLnJlcXVpcmVkPSR9fSxtZXRhZGF0YTpQfSxiLHgpLFdsKHRoaXMsbnVsbCxtLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZGlzYWJsZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOl89PiJkaXNhYmxlZCJpbiBfLGdldDpfPT5fLmRpc2FibGVkLHNldDooXywkKT0+e18uZGlzYWJsZWQ9JH19LG1ldGFkYXRhOlB9LHYseSksV2wodGhpcyxudWxsLHcse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkZXNjcmlwdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Xz0+ImRlc2NyaXB0aW9uImluIF8sZ2V0Ol89Pl8uZGVzY3JpcHRpb24sc2V0OihfLCQpPT57Xy5kZXNjcmlwdGlvbj0kfX0sbWV0YWRhdGE6UH0sRSxDKSxQJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlB9KX0jZT1hYSh0aGlzLGEsImF1dG8iKTtnZXQgbGF5b3V0TW9kZSgpe3JldHVybiB0aGlzLiNlfXNldCBsYXlvdXRNb2RlKFApe3RoaXMuI2U9UH0jdD0oYWEodGhpcyxyKSxhYSh0aGlzLG8sInRvcCIpKTtnZXQgbGFiZWxQb3NpdGlvbigpe3JldHVybiB0aGlzLiN0fXNldCBsYWJlbFBvc2l0aW9uKFApe3RoaXMuI3Q9UH0jYT0oYWEodGhpcyxzKSxhYSh0aGlzLGYsdm9pZCAwKSk7Z2V0IGtleSgpe3JldHVybiB0aGlzLiNhfXNldCBrZXkoUCl7dGhpcy4jYT1QfSNyPShhYSh0aGlzLGMpLGFhKHRoaXMsZCx2b2lkIDApKTtnZXQgbGFiZWwoKXtyZXR1cm4gdGhpcy4jcn1zZXQgbGFiZWwoUCl7dGhpcy4jcj1QfSNpPShhYSh0aGlzLGgpLGFhKHRoaXMsYiwhMSkpO2dldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLiNpfXNldCByZXF1aXJlZChQKXt0aGlzLiNpPVB9I289KGFhKHRoaXMseCksYWEodGhpcyx2LCExKSk7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuI299c2V0IGRpc2FibGVkKFApe3RoaXMuI289UH0jcz0oYWEodGhpcyx5KSxhYSh0aGlzLEUsdm9pZCAwKSk7Z2V0IGRlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGRlc2NyaXB0aW9uKFApe3RoaXMuI3M9UH1zdGF0aWMgZ2V0IGJhc2VTdHlsZXMoKXtyZXR1cm5bdGVgCiAgICAgICAgLyogQ1NTIFZhcmlhYmxlcyBmb3IgY29uc2lzdGVudCBzcGFjaW5nICovCiAgICAgICAgOmhvc3QgewogICAgICAgICAgLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdDogOHB4OwogICAgICAgICAgLS1kZWVzLWlucHV0LXZlcnRpY2FsLWdhcDogY2FsYyh2YXIoLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdCkgKiAyKTsgLyogMTZweCAqLwogICAgICAgICAgLS1kZWVzLWlucHV0LWhvcml6b250YWwtZ2FwOiBjYWxjKHZhcigtLWRlZXMtaW5wdXQtc3BhY2luZy11bml0KSAqIDIpOyAvKiAxNnB4ICovCiAgICAgICAgICAtLWRlZXMtaW5wdXQtbGFiZWwtZ2FwOiB2YXIoLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdCk7IC8qIDhweCAqLwogICAgICAgIH0KCiAgICAgICAgLyogRGVmYXVsdCB2ZXJ0aWNhbCBzdGFja2luZyBtb2RlIChmb3IgZm9ybXMpICovCiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1kZWVzLWlucHV0LXZlcnRpY2FsLWdhcCk7CiAgICAgICAgfQoKICAgICAgICAvKiBMYXN0IGNoaWxkIGluIGNvbnRhaW5lciBzaG91bGQgaGF2ZSBubyBib3R0b20gbWFyZ2luICovCiAgICAgICAgOmhvc3QoOmxhc3QtY2hpbGQpIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQoKICAgICAgICAvKiBIb3Jpem9udGFsIGxheW91dCBtb2RlIC0gYWN0aXZhdGVkIGJ5IGF0dHJpYnV0ZSAqLwogICAgICAgIDpob3N0KFtsYXlvdXQtbW9kZT0iaG9yaXpvbnRhbCJdKSB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLWRlZXMtaW5wdXQtaG9yaXpvbnRhbC1nYXApOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtsYXlvdXQtbW9kZT0iaG9yaXpvbnRhbCJdOmxhc3QtY2hpbGQpIHsKICAgICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICB9CgogICAgICAgIC8qIEF1dG8gbW9kZSAtIGluaGVyaXQgZnJvbSBwYXJlbnQgZGVlcy1mb3JtIGlmIHByZXNlbnQgKi8KCiAgICAgICAgLyogTGFiZWwgcG9zaXRpb24gdmFyaWF0aW9ucyAqLwogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibGVmdCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmcjsKICAgICAgICAgIGdhcDogdmFyKC0tZGVlcy1pbnB1dC1sYWJlbC1nYXApOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0icmlnaHQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87CiAgICAgICAgICBnYXA6IHZhcigtLWRlZXMtaW5wdXQtbGFiZWwtZ2FwKTsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249InRvcCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibm9uZSJdKSBkZWVzLWxhYmVsIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQogICAgICBgXX1jaGFuZ2VTdWJqZWN0PShhYSh0aGlzLEMpLG5ldyBBdC5zbWFydHJ4LnJ4anMuU3ViamVjdCk7YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuZGV0ZWN0TGF5b3V0TW9kZSgpfWRldGVjdExheW91dE1vZGUoKXtpZih0aGlzLmxheW91dE1vZGUhPT0iYXV0byIpe3RoaXMuc2V0QXR0cmlidXRlKCJsYXlvdXQtbW9kZSIsdGhpcy5sYXlvdXRNb2RlKTtyZXR1cm59bGV0IFA9dGhpcy5jbG9zZXN0KCJkZWVzLWZvcm0iKTtQJiZQLmhhc0F0dHJpYnV0ZSgiaG9yaXpvbnRhbC1sYXlvdXQiKT90aGlzLnNldEF0dHJpYnV0ZSgibGF5b3V0LW1vZGUiLCJob3Jpem9udGFsIik6dGhpcy5zZXRBdHRyaWJ1dGUoImxheW91dC1tb2RlIiwidmVydGljYWwiKX11cGRhdGVkKFApe3N1cGVyLnVwZGF0ZWQoUCksUC5oYXMoImxheW91dE1vZGUiKSYmdGhpcy5kZXRlY3RMYXlvdXRNb2RlKCksUC5oYXMoImxhYmVsUG9zaXRpb24iKSYmdGhpcy5zZXRBdHRyaWJ1dGUoImxhYmVsLXBvc2l0aW9uIix0aGlzLmxhYmVsUG9zaXRpb24pfWFzeW5jIGZyZWV6ZSgpe3RoaXMuZGlzYWJsZWQ9ITB9YXN5bmMgdW5mcmVlemUoKXt0aGlzLmRpc2FibGVkPSExfX19KSgpO2ZlKCk7dmFyIEJJdD0oKT0+TWAKICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LWNoZWNrYm94IiksYT10LnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3QtYWxsLWJ0biIpLHI9dC5xdWVyeVNlbGVjdG9yKCIjY2xlYXItYWxsLWJ0biIpO2EmJnImJihhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2UuZm9yRWFjaChpPT57IWkuZGlzYWJsZWQmJmkua2V5Py5zdGFydHNXaXRoKCJmZWF0dXJlIikmJihpLnZhbHVlPSEwKX0pfSksci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntlLmZvckVhY2goaT0+eyFpLmRpc2FibGVkJiZpLmtleT8uc3RhcnRzV2l0aCgiZmVhdHVyZSIpJiYoaS52YWx1ZT0hMSl9KX0pKX19PgogICAgPHN0eWxlPgogICAgICAke3RlYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY2hlY2tib3gtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ob3Jpem9udGFsLWNoZWNrYm94ZXMgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmludGVyYWN0aXZlLXNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsImhzbCgyMTAgNDAlIDgwJSkiKX07CiAgICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgbWluLWhlaWdodDogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZvcm0tc2VjdGlvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsImhzbCgwIDAlIDclKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmVhdHVyZS1saXN0IHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgQ2hlY2tib3hlcyJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgY2hlY2tib3ggZXhhbXBsZXMgd2l0aCB2YXJpb3VzIGxhYmVscyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiSSBhZ3JlZSB0byB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICAgIC5rZXk9JHsidGVybXMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJTdWJzY3JpYmUgdG8gbmV3c2xldHRlciJ9IAogICAgICAgICAgICAudmFsdWU9JHshMX0KICAgICAgICAgICAgLmtleT0keyJuZXdzbGV0dGVyIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRW5hYmxlIG5vdGlmaWNhdGlvbnMifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJSZWNlaXZlIGVtYWlsIHVwZGF0ZXMgYWJvdXQgeW91ciBhY2NvdW50In0KICAgICAgICAgICAgLmtleT0keyJub3RpZmljYXRpb25zIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJDaGVja2JveCBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGNoZWNrYm94IHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkRlZmF1bHQgc3RhdGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkNoZWNrZWQgc3RhdGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIHVuY2hlY2tlZCJ9IAogICAgICAgICAgICAudmFsdWU9JHshMX0KICAgICAgICAgICAgLmRpc2FibGVkPSR7ITB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIGNoZWNrZWQifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJSZXF1aXJlZCBjaGVja2JveCJ9IAogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAgLmtleT0keyJyZXF1aXJlZCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSG9yaXpvbnRhbCBMYXlvdXQifSAuc3VidGl0bGU9JHsiQ2hlY2tib3hlcyBhcnJhbmdlZCBob3Jpem9udGFsbHkgZm9yIGNvbXBhY3QgZm9ybXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWNoZWNrYm94ZXMiPgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJPcHRpb24gQSJ9IAogICAgICAgICAgICAudmFsdWU9JHshMX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsib3B0aW9uQSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9wdGlvbiBCIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJvcHRpb25CIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiT3B0aW9uIEMifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7Im9wdGlvbkMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJPcHRpb24gRCJ9IAogICAgICAgICAgICAudmFsdWU9JHshMH0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsib3B0aW9uRCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZSBTZWxlY3Rpb24gRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJDb21tb24gdXNlIGNhc2UgZm9yIGZlYXR1cmUgdG9nZ2xlcyB3aXRoIGJhdGNoIG9wZXJhdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJzZWxlY3QtYWxsLWJ0biIgdHlwZT0ic2Vjb25kYXJ5Ij5TZWxlY3QgQWxsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBpZD0iY2xlYXItYWxsLWJ0biIgdHlwZT0ic2Vjb25kYXJ5Ij5DbGVhciBBbGw8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbGlzdCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJEYXJrIE1vZGUgU3VwcG9ydCJ9IAogICAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAgIC5rZXk9JHsiZmVhdHVyZTEifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIE5vdGlmaWNhdGlvbnMifSAKICAgICAgICAgICAgICAudmFsdWU9JHshMH0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmUyIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJUd28tRmFjdG9yIEF1dGhlbnRpY2F0aW9uIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgICAgLmtleT0keyJmZWF0dXJlMyJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiQVBJIEFjY2VzcyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAgIC5rZXk9JHsiZmVhdHVyZTQifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkFkdmFuY2VkIEFuYWx5dGljcyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0keyExfQogICAgICAgICAgICAgIC5rZXk9JHsiZmVhdHVyZTUifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQcml2YWN5IFNldHRpbmdzIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiQ2hlY2tib3hlcyBpbiBhIHR5cGljYWwgZm9ybSBjb250ZXh0In0+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1zZWN0aW9uIj4KICAgICAgICAgIDxoNCBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UHJpdmFjeSBQcmVmZXJlbmNlczwvaDQ+CiAgICAgICAgICAKICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlNoYXJlIGFuYWx5dGljcyBkYXRhIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkhlbHAgdXMgaW1wcm92ZSBieSBzaGFyaW5nIGFub255bW91cyB1c2FnZSBkYXRhIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJQZXJzb25hbGl6ZWQgcmVjb21tZW5kYXRpb25zIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkdldCBzdWdnZXN0aW9ucyBiYXNlZCBvbiB5b3VyIGFjdGl2aXR5In0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJNYXJrZXRpbmcgY29tbXVuaWNhdGlvbnMifSAKICAgICAgICAgICAgICAudmFsdWU9JHshMX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiUmVjZWl2ZSBwcm9tb3Rpb25hbCBlbWFpbHMgYW5kIHNwZWNpYWwgb2ZmZXJzIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJUaGlyZC1wYXJ0eSBpbnRlZ3JhdGlvbnMifSAKICAgICAgICAgICAgICAudmFsdWU9JHshMX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWxsb3cgYXBwcm92ZWQgcGFydG5lcnMgdG8gYWNjZXNzIHlvdXIgZGF0YSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkludGVyYWN0aXZlIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiQ2xpY2sgY2hlY2tib3hlcyB0byBzZWUgdmFsdWUgY2hhbmdlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRmVhdHVyZSB0b2dnbGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgIEBjaGFuZ2VTdWJqZWN0PSR7dD0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNjaGVja2JveC1vdXRwdXQiKTtpZihlJiZ0LmRldGFpbCl7bGV0IGE9dC5kZXRhaWwuZ2V0VmFsdWUoKTtlLnRleHRDb250ZW50PWBGZWF0dXJlIGlzICR7YT8iZW5hYmxlZCI6ImRpc2FibGVkIn1gfX19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkRlYnVnIG1vZGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgIEBjaGFuZ2VTdWJqZWN0PSR7dD0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNkZWJ1Zy1vdXRwdXQiKTtpZihlJiZ0LmRldGFpbCl7bGV0IGE9dC5kZXRhaWwuZ2V0VmFsdWUoKTtlLnRleHRDb250ZW50PWBEZWJ1ZyBtb2RlOiAke2E/Ik9OIjoiT0ZGIn1gfX19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImludGVyYWN0aXZlLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBpZD0iY2hlY2tib3gtb3V0cHV0IiBjbGFzcz0ib3V0cHV0LXRleHQiPkZlYXR1cmUgaXMgZGlzYWJsZWQ8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9ImRlYnVnLW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0IiBzdHlsZT0ibWFyZ2luLXRvcDogOHB4OyI+RGVidWcgbW9kZTogT0ZGPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDtmZSgpO0JlKCk7dmFyIFdEZT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LGhJPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxHRGU9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWlucHV0LWNoZWNrYm94IildLGUsYT1bXSxyLGk9WGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W107dmFyIGQ9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBoPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6Qm9vbGVhbn0pXSxmPVtEKHt0eXBlOkJvb2xlYW59KV0sV0RlKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJ2YWx1ZSJpbiBnLGdldDpnPT5nLnZhbHVlLHNldDooZyxiKT0+e2cudmFsdWU9Yn19LG1ldGFkYXRhOmh9LHMsbCksV0RlKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaW5kZXRlcm1pbmF0ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+ImluZGV0ZXJtaW5hdGUiaW4gZyxnZXQ6Zz0+Zy5pbmRldGVybWluYXRlLHNldDooZyxiKT0+e2cuaW5kZXRlcm1pbmF0ZT1ifX0sbWV0YWRhdGE6aH0sYyx1KSxXRGUobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6aH0sbnVsbCxhKSxkPXI9ZS52YWx1ZSxoJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmh9KX1zdGF0aWMgZGVtbz1CSXQ7c3RhdGljIGRlbW9Hcm91cD0iSW5wdXQiOyNlPWhJKHRoaXMscywhMSk7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKGgpe3RoaXMuI2U9aH0jdD0oaEkodGhpcyxsKSxoSSh0aGlzLGMsITEpKTtnZXQgaW5kZXRlcm1pbmF0ZSgpe3JldHVybiB0aGlzLiN0fXNldCBpbmRldGVybWluYXRlKGgpe3RoaXMuI3Q9aH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksaEkodGhpcyx1KSx0aGlzLmxhYmVsUG9zaXRpb249InJpZ2h0In1zdGF0aWMgc3R5bGVzPVt4ZSwuLi5YZS5iYXNlU3R5bGVzLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAgICogewogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICB9CgogICAgICAgIDpob3N0IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAke0p0fTsKICAgICAgICB9CgogICAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3ggewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgbWFyZ2luLXRvcDogMXB4OwogICAgICAgIH0KCiAgICAgICAgLm1haW5jb250YWluZXI6aG92ZXIgLmNoZWNrYm94IHsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveC5zZWxlY3RlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveDpmb2N1cy12aXNpYmxlIHsKICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtwLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICAgIH0KCiAgICAgICAgLyogQ2hlY2ttYXJrIHVzaW5nIEx1Y2lkZSBpY29uIHN0eWxlICovCiAgICAgICAgLmNoZWNrYm94IC5jaGVja21hcmsgewogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3guc2VsZWN0ZWQgLmNoZWNrbWFyayB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94IC5jaGVja21hcmsgc3ZnIHsKICAgICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgICAgICB9CgogICAgICAgIC8qIERpc2FibGVkIHN0YXRlICovCiAgICAgICAgLm1haW5jb250YWluZXIuZGlzYWJsZWQgewogICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveC5kaXNhYmxlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLyogTGFiZWwgKi8KICAgICAgICAubGFiZWwtY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94LWxhYmVsIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lcjpob3ZlciAuY2hlY2tib3gtbGFiZWwgewogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLm1haW5jb250YWluZXIuZGlzYWJsZWQ6aG92ZXIgLmNoZWNrYm94LWxhYmVsIHsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgfQoKICAgICAgICAvKiBEZXNjcmlwdGlvbiAqLwogICAgICAgIC5kZXNjcmlwdGlvbi10ZXh0IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciAke3RoaXMuZGlzYWJsZWQ/ImRpc2FibGVkIjoiIn0iIEBjbGljaz0iJHt0aGlzLnRvZ2dsZVNlbGVjdGVkfSI+CiAgICAgICAgICA8ZGl2IAogICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggJHt0aGlzLnZhbHVlPyJzZWxlY3RlZCI6IiJ9ICR7dGhpcy5kaXNhYmxlZD8iZGlzYWJsZWQiOiIifSIgCiAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHt0aGlzLmhhbmRsZUtleWRvd259IgogICAgICAgICAgPgogICAgICAgICAgICAke3RoaXMudmFsdWU/TWAKICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoZWNrbWFyayI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAgNkw5IDE3TDQgMTIiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgYDp0aGlzLmluZGV0ZXJtaW5hdGU/TWAKICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hlY2ttYXJrIj4KICAgICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNSAxMkgxOSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgogICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICBgOk1gYH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwtY29udGFpbmVyIj4KICAgICAgICAgICAgJHt0aGlzLmxhYmVsP01gPGRpdiBjbGFzcz0iY2hlY2tib3gtbGFiZWwiPiR7dGhpcy5sYWJlbH08L2Rpdj5gOiIifQogICAgICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24/TWA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YDoiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgdG9nZ2xlU2VsZWN0ZWQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy52YWx1ZT0hdGhpcy52YWx1ZSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJuZXdWYWx1ZSIse2RldGFpbDp0aGlzLnZhbHVlLGJ1YmJsZXM6ITB9KSksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9c2V0VmFsdWUoaCl7dGhpcy52YWx1ZT1ofWZvY3VzKCl7bGV0IGg9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jaGVja2JveCIpO2gmJmguZm9jdXMoKX1oYW5kbGVLZXlkb3duKGgpeyhoLmtleT09PSIgInx8aC5rZXk9PT0iRW50ZXIiKSYmKGgucHJldmVudERlZmF1bHQoKSx0aGlzLnRvZ2dsZVNlbGVjdGVkKCkpfXN0YXRpY3toSShyLGEpfX07cmV0dXJuIGQ9cn0pKCk7dmFyIGw1PXt9O2V0KGw1LHticmlnaHQ6KCk9PkdsLGRhcms6KCk9PlBhfSk7dmFyIFBhPXtibHVlOiIjMDA1MGI5IixibHVlQWN0aXZlOiIjMDA2OWYyIixibHVlTXV0ZWQ6IiMwMTI0NTIiLHRleHQ6IiNmZmZmZmYifSxHbD17Ymx1ZToiIzAwNTBiOSIsYmx1ZUFjdGl2ZToiIzAwNjlmMiIsYmx1ZU11dGVkOiIjMDA2OWYyIix0ZXh0OiIjMzMzMzMzIn07ZmUoKTt2YXIgUkl0PSgpPT5NYAogIDxzdHlsZT4KICAgICR7dGVgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y4ZjlmYSIsIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlMGUwZTAiLCIjMzMzIil9OwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1zZWN0aW9uIGgzIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzIiwiI2ZmZiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tc2VjdGlvbiBwIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM2NjYiLCIjOTk5Iil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24tZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE1MHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+SGVhZGVyIEJ1dHRvbnM8L2gzPgogICAgICA8cD5Nb2RhbHMgY2FuIGhhdmUgb3B0aW9uYWwgaGVhZGVyIGJ1dHRvbnMgZm9yIGhlbHAgYW5kIGNsb3NpbmcuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT57ZTEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiV2l0aCBIZWxwIEJ1dHRvbiIsc2hvd0hlbHBCdXR0b246ITAsb25IZWxwOmFzeW5jKCk9PntsZXQgdD1hd2FpdCBlMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJIZWxwIix3aWR0aDoic21hbGwiLHNob3dDbG9zZUJ1dHRvbjohMCxzaG93SGVscEJ1dHRvbjohMSxjb250ZW50Ok1gCiAgICAgICAgICAgICAgICAgIDxwPlRoaXMgaXMgdGhlIGhlbHAgY29udGVudCBmb3IgdGhlIG1vZGFsLjwvcD4KICAgICAgICAgICAgICAgICAgPHA+WW91IGNhbiBwcm92aWRlIGNvbnRleHQtc3BlY2lmaWMgaGVscCBoZXJlLjwvcD4KICAgICAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJHb3QgaXQiLGFjdGlvbjphc3luYyBlPT5lLmRlc3Ryb3koKX1dfSl9LGNvbnRlbnQ6TWAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBhIGhlbHAgYnV0dG9uIGluIHRoZSBoZWFkZXIuIENsaWNrIGl0IHRvIHNlZSBoZWxwIGNvbnRlbnQuPC9wPgogICAgICAgICAgICAgIDxwPlRoZSBjbG9zZSBidXR0b24gaXMgYWxzbyB2aXNpYmxlIGJ5IGRlZmF1bHQuPC9wPgogICAgICAgICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiT0siLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX1dfSl9fT5XaXRoIEhlbHAgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntlMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJObyBDbG9zZSBCdXR0b24iLHNob3dDbG9zZUJ1dHRvbjohMSxjb250ZW50Ok1gCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgbm8gY2xvc2UgYnV0dG9uIGluIHRoZSBoZWFkZXIuPC9wPgogICAgICAgICAgICAgIDxwPllvdSBtdXN0IHVzZSB0aGUgYWN0aW9uIGJ1dHRvbnMgb3IgY2xpY2sgb3V0c2lkZSB0byBjbG9zZSBpdC48L3A+CiAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJDbG9zZSIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfV19KX19Pk5vIENsb3NlIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT57ZTEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiQm90aCBCdXR0b25zIixzaG93SGVscEJ1dHRvbjohMCxzaG93Q2xvc2VCdXR0b246ITAsb25IZWxwOigpPT5hbGVydCgiSGVscCBjbGlja2VkISIpLGNvbnRlbnQ6TWAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBib3RoIGhlbHAgYW5kIGNsb3NlIGJ1dHRvbnMuPC9wPgogICAgICAgICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiRG9uZSIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfV19KX19PkJvdGggQnV0dG9uczwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT57ZTEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiQ2xlYW4gSGVhZGVyIixzaG93Q2xvc2VCdXR0b246ITEsc2hvd0hlbHBCdXR0b246ITEsY29udGVudDpNYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIGEgY2xlYW4gaGVhZGVyIHdpdGggbm8gYnV0dG9ucy48L3A+CiAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJDbG9zZSIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfV19KX19PkNsZWFuIEhlYWRlcjwvZGVlcy1idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5Nb2RhbCBXaWR0aCBWYXJpYXRpb25zPC9oMz4KICAgICAgPHA+TW9kYWxzIGNhbiBoYXZlIGRpZmZlcmVudCB3aWR0aHM6IHNtYWxsLCBtZWRpdW0sIGxhcmdlLCBmdWxsc2NyZWVuLCBvciBjdXN0b20gcGl4ZWwgdmFsdWVzLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e2UxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6IlNtYWxsIE1vZGFsIix3aWR0aDoic21hbGwiLGNvbnRlbnQ6TWAKICAgICAgICAgICAgICA8cD5UaGlzIGlzIGEgc21hbGwgbW9kYWwgd2l0aCBhIHdpZHRoIG9mIDM4MHB4LiBQZXJmZWN0IGZvciBzaW1wbGUgY29uZmlybWF0aW9ucyBvciBicmllZiBtZXNzYWdlcy48L3A+CiAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJDYW5jZWwiLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX0se25hbWU6Ik9LIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9XX0pfX0+U21hbGwgTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e2UxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6Ik1lZGl1bSBNb2RhbCAoRGVmYXVsdCkiLHdpZHRoOiJtZWRpdW0iLGNvbnRlbnQ6TWAKICAgICAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiVXNlcm5hbWUifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkVtYWlsIn0gLmlucHV0VHlwZT0keyJlbWFpbCJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUGFzc3dvcmQifSAuaW5wdXRUeXBlPSR7InBhc3N3b3JkIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJDYW5jZWwiLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX0se25hbWU6IlNpZ24gVXAiLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX1dfSl9fT5NZWRpdW0gTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e2UxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6IkxhcmdlIE1vZGFsIix3aWR0aDoibGFyZ2UiLGNvbnRlbnQ6TWAKICAgICAgICAgICAgICA8aDQ+V2lkZSBDb250ZW50IEFyZWE8L2g0PgogICAgICAgICAgICAgIDxwPlRoaXMgbGFyZ2UgbW9kYWwgaXMgODAwcHggd2lkZSBhbmQgcGVyZmVjdCBmb3IgZGlzcGxheWluZyBtb3JlIGNvbXBsZXggY29udGVudCBsaWtlIGZvcm1zIHdpdGggbXVsdGlwbGUgY29sdW1ucywgdGFibGVzLCBvciBkZXRhaWxlZCBpbmZvcm1hdGlvbi48L3A+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyBnYXA6IDE2cHg7IG1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkZpcnN0IE5hbWUifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7Ikxhc3QgTmFtZSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQ29tcGFueSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUG9zaXRpb24ifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkNhbmNlbCIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfSx7bmFtZToiU2F2ZSIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfV19KX19PkxhcmdlIE1vZGFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntlMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJGdWxsc2NyZWVuIEVkaXRvciIsd2lkdGg6ImZ1bGxzY3JlZW4iLHNob3dIZWxwQnV0dG9uOiEwLG9uSGVscDphc3luYygpPT57YWxlcnQoIkluIGEgcmVhbCBhcHAsIHRoaXMgd291bGQgc2hvdyBlZGl0b3IgZG9jdW1lbnRhdGlvbiIpfSxjb250ZW50Ok1gCiAgICAgICAgICAgICAgPGg0PkZ1bGxzY3JlZW4gRXhwZXJpZW5jZSB3aXRoIEhlYWRlciBDb250cm9sczwvaDQ+CiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCB0YWtlcyB1cCBhbG1vc3QgdGhlIGVudGlyZSB2aWV3cG9ydCB3aXRoIGEgMjBweCBtYXJnaW4gb24gYWxsIHNpZGVzLiBUaGUgaGVhZGVyIGJ1dHRvbnMgYXJlIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4gZnVsbHNjcmVlbiBtb2RlLjwvcD4KICAgICAgICAgICAgICA8cD5UaGUgY29udGVudCBhcmVhIGNhbiBiZSBhcyB0YWxsIGFzIG5lZWRlZCBhbmQgd2lsbCBzY3JvbGwgaWYgbmVjZXNzYXJ5LjwvcD4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDIwMHB4OyBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2YwZjBmMCIsIiMyYTJhMmEiKX07IGJvcmRlci1yYWRpdXM6IDhweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IG1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogJHtwLmJkVGhlbWUoIiM5OTkiLCIjNjY2Iil9Ij5MYXJnZSBjb250ZW50IGFyZWE8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJTYXZlIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9LHtuYW1lOiJDYW5jZWwiLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX1dfSl9fT5GdWxsc2NyZWVuIE1vZGFsPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkN1c3RvbSBXaWR0aCAmIENvbnN0cmFpbnRzPC9oMz4KICAgICAgPHA+WW91IGNhbiBhbHNvIHNldCBjdXN0b20gcGl4ZWwgd2lkdGhzIGFuZCBtaW4vbWF4IGNvbnN0cmFpbnRzLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e2UxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6IkN1c3RvbSBXaWR0aCAoNzAwcHgpIix3aWR0aDo3MDAsY29udGVudDpNYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIGEgY3VzdG9tIHdpZHRoIG9mIGV4YWN0bHkgNzAwIHBpeGVscy48L3A+CiAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJDbG9zZSIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfV19KX19PkN1c3RvbSA3MDBweDwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT57ZTEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiV2l0aCBNYXggV2lkdGgiLHdpZHRoOiJsYXJnZSIsbWF4V2lkdGg6NjAwLGNvbnRlbnQ6TWAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGlzIHNldCB0byAnbGFyZ2UnIGJ1dCBjb25zdHJhaW5lZCBieSBhIG1heFdpZHRoIG9mIDYwMHB4LjwvcD4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkdvdCBpdCIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfV19KX19Pk1heCBXaWR0aCA2MDBweDwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT57ZTEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiV2l0aCBNaW4gV2lkdGgiLHdpZHRoOjMwMCxtaW5XaWR0aDo0MDAsY29udGVudDpNYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgd2lkdGggaXMgc2V0IHRvIDMwMHB4IGJ1dCBoYXMgYSBtaW5XaWR0aCBvZiA0MDBweCwgc28gaXQgd2lsbCBiZSA0MDBweCB3aWRlLjwvcD4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6Ik9LIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9XX0pfX0+TWluIFdpZHRoIDQwMHB4PC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkJ1dHRvbiBWYXJpYXRpb25zPC9oMz4KICAgICAgPHA+TW9kYWxzIGNhbiBoYXZlIGRpZmZlcmVudCBidXR0b24gY29uZmlndXJhdGlvbnMgd2l0aCBwcm9wZXIgc3BhY2luZy48L3A+CiAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntlMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJNdWx0aXBsZSBBY3Rpb25zIixjb250ZW50Ok1gCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBkZW1vbnN0cmF0ZXMgbXVsdGlwbGUgYnV0dG9ucyB3aXRoIHByb3BlciBzcGFjaW5nIGJldHdlZW4gdGhlbS48L3A+CiAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJEZWxldGUiLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX0se25hbWU6IkNhbmNlbCIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfSx7bmFtZToiU2F2ZSBDaGFuZ2VzIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9XX0pfX0+VGhyZWUgQnV0dG9uczwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT57ZTEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiU2luZ2xlIEFjdGlvbiIsY29udGVudDpNYAogICAgICAgICAgICAgIDxwPlNvbWV0aW1lcyB5b3UganVzdCBuZWVkIG9uZSBidXR0b24uPC9wPgogICAgICAgICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiQWNrbm93bGVkZ2UiLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX1dfSl9fT5TaW5nbGUgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntlMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJObyBBY3Rpb25zIixjb250ZW50Ok1gCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgbm8gYm90dG9tIGJ1dHRvbnMuIFVzZSB0aGUgWCBidXR0b24gb3IgY2xpY2sgb3V0c2lkZSB0byBjbG9zZS48L3A+CiAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IGNvbG9yOiAke3AuYmRUaGVtZSgiIzY2NiIsIiM5OTkiKX07Ij5UaGlzIGlzIHVzZWZ1bCBmb3IgaW5mb3JtYXRpb25hbCBtb2RhbHMgdGhhdCBkb24ndCByZXF1aXJlIHVzZXIgYWN0aW9uLjwvcD4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbXX0pfX0+Tm8gQnV0dG9uczwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT57ZTEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiTG9uZyBCdXR0b24gTGFiZWxzIixjb250ZW50Ok1gCiAgICAgICAgICAgICAgPHA+VGVzdGluZyBidXR0b24gbGF5b3V0IHdpdGggbG9uZ2VyIGxhYmVscy48L3A+CiAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJEaXNjYXJkIEFsbCBDaGFuZ2VzIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9LHtuYW1lOiJTYXZlIGFuZCBDb250aW51ZSBFZGl0aW5nIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9XX0pfX0+TG9uZyBMYWJlbHM8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+UmVzcG9uc2l2ZSBCZWhhdmlvcjwvaDM+CiAgICAgIDxwPkFsbCBtb2RhbHMgYXV0b21hdGljYWxseSBiZWNvbWUgZnVsbC13aWR0aCBvbiBtb2JpbGUgZGV2aWNlcyAoPCA3NjhweCB2aWV3cG9ydCB3aWR0aCkgZm9yIGJldHRlciB1c2FiaWxpdHkuPC9wPgogICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntlMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJSZXNwb25zaXZlIE1vZGFsIix3aWR0aDoibGFyZ2UiLHNob3dIZWxwQnV0dG9uOiEwLG9uSGVscDooKT0+Y29uc29sZS5sb2coIkhlbHAgcmVxdWVzdGVkIGZvciByZXNwb25zaXZlIG1vZGFsIiksY29udGVudDpNYAogICAgICAgICAgICA8cD5SZXNpemUgeW91ciBicm93c2VyIHdpbmRvdyB0byBzZWUgaG93IHRoaXMgbW9kYWwgYWRhcHRzLiBPbiBtb2JpbGUgdmlld3BvcnRzLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgdGFrZSB0aGUgZnVsbCB3aWR0aCBtaW51cyBtYXJnaW5zLjwvcD4KICAgICAgICAgICAgPHA+VGhlIGhlYWRlciBidXR0b25zIHJlbWFpbiBhY2Nlc3NpYmxlIGF0IGFsbCB2aWV3cG9ydCBzaXplcy48L3A+CiAgICAgICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiQ2xvc2UiLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX1dfSl9fT5UZXN0IFJlc3BvbnNpdmU8L2RlZXMtYnV0dG9uPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7ZmUoKTtTdCgpO0Z0KCk7QmUoKTt2YXIgZmE9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxmMT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sZTE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLW1vZGFsIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W10sSCxMPVtdLGs9W10sTixTPVtdLFQ9W10sUixBPVtdLEY9W10sYWUsVj1bXSxTZT1bXSx6ZSxXPVtdLE5lPVtdO3ZhciBSZT1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IFg9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpTdHJpbmd9KV0sZj1bbGUoe30pXSxkPVtsZSh7fSldLGI9W0Qoe3R5cGU6U3RyaW5nfSldLHY9W0Qoe3R5cGU6TnVtYmVyfSldLEU9W0Qoe3R5cGU6TnVtYmVyfSldLFA9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxIPVtEKHt0eXBlOkJvb2xlYW59KV0sTj1bRCh7YXR0cmlidXRlOiExfSldLFI9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxhZT1bRCh7dHlwZTpOdW1iZXJ9KV0semU9W2xlKCldLGZhKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaGVhZGluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ST0+ImhlYWRpbmciaW4gSSxnZXQ6ST0+SS5oZWFkaW5nLHNldDooSSxPKT0+e0kuaGVhZGluZz1PfX0sbWV0YWRhdGE6WH0scyxsKSxmYSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNvbnRlbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkk9PiJjb250ZW50ImluIEksZ2V0Okk9PkkuY29udGVudCxzZXQ6KEksTyk9PntJLmNvbnRlbnQ9T319LG1ldGFkYXRhOlh9LGMsdSksZmEodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtZW51T3B0aW9ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ST0+Im1lbnVPcHRpb25zImluIEksZ2V0Okk9PkkubWVudU9wdGlvbnMsc2V0OihJLE8pPT57SS5tZW51T3B0aW9ucz1PfX0sbWV0YWRhdGE6WH0saCxnKSxmYSh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6IndpZHRoIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpJPT4id2lkdGgiaW4gSSxnZXQ6ST0+SS53aWR0aCxzZXQ6KEksTyk9PntJLndpZHRoPU99fSxtZXRhZGF0YTpYfSx4LG0pLGZhKHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWF4V2lkdGgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkk9PiJtYXhXaWR0aCJpbiBJLGdldDpJPT5JLm1heFdpZHRoLHNldDooSSxPKT0+e0kubWF4V2lkdGg9T319LG1ldGFkYXRhOlh9LHksdyksZmEodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtaW5XaWR0aCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ST0+Im1pbldpZHRoImluIEksZ2V0Okk9PkkubWluV2lkdGgsc2V0OihJLE8pPT57SS5taW5XaWR0aD1PfX0sbWV0YWRhdGE6WH0sQyx6KSxmYSh0aGlzLG51bGwsUCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dDbG9zZUJ1dHRvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ST0+InNob3dDbG9zZUJ1dHRvbiJpbiBJLGdldDpJPT5JLnNob3dDbG9zZUJ1dHRvbixzZXQ6KEksTyk9PntJLnNob3dDbG9zZUJ1dHRvbj1PfX0sbWV0YWRhdGE6WH0sXywkKSxmYSh0aGlzLG51bGwsSCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dIZWxwQnV0dG9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpJPT4ic2hvd0hlbHBCdXR0b24iaW4gSSxnZXQ6ST0+SS5zaG93SGVscEJ1dHRvbixzZXQ6KEksTyk9PntJLnNob3dIZWxwQnV0dG9uPU99fSxtZXRhZGF0YTpYfSxMLGspLGZhKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToib25IZWxwIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpJPT4ib25IZWxwImluIEksZ2V0Okk9Pkkub25IZWxwLHNldDooSSxPKT0+e0kub25IZWxwPU99fSxtZXRhZGF0YTpYfSxTLFQpLGZhKHRoaXMsbnVsbCxSLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibW9iaWxlRnVsbHNjcmVlbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ST0+Im1vYmlsZUZ1bGxzY3JlZW4iaW4gSSxnZXQ6ST0+SS5tb2JpbGVGdWxsc2NyZWVuLHNldDooSSxPKT0+e0kubW9iaWxlRnVsbHNjcmVlbj1PfX0sbWV0YWRhdGE6WH0sQSxGKSxmYSh0aGlzLG51bGwsYWUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb250ZW50UGFkZGluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ST0+ImNvbnRlbnRQYWRkaW5nImluIEksZ2V0Okk9PkkuY29udGVudFBhZGRpbmcsc2V0OihJLE8pPT57SS5jb250ZW50UGFkZGluZz1PfX0sbWV0YWRhdGE6WH0sVixTZSksZmEodGhpcyxudWxsLHplLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibW9kYWxaSW5kZXgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkk9PiJtb2RhbFpJbmRleCJpbiBJLGdldDpJPT5JLm1vZGFsWkluZGV4LHNldDooSSxPKT0+e0kubW9kYWxaSW5kZXg9T319LG1ldGFkYXRhOlh9LFcsTmUpLGZhKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOlh9LG51bGwsYSksUmU9cj1lLnZhbHVlLFgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6WH0pfXN0YXRpYyBkZW1vPVJJdDtzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhYKXtsZXQgST1kb2N1bWVudC5ib2R5LE89bmV3IFJlO3JldHVybiBPLmhlYWRpbmc9WC5oZWFkaW5nLE8uY29udGVudD1YLmNvbnRlbnQsTy5tZW51T3B0aW9ucz1YLm1lbnVPcHRpb25zLFgud2lkdGgmJihPLndpZHRoPVgud2lkdGgpLFgubWF4V2lkdGgmJihPLm1heFdpZHRoPVgubWF4V2lkdGgpLFgubWluV2lkdGgmJihPLm1pbldpZHRoPVgubWluV2lkdGgpLFguc2hvd0Nsb3NlQnV0dG9uIT09dm9pZCAwJiYoTy5zaG93Q2xvc2VCdXR0b249WC5zaG93Q2xvc2VCdXR0b24pLFguc2hvd0hlbHBCdXR0b24hPT12b2lkIDAmJihPLnNob3dIZWxwQnV0dG9uPVguc2hvd0hlbHBCdXR0b24pLFgub25IZWxwJiYoTy5vbkhlbHA9WC5vbkhlbHApLFgubW9iaWxlRnVsbHNjcmVlbiE9PXZvaWQgMCYmKE8ubW9iaWxlRnVsbHNjcmVlbj1YLm1vYmlsZUZ1bGxzY3JlZW4pLFguY29udGVudFBhZGRpbmchPT12b2lkIDAmJihPLmNvbnRlbnRQYWRkaW5nPVguY29udGVudFBhZGRpbmcpLE8ud2luZG93TGF5ZXI9YXdhaXQgS2EuY3JlYXRlQW5kU2hvdyh7Ymx1cjohMH0pLE8ud2luZG93TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGFzeW5jKCk9Pnthd2FpdCBPLmRlc3Ryb3koKX0pLEkuYXBwZW5kKE8ud2luZG93TGF5ZXIpLEkuYXBwZW5kKE8pLE8ubW9kYWxaSW5kZXg9czEuZ2V0TmV4dFpJbmRleCgpLHMxLnJlZ2lzdGVyKE8sTy5tb2RhbFpJbmRleCksT30jZT1mMSh0aGlzLHMsIiIpO2dldCBoZWFkaW5nKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGhlYWRpbmcoWCl7dGhpcy4jZT1YfSN0PShmMSh0aGlzLGwpLGYxKHRoaXMsYyx2b2lkIDApKTtnZXQgY29udGVudCgpe3JldHVybiB0aGlzLiN0fXNldCBjb250ZW50KFgpe3RoaXMuI3Q9WH0jYT0oZjEodGhpcyx1KSxmMSh0aGlzLGgsW10pKTtnZXQgbWVudU9wdGlvbnMoKXtyZXR1cm4gdGhpcy4jYX1zZXQgbWVudU9wdGlvbnMoWCl7dGhpcy4jYT1YfSNyPShmMSh0aGlzLGcpLGYxKHRoaXMseCwibWVkaXVtIikpO2dldCB3aWR0aCgpe3JldHVybiB0aGlzLiNyfXNldCB3aWR0aChYKXt0aGlzLiNyPVh9I2k9KGYxKHRoaXMsbSksZjEodGhpcyx5LHZvaWQgMCkpO2dldCBtYXhXaWR0aCgpe3JldHVybiB0aGlzLiNpfXNldCBtYXhXaWR0aChYKXt0aGlzLiNpPVh9I289KGYxKHRoaXMsdyksZjEodGhpcyxDLHZvaWQgMCkpO2dldCBtaW5XaWR0aCgpe3JldHVybiB0aGlzLiNvfXNldCBtaW5XaWR0aChYKXt0aGlzLiNvPVh9I3M9KGYxKHRoaXMseiksZjEodGhpcyxfLCEwKSk7Z2V0IHNob3dDbG9zZUJ1dHRvbigpe3JldHVybiB0aGlzLiNzfXNldCBzaG93Q2xvc2VCdXR0b24oWCl7dGhpcy4jcz1YfSNuPShmMSh0aGlzLCQpLGYxKHRoaXMsTCwhMSkpO2dldCBzaG93SGVscEJ1dHRvbigpe3JldHVybiB0aGlzLiNufXNldCBzaG93SGVscEJ1dHRvbihYKXt0aGlzLiNuPVh9I2w9KGYxKHRoaXMsayksZjEodGhpcyxTLHZvaWQgMCkpO2dldCBvbkhlbHAoKXtyZXR1cm4gdGhpcy4jbH1zZXQgb25IZWxwKFgpe3RoaXMuI2w9WH0jYz0oZjEodGhpcyxUKSxmMSh0aGlzLEEsITEpKTtnZXQgbW9iaWxlRnVsbHNjcmVlbigpe3JldHVybiB0aGlzLiNjfXNldCBtb2JpbGVGdWxsc2NyZWVuKFgpe3RoaXMuI2M9WH0jZD0oZjEodGhpcyxGKSxmMSh0aGlzLFYsMTYpKTtnZXQgY29udGVudFBhZGRpbmcoKXtyZXR1cm4gdGhpcy4jZH1zZXQgY29udGVudFBhZGRpbmcoWCl7dGhpcy4jZD1YfSNmPShmMSh0aGlzLFNlKSxmMSh0aGlzLFcsMWUzKSk7Z2V0IG1vZGFsWkluZGV4KCl7cmV0dXJuIHRoaXMuI2Z9c2V0IG1vZGFsWkluZGV4KFgpe3RoaXMuI2Y9WH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7SnR9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzMzMyIsIiNmZmYiKX07CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLm1vZGFsIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDAuOTUpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDQwcHgpOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzA5MDkwYiIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgICAgICBtYXJnaW46IDIwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIC8qIFdpZHRoIHZhcmlhdGlvbnMgKi8KICAgICAgLm1vZGFsLndpZHRoLXNtYWxsIHsKICAgICAgICB3aWR0aDogMzgwcHg7CiAgICAgIH0KCiAgICAgIC5tb2RhbC53aWR0aC1tZWRpdW0gewogICAgICAgIHdpZHRoOiA1NjBweDsKICAgICAgfQoKICAgICAgLm1vZGFsLndpZHRoLWxhcmdlIHsKICAgICAgICB3aWR0aDogODAwcHg7CiAgICAgIH0KCiAgICAgIC5tb2RhbC53aWR0aC1mdWxsc2NyZWVuIHsKICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtIDQwcHgpOwogICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDQwcHgpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA0MHB4KTsKICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLm1vZGFsIHsKICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gNDBweCkgIWltcG9ydGFudDsKICAgICAgICAgIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBBbGxvdyBmdWxsIGhlaWdodCBvbiBtb2JpbGUgd2hlbiBjb250ZW50IG5lZWRzIGl0ICovCiAgICAgICAgLm1vZGFsQ29udGFpbmVyIHsKICAgICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5tb2RhbCB7CiAgICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjBweCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIEZ1bGwgc2NyZWVuIG1vZGUgb24gbW9iaWxlICovCiAgICAgICAgLm1vZGFsLm1vYmlsZS1mdWxsc2NyZWVuIHsKICAgICAgICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgICAgICAgaGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50OwogICAgICAgICAgbWF4LWhlaWdodDogMTAwdmggIWltcG9ydGFudDsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgfQogICAgICB9CgogICAgICAubW9kYWwuc2hvdyB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KSBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLm1vZGFsLnNob3cucHJlZGVzdHJveSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCkgc2NhbGUoMSk7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyB7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7SnR9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubW9kYWwgLmhlYWRpbmcgLmhlYWRlci1idXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiA4cHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICB9CgogICAgICAubW9kYWwgLmhlYWRpbmcgLmhlYWRlci1idXR0b24gewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgICB9CgogICAgICAubW9kYWwgLmhlYWRpbmcgLmhlYWRlci1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjRmNGY1IiwiIzI3MjcyYSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAubW9kYWwgLmhlYWRpbmcgLmhlYWRlci1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzZjNmNDYiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkaW5nLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmc6IDAgNDBweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAubW9kYWwgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgfQogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgLmJvdHRvbUJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMjcyNzJhIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzNmM2Y0NiIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y0ZjRmNSIsIiMzZjNmNDYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiI2QxZDVkYiIsIiM1MjUyNWIiKX07CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiM1MjUyNWIiKX07CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b246bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICB9CgogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgLmJvdHRvbUJ1dHRvbi5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24ucHJpbWFyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiMyNTYzZWIiLCIjMjU2M2ViIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiMyNTYzZWIiLCIjMjU2M2ViIil9OwogICAgICB9CiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uLnByaW1hcnk6YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzFkNGVkOCIsIiMxZDRlZDgiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiIzFkNGVkOCIsIiMxZDRlZDgiKX07CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe2xldCBYPXR5cGVvZiB0aGlzLndpZHRoPT0ic3RyaW5nIj9gd2lkdGgtJHt0aGlzLndpZHRofWA6IiIsST10eXBlb2YgdGhpcy53aWR0aD09Im51bWJlciI/YCR7dGhpcy53aWR0aH1weGA6IiIsTz10aGlzLm1heFdpZHRoP2Ake3RoaXMubWF4V2lkdGh9cHhgOiIiLEc9dGhpcy5taW5XaWR0aD9gJHt0aGlzLm1pbldpZHRofXB4YDoiIixqPXRoaXMubW9iaWxlRnVsbHNjcmVlbj8ibW9iaWxlLWZ1bGxzY3JlZW4iOiIiO3JldHVybiBNYAogICAgICA8c3R5bGU+CiAgICAgICAgJHtJP2AubW9kYWwgeyB3aWR0aDogJHtJfTsgfWA6IiJ9CiAgICAgICAgJHtPP2AubW9kYWwgeyBtYXgtd2lkdGg6ICR7T307IH1gOiIifQogICAgICAgICR7Rz9gLm1vZGFsIHsgbWluLXdpZHRoOiAke0d9OyB9YDoiIn0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ibW9kYWxDb250YWluZXIiIEBjbGljaz0ke3RoaXMuaGFuZGxlT3V0c2lkZUNsaWNrfSBzdHlsZT0iei1pbmRleDogJHt0aGlzLm1vZGFsWkluZGV4fSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgJHtYfSAke2p9Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXRleHQiPiR7dGhpcy5oZWFkaW5nfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItYnV0dG9ucyI+CiAgICAgICAgICAgICAgJHt0aGlzLnNob3dIZWxwQnV0dG9uP01gCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItYnV0dG9uIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUhlbHB9IHRpdGxlPSJIZWxwIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6aGVscENpcmNsZSJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICAke3RoaXMuc2hvd0Nsb3NlQnV0dG9uP01gCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItYnV0dG9uIiBAY2xpY2s9JHsoKT0+dGhpcy5kZXN0cm95KCl9IHRpdGxlPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0icGFkZGluZzogJHt0aGlzLmNvbnRlbnRQYWRkaW5nfXB4OyI+JHt0aGlzLmNvbnRlbnR9PC9kaXY+CiAgICAgICAgICAke3RoaXMubWVudU9wdGlvbnMubGVuZ3RoPjA/TWAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm90dG9tQnV0dG9ucyI+CiAgICAgICAgICAgICAgJHt0aGlzLm1lbnVPcHRpb25zLm1hcCgoc2Usa2UpPT5NYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b21CdXR0b24gJHtrZT09PXRoaXMubWVudU9wdGlvbnMubGVuZ3RoLTE/InByaW1hcnkiOiIifSAke3NlLm5hbWU9PT0iT0siPyJvayI6IiJ9IiBAY2xpY2s9JHsoKT0+e3NlLmFjdGlvbih0aGlzKX19PiR7c2UubmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH13aW5kb3dMYXllcj1mMSh0aGlzLE5lKTthc3luYyBmaXJzdFVwZGF0ZWQoWCl7c3VwZXIuZmlyc3RVcGRhdGVkKFgpLGF3YWl0KGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlKS5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDMwKSx0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1vZGFsIikuY2xhc3NMaXN0LmFkZCgic2hvdyIpfWFzeW5jIGhhbmRsZU91dHNpZGVDbGljayhYKXtYLnN0b3BQcm9wYWdhdGlvbigpO2xldCBJPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubW9kYWxDb250YWluZXIiKTtYLnRhcmdldD09PUkmJmF3YWl0IHRoaXMuZGVzdHJveSgpfWFzeW5jIGRlc3Ryb3koKXtsZXQgWD1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTt0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1vZGFsIikuY2xhc3NMaXN0LmFkZCgicHJlZGVzdHJveSIpLGF3YWl0IFguY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigyMDApLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcyksYXdhaXQgdGhpcy53aW5kb3dMYXllci5kZXN0cm95KCksczEudW5yZWdpc3Rlcih0aGlzKX1hc3luYyBoYW5kbGVIZWxwKCl7dGhpcy5vbkhlbHAmJmF3YWl0IHRoaXMub25IZWxwKCl9c3RhdGlje2YxKHIsYSl9fTtyZXR1cm4gUmU9cn0pKCk7ZmUoKTt2YXIgSEl0PSgpPT5NYAogICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7ImEgbGFiZWwifT48L2RlZXMtbGFiZWw+CiAgYDtmZSgpO0JlKCk7dmFyIFpVPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sWWw9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LFJvMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtbGFiZWwiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXTt2YXIgYj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IHg9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpTdHJpbmcscmVmbGVjdDohMH0pXSxmPVtEKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLGQ9W0Qoe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLFpVKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGFiZWwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJsYWJlbCJpbiBtLGdldDptPT5tLmxhYmVsLHNldDoobSx2KT0+e20ubGFiZWw9dn19LG1ldGFkYXRhOnh9LHMsbCksWlUodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkZXNjcmlwdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+ImRlc2NyaXB0aW9uImluIG0sZ2V0Om09Pm0uZGVzY3JpcHRpb24sc2V0OihtLHYpPT57bS5kZXNjcmlwdGlvbj12fX0sbWV0YWRhdGE6eH0sYyx1KSxaVSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJlcXVpcmVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4icmVxdWlyZWQiaW4gbSxnZXQ6bT0+bS5yZXF1aXJlZCxzZXQ6KG0sdik9PnttLnJlcXVpcmVkPXZ9fSxtZXRhZGF0YTp4fSxoLGcpLFpVKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOnh9LG51bGwsYSksYj1yPWUudmFsdWUseCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp4fSl9c3RhdGljIGRlbW89SEl0OyNlPVlsKHRoaXMscywiIik7Z2V0IGxhYmVsKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGxhYmVsKHgpe3RoaXMuI2U9eH0jdD0oWWwodGhpcyxsKSxZbCh0aGlzLGMsdm9pZCAwKSk7Z2V0IGRlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGRlc2NyaXB0aW9uKHgpe3RoaXMuI3Q9eH0jYT0oWWwodGhpcyx1KSxZbCh0aGlzLGgsITEpKTtnZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy4jYX1zZXQgcmVxdWlyZWQoeCl7dGhpcy4jYT14fXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubGFiZWwgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLnJlcXVpcmVkIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsImhzbCgwIDcyLjIlIDUwLjYlKSIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgICB9CgogICAgICBkZWVzLWljb24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBjdXJzb3I6IGhlbHA7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICAke3RoaXMubGFiZWw/TWAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPgogICAgICAgICAgICAgICR7dGhpcy5sYWJlbH0KICAgICAgICAgICAgICAke3RoaXMucmVxdWlyZWQ/TWA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPio8L3NwYW4+YDoiIn0KICAgICAgICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24/TWAKICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTppbmZvIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtc3BlZWNoYnViYmxlIC50ZXh0PSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLXNwZWVjaGJ1YmJsZT4KICAgICAgICAgICAgICAgICAgYDpNYGB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDpNYGB9CiAgICBgfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxZbCh0aGlzLGcpfXN0YXRpY3tZbChyLGEpfX07cmV0dXJuIGI9cn0pKCk7dmFyIFhVPSIwLjU1LjEiO2ZlKCk7U3QoKTtCZSgpO3ZhciBjNT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LHNyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxIbzE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXSx2LHk9W10sdz1bXTt2YXIgRT1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IEM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpTdHJpbmd9KV0sZj1bRCh7dHlwZTpTdHJpbmd9KV0sZD1bRCh7dHlwZTpTdHJpbmd9KV0sYj1bRCh7dHlwZTpPYmplY3R9KV0sdj1bRCh7dHlwZTpCb29sZWFufSldLGM1KHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29udGVudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImNvbnRlbnQiaW4geixnZXQ6ej0+ei5jb250ZW50LHNldDooeixQKT0+e3ouY29udGVudD1QfX0sbWV0YWRhdGE6Q30scyxsKSxjNSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Imxhbmd1YWdlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ibGFuZ3VhZ2UiaW4geixnZXQ6ej0+ei5sYW5ndWFnZSxzZXQ6KHosUCk9Pnt6Lmxhbmd1YWdlPVB9fSxtZXRhZGF0YTpDfSxjLHUpLGM1KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZmlsZVBhdGgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJmaWxlUGF0aCJpbiB6LGdldDp6PT56LmZpbGVQYXRoLHNldDooeixQKT0+e3ouZmlsZVBhdGg9UH19LG1ldGFkYXRhOkN9LGgsZyksYzUodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb250ZW50U3ViamVjdCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImNvbnRlbnRTdWJqZWN0ImluIHosZ2V0Ono9PnouY29udGVudFN1YmplY3Qsc2V0Oih6LFApPT57ei5jb250ZW50U3ViamVjdD1QfX0sbWV0YWRhdGE6Q30seCxtKSxjNSh0aGlzLG51bGwsdix7a2luZDoiYWNjZXNzb3IiLG5hbWU6IndvcmRXcmFwIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4id29yZFdyYXAiaW4geixnZXQ6ej0+ei53b3JkV3JhcCxzZXQ6KHosUCk9Pnt6LndvcmRXcmFwPVB9fSxtZXRhZGF0YTpDfSx5LHcpLGM1KG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOkN9LG51bGwsYSksRT1yPWUudmFsdWUsQyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpDfSl9c3RhdGljIGRlbW89KCk9Pk1gPGRlZXMtd29ya3NwYWNlLW1vbmFjbz48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz5gO3N0YXRpYyBkZW1vR3JvdXA9IldvcmtzcGFjZSI7c3RhdGljIG1vbmFjb0RlZmVycmVkO2VkaXRvckRlZmVycmVkPUF0LnNtYXJ0cHJvbWlzZS5kZWZlcigpOyNlPXNyKHRoaXMscyxgZnVuY3Rpb24gaGVsbG8oKSB7CglhbGVydCgnSGVsbG8gd29ybGQhJyk7Cn1gKTtnZXQgY29udGVudCgpe3JldHVybiB0aGlzLiNlfXNldCBjb250ZW50KEMpe3RoaXMuI2U9Q30jdD0oc3IodGhpcyxsKSxzcih0aGlzLGMsInR5cGVzY3JpcHQiKSk7Z2V0IGxhbmd1YWdlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGxhbmd1YWdlKEMpe3RoaXMuI3Q9Q30jYT0oc3IodGhpcyx1KSxzcih0aGlzLGgsIiIpKTtnZXQgZmlsZVBhdGgoKXtyZXR1cm4gdGhpcy4jYX1zZXQgZmlsZVBhdGgoQyl7dGhpcy4jYT1DfSNyPShzcih0aGlzLGcpLHNyKHRoaXMseCxuZXcgQXQuc21hcnRyeC5yeGpzLlN1YmplY3QpKTtnZXQgY29udGVudFN1YmplY3QoKXtyZXR1cm4gdGhpcy4jcn1zZXQgY29udGVudFN1YmplY3QoQyl7dGhpcy4jcj1DfSNpPShzcih0aGlzLG0pLHNyKHRoaXMseSwib2ZmIikpO2dldCB3b3JkV3JhcCgpe3JldHVybiB0aGlzLiNpfXNldCB3b3JkV3JhcChDKXt0aGlzLiNpPUN9bW9uYWNvVGhlbWVTdWJzY3JpcHRpb249KHNyKHRoaXMsdyksbnVsbCk7aXNVcGRhdGluZ0Zyb21FeHRlcm5hbD0hMTtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksQzIuc2V0dXBEb21Ub29scygpfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICB9CgogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgPGRpdiBpZD0iY29udGFpbmVyIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZChDKXtzdXBlci5maXJzdFVwZGF0ZWQoQyk7bGV0IHo9dGhpcy5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKSxQPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL21vbmFjby1lZGl0b3JAJHtYVX1gO2lmKCFFLm1vbmFjb0RlZmVycmVkKXtFLm1vbmFjb0RlZmVycmVkPUF0LnNtYXJ0cHJvbWlzZS5kZWZlcigpO2xldCBMPWAke1B9L21pbi92cy9sb2FkZXIuanNgLGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7ay5zcmM9TCxrLm9ubG9hZD0oKT0+e0UubW9uYWNvRGVmZXJyZWQucmVzb2x2ZSgpfSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGspfWF3YWl0IEUubW9uYWNvRGVmZXJyZWQucHJvbWlzZSx3aW5kb3cucmVxdWlyZS5jb25maWcoe3BhdGhzOnt2czpgJHtQfS9taW4vdnNgfX0pLHdpbmRvdy5yZXF1aXJlKFsidnMvZWRpdG9yL2VkaXRvci5tYWluIl0sYXN5bmMoKT0+e2xldCBMPWF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlLE49TC50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuPyJ2cyI6InZzLWRhcmsiLFM9d2luZG93Lm1vbmFjbyxUPW51bGw7aWYodGhpcy5maWxlUGF0aCl7bGV0IEE9Uy5VcmkucGFyc2UoYGZpbGU6Ly8ke3RoaXMuZmlsZVBhdGh9YCk7VD1TLmVkaXRvci5nZXRNb2RlbChBKSxUP1Quc2V0VmFsdWUodGhpcy5jb250ZW50KTpUPVMuZWRpdG9yLmNyZWF0ZU1vZGVsKHRoaXMuY29udGVudCx0aGlzLmxhbmd1YWdlLEEpfWxldCBSPVMuZWRpdG9yLmNyZWF0ZSh6LHttb2RlbDpUfHx2b2lkIDAsdmFsdWU6VD92b2lkIDA6dGhpcy5jb250ZW50LGxhbmd1YWdlOlQ/dm9pZCAwOnRoaXMubGFuZ3VhZ2UsdGhlbWU6Tix1c2VTaGFkb3dET006ITAsZm9udFNpemU6MTYsYXV0b21hdGljTGF5b3V0OiEwLHdvcmRXcmFwOnRoaXMud29yZFdyYXAsaG92ZXI6e2VuYWJsZWQ6ITAsZGVsYXk6MzAwLHN0aWNreTohMCxhYm92ZTohMX19KTt0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uPUwudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoQT0+e2xldCBGPUE/InZzIjoidnMtZGFyayI7Ui51cGRhdGVPcHRpb25zKHt0aGVtZTpGfSl9KSx0aGlzLmVkaXRvckRlZmVycmVkLnJlc29sdmUoUil9KTtsZXQgXz1hd2FpdChhd2FpdCBmZXRjaChgJHtQfS9taW4vdnMvZWRpdG9yL2VkaXRvci5tYWluLmNzc2ApKS50ZXh0KCksJD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOyQudGV4dENvbnRlbnQ9Xyx0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kKCQpO2xldCBIPWF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTtILm9uRGlkQ2hhbmdlTW9kZWxDb250ZW50KGFzeW5jIEw9PntpZih0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwpcmV0dXJuO2xldCBrPUguZ2V0VmFsdWUoKTt0aGlzLmNvbnRlbnRTdWJqZWN0Lm5leHQoayksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29udGVudC1jaGFuZ2UiLHtkZXRhaWw6ayxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfSksdGhpcy5jb250ZW50U3ViamVjdC5uZXh0KEguZ2V0VmFsdWUoKSl9YXN5bmMgdXBkYXRlZChDKXtzdXBlci51cGRhdGVkKEMpO2xldCB6PXdpbmRvdy5tb25hY287aWYoeil7aWYoQy5oYXMoImZpbGVQYXRoIikmJnRoaXMuZmlsZVBhdGgpe2xldCBQPWF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZSxfPXouVXJpLnBhcnNlKGBmaWxlOi8vJHt0aGlzLmZpbGVQYXRofWApLCQ9ei5lZGl0b3IuZ2V0TW9kZWwoXyk7JD8kLmdldFZhbHVlKCkhPT10aGlzLmNvbnRlbnQmJih0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWw9ITAsJC5zZXRWYWx1ZSh0aGlzLmNvbnRlbnQpLHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbD0hMSk6JD16LmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLmNvbnRlbnQsdGhpcy5sYW5ndWFnZSxfKSxQLmdldE1vZGVsKCk/LnVyaS50b1N0cmluZygpIT09Xy50b1N0cmluZygpJiZQLnNldE1vZGVsKCQpO3JldHVybn1pZihDLmhhcygiY29udGVudCIpKXtsZXQgUD1hd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2U7UC5nZXRWYWx1ZSgpIT09dGhpcy5jb250ZW50JiYodGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsPSEwLFAuc2V0VmFsdWUodGhpcy5jb250ZW50KSx0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWw9ITEpfWlmKEMuaGFzKCJsYW5ndWFnZSIpKXtsZXQgXz0oYXdhaXQgdGhpcy5lZGl0b3JEZWZlcnJlZC5wcm9taXNlKS5nZXRNb2RlbCgpO18mJnouZWRpdG9yLnNldE1vZGVsTGFuZ3VhZ2UoXyx0aGlzLmxhbmd1YWdlKX19fWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uJiYodGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb249bnVsbCl9YXN5bmMgc2V0Q29udGVudEV4dGVybmFsKEMsej0hMCl7bGV0IFA9YXdhaXQgdGhpcy5lZGl0b3JEZWZlcnJlZC5wcm9taXNlO2lmKFAuZ2V0VmFsdWUoKT09PUMpcmV0dXJuO2xldCAkPXo/UC5nZXRQb3NpdGlvbigpOm51bGwsSD16P1AuZ2V0U2VsZWN0aW9ucygpOm51bGwsTD16P1AuZ2V0U2Nyb2xsVG9wKCk6MCxrPXo/UC5nZXRTY3JvbGxMZWZ0KCk6MDtpZih0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWw9ITAsUC5zZXRWYWx1ZShDKSx0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWw9ITEseil7aWYoJCl7bGV0IE49UC5nZXRNb2RlbCgpLFM9Tj8uZ2V0TGluZUNvdW50KCl8fDEsVD1NYXRoLm1pbigkLmxpbmVOdW1iZXIsUyksUj1OPy5nZXRMaW5lTWF4Q29sdW1uKFQpfHwxLEE9TWF0aC5taW4oJC5jb2x1bW4sUik7UC5zZXRQb3NpdGlvbih7bGluZU51bWJlcjpULGNvbHVtbjpBfSl9aWYoSCYmSC5sZW5ndGg+MCl0cnl7UC5zZXRTZWxlY3Rpb25zKEgpfWNhdGNoe31QLnNldFNjcm9sbFBvc2l0aW9uKHtzY3JvbGxUb3A6TCxzY3JvbGxMZWZ0Omt9KX19c3RhdGlje3NyKHIsYSl9fTtyZXR1cm4gRT1yfSkoKTtmZSgpO0JlKCk7RnQoKTt2YXIgbnM9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxSMj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sbUk9W3trZXk6InR5cGVzY3JpcHQiLGxhYmVsOiJUeXBlU2NyaXB0In0se2tleToiamF2YXNjcmlwdCIsbGFiZWw6IkphdmFTY3JpcHQifSx7a2V5OiJqc29uIixsYWJlbDoiSlNPTiJ9LHtrZXk6Imh0bWwiLGxhYmVsOiJIVE1MIn0se2tleToiY3NzIixsYWJlbDoiQ1NTIn0se2tleToic2NzcyIsbGFiZWw6IlNDU1MifSx7a2V5OiJtYXJrZG93biIsbGFiZWw6Ik1hcmtkb3duIn0se2tleToieWFtbCIsbGFiZWw6IllBTUwifSx7a2V5OiJ4bWwiLGxhYmVsOiJYTUwifSx7a2V5OiJzcWwiLGxhYmVsOiJTUUwifSx7a2V5OiJweXRob24iLGxhYmVsOiJQeXRob24ifSx7a2V5OiJqYXZhIixsYWJlbDoiSmF2YSJ9LHtrZXk6ImNzaGFycCIsbGFiZWw6IkMjIn0se2tleToiY3BwIixsYWJlbDoiQysrIn0se2tleToiZ28iLGxhYmVsOiJHbyJ9LHtrZXk6InJ1c3QiLGxhYmVsOiJSdXN0In0se2tleToic2hlbGwiLGxhYmVsOiJTaGVsbCJ9LHtrZXk6InBsYWludGV4dCIsbGFiZWw6IlBsYWluIFRleHQifV0sWURlPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1pbnB1dC1jb2RlIildLGUsYT1bXSxyLGk9WGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W107dmFyIEg9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBMPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6U3RyaW5nfSldLGY9W0Qoe3R5cGU6U3RyaW5nfSldLGQ9W0Qoe3R5cGU6U3RyaW5nfSldLGI9W0Qoe3R5cGU6U3RyaW5nfSldLHY9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxFPVtsZSgpXSxQPVtsZSgpXSxucyh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4idmFsdWUiaW4gayxnZXQ6az0+ay52YWx1ZSxzZXQ6KGssTik9PntrLnZhbHVlPU59fSxtZXRhZGF0YTpMfSxzLGwpLG5zKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGFuZ3VhZ2UiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJsYW5ndWFnZSJpbiBrLGdldDprPT5rLmxhbmd1YWdlLHNldDooayxOKT0+e2subGFuZ3VhZ2U9Tn19LG1ldGFkYXRhOkx9LGMsdSksbnModGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJoZWlnaHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJoZWlnaHQiaW4gayxnZXQ6az0+ay5oZWlnaHQsc2V0OihrLE4pPT57ay5oZWlnaHQ9Tn19LG1ldGFkYXRhOkx9LGgsZyksbnModGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ3b3JkV3JhcCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+IndvcmRXcmFwImluIGssZ2V0Oms9Pmsud29yZFdyYXAsc2V0OihrLE4pPT57ay53b3JkV3JhcD1OfX0sbWV0YWRhdGE6TH0seCxtKSxucyh0aGlzLG51bGwsdix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dMaW5lTnVtYmVycyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InNob3dMaW5lTnVtYmVycyJpbiBrLGdldDprPT5rLnNob3dMaW5lTnVtYmVycyxzZXQ6KGssTik9PntrLnNob3dMaW5lTnVtYmVycz1OfX0sbWV0YWRhdGE6TH0seSx3KSxucyh0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJpc0xhbmd1YWdlRHJvcGRvd25PcGVuImluIGssZ2V0Oms9PmsuaXNMYW5ndWFnZURyb3Bkb3duT3BlbixzZXQ6KGssTik9PntrLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW49Tn19LG1ldGFkYXRhOkx9LEMseiksbnModGhpcyxudWxsLFAse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb3B5U3VjY2VzcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImNvcHlTdWNjZXNzImluIGssZ2V0Oms9PmsuY29weVN1Y2Nlc3Msc2V0OihrLE4pPT57ay5jb3B5U3VjY2Vzcz1OfX0sbWV0YWRhdGE6TH0sXywkKSxucyhudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpMfSxudWxsLGEpLEg9cj1lLnZhbHVlLEwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TH0pfXN0YXRpYyBkZW1vPSgpPT5NYAogICAgPGRlZXMtaW5wdXQtY29kZQogICAgICBsYWJlbD0iVHlwZVNjcmlwdCBDb2RlIgogICAgICBrZXk9ImNvZGUiCiAgICAgIGxhbmd1YWdlPSJ0eXBlc2NyaXB0IgogICAgICBoZWlnaHQ9IjMwMHB4IgogICAgICAudmFsdWU9JHtgY29uc3QgZ3JlZXRpbmc6IHN0cmluZyA9ICJIZWxsbyBXb3JsZCI7CmNvbnNvbGUubG9nKGdyZWV0aW5nKTtgfQogICAgPjwvZGVlcy1pbnB1dC1jb2RlPgogIGA7c3RhdGljIGRlbW9Hcm91cD0iSW5wdXQiOyNlPVIyKHRoaXMscywiIik7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKEwpe3RoaXMuI2U9TH0jdD0oUjIodGhpcyxsKSxSMih0aGlzLGMsInR5cGVzY3JpcHQiKSk7Z2V0IGxhbmd1YWdlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGxhbmd1YWdlKEwpe3RoaXMuI3Q9TH0jYT0oUjIodGhpcyx1KSxSMih0aGlzLGgsIjIwMHB4IikpO2dldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy4jYX1zZXQgaGVpZ2h0KEwpe3RoaXMuI2E9TH0jcj0oUjIodGhpcyxnKSxSMih0aGlzLHgsIm9mZiIpKTtnZXQgd29yZFdyYXAoKXtyZXR1cm4gdGhpcy4jcn1zZXQgd29yZFdyYXAoTCl7dGhpcy4jcj1MfSNpPShSMih0aGlzLG0pLFIyKHRoaXMseSwhMCkpO2dldCBzaG93TGluZU51bWJlcnMoKXtyZXR1cm4gdGhpcy4jaX1zZXQgc2hvd0xpbmVOdW1iZXJzKEwpe3RoaXMuI2k9TH0jbz0oUjIodGhpcyx3KSxSMih0aGlzLEMsITEpKTtnZXQgaXNMYW5ndWFnZURyb3Bkb3duT3Blbigpe3JldHVybiB0aGlzLiNvfXNldCBpc0xhbmd1YWdlRHJvcGRvd25PcGVuKEwpe3RoaXMuI289TH0jcz0oUjIodGhpcyx6KSxSMih0aGlzLF8sITEpKTtnZXQgY29weVN1Y2Nlc3MoKXtyZXR1cm4gdGhpcy4jc31zZXQgY29weVN1Y2Nlc3MoTCl7dGhpcy4jcz1MfWVkaXRvckVsZW1lbnQ9KFIyKHRoaXMsJCksbnVsbCk7c3RhdGljIHN0eWxlcz1beGUsLi4uWGUuYmFzZVN0eWxlcyxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLmNvZGUtY29udGFpbmVyIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWxlZnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItcmlnaHQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLXNlbGVjdG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCJoc2woMCAwJSAxNSUpIil9OwogICAgICB9CgogICAgICAubGFuZ3VhZ2UtZHJvcGRvd24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgICAgIG1heC1oZWlnaHQ6IDI1MHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWluLXdpZHRoOiAxNDBweDsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLW9wdGlvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLW9wdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCJoc2woMCAwJSAxNSUpIil9OwogICAgICB9CgogICAgICAubGFuZ3VhZ2Utb3B0aW9uLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQ1JSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgIGNvbG9yOiBoc2woMTQyLjEgNzYuMiUgMzYuMyUpOwogICAgICB9CgogICAgICAuZWRpdG9yLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtbW9uYWNvIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnRvb2xiYXItZGl2aWRlciB7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5jb2RlLWNvbnRhaW5lciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtsZXQgTD1tSS5maW5kKGs9Pmsua2V5PT09dGhpcy5sYW5ndWFnZSl8fG1JWzBdO3JldHVybiBNYAogICAgICA8c3R5bGU+CiAgICAgICAgLmVkaXRvci13cmFwcGVyIHsKICAgICAgICAgIGhlaWdodDogJHt0aGlzLmhlaWdodH07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2UtYnV0dG9uIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnRvZ2dsZUxhbmd1YWdlRHJvcGRvd259CiAgICAgICAgICAgICAgICAgIEBibHVyPSR7dGhpcy5oYW5kbGVMYW5ndWFnZUJsdXJ9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7TC5sYWJlbH0KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Q2hldnJvbkRvd24ifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAke3RoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3Blbj9NYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1kcm9wZG93biI+CiAgICAgICAgICAgICAgICAgICAgJHttSS5tYXAoaz0+TWAKICAgICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imxhbmd1YWdlLW9wdGlvbiAke2sua2V5PT09dGhpcy5sYW5ndWFnZT8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgICAgICAgICAgICAgQG1vdXNlZG93bj0ke049PnRoaXMuc2VsZWN0TGFuZ3VhZ2UoTixrLmtleSl9CiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICR7ay5sYWJlbH0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLXJpZ2h0Ij4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24gJHt0aGlzLndvcmRXcmFwPT09Im9uIj8iYWN0aXZlIjoiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iV29yZCBXcmFwIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy50b2dnbGVXb3JkV3JhcH0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpXcmFwVGV4dCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uICR7dGhpcy5zaG93TGluZU51bWJlcnM/ImFjdGl2ZSI6IiJ9IgogICAgICAgICAgICAgICAgdGl0bGU9IkxpbmUgTnVtYmVycyIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMudG9nZ2xlTGluZU51bWJlcnN9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6SGFzaCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1kaXZpZGVyIj48L2Rpdj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24gJHt0aGlzLmNvcHlTdWNjZXNzPyJzdWNjZXNzIjoiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iQ29weSBDb2RlIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jb3B5Q29kZX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5jb3B5U3VjY2Vzcz8ibHVjaWRlOkNoZWNrIjoibHVjaWRlOkNvcHkifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIHRpdGxlPSJFeHBhbmQiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLm9wZW5GdWxsc2NyZWVufQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOk1heGltaXplMiJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3Itd3JhcHBlciI+CiAgICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tb25hY28KICAgICAgICAgICAgICAuY29udGVudD0ke3RoaXMudmFsdWV9CiAgICAgICAgICAgICAgLmxhbmd1YWdlPSR7dGhpcy5sYW5ndWFnZX0KICAgICAgICAgICAgICAud29yZFdyYXA9JHt0aGlzLndvcmRXcmFwfQogICAgICAgICAgICAgIEBjb250ZW50LWNoYW5nZT0ke3RoaXMuaGFuZGxlQ29udGVudENoYW5nZX0KICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtbW9uYWNvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXt0aGlzLmVkaXRvckVsZW1lbnQ9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKSx0aGlzLmVkaXRvckVsZW1lbnQmJnRoaXMuZWRpdG9yRWxlbWVudC5jb250ZW50U3ViamVjdC5zdWJzY3JpYmUoTD0+e3RoaXMudmFsdWUhPT1MJiYodGhpcy52YWx1ZT1MLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpKX0pfXRvZ2dsZUxhbmd1YWdlRHJvcGRvd24oKXt0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW49IXRoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3Blbn1oYW5kbGVMYW5ndWFnZUJsdXIoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5pc0xhbmd1YWdlRHJvcGRvd25PcGVuPSExfSwxNTApfWFzeW5jIHNlbGVjdExhbmd1YWdlKEwsayl7aWYoTC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubGFuZ3VhZ2U9ayx0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW49ITEsdGhpcy5lZGl0b3JFbGVtZW50KXt0aGlzLmVkaXRvckVsZW1lbnQubGFuZ3VhZ2U9aztsZXQgUz0oYXdhaXQgdGhpcy5lZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2UpLmdldE1vZGVsKCk7UyYmd2luZG93Lm1vbmFjby5lZGl0b3Iuc2V0TW9kZWxMYW5ndWFnZShTLGspfX10b2dnbGVXb3JkV3JhcCgpe3RoaXMud29yZFdyYXA9dGhpcy53b3JkV3JhcD09PSJvbiI/Im9mZiI6Im9uIix0aGlzLnVwZGF0ZUVkaXRvck9wdGlvbigid29yZFdyYXAiLHRoaXMud29yZFdyYXApfXRvZ2dsZUxpbmVOdW1iZXJzKCl7dGhpcy5zaG93TGluZU51bWJlcnM9IXRoaXMuc2hvd0xpbmVOdW1iZXJzLHRoaXMudXBkYXRlRWRpdG9yT3B0aW9uKCJsaW5lTnVtYmVycyIsdGhpcy5zaG93TGluZU51bWJlcnM/Im9uIjoib2ZmIil9YXN5bmMgdXBkYXRlRWRpdG9yT3B0aW9uKEwsayl7dGhpcy5lZGl0b3JFbGVtZW50JiYoYXdhaXQgdGhpcy5lZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2UpLnVwZGF0ZU9wdGlvbnMoe1tMXTprfSl9YXN5bmMgY29weUNvZGUoKXt0cnl7YXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy52YWx1ZSksdGhpcy5jb3B5U3VjY2Vzcz0hMCxzZXRUaW1lb3V0KCgpPT57dGhpcy5jb3B5U3VjY2Vzcz0hMX0sMmUzKX1jYXRjaChMKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY29weSBjb2RlOiIsTCl9fWhhbmRsZUNvbnRlbnRDaGFuZ2UoTCl7bGV0IGs9TC5kZXRhaWw7dGhpcy52YWx1ZSE9PWsmJih0aGlzLnZhbHVlPWssdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpfWFzeW5jIG9wZW5GdWxsc2NyZWVuKCl7bGV0IEw9dGhpcy52YWx1ZSxrPW51bGwsTj10aGlzLmxhbmd1YWdlLFM9dGhpcy53b3JkV3JhcCxUPXRoaXMuc2hvd0xpbmVOdW1iZXJzLFI9ITEsQT0hMSxGPSgpPT57bGV0IHplPW1JLmZpbmQoVz0+Vy5rZXk9PT1OKTtyZXR1cm4gemU/emUubGFiZWw6IlR5cGVTY3JpcHQifSxhZT16ZT0+e2xldCBXPXplLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbC10b29sYmFyIik7aWYoIVcpcmV0dXJuO2xldCBOZT1XLnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1idXR0b24gc3BhbiIpO05lJiYoTmUudGV4dENvbnRlbnQ9RigpKTtsZXQgUmU9Vy5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTtSZSYmUmUuY2xhc3NMaXN0LnRvZ2dsZSgiYWN0aXZlIixTPT09Im9uIik7bGV0IFg9Vy5xdWVyeVNlbGVjdG9yKCIubGluZXMtYnRuIik7WCYmWC5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLFQpO2xldCBJPVcucXVlcnlTZWxlY3RvcigiLmNvcHktYnRuIiksTz1JPy5xdWVyeVNlbGVjdG9yKCJkZWVzLWljb24iKTtJJiZPJiYoSS5jbGFzc0xpc3QudG9nZ2xlKCJzdWNjZXNzIixBKSxPLmljb249QT8ibHVjaWRlOkNoZWNrIjoibHVjaWRlOkNvcHkiKTtsZXQgRz1XLnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1kcm9wZG93biIpO0cmJihHLnN0eWxlLmRpc3BsYXk9Uj8iYmxvY2siOiJub25lIil9LFY9YXdhaXQgZTEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzp0aGlzLmxhYmVsfHwiQ29kZSBFZGl0b3IiLHdpZHRoOiJmdWxsc2NyZWVuIixjb250ZW50UGFkZGluZzowLGNvbnRlbnQ6TWAKICAgICAgICA8c3R5bGU+CiAgICAgICAgICAubW9kYWwtdG9vbGJhciB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwiaHNsKDAgMCUgNyUpIil9OwogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1sZWZ0IHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1yaWdodCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNHB4OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLXNlbGVjdG9yIHsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNnB4OwogICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC5sYW5ndWFnZS1kcm9wZG93biB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgdG9wOiAxMDAlOwogICAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI1MHB4OwogICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICBtaW4td2lkdGg6IDE0MHB4OwogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbiB7CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC5sYW5ndWFnZS1vcHRpb24uc2VsZWN0ZWQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1idXR0b24gewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDUlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCJoc2woMCAwJSAxNSUpIil9OwogICAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uLmFjdGl2ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWJ1dHRvbi5zdWNjZXNzIHsKICAgICAgICAgICAgY29sb3I6IGhzbCgxNDIuMSA3Ni4yJSAzNi4zJSk7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1kaXZpZGVyIHsKICAgICAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtZWRpdG9yLXdyYXBwZXIgewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDE3NXB4KTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC10b29sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLXNlbGVjdG9yIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYW5ndWFnZS1idXR0b24iPgogICAgICAgICAgICAgICAgPHNwYW4+JHtGKCl9PC9zcGFuPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Q2hldnJvbkRvd24ifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICR7bUkubWFwKHplPT5NYAogICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imxhbmd1YWdlLW9wdGlvbiAke3plLmtleT09PU4/InNlbGVjdGVkIjoiIn0iCiAgICAgICAgICAgICAgICAgICAgZGF0YS1sYW5nPSIke3plLmtleX0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke3plLmxhYmVsfQogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1yaWdodCI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2xiYXItYnV0dG9uIHdyYXAtYnRuICR7Uz09PSJvbiI/ImFjdGl2ZSI6IiJ9IiB0aXRsZT0iV29yZCBXcmFwIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpXcmFwVGV4dCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiBsaW5lcy1idG4gJHtUPyJhY3RpdmUiOiIifSIgdGl0bGU9IkxpbmUgTnVtYmVycyI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6SGFzaCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWRpdmlkZXIiPjwvZGl2PgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiBjb3B5LWJ0biIgdGl0bGU9IkNvcHkgQ29kZSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Q29weSJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZWRpdG9yLXdyYXBwZXIiPgogICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAuY29udGVudD0ke0x9CiAgICAgICAgICAgIC5sYW5ndWFnZT0ke059CiAgICAgICAgICAgIC53b3JkV3JhcD0ke1N9CiAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+CiAgICAgICAgPC9kaXY+CiAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJDYW5jZWwiLGFjdGlvbjphc3luYyB6ZT0+e2F3YWl0IHplLmRlc3Ryb3koKX19LHtuYW1lOiJTYXZlICYgQ2xvc2UiLGFjdGlvbjphc3luYyB6ZT0+e2lmKGs9emUuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIiksayl7bGV0IE5lPShhd2FpdCBrLmVkaXRvckRlZmVycmVkLnByb21pc2UpLmdldFZhbHVlKCk7dGhpcy5zZXRWYWx1ZShOZSl9YXdhaXQgemUuZGVzdHJveSgpfX1dfSk7YXdhaXQgbmV3IFByb21pc2UoemU9PnNldFRpbWVvdXQoemUsMTAwKSksaz1WLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpO2xldCBTZT1WLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbC10b29sYmFyIik7aWYoU2Upe2xldCB6ZT1TZS5xdWVyeVNlbGVjdG9yKCIubGFuZ3VhZ2UtYnV0dG9uIik7emU/LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e1I9IVIsYWUoVil9KTtsZXQgVz1TZS5xdWVyeVNlbGVjdG9yQWxsKCIubGFuZ3VhZ2Utb3B0aW9uIik7Vy5mb3JFYWNoKEk9PntJLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixhc3luYygpPT57bGV0IE89SS5kYXRhc2V0Lmxhbmc7aWYoTyYmayl7Tj1PLFI9ITE7bGV0IGo9KGF3YWl0IGsuZWRpdG9yRGVmZXJyZWQucHJvbWlzZSkuZ2V0TW9kZWwoKTtqJiZ3aW5kb3cubW9uYWNvLmVkaXRvci5zZXRNb2RlbExhbmd1YWdlKGosTyksVy5mb3JFYWNoKHNlPT5zZS5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZCIpKSxJLmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkIiksYWUoVil9fSl9KSxTZS5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKT8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGFzeW5jKCk9PntTPVM9PT0ib24iPyJvZmYiOiJvbiIsayYmKGF3YWl0IGsuZWRpdG9yRGVmZXJyZWQucHJvbWlzZSkudXBkYXRlT3B0aW9ucyh7d29yZFdyYXA6U30pLGFlKFYpfSksU2UucXVlcnlTZWxlY3RvcigiLmxpbmVzLWJ0biIpPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsYXN5bmMoKT0+e1Q9IVQsayYmKGF3YWl0IGsuZWRpdG9yRGVmZXJyZWQucHJvbWlzZSkudXBkYXRlT3B0aW9ucyh7bGluZU51bWJlcnM6VD8ib24iOiJvZmYifSksYWUoVil9KSxTZS5xdWVyeVNlbGVjdG9yKCIuY29weS1idG4iKT8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGFzeW5jKCk9PntpZihrKXtsZXQgTz0oYXdhaXQgay5lZGl0b3JEZWZlcnJlZC5wcm9taXNlKS5nZXRWYWx1ZSgpO3RyeXthd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChPKSxBPSEwLGFlKFYpLHNldFRpbWVvdXQoKCk9PntBPSExLGFlKFYpfSwyZTMpfWNhdGNoKEcpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjb3B5IGNvZGU6IixHKX19fSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLEk9PntSJiYhemU/LmNvbnRhaW5zKEkudGFyZ2V0KSYmKFI9ITEsYWUoVikpfSx7b25jZTohMH0pfX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKEwpe3RoaXMudmFsdWU9TCx0aGlzLmVkaXRvckVsZW1lbnQmJih0aGlzLmVkaXRvckVsZW1lbnQuY29udGVudD1MLHRoaXMuZWRpdG9yRWxlbWVudC5lZGl0b3JEZWZlcnJlZC5wcm9taXNlLnRoZW4oaz0+e2suZ2V0VmFsdWUoKSE9PUwmJmsuc2V0VmFsdWUoTCl9KSksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyl9c3RhdGlje1IyKHIsYSl9fTtyZXR1cm4gSD1yfSkoKTtmZSgpO3ZhciBxSXQ9KCk9Pk1gCiAgPHN0eWxlPgogICAgJHt0ZWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tb3V0cHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5kYXRlLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKTtlJiZlLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsYT0+e2NvbnNvbGUubG9nKCJCYXNpYyBkYXRlIHNlbGVjdGVkOiIsYS50YXJnZXQudmFsdWUpfSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIERhdGUgUGlja2VyIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBkYXRlIHNlbGVjdGlvbiB3aXRob3V0IHRpbWUifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iU2VsZWN0IERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iQ2hvb3NlIGEgZGF0ZSBmcm9tIHRoZSBjYWxlbmRhciIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IkV2ZW50IERhdGUgJiBUaW1lIl0nKSxhPXQucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJBcHBvaW50bWVudCJdJyk7ZSYmZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHI9PntsZXQgaT1yLnRhcmdldC52YWx1ZTtjb25zb2xlLmxvZygiMjRoIGZvcm1hdCBkYXRldGltZToiLGkpfSksYSYmYS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHI9PntsZXQgaT1yLnRhcmdldC52YWx1ZTtjb25zb2xlLmxvZygiMTJoIGZvcm1hdCBkYXRldGltZToiLGkpfSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkRhdGUgYW5kIFRpbWUgU2VsZWN0aW9uIn0gLnN1YnRpdGxlPSR7IkRhdGUgcGlja2VycyB3aXRoIHRpbWUgc2VsZWN0aW9uIGluIGRpZmZlcmVudCBmb3JtYXRzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkV2ZW50IERhdGUgJiBUaW1lIgogICAgICAgICAgZGVzY3JpcHRpb249IlNlbGVjdCBib3RoIGRhdGUgYW5kIHRpbWUgKDI0LWhvdXIgZm9ybWF0KSIKICAgICAgICAgIC5lbmFibGVUaW1lPSR7ITB9CiAgICAgICAgICB0aW1lRm9ybWF0PSIyNGgiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJBcHBvaW50bWVudCIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJEYXRlIGFuZCB0aW1lIHdpdGggQU0vUE0gc2VsZWN0b3IgKDE1LW1pbnV0ZSBpbmNyZW1lbnRzKSIKICAgICAgICAgIC5lbmFibGVUaW1lPSR7ITB9CiAgICAgICAgICB0aW1lRm9ybWF0PSIxMmgiCiAgICAgICAgICAubWludXRlSW5jcmVtZW50PSR7MTV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIikuZm9yRWFjaChhPT57YS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHI9PntsZXQgaT1yLnRhcmdldDtjb25zb2xlLmxvZyhgJHtpLmxhYmVsfSB2YWx1ZTpgLGkudmFsdWUpO2xldCBvPWkuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRhdGUtaW5wdXQiKTtvJiZjb25zb2xlLmxvZyhgJHtpLmxhYmVsfSBmb3JtYXR0ZWQ6YCxvLnZhbHVlKX0pfSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlRpbWV6b25lIFN1cHBvcnQifSAuc3VidGl0bGU9JHsiRGF0ZSBhbmQgdGltZSBzZWxlY3Rpb24gd2l0aCB0aW1lem9uZSBhd2FyZW5lc3MifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iTWVldGluZyBUaW1lICh3aXRoIFRpbWV6b25lKSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTZWxlY3QgYSBkYXRlL3RpbWUgYW5kIHRpbWV6b25lIGZvciB0aGUgbWVldGluZyIKICAgICAgICAgIC5lbmFibGVUaW1lPSR7ITB9CiAgICAgICAgICAuZW5hYmxlVGltZXpvbmU9JHshMH0KICAgICAgICAgIHRpbWVGb3JtYXQ9IjI0aCIKICAgICAgICAgIHRpbWV6b25lPSJBbWVyaWNhL05ld19Zb3JrIgogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iR2xvYmFsIEV2ZW50IFNjaGVkdWxlIgogICAgICAgICAgZGVzY3JpcHRpb249IlNjaGVkdWxlIGFuIGV2ZW50IGFjcm9zcyBkaWZmZXJlbnQgdGltZXpvbmVzIgogICAgICAgICAgLmVuYWJsZVRpbWU9JHshMH0KICAgICAgICAgIC5lbmFibGVUaW1lem9uZT0keyEwfQogICAgICAgICAgdGltZUZvcm1hdD0iMTJoIgogICAgICAgICAgdGltZXpvbmU9IkV1cm9wZS9Mb25kb24iCiAgICAgICAgICAubWludXRlSW5jcmVtZW50PSR7MzB9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7ZSYmZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGE9PntsZXQgcj1hLnRhcmdldC52YWx1ZTtpZihyKXtsZXQgaT1uZXcgRGF0ZShyKSxvPW5ldyBEYXRlLHM9TWF0aC5mbG9vcigoaS5nZXRUaW1lKCktby5nZXRUaW1lKCkpLygxZTMqNjAqNjAqMjQpKTtjb25zb2xlLmxvZyhgU2VsZWN0ZWQgZGF0ZSBpcyAke3N9IGRheXMgZnJvbSB0b2RheWApfX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIFJhbmdlIENvbnN0cmFpbnRzIn0gLnN1YnRpdGxlPSR7IkxpbWl0IHNlbGVjdGFibGUgZGF0ZXMgd2l0aCBtaW4gYW5kIG1heCB2YWx1ZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iRnV0dXJlIERhdGUgT25seSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDYW4gb25seSBzZWxlY3QgZGF0ZXMgZnJvbSB0b2RheSB0byA5MCBkYXlzIGluIHRoZSBmdXR1cmUiCiAgICAgICAgICAubWluRGF0ZT0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0KICAgICAgICAgIC5tYXhEYXRlPSR7bmV3IERhdGUoRGF0ZS5ub3coKSsyMTYwKjYwKjYwKjFlMykudG9JU09TdHJpbmcoKX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9eyJERC9NTS9ZWVlZIjoiRXVyb3BlYW4iLCJNTS9ERC9ZWVlZIjoiVVMiLCJZWVlZLU1NLUREIjoiSVNPIn07dC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKS5mb3JFYWNoKHI9PntyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsaT0+e2xldCBvPWkudGFyZ2V0LHM9by5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZGF0ZS1pbnB1dCIpO3MmJmNvbnNvbGUubG9nKGAke28ubGFiZWx9IGZvcm1hdDpgLHMudmFsdWUpfSl9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRGF0ZSBGb3JtYXRzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBkYXRlIGRpc3BsYXkgZm9ybWF0cyBmb3IgdmFyaW91cyByZWdpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF0ZS1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICAgIGxhYmVsPSJFdXJvcGVhbiBGb3JtYXQiCiAgICAgICAgICAgIGRhdGVGb3JtYXQ9IkREL01NL1lZWVkiCiAgICAgICAgICAgIC52YWx1ZT0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iVVMgRm9ybWF0IgogICAgICAgICAgICBkYXRlRm9ybWF0PSJNTS9ERC9ZWVlZIgogICAgICAgICAgICAudmFsdWU9JHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IklTTyBGb3JtYXQiCiAgICAgICAgICAgIGRhdGVGb3JtYXQ9IllZWVktTU0tREQiCiAgICAgICAgICAgIC52YWx1ZT0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZGF0ZXBpY2tlcltyZXF1aXJlZF0iKTtlJiZlLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT57ZS5nZXRWYWx1ZSgpfHxjb25zb2xlLmxvZygiUmVxdWlyZWQgZGF0ZSBmaWVsZCBpcyBlbXB0eSIpfSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkZvcm0gU3RhdGVzIn0gLnN1YnRpdGxlPSR7IlJlcXVpcmVkIGFuZCBkaXNhYmxlZCBzdGF0ZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iQmlydGggRGF0ZSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIgogICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VsZWN0IHlvdXIgYmlydGggZGF0ZSIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkRpc2FibGVkIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBjYW5ub3QgYmUgZWRpdGVkIgogICAgICAgICAgLmRpc2FibGVkPSR7ITB9CiAgICAgICAgICAudmFsdWU9JHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJVUyBDYWxlbmRhciJdJyksYT10LnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZGF0ZXBpY2tlcltsYWJlbD0iRVUgQ2FsZW5kYXIiXScpO2UmJmNvbnNvbGUubG9nKCJVUyBDYWxlbmRhciBzdGFydHMgb24gU3VuZGF5ICgwKSIpLGEmJmNvbnNvbGUubG9nKCJFVSBDYWxlbmRhciBzdGFydHMgb24gTW9uZGF5ICgxKSIpfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJDYWxlbmRhciBDdXN0b21pemF0aW9uIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCB3ZWVrIHN0YXJ0IGRheXMgZm9yIHZhcmlvdXMgcmVnaW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRhdGUtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iVVMgQ2FsZW5kYXIiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJXZWVrIHN0YXJ0cyBvbiBTdW5kYXkiCiAgICAgICAgICAgIC53ZWVrU3RhcnRzT249JHswfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICAgIGxhYmVsPSJFVSBDYWxlbmRhciIKICAgICAgICAgICAgZGVzY3JpcHRpb249IldlZWsgc3RhcnRzIG9uIE1vbmRheSIKICAgICAgICAgICAgLndlZWtTdGFydHNPbj0kezF9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9KCk9PntsZXQgcj1bXSxpPW5ldyBEYXRlLG89aS5nZXRGdWxsWWVhcigpLHM9aS5nZXRNb250aCgpLGw9bmV3IERhdGUobyxzLDEpO2Zvcig7bC5nZXRNb250aCgpPT09czspKGwuZ2V0RGF5KCk9PT0wfHxsLmdldERheSgpPT09NikmJnIucHVzaChuZXcgRGF0ZShsKS50b0lTT1N0cmluZygpKSxsLnNldERhdGUobC5nZXREYXRlKCkrMSk7cmV0dXJuIHJ9LGE9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKTthJiYoYS5kaXNhYmxlZERhdGVzPWUoKSxjb25zb2xlLmxvZygiRGlzYWJsZWQgd2Vla2VuZCBkYXRlcyBmb3IgY3VycmVudCBtb250aCIpKX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRGlzYWJsZWQgRGF0ZXMifSAuc3VidGl0bGU9JHsiQ2FsZW5kYXIgd2l0aCBzcGVjaWZpYyBkYXRlcyBkaXNhYmxlZCAod2Vla2VuZHMgaW4gY3VycmVudCBtb250aCkifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iQXZhaWxhYmlsaXR5IENhbGVuZGFyIgogICAgICAgICAgZGVzY3JpcHRpb249IldlZWtlbmRzIGFyZSBkaXNhYmxlZCBmb3IgdGhlIGN1cnJlbnQgbW9udGgiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPW5ldyBEYXRlLGE9ZS5nZXRNb250aCgpLHI9ZS5nZXRGdWxsWWVhcigpLGk9W3tkYXRlOmAke3J9LSR7KGErMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LSR7ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YCx0aXRsZToiVGVhbSBNZWV0aW5nIix0eXBlOiJpbmZvIixjb3VudDoyfSx7ZGF0ZTpgJHtyfS0keyhhKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS0keyhlLmdldERhdGUoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gLHRpdGxlOiJQcm9qZWN0IERlYWRsaW5lIix0eXBlOiJ3YXJuaW5nIn0se2RhdGU6YCR7cn0tJHsoYSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHsoZS5nZXREYXRlKCkrMikudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YCx0aXRsZToiUmVsZWFzZSBEYXkiLHR5cGU6InN1Y2Nlc3MifSx7ZGF0ZTpgJHtyfS0keyhhKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS0keyhlLmdldERhdGUoKSs1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gLHRpdGxlOiJVcmdlbnQgRml4IFJlcXVpcmVkIix0eXBlOiJlcnJvciJ9LHtkYXRlOmAke3J9LSR7KGErMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LSR7KGUuZ2V0RGF0ZSgpKzcpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWAsdGl0bGU6Ik11bHRpcGxlIEV2ZW50cyBUb2RheSIsdHlwZToiaW5mbyIsY291bnQ6NX0se2RhdGU6YCR7cn0tJHsoYSsyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tMTVgLHRpdGxlOiJGdXR1cmUgUGxhbm5pbmcgU2Vzc2lvbiIsdHlwZToiaW5mbyJ9XSxvPXQucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7byYmKG8uZXZlbnRzPWksY29uc29sZS5sb2coIkNhbGVuZGFyIGV2ZW50cyBsb2FkZWQ6IixpKSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkNhbGVuZGFyIHdpdGggRXZlbnRzIn0gLnN1YnRpdGxlPSR7IlZpc3VhbCBmZWVkYmFjayBmb3Igc2NoZWR1bGVkIGV2ZW50cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBDYWxlbmRhciIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJEYXlzIHdpdGggY29sb3JlZCBkb3RzIGhhdmUgZXZlbnRzLiBIb3ZlciB0byBzZWUgZGV0YWlscy4iCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgPHN0cm9uZz5FdmVudCBMZWdlbmQ6PC9zdHJvbmc+PGJyPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDk2OWRhOyI+4pePIEluZm88L3NwYW4+IHwgCiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNkMjk5MjI7Ij7il48gV2FybmluZzwvc3Bhbj4gfCAKICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzJlYTA0MzsiPuKXjyBTdWNjZXNzPC9zcGFuPiB8IAogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2YyMjJlOyI+4pePIEVycm9yPC9zcGFuPjxicj4KICAgICAgICAgIDxlbT5EYXlzIHdpdGggbW9yZSB0aGFuIDMgZXZlbnRzIHNob3cgYSBjb3VudCBiYWRnZTwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKSxhPXQucXVlcnlTZWxlY3RvcigiI2V2ZW50LW91dHB1dCIpO2UmJmEmJihlLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIscj0+e2xldCBpPXIudGFyZ2V0LG89aS52YWx1ZTtpZihvKXtsZXQgcz1uZXcgRGF0ZShvKSxmPWkuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRhdGUtaW5wdXQiKT8udmFsdWV8fCJOL0EiO2EuaW5uZXJIVE1MPWAKICAgICAgICAgICAgICA8c3Ryb25nPkV2ZW50IHRyaWdnZXJlZCE8L3N0cm9uZz48YnI+CiAgICAgICAgICAgICAgSVNPIFZhbHVlOiAke299PGJyPgogICAgICAgICAgICAgIEZvcm1hdHRlZDogJHtmfTxicj4KICAgICAgICAgICAgICBEYXRlIG9iamVjdDogJHtzLnRvTG9jYWxlU3RyaW5nKCl9CiAgICAgICAgICAgIGB9ZWxzZSBhLmlubmVySFRNTD0iPGVtPkRhdGUgY2xlYXJlZDwvZW0+In0pLGUuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9Pntjb25zb2xlLmxvZygiRGF0ZXBpY2tlciBsb3N0IGZvY3VzIil9KSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkV2ZW50IEhhbmRsaW5nIn0gLnN1YnRpdGxlPSR7IkludGVyYWN0aXZlIGRlbW9uc3RyYXRpb24gb2YgY2hhbmdlIGV2ZW50cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBEZW1vIgogICAgICAgICAgZGVzY3JpcHRpb249IlNlbGVjdCBhIGRhdGUgdG8gc2VlIHRoZSBldmVudCBkZXRhaWxzIgogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJldmVudC1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICA8ZW0+U2VsZWN0IGEgZGF0ZSB0byBzZWUgZXZlbnQgZGV0YWlscy4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICA8L2Rpdj4KYDtmZSgpO3ZhciBWSXQ9Wy4uLlhlLmJhc2VTdHlsZXMscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5kYXRlLWlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgIH0KCiAgICAgIC5kYXRlLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXRlLWlucHV0OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dDpmb2N1cywKICAgICAgLmRhdGUtaW5wdXQub3BlbiB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMjQgNzEuNCUgNC4xJSkiKX0sCiAgICAgICAgICAgICAgICAgICAgMCAwIDAgNHB4ICR7cC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUgLyAwLjEpIiwiaHNsKDIxMCAyMCUgOTglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIEljb24gY29udGFpbmVyIHVzaW5nIGZsZXhib3ggZm9yIGJldHRlciBwb3NpdGlvbmluZyAqLwogICAgICAuaWNvbi1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5pY29uLWNvbnRhaW5lciA+ICogewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAuY2FsZW5kYXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246ZGlzYWJsZWQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIENhbGVuZGFyIFBvcHVwIFN0eWxlcyAqLwogICAgICAuY2FsZW5kYXItcG9wdXAgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm0sIG9wYWNpdHk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAke3AuYmRUaGVtZSgiMCAxMHB4IDE1cHggLTNweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgNHB4IDZweCAtNHB4IGhzbCgwIDAlIDAlIC8gMC4xKSIsIjAgMTBweCAxNXB4IC0zcHggaHNsKDAgMCUgMCUgLyAwLjIpLCAwIDRweCA2cHggLTRweCBoc2woMCAwJSAwJSAvIDAuMikiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICB6LWluZGV4OiA1MDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1pbi13aWR0aDogMjgwcHg7CiAgICAgIH0KCiAgICAgIC5jYWxlbmRhci1wb3B1cC50b3AgewogICAgICAgIGJvdHRvbTogY2FsYygxMDAlICsgNHB4KTsKICAgICAgICB0b3A6IGF1dG87CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7CiAgICAgIH0KCiAgICAgIC5jYWxlbmRhci1wb3B1cC5ib3R0b20gewogICAgICAgIHRvcDogMTAwJTsKICAgICAgfQoKICAgICAgLmNhbGVuZGFyLXBvcHVwLnNob3cgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC8qIENhbGVuZGFyIEhlYWRlciAqLwogICAgICAuY2FsZW5kYXItaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5tb250aC15ZWFyLWRpc3BsYXkgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgZmxleDogMTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5uYXYtYnV0dG9uIHsKICAgICAgICB3aWR0aDogMjhweDsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5uYXYtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5uYXYtYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAvKiBXZWVrZGF5IGhlYWRlcnMgKi8KICAgICAgLndlZWtkYXlzIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIDFmcik7CiAgICAgICAgZ2FwOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQoKICAgICAgLndlZWtkYXkgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBwYWRkaW5nOiAwIDAgOHB4IDA7CiAgICAgIH0KCiAgICAgIC8qIERheXMgZ3JpZCAqLwogICAgICAuZGF5cy1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIDFmcik7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5kYXkgewogICAgICAgIGFzcGVjdC1yYXRpbzogMTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB3aWR0aDogMzZweDsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5kYXk6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXkub3RoZXItbW9udGggewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmRheS50b2RheSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAuZGF5LnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAuZGF5LmRpc2FibGVkIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuMzsKICAgICAgfQoKICAgICAgLyogRXZlbnQgaW5kaWNhdG9ycyAqLwogICAgICAuZGF5Lmhhcy1ldmVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZXZlbnQtaW5kaWNhdG9yIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiA0cHg7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMnB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuZXZlbnQtZG90IHsKICAgICAgICB3aWR0aDogNHB4OwogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtZG90LmluZm8gewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjExIDcwJSA1MiUpIiwiaHNsKDIxMSA3MCUgNjIlKSIpfTsKICAgICAgfQoKICAgICAgLmV2ZW50LWRvdC53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDQ1IDkwJSA0NSUpIiwiaHNsKDQ1IDkwJSA1NSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtZG90LnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMTQyIDY5JSA0NSUpIiwiaHNsKDE0MiA2OSUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmV2ZW50LWRvdC5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwiaHNsKDAgNzIlIDYxJSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1jb3VudCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMnB4OwogICAgICAgIHJpZ2h0OiAycHg7CiAgICAgICAgbWluLXdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgNzIlIDUxJSkiLCJoc2woMCA3MiUgNjElKSIpfTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgfQoKICAgICAgLyogVG9vbHRpcCBmb3IgZXZlbnQgZGV0YWlscyAqLwogICAgICAuZXZlbnQtdG9vbHRpcCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogY2FsYygxMDAlICsgOHB4KTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMCUpIil9OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH0KCiAgICAgIC5ldmVudC10b29sdGlwOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgICAgIGJvcmRlcjogNHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci10b3AtY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLmRheS5oYXMtZXZlbnQ6aG92ZXIgLmV2ZW50LXRvb2x0aXAgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC8qIFRpbWUgc2VsZWN0b3IgKi8KICAgICAgLnRpbWUtc2VsZWN0b3IgewogICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtc2VsZWN0b3ItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtaW5wdXRzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0IHsKICAgICAgICB3aWR0aDogNjVweDsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLnRpbWUtaW5wdXQ6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlIC8gMC4xKSIsImhzbCgyMTAgMjAlIDk4JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLXNlcGFyYXRvciB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIyNCA3MS40JSA0LjElKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uOmhvdmVyOm5vdCguc2VsZWN0ZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAvKiBBY3Rpb24gYnV0dG9ucyAqLwogICAgICAuY2FsZW5kYXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIyNCA3MS40JSA0LjElKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjI0IDcxLjQlIDQuMSUpIiwiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiLCJoc2woMCA2Mi44JSAzMC42JSAvIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjIpIiwiaHNsKDAgNjIuOCUgMzAuNiUgLyAwLjIpIil9OwogICAgICB9CgogICAgICAvKiBUaW1lem9uZSBzZWxlY3RvciAqLwogICAgICAudGltZXpvbmUtc2VsZWN0b3IgewogICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWV6b25lLXNlbGVjdG9yLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3QgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIyNCA3MS40JSA0LjElKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlIC8gMC4xKSIsImhzbCgyMTAgMjAlIDk4JSAvIDAuMSkiKX07CiAgICAgIH0KICAgIGBdO2ZlKCk7dmFyIFVJdD10PT57bGV0IGU9WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLGE9dC53ZWVrU3RhcnRzT249PT0xP1siTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIiwiU3UiXTpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0scj10LmdldERheXNJbk1vbnRoKCksaT10LnNlbGVjdGVkSG91cjwxMixvPXQuZ2V0VGltZXpvbmVzKCk7cmV0dXJuIE1gCiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0LmxhYmVsfSAuZGVzY3JpcHRpb249JHt0LmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0LnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1jb250YWluZXIiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgIGNsYXNzPSJkYXRlLWlucHV0ICR7dC5pc09wZW5lZD8ib3BlbiI6IiJ9IgogICAgICAgICAgICAgIC52YWx1ZT0ke3QuZm9ybWF0RGF0ZSh0LnZhbHVlKX0KICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHt0LnBsYWNlaG9sZGVyfQogICAgICAgICAgICAgID9kaXNhYmxlZD0ke3QuZGlzYWJsZWR9CiAgICAgICAgICAgICAgQGNsaWNrPSR7dC50b2dnbGVDYWxlbmRhcn0KICAgICAgICAgICAgICBAa2V5ZG93bj0ke3QuaGFuZGxlS2V5ZG93bn0KICAgICAgICAgICAgICBAaW5wdXQ9JHt0LmhhbmRsZU1hbnVhbElucHV0fQogICAgICAgICAgICAgIEBibHVyPSR7dC5oYW5kbGVJbnB1dEJsdXJ9CiAgICAgICAgICAgICAgc3R5bGU9InBhZGRpbmctcmlnaHQ6ICR7dC52YWx1ZT8iNjRweCI6IjQwcHgifSIKICAgICAgICAgICAgLz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1jb250YWluZXIiPgogICAgICAgICAgICAgICR7dC52YWx1ZSYmIXQuZGlzYWJsZWQ/TWAKICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNsZWFyLWJ1dHRvbiIgQGNsaWNrPSR7dC5jbGVhclZhbHVlfSB0aXRsZT0iQ2xlYXIiPgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTp4IiBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjYWxlbmRhci1pY29uIiBpY29uPSJsdWNpZGU6Y2FsZW5kYXIiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICAgIDwhLS0gQ2FsZW5kYXIgUG9wdXAgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLXBvcHVwICR7dC5pc09wZW5lZD8ic2hvdyI6IiJ9ICR7dC5vcGVuc1RvVG9wPyJ0b3AiOiJib3R0b20ifSI+CiAgICAgICAgICAgICAgPCEtLSBNb250aC9ZZWFyIE5hdmlnYXRpb24gLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsZW5kYXItaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke3QucHJldmlvdXNNb250aH0+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOmNoZXZyb25MZWZ0IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb250aC15ZWFyLWRpc3BsYXkiPgogICAgICAgICAgICAgICAgICAke2VbdC52aWV3RGF0ZS5nZXRNb250aCgpXX0gJHt0LnZpZXdEYXRlLmdldEZ1bGxZZWFyKCl9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke3QubmV4dE1vbnRofT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Y2hldnJvblJpZ2h0IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gV2Vla2RheSBIZWFkZXJzIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndlZWtkYXlzIj4KICAgICAgICAgICAgICAgICR7YS5tYXAocz0+TWA8ZGl2IGNsYXNzPSJ3ZWVrZGF5Ij4ke3N9PC9kaXY+YCl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gRGF5cyBHcmlkIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRheXMtZ3JpZCI+CiAgICAgICAgICAgICAgICAke3IubWFwKHM9PntsZXQgbD10LmlzVG9kYXkocyksZj10LmlzU2VsZWN0ZWQocyksYz1zLmdldE1vbnRoKCkhPT10LnZpZXdEYXRlLmdldE1vbnRoKCksdT10LmlzRGlzYWJsZWQocyksZD10LmdldEV2ZW50c0ZvckRhdGUocyksaD1kLmxlbmd0aD4wLGc9ZC5yZWR1Y2UoKGIseCk9PmIrKHguY291bnR8fDEpLDApO3JldHVybiBNYAogICAgICAgICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZGF5ICR7Yz8ib3RoZXItbW9udGgiOiIifSAke2w/InRvZGF5IjoiIn0gJHtmPyJzZWxlY3RlZCI6IiJ9ICR7dT8iZGlzYWJsZWQiOiIifSAke2g/Imhhcy1ldmVudCI6IiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PiF1JiZ0LnNlbGVjdERhdGUocyl9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgJHtzLmdldERhdGUoKX0KICAgICAgICAgICAgICAgICAgICAgICR7aD9NYAogICAgICAgICAgICAgICAgICAgICAgICAke2c+Mz9NYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWNvdW50Ij4ke2d9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIGA6TWAKICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJldmVudC1pbmRpY2F0b3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkLnNsaWNlKDAsMykubWFwKGI9Pk1gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWRvdCAke2IudHlwZXx8ImluZm8ifSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICAgICAgICAgICAgJHtkWzBdLnRpdGxlP01gCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtdG9vbHRpcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RbMF0udGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2c+MT9NYCAoKyR7Zy0xfSBtb3JlKWA6IiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgICAgICAgICBgOiIifQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgfSl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gVGltZSBTZWxlY3RvciAtLT4KICAgICAgICAgICAgICAke3QuZW5hYmxlVGltZT9NYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZS1zZWxlY3RvciI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbWUtc2VsZWN0b3ItdGl0bGUiPlRpbWU8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZS1pbnB1dHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCAKICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIgCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGltZS1pbnB1dCIgCiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0LnRpbWVGb3JtYXQ9PT0iMTJoIj8odC5zZWxlY3RlZEhvdXI9PT0wPzEyOnQuc2VsZWN0ZWRIb3VyPjEyP3Quc2VsZWN0ZWRIb3VyLTEyOnQuc2VsZWN0ZWRIb3VyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKTp0LnNlbGVjdGVkSG91ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0ke3M9PnQuaGFuZGxlSG91cklucHV0KHMpfQogICAgICAgICAgICAgICAgICAgICAgbWluPSIke3QudGltZUZvcm1hdD09PSIxMmgiPzE6MH0iCiAgICAgICAgICAgICAgICAgICAgICBtYXg9IiR7dC50aW1lRm9ybWF0PT09IjEyaCI/MTI6MjN9IgogICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUtc2VwYXJhdG9yIj46PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCAKICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIgCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGltZS1pbnB1dCIgCiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0LnNlbGVjdGVkTWludXRlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfQogICAgICAgICAgICAgICAgICAgICAgQGlucHV0PSR7cz0+dC5oYW5kbGVNaW51dGVJbnB1dChzKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTkiCiAgICAgICAgICAgICAgICAgICAgICBzdGVwPSIke3QubWludXRlSW5jcmVtZW50fHwxfSIKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICR7dC50aW1lRm9ybWF0PT09IjEyaCI/TWAKICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFtLXBtLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYW0tcG0tYnV0dG9uICR7aT8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dC5zZXRBTVBNKCJhbSIpfQogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgQU0KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImFtLXBtLWJ1dHRvbiAke2k/IiI6InNlbGVjdGVkIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PnQuc2V0QU1QTSgicG0iKX0KICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgIFBNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgOiIifQoKICAgICAgICAgICAgICA8IS0tIFRpbWV6b25lIFNlbGVjdG9yIC0tPgogICAgICAgICAgICAgICR7dC5lbmFibGVUaW1lem9uZT9NYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZXpvbmUtc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lem9uZS1zZWxlY3Rvci10aXRsZSI+VGltZXpvbmU8L2Rpdj4KICAgICAgICAgICAgICAgICAgPHNlbGVjdCAKICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGltZXpvbmUtc2VsZWN0IiAKICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0LnRpbWV6b25lfQogICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHtzPT50LmhhbmRsZVRpbWV6b25lQ2hhbmdlKHMpfQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgJHtvLm1hcChzPT5NYAogICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJHtzLnZhbHVlfSIgP3NlbGVjdGVkPSR7cy52YWx1ZT09PXQudGltZXpvbmV9PgogICAgICAgICAgICAgICAgICAgICAgICAke3MubGFiZWx9CiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgOiIifQoKICAgICAgICAgICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiB0b2RheS1idXR0b24iIEBjbGljaz0ke3Quc2VsZWN0VG9kYXl9PgogICAgICAgICAgICAgICAgICBUb2RheQogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIGNsZWFyLWJ1dHRvbiIgQGNsaWNrPSR7dC5jbGVhcn0+CiAgICAgICAgICAgICAgICAgIENsZWFyCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYH07ZmUoKTtGdCgpO3ZhciBOMT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LGJ0PWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxaRGU9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKV0sZSxhPVtdLHIsaT1YZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXSx2LHk9W10sdz1bXSxFLEM9W10sej1bXSxQLF89W10sJD1bXSxILEw9W10saz1bXSxOLFM9W10sVD1bXSxSLEE9W10sRj1bXSxhZSxWPVtdLFNlPVtdLHplLFc9W10sTmU9W10sUmUsWD1bXSxJPVtdLE8sRz1bXSxqPVtdLHNlLGtlPVtdLERlPVtdLE9lLFU9W10sQj1bXSxvZSx2ZT1bXSx5ZT1bXSwkZSxuZT1bXSxyZT1bXSxnZSxFZT1bXSxydD1bXTt2YXIgdWU9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBaPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6U3RyaW5nfSldLGY9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxkPVtEKHt0eXBlOlN0cmluZ30pXSxiPVtEKHt0eXBlOk51bWJlcn0pXSx2PVtEKHt0eXBlOlN0cmluZ30pXSxFPVtEKHt0eXBlOlN0cmluZ30pXSxQPVtEKHt0eXBlOlN0cmluZ30pXSxIPVtEKHt0eXBlOkFycmF5fSldLE49W0Qoe3R5cGU6TnVtYmVyfSldLFI9W0Qoe3R5cGU6U3RyaW5nfSldLGFlPVtEKHt0eXBlOkJvb2xlYW59KV0semU9W0Qoe3R5cGU6U3RyaW5nfSldLFJlPVtEKHt0eXBlOkFycmF5fSldLE89W2xlKCldLHNlPVtsZSgpXSxPZT1bbGUoKV0sb2U9W2xlKCldLCRlPVtsZSgpXSxnZT1bbGUoKV0sTjEodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sj0+InZhbHVlImluIEosZ2V0Oko9PkoudmFsdWUsc2V0OihKLGRlKT0+e0oudmFsdWU9ZGV9fSxtZXRhZGF0YTpafSxzLGwpLE4xKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZW5hYmxlVGltZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sj0+ImVuYWJsZVRpbWUiaW4gSixnZXQ6Sj0+Si5lbmFibGVUaW1lLHNldDooSixkZSk9PntKLmVuYWJsZVRpbWU9ZGV9fSxtZXRhZGF0YTpafSxjLHUpLE4xKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGltZUZvcm1hdCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sj0+InRpbWVGb3JtYXQiaW4gSixnZXQ6Sj0+Si50aW1lRm9ybWF0LHNldDooSixkZSk9PntKLnRpbWVGb3JtYXQ9ZGV9fSxtZXRhZGF0YTpafSxoLGcpLE4xKHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWludXRlSW5jcmVtZW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpKPT4ibWludXRlSW5jcmVtZW50ImluIEosZ2V0Oko9PkoubWludXRlSW5jcmVtZW50LHNldDooSixkZSk9PntKLm1pbnV0ZUluY3JlbWVudD1kZX19LG1ldGFkYXRhOlp9LHgsbSksTjEodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkYXRlRm9ybWF0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpKPT4iZGF0ZUZvcm1hdCJpbiBKLGdldDpKPT5KLmRhdGVGb3JtYXQsc2V0OihKLGRlKT0+e0ouZGF0ZUZvcm1hdD1kZX19LG1ldGFkYXRhOlp9LHksdyksTjEodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtaW5EYXRlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpKPT4ibWluRGF0ZSJpbiBKLGdldDpKPT5KLm1pbkRhdGUsc2V0OihKLGRlKT0+e0oubWluRGF0ZT1kZX19LG1ldGFkYXRhOlp9LEMseiksTjEodGhpcyxudWxsLFAse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYXhEYXRlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpKPT4ibWF4RGF0ZSJpbiBKLGdldDpKPT5KLm1heERhdGUsc2V0OihKLGRlKT0+e0oubWF4RGF0ZT1kZX19LG1ldGFkYXRhOlp9LF8sJCksTjEodGhpcyxudWxsLEgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkaXNhYmxlZERhdGVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpKPT4iZGlzYWJsZWREYXRlcyJpbiBKLGdldDpKPT5KLmRpc2FibGVkRGF0ZXMsc2V0OihKLGRlKT0+e0ouZGlzYWJsZWREYXRlcz1kZX19LG1ldGFkYXRhOlp9LEwsayksTjEodGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ3ZWVrU3RhcnRzT24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOko9PiJ3ZWVrU3RhcnRzT24iaW4gSixnZXQ6Sj0+Si53ZWVrU3RhcnRzT24sc2V0OihKLGRlKT0+e0oud2Vla1N0YXJ0c09uPWRlfX0sbWV0YWRhdGE6Wn0sUyxUKSxOMSh0aGlzLG51bGwsUix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBsYWNlaG9sZGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpKPT4icGxhY2Vob2xkZXIiaW4gSixnZXQ6Sj0+Si5wbGFjZWhvbGRlcixzZXQ6KEosZGUpPT57Si5wbGFjZWhvbGRlcj1kZX19LG1ldGFkYXRhOlp9LEEsRiksTjEodGhpcyxudWxsLGFlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZW5hYmxlVGltZXpvbmUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOko9PiJlbmFibGVUaW1lem9uZSJpbiBKLGdldDpKPT5KLmVuYWJsZVRpbWV6b25lLHNldDooSixkZSk9PntKLmVuYWJsZVRpbWV6b25lPWRlfX0sbWV0YWRhdGE6Wn0sVixTZSksTjEodGhpcyxudWxsLHplLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGltZXpvbmUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOko9PiJ0aW1lem9uZSJpbiBKLGdldDpKPT5KLnRpbWV6b25lLHNldDooSixkZSk9PntKLnRpbWV6b25lPWRlfX0sbWV0YWRhdGE6Wn0sVyxOZSksTjEodGhpcyxudWxsLFJlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXZlbnRzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpKPT4iZXZlbnRzImluIEosZ2V0Oko9PkouZXZlbnRzLHNldDooSixkZSk9PntKLmV2ZW50cz1kZX19LG1ldGFkYXRhOlp9LFgsSSksTjEodGhpcyxudWxsLE8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc09wZW5lZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sj0+ImlzT3BlbmVkImluIEosZ2V0Oko9PkouaXNPcGVuZWQsc2V0OihKLGRlKT0+e0ouaXNPcGVuZWQ9ZGV9fSxtZXRhZGF0YTpafSxHLGopLE4xKHRoaXMsbnVsbCxzZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im9wZW5zVG9Ub3AiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOko9PiJvcGVuc1RvVG9wImluIEosZ2V0Oko9Pkoub3BlbnNUb1RvcCxzZXQ6KEosZGUpPT57Si5vcGVuc1RvVG9wPWRlfX0sbWV0YWRhdGE6Wn0sa2UsRGUpLE4xKHRoaXMsbnVsbCxPZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkRGF0ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sj0+InNlbGVjdGVkRGF0ZSJpbiBKLGdldDpKPT5KLnNlbGVjdGVkRGF0ZSxzZXQ6KEosZGUpPT57Si5zZWxlY3RlZERhdGU9ZGV9fSxtZXRhZGF0YTpafSxVLEIpLE4xKHRoaXMsbnVsbCxvZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZpZXdEYXRlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpKPT4idmlld0RhdGUiaW4gSixnZXQ6Sj0+Si52aWV3RGF0ZSxzZXQ6KEosZGUpPT57Si52aWV3RGF0ZT1kZX19LG1ldGFkYXRhOlp9LHZlLHllKSxOMSh0aGlzLG51bGwsJGUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZEhvdXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOko9PiJzZWxlY3RlZEhvdXIiaW4gSixnZXQ6Sj0+Si5zZWxlY3RlZEhvdXIsc2V0OihKLGRlKT0+e0ouc2VsZWN0ZWRIb3VyPWRlfX0sbWV0YWRhdGE6Wn0sbmUscmUpLE4xKHRoaXMsbnVsbCxnZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkTWludXRlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpKPT4ic2VsZWN0ZWRNaW51dGUiaW4gSixnZXQ6Sj0+Si5zZWxlY3RlZE1pbnV0ZSxzZXQ6KEosZGUpPT57Si5zZWxlY3RlZE1pbnV0ZT1kZX19LG1ldGFkYXRhOlp9LEVlLHJ0KSxOMShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpafSxudWxsLGEpLHVlPXI9ZS52YWx1ZSxaJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlp9KX1zdGF0aWMgZGVtbz1xSXQ7c3RhdGljIGRlbW9Hcm91cD0iSW5wdXQiOyNlPWJ0KHRoaXMscywiIik7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKFope3RoaXMuI2U9Wn0jdD0oYnQodGhpcyxsKSxidCh0aGlzLGMsITEpKTtnZXQgZW5hYmxlVGltZSgpe3JldHVybiB0aGlzLiN0fXNldCBlbmFibGVUaW1lKFope3RoaXMuI3Q9Wn0jYT0oYnQodGhpcyx1KSxidCh0aGlzLGgsIjI0aCIpKTtnZXQgdGltZUZvcm1hdCgpe3JldHVybiB0aGlzLiNhfXNldCB0aW1lRm9ybWF0KFope3RoaXMuI2E9Wn0jcj0oYnQodGhpcyxnKSxidCh0aGlzLHgsMSkpO2dldCBtaW51dGVJbmNyZW1lbnQoKXtyZXR1cm4gdGhpcy4jcn1zZXQgbWludXRlSW5jcmVtZW50KFope3RoaXMuI3I9Wn0jaT0oYnQodGhpcyxtKSxidCh0aGlzLHksIllZWVktTU0tREQiKSk7Z2V0IGRhdGVGb3JtYXQoKXtyZXR1cm4gdGhpcy4jaX1zZXQgZGF0ZUZvcm1hdChaKXt0aGlzLiNpPVp9I289KGJ0KHRoaXMsdyksYnQodGhpcyxDLCIiKSk7Z2V0IG1pbkRhdGUoKXtyZXR1cm4gdGhpcy4jb31zZXQgbWluRGF0ZShaKXt0aGlzLiNvPVp9I3M9KGJ0KHRoaXMseiksYnQodGhpcyxfLCIiKSk7Z2V0IG1heERhdGUoKXtyZXR1cm4gdGhpcy4jc31zZXQgbWF4RGF0ZShaKXt0aGlzLiNzPVp9I249KGJ0KHRoaXMsJCksYnQodGhpcyxMLFtdKSk7Z2V0IGRpc2FibGVkRGF0ZXMoKXtyZXR1cm4gdGhpcy4jbn1zZXQgZGlzYWJsZWREYXRlcyhaKXt0aGlzLiNuPVp9I2w9KGJ0KHRoaXMsayksYnQodGhpcyxTLDEpKTtnZXQgd2Vla1N0YXJ0c09uKCl7cmV0dXJuIHRoaXMuI2x9c2V0IHdlZWtTdGFydHNPbihaKXt0aGlzLiNsPVp9I2M9KGJ0KHRoaXMsVCksYnQodGhpcyxBLCJZWVlZLU1NLUREIikpO2dldCBwbGFjZWhvbGRlcigpe3JldHVybiB0aGlzLiNjfXNldCBwbGFjZWhvbGRlcihaKXt0aGlzLiNjPVp9I2Q9KGJ0KHRoaXMsRiksYnQodGhpcyxWLCExKSk7Z2V0IGVuYWJsZVRpbWV6b25lKCl7cmV0dXJuIHRoaXMuI2R9c2V0IGVuYWJsZVRpbWV6b25lKFope3RoaXMuI2Q9Wn0jZj0oYnQodGhpcyxTZSksYnQodGhpcyxXLEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSkpO2dldCB0aW1lem9uZSgpe3JldHVybiB0aGlzLiNmfXNldCB0aW1lem9uZShaKXt0aGlzLiNmPVp9I3U9KGJ0KHRoaXMsTmUpLGJ0KHRoaXMsWCxbXSkpO2dldCBldmVudHMoKXtyZXR1cm4gdGhpcy4jdX1zZXQgZXZlbnRzKFope3RoaXMuI3U9Wn0jcD0oYnQodGhpcyxJKSxidCh0aGlzLEcsITEpKTtnZXQgaXNPcGVuZWQoKXtyZXR1cm4gdGhpcy4jcH1zZXQgaXNPcGVuZWQoWil7dGhpcy4jcD1afSNoPShidCh0aGlzLGopLGJ0KHRoaXMsa2UsITEpKTtnZXQgb3BlbnNUb1RvcCgpe3JldHVybiB0aGlzLiNofXNldCBvcGVuc1RvVG9wKFope3RoaXMuI2g9Wn0jbT0oYnQodGhpcyxEZSksYnQodGhpcyxVLG51bGwpKTtnZXQgc2VsZWN0ZWREYXRlKCl7cmV0dXJuIHRoaXMuI219c2V0IHNlbGVjdGVkRGF0ZShaKXt0aGlzLiNtPVp9I2c9KGJ0KHRoaXMsQiksYnQodGhpcyx2ZSxuZXcgRGF0ZSkpO2dldCB2aWV3RGF0ZSgpe3JldHVybiB0aGlzLiNnfXNldCB2aWV3RGF0ZShaKXt0aGlzLiNnPVp9I3g9KGJ0KHRoaXMseWUpLGJ0KHRoaXMsbmUsMCkpO2dldCBzZWxlY3RlZEhvdXIoKXtyZXR1cm4gdGhpcy4jeH1zZXQgc2VsZWN0ZWRIb3VyKFope3RoaXMuI3g9Wn0jYj0oYnQodGhpcyxyZSksYnQodGhpcyxFZSwwKSk7Z2V0IHNlbGVjdGVkTWludXRlKCl7cmV0dXJuIHRoaXMuI2J9c2V0IHNlbGVjdGVkTWludXRlKFope3RoaXMuI2I9Wn1zdGF0aWMgc3R5bGVzPVZJdDtnZXRUaW1lem9uZXMoKXtyZXR1cm5be3ZhbHVlOiJVVEMiLGxhYmVsOiJVVEMgKENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lKSJ9LHt2YWx1ZToiQW1lcmljYS9OZXdfWW9yayIsbGFiZWw6IkVhc3Rlcm4gVGltZSAoVVMgJiBDYW5hZGEpIn0se3ZhbHVlOiJBbWVyaWNhL0NoaWNhZ28iLGxhYmVsOiJDZW50cmFsIFRpbWUgKFVTICYgQ2FuYWRhKSJ9LHt2YWx1ZToiQW1lcmljYS9EZW52ZXIiLGxhYmVsOiJNb3VudGFpbiBUaW1lIChVUyAmIENhbmFkYSkifSx7dmFsdWU6IkFtZXJpY2EvTG9zX0FuZ2VsZXMiLGxhYmVsOiJQYWNpZmljIFRpbWUgKFVTICYgQ2FuYWRhKSJ9LHt2YWx1ZToiQW1lcmljYS9QaG9lbml4IixsYWJlbDoiQXJpem9uYSJ9LHt2YWx1ZToiQW1lcmljYS9BbmNob3JhZ2UiLGxhYmVsOiJBbGFza2EifSx7dmFsdWU6IlBhY2lmaWMvSG9ub2x1bHUiLGxhYmVsOiJIYXdhaWkifSx7dmFsdWU6IkV1cm9wZS9Mb25kb24iLGxhYmVsOiJMb25kb24ifSx7dmFsdWU6IkV1cm9wZS9QYXJpcyIsbGFiZWw6IlBhcmlzIn0se3ZhbHVlOiJFdXJvcGUvQmVybGluIixsYWJlbDoiQmVybGluIn0se3ZhbHVlOiJFdXJvcGUvTW9zY293IixsYWJlbDoiTW9zY293In0se3ZhbHVlOiJBc2lhL0R1YmFpIixsYWJlbDoiRHViYWkifSx7dmFsdWU6IkFzaWEvS29sa2F0YSIsbGFiZWw6IkluZGlhIFN0YW5kYXJkIFRpbWUifSx7dmFsdWU6IkFzaWEvU2hhbmdoYWkiLGxhYmVsOiJDaGluYSBTdGFuZGFyZCBUaW1lIn0se3ZhbHVlOiJBc2lhL1Rva3lvIixsYWJlbDoiVG9reW8ifSx7dmFsdWU6IkF1c3RyYWxpYS9TeWRuZXkiLGxhYmVsOiJTeWRuZXkifSx7dmFsdWU6IlBhY2lmaWMvQXVja2xhbmQiLGxhYmVsOiJBdWNrbGFuZCJ9XX1yZW5kZXIoKXtyZXR1cm4gVUl0KHRoaXMpfWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZT10aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVDbGlja091dHNpZGUpfWFzeW5jIGZpcnN0VXBkYXRlZCgpe2lmKHRoaXMudmFsdWV8fCh0aGlzLnZhbHVlPSIiKSx0aGlzLnZhbHVlKXRyeXtsZXQgWj1uZXcgRGF0ZSh0aGlzLnZhbHVlKTtpc05hTihaLmdldFRpbWUoKSl8fCh0aGlzLnNlbGVjdGVkRGF0ZT1aLHRoaXMudmlld0RhdGU9bmV3IERhdGUoWiksdGhpcy5zZWxlY3RlZEhvdXI9Wi5nZXRIb3VycygpLHRoaXMuc2VsZWN0ZWRNaW51dGU9Wi5nZXRNaW51dGVzKCkpfWNhdGNoe31lbHNle2xldCBaPW5ldyBEYXRlO3RoaXMudmlld0RhdGU9bmV3IERhdGUoWiksdGhpcy5zZWxlY3RlZEhvdXI9Wi5nZXRIb3VycygpLHRoaXMuc2VsZWN0ZWRNaW51dGU9MH19Zm9ybWF0RGF0ZShaKXtpZighWilyZXR1cm4iIjt0cnl7bGV0IEo9bmV3IERhdGUoWik7aWYoaXNOYU4oSi5nZXRUaW1lKCkpKXJldHVybiIiO2xldCBkZT10aGlzLmRhdGVGb3JtYXQsQWU9Si5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksSGU9KEouZ2V0TW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxNdD1KLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtpZihkZT1kZS5yZXBsYWNlKCJZWVlZIixNdCksZGU9ZGUucmVwbGFjZSgiWVkiLE10LnNsaWNlKC0yKSksZGU9ZGUucmVwbGFjZSgiTU0iLEhlKSxkZT1kZS5yZXBsYWNlKCJERCIsQWUpLHRoaXMuZW5hYmxlVGltZSl7bGV0IGl0PUouZ2V0SG91cnMoKSx6dD1pdD09PTA/MTI6aXQ+MTI/aXQtMTI6aXQscXQ9Si5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksUT1pdD49MTI/IlBNIjoiQU0iO3RoaXMudGltZUZvcm1hdD09PSIxMmgiP2RlKz1gICR7enR9OiR7cXR9ICR7UX1gOmRlKz1gICR7aXQudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7cXR9YH1pZih0aGlzLmVuYWJsZVRpbWV6b25lKXtsZXQgcXQ9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIix7dGltZVpvbmVOYW1lOiJzaG9ydCIsdGltZVpvbmU6dGhpcy50aW1lem9uZX0pLmZvcm1hdFRvUGFydHMoSikuZmluZChRPT5RLnR5cGU9PT0idGltZVpvbmVOYW1lIik7cXQmJihkZSs9YCAke3F0LnZhbHVlfWApfXJldHVybiBkZX1jYXRjaHtyZXR1cm4iIn19aGFuZGxlQ2xpY2tPdXRzaWRlPShidCh0aGlzLHJ0KSxaPT57Wi5jb21wb3NlZFBhdGgoKS5pbmNsdWRlcyh0aGlzKXx8KHRoaXMuaXNPcGVuZWQ9ITEsZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKSl9KTthc3luYyB0b2dnbGVDYWxlbmRhcigpe2lmKCF0aGlzLmRpc2FibGVkKWlmKHRoaXMuaXNPcGVuZWQ9IXRoaXMuaXNPcGVuZWQsdGhpcy5pc09wZW5lZCl7bGV0IEo9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5pbnB1dC1jb250YWluZXIiKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkZT13aW5kb3cuaW5uZXJIZWlnaHQtSi5ib3R0b20sQWU9Si50b3A7dGhpcy5vcGVuc1RvVG9wPWRlPDQwMCYmQWU+ZGUsc2V0VGltZW91dCgoKT0+e2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSl9LDApfWVsc2UgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKX1nZXREYXlzSW5Nb250aCgpe2xldCBaPXRoaXMudmlld0RhdGUuZ2V0RnVsbFllYXIoKSxKPXRoaXMudmlld0RhdGUuZ2V0TW9udGgoKSxkZT1uZXcgRGF0ZShaLEosMSksQWU9bmV3IERhdGUoWixKKzEsMCksSGU9W10sTXQ9dGhpcy53ZWVrU3RhcnRzT249PT0xP2RlLmdldERheSgpPT09MD82OmRlLmdldERheSgpLTE6ZGUuZ2V0RGF5KCk7Zm9yKGxldCB6dD1NdDt6dD4wO3p0LS0pSGUucHVzaChuZXcgRGF0ZShaLEosMS16dCkpO2ZvcihsZXQgenQ9MTt6dDw9QWUuZ2V0RGF0ZSgpO3p0KyspSGUucHVzaChuZXcgRGF0ZShaLEosenQpKTtsZXQgaXQ9NDItSGUubGVuZ3RoO2ZvcihsZXQgenQ9MTt6dDw9aXQ7enQrKylIZS5wdXNoKG5ldyBEYXRlKFosSisxLHp0KSk7cmV0dXJuIEhlfWlzVG9kYXkoWil7bGV0IEo9bmV3IERhdGU7cmV0dXJuIFouZ2V0RGF0ZSgpPT09Si5nZXREYXRlKCkmJlouZ2V0TW9udGgoKT09PUouZ2V0TW9udGgoKSYmWi5nZXRGdWxsWWVhcigpPT09Si5nZXRGdWxsWWVhcigpfWlzU2VsZWN0ZWQoWil7cmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlP1ouZ2V0RGF0ZSgpPT09dGhpcy5zZWxlY3RlZERhdGUuZ2V0RGF0ZSgpJiZaLmdldE1vbnRoKCk9PT10aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpJiZaLmdldEZ1bGxZZWFyKCk9PT10aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpOiExfWlzRGlzYWJsZWQoWil7aWYodGhpcy5taW5EYXRlKXtsZXQgSj1uZXcgRGF0ZSh0aGlzLm1pbkRhdGUpO2lmKFo8SilyZXR1cm4hMH1pZih0aGlzLm1heERhdGUpe2xldCBKPW5ldyBEYXRlKHRoaXMubWF4RGF0ZSk7aWYoWj5KKXJldHVybiEwfXJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMmJnRoaXMuZGlzYWJsZWREYXRlcy5sZW5ndGg+MD90aGlzLmRpc2FibGVkRGF0ZXMuc29tZShKPT57dHJ5e2xldCBkZT1uZXcgRGF0ZShKKTtyZXR1cm4gWi5nZXREYXRlKCk9PT1kZS5nZXREYXRlKCkmJlouZ2V0TW9udGgoKT09PWRlLmdldE1vbnRoKCkmJlouZ2V0RnVsbFllYXIoKT09PWRlLmdldEZ1bGxZZWFyKCl9Y2F0Y2h7cmV0dXJuITF9fSk6ITF9Z2V0RXZlbnRzRm9yRGF0ZShaKXtpZighdGhpcy5ldmVudHN8fHRoaXMuZXZlbnRzLmxlbmd0aD09PTApcmV0dXJuW107bGV0IEo9YCR7Wi5nZXRGdWxsWWVhcigpfS0keyhaLmdldE1vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LSR7Wi5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YDtyZXR1cm4gdGhpcy5ldmVudHMuZmlsdGVyKGRlPT5kZS5kYXRlPT09Sil9c2VsZWN0RGF0ZShaKXt0aGlzLnNlbGVjdGVkRGF0ZT1uZXcgRGF0ZShaLmdldEZ1bGxZZWFyKCksWi5nZXRNb250aCgpLFouZ2V0RGF0ZSgpLHRoaXMuc2VsZWN0ZWRIb3VyLHRoaXMuc2VsZWN0ZWRNaW51dGUpLHRoaXMudmFsdWU9dGhpcy5mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZSh0aGlzLnNlbGVjdGVkRGF0ZSksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyksdGhpcy5lbmFibGVUaW1lfHwodGhpcy5pc09wZW5lZD0hMSl9c2VsZWN0VG9kYXkoKXtsZXQgWj1uZXcgRGF0ZTt0aGlzLnNlbGVjdGVkRGF0ZT1aLHRoaXMudmlld0RhdGU9bmV3IERhdGUoWiksdGhpcy5zZWxlY3RlZEhvdXI9Wi5nZXRIb3VycygpLHRoaXMuc2VsZWN0ZWRNaW51dGU9Wi5nZXRNaW51dGVzKCksdGhpcy52YWx1ZT10aGlzLmZvcm1hdFZhbHVlV2l0aFRpbWV6b25lKHRoaXMuc2VsZWN0ZWREYXRlKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSx0aGlzLmVuYWJsZVRpbWV8fCh0aGlzLmlzT3BlbmVkPSExKX1jbGVhcigpe3RoaXMudmFsdWU9IiIsdGhpcy5zZWxlY3RlZERhdGU9bnVsbCx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSx0aGlzLmlzT3BlbmVkPSExfXByZXZpb3VzTW9udGgoKXt0aGlzLnZpZXdEYXRlPW5ldyBEYXRlKHRoaXMudmlld0RhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLnZpZXdEYXRlLmdldE1vbnRoKCktMSwxKX1uZXh0TW9udGgoKXt0aGlzLnZpZXdEYXRlPW5ldyBEYXRlKHRoaXMudmlld0RhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLnZpZXdEYXRlLmdldE1vbnRoKCkrMSwxKX1oYW5kbGVIb3VySW5wdXQoWil7bGV0IEo9Wi50YXJnZXQsZGU9cGFyc2VJbnQoSi52YWx1ZSl8fDA7dGhpcy50aW1lRm9ybWF0PT09IjEyaCI/KGRlPU1hdGgubWF4KDEsTWF0aC5taW4oMTIsZGUpKSx0aGlzLnNlbGVjdGVkSG91cj49MTImJmRlIT09MTI/dGhpcy5zZWxlY3RlZEhvdXI9ZGUrMTI6dGhpcy5zZWxlY3RlZEhvdXI8MTImJmRlPT09MTI/dGhpcy5zZWxlY3RlZEhvdXI9MDp0aGlzLnNlbGVjdGVkSG91cj1kZSk6dGhpcy5zZWxlY3RlZEhvdXI9TWF0aC5tYXgoMCxNYXRoLm1pbigyMyxkZSkpLHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpfWhhbmRsZU1pbnV0ZUlucHV0KFope2xldCBKPVoudGFyZ2V0LGRlPXBhcnNlSW50KEoudmFsdWUpfHwwO2RlPU1hdGgubWF4KDAsTWF0aC5taW4oNTksZGUpKSx0aGlzLm1pbnV0ZUluY3JlbWVudCYmdGhpcy5taW51dGVJbmNyZW1lbnQ+MSYmKGRlPU1hdGgucm91bmQoZGUvdGhpcy5taW51dGVJbmNyZW1lbnQpKnRoaXMubWludXRlSW5jcmVtZW50KSx0aGlzLnNlbGVjdGVkTWludXRlPWRlLHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpfXNldEFNUE0oWil7Wj09PSJhbSImJnRoaXMuc2VsZWN0ZWRIb3VyPj0xMj90aGlzLnNlbGVjdGVkSG91ci09MTI6Wj09PSJwbSImJnRoaXMuc2VsZWN0ZWRIb3VyPDEyJiYodGhpcy5zZWxlY3RlZEhvdXIrPTEyKSx0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKX11cGRhdGVTZWxlY3RlZERhdGVUaW1lKCl7dGhpcy5zZWxlY3RlZERhdGUmJih0aGlzLnNlbGVjdGVkRGF0ZT1uZXcgRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpLHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCksdGhpcy5zZWxlY3RlZERhdGUuZ2V0RGF0ZSgpLHRoaXMuc2VsZWN0ZWRIb3VyLHRoaXMuc2VsZWN0ZWRNaW51dGUpLHRoaXMudmFsdWU9dGhpcy5mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZSh0aGlzLnNlbGVjdGVkRGF0ZSksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpfWhhbmRsZVRpbWV6b25lQ2hhbmdlKFope2xldCBKPVoudGFyZ2V0O3RoaXMudGltZXpvbmU9Si52YWx1ZSx0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKX1mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZShaKXtpZighdGhpcy5lbmFibGVUaW1lem9uZSlyZXR1cm4gWi50b0lTT1N0cmluZygpO2xldCBkZT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCgiZW4tVVMiLHt5ZWFyOiJudW1lcmljIixtb250aDoiMi1kaWdpdCIsZGF5OiIyLWRpZ2l0Iixob3VyOiIyLWRpZ2l0IixtaW51dGU6IjItZGlnaXQiLHNlY29uZDoiMi1kaWdpdCIsaG91cjEyOiExLHRpbWVab25lOnRoaXMudGltZXpvbmUsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKFopLEFlPXt9O2RlLmZvckVhY2goaXQ9PntBZVtpdC50eXBlXT1pdC52YWx1ZX0pO2xldCBIZT1gJHtBZS55ZWFyfS0ke0FlLm1vbnRofS0ke0FlLmRheX1UJHtBZS5ob3VyfToke0FlLm1pbnV0ZX06JHtBZS5zZWNvbmR9YCxNdD10aGlzLmdldFRpbWV6b25lT2Zmc2V0KFosdGhpcy50aW1lem9uZSk7cmV0dXJuYCR7SGV9JHtNdH1gfWdldFRpbWV6b25lT2Zmc2V0KFosSil7bGV0IGRlPW5ldyBEYXRlKFoudG9Mb2NhbGVTdHJpbmcoImVuLVVTIix7dGltZVpvbmU6Sn0pKSxBZT1uZXcgRGF0ZShaLnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIse3RpbWVab25lOiJVVEMifSkpLEhlPShkZS5nZXRUaW1lKCktQWUuZ2V0VGltZSgpKS8oMWUzKjYwKSxNdD1NYXRoLmZsb29yKE1hdGguYWJzKEhlKS82MCksaXQ9TWF0aC5hYnMoSGUpJTYwO3JldHVybmAke0hlPj0wPyIrIjoiLSJ9JHtNdC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtpdC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWhhbmRsZUtleWRvd24oWil7Wi5rZXk9PT0iRW50ZXIifHxaLmtleT09PSIgIj8oWi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlQ2FsZW5kYXIoKSk6Wi5rZXk9PT0iRXNjYXBlIiYmdGhpcy5pc09wZW5lZCYmKFoucHJldmVudERlZmF1bHQoKSx0aGlzLmlzT3BlbmVkPSExKX1jbGVhclZhbHVlKFope1ouc3RvcFByb3BhZ2F0aW9uKCksdGhpcy52YWx1ZT0iIix0aGlzLnNlbGVjdGVkRGF0ZT1udWxsLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpfWhhbmRsZU1hbnVhbElucHV0KFope2xldCBkZT1aLnRhcmdldC52YWx1ZS50cmltKCk7aWYoIWRlKXt0aGlzLnZhbHVlPSIiLHRoaXMuc2VsZWN0ZWREYXRlPW51bGw7cmV0dXJufWxldCBBZT10aGlzLnBhcnNlTWFudWFsRGF0ZShkZSk7QWUmJiFpc05hTihBZS5nZXRUaW1lKCkpJiYodGhpcy52YWx1ZT1BZS50b0lTT1N0cmluZygpLHRoaXMuc2VsZWN0ZWREYXRlPUFlLHRoaXMudmlld0RhdGU9bmV3IERhdGUoQWUpLHRoaXMuc2VsZWN0ZWRIb3VyPUFlLmdldEhvdXJzKCksdGhpcy5zZWxlY3RlZE1pbnV0ZT1BZS5nZXRNaW51dGVzKCksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpfWhhbmRsZUlucHV0Qmx1cihaKXtsZXQgSj1aLnRhcmdldCxkZT1KLnZhbHVlLnRyaW0oKTtpZighZGUpe3RoaXMudmFsdWU9IiIsdGhpcy5zZWxlY3RlZERhdGU9bnVsbCx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTtyZXR1cm59bGV0IEFlPXRoaXMucGFyc2VNYW51YWxEYXRlKGRlKTtBZSYmIWlzTmFOKEFlLmdldFRpbWUoKSk/KHRoaXMudmFsdWU9QWUudG9JU09TdHJpbmcoKSx0aGlzLnNlbGVjdGVkRGF0ZT1BZSx0aGlzLnZpZXdEYXRlPW5ldyBEYXRlKEFlKSx0aGlzLnNlbGVjdGVkSG91cj1BZS5nZXRIb3VycygpLHRoaXMuc2VsZWN0ZWRNaW51dGU9QWUuZ2V0TWludXRlcygpLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpLEoudmFsdWU9dGhpcy5mb3JtYXREYXRlKHRoaXMudmFsdWUpKTpKLnZhbHVlPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLnZhbHVlKX1wYXJzZU1hbnVhbERhdGUoWil7aWYoIVopcmV0dXJuIG51bGw7bGV0IEo9Wi5zcGxpdCgiICIpLGRlPUpbMF0sQWU9SlsxXXx8IiIsSGU9bnVsbCxNdD1kZS5tYXRjaCgvXihcZHs0fSktKFxkezEsMn0pLShcZHsxLDJ9KSQvKTtpZihNdCl7bGV0W2l0LHp0LHF0LFFdPU10O0hlPW5ldyBEYXRlKHBhcnNlSW50KHp0KSxwYXJzZUludChxdCktMSxwYXJzZUludChRKSl9aWYoIUhlKXtsZXQgaXQ9ZGUubWF0Y2goL14oXGR7MSwyfSlcLihcZHsxLDJ9KVwuKFxkezR9KSQvKTtpZihpdCl7bGV0W3p0LHF0LFEsS109aXQ7SGU9bmV3IERhdGUocGFyc2VJbnQoSykscGFyc2VJbnQoUSktMSxwYXJzZUludChxdCkpfX1pZighSGUpe2xldCBpdD1kZS5tYXRjaCgvXihcZHsxLDJ9KVwvKFxkezEsMn0pXC8oXGR7NH0pJC8pO2lmKGl0KXtsZXRbenQscXQsUSxLXT1pdDtIZT1uZXcgRGF0ZShwYXJzZUludChLKSxwYXJzZUludChxdCktMSxwYXJzZUludChRKSl9fWlmKCFIZXx8aXNOYU4oSGUuZ2V0VGltZSgpKSlyZXR1cm4gbnVsbDtpZihBZSl7bGV0IGl0PUFlLm1hdGNoKC9eKFxkezEsMn0pOihcZHsyfSkkLyk7aWYoaXQpe2xldFt6dCxxdCxRXT1pdDtIZS5zZXRIb3VycyhwYXJzZUludChxdCkpLEhlLnNldE1pbnV0ZXMocGFyc2VJbnQoUSkpfX1lbHNlIGlmKCF0aGlzLmVuYWJsZVRpbWUpe2xldCBpdD1uZXcgRGF0ZTtIZS5zZXRIb3VycyhpdC5nZXRIb3VycygpKSxIZS5zZXRNaW51dGVzKGl0LmdldE1pbnV0ZXMoKSksSGUuc2V0U2Vjb25kcygwKSxIZS5zZXRNaWxsaXNlY29uZHMoMCl9cmV0dXJuIEhlfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9c2V0VmFsdWUoWil7aWYodGhpcy52YWx1ZT1aLFopdHJ5e2xldCBKPW5ldyBEYXRlKFopO2lzTmFOKEouZ2V0VGltZSgpKXx8KHRoaXMuc2VsZWN0ZWREYXRlPUosdGhpcy52aWV3RGF0ZT1uZXcgRGF0ZShKKSx0aGlzLnNlbGVjdGVkSG91cj1KLmdldEhvdXJzKCksdGhpcy5zZWxlY3RlZE1pbnV0ZT1KLmdldE1pbnV0ZXMoKSl9Y2F0Y2h7fX1zdGF0aWN7YnQocixhKX19O3JldHVybiB1ZT1yfSkoKTtmZSgpO3ZhciBqSXQ9KCk9Pk1gCiAgPHN0eWxlPgogICAgJHt0ZWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwtZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLmludGVyYWN0aXZlLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CiAgICAgIAogICAgICAub3V0cHV0LXRleHQgewogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0IikuZm9yRWFjaChyPT57ci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IixpPT57Y29uc29sZS5sb2coYElucHV0ICIke3IubGFiZWx9IiBjaGFuZ2VkIHRvOmAsci5nZXRWYWx1ZSgpKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9Pntjb25zb2xlLmxvZyhgSW5wdXQgIiR7ci5sYWJlbH0iIGxvc3QgZm9jdXNgKX0pfSksdC5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRba2V5PSJwYXNzd29yZCJdJykmJmNvbnNvbGUubG9nKCJQYXNzd29yZCBpbnB1dCBpbmNsdWRlcyB2aXNpYmlsaXR5IHRvZ2dsZSIpfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBUZXh0IElucHV0cyJ9IC5zdWJ0aXRsZT0keyJTdGFuZGFyZCB0ZXh0IGlucHV0cyB3aXRoIGxhYmVscyBhbmQgZGVzY3JpcHRpb25zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJVc2VybmFtZSJ9IAogICAgICAgICAgLnZhbHVlPSR7ImpvaG5kb2UifQogICAgICAgICAgLmtleT0keyJ1c2VybmFtZSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiRW1haWwgQWRkcmVzcyJ9IAogICAgICAgICAgLnZhbHVlPSR7ImpvaG5AZXhhbXBsZS5jb20ifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJXZSB3aWxsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwgd2l0aCBhbnlvbmUifQogICAgICAgICAgLmtleT0keyJlbWFpbCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiUGFzc3dvcmQifSAKICAgICAgICAgIC5pc1Bhc3N3b3JkQm9vbD0keyEwfSAKICAgICAgICAgIC52YWx1ZT0keyJzZWNyZXQxMjMifQogICAgICAgICAgLmtleT0keyJwYXNzd29yZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnt0LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dCIpLmZvckVhY2goaT0+e2xldCBvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpO2NvbnNvbGUubG9nKGBIb3Jpem9udGFsIGlucHV0ICIke2kubGFiZWx9IiBkaXNwbGF5OmAsby5kaXNwbGF5KX0pO2xldCBhPXQucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC10ZXh0W2tleT0iZmlyc3ROYW1lIl0nKSxyPXQucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC10ZXh0W2tleT0ibGFzdE5hbWUiXScpO2lmKGEmJnIpe2xldCBpPSgpPT57bGV0IG89YS5nZXRWYWx1ZSgpLHM9ci5nZXRWYWx1ZSgpO2NvbnNvbGUubG9nKGBGdWxsIG5hbWU6ICR7b30gJHtzfWApfTthLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVN1YmplY3QiLGkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsaSl9fX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSBpbnB1dHMgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRmlyc3QgTmFtZSJ9IAogICAgICAgICAgICAudmFsdWU9JHsiSm9obiJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJmaXJzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiTGFzdCBOYW1lIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyJEb2UifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsibGFzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiQWdlIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyIyOCJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJhZ2UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnt0LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dCIpLmZvckVhY2gocj0+e2xldCBpPXIubGFiZWxQb3NpdGlvbjtjb25zb2xlLmxvZyhgSW5wdXQgIiR7ci5sYWJlbH0iIGhhcyBsYWJlbCBwb3NpdGlvbjogJHtpfWApfSk7bGV0IGE9dC5xdWVyeVNlbGVjdG9yQWxsKCdkZWVzLWlucHV0LXRleHRbbGFiZWxQb3NpdGlvbj0ibGVmdCJdJyk7YS5sZW5ndGg+MCYmY29uc29sZS5sb2coYCR7YS5sZW5ndGh9IGlucHV0cyBoYXZlIGxlZnQtYWxpZ25lZCBsYWJlbHMgZm9yIGlubGluZSBsYXlvdXRgKX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTGFiZWwgUG9zaXRpb25zIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBsYWJlbCBwb3NpdGlvbmluZyBvcHRpb25zIGZvciB2YXJpb3VzIGxheW91dHMifT4KICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkxhYmVsIG9uIFRvcCAoRGVmYXVsdCkifSAKICAgICAgICAgIC52YWx1ZT0keyJTdGFuZGFyZCBsYXlvdXQifSAKICAgICAgICAgIC5sYWJlbFBvc2l0aW9uPSR7InRvcCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiTGFiZWwgb24gTGVmdCJ9IAogICAgICAgICAgLnZhbHVlPSR7IklubGluZSBsYWJlbCJ9IAogICAgICAgICAgLmxhYmVsUG9zaXRpb249JHsibGVmdCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJDaXR5In0gCiAgICAgICAgICAgIC52YWx1ZT0keyJOZXcgWW9yayJ9IAogICAgICAgICAgICAubGFiZWxQb3NpdGlvbj0keyJsZWZ0In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IlpJUCBDb2RlIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyIxMDAwMSJ9IAogICAgICAgICAgICAubGFiZWxQb3NpdGlvbj0keyJsZWZ0In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHRbcmVxdWlyZWRdIiksYT10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dFtkaXNhYmxlZF0iKSxyPXQucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC10ZXh0W3ZhbGlkYXRpb25TdGF0ZT0iaW52YWxpZCJdJyk7ZSYmZS5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+e2UuZ2V0VmFsdWUoKXx8Y29uc29sZS5sb2coIlJlcXVpcmVkIGZpZWxkIGlzIGVtcHR5ISIpfSksYSYmY29uc29sZS5sb2coIkRpc2FibGVkIGlucHV0IGNhbm5vdCBiZSBlZGl0ZWQiKSxyJiYoY29uc29sZS5sb2coIkVycm9yIGlucHV0IHNob3dzIHZhbGlkYXRpb24gbWVzc2FnZToiLHIudmFsaWRhdGlvblRleHQpLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsKCk9PntsZXQgaT1yLmdldFZhbHVlKCk7aS5pbmNsdWRlcygiQCIpJiZpLmluY2x1ZGVzKCIuIikmJihyLnZhbGlkYXRpb25TdGF0ZT0idmFsaWQiLHIudmFsaWRhdGlvblRleHQ9IiIsY29uc29sZS5sb2coIkVtYWlsIHZhbGlkYXRpb24gcGFzc2VkISIpKX0pKX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiVmFsaWRhdGlvbiAmIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgdmFsaWRhdGlvbiBzdGF0ZXMgYW5kIGlucHV0IGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJSZXF1aXJlZCBGaWVsZCJ9IAogICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAua2V5PSR7InJlcXVpcmVkRmllbGQifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIEZpZWxkIn0gCiAgICAgICAgICAudmFsdWU9JHsiQ2Fubm90IGVkaXQgdGhpcyJ9IAogICAgICAgICAgLmRpc2FibGVkPSR7ITB9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiRmllbGQgd2l0aCBFcnJvciJ9IAogICAgICAgICAgLnZhbHVlPSR7ImludmFsaWRAIn0gCiAgICAgICAgICAudmFsaWRhdGlvblRleHQ9JHsiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcyJ9CiAgICAgICAgICAudmFsaWRhdGlvblN0YXRlPSR7ImludmFsaWQifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57dC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHRbaXNQYXNzd29yZEJvb2xdIikuZm9yRWFjaChhPT57bGV0IHI9KCk9PntsZXQgaT1hLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik7aSYmY29uc29sZS5sb2coYFBhc3N3b3JkIGZpZWxkICIke2EubGFiZWx9IiB0eXBlOmAsaS50eXBlKX07aWYoYS5zaGFkb3dSb290KXtsZXQgaT1uZXcgTXV0YXRpb25PYnNlcnZlcihyKSxvPWEuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpO28mJmkub2JzZXJ2ZShvLHthdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbInR5cGUiXX0pfX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJBZHZhbmNlZCBGZWF0dXJlcyJ9IC5zdWJ0aXRsZT0keyJQYXNzd29yZCB2aXNpYmlsaXR5IHRvZ2dsZSBhbmQgb3RoZXIgYWR2YW5jZWQgZmVhdHVyZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IlBhc3N3b3JkIHdpdGggVG9nZ2xlIn0gCiAgICAgICAgICAuaXNQYXNzd29yZEJvb2w9JHshMH0KICAgICAgICAgIC52YWx1ZT0keyJteVNlY3VyZVBhc3N3b3JkMTIzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDbGljayB0aGUgZXllIGljb24gdG8gc2hvdy9oaWRlIHBhc3N3b3JkIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJBUEkgS2V5In0gCiAgICAgICAgICAuaXNQYXNzd29yZEJvb2w9JHshMH0KICAgICAgICAgIC52YWx1ZT0keyJzay0xMjM0NTY3ODkwYWJjZGVmIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJLZWVwIHRoaXMga2V5IHNlY3VyZSBhbmQgbmV2ZXIgc2hhcmUgaXQifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKSxhPXQucXVlcnlTZWxlY3RvcigiI3RleHQtaW5wdXQtb3V0cHV0Iik7aWYoZSYmYSl7ZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IixpPT57bGV0IG89aS5kZXRhaWwuZ2V0VmFsdWUoKTthLnRleHRDb250ZW50PWBDdXJyZW50IHZhbHVlOiAiJHtvfSJgfSksZS5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9Pntjb25zb2xlLmxvZygiSW5wdXQgZm9jdXNlZCIpfSksZS5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+e2NvbnNvbGUubG9nKCJJbnB1dCBibHVycmVkIil9KTtsZXQgcj0wO2UuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKCk9PntyKyssY29uc29sZS5sb2coYEtleXByZXNzIGNvdW50OiAke3J9YCl9KX19fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkludGVyYWN0aXZlIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiVHJ5IHR5cGluZyBpbiB0aGUgaW5wdXRzIHRvIHNlZSByZWFsLXRpbWUgdmFsdWUgY2hhbmdlcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiRHluYW1pYyBJbnB1dCJ9IAogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IlR5cGUgc29tZXRoaW5nIGhlcmUuLi4ifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcmFjdGl2ZS1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgaWQ9InRleHQtaW5wdXQtb3V0cHV0IiBjbGFzcz0ib3V0cHV0LXRleHQiPkN1cnJlbnQgdmFsdWU6ICIiPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICA8L2Rpdj4KYDtmZSgpO0JlKCk7dmFyIFpsPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sdWE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LFhEZT0oKCk9PntsZXQgdD1bY2UoImRlZXMtaW5wdXQtdGV4dCIpXSxlLGE9W10scixpPVhlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdLEUsQz1bXSx6PVtdO3ZhciBQPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgXz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLGY9W0Qoe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLGQ9W0Qoe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLGI9W0Qoe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLHY9W0Qoe3JlZmxlY3Q6ITB9KV0sRT1bRCh7fSldLFpsKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJ2YWx1ZSJpbiAkLGdldDokPT4kLnZhbHVlLHNldDooJCxIKT0+eyQudmFsdWU9SH19LG1ldGFkYXRhOl99LHMsbCksWmwodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc1Bhc3N3b3JkQm9vbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+ImlzUGFzc3dvcmRCb29sImluICQsZ2V0OiQ9PiQuaXNQYXNzd29yZEJvb2wsc2V0OigkLEgpPT57JC5pc1Bhc3N3b3JkQm9vbD1IfX0sbWV0YWRhdGE6X30sYyx1KSxabCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dQYXNzd29yZEJvb2wiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJzaG93UGFzc3dvcmRCb29sImluICQsZ2V0OiQ9PiQuc2hvd1Bhc3N3b3JkQm9vbCxzZXQ6KCQsSCk9PnskLnNob3dQYXNzd29yZEJvb2w9SH19LG1ldGFkYXRhOl99LGgsZyksWmwodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWxpZGF0aW9uU3RhdGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJ2YWxpZGF0aW9uU3RhdGUiaW4gJCxnZXQ6JD0+JC52YWxpZGF0aW9uU3RhdGUsc2V0OigkLEgpPT57JC52YWxpZGF0aW9uU3RhdGU9SH19LG1ldGFkYXRhOl99LHgsbSksWmwodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWxpZGF0aW9uVGV4dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+InZhbGlkYXRpb25UZXh0ImluICQsZ2V0OiQ9PiQudmFsaWRhdGlvblRleHQsc2V0OigkLEgpPT57JC52YWxpZGF0aW9uVGV4dD1IfX0sbWV0YWRhdGE6X30seSx3KSxabCh0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbGlkYXRpb25GdW5jdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+InZhbGlkYXRpb25GdW5jdGlvbiJpbiAkLGdldDokPT4kLnZhbGlkYXRpb25GdW5jdGlvbixzZXQ6KCQsSCk9PnskLnZhbGlkYXRpb25GdW5jdGlvbj1IfX0sbWV0YWRhdGE6X30sQyx6KSxabChudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpffSxudWxsLGEpLFA9cj1lLnZhbHVlLF8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6X30pfXN0YXRpYyBkZW1vPWpJdDtzdGF0aWMgZGVtb0dyb3VwPSJJbnB1dCI7I2U9dWEodGhpcyxzLCIiKTtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdmFsdWUoXyl7dGhpcy4jZT1ffSN0PSh1YSh0aGlzLGwpLHVhKHRoaXMsYywhMSkpO2dldCBpc1Bhc3N3b3JkQm9vbCgpe3JldHVybiB0aGlzLiN0fXNldCBpc1Bhc3N3b3JkQm9vbChfKXt0aGlzLiN0PV99I2E9KHVhKHRoaXMsdSksdWEodGhpcyxoLCExKSk7Z2V0IHNob3dQYXNzd29yZEJvb2woKXtyZXR1cm4gdGhpcy4jYX1zZXQgc2hvd1Bhc3N3b3JkQm9vbChfKXt0aGlzLiNhPV99I3I9KHVhKHRoaXMsZyksdWEodGhpcyx4LHZvaWQgMCkpO2dldCB2YWxpZGF0aW9uU3RhdGUoKXtyZXR1cm4gdGhpcy4jcn1zZXQgdmFsaWRhdGlvblN0YXRlKF8pe3RoaXMuI3I9X30jaT0odWEodGhpcyxtKSx1YSh0aGlzLHksIiIpKTtnZXQgdmFsaWRhdGlvblRleHQoKXtyZXR1cm4gdGhpcy4jaX1zZXQgdmFsaWRhdGlvblRleHQoXyl7dGhpcy4jaT1ffSNvPSh1YSh0aGlzLHcpLHVhKHRoaXMsQyx2b2lkIDApKTtnZXQgdmFsaWRhdGlvbkZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuI299c2V0IHZhbGlkYXRpb25GdW5jdGlvbihfKXt0aGlzLiNvPV99c3RhdGljIHN0eWxlcz1beGUsLi4uWGUuYmFzZVN0eWxlcyxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogYXV0bzsKICAgICAgICBmb250LWZhbWlseTogJHtKdH07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBjdXJzb3I6IHRleHQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCJoc2woMCAwJSA2My45JSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0OmhvdmVyOm5vdCg6ZGlzYWJsZWQpOm5vdCg6Zm9jdXMpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSAvIDAuMDUpIiwiaHNsKDAgMCUgOTglIC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0OmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLyogUGFzc3dvcmQgdG9nZ2xlIGJ1dHRvbiAqLwogICAgICAuc2hvd1Bhc3N3b3JkIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDFweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAzOHB4OwogICAgICAgIGhlaWdodDogMzhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCA1cHggNXB4IDA7CiAgICAgIH0KCiAgICAgIC5zaG93UGFzc3dvcmQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAvKiBWYWxpZGF0aW9uIHN0eWxlcyAqLwogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lciB7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnZhbGlkYXRpb25Db250YWluZXIuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSAvIDAuMSkiLCJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCJoc2woMCA3Mi4yJSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyLndhcm4gewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSAvIDAuMSkiLCJoc2woMjUgOTUlIDYzJSAvIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSkiLCJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgIH0KCiAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyLnZhbGlkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIsImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgLyogRXJyb3Igc3RhdGUgZm9yIGlucHV0ICovCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uLXN0YXRlPSJpbnZhbGlkIl0pIGlucHV0IHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCJoc2woMCA3Mi4yJSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uLXN0YXRlPSJpbnZhbGlkIl0pIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCJoc2woMCA3Mi4yJSA1MC42JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7cC5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSAvIDAuMDUpIiwiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLyogV2FybmluZyBzdGF0ZSBmb3IgaW5wdXQgKi8KICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9Indhcm4iXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsImhzbCgyNSA5NSUgNjMlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9Indhcm4iXSkgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsImhzbCgyNSA5NSUgNjMlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtwLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlIC8gMC4wNSkiLCJoc2woMjUgOTUlIDYzJSAvIDAuMDUpIil9OwogICAgICB9CgogICAgICAvKiBWYWxpZCBzdGF0ZSBmb3IgaW5wdXQgKi8KICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9InZhbGlkIl0pIGlucHV0IHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9InZhbGlkIl0pIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtwLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMDUpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4wNSkiKX07CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICA8c3R5bGU+CiAgICAgICAgaW5wdXQgewogICAgICAgICAgZm9udC1mYW1pbHk6ICR7dGhpcy5pc1Bhc3N3b3JkQm9vbD9qbDoiaW5oZXJpdCJ9OwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6ICR7dGhpcy5pc1Bhc3N3b3JkQm9vbD8iMC41cHgiOiJub3JtYWwifTsKICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICR7dGhpcy5pc1Bhc3N3b3JkQm9vbD8iNDhweCI6IjEycHgifTsKICAgICAgICB9CiAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0P3RlYAogICAgICAgICAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyIHsKICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBgOnRlYAogICAgICAgICAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyIHsKICAgICAgICAgICAgICAgIGhlaWdodDogMDsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0iJHt0aGlzLmlzUGFzc3dvcmRCb29sJiYhdGhpcy5zaG93UGFzc3dvcmRCb29sPyJwYXNzd29yZCI6InRleHQifSIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy52YWx1ZX0KICAgICAgICAgICAgQGlucHV0PSIke3RoaXMudXBkYXRlVmFsdWV9IgogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICBwbGFjZWhvbGRlcj0iJHt0aGlzLmxhYmVsPyIiOiJFbnRlciB0ZXh0Li4uIn0iCiAgICAgICAgICAvPgogICAgICAgICAgJHt0aGlzLmlzUGFzc3dvcmRCb29sP01gCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG93UGFzc3dvcmQiIEBjbGljaz0ke3RoaXMudG9nZ2xlUGFzc3dvcmRWaWV3fT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuc2hvd1Bhc3N3b3JkQm9vbD8ibHVjaWRlOkV5ZSI6Imx1Y2lkZTpFeWVPZmYifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGA6TWBgfQogICAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0P01gCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWxpZGF0aW9uQ29udGFpbmVyICR7dGhpcy52YWxpZGF0aW9uU3RhdGV8fCJlcnJvciJ9Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0fQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYDpNYDxkaXYgY2xhc3M9InZhbGlkYXRpb25Db250YWluZXIiPjwvZGl2PmB9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1maXJzdFVwZGF0ZWQoKXt9YXN5bmMgdXBkYXRlVmFsdWUoXyl7bGV0ICQ9Xy50YXJnZXQ7dGhpcy52YWx1ZT0kLnZhbHVlLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9c2V0VmFsdWUoXyl7dGhpcy52YWx1ZT1ffWFzeW5jIHRvZ2dsZVBhc3N3b3JkVmlldygpe3RoaXMuc2hvd1Bhc3N3b3JkQm9vbD0hdGhpcy5zaG93UGFzc3dvcmRCb29sfWFzeW5jIGZvY3VzKCl7dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuZm9jdXMoKX1hc3luYyBibHVyKCl7dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuYmx1cigpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx1YSh0aGlzLHopfXN0YXRpY3t1YShyLGEpfX07cmV0dXJuIFA9cn0pKCk7ZmUoKTt2YXIgV0l0PSgpPT5NYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke3RlYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucHJvZHVjdC1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyODBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDIwcHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE1IDIwLjIlIDIxLjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXN1bW1hcnktdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC1pdGVtIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXRvdGFsIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdGVkLXByb2R1Y3RzIHsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBQcm9kdWN0IENhcmRzIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBwcm9kdWN0IGRpc3BsYXkgd2l0aCB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1ncmlkIj4KICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3tuYW1lOiJXaXJlbGVzcyBCbHVldG9vdGggSGVhZHBob25lcyIsY2F0ZWdvcnk6IkF1ZGlvIixkZXNjcmlwdGlvbjoiUHJlbWl1bSBzb3VuZCBxdWFsaXR5IHdpdGggYWN0aXZlIG5vaXNlIGNhbmNlbGxhdGlvbiIscHJpY2U6MTQ5Ljk5LG9yaWdpbmFsUHJpY2U6MTk5Ljk5LGljb25OYW1lOiJsdWNpZGU6aGVhZHBob25lcyJ9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7bmFtZToiU21hcnQgV2F0Y2ggU2VyaWVzIDciLGNhdGVnb3J5OiJXZWFyYWJsZXMiLGRlc2NyaXB0aW9uOiJUcmFjayB5b3VyIGZpdG5lc3MgYW5kIHN0YXkgY29ubmVjdGVkIG9uIHRoZSBnbyIscHJpY2U6Mzk5LGljb25OYW1lOiJsdWNpZGU6d2F0Y2gifX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7e25hbWU6IlVTQi1DIEh1YiIsY2F0ZWdvcnk6IkFjY2Vzc29yaWVzIixwcmljZTo0OS45OSxpY29uTmFtZToibHVjaWRlOnVzYiIsaW5TdG9jazohMX19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezB9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSW50ZXJhY3RpdmUgU2hvcHBpbmcgQ2FydCJ9IC5zdWJ0aXRsZT0keyJQcm9kdWN0IGNhcmRzIHdpdGggZHluYW1pYyBjYXJ0IGNhbGN1bGF0aW9uIn0gLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPVt7aWQ6ImxhcHRvcCIsZWxlbWVudDpudWxsLGRhdGE6e25hbWU6J01hY0Jvb2sgUHJvIDE0IicsY2F0ZWdvcnk6IkNvbXB1dGVycyIsZGVzY3JpcHRpb246Ik0zIFBybyBjaGlwIHdpdGggMThHQiBSQU0iLHByaWNlOjE5OTksb3JpZ2luYWxQcmljZToyMTk5LGljb25OYW1lOiJsdWNpZGU6bGFwdG9wIn19LHtpZDoiaXBhZCIsZWxlbWVudDpudWxsLGRhdGE6e25hbWU6ImlQYWQgQWlyIixjYXRlZ29yeToiVGFibGV0cyIsZGVzY3JpcHRpb246JzEwLjkiIExpcXVpZCBSZXRpbmEgZGlzcGxheScscHJpY2U6NTk5LGljb25OYW1lOiJsdWNpZGU6dGFibGV0In19LHtpZDoia2V5Ym9hcmQiLGVsZW1lbnQ6bnVsbCxkYXRhOntuYW1lOiJNYWdpYyBLZXlib2FyZCIsY2F0ZWdvcnk6IkFjY2Vzc29yaWVzIixkZXNjcmlwdGlvbjoiV2lyZWxlc3Mga2V5Ym9hcmQgd2l0aCBUb3VjaCBJRCIscHJpY2U6MTQ5LGljb25OYW1lOiJsdWNpZGU6a2V5Ym9hcmQifX1dLGE9KCk9PntsZXQgcj0wLGk9W107ZS5mb3JFYWNoKHM9PntsZXQgbD10LnF1ZXJ5U2VsZWN0b3IoYCMke3MuaWR9YCk7aWYobCYmbC5xdWFudGl0eT4wKXtsZXQgZj1zLmRhdGEucHJpY2UqbC5xdWFudGl0eTtyKz1mLGkucHVzaChgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LWl0ZW0iPgogICAgICAgICAgICAgICAgICA8c3Bhbj4ke3MuZGF0YS5uYW1lfSAoJHtsLnF1YW50aXR5fSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPiQke2YudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgKX19KTtsZXQgbz10LnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1jYXJ0LXN1bW1hcnkiKTtvJiYoby5pbm5lckhUTUw9YAogICAgICAgICAgICAgICR7aS5qb2luKCIiKX0KICAgICAgICAgICAgICAke2kubGVuZ3RoPT09MD8nPGRpdiBjbGFzcz0iY2FydC1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzk5OTsiPllvdXIgY2FydCBpcyBlbXB0eTwvZGl2Pic6IiJ9CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FydC10b3RhbCI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Ub3RhbDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPiQke3IudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGApfTtzZXRUaW1lb3V0KGEsMTAwKSx0LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQiKS5mb3JFYWNoKHI9PntyLmFkZEV2ZW50TGlzdGVuZXIoInF1YW50aXR5Q2hhbmdlIixhKX0pfX0+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1ncmlkIj4KICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJsYXB0b3AiCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3tuYW1lOidNYWNCb29rIFBybyAxNCInLGNhdGVnb3J5OiJDb21wdXRlcnMiLGRlc2NyaXB0aW9uOiJNMyBQcm8gY2hpcCB3aXRoIDE4R0IgUkFNIixwcmljZToxOTk5LG9yaWdpbmFsUHJpY2U6MjE5OSxpY29uTmFtZToibHVjaWRlOmxhcHRvcCJ9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0iaXBhZCIKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7e25hbWU6ImlQYWQgQWlyIixjYXRlZ29yeToiVGFibGV0cyIsZGVzY3JpcHRpb246JzEwLjkiIExpcXVpZCBSZXRpbmEgZGlzcGxheScscHJpY2U6NTk5LGljb25OYW1lOiJsdWNpZGU6dGFibGV0In19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezB9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJrZXlib2FyZCIKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7e25hbWU6Ik1hZ2ljIEtleWJvYXJkIixjYXRlZ29yeToiQWNjZXNzb3JpZXMiLGRlc2NyaXB0aW9uOiJXaXJlbGVzcyBrZXlib2FyZCB3aXRoIFRvdWNoIElEIixwcmljZToxNDksaWNvbk5hbWU6Imx1Y2lkZTprZXlib2FyZCJ9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsyfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgIDxoMyBjbGFzcz0iY2FydC1zdW1tYXJ5LXRpdGxlIj5TaG9wcGluZyBDYXJ0PC9oMz4KICAgICAgICAgIDxkaXYgaWQ9ImludGVyYWN0aXZlLWNhcnQtc3VtbWFyeSI+CiAgICAgICAgICAgIDwhLS0gRHluYW1pY2FsbHkgdXBkYXRlZCAtLT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU2VsZWN0YWJsZSBQcm9kdWN0IENhcmRzIn0gLnN1YnRpdGxlPSR7IkNsaWNrIGNhcmRzIG9yIGNoZWNrYm94ZXMgdG8gc2VsZWN0IHByb2R1Y3RzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1ncmlkIj4KICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3tuYW1lOiJTb255IEFscGhhIDcgSVYiLGNhdGVnb3J5OiJDYW1lcmFzIixkZXNjcmlwdGlvbjoiRnVsbC1mcmFtZSBtaXJyb3JsZXNzIGNhbWVyYSIscHJpY2U6MjQ5OCxpY29uTmFtZToibHVjaWRlOmNhbWVyYSJ9fQogICAgICAgICAgICAuc2VsZWN0YWJsZT0keyEwfQogICAgICAgICAgICAuc2hvd1F1YW50aXR5U2VsZWN0b3I9JHshMX0KICAgICAgICAgICAgQHNlbGVjdGlvbkNoYW5nZT0ke3Q9PntsZXQgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjc2VsZWN0aW9uLW91dHB1dCIpO2lmKGUpe2xldCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmRbc2VsZWN0YWJsZV0iKSxyPVtdO2EuZm9yRWFjaChpPT57aS5zZWxlY3RlZCYmci5wdXNoKGkucHJvZHVjdERhdGEubmFtZSl9KSxlLnRleHRDb250ZW50PXIubGVuZ3RoPjA/YFNlbGVjdGVkOiAke3Iuam9pbigiLCAiKX1gOiJObyBwcm9kdWN0cyBzZWxlY3RlZCJ9fX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7e25hbWU6IkRKSSBNaW5pIDMgUHJvIixjYXRlZ29yeToiRHJvbmVzIixkZXNjcmlwdGlvbjoiTGlnaHR3ZWlnaHQgZHJvbmUgd2l0aCA0SyBjYW1lcmEiLHByaWNlOjc1OSxpY29uTmFtZToibHVjaWRlOnBsYW5lIn19CiAgICAgICAgICAgIC5zZWxlY3RhYmxlPSR7ITB9CiAgICAgICAgICAgIC5zaG93UXVhbnRpdHlTZWxlY3Rvcj0keyExfQogICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7dD0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3Rpb24tb3V0cHV0Iik7aWYoZSl7bGV0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZFtzZWxlY3RhYmxlXSIpLHI9W107YS5mb3JFYWNoKGk9PntpLnNlbGVjdGVkJiZyLnB1c2goaS5wcm9kdWN0RGF0YS5uYW1lKX0pLGUudGV4dENvbnRlbnQ9ci5sZW5ndGg+MD9gU2VsZWN0ZWQ6ICR7ci5qb2luKCIsICIpfWA6Ik5vIHByb2R1Y3RzIHNlbGVjdGVkIn19fQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7bmFtZToiR29Qcm8gSEVSTzEyIixjYXRlZ29yeToiQWN0aW9uIENhbWVyYXMiLGRlc2NyaXB0aW9uOiI1LjNLIHZpZGVvIHdpdGggSHlwZXJTbW9vdGggNi4wIixwcmljZTozOTksb3JpZ2luYWxQcmljZTo0NDksaWNvbk5hbWU6Imx1Y2lkZTp2aWRlbyJ9fQogICAgICAgICAgICAuc2VsZWN0YWJsZT0keyEwfQogICAgICAgICAgICAuc2hvd1F1YW50aXR5U2VsZWN0b3I9JHshMX0KICAgICAgICAgICAgQHNlbGVjdGlvbkNoYW5nZT0ke3Q9PntsZXQgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjc2VsZWN0aW9uLW91dHB1dCIpO2lmKGUpe2xldCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmRbc2VsZWN0YWJsZV0iKSxyPVtdO2EuZm9yRWFjaChpPT57aS5zZWxlY3RlZCYmci5wdXNoKGkucHJvZHVjdERhdGEubmFtZSl9KSxlLnRleHRDb250ZW50PXIubGVuZ3RoPjA/YFNlbGVjdGVkOiAke3Iuam9pbigiLCAiKX1gOiJObyBwcm9kdWN0cyBzZWxlY3RlZCJ9fX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0ZWQtcHJvZHVjdHMiIGlkPSJzZWxlY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgTm8gcHJvZHVjdHMgc2VsZWN0ZWQKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlByb2R1Y3QgVmFyaWF0aW9ucyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7bmFtZToiTGltaXRlZCBFZGl0aW9uIFNuZWFrZXJzIixjYXRlZ29yeToiRm9vdHdlYXIiLGRlc2NyaXB0aW9uOiJFeGNsdXNpdmUgY29sb3J3YXkgLSBPbmx5IDUwMCBwYWlycyIscHJpY2U6Mjk5LGljb25OYW1lOiJsdWNpZGU6Zm9vdHByaW50cyIsaW5TdG9jazohMSxzdG9ja1RleHQ6IlNvbGQgT3V0In19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezB9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3tuYW1lOiJNaW5pbWFsaXN0IFdhbGxldCIscHJpY2U6MzkuOTksaWNvbk5hbWU6Imx1Y2lkZTp3YWxsZXQifX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7e25hbWU6IlByZW1pdW0gQ29mZmVlIEJlYW5zIixjYXRlZ29yeToiRm9vZCAmIEJldmVyYWdlIixkZXNjcmlwdGlvbjoiU2luZ2xlIG9yaWdpbiwgbWVkaXVtIHJvYXN0IixwcmljZToxOC41LGljb25OYW1lOiJsdWNpZGU6Y29mZmVlIixjdXJyZW5jeToiXHUyMEFDIn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezJ9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7ZmUoKTtCZSgpO3ZhciBkNT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LG5yPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxxbzE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W107dmFyIEU9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBDPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6T2JqZWN0fSldLGY9W0Qoe3R5cGU6TnVtYmVyfSldLGQ9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxiPVtEKHt0eXBlOkJvb2xlYW59KV0sdj1bRCh7dHlwZTpCb29sZWFufSldLGQ1KHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicHJvZHVjdERhdGEiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJwcm9kdWN0RGF0YSJpbiB6LGdldDp6PT56LnByb2R1Y3REYXRhLHNldDooeixQKT0+e3oucHJvZHVjdERhdGE9UH19LG1ldGFkYXRhOkN9LHMsbCksZDUodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJxdWFudGl0eSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InF1YW50aXR5ImluIHosZ2V0Ono9PnoucXVhbnRpdHksc2V0Oih6LFApPT57ei5xdWFudGl0eT1QfX0sbWV0YWRhdGE6Q30sYyx1KSxkNSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dRdWFudGl0eVNlbGVjdG9yIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ic2hvd1F1YW50aXR5U2VsZWN0b3IiaW4geixnZXQ6ej0+ei5zaG93UXVhbnRpdHlTZWxlY3RvcixzZXQ6KHosUCk9Pnt6LnNob3dRdWFudGl0eVNlbGVjdG9yPVB9fSxtZXRhZGF0YTpDfSxoLGcpLGQ1KHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0YWJsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InNlbGVjdGFibGUiaW4geixnZXQ6ej0+ei5zZWxlY3RhYmxlLHNldDooeixQKT0+e3ouc2VsZWN0YWJsZT1QfX0sbWV0YWRhdGE6Q30seCxtKSxkNSh0aGlzLG51bGwsdix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ic2VsZWN0ZWQiaW4geixnZXQ6ej0+ei5zZWxlY3RlZCxzZXQ6KHosUCk9Pnt6LnNlbGVjdGVkPVB9fSxtZXRhZGF0YTpDfSx5LHcpLGQ1KG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOkN9LG51bGwsYSksRT1yPWUudmFsdWUsQyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpDfSl9c3RhdGljIGRlbW89V0l0OyNlPW5yKHRoaXMscyx7bmFtZToiUHJvZHVjdCBOYW1lIixwcmljZTowfSk7Z2V0IHByb2R1Y3REYXRhKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHByb2R1Y3REYXRhKEMpe3RoaXMuI2U9Q30jdD0obnIodGhpcyxsKSxucih0aGlzLGMsMCkpO2dldCBxdWFudGl0eSgpe3JldHVybiB0aGlzLiN0fXNldCBxdWFudGl0eShDKXt0aGlzLiN0PUN9I2E9KG5yKHRoaXMsdSksbnIodGhpcyxoLCEwKSk7Z2V0IHNob3dRdWFudGl0eVNlbGVjdG9yKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHNob3dRdWFudGl0eVNlbGVjdG9yKEMpe3RoaXMuI2E9Q30jcj0obnIodGhpcyxnKSxucih0aGlzLHgsITEpKTtnZXQgc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLiNyfXNldCBzZWxlY3RhYmxlKEMpe3RoaXMuI3I9Q30jaT0obnIodGhpcyxtKSxucih0aGlzLHksITEpKTtnZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy4jaX1zZXQgc2VsZWN0ZWQoQyl7dGhpcy4jaT1DfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWNhcmQ6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMnB4IDRweCAtMnB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY2FyZC5zZWxlY3RhYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWNhcmQuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke3AuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIsImhzbCgyMTMuMSA5My45JSA2Ny44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWltYWdlIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDE4MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWltYWdlIGltZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICB9CgogICAgICAucHJvZHVjdC1pbWFnZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogNDhweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUpIiwiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3ggewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgcmlnaHQ6IDEycHg7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMjE1IDIwLjIlIDY1LjElKSIsImhzbCgyMTUgMjAuMiUgMzUuMSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3guY2hlY2tlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICB9CgogICAgICAuc2VsZWN0aW9uLWNoZWNrYm94IGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveC5jaGVja2VkIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICB9CgogICAgICAucHJvZHVjdC1jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgZmxleDogMTsKICAgICAgfQogICAgICAKICAgICAgLnByb2R1Y3QtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWNhdGVnb3J5IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgICAgfQogICAgICAKICAgICAgLnByb2R1Y3QtbmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBmbGV4OiAxOwogICAgICB9CiAgICAgIAogICAgICAucHJvZHVjdC1mb290ZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAucHJvZHVjdC1wcmljZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAucHJpY2UtY3VycmVudCB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAucHJpY2Utb3JpZ2luYWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICAgICAgfQoKICAgICAgLnN0b2NrLXN0YXR1cyB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICB9CgogICAgICAuc3RvY2stc3RhdHVzLmluLXN0b2NrIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiLCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIil9OwogICAgICB9CgogICAgICAuc3RvY2stc3RhdHVzLm91dC1vZi1zdG9jayB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe2xldHtuYW1lOkMsY2F0ZWdvcnk6eixkZXNjcmlwdGlvbjpQLHByaWNlOl8sb3JpZ2luYWxQcmljZTokLGN1cnJlbmN5Okg9IiQiLGluU3RvY2s6TD0hMCxzdG9ja1RleHQ6az1MPyJJbiBTdG9jayI6Ik91dCBvZiBTdG9jayIsaW1hZ2VVcmw6TixpY29uTmFtZTpTPSJsdWNpZGU6cGFja2FnZSJ9PXRoaXMucHJvZHVjdERhdGEsVD1SPT5gJHtIfSR7Ui50b0ZpeGVkKDIpfWA7cmV0dXJuIE1gCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9InByb2R1Y3QtY2FyZCAke3RoaXMuc2VsZWN0YWJsZT8ic2VsZWN0YWJsZSI6IiJ9ICR7dGhpcy5zZWxlY3RlZD8ic2VsZWN0ZWQiOiIifSIKICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNhcmRDbGlja30KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtaW1hZ2UiPgogICAgICAgICAgJHtOP01gCiAgICAgICAgICAgIDxpbWcgc3JjPSIke059IiBhbHQ9IiR7Q30iPgogICAgICAgICAgYDpNYAogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7U30+PC9kZWVzLWljb24+CiAgICAgICAgICBgfQogICAgICAgICAgJHt0aGlzLnNlbGVjdGFibGU/TWAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0ic2VsZWN0aW9uLWNoZWNrYm94ICR7dGhpcy5zZWxlY3RlZD8iY2hlY2tlZCI6IiJ9IgogICAgICAgICAgICAgIEBjbGljaz0ke1I9PntSLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuaGFuZGxlU2VsZWN0aW9uVG9nZ2xlKCl9fQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2hlY2sifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOiIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtY29udGVudCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWhlYWRlciI+CiAgICAgICAgICAgICR7ej9NYDxkaXYgY2xhc3M9InByb2R1Y3QtY2F0ZWdvcnkiPiR7en08L2Rpdj5gOiIifQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LW5hbWUiPiR7Q308L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgJHtQP01gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZGVzY3JpcHRpb24iPiR7UH08L2Rpdj4KICAgICAgICAgIGA6IiJ9CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdG9jay1zdGF0dXMgJHtMPyJpbi1zdG9jayI6Im91dC1vZi1zdG9jayJ9Ij4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke0w/Imx1Y2lkZTpjaGVjay1jaXJjbGUiOiJsdWNpZGU6eC1jaXJjbGUifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgJHtrfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWZvb3RlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtcHJpY2UiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmljZS1jdXJyZW50Ij4ke1QoXyl9PC9zcGFuPgogICAgICAgICAgICAgICR7JCYmJD5fP01gCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJpY2Utb3JpZ2luYWwiPiR7VCgkKX08L3NwYW4+CiAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICR7dGhpcy5zaG93UXVhbnRpdHlTZWxlY3Rvcj9NYAogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IKICAgICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMucXVhbnRpdHl9CiAgICAgICAgICAgICAgICBAY2hhbmdlU3ViamVjdD0ke1I9Pnt0aGlzLnF1YW50aXR5PVIuZGV0YWlsLmdldFZhbHVlKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicXVhbnRpdHlDaGFuZ2UiLHtkZXRhaWw6e3F1YW50aXR5OnRoaXMucXVhbnRpdHkscHJvZHVjdERhdGE6dGhpcy5wcm9kdWN0RGF0YX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX19CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgICAgICBgOiIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1oYW5kbGVDYXJkQ2xpY2soKXt0aGlzLnNlbGVjdGFibGUmJih0aGlzLnNlbGVjdGVkPSF0aGlzLnNlbGVjdGVkLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGlvbkNoYW5nZSIse2RldGFpbDp7c2VsZWN0ZWQ6dGhpcy5zZWxlY3RlZCxwcm9kdWN0RGF0YTp0aGlzLnByb2R1Y3REYXRhfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpKX1oYW5kbGVTZWxlY3Rpb25Ub2dnbGUoKXt0aGlzLnNlbGVjdGVkPSF0aGlzLnNlbGVjdGVkLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGlvbkNoYW5nZSIse2RldGFpbDp7c2VsZWN0ZWQ6dGhpcy5zZWxlY3RlZCxwcm9kdWN0RGF0YTp0aGlzLnByb2R1Y3REYXRhfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxucih0aGlzLHcpfXN0YXRpY3tucihyLGEpfX07cmV0dXJuIEU9cn0pKCk7ZmUoKTt2YXIgR0l0PSgpPT5NYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke3RlYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2hvcHBpbmctZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMjgwcHgsIDFmcikpOwogICAgICAgICAgZ2FwOiAyMHB4OwogICAgICAgIH0KCiAgICAgICAgLmNhcnQtc3VtbWFyeSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNSAyMC4yJSAyMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5LXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLmNhcnQtaXRlbSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC10b3RhbCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBRdWFudGl0eSBTZWxlY3RvciJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgcXVhbnRpdHkgaW5wdXQgd2l0aCBpbmNyZW1lbnQvZGVjcmVtZW50IGJ1dHRvbnMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAubGFiZWw9JHsiUXVhbnRpdHkifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNlbGVjdCB0aGUgZGVzaXJlZCBxdWFudGl0eSJ9CiAgICAgICAgICAudmFsdWU9JHsxfQogICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAubGFiZWw9JHsiSXRlbXMgaW4gQ2FydCJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRqdXN0IHRoZSBxdWFudGl0eSBvZiBpdGVtcyJ9CiAgICAgICAgICAudmFsdWU9JHszfQogICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNob3BwaW5nIENhcnQifSAuc3VidGl0bGU9JHsiTW9kZXJuIGUtY29tbWVyY2UgcHJvZHVjdCBjYXJkcyB3aXRoIGludGVyYWN0aXZlIHF1YW50aXR5IHNlbGVjdG9ycyJ9IC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT0oKT0+e2xldCBhPXQucXVlcnlTZWxlY3RvcigiI2hlYWRwaG9uZXMtcXR5Iikscj10LnF1ZXJ5U2VsZWN0b3IoIiNtb3VzZS1xdHkiKSxpPXQucXVlcnlTZWxlY3RvcigiI2tleWJvYXJkLXF0eSIpLG89YT8ucXVhbnRpdHl8fDAscz1yPy5xdWFudGl0eXx8MCxsPWk/LnF1YW50aXR5fHwwLGY9MzQ5Ljk5Km8sYz05OS45OSpzLHU9NzkuOTkqbCxkPWYrYyt1LGg9dC5xdWVyeVNlbGVjdG9yKCIjY2FydC1zdW1tYXJ5LWNvbnRlbnQiKTtoJiYoaC5pbm5lckhUTUw9YAogICAgICAgICAgICAgICR7bz4wP2A8ZGl2IGNsYXNzPSJjYXJ0LWl0ZW0iPgogICAgICAgICAgICAgICAgPHNwYW4+U29ueSBXSC0xMDAwWE01ICgke299KTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPiQke2YudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+YDoiIn0KICAgICAgICAgICAgICAke3M+MD9gPGRpdiBjbGFzcz0iY2FydC1pdGVtIj4KICAgICAgICAgICAgICAgIDxzcGFuPkxvZ2l0ZWNoIE1YIE1hc3RlciAzUyAoJHtzfSk8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj4kJHtjLnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmA6IiJ9CiAgICAgICAgICAgICAgJHtsPjA/YDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5LZXljaHJvbiBLMiAoJHtsfSk8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj4kJHt1LnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmA6IiJ9CiAgICAgICAgICAgICAgJHtkPT09MD8nPGRpdiBjbGFzcz0iY2FydC1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzk5OTsiPllvdXIgY2FydCBpcyBlbXB0eTwvZGl2Pic6IiJ9CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FydC10b3RhbCI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Ub3RhbDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPiQke2QudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGApfTtzZXRUaW1lb3V0KGUsMTAwKSx0LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQiKS5mb3JFYWNoKGE9PnthLmFkZEV2ZW50TGlzdGVuZXIoInF1YW50aXR5Q2hhbmdlIixlKX0pfX0+CiAgICAgICAgPGRpdiBjbGFzcz0ic2hvcHBpbmctZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0iaGVhZHBob25lcy1xdHkiCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3tuYW1lOiJTb255IFdILTEwMDBYTTUgV2lyZWxlc3MgSGVhZHBob25lcyIsY2F0ZWdvcnk6IkF1ZGlvIixkZXNjcmlwdGlvbjoiSW5kdXN0cnktbGVhZGluZyBub2lzZSBjYW5jZWxpbmcgd2l0aCBBdXRvIE5DIE9wdGltaXplciIscHJpY2U6MzQ5Ljk5LG9yaWdpbmFsUHJpY2U6Mzk5Ljk5LGljb25OYW1lOiJsdWNpZGU6aGVhZHBob25lcyJ9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9Im1vdXNlLXF0eSIKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7e25hbWU6IkxvZ2l0ZWNoIE1YIE1hc3RlciAzUyIsY2F0ZWdvcnk6IkFjY2Vzc29yaWVzIixkZXNjcmlwdGlvbjoiUGVyZm9ybWFuY2Ugd2lyZWxlc3MgbW91c2Ugd2l0aCB1bHRyYS1mYXN0IHNjcm9sbGluZyIscHJpY2U6OTkuOTksaWNvbk5hbWU6Imx1Y2lkZTptb3VzZS1wb2ludGVyIn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezJ9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0ia2V5Ym9hcmQtcXR5IgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7bmFtZToiS2V5Y2hyb24gSzIgV2lyZWxlc3MgTWVjaGFuaWNhbCBLZXlib2FyZCIsY2F0ZWdvcnk6IktleWJvYXJkcyIsZGVzY3JpcHRpb246IkNvbXBhY3QgNzUlIGxheW91dCB3aXRoIGhvdC1zd2FwcGFibGUgc3dpdGNoZXMiLHByaWNlOjc5Ljk5LG9yaWdpbmFsUHJpY2U6OTQuOTksaWNvbk5hbWU6Imx1Y2lkZTprZXlib2FyZCJ9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgIDxoMyBjbGFzcz0iY2FydC1zdW1tYXJ5LXRpdGxlIj5PcmRlciBTdW1tYXJ5PC9oMz4KICAgICAgICAgIDxkaXYgaWQ9ImNhcnQtc3VtbWFyeS1jb250ZW50Ij4KICAgICAgICAgICAgPCEtLSBDb250ZW50IHdpbGwgYmUgZHluYW1pY2FsbHkgdXBkYXRlZCAtLT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUmVxdWlyZWQgJiBEaXNhYmxlZCBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBmb3IgdmFsaWRhdGlvbiBhbmQgcmVzdHJpY3Rpb25zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgLmxhYmVsPSR7Ik51bWJlciBvZiBMaWNlbnNlcyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IGhvdyBtYW55IGxpY2Vuc2VzIHlvdSBuZWVkIn0KICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgLnZhbHVlPSR7MX0KICAgICAgICA+PC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3I+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgLmxhYmVsPSR7IkZpeGVkIFF1YW50aXR5In0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIHF1YW50aXR5IGNhbm5vdCBiZSBjaGFuZ2VkIn0KICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgLnZhbHVlPSR7NX0KICAgICAgICA+PC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3I+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJPcmRlciBGb3JtIn0gLnN1YnRpdGxlPSR7IkNvbXBsZXRlIG9yZGVyIGZvcm0gd2l0aCBxdWFudGl0eSBzZWxlY3Rpb24ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQ3VzdG9tZXIgTmFtZSJ9IC5yZXF1aXJlZD0keyEwfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkJhc2ljIFBsYW4iLCJQcm8gUGxhbiIsIkVudGVycHJpc2UgUGxhbiJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAgIC5sYWJlbD0keyJRdWFudGl0eSJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJOdW1iZXIgb2YgbGljZW5zZXMifQogICAgICAgICAgICAudmFsdWU9JHsxfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAubGFiZWw9JHsiU3BlY2lhbCBJbnN0cnVjdGlvbnMifQogICAgICAgICAgICAuaW5wdXRUeXBlPSR7InRleHRhcmVhIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgO2ZlKCk7U3QoKTtCZSgpO3ZhciBZSXQ9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxRRGU9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LEtEZT0oKCk9PntsZXQgdD1bY2UoImRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvciIpXSxlLGE9W10scixpPVhlLG8scz1bXSxsPVtdO3ZhciBmPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgYz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOk51bWJlcn0pXSxZSXQodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dT0+InZhbHVlImluIHUsZ2V0OnU9PnUudmFsdWUsc2V0Oih1LGQpPT57dS52YWx1ZT1kfX0sbWV0YWRhdGE6Y30scyxsKSxZSXQobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6Y30sbnVsbCxhKSxmPXI9ZS52YWx1ZSxjJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmN9KX1zdGF0aWMgZGVtbz1HSXQ7c3RhdGljIGRlbW9Hcm91cD0iSW5wdXQiOyNlPVFEZSh0aGlzLHMsMSk7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKGMpe3RoaXMuI2U9Y31zdGF0aWMgc3R5bGVzPVt4ZSwuLi5YZS5iYXNlU3R5bGVzLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICAucXVhbnRpdHktY29udGFpbmVyIHsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgbWluLXdpZHRoOiAxMjBweDsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucXVhbnRpdHktY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB9CgogICAgICAgIC5xdWFudGl0eS1jb250YWluZXI6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtwLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdG9yIHsKICAgICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdG9yOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0b3I6YWN0aXZlIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5MSUpIiwiaHNsKDAgMCUgMTElKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdG9yLnBsdXMgewogICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5IHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMDZlbTsKICAgICAgICB9CgogICAgICAgIC8qIEtleWJvYXJkIG5hdmlnYXRpb24gZm9jdXMgc3R5bGVzICovCiAgICAgICAgLnNlbGVjdG9yOmZvY3VzIHsKICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLyogTWluIHZhbHVlIHN0YXRlICovCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51czpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIH0KCiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgJHt0aGlzLmxhYmVsP01gPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0gLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPmA6IiJ9CiAgICAgICAgPGRpdiAKICAgICAgICAgIGNsYXNzPSJxdWFudGl0eS1jb250YWluZXIgJHt0aGlzLmRpc2FibGVkPyJkaXNhYmxlZCI6IiJ9IgogICAgICAgICAgZGF0YS1taW49IiR7dGhpcy52YWx1ZTw9MH0iCiAgICAgICAgPgogICAgICAgICAgPGRpdiAKICAgICAgICAgICAgY2xhc3M9InNlbGVjdG9yIG1pbnVzIiAKICAgICAgICAgICAgQGNsaWNrPSIkeygpPT57dGhpcy5kZWNyZWFzZSgpfX0iCiAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHtjPT57KGMua2V5PT09IkVudGVyInx8Yy5rZXk9PT0iICIpJiYoYy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZGVjcmVhc2UoKSl9fSIKICAgICAgICAgICAgcm9sZT0iYnV0dG9uIgogICAgICAgICAgICBhcmlhLWxhYmVsPSJEZWNyZWFzZSBxdWFudGl0eSIKICAgICAgICAgID7iiJI8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InF1YW50aXR5IiBhcmlhLWxpdmU9InBvbGl0ZSIgYXJpYS1hdG9taWM9InRydWUiPiR7dGhpcy52YWx1ZX08L2Rpdj4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzZWxlY3RvciBwbHVzIiAKICAgICAgICAgICAgQGNsaWNrPSIkeygpPT57dGhpcy5pbmNyZWFzZSgpfX0iCiAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHtjPT57KGMua2V5PT09IkVudGVyInx8Yy5rZXk9PT0iICIpJiYoYy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVhc2UoKSl9fSIKICAgICAgICAgICAgcm9sZT0iYnV0dG9uIgogICAgICAgICAgICBhcmlhLWxhYmVsPSJJbmNyZWFzZSBxdWFudGl0eSIKICAgICAgICAgID4rPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1pbmNyZWFzZSgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLnZhbHVlKyssdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpfWRlY3JlYXNlKCl7IXRoaXMuZGlzYWJsZWQmJnRoaXMudmFsdWU+MCYmKHRoaXMudmFsdWUtLSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX1zZXRWYWx1ZShjKXt0aGlzLnZhbHVlPWN9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLFFEZSh0aGlzLGwpfXN0YXRpY3tRRGUocixhKX19O3JldHVybiBmPXJ9KSgpO2ZlKCk7dmFyIFpJdD0oKT0+TWAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHt0ZWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmRlbW8tZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzMDBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5yZXN1bHQtZGlzcGxheSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTA1LCAyNDIsIDAuMSk7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIFJhZGlvIEdyb3VwcyJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgc3RyaW5nIG9wdGlvbnMgZm9yIGNvbW1vbiB1c2UgY2FzZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWdyaWQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiU3Vic2NyaXB0aW9uIFBsYW4ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siQmFzaWMgLSAkOS9tb250aCIsIlBybyAtICQyOS9tb250aCIsIkVudGVycHJpc2UgLSAkOTkvbW9udGgiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlBybyAtICQyOS9tb250aCJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDaG9vc2UgeW91ciBzdWJzY3JpcHRpb24gdGllciJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IlByaW9yaXR5IExldmVsIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkhpZ2giLCJNZWRpdW0iLCJMb3ciXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1lZGl1bSJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gSG9yaXpvbnRhbCBMYXlvdXQifSAuc3VidGl0bGU9JHsiUmFkaW8gZ3JvdXBzIHdpdGggaG9yaXpvbnRhbCBhcnJhbmdlbWVudCJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIC5sYWJlbD0keyJEbyB5b3UgYWdyZWUgd2l0aCB0aGUgdGVybXM/In0KICAgICAgICAgIC5vcHRpb25zPSR7WyJZZXMiLCJObyIsIk1heWJlIl19CiAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlllcyJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIC5sYWJlbD0keyJFeHBlcmllbmNlIExldmVsIn0KICAgICAgICAgIC5vcHRpb25zPSR7WyJCZWdpbm5lciIsIkludGVybWVkaWF0ZSIsIkV4cGVydCJdfQogICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJJbnRlcm1lZGlhdGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNlbGVjdCB5b3VyIGV4cGVyaWVuY2UgbGV2ZWwgd2l0aCB3ZWIgZGV2ZWxvcG1lbnQifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIEFkdmFuY2VkIE9wdGlvbnMifSAuc3VidGl0bGU9JHsiVXNpbmcgb2JqZWN0IGZvcm1hdCB3aXRoIGtleXMgYW5kIHBheWxvYWRzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgaWQ9ImFkdmFuY2VkLXJhZGlvIgogICAgICAgICAgLmxhYmVsPSR7IlNlbGVjdCBSZWdpb24ifQogICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiVW5pdGVkIFN0YXRlcyAoVVMgRWFzdCkiLGtleToidXMtZWFzdCIscGF5bG9hZDp7cmVnaW9uOiJ1cy1lYXN0LTEiLGxhdGVuY3k6MjB9fSx7b3B0aW9uOiJFdXJvcGUgKEZyYW5rZnVydCkiLGtleToiZXUtY2VudHJhbCIscGF5bG9hZDp7cmVnaW9uOiJldS1jZW50cmFsLTEiLGxhdGVuY3k6NTB9fSx7b3B0aW9uOiJBc2lhIFBhY2lmaWMgKFNpbmdhcG9yZSkiLGtleToiYXAtc291dGhlYXN0IixwYXlsb2FkOntyZWdpb246ImFwLXNvdXRoZWFzdC0xIixsYXRlbmN5OjEyMH19XX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJldS1jZW50cmFsIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDaG9vc2UgdGhlIGNsb3Nlc3QgcmVnaW9uIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlIn0KICAgICAgICAgIEBjaGFuZ2U9JHt0PT57bGV0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3JlZ2lvbi1yZXN1bHQiKTtlJiYoZS50ZXh0Q29udGVudD0iU2VsZWN0ZWQ6ICIrSlNPTi5zdHJpbmdpZnkodC5kZXRhaWwudmFsdWUsbnVsbCwyKSl9fQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICA8ZGl2IGlkPSJyZWdpb24tcmVzdWx0IiBjbGFzcz0icmVzdWx0LWRpc3BsYXkiPlNlbGVjdGVkOiB7ICJyZWdpb24iOiAiZXUtY2VudHJhbC0xIiwgImxhdGVuY3kiOiA1MCB9PC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBTdXJ2ZXkgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSByYWRpbyBncm91cHMgZm9yIHN1cnZleXMgYW5kIGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkhvdyBzYXRpc2ZpZWQgYXJlIHlvdT8ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siVmVyeSBTYXRpc2ZpZWQiLCJTYXRpc2ZpZWQiLCJOZXV0cmFsIiwiRGlzc2F0aXNmaWVkIiwiVmVyeSBEaXNzYXRpc2ZpZWQiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlNhdGlzZmllZCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IldvdWxkIHlvdSByZWNvbW1lbmQgdXM/In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkRlZmluaXRlbHkiLCJQcm9iYWJseSIsIk5vdCBTdXJlIiwiUHJvYmFibHkgTm90IiwiRGVmaW5pdGVseSBOb3QiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlByb2JhYmx5In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIFN0YXRlcyAmIFZhbGlkYXRpb24ifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBhbmQgdmFsaWRhdGlvbiBleGFtcGxlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJSZXF1aXJlZCBTZWxlY3Rpb24ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siT3B0aW9uIEEiLCJPcHRpb24gQiIsIk9wdGlvbiBDIl19CiAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIFN0YXRlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkRpc2FibGVkIE9wdGlvbiAxIiwiRGlzYWJsZWQgT3B0aW9uIDIiLCJEaXNhYmxlZCBPcHRpb24gMyJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRGlzYWJsZWQgT3B0aW9uIDIifQogICAgICAgICAgICAuZGlzYWJsZWQ9JHshMH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIFNldHRpbmdzIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiQ29tbW9uIHBhdHRlcm5zIGluIGFwcGxpY2F0aW9uIHNldHRpbmdzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgLmxhYmVsPSR7IlRoZW1lIFByZWZlcmVuY2UifQogICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiTGlnaHQgVGhlbWUiLGtleToibGlnaHQiLHBheWxvYWQ6ImxpZ2h0In0se29wdGlvbjoiRGFyayBUaGVtZSIsa2V5OiJkYXJrIixwYXlsb2FkOiJkYXJrIn0se29wdGlvbjoiU3lzdGVtIERlZmF1bHQiLGtleToic3lzdGVtIixwYXlsb2FkOiJhdXRvIn1dfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7ImRhcmsifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkNob29zZSBob3cgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBhcHBlYXIifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAubGFiZWw9JHsiTm90aWZpY2F0aW9uIEZyZXF1ZW5jeSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1siQWxsIE5vdGlmaWNhdGlvbnMiLCJJbXBvcnRhbnQgT25seSIsIk5vbmUiXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJJbXBvcnRhbnQgT25seSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ29udHJvbCBob3cgb2Z0ZW4geW91IHJlY2VpdmUgbm90aWZpY2F0aW9ucyJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIC5sYWJlbD0keyJMYW5ndWFnZSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1siRW5nbGlzaCIsIkdlcm1hbiIsIkZyZW5jaCIsIlNwYW5pc2giLCJKYXBhbmVzZSJdfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkVuZ2xpc2gifQogICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IldvcmtzIHNlYW1sZXNzbHkgd2l0aCBkZWVzLWZvcm0ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAubGFiZWw9JHsiUHJvZHVjdCBOYW1lIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIC5rZXk9JHsicHJvZHVjdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0IENhdGVnb3J5In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkVsZWN0cm9uaWNzIiwiQ2xvdGhpbmciLCJCb29rcyIsIkhvbWUgJiBHYXJkZW4iLCJTcG9ydHMiXX0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIC5rZXk9JHsiY2F0ZWdvcnkifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJDb25kaXRpb24ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siTmV3IiwiTGlrZSBOZXciLCJHb29kIiwiRmFpciIsIlBvb3IiXX0KICAgICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJjb25kaXRpb24ifQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiTmV3In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiU2hpcHBpbmcgU3BlZWQifQogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJTdGFuZGFyZCAoNS03IGRheXMpIixrZXk6InN0YW5kYXJkIixwYXlsb2FkOntkYXlzOjcscHJpY2U6MH19LHtvcHRpb246IkV4cHJlc3MgKDItMyBkYXlzKSIsa2V5OiJleHByZXNzIixwYXlsb2FkOntkYXlzOjMscHJpY2U6MTB9fSx7b3B0aW9uOiJPdmVybmlnaHQiLGtleToib3Zlcm5pZ2h0IixwYXlsb2FkOntkYXlzOjEscHJpY2U6MjV9fV19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJzdGFuZGFyZCJ9CiAgICAgICAgICAgIC5rZXk9JHsic2hpcHBpbmcifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCAudGV4dD0keyJTdWJtaXQgUHJvZHVjdCJ9PjwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgO2ZlKCk7QmUoKTt2YXIgZ0k9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxqaT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sSkRlPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1pbnB1dC1yYWRpb2dyb3VwIildLGUsYT1bXSxyLGk9WGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W107dmFyIHY9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCB5PXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6QXJyYXl9KV0sZj1bRCgpXSxkPVtEKHt0eXBlOlN0cmluZ30pXSxiPVtEKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLGdJKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToib3B0aW9ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+Im9wdGlvbnMiaW4gdyxnZXQ6dz0+dy5vcHRpb25zLHNldDoodyxFKT0+e3cub3B0aW9ucz1FfX0sbWV0YWRhdGE6eX0scyxsKSxnSSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkT3B0aW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4ic2VsZWN0ZWRPcHRpb24iaW4gdyxnZXQ6dz0+dy5zZWxlY3RlZE9wdGlvbixzZXQ6KHcsRSk9Pnt3LnNlbGVjdGVkT3B0aW9uPUV9fSxtZXRhZGF0YTp5fSxjLHUpLGdJKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZGlyZWN0aW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4iZGlyZWN0aW9uImluIHcsZ2V0Onc9PncuZGlyZWN0aW9uLHNldDoodyxFKT0+e3cuZGlyZWN0aW9uPUV9fSxtZXRhZGF0YTp5fSxoLGcpLGdJKHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsaWRhdGlvblN0YXRlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4idmFsaWRhdGlvblN0YXRlImluIHcsZ2V0Onc9PncudmFsaWRhdGlvblN0YXRlLHNldDoodyxFKT0+e3cudmFsaWRhdGlvblN0YXRlPUV9fSxtZXRhZGF0YTp5fSx4LG0pLGdJKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOnl9LG51bGwsYSksdj1yPWUudmFsdWUseSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp5fSl9c3RhdGljIGRlbW89Wkl0O3N0YXRpYyBkZW1vR3JvdXA9IklucHV0IjsjZT1qaSh0aGlzLHMsW10pO2dldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuI2V9c2V0IG9wdGlvbnMoeSl7dGhpcy4jZT15fSN0PShqaSh0aGlzLGwpLGppKHRoaXMsYywiIikpO2dldCBzZWxlY3RlZE9wdGlvbigpe3JldHVybiB0aGlzLiN0fXNldCBzZWxlY3RlZE9wdGlvbih5KXt0aGlzLiN0PXl9I2E9KGppKHRoaXMsdSksamkodGhpcyxoLCJ2ZXJ0aWNhbCIpKTtnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGRpcmVjdGlvbih5KXt0aGlzLiNhPXl9I3I9KGppKHRoaXMsZyksamkodGhpcyx4LG51bGwpKTtnZXQgdmFsaWRhdGlvblN0YXRlKCl7cmV0dXJuIHRoaXMuI3J9c2V0IHZhbGlkYXRpb25TdGF0ZSh5KXt0aGlzLiNyPXl9Z2V0IHZhbHVlKCl7bGV0IHk9dGhpcy5nZXRPcHRpb25CeUtleSh0aGlzLnNlbGVjdGVkT3B0aW9uKTtyZXR1cm4gdHlwZW9mIHk9PSJvYmplY3QiJiZ5LnBheWxvYWQhPT12b2lkIDA/eS5wYXlsb2FkOnRoaXMuc2VsZWN0ZWRPcHRpb259c2V0IHZhbHVlKHkpe2lmKHR5cGVvZiB5PT0ic3RyaW5nIil0aGlzLnNlbGVjdGVkT3B0aW9uPXk7ZWxzZXtsZXQgdz10aGlzLm9wdGlvbnMuZmluZChFPT50eXBlb2YgRT09Im9iamVjdCImJkUucGF5bG9hZD09PXkpO3cmJnR5cGVvZiB3PT0ib2JqZWN0IiYmKHRoaXMuc2VsZWN0ZWRPcHRpb249dy5rZXkpfX1zdGF0aWMgc3R5bGVzPVt4ZSwuLi5YZS5iYXNlU3R5bGVzLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGdhcDogMjBweDsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA2cHggMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lci5ob3Jpem9udGFsIC5yYWRpby1vcHRpb24gewogICAgICAgIHBhZGRpbmc6IDZweCAyMHB4IDZweCAwOwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uOmhvdmVyIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUpIiwiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uOmhvdmVyIC5yYWRpby1sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCJoc2woMjE1IDIwLjIlIDM1LjElKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjE1IDMwJSA2LjglKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsImhzbCgyMTMuMSA5My45JSA2Ny44JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIxNSAzMCUgNi44JSkiKX07CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGU6OmFmdGVyIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICB9CgogICAgICAucmFkaW8tY2lyY2xlOmZvY3VzLXZpc2libGUgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMTUgMzAlIDMuOSUpIil9LAogICAgICAgICAgICAgICAgICAgIDAgMCAwIDRweCAke3AuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsImhzbCgyMTMuMSA5My45JSA2Ny44JSkiKX07CiAgICAgIH0KCiAgICAgIC5yYWRpby1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMDZlbTsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tbGFiZWwgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5yYWRpby1vcHRpb24gewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAucmFkaW8tb3B0aW9uOmhvdmVyIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUpIiwiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIxNSAzMCUgNi44JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5yYWRpby1vcHRpb246aG92ZXIgLnJhZGlvLWxhYmVsIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgfQoKICAgICAgLmxhYmVsLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDA2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5kZXNjcmlwdGlvbi10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMDNlbTsKICAgICAgfQoKICAgICAgLyogVmFsaWRhdGlvbiBzdHlsZXMgKi8KICAgICAgOmhvc3QoW3ZhbGlkYXRpb25TdGF0ZT0iaW52YWxpZCJdKSAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiXSkgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsImhzbCgwIDYyLjglIDMwLjYlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb25TdGF0ZT0idmFsaWQiXSkgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiwiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIsImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9Indhcm4iXSkgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCJoc2woNDUuNCA5My40JSA0Ny41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIsImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLyogT3ZlcnJpZGUgYmFzZSBncmlkIGxheW91dCBmb3IgcmFkaW9ncm91cCB0byBwcmV2ZW50IGxhcmdlIGdhcHMgKi8KICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJsZWZ0Il0pIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJyaWdodCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG87CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWw/TWA8ZGl2IGNsYXNzPSJsYWJlbC10ZXh0Ij4ke3RoaXMubGFiZWx9PC9kaXY+YDoiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyICR7dGhpcy5kaXJlY3Rpb259Ij4KICAgICAgICAgICR7dGhpcy5vcHRpb25zLm1hcCh5PT57bGV0IHc9dGhpcy5nZXRPcHRpb25LZXkoeSksRT10aGlzLmdldE9wdGlvbkxhYmVsKHkpLEM9dGhpcy5zZWxlY3RlZE9wdGlvbj09PXc7cmV0dXJuIE1gCiAgICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICAgIGNsYXNzPSJyYWRpby1vcHRpb24gJHtDPyJzZWxlY3RlZCI6IiJ9IgogICAgICAgICAgICAgICAgQGNsaWNrPSIkeygpPT50aGlzLnNlbGVjdE9wdGlvbih3KX0iCiAgICAgICAgICAgICAgICBAa2V5ZG93bj0iJHt6PT50aGlzLmhhbmRsZUtleWRvd24oeix3KX0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICAgICAgY2xhc3M9InJhZGlvLWNpcmNsZSIgCiAgICAgICAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9IgogICAgICAgICAgICAgICAgICByb2xlPSJyYWRpbyIKICAgICAgICAgICAgICAgICAgYXJpYS1jaGVja2VkPSIke0N9IgogICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSIke0V9IgogICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaW8tbGFiZWwiPiR7RX08L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYH0pfQogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy5kZXNjcmlwdGlvbj9NYDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uLXRleHQiPiR7dGhpcy5kZXNjcmlwdGlvbn08L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgIGB9Z2V0T3B0aW9uS2V5KHkpe3JldHVybiB0eXBlb2YgeT09InN0cmluZyI/eTp5LmtleX1nZXRPcHRpb25MYWJlbCh5KXtyZXR1cm4gdHlwZW9mIHk9PSJzdHJpbmciP3k6eS5vcHRpb259Z2V0T3B0aW9uQnlLZXkoeSl7cmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKHc9PnRoaXMuZ2V0T3B0aW9uS2V5KHcpPT09eSl9c2VsZWN0T3B0aW9uKHkpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO2xldCB3PXRoaXMuc2VsZWN0ZWRPcHRpb247dGhpcy5zZWxlY3RlZE9wdGlvbj15LHchPT15JiYodGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2hhbmdlIix7ZGV0YWlsOnt2YWx1ZTp0aGlzLnZhbHVlfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImlucHV0Iix7ZGV0YWlsOnt2YWx1ZTp0aGlzLnZhbHVlfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKHkpe3RoaXMudmFsdWU9eX1hc3luYyB2YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJlcXVpcmVkJiYhdGhpcy5zZWxlY3RlZE9wdGlvbj8odGhpcy52YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiLCExKToodGhpcy52YWxpZGF0aW9uU3RhdGU9InZhbGlkIiwhMCl9YXN5bmMgZmlyc3RVcGRhdGVkKCl7aWYoIXRoaXMuc2VsZWN0ZWRPcHRpb24mJnRoaXMub3B0aW9ucy5sZW5ndGg+MCYmIXRoaXMucmVxdWlyZWQpe2xldCB5PXRoaXMub3B0aW9uc1swXTt0aGlzLnNlbGVjdGVkT3B0aW9uPXRoaXMuZ2V0T3B0aW9uS2V5KHkpfX1oYW5kbGVLZXlkb3duKHksdyl7dGhpcy5kaXNhYmxlZHx8KHkua2V5PT09IiAifHx5LmtleT09PSJFbnRlciI/KHkucHJldmVudERlZmF1bHQoKSx0aGlzLnNlbGVjdE9wdGlvbih3KSk6eS5rZXk9PT0iQXJyb3dEb3duInx8eS5rZXk9PT0iQXJyb3dSaWdodCI/KHkucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTmV4dE9wdGlvbigpKTooeS5rZXk9PT0iQXJyb3dVcCJ8fHkua2V5PT09IkFycm93TGVmdCIpJiYoeS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNQcmV2aW91c09wdGlvbigpKSl9Zm9jdXNOZXh0T3B0aW9uKCl7bGV0IHk9QXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiLnJhZGlvLWNpcmNsZSIpKSxFPSh5LmZpbmRJbmRleChDPT5DPT09dGhpcy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQpKzEpJXkubGVuZ3RoO3lbRV0uZm9jdXMoKX1mb2N1c1ByZXZpb3VzT3B0aW9uKCl7bGV0IHk9QXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiLnJhZGlvLWNpcmNsZSIpKSx3PXkuZmluZEluZGV4KEM9PkM9PT10aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCksRT13PD0wP3kubGVuZ3RoLTE6dy0xO3lbRV0uZm9jdXMoKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksamkodGhpcyxtKX1zdGF0aWN7amkocixhKX19O3JldHVybiB2PXJ9KSgpO2ZlKCk7dmFyIFhJdD0oKT0+TWA8ZGVlcy1mb3JtLXN1Ym1pdD5TdWJtaXQgRm9ybTwvZGVlcy1mb3JtLXN1Ym1pdD5gO2ZlKCk7QmUoKTt2YXIgUVU9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxYbD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sZUVlPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1mb3JtLXN1Ym1pdCIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdO3ZhciBiPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgeD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMH0pXSxmPVtEKHt0eXBlOlN0cmluZ30pXSxkPVtEKHt0eXBlOlN0cmluZ30pXSxRVSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRpc2FibGVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4iZGlzYWJsZWQiaW4gbSxnZXQ6bT0+bS5kaXNhYmxlZCxzZXQ6KG0sdik9PnttLmRpc2FibGVkPXZ9fSxtZXRhZGF0YTp4fSxzLGwpLFFVKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGV4dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+InRleHQiaW4gbSxnZXQ6bT0+bS50ZXh0LHNldDoobSx2KT0+e20udGV4dD12fX0sbWV0YWRhdGE6eH0sYyx1KSxRVSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InN0YXR1cyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+InN0YXR1cyJpbiBtLGdldDptPT5tLnN0YXR1cyxzZXQ6KG0sdik9PnttLnN0YXR1cz12fX0sbWV0YWRhdGE6eH0saCxnKSxRVShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTp4fSxudWxsLGEpLGI9cj1lLnZhbHVlLHgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6eH0pfXN0YXRpYyBkZW1vPVhJdDtzdGF0aWMgZGVtb0dyb3VwPSJGb3JtIjsjZT1YbCh0aGlzLHMsITEpO2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLiNlfXNldCBkaXNhYmxlZCh4KXt0aGlzLiNlPXh9I3Q9KFhsKHRoaXMsbCksWGwodGhpcyxjLHZvaWQgMCkpO2dldCB0ZXh0KCl7cmV0dXJuIHRoaXMuI3R9c2V0IHRleHQoeCl7dGhpcy4jdD14fSNhPShYbCh0aGlzLHUpLFhsKHRoaXMsaCwibm9ybWFsIikpO2dldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy4jYX1zZXQgc3RhdHVzKHgpe3RoaXMuI2E9eH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksWGwodGhpcyxnKX1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgc3RhdHVzPSIke3RoaXMuc3RhdHVzfSIKICAgICAgICBAY2xpY2s9IiR7dGhpcy5zdWJtaXR9IgogICAgICAgID9kaXNhYmxlZD0iJHt0aGlzLmRpc2FibGVkfSIKICAgICAgPgogICAgICAgICR7dGhpcy50ZXh0fHxNYDxzbG90Pjwvc2xvdD5gfQogICAgICA8L2RlZXMtYnV0dG9uPgogICAgYH1hc3luYyBzdWJtaXQoKXtpZih0aGlzLmRpc2FibGVkKXJldHVybjtsZXQgeD10aGlzLmNsb3Nlc3QoImRlZXMtZm9ybSIpO3gmJnguZ2F0aGVyQW5kRGlzcGF0Y2gmJnguZ2F0aGVyQW5kRGlzcGF0Y2goKX1hc3luYyBmb2N1cygpe2xldCB4PWF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlO3RoaXMuZGlzYWJsZWR8fChhd2FpdCB4LmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCksdGhpcy5zdWJtaXQoKSl9c3RhdGlje1hsKHIsYSl9fTtyZXR1cm4gYj1yfSkoKTtmZSgpO3ZhciBRSXQ9KCk9Pk1gCiAgPHN0eWxlPgogICAgJHt0ZWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwtZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIAogICAgICAuc3BhY2VyIHsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRyb3Bkb3duW2xhYmVsPSJTZWxlY3QgQ291bnRyeSJdJyksYT10LnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25bbGFiZWw9IlNlbGVjdCBSb2xlIl0nKTtlJiZlLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIixyPT57Y29uc29sZS5sb2coIkNvdW50cnkgc2VsZWN0ZWQ6IixyLmRldGFpbCl9KSxhJiZhLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIixyPT57Y29uc29sZS5sb2coIlJvbGUgc2VsZWN0ZWQ6IixyLmRldGFpbCl9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgRHJvcGRvd25zIn0gLnN1YnRpdGxlPSR7IlN0YW5kYXJkIGRyb3Bkb3duIHdpdGggc2VhcmNoIGZ1bmN0aW9uYWxpdHkgYW5kIHZhcmlvdXMgb3B0aW9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiU2VsZWN0IENvdW50cnkifQogICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiVW5pdGVkIFN0YXRlcyIsa2V5OiJ1cyJ9LHtvcHRpb246IkNhbmFkYSIsa2V5OiJjYSJ9LHtvcHRpb246Ikdlcm1hbnkiLGtleToiZGUifSx7b3B0aW9uOiJGcmFuY2UiLGtleToiZnIifSx7b3B0aW9uOiJVbml0ZWQgS2luZ2RvbSIsa2V5OiJ1ayJ9LHtvcHRpb246IkF1c3RyYWxpYSIsa2V5OiJhdSJ9LHtvcHRpb246IkphcGFuIixrZXk6ImpwIn0se29wdGlvbjoiQnJhemlsIixrZXk6ImJyIn1dfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7e29wdGlvbjoiVW5pdGVkIFN0YXRlcyIsa2V5OiJ1cyJ9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUm9sZSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJBZG1pbmlzdHJhdG9yIixrZXk6ImFkbWluIn0se29wdGlvbjoiRWRpdG9yIixrZXk6ImVkaXRvciJ9LHtvcHRpb246IlZpZXdlciIsa2V5OiJ2aWV3ZXIifSx7b3B0aW9uOiJHdWVzdCIsa2V5OiJndWVzdCJ9XX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZHJvcGRvd24iKTtlJiZlLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIixhPT57Y29uc29sZS5sb2coYFByaW9yaXR5IGNoYW5nZWQgdG86ICR7YS5kZXRhaWwub3B0aW9ufWApfSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjIuIFdpdGhvdXQgU2VhcmNoIn0gLnN1YnRpdGxlPSR7IkRyb3Bkb3duIHdpdGggc2VhcmNoIGZ1bmN0aW9uYWxpdHkgZGlzYWJsZWQgZm9yIHNpbXBsZXIgc2VsZWN0aW9uIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJQcmlvcml0eSBMZXZlbCJ9CiAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ITF9CiAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJIaWdoIixrZXk6ImhpZ2gifSx7b3B0aW9uOiJNZWRpdW0iLGtleToibWVkaXVtIn0se29wdGlvbjoiTG93IixrZXk6ImxvdyJ9XX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3tvcHRpb246Ik1lZGl1bSIsa2V5OiJtZWRpdW0ifX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnt0LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtZHJvcGRvd24iKS5mb3JFYWNoKGE9PnthLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIixyPT57bGV0IGk9YS5nZXRBdHRyaWJ1dGUoImxhYmVsIik7Y29uc29sZS5sb2coYCR7aX06ICR7ci5kZXRhaWwub3B0aW9ufWApfSl9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gSG9yaXpvbnRhbCBMYXlvdXQifSAuc3VidGl0bGU9JHsiTXVsdGlwbGUgZHJvcGRvd25zIGluIGEgaG9yaXpvbnRhbCBsYXlvdXQgZm9yIGNvbXBhY3QgZm9ybXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJEZXBhcnRtZW50In0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IkVuZ2luZWVyaW5nIixrZXk6ImVuZyJ9LHtvcHRpb246IkRlc2lnbiIsa2V5OiJkZXNpZ24ifSx7b3B0aW9uOiJNYXJrZXRpbmciLGtleToibWFya2V0aW5nIn0se29wdGlvbjoiU2FsZXMiLGtleToic2FsZXMifV19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiVGVhbSBTaXplIn0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHshMX0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiMS01IixrZXk6InNtYWxsIn0se29wdGlvbjoiNi0yMCIsa2V5OiJtZWRpdW0ifSx7b3B0aW9uOiIyMS01MCIsa2V5OiJsYXJnZSJ9LHtvcHRpb246IjUwKyIsa2V5OiJ4bGFyZ2UifV19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiTG9jYXRpb24ifQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiUmVtb3RlIixrZXk6InJlbW90ZSJ9LHtvcHRpb246Ik9uLXNpdGUiLGtleToib25zaXRlIn0se29wdGlvbjoiSHlicmlkIixrZXk6Imh5YnJpZCJ9XX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93bltyZXF1aXJlZF0iKTtlJiZlLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT57Y29uc29sZS5sb2coIlJlcXVpcmVkIGRyb3Bkb3duIGxvc3QgZm9jdXMiKX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIEZpZWxkIn0KICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiT3B0aW9uIEEiLGtleToiYSJ9LHtvcHRpb246Ik9wdGlvbiBCIixrZXk6ImIifSx7b3B0aW9uOiJPcHRpb24gQyIsa2V5OiJjIn1dfQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBEcm9wZG93biJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHshMH0KICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IkNhbm5vdCBTZWxlY3QiLGtleToiZGlzYWJsZWQifV19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHt7b3B0aW9uOiJDYW5ub3QgU2VsZWN0IixrZXk6ImRpc2FibGVkIn19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPgogICAgICAoU3BhY2VyIHRvIHRlc3QgZHJvcGRvd24gcG9zaXRpb25pbmcpCiAgICA8L2Rpdj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpO2UmJmUuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLGE9Pntjb25zb2xlLmxvZygiQm90dG9tIGRyb3Bkb3duIHNlbGVjdGVkOiIsYS5kZXRhaWwpfSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIEJvdHRvbSBQb3NpdGlvbmluZyJ9IC5zdWJ0aXRsZT0keyJEcm9wZG93biB0aGF0IG9wZW5zIHVwd2FyZCB3aGVuIG5lYXIgYm90dG9tIG9mIHZpZXdwb3J0In0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJPcGVucyBVcHdhcmQifQogICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiRmlyc3QgT3B0aW9uIixrZXk6ImZpcnN0In0se29wdGlvbjoiU2Vjb25kIE9wdGlvbiIsa2V5OiJzZWNvbmQifSx7b3B0aW9uOiJUaGlyZCBPcHRpb24iLGtleToidGhpcmQifSx7b3B0aW9uOiJGb3VydGggT3B0aW9uIixrZXk6ImZvdXJ0aCJ9LHtvcHRpb246IkZpZnRoIE9wdGlvbiIsa2V5OiJmaWZ0aCJ9XX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpLGE9dC5xdWVyeVNlbGVjdG9yKCIjc2VsZWN0aW9uLW91dHB1dCIpO2UmJmEmJihhLmlubmVySFRNTD0iPGVtPlNlbGVjdCBhIHByb2R1Y3QgdG8gc2VlIGRldGFpbHMuLi48L2VtPiIsZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHI9PntyLmRldGFpbC52YWx1ZSYmKGEuaW5uZXJIVE1MPWAKICAgICAgICAgICAgICA8c3Ryb25nPlNlbGVjdGVkOjwvc3Ryb25nPiAke3IuZGV0YWlsLnZhbHVlLm9wdGlvbn08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5LZXk6PC9zdHJvbmc+ICR7ci5kZXRhaWwudmFsdWUua2V5fTxicj4KICAgICAgICAgICAgICA8c3Ryb25nPlByaWNlOjwvc3Ryb25nPiAkJHtyLmRldGFpbC52YWx1ZS5wYXlsb2FkPy5wcmljZXx8Ik4vQSJ9PGJyPgogICAgICAgICAgICAgIDxzdHJvbmc+RmVhdHVyZXM6PC9zdHJvbmc+ICR7ci5kZXRhaWwudmFsdWUucGF5bG9hZD8uZmVhdHVyZXM/LmpvaW4oIiwgIil8fCJOL0EifQogICAgICAgICAgICBgKX0pKX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gRXZlbnQgSGFuZGxpbmcgJiBQYXlsb2FkIn0gLnN1YnRpdGxlPSR7IkRyb3Bkb3duIHdpdGggcGF5bG9hZCBkYXRhIGFuZCBjaGFuZ2UgZXZlbnQgaGFuZGxpbmcifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlNlbGVjdCBQcm9kdWN0In0KICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IkJhc2ljIFBsYW4iLGtleToiYmFzaWMiLHBheWxvYWQ6e3ByaWNlOjkuOTksZmVhdHVyZXM6WyJGZWF0dXJlIEEiXX19LHtvcHRpb246IlBybyBQbGFuIixrZXk6InBybyIscGF5bG9hZDp7cHJpY2U6MTkuOTksZmVhdHVyZXM6WyJGZWF0dXJlIEEiLCJGZWF0dXJlIEIiXX19LHtvcHRpb246IkVudGVycHJpc2UgUGxhbiIsa2V5OiJlbnRlcnByaXNlIixwYXlsb2FkOntwcmljZTo0OS45OSxmZWF0dXJlczpbIkZlYXR1cmUgQSIsIkZlYXR1cmUgQiIsIkZlYXR1cmUgQyJdfX1dfQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0ic2VsZWN0aW9uLW91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IHBhZGRpbmc6IDEycHg7IGJhY2tncm91bmQ6IHJnYmEoMCwgMTA1LCAyNDIsIDAuMSk7IGJvcmRlci1yYWRpdXM6IDRweDsgZm9udC1zaXplOiAxNHB4OyI+PC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKSxhPXQucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kcm9wZG93bltrZXk9InByb2plY3RUeXBlIl0nKSxyPXQucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kcm9wZG93bltrZXk9ImZyYW1ld29yayJdJyk7ZSYmZS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsaT0+e2NvbnNvbGUubG9nKCJGb3JtIHN1Ym1pdHRlZCB3aXRoIGRhdGE6IixpLmRldGFpbC5kYXRhKX0pLGEmJnImJmEuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLGk9PntsZXQgbz1pLmRldGFpbC5rZXk7Y29uc29sZS5sb2coYFByb2plY3QgdHlwZSBjaGFuZ2VkIHRvOiAke299YCl9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJEcm9wZG93biB3b3JraW5nIHdpdGhpbiBhIGZvcm0gd2l0aCB2YWxpZGF0aW9uIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9qZWN0IFR5cGUifQogICAgICAgICAgICAua2V5PSR7InByb2plY3RUeXBlIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IldlYiBBcHBsaWNhdGlvbiIsa2V5OiJ3ZWIifSx7b3B0aW9uOiJNb2JpbGUgQXBwbGljYXRpb24iLGtleToibW9iaWxlIn0se29wdGlvbjoiRGVza3RvcCBBcHBsaWNhdGlvbiIsa2V5OiJkZXNrdG9wIn0se29wdGlvbjoiQVBJIFNlcnZpY2UiLGtleToiYXBpIn1dfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IkRldmVsb3BtZW50IEZyYW1ld29yayJ9CiAgICAgICAgICAgIC5rZXk9JHsiZnJhbWV3b3JrIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IlJlYWN0IixrZXk6InJlYWN0IixwYXlsb2FkOnt0eXBlOiJ3ZWIifX0se29wdGlvbjoiVnVlLmpzIixrZXk6InZ1ZSIscGF5bG9hZDp7dHlwZToid2ViIn19LHtvcHRpb246IkFuZ3VsYXIiLGtleToiYW5ndWxhciIscGF5bG9hZDp7dHlwZToid2ViIn19LHtvcHRpb246IlJlYWN0IE5hdGl2ZSIsa2V5OiJyZWFjdC1uYXRpdmUiLHBheWxvYWQ6e3R5cGU6Im1vYmlsZSJ9fSx7b3B0aW9uOiJGbHV0dGVyIixrZXk6ImZsdXR0ZXIiLHBheWxvYWQ6e3R5cGU6Im1vYmlsZSJ9fSx7b3B0aW9uOiJFbGVjdHJvbiIsa2V5OiJlbGVjdHJvbiIscGF5bG9hZDp7dHlwZToiZGVza3RvcCJ9fV19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCAudGV4dD0keyJDcmVhdGUgUHJvamVjdCJ9PjwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIDwvZGl2PgpgO2ZlKCk7U3QoKTtCZSgpO3ZhciBXaT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LG4yPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSx0RWU9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWlucHV0LWRyb3Bkb3duIildLGUsYT1bXSxyLGk9WGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W10sSCxMPVtdLGs9W107dmFyIE49Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBTPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0QoKV0sZj1bRCgpXSxkPVtEKHt0eXBlOkJvb2xlYW59KV0sYj1bbGUoKV0sdj1bbGUoKV0sRT1bbGUoKV0sUD1bbGUoKV0sSD1bbGUoKV0sV2kodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJvcHRpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4ib3B0aW9ucyJpbiBULGdldDpUPT5ULm9wdGlvbnMsc2V0OihULFIpPT57VC5vcHRpb25zPVJ9fSxtZXRhZGF0YTpTfSxzLGwpLFdpKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWRPcHRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJzZWxlY3RlZE9wdGlvbiJpbiBULGdldDpUPT5ULnNlbGVjdGVkT3B0aW9uLHNldDooVCxSKT0+e1Quc2VsZWN0ZWRPcHRpb249Un19LG1ldGFkYXRhOlN9LGMsdSksV2kodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJlbmFibGVTZWFyY2giLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJlbmFibGVTZWFyY2giaW4gVCxnZXQ6VD0+VC5lbmFibGVTZWFyY2gsc2V0OihULFIpPT57VC5lbmFibGVTZWFyY2g9Un19LG1ldGFkYXRhOlN9LGgsZyksV2kodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJvcGVuc1RvVG9wIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4ib3BlbnNUb1RvcCJpbiBULGdldDpUPT5ULm9wZW5zVG9Ub3Asc2V0OihULFIpPT57VC5vcGVuc1RvVG9wPVJ9fSxtZXRhZGF0YTpTfSx4LG0pLFdpKHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZmlsdGVyZWRPcHRpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4iZmlsdGVyZWRPcHRpb25zImluIFQsZ2V0OlQ9PlQuZmlsdGVyZWRPcHRpb25zLHNldDooVCxSKT0+e1QuZmlsdGVyZWRPcHRpb25zPVJ9fSxtZXRhZGF0YTpTfSx5LHcpLFdpKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaGlnaGxpZ2h0ZWRJbmRleCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VD0+ImhpZ2hsaWdodGVkSW5kZXgiaW4gVCxnZXQ6VD0+VC5oaWdobGlnaHRlZEluZGV4LHNldDooVCxSKT0+e1QuaGlnaGxpZ2h0ZWRJbmRleD1SfX0sbWV0YWRhdGE6U30sQyx6KSxXaSh0aGlzLG51bGwsUCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzT3BlbmVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4iaXNPcGVuZWQiaW4gVCxnZXQ6VD0+VC5pc09wZW5lZCxzZXQ6KFQsUik9PntULmlzT3BlbmVkPVJ9fSxtZXRhZGF0YTpTfSxfLCQpLFdpKHRoaXMsbnVsbCxILHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VhcmNoVmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJzZWFyY2hWYWx1ZSJpbiBULGdldDpUPT5ULnNlYXJjaFZhbHVlLHNldDooVCxSKT0+e1Quc2VhcmNoVmFsdWU9Un19LG1ldGFkYXRhOlN9LEwsayksV2kobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6U30sbnVsbCxhKSxOPXI9ZS52YWx1ZSxTJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlN9KX1zdGF0aWMgZGVtbz1RSXQ7c3RhdGljIGRlbW9Hcm91cD0iSW5wdXQiOyNlPW4yKHRoaXMscyxbXSk7Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgb3B0aW9ucyhTKXt0aGlzLiNlPVN9I3Q9KG4yKHRoaXMsbCksbjIodGhpcyxjLG51bGwpKTtnZXQgc2VsZWN0ZWRPcHRpb24oKXtyZXR1cm4gdGhpcy4jdH1zZXQgc2VsZWN0ZWRPcHRpb24oUyl7dGhpcy4jdD1TfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9ufXNldCB2YWx1ZShTKXt0aGlzLnNlbGVjdGVkT3B0aW9uPVN9I2E9KG4yKHRoaXMsdSksbjIodGhpcyxoLCEwKSk7Z2V0IGVuYWJsZVNlYXJjaCgpe3JldHVybiB0aGlzLiNhfXNldCBlbmFibGVTZWFyY2goUyl7dGhpcy4jYT1TfSNyPShuMih0aGlzLGcpLG4yKHRoaXMseCwhMSkpO2dldCBvcGVuc1RvVG9wKCl7cmV0dXJuIHRoaXMuI3J9c2V0IG9wZW5zVG9Ub3AoUyl7dGhpcy4jcj1TfSNpPShuMih0aGlzLG0pLG4yKHRoaXMseSxbXSkpO2dldCBmaWx0ZXJlZE9wdGlvbnMoKXtyZXR1cm4gdGhpcy4jaX1zZXQgZmlsdGVyZWRPcHRpb25zKFMpe3RoaXMuI2k9U30jbz0objIodGhpcyx3KSxuMih0aGlzLEMsMCkpO2dldCBoaWdobGlnaHRlZEluZGV4KCl7cmV0dXJuIHRoaXMuI299c2V0IGhpZ2hsaWdodGVkSW5kZXgoUyl7dGhpcy4jbz1TfSNzPShuMih0aGlzLHopLG4yKHRoaXMsXywhMSkpO2dldCBpc09wZW5lZCgpe3JldHVybiB0aGlzLiNzfXNldCBpc09wZW5lZChTKXt0aGlzLiNzPVN9I249KG4yKHRoaXMsJCksbjIodGhpcyxMLCIiKSk7Z2V0IHNlYXJjaFZhbHVlKCl7cmV0dXJuIHRoaXMuI259c2V0IHNlYXJjaFZhbHVlKFMpe3RoaXMuI249U31zdGF0aWMgc3R5bGVzPVt4ZSwuLi5YZS5iYXNlU3R5bGVzLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAke0p0fTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnNlbGVjdGVkQm94IHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAzOHB4OwogICAgICAgIHBhZGRpbmc6IDAgNDBweCAwIDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3g6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQoKICAgICAgLnNlbGVjdGVkQm94OmZvY3VzLXZpc2libGUgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7cC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLnNlbGVjdGVkQm94LmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLyogRHJvcGRvd24gYXJyb3cgKi8KICAgICAgLnNlbGVjdGVkQm94OjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAxMnB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItdG9wOiA0cHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnNlbGVjdGVkQm94Lm9wZW46OmFmdGVyIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKDE4MGRlZyk7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb25Cb3ggewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm0sIG9wYWNpdHk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLThweCkgc2NhbGUoMC45OCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMnB4IDRweCAtMnB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICAgIG1heC1oZWlnaHQ6IDMwMHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgei1pbmRleDogNTA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQogICAgICAKICAgICAgLnNlbGVjdGlvbkJveC50b3AgewogICAgICAgIGJvdHRvbTogY2FsYygxMDAlICsgNHB4KTsKICAgICAgICB0b3A6IGF1dG87CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OCk7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWxlY3Rpb25Cb3guYm90dG9tIHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb25Cb3guc2hvdyB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLyogT3B0aW9ucyBjb250YWluZXIgKi8KICAgICAgLm9wdGlvbnMtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyNTBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgLyogT3B0aW9ucyAqLwogICAgICAub3B0aW9uIHsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBsaW5lLWhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luOiAycHggMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIC5vcHRpb24uaGlnaGxpZ2h0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5vcHRpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAvKiBObyBvcHRpb25zIG1lc3NhZ2UgKi8KICAgICAgLm5vLW9wdGlvbnMgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLyogU2VhcmNoICovCiAgICAgIC5zZWFyY2ggewogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWFyY2guYm90dG9tIHsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc2VhcmNoIGlucHV0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWFyY2ggaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgfQoKICAgICAgLnNlYXJjaCBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFNjcm9sbGJhciBzdHlsaW5nICovCiAgICAgIC5vcHRpb25zLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgIH0KCiAgICAgIC5vcHRpb25zLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAub3B0aW9ucy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9InNlbGVjdGVkQm94ICR7dGhpcy5pc09wZW5lZD8ib3BlbiI6IiJ9ICR7dGhpcy5kaXNhYmxlZD8iZGlzYWJsZWQiOiIifSIKICAgICAgICAgICAgQGNsaWNrPSIkeygpPT4hdGhpcy5kaXNhYmxlZCYmdGhpcy50b2dnbGVTZWxlY3Rpb25Cb3goKX0iCiAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHt0aGlzLmhhbmRsZVNlbGVjdGVkQm94S2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgICR7dGhpcy5zZWxlY3RlZE9wdGlvbj8ub3B0aW9ufHwiU2VsZWN0IGFuIG9wdGlvbiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlbGVjdGlvbkJveCAke3RoaXMuaXNPcGVuZWQ/InNob3ciOiIifSAke3RoaXMub3BlbnNUb1RvcD8idG9wIjoiYm90dG9tIn0iPgogICAgICAgICAgICAke3RoaXMuZW5hYmxlU2VhcmNoP01gCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIgCiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VhcmNoIG9wdGlvbnMuLi4iIAogICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSIke3RoaXMuc2VhcmNoVmFsdWV9IgogICAgICAgICAgICAgICAgICAgICAgQGlucHV0PSIke3RoaXMuaGFuZGxlU2VhcmNofSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iJHtTPT5TLnN0b3BQcm9wYWdhdGlvbigpfSIKICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlU2VhcmNoS2V5ZG93bn0iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgOm51bGx9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9wdGlvbnMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAke3RoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aD09PTA/TWA8ZGl2IGNsYXNzPSJuby1vcHRpb25zIj5ObyBvcHRpb25zIGZvdW5kPC9kaXY+YDp0aGlzLmZpbHRlcmVkT3B0aW9ucy5tYXAoKFMsVCk9PntsZXQgUj10aGlzLmhpZ2hsaWdodGVkSW5kZXg9PT1UO3JldHVybiBNYAogICAgICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ib3B0aW9uICR7Uj8iaGlnaGxpZ2h0ZWQiOiIifSIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSIkeygpPT50aGlzLnVwZGF0ZVNlbGVjdGlvbihTKX0iCiAgICAgICAgICAgICAgICAgICAgICAgIEBtb3VzZWVudGVyPSIkeygpPT50aGlzLmhpZ2hsaWdodGVkSW5kZXg9VH0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICR7Uy5vcHRpb259CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICBgfSl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5oYW5kbGVDbGlja091dHNpZGU9dGhpcy5oYW5kbGVDbGlja091dHNpZGUuYmluZCh0aGlzKX1maXJzdFVwZGF0ZWQoKXt0aGlzLnNlbGVjdGVkT3B0aW9uPXRoaXMuc2VsZWN0ZWRPcHRpb258fG51bGwsdGhpcy5maWx0ZXJlZE9wdGlvbnM9dGhpcy5vcHRpb25zfXVwZGF0ZWQoUyl7c3VwZXIudXBkYXRlZChTKSxTLmhhcygib3B0aW9ucyIpJiYodGhpcy5maWx0ZXJlZE9wdGlvbnM9dGhpcy5vcHRpb25zKX1hc3luYyB1cGRhdGVTZWxlY3Rpb24oUyl7dGhpcy5zZWxlY3RlZE9wdGlvbj1TLHRoaXMuaXNPcGVuZWQ9ITEsdGhpcy5zZWFyY2hWYWx1ZT0iIix0aGlzLmZpbHRlcmVkT3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy5oaWdobGlnaHRlZEluZGV4PTAsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VsZWN0ZWRPcHRpb24iLHtkZXRhaWw6UyxidWJibGVzOiEwfSkpLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpfWhhbmRsZUNsaWNrT3V0c2lkZT0objIodGhpcyxrKSxTPT57Uy5jb21wb3NlZFBhdGgoKS5pbmNsdWRlcyh0aGlzKXx8KHRoaXMuaXNPcGVuZWQ9ITEsdGhpcy5zZWFyY2hWYWx1ZT0iIix0aGlzLmZpbHRlcmVkT3B0aW9ucz10aGlzLm9wdGlvbnMsZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKSl9KTthc3luYyB0b2dnbGVTZWxlY3Rpb25Cb3goKXtpZih0aGlzLmlzT3BlbmVkPSF0aGlzLmlzT3BlbmVkLHRoaXMuaXNPcGVuZWQpe2xldCBUPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VsZWN0ZWRCb3giKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxSPXdpbmRvdy5pbm5lckhlaWdodC1ULmJvdHRvbSxBPVQudG9wO3RoaXMub3BlbnNUb1RvcD1SPDMwMCYmQT5SLGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7bGV0IEY9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWFyY2ggaW5wdXQiKTtGJiZGLmZvY3VzKCksc2V0VGltZW91dCgoKT0+e2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSl9LDApfWVsc2UgdGhpcy5zZWFyY2hWYWx1ZT0iIix0aGlzLmZpbHRlcmVkT3B0aW9ucz10aGlzLm9wdGlvbnMsZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKX1oYW5kbGVTZWFyY2goUyl7bGV0IFQ9Uy50YXJnZXQudmFsdWU7dGhpcy5zZWFyY2hWYWx1ZT1UO2xldCBSPVQudG9Mb3dlckNhc2UoKTt0aGlzLmZpbHRlcmVkT3B0aW9ucz10aGlzLm9wdGlvbnMuZmlsdGVyKEE9PkEub3B0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoUikpLHRoaXMuaGlnaGxpZ2h0ZWRJbmRleD0wfWhhbmRsZUtleURvd24oUyl7bGV0IFQ9Uy5rZXksUj10aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgtMTtUPT09IkFycm93RG93biI/KFMucHJldmVudERlZmF1bHQoKSx0aGlzLmhpZ2hsaWdodGVkSW5kZXg9dGhpcy5oaWdobGlnaHRlZEluZGV4KzE+Uj8wOnRoaXMuaGlnaGxpZ2h0ZWRJbmRleCsxKTpUPT09IkFycm93VXAiPyhTLnByZXZlbnREZWZhdWx0KCksdGhpcy5oaWdobGlnaHRlZEluZGV4PXRoaXMuaGlnaGxpZ2h0ZWRJbmRleC0xPDA/Ujp0aGlzLmhpZ2hsaWdodGVkSW5kZXgtMSk6VD09PSJFbnRlciI/KFMucHJldmVudERlZmF1bHQoKSx0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdJiZ0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKSk6VD09PSJFc2NhcGUiJiYoUy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaXNPcGVuZWQ9ITEpfWhhbmRsZVNlYXJjaEtleWRvd24oUyl7KFMua2V5PT09IkFycm93RG93biJ8fFMua2V5PT09IkFycm93VXAifHxTLmtleT09PSJFbnRlciIpJiZ0aGlzLmhhbmRsZUtleURvd24oUyl9aGFuZGxlU2VsZWN0ZWRCb3hLZXlkb3duKFMpe3RoaXMuZGlzYWJsZWR8fChTLmtleT09PSJFbnRlciJ8fFMua2V5PT09IiAiPyhTLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVTZWxlY3Rpb25Cb3goKSk6Uy5rZXk9PT0iQXJyb3dEb3duInx8Uy5rZXk9PT0iQXJyb3dVcCI/KFMucHJldmVudERlZmF1bHQoKSx0aGlzLmlzT3BlbmVkfHx0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpKTpTLmtleT09PSJFc2NhcGUiJiYoUy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaXNPcGVuZWQmJih0aGlzLmlzT3BlbmVkPSExKSkpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb259c2V0VmFsdWUoUyl7dGhpcy5zZWxlY3RlZE9wdGlvbj1TfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVDbGlja091dHNpZGUpfXN0YXRpY3tuMihyLGEpfX07cmV0dXJuIE49cn0pKCk7ZmUoKTt2YXIgS0l0PSgpPT5NYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke3RlYAogICAgICAgIC5kZW1vLXNoZWxsIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTE2MHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQoKICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAgICAgICAgIC5kZW1vLWdyaWQtLXR3byB7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC5kZW1vLXN0YWNrIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAxOHB4OwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tbm90ZSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDIxNyA5MSUgOTAlKSIsImhzbCgyMTUgMjAlIDI2JSkiKX07CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMyAxMDAlIDk3JSkiLCJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1IDI1JSAzMiUpIiwiaHNsKDIxNSAyMCUgODIlKSIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU1OwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tbm90ZSBzdHJvbmcgewogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE3IDkxJSA0NSUpIiwiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNoZWxsIj4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiTW9kZXJuIGZpbGUgdXBsb2FkZXIifQogICAgICAgIC5zdWJ0aXRsZT0keyJTaGFkY24taW5zcGlyZWQgbGF5b3V0IHdpdGggZHJhZyAmIGRyb3AsIHByZXZpZXdzIGFuZCB2YWxpZGF0aW9uIn0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCBkZW1vLWdyaWQtLXR3byI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXN0YWNrIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgIC5sYWJlbD0keyJBdHRhY2htZW50cyJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZCBzdXBwb3J0aW5nIGRvY3VtZW50cyBmb3IgeW91ciByZXF1ZXN0In0KICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlLyosLnBkZiwuemlwIn0KICAgICAgICAgICAgICAubWF4U2l6ZT0kezEwKjEwMjQqMTAyNH0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgIC5sYWJlbD0keyJCcmFuZCBhc3NldHMifQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJVcGxvYWQgaGlnaC1yZXNvbHV0aW9uIGltYWdlcnkgKEpQRy9QTkcpIn0KICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlL2pwZWcsaW1hZ2UvcG5nIn0KICAgICAgICAgICAgICAubXVsdGlwbGU9JHshMX0KICAgICAgICAgICAgICAubWF4U2l6ZT0kezUqMTAyNCoxMDI0fQogICAgICAgICAgICAgIC5idXR0b25UZXh0PSR7IlNlbGVjdCBjb3ZlciBpbWFnZSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc3RhY2siPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1maWxldXBsb2FkCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkF1ZGlvIHVwbG9hZHMifQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJTaGFyZSBwb2RjYXN0IGRyYWZ0cyAoTVAzL1dBViwgbWF4IDI1TUIgZWFjaCkifQogICAgICAgICAgICAgIC5hY2NlcHQ9JHsiYXVkaW8vKiJ9CiAgICAgICAgICAgICAgLm1heFNpemU9JHsyNSoxMDI0KjEwMjR9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiRGlzYWJsZWQgZXhhbXBsZSJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZGVyIGlzIGRpc2FibGVkIHdoaWxlIG1vZGVyYXRpb24gaXMgcGVuZGluZyJ9CiAgICAgICAgICAgICAgLmRpc2FibGVkPSR7ITB9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJGb3JtIGludGVncmF0aW9uIn0KICAgICAgICAuc3VidGl0bGU9JHsiQ29tYmluZSBmaWxlIHVwbG9hZHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgREVFUyBmb3JtIGVjb3N5c3RlbSJ9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWdyaWQiPgogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1zdGFjayI+CiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QgbmFtZSJ9CiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiSG93IHNob3VsZCB3ZSByZWZlciB0byB0aGlzIHByb2plY3QgaW50ZXJuYWxseT8ifQogICAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgICAgICAua2V5PSR7InByb2plY3ROYW1lIn0KICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgICAgIC5sYWJlbD0keyJDb250YWN0IGVtYWlsIn0KICAgICAgICAgICAgICAgIC5pbnB1dFR5cGU9JHsiZW1haWwifQogICAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgICAgICAua2V5PSR7ImNvbnRhY3RFbWFpbCJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1maWxldXBsb2FkCiAgICAgICAgICAgICAgICAubGFiZWw9JHsiU3RhdGVtZW50IG9mIHdvcmsifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZCBhIHNpZ25lZCBzdGF0ZW1lbnQgb2Ygd29yayAoUERGLCBtYXggMTVNQikifQogICAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgICAgICAuYWNjZXB0PSR7ImFwcGxpY2F0aW9uL3BkZiJ9CiAgICAgICAgICAgICAgICAubWF4U2l6ZT0kezE1KjEwMjQqMTAyNH0KICAgICAgICAgICAgICAgIC5tdWx0aXBsZT0keyExfQogICAgICAgICAgICAgICAgLmtleT0keyJzb3cifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgICAgLmxhYmVsPSR7IkNyZWF0aXZlIHJlZmVyZW5jZXMifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ik9wdGlvbmFsLiBVcGxvYWQgdXAgdG8gZml2ZSB2aXN1YWwgcmVmZXJlbmNlcyJ9CiAgICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlLyoifQogICAgICAgICAgICAgICAgLm1heEZpbGVzPSR7NX0KICAgICAgICAgICAgICAgIC5tYXhTaXplPSR7OCoxMDI0KjEwMjR9CiAgICAgICAgICAgICAgICAua2V5PSR7InJlZmVyZW5jZXMifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGVzIn0KICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgb3B0aW9uYWwgY29udGV4dCBmb3IgcmV2aWV3ZXJzIn0KICAgICAgICAgICAgICAgIC5pbnB1dFR5cGU9JHsidGV4dGFyZWEifQogICAgICAgICAgICAgICAgLmtleT0keyJub3RlcyJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCAudGV4dD0keyJTdWJtaXQgYnJpZWZpbmcifT48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kZWVzLWZvcm0+CgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ub3RlIj4KICAgICAgICAgICAgPHN0cm9uZz5Hb29kIHRvIGtub3c6PC9zdHJvbmc+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+RHJhZyAmIGRyb3AgaGlnaGxpZ2h0cyB0aGUgZHJvcHpvbmUgYW5kIHN1cHBvcnRzIGtleWJvYXJkIGFjdGl2YXRpb24uPC9saT4KICAgICAgICAgICAgICA8bGk+QWNjZXB0ZWQgZmlsZSB0eXBlcyBhcmUgc3VtbWFyaXNlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIDxjb2RlPmFjY2VwdDwvY29kZT4gYXR0cmlidXRlLjwvbGk+CiAgICAgICAgICAgICAgPGxpPkltYWdlIHVwbG9hZHMgc2hvdyBsaXZlIHByZXZpZXdzIGdlbmVyYXRlZCB2aWEgPGNvZGU+VVJMLmNyZWF0ZU9iamVjdFVSTDwvY29kZT4uPC9saT4KICAgICAgICAgICAgICA8bGk+RmlsZSBzaXplIGFuZCBmaWxlLWNvdW50IGxpbWl0cyBzdXJmYWNlIGlubGluZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRoZSBjb21wb25lbnQgc3RheXMgY29tcGF0aWJsZSB3aXRoIDxjb2RlPmRlZXMtZm9ybTwvY29kZT4gdmFsdWUgYWNjZXNzb3JzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgO2ZlKCk7dmFyIEpJdD1bcC5kZWZhdWx0U3R5bGVzLC4uLlhlLmJhc2VTdHlsZXMsdGVgCiAgICA6aG9zdCB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICB9CgoKICAgIC5pbnB1dC13cmFwcGVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxMnB4OwogICAgfQoKICAgIC5kcm9wem9uZSB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgYm9yZGVyOiAxLjVweCBkYXNoZWQgJHtwLmJkVGhlbWUoImhzbCgyMTUgMTYlIDgwJSkiLCJoc2woMjE3IDIwJSAyNSUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjJzIGVhc2U7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgb3V0bGluZTogbm9uZTsKICAgIH0KCiAgICAuZHJvcHpvbmU6Zm9jdXMtdmlzaWJsZSB7CiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjE1IDIwJSAxMiUpIil9LAogICAgICAgIDAgMCAwIDRweCAke3AuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlIC8gMC41KSIsImhzbCgyMTMgOTMlIDY4JSAvIDAuNCkiKX07CiAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgfQoKICAgIC5kcm9wem9uZS0tYWN0aXZlIHsKICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgIGJveC1zaGFkb3c6IDAgMTJweCAzMnB4ICR7cC5iZFRoZW1lKCJyZ2JhKDE1LCAyMywgNDIsIDAuMTIpIiwicmdiYSgwLCAwLCAwLCAwLjM1KSIpfTsKICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSAvIDAuMDYpIiwiaHNsKDIxMyA5MyUgNjglIC8gMC4xMikiKX07CiAgICB9CgogICAgLmRyb3B6b25lLS1oYXMtZmlsZXMgewogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTklKSIsImhzbCgyMTUgMjAlIDExJSkiKX07CiAgICB9CgogICAgLmRyb3B6b25lLS1kaXNhYmxlZCB7CiAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICB9CgogICAgLmRyb3B6b25lX19ib2R5IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiAxNnB4OwogICAgfQoKICAgIC5kcm9wem9uZV9faWNvbiB7CiAgICAgIHdpZHRoOiA0OHB4OwogICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlIC8gMC4xMikiLCJoc2woMjEzIDkzJSA2OCUgLyAwLjEyKSIpfTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBmbGV4LXNocmluazogMDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2ljb24gZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgfQoKICAgIC5kcm9wem9uZV9fbG9hZGVyIHsKICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIGhlaWdodDogMjBweDsKICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7cC5iZFRoZW1lKCJyZ2JhKDE1LCAyMywgNDIsIDAuMTUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IGxvYWRlci1zcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgfQoKICAgIC5kcm9wem9uZV9fY29udGVudCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogNHB4OwogICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19oZWFkbGluZSB7CiAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwiaHNsKDIxMCAyMCUgOTYlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX3N1YmxpbmUgewogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDYlKSIsImhzbCgyMTUgMTYlIDcwJSkiKX07CiAgICB9CgogICAgLmRyb3B6b25lX19icm93c2UgewogICAgICBhcHBlYXJhbmNlOiBub25lOwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgfQoKICAgIC5kcm9wem9uZV9fYnJvd3NlOmhvdmVyIHsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICB9CgogICAgLmRyb3B6b25lX19icm93c2U6ZGlzYWJsZWQgewogICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICBvcGFjaXR5OiAwLjY7CiAgICB9CgogICAgLmRyb3B6b25lX19tZXRhIHsKICAgICAgbWFyZ2luLXRvcDogMTRweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBnYXA6IDhweDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUgMTYlIDUwJSkiLCJoc2woMjE1IDE2JSA3MiUpIil9OwogICAgfQoKICAgIC5kcm9wem9uZV9fbWV0YSBzcGFuIHsKICAgICAgcGFkZGluZzogNHB4IDEwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxNyA5MSUgOTUlKSIsImhzbCgyMTMgOTMlIDE4JSkiKX07CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMjE3IDkxJSA5MCUpIiwiaHNsKDIxMyA5MyUgMjQlKSIpfTsKICAgIH0KCiAgICAuZmlsZS1saXN0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMjE3IDkxJSA5MCUpIiwiaHNsKDIxMyA5MyUgMjQlKSIpfTsKICAgIH0KCiAgICAuZmlsZS1saXN0X19oZWFkZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwiaHNsKDIxNSAxNiUgNjglKSIpfTsKICAgIH0KCiAgICAuZmlsZS1saXN0X19jbGVhciB7CiAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLmZpbGUtbGlzdF9fY2xlYXI6aG92ZXIgewogICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIH0KCiAgICAuZmlsZS1saXN0X19pdGVtcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMTJweDsKICAgIH0KCiAgICAuZmlsZS1yb3cgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDEycHg7CiAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUgLyAwLjUpIiwiaHNsKDIxNSAyMCUgMTYlIC8gMC41KSIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTMgMjclIDkyJSkiLCJoc2woMjE3IDI1JSAyNiUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgIH0KCiAgICAuZmlsZS1yb3c6aG92ZXIgewogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSAvIDAuOCkiLCJoc2woMjE1IDIwJSAxNiUgLyAwLjgpIil9OwogICAgfQoKICAgIC5maWxlLXRodW1iIHsKICAgICAgd2lkdGg6IDM2cHg7CiAgICAgIGhlaWdodDogMzZweDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsImhzbCgyMTcgMzIlIDE4JSkiKX07CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICBmbGV4LXNocmluazogMDsKICAgIH0KCiAgICAuZmlsZS10aHVtYiBkZWVzLWljb24gewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsImhzbCgyMTUgMTYlIDcwJSkiKX07CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMThweDsKICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgoKICAgIC50aHVtYi1pbWFnZSB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgfQoKICAgIC5maWxlLW1ldGEgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDRweDsKICAgICAgbWluLXdpZHRoOiAwOwogICAgfQoKICAgIC5maWxlLW5hbWUgewogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMiA0NyUgMTElKSIsImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIC5maWxlLWRldGFpbHMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDYlKSIsImhzbCgyMTUgMTYlIDcwJSkiKX07CiAgICB9CgogICAgLmZpbGUtc2l6ZSB7CiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICB9CgogICAgLmZpbGUtdHlwZSB7CiAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsImhzbCgyMTcgMzIlIDI4JSkiKX07CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDYlKSIsImhzbCgyMTUgMTYlIDcwJSkiKX07CiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgfQoKICAgIC5maWxlLWFjdGlvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICB9CgogICAgLnJlbW92ZS1idXR0b24gewogICAgICB3aWR0aDogMjhweDsKICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgdHJhbnNmb3JtIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNTIlKSIsImhzbCgyMTUgMTYlIDY4JSkiKX07CiAgICB9CgogICAgLnJlbW92ZS1idXR0b246aG92ZXIgewogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgNzIlIDUwJSAvIDAuMDgpIiwiaHNsKDAgNjIlIDMyJSAvIDAuMTUpIil9OwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDcyJSA0NiUpIiwiaHNsKDAgNzAlIDcwJSkiKX07CiAgICB9CgogICAgLnJlbW92ZS1idXR0b246YWN0aXZlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk2KTsKICAgIH0KCiAgICAucmVtb3ZlLWJ1dHRvbiBkZWVzLWljb24gewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDE0cHg7CiAgICAgIGhlaWdodDogMTRweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLnZhbGlkYXRpb24tbWVzc2FnZSB7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCA3MiUgNDAlKSIsImhzbCgwIDcwJSA2OCUpIil9OwogICAgICBsaW5lLWhlaWdodDogMS41OwogICAgfQoKICAgIEBrZXlmcmFtZXMgbG9hZGVyLXNwaW4gewogICAgICB0byB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgfQogICAgfQogIGBdO0Z0KCk7ZmUoKTt2YXIgWXI9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxxMT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sYUVlPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1pbnB1dC1maWxldXBsb2FkIildLGUsYT1bXSxyLGk9WGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W10sSCxMPVtdLGs9W10sTixTPVtdLFQ9W107dmFyIFI9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBBPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe2F0dHJpYnV0ZTohMX0pXSxmPVtsZSgpXSxkPVtsZSgpXSxiPVtEKHt0eXBlOlN0cmluZ30pXSx2PVtEKHt0eXBlOlN0cmluZ30pXSxFPVtEKHt0eXBlOkJvb2xlYW59KV0sUD1bRCh7dHlwZTpOdW1iZXJ9KV0sSD1bRCh7dHlwZTpOdW1iZXJ9KV0sTj1bRCh7dHlwZTpTdHJpbmcscmVmbGVjdDohMH0pXSxZcih0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpGPT4idmFsdWUiaW4gRixnZXQ6Rj0+Ri52YWx1ZSxzZXQ6KEYsYWUpPT57Ri52YWx1ZT1hZX19LG1ldGFkYXRhOkF9LHMsbCksWXIodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzdGF0ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Rj0+InN0YXRlImluIEYsZ2V0OkY9PkYuc3RhdGUsc2V0OihGLGFlKT0+e0Yuc3RhdGU9YWV9fSxtZXRhZGF0YTpBfSxjLHUpLFlyKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNMb2FkaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpGPT4iaXNMb2FkaW5nImluIEYsZ2V0OkY9PkYuaXNMb2FkaW5nLHNldDooRixhZSk9PntGLmlzTG9hZGluZz1hZX19LG1ldGFkYXRhOkF9LGgsZyksWXIodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJidXR0b25UZXh0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpGPT4iYnV0dG9uVGV4dCJpbiBGLGdldDpGPT5GLmJ1dHRvblRleHQsc2V0OihGLGFlKT0+e0YuYnV0dG9uVGV4dD1hZX19LG1ldGFkYXRhOkF9LHgsbSksWXIodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhY2NlcHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkY9PiJhY2NlcHQiaW4gRixnZXQ6Rj0+Ri5hY2NlcHQsc2V0OihGLGFlKT0+e0YuYWNjZXB0PWFlfX0sbWV0YWRhdGE6QX0seSx3KSxZcih0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im11bHRpcGxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpGPT4ibXVsdGlwbGUiaW4gRixnZXQ6Rj0+Ri5tdWx0aXBsZSxzZXQ6KEYsYWUpPT57Ri5tdWx0aXBsZT1hZX19LG1ldGFkYXRhOkF9LEMseiksWXIodGhpcyxudWxsLFAse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYXhTaXplIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpGPT4ibWF4U2l6ZSJpbiBGLGdldDpGPT5GLm1heFNpemUsc2V0OihGLGFlKT0+e0YubWF4U2l6ZT1hZX19LG1ldGFkYXRhOkF9LF8sJCksWXIodGhpcyxudWxsLEgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYXhGaWxlcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Rj0+Im1heEZpbGVzImluIEYsZ2V0OkY9PkYubWF4RmlsZXMsc2V0OihGLGFlKT0+e0YubWF4RmlsZXM9YWV9fSxtZXRhZGF0YTpBfSxMLGspLFlyKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsaWRhdGlvblN0YXRlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpGPT4idmFsaWRhdGlvblN0YXRlImluIEYsZ2V0OkY9PkYudmFsaWRhdGlvblN0YXRlLHNldDooRixhZSk9PntGLnZhbGlkYXRpb25TdGF0ZT1hZX19LG1ldGFkYXRhOkF9LFMsVCksWXIobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6QX0sbnVsbCxhKSxSPXI9ZS52YWx1ZSxBJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkF9KX1zdGF0aWMgZGVtbz1LSXQ7c3RhdGljIGRlbW9Hcm91cD0iSW5wdXQiOyNlPXExKHRoaXMscyxbXSk7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKEEpe3RoaXMuI2U9QX0jdD0ocTEodGhpcyxsKSxxMSh0aGlzLGMsImlkbGUiKSk7Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHN0YXRlKEEpe3RoaXMuI3Q9QX0jYT0ocTEodGhpcyx1KSxxMSh0aGlzLGgsITEpKTtnZXQgaXNMb2FkaW5nKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGlzTG9hZGluZyhBKXt0aGlzLiNhPUF9I3I9KHExKHRoaXMsZykscTEodGhpcyx4LCJTZWxlY3QgZmlsZXMiKSk7Z2V0IGJ1dHRvblRleHQoKXtyZXR1cm4gdGhpcy4jcn1zZXQgYnV0dG9uVGV4dChBKXt0aGlzLiNyPUF9I2k9KHExKHRoaXMsbSkscTEodGhpcyx5LCIiKSk7Z2V0IGFjY2VwdCgpe3JldHVybiB0aGlzLiNpfXNldCBhY2NlcHQoQSl7dGhpcy4jaT1BfSNvPShxMSh0aGlzLHcpLHExKHRoaXMsQywhMCkpO2dldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLiNvfXNldCBtdWx0aXBsZShBKXt0aGlzLiNvPUF9I3M9KHExKHRoaXMseikscTEodGhpcyxfLDApKTtnZXQgbWF4U2l6ZSgpe3JldHVybiB0aGlzLiNzfXNldCBtYXhTaXplKEEpe3RoaXMuI3M9QX0jbj0ocTEodGhpcywkKSxxMSh0aGlzLEwsMCkpO2dldCBtYXhGaWxlcygpe3JldHVybiB0aGlzLiNufXNldCBtYXhGaWxlcyhBKXt0aGlzLiNuPUF9I2w9KHExKHRoaXMsaykscTEodGhpcyxTLG51bGwpKTtnZXQgdmFsaWRhdGlvblN0YXRlKCl7cmV0dXJuIHRoaXMuI2x9c2V0IHZhbGlkYXRpb25TdGF0ZShBKXt0aGlzLiNsPUF9I2M9KHExKHRoaXMsVCksIiIpO2dldCB2YWxpZGF0aW9uTWVzc2FnZSgpe3JldHVybiB0aGlzLiNjfXNldCB2YWxpZGF0aW9uTWVzc2FnZShBKXt0aGlzLiNjPUF9cHJldmlld1VybE1hcD1uZXcgV2Vha01hcDtkcm9wQXJlYT1udWxsO3N0YXRpYyBzdHlsZXM9Skl0O3JlbmRlcigpe2xldCBBPXRoaXMuZ2V0QWNjZXB0ZWRTdW1tYXJ5KCksRj1bdGhpcy5tdWx0aXBsZT8iTXVsdGlwbGUgZmlsZXMgc3VwcG9ydGVkIjoiU2luZ2xlIGZpbGUgb25seSIsdGhpcy5tYXhTaXplPjA/YE1heCAke3RoaXMuZm9ybWF0RmlsZVNpemUodGhpcy5tYXhTaXplKX1gOiJObyBzaXplIGxpbWl0Il07cmV0dXJuIEEmJkYucHVzaChgQWNjZXB0cyAke0F9YCksTWAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwKICAgICAgICAgIC5sYWJlbD0ke3RoaXMubGFiZWx9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufQogICAgICAgICAgLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0KICAgICAgICA+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJkcm9wem9uZSAke3RoaXMuc3RhdGU9PT0iZHJhZ092ZXIiPyJkcm9wem9uZS0tYWN0aXZlIjoiIn0gJHt0aGlzLmRpc2FibGVkPyJkcm9wem9uZS0tZGlzYWJsZWQiOiIifSAke3RoaXMudmFsdWUubGVuZ3RoPjA/ImRyb3B6b25lLS1oYXMtZmlsZXMiOiIifSIKICAgICAgICAgIHJvbGU9ImJ1dHRvbiIKICAgICAgICAgIHRhYmluZGV4PSR7dGhpcy5kaXNhYmxlZD8tMTowfQogICAgICAgICAgYXJpYS1kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICBhcmlhLWxhYmVsPSR7YFNlbGVjdCBmaWxlcyR7QT9gICgke0F9KWA6IiJ9YH0KICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlRHJvcHpvbmVDbGlja30KICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVEcm9wem9uZUtleWRvd259CiAgICAgICAgPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIGNsYXNzPSJmaWxlLWlucHV0IgogICAgICAgICAgICBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBvcGFjaXR5OiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IHRvcDogMDsgbGVmdDogMDsgb3ZlcmZsb3c6IGhpZGRlbjsiCiAgICAgICAgICAgIHR5cGU9ImZpbGUiCiAgICAgICAgICAgID9tdWx0aXBsZT0ke3RoaXMubXVsdGlwbGV9CiAgICAgICAgICAgIGFjY2VwdD0ke3RoaXMuYWNjZXB0fHwiIn0KICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgQGNoYW5nZT0ke3RoaXMuaGFuZGxlRmlsZUlucHV0Q2hhbmdlfQogICAgICAgICAgICB0YWJpbmRleD0iLTEiCiAgICAgICAgICAvPgogICAgICAgICAgPGRpdiBjbGFzcz0iZHJvcHpvbmVfX2JvZHkiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9faWNvbiI+CiAgICAgICAgICAgICAgJHt0aGlzLmlzTG9hZGluZz9NYDxzcGFuIGNsYXNzPSJkcm9wem9uZV9fbG9hZGVyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPmA6TWA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpGb2xkZXJPcGVuIj48L2RlZXMtaWNvbj5gfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHJvcHpvbmVfX2NvbnRlbnQiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkcm9wem9uZV9faGVhZGxpbmUiPiR7dGhpcy5idXR0b25UZXh0fHwiU2VsZWN0IGZpbGVzIn08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19zdWJsaW5lIj4KICAgICAgICAgICAgICAgIERyYWcgYW5kIGRyb3AgZmlsZXMgaGVyZSBvcgogICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkcm9wem9uZV9fYnJvd3NlIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUJyb3dzZUNsaWNrfQogICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBicm93c2UKICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRyb3B6b25lX19tZXRhIj4KICAgICAgICAgICAgJHtGLm1hcChhZT0+TWA8c3Bhbj4ke2FlfTwvc3Bhbj5gKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgJHt0aGlzLnJlbmRlckZpbGVMaXN0KCl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25NZXNzYWdlP01gPGRpdiBjbGFzcz0idmFsaWRhdGlvbi1tZXNzYWdlIiBhcmlhLWxpdmU9InBvbGl0ZSI+JHt0aGlzLnZhbGlkYXRpb25NZXNzYWdlfTwvZGl2PmA6TWBgfQogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyRmlsZUxpc3QoKXtyZXR1cm4gdGhpcy52YWx1ZS5sZW5ndGg9PT0wP01gYDpNYAogICAgICA8ZGl2IGNsYXNzPSJmaWxlLWxpc3QiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtbGlzdF9faGVhZGVyIj4KICAgICAgICAgIDxzcGFuPiR7dGhpcy52YWx1ZS5sZW5ndGh9IGZpbGUke3RoaXMudmFsdWUubGVuZ3RoPT09MT8iIjoicyJ9IHNlbGVjdGVkPC9zcGFuPgogICAgICAgICAgJHt0aGlzLnZhbHVlLmxlbmd0aD4wP01gPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJmaWxlLWxpc3RfX2NsZWFyIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsZWFyQWxsfT5DbGVhciAke3RoaXMudmFsdWUubGVuZ3RoPjE/ImFsbCI6IiJ9PC9idXR0b24+YDpNYGB9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0X19pdGVtcyI+CiAgICAgICAgICAke3RoaXMudmFsdWUubWFwKEE9PnRoaXMucmVuZGVyRmlsZVJvdyhBKSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJGaWxlUm93KEEpe2xldCBGPXRoaXMuZ2V0RmlsZVR5cGUoQSksYWU9dGhpcy5jYW5TaG93UHJldmlldyhBKT90aGlzLmdldFByZXZpZXdVcmwoQSk6bnVsbDtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0iZmlsZS1yb3cgJHtGfS1maWxlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLXRodW1iIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAke2FlP01gPGltZyBjbGFzcz0idGh1bWItaW1hZ2UiIHNyYz0ke2FlfSBhbHQ9JHtgUHJldmlldyBvZiAke0EubmFtZX1gfT5gOk1gPGRlZXMtaWNvbiBpY29uPSR7dGhpcy5nZXRGaWxlSWNvbihBKX0+PC9kZWVzLWljb24+YH0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLW1ldGEiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1uYW1lIiB0aXRsZT0ke0EubmFtZX0+JHtBLm5hbWV9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWRldGFpbHMiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1zaXplIj4ke3RoaXMuZm9ybWF0RmlsZVNpemUoQS5zaXplKX08L3NwYW4+CiAgICAgICAgICAgICR7RiE9PSJmaWxlIj9NYDxzcGFuIGNsYXNzPSJmaWxlLXR5cGUiPiR7Rn08L3NwYW4+YDpNYGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWFjdGlvbnMiPgogICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgIGNsYXNzPSJyZW1vdmUtYnV0dG9uIgogICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5yZW1vdmVGaWxlKEEpfQogICAgICAgICAgICBhcmlhLWxhYmVsPSR7YFJlbW92ZSAke0EubmFtZX1gfQogICAgICAgICAgPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpYIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9aGFuZGxlRmlsZUlucHV0Q2hhbmdlPWFzeW5jIEE9Pnt0aGlzLmlzTG9hZGluZz0hMTtsZXQgRj1BLnRhcmdldCxhZT1BcnJheS5mcm9tKEYuZmlsZXM/P1tdKTthZS5sZW5ndGg+MCYmYXdhaXQgdGhpcy5hZGRGaWxlcyhhZSksRi52YWx1ZT0iIn07aGFuZGxlRHJvcHpvbmVDbGljaz1BPT57dGhpcy5kaXNhYmxlZHx8QS50YXJnZXQuY2xvc2VzdCgiLmRyb3B6b25lX19icm93c2UsIC5maWxlLWxpc3QiKXx8dGhpcy5vcGVuRmlsZVNlbGVjdG9yKCl9O2hhbmRsZUJyb3dzZUNsaWNrPUE9Pnt0aGlzLmRpc2FibGVkfHwoQS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm9wZW5GaWxlU2VsZWN0b3IoKSl9O2hhbmRsZURyb3B6b25lS2V5ZG93bj1BPT57dGhpcy5kaXNhYmxlZHx8KEEua2V5PT09IkVudGVyInx8QS5rZXk9PT0iICIpJiYoQS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMub3BlbkZpbGVTZWxlY3RvcigpKX07aGFuZGxlQ2xlYXJBbGw9QT0+e0EucHJldmVudERlZmF1bHQoKSx0aGlzLmNsZWFyQWxsKCl9O2hhbmRsZURyYWdFdmVudD1hc3luYyBBPT57aWYoQS5wcmV2ZW50RGVmYXVsdCgpLEEuc3RvcFByb3BhZ2F0aW9uKCksIXRoaXMuZGlzYWJsZWQpe2lmKEEudHlwZT09PSJkcmFnZW50ZXIifHxBLnR5cGU9PT0iZHJhZ292ZXIiKXtBLmRhdGFUcmFuc2ZlciYmKEEuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkiKSx0aGlzLnN0YXRlPSJkcmFnT3ZlciI7cmV0dXJufWlmKEEudHlwZT09PSJkcmFnbGVhdmUiKXtpZighdGhpcy5kcm9wQXJlYSl7dGhpcy5zdGF0ZT0iaWRsZSI7cmV0dXJufWxldCBGPXRoaXMuZHJvcEFyZWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse2NsaWVudFg6YWU9MCxjbGllbnRZOlY9MH09QTsoYWU8PUYubGVmdHx8YWU+PUYucmlnaHR8fFY8PUYudG9wfHxWPj1GLmJvdHRvbSkmJih0aGlzLnN0YXRlPSJpZGxlIik7cmV0dXJufWlmKEEudHlwZT09PSJkcm9wIil7dGhpcy5zdGF0ZT0iaWRsZSI7bGV0IEY9QXJyYXkuZnJvbShBLmRhdGFUcmFuc2Zlcj8uZmlsZXM/P1tdKTtGLmxlbmd0aD4wJiZhd2FpdCB0aGlzLmFkZEZpbGVzKEYpfX19O2F0dGFjaERyb3BMaXN0ZW5lcnMoKXt0aGlzLmRyb3BBcmVhJiZbImRyYWdlbnRlciIsImRyYWdvdmVyIiwiZHJhZ2xlYXZlIiwiZHJvcCJdLmZvckVhY2goQT0+e3RoaXMuZHJvcEFyZWEuYWRkRXZlbnRMaXN0ZW5lcihBLHRoaXMuaGFuZGxlRHJhZ0V2ZW50KX0pfWRldGFjaERyb3BMaXN0ZW5lcnMoKXt0aGlzLmRyb3BBcmVhJiZbImRyYWdlbnRlciIsImRyYWdvdmVyIiwiZHJhZ2xlYXZlIiwiZHJvcCJdLmZvckVhY2goQT0+e3RoaXMuZHJvcEFyZWEucmVtb3ZlRXZlbnRMaXN0ZW5lcihBLHRoaXMuaGFuZGxlRHJhZ0V2ZW50KX0pfXJlYmluZEludGVyYWN0aXZlRWxlbWVudHMoKXtsZXQgQT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kcm9wem9uZSIpO0EhPT10aGlzLmRyb3BBcmVhJiYodGhpcy5kZXRhY2hEcm9wTGlzdGVuZXJzKCksdGhpcy5kcm9wQXJlYT1BLHRoaXMuYXR0YWNoRHJvcExpc3RlbmVycygpKX1mb3JtYXRGaWxlU2l6ZShBKXtsZXQgRj1bIkJ5dGVzIiwiS0IiLCJNQiIsIkdCIl07aWYoQT09PTApcmV0dXJuIjAgQnl0ZXMiO2xldCBhZT1NYXRoLm1pbihNYXRoLmZsb29yKE1hdGgubG9nKEEpL01hdGgubG9nKDEwMjQpKSxGLmxlbmd0aC0xKSxWPUEvTWF0aC5wb3coMTAyNCxhZSk7cmV0dXJuYCR7TWF0aC5yb3VuZChWKjEwMCkvMTAwfSAke0ZbYWVdfWB9Z2V0RmlsZVR5cGUoQSl7bGV0IEY9QS50eXBlLnRvTG93ZXJDYXNlKCk7cmV0dXJuIEYuc3RhcnRzV2l0aCgiaW1hZ2UvIik/ImltYWdlIjpGPT09ImFwcGxpY2F0aW9uL3BkZiI/InBkZiI6Ri5pbmNsdWRlcygid29yZCIpfHxGLmluY2x1ZGVzKCJkb2N1bWVudCIpPyJkb2MiOkYuaW5jbHVkZXMoInNoZWV0Iil8fEYuaW5jbHVkZXMoImV4Y2VsIik/InNwcmVhZHNoZWV0IjpGLmluY2x1ZGVzKCJwcmVzZW50YXRpb24iKXx8Ri5pbmNsdWRlcygicG93ZXJwb2ludCIpPyJwcmVzZW50YXRpb24iOkYuc3RhcnRzV2l0aCgidmlkZW8vIik/InZpZGVvIjpGLnN0YXJ0c1dpdGgoImF1ZGlvLyIpPyJhdWRpbyI6Ri5pbmNsdWRlcygiemlwIil8fEYuaW5jbHVkZXMoImNvbXByZXNzZWQiKT8iYXJjaGl2ZSI6ImZpbGUifWdldEZpbGVJY29uKEEpe2xldCBGPXRoaXMuZ2V0RmlsZVR5cGUoQSk7cmV0dXJue2ltYWdlOiJsdWNpZGU6RmlsZUltYWdlIixwZGY6Imx1Y2lkZTpGaWxlVGV4dCIsZG9jOiJsdWNpZGU6RmlsZVRleHQiLHNwcmVhZHNoZWV0OiJsdWNpZGU6RmlsZVNwcmVhZHNoZWV0IixwcmVzZW50YXRpb246Imx1Y2lkZTpGaWxlQmFyQ2hhcnQiLHZpZGVvOiJsdWNpZGU6RmlsZVZpZGVvIixhdWRpbzoibHVjaWRlOkZpbGVBdWRpbyIsYXJjaGl2ZToibHVjaWRlOkZpbGVBcmNoaXZlIixmaWxlOiJsdWNpZGU6RmlsZSJ9W0ZdPz8ibHVjaWRlOkZpbGUifWNhblNob3dQcmV2aWV3KEEpe3JldHVybiBBLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikmJkEuc2l6ZTw1KjEwMjQqMTAyNH12YWxpZGF0ZUZpbGUoQSl7aWYodGhpcy5tYXhTaXplPjAmJkEuc2l6ZT50aGlzLm1heFNpemUpcmV0dXJuIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2U9YEZpbGUgIiR7QS5uYW1lfSIgZXhjZWVkcyB0aGUgbWF4aW11bSBzaXplIG9mICR7dGhpcy5mb3JtYXRGaWxlU2l6ZSh0aGlzLm1heFNpemUpfWAsdGhpcy52YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiLCExO2lmKHRoaXMuYWNjZXB0KXtsZXQgRj10aGlzLmFjY2VwdC5zcGxpdCgiLCIpLm1hcChhZT0+YWUudHJpbSgpKS5maWx0ZXIoYWU9PmFlLmxlbmd0aD4wKTtpZihGLmxlbmd0aD4wKXtsZXQgYWU9ITE7Zm9yKGxldCBWIG9mIEYpaWYoVi5zdGFydHNXaXRoKCIuIikpe2lmKEEubmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKFYudG9Mb3dlckNhc2UoKSkpe2FlPSEwO2JyZWFrfX1lbHNlIGlmKFYuZW5kc1dpdGgoIi8qIikpe2xldCBTZT1WLnNsaWNlKDAsLTIpO2lmKEEudHlwZS5zdGFydHNXaXRoKFNlKSl7YWU9ITA7YnJlYWt9fWVsc2UgaWYoQS50eXBlPT09Vil7YWU9ITA7YnJlYWt9aWYoIWFlKXJldHVybiB0aGlzLnZhbGlkYXRpb25NZXNzYWdlPWBGaWxlIHR5cGUgbm90IGFjY2VwdGVkLiBBbGxvd2VkOiAke0Yuam9pbigiLCAiKX1gLHRoaXMudmFsaWRhdGlvblN0YXRlPSJpbnZhbGlkIiwhMX19cmV0dXJuITB9Z2V0UHJldmlld1VybChBKXtsZXQgRj10aGlzLnByZXZpZXdVcmxNYXAuZ2V0KEEpO3JldHVybiBGfHwoRj1VUkwuY3JlYXRlT2JqZWN0VVJMKEEpLHRoaXMucHJldmlld1VybE1hcC5zZXQoQSxGKSksRn1yZWxlYXNlUHJldmlldyhBKXtsZXQgRj10aGlzLnByZXZpZXdVcmxNYXAuZ2V0KEEpO0YmJihVUkwucmV2b2tlT2JqZWN0VVJMKEYpLHRoaXMucHJldmlld1VybE1hcC5kZWxldGUoQSkpfWdldEFjY2VwdGVkU3VtbWFyeSgpe2lmKCF0aGlzLmFjY2VwdClyZXR1cm4gbnVsbDtsZXQgQT1BcnJheS5mcm9tKG5ldyBTZXQodGhpcy5hY2NlcHQuc3BsaXQoIiwiKS5tYXAoRj0+Ri50cmltKCkpLmZpbHRlcihGPT5GLmxlbmd0aD4wKS5tYXAoRj0+dGhpcy5mb3JtYXRBY2NlcHRUb2tlbihGKSkpKS5maWx0ZXIoQm9vbGVhbik7cmV0dXJuIEEubGVuZ3RoPT09MD9udWxsOkEubGVuZ3RoPT09MT9BWzBdOkEubGVuZ3RoPT09Mj9gJHtBWzBdfSwgJHtBWzFdfWA6YCR7QS5zbGljZSgwLDIpLmpvaW4oIiwgIil9XHUyMDI2YH1mb3JtYXRBY2NlcHRUb2tlbihBKXtpZihBPT09IiovKiIpcmV0dXJuIkFsbCBmaWxlcyI7aWYoQS5lbmRzV2l0aCgiLyoiKSl7bGV0IFY9QS5zcGxpdCgiLyIpWzBdO3JldHVybiBWP2Ake1YuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtWLnNsaWNlKDEpfSBmaWxlc2A6IkFsbCBmaWxlcyJ9cmV0dXJuIEEuc3RhcnRzV2l0aCgiLiIpP0Euc2xpY2UoMSkudG9VcHBlckNhc2UoKTpBLmluY2x1ZGVzKCJwZGYiKT8iUERGIjpBLmluY2x1ZGVzKCJ6aXAiKT8iWklQIjpBLmluY2x1ZGVzKCJqc29uIik/IkpTT04iOkEuaW5jbHVkZXMoIm1zd29yZCIpPyJET0MiOkEuaW5jbHVkZXMoIndvcmRwcm9jZXNzaW5nbWwiKT8iRE9DWCI6QS5pbmNsdWRlcygiZXhjZWwiKT8iWExTIjpBLmluY2x1ZGVzKCJwcmVzZW50YXRpb24iKT8iUFBUIjooQS5zcGxpdCgiLyIpLnBvcCgpPz9BKS50b1VwcGVyQ2FzZSgpfWF0dGFjaExpZmVjeWNsZUxpc3RlbmVycygpe3RoaXMucmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpfWZpcnN0VXBkYXRlZChBKXtzdXBlci5maXJzdFVwZGF0ZWQoQSksdGhpcy5hdHRhY2hMaWZlY3ljbGVMaXN0ZW5lcnMoKX11cGRhdGVkKEEpe3N1cGVyLnVwZGF0ZWQoQSksQS5oYXMoInZhbHVlIikmJnRoaXMudmFsaWRhdGUoKSx0aGlzLnJlYmluZEludGVyYWN0aXZlRWxlbWVudHMoKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuZGV0YWNoRHJvcExpc3RlbmVycygpLHRoaXMudmFsdWUuZm9yRWFjaChBPT50aGlzLnJlbGVhc2VQcmV2aWV3KEEpKSx0aGlzLnByZXZpZXdVcmxNYXA9bmV3IFdlYWtNYXAsYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX1hc3luYyBvcGVuRmlsZVNlbGVjdG9yKCl7aWYodGhpcy5kaXNhYmxlZHx8dGhpcy5pc0xvYWRpbmcpcmV0dXJuO3RoaXMuaXNMb2FkaW5nPSEwO2xldCBBPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmZpbGUtaW5wdXQiKTtpZighQSl7dGhpcy5pc0xvYWRpbmc9ITE7cmV0dXJufWxldCBGPSgpPT57c2V0VGltZW91dCgoKT0+eyghQS5maWxlc3x8QS5maWxlcy5sZW5ndGg9PT0wKSYmKHRoaXMuaXNMb2FkaW5nPSExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLEYpfSwzMDApfTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLEYpLEEuY2xpY2soKX1yZW1vdmVGaWxlKEEpe2xldCBGPXRoaXMudmFsdWUuaW5kZXhPZihBKTtGPi0xJiYodGhpcy5yZWxlYXNlUHJldmlldyhBKSx0aGlzLnZhbHVlLnNwbGljZShGLDEpLHRoaXMucmVxdWVzdFVwZGF0ZSgidmFsdWUiKSx0aGlzLnZhbGlkYXRlKCksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpfWNsZWFyQWxsKCl7bGV0IEE9Wy4uLnRoaXMudmFsdWVdO3RoaXMudmFsdWU9W10sQS5mb3JFYWNoKEY9PnRoaXMucmVsZWFzZVByZXZpZXcoRikpLHRoaXMucmVxdWVzdFVwZGF0ZSgidmFsdWUiKSx0aGlzLnZhbGlkYXRlKCksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyksdGhpcy5idXR0b25UZXh0PSJTZWxlY3QgZmlsZXMifWFzeW5jIHVwZGF0ZVZhbHVlKEEpe2xldCBGPUEudGFyZ2V0O3RoaXMudmFsdWU9QXJyYXkuZnJvbShGLmZpbGVzPz9bXSksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyl9c2V0VmFsdWUoQSl7dGhpcy52YWx1ZS5mb3JFYWNoKEY9PnRoaXMucmVsZWFzZVByZXZpZXcoRikpLHRoaXMudmFsdWU9QSxBLmxlbmd0aD4wP3RoaXMuYnV0dG9uVGV4dD10aGlzLm11bHRpcGxlPyJBZGQgbW9yZSBmaWxlcyI6IlJlcGxhY2UgZmlsZSI6dGhpcy5idXR0b25UZXh0PSJTZWxlY3QgZmlsZXMiLHRoaXMucmVxdWVzdFVwZGF0ZSgidmFsdWUiKSx0aGlzLnZhbGlkYXRlKCl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX1hc3luYyBhZGRGaWxlcyhBKXtsZXQgRj1bXTtmb3IobGV0IGFlIG9mIEEpdGhpcy52YWxpZGF0ZUZpbGUoYWUpJiZGLnB1c2goYWUpO2lmKEYubGVuZ3RoPT09MCl7dGhpcy5pc0xvYWRpbmc9ITE7cmV0dXJufWlmKHRoaXMubWF4RmlsZXM+MCYmdGhpcy52YWx1ZS5sZW5ndGgrRi5sZW5ndGg+dGhpcy5tYXhGaWxlcyl7bGV0IFY9dGhpcy5tYXhGaWxlcy10aGlzLnZhbHVlLmxlbmd0aDtpZihWPD0wKXt0aGlzLnZhbGlkYXRpb25NZXNzYWdlPWBNYXhpbXVtICR7dGhpcy5tYXhGaWxlc30gZmlsZXMgYWxsb3dlZGAsdGhpcy52YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiLHRoaXMuaXNMb2FkaW5nPSExO3JldHVybn1GLnNwbGljZShWKSx0aGlzLnZhbGlkYXRpb25NZXNzYWdlPWBPbmx5ICR7Vn0gbW9yZSBmaWxlKHMpIGNhbiBiZSBhZGRlZGAsdGhpcy52YWxpZGF0aW9uU3RhdGU9Indhcm4ifSF0aGlzLm11bHRpcGxlJiZGLmxlbmd0aD4wPyh0aGlzLnZhbHVlLmZvckVhY2goYWU9PnRoaXMucmVsZWFzZVByZXZpZXcoYWUpKSx0aGlzLnZhbHVlPVtGWzBdXSk6dGhpcy52YWx1ZS5wdXNoKC4uLkYpLHRoaXMudmFsaWRhdGlvbk1lc3NhZ2U9IiIsdGhpcy52YWxpZGF0aW9uU3RhdGU9bnVsbCx0aGlzLnJlcXVlc3RVcGRhdGUoInZhbHVlIiksYXdhaXQgdGhpcy52YWxpZGF0ZSgpLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpLHRoaXMuaXNMb2FkaW5nPSExLHRoaXMudmFsdWUubGVuZ3RoPjA/dGhpcy5idXR0b25UZXh0PXRoaXMubXVsdGlwbGU/IkFkZCBtb3JlIGZpbGVzIjoiUmVwbGFjZSBmaWxlIjp0aGlzLmJ1dHRvblRleHQ9IlNlbGVjdCBmaWxlcyJ9YXN5bmMgdmFsaWRhdGUoKXtpZih0aGlzLnZhbGlkYXRpb25NZXNzYWdlPSIiLHRoaXMucmVxdWlyZWQmJnRoaXMudmFsdWUubGVuZ3RoPT09MClyZXR1cm4gdGhpcy52YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiLHRoaXMudmFsaWRhdGlvbk1lc3NhZ2U9IlBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGZpbGUiLCExO2ZvcihsZXQgQSBvZiB0aGlzLnZhbHVlKWlmKCF0aGlzLnZhbGlkYXRlRmlsZShBKSlyZXR1cm4hMTtyZXR1cm4gdGhpcy52YWxpZGF0aW9uU3RhdGU9dGhpcy52YWx1ZS5sZW5ndGg+MD8idmFsaWQiOm51bGwsITB9c3RhdGlje3ExKHIsYSl9fTtyZXR1cm4gUj1yfSkoKTtmdW5jdGlvbiBvRWUodCxlKXtpZihlPT09dm9pZCAwJiYoZT17YWxsb3dRUklCQU46ITB9KSx0PT1udWxsKXJldHVybiExO3ZhciBhPW5ldyBSZWdFeHAoIl5bMC05XXsyfSQiLCIiKSxyPXQuc2xpY2UoMCwyKSxpPUlhW3JdO3JldHVybiBpPT09dm9pZCAwfHxpLmJiYW5fcmVnZXhwPT09dm9pZCAwfHxpLmJiYW5fcmVnZXhwPT09bnVsbHx8aS5jaGFycz09PXZvaWQgMD8hMTppLmNoYXJzPT09dC5sZW5ndGgmJmEudGVzdCh0LnNsaWNlKDIsNCkpJiZWbzEodC5zbGljZSg0KSxyKSYmdEZ0KHQpJiYoZS5hbGxvd1FSSUJBTnx8IWVGdCh0KSl9dmFyIGxyOyhmdW5jdGlvbih0KXt0W3QuTm9JQkFOUHJvdmlkZWQ9MF09Ik5vSUJBTlByb3ZpZGVkIix0W3QuTm9JQkFOQ291bnRyeT0xXT0iTm9JQkFOQ291bnRyeSIsdFt0Lldyb25nQkJBTkxlbmd0aD0yXT0iV3JvbmdCQkFOTGVuZ3RoIix0W3QuV3JvbmdCQkFORm9ybWF0PTNdPSJXcm9uZ0JCQU5Gb3JtYXQiLHRbdC5DaGVja3N1bU5vdE51bWJlcj00XT0iQ2hlY2tzdW1Ob3ROdW1iZXIiLHRbdC5Xcm9uZ0lCQU5DaGVja3N1bT01XT0iV3JvbmdJQkFOQ2hlY2tzdW0iLHRbdC5Xcm9uZ0FjY291bnRCYW5rQnJhbmNoQ2hlY2tzdW09Nl09Ildyb25nQWNjb3VudEJhbmtCcmFuY2hDaGVja3N1bSIsdFt0LlFSSUJBTk5vdEFsbG93ZWQ9N109IlFSSUJBTk5vdEFsbG93ZWQifSkobHJ8fChscj17fSkpO2Z1bmN0aW9uIHdGYSh0LGUpe2U9PT12b2lkIDAmJihlPXthbGxvd1FSSUJBTjohMH0pO3ZhciBhPXtlcnJvckNvZGVzOltdLHZhbGlkOiEwfTtpZih0IT1udWxsJiZ0IT09IiIpe3ZhciByPUlhW3Quc2xpY2UoMCwyKV07aWYoIXJ8fCEoci5iYmFuX3JlZ2V4cHx8ci5jaGFycykpcmV0dXJuIGEudmFsaWQ9ITEsYS5lcnJvckNvZGVzLnB1c2gobHIuTm9JQkFOQ291bnRyeSksYTtyJiZyLmNoYXJzJiZyLmNoYXJzIT09dC5sZW5ndGgmJihhLnZhbGlkPSExLGEuZXJyb3JDb2Rlcy5wdXNoKGxyLldyb25nQkJBTkxlbmd0aCkpLHImJnIuYmJhbl9yZWdleHAmJiFyRWUodC5zbGljZSg0KSxyLmJiYW5fcmVnZXhwKSYmKGEudmFsaWQ9ITEsYS5lcnJvckNvZGVzLnB1c2gobHIuV3JvbmdCQkFORm9ybWF0KSksciYmci5iYmFuX3ZhbGlkYXRpb25fZnVuYyYmIXIuYmJhbl92YWxpZGF0aW9uX2Z1bmModC5zbGljZSg0KSkmJihhLnZhbGlkPSExLGEuZXJyb3JDb2Rlcy5wdXNoKGxyLldyb25nQWNjb3VudEJhbmtCcmFuY2hDaGVja3N1bSkpO3ZhciBpPW5ldyBSZWdFeHAoIl5bMC05XXsyfSQiLCIiKTtpLnRlc3QodC5zbGljZSgyLDQpKXx8KGEudmFsaWQ9ITEsYS5lcnJvckNvZGVzLnB1c2gobHIuQ2hlY2tzdW1Ob3ROdW1iZXIpKSwoYS5lcnJvckNvZGVzLmluZGV4T2YobHIuV3JvbmdCQkFORm9ybWF0KSE9PS0xfHwhdEZ0KHQpKSYmKGEudmFsaWQ9ITEsYS5lcnJvckNvZGVzLnB1c2gobHIuV3JvbmdJQkFOQ2hlY2tzdW0pKSwhZS5hbGxvd1FSSUJBTiYmZUZ0KHQpJiYoYS52YWxpZD0hMSxhLmVycm9yQ29kZXMucHVzaChsci5RUklCQU5Ob3RBbGxvd2VkKSl9ZWxzZSBhLnZhbGlkPSExLGEuZXJyb3JDb2Rlcy5wdXNoKGxyLk5vSUJBTlByb3ZpZGVkKTtyZXR1cm4gYX1mdW5jdGlvbiBWbzEodCxlKXtpZih0PT1udWxsfHxlPT09dm9pZCAwfHxlPT09bnVsbClyZXR1cm4hMTt2YXIgYT1JYVtlXTtyZXR1cm4gYT09bnVsbHx8YS5iYmFuX3JlZ2V4cD09PXZvaWQgMHx8YS5iYmFuX3JlZ2V4cD09PW51bGx8fGEuY2hhcnM9PT12b2lkIDB8fGEuY2hhcnM9PT1udWxsPyExOmEuY2hhcnMtND09PXQubGVuZ3RoJiZyRWUodCxhLmJiYW5fcmVnZXhwKT9hLmJiYW5fdmFsaWRhdGlvbl9mdW5jP2EuYmJhbl92YWxpZGF0aW9uX2Z1bmModC5yZXBsYWNlKC9bXHMuXSsvZywiIikpOiEwOiExfWZ1bmN0aW9uIE1GYSh0KXtpZih0IT1udWxsKXt2YXIgZT1JYVt0XTtpZihlIT09dm9pZCAwKXJldHVybiBlLlNFUEE/ZS5TRVBBOiExfXJldHVybiExfWZ1bmN0aW9uIGVGdCh0KXtpZih0PT1udWxsKXJldHVybiExO3ZhciBlPXQuc2xpY2UoMCwyKSxhPVsiTEkiLCJDSCJdO2lmKCFhLmluY2x1ZGVzKGUpKXJldHVybiExO3ZhciByPW5ldyBSZWdFeHAoIl4zWzAtMV17MX1bMC05XXszfSQiLCIiKTtyZXR1cm4gci50ZXN0KHQuc2xpY2UoNCw5KSl9ZnVuY3Rpb24gekZhKHQpe3ZhciBlPWlFZSh0LmJiYW4pfHwiIjtpZih0LmNvdW50cnlDb2RlPT09bnVsbHx8dC5jb3VudHJ5Q29kZT09PXZvaWQgMClyZXR1cm4gbnVsbDt2YXIgYT1JYVt0LmNvdW50cnlDb2RlXTtpZihlIT09IiImJmEhPT12b2lkIDAmJmEuY2hhcnMmJmEuY2hhcnMhPT1udWxsJiZhLmNoYXJzPT09ZS5sZW5ndGgrNCYmYS5iYmFuX3JlZ2V4cCYmYS5iYmFuX3JlZ2V4cCE9PW51bGwmJnJFZShlLGEuYmJhbl9yZWdleHApKXt2YXIgcj1VbzEodC5jb3VudHJ5Q29kZSsiMDAiK2UpO3JldHVybiB0LmNvdW50cnlDb2RlKygiMCIrKDk4LXIpKS5zbGljZSgtMikrZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBrRmEodCl7dmFyIGU9e30sYT1pRWUodCk7aWYoZS5pYmFuPWF8fHQsYSYmb0VlKGEpKXtlLmJiYW49YS5zbGljZSg0KSxlLmNvdW50cnlDb2RlPWEuc2xpY2UoMCwyKSxlLnZhbGlkPSEwO3ZhciByPUlhW2UuY291bnRyeUNvZGVdO2lmKHIuYWNjb3VudF9pbmRlbnRpZmllcil7dmFyIGk9ci5hY2NvdW50X2luZGVudGlmaWVyLnNwbGl0KCItIiksbz1wYXJzZUludChpWzBdKSxzPXBhcnNlSW50KGlbMV0pO2UuYWNjb3VudE51bWJlcj1lLmliYW4uc2xpY2UobyxzKzEpfWlmKHIuYmFua19pZGVudGlmaWVyKXt2YXIgaT1yLmJhbmtfaWRlbnRpZmllci5zcGxpdCgiLSIpLG89cGFyc2VJbnQoaVswXSkscz1wYXJzZUludChpWzFdKTtlLmJhbmtJZGVudGlmaWVyPWUuYmJhbi5zbGljZShvLHMrMSl9aWYoci5icmFuY2hfaW5kZW50aWZpZXIpe3ZhciBpPXIuYnJhbmNoX2luZGVudGlmaWVyLnNwbGl0KCItIiksbz1wYXJzZUludChpWzBdKSxzPXBhcnNlSW50KGlbMV0pO2UuYnJhbmNoSWRlbnRpZmllcj1lLmJiYW4uc2xpY2UobyxzKzEpfX1lbHNlIGUudmFsaWQ9ITE7cmV0dXJuIGV9ZnVuY3Rpb24gckVlKHQsZSl7dmFyIGE9bmV3IFJlZ0V4cChlLCIiKTtyZXR1cm4gYS50ZXN0KHQpfWZ1bmN0aW9uIGlFZSh0KXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmciP251bGw6dC5yZXBsYWNlKC9bLVwgXS9nLCIiKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIHNFZSh0LGUpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4gbnVsbDtlPT1udWxsJiYoZT0iICIpO3ZhciBhPWlFZSh0KTtyZXR1cm4gYT09PW51bGw/bnVsbDphLnJlcGxhY2UoLyguezR9KSg/ISQpL2csIiQxIitlKX1mdW5jdGlvbiB0RnQodCl7dmFyIGU9dC5zbGljZSgwLDIpLGE9cGFyc2VJbnQodC5zbGljZSgyLDQpLDEwKSxyPXQuc2xpY2UoNCksaT1hRnQoIiIuY29uY2F0KHIpLmNvbmNhdChlLCIwMCIpKSxvPUtVKGkpO3JldHVybiA5OC1vPT09YX1mdW5jdGlvbiBhRnQodCl7cmV0dXJuIHQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihlKXt2YXIgYT1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIGE+PTY1PyhhLTU1KS50b1N0cmluZygpOmV9KS5qb2luKCIiKX1mdW5jdGlvbiBVbzEodCl7cmV0dXJuIEtVKGFGdCh0LnNsaWNlKDQpK3Quc2xpY2UoMCw0KSkpfWZ1bmN0aW9uIFNGYSgpe3ZhciB0PXt9O2Zvcih2YXIgZSBpbiBJYSl7dmFyIGE9SWFbZV07dFtlXT17Y2hhcnM6YS5jaGFyc3x8bnVsbCxiYmFuX3JlZ2V4cDphLmJiYW5fcmVnZXhwfHxudWxsLElCQU5SZWdpc3RyeTphLklCQU5SZWdpc3RyeXx8ITEsU0VQQTphLlNFUEF8fCExfX1yZXR1cm4gdH1mdW5jdGlvbiBqbzEodCl7aWYoIXQpcmV0dXJuITE7dmFyIGU9bmV3IFJlZ0V4cCgiXlthLXpBLVpdezZ9W2EtekEtWjAtOV17Mn0oW2EtekEtWjAtOV17M30pPyQiLCIiKSxhPUlhW3QudG9VcHBlckNhc2UoKS5zbGljZSg0LDYpXTtyZXR1cm4gZS50ZXN0KHQpJiZhIT09dm9pZCAwfXZhciB4STsoZnVuY3Rpb24odCl7dFt0Lk5vQklDUHJvdmlkZWQ9MF09Ik5vQklDUHJvdmlkZWQiLHRbdC5Ob0JJQ0NvdW50cnk9MV09Ik5vQklDQ291bnRyeSIsdFt0Lldyb25nQklDRm9ybWF0PTJdPSJXcm9uZ0JJQ0Zvcm1hdCJ9KSh4SXx8KHhJPXt9KSk7ZnVuY3Rpb24gQ0ZhKHQpe3ZhciBlPXtlcnJvckNvZGVzOltdLHZhbGlkOiEwfTtpZih0IT1udWxsJiZ0IT09IiIpe3ZhciBhPUlhW3QudG9VcHBlckNhc2UoKS5zbGljZSg0LDYpXTtpZihhPT09dm9pZCAwKWUudmFsaWQ9ITEsZS5lcnJvckNvZGVzLnB1c2goeEkuTm9CSUNDb3VudHJ5KTtlbHNle3ZhciByPW5ldyBSZWdFeHAoIl5bYS16QS1aXXs2fVthLXpBLVowLTldezJ9KFthLXpBLVowLTldezN9KT8kIiwiIik7ci50ZXN0KHQpfHwoZS52YWxpZD0hMSxlLmVycm9yQ29kZXMucHVzaCh4SS5Xcm9uZ0JJQ0Zvcm1hdCkpfX1lbHNlIGUudmFsaWQ9ITEsZS5lcnJvckNvZGVzLnB1c2goeEkuTm9CSUNQcm92aWRlZCk7cmV0dXJuIGV9ZnVuY3Rpb24gTEZhKHQpe3ZhciBlPXt9LGE9dC50b1VwcGVyQ2FzZSgpO3JldHVybiBqbzEoYSk/KGUuYmFua0NvZGU9YS5zbGljZSgwLDQpLGUuY291bnRyeUNvZGU9YS5zbGljZSg0LDYpLGUubG9jYXRpb25Db2RlPWEuc2xpY2UoNiw4KSxlLnRlc3RCSUM9ZS5sb2NhdGlvbkNvZGVbMV09PT0iMCIsZS5icmFuY2hDb2RlPWEubGVuZ3RoPjg/YS5zbGljZSg4KTpudWxsLGUudmFsaWQ9ITApOmUudmFsaWQ9ITEsZX12YXIgV28xPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bNSw0LDMsMiw3LDYsNSw0LDMsMl0sYT10LnJlcGxhY2UoL1tccy5dKy9nLCIiKSxyPXBhcnNlSW50KGEuY2hhckF0KDEwKSwxMCksaT1hLnN1YnN0cmluZygwLDEwKSxvPTAscz0wO3M8MTA7cysrKW8rPXBhcnNlSW50KGkuY2hhckF0KHMpLDEwKSplW3NdO3ZhciBsPW8lMTE7cmV0dXJuIHI9PT0obD09PTA/MDoxMS1sKX0sR28xPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVwbGFjZSgvW1xzLl0rL2csIiIpLGE9cGFyc2VJbnQoZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0yKSwxMCkscj1wYXJzZUludChlLnN1YnN0cmluZyhlLmxlbmd0aC0yLGUubGVuZ3RoKSwxMCksaT1hJTk3PT09MD85NzphJTk3O3JldHVybiBpPT09cn0sS1U9ZnVuY3Rpb24odCl7Zm9yKDt0Lmxlbmd0aD4yOyl7dmFyIGU9dC5zbGljZSgwLDYpLGE9cGFyc2VJbnQoZSwxMCk7aWYoaXNOYU4oYSkpcmV0dXJuIE5hTjt0PWElOTcrdC5zbGljZShlLmxlbmd0aCl9cmV0dXJuIHBhcnNlSW50KHQsMTApJTk3fSxmNT1mdW5jdGlvbih0KXt2YXIgZT10LnJlcGxhY2UoL1tccy5dKy9nLCIiKSxhPUtVKGUpO3JldHVybiBhPT09MX0sWW8xPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bMyw5LDcsMSwzLDksN10sYT1wYXJzZUludCh0LmNoYXJBdCg3KSwxMCkscj10LnN1YnN0cmluZygwLDcpLGk9MCxvPTA7bzw3O28rKylpKz1wYXJzZUludChyLmNoYXJBdChvKSwxMCkqZVtvXTt2YXIgcz1pJTEwO3JldHVybiBhPT09KHM9PT0wPzA6MTAtcyl9LFpvMT1mdW5jdGlvbih0KXtmb3IodmFyIGU9WzQsOCw1LDEwLDksNywzLDZdLGE9WzEsMiw0LDgsNSwxMCw5LDcsMyw2XSxyPXBhcnNlSW50KHQuY2hhckF0KDgpLDEwKSxpPXBhcnNlSW50KHQuY2hhckF0KDkpLDEwKSxvPXQuc3Vic3RyaW5nKDAsOCkscz10LnN1YnN0cmluZygxMCwyMCksbD0wLGY9MDtmPDg7ZisrKWwrPXBhcnNlSW50KG8uY2hhckF0KGYpLDEwKSplW2ZdO3ZhciBjPWwlMTE7aWYociE9PShjPT09MD8wOmM9PT0xPzE6MTEtYykpcmV0dXJuITE7bD0wO2Zvcih2YXIgZj0wO2Y8MTA7ZisrKWwrPXBhcnNlSW50KHMuY2hhckF0KGYpLDEwKSphW2ZdO3JldHVybiBjPWwlMTEsaT09PShjPT09MD8wOmM9PT0xPzE6MTEtYyl9LHJGdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgYT0xMCxyPTA7cjx0Lmxlbmd0aDtyKyspYSs9cGFyc2VJbnQodC5jaGFyQXQociksMTApLGElMTAhPT0wJiYoYT1hJTEwKSxhPWEqMixhPWElMTE7cmV0dXJuIGU9PT0oMTEtYT09PTEwPzA6MTEtYSl9LFhvMT1mdW5jdGlvbih0KXt2YXIgZT1wYXJzZUludCh0LmNoYXJBdCg2KSwxMCksYT1wYXJzZUludCh0LmNoYXJBdCgxNiksMTApLHI9dC5zdWJzdHJpbmcoMCw2KSxpPXQuc3Vic3RyaW5nKDcsMTYpO3JldHVybiByRnQocixlKSYmckZ0KGksYSl9LGlGdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9WzEwLDUsOCw0LDIsMV0sYT1bNiwzLDcsOSwxMCw1LDgsNCwyLDFdLHI9cGFyc2VJbnQodC5jaGFyQXQoOSksMTApLGk9cGFyc2VJbnQodC5jaGFyQXQoMTkpLDEwKSxvPXQuc3Vic3RyaW5nKDQsOSkscz10LnN1YnN0cmluZygxMCwxOSksbD0wLGY9MDtmPG8ubGVuZ3RoO2YrKylsKz1wYXJzZUludChvLmNoYXJBdChmKSwxMCkqZVtmXTt2YXIgYz1sJTExO2lmKHIhPT0oYz09PTA/MDpjPT09MT8xOjExLWMpKXJldHVybiExO2w9MDtmb3IodmFyIGY9MDtmPHMubGVuZ3RoO2YrKylsKz1wYXJzZUludChzLmNoYXJBdChmKSwxMCkqYVtmXTtyZXR1cm4gYz1sJTExLGk9PT0oYz09PTA/MDpjPT09MT8xOjExLWMpfSxRbzE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVs3LDEsMyw3LDEsMyw3LDEsMyw3LDEsMyw3XSxhPXBhcnNlSW50KHQuY2hhckF0KDE1KSwxMCkscj10LnN1YnN0cmluZygyLDE1KSxpPTAsbz0wO288ci5sZW5ndGg7bysrKWkrPXBhcnNlSW50KHIuY2hhckF0KG8pLDEwKSplW29dO3ZhciBzPWklMTA7cmV0dXJuIGE9PT0ocz09PTA/MDoxMC1zKX0sb0Z0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnJlcGxhY2UoL1tccy5dKy9nLCIiKSxhPUFycmF5LmZyb20oZSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1hW3JdLmNoYXJDb2RlQXQoMCk7aWYoaT49NjUpc3dpdGNoKGkpe2Nhc2UgNjU6Y2FzZSA3NDphW3JdPSIxIjticmVhaztjYXNlIDY2OmNhc2UgNzU6Y2FzZSA4MzphW3JdPSIyIjticmVhaztjYXNlIDY3OmNhc2UgNzY6Y2FzZSA4NDphW3JdPSIzIjticmVhaztjYXNlIDY4OmNhc2UgNzc6Y2FzZSA4NTphW3JdPSI0IjticmVhaztjYXNlIDY5OmNhc2UgNzg6Y2FzZSA4NjphW3JdPSI1IjticmVhaztjYXNlIDcwOmNhc2UgNzk6Y2FzZSA4NzphW3JdPSI2IjticmVhaztjYXNlIDcxOmNhc2UgODA6Y2FzZSA4ODphW3JdPSI3IjticmVhaztjYXNlIDcyOmNhc2UgODE6Y2FzZSA4OTphW3JdPSI4IjticmVhaztjYXNlIDczOmNhc2UgODI6Y2FzZSA5MDphW3JdPSI5IjticmVha319dmFyIG89S1UoYS5qb2luKCIiKSk7cmV0dXJuIG89PT0wfSxLbzE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVs5LDcsMywxLDksNywzLDEsOSw3LDMsMSw5LDcsM10sYT1wYXJzZUludCh0LmNoYXJBdCg3KSwxMCkscj10LnN1YnN0cmluZygwLDcpLGk9MCxvPTA7bzxyLmxlbmd0aDtvKyspaSs9cGFyc2VJbnQoci5jaGFyQXQobyksMTApKmVbb107dmFyIHM9aSUxMDtpZihhIT09KHM9PT0wPzA6MTAtcykpcmV0dXJuITE7aWYoaT0wLHQuZW5kc1dpdGgoIjAwMDAwMDAwIikpe2Zvcih2YXIgbD10LnN1YnN0cmluZyg4LDE1KSxmPXBhcnNlSW50KHQuY2hhckF0KDE1KSwxMCksbz0wO288bC5sZW5ndGg7bysrKWkrPXBhcnNlSW50KGwuY2hhckF0KG8pLDEwKSplW29dO3ZhciBjPWklMTA7cmV0dXJuIGY9PT0oYz09PTA/MDoxMC1jKX1lbHNle2Zvcih2YXIgbD10LnN1YnN0cmluZyg4LDIzKSxmPXBhcnNlSW50KHQuY2hhckF0KDIzKSwxMCksbz0wO288bC5sZW5ndGg7bysrKWkrPXBhcnNlSW50KGwuY2hhckF0KG8pLDEwKSplW29dO3ZhciB1PWklMTA7cmV0dXJuIGY9PT0odT09PTA/MDoxMC11KX19LFRGYT1mdW5jdGlvbih0LGUpe3JldHVybiB0eXBlb2YgSWFbdF0+InUiPyExOihJYVt0XS5iYmFuX3ZhbGlkYXRpb25fZnVuYz1lLCEwKX0sSWE9e0FEOntjaGFyczoyNCxiYmFuX3JlZ2V4cDoiXlswLTldezh9W0EtWjAtOV17MTJ9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI0LTciLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiI4LTI0In0sQUU6e2NoYXJzOjIzLGJiYW5fcmVnZXhwOiJeWzAtOV17M31bMC05XXsxNn0kIixJQkFOUmVnaXN0cnk6ITAsYmFua19pZGVudGlmaWVyOiIwLTIiLGFjY291bnRfaW5kZW50aWZpZXI6IjctMjMifSxBRjp7fSxBRzp7fSxBSTp7fSxBTDp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bMC05XXs4fVtBLVowLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjMtNyIsYmFua19pZGVudGlmaWVyOiIwLTIiLGFjY291bnRfaW5kZW50aWZpZXI6IjEyLTI4In0sQU06e30sQU86e2NoYXJzOjI1LGJiYW5fcmVnZXhwOiJeWzAtOV17MjF9JCJ9LEFROnt9LEFSOnt9LEFTOnt9LEFUOntjaGFyczoyMCxiYmFuX3JlZ2V4cDoiXlswLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC00In0sQVU6e30sQVc6e30sQVg6e2NoYXJzOjE4LGJiYW5fcmVnZXhwOiJeWzAtOV17MTR9JCIsSUJBTlJlZ2lzdHJ5OiEwfSxBWjp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVtBLVowLTldezIwfSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiNC0yOCJ9LEJBOntjaGFyczoyMCxiYmFuX3JlZ2V4cDoiXlswLTldezE2fSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOmY1LElCQU5SZWdpc3RyeTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjMtNSIsYmFua19pZGVudGlmaWVyOiIwLTIifSxCQjp7fSxCRDp7fSxCRTp7Y2hhcnM6MTYsYmJhbl9yZWdleHA6Il5bMC05XXsxMn0kIixiYmFuX3ZhbGlkYXRpb25fZnVuYzpHbzEsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTIiLGFjY291bnRfaW5kZW50aWZpZXI6IjAtMTYifSxCRjp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aMC05XXsyfVswLTldezIyfSQifSxCRzp7Y2hhcnM6MjIsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezZ9W0EtWjAtOV17OH0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjQtNyIsYmFua19pZGVudGlmaWVyOiIwLTMifSxCSDp7Y2hhcnM6MjIsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVtBLVowLTldezE0fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiOC0yMiJ9LEJJOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezIzfSQiLGJyYW5jaF9pbmRlbnRpZmllcjoiNS05IixiYW5rX2lkZW50aWZpZXI6IjAtNCIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTQtMjcifSxCSjp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aMC05XXsyfVswLTldezIyfSQifSxCTDp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQifSxCTTp7fSxCTjp7fSxCTzp7fSxCUTp7fSxCUjp7Y2hhcnM6MjksYmJhbl9yZWdleHA6Il5bMC05XXsyM31bQS1aXXsxfVtBLVowLTldezF9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiOC0xMiIsYmFua19pZGVudGlmaWVyOiIwLTciLGFjY291bnRfaW5kZW50aWZpZXI6IjE3LTI5In0sQlM6e30sQlQ6e30sQlY6e30sQlc6e30sQlk6e2NoYXJzOjI4LGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bMC05XXs0fVtBLVowLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyJ9LEJaOnt9LENBOnt9LENDOnt9LENEOnt9LENGOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezIzfSQifSxDRzp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsyM30kIn0sQ0g6e2NoYXJzOjIxLGJiYW5fcmVnZXhwOiJeWzAtOV17NX1bQS1aMC05XXsxMn0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtNCJ9LENJOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXltBLVpdezF9WzAtOV17MjN9JCJ9LENLOnt9LENMOnt9LENNOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezIzfSQifSxDTjp7fSxDTzp7fSxDUjp7Y2hhcnM6MjIsYmJhbl9yZWdleHA6Il5bMC05XXsxOH0kIixJQkFOUmVnaXN0cnk6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjgtMjIifSxDVTp7fSxDVjp7Y2hhcnM6MjUsYmJhbl9yZWdleHA6Il5bMC05XXsyMX0kIn0sQ1c6e30sQ1g6e30sQ1k6e2NoYXJzOjI4LGJiYW5fcmVnZXhwOiJeWzAtOV17OH1bQS1aMC05XXsxNn0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjMtNyIsYmFua19pZGVudGlmaWVyOiIwLTIiLGFjY291bnRfaW5kZW50aWZpZXI6IjEyLTI4In0sQ1o6e2NoYXJzOjI0LGJiYW5fcmVnZXhwOiJeWzAtOV17MjB9JCIsYmJhbl92YWxpZGF0aW9uX2Z1bmM6aUZ0LElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIn0sREU6e2NoYXJzOjIyLGJiYW5fcmVnZXhwOiJeWzAtOV17MTh9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTciLGFjY291bnRfaW5kZW50aWZpZXI6IjEzLTIyIn0sREo6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MjN9JCIsYnJhbmNoX2luZGVudGlmaWVyOiI1LTkiLGJhbmtfaWRlbnRpZmllcjoiMC00IixhY2NvdW50X2luZGVudGlmaWVyOiIxNC0yNyJ9LERLOntjaGFyczoxOCxiYmFuX3JlZ2V4cDoiXlswLTldezE0fSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiI0LTE4In0sRE06e30sRE86e2NoYXJzOjI4LGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bMC05XXsyMH0kIixJQkFOUmVnaXN0cnk6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjgtMjgifSxEWjp7Y2hhcnM6MjYsYmJhbl9yZWdleHA6Il5bMC05XXsyMn0kIn0sRUM6e30sRUU6e2NoYXJzOjIwLGJiYW5fcmVnZXhwOiJeWzAtOV17MTZ9JCIsYmJhbl92YWxpZGF0aW9uX2Z1bmM6UW8xLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC0xIixhY2NvdW50X2luZGVudGlmaWVyOiI4LTIwIn0sRUc6e2NoYXJzOjI5LGJiYW5fcmVnZXhwOiJeWzAtOV17MjV9IixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI0LTciLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiIxNy0yOSJ9LEVIOnt9LEVSOnt9LEVTOntjaGFyczoyNCxiYmFuX3ZhbGlkYXRpb25fZnVuYzpabzEsYmJhbl9yZWdleHA6Il5bMC05XXsyMH0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjQtNyIsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjE0LTI0In0sRVQ6e30sRkk6e2NoYXJzOjE4LGJiYW5fcmVnZXhwOiJeWzAtOV17MTR9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTIiLGFjY291bnRfaW5kZW50aWZpZXI6IjAtMCJ9LEZKOnt9LEZLOntjaGFyczoxOCxiYmFuX3JlZ2V4cDoiXltBLVpdezJ9WzAtOV17MTJ9JCIsYmFua19pZGVudGlmaWVyOiIwLTEiLGFjY291bnRfaW5kZW50aWZpZXI6IjYtMTgifSxGTTp7fSxGTzp7Y2hhcnM6MTgsYmJhbl9yZWdleHA6Il5bMC05XXsxNH0kIixJQkFOUmVnaXN0cnk6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjQtMTgifSxGUjp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOm9GdCxJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtNCIsYnJhbmNoX2luZGVudGlmaWVyOiI1LTkiLGFjY291bnRfaW5kZW50aWZpZXI6IjE0LTI0In0sR0E6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MjN9JCJ9LEdCOntjaGFyczoyMixiYmFuX3JlZ2V4cDoiXltBLVpdezR9WzAtOV17MTR9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI0LTkiLGJhbmtfaWRlbnRpZmllcjoiMC0zIn0sR0Q6e30sR0U6e2NoYXJzOjIyLGJiYW5fcmVnZXhwOiJeW0EtWjAtOV17Mn1bMC05XXsxNn0kIixJQkFOUmVnaXN0cnk6ITAsYmFua19pZGVudGlmaWVyOiIwLTEiLGFjY291bnRfaW5kZW50aWZpZXI6IjYtMjIifSxHRjp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLElCQU5SZWdpc3RyeTohMH0sR0c6e30sR0g6e30sR0k6e2NoYXJzOjIzLGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bQS1aMC05XXsxNX0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiOC0yMyJ9LEdMOntjaGFyczoxOCxiYmFuX3JlZ2V4cDoiXlswLTldezE0fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiNC0xOCJ9LEdNOnt9LEdOOnt9LEdQOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsSUJBTlJlZ2lzdHJ5OiEwfSxHUTp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsyM30kIn0sR1I6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17N31bQS1aMC05XXsxNn0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjMtNiIsYmFua19pZGVudGlmaWVyOiIwLTIiLGFjY291bnRfaW5kZW50aWZpZXI6IjctMjcifSxHUzp7fSxHVDp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aMC05XXsyNH0kIixJQkFOUmVnaXN0cnk6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjgtMjgifSxHVTp7fSxHVzp7Y2hhcnM6MjUsYmJhbl9yZWdleHA6Il5bQS1aXXsyfVswLTldezE5fSQifSxHWTp7fSxISzp7fSxITTp7fSxITjp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezIwfSQifSxIUjp7Y2hhcnM6MjEsYmJhbl9yZWdleHA6Il5bMC05XXsxN30kIixiYmFuX3ZhbGlkYXRpb25fZnVuYzpYbzEsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTYifSxIVDp7fSxIVTp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bMC05XXsyNH0kIixiYmFuX3ZhbGlkYXRpb25fZnVuYzpLbzEsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYnJhbmNoX2luZGVudGlmaWVyOiIzLTYiLGJhbmtfaWRlbnRpZmllcjoiMC0yIn0sSUQ6e30sSUU6e2NoYXJzOjIyLGJiYW5fcmVnZXhwOiJeW0EtWjAtOV17NH1bMC05XXsxNH0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjQtOSIsYmFua19pZGVudGlmaWVyOiIwLTMifSxJTDp7Y2hhcnM6MjMsYmJhbl9yZWdleHA6Il5bMC05XXsxOX0kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiIzLTUiLGJhbmtfaWRlbnRpZmllcjoiMC0yIn0sSU06e30sSU46e30sSU86e30sSVE6e2NoYXJzOjIzLGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bMC05XXsxNX0kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI0LTYiLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiIxMS0yMyJ9LElSOntjaGFyczoyNixiYmFuX3JlZ2V4cDoiXlswLTldezIyfSQifSxJUzp7Y2hhcnM6MjYsYmJhbl9yZWdleHA6Il5bMC05XXsyMn0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjItMyIsYmFua19pZGVudGlmaWVyOiIwLTEifSxJVDp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bQS1aXXsxfVswLTldezEwfVtBLVowLTldezEyfSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiNi0xMCIsYmFua19pZGVudGlmaWVyOiIxLTUiLGFjY291bnRfaW5kZW50aWZpZXI6IjQtMjcifSxKRTp7fSxKTTp7fSxKTzp7Y2hhcnM6MzAsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezR9W0EtWjAtOV17MTh9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiNC03IixiYW5rX2lkZW50aWZpZXI6IjQtNyJ9LEpQOnt9LEtFOnt9LEtHOnt9LEtIOnt9LEtJOnt9LEtNOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezIzfSQifSxLTjp7fSxLUDp7fSxLUjp7fSxLVzp7Y2hhcnM6MzAsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVtBLVowLTldezIyfSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiMjAtMzAifSxLWTp7fSxLWjp7Y2hhcnM6MjAsYmJhbl9yZWdleHA6Il5bMC05XXszfVtBLVowLTldezEzfSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMiIsYWNjb3VudF9pbmRlbnRpZmllcjoiMC0yMCJ9LExBOnt9LExCOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXlswLTldezR9W0EtWjAtOV17MjB9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiIxNC0yOCJ9LExDOntjaGFyczozMixiYmFuX3JlZ2V4cDoiXltBLVpdezR9W0EtWjAtOV17MjR9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiI4LTMyIn0sTEk6e2NoYXJzOjIxLGJiYW5fcmVnZXhwOiJeWzAtOV17NX1bQS1aMC05XXsxMn0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtNCJ9LExLOnt9LExSOnt9LExTOnt9LExUOntjaGFyczoyMCxiYmFuX3JlZ2V4cDoiXlswLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC00In0sTFU6e2NoYXJzOjIwLGJiYW5fcmVnZXhwOiJeWzAtOV17M31bQS1aMC05XXsxM30kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMiJ9LExWOntjaGFyczoyMSxiYmFuX3JlZ2V4cDoiXltBLVpdezR9W0EtWjAtOV17MTN9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjAtMjEifSxMWTp7Y2hhcnM6MjUsYmJhbl9yZWdleHA6Il5bMC05XXsyMX0kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiIzLTUiLGJhbmtfaWRlbnRpZmllcjoiMC0yIixhY2NvdW50X2luZGVudGlmaWVyOiIxMC0yNSJ9LE1BOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXlswLTldezI0fSQifSxNQzp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOm9GdCxJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjUtOSIsYmFua19pZGVudGlmaWVyOiIwLTQifSxNRDp7Y2hhcnM6MjQsYmJhbl9yZWdleHA6Il5bQS1aMC05XXsyfVtBLVowLTldezE4fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMSIsYWNjb3VudF9pbmRlbnRpZmllcjoiNi0yNCJ9LE1FOntjaGFyczoyMixiYmFuX3JlZ2V4cDoiXlswLTldezE4fSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOmY1LElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMiIsYWNjb3VudF9pbmRlbnRpZmllcjoiNC0yMiJ9LE1GOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsSUJBTlJlZ2lzdHJ5OiEwfSxNRzp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsyM30kIn0sTUg6e30sTUs6e2NoYXJzOjE5LGJiYW5fcmVnZXhwOiJeWzAtOV17M31bQS1aMC05XXsxMH1bMC05XXsyfSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOmY1LElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMiJ9LE1MOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXltBLVowLTldezJ9WzAtOV17MjJ9JCJ9LE1NOnt9LE1OOntjaGFyczoyMCxiYmFuX3JlZ2V4cDoiXlswLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiOC0yMCJ9LE1POnt9LE1QOnt9LE1ROntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsSUJBTlJlZ2lzdHJ5OiEwfSxNUjp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsyM30kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI1LTkiLGJhbmtfaWRlbnRpZmllcjoiMC00IixhY2NvdW50X2luZGVudGlmaWVyOiI0LTI3In0sTVM6e30sTVQ6e2NoYXJzOjMxLGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bMC05XXs1fVtBLVowLTldezE4fSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiNC04IixiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTUtMzEifSxNVTp7Y2hhcnM6MzAsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezE5fVtBLVpdezN9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiNi03IixiYW5rX2lkZW50aWZpZXI6IjAtNSIsYWNjb3VudF9pbmRlbnRpZmllcjoiMC0zMCJ9LE1WOnt9LE1XOnt9LE1YOnt9LE1ZOnt9LE1aOntjaGFyczoyNSxiYmFuX3JlZ2V4cDoiXlswLTldezIxfSQifSxOQTp7fSxOQzp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLElCQU5SZWdpc3RyeTohMH0sTkU6e2NoYXJzOjI4LGJiYW5fcmVnZXhwOiJeW0EtWl17Mn1bMC05XXsyMn0kIn0sTkY6e30sTkc6e30sTkk6e2NoYXJzOjI4LGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bMC05XXsyMH0kIixiYW5rX2lkZW50aWZpZXI6IjAtMyIsSUJBTlJlZ2lzdHJ5OiEwLGFjY291bnRfaW5kZW50aWZpZXI6IjgtMjgifSxOTDp7Y2hhcnM6MTgsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezEwfSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiI4LTE4In0sTk86e2NoYXJzOjE1LGJiYW5fcmVnZXhwOiJeWzAtOV17MTF9JCIsYmJhbl92YWxpZGF0aW9uX2Z1bmM6V28xLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiI0LTE1In0sTlA6e30sTlI6e30sTlU6e30sTlo6e30sT006e2NoYXJzOjIzLGJiYW5fcmVnZXhwOiJeWzAtOV17M31bQS1aMC05XXsxNn0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMSxiYW5rX2lkZW50aWZpZXI6IjAtMiJ9LFBBOnt9LFBFOnt9LFBGOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsSUJBTlJlZ2lzdHJ5OiEwfSxQRzp7fSxQSDp7fSxQSzp7Y2hhcnM6MjQsYmJhbl9yZWdleHA6Il5bQS1aMC05XXs0fVswLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyJ9LFBMOntjaGFyczoyOCxiYmFuX3ZhbGlkYXRpb25fZnVuYzpZbzEsYmJhbl9yZWdleHA6Il5bMC05XXsyNH0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjAtNyIsYWNjb3VudF9pbmRlbnRpZmllcjoiMi0yOCJ9LFBNOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsSUJBTlJlZ2lzdHJ5OiEwfSxQTjp7fSxQUjp7fSxQUzp7Y2hhcnM6MjksYmJhbl9yZWdleHA6Il5bQS1aMC05XXs0fVswLTldezIxfSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTctMjkifSxQVDp7Y2hhcnM6MjUsYmJhbl9yZWdleHA6Il5bMC05XXsyMX0kIixiYmFuX3ZhbGlkYXRpb25fZnVuYzpmNSxJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyJ9LFBXOnt9LFBZOnt9LFFBOntjaGFyczoyOSxiYmFuX3JlZ2V4cDoiXltBLVpdezR9W0EtWjAtOV17MjF9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiI4LTI5In0sUkU6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIixJQkFOUmVnaXN0cnk6ITB9LFJPOntjaGFyczoyNCxiYmFuX3JlZ2V4cDoiXltBLVpdezR9W0EtWjAtOV17MTZ9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjAtMjQifSxSUzp7Y2hhcnM6MjIsYmJhbl9yZWdleHA6Il5bMC05XXsxOH0kIixiYmFuX3ZhbGlkYXRpb25fZnVuYzpmNSxJQkFOUmVnaXN0cnk6ITAsYmFua19pZGVudGlmaWVyOiIwLTIifSxSVTp7Y2hhcnM6MzMsYmJhbl9yZWdleHA6Il5bMC05XXsxNH1bQS1aMC05XXsxNX0kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI5LTEzIixiYW5rX2lkZW50aWZpZXI6IjAtOCIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTMtMzMifSxSVzp7fSxTQTp7Y2hhcnM6MjQsYmJhbl9yZWdleHA6Il5bMC05XXsyfVtBLVowLTldezE4fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMSIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTItMjQifSxTQjp7fSxTQzp7Y2hhcnM6MzEsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezIwfVtBLVpdezN9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiNi03IixiYW5rX2lkZW50aWZpZXI6IjAtNSIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTItMjgifSxTRDp7Y2hhcnM6MTgsYmJhbl9yZWdleHA6Il5bMC05XXsxNH0kIixJQkFOUmVnaXN0cnk6ITAsYmFua19pZGVudGlmaWVyOiIwLTEiLGFjY291bnRfaW5kZW50aWZpZXI6IjYtMTgifSxTRTp7Y2hhcnM6MjQsYmJhbl9yZWdleHA6Il5bMC05XXsyMH0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMiJ9LFNHOnt9LFNIOnt9LFNJOntjaGFyczoxOSxiYmFuX3JlZ2V4cDoiXlswLTldezE1fSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOmY1LElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiMi00IixiYW5rX2lkZW50aWZpZXI6IjAtMSIsYWNjb3VudF9pbmRlbnRpZmllcjoiOS0xNiJ9LFNKOnt9LFNLOntjaGFyczoyNCxiYmFuX3JlZ2V4cDoiXlswLTldezIwfSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOmlGdCxJQkFOUmVnaXN0cnk6ITAsU0VQQTohMH0sU0w6e30sU006e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeW0EtWl17MX1bMC05XXsxMH1bQS1aMC05XXsxMn0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjYtMTAifSxTTjp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aXXsyfVswLTldezIyfSQifSxTTzp7Y2hhcnM6MjMsYmJhbl9yZWdleHA6Il5bMC05XXsxOX0kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI0LTYiLGFjY291bnRfaW5kZW50aWZpZXI6IjExLTIzIn0sU1I6e30sU1M6e30sU1Q6e2NoYXJzOjI1LGJiYW5fcmVnZXhwOiJeWzAtOV17MjF9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiNC03In0sU1Y6e2NoYXJzOjI4LGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bMC05XXsyMH0kIixJQkFOUmVnaXN0cnk6ITAsYWNjb3VudF9pbmRlbnRpZmllcjoiOC0yOCJ9LFNYOnt9LFNZOnt9LFNaOnt9LFRDOnt9LFREOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezIzfSQifSxURjp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLElCQU5SZWdpc3RyeTohMH0sVEc6e2NoYXJzOjI4LGJiYW5fcmVnZXhwOiJeW0EtWl17Mn1bMC05XXsyMn0kIn0sVEg6e30sVEo6e30sVEs6e30sVEw6e2NoYXJzOjIzLGJiYW5fcmVnZXhwOiJeWzAtOV17MTl9JCIsSUJBTlJlZ2lzdHJ5OiEwLGFjY291bnRfaW5kZW50aWZpZXI6IjQtMjMifSxUTTp7fSxUTjp7Y2hhcnM6MjQsYmJhbl9yZWdleHA6Il5bMC05XXsyMH0kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiIyLTQiLGFjY291bnRfaW5kZW50aWZpZXI6IjQtMjQifSxUTzp7fSxUUjp7Y2hhcnM6MjYsYmJhbl9yZWdleHA6Il5bMC05XXs1fVtBLVowLTldezE3fSQiLElCQU5SZWdpc3RyeTohMH0sVFQ6e30sVFY6e30sVFc6e30sVFo6e30sVUE6e2NoYXJzOjI5LGJiYW5fcmVnZXhwOiJeWzAtOV17Nn1bQS1aMC05XXsxOX0kIixJQkFOUmVnaXN0cnk6ITAsYWNjb3VudF9pbmRlbnRpZmllcjoiMTUtMjkifSxVRzp7fSxVTTp7fSxVUzp7fSxVWTp7fSxVWjp7fSxWQTp7Y2hhcnM6MjIsYmJhbl9yZWdleHA6Il5bMC05XXsxOH0iLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGFjY291bnRfaW5kZW50aWZpZXI6IjctMjIifSxWQzp7fSxWRTp7fSxWRzp7Y2hhcnM6MjQsYmJhbl9yZWdleHA6Il5bQS1aMC05XXs0fVswLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxhY2NvdW50X2luZGVudGlmaWVyOiI4LTI0In0sVkk6e30sVk46e30sVlU6e30sV0Y6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIixJQkFOUmVnaXN0cnk6ITB9LFdTOnt9LFhLOntjaGFyczoyMCxiYmFuX3JlZ2V4cDoiXlswLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjItMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiNC0yMCJ9LFlFOnt9LFlUOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsSUJBTlJlZ2lzdHJ5OiEwfSxaQTp7fSxaTTp7fSxaVzp7fX07ZmUoKTt2YXIgc0Z0PSgpPT5NYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke3RlYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucGF5bWVudC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBJQkFOIElucHV0In0gLnN1YnRpdGxlPSR7IkludGVybmF0aW9uYWwgQmFuayBBY2NvdW50IE51bWJlciB3aXRoIGF1dG9tYXRpYyBmb3JtYXR0aW5nIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtaWJhbiAKICAgICAgICAgIC5sYWJlbD0keyJCYW5rIEFjY291bnQgSUJBTiJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkVudGVyIHlvdXIgSW50ZXJuYXRpb25hbCBCYW5rIEFjY291bnQgTnVtYmVyIn0KICAgICAgICA+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtaWJhbiAKICAgICAgICAgIC5sYWJlbD0keyJWZXJpZmllZCBJQkFOIn0gCiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBJQkFOIGhhcyBiZWVuIHZlcmlmaWVkIn0KICAgICAgICAgIC52YWx1ZT0keyJERTg5MzcwNDAwNDQwNTMyMDEzMDAwIn0KICAgICAgICA+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQYXltZW50IEluZm9ybWF0aW9uIn0gLnN1YnRpdGxlPSR7IklCQU4gaW5wdXQgd2l0aCBob3Jpem9udGFsIGxheW91dCBmb3IgcGF5bWVudCBmb3JtcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InBheW1lbnQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IkFjY291bnQgSG9sZGVyIn0gCiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHsiSm9obiBEb2UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgICAubGFiZWw9JHsiSUJBTiJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnZhbHVlPSR7IkdCODJXRVNUMTIzNDU2OTg3NjU0MzIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiVmFsaWRhdGlvbiAmIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlZCBmaWVsZHMgYW5kIGRpc2FibGVkIHN0YXRlcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiUGF5bWVudCBBY2NvdW50In0gCiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiUmVxdWlyZWQgZm9yIHByb2Nlc3NpbmcgcGF5bWVudHMifQogICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiTG9ja2VkIElCQU4ifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIElCQU4gY2Fubm90IGJlIGNoYW5nZWQifQogICAgICAgICAgLnZhbHVlPSR7IkZSMTQyMDA0MTAxMDA1MDUwMDAxM00wMjYwNiJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHshMH0KICAgICAgICA+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYW5rIFRyYW5zZmVyIEZvcm0ifSAuc3VidGl0bGU9JHsiQ29tcGxldGUgZm9ybSBleGFtcGxlIHdpdGggSUJBTiB2YWxpZGF0aW9uIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IlJlY2lwaWVudCBOYW1lIn0gLnJlcXVpcmVkPSR7ITB9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtaWJhbiAubGFiZWw9JHsiUmVjaXBpZW50IElCQU4ifSAucmVxdWlyZWQ9JHshMH0+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJUcmFuc2ZlciBSZWZlcmVuY2UifSAuZGVzY3JpcHRpb249JHsiT3B0aW9uYWwgcmVmZXJlbmNlIGZvciB0aGUgdHJhbnNmZXIifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkFtb3VudCJ9IC5pbnB1dFR5cGU9JHsibnVtYmVyIn0gLnJlcXVpcmVkPSR7ITB9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7ZmUoKTtTdCgpO0JlKCk7dmFyIEpVPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sUWw9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LG5FZT0oKCk9PntsZXQgdD1bY2UoImRlZXMtaW5wdXQtaWJhbiIpXSxlLGE9W10scixpPVhlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdO3ZhciBiPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgeD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtsZSgpXSxmPVtsZSgpXSxkPVtEKHt0eXBlOlN0cmluZ30pXSxKVSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImVudGVyZWRTdHJpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJlbnRlcmVkU3RyaW5nImluIG0sZ2V0Om09Pm0uZW50ZXJlZFN0cmluZyxzZXQ6KG0sdik9PnttLmVudGVyZWRTdHJpbmc9dn19LG1ldGFkYXRhOnh9LHMsbCksSlUodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJlbnRlcmVkSWJhbklzVmFsaWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJlbnRlcmVkSWJhbklzVmFsaWQiaW4gbSxnZXQ6bT0+bS5lbnRlcmVkSWJhbklzVmFsaWQsc2V0OihtLHYpPT57bS5lbnRlcmVkSWJhbklzVmFsaWQ9dn19LG1ldGFkYXRhOnh9LGMsdSksSlUodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+InZhbHVlImluIG0sZ2V0Om09Pm0udmFsdWUsc2V0OihtLHYpPT57bS52YWx1ZT12fX0sbWV0YWRhdGE6eH0saCxnKSxKVShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTp4fSxudWxsLGEpLGI9cj1lLnZhbHVlLHgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6eH0pfXN0YXRpYyBkZW1vPXNGdDtzdGF0aWMgZGVtb0dyb3VwPSJJbnB1dCI7I2U9UWwodGhpcyxzLCIiKTtnZXQgZW50ZXJlZFN0cmluZygpe3JldHVybiB0aGlzLiNlfXNldCBlbnRlcmVkU3RyaW5nKHgpe3RoaXMuI2U9eH0jdD0oUWwodGhpcyxsKSxRbCh0aGlzLGMsITEpKTtnZXQgZW50ZXJlZEliYW5Jc1ZhbGlkKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGVudGVyZWRJYmFuSXNWYWxpZCh4KXt0aGlzLiN0PXh9I2E9KFFsKHRoaXMsdSksUWwodGhpcyxoLCIiKSk7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHZhbHVlKHgpe3RoaXMuI2E9eH1zdGF0aWMgc3R5bGVzPVt4ZSwuLi5YZS5iYXNlU3R5bGVzLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgLyogSUJBTiBpbnB1dCBzcGVjaWZpYyBzdHlsZXMgY2FuIGdvIGhlcmUgKi8KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfHwiSUJBTiJ9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAudmFsdWU9JHt0aGlzLnZhbHVlfQogICAgICAgICAgLmRpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiREU4OSAzNzA0IDAwNDQgMDUzMiAwMTMwIDAwIn0KICAgICAgICAgIEBpbnB1dD0ke3g9Pnt0aGlzLnZhbGlkYXRlSWJhbih4KX19CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2Rpdj4KICAgIGB9Zmlyc3RVcGRhdGVkKHgpe3N1cGVyLmZpcnN0VXBkYXRlZCh4KTtsZXQgbT10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7bSYmbS5jaGFuZ2VTdWJqZWN0JiZtLmNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCgpPT57dGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyl9KX1hc3luYyB2YWxpZGF0ZUliYW4oeCl7bGV0IG09eC50YXJnZXQsdj1tPy52YWx1ZTt2PXZ8fCIiLHRoaXMuZW50ZXJlZFN0cmluZyE9PXYmJih0aGlzLmVudGVyZWRTdHJpbmc9c0VlKHYpfHwiIixtJiYobS52YWx1ZT10aGlzLmVudGVyZWRTdHJpbmcsdGhpcy52YWx1ZT10aGlzLmVudGVyZWRTdHJpbmcsdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpKSx0aGlzLmVudGVyZWRJYmFuSXNWYWxpZD1vRWUodGhpcy5lbnRlcmVkU3RyaW5nLnJlcGxhY2UoLyAvZywiIikpO2xldCB5PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKTt5LnZhbGlkYXRpb25UZXh0PWBJQkFOIGlzIHZhbGlkOiAke3RoaXMuZW50ZXJlZEliYW5Jc1ZhbGlkfWB9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX1zZXRWYWx1ZSh4KXt0aGlzLnZhbHVlPXgsdGhpcy5lbnRlcmVkU3RyaW5nPXNFZSh4KXx8IiJ9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLFFsKHRoaXMsZyl9c3RhdGlje1FsKHIsYSl9fTtyZXR1cm4gYj1yfSkoKTtmZSgpO3ZhciBuRnQ9KCk9Pk1gCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7dGVgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogNDhweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjhmOWZhIiwiIzBhMGEwYSIpfTsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VjdGlvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMxODE4MWIiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2V0dGluZ3MtZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAgIC5zZXR0aW5ncy1ncmlkIHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NdWx0aS1PcHRpb24gVG9nZ2xlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+U2VsZWN0IGZyb20gbXVsdGlwbGUgb3B0aW9ucyB3aXRoIGEgc21vb3RoIHNsaWRpbmcgaW5kaWNhdG9yIGFuaW1hdGlvbi48L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IkRpc3BsYXkgTW9kZSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIGhvdyBjb250ZW50IGlzIGRpc3BsYXllZCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1siTGlzdCBWaWV3IiwiR3JpZCBWaWV3IiwiQ29tcGFjdCJdfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkdyaWQgVmlldyJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAKICAgICAgICA8YnI+PGJyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiVC1TaGlydCBTaXplIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJTZWxlY3QgeW91ciBwcmVmZXJyZWQgc2l6ZSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1siWFMiLCJTIiwiTSIsIkwiLCJYTCIsIlhYTCJdfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik0ifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Qm9vbGVhbiBUb2dnbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5TaW1wbGUgb24vb2ZmIHN3aXRjaGVzIHdpdGggY3VzdG9taXphYmxlIGxhYmVscyBmb3IgY2xlYXJlciBjb250ZXh0LjwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiTm90aWZpY2F0aW9ucyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRW5hYmxlIG9yIGRpc2FibGUgcHVzaCBub3RpZmljYXRpb25zIn0KICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7InRydWUifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IlRoZW1lIE1vZGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlN3aXRjaCBiZXR3ZWVuIGxpZ2h0IGFuZCBkYXJrIHRoZW1lIn0KICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJEYXJrIn0KICAgICAgICAgIC5ib29sZWFuRmFsc2VOYW1lPSR7IkxpZ2h0In0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJEYXJrIn0KICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNldHRpbmdzIEdyaWQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Db25maWd1cmF0aW9uIG9wdGlvbnMgYXJyYW5nZWQgaW4gYSByZXNwb25zaXZlIGdyaWQgbGF5b3V0LjwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLWdyaWQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkF1dG8tU2F2ZSJ9CiAgICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgICAuYm9vbGVhblRydWVOYW1lPSR7IkVuYWJsZWQifQogICAgICAgICAgICAuYm9vbGVhbkZhbHNlTmFtZT0keyJEaXNhYmxlZCJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbmFibGVkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJMYW5ndWFnZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbmdsaXNoIiwiR2VybWFuIiwiRnJlbmNoIiwiU3BhbmlzaCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW5nbGlzaCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUXVhbGl0eSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJMb3ciLCJNZWRpdW0iLCJIaWdoIiwiVWx0cmEiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkhpZ2gifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IlByaXZhY3kifQogICAgICAgICAgICAudHlwZT0keyJib29sZWFuIn0KICAgICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJQcml2YXRlIn0KICAgICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiUHVibGljIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlByaXZhdGUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdGF0ZXMgJiBGb3JtIEludGVncmF0aW9uPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+RXhhbXBsZXMgb2YgZGlzYWJsZWQgc3RhdGVzIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gZm9ybXMuPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgIC5sYWJlbD0keyJBY2NvdW50IFR5cGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgc2V0dGluZyBpcyBsb2NrZWQifQogICAgICAgICAgLm9wdGlvbnM9JHtbIkZyZWUiLCJQcm8iLCJFbnRlcnByaXNlIl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW50ZXJwcmlzZSJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHshMH0KICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgIAogICAgICAgIDxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IlByb2plY3QgTmFtZSJ9IC5yZXF1aXJlZD0keyEwfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJWaXNpYmlsaXR5In0KICAgICAgICAgICAgLnR5cGU9JHsiYm9vbGVhbiJ9CiAgICAgICAgICAgIC5ib29sZWFuVHJ1ZU5hbWU9JHsiUHVibGljIn0KICAgICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiUHJpdmF0ZSJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJQcml2YXRlIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiTGljZW5zZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJNSVQiLCJBcGFjaGUgMi4wIiwiR1BMIHYzIiwiUHJvcHJpZXRhcnkiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1JVCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDtmZSgpO0JlKCk7dmFyIEtsPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0scGE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LGxFZT0oKCk9PntsZXQgdD1bY2UoImRlZXMtaW5wdXQtbXVsdGl0b2dnbGUiKV0sZSxhPVtdLHIsaT1YZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXSx2LHk9W10sdz1bXSxFLEM9W10sej1bXTt2YXIgUD1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IF89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCgpXSxmPVtEKCldLGQ9W0QoKV0sYj1bRCh7dHlwZTpBcnJheX0pXSx2PVtEKCldLEU9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxLbCh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InR5cGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJ0eXBlImluICQsZ2V0OiQ9PiQudHlwZSxzZXQ6KCQsSCk9PnskLnR5cGU9SH19LG1ldGFkYXRhOl99LHMsbCksS2wodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJib29sZWFuVHJ1ZU5hbWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJib29sZWFuVHJ1ZU5hbWUiaW4gJCxnZXQ6JD0+JC5ib29sZWFuVHJ1ZU5hbWUsc2V0OigkLEgpPT57JC5ib29sZWFuVHJ1ZU5hbWU9SH19LG1ldGFkYXRhOl99LGMsdSksS2wodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJib29sZWFuRmFsc2VOYW1lIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4iYm9vbGVhbkZhbHNlTmFtZSJpbiAkLGdldDokPT4kLmJvb2xlYW5GYWxzZU5hbWUsc2V0OigkLEgpPT57JC5ib29sZWFuRmFsc2VOYW1lPUh9fSxtZXRhZGF0YTpffSxoLGcpLEtsKHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToib3B0aW9ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+Im9wdGlvbnMiaW4gJCxnZXQ6JD0+JC5vcHRpb25zLHNldDooJCxIKT0+eyQub3B0aW9ucz1IfX0sbWV0YWRhdGE6X30seCxtKSxLbCh0aGlzLG51bGwsdix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkT3B0aW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4ic2VsZWN0ZWRPcHRpb24iaW4gJCxnZXQ6JD0+JC5zZWxlY3RlZE9wdGlvbixzZXQ6KCQsSCk9PnskLnNlbGVjdGVkT3B0aW9uPUh9fSxtZXRhZGF0YTpffSx5LHcpLEtsKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYm9vbFZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4iYm9vbFZhbHVlImluICQsZ2V0OiQ9PiQuYm9vbFZhbHVlLHNldDooJCxIKT0+eyQuYm9vbFZhbHVlPUh9fSxtZXRhZGF0YTpffSxDLHopLEtsKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOl99LG51bGwsYSksUD1yPWUudmFsdWUsXyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpffSl9c3RhdGljIGRlbW89bkZ0O3N0YXRpYyBkZW1vR3JvdXA9IklucHV0IjsjZT1wYSh0aGlzLHMsIm11bHRpIik7Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdHlwZShfKXt0aGlzLiNlPV99I3Q9KHBhKHRoaXMsbCkscGEodGhpcyxjLCJ0cnVlIikpO2dldCBib29sZWFuVHJ1ZU5hbWUoKXtyZXR1cm4gdGhpcy4jdH1zZXQgYm9vbGVhblRydWVOYW1lKF8pe3RoaXMuI3Q9X30jYT0ocGEodGhpcyx1KSxwYSh0aGlzLGgsImZhbHNlIikpO2dldCBib29sZWFuRmFsc2VOYW1lKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGJvb2xlYW5GYWxzZU5hbWUoXyl7dGhpcy4jYT1ffSNyPShwYSh0aGlzLGcpLHBhKHRoaXMseCxbXSkpO2dldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuI3J9c2V0IG9wdGlvbnMoXyl7dGhpcy4jcj1ffSNpPShwYSh0aGlzLG0pLHBhKHRoaXMseSwiIikpO2dldCBzZWxlY3RlZE9wdGlvbigpe3JldHVybiB0aGlzLiNpfXNldCBzZWxlY3RlZE9wdGlvbihfKXt0aGlzLiNpPV99I289KHBhKHRoaXMsdykscGEodGhpcyxDLCExKSk7Z2V0IGJvb2xWYWx1ZSgpe3JldHVybiB0aGlzLiNvfXNldCBib29sVmFsdWUoXyl7dGhpcy4jbz1ffWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLnR5cGU9PT0iYm9vbGVhbiI/dGhpcy5zZWxlY3RlZE9wdGlvbj09PXRoaXMuYm9vbGVhblRydWVOYW1lOnRoaXMuc2VsZWN0ZWRPcHRpb259c2V0IHZhbHVlKF8pe3RoaXMudHlwZT09PSJib29sZWFuIiYmdHlwZW9mIF89PSJib29sZWFuIj90aGlzLnNlbGVjdGVkT3B0aW9uPV8/dGhpcy5ib29sZWFuVHJ1ZU5hbWU6dGhpcy5ib29sZWFuRmFsc2VOYW1lOnRoaXMuc2VsZWN0ZWRPcHRpb249Xyx0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLmhhc1VwZGF0ZWQmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2V0SW5kaWNhdG9yKCl9KX1zdGF0aWMgc3R5bGVzPVt4ZSwuLi5YZS5iYXNlU3R5bGVzLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb25zIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMxODE4MWIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KTsKICAgICAgfQoKICAgICAgLm9wdGlvbiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweCAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAub3B0aW9uOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMxODE4MWIiLCIjZTRlNGU3Iil9OwogICAgICB9CgogICAgICAub3B0aW9uLnNlbGVjdGVkIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzYjgyZjYiLCIjNjBhNWZhIil9OwogICAgICB9CgogICAgICAuaW5kaWNhdG9yIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDhweCk7CiAgICAgICAgdG9wOiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CiAgICAgIAogICAgICAuaW5kaWNhdG9yLm5vLXRyYW5zaXRpb24gewogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5zZWxlY3Rpb25zIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLm9wdGlvbiB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmluZGljYXRvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMTEzLCAxMTMsIDEyMiwgMC4xNSkiLCJyZ2JhKDExMywgMTEzLCAxMjIsIDAuMTUpIil9OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5ib3giPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0aW9ucyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRpY2F0b3IiPjwvZGl2PgogICAgICAgICAgJHt0aGlzLm9wdGlvbnMubWFwKF89Pk1gPGRpdiBjbGFzcz0ib3B0aW9uICR7Xz09PXRoaXMuc2VsZWN0ZWRPcHRpb24/InNlbGVjdGVkIjoiIn0iIEBjbGljaz0keygpPT50aGlzLmhhbmRsZVNlbGVjdGlvbihfKX0+CiAgICAgICAgICAgICAgICAke199CiAgICAgICAgICAgICAgPC9kaXY+IGApfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy50eXBlPT09ImJvb2xlYW4iJiZ0aGlzLm9wdGlvbnMubGVuZ3RoPT09MCYmKHRoaXMub3B0aW9ucz1bdGhpcy5ib29sZWFuVHJ1ZU5hbWV8fCJ0cnVlIix0aGlzLmJvb2xlYW5GYWxzZU5hbWV8fCJmYWxzZSJdLHRoaXMuc2VsZWN0ZWRPcHRpb258fCh0aGlzLnNlbGVjdGVkT3B0aW9uPXRoaXMuYm9vbGVhbkZhbHNlTmFtZXx8ImZhbHNlIikpLCF0aGlzLnNlbGVjdGVkT3B0aW9uJiZ0aGlzLm9wdGlvbnMubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkT3B0aW9uPXRoaXMub3B0aW9uc1swXSl9YXN5bmMgZmlyc3RVcGRhdGVkKF8pe3N1cGVyLmZpcnN0VXBkYXRlZChfKSx0aGlzLnR5cGU9PT0iYm9vbGVhbiImJih0aGlzLm9wdGlvbnM9W3RoaXMuYm9vbGVhblRydWVOYW1lfHwidHJ1ZSIsdGhpcy5ib29sZWFuRmFsc2VOYW1lfHwiZmFsc2UiXSksYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSxkb2N1bWVudC5mb250cyYmYXdhaXQgZG9jdW1lbnQuZm9udHMucmVhZHksYXdhaXQgbmV3IFByb21pc2UoJD0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCQpKSx0aGlzLnNldEluZGljYXRvcigpfWFzeW5jIGhhbmRsZVNlbGVjdGlvbihfKXt0aGlzLmRpc2FibGVkfHwodGhpcy5zZWxlY3RlZE9wdGlvbj1fLHRoaXMucmVxdWVzdFVwZGF0ZSgpLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpLGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsdGhpcy5zZXRJbmRpY2F0b3IoKSl9aW5kaWNhdG9ySW5pdGlhbGl6ZWQ9KHBhKHRoaXMseiksITEpO2FzeW5jIHNldEluZGljYXRvcigpe2xldCBfPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuaW5kaWNhdG9yIiksJD10aGlzLm9wdGlvbnMuaW5kZXhPZih0aGlzLnNlbGVjdGVkT3B0aW9uKTtpZigkPT09LTF8fCFfKXtfJiYoXy5zdHlsZS5vcGFjaXR5PSIwIik7cmV0dXJufWxldCBIPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGAub3B0aW9uOm50aC1jaGlsZCgkeyQrMn0pYCk7XyYmSCYmKHRoaXMuaW5kaWNhdG9ySW5pdGlhbGl6ZWR8fChfLmNsYXNzTGlzdC5hZGQoIm5vLXRyYW5zaXRpb24iKSx0aGlzLmluZGljYXRvckluaXRpYWxpemVkPSEwLHNldFRpbWVvdXQoKCk9PntfLmNsYXNzTGlzdC5yZW1vdmUoIm5vLXRyYW5zaXRpb24iKX0sNTApKSxfLnN0eWxlLndpZHRoPWAke0guY2xpZW50V2lkdGh9cHhgLF8uc3R5bGUubGVmdD1gJHtILm9mZnNldExlZnR9cHhgLF8uc3R5bGUub3BhY2l0eT0iMSIpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMudHlwZT09PSJib29sZWFuIj90aGlzLnNlbGVjdGVkT3B0aW9uPT09dGhpcy5ib29sZWFuVHJ1ZU5hbWU6dGhpcy5zZWxlY3RlZE9wdGlvbn1zZXRWYWx1ZShfKXt0aGlzLnR5cGU9PT0iYm9vbGVhbiImJnR5cGVvZiBfPT0iYm9vbGVhbiI/dGhpcy5zZWxlY3RlZE9wdGlvbj1fP3RoaXMuYm9vbGVhblRydWVOYW1lfHwidHJ1ZSI6dGhpcy5ib29sZWFuRmFsc2VOYW1lfHwiZmFsc2UiOnRoaXMuc2VsZWN0ZWRPcHRpb249Xyx0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLmhhc1VwZGF0ZWQmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2V0SW5kaWNhdG9yKCl9KX1zdGF0aWN7cGEocixhKX19O3JldHVybiBQPXJ9KSgpO2ZlKCk7dmFyIGxGdD0oKT0+TWAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHt0ZWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmhvcml6b250YWwtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgUGhvbmUgSW5wdXQifSAuc3VidGl0bGU9JHsiQXV0b21hdGljIGZvcm1hdHRpbmcgZm9yIHBob25lIG51bWJlcnMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgIC5sYWJlbD0keyJQaG9uZSBOdW1iZXIifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJFbnRlciB5b3VyIHBob25lIG51bWJlciB3aXRoIGNvdW50cnkgY29kZSJ9CiAgICAgICAgICAudmFsdWU9JHsiNTU1MTIzNDU2NyJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgIC5sYWJlbD0keyJDb250YWN0IFBob25lIn0gCiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiUmVxdWlyZWQgZm9yIGFjY291bnQgdmVyaWZpY2F0aW9uIn0KICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IisxICg1NTUpIDAwMC0wMDAwIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSG9yaXpvbnRhbCBMYXlvdXQifSAuc3VidGl0bGU9JHsiUGhvbmUgaW5wdXRzIGFycmFuZ2VkIGhvcml6b250YWxseSJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUgCiAgICAgICAgICAgIC5sYWJlbD0keyJNb2JpbGUifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0keyI0MTU1NTUxMjM0In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgICAubGFiZWw9JHsiT2ZmaWNlIn0gCiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiKzEgKDgwMCkgNTU1LTAwMDAifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkludGVybmF0aW9uYWwgTnVtYmVycyJ9IC5zdWJ0aXRsZT0keyJTdXBwb3J0cyBmb3JtYXR0aW5nIGZvciBudW1iZXJzIHdpdGggY291bnRyeSBjb2RlcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgLmxhYmVsPSR7IkludGVybmF0aW9uYWwgQ29udGFjdCJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkF1dG9tYXRpY2FsbHkgZm9ybWF0cyBpbnRlcm5hdGlvbmFsIG51bWJlcnMifQogICAgICAgICAgLnZhbHVlPSR7IjQ0MTIzNDU2Nzg5MCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgIC5sYWJlbD0keyJFbWVyZ2VuY3kgQ29udGFjdCJ9IAogICAgICAgICAgLnZhbHVlPSR7IjkxMSJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHshMH0KICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJQaG9uZSBpbnB1dCBhcyBwYXJ0IG9mIGEgY29udGFjdCBmb3JtIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkZ1bGwgTmFtZSJ9IC5yZXF1aXJlZD0keyEwfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lIC5sYWJlbD0keyJQaG9uZSBOdW1iZXIifSAucmVxdWlyZWQ9JHshMH0+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiRW1haWwifSAuaW5wdXRUeXBlPSR7ImVtYWlsIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDtmZSgpO1N0KCk7QmUoKTt2YXIgZWo9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxKbD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sY0VlPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1pbnB1dC1waG9uZSIpXSxlLGE9W10scixpPVhlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdO3ZhciBiPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgeD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtsZSgpXSxmPVtEKHt0eXBlOlN0cmluZ30pXSxkPVtEKHt0eXBlOlN0cmluZ30pXSxlaih0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImZvcm1hdHRlZFBob25lIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4iZm9ybWF0dGVkUGhvbmUiaW4gbSxnZXQ6bT0+bS5mb3JtYXR0ZWRQaG9uZSxzZXQ6KG0sdik9PnttLmZvcm1hdHRlZFBob25lPXZ9fSxtZXRhZGF0YTp4fSxzLGwpLGVqKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJ2YWx1ZSJpbiBtLGdldDptPT5tLnZhbHVlLHNldDoobSx2KT0+e20udmFsdWU9dn19LG1ldGFkYXRhOnh9LGMsdSksZWoodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwbGFjZWhvbGRlciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+InBsYWNlaG9sZGVyImluIG0sZ2V0Om09Pm0ucGxhY2Vob2xkZXIsc2V0OihtLHYpPT57bS5wbGFjZWhvbGRlcj12fX0sbWV0YWRhdGE6eH0saCxnKSxlaihudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTp4fSxudWxsLGEpLGI9cj1lLnZhbHVlLHgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6eH0pfXN0YXRpYyBkZW1vPWxGdDtzdGF0aWMgZGVtb0dyb3VwPSJJbnB1dCI7I2U9SmwodGhpcyxzLCIiKTtnZXQgZm9ybWF0dGVkUGhvbmUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgZm9ybWF0dGVkUGhvbmUoeCl7dGhpcy4jZT14fSN0PShKbCh0aGlzLGwpLEpsKHRoaXMsYywiIikpO2dldCB2YWx1ZSgpe3JldHVybiB0aGlzLiN0fXNldCB2YWx1ZSh4KXt0aGlzLiN0PXh9I2E9KEpsKHRoaXMsdSksSmwodGhpcyxoLCIrMSAoNTU1KSAxMjMtNDU2NyIpKTtnZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy4jYX1zZXQgcGxhY2Vob2xkZXIoeCl7dGhpcy4jYT14fXN0YXRpYyBzdHlsZXM9W3hlLC4uLlhlLmJhc2VTdHlsZXMscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAvKiBQaG9uZSBpbnB1dCBzcGVjaWZpYyBzdHlsZXMgY2FuIGdvIGhlcmUgKi8KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgLnZhbHVlPSR7dGhpcy5mb3JtYXR0ZWRQaG9uZX0KICAgICAgICAgIC5kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7dGhpcy5wbGFjZWhvbGRlcn0KICAgICAgICAgIEBpbnB1dD0ke3g9PnRoaXMuaGFuZGxlUGhvbmVJbnB1dCh4KX0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgIDwvZGl2PgogICAgYH1maXJzdFVwZGF0ZWQoeCl7c3VwZXIuZmlyc3RVcGRhdGVkKHgpLHRoaXMudmFsdWUmJih0aGlzLmZvcm1hdHRlZFBob25lPXRoaXMuZm9ybWF0UGhvbmVOdW1iZXIodGhpcy52YWx1ZSkpO2xldCBtPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKTttJiZtLmNoYW5nZVN1YmplY3QmJm0uY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKX0pfWhhbmRsZVBob25lSW5wdXQoeCl7bGV0IG09eC50YXJnZXQsdj10aGlzLmNsZWFuUGhvbmVOdW1iZXIobS52YWx1ZSkseT10aGlzLmZvcm1hdFBob25lTnVtYmVyKHYpO2lmKG0udmFsdWUhPT15KXtsZXQgdz1tLnNlbGVjdGlvblN0YXJ0fHwwO20udmFsdWU9eTtsZXQgRT10aGlzLmNhbGN1bGF0ZUN1cnNvclBvc2l0aW9uKHYseSx3KTttLnNldFNlbGVjdGlvblJhbmdlKEUsRSl9dGhpcy5mb3JtYXR0ZWRQaG9uZT15LHRoaXMudmFsdWU9dix0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKX1jbGVhblBob25lTnVtYmVyKHgpe3JldHVybiB4LnJlcGxhY2UoL1xEL2csIiIpfWZvcm1hdFBob25lTnVtYmVyKHgpe2xldCBtPXRoaXMuY2xlYW5QaG9uZU51bWJlcih4KTtyZXR1cm4gbS5sZW5ndGg9PT0wPyIiOm0ubGVuZ3RoPD0zP206bS5sZW5ndGg8PTY/YCgke20uc2xpY2UoMCwzKX0pICR7bS5zbGljZSgzKX1gOm0ubGVuZ3RoPD0xMD9gKCR7bS5zbGljZSgwLDMpfSkgJHttLnNsaWNlKDMsNil9LSR7bS5zbGljZSg2KX1gOmArJHttLnNsaWNlKDAsbS5sZW5ndGgtMTApfSAoJHttLnNsaWNlKC0xMCwtNyl9KSAke20uc2xpY2UoLTcsLTQpfS0ke20uc2xpY2UoLTQpfWB9Y2FsY3VsYXRlQ3Vyc29yUG9zaXRpb24oeCxtLHYpe2xldCB5PTA7Zm9yKGxldCB3PTA7dzx2JiZ3PG0ubGVuZ3RoO3crKykvXGQvLnRlc3QobVt3XSl8fHkrKztyZXR1cm4gTWF0aC5taW4odit5LG0ubGVuZ3RoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKHgpe3RoaXMudmFsdWU9eCx0aGlzLmZvcm1hdHRlZFBob25lPXRoaXMuZm9ybWF0UGhvbmVOdW1iZXIoeCl9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLEpsKHRoaXMsZyl9c3RhdGlje0psKHIsYSl9fTtyZXR1cm4gYj1yfSkoKTtmZSgpO3ZhciBjRnQ9KCk9Pk1gCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7dGVgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmluZm8tYm94IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2UzZjJmZDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjMTk3NmQyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAuaW5mby1ib3ggewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWUzYTVmOwogICAgICAgICAgICBjb2xvcjogIzkwY2FmOTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBUeXBlIExpc3QifSAuc3VidGl0bGU9JHsiQWRkIGFuZCByZW1vdmUgaXRlbXMgZnJvbSBhIGxpc3QifT4KICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlRhZ3MifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCB0YWdzIGJ5IHR5cGluZyBhbmQgcHJlc3NpbmcgRW50ZXIifQogICAgICAgICAgLnZhbHVlPSR7WyJqYXZhc2NyaXB0IiwidHlwZXNjcmlwdCIsIndlYi1jb21wb25lbnRzIl19CiAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlRlYW0gTWVtYmVycyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGVtYWlsIGFkZHJlc3NlcyBvZiB0ZWFtIG1lbWJlcnMifQogICAgICAgICAgLnZhbHVlPSR7WyJhbGljZUBleGFtcGxlLmNvbSIsImJvYkBleGFtcGxlLmNvbSJdfQogICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTa2lsbHMgJiBLZXl3b3JkcyJ9IC5zdWJ0aXRsZT0keyJNYW5hZ2UgbGlzdHMgb2Ygc2tpbGxzIGFuZCBrZXl3b3JkcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAubGFiZWw9JHsiWW91ciBTa2lsbHMifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ikxpc3QgeW91ciBwcm9mZXNzaW9uYWwgc2tpbGxzIn0KICAgICAgICAgIC52YWx1ZT0ke1siSFRNTCIsIkNTUyIsIkphdmFTY3JpcHQiLCJOb2RlLmpzIiwiUmVhY3QiXX0KICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IkNhdGVnb3JpZXMifQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnZhbHVlPSR7WyJUZWNobm9sb2d5IiwiRGVzaWduIiwiQnVzaW5lc3MiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJLZXl3b3JkcyJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHtbImlubm92YXRpb24iLCJzdGFydHVwIiwiZ3Jvd3RoIl19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUmVxdWlyZWQgJiBEaXNhYmxlZCBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGlucHV0IHN0YXRlcyBmb3IgdmFsaWRhdGlvbiJ9PgogICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAubGFiZWw9JHsiUHJvamVjdCBEZXBlbmRlbmNpZXMifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ikxpc3QgYWxsIHJlcXVpcmVkIG5wbSBwYWNrYWdlcyJ9CiAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgIC52YWx1ZT0ke1siQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50IiwiQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scyJdfQogICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJTeXN0ZW0gVGFncyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhlc2UgdGFncyBhcmUgbWFuYWdlZCBieSB0aGUgc3lzdGVtIn0KICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgLnZhbHVlPSR7WyJzeXN0ZW0iLCJwcm90ZWN0ZWQiLCJyZWFkb25seSJdfQogICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJBcnRpY2xlIFB1Ymxpc2hpbmcgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBmb3JtIHdpdGggdGFnIG1hbmFnZW1lbnQifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQXJ0aWNsZSBUaXRsZSJ9IC5yZXF1aXJlZD0keyEwfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJTdW1tYXJ5In0gCiAgICAgICAgICAgIC5pbnB1dFR5cGU9JHsidGV4dGFyZWEifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGFydGljbGUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IlRhZ3MifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIHJlbGV2YW50IHRhZ3MgZm9yIGJldHRlciBkaXNjb3ZlcmFiaWxpdHkifQogICAgICAgICAgICAudmFsdWU9JHtbInR1dG9yaWFsIiwid2ViLWRldmVsb3BtZW50Il19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IkNvLUF1dGhvcnMifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGVtYWlsIGFkZHJlc3NlcyBvZiBjby1hdXRob3JzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1ib3giPgogICAgICAgICAgPHN0cm9uZz5UaXA6PC9zdHJvbmc+IFR5cGUgYSB2YWx1ZSBhbmQgcHJlc3MgRW50ZXIgdG8gYWRkIGl0IHRvIHRoZSBsaXN0LiBDbGljayBvbiBhbnkgaXRlbSB0byByZW1vdmUgaXQuCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDtmZSgpO1N0KCk7QmUoKTt2YXIgZEVlPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sYkk9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LGZFZT0oKCk9PntsZXQgdD1bY2UoImRlZXMtaW5wdXQtdHlwZWxpc3QiKV0sZSxhPVtdLHIsaT1YZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXTt2YXIgZD1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGg9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpBcnJheX0pXSxmPVtsZSgpXSxkRWUodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+InZhbHVlImluIGcsZ2V0Omc9PmcudmFsdWUsc2V0OihnLGIpPT57Zy52YWx1ZT1ifX0sbWV0YWRhdGE6aH0scyxsKSxkRWUodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpbnB1dFZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4iaW5wdXRWYWx1ZSJpbiBnLGdldDpnPT5nLmlucHV0VmFsdWUsc2V0OihnLGIpPT57Zy5pbnB1dFZhbHVlPWJ9fSxtZXRhZGF0YTpofSxjLHUpLGRFZShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpofSxudWxsLGEpLGQ9cj1lLnZhbHVlLGgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6aH0pfXN0YXRpYyBkZW1vPWNGdDtzdGF0aWMgZGVtb0dyb3VwPSJJbnB1dCI7I2U9YkkodGhpcyxzLFtdKTtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdmFsdWUoaCl7dGhpcy4jZT1ofSN0PShiSSh0aGlzLGwpLGJJKHRoaXMsYywiIikpO2dldCBpbnB1dFZhbHVlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGlucHV0VmFsdWUoaCl7dGhpcy4jdD1ofXN0YXRpYyBzdHlsZXM9W3hlLC4uLlhlLmJhc2VTdHlsZXMscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzIiwiI2ZmZiIpfTsKICAgICAgfQogICAgICAubWFpbmJveCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmFmYWZhIiwiIzIyMjIyMiIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJvcmRlci10b3A6ICR7cC5iZFRoZW1lKCIxcHggc29saWQgI0NDQyIsIjFweCBzb2xpZCAjZmZmZmZmMTAiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogJHtwLmJkVGhlbWUoIjFweCBzb2xpZCAjQ0NDIiwiMXB4IHNvbGlkICMyMjIiKX07CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAke3AuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCIxcHggc29saWQgI2ZmZmZmZjEwIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiAke3AuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCIxcHggc29saWQgI2ZmZmZmZjEwIil9OwogICAgICAgIGJveC1zaGFkb3c6ICR7cC5iZFRoZW1lKCIwcHggMXB4IDRweCByZ2JhKDAsMCwwLDAuMykiLCJub25lIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6aG92ZXIgewogICAgICAgIGZpbHRlcjogJHtwLmJkVGhlbWUoImJyaWdodG5lc3MoMC45OCkiLCJicmlnaHRuZXNzKDEuMDUpIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFpbmJveDpmb2N1cy13aXRoaW4gewogICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCAke3AuYmRUaGVtZSgiIzAwNjlmMiIsIiMwMDg0ZmYiKX07CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7CiAgICAgIH0KCiAgICAgIC50YWdzIHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLm5vdGFncyB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzk5OSIsIiM2NjYiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmNWY1ZjUiLCIjMTgxODE4Iil9OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIHBhZGRpbmc6IDBweCAxNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAwcHg7CiAgICAgICAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuMnM7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTBlMGUwIiwiIzMzMyIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6Zm9jdXMgewogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZhZmFmYSIsIiMxYTFhMWEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjOTk5IiwiIzY2NiIpfTsKICAgICAgfQoKICAgICAgLnRhZyB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZThmNWU5IiwiIzJkM2EyZCIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMyZTdkMzIiLCIjODFjNzg0Iil9OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW46IDNweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2M4ZTZjOSIsIiMxYjVlMjAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC50YWc6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjYzhlNmM5IiwiIzNkNGYzZCIpfTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICAgIH0KCiAgICAgIC50YWcgLnJlbW92ZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgfQoKICAgICAgLnRhZyAucmVtb3ZlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiI2M2MjgyOCIsIiNlZjUzNTAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIERpc2FibGVkIHN0YXRlICovCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5tYWluYm94IHsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRhZ3MgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50YWcgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZGlzYWJsZWRdKSBpbnB1dCB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2YwZjBmMCIsIiMxYTFhMWEiKX07CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWdzIiBAY2xpY2s9JHsoKT0+e3RoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLmZvY3VzKCl9fT4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlLmxlbmd0aD09PTA/TWA8ZGl2IGNsYXNzPSJub3RhZ3MiPk5vIHRhZ3MgeWV0PC9kaXY+YDp0aGlzLnZhbHVlLm1hcChoPT5NYAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWciPgogICAgICAgICAgICAgICAgICAgICAgJHtofQogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJlbW92ZSIgQGNsaWNrPSR7Zz0+e2cuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5yZW1vdmVUYWcoaCl9fT7Dlzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9IlR5cGUsIHByZXNzIEVudGVyIHRvIGFkZCBpdC4uLiIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pbnB1dFZhbHVlfQogICAgICAgICAgICBAaW5wdXQ9JHtoPT57dGhpcy5pbnB1dFZhbHVlPWgudGFyZ2V0LnZhbHVlfX0KICAgICAgICAgICAgQGtleWRvd249JHtoPT57aC5rZXk9PT0iRW50ZXIiJiZ0aGlzLmlucHV0VmFsdWUudHJpbSgpJiYoaC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWRkVGFnKHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpKX19CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAvPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9YWRkVGFnKGgpe3RoaXMudmFsdWUuaW5jbHVkZXMoaCl8fCh0aGlzLnZhbHVlPVsuLi50aGlzLnZhbHVlLGhdLHRoaXMuaW5wdXRWYWx1ZT0iIix0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSl9cmVtb3ZlVGFnKGgpe3RoaXMudmFsdWU9dGhpcy52YWx1ZS5maWx0ZXIoZz0+ZyE9PWgpLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9c2V0VmFsdWUoaCl7dGhpcy52YWx1ZT1ofWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxiSSh0aGlzLHUpfXN0YXRpY3tiSShyLGEpfX07cmV0dXJuIGQ9cn0pKCk7ZmUoKTt2YXIgZEZ0PSgpPT5NYAogIDxzdHlsZT4KICAgICR7dGVgCiAgICAgIC5kZW1vV3JhcHBlciB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCJoc2woMCAwJSA1JSkiKX07CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDQ4cHg7CiAgICAgIH0KICAgICAgLmRlbW8tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KICAgICAgLmRlbW8tZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIC50aGVtZS10b2dnbGUgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDE2cHg7CiAgICAgICAgcmlnaHQ6IDE2cHg7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9XcmFwcGVyIj4KICAgIDxkZWVzLWJ1dHRvbiBjbGFzcz0idGhlbWUtdG9nZ2xlIiBAY2xpY2s9JHsoKT0+e2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiYnJpZ2h0IiksZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrIil9fT5Ub2dnbGUgVGhlbWU8L2RlZXMtYnV0dG9uPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5CYXNpYyBUYWJsZSB3aXRoIEFjdGlvbnM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5BIHN0YW5kYXJkIHRhYmxlIHdpdGggcm93IGFjdGlvbnMsIGVkaXRhYmxlIGZpZWxkcywgYW5kIGNvbnRleHQgbWVudSBzdXBwb3J0LiBEb3VibGUtY2xpY2sgb24gZGVzY3JpcHRpb25zIHRvIGVkaXQuIEdyaWQgbGluZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJDdXJyZW50IEFjY291bnQgU3RhdGVtZW50IgogICAgICAgICAgaGVhZGluZzI9IkJ1bnEgLSBQYXltZW50IEFjY291bnQgMiAtIEFwcmlsIDIwMjEiCiAgICAgICAgICAuZWRpdGFibGVGaWVsZHM9IiR7WyJkZXNjcmlwdGlvbiJdfSIKICAgICAgICAgIC5kYXRhPSR7W3tkYXRlOiIyMDIxLTA0LTAxIixhbW91bnQ6IjI0NjQuNjUgXHUyMEFDIixkZXNjcmlwdGlvbjoiUHJpbnRpbmcgUGFwZXIgKE9mZmljZSBTdXBwbGllcykgLSBTVEFQTEVTIEJSRU1FTiJ9LHtkYXRlOiIyMDIxLTA0LTAyIixhbW91bnQ6IjE2NS42NSBcdTIwQUMiLGRlc2NyaXB0aW9uOiJMb2dpdGVjaCBNb3VzZSAoSGFyZHdhcmUpIC0gbG9naS5jb20gT25saW5lU2hvcCJ9LHtkYXRlOiIyMDIxLTA0LTAzIixhbW91bnQ6IjI5OTksMDAgXHUyMEFDIixkZXNjcmlwdGlvbjoiTWFjYm9vayBQcm8gMTZpbmNoIChIYXJkd2FyZSkgLSBBcHBsZS5kZSBPbmxpbmVTaG9wIn0se2RhdGU6IjIwMjEtMDQtMDEiLGFtb3VudDoiMjQ2NC42NSBcdTIwQUMiLGRlc2NyaXB0aW9uOiJPZmZpY2UtU3VwcGxpZXMgLSBTVEFQTEVTIEJSRU1FTiJ9LHtkYXRlOiIyMDIxLTA0LTAxIixhbW91bnQ6IjI0NjQuNjUgXHUyMEFDIixkZXNjcmlwdGlvbjoiT2ZmaWNlLVN1cHBsaWVzIC0gU1RBUExFUyBCUkVNRU4ifV19CiAgICAgICAgICBkYXRhTmFtZT0idHJhbnNhY3Rpb25zIgogICAgICAgICAgLmRhdGFBY3Rpb25zPSIke1t7bmFtZToidXBsb2FkIixpY29uTmFtZToiYmVsbCIsdXNlVGFibGVCZWhhdmlvdXI6InVwbG9hZCIsdHlwZTpbImluUm93Il0sYWN0aW9uRnVuYzphc3luYyB0PT57YWxlcnQodC5pdGVtLmFtb3VudCl9fSx7bmFtZToidmlzaWJpbGl0eSIsaWNvbk5hbWU6ImNvcHkiLHR5cGU6WyJpblJvdyJdLHVzZVRhYmxlQmVoYXZpb3VyOiJwcmV2aWV3IixhY3Rpb25GdW5jOmFzeW5jIHQ9Pnt9fSx7bmFtZToiY3JlYXRlIG5ldyIsaWNvbk5hbWU6Imluc3RhZ3JhbSIsdHlwZTpbImhlYWRlciJdLHVzZVRhYmxlQmVoYXZpb3VyOiJwcmV2aWV3IixhY3Rpb25GdW5jOmFzeW5jIHQ9Pnt9fSx7bmFtZToidG8gZ2FsbGVyeSIsaWNvbk5hbWU6Im1lc3NhZ2UiLHR5cGU6WyJmb290ZXIiXSx1c2VUYWJsZUJlaGF2aW91cjoicHJldmlldyIsYWN0aW9uRnVuYzphc3luYyB0PT57fX0se25hbWU6ImNvcHkiLGljb25OYW1lOiJjb3B5U29saWQiLHR5cGU6WyJjb250ZXh0bWVudSIsImluUm93Il0sYWN0aW9uOmFzeW5jKCk9Pm51bGx9LHtuYW1lOiJlZGl0IChmcm9tIGRlbW8pIixpY29uTmFtZToicGVuVG9TcXVhcmUiLHR5cGU6WyJjb250ZXh0bWVudSJdLGFjdGlvbjphc3luYygpPT5udWxsfSx7bmFtZToicGFzdGUiLGljb25OYW1lOiJwYXN0ZVNvbGlkIix0eXBlOlsiY29udGV4dG1lbnUiXSxhY3Rpb246YXN5bmMoKT0+bnVsbH0se25hbWU6InByZXZpZXciLHR5cGU6WyJkb3VibGVDbGljayIsImNvbnRleHRtZW51Il0saWNvbk5hbWU6ImV5ZSIsYWN0aW9uRnVuYzphc3luYyB0PT4oYWxlcnQodC5pdGVtLmFtb3VudCksbnVsbCl9XX0iCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBWZXJ0aWNhbCBMaW5lczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkVuaGFuY2VkIGNvbHVtbiBzZXBhcmF0aW9uIGZvciBiZXR0ZXIgZGF0YSB0cmFja2luZy48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJQcm9kdWN0IEludmVudG9yeSIKICAgICAgICAgIGhlYWRpbmcyPSJDdXJyZW50IHN0b2NrIGxldmVscyBhY3Jvc3Mgd2FyZWhvdXNlcyIKICAgICAgICAgIC5zaG93VmVydGljYWxMaW5lcz0keyEwfQogICAgICAgICAgLmRhdGE9JHtbe3Byb2R1Y3Q6J01hY0Jvb2sgUHJvIDE2Iicsd2FyZWhvdXNlX2E6IjQ1Iix3YXJlaG91c2VfYjoiMzIiLHdhcmVob3VzZV9jOiIyOCIsdG90YWw6IjEwNSIsc3RhdHVzOiJcdTI3MTMgSW4gU3RvY2sifSx7cHJvZHVjdDoiaVBob25lIDE1IFBybyIsd2FyZWhvdXNlX2E6IjEyMCIsd2FyZWhvdXNlX2I6Ijg5Iix3YXJlaG91c2VfYzoiMTU2Iix0b3RhbDoiMzY1IixzdGF0dXM6Ilx1MjcxMyBJbiBTdG9jayJ9LHtwcm9kdWN0OiJBaXJQb2RzIFBybyIsd2FyZWhvdXNlX2E6IjAiLHdhcmVob3VzZV9iOiIxMiIsd2FyZWhvdXNlX2M6IjUiLHRvdGFsOiIxNyIsc3RhdHVzOiJcdTI2QTAgTG93IFN0b2NrIn0se3Byb2R1Y3Q6ImlQYWQgQWlyIix3YXJlaG91c2VfYToiMjMiLHdhcmVob3VzZV9iOiI0NSIsd2FyZWhvdXNlX2M6IjY3Iix0b3RhbDoiMTM1IixzdGF0dXM6Ilx1MjcxMyBJbiBTdG9jayJ9XX0KICAgICAgICAgIGRhdGFOYW1lPSJwcm9kdWN0cyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5UYWJsZSB3aXRoIEZ1bGwgR3JpZDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkNvbXBsZXRlIGdyaWQgbGluZXMgZm9yIG1heGltdW0gcmVhZGFiaWxpdHkgYW5kIHN0cnVjdHVyZS48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJTZXJ2ZXIgTW9uaXRvcmluZyBEYXNoYm9hcmQiCiAgICAgICAgICBoZWFkaW5nMj0iUmVhbC10aW1lIG1ldHJpY3MgYWNyb3NzIHJlZ2lvbnMiCiAgICAgICAgICAuc2hvd0dyaWQ9JHshMH0KICAgICAgICAgIC5kYXRhPSR7W3tzZXJ2ZXI6IkFQSS0xIixyZWdpb246IlVTLUVhc3QiLGNwdToiNDUlIixtZW1vcnk6IjYyJSIsZGlzazoiNzglIixsYXRlbmN5OiIxMm1zIix1cHRpbWU6Ijk5LjklIixzdGF0dXM6Ilx1ezFGN0UyfSBIZWFsdGh5In0se3NlcnZlcjoiQVBJLTIiLHJlZ2lvbjoiRVUtV2VzdCIsY3B1OiIzOCUiLG1lbW9yeToiNTUlIixkaXNrOiI0NSUiLGxhdGVuY3k6IjI1bXMiLHVwdGltZToiOTkuOCUiLHN0YXR1czoiXHV7MUY3RTJ9IEhlYWx0aHkifSx7c2VydmVyOiJEQi1NYXN0ZXIiLHJlZ2lvbjoiVVMtRWFzdCIsY3B1OiI3MiUiLG1lbW9yeToiODElIixkaXNrOiI5MiUiLGxhdGVuY3k6IjhtcyIsdXB0aW1lOiIxMDAlIixzdGF0dXM6Ilx1ezFGN0UxfSBXYXJuaW5nIn0se3NlcnZlcjoiREItUmVwbGljYSIscmVnaW9uOiJFVS1XZXN0IixjcHU6IjIzJSIsbWVtb3J5OiIzNCUiLGRpc2s6IjQ1JSIsbGF0ZW5jeToiMTVtcyIsdXB0aW1lOiI5OS43JSIsc3RhdHVzOiJcdXsxRjdFMn0gSGVhbHRoeSJ9LHtzZXJ2ZXI6IkNhY2hlLTEiLHJlZ2lvbjoiQVAtU291dGgiLGNwdToiODklIixtZW1vcnk6IjkyJSIsZGlzazoiMTIlIixsYXRlbmN5OiIxMjBtcyIsdXB0aW1lOiI5OC41JSIsc3RhdHVzOiJcdXsxRjUzNH0gQ3JpdGljYWwifV19CiAgICAgICAgICBkYXRhTmFtZT0ic2VydmVycyIKICAgICAgICAgIC5kYXRhQWN0aW9ucz0iJHtbe25hbWU6IlNTSCBDb25uZWN0IixpY29uTmFtZToibHVjaWRlOnRlcm1pbmFsIix0eXBlOlsiaW5Sb3ciXSxhY3Rpb25GdW5jOmFzeW5jIHQ9Pntjb25zb2xlLmxvZygiQ29ubmVjdGluZyB0bzoiLHQuaXRlbS5zZXJ2ZXIpfX0se25hbWU6IlZpZXcgTG9ncyIsaWNvbk5hbWU6Imx1Y2lkZTpmaWxlLXRleHQiLHR5cGU6WyJpblJvdyIsImNvbnRleHRtZW51Il0sYWN0aW9uRnVuYzphc3luYyB0PT57Y29uc29sZS5sb2coIlZpZXdpbmcgbG9ncyBmb3I6Iix0Lml0ZW0uc2VydmVyKX19LHtuYW1lOiJSZXN0YXJ0IFNlcnZlciIsaWNvbk5hbWU6Imx1Y2lkZTpyZWZyZXNoLWN3Iix0eXBlOlsiY29udGV4dG1lbnUiXSxhY3Rpb25GdW5jOmFzeW5jIHQ9Pntjb25zb2xlLmxvZygiUmVzdGFydGluZzoiLHQuaXRlbS5zZXJ2ZXIpfX1dfSIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5UYWJsZSB3aXRoIEhvcml6b250YWwgTGluZXMgT25seTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkVtcGhhc2lzIG9uIHJvdyBzZXBhcmF0aW9uIHdpdGhvdXQgY29sdW1uIGRpdmlkZXJzLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlNhbGVzIFBlcmZvcm1hbmNlIgogICAgICAgICAgaGVhZGluZzI9IlRvcCBwZXJmb3JtZXJzIHRoaXMgcXVhcnRlciIKICAgICAgICAgIC5zaG93SG9yaXpvbnRhbExpbmVzPSR7ITB9CiAgICAgICAgICAuc2hvd1ZlcnRpY2FsTGluZXM9JHshMX0KICAgICAgICAgIC5kYXRhPSR7W3tzYWxlc3BlcnNvbjoiRW1pbHkgSm9obnNvbiIscmVnaW9uOiJOb3J0aCBBbWVyaWNhIixkZWFsc19jbG9zZWQ6IjQyIixyZXZlbnVlOiIkMS4yTSIscXVvdGFfYWNoaWV2ZW1lbnQ6IjEyOCUiLHJhdGluZzoiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIn0se3NhbGVzcGVyc29uOiJNaWNoYWVsIENoZW4iLHJlZ2lvbjoiQXNpYSBQYWNpZmljIixkZWFsc19jbG9zZWQ6IjM4IixyZXZlbnVlOiIkOTgwSyIscXVvdGFfYWNoaWV2ZW1lbnQ6IjExNSUiLHJhdGluZzoiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIn0se3NhbGVzcGVyc29uOiJTYXJhaCBXaWxsaWFtcyIscmVnaW9uOiJFdXJvcGUiLGRlYWxzX2Nsb3NlZDoiMzUiLHJldmVudWU6IiQ4NzVLIixxdW90YV9hY2hpZXZlbWVudDoiMTA4JSIscmF0aW5nOiJcdTJCNTBcdTJCNTBcdTJCNTBcdTJCNTAifSx7c2FsZXNwZXJzb246IkRhdmlkIEdhcmNpYSIscmVnaW9uOiJMYXRpbiBBbWVyaWNhIixkZWFsc19jbG9zZWQ6IjMxIixyZXZlbnVlOiIkNzUwSyIscXVvdGFfYWNoaWV2ZW1lbnQ6Ijk1JSIscmF0aW5nOiJcdTJCNTBcdTJCNTBcdTJCNTBcdTJCNTAifV19CiAgICAgICAgICBkYXRhTmFtZT0ic2FsZXMgcmVwcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5TaW1wbGUgVGFibGUgKE5vIEdyaWQpPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+Q2xlYW4sIG1pbmltYWwgZGVzaWduIHdpdGhvdXQgZ3JpZCBsaW5lcy4gU2V0IHNob3dHcmlkIHRvIGZhbHNlIHRvIGRpc2FibGUgdGhlIGRlZmF1bHQgZ3JpZC48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJUZWFtIE1lbWJlcnMiCiAgICAgICAgICBoZWFkaW5nMj0iRW5naW5lZXJpbmcgRGVwYXJ0bWVudCIKICAgICAgICAgIC5zaG93R3JpZD0keyExfQogICAgICAgICAgLmRhdGE9JHtbe25hbWU6IkFsaWNlIEpvaG5zb24iLHJvbGU6IkxlYWQgRW5naW5lZXIiLGVtYWlsOiJhbGljZUBjb21wYW55LmNvbSIsbG9jYXRpb246IlNhbiBGcmFuY2lzY28iLGpvaW5lZDoiMjAyMC0wMy0xNSJ9LHtuYW1lOiJCb2IgU21pdGgiLHJvbGU6IlNlbmlvciBEZXZlbG9wZXIiLGVtYWlsOiJib2JAY29tcGFueS5jb20iLGxvY2F0aW9uOiJOZXcgWW9yayIsam9pbmVkOiIyMDE5LTA3LTIyIn0se25hbWU6IkNoYXJsaWUgRGF2aXMiLHJvbGU6IkRldk9wcyBFbmdpbmVlciIsZW1haWw6ImNoYXJsaWVAY29tcGFueS5jb20iLGxvY2F0aW9uOiJMb25kb24iLGpvaW5lZDoiMjAyMS0wMS0xMCJ9LHtuYW1lOiJEaWFuYSBNYXJ0aW5leiIscm9sZToiRnJvbnRlbmQgRGV2ZWxvcGVyIixlbWFpbDoiZGlhbmFAY29tcGFueS5jb20iLGxvY2F0aW9uOiJCYXJjZWxvbmEiLGpvaW5lZDoiMjAyMi0wNS0xOCJ9XX0KICAgICAgICAgIGRhdGFOYW1lPSJ0ZWFtIG1lbWJlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBDdXN0b20gRGlzcGxheSBGdW5jdGlvbjwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlRyYW5zZm9ybSBkYXRhIGZvciBkaXNwbGF5IHVzaW5nIGN1c3RvbSBmb3JtYXR0aW5nLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlNhbGVzIFJlcG9ydCIKICAgICAgICAgIGhlYWRpbmcyPSJRNCAyMDIzIFBlcmZvcm1hbmNlIgogICAgICAgICAgLmRhdGE9JHtbe3Byb2R1Y3Q6IkVudGVycHJpc2UgTGljZW5zZSIsdW5pdHM6NDUscmV2ZW51ZToyMjVlMyxncm93dGg6LjIzLGZvcmVjYXN0OjI4ZTR9LHtwcm9kdWN0OiJQcm9mZXNzaW9uYWwgTGljZW5zZSIsdW5pdHM6MTI4LHJldmVudWU6MTI4ZTMsZ3Jvd3RoOi4xNSxmb3JlY2FzdDoxNDdlM30se3Byb2R1Y3Q6IlN0YXJ0ZXIgTGljZW5zZSIsdW5pdHM6MzQyLHJldmVudWU6Njg0MDAsZ3Jvd3RoOi40Mixmb3JlY2FzdDo5N2UzfV19CiAgICAgICAgICAuZGlzcGxheUZ1bmN0aW9uPSR7dD0+KHtQcm9kdWN0OnQucHJvZHVjdCwiVW5pdHMgU29sZCI6dC51bml0cy50b0xvY2FsZVN0cmluZygpLFJldmVudWU6IiQiK3QucmV2ZW51ZS50b0xvY2FsZVN0cmluZygpLEdyb3d0aDoodC5ncm93dGgqMTAwKS50b0ZpeGVkKDEpKyIlIiwiUTEgMjAyNCBGb3JlY2FzdCI6IiQiK3QuZm9yZWNhc3QudG9Mb2NhbGVTdHJpbmcoKX0pfQogICAgICAgICAgZGF0YU5hbWU9InByb2R1Y3RzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkVtcHR5IFRhYmxlIFN0YXRlPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+SG93IHRoZSB0YWJsZSBsb29rcyB3aGVuIG5vIGRhdGEgaXMgYXZhaWxhYmxlLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9Ik5vIERhdGEgQXZhaWxhYmxlIgogICAgICAgICAgaGVhZGluZzI9IlRoaXMgdGFibGUgaXMgY3VycmVudGx5IGVtcHR5IgogICAgICAgICAgLmRhdGE9JHtbXX0KICAgICAgICAgIGRhdGFOYW1lPSJpdGVtcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5TY2hlbWEtRmlyc3QgQ29sdW1ucyAoTmV3KTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkRlZmluZXMgY29sdW1ucyBleHBsaWNpdGx5IGFuZCByZW5kZXJzIHZpYSBzY2hlbWEuIE5vIGRpc3BsYXlGdW5jdGlvbiBuZWVkZWQuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iVXNlcnMgKFNjaGVtYS1GaXJzdCkiCiAgICAgICAgICBoZWFkaW5nMj0iQ29sdW1ucyBkZWZpbmUgcmVuZGVyaW5nIGFuZCBvcmRlciIKICAgICAgICAgIC5jb2x1bW5zPSR7W3trZXk6Im5hbWUiLGhlYWRlcjoiTmFtZSIsc29ydGFibGU6ITB9LHtrZXk6ImVtYWlsIixoZWFkZXI6IkVtYWlsIixyZW5kZXJlcjp0PT5NYDxkZWVzLWJhZGdlPiR7dH08L2RlZXMtYmFkZ2U+YH0se2tleToiam9pbmVkQXQiLGhlYWRlcjoiSm9pbmVkIixyZW5kZXJlcjp0PT5uZXcgRGF0ZSh0KS50b0xvY2FsZURhdGVTdHJpbmcoKX1dfQogICAgICAgICAgLmRhdGE9JHtbe25hbWU6IkFsaWNlIixlbWFpbDoiYWxpY2VAZXhhbXBsZS5jb20iLGpvaW5lZEF0OiIyMDIyLTA4LTAxIn0se25hbWU6IkJvYiIsZW1haWw6ImJvYkBleGFtcGxlLmNvbSIsam9pbmVkQXQ6IjIwMjEtMTItMTEifSx7bmFtZToiQ2Fyb2wiLGVtYWlsOiJjYXJvbEBleGFtcGxlLmNvbSIsam9pbmVkQXQ6IjIwMjMtMDMtMjIifV19CiAgICAgICAgICBkYXRhTmFtZT0idXNlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+UGFydGlhbCBTY2hlbWEgKyBBdWdtZW50IChOZXcpPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+UHJvdmlkZXMgb25seSB0aGUgaW1wb3J0YW50IGNvbHVtbnM7IHRoZSByZXN0IGFyZSBtZXJnZWQgaW4gZnJvbSBkaXNwbGF5RnVuY3Rpb24uPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iVXNlcnMgKFBhcnRpYWwgKyBBdWdtZW50KSIKICAgICAgICAgIGhlYWRpbmcyPSJNaXNzaW5nIGNvbHVtbnMgYXJlIGRlcml2ZWQiCiAgICAgICAgICAuY29sdW1ucz0ke1t7a2V5OiJuYW1lIixoZWFkZXI6Ik5hbWUiLHNvcnRhYmxlOiEwfV19CiAgICAgICAgICAuZGlzcGxheUZ1bmN0aW9uPSR7dD0+KHtuYW1lOnQubmFtZSxlbWFpbDp0LmVtYWlsLHJvbGU6dC5yb2xlfSl9CiAgICAgICAgICAuYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb249JHshMH0KICAgICAgICAgIC5kYXRhPSR7W3tuYW1lOiJFcmluIixlbWFpbDoiZXJpbkBleGFtcGxlLmNvbSIscm9sZToiQWRtaW4ifSx7bmFtZToiRmlubiIsZW1haWw6ImZpbm5AZXhhbXBsZS5jb20iLHJvbGU6IlVzZXIifSx7bmFtZToiR2luYSIsZW1haWw6ImdpbmFAZXhhbXBsZS5jb20iLHJvbGU6IlVzZXIifV19CiAgICAgICAgICBkYXRhTmFtZT0idXNlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iIAogICAgICAgICAgIEBzZWxlY3Rpb25DaGFuZ2U9JHt0PT57Y29uc29sZS5sb2coIlNlbGVjdGlvbiBjaGFuZ2VkIix0LmRldGFpbCl9fQogICAgICAgICAgIEBzZWFyY2gtY2hhbmdlZD0ke3Q9PntsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFibGVGaWx0ZXJTZWxlY3REZW1vIik7ZSYmZS5zZXRGaWx0ZXJUZXh0KHQuZGV0YWlsLnZhbHVlKX19CiAgICAgICAgICAgQHNlYXJjaC1zdWJtaXQ9JHt0PT57bGV0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhYmxlRmlsdGVyU2VsZWN0RGVtbyIpO2UmJmUuc2V0RmlsdGVyVGV4dCh0LmRldGFpbC52YWx1ZSl9fQogICAgICA+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5GaWx0ZXJpbmcgKyBNdWx0aS1TZWxlY3Rpb24gKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5Vc2UgdGhlIHNlYXJjaCBiYXIgdG8gZmlsdGVyIHJvd3M7IHRvZ2dsZSBzZWxlY3Rpb24gdmlhIGNoZWNrYm94ZXMuIENsaWNrIGhlYWRlcnMgdG8gc29ydC48L3A+CiAgICAgICAgPGRlZXMtc2VhcmNoYmFyPjwvZGVlcy1zZWFyY2hiYXI+CiAgICAgICAgPGRpdiBzdHlsZT0iaGVpZ2h0OiAxMnB4Ij48L2Rpdj4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaWQ9InRhYmxlRmlsdGVyU2VsZWN0RGVtbyIKICAgICAgICAgIGhlYWRpbmcxPSJJbnZlbnRvcnkgKEZpbHRlciArIFNlbGVjdCkiCiAgICAgICAgICBoZWFkaW5nMj0iVHJ5IHR5cGluZyB0byBmaWx0ZXIgYW5kIHNlbGVjdGluZyBtdWx0aXBsZSByb3dzIgogICAgICAgICAgLnNlbGVjdGlvbk1vZGU9JHsibXVsdGkifQogICAgICAgICAgLnJvd0tleT0keyJza3UifQogICAgICAgICAgLmNvbHVtbnM9JHtbe2tleToic2t1IixoZWFkZXI6IlNLVSIsc29ydGFibGU6ITB9LHtrZXk6Im5hbWUiLGhlYWRlcjoiTmFtZSIsc29ydGFibGU6ITB9LHtrZXk6InN0b2NrIixoZWFkZXI6IlN0b2NrIixzb3J0YWJsZTohMH1dfQogICAgICAgICAgLmRhdGE9JHtbe3NrdToiQS0xMDAiLG5hbWU6IlVTQi1DIENhYmxlIixzdG9jazoxMjB9LHtza3U6IkEtMTAxIixuYW1lOiJXaXJlbGVzcyBNb3VzZSIsc3RvY2s6NTV9LHtza3U6IkEtMTAyIixuYW1lOiJMYXB0b3AgU3RhbmQiLHN0b2NrOjE4fSx7c2t1OiJCLTIwMCIsbmFtZToiS2V5Ym9hcmQgKElTTykiLHN0b2NrOjg5fSx7c2t1OiJCLTIwMSIsbmFtZToiSERNSSBBZGFwdGVyIixzdG9jazowfSx7c2t1OiJDLTMwMCIsbmFtZToiV2ViY2FtIDEwODBwIixzdG9jazo0Mn1dfQogICAgICAgICAgZGF0YU5hbWU9Iml0ZW1zIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkNvbHVtbiBGaWx0ZXJzICsgU3RpY2t5IEhlYWRlciAoTmV3KTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlBlci1jb2x1bW4gcXVpY2sgZmlsdGVycyBhbmQgc3RpY2t5IGhlYWRlciB3aXRoIGludGVybmFsIHNjcm9sbC4gVHJ5IGZpbHRlcmluZyB0aGUgTmFtZSBjb2x1bW4uIFVzZXMgLS10YWJsZS1tYXgtaGVpZ2h0IHZhci48L3A+CiAgICAgICAgPHN0eWxlPgogICAgICAgICAgZGVlcy10YWJsZVtzdGlja3ktaGVhZGVyXSB7IC0tdGFibGUtbWF4LWhlaWdodDogMjIwcHg7IH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iRW1wbG95ZWVzIgogICAgICAgICAgaGVhZGluZzI9IlF1aWNrIGZpbHRlciBwZXIgY29sdW1uICsgc3RpY2t5IGhlYWRlciIKICAgICAgICAgIC5zaG93Q29sdW1uRmlsdGVycz0keyEwfQogICAgICAgICAgLnN0aWNreUhlYWRlcj0keyEwfQogICAgICAgICAgLmNvbHVtbnM9JHtbe2tleToibmFtZSIsaGVhZGVyOiJOYW1lIixzb3J0YWJsZTohMH0se2tleToiZW1haWwiLGhlYWRlcjoiRW1haWwiLHNvcnRhYmxlOiEwfSx7a2V5OiJkZXBhcnRtZW50IixoZWFkZXI6IkRlcGFydG1lbnQiLHNvcnRhYmxlOiEwfV19CiAgICAgICAgICAuZGF0YT0ke1t7bmFtZToiQWxpY2UgSm9obnNvbiIsZW1haWw6ImFsaWNlQGNvcnAuY29tIixkZXBhcnRtZW50OiJFbmdpbmVlcmluZyJ9LHtuYW1lOiJCb2IgU21pdGgiLGVtYWlsOiJib2JAY29ycC5jb20iLGRlcGFydG1lbnQ6IlNhbGVzIn0se25hbWU6IkNoYXJsaWUgRGF2aXMiLGVtYWlsOiJjaGFybGllQGNvcnAuY29tIixkZXBhcnRtZW50OiJIUiJ9LHtuYW1lOiJEaWFuYSBNYXJ0aW5leiIsZW1haWw6ImRpYW5hQGNvcnAuY29tIixkZXBhcnRtZW50OiJFbmdpbmVlcmluZyJ9LHtuYW1lOiJFdGhhbiBCcm93biIsZW1haWw6ImV0aGFuQGNvcnAuY29tIixkZXBhcnRtZW50OiJGaW5hbmNlIn0se25hbWU6IkZpb25hIENsYXJrIixlbWFpbDoiZmlvbmFAY29ycC5jb20iLGRlcGFydG1lbnQ6IlNhbGVzIn0se25hbWU6IkdyYWNlIExlZSIsZW1haWw6ImdyYWNlQGNvcnAuY29tIixkZXBhcnRtZW50OiJFbmdpbmVlcmluZyJ9LHtuYW1lOiJIZW5yeSBXaWxzb24iLGVtYWlsOiJoZW5yeUBjb3JwLmNvbSIsZGVwYXJ0bWVudDoiTWFya2V0aW5nIn0se25hbWU6IklyZW5lIFdhbGtlciIsZW1haWw6ImlyZW5lQGNvcnAuY29tIixkZXBhcnRtZW50OiJGaW5hbmNlIn0se25hbWU6IkphY2sgVHVybmVyIixlbWFpbDoiamFja0Bjb3JwLmNvbSIsZGVwYXJ0bWVudDoiU3VwcG9ydCJ9XX0KICAgICAgICAgIGRhdGFOYW1lPSJlbXBsb3llZXMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iCiAgICAgICAgQHNlYXJjaFJlcXVlc3Q9JHthc3luYyB0PT57bGV0e3F1ZXJ5OmV9PXQuZGV0YWlsfHx7cXVlcnk6IiJ9LGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZlclNlYXJjaERlbW8iKSxyPVt7aWQ6MSxuYW1lOiJBbGljZSIsY2l0eToiQmVybGluIix0aXRsZToiRW5naW5lZXIifSx7aWQ6MixuYW1lOiJCb2IiLGNpdHk6IlBhcmlzIix0aXRsZToiRGVzaWduZXIifSx7aWQ6MyxuYW1lOiJDaGFybGllIixjaXR5OiJMb25kb24iLHRpdGxlOiJNYW5hZ2VyIn0se2lkOjQsbmFtZToiRGlhbmEiLGNpdHk6Ik1hZHJpZCIsdGl0bGU6IkVuZ2luZWVyIn0se2lkOjUsbmFtZToiRXRoYW4iLGNpdHk6IlJvbWUiLHRpdGxlOiJTdXBwb3J0In1dO2F3YWl0IG5ldyBQcm9taXNlKHM9PnNldFRpbWVvdXQocywzMDApKTtsZXQgaT1TdHJpbmcoZXx8IiIpLnRvTG93ZXJDYXNlKCksbz1pP3IuZmlsdGVyKHM9Pk9iamVjdC52YWx1ZXMocykuc29tZShsPT5TdHJpbmcobCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhpKSkpOnI7YS5kYXRhPW99fQogICAgICA+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5TZXJ2ZXIgU2VhcmNoIChOZXcpPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+U2VsZWN0IFNlcnZlciBtb2RlLCB0eXBlIGEgcXVlcnksIGFuZCB3YXRjaCB0aGUgdGFibGUgZmV0Y2ggc2ltdWxhdGVkIHJlc3VsdHMuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0ic2VydmVyU2VhcmNoRGVtbyIKICAgICAgICAgIGhlYWRpbmcxPSJQZW9wbGUgKFNlcnZlciBTZWFyY2gpIgogICAgICAgICAgaGVhZGluZzI9IkNsaWNrIFNlYXJjaCwgY2hvb3NlIFNlcnZlciBtb2RlLCBhbmQgdHlwZSIKICAgICAgICAgIC5jb2x1bW5zPSR7W3trZXk6Im5hbWUiLGhlYWRlcjoiTmFtZSJ9LHtrZXk6ImNpdHkiLGhlYWRlcjoiQ2l0eSJ9LHtrZXk6InRpdGxlIixoZWFkZXI6IlRpdGxlIn1dfQogICAgICAgICAgLmRhdGE9JHtbe2lkOjEsbmFtZToiQWxpY2UiLGNpdHk6IkJlcmxpbiIsdGl0bGU6IkVuZ2luZWVyIn0se2lkOjIsbmFtZToiQm9iIixjaXR5OiJQYXJpcyIsdGl0bGU6IkRlc2lnbmVyIn0se2lkOjMsbmFtZToiQ2hhcmxpZSIsY2l0eToiTG9uZG9uIix0aXRsZToiTWFuYWdlciJ9LHtpZDo0LG5hbWU6IkRpYW5hIixjaXR5OiJNYWRyaWQiLHRpdGxlOiJFbmdpbmVlciJ9LHtpZDo1LG5hbWU6IkV0aGFuIixjaXR5OiJSb21lIix0aXRsZToiU3VwcG9ydCJ9XX0KICAgICAgICAgIGRhdGFOYW1lPSJwZW9wbGUiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+V2lkZSBQcm9wZXJ0aWVzICsgTWFueSBBY3Rpb25zPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QSB0YWJsZSB3aXRoIG1hbnkgY29sdW1ucyBhbmQgcmljaCBhY3Rpb25zIHRvIHN0cmVzcyB0ZXN0IGxheW91dCBhbmQgc3RpY2t5IEFjdGlvbnMuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iUGVvcGxlIERpcmVjdG9yeSIKICAgICAgICAgIGhlYWRpbmcyPSJNYW55IHByb3BlcnRpZXMgYW5kIGFjdGlvbnMiCiAgICAgICAgICAuY29sdW1ucz0ke1t7a2V5OiJpZCIsaGVhZGVyOiJJRCIsc29ydGFibGU6ITB9LHtrZXk6Im5hbWUiLGhlYWRlcjoiTmFtZSIsc29ydGFibGU6ITB9LHtrZXk6InJvbGUiLGhlYWRlcjoiUm9sZSIsc29ydGFibGU6ITB9LHtrZXk6ImRlcGFydG1lbnQiLGhlYWRlcjoiRGVwYXJ0bWVudCIsc29ydGFibGU6ITB9LHtrZXk6ImVtYWlsIixoZWFkZXI6IkVtYWlsIn0se2tleToicGhvbmUiLGhlYWRlcjoiUGhvbmUifSx7a2V5OiJsb2NhdGlvbiIsaGVhZGVyOiJMb2NhdGlvbiIsc29ydGFibGU6ITB9LHtrZXk6InN0YXR1cyIsaGVhZGVyOiJTdGF0dXMiLHNvcnRhYmxlOiEwfSx7a2V5OiJjcmVhdGVkQXQiLGhlYWRlcjoiQ3JlYXRlZCIsc29ydGFibGU6ITB9LHtrZXk6InVwZGF0ZWRBdCIsaGVhZGVyOiJVcGRhdGVkIixzb3J0YWJsZTohMH0se2tleToibGFzdExvZ2luIixoZWFkZXI6Ikxhc3QgTG9naW4iLHNvcnRhYmxlOiEwfSx7a2V5OiJwcm9qZWN0cyIsaGVhZGVyOiJQcm9qZWN0cyJ9LHtrZXk6InRhZ3MiLGhlYWRlcjoiVGFncyJ9LHtrZXk6Im5vdGVzIixoZWFkZXI6Ik5vdGVzIn1dfQogICAgICAgICAgLmRhdGE9JHtbe2lkOjEsbmFtZToiQWxpY2UgSm9obnNvbiIscm9sZToiRW5naW5lZXIiLGRlcGFydG1lbnQ6IlImRCIsZW1haWw6ImFsaWNlQGNvcnAuY29tIixwaG9uZToiKzEgMjAyIDU1NSAwMTExIixsb2NhdGlvbjoiQmVybGluIixzdGF0dXM6IkFjdGl2ZSIsY3JlYXRlZEF0OiIyMDIzLTAxLTEyIix1cGRhdGVkQXQ6IjIwMjQtMDUtMDMiLGxhc3RMb2dpbjoiMjAyNC0xMC0wMSIscHJvamVjdHM6NSx0YWdzOiJ0eXBlc2NyaXB0LCB1aSIsbm90ZXM6Ik1lbnRvciJ9LHtpZDoyLG5hbWU6IkJvYiBTbWl0aCIscm9sZToiRGVzaWduZXIiLGRlcGFydG1lbnQ6IkRlc2lnbiIsZW1haWw6ImJvYkBjb3JwLmNvbSIscGhvbmU6IisxIDIwMiA1NTUgMDExMiIsbG9jYXRpb246IlBhcmlzIixzdGF0dXM6IkFjdGl2ZSIsY3JlYXRlZEF0OiIyMDIyLTExLTA1Iix1cGRhdGVkQXQ6IjIwMjQtMDQtMTAiLGxhc3RMb2dpbjoiMjAyNC0wOS0yOCIscHJvamVjdHM6OCx0YWdzOiJmaWdtYSwgYnJhbmQiLG5vdGVzOiJQYXJ0LXRpbWUifSx7aWQ6MyxuYW1lOiJDaGFybGllIERhdmlzIixyb2xlOiJNYW5hZ2VyIixkZXBhcnRtZW50OiJPcHMiLGVtYWlsOiJjaGFybGllQGNvcnAuY29tIixwaG9uZToiKzEgMjAyIDU1NSAwMTEzIixsb2NhdGlvbjoiTG9uZG9uIixzdGF0dXM6Ik9uIExlYXZlIixjcmVhdGVkQXQ6IjIwMjEtMDQtMjEiLHVwZGF0ZWRBdDoiMjAyNC0wMi0xNSIsbGFzdExvZ2luOiIyMDI0LTA4LTEyIixwcm9qZWN0czozLHRhZ3M6InNyZSwgbGVhZGVyc2hpcCIsbm90ZXM6IiJ9LHtpZDo0LG5hbWU6IkRpYW5hIE1hcnRpbmV6Iixyb2xlOiJFbmdpbmVlciIsZGVwYXJ0bWVudDoiUGxhdGZvcm0iLGVtYWlsOiJkaWFuYUBjb3JwLmNvbSIscGhvbmU6IisxIDIwMiA1NTUgMDExNCIsbG9jYXRpb246Ik1hZHJpZCIsc3RhdHVzOiJBY3RpdmUiLGNyZWF0ZWRBdDoiMjAyMC0wNi0zMCIsdXBkYXRlZEF0OiIyMDI0LTA2LTI1IixsYXN0TG9naW46IjIwMjQtMTAtMDIiLHByb2plY3RzOjYsdGFnczoibm9kZSwgYXBpIixub3RlczoiT24tY2FsbCJ9LHtpZDo1LG5hbWU6IkV0aGFuIEJyb3duIixyb2xlOiJTdXBwb3J0IixkZXBhcnRtZW50OiJDUyIsZW1haWw6ImV0aGFuQGNvcnAuY29tIixwaG9uZToiKzEgMjAyIDU1NSAwMTE1Iixsb2NhdGlvbjoiUm9tZSIsc3RhdHVzOiJJbmFjdGl2ZSIsY3JlYXRlZEF0OiIyMDE5LTA5LTE4Iix1cGRhdGVkQXQ6IjIwMjQtMDMtMDkiLGxhc3RMb2dpbjoiMjAyNC0wNi0xOSIscHJvamVjdHM6Mix0YWdzOiJ6ZW5kZXNrIixub3RlczoiUmVoaXJlIn0se2lkOjYsbmFtZToiRmlvbmEgQ2xhcmsiLHJvbGU6IlFBIixkZXBhcnRtZW50OiJRQSIsZW1haWw6ImZpb25hQGNvcnAuY29tIixwaG9uZToiKzEgMjAyIDU1NSAwMTE2Iixsb2NhdGlvbjoiVmllbm5hIixzdGF0dXM6IkFjdGl2ZSIsY3JlYXRlZEF0OiIyMDIyLTAzLTE0Iix1cGRhdGVkQXQ6IjIwMjQtMDMtMDEiLGxhc3RMb2dpbjoiMjAyNC0wOS0wNyIscHJvamVjdHM6Nyx0YWdzOiJwbGF5d3JpZ2h0Iixub3RlczoiIn1dfQogICAgICAgICAgLmRhdGFBY3Rpb25zPSR7W3tuYW1lOiJWaWV3IixpY29uTmFtZToibHVjaWRlOmV5ZSIsdHlwZTpbImluUm93IiwiY29udGV4dG1lbnUiXSxhY3Rpb25GdW5jOmFzeW5jKHtpdGVtOnR9KT0+e2NvbnNvbGUubG9nKCJ2aWV3Iix0KX19LHtuYW1lOiJFZGl0IixpY29uTmFtZToibHVjaWRlOmVkaXQiLHR5cGU6WyJpblJvdyIsImNvbnRleHRtZW51Il0sYWN0aW9uRnVuYzphc3luYyh7aXRlbTp0fSk9Pntjb25zb2xlLmxvZygiZWRpdCIsdCl9fSx7bmFtZToiRGVsZXRlIixpY29uTmFtZToibHVjaWRlOnRyYXNoIix0eXBlOlsiaW5Sb3ciLCJjb250ZXh0bWVudSJdLGFjdGlvbkZ1bmM6YXN5bmMoe2l0ZW06dH0pPT57Y29uc29sZS5sb2coImRlbGV0ZSIsdCl9fSx7bmFtZToiTWVzc2FnZSIsaWNvbk5hbWU6Imx1Y2lkZTptZXNzYWdlLXNxdWFyZSIsdHlwZTpbImluUm93Il0sYWN0aW9uRnVuYzphc3luYyh7aXRlbTp0fSk9Pntjb25zb2xlLmxvZygibWVzc2FnZSIsdCl9fSx7bmFtZToiSGlzdG9yeSIsaWNvbk5hbWU6Imx1Y2lkZTpjbG9jayIsdHlwZTpbImluUm93Il0sYWN0aW9uRnVuYzphc3luYyh7aXRlbTp0fSk9Pntjb25zb2xlLmxvZygiaGlzdG9yeSIsdCl9fSx7bmFtZToiQWRkIE5ldyIsaWNvbk5hbWU6Imx1Y2lkZTpwbHVzIix0eXBlOlsiaGVhZGVyIl0sYWN0aW9uRnVuYzphc3luYyh7dGFibGU6dH0pPT57Y29uc29sZS5sb2coImFkZCIpfX0se25hbWU6IkV4cG9ydCBDU1YiLGljb25OYW1lOiJsdWNpZGU6ZG93bmxvYWQiLHR5cGU6WyJoZWFkZXIiXSxhY3Rpb25GdW5jOmFzeW5jKHt0YWJsZTp0fSk9Pntjb25zb2xlLmxvZygiZXhwb3J0Iil9fSx7bmFtZToiQnVsayBEZWxldGUiLGljb25OYW1lOiJsdWNpZGU6dHJhc2gtMiIsdHlwZTpbImZvb3RlciJdLGFjdGlvbkZ1bmM6YXN5bmMoe3RhYmxlOnR9KT0+e2NvbnNvbGUubG9nKCJidWxrIGRlbGV0ZSIpfX1dfQogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlNjcm9sbGFibGUgU21hbGwgSGVpZ2h0PC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+U2FtZSBhcyBhYm92ZSwgYnV0IHdpdGggbWFueSBpdGVtcyBhbmQgYSBzbWFsbCBmaXhlZCBoZWlnaHQgdG8gZm9yY2UgdmVydGljYWwgc2Nyb2xsaW5nIGluc2lkZSB0aGUgdGFibGUuIEFjdGlvbnMgcmVtYWluIHZpc2libGUgb24gdGhlIHJpZ2h0OyBob3Jpem9udGFsIHNjcm9sbCBhcHBlYXJzIGlmIG5lZWRlZC48L3A+CiAgICAgICAgPHN0eWxlPgogICAgICAgICAgI3Njcm9sbFNtYWxsSGVpZ2h0IHsgLS10YWJsZS1tYXgtaGVpZ2h0OiAyNDBweDsgfQogICAgICAgIDwvc3R5bGU+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGlkPSJzY3JvbGxTbWFsbEhlaWdodCIKICAgICAgICAgIC5zdGlja3lIZWFkZXI9JHshMH0KICAgICAgICAgIGhlYWRpbmcxPSJQZW9wbGUgRGlyZWN0b3J5IChTY3JvbGxhYmxlKSIKICAgICAgICAgIGhlYWRpbmcyPSJGb3JjZWQgc2Nyb2xsaW5nIHdpdGggbWFueSBpdGVtcyIKICAgICAgICAgIC5jb2x1bW5zPSR7W3trZXk6ImlkIixoZWFkZXI6IklEIixzb3J0YWJsZTohMH0se2tleToibmFtZSIsaGVhZGVyOiJOYW1lIixzb3J0YWJsZTohMH0se2tleToicm9sZSIsaGVhZGVyOiJSb2xlIixzb3J0YWJsZTohMH0se2tleToiZGVwYXJ0bWVudCIsaGVhZGVyOiJEZXBhcnRtZW50Iixzb3J0YWJsZTohMH0se2tleToiZW1haWwiLGhlYWRlcjoiRW1haWwifSx7a2V5OiJwaG9uZSIsaGVhZGVyOiJQaG9uZSJ9LHtrZXk6ImxvY2F0aW9uIixoZWFkZXI6IkxvY2F0aW9uIixzb3J0YWJsZTohMH0se2tleToic3RhdHVzIixoZWFkZXI6IlN0YXR1cyIsc29ydGFibGU6ITB9LHtrZXk6ImNyZWF0ZWRBdCIsaGVhZGVyOiJDcmVhdGVkIixzb3J0YWJsZTohMH0se2tleToidXBkYXRlZEF0IixoZWFkZXI6IlVwZGF0ZWQiLHNvcnRhYmxlOiEwfSx7a2V5OiJsYXN0TG9naW4iLGhlYWRlcjoiTGFzdCBMb2dpbiIsc29ydGFibGU6ITB9LHtrZXk6InByb2plY3RzIixoZWFkZXI6IlByb2plY3RzIn0se2tleToidGFncyIsaGVhZGVyOiJUYWdzIn0se2tleToibm90ZXMiLGhlYWRlcjoiTm90ZXMifV19CiAgICAgICAgICAuZGF0YT0ke0FycmF5LmZyb20oe2xlbmd0aDoxMDB9LCh0LGUpPT4oe2lkOmUrMSxuYW1lOmBVc2VyICR7ZSsxfWAscm9sZTpbIkVuZ2luZWVyIiwiRGVzaWduZXIiLCJNYW5hZ2VyIiwiUUEiLCJTdXBwb3J0Il1bZSU1XSxkZXBhcnRtZW50OlsiUiZEIiwiRGVzaWduIiwiT3BzIiwiUUEiLCJDUyJdW2UlNV0sZW1haWw6YHVzZXIke2UrMX1AY29ycC5jb21gLHBob25lOmArMSAyMDIgNTU1ICR7U3RyaW5nKDFlMytlKS5zbGljZSgtNCl9YCxsb2NhdGlvbjpbIkJlcmxpbiIsIlBhcmlzIiwiTG9uZG9uIiwiTWFkcmlkIiwiUm9tZSJdW2UlNV0sc3RhdHVzOlsiQWN0aXZlIiwiSW5hY3RpdmUiLCJPbiBMZWF2ZSJdW2UlM10sY3JlYXRlZEF0OmAyMDIzLSR7U3RyaW5nKGUlMTIrMSkucGFkU3RhcnQoMiwiMCIpfS0ke1N0cmluZyhlJTI4KzEpLnBhZFN0YXJ0KDIsIjAiKX1gLHVwZGF0ZWRBdDpgMjAyNC0ke1N0cmluZygoZSszKSUxMisxKS5wYWRTdGFydCgyLCIwIil9LSR7U3RyaW5nKChlKzcpJTI4KzEpLnBhZFN0YXJ0KDIsIjAiKX1gLGxhc3RMb2dpbjpgMjAyNC0ke1N0cmluZygoZSs2KSUxMisxKS5wYWRTdGFydCgyLCIwIil9LSR7U3RyaW5nKChlKzEwKSUyOCsxKS5wYWRTdGFydCgyLCIwIil9YCxwcm9qZWN0czplJTEyLHRhZ3M6ZSUyPyJ0eXBlc2NyaXB0IjoiZGVzaWduIixub3RlczplJTM/IiI6Ik5vdGUifSkpfQogICAgICAgICAgLmRhdGFBY3Rpb25zPSR7W3tuYW1lOiJWaWV3IixpY29uTmFtZToibHVjaWRlOmV5ZSIsdHlwZTpbImluUm93Il0sYWN0aW9uRnVuYzphc3luYyh7aXRlbTp0fSk9Pnt9fSx7bmFtZToiRWRpdCIsaWNvbk5hbWU6Imx1Y2lkZTplZGl0Iix0eXBlOlsiaW5Sb3ciXSxhY3Rpb25GdW5jOmFzeW5jKHtpdGVtOnR9KT0+e319LHtuYW1lOiJEZWxldGUiLGljb25OYW1lOiJsdWNpZGU6dHJhc2giLHR5cGU6WyJpblJvdyJdLGFjdGlvbkZ1bmM6YXN5bmMoe2l0ZW06dH0pPT57fX1dfQogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7ZmUoKTtCZSgpO3ZhciBmRnQ9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgZm9udC1mYW1pbHk6ICR7SnR9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBtaW4taGVpZ2h0OiA2NHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAuaGVhZGluZ0NvbnRhaW5lciB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLmhlYWRpbmcgewogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nMSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQogICAgICAKICAgICAgLmhlYWRpbmcyIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLXRvcDogMnB4OwogICAgICB9CgogICAgICAuaGVhZGluZ1NlcGFyYXRpb24gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5oZWFkZXJBY3Rpb25zIHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5oZWFkZXJBY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5oZWFkZXJBY3Rpb246aG92ZXIgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQoKICAgICAgLmhlYWRlckFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQoKICAgICAgLnNlYXJjaEdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC1nYXA6IDE2cHg7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgbWF4LWNvbnRlbnQ7CiAgICAgICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAgICAgLnNlYXJjaEdyaWQgewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKiBsZXQgc2VhcmNoIG1vZGUgc2l6ZSB0byBjb250ZW50IChubyBmb3JjZWQgd2lkdGgpICovCgogICAgICAuc2VhcmNoR3JpZC5oaWRkZW4gewogICAgICAgIGhlaWdodDogMHB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwYWRkaW5nOiAwcHggMjRweDsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwcHg7CiAgICAgIH0KCiAgICAgIC50YWJsZVNjcm9sbCB7CiAgICAgICAgLyogZW5hYmxlIGhvcml6b250YWwgc2Nyb2xsIG9ubHkgd2hlbiBjb250ZW50IGV4Y2VlZHMgd2lkdGggKi8KICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIC8qIHByZXZlbnQgdmVydGljYWwgc2Nyb2xsIGluc2lkZSB0aGUgdGFibGUgY29udGFpbmVyICovCiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgICAgIC8qIGF2b2lkIHJlc2VydmluZyBleHRyYSBzcGFjZSBmb3IgY2xhc3NpYyBzY3JvbGxiYXJzIHdoZXJlIHBvc3NpYmxlICovCiAgICAgICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlIGJvdGgtZWRnZXM7CiAgICAgIH0KICAgICAgLyogSGlkZSBob3Jpem9udGFsIHNjcm9sbGJhciBlbnRpcmVseSB3aGVuIG5vdCB1c2luZyBzdGlja3kgaGVhZGVyICovCiAgICAgIDpob3N0KDpub3QoW3N0aWNreS1oZWFkZXJdKSkgLnRhYmxlU2Nyb2xsIHsKICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7IC8qIElFL0VkZ2UgKi8KICAgICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7ICAgLyogRmlyZWZveCAoaGlkZXMgYm90aCBheGVzKSAqLwogICAgICB9CiAgICAgIDpob3N0KDpub3QoW3N0aWNreS1oZWFkZXJdKSkgLnRhYmxlU2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsgLyogQ2hyb21lL1NhZmFyaSAqLwogICAgICB9CiAgICAgIC8qIEluIHN0aWNreS1oZWFkZXIgbW9kZSwgaGlkZSBvbmx5IHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciBpbiBXZWJLaXQvQmxpbmsgKi8KICAgICAgOmhvc3QoW3N0aWNreS1oZWFkZXJdKSAudGFibGVTY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyOmhvcml6b250YWwgewogICAgICAgIGhlaWdodDogMHB4OwogICAgICB9CiAgICAgIDpob3N0KFtzdGlja3ktaGVhZGVyXSkgLnRhYmxlU2Nyb2xsIHsKICAgICAgICBtYXgtaGVpZ2h0OiB2YXIoLS10YWJsZS1tYXgtaGVpZ2h0LCAzNjBweCk7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICAvKiBhbGxvdyB0YWJsZSB0byBncm93IHdpZGVyIHRoYW4gY29udGFpbmVyIHNvIGFjdGlvbnMgY29sdW1uIGNhbiBzdGljayAqLwogICAgICAgIHdpZHRoOiBtYXgtY29udGVudDsKICAgICAgICBtaW4td2lkdGg6IDEwMCU7CiAgICAgICAgY2FwdGlvbi1zaWRlOiBib3R0b207CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ub0RhdGFTZXQgewogICAgICAgIHBhZGRpbmc6IDQ4cHggMjRweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRoZWFkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CiAgICAgIDpob3N0KFtzdGlja3ktaGVhZGVyXSkgdGhlYWQgdGggewogICAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgIH0KICAgICAgCiAgICAgIHRib2R5IHRyIHsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIAogICAgICAvKiBEZWZhdWx0IGhvcml6b250YWwgbGluZXMgKGJvdHRvbSBib3JkZXIgb25seSkgKi8KICAgICAgdGJvZHkgdHIgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAvKiBGdWxsIGhvcml6b250YWwgbGluZXMgd2hlbiBlbmFibGVkICovCiAgICAgIDpob3N0KFtzaG93LWhvcml6b250YWwtbGluZXNdKSB0Ym9keSB0ciB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LWhvcml6b250YWwtbGluZXNdKSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctaG9yaXpvbnRhbC1saW5lc10pIHRib2R5IHRyOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElIC8gMC41KSIsImhzbCgwIDAlIDE0LjklIC8gMC41KSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogQ29sdW1uIGhvdmVyIGVmZmVjdCBmb3IgYmV0dGVyIHRyYWNlYWJpbGl0eSAqLwogICAgICB0ZCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIAogICAgICB0ZDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElIC8gMC4zKSIsImhzbCgwIDAlIDE0LjklIC8gMC4zKSIpfTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgICB6LWluZGV4OiAtMTsKICAgICAgfQogICAgICAKICAgICAgdGQ6aG92ZXI6OmFmdGVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICAgIAogICAgICAvKiBHcmlkIG1vZGUgLSBzaG93cyBib3RoIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIGxpbmVzICovCiAgICAgIDpob3N0KFtzaG93LWdyaWRdKSB0aCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRoOmZpcnN0LWNoaWxkLAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGQ6Zmlyc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkIHsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CgogICAgICAvKiBTdGlja3kgQWN0aW9ucyBjb2x1bW4gKHJpZ2h0IHBpbm5lZCkgKi8KICAgICAgdGhlYWQgdGguYWN0aW9uc0NvbCwKICAgICAgdGJvZHkgdGQuYWN0aW9uc0NvbCB7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICByaWdodDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgfQogICAgICB0aGVhZCB0aC5hY3Rpb25zQ29sIHsgei1pbmRleDogMzsgfQogICAgICB0Ym9keSB0ZC5hY3Rpb25zQ29sIHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIGJveC1zaGFkb3c6IC0xcHggMCAwIDAgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgdGJvZHkgdHIuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIHRib2R5IHRyLmhhc0F0dGFjaG1lbnQgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUgLyAwLjEpIiwiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy12ZXJ0aWNhbC1saW5lc10pIHRoIHsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogMTJweCAyNHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LXZlcnRpY2FsLWxpbmVzXSkgdGQgewogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRoOmZpcnN0LWNoaWxkLAogICAgICB0ZDpmaXJzdC1jaGlsZCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICB0aDpsYXN0LWNoaWxkLAogICAgICB0ZDpsYXN0LWNoaWxkIHsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy12ZXJ0aWNhbC1saW5lc10pIHRoOmxhc3QtY2hpbGQsCiAgICAgIDpob3N0KFtzaG93LXZlcnRpY2FsLWxpbmVzXSkgdGQ6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICB9CiAgICAgIAogICAgICAuaW5uZXJDZWxsQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMjRweDsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgfQogICAgICB0ZCBpbnB1dCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNHB4OwogICAgICAgIGJvdHRvbTogNHB4OwogICAgICAgIGxlZnQ6IDIwcHg7CiAgICAgICAgcmlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpOwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gOHB4KTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpOwogICAgICB9CiAgICAgIAogICAgICB0ZCBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7cC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjIpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogZmlsdGVyIHJvdyAqLwogICAgICB0aGVhZCB0ci5maWx0ZXJzUm93IHRoIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCAxMnB4IDEycHg7CiAgICAgIH0KICAgICAgdGhlYWQgdHIuZmlsdGVyc1JvdyB0aCBpbnB1dFt0eXBlPSd0ZXh0J10gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CiAgICAgIC5hY3Rpb25zQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmFjdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDAgMCUgMTEuOCUpIil9OwogICAgICB9CiAgICAgIAogICAgICAuYWN0aW9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuZm9vdGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogNTJweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWJsZVN0YXRpc3RpY3MgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5mb290ZXJBY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZm9vdGVyQWN0aW9ucyAuZm9vdGVyQWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZm9vdGVyQWN0aW9ucyAuZm9vdGVyQWN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLmZvb3RlckFjdGlvbnMgLmZvb3RlckFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQogIGBdO2Z1bmN0aW9uIHVFZSh0LGUpe2lmKCFlfHxlLmxlbmd0aD09PTApcmV0dXJuW107bGV0IGE9dChlWzBdKTtyZXR1cm4gT2JqZWN0LmtleXMoYSkubWFwKGk9Pih7a2V5OmksaGVhZGVyOmksdmFsdWU6bz0+dChvKVtpXX0pKX1mdW5jdGlvbiB1RnQodCxlLGEscil7bGV0IGk9KHR8fFtdKS5zbGljZSgpO2lmKCFlKXJldHVybiBpO2xldCBvPXVFZShhLHIpLHM9bmV3IFNldChpLm1hcChsPT5TdHJpbmcobC5rZXkpKSk7Zm9yKGxldCBsIG9mIG8pcy5oYXMoU3RyaW5nKGwua2V5KSl8fGkucHVzaChsKTtyZXR1cm4gaX1mdW5jdGlvbiB1NSh0LGUsYSl7cmV0dXJuIGUudmFsdWU/ZS52YWx1ZSh0KTp0W2Uua2V5XX1mdW5jdGlvbiBwRnQodCxlLGEscixpLG8scz0idGFibGUiLGwpe2xldCBmPXQuc2xpY2UoKSxjPShpfHwiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksdT1vfHx7fSxkPU9iamVjdC5rZXlzKHUpLmZpbHRlcihiPT4odVtiXT8/IiIpLnRyaW0oKS5sZW5ndGg+MCk7aWYoKGN8fGQubGVuZ3RoPjApJiYoZj1mLmZpbHRlcihiPT57Zm9yKGxldCB4IG9mIGQpaWYocz09PSJkYXRhIil7bGV0IG09Ylt4XSx2PVN0cmluZyhtPz8iIikudG9Mb3dlckNhc2UoKSx5PVN0cmluZyh1W3hdKS50b0xvd2VyQ2FzZSgpO2lmKCF2LmluY2x1ZGVzKHkpKXJldHVybiExfWVsc2V7bGV0IG09ZS5maW5kKEU9PlN0cmluZyhFLmtleSk9PT14KTtpZighbXx8bS5oaWRkZW58fG0uZmlsdGVyYWJsZT09PSExKWNvbnRpbnVlO2xldCB2PXU1KGIsbSkseT1TdHJpbmcodj8/IiIpLnRvTG93ZXJDYXNlKCksdz1TdHJpbmcodVt4XSkudG9Mb3dlckNhc2UoKTtpZigheS5pbmNsdWRlcyh3KSlyZXR1cm4hMX1pZihjKXtpZihsKXJldHVybiEhbChiKTtsZXQgeD0hMTtpZihzPT09ImRhdGEiKXtmb3IobGV0IG0gb2YgT2JqZWN0LnZhbHVlcyhiKSlpZihTdHJpbmcobT8/IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYykpe3g9ITA7YnJlYWt9fWVsc2UgZm9yKGxldCBtIG9mIGUpe2lmKG0uaGlkZGVuKWNvbnRpbnVlO2xldCB2PXU1KGIsbSk7aWYoU3RyaW5nKHY/PyIiKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGMpKXt4PSEwO2JyZWFrfX1pZigheClyZXR1cm4hMX1yZXR1cm4hMH0pKSwhYXx8IXIpcmV0dXJuIGY7bGV0IGg9ZS5maW5kKGI9PlN0cmluZyhiLmtleSk9PT1hKTtpZighaClyZXR1cm4gZjtsZXQgZz1yPT09ImFzYyI/MTotMTtyZXR1cm4gZi5zb3J0KChiLHgpPT57bGV0IG09dTUoYixoKSx2PXU1KHgsaCk7aWYobT09bnVsbCYmdj09bnVsbClyZXR1cm4gMDtpZihtPT1udWxsKXJldHVybi0xKmc7aWYodj09bnVsbClyZXR1cm4gMSpnO2lmKHR5cGVvZiBtPT0ibnVtYmVyIiYmdHlwZW9mIHY9PSJudW1iZXIiKXJldHVybihtLXYpKmc7bGV0IHk9U3RyaW5nKG0pLnRvTG93ZXJDYXNlKCksdz1TdHJpbmcodikudG9Mb3dlckNhc2UoKTtyZXR1cm4geTx3Py0xKmc6eT53PzEqZzowfSksZn1mdW5jdGlvbiB0aih0KXtyZXR1cm4gdC5zdGFydHNXaXRoKCciJykmJnQuZW5kc1dpdGgoJyInKXx8dC5zdGFydHNXaXRoKCInIikmJnQuZW5kc1dpdGgoIiciKT90LnNsaWNlKDEsLTEpOnR9ZnVuY3Rpb24gZXMxKHQpe3JldHVybiB0LnNwbGl0KC9ccytPUlxzKy9pKS5tYXAoZT0+ZS50cmltKCkpLmZpbHRlcihCb29sZWFuKX1mdW5jdGlvbiB0czEodCl7cmV0dXJuIHQuc3BsaXQoL1xzK0FORFxzKy9pKS5tYXAoZT0+ZS50cmltKCkpLmZpbHRlcihCb29sZWFuKX1mdW5jdGlvbiBhczEodCl7aWYoIXQpcmV0dXJuIG51bGw7bGV0IGU9ITEsYT10Lm1hdGNoKC9eXHMqKE5PVFxzK3wtKVxzKiguKikkL2kpO2EmJihlPSEwLHQ9YVsyXSk7bGV0IHI9dC5tYXRjaCgvXihbXjpcc10rKVxzKjpccypcWyguKj8pXHMrVE9ccysoLio/KVxdJC9pKTtpZihyKXJldHVybntmaWVsZDpyWzFdLG5lZ2F0ZTplLHJhbmdlOntsb3dlcjp0aihyWzJdKS50b0xvd2VyQ2FzZSgpLHVwcGVyOnRqKHJbM10pLnRvTG93ZXJDYXNlKCksaW5jbHVzaXZlOiEwfX07bGV0IGk9dC5tYXRjaCgvXihbXjpcc10rKVxzKjpccyooIlteIl0qInwnW14nXSonfFteIidcc10rKSQvKTtyZXR1cm4gaT97ZmllbGQ6aVsxXSx2YWx1ZTp0aihpWzJdKS50b0xvd2VyQ2FzZSgpLG5lZ2F0ZTplfTp0Lmxlbmd0aD4wP3t2YWx1ZTp0aih0KS50b0xvd2VyQ2FzZSgpLG5lZ2F0ZTplfTpudWxsfWZ1bmN0aW9uIHJzMSh0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZT1lczEodCkubWFwKGE9Pih7dGVybXM6dHMxKGEpLm1hcChhczEpLmZpbHRlcihpPT4hIWkmJiEhaS52YWx1ZSl9KSkuZmlsdGVyKGE9PmEudGVybXMubGVuZ3RoPjApO3JldHVybiBlLmxlbmd0aD09PTA/bnVsbDp7Y2xhdXNlczplfX1mdW5jdGlvbiBoRnQodCxlLGEpe2xldCByPXJzMSh0KTtpZighcilyZXR1cm4gbnVsbDtsZXQgaT1uZXcgTWFwKGEubWFwKGY9PltTdHJpbmcoZi5rZXkpLGZdKSksbz0oZixjKT0+ZjxjPy0xOmY+Yz8xOjAscz1mPT57bGV0IGM9U3RyaW5nKGY/PyIiKS50b0xvd2VyQ2FzZSgpLHU9TnVtYmVyKGMpLGQ9RGF0ZS5wYXJzZShjKTtyZXR1cm4hTnVtYmVyLmlzTmFOKHUpJiZjLnRyaW0oKSE9PSIiP3t0OiJuIix2OnV9Ok51bWJlci5pc05hTihkKT97dDoicyIsdjpjfTp7dDoiZCIsdjpkfX0sbD0oZixjLHUpPT57bGV0IGQ9cyhmKSxoPXMoYyksZz1zKHUpO2lmKGQudD09PSJzIiYmaC50PT09InMiJiZnLnQ9PT0icyIpe2xldCB4PWQudjtyZXR1cm4gbyh4LGgudik+PTAmJm8oeCxnLnYpPD0wfWlmKGQudD09PSJuIiYmaC50PT09Im4iJiZnLnQ9PT0ibiIpe2xldCB4PWQudjtyZXR1cm4geD49aC52JiZ4PD1nLnZ9aWYoZC50PT09ImQiJiZoLnQ9PT0iZCImJmcudD09PSJkIil7bGV0IHg9ZC52O3JldHVybiB4Pj1oLnYmJng8PWcudn1sZXQgYj1TdHJpbmcoZj8/IiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIG8oYixjKT49MCYmbyhiLHUpPD0wfTtyZXR1cm4gZj0+e2ZvcihsZXQgYyBvZiByLmNsYXVzZXMpe2xldCB1PSEwO2ZvcihsZXQgZCBvZiBjLnRlcm1zKXtsZXQgaD0hMTtpZihkLnJhbmdlJiZkLmZpZWxkKWlmKGU9PT0iZGF0YSIpaD1sKGZbZC5maWVsZF0sZC5yYW5nZS5sb3dlcixkLnJhbmdlLnVwcGVyKTtlbHNle2xldCBnPWkuZ2V0KGQuZmllbGQpO2lmKCFnfHxnLmhpZGRlbiloPSExO2Vsc2V7bGV0IGI9Zy52YWx1ZT9nLnZhbHVlKGYpOmZbZy5rZXldO2g9bChiLGQucmFuZ2UubG93ZXIsZC5yYW5nZS51cHBlcil9fWVsc2UgaWYoZC5maWVsZCYmZC52YWx1ZSE9bnVsbClpZihlPT09ImRhdGEiKWg9U3RyaW5nKGZbZC5maWVsZF0/PyIiKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudmFsdWUpO2Vsc2V7bGV0IGc9aS5nZXQoZC5maWVsZCk7aWYoIWd8fGcuaGlkZGVuPT09ITApaD0hMTtlbHNle2xldCBiPWcudmFsdWU/Zy52YWx1ZShmKTpmW2cua2V5XTtoPVN0cmluZyhiPz8iIikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhkLnZhbHVlKX19ZWxzZSBkLnZhbHVlIT1udWxsJiYoZT09PSJkYXRhIj9oPU9iamVjdC52YWx1ZXMoZikuc29tZShnPT5TdHJpbmcoZz8/IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC52YWx1ZSkpOmg9YS5zb21lKGc9PntpZihnLmhpZGRlbilyZXR1cm4hMTtsZXQgYj1nLnZhbHVlP2cudmFsdWUoZik6ZltnLmtleV07cmV0dXJuIFN0cmluZyhiPz8iIikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhkLnZhbHVlKX0pKTtpZihkLm5lZ2F0ZSYmKGg9IWgpLCFoKXt1PSExO2JyZWFrfX1pZih1KXJldHVybiEwfXJldHVybiExfX1mZSgpO1N0KCk7RnQoKTtCZSgpO3ZhciBHdD1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LFdlPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxwRWU9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLXRhYmxlIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W10sSCxMPVtdLGs9W10sTixTPVtdLFQ9W10sUixBPVtdLEY9W10sYWUsVj1bXSxTZT1bXSx6ZSxXPVtdLE5lPVtdLFJlLFg9W10sST1bXSxPLEc9W10saj1bXSxzZSxrZT1bXSxEZT1bXSxPZSxVPVtdLEI9W10sb2UsdmU9W10seWU9W10sJGUsbmU9W10scmU9W10sZ2UsRWU9W10scnQ9W10sdWUsWj1bXSxKPVtdLGRlLEFlPVtdLEhlPVtdLE10LGl0PVtdLHp0PVtdLHF0LFE9W10sSz1bXSxiZSxvdD1bXSxudD1bXSxuMSx2YT1bXSxLcj1bXSxKcixUZT1bXSxqZT1bXSxnMSxLMT1bXSxmMj1bXSwkMix1Mj1bXSxpbz1bXSxvbyxzbz1bXSx3NT1bXTt2YXIgTTU9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBoZT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOlN0cmluZ30pXSxmPVtEKHt0eXBlOlN0cmluZ30pXSxkPVtEKHt0eXBlOkFycmF5fSldLGI9W0Qoe3R5cGU6U3RyaW5nfSldLHY9W0Qoe3R5cGU6U3RyaW5nfSldLEU9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxQPVtEKHt0eXBlOkJvb2xlYW59KV0sSD1bRCh7dHlwZTpTdHJpbmcscmVmbGVjdDohMH0pXSxOPVtEKHt0eXBlOkJvb2xlYW59KV0sUj1bRCh7dHlwZTpBcnJheX0pXSxhZT1bRCh7YXR0cmlidXRlOiExfSldLHplPVtEKHthdHRyaWJ1dGU6ITF9KV0sUmU9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxPPVtEKHthdHRyaWJ1dGU6ITF9KV0sc2U9W0Qoe2F0dHJpYnV0ZTohMX0pXSxPZT1bRCh7dHlwZTpPYmplY3R9KV0sb2U9W0Qoe3R5cGU6QXJyYXl9KV0sJGU9W0Qoe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwLGF0dHJpYnV0ZToic2hvdy12ZXJ0aWNhbC1saW5lcyJ9KV0sZ2U9W0Qoe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwLGF0dHJpYnV0ZToic2hvdy1ob3Jpem9udGFsLWxpbmVzIn0pXSx1ZT1bRCh7dHlwZTpCb29sZWFuLHJlZmxlY3Q6ITAsYXR0cmlidXRlOiJzaG93LWdyaWQifSldLGRlPVtEKHthdHRyaWJ1dGU6ITF9KV0sTXQ9W0Qoe2F0dHJpYnV0ZTohMX0pXSxxdD1bRCh7dHlwZTpTdHJpbmd9KV0sYmU9W0Qoe2F0dHJpYnV0ZTohMX0pXSxuMT1bRCh7dHlwZTpCb29sZWFuLGF0dHJpYnV0ZToic2hvdy1jb2x1bW4tZmlsdGVycyJ9KV0sSnI9W0Qoe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwLGF0dHJpYnV0ZToic3RpY2t5LWhlYWRlciJ9KV0sZzE9W0Qoe3R5cGU6U3RyaW5nfSldLCQyPVtEKHt0eXBlOlN0cmluZ30pXSxvbz1bRCh7YXR0cmlidXRlOiExfSldLEd0KHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaGVhZGluZzEiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4iaGVhZGluZzEiaW4gaWUsZ2V0OmllPT5pZS5oZWFkaW5nMSxzZXQ6KGllLENlKT0+e2llLmhlYWRpbmcxPUNlfX0sbWV0YWRhdGE6aGV9LHMsbCksR3QodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJoZWFkaW5nMiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aWU9PiJoZWFkaW5nMiJpbiBpZSxnZXQ6aWU9PmllLmhlYWRpbmcyLHNldDooaWUsQ2UpPT57aWUuaGVhZGluZzI9Q2V9fSxtZXRhZGF0YTpoZX0sYyx1KSxHdCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRhdGEiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4iZGF0YSJpbiBpZSxnZXQ6aWU9PmllLmRhdGEsc2V0OihpZSxDZSk9PntpZS5kYXRhPUNlfX0sbWV0YWRhdGE6aGV9LGgsZyksR3QodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJrZXkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4ia2V5ImluIGllLGdldDppZT0+aWUua2V5LHNldDooaWUsQ2UpPT57aWUua2V5PUNlfX0sbWV0YWRhdGE6aGV9LHgsbSksR3QodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsYWJlbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aWU9PiJsYWJlbCJpbiBpZSxnZXQ6aWU9PmllLmxhYmVsLHNldDooaWUsQ2UpPT57aWUubGFiZWw9Q2V9fSxtZXRhZGF0YTpoZX0seSx3KSxHdCh0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRpc2FibGVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczppZT0+ImRpc2FibGVkImluIGllLGdldDppZT0+aWUuZGlzYWJsZWQsc2V0OihpZSxDZSk9PntpZS5kaXNhYmxlZD1DZX19LG1ldGFkYXRhOmhlfSxDLHopLEd0KHRoaXMsbnVsbCxQLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicmVxdWlyZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4icmVxdWlyZWQiaW4gaWUsZ2V0OmllPT5pZS5yZXF1aXJlZCxzZXQ6KGllLENlKT0+e2llLnJlcXVpcmVkPUNlfX0sbWV0YWRhdGE6aGV9LF8sJCksR3QodGhpcyxudWxsLEgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkYXRhTmFtZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aWU9PiJkYXRhTmFtZSJpbiBpZSxnZXQ6aWU9PmllLmRhdGFOYW1lLHNldDooaWUsQ2UpPT57aWUuZGF0YU5hbWU9Q2V9fSxtZXRhZGF0YTpoZX0sTCxrKSxHdCh0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlYXJjaGFibGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4ic2VhcmNoYWJsZSJpbiBpZSxnZXQ6aWU9PmllLnNlYXJjaGFibGUsc2V0OihpZSxDZSk9PntpZS5zZWFyY2hhYmxlPUNlfX0sbWV0YWRhdGE6aGV9LFMsVCksR3QodGhpcyxudWxsLFIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkYXRhQWN0aW9ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aWU9PiJkYXRhQWN0aW9ucyJpbiBpZSxnZXQ6aWU9PmllLmRhdGFBY3Rpb25zLHNldDooaWUsQ2UpPT57aWUuZGF0YUFjdGlvbnM9Q2V9fSxtZXRhZGF0YTpoZX0sQSxGKSxHdCh0aGlzLG51bGwsYWUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb2x1bW5zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczppZT0+ImNvbHVtbnMiaW4gaWUsZ2V0OmllPT5pZS5jb2x1bW5zLHNldDooaWUsQ2UpPT57aWUuY29sdW1ucz1DZX19LG1ldGFkYXRhOmhlfSxWLFNlKSxHdCh0aGlzLG51bGwsemUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyb3dLZXkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4icm93S2V5ImluIGllLGdldDppZT0+aWUucm93S2V5LHNldDooaWUsQ2UpPT57aWUucm93S2V5PUNlfX0sbWV0YWRhdGE6aGV9LFcsTmUpLEd0KHRoaXMsbnVsbCxSZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczppZT0+ImF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uImluIGllLGdldDppZT0+aWUuYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24sc2V0OihpZSxDZSk9PntpZS5hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbj1DZX19LG1ldGFkYXRhOmhlfSxYLEkpLEd0KHRoaXMsbnVsbCxPLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZGlzcGxheUZ1bmN0aW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczppZT0+ImRpc3BsYXlGdW5jdGlvbiJpbiBpZSxnZXQ6aWU9PmllLmRpc3BsYXlGdW5jdGlvbixzZXQ6KGllLENlKT0+e2llLmRpc3BsYXlGdW5jdGlvbj1DZX19LG1ldGFkYXRhOmhlfSxHLGopLEd0KHRoaXMsbnVsbCxzZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJldmVyc2VEaXNwbGF5RnVuY3Rpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4icmV2ZXJzZURpc3BsYXlGdW5jdGlvbiJpbiBpZSxnZXQ6aWU9PmllLnJldmVyc2VEaXNwbGF5RnVuY3Rpb24sc2V0OihpZSxDZSk9PntpZS5yZXZlcnNlRGlzcGxheUZ1bmN0aW9uPUNlfX0sbWV0YWRhdGE6aGV9LGtlLERlKSxHdCh0aGlzLG51bGwsT2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZERhdGFSb3ciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4ic2VsZWN0ZWREYXRhUm93ImluIGllLGdldDppZT0+aWUuc2VsZWN0ZWREYXRhUm93LHNldDooaWUsQ2UpPT57aWUuc2VsZWN0ZWREYXRhUm93PUNlfX0sbWV0YWRhdGE6aGV9LFUsQiksR3QodGhpcyxudWxsLG9lLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZWRpdGFibGVGaWVsZHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4iZWRpdGFibGVGaWVsZHMiaW4gaWUsZ2V0OmllPT5pZS5lZGl0YWJsZUZpZWxkcyxzZXQ6KGllLENlKT0+e2llLmVkaXRhYmxlRmllbGRzPUNlfX0sbWV0YWRhdGE6aGV9LHZlLHllKSxHdCh0aGlzLG51bGwsJGUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaG93VmVydGljYWxMaW5lcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aWU9PiJzaG93VmVydGljYWxMaW5lcyJpbiBpZSxnZXQ6aWU9PmllLnNob3dWZXJ0aWNhbExpbmVzLHNldDooaWUsQ2UpPT57aWUuc2hvd1ZlcnRpY2FsTGluZXM9Q2V9fSxtZXRhZGF0YTpoZX0sbmUscmUpLEd0KHRoaXMsbnVsbCxnZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dIb3Jpem9udGFsTGluZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4ic2hvd0hvcml6b250YWxMaW5lcyJpbiBpZSxnZXQ6aWU9PmllLnNob3dIb3Jpem9udGFsTGluZXMsc2V0OihpZSxDZSk9PntpZS5zaG93SG9yaXpvbnRhbExpbmVzPUNlfX0sbWV0YWRhdGE6aGV9LEVlLHJ0KSxHdCh0aGlzLG51bGwsdWUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaG93R3JpZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aWU9PiJzaG93R3JpZCJpbiBpZSxnZXQ6aWU9PmllLnNob3dHcmlkLHNldDooaWUsQ2UpPT57aWUuc2hvd0dyaWQ9Q2V9fSxtZXRhZGF0YTpoZX0sWixKKSxHdCh0aGlzLG51bGwsZGUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzb3J0S2V5IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczppZT0+InNvcnRLZXkiaW4gaWUsZ2V0OmllPT5pZS5zb3J0S2V5LHNldDooaWUsQ2UpPT57aWUuc29ydEtleT1DZX19LG1ldGFkYXRhOmhlfSxBZSxIZSksR3QodGhpcyxudWxsLE10LHtraW5kOiJhY2Nlc3NvciIsbmFtZToic29ydERpciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aWU9PiJzb3J0RGlyImluIGllLGdldDppZT0+aWUuc29ydERpcixzZXQ6KGllLENlKT0+e2llLnNvcnREaXI9Q2V9fSxtZXRhZGF0YTpoZX0saXQsenQpLEd0KHRoaXMsbnVsbCxxdCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImZpbHRlclRleHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4iZmlsdGVyVGV4dCJpbiBpZSxnZXQ6aWU9PmllLmZpbHRlclRleHQsc2V0OihpZSxDZSk9PntpZS5maWx0ZXJUZXh0PUNlfX0sbWV0YWRhdGE6aGV9LFEsSyksR3QodGhpcyxudWxsLGJlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29sdW1uRmlsdGVycyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aWU9PiJjb2x1bW5GaWx0ZXJzImluIGllLGdldDppZT0+aWUuY29sdW1uRmlsdGVycyxzZXQ6KGllLENlKT0+e2llLmNvbHVtbkZpbHRlcnM9Q2V9fSxtZXRhZGF0YTpoZX0sb3QsbnQpLEd0KHRoaXMsbnVsbCxuMSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dDb2x1bW5GaWx0ZXJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczppZT0+InNob3dDb2x1bW5GaWx0ZXJzImluIGllLGdldDppZT0+aWUuc2hvd0NvbHVtbkZpbHRlcnMsc2V0OihpZSxDZSk9PntpZS5zaG93Q29sdW1uRmlsdGVycz1DZX19LG1ldGFkYXRhOmhlfSx2YSxLciksR3QodGhpcyxudWxsLEpyLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3RpY2t5SGVhZGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczppZT0+InN0aWNreUhlYWRlciJpbiBpZSxnZXQ6aWU9PmllLnN0aWNreUhlYWRlcixzZXQ6KGllLENlKT0+e2llLnN0aWNreUhlYWRlcj1DZX19LG1ldGFkYXRhOmhlfSxUZSxqZSksR3QodGhpcyxudWxsLGcxLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VhcmNoTW9kZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aWU9PiJzZWFyY2hNb2RlImluIGllLGdldDppZT0+aWUuc2VhcmNoTW9kZSxzZXQ6KGllLENlKT0+e2llLnNlYXJjaE1vZGU9Q2V9fSxtZXRhZGF0YTpoZX0sSzEsZjIpLEd0KHRoaXMsbnVsbCwkMix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGlvbk1vZGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmllPT4ic2VsZWN0aW9uTW9kZSJpbiBpZSxnZXQ6aWU9PmllLnNlbGVjdGlvbk1vZGUsc2V0OihpZSxDZSk9PntpZS5zZWxlY3Rpb25Nb2RlPUNlfX0sbWV0YWRhdGE6aGV9LHUyLGlvKSxHdCh0aGlzLG51bGwsb28se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZElkcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aWU9PiJzZWxlY3RlZElkcyJpbiBpZSxnZXQ6aWU9PmllLnNlbGVjdGVkSWRzLHNldDooaWUsQ2UpPT57aWUuc2VsZWN0ZWRJZHM9Q2V9fSxtZXRhZGF0YTpoZX0sc28sdzUpLEd0KG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOmhlfSxudWxsLGEpLE01PXI9ZS52YWx1ZSxoZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpoZX0pfXN0YXRpYyBkZW1vPWRGdDsjZT1XZSh0aGlzLHMsImhlYWRpbmcgMSIpO2dldCBoZWFkaW5nMSgpe3JldHVybiB0aGlzLiNlfXNldCBoZWFkaW5nMShoZSl7dGhpcy4jZT1oZX0jdD0oV2UodGhpcyxsKSxXZSh0aGlzLGMsImhlYWRpbmcgMiIpKTtnZXQgaGVhZGluZzIoKXtyZXR1cm4gdGhpcy4jdH1zZXQgaGVhZGluZzIoaGUpe3RoaXMuI3Q9aGV9I2E9KFdlKHRoaXMsdSksV2UodGhpcyxoLFtdKSk7Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy4jYX1zZXQgZGF0YShoZSl7dGhpcy4jYT1oZX0jcj0oV2UodGhpcyxnKSxXZSh0aGlzLHgsdm9pZCAwKSk7Z2V0IGtleSgpe3JldHVybiB0aGlzLiNyfXNldCBrZXkoaGUpe3RoaXMuI3I9aGV9I2k9KFdlKHRoaXMsbSksV2UodGhpcyx5LHZvaWQgMCkpO2dldCBsYWJlbCgpe3JldHVybiB0aGlzLiNpfXNldCBsYWJlbChoZSl7dGhpcy4jaT1oZX0jbz0oV2UodGhpcyx3KSxXZSh0aGlzLEMsITEpKTtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy4jb31zZXQgZGlzYWJsZWQoaGUpe3RoaXMuI289aGV9I3M9KFdlKHRoaXMseiksV2UodGhpcyxfLCExKSk7Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuI3N9c2V0IHJlcXVpcmVkKGhlKXt0aGlzLiNzPWhlfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmRhdGF9c2V0IHZhbHVlKGhlKXt9Y2hhbmdlU3ViamVjdD0oV2UodGhpcywkKSxuZXcgQXQuc21hcnRyeC5yeGpzLlN1YmplY3QpOyNuPVdlKHRoaXMsTCx2b2lkIDApO2dldCBkYXRhTmFtZSgpe3JldHVybiB0aGlzLiNufXNldCBkYXRhTmFtZShoZSl7dGhpcy4jbj1oZX0jbD0oV2UodGhpcyxrKSxXZSh0aGlzLFMsITApKTtnZXQgc2VhcmNoYWJsZSgpe3JldHVybiB0aGlzLiNsfXNldCBzZWFyY2hhYmxlKGhlKXt0aGlzLiNsPWhlfSNjPShXZSh0aGlzLFQpLFdlKHRoaXMsQSxbXSkpO2dldCBkYXRhQWN0aW9ucygpe3JldHVybiB0aGlzLiNjfXNldCBkYXRhQWN0aW9ucyhoZSl7dGhpcy4jYz1oZX0jZD0oV2UodGhpcyxGKSxXZSh0aGlzLFYsW10pKTtnZXQgY29sdW1ucygpe3JldHVybiB0aGlzLiNkfXNldCBjb2x1bW5zKGhlKXt0aGlzLiNkPWhlfSNmPShXZSh0aGlzLFNlKSxXZSh0aGlzLFcsdm9pZCAwKSk7Z2V0IHJvd0tleSgpe3JldHVybiB0aGlzLiNmfXNldCByb3dLZXkoaGUpe3RoaXMuI2Y9aGV9I3U9KFdlKHRoaXMsTmUpLFdlKHRoaXMsWCwhMSkpO2dldCBhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbigpe3JldHVybiB0aGlzLiN1fXNldCBhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbihoZSl7dGhpcy4jdT1oZX0jcD0oV2UodGhpcyxJKSxXZSh0aGlzLEcsaGU9PmhlKSk7Z2V0IGRpc3BsYXlGdW5jdGlvbigpe3JldHVybiB0aGlzLiNwfXNldCBkaXNwbGF5RnVuY3Rpb24oaGUpe3RoaXMuI3A9aGV9I2g9KFdlKHRoaXMsaiksV2UodGhpcyxrZSxoZT0+aGUpKTtnZXQgcmV2ZXJzZURpc3BsYXlGdW5jdGlvbigpe3JldHVybiB0aGlzLiNofXNldCByZXZlcnNlRGlzcGxheUZ1bmN0aW9uKGhlKXt0aGlzLiNoPWhlfSNtPShXZSh0aGlzLERlKSxXZSh0aGlzLFUsdm9pZCAwKSk7Z2V0IHNlbGVjdGVkRGF0YVJvdygpe3JldHVybiB0aGlzLiNtfXNldCBzZWxlY3RlZERhdGFSb3coaGUpe3RoaXMuI209aGV9I2c9KFdlKHRoaXMsQiksV2UodGhpcyx2ZSxbXSkpO2dldCBlZGl0YWJsZUZpZWxkcygpe3JldHVybiB0aGlzLiNnfXNldCBlZGl0YWJsZUZpZWxkcyhoZSl7dGhpcy4jZz1oZX0jeD0oV2UodGhpcyx5ZSksV2UodGhpcyxuZSwhMSkpO2dldCBzaG93VmVydGljYWxMaW5lcygpe3JldHVybiB0aGlzLiN4fXNldCBzaG93VmVydGljYWxMaW5lcyhoZSl7dGhpcy4jeD1oZX0jYj0oV2UodGhpcyxyZSksV2UodGhpcyxFZSwhMSkpO2dldCBzaG93SG9yaXpvbnRhbExpbmVzKCl7cmV0dXJuIHRoaXMuI2J9c2V0IHNob3dIb3Jpem9udGFsTGluZXMoaGUpe3RoaXMuI2I9aGV9I3Y9KFdlKHRoaXMscnQpLFdlKHRoaXMsWiwhMCkpO2dldCBzaG93R3JpZCgpe3JldHVybiB0aGlzLiN2fXNldCBzaG93R3JpZChoZSl7dGhpcy4jdj1oZX1maWxlcz0oV2UodGhpcyxKKSxbXSk7ZmlsZVdlYWtNYXA9bmV3IFdlYWtNYXA7ZGF0YUNoYW5nZVN1YmplY3Q9bmV3IEF0LnNtYXJ0cngucnhqcy5TdWJqZWN0OyN5PVdlKHRoaXMsQWUsdm9pZCAwKTtnZXQgc29ydEtleSgpe3JldHVybiB0aGlzLiN5fXNldCBzb3J0S2V5KGhlKXt0aGlzLiN5PWhlfSN3PShXZSh0aGlzLEhlKSxXZSh0aGlzLGl0LG51bGwpKTtnZXQgc29ydERpcigpe3JldHVybiB0aGlzLiN3fXNldCBzb3J0RGlyKGhlKXt0aGlzLiN3PWhlfSNNPShXZSh0aGlzLHp0KSxXZSh0aGlzLFEsIiIpKTtnZXQgZmlsdGVyVGV4dCgpe3JldHVybiB0aGlzLiNNfXNldCBmaWx0ZXJUZXh0KGhlKXt0aGlzLiNNPWhlfSN6PShXZSh0aGlzLEspLFdlKHRoaXMsb3Qse30pKTtnZXQgY29sdW1uRmlsdGVycygpe3JldHVybiB0aGlzLiN6fXNldCBjb2x1bW5GaWx0ZXJzKGhlKXt0aGlzLiN6PWhlfSNrPShXZSh0aGlzLG50KSxXZSh0aGlzLHZhLCExKSk7Z2V0IHNob3dDb2x1bW5GaWx0ZXJzKCl7cmV0dXJuIHRoaXMuI2t9c2V0IHNob3dDb2x1bW5GaWx0ZXJzKGhlKXt0aGlzLiNrPWhlfSNTPShXZSh0aGlzLEtyKSxXZSh0aGlzLFRlLCExKSk7Z2V0IHN0aWNreUhlYWRlcigpe3JldHVybiB0aGlzLiNTfXNldCBzdGlja3lIZWFkZXIoaGUpe3RoaXMuI1M9aGV9I0M9KFdlKHRoaXMsamUpLFdlKHRoaXMsSzEsInRhYmxlIikpO2dldCBzZWFyY2hNb2RlKCl7cmV0dXJuIHRoaXMuI0N9c2V0IHNlYXJjaE1vZGUoaGUpe3RoaXMuI0M9aGV9X19zZWFyY2hUZXh0U3ViPVdlKHRoaXMsZjIpO19fc2VhcmNoTW9kZVN1YjsjTD1XZSh0aGlzLHUyLCJub25lIik7Z2V0IHNlbGVjdGlvbk1vZGUoKXtyZXR1cm4gdGhpcy4jTH1zZXQgc2VsZWN0aW9uTW9kZShoZSl7dGhpcy4jTD1oZX0jVD0oV2UodGhpcyxpbyksV2UodGhpcyxzbyxuZXcgU2V0KSk7Z2V0IHNlbGVjdGVkSWRzKCl7cmV0dXJuIHRoaXMuI1R9c2V0IHNlbGVjdGVkSWRzKGhlKXt0aGlzLiNUPWhlfV9yb3dJZE1hcD0oV2UodGhpcyx3NSksbmV3IFdlYWtNYXApO19yb3dJZENvdW50ZXI9MDtjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9c3RhdGljIHN0eWxlcz1mRnQ7cmVuZGVyKCl7bGV0IGllPUFycmF5LmlzQXJyYXkodGhpcy5jb2x1bW5zKSYmdGhpcy5jb2x1bW5zLmxlbmd0aD4wP3VGdCh0aGlzLmNvbHVtbnMsdGhpcy5hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbix0aGlzLmRpc3BsYXlGdW5jdGlvbix0aGlzLmRhdGEpOnVFZSh0aGlzLmRpc3BsYXlGdW5jdGlvbix0aGlzLmRhdGEpLENlPWhGdCh0aGlzLmZpbHRlclRleHQsdGhpcy5zZWFyY2hNb2RlPT09ImRhdGEiPyJkYXRhIjoidGFibGUiLGllKSx6MT1wRnQodGhpcy5kYXRhLGllLHRoaXMuc29ydEtleSx0aGlzLnNvcnREaXIsdGhpcy5maWx0ZXJUZXh0LHRoaXMuY29sdW1uRmlsdGVycyx0aGlzLnNlYXJjaE1vZGU9PT0iZGF0YSI/ImRhdGEiOiJ0YWJsZSIsQ2V8fHZvaWQgMCk7cmV0dXJuIHRoaXMuX2xhc3RWaWV3RGF0YT16MSxNYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8IS0tIHRoZSBoZWFkaW5nIHBhcnQgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmdDb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIGhlYWRpbmcxIj4ke3RoaXMubGFiZWx8fHRoaXMuaGVhZGluZzF9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmcgaGVhZGluZzIiPiR7dGhpcy5oZWFkaW5nMn08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyQWN0aW9ucyI+CiAgICAgICAgICAgICR7RWEucmVzb2x2ZUV4ZWMoYXN5bmMoKT0+e2xldCB0dD1bXTtmb3IobGV0IHQxIG9mIHRoaXMuZGF0YUFjdGlvbnMpdDEudHlwZS5pbmNsdWRlcygiaGVhZGVyIikmJnR0LnB1c2goTWA8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRlckFjdGlvbiIKICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+e3QxLmFjdGlvbkZ1bmMoe2l0ZW06dGhpcy5zZWxlY3RlZERhdGFSb3csdGFibGU6dGhpc30pfX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICR7dDEuaWNvbk5hbWU/TWA8ZGVlcy1pY29uIC5pY29uU2l6ZT0kezE0fSAuaWNvbj0ke3QxLmljb25OYW1lfT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAke3QxLm5hbWV9YDp0MS5uYW1lfQogICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtyZXR1cm4gdHR9KX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmdTZXBhcmF0aW9uIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hHcmlkIGhpZGRlbiI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJsdWNlbmUgc3ludGF4IHNlYXJjaCJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0ke2AKICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgbHVjZW5lIHN5bnRheCB0byBzZWFyY2ggZm9yIGRhdGEsIGUuZy46CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgXGBcYFxgCiAgICAgICAgICAgICAgbmFtZTogImpvaG4iIEFORCBhZ2U6IDE4CiAgICAgICAgICAgICAgXGBcYFxgCiAgICAgICAgICAgICAgCiAgICAgICAgICAgIGB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsic2VhcmNoIG1vZGUifQogICAgICAgICAgICAub3B0aW9ucz0ke1sidGFibGUiLCJkYXRhIiwic2VydmVyIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJ0YWJsZSJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0ke2AKICAgICAgICAgICAgICBUaGVyZSBhcmUgdGhyZWUgYmFzaWMgbW9kZXM6CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgKiB0YWJsZTogb25seSBzZWFyY2hlcyBkYXRhIGFscmVhZHkgaW4gdGhlIHRhYmxlCiAgICAgICAgICAgICAgKiBkYXRhOiBzZWFyY2hlcyBvcmlnaW5hbCBkYXRhLCBpZ25vcmluZyB0YWJsZSB0cmFuc2Zvcm1zCiAgICAgICAgICAgICAgKiBzZXJ2ZXI6IHNlYXJjaGVzIGRhdGEgb24gdGhlIHNlcnZlcgogICAgICAgICAgICAgIAogICAgICAgICAgICBgfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSB0aGUgYWN0dWFsIHRhYmxlIC0tPgogICAgICAgIDxzdHlsZT48L3N0eWxlPgogICAgICAgICR7dGhpcy5kYXRhLmxlbmd0aD4wP01gCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGVTY3JvbGwiPgogICAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWxlY3Rpb25Nb2RlIT09Im5vbmUiP01gCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo0MnB4OyB0ZXh0LWFsaWduOmNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGU9PT0ibXVsdGkiP01gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLmFyZUFsbFZpc2libGVTZWxlY3RlZCgpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5kZXRlcm1pbmF0ZT0ke3RoaXMuaXNWaXNpYmxlU2VsZWN0aW9uSW5kZXRlcm1pbmF0ZSgpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbmV3VmFsdWU9JHt0dD0+e3R0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc2V0U2VsZWN0VmlzaWJsZSh0dC5kZXRhaWw9PT0hMCl9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOk1gYH0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICBgOk1gYH0KICAgICAgICAgICAgICAgICAgICAke2llLmZpbHRlcih0dD0+IXR0LmhpZGRlbikubWFwKHR0PT57bGV0IHQxPSEhdHQuc29ydGFibGUsRDI9dGhpcy5nZXRBcmlhU29ydCh0dCk7cmV0dXJuIE1gCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPSJjb2x1bW5oZWFkZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXNvcnQ9JHtEMn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSIke3QxPyJjdXJzb3I6IHBvaW50ZXI7IjoiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dDE/dGhpcy50b2dnbGVTb3J0KHR0KTpudWxsfQogICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dHQuaGVhZGVyPz90dC5rZXl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyU29ydEluZGljYXRvcih0dCl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5gfSl9CiAgICAgICAgICAgICAgICAgICAgJHsoKCk9PntpZih0aGlzLmRhdGFBY3Rpb25zJiZ0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aD4wKXJldHVybiBNYCA8dGggY2xhc3M9ImFjdGlvbnNDb2wiPkFjdGlvbnM8L3RoPiBgfSkoKX0KICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnNob3dDb2x1bW5GaWx0ZXJzP01gPHRyIGNsYXNzPSJmaWx0ZXJzUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGUhPT0ibm9uZSI/TWA8dGggc3R5bGU9IndpZHRoOjQycHg7Ij48L3RoPmA6TWBgfQogICAgICAgICAgICAgICAgICAgICAgICAke2llLmZpbHRlcih0dD0+IXR0LmhpZGRlbikubWFwKHR0PT57bGV0IHQxPVN0cmluZyh0dC5rZXkpO3JldHVybiB0dC5maWx0ZXJhYmxlPT09ITE/TWA8dGg+PC90aD5gOk1gPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IkZpbHRlci4uLiIgLnZhbHVlPSR7dGhpcy5jb2x1bW5GaWx0ZXJzW3QxXXx8IiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlucHV0PSR7RDI9PnRoaXMuc2V0Q29sdW1uRmlsdGVyKHQxLEQyLnRhcmdldC52YWx1ZSl9IC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPmB9KX0KICAgICAgICAgICAgICAgICAgICAgICAgJHsoKCk9PntpZih0aGlzLmRhdGFBY3Rpb25zJiZ0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aD4wKXJldHVybiBNYCA8dGg+PC90aD4gYH0pKCl9CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPmA6TWBgfQogICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgJHt6MS5tYXAoKHR0LHQxKT0+e2xldCBEMj1RZT0+UWUudGFnTmFtZT09PSJUUiI/UWU6RDIoUWUucGFyZW50RWxlbWVudCk7cmV0dXJuIE1gCiAgICAgICAgICAgICAgICAgICAgICA8dHIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PntpZih0aGlzLnNlbGVjdGVkRGF0YVJvdz10dCx0aGlzLnNlbGVjdGlvbk1vZGU9PT0ic2luZ2xlIil7bGV0IFFlPXRoaXMuZ2V0Um93SWQodHQpO3RoaXMuc2VsZWN0ZWRJZHMuY2xlYXIoKSx0aGlzLnNlbGVjdGVkSWRzLmFkZChRZSksdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCl9fX0KICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdlbnRlcj0ke2FzeW5jIFFlPT57UWUucHJldmVudERlZmF1bHQoKSxRZS5zdG9wUHJvcGFnYXRpb24oKTtsZXQgVDE9RDIoUWUudGFyZ2V0KTtzZXRUaW1lb3V0KCgpPT57VDEuY2xhc3NMaXN0LmFkZCgiaGFzQXR0YWNobWVudCIpfSwwKX19CiAgICAgICAgICAgICAgICAgICAgICAgIEBkcmFnbGVhdmU9JHthc3luYyBRZT0+e1FlLnByZXZlbnREZWZhdWx0KCksUWUuc3RvcFByb3BhZ2F0aW9uKCksRDIoUWUudGFyZ2V0KS5jbGFzc0xpc3QucmVtb3ZlKCJoYXNBdHRhY2htZW50Iil9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ292ZXI9JHthc3luYyBRZT0+e1FlLnByZXZlbnREZWZhdWx0KCl9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJvcD0ke2FzeW5jIFFlPT57UWUucHJldmVudERlZmF1bHQoKTtsZXQgVDE9W107Zm9yKGxldCBPYSBvZiBBcnJheS5mcm9tKFFlLmRhdGFUcmFuc2Zlci5maWxlcykpdGhpcy5maWxlcy5wdXNoKE9hKSxUMS5wdXNoKE9hKSx0aGlzLnJlcXVlc3RVcGRhdGUoKTtsZXQgRTI9dGhpcy5maWxlV2Vha01hcC5nZXQodHQpO0UyP0UyLnB1c2goLi4uVDEpOnRoaXMuZmlsZVdlYWtNYXAuc2V0KHR0LFQxKX19CiAgICAgICAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0ke2FzeW5jIFFlPT57V3Qub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoUWUsdGhpcy5nZXRBY3Rpb25zRm9yVHlwZSgiY29udGV4dG1lbnUiKS5tYXAoVDE9Pih7bmFtZTpUMS5uYW1lLGljb25OYW1lOlQxLmljb25OYW1lLGFjdGlvbjphc3luYygpPT4oYXdhaXQgVDEuYWN0aW9uRnVuYyh7aXRlbTp0dCx0YWJsZTp0aGlzfSksbnVsbCl9KSkpfX0KICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9IiR7dHQ9PT10aGlzLnNlbGVjdGVkRGF0YVJvdz8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGUhPT0ibm9uZSI/TWA8dGQgc3R5bGU9IndpZHRoOjQycHg7IHRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pc1Jvd1NlbGVjdGVkKHR0KX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbmV3VmFsdWU9JHtRZT0+e1FlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc2V0Um93U2VsZWN0ZWQodHQsUWUuZGV0YWlsPT09ITApfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+YDpNYGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7aWUuZmlsdGVyKFFlPT4hUWUuaGlkZGVuKS5tYXAoKFFlLFQxKT0+e2xldCBFMj11NSh0dCxRZSx0aGlzLmRpc3BsYXlGdW5jdGlvbiksT2E9UWUucmVuZGVyZXI/UWUucmVuZGVyZXIoRTIsdHQse3Jvd0luZGV4OnQxLGNvbEluZGV4OlQxLGNvbHVtbjpRZX0pOkUyLHo1PVN0cmluZyhRZS5rZXkpO3JldHVybiBNYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZGJsY2xpY2s9JHtHST0+e2xldCBrNT10aGlzLmRhdGFBY3Rpb25zLmZpbmQoWUk9PllJLnR5cGUuaW5jbHVkZXMoImRvdWJsZUNsaWNrIikpO3RoaXMuZWRpdGFibGVGaWVsZHMuaW5jbHVkZXMoejUpP3RoaXMuaGFuZGxlQ2VsbEVkaXRpbmcoR0ksdHQsejUpOms1JiZrNS5hY3Rpb25GdW5jKHtpdGVtOnR0LHRhYmxlOnRoaXN9KX19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbm5lckNlbGxDb250YWluZXIiPiR7T2F9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfSl9CiAgICAgICAgICAgICAgICAgICAgICAgICR7KCgpPT57aWYodGhpcy5kYXRhQWN0aW9ucyYmdGhpcy5kYXRhQWN0aW9ucy5sZW5ndGg+MClyZXR1cm4gTWAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJhY3Rpb25zQ29sIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25zQ29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5nZXRBY3Rpb25zRm9yVHlwZSgiaW5Sb3ciKS5tYXAoUWU9Pk1gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImFjdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpPT5RZS5hY3Rpb25GdW5jKHtpdGVtOnR0LHRhYmxlOnRoaXN9KX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1FlLmljb25OYW1lP01gIDxkZWVzLWljb24gLmljb249JHtRZS5pY29uTmFtZX0+PC9kZWVzLWljb24+IGA6UWUubmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfSkoKX0KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+YH0pfQogICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOk1gIDxkaXYgY2xhc3M9Im5vRGF0YVNldCI+Tm8gZGF0YSBzZXQhPC9kaXY+IGB9CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlU3RhdGlzdGljcyI+CiAgICAgICAgICAgICR7dGhpcy5kYXRhLmxlbmd0aH0gJHt0aGlzLmRhdGFOYW1lfHwiZGF0YSByb3dzIn0gKHRvdGFsKSB8CiAgICAgICAgICAgICR7dGhpcy5zZWxlY3RlZERhdGFSb3c/YCMgJHt0aGlzLmRhdGEuaW5kZXhPZih0aGlzLnNlbGVjdGVkRGF0YVJvdykrMX1gOiJObyJ9CiAgICAgICAgICAgIHNlbGVjdGVkCiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3RlckFjdGlvbnMiPgogICAgICAgICAgICAke0VhLnJlc29sdmVFeGVjKGFzeW5jKCk9PntsZXQgdHQ9W107Zm9yKGxldCB0MSBvZiB0aGlzLmRhdGFBY3Rpb25zKXQxLnR5cGUuaW5jbHVkZXMoImZvb3RlciIpJiZ0dC5wdXNoKE1gPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmb290ZXJBY3Rpb24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9Pnt0MS5hY3Rpb25GdW5jKHtpdGVtOnRoaXMuc2VsZWN0ZWREYXRhUm93LHRhYmxlOnRoaXN9KX19CiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke3QxLmljb25OYW1lP01gPGRlZXMtaWNvbiAuaWNvblNpemU9JHsxNH0gLmljb249JHt0MS5pY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0MS5uYW1lfWA6dDEubmFtZX0KICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7cmV0dXJuIHR0fSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZCgpe31hc3luYyB1cGRhdGVkKGhlKXtzdXBlci51cGRhdGVkKGhlKSx0aGlzLmRldGVybWluZUNvbHVtbldpZHRocygpLHRoaXMuc2VhcmNoYWJsZSYmKHRoaXMuZGF0YUFjdGlvbnMuZmluZChDZT0+Q2UudHlwZS5pbmNsdWRlcygiaGVhZGVyIikmJkNlLm5hbWU9PT0iU2VhcmNoIil8fCh0aGlzLmRhdGFBY3Rpb25zLnVuc2hpZnQoe25hbWU6IlNlYXJjaCIsaWNvbk5hbWU6Im1hZ25pZnlpbmdHbGFzcyIsdHlwZTpbImhlYWRlciJdLGFjdGlvbkZ1bmM6YXN5bmMoKT0+e2NvbnNvbGUubG9nKCJvcGVuIHNlYXJjaCIpLHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCIpLmNsYXNzTGlzdC50b2dnbGUoImhpZGRlbiIpfX0pLGNvbnNvbGUubG9nKHRoaXMuZGF0YUFjdGlvbnMpLHRoaXMucmVxdWVzdFVwZGF0ZSgpKSx0aGlzLndpcmVTZWFyY2hJbnB1dHMoKSl9X19kZWJvdW5jZVRpbWVyO2RlYm91bmNlUnVuKGhlLGllPTIwMCl7dGhpcy5fX2RlYm91bmNlVGltZXImJmNsZWFyVGltZW91dCh0aGlzLl9fZGVib3VuY2VUaW1lciksdGhpcy5fX2RlYm91bmNlVGltZXI9c2V0VGltZW91dChoZSxpZSl9d2lyZVNlYXJjaElucHV0cygpe2xldCBoZT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5zZWFyY2hHcmlkIGRlZXMtaW5wdXQtdGV4dCIpLGllPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnNlYXJjaEdyaWQgZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZSIpO2hlJiYhdGhpcy5fX3NlYXJjaFRleHRTdWImJih0aGlzLl9fc2VhcmNoVGV4dFN1Yj1oZS5jaGFuZ2VTdWJqZWN0LnN1YnNjcmliZShDZT0+e2xldCB6MT1DZT8udmFsdWU/PyIiO3RoaXMuZGVib3VuY2VSdW4oKCk9Pnt0aGlzLnNlYXJjaE1vZGU9PT0ic2VydmVyIj90aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2hSZXF1ZXN0Iix7ZGV0YWlsOntxdWVyeTp6MSxtb2RlOiJzZXJ2ZXIifSxidWJibGVzOiEwfSkpOnRoaXMuc2V0RmlsdGVyVGV4dCh6MSl9KX0pKSxpZSYmIXRoaXMuX19zZWFyY2hNb2RlU3ViJiYodGhpcy5fX3NlYXJjaE1vZGVTdWI9aWUuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoQ2U9PntsZXQgejE9Q2U/LnNlbGVjdGVkT3B0aW9ufHxDZT8udmFsdWV8fCJ0YWJsZSI7aWYoejE9PT0idGFibGUifHx6MT09PSJkYXRhInx8ejE9PT0ic2VydmVyIil7dGhpcy5zZWFyY2hNb2RlPXoxO2xldCB0dD1oZT8udmFsdWU/PyIiO3RoaXMuZGVib3VuY2VSdW4oKCk9Pnt0aGlzLnNlYXJjaE1vZGU9PT0ic2VydmVyIj90aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2hSZXF1ZXN0Iix7ZGV0YWlsOntxdWVyeTp0dCxtb2RlOiJzZXJ2ZXIifSxidWJibGVzOiEwfSkpOnRoaXMuc2V0RmlsdGVyVGV4dCh0dCl9KX19KSl9YXN5bmMgZGV0ZXJtaW5lQ29sdW1uV2lkdGhzKCl7YXdhaXQoYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2UpLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7bGV0IGllPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJ0YWJsZSIpO2lmKCFpZSlyZXR1cm47bGV0IENlPWllLnJvd3NbMF0uY2VsbHMsejE9YXN5bmModHQsdDE9ITEpPT57bGV0IEQyPVZlLmRlZmVyKCksUWU9Q2VbdHRdLFQxPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKFFlKS53aWR0aDtpZihRZS50ZXh0Q29udGVudC5pbmNsdWRlcygiQWN0aW9ucyIpKXtsZXQgRTI9dGhpcy5kYXRhQWN0aW9ucy5maWx0ZXIoT2E9Pk9hLnR5cGUuaW5jbHVkZXMoImluUm93IikpLmxlbmd0aCozNjtRZS5zdHlsZS53aWR0aD1gJHtNYXRoLm1heChFMiw2OCl9cHhgfWVsc2UgUWUuc3R5bGUud2lkdGg9VDE7dDEmJihyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntEMi5yZXNvbHZlKCl9KSxhd2FpdCBEMi5wcm9taXNlKX07Q2VbQ2UubGVuZ3RoLTFdLnRleHRDb250ZW50LmluY2x1ZGVzKCJBY3Rpb25zIikmJmF3YWl0IHoxKENlLmxlbmd0aC0xLCEwKTtmb3IobGV0IHR0PTA7dHQ8Q2UubGVuZ3RoO3R0KyspQ2VbdHRdLnRleHRDb250ZW50LmluY2x1ZGVzKCJBY3Rpb25zIil8fGF3YWl0IHoxKHR0KTtpZS5zdHlsZS50YWJsZUxheW91dD0iZml4ZWQifXRvZ2dsZVNvcnQoaGUpe2xldCBpZT1TdHJpbmcoaGUua2V5KTt0aGlzLnNvcnRLZXkhPT1pZT8odGhpcy5zb3J0S2V5PWllLHRoaXMuc29ydERpcj0iYXNjIik6dGhpcy5zb3J0RGlyPT09ImFzYyI/dGhpcy5zb3J0RGlyPSJkZXNjIjp0aGlzLnNvcnREaXI9PT0iZGVzYyI/KHRoaXMuc29ydERpcj1udWxsLHRoaXMuc29ydEtleT12b2lkIDApOnRoaXMuc29ydERpcj0iYXNjIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzb3J0Q2hhbmdlIix7ZGV0YWlsOntrZXk6dGhpcy5zb3J0S2V5LGRpcjp0aGlzLnNvcnREaXJ9LGJ1YmJsZXM6ITB9KSksdGhpcy5yZXF1ZXN0VXBkYXRlKCl9Z2V0QXJpYVNvcnQoaGUpe3JldHVybiBTdHJpbmcoaGUua2V5KSE9PXRoaXMuc29ydEtleXx8IXRoaXMuc29ydERpcj8ibm9uZSI6dGhpcy5zb3J0RGlyPT09ImFzYyI/ImFzY2VuZGluZyI6ImRlc2NlbmRpbmcifXJlbmRlclNvcnRJbmRpY2F0b3IoaGUpe3JldHVybiBTdHJpbmcoaGUua2V5KSE9PXRoaXMuc29ydEtleXx8IXRoaXMuc29ydERpcj9NYGA6TWA8c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6NnB4OyBvcGFjaXR5OjAuNzsiPiR7dGhpcy5zb3J0RGlyPT09ImFzYyI/Ilx1MjVCMiI6Ilx1MjVCQyJ9PC9zcGFuPmB9c2V0RmlsdGVyVGV4dChoZSl7bGV0IGllPXRoaXMuZmlsdGVyVGV4dDt0aGlzLmZpbHRlclRleHQ9aGU/PyIiLGllIT09dGhpcy5maWx0ZXJUZXh0JiYodGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsdGVyQ2hhbmdlIix7ZGV0YWlsOnt0ZXh0OnRoaXMuZmlsdGVyVGV4dCxjb2x1bW5zOnsuLi50aGlzLmNvbHVtbkZpbHRlcnN9fSxidWJibGVzOiEwfSkpLHRoaXMucmVxdWVzdFVwZGF0ZSgpKX1zZXRDb2x1bW5GaWx0ZXIoaGUsaWUpe3RoaXMuY29sdW1uRmlsdGVycz17Li4udGhpcy5jb2x1bW5GaWx0ZXJzLFtoZV06aWV9LHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbHRlckNoYW5nZSIse2RldGFpbDp7dGV4dDp0aGlzLmZpbHRlclRleHQsY29sdW1uczp7Li4udGhpcy5jb2x1bW5GaWx0ZXJzfX0sYnViYmxlczohMH0pKSx0aGlzLnJlcXVlc3RVcGRhdGUoKX1nZXRSb3dJZChoZSl7aWYodGhpcy5yb3dLZXkpcmV0dXJuIHR5cGVvZiB0aGlzLnJvd0tleT09ImZ1bmN0aW9uIj90aGlzLnJvd0tleShoZSk6U3RyaW5nKGhlW3RoaXMucm93S2V5XSk7bGV0IGllPWhlO3JldHVybiB0aGlzLl9yb3dJZE1hcC5oYXMoaWUpfHx0aGlzLl9yb3dJZE1hcC5zZXQoaWUsU3RyaW5nKCsrdGhpcy5fcm93SWRDb3VudGVyKSksdGhpcy5fcm93SWRNYXAuZ2V0KGllKX1pc1Jvd1NlbGVjdGVkKGhlKXtyZXR1cm4gdGhpcy5zZWxlY3RlZElkcy5oYXModGhpcy5nZXRSb3dJZChoZSkpfXRvZ2dsZVJvd1NlbGVjdGVkKGhlKXtsZXQgaWU9dGhpcy5nZXRSb3dJZChoZSk7dGhpcy5zZWxlY3Rpb25Nb2RlPT09InNpbmdsZSI/KHRoaXMuc2VsZWN0ZWRJZHMuY2xlYXIoKSx0aGlzLnNlbGVjdGVkSWRzLmFkZChpZSkpOnRoaXMuc2VsZWN0aW9uTW9kZT09PSJtdWx0aSImJih0aGlzLnNlbGVjdGVkSWRzLmhhcyhpZSk/dGhpcy5zZWxlY3RlZElkcy5kZWxldGUoaWUpOnRoaXMuc2VsZWN0ZWRJZHMuYWRkKGllKSksdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCl9c2V0Um93U2VsZWN0ZWQoaGUsaWUpe2xldCBDZT10aGlzLmdldFJvd0lkKGhlKTt0aGlzLnNlbGVjdGlvbk1vZGU9PT0ic2luZ2xlIj8odGhpcy5zZWxlY3RlZElkcy5jbGVhcigpLGllJiZ0aGlzLnNlbGVjdGVkSWRzLmFkZChDZSkpOnRoaXMuc2VsZWN0aW9uTW9kZT09PSJtdWx0aSImJihpZT90aGlzLnNlbGVjdGVkSWRzLmFkZChDZSk6dGhpcy5zZWxlY3RlZElkcy5kZWxldGUoQ2UpKSx0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLnJlcXVlc3RVcGRhdGUoKX1hcmVBbGxWaXNpYmxlU2VsZWN0ZWQoKXtsZXQgaGU9dGhpcy5fbGFzdFZpZXdEYXRhfHxbXTtpZihoZS5sZW5ndGg9PT0wKXJldHVybiExO2ZvcihsZXQgaWUgb2YgaGUpaWYoIXRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQoaWUpKSlyZXR1cm4hMTtyZXR1cm4hMH1pc1Zpc2libGVTZWxlY3Rpb25JbmRldGVybWluYXRlKCl7bGV0IGhlPXRoaXMuX2xhc3RWaWV3RGF0YXx8W107aWYoaGUubGVuZ3RoPT09MClyZXR1cm4hMTtsZXQgaWU9MDtmb3IobGV0IENlIG9mIGhlKXRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQoQ2UpKSYmaWUrKztyZXR1cm4gaWU+MCYmaWU8aGUubGVuZ3RofXNldFNlbGVjdFZpc2libGUoaGUpe2xldCBpZT10aGlzLl9sYXN0Vmlld0RhdGF8fFtdO2lmKGhlKWZvcihsZXQgQ2Ugb2YgaWUpdGhpcy5zZWxlY3RlZElkcy5hZGQodGhpcy5nZXRSb3dJZChDZSkpO2Vsc2UgZm9yKGxldCBDZSBvZiBpZSl0aGlzLnNlbGVjdGVkSWRzLmRlbGV0ZSh0aGlzLmdldFJvd0lkKENlKSk7dGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCl9ZW1pdFNlbGVjdGlvbkNoYW5nZSgpe2xldCBoZT1BcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRJZHMpLGllPXRoaXMuZGF0YS5maWx0ZXIoQ2U9PnRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQoQ2UpKSk7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VsZWN0aW9uQ2hhbmdlIix7ZGV0YWlsOntzZWxlY3RlZElkczpoZSxzZWxlY3RlZFJvd3M6aWV9LGJ1YmJsZXM6ITB9KSl9Z2V0QWN0aW9uc0ZvclR5cGUoaGUpe2xldCBpZT1bXTtmb3IobGV0IENlIG9mIHRoaXMuZGF0YUFjdGlvbnMpQ2UudHlwZS5pbmNsdWRlcyhoZSkmJmllLnB1c2goQ2UpO3JldHVybiBpZX1hc3luYyBoYW5kbGVDZWxsRWRpdGluZyhoZSxpZSxDZSl7YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7bGV0IHoxPWhlLnRhcmdldCx0dD16MS5zdHlsZS5jb2xvcjt6MS5zdHlsZS5jb2xvcj0idHJhbnNwYXJlbnQiO2xldCBEMj10aGlzLmRpc3BsYXlGdW5jdGlvbihpZSlbQ2VdPz9pZVtDZV0/PyIiLFFlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7UWUudHlwZT0idGV4dCIsUWUudmFsdWU9RDI7bGV0IFQxPWFzeW5jKEUyPSEwLE9hPSExKT0+e0UyJiZRZS5ibHVyKCksT2EmJihpZVtDZV09UWUudmFsdWUsdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpLFFlLnJlbW92ZSgpLHoxLnN0eWxlLmNvbG9yPXR0LHRoaXMucmVxdWVzdFVwZGF0ZSgpfTtRZS5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+e1QxKCExLCExKX0pLFFlLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEUyPT57RTIua2V5PT09IkVudGVyIiYmVDEoITAsITApfSksejEuYXBwZW5kQ2hpbGQoUWUpLFFlLmZvY3VzKCl9c3RhdGlje1dlKHIsYSl9fTtyZXR1cm4gTTU9cn0pKCk7ZmUoKTt2YXIgbUZ0PSgpPT5NYAogIDxzdHlsZT4KICAgICR7dGVgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5mb3JtLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2UgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiLCJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjIpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDE0Mi4xIDcwLjYlIDM1LjMlKSIsImhzbCgxNDIuMSA3MC42JSA2NS4zJSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5zdGF0dXMtbWVzc2FnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4xKSIsImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDcyLjIlIDQwLjYlKSIsImhzbCgwIDcyLjIlIDYwLjYlKSIpfTsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpLGE9dC5xdWVyeVNlbGVjdG9yKCIuZm9ybS1vdXRwdXQiKTtlJiZhJiYoZS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsYXN5bmMgaT0+e2xldCBvPWkuZGV0YWlsLmRhdGE7Y29uc29sZS5sb2coIkZvcm0gc3VibWl0dGVkIHdpdGggZGF0YToiLG8pLGUuc2V0U3RhdHVzKCJwZW5kaW5nIiwiUHJvY2Vzc2luZyB5b3VyIHJlZ2lzdHJhdGlvbi4uLiIpLGEuaW5uZXJIVE1MPWA8c3Ryb25nPlN1Ym1pdHRlZCBEYXRhOjwvc3Ryb25nPgoke0pTT04uc3RyaW5naWZ5KG8sbnVsbCwyKX1gLGF3YWl0IHN0LnBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigyZTMpLGUuc2V0U3RhdHVzKCJzdWNjZXNzIiwiUmVnaXN0cmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhIiksYXdhaXQgc3QucGx1Z2lucy5zbWFydGRlbGF5LmRlbGF5Rm9yKDJlMyksZS5yZXNldCgpLGEuaW5uZXJIVE1MPSI8ZW0+Rm9ybSBoYXMgYmVlbiByZXNldDwvZW0+In0pLGUucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0LCBkZWVzLWlucHV0LWRyb3Bkb3duLCBkZWVzLWlucHV0LWNoZWNrYm94IikuZm9yRWFjaChpPT57aS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwoKT0+e2NvbnNvbGUubG9nKCJGaWVsZCBjaGFuZ2VkOiIsaS5nZXRBdHRyaWJ1dGUoImtleSIpKX0pfSkpfX0+CiAgICAgIDxkZWVzLXBhbmVsIC5oZWFkaW5nPSJDb21wbGV0ZSBGb3JtIEV4YW1wbGUiIC5kZXNjcmlwdGlvbj0iQSBjb21wcmVoZW5zaXZlIGZvcm0gd2l0aCB2YXJpb3VzIGlucHV0IHR5cGVzLCB2YWxpZGF0aW9uLCBhbmQgZm9ybSBzdWJtaXNzaW9uIGhhbmRsaW5nIj4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9IAogICAgICAgICAgICBrZXk9ImZpcnN0TmFtZSIgCiAgICAgICAgICAgIGxhYmVsPSJGaXJzdCBOYW1lIgogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiWW91ciBnaXZlbiBuYW1lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9IAogICAgICAgICAgICBrZXk9Imxhc3ROYW1lIiAKICAgICAgICAgICAgbGFiZWw9Ikxhc3QgTmFtZSIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9IAogICAgICAgICAgICBrZXk9ImVtYWlsIiAKICAgICAgICAgICAgbGFiZWw9IkVtYWlsIEFkZHJlc3MiCiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJXZSB3aWxsIHVzZSB0aGlzIHRvIGNvbnRhY3QgeW91In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIGtleT0iY291bnRyeSIKICAgICAgICAgICAgLmxhYmVsPSR7IkNvdW50cnkifQogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJVbml0ZWQgU3RhdGVzIixrZXk6InVzIn0se29wdGlvbjoiQ2FuYWRhIixrZXk6ImNhIn0se29wdGlvbjoiR2VybWFueSIsa2V5OiJkZSJ9LHtvcHRpb246IkZyYW5jZSIsa2V5OiJmciJ9LHtvcHRpb246IlVuaXRlZCBLaW5nZG9tIixrZXk6InVrIn1dfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAga2V5PSJwYXNzd29yZCIKICAgICAgICAgICAgbGFiZWw9IlBhc3N3b3JkIgogICAgICAgICAgICBpc1Bhc3N3b3JkQm9vbAogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTWluaW11bSA4IGNoYXJhY3RlcnMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveAogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAga2V5PSJ0ZXJtcyIKICAgICAgICAgICAgbGFiZWw9IkkgYWdyZWUgdG8gdGhlIFRlcm1zIGFuZCBDb25kaXRpb25zIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAga2V5PSJuZXdzbGV0dGVyIgogICAgICAgICAgICBsYWJlbD0iU2VuZCBtZSBwcm9tb3Rpb25hbCBlbWFpbHMiCiAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q3JlYXRlIEFjY291bnQ8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1vdXRwdXQiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGNvbGxlY3RlZCBkYXRhLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTtlJiYoY29uc29sZS5sb2coIkhvcml6b250YWwgZm9ybSBsYXlvdXQgYWN0aXZlIiksZS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIscj0+e2xldCBpPXIuZGV0YWlsLmRhdGE7Y29uc29sZS5sb2coIkZpbHRlciBhcHBsaWVkOiIsaSk7bGV0IG89TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEwMCkrMTtjb25zb2xlLmxvZyhgRm91bmQgJHtvfSByZXN1bHRzIHdpdGggZmlsdGVyczpgLGkpfSksZS5xdWVyeVNlbGVjdG9yQWxsKCJba2V5XSIpLmZvckVhY2gocj0+e3IuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsYXN5bmMoKT0+e2xldCBpPWF3YWl0IGUuY29sbGVjdEZvcm1EYXRhKCk7Y29uc29sZS5sb2coIkxpdmUgZmlsdGVyIHVwZGF0ZToiLGkpfSl9KSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9Ikhvcml6b250YWwgRm9ybSBMYXlvdXQiIC5kZXNjcmlwdGlvbj0iQ29tcGFjdCBmb3JtIHdpdGggaW5wdXRzIGFycmFuZ2VkIGhvcml6b250YWxseSAtIHBlcmZlY3QgZm9yIGZpbHRlcnMgYW5kIHF1aWNrIGZvcm1zIj4KICAgICAgICA8ZGVlcy1mb3JtIGhvcml6b250YWwtbGF5b3V0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAga2V5PSJzZWFyY2giIAogICAgICAgICAgICBsYWJlbD0iU2VhcmNoIgogICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIga2V5d29yZHMuLi4iCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iY2F0ZWdvcnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHshMX0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiQWxsIixrZXk6ImFsbCJ9LHtvcHRpb246IlByb2R1Y3RzIixrZXk6InByb2R1Y3RzIn0se29wdGlvbjoiU2VydmljZXMiLGtleToic2VydmljZXMifSx7b3B0aW9uOiJTdXBwb3J0IixrZXk6InN1cHBvcnQifV19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICBrZXk9InNvcnQiCiAgICAgICAgICAgIC5sYWJlbD0keyJTb3J0IEJ5In0KICAgICAgICAgICAgLmVuYWJsZVNlYXJjaD0keyExfQogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJOZXdlc3QiLGtleToibmV3ZXN0In0se29wdGlvbjoiUG9wdWxhciIsa2V5OiJwb3B1bGFyIn0se29wdGlvbjoiUHJpY2U6IExvdyB0byBIaWdoIixrZXk6InByaWNlX2FzYyJ9LHtvcHRpb246IlByaWNlOiBIaWdoIHRvIExvdyIsa2V5OiJwcmljZV9kZXNjIn1dfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAga2V5PSJpblN0b2NrIgogICAgICAgICAgICBsYWJlbD0iSW4gU3RvY2sgT25seSIKICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpLGE9dC5xdWVyeVNlbGVjdG9yKCIjc3RhdHVzLWRpc3BsYXkiKTtpZihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIixhc3luYyBpPT57bGV0IG89aS5kZXRhaWwuZGF0YTtjb25zb2xlLmxvZygiQWR2YW5jZWQgZm9ybSBkYXRhOiIsbyksZS5zZXRTdGF0dXMoInBlbmRpbmciLCJWYWxpZGF0aW5nIHlvdXIgaW5mb3JtYXRpb24uLi4iKSxhd2FpdCBzdC5wbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMTUwMCksby5pYmFuJiZvLmliYW4ubGVuZ3RoPjE1PyhlLnNldFN0YXR1cygic3VjY2VzcyIsIkFwcGxpY2F0aW9uIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHkhIiksYSYmKGEuY2xhc3NOYW1lPSJzdGF0dXMtbWVzc2FnZSBzdWNjZXNzIixhLnRleHRDb250ZW50PSJcdTI3MTMgWW91ciBhcHBsaWNhdGlvbiBoYXMgYmVlbiBzdWJtaXR0ZWQuIFdlIHdpbGwgY29udGFjdCB5b3Ugc29vbi4iKSk6KGUuc2V0U3RhdHVzKCJlcnJvciIsIlBsZWFzZSBjaGVjayB5b3VyIElCQU4iKSxhJiYoYS5jbGFzc05hbWU9InN0YXR1cy1tZXNzYWdlIGVycm9yIixhLnRleHRDb250ZW50PSJcdTI3MTcgSW52YWxpZCBJQkFOIGZvcm1hdC4gUGxlYXNlIGNoZWNrIGFuZCB0cnkgYWdhaW4uIikpLGNvbnNvbGUubG9nKCJGb3JtIGRhdGEgbG9nZ2VkOiIsbyl9KTtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZmlsZXVwbG9hZCIpO3ImJnIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixpPT57bGV0IG89aS5kZXRhaWw/LmZpbGVzfHxbXTtjb25zb2xlLmxvZyhgJHtvLmxlbmd0aH0gZmlsZShzKSBzZWxlY3RlZCBmb3IgdXBsb2FkYCl9KX19fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9IkFkdmFuY2VkIEZvcm0gRmVhdHVyZXMiIC5kZXNjcmlwdGlvbj0iRm9ybSB3aXRoIHNwZWNpYWxpemVkIGlucHV0IHR5cGVzIGFuZCBjb21wbGV4IHZhbGlkYXRpb24iPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgICBrZXk9ImliYW4iCiAgICAgICAgICAgIGxhYmVsPSJJQkFOIgogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUKICAgICAgICAgICAga2V5PSJwaG9uZSIKICAgICAgICAgICAgbGFiZWw9IlBob25lIE51bWJlciIKICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICBrZXk9InByZWZlcmVuY2VzIgogICAgICAgICAgICAubGFiZWw9JHsiTm90aWZpY2F0aW9uIFByZWZlcmVuY2VzIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkVtYWlsIiwiU01TIiwiUHVzaCIsIkluLUFwcCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW1haWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGlzZWxlY3QKICAgICAgICAgICAga2V5PSJpbnRlcmVzdHMiCiAgICAgICAgICAgIC5sYWJlbD0keyJBcmVhcyBvZiBJbnRlcmVzdCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IlRlY2hub2xvZ3kiLGtleToidGVjaCJ9LHtvcHRpb246IkRlc2lnbiIsa2V5OiJkZXNpZ24ifSx7b3B0aW9uOiJCdXNpbmVzcyIsa2V5OiJidXNpbmVzcyJ9LHtvcHRpb246Ik1hcmtldGluZyIsa2V5OiJtYXJrZXRpbmcifSx7b3B0aW9uOiJTYWxlcyIsa2V5OiJzYWxlcyJ9XX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGlzZWxlY3Q+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAga2V5PSJkb2N1bWVudHMiCiAgICAgICAgICAgIC5sYWJlbD0keyJVcGxvYWQgRG9jdW1lbnRzIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlBERiwgRE9DLCBvciBET0NYIGZpbGVzIHVwIHRvIDEwTUIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TdWJtaXQgQXBwbGljYXRpb248L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0ic3RhdHVzLWRpc3BsYXkiPjwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7ZmUoKTtTdCgpO3ZhciBnRnQ9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxoRWU9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LHhGdD1bR0RlLFlEZSxaRGUsdEVlLGFFZSxuRWUsbEVlLGNFZSxLRGUsSkRlLFhEZSxmRWUscEVlXSxpczE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWZvcm0iKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXTt2YXIgZj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpCb29sZWFuLHJlZmxlY3Q6ITAsYXR0cmlidXRlOiJob3Jpem9udGFsLWxheW91dCJ9KV0sZ0Z0KHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaG9yaXpvbnRhbExheW91dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dT0+Imhvcml6b250YWxMYXlvdXQiaW4gdSxnZXQ6dT0+dS5ob3Jpem9udGFsTGF5b3V0LHNldDoodSxkKT0+e3UuaG9yaXpvbnRhbExheW91dD1kfX0sbWV0YWRhdGE6Y30scyxsKSxnRnQobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6Y30sbnVsbCxhKSxmPXI9ZS52YWx1ZSxjJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmN9KX1zdGF0aWMgZGVtbz1tRnQ7c3RhdGljIGRlbW9Hcm91cD0iRm9ybSI7bmFtZT0ibXlmb3JtIjtjaGFuZ2VTdWJqZWN0PW5ldyBBdC5zbWFydHJ4LnJ4anMuU3ViamVjdDtyZWFkeURlZmVycmVkPUF0LnNtYXJ0cHJvbWlzZS5kZWZlcigpOyNlPWhFZSh0aGlzLHMsITEpO2dldCBob3Jpem9udGFsTGF5b3V0KCl7cmV0dXJuIHRoaXMuI2V9c2V0IGhvcml6b250YWxMYXlvdXQoYyl7dGhpcy4jZT1jfXJlbmRlcigpe3JldHVybiBNYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogY29udGVudHM7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZCgpe2xldCBjPXRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCk7dGhpcy51cGRhdGVSZXF1aXJlZFN0YXR1cygpLHRoaXMudXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCk7Zm9yKGxldCB1IG9mIGMpdS5jaGFuZ2VTdWJqZWN0LnN1YnNjcmliZShhc3luYygpPT57bGV0IGQ9YXdhaXQgdGhpcy5jb2xsZWN0Rm9ybURhdGEoKTt0aGlzLmNoYW5nZVN1YmplY3QubmV4dChkKSxjb25zb2xlLmxvZyhkKSx0aGlzLnVwZGF0ZVJlcXVpcmVkU3RhdHVzKCl9KTthd2FpdCB0aGlzLmFkZEJlaGF2aW91cnMoKSx0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpfWdldEZvcm1FbGVtZW50cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbHRlcihjPT54RnQuaW5jbHVkZXMoYy5jb25zdHJ1Y3RvcikpfWdldFN1Ym1pdEJ1dHRvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbmQoYz0+YyBpbnN0YW5jZW9mIGVFZSl9YXN5bmMgdXBkYXRlUmVxdWlyZWRTdGF0dXMoKXtjb25zb2xlLmxvZygiY2hlY2tpbmcgdGhlIHJlcXVpcmVkIHN0YXR1cy4iKTtsZXQgYz0hMDtmb3IobGV0IHUgb2YgdGhpcy5nZXRGb3JtRWxlbWVudHMoKSl1LnJlcXVpcmVkJiYhdS52YWx1ZSYmKGM9ITEpO3RoaXMuZ2V0U3VibWl0QnV0dG9uKCkmJih0aGlzLmdldFN1Ym1pdEJ1dHRvbigpLmRpc2FibGVkPSFjKX1hc3luYyBjb2xsZWN0Rm9ybURhdGEoKXtsZXQgYz10aGlzLmdldEZvcm1FbGVtZW50cygpLHU9e307Zm9yKGxldCBkIG9mIGMpe2lmKCFkLmtleSl7Y29uc29sZS5sb2coYGZvcm0gZWxlbWVudCB3aXRoIGxhYmVsICIke2QubGFiZWx9IiBoYXMgbm8ga2V5LiBza2lwcGluZy5gKTtjb250aW51ZX11W2Qua2V5XT1kLnZhbHVlfXJldHVybiB1fWFzeW5jIGdhdGhlckFuZERpc3BhdGNoKCl7bGV0IGM9YXdhaXQgdGhpcy5jb2xsZWN0Rm9ybURhdGEoKSx1PW5ldyBDdXN0b21FdmVudCgiZm9ybURhdGEiLHtkZXRhaWw6e2RhdGE6Y30sYnViYmxlczohMH0pO3RoaXMuZGlzcGF0Y2hFdmVudCh1KSxjb25zb2xlLmxvZygiZGlzcGF0Y2hlZCBkYXRhOiIpLGNvbnNvbGUubG9nKGMpfXNldFN0YXR1cyhjLHUpe2xldCBkPXRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCksaD10aGlzLmdldFN1Ym1pdEJ1dHRvbigpO3N3aXRjaChjKXtjYXNlIm5vcm1hbCI6aC5kaXNhYmxlZD0hMSxoLnN0YXR1cz0ibm9ybWFsIjtmb3IobGV0IGcgb2YgZClnLmRpc2FibGVkPSExO2JyZWFrO2Nhc2UicGVuZGluZyI6aC5kaXNhYmxlZD0hMCxoLnN0YXR1cz0icGVuZGluZyI7Zm9yKGxldCBnIG9mIGQpZy5kaXNhYmxlZD0hMDticmVhaztjYXNlInN1Y2Nlc3MiOmguZGlzYWJsZWQ9ITAsaC5zdGF0dXM9InN1Y2Nlc3MiO2ZvcihsZXQgZyBvZiBkKWcuZGlzYWJsZWQ9ITA7YnJlYWs7Y2FzZSJlcnJvciI6aC5kaXNhYmxlZD0hMCxoLnN0YXR1cz0iZXJyb3IiO2ZvcihsZXQgZyBvZiBkKWcuZGlzYWJsZWQ9ITA7YnJlYWt9aC50ZXh0PXV9cmVzZXQoKXtsZXQgYz10aGlzLmdldEZvcm1FbGVtZW50cygpLHU9dGhpcy5nZXRTdWJtaXRCdXR0b24oKTtmb3IobGV0IGQgb2YgYylkLnZhbHVlPW51bGw7dGhpcy5zZXRTdGF0dXMoIm5vcm1hbCIsIlN1Ym1pdCIpfWFzeW5jIGFkZEJlaGF2aW91cnMoKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGM9PntsZXQgdT1jLnRhcmdldDtpZih4RnQuaW5jbHVkZXModS5jb25zdHJ1Y3RvcikmJmMua2V5PT09IkVudGVyIil7bGV0IGQ9dGhpcy5nZXRGb3JtRWxlbWVudHMoKSxoPWQuaW5kZXhPZih1KTtoPGQubGVuZ3RoLTE/ZFtoKzFdLmZvY3VzKCk6KHUuYmx1cigpLHRoaXMuZ2V0U3VibWl0QnV0dG9uKCk/LmZvY3VzKCkpfX0pfXVwZGF0ZUNoaWxkcmVuTGF5b3V0TW9kZSgpe2xldCBjPXRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCk7Zm9yKGxldCB1IG9mIGMpImxheW91dE1vZGUiaW4gdSYmKHUubGF5b3V0TW9kZT0iYXV0byIpfXVwZGF0ZWQoYyl7c3VwZXIudXBkYXRlZChjKSxjLmhhcygiaG9yaXpvbnRhbExheW91dCIpJiZ0aGlzLnVwZGF0ZUNoaWxkcmVuTGF5b3V0TW9kZSgpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxoRWUodGhpcyxsKX1zdGF0aWN7aEVlKHIsYSl9fTtyZXR1cm4gZj1yfSkoKTtmZSgpO0Z0KCk7dmFyIGJGdD0oKT0+TWAKICA8c3R5bGU+CiAgICAke3RlYAogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLnZlcnRpY2FsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwtZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1vdXRwdXQgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5pY29uLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1zbmlwcGV0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKS5mb3JFYWNoKGE9PnthLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCgpPT57bGV0IHI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKXx8ImRlZmF1bHQiO2NvbnNvbGUubG9nKGBCdXR0b24gdmFyaWFudCBjbGlja2VkOiAke3J9YCl9KX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIxLiBCdXR0b24gVmFyaWFudHMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHZpc3VhbCBzdHlsZXMgZm9yIHZhcmlvdXMgdXNlIGNhc2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZWZhdWx0Ij5EZWZhdWx0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiPlNlY29uZGFyeTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiPkRlc3RydWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJvdXRsaW5lIj5PdXRsaW5lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJnaG9zdCI+R2hvc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImxpbmsiPkxpbmsgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57dC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpLmZvckVhY2goYT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsKCk9PntsZXQgcj1hLmdldEF0dHJpYnV0ZSgic2l6ZSIpfHwiZGVmYXVsdCI7Y29uc29sZS5sb2coYEJ1dHRvbiBzaXplOiAke3J9YCl9KX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBCdXR0b24gU2l6ZXMifSAuc3VidGl0bGU9JHsiTXVsdGlwbGUgc2l6ZXMgZm9yIGRpZmZlcmVudCBjb250ZXh0cyBhbmQgdXNlIGNhc2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJzbSI+U21hbGwgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJkZWZhdWx0Ij5EZWZhdWx0IFNpemU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9ImxnIj5MYXJnZSBCdXR0b248L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9Im91dGxpbmUiIC50ZXh0PSR7Ilx1ezFGNjgwfSJ9PjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9InNtIiB0eXBlPSJzZWNvbmRhcnkiPlNtYWxsIFNlY29uZGFyeTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iZGVmYXVsdCIgdHlwZT0iZGVzdHJ1Y3RpdmUiPkRlZmF1bHQgRGVzdHJ1Y3RpdmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9ImxnIiB0eXBlPSJvdXRsaW5lIj5MYXJnZSBPdXRsaW5lPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57dC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpLmZvckVhY2goYT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsKCk9PntsZXQgcj1hLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpO2lmKHIpe2xldCBpPXIuZ2V0QXR0cmlidXRlKCJpY29uRkEiKXx8InVua25vd24iO2NvbnNvbGUubG9nKGBJY29uIGJ1dHRvbiBjbGlja2VkOiAke2l9YCl9fSl9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gQnV0dG9ucyB3aXRoIEljb25zIn0gLnN1YnRpdGxlPSR7IkNvbWJpbmluZyBpY29ucyB3aXRoIHRleHQgZm9yIGVuaGFuY2VkIHZpc3VhbCBjb21tdW5pY2F0aW9uIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb25GQT0iZmFQbHVzIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgQWRkIEl0ZW0KICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb25GQT0iZmFUcmFzaCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIERlbGV0ZQogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJvdXRsaW5lIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uRkE9ImZhRG93bmxvYWQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICBEb3dubG9hZAogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5IiBzaXplPSJzbSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbkZBPSJmYUNvZyI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIFNldHRpbmdzCiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0Ij4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uRkE9ImZhQ2hldnJvbkxlZnQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICBCYWNrCiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0Ij4KICAgICAgICAgICAgTmV4dAogICAgICAgICAgICA8ZGVlcy1pY29uIGljb25GQT0iZmFDaGV2cm9uUmlnaHQiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0iZGVmYXVsdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbkZBPSJmYVBsdXMiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJzZWNvbmRhcnkiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb25GQT0iZmFDb2ciPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJvdXRsaW5lIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uRkE9ImZhU2VhcmNoIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0iZ2hvc3QiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb25GQT0iZmFFbGxpcHNpc1YiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJkZXN0cnVjdGl2ZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbkZBPSJmYVRyYXNoIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJwZW5kaW5nIl0nKSxhPXQucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJzdWNjZXNzIl0nKSxyPXQucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJlcnJvciJdJyk7ZSYmc2V0VGltZW91dCgoKT0+e2NvbnNvbGUubG9nKCJQZW5kaW5nIGJ1dHRvbiBpcyBzaG93aW5nIGxvYWRpbmcgc3RhdGUiKX0sMWUzKSxhJiZhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCgpPT57Y29uc29sZS5sb2coIlN1Y2Nlc3Mgc3RhdGUgYnV0dG9uIGNsaWNrZWQiKX0pLHImJnIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsKCk9Pntjb25zb2xlLmxvZygiRXJyb3Igc3RhdGUgYnV0dG9uIGNsaWNrZWQiKX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBCdXR0b24gU3RhdGVzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBzdGF0ZXMgdG8gaW5kaWNhdGUgYnV0dG9uIHN0YXR1cyBhbmQgbG9hZGluZyBjb25kaXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9Im5vcm1hbCI+Tm9ybWFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9InBlbmRpbmciPlByb2Nlc3NpbmcuLi48L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0ic3VjY2VzcyI+U3VjY2VzcyE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0iZXJyb3IiPkVycm9yITwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gZGlzYWJsZWQ+RGlzYWJsZWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHN0YXR1cz0icGVuZGluZyIgc2l6ZT0ic20iPlNtYWxsIExvYWRpbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiIHN0YXR1cz0icGVuZGluZyI+RGVmYXVsdCBMb2FkaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc3RhdHVzPSJwZW5kaW5nIiBzaXplPSJsZyI+TGFyZ2UgTG9hZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiI2NsaWNrLW91dHB1dCIpLGE9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWJ1dHRvbjpmaXJzdC1vZi10eXBlIikscj10LnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtYnV0dG9uW3R5cGU9InNlY29uZGFyeSJdJyksaT10LnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtYnV0dG9uW3R5cGU9ImRlc3RydWN0aXZlIl0nKTthJiZlJiZhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCgpPT57ZS50ZXh0Q29udGVudD1gQ2xpY2tlZDogRGVmYXVsdCBidXR0b24gYXQgJHtuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZygpfWB9KSxyJiZlJiZyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLG89PntlLnRleHRDb250ZW50PWBDbGlja2VkOiBTZWNvbmRhcnkgYnV0dG9uIHdpdGggZGF0YTogJHtvLmRldGFpbC5kYXRhfWB9KSxpJiZlJiZpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLGFzeW5jKCk9PntlLnRleHRDb250ZW50PSJQcm9jZXNzaW5nLi4uIixhd2FpdCBzdC5wbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMmUzKSxlLnRleHRDb250ZW50PSJBY3Rpb24gY29tcGxldGVkISJ9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gRXZlbnQgSGFuZGxpbmcifSAuc3VidGl0bGU9JHsiSW50ZXJhY3RpdmUgZXhhbXBsZXMgd2l0aCBjbGljayBldmVudCBoYW5kbGluZyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24+Q2xpY2sgTWU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InNlY29uZGFyeSIgLmV2ZW50RGV0YWlsRGF0YT0keyJjdXN0b20tZGF0YS0xMjMifT4KICAgICAgICAgICAgQ2xpY2sgd2l0aCBEYXRhCiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlc3RydWN0aXZlIj5Bc3luYyBBY3Rpb248L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgaWQ9ImNsaWNrLW91dHB1dCIgY2xhc3M9ImRlbW8tb3V0cHV0Ij4KICAgICAgICAgIDxlbT5DbGljayBhIGJ1dHRvbiB0byBzZWUgdGhlIHJlc3VsdC4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIiksYT10LnF1ZXJ5U2VsZWN0b3IoIiNmb3JtLW91dHB1dCIpO2UmJmEmJmUuYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLG89PnthLmlubmVySFRNTD0iPHN0cm9uZz5Gb3JtIHN1Ym1pdHRlZCB3aXRoIGRhdGE6PC9zdHJvbmc+PGJyPiIrSlNPTi5zdHJpbmdpZnkoby5kZXRhaWwuZGF0YSxudWxsLDIpfSk7bGV0IHI9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvblt0eXBlPSJzZWNvbmRhcnkiXScpLGk9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvblt0eXBlPSJnaG9zdCJdJyk7ciYmci5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwoKT0+e2NvbnNvbGUubG9nKCJTYXZlIERyYWZ0IGNsaWNrZWQiKX0pLGkmJmkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsKCk9Pntjb25zb2xlLmxvZygiQ2FuY2VsIGNsaWNrZWQiKX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkJ1dHRvbnMgd29ya2luZyB3aXRoaW4gZm9ybXMgd2l0aCBhdXRvbWF0aWMgc3BhY2luZyJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGxhYmVsPSJOYW1lIiBrZXk9Im5hbWUiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBsYWJlbD0iRW1haWwiIGtleT0iZW1haWwiIHR5cGU9ImVtYWlsIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgbGFiZWw9Ik1lc3NhZ2UiIGtleT0ibWVzc2FnZSIgaXNNdWx0aWxpbmU+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiPlNhdmUgRHJhZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0Ij5DYW5jZWw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0iZm9ybS1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCIgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGRhdGEuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnt0LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIikuZm9yRWFjaChhPT57bGV0IHI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKTtyJiZjb25zb2xlLmxvZyhgTGVnYWN5IHR5cGUgIiR7cn0iIGlzIHN1cHBvcnRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eWApfSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjcuIEJhY2t3YXJkIENvbXBhdGliaWxpdHkifSAuc3VidGl0bGU9JHsiT2xkIGJ1dHRvbiB0eXBlcyBhcmUgYXV0b21hdGljYWxseSBtYXBwZWQgdG8gbmV3IHZhcmlhbnRzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJub3JtYWwiPk5vcm1hbCDihpIgRGVmYXVsdDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iaGlnaGxpZ2h0ZWQiPkhpZ2hsaWdodGVkIOKGkiBEZXN0cnVjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGlzY3JlZXQiPkRpc2NyZWV0IOKGkiBPdXRsaW5lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJiaWciPkJpZyDihpIgTGFyZ2UgU2l6ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07Ij4KICAgICAgICAgIFRoZXNlIGxlZ2FjeSB0eXBlIHZhbHVlcyBhcmUgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgd2UgcmVjb21tZW5kIHVzaW5nIHRoZSBuZXcgdmFyaWFudCBzeXN0ZW0uCiAgICAgICAgPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3JBbGwoIi52ZXJ0aWNhbC1ncm91cCIpWzBdLGE9dC5xdWVyeVNlbGVjdG9yQWxsKCIudmVydGljYWwtZ3JvdXAiKVsxXTtlJiZlLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIikuZm9yRWFjaCgoaSxvKT0+e2kuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsKCk9PntsZXQgcz1bIlNhdmUgQ2hhbmdlcyIsIkRpc2NhcmQiLCJIZWxwIl1bb107Y29uc29sZS5sb2coYEFjdGlvbiBncm91cDogJHtzfSBjbGlja2VkYCl9KX0pLGEmJmEucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKS5mb3JFYWNoKChpLG8pPT57aS5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwoKT0+e2xldCBzPVsiRGVsZXRlIEFjY291bnQiLCJBcmNoaXZlIERhdGEiLCJOb3QgQXZhaWxhYmxlIl1bb107byE9PTImJmNvbnNvbGUubG9nKGBEYW5nZXIgem9uZTogJHtzfSBjbGlja2VkYCl9KX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI4LiBBZHZhbmNlZCBFeGFtcGxlcyJ9IC5zdWJ0aXRsZT0keyJDb21wbGV4IGJ1dHRvbiBjb25maWd1cmF0aW9ucyBhbmQgcmVhbC13b3JsZCB1c2UgY2FzZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnRpY2FsLWdyb3VwIj4KICAgICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDAgMCA4cHggMDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyI+QWN0aW9uIEdyb3VwPC9oND4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiIHNpemU9InNtIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb25GQT0iZmFTYXZlIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICBTYXZlIENoYW5nZXMKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InNlY29uZGFyeSIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbkZBPSJmYVVuZG8iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIERpc2NhcmQKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uRkE9ImZhUXVlc3Rpb25DaXJjbGUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIEhlbHAKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbC1ncm91cCI+CiAgICAgICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luOiAwIDAgOHB4IDA7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsiPkRhbmdlciBab25lPC9oND4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlc3RydWN0aXZlIiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uRkE9ImZhVHJhc2giPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIERlbGV0ZSBBY2NvdW50CiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJvdXRsaW5lIiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uRkE9ImZhQXJjaGl2ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgQXJjaGl2ZSBEYXRhCiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJnaG9zdCIgc2l6ZT0ic20iIGRpc2FibGVkPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbkZBPSJmYUJhbiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgTm90IEF2YWlsYWJsZQogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMjRweDsiPgogICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDAgMCA4cHggMDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyI+Q29kZSBFeGFtcGxlOjwvaDQ+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLXNuaXBwZXQiPgogICAgICAgICAgICAmbHQ7ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCIgc2l6ZT0ic20iIEBjbGlja2VkPSJcJHtoYW5kbGVDbGlja30iJmd0Ozxicj4KICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jmx0O2RlZXMtaWNvbiBpY29uRkE9ImZhU2F2ZSImZ3Q7Jmx0Oy9kZWVzLWljb24mZ3Q7PGJyPgogICAgICAgICAgICAmbmJzcDsmbmJzcDtTYXZlIENoYW5nZXM8YnI+CiAgICAgICAgICAgICZsdDsvZGVlcy1idXR0b24mZ3Q7CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIDwvZGl2PgpgO2ZlKCk7U3QoKTtCZSgpO3ZhciBHaT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LGwyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxvczE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWJ1dHRvbiIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdLEUsQz1bXSx6PVtdLFAsXz1bXSwkPVtdLEgsTD1bXSxrPVtdO3ZhciBOPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgUz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHtyZWZsZWN0OiEwLGhhc0NoYW5nZWQoKXtyZXR1cm4hMH19KV0sZj1bRCgpXSxkPVtEKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMH0pXSxiPVtEKHt0eXBlOkJvb2xlYW59KV0sdj1bRCh7dHlwZTpTdHJpbmd9KV0sRT1bRCh7dHlwZTpTdHJpbmd9KV0sUD1bRCh7dHlwZTpTdHJpbmd9KV0sSD1bRCh7dHlwZTpCb29sZWFuLHJlZmxlY3Q6ITB9KV0sR2kodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0ZXh0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4idGV4dCJpbiBULGdldDpUPT5ULnRleHQsc2V0OihULFIpPT57VC50ZXh0PVJ9fSxtZXRhZGF0YTpTfSxzLGwpLEdpKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXZlbnREZXRhaWxEYXRhIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4iZXZlbnREZXRhaWxEYXRhImluIFQsZ2V0OlQ9PlQuZXZlbnREZXRhaWxEYXRhLHNldDooVCxSKT0+e1QuZXZlbnREZXRhaWxEYXRhPVJ9fSxtZXRhZGF0YTpTfSxjLHUpLEdpKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZGlzYWJsZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJkaXNhYmxlZCJpbiBULGdldDpUPT5ULmRpc2FibGVkLHNldDooVCxSKT0+e1QuZGlzYWJsZWQ9Un19LG1ldGFkYXRhOlN9LGgsZyksR2kodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0hpZGRlbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VD0+ImlzSGlkZGVuImluIFQsZ2V0OlQ9PlQuaXNIaWRkZW4sc2V0OihULFIpPT57VC5pc0hpZGRlbj1SfX0sbWV0YWRhdGE6U30seCxtKSxHaSh0aGlzLG51bGwsdix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InR5cGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJ0eXBlImluIFQsZ2V0OlQ9PlQudHlwZSxzZXQ6KFQsUik9PntULnR5cGU9Un19LG1ldGFkYXRhOlN9LHksdyksR2kodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaXplIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4ic2l6ZSJpbiBULGdldDpUPT5ULnNpemUsc2V0OihULFIpPT57VC5zaXplPVJ9fSxtZXRhZGF0YTpTfSxDLHopLEdpKHRoaXMsbnVsbCxQLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3RhdHVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4ic3RhdHVzImluIFQsZ2V0OlQ9PlQuc3RhdHVzLHNldDooVCxSKT0+e1Quc3RhdHVzPVJ9fSxtZXRhZGF0YTpTfSxfLCQpLEdpKHRoaXMsbnVsbCxILHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaW5zaWRlRm9ybSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VD0+Imluc2lkZUZvcm0iaW4gVCxnZXQ6VD0+VC5pbnNpZGVGb3JtLHNldDooVCxSKT0+e1QuaW5zaWRlRm9ybT1SfX0sbWV0YWRhdGE6U30sTCxrKSxHaShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpTfSxudWxsLGEpLE49cj1lLnZhbHVlLFMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6U30pfXN0YXRpYyBkZW1vPWJGdDtzdGF0aWMgZGVtb0dyb3VwPSJCdXR0b24iOyNlPWwyKHRoaXMscyx2b2lkIDApO2dldCB0ZXh0KCl7cmV0dXJuIHRoaXMuI2V9c2V0IHRleHQoUyl7dGhpcy4jZT1TfSN0PShsMih0aGlzLGwpLGwyKHRoaXMsYyx2b2lkIDApKTtnZXQgZXZlbnREZXRhaWxEYXRhKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGV2ZW50RGV0YWlsRGF0YShTKXt0aGlzLiN0PVN9I2E9KGwyKHRoaXMsdSksbDIodGhpcyxoLCExKSk7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGRpc2FibGVkKFMpe3RoaXMuI2E9U30jcj0obDIodGhpcyxnKSxsMih0aGlzLHgsITEpKTtnZXQgaXNIaWRkZW4oKXtyZXR1cm4gdGhpcy4jcn1zZXQgaXNIaWRkZW4oUyl7dGhpcy4jcj1TfSNpPShsMih0aGlzLG0pLGwyKHRoaXMseSwiZGVmYXVsdCIpKTtnZXQgdHlwZSgpe3JldHVybiB0aGlzLiNpfXNldCB0eXBlKFMpe3RoaXMuI2k9U30jbz0obDIodGhpcyx3KSxsMih0aGlzLEMsImRlZmF1bHQiKSk7Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy4jb31zZXQgc2l6ZShTKXt0aGlzLiNvPVN9I3M9KGwyKHRoaXMseiksbDIodGhpcyxfLCJub3JtYWwiKSk7Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLiNzfXNldCBzdGF0dXMoUyl7dGhpcy4jcz1TfSNuPShsMih0aGlzLCQpLGwyKHRoaXMsTCwhMSkpO2dldCBpbnNpZGVGb3JtKCl7cmV0dXJuIHRoaXMuI259c2V0IGluc2lkZUZvcm0oUyl7dGhpcy4jbj1TfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxsMih0aGlzLGspfWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSwhdGhpcy5pbnNpZGVGb3JtJiZ0aGlzLmNsb3Nlc3QoImRlZXMtZm9ybSIpJiYodGhpcy5pbnNpZGVGb3JtPSEwKX1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgfQogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEZvcm0gc3BhY2luZyBzdHlsZXMgKi8KICAgICAgOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtpbnNpZGUtZm9ybV06bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtZm9ybVtob3Jpem9udGFsLWxheW91dF0gOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1mb3JtW2hvcml6b250YWwtbGF5b3V0XSA6aG9zdChbaW5zaWRlLWZvcm1dOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5idXR0b24gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIFNpemUgdmFyaWFudHMgKi8KICAgICAgLmJ1dHRvbi5zaXplLWRlZmF1bHQgewogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtc20gewogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtbGcgewogICAgICAgIGhlaWdodDogNDRweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qIERlZmF1bHQgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5kZWZhdWx0OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxMC4yJSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDg1JSkiLCJoc2woMjE1IDIwLjIlIDIwJSkiKX07CiAgICAgIH0KCiAgICAgIC5idXR0b24uZGVmYXVsdDphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNSAyMC4yJSA5JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERlc3RydWN0aXZlIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5kZXN0cnVjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgODQuMiUgNjAuMiUpOwogICAgICAgIGNvbG9yOiBoc2woMCAwJSA5OCUpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmRlc3RydWN0aXZlOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Ni4yJSk7CiAgICAgIH0KCiAgICAgIC5idXR0b24uZGVzdHJ1Y3RpdmU6YWN0aXZlOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Mi4yJSk7CiAgICAgIH0KCiAgICAgIC8qIE91dGxpbmUgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLm91dGxpbmUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE1IDIwLjIlIDIxLjglKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5vdXRsaW5lOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDg1JSkiLCJoc2woMjE1IDIwLjIlIDI2LjglKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5vdXRsaW5lOmFjdGl2ZTpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE1IDIwLjIlIDEzLjglKSIpfTsKICAgICAgfQoKICAgICAgLyogU2Vjb25kYXJ5IHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5zZWNvbmRhcnkgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLnNlY29uZGFyeTpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE1IDIwLjIlIDEzLjglKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5zZWNvbmRhcnk6YWN0aXZlOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDg1JSkiLCJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgfQoKICAgICAgLyogR2hvc3QgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmdob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmdob3N0OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgIH0KCiAgICAgIC5idXR0b24uZ2hvc3Q6YWN0aXZlOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAvKiBMaW5rIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5saW5rIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuYnV0dG9uLmxpbms6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAvKiBTdGF0dXMgc3RhdGVzICovCiAgICAgIC5idXR0b24ucGVuZGluZywKICAgICAgLmJ1dHRvbi5zdWNjZXNzLAogICAgICAuYnV0dG9uLmVycm9yIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDM2cHg7IC8qIFNwYWNlIGZvciBzcGlubmVyICovCiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1zbS5wZW5kaW5nLAogICAgICAuYnV0dG9uLnNpemUtc20uc3VjY2VzcywKICAgICAgLmJ1dHRvbi5zaXplLXNtLmVycm9yIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDMycHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1sZy5wZW5kaW5nLAogICAgICAuYnV0dG9uLnNpemUtbGcuc3VjY2VzcywKICAgICAgLmJ1dHRvbi5zaXplLWxnLmVycm9yIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDQ0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24ucGVuZGluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUgLyAwLjIpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsImhzbCgwIDYyLjglIDcwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgNjIuOCUgNzAuNiUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAvKiBEaXNhYmxlZCBzdGF0ZSAqLwogICAgICAuYnV0dG9uLmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLyogSGlkZGVuIHN0YXRlICovCiAgICAgIC5idXR0b24uaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBGb2N1cyBzdGF0ZSAqLwogICAgICAuYnV0dG9uOmZvY3VzLXZpc2libGUgewogICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTMuMSA5My45JSA2Ny44JSkiKX07CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgICAgfQoKICAgICAgLyogTG9hZGluZyBzcGlubmVyICovCiAgICAgIGRlZXMtc3Bpbm5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDEwcHg7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtc20gZGVlcy1zcGlubmVyIHsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtbGcgZGVlcy1zcGlubmVyIHsKICAgICAgICBsZWZ0OiAxNHB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQogICAgICAKICAgICAgLyogSWNvbiBzaXppbmcgd2l0aGluIGJ1dHRvbnMgKi8KICAgICAgLmJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQogICAgICAKICAgICAgLmJ1dHRvbi5zaXplLXNtIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtbGcgZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KCiAgICBgXTtyZW5kZXIoKXtsZXQgVD17bm9ybWFsOiJkZWZhdWx0IixoaWdobGlnaHRlZDoiZGVzdHJ1Y3RpdmUiLGRpc2NyZWV0OiJvdXRsaW5lIixiaWc6ImRlZmF1bHQifVt0aGlzLnR5cGVdfHx0aGlzLnR5cGUsUj10aGlzLnR5cGU9PT0iYmlnIj8ibGciOnRoaXMuc2l6ZTtyZXR1cm4gTWAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJidXR0b24gJHt0aGlzLmlzSGlkZGVuPyJoaWRkZW4iOiIifSAke1R9IHNpemUtJHtSfSAke3RoaXMuc3RhdHVzfSAke3RoaXMuZGlzYWJsZWQ/ImRpc2FibGVkIjoiIn0iCiAgICAgICAgQGNsaWNrPSIke3RoaXMuZGlzcGF0Y2hDbGlja30iCiAgICAgID4KICAgICAgICAke3RoaXMuc3RhdHVzPT09Im5vcm1hbCI/TWBgOk1gCiAgICAgICAgICA8ZGVlcy1zcGlubmVyIAogICAgICAgICAgICAuYm53PSR7ITB9IAogICAgICAgICAgICBzdGF0dXM9IiR7dGhpcy5zdGF0dXN9IgogICAgICAgICAgICBzaXplPSIke1I9PT0ic20iPzE0OlI9PT0ibGciPzE4OjE2fSIKICAgICAgICAgID48L2RlZXMtc3Bpbm5lcj4KICAgICAgICBgfQogICAgICAgIDxkaXYgY2xhc3M9InRleHRib3giPiR7dGhpcy50ZXh0fHxNYDxzbG90PkJ1dHRvbjwvc2xvdD5gfTwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZGlzcGF0Y2hDbGljaygpe3RoaXMuZGlzYWJsZWR8fHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNsaWNrZWQiLHtkZXRhaWw6e2RhdGE6dGhpcy5ldmVudERldGFpbERhdGF9LGJ1YmJsZXM6ITB9KSl9YXN5bmMgZmlyc3RVcGRhdGVkKCl7fXN0YXRpY3tsMihyLGEpfX07cmV0dXJuIE49cn0pKCk7ZmUoKTt2YXIgdkZ0PWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sbUVlPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxzczE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWJ1dHRvbi1leGl0IildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W107dmFyIGY9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6TnVtYmVyfSldLHZGdCh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNpemUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnU9PiJzaXplImluIHUsZ2V0OnU9PnUuc2l6ZSxzZXQ6KHUsZCk9Pnt1LnNpemU9ZH19LG1ldGFkYXRhOmN9LHMsbCksdkZ0KG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOmN9LG51bGwsYSksZj1yPWUudmFsdWUsYyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpjfSl9c3RhdGljIGRlbW89KCk9Pk1gCiAgICA8ZGVlcy1idXR0b24tZXhpdD48L2RlZXMtYnV0dG9uLWV4aXQ+CiAgYDtzdGF0aWMgZGVtb0dyb3VwPSJCdXR0b24iOyNlPW1FZSh0aGlzLHMsMjQpO2dldCBzaXplKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHNpemUoYyl7dGhpcy4jZT1jfXN0eWxlcz0obUVlKHRoaXMsbCksW3AuZGVmYXVsdFN0eWxlcyx0ZWAKCiAgICBgXSk7cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxzdHlsZT4KICAgICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICB3aWR0aDogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5zaXplfXB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlyc3RMaW5lIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWNvbmRMaW5lIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXN0YXRpY3ttRWUocixhKX19O3JldHVybiBmPXJ9KSgpO2ZlKCk7dmFyIHlGdD0oKT0+TWAKICAgIDxzdHlsZT4KICAgICAgJHt0ZWAKICAgICAgICAuZGVtb0JveCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICB9CgogICAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5kZW1vLXRpdGxlIHsKICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tZGVzY3JpcHRpb24gewogICAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZGVtb0JveCI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5CYXNpYyBCdXR0b24gR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QnV0dG9uIGdyb3VwcyB3aXRob3V0IGxhYmVscyBmb3Igc2ltcGxlIGdyb3VwaW5nPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PcHRpb24gMTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+T3B0aW9uIDI8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk9wdGlvbiAzPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5MYWJlbGVkIEJ1dHRvbiBHcm91cHM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5CdXR0b24gZ3JvdXBzIHdpdGggZGVzY3JpcHRpdmUgbGFiZWxzPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iVmlldyBNb2RlOiI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iaGlnaGxpZ2h0ZWQiPkdyaWQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkxpc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkNhcmRzPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5NdWx0aXBsZSBHcm91cHM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5NdWx0aXBsZSBidXR0b24gZ3JvdXBzIHVzZWQgdG9nZXRoZXI8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAxNnB4OyBmbGV4LXdyYXA6IHdyYXA7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGF0YXNldDoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iaGlnaGxpZ2h0ZWQiPlN5c3RlbTwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5OZXR3b3JrPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlNhbGVzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iVGltZSBSYW5nZToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+MUg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iaGlnaGxpZ2h0ZWQiPjI0SDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj43RDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj4zMEQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGxhYmVsPSJBY3Rpb25zOiI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5SZWZyZXNoPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkV4cG9ydDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5WZXJ0aWNhbCBCdXR0b24gR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QnV0dG9uIGdyb3VwcyB3aXRoIHZlcnRpY2FsIGxheW91dDwvcD4KICAgICAgICAKICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDI0cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBkaXJlY3Rpb249InZlcnRpY2FsIiBsYWJlbD0iTmF2aWdhdGlvbjoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RGFzaGJvYXJkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5BbmFseXRpY3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+UmVwb3J0czwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TZXR0aW5nczwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgZGlyZWN0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5BZGQgSXRlbTwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5FZGl0IEl0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RGVsZXRlIEl0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TWl4ZWQgQnV0dG9uIFR5cGVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+RGlmZmVyZW50IGJ1dHRvbiB0eXBlcyB3aXRoaW4gZ3JvdXBzPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iU3RhdHVzOiI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic3VjY2VzcyI+QWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5QZW5kaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkYW5nZXIiPkluYWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7ZmUoKTtTdCgpO0JlKCk7dmFyIGdFZT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LHZJPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxuczE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWJ1dHRvbi1ncm91cCIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdO3ZhciBkPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgaD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKCldLGY9W0QoKV0sZ0VlKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGFiZWwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJsYWJlbCJpbiBnLGdldDpnPT5nLmxhYmVsLHNldDooZyxiKT0+e2cubGFiZWw9Yn19LG1ldGFkYXRhOmh9LHMsbCksZ0VlKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZGlyZWN0aW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4iZGlyZWN0aW9uImluIGcsZ2V0Omc9PmcuZGlyZWN0aW9uLHNldDooZyxiKT0+e2cuZGlyZWN0aW9uPWJ9fSxtZXRhZGF0YTpofSxjLHUpLGdFZShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpofSxudWxsLGEpLGQ9cj1lLnZhbHVlLGgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6aH0pfXN0YXRpYyBkZW1vPXlGdDtzdGF0aWMgZGVtb0dyb3VwPSJCdXR0b24iOyNlPXZJKHRoaXMscywiIik7Z2V0IGxhYmVsKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGxhYmVsKGgpe3RoaXMuI2U9aH0jdD0odkkodGhpcyxsKSx2SSh0aGlzLGMsImhvcml6b250YWwiKSk7Z2V0IGRpcmVjdGlvbigpe3JldHVybiB0aGlzLiN0fXNldCBkaXJlY3Rpb24oaCl7dGhpcy4jdD1ofWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx2SSh0aGlzLHUpLGMxLnNldHVwKCl9c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuYnV0dG9uLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAudmVydGljYWwgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNjY2IiwiIzk5OSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYnV0dG9uLWdyb3VwLnZlcnRpY2FsIC5sYWJlbCB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQoKICAgICAgOjpzbG90dGVkKCopIHsKICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCAke3RoaXMuZGlyZWN0aW9ufSI+CiAgICAgICAgJHt0aGlzLmxhYmVsP01gPHNwYW4gY2xhc3M9ImxhYmVsIj4ke3RoaXMubGFiZWx9PC9zcGFuPmA6IiJ9CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIGB9c3RhdGlje3ZJKHIsYSl9fTtyZXR1cm4gZD1yfSkoKTtmZSgpO3ZhciB3RnQ9KCk9PntsZXQgdD17c3lzdGVtOntsYWJlbDoiU3lzdGVtIFVzYWdlICglKSIsc2VyaWVzOlt7bmFtZToiQ1BVIixkYXRhOlt7eDpuZXcgRGF0ZShEYXRlLm5vdygpLTNlNSkudG9JU09TdHJpbmcoKSx5OjI1fSx7eDpuZXcgRGF0ZShEYXRlLm5vdygpLTI0ZTQpLnRvSVNPU3RyaW5nKCkseTozMH0se3g6bmV3IERhdGUoRGF0ZS5ub3coKS0xOGU0KS50b0lTT1N0cmluZygpLHk6Mjh9LHt4Om5ldyBEYXRlKERhdGUubm93KCktMTJlNCkudG9JU09TdHJpbmcoKSx5OjM1fSx7eDpuZXcgRGF0ZShEYXRlLm5vdygpLTZlNCkudG9JU09TdHJpbmcoKSx5OjMyfSx7eDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkseTozOH1dfSx7bmFtZToiTWVtb3J5IixkYXRhOlt7eDpuZXcgRGF0ZShEYXRlLm5vdygpLTNlNSkudG9JU09TdHJpbmcoKSx5OjQ1fSx7eDpuZXcgRGF0ZShEYXRlLm5vdygpLTI0ZTQpLnRvSVNPU3RyaW5nKCkseTo0OH0se3g6bmV3IERhdGUoRGF0ZS5ub3coKS0xOGU0KS50b0lTT1N0cmluZygpLHk6NDZ9LHt4Om5ldyBEYXRlKERhdGUubm93KCktMTJlNCkudG9JU09TdHJpbmcoKSx5OjUyfSx7eDpuZXcgRGF0ZShEYXRlLm5vdygpLTZlNCkudG9JU09TdHJpbmcoKSx5OjUwfSx7eDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkseTo1NX1dfV19fSxlPXtzeXN0ZW06YT0+YCR7YX0lYH07cmV0dXJuIE1gCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyBhPT57bGV0IHI9YS5xdWVyeVNlbGVjdG9yKCIjbWFpbi1jaGFydCIpLGk9YS5xdWVyeVNlbGVjdG9yKCIjY29ubmVjdGlvbnMtY2hhcnQiKSxvLHMsbD0ic3lzdGVtIixmPXtzeXN0ZW06az0+YCR7a30lYCxuZXR3b3JrOms9PmAke2t9IE1icHNgLHNhbGVzOms9PmAkJHtrLnRvTG9jYWxlU3RyaW5nKCl9YH0sYz0xMjAqMWUzLHU9MWUzLGQ9NWUzLGg9e2NwdTozMCxtZW1vcnk6NTAsZG93bmxvYWQ6MTUwLHVwbG9hZDozMCxjb25uZWN0aW9uczoxNTB9LGc9KGssTixTPWQpPT57bGV0IFQ9W10sUj1EYXRlLm5vdygpLEE9TWF0aC5mbG9vcihjL1MpO2ZvcihsZXQgRj1BO0Y+PTA7Ri0tKXtsZXQgYWU9bmV3IERhdGUoUi1GKlMpLnRvSVNPU3RyaW5nKCksVj1rKyhNYXRoLnJhbmRvbSgpLS41KSpOO1QucHVzaCh7eDphZSx5Ok1hdGgucm91bmQoVil9KX1yZXR1cm4gVH0sYj17c3lzdGVtOntsYWJlbDoiU3lzdGVtIFVzYWdlICglKSIsc2VyaWVzOlt7bmFtZToiQ1BVIixkYXRhOmcoaC5jcHUsMTApfSx7bmFtZToiTWVtb3J5IixkYXRhOmcoaC5tZW1vcnksOCl9XX0sbmV0d29yazp7bGFiZWw6Ik5ldHdvcmsgVHJhZmZpYyAoTWJwcykiLHNlcmllczpbe25hbWU6IkRvd25sb2FkIixkYXRhOmcoaC5kb3dubG9hZCwzMCl9LHtuYW1lOiJVcGxvYWQiLGRhdGE6ZyhoLnVwbG9hZCwxMCl9XX0sc2FsZXM6e2xhYmVsOiJTYWxlcyBBbmFseXRpY3MiLHNlcmllczpbe25hbWU6IlJldmVudWUiLGRhdGE6W3t4OiIyMDI1LTAxLTAxIix5OjQ1ZTN9LHt4OiIyMDI1LTAxLTAyIix5OjUyZTN9LHt4OiIyMDI1LTAxLTAzIix5OjQ4ZTN9LHt4OiIyMDI1LTAxLTA0Iix5OjYxZTN9LHt4OiIyMDI1LTAxLTA1Iix5OjU4ZTN9LHt4OiIyMDI1LTAxLTA2Iix5OjY1ZTN9XX0se25hbWU6IlByb2ZpdCIsZGF0YTpbe3g6IjIwMjUtMDEtMDEiLHk6MTJlM30se3g6IjIwMjUtMDEtMDIiLHk6MTRlM30se3g6IjIwMjUtMDEtMDMiLHk6MTFlM30se3g6IjIwMjUtMDEtMDQiLHk6MThlM30se3g6IjIwMjUtMDEtMDUiLHk6MTZlM30se3g6IjIwMjUtMDEtMDYiLHk6MmU0fV19XX19LHg9KGssTixTLFQ9NSk9PntsZXQgUj0oTWF0aC5yYW5kb20oKS0uNSkqVCoyLEE9aytSLGFlPSgoTitTKS8yLUEpKi4xO3JldHVybiBBKz1hZSxBPU1hdGgubWF4KE4sTWF0aC5taW4oUyxBKSksTWF0aC5yb3VuZChBKX0sbT1EYXRlLm5vdygpLHY9RGF0ZS5ub3coKSx5PSgpPT57aWYoIXIpcmV0dXJuO2xldCBrPURhdGUubm93KCk7aWYoay1tPj1kKXttPWs7bGV0IFM9bmV3IERhdGUoaykudG9JU09TdHJpbmcoKTtpZihsPT09InN5c3RlbSIpe2guY3B1PXgoaC5jcHUsMjAsNTAsMyksaC5tZW1vcnk9eChoLm1lbW9yeSw0MCw3MCwyKTtsZXQgVD1yLmNoYXJ0U2VyaWVzLm1hcCgoUixBKT0+KHtuYW1lOlIubmFtZSxkYXRhOlsuLi5SLmRhdGEsQT09PTA/e3g6Uyx5OmguY3B1fTp7eDpTLHk6aC5tZW1vcnl9XX0pKTtyLnVwZGF0ZVNlcmllcyhULCExKX1lbHNlIGlmKGw9PT0ibmV0d29yayIpe2guZG93bmxvYWQ9eChoLmRvd25sb2FkLDEwMCwyMDAsMTApLGgudXBsb2FkPXgoaC51cGxvYWQsMjAsNTAsNSk7bGV0IFQ9ci5jaGFydFNlcmllcy5tYXAoKFIsQSk9Pih7bmFtZTpSLm5hbWUsZGF0YTpbLi4uUi5kYXRhLEE9PT0wP3t4OlMseTpoLmRvd25sb2FkfTp7eDpTLHk6aC51cGxvYWR9XX0pKTtyLnVwZGF0ZVNlcmllcyhULCExKX19fSx3PSgpPT57aWYoIWkpcmV0dXJuO2xldCBrPURhdGUubm93KCksTj1uZXcgRGF0ZShrKS50b0lTT1N0cmluZygpLFM9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjIxKS0xMDtoLmNvbm5lY3Rpb25zPU1hdGgubWF4KDUwLE1hdGgubWluKDMwMCxoLmNvbm5lY3Rpb25zK1MpKTtsZXQgVD1pLmNoYXJ0U2VyaWVzLFI9W3tuYW1lOlRbMF0/Lm5hbWV8fCJDb25uZWN0aW9ucyIsZGF0YTpbLi4uVFswXT8uZGF0YXx8W10se3g6Tix5OmguY29ubmVjdGlvbnN9XX1dO2kudXBkYXRlU2VyaWVzKFIsITEpfSxFPWs9PntsPWs7bGV0IE49YltrXTtyLmxhYmVsPU4ubGFiZWwsci5zZXJpZXM9Ti5zZXJpZXMsci55QXhpc0Zvcm1hdHRlcj1mW2tdLGs9PT0ic3lzdGVtIj8oci55QXhpc1NjYWxpbmc9InBlcmNlbnRhZ2UiLHIueUF4aXNNYXg9MTAwKTpyLnlBeGlzU2NhbGluZz0iZHluYW1pYyIsbT1EYXRlLm5vdygpLWR9LEM9KCk9PnshbyYmKGw9PT0ic3lzdGVtInx8bD09PSJuZXR3b3JrIikmJihyLnJlYWx0aW1lTW9kZT0hMCxvPXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+eSgpLGQpKSxzfHwoaS5yZWFsdGltZU1vZGU9ITAscz13aW5kb3cuc2V0SW50ZXJ2YWwoKCk9PncoKSx1KSl9LHo9KCk9PntvJiYod2luZG93LmNsZWFySW50ZXJ2YWwobyksbz1udWxsLHIucmVhbHRpbWVNb2RlPSExKSxzJiYod2luZG93LmNsZWFySW50ZXJ2YWwocykscz1udWxsLGkucmVhbHRpbWVNb2RlPSExKX0sUD0oKT0+e2w9PT0ic3lzdGVtIj8oaC5jcHU9TWF0aC5yYW5kb20oKT4uNT84NToyNSxoLm1lbW9yeT1NYXRoLnJhbmRvbSgpPi41PzgwOjQ1KTpsPT09Im5ldHdvcmsiJiYoaC5kb3dubG9hZD1NYXRoLnJhbmRvbSgpPi41PzI1MDoxMDAsaC51cGxvYWQ9TWF0aC5yYW5kb20oKT4uNT84MDoyMCksaC5jb25uZWN0aW9ucz1NYXRoLnJhbmRvbSgpPi41PzI4MDo4MCxtPTAsdj0wfSxfPWEucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTtfLmZvckVhY2goaz0+e2xldCBOPWsudGV4dENvbnRlbnQ/LnRyaW0oKTtOPT09IlN5c3RlbSBVc2FnZSI/ay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PkUoInN5c3RlbSIpKTpOPT09Ik5ldHdvcmsgVHJhZmZpYyI/ay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PkUoIm5ldHdvcmsiKSk6Tj09PSJTYWxlcyBEYXRhIj9rLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+RSgic2FsZXMiKSk6Tj09PSJTdGFydCBMaXZlIj9rLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+QygpKTpOPT09IlN0b3AgTGl2ZSI/ay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PnooKSk6Tj09PSJTcGlrZSBWYWx1ZXMiJiZrLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+UCgpKX0pO2xldCAkPSgpPT57YS5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpLmZvckVhY2goTj0+e2xldCBTPU4udGV4dENvbnRlbnQ/LnRyaW0oKTtTPT09IlN5c3RlbSBVc2FnZSI/Ti50eXBlPWw9PT0ic3lzdGVtIj8iaGlnaGxpZ2h0ZWQiOiJub3JtYWwiOlM9PT0iTmV0d29yayBUcmFmZmljIj9OLnR5cGU9bD09PSJuZXR3b3JrIj8iaGlnaGxpZ2h0ZWQiOiJub3JtYWwiOlM9PT0iU2FsZXMgRGF0YSImJihOLnR5cGU9bD09PSJzYWxlcyI/ImhpZ2hsaWdodGVkIjoibm9ybWFsIil9KX07ci5yb2xsaW5nV2luZG93PWMsci5yZWFsdGltZU1vZGU9ITEsci55QXhpc1NjYWxpbmc9InBlcmNlbnRhZ2UiLHIueUF4aXNNYXg9MTAwLHIuYXV0b1Njcm9sbEludGVydmFsPTFlMyxzZXRUaW1lb3V0KCgpPT57ci51cGRhdGVUaW1lV2luZG93KCl9LDEwMCk7bGV0IEg9RSxMPWs9PntIKGspLCQoKX07aWYoXy5mb3JFYWNoKGs9PntsZXQgTj1rLnRleHRDb250ZW50Py50cmltKCk7Tj09PSJTeXN0ZW0gVXNhZ2UiPyhrLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+RSgic3lzdGVtIikpLGsuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT5MKCJzeXN0ZW0iKSkpOk49PT0iTmV0d29yayBUcmFmZmljIj8oay5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PkUoIm5ldHdvcmsiKSksay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PkwoIm5ldHdvcmsiKSkpOk49PT0iU2FsZXMgRGF0YSImJihrLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+RSgic2FsZXMiKSksay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PkwoInNhbGVzIikpKX0pLGkpe2xldCBrPWcoaC5jb25uZWN0aW9ucywzMCx1KTtpLnNlcmllcz1be25hbWU6IkNvbm5lY3Rpb25zIixkYXRhOmt9XSxpLnJvbGxpbmdXaW5kb3c9YyxpLnJlYWx0aW1lTW9kZT0hMSxpLnlBeGlzU2NhbGluZz0iZml4ZWQiLGkueUF4aXNNYXg9MzUwLGkuYXV0b1Njcm9sbEludGVydmFsPTFlMyxzZXRUaW1lb3V0KCgpPT57aS51cGRhdGVUaW1lV2luZG93KCl9LDEwMCl9fX0+CiAgICAgIDxzdHlsZT4KICAgICAgICAke3RlYAogICAgICAgIC5kZW1vQm94IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbHMgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNoYXJ0LWNvbnRhaW5lciB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgbWluLWhlaWdodDogNDAwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5pbmZvIHsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vQm94Ij4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGF0YXNldDoiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5TeXN0ZW0gVXNhZ2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk5ldHdvcmsgVHJhZmZpYzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U2FsZXMgRGF0YTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlJlYWwtdGltZToiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0YXJ0IExpdmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0b3AgTGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TcGlrZSBWYWx1ZXM8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY2hhcnQtY29udGFpbmVyIj4KICAgICAgICA8ZGVlcy1jaGFydC1hcmVhCiAgICAgICAgICBpZD0ibWFpbi1jaGFydCIKICAgICAgICAgIC5sYWJlbD0ke3Quc3lzdGVtLmxhYmVsfQogICAgICAgICAgLnNlcmllcz0ke3Quc3lzdGVtLnNlcmllc30KICAgICAgICAgIC55QXhpc0Zvcm1hdHRlcj0ke2Uuc3lzdGVtfQogICAgICAgID48L2RlZXMtY2hhcnQtYXJlYT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJjaGFydC1jb250YWluZXIiIHN0eWxlPSJtYXJnaW4tdG9wOiAyMHB4OyI+CiAgICAgICAgPGRlZXMtY2hhcnQtYXJlYQogICAgICAgICAgaWQ9ImNvbm5lY3Rpb25zLWNoYXJ0IgogICAgICAgICAgLmxhYmVsPSR7IkFjdGl2ZSBDb25uZWN0aW9ucyJ9CiAgICAgICAgICAuc2VyaWVzPSR7W3tuYW1lOiJDb25uZWN0aW9ucyIsZGF0YTpbXX1dfQogICAgICAgICAgLnlBeGlzRm9ybWF0dGVyPSR7YT0+YCR7YX1gfQogICAgICAgID48L2RlZXMtY2hhcnQtYXJlYT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJpbmZvIj4KICAgICAgICBSZWFsLXRpbWUgbW9uaXRvcmluZyB3aXRoIDItbWludXRlIHJvbGxpbmcgd2luZG93IOKAoiAKICAgICAgICBVcGRhdGVzIGV2ZXJ5IHNlY29uZCB3aXRoIHNtb290aCB2YWx1ZSB0cmFuc2l0aW9ucyDigKIgCiAgICAgICAgQ2xpY2sgJ1NwaWtlIFZhbHVlcycgdG8gc2ltdWxhdGUgbG9hZCBzcGlrZXMKICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgfTtmZSgpO3ZhciBNRnQ9W3AuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5tYWluYm94IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuY2hhcnRUaXRsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQogICAgICAuY2hhcnRDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBwYWRkaW5nOiA0NHB4IDE2cHggMTZweCAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgLyogRW5zdXJlIGNvbnRhaW5lciBkb2Vzbid0IG92ZXJyaWRlIGNoYXJ0IGJhY2tncm91bmQgKi8KICAgICAgfQogICAgICAKICAgICAgLyogQXBleENoYXJ0cyB0aGVtZSBvdmVycmlkZXMgKi8KICAgICAgLmFwZXhjaGFydHMtY2FudmFzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAuYXBleGNoYXJ0cy1pbm5lciB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgfQogICAgICAKICAgICAgLmFwZXhjaGFydHMtZ3JhcGhpY2FsIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICB9CiAgICBgXTtmZSgpO3ZhciB6RnQ9dD0+TWAKICAgICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0VGl0bGUiPiR7dC5sYWJlbH08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0Q29udGFpbmVyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDtmZSgpO1N0KCk7ZWMoKTt2YXIgWnI9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxWMT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sbHMxPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1jaGFydC1hcmVhIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W10sSCxMPVtdLGs9W10sTixTPVtdLFQ9W107dmFyIFI9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBBPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W2xlKCldLGY9W0QoKV0sZD1bRCh7dHlwZTpBcnJheX0pXSxiPVtEKHthdHRyaWJ1dGU6ITF9KV0sdj1bRCh7dHlwZTpOdW1iZXJ9KV0sRT1bRCh7dHlwZTpCb29sZWFufSldLFA9W0Qoe3R5cGU6U3RyaW5nfSldLEg9W0Qoe3R5cGU6TnVtYmVyfSldLE49W0Qoe3R5cGU6TnVtYmVyfSldLFpyKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY2hhcnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkY9PiJjaGFydCJpbiBGLGdldDpGPT5GLmNoYXJ0LHNldDooRixhZSk9PntGLmNoYXJ0PWFlfX0sbWV0YWRhdGE6QX0scyxsKSxacih0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImxhYmVsIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpGPT4ibGFiZWwiaW4gRixnZXQ6Rj0+Ri5sYWJlbCxzZXQ6KEYsYWUpPT57Ri5sYWJlbD1hZX19LG1ldGFkYXRhOkF9LGMsdSksWnIodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZXJpZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkY9PiJzZXJpZXMiaW4gRixnZXQ6Rj0+Ri5zZXJpZXMsc2V0OihGLGFlKT0+e0Yuc2VyaWVzPWFlfX0sbWV0YWRhdGE6QX0saCxnKSxacih0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InlBeGlzRm9ybWF0dGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpGPT4ieUF4aXNGb3JtYXR0ZXIiaW4gRixnZXQ6Rj0+Ri55QXhpc0Zvcm1hdHRlcixzZXQ6KEYsYWUpPT57Ri55QXhpc0Zvcm1hdHRlcj1hZX19LG1ldGFkYXRhOkF9LHgsbSksWnIodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyb2xsaW5nV2luZG93IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpGPT4icm9sbGluZ1dpbmRvdyJpbiBGLGdldDpGPT5GLnJvbGxpbmdXaW5kb3csc2V0OihGLGFlKT0+e0Yucm9sbGluZ1dpbmRvdz1hZX19LG1ldGFkYXRhOkF9LHksdyksWnIodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyZWFsdGltZU1vZGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkY9PiJyZWFsdGltZU1vZGUiaW4gRixnZXQ6Rj0+Ri5yZWFsdGltZU1vZGUsc2V0OihGLGFlKT0+e0YucmVhbHRpbWVNb2RlPWFlfX0sbWV0YWRhdGE6QX0sQyx6KSxacih0aGlzLG51bGwsUCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InlBeGlzU2NhbGluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Rj0+InlBeGlzU2NhbGluZyJpbiBGLGdldDpGPT5GLnlBeGlzU2NhbGluZyxzZXQ6KEYsYWUpPT57Ri55QXhpc1NjYWxpbmc9YWV9fSxtZXRhZGF0YTpBfSxfLCQpLFpyKHRoaXMsbnVsbCxILHtraW5kOiJhY2Nlc3NvciIsbmFtZToieUF4aXNNYXgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkY9PiJ5QXhpc01heCJpbiBGLGdldDpGPT5GLnlBeGlzTWF4LHNldDooRixhZSk9PntGLnlBeGlzTWF4PWFlfX0sbWV0YWRhdGE6QX0sTCxrKSxacih0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImF1dG9TY3JvbGxJbnRlcnZhbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Rj0+ImF1dG9TY3JvbGxJbnRlcnZhbCJpbiBGLGdldDpGPT5GLmF1dG9TY3JvbGxJbnRlcnZhbCxzZXQ6KEYsYWUpPT57Ri5hdXRvU2Nyb2xsSW50ZXJ2YWw9YWV9fSxtZXRhZGF0YTpBfSxTLFQpLFpyKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOkF9LG51bGwsYSksUj1yPWUudmFsdWUsQSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpBfSl9c3RhdGljIGRlbW89d0Z0O3N0YXRpYyBkZW1vR3JvdXA9IkNoYXJ0IjsjZT1WMSh0aGlzLHMsdm9pZCAwKTtnZXQgY2hhcnQoKXtyZXR1cm4gdGhpcy4jZX1zZXQgY2hhcnQoQSl7dGhpcy4jZT1BfSN0PShWMSh0aGlzLGwpLFYxKHRoaXMsYywiVW50aXRsZWQgQ2hhcnQiKSk7Z2V0IGxhYmVsKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGxhYmVsKEEpe3RoaXMuI3Q9QX0jYT0oVjEodGhpcyx1KSxWMSh0aGlzLGgsW10pKTtnZXQgc2VyaWVzKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHNlcmllcyhBKXt0aGlzLiNhPUF9Z2V0IGNoYXJ0U2VyaWVzKCl7cmV0dXJuIHRoaXMuaW50ZXJuYWxDaGFydERhdGEubGVuZ3RoPjA/dGhpcy5pbnRlcm5hbENoYXJ0RGF0YTp0aGlzLnNlcmllc30jcj0oVjEodGhpcyxnKSxWMSh0aGlzLHgsQT0+YCR7QX0gTWJwc2ApKTtnZXQgeUF4aXNGb3JtYXR0ZXIoKXtyZXR1cm4gdGhpcy4jcn1zZXQgeUF4aXNGb3JtYXR0ZXIoQSl7dGhpcy4jcj1BfSNpPShWMSh0aGlzLG0pLFYxKHRoaXMseSwwKSk7Z2V0IHJvbGxpbmdXaW5kb3coKXtyZXR1cm4gdGhpcy4jaX1zZXQgcm9sbGluZ1dpbmRvdyhBKXt0aGlzLiNpPUF9I289KFYxKHRoaXMsdyksVjEodGhpcyxDLCExKSk7Z2V0IHJlYWx0aW1lTW9kZSgpe3JldHVybiB0aGlzLiNvfXNldCByZWFsdGltZU1vZGUoQSl7dGhpcy4jbz1BfSNzPShWMSh0aGlzLHopLFYxKHRoaXMsXywiZHluYW1pYyIpKTtnZXQgeUF4aXNTY2FsaW5nKCl7cmV0dXJuIHRoaXMuI3N9c2V0IHlBeGlzU2NhbGluZyhBKXt0aGlzLiNzPUF9I249KFYxKHRoaXMsJCksVjEodGhpcyxMLDEwMCkpO2dldCB5QXhpc01heCgpe3JldHVybiB0aGlzLiNufXNldCB5QXhpc01heChBKXt0aGlzLiNuPUF9I2w9KFYxKHRoaXMsayksVjEodGhpcyxTLDFlMykpO2dldCBhdXRvU2Nyb2xsSW50ZXJ2YWwoKXtyZXR1cm4gdGhpcy4jbH1zZXQgYXV0b1Njcm9sbEludGVydmFsKEEpe3RoaXMuI2w9QX1yZXNpemVPYnNlcnZlcj1WMSh0aGlzLFQpO3Jlc2l6ZVRpbWVvdXQ7aW50ZXJuYWxDaGFydERhdGE9W107YXV0b1Njcm9sbFRpbWVyPW51bGw7REVCVUdfUkVTSVpFPSExO0NIQVJUX0NPTE9SUz17ZGFyazpbImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCJoc2woMTczLjQgODAuNCUgNDAlKSIsImhzbCgyODAuMyA4Ny40JSA2Ni43JSkiLCJoc2woMjQuNiA5NSUgNTMuMSUpIl0sbGlnaHQ6WyJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsImhzbCgyODAuMyA0Ny43JSA1MC4yJSkiLCJoc2woMjAuNSA5MC4yJSA0OC4yJSkiXX07Y29uc3RydWN0b3IoKXtzdXBlcigpLGMxLnNldHVwKCksdGhpcy5yZXNpemVPYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIoQT0+e3RoaXMucmVzaXplVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMucmVzaXplVGltZW91dCksdGhpcy5yZXNpemVUaW1lb3V0PXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57aWYodGhpcy5jaGFydCl7aWYodGhpcy5ERUJVR19SRVNJWkUmJkEubGVuZ3RoPjApe2xldCBGPUFbMF07Y29uc29sZS5sb2coIkRlZXNDaGFydEFyZWEgLSBSZXNpemUgZGV0ZWN0ZWQ6Iix7d2lkdGg6Ri5jb250ZW50UmVjdC53aWR0aCxoZWlnaHQ6Ri5jb250ZW50UmVjdC5oZWlnaHR9KX10aGlzLnJlc2l6ZUNoYXJ0KCl9fSwxMDApfSksdGhpcy5yZWdpc3RlckdhcmJhZ2VGdW5jdGlvbihhc3luYygpPT57aWYodGhpcy5yZXNpemVUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0KSx0aGlzLnJlc2l6ZU9ic2VydmVyJiZ0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLnN0b3BBdXRvU2Nyb2xsKCksdGhpcy5jaGFydCl0cnl7dGhpcy5jaGFydC5kZXN0cm95KCksdGhpcy5jaGFydD1udWxsfWNhdGNoKEEpe2NvbnNvbGUuZXJyb3IoIkVycm9yIGRlc3Ryb3lpbmcgY2hhcnQ6IixBKX19KX1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jaGFydCYmKGF3YWl0IG5ldyBQcm9taXNlKEE9PnJlcXVlc3RBbmltYXRpb25GcmFtZShBKSksYXdhaXQgdGhpcy5yZXNpemVDaGFydCgpKX1zdGF0aWMgc3R5bGVzPU1GdDtyZW5kZXIoKXtyZXR1cm4gekZ0KHRoaXMpfWFzeW5jIGZpcnN0VXBkYXRlZCgpe2F3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlO2xldCBBPWF3YWl0IEgyLmdldEluc3RhbmNlKCkubG9hZEFwZXhDaGFydHMoKTthd2FpdCBuZXcgUHJvbWlzZShzZT0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNlKSk7bGV0IEY9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluYm94IiksYWU9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jaGFydENvbnRhaW5lciIpO2lmKCFGfHwhYWUpe2NvbnNvbGUuZXJyb3IoIkNoYXJ0IGNvbnRhaW5lcnMgbm90IGZvdW5kIik7cmV0dXJufWxldCBWPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGFlKSxTZT1wYXJzZUludChWLnBhZGRpbmdUb3AsMTApLHplPXBhcnNlSW50KFYucGFkZGluZ0JvdHRvbSwxMCksVz1wYXJzZUludChWLnBhZGRpbmdMZWZ0LDEwKSxOZT1wYXJzZUludChWLnBhZGRpbmdSaWdodCwxMCksUmU9Ri5jbGllbnRXaWR0aC1XLU5lLFg9Ri5vZmZzZXRIZWlnaHQtU2UtemUsST10aGlzLnNlcmllcy5sZW5ndGg+MD90aGlzLnNlcmllczpbe25hbWU6ImNwdSIsZGF0YTpbe3g6IjIwMjUtMDEtMTVUMDM6MDA6MDAiLHk6MjV9LHt4OiIyMDI1LTAxLTE1VDA3OjAwOjAwIix5OjMwfSx7eDoiMjAyNS0wMS0xNVQxMTowMDowMCIseToyMH0se3g6IjIwMjUtMDEtMTVUMTU6MDA6MDAiLHk6MzV9LHt4OiIyMDI1LTAxLTE1VDE5OjAwOjAwIix5OjI1fV19LHtuYW1lOiJtZW1vcnkiLGRhdGE6W3t4OiIyMDI1LTAxLTE1VDAzOjAwOjAwIix5OjEwfSx7eDoiMjAyNS0wMS0xNVQwNzowMDowMCIseToxMn0se3g6IjIwMjUtMDEtMTVUMTE6MDA6MDAiLHk6MTB9LHt4OiIyMDI1LTAxLTE1VDE1OjAwOjAwIix5OjMwfSx7eDoiMjAyNS0wMS0xNVQxOTowMDowMCIseTo0MH1dfV07dGhpcy5pbnRlcm5hbENoYXJ0RGF0YT1JO2xldCBPPSF0aGlzLmdvQnJpZ2h0LEc9Tz8iZGFyayI6ImxpZ2h0Ijt2YXIgaj17c2VyaWVzOkksY2hhcnQ6e3dpZHRoOlJlfHwxMDAsaGVpZ2h0Olh8fDEwMCx0eXBlOiJhcmVhIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsdG9vbGJhcjp7c2hvdzohMX0sYW5pbWF0aW9uczp7ZW5hYmxlZDohdGhpcy5yZWFsdGltZU1vZGUsc3BlZWQ6NDAwLGFuaW1hdGVHcmFkdWFsbHk6e2VuYWJsZWQ6ITEsZGVsYXk6MH0sZHluYW1pY0FuaW1hdGlvbjp7ZW5hYmxlZDohdGhpcy5yZWFsdGltZU1vZGUsc3BlZWQ6MzUwfX0sem9vbTp7ZW5hYmxlZDohMX0sc2VsZWN0aW9uOntlbmFibGVkOiExfX0sZGF0YUxhYmVsczp7ZW5hYmxlZDohMX0sc3Ryb2tlOnt3aWR0aDoyLGN1cnZlOiJzbW9vdGgifSx4YXhpczp7dHlwZToiZGF0ZXRpbWUiLGxhYmVsczp7Zm9ybWF0OiJISDptbTpzcyIsZGF0ZXRpbWVVVEM6ITEsc3R5bGU6e2NvbG9yczpbTz8iaHNsKDAgMCUgNjMuOSUpIjoiaHNsKDAgMCUgMjAlKSJdLGZvbnRTaXplOiIxMnB4Iixmb250RmFtaWx5OictYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIHNhbnMtc2VyaWYnLGZvbnRXZWlnaHQ6IjQwMCJ9fSxheGlzQm9yZGVyOntzaG93OiExfSxheGlzVGlja3M6e3Nob3c6ITF9fSx5YXhpczp7bWluOjAsbWF4OnRoaXMueUF4aXNTY2FsaW5nPT09ImR5bmFtaWMiP3ZvaWQgMDp0aGlzLnlBeGlzTWF4LGxhYmVsczp7Zm9ybWF0dGVyOnRoaXMueUF4aXNGb3JtYXR0ZXIsc3R5bGU6e2NvbG9yczpbTz8iaHNsKDAgMCUgNjMuOSUpIjoiaHNsKDAgMCUgMjAlKSJdLGZvbnRTaXplOiIxMnB4Iixmb250RmFtaWx5OictYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIHNhbnMtc2VyaWYnLGZvbnRXZWlnaHQ6IjQwMCJ9fSxheGlzQm9yZGVyOntzaG93OiExfSxheGlzVGlja3M6e3Nob3c6ITF9fSx0b29sdGlwOntzaGFyZWQ6ITAsaW50ZXJzZWN0OiExLGZvbGxvd0N1cnNvcjohMCx4Ontmb3JtYXQ6ImRkL01NL3l5IEhIOm1tIn0sY3VzdG9tOih7c2VyaWVzOnNlLGRhdGFQb2ludEluZGV4OmtlLHc6RGV9KT0+e2xldCBVPURlLmNvbmZpZy50aGVtZS5tb2RlPT09ImRhcmsiLEI9VT8iaHNsKDAgMCUgOSUpIjoiaHNsKDAgMCUgMTAwJSkiLG9lPVU/ImhzbCgwIDAlIDk1JSkiOiJoc2woMCAwJSA5JSkiLHZlPVU/ImhzbCgwIDAlIDE0LjklKSI6ImhzbCgwIDAlIDg5LjglKSIseWU9RGUuY29uZmlnLnlheGlzWzBdPy5sYWJlbHM/LmZvcm1hdHRlcnx8KG5lPT5uZS50b1N0cmluZygpKSwkZT1gPGRpdiBzdHlsZT0icGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogJHtCfTsgY29sb3I6ICR7b2V9OyBib3JkZXItcmFkaXVzOiA2cHg7IGJveC1zaGFkb3c6IDAgMnB4IDhweCAwIGhzbCgwIDAlIDAlIC8gJHtVPyIwLjIiOiIwLjEifSk7IGJvcmRlcjogMXB4IHNvbGlkICR7dmV9O2ZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPmA7cmV0dXJuIHNlLmZvckVhY2goKG5lLHJlKT0+e2xldCBnZT1EZS5nbG9iYWxzLnNlcmllc05hbWVzW3JlXSxFZT1uZVtrZV0scnQ9RGUuZ2xvYmFscy5jb2xvcnNbcmVdLHVlPXllKEVlKTskZSs9YDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4OyBtYXJnaW46ICR7cmU+MD8iNnB4IjoiMCJ9IDA7Ij4KICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMTBweDsgaGVpZ2h0OiAxMHB4OyBiYWNrZ3JvdW5kOiAke3J0fTsgYm9yZGVyLXJhZGl1czogMnB4OyI+PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogNTAwOyI+JHtnZX06PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDogYXV0bzsgZm9udC13ZWlnaHQ6IDYwMDsiPiR7dWV9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj5gfSksJGUrPSI8L2Rpdj4iLCRlfX0sZ3JpZDp7eGF4aXM6e2xpbmVzOntzaG93OiExfX0seWF4aXM6e2xpbmVzOntzaG93OiEwfX0sYm9yZGVyQ29sb3I6Tz8iaHNsKDAgMCUgMTQuOSUpIjoiaHNsKDAgMCUgOTQlKSIsc3Ryb2tlRGFzaEFycmF5OjAscGFkZGluZzp7dG9wOjEwLHJpZ2h0OjIwLGJvdHRvbToxMCxsZWZ0OjIwfX0sZmlsbDp7dHlwZToiZ3JhZGllbnQiLGdyYWRpZW50OntzaGFkZTpPPyJkYXJrIjoibGlnaHQiLHR5cGU6InZlcnRpY2FsIixzaGFkZUludGVuc2l0eTouMSxvcGFjaXR5RnJvbTpPPy4yOi4zLG9wYWNpdHlUbzowLHN0b3BzOlswLDEwMF19fSxjb2xvcnM6Tz90aGlzLkNIQVJUX0NPTE9SUy5kYXJrOnRoaXMuQ0hBUlRfQ09MT1JTLmxpZ2h0LHRoZW1lOnttb2RlOkd9fTt0cnl7dGhpcy5jaGFydD1uZXcgQSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNoYXJ0Q29udGFpbmVyIiksaiksYXdhaXQgdGhpcy5jaGFydC5yZW5kZXIoKSxhd2FpdCBuZXcgUHJvbWlzZShrZT0+c2V0VGltZW91dChrZSwxMDApKSxhd2FpdCB0aGlzLnJlc2l6ZUNoYXJ0KCk7bGV0IHNlPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmJveCIpO3NlJiZ0aGlzLnJlc2l6ZU9ic2VydmVyJiYodGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHNlKSx0aGlzLkRFQlVHX1JFU0laRSYmY29uc29sZS5sb2coIkRlZXNDaGFydEFyZWEgLSBSZXNpemVPYnNlcnZlciBhdHRhY2hlZCB0byBtYWluYm94IikpfWNhdGNoKHNlKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjaGFydDoiLHNlKX19YXN5bmMgdXBkYXRlZChBKXtzdXBlci51cGRhdGVkKEEpLEEuaGFzKCJnb0JyaWdodCIpJiZ0aGlzLmNoYXJ0JiZhd2FpdCB0aGlzLnVwZGF0ZUNoYXJ0VGhlbWUoKSxBLmhhcygic2VyaWVzIikmJnRoaXMuY2hhcnQmJnRoaXMuc2VyaWVzLmxlbmd0aD4wJiZhd2FpdCB0aGlzLnVwZGF0ZVNlcmllcyh0aGlzLnNlcmllcyksQS5oYXMoInlBeGlzRm9ybWF0dGVyIikmJnRoaXMuY2hhcnQmJmF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7eWF4aXM6e2xhYmVsczp7Zm9ybWF0dGVyOnRoaXMueUF4aXNGb3JtYXR0ZXJ9fX0pLEEuaGFzKCJyZWFsdGltZU1vZGUiKSYmdGhpcy5jaGFydCYmKGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7Y2hhcnQ6e2FuaW1hdGlvbnM6e2VuYWJsZWQ6IXRoaXMucmVhbHRpbWVNb2RlLHNwZWVkOjQwMCxhbmltYXRlR3JhZHVhbGx5OntlbmFibGVkOiExLGRlbGF5OjB9LGR5bmFtaWNBbmltYXRpb246e2VuYWJsZWQ6IXRoaXMucmVhbHRpbWVNb2RlLHNwZWVkOjM1MH19fX0pLHRoaXMucmVhbHRpbWVNb2RlJiZ0aGlzLnJvbGxpbmdXaW5kb3c+MCYmdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWw+MD90aGlzLnN0YXJ0QXV0b1Njcm9sbCgpOnRoaXMuc3RvcEF1dG9TY3JvbGwoKSksQS5oYXMoImF1dG9TY3JvbGxJbnRlcnZhbCIpJiZ0aGlzLmNoYXJ0JiYodGhpcy5zdG9wQXV0b1Njcm9sbCgpLHRoaXMucmVhbHRpbWVNb2RlJiZ0aGlzLnJvbGxpbmdXaW5kb3c+MCYmdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWw+MCYmdGhpcy5zdGFydEF1dG9TY3JvbGwoKSksKEEuaGFzKCJ5QXhpc1NjYWxpbmciKXx8QS5oYXMoInlBeGlzTWF4IikpJiZ0aGlzLmNoYXJ0JiZhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoe3lheGlzOnttaW46MCxtYXg6dGhpcy55QXhpc1NjYWxpbmc9PT0iZHluYW1pYyI/dm9pZCAwOnRoaXMueUF4aXNNYXh9fSl9YXN5bmMgdXBkYXRlU2VyaWVzKEEsRj0hMCl7aWYodGhpcy5jaGFydCl0cnl7aWYodGhpcy5pbnRlcm5hbENoYXJ0RGF0YT1BLHRoaXMucm9sbGluZ1dpbmRvdz4wJiZ0aGlzLnJlYWx0aW1lTW9kZSl7bGV0IFY9RGF0ZS5ub3coKS10aGlzLnJvbGxpbmdXaW5kb3csU2U9QS5tYXAoemU9Pih7bmFtZTp6ZS5uYW1lLGRhdGE6emUuZGF0YS5maWx0ZXIoVz0+dHlwZW9mIFc9PSJvYmplY3QiJiZXIT09bnVsbCYmIngiaW4gVz9uZXcgRGF0ZShXLngpLmdldFRpbWUoKT5WOiExKX0pKTtpZihTZS5zb21lKHplPT56ZS5kYXRhLmxlbmd0aD4wKSl7aWYodGhpcy55QXhpc1NjYWxpbmc9PT0iZHluYW1pYyIpe2xldCB6ZT1TZS5mbGF0TWFwKFc9PlcuZGF0YS5tYXAoTmU9Pk5lLnkpKTtpZih6ZS5sZW5ndGg+MCl7bGV0IFc9TWF0aC5tYXgoLi4uemUpLE5lPU1hdGguY2VpbChXKjEuMSk7YXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHt5YXhpczp7bWluOjAsbWF4Ok5lfX0sITEsITEpfX1hd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZVNlcmllcyhTZSwhMSl9fWVsc2UgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVTZXJpZXMoQSxGKX1jYXRjaChhZSl7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHVwZGF0ZSBjaGFydCBzZXJpZXM6IixhZSl9fWFzeW5jIHVwZGF0ZVRpbWVXaW5kb3coKXtpZighdGhpcy5jaGFydHx8dGhpcy5yb2xsaW5nV2luZG93PD0wKXJldHVybjtsZXQgQT1EYXRlLm5vdygpLEY9QS10aGlzLnJvbGxpbmdXaW5kb3c7YXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHt4YXhpczp7bWluOkYsbWF4OkEsbGFiZWxzOntmb3JtYXQ6IkhIOm1tOnNzIixkYXRldGltZVVUQzohMSxzdHlsZTp7Y29sb3JzOlt0aGlzLmdvQnJpZ2h0PyJoc2woMCAwJSAyMCUpIjoiaHNsKDAgMCUgNjMuOSUpIl0sZm9udFNpemU6IjEycHgiLGZvbnRGYW1pbHk6Jy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZicsZm9udFdlaWdodDoiNDAwIn19LHRpY2tBbW91bnQ6Nn19LCExLCExKX1hc3luYyBhcHBlbmREYXRhKEEpe3RoaXMuY2hhcnQmJnRoaXMuY2hhcnQuYXBwZW5kRGF0YShBKX1hc3luYyB1cGRhdGVPcHRpb25zKEEsRixhZSl7aWYodGhpcy5jaGFydClyZXR1cm4gdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKEEsRixhZSl9YXN5bmMgcmVzaXplQ2hhcnQoKXtpZih0aGlzLmNoYXJ0KXt0aGlzLkRFQlVHX1JFU0laRSYmY29uc29sZS5sb2coIkRlZXNDaGFydEFyZWEgLSByZXNpemVDaGFydCBjYWxsZWQiKTt0cnl7bGV0IEE9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluYm94IiksRj10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNoYXJ0Q29udGFpbmVyIik7aWYoIUF8fCFGKXJldHVybjtBLm9mZnNldEhlaWdodDtsZXQgYWU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoRiksVj1wYXJzZUludChhZS5wYWRkaW5nVG9wLDEwKSxTZT1wYXJzZUludChhZS5wYWRkaW5nQm90dG9tLDEwKSx6ZT1wYXJzZUludChhZS5wYWRkaW5nTGVmdCwxMCksVz1wYXJzZUludChhZS5wYWRkaW5nUmlnaHQsMTApLE5lPUEuY2xpZW50V2lkdGgtemUtVyxSZT1BLm9mZnNldEhlaWdodC1WLVNlO05lPjAmJlJlPjAmJih0aGlzLkRFQlVHX1JFU0laRSYmY29uc29sZS5sb2coIkRlZXNDaGFydEFyZWEgLSBVcGRhdGluZyBjaGFydCBkaW1lbnNpb25zOiIse3dpZHRoOk5lLGhlaWdodDpSZX0pLGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7Y2hhcnQ6e3dpZHRoOk5lLGhlaWdodDpSZX19LCEwLCExKSl9Y2F0Y2goQSl7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHJlc2l6ZSBjaGFydDoiLEEpfX19YXN5bmMgZm9yY2VSZXNpemUoKXthd2FpdCB0aGlzLnJlc2l6ZUNoYXJ0KCl9c3RhcnRBdXRvU2Nyb2xsKCl7dGhpcy5hdXRvU2Nyb2xsVGltZXJ8fCh0aGlzLmF1dG9TY3JvbGxUaW1lcj13aW5kb3cuc2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnVwZGF0ZVRpbWVXaW5kb3coKX0sdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpKX1zdG9wQXV0b1Njcm9sbCgpe3RoaXMuYXV0b1Njcm9sbFRpbWVyJiYod2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5hdXRvU2Nyb2xsVGltZXIpLHRoaXMuYXV0b1Njcm9sbFRpbWVyPW51bGwpfWFzeW5jIHVwZGF0ZUNoYXJ0VGhlbWUoKXtpZighdGhpcy5jaGFydClyZXR1cm47bGV0IEE9IXRoaXMuZ29CcmlnaHQsRj1BPyJkYXJrIjoibGlnaHQiO2F3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7dGhlbWU6e21vZGU6Rn0sY29sb3JzOkE/dGhpcy5DSEFSVF9DT0xPUlMuZGFyazp0aGlzLkNIQVJUX0NPTE9SUy5saWdodCx4YXhpczp7bGFiZWxzOntzdHlsZTp7Y29sb3JzOltBPyJoc2woMCAwJSA2My45JSkiOiJoc2woMCAwJSAyMCUpIl19fX0seWF4aXM6e2xhYmVsczp7c3R5bGU6e2NvbG9yczpbQT8iaHNsKDAgMCUgNjMuOSUpIjoiaHNsKDAgMCUgMjAlKSJdfX19LGdyaWQ6e2JvcmRlckNvbG9yOkE/ImhzbCgwIDAlIDE0LjklKSI6ImhzbCgwIDAlIDk0JSkifSxmaWxsOntncmFkaWVudDp7c2hhZGU6QT8iZGFyayI6ImxpZ2h0IixvcGFjaXR5RnJvbTpBPy4yOi4zfX19KX1zdGF0aWN7VjEocixhKX19O3JldHVybiBSPXJ9KSgpO2ZlKCk7dmFyIFNGdD0oKT0+TWAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtY2hhcnQtbG9nIiksYSxyPVsiU2VydmVyIiwiRGF0YWJhc2UiLCJBUEkiLCJBdXRoIiwiQ2FjaGUiLCJRdWV1ZSIsIldlYlNvY2tldCIsIlNjaGVkdWxlciJdLGk9e2RlYnVnOlsiTG9hZGluZyBtb2R1bGU6IHt7bW9kdWxlfX0iLCJDYWNoZSBoaXQgZm9yIGtleToge3trZXl9fSIsIlNRTCBxdWVyeSBleGVjdXRlZCBpbiB7e3RpbWV9fW1zIiwiUmVxdWVzdCBoZWFkZXJzOiB7e2hlYWRlcnN9fSIsIkVudmlyb25tZW50IHZhcmlhYmxlIGxvYWRlZDoge3t2YXJ9fSJdLGluZm86WyJSZXF1ZXN0IHJlY2VpdmVkOiB7e21ldGhvZH19IHt7cGF0aH19IiwiVXNlciB7e3VzZXJJZH19IGF1dGhlbnRpY2F0ZWQgc3VjY2Vzc2Z1bGx5IiwiUHJvY2Vzc2luZyBqb2Ige3tqb2JJZH19IGZyb20gcXVldWUiLCdTY2hlZHVsZWQgdGFzayAie3t0YXNrfX0iIHN0YXJ0ZWQnLCJXZWJTb2NrZXQgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCBmcm9tIHt7aXB9fSJdLHdhcm46WyJTbG93IHF1ZXJ5IGRldGVjdGVkOiB7e3F1ZXJ5fX0gKHt7dGltZX19bXMpIiwiTWVtb3J5IHVzYWdlIGF0IHt7cGVyY2VudH19JSIsIlJhdGUgbGltaXQgYXBwcm9hY2hpbmcgZm9yIElQIHt7aXB9fSIsIkRlcHJlY2F0ZWQgQVBJIGVuZHBvaW50IGNhbGxlZDoge3tlbmRwb2ludH19IiwiQ2VydGlmaWNhdGUgZXhwaXJlcyBpbiB7e2RheXN9fSBkYXlzIl0sZXJyb3I6WyJEYXRhYmFzZSBjb25uZWN0aW9uIGxvc3Q6IHt7ZXJyb3J9fSIsIkZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3Q6IHt7ZXJyb3J9fSIsIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgdXNlciB7e3VzZXJ9fSIsIkZpbGUgbm90IGZvdW5kOiB7e3BhdGh9fSIsIlNlcnZpY2UgdW5hdmFpbGFibGU6IHt7c2VydmljZX19Il0sc3VjY2VzczpbIlNlcnZlciBzdGFydGVkIHN1Y2Nlc3NmdWxseSBvbiBwb3J0IHt7cG9ydH19IiwiRGF0YWJhc2UgbWlncmF0aW9uIGNvbXBsZXRlZCIsIkJhY2t1cCBjb21wbGV0ZWQ6IHt7c2l6ZX19IE1CIiwiU1NMIGNlcnRpZmljYXRlIHJlbmV3ZWQiLCJIZWFsdGggY2hlY2sgcGFzc2VkOiBhbGwgc3lzdGVtcyBvcGVyYXRpb25hbCJdfSxvPSgpPT57bGV0IGM9WyJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJzdWNjZXNzIl0sdT1bLjIsLjUsLjE1LC4xLC4wNV0sZD1NYXRoLnJhbmRvbSgpLGg9MCxnPSJpbmZvIjtmb3IobGV0IHk9MDt5PHUubGVuZ3RoO3krKylpZihoKz11W3ldLGQ8aCl7Zz1jW3ldO2JyZWFrfWxldCBiPXJbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnIubGVuZ3RoKV0seD1pW2ddLHY9eFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqeC5sZW5ndGgpXS5yZXBsYWNlKCJ7e21vZHVsZX19IixbImV4cHJlc3MiLCJtb25nb29zZSIsInJlZGlzIiwic29ja2V0LmlvIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQpXSkucmVwbGFjZSgie3trZXl9fSIsInVzZXI6IitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWUzKSkucmVwbGFjZSgie3t0aW1lfX0iLFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNTAwKSs1MCkpLnJlcGxhY2UoInt7aGVhZGVyc319IiwiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uLCBBdXRob3JpemF0aW9uOiBCZWFyZXIgLi4uIikucmVwbGFjZSgie3t2YXJ9fSIsWyJOT0RFX0VOViIsIkRBVEFCQVNFX1VSTCIsIkFQSV9LRVkiLCJQT1JUIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQpXSkucmVwbGFjZSgie3ttZXRob2R9fSIsWyJHRVQiLCJQT1NUIiwiUFVUIiwiREVMRVRFIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQpXSkucmVwbGFjZSgie3twYXRofX0iLFsiL2FwaS91c2VycyIsIi9hcGkvYXV0aC9sb2dpbiIsIi9hcGkvcHJvZHVjdHMiLCIvaGVhbHRoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQpXSkucmVwbGFjZSgie3t1c2VySWR9fSIsU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpKSkucmVwbGFjZSgie3tqb2JJZH19Iiwiam9iXyIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsMTEpKS5yZXBsYWNlKCJ7e3Rhc2t9fSIsWyJjbGVhbnVwIiwiYmFja3VwIiwicmVwb3J0LWdlbmVyYXRpb24iLCJjYWNoZS1yZWZyZXNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQpXSkucmVwbGFjZSgie3tpcH19IixgMTkyLjE2OC4xLiR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjI1NSl9YCkucmVwbGFjZSgie3txdWVyeX19IiwiU0VMRUNUICogRlJPTSB1c2VycyBXSEVSRSAuLi4iKS5yZXBsYWNlKCJ7e3BlcmNlbnR9fSIsU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSozMCkrNzApKS5yZXBsYWNlKCJ7e2VuZHBvaW50fX0iLCIvYXBpL3YxL2xlZ2FjeSIpLnJlcGxhY2UoInt7ZGF5c319IixTdHJpbmcoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjMwKSsxKSkucmVwbGFjZSgie3tlcnJvcn19IixbIkVDT05OUkVGVVNFRCIsIkVUSU1FRE9VVCIsIkVOT1RGT1VORCJdW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSozKV0pLnJlcGxhY2UoInt7dXNlcn19IiwidXNlcl8iK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTMpKS5yZXBsYWNlKCJ7e3NlcnZpY2V9fSIsWyJSZWRpcyIsIk1vbmdvREIiLCJFbGFzdGljU2VhcmNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjMpXSkucmVwbGFjZSgie3twb3J0fX0iLFN0cmluZygzZTMrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEwKSkpLnJlcGxhY2UoInt7c2l6ZX19IixTdHJpbmcoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjUwMCkrMTAwKSk7ZS5hZGRMb2coZyx2LGIpfSxzPSgpPT57aWYoIWEpe2xldCBjPSgpPT57bygpO2xldCB1PU1hdGgucmFuZG9tKCkqMmUzKzUwMDthPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57YSYmYygpfSx1KX07YygpfX0sbD0oKT0+e2EmJih3aW5kb3cuY2xlYXJUaW1lb3V0KGEpLGE9bnVsbCl9O3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKS5mb3JFYWNoKGM9PntsZXQgdT1jLnRleHRDb250ZW50Py50cmltKCk7dT09PSJBZGQgU2luZ2xlIExvZyI/Yy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pm8oKSk6dT09PSJTdGFydCBTaW11bGF0aW9uIj9jLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+cygpKTp1PT09IlN0b3AgU2ltdWxhdGlvbiImJmMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT5sKCkpfSl9fT4KICAgICAgPHN0eWxlPgogICAgICAuZGVtb0JveCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJhY2tncm91bmQ6ICMwMDAwMDA7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CiAgICAgIC5jb250cm9scyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIC5pbmZvIHsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImRlbW9Cb3giPgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBTaW5nbGUgTG9nPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8ZGVlcy1idXR0b24+U3RhcnQgU2ltdWxhdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgPGRlZXMtYnV0dG9uPlN0b3AgU2ltdWxhdGlvbjwvZGVlcy1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJpbmZvIj5TaW11bGF0aW5nIHJlYWxpc3RpYyBzZXJ2ZXIgbG9ncyB3aXRoIHZhcmlvdXMgbGV2ZWxzIGFuZCBzb3VyY2VzPC9kaXY+CiAgICAgIDxkZWVzLWNoYXJ0LWxvZwogICAgICAgIC5sYWJlbD0keyJQcm9kdWN0aW9uIFNlcnZlciBMb2dzIn0KICAgICAgPjwvZGVlcy1jaGFydC1sb2c+CiAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgO2ZlKCk7U3QoKTtCZSgpO3ZhciB5ST1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LFlpPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxjczE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWNoYXJ0LWxvZyIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdO3ZhciB2PWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgeT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKCldLGY9W0Qoe3R5cGU6QXJyYXl9KV0sZD1bRCh7dHlwZTpCb29sZWFufSldLGI9W0Qoe3R5cGU6TnVtYmVyfSldLHlJKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGFiZWwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnc9PiJsYWJlbCJpbiB3LGdldDp3PT53LmxhYmVsLHNldDoodyxFKT0+e3cubGFiZWw9RX19LG1ldGFkYXRhOnl9LHMsbCkseUkodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsb2dFbnRyaWVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4ibG9nRW50cmllcyJpbiB3LGdldDp3PT53LmxvZ0VudHJpZXMsc2V0Oih3LEUpPT57dy5sb2dFbnRyaWVzPUV9fSxtZXRhZGF0YTp5fSxjLHUpLHlJKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXV0b1Njcm9sbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+ImF1dG9TY3JvbGwiaW4gdyxnZXQ6dz0+dy5hdXRvU2Nyb2xsLHNldDoodyxFKT0+e3cuYXV0b1Njcm9sbD1FfX0sbWV0YWRhdGE6eX0saCxnKSx5SSh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1heEVudHJpZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnc9PiJtYXhFbnRyaWVzImluIHcsZ2V0Onc9PncubWF4RW50cmllcyxzZXQ6KHcsRSk9Pnt3Lm1heEVudHJpZXM9RX19LG1ldGFkYXRhOnl9LHgsbSkseUkobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6eX0sbnVsbCxhKSx2PXI9ZS52YWx1ZSx5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnl9KX1zdGF0aWMgZGVtbz1TRnQ7c3RhdGljIGRlbW9Hcm91cD0iQ2hhcnQiOyNlPVlpKHRoaXMscywiU2VydmVyIExvZ3MiKTtnZXQgbGFiZWwoKXtyZXR1cm4gdGhpcy4jZX1zZXQgbGFiZWwoeSl7dGhpcy4jZT15fSN0PShZaSh0aGlzLGwpLFlpKHRoaXMsYyxbXSkpO2dldCBsb2dFbnRyaWVzKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGxvZ0VudHJpZXMoeSl7dGhpcy4jdD15fSNhPShZaSh0aGlzLHUpLFlpKHRoaXMsaCwhMCkpO2dldCBhdXRvU2Nyb2xsKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGF1dG9TY3JvbGwoeSl7dGhpcy4jYT15fSNyPShZaSh0aGlzLGcpLFlpKHRoaXMseCwxZTMpKTtnZXQgbWF4RW50cmllcygpe3JldHVybiB0aGlzLiNyfXNldCBtYXhFbnRyaWVzKHkpe3RoaXMuI3I9eX1sb2dDb250YWluZXI9WWkodGhpcyxtKTtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksYzEuc2V0dXAoKX1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0xpYmVyYXRpb24gTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgICAubWFpbmJveCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwiaHNsKDAgMCUgNyUpIil9OwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGl0bGUgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWJ1dHRvbi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5My45JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgIH0KCiAgICAgIC5sb2dDb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KCiAgICAgIC5sb2dFbnRyeSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICB9CgogICAgICAudGltZXN0YW1wIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5sZXZlbCB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICAgICAgcGFkZGluZzogMCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5sZXZlbC5kZWJ1ZyB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElIC8gMC4xKSIsImhzbCgwIDAlIDYzLjklIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmxldmVsLmluZm8gewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAubGV2ZWwud2FybiB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSkiLCJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlIC8gMC4xKSIsImhzbCgyNSA5NSUgNjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmxldmVsLmVycm9yIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsImhzbCgwIDcyLjIlIDUwLjYlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUgLyAwLjEpIiwiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAubGV2ZWwuc3VjY2VzcyB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIsImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5zb3VyY2UgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIG1hcmdpbi1yaWdodDogOHB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAvKiBDdXN0b20gc2Nyb2xsYmFyICovCiAgICAgIC5sb2dDb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAubG9nQ29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCJoc2woMCAwJSAxMCUpIil9OwogICAgICB9CgogICAgICAubG9nQ29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDcwJSkiLCJoc2woMCAwJSAzMCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLmxvZ0NvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA2MCUpIiwiaHNsKDAgMCUgNDAlKSIpfTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9Im1haW5ib3giPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+JHt0aGlzLmxhYmVsfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLWJ1dHRvbiAke3RoaXMuYXV0b1Njcm9sbD8iYWN0aXZlIjoiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9Pnt0aGlzLmF1dG9TY3JvbGw9IXRoaXMuYXV0b1Njcm9sbH19CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBBdXRvIFNjcm9sbAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC1idXR0b24iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9Pnt0aGlzLmNsZWFyTG9ncygpfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIENsZWFyCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibG9nQ29udGFpbmVyIj4KICAgICAgICAgICR7dGhpcy5sb2dFbnRyaWVzLmxlbmd0aD09PTA/TWA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+Tm8gbG9ncyB0byBkaXNwbGF5PC9kaXY+YDp0aGlzLmxvZ0VudHJpZXMubWFwKHk9PnRoaXMucmVuZGVyTG9nRW50cnkoeSkpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyTG9nRW50cnkoeSl7bGV0IHc9bmV3IERhdGUoeS50aW1lc3RhbXApLnRvTG9jYWxlVGltZVN0cmluZygiZW4tVVMiLHtob3VyMTI6ITEsaG91cjoiMi1kaWdpdCIsbWludXRlOiIyLWRpZ2l0IixzZWNvbmQ6IjItZGlnaXQiLGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6M30pO3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJsb2dFbnRyeSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWVzdGFtcCI+JHt3fTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibGV2ZWwgJHt5LmxldmVsfSI+JHt5LmxldmVsfTwvc3Bhbj4KICAgICAgICAke3kuc291cmNlP01gPHNwYW4gY2xhc3M9InNvdXJjZSI+WyR7eS5zb3VyY2V9XTwvc3Bhbj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJtZXNzYWdlIj4ke3kubWVzc2FnZX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXthd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZSx0aGlzLmxvZ0NvbnRhaW5lcj10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmxvZ0NvbnRhaW5lciIpO2xldCB5PVt7dGltZXN0YW1wOm5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxsZXZlbDoiaW5mbyIsbWVzc2FnZToiU2VydmVyIHN0YXJ0ZWQgb24gcG9ydCAzMDAwIixzb3VyY2U6IlNlcnZlciJ9LHt0aW1lc3RhbXA6bmV3IERhdGUoKS50b0lTT1N0cmluZygpLGxldmVsOiJkZWJ1ZyIsbWVzc2FnZToiTG9hZGluZyBjb25maWd1cmF0aW9uIGZyb20gL2V0Yy9hcHAvY29uZmlnLmpzb24iLHNvdXJjZToiQ29uZmlnIn0se3RpbWVzdGFtcDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksbGV2ZWw6ImluZm8iLG1lc3NhZ2U6IkNvbm5lY3RlZCB0byBNb25nb0RCIGF0IG1vbmdvZGI6Ly9sb2NhbGhvc3Q6MjcwMTciLHNvdXJjZToiRGF0YWJhc2UifSx7dGltZXN0YW1wOm5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxsZXZlbDoic3VjY2VzcyIsbWVzc2FnZToiRGF0YWJhc2UgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCBzdWNjZXNzZnVsbHkiLHNvdXJjZToiRGF0YWJhc2UifSx7dGltZXN0YW1wOm5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxsZXZlbDoid2FybiIsbWVzc2FnZToiTm8gU1NMIGNlcnRpZmljYXRlIGZvdW5kLCB1c2luZyBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSIsc291cmNlOiJTZWN1cml0eSJ9LHt0aW1lc3RhbXA6bmV3IERhdGUoKS50b0lTT1N0cmluZygpLGxldmVsOiJpbmZvIixtZXNzYWdlOiJBUEkgcm91dGVzIGluaXRpYWxpemVkOiBHRVQgL2FwaS91c2VycywgUE9TVCAvYXBpL3VzZXJzLCBERUxFVEUgL2FwaS91c2Vycy86aWQiLHNvdXJjZToiUm91dGVyIn0se3RpbWVzdGFtcDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksbGV2ZWw6ImRlYnVnIixtZXNzYWdlOiJNaWRkbGV3YXJlIHN0YWNrOiBjb3JzLCBib2R5UGFyc2VyLCBhdXRoZW50aWNhdGlvbiwgZXJyb3JIYW5kbGVyIixzb3VyY2U6Ik1pZGRsZXdhcmUifSx7dGltZXN0YW1wOm5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxsZXZlbDoiaW5mbyIsbWVzc2FnZToiV2ViU29ja2V0IHNlcnZlciBsaXN0ZW5pbmcgb24gd3M6Ly9sb2NhbGhvc3Q6MzAwMSIsc291cmNlOiJXZWJTb2NrZXQifV07dGhpcy5sb2dFbnRyaWVzPXksdGhpcy5zY3JvbGxUb0JvdHRvbSgpfWFzeW5jIHVwZGF0ZUxvZyh5KXt5JiYodGhpcy5sb2dFbnRyaWVzPVsuLi50aGlzLmxvZ0VudHJpZXMsLi4ueV0sdGhpcy5sb2dFbnRyaWVzLmxlbmd0aD50aGlzLm1heEVudHJpZXMmJih0aGlzLmxvZ0VudHJpZXM9dGhpcy5sb2dFbnRyaWVzLnNsaWNlKC10aGlzLm1heEVudHJpZXMpKSx0aGlzLnJlcXVlc3RVcGRhdGUoKSxhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLHRoaXMuYXV0b1Njcm9sbCYmdGhpcy5zY3JvbGxUb0JvdHRvbSgpKX1jbGVhckxvZ3MoKXt0aGlzLmxvZ0VudHJpZXM9W10sdGhpcy5yZXF1ZXN0VXBkYXRlKCl9c2Nyb2xsVG9Cb3R0b20oKXt0aGlzLmxvZ0NvbnRhaW5lciYmKHRoaXMubG9nQ29udGFpbmVyLnNjcm9sbFRvcD10aGlzLmxvZ0NvbnRhaW5lci5zY3JvbGxIZWlnaHQpfWFkZExvZyh5LHcsRSl7bGV0IEM9e3RpbWVzdGFtcDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksbGV2ZWw6eSxtZXNzYWdlOncsc291cmNlOkV9O3RoaXMudXBkYXRlTG9nKFtDXSl9c3RhdGlje1lpKHIsYSl9fTtyZXR1cm4gdj1yfSkoKTtmZSgpO3ZhciBDRnQ9KCk9Pk1gCiAgPHN0eWxlPgogICAgLmRlbW9XcmFwcGVyIHsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgIHBhZGRpbmc6IDQ4cHg7CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjhmOWZhIiwiIzBhMGEwYSIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAzMnB4OwogICAgfQogICAgCiAgICAuc2VjdGlvbiB7CiAgICAgIG1heC13aWR0aDogOTAwcHg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBtYXJnaW46IDAgYXV0bzsKICAgIH0KICAgIAogICAgLnNlY3Rpb24tdGl0bGUgewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0iZGVtb1dyYXBwZXIiPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlR5cGVTY3JpcHQgQ29kZSBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkEgY29tcHJlaGVuc2l2ZSBUeXBlU2NyaXB0IGNvZGUgZXhhbXBsZSB3aXRoIHZhcmlvdXMgc3ludGF4IGhpZ2hsaWdodGluZy48L2Rpdj4KICAgICAgPGRlZXMtZGF0YXZpZXctY29kZWJveCBwcm9nbGFuZz0idHlwZXNjcmlwdCI+CmludGVyZmFjZSBVc2VyIHsKICBpZDogbnVtYmVyOwogIG5hbWU6IHN0cmluZzsKICBlbWFpbDogc3RyaW5nOwogIGlzQWN0aXZlOiBib29sZWFuOwp9CgpjbGFzcyBVc2VyU2VydmljZSB7CiAgcHJpdmF0ZSB1c2VyczogVXNlcltdID0gW107CiAgCiAgY29uc3RydWN0b3IocHJpdmF0ZSBhcGlVcmw6IHN0cmluZykgewogICAgY29uc29sZS5sb2coJ1VzZXJTZXJ2aWNlIGluaXRpYWxpemVkJyk7CiAgfQogIAogIGFzeW5jIGdldFVzZXJzKCk6IFByb21pc2U8VXNlcltdPiB7CiAgICB0cnkgewogICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMuYXBpVXJsKTsKICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgcmV0dXJuIGRhdGEudXNlcnM7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggdXNlcnM6JywgZXJyb3IpOwogICAgICByZXR1cm4gW107CiAgICB9CiAgfQogIAogIGFkZFVzZXIodXNlcjogVXNlcik6IHZvaWQgewogICAgdGhpcy51c2Vycy5wdXNoKHVzZXIpOwogIH0KfQoKLy8gVXNhZ2UgZXhhbXBsZQpjb25zdCBzZXJ2aWNlID0gbmV3IFVzZXJTZXJ2aWNlKCdodHRwczovL2FwaS5leGFtcGxlLmNvbS91c2VycycpOwpjb25zdCB1c2VycyA9IGF3YWl0IHNlcnZpY2UuZ2V0VXNlcnMoKTsKY29uc29sZS5sb2coJ0ZvdW5kIHVzZXJzOicsIHVzZXJzLmxlbmd0aCk7CiAgICAgIDwvZGVlcy1kYXRhdmlldy1jb2RlYm94PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5KYXZhU2NyaXB0IEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+TW9kZXJuIEphdmFTY3JpcHQgd2l0aCBFUzYrIGZlYXR1cmVzLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJqYXZhc2NyaXB0Ij4KLy8gQXJyYXkgbWFuaXB1bGF0aW9uIGV4YW1wbGVzCmNvbnN0IG51bWJlcnMgPSBbMSwgMiwgMywgNCwgNV07CmNvbnN0IGRvdWJsZWQgPSBudW1iZXJzLm1hcChuID0+IG4gKiAyKTsKY29uc3QgZmlsdGVyZWQgPSBudW1iZXJzLmZpbHRlcihuID0+IG4gPiAzKTsKCi8vIE9iamVjdCBkZXN0cnVjdHVyaW5nCmNvbnN0IHVzZXIgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCwgY2l0eTogJ05ldyBZb3JrJyB9Owpjb25zdCB7IG5hbWUsIGFnZSB9ID0gdXNlcjsKCi8vIFByb21pc2UgaGFuZGxpbmcKY29uc3QgZmV0Y2hEYXRhID0gYXN5bmMgKHVybCkgPT4gewogIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTsKICByZXR1cm4gcmVzcG9uc2UuanNvbigpOwp9OwoKLy8gTW9kZXJuIHN5bnRheApjb25zdCBncmVldCA9IChuYW1lID0gJ1dvcmxkJykgPT4gXGBIZWxsbywgXCR7bmFtZX0hXGA7CmNvbnNvbGUubG9nKGdyZWV0KCdTaGFkQ04nKSk7CiAgICAgIDwvZGVlcy1kYXRhdmlldy1jb2RlYm94PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QeXRob24gRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5QeXRob24gY29kZSB3aXRoIGNsYXNzZXMgYW5kIHR5cGUgaGludHMuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9InB5dGhvbiI+CmZyb20gdHlwaW5nIGltcG9ydCBMaXN0LCBPcHRpb25hbAppbXBvcnQgYXN5bmNpbwoKY2xhc3MgRGF0YVByb2Nlc3NvcjoKICAgICIiIkEgc2ltcGxlIGRhdGEgcHJvY2Vzc29yIGNsYXNzIiIiCiAgICAKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lOiBzdHIpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLmRhdGE6IExpc3RbZGljdF0gPSBbXQogICAgCiAgICBhc3luYyBkZWYgcHJvY2Vzc19kYXRhKHNlbGYsIGl0ZW1zOiBMaXN0W2RpY3RdKSAtPiBMaXN0W2RpY3RdOgogICAgICAgICIiIlByb2Nlc3MgZGF0YSBpdGVtcyBhc3luY2hyb25vdXNseSIiIgogICAgICAgIHJlc3VsdHMgPSBbXQogICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgogICAgICAgICAgICAjIFNpbXVsYXRlIGFzeW5jIHByb2Nlc3NpbmcKICAgICAgICAgICAgYXdhaXQgYXN5bmNpby5zbGVlcCgwLjEpCiAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHsKICAgICAgICAgICAgICAgICdpZCc6IGl0ZW0uZ2V0KCdpZCcpLAogICAgICAgICAgICAgICAgJ3Byb2Nlc3NlZCc6IFRydWUsCiAgICAgICAgICAgICAgICAncHJvY2Vzc29yJzogc2VsZi5uYW1lCiAgICAgICAgICAgIH0pCiAgICAgICAgcmV0dXJuIHJlc3VsdHMKICAgIAogICAgZGVmIGdldF9zdW1tYXJ5KHNlbGYpIC0+IGRpY3Q6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ3Byb2Nlc3Nvcic6IHNlbGYubmFtZSwKICAgICAgICAgICAgJ2l0ZW1zX3Byb2Nlc3NlZCc6IGxlbihzZWxmLmRhdGEpCiAgICAgICAgfQoKIyBVc2FnZQpwcm9jZXNzb3IgPSBEYXRhUHJvY2Vzc29yKCJNYWluIikKZGF0YSA9IGF3YWl0IHByb2Nlc3Nvci5wcm9jZXNzX2RhdGEoW3snaWQnOiAxfSwgeydpZCc6IDJ9XSkKICAgICAgPC9kZWVzLWRhdGF2aWV3LWNvZGVib3g+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkNTUyBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPk1vZGVybiBDU1Mgd2l0aCBjdXN0b20gcHJvcGVydGllcyBhbmQgYW5pbWF0aW9ucy4gTm90ZSB0aGUgc2hvcnRlciBsYW5ndWFnZSBsYWJlbC48L2Rpdj4KICAgICAgPGRlZXMtZGF0YXZpZXctY29kZWJveCBwcm9nbGFuZz0iY3NzIj4KLyogTW9kZXJuIENTUyB3aXRoIGN1c3RvbSBwcm9wZXJ0aWVzICovCjpyb290IHsKICAtLXByaW1hcnktY29sb3I6ICMzYjgyZjY7CiAgLS1zZWNvbmRhcnktY29sb3I6ICMxMGI5ODE7CiAgLS1iYWNrZ3JvdW5kOiAjZmZmZmZmOwogIC0tdGV4dC1jb2xvcjogIzA5MDkwYjsKICAtLWJvcmRlci1yYWRpdXM6IDZweDsKfQoKLmNhcmQgewogIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQpOwogIGJvcmRlcjogMXB4IHNvbGlkICNlNWU3ZWI7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7CiAgcGFkZGluZzogMjRweDsKICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5jYXJkOmhvdmVyIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgYm94LXNoYWRvdzogMCA0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKfQoKQGtleWZyYW1lcyBmYWRlSW4gewogIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7IH0KICB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfQp9CiAgICAgIDwvZGVlcy1kYXRhdmlldy1jb2RlYm94PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5KU09OIEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+SlNPTiBjb25maWd1cmF0aW9uIHdpdGggcHJvcGVyIGZvcm1hdHRpbmcuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9Impzb24iPgp7CiAgIm5hbWUiOiAiQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nIiwKICAidmVyc2lvbiI6ICIxLjEwLjciLAogICJkZXNjcmlwdGlvbiI6ICJBIGNvbXByZWhlbnNpdmUgY2F0YWxvZyBvZiB3ZWIgY29tcG9uZW50cyIsCiAgIm1haW4iOiAiZGlzdF90c193ZWIvaW5kZXguanMiLAogICJ0eXBlIjogIm1vZHVsZSIsCiAgInNjcmlwdHMiOiB7CiAgICAiYnVpbGQiOiAidHNidWlsZCB0c2ZvbGRlcnMgLS1hbGxvd2ltcGxpY2l0YW55ICYmIHRzYnVuZGxlIGVsZW1lbnQgLS1wcm9kdWN0aW9uIiwKICAgICJ3YXRjaCI6ICJ0c3dhdGNoIGVsZW1lbnQiLAogICAgInRlc3QiOiAidHN0ZXN0IHRlc3QvIC0td2ViIC0tdmVyYm9zZSIKICB9LAogICJkZXBlbmRlbmNpZXMiOiB7CiAgICAiQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50IjogIl4yLjAuNDUiLAogICAgImhpZ2hsaWdodC5qcyI6ICJeMTEuOS4wIgogIH0KfQogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogIDwvZGl2PgpgO2ZlKCk7UDgoKTtTdCgpO2VjKCk7dmFyIGJFZT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LHdJPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxkczE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWRhdGF2aWV3LWNvZGVib3giKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXTt2YXIgZD1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGg9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCgpXSxmPVtEKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLGJFZSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InByb2dMYW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4icHJvZ0xhbmciaW4gZyxnZXQ6Zz0+Zy5wcm9nTGFuZyxzZXQ6KGcsYik9PntnLnByb2dMYW5nPWJ9fSxtZXRhZGF0YTpofSxzLGwpLGJFZSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNvZGVUb0Rpc3BsYXkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJjb2RlVG9EaXNwbGF5ImluIGcsZ2V0Omc9PmcuY29kZVRvRGlzcGxheSxzZXQ6KGcsYik9PntnLmNvZGVUb0Rpc3BsYXk9Yn19LG1ldGFkYXRhOmh9LGMsdSksYkVlKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOmh9LG51bGwsYSksZD1yPWUudmFsdWUsaCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpofSl9c3RhdGljIGRlbW89Q0Z0O3N0YXRpYyBkZW1vR3JvdXA9IkRhdGEgVmlldyI7I2U9d0kodGhpcyxzLCJ0eXBlc2NyaXB0Iik7Z2V0IHByb2dMYW5nKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHByb2dMYW5nKGgpe3RoaXMuI2U9aH0jdD0od0kodGhpcyxsKSx3SSh0aGlzLGMsIiIpKTtnZXQgY29kZVRvRGlzcGxheSgpe3JldHVybiB0aGlzLiN0fXNldCBjb2RlVG9EaXNwbGF5KGgpe3RoaXMuI3Q9aH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgICR7YzEuc3R5bGVzfQogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6ICR7SnR9OwogICAgICAgIH0KICAgICAgICAubWFpbmJveCB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMwOTA5MGIiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLmFwcGJhciB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmOWZhZmIiLCIjMTgxODFiIil9OwogICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBsaW5lLWhlaWdodDogMzJweDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIC5hcHBiYXIgLmZpbGVOYW1lIHsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIC5ib3R0b21CYXIgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjlmYWZiIiwiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBsaW5lLWhlaWdodDogMjhweDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLnNwYWNlc0xhYmVsIHsKICAgICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmxhbmd1YWdlTGFiZWwgewogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwicmdiYSg1OSwgMTMwLCAyNDYsIDAuMSkiKX07CiAgICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIC5obGpzLWtleXdvcmQgewogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjZGMyNjI2IiwiI2Y4NzE3MSIpfTsKICAgICAgICB9CgogICAgICAgIC5jb2RlZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA1MHB4IGF1dG87CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLmxpbmVOdW1iZXJzIHsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiM1MjUyNWIiKX07CiAgICAgICAgICBwYWRkaW5nOiAyNHB4IDE2cHggMHB4IDBweDsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgICAgIH0KCiAgICAgICAgLmxpbmVDb3VudGVyOmxhc3QtY2hpbGQgewogICAgICAgICAgb3BhY2l0eTogNTAlOwogICAgICAgIH0KCiAgICAgICAgcHJlIHsKICAgICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHggMjRweDsKICAgICAgICB9CgogICAgICAgIGNvZGUgewogICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICAgIG1hcmdpbjogMHB4OwogICAgICAgIH0KCiAgICAgICAgY29kZSwKICAgICAgICBjb2RlICosCiAgICAgICAgLmxpbmVOdW1iZXJzIHsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiAyMDA7CiAgICAgICAgICBmb250LWZhbWlseTogJHtqbH07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1zdHJpbmcgewogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDU5NjY5IiwiIzEwYjk4MSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLWJ1aWx0X2luIHsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzhiNWNmNiIsIiNhNzhiZmEiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1mdW5jdGlvbiB7CiAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzYjgyZjYiLCIjNjBhNWZhIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtcGFyYW1zIHsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA4OTFiMiIsIiMwNmI2ZDQiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1jb21tZW50IHsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1udW1iZXIgewogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjZWE1ODBjIiwiI2ZiOTIzYyIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLWxpdGVyYWwgewogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjZGMyNjI2IiwiI2Y4NzE3MSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLWF0dHIgewogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjOGI1Y2Y2IiwiI2E3OGJmYSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLXZhcmlhYmxlIHsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1haW5ib3giCiAgICAgICAgQGNvbnRleHRtZW51PSIke2g9PntXdC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhoLFt7bmFtZToiQWJvdXQiLGljb25OYW1lOiJjaXJjbGVJbmZvIixhY3Rpb246YXN5bmMoKT0+bnVsbH1dKX19IgogICAgICA+CiAgICAgICAgPGRpdiBjbGFzcz0iYXBwYmFyIj4KICAgICAgICAgIDxkZWVzLXdpbmRvd2NvbnRyb2xzIHR5cGU9Im1hYyIgcG9zaXRpb249ImxlZnQiPjwvZGVlcy13aW5kb3djb250cm9scz4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGVOYW1lIj5pbmRleC50czwvZGl2PgogICAgICAgICAgPGRlZXMtd2luZG93Y29udHJvbHMgdHlwZT0ibWFjIiBwb3NpdGlvbj0icmlnaHQiPjwvZGVlcy13aW5kb3djb250cm9scz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lTnVtYmVycyI+CiAgICAgICAgICAgICR7KCgpPT57bGV0IGg9MDtyZXR1cm4gdGhpcy5jb2RlVG9EaXNwbGF5LnNwbGl0KGAKYCkubWFwKGc9PihoKyssTWA8ZGl2IGNsYXNzPSJsaW5lQ291bnRlciI+JHtofTwvZGl2PmApKX0pKCl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwcmU+PGNvZGU+PC9jb2RlPjwvcHJlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbUJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZXNMYWJlbCI+U3BhY2VzOiAyPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZUxhYmVsIj4ke3RoaXMucHJvZ0xhbmd9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1jb2RlVG9EaXNwbGF5U3RvcmU9KHdJKHRoaXMsdSksIiIpO2hpZ2hsaWdodEpzPW51bGw7YXN5bmMgdXBkYXRlZChoKXtzdXBlci51cGRhdGVkKGgpLGNvbnNvbGUubG9nKCJoaWdobGlnaHRpbmcgbm93IiksY29uc29sZS5sb2codGhpcy5jaGlsZE5vZGVzKTtsZXQgZz1bXTt0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaChtPT57bS5ub2RlTmFtZT09PSIjdGV4dCImJmcucHVzaChtKX0pLHRoaXMuY29kZVRvRGlzcGxheSYmdGhpcy5jb2RlVG9EaXNwbGF5IT09dGhpcy5jb2RlVG9EaXNwbGF5U3RvcmUmJih0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZT1Vcy5ub3JtYWxpemUodGhpcy5jb2RlVG9EaXNwbGF5KS50cmltU3RhcnQoKSksZ1swXSYmZ1swXS53aG9sZVRleHQmJiF0aGlzLmNvZGVUb0Rpc3BsYXkmJih0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZT1Vcy5ub3JtYWxpemUoZ1swXS53aG9sZVRleHQpLnRyaW1TdGFydCgpLHRoaXMuY29kZVRvRGlzcGxheT10aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZSksYXdhaXQgQXQuc21hcnRkZWxheS5kZWxheUZvcigwKSx0aGlzLmhpZ2hsaWdodEpzfHwodGhpcy5oaWdobGlnaHRKcz1hd2FpdCBIMi5nZXRJbnN0YW5jZSgpLmxvYWRIaWdobGlnaHRKcygpKTtsZXQgYj10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiY29kZSIpLHg9dGhpcy5oaWdobGlnaHRKcy5oaWdobGlnaHQodGhpcy5jb2RlVG9EaXNwbGF5U3RvcmUse2xhbmd1YWdlOnRoaXMucHJvZ0xhbmcsaWdub3JlSWxsZWdhbHM6ITB9KTtiLmlubmVySFRNTD14LnZhbHVlfXN0YXRpY3t3SShyLGEpfX07cmV0dXJuIGQ9cn0pKCk7ZmUoKTt2YXIgTEZ0PSgpPT5NYCA8c3R5bGU+CiAgICAuZGVtbyB7CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjVmNWY1IiwiIzBhMGEwYSIpfTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBwYWRkaW5nOiA0MHB4OwogICAgfQogICAgCiAgICAuZGVtby1ncmlkIHsKICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgZ2FwOiAyNHB4OwogICAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgICBtYXJnaW46IDAgYXV0bzsKICAgIH0KICAgIAogICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMTZweDsKICAgIH0KICAgIAogICAgLmRlbW8tdGl0bGUgewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICB9CiAgICAKICAgIC5kZW1vLW5vdGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8iPgogICAgPGRpdiBjbGFzcz0iZGVtby1ub3RlIj4KICAgICAgUmlnaHQtY2xpY2sgb24gYW55IGRldGFpbCByb3cgdG8gY29weSB0aGUgdmFsdWUsIGtleSwgb3Iga2V5OnZhbHVlIGNvbWJpbmF0aW9uCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby10aXRsZSI+U2VydmljZSBIZWFsdGggU3RhdHVzPC9kaXY+CiAgICAgICAgPGRlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0CiAgICAgICAgICAuc3RhdHVzT2JqZWN0PSR7e2lkOiIxIixuYW1lOiJBUEkgR2F0ZXdheSBTZXJ2aWNlIixjb21iaW5lZFN0YXR1czoib2siLGNvbWJpbmVkU3RhdHVzVGV4dDoiQWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiLGRldGFpbHM6W3tuYW1lOiJSZXNwb25zZSBUaW1lIix2YWx1ZToiNDVtcyAoYXZnKSIsc3RhdHVzOiJvayIsc3RhdHVzVGV4dDoiV2l0aGluIG5vcm1hbCByYW5nZSJ9LHtuYW1lOiJVcHRpbWUiLHZhbHVlOiI5OS45OSUgKDMwIGRheXMpIixzdGF0dXM6Im9rIixzdGF0dXNUZXh0OiJFeGNlbGxlbnQgdXB0aW1lIn0se25hbWU6IkFjdGl2ZSBDb25uZWN0aW9ucyIsdmFsdWU6IjEsMjM0IC8gMTAsMDAwIixzdGF0dXM6Im9rIixzdGF0dXNUZXh0OiJOb3JtYWwgbG9hZCJ9LHtuYW1lOiJTU0wgQ2VydGlmaWNhdGUiLHZhbHVlOiJWYWxpZCB1bnRpbCAyMDI0LTEyLTMxIixzdGF0dXM6Im9rIixzdGF0dXNUZXh0OiJDZXJ0aWZpY2F0ZSB2YWxpZCJ9XX19CiAgICAgICAgPgogICAgICAgIDwvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3Q+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXRpdGxlIj5EYXRhYmFzZSBDbHVzdGVyIFN0YXR1czwvZGl2PgogICAgICAgIDxkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdAogICAgICAgICAgLnN0YXR1c09iamVjdD0ke3tpZDoiMiIsbmFtZToiUG9zdGdyZVNRTCBDbHVzdGVyIixjb21iaW5lZFN0YXR1czoicGFydGx5X29rIixjb21iaW5lZFN0YXR1c1RleHQ6Ik1pbm9yIGlzc3VlcyBkZXRlY3RlZCIsZGV0YWlsczpbe25hbWU6IlByaW1hcnkgTm9kZSIsdmFsdWU6ImRiLXByaW1hcnktMDEgKGhlYWx0aHkpIixzdGF0dXM6Im9rIixzdGF0dXNUZXh0OiJPcGVyYXRpbmcgbm9ybWFsbHkifSx7bmFtZToiUmVwbGljYSBMYWciLHZhbHVlOiIyLjUgc2Vjb25kcyIsc3RhdHVzOiJwYXJ0bHlfb2siLHN0YXR1c1RleHQ6IlNsaWdodGx5IGVsZXZhdGVkIn0se25hbWU6IkRpc2sgVXNhZ2UiLHZhbHVlOiI3OCUgKDMxMkdCIC8gNDAwR0IpIixzdGF0dXM6InBhcnRseV9vayIsc3RhdHVzVGV4dDoiQXBwcm9hY2hpbmcgdGhyZXNob2xkIn0se25hbWU6IkNvbm5lY3Rpb24gUG9vbCIsdmFsdWU6Ijg5IC8gMTAwIGNvbm5lY3Rpb25zIixzdGF0dXM6Im9rIixzdGF0dXNUZXh0OiJXaXRoaW4gbGltaXRzIn1dfX0KICAgICAgICA+CiAgICAgICAgPC9kZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdD4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tdGl0bGUiPkJ1aWxkIFBpcGVsaW5lIFN0YXR1czwvZGl2PgogICAgICAgIDxkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdAogICAgICAgICAgLnN0YXR1c09iamVjdD0ke3tpZDoiMyIsbmFtZToiQ0kvQ0QgUGlwZWxpbmUiLGNvbWJpbmVkU3RhdHVzOiJub3Rfb2siLGNvbWJpbmVkU3RhdHVzVGV4dDoiQnVpbGQgZmFpbHVyZSIsZGV0YWlsczpbe25hbWU6Ikxhc3QgQnVpbGQiLHZhbHVlOiJCdWlsZCAjMTIzNCAtIEZhaWxlZCIsc3RhdHVzOiJub3Rfb2siLHN0YXR1c1RleHQ6IlRlc3QgZmFpbHVyZXMifSx7bmFtZToiRmFpbGVkIFRlc3RzIix2YWx1ZToiMyB0ZXN0cyBmYWlsZWQ6IGF1dGguc3BlYy50cywgdXNlci5zcGVjLnRzLCBhcGkuc3BlYy50cyIsc3RhdHVzOiJub3Rfb2siLHN0YXR1c1RleHQ6IlVuaXQgdGVzdCBmYWlsdXJlcyJ9LHtuYW1lOiJDb2RlIENvdmVyYWdlIix2YWx1ZToiODIuNSUgKHRhcmdldDogODUlKSIsc3RhdHVzOiJwYXJ0bHlfb2siLHN0YXR1c1RleHQ6IkJlbG93IHRhcmdldCJ9LHtuYW1lOiJCdWlsZCBEdXJhdGlvbiIsdmFsdWU6IjEybSAzNHMiLHN0YXR1czoib2siLHN0YXR1c1RleHQ6Ik5vcm1hbCBkdXJhdGlvbiJ9XX19CiAgICAgICAgPgogICAgICAgIDwvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3Q+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+YDtmZSgpO0JlKCk7dmFyIFRGdD1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LHZFZT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sZnMxPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXTt2YXIgZj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpPYmplY3R9KV0sVEZ0KHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3RhdHVzT2JqZWN0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp1PT4ic3RhdHVzT2JqZWN0ImluIHUsZ2V0OnU9PnUuc3RhdHVzT2JqZWN0LHNldDoodSxkKT0+e3Uuc3RhdHVzT2JqZWN0PWR9fSxtZXRhZGF0YTpjfSxzLGwpLFRGdChudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpjfSxudWxsLGEpLGY9cj1lLnZhbHVlLGMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Y30pfXN0YXRpYyBkZW1vPUxGdDtzdGF0aWMgZGVtb0dyb3VwPSJEYXRhIFZpZXciOyNlPXZFZSh0aGlzLHMsdm9pZCAwKTtnZXQgc3RhdHVzT2JqZWN0KCl7cmV0dXJuIHRoaXMuI2V9c2V0IHN0YXR1c09iamVjdChjKXt0aGlzLiNlPWN9c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ1JvYm90bycsIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMXB4IDJweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgICBtaW4taGVpZ2h0OiA0OHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmhlYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDQ4cHggYXV0byAxMDBweDsKICAgICAgICBoZWlnaHQ6IDU2cHg7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwiaHNsKDAgMCUgNyUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuc3RhdHVzZG90IHsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUgLyAwLjIpIiwiaHNsKDAgMCUgNDUuMSUgLyAwLjIpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuY29weU1haW46YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpOwogICAgICB9CgogICAgICAuc3RhdHVzZG90Lm9rIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7cC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUgLyAwLjIpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5ub3Rfb2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCJoc2woMCA3Mi4yJSA1MC42JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7cC5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSAvIDAuMikiLCJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC5zdGF0dXNkb3QucGFydGx5X29rIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUpIiwiaHNsKDI1IDk1JSA2MyUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke3AuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUgLyAwLjIpIiwiaHNsKDI1IDk1JSA2MyUgLyAwLjIpIil9OwogICAgICB9CgogICAgICAuZGV0YWlsIHsKICAgICAgICBtaW4taGVpZ2h0OiA2MHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDQ4cHggYXV0bzsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk0JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDE2cHg7CiAgICAgICAgY3Vyc29yOiBjb250ZXh0LW1lbnU7CiAgICAgIH0KCiAgICAgIC5kZXRhaWw6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwiaHNsKDAgMCUgNyUpIil9OwogICAgICB9CgogICAgICAuZGV0YWlsOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCJoc2woMCAwJSA5JSkiKX07CiAgICAgIH0KCiAgICAgIC5kZXRhaWwgLmRldGFpbHNUZXh0IHsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgfQoKICAgICAgLmRldGFpbCAuZGV0YWlsc1RleHQgLmxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfQogICAgICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLmRldGFpbCAuZGV0YWlsc1RleHQgLnZhbHVlIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlbCBPbmUgTW9ubycsICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9Im1haW5ib3giPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmciPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzZG90ICR7dGhpcy5zdGF0dXNPYmplY3Q/LmNvbWJpbmVkU3RhdHVzfSI+PC9kaXY+CiAgICAgICAgICA8aDE+JHt0aGlzLnN0YXR1c09iamVjdD8ubmFtZXx8Ik5vIHN0YXR1cyBvYmplY3QgYXNzaWduZWQifTwvaDE+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3B5TWFpbiIgQGNsaWNrPSR7dGhpcy5oYW5kbGVDb3B5QXNKc29ufT5Db3B5IEpTT048L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuc3RhdHVzT2JqZWN0Py5kZXRhaWxzPy5tYXAoYz0+TWAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0iZGV0YWlsIgogICAgICAgICAgICAgIEBjb250ZXh0bWVudT0ke3U9Pnt1LnByZXZlbnREZWZhdWx0KCksV3Qub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnModSxbe25hbWU6IkNvcHkgVmFsdWUiLGljb25OYW1lOiJsdWNpZGU6Y29weSIsYWN0aW9uOmFzeW5jKCk9Pnthd2FpdCB0aGlzLmNvcHlUb0NsaXBib2FyZChjLnZhbHVlLCJWYWx1ZSIpfX0se25hbWU6IkNvcHkgS2V5IixpY29uTmFtZToibHVjaWRlOmtleSIsYWN0aW9uOmFzeW5jKCk9Pnthd2FpdCB0aGlzLmNvcHlUb0NsaXBib2FyZChjLm5hbWUsIktleSIpfX0se25hbWU6IkNvcHkgS2V5OlZhbHVlIixpY29uTmFtZToibHVjaWRlOmNvcHktcGx1cyIsYWN0aW9uOmFzeW5jKCk9Pnthd2FpdCB0aGlzLmNvcHlUb0NsaXBib2FyZChgJHtjLm5hbWV9OiAke2MudmFsdWV9YCwiS2V5OlZhbHVlIil9fV0pfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1c2RvdCAke2Muc3RhdHVzfSI+PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlsc1RleHQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPiR7Yy5uYW1lfTwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiPiR7Yy52YWx1ZX08L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZCgpe31hc3luYyBjb3B5VG9DbGlwYm9hcmQoYyx1PSJUZXh0Iil7dHJ5e2F3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGMpLGNvbnNvbGUubG9nKGAke3V9IGNvcGllZCB0byBjbGlwYm9hcmRgKX1jYXRjaChkKXtjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY29weSAke3V9OmAsZCl9fWFzeW5jIGhhbmRsZUNvcHlBc0pzb24oKXtpZih0aGlzLnN0YXR1c09iamVjdCl0cnl7YXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0dXNPYmplY3QsbnVsbCwyKSk7bGV0IGM9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb3B5TWFpbiIpLHU9Yy50ZXh0Q29udGVudDtjLnRleHRDb250ZW50PSJDb3BpZWQhIjtsZXQgZD0hdGhpcy5nb0JyaWdodDtjLnN0eWxlLmJhY2tncm91bmQ9ZD8iaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4xKSI6ImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiLGMuc3R5bGUuYm9yZGVyQ29sb3I9ZD8iaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSI6ImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLGMuc3R5bGUuY29sb3I9ZD8iaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSI6ImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLHNldFRpbWVvdXQoKCk9PntjLnRleHRDb250ZW50PXUsYy5zdHlsZS5iYWNrZ3JvdW5kPSIiLGMuc3R5bGUuYm9yZGVyQ29sb3I9IiIsYy5zdHlsZS5jb2xvcj0iIn0sMTUwMCl9Y2F0Y2goYyl7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNvcHk6IixjKX19Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHZFZSh0aGlzLGwpfXN0YXRpY3t2RWUocixhKX19O3JldHVybiBmPXJ9KSgpO2ZlKCk7U3QoKTtCZSgpO0Z0KCk7dmFyIG9jPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sbWE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LEJzMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtd29ya3NwYWNlLWZpbGV0cmVlIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W107dmFyIFA9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBfPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6T2JqZWN0fSldLGY9W0Qoe3R5cGU6U3RyaW5nfSldLGQ9W0Qoe3R5cGU6U3RyaW5nfSldLGI9W2xlKCldLHY9W2xlKCldLEU9W2xlKCldLG9jKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXhlY3V0aW9uRW52aXJvbm1lbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJleGVjdXRpb25FbnZpcm9ubWVudCJpbiAkLGdldDokPT4kLmV4ZWN1dGlvbkVudmlyb25tZW50LHNldDooJCxIKT0+eyQuZXhlY3V0aW9uRW52aXJvbm1lbnQ9SH19LG1ldGFkYXRhOl99LHMsbCksb2ModGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyb290UGF0aCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+InJvb3RQYXRoImluICQsZ2V0OiQ9PiQucm9vdFBhdGgsc2V0OigkLEgpPT57JC5yb290UGF0aD1IfX0sbWV0YWRhdGE6X30sYyx1KSxvYyh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkUGF0aCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+InNlbGVjdGVkUGF0aCJpbiAkLGdldDokPT4kLnNlbGVjdGVkUGF0aCxzZXQ6KCQsSCk9PnskLnNlbGVjdGVkUGF0aD1IfX0sbWV0YWRhdGE6X30saCxnKSxvYyh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRyZWVEYXRhIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4idHJlZURhdGEiaW4gJCxnZXQ6JD0+JC50cmVlRGF0YSxzZXQ6KCQsSCk9PnskLnRyZWVEYXRhPUh9fSxtZXRhZGF0YTpffSx4LG0pLG9jKHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNMb2FkaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4iaXNMb2FkaW5nImluICQsZ2V0OiQ9PiQuaXNMb2FkaW5nLHNldDooJCxIKT0+eyQuaXNMb2FkaW5nPUh9fSxtZXRhZGF0YTpffSx5LHcpLG9jKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXJyb3JNZXNzYWdlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4iZXJyb3JNZXNzYWdlImluICQsZ2V0OiQ9PiQuZXJyb3JNZXNzYWdlLHNldDooJCxIKT0+eyQuZXJyb3JNZXNzYWdlPUh9fSxtZXRhZGF0YTpffSxDLHopLG9jKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOl99LG51bGwsYSksUD1yPWUudmFsdWUsXyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpffSl9c3RhdGljIGRlbW89KCk9Pk1gCiAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMzAwcHg7IGhlaWdodDogNDAwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZTsiPgogICAgICA8ZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWU+PC9kZWVzLXdvcmtzcGFjZS1maWxldHJlZT4KICAgIDwvZGl2PgogIGA7c3RhdGljIGRlbW9Hcm91cD0iV29ya3NwYWNlIjsjZT1tYSh0aGlzLHMsbnVsbCk7Z2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCl7cmV0dXJuIHRoaXMuI2V9c2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KF8pe3RoaXMuI2U9X30jdD0obWEodGhpcyxsKSxtYSh0aGlzLGMsIi8iKSk7Z2V0IHJvb3RQYXRoKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHJvb3RQYXRoKF8pe3RoaXMuI3Q9X30jYT0obWEodGhpcyx1KSxtYSh0aGlzLGgsIiIpKTtnZXQgc2VsZWN0ZWRQYXRoKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHNlbGVjdGVkUGF0aChfKXt0aGlzLiNhPV99I3I9KG1hKHRoaXMsZyksbWEodGhpcyx4LFtdKSk7Z2V0IHRyZWVEYXRhKCl7cmV0dXJuIHRoaXMuI3J9c2V0IHRyZWVEYXRhKF8pe3RoaXMuI3I9X30jaT0obWEodGhpcyxtKSxtYSh0aGlzLHksITEpKTtnZXQgaXNMb2FkaW5nKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGlzTG9hZGluZyhfKXt0aGlzLiNpPV99I289KG1hKHRoaXMsdyksbWEodGhpcyxDLCIiKSk7Z2V0IGVycm9yTWVzc2FnZSgpe3JldHVybiB0aGlzLiNvfXNldCBlcnJvck1lc3NhZ2UoXyl7dGhpcy4jbz1ffWV4cGFuZGVkUGF0aHM9KG1hKHRoaXMseiksbmV3IFNldCk7bG9hZFRyZWVTdGFydGVkPSExO2NsaXBib2FyZFBhdGg9bnVsbDtjbGlwYm9hcmRPcGVyYXRpb249bnVsbDtmaWxlV2F0Y2hlcj1udWxsO3JlZnJlc2hEZWJvdW5jZVRpbWVvdXQ9bnVsbDtsYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQ9bnVsbDtzdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC50cmVlLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC50cmVlLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luOiAxcHggNHB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcyBlYXNlOwogICAgICB9CgogICAgICAudHJlZS1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTMlKSIsImhzbCgwIDAlIDE0JSkiKX07CiAgICAgIH0KCiAgICAgIC50cmVlLWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgOTUlKSIsImhzbCgyMTAgNTAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDAlKSIsImhzbCgyMTAgMTAwJSA3MCUpIil9OwogICAgICB9CgogICAgICAudHJlZS1pdGVtLnNlbGVjdGVkOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDkyJSkiLCJoc2woMjEwIDUwJSAyNSUpIil9OwogICAgICB9CgogICAgICAuaW5kZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5leHBhbmQtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZXhwYW5kLWljb24uZXhwYW5kZWQgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgICAgfQoKICAgICAgLmV4cGFuZC1pY29uLmhpZGRlbiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuZmlsZS1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuZmlsZS1pY29uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmZvbGRlciB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woNDUgODAlIDQ1JSkiLCJoc2woNDUgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uZmlsZSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmZpbGUtaWNvbi50eXBlc2NyaXB0IHsKICAgICAgICBjb2xvcjogaHNsKDIxMSA2MCUgNDglKTsKICAgICAgfQoKICAgICAgLmZpbGUtaWNvbi5qYXZhc2NyaXB0IHsKICAgICAgICBjb2xvcjogaHNsKDUzIDkzJSA1NCUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmpzb24gewogICAgICAgIGNvbG9yOiBoc2woNDUgODAlIDUwJSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uaHRtbCB7CiAgICAgICAgY29sb3I6IGhzbCgxNCA3NyUgNTIlKTsKICAgICAgfQoKICAgICAgLmZpbGUtaWNvbi5jc3MgewogICAgICAgIGNvbG9yOiBoc2woMjI4IDc3JSA1OSUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLm1hcmtkb3duIHsKICAgICAgICBjb2xvcjogaHNsKDAgMCUgNTAlKTsKICAgICAgfQoKICAgICAgLmZpbGUtbmFtZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgODUlKSIpfTsKICAgICAgfQoKICAgICAgLmxvYWRpbmcgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5lcnJvciB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6IGhzbCgwIDcwJSA1MCUpOwogICAgICB9CgogICAgICAuZW1wdHkgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtdG9vbGJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMsIGJhY2tncm91bmQgMC4xNXM7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsImhzbCgwIDAlIDcwJSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsImhzbCgwIDAlIDEwMCUgLyAwLjEpIil9OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudD90aGlzLmlzTG9hZGluZz9NYAogICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmciPgogICAgICAgICAgTG9hZGluZyBmaWxlcy4uLgogICAgICAgIDwvZGl2PgogICAgICBgOnRoaXMuZXJyb3JNZXNzYWdlP01gCiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3IiPgogICAgICAgICAgJHt0aGlzLmVycm9yTWVzc2FnZX0KICAgICAgICA8L2Rpdj4KICAgICAgYDpNYAogICAgICA8ZGl2IGNsYXNzPSJmaWxldHJlZS10b29sYmFyIj4KICAgICAgICA8c3BhbiBjbGFzcz0idG9vbGJhci10aXRsZSI+RXhwbG9yZXI8L3NwYW4+CiAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1hY3Rpb25zIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYnV0dG9uIiBAY2xpY2s9JHsoKT0+dGhpcy5jcmVhdGVOZXdGaWxlKCIvIil9IHRpdGxlPSJOZXcgRmlsZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmZpbGVQbHVzIn0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1idXR0b24iIEBjbGljaz0keygpPT50aGlzLmNyZWF0ZU5ld0ZvbGRlcigiLyIpfSB0aXRsZT0iTmV3IEZvbGRlciI+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmZvbGRlclBsdXMifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMudHJlZURhdGEubGVuZ3RoPT09MD9NYDxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBmaWxlcyBmb3VuZC48L2Rpdj5gOk1gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRyZWUtY29udGFpbmVyIiBAY29udGV4dG1lbnU9JHt0aGlzLmhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudX0+CiAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclRyZWUodGhpcy50cmVlRGF0YSl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYH0KICAgIGA6TWAKICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eSI+CiAgICAgICAgICBObyBleGVjdXRpb24gZW52aXJvbm1lbnQgcHJvdmlkZWQuCiAgICAgICAgPC9kaXY+CiAgICAgIGB9cmVuZGVyVHJlZShfKXtyZXR1cm4gXy5tYXAoJD0+dGhpcy5yZW5kZXJOb2RlKCQpKX1yZW5kZXJOb2RlKF8pe2xldCAkPV8udHlwZT09PSJkaXJlY3RvcnkiLEg9dGhpcy5leHBhbmRlZFBhdGhzLmhhcyhfLnBhdGgpLEw9Xy5wYXRoPT09dGhpcy5zZWxlY3RlZFBhdGgsaz10aGlzLmdldEZpbGVJY29uQ2xhc3MoXyk7cmV0dXJuIE1gCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0idHJlZS1pdGVtICR7TD8ic2VsZWN0ZWQiOiIifSIKICAgICAgICBzdHlsZT0icGFkZGluZy1sZWZ0OiAkezgrXy5sZXZlbCoxNn1weCIKICAgICAgICBAY2xpY2s9JHtOPT50aGlzLmhhbmRsZUl0ZW1DbGljayhOLF8pfQogICAgICAgIEBjb250ZXh0bWVudT0ke049PnRoaXMuaGFuZGxlQ29udGV4dE1lbnUoTixfKX0KICAgICAgPgogICAgICAgIDxzcGFuIGNsYXNzPSJleHBhbmQtaWNvbiAke0g/ImV4cGFuZGVkIjoiIn0gJHskPyIiOiJoaWRkZW4ifSI+CiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpjaGV2cm9uUmlnaHQifSBpY29uU2l6ZT0iMTIiPjwvZGVlcy1pY29uPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1pY29uICR7a30iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuZ2V0RmlsZUljb24oXyl9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLW5hbWUiPiR7Xy5uYW1lfTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgICR7JCYmSCYmXy5jaGlsZHJlbj90aGlzLnJlbmRlclRyZWUoXy5jaGlsZHJlbik6IiJ9CiAgICBgfWdldEZpbGVJY29uKF8pe2lmKF8udHlwZT09PSJkaXJlY3RvcnkiKXJldHVybiB0aGlzLmV4cGFuZGVkUGF0aHMuaGFzKF8ucGF0aCk/Imx1Y2lkZTpmb2xkZXJPcGVuIjoibHVjaWRlOmZvbGRlciI7c3dpdGNoKF8ubmFtZS5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpKXtjYXNlInRzIjpjYXNlInRzeCI6cmV0dXJuImx1Y2lkZTpmaWxlQ29kZSI7Y2FzZSJqcyI6Y2FzZSJqc3giOnJldHVybiJsdWNpZGU6ZmlsZUNvZGUiO2Nhc2UianNvbiI6cmV0dXJuImx1Y2lkZTpmaWxlSnNvbiI7Y2FzZSJodG1sIjpyZXR1cm4ibHVjaWRlOmZpbGVDb2RlIjtjYXNlImNzcyI6Y2FzZSJzY3NzIjpjYXNlImxlc3MiOnJldHVybiJsdWNpZGU6ZmlsZUNvZGUiO2Nhc2UibWQiOnJldHVybiJsdWNpZGU6ZmlsZVRleHQiO2Nhc2UicG5nIjpjYXNlImpwZyI6Y2FzZSJqcGVnIjpjYXNlImdpZiI6Y2FzZSJzdmciOnJldHVybiJsdWNpZGU6aW1hZ2UiO2RlZmF1bHQ6cmV0dXJuImx1Y2lkZTpmaWxlIn19Z2V0RmlsZUljb25DbGFzcyhfKXtpZihfLnR5cGU9PT0iZGlyZWN0b3J5IilyZXR1cm4iZm9sZGVyIjtzd2l0Y2goXy5uYW1lLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCkpe2Nhc2UidHMiOmNhc2UidHN4IjpyZXR1cm4idHlwZXNjcmlwdCI7Y2FzZSJqcyI6Y2FzZSJqc3giOnJldHVybiJqYXZhc2NyaXB0IjtjYXNlImpzb24iOnJldHVybiJqc29uIjtjYXNlImh0bWwiOnJldHVybiJodG1sIjtjYXNlImNzcyI6Y2FzZSJzY3NzIjpjYXNlImxlc3MiOnJldHVybiJjc3MiO2Nhc2UibWQiOnJldHVybiJtYXJrZG93biI7ZGVmYXVsdDpyZXR1cm4iZmlsZSJ9fWFzeW5jIGhhbmRsZUl0ZW1DbGljayhfLCQpe18uc3RvcFByb3BhZ2F0aW9uKCksJC50eXBlPT09ImRpcmVjdG9yeSI/YXdhaXQgdGhpcy50b2dnbGVEaXJlY3RvcnkoJCk6KHRoaXMuc2VsZWN0ZWRQYXRoPSQucGF0aCx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJmaWxlLXNlbGVjdCIse2RldGFpbDp7cGF0aDokLnBhdGgsbmFtZTokLm5hbWV9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpfWFzeW5jIHRvZ2dsZURpcmVjdG9yeShfKXt0aGlzLmV4cGFuZGVkUGF0aHMuaGFzKF8ucGF0aCk/dGhpcy5leHBhbmRlZFBhdGhzLmRlbGV0ZShfLnBhdGgpOih0aGlzLmV4cGFuZGVkUGF0aHMuYWRkKF8ucGF0aCksKCFfLmNoaWxkcmVufHxfLmNoaWxkcmVuLmxlbmd0aD09PTApJiZhd2FpdCB0aGlzLmxvYWREaXJlY3RvcnlDb250ZW50cyhfKSksdGhpcy5yZXF1ZXN0VXBkYXRlKCl9YXN5bmMgbG9hZERpcmVjdG9yeUNvbnRlbnRzKF8pe2lmKHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpdHJ5e2xldCAkPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcihfLnBhdGgpO18uY2hpbGRyZW49dGhpcy5zb3J0RW50cmllcygkKS5tYXAoSD0+KHsuLi5ILGxldmVsOl8ubGV2ZWwrMSxleHBhbmRlZDohMSxjaGlsZHJlbjpILnR5cGU9PT0iZGlyZWN0b3J5Ij9bXTp2b2lkIDB9KSl9Y2F0Y2goJCl7Y29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgZGlyZWN0b3J5ICR7Xy5wYXRofTpgLCQpfX1hc3luYyBoYW5kbGVDb250ZXh0TWVudShfLCQpe18ucHJldmVudERlZmF1bHQoKSxfLnN0b3BQcm9wYWdhdGlvbigpO2xldCBIPVtdOyQudHlwZT09PSJkaXJlY3RvcnkiJiZILnB1c2goe25hbWU6Ik5ldyBGaWxlIixpY29uTmFtZToiZmlsZVBsdXMiLGFjdGlvbjphc3luYygpPT50aGlzLmNyZWF0ZU5ld0ZpbGUoJC5wYXRoKX0se25hbWU6Ik5ldyBGb2xkZXIiLGljb25OYW1lOiJmb2xkZXJQbHVzIixhY3Rpb246YXN5bmMoKT0+dGhpcy5jcmVhdGVOZXdGb2xkZXIoJC5wYXRoKX0se2RpdmlkZXI6ITB9KSxILnB1c2goe25hbWU6IlJlbmFtZSIsaWNvbk5hbWU6InBlbmNpbCIsYWN0aW9uOmFzeW5jKCk9PnRoaXMucmVuYW1lSXRlbSgkKX0se25hbWU6IkR1cGxpY2F0ZSIsaWNvbk5hbWU6ImZpbGVzIixhY3Rpb246YXN5bmMoKT0+dGhpcy5kdXBsaWNhdGVJdGVtKCQpfSx7bmFtZToiQ29weSIsaWNvbk5hbWU6ImNvcHkiLGFjdGlvbjphc3luYygpPT50aGlzLmNvcHlJdGVtKCQpfSksJC50eXBlPT09ImRpcmVjdG9yeSImJnRoaXMuY2xpcGJvYXJkUGF0aCYmSC5wdXNoKHtuYW1lOiJQYXN0ZSIsaWNvbk5hbWU6ImNsaXBib2FyZCIsYWN0aW9uOmFzeW5jKCk9PnRoaXMucGFzdGVJdGVtKCQucGF0aCl9KSxILnB1c2goe2RpdmlkZXI6ITB9LHtuYW1lOiJEZWxldGUiLGljb25OYW1lOiJ0cmFzaDIiLGFjdGlvbjphc3luYygpPT50aGlzLmRlbGV0ZUl0ZW0oJCl9KSxhd2FpdCBXdC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhfLEgpfWFzeW5jIGhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudShfKXtpZihfLnRhcmdldC5jbG9zZXN0KCIudHJlZS1pdGVtIikpcmV0dXJuO18ucHJldmVudERlZmF1bHQoKSxfLnN0b3BQcm9wYWdhdGlvbigpO2xldCBIPVt7bmFtZToiTmV3IEZpbGUiLGljb25OYW1lOiJmaWxlUGx1cyIsYWN0aW9uOmFzeW5jKCk9PnRoaXMuY3JlYXRlTmV3RmlsZSgiLyIpfSx7bmFtZToiTmV3IEZvbGRlciIsaWNvbk5hbWU6ImZvbGRlclBsdXMiLGFjdGlvbjphc3luYygpPT50aGlzLmNyZWF0ZU5ld0ZvbGRlcigiLyIpfV07dGhpcy5jbGlwYm9hcmRQYXRoJiZILnB1c2goe2RpdmlkZXI6ITB9LHtuYW1lOiJQYXN0ZSIsaWNvbk5hbWU6ImNsaXBib2FyZCIsYWN0aW9uOmFzeW5jKCk9PnRoaXMucGFzdGVJdGVtKCIvIil9KSxhd2FpdCBXdC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhfLEgpfWFzeW5jIHNob3dJbnB1dE1vZGFsKF8pe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyAkPT57bGV0IEg9YXdhaXQgZTEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzpfLmhlYWRpbmcsd2lkdGg6InNtYWxsIixjb250ZW50Ok1gCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0ke18ubGFiZWx9CiAgICAgICAgICAgIC52YWx1ZT0ke18udmFsdWV8fCIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJDYW5jZWwiLGFjdGlvbjphc3luYyBrPT57YXdhaXQgay5kZXN0cm95KCksJChudWxsKX19LHtuYW1lOl8uYnV0dG9uTmFtZXx8IkNyZWF0ZSIsYWN0aW9uOmFzeW5jIGs9PntsZXQgVD1rLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbCAuY29udGVudCIpPy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKT8udmFsdWU/LnRyaW0oKXx8IiI7YXdhaXQgay5kZXN0cm95KCksJChUfHxudWxsKX19XX0pO2F3YWl0IEgudXBkYXRlQ29tcGxldGU7bGV0IEw9SC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubW9kYWwgLmNvbnRlbnQiKTtpZihMKXtsZXQgaz1MLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpO2smJihhd2FpdCBrLnVwZGF0ZUNvbXBsZXRlLGsuZm9jdXMoKSl9fSl9YXN5bmMgY3JlYXRlTmV3RmlsZShfKXtsZXQgJD1hd2FpdCB0aGlzLnNob3dJbnB1dE1vZGFsKHtoZWFkaW5nOiJOZXcgRmlsZSIsbGFiZWw6IkZpbGUgbmFtZSJ9KTtpZighJHx8IXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpcmV0dXJuO2xldCBIPV89PT0iLyI/YC8keyR9YDpgJHtffS8keyR9YDt0cnl7YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoSCwiIiksYXdhaXQgdGhpcy5yZWZyZXNoKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsZS1jcmVhdGVkIix7ZGV0YWlsOntwYXRoOkh9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9Y2F0Y2goTCl7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiIsTCl9fWFzeW5jIGNyZWF0ZU5ld0ZvbGRlcihfKXtsZXQgJD1hd2FpdCB0aGlzLnNob3dJbnB1dE1vZGFsKHtoZWFkaW5nOiJOZXcgRm9sZGVyIixsYWJlbDoiRm9sZGVyIG5hbWUifSk7aWYoISR8fCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXJldHVybjtsZXQgSD1fPT09Ii8iP2AvJHskfWA6YCR7X30vJHskfWA7dHJ5e2F3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQubWtkaXIoSCksYXdhaXQgdGhpcy5yZWZyZXNoKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZm9sZGVyLWNyZWF0ZWQiLHtkZXRhaWw6e3BhdGg6SH0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1jYXRjaChMKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZvbGRlcjoiLEwpfX1hc3luYyBkZWxldGVJdGVtKF8pe2lmKCEoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR8fCFjb25maXJtKGBEZWxldGUgJHtfLm5hbWV9P2ApKSl0cnl7YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ybShfLnBhdGgse3JlY3Vyc2l2ZTpfLnR5cGU9PT0iZGlyZWN0b3J5In0pLGF3YWl0IHRoaXMucmVmcmVzaCgpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tZGVsZXRlZCIse2RldGFpbDp7cGF0aDpfLnBhdGgsdHlwZTpfLnR5cGV9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9Y2F0Y2goSCl7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGRlbGV0ZSBpdGVtOiIsSCl9fWFzeW5jIHJlbmFtZUl0ZW0oXyl7aWYoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpcmV0dXJuO2xldCAkPWF3YWl0IHRoaXMuc2hvd0lucHV0TW9kYWwoe2hlYWRpbmc6IlJlbmFtZSIsbGFiZWw6Ik5ldyBuYW1lIix2YWx1ZTpfLm5hbWUsYnV0dG9uTmFtZToiUmVuYW1lIn0pO2lmKCEkfHwkPT09Xy5uYW1lKXJldHVybjtsZXQgSD1fLnBhdGguc3Vic3RyaW5nKDAsXy5wYXRoLmxhc3RJbmRleE9mKCIvIikpfHwiLyIsTD1IPT09Ii8iP2AvJHskfWA6YCR7SH0vJHskfWA7dHJ5e2lmKF8udHlwZT09PSJmaWxlIil7bGV0IGs9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShfLnBhdGgpO2F3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKEwsayksYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ybShfLnBhdGgpfWVsc2UgYXdhaXQgdGhpcy5jb3B5RGlyZWN0b3J5Q29udGVudHMoXy5wYXRoLEwpLGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucm0oXy5wYXRoLHtyZWN1cnNpdmU6ITB9KTthd2FpdCB0aGlzLnJlZnJlc2goKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpdGVtLXJlbmFtZWQiLHtkZXRhaWw6e29sZFBhdGg6Xy5wYXRoLG5ld1BhdGg6TCx0eXBlOl8udHlwZX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1jYXRjaChrKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcmVuYW1lIGl0ZW06IixrKX19YXN5bmMgZHVwbGljYXRlSXRlbShfKXtpZighdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudClyZXR1cm47bGV0ICQ9Xy5wYXRoLnN1YnN0cmluZygwLF8ucGF0aC5sYXN0SW5kZXhPZigiLyIpKXx8Ii8iLEg7aWYoXy50eXBlPT09ImZpbGUiKXtsZXQgaz1fLm5hbWUubGFzdEluZGV4T2YoIi4iKTtpZihrPjApe2xldCBOPV8ubmFtZS5zdWJzdHJpbmcoMCxrKSxTPV8ubmFtZS5zdWJzdHJpbmcoayk7SD1gJHtOfV9jb3B5JHtTfWB9ZWxzZSBIPWAke18ubmFtZX1fY29weWB9ZWxzZSBIPWAke18ubmFtZX1fY29weWA7bGV0IEw9JD09PSIvIj9gLyR7SH1gOmAkeyR9LyR7SH1gO3RyeXtpZihfLnR5cGU9PT0iZmlsZSIpe2xldCBrPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUoXy5wYXRoKTthd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShMLGspfWVsc2UgYXdhaXQgdGhpcy5jb3B5RGlyZWN0b3J5Q29udGVudHMoXy5wYXRoLEwpO2F3YWl0IHRoaXMucmVmcmVzaCgpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tZHVwbGljYXRlZCIse2RldGFpbDp7c291cmNlUGF0aDpfLnBhdGgsbmV3UGF0aDpMLHR5cGU6Xy50eXBlfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWNhdGNoKGspe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBkdXBsaWNhdGUgaXRlbToiLGspfX1hc3luYyBjb3B5SXRlbShfKXt0aGlzLmNsaXBib2FyZFBhdGg9Xy5wYXRoLHRoaXMuY2xpcGJvYXJkT3BlcmF0aW9uPSJjb3B5In1hc3luYyBwYXN0ZUl0ZW0oXyl7aWYoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR8fCF0aGlzLmNsaXBib2FyZFBhdGgpcmV0dXJuO2xldCAkPXRoaXMuY2xpcGJvYXJkUGF0aC5zcGxpdCgiLyIpLnBvcCgpfHwicGFzdGVkIixIPV89PT0iLyI/YC8keyR9YDpgJHtffS8keyR9YDt0cnl7aWYoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKHRoaXMuY2xpcGJvYXJkUGF0aCkpe2NvbnNvbGUuZXJyb3IoIlNvdXJjZSBmaWxlIG5vIGxvbmdlciBleGlzdHMiKSx0aGlzLmNsaXBib2FyZFBhdGg9bnVsbCx0aGlzLmNsaXBib2FyZE9wZXJhdGlvbj1udWxsO3JldHVybn10cnl7bGV0IEw9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZSh0aGlzLmNsaXBib2FyZFBhdGgpO2F3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKEgsTCl9Y2F0Y2h7YXdhaXQgdGhpcy5jb3B5RGlyZWN0b3J5Q29udGVudHModGhpcy5jbGlwYm9hcmRQYXRoLEgpfWF3YWl0IHRoaXMucmVmcmVzaCgpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tcGFzdGVkIix7ZGV0YWlsOntzb3VyY2VQYXRoOnRoaXMuY2xpcGJvYXJkUGF0aCx0YXJnZXRQYXRoOkh9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSksdGhpcy5jbGlwYm9hcmRQYXRoPW51bGwsdGhpcy5jbGlwYm9hcmRPcGVyYXRpb249bnVsbH1jYXRjaChMKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcGFzdGUgaXRlbToiLEwpfX1hc3luYyBjb3B5RGlyZWN0b3J5Q29udGVudHMoXywkKXtpZighdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudClyZXR1cm47YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ta2RpcigkKTtsZXQgSD1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWREaXIoXyk7Zm9yKGxldCBMIG9mIEgpe2xldCBrPV89PT0iLyI/YC8ke0wubmFtZX1gOmAke199LyR7TC5uYW1lfWAsTj0kPT09Ii8iP2AvJHtMLm5hbWV9YDpgJHskfS8ke0wubmFtZX1gO2lmKEwudHlwZT09PSJkaXJlY3RvcnkiKWF3YWl0IHRoaXMuY29weURpcmVjdG9yeUNvbnRlbnRzKGssTik7ZWxzZXtsZXQgUz1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKGspO2F3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKE4sUyl9fX1hc3luYyBmaXJzdFVwZGF0ZWQoKXthd2FpdCB0aGlzLmxvYWRUcmVlKCl9YXN5bmMgdXBkYXRlZChfKXtfLmhhcygiZXhlY3V0aW9uRW52aXJvbm1lbnQiKSYmKHRoaXMubGFzdEV4ZWN1dGlvbkVudmlyb25tZW50IT09dGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCYmKHRoaXMuc3RvcEZpbGVXYXRjaGVyKCksdGhpcy5sYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQ9dGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCksdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCYmKGF3YWl0IHRoaXMubG9hZFRyZWUoKSx0aGlzLnN0YXJ0RmlsZVdhdGNoZXIoKSkpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLnN0b3BGaWxlV2F0Y2hlcigpLHRoaXMucmVmcmVzaERlYm91bmNlVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hEZWJvdW5jZVRpbWVvdXQpLHRoaXMucmVmcmVzaERlYm91bmNlVGltZW91dD1udWxsKX1zdGFydEZpbGVXYXRjaGVyKCl7aWYoISghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudHx8dGhpcy5maWxlV2F0Y2hlcikpdHJ5e3RoaXMuZmlsZVdhdGNoZXI9dGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaCgiLyIsKF8sJCk9Pnt0aGlzLnJlZnJlc2hEZWJvdW5jZVRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hEZWJvdW5jZVRpbWVvdXQpLHRoaXMucmVmcmVzaERlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5yZWZyZXNoKCl9LDMwMCl9LHtyZWN1cnNpdmU6ITB9KX1jYXRjaChfKXtjb25zb2xlLndhcm4oIkZpbGUgd2F0Y2hpbmcgbm90IHN1cHBvcnRlZDoiLF8pfX1zdG9wRmlsZVdhdGNoZXIoKXt0aGlzLmZpbGVXYXRjaGVyJiYodGhpcy5maWxlV2F0Y2hlci5zdG9wKCksdGhpcy5maWxlV2F0Y2hlcj1udWxsKX1hc3luYyBsb2FkVHJlZSgpe2lmKHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQmJiF0aGlzLmxvYWRUcmVlU3RhcnRlZCl7dGhpcy5sb2FkVHJlZVN0YXJ0ZWQ9ITAsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5lcnJvck1lc3NhZ2U9IiI7dHJ5e3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHl8fGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuaW5pdCgpO2xldCBfPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcih0aGlzLnJvb3RQYXRoKTt0aGlzLnRyZWVEYXRhPXRoaXMuc29ydEVudHJpZXMoXykubWFwKCQ9Pih7Li4uJCxsZXZlbDowLGV4cGFuZGVkOiExLGNoaWxkcmVuOiQudHlwZT09PSJkaXJlY3RvcnkiP1tdOnZvaWQgMH0pKX1jYXRjaChfKXt0aGlzLmVycm9yTWVzc2FnZT1gRmFpbGVkIHRvIGxvYWQgZmlsZXM6ICR7X31gLGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGZpbGUgdHJlZToiLF8pLHRoaXMubG9hZFRyZWVTdGFydGVkPSExfWZpbmFsbHl7dGhpcy5pc0xvYWRpbmc9ITF9fX1zb3J0RW50cmllcyhfKXtyZXR1cm4gXy5zb3J0KCgkLEgpPT4kLnR5cGUhPT1ILnR5cGU/JC50eXBlPT09ImRpcmVjdG9yeSI/LTE6MTokLm5hbWUubG9jYWxlQ29tcGFyZShILm5hbWUpKX1hc3luYyByZWZyZXNoKCl7dGhpcy5leHBhbmRlZFBhdGhzLmNsZWFyKCksdGhpcy5sb2FkVHJlZVN0YXJ0ZWQ9ITEsYXdhaXQgdGhpcy5sb2FkVHJlZSgpfXNlbGVjdEZpbGUoXyl7dGhpcy5zZWxlY3RlZFBhdGg9X31zdGF0aWN7bWEocixhKX19O3JldHVybiBQPXJ9KSgpO2ZlKCk7QmUoKTtlYygpO3ZhciBqRWU9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxDST1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sSHMxPSgoKT0+e2xldCB0PVtjZSgiZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldyIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdO3ZhciBkPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgaD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOlN0cmluZ30pXSxmPVtEKHt0eXBlOkFycmF5fSldLGpFZSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNvbW1hbmQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJjb21tYW5kImluIGcsZ2V0Omc9PmcuY29tbWFuZCxzZXQ6KGcsYik9PntnLmNvbW1hbmQ9Yn19LG1ldGFkYXRhOmh9LHMsbCksakVlKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGluZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJsaW5lcyJpbiBnLGdldDpnPT5nLmxpbmVzLHNldDooZyxiKT0+e2cubGluZXM9Yn19LG1ldGFkYXRhOmh9LGMsdSksakVlKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOmh9LG51bGwsYSksZD1yPWUudmFsdWUsaCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpofSl9c3RhdGljIGRlbW89KCk9Pk1gCiAgICA8ZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldwogICAgICAuY29tbWFuZD0keyJwbnBtIGluc3RhbGwifQogICAgICAubGluZXM9JHtbIlBhY2thZ2VzOiArNDIiLCJQcm9ncmVzczogcmVzb2x2ZWQgMTQyLCByZXVzZWQgMTQwLCBkb3dubG9hZGVkIDIsIGFkZGVkIDQyLCBkb25lIiwiIiwiZGVwZW5kZW5jaWVzOiIsIisgQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlIDQuMi4zIiwiKyB0eXBlc2NyaXB0IDUuMy4zIiwiIiwiRG9uZSBpbiAyLjNzIl19CiAgICA+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3PgogIGA7c3RhdGljIGRlbW9Hcm91cD0iV29ya3NwYWNlIjsjZT1DSSh0aGlzLHMsIiIpO2dldCBjb21tYW5kKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGNvbW1hbmQoaCl7dGhpcy4jZT1ofSN0PShDSSh0aGlzLGwpLENJKHRoaXMsYyxbXSkpO2dldCBsaW5lcygpe3JldHVybiB0aGlzLiN0fXNldCBsaW5lcyhoKXt0aGlzLiN0PWh9dGVybWluYWw9KENJKHRoaXMsdSksbnVsbCk7Zml0QWRkb249bnVsbDtsYXN0TGluZUNvdW50PTA7cmVzaXplT2JzZXJ2ZXI9bnVsbDt0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uPW51bGw7c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXByZXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMwMDAwMDAiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NiUpIiwiaHNsKDAgMCUgMTAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGVybWluYWwtaGVhZGVyLWljb24gewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsImhzbCgwIDAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1oZWFkZXItY29tbWFuZCB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgICN4dGVybS1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDhweDsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgfQoKICAgICAgLyogeHRlcm0uanMgc3R5bGVzICovCiAgICAgIC54dGVybSB7CiAgICAgICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnbGlnYScgMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybS5mb2N1cywKICAgICAgLnh0ZXJtOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWhlbHBlcnMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogNTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXItdGV4dGFyZWEgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBsZWZ0OiAtOTk5OWVtOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogLTU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC5jb21wb3NpdGlvbi12aWV3IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMwMDAwMDAiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzMzMzIiwiI2ZmZmZmZiIpfTsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldy5hY3RpdmUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMwMDAwMDAiKX07CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcmVlbiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcmVlbiBjYW52YXMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JvbGwtYXJlYSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAueHRlcm0tY2hhci1tZWFzdXJlLWVsZW1lbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAtOTk5OWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICAgIH0KCiAgICAgIC54dGVybSB7CiAgICAgICAgY3Vyc29yOiB0ZXh0OwogICAgICB9CgogICAgICAueHRlcm0uZW5hYmxlLW1vdXNlLWV2ZW50cyB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAueHRlcm0ueHRlcm0tY3Vyc29yLXBvaW50ZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnh0ZXJtLmNvbHVtbi1zZWxlY3QuZm9jdXMgewogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWFjY2Vzc2liaWxpdHksCiAgICAgIC54dGVybSAueHRlcm0tbWVzc2FnZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC54dGVybSAubGl2ZS1yZWdpb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtOTk5OXB4OwogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWRpbSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAueHRlcm0tdW5kZXJsaW5lIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLyogQ3VzdG9tIHNjcm9sbGJhciBmb3IgeHRlcm0gdmlld3BvcnQgKi8KICAgICAgLnh0ZXJtIC54dGVybS12aWV3cG9ydDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsImhzbCgwIDAlIDglKSIpfTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS12aWV3cG9ydDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4MCUpIiwiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNzAlKSIsImhzbCgwIDAlIDM1JSkiKX07CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1wcmV2aWV3Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1oZWFkZXIiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm1pbmFsLWhlYWRlci1pY29uIj4kPC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm1pbmFsLWhlYWRlci1jb21tYW5kIj4ke3RoaXMuY29tbWFuZHx8IldhaXRpbmcuLi4ifTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBpZD0ieHRlcm0tY29udGFpbmVyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWdldFRlcm1pbmFsVGhlbWUoaCl7cmV0dXJuIGg/e2JhY2tncm91bmQ6IiNmZmZmZmYiLGZvcmVncm91bmQ6IiMzMzMzMzMiLGN1cnNvcjoiIzMzMzMzMyIsY3Vyc29yQWNjZW50OiIjZmZmZmZmIixzZWxlY3Rpb25CYWNrZ3JvdW5kOiJyZ2JhKDAsIDAsIDAsIDAuMikifTp7YmFja2dyb3VuZDoiIzAwMDAwMCIsZm9yZWdyb3VuZDoiI2NjY2NjYyIsY3Vyc29yOiIjY2NjY2NjIixjdXJzb3JBY2NlbnQ6IiMwMDAwMDAiLHNlbGVjdGlvbkJhY2tncm91bmQ6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSJ9fWFzeW5jIGZpcnN0VXBkYXRlZChoKXtzdXBlci5maXJzdFVwZGF0ZWQoaCk7bGV0IGc9dGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZCgieHRlcm0tY29udGFpbmVyIik7aWYoIWcpcmV0dXJuO2xldCBiPWF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlLHg9Yi50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuLG09SDIuZ2V0SW5zdGFuY2UoKSxbdix5XT1hd2FpdCBQcm9taXNlLmFsbChbbS5sb2FkWHRlcm0oKSxtLmxvYWRYdGVybUZpdEFkZG9uKCldKTt0aGlzLnRlcm1pbmFsPW5ldyB2LlRlcm1pbmFsKHtjb252ZXJ0RW9sOiEwLGN1cnNvckJsaW5rOiExLGRpc2FibGVTdGRpbjohMCxmb250U2l6ZToxMixmb250RmFtaWx5OiInU0YgTW9ubycsICdNb25hY28nLCAnSW5jb25zb2xhdGEnLCAnRmlyYSBDb2RlJywgbW9ub3NwYWNlIix0aGVtZTp0aGlzLmdldFRlcm1pbmFsVGhlbWUoeCksc2Nyb2xsYmFjazoxZTN9KSx0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb249Yi50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSh3PT57dGhpcy50ZXJtaW5hbCYmKHRoaXMudGVybWluYWwub3B0aW9ucy50aGVtZT10aGlzLmdldFRlcm1pbmFsVGhlbWUodykpfSksdGhpcy5maXRBZGRvbj1uZXcgeS5GaXRBZGRvbix0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbih0aGlzLmZpdEFkZG9uKSx0aGlzLnRlcm1pbmFsLm9wZW4oZyksdGhpcy5maXRBZGRvbi5maXQoKSx0aGlzLnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e3RoaXMuZml0QWRkb24mJnRoaXMuZml0QWRkb24uZml0KCl9KSx0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZyksdGhpcy53cml0ZU5ld0xpbmVzKCl9YXN5bmMgdXBkYXRlZChoKXtzdXBlci51cGRhdGVkKGgpLGguaGFzKCJsaW5lcyIpJiZ0aGlzLndyaXRlTmV3TGluZXMoKX13cml0ZU5ld0xpbmVzKCl7aWYoIXRoaXMudGVybWluYWwpcmV0dXJuO2xldCBoPXRoaXMubGluZXMuc2xpY2UodGhpcy5sYXN0TGluZUNvdW50KTtmb3IobGV0IGcgb2YgaCl0aGlzLnRlcm1pbmFsLndyaXRlbG4oZyk7dGhpcy5sYXN0TGluZUNvdW50PXRoaXMubGluZXMubGVuZ3RofWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5yZXNpemVPYnNlcnZlciYmKHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMucmVzaXplT2JzZXJ2ZXI9bnVsbCksdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uJiYodGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uPW51bGwpLHRoaXMudGVybWluYWwmJih0aGlzLnRlcm1pbmFsLmRpc3Bvc2UoKSx0aGlzLnRlcm1pbmFsPW51bGwpLGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCl9YWRkTGluZShoKXt0aGlzLmxpbmVzPVsuLi50aGlzLmxpbmVzLGhdfWNsZWFyKCl7dGhpcy5saW5lcz1bXSx0aGlzLmxhc3RMaW5lQ291bnQ9MCx0aGlzLnRlcm1pbmFsJiZ0aGlzLnRlcm1pbmFsLmNsZWFyKCl9c3RhdGlje0NJKHIsYSl9fTtyZXR1cm4gZD1yfSkoKTtmZSgpO0JlKCk7RnQoKTt2YXIgZzU9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxjcj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0scXMxPSgoKT0+e2xldCB0PVtjZSgiZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W107dmFyIEU9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBDPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6T2JqZWN0fSldLGY9W2xlKCldLGQ9W2xlKCldLGI9W2xlKCldLHY9W2xlKCldLGc1KHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXhlY3V0aW9uRW52aXJvbm1lbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJleGVjdXRpb25FbnZpcm9ubWVudCJpbiB6LGdldDp6PT56LmV4ZWN1dGlvbkVudmlyb25tZW50LHNldDooeixQKT0+e3ouZXhlY3V0aW9uRW52aXJvbm1lbnQ9UH19LG1ldGFkYXRhOkN9LHMsbCksZzUodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzY3JpcHRzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ic2NyaXB0cyJpbiB6LGdldDp6PT56LnNjcmlwdHMsc2V0Oih6LFApPT57ei5zY3JpcHRzPVB9fSxtZXRhZGF0YTpDfSxjLHUpLGc1KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicGFja2FnZVN0YXR1cyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InBhY2thZ2VTdGF0dXMiaW4geixnZXQ6ej0+ei5wYWNrYWdlU3RhdHVzLHNldDooeixQKT0+e3oucGFja2FnZVN0YXR1cz1QfX0sbWV0YWRhdGE6Q30saCxnKSxnNSh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im91dGRhdGVkUGFja2FnZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJvdXRkYXRlZFBhY2thZ2VzImluIHosZ2V0Ono9Pnoub3V0ZGF0ZWRQYWNrYWdlcyxzZXQ6KHosUCk9Pnt6Lm91dGRhdGVkUGFja2FnZXM9UH19LG1ldGFkYXRhOkN9LHgsbSksZzUodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0NoZWNraW5nUGFja2FnZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJpc0NoZWNraW5nUGFja2FnZXMiaW4geixnZXQ6ej0+ei5pc0NoZWNraW5nUGFja2FnZXMsc2V0Oih6LFApPT57ei5pc0NoZWNraW5nUGFja2FnZXM9UH19LG1ldGFkYXRhOkN9LHksdyksZzUobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6Q30sbnVsbCxhKSxFPXI9ZS52YWx1ZSxDJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkN9KX0jZT1jcih0aGlzLHMsbnVsbCk7Z2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCl7cmV0dXJuIHRoaXMuI2V9c2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KEMpe3RoaXMuI2U9Q30jdD0oY3IodGhpcyxsKSxjcih0aGlzLGMse30pKTtnZXQgc2NyaXB0cygpe3JldHVybiB0aGlzLiN0fXNldCBzY3JpcHRzKEMpe3RoaXMuI3Q9Q30jYT0oY3IodGhpcyx1KSxjcih0aGlzLGgsImlkbGUiKSk7Z2V0IHBhY2thZ2VTdGF0dXMoKXtyZXR1cm4gdGhpcy4jYX1zZXQgcGFja2FnZVN0YXR1cyhDKXt0aGlzLiNhPUN9I3I9KGNyKHRoaXMsZyksY3IodGhpcyx4LFtdKSk7Z2V0IG91dGRhdGVkUGFja2FnZXMoKXtyZXR1cm4gdGhpcy4jcn1zZXQgb3V0ZGF0ZWRQYWNrYWdlcyhDKXt0aGlzLiNyPUN9I2k9KGNyKHRoaXMsbSksY3IodGhpcyx5LCExKSk7Z2V0IGlzQ2hlY2tpbmdQYWNrYWdlcygpe3JldHVybiB0aGlzLiNpfXNldCBpc0NoZWNraW5nUGFja2FnZXMoQyl7dGhpcy4jaT1DfXBlbmRpbmdQYWNrYWdlVXBkYXRlPShjcih0aGlzLHcpLCExKTtoYW5kbGVQcm9jZXNzQ29tcGxldGU9Qz0+e3RoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUmJih0aGlzLnBlbmRpbmdQYWNrYWdlVXBkYXRlPSExLHNldFRpbWVvdXQoKCk9PnRoaXMuY2hlY2tQYWNrYWdlcygpLDUwMCkpfTtzdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5ib3R0b20tYmFyIHsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwiaHNsKDAgMCUgNiUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC53aWRnZXQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA4MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0IGRlZXMtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC53aWRnZXQtc2VwYXJhdG9yIHsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODAlKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLndpZGdldC5ydW5uaW5nIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0NSUpIiwiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQudXAtdG8tZGF0ZSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMTQyIDcwJSAzNSUpIiwiaHNsKDE0MiA3MCUgNTAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC51cGRhdGVzLWF2YWlsYWJsZSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMzggOTIlIDQ1JSkiLCJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQuZXJyb3IgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICBmcm9tIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQoKICAgICAgLnNwaW5uaW5nIHsKICAgICAgICBhbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICAuc3BhY2VyIHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0iYm90dG9tLWJhciI+CiAgICAgICAgPCEtLSBTY3JpcHQgUnVubmVyIFdpZGdldCAtLT4KICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0id2lkZ2V0IgogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVTY3JpcHRDbGlja30KICAgICAgICAgIHRpdGxlPSJSdW4gc2NyaXB0IgogICAgICAgID4KICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgLmljb249JHsibHVjaWRlOnBsYXkifQogICAgICAgICAgICBpY29uU2l6ZT0iMTIiCiAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3Bhbj5TY3JpcHRzPC9zcGFuPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXQtc2VwYXJhdG9yIj48L2Rpdj4KCiAgICAgICAgPCEtLSBQYWNrYWdlIENoZWNrZXIgV2lkZ2V0IC0tPgogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJ3aWRnZXQgJHt0aGlzLmdldFBhY2thZ2VTdGF0dXNDbGFzcygpfSIKICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlUGFja2FnZUNsaWNrfQogICAgICAgICAgdGl0bGU9IiR7dGhpcy5nZXRQYWNrYWdlVG9vbHRpcCgpfSIKICAgICAgICA+CiAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgIC5pY29uPSR7dGhpcy5nZXRQYWNrYWdlSWNvbigpfQogICAgICAgICAgICBpY29uU2l6ZT0iMTIiCiAgICAgICAgICAgIGNsYXNzPSIke3RoaXMuaXNDaGVja2luZ1BhY2thZ2VzPyJzcGlubmluZyI6IiJ9IgogICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+JHt0aGlzLmdldFBhY2thZ2VTdGF0dXNUZXh0KCl9PC9zcGFuPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgoKICAgICAgICA8IS0tIEZ1dHVyZSB3aWRnZXRzIGNhbiBiZSBhZGRlZCBoZXJlIC0tPgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwcm9jZXNzLWNvbXBsZXRlIix0aGlzLmhhbmRsZVByb2Nlc3NDb21wbGV0ZSl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9jZXNzLWNvbXBsZXRlIix0aGlzLmhhbmRsZVByb2Nlc3NDb21wbGV0ZSl9YXN5bmMgZmlyc3RVcGRhdGVkKCl7YXdhaXQgdGhpcy5sb2FkU2NyaXB0cygpLGF3YWl0IHRoaXMuY2hlY2tQYWNrYWdlcygpfWFzeW5jIHVwZGF0ZWQoQyl7Qy5oYXMoImV4ZWN1dGlvbkVudmlyb25tZW50IikmJnRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQmJihhd2FpdCB0aGlzLmxvYWRTY3JpcHRzKCksYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCkpfWFzeW5jIGxvYWRTY3JpcHRzKCl7aWYodGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCl0cnl7aWYoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKCIvcGFja2FnZS5qc29uIikpe3RoaXMuc2NyaXB0cz17fTtyZXR1cm59bGV0IHo9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZSgiL3BhY2thZ2UuanNvbiIpLFA9SlNPTi5wYXJzZSh6KTt0aGlzLnNjcmlwdHM9UC5zY3JpcHRzfHx7fX1jYXRjaChDKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBsb2FkIHNjcmlwdHMgZnJvbSBwYWNrYWdlLmpzb246IixDKSx0aGlzLnNjcmlwdHM9e319fWFzeW5jIGhhbmRsZVNjcmlwdENsaWNrKEMpe0Muc3RvcFByb3BhZ2F0aW9uKCk7bGV0IHo9T2JqZWN0LmtleXModGhpcy5zY3JpcHRzKTtpZih6Lmxlbmd0aD09PTApcmV0dXJuO2xldCBQPXoubWFwKF89Pih7bmFtZTpfLGljb25OYW1lOiJsdWNpZGU6dGVybWluYWwiLGFjdGlvbjphc3luYygpPT57YXdhaXQgdGhpcy5ydW5TY3JpcHQoXyl9fSkpO2F3YWl0IFd0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKEMsUCl9YXN5bmMgcnVuU2NyaXB0KEMpe2lmKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXJldHVybjtsZXQgej17dHlwZToic2NyaXB0IixsYWJlbDpDLGNvbW1hbmQ6InBucG0iLGFyZ3M6WyJydW4iLENdLG1ldGFkYXRhOntzY3JpcHROYW1lOkN9fTt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJydW4tcHJvY2VzcyIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITAsZGV0YWlsOnp9KSl9YXN5bmMgY2hlY2tQYWNrYWdlcygpe2lmKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXt0aGlzLnBhY2thZ2VTdGF0dXM9ImlkbGUiO3JldHVybn10cnl7aWYoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKCIvcGFja2FnZS5qc29uIikpe3RoaXMucGFja2FnZVN0YXR1cz0iaWRsZSI7cmV0dXJufXRoaXMucGFja2FnZVN0YXR1cz0iY2hlY2tpbmciLHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzPSEwO2xldCB6PWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuc3Bhd24oInBucG0iLFsib3V0ZGF0ZWQiLCItLWpzb24iXSksUD0iIixfPXoub3V0cHV0LmdldFJlYWRlcigpOyhhc3luYygpPT57dHJ5e2Zvcig7Oyl7bGV0e2RvbmU6TCx2YWx1ZTprfT1hd2FpdCBfLnJlYWQoKTtpZihMKWJyZWFrO1ArPWt9fWNhdGNoe319KSgpO2xldCBIPWF3YWl0IFByb21pc2UucmFjZShbei5leGl0LG5ldyBQcm9taXNlKEw9PnNldFRpbWVvdXQoKCk9PkwoLTEpLDFlNCkpXSk7dHJ5e2F3YWl0IF8uY2FuY2VsKCl9Y2F0Y2h7fWlmKEg9PT0tMSl7Y29uc29sZS53YXJuKCJQYWNrYWdlIGNoZWNrIHRpbWVkIG91dCIpLHRoaXMucGFja2FnZVN0YXR1cz0iZXJyb3IiO3JldHVybn1pZihIPT09MCl0aGlzLnBhY2thZ2VTdGF0dXM9InVwLXRvLWRhdGUiLHRoaXMub3V0ZGF0ZWRQYWNrYWdlcz1bXTtlbHNlIHRyeXtsZXQgTD1KU09OLnBhcnNlKFApO3RoaXMub3V0ZGF0ZWRQYWNrYWdlcz10aGlzLnBhcnNlT3V0ZGF0ZWRQYWNrYWdlcyhMKSx0aGlzLnBhY2thZ2VTdGF0dXM9dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aD4wPyJ1cGRhdGVzLWF2YWlsYWJsZSI6InVwLXRvLWRhdGUifWNhdGNoe3RoaXMucGFja2FnZVN0YXR1cz0idXBkYXRlcy1hdmFpbGFibGUiLHRoaXMub3V0ZGF0ZWRQYWNrYWdlcz1bXX19Y2F0Y2goQyl7Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gY2hlY2sgZm9yIHBhY2thZ2UgdXBkYXRlczoiLEMpLHRoaXMucGFja2FnZVN0YXR1cz0iZXJyb3IifWZpbmFsbHl7dGhpcy5pc0NoZWNraW5nUGFja2FnZXM9ITF9fXBhcnNlT3V0ZGF0ZWRQYWNrYWdlcyhDKXtsZXQgej1bXTtpZih0eXBlb2YgQz09Im9iamVjdCImJkMhPT1udWxsKWZvcihsZXRbUCxfXW9mIE9iamVjdC5lbnRyaWVzKEMpKXtsZXQgJD1fO3oucHVzaCh7bmFtZTpQLGN1cnJlbnQ6JC5jdXJyZW50fHwidW5rbm93biIsd2FudGVkOiQud2FudGVkfHwkLmN1cnJlbnR8fCJ1bmtub3duIixsYXRlc3Q6JC5sYXRlc3R8fCQud2FudGVkfHwidW5rbm93biIsdHlwZTokLmRlcGVuZGVuY3lUeXBlPT09ImRldkRlcGVuZGVuY2llcyI/ImRldkRlcGVuZGVuY2llcyI6ImRlcGVuZGVuY2llcyJ9KX1yZXR1cm4gen1hc3luYyBoYW5kbGVQYWNrYWdlQ2xpY2soQyl7Qy5zdG9wUHJvcGFnYXRpb24oKTtsZXQgej1bXTtpZih6LnB1c2goe25hbWU6dGhpcy5pc0NoZWNraW5nUGFja2FnZXM/IkNoZWNraW5nLi4uIjoiQ2hlY2sgZm9yIHVwZGF0ZXMiLGljb25OYW1lOiJsdWNpZGU6cmVmcmVzaEN3IixhY3Rpb246YXN5bmMoKT0+e2lmKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKXJldHVybjtsZXQgUD17dHlwZToicGFja2FnZS11cGRhdGUiLGxhYmVsOiJjaGVjayBwYWNrYWdlcyIsY29tbWFuZDoicG5wbSIsYXJnczpbIm91dGRhdGVkIl19O3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJ1bi1wcm9jZXNzIix7YnViYmxlczohMCxjb21wb3NlZDohMCxkZXRhaWw6UH0pKSxzZXRUaW1lb3V0KCgpPT50aGlzLmNoZWNrUGFja2FnZXMoKSwzZTMpfX0pLHRoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGg+MCl7ei5wdXNoKHtkaXZpZGVyOiEwfSk7bGV0IFA9dGhpcy5vdXRkYXRlZFBhY2thZ2VzLnNsaWNlKDAsMTApO2ZvcihsZXQgXyBvZiBQKXoucHVzaCh7bmFtZTpgJHtfLm5hbWV9OiAke18uY3VycmVudH0gXHUyMTkyICR7Xy5sYXRlc3R9YCxpY29uTmFtZToibHVjaWRlOnBhY2thZ2UiLGFjdGlvbjphc3luYygpPT57YXdhaXQgdGhpcy51cGRhdGVQYWNrYWdlKF8ubmFtZSl9fSk7dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aD4xMCYmei5wdXNoKHtuYW1lOmAuLi4gYW5kICR7dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aC0xMH0gbW9yZWAsaWNvbk5hbWU6Imx1Y2lkZTptb3JlSG9yaXpvbnRhbCIsYWN0aW9uOmFzeW5jKCk9Pnt9fSksei5wdXNoKHtkaXZpZGVyOiEwfSksei5wdXNoKHtuYW1lOiJVcGRhdGUgYWxsIHBhY2thZ2VzIixpY29uTmFtZToibHVjaWRlOmFycm93VXBDaXJjbGUiLGFjdGlvbjphc3luYygpPT57YXdhaXQgdGhpcy51cGRhdGVBbGxQYWNrYWdlcygpfX0pfWF3YWl0IFd0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKEMseil9YXN5bmMgdXBkYXRlUGFja2FnZShDKXtpZighdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudClyZXR1cm47dGhpcy5wZW5kaW5nUGFja2FnZVVwZGF0ZT0hMDtsZXQgej17dHlwZToicGFja2FnZS11cGRhdGUiLGxhYmVsOmB1cGRhdGUgJHtDfWAsY29tbWFuZDoicG5wbSIsYXJnczpbInVwZGF0ZSIsIi0tbGF0ZXN0IixDXSxtZXRhZGF0YTp7cGFja2FnZU5hbWU6Q319O3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJ1bi1wcm9jZXNzIix7YnViYmxlczohMCxjb21wb3NlZDohMCxkZXRhaWw6en0pKX1hc3luYyB1cGRhdGVBbGxQYWNrYWdlcygpe2lmKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXJldHVybjt0aGlzLnBlbmRpbmdQYWNrYWdlVXBkYXRlPSEwO2xldCBDPXt0eXBlOiJwYWNrYWdlLXVwZGF0ZSIsbGFiZWw6InVwZGF0ZSBhbGwiLGNvbW1hbmQ6InBucG0iLGFyZ3M6WyJ1cGRhdGUiLCItLWxhdGVzdCJdfTt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJydW4tcHJvY2VzcyIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITAsZGV0YWlsOkN9KSl9Z2V0UGFja2FnZVN0YXR1c0NsYXNzKCl7cmV0dXJuIHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzPyIiOnRoaXMucGFja2FnZVN0YXR1c31nZXRQYWNrYWdlSWNvbigpe2lmKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKXJldHVybiJsdWNpZGU6bG9hZGVyMiI7c3dpdGNoKHRoaXMucGFja2FnZVN0YXR1cyl7Y2FzZSJ1cC10by1kYXRlIjpyZXR1cm4ibHVjaWRlOmNoZWNrQ2lyY2xlIjtjYXNlInVwZGF0ZXMtYXZhaWxhYmxlIjpyZXR1cm4ibHVjaWRlOmFsZXJ0Q2lyY2xlIjtjYXNlImVycm9yIjpyZXR1cm4ibHVjaWRlOnhDaXJjbGUiO2RlZmF1bHQ6cmV0dXJuImx1Y2lkZTpwYWNrYWdlIn19Z2V0UGFja2FnZVN0YXR1c1RleHQoKXtpZih0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcylyZXR1cm4iQ2hlY2tpbmcuLi4iO3N3aXRjaCh0aGlzLnBhY2thZ2VTdGF0dXMpe2Nhc2UidXAtdG8tZGF0ZSI6cmV0dXJuIlVwIHRvIGRhdGUiO2Nhc2UidXBkYXRlcy1hdmFpbGFibGUiOnJldHVybmAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGh9IHVwZGF0ZSR7dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aCE9PTE/InMiOiIifWA7Y2FzZSJlcnJvciI6cmV0dXJuIkNoZWNrIGZhaWxlZCI7ZGVmYXVsdDpyZXR1cm4iUGFja2FnZXMifX1nZXRQYWNrYWdlVG9vbHRpcCgpe2lmKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKXJldHVybiJDaGVja2luZyBmb3IgcGFja2FnZSB1cGRhdGVzLi4uIjtzd2l0Y2godGhpcy5wYWNrYWdlU3RhdHVzKXtjYXNlInVwLXRvLWRhdGUiOnJldHVybiJBbGwgcGFja2FnZXMgYXJlIHVwIHRvIGRhdGUiO2Nhc2UidXBkYXRlcy1hdmFpbGFibGUiOnJldHVybmAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGh9IHBhY2thZ2UgdXBkYXRlJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoIT09MT8icyI6IiJ9IGF2YWlsYWJsZWA7Y2FzZSJlcnJvciI6cmV0dXJuIkZhaWxlZCB0byBjaGVjayBmb3IgdXBkYXRlcy4gQ2xpY2sgdG8gcmV0cnkuIjtkZWZhdWx0OnJldHVybiJDbGljayB0byBjaGVjayBmb3IgcGFja2FnZSB1cGRhdGVzIn19YXN5bmMgcmVmcmVzaFBhY2thZ2VTdGF0dXMoKXthd2FpdCB0aGlzLmNoZWNrUGFja2FnZXMoKX1hc3luYyByZWZyZXNoU2NyaXB0cygpe2F3YWl0IHRoaXMubG9hZFNjcmlwdHMoKX1zdGF0aWN7Y3IocixhKX19O3JldHVybiBFPXJ9KSgpO3ZhciBiaj1jbGFzc3tsb2FkZWRMaWJzPW5ldyBTZXQ7bm90Rm91bmRQYWNrYWdlcz1uZXcgU2V0O21vbmFjb0luc3RhbmNlPW51bGw7ZXhlY3V0aW9uRW52aXJvbm1lbnQ9bnVsbDtmaWxlQ2FjaGU9bmV3IE1hcDthZGRlZEV4dHJhTGlicz1uZXcgTWFwO2dldCB0c0FwaSgpe3JldHVybiB0aGlzLm1vbmFjb0luc3RhbmNlP3RoaXMubW9uYWNvSW5zdGFuY2UubGFuZ3VhZ2VzLnR5cGVzY3JpcHQ6bnVsbH1hc3luYyBpbml0KGUsYSl7dGhpcy5tb25hY29JbnN0YW5jZT1lLHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQ9YSx0aGlzLmNvbmZpZ3VyZUNvbXBpbGVyT3B0aW9ucygpLGF3YWl0IHRoaXMubG9hZEFsbFByb2plY3RGaWxlcygpfWFzeW5jIGxvYWRBbGxQcm9qZWN0RmlsZXMoKXt0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50JiZhd2FpdCB0aGlzLmxvYWRGaWxlc0Zyb21EaXJlY3RvcnkoIi8iKX1hc3luYyBsb2FkRmlsZXNGcm9tRGlyZWN0b3J5KGUpe2lmKHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpdHJ5e2xldCBhPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcihlKTtmb3IobGV0IHIgb2YgYSl7bGV0IGk9ZT09PSIvIj9gLyR7ci5uYW1lfWA6YCR7ZX0vJHtyLm5hbWV9YDtpZihyLm5hbWUhPT0ibm9kZV9tb2R1bGVzIil7aWYoci50eXBlPT09ImRpcmVjdG9yeSIpYXdhaXQgdGhpcy5sb2FkRmlsZXNGcm9tRGlyZWN0b3J5KGkpO2Vsc2UgaWYoci50eXBlPT09ImZpbGUiKXtsZXQgbz1yLm5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKTtpZihvPT09InRzInx8bz09PSJ0c3gifHxvPT09ImpzInx8bz09PSJqc3giKXRyeXtsZXQgcz1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKGkpO3RoaXMuYWRkRmlsZU1vZGVsKGkscyl9Y2F0Y2h7fX19fX1jYXRjaHt9fWNvbmZpZ3VyZUNvbXBpbGVyT3B0aW9ucygpe2xldCBlPXRoaXMudHNBcGk7ZSYmKGUudHlwZXNjcmlwdERlZmF1bHRzLnNldENvbXBpbGVyT3B0aW9ucyh7dGFyZ2V0OmUuU2NyaXB0VGFyZ2V0LkVTMjAyMCxtb2R1bGU6ZS5Nb2R1bGVLaW5kLkVTTmV4dCxtb2R1bGVSZXNvbHV0aW9uOmUuTW9kdWxlUmVzb2x1dGlvbktpbmQuQnVuZGxlcj8/ZS5Nb2R1bGVSZXNvbHV0aW9uS2luZC5Ob2RlSnMsYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0czohMCxlc01vZHVsZUludGVyb3A6ITAsc3RyaWN0OiEwLG5vRW1pdDohMCxhbGxvd0pzOiEwLGNoZWNrSnM6ITEsYWxsb3dOb25Uc0V4dGVuc2lvbnM6ITAsbGliOlsiZXMyMDIwIiwiZG9tIiwiZG9tLml0ZXJhYmxlIl0sYmFzZVVybDoiLyIsYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6ITAscmVzb2x2ZUpzb25Nb2R1bGU6ITB9KSxlLnR5cGVzY3JpcHREZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMoe25vU2VtYW50aWNWYWxpZGF0aW9uOiExLG5vU3ludGF4VmFsaWRhdGlvbjohMX0pLGUudHlwZXNjcmlwdERlZmF1bHRzLnNldEVhZ2VyTW9kZWxTeW5jKCEwKSl9cGFyc2VJbXBvcnRzKGUpe2xldCBhPVtdLHI9L2ltcG9ydFxzKyg/Oltcdyp7fVxzLF0rZnJvbVxzKyk/WyciXShbXiciXSspWyciXS9nLGk7Zm9yKDsoaT1yLmV4ZWMoZSkpIT09bnVsbDspe2xldCBzPWlbMV07aWYoIXMuc3RhcnRzV2l0aCgiLiIpJiYhcy5zdGFydHNXaXRoKCIvIikpe2xldCBsPXMuc3RhcnRzV2l0aCgiQCIpP3Muc3BsaXQoIi8iKS5zbGljZSgwLDIpLmpvaW4oIi8iKTpzLnNwbGl0KCIvIilbMF07YS5wdXNoKGwpfX1sZXQgbz0vcmVxdWlyZVxzKlwoXHMqWyciXShbXiciXSspWyciXVxzKlwpL2c7Zm9yKDsoaT1vLmV4ZWMoZSkpIT09bnVsbDspe2xldCBzPWlbMV07aWYoIXMuc3RhcnRzV2l0aCgiLiIpJiYhcy5zdGFydHNXaXRoKCIvIikpe2xldCBsPXMuc3RhcnRzV2l0aCgiQCIpP3Muc3BsaXQoIi8iKS5zbGljZSgwLDIpLmpvaW4oIi8iKTpzLnNwbGl0KCIvIilbMF07YS5wdXNoKGwpfX1yZXR1cm5bLi4ubmV3IFNldChhKV19YXN5bmMgbG9hZFR5cGVzRm9yUGFja2FnZShlKXtpZighKCF0aGlzLm1vbmFjb0luc3RhbmNlfHwhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkmJiF0aGlzLmxvYWRlZExpYnMuaGFzKGUpJiYhdGhpcy5ub3RGb3VuZFBhY2thZ2VzLmhhcyhlKSl0cnl7bGV0IGE9YXdhaXQgdGhpcy50cnlMb2FkUGFja2FnZVR5cGVzKGUpO2F8fChhPWF3YWl0IHRoaXMudHJ5TG9hZEF0VHlwZXNQYWNrYWdlKGUpKSxhP3RoaXMubG9hZGVkTGlicy5hZGQoZSk6dGhpcy5ub3RGb3VuZFBhY2thZ2VzLmFkZChlKX1jYXRjaChhKXtjb25zb2xlLndhcm4oYEZhaWxlZCB0byBsb2FkIHR5cGVzIGZvciAke2V9OmAsYSl9fWFzeW5jIHRyeUxvYWRQYWNrYWdlVHlwZXMoZSl7bGV0IGE9dGhpcy50c0FwaTtpZighdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudHx8IWEpcmV0dXJuITE7bGV0IHI9YC9ub2RlX21vZHVsZXMvJHtlfWA7dHJ5e2xldCBpPWAke3J9L3BhY2thZ2UuanNvbmA7aWYoYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoaSkpe2xldCBsPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUoaSksZj1KU09OLnBhcnNlKGwpO2lmKGEudHlwZXNjcmlwdERlZmF1bHRzLmFkZEV4dHJhTGliKGwsYGZpbGU6Ly8ke2l9YCksZi50eXBlc3x8Zi50eXBpbmdzKXJldHVybiBhd2FpdCB0aGlzLmxvYWRBbGxEdHNGaWxlc0Zyb21QYWNrYWdlKHIpLCEwfWxldCBzPVtgJHtyfS9pbmRleC5kLnRzYCxgJHtyfS9kaXN0L2luZGV4LmQudHNgLGAke3J9L2xpYi9pbmRleC5kLnRzYF07Zm9yKGxldCBsIG9mIHMpaWYoYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMobCkpcmV0dXJuIGF3YWl0IHRoaXMubG9hZEFsbER0c0ZpbGVzRnJvbVBhY2thZ2UociksITA7cmV0dXJuITF9Y2F0Y2goaSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIHBhY2thZ2UgdHlwZXMgZm9yICR7ZX06YCxpKSwhMX19YXN5bmMgbG9hZEFsbER0c0ZpbGVzRnJvbVBhY2thZ2UoZSl7bGV0IGE9dGhpcy50c0FwaTshdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudHx8IWF8fGF3YWl0IHRoaXMubG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShlKX1hc3luYyBsb2FkRHRzRmlsZXNGcm9tRGlyZWN0b3J5KGUpe2xldCBhPXRoaXMudHNBcGk7aWYoISghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudHx8IWEpKXRyeXtsZXQgcj1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWREaXIoZSk7Zm9yKGxldCBpIG9mIHIpe2xldCBvPWU9PT0iLyI/YC8ke2kubmFtZX1gOmAke2V9LyR7aS5uYW1lfWA7aWYoaS5uYW1lIT09Im5vZGVfbW9kdWxlcyIpe2lmKGkudHlwZT09PSJkaXJlY3RvcnkiKWF3YWl0IHRoaXMubG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShvKTtlbHNlIGlmKGkudHlwZT09PSJmaWxlIiYmaS5uYW1lLmVuZHNXaXRoKCIuZC50cyIpKXRyeXtsZXQgcz1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKG8pO2EudHlwZXNjcmlwdERlZmF1bHRzLmFkZEV4dHJhTGliKHMsYGZpbGU6Ly8ke299YCl9Y2F0Y2h7fX19fWNhdGNoe319YXN5bmMgdHJ5TG9hZEF0VHlwZXNQYWNrYWdlKGUpe2lmKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXJldHVybiExO2xldCByPWAvbm9kZV9tb2R1bGVzLyR7ZS5zdGFydHNXaXRoKCJAIik/YEB0eXBlcy8ke2Uuc2xpY2UoMSkucmVwbGFjZSgiLyIsIl9fIil9YDpgQHR5cGVzLyR7ZX1gfWA7dHJ5e2xldCBpPWAke3J9L2luZGV4LmQudHNgO3JldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LmV4aXN0cyhpKT8oYXdhaXQgdGhpcy5sb2FkQWxsRHRzRmlsZXNGcm9tUGFja2FnZShyKSwhMCk6ITF9Y2F0Y2h7cmV0dXJuITF9fWFzeW5jIHByb2Nlc3NDb250ZW50Q2hhbmdlKGUpe2xldCBhPXRoaXMucGFyc2VJbXBvcnRzKGUpO2ZvcihsZXQgciBvZiBhKXRoaXMubG9hZGVkTGlicy5oYXMocil8fGF3YWl0IHRoaXMubG9hZFR5cGVzRm9yUGFja2FnZShyKX1hc3luYyBzY2FuQW5kTG9hZE5ld1BhY2thZ2VUeXBlcygpe2lmKHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpe3RoaXMubm90Rm91bmRQYWNrYWdlcy5jbGVhcigpO3RyeXtpZighYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9ub2RlX21vZHVsZXMiKSlyZXR1cm47bGV0IGU9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKCIvbm9kZV9tb2R1bGVzIik7Zm9yKGxldCBhIG9mIGUpaWYoYS50eXBlPT09ImRpcmVjdG9yeSIpaWYoYS5uYW1lLnN0YXJ0c1dpdGgoIkAiKSl0cnl7bGV0IHI9YC9ub2RlX21vZHVsZXMvJHthLm5hbWV9YCxpPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcihyKTtmb3IobGV0IG8gb2YgaSlpZihvLnR5cGU9PT0iZGlyZWN0b3J5Iil7bGV0IHM9YCR7YS5uYW1lfS8ke28ubmFtZX1gO2F3YWl0IHRoaXMubG9hZFR5cGVzRm9yUGFja2FnZShzKX19Y2F0Y2h7fWVsc2UgYS5uYW1lLnN0YXJ0c1dpdGgoIi4iKXx8YXdhaXQgdGhpcy5sb2FkVHlwZXNGb3JQYWNrYWdlKGEubmFtZSl9Y2F0Y2goZSl7Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gc2NhbiBub2RlX21vZHVsZXM6IixlKX19fWFkZEZpbGVNb2RlbChlLGEpe2lmKCF0aGlzLm1vbmFjb0luc3RhbmNlKXJldHVybjt0aGlzLmZpbGVDYWNoZS5zZXQoZSxhKTtsZXQgcj10aGlzLm1vbmFjb0luc3RhbmNlLlVyaS5wYXJzZShgZmlsZTovLyR7ZX1gKSxpPXRoaXMubW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsKHIpO2lmKGkpaS5nZXRWYWx1ZSgpIT09YSYmaS5zZXRWYWx1ZShhKTtlbHNle2xldCBvPXRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aChlKTt0aGlzLm1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGVNb2RlbChhLG8scil9dGhpcy5hZGRGaWxlQXNFeHRyYUxpYihlLGEpfWFkZEZpbGVBc0V4dHJhTGliKGUsYSl7bGV0IHI9dGhpcy50c0FwaTtpZighcilyZXR1cm47bGV0IGk9dGhpcy5hZGRlZEV4dHJhTGlicy5nZXQoZSk7aSYmaS5kaXNwb3NlKCk7bGV0IG89YGZpbGU6Ly8ke2V9YCxzPXIudHlwZXNjcmlwdERlZmF1bHRzLmFkZEV4dHJhTGliKGEsbyk7aWYodGhpcy5hZGRlZEV4dHJhTGlicy5zZXQoZSxzKSxlLmVuZHNXaXRoKCIudHMiKSYmIWUuZW5kc1dpdGgoIi5kLnRzIikpe2xldCBsPWUucmVwbGFjZSgvXC50cyQvLCIuanMiKSxmPWBmaWxlOi8vJHtsfWAsYz1yLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihhLGYpO3RoaXMuYWRkZWRFeHRyYUxpYnMuc2V0KGwsYyksdGhpcy5maWxlQ2FjaGUuc2V0KGwsYSl9ZWxzZSBpZihlLmVuZHNXaXRoKCIudHN4Iikpe2xldCBsPWUucmVwbGFjZSgvXC50c3gkLywiLmpzeCIpLGY9YGZpbGU6Ly8ke2x9YCxjPXIudHlwZXNjcmlwdERlZmF1bHRzLmFkZEV4dHJhTGliKGEsZik7dGhpcy5hZGRlZEV4dHJhTGlicy5zZXQobCxjKSx0aGlzLmZpbGVDYWNoZS5zZXQobCxhKX19Z2V0RmlsZUNvbnRlbnQoZSl7cmV0dXJuIHRoaXMuZmlsZUNhY2hlLmdldChlKX1nZXRMYW5ndWFnZUZyb21QYXRoKGUpe3N3aXRjaChlLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCkpe2Nhc2UidHMiOmNhc2UidHN4IjpyZXR1cm4idHlwZXNjcmlwdCI7Y2FzZSJqcyI6Y2FzZSJqc3giOnJldHVybiJqYXZhc2NyaXB0IjtjYXNlImpzb24iOnJldHVybiJqc29uIjtkZWZhdWx0OnJldHVybiJwbGFpbnRleHQifX19O2ZlKCk7U3QoKTtCZSgpO3ZhciBzYz1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LGdhPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxWczE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLXdvcmtzcGFjZS1kaWZmLWVkaXRvciIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdLEUsQz1bXSx6PVtdO3ZhciBQPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgXz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOlN0cmluZ30pXSxmPVtEKHt0eXBlOlN0cmluZ30pXSxkPVtEKHt0eXBlOlN0cmluZ30pXSxiPVtEKHt0eXBlOlN0cmluZ30pXSx2PVtEKHt0eXBlOlN0cmluZ30pXSxFPVtEKHt0eXBlOlN0cmluZ30pXSxzYyh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im9yaWdpbmFsQ29udGVudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+Im9yaWdpbmFsQ29udGVudCJpbiAkLGdldDokPT4kLm9yaWdpbmFsQ29udGVudCxzZXQ6KCQsSCk9PnskLm9yaWdpbmFsQ29udGVudD1IfX0sbWV0YWRhdGE6X30scyxsKSxzYyh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1vZGlmaWVkQ29udGVudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+Im1vZGlmaWVkQ29udGVudCJpbiAkLGdldDokPT4kLm1vZGlmaWVkQ29udGVudCxzZXQ6KCQsSCk9PnskLm1vZGlmaWVkQ29udGVudD1IfX0sbWV0YWRhdGE6X30sYyx1KSxzYyh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im9yaWdpbmFsTGFiZWwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJvcmlnaW5hbExhYmVsImluICQsZ2V0OiQ9PiQub3JpZ2luYWxMYWJlbCxzZXQ6KCQsSCk9PnskLm9yaWdpbmFsTGFiZWw9SH19LG1ldGFkYXRhOl99LGgsZyksc2ModGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtb2RpZmllZExhYmVsIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4ibW9kaWZpZWRMYWJlbCJpbiAkLGdldDokPT4kLm1vZGlmaWVkTGFiZWwsc2V0OigkLEgpPT57JC5tb2RpZmllZExhYmVsPUh9fSxtZXRhZGF0YTpffSx4LG0pLHNjKHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGFuZ3VhZ2UiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJsYW5ndWFnZSJpbiAkLGdldDokPT4kLmxhbmd1YWdlLHNldDooJCxIKT0+eyQubGFuZ3VhZ2U9SH19LG1ldGFkYXRhOl99LHksdyksc2ModGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJmaWxlUGF0aCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+ImZpbGVQYXRoImluICQsZ2V0OiQ9PiQuZmlsZVBhdGgsc2V0OigkLEgpPT57JC5maWxlUGF0aD1IfX0sbWV0YWRhdGE6X30sQyx6KSxzYyhudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpffSxudWxsLGEpLFA9cj1lLnZhbHVlLF8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6X30pfXN0YXRpYyBkZW1vPSgpPT5NYAogICAgPGRlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yCiAgICAgIC5vcmlnaW5hbENvbnRlbnQ9JHtgZnVuY3Rpb24gaGVsbG8oKSB7CiAgY29uc29sZS5sb2coIkhlbGxvIik7Cn1gfQogICAgICAubW9kaWZpZWRDb250ZW50PSR7YGZ1bmN0aW9uIGhlbGxvKCkgewogIGNvbnNvbGUubG9nKCJIZWxsbyBXb3JsZCEiKTsKICByZXR1cm4gdHJ1ZTsKfWB9CiAgICAgIC5sYW5ndWFnZT0keyJ0eXBlc2NyaXB0In0KICAgICAgLmZpbGVQYXRoPSR7Ii9kZW1vL2V4YW1wbGUudHMifQogICAgPjwvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3I+CiAgYDtzdGF0aWMgZGVtb0dyb3VwPSJXb3Jrc3BhY2UiO2RpZmZFZGl0b3JEZWZlcnJlZD1BdC5zbWFydHByb21pc2UuZGVmZXIoKTsjZT1nYSh0aGlzLHMsIiIpO2dldCBvcmlnaW5hbENvbnRlbnQoKXtyZXR1cm4gdGhpcy4jZX1zZXQgb3JpZ2luYWxDb250ZW50KF8pe3RoaXMuI2U9X30jdD0oZ2EodGhpcyxsKSxnYSh0aGlzLGMsIiIpKTtnZXQgbW9kaWZpZWRDb250ZW50KCl7cmV0dXJuIHRoaXMuI3R9c2V0IG1vZGlmaWVkQ29udGVudChfKXt0aGlzLiN0PV99I2E9KGdhKHRoaXMsdSksZ2EodGhpcyxoLCJEaXNrIFZlcnNpb24iKSk7Z2V0IG9yaWdpbmFsTGFiZWwoKXtyZXR1cm4gdGhpcy4jYX1zZXQgb3JpZ2luYWxMYWJlbChfKXt0aGlzLiNhPV99I3I9KGdhKHRoaXMsZyksZ2EodGhpcyx4LCJMb2NhbCBWZXJzaW9uIikpO2dldCBtb2RpZmllZExhYmVsKCl7cmV0dXJuIHRoaXMuI3J9c2V0IG1vZGlmaWVkTGFiZWwoXyl7dGhpcy4jcj1ffSNpPShnYSh0aGlzLG0pLGdhKHRoaXMseSwidHlwZXNjcmlwdCIpKTtnZXQgbGFuZ3VhZ2UoKXtyZXR1cm4gdGhpcy4jaX1zZXQgbGFuZ3VhZ2UoXyl7dGhpcy4jaT1ffSNvPShnYSh0aGlzLHcpLGdhKHRoaXMsQywiIikpO2dldCBmaWxlUGF0aCgpe3JldHVybiB0aGlzLiNvfXNldCBmaWxlUGF0aChfKXt0aGlzLiNvPV99ZGlmZkVkaXRvcj0oZ2EodGhpcyx6KSxudWxsKTttb25hY29UaGVtZVN1YnNjcmlwdGlvbj1udWxsO29yaWdpbmFsTW9kZWw9bnVsbDttb2RpZmllZE1vZGVsPW51bGw7Y29uc3RydWN0b3IoKXtzdXBlcigpLEMyLnNldHVwRG9tVG9vbHMoKX1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZGlmZi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGlmZi10b29sYmFyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5kaWZmLWluZm8gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaWZmLWZpbGVuYW1lIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaWZmLWxhYmVscyB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaWZmLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmRpZmYtY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5uYXYtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAxNnB4OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtsZXQgXz10aGlzLmZpbGVQYXRoLnNwbGl0KCIvIikucG9wKCl8fCJmaWxlIjtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0iZGlmZi13cmFwcGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWZmLXRvb2xiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlmZi1pbmZvIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpZmYtZmlsZW5hbWUiPiR7X308L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaWZmLWxhYmVscyI+JHt0aGlzLm9yaWdpbmFsTGFiZWx9IOKGlCAke3RoaXMubW9kaWZpZWRMYWJlbH08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtYWN0aW9ucyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdi1idXR0b25zIj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9QcmV2aW91c0RpZmZ9CiAgICAgICAgICAgICAgPlByZXZpb3VzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9OZXh0RGlmZn0KICAgICAgICAgICAgICA+TmV4dDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tYnV0dG9ucyI+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJoaWdobGlnaHRlZCIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuYWNjZXB0TG9jYWx9CiAgICAgICAgICAgICAgPlVzZSBMb2NhbDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5hY2NlcHREaXNrfQogICAgICAgICAgICAgID5Vc2UgRGlzazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jbG9zZX0KICAgICAgICAgICAgICA+Q2xvc2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtY29udGFpbmVyIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZCgpe2F3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZChuZXcgTWFwKSxhd2FpdCB0aGlzLmluaXREaWZmRWRpdG9yKCl9YXN5bmMgaW5pdERpZmZFZGl0b3IoKXtsZXQgXz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kaWZmLWNvbnRhaW5lciIpO2lmKCFfKXJldHVybjtsZXQgJD1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tb25hY28tZWRpdG9yQCR7WFV9YCxIPXdpbmRvdy5tb25hY287SHx8KGF3YWl0IG5ldyBQcm9taXNlKEY9PntsZXQgYWU9c2V0SW50ZXJ2YWwoKCk9Pnt3aW5kb3cubW9uYWNvJiYoY2xlYXJJbnRlcnZhbChhZSksRigpKX0sMTAwKX0pLEg9d2luZG93Lm1vbmFjbyk7bGV0IEw9YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2UsTj1MLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW4/InZzIjoidnMtZGFyayIsUz1EYXRlLm5vdygpLFQ9SC5VcmkucGFyc2UoYGRpZmY6Ly9vcmlnaW5hbC8ke1N9JHt0aGlzLmZpbGVQYXRofWApLFI9SC5VcmkucGFyc2UoYGRpZmY6Ly9tb2RpZmllZC8ke1N9JHt0aGlzLmZpbGVQYXRofWApO3RoaXMub3JpZ2luYWxNb2RlbD1ILmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLm9yaWdpbmFsQ29udGVudCx0aGlzLmxhbmd1YWdlLFQpLHRoaXMubW9kaWZpZWRNb2RlbD1ILmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLm1vZGlmaWVkQ29udGVudCx0aGlzLmxhbmd1YWdlLFIpLHRoaXMuZGlmZkVkaXRvcj1ILmVkaXRvci5jcmVhdGVEaWZmRWRpdG9yKF8se2F1dG9tYXRpY0xheW91dDohMCxyZWFkT25seTohMSxvcmlnaW5hbEVkaXRhYmxlOiExLHJlbmRlclNpZGVCeVNpZGU6ITAsaWdub3JlVHJpbVdoaXRlc3BhY2U6ITEsZm9udFNpemU6MTQsbWluaW1hcDp7ZW5hYmxlZDohMX19KSxILmVkaXRvci5zZXRUaGVtZShOKSx0aGlzLmRpZmZFZGl0b3Iuc2V0TW9kZWwoe29yaWdpbmFsOnRoaXMub3JpZ2luYWxNb2RlbCxtb2RpZmllZDp0aGlzLm1vZGlmaWVkTW9kZWx9KSx0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uPUwudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoRj0+e2xldCBhZT1GPyJ2cyI6InZzLWRhcmsiO0guZWRpdG9yLnNldFRoZW1lKGFlKX0pO2xldCBBPSJtb25hY28tZGlmZi1lZGl0b3ItY3NzIjtpZighdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZChBKSl7bGV0IGFlPWF3YWl0KGF3YWl0IGZldGNoKGAkeyR9L21pbi92cy9lZGl0b3IvZWRpdG9yLm1haW4uY3NzYCkpLnRleHQoKSxWPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Vi5pZD1BLFYudGV4dENvbnRlbnQ9YWUsdGhpcy5zaGFkb3dSb290Py5hcHBlbmQoVil9c2V0VGltZW91dCgoKT0+e3RyeXt0aGlzLmRpZmZFZGl0b3I/LnJldmVhbEZpcnN0RGlmZigpfWNhdGNoe319LDEwMCksdGhpcy5kaWZmRWRpdG9yRGVmZXJyZWQucmVzb2x2ZSh0aGlzLmRpZmZFZGl0b3IpfWdvVG9OZXh0RGlmZigpe3RyeXt0aGlzLmRpZmZFZGl0b3I/LmdvVG9EaWZmKCJuZXh0Iil9Y2F0Y2h7fX1nb1RvUHJldmlvdXNEaWZmKCl7dHJ5e3RoaXMuZGlmZkVkaXRvcj8uZ29Ub0RpZmYoInByZXZpb3VzIil9Y2F0Y2h7fX1hY2NlcHRMb2NhbCgpe2xldCBfPXRoaXMuZGlmZkVkaXRvcj8uZ2V0TW9kaWZpZWRFZGl0b3IoKS5nZXRWYWx1ZSgpfHx0aGlzLm1vZGlmaWVkQ29udGVudDt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkaWZmLXJlc29sdmVkIix7ZGV0YWlsOnthY3Rpb246InVzZS1sb2NhbCIsY29udGVudDpffSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWFjY2VwdERpc2soKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkaWZmLXJlc29sdmVkIix7ZGV0YWlsOnthY3Rpb246InVzZS1kaXNrIixjb250ZW50OnRoaXMub3JpZ2luYWxDb250ZW50fSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWNsb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGlmZi1jbG9zZWQiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uJiYodGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb249bnVsbCksdGhpcy5vcmlnaW5hbE1vZGVsJiYodGhpcy5vcmlnaW5hbE1vZGVsLmRpc3Bvc2UoKSx0aGlzLm9yaWdpbmFsTW9kZWw9bnVsbCksdGhpcy5tb2RpZmllZE1vZGVsJiYodGhpcy5tb2RpZmllZE1vZGVsLmRpc3Bvc2UoKSx0aGlzLm1vZGlmaWVkTW9kZWw9bnVsbCksdGhpcy5kaWZmRWRpdG9yJiYodGhpcy5kaWZmRWRpdG9yLmRpc3Bvc2UoKSx0aGlzLmRpZmZFZGl0b3I9bnVsbCl9c3RhdGlje2dhKHIsYSl9fTtyZXR1cm4gUD1yfSkoKTtmZSgpO1N0KCk7QmUoKTttaigpO1NJKCk7U0koKTtGdCgpO2dqKCk7dmFyIG0xPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sZHQ9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LFVzMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtd29ya3NwYWNlIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W10sSCxMPVtdLGs9W10sTixTPVtdLFQ9W10sUixBPVtdLEY9W10sYWUsVj1bXSxTZT1bXSx6ZSxXPVtdLE5lPVtdLFJlLFg9W10sST1bXSxPLEc9W10saj1bXSxzZSxrZT1bXSxEZT1bXSxPZSxVPVtdLEI9W10sb2UsdmU9W10seWU9W10sJGUsbmU9W10scmU9W10sZ2UsRWU9W10scnQ9W10sdWUsWj1bXSxKPVtdLGRlLEFlPVtdLEhlPVtdLE10LGl0PVtdLHp0PVtdO3ZhciBxdD1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IFE9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpPYmplY3R9KV0sZj1bRCh7YXR0cmlidXRlOiExfSldLGQ9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxiPVtEKHt0eXBlOkJvb2xlYW59KV0sdj1bRCh7dHlwZTpOdW1iZXJ9KV0sRT1bRCh7dHlwZTpOdW1iZXJ9KV0sUD1bbGUoKV0sSD1bbGUoKV0sTj1bbGUoKV0sUj1bbGUoKV0sYWU9W2xlKCldLHplPVtsZSgpXSxSZT1bbGUoKV0sTz1bbGUoKV0sc2U9W2xlKCldLE9lPVtsZSgpXSxvZT1bbGUoKV0sJGU9W2xlKCldLGdlPVtsZSgpXSx1ZT1bbGUoKV0sZGU9W2xlKCldLE10PVtsZSgpXSxtMSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImV4ZWN1dGlvbkVudmlyb25tZW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpLPT4iZXhlY3V0aW9uRW52aXJvbm1lbnQiaW4gSyxnZXQ6Sz0+Sy5leGVjdXRpb25FbnZpcm9ubWVudCxzZXQ6KEssYmUpPT57Sy5leGVjdXRpb25FbnZpcm9ubWVudD1iZX19LG1ldGFkYXRhOlF9LHMsbCksbTEodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpbml0aWFsaXphdGlvblByb21pc2UiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOks9PiJpbml0aWFsaXphdGlvblByb21pc2UiaW4gSyxnZXQ6Sz0+Sy5pbml0aWFsaXphdGlvblByb21pc2Usc2V0OihLLGJlKT0+e0suaW5pdGlhbGl6YXRpb25Qcm9taXNlPWJlfX0sbWV0YWRhdGE6UX0sYyx1KSxtMSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dGaWxlVHJlZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sz0+InNob3dGaWxlVHJlZSJpbiBLLGdldDpLPT5LLnNob3dGaWxlVHJlZSxzZXQ6KEssYmUpPT57Sy5zaG93RmlsZVRyZWU9YmV9fSxtZXRhZGF0YTpRfSxoLGcpLG0xKHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hvd1Rlcm1pbmFsIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpLPT4ic2hvd1Rlcm1pbmFsImluIEssZ2V0Oks9Pksuc2hvd1Rlcm1pbmFsLHNldDooSyxiZSk9PntLLnNob3dUZXJtaW5hbD1iZX19LG1ldGFkYXRhOlF9LHgsbSksbTEodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJmaWxlVHJlZVdpZHRoIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpLPT4iZmlsZVRyZWVXaWR0aCJpbiBLLGdldDpLPT5LLmZpbGVUcmVlV2lkdGgsc2V0OihLLGJlKT0+e0suZmlsZVRyZWVXaWR0aD1iZX19LG1ldGFkYXRhOlF9LHksdyksbTEodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0ZXJtaW5hbEhlaWdodCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sz0+InRlcm1pbmFsSGVpZ2h0ImluIEssZ2V0Oks9PksudGVybWluYWxIZWlnaHQsc2V0OihLLGJlKT0+e0sudGVybWluYWxIZWlnaHQ9YmV9fSxtZXRhZGF0YTpRfSxDLHopLG0xKHRoaXMsbnVsbCxQLHtraW5kOiJhY2Nlc3NvciIsbmFtZToib3BlbkZpbGVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpLPT4ib3BlbkZpbGVzImluIEssZ2V0Oks9Pksub3BlbkZpbGVzLHNldDooSyxiZSk9PntLLm9wZW5GaWxlcz1iZX19LG1ldGFkYXRhOlF9LF8sJCksbTEodGhpcyxudWxsLEgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhY3RpdmVGaWxlUGF0aCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sz0+ImFjdGl2ZUZpbGVQYXRoImluIEssZ2V0Oks9PksuYWN0aXZlRmlsZVBhdGgsc2V0OihLLGJlKT0+e0suYWN0aXZlRmlsZVBhdGg9YmV9fSxtZXRhZGF0YTpRfSxMLGspLG0xKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNUZXJtaW5hbENvbGxhcHNlZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sz0+ImlzVGVybWluYWxDb2xsYXBzZWQiaW4gSyxnZXQ6Sz0+Sy5pc1Rlcm1pbmFsQ29sbGFwc2VkLHNldDooSyxiZSk9PntLLmlzVGVybWluYWxDb2xsYXBzZWQ9YmV9fSxtZXRhZGF0YTpRfSxTLFQpLG0xKHRoaXMsbnVsbCxSLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNGaWxlVHJlZUNvbGxhcHNlZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sz0+ImlzRmlsZVRyZWVDb2xsYXBzZWQiaW4gSyxnZXQ6Sz0+Sy5pc0ZpbGVUcmVlQ29sbGFwc2VkLHNldDooSyxiZSk9PntLLmlzRmlsZVRyZWVDb2xsYXBzZWQ9YmV9fSxtZXRhZGF0YTpRfSxBLEYpLG0xKHRoaXMsbnVsbCxhZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzSW5pdGlhbGl6aW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpLPT4iaXNJbml0aWFsaXppbmciaW4gSyxnZXQ6Sz0+Sy5pc0luaXRpYWxpemluZyxzZXQ6KEssYmUpPT57Sy5pc0luaXRpYWxpemluZz1iZX19LG1ldGFkYXRhOlF9LFYsU2UpLG0xKHRoaXMsbnVsbCx6ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFjdGl2ZUJvdHRvbVBhbmVsIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpLPT4iYWN0aXZlQm90dG9tUGFuZWwiaW4gSyxnZXQ6Sz0+Sy5hY3RpdmVCb3R0b21QYW5lbCxzZXQ6KEssYmUpPT57Sy5hY3RpdmVCb3R0b21QYW5lbD1iZX19LG1ldGFkYXRhOlF9LFcsTmUpLG0xKHRoaXMsbnVsbCxSZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRpYWdub3N0aWNNYXJrZXJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpLPT4iZGlhZ25vc3RpY01hcmtlcnMiaW4gSyxnZXQ6Sz0+Sy5kaWFnbm9zdGljTWFya2VycyxzZXQ6KEssYmUpPT57Sy5kaWFnbm9zdGljTWFya2Vycz1iZX19LG1ldGFkYXRhOlF9LFgsSSksbTEodGhpcyxudWxsLE8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhdXRvU2F2ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sz0+ImF1dG9TYXZlImluIEssZ2V0Oks9PksuYXV0b1NhdmUsc2V0OihLLGJlKT0+e0suYXV0b1NhdmU9YmV9fSxtZXRhZGF0YTpRfSxHLGopLG0xKHRoaXMsbnVsbCxzZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImluaXRDb21tYW5kIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpLPT4iaW5pdENvbW1hbmQiaW4gSyxnZXQ6Sz0+Sy5pbml0Q29tbWFuZCxzZXQ6KEssYmUpPT57Sy5pbml0Q29tbWFuZD1iZX19LG1ldGFkYXRhOlF9LGtlLERlKSxtMSh0aGlzLG51bGwsT2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpbml0T3V0cHV0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpLPT4iaW5pdE91dHB1dCJpbiBLLGdldDpLPT5LLmluaXRPdXRwdXQsc2V0OihLLGJlKT0+e0suaW5pdE91dHB1dD1iZX19LG1ldGFkYXRhOlF9LFUsQiksbTEodGhpcyxudWxsLG9lLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY3VycmVudEZpbGVUcmVlV2lkdGgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOks9PiJjdXJyZW50RmlsZVRyZWVXaWR0aCJpbiBLLGdldDpLPT5LLmN1cnJlbnRGaWxlVHJlZVdpZHRoLHNldDooSyxiZSk9PntLLmN1cnJlbnRGaWxlVHJlZVdpZHRoPWJlfX0sbWV0YWRhdGE6UX0sdmUseWUpLG0xKHRoaXMsbnVsbCwkZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImN1cnJlbnRUZXJtaW5hbEhlaWdodCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Sz0+ImN1cnJlbnRUZXJtaW5hbEhlaWdodCJpbiBLLGdldDpLPT5LLmN1cnJlbnRUZXJtaW5hbEhlaWdodCxzZXQ6KEssYmUpPT57Sy5jdXJyZW50VGVybWluYWxIZWlnaHQ9YmV9fSxtZXRhZGF0YTpRfSxuZSxyZSksbTEodGhpcyxudWxsLGdlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNEcmFnZ2luZ0ZpbGVUcmVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpLPT4iaXNEcmFnZ2luZ0ZpbGVUcmVlImluIEssZ2V0Oks9PksuaXNEcmFnZ2luZ0ZpbGVUcmVlLHNldDooSyxiZSk9PntLLmlzRHJhZ2dpbmdGaWxlVHJlZT1iZX19LG1ldGFkYXRhOlF9LEVlLHJ0KSxtMSh0aGlzLG51bGwsdWUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0RyYWdnaW5nVGVybWluYWwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOks9PiJpc0RyYWdnaW5nVGVybWluYWwiaW4gSyxnZXQ6Sz0+Sy5pc0RyYWdnaW5nVGVybWluYWwsc2V0OihLLGJlKT0+e0suaXNEcmFnZ2luZ1Rlcm1pbmFsPWJlfX0sbWV0YWRhdGE6UX0sWixKKSxtMSh0aGlzLG51bGwsZGUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaG93RGlmZlZpZXciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOks9PiJzaG93RGlmZlZpZXciaW4gSyxnZXQ6Sz0+Sy5zaG93RGlmZlZpZXcsc2V0OihLLGJlKT0+e0suc2hvd0RpZmZWaWV3PWJlfX0sbWV0YWRhdGE6UX0sQWUsSGUpLG0xKHRoaXMsbnVsbCxNdCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRpZmZWaWV3Q29uZmlnIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpLPT4iZGlmZlZpZXdDb25maWciaW4gSyxnZXQ6Sz0+Sy5kaWZmVmlld0NvbmZpZyxzZXQ6KEssYmUpPT57Sy5kaWZmVmlld0NvbmZpZz1iZX19LG1ldGFkYXRhOlF9LGl0LHp0KSxtMShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpRfSxudWxsLGEpLHF0PXI9ZS52YWx1ZSxRJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlF9KX1zdGF0aWMgZGVtbz0oKT0+e2xldCBRPW5ldyBtNSxLPShhc3luYygpPT57YXdhaXQgUS5pbml0KCk7bGV0IG50PXsicGFja2FnZS5qc29uIjp7ZmlsZTp7Y29udGVudHM6SlNPTi5zdHJpbmdpZnkoe25hbWU6ImRlbW8tcHJvamVjdCIsdmVyc2lvbjoiMS4wLjAiLHR5cGU6Im1vZHVsZSIsc2NyaXB0czp7YnVpbGQ6InRzYyIsZGV2OiJ0c2MgLS13YXRjaCJ9LGRlcGVuZGVuY2llczp7IkBwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSI6Il40LjIuMyJ9LGRldkRlcGVuZGVuY2llczp7IkB0eXBlcy9ub2RlIjoiXjIyLjAuMCIsdHlwZXNjcmlwdDoiXjUuMC4wIn19LG51bGwsMil9fSwibnBtZXh0cmEuanNvbiI6e2ZpbGU6e2NvbnRlbnRzOkpTT04uc3RyaW5naWZ5KHtkZWVzRWRpdG9yV29ya3NwYWNlOntvbkluaXQ6InBucG0gaW5zdGFsbCJ9fSxudWxsLDIpfX0sInRzY29uZmlnLmpzb24iOntmaWxlOntjb250ZW50czpKU09OLnN0cmluZ2lmeSh7Y29tcGlsZXJPcHRpb25zOnt0YXJnZXQ6IkVTMjAyMiIsbW9kdWxlOiJOb2RlTmV4dCIsbW9kdWxlUmVzb2x1dGlvbjoiTm9kZU5leHQiLHN0cmljdDohMCxvdXREaXI6Ii4vZGlzdCIscm9vdERpcjoiLi9zcmMiLGRlY2xhcmF0aW9uOiEwfSxpbmNsdWRlOlsic3JjLyoqLyoiXX0sbnVsbCwyKX19LHNyYzp7ZGlyZWN0b3J5OnsiaW5kZXgudHMiOntmaWxlOntjb250ZW50czpgLy8gTWFpbiBlbnRyeSBwb2ludAppbXBvcnQgeyBncmVldCwgZm9ybWF0TmFtZSB9IGZyb20gJy4vdXRpbHMuanMnOwoKY29uc3QgbmFtZSA9IGZvcm1hdE5hbWUoJ1dvcmxkJyk7CmNvbnNvbGUubG9nKGdyZWV0KG5hbWUpKTsKCi8vIEV4YW1wbGUgYXN5bmMgZnVuY3Rpb24KYXN5bmMgZnVuY3Rpb24gbWFpbigpIHsKICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoJ0hlbGxvIGZyb20gYXN5bmMhJyk7CiAgY29uc29sZS5sb2cocmVzdWx0KTsKfQoKbWFpbigpOwpgfX0sInV0aWxzLnRzIjp7ZmlsZTp7Y29udGVudHM6YC8vIFV0aWxpdHkgZnVuY3Rpb25zCgpleHBvcnQgaW50ZXJmYWNlIElVc2VyIHsKICBmaXJzdE5hbWU6IHN0cmluZzsKICBsYXN0TmFtZTogc3RyaW5nOwp9CgpleHBvcnQgZnVuY3Rpb24gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICByZXR1cm4gXGBIZWxsbywgXCR7bmFtZX0hXGA7Cn0KCmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgcmV0dXJuIG5hbWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7Cn0KCmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVc2VyKGZpcnN0TmFtZTogc3RyaW5nLCBsYXN0TmFtZTogc3RyaW5nKTogSVVzZXIgewogIHJldHVybiB7IGZpcnN0TmFtZSwgbGFzdE5hbWUgfTsKfQpgfX0sImltcG9ydHRlc3QudHMiOntmaWxlOntjb250ZW50czpgLy8gVGVzdCBucG0gcGFja2FnZSBpbXBvcnRzCmltcG9ydCAqIGFzIHNtYXJ0cHJvbWlzZSBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydHByb21pc2UnOwoKLy8gVGhpcyBzaG91bGQgaGF2ZSBJbnRlbGxpU2Vuc2Ugc2hvd2luZyBkZWZlcigpIG1ldGhvZApjb25zdCBkZWZlcnJlZCA9IHNtYXJ0cHJvbWlzZS5kZWZlcjxzdHJpbmc+KCk7CgovLyBUZXN0IHVzaW5nIHRoZSBkZWZlcnJlZCBwcm9taXNlCmFzeW5jIGZ1bmN0aW9uIHRlc3RTbWFydFByb21pc2UoKSB7CiAgc2V0VGltZW91dCgoKSA9PiB7CiAgICBkZWZlcnJlZC5yZXNvbHZlKCdIZWxsbyBmcm9tIHNtYXJ0cHJvbWlzZSEnKTsKICB9LCAxMDApOwoKICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZWZlcnJlZC5wcm9taXNlOwogIGNvbnNvbGUubG9nKHJlc3VsdCk7Cn0KCnRlc3RTbWFydFByb21pc2UoKTsKYH19fX19O2F3YWl0IFEubW91bnQobnQpfSkoKSxiZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtiZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsiO2xldCBvdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLXdvcmtzcGFjZSIpO3JldHVybiBvdC5leGVjdXRpb25FbnZpcm9ubWVudD1RLG90LmluaXRpYWxpemF0aW9uUHJvbWlzZT1LLGJlLmFwcGVuZENoaWxkKG90KSxNYAogICAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgICAke2JlfQogICAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICBgfTtzdGF0aWMgZGVtb0dyb3VwPSJXb3Jrc3BhY2UiOyNlPWR0KHRoaXMscyxudWxsKTtnZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQoKXtyZXR1cm4gdGhpcy4jZX1zZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQoUSl7dGhpcy4jZT1RfSN0PShkdCh0aGlzLGwpLGR0KHRoaXMsYyxudWxsKSk7Z2V0IGluaXRpYWxpemF0aW9uUHJvbWlzZSgpe3JldHVybiB0aGlzLiN0fXNldCBpbml0aWFsaXphdGlvblByb21pc2UoUSl7dGhpcy4jdD1RfSNhPShkdCh0aGlzLHUpLGR0KHRoaXMsaCwhMCkpO2dldCBzaG93RmlsZVRyZWUoKXtyZXR1cm4gdGhpcy4jYX1zZXQgc2hvd0ZpbGVUcmVlKFEpe3RoaXMuI2E9UX0jcj0oZHQodGhpcyxnKSxkdCh0aGlzLHgsITApKTtnZXQgc2hvd1Rlcm1pbmFsKCl7cmV0dXJuIHRoaXMuI3J9c2V0IHNob3dUZXJtaW5hbChRKXt0aGlzLiNyPVF9I2k9KGR0KHRoaXMsbSksZHQodGhpcyx5LDI1MCkpO2dldCBmaWxlVHJlZVdpZHRoKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGZpbGVUcmVlV2lkdGgoUSl7dGhpcy4jaT1RfSNvPShkdCh0aGlzLHcpLGR0KHRoaXMsQywyMDApKTtnZXQgdGVybWluYWxIZWlnaHQoKXtyZXR1cm4gdGhpcy4jb31zZXQgdGVybWluYWxIZWlnaHQoUSl7dGhpcy4jbz1RfSNzPShkdCh0aGlzLHopLGR0KHRoaXMsXyxbXSkpO2dldCBvcGVuRmlsZXMoKXtyZXR1cm4gdGhpcy4jc31zZXQgb3BlbkZpbGVzKFEpe3RoaXMuI3M9UX0jbj0oZHQodGhpcywkKSxkdCh0aGlzLEwsIiIpKTtnZXQgYWN0aXZlRmlsZVBhdGgoKXtyZXR1cm4gdGhpcy4jbn1zZXQgYWN0aXZlRmlsZVBhdGgoUSl7dGhpcy4jbj1RfSNsPShkdCh0aGlzLGspLGR0KHRoaXMsUywhMSkpO2dldCBpc1Rlcm1pbmFsQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuI2x9c2V0IGlzVGVybWluYWxDb2xsYXBzZWQoUSl7dGhpcy4jbD1RfSNjPShkdCh0aGlzLFQpLGR0KHRoaXMsQSwhMSkpO2dldCBpc0ZpbGVUcmVlQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuI2N9c2V0IGlzRmlsZVRyZWVDb2xsYXBzZWQoUSl7dGhpcy4jYz1RfSNkPShkdCh0aGlzLEYpLGR0KHRoaXMsViwhMCkpO2dldCBpc0luaXRpYWxpemluZygpe3JldHVybiB0aGlzLiNkfXNldCBpc0luaXRpYWxpemluZyhRKXt0aGlzLiNkPVF9I2Y9KGR0KHRoaXMsU2UpLGR0KHRoaXMsVywidGVybWluYWwiKSk7Z2V0IGFjdGl2ZUJvdHRvbVBhbmVsKCl7cmV0dXJuIHRoaXMuI2Z9c2V0IGFjdGl2ZUJvdHRvbVBhbmVsKFEpe3RoaXMuI2Y9UX0jdT0oZHQodGhpcyxOZSksZHQodGhpcyxYLFtdKSk7Z2V0IGRpYWdub3N0aWNNYXJrZXJzKCl7cmV0dXJuIHRoaXMuI3V9c2V0IGRpYWdub3N0aWNNYXJrZXJzKFEpe3RoaXMuI3U9UX1lZGl0b3JFbGVtZW50PShkdCh0aGlzLEkpLG51bGwpO2luaXRpYWxpemF0aW9uU3RhcnRlZD0hMTtpbnRlbGxpU2Vuc2VNYW5hZ2VyPW51bGw7aW50ZWxsaVNlbnNlSW5pdGlhbGl6ZWQ9ITE7bm9kZU1vZHVsZXNXYXRjaGVyPW51bGw7bm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQ9bnVsbDtpbnRlbGxpU2Vuc2VEZWJvdW5jZVRpbWVvdXQ9bnVsbDtvcGVuRmlsZVdhdGNoZXJzPW5ldyBNYXA7ZmlsZUNoYW5nZURlYm91bmNlPW5ldyBNYXA7YWN0aW9uYmFyRWxlbWVudD1udWxsOyNwPWR0KHRoaXMsRywhMSk7Z2V0IGF1dG9TYXZlKCl7cmV0dXJuIHRoaXMuI3B9c2V0IGF1dG9TYXZlKFEpe3RoaXMuI3A9UX1hdXRvU2F2ZUludGVydmFsPShkdCh0aGlzLGopLG51bGwpOyNoPWR0KHRoaXMsa2UsIiIpO2dldCBpbml0Q29tbWFuZCgpe3JldHVybiB0aGlzLiNofXNldCBpbml0Q29tbWFuZChRKXt0aGlzLiNoPVF9I209KGR0KHRoaXMsRGUpLGR0KHRoaXMsVSxbXSkpO2dldCBpbml0T3V0cHV0KCl7cmV0dXJuIHRoaXMuI219c2V0IGluaXRPdXRwdXQoUSl7dGhpcy4jbT1RfSNnPShkdCh0aGlzLEIpLGR0KHRoaXMsdmUsMjUwKSk7Z2V0IGN1cnJlbnRGaWxlVHJlZVdpZHRoKCl7cmV0dXJuIHRoaXMuI2d9c2V0IGN1cnJlbnRGaWxlVHJlZVdpZHRoKFEpe3RoaXMuI2c9UX0jeD0oZHQodGhpcyx5ZSksZHQodGhpcyxuZSwyMDApKTtnZXQgY3VycmVudFRlcm1pbmFsSGVpZ2h0KCl7cmV0dXJuIHRoaXMuI3h9c2V0IGN1cnJlbnRUZXJtaW5hbEhlaWdodChRKXt0aGlzLiN4PVF9I2I9KGR0KHRoaXMscmUpLGR0KHRoaXMsRWUsITEpKTtnZXQgaXNEcmFnZ2luZ0ZpbGVUcmVlKCl7cmV0dXJuIHRoaXMuI2J9c2V0IGlzRHJhZ2dpbmdGaWxlVHJlZShRKXt0aGlzLiNiPVF9I3Y9KGR0KHRoaXMscnQpLGR0KHRoaXMsWiwhMSkpO2dldCBpc0RyYWdnaW5nVGVybWluYWwoKXtyZXR1cm4gdGhpcy4jdn1zZXQgaXNEcmFnZ2luZ1Rlcm1pbmFsKFEpe3RoaXMuI3Y9UX0jeT0oZHQodGhpcyxKKSxkdCh0aGlzLEFlLCExKSk7Z2V0IHNob3dEaWZmVmlldygpe3JldHVybiB0aGlzLiN5fXNldCBzaG93RGlmZlZpZXcoUSl7dGhpcy4jeT1RfSN3PShkdCh0aGlzLEhlKSxkdCh0aGlzLGl0LG51bGwpKTtnZXQgZGlmZlZpZXdDb25maWcoKXtyZXR1cm4gdGhpcy4jd31zZXQgZGlmZlZpZXdDb25maWcoUSl7dGhpcy4jdz1RfWtleWRvd25IYW5kbGVyPShkdCh0aGlzLHp0KSxRPT57KFEubWV0YUtleXx8US5jdHJsS2V5KSYmUS5rZXk9PT0icyImJiFRLnNoaWZ0S2V5JiYoUS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2F2ZUFjdGl2ZUZpbGUoKSksKFEubWV0YUtleXx8US5jdHJsS2V5KSYmUS5zaGlmdEtleSYmUS5rZXkudG9Mb3dlckNhc2UoKT09PSJzIiYmKFEucHJldmVudERlZmF1bHQoKSx0aGlzLnNhdmVBbGxGaWxlcygpKX0pO2hhbmRsZUZpbGVUcmVlTW91c2VEb3duPVE9PntRLnByZXZlbnREZWZhdWx0KCksdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWU9ITAsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCl9O2hhbmRsZUZpbGVUcmVlTW91c2VNb3ZlPVE9PntpZighdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUpcmV0dXJuO2xldCBLPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYmU9US5jbGllbnRYLUsubGVmdCxvdD0xNTAsbnQ9Sy53aWR0aCouNSxuMT1NYXRoLm1heChvdCxNYXRoLm1pbihudCxiZSkpO3RoaXMuY3VycmVudEZpbGVUcmVlV2lkdGg9bjF9O2hhbmRsZUZpbGVUcmVlTW91c2VVcD0oKT0+e3RoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlPSExLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlVXApLHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpfTtoYW5kbGVUZXJtaW5hbE1vdXNlRG93bj1RPT57US5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaXNEcmFnZ2luZ1Rlcm1pbmFsPSEwLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlTW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlVXApfTtoYW5kbGVUZXJtaW5hbE1vdXNlTW92ZT1RPT57aWYoIXRoaXMuaXNEcmFnZ2luZ1Rlcm1pbmFsKXJldHVybjtsZXQgSz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGJlPVEuY2xpZW50WS1LLnRvcCxvdD1LLmhlaWdodC1iZSxudD0xMDAsbjE9Sy5oZWlnaHQqLjcsdmE9TWF0aC5tYXgobnQsTWF0aC5taW4objEsb3QpKTt0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodD12YX07aGFuZGxlVGVybWluYWxNb3VzZVVwPSgpPT57dGhpcy5pc0RyYWdnaW5nVGVybWluYWw9ITEsZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VNb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VVcCksd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSl9O3N0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAud29ya3NwYWNlLW91dGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAud29ya3NwYWNlLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmVkaXRvci1hcmVhIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmZpbGV0cmVlLXBhbmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmZpbGV0cmVlLXBhbmVsLmNvbGxhcHNlZCB7CiAgICAgICAgd2lkdGg6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmVkaXRvci1wYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXBhbmVsLmNvbGxhcHNlZCB7CiAgICAgICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5wYW5lbC1oZWFkZXIgewogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwiaHNsKDAgMCUgOCUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLWhlYWRlci10aXRsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICB9CgogICAgICAucGFuZWwtaGVhZGVyLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLnBhbmVsLWFjdGlvbiB7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wYW5lbC1hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwiaHNsKDAgMCUgMTglKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCJoc2woMCAwJSA4MCUpIil9OwogICAgICB9CgogICAgICAudGFicy1iYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NiUpIiwiaHNsKDAgMCUgOCUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIG1heC13aWR0aDogMjAwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTQlKSIsImhzbCgwIDAlIDEwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5MiUpIiwiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCJoc2woMjEwIDEwMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1uYW1lIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZSB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciAudGFiLWNsb3NlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAudGFiLWNsb3NlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDI1JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbW9kaWZpZWQgewogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzLCBiYWNrZ3JvdW5kIDAuMTVzOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsImhzbCgwIDAlIDEwMCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMzJweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLnByb2JsZW1zLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDMycHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSA5JSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAwOwogICAgICB9CgogICAgICAucGFuZWwtdGFiIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNTUlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWI6aG92ZXIgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsImhzbCgwIDAlIDc1JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICB9CgogICAgICAucGFuZWwtdGFiLmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCJoc2woMjEwIDEwMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBtaW4td2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCJoc2woMCA3MCUgNDUlKSIpfTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWItYmFkZ2Uud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCg0MCA3MCUgNTAlKSIsImhzbCg0MCA3MCUgNDUlKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS5ub25lIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAucHJvYmxlbXMtbGlzdCB7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsImhzbCgwIDAlIDgwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgfQoKICAgICAgLnByb2JsZW0taWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogMnB4OwogICAgICB9CgogICAgICAucHJvYmxlbS1pY29uLmVycm9yIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24ud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woNDAgNzAlIDUwJSkiLCJoc2woNDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWRldGFpbHMgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAucHJvYmxlbS1tZXNzYWdlIHsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAucHJvYmxlbS1sb2NhdGlvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA1NSUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbXMtZW1wdHkgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDU1JSkiLCJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgZnJvbSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9CiAgICAgIH0KCiAgICAgIC5pbml0aWFsaXppbmcgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5pbml0aWFsaXppbmcgZGVlcy1pY29uIHsKICAgICAgICBhbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICAuaW5pdGlhbGl6aW5nIGRlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXcgewogICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgICAgd2lkdGg6IDgwJTsKICAgICAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgIH0KCiAgICAgIGRlZXMtd29ya3NwYWNlLWZpbGV0cmVlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICBkZWVzLXdvcmtzcGFjZS1tb25hY28gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIGRlZXMtd29ya3NwYWNlLXRlcm1pbmFsIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBSZXNpemUgaGFuZGxlcyAqLwogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbCB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWw6aG92ZXIsCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsLmRyYWdnaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzljYTNhZiIsIiM2ZTc2ODEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbDpob3Zlcjo6YWZ0ZXIsCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsLmRyYWdnaW5nOjphZnRlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWwgewogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGN1cnNvcjogcm93LXJlc2l6ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1ob3Jpem9udGFsOmhvdmVyLAogICAgICAucmVzaXplLWhhbmRsZS1ob3Jpem9udGFsLmRyYWdnaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjOWNhM2FmIiwiIzZlNzY4MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6aG92ZXI6OmFmdGVyLAogICAgICAucmVzaXplLWhhbmRsZS1ob3Jpem9udGFsLmRyYWdnaW5nOjphZnRlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC8qIFByZXZlbnQgdGV4dCBzZWxlY3Rpb24gd2hpbGUgZHJhZ2dpbmcgKi8KICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgewogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAud29ya3NwYWNlLWNvbnRhaW5lci5kcmFnZ2luZyAuZmlsZXRyZWUtcGFuZWwsCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyLmRyYWdnaW5nIC5lZGl0b3ItcGFuZWwsCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyLmRyYWdnaW5nIC50ZXJtaW5hbC1wYW5lbCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICBgXTtyZW5kZXIoKXtsZXQgUT1bIndvcmtzcGFjZS1jb250YWluZXIiLHRoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlfHx0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbD8iZHJhZ2dpbmciOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO3JldHVybiB0aGlzLmlzSW5pdGlhbGl6aW5nP01gCiAgICAgICAgPGRpdiBjbGFzcz0iaW5pdGlhbGl6aW5nIj4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmxvYWRlcjIifSBpY29uU2l6ZT0iMzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+SW5pdGlhbGl6aW5nIHdvcmtzcGFjZS4uLjwvc3Bhbj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3CiAgICAgICAgICAgIC5jb21tYW5kPSR7dGhpcy5pbml0Q29tbWFuZHx8IiJ9CiAgICAgICAgICAgIC5saW5lcz0ke3RoaXMuaW5pdE91dHB1dH0KICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgIGA6TWAKICAgICAgPGRpdiBjbGFzcz0id29ya3NwYWNlLW91dGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSIke1F9Ij4KICAgICAgICAgIDwhLS0gRmlsZXRyZWUgcGFuZWwgKGZ1bGwgaGVpZ2h0KSAtLT4KICAgICAgICAgICR7dGhpcy5zaG93RmlsZVRyZWU/TWAKICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgIGNsYXNzPSJmaWxldHJlZS1wYW5lbCAke3RoaXMuaXNGaWxlVHJlZUNvbGxhcHNlZD8iY29sbGFwc2VkIjoiIn0iCiAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3RoaXMuaXNGaWxlVHJlZUNvbGxhcHNlZD8wOnRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGh9cHgiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUKICAgICAgICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICAgICAgICAuc2VsZWN0ZWRQYXRoPSR7dGhpcy5hY3RpdmVGaWxlUGF0aH0KICAgICAgICAgICAgICAgIEBmaWxlLXNlbGVjdD0ke3RoaXMuaGFuZGxlRmlsZVNlbGVjdH0KICAgICAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1maWxldHJlZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICR7dGhpcy5pc0ZpbGVUcmVlQ29sbGFwc2VkPyIiOk1gCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9InJlc2l6ZS1oYW5kbGUtdmVydGljYWwgJHt0aGlzLmlzRHJhZ2dpbmdGaWxlVHJlZT8iZHJhZ2dpbmciOiIifSIKICAgICAgICAgICAgICAgIEBtb3VzZWRvd249JHt0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VEb3dufQogICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgYH0KICAgICAgICAgIGA6IiJ9CgogICAgICAgICAgPCEtLSBFZGl0b3IgKyBUZXJtaW5hbCBhcmVhIC0tPgogICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItcGFuZWwiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMtYmFyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLm9wZW5GaWxlcy5tYXAoSz0+TWAKICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGFiICR7Sy5wYXRoPT09dGhpcy5hY3RpdmVGaWxlUGF0aD8iYWN0aXZlIjoiIn0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5hY3RpdmF0ZUZpbGUoSy5wYXRoKX0KICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAke0subW9kaWZpZWQ/TWA8c3BhbiBjbGFzcz0idGFiLW1vZGlmaWVkIj48L3NwYW4+YDoiIn0KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItbmFtZSI+JHtLLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSR7YmU9PnRoaXMuY2xvc2VGaWxlKGJlLEsucGF0aCl9PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0gaWNvblNpemU9IjEyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1tZW51LWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy5zaG93RWRpdG9yTWVudX0gdGl0bGU9IkVkaXRvciBvcHRpb25zIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bW9yZVZlcnRpY2FsIn0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1jb250ZW50Ij4KICAgICAgICAgICAgICAgICR7dGhpcy5zaG93RGlmZlZpZXcmJnRoaXMuZGlmZlZpZXdDb25maWc/TWAKICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yCiAgICAgICAgICAgICAgICAgICAgLmZpbGVQYXRoPSR7dGhpcy5kaWZmVmlld0NvbmZpZy5maWxlUGF0aH0KICAgICAgICAgICAgICAgICAgICAub3JpZ2luYWxDb250ZW50PSR7dGhpcy5kaWZmVmlld0NvbmZpZy5vcmlnaW5hbENvbnRlbnR9CiAgICAgICAgICAgICAgICAgICAgLm1vZGlmaWVkQ29udGVudD0ke3RoaXMuZGlmZlZpZXdDb25maWcubW9kaWZpZWRDb250ZW50fQogICAgICAgICAgICAgICAgICAgIC5sYW5ndWFnZT0ke3RoaXMuZGlmZlZpZXdDb25maWcubGFuZ3VhZ2V9CiAgICAgICAgICAgICAgICAgICAgQGRpZmYtcmVzb2x2ZWQ9JHt0aGlzLmhhbmRsZURpZmZSZXNvbHZlZH0KICAgICAgICAgICAgICAgICAgICBAZGlmZi1jbG9zZWQ9JHsoKT0+e3RoaXMuc2hvd0RpZmZWaWV3PSExLHRoaXMuZGlmZlZpZXdDb25maWc9bnVsbH19CiAgICAgICAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yPgogICAgICAgICAgICAgICAgYDp0aGlzLm9wZW5GaWxlcy5sZW5ndGg9PT0wP01gCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpmaWxlQ29kZSJ9IGljb25TaXplPSI0OCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+U2VsZWN0IGEgZmlsZSB0byBlZGl0PC9zcGFuPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGA6TWAKICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAgICAgICAgIC5maWxlUGF0aD0ke3RoaXMuYWN0aXZlRmlsZVBhdGh9CiAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQ9JHt0aGlzLmdldEFjdGl2ZUZpbGVDb250ZW50KCl9CiAgICAgICAgICAgICAgICAgICAgLmxhbmd1YWdlPSR7dGhpcy5nZXRMYW5ndWFnZUZyb21QYXRoKHRoaXMuYWN0aXZlRmlsZVBhdGgpfQogICAgICAgICAgICAgICAgICAgIEBjb250ZW50LWNoYW5nZT0ke3RoaXMuaGFuZGxlQ29udGVudENoYW5nZX0KICAgICAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtbW9uYWNvPgogICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEhvcml6b250YWwgcmVzaXplIGhhbmRsZSBmb3IgdGVybWluYWwgLS0+CiAgICAgICAgICAgICR7dGhpcy5zaG93VGVybWluYWwmJiF0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQ/TWAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWhhbmRsZS1ob3Jpem9udGFsICR7dGhpcy5pc0RyYWdnaW5nVGVybWluYWw/ImRyYWdnaW5nIjoiIn0iCiAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlRG93bn0KICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgIGA6IiJ9CgogICAgICAgICAgICA8IS0tIFRlcm1pbmFsIHBhbmVsIC0tPgogICAgICAgICAgICAke3RoaXMuc2hvd1Rlcm1pbmFsP01gCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9InRlcm1pbmFsLXBhbmVsICR7dGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkPyJjb2xsYXBzZWQiOiIifSIKICAgICAgICAgICAgICAgIHN0eWxlPSJoZWlnaHQ6ICR7dGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkPzMyOnRoaXMuY3VycmVudFRlcm1pbmFsSGVpZ2h0fXB4IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLXRhYnMiPgogICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJwYW5lbC10YWIgJHt0aGlzLmFjdGl2ZUJvdHRvbVBhbmVsPT09InRlcm1pbmFsIj8iYWN0aXZlIjoiIn0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5hY3RpdmVCb3R0b21QYW5lbD0idGVybWluYWwifQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnRlcm1pbmFsIn0gaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InBhbmVsLXRhYiAke3RoaXMuYWN0aXZlQm90dG9tUGFuZWw9PT0icHJvYmxlbXMiPyJhY3RpdmUiOiIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLmFjdGl2ZUJvdHRvbVBhbmVsPSJwcm9ibGVtcyJ9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2lyY2xlQWxlcnQifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgUHJvYmxlbXMKICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGg+MD9NYAogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFuZWwtdGFiLWJhZGdlICR7dGhpcy5nZXRFcnJvckNvdW50KCk9PT0wPyJ3YXJuaW5nIjoiIn0iPiR7dGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGh9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRlci1hY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1hY3Rpb24iIEBjbGljaz0ke3RoaXMudG9nZ2xlVGVybWluYWx9PgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgICAgICAgICAgICAuaWNvbj0ke3RoaXMuaXNUZXJtaW5hbENvbGxhcHNlZD8ibHVjaWRlOmNoZXZyb25VcCI6Imx1Y2lkZTpjaGV2cm9uRG93biJ9CiAgICAgICAgICAgICAgICAgICAgICAgIGljb25TaXplPSIxNCIKICAgICAgICAgICAgICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWNvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiAke3RoaXMuYWN0aXZlQm90dG9tUGFuZWw9PT0idGVybWluYWwiPyJibG9jayI6Im5vbmUifSI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbAogICAgICAgICAgICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICAgICAgICAgICAgLnNldHVwQ29tbWFuZD0keyIifQogICAgICAgICAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbXMtY29udGVudCIgc3R5bGU9ImRpc3BsYXk6ICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbD09PSJwcm9ibGVtcyI/ImJsb2NrIjoibm9uZSJ9Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclByb2JsZW1zUGFuZWwoKX0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOiIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gQm90dG9tIEJhciAoZnVsbCB3aWR0aCkgLS0+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLWJvdHRvbWJhcgogICAgICAgICAgLmV4ZWN1dGlvbkVudmlyb25tZW50PSR7dGhpcy5leGVjdXRpb25FbnZpcm9ubWVudH0KICAgICAgICAgIEBydW4tcHJvY2Vzcz0ke3RoaXMuaGFuZGxlUnVuUHJvY2Vzc30KICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1ib3R0b21iYXI+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5rZXlkb3duSGFuZGxlcil9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMua2V5ZG93bkhhbmRsZXIpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlVXApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlVXApLHRoaXMuYXV0b1NhdmVJbnRlcnZhbCYmKGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvU2F2ZUludGVydmFsKSx0aGlzLmF1dG9TYXZlSW50ZXJ2YWw9bnVsbCksdGhpcy5zdG9wTm9kZU1vZHVsZXNXYXRjaGVyKCksdGhpcy5zdG9wQWxsRmlsZVdhdGNoZXJzKCl9YXN5bmMgZmlyc3RVcGRhdGVkKCl7dGhpcy5jdXJyZW50RmlsZVRyZWVXaWR0aD10aGlzLmZpbGVUcmVlV2lkdGgsdGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHQ9dGhpcy50ZXJtaW5hbEhlaWdodCx0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50JiZhd2FpdCB0aGlzLmluaXRpYWxpemVXb3Jrc3BhY2UoKX1hc3luYyB1cGRhdGVkKFEpe1EuaGFzKCJleGVjdXRpb25FbnZpcm9ubWVudCIpJiZ0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50JiZhd2FpdCB0aGlzLmluaXRpYWxpemVXb3Jrc3BhY2UoKSx0aGlzLmFjdGlvbmJhckVsZW1lbnR8fCh0aGlzLmFjdGlvbmJhckVsZW1lbnQ9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLXBhbmVsIGRlZXMtYWN0aW9uYmFyIikpfWFzeW5jIGluaXRpYWxpemVXb3Jrc3BhY2UoKXtpZih0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50JiYhdGhpcy5pbml0aWFsaXphdGlvblN0YXJ0ZWQpe3RoaXMuaW5pdGlhbGl6YXRpb25TdGFydGVkPSEwLHRoaXMuaXNJbml0aWFsaXppbmc9ITA7dHJ5e3RoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlP2F3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlOnRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHl8fGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuaW5pdCgpLGF3YWl0IHRoaXMuZXhlY3V0ZU9uSW5pdENvbW1hbmQoKX1jYXRjaChRKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB3b3Jrc3BhY2U6IixRKSx0aGlzLmluaXRpYWxpemF0aW9uU3RhcnRlZD0hMX1maW5hbGx5e3RoaXMuaXNJbml0aWFsaXppbmc9ITF9fX1hc3luYyBleGVjdXRlT25Jbml0Q29tbWFuZCgpe2lmKHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpdHJ5e2lmKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKCIvbnBtZXh0cmEuanNvbiIpKXtsZXQgUT1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKCIvbnBtZXh0cmEuanNvbiIpLGJlPUpTT04ucGFyc2UoUSk/LmRlZXNFZGl0b3JXb3Jrc3BhY2U/Lm9uSW5pdDtpZihiZSYmdHlwZW9mIGJlPT0ic3RyaW5nIil7Y29uc29sZS5sb2coIkV4ZWN1dGluZyBvbkluaXQgY29tbWFuZDoiLGJlKSx0aGlzLmluaXRDb21tYW5kPWJlLHRoaXMuaW5pdE91dHB1dD1bXTtsZXRbb3QsLi4ubnRdPWJlLnNwbGl0KCIgIiksbjE9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bihvdCxudCk7bjEub3V0cHV0LnBpcGVUbyhuZXcgV3JpdGFibGVTdHJlYW0oe3dyaXRlOktyPT57bGV0IEpyPUtyLnNwbGl0KGAKYCk7Zm9yKGxldCBUZSBvZiBKcilUZSYmKHRoaXMuaW5pdE91dHB1dD1bLi4udGhpcy5pbml0T3V0cHV0LFRlXSl9fSkpO2xldCB2YT1hd2FpdCBuMS5leGl0O2NvbnNvbGUubG9nKCJvbkluaXQgY29tbWFuZCBjb21wbGV0ZWQgd2l0aCBleGl0IGNvZGU6Iix2YSksdGhpcy5pbml0T3V0cHV0PVsuLi50aGlzLmluaXRPdXRwdXQsIiIsYENvbW1hbmQgY29tcGxldGVkIHdpdGggZXhpdCBjb2RlOiAke3ZhfWBdfX19Y2F0Y2goUSl7Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZXhlY3V0ZSBvbkluaXQgY29tbWFuZDoiLFEpfX1hc3luYyBpbml0aWFsaXplSW50ZWxsaVNlbnNlKCl7aWYoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR8fHRoaXMuaW50ZWxsaVNlbnNlSW5pdGlhbGl6ZWQpcmV0dXJuO2xldCBRPXdpbmRvdy5tb25hY287aWYoUXx8KGF3YWl0IG5ldyBQcm9taXNlKEs9PnNldFRpbWVvdXQoSywxMDApKSxRPXdpbmRvdy5tb25hY28pLCFRKXtjb25zb2xlLndhcm4oIk1vbmFjbyBub3QgeWV0IGxvYWRlZCwgSW50ZWxsaVNlbnNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgbGF0ZXIiKTtyZXR1cm59dGhpcy5pbnRlbGxpU2Vuc2VJbml0aWFsaXplZD0hMCx0aGlzLmludGVsbGlTZW5zZU1hbmFnZXI9bmV3IGJqLGF3YWl0IHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlci5pbml0KFEsdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCksdGhpcy5zZXR1cE1hcmtlckxpc3RlbmVyKCksdGhpcy5zdGFydE5vZGVNb2R1bGVzV2F0Y2hlcigpLGF3YWl0IHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlci5zY2FuQW5kTG9hZE5ld1BhY2thZ2VUeXBlcygpfXN0YXJ0Tm9kZU1vZHVsZXNXYXRjaGVyKCl7aWYoISghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudHx8dGhpcy5ub2RlTW9kdWxlc1dhdGNoZXIpKXRyeXt0aGlzLm5vZGVNb2R1bGVzV2F0Y2hlcj10aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndhdGNoKCIvbm9kZV9tb2R1bGVzIiwoUSxLKT0+e3RoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0KSx0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoYXN5bmMoKT0+e3RoaXMuaW50ZWxsaVNlbnNlTWFuYWdlciYmYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCl9LDJlMyl9LHtyZWN1cnNpdmU6ITB9KX1jYXRjaChRKXtjb25zb2xlLndhcm4oIkNvdWxkIG5vdCB3YXRjaCBub2RlX21vZHVsZXM6IixRKX19c3RvcE5vZGVNb2R1bGVzV2F0Y2hlcigpe3RoaXMubm9kZU1vZHVsZXNXYXRjaGVyJiYodGhpcy5ub2RlTW9kdWxlc1dhdGNoZXIuc3RvcCgpLHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyPW51bGwpLHRoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCksdGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dD1udWxsKX1zdGFydFdhdGNoaW5nRmlsZShRKXtpZighKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50fHx0aGlzLm9wZW5GaWxlV2F0Y2hlcnMuaGFzKFEpKSl0cnl7bGV0IEs9dGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaChRLChiZSxvdCk9PntsZXQgbnQ9dGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZ2V0KFEpO250JiZjbGVhclRpbWVvdXQobnQpO2xldCBuMT1zZXRUaW1lb3V0KCgpPT57dGhpcy5oYW5kbGVFeHRlcm5hbEZpbGVDaGFuZ2UoUSksdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZGVsZXRlKFEpfSwzMDApO3RoaXMuZmlsZUNoYW5nZURlYm91bmNlLnNldChRLG4xKX0pO3RoaXMub3BlbkZpbGVXYXRjaGVycy5zZXQoUSxLKX1jYXRjaChLKXtjb25zb2xlLndhcm4oYENvdWxkIG5vdCB3YXRjaCBmaWxlICR7UX06YCxLKX19c3RvcFdhdGNoaW5nRmlsZShRKXtsZXQgSz10aGlzLm9wZW5GaWxlV2F0Y2hlcnMuZ2V0KFEpO0smJihLLnN0b3AoKSx0aGlzLm9wZW5GaWxlV2F0Y2hlcnMuZGVsZXRlKFEpKTtsZXQgYmU9dGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZ2V0KFEpO2JlJiYoY2xlYXJUaW1lb3V0KGJlKSx0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5kZWxldGUoUSkpfXN0b3BBbGxGaWxlV2F0Y2hlcnMoKXtmb3IobGV0IFEgb2YgdGhpcy5vcGVuRmlsZVdhdGNoZXJzLnZhbHVlcygpKVEuc3RvcCgpO3RoaXMub3BlbkZpbGVXYXRjaGVycy5jbGVhcigpO2ZvcihsZXQgUSBvZiB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS52YWx1ZXMoKSljbGVhclRpbWVvdXQoUSk7dGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuY2xlYXIoKX1hc3luYyBoYW5kbGVFeHRlcm5hbEZpbGVDaGFuZ2UoUSl7bGV0IEs9dGhpcy5vcGVuRmlsZXMuZmluZChiZT0+YmUucGF0aD09PVEpO2lmKCEoIUt8fCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSl0cnl7bGV0IGJlPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUoUSk7aWYoYmU9PT1LLmNvbnRlbnQpcmV0dXJuO2lmKEsubW9kaWZpZWQpe2xldCBvdD1hd2FpdCB0aGlzLmFjdGlvbmJhckVsZW1lbnQ/LnNob3coe21lc3NhZ2U6YCIke0submFtZX0iIGNoYW5nZWQgb24gZGlzay4gV2hhdCBkbyB5b3Ugd2FudCB0byBkbz9gLHR5cGU6InF1ZXN0aW9uIixpY29uOiJsdWNpZGU6Z2l0TWVyZ2UiLGFjdGlvbnM6W3tpZDoibG9hZC1kaXNrIixsYWJlbDoiTG9hZCBmcm9tIERpc2siLHByaW1hcnk6ITB9LHtpZDoic2F2ZS1sb2NhbCIsbGFiZWw6IlNhdmUgTG9jYWwgdG8gRGlzayJ9LHtpZDoiY29tcGFyZSIsbGFiZWw6IkNvbXBhcmUifV0sdGltZW91dDp7ZHVyYXRpb246MTVlMyxkZWZhdWx0QWN0aW9uSWQ6ImxvYWQtZGlzayJ9LGRpc21pc3NpYmxlOiEwfSk7b3Q/LmFjdGlvbklkPT09ImxvYWQtZGlzayI/YXdhaXQgdGhpcy51cGRhdGVGaWxlQ29udGVudChRLGJlLCExKTpvdD8uYWN0aW9uSWQ9PT0ic2F2ZS1sb2NhbCI/KGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKFEsSy5jb250ZW50KSx0aGlzLm9wZW5GaWxlcz10aGlzLm9wZW5GaWxlcy5tYXAobnQ9Pm50LnBhdGg9PT1RP3suLi5udCxtb2RpZmllZDohMX06bnQpKTpvdD8uYWN0aW9uSWQ9PT0iY29tcGFyZSImJnRoaXMub3BlbkRpZmZWaWV3KFEsSy5jb250ZW50LGJlKX1lbHNlIGF3YWl0IHRoaXMudXBkYXRlRmlsZUNvbnRlbnQoUSxiZSwhMCl9Y2F0Y2goYmUpe2NvbnNvbGUud2FybihgRmFpbGVkIHRvIGhhbmRsZSBleHRlcm5hbCBjaGFuZ2UgZm9yICR7UX06YCxiZSl9fWFzeW5jIHVwZGF0ZUZpbGVDb250ZW50KFEsSyxiZSl7aWYodGhpcy5vcGVuRmlsZXM9dGhpcy5vcGVuRmlsZXMubWFwKG90PT5vdC5wYXRoPT09UT97Li4ub3QsY29udGVudDpLLG1vZGlmaWVkOiExfTpvdCksUT09PXRoaXMuYWN0aXZlRmlsZVBhdGgpe2xldCBvdD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpO290JiZhd2FpdCBvdC5zZXRDb250ZW50RXh0ZXJuYWwoSyxiZSl9fW9wZW5EaWZmVmlldyhRLEssYmUpe3RoaXMuZGlmZlZpZXdDb25maWc9e2ZpbGVQYXRoOlEsb3JpZ2luYWxDb250ZW50OmJlLG1vZGlmaWVkQ29udGVudDpLLGxhbmd1YWdlOnRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aChRKX0sdGhpcy5zaG93RGlmZlZpZXc9ITB9YXN5bmMgaGFuZGxlRGlmZlJlc29sdmVkKFEpe2xldHthY3Rpb246Syxjb250ZW50OmJlfT1RLmRldGFpbCxvdD10aGlzLmRpZmZWaWV3Q29uZmlnPy5maWxlUGF0aDtpZighb3R8fCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXt0aGlzLnNob3dEaWZmVmlldz0hMSx0aGlzLmRpZmZWaWV3Q29uZmlnPW51bGw7cmV0dXJufWlmKEs9PT0idXNlLWxvY2FsIil7aWYoYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUob3QsYmUpLHRoaXMub3BlbkZpbGVzPXRoaXMub3BlbkZpbGVzLm1hcChudD0+bnQucGF0aD09PW90P3suLi5udCxjb250ZW50OmJlLG1vZGlmaWVkOiExfTpudCksb3Q9PT10aGlzLmFjdGl2ZUZpbGVQYXRoKXtsZXQgbnQ9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKTtudCYmYXdhaXQgbnQuc2V0Q29udGVudEV4dGVybmFsKGJlLCExKX19ZWxzZSBLPT09InVzZS1kaXNrIiYmYXdhaXQgdGhpcy51cGRhdGVGaWxlQ29udGVudChvdCxiZSwhMSk7dGhpcy5zaG93RGlmZlZpZXc9ITEsdGhpcy5kaWZmVmlld0NvbmZpZz1udWxsfWFzeW5jIGhhbmRsZUZpbGVTZWxlY3QoUSl7bGV0e3BhdGg6SyxuYW1lOmJlfT1RLmRldGFpbDthd2FpdCB0aGlzLm9wZW5GaWxlKEssYmUpfWFzeW5jIG9wZW5GaWxlKFEsSyl7aWYodGhpcy5vcGVuRmlsZXMuZmluZChvdD0+b3QucGF0aD09PVEpKXt0aGlzLmFjdGl2ZUZpbGVQYXRoPVE7cmV0dXJufWlmKHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpdHJ5e2xldCBvdD1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKFEpO2lmKHRoaXMub3BlbkZpbGVzPVsuLi50aGlzLm9wZW5GaWxlcyx7cGF0aDpRLG5hbWU6Syxjb250ZW50Om90LG1vZGlmaWVkOiExfV0sdGhpcy5hY3RpdmVGaWxlUGF0aD1RLHRoaXMuc3RhcnRXYXRjaGluZ0ZpbGUoUSksIXRoaXMuaW50ZWxsaVNlbnNlSW5pdGlhbGl6ZWQpe2F3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsYXdhaXQgbmV3IFByb21pc2UobjE9PnNldFRpbWVvdXQobjEsNTAwKSksYXdhaXQgdGhpcy5pbml0aWFsaXplSW50ZWxsaVNlbnNlKCk7bGV0IG50PXRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aChRKTt0aGlzLmludGVsbGlTZW5zZU1hbmFnZXImJihudD09PSJ0eXBlc2NyaXB0Inx8bnQ9PT0iamF2YXNjcmlwdCIpJiZhd2FpdCB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIucHJvY2Vzc0NvbnRlbnRDaGFuZ2Uob3QpfX1jYXRjaChvdCl7Y29uc29sZS5lcnJvcihgRmFpbGVkIHRvIG9wZW4gZmlsZSAke1F9OmAsb3QpfX1hY3RpdmF0ZUZpbGUoUSl7dGhpcy5hY3RpdmVGaWxlUGF0aD1RfWNsb3NlRmlsZShRLEspe1Euc3RvcFByb3BhZ2F0aW9uKCk7bGV0IGJlPXRoaXMub3BlbkZpbGVzLmZpbmRJbmRleChudD0+bnQucGF0aD09PUspO2lmKGJlPT09LTEpcmV0dXJuO2xldCBvdD10aGlzLm9wZW5GaWxlc1tiZV07aWYoIShvdC5tb2RpZmllZCYmIWNvbmZpcm0oYCR7b3QubmFtZX0gaGFzIHVuc2F2ZWQgY2hhbmdlcy4gQ2xvc2UgYW55d2F5P2ApKSYmKHRoaXMuc3RvcFdhdGNoaW5nRmlsZShLKSx0aGlzLm9wZW5GaWxlcz10aGlzLm9wZW5GaWxlcy5maWx0ZXIobnQ9Pm50LnBhdGghPT1LKSx0aGlzLmFjdGl2ZUZpbGVQYXRoPT09SykpaWYodGhpcy5vcGVuRmlsZXMubGVuZ3RoPjApe2xldCBudD1NYXRoLm1pbihiZSx0aGlzLm9wZW5GaWxlcy5sZW5ndGgtMSk7dGhpcy5hY3RpdmVGaWxlUGF0aD10aGlzLm9wZW5GaWxlc1tudF0ucGF0aH1lbHNlIHRoaXMuYWN0aXZlRmlsZVBhdGg9IiJ9Z2V0QWN0aXZlRmlsZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5vcGVuRmlsZXMuZmluZChLPT5LLnBhdGg9PT10aGlzLmFjdGl2ZUZpbGVQYXRoKT8uY29udGVudHx8IiJ9aGFuZGxlQ29udGVudENoYW5nZShRKXtsZXQgSz1RLmRldGFpbCxiZT10aGlzLm9wZW5GaWxlcy5maW5kSW5kZXgobnQ9Pm50LnBhdGg9PT10aGlzLmFjdGl2ZUZpbGVQYXRoKTtpZihiZT09PS0xKXJldHVybjtsZXQgb3Q9dGhpcy5vcGVuRmlsZXNbYmVdO2lmKG90LmNvbnRlbnQhPT1LKXt0aGlzLm9wZW5GaWxlcz1bLi4udGhpcy5vcGVuRmlsZXMuc2xpY2UoMCxiZSksey4uLm90LGNvbnRlbnQ6Syxtb2RpZmllZDohMH0sLi4udGhpcy5vcGVuRmlsZXMuc2xpY2UoYmUrMSldO2xldCBudD10aGlzLmdldExhbmd1YWdlRnJvbVBhdGgodGhpcy5hY3RpdmVGaWxlUGF0aCk7dGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyJiYobnQ9PT0idHlwZXNjcmlwdCJ8fG50PT09ImphdmFzY3JpcHQiKSYmKHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5pbnRlbGxpU2Vuc2VEZWJvdW5jZVRpbWVvdXQpLHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLmludGVsbGlTZW5zZU1hbmFnZXI/LnByb2Nlc3NDb250ZW50Q2hhbmdlKEspfSw1MDApKX19Z2V0TGFuZ3VhZ2VGcm9tUGF0aChRKXtsZXQgSz1RLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7cmV0dXJue3RzOiJ0eXBlc2NyaXB0Iix0c3g6InR5cGVzY3JpcHQiLGpzOiJqYXZhc2NyaXB0Iixqc3g6ImphdmFzY3JpcHQiLGpzb246Impzb24iLGh0bWw6Imh0bWwiLGNzczoiY3NzIixzY3NzOiJzY3NzIixsZXNzOiJsZXNzIixtZDoibWFya2Rvd24iLHlhbWw6InlhbWwiLHltbDoieWFtbCIseG1sOiJ4bWwiLHNxbDoic3FsIixweToicHl0aG9uIixzaDoic2hlbGwiLGJhc2g6InNoZWxsIn1bS3x8IiJdfHwicGxhaW50ZXh0In10b2dnbGVUZXJtaW5hbCgpe3RoaXMuaXNUZXJtaW5hbENvbGxhcHNlZD0hdGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkfWFzeW5jIHNhdmVBY3RpdmVGaWxlKCl7bGV0IFE9dGhpcy5vcGVuRmlsZXMuZmluZChLPT5LLnBhdGg9PT10aGlzLmFjdGl2ZUZpbGVQYXRoKTtpZighKCFRfHwhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkpdHJ5e2F3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKFEucGF0aCxRLmNvbnRlbnQpLHRoaXMub3BlbkZpbGVzPXRoaXMub3BlbkZpbGVzLm1hcChLPT5LLnBhdGg9PT1RLnBhdGg/ey4uLkssbW9kaWZpZWQ6ITF9OkspLHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlciYmdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLmFkZEZpbGVNb2RlbChRLnBhdGgsUS5jb250ZW50KX1jYXRjaChLKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gc2F2ZSBmaWxlOiIsSyl9fWFzeW5jIHNhdmVBbGxGaWxlcygpe2lmKHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpe2ZvcihsZXQgUSBvZiB0aGlzLm9wZW5GaWxlcy5maWx0ZXIoSz0+Sy5tb2RpZmllZCkpdHJ5e2F3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKFEucGF0aCxRLmNvbnRlbnQpLHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlciYmdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLmFkZEZpbGVNb2RlbChRLnBhdGgsUS5jb250ZW50KX1jYXRjaChLKXtjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gc2F2ZSAke1EucGF0aH06YCxLKX10aGlzLm9wZW5GaWxlcz10aGlzLm9wZW5GaWxlcy5tYXAoUT0+KHsuLi5RLG1vZGlmaWVkOiExfSkpfX1hc3luYyBzaG93RWRpdG9yTWVudShRKXtRLnN0b3BQcm9wYWdhdGlvbigpO2xldCBLPVt7bmFtZTp0aGlzLmF1dG9TYXZlPyJcdTI3MTMgQXV0byBTYXZlIjoiQXV0byBTYXZlIixpY29uTmFtZToibHVjaWRlOnNhdmUiLGFjdGlvbjphc3luYygpPT50aGlzLnRvZ2dsZUF1dG9TYXZlKCl9LHtkaXZpZGVyOiEwfSx7bmFtZToiU2F2ZSIsaWNvbk5hbWU6Imx1Y2lkZTpzYXZlIixhY3Rpb246YXN5bmMoKT0+dGhpcy5zYXZlQWN0aXZlRmlsZSgpfSx7bmFtZToiU2F2ZSBBbGwiLGljb25OYW1lOiJsdWNpZGU6c2F2ZSIsYWN0aW9uOmFzeW5jKCk9PnRoaXMuc2F2ZUFsbEZpbGVzKCl9XTthd2FpdCBXdC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhRLEspfXRvZ2dsZUF1dG9TYXZlKCl7dGhpcy5hdXRvU2F2ZT0hdGhpcy5hdXRvU2F2ZSx0aGlzLmF1dG9TYXZlP3RoaXMuYXV0b1NhdmVJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e3RoaXMub3BlbkZpbGVzLnNvbWUoSz0+Sy5tb2RpZmllZCkmJnRoaXMuc2F2ZUFsbEZpbGVzKCl9LDJlMyk6dGhpcy5hdXRvU2F2ZUludGVydmFsJiYoY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpLHRoaXMuYXV0b1NhdmVJbnRlcnZhbD1udWxsKX1nZXRFcnJvckNvdW50KCl7cmV0dXJuIHRoaXMuZGlhZ25vc3RpY01hcmtlcnMuZmlsdGVyKFE9PlEuc2V2ZXJpdHk9PT04KS5sZW5ndGh9cmVuZGVyUHJvYmxlbXNQYW5lbCgpe3JldHVybiB0aGlzLmRpYWdub3N0aWNNYXJrZXJzLmxlbmd0aD09PTA/TWAKICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtcy1lbXB0eSI+CiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpjaGVja0NpcmNsZSJ9IGljb25TaXplPSIyNCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3Bhbj5ObyBwcm9ibGVtcyBkZXRlY3RlZDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgYDpNYAogICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtcy1saXN0Ij4KICAgICAgICAke3RoaXMuZGlhZ25vc3RpY01hcmtlcnMubWFwKFE9Pk1gCiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtLWl0ZW0iIEBjbGljaz0keygpPT50aGlzLm5hdmlnYXRlVG9Qcm9ibGVtKFEpfT4KICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgIGNsYXNzPSJwcm9ibGVtLWljb24gJHtRLnNldmVyaXR5PT09OD8iZXJyb3IiOiJ3YXJuaW5nIn0iCiAgICAgICAgICAgICAgLmljb249JHtRLnNldmVyaXR5PT09OD8ibHVjaWRlOmNpcmNsZVgiOiJsdWNpZGU6dHJpYW5nbGVBbGVydCJ9CiAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tZGV0YWlscyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1tZXNzYWdlIj4ke1EubWVzc2FnZX08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtLWxvY2F0aW9uIj4KICAgICAgICAgICAgICAgICR7US5yZXNvdXJjZS5wYXRoLnNwbGl0KCIvIikucG9wKCl9ICgke1Euc3RhcnRMaW5lTnVtYmVyfSwgJHtRLnN0YXJ0Q29sdW1ufSkKICAgICAgICAgICAgICAgICR7US5zb3VyY2U/YFske1Euc291cmNlfV1gOiIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGApfQogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgbmF2aWdhdGVUb1Byb2JsZW0oUSl7bGV0IEs9US5yZXNvdXJjZS5wYXRoLGJlPUsuc3BsaXQoIi8iKS5wb3AoKXx8IiI7dGhpcy5vcGVuRmlsZXMuZmluZChuMT0+bjEucGF0aD09PUspP3RoaXMuYWN0aXZlRmlsZVBhdGg9Szphd2FpdCB0aGlzLm9wZW5GaWxlKEssYmUpLGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7bGV0IG50PXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7aWYobnQpe2xldCBuMT1hd2FpdCBudC5lZGl0b3JEZWZlcnJlZC5wcm9taXNlO24xLnJldmVhbExpbmVJbkNlbnRlcihRLnN0YXJ0TGluZU51bWJlciksbjEuc2V0UG9zaXRpb24oe2xpbmVOdW1iZXI6US5zdGFydExpbmVOdW1iZXIsY29sdW1uOlEuc3RhcnRDb2x1bW59KSxuMS5mb2N1cygpfX1zZXR1cE1hcmtlckxpc3RlbmVyKCl7bGV0IFE9d2luZG93Lm1vbmFjbztRJiYoUS5lZGl0b3Iub25EaWRDaGFuZ2VNYXJrZXJzKEs9Pnt0aGlzLnVwZGF0ZURpYWdub3N0aWNNYXJrZXJzKCl9KSx0aGlzLnVwZGF0ZURpYWdub3N0aWNNYXJrZXJzKCkpfXVwZGF0ZURpYWdub3N0aWNNYXJrZXJzKCl7bGV0IFE9d2luZG93Lm1vbmFjbztpZighUSlyZXR1cm47bGV0IEs9US5lZGl0b3IuZ2V0TW9kZWxNYXJrZXJzKHt9KTt0aGlzLmRpYWdub3N0aWNNYXJrZXJzPUsubWFwKGJlPT4oe21lc3NhZ2U6YmUubWVzc2FnZSxzZXZlcml0eTpiZS5zZXZlcml0eSxzdGFydExpbmVOdW1iZXI6YmUuc3RhcnRMaW5lTnVtYmVyLHN0YXJ0Q29sdW1uOmJlLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6YmUuZW5kTGluZU51bWJlcixlbmRDb2x1bW46YmUuZW5kQ29sdW1uLHNvdXJjZTpiZS5zb3VyY2UscmVzb3VyY2U6e3BhdGg6YmUucmVzb3VyY2UucGF0aH19KSl9YXN5bmMgaGFuZGxlUnVuUHJvY2VzcyhRKXtsZXQgSz1RLmRldGFpbCxiZT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLXRlcm1pbmFsIik7aWYoIWJlKXtjb25zb2xlLndhcm4oIlRlcm1pbmFsIGNvbXBvbmVudCBub3QgZm91bmQiKTtyZXR1cm59dGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkJiYodGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkPSExKSx0aGlzLmFjdGl2ZUJvdHRvbVBhbmVsPSJ0ZXJtaW5hbCIsYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSxhd2FpdCBiZS5jcmVhdGVQcm9jZXNzVGFiKHt0eXBlOksudHlwZSxsYWJlbDpLLmxhYmVsLGNvbW1hbmQ6Sy5jb21tYW5kLGFyZ3M6Sy5hcmdzLG1ldGFkYXRhOksubWV0YWRhdGEsc3dpdGNoVG9UYWI6ITB9KX1zZXRGaWxlVHJlZVdpZHRoKFEpe2xldCBiZT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKi41O3RoaXMuY3VycmVudEZpbGVUcmVlV2lkdGg9TWF0aC5tYXgoMTUwLE1hdGgubWluKGJlLFEpKSx3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKX1zZXRUZXJtaW5hbEhlaWdodChRKXtsZXQgYmU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQqLjc7dGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHQ9TWF0aC5tYXgoMTAwLE1hdGgubWluKGJlLFEpKSx3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKX1yZXNldExheW91dCgpe3RoaXMuY3VycmVudEZpbGVUcmVlV2lkdGg9dGhpcy5maWxlVHJlZVdpZHRoLHRoaXMuY3VycmVudFRlcm1pbmFsSGVpZ2h0PXRoaXMudGVybWluYWxIZWlnaHQsd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSl9c3RhdGlje2R0KHIsYSl9fTtyZXR1cm4gcXQ9cn0pKCk7U0koKTtVRWUoKTtmZSgpO0JlKCk7dmFyIExJPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sS2k9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LGJWYT1zdC5wbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpLGpzMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtd29ya3NwYWNlLW1hcmtkb3duIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W107dmFyIHY9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCB5PXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6TnVtYmVyfSldLGY9W0Qoe3R5cGU6TnVtYmVyfSldLGQ9W2xlKCldLGI9W2xlKCldLExJKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3BsaXRSYXRpbyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+InNwbGl0UmF0aW8iaW4gdyxnZXQ6dz0+dy5zcGxpdFJhdGlvLHNldDoodyxFKT0+e3cuc3BsaXRSYXRpbz1FfX0sbWV0YWRhdGE6eX0scyxsKSxMSSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1pblBhbmVsU2l6ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+Im1pblBhbmVsU2l6ZSJpbiB3LGdldDp3PT53Lm1pblBhbmVsU2l6ZSxzZXQ6KHcsRSk9Pnt3Lm1pblBhbmVsU2l6ZT1FfX0sbWV0YWRhdGE6eX0sYyx1KSxMSSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImN1cnJlbnRTcGxpdFJhdGlvIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4iY3VycmVudFNwbGl0UmF0aW8iaW4gdyxnZXQ6dz0+dy5jdXJyZW50U3BsaXRSYXRpbyxzZXQ6KHcsRSk9Pnt3LmN1cnJlbnRTcGxpdFJhdGlvPUV9fSxtZXRhZGF0YTp5fSxoLGcpLExJKHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNEcmFnZ2luZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+ImlzRHJhZ2dpbmciaW4gdyxnZXQ6dz0+dy5pc0RyYWdnaW5nLHNldDoodyxFKT0+e3cuaXNEcmFnZ2luZz1FfX0sbWV0YWRhdGE6eX0seCxtKSxMSShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTp5fSxudWxsLGEpLHY9cj1lLnZhbHVlLHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6eX0pfXN0YXRpYyBkZW1vPSgpPT5NYDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bj48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3duPmA7c3RhdGljIGRlbW9Hcm91cD0iV29ya3NwYWNlIjtzdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuc3BsaXRDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICAuZWRpdG9yQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZSB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMzAzNjNkIil9OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAucmVzaXplSGFuZGxlOmhvdmVyLAogICAgICAucmVzaXplSGFuZGxlLmRyYWdnaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemVIYW5kbGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgIHdpZHRoOiAycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjOWNhM2FmIiwiIzZlNzY4MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICB9CgogICAgICAucmVzaXplSGFuZGxlOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZUhhbmRsZS5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiI2ZmZmZmZiIpfTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAub3V0bGV0Q29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMGQxMTE3Iil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzI0MjkyZiIsIiNlNmVkZjMiKX07CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ05vdG8gU2FucycsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC8qIFByZXZlbnQgdGV4dCBzZWxlY3Rpb24gd2hpbGUgZHJhZ2dpbmcgKi8KICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIC5lZGl0b3JDb250YWluZXIsCiAgICAgIC5zcGxpdENvbnRhaW5lci5kcmFnZ2luZyAub3V0bGV0Q29udGFpbmVyIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYF07I2U9S2kodGhpcyxzLDUwKTtnZXQgc3BsaXRSYXRpbygpe3JldHVybiB0aGlzLiNlfXNldCBzcGxpdFJhdGlvKHkpe3RoaXMuI2U9eX0jdD0oS2kodGhpcyxsKSxLaSh0aGlzLGMsMTApKTtnZXQgbWluUGFuZWxTaXplKCl7cmV0dXJuIHRoaXMuI3R9c2V0IG1pblBhbmVsU2l6ZSh5KXt0aGlzLiN0PXl9I2E9KEtpKHRoaXMsdSksS2kodGhpcyxoLDUwKSk7Z2V0IGN1cnJlbnRTcGxpdFJhdGlvKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGN1cnJlbnRTcGxpdFJhdGlvKHkpe3RoaXMuI2E9eX0jcj0oS2kodGhpcyxnKSxLaSh0aGlzLHgsITEpKTtnZXQgaXNEcmFnZ2luZygpe3JldHVybiB0aGlzLiNyfXNldCBpc0RyYWdnaW5nKHkpe3RoaXMuI3I9eX1yZXNpemVIYW5kbGVFbGVtZW50PUtpKHRoaXMsbSk7Y29udGFpbmVyRWxlbWVudDtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0ic3BsaXRDb250YWluZXIgJHt0aGlzLmlzRHJhZ2dpbmc/ImRyYWdnaW5nIjoiIn0iPgogICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvckNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiAke3RoaXMuY3VycmVudFNwbGl0UmF0aW99JSI+CiAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbW9uYWNvCiAgICAgICAgICAgIC5sYW5ndWFnZT0keyJtYXJrZG93biJ9CiAgICAgICAgICAgIC5jb250ZW50PSR7YCMgYSB0ZXN0IGNvbnRlbnQKClRoaXMgaXMgdGVzdCBjb250ZW50IHRoYXQgaXMgb2YgbG9uZ2VyIGZvcm0gYW4gaG9wZWZ1bGx5IHN0YXJ0cyB0byB3cmFwIHdoZW4gSSBuZWVkIGl0LiBBbmQgeWVzLCBpdCBkb2VzIHBlcmZlY3RseS4gbmljZS4KClRlc3QgfCBIZWxsbwotLS0gfCAtLS0KWWVhaCB8IFNvIGdvb2QKClRoaXMgaXMgcmVhbCBhc3NldCBJIHRoaW5rLiBXaHkgd291bGQgd2Ugd2FudCB0byBsZWF2ZSB0aGF0IG9uIHRoZSB0YWJsZT8gQ2FuIHlvdSB0ZWxsIG15IHRoYXQ/CgpXaHkgYXJlIHdlIGhlcmU/CgpEbyB5b3Uga25vdz8KCj4gbm90ZToKVGhlcmUgaXMgc29tZXRoaW5nIGdvaW5nIG9uLgoKXGBcYFxgdHlwZXNjcmlwdApjb25zdCBoZWxsbyA9ICd5ZXMnClxgXGBcYApgfQogICAgICAgICAgICB3b3JkV3JhcD0iYm91bmRlZCIKICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0icmVzaXplSGFuZGxlICR7dGhpcy5pc0RyYWdnaW5nPyJkcmFnZ2luZyI6IiJ9IgogICAgICAgICAgQG1vdXNlZG93bj0ke3RoaXMuaGFuZGxlTW91c2VEb3dufQogICAgICAgID48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJvdXRsZXRDb250YWluZXIiIHN0eWxlPSJ3aWR0aDogJHsxMDAtdGhpcy5jdXJyZW50U3BsaXRSYXRpb30lIj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKHkpe2F3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZCh5KSx0aGlzLmN1cnJlbnRTcGxpdFJhdGlvPXRoaXMuc3BsaXRSYXRpbyx0aGlzLmNvbnRhaW5lckVsZW1lbnQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zcGxpdENvbnRhaW5lciIpLHRoaXMucmVzaXplSGFuZGxlRWxlbWVudD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnJlc2l6ZUhhbmRsZSIpO2xldCB3PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKSxFPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldCIpLHo9YXdhaXQgbmV3IHN0LnBsdWdpbnMuc21hcnRtYXJrZG93bi5TbWFydE1hcmtkb3duKCkuZ2V0TWRQYXJzZWRSZXN1bHRGcm9tTWFya2Rvd24oImxvYWRpbmcuLi4iKTt3LmNvbnRlbnRTdWJqZWN0LnN1YnNjcmliZShhc3luYyBQPT57YXdhaXQgei51cGRhdGVGcm9tTWFya2Rvd25TdHJpbmcoUCk7bGV0IF89ei5odG1sO0UudXBkYXRlSHRtbFRleHQoXyl9KX1oYW5kbGVNb3VzZURvd249eT0+e3kucHJldmVudERlZmF1bHQoKSx0aGlzLmlzRHJhZ2dpbmc9ITAsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmhhbmRsZU1vdXNlTW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5oYW5kbGVNb3VzZVVwKX07aGFuZGxlTW91c2VNb3ZlPXk9PntpZighdGhpcy5pc0RyYWdnaW5nfHwhdGhpcy5jb250YWluZXJFbGVtZW50KXJldHVybjtsZXQgdz10aGlzLmNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRT13LndpZHRoLHo9KHkuY2xpZW50WC13LmxlZnQpL0UqMTAwO3o9TWF0aC5tYXgodGhpcy5taW5QYW5lbFNpemUsTWF0aC5taW4oMTAwLXRoaXMubWluUGFuZWxTaXplLHopKSx0aGlzLmN1cnJlbnRTcGxpdFJhdGlvPXp9O2hhbmRsZU1vdXNlVXA9KCk9Pnt0aGlzLmlzRHJhZ2dpbmc9ITEsZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmhhbmRsZU1vdXNlTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5oYW5kbGVNb3VzZVVwKSx0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIikmJndpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpfTthc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmhhbmRsZU1vdXNlTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5oYW5kbGVNb3VzZVVwKX1zZXRTcGxpdFJhdGlvKHkpe3RoaXMuY3VycmVudFNwbGl0UmF0aW89TWF0aC5tYXgodGhpcy5taW5QYW5lbFNpemUsTWF0aC5taW4oMTAwLXRoaXMubWluUGFuZWxTaXplLHkpKX1yZXNldFNwbGl0UmF0aW8oKXt0aGlzLmN1cnJlbnRTcGxpdFJhdGlvPXRoaXMuc3BsaXRSYXRpb31zdGF0aWN7S2kocixhKX19O3JldHVybiB2PXJ9KSgpO2ZlKCk7dmFyIHBPdD0oKT0+TWAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHt0ZWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8IS0tIERlbW8gMTogSGVhZGluZ3MgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkhlYWRpbmdzIn0KICAgICAgICAuc3VidGl0bGU9JHsiQWxsIGhlYWRpbmcgbGV2ZWxzIGZyb20gSDEgdG8gSDYifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnthd2FpdCB0LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPGgxPkhlYWRpbmcgTGV2ZWwgMTwvaDE+CiAgICAgICAgICAgIDxoMj5IZWFkaW5nIExldmVsIDI8L2gyPgogICAgICAgICAgICA8aDM+SGVhZGluZyBMZXZlbCAzPC9oMz4KICAgICAgICAgICAgPGg0PkhlYWRpbmcgTGV2ZWwgNDwvaDQ+CiAgICAgICAgICAgIDxoNT5IZWFkaW5nIExldmVsIDU8L2g1PgogICAgICAgICAgICA8aDY+SGVhZGluZyBMZXZlbCA2PC9oNj4KICAgICAgICAgIGApfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8IS0tIERlbW8gMjogVGV4dCBGb3JtYXR0aW5nIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJUZXh0IEZvcm1hdHRpbmcifQogICAgICAgIC5zdWJ0aXRsZT0keyJCb2xkLCBpdGFsaWMsIGxpbmtzLCBjb2RlLCBhbmQga2V5Ym9hcmQgaW5wdXQifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnthd2FpdCB0LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHA+VGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIDxzdHJvbmc+Ym9sZCB0ZXh0PC9zdHJvbmc+IGFuZCA8ZW0+aXRhbGljIHRleHQ8L2VtPi48L3A+CiAgICAgICAgICAgIDxwPllvdSBjYW4gYWxzbyB1c2UgPHN0cm9uZz48ZW0+Ym9sZCBpdGFsaWM8L2VtPjwvc3Ryb25nPiBmb3IgZW1waGFzaXMuPC9wPgogICAgICAgICAgICA8cD5IZXJlJ3MgYSA8YSBocmVmPSIjIj5saW5rIGV4YW1wbGU8L2E+IGFuZCBzb21lIDxjb2RlPmlubGluZSBjb2RlPC9jb2RlPi48L3A+CiAgICAgICAgICAgIDxwPlByZXNzIDxrYmQ+Q3RybDwva2JkPiArIDxrYmQ+Qzwva2JkPiB0byBjb3B5IHRleHQuPC9wPgogICAgICAgICAgICA8aHI+CiAgICAgICAgICAgIDxwPkFib3ZlIGlzIGEgaG9yaXpvbnRhbCBydWxlIHNlcGFyYXRvci48L3A+CiAgICAgICAgICBgKX19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDM6IExpc3RzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJMaXN0cyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7Ik9yZGVyZWQsIHVub3JkZXJlZCwgYW5kIHRhc2sgbGlzdHMifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnthd2FpdCB0LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPGgzPlVub3JkZXJlZCBMaXN0PC9oMz4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5GaXJzdCBpdGVtPC9saT4KICAgICAgICAgICAgICA8bGk+U2Vjb25kIGl0ZW0KICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgPGxpPk5lc3RlZCBpdGVtIDE8L2xpPgogICAgICAgICAgICAgICAgICA8bGk+TmVzdGVkIGl0ZW0gMjwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRoaXJkIGl0ZW08L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPGgzPk9yZGVyZWQgTGlzdDwvaDM+CiAgICAgICAgICAgIDxvbD4KICAgICAgICAgICAgICA8bGk+U3RlcCBvbmU8L2xpPgogICAgICAgICAgICAgIDxsaT5TdGVwIHR3bzwvbGk+CiAgICAgICAgICAgICAgPGxpPlN0ZXAgdGhyZWU8L2xpPgogICAgICAgICAgICA8L29sPgoKICAgICAgICAgICAgPGgzPlRhc2sgTGlzdDwvaDM+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGkgY2xhc3M9InRhc2stbGlzdC1pdGVtIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQgZGlzYWJsZWQ+IENvbXBsZXRlZCB0YXNrPC9saT4KICAgICAgICAgICAgICA8bGkgY2xhc3M9InRhc2stbGlzdC1pdGVtIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGRpc2FibGVkPiBQZW5kaW5nIHRhc2s8L2xpPgogICAgICAgICAgICAgIDxsaSBjbGFzcz0idGFzay1saXN0LWl0ZW0iPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgZGlzYWJsZWQ+IEFub3RoZXIgdGFzazwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICBgKX19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDQ6IENvZGUgQmxvY2tzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJDb2RlIEJsb2NrcyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlN5bnRheCBoaWdobGlnaHRlZCBjb2RlIGV4YW1wbGVzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57YXdhaXQgdC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldCIpPy51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxwPklubGluZSBjb2RlOiA8Y29kZT5jb25zdCBncmVldGluZyA9ICJIZWxsbywgV29ybGQhIjs8L2NvZGU+PC9wPgoKICAgICAgICAgICAgPGgzPlR5cGVTY3JpcHQgRXhhbXBsZTwvaDM+CiAgICAgICAgICAgIDxwcmU+PGNvZGU+PHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+aW1wb3J0PC9zcGFuPiB7IGh0bWwsIGNzcyB9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmZyb208L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXN0cmluZyI+J0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCc8L3NwYW4+OwoKPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+aW50ZXJmYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaGxqcy10aXRsZSI+SVVzZXI8L3NwYW4+IHsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj5uYW1lPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtYnVpbHRfaW4iPnN0cmluZzwvc3Bhbj47CiAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+ZW1haWw8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+c3RyaW5nPC9zcGFuPjsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj5hZ2U8L3NwYW4+PzogPHNwYW4gY2xhc3M9ImhsanMtYnVpbHRfaW4iPm51bWJlcjwvc3Bhbj47Cn0KCjxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaGxqcy10aXRsZSI+Z2V0VXNlcjwvc3Bhbj4gPSA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5hc3luYzwvc3Bhbj4gKDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPmlkPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtYnVpbHRfaW4iPnN0cmluZzwvc3Bhbj4pOiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+UHJvbWlzZTwvc3Bhbj4mbHQ7SVVzZXImZ3Q7ID0mZ3Q7IHsKICA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5jb25zdDwvc3Bhbj4gcmVzcG9uc2UgPSA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5hd2FpdDwvc3Bhbj4gZmV0Y2goXGAvYXBpL3VzZXJzL1wke2lkfVxgKTsKICA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5yZXR1cm48L3NwYW4+IHJlc3BvbnNlLmpzb24oKTsKfTs8L2NvZGU+PC9wcmU+CgogICAgICAgICAgICA8aDM+SlNPTiBFeGFtcGxlPC9oMz4KICAgICAgICAgICAgPHByZT48Y29kZT57CiAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+Im5hbWUiPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4iZGVlcy1jYXRhbG9nIjwvc3Bhbj4sCiAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+InZlcnNpb24iPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4iMy4wLjAiPC9zcGFuPiwKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj4iZGVwZW5kZW5jaWVzIjwvc3Bhbj46IHsKICAgIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPiJAZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQiPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4iXjIuMC4wIjwvc3Bhbj4KICB9Cn08L2NvZGU+PC9wcmU+CiAgICAgICAgICBgKX19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDU6IFRhYmxlcyAtLT4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiVGFibGVzIn0KICAgICAgICAuc3VidGl0bGU9JHsiU3R5bGVkIHRhYmxlcyB3aXRoIGFsdGVybmF0aW5nIHJvd3MifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnthd2FpdCB0LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRoPkZlYXR1cmU8L3RoPgogICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD4KICAgICAgICAgICAgICAgICAgPHRoPlByaW9yaXR5PC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5EYXJrIG1vZGUgc3VwcG9ydDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Db21wbGV0ZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+UmVzcG9uc2l2ZSBkZXNpZ248L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SW4gUHJvZ3Jlc3M8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+TWVkaXVtPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5BY2Nlc3NpYmlsaXR5PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPlBsYW5uZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+RG9jdW1lbnRhdGlvbjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5JbiBQcm9ncmVzczwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Mb3c8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgYCl9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA2OiBCbG9ja3F1b3RlcyAmIEFsZXJ0cyAtLT4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiQmxvY2txdW90ZXMgJiBBbGVydHMifQogICAgICAgIC5zdWJ0aXRsZT0keyJRdW90ZXMgYW5kIEdpdEh1Yi1zdHlsZSBhbGVydHMifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnthd2FpdCB0LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPGJsb2NrcXVvdGU+CiAgICAgICAgICAgICAgPHA+VGhpcyBpcyBhIHN0YW5kYXJkIGJsb2NrcXVvdGUuIEl0J3MgZ3JlYXQgZm9yIGhpZ2hsaWdodGluZyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gb3IgcXVvdGVzIGZyb20gb3RoZXIgc291cmNlcy48L3A+CiAgICAgICAgICAgIDwvYmxvY2txdW90ZT4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LW5vdGUiPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBpcyBhbiBpbmZvcm1hdGlvbmFsIG5vdGUgdG8gZHJhdyBhdHRlbnRpb24gdG8gaW1wb3J0YW50IGRldGFpbHMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LXRpcCI+CiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5UaXA6PC9zdHJvbmc+IEhlcmUncyBhIGhlbHBmdWwgdGlwIHRvIGltcHJvdmUgeW91ciB3b3JrZmxvdy48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYWxlcnQgbWFya2Rvd24tYWxlcnQtaW1wb3J0YW50Ij4KICAgICAgICAgICAgICA8cD48c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB0b3BpYy48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYWxlcnQgbWFya2Rvd24tYWxlcnQtd2FybmluZyI+CiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiBCZSBjYXJlZnVsIHdoZW4gcGVyZm9ybWluZyB0aGlzIGFjdGlvbi48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYWxlcnQgbWFya2Rvd24tYWxlcnQtY2F1dGlvbiI+CiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5DYXV0aW9uOjwvc3Ryb25nPiBUaGlzIGFjdGlvbiBtYXkgaGF2ZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA3OiBGdWxsIERvY3VtZW50IC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJGdWxsIERvY3VtZW50In0KICAgICAgICAuc3VidGl0bGU9JHsiQSBjb21wbGV0ZSBtYXJrZG93biBkb2N1bWVudCBleGFtcGxlIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57YXdhaXQgdC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldCIpPy51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxoMT5HZXR0aW5nIFN0YXJ0ZWQgR3VpZGU8L2gxPgogICAgICAgICAgICA8cD5XZWxjb21lIHRvIHRoZSA8c3Ryb25nPmRlZXMtY2F0YWxvZzwvc3Ryb25nPiBjb21wb25lbnQgbGlicmFyeS4gVGhpcyBndWlkZSB3aWxsIGhlbHAgeW91IGdldCB1cCBhbmQgcnVubmluZyBxdWlja2x5LjwvcD4KCiAgICAgICAgICAgIDxoMj5JbnN0YWxsYXRpb248L2gyPgogICAgICAgICAgICA8cD5JbnN0YWxsIHRoZSBwYWNrYWdlIHVzaW5nIHlvdXIgcHJlZmVycmVkIHBhY2thZ2UgbWFuYWdlcjo8L3A+CiAgICAgICAgICAgIDxwcmU+PGNvZGU+PHNwYW4gY2xhc3M9ImhsanMtY29tbWVudCI+IyBVc2luZyBwbnBtIChyZWNvbW1lbmRlZCk8L3NwYW4+CnBucG0gYWRkIEBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZwoKPHNwYW4gY2xhc3M9ImhsanMtY29tbWVudCI+IyBVc2luZyBucG08L3NwYW4+Cm5wbSBpbnN0YWxsIEBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZzwvY29kZT48L3ByZT4KCiAgICAgICAgICAgIDxoMj5CYXNpYyBVc2FnZTwvaDI+CiAgICAgICAgICAgIDxwPkltcG9ydCBhbmQgdXNlIGNvbXBvbmVudHMgaW4geW91ciBUeXBlU2NyaXB0IGZpbGVzOjwvcD4KICAgICAgICAgICAgPHByZT48Y29kZT48c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5pbXBvcnQ8L3NwYW4+IHsgRGVlc0J1dHRvbiB9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmZyb208L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXN0cmluZyI+J0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyc8L3NwYW4+OwoKPHNwYW4gY2xhc3M9ImhsanMtY29tbWVudCI+Ly8gVXNlIGluIHlvdXIgdGVtcGxhdGVzPC9zcGFuPgpodG1sXGAmbHQ7ZGVlcy1idXR0b24mZ3Q7Q2xpY2sgbWUmbHQ7L2RlZXMtYnV0dG9uJmd0O1xgPC9jb2RlPjwvcHJlPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYWxlcnQgbWFya2Rvd24tYWxlcnQtdGlwIj4KICAgICAgICAgICAgICA8cD48c3Ryb25nPlRpcDo8L3N0cm9uZz4gQ2hlY2sgdGhlIGRlbW8gc2hvd2Nhc2UgZm9yIGxpdmUgZXhhbXBsZXMgb2YgYWxsIGNvbXBvbmVudHMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxoMj5BdmFpbGFibGUgQ29tcG9uZW50czwvaDI+CiAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0aD5Db21wb25lbnQ8L3RoPgogICAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPmRlZXMtYnV0dG9uPC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5QcmltYXJ5IGJ1dHRvbiBjb21wb25lbnQ8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPmRlZXMtaW5wdXQtdGV4dDwvY29kZT48L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+VGV4dCBpbnB1dCBmaWVsZDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy10YWJsZTwvY29kZT48L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+RGF0YSB0YWJsZSB3aXRoIHNvcnRpbmc8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPmRlZXMtbW9kYWw8L2NvZGU+PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPk1vZGFsIGRpYWxvZzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgIDwvdGFibGU+CgogICAgICAgICAgICA8aDI+TmV4dCBTdGVwczwvaDI+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+RXhwbG9yZSB0aGUgPGEgaHJlZj0iIyI+Y29tcG9uZW50IGRvY3VtZW50YXRpb248L2E+PC9saT4KICAgICAgICAgICAgICA8bGk+Q2hlY2sgb3V0IHRoZSA8YSBocmVmPSIjIj50aGVtaW5nIGd1aWRlPC9hPjwvbGk+CiAgICAgICAgICAgICAgPGxpPkpvaW4gb3VyIDxhIGhyZWY9IiMiPmNvbW11bml0eSBEaXNjb3JkPC9hPjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8YmxvY2txdW90ZT4KICAgICAgICAgICAgICA8cD4iVGhlIGJlc3QgY29tcG9uZW50IGxpYnJhcnkgaXMgb25lIHRoYXQgZ2V0cyBvdXQgb2YgeW91ciB3YXkuIiBcdTIwMTQgRGVzaWduIFN5c3RlbXMgVGVhbTwvcD4KICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgogICAgICAgICAgYCl9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDtmZSgpO0JlKCk7dmFyIFdzMT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LEdzMT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sWXMxPSgoKT0+e2xldCB0PVtjZSgiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKV0sZSxhPVtdLHIsaT1wZTt2YXIgbz1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IHM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7V3MxKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOnN9LG51bGwsYSksbz1yPWUudmFsdWUscyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSl9c3RhdGljIGRlbW89cE90O3N0YXRpYyBkZW1vR3JvdXA9IldvcmtzcGFjZSI7c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ05vdG8gU2FucycsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMjQyOTJmIiwiI2U2ZWRmMyIpfTsKICAgICAgfQoKICAgICAgLm91dGxldCB7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAvKiBIZWFkaW5ncyAqLwogICAgICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMxZjIzMjgiLCIjZjBmNmZjIil9OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZm9udC1zaXplOiAyZW07CiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuM2VtOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2QxZDllMCIsIiMzMDM2M2QiKX07CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBmb250LXNpemU6IDEuNWVtOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjNlbTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNkMWQ5ZTAiLCIjMzAzNjNkIil9OwogICAgICB9CgogICAgICBoMyB7CiAgICAgICAgZm9udC1zaXplOiAxLjI1ZW07CiAgICAgIH0KCiAgICAgIGg0IHsKICAgICAgICBmb250LXNpemU6IDFlbTsKICAgICAgfQoKICAgICAgaDUgewogICAgICAgIGZvbnQtc2l6ZTogMC44NzVlbTsKICAgICAgfQoKICAgICAgaDYgewogICAgICAgIGZvbnQtc2l6ZTogMC44NWVtOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzY1NmQ3NiIsIiM4Yjk0OWUiKX07CiAgICAgIH0KCiAgICAgIC8qIFBhcmFncmFwaHMgYW5kIHRleHQgKi8KICAgICAgcCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAvKiBMaW5rcyAqLwogICAgICBhIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTY5ZGEiLCIjNThhNmZmIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgfQoKICAgICAgYTpob3ZlciB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0cm9uZyBhbmQgZW1waGFzaXMgKi8KICAgICAgc3Ryb25nIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzFmMjMyOCIsIiNmMGY2ZmMiKX07CiAgICAgIH0KCiAgICAgIGVtIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC8qIExpc3RzICovCiAgICAgIHVsLCBvbCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMmVtOwogICAgICB9CgogICAgICBsaSB7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CgogICAgICBsaSArIGxpIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIHVsIHVsLCB1bCBvbCwgb2wgdWwsIG9sIG9sIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIEJsb2NrcXVvdGVzICovCiAgICAgIGJsb2NrcXVvdGUgewogICAgICAgIG1hcmdpbjogMCAwIDE2cHggMDsKICAgICAgICBwYWRkaW5nOiAwIDFlbTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM2NTZkNzYiLCIjOGI5NDllIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgJHtwLmJkVGhlbWUoIiNkMWQ5ZTAiLCIjMzAzNjNkIil9OwogICAgICB9CgogICAgICBibG9ja3F1b3RlID4gOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CgogICAgICBibG9ja3F1b3RlID4gOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIElubGluZSBjb2RlICovCiAgICAgIGNvZGUgewogICAgICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXNpemU6IDg1JTsKICAgICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgJ1NGIE1vbm8nLCBNZW5sbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtwLmJkVGhlbWUoInJnYmEoMTc1LCAxODQsIDE5MywgMC4yKSIsInJnYmEoMTEwLCAxMTgsIDEyOSwgMC40KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlczsKICAgICAgfQoKICAgICAgLyogQ29kZSBibG9ja3MgKi8KICAgICAgcHJlIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBmb250LXNpemU6IDg1JTsKICAgICAgICBsaW5lLWhlaWdodDogMS40NTsKICAgICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgJ1NGIE1vbm8nLCBNZW5sbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtwLmJkVGhlbWUoIiNmNmY4ZmEiLCIjMTYxYjIyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB3b3JkLXdyYXA6IG5vcm1hbDsKICAgICAgfQoKICAgICAgcHJlIGNvZGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHdvcmQtd3JhcDogbm9ybWFsOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBmb250LXNpemU6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICAgfQoKICAgICAgLyogVGFibGVzICovCiAgICAgIHRhYmxlIHsKICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICB0YWJsZSB0aCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2QxZDllMCIsIiMzMDM2M2QiKX07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtwLmJkVGhlbWUoIiNmNmY4ZmEiLCIjMTYxYjIyIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzFmMjMyOCIsIiNlNmVkZjMiKX07CiAgICAgIH0KCiAgICAgIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2QxZDllMCIsIiMzMDM2M2QiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMWYyMzI4IiwiI2U2ZWRmMyIpfTsKICAgICAgfQoKICAgICAgdGFibGUgdHIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzBkMTExNyIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNkMWQ5ZTAiLCIjMjEyNjJkIil9OwogICAgICB9CgogICAgICB0YWJsZSB0cjpudGgtY2hpbGQoMm4pIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3AuYmRUaGVtZSgiI2Y2ZjhmYSIsIiMxNjFiMjIiKX07CiAgICAgIH0KCiAgICAgIC8qIEhvcml6b250YWwgcnVsZXMgKi8KICAgICAgaHIgewogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAyNHB4IDA7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtwLmJkVGhlbWUoIiNkMWQ5ZTAiLCIjMzAzNjNkIil9OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIH0KCiAgICAgIC8qIEltYWdlcyAqLwogICAgICBpbWcgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgfQoKICAgICAgLyogVGFzayBsaXN0cyAqLwogICAgICAudGFzay1saXN0LWl0ZW0gewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgfQoKICAgICAgLnRhc2stbGlzdC1pdGVtIGlucHV0IHsKICAgICAgICBtYXJnaW46IDAgMC4yZW0gMC4yNWVtIC0xLjRlbTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAvKiBEZWZpbml0aW9uIGxpc3RzICovCiAgICAgIGRsIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICBkbCBkdCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMWVtOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICBkbCBkZCB7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC8qIEtleWJvYXJkIGlucHV0ICovCiAgICAgIGtiZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBhZGRpbmc6IDNweCA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCAnU0YgTW9ubycsIE1lbmxvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBsaW5lLWhlaWdodDogMTBweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMxZjIzMjgiLCIjZTZlZGYzIil9OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtwLmJkVGhlbWUoIiNmNmY4ZmEiLCIjMTYxYjIyIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZDFkOWUwIiwiIzMwMzYzZCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgJHtwLmJkVGhlbWUoIiNkMWQ5ZTAiLCIjMzAzNjNkIil9OwogICAgICB9CgogICAgICAvKiBGb290bm90ZXMgKi8KICAgICAgLmZvb3Rub3RlcyB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzY1NmQ3NiIsIiM4Yjk0OWUiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZDFkOWUwIiwiIzMwMzYzZCIpfTsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICB9CgogICAgICAvKiBBbGVydHMvQWRtb25pdGlvbnMgKi8KICAgICAgLm1hcmtkb3duLWFsZXJ0IHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtbm90ZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiIzA5NjlkYSIsIiM1OGE2ZmYiKX07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtwLmJkVGhlbWUoInJnYmEoOSwgMTA1LCAyMTgsIDAuMSkiLCJyZ2JhKDU2LCAxMzksIDI1MywgMC4xKSIpfTsKICAgICAgfQoKICAgICAgLm1hcmtkb3duLWFsZXJ0LXdhcm5pbmcgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiNiZjg3MDAiLCIjZDI5OTIyIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7cC5iZFRoZW1lKCJyZ2JhKDE5MSwgMTM1LCAwLCAwLjEpIiwicmdiYSgxODcsIDEyOCwgOSwgMC4xKSIpfTsKICAgICAgfQoKICAgICAgLm1hcmtkb3duLWFsZXJ0LWltcG9ydGFudCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiIzgyNTBkZiIsIiNhMzcxZjciKX07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtwLmJkVGhlbWUoInJnYmEoMTMwLCA4MCwgMjIzLCAwLjEpIiwicmdiYSgxNjMsIDExMywgMjQ3LCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtY2F1dGlvbiB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiI2NmMjIyZSIsIiNmODUxNDkiKX07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtwLmJkVGhlbWUoInJnYmEoMjA3LCAzNCwgNDYsIDAuMSkiLCJyZ2JhKDI0OCwgODEsIDczLCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtdGlwIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCIjMWE3ZjM3IiwiIzNmYjk1MCIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3AuYmRUaGVtZSgicmdiYSgyNiwgMTI3LCA1NSwgMC4xKSIsInJnYmEoNDYsIDE2MCwgNjcsIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFN5bnRheCBoaWdobGlnaHRpbmcgZm9yIGNvZGUgYmxvY2tzICovCiAgICAgIC5obGpzLWNvbW1lbnQsCiAgICAgIC5obGpzLXF1b3RlIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM2YTczN2QiLCIjOGI5NDllIil9OwogICAgICB9CgogICAgICAuaGxqcy1rZXl3b3JkLAogICAgICAuaGxqcy1zZWxlY3Rvci10YWcsCiAgICAgIC5obGpzLWFkZGl0aW9uIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiNkNzNhNDkiLCIjZmY3YjcyIil9OwogICAgICB9CgogICAgICAuaGxqcy1udW1iZXIsCiAgICAgIC5obGpzLXN0cmluZywKICAgICAgLmhsanMtbWV0YSAuaGxqcy1tZXRhLXN0cmluZywKICAgICAgLmhsanMtbGl0ZXJhbCwKICAgICAgLmhsanMtZG9jdGFnLAogICAgICAuaGxqcy1yZWdleHAgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzAzMmY2MiIsIiNhNWQ2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLXRpdGxlLAogICAgICAuaGxqcy1zZWN0aW9uLAogICAgICAuaGxqcy1uYW1lLAogICAgICAuaGxqcy1zZWxlY3Rvci1pZCwKICAgICAgLmhsanMtc2VsZWN0b3ItY2xhc3MgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzZmNDJjMSIsIiNkMmE4ZmYiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWF0dHJpYnV0ZSwKICAgICAgLmhsanMtYXR0ciwKICAgICAgLmhsanMtdmFyaWFibGUsCiAgICAgIC5obGpzLXRlbXBsYXRlLXZhcmlhYmxlLAogICAgICAuaGxqcy1jbGFzcyAuaGxqcy10aXRsZSwKICAgICAgLmhsanMtdHlwZSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDA1Y2M1IiwiIzc5YzBmZiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtc3ltYm9sLAogICAgICAuaGxqcy1idWxsZXQsCiAgICAgIC5obGpzLXN1YnN0LAogICAgICAuaGxqcy1tZXRhLAogICAgICAuaGxqcy1tZXRhIC5obGpzLWtleXdvcmQsCiAgICAgIC5obGpzLXNlbGVjdG9yLWF0dHIsCiAgICAgIC5obGpzLXNlbGVjdG9yLXBzZXVkbywKICAgICAgLmhsanMtbGluayB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjZTM2MjA5IiwiI2ZmYTY1NyIpfTsKICAgICAgfQoKICAgICAgLmhsanMtYnVpbHRfaW4sCiAgICAgIC5obGpzLWRlbGV0aW9uIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiNiMzFkMjgiLCIjZmZhMTk4Iil9OwogICAgICB9CgogICAgICAuaGxqcy1mb3JtdWxhIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3AuYmRUaGVtZSgiI2Y2ZjhmYSIsIiMxNjFiMjIiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWVtcGhhc2lzIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5obGpzLXN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgIGBdO291dGxldDtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0ib3V0bGV0Ij4KICAgICAgICA8aDE+TWFya2Rvd24gUHJldmlldzwvaDE+CiAgICAgICAgPHA+Q29udGVudCB3aWxsIGFwcGVhciBoZXJlIHdoZW4gbWFya2Rvd24gaXMgcGFyc2VkLjwvcD4KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZChzKXthd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQocyksdGhpcy5vdXRsZXQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5vdXRsZXQiKX1hc3luYyB1cGRhdGVIdG1sVGV4dChzKXthd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLHRoaXMub3V0bGV0fHwodGhpcy5vdXRsZXQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5vdXRsZXQiKSksdGhpcy5vdXRsZXQuaW5uZXJIVE1MPXN9c3RhdGlje0dzMShyLGEpfX07cmV0dXJuIG89cn0pKCk7ZmUoKTt2YXIgaE90PSgpPT5NYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke3RlYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2YzZjRmNjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjMzc0MTUxOwogICAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMmMyYzJjOwogICAgICAgICAgICBjb2xvcjogI2U0ZTRlNzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7CiAgICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICMzYjgyZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogIzFlNDBhZjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxZTNhNWY7CiAgICAgICAgICAgIGNvbG9yOiAjOTNjNWZkOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIExpc3QgSW5wdXQifSAuc3VidGl0bGU9JHsiU2ltcGxlIGxpc3QgbWFuYWdlbWVudCB3aXRoIGFkZCwgZWRpdCwgYW5kIGRlbGV0ZSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJTaG9wcGluZyBMaXN0In0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgaXRlbSB0byB5b3VyIGxpc3QuLi4ifQogICAgICAgICAgLnZhbHVlPSR7WyJNaWxrIiwiQnJlYWQiLCJFZ2dzIiwiQ2hlZXNlIl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRG91YmxlLWNsaWNrIHRvIGVkaXQgaXRlbXMsIG9yIHVzZSB0aGUgZWRpdCBidXR0b24ifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5vdGUiPgogICAgICAgICAg8J+SoSBEb3VibGUtY2xpY2sgYW55IGl0ZW0gdG8gcXVpY2tseSBlZGl0IGl0IGlubGluZQogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gU29ydGFibGUgTGlzdCJ9IC5zdWJ0aXRsZT0keyJEcmFnIGFuZCBkcm9wIHRvIHJlb3JkZXIgaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiVGFzayBQcmlvcml0eSJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGEgdGFzay4uLiJ9CiAgICAgICAgICAuc29ydGFibGU9JHshMH0KICAgICAgICAgIC52YWx1ZT0ke1siUmV2aWV3IHB1bGwgcmVxdWVzdHMiLCJGaXggY3JpdGljYWwgYnVnIiwiVXBkYXRlIGRvY3VtZW50YXRpb24iLCJEZXBsb3kgdG8gcHJvZHVjdGlvbiIsIlRlYW0gc3RhbmR1cCBtZWV0aW5nIl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRHJhZyBpdGVtcyB1c2luZyB0aGUgaGFuZGxlIHRvIHJlb3JkZXIgdGhlbSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbm90ZSI+CiAgICAgICAgICDwn5SEIERyYWcgdGhlIGdyaXAgaGFuZGxlIHRvIHJlb3JkZXIgdGFza3MgYnkgcHJpb3JpdHkKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIFZhbGlkYXRpb24gJiBDb25zdHJhaW50cyJ9IC5zdWJ0aXRsZT0keyJMaXN0cyB3aXRoIG1pbmltdW0vbWF4aW11bSBpdGVtcyBhbmQgZHVwbGljYXRlIHByZXZlbnRpb24ifT4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJUZWFtIE1lbWJlcnMgKE1pbiAyLCBNYXggNSkifQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIHRlYW0gbWVtYmVyLi4uIn0KICAgICAgICAgICAgLm1pbkl0ZW1zPSR7Mn0KICAgICAgICAgICAgLm1heEl0ZW1zPSR7NX0KICAgICAgICAgICAgLnZhbHVlPSR7WyJBbGljZSIsIkJvYiJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCAyLTUgdGVhbSBtZW1iZXJzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVW5pcXVlIFRhZ3MgKE5vIER1cGxpY2F0ZXMpIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCB1bmlxdWUgdGFnLi4uIn0KICAgICAgICAgICAgLmFsbG93RHVwbGljYXRlcz0keyExfQogICAgICAgICAgICAudmFsdWU9JHtbImZyb250ZW5kIiwiYmFja2VuZCIsImRhdGFiYXNlIl19CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJEdXBsaWNhdGUgaXRlbXMgYXJlIG5vdCBhbGxvd2VkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjQuIERlbGV0ZSBDb25maXJtYXRpb24ifSAuc3VidGl0bGU9JHsiUmVxdWlyZSBjb25maXJtYXRpb24gYmVmb3JlIGRlbGV0aW5nIGl0ZW1zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IkltcG9ydGFudCBEb2N1bWVudHMifQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBkb2N1bWVudCBuYW1lLi4uIn0KICAgICAgICAgIC5jb25maXJtRGVsZXRlPSR7ITB9CiAgICAgICAgICAudmFsdWU9JHtbIkNvbnRyYWN0XzIwMjQucGRmIiwiRmluYW5jaWFsX1JlcG9ydF9RMy54bHN4IiwiUHJvamVjdF9Qcm9wb3NhbC5kb2N4IiwiTWVldGluZ19Ob3Rlcy50eHQiXX0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJEZWxldGlvbiByZXF1aXJlcyBjb25maXJtYXRpb24gZm9yIHNhZmV0eSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gRGlzYWJsZWQgU3RhdGUifSAuc3VidGl0bGU9JHsiUmVhZC1vbmx5IGxpc3QgZGlzcGxheSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJTeXN0ZW0gRGVmYXVsdHMifQogICAgICAgICAgLnZhbHVlPSR7WyJEZWZhdWx0IFNldHRpbmcgMSIsIkRlZmF1bHQgU2V0dGluZyAyIiwiRGVmYXVsdCBTZXR0aW5nIDMiXX0KICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoZXNlIGl0ZW1zIGNhbm5vdCBiZSBtb2RpZmllZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJMaXN0IGlucHV0IHdvcmtpbmcgd2l0aGluIGEgZm9ybSBjb250ZXh0In0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlJlY2lwZSBOYW1lIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7Ik15IEFtYXppbmcgUmVjaXBlIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIC5rZXk9JHsibmFtZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIC5sYWJlbD0keyJJbmdyZWRpZW50cyJ9CiAgICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBpbmdyZWRpZW50Li4uIn0KICAgICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAgICAubWluSXRlbXM9JHszfQogICAgICAgICAgICAgIC5rZXk9JHsiaW5ncmVkaWVudHMifQogICAgICAgICAgICAgIC5zb3J0YWJsZT0keyEwfQogICAgICAgICAgICAgIC52YWx1ZT0ke1siMiBjdXBzIGZsb3VyIiwiMSBjdXAgc3VnYXIiLCIzIGVnZ3MiXX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGF0IGxlYXN0IDMgaW5ncmVkaWVudHMifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgICAgLmxhYmVsPSR7Ikluc3RydWN0aW9ucyJ9CiAgICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBpbnN0cnVjdGlvbiBzdGVwLi4uIn0KICAgICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAgICAubWluSXRlbXM9JHsyfQogICAgICAgICAgICAgIC5rZXk9JHsiaW5zdHJ1Y3Rpb25zIn0KICAgICAgICAgICAgICAuc29ydGFibGU9JHshMH0KICAgICAgICAgICAgICAudmFsdWU9JHtbIlByZWhlYXQgb3ZlbiB0byAzNTBceEIwRiIsIk1peCBkcnkgaW5ncmVkaWVudHMiXX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGNvb2tpbmcgaW5zdHJ1Y3Rpb25zIGluIG9yZGVyIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGVzIn0KICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBbnkgc3BlY2lhbCBub3RlcyBvciB0aXBzLi4uIn0KICAgICAgICAgICAgLmtleT0keyJub3RlcyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IC50ZXh0PSR7IlNhdmUgUmVjaXBlIn0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gSW50ZXJhY3RpdmUgRGVtbyJ9IC5zdWJ0aXRsZT0keyJCdWlsZCB5b3VyIG93biBmZWF0dXJlIGxpc3QgYW5kIHNlZSB0aGUgZGF0YSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1saXN0IgogICAgICAgICAgLmxhYmVsPSR7IlByb2R1Y3QgRmVhdHVyZXMifQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBhIGZlYXR1cmUuLi4ifQogICAgICAgICAgLnNvcnRhYmxlPSR7ITB9CiAgICAgICAgICAuY29uZmlybURlbGV0ZT0keyExfQogICAgICAgICAgLmFsbG93RHVwbGljYXRlcz0keyExfQogICAgICAgICAgLm1heEl0ZW1zPSR7MTB9CiAgICAgICAgICBAY2hhbmdlPSR7dD0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNsaXN0LWpzb24iKTtpZihlKXtsZXQgYT17aXRlbXM6dC5kZXRhaWwudmFsdWUsY291bnQ6dC5kZXRhaWwudmFsdWUubGVuZ3RoLHRpbWVzdGFtcDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9O2UudGV4dENvbnRlbnQ9SlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfX19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1wcmV2aWV3IiBpZD0ibGlzdC1qc29uIj4KICAgICAgICAgIHsKICAgICAgICAgICAgIml0ZW1zIjogW10sCiAgICAgICAgICAgICJjb3VudCI6IDAsCiAgICAgICAgICAgICJ0aW1lc3RhbXAiOiAiJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9IgogICAgICAgICAgfQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbm90ZSI+CiAgICAgICAgICDinKggQWRkLCBlZGl0LCByZW1vdmUsIGFuZCByZW9yZGVyIGl0ZW1zIHRvIHNlZSB0aGUgSlNPTiBvdXRwdXQgdXBkYXRlIGluIHJlYWwtdGltZQogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOC4gQWR2YW5jZWQgQ29uZmlndXJhdGlvbiJ9IC5zdWJ0aXRsZT0keyJDb21iaW5lIGFsbCBmZWF0dXJlcyBmb3IgY29tcGxleCB1c2UgY2FzZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiUHJvamVjdCBNaWxlc3RvbmVzIn0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgbWlsZXN0b25lLi4uIn0KICAgICAgICAgIC52YWx1ZT0ke1siUHJvamVjdCBLaWNrb2ZmIC0gV2VlayAxIiwiUmVxdWlyZW1lbnRzIEdhdGhlcmluZyAtIFdlZWsgMi0zIiwiRGVzaWduIFBoYXNlIC0gV2VlayA0LTYiLCJEZXZlbG9wbWVudCBTcHJpbnQgMSAtIFdlZWsgNy05IiwiVGVzdGluZyAmIFFBIC0gV2VlayAxMC0xMSIsIkRlcGxveW1lbnQgLSBXZWVrIDEyIl19CiAgICAgICAgICAuc29ydGFibGU9JHshMH0KICAgICAgICAgIC5jb25maXJtRGVsZXRlPSR7ITB9CiAgICAgICAgICAuYWxsb3dEdXBsaWNhdGVzPSR7ITF9CiAgICAgICAgICAubWluSXRlbXM9JHszfQogICAgICAgICAgLm1heEl0ZW1zPSR7MTJ9CiAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJNYW5hZ2UgcHJvamVjdCBtaWxlc3RvbmVzICgzLTEyIGl0ZW1zLCBzb3J0YWJsZSwgbm8gZHVwbGljYXRlcykifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjkuIEVtcHR5IFN0YXRlIn0gLnN1YnRpdGxlPSR7IkhvdyB0aGUgY29tcG9uZW50IGxvb2tzIHdpdGggbm8gaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiWW91ciBJZGVhcyJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiU2hhcmUgeW91ciBpZGVhcy4uLiJ9CiAgICAgICAgICAudmFsdWU9JHtbXX0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJTdGFydCBhZGRpbmcgaXRlbXMgdG8gYnVpbGQgeW91ciBsaXN0In0KICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDtmZSgpO0Z0KCk7QmUoKTt2YXIgUTE9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSwkdD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sWnMxPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1pbnB1dC1saXN0IildLGUsYT1bXSxyLGk9WGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W10sSCxMPVtdLGs9W10sTixTPVtdLFQ9W10sUixBPVtdLEY9W10sYWUsVj1bXSxTZT1bXSx6ZSxXPVtdLE5lPVtdLFJlLFg9W10sST1bXSxPLEc9W10saj1bXSxzZSxrZT1bXSxEZT1bXSxPZSxVPVtdLEI9W10sb2UsdmU9W10seWU9W107dmFyICRlPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgbmU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpBcnJheX0pXSxmPVtEKHt0eXBlOlN0cmluZ30pXSxkPVtEKHt0eXBlOk51bWJlcn0pXSxiPVtEKHt0eXBlOk51bWJlcn0pXSx2PVtEKHt0eXBlOkJvb2xlYW59KV0sRT1bRCh7dHlwZTpCb29sZWFufSldLFA9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxIPVtEKHt0eXBlOlN0cmluZ30pXSxOPVtsZSgpXSxSPVtsZSgpXSxhZT1bbGUoKV0semU9W2xlKCldLFJlPVtsZSgpXSxPPVtsZSgpXSxzZT1bbGUoKV0sT2U9W2xlKCldLG9lPVtsZSgpXSxRMSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpyZT0+InZhbHVlImluIHJlLGdldDpyZT0+cmUudmFsdWUsc2V0OihyZSxnZSk9PntyZS52YWx1ZT1nZX19LG1ldGFkYXRhOm5lfSxzLGwpLFExKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicGxhY2Vob2xkZXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnJlPT4icGxhY2Vob2xkZXIiaW4gcmUsZ2V0OnJlPT5yZS5wbGFjZWhvbGRlcixzZXQ6KHJlLGdlKT0+e3JlLnBsYWNlaG9sZGVyPWdlfX0sbWV0YWRhdGE6bmV9LGMsdSksUTEodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYXhJdGVtcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6cmU9PiJtYXhJdGVtcyJpbiByZSxnZXQ6cmU9PnJlLm1heEl0ZW1zLHNldDoocmUsZ2UpPT57cmUubWF4SXRlbXM9Z2V9fSxtZXRhZGF0YTpuZX0saCxnKSxRMSh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1pbkl0ZW1zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpyZT0+Im1pbkl0ZW1zImluIHJlLGdldDpyZT0+cmUubWluSXRlbXMsc2V0OihyZSxnZSk9PntyZS5taW5JdGVtcz1nZX19LG1ldGFkYXRhOm5lfSx4LG0pLFExKHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWxsb3dEdXBsaWNhdGVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpyZT0+ImFsbG93RHVwbGljYXRlcyJpbiByZSxnZXQ6cmU9PnJlLmFsbG93RHVwbGljYXRlcyxzZXQ6KHJlLGdlKT0+e3JlLmFsbG93RHVwbGljYXRlcz1nZX19LG1ldGFkYXRhOm5lfSx5LHcpLFExKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic29ydGFibGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnJlPT4ic29ydGFibGUiaW4gcmUsZ2V0OnJlPT5yZS5zb3J0YWJsZSxzZXQ6KHJlLGdlKT0+e3JlLnNvcnRhYmxlPWdlfX0sbWV0YWRhdGE6bmV9LEMseiksUTEodGhpcyxudWxsLFAse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb25maXJtRGVsZXRlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpyZT0+ImNvbmZpcm1EZWxldGUiaW4gcmUsZ2V0OnJlPT5yZS5jb25maXJtRGVsZXRlLHNldDoocmUsZ2UpPT57cmUuY29uZmlybURlbGV0ZT1nZX19LG1ldGFkYXRhOm5lfSxfLCQpLFExKHRoaXMsbnVsbCxILHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsaWRhdGlvblRleHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnJlPT4idmFsaWRhdGlvblRleHQiaW4gcmUsZ2V0OnJlPT5yZS52YWxpZGF0aW9uVGV4dCxzZXQ6KHJlLGdlKT0+e3JlLnZhbGlkYXRpb25UZXh0PWdlfX0sbWV0YWRhdGE6bmV9LEwsayksUTEodGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpbnB1dFZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpyZT0+ImlucHV0VmFsdWUiaW4gcmUsZ2V0OnJlPT5yZS5pbnB1dFZhbHVlLHNldDoocmUsZ2UpPT57cmUuaW5wdXRWYWx1ZT1nZX19LG1ldGFkYXRhOm5lfSxTLFQpLFExKHRoaXMsbnVsbCxSLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZWRpdGluZ0luZGV4IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpyZT0+ImVkaXRpbmdJbmRleCJpbiByZSxnZXQ6cmU9PnJlLmVkaXRpbmdJbmRleCxzZXQ6KHJlLGdlKT0+e3JlLmVkaXRpbmdJbmRleD1nZX19LG1ldGFkYXRhOm5lfSxBLEYpLFExKHRoaXMsbnVsbCxhZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImVkaXRpbmdWYWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6cmU9PiJlZGl0aW5nVmFsdWUiaW4gcmUsZ2V0OnJlPT5yZS5lZGl0aW5nVmFsdWUsc2V0OihyZSxnZSk9PntyZS5lZGl0aW5nVmFsdWU9Z2V9fSxtZXRhZGF0YTpuZX0sVixTZSksUTEodGhpcyxudWxsLHplLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZHJhZ2dlZEluZGV4IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpyZT0+ImRyYWdnZWRJbmRleCJpbiByZSxnZXQ6cmU9PnJlLmRyYWdnZWRJbmRleCxzZXQ6KHJlLGdlKT0+e3JlLmRyYWdnZWRJbmRleD1nZX19LG1ldGFkYXRhOm5lfSxXLE5lKSxRMSh0aGlzLG51bGwsUmUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkcmFnT3ZlckluZGV4IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpyZT0+ImRyYWdPdmVySW5kZXgiaW4gcmUsZ2V0OnJlPT5yZS5kcmFnT3ZlckluZGV4LHNldDoocmUsZ2UpPT57cmUuZHJhZ092ZXJJbmRleD1nZX19LG1ldGFkYXRhOm5lfSxYLEkpLFExKHRoaXMsbnVsbCxPLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZHJhZ1N0YXJ0WSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6cmU9PiJkcmFnU3RhcnRZImluIHJlLGdldDpyZT0+cmUuZHJhZ1N0YXJ0WSxzZXQ6KHJlLGdlKT0+e3JlLmRyYWdTdGFydFk9Z2V9fSxtZXRhZGF0YTpuZX0sRyxqKSxRMSh0aGlzLG51bGwsc2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkcmFnQ3VycmVudFkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnJlPT4iZHJhZ0N1cnJlbnRZImluIHJlLGdldDpyZT0+cmUuZHJhZ0N1cnJlbnRZLHNldDoocmUsZ2UpPT57cmUuZHJhZ0N1cnJlbnRZPWdlfX0sbWV0YWRhdGE6bmV9LGtlLERlKSxRMSh0aGlzLG51bGwsT2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YXJnZXRJbmRleCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6cmU9PiJ0YXJnZXRJbmRleCJpbiByZSxnZXQ6cmU9PnJlLnRhcmdldEluZGV4LHNldDoocmUsZ2UpPT57cmUudGFyZ2V0SW5kZXg9Z2V9fSxtZXRhZGF0YTpuZX0sVSxCKSxRMSh0aGlzLG51bGwsb2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpdGVtSGVpZ2h0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpyZT0+Iml0ZW1IZWlnaHQiaW4gcmUsZ2V0OnJlPT5yZS5pdGVtSGVpZ2h0LHNldDoocmUsZ2UpPT57cmUuaXRlbUhlaWdodD1nZX19LG1ldGFkYXRhOm5lfSx2ZSx5ZSksUTEobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6bmV9LG51bGwsYSksJGU9cj1lLnZhbHVlLG5lJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm5lfSl9c3RhdGljIGRlbW89aE90O3N0YXRpYyBkZW1vR3JvdXA9IklucHV0IjsjZT0kdCh0aGlzLHMsW10pO2dldCB2YWx1ZSgpe3JldHVybiB0aGlzLiNlfXNldCB2YWx1ZShuZSl7dGhpcy4jZT1uZX0jdD0oJHQodGhpcyxsKSwkdCh0aGlzLGMsIkFkZCBuZXcgaXRlbS4uLiIpKTtnZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy4jdH1zZXQgcGxhY2Vob2xkZXIobmUpe3RoaXMuI3Q9bmV9I2E9KCR0KHRoaXMsdSksJHQodGhpcyxoLDApKTtnZXQgbWF4SXRlbXMoKXtyZXR1cm4gdGhpcy4jYX1zZXQgbWF4SXRlbXMobmUpe3RoaXMuI2E9bmV9I3I9KCR0KHRoaXMsZyksJHQodGhpcyx4LDApKTtnZXQgbWluSXRlbXMoKXtyZXR1cm4gdGhpcy4jcn1zZXQgbWluSXRlbXMobmUpe3RoaXMuI3I9bmV9I2k9KCR0KHRoaXMsbSksJHQodGhpcyx5LCExKSk7Z2V0IGFsbG93RHVwbGljYXRlcygpe3JldHVybiB0aGlzLiNpfXNldCBhbGxvd0R1cGxpY2F0ZXMobmUpe3RoaXMuI2k9bmV9I289KCR0KHRoaXMsdyksJHQodGhpcyxDLCExKSk7Z2V0IHNvcnRhYmxlKCl7cmV0dXJuIHRoaXMuI299c2V0IHNvcnRhYmxlKG5lKXt0aGlzLiNvPW5lfSNzPSgkdCh0aGlzLHopLCR0KHRoaXMsXywhMSkpO2dldCBjb25maXJtRGVsZXRlKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGNvbmZpcm1EZWxldGUobmUpe3RoaXMuI3M9bmV9I249KCR0KHRoaXMsJCksJHQodGhpcyxMLCIiKSk7Z2V0IHZhbGlkYXRpb25UZXh0KCl7cmV0dXJuIHRoaXMuI259c2V0IHZhbGlkYXRpb25UZXh0KG5lKXt0aGlzLiNuPW5lfSNsPSgkdCh0aGlzLGspLCR0KHRoaXMsUywiIikpO2dldCBpbnB1dFZhbHVlKCl7cmV0dXJuIHRoaXMuI2x9c2V0IGlucHV0VmFsdWUobmUpe3RoaXMuI2w9bmV9I2M9KCR0KHRoaXMsVCksJHQodGhpcyxBLC0xKSk7Z2V0IGVkaXRpbmdJbmRleCgpe3JldHVybiB0aGlzLiNjfXNldCBlZGl0aW5nSW5kZXgobmUpe3RoaXMuI2M9bmV9I2Q9KCR0KHRoaXMsRiksJHQodGhpcyxWLCIiKSk7Z2V0IGVkaXRpbmdWYWx1ZSgpe3JldHVybiB0aGlzLiNkfXNldCBlZGl0aW5nVmFsdWUobmUpe3RoaXMuI2Q9bmV9I2Y9KCR0KHRoaXMsU2UpLCR0KHRoaXMsVywtMSkpO2dldCBkcmFnZ2VkSW5kZXgoKXtyZXR1cm4gdGhpcy4jZn1zZXQgZHJhZ2dlZEluZGV4KG5lKXt0aGlzLiNmPW5lfSN1PSgkdCh0aGlzLE5lKSwkdCh0aGlzLFgsLTEpKTtnZXQgZHJhZ092ZXJJbmRleCgpe3JldHVybiB0aGlzLiN1fXNldCBkcmFnT3ZlckluZGV4KG5lKXt0aGlzLiN1PW5lfSNwPSgkdCh0aGlzLEkpLCR0KHRoaXMsRywwKSk7Z2V0IGRyYWdTdGFydFkoKXtyZXR1cm4gdGhpcy4jcH1zZXQgZHJhZ1N0YXJ0WShuZSl7dGhpcy4jcD1uZX0jaD0oJHQodGhpcyxqKSwkdCh0aGlzLGtlLDApKTtnZXQgZHJhZ0N1cnJlbnRZKCl7cmV0dXJuIHRoaXMuI2h9c2V0IGRyYWdDdXJyZW50WShuZSl7dGhpcy4jaD1uZX0jbT0oJHQodGhpcyxEZSksJHQodGhpcyxVLC0xKSk7Z2V0IHRhcmdldEluZGV4KCl7cmV0dXJuIHRoaXMuI219c2V0IHRhcmdldEluZGV4KG5lKXt0aGlzLiNtPW5lfSNnPSgkdCh0aGlzLEIpLCR0KHRoaXMsdmUsMCkpO2dldCBpdGVtSGVpZ2h0KCl7cmV0dXJuIHRoaXMuI2d9c2V0IGl0ZW1IZWlnaHQobmUpe3RoaXMuI2c9bmV9Ym91bmRIYW5kbGVHbG9iYWxEcmFnT3Zlcj0oJHQodGhpcyx5ZSksbnVsbCk7Ym91bmRIYW5kbGVHbG9iYWxEcmFnRW5kPW51bGw7b3JpZ2luYWxJdGVtUmVjdHM9W107c3RhdGljIHN0eWxlcz1beGUsLi4uWGUuYmFzZVN0eWxlcyxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5saXN0LWNvbnRhaW5lcjpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXI6Zm9jdXMtd2l0aGluIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtwLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXIuZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICAubGlzdC1pdGVtcyB7CiAgICAgICAgbWF4LWhlaWdodDogNDAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgLmxpc3QtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIGJveC1zaGFkb3cgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgLyogUHJldmVudCBhbmltYXRpb24gZnJvbSBhZmZlY3Rpbmcgc2Nyb2xsIGJvdW5kcyAqLwogICAgICB9CgogICAgICAubGlzdC1pdGVtOmxhc3Qtb2YtdHlwZSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgfQoKICAgICAgLmxpc3QtaXRlbXM6bm90KC5pcy1kcmFnZ2luZykgLmxpc3QtaXRlbTpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk3LjUlKSIsImhzbCgwIDAlIDYuOSUpIil9OwogICAgICB9CgogICAgICAvKiBEcmFnZ2luZyBpdGVtIC0gZm9sbG93cyBjdXJzb3IgKi8KICAgICAgLmxpc3QtaXRlbS5kcmFnZ2luZyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsImhzbCgyMTUgMjAuMiUgMTIlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwicmdiYSgwLCAwLCAwLCAwLjQpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMTVzIGVhc2UsIGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLyogSXRlbXMgdGhhdCBuZWVkIHRvIG1vdmUgdXAgdG8gbWFrZSBzcGFjZSAqLwogICAgICAubGlzdC1pdGVtLm1vdmUtdXAgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKC0xICogdmFyKC0taXRlbS1oZWlnaHQsIDQ4cHgpKSk7CiAgICAgIH0KCiAgICAgIC8qIEl0ZW1zIHRoYXQgbmVlZCB0byBtb3ZlIGRvd24gdG8gbWFrZSBzcGFjZSAqLwogICAgICAubGlzdC1pdGVtLm1vdmUtZG93biB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLWl0ZW0taGVpZ2h0LCA0OHB4KSk7CiAgICAgIH0KCgogICAgICAuZHJhZy1oYW5kbGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBjdXJzb3I6IG1vdmU7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmRyYWctaGFuZGxlOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmRyYWctaGFuZGxlIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuaXRlbS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5pdGVtLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAuaXRlbS1lZGl0LWlucHV0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAuaXRlbS1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnNhdmUgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnNhdmU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUgLyAwLjEpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uY2FuY2VsIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsImhzbCgwIDYyLjglIDUwLjYlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uY2FuY2VsOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwiaHNsKDAgNjIuOCUgNTAuNiUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5kZWxldGUgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwiaHNsKDAgNjIuOCUgNTAuNiUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5kZWxldGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiLCJoc2woMCA2Mi44JSA1MC42JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICB9CgogICAgICAuYWRkLWl0ZW0tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTcuNSUpIiwiaHNsKDAgMCUgNi45JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5hZGQtaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmFkZC1pbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7cC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmFkZC1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICB9CgogICAgICAuYWRkLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmFkZC1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDMycHggMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLnZhbGlkYXRpb24tbWVzc2FnZSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAuZGVzY3JpcHRpb24gewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLmxpc3QtaXRlbXM6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAyNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCJoc2woMCAwJSAzNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERpc2FibGUgdHJhbnNpdGlvbnMgZHVyaW5nIGRyb3AgdG8gcHJldmVudCBmbGFzaCAqLwogICAgICAubGlzdC1pdGVtcy5kcm9wcGluZyAubGlzdC1pdGVtIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWw/TWA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YDoiIn0KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJsaXN0LWNvbnRhaW5lciAke3RoaXMuZGlzYWJsZWQ/ImRpc2FibGVkIjoiIn0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGlzdC1pdGVtcyI+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZS5sZW5ndGg+MD90aGlzLnZhbHVlLm1hcCgobmUscmUpPT5NYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJsaXN0LWl0ZW0gJHt0aGlzLmRyYWdnZWRJbmRleD09PXJlPyJkcmFnZ2luZyI6IiJ9IgogICAgICAgICAgICAgICAgZHJhZ2dhYmxlPSIke3RoaXMuc29ydGFibGUmJiF0aGlzLmRpc2FibGVkfSIKICAgICAgICAgICAgICAgIEBkcmFnc3RhcnQ9JHtnZT0+dGhpcy5oYW5kbGVEcmFnU3RhcnQoZ2UscmUpfQogICAgICAgICAgICAgICAgQGRyYWdlbmQ9JHt0aGlzLmhhbmRsZURyYWdFbmR9CiAgICAgICAgICAgICAgICBAZHJhZ292ZXI9JHtnZT0+dGhpcy5oYW5kbGVEcmFnT3ZlcihnZSxyZSl9CiAgICAgICAgICAgICAgICBAZHJvcD0ke2dlPT50aGlzLmhhbmRsZURyb3AoZ2UscmUpfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICR7dGhpcy5zb3J0YWJsZSYmIXRoaXMuZGlzYWJsZWQ/TWAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHJhZy1oYW5kbGUiPgogICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmdyaXBWZXJ0aWNhbCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0tY29udGVudCI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5lZGl0aW5nSW5kZXg9PT1yZT9NYAogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpdGVtLWVkaXQtaW5wdXQiCiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLmVkaXRpbmdWYWx1ZX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0ke2dlPT50aGlzLmVkaXRpbmdWYWx1ZT1nZS50YXJnZXQudmFsdWV9CiAgICAgICAgICAgICAgICAgICAgICBAa2V5ZG93bj0ke2dlPT50aGlzLmhhbmRsZUVkaXRLZXlEb3duKGdlLHJlKX0KICAgICAgICAgICAgICAgICAgICAgIEBibHVyPSR7KCk9PnRoaXMuc2F2ZUVkaXQocmUpfQogICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgIGA6TWAKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLXRleHQiIEBkYmxjbGljaz0keygpPT4hdGhpcy5kaXNhYmxlZCYmdGhpcy5zdGFydEVkaXQocmUpfT4KICAgICAgICAgICAgICAgICAgICAgICR7bmV9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1hY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLmVkaXRpbmdJbmRleD09PXJlP01gCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiBzYXZlIiBAY2xpY2s9JHsoKT0+dGhpcy5zYXZlRWRpdChyZSl9PgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2hlY2sifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIGNhbmNlbCIgQGNsaWNrPSR7KCk9PnRoaXMuY2FuY2VsRWRpdCgpfT4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgYDpNYAogICAgICAgICAgICAgICAgICAgICR7dGhpcy5kaXNhYmxlZD8iIjpNYAogICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiIgQGNsaWNrPSR7KCk9PnRoaXMuc3RhcnRFZGl0KHJlKX0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnBlbmNpbCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIGRlbGV0ZSIgQGNsaWNrPSR7KCk9PnRoaXMucmVtb3ZlSXRlbShyZSl9PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp0cmFzaDIifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCk6TWAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgICBObyBpdGVtcyBhZGRlZCB5ZXQKICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkJiYoIXRoaXMubWF4SXRlbXN8fHRoaXMudmFsdWUubGVuZ3RoPHRoaXMubWF4SXRlbXMpP01gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkZC1pdGVtLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgY2xhc3M9ImFkZC1pbnB1dCIKICAgICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke3RoaXMucGxhY2Vob2xkZXJ9CiAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLmlucHV0VmFsdWV9CiAgICAgICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZUlucHV0fQogICAgICAgICAgICAgICAgQGtleWRvd249JHt0aGlzLmhhbmRsZUFkZEtleURvd259CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0iYWRkLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuYWRkSXRlbX0KICAgICAgICAgICAgICAgID9kaXNhYmxlZD0keyF0aGlzLmlucHV0VmFsdWUudHJpbSgpfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnBsdXMifT48L2RlZXMtaWNvbj4gQWRkCiAgICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOiIifQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMudmFsaWRhdGlvblRleHQ/TWAKICAgICAgICAgIDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSI+JHt0aGlzLnZhbGlkYXRpb25UZXh0fTwvZGl2PgogICAgICAgIGA6IiJ9CiAgICAgICAgCiAgICAgICAgJHt0aGlzLmRlc2NyaXB0aW9uP01gCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+JHt0aGlzLmRlc2NyaXB0aW9ufTwvZGl2PgogICAgICAgIGA6IiJ9CiAgICAgIDwvZGl2PgogICAgYH1oYW5kbGVJbnB1dChuZSl7dGhpcy5pbnB1dFZhbHVlPW5lLnRhcmdldC52YWx1ZX1oYW5kbGVBZGRLZXlEb3duKG5lKXtuZS5rZXk9PT0iRW50ZXIiJiZ0aGlzLmlucHV0VmFsdWUudHJpbSgpJiYobmUucHJldmVudERlZmF1bHQoKSx0aGlzLmFkZEl0ZW0oKSl9aGFuZGxlRWRpdEtleURvd24obmUscmUpe25lLmtleT09PSJFbnRlciI/KG5lLnByZXZlbnREZWZhdWx0KCksdGhpcy5zYXZlRWRpdChyZSkpOm5lLmtleT09PSJFc2NhcGUiJiYobmUucHJldmVudERlZmF1bHQoKSx0aGlzLmNhbmNlbEVkaXQoKSl9YWRkSXRlbSgpe2xldCBuZT10aGlzLmlucHV0VmFsdWUudHJpbSgpO2lmKCFuZSlyZXR1cm47aWYoIXRoaXMuYWxsb3dEdXBsaWNhdGVzJiZ0aGlzLnZhbHVlLmluY2x1ZGVzKG5lKSl7dGhpcy52YWxpZGF0aW9uVGV4dD0iVGhpcyBpdGVtIGFscmVhZHkgZXhpc3RzIGluIHRoZSBsaXN0IixzZXRUaW1lb3V0KCgpPT50aGlzLnZhbGlkYXRpb25UZXh0PSIiLDNlMyk7cmV0dXJufWlmKHRoaXMubWF4SXRlbXMmJnRoaXMudmFsdWUubGVuZ3RoPj10aGlzLm1heEl0ZW1zKXt0aGlzLnZhbGlkYXRpb25UZXh0PWBNYXhpbXVtICR7dGhpcy5tYXhJdGVtc30gaXRlbXMgYWxsb3dlZGAsc2V0VGltZW91dCgoKT0+dGhpcy52YWxpZGF0aW9uVGV4dD0iIiwzZTMpO3JldHVybn10aGlzLnZhbHVlPVsuLi50aGlzLnZhbHVlLG5lXSx0aGlzLmlucHV0VmFsdWU9IiIsdGhpcy52YWxpZGF0aW9uVGV4dD0iIjtsZXQgcmU9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYWRkLWlucHV0Iik7cmUmJihyZS52YWx1ZT0iIixyZS5mb2N1cygpKSx0aGlzLmVtaXRDaGFuZ2UoKX1zdGFydEVkaXQobmUpe3RoaXMuZWRpdGluZ0luZGV4PW5lLHRoaXMuZWRpdGluZ1ZhbHVlPXRoaXMudmFsdWVbbmVdLHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+e2xldCByZT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5pdGVtLWVkaXQtaW5wdXQiKTtyZSYmKHJlLmZvY3VzKCkscmUuc2VsZWN0KCkpfSl9c2F2ZUVkaXQobmUpe2xldCByZT10aGlzLmVkaXRpbmdWYWx1ZS50cmltKCk7aWYoIXJlKXt0aGlzLmNhbmNlbEVkaXQoKTtyZXR1cm59aWYoIXRoaXMuYWxsb3dEdXBsaWNhdGVzJiZyZSE9PXRoaXMudmFsdWVbbmVdJiZ0aGlzLnZhbHVlLmluY2x1ZGVzKHJlKSl7dGhpcy52YWxpZGF0aW9uVGV4dD0iVGhpcyBpdGVtIGFscmVhZHkgZXhpc3RzIGluIHRoZSBsaXN0IixzZXRUaW1lb3V0KCgpPT50aGlzLnZhbGlkYXRpb25UZXh0PSIiLDNlMyk7cmV0dXJufWxldCBnZT1bLi4udGhpcy52YWx1ZV07Z2VbbmVdPXJlLHRoaXMudmFsdWU9Z2UsdGhpcy5lZGl0aW5nSW5kZXg9LTEsdGhpcy5lZGl0aW5nVmFsdWU9IiIsdGhpcy52YWxpZGF0aW9uVGV4dD0iIix0aGlzLmVtaXRDaGFuZ2UoKX1jYW5jZWxFZGl0KCl7dGhpcy5lZGl0aW5nSW5kZXg9LTEsdGhpcy5lZGl0aW5nVmFsdWU9IiJ9YXN5bmMgcmVtb3ZlSXRlbShuZSl7dGhpcy5jb25maXJtRGVsZXRlJiYhYXdhaXQgdGhpcy5zaG93Q29uZmlybURpYWxvZyhgRGVsZXRlICIke3RoaXMudmFsdWVbbmVdfSI/YCl8fCh0aGlzLnZhbHVlPXRoaXMudmFsdWUuZmlsdGVyKChyZSxnZSk9PmdlIT09bmUpLHRoaXMuZW1pdENoYW5nZSgpKX1hc3luYyBzaG93Q29uZmlybURpYWxvZyhuZSl7cmV0dXJuIGNvbmZpcm0obmUpfWhhbmRsZURyYWdTdGFydChuZSxyZSl7aWYoIXRoaXMuc29ydGFibGV8fHRoaXMuZGlzYWJsZWQpcmV0dXJuO3RoaXMuZHJhZ2dlZEluZGV4PXJlLHRoaXMudGFyZ2V0SW5kZXg9cmUsbmUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9Im1vdmUiLG5lLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0L3BsYWluIixyZS50b1N0cmluZygpKTtsZXQgZ2U9bmV3IEltYWdlO2dlLnNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQVVFQkFBQUFDd0FBQUFBQVFBQkFBQUNBa1FCQURzPSIsbmUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShnZSwwLDApLHRoaXMuZHJhZ1N0YXJ0WT1uZS5jbGllbnRZLHRoaXMuZHJhZ0N1cnJlbnRZPW5lLmNsaWVudFk7bGV0IEVlPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmxpc3QtaXRlbXMiKSxydD1BcnJheS5mcm9tKEVlPy5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIil8fFtdKTtydFtyZV0mJih0aGlzLml0ZW1IZWlnaHQ9cnRbcmVdLm9mZnNldEhlaWdodCksdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cz1ydC5tYXAodWU9PnVlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxFZT8uY2xhc3NMaXN0LmFkZCgiaXMtZHJhZ2dpbmciKSx0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXI9dGhpcy5oYW5kbGVHbG9iYWxEcmFnT3Zlci5iaW5kKHRoaXMpLHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnRW5kPXRoaXMuaGFuZGxlR2xvYmFsRHJhZ0VuZC5iaW5kKHRoaXMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbmQiLHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnRW5kKX1oYW5kbGVHbG9iYWxEcmFnT3ZlcihuZSl7aWYobmUucHJldmVudERlZmF1bHQoKSx0aGlzLmRyYWdnZWRJbmRleD09PS0xKXJldHVybjt0aGlzLmRyYWdDdXJyZW50WT1uZS5jbGllbnRZO2xldCByZT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7aWYoIXJlKXJldHVybjtsZXQgZ2U9QXJyYXkuZnJvbShyZS5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIikpLEVlPWdlW3RoaXMuZHJhZ2dlZEluZGV4XTtpZighRWUpcmV0dXJuO2xldCBydD10aGlzLmRyYWdDdXJyZW50WS10aGlzLmRyYWdTdGFydFk7RWUuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7cnR9cHgpYDtsZXQgdWU9dGhpcy5vcmlnaW5hbEl0ZW1SZWN0c1t0aGlzLmRyYWdnZWRJbmRleF07aWYoIXVlKXJldHVybjtsZXQgWj11ZS50b3ArdWUuaGVpZ2h0LzIrcnQsSj10aGlzLmRyYWdnZWRJbmRleDtmb3IobGV0IGRlPTA7ZGU8Z2UubGVuZ3RoO2RlKyspe2lmKGRlPT09dGhpcy5kcmFnZ2VkSW5kZXgpY29udGludWU7bGV0IEFlPXRoaXMub3JpZ2luYWxJdGVtUmVjdHNbZGVdO2lmKCFBZSljb250aW51ZTtsZXQgSGU9QWUudG9wK0FlLmhlaWdodC8yO2lmKGdlW2RlXS5jbGFzc0xpc3QuY29udGFpbnMoIm1vdmUtdXAiKT9IZS09dGhpcy5pdGVtSGVpZ2h0OmdlW2RlXS5jbGFzc0xpc3QuY29udGFpbnMoIm1vdmUtZG93biIpJiYoSGUrPXRoaXMuaXRlbUhlaWdodCksWjxIZSYmZGU8dGhpcy5kcmFnZ2VkSW5kZXgpe0o9ZGU7YnJlYWt9ZWxzZSBaPkhlJiZkZT50aGlzLmRyYWdnZWRJbmRleCYmKEo9ZGUpfUohPT10aGlzLnRhcmdldEluZGV4JiYodGhpcy50YXJnZXRJbmRleD1KLHRoaXMudXBkYXRlSXRlbVBvc2l0aW9ucyhnZSkpfXVwZGF0ZUl0ZW1Qb3NpdGlvbnMobmUpe2xldCByZT10aGlzLmRyYWdnZWRJbmRleCxnZT10aGlzLnRhcmdldEluZGV4LEVlPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmxpc3QtaXRlbXMiKTtFZSYmRWUuc3R5bGUuc2V0UHJvcGVydHkoIi0taXRlbS1oZWlnaHQiLGAke3RoaXMuaXRlbUhlaWdodH1weGApLG5lLmZvckVhY2goKHJ0LHVlKT0+e3VlIT09cmUmJihydC5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwibW92ZS1kb3duIikscnQuc3R5bGUuc2V0UHJvcGVydHkoIi0taXRlbS1oZWlnaHQiLGAke3RoaXMuaXRlbUhlaWdodH1weGApLHJlPGdlP3VlPnJlJiZ1ZTw9Z2UmJnJ0LmNsYXNzTGlzdC5hZGQoIm1vdmUtdXAiKTpyZT5nZSYmdWU+PWdlJiZ1ZTxyZSYmcnQuY2xhc3NMaXN0LmFkZCgibW92ZS1kb3duIikpfSl9aGFuZGxlR2xvYmFsRHJhZ0VuZCgpe3RoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3ZlciYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIpLHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3Zlcj1udWxsKSx0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ0VuZCYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdlbmQiLHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnRW5kKSx0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ0VuZD1udWxsKTtsZXQgbmU9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpLHJlPW5lPy5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIiksZ2U9cmU/Llt0aGlzLmRyYWdnZWRJbmRleF07aWYodGhpcy5kcmFnZ2VkSW5kZXg9PT0tMXx8dGhpcy50YXJnZXRJbmRleD09PS0xfHx0aGlzLmRyYWdnZWRJbmRleD09PXRoaXMudGFyZ2V0SW5kZXgpe2lmKGdlJiZ0aGlzLmRyYWdnZWRJbmRleCE9PS0xKXtnZS5zdHlsZS50cmFuc2l0aW9uPSJ0cmFuc2Zvcm0gMC4xNXMgZWFzZSIsZ2Uuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGVZKDApIjtsZXQgZGU9ITEsQWU9KCk9PntkZXx8KGRlPSEwLGdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLEFlKSx0aGlzLmNsZWFudXBEcmFnU3RhdGUobmUscmUpKX07Z2UuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsQWUse29uY2U6ITB9KSxzZXRUaW1lb3V0KEFlLDIwMCl9ZWxzZSB0aGlzLmNsZWFudXBEcmFnU3RhdGUobmUscmUpO3JldHVybn1sZXQgRWU9dGhpcy5vcmlnaW5hbEl0ZW1SZWN0c1t0aGlzLmRyYWdnZWRJbmRleF0scnQ9dGhpcy5vcmlnaW5hbEl0ZW1SZWN0c1t0aGlzLnRhcmdldEluZGV4XTtpZighRWV8fCFydHx8IWdlKXt0aGlzLmNsZWFudXBEcmFnU3RhdGUobmUscmUpO3JldHVybn1sZXQgdWU7dGhpcy50YXJnZXRJbmRleD50aGlzLmRyYWdnZWRJbmRleD91ZT1ydC5ib3R0b20tRWUuYm90dG9tOnVlPXJ0LnRvcC1FZS50b3AsZ2Uuc3R5bGUudHJhbnNpdGlvbj0idHJhbnNmb3JtIDAuMTVzIGVhc2UiLGdlLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWSgke3VlfXB4KWA7bGV0IFo9ITEsSj0oKT0+e2lmKFopcmV0dXJuO1o9ITAsZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsSiksbmU/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIiksbmU/Lm9mZnNldEhlaWdodCxyZT8uZm9yRWFjaChIZT0+e0hlLmNsYXNzTGlzdC5yZW1vdmUoIm1vdmUtdXAiLCJtb3ZlLWRvd24iLCJkcmFnZ2luZyIpLEhlLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2Zvcm0iKSxIZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNpdGlvbiIpfSk7bGV0IGRlPVsuLi50aGlzLnZhbHVlXSxbQWVdPWRlLnNwbGljZSh0aGlzLmRyYWdnZWRJbmRleCwxKTtkZS5zcGxpY2UodGhpcy50YXJnZXRJbmRleCwwLEFlKSx0aGlzLnZhbHVlPWRlLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuZHJhZ2dlZEluZGV4PS0xLHRoaXMuZHJhZ092ZXJJbmRleD0tMSx0aGlzLnRhcmdldEluZGV4PS0xLHRoaXMuZHJhZ1N0YXJ0WT0wLHRoaXMuZHJhZ0N1cnJlbnRZPTAsdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cz1bXSx0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9PntsZXQgSGU9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIik7SGU/LmZvckVhY2goTXQ9PntNdC5zdHlsZS50cmFuc2l0aW9uPSJub25lIn0pLHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmxpc3QtaXRlbXMiKT8ub2Zmc2V0SGVpZ2h0LHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e0hlPy5mb3JFYWNoKE10PT57TXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zaXRpb24iKX0pLG5lPy5jbGFzc0xpc3QucmVtb3ZlKCJkcm9wcGluZyIsImlzLWRyYWdnaW5nIil9KX0pfTtnZS5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixKLHtvbmNlOiEwfSksc2V0VGltZW91dChKLDIwMCl9Y2xlYW51cERyYWdTdGF0ZShuZSxyZSl7bmU/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIiksbmU/Lm9mZnNldEhlaWdodCxyZT8uZm9yRWFjaChnZT0+e2dlLmNsYXNzTGlzdC5yZW1vdmUoIm1vdmUtdXAiLCJtb3ZlLWRvd24iLCJkcmFnZ2luZyIpLGdlLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2Zvcm0iKSxnZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNpdGlvbiIpfSksdGhpcy5kcmFnZ2VkSW5kZXg9LTEsdGhpcy5kcmFnT3ZlckluZGV4PS0xLHRoaXMudGFyZ2V0SW5kZXg9LTEsdGhpcy5kcmFnU3RhcnRZPTAsdGhpcy5kcmFnQ3VycmVudFk9MCx0aGlzLm9yaWdpbmFsSXRlbVJlY3RzPVtdLHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+e2xldCBnZT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5saXN0LWl0ZW0iKTtnZT8uZm9yRWFjaChFZT0+e0VlLnN0eWxlLnRyYW5zaXRpb249Im5vbmUifSksdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpPy5vZmZzZXRIZWlnaHQscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Z2U/LmZvckVhY2goRWU9PntFZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNpdGlvbiIpfSksbmU/LmNsYXNzTGlzdC5yZW1vdmUoImRyb3BwaW5nIiwiaXMtZHJhZ2dpbmciKX0pfSl9aGFuZGxlRHJhZ0VuZCgpe3RoaXMuaGFuZGxlR2xvYmFsRHJhZ0VuZCgpfWhhbmRsZURyYWdPdmVyKG5lLHJlKXshdGhpcy5zb3J0YWJsZXx8dGhpcy5kaXNhYmxlZHx8KG5lLnByZXZlbnREZWZhdWx0KCksbmUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9Im1vdmUiKX1oYW5kbGVEcmFnTGVhdmUoKXt9aGFuZGxlRHJvcChuZSxyZSl7IXRoaXMuc29ydGFibGV8fHRoaXMuZGlzYWJsZWR8fG5lLnByZXZlbnREZWZhdWx0KCl9ZW1pdENoYW5nZSgpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIse2RldGFpbDp7dmFsdWU6dGhpcy52YWx1ZX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKG5lKXt0aGlzLnZhbHVlPW5lfHxbXX1hc3luYyB2YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJlcXVpcmVkJiYoIXRoaXMudmFsdWV8fHRoaXMudmFsdWUubGVuZ3RoPT09MCk/KHRoaXMudmFsaWRhdGlvblRleHQ9IkF0IGxlYXN0IG9uZSBpdGVtIGlzIHJlcXVpcmVkIiwhMSk6dGhpcy5taW5JdGVtcyYmdGhpcy52YWx1ZS5sZW5ndGg8dGhpcy5taW5JdGVtcz8odGhpcy52YWxpZGF0aW9uVGV4dD1gQXQgbGVhc3QgJHt0aGlzLm1pbkl0ZW1zfSBpdGVtcyByZXF1aXJlZGAsITEpOih0aGlzLnZhbGlkYXRpb25UZXh0PSIiLCEwKX1zdGF0aWN7JHQocixhKX19O3JldHVybiAkZT1yfSkoKTtmZSgpO3ZhciBtT3Q9KCk9Pk1gCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7dGVgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjNmNGY2OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICMzNzQxNTE7CiAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyYzJjMmM7CiAgICAgICAgICAgIGNvbG9yOiAjZTRlNGU3OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIFJpY2ggVGV4dCBFZGl0b3IifSAuc3VidGl0bGU9JHsiQSBmdWxsLWZlYXR1cmVkIHJpY2ggdGV4dCBlZGl0b3Igd2l0aCBmb3JtYXR0aW5nIHRvb2xiYXIifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJBcnRpY2xlIENvbnRlbnQifSAKICAgICAgICAgIC52YWx1ZT0keyc8aDE+V2VsY29tZSB0byB0aGUgUmljaCBUZXh0IEVkaXRvciE8L2gxPjxwPlRoaXMgaXMgYSBmZWF0dXJlLXJpY2ggZWRpdG9yIGJ1aWx0IHdpdGggVGlwVGFwLiBZb3UgY2FuOjwvcD48dWw+PGxpPjxzdHJvbmc+Rm9ybWF0IHRleHQ8L3N0cm9uZz4gd2l0aCA8ZW0+dmFyaW91czwvZW0+IDx1PnN0eWxlczwvdT48L2xpPjxsaT5DcmVhdGUgZGlmZmVyZW50IGhlYWRpbmcgbGV2ZWxzPC9saT48bGk+QWRkIDxhIGhyZWY9Imh0dHBzOi8vZXhhbXBsZS5jb20iPmxpbmtzPC9hPiB0byBleHRlcm5hbCByZXNvdXJjZXM8L2xpPjxsaT5Xcml0ZSA8Y29kZT5pbmxpbmUgY29kZTwvY29kZT4gb3IgY29kZSBibG9ja3M8L2xpPjwvdWw+PGJsb2NrcXVvdGU+PHA+VXNlIHRoZSB0b29sYmFyIGFib3ZlIHRvIGV4cGxvcmUgYWxsIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXZhaWxhYmxlITwvcD48L2Jsb2NrcXVvdGU+PHA+U3RhcnQgdHlwaW5nIHRvIHNlZSB0aGUgbWFnaWMgaGFwcGVuLi4uPC9wPid9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVXNlIHRoZSB0b29sYmFyIHRvIGZvcm1hdCB5b3VyIGNvbnRlbnQgd2l0aCBoZWFkaW5ncywgbGlzdHMsIGxpbmtzLCBhbmQgbW9yZSJ9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0keyEwfQogICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBXaXRoIFBsYWNlaG9sZGVyIn0gLnN1YnRpdGxlPSR7IkVtcHR5IGVkaXRvciB3aXRoIHBsYWNlaG9sZGVyIHRleHQifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJCbG9nIFBvc3QifSAKICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJTdGFydCB3cml0aW5nIHlvdXIgYmxvZyBwb3N0IGhlcmUuLi4ifQogICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHshMH0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gRGlmZmVyZW50IEhlaWdodHMifSAuc3VidGl0bGU9JHsiRWRpdG9ycyB3aXRoIGRpZmZlcmVudCBtaW5pbXVtIGhlaWdodHMgZm9yIHZhcmlvdXMgdXNlIGNhc2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJTaG9ydCBOb3RlIn0gCiAgICAgICAgICAgIC5taW5IZWlnaHQ9JHsxNTB9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJRdWljayBub3RlLi4uIn0KICAgICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHshMX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRXh0ZW5kZWQgQ29udGVudCJ9IAogICAgICAgICAgICAubWluSGVpZ2h0PSR7MzAwfQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiV3JpdGUgeW91ciBleHRlbmRlZCBjb250ZW50IGhlcmUuLi4ifQogICAgICAgICAgICAuc2hvd1dvcmRDb3VudD0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjQuIENvZGUgRXhhbXBsZXMifSAuc3VidGl0bGU9JHsiRWRpdG9yIHByZS1maWxsZWQgd2l0aCBjb2RlIGV4YW1wbGVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAubGFiZWw9JHsiVGVjaG5pY2FsIERvY3VtZW50YXRpb24ifSAKICAgICAgICAgIC52YWx1ZT0keyc8aDI+SW5zdGFsbGF0aW9uIEd1aWRlPC9oMj48cD5UbyBpbnN0YWxsIHRoZSBwYWNrYWdlLCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOjwvcD48cHJlPjxjb2RlPm5wbSBpbnN0YWxsIEBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZzwvY29kZT48L3ByZT48cD5UaGVuIGltcG9ydCB0aGUgY29tcG9uZW50IGluIHlvdXIgVHlwZVNjcmlwdCBmaWxlOjwvcD48cHJlPjxjb2RlPmltcG9ydCB7IERlZXNJbnB1dFJpY2h0ZXh0IH0gZnJvbSAiQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nIjs8L2NvZGU+PC9wcmU+PHA+WW91IGNhbiBub3cgdXNlIHRoZSA8Y29kZT4mbHQ7ZGVlcy1pbnB1dC1yaWNodGV4dCZndDs8L2NvZGU+IGVsZW1lbnQgaW4geW91ciB0ZW1wbGF0ZXMuPC9wPid9CiAgICAgICAgICAubWluSGVpZ2h0PSR7MjUwfQogICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHshMH0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gRGlzYWJsZWQgU3RhdGUifSAuc3VidGl0bGU9JHsiUmVhZC1vbmx5IHJpY2ggdGV4dCBjb250ZW50In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAubGFiZWw9JHsiUHVibGlzaGVkIEFydGljbGUgKFJlYWQgT25seSkifSAKICAgICAgICAgIC52YWx1ZT0keyc8aDI+VGhlIEZ1dHVyZSBvZiBXZWIgQ29tcG9uZW50czwvaDI+PHA+V2ViIENvbXBvbmVudHMgaGF2ZSByZXZvbHV0aW9uaXplZCBob3cgd2UgYnVpbGQgbW9kZXJuIHdlYiBhcHBsaWNhdGlvbnMuLi48L3A+PGJsb2NrcXVvdGU+PHA+IlRoZSBmdXR1cmUgb2Ygd2ViIGRldmVsb3BtZW50IGxpZXMgaW4gcmV1c2FibGUsIGVuY2Fwc3VsYXRlZCBjb21wb25lbnRzLiI8L3A+PC9ibG9ja3F1b3RlPid9CiAgICAgICAgICAuZGlzYWJsZWQ9JHshMH0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7ITB9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEludGVyYWN0aXZlIERlbW8ifSAuc3VidGl0bGU9JHsiVHlwZSBpbiB0aGUgZWRpdG9yIGJlbG93IGFuZCBzZWUgdGhlIEhUTUwgb3V0cHV0In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICBpZD0iaW50ZXJhY3RpdmUtZWRpdG9yIgogICAgICAgICAgLmxhYmVsPSR7IlRyeSBpdCB5b3Vyc2VsZiJ9IAogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IlR5cGUgc29tZXRoaW5nIGhlcmUuLi4ifQogICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHshMH0KICAgICAgICAgIEBjaGFuZ2U9JHt0PT57bGV0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3Iik7ZSYmKGUudGV4dENvbnRlbnQ9dC5kZXRhaWwudmFsdWUpfX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1wcmV2aWV3IiBpZD0ib3V0cHV0LXByZXZpZXciPgogICAgICAgICAgPGVtPkhUTUwgb3V0cHV0IHdpbGwgYXBwZWFyIGhlcmUuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7ZmUoKTt2YXIgZ090PVsuLi5YZS5iYXNlU3R5bGVzLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmb250LWZhbWlseTogSW50ZXIsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAubGFiZWwgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgbWluLWhlaWdodDogJHtwLmJkVGhlbWUoIjIwMHB4IiwiMjAwcHgiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250YWluZXI6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250YWluZXIuZm9jdXNlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklIC8gMC4wNSkiLCJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDMuOSUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b246ZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICAudG9vbGJhci1kaXZpZGVyIHsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tbWluLWhlaWdodCwgMjAwcHgpOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwIHsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgyIHsKICAgICAgICBmb250LXNpemU6IDEuNWVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgzIHsKICAgICAgICBmb250LXNpemU6IDEuMjVlbTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBtYXJnaW46IDFlbSAwIDAuNWVtIDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciB1bCwKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBvbCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxLjVlbTsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgbGkgewogICAgICAgIG1hcmdpbjogMC4yNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgYmxvY2txdW90ZSB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIG1hcmdpbjogMWVtIDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZWwgT25lIE1vbm8nLCAnRmlyYSBDb2RlJywgJ1NGIE1vbm8nLCBNb25hY28sICdDYXNjYWRpYSBDb2RlJywgJ1JvYm90byBNb25vJywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwcmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDFlbTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGEgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGE6aG92ZXIgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDQxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA2OS44JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItZm9vdGVyIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAud29yZC1jb3VudCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dC5zaG93IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQgaW5wdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAubGluay1pbnB1dCBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklIC8gMC4wNSkiLCJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dC1idXR0b25zIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uLnByaW1hcnkgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CgogICAgICAubGluay1pbnB1dC1idXR0b25zIGJ1dHRvbi5wcmltYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuZGVzY3JpcHRpb24gewogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmVkaXRvci1jb250YWluZXIgewogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudG9vbGJhci1idXR0b24sCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5lZGl0b3ItY29udGVudCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIGBdO2ZlKCk7dmFyIHhPdD10PT5NYAogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICAgJHt0LmxhYmVsP01gPGxhYmVsIGNsYXNzPSJsYWJlbCI+JHt0LmxhYmVsfTwvbGFiZWw+YDoiIn0KICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1jb250YWluZXIgJHt0LmVkaXRvcj8uaXNGb2N1c2VkPyJmb2N1c2VkIjoiIn0iIHN0eWxlPSItLW1pbi1oZWlnaHQ6ICR7dC5taW5IZWlnaHR9cHgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItdG9vbGJhciI+CiAgICAgICAgICAgICAgJHt0LnJlbmRlclRvb2xiYXIoKX0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5rLWlucHV0ICR7dC5zaG93TGlua0lucHV0PyJzaG93IjoiIn0iPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InVybCIgcGxhY2Vob2xkZXI9IkVudGVyIFVSTC4uLiIgQGtleWRvd249JHt0LmhhbmRsZUxpbmtJbnB1dEtleWRvd259IC8+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5rLWlucHV0LWJ1dHRvbnMiPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwcmltYXJ5IiBAY2xpY2s9JHt0LnNhdmVMaW5rfT5TYXZlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPSR7dC5yZW1vdmVMaW5rfT5SZW1vdmU8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHt0LmhpZGVMaW5rSW5wdXR9PkNhbmNlbDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItY29udGVudCI+PC9kaXY+CiAgICAgICAgICAgICR7dC5zaG93V29yZENvdW50P01gCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1mb290ZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3b3JkLWNvdW50Ij4ke3Qud29yZENvdW50fSB3b3JkJHt0LndvcmRDb3VudCE9PTE/InMiOiIifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgOiIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAke3QuZGVzY3JpcHRpb24/TWA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+JHt0LmRlc2NyaXB0aW9ufTwvZGl2PmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7RnQoKTtmZSgpO2VjKCk7dmFyIG5jPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0seGE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LFhzMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtaW5wdXQtcmljaHRleHQiKV0sZSxhPVtdLHIsaT1YZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXSx2LHk9W10sdz1bXSxFLEM9W10sej1bXTt2YXIgUD1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IF89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpTdHJpbmcscmVmbGVjdDohMH0pXSxmPVtEKHt0eXBlOlN0cmluZ30pXSxkPVtEKHt0eXBlOkJvb2xlYW59KV0sYj1bRCh7dHlwZTpOdW1iZXJ9KV0sdj1bbGUoKV0sRT1bbGUoKV0sbmModGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+InZhbHVlImluICQsZ2V0OiQ9PiQudmFsdWUsc2V0OigkLEgpPT57JC52YWx1ZT1IfX0sbWV0YWRhdGE6X30scyxsKSxuYyh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBsYWNlaG9sZGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4icGxhY2Vob2xkZXIiaW4gJCxnZXQ6JD0+JC5wbGFjZWhvbGRlcixzZXQ6KCQsSCk9PnskLnBsYWNlaG9sZGVyPUh9fSxtZXRhZGF0YTpffSxjLHUpLG5jKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hvd1dvcmRDb3VudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+InNob3dXb3JkQ291bnQiaW4gJCxnZXQ6JD0+JC5zaG93V29yZENvdW50LHNldDooJCxIKT0+eyQuc2hvd1dvcmRDb3VudD1IfX0sbWV0YWRhdGE6X30saCxnKSxuYyh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1pbkhlaWdodCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+Im1pbkhlaWdodCJpbiAkLGdldDokPT4kLm1pbkhlaWdodCxzZXQ6KCQsSCk9PnskLm1pbkhlaWdodD1IfX0sbWV0YWRhdGE6X30seCxtKSxuYyh0aGlzLG51bGwsdix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dMaW5rSW5wdXQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJzaG93TGlua0lucHV0ImluICQsZ2V0OiQ9PiQuc2hvd0xpbmtJbnB1dCxzZXQ6KCQsSCk9PnskLnNob3dMaW5rSW5wdXQ9SH19LG1ldGFkYXRhOl99LHksdyksbmModGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ3b3JkQ291bnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJ3b3JkQ291bnQiaW4gJCxnZXQ6JD0+JC53b3JkQ291bnQsc2V0OigkLEgpPT57JC53b3JkQ291bnQ9SH19LG1ldGFkYXRhOl99LEMseiksbmMobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6X30sbnVsbCxhKSxQPXI9ZS52YWx1ZSxfJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOl99KX1zdGF0aWMgZGVtbz1tT3Q7c3RhdGljIGRlbW9Hcm91cD0iSW5wdXQiOyNlPXhhKHRoaXMscywiIik7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKF8pe3RoaXMuI2U9X30jdD0oeGEodGhpcyxsKSx4YSh0aGlzLGMsIiIpKTtnZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy4jdH1zZXQgcGxhY2Vob2xkZXIoXyl7dGhpcy4jdD1ffSNhPSh4YSh0aGlzLHUpLHhhKHRoaXMsaCwhMCkpO2dldCBzaG93V29yZENvdW50KCl7cmV0dXJuIHRoaXMuI2F9c2V0IHNob3dXb3JkQ291bnQoXyl7dGhpcy4jYT1ffSNyPSh4YSh0aGlzLGcpLHhhKHRoaXMseCwyMDApKTtnZXQgbWluSGVpZ2h0KCl7cmV0dXJuIHRoaXMuI3J9c2V0IG1pbkhlaWdodChfKXt0aGlzLiNyPV99I2k9KHhhKHRoaXMsbSkseGEodGhpcyx5LCExKSk7Z2V0IHNob3dMaW5rSW5wdXQoKXtyZXR1cm4gdGhpcy4jaX1zZXQgc2hvd0xpbmtJbnB1dChfKXt0aGlzLiNpPV99I289KHhhKHRoaXMsdykseGEodGhpcyxDLDApKTtnZXQgd29yZENvdW50KCl7cmV0dXJuIHRoaXMuI299c2V0IHdvcmRDb3VudChfKXt0aGlzLiNvPV99ZWRpdG9yRWxlbWVudD14YSh0aGlzLHopO2xpbmtJbnB1dEVsZW1lbnQ7dGlwdGFwQnVuZGxlPW51bGw7ZWRpdG9yO3N0YXRpYyBzdHlsZXM9Z090O3JlbmRlcigpe3JldHVybiB4T3QodGhpcyl9cmVuZGVyVG9vbGJhcigpe2xldCBfPXRoaXMuZ2V0VG9vbGJhckJ1dHRvbnMoKTtyZXR1cm4gTWAKICAgICAgJHtfLm1hcCgkPT4kLmlzRGl2aWRlcj9NYDxkaXYgY2xhc3M9InRvb2xiYXItZGl2aWRlciI+PC9kaXY+YDpNYAogICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24gJHskLmlzQWN0aXZlPy4oKT8iYWN0aXZlIjoiIn0iCiAgICAgICAgICAgIEBjbGljaz0keyQuYWN0aW9ufQogICAgICAgICAgICB0aXRsZT0keyQudGl0bGV9CiAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR8fCF0aGlzLmVkaXRvcn0KICAgICAgICAgID4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyQuaWNvbn0+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICBgKX0KICAgIGB9Z2V0VG9vbGJhckJ1dHRvbnMoKXtyZXR1cm4gdGhpcy5lZGl0b3I/W3tuYW1lOiJib2xkIixpY29uOiJsdWNpZGU6Ym9sZCIsdGl0bGU6IkJvbGQgKEN0cmwrQikiLGFjdGlvbjooKT0+dGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUJvbGQoKS5ydW4oKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoImJvbGQiKX0se25hbWU6Iml0YWxpYyIsaWNvbjoibHVjaWRlOml0YWxpYyIsdGl0bGU6Ikl0YWxpYyAoQ3RybCtJKSIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSXRhbGljKCkucnVuKCksaXNBY3RpdmU6KCk9PnRoaXMuZWRpdG9yLmlzQWN0aXZlKCJpdGFsaWMiKX0se25hbWU6InVuZGVybGluZSIsaWNvbjoibHVjaWRlOnVuZGVybGluZSIsdGl0bGU6IlVuZGVybGluZSAoQ3RybCtVKSIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlVW5kZXJsaW5lKCkucnVuKCksaXNBY3RpdmU6KCk9PnRoaXMuZWRpdG9yLmlzQWN0aXZlKCJ1bmRlcmxpbmUiKX0se25hbWU6InN0cmlrZSIsaWNvbjoibHVjaWRlOnN0cmlrZXRocm91Z2giLHRpdGxlOiJTdHJpa2V0aHJvdWdoIixhY3Rpb246KCk9PnRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVTdHJpa2UoKS5ydW4oKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoInN0cmlrZSIpfSx7bmFtZToiZGl2aWRlcjEiLHRpdGxlOiIiLGlzRGl2aWRlcjohMH0se25hbWU6ImgxIixpY29uOiJsdWNpZGU6aGVhZGluZzEiLHRpdGxlOiJIZWFkaW5nIDEiLGFjdGlvbjooKT0+dGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoe2xldmVsOjF9KS5ydW4oKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoImhlYWRpbmciLHtsZXZlbDoxfSl9LHtuYW1lOiJoMiIsaWNvbjoibHVjaWRlOmhlYWRpbmcyIix0aXRsZToiSGVhZGluZyAyIixhY3Rpb246KCk9PnRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVIZWFkaW5nKHtsZXZlbDoyfSkucnVuKCksaXNBY3RpdmU6KCk9PnRoaXMuZWRpdG9yLmlzQWN0aXZlKCJoZWFkaW5nIix7bGV2ZWw6Mn0pfSx7bmFtZToiaDMiLGljb246Imx1Y2lkZTpoZWFkaW5nMyIsdGl0bGU6IkhlYWRpbmcgMyIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSGVhZGluZyh7bGV2ZWw6M30pLnJ1bigpLGlzQWN0aXZlOigpPT50aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIse2xldmVsOjN9KX0se25hbWU6ImRpdmlkZXIyIix0aXRsZToiIixpc0RpdmlkZXI6ITB9LHtuYW1lOiJidWxsZXRMaXN0IixpY29uOiJsdWNpZGU6bGlzdCIsdGl0bGU6IkJ1bGxldCBMaXN0IixhY3Rpb246KCk9PnRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCdWxsZXRMaXN0KCkucnVuKCksaXNBY3RpdmU6KCk9PnRoaXMuZWRpdG9yLmlzQWN0aXZlKCJidWxsZXRMaXN0Iil9LHtuYW1lOiJvcmRlcmVkTGlzdCIsaWNvbjoibHVjaWRlOmxpc3RPcmRlcmVkIix0aXRsZToiTnVtYmVyZWQgTGlzdCIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlT3JkZXJlZExpc3QoKS5ydW4oKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoIm9yZGVyZWRMaXN0Iil9LHtuYW1lOiJibG9ja3F1b3RlIixpY29uOiJsdWNpZGU6cXVvdGUiLHRpdGxlOiJRdW90ZSIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQmxvY2txdW90ZSgpLnJ1bigpLGlzQWN0aXZlOigpPT50aGlzLmVkaXRvci5pc0FjdGl2ZSgiYmxvY2txdW90ZSIpfSx7bmFtZToiY29kZSIsaWNvbjoibHVjaWRlOmNvZGUiLHRpdGxlOiJDb2RlIixhY3Rpb246KCk9PnRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCksaXNBY3RpdmU6KCk9PnRoaXMuZWRpdG9yLmlzQWN0aXZlKCJjb2RlIil9LHtuYW1lOiJjb2RlQmxvY2siLGljb246Imx1Y2lkZTpmaWxlQ29kZSIsdGl0bGU6IkNvZGUgQmxvY2siLGFjdGlvbjooKT0+dGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUNvZGVCbG9jaygpLnJ1bigpLGlzQWN0aXZlOigpPT50aGlzLmVkaXRvci5pc0FjdGl2ZSgiY29kZUJsb2NrIil9LHtuYW1lOiJkaXZpZGVyMyIsdGl0bGU6IiIsaXNEaXZpZGVyOiEwfSx7bmFtZToibGluayIsaWNvbjoibHVjaWRlOmxpbmsiLHRpdGxlOiJBZGQgTGluayIsYWN0aW9uOigpPT50aGlzLnRvZ2dsZUxpbmsoKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoImxpbmsiKX0se25hbWU6ImFsaWduTGVmdCIsaWNvbjoibHVjaWRlOmFsaWduTGVmdCIsdGl0bGU6IkFsaWduIExlZnQiLGFjdGlvbjooKT0+dGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbigibGVmdCIpLnJ1bigpLGlzQWN0aXZlOigpPT50aGlzLmVkaXRvci5pc0FjdGl2ZSh7dGV4dEFsaWduOiJsZWZ0In0pfSx7bmFtZToiYWxpZ25DZW50ZXIiLGljb246Imx1Y2lkZTphbGlnbkNlbnRlciIsdGl0bGU6IkFsaWduIENlbnRlciIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0VGV4dEFsaWduKCJjZW50ZXIiKS5ydW4oKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoe3RleHRBbGlnbjoiY2VudGVyIn0pfSx7bmFtZToiYWxpZ25SaWdodCIsaWNvbjoibHVjaWRlOmFsaWduUmlnaHQiLHRpdGxlOiJBbGlnbiBSaWdodCIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0VGV4dEFsaWduKCJyaWdodCIpLnJ1bigpLGlzQWN0aXZlOigpPT50aGlzLmVkaXRvci5pc0FjdGl2ZSh7dGV4dEFsaWduOiJyaWdodCJ9KX0se25hbWU6ImRpdmlkZXI0Iix0aXRsZToiIixpc0RpdmlkZXI6ITB9LHtuYW1lOiJ1bmRvIixpY29uOiJsdWNpZGU6dW5kbyIsdGl0bGU6IlVuZG8gKEN0cmwrWikiLGFjdGlvbjooKT0+dGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnVuZG8oKS5ydW4oKX0se25hbWU6InJlZG8iLGljb246Imx1Y2lkZTpyZWRvIix0aXRsZToiUmVkbyAoQ3RybCtZKSIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkucmVkbygpLnJ1bigpfV06W119YXN5bmMgZmlyc3RVcGRhdGVkKCl7YXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSx0aGlzLnRpcHRhcEJ1bmRsZT1hd2FpdCBIMi5nZXRJbnN0YW5jZSgpLmxvYWRUaXB0YXAoKSx0aGlzLmVkaXRvckVsZW1lbnQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItY29udGVudCIpLHRoaXMubGlua0lucHV0RWxlbWVudD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmxpbmstaW5wdXQgaW5wdXQiKSx0aGlzLmluaXRpYWxpemVFZGl0b3IoKX1pbml0aWFsaXplRWRpdG9yKCl7aWYodGhpcy5kaXNhYmxlZHx8IXRoaXMudGlwdGFwQnVuZGxlKXJldHVybjtsZXR7RWRpdG9yOl8sU3RhcnRlcktpdDokLFVuZGVybGluZTpILFRleHRBbGlnbjpMLExpbms6ayxUeXBvZ3JhcGh5Ok59PXRoaXMudGlwdGFwQnVuZGxlO3RoaXMuZWRpdG9yPW5ldyBfKHtlbGVtZW50OnRoaXMuZWRpdG9yRWxlbWVudCxleHRlbnNpb25zOlskLmNvbmZpZ3VyZSh7aGVhZGluZzp7bGV2ZWxzOlsxLDIsM119fSksSC5jb25maWd1cmUoe30pLEwuY29uZmlndXJlKHt0eXBlczpbImhlYWRpbmciLCJwYXJhZ3JhcGgiXX0pLGsuY29uZmlndXJlKHtvcGVuT25DbGljazohMSxIVE1MQXR0cmlidXRlczp7Y2xhc3M6ImVkaXRvci1saW5rIn19KSxOLmNvbmZpZ3VyZSh7fSldLGNvbnRlbnQ6dGhpcy52YWx1ZXx8KHRoaXMucGxhY2Vob2xkZXI/YDxwPiR7dGhpcy5wbGFjZWhvbGRlcn08L3A+YDoiIiksb25VcGRhdGU6KHtlZGl0b3I6U30pPT57dGhpcy52YWx1ZT1TLmdldEhUTUwoKSx0aGlzLnVwZGF0ZVdvcmRDb3VudCgpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImlucHV0Iix7ZGV0YWlsOnt2YWx1ZTp0aGlzLnZhbHVlfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIse2RldGFpbDp7dmFsdWU6dGhpcy52YWx1ZX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX0sb25TZWxlY3Rpb25VcGRhdGU6KCk9Pnt0aGlzLnJlcXVlc3RVcGRhdGUoKX0sb25Gb2N1czooKT0+e3RoaXMucmVxdWVzdFVwZGF0ZSgpfSxvbkJsdXI6KCk9Pnt0aGlzLnJlcXVlc3RVcGRhdGUoKX19KSx0aGlzLnVwZGF0ZVdvcmRDb3VudCgpfXVwZGF0ZVdvcmRDb3VudCgpe2lmKCF0aGlzLmVkaXRvcilyZXR1cm47bGV0IF89dGhpcy5lZGl0b3IuZ2V0VGV4dCgpO3RoaXMud29yZENvdW50PV8udHJpbSgpP18udHJpbSgpLnNwbGl0KC9ccysvKS5sZW5ndGg6MH10b2dnbGVMaW5rKCl7aWYodGhpcy5lZGl0b3IpaWYodGhpcy5lZGl0b3IuaXNBY3RpdmUoImxpbmsiKSl7bGV0IF89dGhpcy5lZGl0b3IuZ2V0QXR0cmlidXRlcygibGluayIpLmhyZWY7dGhpcy5zaG93TGlua0lucHV0PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMubGlua0lucHV0RWxlbWVudCYmKHRoaXMubGlua0lucHV0RWxlbWVudC52YWx1ZT1ffHwiIix0aGlzLmxpbmtJbnB1dEVsZW1lbnQuZm9jdXMoKSx0aGlzLmxpbmtJbnB1dEVsZW1lbnQuc2VsZWN0KCkpfSl9ZWxzZSB0aGlzLnNob3dMaW5rSW5wdXQ9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5saW5rSW5wdXRFbGVtZW50JiYodGhpcy5saW5rSW5wdXRFbGVtZW50LnZhbHVlPSIiLHRoaXMubGlua0lucHV0RWxlbWVudC5mb2N1cygpKX0pfXNhdmVMaW5rKCl7aWYoIXRoaXMuZWRpdG9yfHwhdGhpcy5saW5rSW5wdXRFbGVtZW50KXJldHVybjtsZXQgXz10aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWU7XyYmdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldExpbmsoe2hyZWY6X30pLnJ1bigpLHRoaXMuaGlkZUxpbmtJbnB1dCgpfXJlbW92ZUxpbmsoKXt0aGlzLmVkaXRvciYmKHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS51bnNldExpbmsoKS5ydW4oKSx0aGlzLmhpZGVMaW5rSW5wdXQoKSl9aGlkZUxpbmtJbnB1dCgpe3RoaXMuc2hvd0xpbmtJbnB1dD0hMSx0aGlzLmVkaXRvcj8uY29tbWFuZHMuZm9jdXMoKX1oYW5kbGVMaW5rSW5wdXRLZXlkb3duKF8pe18ua2V5PT09IkVudGVyIj8oXy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2F2ZUxpbmsoKSk6Xy5rZXk9PT0iRXNjYXBlIiYmKF8ucHJldmVudERlZmF1bHQoKSx0aGlzLmhpZGVMaW5rSW5wdXQoKSl9c2V0VmFsdWUoXyl7dGhpcy52YWx1ZT1fLHRoaXMuZWRpdG9yJiZfIT09dGhpcy5lZGl0b3IuZ2V0SFRNTCgpJiZ0aGlzLmVkaXRvci5jb21tYW5kcy5zZXRDb250ZW50KF8pfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9Y2xlYXIoKXt0aGlzLnNldFZhbHVlKCIiKX1mb2N1cygpe3RoaXMuZWRpdG9yPy5jb21tYW5kcy5mb2N1cygpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmVkaXRvciYmdGhpcy5lZGl0b3IuZGVzdHJveSgpfXN0YXRpY3t4YShyLGEpfX07cmV0dXJuIFA9cn0pKCk7ZmUoKTt2YXIgYk90LHZPdD0oKT0+TShiT3R8fChiT3Q9aGMoW2AKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgYCxgCiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT1gLCIgLnN1YnRpdGxlPSIsYD4KICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICAubGFiZWw9YCxgCiAgICAgICAgICAucGxhY2Vob2xkZXI9YCxgCiAgICAgICAgICAudmFsdWU9YCxgCiAgICAgICAgICAuZGVzY3JpcHRpb249YCxgCiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9YCwiIC5zdWJ0aXRsZT0iLGA+CiAgICAgICAgPGRlZXMtaW5wdXQtdGFncwogICAgICAgICAgLmxhYmVsPWAsYAogICAgICAgICAgLnBsYWNlaG9sZGVyPWAsYAogICAgICAgICAgLnN1Z2dlc3Rpb25zPWAsYAogICAgICAgICAgLnZhbHVlPWAsYAogICAgICAgICAgLmRlc2NyaXB0aW9uPWAsYAogICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPWAsIiAuc3VidGl0bGU9IixgPgogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXRhZ3MKICAgICAgICAgICAgLmxhYmVsPWAsYAogICAgICAgICAgICAucGxhY2Vob2xkZXI9YCxgCiAgICAgICAgICAgIC5tYXhUYWdzPWAsYAogICAgICAgICAgICAudmFsdWU9YCxgCiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj1gLGAKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGFncwogICAgICAgICAgICAubGFiZWw9YCxgCiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj1gLGAKICAgICAgICAgICAgLm1heFRhZ3M9YCxgCiAgICAgICAgICAgIC5zdWdnZXN0aW9ucz1gLGAKICAgICAgICAgICAgLnZhbHVlPWAsYAogICAgICAgICAgICAuZGVzY3JpcHRpb249YCxgCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT1gLCIgLnN1YnRpdGxlPSIsYD4KICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICAubGFiZWw9YCxgCiAgICAgICAgICAucGxhY2Vob2xkZXI9YCxgCiAgICAgICAgICAucmVxdWlyZWQ9YCxgCiAgICAgICAgICAuZGVzY3JpcHRpb249YCxgCiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9YCwiIC5zdWJ0aXRsZT0iLGA+CiAgICAgICAgPGRlZXMtaW5wdXQtdGFncwogICAgICAgICAgLmxhYmVsPWAsYAogICAgICAgICAgLnZhbHVlPWAsYAogICAgICAgICAgLmRpc2FibGVkPWAsYAogICAgICAgICAgLmRlc2NyaXB0aW9uPWAsYAogICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPWAsIiAuc3VidGl0bGU9IixgPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD1gLGAKICAgICAgICAgICAgLnBsYWNlaG9sZGVyPWAsYAogICAgICAgICAgICAucmVxdWlyZWQ9YCxgCiAgICAgICAgICAgIC5rZXk9YCxgCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGFncwogICAgICAgICAgICAgIC5sYWJlbD1gLGAKICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9YCxgCiAgICAgICAgICAgICAgLnJlcXVpcmVkPWAsYAogICAgICAgICAgICAgIC5rZXk9YCxgCiAgICAgICAgICAgICAgLnN1Z2dlc3Rpb25zPWAsYAogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICAgICAgLmxhYmVsPWAsYAogICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj1gLGAKICAgICAgICAgICAgICAua2V5PWAsYAogICAgICAgICAgICAgIC5tYXhUYWdzPWAsYAogICAgICAgICAgICAgIC5zdWdnZXN0aW9ucz1gLGAKICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPWAsYAogICAgICAgICAgICAuaW5wdXRUeXBlPWAsYAogICAgICAgICAgICAucGxhY2Vob2xkZXI9YCxgCiAgICAgICAgICAgIC5rZXk9YCxgCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IC50ZXh0PWAsYD48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT1gLCIgLnN1YnRpdGxlPSIsYD4KICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICBpZD0iaW50ZXJhY3RpdmUtdGFncyIKICAgICAgICAgIC5sYWJlbD1gLGAKICAgICAgICAgIC5wbGFjZWhvbGRlcj1gLGAKICAgICAgICAgIC5zdWdnZXN0aW9ucz1gLGAKICAgICAgICAgIEBjaGFuZ2U9YCxgCiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InRhZy1wcmV2aWV3IiBpZD0idGFncy1wcmV2aWV3Ij4KICAgICAgICAgIDxlbSBzdHlsZT0iY29sb3I6ICM5OTk7Ij5ObyB0YWdzIGFkZGVkIHlldC4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGlkPSJ0YWdzLWpzb24iPgogICAgICAgICAgPGVtPkpTT04gb3V0cHV0IHdpbGwgYXBwZWFyIGhlcmUuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxzY3JpcHQ+CiAgICAgICAgICAvLyBVcGRhdGUgSlNPTiBwcmV2aWV3CiAgICAgICAgICBjb25zdCB0YWdzSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjaW50ZXJhY3RpdmUtdGFncycpOwogICAgICAgICAgdGFnc0lucHV0Py5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4gewogICAgICAgICAgICBjb25zdCBqc29uUHJldmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0YWdzLWpzb24nKTsKICAgICAgICAgICAgaWYgKGpzb25QcmV2aWV3KSB7CiAgICAgICAgICAgICAganNvblByZXZpZXcudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShlLmRldGFpbC52YWx1ZSwgbnVsbCwgMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIDxcL3NjcmlwdD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgXSkpLHRlYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2YzZjRmNjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjMzc0MTUxOwogICAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMmMyYzJjOwogICAgICAgICAgICBjb2xvcjogI2U0ZTRlNzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRhZy1wcmV2aWV3IHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjlmYWZiOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAgIC50YWctcHJldmlldyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxZjI5Mzc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50YWctcHJldmlldy1pdGVtIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDRweCAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2UwZTdmZjsKICAgICAgICAgIGNvbG9yOiAjNDMzOGNhOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLnRhZy1wcmV2aWV3LWl0ZW0gewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzEyZTgxOwogICAgICAgICAgICBjb2xvcjogI2M3ZDJmZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGAsIjEuIEJhc2ljIFRhZ3MgSW5wdXQiLCJTaW1wbGUgdGFnIGlucHV0IHdpdGggY29tbW9uIHByb2dyYW1taW5nIGxhbmd1YWdlcyIsIlByb2dyYW1taW5nIExhbmd1YWdlcyIsIkFkZCBhIGxhbmd1YWdlLi4uIixbIkphdmFTY3JpcHQiLCJUeXBlU2NyaXB0IiwiUHl0aG9uIiwiR28iXSwiUHJlc3MgRW50ZXIgb3IgY29tbWEgdG8gYWRkIHRhZ3MiLCIyLiBUYWdzIHdpdGggU3VnZ2VzdGlvbnMiLCJBdXRvLWNvbXBsZXRlIHN1Z2dlc3Rpb25zIGZvciBmYXN0ZXIgaW5wdXQiLCJUZWNoIFN0YWNrIiwiVHlwZSB0byBzZWUgc3VnZ2VzdGlvbnMuLi4iLFsiUmVhY3QiLCJWdWUiLCJBbmd1bGFyIiwiU3ZlbHRlIiwiTGl0IiwiTmV4dC5qcyIsIk51eHQiLCJTdmVsdGVLaXQiLCJOb2RlLmpzIiwiRGVubyIsIkJ1biIsIkV4cHJlc3MiLCJGYXN0aWZ5IiwiTmVzdC5qcyIsIktvYSIsIk1vbmdvREIiLCJQb3N0Z3JlU1FMIiwiUmVkaXMiLCJNeVNRTCIsIlNRTGl0ZSIsIkNhc3NhbmRyYSIsIkRvY2tlciIsIkt1YmVybmV0ZXMiLCJBV1MiLCJBenVyZSIsIkdDUCIsIlZlcmNlbCIsIk5ldGxpZnkiXSxbIlJlYWN0IiwiTm9kZS5qcyIsIlBvc3RncmVTUUwiLCJEb2NrZXIiXSwiU3RhcnQgdHlwaW5nIHRvIHNlZSBzdWdnZXN0aW9ucyBmcm9tIHBvcHVsYXIgdGVjaG5vbG9naWVzIiwiMy4gTGltaXRlZCBUYWdzIiwiUmVzdHJpY3QgdGhlIG51bWJlciBvZiB0YWdzIHVzZXJzIGNhbiBhZGQiLCJUb3AgMyBTa2lsbHMiLCJBZGQgdXAgdG8gMyBza2lsbHMuLi4iLDMsWyJEZXNpZ24iLCJEZXZlbG9wbWVudCJdLCJNYXhpbXVtIDMgdGFncyBhbGxvd2VkIiwiQ2F0ZWdvcmllcyAoTWF4IDUpIiwiU2VsZWN0IGNhdGVnb3JpZXMuLi4iLDUsWyJCbG9nIiwiVHV0b3JpYWwiLCJOZXdzIiwiUmV2aWV3IiwiR3VpZGUiLCJDYXNlIFN0dWR5IiwiSW50ZXJ2aWV3Il0sWyJUdXRvcmlhbCIsIkd1aWRlIl0sIkNob29zZSB1cCB0byA1IGNhdGVnb3JpZXMiLCI0LiBSZXF1aXJlZCAmIFZhbGlkYXRpb24iLCJUYWdzIGlucHV0IHdpdGggdmFsaWRhdGlvbiByZXF1aXJlbWVudHMiLCJQcm9qZWN0IFRhZ3MiLCJBZGQgYXQgbGVhc3Qgb25lIHRhZy4uLiIsITAsIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQgLSBhZGQgYXQgbGVhc3Qgb25lIHRhZyIsIjUuIERpc2FibGVkIFN0YXRlIiwiUmVhZC1vbmx5IHRhZ3MgZGlzcGxheSIsIlN5c3RlbSBUYWdzIixbIlN5c3RlbSIsIlByb3RlY3RlZCIsIlJlYWQtT25seSIsIkFyY2hpdmUiXSwhMCwiVGhlc2UgdGFncyBjYW5ub3QgYmUgbW9kaWZpZWQiLCI2LiBGb3JtIEludGVncmF0aW9uIiwiVGFncyBpbnB1dCB3b3JraW5nIHdpdGhpbiBhIGZvcm0gY29udGV4dCIsIlByb2plY3QgTmFtZSIsIk15IEF3ZXNvbWUgUHJvamVjdCIsITAsIm5hbWUiLCJUZWNobm9sb2dpZXMgVXNlZCIsIkFkZCB0ZWNobm9sb2dpZXMuLi4iLCEwLCJ0ZWNobm9sb2dpZXMiLFsiVHlwZVNjcmlwdCIsIkphdmFTY3JpcHQiLCJQeXRob24iLCJHbyIsIlJ1c3QiLCJSZWFjdCIsIlZ1ZSIsIkFuZ3VsYXIiLCJTdmVsdGUiLCJOb2RlLmpzIiwiRGVubyIsIkV4cHJlc3MiLCJGYXN0QVBJIl0sIlByb2plY3QgVGFncyIsIkFkZCBkZXNjcmlwdGl2ZSB0YWdzLi4uIiwidGFncyIsMTAsWyJmcm9udGVuZCIsImJhY2tlbmQiLCJmdWxsc3RhY2siLCJtb2JpbGUiLCJkZXNrdG9wIiwid2ViIiwiYXBpIiwiZGF0YWJhc2UiLCJkZXZvcHMiLCJ1aS91eCIsIm9wZW5zb3VyY2UiLCJzYWFzIiwiZW50ZXJwcmlzZSIsInN0YXJ0dXAiXSwiRGVzY3JpcHRpb24iLCJ0ZXh0YXJlYSIsIkRlc2NyaWJlIHlvdXIgcHJvamVjdC4uLiIsImRlc2NyaXB0aW9uIiwiQ3JlYXRlIFByb2plY3QiLCI3LiBJbnRlcmFjdGl2ZSBEZW1vIiwiQWRkIHRhZ3MgYW5kIHNlZSB0aGVtIGNvbGxlY3RlZCBpbiByZWFsLXRpbWUiLCJZb3VyIEludGVyZXN0cyIsIlR5cGUgeW91ciBpbnRlcmVzdHMuLi4iLFsiTXVzaWMiLCJNb3ZpZXMiLCJCb29rcyIsIlRyYXZlbCIsIlBob3RvZ3JhcGh5IiwiQ29va2luZyIsIkdhbWluZyIsIlNwb3J0cyIsIkFydCIsIlRlY2hub2xvZ3kiLCJGYXNoaW9uIiwiRml0bmVzcyIsIk5hdHVyZSIsIlNjaWVuY2UiLCJIaXN0b3J5Il0sdD0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN0YWdzLXByZXZpZXciKSxhPXQuZGV0YWlsLnZhbHVlO2UmJihhLmxlbmd0aD09PTA/ZS5pbm5lckhUTUw9JzxlbSBzdHlsZT0iY29sb3I6ICM5OTk7Ij5ObyB0YWdzIGFkZGVkIHlldC4uLjwvZW0+JzplLmlubmVySFRNTD1hLm1hcChyPT5gPHNwYW4gY2xhc3M9InRhZy1wcmV2aWV3LWl0ZW0iPiR7cn08L3NwYW4+YCkuam9pbigiIikpfSk7ZmUoKTtGdCgpO0JlKCk7dmFyIEppPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sYzI9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LFFzMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtaW5wdXQtdGFncyIpXSxlLGE9W10scixpPVhlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdLEUsQz1bXSx6PVtdLFAsXz1bXSwkPVtdLEgsTD1bXSxrPVtdO3ZhciBOPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgUz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOkFycmF5fSldLGY9W0Qoe3R5cGU6U3RyaW5nfSldLGQ9W0Qoe3R5cGU6TnVtYmVyfSldLGI9W0Qoe3R5cGU6QXJyYXl9KV0sdj1bbGUoKV0sRT1bbGUoKV0sUD1bbGUoKV0sSD1bRCh7dHlwZTpTdHJpbmd9KV0sSmkodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VD0+InZhbHVlImluIFQsZ2V0OlQ9PlQudmFsdWUsc2V0OihULFIpPT57VC52YWx1ZT1SfX0sbWV0YWRhdGE6U30scyxsKSxKaSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBsYWNlaG9sZGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4icGxhY2Vob2xkZXIiaW4gVCxnZXQ6VD0+VC5wbGFjZWhvbGRlcixzZXQ6KFQsUik9PntULnBsYWNlaG9sZGVyPVJ9fSxtZXRhZGF0YTpTfSxjLHUpLEppKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWF4VGFncyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VD0+Im1heFRhZ3MiaW4gVCxnZXQ6VD0+VC5tYXhUYWdzLHNldDooVCxSKT0+e1QubWF4VGFncz1SfX0sbWV0YWRhdGE6U30saCxnKSxKaSh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InN1Z2dlc3Rpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4ic3VnZ2VzdGlvbnMiaW4gVCxnZXQ6VD0+VC5zdWdnZXN0aW9ucyxzZXQ6KFQsUik9PntULnN1Z2dlc3Rpb25zPVJ9fSxtZXRhZGF0YTpTfSx4LG0pLEppKHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaW5wdXRWYWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VD0+ImlucHV0VmFsdWUiaW4gVCxnZXQ6VD0+VC5pbnB1dFZhbHVlLHNldDooVCxSKT0+e1QuaW5wdXRWYWx1ZT1SfX0sbWV0YWRhdGE6U30seSx3KSxKaSh0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dTdWdnZXN0aW9ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VD0+InNob3dTdWdnZXN0aW9ucyJpbiBULGdldDpUPT5ULnNob3dTdWdnZXN0aW9ucyxzZXQ6KFQsUik9PntULnNob3dTdWdnZXN0aW9ucz1SfX0sbWV0YWRhdGE6U30sQyx6KSxKaSh0aGlzLG51bGwsUCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpUPT4iaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgiaW4gVCxnZXQ6VD0+VC5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCxzZXQ6KFQsUik9PntULmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4PVJ9fSxtZXRhZGF0YTpTfSxfLCQpLEppKHRoaXMsbnVsbCxILHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsaWRhdGlvblRleHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlQ9PiJ2YWxpZGF0aW9uVGV4dCJpbiBULGdldDpUPT5ULnZhbGlkYXRpb25UZXh0LHNldDooVCxSKT0+e1QudmFsaWRhdGlvblRleHQ9Un19LG1ldGFkYXRhOlN9LEwsayksSmkobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6U30sbnVsbCxhKSxOPXI9ZS52YWx1ZSxTJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlN9KX1zdGF0aWMgZGVtbz12T3Q7c3RhdGljIGRlbW9Hcm91cD0iSW5wdXQiOyNlPWMyKHRoaXMscyxbXSk7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKFMpe3RoaXMuI2U9U30jdD0oYzIodGhpcyxsKSxjMih0aGlzLGMsIkFkZCB0YWdzLi4uIikpO2dldCBwbGFjZWhvbGRlcigpe3JldHVybiB0aGlzLiN0fXNldCBwbGFjZWhvbGRlcihTKXt0aGlzLiN0PVN9I2E9KGMyKHRoaXMsdSksYzIodGhpcyxoLDApKTtnZXQgbWF4VGFncygpe3JldHVybiB0aGlzLiNhfXNldCBtYXhUYWdzKFMpe3RoaXMuI2E9U30jcj0oYzIodGhpcyxnKSxjMih0aGlzLHgsW10pKTtnZXQgc3VnZ2VzdGlvbnMoKXtyZXR1cm4gdGhpcy4jcn1zZXQgc3VnZ2VzdGlvbnMoUyl7dGhpcy4jcj1TfSNpPShjMih0aGlzLG0pLGMyKHRoaXMseSwiIikpO2dldCBpbnB1dFZhbHVlKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGlucHV0VmFsdWUoUyl7dGhpcy4jaT1TfSNvPShjMih0aGlzLHcpLGMyKHRoaXMsQywhMSkpO2dldCBzaG93U3VnZ2VzdGlvbnMoKXtyZXR1cm4gdGhpcy4jb31zZXQgc2hvd1N1Z2dlc3Rpb25zKFMpe3RoaXMuI289U30jcz0oYzIodGhpcyx6KSxjMih0aGlzLF8sLTEpKTtnZXQgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgoKXtyZXR1cm4gdGhpcy4jc31zZXQgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgoUyl7dGhpcy4jcz1TfSNuPShjMih0aGlzLCQpLGMyKHRoaXMsTCwiIikpO2dldCB2YWxpZGF0aW9uVGV4dCgpe3JldHVybiB0aGlzLiNufXNldCB2YWxpZGF0aW9uVGV4dChTKXt0aGlzLiNuPVN9c3RhdGljIHN0eWxlcz1beGUsLi4uWGUuYmFzZVN0eWxlcyxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjdXJzb3I6IHRleHQ7CiAgICAgIH0KCiAgICAgIC50YWdzLWNvbnRhaW5lcjpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXI6Zm9jdXMtd2l0aGluIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtwLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXIuZGlzYWJsZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudGFnIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUgLyAwLjIpIiwiaHNsKDIxNSAyMC4yJSAzNS4xJSAvIDAuMikiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUgLyAwLjMpIiwiaHNsKDIxNSAyMC4yJSAzNS4xJSAvIDAuMykiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGFuaW1hdGlvbjogdGFnQXBwZWFyIDAuMTVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgdGFnQXBwZWFyIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC50YWctcmVtb3ZlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgNDYuNyUpIiwiaHNsKDIxNy45IDEwLjYlIDU0LjklKSIpfTsKICAgICAgfQoKICAgICAgLnRhZy1yZW1vdmU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAwJSAvIDAuMDgpIiwiaHNsKDAgMCUgMTAwJSAvIDAuMDgpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICB9CgogICAgICAudGFnLXJlbW92ZSBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgfQoKICAgICAgLnRhZy1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDRweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLnRhZy1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICB9CgogICAgICAudGFnLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICAvKiBTdWdnZXN0aW9ucyBkcm9wZG93biAqLwogICAgICAuc3VnZ2VzdGlvbnMtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5zdWdnZXN0aW9ucy1kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMnB4IDRweCAtMnB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KCiAgICAgIC5zdWdnZXN0aW9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIC5zdWdnZXN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbi5oaWdobGlnaHRlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLyogVmFsaWRhdGlvbiBzdHlsZXMgKi8KICAgICAgLnZhbGlkYXRpb24tbWVzc2FnZSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBEZXNjcmlwdGlvbiBzdHlsZXMgKi8KICAgICAgLmRlc2NyaXB0aW9uIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC8qIFNjcm9sbGJhciBzdHlsaW5nICovCiAgICAgIC5zdWdnZXN0aW9ucy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgIH0KCiAgICAgIC5zdWdnZXN0aW9ucy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7bGV0IFM9dGhpcy5zdWdnZXN0aW9ucy5maWx0ZXIoVD0+IXRoaXMudmFsdWUuaW5jbHVkZXMoVCkmJlQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpO3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWw/TWA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YDoiIn0KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJzdWdnZXN0aW9ucy1jb250YWluZXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0idGFncy1jb250YWluZXIgJHt0aGlzLmRpc2FibGVkPyJkaXNhYmxlZCI6IiJ9IgogICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNvbnRhaW5lckNsaWNrfQogICAgICAgICAgPgogICAgICAgICAgICAke3RoaXMudmFsdWUubWFwKFQ9Pk1gCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFnIj4KICAgICAgICAgICAgICAgIDxzcGFuPiR7VH08L3NwYW4+CiAgICAgICAgICAgICAgICAke3RoaXMuZGlzYWJsZWQ/IiI6TWAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFnLXJlbW92ZSIgQGNsaWNrPSR7Uj0+dGhpcy5yZW1vdmVUYWcoUixUKX0+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGApfQogICAgICAgICAgICAKICAgICAgICAgICAgJHshdGhpcy5kaXNhYmxlZCYmKCF0aGlzLm1heFRhZ3N8fHRoaXMudmFsdWUubGVuZ3RoPHRoaXMubWF4VGFncyk/TWAKICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgICAgICBjbGFzcz0idGFnLWlucHV0IgogICAgICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7dGhpcy5wbGFjZWhvbGRlcn0KICAgICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuaW5wdXRWYWx1ZX0KICAgICAgICAgICAgICAgIEBpbnB1dD0ke3RoaXMuaGFuZGxlSW5wdXR9CiAgICAgICAgICAgICAgICBAa2V5ZG93bj0ke3RoaXMuaGFuZGxlS2V5RG93bn0KICAgICAgICAgICAgICAgIEBmb2N1cz0ke3RoaXMuaGFuZGxlRm9jdXN9CiAgICAgICAgICAgICAgICBAYmx1cj0ke3RoaXMuaGFuZGxlQmx1cn0KICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgYDoiIn0KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICR7dGhpcy5zaG93U3VnZ2VzdGlvbnMmJlMubGVuZ3RoPjA/TWAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VnZ2VzdGlvbnMtZHJvcGRvd24iPgogICAgICAgICAgICAgICR7Uy5tYXAoKFQsUik9Pk1gCiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJzdWdnZXN0aW9uICR7Uj09PXRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg/ImhpZ2hsaWdodGVkIjoiIn0iCiAgICAgICAgICAgICAgICAgIEBtb3VzZWRvd249JHtBPT57QS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWRkVGFnKFQpfX0KICAgICAgICAgICAgICAgICAgQG1vdXNlZW50ZXI9JHsoKT0+dGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleD1SfQogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAke1R9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOiIifQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMudmFsaWRhdGlvblRleHQ/TWAKICAgICAgICAgIDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSI+JHt0aGlzLnZhbGlkYXRpb25UZXh0fTwvZGl2PgogICAgICAgIGA6IiJ9CiAgICAgICAgCiAgICAgICAgJHt0aGlzLmRlc2NyaXB0aW9uP01gCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+JHt0aGlzLmRlc2NyaXB0aW9ufTwvZGl2PgogICAgICAgIGA6IiJ9CiAgICAgIDwvZGl2PgogICAgYH1oYW5kbGVDb250YWluZXJDbGljayhTKXtpZih0aGlzLmRpc2FibGVkKXJldHVybjtsZXQgVD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWctaW5wdXQiKTtUJiZTLnRhcmdldCE9PVQmJlQuZm9jdXMoKX1oYW5kbGVJbnB1dChTKXtsZXQgVD1TLnRhcmdldDtpZih0aGlzLmlucHV0VmFsdWU9VC52YWx1ZSx0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIiwiKXx8dGhpcy5pbnB1dFZhbHVlLmluY2x1ZGVzKCI7Iikpe2xldCBSPXRoaXMuaW5wdXRWYWx1ZS5yZXBsYWNlKC9bLDtdL2csIiIpLnRyaW0oKTtSJiZ0aGlzLmFkZFRhZyhSKX19aGFuZGxlS2V5RG93bihTKXtsZXQgVD1TLnRhcmdldDtpZihTLmtleT09PSJFbnRlciIpaWYoUy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg+PTAmJnRoaXMuc2hvd1N1Z2dlc3Rpb25zKXtsZXQgUj10aGlzLnN1Z2dlc3Rpb25zLmZpbHRlcihBPT4hdGhpcy52YWx1ZS5pbmNsdWRlcyhBKSYmQS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuaW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpKSk7Ult0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4XSYmdGhpcy5hZGRUYWcoUlt0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4XSl9ZWxzZSB0aGlzLmlucHV0VmFsdWUudHJpbSgpJiZ0aGlzLmFkZFRhZyh0aGlzLmlucHV0VmFsdWUudHJpbSgpKTtlbHNlIGlmKFMua2V5PT09IkJhY2tzcGFjZSImJiF0aGlzLmlucHV0VmFsdWUmJnRoaXMudmFsdWUubGVuZ3RoPjApdGhpcy5yZW1vdmVUYWcoUyx0aGlzLnZhbHVlW3RoaXMudmFsdWUubGVuZ3RoLTFdKTtlbHNlIGlmKFMua2V5PT09IkFycm93RG93biImJnRoaXMuc2hvd1N1Z2dlc3Rpb25zKXtTLnByZXZlbnREZWZhdWx0KCk7bGV0IFI9dGhpcy5zdWdnZXN0aW9ucy5maWx0ZXIoQT0+IXRoaXMudmFsdWUuaW5jbHVkZXMoQSkmJkEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpLmxlbmd0aDt0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4PU1hdGgubWluKHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgrMSxSLTEpfWVsc2UgUy5rZXk9PT0iQXJyb3dVcCImJnRoaXMuc2hvd1N1Z2dlc3Rpb25zPyhTLnByZXZlbnREZWZhdWx0KCksdGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleD1NYXRoLm1heCh0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4LTEsMCkpOlMua2V5PT09IkVzY2FwZSImJih0aGlzLnNob3dTdWdnZXN0aW9ucz0hMSx0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4PS0xKX1oYW5kbGVGb2N1cygpe3RoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoPjAmJih0aGlzLnNob3dTdWdnZXN0aW9ucz0hMCl9aGFuZGxlQmx1cigpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNob3dTdWdnZXN0aW9ucz0hMSx0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4PS0xfSwyMDApfWFkZFRhZyhTKXtpZighU3x8dGhpcy52YWx1ZS5pbmNsdWRlcyhTKXx8dGhpcy5tYXhUYWdzJiZ0aGlzLnZhbHVlLmxlbmd0aD49dGhpcy5tYXhUYWdzKXJldHVybjt0aGlzLnZhbHVlPVsuLi50aGlzLnZhbHVlLFNdLHRoaXMuaW5wdXRWYWx1ZT0iIix0aGlzLnNob3dTdWdnZXN0aW9ucz0hMSx0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4PS0xO2xldCBUPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhZy1pbnB1dCIpO1QmJihULnZhbHVlPSIiKSx0aGlzLmVtaXRDaGFuZ2UoKX1yZW1vdmVUYWcoUyxUKXtTLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMudmFsdWU9dGhpcy52YWx1ZS5maWx0ZXIoUj0+UiE9PVQpLHRoaXMuZW1pdENoYW5nZSgpfWVtaXRDaGFuZ2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLHtkZXRhaWw6e3ZhbHVlOnRoaXMudmFsdWV9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX1zZXRWYWx1ZShTKXt0aGlzLnZhbHVlPVN8fFtdfWFzeW5jIHZhbGlkYXRlKCl7cmV0dXJuIHRoaXMucmVxdWlyZWQmJighdGhpcy52YWx1ZXx8dGhpcy52YWx1ZS5sZW5ndGg9PT0wKT8odGhpcy52YWxpZGF0aW9uVGV4dD0iQXQgbGVhc3Qgb25lIHRhZyBpcyByZXF1aXJlZCIsITEpOih0aGlzLnZhbGlkYXRpb25UZXh0PSIiLCEwKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksYzIodGhpcyxrKX1zdGF0aWN7YzIocixhKX19O3JldHVybiBOPXJ9KSgpO2ZlKCk7dmFyIEtzMT0oKT0+e2xldCB0PURhdGUubm93KCk7cmV0dXJuW3tpZDpgdGl0bGUtJHt0fWAsdHlwZToiaGVhZGluZy0xIixjb250ZW50OiJTeXN0ZW0gUGVyZm9ybWFuY2UgUmVwb3J0In0se2lkOmBkYXRlLSR7dCsxfWAsdHlwZToicGFyYWdyYXBoIixjb250ZW50OmBHZW5lcmF0ZWQgb246ICR7bmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygpfWB9LHtpZDpgc3VtbWFyeS1oZWFkaW5nLSR7dCsyfWAsdHlwZToiaGVhZGluZy0yIixjb250ZW50OiJFeGVjdXRpdmUgU3VtbWFyeSJ9LHtpZDpgc3VtbWFyeS0ke3QrM31gLHR5cGU6InBhcmFncmFwaCIsY29udGVudDoiVGhpcyByZXBvcnQgcHJvdmlkZXMgYW4gYW5hbHlzaXMgb2Ygc3lzdGVtIHBlcmZvcm1hbmNlIG1ldHJpY3Mgb3ZlciB0aGUgbGFzdCAzMCBkYXlzLiJ9LHtpZDpgbWV0cmljcy1oZWFkaW5nLSR7dCs0fWAsdHlwZToiaGVhZGluZy0yIixjb250ZW50OiJLZXkgTWV0cmljcyJ9LHtpZDpgbWV0cmljcy1saXN0LSR7dCs1fWAsdHlwZToibGlzdCIsY29udGVudDpgQXZlcmFnZSByZXNwb25zZSB0aW1lOiAxMjRtcwpVcHRpbWU6IDk5Ljk3JQpDUFUgdXRpbGl6YXRpb246IDQ1JQpNZW1vcnkgdXNhZ2U6IDIuM0dCIC8gOEdCYCxtZXRhZGF0YTp7bGlzdFR5cGU6ImJ1bGxldCJ9fSx7aWQ6YGFuYWx5c2lzLWhlYWRpbmctJHt0KzZ9YCx0eXBlOiJoZWFkaW5nLTIiLGNvbnRlbnQ6IlBlcmZvcm1hbmNlIEFuYWx5c2lzIn0se2lkOmBhbmFseXNpcy1xdW90ZS0ke3QrN31gLHR5cGU6InF1b3RlIixjb250ZW50OiJTeXN0ZW0gcGVyZm9ybWFuY2UgcmVtYWlucyB3aXRoaW4gYWNjZXB0YWJsZSBwYXJhbWV0ZXJzIHdpdGggcm9vbSBmb3Igb3B0aW1pemF0aW9uIGluIG1lbW9yeSBtYW5hZ2VtZW50LiJ9LHtpZDpgY29kZS1oZWFkaW5nLSR7dCs4fWAsdHlwZToiaGVhZGluZy0zIixjb250ZW50OiJTYW1wbGUgUXVlcnkgUGVyZm9ybWFuY2UifSx7aWQ6YGNvZGUtYmxvY2stJHt0Kzl9YCx0eXBlOiJjb2RlIixjb250ZW50OmBTRUxFQ1QgQVZHKHJlc3BvbnNlX3RpbWUpIGFzIGF2Z190aW1lLAogICAgICAgQ09VTlQoKikgYXMgdG90YWxfcmVxdWVzdHMsCiAgICAgICBEQVRFKGNyZWF0ZWRfYXQpIGFzIGRhdGUKRlJPTSBwZXJmb3JtYW5jZV9sb2dzCldIRVJFIGNyZWF0ZWRfYXQgPj0gTk9XKCkgLSBJTlRFUlZBTCAzMCBEQVkKR1JPVVAgQlkgREFURShjcmVhdGVkX2F0KQpPUkRFUiBCWSBkYXRlIERFU0M7YCxtZXRhZGF0YTp7bGFuZ3VhZ2U6InNxbCJ9fSx7aWQ6YGRpdmlkZXItJHt0KzEwfWAsdHlwZToiZGl2aWRlciIsY29udGVudDoiIn0se2lkOmBmb290ZXItJHt0KzExfWAsdHlwZToicGFyYWdyYXBoIixjb250ZW50OiJSZXBvcnQgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgU3lzdGVtIE1vbml0b3IgdjIuNS4wIn1dfSxKczE9KCk9PntsZXQgdD1EYXRlLm5vdygpO3JldHVyblt7aWQ6YHJlY2lwZS10aXRsZS0ke3R9YCx0eXBlOiJoZWFkaW5nLTEiLGNvbnRlbnQ6IkNsYXNzaWMgTWFyZ2hlcml0YSBQaXp6YSJ9LHtpZDpgcmVjaXBlLWludHJvLSR7dCsxfWAsdHlwZToicGFyYWdyYXBoIixjb250ZW50OiJBIHRyYWRpdGlvbmFsIEl0YWxpYW4gcGl6emEgd2l0aCBmcmVzaCBiYXNpbCwgbW96emFyZWxsYSwgYW5kIHRvbWF0byBzYXVjZS4ifSx7aWQ6YGluZ3JlZGllbnRzLWhlYWRpbmctJHt0KzJ9YCx0eXBlOiJoZWFkaW5nLTIiLGNvbnRlbnQ6Ilx1ezFGMzU1fSBJbmdyZWRpZW50cyJ9LHtpZDpgZG91Z2gtaGVhZGluZy0ke3QrM31gLHR5cGU6ImhlYWRpbmctMyIsY29udGVudDoiRm9yIHRoZSBEb3VnaDoifSx7aWQ6YGRvdWdoLWxpc3QtJHt0KzR9YCx0eXBlOiJsaXN0Iixjb250ZW50OmA1MDBnIHRpcG8gIjAwIiBmbG91cgozMjVtbCB3YXJtIHdhdGVyCjEwZyBzYWx0CjdnIGFjdGl2ZSBkcnkgeWVhc3QKMiB0YnNwIG9saXZlIG9pbGAsbWV0YWRhdGE6e2xpc3RUeXBlOiJidWxsZXQifX0se2lkOmB0b3BwaW5ncy1oZWFkaW5nLSR7dCs1fWAsdHlwZToiaGVhZGluZy0zIixjb250ZW50OiJGb3IgdGhlIFRvcHBpbmdzOiJ9LHtpZDpgdG9wcGluZ3MtbGlzdC0ke3QrNn1gLHR5cGU6Imxpc3QiLGNvbnRlbnQ6YDQwMGcgY2FubmVkIFNhbiBNYXJ6YW5vIHRvbWF0b2VzCjI1MGcgZnJlc2ggbW96emFyZWxsYQpGcmVzaCBiYXNpbCBsZWF2ZXMKRXh0cmEgdmlyZ2luIG9saXZlIG9pbApTYWx0IGFuZCBwZXBwZXIgdG8gdGFzdGVgLG1ldGFkYXRhOntsaXN0VHlwZToiYnVsbGV0In19LHtpZDpgaW5zdHJ1Y3Rpb25zLWhlYWRpbmctJHt0Kzd9YCx0eXBlOiJoZWFkaW5nLTIiLGNvbnRlbnQ6Ilx1ezFGNDY4fVx1MjAwRFx1ezFGMzczfSBJbnN0cnVjdGlvbnMifSx7aWQ6YHN0ZXBzLWxpc3QtJHt0Kzh9YCx0eXBlOiJsaXN0Iixjb250ZW50OmBEaXNzb2x2ZSB5ZWFzdCBpbiB3YXJtIHdhdGVyIGFuZCBsZXQgc3RhbmQgZm9yIDUgbWludXRlcwpNaXggZmxvdXIgYW5kIHNhbHQsIGNyZWF0ZSBhIHdlbGwgaW4gY2VudGVyCkFkZCB5ZWFzdCBtaXh0dXJlIGFuZCBvbGl2ZSBvaWwKS25lYWQgZm9yIDEwIG1pbnV0ZXMgdW50aWwgc21vb3RoCkxldCByaXNlIGZvciAxLTIgaG91cnMgdW50aWwgZG91YmxlZApQdW5jaCBkb3duIGFuZCBkaXZpZGUgaW50byBwb3J0aW9ucwpSb2xsIG91dCBlYWNoIHBvcnRpb24gdG8gMTItaW5jaCBjaXJjbGVzClRvcCB3aXRoIGNydXNoZWQgdG9tYXRvZXMsIG1venphcmVsbGEsIGFuZCBiYXNpbApCYWtlIGF0IDQ3NVx4QjBGICgyNDVceEIwQykgZm9yIDEwLTEyIG1pbnV0ZXNgLG1ldGFkYXRhOntsaXN0VHlwZToib3JkZXJlZCJ9fSx7aWQ6YHRpcC0ke3QrOX1gLHR5cGU6InF1b3RlIixjb250ZW50OiJQcm8gdGlwOiBGb3IgYW4gYXV0aGVudGljIHRhc3RlLCB1c2UgYSBwaXp6YSBzdG9uZSBhbmQgcHJlaGVhdCBpdCBpbiB0aGUgb3ZlbiBmb3IgYXQgbGVhc3QgMzAgbWludXRlcyBiZWZvcmUgYmFraW5nLiJ9LHtpZDpgZGl2aWRlci0ke3QrMTB9YCx0eXBlOiJkaXZpZGVyIixjb250ZW50OiIifSx7aWQ6YHNlcnZpbmdzLSR7dCsxMX1gLHR5cGU6InBhcmFncmFwaCIsY29udGVudDoiU2VydmluZ3M6IDQgcGl6emFzIHwgUHJlcCB0aW1lOiAyIGhvdXJzIHwgQ29vayB0aW1lOiAxMiBtaW51dGVzIn1dfSxlbjE9dD0+e2xldCBlPXt9O3JldHVybiBlLmJhc2ljPXQucXVlcnlTZWxlY3RvcigiI2VkaXRvci1iYXNpYyIpLGUuYXJ0aWNsZT10LnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItYXJ0aWNsZSIpLGUuZHJhZ0Ryb3A9dC5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWRyYWdkcm9wIiksZS50dXRvcmlhbD10LnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItdHV0b3JpYWwiKSxlLm1lZXRpbmc9dC5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLW1lZXRpbmciKSxlLnJlY2lwZT10LnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItcmVjaXBlIiksZS50ZWNobmljYWw9dC5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLXRlY2huaWNhbCIpLGUuZm9ybUludGVncmF0aW9uPXQucXVlcnlTZWxlY3RvcigiI2VkaXRvci1mb3JtLWludGVncmF0aW9uIiksZS5wcm9ncmFtbWF0aWM9dC5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLXByb2dyYW1tYXRpYyIpLGUuZXhwb3J0RGVtbz10LnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItZXhwb3J0IiksZX0sdG4xPSh0LGUpPT57bGV0IGE9dC5xdWVyeVNlbGVjdG9yKCIjYnRuLWdlbmVyYXRlLXJlcG9ydCIpLHI9dC5xdWVyeVNlbGVjdG9yKCIjYnRuLWdlbmVyYXRlLXJlY2lwZSIpLGk9dC5xdWVyeVNlbGVjdG9yKCIjYnRuLWNsZWFyLWVkaXRvciIpO2EmJmEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57ZS5pbXBvcnRCbG9ja3MoS3MxKCkpfSksciYmci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntlLmltcG9ydEJsb2NrcyhKczEoKSl9KSxpJiZpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2UuaW1wb3J0QmxvY2tzKFtdKX0pfSxhbjE9KHQsZSk9PntsZXQgYT10LnF1ZXJ5U2VsZWN0b3IoIiNidG4tZXhwb3J0LWJsb2NrcyIpLHI9dC5xdWVyeVNlbGVjdG9yKCIjYnRuLWV4cG9ydC1odG1sIiksaT10LnF1ZXJ5U2VsZWN0b3IoIiNidG4tZXhwb3J0LW1hcmtkb3duIiksbz10LnF1ZXJ5U2VsZWN0b3IoIiNidG4tc2F2ZS1zdGF0ZSIpLHM9dC5xdWVyeVNlbGVjdG9yKCIjYnRuLXJlc3RvcmUtc3RhdGUiKSxsPW51bGw7YSYmYS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntsZXQgZj1lLmV4cG9ydEJsb2NrcygpO2NvbnNvbGUubG9nKCJFeHBvcnRlZCBibG9ja3M6IixmKSxhbGVydChgRXhwb3J0ZWQgJHtmLmxlbmd0aH0gYmxvY2tzIHRvIGNvbnNvbGUuIENoZWNrIGRldmVsb3BlciB0b29scy5gKX0pLHImJnIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57bGV0IGY9ZS5leHBvcnRBc0h0bWwoKTtjb25zb2xlLmxvZygiSFRNTCBFeHBvcnQ6IixmKSxhbGVydCgiSFRNTCBleHBvcnRlZCB0byBjb25zb2xlLiBDaGVjayBkZXZlbG9wZXIgdG9vbHMuIil9KSxpJiZpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2xldCBmPWUuZXhwb3J0QXNNYXJrZG93bigpO2NvbnNvbGUubG9nKCJNYXJrZG93biBFeHBvcnQ6IixmKSxhbGVydCgiTWFya2Rvd24gZXhwb3J0ZWQgdG8gY29uc29sZS4gQ2hlY2sgZGV2ZWxvcGVyIHRvb2xzLiIpfSksbyYmby5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntsPWUuZXhwb3J0U3RhdGUoKSxjb25zb2xlLmxvZygiU2F2ZWQgc3RhdGU6IixsKSxhbGVydCgiRWRpdG9yIHN0YXRlIHNhdmVkISIpfSkscyYmcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntsPyhlLmltcG9ydFN0YXRlKGwpLGFsZXJ0KCJFZGl0b3Igc3RhdGUgcmVzdG9yZWQhIikpOmFsZXJ0KCJObyBzYXZlZCBzdGF0ZSBmb3VuZC4gU2F2ZSBzdGF0ZSBmaXJzdCEiKX0pfSxybjE9KHQsZSxhKT0+e2xldCByPXQucXVlcnlTZWxlY3RvcigiI2J0bi1zaG93LWh0bWwtb3V0cHV0IiksaT10LnF1ZXJ5U2VsZWN0b3IoIiNvdXRwdXQtcHJldmlldy1odG1sIik7ciYmaSYmZSYmci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntpLnRleHRDb250ZW50PWUuZ2V0VmFsdWUoKSxpLmNsYXNzTGlzdC5hZGQoInZpc2libGUiKX0pO2xldCBvPXQucXVlcnlTZWxlY3RvcigiI2J0bi1zaG93LW1hcmtkb3duLW91dHB1dCIpLHM9dC5xdWVyeVNlbGVjdG9yKCIjb3V0cHV0LXByZXZpZXctbWFya2Rvd24iKTtvJiZzJiZhJiZvLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3MudGV4dENvbnRlbnQ9YS5nZXRWYWx1ZSgpLHMuY2xhc3NMaXN0LmFkZCgidmlzaWJsZSIpfSl9LGluMT10PT57dC5hcnRpY2xlJiZzZXRUaW1lb3V0KCgpPT57bGV0IGU9W3tpZDoiaW50cm8taGVhZGluZy0iK0RhdGUubm93KCksdHlwZToiaGVhZGluZy0yIixjb250ZW50OiJJbnRyb2R1Y3Rpb24gdG8gTW9kZXJuIFdlYiBEZXZlbG9wbWVudCJ9LHtpZDoiaW50cm8tcGFyYS0iK0RhdGUubm93KCksdHlwZToicGFyYWdyYXBoIixjb250ZW50OiJNb2Rlcm4gd2ViIGRldmVsb3BtZW50IGhhcyBldm9sdmVkIHNpZ25pZmljYW50bHkgb3ZlciB0aGUgcGFzdCBkZWNhZGUuIEluIHRoaXMgYXJ0aWNsZSwgd2UnbGwgZXhwbG9yZSB0aGUga2V5IHRlY2hub2xvZ2llcyBhbmQgYmVzdCBwcmFjdGljZXMgdGhhdCBkZWZpbmUgd2ViIGRldmVsb3BtZW50IGluIDIwMjQuIn0se2lkOiJ0ZWNoLWhlYWRpbmctIitEYXRlLm5vdygpLHR5cGU6ImhlYWRpbmctMyIsY29udGVudDoiS2V5IFRlY2hub2xvZ2llcyJ9LHtpZDoidGVjaC1saXN0LSIrRGF0ZS5ub3coKSx0eXBlOiJsaXN0Iixjb250ZW50OmBUeXBlU2NyaXB0IC0gVHlwZS1zYWZlIEphdmFTY3JpcHQgZGV2ZWxvcG1lbnQKV2ViIENvbXBvbmVudHMgLSBOYXRpdmUgY29tcG9uZW50IG1vZGVsCkVTIE1vZHVsZXMgLSBNb2Rlcm4gbW9kdWxlIHN5c3RlbQpXZWJBc3NlbWJseSAtIEhpZ2gtcGVyZm9ybWFuY2UgY29tcHV0aW5nYCxtZXRhZGF0YTp7bGlzdFR5cGU6Im9yZGVyZWQifX0se2lkOiJxdW90ZS0iK0RhdGUubm93KCksdHlwZToicXVvdGUiLGNvbnRlbnQ6IlRoZSBiZXN0IHdheSB0byBwcmVkaWN0IHRoZSBmdXR1cmUgaXMgdG8gaW52ZW50IGl0LiAtIEFsYW4gS2F5In0se2lkOiJleGFtcGxlLWhlYWRpbmctIitEYXRlLm5vdygpLHR5cGU6ImhlYWRpbmctMyIsY29udGVudDoiQ29kZSBFeGFtcGxlIn0se2lkOiJjb2RlLWV4YW1wbGUtIitEYXRlLm5vdygpLHR5cGU6ImNvZGUiLGNvbnRlbnQ6YGNsYXNzIE1vZGVybldlYkFwcCBleHRlbmRzIEhUTUxFbGVtZW50IHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKCk7CiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTsKICB9CiAgCiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICB0aGlzLnJlbmRlcigpOwogIH0KfWAsbWV0YWRhdGE6e2xhbmd1YWdlOiJqYXZhc2NyaXB0In19XTt0LmFydGljbGUuaW1wb3J0QmxvY2tzKGUpfSw1MDApLHQuZHJhZ0Ryb3AmJnNldFRpbWVvdXQoKCk9PntsZXQgZT1be2lkOiJkcmFnLXRpdGxlLSIrRGF0ZS5ub3coKSx0eXBlOiJoZWFkaW5nLTEiLGNvbnRlbnQ6IkRyYWcgJiBEcm9wIERlbW8ifSx7aWQ6ImRyYWctaW50cm8tIitEYXRlLm5vdygpLHR5cGU6InBhcmFncmFwaCIsY29udGVudDoiVGhpcyBlZGl0b3IgZGVtb25zdHJhdGVzIGRyYWcgYW5kIGRyb3AgZnVuY3Rpb25hbGl0eS4gVHJ5IGRyYWdnaW5nIHRoZXNlIGJsb2NrcyBhcm91bmQhIn0se2lkOiJkcmFnLWhlYWRpbmctIitEYXRlLm5vdygpLHR5cGU6ImhlYWRpbmctMiIsY29udGVudDoiSG93IEl0IFdvcmtzIn0se2lkOiJkcmFnLWxpc3QtIitEYXRlLm5vdygpLHR5cGU6Imxpc3QiLGNvbnRlbnQ6YEhvdmVyIG92ZXIgYW55IGJsb2NrIHRvIHNlZSB0aGUgZHJhZyBoYW5kbGUKQ2xpY2sgYW5kIGhvbGQgdGhlIGhhbmRsZSB0byBzdGFydCBkcmFnZ2luZwpEcmFnIHRvIHJlb3JkZXIgYmxvY2tzClJlbGVhc2UgdG8gZHJvcCBpbiB0aGUgbmV3IHBvc2l0aW9uYCxtZXRhZGF0YTp7bGlzdFR5cGU6Im9yZGVyZWQifX0se2lkOiJkcmFnLXF1b3RlLSIrRGF0ZS5ub3coKSx0eXBlOiJxdW90ZSIsY29udGVudDoiVGhlIGRyYWcgYW5kIGRyb3AgZmVhdHVyZSBtYWtlcyBpdCBlYXN5IHRvIHJlb3JnYW5pemUgeW91ciBjb250ZW50IHdpdGhvdXQgY3V0dGluZyBhbmQgcGFzdGluZy4ifSx7aWQ6ImRyYWctZGl2aWRlci0iK0RhdGUubm93KCksdHlwZToiZGl2aWRlciIsY29udGVudDoiIn0se2lkOiJkcmFnLWZvb3Rlci0iK0RhdGUubm93KCksdHlwZToicGFyYWdyYXBoIixjb250ZW50OiJOb3RlOiBEaXZpZGVyIGJsb2NrcyBjYW5ub3QgYmUgZHJhZ2dlZCwgYnV0IG90aGVyIGJsb2NrcyBjYW4gYmUgbW92ZWQgYXJvdW5kIHRoZW0uIn1dO3QuZHJhZ0Ryb3AuaW1wb3J0QmxvY2tzKGUpfSw2MDApfSx5T3Q9KCk9Pk1gCiAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2F3YWl0IG5ldyBQcm9taXNlKGE9PnNldFRpbWVvdXQoYSw1MDApKTtsZXQgZT1lbjEodCk7ZS5wcm9ncmFtbWF0aWMmJnRuMSh0LGUucHJvZ3JhbW1hdGljKSxlLmV4cG9ydERlbW8mJmFuMSh0LGUuZXhwb3J0RGVtbykscm4xKHQsZS5tZWV0aW5nLGUucmVjaXBlKSxpbjEoZSksY29uc29sZS5sb2coIldZU0lXWUcgRGVtbyBpbml0aWFsaXplZCB3aXRoIGVkaXRvcnM6IixPYmplY3Qua2V5cyhlKSl9fT4KICA8c3R5bGU+CiAgICAke3RlYAogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDMycHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgfQogICAgICAKICAgICAgLnBhbmVsLWRlc2NyaXB0aW9uIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAucGFuZWwtZGVzY3JpcHRpb24gewogICAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZmVhdHVyZS1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CgogICAgICAuZmVhdHVyZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuZmVhdHVyZS1pY29uIHsKICAgICAgICBjb2xvcjogIzAwNjZjYzsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLmZlYXR1cmUtaXRlbSB7CiAgICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgICB9CiAgICAgICAgLmZlYXR1cmUtaWNvbiB7CiAgICAgICAgICBjb2xvcjogIzRkOTRmZjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zaG9ydGN1dHMtYm94IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDEwMiwgMjA0LCAwLjA1KTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDEwMiwgMjA0LCAwLjIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgIH0KCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuc2hvcnRjdXRzLWJveCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDc3LCAxNDgsIDI1NSwgMC4xKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSg3NywgMTQ4LCAyNTUsIDAuMyk7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc2hvcnRjdXRzLXRpdGxlIHsKICAgICAgICBtYXJnaW46IDAgMCAxMnB4IDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICMwMDY2Y2M7CiAgICAgIH0KCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuc2hvcnRjdXRzLXRpdGxlIHsKICAgICAgICAgIGNvbG9yOiAjNGQ5NGZmOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnNob3J0Y3V0cy1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDE4MHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnNob3J0Y3V0LWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgIH0KCiAgICAgIC5zaG9ydGN1dC1rZXkgewogICAgICAgIGJhY2tncm91bmQ6ICNmMGYwZjA7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICMzMzM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5zaG9ydGN1dC1pdGVtIHsKICAgICAgICAgIGNvbG9yOiAjYmJiOwogICAgICAgIH0KICAgICAgICAuc2hvcnRjdXQta2V5IHsKICAgICAgICAgIGJhY2tncm91bmQ6ICMzMzM7CiAgICAgICAgICBjb2xvcjogI2RkZDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5vdXRwdXQtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMyMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgfQoKICAgICAgLm91dHB1dC1jYXJkIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CgogICAgICAub3V0cHV0LWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC4wNCk7CiAgICAgICAgY29sb3I6IHZhcigtLWRlZXMtY29sb3ItdGV4dCwgIzBmMTcyYSk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNSwgMjMsIDQyLCAwLjEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IE1vbm8nLCAnRmlyYSBDb2RlJywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXgtaGVpZ2h0OiAyODBweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QoW3RoZW1lPSdkYXJrJ10pIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjA2KTsKICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC4xNSk7CiAgICAgICAgY29sb3I6IHZhcigtLWRlZXMtY29sb3ItdGV4dCwgI2Y0ZjRmNSk7CiAgICAgIH0KCiAgICAgIC5vdXRwdXQtcHJldmlldy52aXNpYmxlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLm91dHB1dC1ncmlkIHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLnRpcHMtYm94IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogI2YwZjhmZjsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAudGlwcy1ib3ggewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg3NywgMTQ4LCAyNTUsIDAuMSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICAudGlwcy1ib3ggc3Ryb25nIHsKICAgICAgICBjb2xvcjogIzAwNjZjYzsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC50aXBzLWJveCBzdHJvbmcgewogICAgICAgICAgY29sb3I6ICM0ZDk0ZmY7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICAudGlwcy1saXN0IHsKICAgICAgICBtYXJnaW46IDhweCAwIDAgMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC50aXBzLWxpc3QgbGkgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjhmODsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2U4ZThlODsKICAgICAgICBib3JkZXItY29sb3I6ICNjY2M7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLWJ1dHRvbjphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpOwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLmRlbW8tYnV0dG9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICMzMzM7CiAgICAgICAgICBib3JkZXItY29sb3I6ICM1NTU7CiAgICAgICAgICBjb2xvcjogI2RkZDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmRlbW8tYnV0dG9uOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICM0NDQ7CiAgICAgICAgICBib3JkZXItY29sb3I6ICM2NjY7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI1MHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5ibG9ja3MgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTAyLCAyMDQsIDAuMSk7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLmh0bWwgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNzYsIDE3NSwgODAsIDAuMSk7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLm1hcmtkb3duIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjEpOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5zdGF0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNTYsIDM5LCAxNzYsIDAuMSk7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkIHN0cm9uZyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5ibG9ja3Mgc3Ryb25nIHsKICAgICAgICBjb2xvcjogIzAwNjZjYzsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuaHRtbCBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjNENBRjUwOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5tYXJrZG93biBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjRkY5ODAwOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5zdGF0ZSBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjOUMyN0IwOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZCBwIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIFx1ezFGNjgwfSBNb2Rlcm4gV1lTSVdZRyBFZGl0b3IifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgQSBwb3dlcmZ1bCBibG9jay1iYXNlZCBlZGl0b3Igd2l0aCBzbGFzaCBjb21tYW5kcywga2V5Ym9hcmQgc2hvcnRjdXRzLCBhbmQgbXVsdGlwbGUgb3V0cHV0IGZvcm1hdHMuIAogICAgICAgICAgUGVyZmVjdCBmb3IgY29udGVudCBjcmVhdGlvbiwgYmxvZyBwb3N0cywgZG9jdW1lbnRhdGlvbiwgYW5kIG1vcmUuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPlNsYXNoIGNvbW1hbmRzICgvKTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5LZXlib2FyZCBzaG9ydGN1dHM8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+QmxvY2stYmFzZWQgZWRpdGluZzwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5EcmFnICYgZHJvcCByZW9yZGVyaW5nPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPkhUTUwgJiBNYXJrZG93biBvdXRwdXQ8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+RGFyayBtb2RlIHN1cHBvcnQ8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+TW9iaWxlIHJlc3BvbnNpdmU8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgaWQ9ImVkaXRvci1iYXNpYyIKICAgICAgICAgIGxhYmVsPSJSaWNoIFRleHQgRWRpdG9yIiAKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTdGFydCB0eXBpbmcgb3IgdXNlICcvJyB0byBpbnNlcnQgZGlmZmVyZW50IGJsb2NrIHR5cGVzIgogICAgICAgICAgb3V0cHV0Rm9ybWF0PSJodG1sIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KCiAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXRzLWJveCI+CiAgICAgICAgICA8aDQgY2xhc3M9InNob3J0Y3V0cy10aXRsZSI+4oyo77iPIEtleWJvYXJkIFNob3J0Y3V0czwvaDQ+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dHMtZ3JpZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPi88L3NwYW4+IFNsYXNoIGNvbW1hbmRzCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4jPC9zcGFuPiBIZWFkaW5nIDEKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPiMjPC9zcGFuPiBIZWFkaW5nIDIKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPiMjIzwvc3Bhbj4gSGVhZGluZyAzCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4+PC9zcGFuPiBRdW90ZQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+XGBcYFxgPC9zcGFuPiBDb2RlIGJsb2NrCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4qPC9zcGFuPiBvciA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4tPC9zcGFuPiBCdWxsZXQgbGlzdAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+MS48L3NwYW4+IE51bWJlcmVkIGxpc3QKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPi0tLTwvc3Bhbj4gRGl2aWRlcgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gXHV7MUY0RER9IEJsb2cgUG9zdCBFeGFtcGxlIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFBlcmZlY3QgZm9yIGNyZWF0aW5nIHJpY2ggY29udGVudCB3aXRoIG11bHRpcGxlIGJsb2NrIHR5cGVzLiAKICAgICAgICAgIFRoZSBlZGl0b3IgcHJlc2VydmVzIGZvcm1hdHRpbmcgYW5kIHByb3ZpZGVzIGEgY2xlYW4gZWRpdGluZyBleHBlcmllbmNlLgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgaWQ9ImVkaXRvci1hcnRpY2xlIgogICAgICAgICAgbGFiZWw9IkJsb2cgUG9zdCBDb250ZW50IiAKICAgICAgICAgIGRlc2NyaXB0aW9uPSJXcml0ZSB5b3VyIGFydGljbGUgdXNpbmcgdmFyaW91cyBmb3JtYXR0aW5nIG9wdGlvbnMiCiAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gXHV7MUY1MDB9IERyYWcgJiBEcm9wIFJlb3JkZXJpbmcifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgRWFzaWx5IHJlYXJyYW5nZSB5b3VyIGNvbnRlbnQgYmxvY2tzIGJ5IGRyYWdnaW5nIHRoZW0uIAogICAgICAgICAgSG92ZXIgb3ZlciBhbnkgYmxvY2sgdG8gcmV2ZWFsIHRoZSBkcmFnIGhhbmRsZSBvbiB0aGUgbGVmdCBzaWRlLgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgaWQ9ImVkaXRvci1kcmFnZHJvcCIKICAgICAgICAgIGxhYmVsPSJEcmFnICYgRHJvcCBEZW1vIiAKICAgICAgICAgIGRlc2NyaXB0aW9uPSJUcnkgZHJhZ2dpbmcgYmxvY2tzIHRvIHJlb3JkZXIgdGhlbSAtIGhvdmVyIHRvIHNlZSBkcmFnIGhhbmRsZXMiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InRpcHMtYm94Ij4KICAgICAgICAgIDxzdHJvbmc+8J+SoSBUaXBzOjwvc3Ryb25nPgogICAgICAgICAgPHVsIGNsYXNzPSJ0aXBzLWxpc3QiPgogICAgICAgICAgICA8bGk+SG92ZXIgb3ZlciBhbnkgYmxvY2sgdG8gc2VlIHRoZSBkcmFnIGhhbmRsZSAo4ouu4ouuKSBvbiB0aGUgbGVmdDwvbGk+CiAgICAgICAgICAgIDxsaT5DbGljayBhbmQgaG9sZCB0aGUgZHJhZyBoYW5kbGUgdG8gc3RhcnQgZHJhZ2dpbmc8L2xpPgogICAgICAgICAgICA8bGk+Qmx1ZSBpbmRpY2F0b3JzIHNob3cgd2hlcmUgdGhlIGJsb2NrIHdpbGwgYmUgZHJvcHBlZDwvbGk+CiAgICAgICAgICAgIDxsaT5EaXZpZGVyIGJsb2NrcyBjYW5ub3QgYmUgZHJhZ2dlZDwvbGk+CiAgICAgICAgICAgIDxsaT5UaGUgZWRpdG9yIG1haW50YWlucyBmb2N1cyBvbiB0aGUgbW92ZWQgYmxvY2sgYWZ0ZXIgZHJvcHBpbmc8L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjQuIFx1ezFGNERBfSBUdXRvcmlhbCAmIERvY3VtZW50YXRpb24ifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgQ3JlYXRlIGNvbXByZWhlbnNpdmUgdHV0b3JpYWxzIGFuZCBkb2N1bWVudGF0aW9uIHdpdGggY29kZSBleGFtcGxlcywgbGlzdHMsIGFuZCBzdHJ1Y3R1cmVkIGNvbnRlbnQuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLXR1dG9yaWFsIgogICAgICAgICAgbGFiZWw9IkdpdCBUdXRvcmlhbCIgCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU3RlcC1ieS1zdGVwIGd1aWRlIHdpdGggY29tbWFuZHMgYW5kIGV4cGxhbmF0aW9ucyIKICAgICAgICAgIG91dHB1dEZvcm1hdD0ibWFya2Rvd24iCiAgICAgICAgICB2YWx1ZT0iIyBHaXQgVHV0b3JpYWwgZm9yIEJlZ2lubmVycwoKR2l0IGlzIGEgZGlzdHJpYnV0ZWQgdmVyc2lvbiBjb250cm9sIHN5c3RlbSB0aGF0IGhlbHBzIHlvdSB0cmFjayBjaGFuZ2VzIGluIHlvdXIgY29kZSBvdmVyIHRpbWUuIFRoaXMgdHV0b3JpYWwgd2lsbCBndWlkZSB5b3UgdGhyb3VnaCB0aGUgYmFzaWNzLgoKIyMgUHJlcmVxdWlzaXRlcwoKQmVmb3JlIHN0YXJ0aW5nLCBlbnN1cmUgeW91IGhhdmU6CgotIEdpdCBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0KLSBBIHRleHQgZWRpdG9yIG9yIElERQotIEJhc2ljIGNvbW1hbmQgbGluZSBrbm93bGVkZ2UKCiMjIEdldHRpbmcgU3RhcnRlZAoKIyMjIDEuIENvbmZpZ3VyZSBHaXQKCkZpcnN0LCBzZXQgdXAgeW91ciBpZGVudGl0eToKClxgXGBcYGJhc2gKZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgJnF1b3Q7WW91ciBOYW1lJnF1b3Q7CmdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCAmcXVvdDt5b3VyLmVtYWlsQGV4YW1wbGUuY29tJnF1b3Q7ClxgXGBcYAoKIyMjIDIuIEluaXRpYWxpemUgYSBSZXBvc2l0b3J5CgpDcmVhdGUgYSBuZXcgR2l0IHJlcG9zaXRvcnk6CgpcYFxgXGBiYXNoCm1rZGlyIG15LXByb2plY3QKY2QgbXktcHJvamVjdApnaXQgaW5pdApcYFxgXGAKCiMjIyAzLiBCYXNpYyBHaXQgV29ya2Zsb3cKCiMjIyMgQWRkaW5nIEZpbGVzCgpDcmVhdGUgYSBmaWxlIGFuZCBhZGQgaXQgdG8gc3RhZ2luZzoKClxgXGBcYGJhc2gKZWNobyAmcXVvdDsjIE15IFByb2plY3QmcXVvdDsgPiBSRUFETUUubWQKZ2l0IGFkZCBSRUFETUUubWQKXGBcYFxgCgojIyMjIENvbW1pdHRpbmcgQ2hhbmdlcwoKXGBcYFxgYmFzaApnaXQgY29tbWl0IC1tICZxdW90O0luaXRpYWwgY29tbWl0JnF1b3Q7ClxgXGBcYAoKPiAqKkJlc3QgUHJhY3RpY2U6KiogV3JpdGUgY2xlYXIsIGRlc2NyaXB0aXZlIGNvbW1pdCBtZXNzYWdlcyB0aGF0IGV4cGxhaW4gd2hhdCBjaGFuZ2VzIHdlcmUgbWFkZSBhbmQgd2h5LgoKIyMjIDQuIFdvcmtpbmcgd2l0aCBCcmFuY2hlcwoKQnJhbmNoZXMgYWxsb3cgeW91IHRvIHdvcmsgb24gZmVhdHVyZXMgaW5kZXBlbmRlbnRseToKClxgXGBcYGJhc2gKIyBDcmVhdGUgYW5kIHN3aXRjaCB0byBhIG5ldyBicmFuY2gKZ2l0IGNoZWNrb3V0IC1iIGZlYXR1cmUtYnJhbmNoCgojIE1ha2UgY2hhbmdlcyBhbmQgY29tbWl0CmdpdCBhZGQgLgpnaXQgY29tbWl0IC1tICZxdW90O0FkZCBuZXcgZmVhdHVyZSZxdW90OwoKIyBTd2l0Y2ggYmFjayB0byBtYWluCmdpdCBjaGVja291dCBtYWluCgojIE1lcmdlIHRoZSBmZWF0dXJlCmdpdCBtZXJnZSBmZWF0dXJlLWJyYW5jaApcYFxgXGAKCi0tLQoKIyMgQ29tbW9uIENvbW1hbmRzIFJlZmVyZW5jZQoKfCBDb21tYW5kIHwgRGVzY3JpcHRpb24gfAp8LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18CnwgXGBnaXQgc3RhdHVzXGAgfCBDaGVjayByZXBvc2l0b3J5IHN0YXR1cyB8CnwgXGBnaXQgbG9nXGAgfCBWaWV3IGNvbW1pdCBoaXN0b3J5IHwKfCBcYGdpdCBkaWZmXGAgfCBTaG93IGNoYW5nZXMgfAp8IFxgZ2l0IHB1bGxcYCB8IEZldGNoIGFuZCBtZXJnZSBjaGFuZ2VzIHwKfCBcYGdpdCBwdXNoXGAgfCBVcGxvYWQgY2hhbmdlcyB0byByZW1vdGUgfAoKIyMgTmV4dCBTdGVwcwoKMS4gTGVhcm4gYWJvdXQgcmVtb3RlIHJlcG9zaXRvcmllcwoyLiBFeHBsb3JlIGFkdmFuY2VkIEdpdCBmZWF0dXJlcwozLiBQcmFjdGljZSB3aXRoIHJlYWwgcHJvamVjdHMKNC4gQ29udHJpYnV0ZSB0byBvcGVuIHNvdXJjZQoKKipIYXBweSBjb2RpbmchKiog8J+agCIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBcdXsxRjUwNH0gT3V0cHV0IEZvcm1hdHMifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgQ2hvb3NlIGJldHdlZW4gSFRNTCBhbmQgTWFya2Rvd24gb3V0cHV0IGZvcm1hdHMgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuIAogICAgICAgICAgUGVyZmVjdCBmb3Igc3RhdGljIHNpdGUgZ2VuZXJhdG9ycywgZG9jdW1lbnRhdGlvbiBzeXN0ZW1zLCBvciBhbnkgY29udGVudCBtYW5hZ2VtZW50IHdvcmtmbG93LgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtY2FyZCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICAgICAgaWQ9ImVkaXRvci1tZWV0aW5nIgogICAgICAgICAgICAgIGxhYmVsPSJNZWV0aW5nIE5vdGVzIiAKICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0iU3RydWN0dXJlZCBtZWV0aW5nIGRvY3VtZW50YXRpb24iCiAgICAgICAgICAgICAgb3V0cHV0Rm9ybWF0PSJodG1sIgogICAgICAgICAgICAgIHZhbHVlPSI8aDI+UTQgUGxhbm5pbmcgTWVldGluZzwvaDI+PHA+PHN0cm9uZz5EYXRlOjwvc3Ryb25nPiBEZWNlbWJlciAxNSwgMjAyNDxicj48c3Ryb25nPkF0dGVuZGVlczo8L3N0cm9uZz4gUHJvZHVjdCBUZWFtLCBFbmdpbmVlcmluZywgRGVzaWduPC9wPjxoMz5BZ2VuZGEgSXRlbXM8L2gzPjxvbD48bGk+UmV2aWV3IFEzIGFjaGlldmVtZW50czwvbGk+PGxpPlNldCBRNCBvYmplY3RpdmVzPC9saT48bGk+UmVzb3VyY2UgYWxsb2NhdGlvbjwvbGk+PGxpPlRpbWVsaW5lIGRpc2N1c3Npb248L2xpPjwvb2w+PGgzPktleSBEZWNpc2lvbnM8L2gzPjx1bD48bGk+TGF1bmNoIG5ldyBkYXNoYm9hcmQgZmVhdHVyZSBieSBlbmQgb2YgSmFudWFyeTwvbGk+PGxpPkluY3JlYXNlIGVuZ2luZWVyaW5nIHRlYW0gYnkgMiBkZXZlbG9wZXJzPC9saT48bGk+SW1wbGVtZW50IHdlZWtseSBkZXNpZ24gcmV2aWV3czwvbGk+PC91bD48YmxvY2txdW90ZT4mcXVvdDtGb2N1cyBvbiB1c2VyIGV4cGVyaWVuY2UgaW1wcm92ZW1lbnRzIGJhc2VkIG9uIFEzIGZlZWRiYWNrJnF1b3Q7IC0gUHJvZHVjdCBNYW5hZ2VyPC9ibG9ja3F1b3RlPjxoMz5BY3Rpb24gSXRlbXM8L2gzPjx1bD48bGk+U2FyYWg6IENyZWF0ZSBkZXRhaWxlZCBwcm9qZWN0IHRpbWVsaW5lPC9saT48bGk+TWlrZTogRHJhZnQgdGVjaG5pY2FsIHJlcXVpcmVtZW50czwvbGk+PGxpPkxpc2E6IFNjaGVkdWxlIHVzZXIgcmVzZWFyY2ggc2Vzc2lvbnM8L2xpPjwvdWw+PGhyPjxwPk5leHQgbWVldGluZzogSmFudWFyeSA1LCAyMDI1PC9wPiIKICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtYWN0aW9ucyI+CiAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXNob3ctaHRtbC1vdXRwdXQiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+U2hvdyBIVE1MIE91dHB1dDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHByZSBpZD0ib3V0cHV0LXByZXZpZXctaHRtbCIgY2xhc3M9Im91dHB1dC1wcmV2aWV3IiBhcmlhLWxpdmU9InBvbGl0ZSI+PC9wcmU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIAogICAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LWNhcmQiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgICAgIGlkPSJlZGl0b3ItcmVjaXBlIgogICAgICAgICAgICAgIGxhYmVsPSJSZWNpcGUgQmxvZyBQb3N0IiAKICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0iRm9vZCBibG9nIHdpdGggbWl4ZWQgY29udGVudCIKICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQ9Im1hcmtkb3duIgogICAgICAgICAgICAgIHZhbHVlPSIjIFVsdGltYXRlIENob2NvbGF0ZSBDaGlwIENvb2tpZXMKClRoZXJlJ3Mgbm90aGluZyBxdWl0ZSBsaWtlIHRoZSBzbWVsbCBvZiBmcmVzaGx5IGJha2VkIGNob2NvbGF0ZSBjaGlwIGNvb2tpZXMuIFRoaXMgcmVjaXBlIGhhcyBiZWVuIHBlcmZlY3RlZCBvdmVyIHllYXJzIG9mIHRlc3RpbmchCgojIyBJbmdyZWRpZW50cwoKLSAywrwgY3VwcyBhbGwtcHVycG9zZSBmbG91cgotIDEgdHNwIGJha2luZyBzb2RhCi0gMSB0c3Agc2FsdAotIDEgY3VwIGJ1dHRlciwgc29mdGVuZWQKLSDCviBjdXAgZ3JhbnVsYXRlZCBzdWdhcgotIMK+IGN1cCBwYWNrZWQgYnJvd24gc3VnYXIKLSAyIGxhcmdlIGVnZ3MKLSAyIHRzcCB2YW5pbGxhIGV4dHJhY3QKLSAyIGN1cHMgY2hvY29sYXRlIGNoaXBzCgojIyBJbnN0cnVjdGlvbnMKCiMjIyBTdGVwIDE6IFByZXBhcmF0aW9uCgpQcmVoZWF0IHlvdXIgb3ZlbiB0byAqKjM3NcKwRiAoMTkwwrBDKSoqLiBUaGlzIHRlbXBlcmF0dXJlIGlzIGNydWNpYWwgZm9yIGFjaGlldmluZyB0aGUgcGVyZmVjdCB0ZXh0dXJlLgoKIyMjIFN0ZXAgMjogTWl4IERyeSBJbmdyZWRpZW50cwoKSW4gYSBtZWRpdW0gYm93bCwgd2hpc2sgdG9nZXRoZXI6CgoxLiBGbG91cgoyLiBCYWtpbmcgc29kYQozLiBTYWx0CgojIyMgU3RlcCAzOiBDcmVhbSBCdXR0ZXIgYW5kIFN1Z2FycwoKXGBcYFxgCkNyZWFtIGJ1dHRlciBhbmQgc3VnYXJzIGZvciAzLTQgbWludXRlcwp1bnRpbCBsaWdodCBhbmQgZmx1ZmZ5ClxgXGBcYAoKPiAqKlBybyB0aXA6KiogUm9vbSB0ZW1wZXJhdHVyZSBpbmdyZWRpZW50cyBtaXggYmV0dGVyIGFuZCBjcmVhdGUgYSBtb3JlIHVuaWZvcm0gZG91Z2guCgojIyMgU3RlcCA0OiBBZGQgV2V0IEluZ3JlZGllbnRzCgpCZWF0IGluIGVnZ3Mgb25lIGF0IGEgdGltZSwgdGhlbiBhZGQgdmFuaWxsYSBleHRyYWN0LgoKIyMjIFN0ZXAgNTogQ29tYmluZSBhbmQgQmFrZQoKR3JhZHVhbGx5IGJsZW5kIGluIGZsb3VyIG1peHR1cmUsIHRoZW4gc3RpciBpbiBjaG9jb2xhdGUgY2hpcHMuIERyb3Agcm91bmRlZCB0YWJsZXNwb29ucyBvbnRvIHVuZ3JlYXNlZCBjb29raWUgc2hlZXRzLgoKLS0tCgoqKkJha2luZyB0aW1lOioqIDktMTEgbWludXRlcyBvciB1bnRpbCBnb2xkZW4gYnJvd24KCioqWWllbGQ6KiogQWJvdXQgNSBkb3plbiBjb29raWVzIgogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1hY3Rpb25zIj4KICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc2hvdy1tYXJrZG93bi1vdXRwdXQiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+U2hvdyBNYXJrZG93biBPdXRwdXQ8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwcmUgaWQ9Im91dHB1dC1wcmV2aWV3LW1hcmtkb3duIiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGFyaWEtbGl2ZT0icG9saXRlIj48L3ByZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gXHV7MUYzQTh9IEFkdmFuY2VkIEVkaXRpbmcifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgQ3JlYXRlIGNvbXBsZXggZG9jdW1lbnRzIHdpdGggbWl4ZWQgY29udGVudCB0eXBlcy4gVGhlIGVkaXRvciBoYW5kbGVzIGFsbCBmb3JtYXR0aW5nIHNlYW1sZXNzbHkuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLXRlY2huaWNhbCIKICAgICAgICAgIGxhYmVsPSJUZWNobmljYWwgRG9jdW1lbnRhdGlvbiIgCiAgICAgICAgICBkZXNjcmlwdGlvbj0iQ3JlYXRlIHRlY2huaWNhbCBkb2NzIHdpdGggY29kZSBleGFtcGxlcyBhbmQgc3RydWN0dXJlZCBjb250ZW50IgogICAgICAgICAgdmFsdWU9IjxoMT5BUEkgRG9jdW1lbnRhdGlvbjwvaDE+PHA+V2VsY29tZSB0byBvdXIgQVBJIGRvY3VtZW50YXRpb24uIEJlbG93IHlvdSdsbCBmaW5kIGV4YW1wbGVzIG9mIGhvdyB0byB1c2Ugb3VyIGVuZHBvaW50cy48L3A+PGgyPkF1dGhlbnRpY2F0aW9uPC9oMj48cD5BbGwgQVBJIHJlcXVlc3RzIHJlcXVpcmUgYXV0aGVudGljYXRpb24gdXNpbmcgYW4gQVBJIGtleTo8L3A+PHByZT48Y29kZT5BdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZPC9jb2RlPjwvcHJlPjxoMj5FbmRwb2ludHM8L2gyPjxoMz5HRVQgL3VzZXJzPC9oMz48cD5SZXRyaWV2ZSBhIGxpc3Qgb2YgdXNlcnMgZnJvbSB0aGUgc3lzdGVtLjwvcD48cHJlPjxjb2RlPmN1cmwgLVggR0VUIGh0dHBzOi8vYXBpLmV4YW1wbGUuY29tL3VzZXJzIFxcCiAgLUggJnF1b3Q7QXV0aG9yaXphdGlvbjogQmVhcmVyIFlPVVJfQVBJX0tFWSZxdW90OzwvY29kZT48L3ByZT48YmxvY2txdW90ZT5Ob3RlOiBSYXRlIGxpbWl0aW5nIGFwcGxpZXMgdG8gYWxsIGVuZHBvaW50cy4gWW91IGNhbiBtYWtlIHVwIHRvIDEwMCByZXF1ZXN0cyBwZXIgbWludXRlLjwvYmxvY2txdW90ZT48aDM+UE9TVCAvdXNlcnM8L2gzPjxwPkNyZWF0ZSBhIG5ldyB1c2VyIGluIHRoZSBzeXN0ZW0uPC9wPjxwcmU+PGNvZGU+ewogICZxdW90O25hbWUmcXVvdDs6ICZxdW90O0pvaG4gRG9lJnF1b3Q7LAogICZxdW90O2VtYWlsJnF1b3Q7OiAmcXVvdDtqb2huQGV4YW1wbGUuY29tJnF1b3Q7LAogICZxdW90O3JvbGUmcXVvdDs6ICZxdW90O3VzZXImcXVvdDsKfTwvY29kZT48L3ByZT48aHI+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZlciB0byBvdXIgY29tcGxldGUgZG9jdW1lbnRhdGlvbi48L3A+IgogICAgICAgICAgb3V0cHV0Rm9ybWF0PSJodG1sIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjcuIFx1MjY5OVx1RkUwRiBGb3JtIEludGVncmF0aW9uIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFNlYW1sZXNzbHkgaW50ZWdyYXRlcyB3aXRoIGRlZXMtZm9ybSBmb3IgY29tcGxldGUgZm9ybSBzb2x1dGlvbnMuIAogICAgICAgICAgQWxsIHN0YW5kYXJkIGZvcm0gZmVhdHVyZXMgbGlrZSB2YWxpZGF0aW9uLCByZXF1aXJlZCBmaWVsZHMsIGFuZCBkYXRhIGJpbmRpbmcgd29yayBvdXQgb2YgdGhlIGJveC4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIGxhYmVsPSJBcnRpY2xlIFRpdGxlIiAKICAgICAgICAgICAgcmVxdWlyZWQ9InRydWUiCiAgICAgICAgICAgIHZhbHVlPSJIb3cgdG8gQnVpbGQgTW9kZXJuIFdlYiBBcHBsaWNhdGlvbnMiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICAgIGlkPSJlZGl0b3ItZm9ybS1pbnRlZ3JhdGlvbiIKICAgICAgICAgICAgbGFiZWw9IkFydGljbGUgQ29udGVudCIgCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJXcml0ZSB5b3VyIGFydGljbGUgY29udGVudCBoZXJlIgogICAgICAgICAgICByZXF1aXJlZD0idHJ1ZSIKICAgICAgICAgICAgb3V0cHV0Rm9ybWF0PSJtYXJrZG93biIKICAgICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGFncwogICAgICAgICAgICBsYWJlbD0iVGFncyIKICAgICAgICAgICAgZGVzY3JpcHRpb249IkFkZCByZWxldmFudCB0YWdzIGZvciB5b3VyIGFydGljbGUiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI4LiBcdXsxRjlFOX0gUHJvZ3JhbW1hdGljIEJsb2NrIENyZWF0aW9uIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENyZWF0ZSBjb250ZW50IHByb2dyYW1tYXRpY2FsbHkgdXNpbmcgdGhlIGJsb2NrIEFQSSBmb3IgZHluYW1pYyBkb2N1bWVudCBnZW5lcmF0aW9uLgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnCiAgICAgICAgICBpZD0iZWRpdG9yLXByb2dyYW1tYXRpYyIKICAgICAgICAgIGxhYmVsPSJQcm9ncmFtbWF0aWNhbGx5IEdlbmVyYXRlZCBDb250ZW50IgogICAgICAgICAgZGVzY3JpcHRpb249IlRoaXMgY29udGVudCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgaW1wb3J0QmxvY2tzIEFQSSIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1nZW5lcmF0ZS1yZXBvcnQiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIEdlbmVyYXRlIFJlcG9ydAogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1nZW5lcmF0ZS1yZWNpcGUiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIEdlbmVyYXRlIFJlY2lwZQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1jbGVhci1lZGl0b3IiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIENsZWFyIEVkaXRvcgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI5LiBcdXsxRjRFNH0gRXhwb3J0L0ltcG9ydCBGZWF0dXJlcyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBUaGUgV1lTSVdZRyBlZGl0b3IgcHJvdmlkZXMgbXVsdGlwbGUgZXhwb3J0IGZvcm1hdHMgYW5kIGxvc3NsZXNzIHNhdmUvcmVzdG9yZSBjYXBhYmlsaXRpZXMgZm9yIG1heGltdW0gZmxleGliaWxpdHkuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImV4cG9ydC1pbmZvLWdyaWQiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tY2FyZCBibG9ja3MiPgogICAgICAgICAgICA8c3Ryb25nPkxvc3NsZXNzIEJsb2Nrczwvc3Ryb25nPgogICAgICAgICAgICA8cD5FeHBvcnQgYW5kIGltcG9ydCByYXcgYmxvY2sgc3RydWN0dXJlIGZvciBwZXJmZWN0IHJvdW5kLXRyaXAgZWRpdGluZzwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tY2FyZCBodG1sIj4KICAgICAgICAgICAgPHN0cm9uZz5IVE1MIEV4cG9ydDwvc3Ryb25nPgogICAgICAgICAgICA8cD5HZXQgY2xlYW4sIHNlbWFudGljIEhUTUwgcmVnYXJkbGVzcyBvZiBvdXRwdXQgZm9ybWF0IHNldHRpbmc8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImV4cG9ydC1pbmZvLWNhcmQgbWFya2Rvd24iPgogICAgICAgICAgICA8c3Ryb25nPk1hcmtkb3duIEV4cG9ydDwvc3Ryb25nPgogICAgICAgICAgICA8cD5FeHBvcnQgYXMgTWFya2Rvd24gZm9yIGRvY3MsIFJFQURNRXMsIGFuZCBzdGF0aWMgc2l0ZXM8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImV4cG9ydC1pbmZvLWNhcmQgc3RhdGUiPgogICAgICAgICAgICA8c3Ryb25nPlN0YXRlIE1hbmFnZW1lbnQ8L3N0cm9uZz4KICAgICAgICAgICAgPHA+U2F2ZSBhbmQgcmVzdG9yZSBjb21wbGV0ZSBlZGl0b3Igc3RhdGUgaW5jbHVkaW5nIHNldHRpbmdzPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZwogICAgICAgICAgaWQ9ImVkaXRvci1leHBvcnQiCiAgICAgICAgICBsYWJlbD0iRXhwb3J0IERlbW8gRWRpdG9yIgogICAgICAgICAgZGVzY3JpcHRpb249IlRyeSB0aGUgZXhwb3J0IGJ1dHRvbnMgYmVsb3cgdG8gc2VlIGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0cyIKICAgICAgICAgIHZhbHVlPSI8aDE+U29mdHdhcmUgUmVsZWFzZSBOb3RlczwvaDE+PHA+PHN0cm9uZz5WZXJzaW9uIDIuNS4wPC9zdHJvbmc+IC0gUmVsZWFzZWQgRGVjZW1iZXIgMTUsIDIwMjQ8L3A+PGgyPvCfjokgTmV3IEZlYXR1cmVzPC9oMj48dWw+PGxpPkFkZGVkIGRhcmsgbW9kZSBzdXBwb3J0IGFjcm9zcyBhbGwgY29tcG9uZW50czwvbGk+PGxpPkltcGxlbWVudGVkIHJlYWwtdGltZSBjb2xsYWJvcmF0aW9uIGZlYXR1cmVzPC9saT48bGk+TmV3IGRhc2hib2FyZCBhbmFseXRpY3Mgd2lkZ2V0czwvbGk+PGxpPkV4cG9ydCBmdW5jdGlvbmFsaXR5IGZvciBhbGwgcmVwb3J0IHR5cGVzPC9saT48L3VsPjxoMj7wn5CbIEJ1ZyBGaXhlczwvaDI+PHVsPjxsaT5GaXhlZCBtZW1vcnkgbGVhayBpbiBkYXRhIHByb2Nlc3NpbmcgbW9kdWxlPC9saT48bGk+UmVzb2x2ZWQgYXV0aGVudGljYXRpb24gdGltZW91dCBpc3N1ZXM8L2xpPjxsaT5Db3JyZWN0ZWQgdGltZXpvbmUgaGFuZGxpbmcgaW4gc2NoZWR1bGVkIHRhc2tzPC9saT48L3VsPjxoMj7imqEgUGVyZm9ybWFuY2UgSW1wcm92ZW1lbnRzPC9oMj48YmxvY2txdW90ZT5QYWdlIGxvYWQgdGltZXMgcmVkdWNlZCBieSA0MCUgdGhyb3VnaCBsYXp5IGxvYWRpbmcgYW5kIGNvZGUgc3BsaXR0aW5nPC9ibG9ja3F1b3RlPjxoMj7wn5SnIFRlY2huaWNhbCBEZXRhaWxzPC9oMj48cHJlPjxjb2RlPi8vIE5ldyBBUEkgZW5kcG9pbnQgZm9yIGJhdGNoIG9wZXJhdGlvbnMKUE9TVCAvYXBpL3YyL2JhdGNoCnsKICAmcXVvdDtvcGVyYXRpb25zJnF1b3Q7OiBbCiAgICB7ICZxdW90O21ldGhvZCZxdW90OzogJnF1b3Q7R0VUJnF1b3Q7LCAmcXVvdDtwYXRoJnF1b3Q7OiAmcXVvdDsvdXNlcnMvMTIzJnF1b3Q7IH0sCiAgICB7ICZxdW90O21ldGhvZCZxdW90OzogJnF1b3Q7UFVUJnF1b3Q7LCAmcXVvdDtwYXRoJnF1b3Q7OiAmcXVvdDsvc2V0dGluZ3MmcXVvdDssICZxdW90O2JvZHkmcXVvdDs6IHsuLi59IH0KICBdCn08L2NvZGU+PC9wcmU+PGgyPvCfkqEgTWlncmF0aW9uIEd1aWRlPC9oMj48b2w+PGxpPlVwZGF0ZSB5b3VyIGRlcGVuZGVuY2llcyB0byB0aGUgbGF0ZXN0IHZlcnNpb25zPC9saT48bGk+UnVuIGRhdGFiYXNlIG1pZ3JhdGlvbnM6IDxjb2RlPm5wbSBydW4gbWlncmF0ZTwvY29kZT48L2xpPjxsaT5DbGVhciBjYWNoZTogPGNvZGU+bnBtIHJ1biBjYWNoZTpjbGVhcjwvY29kZT48L2xpPjxsaT5SZXN0YXJ0IGFsbCBzZXJ2aWNlczwvbGk+PC9vbD48aHI+PHA+Rm9yIHF1ZXN0aW9ucyBvciBpc3N1ZXMsIHBsZWFzZSBjb250YWN0IHRoZSBkZXZlbG9wbWVudCB0ZWFtIG9yIGZpbGUgYSB0aWNrZXQgaW4gb3VyIGlzc3VlIHRyYWNrZXIuPC9wPiIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1leHBvcnQtYmxvY2tzIiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBFeHBvcnQgQmxvY2tzCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWV4cG9ydC1odG1sIiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBFeHBvcnQgYXMgSFRNTAogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1leHBvcnQtbWFya2Rvd24iIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIEV4cG9ydCBhcyBNYXJrZG93bgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1zYXZlLXN0YXRlIiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBTYXZlIFN0YXRlCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXJlc3RvcmUtc3RhdGUiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIFJlc3RvcmUgU3RhdGUKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7dmFyIFAxPWNsYXNze3N0YXRpYyBIRUFESU5HX1BBVFRFUk5TPVt7cGF0dGVybjovXiNbXHNcdTAwQTBdJC8sdHlwZToiaGVhZGluZy0xIn0se3BhdHRlcm46L14jI1tcc1x1MDBBMF0kLyx0eXBlOiJoZWFkaW5nLTIifSx7cGF0dGVybjovXiMjI1tcc1x1MDBBMF0kLyx0eXBlOiJoZWFkaW5nLTMifV07c3RhdGljIExJU1RfUEFUVEVSTlM9W3twYXR0ZXJuOi9eWyotXVtcc1x1MDBBMF0kLyx0eXBlOiJidWxsZXQifSx7cGF0dGVybjovXihcZCspXC5bXHNcdTAwQTBdJC8sdHlwZToib3JkZXJlZCJ9LHtwYXR0ZXJuOi9eKFxkKylcKVtcc1x1MDBBMF0kLyx0eXBlOiJvcmRlcmVkIn1dO3N0YXRpYyBRVU9URV9QQVRURVJOPS9ePltcc1x1MDBBMF0kLztzdGF0aWMgQ09ERV9QQVRURVJOPS9eYGBgJC87c3RhdGljIERJVklERVJfUEFUVEVSTlM9WyItLS0iLCIqKioiLCJfX18iXTtzdGF0aWMgY2hlY2tIZWFkaW5nU2hvcnRjdXQoZSl7Zm9yKGxldHtwYXR0ZXJuOmEsdHlwZTpyfW9mIHRoaXMuSEVBRElOR19QQVRURVJOUylpZihhLnRlc3QoZSkpcmV0dXJue3R5cGU6cn07cmV0dXJuIG51bGx9c3RhdGljIGNoZWNrTGlzdFNob3J0Y3V0KGUpe2ZvcihsZXR7cGF0dGVybjphLHR5cGU6cn1vZiB0aGlzLkxJU1RfUEFUVEVSTlMpaWYoYS50ZXN0KGUpKXJldHVybnt0eXBlOiJsaXN0IixsaXN0VHlwZTpyfTtyZXR1cm4gbnVsbH1zdGF0aWMgY2hlY2tRdW90ZVNob3J0Y3V0KGUpe3JldHVybiB0aGlzLlFVT1RFX1BBVFRFUk4udGVzdChlKX1zdGF0aWMgY2hlY2tDb2RlU2hvcnRjdXQoZSl7cmV0dXJuIHRoaXMuQ09ERV9QQVRURVJOLnRlc3QoZSl9c3RhdGljIGNoZWNrRGl2aWRlclNob3J0Y3V0KGUpe3JldHVybiB0aGlzLkRJVklERVJfUEFUVEVSTlMuaW5jbHVkZXMoZSl9c3RhdGljIGdldFNsYXNoTWVudUl0ZW1zKCl7cmV0dXJuW3t0eXBlOiJwYXJhZ3JhcGgiLGxhYmVsOiJQYXJhZ3JhcGgiLGljb246Imx1Y2lkZTpwaWxjcm93In0se3R5cGU6ImhlYWRpbmctMSIsbGFiZWw6IkhlYWRpbmcgMSIsaWNvbjoibHVjaWRlOmhlYWRpbmcxIn0se3R5cGU6ImhlYWRpbmctMiIsbGFiZWw6IkhlYWRpbmcgMiIsaWNvbjoibHVjaWRlOmhlYWRpbmcyIn0se3R5cGU6ImhlYWRpbmctMyIsbGFiZWw6IkhlYWRpbmcgMyIsaWNvbjoibHVjaWRlOmhlYWRpbmczIn0se3R5cGU6InF1b3RlIixsYWJlbDoiUXVvdGUiLGljb246Imx1Y2lkZTpxdW90ZSJ9LHt0eXBlOiJjb2RlIixsYWJlbDoiQ29kZSBCbG9jayIsaWNvbjoibHVjaWRlOmZpbGVDb2RlIn0se3R5cGU6Imxpc3QiLGxhYmVsOiJCdWxsZXQgTGlzdCIsaWNvbjoibHVjaWRlOmxpc3QifSx7dHlwZToiaW1hZ2UiLGxhYmVsOiJJbWFnZSIsaWNvbjoibHVjaWRlOmltYWdlIn0se3R5cGU6ImRpdmlkZXIiLGxhYmVsOiJEaXZpZGVyIixpY29uOiJsdWNpZGU6bWludXMifSx7dHlwZToieW91dHViZSIsbGFiZWw6IllvdVR1YmUiLGljb246Imx1Y2lkZTp5b3V0dWJlIn0se3R5cGU6Im1hcmtkb3duIixsYWJlbDoiTWFya2Rvd24iLGljb246Imx1Y2lkZTpmaWxlVGV4dCJ9LHt0eXBlOiJodG1sIixsYWJlbDoiSFRNTCIsaWNvbjoibHVjaWRlOmNvZGUifSx7dHlwZToiYXR0YWNobWVudCIsbGFiZWw6IkZpbGUgQXR0YWNobWVudCIsaWNvbjoibHVjaWRlOnBhcGVyY2xpcCJ9XX1zdGF0aWMgZ2VuZXJhdGVCbG9ja0lkKCl7cmV0dXJuYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gfX07ZmUoKTtGdCgpO0JlKCk7dmFyIHg1PWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sZHI9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LFdFZT0oKCk9PntsZXQgdD1bY2UoImRlZXMtc2xhc2gtbWVudSIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdO3ZhciBFPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgQz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtsZSgpXSxmPVtsZSgpXSxkPVtsZSgpXSxiPVtsZSgpXSx2PVtsZSgpXSx4NSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZpc2libGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJ2aXNpYmxlImluIHosZ2V0Ono9PnoudmlzaWJsZSxzZXQ6KHosUCk9Pnt6LnZpc2libGU9UH19LG1ldGFkYXRhOkN9LHMsbCkseDUodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwb3NpdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InBvc2l0aW9uImluIHosZ2V0Ono9PnoucG9zaXRpb24sc2V0Oih6LFApPT57ei5wb3NpdGlvbj1QfX0sbWV0YWRhdGE6Q30sYyx1KSx4NSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImZpbHRlciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImZpbHRlciJpbiB6LGdldDp6PT56LmZpbHRlcixzZXQ6KHosUCk9Pnt6LmZpbHRlcj1QfX0sbWV0YWRhdGE6Q30saCxnKSx4NSh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkSW5kZXgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJzZWxlY3RlZEluZGV4ImluIHosZ2V0Ono9Pnouc2VsZWN0ZWRJbmRleCxzZXQ6KHosUCk9Pnt6LnNlbGVjdGVkSW5kZXg9UH19LG1ldGFkYXRhOkN9LHgsbSkseDUodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtZW51WkluZGV4IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ibWVudVpJbmRleCJpbiB6LGdldDp6PT56Lm1lbnVaSW5kZXgsc2V0Oih6LFApPT57ei5tZW51WkluZGV4PVB9fSxtZXRhZGF0YTpDfSx5LHcpLHg1KG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOkN9LG51bGwsYSksRT1yPWUudmFsdWUsQyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpDfSl9c3RhdGljIGluc3RhbmNlO3N0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiBFLmluc3RhbmNlfHwoRS5pbnN0YW5jZT1uZXcgRSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKEUuaW5zdGFuY2UpKSxFLmluc3RhbmNlfSNlPWRyKHRoaXMscywhMSk7Z2V0IHZpc2libGUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdmlzaWJsZShDKXt0aGlzLiNlPUN9I3Q9KGRyKHRoaXMsbCksZHIodGhpcyxjLHt4OjAseTowfSkpO2dldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLiN0fXNldCBwb3NpdGlvbihDKXt0aGlzLiN0PUN9I2E9KGRyKHRoaXMsdSksZHIodGhpcyxoLCIiKSk7Z2V0IGZpbHRlcigpe3JldHVybiB0aGlzLiNhfXNldCBmaWx0ZXIoQyl7dGhpcy4jYT1DfSNyPShkcih0aGlzLGcpLGRyKHRoaXMseCwwKSk7Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy4jcn1zZXQgc2VsZWN0ZWRJbmRleChDKXt0aGlzLiNyPUN9I2k9KGRyKHRoaXMsbSksZHIodGhpcyx5LDFlMykpO2dldCBtZW51WkluZGV4KCl7cmV0dXJuIHRoaXMuI2l9c2V0IG1lbnVaSW5kZXgoQyl7dGhpcy4jaT1DfWNhbGxiYWNrPShkcih0aGlzLHcpLG51bGwpO3N0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIG1pbi13aWR0aDogMjIwcHg7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBhbmltYXRpb246IGZhZGVJblNjYWxlIDAuMTVzIGVhc2Utb3V0OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZhZGVJblNjYWxlIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpIHRyYW5zbGF0ZVkoLTJweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc2xhc2gtbWVudS1pdGVtIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW06aG92ZXIsCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjRmNGY1IiwiIzI3MjcyYSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAuc2xhc2gtbWVudS1pdGVtIC5pY29uIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW06aG92ZXIgLmljb24sCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgLmljb24gewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe2lmKCF0aGlzLnZpc2libGUpcmV0dXJuIE1gYDt0aGlzLnN0eWxlLnpJbmRleD10aGlzLm1lbnVaSW5kZXgudG9TdHJpbmcoKTtsZXQgQz10aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7cmV0dXJuIE1gCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9InNsYXNoLW1lbnUiIAogICAgICAgIHN0eWxlPSJsZWZ0OiAke3RoaXMucG9zaXRpb24ueH1weDsgdG9wOiAke3RoaXMucG9zaXRpb24ueX1weDsiCiAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgIGRhdGEtbWVudS10eXBlPSJzbGFzaCIKICAgICAgPgogICAgICAgICR7Qy5tYXAoKHosUCk9Pk1gCiAgICAgICAgICA8ZGl2IAogICAgICAgICAgICBjbGFzcz0ic2xhc2gtbWVudS1pdGVtICR7UD09PXRoaXMuc2VsZWN0ZWRJbmRleD8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgZGF0YS1pdGVtLXR5cGU9IiR7ei50eXBlfSIKICAgICAgICAgICAgZGF0YS1pdGVtLWluZGV4PSIke1B9IgogICAgICAgICAgPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJpY29uIiAuaWNvbj0iJHt6Lmljb259IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8c3Bhbj4ke3oubGFiZWx9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYH1nZXRGaWx0ZXJlZE1lbnVJdGVtcygpe3JldHVybiBQMS5nZXRTbGFzaE1lbnVJdGVtcygpLmZpbHRlcih6PT50aGlzLmZpbHRlcj09PSIifHx6LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5maWx0ZXIudG9Mb3dlckNhc2UoKSkpfXNlbGVjdEl0ZW0oQyl7dGhpcy5jYWxsYmFjayYmdGhpcy5jYWxsYmFjayhDKSx0aGlzLmhpZGUoKX1zaG93KEMseil7dGhpcy5wb3NpdGlvbj1DLHRoaXMuY2FsbGJhY2s9eix0aGlzLmZpbHRlcj0iIix0aGlzLnNlbGVjdGVkSW5kZXg9MCx0aGlzLm1lbnVaSW5kZXg9czEuZ2V0TmV4dFpJbmRleCgpLHMxLnJlZ2lzdGVyKHRoaXMsdGhpcy5tZW51WkluZGV4KSx0aGlzLnN0eWxlLnpJbmRleD10aGlzLm1lbnVaSW5kZXgudG9TdHJpbmcoKSx0aGlzLnZpc2libGU9ITB9aGlkZSgpe3RoaXMudmlzaWJsZT0hMSx0aGlzLmNhbGxiYWNrPW51bGwsdGhpcy5maWx0ZXI9IiIsdGhpcy5zZWxlY3RlZEluZGV4PTAsczEudW5yZWdpc3Rlcih0aGlzKX11cGRhdGVGaWx0ZXIoQyl7dGhpcy5maWx0ZXI9Qyx0aGlzLnNlbGVjdGVkSW5kZXg9MH1uYXZpZ2F0ZShDKXtsZXQgej10aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7Qz09PSJkb3duIj90aGlzLnNlbGVjdGVkSW5kZXg9KHRoaXMuc2VsZWN0ZWRJbmRleCsxKSV6Lmxlbmd0aDp0aGlzLnNlbGVjdGVkSW5kZXg9dGhpcy5zZWxlY3RlZEluZGV4PT09MD96Lmxlbmd0aC0xOnRoaXMuc2VsZWN0ZWRJbmRleC0xfXNlbGVjdEN1cnJlbnQoKXtsZXQgQz10aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7Q1t0aGlzLnNlbGVjdGVkSW5kZXhdJiZ0aGlzLnNlbGVjdEl0ZW0oQ1t0aGlzLnNlbGVjdGVkSW5kZXhdLnR5cGUpfWZpcnN0VXBkYXRlZCgpe3RoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixDPT57bGV0IHo9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2xhc2gtbWVudSIpO3omJnouY29udGFpbnMoQy50YXJnZXQpJiYoQy5wcmV2ZW50RGVmYXVsdCgpLEMuc3RvcFByb3BhZ2F0aW9uKCkpfSksdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsQz0+e2xldCBQPUMudGFyZ2V0LmNsb3Nlc3QoIi5zbGFzaC1tZW51LWl0ZW0iKTtpZihQKXtDLnByZXZlbnREZWZhdWx0KCksQy5zdG9wUHJvcGFnYXRpb24oKTtsZXQgXz1QLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLXR5cGUiKTtfJiZ0aGlzLnNlbGVjdEl0ZW0oXyl9fSksdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIixDPT57bGV0IFA9Qy50YXJnZXQuY2xvc2VzdCgiLnNsYXNoLW1lbnUtaXRlbSIpO2lmKFApe2xldCBfPXBhcnNlSW50KFAuZ2V0QXR0cmlidXRlKCJkYXRhLWl0ZW0taW5kZXgiKXx8IjAiLDEwKTt0aGlzLnNlbGVjdGVkSW5kZXg9X319LCEwKSx0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixDPT57bGV0IHo9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2xhc2gtbWVudSIpO3omJnouY29udGFpbnMoQy50YXJnZXQpJiYoQy5wcmV2ZW50RGVmYXVsdCgpLEMuc3RvcFByb3BhZ2F0aW9uKCkpfSwhMCl9c3RhdGlje2RyKHIsYSl9fTtyZXR1cm4gRT1yfSkoKTt2YXIgSWU9Y2xhc3N7c3RhdGljIGdldFNlbGVjdGlvbkluZm8oLi4uZSl7bGV0IGE9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKGNvbnNvbGUubG9nKCJXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8gLSBzZWxlY3Rpb246IixhLCJyYW5nZUNvdW50OiIsYT8ucmFuZ2VDb3VudCksIWEpcmV0dXJuIG51bGw7aWYoImdldENvbXBvc2VkUmFuZ2VzImluIGEmJnR5cGVvZiBhLmdldENvbXBvc2VkUmFuZ2VzPT0iZnVuY3Rpb24iKXtjb25zb2xlLmxvZygiVXNpbmcgZ2V0Q29tcG9zZWRSYW5nZXMgd2l0aCIsZS5sZW5ndGgsInNoYWRvdyByb290cyIpO3RyeXtsZXQgcj1hLmdldENvbXBvc2VkUmFuZ2VzKHtzaGFkb3dSb290czplfSk7aWYoY29uc29sZS5sb2coImdldENvbXBvc2VkUmFuZ2VzIHJldHVybmVkIixyLmxlbmd0aCwicmFuZ2VzIiksci5sZW5ndGg+MCl7bGV0IGk9clswXTtyZXR1cm57c3RhcnRDb250YWluZXI6aS5zdGFydENvbnRhaW5lcixzdGFydE9mZnNldDppLnN0YXJ0T2Zmc2V0LGVuZENvbnRhaW5lcjppLmVuZENvbnRhaW5lcixlbmRPZmZzZXQ6aS5lbmRPZmZzZXQsY29sbGFwc2VkOmkuY29sbGFwc2VkfX19Y2F0Y2gocil7Y29uc29sZS53YXJuKCJnZXRDb21wb3NlZFJhbmdlcyBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBnZXRSYW5nZUF0OiIscil9fWVsc2UgY29uc29sZS5sb2coImdldENvbXBvc2VkUmFuZ2VzIG5vdCBhdmFpbGFibGUsIHVzaW5nIGZhbGxiYWNrIik7aWYoYS5yYW5nZUNvdW50PjApe2xldCByPWEuZ2V0UmFuZ2VBdCgwKTtyZXR1cm57c3RhcnRDb250YWluZXI6ci5zdGFydENvbnRhaW5lcixzdGFydE9mZnNldDpyLnN0YXJ0T2Zmc2V0LGVuZENvbnRhaW5lcjpyLmVuZENvbnRhaW5lcixlbmRPZmZzZXQ6ci5lbmRPZmZzZXQsY29sbGFwc2VkOnIuY29sbGFwc2VkfX1yZXR1cm4gbnVsbH1zdGF0aWMgaXNTZWxlY3Rpb25JbkVsZW1lbnQoZSxhKXtsZXQgcj1hP3RoaXMuZ2V0U2VsZWN0aW9uSW5mbyhhKTp0aGlzLmdldFNlbGVjdGlvbkluZm8oKTtyZXR1cm4gcj9lLmNvbnRhaW5zKHIuc3RhcnRDb250YWluZXIpfHxlLmNvbnRhaW5zKHIuZW5kQ29udGFpbmVyKTohMX1zdGF0aWMgZ2V0U2VsZWN0ZWRUZXh0KCl7bGV0IGU9d2luZG93LmdldFNlbGVjdGlvbigpO3JldHVybiBlP2UudG9TdHJpbmcoKToiIn1zdGF0aWMgY3JlYXRlUmFuZ2VGcm9tSW5mbyhlKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3JldHVybiBhLnNldFN0YXJ0KGUuc3RhcnRDb250YWluZXIsZS5zdGFydE9mZnNldCksYS5zZXRFbmQoZS5lbmRDb250YWluZXIsZS5lbmRPZmZzZXQpLGF9c3RhdGljIHNldFNlbGVjdGlvbkZyb21SYW5nZShlKXtsZXQgYT13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7YSYmKGEucmVtb3ZlQWxsUmFuZ2VzKCksYS5hZGRSYW5nZShlKSl9c3RhdGljIGdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KGUsLi4uYSl7bGV0IHI9YS5sZW5ndGg+MD90aGlzLmdldFNlbGVjdGlvbkluZm8oLi4uYSk6dGhpcy5nZXRTZWxlY3Rpb25JbmZvKCk7aWYoIXJ8fCFyLmNvbGxhcHNlZClyZXR1cm4gbnVsbDt0cnl7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtpZihpLnNlbGVjdE5vZGVDb250ZW50cyhlKSx0aGlzLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGUsci5zdGFydENvbnRhaW5lcikpcmV0dXJuIGkuc2V0RW5kKHIuc3RhcnRDb250YWluZXIsci5zdGFydE9mZnNldCksaS50b1N0cmluZygpLmxlbmd0aDt7bGV0IHM9ZS50ZXh0Q29udGVudHx8IiIsbD1yLnN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50fHwiIjtyZXR1cm4gci5zdGFydE9mZnNldD09PTA/MDpyLnN0YXJ0T2Zmc2V0PT09bC5sZW5ndGg/cy5sZW5ndGg6KGNvbnNvbGUud2FybigiU2VsZWN0aW9uIGNvbnRhaW5lciBub3Qgd2l0aGluIGVsZW1lbnQsIHVzaW5nIHRleHQgbWF0Y2hpbmcgZmFsbGJhY2siKSxyLnN0YXJ0T2Zmc2V0KX19Y2F0Y2goaSl7cmV0dXJuIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGdldCBjdXJzb3IgcG9zaXRpb246IixpKSxudWxsfX1zdGF0aWMgZ2V0Q3Vyc29yUG9zaXRpb25Gcm9tUG9pbnQoZSxhLHIsLi4uaSl7aWYoImNhcmV0UG9zaXRpb25Gcm9tUG9pbnQiaW4gZG9jdW1lbnQmJmRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQpe2xldCBvPW51bGw7dHJ5e289ZG9jdW1lbnQuY2FyZXRQb3NpdGlvbkZyb21Qb2ludChlLGEsLi4uaSl9Y2F0Y2h7bz1kb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KGUsYSl9aWYobyYmci5jb250YWlucyhvLm9mZnNldE5vZGUpKXJldHVybiB0aGlzLmdldE9mZnNldEluRWxlbWVudChvLm9mZnNldE5vZGUsby5vZmZzZXQscil9aWYoImNhcmV0UmFuZ2VGcm9tUG9pbnQiaW4gZG9jdW1lbnQpe2xldCBvPWRvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoZSxhKTtpZihvJiZyLmNvbnRhaW5zKG8uc3RhcnRDb250YWluZXIpKXJldHVybiB0aGlzLmdldE9mZnNldEluRWxlbWVudChvLnN0YXJ0Q29udGFpbmVyLG8uc3RhcnRPZmZzZXQscil9cmV0dXJuIG51bGx9c3RhdGljIGdldE9mZnNldEluRWxlbWVudChlLGEscil7bGV0IGk9MCxvPSExLHM9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLE5vZGVGaWx0ZXIuU0hPV19URVhULG51bGwpLGw7Zm9yKDtsPXMubmV4dE5vZGUoKTspaWYobD09PWUpe2krPWEsbz0hMDticmVha31lbHNlIGkrPWwudGV4dENvbnRlbnQ/Lmxlbmd0aHx8MDtyZXR1cm4gbz9pOjB9c3RhdGljIHNldEN1cnNvclBvc2l0aW9uKGUsYSl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlLE5vZGVGaWx0ZXIuU0hPV19URVhULG51bGwpLGk9MCxvPW51bGwscz0wO2Zvcig7ci5uZXh0Tm9kZSgpOyl7bGV0IGw9ci5jdXJyZW50Tm9kZSxmPWwudGV4dENvbnRlbnQ/Lmxlbmd0aHx8MDtpZihpK2Y+PWEpe289bCxzPWEtaTticmVha31pKz1mfWlmKG8pe2xldCBsPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7bC5zZXRTdGFydChvLHMpLGwuY29sbGFwc2UoITApLHRoaXMuc2V0U2VsZWN0aW9uRnJvbVJhbmdlKGwpfX1zdGF0aWMgY29udGFpbnNBY3Jvc3NTaGFkb3dET00oZSxhKXtpZighZXx8IWEpcmV0dXJuITE7bGV0IHI9YTtmb3IoO3I7KXtpZihyPT09ZSlyZXR1cm4hMDtpZihyLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFJiZyLmhvc3Qpe2xldCBpPXI7aWYoaS5jb250YWlucyhlKSlyZXR1cm4hMTtyPWkuaG9zdH1lbHNlIHI9ci5wYXJlbnROb2RlfXJldHVybiExfX07ZmUoKTt2YXIgZHM9Y2xhc3N7c3RhdGljIGZvcm1hdEJ1dHRvbnM9W3tjb21tYW5kOiJib2xkIixpY29uOiJCIixsYWJlbDoiQm9sZCIsc2hvcnRjdXQ6Ilx1MjMxOEIifSx7Y29tbWFuZDoiaXRhbGljIixpY29uOiJJIixsYWJlbDoiSXRhbGljIixzaG9ydGN1dDoiXHUyMzE4SSJ9LHtjb21tYW5kOiJ1bmRlcmxpbmUiLGljb246IlUiLGxhYmVsOiJVbmRlcmxpbmUiLHNob3J0Y3V0OiJcdTIzMThVIn0se2NvbW1hbmQ6InN0cmlrZVRocm91Z2giLGljb246IlNcdTAzMzYiLGxhYmVsOiJTdHJpa2V0aHJvdWdoIn0se2NvbW1hbmQ6ImNvZGUiLGljb246InsgfSIsbGFiZWw6IklubGluZSBDb2RlIn0se2NvbW1hbmQ6ImxpbmsiLGljb246Ilx1ezFGNTE3fSIsbGFiZWw6IkxpbmsiLHNob3J0Y3V0OiJcdTIzMThLIn1dO3N0YXRpYyByZW5kZXJGb3JtYXR0aW5nTWVudShlLGEpe3JldHVybiBNYAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJmb3JtYXR0aW5nLW1lbnUiIAogICAgICAgIHN0eWxlPSJ0b3A6ICR7ZS55fXB4OyBsZWZ0OiAke2UueH1weDsiCiAgICAgICAgQG1vdXNlZG93bj0iJHtyPT57ci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCl9fSIKICAgICAgICBAY2xpY2s9IiR7cj0+ci5zdG9wUHJvcGFnYXRpb24oKX0iCiAgICAgID4KICAgICAgICAke3RoaXMuZm9ybWF0QnV0dG9ucy5tYXAocj0+TWAKICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgIGNsYXNzPSJmb3JtYXQtYnV0dG9uICR7ci5jb21tYW5kfSIKICAgICAgICAgICAgQGNsaWNrPSIkeygpPT5hKHIuY29tbWFuZCl9IgogICAgICAgICAgICB0aXRsZT0iJHtyLmxhYmVsfSR7ci5zaG9ydGN1dD9gICgke3Iuc2hvcnRjdXR9KWA6IiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtyLmNvbW1hbmQ9PT0iY29kZSI/ImNvZGUtaWNvbiI6IiJ9Ij4ke3IuaWNvbn08L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgfXN0YXRpYyBhcHBseUZvcm1hdChlLGEscixpKXtsZXQgbztpZihyKW89cjtlbHNle2xldCBzPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighc3x8cy5yYW5nZUNvdW50PT09MClyZXR1cm4hMTtvPXMuZ2V0UmFuZ2VBdCgwKX1zd2l0Y2goZSl7Y2FzZSJib2xkIjp0aGlzLndyYXBTZWxlY3Rpb24obywic3Ryb25nIik7YnJlYWs7Y2FzZSJpdGFsaWMiOnRoaXMud3JhcFNlbGVjdGlvbihvLCJlbSIpO2JyZWFrO2Nhc2UidW5kZXJsaW5lIjp0aGlzLndyYXBTZWxlY3Rpb24obywidSIpO2JyZWFrO2Nhc2Uic3RyaWtlVGhyb3VnaCI6dGhpcy53cmFwU2VsZWN0aW9uKG8sInMiKTticmVhaztjYXNlImNvZGUiOnRoaXMud3JhcFNlbGVjdGlvbihvLCJjb2RlIik7YnJlYWs7Y2FzZSJsaW5rIjppZighYSlyZXR1cm4hMTt0aGlzLndyYXBTZWxlY3Rpb25XaXRoTGluayhvLGEpO2JyZWFrfWlmKGkmJmkubGVuZ3RoPjApSWUuc2V0U2VsZWN0aW9uRnJvbVJhbmdlKG8pO2Vsc2V7bGV0IHM9d2luZG93LmdldFNlbGVjdGlvbigpO3MmJihzLnJlbW92ZUFsbFJhbmdlcygpLHMuYWRkUmFuZ2UobykpfXJldHVybiEwfXN0YXRpYyB3cmFwU2VsZWN0aW9uKGUsYSl7bGV0IHI9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKCFyKXJldHVybjtpZih0aGlzLnNlbGVjdGlvbkNvbnRhaW5zVGFnKGUsYSkpdGhpcy5yZW1vdmVUYWdGcm9tU2VsZWN0aW9uKGUsYSk7ZWxzZXtsZXQgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGEpO3RyeXtsZXQgcz1lLmV4dHJhY3RDb250ZW50cygpO28uYXBwZW5kQ2hpbGQocyksZS5pbnNlcnROb2RlKG8pLGUuc2VsZWN0Tm9kZUNvbnRlbnRzKG8pLHIucmVtb3ZlQWxsUmFuZ2VzKCksci5hZGRSYW5nZShlKX1jYXRjaChzKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gd3JhcCBzZWxlY3Rpb246IixzKX19fXN0YXRpYyBzZWxlY3Rpb25Db250YWluc1RhZyhlLGEpe2xldCByPWUuc3RhcnRDb250YWluZXI7Zm9yKDtyJiZyIT09ZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50Oyl7aWYoci5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZyLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWEpcmV0dXJuITA7cj1yLnBhcmVudE5vZGV9Zm9yKHI9ZS5lbmRDb250YWluZXI7ciYmciE9PWUuY29tbW9uQW5jZXN0b3JDb250YWluZXIub3duZXJEb2N1bWVudDspe2lmKHIubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmci50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT1hKXJldHVybiEwO3I9ci5wYXJlbnROb2RlfWxldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG89ZS5jbG9uZUNvbnRlbnRzKCk7cmV0dXJuIGkuYXBwZW5kQ2hpbGQobyksaS5nZXRFbGVtZW50c0J5VGFnTmFtZShhKS5sZW5ndGg+MH1zdGF0aWMgcmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihlLGEpe2xldCByPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighcilyZXR1cm47bGV0IGk9ZS5jbG9uZVJhbmdlKCksbz1lLnN0YXJ0Q29udGFpbmVyLHM9bnVsbDtmb3IoO28mJm8hPT1lLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm93bmVyRG9jdW1lbnQ7KXtpZihvLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8udGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09YSl7cz1vO2JyZWFrfW89by5wYXJlbnROb2RlfWxldCBsPWUuZW5kQ29udGFpbmVyLGY9bnVsbDtmb3IoO2wmJmwhPT1lLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm93bmVyRG9jdW1lbnQ7KXtpZihsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJmwudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09YSl7Zj1sO2JyZWFrfWw9bC5wYXJlbnROb2RlfXMmJmkuc2V0U3RhcnRCZWZvcmUocyksZiYmaS5zZXRFbmRBZnRlcihmKTtsZXQgYz1pLmV4dHJhY3RDb250ZW50cygpLHU9dGhpcy5yZW1vdmVUYWdzRnJvbUZyYWdtZW50KGMsYSk7aS5pbnNlcnROb2RlKHUpO2xldCBkPVtdLGg9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcih1LE5vZGVGaWx0ZXIuU0hPV19URVhULG51bGwpLGc7Zm9yKDtnPWgubmV4dE5vZGUoKTspZC5wdXNoKGcpO2lmKGQubGVuZ3RoPjApe2xldCBiPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Yi5zZXRTdGFydChkWzBdLDApLGIuc2V0RW5kKGRbZC5sZW5ndGgtMV0sZFtkLmxlbmd0aC0xXS50ZXh0Q29udGVudD8ubGVuZ3RofHwwKSxyLnJlbW92ZUFsbFJhbmdlcygpLHIuYWRkUmFuZ2UoYil9fXN0YXRpYyByZW1vdmVUYWdzRnJvbUZyYWdtZW50KGUsYSl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5hcHBlbmRDaGlsZChlKTtsZXQgaT1yLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO0FycmF5LmZyb20oaSkuZm9yRWFjaChsPT57bGV0IGY9bC5wYXJlbnROb2RlO2lmKGYpe2Zvcig7bC5maXJzdENoaWxkOylmLmluc2VydEJlZm9yZShsLmZpcnN0Q2hpbGQsbCk7Zi5yZW1vdmVDaGlsZChsKX19KTtsZXQgcz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Zm9yKDtyLmZpcnN0Q2hpbGQ7KXMuYXBwZW5kQ2hpbGQoci5maXJzdENoaWxkKTtyZXR1cm4gc31zdGF0aWMgd3JhcFNlbGVjdGlvbldpdGhMaW5rKGUsYSl7bGV0IHI9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKCFyKXJldHVybjt0aGlzLnNlbGVjdGlvbkNvbnRhaW5zVGFnKGUsImEiKSYmKHRoaXMucmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihlLCJhIiksci5yYW5nZUNvdW50PjAmJihlPXIuZ2V0UmFuZ2VBdCgwKSkpO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpLmhyZWY9YSxpLnRhcmdldD0iX2JsYW5rIixpLnJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI7dHJ5e2xldCBvPWUuZXh0cmFjdENvbnRlbnRzKCk7aS5hcHBlbmRDaGlsZChvKSxlLmluc2VydE5vZGUoaSksZS5zZWxlY3ROb2RlQ29udGVudHMoaSksci5yZW1vdmVBbGxSYW5nZXMoKSxyLmFkZFJhbmdlKGUpfWNhdGNoKG8pe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgbGluazoiLG8pfX1zdGF0aWMgZ2V0U2VsZWN0aW9uQ29vcmRpbmF0ZXMoLi4uZSl7bGV0IGE9SWUuZ2V0U2VsZWN0aW9uSW5mbyguLi5lKTtpZihjb25zb2xlLmxvZygiZ2V0U2VsZWN0aW9uQ29vcmRpbmF0ZXMgLSBzZWxlY3Rpb25JbmZvOiIsYSksIWEpcmV0dXJuIGNvbnNvbGUubG9nKCJObyBzZWxlY3Rpb24gaW5mbyBhdmFpbGFibGUiKSxudWxsO2xldCBpPUllLmNyZWF0ZVJhbmdlRnJvbUluZm8oYSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoY29uc29sZS5sb2coIlJhbmdlIHJlY3Q6IixpKSxpLndpZHRoPT09MCYmaS5oZWlnaHQ9PT0wKXtpZihjb25zb2xlLmxvZygiUmVjdCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSAwLCB0cnlpbmcgZGlmZmVyZW50IGFwcHJvYWNoIiksImNhcmV0UG9zaXRpb25Gcm9tUG9pbnQiaW4gZG9jdW1lbnQpe2xldCBzPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZihzJiZzLnJhbmdlQ291bnQ+MCl7bGV0IGw9cy5nZXRSYW5nZUF0KDApLGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2YudGV4dENvbnRlbnQ9Ilx1MjAwQiIsbC5pbnNlcnROb2RlKGYpO2xldCBjPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZi5yZW1vdmUoKSxjLndpZHRoPjB8fGMuaGVpZ2h0PjApe2xldCB1PXt4OmMubGVmdCx5Ok1hdGgubWF4KDQ1LGMudG9wLTQ1KX07cmV0dXJuIGNvbnNvbGUubG9nKCJVc2VkIHNwYW4gdHJpY2sgZm9yIGNvb3JkczoiLHUpLHV9fX1yZXR1cm4gbnVsbH1sZXQgbz17eDppLmxlZnQraS53aWR0aC8yLHk6TWF0aC5tYXgoNDUsaS50b3AtNDUpfTtyZXR1cm4gY29uc29sZS5sb2coIlJldHVybmluZyBjb29yZHM6IixvKSxvfX07ZmUoKTtCZSgpO3ZhciB2aj1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LGxjPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxHRWU9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWZvcm1hdHRpbmctbWVudSIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdO3ZhciBiPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgeD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtsZSgpXSxmPVtsZSgpXSxkPVtsZSgpXSx2aih0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZpc2libGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJ2aXNpYmxlImluIG0sZ2V0Om09Pm0udmlzaWJsZSxzZXQ6KG0sdik9PnttLnZpc2libGU9dn19LG1ldGFkYXRhOnh9LHMsbCksdmoodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwb3NpdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+InBvc2l0aW9uImluIG0sZ2V0Om09Pm0ucG9zaXRpb24sc2V0OihtLHYpPT57bS5wb3NpdGlvbj12fX0sbWV0YWRhdGE6eH0sYyx1KSx2aih0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1lbnVaSW5kZXgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJtZW51WkluZGV4ImluIG0sZ2V0Om09Pm0ubWVudVpJbmRleCxzZXQ6KG0sdik9PnttLm1lbnVaSW5kZXg9dn19LG1ldGFkYXRhOnh9LGgsZyksdmoobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6eH0sbnVsbCxhKSxiPXI9ZS52YWx1ZSx4JiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnh9KX1zdGF0aWMgaW5zdGFuY2U7c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIGIuaW5zdGFuY2V8fChiLmluc3RhbmNlPW5ldyBiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYi5pbnN0YW5jZSkpLGIuaW5zdGFuY2V9I2U9bGModGhpcyxzLCExKTtnZXQgdmlzaWJsZSgpe3JldHVybiB0aGlzLiNlfXNldCB2aXNpYmxlKHgpe3RoaXMuI2U9eH0jdD0obGModGhpcyxsKSxsYyh0aGlzLGMse3g6MCx5OjB9KSk7Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHBvc2l0aW9uKHgpe3RoaXMuI3Q9eH0jYT0obGModGhpcyx1KSxsYyh0aGlzLGgsMWUzKSk7Z2V0IG1lbnVaSW5kZXgoKXtyZXR1cm4gdGhpcy4jYX1zZXQgbWVudVpJbmRleCh4KXt0aGlzLiNhPXh9Y2FsbGJhY2s9KGxjKHRoaXMsZyksbnVsbCk7c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIGhlaWdodDogMDsKICAgICAgfQoKICAgICAgLmZvcm1hdHRpbmctbWVudSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzI2MjYyNiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2UwZTBlMCIsIiM0MDQwNDAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDJweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBhbmltYXRpb246IGZhZGVJblNjYWxlIDAuMTVzIGVhc2Utb3V0OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZhZGVJblNjYWxlIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoNXB4KTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uIHsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzAwMDAwMCIsIiNlMGUwZTAiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmMGYwZjAiLCIjMzMzMzMzIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzAwNjZjYyIsIiM0ZDk0ZmYiKX07CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTsKICAgICAgfQoKICAgICAgLmZvcm1hdC1idXR0b24uYm9sZCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgfQoKICAgICAgLmZvcm1hdC1idXR0b24uaXRhbGljIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uLnVuZGVybGluZSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uIC5jb2RlLWljb24gewogICAgICAgIGZvbnQtZmFtaWx5OiAnU0YgTW9ubycsICdNb25hY28nLCAnSW5jb25zb2xhdGEnLCAnRmlyYSBDb2RlJywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHRoaXMudmlzaWJsZT8odGhpcy5zdHlsZS56SW5kZXg9dGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCksTWAKICAgICAgPGRpdiAKICAgICAgICBjbGFzcz0iZm9ybWF0dGluZy1tZW51IiAKICAgICAgICBzdHlsZT0ibGVmdDogJHt0aGlzLnBvc2l0aW9uLnh9cHg7IHRvcDogJHt0aGlzLnBvc2l0aW9uLnl9cHg7IgogICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICBkYXRhLW1lbnUtdHlwZT0iZm9ybWF0dGluZyIKICAgICAgPgogICAgICAgICR7ZHMuZm9ybWF0QnV0dG9ucy5tYXAoeD0+TWAKICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgIGNsYXNzPSJmb3JtYXQtYnV0dG9uICR7eC5jb21tYW5kfSIKICAgICAgICAgICAgZGF0YS1jb21tYW5kPSIke3guY29tbWFuZH0iCiAgICAgICAgICAgIHRpdGxlPSIke3gubGFiZWx9JHt4LnNob3J0Y3V0P2AgKCR7eC5zaG9ydGN1dH0pYDoiIn0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSIke3guY29tbWFuZD09PSJjb2RlIj8iY29kZS1pY29uIjoiIn0iPiR7eC5pY29ufTwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIGApfQogICAgICA8L2Rpdj4KICAgIGApOk1gYH1hcHBseUZvcm1hdCh4KXt0aGlzLmNhbGxiYWNrJiZ0aGlzLmNhbGxiYWNrKHgpLHg9PT0ibGluayImJnRoaXMuaGlkZSgpfXNob3coeCxtKXtjb25zb2xlLmxvZygiRm9ybWF0dGluZ01lbnUuc2hvdyBjYWxsZWQ6Iix7cG9zaXRpb246eCx2aXNpYmxlOnRoaXMudmlzaWJsZX0pLHRoaXMucG9zaXRpb249eCx0aGlzLmNhbGxiYWNrPW0sdGhpcy5tZW51WkluZGV4PXMxLmdldE5leHRaSW5kZXgoKSxzMS5yZWdpc3Rlcih0aGlzLHRoaXMubWVudVpJbmRleCksdGhpcy5zdHlsZS56SW5kZXg9dGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCksdGhpcy52aXNpYmxlPSEwfWhpZGUoKXt0aGlzLnZpc2libGU9ITEsdGhpcy5jYWxsYmFjaz1udWxsLHMxLnVucmVnaXN0ZXIodGhpcyl9dXBkYXRlUG9zaXRpb24oeCl7dGhpcy5wb3NpdGlvbj14fWZpcnN0VXBkYXRlZCgpe3RoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix4PT57bGV0IG09dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZm9ybWF0dGluZy1tZW51Iik7bSYmbS5jb250YWlucyh4LnRhcmdldCkmJih4LnByZXZlbnREZWZhdWx0KCkseC5zdG9wUHJvcGFnYXRpb24oKSl9KSx0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix4PT57bGV0IHY9eC50YXJnZXQuY2xvc2VzdCgiLmZvcm1hdC1idXR0b24iKTtpZih2KXt4LnByZXZlbnREZWZhdWx0KCkseC5zdG9wUHJvcGFnYXRpb24oKTtsZXQgeT12LmdldEF0dHJpYnV0ZSgiZGF0YS1jb21tYW5kIik7eSYmdGhpcy5hcHBseUZvcm1hdCh5KX19KSx0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix4PT57bGV0IG09dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZm9ybWF0dGluZy1tZW51Iik7bSYmbS5jb250YWlucyh4LnRhcmdldCkmJih4LnByZXZlbnREZWZhdWx0KCkseC5zdG9wUHJvcGFnYXRpb24oKSl9LCEwKX1zdGF0aWN7bGMocixhKX19O3JldHVybiBiPXJ9KSgpO2ZlKCk7dmFyIHlqPVsiSmF2YVNjcmlwdCIsIlR5cGVTY3JpcHQiLCJQeXRob24iLCJKYXZhIiwiQysrIiwiQyMiLCJHbyIsIlJ1c3QiLCJIVE1MIiwiQ1NTIiwiU1FMIiwiU2hlbGwiLCJKU09OIiwiWUFNTCIsIk1hcmtkb3duIiwiUGxhaW4gVGV4dCJdO2ZlKCk7dmFyIHdPdD10ZWAKICA6aG9zdCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB9CgogIC53eXNpd3lnLWNvbnRhaW5lciB7CiAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAyMDBweDsKICAgIHBhZGRpbmc6IDI0cHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICB9CgogIC53eXNpd3lnLWNvbnRhaW5lcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCIjZDFkNWRiIiwiIzNmM2Y0NiIpfTsKICB9CgogIC53eXNpd3lnLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke3AuYmRUaGVtZSgiI2Y0ZjRmNSIsIiMxODE4MWIiKX0sIDAgMCAwIDRweCAke3AuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuNSkiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC41KSIpfTsKICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogIH0KCiAgLyogVmlzdWFsIGhpbnQgZm9yIHRleHQgc2VsZWN0aW9uICovCiAgLmVkaXRvci1jb250ZW50OmhvdmVyIHsKICAgIGN1cnNvcjogdGV4dDsKICB9CgogIC5lZGl0b3ItY29udGVudCB7CiAgICBvdXRsaW5lOiBub25lOwogICAgbWluLWhlaWdodDogMTYwcHg7CiAgICBtYXJnaW46IDAgLThweDsKICAgIHBhZGRpbmc6IDAgOHB4OwogIH0KCiAgLmJsb2NrIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDRweCAwOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBtaW4taGVpZ2h0OiAxLjZlbTsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgfQoKICAvKiBGaXJzdCBhbmQgbGFzdCBibG9ja3MgZG9uJ3QgbmVlZCBleHRyYSBzcGFjaW5nICovCiAgLmJsb2NrLXdyYXBwZXI6Zmlyc3QtY2hpbGQgLmJsb2NrIHsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICB9CgogIC5ibG9jay13cmFwcGVyOmxhc3QtY2hpbGQgLmJsb2NrIHsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgfQoKICAuYmxvY2suc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjA1KSIsInJnYmEoNTksIDEzMCwgMjQ2LCAwLjA1KSIpfTsKICAgIG91dGxpbmU6IDJweCBzb2xpZCAke3AuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDhweDsKICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKICB9CgogIC5ibG9ja1tjb250ZW50ZWRpdGFibGVdIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuYmxvY2sucGFyYWdyYXBoIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLnBhcmFncmFwaDplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJUeXBlICcvJyBmb3IgY29tbWFuZHMuLi4iOwogICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgfQoKICAuYmxvY2suaGVhZGluZy0xIHsKICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMS4yOwogICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICB9CgogIC5ibG9jay5oZWFkaW5nLTE6ZW1wdHk6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiSGVhZGluZyAxIjsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBmb250LXdlaWdodDogNzAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMiB7CiAgICBmb250LXNpemU6IDI0cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgfQoKICAuYmxvY2suaGVhZGluZy0yOmVtcHR5OjpiZWZvcmUgewogICAgY29udGVudDogIkhlYWRpbmcgMiI7CiAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDI0cHg7CiAgICBsaW5lLWhlaWdodDogMS4zOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICB9CgogIC5ibG9jay5oZWFkaW5nLTMgewogICAgZm9udC1zaXplOiAyMHB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMzplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDMiOwogICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgZm9udC1zaXplOiAyMHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAuYmxvY2sucXVvdGUgewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICBsaW5lLWhlaWdodDogMS42OwogIH0KCiAgLmJsb2NrLnF1b3RlOmVtcHR5OjpiZWZvcmUgewogICAgY29udGVudDogIlF1b3RlIjsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KCiAgLmNvZGUtYmxvY2stY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbjogMjBweCAwOwogIH0KCiAgLmNvZGUtbGFuZ3VhZ2UgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgcmlnaHQ6IDA7CiAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgcGFkZGluZzogNHB4IDEycHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAwIDRweCAwIDRweDsKICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKICAgIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7CiAgICB6LWluZGV4OiAxOwogIH0KCiAgLmJsb2NrLmNvZGUgewogICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmNGY0ZjUiLCIjMTgxODFiIil9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcGFkZGluZzogMTZweDsKICAgIHBhZGRpbmctdG9wOiAzMnB4OyAvKiBNYWtlIHJvb20gZm9yIGxhbmd1YWdlIGluZGljYXRvciAqLwogICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMS41OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgfQoKICAuYmxvY2suY29kZTplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIvLyBDb2RlIGJsb2NrIjsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtZmFtaWx5OiAnU0YgTW9ubycsICdNb25hY28nLCAnSW5jb25zb2xhdGEnLCAnRmlyYSBDb2RlJywgbW9ub3NwYWNlOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgfQoKICAuYmxvY2subGlzdCB7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQoKICAuYmxvY2subGlzdCB1bCwKICAuYmxvY2subGlzdCBvbCB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwIDAgMCAyNHB4OwogICAgbGlzdC1zdHlsZS1wb3NpdGlvbjogb3V0c2lkZTsKICB9CgogIC5ibG9jay5saXN0IHVsIHsKICAgIGxpc3Qtc3R5bGU6IGRpc2M7CiAgfQoKICAuYmxvY2subGlzdCBvbCB7CiAgICBsaXN0LXN0eWxlOiBkZWNpbWFsOwogIH0KCiAgLmJsb2NrLmxpc3QgbGkgewogICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICB9CgogIC5ibG9jay5saXN0IGxpOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKICB9CgogIC5ibG9jay5kaXZpZGVyIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmc6IDIwcHggMDsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogIH0KCiAgLmJsb2NrLmRpdmlkZXIgaHIgewogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgIG1hcmdpbjogMDsKICB9CgogIC5zbGFzaC1tZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzA5MDkwYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgcGFkZGluZzogNHB4OwogICAgei1pbmRleDogMTAwMDsKICAgIG1pbi13aWR0aDogMjIwcHg7CiAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHVzZXItc2VsZWN0OiBub25lOwogIH0KCiAgLnNsYXNoLW1lbnUtaXRlbSB7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgZm9udC1zaXplOiAxNHB4OwogIH0KCiAgLnNsYXNoLW1lbnUtaXRlbTpob3ZlciwKICAuc2xhc2gtbWVudS1pdGVtLnNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjRmNGY1IiwiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtIC5pY29uIHsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLnNsYXNoLW1lbnUtaXRlbTpob3ZlciAuaWNvbiwKICAuc2xhc2gtbWVudS1pdGVtLnNlbGVjdGVkIC5pY29uIHsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgfQoKICAudG9vbGJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC00MHB4OwogICAgbGVmdDogMDsKICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzA5MDkwYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgcGFkZGluZzogNHB4OwogICAgZGlzcGxheTogbm9uZTsKICAgIGdhcDogNHB4OwogICAgei1pbmRleDogMTAwMDsKICB9CgogIC50b29sYmFyLnZpc2libGUgewogICAgZGlzcGxheTogZmxleDsKICB9CgogIC50b29sYmFyLWJ1dHRvbiB7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMzJweDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICB9CgogIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogIH0KCiAgLyogRHJhZyBhbmQgRHJvcCBTdHlsZXMgKi8KICAuYmxvY2std3JhcHBlciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZTsKICB9CgogIC8qIEVuc3VyZSBwcm9wZXIgc3BhY2luZyBjb250ZXh0IGZvciBibG9ja3MgKi8KICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jayB7CiAgICBtYXJnaW4tdG9wOiAxNnB4OwogIH0KCiAgLyogT3ZlcnJpZGUgZm9yIGhlYWRpbmdzIGZvbGxvd2luZyBvdGhlciBibG9ja3MgKi8KICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5oZWFkaW5nLTEsCiAgLmJsb2NrLXdyYXBwZXIgKyAuYmxvY2std3JhcHBlciAuYmxvY2suaGVhZGluZy0yLAogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLmhlYWRpbmctMyB7CiAgICBtYXJnaW4tdG9wOiAyNHB4OwogIH0KCiAgLyogQ29kZSBhbmQgcXVvdGUgYmxvY2tzIG5lZWQgY29uc2lzdGVudCBzcGFjaW5nICovCiAgLmJsb2NrLXdyYXBwZXIgKyAuYmxvY2std3JhcHBlciAuYmxvY2suY29kZSwKICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5xdW90ZSB7CiAgICBtYXJnaW4tdG9wOiAyMHB4OwogIH0KCiAgLmRyYWctaGFuZGxlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IC0yOHB4OwogICAgdG9wOiA1MCU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICB3aWR0aDogMjRweDsKICAgIGhlaWdodDogMjRweDsKICAgIGN1cnNvcjogZ3JhYjsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjNzE3MTdhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogIH0KCiAgLmRyYWctaGFuZGxlOjpiZWZvcmUgewogICAgY29udGVudDogIuKLruKLriI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsZXR0ZXItc3BhY2luZzogLTJweDsKICB9CgogIC5ibG9jay13cmFwcGVyOmhvdmVyIC5kcmFnLWhhbmRsZSB7CiAgICBvcGFjaXR5OiAxOwogIH0KCiAgLmRyYWctaGFuZGxlOmhvdmVyIHsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgfQoKICAuZHJhZy1oYW5kbGU6YWN0aXZlIHsKICAgIGN1cnNvcjogZ3JhYmJpbmc7CiAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzZjNmNDYiKX07CiAgfQoKICAuYmxvY2std3JhcHBlci5kcmFnZ2luZyB7CiAgICBvcGFjaXR5OiAwLjg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDIwMDE7CiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogQmxvY2tzIHRoYXQgc2hvdWxkIG1vdmUgb3V0IG9mIHRoZSB3YXkgKi8KICAuYmxvY2std3JhcHBlci5tb3ZlLWRvd24gewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLWRyYWctb2Zmc2V0LCAwcHgpKTsKICB9CgogIC5ibG9jay13cmFwcGVyLm1vdmUtdXAgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1kcmFnLW9mZnNldCwgMHB4KSkpOwogIH0KCiAgLyogRHJvcCBpbmRpY2F0b3IgKi8KICAuZHJvcC1pbmRpY2F0b3IgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjA1KSIsInJnYmEoNTksIDEzMCwgMjQ2LCAwLjA1KSIpfTsKICAgIGJvcmRlcjogMnB4IGRhc2hlZCAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICB0cmFuc2l0aW9uOiB0b3AgMC4ycyBlYXNlLCBoZWlnaHQgMC4ycyBlYXNlOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxOTk5OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIC8qIFJlbW92ZSBvbGQgZHJhZy1vdmVyIHN0eWxlcyAqLwogIC5ibG9jay13cmFwcGVyLmRyYWctb3Zlci1iZWZvcmUsCiAgLmJsb2NrLXdyYXBwZXIuZHJhZy1vdmVyLWFmdGVyIHsKICAgIC8qIE5vIGxvbmdlciBuZWVkZWQsIHVzaW5nIGRyb3AgaW5kaWNhdG9yIGluc3RlYWQgKi8KICB9CgogIC5lZGl0b3ItY29udGVudC5kcmFnZ2luZyAqIHsKICAgIHVzZXItc2VsZWN0OiBub25lOwogIH0KCiAgLyogQmxvY2sgU2V0dGluZ3MgQnV0dG9uIC0gUmVtb3ZlZCBpbiBmYXZvciBvZiBjb250ZXh0IG1lbnUgKi8KCiAgLyogVGV4dCBTZWxlY3Rpb24gU3R5bGVzICovCiAgLmJsb2NrIDo6c2VsZWN0aW9uIHsKICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIil9OwogICAgY29sb3I6IGluaGVyaXQ7CiAgfQoKICAvKiBGb3JtYXR0aW5nIE1lbnUgKi8KICAuZm9ybWF0dGluZy1tZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzA5MDkwYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgcGFkZGluZzogNHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogMnB4OwogICAgei1pbmRleDogMTAwMTsKICAgIGFuaW1hdGlvbjogZmFkZUluU2NhbGUgMC4xNXMgZWFzZS1vdXQ7CiAgfQoKICBAa2V5ZnJhbWVzIGZhZGVJblNjYWxlIHsKICAgIGZyb20gewogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpIHRyYW5zbGF0ZVkoMnB4KTsKICAgIH0KICAgIHRvIHsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOwogICAgfQogIH0KCiAgLmZvcm1hdC1idXR0b24gewogICAgd2lkdGg6IDMycHg7CiAgICBoZWlnaHQ6IDMycHg7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogIH0KCiAgLmZvcm1hdC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmNGY0ZjUiLCIjMjcyNzJhIil9OwogICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICB9CgogIC5mb3JtYXQtYnV0dG9uOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpOwogIH0KCiAgLmZvcm1hdC1idXR0b24uYm9sZCB7CiAgICBmb250LXdlaWdodDogNzAwOwogIH0KCiAgLmZvcm1hdC1idXR0b24uaXRhbGljIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CgogIC5mb3JtYXQtYnV0dG9uLnVuZGVybGluZSB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICB9CgogIC5mb3JtYXQtYnV0dG9uIC5jb2RlLWljb24gewogICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICBmb250LXNpemU6IDEycHg7CiAgfQoKICAvKiBBcHBsaWVkIGZvcm1hdCBzdHlsZXMgaW4gY29udGVudCAqLwogIC5ibG9jayBzdHJvbmcsCiAgLmJsb2NrIGIgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgfQoKICAuYmxvY2sgZW0sCiAgLmJsb2NrIGkgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KCiAgLmJsb2NrIHUgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgfQoKICAuYmxvY2sgc3RyaWtlLAogIC5ibG9jayBzIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogICAgb3BhY2l0eTogMC43OwogIH0KCiAgLmJsb2NrIGNvZGUgewogICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmNGY0ZjUiLCIjMjcyNzJhIil9OwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIGZvbnQtZmFtaWx5OiAnU0YgTW9ubycsICdNb25hY28nLCAnSW5jb25zb2xhdGEnLCAnRmlyYSBDb2RlJywgbW9ub3NwYWNlOwogICAgZm9udC1zaXplOiAwLjllbTsKICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgfQoKICAuYmxvY2sgYSB7CiAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgfQoKICAuYmxvY2sgYTpob3ZlciB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgfQpgO3ZhciBmcj1jbGFzc3tzdGF0aWMgZXNjYXBlSHRtbChlKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS50ZXh0Q29udGVudD1lLGEuaW5uZXJIVE1MfXN0YXRpYyBmb3JtYXRGaWxlU2l6ZShlKXtpZihlPT09MClyZXR1cm4iMCBCeXRlcyI7bGV0IGE9MTAyNCxyPVsiQnl0ZXMiLCJLQiIsIk1CIiwiR0IiXSxpPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5sb2coYSkpO3JldHVybiBwYXJzZUZsb2F0KChlL01hdGgucG93KGEsaSkpLnRvRml4ZWQoMikpKyIgIityW2ldfXN0YXRpYyBnZXRIdG1sT3V0cHV0KGUpe3JldHVybiBlLm1hcChhPT57bGV0IHI9YS5jb250ZW50LmluY2x1ZGVzKCI8IikmJmEuY29udGVudC5pbmNsdWRlcygiPiIpP2EuY29udGVudDp0aGlzLmVzY2FwZUh0bWwoYS5jb250ZW50KTtzd2l0Y2goYS50eXBlKXtjYXNlInBhcmFncmFwaCI6cmV0dXJuIGEuY29udGVudD9gPHA+JHtyfTwvcD5gOiIiO2Nhc2UiaGVhZGluZy0xIjpyZXR1cm5gPGgxPiR7cn08L2gxPmA7Y2FzZSJoZWFkaW5nLTIiOnJldHVybmA8aDI+JHtyfTwvaDI+YDtjYXNlImhlYWRpbmctMyI6cmV0dXJuYDxoMz4ke3J9PC9oMz5gO2Nhc2UicXVvdGUiOnJldHVybmA8YmxvY2txdW90ZT4ke3J9PC9ibG9ja3F1b3RlPmA7Y2FzZSJjb2RlIjpyZXR1cm5gPHByZT48Y29kZT4ke3RoaXMuZXNjYXBlSHRtbChhLmNvbnRlbnQpfTwvY29kZT48L3ByZT5gO2Nhc2UibGlzdCI6bGV0IGk9YS5jb250ZW50LnNwbGl0KGAKYCkuZmlsdGVyKGY9PmYudHJpbSgpKTtpZihpLmxlbmd0aD4wKXtsZXQgZj1hLm1ldGFkYXRhPy5saXN0VHlwZT09PSJvcmRlcmVkIj8ib2wiOiJ1bCI7cmV0dXJuYDwke2Z9PiR7aS5tYXAoYz0+YDxsaT4ke2N9PC9saT5gKS5qb2luKCIiKX08LyR7Zn0+YH1yZXR1cm4iIjtjYXNlImRpdmlkZXIiOnJldHVybiI8aHI+IjtjYXNlImltYWdlIjpsZXQgbz1hLm1ldGFkYXRhPy51cmw7aWYobyl7bGV0IGY9dGhpcy5lc2NhcGVIdG1sKGEuY29udGVudHx8IkltYWdlIik7cmV0dXJuYDxpbWcgc3JjPSIke299IiBhbHQ9IiR7Zn0iIC8+YH1yZXR1cm4iIjtjYXNlInlvdXR1YmUiOmxldCBzPWEubWV0YWRhdGE/LnZpZGVvSWQ7cmV0dXJuIHM/YDxpZnJhbWUgd2lkdGg9IjU2MCIgaGVpZ2h0PSIzMTUiIHNyYz0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHtzfSIgZnJhbWVib3JkZXI9IjAiIGFsbG93PSJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+YDoiIjtjYXNlIm1hcmtkb3duIjpyZXR1cm5gPGRpdiBjbGFzcz0ibWFya2Rvd24tY29udGVudCI+JHt0aGlzLmVzY2FwZUh0bWwoYS5jb250ZW50KX08L2Rpdj5gO2Nhc2UiaHRtbCI6cmV0dXJuIGEuY29udGVudDtjYXNlImF0dGFjaG1lbnQiOmxldCBsPWEubWV0YWRhdGE/LmZpbGVzfHxbXTtyZXR1cm4gbC5sZW5ndGg+MD9gPGRpdiBjbGFzcz0iYXR0YWNobWVudHMiPiR7bC5tYXAoZj0+YDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaXRlbSIgZGF0YS1maWxlLWlkPSIke2YuaWR9Ij4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiR7Zi5kYXRhfSIgZG93bmxvYWQ9IiR7Zi5uYW1lfSI+JHt0aGlzLmVzY2FwZUh0bWwoZi5uYW1lKX08L2E+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1zaXplIj4oJHt0aGlzLmZvcm1hdEZpbGVTaXplKGYuc2l6ZSl9KTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiO2RlZmF1bHQ6cmV0dXJuYDxwPiR7cn08L3A+YH19KS5maWx0ZXIoYT0+YSE9PSIiKS5qb2luKGAKYCl9c3RhdGljIGdldE1hcmtkb3duT3V0cHV0KGUpe3JldHVybiBlLm1hcChhPT57c3dpdGNoKGEudHlwZSl7Y2FzZSJwYXJhZ3JhcGgiOnJldHVybiBhLmNvbnRlbnQ7Y2FzZSJoZWFkaW5nLTEiOnJldHVybmAjICR7YS5jb250ZW50fWA7Y2FzZSJoZWFkaW5nLTIiOnJldHVybmAjIyAke2EuY29udGVudH1gO2Nhc2UiaGVhZGluZy0zIjpyZXR1cm5gIyMjICR7YS5jb250ZW50fWA7Y2FzZSJxdW90ZSI6cmV0dXJuYD4gJHthLmNvbnRlbnR9YDtjYXNlImNvZGUiOnJldHVybmBcYFxgXGAKJHthLmNvbnRlbnR9ClxgXGBcYGA7Y2FzZSJsaXN0IjpsZXQgcj1hLmNvbnRlbnQuc3BsaXQoYApgKS5maWx0ZXIoYz0+Yy50cmltKCkpO3JldHVybiBhLm1ldGFkYXRhPy5saXN0VHlwZT09PSJvcmRlcmVkIj9yLm1hcCgoYyx1KT0+YCR7dSsxfS4gJHtjfWApLmpvaW4oYApgKTpyLm1hcChjPT5gLSAke2N9YCkuam9pbihgCmApO2Nhc2UiZGl2aWRlciI6cmV0dXJuIi0tLSI7Y2FzZSJpbWFnZSI6bGV0IGk9YS5tZXRhZGF0YT8udXJsLG89YS5jb250ZW50fHwiSW1hZ2UiO3JldHVybiBpP2AhWyR7b31dKCR7aX0pYDoiIjtjYXNlInlvdXR1YmUiOmxldCBzPWEubWV0YWRhdGE/LnZpZGVvSWQsbD1hLm1ldGFkYXRhPy51cmx8fChzP2BodHRwczovL3lvdXR1YmUuY29tL3dhdGNoP3Y9JHtzfWA6IiIpO3JldHVybiBsP2BbWW91VHViZSBWaWRlb10oJHtsfSlgOiIiO2Nhc2UibWFya2Rvd24iOnJldHVybiBhLmNvbnRlbnQ7Y2FzZSJodG1sIjpyZXR1cm5gPCEtLSBIVE1MIEJsb2NrCiR7YS5jb250ZW50fQotLT5gO2Nhc2UiYXR0YWNobWVudCI6bGV0IGY9YS5tZXRhZGF0YT8uZmlsZXN8fFtdO3JldHVybiBmLmxlbmd0aD4wP2YubWFwKGM9PmAtIFske2MubmFtZX1dKCR7Yy5kYXRhfSlgKS5qb2luKGAKYCk6IiI7ZGVmYXVsdDpyZXR1cm4gYS5jb250ZW50fX0pLmZpbHRlcihhPT5hIT09IiIpLmpvaW4oYAoKYCl9c3RhdGljIHBhcnNlSHRtbFRvQmxvY2tzKGUpe2xldCByPW5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoZSwidGV4dC9odG1sIiksaT1bXSxvPXM9PntpZihzLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUmJnMudGV4dENvbnRlbnQ/LnRyaW0oKSlpLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJwYXJhZ3JhcGgiLGNvbnRlbnQ6cy50ZXh0Q29udGVudC50cmltKCl9KTtlbHNlIGlmKHMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7bGV0IGw9cyxmPWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChmKXtjYXNlInAiOmkucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6InBhcmFncmFwaCIsY29udGVudDpsLmlubmVySFRNTHx8IiJ9KTticmVhaztjYXNlImgxIjppLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJoZWFkaW5nLTEiLGNvbnRlbnQ6bC5pbm5lckhUTUx8fCIifSk7YnJlYWs7Y2FzZSJoMiI6aS5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToiaGVhZGluZy0yIixjb250ZW50OmwuaW5uZXJIVE1MfHwiIn0pO2JyZWFrO2Nhc2UiaDMiOmkucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6ImhlYWRpbmctMyIsY29udGVudDpsLmlubmVySFRNTHx8IiJ9KTticmVhaztjYXNlImJsb2NrcXVvdGUiOmkucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6InF1b3RlIixjb250ZW50OmwuaW5uZXJIVE1MfHwiIn0pO2JyZWFrO2Nhc2UicHJlIjpjYXNlImNvZGUiOmkucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6ImNvZGUiLGNvbnRlbnQ6bC50ZXh0Q29udGVudHx8IiJ9KTticmVhaztjYXNlInVsIjpjYXNlIm9sIjpsZXQgdT1BcnJheS5mcm9tKGwucXVlcnlTZWxlY3RvckFsbCgibGkiKSkubWFwKGg9PmguaW5uZXJIVE1MfHwiIikuam9pbihgCmApO2kucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6Imxpc3QiLGNvbnRlbnQ6dSxtZXRhZGF0YTp7bGlzdFR5cGU6Zj09PSJvbCI/Im9yZGVyZWQiOiJidWxsZXQifX0pO2JyZWFrO2Nhc2UiaHIiOmkucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6ImRpdmlkZXIiLGNvbnRlbnQ6IiAifSk7YnJlYWs7Y2FzZSJpbWciOmxldCBkPWw7aS5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToiaW1hZ2UiLGNvbnRlbnQ6ZC5hbHR8fCIiLG1ldGFkYXRhOnt1cmw6ZC5zcmN9fSk7YnJlYWs7ZGVmYXVsdDpsLmNoaWxkTm9kZXMuZm9yRWFjaChoPT5vKGgpKX19fTtyZXR1cm4gci5ib2R5LmNoaWxkTm9kZXMuZm9yRWFjaChzPT5vKHMpKSxpfXN0YXRpYyBwYXJzZU1hcmtkb3duVG9CbG9ja3MoZSl7bGV0IGE9ZS5zcGxpdChgCmApLHI9W10saT1bXTtmb3IobGV0IG89MDtvPGEubGVuZ3RoO28rKyl7bGV0IHM9YVtvXTtpZihzLnN0YXJ0c1dpdGgoIiMgIikpci5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToiaGVhZGluZy0xIixjb250ZW50OnMuc3Vic3RyaW5nKDIpfSk7ZWxzZSBpZihzLnN0YXJ0c1dpdGgoIiMjICIpKXIucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6ImhlYWRpbmctMiIsY29udGVudDpzLnN1YnN0cmluZygzKX0pO2Vsc2UgaWYocy5zdGFydHNXaXRoKCIjIyMgIikpci5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToiaGVhZGluZy0zIixjb250ZW50OnMuc3Vic3RyaW5nKDQpfSk7ZWxzZSBpZihzLnN0YXJ0c1dpdGgoIj4gIikpci5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToicXVvdGUiLGNvbnRlbnQ6cy5zdWJzdHJpbmcoMil9KTtlbHNlIGlmKHMuc3RhcnRzV2l0aCgiYGBgIikpe2xldCBsPVtdO2ZvcihvKys7bzxhLmxlbmd0aCYmIWFbb10uc3RhcnRzV2l0aCgiYGBgIik7KWwucHVzaChhW29dKSxvKys7ci5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToiY29kZSIsY29udGVudDpsLmpvaW4oYApgKX0pfWVsc2UgaWYocy5tYXRjaCgvXihcKnwtKSAvKSlpLnB1c2gocy5zdWJzdHJpbmcoMikpLChvPT09YS5sZW5ndGgtMXx8IWFbbysxXS5tYXRjaCgvXihcKnwtKSAvKSkmJihyLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJsaXN0Iixjb250ZW50Omkuam9pbihgCmApLG1ldGFkYXRhOntsaXN0VHlwZToiYnVsbGV0In19KSxpPVtdKTtlbHNlIGlmKHMubWF0Y2goL15cZCtcLiAvKSlpLnB1c2gocy5yZXBsYWNlKC9eXGQrXC4gLywiIikpLChvPT09YS5sZW5ndGgtMXx8IWFbbysxXS5tYXRjaCgvXlxkK1wuIC8pKSYmKHIucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6Imxpc3QiLGNvbnRlbnQ6aS5qb2luKGAKYCksbWV0YWRhdGE6e2xpc3RUeXBlOiJvcmRlcmVkIn19KSxpPVtdKTtlbHNlIGlmKHM9PT0iLS0tInx8cz09PSIqKioifHxzPT09Il9fXyIpci5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToiZGl2aWRlciIsY29udGVudDoiICJ9KTtlbHNlIGlmKHMubWF0Y2goL14hXFsoW15cXV0qKVxdXCgoW15cKV0rKVwpJC8pKXtsZXQgbD1zLm1hdGNoKC9eIVxbKFteXF1dKilcXVwoKFteXCldKylcKSQvKTtsJiZyLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJpbWFnZSIsY29udGVudDpsWzFdfHwiIixtZXRhZGF0YTp7dXJsOmxbMl19fSl9ZWxzZSBzLnRyaW0oKSYmci5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToicGFyYWdyYXBoIixjb250ZW50OnN9KX1yZXR1cm4gcn19O2ZlKCk7dmFyIF8yPWNsYXNze3N0YXRpYyByZW5kZXJMaXN0Q29udGVudChlLGEpe2xldCByPWUuc3BsaXQoYApgKS5maWx0ZXIobz0+by50cmltKCkpO2lmKHIubGVuZ3RoPT09MClyZXR1cm4iIjtsZXQgaT1hPy5saXN0VHlwZT09PSJvcmRlcmVkIj8ib2wiOiJ1bCI7cmV0dXJuYDwke2l9PiR7ci5tYXAobz0+YDxsaT4ke299PC9saT5gKS5qb2luKCIiKX08LyR7aX0+YH1zdGF0aWMgcmVuZGVyQmxvY2soZSxhLHIpe2lmKGUudHlwZT09PSJkaXZpZGVyIilyZXR1cm4gTWAKICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0iYmxvY2sgZGl2aWRlciIKICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iCiAgICAgICAgPgogICAgICAgICAgPGhyPgogICAgICAgIDwvZGl2PgogICAgICBgO2lmKGUudHlwZT09PSJsaXN0IilyZXR1cm4gTWAKICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0iYmxvY2sgbGlzdCAke2E/InNlbGVjdGVkIjoiIn0iCiAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgICAgQGlucHV0PSIke3Iub25JbnB1dH0iCiAgICAgICAgICBAa2V5ZG93bj0iJHtyLm9uS2V5RG93bn0iCiAgICAgICAgICBAZm9jdXM9IiR7ci5vbkZvY3VzfSIKICAgICAgICAgIEBibHVyPSIke3Iub25CbHVyfSIKICAgICAgICAgIEBjb21wb3NpdGlvbnN0YXJ0PSIke3Iub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICAgIEBjb21wb3NpdGlvbmVuZD0iJHtyLm9uQ29tcG9zaXRpb25FbmR9IgogICAgICAgICAgQG1vdXNldXA9IiR7bz0+e2NvbnNvbGUubG9nKCJCbG9jayBtb3VzZXVwIGV2ZW50IGZpcmVkIiksci5vbk1vdXNlVXAmJnIub25Nb3VzZVVwKG8pfX0iCiAgICAgICAgICAuaW5uZXJIVE1MPSIke3RoaXMucmVuZGVyTGlzdENvbnRlbnQoZS5jb250ZW50LGUubWV0YWRhdGEpfSIKICAgICAgICA+PC9kaXY+CiAgICAgIGA7aWYoZS50eXBlPT09ImNvZGUiKXtsZXQgbz1lLm1ldGFkYXRhPy5sYW5ndWFnZXx8InBsYWluIHRleHQiO3JldHVybiBNYAogICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYmxvY2stY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtbGFuZ3VhZ2UiPiR7b308L2Rpdj4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9ImJsb2NrICR7ZS50eXBlfSAke2E/InNlbGVjdGVkIjoiIn0iCiAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICAgICAgQGlucHV0PSIke3Iub25JbnB1dH0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke3Iub25LZXlEb3dufSIKICAgICAgICAgICAgQGZvY3VzPSIke3Iub25Gb2N1c30iCiAgICAgICAgICAgIEBibHVyPSIke3Iub25CbHVyfSIKICAgICAgICAgICAgQGNvbXBvc2l0aW9uc3RhcnQ9IiR7ci5vbkNvbXBvc2l0aW9uU3RhcnR9IgogICAgICAgICAgICBAY29tcG9zaXRpb25lbmQ9IiR7ci5vbkNvbXBvc2l0aW9uRW5kfSIKICAgICAgICAgICAgQG1vdXNldXA9IiR7cz0+e2NvbnNvbGUubG9nKCJCbG9jayBtb3VzZXVwIGV2ZW50IGZpcmVkIiksci5vbk1vdXNlVXAmJnIub25Nb3VzZVVwKHMpfX0iCiAgICAgICAgICAgIC50ZXh0Q29udGVudD0iJHtlLmNvbnRlbnR8fCIifSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYH1yZXR1cm4gTWAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayAke2UudHlwZX0gJHthPyJzZWxlY3RlZCI6IiJ9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBAaW5wdXQ9IiR7ci5vbklucHV0fSIKICAgICAgICBAa2V5ZG93bj0iJHtyLm9uS2V5RG93bn0iCiAgICAgICAgQGZvY3VzPSIke3Iub25Gb2N1c30iCiAgICAgICAgQGJsdXI9IiR7ci5vbkJsdXJ9IgogICAgICAgIEBjb21wb3NpdGlvbnN0YXJ0PSIke3Iub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICBAY29tcG9zaXRpb25lbmQ9IiR7ci5vbkNvbXBvc2l0aW9uRW5kfSIKICAgICAgICBAbW91c2V1cD0iJHtvPT57Y29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKSxyLm9uTW91c2VVcCYmci5vbk1vdXNlVXAobyl9fSIKICAgICAgICAuaW5uZXJIVE1MPSIke2UuY29udGVudHx8IiJ9IgogICAgICA+PC9kaXY+CiAgICBgfXN0YXRpYyBzZXRDdXJzb3JUb0VuZChlKXtsZXQgYT13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYoIWEpcmV0dXJuO2xldCByPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7aWYoZS5jaGlsZE5vZGVzLmxlbmd0aD09PTApe2xldCBpPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTIwMEIiKTtlLmFwcGVuZENoaWxkKGkpLHIuc2V0U3RhcnQoaSwxKSxyLmNvbGxhcHNlKCEwKX1lbHNle2xldCBpPXRoaXMuZ2V0TGFzdE5vZGUoZSk7aS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP3Iuc2V0U3RhcnQoaSxpLnRleHRDb250ZW50Py5sZW5ndGh8fDApOnIuc2V0U3RhcnRBZnRlcihpKSxyLmNvbGxhcHNlKCEwKX1hLnJlbW92ZUFsbFJhbmdlcygpLGEuYWRkUmFuZ2UociksZS50ZXh0Q29udGVudD09PSJcdTIwMEIiJiYoZS50ZXh0Q29udGVudD0iIil9c3RhdGljIHNldEN1cnNvclRvU3RhcnQoZSl7bGV0IGE9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKCFhKXJldHVybjtsZXQgcj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2lmKGUuY2hpbGROb2Rlcy5sZW5ndGg9PT0wKXIuc2V0U3RhcnQoZSwwKSxyLmNvbGxhcHNlKCEwKTtlbHNle2xldCBpPXRoaXMuZ2V0Rmlyc3ROb2RlKGUpO2kubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT9yLnNldFN0YXJ0KGksMCk6ci5zZXRTdGFydEJlZm9yZShpKSxyLmNvbGxhcHNlKCEwKX1hLnJlbW92ZUFsbFJhbmdlcygpLGEuYWRkUmFuZ2Uocil9c3RhdGljIGdldExhc3ROb2RlKGUpe2lmKGUuY2hpbGROb2Rlcy5sZW5ndGg9PT0wKXJldHVybiBlO2xldCBhPWUuY2hpbGROb2Rlc1tlLmNoaWxkTm9kZXMubGVuZ3RoLTFdO3JldHVybiBhLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREV8fGEuY2hpbGROb2Rlcy5sZW5ndGg9PT0wP2E6dGhpcy5nZXRMYXN0Tm9kZShhKX1zdGF0aWMgZ2V0Rmlyc3ROb2RlKGUpe2lmKGUuY2hpbGROb2Rlcy5sZW5ndGg9PT0wKXJldHVybiBlO2xldCBhPWUuY2hpbGROb2Rlc1swXTtyZXR1cm4gYS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFfHxhLmNoaWxkTm9kZXMubGVuZ3RoPT09MD9hOnRoaXMuZ2V0Rmlyc3ROb2RlKGEpfXN0YXRpYyBmb2N1c0xpc3RJdGVtKGUpe2xldCBhPWUucXVlcnlTZWxlY3RvcigibGkiKTtpZihhKXthLmZvY3VzKCk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxpPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtyLnNlbGVjdE5vZGVDb250ZW50cyhhKSxyLmNvbGxhcHNlKCEwKSxpLnJlbW92ZUFsbFJhbmdlcygpLGkuYWRkUmFuZ2Uocil9fX07dmFyIHdqPWNsYXNze2NvbXBvbmVudDtjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbXBvbmVudD1lfWNyZWF0ZUJsb2NrKGU9InBhcmFncmFwaCIsYT0iIixyKXtyZXR1cm57aWQ6UDEuZ2VuZXJhdGVCbG9ja0lkKCksdHlwZTplLGNvbnRlbnQ6YSwuLi5yJiZ7bWV0YWRhdGE6cn19fWFzeW5jIGluc2VydEJsb2NrQWZ0ZXIoZSxhLHI9ITApe2xldCBpPXRoaXMuY29tcG9uZW50LmJsb2NrcyxvPWkuZmluZEluZGV4KHM9PnMuaWQ9PT1lLmlkKTtpZih0aGlzLmNvbXBvbmVudC5ibG9ja3M9Wy4uLmkuc2xpY2UoMCxvKzEpLGEsLi4uaS5zbGljZShvKzEpXSx0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKXtsZXQgcz10aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2UuaWR9Il1gKTtpZihzKXtsZXQgbD10aGlzLmNvbXBvbmVudC5jcmVhdGVCbG9ja0VsZW1lbnQoYSk7cy5pbnNlcnRBZGphY2VudEVsZW1lbnQoImFmdGVyZW5kIixsKX19dGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKSxyJiZhLnR5cGUhPT0iZGl2aWRlciImJihhd2FpdCBuZXcgUHJvbWlzZShzPT5zZXRUaW1lb3V0KHMsMCkpLGF3YWl0IHRoaXMuZm9jdXNCbG9jayhhLmlkLCJzdGFydCIpKX1yZW1vdmVCbG9jayhlKXtpZih0aGlzLmNvbXBvbmVudC5zYXZlVG9IaXN0b3J5KCExKSx0aGlzLmNvbXBvbmVudC5ibG9ja3M9dGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbHRlcihhPT5hLmlkIT09ZSksdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZil7bGV0IGE9dGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtlfSJdYCk7YSYmYS5yZW1vdmUoKX10aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpfWZpbmRCbG9jayhlKXtyZXR1cm4gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbmQoYT0+YS5pZD09PWUpfWdldEJsb2NrSW5kZXgoZSl7cmV0dXJuIHRoaXMuY29tcG9uZW50LmJsb2Nrcy5maW5kSW5kZXgoYT0+YS5pZD09PWUpfWFzeW5jIGZvY3VzQmxvY2soZSxhPSJzdGFydCIpe2xldCByPXRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7ZX0iXWApO2lmKHIpe2xldCBpPXIucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aSYmKGF3YWl0IG5ldyBQcm9taXNlKG89PnJlcXVlc3RBbmltYXRpb25GcmFtZShvKSksaS5mb2N1c1dpdGhDdXJzb3IoYSkpfX11cGRhdGVCbG9ja0NvbnRlbnQoZSxhKXtsZXQgcj10aGlzLmZpbmRCbG9jayhlKTtyJiYoci5jb250ZW50PWEsdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKSl9dHJhbnNmb3JtQmxvY2soZSxhLHIpe2xldCBpPXRoaXMuZmluZEJsb2NrKGUpO2kmJih0aGlzLmNvbXBvbmVudC5zYXZlVG9IaXN0b3J5KCExKSxpLnR5cGU9YSxpLmNvbnRlbnQ9IiIsciYmKGkubWV0YWRhdGE9ciksdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZiYmdGhpcy5jb21wb25lbnQudXBkYXRlQmxvY2tFbGVtZW50KGUpLHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCkpfW1vdmVCbG9jayhlLGEpe2xldCByPVsuLi50aGlzLmNvbXBvbmVudC5ibG9ja3NdLGk9dGhpcy5nZXRCbG9ja0luZGV4KGUpO2lmKGk9PT0tMXx8YTwwfHxhPj1yLmxlbmd0aClyZXR1cm47bGV0W29dPXIuc3BsaWNlKGksMSk7ci5zcGxpY2UoYSwwLG8pLHRoaXMuY29tcG9uZW50LmJsb2Nrcz1yLHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCl9Z2V0UHJldmlvdXNCbG9jayhlKXtsZXQgYT10aGlzLmdldEJsb2NrSW5kZXgoZSk7cmV0dXJuIGE+MD90aGlzLmNvbXBvbmVudC5ibG9ja3NbYS0xXTpudWxsfWdldE5leHRCbG9jayhlKXtsZXQgYT10aGlzLmdldEJsb2NrSW5kZXgoZSk7cmV0dXJuIGE8dGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aC0xP3RoaXMuY29tcG9uZW50LmJsb2Nrc1thKzFdOm51bGx9fTt2YXIgdTE9Y2xhc3N7c2V0dXAoZSxhLHIpe31nZXRTdHlsZXMoKXtyZXR1cm4iIn19O3ZhciBZdD1jbGFzc3tzdGF0aWMgaGFuZGxlcnM9bmV3IE1hcDtzdGF0aWMgcmVnaXN0ZXIoZSxhKXt0aGlzLmhhbmRsZXJzLnNldChlLGEpfXN0YXRpYyBnZXRIYW5kbGVyKGUpe3JldHVybiB0aGlzLmhhbmRsZXJzLmdldChlKX1zdGF0aWMgZ2V0QWxsVHlwZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmhhbmRsZXJzLmtleXMoKSl9fTtmZSgpO3ZhciBUST1jbGFzcyBleHRlbmRzIHUxe3R5cGU9InBhcmFncmFwaCI7bGFzdEtub3duQ3Vyc29yUG9zaXRpb249MDtsYXN0U2VsZWN0ZWRUZXh0PSIiO3NlbGVjdGlvbkhhbmRsZXI9bnVsbDtyZW5kZXIoZSxhKXtsZXQgcj1hPyIgc2VsZWN0ZWQiOiIiLGk9dGhpcy5nZXRQbGFjZWhvbGRlcigpO3JldHVybmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBwYXJhZ3JhcGgke3J9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke2l9IgogICAgICAgIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iCiAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2UudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGB9c2V0dXAoZSxhLHIpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpO2lmKCFpKXtjb25zb2xlLmVycm9yKCJQYXJhZ3JhcGhCbG9ja0hhbmRsZXIuc2V0dXA6IE5vIHBhcmFncmFwaCBibG9jayBlbGVtZW50IGZvdW5kIik7cmV0dXJufWEuY29udGVudCYmIWkuaW5uZXJIVE1MJiYoaS5pbm5lckhUTUw9YS5jb250ZW50KSxpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixvPT57ci5vbklucHV0KG8pO2xldCBzPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7cyE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPXMpfSksaS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixvPT57bGV0IHM9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtzIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249cyksci5vbktleURvd24obyl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+e3Iub25Gb2N1cygpfSksaS5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+e3Iub25CbHVyKCl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCgpPT57ci5vbkNvbXBvc2l0aW9uU3RhcnQoKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCgpPT57ci5vbkNvbXBvc2l0aW9uRW5kKCl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLG89PntsZXQgcz10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO3MhPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1zKSxyLm9uTW91c2VVcD8uKG8pfSksaS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsbz0+e3NldFRpbWVvdXQoKCk9PntsZXQgcz10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO3MhPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1zKX0sMCl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixvPT57bGV0IHM9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtzIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249cyl9KSx0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlLGksYSl9c2V0dXBTZWxlY3Rpb25IYW5kbGVyKGUsYSxyKXtsZXQgaT0oKT0+e2xldCBzPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighc3x8cy5yYW5nZUNvdW50PT09MClyZXR1cm47bGV0IGw9cy50b1N0cmluZygpO2lmKGwubGVuZ3RoPT09MCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0JiYodGhpcy5sYXN0U2VsZWN0ZWRUZXh0PSIiLHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlLHt0ZXh0OiIiLGJsb2NrSWQ6ci5pZCxoYXNTZWxlY3Rpb246ITF9KSk7cmV0dXJufWxldCBmPWEuZ2V0Um9vdE5vZGUoKS5ob3N0LHU9Zj8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3QsZD1mPy5zaGFkb3dSb290LGg9W107dSYmaC5wdXNoKHUpLGQmJmgucHVzaChkKTtsZXQgZz1JZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmgpO2lmKCFnKXJldHVybjtsZXQgYj1JZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShhLGcuc3RhcnRDb250YWluZXIpLHg9SWUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oYSxnLmVuZENvbnRhaW5lcik7aWYoYnx8eCl7aWYobCE9PXRoaXMubGFzdFNlbGVjdGVkVGV4dCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0PWw7bGV0IG09SWUuY3JlYXRlUmFuZ2VGcm9tSW5mbyhnKSx2PW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGUse3RleHQ6bC50cmltKCksYmxvY2tJZDpyLmlkLHJhbmdlOm0scmVjdDp2LGhhc1NlbGVjdGlvbjohMH0pfX1lbHNlIHRoaXMubGFzdFNlbGVjdGVkVGV4dCYmKHRoaXMubGFzdFNlbGVjdGVkVGV4dD0iIix0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSx7dGV4dDoiIixibG9ja0lkOnIuaWQsaGFzU2VsZWN0aW9uOiExfSkpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLGkpLHRoaXMuc2VsZWN0aW9uSGFuZGxlcj1pO2xldCBvPWUuY2xvc2VzdCgiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYobyl7bGV0IHM9by5kaXNjb25uZWN0ZWRDYWxsYmFjaztvLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWFzeW5jIGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb25IYW5kbGVyJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXIpLHRoaXMuc2VsZWN0aW9uSGFuZGxlcj1udWxsKSxzJiZhd2FpdCBzLmNhbGwobyl9LmJpbmQodGhpcyl9fWRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSxhKXtsZXQgcj1uZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLHtkZXRhaWw6YSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSk7ZS5kaXNwYXRjaEV2ZW50KHIpfWdldFN0eWxlcygpe3JldHVybmAKICAgICAgLyogUGFyYWdyYXBoIHNwZWNpZmljIHN0eWxlcyAqLwogICAgICAuYmxvY2sucGFyYWdyYXBoIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CiAgICBgfWdldFBsYWNlaG9sZGVyKCl7cmV0dXJuIlR5cGUgJy8nIGZvciBjb21tYW5kcy4uLiJ9Z2V0TGFzdFRleHROb2RlKGUpe2lmKGUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSlyZXR1cm4gZTtmb3IobGV0IGE9ZS5jaGlsZE5vZGVzLmxlbmd0aC0xO2E+PTA7YS0tKXtsZXQgcj10aGlzLmdldExhc3RUZXh0Tm9kZShlLmNoaWxkTm9kZXNbYV0pO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9Z2V0Q3Vyc29yUG9zaXRpb24oZSxhKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTtpZighcilyZXR1cm4gbnVsbDtsZXQgcz1hPy5jb21wb25lbnQ/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpPy5zaGFkb3dSb290LGw9YT8uc2hhZG93Um9vdCxmPVtdO3MmJmYucHVzaChzKSxsJiZmLnB1c2gobCk7bGV0IGM9SWUuZ2V0U2VsZWN0aW9uSW5mbyguLi5mKTtpZighY3x8IUllLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHIsYy5zdGFydENvbnRhaW5lcikpcmV0dXJuIG51bGw7bGV0IHU9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gdS5zZWxlY3ROb2RlQ29udGVudHMociksdS5zZXRFbmQoYy5zdGFydENvbnRhaW5lcixjLnN0YXJ0T2Zmc2V0KSx1LnRvU3RyaW5nKCkubGVuZ3RofWdldENvbnRlbnQoZSxhKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTtyZXR1cm4gciYmci5pbm5lckhUTUx8fCIifXNldENvbnRlbnQoZSxhLHIpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpO2lmKCFpKXJldHVybjtsZXQgbz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09aXx8ZS5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50PT09aTtpLmlubmVySFRNTD1hLG8mJmkuZm9jdXMoKX1zZXRDdXJzb3JUb1N0YXJ0KGUsYSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucGFyYWdyYXBoIik7ciYmXzIuc2V0Q3Vyc29yVG9TdGFydChyKX1zZXRDdXJzb3JUb0VuZChlLGEpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpO3ImJl8yLnNldEN1cnNvclRvRW5kKHIpfWZvY3VzKGUsYSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucGFyYWdyYXBoIik7ciYmKHIuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKXx8ci5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsInRydWUiKSxyLmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXImJmUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCE9PXImJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntyLmZvY3VzKCl9KSl9Zm9jdXNXaXRoQ3Vyc29yKGUsYT0iZW5kIixyKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTtpZighaSlyZXR1cm47aWYoaS5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxpLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwidHJ1ZSIpLGE9PT0iZW5kIiYmaS50ZXh0Q29udGVudCYmaS50ZXh0Q29udGVudC5sZW5ndGg+MCl7bGV0IHM9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKHMpe2xldCBsPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksZj10aGlzLmdldExhc3RUZXh0Tm9kZShpKXx8aTtmLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/KGwuc2V0U3RhcnQoZixmLnRleHRDb250ZW50Py5sZW5ndGh8fDApLGwuc2V0RW5kKGYsZi50ZXh0Q29udGVudD8ubGVuZ3RofHwwKSk6KGwuc2VsZWN0Tm9kZUNvbnRlbnRzKGYpLGwuY29sbGFwc2UoITEpKSxzLnJlbW92ZUFsbFJhbmdlcygpLHMuYWRkUmFuZ2UobCl9fWkuZm9jdXMoKTtsZXQgbz0oKT0+e2E9PT0ic3RhcnQiP3RoaXMuc2V0Q3Vyc29yVG9TdGFydChlLHIpOmE9PT0iZW5kIiYmKCFpLnRleHRDb250ZW50fHxpLnRleHRDb250ZW50Lmxlbmd0aD09PTApP3RoaXMuc2V0Q3Vyc29yVG9FbmQoZSxyKTp0eXBlb2YgYT09Im51bWJlciImJkllLnNldEN1cnNvclBvc2l0aW9uKGksYSl9O2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1pfHxlLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1pP28oKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWl8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PWk/bygpOnNldFRpbWVvdXQoKCk9PnsoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWl8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PWkpJiZvKCl9LDEwKX0pfWdldFNwbGl0Q29udGVudChlLGEpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpO2lmKCFyKXJldHVybiBudWxsO2xldCBzPWE/LmNvbXBvbmVudD8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3QsbD1hPy5zaGFkb3dSb290LGY9W107cyYmZi5wdXNoKHMpLGwmJmYucHVzaChsKTtsZXQgYz1JZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmYpO2lmKCFjKXtpZih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uIT09bnVsbCl7bGV0IHk9ci50ZXh0Q29udGVudHx8IiIsdz1NYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLHkubGVuZ3RoKTtyZXR1cm57YmVmb3JlOnkuc3Vic3RyaW5nKDAsdyksYWZ0ZXI6eS5zdWJzdHJpbmcodyl9fXJldHVybiBudWxsfWlmKCFJZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShyLGMuc3RhcnRDb250YWluZXIpKXtpZih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uIT09bnVsbCl7bGV0IHk9ci50ZXh0Q29udGVudHx8IiIsdz1NYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLHkubGVuZ3RoKTtyZXR1cm57YmVmb3JlOnkuc3Vic3RyaW5nKDAsdyksYWZ0ZXI6eS5zdWJzdHJpbmcodyl9fXJldHVybiBudWxsfWxldCB1PXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSxhKTtpZih1PT09bnVsbHx8dT09PTApcmV0dXJue2JlZm9yZToiIixhZnRlcjpyLmlubmVySFRNTH07bGV0IGQ9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxoPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7ZC5zZXRTdGFydChyLDApLGQuc2V0RW5kKGMuc3RhcnRDb250YWluZXIsYy5zdGFydE9mZnNldCksaC5zZXRTdGFydChjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpLGguc2V0RW5kKHIsci5jaGlsZE5vZGVzLmxlbmd0aCk7bGV0IGc9ZC5jbG9uZUNvbnRlbnRzKCksYj1oLmNsb25lQ29udGVudHMoKSx4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3guYXBwZW5kQ2hpbGQoZyk7bGV0IG09eC5pbm5lckhUTUw7eC5pbm5lckhUTUw9IiIseC5hcHBlbmRDaGlsZChiKTtsZXQgdj14LmlubmVySFRNTDtyZXR1cm57YmVmb3JlOm0sYWZ0ZXI6dn19fTtmZSgpO3ZhciBjYz1jbGFzcyBleHRlbmRzIHUxe3R5cGU7bGV2ZWw7bGFzdEtub3duQ3Vyc29yUG9zaXRpb249MDtsYXN0U2VsZWN0ZWRUZXh0PSIiO3NlbGVjdGlvbkhhbmRsZXI9bnVsbDtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMudHlwZT1lLHRoaXMubGV2ZWw9cGFyc2VJbnQoZS5zcGxpdCgiLSIpWzFdKX1yZW5kZXIoZSxhKXtsZXQgcj1hPyIgc2VsZWN0ZWQiOiIiLGk9dGhpcy5nZXRQbGFjZWhvbGRlcigpO3JldHVybmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBoZWFkaW5nLSR7dGhpcy5sZXZlbH0ke3J9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke2l9IgogICAgICAgIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iCiAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2UudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGB9c2V0dXAoZSxhLHIpe2xldCBpPWUucXVlcnlTZWxlY3RvcihgLmJsb2NrLmhlYWRpbmctJHt0aGlzLmxldmVsfWApO2lmKCFpKXtjb25zb2xlLmVycm9yKCJIZWFkaW5nQmxvY2tIYW5kbGVyLnNldHVwOiBObyBoZWFkaW5nIGJsb2NrIGVsZW1lbnQgZm91bmQiKTtyZXR1cm59YS5jb250ZW50JiYhaS5pbm5lckhUTUwmJihpLmlubmVySFRNTD1hLmNvbnRlbnQpLGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLG89PntyLm9uSW5wdXQobyk7bGV0IHM9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtzIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249cyl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLG89PntsZXQgcz10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO3MhPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1zKSxyLm9uS2V5RG93bihvKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT57ci5vbkZvY3VzKCl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT57ci5vbkJsdXIoKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsKCk9PntyLm9uQ29tcG9zaXRpb25TdGFydCgpfSksaS5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbmVuZCIsKCk9PntyLm9uQ29tcG9zaXRpb25FbmQoKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbz0+e2xldCBzPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7cyE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPXMpLHIub25Nb3VzZVVwPy4obyl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixvPT57c2V0VGltZW91dCgoKT0+e2xldCBzPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7cyE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPXMpfSwwKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLG89PntsZXQgcz10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO3MhPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1zKX0pLHRoaXMuc2V0dXBTZWxlY3Rpb25IYW5kbGVyKGUsaSxhKX1zZXR1cFNlbGVjdGlvbkhhbmRsZXIoZSxhLHIpe2xldCBpPSgpPT57bGV0IHM9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKCFzfHxzLnJhbmdlQ291bnQ9PT0wKXJldHVybjtsZXQgbD1zLnRvU3RyaW5nKCk7aWYobC5sZW5ndGg9PT0wKXt0aGlzLmxhc3RTZWxlY3RlZFRleHQmJih0aGlzLmxhc3RTZWxlY3RlZFRleHQ9IiIsdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGUse3RleHQ6IiIsYmxvY2tJZDpyLmlkLGhhc1NlbGVjdGlvbjohMX0pKTtyZXR1cm59bGV0IGY9YS5nZXRSb290Tm9kZSgpLmhvc3QsdT1mPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKT8uc2hhZG93Um9vdCxkPWY/LnNoYWRvd1Jvb3QsaD1bXTt1JiZoLnB1c2godSksZCYmaC5wdXNoKGQpO2xldCBnPUllLmdldFNlbGVjdGlvbkluZm8oLi4uaCk7aWYoIWcpcmV0dXJuO2xldCBiPUllLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGEsZy5zdGFydENvbnRhaW5lcikseD1JZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShhLGcuZW5kQ29udGFpbmVyKTtpZihifHx4KXtpZihsIT09dGhpcy5sYXN0U2VsZWN0ZWRUZXh0KXt0aGlzLmxhc3RTZWxlY3RlZFRleHQ9bDtsZXQgbT1JZS5jcmVhdGVSYW5nZUZyb21JbmZvKGcpLHY9bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSx7dGV4dDpsLnRyaW0oKSxibG9ja0lkOnIuaWQscmFuZ2U6bSxyZWN0OnYsaGFzU2VsZWN0aW9uOiEwfSl9fWVsc2UgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0JiYodGhpcy5sYXN0U2VsZWN0ZWRUZXh0PSIiLHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlLHt0ZXh0OiIiLGJsb2NrSWQ6ci5pZCxoYXNTZWxlY3Rpb246ITF9KSl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsaSksdGhpcy5zZWxlY3Rpb25IYW5kbGVyPWk7bGV0IG89YS5nZXRSb290Tm9kZSgpLmhvc3Q7aWYobyl7bGV0IHM9by5kaXNjb25uZWN0ZWRDYWxsYmFjaztvLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWFzeW5jIGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb25IYW5kbGVyJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXIpLHRoaXMuc2VsZWN0aW9uSGFuZGxlcj1udWxsKSxzJiZhd2FpdCBzLmNhbGwobyl9LmJpbmQodGhpcyl9fWRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSxhKXtsZXQgcj1uZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLHtkZXRhaWw6YSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSk7ZS5kaXNwYXRjaEV2ZW50KHIpfWdldFN0eWxlcygpe3JldHVybmAKICAgICAgLmJsb2NrLmhlYWRpbmctMSB7CiAgICAgICAgZm9udC1zaXplOiAzMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgICAgICBtYXJnaW46IDI0cHggMCA4cHggMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwMDAwMDAiLCIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0yIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICAgIG1hcmdpbjogMjBweCAwIDZweCAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzAwMDAwMCIsIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jay5oZWFkaW5nLTMgewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICAgICAgbWFyZ2luOiAxNnB4IDAgNHB4IDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDAwMDAwIiwiI2ZmZmZmZiIpfTsKICAgICAgfQogICAgYH1nZXRQbGFjZWhvbGRlcigpe3N3aXRjaCh0aGlzLmxldmVsKXtjYXNlIDE6cmV0dXJuIkhlYWRpbmcgMSI7Y2FzZSAyOnJldHVybiJIZWFkaW5nIDIiO2Nhc2UgMzpyZXR1cm4iSGVhZGluZyAzIjtkZWZhdWx0OnJldHVybiJIZWFkaW5nIn19Z2V0TGFzdFRleHROb2RlKGUpe2lmKGUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSlyZXR1cm4gZTtmb3IobGV0IGE9ZS5jaGlsZE5vZGVzLmxlbmd0aC0xO2E+PTA7YS0tKXtsZXQgcj10aGlzLmdldExhc3RUZXh0Tm9kZShlLmNoaWxkTm9kZXNbYV0pO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9Z2V0Q3Vyc29yUG9zaXRpb24oZSxhKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTtpZighcilyZXR1cm4gbnVsbDtsZXQgcz1hPy5jb21wb25lbnQ/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpPy5zaGFkb3dSb290LGw9YT8uc2hhZG93Um9vdCxmPVtdO3MmJmYucHVzaChzKSxsJiZmLnB1c2gobCk7bGV0IGM9SWUuZ2V0U2VsZWN0aW9uSW5mbyguLi5mKTtpZighY3x8IUllLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHIsYy5zdGFydENvbnRhaW5lcikpcmV0dXJuIG51bGw7bGV0IHU9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gdS5zZWxlY3ROb2RlQ29udGVudHMociksdS5zZXRFbmQoYy5zdGFydENvbnRhaW5lcixjLnN0YXJ0T2Zmc2V0KSx1LnRvU3RyaW5nKCkubGVuZ3RofWdldENvbnRlbnQoZSxhKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTtyZXR1cm4gciYmci5pbm5lckhUTUx8fCIifXNldENvbnRlbnQoZSxhLHIpe2xldCBpPWUucXVlcnlTZWxlY3RvcihgLmJsb2NrLmhlYWRpbmctJHt0aGlzLmxldmVsfWApO2lmKCFpKXJldHVybjtsZXQgbz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09aXx8ZS5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50PT09aTtpLmlubmVySFRNTD1hLG8mJmkuZm9jdXMoKX1zZXRDdXJzb3JUb1N0YXJ0KGUsYSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7ciYmXzIuc2V0Q3Vyc29yVG9TdGFydChyKX1zZXRDdXJzb3JUb0VuZChlLGEpe2xldCByPWUucXVlcnlTZWxlY3RvcihgLmJsb2NrLmhlYWRpbmctJHt0aGlzLmxldmVsfWApO3ImJl8yLnNldEN1cnNvclRvRW5kKHIpfWZvY3VzKGUsYSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7ciYmKHIuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKXx8ci5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsInRydWUiKSxyLmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXImJmUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCE9PXImJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntyLmZvY3VzKCl9KSl9Zm9jdXNXaXRoQ3Vyc29yKGUsYT0iZW5kIixyKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTtpZighaSlyZXR1cm47aWYoaS5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxpLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwidHJ1ZSIpLGE9PT0iZW5kIiYmaS50ZXh0Q29udGVudCYmaS50ZXh0Q29udGVudC5sZW5ndGg+MCl7bGV0IHM9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKHMpe2xldCBsPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksZj10aGlzLmdldExhc3RUZXh0Tm9kZShpKXx8aTtmLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/KGwuc2V0U3RhcnQoZixmLnRleHRDb250ZW50Py5sZW5ndGh8fDApLGwuc2V0RW5kKGYsZi50ZXh0Q29udGVudD8ubGVuZ3RofHwwKSk6KGwuc2VsZWN0Tm9kZUNvbnRlbnRzKGYpLGwuY29sbGFwc2UoITEpKSxzLnJlbW92ZUFsbFJhbmdlcygpLHMuYWRkUmFuZ2UobCl9fWkuZm9jdXMoKTtsZXQgbz0oKT0+e2E9PT0ic3RhcnQiP3RoaXMuc2V0Q3Vyc29yVG9TdGFydChlLHIpOmE9PT0iZW5kIiYmKCFpLnRleHRDb250ZW50fHxpLnRleHRDb250ZW50Lmxlbmd0aD09PTApP3RoaXMuc2V0Q3Vyc29yVG9FbmQoZSxyKTp0eXBlb2YgYT09Im51bWJlciImJkllLnNldEN1cnNvclBvc2l0aW9uKGksYSl9O2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1pfHxlLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1pP28oKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWl8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PWk/bygpOnNldFRpbWVvdXQoKCk9PnsoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWl8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PWkpJiZvKCl9LDEwKX0pfWdldFNwbGl0Q29udGVudChlLGEpe2xldCByPWUucXVlcnlTZWxlY3RvcihgLmJsb2NrLmhlYWRpbmctJHt0aGlzLmxldmVsfWApO2lmKCFyKXJldHVybiBudWxsO2xldCBzPWE/LmNvbXBvbmVudD8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3QsbD1hPy5zaGFkb3dSb290LGY9W107cyYmZi5wdXNoKHMpLGwmJmYucHVzaChsKTtsZXQgYz1JZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmYpO2lmKCFjKXtpZih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uIT09bnVsbCl7bGV0IHk9ci50ZXh0Q29udGVudHx8IiIsdz1NYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLHkubGVuZ3RoKTtyZXR1cm57YmVmb3JlOnkuc3Vic3RyaW5nKDAsdyksYWZ0ZXI6eS5zdWJzdHJpbmcodyl9fXJldHVybiBudWxsfWlmKCFJZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShyLGMuc3RhcnRDb250YWluZXIpKXtpZih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uIT09bnVsbCl7bGV0IHk9ci50ZXh0Q29udGVudHx8IiIsdz1NYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLHkubGVuZ3RoKTtyZXR1cm57YmVmb3JlOnkuc3Vic3RyaW5nKDAsdyksYWZ0ZXI6eS5zdWJzdHJpbmcodyl9fXJldHVybiBudWxsfWxldCB1PXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSxhKTtpZih1PT09bnVsbHx8dT09PTApcmV0dXJue2JlZm9yZToiIixhZnRlcjpyLmlubmVySFRNTH07bGV0IGQ9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxoPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7ZC5zZXRTdGFydChyLDApLGQuc2V0RW5kKGMuc3RhcnRDb250YWluZXIsYy5zdGFydE9mZnNldCksaC5zZXRTdGFydChjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpLGguc2V0RW5kKHIsci5jaGlsZE5vZGVzLmxlbmd0aCk7bGV0IGc9ZC5jbG9uZUNvbnRlbnRzKCksYj1oLmNsb25lQ29udGVudHMoKSx4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3guYXBwZW5kQ2hpbGQoZyk7bGV0IG09eC5pbm5lckhUTUw7eC5pbm5lckhUTUw9IiIseC5hcHBlbmRDaGlsZChiKTtsZXQgdj14LmlubmVySFRNTDtyZXR1cm57YmVmb3JlOm0sYWZ0ZXI6dn19fTtmZSgpO3ZhciBfST1jbGFzcyBleHRlbmRzIHUxe3R5cGU9InF1b3RlIjtsYXN0S25vd25DdXJzb3JQb3NpdGlvbj0wO2xhc3RTZWxlY3RlZFRleHQ9IiI7c2VsZWN0aW9uSGFuZGxlcj1udWxsO3JlbmRlcihlLGEpe2xldCByPWE/IiBzZWxlY3RlZCI6IiIsaT10aGlzLmdldFBsYWNlaG9sZGVyKCk7cmV0dXJuYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrIHF1b3RlJHtyfSIKICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgZGF0YS1wbGFjZWhvbGRlcj0iJHtpfSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtlLnR5cGV9IgogICAgICA+PC9kaXY+CiAgICBgfXNldHVwKGUsYSxyKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpO2lmKCFpKXtjb25zb2xlLmVycm9yKCJRdW90ZUJsb2NrSGFuZGxlci5zZXR1cDogTm8gcXVvdGUgYmxvY2sgZWxlbWVudCBmb3VuZCIpO3JldHVybn1hLmNvbnRlbnQmJiFpLmlubmVySFRNTCYmKGkuaW5uZXJIVE1MPWEuY29udGVudCksaS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsbz0+e3Iub25JbnB1dChvKTtsZXQgcz10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO3MhPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1zKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsbz0+e2xldCBzPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7cyE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPXMpLHIub25LZXlEb3duKG8pfSksaS5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9PntyLm9uRm9jdXMoKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9PntyLm9uQmx1cigpfSksaS5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwoKT0+e3Iub25Db21wb3NpdGlvblN0YXJ0KCl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwoKT0+e3Iub25Db21wb3NpdGlvbkVuZCgpfSksaS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixvPT57bGV0IHM9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtzIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249cyksci5vbk1vdXNlVXA/LihvKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLG89PntzZXRUaW1lb3V0KCgpPT57bGV0IHM9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtzIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249cyl9LDApfSksaS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsbz0+e2xldCBzPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7cyE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPXMpfSksdGhpcy5zZXR1cFNlbGVjdGlvbkhhbmRsZXIoZSxpLGEpfXNldHVwU2VsZWN0aW9uSGFuZGxlcihlLGEscil7bGV0IGk9KCk9PntsZXQgcz13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYoIXN8fHMucmFuZ2VDb3VudD09PTApcmV0dXJuO2xldCBsPXMudG9TdHJpbmcoKTtpZihsLmxlbmd0aD09PTApe3RoaXMubGFzdFNlbGVjdGVkVGV4dCYmKHRoaXMubGFzdFNlbGVjdGVkVGV4dD0iIix0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSx7dGV4dDoiIixibG9ja0lkOnIuaWQsaGFzU2VsZWN0aW9uOiExfSkpO3JldHVybn1sZXQgZj1hLmdldFJvb3ROb2RlKCkuaG9zdCx1PWY/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpPy5zaGFkb3dSb290LGQ9Zj8uc2hhZG93Um9vdCxoPVtdO3UmJmgucHVzaCh1KSxkJiZoLnB1c2goZCk7bGV0IGc9SWUuZ2V0U2VsZWN0aW9uSW5mbyguLi5oKTtpZighZylyZXR1cm47bGV0IGI9SWUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oYSxnLnN0YXJ0Q29udGFpbmVyKSx4PUllLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGEsZy5lbmRDb250YWluZXIpO2lmKGJ8fHgpe2lmKGwhPT10aGlzLmxhc3RTZWxlY3RlZFRleHQpe3RoaXMubGFzdFNlbGVjdGVkVGV4dD1sO2xldCBtPUllLmNyZWF0ZVJhbmdlRnJvbUluZm8oZyksdj1tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlLHt0ZXh0OmwudHJpbSgpLGJsb2NrSWQ6ci5pZCxyYW5nZTptLHJlY3Q6dixoYXNTZWxlY3Rpb246ITB9KX19ZWxzZSB0aGlzLmxhc3RTZWxlY3RlZFRleHQmJih0aGlzLmxhc3RTZWxlY3RlZFRleHQ9IiIsdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGUse3RleHQ6IiIsYmxvY2tJZDpyLmlkLGhhc1NlbGVjdGlvbjohMX0pKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixpKSx0aGlzLnNlbGVjdGlvbkhhbmRsZXI9aTtsZXQgbz1hLmdldFJvb3ROb2RlKCkuaG9zdDtpZihvKXtsZXQgcz1vLmRpc2Nvbm5lY3RlZENhbGxiYWNrO28uZGlzY29ubmVjdGVkQ2FsbGJhY2s9YXN5bmMgZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbkhhbmRsZXImJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLHRoaXMuc2VsZWN0aW9uSGFuZGxlciksdGhpcy5zZWxlY3Rpb25IYW5kbGVyPW51bGwpLHMmJmF3YWl0IHMuY2FsbChvKX0uYmluZCh0aGlzKX19ZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlLGEpe2xldCByPW5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIse2RldGFpbDphLGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KTtlLmRpc3BhdGNoRXZlbnQocil9Z2V0U3R5bGVzKCl7cmV0dXJuYAogICAgICAvKiBRdW90ZSBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLnF1b3RlIHsKICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICR7cC5iZFRoZW1lKCIjMDA2NmNjIiwiIzRkOTRmZiIpfTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNTU1IiwiI2IwYjBiMCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBtYXJnaW46IDE2cHggMDsKICAgICAgfQogICAgYH1nZXRQbGFjZWhvbGRlcigpe3JldHVybiJBZGQgYSBxdW90ZS4uLiJ9Z2V0Q3Vyc29yUG9zaXRpb24oZSxhKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpO2lmKCFyKXJldHVybiBudWxsO2xldCBzPWE/LmNvbXBvbmVudD8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3QsbD1hPy5zaGFkb3dSb290LGY9W107cyYmZi5wdXNoKHMpLGwmJmYucHVzaChsKTtsZXQgYz1JZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmYpO2lmKCFjfHwhSWUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocixjLnN0YXJ0Q29udGFpbmVyKSlyZXR1cm4gbnVsbDtsZXQgdT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3JldHVybiB1LnNlbGVjdE5vZGVDb250ZW50cyhyKSx1LnNldEVuZChjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpLHUudG9TdHJpbmcoKS5sZW5ndGh9Z2V0Q29udGVudChlLGEpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7cmV0dXJuIHImJnIuaW5uZXJIVE1MfHwiIn1zZXRDb250ZW50KGUsYSxyKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpO2lmKCFpKXJldHVybjtsZXQgbz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09aXx8ZS5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50PT09aTtpLmlubmVySFRNTD1hLG8mJmkuZm9jdXMoKX1zZXRDdXJzb3JUb1N0YXJ0KGUsYSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTtyJiZfMi5zZXRDdXJzb3JUb1N0YXJ0KHIpfXNldEN1cnNvclRvRW5kKGUsYSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTtyJiZfMi5zZXRDdXJzb3JUb0VuZChyKX1mb2N1cyhlLGEpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7ciYmKHIuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKXx8ci5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsInRydWUiKSxyLmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXImJmUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCE9PXImJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntyLmZvY3VzKCl9KSl9Zm9jdXNXaXRoQ3Vyc29yKGUsYT0iZW5kIixyKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpO2lmKCFpKXJldHVybjtpLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fGkuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCJ0cnVlIiksaS5mb2N1cygpO2xldCBvPSgpPT57YT09PSJzdGFydCI/dGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGUscik6YT09PSJlbmQiP3RoaXMuc2V0Q3Vyc29yVG9FbmQoZSxyKTp0eXBlb2YgYT09Im51bWJlciImJkllLnNldEN1cnNvclBvc2l0aW9uKGksYSl9O2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1pfHxlLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1pP28oKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1pfHxlLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1pKSYmbygpfSl9Z2V0U3BsaXRDb250ZW50KGUsYSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTtpZighcilyZXR1cm4gbnVsbDtsZXQgcz1hPy5jb21wb25lbnQ/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpPy5zaGFkb3dSb290LGw9YT8uc2hhZG93Um9vdCxmPVtdO3MmJmYucHVzaChzKSxsJiZmLnB1c2gobCk7bGV0IGM9SWUuZ2V0U2VsZWN0aW9uSW5mbyguLi5mKTtpZighYyl7aWYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiE9PW51bGwpe2xldCB5PXIudGV4dENvbnRlbnR8fCIiLHc9TWF0aC5taW4odGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbix5Lmxlbmd0aCk7cmV0dXJue2JlZm9yZTp5LnN1YnN0cmluZygwLHcpLGFmdGVyOnkuc3Vic3RyaW5nKHcpfX1yZXR1cm4gbnVsbH1pZighSWUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocixjLnN0YXJ0Q29udGFpbmVyKSl7aWYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiE9PW51bGwpe2xldCB5PXIudGV4dENvbnRlbnR8fCIiLHc9TWF0aC5taW4odGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbix5Lmxlbmd0aCk7cmV0dXJue2JlZm9yZTp5LnN1YnN0cmluZygwLHcpLGFmdGVyOnkuc3Vic3RyaW5nKHcpfX1yZXR1cm4gbnVsbH1sZXQgdT10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUsYSk7aWYodT09PW51bGx8fHU9PT0wKXJldHVybntiZWZvcmU6IiIsYWZ0ZXI6ci5pbm5lckhUTUx9O2xldCBkPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksaD1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2Quc2V0U3RhcnQociwwKSxkLnNldEVuZChjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpLGguc2V0U3RhcnQoYy5zdGFydENvbnRhaW5lcixjLnN0YXJ0T2Zmc2V0KSxoLnNldEVuZChyLHIuY2hpbGROb2Rlcy5sZW5ndGgpO2xldCBnPWQuY2xvbmVDb250ZW50cygpLGI9aC5jbG9uZUNvbnRlbnRzKCkseD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt4LmFwcGVuZENoaWxkKGcpO2xldCBtPXguaW5uZXJIVE1MO3guaW5uZXJIVE1MPSIiLHguYXBwZW5kQ2hpbGQoYik7bGV0IHY9eC5pbm5lckhUTUw7cmV0dXJue2JlZm9yZTptLGFmdGVyOnZ9fX07ZmUoKTtlYygpO3ZhciBBST1jbGFzcyBleHRlbmRzIHUxe3R5cGU9ImNvZGUiO2hpZ2hsaWdodFRpbWVyPW51bGw7aGlnaGxpZ2h0SnM9bnVsbDtyZW5kZXIoZSxhKXtsZXQgcj1lLm1ldGFkYXRhPy5sYW5ndWFnZXx8InR5cGVzY3JpcHQiLGk9ZS5jb250ZW50fHwiIixvPWkuc3BsaXQoYApgKS5sZW5ndGgscz0iIjtmb3IobGV0IGY9MTtmPD1vO2YrKylzKz1gPGRpdiBjbGFzcz0ibGluZS1udW1iZXIiPiR7Zn08L2Rpdj5gO2xldCBsPXlqLm1hcChmPT57bGV0IGM9Zi50b0xvd2VyQ2FzZSgpO3JldHVybmA8b3B0aW9uIHZhbHVlPSIke2N9IiAke2M9PT1yPyJzZWxlY3RlZCI6IiJ9PiR7Zn08L29wdGlvbj5gfSkuam9pbigiIik7cmV0dXJuYAogICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJsb2NrLWNvbnRhaW5lciR7YT8iIHNlbGVjdGVkIjoiIn0iIGRhdGEtbGFuZ3VhZ2U9IiR7cn0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtaGVhZGVyIj4KICAgICAgICAgIDxzZWxlY3QgY2xhc3M9Imxhbmd1YWdlLXNlbGVjdG9yIiBkYXRhLWJsb2NrLWlkPSIke2UuaWR9Ij4KICAgICAgICAgICAgJHtsfQogICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjb3B5LWJ1dHRvbiIgdGl0bGU9IkNvcHkgY29kZSI+CiAgICAgICAgICAgIDxzdmcgY2xhc3M9ImNvcHktaWNvbiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTAgNi43NUMwIDUuNzg0Ljc4NCA1IDEuNzUgNWgxLjVhLjc1Ljc1IDAgMDEwIDEuNWgtMS41YS4yNS4yNSAwIDAwLS4yNS4yNXY3LjVjMCAuMTM4LjExMi4yNS4yNS4yNWg3LjVhLjI1LjI1IDAgMDAuMjUtLjI1di0xLjVhLjc1Ljc1IDAgMDExLjUgMHYxLjVBMS43NSAxLjc1IDAgMDE5LjI1IDE2aC03LjVBMS43NSAxLjc1IDAgMDEwIDE0LjI1di03LjV6Ij48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTUgMS43NUM1IC43ODQgNS43ODQgMCA2Ljc1IDBoNy41QzE1LjIxNiAwIDE2IC43ODQgMTYgMS43NXY3LjVBMS43NSAxLjc1IDAgMDExNC4yNSAxMWgtNy41QTEuNzUgMS43NSAwIDAxNSA5LjI1di03LjV6bTEuNzUtLjI1YS4yNS4yNSAwIDAwLS4yNS4yNXY3LjVjMCAuMTM4LjExMi4yNS4yNS4yNWg3LjVhLjI1LjI1IDAgMDAuMjUtLjI1di03LjVhLjI1LjI1IDAgMDAtLjI1LS4yNWgtNy41eiI+PC9wYXRoPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvcHktdGV4dCI+Q29weTwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLW51bWJlcnMiPiR7c308L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtY29udGVudCI+CiAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUtcHJlIj48Y29kZSBjbGFzcz0iY29kZS1lZGl0b3IiIAogICAgICAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgICAgICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtlLnR5cGV9IgogICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9ImZhbHNlIj4ke3RoaXMuZXNjYXBlSHRtbChpKX08L2NvZGU+PC9wcmU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXNldHVwKGUsYSxyKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpLG89ZS5xdWVyeVNlbGVjdG9yKCIuY29kZS1ibG9jay1jb250YWluZXIiKSxzPWUucXVlcnlTZWxlY3RvcigiLmNvcHktYnV0dG9uIiksbD1lLnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1zZWxlY3RvciIpO2lmKCFpfHwhbylyZXR1cm47bCYmbC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGM9PntsZXQgdT1jLnRhcmdldC52YWx1ZTthLm1ldGFkYXRhPXsuLi5hLm1ldGFkYXRhLGxhbmd1YWdlOnV9LG8uc2V0QXR0cmlidXRlKCJkYXRhLWxhbmd1YWdlIix1KSxhLmNvbnRlbnQmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1pJiZ0aGlzLmFwcGx5SGlnaGxpZ2h0aW5nKGUsYSksci5vbklucHV0JiZyLm9uSW5wdXQobmV3IElucHV0RXZlbnQoImlucHV0IikpfSkscyYmcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsYXN5bmMoKT0+e2xldCBjPWkudGV4dENvbnRlbnR8fCIiO3RyeXthd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjKTtsZXQgdT1zLnF1ZXJ5U2VsZWN0b3IoIi5jb3B5LXRleHQiKSxkPXUudGV4dENvbnRlbnQ7dS50ZXh0Q29udGVudD0iQ29waWVkISIscy5jbGFzc0xpc3QuYWRkKCJjb3BpZWQiKSxzZXRUaW1lb3V0KCgpPT57dS50ZXh0Q29udGVudD1kLHMuY2xhc3NMaXN0LnJlbW92ZSgiY29waWVkIil9LDJlMyl9Y2F0Y2godSl7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNvcHk6Iix1KTtsZXQgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2QudmFsdWU9YyxkLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsZC5zdHlsZS5vcGFjaXR5PSIwIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGQpLGQuc2VsZWN0KCk7dHJ5e2RvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iik7bGV0IGg9cy5xdWVyeVNlbGVjdG9yKCIuY29weS10ZXh0IiksZz1oLnRleHRDb250ZW50O2gudGV4dENvbnRlbnQ9IkNvcGllZCEiLHMuY2xhc3NMaXN0LmFkZCgiY29waWVkIiksc2V0VGltZW91dCgoKT0+e2gudGV4dENvbnRlbnQ9ZyxzLmNsYXNzTGlzdC5yZW1vdmUoImNvcGllZCIpfSwyZTMpfWNhdGNoKGgpe2NvbnNvbGUuZXJyb3IoIkZhbGxiYWNrIGNvcHkgZmFpbGVkOiIsaCl9ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkKX19KTtsZXQgZj0hMTtpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+e2Y9ITAsby5jbGFzc0xpc3QuYWRkKCJlZGl0aW5nIik7bGV0IGM9aS50ZXh0Q29udGVudHx8IiI7aS50ZXh0Q29udGVudD1jLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2xldCB1PWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksZD13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aS5maXJzdENoaWxkJiYodS5zZXRTdGFydChpLmZpcnN0Q2hpbGQsMCksdS5jb2xsYXBzZSghMCksZD8ucmVtb3ZlQWxsUmFuZ2VzKCksZD8uYWRkUmFuZ2UodSkpfSksci5vbkZvY3VzKCl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT57Zj0hMSxvLmNsYXNzTGlzdC5yZW1vdmUoImVkaXRpbmciKSx0aGlzLmFwcGx5SGlnaGxpZ2h0aW5nKGUsYSksci5vbkJsdXIoKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGM9PntyLm9uSW5wdXQoYyksdGhpcy51cGRhdGVMaW5lTnVtYmVycyhlKSxjbGVhclRpbWVvdXQodGhpcy5oaWdobGlnaHRUaW1lcil9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGM9PntpZihjLmtleT09PSJUYWIiKXtjLnByZXZlbnREZWZhdWx0KCk7bGV0IHU9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKHUmJnUucmFuZ2VDb3VudD4wKXtsZXQgZD11LmdldFJhbmdlQXQoMCksaD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICAiKTtkLmluc2VydE5vZGUoaCksZC5zZXRTdGFydEFmdGVyKGgpLGQuc2V0RW5kQWZ0ZXIoaCksdS5yZW1vdmVBbGxSYW5nZXMoKSx1LmFkZFJhbmdlKGQpLHIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSksdGhpcy51cGRhdGVMaW5lTnVtYmVycyhlKX1yZXR1cm59aWYoWyJBcnJvd0xlZnQiLCJBcnJvd1JpZ2h0IiwiQXJyb3dVcCIsIkFycm93RG93biJdLmluY2x1ZGVzKGMua2V5KSl7bGV0IHU9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKSxkPWkudGV4dENvbnRlbnQ/Lmxlbmd0aHx8MDtpZihjLmtleT09PSJBcnJvd0xlZnQiJiZ1PT09MHx8Yy5rZXk9PT0iQXJyb3dSaWdodCImJnU9PT1kKXtyLm9uS2V5RG93bihjKTtyZXR1cm59aWYoYy5rZXk9PT0iQXJyb3dVcCJ8fGMua2V5PT09IkFycm93RG93biIpe2xldCBoPShpLnRleHRDb250ZW50fHwiIikuc3BsaXQoYApgKSxnPXRoaXMuZ2V0Q3VycmVudExpbmVJbmRleChpKTtpZihjLmtleT09PSJBcnJvd1VwIiYmZz09PTB8fGMua2V5PT09IkFycm93RG93biImJmc9PT1oLmxlbmd0aC0xKXtyLm9uS2V5RG93bihjKTtyZXR1cm59fX1yLm9uS2V5RG93bihjKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigicGFzdGUiLGM9PntjLnByZXZlbnREZWZhdWx0KCk7bGV0IHU9Yy5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCJ0ZXh0L3BsYWluIik7aWYodSl7bGV0IGQ9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKGQmJmQucmFuZ2VDb3VudD4wKXtsZXQgaD1kLmdldFJhbmdlQXQoMCk7aC5kZWxldGVDb250ZW50cygpO2xldCBnPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHUpO2guaW5zZXJ0Tm9kZShnKSxoLnNldFN0YXJ0QWZ0ZXIoZyksaC5zZXRFbmRBZnRlcihnKSxkLnJlbW92ZUFsbFJhbmdlcygpLGQuYWRkUmFuZ2UoaCksci5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKSx0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGUpfX19KSxpLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCgpPT5yLm9uQ29tcG9zaXRpb25TdGFydCgpKSxpLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwoKT0+ci5vbkNvbXBvc2l0aW9uRW5kKCkpLGEuY29udGVudCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWkmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuYXBwbHlIaWdobGlnaHRpbmcoZSxhKX0pfXVwZGF0ZUxpbmVOdW1iZXJzKGUpe2xldCBhPWUucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIikscj1lLnF1ZXJ5U2VsZWN0b3IoIi5saW5lLW51bWJlcnMiKTtpZighYXx8IXIpcmV0dXJuO2xldCBzPShhLnRleHRDb250ZW50fHwiIikuc3BsaXQoYApgKS5sZW5ndGh8fDEsbD0iIjtmb3IobGV0IGY9MTtmPD1zO2YrKylsKz1gPGRpdiBjbGFzcz0ibGluZS1udW1iZXIiPiR7Zn08L2Rpdj5gO3IuaW5uZXJIVE1MPWx9Z2V0Q3VycmVudExpbmVJbmRleChlKXtsZXQgYT13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYoIWF8fGEucmFuZ2VDb3VudD09PTApcmV0dXJuIDA7bGV0IHI9YS5nZXRSYW5nZUF0KDApLGk9ci5jbG9uZVJhbmdlKCk7cmV0dXJuIGkuc2VsZWN0Tm9kZUNvbnRlbnRzKGUpLGkuc2V0RW5kKHIuc3RhcnRDb250YWluZXIsci5zdGFydE9mZnNldCksaS50b1N0cmluZygpLnNwbGl0KGAKYCkubGVuZ3RoLTF9YXN5bmMgYXBwbHlIaWdobGlnaHRpbmcoZSxhKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpO2lmKCFyKXJldHVybjt0aGlzLmhpZ2hsaWdodEpzfHwodGhpcy5oaWdobGlnaHRKcz1hd2FpdCBIMi5nZXRJbnN0YW5jZSgpLmxvYWRIaWdobGlnaHRKcygpKTtsZXQgaT10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpLG89ci50ZXh0Q29udGVudHx8IiIscz1hLm1ldGFkYXRhPy5sYW5ndWFnZXx8InR5cGVzY3JpcHQiO3RyeXtsZXQgbD10aGlzLmhpZ2hsaWdodEpzLmhpZ2hsaWdodChvLHtsYW5ndWFnZTpzLGlnbm9yZUlsbGVnYWxzOiEwfSk7bC52YWx1ZSYmKHIuaW5uZXJIVE1MPWwudmFsdWUsZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXImJmkhPT1udWxsJiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntJZS5zZXRDdXJzb3JQb3NpdGlvbihyLGkpfSkpfWNhdGNoKGwpe2NvbnNvbGUud2FybigiU3ludGF4IGhpZ2hsaWdodGluZyBmYWlsZWQ6IixsKX19ZXNjYXBlSHRtbChlKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS50ZXh0Q29udGVudD1lLGEuaW5uZXJIVE1MfWdldENvbnRlbnQoZSl7cmV0dXJuIGUucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik/LnRleHRDb250ZW50fHwiIn1zZXRDb250ZW50KGUsYSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTtpZihyJiYoci50ZXh0Q29udGVudD1hLHRoaXMudXBkYXRlTGluZU51bWJlcnMoZSksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXIpKXtsZXQgaT17aWQ6ci5kYXRhc2V0LmJsb2NrSWR8fCIiLHR5cGU6ImNvZGUiLGNvbnRlbnQ6YSxtZXRhZGF0YTp7bGFuZ3VhZ2U6ZS5xdWVyeVNlbGVjdG9yKCIuY29kZS1ibG9jay1jb250YWluZXIiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLWxhbmd1YWdlIil8fCJ0eXBlc2NyaXB0In19O3RoaXMuYXBwbHlIaWdobGlnaHRpbmcoZSxpKX19Z2V0Q3Vyc29yUG9zaXRpb24oZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTtpZighYSlyZXR1cm4gbnVsbDtsZXQgcj13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYoIXJ8fHIucmFuZ2VDb3VudD09PTApcmV0dXJuIG51bGw7bGV0IGk9ci5nZXRSYW5nZUF0KDApO2lmKCFhLmNvbnRhaW5zKGkuc3RhcnRDb250YWluZXIpKXJldHVybiBudWxsO2xldCBvPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7cmV0dXJuIG8uc2VsZWN0Tm9kZUNvbnRlbnRzKGEpLG8uc2V0RW5kKGkuc3RhcnRDb250YWluZXIsaS5zdGFydE9mZnNldCksby50b1N0cmluZygpLmxlbmd0aH1zZXRDdXJzb3JUb1N0YXJ0KGUpe2xldCBhPWUucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7YSYmSWUuc2V0Q3Vyc29yUG9zaXRpb24oYSwwKX1zZXRDdXJzb3JUb0VuZChlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpO2lmKGEpe2xldCByPWEudGV4dENvbnRlbnQ/Lmxlbmd0aHx8MDtJZS5zZXRDdXJzb3JQb3NpdGlvbihhLHIpfX1mb2N1cyhlKXtlLnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpPy5mb2N1cygpfWZvY3VzV2l0aEN1cnNvcihlLGE9ImVuZCIpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7ciYmKHIuZm9jdXMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnthPT09InN0YXJ0Ij90aGlzLnNldEN1cnNvclRvU3RhcnQoZSk6YT09PSJlbmQiP3RoaXMuc2V0Q3Vyc29yVG9FbmQoZSk6dHlwZW9mIGE9PSJudW1iZXIiJiZJZS5zZXRDdXJzb3JQb3NpdGlvbihyLGEpfSkpfWdldFNwbGl0Q29udGVudChlKXtsZXQgYT10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO2xldCByPXRoaXMuZ2V0Q29udGVudChlKTtyZXR1cm57YmVmb3JlOnIuc3Vic3RyaW5nKDAsYSksYWZ0ZXI6ci5zdWJzdHJpbmcoYSl9fWdldFN0eWxlcygpe3JldHVybmAKICAgICAgLyogQ29kZSBCbG9jayBDb250YWluZXIgLSBNaW5pbWFsaXN0IHNoYWRjbiBzdHlsZSAqLwogICAgICAuY29kZS1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiIzljYTNhZiIsIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5lZGl0aW5nIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCIjNmI3MjgwIiwiIzljYTNhZiIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZhZmFmYSIsIiMwYTBhMGEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEhlYWRlciAtIFNpbXBsaWZpZWQgKi8KICAgICAgLmNvZGUtaGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3RvciB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzZiNzI4MCIsIiM5Y2EzYWYiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07CiAgICAgICAgZm9udC1mYW1pbHk6ICR7SnR9OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAubGFuZ3VhZ2Utc2VsZWN0b3I6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjlmYWZiIiwiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzNzQxNTEiLCIjZTVlN2ViIil9OwogICAgICB9CiAgICAgIAogICAgICAubGFuZ3VhZ2Utc2VsZWN0b3I6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb3B5IEJ1dHRvbiAtIE1pbmltYWwgKi8KICAgICAgLmNvcHktYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNmI3MjgwIiwiIzljYTNhZiIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7SnR9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAuY29weS1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjlmYWZiIiwiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzNzQxNTEiLCIjZTVlN2ViIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29weS1idXR0b246YWN0aXZlIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpOwogICAgICB9CiAgICAgIAogICAgICAuY29weS1idXR0b24uY29waWVkIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwNTk2NjkiLCIjMTBiOTgxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29weS1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjpob3ZlciAuY29weS1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICAgIAogICAgICAuY29weS10ZXh0IHsKICAgICAgICBtaW4td2lkdGg6IDQwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CiAgICAgIAogICAgICAvKiBDb2RlIEJvZHkgKi8KICAgICAgLmNvZGUtYm9keSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmYWZhZmEiLCIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBMaW5lIE51bWJlcnMgLSBTdWJ0bGUgKi8KICAgICAgLmxpbmUtbnVtYmVycyB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZzogMTJweCAwOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIG1pbi13aWR0aDogNDBweDsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5saW5lLW51bWJlciB7CiAgICAgICAgcGFkZGluZzogMCAxMnB4IDAgOHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzljYTNhZiIsIiM0YjU1NjMiKX07CiAgICAgICAgZm9udC1mYW1pbHk6ICR7amx9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvZGUgQ29udGVudCAqLwogICAgICAuY29kZS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1wcmUgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7amx9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMxMTE4MjciLCIjZjlmYWZiIil9OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgbWluLWhlaWdodDogNjBweDsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQogICAgICAKICAgICAgLyogUGxhY2Vob2xkZXIgKi8KICAgICAgLmNvZGUtZWRpdG9yOmVtcHR5OjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICIvLyBUeXBlIG9yIHBhc3RlIGNvZGUgaGVyZS4uLiI7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjOWNhM2FmIiwiIzRiNTU2MyIpfTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLyogV2hlbiBlZGl0aW5nIChmb2N1c2VkKSwgc2hvdyBncmV5IHRleHQgd2l0aG91dCBoaWdobGlnaHRpbmcgKi8KICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyLmVkaXRpbmcgLmNvZGUtZWRpdG9yIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM2YjcyODAiLCIjOWNhM2FmIil9ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5lZGl0aW5nIC5jb2RlLWVkaXRvciAqIHsKICAgICAgICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAvKiBTeW50YXggSGlnaGxpZ2h0aW5nIC0gTXV0ZWQgY29sb3JzICovCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1rZXl3b3JkIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiNkYzI2MjYiLCIjZjg3MTcxIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1zdHJpbmcgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA1OTY2OSIsIiMxMGI5ODEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1udW1iZXIgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzdjM2FlZCIsIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1mdW5jdGlvbiB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMjU2M2ViIiwiIzYwYTVmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWNvbW1lbnQgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzZiNzI4MCIsIiM2YjcyODAiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtdmFyaWFibGUsCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1hdHRyIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiNlYTU4MGMiLCIjZmI5MjNjIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtY2xhc3MsCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy10aXRsZSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMjU2M2ViIiwiIzYwYTVmYSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtcGFyYW1zIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzNzQxNTEiLCIjZTVlN2ViIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtYnVpbHRfaW4gewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzdjM2FlZCIsIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1saXRlcmFsIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3YzNhZWQiLCIjYTc4YmZhIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtbWV0YSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNmI3MjgwIiwiIzljYTNhZiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLXB1bmN0dWF0aW9uIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzNzQxNTEiLCIjZDFkNWRiIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtdGFnIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiNkYzI2MjYiLCIjZjg3MTcxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtYXR0cmlidXRlIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMyNTYzZWIiLCIjNjBhNWZhIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc2VsZWN0b3ItdGFnIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiNkYzI2MjYiLCIjZjg3MTcxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc2VsZWN0b3ItY2xhc3MgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzI1NjNlYiIsIiM2MGE1ZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1zZWxlY3Rvci1pZCB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjN2MzYWVkIiwiI2E3OGJmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogU2VsZWN0aW9uICovCiAgICAgIC5jb2RlLWVkaXRvcjo6c2VsZWN0aW9uLAogICAgICAuY29kZS1lZGl0b3IgKjo6c2VsZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSg5OSwgMTAyLCAyNDEsIDAuMikiLCJyZ2JhKDk5LCAxMDIsIDI0MSwgMC4zKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgLSBNaW5pbWFsICovCiAgICAgIC5jb2RlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNkMWQ1ZGIiLCIjNGI1NTYzIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjOWNhM2FmIiwiIzZiNzI4MCIpfTsKICAgICAgfQogICAgYH19O2ZlKCk7dmFyICRJPWNsYXNzIGV4dGVuZHMgdTF7dHlwZT0ibGlzdCI7bGFzdEtub3duQ3Vyc29yUG9zaXRpb249MDtsYXN0U2VsZWN0ZWRUZXh0PSIiO3NlbGVjdGlvbkhhbmRsZXI9bnVsbDtyZW5kZXIoZSxhKXtsZXQgcj1hPyIgc2VsZWN0ZWQiOiIiLG89KGUubWV0YWRhdGE/Lmxpc3RUeXBlfHwidW5vcmRlcmVkIik9PT0ib3JkZXJlZCI/Im9sIjoidWwiLHM9dGhpcy5yZW5kZXJMaXN0Q29udGVudChlLmNvbnRlbnQsZS5tZXRhZGF0YSk7cmV0dXJuYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrIGxpc3Qke3J9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtlLnR5cGV9IgogICAgICA+JHtzfTwvZGl2PgogICAgYH1yZW5kZXJMaXN0Q29udGVudChlLGEpe2lmKCFlKXJldHVybiI8dWw+PGxpPjwvbGk+PC91bD4iO2xldCBpPShhPy5saXN0VHlwZXx8InVub3JkZXJlZCIpPT09Im9yZGVyZWQiPyJvbCI6InVsIixvPWUuc3BsaXQoYApgKS5maWx0ZXIobD0+bC50cmltKCkpO2lmKG8ubGVuZ3RoPT09MClyZXR1cm5gPCR7aX0+PGxpPjwvbGk+PC8ke2l9PmA7bGV0IHM9by5tYXAobD0+YDxsaT4ke2x9PC9saT5gKS5qb2luKCIiKTtyZXR1cm5gPCR7aX0+JHtzfTwvJHtpfT5gfXNldHVwKGUsYSxyKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7aWYoIWkpe2NvbnNvbGUuZXJyb3IoIkxpc3RCbG9ja0hhbmRsZXIuc2V0dXA6IE5vIGxpc3QgYmxvY2sgZWxlbWVudCBmb3VuZCIpO3JldHVybn1hLmNvbnRlbnQmJiFpLmlubmVySFRNTCYmKGkuaW5uZXJIVE1MPXRoaXMucmVuZGVyTGlzdENvbnRlbnQoYS5jb250ZW50LGEubWV0YWRhdGEpKSxpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixvPT57ci5vbklucHV0KG8pO2xldCBzPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7cyE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPXMpfSksaS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixvPT57bGV0IHM9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtpZihzIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249cyksby5rZXk9PT0iRW50ZXIiJiYhby5zaGlmdEtleSl7bGV0IGw9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKGwmJmwucmFuZ2VDb3VudD4wKXtsZXQgYz1sLmdldFJhbmdlQXQoMCkuc3RhcnRDb250YWluZXIucGFyZW50RWxlbWVudD8uY2xvc2VzdCgibGkiKTtpZihjJiZjLnRleHRDb250ZW50PT09IiIpe28ucHJldmVudERlZmF1bHQoKSxyLm9uS2V5RG93bihvKTtyZXR1cm59fX1yLm9uS2V5RG93bihvKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT57ci5vbkZvY3VzKCl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT57ci5vbkJsdXIoKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsKCk9PntyLm9uQ29tcG9zaXRpb25TdGFydCgpfSksaS5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbmVuZCIsKCk9PntyLm9uQ29tcG9zaXRpb25FbmQoKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbz0+e2xldCBzPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7cyE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPXMpLHIub25Nb3VzZVVwPy4obyl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixvPT57c2V0VGltZW91dCgoKT0+e2xldCBzPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7cyE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPXMpfSwwKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLG89PntsZXQgcz10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO3MhPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1zKX0pLHRoaXMuc2V0dXBTZWxlY3Rpb25IYW5kbGVyKGUsaSxhKX1zZXR1cFNlbGVjdGlvbkhhbmRsZXIoZSxhLHIpe2xldCBpPSgpPT57bGV0IHM9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKCFzfHxzLnJhbmdlQ291bnQ9PT0wKXJldHVybjtsZXQgbD1zLnRvU3RyaW5nKCk7aWYobC5sZW5ndGg9PT0wKXt0aGlzLmxhc3RTZWxlY3RlZFRleHQmJih0aGlzLmxhc3RTZWxlY3RlZFRleHQ9IiIsdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGUse3RleHQ6IiIsYmxvY2tJZDpyLmlkLGhhc1NlbGVjdGlvbjohMX0pKTtyZXR1cm59bGV0IGY9YS5nZXRSb290Tm9kZSgpLmhvc3QsdT1mPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKT8uc2hhZG93Um9vdCxkPWY/LnNoYWRvd1Jvb3QsaD1bXTt1JiZoLnB1c2godSksZCYmaC5wdXNoKGQpO2xldCBnPUllLmdldFNlbGVjdGlvbkluZm8oLi4uaCk7aWYoIWcpcmV0dXJuO2xldCBiPUllLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGEsZy5zdGFydENvbnRhaW5lcikseD1JZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShhLGcuZW5kQ29udGFpbmVyKTtpZihifHx4KXtpZihsIT09dGhpcy5sYXN0U2VsZWN0ZWRUZXh0KXt0aGlzLmxhc3RTZWxlY3RlZFRleHQ9bDtsZXQgbT1JZS5jcmVhdGVSYW5nZUZyb21JbmZvKGcpLHY9bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSx7dGV4dDpsLnRyaW0oKSxibG9ja0lkOnIuaWQscmFuZ2U6bSxyZWN0OnYsaGFzU2VsZWN0aW9uOiEwfSl9fWVsc2UgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0JiYodGhpcy5sYXN0U2VsZWN0ZWRUZXh0PSIiLHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlLHt0ZXh0OiIiLGJsb2NrSWQ6ci5pZCxoYXNTZWxlY3Rpb246ITF9KSl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsaSksdGhpcy5zZWxlY3Rpb25IYW5kbGVyPWk7bGV0IG89YS5nZXRSb290Tm9kZSgpLmhvc3Q7aWYobyl7bGV0IHM9by5kaXNjb25uZWN0ZWRDYWxsYmFjaztvLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWFzeW5jIGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb25IYW5kbGVyJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXIpLHRoaXMuc2VsZWN0aW9uSGFuZGxlcj1udWxsKSxzJiZhd2FpdCBzLmNhbGwobyl9LmJpbmQodGhpcyl9fWRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSxhKXtsZXQgcj1uZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLHtkZXRhaWw6YSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSk7ZS5kaXNwYXRjaEV2ZW50KHIpfWdldFN0eWxlcygpe3JldHVybmAKICAgICAgLyogTGlzdCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLmxpc3QgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ibG9jay5saXN0IHVsLAogICAgICAuYmxvY2subGlzdCBvbCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGkgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgYH1nZXRQbGFjZWhvbGRlcigpe3JldHVybiIifWdldEN1cnNvclBvc2l0aW9uKGUsYSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpO2lmKCFyKXJldHVybiBudWxsO2xldCBzPWE/LmNvbXBvbmVudD8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3QsbD1hPy5zaGFkb3dSb290LGY9W107cyYmZi5wdXNoKHMpLGwmJmYucHVzaChsKTtsZXQgYz1JZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmYpO2lmKCFjfHwhSWUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocixjLnN0YXJ0Q29udGFpbmVyKSlyZXR1cm4gbnVsbDtsZXQgdT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3JldHVybiB1LnNlbGVjdE5vZGVDb250ZW50cyhyKSx1LnNldEVuZChjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpLHUudG9TdHJpbmcoKS5sZW5ndGh9Z2V0Q29udGVudChlLGEpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLmxpc3QiKTtpZighcilyZXR1cm4iIjtsZXQgaT1yLnF1ZXJ5U2VsZWN0b3JBbGwoImxpIik7cmV0dXJuIEFycmF5LmZyb20oaSkubWFwKHM9PnMudGV4dENvbnRlbnR8fCIiKS5qb2luKGAKYCl9c2V0Q29udGVudChlLGEscil7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpO2lmKCFpKXJldHVybjtsZXQgbz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09aXx8ZS5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50PT09aSxsPWkucXVlcnlTZWxlY3RvcigidWwsIG9sIik/LnRhZ05hbWU9PT0iT0wiO2kuaW5uZXJIVE1MPXRoaXMucmVuZGVyTGlzdENvbnRlbnQoYSx7bGlzdFR5cGU6bD8ib3JkZXJlZCI6InVub3JkZXJlZCJ9KSxvJiZpLmZvY3VzKCl9c2V0Q3Vyc29yVG9TdGFydChlLGEpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLmxpc3QiKTtpZighcilyZXR1cm47bGV0IGk9ci5xdWVyeVNlbGVjdG9yKCJsaSIpO2lmKGkpe2xldCBvPXRoaXMuZ2V0Rmlyc3RUZXh0Tm9kZShpKTtpZihvKXtsZXQgcz1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLGw9d2luZG93LmdldFNlbGVjdGlvbigpO3Muc2V0U3RhcnQobywwKSxzLnNldEVuZChvLDApLGw/LnJlbW92ZUFsbFJhbmdlcygpLGw/LmFkZFJhbmdlKHMpfX19c2V0Q3Vyc29yVG9FbmQoZSxhKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7aWYoIXIpcmV0dXJuO2xldCBpPXIucXVlcnlTZWxlY3RvcigibGk6bGFzdC1jaGlsZCIpO2lmKGkpe2xldCBvPXRoaXMuZ2V0TGFzdFRleHROb2RlKGkpO2lmKG8pe2xldCBzPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksbD13aW5kb3cuZ2V0U2VsZWN0aW9uKCksZj1vLnRleHRDb250ZW50Py5sZW5ndGh8fDA7cy5zZXRTdGFydChvLGYpLHMuc2V0RW5kKG8sZiksbD8ucmVtb3ZlQWxsUmFuZ2VzKCksbD8uYWRkUmFuZ2Uocyl9fX1nZXRGaXJzdFRleHROb2RlKGUpe2lmKGUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSlyZXR1cm4gZTtmb3IobGV0IGE9MDthPGUuY2hpbGROb2Rlcy5sZW5ndGg7YSsrKXtsZXQgcj10aGlzLmdldEZpcnN0VGV4dE5vZGUoZS5jaGlsZE5vZGVzW2FdKTtpZihyKXJldHVybiByfXJldHVybiBudWxsfWdldExhc3RUZXh0Tm9kZShlKXtpZihlLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpcmV0dXJuIGU7Zm9yKGxldCBhPWUuY2hpbGROb2Rlcy5sZW5ndGgtMTthPj0wO2EtLSl7bGV0IHI9dGhpcy5nZXRMYXN0VGV4dE5vZGUoZS5jaGlsZE5vZGVzW2FdKTtpZihyKXJldHVybiByfXJldHVybiBudWxsfWZvY3VzKGUsYSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpO3ImJihyLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fHIuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCJ0cnVlIiksci5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1yJiZlLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQhPT1yJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57ci5mb2N1cygpfSkpfWZvY3VzV2l0aEN1cnNvcihlLGE9ImVuZCIscil7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpO2lmKCFpKXJldHVybjtpLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fGkuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCJ0cnVlIiksaS5mb2N1cygpO2xldCBvPSgpPT57YT09PSJzdGFydCI/dGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGUscik6YT09PSJlbmQiP3RoaXMuc2V0Q3Vyc29yVG9FbmQoZSxyKTp0eXBlb2YgYT09Im51bWJlciImJnRoaXMuc2V0Q3Vyc29yVG9FbmQoZSxyKX07ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWl8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PWk/bygpOlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnsoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWl8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PWkpJiZvKCl9KX1nZXRTcGxpdENvbnRlbnQoZSxhKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpLG51bGx9fTtmZSgpO3ZhciBEST1jbGFzcyBleHRlbmRzIHUxe3R5cGU9ImltYWdlIjtyZW5kZXIoZSxhKXtsZXQgcj1lLm1ldGFkYXRhPy51cmwsaT1lLmNvbnRlbnR8fCJJbWFnZSIsbz1lLm1ldGFkYXRhPy5sb2FkaW5nO3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtYmxvY2stY29udGFpbmVyJHthPyIgc2VsZWN0ZWQiOiIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtlLmlkfSIKICAgICAgICAgICBkYXRhLWhhcy1pbWFnZT0iJHshIXJ9IgogICAgICAgICAgIHRhYmluZGV4PSIwIj4KICAgICAgICAke28/dGhpcy5yZW5kZXJMb2FkaW5nKCk6cj90aGlzLnJlbmRlckltYWdlKHIsaSk6dGhpcy5yZW5kZXJQbGFjZWhvbGRlcigpfQogICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiAKICAgICAgICAgICAgICAgY2xhc3M9ImltYWdlLWZpbGUtaW5wdXQiIAogICAgICAgICAgICAgICBhY2NlcHQ9ImltYWdlLyoiIAogICAgICAgICAgICAgICBzdHlsZT0iZGlzcGxheTogbm9uZTsiIC8+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJQbGFjZWhvbGRlcigpe3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLWljb24iIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgICAgICAgICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiByeD0iMiIgcnk9IjIiLz4KICAgICAgICAgICAgPGNpcmNsZSBjeD0iOC41IiBjeT0iOC41IiByPSIxLjUiLz4KICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iMjEgMTUgMTYgMTAgNSAyMSIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLXRleHQiIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPkNsaWNrIHRvIHVwbG9hZCBhbiBpbWFnZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InVwbG9hZC1oaW50IiBzdHlsZT0icG9pbnRlci1ldmVudHM6IG5vbmU7Ij5vciBkcmFnIGFuZCBkcm9wPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJJbWFnZShlLGEpe3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtY29udGFpbmVyIj4KICAgICAgICA8aW1nIHNyYz0iJHtlfSIgYWx0PSIke3RoaXMuZXNjYXBlSHRtbChhKX0iIC8+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJMb2FkaW5nKCl7cmV0dXJuYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1sb2FkaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctdGV4dCI+VXBsb2FkaW5nIGltYWdlLi4uPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1zZXR1cChlLGEscil7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuaW1hZ2UtYmxvY2stY29udGFpbmVyIiksbz1lLnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1maWxlLWlucHV0Iik7aWYoIWkpe2NvbnNvbGUuZXJyb3IoIkltYWdlQmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCBjb250YWluZXIiKTtyZXR1cm59aWYoIW8pe2NvbnNvbGUuZXJyb3IoIkltYWdlQmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCBmaWxlIGlucHV0Iik7cmV0dXJufWxldCBzPWkucXVlcnlTZWxlY3RvcigiLmltYWdlLXVwbG9hZC1wbGFjZWhvbGRlciIpO3MmJnMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGw9PntsLnByZXZlbnREZWZhdWx0KCksbC5zdG9wUHJvcGFnYXRpb24oKSxjb25zb2xlLmxvZygiSW1hZ2VCbG9ja0hhbmRsZXI6IFBsYWNlaG9sZGVyIGNsaWNrZWQsIG9wZW5pbmcgZmlsZSBzZWxlY3RvciIpLG8uY2xpY2soKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57ci5vbkZvY3VzKCl9KSxvLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsYXN5bmMgbD0+e2xldCBjPWwudGFyZ2V0LmZpbGVzPy5bMF07YyYmKGNvbnNvbGUubG9nKCJJbWFnZUJsb2NrSGFuZGxlcjogRmlsZSBzZWxlY3RlZDoiLGMubmFtZSksYXdhaXQgdGhpcy5oYW5kbGVGaWxlVXBsb2FkKGMsYSxyKSl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixsPT57bC5wcmV2ZW50RGVmYXVsdCgpLGwuc3RvcFByb3BhZ2F0aW9uKCksYS5tZXRhZGF0YT8udXJsfHxpLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpfSksaS5hZGRFdmVudExpc3RlbmVyKCJkcmFnbGVhdmUiLGw9PntsLnByZXZlbnREZWZhdWx0KCksbC5zdG9wUHJvcGFnYXRpb24oKSxpLmNsYXNzTGlzdC5yZW1vdmUoImRyYWctb3ZlciIpfSksaS5hZGRFdmVudExpc3RlbmVyKCJkcm9wIixhc3luYyBsPT57bC5wcmV2ZW50RGVmYXVsdCgpLGwuc3RvcFByb3BhZ2F0aW9uKCksaS5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTtsZXQgZj1sLmRhdGFUcmFuc2Zlcj8uZmlsZXNbMF07ZiYmZi50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpJiYhYS5tZXRhZGF0YT8udXJsJiZhd2FpdCB0aGlzLmhhbmRsZUZpbGVVcGxvYWQoZixhLHIpfSksaS5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9PnIub25Gb2N1cygpKSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT5yLm9uQmx1cigpKSxpLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGw9PntpZigobC5rZXk9PT0iRGVsZXRlInx8bC5rZXk9PT0iQmFja3NwYWNlIikmJmEubWV0YWRhdGE/LnVybCl7YS5tZXRhZGF0YS51cmw9dm9pZCAwLGEubWV0YWRhdGEubG9hZGluZz0hMSxhLmNvbnRlbnQ9IiIsci5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKTtyZXR1cm59ci5vbktleURvd24obCl9KX1hc3luYyBoYW5kbGVGaWxlVXBsb2FkKGUsYSxyKXtpZihjb25zb2xlLmxvZygiSW1hZ2VCbG9ja0hhbmRsZXI6IFN0YXJ0aW5nIGZpbGUgdXBsb2FkIix7ZmlsZU5hbWU6ZS5uYW1lLGZpbGVTaXplOmUuc2l6ZSxibG9ja0lkOmEuaWR9KSwhZS50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpKXtjb25zb2xlLmVycm9yKCJJbnZhbGlkIGZpbGUgdHlwZToiLGUudHlwZSk7cmV0dXJufWxldCBpPTEwKjEwMjQqMTAyNDtpZihlLnNpemU+aSl7Y29uc29sZS5lcnJvcigiRmlsZSB0b28gbGFyZ2UuIE1heGltdW0gc2l6ZSBpcyAxME1CIik7cmV0dXJufWEubWV0YWRhdGF8fChhLm1ldGFkYXRhPXt9KSxhLm1ldGFkYXRhLmxvYWRpbmc9ITAsYS5tZXRhZGF0YS5maWxlTmFtZT1lLm5hbWUsYS5tZXRhZGF0YS5maWxlU2l6ZT1lLnNpemUsYS5tZXRhZGF0YS5taW1lVHlwZT1lLnR5cGUsY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBTZXQgbG9hZGluZyBzdGF0ZSwgcmVxdWVzdGluZyB1cGRhdGUiKSxyLm9uUmVxdWVzdFVwZGF0ZT8uKCk7dHJ5e2xldCBvPWF3YWl0IHRoaXMuZmlsZVRvRGF0YVVybChlKTthLm1ldGFkYXRhLnVybD1vLGEubWV0YWRhdGEubG9hZGluZz0hMTtsZXQgcz1lLm5hbWUucmVwbGFjZSgvXC5bXi8uXSskLywiIik7YS5jb250ZW50PXMsY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBVcGxvYWQgY29tcGxldGUsIHJlcXVlc3RpbmcgdXBkYXRlIix7aGFzVXJsOiEhYS5tZXRhZGF0YS51cmwsdXJsTGVuZ3RoOm8ubGVuZ3RoLGFsdFRleHQ6YS5jb250ZW50fSksci5vblJlcXVlc3RVcGRhdGU/LigpfWNhdGNoKG8pe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGxvYWQgaW1hZ2U6IixvKSxhLm1ldGFkYXRhLmxvYWRpbmc9ITEsci5vblJlcXVlc3RVcGRhdGU/LigpfX1maWxlVG9EYXRhVXJsKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoYSxyKT0+e2xldCBpPW5ldyBGaWxlUmVhZGVyO2kub25sb2FkPW89PntsZXQgcz1vLnRhcmdldD8ucmVzdWx0O3R5cGVvZiBzPT0ic3RyaW5nIj9hKHMpOnIobmV3IEVycm9yKCJGYWlsZWQgdG8gcmVhZCBmaWxlIikpfSxpLm9uZXJyb3I9cixpLnJlYWRBc0RhdGFVUkwoZSl9KX1lc2NhcGVIdG1sKGUpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLnRleHRDb250ZW50PWUsYS5pbm5lckhUTUx9Z2V0Q29udGVudChlKXtyZXR1cm4gdGhpcy5nZXRCbG9ja0Zyb21FbGVtZW50KGUpPy5jb250ZW50fHwiIn1zZXRDb250ZW50KGUsYSl7bGV0IHI9dGhpcy5nZXRCbG9ja0Zyb21FbGVtZW50KGUpO3ImJihyLmNvbnRlbnQ9YSl9Z2V0QmxvY2tGcm9tRWxlbWVudChlKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1ibG9jay1jb250YWluZXIiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7cmV0dXJuIHI/e2lkOnIsdHlwZToiaW1hZ2UiLGNvbnRlbnQ6IiIsbWV0YWRhdGE6e319Om51bGx9Z2V0Q3Vyc29yUG9zaXRpb24oZSl7cmV0dXJuIG51bGx9c2V0Q3Vyc29yVG9TdGFydChlKXt0aGlzLmZvY3VzKGUpfXNldEN1cnNvclRvRW5kKGUpe3RoaXMuZm9jdXMoZSl9Zm9jdXMoZSl7ZS5xdWVyeVNlbGVjdG9yKCIuaW1hZ2UtYmxvY2stY29udGFpbmVyIik/LmZvY3VzKCl9Zm9jdXNXaXRoQ3Vyc29yKGUsYT0iZW5kIil7dGhpcy5mb2N1cyhlKX1nZXRTcGxpdENvbnRlbnQoZSl7cmV0dXJuIG51bGx9Z2V0U3R5bGVzKCl7cmV0dXJuYAogICAgICAvKiBJbWFnZSBCbG9jayBDb250YWluZXIgKi8KICAgICAgLmltYWdlLWJsb2NrLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMTJweCAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICAgIAogICAgICAuaW1hZ2UtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtwLmJkVGhlbWUoIiM2MzY2ZjEiLCIjODE4Y2Y4Iil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBVcGxvYWQgUGxhY2Vob2xkZXIgKi8KICAgICAgLmltYWdlLXVwbG9hZC1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNDhweCAyNHB4OwogICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmFmYWZhIiwiIzBhMGEwYSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmltYWdlLWJsb2NrLWNvbnRhaW5lcjpob3ZlciAuaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCIjOWNhM2FmIiwiIzZiNzI4MCIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y5ZmFmYiIsIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIuZHJhZy1vdmVyIC5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiM2MzY2ZjEiLCIjODE4Y2Y4Iil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZWZmNmZmIiwiIzFlMWI0YiIpfTsKICAgICAgfQogICAgICAKICAgICAgLnVwbG9hZC1pY29uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzljYTNhZiIsIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC51cGxvYWQtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzc0MTUxIiwiI2U1ZTdlYiIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC51cGxvYWQtaGludCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzljYTNhZiIsIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEltYWdlIENvbnRhaW5lciAqLwogICAgICAuaW1hZ2UtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWluLWhlaWdodDogMjAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmOWZhZmIiLCIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuaW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIExvYWRpbmcgU3RhdGUgKi8KICAgICAgLmltYWdlLWxvYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQ4cHggMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZhZmFmYSIsIiMwYTBhMGEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtwLmJkVGhlbWUoIiM2MzY2ZjEiLCIjODE4Y2Y4Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQogICAgICAKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQogICAgICAKICAgICAgLmxvYWRpbmctdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzZiNzI4MCIsIiM5Y2EzYWYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEZpbGUgaW5wdXQgaGlkZGVuICovCiAgICAgIC5pbWFnZS1maWxlLWlucHV0IHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGB9fTtmZSgpO3ZhciBFST1jbGFzcyBleHRlbmRzIHUxe3R5cGU9InlvdXR1YmUiO3JlbmRlcihlLGEpe2xldCByPWUubWV0YWRhdGE/LnZpZGVvSWQsaT1lLm1ldGFkYXRhPy51cmx8fCIiO3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0ieW91dHViZS1ibG9jay1jb250YWluZXIke2E/IiBzZWxlY3RlZCI6IiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgICAgIGRhdGEtaGFzLXZpZGVvPSIkeyEhcn0iPgogICAgICAgICR7cj90aGlzLnJlbmRlclZpZGVvKHIpOnRoaXMucmVuZGVyUGxhY2Vob2xkZXIoaSl9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJQbGFjZWhvbGRlcihlKXtyZXR1cm5gCiAgICAgIDxkaXYgY2xhc3M9InlvdXR1YmUtcGxhY2Vob2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLWljb24iPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYxNSAzLjE4NGMtMy42MDQtLjI0Ni0xMS42MzEtLjI0NS0xNS4yMyAwLTMuODk3LjI2Ni00LjM1NiAyLjYyLTQuMzg1IDguODE2LjAyOSA2LjE4NS40ODQgOC41NDkgNC4zODUgOC44MTYgMy42LjI0NSAxMS42MjYuMjQ2IDE1LjIzIDAgMy44OTctLjI2NiA0LjM1Ni0yLjYyIDQuMzg1LTguODE2LS4wMjktNi4xODUtLjQ4NC04LjU0OS00LjM4NS04LjgxNnptLTEwLjYxNSAxMi44MTZ2LThsOCAzLjk5My04IDQuMDA3eiIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXItdGV4dCI+RW50ZXIgWW91VHViZSBVUkw8L2Rpdj4KICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiAKICAgICAgICAgICAgICAgY2xhc3M9InlvdXR1YmUtdXJsLWlucHV0IiAKICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8veW91dHViZS5jb20vd2F0Y2g/dj0uLi4iIAogICAgICAgICAgICAgICB2YWx1ZT0iJHt0aGlzLmVzY2FwZUh0bWwoZSl9IiAvPgogICAgICAgIDxidXR0b24gY2xhc3M9InlvdXR1YmUtZW1iZWQtYnRuIj5FbWJlZCBWaWRlbzwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyVmlkZW8oZSl7cmV0dXJuYAogICAgICA8ZGl2IGNsYXNzPSJ5b3V0dWJlLWNvbnRhaW5lciI+CiAgICAgICAgPGlmcmFtZSAKICAgICAgICAgIHNyYz0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHtlfSIKICAgICAgICAgIGZyYW1lYm9yZGVyPSIwIgogICAgICAgICAgYWxsb3c9ImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmUiCiAgICAgICAgICBhbGxvd2Z1bGxzY3JlZW4KICAgICAgICA+PC9pZnJhbWU+CiAgICAgIDwvZGl2PgogICAgYH1zZXR1cChlLGEscil7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKTtpZighaSlyZXR1cm47aWYoYS5tZXRhZGF0YT8udmlkZW9JZCl7aS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGkuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5yLm9uRm9jdXMoKSksaS5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+ci5vbkJsdXIoKSksaS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixsPT57KGwua2V5PT09IkRlbGV0ZSJ8fGwua2V5PT09IkJhY2tzcGFjZSIpJiZsLnByZXZlbnREZWZhdWx0KCksci5vbktleURvd24obCl9KTtyZXR1cm59bGV0IG89ZS5xdWVyeVNlbGVjdG9yKCIueW91dHViZS11cmwtaW5wdXQiKSxzPWUucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtZW1iZWQtYnRuIik7IW98fCFzfHwoby5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9PnIub25Gb2N1cygpKSxvLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT5yLm9uQmx1cigpKSxzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3RoaXMuZW1iZWRWaWRlbyhvLnZhbHVlLGEscil9KSxvLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGw9PntsLmtleT09PSJFbnRlciI/KGwucHJldmVudERlZmF1bHQoKSx0aGlzLmVtYmVkVmlkZW8oby52YWx1ZSxhLHIpKTpsLmtleT09PSJFc2NhcGUiJiYobC5wcmV2ZW50RGVmYXVsdCgpLG8uYmx1cigpKX0pLG8uYWRkRXZlbnRMaXN0ZW5lcigicGFzdGUiLGw9PntzZXRUaW1lb3V0KCgpPT57bGV0IGY9by52YWx1ZTt0aGlzLmV4dHJhY3RZb3VUdWJlVmlkZW9JZChmKSYmdGhpcy5lbWJlZFZpZGVvKGYsYSxyKX0sMCl9KSxvLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoKT0+e2EubWV0YWRhdGF8fChhLm1ldGFkYXRhPXt9KSxhLm1ldGFkYXRhLnVybD1vLnZhbHVlfSkpfWVtYmVkVmlkZW8oZSxhLHIpe2xldCBpPXRoaXMuZXh0cmFjdFlvdVR1YmVWaWRlb0lkKGUpO2lmKCFpKXtjb25zb2xlLmVycm9yKCJJbnZhbGlkIFlvdVR1YmUgVVJMIik7cmV0dXJufWEubWV0YWRhdGF8fChhLm1ldGFkYXRhPXt9KSxhLm1ldGFkYXRhLnZpZGVvSWQ9aSxhLm1ldGFkYXRhLnVybD1lLGEuY29udGVudD1gWW91VHViZSBWaWRlbzogJHtpfWAsci5vblJlcXVlc3RVcGRhdGU/LigpfWV4dHJhY3RZb3VUdWJlVmlkZW9JZChlKXtsZXQgYT1bLyg/OnlvdXR1YmVcLmNvbVwvKD86W15cL10rXC8uK1wvfCg/OnZ8ZSg/Om1iZWQpPylcL3wuKls/Jl12PSl8eW91dHVcLmJlXC8pKFteIiY/XC8gXXsxMX0pLywveW91dHViZVwuY29tXC9lbWJlZFwvKFteIiY/XC8gXXsxMX0pLywveW91dHViZVwuY29tXC93YXRjaFw/dj0oW14iJj9cLyBdezExfSkvLC95b3V0dVwuYmVcLyhbXiImP1wvIF17MTF9KS9dO2ZvcihsZXQgciBvZiBhKXtsZXQgaT1lLm1hdGNoKHIpO2lmKGkpcmV0dXJuIGlbMV19cmV0dXJuIG51bGx9ZXNjYXBlSHRtbChlKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS50ZXh0Q29udGVudD1lLGEuaW5uZXJIVE1MfWdldENvbnRlbnQoZSl7cmV0dXJuIHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlKT8uY29udGVudHx8IiJ9c2V0Q29udGVudChlLGEpe2xldCByPXRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlKTtyJiYoci5jb250ZW50PWEpfWdldEJsb2NrRnJvbUVsZW1lbnQoZSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7cmV0dXJuIHI/e2lkOnIsdHlwZToieW91dHViZSIsY29udGVudDoiIixtZXRhZGF0YTp7fX06bnVsbH1nZXRDdXJzb3JQb3NpdGlvbihlKXtyZXR1cm4gbnVsbH1zZXRDdXJzb3JUb1N0YXJ0KGUpe3RoaXMuZm9jdXMoZSl9c2V0Q3Vyc29yVG9FbmQoZSl7dGhpcy5mb2N1cyhlKX1mb2N1cyhlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi55b3V0dWJlLWJsb2NrLWNvbnRhaW5lciIpLHI9ZS5xdWVyeVNlbGVjdG9yKCIueW91dHViZS11cmwtaW5wdXQiKTtyP3IuZm9jdXMoKTphJiZhLmZvY3VzKCl9Zm9jdXNXaXRoQ3Vyc29yKGUsYT0iZW5kIil7dGhpcy5mb2N1cyhlKX1nZXRTcGxpdENvbnRlbnQoZSl7cmV0dXJuIG51bGx9Z2V0U3R5bGVzKCl7cmV0dXJuYAogICAgICAvKiBZb3VUdWJlIEJsb2NrIENvbnRhaW5lciAqLwogICAgICAueW91dHViZS1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke3AuYmRUaGVtZSgiIzYzNjZmMSIsIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFlvdVR1YmUgUGxhY2Vob2xkZXIgKi8KICAgICAgLnlvdXR1YmUtcGxhY2Vob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDMycHggMjRweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmFmYWZhIiwiIzBhMGEwYSIpfTsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5wbGFjZWhvbGRlci1pY29uIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiNkYzI2MjYiLCIjZWY0NDQ0Iil9OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQogICAgICAKICAgICAgLnBsYWNlaG9sZGVyLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzM3NDE1MSIsIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiA0MDBweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzExMTgyNyIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMxMTE4MjciLCIjZjlmYWZiIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiIzZiNzI4MCIsIiM5Y2EzYWYiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMWYyOTM3Iil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS11cmwtaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1lbWJlZC1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjMTExODI3IiwiI2Y5ZmFmYiIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiNmOWZhZmIiLCIjMTExODI3Iil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1lbWJlZC1idG46aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjMzc0MTUxIiwiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtZW1iZWQtYnRuOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQogICAgICAKICAgICAgLyogWW91VHViZSBDb250YWluZXIgKi8KICAgICAgLnlvdXR1YmUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTsgLyogMTY6OSBhc3BlY3QgcmF0aW8gKi8KICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzAwMDAwMCIsIiMwMDAwMDAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLWNvbnRhaW5lciBpZnJhbWUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgfQogICAgYH19O2ZlKCk7dmFyIE5JPWNsYXNzIGV4dGVuZHMgdTF7dHlwZT0iYXR0YWNobWVudCI7cmVuZGVyKGUsYSl7bGV0IHI9ZS5tZXRhZGF0YT8uZmlsZXN8fFtdO3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1ibG9jay1jb250YWluZXIke2E/IiBzZWxlY3RlZCI6IiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgICAgIHRhYmluZGV4PSIwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LWhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LWljb24iPlx1ezFGNENFfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC10aXRsZSI+RmlsZSBBdHRhY2htZW50czwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtbGlzdCI+CiAgICAgICAgICAke3IubGVuZ3RoPjA/dGhpcy5yZW5kZXJGaWxlcyhyKTp0aGlzLnJlbmRlclBsYWNlaG9sZGVyKCl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIAogICAgICAgICAgICAgICBjbGFzcz0iYXR0YWNobWVudC1maWxlLWlucHV0IiAKICAgICAgICAgICAgICAgbXVsdGlwbGUgCiAgICAgICAgICAgICAgIHN0eWxlPSJkaXNwbGF5OiBub25lOyIgLz4KICAgICAgICAke3IubGVuZ3RoPjA/JzxidXR0b24gY2xhc3M9ImFkZC1tb3JlLWZpbGVzIj5BZGQgTW9yZSBGaWxlczwvYnV0dG9uPic6IiJ9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJQbGFjZWhvbGRlcigpe3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1wbGFjZWhvbGRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXItdGV4dCI+Q2xpY2sgdG8gYWRkIGZpbGVzPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXItaGludCI+b3IgZHJhZyBhbmQgZHJvcDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyRmlsZXMoZSl7cmV0dXJuIGUubWFwKGE9PmAKICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1pdGVtIiBkYXRhLWZpbGUtaWQ9IiR7YS5pZH0iPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtaWNvbiI+JHt0aGlzLmdldEZpbGVJY29uKGEudHlwZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1pbmZvIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtbmFtZSI+JHt0aGlzLmVzY2FwZUh0bWwoYS5uYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtc2l6ZSI+JHt0aGlzLmZvcm1hdEZpbGVTaXplKGEuc2l6ZSl9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0icmVtb3ZlLWZpbGUiIGRhdGEtZmlsZS1pZD0iJHthLmlkfSI+XHhENzwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIGApLmpvaW4oIiIpfXNldHVwKGUsYSxyKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5hdHRhY2htZW50LWJsb2NrLWNvbnRhaW5lciIpLG89ZS5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1maWxlLWlucHV0Iik7aWYoIWl8fCFvKXtjb25zb2xlLmVycm9yKCJBdHRhY2htZW50QmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCByZXF1aXJlZCBlbGVtZW50cyIpO3JldHVybn1hLm1ldGFkYXRhfHwoYS5tZXRhZGF0YT17fSksYS5tZXRhZGF0YS5maWxlc3x8KGEubWV0YWRhdGEuZmlsZXM9W10pO2xldCBzPWkucXVlcnlTZWxlY3RvcigiLmF0dGFjaG1lbnQtcGxhY2Vob2xkZXIiKTtzJiZzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmPT57Zi5wcmV2ZW50RGVmYXVsdCgpLGYuc3RvcFByb3BhZ2F0aW9uKCksby5jbGljaygpfSk7bGV0IGw9aS5xdWVyeVNlbGVjdG9yKCIuYWRkLW1vcmUtZmlsZXMiKTtsJiZsLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmPT57Zi5wcmV2ZW50RGVmYXVsdCgpLGYuc3RvcFByb3BhZ2F0aW9uKCksby5jbGljaygpfSksby5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGFzeW5jIGY9PntsZXQgYz1mLnRhcmdldCx1PWMuZmlsZXM7dSYmdS5sZW5ndGg+MCYmKGF3YWl0IHRoaXMuaGFuZGxlRmlsZUF0dGFjaG1lbnRzKHUsYSxyKSxjLnZhbHVlPSIiKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGY9PntsZXQgYz1mLnRhcmdldDtpZihjLmNsYXNzTGlzdC5jb250YWlucygicmVtb3ZlLWZpbGUiKSl7Zi5wcmV2ZW50RGVmYXVsdCgpLGYuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IHU9Yy5nZXRBdHRyaWJ1dGUoImRhdGEtZmlsZS1pZCIpO3UmJnRoaXMucmVtb3ZlRmlsZSh1LGEscil9fSksaS5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsZj0+e2YucHJldmVudERlZmF1bHQoKSxmLnN0b3BQcm9wYWdhdGlvbigpLGkuY2xhc3NMaXN0LmFkZCgiZHJhZy1vdmVyIil9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsZj0+e2YucHJldmVudERlZmF1bHQoKSxmLnN0b3BQcm9wYWdhdGlvbigpLGkuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZy1vdmVyIil9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLGFzeW5jIGY9PntmLnByZXZlbnREZWZhdWx0KCksZi5zdG9wUHJvcGFnYXRpb24oKSxpLmNsYXNzTGlzdC5yZW1vdmUoImRyYWctb3ZlciIpO2xldCBjPWYuZGF0YVRyYW5zZmVyPy5maWxlcztjJiZjLmxlbmd0aD4wJiZhd2FpdCB0aGlzLmhhbmRsZUZpbGVBdHRhY2htZW50cyhjLGEscil9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+ci5vbkZvY3VzKCkpLGkuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9PnIub25CbHVyKCkpLGkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZj0+e2lmKChmLmtleT09PSJEZWxldGUifHxmLmtleT09PSJCYWNrc3BhY2UiKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWkmJmEubWV0YWRhdGE/LmZpbGVzPy5sZW5ndGg+MCl7Zi5wcmV2ZW50RGVmYXVsdCgpLGEubWV0YWRhdGEuZmlsZXM9W10sci5vblJlcXVlc3RVcGRhdGU/LigpO3JldHVybn1yLm9uS2V5RG93bihmKX0pfWFzeW5jIGhhbmRsZUZpbGVBdHRhY2htZW50cyhlLGEscil7YS5tZXRhZGF0YXx8KGEubWV0YWRhdGE9e30pLGEubWV0YWRhdGEuZmlsZXN8fChhLm1ldGFkYXRhLmZpbGVzPVtdKTtmb3IobGV0IGkgb2YgQXJyYXkuZnJvbShlKSl0cnl7bGV0IG89YXdhaXQgdGhpcy5maWxlVG9EYXRhVXJsKGkpLHM9e2lkOnRoaXMuZ2VuZXJhdGVJZCgpLG5hbWU6aS5uYW1lLHNpemU6aS5zaXplLHR5cGU6aS50eXBlLGRhdGE6b307YS5tZXRhZGF0YS5maWxlcy5wdXNoKHMpfWNhdGNoKG8pe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBhdHRhY2ggZmlsZToiLGkubmFtZSxvKX1hLmNvbnRlbnQ9YCR7YS5tZXRhZGF0YS5maWxlcy5sZW5ndGh9IGZpbGUke2EubWV0YWRhdGEuZmlsZXMubGVuZ3RoIT09MT8icyI6IiJ9IGF0dGFjaGVkYCxyLm9uUmVxdWVzdFVwZGF0ZT8uKCl9cmVtb3ZlRmlsZShlLGEscil7YS5tZXRhZGF0YT8uZmlsZXMmJihhLm1ldGFkYXRhLmZpbGVzPWEubWV0YWRhdGEuZmlsZXMuZmlsdGVyKGk9PmkuaWQhPT1lKSxhLmNvbnRlbnQ9YS5tZXRhZGF0YS5maWxlcy5sZW5ndGg+MD9gJHthLm1ldGFkYXRhLmZpbGVzLmxlbmd0aH0gZmlsZSR7YS5tZXRhZGF0YS5maWxlcy5sZW5ndGghPT0xPyJzIjoiIn0gYXR0YWNoZWRgOiIiLHIub25SZXF1ZXN0VXBkYXRlPy4oKSl9ZmlsZVRvRGF0YVVybChlKXtyZXR1cm4gbmV3IFByb21pc2UoKGEscik9PntsZXQgaT1uZXcgRmlsZVJlYWRlcjtpLm9ubG9hZD1vPT57bGV0IHM9by50YXJnZXQ/LnJlc3VsdDt0eXBlb2Ygcz09InN0cmluZyI/YShzKTpyKG5ldyBFcnJvcigiRmFpbGVkIHRvIHJlYWQgZmlsZSIpKX0saS5vbmVycm9yPXIsaS5yZWFkQXNEYXRhVVJMKGUpfSl9Z2V0RmlsZUljb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiaW1hZ2UvIik/Ilx1ezFGNUJDfVx1RkUwRiI6ZS5zdGFydHNXaXRoKCJ2aWRlby8iKT8iXHV7MUYzQTV9IjplLnN0YXJ0c1dpdGgoImF1ZGlvLyIpPyJcdXsxRjNCNX0iOmUuaW5jbHVkZXMoInBkZiIpPyJcdXsxRjRDNH0iOmUuaW5jbHVkZXMoInppcCIpfHxlLmluY2x1ZGVzKCJyYXIiKXx8ZS5pbmNsdWRlcygidGFyIik/Ilx1ezFGNUM0fVx1RkUwRiI6ZS5pbmNsdWRlcygic2hlZXQiKT8iXHV7MUY0Q0F9IjplLmluY2x1ZGVzKCJkb2N1bWVudCIpfHxlLmluY2x1ZGVzKCJtc3dvcmQiKT8iXHV7MUY0RER9IjplLmluY2x1ZGVzKCJwcmVzZW50YXRpb24iKT8iXHV7MUY0Q0J9IjplLmluY2x1ZGVzKCJ0ZXh0Iik/Ilx1ezFGNEMzfSI6Ilx1ezFGNEMxfSJ9Zm9ybWF0RmlsZVNpemUoZSl7aWYoZT09PTApcmV0dXJuIjAgQnl0ZXMiO2xldCBhPTEwMjQscj1bIkJ5dGVzIiwiS0IiLCJNQiIsIkdCIl0saT1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGgubG9nKGEpKTtyZXR1cm4gcGFyc2VGbG9hdCgoZS9NYXRoLnBvdyhhLGkpKS50b0ZpeGVkKDIpKSsiICIrcltpXX1nZW5lcmF0ZUlkKCl7cmV0dXJuYGZpbGUtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpfWB9ZXNjYXBlSHRtbChlKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS50ZXh0Q29udGVudD1lLGEuaW5uZXJIVE1MfWdldENvbnRlbnQoZSl7cmV0dXJuIHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlKT8uY29udGVudHx8IiJ9c2V0Q29udGVudChlLGEpe2xldCByPXRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlKTtyJiYoci5jb250ZW50PWEpfWdldEJsb2NrRnJvbUVsZW1lbnQoZSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7cmV0dXJuIHI/e2lkOnIsdHlwZToiYXR0YWNobWVudCIsY29udGVudDoiIixtZXRhZGF0YTp7fX06bnVsbH1nZXRDdXJzb3JQb3NpdGlvbihlKXtyZXR1cm4gbnVsbH1zZXRDdXJzb3JUb1N0YXJ0KGUpe3RoaXMuZm9jdXMoZSl9c2V0Q3Vyc29yVG9FbmQoZSl7dGhpcy5mb2N1cyhlKX1mb2N1cyhlKXtlLnF1ZXJ5U2VsZWN0b3IoIi5hdHRhY2htZW50LWJsb2NrLWNvbnRhaW5lciIpPy5mb2N1cygpfWZvY3VzV2l0aEN1cnNvcihlLGE9ImVuZCIpe3RoaXMuZm9jdXMoZSl9Z2V0U3BsaXRDb250ZW50KGUpe3JldHVybiBudWxsfWdldFN0eWxlcygpe3JldHVybmAKICAgICAgLyogQXR0YWNobWVudCBCbG9jayBDb250YWluZXIgKi8KICAgICAgLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAxMnB4IDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIuZHJhZy1vdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y5ZmFmYiIsIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiIzYzNjZmMSIsIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEhlYWRlciAqLwogICAgICAuYXR0YWNobWVudC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y5ZmFmYiIsIiMwYTBhMGEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzNzQxNTEiLCIjZTVlN2ViIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBGaWxlIExpc3QgKi8KICAgICAgLmF0dGFjaG1lbnQtbGlzdCB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDgwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CiAgICAgIAogICAgICAvKiBQbGFjZWhvbGRlciAqLwogICAgICAuYXR0YWNobWVudC1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LXBsYWNlaG9sZGVyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y5ZmFmYiIsIiMxZjI5MzciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wbGFjZWhvbGRlci10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNmI3MjgwIiwiIzljYTNhZiIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5wbGFjZWhvbGRlci1oaW50IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjOWNhM2FmIiwiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogRmlsZSBJdGVtcyAqLwogICAgICAuYXR0YWNobWVudC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjlmYWZiIiwiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2YzZjRmNiIsIiMzNzQxNTEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQogICAgICAKICAgICAgLmZpbGUtaW5mbyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzExMTgyNyIsIiNmOWZhZmIiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICAgIAogICAgICAuZmlsZS1zaXplIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNmI3MjgwIiwiIzljYTNhZiIpfTsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5yZW1vdmUtZmlsZSB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNmI3MjgwIiwiIzljYTNhZiIpfTsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5yZW1vdmUtZmlsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZWUyZTIiLCIjOTkxYjFiIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiNmY2E1YTUiLCIjZGMyNjI2Iil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiI2RjMjYyNiIsIiNmY2E1YTUiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEFkZCBNb3JlIEZpbGVzIEJ1dHRvbiAqLwogICAgICAuYWRkLW1vcmUtZmlsZXMgewogICAgICAgIG1hcmdpbjogOHB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzM3NDE1MSIsIiNlNWU3ZWIiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICAgIH0KICAgICAgCiAgICAgIC5hZGQtbW9yZS1maWxlczpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmOWZhZmIiLCIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiNkMWQ1ZGIiLCIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIaWRkZW4gZmlsZSBpbnB1dCAqLwogICAgICAuYXR0YWNobWVudC1maWxlLWlucHV0IHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGB9fTtmZSgpO3ZhciBQST1jbGFzcyBleHRlbmRzIHUxe3R5cGU9ImRpdmlkZXIiO3JlbmRlcihlLGEpe3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iYmxvY2sgZGl2aWRlciR7YT8iIHNlbGVjdGVkIjoiIn0iIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iIGRhdGEtYmxvY2stdHlwZT0iJHtlLnR5cGV9IiB0YWJpbmRleD0iMCI+CiAgICAgICAgPGhyPgogICAgICA8L2Rpdj4KICAgIGB9c2V0dXAoZSxhLHIpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLmRpdmlkZXIiKTtpJiYoaS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsbz0+e28uc3RvcFByb3BhZ2F0aW9uKCksaS5mb2N1cygpLHIub25Gb2N1cz8uKCl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+e3Iub25Gb2N1cz8uKCl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT57ci5vbkJsdXI/LigpfSksaS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixvPT57KG8ua2V5PT09IkJhY2tzcGFjZSJ8fG8ua2V5PT09IkRlbGV0ZSIpJiZvLnByZXZlbnREZWZhdWx0KCksci5vbktleURvd24/LihvKX0pKX1nZXRTdHlsZXMoKXtyZXR1cm5gCiAgICAgIC5ibG9jay5kaXZpZGVyIHsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgICBtYXJnaW46IDE2cHggMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmJsb2NrLmRpdmlkZXI6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgwLCAxMDIsIDIwNCwgMC4wNSkiLCJyZ2JhKDc3LCAxNDgsIDI1NSwgMC4wOCkiKX07CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDEwMiwgMjA0LCAwLjIpIiwicmdiYSg3NywgMTQ4LCAyNTUsIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyIGhyIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTBlMGUwIiwiIzMzMyIpfTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIGB9fTtmZSgpO3ZhciBJST1jbGFzcyBleHRlbmRzIHUxe3R5cGU9Im1hcmtkb3duIjtyZW5kZXIoZSxhKXtsZXQgcj1lLm1ldGFkYXRhPy5pc0VkaXRNb2RlPz8hMCxpPWUuY29udGVudHx8IiI7cmV0dXJuYAogICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1ibG9jay1jb250YWluZXIke2E/IiBzZWxlY3RlZCI6IiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgICAgIGRhdGEtZWRpdC1tb2RlPSIke3J9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24taWNvbiI+TVx1MjE5MzwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tdGl0bGUiPk1hcmtkb3duPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtYXJrZG93bi10b2dnbGUtbW9kZSIgdGl0bGU9IiR7cj8iUHJldmlldyI6IkVkaXQifSI+CiAgICAgICAgICAgICR7cj8iXHV7MUY0NDF9XHVGRTBGIjoiXHUyNzBGXHVGRTBGIn0KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWNvbnRlbnQiPgogICAgICAgICAgJHtyP3RoaXMucmVuZGVyRWRpdG9yKGkpOnRoaXMucmVuZGVyUHJldmlldyhpKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlckVkaXRvcihlKXtyZXR1cm5gCiAgICAgIDx0ZXh0YXJlYSBjbGFzcz0ibWFya2Rvd24tZWRpdG9yIiAKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJFbnRlciBtYXJrZG93biBjb250ZW50Li4uIgogICAgICAgICAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiPiR7dGhpcy5lc2NhcGVIdG1sKGUpfTwvdGV4dGFyZWE+CiAgICBgfXJlbmRlclByZXZpZXcoZSl7cmV0dXJuYAogICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1wcmV2aWV3Ij4KICAgICAgICAke3RoaXMucGFyc2VNYXJrZG93bihlKXx8JzxkaXYgY2xhc3M9InByZXZpZXctZW1wdHkiPk5vIGNvbnRlbnQgdG8gcHJldmlldzwvZGl2Pid9CiAgICAgIDwvZGl2PgogICAgYH1zZXR1cChlLGEscil7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tYmxvY2stY29udGFpbmVyIiksbz1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi10b2dnbGUtbW9kZSIpO2lmKCFpfHwhbyl7Y29uc29sZS5lcnJvcigiTWFya2Rvd25CbG9ja0hhbmRsZXI6IENvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIGVsZW1lbnRzIik7cmV0dXJufWEubWV0YWRhdGF8fChhLm1ldGFkYXRhPXt9KSxhLm1ldGFkYXRhLmlzRWRpdE1vZGU9PT12b2lkIDAmJihhLm1ldGFkYXRhLmlzRWRpdE1vZGU9ITApLG8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHM9PntpZihzLnByZXZlbnREZWZhdWx0KCkscy5zdG9wUHJvcGFnYXRpb24oKSxhLm1ldGFkYXRhLmlzRWRpdE1vZGUpe2xldCBsPWkucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpO2wmJihhLmNvbnRlbnQ9bC52YWx1ZSl9YS5tZXRhZGF0YS5pc0VkaXRNb2RlPSFhLm1ldGFkYXRhLmlzRWRpdE1vZGUsci5vblJlcXVlc3RVcGRhdGU/LigpfSksYS5tZXRhZGF0YS5pc0VkaXRNb2RlP3RoaXMuc2V0dXBFZGl0b3IoZSxhLHIpOnRoaXMuc2V0dXBQcmV2aWV3KGUsYSxyKX1zZXR1cEVkaXRvcihlLGEscil7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7aSYmKGkuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5yLm9uRm9jdXMoKSksaS5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+ci5vbkJsdXIoKSksaS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKCk9PnthLmNvbnRlbnQ9aS52YWx1ZX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsbz0+e2lmKG8ua2V5PT09IlRhYiIpe28ucHJldmVudERlZmF1bHQoKTtsZXQgcz1pLnNlbGVjdGlvblN0YXJ0LGw9aS5zZWxlY3Rpb25FbmQsZj1pLnZhbHVlO2lmKG8uc2hpZnRLZXkpe2xldCBkPWYuc3Vic3RyaW5nKDAscykubGFzdEluZGV4T2YoYApgKSsxLGg9Zi5zdWJzdHJpbmcoZCxzKTtoLnN0YXJ0c1dpdGgoIiAgIikmJihpLnZhbHVlPWYuc3Vic3RyaW5nKDAsZCkraC5zdWJzdHJpbmcoMikrZi5zdWJzdHJpbmcocyksaS5zZWxlY3Rpb25TdGFydD1pLnNlbGVjdGlvbkVuZD1zLTIpfWVsc2UgaS52YWx1ZT1mLnN1YnN0cmluZygwLHMpKyIgICIrZi5zdWJzdHJpbmcobCksaS5zZWxlY3Rpb25TdGFydD1pLnNlbGVjdGlvbkVuZD1zKzI7YS5jb250ZW50PWkudmFsdWU7cmV0dXJufWlmKChvLmN0cmxLZXl8fG8ubWV0YUtleSkmJm8ua2V5PT09ImIiKXtvLnByZXZlbnREZWZhdWx0KCksdGhpcy53cmFwU2VsZWN0aW9uKGksIioqIiwiKioiKSxhLmNvbnRlbnQ9aS52YWx1ZTtyZXR1cm59aWYoKG8uY3RybEtleXx8by5tZXRhS2V5KSYmby5rZXk9PT0iaSIpe28ucHJldmVudERlZmF1bHQoKSx0aGlzLndyYXBTZWxlY3Rpb24oaSwiXyIsIl8iKSxhLmNvbnRlbnQ9aS52YWx1ZTtyZXR1cm59aWYoKG8uY3RybEtleXx8by5tZXRhS2V5KSYmby5rZXk9PT0iayIpe28ucHJldmVudERlZmF1bHQoKSx0aGlzLmluc2VydExpbmsoaSksYS5jb250ZW50PWkudmFsdWU7cmV0dXJufXIub25LZXlEb3duKG8pfSksdGhpcy5hdXRvUmVzaXplKGkpLGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCgpPT50aGlzLmF1dG9SZXNpemUoaSkpKX1zZXR1cFByZXZpZXcoZSxhLHIpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lciIpLG89ZS5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tcHJldmlldyIpOyFpfHwhb3x8KG8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSxvLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+ci5vbkZvY3VzKCkpLG8uYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9PnIub25CbHVyKCkpLG8uYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscz0+e2lmKHMua2V5PT09IkVudGVyIiYmIXMuc2hpZnRLZXkpe3MucHJldmVudERlZmF1bHQoKSxhLm1ldGFkYXRhLmlzRWRpdE1vZGU9ITAsci5vblJlcXVlc3RVcGRhdGU/LigpO3JldHVybn1yLm9uS2V5RG93bihzKX0pKX13cmFwU2VsZWN0aW9uKGUsYSxyKXtsZXQgaT1lLnNlbGVjdGlvblN0YXJ0LG89ZS5zZWxlY3Rpb25FbmQscz1lLnZhbHVlLnN1YnN0cmluZyhpLG8pLGw9YSsoc3x8InRleHQiKStyO2UudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxpKStsK2UudmFsdWUuc3Vic3RyaW5nKG8pLHM/KGUuc2VsZWN0aW9uU3RhcnQ9aSxlLnNlbGVjdGlvbkVuZD1pK2wubGVuZ3RoKTooZS5zZWxlY3Rpb25TdGFydD1pK2EubGVuZ3RoLGUuc2VsZWN0aW9uRW5kPWkrYS5sZW5ndGgrNCksZS5mb2N1cygpfWluc2VydExpbmsoZSl7bGV0IGE9ZS5zZWxlY3Rpb25TdGFydCxyPWUuc2VsZWN0aW9uRW5kLG89ZS52YWx1ZS5zdWJzdHJpbmcoYSxyKXx8ImxpbmsgdGV4dCIscz1gWyR7b31dKHVybClgO2UudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxhKStzK2UudmFsdWUuc3Vic3RyaW5nKHIpLGUuc2VsZWN0aW9uU3RhcnQ9YStvLmxlbmd0aCszLGUuc2VsZWN0aW9uRW5kPWErby5sZW5ndGgrNixlLmZvY3VzKCl9YXV0b1Jlc2l6ZShlKXtlLnN0eWxlLmhlaWdodD0iYXV0byIsZS5zdHlsZS5oZWlnaHQ9ZS5zY3JvbGxIZWlnaHQrInB4In1wYXJzZU1hcmtkb3duKGUpe2xldCBhPXRoaXMuZXNjYXBlSHRtbChlKTtyZXR1cm4gYT1hLnJlcGxhY2UoL14jIyMgKC4rKSQvZ20sIjxoMz4kMTwvaDM+IiksYT1hLnJlcGxhY2UoL14jIyAoLispJC9nbSwiPGgyPiQxPC9oMj4iKSxhPWEucmVwbGFjZSgvXiMgKC4rKSQvZ20sIjxoMT4kMTwvaDE+IiksYT1hLnJlcGxhY2UoL1wqXCooLis/KVwqXCovZywiPHN0cm9uZz4kMTwvc3Ryb25nPiIpLGE9YS5yZXBsYWNlKC9fXyguKz8pX18vZywiPHN0cm9uZz4kMTwvc3Ryb25nPiIpLGE9YS5yZXBsYWNlKC9cKiguKz8pXCovZywiPGVtPiQxPC9lbT4iKSxhPWEucmVwbGFjZSgvXyguKz8pXy9nLCI8ZW0+JDE8L2VtPiIpLGE9YS5yZXBsYWNlKC9gYGAoW1xzXFNdKj8pYGBgL2csIjxwcmU+PGNvZGU+JDE8L2NvZGU+PC9wcmU+IiksYT1hLnJlcGxhY2UoL2AoLis/KWAvZywiPGNvZGU+JDE8L2NvZGU+IiksYT1hLnJlcGxhY2UoL1xbKFteXF1dKylcXVwoKFteKV0rKVwpL2csJzxhIGhyZWY9IiQyIj4kMTwvYT4nKSxhPWEucmVwbGFjZSgvXlwqICguKykkL2dtLCI8bGk+JDE8L2xpPiIpLGE9YS5yZXBsYWNlKC9eLSAoLispJC9nbSwiPGxpPiQxPC9saT4iKSxhPWEucmVwbGFjZSgvXlxkK1wuICguKykkL2dtLCI8bGk+JDE8L2xpPiIpLGE9YS5yZXBsYWNlKC8oPGxpPi4qPFwvbGk+XG4/KSsvZyxyPT4iPHVsPiIrcisiPC91bD4iKSxhPWEucmVwbGFjZSgvXG5cbi9nLCI8L3A+PHA+IiksYT0iPHA+IithKyI8L3A+IixhPWEucmVwbGFjZSgvPHA+PFwvcD4vZywiIiksYT1hLnJlcGxhY2UoLzxwPig8aFsxLTNdPikvZywiJDEiKSxhPWEucmVwbGFjZSgvKDxcL2hbMS0zXT4pPFwvcD4vZywiJDEiKSxhPWEucmVwbGFjZSgvPHA+KDx1bD4pL2csIiQxIiksYT1hLnJlcGxhY2UoLyg8XC91bD4pPFwvcD4vZywiJDEiKSxhPWEucmVwbGFjZSgvPHA+KDxwcmU+KS9nLCIkMSIpLGE9YS5yZXBsYWNlKC8oPFwvcHJlPik8XC9wPi9nLCIkMSIpLGF9ZXNjYXBlSHRtbChlKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS50ZXh0Q29udGVudD1lLGEuaW5uZXJIVE1MfWdldENvbnRlbnQoZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7aWYoYSlyZXR1cm4gYS52YWx1ZTtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1ibG9jay1jb250YWluZXIiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7cmV0dXJuIiJ9c2V0Q29udGVudChlLGEpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpO3ImJihyLnZhbHVlPWEsdGhpcy5hdXRvUmVzaXplKHIpKX1nZXRDdXJzb3JQb3NpdGlvbihlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTtyZXR1cm4gYT9hLnNlbGVjdGlvblN0YXJ0Om51bGx9c2V0Q3Vyc29yVG9TdGFydChlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTthPyhhLnNlbGVjdGlvblN0YXJ0PWEuc2VsZWN0aW9uRW5kPTAsYS5mb2N1cygpKTp0aGlzLmZvY3VzKGUpfXNldEN1cnNvclRvRW5kKGUpe2xldCBhPWUucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpO2lmKGEpe2xldCByPWEudmFsdWUubGVuZ3RoO2Euc2VsZWN0aW9uU3RhcnQ9YS5zZWxlY3Rpb25FbmQ9cixhLmZvY3VzKCl9ZWxzZSB0aGlzLmZvY3VzKGUpfWZvY3VzKGUpe2xldCBhPWUucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpO2E/YS5mb2N1cygpOmUucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLXByZXZpZXciKT8uZm9jdXMoKX1mb2N1c1dpdGhDdXJzb3IoZSxhPSJlbmQiKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTtyP2E9PT0ic3RhcnQiP3RoaXMuc2V0Q3Vyc29yVG9TdGFydChlKTphPT09ImVuZCI/dGhpcy5zZXRDdXJzb3JUb0VuZChlKTp0eXBlb2YgYT09Im51bWJlciImJihyLnNlbGVjdGlvblN0YXJ0PXIuc2VsZWN0aW9uRW5kPWEsci5mb2N1cygpKTp0aGlzLmZvY3VzKGUpfWdldFNwbGl0Q29udGVudChlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTtpZighYSlyZXR1cm4gbnVsbDtsZXQgcj1hLnNlbGVjdGlvblN0YXJ0O3JldHVybntiZWZvcmU6YS52YWx1ZS5zdWJzdHJpbmcoMCxyKSxhZnRlcjphLnZhbHVlLnN1YnN0cmluZyhyKX19Z2V0U3R5bGVzKCl7cmV0dXJuYAogICAgICAvKiBNYXJrZG93biBCbG9jayBDb250YWluZXIgKi8KICAgICAgLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMTJweCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgKi8KICAgICAgLm1hcmtkb3duLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmOWZhZmIiLCIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24taWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tdGl0bGUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzc0MTUxIiwiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXRvZ2dsZS1tb2RlIHsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXRvZ2dsZS1tb2RlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2YzZjRmNiIsIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiI2QxZDVkYiIsIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvbnRlbnQgKi8KICAgICAgLm1hcmtkb3duLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogRWRpdG9yICovCiAgICAgIC5tYXJrZG93bi1lZGl0b3IgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgcmVzaXplOiBub25lOwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzFmMjkzNyIsIiNmM2Y0ZjYiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLWVkaXRvcjo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzljYTNhZiIsIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFByZXZpZXcgKi8KICAgICAgLm1hcmtkb3duLXByZXZpZXcgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWluLWhlaWdodDogOTZweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzFmMjkzNyIsIiNmM2Y0ZjYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wcmV2aWV3LWVtcHR5IHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAKICAgICAgLyogTWFya2Rvd24gcHJldmlldyBzdHlsZXMgKi8KICAgICAgLm1hcmtkb3duLXByZXZpZXcgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbjogMTZweCAwIDhweCAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzExMTgyNyIsIiNmOWZhZmIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGgyIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW46IDE0cHggMCA2cHggMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMxMTE4MjciLCIjZjlmYWZiIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBoMyB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luOiAxMnB4IDAgNHB4IDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMTExODI3IiwiI2Y5ZmFmYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgcCB7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgdWwsCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IG9sIHsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgbGkgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjNmNGY2IiwiIzFmMjkzNyIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwcmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjNmNGY2IiwiIzFmMjkzNyIpfTsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IHByZSBjb2RlIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBzdHJvbmcgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMTExODI3IiwiI2Y5ZmFmYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgZW0gewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgYSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjM2I4MmY2IiwiIzYwYTVmYSIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBibG9ja3F1b3RlIHsKICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEycHg7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM2YjcyODAiLCIjOWNhM2FmIil9OwogICAgICB9CiAgICBgfX07ZmUoKTt2YXIgRkk9Y2xhc3MgZXh0ZW5kcyB1MXt0eXBlPSJodG1sIjtyZW5kZXIoZSxhKXtsZXQgcj1lLm1ldGFkYXRhPy5pc0VkaXRNb2RlPz8hMCxpPWUuY29udGVudHx8IiI7cmV0dXJuYAogICAgICA8ZGl2IGNsYXNzPSJodG1sLWJsb2NrLWNvbnRhaW5lciR7YT8iIHNlbGVjdGVkIjoiIn0iIAogICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iCiAgICAgICAgICAgZGF0YS1lZGl0LW1vZGU9IiR7cn0iPgogICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtaWNvbiI+Jmx0Oy8mZ3Q7PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJodG1sLXRpdGxlIj5IVE1MPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJodG1sLXRvZ2dsZS1tb2RlIiB0aXRsZT0iJHtyPyJQcmV2aWV3IjoiRWRpdCJ9Ij4KICAgICAgICAgICAgJHtyPyJcdXsxRjQ0MX1cdUZFMEYiOiJcdTI3MEZcdUZFMEYifQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1jb250ZW50Ij4KICAgICAgICAgICR7cj90aGlzLnJlbmRlckVkaXRvcihpKTp0aGlzLnJlbmRlclByZXZpZXcoaSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJFZGl0b3IoZSl7cmV0dXJuYAogICAgICA8dGV4dGFyZWEgY2xhc3M9Imh0bWwtZWRpdG9yIiAKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJFbnRlciBIVE1MIGNvbnRlbnQuLi4iCiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPSJmYWxzZSI+JHt0aGlzLmVzY2FwZUh0bWwoZSl9PC90ZXh0YXJlYT4KICAgIGB9cmVuZGVyUHJldmlldyhlKXtyZXR1cm5gCiAgICAgIDxkaXYgY2xhc3M9Imh0bWwtcHJldmlldyI+CiAgICAgICAgJHtlfHwnPGRpdiBjbGFzcz0icHJldmlldy1lbXB0eSI+Tm8gY29udGVudCB0byBwcmV2aWV3PC9kaXY+J30KICAgICAgPC9kaXY+CiAgICBgfXNldHVwKGUsYSxyKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWJsb2NrLWNvbnRhaW5lciIpLG89ZS5xdWVyeVNlbGVjdG9yKCIuaHRtbC10b2dnbGUtbW9kZSIpO2lmKCFpfHwhbyl7Y29uc29sZS5lcnJvcigiSHRtbEJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgZWxlbWVudHMiKTtyZXR1cm59YS5tZXRhZGF0YXx8KGEubWV0YWRhdGE9e30pLGEubWV0YWRhdGEuaXNFZGl0TW9kZT09PXZvaWQgMCYmKGEubWV0YWRhdGEuaXNFZGl0TW9kZT0hMCksby5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscz0+e2lmKHMucHJldmVudERlZmF1bHQoKSxzLnN0b3BQcm9wYWdhdGlvbigpLGEubWV0YWRhdGEuaXNFZGl0TW9kZSl7bGV0IGw9aS5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTtsJiYoYS5jb250ZW50PWwudmFsdWUpfWEubWV0YWRhdGEuaXNFZGl0TW9kZT0hYS5tZXRhZGF0YS5pc0VkaXRNb2RlLHIub25SZXF1ZXN0VXBkYXRlPy4oKX0pLGEubWV0YWRhdGEuaXNFZGl0TW9kZT90aGlzLnNldHVwRWRpdG9yKGUsYSxyKTp0aGlzLnNldHVwUHJldmlldyhlLGEscil9c2V0dXBFZGl0b3IoZSxhLHIpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7aSYmKGkuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5yLm9uRm9jdXMoKSksaS5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+ci5vbkJsdXIoKSksaS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKCk9PnthLmNvbnRlbnQ9aS52YWx1ZSx0aGlzLnZhbGlkYXRlSHRtbChpLnZhbHVlKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsbz0+e2lmKG8ua2V5PT09IlRhYiIpe28ucHJldmVudERlZmF1bHQoKTtsZXQgcz1pLnNlbGVjdGlvblN0YXJ0LGw9aS5zZWxlY3Rpb25FbmQsZj1pLnZhbHVlO2lmKG8uc2hpZnRLZXkpe2xldCBkPWYuc3Vic3RyaW5nKDAscykubGFzdEluZGV4T2YoYApgKSsxLGg9Zi5zdWJzdHJpbmcoZCxzKTtoLnN0YXJ0c1dpdGgoIiAgIikmJihpLnZhbHVlPWYuc3Vic3RyaW5nKDAsZCkraC5zdWJzdHJpbmcoMikrZi5zdWJzdHJpbmcocyksaS5zZWxlY3Rpb25TdGFydD1pLnNlbGVjdGlvbkVuZD1zLTIpfWVsc2UgaS52YWx1ZT1mLnN1YnN0cmluZygwLHMpKyIgICIrZi5zdWJzdHJpbmcobCksaS5zZWxlY3Rpb25TdGFydD1pLnNlbGVjdGlvbkVuZD1zKzI7YS5jb250ZW50PWkudmFsdWU7cmV0dXJufWlmKChvLmN0cmxLZXl8fG8ubWV0YUtleSkmJm8ua2V5PT09Ii8iKXtvLnByZXZlbnREZWZhdWx0KCksdGhpcy5hdXRvQ2xvc2VUYWcoaSksYS5jb250ZW50PWkudmFsdWU7cmV0dXJufXIub25LZXlEb3duKG8pfSksdGhpcy5hdXRvUmVzaXplKGkpLGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCgpPT50aGlzLmF1dG9SZXNpemUoaSkpKX1zZXR1cFByZXZpZXcoZSxhLHIpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIiksbz1lLnF1ZXJ5U2VsZWN0b3IoIi5odG1sLXByZXZpZXciKTshaXx8IW98fChvLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksby5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9PnIub25Gb2N1cygpKSxvLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT5yLm9uQmx1cigpKSxvLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHM9PntpZihzLmtleT09PSJFbnRlciImJiFzLnNoaWZ0S2V5KXtzLnByZXZlbnREZWZhdWx0KCksYS5tZXRhZGF0YS5pc0VkaXRNb2RlPSEwLHIub25SZXF1ZXN0VXBkYXRlPy4oKTtyZXR1cm59ci5vbktleURvd24ocyl9KSx0aGlzLnNhbmRib3hDb250ZW50KG8pKX1hdXRvQ2xvc2VUYWcoZSl7bGV0IGE9ZS5zZWxlY3Rpb25TdGFydCxyPWUudmFsdWUsaT1hO2Zvcig7aT4wJiZyW2ktMV0hPT0iPCI7KWktLTtpZihpPjApe2xldCBzPXIuc3Vic3RyaW5nKGksYSkubWF0Y2goL14oXHcrKS8pO2lmKHMpe2xldCBmPWA8LyR7c1sxXX0+YDtlLnZhbHVlPXIuc3Vic3RyaW5nKDAsYSkrIj4iK2Yrci5zdWJzdHJpbmcoYSksZS5zZWxlY3Rpb25TdGFydD1lLnNlbGVjdGlvbkVuZD1hKzF9fX1hdXRvUmVzaXplKGUpe2Uuc3R5bGUuaGVpZ2h0PSJhdXRvIixlLnN0eWxlLmhlaWdodD1lLnNjcm9sbEhlaWdodCsicHgifXZhbGlkYXRlSHRtbChlKXtsZXQgYT1bXSxyPS88XC8/KFthLXpBLVpdW2EtekEtWjAtOV0qKVxiW14+XSo+L2csaTtmb3IoOyhpPXIuZXhlYyhlKSkhPT1udWxsOyl7bGV0IG89aVswXS5zdGFydHNXaXRoKCI8LyIpLHM9aVsxXS50b0xvd2VyQ2FzZSgpO2lmKG8pe2lmKGEubGVuZ3RoPT09MHx8YVthLmxlbmd0aC0xXSE9PXMpcmV0dXJuIGNvbnNvbGUud2FybihgTWlzbWF0Y2hlZCBjbG9zaW5nIHRhZzogJHtzfWApLCExO2EucG9wKCl9ZWxzZSBpWzBdLmVuZHNXaXRoKCIvPiIpfHxhLnB1c2gocyl9cmV0dXJuIGEubGVuZ3RoPjA/KGNvbnNvbGUud2FybihgVW5jbG9zZWQgdGFnczogJHthLmpvaW4oIiwgIil9YCksITEpOiEwfXNhbmRib3hDb250ZW50KGUpe2UucXVlcnlTZWxlY3RvckFsbCgic2NyaXB0IikuZm9yRWFjaChvPT5vLnJlbW92ZSgpKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKS5mb3JFYWNoKG89PntBcnJheS5mcm9tKG8uYXR0cmlidXRlcykuZm9yRWFjaChzPT57cy5uYW1lLnN0YXJ0c1dpdGgoIm9uIikmJm8ucmVtb3ZlQXR0cmlidXRlKHMubmFtZSl9KX0pLGUucXVlcnlTZWxlY3RvckFsbCgiZm9ybSIpLmZvckVhY2gobz0+e28uYWRkRXZlbnRMaXN0ZW5lcigic3VibWl0IixzPT57cy5wcmV2ZW50RGVmYXVsdCgpLHMuc3RvcFByb3BhZ2F0aW9uKCl9KX0pfWVzY2FwZUh0bWwoZSl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGEudGV4dENvbnRlbnQ9ZSxhLmlubmVySFRNTH1nZXRDb250ZW50KGUpe2xldCBhPWUucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7aWYoYSlyZXR1cm4gYS52YWx1ZTtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWJsb2NrLWNvbnRhaW5lciIpPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTtyZXR1cm4iIn1zZXRDb250ZW50KGUsYSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTtyJiYoci52YWx1ZT1hLHRoaXMuYXV0b1Jlc2l6ZShyKSl9Z2V0Q3Vyc29yUG9zaXRpb24oZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTtyZXR1cm4gYT9hLnNlbGVjdGlvblN0YXJ0Om51bGx9c2V0Q3Vyc29yVG9TdGFydChlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpO2E/KGEuc2VsZWN0aW9uU3RhcnQ9YS5zZWxlY3Rpb25FbmQ9MCxhLmZvY3VzKCkpOnRoaXMuZm9jdXMoZSl9c2V0Q3Vyc29yVG9FbmQoZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTtpZihhKXtsZXQgcj1hLnZhbHVlLmxlbmd0aDthLnNlbGVjdGlvblN0YXJ0PWEuc2VsZWN0aW9uRW5kPXIsYS5mb2N1cygpfWVsc2UgdGhpcy5mb2N1cyhlKX1mb2N1cyhlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpO2E/YS5mb2N1cygpOmUucXVlcnlTZWxlY3RvcigiLmh0bWwtcHJldmlldyIpPy5mb2N1cygpfWZvY3VzV2l0aEN1cnNvcihlLGE9ImVuZCIpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7cj9hPT09InN0YXJ0Ij90aGlzLnNldEN1cnNvclRvU3RhcnQoZSk6YT09PSJlbmQiP3RoaXMuc2V0Q3Vyc29yVG9FbmQoZSk6dHlwZW9mIGE9PSJudW1iZXIiJiYoci5zZWxlY3Rpb25TdGFydD1yLnNlbGVjdGlvbkVuZD1hLHIuZm9jdXMoKSk6dGhpcy5mb2N1cyhlKX1nZXRTcGxpdENvbnRlbnQoZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTtpZighYSlyZXR1cm4gbnVsbDtsZXQgcj1hLnNlbGVjdGlvblN0YXJ0O3JldHVybntiZWZvcmU6YS52YWx1ZS5zdWJzdHJpbmcoMCxyKSxhZnRlcjphLnZhbHVlLnN1YnN0cmluZyhyKX19Z2V0U3R5bGVzKCl7cmV0dXJuYAogICAgICAvKiBIVE1MIEJsb2NrIENvbnRhaW5lciAqLwogICAgICAuaHRtbC1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgKi8KICAgICAgLmh0bWwtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y5ZmFmYiIsIiMwYTBhMGEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdGl0bGUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzc0MTUxIiwiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC10b2dnbGUtbW9kZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmM2Y0ZjYiLCIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiNkMWQ1ZGIiLCIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb250ZW50ICovCiAgICAgIC5odG1sLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogRWRpdG9yICovCiAgICAgIC5odG1sLWVkaXRvciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnQ29uc29sYXMnLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMWYyOTM3IiwiI2YzZjRmNiIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1lZGl0b3I6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBQcmV2aWV3ICovCiAgICAgIC5odG1sLXByZXZpZXcgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWluLWhlaWdodDogOTZweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzFmMjkzNyIsIiNmM2Y0ZjYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wcmV2aWV3LWVtcHR5IHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAKICAgICAgLyogU2FuZGJveGVkIEhUTUwgcHJldmlldyBzdHlsZXMgKi8KICAgICAgLmh0bWwtcHJldmlldyAqIHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgaW1nIHsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgYSB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjM2I4MmY2IiwiIzYwYTVmYSIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgYTpob3ZlciB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyB0aCwKICAgICAgLmh0bWwtcHJldmlldyB0ZCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y5ZmFmYiIsIiMxZjI5MzciKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBwcmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjNmNGY2IiwiIzFmMjkzNyIpfTsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmM2Y0ZjYiLCIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgIGB9fTtmdW5jdGlvbiBvbjEoKXtZdC5yZWdpc3RlcigiZGl2aWRlciIsbmV3IFBJKSxZdC5yZWdpc3RlcigicGFyYWdyYXBoIixuZXcgVEkpLFl0LnJlZ2lzdGVyKCJoZWFkaW5nLTEiLG5ldyBjYygiaGVhZGluZy0xIikpLFl0LnJlZ2lzdGVyKCJoZWFkaW5nLTIiLG5ldyBjYygiaGVhZGluZy0yIikpLFl0LnJlZ2lzdGVyKCJoZWFkaW5nLTMiLG5ldyBjYygiaGVhZGluZy0zIikpLFl0LnJlZ2lzdGVyKCJxdW90ZSIsbmV3IF9JKSxZdC5yZWdpc3RlcigiY29kZSIsbmV3IEFJKSxZdC5yZWdpc3RlcigibGlzdCIsbmV3ICRJKSxZdC5yZWdpc3RlcigiaW1hZ2UiLG5ldyBESSksWXQucmVnaXN0ZXIoInlvdXR1YmUiLG5ldyBFSSksWXQucmVnaXN0ZXIoImF0dGFjaG1lbnQiLG5ldyBOSSksWXQucmVnaXN0ZXIoIm1hcmtkb3duIixuZXcgSUkpLFl0LnJlZ2lzdGVyKCJodG1sIixuZXcgRkkpfW9uMSgpO2ZlKCk7dmFyIE1qPWNsYXNze3N0YXRpYyBhc3luYyBzaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGE9bnVsbDtlMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJTZWxlY3QgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UiLGNvbnRlbnQ6TWAKICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmxhbmd1YWdlLWNvbnRhaW5lciB7CiAgICAgICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1ncmlkIHsKICAgICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDEyMHB4LCAxZnIpKTsKICAgICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGFuZ3VhZ2UtYnV0dG9uIHsKICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDhweDsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzc0MTUxIiwiI2U1ZTdlYiIpfTsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGFuZ3VhZ2UtYnV0dG9uOmhvdmVyIHsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y5ZmFmYiIsIiMxZjI5MzciKX07CiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiI2QxZDVkYiIsIiM0YjU1NjMiKX07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmxhbmd1YWdlLWJ1dHRvbi5zZWxlY3RlZCB7CiAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmM2Y0ZjYiLCIjMzc0MTUxIil9OwogICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzExMTgyNyIsIiNmOWZhZmIiKX07CiAgICAgICAgICAgIH0KICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1jb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1ncmlkIj4KICAgICAgICAgICAgICAke3RoaXMuZ2V0TGFuZ3VhZ2VzKCkubWFwKHI9Pk1gCiAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2UtYnV0dG9uICR7YT09PXIudG9Mb3dlckNhc2UoKT8ic2VsZWN0ZWQiOiIifSIgCiAgICAgICAgICAgICAgICAgIEBjbGljaz0iJHsoKT0+e2E9ci50b0xvd2VyQ2FzZSgpO2xldCBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtbW9kYWwiKTtpJiZ0eXBlb2YgaS5kZXN0cm95PT0iZnVuY3Rpb24iJiZpLmRlc3Ryb3koKSxlKGEpfX0iPgogICAgICAgICAgICAgICAgICAke3J9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiQ2FuY2VsIixhY3Rpb246YXN5bmMgcj0+e3IuZGVzdHJveSgpLGUobnVsbCl9fV19KX0pfXN0YXRpYyBhc3luYyBzaG93QmxvY2tTZXR0aW5nc01vZGFsKGUsYSl7bGV0IHI9TWAKICAgICAgPHN0eWxlPgogICAgICAgIC5zZXR0aW5ncy1jb250YWluZXIgewogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB9CiAgICAgICAgLnNldHRpbmdzLXNlY3Rpb24gewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgLnNldHRpbmdzLXNlY3Rpb246bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAuc2V0dGluZ3MtbGFiZWwgewogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzZiNzI4MCIsIiM5Y2EzYWYiKX07CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICB9CiAgICAgICAgLmJsb2NrLXR5cGUtZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTYwcHgsIDFmcikpOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgfQogICAgICAgIC5ibG9jay10eXBlLWJ1dHRvbiB7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzc0MTUxIiwiI2U1ZTdlYiIpfTsKICAgICAgICB9CiAgICAgICAgLmJsb2NrLXR5cGUtYnV0dG9uOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjlmYWZiIiwiIzFmMjkzNyIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiNkMWQ1ZGIiLCIjNGI1NTYzIil9OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmM2Y0ZjYiLCIjMzc0MTUxIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiIzljYTNhZiIsIiM2YjcyODAiKX07CiAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMxMTE4MjciLCIjZjlmYWZiIil9OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1pY29uIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtY29udGFpbmVyIj4KICAgICAgICAke3RoaXMuZ2V0QmxvY2tUeXBlU2VsZWN0b3IoZSxhKX0KICAgICAgICAke2UudHlwZT09PSJjb2RlIj90aGlzLmdldENvZGVCbG9ja1NldHRpbmdzKGUsYSk6IiJ9CiAgICAgIDwvZGl2PgogICAgYDtlMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJCbG9jayBTZXR0aW5ncyIsY29udGVudDpyLG1lbnVPcHRpb25zOlt7bmFtZToiRG9uZSIsYWN0aW9uOmFzeW5jIGk9PntpLmRlc3Ryb3koKX19XX0pfXN0YXRpYyBnZXRDb2RlQmxvY2tTZXR0aW5ncyhlLGEpe2xldCByPWUubWV0YWRhdGE/Lmxhbmd1YWdlfHwiamF2YXNjcmlwdCI7cmV0dXJuIE1gCiAgICAgIDxzdHlsZT4KICAgICAgICAubGFuZ3VhZ2UtZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTAwcHgsIDFmcikpOwogICAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b24gewogICAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMzc0MTUxIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzNzQxNTEiLCIjZTVlN2ViIil9OwogICAgICAgIH0KICAgICAgICAubGFuZ3VhZ2UtYnV0dG9uOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjlmYWZiIiwiIzFmMjkzNyIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiNkMWQ1ZGIiLCIjNGI1NTYzIil9OwogICAgICAgIH0KICAgICAgICAubGFuZ3VhZ2UtYnV0dG9uLnNlbGVjdGVkIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjNmNGY2IiwiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMTExODI3IiwiI2Y5ZmFmYiIpfTsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLWxhYmVsIj5Qcm9ncmFtbWluZyBMYW5ndWFnZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWdyaWQiPgogICAgICAgICAgJHt0aGlzLmdldExhbmd1YWdlcygpLm1hcChpPT5NYAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJsYW5ndWFnZS1idXR0b24gJHtyPT09aS50b0xvd2VyQ2FzZSgpPyJzZWxlY3RlZCI6IiJ9IiAKICAgICAgICAgICAgICBAY2xpY2s9IiR7KCk9PntlLm1ldGFkYXRhfHwoZS5tZXRhZGF0YT17fSksZS5tZXRhZGF0YS5sYW5ndWFnZT1pLnRvTG93ZXJDYXNlKCksYShlKTtsZXQgbz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkZWVzLW1vZGFsIik7byYmdHlwZW9mIG8uZGVzdHJveT09ImZ1bmN0aW9uIiYmby5kZXN0cm95KCl9fSIKICAgICAgICAgICAgICBkYXRhLWxhbmc9IiR7aX0iCiAgICAgICAgICAgID4ke2l9PC9kaXY+CiAgICAgICAgICBgKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXN0YXRpYyBnZXRMYW5ndWFnZXMoKXtyZXR1cm5bLi4ueWpdfXN0YXRpYyBnZXRCbG9ja1R5cGVTZWxlY3RvcihlLGEpe2xldCByPVAxLmdldFNsYXNoTWVudUl0ZW1zKCkuZmlsdGVyKGk9PmkudHlwZSE9PSJkaXZpZGVyIik7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLWxhYmVsIj5CbG9jayBUeXBlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2stdHlwZS1ncmlkIj4KICAgICAgICAgICR7ci5tYXAoaT0+TWAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0iYmxvY2stdHlwZS1idXR0b24gJHtlLnR5cGU9PT1pLnR5cGU/InNlbGVjdGVkIjoiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSIke2FzeW5jIG89PntsZXQgcz1vLmN1cnJlbnRUYXJnZXQsbD1lLnR5cGU7aWYoZS50eXBlPWkudHlwZSxsPT09ImNvZGUiJiZlLnR5cGUhPT0iY29kZSIpZGVsZXRlIGUubWV0YWRhdGE/Lmxhbmd1YWdlO2Vsc2UgaWYobD09PSJsaXN0IiYmZS50eXBlIT09Imxpc3QiKWRlbGV0ZSBlLm1ldGFkYXRhPy5saXN0VHlwZTtlbHNlIGlmKGUudHlwZT09PSJsaXN0IiYmIWUubWV0YWRhdGE/Lmxpc3RUeXBlKWUubWV0YWRhdGE9e2xpc3RUeXBlOiJidWxsZXQifTtlbHNlIGlmKGUudHlwZT09PSJjb2RlIiYmIWUubWV0YWRhdGE/Lmxhbmd1YWdlKXtsZXQgYz1hd2FpdCB0aGlzLnNob3dMYW5ndWFnZVNlbGVjdGlvbk1vZGFsKCk7aWYoYyllLm1ldGFkYXRhPXtsYW5ndWFnZTpjfTtlbHNle2UudHlwZT1sO3JldHVybn19YShlKTtsZXQgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkZWVzLW1vZGFsIik7ZiYmdHlwZW9mIGYuZGVzdHJveT09ImZ1bmN0aW9uIiYmZi5kZXN0cm95KCl9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJibG9jay10eXBlLWljb24iPiR7aS5pY29ufTwvc3Bhbj4KICAgICAgICAgICAgICA8c3Bhbj4ke2kubGFiZWx9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGApfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9fTt2YXIgemo9Y2xhc3N7Y29tcG9uZW50O3NhdmVUaW1lb3V0PW51bGw7Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wb25lbnQ9ZX1oYW5kbGVCbG9ja0lucHV0KGUsYSl7aWYodGhpcy5jb21wb25lbnQuaXNDb21wb3NpbmcpcmV0dXJuO2xldCByPWUudGFyZ2V0LGk9ci50ZXh0Q29udGVudHx8IiIsbz10aGlzLmRldGVjdEJsb2NrVHlwZUludGVudChpKTtpZihvJiZvLnR5cGUhPT1hLnR5cGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLmhhbmRsZUJsb2NrVHJhbnNmb3JtYXRpb24oYSxvLHIpO3JldHVybn10aGlzLmhhbmRsZVNsYXNoQ29tbWFuZChpLHIpLHRoaXMuc2NoZWR1bGVBdXRvU2F2ZSgpfXVwZGF0ZUJsb2NrQ29udGVudChlLGEpe2xldCBpPWEuY2xvc2VzdCgiLmJsb2NrLXdyYXBwZXIiKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYoaSl7bGV0IG89aS5nZXRDb250ZW50KCk7aWYoZS5jb250ZW50IT09byYmKGUuY29udGVudD1vKSxlLnR5cGU9PT0ibGlzdCIpe2xldCBzPWEucXVlcnlTZWxlY3Rvcigib2wsIHVsIik7cyYmKGUubWV0YWRhdGE9e2xpc3RUeXBlOnMudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09Im9sIj8ib3JkZXJlZCI6ImJ1bGxldCJ9KX19ZWxzZSBpZihlLnR5cGU9PT0ibGlzdCIpe2xldCBvPWEucXVlcnlTZWxlY3RvckFsbCgibGkiKTtlLmNvbnRlbnQ9QXJyYXkuZnJvbShvKS5tYXAobD0+bC5pbm5lckhUTUx8fCIiKS5qb2luKGAKYCk7bGV0IHM9YS5xdWVyeVNlbGVjdG9yKCJvbCwgdWwiKTtzJiYoZS5tZXRhZGF0YT17bGlzdFR5cGU6cy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT0ib2wiPyJvcmRlcmVkIjoiYnVsbGV0In0pfWVsc2UgZS50eXBlPT09ImNvZGUiP2UuY29udGVudD1hLnRleHRDb250ZW50fHwiIjplLmNvbnRlbnQ9YS5pbm5lckhUTUx8fCIifWRldGVjdEJsb2NrVHlwZUludGVudChlKXtsZXQgYT1QMS5jaGVja0hlYWRpbmdTaG9ydGN1dChlKTtpZihhKXJldHVybiBhO2xldCByPVAxLmNoZWNrTGlzdFNob3J0Y3V0KGUpO3JldHVybiByfHwoUDEuY2hlY2tRdW90ZVNob3J0Y3V0KGUpP3t0eXBlOiJxdW90ZSJ9OlAxLmNoZWNrQ29kZVNob3J0Y3V0KGUpP3t0eXBlOiJjb2RlIn06UDEuY2hlY2tEaXZpZGVyU2hvcnRjdXQoZSk/e3R5cGU6ImRpdmlkZXIifTpudWxsKX1hc3luYyBoYW5kbGVCbG9ja1RyYW5zZm9ybWF0aW9uKGUsYSxyKXtsZXQgaT10aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7aWYoYS50eXBlPT09Imxpc3QiKXtlLnR5cGU9Imxpc3QiLGUuY29udGVudD0iIixlLm1ldGFkYXRhPXtsaXN0VHlwZTphLmxpc3RUeXBlfTtsZXQgbz1hLmxpc3RUeXBlPT09Im9yZGVyZWQiPyJvbCI6InVsIjtyLmlubmVySFRNTD1gPCR7b30+PGxpPjwvbGk+PC8ke299PmAsdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKSx0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmJiZ0aGlzLmNvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoZS5pZCksc2V0VGltZW91dCgoKT0+e18yLmZvY3VzTGlzdEl0ZW0ocil9LDApfWVsc2UgaWYoYS50eXBlPT09ImRpdmlkZXIiKXtlLnR5cGU9ImRpdmlkZXIiLGUuY29udGVudD0iICIsdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZiYmdGhpcy5jb21wb25lbnQudXBkYXRlQmxvY2tFbGVtZW50KGUuaWQpO2xldCBvPWkuY3JlYXRlQmxvY2soKTtpLmluc2VydEJsb2NrQWZ0ZXIoZSxvKSx0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpfWVsc2UgaWYoYS50eXBlPT09ImNvZGUiKXtsZXQgbz1hd2FpdCBNai5zaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpO28mJihlLnR5cGU9ImNvZGUiLGUuY29udGVudD0iIixlLm1ldGFkYXRhPXtsYW5ndWFnZTpvfSxyLnRleHRDb250ZW50PSIiLHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCksdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZiYmdGhpcy5jb21wb25lbnQudXBkYXRlQmxvY2tFbGVtZW50KGUuaWQpLHNldFRpbWVvdXQoYXN5bmMoKT0+e2F3YWl0IGkuZm9jdXNCbG9jayhlLmlkLCJzdGFydCIpfSw1MCkpfWVsc2UgZS50eXBlPWEudHlwZSxlLmNvbnRlbnQ9IiIsci50ZXh0Q29udGVudD0iIix0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpLHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYmJnRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChlLmlkKSxzZXRUaW1lb3V0KGFzeW5jKCk9Pnthd2FpdCBpLmZvY3VzQmxvY2soZS5pZCwic3RhcnQiKX0sNTApfWhhbmRsZVNsYXNoQ29tbWFuZChlLGEpe2xldCByPXRoaXMuY29tcG9uZW50LnNsYXNoTWVudSxpPXImJnIudmlzaWJsZTtpZihlPT09Ii8ifHxlLnN0YXJ0c1dpdGgoIi8iKSYmaSl7aWYoIWkmJmU9PT0iLyIpe2xldCBvPXRoaXMuZ2V0Q2FyZXRDb29yZGluYXRlcyhhKTtyLnNob3coe3g6by5sZWZ0LHk6by5ib3R0b20rNH0scz0+e3RoaXMuY29tcG9uZW50Lmluc2VydEJsb2NrKHMpfSkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWEmJmEuZm9jdXMoKX0pfXImJnIudXBkYXRlRmlsdGVyKGUuc2xpY2UoMSkpfWVsc2UgZS5zdGFydHNXaXRoKCIvIil8fHRoaXMuY29tcG9uZW50LmNsb3NlU2xhc2hNZW51KCl9Z2V0Q2FyZXRDb29yZGluYXRlcyhlKXtsZXQgYT13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYoYSYmYS5yYW5nZUNvdW50PjApe2xldCBpPWEuZ2V0UmFuZ2VBdCgwKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihpLndpZHRoPjB8fGkuaGVpZ2h0PjApcmV0dXJuIGl9cmV0dXJuIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9c2NoZWR1bGVBdXRvU2F2ZSgpe3RoaXMuc2F2ZVRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnNhdmVUaW1lb3V0KSwhKHRoaXMuY29tcG9uZW50LnNsYXNoTWVudSYmdGhpcy5jb21wb25lbnQuc2xhc2hNZW51LnZpc2libGUpJiYodGhpcy5zYXZlVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5zeW5jQWxsQmxvY2tDb250ZW50KCksdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKX0sMmUzKSl9c3luY0FsbEJsb2NrQ29udGVudCgpe3RoaXMuY29tcG9uZW50LmJsb2Nrcy5mb3JFYWNoKGU9PntsZXQgcj10aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtlLmlkfSJdYCk/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO2lmKHImJnIuZ2V0Q29udGVudCl7bGV0IGk9ci5nZXRDb250ZW50KCk7ZS5jb250ZW50IT09aSYmKGUuY29udGVudD1pKX19KX1kZXN0cm95KCl7dGhpcy5zYXZlVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuc2F2ZVRpbWVvdXQpfX07dmFyIGtqPWNsYXNze2NvbXBvbmVudDtjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbXBvbmVudD1lfWFzeW5jIGhhbmRsZUJsb2NrS2V5RG93bihlLGEpe2lmKHRoaXMuY29tcG9uZW50LnNsYXNoTWVudS52aXNpYmxlJiZ0aGlzLmlzU2xhc2hNZW51S2V5KGUua2V5KSl7dGhpcy5jb21wb25lbnQuaGFuZGxlU2xhc2hNZW51S2V5Ym9hcmQoZSk7cmV0dXJufWlmKCF0aGlzLmhhbmRsZUZvcm1hdHRpbmdTaG9ydGN1dHMoZSkpc3dpdGNoKGUua2V5KXtjYXNlIlRhYiI6dGhpcy5oYW5kbGVUYWIoZSxhKTticmVhaztjYXNlIkVudGVyIjphd2FpdCB0aGlzLmhhbmRsZUVudGVyKGUsYSk7YnJlYWs7Y2FzZSJCYWNrc3BhY2UiOmF3YWl0IHRoaXMuaGFuZGxlQmFja3NwYWNlKGUsYSk7YnJlYWs7Y2FzZSJEZWxldGUiOmF3YWl0IHRoaXMuaGFuZGxlRGVsZXRlKGUsYSk7YnJlYWs7Y2FzZSJBcnJvd1VwIjphd2FpdCB0aGlzLmhhbmRsZUFycm93VXAoZSxhKTticmVhaztjYXNlIkFycm93RG93biI6YXdhaXQgdGhpcy5oYW5kbGVBcnJvd0Rvd24oZSxhKTticmVhaztjYXNlIkFycm93TGVmdCI6YXdhaXQgdGhpcy5oYW5kbGVBcnJvd0xlZnQoZSxhKTticmVhaztjYXNlIkFycm93UmlnaHQiOmF3YWl0IHRoaXMuaGFuZGxlQXJyb3dSaWdodChlLGEpO2JyZWFrfX1pc1NsYXNoTWVudUtleShlKXtyZXR1cm5bIkFycm93RG93biIsIkFycm93VXAiLCJFbnRlciIsIkVzY2FwZSJdLmluY2x1ZGVzKGUpfWhhbmRsZUZvcm1hdHRpbmdTaG9ydGN1dHMoZSl7aWYoIShlLm1ldGFLZXl8fGUuY3RybEtleSkpcmV0dXJuITE7c3dpdGNoKGUua2V5LnRvTG93ZXJDYXNlKCkpe2Nhc2UiYiI6cmV0dXJuIGUucHJldmVudERlZmF1bHQoKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLmNvbXBvbmVudC5hcHBseUZvcm1hdCgiYm9sZCIpKSwhMDtjYXNlImkiOnJldHVybiBlLnByZXZlbnREZWZhdWx0KCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5jb21wb25lbnQuYXBwbHlGb3JtYXQoIml0YWxpYyIpKSwhMDtjYXNlInUiOnJldHVybiBlLnByZXZlbnREZWZhdWx0KCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5jb21wb25lbnQuYXBwbHlGb3JtYXQoInVuZGVybGluZSIpKSwhMDtjYXNlImsiOnJldHVybiBlLnByZXZlbnREZWZhdWx0KCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5jb21wb25lbnQuYXBwbHlGb3JtYXQoImxpbmsiKSksITB9cmV0dXJuITF9aGFuZGxlVGFiKGUsYSl7YS50eXBlIT09ImNvZGUiJiZhLnR5cGU9PT0ibGlzdCImJmUucHJldmVudERlZmF1bHQoKX1hc3luYyBoYW5kbGVFbnRlcihlLGEpe2xldCByPXRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucztpZihbImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il0uaW5jbHVkZXMoYS50eXBlKSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBvPXIuY3JlYXRlQmxvY2soKTthd2FpdCByLmluc2VydEJsb2NrQWZ0ZXIoYSxvKTtyZXR1cm59aWYoYS50eXBlPT09ImNvZGUiKXtpZihlLnNoaWZ0S2V5KXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IG89ci5jcmVhdGVCbG9jaygpO2F3YWl0IHIuaW5zZXJ0QmxvY2tBZnRlcihhLG8pfXJldHVybn1pZighZS5zaGlmdEtleSlpZihhLnR5cGU9PT0ibGlzdCIpYXdhaXQgdGhpcy5oYW5kbGVFbnRlckluTGlzdChlLGEpO2Vsc2V7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBzPXRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2EuaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYocyYmcy5nZXRTcGxpdENvbnRlbnQpe2xldCBsPXMuZ2V0U3BsaXRDb250ZW50KCk7aWYobCl7cy5zZXRDb250ZW50KGwuYmVmb3JlKSxhLmNvbnRlbnQ9bC5iZWZvcmU7bGV0IGY9ci5jcmVhdGVCbG9jaygicGFyYWdyYXBoIixsLmFmdGVyKTthd2FpdCByLmluc2VydEJsb2NrQWZ0ZXIoYSxmKSx0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpfWVsc2V7bGV0IGY9ci5jcmVhdGVCbG9jaygpO2F3YWl0IHIuaW5zZXJ0QmxvY2tBZnRlcihhLGYpfX1lbHNle2xldCBsPXIuY3JlYXRlQmxvY2soKTthd2FpdCByLmluc2VydEJsb2NrQWZ0ZXIoYSxsKX19fWFzeW5jIGhhbmRsZUVudGVySW5MaXN0KGUsYSl7bGV0IHI9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKHImJnIucmFuZ2VDb3VudD4wKXtsZXQgbz1yLmdldFJhbmdlQXQoMCkuc3RhcnRDb250YWluZXIucGFyZW50RWxlbWVudD8uY2xvc2VzdCgibGkiKTtpZihvJiZvLnRleHRDb250ZW50PT09IiIpe2UucHJldmVudERlZmF1bHQoKTtsZXQgcz10aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnMsbD1zLmNyZWF0ZUJsb2NrKCk7YXdhaXQgcy5pbnNlcnRCbG9ja0FmdGVyKGEsbCl9fX1hc3luYyBoYW5kbGVCYWNrc3BhY2UoZSxhKXtsZXQgcj10aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7aWYoWyJkaXZpZGVyIiwiaW1hZ2UiLCJ5b3V0dWJlIiwiYXR0YWNobWVudCJdLmluY2x1ZGVzKGEudHlwZSkpe2lmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLmNvbXBvbmVudC5ibG9ja3MubGVuZ3RoPT09MSl7dGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeSghMSksci5yZW1vdmVCbG9jayhhLmlkKTtsZXQgYj1yLmNyZWF0ZUJsb2NrKCJwYXJhZ3JhcGgiLCIiKTt0aGlzLmNvbXBvbmVudC5ibG9ja3M9W2JdLHRoaXMuY29tcG9uZW50LnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKSxhd2FpdCByLmZvY3VzQmxvY2soYi5pZCwic3RhcnQiKSx0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpO3JldHVybn10aGlzLmNvbXBvbmVudC5zYXZlVG9IaXN0b3J5KCExKTtsZXQgaD1yLmdldFByZXZpb3VzQmxvY2soYS5pZCksZz1yLmdldE5leHRCbG9jayhhLmlkKTtyLnJlbW92ZUJsb2NrKGEuaWQpLGgmJmgudHlwZSE9PSJkaXZpZGVyIiYmaC50eXBlIT09ImltYWdlIj9hd2FpdCByLmZvY3VzQmxvY2soaC5pZCwiZW5kIik6ZyYmZy50eXBlIT09ImRpdmlkZXIiJiZnLnR5cGUhPT0iaW1hZ2UiP2F3YWl0IHIuZm9jdXNCbG9jayhnLmlkLCJzdGFydCIpOmg/YXdhaXQgci5mb2N1c0Jsb2NrKGguaWQpOmcmJmF3YWl0IHIuZm9jdXNCbG9jayhnLmlkKTtyZXR1cm59bGV0IHM9dGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YS5pZH0iXWApPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTtpZighc3x8IXMuc2hhZG93Um9vdClyZXR1cm47bGV0IGw9YS50eXBlPT09ImNvZGUiP3Muc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTpzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7aWYoIWwpcmV0dXJuO2xldCBmPXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIiksYz1bXTtmPy5zaGFkb3dSb290JiZjLnB1c2goZi5zaGFkb3dSb290KSxjLnB1c2gocy5zaGFkb3dSb290KTtsZXQgdT1JZS5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudChsLC4uLmMpLGQ9cy5nZXRDb250ZW50P3MuZ2V0Q29udGVudCgpOmwudGV4dENvbnRlbnQ7aWYodT09PTApe2UucHJldmVudERlZmF1bHQoKTtsZXQgaD1yLmdldFByZXZpb3VzQmxvY2soYS5pZCk7aWYoaCl7aWYoWyJkaXZpZGVyIiwiaW1hZ2UiLCJ5b3V0dWJlIiwiYXR0YWNobWVudCJdLmluY2x1ZGVzKGgudHlwZSkpe2F3YWl0IHIuZm9jdXNCbG9jayhoLmlkKTtyZXR1cm59aWYodGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeSghMSksaC50eXBlPT09ImNvZGUiJiZhLnR5cGUhPT0iY29kZSIpe2EuY29udGVudD09PSIiJiYoci5yZW1vdmVCbG9jayhhLmlkKSxhd2FpdCByLmZvY3VzQmxvY2soaC5pZCwiZW5kIikpO3JldHVybn1pZihhLnR5cGU9PT0iY29kZSImJmgudHlwZSE9PSJjb2RlIil7bGV0IEU9cy5nZXRDb250ZW50P3MuZ2V0Q29udGVudCgpOmEuY29udGVudDsoRT09PSIifHxFLnRyaW0oKT09PSIiKSYmKHIucmVtb3ZlQmxvY2soYS5pZCksYXdhaXQgci5mb2N1c0Jsb2NrKGguaWQsImVuZCIpKTtyZXR1cm59bGV0IHg9dGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7aC5pZH0iXWApPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKSxtPXg/LmdldENvbnRlbnQoKXx8aC5jb250ZW50fHwiIix2PXMuZ2V0Q29udGVudCgpfHxhLmNvbnRlbnR8fCIiLHk9IiI7aC50eXBlPT09ImNvZGUiJiZhLnR5cGU9PT0iY29kZSJ8fGgudHlwZT09PSJsaXN0IiYmYS50eXBlPT09Imxpc3QiP3k9bSsobSYmdj9gCmA6IiIpK3Y6eT1tKyhtJiZ2PyIgIjoiIikrdjtsZXQgdz1tLmxlbmd0aDtyLnVwZGF0ZUJsb2NrQ29udGVudChoLmlkLHkpLHgmJnguc2V0Q29udGVudCh5KSxyLnJlbW92ZUJsb2NrKGEuaWQpLGF3YWl0IHIuZm9jdXNCbG9jayhoLmlkLHcpfX1lbHNlIGlmKHRoaXMuY29tcG9uZW50LmJsb2Nrcy5sZW5ndGg+MSl7bGV0IGg9cy5nZXRDb250ZW50P3MuZ2V0Q29udGVudCgpOmEuY29udGVudDtpZihoPT09IiJ8fGgudHJpbSgpPT09IiIpe2UucHJldmVudERlZmF1bHQoKTtsZXQgZz1yLmdldFByZXZpb3VzQmxvY2soYS5pZCk7ZyYmKHIucmVtb3ZlQmxvY2soYS5pZCksZy50eXBlIT09ImRpdmlkZXIiJiZhd2FpdCByLmZvY3VzQmxvY2soZy5pZCwiZW5kIikpfX19YXN5bmMgaGFuZGxlRGVsZXRlKGUsYSl7bGV0IHI9dGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zO2lmKFsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXS5pbmNsdWRlcyhhLnR5cGUpKXtpZihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aD09PTEpe3RoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoITEpLHIucmVtb3ZlQmxvY2soYS5pZCk7bGV0IHg9ci5jcmVhdGVCbG9jaygicGFyYWdyYXBoIiwiIik7dGhpcy5jb21wb25lbnQuYmxvY2tzPVt4XSx0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCksYXdhaXQgci5mb2N1c0Jsb2NrKHguaWQsInN0YXJ0IiksdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTtyZXR1cm59dGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeSghMSk7bGV0IGg9ci5nZXRQcmV2aW91c0Jsb2NrKGEuaWQpLGc9ci5nZXROZXh0QmxvY2soYS5pZCk7ci5yZW1vdmVCbG9jayhhLmlkKTtsZXQgYj1bImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il07ZyYmIWIuaW5jbHVkZXMoZy50eXBlKT9hd2FpdCByLmZvY3VzQmxvY2soZy5pZCwic3RhcnQiKTpoJiYhYi5pbmNsdWRlcyhoLnR5cGUpP2F3YWl0IHIuZm9jdXNCbG9jayhoLmlkLCJlbmQiKTpnP2F3YWl0IHIuZm9jdXNCbG9jayhnLmlkKTpoJiZhd2FpdCByLmZvY3VzQmxvY2soaC5pZCk7cmV0dXJufWxldCBzPXRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2EuaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYoIXN8fCFzLnNoYWRvd1Jvb3QpcmV0dXJuO2xldCBsPWEudHlwZT09PSJjb2RlIj9zLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik6cy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO2lmKCFsKXJldHVybjtsZXQgZj1zLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpLGM9W107Zj8uc2hhZG93Um9vdCYmYy5wdXNoKGYuc2hhZG93Um9vdCksYy5wdXNoKHMuc2hhZG93Um9vdCk7bGV0IHU9SWUuZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQobCwuLi5jKSxkPWwudGV4dENvbnRlbnQ/Lmxlbmd0aHx8MDtpZih1PT09ZCl7bGV0IGg9ci5nZXROZXh0QmxvY2soYS5pZCk7aWYoaCYmWyJkaXZpZGVyIiwiaW1hZ2UiLCJ5b3V0dWJlIiwiYXR0YWNobWVudCJdLmluY2x1ZGVzKGgudHlwZSkpe2UucHJldmVudERlZmF1bHQoKSxhd2FpdCByLmZvY3VzQmxvY2soaC5pZCk7cmV0dXJufX19YXN5bmMgaGFuZGxlQXJyb3dVcChlLGEpe2xldCByPVsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXTtpZihyLmluY2x1ZGVzKGEudHlwZSkpe2UucHJldmVudERlZmF1bHQoKTtsZXQgdT10aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnMsZD11LmdldFByZXZpb3VzQmxvY2soYS5pZCk7ZCYmYXdhaXQgdS5mb2N1c0Jsb2NrKGQuaWQsci5pbmNsdWRlcyhkLnR5cGUpP3ZvaWQgMDoiZW5kIik7cmV0dXJufWxldCBvPXRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2EuaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYoIW98fCFvLnNoYWRvd1Jvb3QpcmV0dXJuO2xldCBzPWEudHlwZT09PSJjb2RlIj9vLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik6by5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO2lmKCFzKXJldHVybjtsZXQgbD1vLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpLGY9W107bD8uc2hhZG93Um9vdCYmZi5wdXNoKGwuc2hhZG93Um9vdCksZi5wdXNoKG8uc2hhZG93Um9vdCk7bGV0IGM9SWUuZ2V0U2VsZWN0aW9uSW5mbyguLi5mKTtpZighKCFjfHwhYy5jb2xsYXBzZWQpJiZ0aGlzLmlzT25GaXJzdExpbmUoYyxzLC4uLmYpKXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IHU9dGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLGQ9dS5nZXRQcmV2aW91c0Jsb2NrKGEuaWQpO2lmKGQpe2xldCBoPVsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXTthd2FpdCB1LmZvY3VzQmxvY2soZC5pZCxoLmluY2x1ZGVzKGQudHlwZSk/dm9pZCAwOiJlbmQiKX19fWFzeW5jIGhhbmRsZUFycm93RG93bihlLGEpe2lmKFsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXS5pbmNsdWRlcyhhLnR5cGUpKXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IHU9dGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLGQ9dS5nZXROZXh0QmxvY2soYS5pZCk7aWYoZCl7bGV0IGg9WyJkaXZpZGVyIiwiaW1hZ2UiLCJ5b3V0dWJlIiwiYXR0YWNobWVudCJdO2F3YWl0IHUuZm9jdXNCbG9jayhkLmlkLGguaW5jbHVkZXMoZC50eXBlKT92b2lkIDA6InN0YXJ0Iil9cmV0dXJufWxldCBvPXRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2EuaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYoIW98fCFvLnNoYWRvd1Jvb3QpcmV0dXJuO2xldCBzPWEudHlwZT09PSJjb2RlIj9vLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik6by5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO2lmKCFzKXJldHVybjtsZXQgbD1vLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpLGY9W107bD8uc2hhZG93Um9vdCYmZi5wdXNoKGwuc2hhZG93Um9vdCksZi5wdXNoKG8uc2hhZG93Um9vdCk7bGV0IGM9SWUuZ2V0U2VsZWN0aW9uSW5mbyguLi5mKTtpZighKCFjfHwhYy5jb2xsYXBzZWQpJiZ0aGlzLmlzT25MYXN0TGluZShjLHMsLi4uZikpe2UucHJldmVudERlZmF1bHQoKTtsZXQgdT10aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnMsZD11LmdldE5leHRCbG9jayhhLmlkKTtpZihkKXtsZXQgaD1bImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il07YXdhaXQgdS5mb2N1c0Jsb2NrKGQuaWQsaC5pbmNsdWRlcyhkLnR5cGUpP3ZvaWQgMDoic3RhcnQiKX19fWdldExhc3RUZXh0Tm9kZShlKXtpZihlLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpcmV0dXJuIGU7Zm9yKGxldCBhPWUuY2hpbGROb2Rlcy5sZW5ndGgtMTthPj0wO2EtLSl7bGV0IHI9dGhpcy5nZXRMYXN0VGV4dE5vZGUoZS5jaGlsZE5vZGVzW2FdKTtpZihyKXJldHVybiByfXJldHVybiBudWxsfWFzeW5jIGhhbmRsZUFycm93TGVmdChlLGEpe2lmKFsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXS5pbmNsdWRlcyhhLnR5cGUpKXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGQ9dGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLGg9ZC5nZXRQcmV2aW91c0Jsb2NrKGEuaWQpO2lmKGgpe2xldCBnPVsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXTthd2FpdCBkLmZvY3VzQmxvY2soaC5pZCxnLmluY2x1ZGVzKGgudHlwZSk/dm9pZCAwOiJlbmQiKX1yZXR1cm59bGV0IG89dGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YS5pZH0iXWApPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTtpZighb3x8IW8uc2hhZG93Um9vdClyZXR1cm47bGV0IHM9YS50eXBlPT09ImNvZGUiP28uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTpvLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7aWYoIXMpcmV0dXJuO2xldCBsPW8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIiksZj1bXTtsPy5zaGFkb3dSb290JiZmLnB1c2gobC5zaGFkb3dSb290KSxmLnB1c2goby5zaGFkb3dSb290KTtsZXQgYz1JZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmYpO2lmKCFjfHwhYy5jb2xsYXBzZWQpcmV0dXJuO2lmKEllLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHMsLi4uZik9PT0wKXtsZXQgZD10aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnMsaD1kLmdldFByZXZpb3VzQmxvY2soYS5pZCk7aWYoaCl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBiPVsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXS5pbmNsdWRlcyhoLnR5cGUpP3ZvaWQgMDoiZW5kIjthd2FpdCBkLmZvY3VzQmxvY2soaC5pZCxiKX19fWFzeW5jIGhhbmRsZUFycm93UmlnaHQoZSxhKXtpZihbImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il0uaW5jbHVkZXMoYS50eXBlKSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBoPXRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucyxnPWguZ2V0TmV4dEJsb2NrKGEuaWQpO2lmKGcpe2xldCBiPVsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXTthd2FpdCBoLmZvY3VzQmxvY2soZy5pZCxiLmluY2x1ZGVzKGcudHlwZSk/dm9pZCAwOiJzdGFydCIpfXJldHVybn1sZXQgbz10aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHthLmlkfSJdYCk/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO2lmKCFvfHwhby5zaGFkb3dSb290KXJldHVybjtsZXQgcz1hLnR5cGU9PT0iY29kZSI/by5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOm8uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTtpZighcylyZXR1cm47bGV0IGw9by5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKSxmPVtdO2w/LnNoYWRvd1Jvb3QmJmYucHVzaChsLnNoYWRvd1Jvb3QpLGYucHVzaChvLnNoYWRvd1Jvb3QpO2xldCBjPUllLmdldFNlbGVjdGlvbkluZm8oLi4uZik7aWYoIWN8fCFjLmNvbGxhcHNlZClyZXR1cm47bGV0IHU9SWUuZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQocywuLi5mKSxkPXMudGV4dENvbnRlbnQ/Lmxlbmd0aHx8MDtpZih1PT09ZCl7bGV0IGg9dGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLGc9aC5nZXROZXh0QmxvY2soYS5pZCk7aWYoZyl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBiPVsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXTthd2FpdCBoLmZvY3VzQmxvY2soZy5pZCxiLmluY2x1ZGVzKGcudHlwZSk/dm9pZCAwOiJzdGFydCIpfX19aXNPbkZpcnN0TGluZShlLGEsLi4ucil7dHJ5e2xldCBpPUllLmNyZWF0ZVJhbmdlRnJvbUluZm8oZSksbz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9aS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtzLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUmJihzPXMucGFyZW50RWxlbWVudCk7bGV0IGw9cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPW8udG9wLWwudG9wPDU7cmV0dXJuIHMudGV4dENvbnRlbnQmJiFzLnRleHRDb250ZW50LmluY2x1ZGVzKGAKYCk/SWUuZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQocywuLi5yKT09PTA6Zn1jYXRjaChpKXtyZXR1cm4gY29uc29sZS53YXJuKCJFcnJvciBjaGVja2luZyBmaXJzdCBsaW5lOiIsaSksZS5zdGFydE9mZnNldD09PTB9fWlzT25MYXN0TGluZShlLGEsLi4ucil7dHJ5e2xldCBpPUllLmNyZWF0ZVJhbmdlRnJvbUluZm8oZSksbz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9aS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtzLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUmJihzPXMucGFyZW50RWxlbWVudCk7bGV0IGY9cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20tby5ib3R0b208NTtpZihzLnRleHRDb250ZW50JiYhcy50ZXh0Q29udGVudC5pbmNsdWRlcyhgCmApKXtsZXQgYz1hLnRleHRDb250ZW50Py5sZW5ndGh8fDA7cmV0dXJuIEllLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KGEsLi4ucik9PT1jfXJldHVybiBmfWNhdGNoKGkpe2NvbnNvbGUud2FybigiRXJyb3IgY2hlY2tpbmcgbGFzdCBsaW5lOiIsaSk7bGV0IG89YS50ZXh0Q29udGVudD8ubGVuZ3RofHwwO3JldHVybiBJZS5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudChhLC4uLnIpPT09b319fTt2YXIgU2o9Y2xhc3N7Y29tcG9uZW50O2RyYWdnZWRCbG9ja0lkPW51bGw7ZHJhZ092ZXJCbG9ja0lkPW51bGw7ZHJhZ092ZXJQb3NpdGlvbj1udWxsO2Ryb3BJbmRpY2F0b3I9bnVsbDtpbml0aWFsTW91c2VZPTA7aW5pdGlhbEJsb2NrWT0wO2RyYWdnZWRCbG9ja0VsZW1lbnQ9bnVsbDtkcmFnZ2VkQmxvY2tIZWlnaHQ9MDtkcmFnZ2VkQmxvY2tDb250ZW50SGVpZ2h0PTA7ZHJhZ2dlZEJsb2NrTWFyZ2luVG9wPTA7bGFzdFVwZGF0ZVRpbWU9MDt1cGRhdGVUaHJvdHRsZT04MDtjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbXBvbmVudD1lfWdldCBkcmFnU3RhdGUoKXtyZXR1cm57ZHJhZ2dlZEJsb2NrSWQ6dGhpcy5kcmFnZ2VkQmxvY2tJZCxkcmFnT3ZlckJsb2NrSWQ6dGhpcy5kcmFnT3ZlckJsb2NrSWQsZHJhZ092ZXJQb3NpdGlvbjp0aGlzLmRyYWdPdmVyUG9zaXRpb259fWhhbmRsZURyYWdTdGFydChlLGEpe2lmKCFlLmRhdGFUcmFuc2ZlcilyZXR1cm47dGhpcy5kcmFnZ2VkQmxvY2tJZD1hLmlkLGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9Im1vdmUiLGUuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLGEuaWQpO2xldCByPW5ldyBJbWFnZTtpZihyLnNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQVVFQkFBQUFDd0FBQUFBQVFBQkFBQUNBa1FCQURzPSIsZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKHIsMCwwKSx0aGlzLmluaXRpYWxNb3VzZVk9ZS5jbGllbnRZLHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudD10aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2EuaWR9Il1gKSx0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpe2xldCBpPXRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLmluaXRpYWxCbG9ja1k9aS50b3A7bGV0IG89dGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO2lmKG8pe2xldCBzPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvKTt0aGlzLmRyYWdnZWRCbG9ja01hcmdpblRvcD1wYXJzZUludChsLm1hcmdpblRvcCl8fDAsdGhpcy5kcmFnZ2VkQmxvY2tDb250ZW50SGVpZ2h0PXMuaGVpZ2h0fXRoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0PWkuaGVpZ2h0LGNvbnNvbGUubG9nKCJEcmFnIG1lYXN1cmVtZW50czoiLHt3cmFwcGVySGVpZ2h0OmkuaGVpZ2h0LG1hcmdpblRvcDp0aGlzLmRyYWdnZWRCbG9ja01hcmdpblRvcCxkcm9wSW5kaWNhdG9ySGVpZ2h0OnRoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0LGNvbnRlbnRIZWlnaHQ6dGhpcy5kcmFnZ2VkQmxvY2tDb250ZW50SGVpZ2h0LGJsb2NrSWQ6YS5pZH0pLHRoaXMuY3JlYXRlRHJvcEluZGljYXRvcigpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0aGlzLmhhbmRsZUdsb2JhbERyYWdPdmVyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW5kIix0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQpfXRoaXMuY29tcG9uZW50LmRyYWdnZWRCbG9ja0lkPXRoaXMuZHJhZ2dlZEJsb2NrSWQsc2V0VGltZW91dCgoKT0+e3RoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudCYmdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50LmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIiksdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZiYmdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpfSwxMCl9aGFuZGxlRHJhZ0VuZCgpe3RoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvckFsbCgiLmJsb2NrLXdyYXBwZXIiKS5mb3JFYWNoKGE9PnthLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiwibW92ZS11cCIsIm1vdmUtZG93biIpLGEuc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiKSxhLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2Zvcm0iKX0pLHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYmJnRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKSx0aGlzLmRyYWdnZWRCbG9ja0lkPW51bGwsdGhpcy5kcmFnT3ZlckJsb2NrSWQ9bnVsbCx0aGlzLmRyYWdPdmVyUG9zaXRpb249bnVsbCx0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQ9bnVsbCx0aGlzLmRyYWdnZWRCbG9ja0hlaWdodD0wLHRoaXMuZHJhZ2dlZEJsb2NrQ29udGVudEhlaWdodD0wLHRoaXMuZHJhZ2dlZEJsb2NrTWFyZ2luVG9wPTAsdGhpcy5pbml0aWFsQmxvY2tZPTAsdGhpcy5jb21wb25lbnQuZHJhZ2dlZEJsb2NrSWQ9bnVsbCx0aGlzLmNvbXBvbmVudC5kcmFnT3ZlckJsb2NrSWQ9bnVsbCx0aGlzLmNvbXBvbmVudC5kcmFnT3ZlclBvc2l0aW9uPW51bGx9aGFuZGxlRHJhZ092ZXIoZSxhKXtpZihlLnByZXZlbnREZWZhdWx0KCksIWUuZGF0YVRyYW5zZmVyfHwhdGhpcy5kcmFnZ2VkQmxvY2tJZHx8dGhpcy5kcmFnZ2VkQmxvY2tJZD09PWEuaWQpcmV0dXJuO2UuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9Im1vdmUiO2xldCByPWUuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXIudG9wK3IuaGVpZ2h0LzI7dGhpcy5kcmFnT3ZlckJsb2NrSWQ9YS5pZCx0aGlzLmRyYWdPdmVyUG9zaXRpb249ZS5jbGllbnRZPGk/ImJlZm9yZSI6ImFmdGVyIix0aGlzLmNvbXBvbmVudC5kcmFnT3ZlckJsb2NrSWQ9dGhpcy5kcmFnT3ZlckJsb2NrSWQsdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbj10aGlzLmRyYWdPdmVyUG9zaXRpb259aGFuZGxlRHJhZ0xlYXZlKGUpe3RoaXMuZHJhZ092ZXJCbG9ja0lkPT09ZS5pZCYmKHRoaXMuZHJhZ092ZXJCbG9ja0lkPW51bGwsdGhpcy5kcmFnT3ZlclBvc2l0aW9uPW51bGwsdGhpcy5jb21wb25lbnQuZHJhZ092ZXJCbG9ja0lkPW51bGwsdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbj1udWxsKX1oYW5kbGVEcm9wKGUsYSl7ZS5wcmV2ZW50RGVmYXVsdCgpLCEoIXRoaXMuZHJhZ2dlZEJsb2NrSWR8fHRoaXMuZHJhZ2dlZEJsb2NrSWQ9PT1hLmlkKSYmdGhpcy5jb21wb25lbnQuaGFuZGxlRHJvcChlLGEpfWlzRHJhZ2dpbmcoZSl7cmV0dXJuIHRoaXMuZHJhZ2dlZEJsb2NrSWQ9PT1lfWlzRHJhZ092ZXIoZSl7cmV0dXJuIHRoaXMuZHJhZ092ZXJCbG9ja0lkPT09ZX1nZXREcmFnT3ZlckNsYXNzZXMoZSl7cmV0dXJuIHRoaXMuaXNEcmFnT3ZlcihlKT90aGlzLmRyYWdPdmVyUG9zaXRpb249PT0iYmVmb3JlIj8iZHJhZy1vdmVyLWJlZm9yZSI6ImRyYWctb3Zlci1hZnRlciI6IiJ9Y3JlYXRlRHJvcEluZGljYXRvcigpe3RoaXMuZHJvcEluZGljYXRvcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRyb3BJbmRpY2F0b3IuY2xhc3NOYW1lPSJkcm9wLWluZGljYXRvciIsdGhpcy5kcm9wSW5kaWNhdG9yLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYuYXBwZW5kQ2hpbGQodGhpcy5kcm9wSW5kaWNhdG9yKX1oYW5kbGVHbG9iYWxEcmFnT3Zlcj1lPT57aWYoZS5wcmV2ZW50RGVmYXVsdCgpLCF0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpcmV0dXJuO2xldCBhPWUuY2xpZW50WS10aGlzLmluaXRpYWxNb3VzZVk7dGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWSgke2F9cHgpYDtsZXQgcj1EYXRlLm5vdygpO3ItdGhpcy5sYXN0VXBkYXRlVGltZTx0aGlzLnVwZGF0ZVRocm90dGxlfHwodGhpcy5sYXN0VXBkYXRlVGltZT1yLHRoaXMudXBkYXRlQmxvY2tQb3NpdGlvbnMoZS5jbGllbnRZKSl9O3VwZGF0ZUJsb2NrUG9zaXRpb25zKGUpe2xldCBhPUFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKSxyPWEuZmluZEluZGV4KG89Pm8uZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik9PT10aGlzLmRyYWdnZWRCbG9ja0lkKTtpZihyPT09LTEpcmV0dXJuO2EuZm9yRWFjaChvPT57by5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKSE9PXRoaXMuZHJhZ2dlZEJsb2NrSWQmJihvLmNsYXNzTGlzdC5yZW1vdmUoIm1vdmUtdXAiLCJtb3ZlLWRvd24iKSxvLnN0eWxlLnJlbW92ZVByb3BlcnR5KCItLWRyYWctb2Zmc2V0IikpfSk7bGV0IGk9YS5sZW5ndGg7Zm9yKGxldCBvPTA7bzxhLmxlbmd0aDtvKyspe2lmKG89PT1yKWNvbnRpbnVlO2xldCBsPWFbb10uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj1sLnRvcDtpZihlPGYrbC5oZWlnaHQqLjUpe2k9bzticmVha319Zm9yKGxldCBvPTA7bzxhLmxlbmd0aDtvKyspe2lmKG89PT1yKWNvbnRpbnVlO2xldCBzPWFbb107cjxpP28+ciYmbzxpJiYocy5jbGFzc0xpc3QuYWRkKCJtb3ZlLXVwIikscy5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1kcmFnLW9mZnNldCIsYCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgKSk6cj5pJiZvPj1pJiZvPHImJihzLmNsYXNzTGlzdC5hZGQoIm1vdmUtZG93biIpLHMuc3R5bGUuc2V0UHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiLGAke3RoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0fXB4YCkpfXRoaXMudXBkYXRlRHJvcEluZGljYXRvcihhLGkscil9dXBkYXRlRHJvcEluZGljYXRvcihlLGEscil7aWYoIXRoaXMuZHJvcEluZGljYXRvcnx8IXRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudClyZXR1cm47dGhpcy5kcm9wSW5kaWNhdG9yLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtsZXQgaT10aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89MCxzPVtdO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtpZihjPT09ciljb250aW51ZTtsZXQgdT1lW2NdLGQ9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWQudG9wLWkudG9wLGc9ZC5ib3R0b20taS50b3AsYj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh1KS50cmFuc2Zvcm07aWYoYiYmYiE9PSJub25lIil7bGV0IG09bmV3IERPTU1hdHJpeChiKS5tNDI7aCs9bSxnKz1tfXMucHVzaCh7aW5kZXg6Yyx0b3A6aCxib3R0b206Z30pfXMuc29ydCgoYyx1KT0+Yy50b3AtdS50b3ApO2xldCBsPWE7YT5yJiZsLS07bGV0IGY9MTY7aWYodGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KXtsZXQgYz10aGlzLmNvbXBvbmVudC5ibG9ja3MuZmluZCh1PT51LmlkPT09dGhpcy5kcmFnZ2VkQmxvY2tJZCk7aWYoYyl7bGV0IHU9Yy50eXBlO3U9PT0iaGVhZGluZy0xInx8dT09PSJoZWFkaW5nLTIifHx1PT09ImhlYWRpbmctMyI/Zj0yNDoodT09PSJjb2RlInx8dT09PSJxdW90ZSIpJiYoZj0yMCl9fWlmKGw9PT0wKW89MDtlbHNlIGlmKGw+PXMubGVuZ3RoKXtsZXQgYz1zW3MubGVuZ3RoLTFdO2MmJihvPWMuYm90dG9tLG8rPWYpfWVsc2V7bGV0IGM9c1tsLTFdO2MmJihvPWMuYm90dG9tLG8rPWYpfXRoaXMuZHJvcEluZGljYXRvci5zdHlsZS5oZWlnaHQ9YCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgLHRoaXMuZHJvcEluZGljYXRvci5zdHlsZS50b3A9YCR7TWF0aC5tYXgoMCxvKX1weGAsY29uc29sZS5sb2coIkRyb3AgaW5kaWNhdG9yIHVwZGF0ZToiLHt0YXJnZXRJbmRleDphLGFkanVzdGVkVGFyZ2V0SW5kZXg6bCxkcmFnZ2VkSW5kZXg6cix0b3BQb3NpdGlvbjpvLGhlaWdodDp0aGlzLmRyYWdnZWRCbG9ja0hlaWdodCxibG9ja01hcmdpbjpmLHZpc3VhbEJsb2NrczpzLm1hcChjPT4oe2luZGV4OmMuaW5kZXgsdG9wOmMudG9wLGJvdHRvbTpjLmJvdHRvbX0pKX0pfWhhbmRsZUdsb2JhbERyYWdFbmQ9KCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5oYW5kbGVHbG9iYWxEcmFnT3ZlciksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5oYW5kbGVHbG9iYWxEcmFnRW5kKSx0aGlzLmRyb3BJbmRpY2F0b3ImJih0aGlzLmRyb3BJbmRpY2F0b3IucmVtb3ZlKCksdGhpcy5kcm9wSW5kaWNhdG9yPW51bGwpLHRoaXMuZHJhZ2dlZEJsb2NrSWQ/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5wZXJmb3JtRHJvcCgpLHRoaXMuaGFuZGxlRHJhZ0VuZCgpfSk6dGhpcy5oYW5kbGVEcmFnRW5kKCl9O3BlcmZvcm1Ecm9wKCl7aWYoIXRoaXMuZHJhZ2dlZEJsb2NrSWQpcmV0dXJuO2xldCBlPUFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTtpZighZS5maW5kKHU9PnUuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik9PT10aGlzLmRyYWdnZWRCbG9ja0lkKSlyZXR1cm47bGV0IHI9ZS5tYXAodT0+e2xldCBkPXUuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIiksaD11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9aC50b3AraC5oZWlnaHQvMjtyZXR1cm57aWQ6ZCxjZW50ZXJZOmcsZWxlbWVudDp1fX0pO3Iuc29ydCgodSxkKT0+dS5jZW50ZXJZLWQuY2VudGVyWSk7bGV0IGk9ci5tYXAodT0+dS5pZCkuZmlsdGVyKHU9PnUhPT1udWxsKSxvPVsuLi50aGlzLmNvbXBvbmVudC5ibG9ja3NdLHM9by5maW5kKHU9PnUuaWQ9PT10aGlzLmRyYWdnZWRCbG9ja0lkKTtpZighcylyZXR1cm47bGV0IGw9by5tYXAodT0+dS5pZCk7aWYoISFpLmV2ZXJ5KCh1LGQpPT51PT09bFtkXSkpcmV0dXJuO2xldCBjPWkubWFwKHU9Pm8uZmluZChkPT5kLmlkPT09dSkpLmZpbHRlcihCb29sZWFuKTt0aGlzLmNvbXBvbmVudC5ibG9ja3M9Yyx0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCksdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKSxzZXRUaW1lb3V0KCgpPT57cy50eXBlIT09ImRpdmlkZXIiJiZ0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnMuZm9jdXNCbG9jayhzLmlkKX0sMTAwKX19O3ZhciBDaj1jbGFzc3toaXN0b3J5PVtdO2N1cnJlbnRJbmRleD0tMTttYXhIaXN0b3J5U2l6ZT01MDtsYXN0U2F2ZVRpbWU9MDtzYXZlRGVib3VuY2VNcz01MDA7Y29uc3RydWN0b3IoKXt0aGlzLmhpc3Rvcnk9W10sdGhpcy5jdXJyZW50SW5kZXg9LTF9c2F2ZVN0YXRlKGUsYSxyKXtsZXQgaT1EYXRlLm5vdygpO2lmKGktdGhpcy5sYXN0U2F2ZVRpbWU8dGhpcy5zYXZlRGVib3VuY2VNcyYmdGhpcy5jdXJyZW50SW5kZXg+PTApe3RoaXMuaGlzdG9yeVt0aGlzLmN1cnJlbnRJbmRleF09e2Jsb2Nrczp0aGlzLmNsb25lQmxvY2tzKGUpLHNlbGVjdGVkQmxvY2tJZDphLGN1cnNvclBvc2l0aW9uOnI/ey4uLnJ9OnZvaWQgMCx0aW1lc3RhbXA6aX07cmV0dXJufXRoaXMuY3VycmVudEluZGV4PHRoaXMuaGlzdG9yeS5sZW5ndGgtMSYmKHRoaXMuaGlzdG9yeT10aGlzLmhpc3Rvcnkuc2xpY2UoMCx0aGlzLmN1cnJlbnRJbmRleCsxKSk7bGV0IG89e2Jsb2Nrczp0aGlzLmNsb25lQmxvY2tzKGUpLHNlbGVjdGVkQmxvY2tJZDphLGN1cnNvclBvc2l0aW9uOnI/ey4uLnJ9OnZvaWQgMCx0aW1lc3RhbXA6aX07dGhpcy5oaXN0b3J5LnB1c2gobyksdGhpcy5jdXJyZW50SW5kZXgrKyx0aGlzLmhpc3RvcnkubGVuZ3RoPnRoaXMubWF4SGlzdG9yeVNpemUmJih0aGlzLmhpc3Rvcnkuc2hpZnQoKSx0aGlzLmN1cnJlbnRJbmRleC0tKSx0aGlzLmxhc3RTYXZlVGltZT1pfXNhdmVDaGVja3BvaW50KGUsYSxyKXt0aGlzLmxhc3RTYXZlVGltZT0wLHRoaXMuc2F2ZVN0YXRlKGUsYSxyKX11bmRvKCl7cmV0dXJuIHRoaXMuY2FuVW5kbygpPyh0aGlzLmN1cnJlbnRJbmRleC0tLHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKSk6bnVsbH1yZWRvKCl7cmV0dXJuIHRoaXMuY2FuUmVkbygpPyh0aGlzLmN1cnJlbnRJbmRleCsrLHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKSk6bnVsbH1jYW5VbmRvKCl7cmV0dXJuIHRoaXMuY3VycmVudEluZGV4PjB9Y2FuUmVkbygpe3JldHVybiB0aGlzLmN1cnJlbnRJbmRleDx0aGlzLmhpc3RvcnkubGVuZ3RoLTF9Z2V0Q3VycmVudFN0YXRlKCl7cmV0dXJuIHRoaXMuY3VycmVudEluZGV4Pj0wJiZ0aGlzLmN1cnJlbnRJbmRleDx0aGlzLmhpc3RvcnkubGVuZ3RoP3RoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKTpudWxsfWNsZWFyKCl7dGhpcy5oaXN0b3J5PVtdLHRoaXMuY3VycmVudEluZGV4PS0xLHRoaXMubGFzdFNhdmVUaW1lPTB9Y2xvbmVCbG9ja3MoZSl7cmV0dXJuIGUubWFwKGE9Pih7Li4uYSxtZXRhZGF0YTphLm1ldGFkYXRhP3suLi5hLm1ldGFkYXRhfTp2b2lkIDB9KSl9Y2xvbmVTdGF0ZShlKXtyZXR1cm57YmxvY2tzOnRoaXMuY2xvbmVCbG9ja3MoZS5ibG9ja3MpLHNlbGVjdGVkQmxvY2tJZDplLnNlbGVjdGVkQmxvY2tJZCxjdXJzb3JQb3NpdGlvbjplLmN1cnNvclBvc2l0aW9uP3suLi5lLmN1cnNvclBvc2l0aW9ufTp2b2lkIDAsdGltZXN0YW1wOmUudGltZXN0YW1wfX1nZXRIaXN0b3J5SW5mbygpe3JldHVybntzaXplOnRoaXMuaGlzdG9yeS5sZW5ndGgsY3VycmVudEluZGV4OnRoaXMuY3VycmVudEluZGV4LGNhblVuZG86dGhpcy5jYW5VbmRvKCksY2FuUmVkbzp0aGlzLmNhblJlZG8oKX19fTtmZSgpO0JlKCk7dmFyIE9JPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sZW89ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LHNuMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtd3lzaXd5Zy1ibG9jayIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdO3ZhciB2PWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgeT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOk9iamVjdH0pXSxmPVtEKHt0eXBlOkJvb2xlYW59KV0sZD1bRCh7dHlwZTpPYmplY3R9KV0sYj1bRCh7dHlwZTpPYmplY3R9KV0sT0kodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJibG9jayIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+ImJsb2NrImluIHcsZ2V0Onc9PncuYmxvY2ssc2V0Oih3LEUpPT57dy5ibG9jaz1FfX0sbWV0YWRhdGE6eX0scyxsKSxPSSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzU2VsZWN0ZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnc9PiJpc1NlbGVjdGVkImluIHcsZ2V0Onc9PncuaXNTZWxlY3RlZCxzZXQ6KHcsRSk9Pnt3LmlzU2VsZWN0ZWQ9RX19LG1ldGFkYXRhOnl9LGMsdSksT0kodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJoYW5kbGVycyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+ImhhbmRsZXJzImluIHcsZ2V0Onc9PncuaGFuZGxlcnMsc2V0Oih3LEUpPT57dy5oYW5kbGVycz1FfX0sbWV0YWRhdGE6eX0saCxnKSxPSSh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Ind5c2l3eWdDb21wb25lbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnc9PiJ3eXNpd3lnQ29tcG9uZW50ImluIHcsZ2V0Onc9Pncud3lzaXd5Z0NvbXBvbmVudCxzZXQ6KHcsRSk9Pnt3Lnd5c2l3eWdDb21wb25lbnQ9RX19LG1ldGFkYXRhOnl9LHgsbSksT0kobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6eX0sbnVsbCxhKSx2PXI9ZS52YWx1ZSx5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnl9KX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fc2VsZWN0aW9uSGFuZGxlciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIix0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKX0jZT1lbyh0aGlzLHMsdm9pZCAwKTtnZXQgYmxvY2soKXtyZXR1cm4gdGhpcy4jZX1zZXQgYmxvY2soeSl7dGhpcy4jZT15fSN0PShlbyh0aGlzLGwpLGVvKHRoaXMsYywhMSkpO2dldCBpc1NlbGVjdGVkKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGlzU2VsZWN0ZWQoeSl7dGhpcy4jdD15fSNhPShlbyh0aGlzLHUpLGVvKHRoaXMsaCx2b2lkIDApKTtnZXQgaGFuZGxlcnMoKXtyZXR1cm4gdGhpcy4jYX1zZXQgaGFuZGxlcnMoeSl7dGhpcy4jYT15fSNyPShlbyh0aGlzLGcpLGVvKHRoaXMseCx2b2lkIDApKTtnZXQgd3lzaXd5Z0NvbXBvbmVudCgpe3JldHVybiB0aGlzLiNyfXNldCB3eXNpd3lnQ29tcG9uZW50KHkpe3RoaXMuI3I9eX1ibG9ja0VsZW1lbnQ9KGVvKHRoaXMsbSksbnVsbCk7Y29udGVudEluaXRpYWxpemVkPSExO2xhc3RLbm93bkN1cnNvclBvc2l0aW9uPTA7bGFzdFNlbGVjdGVkVGV4dD0iIjtoYW5kbGVyU3R5bGVzSW5qZWN0ZWQ9ITE7c3RhdGljIE5PTl9FRElUQUJMRV9UWVBFUz1bImltYWdlIiwiZGl2aWRlciIsInlvdXR1YmUiXTtpbmplY3RIYW5kbGVyU3R5bGVzKCl7aWYodGhpcy5oYW5kbGVyU3R5bGVzSW5qZWN0ZWQpcmV0dXJuO3RoaXMuaGFuZGxlclN0eWxlc0luamVjdGVkPSEwO2xldCB5PSIiLHc9WXQuZ2V0QWxsVHlwZXMoKTtmb3IobGV0IEUgb2Ygdyl7bGV0IEM9WXQuZ2V0SGFuZGxlcihFKTtDJiYoeSs9Qy5nZXRTdHlsZXMoKSl9aWYoeSl7bGV0IEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtFLnRleHRDb250ZW50PXksdGhpcy5zaGFkb3dSb290Py5hcHBlbmRDaGlsZChFKX19c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5ibG9jayB7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgICAgbWluLWhlaWdodDogMS42ZW07CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzAwMDAwMCIsIiNlMGUwZTAiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jazplbXB0eTpub3QoOmZvY3VzKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiBhdHRyKGRhdGEtcGxhY2Vob2xkZXIpOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzk5OSIsIiM2NjYiKX07CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAvKiBCbG9jay1zcGVjaWZpYyBzdHlsZXMgbW92ZWQgdG8gaGFuZGxlcnMgKi8KCgogICAgICAvKiBGb3JtYXR0aW5nIHN0eWxlcyAqLwogICAgICAuYmxvY2sgOmlzKGIsIHN0cm9uZykgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDAwMDAwIiwiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLmJsb2NrIDppcyhpLCBlbSkgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLmJsb2NrIHUgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAuYmxvY2sgcyB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7CiAgICAgIH0KCiAgICAgIC5ibG9jayBjb2RlIHsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDYpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiI2QxNCIsIiNmZjZiNmIiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jayBhIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwMDY2Y2MiLCIjNGQ5NGZmIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuYmxvY2sgYTpob3ZlciB7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHtwLmJkVGhlbWUoIiMwMDY2Y2MiLCIjNGQ5NGZmIil9OwogICAgICB9CgogICAgICAvKiBDb2RlIGJsb2NrIGNvbnRhaW5lciBhbmQgbGFuZ3VhZ2Ugc3R5bGVzIG1vdmVkIHRvIGhhbmRsZXIgKi8KCiAgICAgIC8qIFNlbGVjdGlvbiBzdHlsZXMgKi8KICAgICAgLmJsb2NrIDo6c2VsZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgwLCAxMDIsIDIwNCwgMC4zKSIsInJnYmEoNzcsIDE0OCwgMjU1LCAwLjMpIil9OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICB9CgoKICAgICAgLyogU3RyaWtlIHRocm91Z2ggKi8KICAgICAgLmJsb2NrIDppcyhzLCBzdHJpa2UpIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCgogICAgICAvKiBCbG9jayBtYXJnaW4gYWRqdXN0bWVudHMgYmFzZWQgb24gdHlwZSAqLwogICAgICA6aG9zdC1jb250ZXh0KC5ibG9jay13cmFwcGVyOmZpcnN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QtY29udGV4dCguYmxvY2std3JhcHBlcjpsYXN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFNlbGVjdGVkIHN0YXRlICovCiAgICAgIC5ibG9jay5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpIiwicmdiYSg3NywgMTQ4LCAyNTUsIDAuMDgpIil9OwogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCAke3AuYmRUaGVtZSgicmdiYSgwLCAxMDIsIDIwNCwgMC4yKSIsInJnYmEoNzcsIDE0OCwgMjU1LCAwLjIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogLThweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogOHB4OwogICAgICB9CgoKCgogICAgYF07c2hvdWxkVXBkYXRlKHkpe2lmKHkuaGFzKCJpc1NlbGVjdGVkIikmJnRoaXMuYmxvY2spe2xldCB3PW51bGwsQz1gLmJsb2NrLiR7dGhpcy5ibG9jay50eXBlfWA7cmV0dXJuIHc9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKEMpLHcmJih0aGlzLmlzU2VsZWN0ZWQ/dy5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpOncuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKSksITF9aWYoeS5oYXMoImJsb2NrIikmJnRoaXMuYmxvY2spe2xldCB3PXkuZ2V0KCJibG9jayIpO2lmKHcmJncuaWQmJncudHlwZSYmdy5pZD09PXRoaXMuYmxvY2suaWQmJncudHlwZT09PXRoaXMuYmxvY2sudHlwZSlyZXR1cm4hMX1yZXR1cm4hdGhpcy5ibG9ja0VsZW1lbnR8fHRoaXMuYmxvY2s/LnR5cGUhPT10aGlzLmJsb2NrRWxlbWVudC5kYXRhc2V0LmJsb2NrVHlwZX1maXJzdFVwZGF0ZWQoKXt0aGlzLmNvbnRlbnRJbml0aWFsaXplZD0hMCx0aGlzLmluamVjdEhhbmRsZXJTdHlsZXMoKTtsZXQgeT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpO2lmKHkmJnRoaXMuYmxvY2smJih5LmlubmVySFRNTD10aGlzLnJlbmRlckJsb2NrQ29udGVudCgpKSx0aGlzLmJsb2NrKXtsZXQgRT1ZdC5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7aWYoRSl7bGV0IEM9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKTtDJiZFLnNldHVwKEMsdGhpcy5ibG9jayx0aGlzLmhhbmRsZXJzKTtyZXR1cm59fWxldCB3PXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7aWYodyl7dy5zZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiLHRoaXMuYmxvY2suaWQpLHcuc2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLXR5cGUiLHRoaXMuYmxvY2sudHlwZSksdy5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsQz0+e3RoaXMuaGFuZGxlcnM/Lm9uSW5wdXQ/LihDKTtsZXQgej10aGlzLmdldEN1cnNvclBvc2l0aW9uKHcpO3ohPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj16KX0pLHcuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsQz0+e2xldCB6PXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24odyk7eiE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPXopLHRoaXMuaGFuZGxlcnM/Lm9uS2V5RG93bj8uKEMpfSksdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9Pnt0aGlzLmhhbmRsZXJzPy5vbkZvY3VzPy4oKX0pLHcuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9Pnt0aGlzLmhhbmRsZXJzPy5vbkJsdXI/LigpfSksdy5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwoKT0+e3RoaXMuaGFuZGxlcnM/Lm9uQ29tcG9zaXRpb25TdGFydD8uKCl9KSx3LmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwoKT0+e3RoaXMuaGFuZGxlcnM/Lm9uQ29tcG9zaXRpb25FbmQ/LigpfSksdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixDPT57bGV0IHo9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbih3KTt6IT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249eiksdGhpcy5oYW5kbGVycz8ub25Nb3VzZVVwPy4oQyl9KSx3LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3NldFRpbWVvdXQoKCk9PntsZXQgQz10aGlzLmdldEN1cnNvclBvc2l0aW9uKHcpO0MhPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1DKX0sMCl9KTtsZXQgRT0oKT0+e2xldCBDPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighQ3x8Qy5yYW5nZUNvdW50PT09MClyZXR1cm47bGV0IHo9Qy50b1N0cmluZygpO2lmKHoubGVuZ3RoPT09MCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0JiYodGhpcy5sYXN0U2VsZWN0ZWRUZXh0PSIiLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLHtkZXRhaWw6e3RleHQ6IiIsYmxvY2tJZDp0aGlzLmJsb2NrLmlkLGhhc1NlbGVjdGlvbjohMX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSk7cmV0dXJufWxldCBQPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7aWYoIVApcmV0dXJuO2xldCAkPXRoaXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3QsSD1bXTskJiZILnB1c2goJCksdGhpcy5zaGFkb3dSb290JiZILnB1c2godGhpcy5zaGFkb3dSb290KTtsZXQgTD1JZS5nZXRTZWxlY3Rpb25JbmZvKC4uLkgpO2lmKCFMKXJldHVybjtsZXQgaz1JZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShQLEwuc3RhcnRDb250YWluZXIpLE49SWUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oUCxMLmVuZENvbnRhaW5lcik7aWYoa3x8Til7aWYoeiE9PXRoaXMubGFzdFNlbGVjdGVkVGV4dCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0PXo7bGV0IFM9SWUuY3JlYXRlUmFuZ2VGcm9tSW5mbyhMKSxUPVMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIse2RldGFpbDp7dGV4dDp6LnRyaW0oKSxibG9ja0lkOnRoaXMuYmxvY2suaWQscmFuZ2U6UyxyZWN0OlQsaGFzU2VsZWN0aW9uOiEwfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfX1lbHNlIHRoaXMubGFzdFNlbGVjdGVkVGV4dCYmKHRoaXMubGFzdFNlbGVjdGVkVGV4dD0iIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIix7ZGV0YWlsOnt0ZXh0OiIiLGJsb2NrSWQ6dGhpcy5ibG9jay5pZCxoYXNTZWxlY3Rpb246ITF9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLEUpLHRoaXMuX3NlbGVjdGlvbkhhbmRsZXI9RSx3LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwoKT0+e2xldCBDPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24odyk7QyE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPUMpfSksdGhpcy5ibG9jay5jb250ZW50JiYody5pbm5lckhUTUw9dGhpcy5ibG9jay5jb250ZW50KX10aGlzLmJsb2NrRWxlbWVudD13fXJlbmRlcigpe3JldHVybiB0aGlzLmJsb2NrP0pvYDxkaXYgY2xhc3M9Ind5c2l3eWctYmxvY2stY29udGFpbmVyIj48L2Rpdj5gOkpvYGB9cmVuZGVyQmxvY2tDb250ZW50KCl7aWYoIXRoaXMuYmxvY2spcmV0dXJuIiI7bGV0IHk9WXQuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpO2lmKHkpcmV0dXJuIHkucmVuZGVyKHRoaXMuYmxvY2ssdGhpcy5pc1NlbGVjdGVkKTtsZXQgdz10aGlzLmlzU2VsZWN0ZWQ/IiBzZWxlY3RlZCI6IiI7cmV0dXJuYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrICR7dGhpcy5ibG9jay50eXBlfSR7d30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICA+PC9kaXY+CiAgICBgfWZvY3VzKCl7bGV0IHk9WXQuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpO2lmKHkmJnkuZm9jdXMpe2xldCBFPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIiksQz17c2hhZG93Um9vdDp0aGlzLnNoYWRvd1Jvb3QsY29tcG9uZW50OnRoaXN9O3JldHVybiB5LmZvY3VzKEUsQyl9aWYodGhpcy5ibG9jayYmdi5OT05fRURJVEFCTEVfVFlQRVMuaW5jbHVkZXModGhpcy5ibG9jay50eXBlKSl7bGV0IEU9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAuYmxvY2suJHt0aGlzLmJsb2NrLnR5cGV9YCk7RSYmRS5mb2N1cygpO3JldHVybn1sZXQgdz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO3cmJih3Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fHcuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCJ0cnVlIiksdy5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT13JiZ0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQhPT13JiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dy5mb2N1cygpfSkpfWZvY3VzV2l0aEN1cnNvcih5PSJlbmQiKXtsZXQgdz1ZdC5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7aWYodyYmdy5mb2N1c1dpdGhDdXJzb3Ipe2xldCB6PXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIiksUD17c2hhZG93Um9vdDp0aGlzLnNoYWRvd1Jvb3QsY29tcG9uZW50OnRoaXN9O3JldHVybiB3LmZvY3VzV2l0aEN1cnNvcih6LHksUCl9aWYodGhpcy5ibG9jayYmdi5OT05fRURJVEFCTEVfVFlQRVMuaW5jbHVkZXModGhpcy5ibG9jay50eXBlKSl7dGhpcy5mb2N1cygpO3JldHVybn1sZXQgRT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO2lmKCFFKXJldHVybjtFLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fEUuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCJ0cnVlIiksRS5mb2N1cygpO2xldCBDPSgpPT57eT09PSJzdGFydCI/dGhpcy5zZXRDdXJzb3JUb1N0YXJ0KCk6eT09PSJlbmQiP3RoaXMuc2V0Q3Vyc29yVG9FbmQoKTp0eXBlb2YgeT09Im51bWJlciImJkllLnNldEN1cnNvclBvc2l0aW9uKEUseSl9O2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1FfHx0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1FP0MoKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1FfHx0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1FKSYmQygpfSl9Z2V0Q3Vyc29yUG9zaXRpb24oeSl7bGV0IHc9WXQuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpO2lmKHcmJncuZ2V0Q3Vyc29yUG9zaXRpb24pe2xldCBIPXtzaGFkb3dSb290OnRoaXMuc2hhZG93Um9vdCxjb21wb25lbnQ6dGhpc307cmV0dXJuIHcuZ2V0Q3Vyc29yUG9zaXRpb24oeSxIKX1sZXQgQz10aGlzLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpPy5zaGFkb3dSb290LHo9W107QyYmei5wdXNoKEMpLHRoaXMuc2hhZG93Um9vdCYmei5wdXNoKHRoaXMuc2hhZG93Um9vdCk7bGV0IFA9SWUuZ2V0U2VsZWN0aW9uSW5mbyguLi56KTtpZihjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IFNlbGVjdGlvbiBpbmZvIGZyb20gc2hhZG93IERPTXM6Iix7c2VsZWN0aW9uSW5mbzpQLHNoYWRvd1Jvb3RzQ291bnQ6ei5sZW5ndGh9KSwhUClyZXR1cm4gY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBObyBzZWxlY3Rpb24gZm91bmQiKSxudWxsO2lmKGNvbnNvbGUubG9nKCJnZXRDdXJzb3JQb3NpdGlvbjogUmFuZ2UgaW5mbzoiLHtzdGFydENvbnRhaW5lcjpQLnN0YXJ0Q29udGFpbmVyLHN0YXJ0T2Zmc2V0OlAuc3RhcnRPZmZzZXQsY29sbGFwc2VkOlAuY29sbGFwc2VkLHN0YXJ0Q29udGFpbmVyVGV4dDpQLnN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50fSksIXkuY29udGFpbnMoUC5zdGFydENvbnRhaW5lcikpcmV0dXJuIGNvbnNvbGUubG9nKCJnZXRDdXJzb3JQb3NpdGlvbjogUmFuZ2Ugbm90IGluIGVsZW1lbnQiKSxudWxsO2xldCBfPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Xy5zZWxlY3ROb2RlQ29udGVudHMoeSksXy5zZXRFbmQoUC5zdGFydENvbnRhaW5lcixQLnN0YXJ0T2Zmc2V0KTtsZXQgJD1fLnRvU3RyaW5nKCkubGVuZ3RoO3JldHVybiBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IENhbGN1bGF0ZWQgcG9zaXRpb246Iix7cG9zaXRpb246JCxwcmVDYXJldFRleHQ6Xy50b1N0cmluZygpLGVsZW1lbnRUZXh0OnkudGV4dENvbnRlbnQsZWxlbWVudFRleHRMZW5ndGg6eS50ZXh0Q29udGVudD8ubGVuZ3RofSksJH1nZXRDb250ZW50KCl7bGV0IHk9WXQuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpO2lmKHkmJnkuZ2V0Q29udGVudCl7bGV0IEM9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKSx6PXtzaGFkb3dSb290OnRoaXMuc2hhZG93Um9vdCxjb21wb25lbnQ6dGhpc307cmV0dXJuIHkuZ2V0Q29udGVudChDLHopfWxldCB3PXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7aWYoIXcpcmV0dXJuIiI7bGV0IEU9dy5pbm5lckhUTUx8fCIiO3JldHVybiBjb25zb2xlLmxvZygiR2V0dGluZyBjb250ZW50IGZyb20gYmxvY2s6IixFKSxFfXNldENvbnRlbnQoeSl7bGV0IHc9WXQuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpO2lmKHcmJncuc2V0Q29udGVudCl7bGV0IHo9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKSxQPXtzaGFkb3dSb290OnRoaXMuc2hhZG93Um9vdCxjb21wb25lbnQ6dGhpc307cmV0dXJuIHcuc2V0Q29udGVudCh6LHksUCl9bGV0IEU9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTtpZighRSlyZXR1cm47bGV0IEM9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PUV8fHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PUU7RS5pbm5lckhUTUw9eSxDJiZFLmZvY3VzKCl9c2V0Q3Vyc29yVG9TdGFydCgpe2xldCB5PVl0LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTtpZih5JiZ5LnNldEN1cnNvclRvU3RhcnQpe2xldCBFPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIiksQz17c2hhZG93Um9vdDp0aGlzLnNoYWRvd1Jvb3QsY29tcG9uZW50OnRoaXN9O3JldHVybiB5LnNldEN1cnNvclRvU3RhcnQoRSxDKX1sZXQgdz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO3cmJl8yLnNldEN1cnNvclRvU3RhcnQodyl9c2V0Q3Vyc29yVG9FbmQoKXtsZXQgeT1ZdC5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7aWYoeSYmeS5zZXRDdXJzb3JUb0VuZCl7bGV0IEU9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKSxDPXtzaGFkb3dSb290OnRoaXMuc2hhZG93Um9vdCxjb21wb25lbnQ6dGhpc307cmV0dXJuIHkuc2V0Q3Vyc29yVG9FbmQoRSxDKX1sZXQgdz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO3cmJl8yLnNldEN1cnNvclRvRW5kKHcpfWdldENvbnRleHRNZW51SXRlbXMoKXtpZighdGhpcy5ibG9ja3x8dGhpcy5ibG9jay50eXBlPT09ImRpdmlkZXIiKXJldHVybltdO2xldCB5PVAxLmdldFNsYXNoTWVudUl0ZW1zKCksdz10aGlzLmJsb2NrLnR5cGUsRT10aGlzLnd5c2l3eWdDb21wb25lbnQsQz10aGlzLmJsb2NrLmlkLFA9W3tuYW1lOiJDaGFuZ2UgVHlwZSIsaWNvbk5hbWU6InR5cGUiLHN1Ym1lbnU6eS5maWx0ZXIoXz0+Xy50eXBlIT09dyYmXy50eXBlIT09ImRpdmlkZXIiKS5tYXAoXz0+KHtuYW1lOl8ubGFiZWwsaWNvbk5hbWU6Xy5pY29uLnJlcGxhY2UoImx1Y2lkZToiLCIiKSxhY3Rpb246YXN5bmMoKT0+e2lmKEUmJkUuYmxvY2tPcGVyYXRpb25zKXtsZXQgJD1FLmJsb2Nrcy5maW5kKEg9PkguaWQ9PT1DKTskJiYoJC50eXBlPV8udHlwZSwkLmNvbnRlbnQ9JC5jb250ZW50fHwiIixfLnR5cGU9PT0iY29kZSI/JC5tZXRhZGF0YT17bGFuZ3VhZ2U6InR5cGVzY3JpcHQifTpfLnR5cGU9PT0ibGlzdCI/JC5tZXRhZGF0YT17bGlzdFR5cGU6ImJ1bGxldCJ9Ol8udHlwZT09PSJpbWFnZSI/KCQuY29udGVudD0iIiwkLm1ldGFkYXRhPXt1cmw6IiIsbG9hZGluZzohMX0pOl8udHlwZT09PSJ5b3V0dWJlIj8oJC5jb250ZW50PSIiLCQubWV0YWRhdGE9e3ZpZGVvSWQ6IiIsdXJsOiIifSk6Xy50eXBlPT09Im1hcmtkb3duIj8kLm1ldGFkYXRhPXtzaG93UHJldmlldzohMX06Xy50eXBlPT09Imh0bWwiPyQubWV0YWRhdGE9e3Nob3dQcmV2aWV3OiExfTpfLnR5cGU9PT0iYXR0YWNobWVudCImJigkLmNvbnRlbnQ9IiIsJC5tZXRhZGF0YT17ZmlsZXM6W119KSxFLnVwZGF0ZUJsb2NrRWxlbWVudChDKSxFLnVwZGF0ZVZhbHVlKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57RS5ibG9ja09wZXJhdGlvbnMuZm9jdXNCbG9jayhDKX0pKX19fSkpfV07cmV0dXJuWyJpbWFnZSIsImRpdmlkZXIiLCJ5b3V0dWJlIiwiYXR0YWNobWVudCJdLmluY2x1ZGVzKHRoaXMuYmxvY2sudHlwZSl8fFAucHVzaCh7ZGl2aWRlcjohMH0se25hbWU6IkN1dCIsaWNvbk5hbWU6InNjaXNzb3JzIixzaG9ydGN1dDoiQ21kK1giLGFjdGlvbjphc3luYygpPT57ZG9jdW1lbnQuZXhlY0NvbW1hbmQoImN1dCIpfX0se25hbWU6IkNvcHkiLGljb25OYW1lOiJjb3B5IixzaG9ydGN1dDoiQ21kK0MiLGFjdGlvbjphc3luYygpPT57ZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKX19LHtuYW1lOiJQYXN0ZSIsaWNvbk5hbWU6ImNsaXBib2FyZCIsc2hvcnRjdXQ6IkNtZCtWIixhY3Rpb246YXN5bmMoKT0+e2RvY3VtZW50LmV4ZWNDb21tYW5kKCJwYXN0ZSIpfX0pLFAucHVzaCh7ZGl2aWRlcjohMH0se25hbWU6IkRlbGV0ZSBCbG9jayIsaWNvbk5hbWU6InRyYXNoMiIsYWN0aW9uOmFzeW5jKCk9PntFJiZFLmJsb2NrT3BlcmF0aW9ucyYmRS5ibG9ja09wZXJhdGlvbnMuZGVsZXRlQmxvY2soQyl9fSksUH1nZXRTcGxpdENvbnRlbnQoKXtjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBTdGFydGluZy4uLiIpO2xldCB5PVl0LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTtpZihjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBDaGVja2luZyBmb3IgaGFuZGxlciIse2Jsb2NrVHlwZTp0aGlzLmJsb2NrLnR5cGUsaGFzSGFuZGxlcjohIXksaGFzU3BsaXRNZXRob2Q6ISEoeSYmeS5nZXRTcGxpdENvbnRlbnQpfSkseSYmeS5nZXRTcGxpdENvbnRlbnQpe2xldCBSPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7Y29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRm91bmQgY29udGFpbmVyIix7Y29udGFpbmVyOiEhUixjb250YWluZXJIVE1MOlI/LmlubmVySFRNTD8uc3Vic3RyaW5nKDAsMTAwKX0pO2xldCBBPXtzaGFkb3dSb290OnRoaXMuc2hhZG93Um9vdCxjb21wb25lbnQ6dGhpc307cmV0dXJuIHkuZ2V0U3BsaXRDb250ZW50KFIsQSl9bGV0IHc9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTtpZighdylyZXR1cm4gY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogTm8gZWRpdGFibGUgZWxlbWVudCBmb3VuZCIpLG51bGw7Y29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRWxlbWVudCBpbmZvOiIse2Jsb2NrVHlwZTp0aGlzLmJsb2NrLnR5cGUsaW5uZXJIVE1MOncuaW5uZXJIVE1MLHRleHRDb250ZW50OncudGV4dENvbnRlbnQsdGV4dExlbmd0aDp3LnRleHRDb250ZW50Py5sZW5ndGh9KTtsZXQgQz10aGlzLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpPy5zaGFkb3dSb290LHo9W107QyYmei5wdXNoKEMpLHRoaXMuc2hhZG93Um9vdCYmei5wdXNoKHRoaXMuc2hhZG93Um9vdCk7bGV0IFA9SWUuZ2V0U2VsZWN0aW9uSW5mbyguLi56KTtpZihjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBTZWxlY3Rpb24gaW5mbyBmcm9tIHNoYWRvdyBET01zOiIse3NlbGVjdGlvbkluZm86UCxzaGFkb3dSb290c0NvdW50OnoubGVuZ3RofSksIVApe2lmKGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IE5vIHNlbGVjdGlvbiwgdXNpbmcgbGFzdCBrbm93biBwb3NpdGlvbjoiLHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24pLHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24hPT1udWxsKXtsZXQgUj13LnRleHRDb250ZW50fHwiIixBPU1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sUi5sZW5ndGgpO3JldHVybiBjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBTcGxpdHRpbmcgd2l0aCBsYXN0IGtub3duIHBvc2l0aW9uOiIse3BvczpBLGZ1bGxUZXh0TGVuZ3RoOlIubGVuZ3RoLGJlZm9yZTpSLnN1YnN0cmluZygwLEEpLGFmdGVyOlIuc3Vic3RyaW5nKEEpfSkse2JlZm9yZTpSLnN1YnN0cmluZygwLEEpLGFmdGVyOlIuc3Vic3RyaW5nKEEpfX1yZXR1cm4gbnVsbH1pZihjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBTZWxlY3Rpb24gcmFuZ2U6Iix7c3RhcnRDb250YWluZXI6UC5zdGFydENvbnRhaW5lcixzdGFydE9mZnNldDpQLnN0YXJ0T2Zmc2V0LHN0YXJ0Q29udGFpbmVySW5FbGVtZW50OncuY29udGFpbnMoUC5zdGFydENvbnRhaW5lcil9KSwhSWUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00odyxQLnN0YXJ0Q29udGFpbmVyKSl7aWYoY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU2VsZWN0aW9uIG5vdCBpbiB0aGlzIGJsb2NrLCB1c2luZyBsYXN0IGtub3duIHBvc2l0aW9uOiIsdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiksdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiE9PW51bGwpe2xldCBSPXcudGV4dENvbnRlbnR8fCIiLEE9TWF0aC5taW4odGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbixSLmxlbmd0aCk7cmV0dXJue2JlZm9yZTpSLnN1YnN0cmluZygwLEEpLGFmdGVyOlIuc3Vic3RyaW5nKEEpfX1yZXR1cm4gbnVsbH1sZXQgXz10aGlzLmdldEN1cnNvclBvc2l0aW9uKHcpO2lmKGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEN1cnNvciBwb3NpdGlvbiBmb3IgSFRNTCBzcGxpdDoiLF8pLF89PT1udWxsfHxfPT09MClyZXR1cm4gY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogQ3Vyc29yIGF0IHN0YXJ0IG9yIG51bGwsIG1vdmluZyBhbGwgY29udGVudCIpLHtiZWZvcmU6IiIsYWZ0ZXI6dy5pbm5lckhUTUx9O2xldCAkPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksSD1kb2N1bWVudC5jcmVhdGVSYW5nZSgpOyQuc2V0U3RhcnQodywwKSwkLnNldEVuZChQLnN0YXJ0Q29udGFpbmVyLFAuc3RhcnRPZmZzZXQpLEguc2V0U3RhcnQoUC5zdGFydENvbnRhaW5lcixQLnN0YXJ0T2Zmc2V0KSxILnNldEVuZCh3LHcuY2hpbGROb2Rlcy5sZW5ndGgpO2xldCBMPSQuY2xvbmVDb250ZW50cygpLGs9SC5jbG9uZUNvbnRlbnRzKCksTj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtOLmFwcGVuZENoaWxkKEwpO2xldCBTPU4uaW5uZXJIVE1MO04uaW5uZXJIVE1MPSIiLE4uYXBwZW5kQ2hpbGQoayk7bGV0IFQ9Ti5pbm5lckhUTUw7cmV0dXJuIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEZpbmFsIHNwbGl0IHJlc3VsdDoiLHtjdXJzb3JQb3M6XyxiZWZvcmVIdG1sOlMsYmVmb3JlTGVuZ3RoOlMubGVuZ3RoLGJlZm9yZUh0bWxQcmV2aWV3OlMuc3Vic3RyaW5nKDAsMTAwKSsoUy5sZW5ndGg+MTAwPyIuLi4iOiIiKSxhZnRlckh0bWw6VCxhZnRlckxlbmd0aDpULmxlbmd0aCxhZnRlckh0bWxQcmV2aWV3OlQuc3Vic3RyaW5nKDAsMTAwKSsoVC5sZW5ndGg+MTAwPyIuLi4iOiIiKX0pLHtiZWZvcmU6UyxhZnRlcjpUfX1zdGF0aWN7ZW8ocixhKX19O3JldHVybiB2PXJ9KSgpO2ZlKCk7QmUoKTt2YXIgZnM9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxWMj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sTU90PSgoKT0+e2xldCB0PVtjZSgiZGVlcy1pbnB1dC13eXNpd3lnIildLGUsYT1bXSxyLGk9WGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W107dmFyIEg9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBMPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6U3RyaW5nfSldLGY9W0Qoe3R5cGU6U3RyaW5nfSldLGQ9W2xlKCldLGI9W2xlKCldLHY9W2xlKCldLEU9W2xlKCldLFA9W2xlKCldLGZzKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJ2YWx1ZSJpbiBrLGdldDprPT5rLnZhbHVlLHNldDooayxOKT0+e2sudmFsdWU9Tn19LG1ldGFkYXRhOkx9LHMsbCksZnModGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJvdXRwdXRGb3JtYXQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJvdXRwdXRGb3JtYXQiaW4gayxnZXQ6az0+ay5vdXRwdXRGb3JtYXQsc2V0OihrLE4pPT57ay5vdXRwdXRGb3JtYXQ9Tn19LG1ldGFkYXRhOkx9LGMsdSksZnModGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJibG9ja3MiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJibG9ja3MiaW4gayxnZXQ6az0+ay5ibG9ja3Msc2V0OihrLE4pPT57ay5ibG9ja3M9Tn19LG1ldGFkYXRhOkx9LGgsZyksZnModGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkcmFnZ2VkQmxvY2tJZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImRyYWdnZWRCbG9ja0lkImluIGssZ2V0Oms9PmsuZHJhZ2dlZEJsb2NrSWQsc2V0OihrLE4pPT57ay5kcmFnZ2VkQmxvY2tJZD1OfX0sbWV0YWRhdGE6TH0seCxtKSxmcyh0aGlzLG51bGwsdix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRyYWdPdmVyQmxvY2tJZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImRyYWdPdmVyQmxvY2tJZCJpbiBrLGdldDprPT5rLmRyYWdPdmVyQmxvY2tJZCxzZXQ6KGssTik9PntrLmRyYWdPdmVyQmxvY2tJZD1OfX0sbWV0YWRhdGE6TH0seSx3KSxmcyh0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRyYWdPdmVyUG9zaXRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJkcmFnT3ZlclBvc2l0aW9uImluIGssZ2V0Oms9PmsuZHJhZ092ZXJQb3NpdGlvbixzZXQ6KGssTik9PntrLmRyYWdPdmVyUG9zaXRpb249Tn19LG1ldGFkYXRhOkx9LEMseiksZnModGhpcyxudWxsLFAse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZFRleHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJzZWxlY3RlZFRleHQiaW4gayxnZXQ6az0+ay5zZWxlY3RlZFRleHQsc2V0OihrLE4pPT57ay5zZWxlY3RlZFRleHQ9Tn19LG1ldGFkYXRhOkx9LF8sJCksZnMobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6TH0sbnVsbCxhKSxIPXI9ZS52YWx1ZSxMJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkx9KX1zdGF0aWMgZGVtbz15T3Q7c3RhdGljIGRlbW9Hcm91cD0iSW5wdXQiOyNlPVYyKHRoaXMscywiIik7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKEwpe3RoaXMuI2U9TH0jdD0oVjIodGhpcyxsKSxWMih0aGlzLGMsImh0bWwiKSk7Z2V0IG91dHB1dEZvcm1hdCgpe3JldHVybiB0aGlzLiN0fXNldCBvdXRwdXRGb3JtYXQoTCl7dGhpcy4jdD1MfSNhPShWMih0aGlzLHUpLFYyKHRoaXMsaCxbe2lkOlAxLmdlbmVyYXRlQmxvY2tJZCgpLHR5cGU6InBhcmFncmFwaCIsY29udGVudDoiIn1dKSk7Z2V0IGJsb2Nrcygpe3JldHVybiB0aGlzLiNhfXNldCBibG9ja3MoTCl7dGhpcy4jYT1MfXNlbGVjdGVkQmxvY2tJZD0oVjIodGhpcyxnKSxudWxsKTtzbGFzaE1lbnU9V0VlLmdldEluc3RhbmNlKCk7I3I9VjIodGhpcyx4LG51bGwpO2dldCBkcmFnZ2VkQmxvY2tJZCgpe3JldHVybiB0aGlzLiNyfXNldCBkcmFnZ2VkQmxvY2tJZChMKXt0aGlzLiNyPUx9I2k9KFYyKHRoaXMsbSksVjIodGhpcyx5LG51bGwpKTtnZXQgZHJhZ092ZXJCbG9ja0lkKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGRyYWdPdmVyQmxvY2tJZChMKXt0aGlzLiNpPUx9I289KFYyKHRoaXMsdyksVjIodGhpcyxDLG51bGwpKTtnZXQgZHJhZ092ZXJQb3NpdGlvbigpe3JldHVybiB0aGlzLiNvfXNldCBkcmFnT3ZlclBvc2l0aW9uKEwpe3RoaXMuI289TH1mb3JtYXR0aW5nTWVudT0oVjIodGhpcyx6KSxHRWUuZ2V0SW5zdGFuY2UoKSk7I3M9VjIodGhpcyxfLCIiKTtnZXQgc2VsZWN0ZWRUZXh0KCl7cmV0dXJuIHRoaXMuI3N9c2V0IHNlbGVjdGVkVGV4dChMKXt0aGlzLiNzPUx9ZWRpdG9yQ29udGVudFJlZj1WMih0aGlzLCQpO2lzQ29tcG9zaW5nPSExO2Jsb2NrT3BlcmF0aW9ucztpbnB1dEhhbmRsZXI7a2V5Ym9hcmRIYW5kbGVyO2RyYWdEcm9wSGFuZGxlcjtoaXN0b3J5O3N0YXRpYyBzdHlsZXM9W3hlLC4uLlhlLmJhc2VTdHlsZXMscC5kZWZhdWx0U3R5bGVzLHdPdF07Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYmxvY2tPcGVyYXRpb25zPW5ldyB3aih0aGlzKSx0aGlzLmlucHV0SGFuZGxlcj1uZXcgemoodGhpcyksdGhpcy5rZXlib2FyZEhhbmRsZXI9bmV3IGtqKHRoaXMpLHRoaXMuZHJhZ0Ryb3BIYW5kbGVyPW5ldyBTaih0aGlzKSx0aGlzLmhpc3Rvcnk9bmV3IENqfWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5pbnB1dEhhbmRsZXI/LmRlc3Ryb3koKSx0aGlzLmJsdXJUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVvdXQpLHRoaXMuYmx1clRpbWVvdXQ9bnVsbCl9YXN5bmMgZmlyc3RVcGRhdGVkKCl7aWYodGhpcy52YWx1ZSYmdGhpcy52YWx1ZS50cmltKCkubGVuZ3RoPjApe2xldCBMPXRoaXMub3V0cHV0Rm9ybWF0PT09Imh0bWwiP2ZyLnBhcnNlSHRtbFRvQmxvY2tzKHRoaXMudmFsdWUpOmZyLnBhcnNlTWFya2Rvd25Ub0Jsb2Nrcyh0aGlzLnZhbHVlKTtMLmxlbmd0aD4wJiYodGhpcy5ibG9ja3M9TCl9dGhpcy51cGRhdGVWYWx1ZSgpLHRoaXMuZWRpdG9yQ29udGVudFJlZj10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmVkaXRvci1jb250ZW50IiksdGhpcy5lZGl0b3JDb250ZW50UmVmJiZ0aGlzLmVkaXRvckNvbnRlbnRSZWYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLEw9PnRoaXMuaGFuZGxlRWRpdG9yQ2xpY2soTCkpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmxvY2stdGV4dC1zZWxlY3RlZCIsTD0+e2lmKCF0aGlzLnNsYXNoTWVudS52aXNpYmxlJiZMLmRldGFpbC5oYXNTZWxlY3Rpb24mJkwuZGV0YWlsLnRleHQubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkVGV4dD1MLmRldGFpbC50ZXh0LEwuZGV0YWlsLnJlY3QpKXtsZXQgaz17eDpMLmRldGFpbC5yZWN0LmxlZnQrTC5kZXRhaWwucmVjdC53aWR0aC8yLHk6TWF0aC5tYXgoNDUsTC5kZXRhaWwucmVjdC50b3AtNDUpfTt0aGlzLmZvcm1hdHRpbmdNZW51LnNob3coayxhc3luYyBOPT5hd2FpdCB0aGlzLmFwcGx5Rm9ybWF0KE4pKX19KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEw9PntsZXQgaz10aGlzLmZvcm1hdHRpbmdNZW51LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5mb3JtYXR0aW5nLW1lbnUiKTtpZihrJiZrLmNvbnRhaW5zKEwudGFyZ2V0KSlyZXR1cm47bGV0IE49d2luZG93LmdldFNlbGVjdGlvbigpO04mJk4udG9TdHJpbmcoKS50cmltKCkubGVuZ3RoPjB8fHRoaXMuZm9ybWF0dGluZ01lbnUudmlzaWJsZSYmdGhpcy5oaWRlRm9ybWF0dGluZ01lbnUoKX0pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTD0+e2xldCBrPUwudGFyZ2V0OyF0aGlzLmNvbnRhaW5zKGspJiYhdGhpcy5zaGFkb3dSb290Py5jb250YWlucyhrKXx8KChMLm1ldGFLZXl8fEwuY3RybEtleSkmJiFMLnNoaWZ0S2V5JiZMLmtleT09PSJ6Ij8oTC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudW5kbygpKTooTC5tZXRhS2V5fHxMLmN0cmxLZXkpJiZMLnNoaWZ0S2V5JiZMLmtleT09PSJ6IiYmKEwucHJldmVudERlZmF1bHQoKSx0aGlzLnJlZG8oKSkpfSksdGhpcy5oaXN0b3J5LnNhdmVTdGF0ZSh0aGlzLmJsb2Nrcyx0aGlzLnNlbGVjdGVkQmxvY2tJZCksdGhpcy5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCl9cmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpe3RoaXMuZWRpdG9yQ29udGVudFJlZiYmKHRoaXMuZWRpdG9yQ29udGVudFJlZi5pbm5lckhUTUw9IiIsdGhpcy5ibG9ja3MuZm9yRWFjaChMPT57bGV0IGs9dGhpcy5jcmVhdGVCbG9ja0VsZW1lbnQoTCk7dGhpcy5lZGl0b3JDb250ZW50UmVmLmFwcGVuZENoaWxkKGspfSkpfWNyZWF0ZUJsb2NrRWxlbWVudChMKXtsZXQgaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpZihrLmNsYXNzTmFtZT0iYmxvY2std3JhcHBlciIsay5zZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiLEwuaWQpLEwudHlwZSE9PSJkaXZpZGVyIil7bGV0IFM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Uy5jbGFzc05hbWU9ImRyYWctaGFuZGxlIixTLmRyYWdnYWJsZT0hMCxTLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsVD0+dGhpcy5kcmFnRHJvcEhhbmRsZXIuaGFuZGxlRHJhZ1N0YXJ0KFQsTCkpLGsuYXBwZW5kQ2hpbGQoUyl9bGV0IE49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGVlcy13eXNpd3lnLWJsb2NrIik7cmV0dXJuIE4uYmxvY2s9TCxOLmlzU2VsZWN0ZWQ9dGhpcy5zZWxlY3RlZEJsb2NrSWQ9PT1MLmlkLE4ud3lzaXd5Z0NvbXBvbmVudD10aGlzLE4uaGFuZGxlcnM9e29uSW5wdXQ6Uz0+dGhpcy5pbnB1dEhhbmRsZXIuaGFuZGxlQmxvY2tJbnB1dChTLEwpLG9uS2V5RG93bjpTPT50aGlzLmtleWJvYXJkSGFuZGxlci5oYW5kbGVCbG9ja0tleURvd24oUyxMKSxvbkZvY3VzOigpPT50aGlzLmhhbmRsZUJsb2NrRm9jdXMoTCksb25CbHVyOigpPT50aGlzLmhhbmRsZUJsb2NrQmx1cihMKSxvbkNvbXBvc2l0aW9uU3RhcnQ6KCk9PnRoaXMuaXNDb21wb3Npbmc9ITAsb25Db21wb3NpdGlvbkVuZDooKT0+dGhpcy5pc0NvbXBvc2luZz0hMSxvbk1vdXNlVXA6Uz0+dGhpcy5oYW5kbGVUZXh0U2VsZWN0aW9uKFMpLG9uUmVxdWVzdFVwZGF0ZTooKT0+dGhpcy51cGRhdGVCbG9ja0VsZW1lbnQoTC5pZCl9LGsuYXBwZW5kQ2hpbGQoTiksay5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsUz0+dGhpcy5kcmFnRHJvcEhhbmRsZXIuaGFuZGxlRHJhZ092ZXIoUyxMKSksay5hZGRFdmVudExpc3RlbmVyKCJkcm9wIixTPT50aGlzLmRyYWdEcm9wSGFuZGxlci5oYW5kbGVEcm9wKFMsTCkpLGsuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwoKT0+dGhpcy5kcmFnRHJvcEhhbmRsZXIuaGFuZGxlRHJhZ0xlYXZlKEwpKSxrfXVwZGF0ZUJsb2NrRWxlbWVudChMKXtsZXQgaz10aGlzLmJsb2Nrcy5maW5kKFQ9PlQuaWQ9PT1MKTtpZighaylyZXR1cm47bGV0IE49dGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke0x9Il1gKTtpZighTilyZXR1cm47bGV0IFM9dGhpcy5jcmVhdGVCbG9ja0VsZW1lbnQoayk7Ti5yZXBsYWNlV2l0aChTKX1yZW5kZXIoKXtyZXR1cm4gSm9gCiAgICAgIDxkZWVzLWxhYmVsCiAgICAgICAgLmxhYmVsPSIke3RoaXMubGFiZWx9IgogICAgICAgIC5kZXNjcmlwdGlvbj0iJHt0aGlzLmRlc2NyaXB0aW9ufSIKICAgICAgICAucmVxdWlyZWQ9IiR7dGhpcy5yZXF1aXJlZH0iCiAgICAgID48L2RlZXMtbGFiZWw+CiAgICAgIDxkaXYgY2xhc3M9Ind5c2l3eWctY29udGFpbmVyIj4KICAgICAgICA8ZGl2IAogICAgICAgICAgY2xhc3M9ImVkaXRvci1jb250ZW50ICR7dGhpcy5kcmFnZ2VkQmxvY2tJZD8iZHJhZ2dpbmciOiIifSIKICAgICAgICAgIGlkPSJlZGl0b3ItY29udGVudCIKICAgICAgICA+CiAgICAgICAgICA8IS0tIEJsb2NrcyB3aWxsIGJlIHJlbmRlcmVkIHByb2dyYW1tYXRpY2FsbHkgLS0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1oYW5kbGVTbGFzaE1lbnVLZXlib2FyZChMKXtzd2l0Y2goTC5rZXkpe2Nhc2UiQXJyb3dEb3duIjpMLnByZXZlbnREZWZhdWx0KCksdGhpcy5zbGFzaE1lbnUubmF2aWdhdGUoImRvd24iKTticmVhaztjYXNlIkFycm93VXAiOkwucHJldmVudERlZmF1bHQoKSx0aGlzLnNsYXNoTWVudS5uYXZpZ2F0ZSgidXAiKTticmVhaztjYXNlIkVudGVyIjpMLnByZXZlbnREZWZhdWx0KCksdGhpcy5zbGFzaE1lbnUuc2VsZWN0Q3VycmVudCgpO2JyZWFrO2Nhc2UiRXNjYXBlIjpMLnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZVNsYXNoTWVudSghMCk7YnJlYWt9fWNsb3NlU2xhc2hNZW51KEw9ITEpe2lmKEwmJnRoaXMuc2VsZWN0ZWRCbG9ja0lkKXtsZXQgaz10aGlzLmJsb2Nrcy5maW5kKE49Pk4uaWQ9PT10aGlzLnNlbGVjdGVkQmxvY2tJZCk7aWYoayl7bGV0IFM9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2suaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYoUyl7bGV0IFQ9Uy5nZXRDb250ZW50KCk7aWYoVC5zdGFydHNXaXRoKCIvIikpe2xldCBSPVQucmVwbGFjZSgvXlwvW15cc10qXHMqLywiIikudHJpbSgpO1Muc2V0Q29udGVudChSKSxrLmNvbnRlbnQ9UixyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntTLmZvY3VzV2l0aEN1cnNvcigwKX0pfX19fXRoaXMuc2xhc2hNZW51LmhpZGUoKX1oYW5kbGVCbG9ja0ZvY3VzKEwpe3RoaXMuYmx1clRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCksdGhpcy5ibHVyVGltZW91dD1udWxsKTtsZXQgaz10aGlzLnNlbGVjdGVkQmxvY2tJZDtpZih0aGlzLnNlbGVjdGVkQmxvY2tJZD1MLmlkLGshPT1MLmlkKXtpZihrKXtsZXQgUj10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2t9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7UiYmKFIuaXNTZWxlY3RlZD0hMSl9bGV0IFM9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtMLmlkfSJdYCk/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO1MmJihTLmlzU2VsZWN0ZWQ9ITApfX1ibHVyVGltZW91dD1udWxsO2hhbmRsZUJsb2NrQmx1cihMKXtpZih0aGlzLmJsdXJUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCksdGhpcy5zbGFzaE1lbnUudmlzaWJsZSlyZXR1cm47bGV0IE49dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtMLmlkfSJdYCk/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO2lmKE4mJk4uZ2V0Q29udGVudCl7bGV0IFM9Ti5nZXRDb250ZW50KCk7TC5jb250ZW50IT09UyYmKEwuY29udGVudD1TKX10aGlzLmJsdXJUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucygiYmxvY2siKXx8dGhpcy51cGRhdGVWYWx1ZSgpfSwxMDApfWhhbmRsZUVkaXRvckNsaWNrKEwpe2xldCBrPUwudGFyZ2V0O2lmKHRoaXMuc2xhc2hNZW51LnZpc2libGUmJnRoaXMuY2xvc2VTbGFzaE1lbnUoITApLGsuY2xhc3NMaXN0LmNvbnRhaW5zKCJlZGl0b3ItY29udGVudCIpKXtsZXQgTj10aGlzLmJsb2Nrc1t0aGlzLmJsb2Nrcy5sZW5ndGgtMV07dGhpcy5ibG9ja09wZXJhdGlvbnMuZm9jdXNCbG9jayhOLmlkLE4udHlwZT09PSJkaXZpZGVyInx8Ti50eXBlPT09ImltYWdlIj92b2lkIDA6ImVuZCIpfX1jcmVhdGVOZXdCbG9jayhMPSJwYXJhZ3JhcGgiLGs9IiIsTil7cmV0dXJue2lkOlAxLmdlbmVyYXRlQmxvY2tJZCgpLHR5cGU6TCxjb250ZW50OmssLi4uTiYme21ldGFkYXRhOk59fX1hc3luYyBpbnNlcnRCbG9ja0FmdGVyKEwsayxOPSEwKXtsZXQgUz10aGlzLmJsb2Nrcy5maW5kSW5kZXgoUj0+Ui5pZD09PUwuaWQpO3RoaXMuYmxvY2tzPVsuLi50aGlzLmJsb2Nrcy5zbGljZSgwLFMrMSksaywuLi50aGlzLmJsb2Nrcy5zbGljZShTKzEpXTtsZXQgVD10aGlzLmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7TC5pZH0iXWApO2lmKFQpe2xldCBSPXRoaXMuY3JlYXRlQmxvY2tFbGVtZW50KGspO1QuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJhZnRlcmVuZCIsUil9dGhpcy51cGRhdGVWYWx1ZSgpLE4mJmsudHlwZSE9PSJkaXZpZGVyIiYmKGF3YWl0IG5ldyBQcm9taXNlKFI9PnNldFRpbWVvdXQoUiwwKSksYXdhaXQgdGhpcy5ibG9ja09wZXJhdGlvbnMuZm9jdXNCbG9jayhrLmlkLCJzdGFydCIpKX1hc3luYyBpbnNlcnRCbG9jayhMKXtsZXQgaz10aGlzLmJsb2Nrcy5maW5kKFQ9PlQuaWQ9PT10aGlzLnNlbGVjdGVkQmxvY2tJZCk7aWYoIWspe3RoaXMuY2xvc2VTbGFzaE1lbnUoKTtyZXR1cm59bGV0IFM9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2suaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYoUyl7bGV0IFQ9Uy5nZXRDb250ZW50KCk7aWYoVC5zdGFydHNXaXRoKCIvIikpe2xldCBSPVQucmVwbGFjZSgvXlwvW15cc10qXHMqLywiIikudHJpbSgpO1Muc2V0Q29udGVudChSKSxrLmNvbnRlbnQ9Un19aWYodGhpcy5jbG9zZVNsYXNoTWVudSghMSksTD09PSJjb2RlIiYmKGsubWV0YWRhdGE9e2xhbmd1YWdlOiJ0eXBlc2NyaXB0In0pLGsudHlwZT1MLGsuY29udGVudD1rLmNvbnRlbnR8fCIiLEw9PT0iZGl2aWRlciIpe2suY29udGVudD0iICI7bGV0IFQ9dGhpcy5jcmVhdGVOZXdCbG9jaygpO3RoaXMuaW5zZXJ0QmxvY2tBZnRlcihrLFQpfWVsc2UgTD09PSJsaXN0Ij8oay5tZXRhZGF0YT17bGlzdFR5cGU6ImJ1bGxldCJ9LGsuY29udGVudD0iIik6TD09PSJpbWFnZSI/KGsuY29udGVudD0iIixrLm1ldGFkYXRhPXt1cmw6IiIsbG9hZGluZzohMX0pOkw9PT0ieW91dHViZSI/KGsuY29udGVudD0iIixrLm1ldGFkYXRhPXt2aWRlb0lkOiIiLHVybDoiIn0pOkw9PT0ibWFya2Rvd24iP2subWV0YWRhdGE9e3Nob3dQcmV2aWV3OiExfTpMPT09Imh0bWwiP2subWV0YWRhdGE9e3Nob3dQcmV2aWV3OiExfTpMPT09ImF0dGFjaG1lbnQiPyhrLmNvbnRlbnQ9IiIsay5tZXRhZGF0YT17ZmlsZXM6W119KTprLmNvbnRlbnQ9ay5jb250ZW50fHwiIjt0aGlzLnVwZGF0ZUJsb2NrRWxlbWVudChrLmlkKSx0aGlzLnVwZGF0ZVZhbHVlKCksYXdhaXQgbmV3IFByb21pc2UoVD0+c2V0VGltZW91dChULDApKSxMPT09Imxpc3QiPyh0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGsuaWQsInN0YXJ0IikscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57bGV0IFI9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtrLmlkfSJdYCk/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO1ImJlIuZm9jdXNMaXN0SXRlbSgpfSkpOkwhPT0iZGl2aWRlciImJkwhPT0iaW1hZ2UiJiZMIT09InlvdXR1YmUiJiZMIT09Im1hcmtkb3duIiYmTCE9PSJodG1sIiYmTCE9PSJhdHRhY2htZW50Ij90aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGsuaWQsInN0YXJ0Iik6KEw9PT0iaW1hZ2UifHxMPT09InlvdXR1YmUifHxMPT09Im1hcmtkb3duInx8TD09PSJodG1sInx8TD09PSJhdHRhY2htZW50IikmJnRoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2soay5pZCl9dXBkYXRlVmFsdWUoKXt0aGlzLm91dHB1dEZvcm1hdD09PSJodG1sIj90aGlzLnZhbHVlPWZyLmdldEh0bWxPdXRwdXQodGhpcy5ibG9ja3MpOnRoaXMudmFsdWU9ZnIuZ2V0TWFya2Rvd25PdXRwdXQodGhpcy5ibG9ja3MpLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMudmFsdWUpLHRoaXMuc2F2ZVRvSGlzdG9yeSghMCl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX1zZXRWYWx1ZShMKXt0aGlzLnZhbHVlPUwsdGhpcy5vdXRwdXRGb3JtYXQ9PT0iaHRtbCI/dGhpcy5ibG9ja3M9ZnIucGFyc2VIdG1sVG9CbG9ja3MoTCk6dGhpcy5ibG9ja3M9ZnIucGFyc2VNYXJrZG93blRvQmxvY2tzKEwpLHRoaXMuYmxvY2tzLmxlbmd0aD09PTAmJih0aGlzLmJsb2Nrcz1be2lkOlAxLmdlbmVyYXRlQmxvY2tJZCgpLHR5cGU6InBhcmFncmFwaCIsY29udGVudDoiIn1dKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzLnZhbHVlKSx0aGlzLmVkaXRvckNvbnRlbnRSZWYmJnRoaXMucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpfWV4cG9ydEJsb2Nrcygpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYmxvY2tzKSl9aW1wb3J0QmxvY2tzKEwpe3RoaXMuYmxvY2tzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoTCkpLHRoaXMudXBkYXRlVmFsdWUoKSx0aGlzLmVkaXRvckNvbnRlbnRSZWYmJnRoaXMucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpfWV4cG9ydEFzSHRtbCgpe3JldHVybiBmci5nZXRIdG1sT3V0cHV0KHRoaXMuYmxvY2tzKX1leHBvcnRBc01hcmtkb3duKCl7cmV0dXJuIGZyLmdldE1hcmtkb3duT3V0cHV0KHRoaXMuYmxvY2tzKX1leHBvcnRTdGF0ZSgpe3JldHVybntibG9ja3M6dGhpcy5leHBvcnRCbG9ja3MoKSxvdXRwdXRGb3JtYXQ6dGhpcy5vdXRwdXRGb3JtYXR9fWltcG9ydFN0YXRlKEwpe0wub3V0cHV0Rm9ybWF0JiYodGhpcy5vdXRwdXRGb3JtYXQ9TC5vdXRwdXRGb3JtYXQpLHRoaXMuaW1wb3J0QmxvY2tzKEwuYmxvY2tzKX1oYW5kbGVEcmFnRW5kKCl7aWYodGhpcy5kcmFnZ2VkQmxvY2tJZCl7bGV0IGs9dGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3RoaXMuZHJhZ2dlZEJsb2NrSWR9Il1gKTtrJiZrLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIil9dGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIikuZm9yRWFjaChrPT57ay5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXItYmVmb3JlIiwiZHJhZy1vdmVyLWFmdGVyIil9KSx0aGlzLmVkaXRvckNvbnRlbnRSZWYuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKSx0aGlzLmRyYWdnZWRCbG9ja0lkPW51bGwsdGhpcy5kcmFnT3ZlckJsb2NrSWQ9bnVsbCx0aGlzLmRyYWdPdmVyUG9zaXRpb249bnVsbH1oYW5kbGVEcm9wKEwsayl7aWYoTC5wcmV2ZW50RGVmYXVsdCgpLCF0aGlzLmRyYWdnZWRCbG9ja0lkfHx0aGlzLmRyYWdnZWRCbG9ja0lkPT09ay5pZClyZXR1cm47bGV0IE49dGhpcy5ibG9ja3MuZmluZEluZGV4KEE9PkEuaWQ9PT10aGlzLmRyYWdnZWRCbG9ja0lkKSxTPXRoaXMuYmxvY2tzLmZpbmRJbmRleChBPT5BLmlkPT09ay5pZCk7aWYoTj09PS0xfHxTPT09LTEpcmV0dXJuO2xldFtUXT10aGlzLmJsb2Nrcy5zcGxpY2UoTiwxKSxSPVM7dGhpcy5kcmFnT3ZlclBvc2l0aW9uPT09ImFmdGVyIj9SPU48Uz9TOlMrMTpSPU48Uz9TLTE6Uyx0aGlzLmJsb2Nrcy5zcGxpY2UoUiwwLFQpLHRoaXMucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpLHRoaXMudXBkYXRlVmFsdWUoKSx0aGlzLmhhbmRsZURyYWdFbmQoKSxzZXRUaW1lb3V0KCgpPT57bGV0IEE9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke1QuaWR9Il0gLmJsb2NrYCk7QSYmVC50eXBlIT09ImRpdmlkZXIiJiZBLmZvY3VzKCl9LDEwMCl9aGFuZGxlVGV4dFNlbGVjdGlvbihMKXt0aGlzLnNsYXNoTWVudS52aXNpYmxlfXVwZGF0ZUZvcm1hdHRpbmdNZW51UG9zaXRpb24oKXtsZXQgTD1bXTt0aGlzLnNoYWRvd1Jvb3QmJkwucHVzaCh0aGlzLnNoYWRvd1Jvb3QpLHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbCgiLmJsb2NrLXdyYXBwZXIiKT8uZm9yRWFjaChTPT57bGV0IFQ9Uy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTtUPy5zaGFkb3dSb290JiZMLnB1c2goVC5zaGFkb3dSb290KX0pO2xldCBOPWRzLmdldFNlbGVjdGlvbkNvb3JkaW5hdGVzKC4uLkwpO04mJnRoaXMuZm9ybWF0dGluZ01lbnUuc2hvdyh7eDpOLngseTpOLnl9LGFzeW5jIFM9PmF3YWl0IHRoaXMuYXBwbHlGb3JtYXQoUykpfWhpZGVGb3JtYXR0aW5nTWVudSgpe3RoaXMuZm9ybWF0dGluZ01lbnUuaGlkZSgpLHRoaXMuc2VsZWN0ZWRUZXh0PSIifWFzeW5jIGFwcGx5Rm9ybWF0KEwpe2xldCBrPVtdO3RoaXMuc2hhZG93Um9vdCYmay5wdXNoKHRoaXMuc2hhZG93Um9vdCksdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpPy5mb3JFYWNoKGFlPT57bGV0IFY9YWUucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7Vj8uc2hhZG93Um9vdCYmay5wdXNoKFYuc2hhZG93Um9vdCl9KTtsZXQgUz1JZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmspO2lmKCFTKXJldHVybjtsZXQgVCxSLEE9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7Zm9yKGxldCBhZT0wO2FlPEEubGVuZ3RoO2FlKyspe2xldCBWPUFbYWVdLFNlPVYucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYoU2U/LnNoYWRvd1Jvb3Qpe2xldCB6ZT1TZS5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO2lmKHplJiYoemUuY29udGFpbnMoUy5zdGFydENvbnRhaW5lcil8fHplLmNvbnRhaW5zKFMuZW5kQ29udGFpbmVyKSkpe2xldCBXPVYuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7VD10aGlzLmJsb2Nrcy5maW5kKE5lPT5OZS5pZD09PVcpLFI9U2U7YnJlYWt9fX1pZighVHx8IVIpcmV0dXJuO2xldCBGPUllLmNyZWF0ZVJhbmdlRnJvbUluZm8oUyk7aWYoTD09PSJsaW5rIil7bGV0IGFlPWF3YWl0IHRoaXMuc2hvd0xpbmtEaWFsb2coKTtpZighYWUpe1IuZm9jdXMoKTtyZXR1cm59ZHMuYXBwbHlGb3JtYXQoTCxhZSxGLGspfWVsc2UgZHMuYXBwbHlGb3JtYXQoTCx2b2lkIDAsRixrKTthd2FpdCBuZXcgUHJvbWlzZShhZT0+c2V0VGltZW91dChhZSwxMCkpLFQuY29udGVudD1SLmdldENvbnRlbnQoKSx0aGlzLnVwZGF0ZVZhbHVlKCksUi5mb2N1cygpLEw9PT0ibGluayI/dGhpcy5oaWRlRm9ybWF0dGluZ01lbnUoKTp0aGlzLnNlbGVjdGVkVGV4dD0iIn1hc3luYyBzaG93TGlua0RpYWxvZygpe3JldHVybiBuZXcgUHJvbWlzZShMPT57bGV0IGs9bnVsbDtlMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJBZGQgTGluayIsY29udGVudDpKb2AKICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmxpbmstaW5wdXQgewogICAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWRlZXMtY29sb3ItbGluZS1icmlnaHQpOwogICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kZWVzLWNvbG9yLWlucHV0KTsKICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0KTsKICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGluay1pbnB1dDpmb2N1cyB7CiAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWRlZXMtY29sb3ItcHJpbWFyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICA8aW5wdXQgCiAgICAgICAgICAgIGNsYXNzPSJsaW5rLWlucHV0IiAKICAgICAgICAgICAgdHlwZT0idXJsIiAKICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8vZXhhbXBsZS5jb20iIAogICAgICAgICAgICBAa2V5ZG93bj0iJHtOPT57aWYoTi5rZXk9PT0iRW50ZXIiKXtsZXQgUz1OLnRhcmdldDtrPVMudmFsdWU7bGV0IFQ9Uy5jbG9zZXN0KCJkZWVzLW1vZGFsIik7aWYoVCl7bGV0IFI9VC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYm90dG9tQnV0dG9uOmxhc3QtY2hpbGQiKTtSJiZSLmNsaWNrKCl9fX19IgogICAgICAgICAgICBAaW5wdXQ9IiR7Tj0+e2s9Ti50YXJnZXQudmFsdWV9fSIKICAgICAgICAgIC8+CiAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkNhbmNlbCIsYWN0aW9uOmFzeW5jIE49PntOLmRlc3Ryb3koKSxMKG51bGwpfX0se25hbWU6IkFkZCBMaW5rIixhY3Rpb246YXN5bmMgTj0+e04uZGVzdHJveSgpLEwoayl9fV19KSxzZXRUaW1lb3V0KCgpPT57bGV0IE49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1tb2RhbCAubGluay1pbnB1dCIpO04mJk4uZm9jdXMoKX0sMTAwKX0pfXVuZG8oKXtsZXQgTD10aGlzLmhpc3RvcnkudW5kbygpO0wmJnRoaXMucmVzdG9yZVN0YXRlKEwpfXJlZG8oKXtsZXQgTD10aGlzLmhpc3RvcnkucmVkbygpO0wmJnRoaXMucmVzdG9yZVN0YXRlKEwpfXJlc3RvcmVTdGF0ZShMKXt0aGlzLmJsb2Nrcz1MLmJsb2Nrcyx0aGlzLnNlbGVjdGVkQmxvY2tJZD1MLnNlbGVjdGVkQmxvY2tJZCx0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKSxMLmN1cnNvclBvc2l0aW9uP3NldFRpbWVvdXQoKCk9PntsZXQgTj10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke0wuY3Vyc29yUG9zaXRpb24uYmxvY2tJZH0iXWApPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTtOJiZOLmZvY3VzV2l0aEN1cnNvcihMLmN1cnNvclBvc2l0aW9uLm9mZnNldCl9LDUwKTpMLnNlbGVjdGVkQmxvY2tJZCYmc2V0VGltZW91dCgoKT0+e3RoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2soTC5zZWxlY3RlZEJsb2NrSWQpfSw1MCksdGhpcy51cGRhdGVWYWx1ZSgpfXNhdmVUb0hpc3RvcnkoTD0hMCl7bGV0IGs7aWYodGhpcy5zZWxlY3RlZEJsb2NrSWQpe2xldCBTPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7dGhpcy5zZWxlY3RlZEJsb2NrSWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYoUyYmdHlwZW9mIFMuZ2V0Q3Vyc29yUG9zaXRpb249PSJmdW5jdGlvbiIpe2xldCBUPVMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7aWYoVCl7bGV0IFI9Uy5nZXRDdXJzb3JQb3NpdGlvbihUKTtSIT09bnVsbCYmKGs9e2Jsb2NrSWQ6dGhpcy5zZWxlY3RlZEJsb2NrSWQsb2Zmc2V0OlJ9KX19fUw/dGhpcy5oaXN0b3J5LnNhdmVTdGF0ZSh0aGlzLmJsb2Nrcyx0aGlzLnNlbGVjdGVkQmxvY2tJZCxrKTp0aGlzLmhpc3Rvcnkuc2F2ZUNoZWNrcG9pbnQodGhpcy5ibG9ja3MsdGhpcy5zZWxlY3RlZEJsb2NrSWQsayl9c3RhdGlje1YyKHIsYSl9fTtyZXR1cm4gSD1yfSkoKTt2YXIgTGo9Y2xhc3N7b3B0aW9ucztjYW52YXM7Y3R4O2ltZztvdmVybGF5Q2FudmFzO292ZXJsYXlDdHg7Y3JvcFg9MDtjcm9wWT0wO2Nyb3BTaXplPTIwMDttaW5Dcm9wU2l6ZT01MDtpc0RyYWdnaW5nPSExO2lzUmVzaXppbmc9ITE7ZHJhZ1N0YXJ0WD0wO2RyYWdTdGFydFk9MDtyZXNpemVIYW5kbGU9IiI7aW1hZ2VTY2FsZT0xO2ltYWdlT2Zmc2V0WD0wO2ltYWdlT2Zmc2V0WT0wO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz17bWluU2l6ZTo1MCxvdXRwdXRTaXplOjgwMCxvdXRwdXRRdWFsaXR5Oi45NSwuLi5lfSx0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLHRoaXMub3ZlcmxheUNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLm92ZXJsYXlDdHg9dGhpcy5vdmVybGF5Q2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5pbWc9bmV3IEltYWdlfWFzeW5jIGluaXRpYWxpemUoKXthd2FpdCB0aGlzLmxvYWRJbWFnZSgpLHRoaXMuc2V0dXBDYW52YXNlcygpLHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpLHRoaXMucmVuZGVyKCl9YXN5bmMgbG9hZEltYWdlKCl7cmV0dXJuIG5ldyBQcm9taXNlKChlLGEpPT57dGhpcy5pbWcub25sb2FkPSgpPT5lKCksdGhpcy5pbWcub25lcnJvcj1hLHRoaXMuaW1nLnNyYz10aGlzLm9wdGlvbnMuaW1hZ2V9KX1zZXR1cENhbnZhc2VzKCl7bGV0IGU9dGhpcy5vcHRpb25zLmNvbnRhaW5lcixhPU1hdGgubWluKGUuY2xpZW50V2lkdGgsZS5jbGllbnRIZWlnaHQpO3RoaXMuY2FudmFzLndpZHRoPWEsdGhpcy5jYW52YXMuaGVpZ2h0PWEsdGhpcy5jYW52YXMuc3R5bGUud2lkdGg9IjEwMCUiLHRoaXMuY2FudmFzLnN0eWxlLmhlaWdodD0iMTAwJSIsdGhpcy5jYW52YXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmNhbnZhcy5zdHlsZS50b3A9IjAiLHRoaXMuY2FudmFzLnN0eWxlLmxlZnQ9IjAiLHRoaXMub3ZlcmxheUNhbnZhcy53aWR0aD1hLHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQ9YSx0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUud2lkdGg9IjEwMCUiLHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5oZWlnaHQ9IjEwMCUiLHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS50b3A9IjAiLHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5sZWZ0PSIwIix0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUuY3Vyc29yPSJtb3ZlIixlLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKSxlLmFwcGVuZENoaWxkKHRoaXMub3ZlcmxheUNhbnZhcyk7bGV0IHI9TWF0aC5taW4oYS90aGlzLmltZy53aWR0aCxhL3RoaXMuaW1nLmhlaWdodCk7dGhpcy5pbWFnZVNjYWxlPXIsdGhpcy5pbWFnZU9mZnNldFg9KGEtdGhpcy5pbWcud2lkdGgqcikvMix0aGlzLmltYWdlT2Zmc2V0WT0oYS10aGlzLmltZy5oZWlnaHQqcikvMjtsZXQgaT10aGlzLmltZy53aWR0aCpyLG89dGhpcy5pbWcuaGVpZ2h0KnIscz1NYXRoLm1pbihpLG8sYSouOCk7dGhpcy5jcm9wU2l6ZT1zKi44LHRoaXMuY3JvcFg9KGEtdGhpcy5jcm9wU2l6ZSkvMix0aGlzLmNyb3BZPShhLXRoaXMuY3JvcFNpemUpLzJ9c2V0dXBFdmVudExpc3RlbmVycygpe3RoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuaGFuZGxlTW91c2VEb3duLmJpbmQodGhpcykpLHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuaGFuZGxlTW91c2VNb3ZlLmJpbmQodGhpcykpLHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmhhbmRsZU1vdXNlVXAuYmluZCh0aGlzKSksdGhpcy5vdmVybGF5Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHRoaXMuaGFuZGxlTW91c2VVcC5iaW5kKHRoaXMpKSx0aGlzLm92ZXJsYXlDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5oYW5kbGVUb3VjaFN0YXJ0LmJpbmQodGhpcykpLHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuaGFuZGxlVG91Y2hNb3ZlLmJpbmQodGhpcykpLHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5oYW5kbGVUb3VjaEVuZC5iaW5kKHRoaXMpKX1oYW5kbGVNb3VzZURvd24oZSl7bGV0IGE9dGhpcy5vdmVybGF5Q2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9KGUuY2xpZW50WC1hLmxlZnQpKih0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgvYS53aWR0aCksaT0oZS5jbGllbnRZLWEudG9wKSoodGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodC9hLmhlaWdodCksbz10aGlzLmdldFJlc2l6ZUhhbmRsZShyLGkpO28/KHRoaXMuaXNSZXNpemluZz0hMCx0aGlzLnJlc2l6ZUhhbmRsZT1vKTp0aGlzLmlzSW5zaWRlQ3JvcEFyZWEocixpKSYmKHRoaXMuaXNEcmFnZ2luZz0hMCksdGhpcy5kcmFnU3RhcnRYPXIsdGhpcy5kcmFnU3RhcnRZPWl9aGFuZGxlTW91c2VNb3ZlKGUpe2xldCBhPXRoaXMub3ZlcmxheUNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPShlLmNsaWVudFgtYS5sZWZ0KSoodGhpcy5vdmVybGF5Q2FudmFzLndpZHRoL2Eud2lkdGgpLGk9KGUuY2xpZW50WS1hLnRvcCkqKHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQvYS5oZWlnaHQpLG89dGhpcy5nZXRSZXNpemVIYW5kbGUocixpKTtpZihvP3RoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5jdXJzb3I9dGhpcy5nZXRSZXNpemVDdXJzb3Iobyk6dGhpcy5pc0luc2lkZUNyb3BBcmVhKHIsaSk/dGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvcj0ibW92ZSI6dGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvcj0iZGVmYXVsdCIsdGhpcy5pc0RyYWdnaW5nKXtsZXQgcz1yLXRoaXMuZHJhZ1N0YXJ0WCxsPWktdGhpcy5kcmFnU3RhcnRZLGY9dGhpcy5pbWFnZU9mZnNldFgsYz10aGlzLmltYWdlT2Zmc2V0WCt0aGlzLmltZy53aWR0aCp0aGlzLmltYWdlU2NhbGUtdGhpcy5jcm9wU2l6ZSx1PXRoaXMuaW1hZ2VPZmZzZXRZLGQ9dGhpcy5pbWFnZU9mZnNldFkrdGhpcy5pbWcuaGVpZ2h0KnRoaXMuaW1hZ2VTY2FsZS10aGlzLmNyb3BTaXplO3RoaXMuY3JvcFg9TWF0aC5tYXgoZixNYXRoLm1pbihjLHRoaXMuY3JvcFgrcykpLHRoaXMuY3JvcFk9TWF0aC5tYXgodSxNYXRoLm1pbihkLHRoaXMuY3JvcFkrbCkpLHRoaXMuZHJhZ1N0YXJ0WD1yLHRoaXMuZHJhZ1N0YXJ0WT1pLHRoaXMucmVuZGVyKCl9dGhpcy5pc1Jlc2l6aW5nJiYodGhpcy5oYW5kbGVSZXNpemUocixpKSx0aGlzLmRyYWdTdGFydFg9cix0aGlzLmRyYWdTdGFydFk9aSx0aGlzLnJlbmRlcigpKX1oYW5kbGVNb3VzZVVwKCl7dGhpcy5pc0RyYWdnaW5nPSExLHRoaXMuaXNSZXNpemluZz0hMSx0aGlzLnJlc2l6ZUhhbmRsZT0iIn1oYW5kbGVUb3VjaFN0YXJ0KGUpe2UucHJldmVudERlZmF1bHQoKTtsZXQgYT1lLnRvdWNoZXNbMF0scj1uZXcgTW91c2VFdmVudCgibW91c2Vkb3duIix7Y2xpZW50WDphLmNsaWVudFgsY2xpZW50WTphLmNsaWVudFl9KTt0aGlzLmhhbmRsZU1vdXNlRG93bihyKX1oYW5kbGVUb3VjaE1vdmUoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBhPWUudG91Y2hlc1swXSxyPW5ldyBNb3VzZUV2ZW50KCJtb3VzZW1vdmUiLHtjbGllbnRYOmEuY2xpZW50WCxjbGllbnRZOmEuY2xpZW50WX0pO3RoaXMuaGFuZGxlTW91c2VNb3ZlKHIpfWhhbmRsZVRvdWNoRW5kKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLmhhbmRsZU1vdXNlVXAoKX1nZXRSZXNpemVIYW5kbGUoZSxhKXtsZXQgaT17bnc6e3g6dGhpcy5jcm9wWCx5OnRoaXMuY3JvcFl9LG5lOnt4OnRoaXMuY3JvcFgrdGhpcy5jcm9wU2l6ZSx5OnRoaXMuY3JvcFl9LHN3Ont4OnRoaXMuY3JvcFgseTp0aGlzLmNyb3BZK3RoaXMuY3JvcFNpemV9LHNlOnt4OnRoaXMuY3JvcFgrdGhpcy5jcm9wU2l6ZSx5OnRoaXMuY3JvcFkrdGhpcy5jcm9wU2l6ZX19O2ZvcihsZXRbbyxzXW9mIE9iamVjdC5lbnRyaWVzKGkpKWlmKE1hdGguYWJzKGUtcy54KTwyMCYmTWF0aC5hYnMoYS1zLnkpPDIwKXJldHVybiBvO3JldHVybiIifWdldFJlc2l6ZUN1cnNvcihlKXtyZXR1cm57bnc6Im53LXJlc2l6ZSIsbmU6Im5lLXJlc2l6ZSIsc3c6InN3LXJlc2l6ZSIsc2U6InNlLXJlc2l6ZSJ9W2VdfHwiZGVmYXVsdCJ9aXNJbnNpZGVDcm9wQXJlYShlLGEpe3JldHVybiBlPj10aGlzLmNyb3BYJiZlPD10aGlzLmNyb3BYK3RoaXMuY3JvcFNpemUmJmE+PXRoaXMuY3JvcFkmJmE8PXRoaXMuY3JvcFkrdGhpcy5jcm9wU2l6ZX1oYW5kbGVSZXNpemUoZSxhKXtsZXQgcj1lLXRoaXMuZHJhZ1N0YXJ0WCxpPWEtdGhpcy5kcmFnU3RhcnRZLG89dGhpcy5pbWFnZU9mZnNldFgscz10aGlzLmltYWdlT2Zmc2V0WSxsPXRoaXMuaW1hZ2VPZmZzZXRYK3RoaXMuaW1nLndpZHRoKnRoaXMuaW1hZ2VTY2FsZSxmPXRoaXMuaW1hZ2VPZmZzZXRZK3RoaXMuaW1nLmhlaWdodCp0aGlzLmltYWdlU2NhbGU7c3dpdGNoKHRoaXMucmVzaXplSGFuZGxlKXtjYXNlInNlIjp0aGlzLmNyb3BTaXplPU1hdGgubWF4KHRoaXMubWluQ3JvcFNpemUsTWF0aC5taW4odGhpcy5jcm9wU2l6ZStNYXRoLm1heChyLGkpLE1hdGgubWluKGwtdGhpcy5jcm9wWCxmLXRoaXMuY3JvcFkpKSk7YnJlYWs7Y2FzZSJudyI6bGV0IGM9TWF0aC5tYXgodGhpcy5taW5Dcm9wU2l6ZSx0aGlzLmNyb3BTaXplLU1hdGgubWF4KHIsaSkpLHU9dGhpcy5jcm9wU2l6ZS1jLGQ9dGhpcy5jcm9wWCt1LGg9dGhpcy5jcm9wWSt1O2Q+PW8mJmg+PXMmJih0aGlzLmNyb3BYPWQsdGhpcy5jcm9wWT1oLHRoaXMuY3JvcFNpemU9Yyk7YnJlYWs7Y2FzZSJuZSI6bGV0IGc9TWF0aC5tYXgociwtaSksYj1NYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLHRoaXMuY3JvcFNpemUrZykseD1iLXRoaXMuY3JvcFNpemUsbT10aGlzLmNyb3BZLXg7bT49cyYmdGhpcy5jcm9wWCtiPD1sJiYodGhpcy5jcm9wWT1tLHRoaXMuY3JvcFNpemU9Yik7YnJlYWs7Y2FzZSJzdyI6bGV0IHY9TWF0aC5tYXgoLXIsaSkseT1NYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLHRoaXMuY3JvcFNpemUrdiksdz15LXRoaXMuY3JvcFNpemUsRT10aGlzLmNyb3BYLXc7RT49byYmdGhpcy5jcm9wWSt5PD1mJiYodGhpcy5jcm9wWD1FLHRoaXMuY3JvcFNpemU9eSk7YnJlYWt9fXJlbmRlcigpe3RoaXMuY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0KSx0aGlzLm92ZXJsYXlDdHguY2xlYXJSZWN0KDAsMCx0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgsdGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCksdGhpcy5jdHguZmlsbFN0eWxlPSIjMDAwMDAwIix0aGlzLmN0eC5maWxsUmVjdCgwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0KSx0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy5pbWcsdGhpcy5pbWFnZU9mZnNldFgsdGhpcy5pbWFnZU9mZnNldFksdGhpcy5pbWcud2lkdGgqdGhpcy5pbWFnZVNjYWxlLHRoaXMuaW1nLmhlaWdodCp0aGlzLmltYWdlU2NhbGUpLHRoaXMub3ZlcmxheUN0eC5maWxsU3R5bGU9InJnYmEoMCwgMCwgMCwgMC41KSIsdGhpcy5vdmVybGF5Q3R4LmZpbGxSZWN0KHRoaXMuaW1hZ2VPZmZzZXRYLHRoaXMuaW1hZ2VPZmZzZXRZLHRoaXMuaW1nLndpZHRoKnRoaXMuaW1hZ2VTY2FsZSx0aGlzLmltZy5oZWlnaHQqdGhpcy5pbWFnZVNjYWxlKSx0aGlzLm92ZXJsYXlDdHguc2F2ZSgpLHRoaXMub3B0aW9ucy5zaGFwZT09PSJyb3VuZCI/KHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKSx0aGlzLm92ZXJsYXlDdHguYXJjKHRoaXMuY3JvcFgrdGhpcy5jcm9wU2l6ZS8yLHRoaXMuY3JvcFkrdGhpcy5jcm9wU2l6ZS8yLHRoaXMuY3JvcFNpemUvMiwwLE1hdGguUEkqMiksdGhpcy5vdmVybGF5Q3R4LmNsaXAoKSk6KHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKSx0aGlzLm92ZXJsYXlDdHgucmVjdCh0aGlzLmNyb3BYLHRoaXMuY3JvcFksdGhpcy5jcm9wU2l6ZSx0aGlzLmNyb3BTaXplKSx0aGlzLm92ZXJsYXlDdHguY2xpcCgpKSx0aGlzLm92ZXJsYXlDdHguY2xlYXJSZWN0KDAsMCx0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgsdGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCksdGhpcy5vdmVybGF5Q3R4LnJlc3RvcmUoKSx0aGlzLm92ZXJsYXlDdHguc3Ryb2tlU3R5bGU9IndoaXRlIix0aGlzLm92ZXJsYXlDdHgubGluZVdpZHRoPTIsdGhpcy5vcHRpb25zLnNoYXBlPT09InJvdW5kIj8odGhpcy5vdmVybGF5Q3R4LmJlZ2luUGF0aCgpLHRoaXMub3ZlcmxheUN0eC5hcmModGhpcy5jcm9wWCt0aGlzLmNyb3BTaXplLzIsdGhpcy5jcm9wWSt0aGlzLmNyb3BTaXplLzIsdGhpcy5jcm9wU2l6ZS8yLDAsTWF0aC5QSSoyKSx0aGlzLm92ZXJsYXlDdHguc3Ryb2tlKCkpOnRoaXMub3ZlcmxheUN0eC5zdHJva2VSZWN0KHRoaXMuY3JvcFgsdGhpcy5jcm9wWSx0aGlzLmNyb3BTaXplLHRoaXMuY3JvcFNpemUpLHRoaXMuZHJhd1Jlc2l6ZUhhbmRsZXMoKX1kcmF3UmVzaXplSGFuZGxlcygpe2xldCBhPVt7eDp0aGlzLmNyb3BYLHk6dGhpcy5jcm9wWX0se3g6dGhpcy5jcm9wWCt0aGlzLmNyb3BTaXplLHk6dGhpcy5jcm9wWX0se3g6dGhpcy5jcm9wWCx5OnRoaXMuY3JvcFkrdGhpcy5jcm9wU2l6ZX0se3g6dGhpcy5jcm9wWCt0aGlzLmNyb3BTaXplLHk6dGhpcy5jcm9wWSt0aGlzLmNyb3BTaXplfV07dGhpcy5vdmVybGF5Q3R4LmZpbGxTdHlsZT0id2hpdGUiLGEuZm9yRWFjaChyPT57dGhpcy5vdmVybGF5Q3R4LmJlZ2luUGF0aCgpLHRoaXMub3ZlcmxheUN0eC5hcmMoci54LHIueSw4LDAsTWF0aC5QSSoyKSx0aGlzLm92ZXJsYXlDdHguZmlsbCgpfSl9YXN5bmMgZ2V0Q3JvcHBlZEltYWdlKCl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYT1lLmdldENvbnRleHQoIjJkIikscj0xL3RoaXMuaW1hZ2VTY2FsZSxpPXRoaXMuY3JvcFNpemUqcixvPXRoaXMub3B0aW9ucy5vdXRwdXRTaXplO28+aSYmY29uc29sZS5pbmZvKGBQcm9maWxlIHBpY3R1cmU6IFVwc2NhbGluZyBmcm9tICR7TWF0aC5yb3VuZChpKX1weCB0byAke299cHhgKSxlLndpZHRoPW8sZS5oZWlnaHQ9bztsZXQgcz0odGhpcy5jcm9wWC10aGlzLmltYWdlT2Zmc2V0WCkqcixsPSh0aGlzLmNyb3BZLXRoaXMuaW1hZ2VPZmZzZXRZKSpyLGY9dGhpcy5jcm9wU2l6ZSpyO3RoaXMub3B0aW9ucy5zaGFwZT09PSJyb3VuZCImJihhLmJlZ2luUGF0aCgpLGEuYXJjKG8vMixvLzIsby8yLDAsTWF0aC5QSSoyKSxhLmNsaXAoKSksYS5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITAsYS5pbWFnZVNtb290aGluZ1F1YWxpdHk9ImhpZ2giLGEuZHJhd0ltYWdlKHRoaXMuaW1nLHMsbCxmLGYsMCwwLG8sbyk7bGV0IHU9dGhpcy5vcHRpb25zLmltYWdlLmluY2x1ZGVzKCJpbWFnZS9wbmciKT8iaW1hZ2UvcG5nIjoiaW1hZ2UvanBlZyI7cmV0dXJuIGUudG9EYXRhVVJMKHUsdGhpcy5vcHRpb25zLm91dHB1dFF1YWxpdHkpfWRlc3Ryb3koKXt0aGlzLmNhbnZhcy5yZW1vdmUoKSx0aGlzLm92ZXJsYXlDYW52YXMucmVtb3ZlKCl9fTtmZSgpO0Z0KCk7QmUoKTt2YXIgdXM9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxVMj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sWUVlPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1wcm9maWxlcGljdHVyZS1tb2RhbCIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdLEUsQz1bXSx6PVtdLFAsXz1bXSwkPVtdO3ZhciBIPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgTD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOlN0cmluZ30pXSxmPVtEKHt0eXBlOlN0cmluZ30pXSxkPVtEKHt0eXBlOk51bWJlcn0pXSxiPVtEKHt0eXBlOk51bWJlcn0pXSx2PVtsZSgpXSxFPVtsZSgpXSxQPVtsZSgpXSx1cyh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImluaXRpYWxJbWFnZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImluaXRpYWxJbWFnZSJpbiBrLGdldDprPT5rLmluaXRpYWxJbWFnZSxzZXQ6KGssTik9PntrLmluaXRpYWxJbWFnZT1OfX0sbWV0YWRhdGE6TH0scyxsKSx1cyh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNoYXBlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ic2hhcGUiaW4gayxnZXQ6az0+ay5zaGFwZSxzZXQ6KGssTik9PntrLnNoYXBlPU59fSxtZXRhZGF0YTpMfSxjLHUpLHVzKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToib3V0cHV0U2l6ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+Im91dHB1dFNpemUiaW4gayxnZXQ6az0+ay5vdXRwdXRTaXplLHNldDooayxOKT0+e2sub3V0cHV0U2l6ZT1OfX0sbWV0YWRhdGE6TH0saCxnKSx1cyh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im91dHB1dFF1YWxpdHkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJvdXRwdXRRdWFsaXR5ImluIGssZ2V0Oms9Pmsub3V0cHV0UXVhbGl0eSxzZXQ6KGssTik9PntrLm91dHB1dFF1YWxpdHk9Tn19LG1ldGFkYXRhOkx9LHgsbSksdXModGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXJyZW50U3RlcCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImN1cnJlbnRTdGVwImluIGssZ2V0Oms9PmsuY3VycmVudFN0ZXAsc2V0OihrLE4pPT57ay5jdXJyZW50U3RlcD1OfX0sbWV0YWRhdGE6TH0seSx3KSx1cyh0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNyb3BwZWRJbWFnZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImNyb3BwZWRJbWFnZSJpbiBrLGdldDprPT5rLmNyb3BwZWRJbWFnZSxzZXQ6KGssTik9PntrLmNyb3BwZWRJbWFnZT1OfX0sbWV0YWRhdGE6TH0sQyx6KSx1cyh0aGlzLG51bGwsUCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzUHJvY2Vzc2luZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImlzUHJvY2Vzc2luZyJpbiBrLGdldDprPT5rLmlzUHJvY2Vzc2luZyxzZXQ6KGssTik9PntrLmlzUHJvY2Vzc2luZz1OfX0sbWV0YWRhdGE6TH0sXywkKSx1cyhudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpMfSxudWxsLGEpLEg9cj1lLnZhbHVlLEwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TH0pfSNlPVUyKHRoaXMscywiIik7Z2V0IGluaXRpYWxJbWFnZSgpe3JldHVybiB0aGlzLiNlfXNldCBpbml0aWFsSW1hZ2UoTCl7dGhpcy4jZT1MfSN0PShVMih0aGlzLGwpLFUyKHRoaXMsYywicm91bmQiKSk7Z2V0IHNoYXBlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHNoYXBlKEwpe3RoaXMuI3Q9TH0jYT0oVTIodGhpcyx1KSxVMih0aGlzLGgsODAwKSk7Z2V0IG91dHB1dFNpemUoKXtyZXR1cm4gdGhpcy4jYX1zZXQgb3V0cHV0U2l6ZShMKXt0aGlzLiNhPUx9I3I9KFUyKHRoaXMsZyksVTIodGhpcyx4LC45NSkpO2dldCBvdXRwdXRRdWFsaXR5KCl7cmV0dXJuIHRoaXMuI3J9c2V0IG91dHB1dFF1YWxpdHkoTCl7dGhpcy4jcj1MfSNpPShVMih0aGlzLG0pLFUyKHRoaXMseSwiY3JvcCIpKTtnZXQgY3VycmVudFN0ZXAoKXtyZXR1cm4gdGhpcy4jaX1zZXQgY3VycmVudFN0ZXAoTCl7dGhpcy4jaT1MfSNvPShVMih0aGlzLHcpLFUyKHRoaXMsQywiIikpO2dldCBjcm9wcGVkSW1hZ2UoKXtyZXR1cm4gdGhpcy4jb31zZXQgY3JvcHBlZEltYWdlKEwpe3RoaXMuI289TH0jcz0oVTIodGhpcyx6KSxVMih0aGlzLF8sITEpKTtnZXQgaXNQcm9jZXNzaW5nKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGlzUHJvY2Vzc2luZyhMKXt0aGlzLiNzPUx9Y3JvcHBlcj0oVTIodGhpcywkKSxudWxsKTt3aW5kb3dMYXllcjt6SW5kZXg9MDtzdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogJHtKdH07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzIiwiI2ZmZiIpfTsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB6LWluZGV4OiB2YXIoLS16LWluZGV4KTsKICAgICAgfQoKICAgICAgLm1vZGFsLWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMGEwYTBhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wOCkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICAgIGJveC1zaGFkb3c6ICR7cC5iZFRoZW1lKCIwIDIwcHggMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxMHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMDQpIiwiMCAyMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMyksIDAgMTBweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCkgc2NhbGUoMC45OCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBhbmltYXRpb246IG1vZGFsU2hvdyAwLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGZvcndhcmRzOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIG1vZGFsU2hvdyB7CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDEpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm1vZGFsLWhlYWRlciB7CiAgICAgICAgaGVpZ2h0OiA1MnB4OwogICAgICAgIHBhZGRpbmc6IDAgMjBweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tb2RhbC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLmNsb3NlLWJ1dHRvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAxMHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jbG9zZS1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAuY2xvc2UtYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wOCkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CgogICAgICAubW9kYWwtYm9keSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CgogICAgICAuY3JvcHBlci1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzYwcHg7CiAgICAgICAgYXNwZWN0LXJhdGlvOiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzAwMDAwMCIsIiMwMDAwMDAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJveC1zaGFkb3c6ICR7cC5iZFRoZW1lKCJpbnNldCAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA2KSIsImluc2V0IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CgogICAgICAucHJldmlldy1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDE4MHB4OwogICAgICAgIGhlaWdodDogMTgwcHg7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgICAgYm9yZGVyOiA0cHggc29saWQgJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMTgxODFiIil9OwogICAgICAgIGJveC1zaGFkb3c6ICR7cC5iZFRoZW1lKCIwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjA1KSIsIjAgMTBweCAxNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjMpLCAwIDRweCA2cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWltYWdlLnJvdW5kIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWltYWdlLnNxdWFyZSB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgICAgfQoKICAgICAgLnN1Y2Nlc3MtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTBweDsKICAgICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiMxMGI5ODEiLCIjMTBiOTgxIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDBweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBhbmltYXRpb246IHN1Y2Nlc3NQdWxzZSAwLjRzIGVhc2Utb3V0OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHN1Y2Nlc3NQdWxzZSB7CiAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7IG9wYWNpdHk6IDA7IH0KICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMDIpOyB9CiAgICAgICAgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IG9wYWNpdHk6IDE7IH0KICAgICAgfQoKICAgICAgLm1vZGFsLWZvb3RlciB7CiAgICAgICAgcGFkZGluZzogMjBweCAyNHB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmluc3RydWN0aW9ucyB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgbWF4LXdpZHRoOiAzMjBweDsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3Bpbm5lciB7CiAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtwLmJkVGhlbWUoIiMzYjgyZjYiLCIjNjBhNWZhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC42cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5tb2RhbC1jb250YWluZXIgewogICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICAgIG1hcmdpbjogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm1vZGFsLWJvZHkgewogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICB9CiAgICAgIH0KICAgIGBdO2FzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLndpbmRvd0xheWVyPWF3YWl0IEthLmNyZWF0ZUFuZFNob3coe2JsdXI6ITB9KSx0aGlzLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+dGhpcy5jbG9zZSgpKSx0aGlzLnpJbmRleD1zMS5nZXROZXh0WkluZGV4KCksdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgiLS16LWluZGV4Iix0aGlzLnpJbmRleC50b1N0cmluZygpKSxzMS5yZWdpc3Rlcih0aGlzLHRoaXMuekluZGV4KX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jcm9wcGVyJiZ0aGlzLmNyb3BwZXIuZGVzdHJveSgpLHRoaXMud2luZG93TGF5ZXImJmF3YWl0IHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpLHMxLnVucmVnaXN0ZXIodGhpcyl9cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRhaW5lciIgQGNsaWNrPSR7TD0+TC5zdG9wUHJvcGFnYXRpb24oKX0+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgIDxoMyBjbGFzcz0ibW9kYWwtdGl0bGUiPgogICAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXA9PT0iY3JvcCI/IkFkanVzdCBJbWFnZSI6IlN1Y2Nlc3MifQogICAgICAgICAgPC9oMz4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNsb3NlLWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy5jbG9zZX0gdGl0bGU9IkNsb3NlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6eCIgaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgJHt0aGlzLmN1cnJlbnRTdGVwPT09ImNyb3AiP01gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imluc3RydWN0aW9ucyI+CiAgICAgICAgICAgICAgUG9zaXRpb24gYW5kIHJlc2l6ZSB0aGUgc3F1YXJlIHRvIHNlbGVjdCB5b3VyIHByb2ZpbGUgYXJlYQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3JvcHBlci1jb250YWluZXIiIGlkPSJjcm9wcGVyQ29udGFpbmVyIj48L2Rpdj4KICAgICAgICAgIGA6TWAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1jb250YWluZXIiPgogICAgICAgICAgICAgICR7dGhpcy5pc1Byb2Nlc3Npbmc/TWAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3Bpbm5lciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnN0cnVjdGlvbnMiPlNhdmluZy4uLjwvZGl2PgogICAgICAgICAgICAgIGA6TWAKICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJwcmV2aWV3LWltYWdlICR7dGhpcy5zaGFwZX0iIAogICAgICAgICAgICAgICAgICBzcmM9IiR7dGhpcy5jcm9wcGVkSW1hZ2V9IiAKICAgICAgICAgICAgICAgICAgYWx0PSJDcm9wcGVkIHByZXZpZXciCiAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VjY2Vzcy1tZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Y2hlY2siIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgIDxzcGFuPkxvb2tpbmcgZ29vZCE8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGB9CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgICR7dGhpcy5jdXJyZW50U3RlcD09PSJjcm9wIj9NYAogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmNsb3NlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNyb3B9PgogICAgICAgICAgICAgIFNhdmUKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIGA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXt0aGlzLmN1cnJlbnRTdGVwPT09ImNyb3AiJiZhd2FpdCB0aGlzLmluaXRpYWxpemVDcm9wcGVyKCl9YXN5bmMgaW5pdGlhbGl6ZUNyb3BwZXIoKXthd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlO2xldCBMPXRoaXMuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCgiY3JvcHBlckNvbnRhaW5lciIpO0wmJih0aGlzLmNyb3BwZXI9bmV3IExqKHtjb250YWluZXI6TCxpbWFnZTp0aGlzLmluaXRpYWxJbWFnZSxzaGFwZTp0aGlzLnNoYXBlLGFzcGVjdFJhdGlvOjEsb3V0cHV0U2l6ZTp0aGlzLm91dHB1dFNpemUsb3V0cHV0UXVhbGl0eTp0aGlzLm91dHB1dFF1YWxpdHl9KSxhd2FpdCB0aGlzLmNyb3BwZXIuaW5pdGlhbGl6ZSgpKX1hc3luYyBoYW5kbGVDcm9wKCl7aWYodGhpcy5jcm9wcGVyKXRyeXt0aGlzLmlzUHJvY2Vzc2luZz0hMCx0aGlzLmN1cnJlbnRTdGVwPSJwcmV2aWV3Iixhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlO2xldCBMPWF3YWl0IHRoaXMuY3JvcHBlci5nZXRDcm9wcGVkSW1hZ2UoKTt0aGlzLmNyb3BwZWRJbWFnZT1MLGF3YWl0IG5ldyBQcm9taXNlKGs9PnNldFRpbWVvdXQoayw4MDApKSx0aGlzLmlzUHJvY2Vzc2luZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzYXZlIix7ZGV0YWlsOntjcm9wcGVkSW1hZ2U6dGhpcy5jcm9wcGVkSW1hZ2V9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSksc2V0VGltZW91dCgoKT0+e3RoaXMuY2xvc2UoKX0sMTUwMCl9Y2F0Y2goTCl7Y29uc29sZS5lcnJvcigiRXJyb3IgY3JvcHBpbmcgaW1hZ2U6IixMKSx0aGlzLmlzUHJvY2Vzc2luZz0hMX19Y2xvc2UoKXt0aGlzLnJlbW92ZSgpfXN0YXRpY3tVMihyLGEpfX07cmV0dXJuIEg9cn0pKCk7ZmUoKTt2YXIgek90PSgpPT5NYAogIDxzdHlsZT4KICAgICR7dGVgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0OHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1vdXRwdXQgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDEwNSwgMjQyLCAwLjEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgbWF4LWhlaWdodDogMTAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgICAKICAgICAgLmZlYXR1cmUtbGlzdCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5mZWF0dXJlLWxpc3QgbGkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmVbc2hhcGU9InJvdW5kIl0nKTtlJiZlLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsYT0+e2xldCByPWEudGFyZ2V0O2NvbnNvbGUubG9nKCJSb3VuZCBwcm9maWxlIHBpY3R1cmUgY2hhbmdlZDoiLHIudmFsdWU/LnN1YnN0cmluZygwLDUwKSsiLi4uIil9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUHJvZmlsZSBQaWN0dXJlIElucHV0In0gLnN1YnRpdGxlPSR7IkJhc2ljIHVzYWdlIHdpdGggcm91bmQgYW5kIHNxdWFyZSBzaGFwZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXJvdyI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iUHJvZmlsZSBQaWN0dXJlIChSb3VuZCkiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDbGljayB0byB1cGxvYWQgb3IgZHJhZyAmIGRyb3AgYW4gaW1hZ2UiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTIwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlByb2ZpbGUgUGljdHVyZSAoU3F1YXJlKSIKICAgICAgICAgICAgZGVzY3JpcHRpb249IlN1cHBvcnRzIEpQRUcsIFBORywgYW5kIFdlYlAgZm9ybWF0cyIKICAgICAgICAgICAgc2hhcGU9InNxdWFyZSIKICAgICAgICAgICAgc2l6ZT0iMTIwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnt0LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUiKS5mb3JFYWNoKGE9PnthLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIscj0+e2xldCBpPXIudGFyZ2V0O2NvbnNvbGUubG9nKGBQcm9maWxlIChzaXplICR7aS5zaXplfSkgY2hhbmdlZGApfSl9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU2l6ZSBWYXJpYXRpb25zIn0gLnN1YnRpdGxlPSR7IlByb2ZpbGUgcGljdHVyZXMgaW4gZGlmZmVyZW50IHNpemVzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1yb3ciPgogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlNtYWxsICg4MHB4KSIKICAgICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgICBzaXplPSI4MCIKICAgICAgICAgID48L2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJNZWRpdW0gKDEyMHB4KSIKICAgICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgICBzaXplPSIxMjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iTGFyZ2UgKDE2MHB4KSIKICAgICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgICBzaXplPSIxNjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNakF3SWlCb1pXbG5hSFE5SWpJd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtJQ0E4WkdWbWN6NEtJQ0FnSUR4c2FXNWxZWEpIY21Ga2FXVnVkQ0JwWkQwaVozSmhaR2xsYm5RaUlIZ3hQU0l3SlNJZ2VURTlJakFsSWlCNE1qMGlNVEF3SlNJZ2VUSTlJakV3TUNVaVBnb2dJQ0FnSUNBOGMzUnZjQ0J2Wm1aelpYUTlJakFsSWlCemRHOXdMV052Ykc5eVBTSWpOalkzWldWaElpQXZQZ29nSUNBZ0lDQThjM1J2Y0NCdlptWnpaWFE5SWpFd01DVWlJSE4wYjNBdFkyOXNiM0k5SWlNM05qUmlZVElpSUM4K0NpQWdJQ0E4TDJ4cGJtVmhja2R5WVdScFpXNTBQZ29nSUR3dlpHVm1jejRLSUNBOGNtVmpkQ0IzYVdSMGFEMGlNakF3SWlCb1pXbG5hSFE5SWpJd01DSWdabWxzYkQwaWRYSnNLQ05uY21Ga2FXVnVkQ2tpSUM4K0NpQWdQSFJsZUhRZ2VEMGlOVEFsSWlCNVBTSTFNQ1VpSUdSdmJXbHVZVzUwTFdKaGMyVnNhVzVsUFNKdGFXUmtiR1VpSUhSbGVIUXRZVzVqYUc5eVBTSnRhV1JrYkdVaUlHWnZiblF0Wm1GdGFXeDVQU0pCY21saGJDSWdabTl1ZEMxemFYcGxQU0k0TUNJZ1ptbHNiRDBpZDJocGRHVWlQa3BFUEM5MFpYaDBQZ284TDNOMlp6ND0iLGE9dC5xdWVyeVNlbGVjdG9yKCIjcHJlZmlsbGVkLXByb2ZpbGUiKTthJiYoYS52YWx1ZT1lLGEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixyPT57bGV0IGk9ci50YXJnZXQsbz10LnF1ZXJ5U2VsZWN0b3IoIiNwcmVmaWxsZWQtb3V0cHV0Iik7byYmKG8udGV4dENvbnRlbnQ9aS52YWx1ZT9gSW1hZ2UgZGF0YTogJHtpLnZhbHVlLnN1YnN0cmluZygwLDgwKX0uLi5gOiJObyBpbWFnZSBzZWxlY3RlZCIpfSkpfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQcmUtZmlsbGVkIGFuZCBWYWx1ZSBCaW5kaW5nIn0gLnN1YnRpdGxlPSR7IlByb2ZpbGUgcGljdHVyZSB3aXRoIGluaXRpYWwgdmFsdWUgYW5kIGNoYW5nZSB0cmFja2luZyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICBpZD0icHJlZmlsbGVkLXByb2ZpbGUiCiAgICAgICAgICBsYWJlbD0iRWRpdCBFeGlzdGluZyBQcm9maWxlIgogICAgICAgICAgZGVzY3JpcHRpb249IkNsaWNrIHRoZSBlZGl0IGJ1dHRvbiB0byBjaGFuZ2Ugb3IgZGVsZXRlIHRvIHJlbW92ZSIKICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgIHNpemU9IjE1MCIKICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgIAogICAgICAgIDxkaXYgaWQ9InByZWZpbGxlZC1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICBJbWFnZSBkYXRhIHdpbGwgYXBwZWFyIGhlcmUgd2hlbiBjaGFuZ2VkCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCIjZGlzYWJsZWQtcHJvZmlsZSIpO2UmJihlLnZhbHVlPSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNakF3SWlCb1pXbG5hSFE5SWpJd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtJQ0E4Y21WamRDQjNhV1IwYUQwaU1qQXdJaUJvWldsbmFIUTlJakl3TUNJZ1ptbHNiRDBpSTJOalkyTmpZeUlnTHo0S0lDQThkR1Y0ZENCNFBTSTFNQ1VpSUhrOUlqVXdKU0lnWkc5dGFXNWhiblF0WW1GelpXeHBibVU5SW0xcFpHUnNaU0lnZEdWNGRDMWhibU5vYjNJOUltMXBaR1JzWlNJZ1ptOXVkQzFtWVcxcGJIazlJa0Z5YVdGc0lpQm1iMjUwTFhOcGVtVTlJall3SWlCbWFXeHNQU0ozYUdsMFpTSStUa0U4TDNSbGVIUStDand2YzNablBnPT0iKX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRm9ybSBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXJvdyI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iUmVxdWlyZWQgRmllbGQiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIgogICAgICAgICAgICBzaGFwZT0icm91bmQiCiAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgaWQ9ImRpc2FibGVkLXByb2ZpbGUiCiAgICAgICAgICAgIGxhYmVsPSJEaXNhYmxlZCBTdGF0ZSIKICAgICAgICAgICAgZGVzY3JpcHRpb249IkNhbm5vdCBiZSBlZGl0ZWQiCiAgICAgICAgICAgIHNoYXBlPSJzcXVhcmUiCiAgICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlVwbG9hZCBPbmx5IgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iRGVsZXRlIG5vdCBhbGxvd2VkIgogICAgICAgICAgICBzaGFwZT0icm91bmQiCiAgICAgICAgICAgIC5hbGxvd0RlbGV0ZT0keyExfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZXMifSAuc3VidGl0bGU9JHsiQ29tcGxldGUgZmVhdHVyZSBzZXQgb2YgdGhlIHByb2ZpbGUgcGljdHVyZSBpbnB1dCJ9PgogICAgICAgIDx1bCBjbGFzcz0iZmVhdHVyZS1saXN0Ij4KICAgICAgICAgIDxsaT48c3Ryb25nPkltYWdlIFVwbG9hZDo8L3N0cm9uZz4gQ2xpY2sgdG8gdXBsb2FkIG9yIGRyYWcgJiBkcm9wIGltYWdlczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5JbWFnZSBDcm9wcGluZzo8L3N0cm9uZz4gSW50ZXJhY3RpdmUgY3JvcCB0b29sIHdpdGggcmVzaXplIGhhbmRsZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2hhcGUgU3VwcG9ydDo8L3N0cm9uZz4gUm91bmQgb3Igc3F1YXJlIHByb2ZpbGUgcGljdHVyZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2l6ZSBDdXN0b21pemF0aW9uOjwvc3Ryb25nPiBBZGp1c3RhYmxlIGRpbWVuc2lvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlldyAmIEVkaXQ6PC9zdHJvbmc+IEhvdmVyIG92ZXJsYXkgd2l0aCBlZGl0IGFuZCBkZWxldGUgb3B0aW9uczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5GaWxlIFZhbGlkYXRpb246PC9zdHJvbmc+IEZvcm1hdCBhbmQgc2l6ZSByZXN0cmljdGlvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UmVzcG9uc2l2ZSBEZXNpZ246PC9zdHJvbmc+IFdvcmtzIG9uIGRlc2t0b3AgYW5kIG1vYmlsZSBkZXZpY2VzPC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPkZvcm0gSW50ZWdyYXRpb246PC9zdHJvbmc+IFN0YW5kYXJkIGZvcm0gdmFsdWUgYmluZGluZyBhbmQgdmFsaWRhdGlvbjwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5BY2Nlc3NpYmlsaXR5Ojwvc3Ryb25nPiBLZXlib2FyZCBuYXZpZ2F0aW9uIGFuZCBzY3JlZW4gcmVhZGVyIHN1cHBvcnQ8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Wi1JbmRleCBNYW5hZ2VtZW50Ojwvc3Ryb25nPiBQcm9wZXIgbW9kYWwgc3RhY2tpbmcgd2l0aCByZWdpc3RyeTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICAKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAyNHB4OyI+CiAgICAgICAgICA8c3Ryb25nPlN1cHBvcnRlZCBGb3JtYXRzOjwvc3Ryb25nPiBKUEVHLCBQTkcsIFdlYlA8YnI+CiAgICAgICAgICA8c3Ryb25nPk1heCBGaWxlIFNpemU6PC9zdHJvbmc+IDVNQiAoY29uZmlndXJhYmxlKTxicj4KICAgICAgICAgIDxzdHJvbmc+T3V0cHV0IEZvcm1hdDo8L3N0cm9uZz4gQmFzZTY0IGVuY29kZWQgSlBFRwogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7ZmUoKTtGdCgpO0JlKCk7dmFyIHJhPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0scjE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LG5uMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUiKV0sZSxhPVtdLHIsaT1YZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXSx2LHk9W10sdz1bXSxFLEM9W10sej1bXSxQLF89W10sJD1bXSxILEw9W10saz1bXSxOLFM9W10sVD1bXSxSLEE9W10sRj1bXSxhZSxWPVtdLFNlPVtdLHplLFc9W10sTmU9W10sUmUsWD1bXSxJPVtdO3ZhciBPPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgRz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOlN0cmluZ30pXSxmPVtEKHt0eXBlOlN0cmluZ30pXSxkPVtEKHt0eXBlOk51bWJlcn0pXSxiPVtEKHt0eXBlOlN0cmluZ30pXSx2PVtEKHt0eXBlOkJvb2xlYW59KV0sRT1bRCh7dHlwZTpCb29sZWFufSldLFA9W0Qoe3R5cGU6TnVtYmVyfSldLEg9W0Qoe3R5cGU6QXJyYXl9KV0sTj1bRCh7dHlwZTpOdW1iZXJ9KV0sUj1bRCh7dHlwZTpOdW1iZXJ9KV0sYWU9W2xlKCldLHplPVtsZSgpXSxSZT1bbGUoKV0scmEodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aj0+InZhbHVlImluIGosZ2V0Omo9PmoudmFsdWUsc2V0OihqLHNlKT0+e2oudmFsdWU9c2V9fSxtZXRhZGF0YTpHfSxzLGwpLHJhKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hhcGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmo9PiJzaGFwZSJpbiBqLGdldDpqPT5qLnNoYXBlLHNldDooaixzZSk9PntqLnNoYXBlPXNlfX0sbWV0YWRhdGE6R30sYyx1KSxyYSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNpemUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmo9PiJzaXplImluIGosZ2V0Omo9Pmouc2l6ZSxzZXQ6KGosc2UpPT57ai5zaXplPXNlfX0sbWV0YWRhdGE6R30saCxnKSxyYSh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBsYWNlaG9sZGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpqPT4icGxhY2Vob2xkZXIiaW4gaixnZXQ6aj0+ai5wbGFjZWhvbGRlcixzZXQ6KGosc2UpPT57ai5wbGFjZWhvbGRlcj1zZX19LG1ldGFkYXRhOkd9LHgsbSkscmEodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhbGxvd1VwbG9hZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aj0+ImFsbG93VXBsb2FkImluIGosZ2V0Omo9PmouYWxsb3dVcGxvYWQsc2V0OihqLHNlKT0+e2ouYWxsb3dVcGxvYWQ9c2V9fSxtZXRhZGF0YTpHfSx5LHcpLHJhKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWxsb3dEZWxldGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmo9PiJhbGxvd0RlbGV0ZSJpbiBqLGdldDpqPT5qLmFsbG93RGVsZXRlLHNldDooaixzZSk9PntqLmFsbG93RGVsZXRlPXNlfX0sbWV0YWRhdGE6R30sQyx6KSxyYSh0aGlzLG51bGwsUCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1heEZpbGVTaXplIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpqPT4ibWF4RmlsZVNpemUiaW4gaixnZXQ6aj0+ai5tYXhGaWxlU2l6ZSxzZXQ6KGosc2UpPT57ai5tYXhGaWxlU2l6ZT1zZX19LG1ldGFkYXRhOkd9LF8sJCkscmEodGhpcyxudWxsLEgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhY2NlcHRlZEZvcm1hdHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmo9PiJhY2NlcHRlZEZvcm1hdHMiaW4gaixnZXQ6aj0+ai5hY2NlcHRlZEZvcm1hdHMsc2V0OihqLHNlKT0+e2ouYWNjZXB0ZWRGb3JtYXRzPXNlfX0sbWV0YWRhdGE6R30sTCxrKSxyYSh0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im91dHB1dFNpemUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmo9PiJvdXRwdXRTaXplImluIGosZ2V0Omo9Pmoub3V0cHV0U2l6ZSxzZXQ6KGosc2UpPT57ai5vdXRwdXRTaXplPXNlfX0sbWV0YWRhdGE6R30sUyxUKSxyYSh0aGlzLG51bGwsUix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im91dHB1dFF1YWxpdHkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmo9PiJvdXRwdXRRdWFsaXR5ImluIGosZ2V0Omo9Pmoub3V0cHV0UXVhbGl0eSxzZXQ6KGosc2UpPT57ai5vdXRwdXRRdWFsaXR5PXNlfX0sbWV0YWRhdGE6R30sQSxGKSxyYSh0aGlzLG51bGwsYWUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0hvdmVyZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmo9PiJpc0hvdmVyZWQiaW4gaixnZXQ6aj0+ai5pc0hvdmVyZWQsc2V0OihqLHNlKT0+e2ouaXNIb3ZlcmVkPXNlfX0sbWV0YWRhdGE6R30sVixTZSkscmEodGhpcyxudWxsLHplLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNEcmFnZ2luZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6aj0+ImlzRHJhZ2dpbmciaW4gaixnZXQ6aj0+ai5pc0RyYWdnaW5nLHNldDooaixzZSk9PntqLmlzRHJhZ2dpbmc9c2V9fSxtZXRhZGF0YTpHfSxXLE5lKSxyYSh0aGlzLG51bGwsUmUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0xvYWRpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmo9PiJpc0xvYWRpbmciaW4gaixnZXQ6aj0+ai5pc0xvYWRpbmcsc2V0OihqLHNlKT0+e2ouaXNMb2FkaW5nPXNlfX0sbWV0YWRhdGE6R30sWCxJKSxyYShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpHfSxudWxsLGEpLE89cj1lLnZhbHVlLEcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6R30pfXN0YXRpYyBkZW1vPXpPdDtzdGF0aWMgZGVtb0dyb3VwPSJJbnB1dCI7I2U9cjEodGhpcyxzLCIiKTtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdmFsdWUoRyl7dGhpcy4jZT1HfSN0PShyMSh0aGlzLGwpLHIxKHRoaXMsYywicm91bmQiKSk7Z2V0IHNoYXBlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHNoYXBlKEcpe3RoaXMuI3Q9R30jYT0ocjEodGhpcyx1KSxyMSh0aGlzLGgsMTIwKSk7Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy4jYX1zZXQgc2l6ZShHKXt0aGlzLiNhPUd9I3I9KHIxKHRoaXMsZykscjEodGhpcyx4LCIiKSk7Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuI3J9c2V0IHBsYWNlaG9sZGVyKEcpe3RoaXMuI3I9R30jaT0ocjEodGhpcyxtKSxyMSh0aGlzLHksITApKTtnZXQgYWxsb3dVcGxvYWQoKXtyZXR1cm4gdGhpcy4jaX1zZXQgYWxsb3dVcGxvYWQoRyl7dGhpcy4jaT1HfSNvPShyMSh0aGlzLHcpLHIxKHRoaXMsQywhMCkpO2dldCBhbGxvd0RlbGV0ZSgpe3JldHVybiB0aGlzLiNvfXNldCBhbGxvd0RlbGV0ZShHKXt0aGlzLiNvPUd9I3M9KHIxKHRoaXMseikscjEodGhpcyxfLDUqMTAyNCoxMDI0KSk7Z2V0IG1heEZpbGVTaXplKCl7cmV0dXJuIHRoaXMuI3N9c2V0IG1heEZpbGVTaXplKEcpe3RoaXMuI3M9R30jbj0ocjEodGhpcywkKSxyMSh0aGlzLEwsWyJpbWFnZS9qcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2Uvd2VicCJdKSk7Z2V0IGFjY2VwdGVkRm9ybWF0cygpe3JldHVybiB0aGlzLiNufXNldCBhY2NlcHRlZEZvcm1hdHMoRyl7dGhpcy4jbj1HfSNsPShyMSh0aGlzLGspLHIxKHRoaXMsUyw4MDApKTtnZXQgb3V0cHV0U2l6ZSgpe3JldHVybiB0aGlzLiNsfXNldCBvdXRwdXRTaXplKEcpe3RoaXMuI2w9R30jYz0ocjEodGhpcyxUKSxyMSh0aGlzLEEsLjk1KSk7Z2V0IG91dHB1dFF1YWxpdHkoKXtyZXR1cm4gdGhpcy4jY31zZXQgb3V0cHV0UXVhbGl0eShHKXt0aGlzLiNjPUd9I2Q9KHIxKHRoaXMsRikscjEodGhpcyxWLCExKSk7Z2V0IGlzSG92ZXJlZCgpe3JldHVybiB0aGlzLiNkfXNldCBpc0hvdmVyZWQoRyl7dGhpcy4jZD1HfSNmPShyMSh0aGlzLFNlKSxyMSh0aGlzLFcsITEpKTtnZXQgaXNEcmFnZ2luZygpe3JldHVybiB0aGlzLiNmfXNldCBpc0RyYWdnaW5nKEcpe3RoaXMuI2Y9R30jdT0ocjEodGhpcyxOZSkscjEodGhpcyxYLCExKSk7Z2V0IGlzTG9hZGluZygpe3JldHVybiB0aGlzLiN1fXNldCBpc0xvYWRpbmcoRyl7dGhpcy4jdT1HfW1vZGFsSW5zdGFuY2U9KHIxKHRoaXMsSSksbnVsbCk7c3RhdGljIHN0eWxlcz1beGUsLi4uWGUuYmFzZVN0eWxlcyxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CgogICAgICAucHJvZmlsZS1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLWNvbnRhaW5lcjpob3ZlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtcGljdHVyZSB7CiAgICAgICAgd2lkdGg6IHZhcigtLXNpemUsIDEyMHB4KTsKICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUsIDEyMHB4KTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y1ZjVmNSIsIiMxODE4MWIiKX07CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLnJvdW5kIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUuc3F1YXJlIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLmRyYWdnaW5nIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCIjM2I4MmY2IiwiIzYwYTVmYSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCA0cHggJHtwLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjE1KSIsInJnYmEoOTYsIDE2NSwgMjUwLCAwLjE1KSIpfTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtcGljdHVyZTpob3ZlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiI2Q0ZDRkOCIsIiMzZjNmNDYiKX07CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmU6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAucHJvZmlsZS1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICB9CgogICAgICAucGxhY2Vob2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgfQoKICAgICAgLm92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAucHJvZmlsZS1jb250YWluZXI6aG92ZXIgLm92ZXJsYXkgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CgogICAgICAub3ZlcmxheS1idXR0b24gewogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSkiLCJyZ2JhKDM5LCAzOSwgNDIsIDAuOTUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgfQoKICAgICAgLm92ZXJsYXktYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMzZjNmNDYiKX07CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICB9CgogICAgICAub3ZlcmxheS1idXR0b24uZGVsZXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC45KSIsInJnYmEoMjIwLCAzOCwgMzgsIDAuOSkiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbi5kZWxldGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZWY0NDQ0IiwiI2RjMjYyNiIpfTsKICAgICAgfQoKICAgICAgLmRyb3Atem9uZS10ZXh0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmhpZGRlbi1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTG9hZGluZyBhbmltYXRpb24gKi8KICAgICAgLmxvYWRpbmctb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpIiwicmdiYSgwLCAwLCAwLCAwLjgpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLW92ZXJsYXkuc2hvdyB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3Bpbm5lciB7CiAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtwLmJkVGhlbWUoIiMzYjgyZjYiLCIjNjBhNWZhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC42cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcHVsc2UgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsKICAgICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUuY2xpY2tpbmcgewogICAgICAgIGFuaW1hdGlvbjogcHVsc2UgMC4zcyBlYXNlLW91dDsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9PjwvZGVlcy1sYWJlbD4KICAgICAgICAKICAgICAgICA8ZGl2IAogICAgICAgICAgY2xhc3M9InByb2ZpbGUtY29udGFpbmVyIgogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVDbGlja30KICAgICAgICAgIEBkcmFnb3Zlcj0ke3RoaXMuaGFuZGxlRHJhZ092ZXJ9CiAgICAgICAgICBAZHJhZ2xlYXZlPSR7dGhpcy5oYW5kbGVEcmFnTGVhdmV9CiAgICAgICAgICBAZHJvcD0ke3RoaXMuaGFuZGxlRHJvcH0KICAgICAgICAgIHN0eWxlPSItLXNpemU6ICR7dGhpcy5zaXplfXB4IgogICAgICAgID4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2ZpbGUtcGljdHVyZSAke3RoaXMuc2hhcGV9ICR7dGhpcy5pc0RyYWdnaW5nPyJkcmFnZ2luZyI6IiJ9ICR7dGhpcy5pc0xvYWRpbmcmJiF0aGlzLnZhbHVlPyJjbGlja2luZyI6IiJ9Ij4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlP01gCiAgICAgICAgICAgICAgPGltZyBjbGFzcz0icHJvZmlsZS1pbWFnZSIgc3JjPSIke3RoaXMudmFsdWV9IiBhbHQ9IlByb2ZpbGUgcGljdHVyZSIgLz4KICAgICAgICAgICAgYDpNYAogICAgICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9InBsYWNlaG9sZGVyLWljb24iIGljb249Imx1Y2lkZTp1c2VyIiBpY29uU2l6ZT0iJHt0aGlzLnNpemUqLjV9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgYH0KICAgICAgICAgICAgCiAgICAgICAgICAgICR7dGhpcy5pc0RyYWdnaW5nP01gCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcmxheSIgc3R5bGU9Im9wYWNpdHk6IDEiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHJvcC16b25lLXRleHQiPgogICAgICAgICAgICAgICAgICBEcm9wIGltYWdlIGhlcmUKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOiIifQogICAgICAgICAgICAKICAgICAgICAgICAgJHt0aGlzLnZhbHVlJiYhdGhpcy5kaXNhYmxlZD9NYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJsYXkiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcmxheS1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLmFsbG93VXBsb2FkP01gCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ib3ZlcmxheS1idXR0b24iIEBjbGljaz0ke0c9PntHLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub3Blbk1vZGFsKCl9fSB0aXRsZT0iQ2hhbmdlIHBpY3R1cmUiPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6cGVuY2lsIiBpY29uU2l6ZT0iMjAiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICBgOiIifQogICAgICAgICAgICAgICAgICAke3RoaXMuYWxsb3dEZWxldGU/TWAKICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJvdmVybGF5LWJ1dHRvbiBkZWxldGUiIEBjbGljaz0ke0c9PntHLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGVsZXRlUGljdHVyZSgpfX0gdGl0bGU9IkRlbGV0ZSBwaWN0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOnRyYXNoMiIgaWNvblNpemU9IjIwIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOiIifQogICAgICAgICAgICAKICAgICAgICAgICAgJHt0aGlzLmlzTG9hZGluZyYmIXRoaXMudmFsdWU/TWAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLW92ZXJsYXkgc2hvdyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOiIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGlucHV0CiAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgY2xhc3M9ImhpZGRlbi1pbnB1dCIKICAgICAgICAgIGFjY2VwdD0iJHt0aGlzLmFjY2VwdGVkRm9ybWF0cy5qb2luKCIsIil9IgogICAgICAgICAgQGNoYW5nZT0ke3RoaXMuaGFuZGxlRmlsZVNlbGVjdH0KICAgICAgICAvPgogICAgICA8L2Rpdj4KICAgIGB9aGFuZGxlQ2xpY2soKXtpZighKHRoaXMuZGlzYWJsZWR8fCF0aGlzLmFsbG93VXBsb2FkKSYmIXRoaXMudmFsdWUpe3RoaXMuaXNMb2FkaW5nPSEwO2xldCBHPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuaGlkZGVuLWlucHV0Iiksaj0oKT0+e3NldFRpbWVvdXQoKCk9PnsoIUcuZmlsZXN8fEcuZmlsZXMubGVuZ3RoPT09MCkmJih0aGlzLmlzTG9hZGluZz0hMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixqKX0sMzAwKX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixqKSxHLmNsaWNrKCl9fWhhbmRsZUZpbGVTZWxlY3QoRyl7bGV0IGo9Ry50YXJnZXQsc2U9ai5maWxlcz8uWzBdO3RoaXMuaXNMb2FkaW5nPSExLHNlJiZ0aGlzLnByb2Nlc3NGaWxlKHNlKSxqLnZhbHVlPSIifWhhbmRsZURyYWdPdmVyKEcpe0cucHJldmVudERlZmF1bHQoKSwhdGhpcy5kaXNhYmxlZCYmdGhpcy5hbGxvd1VwbG9hZCYmKHRoaXMuaXNEcmFnZ2luZz0hMCl9aGFuZGxlRHJhZ0xlYXZlKCl7dGhpcy5pc0RyYWdnaW5nPSExfWhhbmRsZURyb3AoRyl7aWYoRy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaXNEcmFnZ2luZz0hMSx0aGlzLmRpc2FibGVkfHwhdGhpcy5hbGxvd1VwbG9hZClyZXR1cm47bGV0IGo9Ry5kYXRhVHJhbnNmZXI/LmZpbGVzWzBdO2omJnRoaXMucHJvY2Vzc0ZpbGUoail9YXN5bmMgcHJvY2Vzc0ZpbGUoRyl7aWYoIXRoaXMuYWNjZXB0ZWRGb3JtYXRzLmluY2x1ZGVzKEcudHlwZSkpe2NvbnNvbGUuZXJyb3IoIkludmFsaWQgZmlsZSB0eXBlOiIsRy50eXBlKTtyZXR1cm59aWYoRy5zaXplPnRoaXMubWF4RmlsZVNpemUpe2NvbnNvbGUuZXJyb3IoIkZpbGUgdG9vIGxhcmdlOiIsRy5zaXplKTtyZXR1cm59bGV0IGo9bmV3IEZpbGVSZWFkZXI7ai5vbmxvYWQ9YXN5bmMgc2U9PntsZXQga2U9c2UudGFyZ2V0Py5yZXN1bHQ7YXdhaXQgdGhpcy5vcGVuTW9kYWwoa2UpfSxqLnJlYWRBc0RhdGFVUkwoRyl9YXN5bmMgb3Blbk1vZGFsKEcpe2xldCBqPUd8fHRoaXMudmFsdWU7aWYoIWope3RoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuaGlkZGVuLWlucHV0IikuY2xpY2soKTtyZXR1cm59dGhpcy5tb2RhbEluc3RhbmNlPW5ldyBZRWUsdGhpcy5tb2RhbEluc3RhbmNlLnNoYXBlPXRoaXMuc2hhcGUsdGhpcy5tb2RhbEluc3RhbmNlLmluaXRpYWxJbWFnZT1qLHRoaXMubW9kYWxJbnN0YW5jZS5vdXRwdXRTaXplPXRoaXMub3V0cHV0U2l6ZSx0aGlzLm1vZGFsSW5zdGFuY2Uub3V0cHV0UXVhbGl0eT10aGlzLm91dHB1dFF1YWxpdHksdGhpcy5tb2RhbEluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoInNhdmUiLHNlPT57dGhpcy52YWx1ZT1zZS5kZXRhaWwuY3JvcHBlZEltYWdlLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpfSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLm1vZGFsSW5zdGFuY2UpfWRlbGV0ZVBpY3R1cmUoKXt0aGlzLnZhbHVlPSIiLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9c2V0VmFsdWUoRyl7dGhpcy52YWx1ZT1HfXN0YXRpY3tyMShyLGEpfX07cmV0dXJuIE89cn0pKCk7ZmUoKTtwMigpO0Z0KCk7dmFyIGtPdD1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LFpFZT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sbG4xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1wZGYiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXTt2YXIgZj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCgpXSxrT3QodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwZGZVcmwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnU9PiJwZGZVcmwiaW4gdSxnZXQ6dT0+dS5wZGZVcmwsc2V0Oih1LGQpPT57dS5wZGZVcmw9ZH19LG1ldGFkYXRhOmN9LHMsbCksa090KG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOmN9LG51bGwsYSksZj1yPWUudmFsdWUsYyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpjfSl9c3RhdGljIGRlbW89KCk9Pk1gIDxkZWVzLXBkZj48L2RlZXMtcGRmPiBgO3N0YXRpYyBkZW1vR3JvdXA9IlBERiI7I2U9WkVlKHRoaXMscywiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL2V4YW1wbGVzL2xlYXJuaW5nL2hlbGxvd29ybGQucGRmIik7Z2V0IHBkZlVybCgpe3JldHVybiB0aGlzLiNlfXNldCBwZGZVcmwoYyl7dGhpcy4jZT1jfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxaRWUodGhpcyxsKX1yZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgICAgIH0KICAgICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CgogICAgICAgICNwZGZjYW52YXMgewogICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCA1cHggI2NjYzsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGNhbnZhcwogICAgICAgIGlkPSJwZGZjYW52YXMiCiAgICAgICAgLmhlaWdodD0kezB9CiAgICAgICAgLndpZHRoPSR7MH0KCiAgICAgID48L2NhbnZhcz4KICAgIGB9c3RhdGljIHBkZkpzUmVhZHk7c3RhdGljIHBkZmpzTGliO2FzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7aWYoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSwhZi5wZGZKc1JlYWR5KXtsZXQgYz1zdC5wbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpO2YucGRmSnNSZWFkeT1jLnByb21pc2UsZi5wZGZqc0xpYj1hd2FpdCBpbXBvcnQoImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjAuMzc5Lytlc20iKSxmLnBkZmpzTGliLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3BkZmpzLWRpc3RANC4wLjM3OS9idWlsZC9wZGYud29ya2VyLm1qcyIsYy5yZXNvbHZlKCl9YXdhaXQgZi5wZGZKc1JlYWR5LHRoaXMuZGlzcGxheUNvbnRlbnQoKX1hc3luYyBkaXNwbGF5Q29udGVudCgpe2F3YWl0IGYucGRmSnNSZWFkeSxmLnBkZmpzTGliLmdldERvY3VtZW50KHRoaXMucGRmVXJsKS5wcm9taXNlLnRoZW4odT0+e2NvbnNvbGUubG9nKCJQREYgbG9hZGVkIiksdS5nZXRQYWdlKDEpLnRoZW4oaD0+e2NvbnNvbGUubG9nKCJQYWdlIGxvYWRlZCIpO2xldCBiPWguZ2V0Vmlld3BvcnQoe3NjYWxlOjEwfSkseD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiI3BkZmNhbnZhcyIpLG09eC5nZXRDb250ZXh0KCIyZCIpO3guaGVpZ2h0PWIuaGVpZ2h0LHgud2lkdGg9Yi53aWR0aDtsZXQgdj17Y2FudmFzQ29udGV4dDptLHZpZXdwb3J0OmJ9O2gucmVuZGVyKHYpLnByb21pc2UudGhlbihmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJQYWdlIHJlbmRlcmVkIil9KX0pfSx1PT57Y29uc29sZS5lcnJvcih1KX0pfWdldENvbnRleHRNZW51SXRlbXMoKXtyZXR1cm5be25hbWU6Ik9wZW4gUERGIGluIE5ldyBUYWIiLGljb25OYW1lOiJsdWNpZGU6RXh0ZXJuYWxMaW5rIixhY3Rpb246YXN5bmMoKT0+e3dpbmRvdy5vcGVuKHRoaXMucGRmVXJsLCJfYmxhbmsiKX19LHtkaXZpZGVyOiEwfSx7bmFtZToiQ29weSBQREYgVVJMIixpY29uTmFtZToibHVjaWRlOkNvcHkiLGFjdGlvbjphc3luYygpPT57YXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpfX0se25hbWU6IkRvd25sb2FkIFBERiIsaWNvbk5hbWU6Imx1Y2lkZTpEb3dubG9hZCIsYWN0aW9uOmFzeW5jKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Yy5ocmVmPXRoaXMucGRmVXJsLGMuZG93bmxvYWQ9dGhpcy5wZGZVcmwuc3BsaXQoIi8iKS5wb3AoKXx8ImRvY3VtZW50LnBkZiIsYy5jbGljaygpfX1dfXN0YXRpY3taRWUocixhKX19O3JldHVybiBmPXJ9KSgpO2ZlKCk7dmFyIHRvPWNsYXNze3N0YXRpYyBwZGZqc0xpYjtzdGF0aWMgaW5pdGlhbGl6ZWQ9ITE7c3RhdGljIGFzeW5jIGluaXRpYWxpemUoKXt0aGlzLmluaXRpYWxpemVkfHwodGhpcy5wZGZqc0xpYj1hd2FpdCBpbXBvcnQoImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjAuMzc5Lytlc20iKSx0aGlzLnBkZmpzTGliLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3BkZmpzLWRpc3RANC4wLjM3OS9idWlsZC9wZGYud29ya2VyLm1qcyIsdGhpcy5pbml0aWFsaXplZD0hMCl9c3RhdGljIGFzeW5jIGxvYWREb2N1bWVudChlKXtyZXR1cm4gYXdhaXQgdGhpcy5pbml0aWFsaXplKCksYXdhaXQgdGhpcy5wZGZqc0xpYi5nZXREb2N1bWVudChlKS5wcm9taXNlfXN0YXRpYyByZWxlYXNlRG9jdW1lbnQoZSl7fX07dmFyIEJJPWNsYXNze3N0YXRpYyBwb29sPVtdO3N0YXRpYyBtYXhQb29sU2l6ZT0yMDtzdGF0aWMgTUlOX0NBTlZBU19TSVpFPTI1NjtzdGF0aWMgTUFYX0NBTlZBU19TSVpFPTQwOTY7c3RhdGljIGFjcXVpcmUoZSxhKXtsZXQgcj10aGlzLnBvb2wuZmluZChsPT4hbC5pblVzZSYmbC5jYW52YXMud2lkdGg+PWUmJmwuY2FudmFzLmhlaWdodD49YSYmbC5jYW52YXMud2lkdGg8PWUqMS41JiZsLmNhbnZhcy5oZWlnaHQ8PWEqMS41KTtpZihyKXJldHVybiByLmluVXNlPSEwLHIubGFzdFVzZWQ9RGF0ZS5ub3coKSxyLmNhbnZhcy53aWR0aD1lLHIuY2FudmFzLmhlaWdodD1hLHIuY3R4LmNsZWFyUmVjdCgwLDAsZSxhKSxyO2lmKHRoaXMucG9vbC5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7bGV0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZj1sLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITAsZGVzeW5jaHJvbml6ZWQ6ITB9KTtsLndpZHRoPU1hdGgubWluKE1hdGgubWF4KGUsdGhpcy5NSU5fQ0FOVkFTX1NJWkUpLHRoaXMuTUFYX0NBTlZBU19TSVpFKSxsLmhlaWdodD1NYXRoLm1pbihNYXRoLm1heChhLHRoaXMuTUlOX0NBTlZBU19TSVpFKSx0aGlzLk1BWF9DQU5WQVNfU0laRSk7bGV0IGM9e2NhbnZhczpsLGN0eDpmLGluVXNlOiEwLGxhc3RVc2VkOkRhdGUubm93KCl9O3JldHVybiB0aGlzLnBvb2wucHVzaChjKSxjfWxldCBpPXRoaXMucG9vbC5maWx0ZXIobD0+IWwuaW5Vc2UpLnNvcnQoKGwsZik9PmwubGFzdFVzZWQtZi5sYXN0VXNlZClbMF07aWYoaSlyZXR1cm4gaS5jYW52YXMud2lkdGg9ZSxpLmNhbnZhcy5oZWlnaHQ9YSxpLmN0eC5jbGVhclJlY3QoMCwwLGUsYSksaS5pblVzZT0hMCxpLmxhc3RVc2VkPURhdGUubm93KCksaTtsZXQgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxzPW8uZ2V0Q29udGV4dCgiMmQiKTtyZXR1cm4gby53aWR0aD1lLG8uaGVpZ2h0PWEse2NhbnZhczpvLGN0eDpzLGluVXNlOiEwLGxhc3RVc2VkOkRhdGUubm93KCl9fXN0YXRpYyByZWxlYXNlKGUpe3RoaXMucG9vbC5pbmNsdWRlcyhlKSYmKGUuaW5Vc2U9ITEsZS5jdHguY2xlYXJSZWN0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpKX1zdGF0aWMgcmVsZWFzZUFsbCgpe2ZvcihsZXQgZSBvZiB0aGlzLnBvb2wpZS5pblVzZT0hMSxlLmN0eC5jbGVhclJlY3QoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCl9c3RhdGljIGRlc3Ryb3koKXtmb3IobGV0IGUgb2YgdGhpcy5wb29sKWUuY2FudmFzLndpZHRoPTAsZS5jYW52YXMuaGVpZ2h0PTA7dGhpcy5wb29sPVtdfXN0YXRpYyBnZXRTdGF0cygpe3JldHVybntwb29sU2l6ZTp0aGlzLnBvb2wubGVuZ3RoLG1heFBvb2xTaXplOnRoaXMubWF4UG9vbFNpemUsaW5Vc2U6dGhpcy5wb29sLmZpbHRlcihlPT5lLmluVXNlKS5sZW5ndGgsYXZhaWxhYmxlOnRoaXMucG9vbC5maWx0ZXIoZT0+IWUuaW5Vc2UpLmxlbmd0aH19c3RhdGljIGFkanVzdFBvb2xTaXplKGUpe2lmKGU8dGhpcy5wb29sLmxlbmd0aCl7bGV0IGE9dGhpcy5wb29sLmxlbmd0aC1lLHI9dGhpcy5wb29sLmZpbHRlcihpPT4haS5pblVzZSkuc2xpY2UoMCxhKTtmb3IobGV0IGkgb2Ygcil7bGV0IG89dGhpcy5wb29sLmluZGV4T2YoaSk7bz4tMSYmdGhpcy5wb29sLnNwbGljZShvLDEpfX10aGlzLm1heFBvb2xTaXplPWV9fTtmdW5jdGlvbiBLWmEodCxlKXtsZXQgYTtyZXR1cm4gZnVuY3Rpb24oLi4uaSl7bGV0IG89KCk9PntjbGVhclRpbWVvdXQoYSksdCguLi5pKX07Y2xlYXJUaW1lb3V0KGEpLGE9d2luZG93LnNldFRpbWVvdXQobyxlKX19ZnVuY3Rpb24gU090KHQsZSl7bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKC4uLmkpe2F8fCh0LmFwcGx5KHRoaXMsaSksYT0hMCxzZXRUaW1lb3V0KCgpPT5hPSExLGUpKX19ZnVuY3Rpb24gSlphKHQpe2lmKHQ9PT0wKXJldHVybiIwIEJ5dGVzIjtsZXQgZT0xMDI0LGE9WyJCeXRlcyIsIktCIiwiTUIiLCJHQiJdLHI9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLmxvZyhlKSk7cmV0dXJuIE1hdGgucm91bmQodC9NYXRoLnBvdyhlLHIpKjEwMCkvMTAwKyIgIithW3JdfWZ1bmN0aW9uIGVYYSh0LGU9MCl7bGV0IGE9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gYS50b3A+PS1lJiZhLmxlZnQ+PS1lJiZhLmJvdHRvbTw9KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkrZSYmYS5yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpK2V9dmFyIFJJPWNsYXNze3N0YXRpYyBtYXJrcz1uZXcgTWFwO3N0YXRpYyBtZWFzdXJlcz1bXTtzdGF0aWMgbWFyayhlKXt0aGlzLm1hcmtzLnNldChlLHBlcmZvcm1hbmNlLm5vdygpKX1zdGF0aWMgbWVhc3VyZShlLGEpe2xldCByPXRoaXMubWFya3MuZ2V0KGEpO2lmKHIpe2xldCBpPXBlcmZvcm1hbmNlLm5vdygpLXI7cmV0dXJuIHRoaXMubWVhc3VyZXMucHVzaCh7bmFtZTplLGR1cmF0aW9uOml9KSx0aGlzLm1hcmtzLmRlbGV0ZShhKSxpfXJldHVybiAwfXN0YXRpYyBnZXRSZXBvcnQoKXtsZXQgZT17bWVhc3VyZXM6Wy4uLnRoaXMubWVhc3VyZXNdLGF2ZXJhZ2VzOnt9fSxhPW5ldyBNYXA7Zm9yKGxldCByIG9mIHRoaXMubWVhc3VyZXMpYS5oYXMoci5uYW1lKXx8YS5zZXQoci5uYW1lLFtdKSxhLmdldChyLm5hbWUpLnB1c2goci5kdXJhdGlvbik7Zm9yKGxldFtyLGldb2YgYSllLmF2ZXJhZ2VzW3JdPWkucmVkdWNlKChvLHMpPT5vK3MsMCkvaS5sZW5ndGg7cmV0dXJuIGV9c3RhdGljIGNsZWFyKCl7dGhpcy5tYXJrcy5jbGVhcigpLHRoaXMubWVhc3VyZXM9W119fTtmZSgpO3ZhciBDT3Q9W3AuZGVmYXVsdFN0eWxlcyx0ZWAKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLnByZXZpZXctY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB3aWR0aDogMjAwcHg7CiAgICAgIGhlaWdodDogMjYwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwiaHNsKDIxNSAyMCUgMTQlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZTsKICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTIpIiwicmdiYSgwLCAwLCAwLCAwLjI0KSIpfTsKICAgIH0KCiAgICAucHJldmlldy1jb250YWluZXIuY2xpY2thYmxlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCJyZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICB9CgogICAgLnByZXZpZXctY29udGFpbmVyLmNsaWNrYWJsZTpob3ZlciAucHJldmlldy1vdmVybGF5IHsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAucHJldmlldy1zdGFjayB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnByZXZpZXctc3RhY2subm9uLWE0IHsKICAgICAgcGFkZGluZzogMTJweDsKICAgIH0KCiAgICAucHJldmlldy1jYW52YXMgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogYXV0bzsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgICBpbWFnZS1yZW5kZXJpbmc6IGF1dG87CiAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsInJnYmEoMCwgMCwgMCwgMC4zKSIpfTsKICAgIH0KCiAgICAubm9uLWE0IC5wcmV2aWV3LWNhbnZhcyB7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MiUpIiwiaHNsKDIxNyAyNSUgMjQlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgIC5wcmV2aWV3LWluZm8gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogOHB4OwogICAgICBsZWZ0OiA4cHg7CiAgICAgIHJpZ2h0OiA4cHg7CiAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSAvIDAuOTIpIiwiaHNsKDIxNSAyMCUgMTIlIC8gMC45MikiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiA2cHg7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEycHgpOwogICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICB6LWluZGV4OiAxMDsKICAgIH0KCiAgICAucHJldmlldy1pbmZvIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1wYWdlcyB7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIH0KCiAgICAucHJldmlldy1vdmVybGF5IHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuNykiLCJyZ2JhKDAsIDAsIDAsIDAuOCkiKX07CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgb3BhY2l0eTogMDsKICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7CiAgICAgIHotaW5kZXg6IDIwOwogICAgfQoKICAgIC5wcmV2aWV3LW92ZXJsYXkgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICBjb2xvcjogd2hpdGU7CiAgICB9CgogICAgLnByZXZpZXctb3ZlcmxheSBzcGFuIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBjb2xvcjogd2hpdGU7CiAgICB9CgogICAgLnByZXZpZXctbG9hZGluZywKICAgIC5wcmV2aWV3LWVycm9yIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBnYXA6IDEycHg7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICB9CgogICAgLnByZXZpZXctbG9hZGluZyB7CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5OSUpIiwiaHNsKDIxNSAyMCUgMTQlKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1lcnJvciB7CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCA3MiUgOTglKSIsImhzbCgwIDYyJSAyMCUpIil9OwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDcyJSA0MCUpIiwiaHNsKDAgNzAlIDY4JSkiKX07CiAgICB9CgogICAgLnByZXZpZXctc3Bpbm5lciB7CiAgICAgIHdpZHRoOiAyNHB4OwogICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgYm9yZGVyOiAycHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgIGFuaW1hdGlvbjogc3BpbiAwLjhzIGxpbmVhciBpbmZpbml0ZTsKICAgIH0KCiAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICB0byB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgfQogICAgfQoKICAgIC5wcmV2aWV3LXRleHQgewogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CgogICAgLnByZXZpZXctZXJyb3IgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAzMnB4OwogICAgfQoKICAgIC5wcmV2aWV3LXBhZ2UtaW5kaWNhdG9yIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDhweDsKICAgICAgbGVmdDogOHB4OwogICAgICByaWdodDogOHB4OwogICAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjcpIiwiaHNsKDAgMCUgMTAwJSAvIDAuOSkiKX07CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgid2hpdGUiLCJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICAgIHotaW5kZXg6IDE1OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMC4ycyBlYXNlOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZUluIHsKICAgICAgZnJvbSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgIH0KICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICB9CiAgICB9CgogICAgLyogUmVzcG9uc2l2ZSBzaXplcyAqLwogICAgOmhvc3QoW3NpemU9InNtYWxsIl0pIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgaGVpZ2h0OiAxOTVweDsKICAgIH0KCiAgICA6aG9zdChbc2l6ZT0ibGFyZ2UiXSkgLnByZXZpZXctY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDI1MHB4OwogICAgICBoZWlnaHQ6IDMyNXB4OwogICAgfQoKICAgIC8qIEdyaWQgb3B0aW1pemF0aW9ucyAqLwogICAgOmhvc3QoW2dyaWQtbW9kZV0pIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHdpbGwtY2hhbmdlOiBhdXRvOwogICAgfQoKICAgIDpob3N0KFtncmlkLW1vZGVdKSAucHJldmlldy1jYW52YXMgewogICAgICBpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7CiAgICAgIGltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXM7CiAgICB9CiAgYF07ZmUoKTt2YXIgTE90PSgpPT57bGV0IHQ9WyJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiLCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvd2ViL2NvbXByZXNzZWQudHJhY2Vtb25rZXktcGxkaS0wOS5wZGYiXTtyZXR1cm4gTWAKICAgIDxzdHlsZT4KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICAgIH0KCiAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDYwcHg7CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICAucHJldmlldy1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAucHJldmlldy1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbWluLXdpZHRoOiAxMDBweDsKICAgICAgfQoKICAgICAgLnBlcmZvcm1hbmNlLXN0YXRzIHsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLnN0YXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTUwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICB9CgogICAgICAuc3RhdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5zdGF0LWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5zdGF0LXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPlNpbmdsZSBQREYgUHJldmlldyB3aXRoIFN0YWNrZWQgUGFnZXM8L2gzPgogICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICAgICAgICAgIG1heFBhZ2VzPSIzIgogICAgICAgICAgc3RhY2tPZmZzZXQ9IjgiCiAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgPjwvZGVlcy1wZGYtcHJldmlldz4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5EaWZmZXJlbnQgU2l6ZXM8L2gzPgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPlNtYWxsOjwvZGl2PgogICAgICAgICAgPGRlZXMtcGRmLXByZXZpZXcKICAgICAgICAgICAgc2l6ZT0ic21hbGwiCiAgICAgICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL2V4YW1wbGVzL2xlYXJuaW5nL2hlbGxvd29ybGQucGRmIgogICAgICAgICAgICBtYXhQYWdlcz0iMiIKICAgICAgICAgICAgc3RhY2tPZmZzZXQ9IjYiCiAgICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgID48L2RlZXMtcGRmLXByZXZpZXc+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPkRlZmF1bHQ6PC9kaXY+CiAgICAgICAgICA8ZGVlcy1wZGYtcHJldmlldwogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgbWF4UGFnZXM9IjMiCiAgICAgICAgICAgIHN0YWNrT2Zmc2V0PSI4IgogICAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgICA+PC9kZWVzLXBkZi1wcmV2aWV3PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWxhYmVsIj5MYXJnZTo8L2Rpdj4KICAgICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICAgIHNpemU9ImxhcmdlIgogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgbWF4UGFnZXM9IjQiCiAgICAgICAgICAgIHN0YWNrT2Zmc2V0PSIxMCIKICAgICAgICAgICAgY2xpY2thYmxlPSJ0cnVlIgogICAgICAgICAgPjwvZGVlcy1wZGYtcHJldmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5Ob24tQ2xpY2thYmxlIFByZXZpZXc8L2gzPgogICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgIG1heFBhZ2VzPSIzIgogICAgICAgICAgc3RhY2tPZmZzZXQ9IjgiCiAgICAgICAgICBjbGlja2FibGU9ImZhbHNlIgogICAgICAgID48L2RlZXMtcGRmLXByZXZpZXc+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+UGVyZm9ybWFuY2UgR3JpZCAtIDUwIFBERnMgd2l0aCBMYXp5IExvYWRpbmc8L2gzPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjNjY2OyI+CiAgICAgICAgICBUaGlzIGdyaWQgZGVtb25zdHJhdGVzIHRoZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHdpdGggNTAgUERGIHByZXZpZXdzLgogICAgICAgICAgU2Nyb2xsIHRvIHNlZSBsYXp5IGxvYWRpbmcgaW4gYWN0aW9uIC0gcHJldmlld3MgcmVuZGVyIG9ubHkgd2hlbiB2aXNpYmxlLgogICAgICAgIDwvcD4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1ncmlkIj4KICAgICAgICAgICR7KGE9PntsZXQgcj1bXTtmb3IobGV0IGk9MDtpPGE7aSsrKXtsZXQgbz10W2kldC5sZW5ndGhdO3IucHVzaChNYAogICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICBwZGZVcmw9IiR7b30iCiAgICAgICAgICBtYXhQYWdlcz0iMyIKICAgICAgICAgIHN0YWNrT2Zmc2V0PSI2IgogICAgICAgICAgY2xpY2thYmxlPSJ0cnVlIgogICAgICAgICAgZ3JpZC1tb2RlCiAgICAgICAgICBAcGRmLXByZXZpZXctY2xpY2s9JHtzPT57Y29uc29sZS5sb2coIlBERiBQcmV2aWV3IGNsaWNrZWQ6IixzLmRldGFpbCksYWxlcnQoYFBERiBjbGlja2VkOiAke3MuZGV0YWlsLnBhZ2VDb3VudH0gcGFnZXNgKX19CiAgICAgICAgPjwvZGVlcy1wZGYtcHJldmlldz4KICAgICAgYCl9cmV0dXJuIHJ9KSg1MCl9CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InBlcmZvcm1hbmNlLXN0YXRzIj4KICAgICAgICAgIDxoND5QZXJmb3JtYW5jZSBGZWF0dXJlczwvaDQ+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cy1ncmlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+TGF6eSBMb2FkaW5nPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj7inJMgRW5hYmxlZDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtbGFiZWwiPkNhbnZhcyBQb29saW5nPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj7inJMgQWN0aXZlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+TWVtb3J5IE1hbmFnZW1lbnQ8L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtdmFsdWUiPuKckyBPcHRpbWl6ZWQ8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWxhYmVsIj5JbnRlcnNlY3Rpb24gT2JzZXJ2ZXI8L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtdmFsdWUiPjIwMHB4IG1hcmdpbjwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgfTtmZSgpO0Z0KCk7dmFyIFhyPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sVTE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LGNuMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtcGRmLXByZXZpZXciKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXSx2LHk9W10sdz1bXSxFLEM9W10sej1bXSxQLF89W10sJD1bXSxILEw9W10saz1bXSxOLFM9W10sVD1bXTt2YXIgUj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IEE9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpTdHJpbmd9KV0sZj1bRCh7dHlwZTpOdW1iZXJ9KV0sZD1bRCh7dHlwZTpCb29sZWFufSldLGI9W0Qoe3R5cGU6TnVtYmVyfSldLHY9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxFPVtEKHt0eXBlOkJvb2xlYW59KV0sUD1bRCh7dHlwZTpCb29sZWFufSldLEg9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxOPVtEKHt0eXBlOkJvb2xlYW59KV0sWHIodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwZGZVcmwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkY9PiJwZGZVcmwiaW4gRixnZXQ6Rj0+Ri5wZGZVcmwsc2V0OihGLGFlKT0+e0YucGRmVXJsPWFlfX0sbWV0YWRhdGE6QX0scyxsKSxYcih0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImN1cnJlbnRQcmV2aWV3UGFnZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Rj0+ImN1cnJlbnRQcmV2aWV3UGFnZSJpbiBGLGdldDpGPT5GLmN1cnJlbnRQcmV2aWV3UGFnZSxzZXQ6KEYsYWUpPT57Ri5jdXJyZW50UHJldmlld1BhZ2U9YWV9fSxtZXRhZGF0YTpBfSxjLHUpLFhyKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY2xpY2thYmxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpGPT4iY2xpY2thYmxlImluIEYsZ2V0OkY9PkYuY2xpY2thYmxlLHNldDooRixhZSk9PntGLmNsaWNrYWJsZT1hZX19LG1ldGFkYXRhOkF9LGgsZyksWHIodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwYWdlQ291bnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkY9PiJwYWdlQ291bnQiaW4gRixnZXQ6Rj0+Ri5wYWdlQ291bnQsc2V0OihGLGFlKT0+e0YucGFnZUNvdW50PWFlfX0sbWV0YWRhdGE6QX0seCxtKSxYcih0aGlzLG51bGwsdix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImxvYWRpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkY9PiJsb2FkaW5nImluIEYsZ2V0OkY9PkYubG9hZGluZyxzZXQ6KEYsYWUpPT57Ri5sb2FkaW5nPWFlfX0sbWV0YWRhdGE6QX0seSx3KSxYcih0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJlbmRlcmVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpGPT4icmVuZGVyZWQiaW4gRixnZXQ6Rj0+Ri5yZW5kZXJlZCxzZXQ6KEYsYWUpPT57Ri5yZW5kZXJlZD1hZX19LG1ldGFkYXRhOkF9LEMseiksWHIodGhpcyxudWxsLFAse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJlcnJvciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Rj0+ImVycm9yImluIEYsZ2V0OkY9PkYuZXJyb3Isc2V0OihGLGFlKT0+e0YuZXJyb3I9YWV9fSxtZXRhZGF0YTpBfSxfLCQpLFhyKHRoaXMsbnVsbCxILHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNIb3ZlcmluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Rj0+ImlzSG92ZXJpbmciaW4gRixnZXQ6Rj0+Ri5pc0hvdmVyaW5nLHNldDooRixhZSk9PntGLmlzSG92ZXJpbmc9YWV9fSxtZXRhZGF0YTpBfSxMLGspLFhyKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNBNEZvcm1hdCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Rj0+ImlzQTRGb3JtYXQiaW4gRixnZXQ6Rj0+Ri5pc0E0Rm9ybWF0LHNldDooRixhZSk9PntGLmlzQTRGb3JtYXQ9YWV9fSxtZXRhZGF0YTpBfSxTLFQpLFhyKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOkF9LG51bGwsYSksUj1yPWUudmFsdWUsQSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpBfSl9c3RhdGljIGRlbW89TE90O3N0YXRpYyBkZW1vR3JvdXA9IlBERiI7c3RhdGljIHN0eWxlcz1DT3Q7I2U9VTEodGhpcyxzLCIiKTtnZXQgcGRmVXJsKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHBkZlVybChBKXt0aGlzLiNlPUF9I3Q9KFUxKHRoaXMsbCksVTEodGhpcyxjLDEpKTtnZXQgY3VycmVudFByZXZpZXdQYWdlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGN1cnJlbnRQcmV2aWV3UGFnZShBKXt0aGlzLiN0PUF9I2E9KFUxKHRoaXMsdSksVTEodGhpcyxoLCEwKSk7Z2V0IGNsaWNrYWJsZSgpe3JldHVybiB0aGlzLiNhfXNldCBjbGlja2FibGUoQSl7dGhpcy4jYT1BfSNyPShVMSh0aGlzLGcpLFUxKHRoaXMseCwwKSk7Z2V0IHBhZ2VDb3VudCgpe3JldHVybiB0aGlzLiNyfXNldCBwYWdlQ291bnQoQSl7dGhpcy4jcj1BfSNpPShVMSh0aGlzLG0pLFUxKHRoaXMseSwhMSkpO2dldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGxvYWRpbmcoQSl7dGhpcy4jaT1BfSNvPShVMSh0aGlzLHcpLFUxKHRoaXMsQywhMSkpO2dldCByZW5kZXJlZCgpe3JldHVybiB0aGlzLiNvfXNldCByZW5kZXJlZChBKXt0aGlzLiNvPUF9I3M9KFUxKHRoaXMseiksVTEodGhpcyxfLCExKSk7Z2V0IGVycm9yKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGVycm9yKEEpe3RoaXMuI3M9QX0jbj0oVTEodGhpcywkKSxVMSh0aGlzLEwsITEpKTtnZXQgaXNIb3ZlcmluZygpe3JldHVybiB0aGlzLiNufXNldCBpc0hvdmVyaW5nKEEpe3RoaXMuI249QX0jbD0oVTEodGhpcyxrKSxVMSh0aGlzLFMsITApKTtnZXQgaXNBNEZvcm1hdCgpe3JldHVybiB0aGlzLiNsfXNldCBpc0E0Rm9ybWF0KEEpe3RoaXMuI2w9QX1yZW5kZXJQYWdlc1Rhc2s9KFUxKHRoaXMsVCksbnVsbCk7cmVuZGVyUGFnZXNRdWV1ZWQ9ITE7b2JzZXJ2ZXI7cGRmRG9jdW1lbnQ7Y2FudmFzZXM9W107cmVzaXplT2JzZXJ2ZXI7cHJldmlld0NvbnRhaW5lcj1udWxsO3N0YWNrRWxlbWVudD1udWxsO2xvYWRlZFBkZlVybD1udWxsO2NvbnN0cnVjdG9yKCl7c3VwZXIoKX1yZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciAke3RoaXMubG9hZGluZz8ibG9hZGluZyI6IiJ9ICR7dGhpcy5lcnJvcj8iZXJyb3IiOiIifSAke3RoaXMuY2xpY2thYmxlPyJjbGlja2FibGUiOiIifSIKICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsaWNrfQogICAgICAgIEBtb3VzZWVudGVyPSR7dGhpcy5oYW5kbGVNb3VzZUVudGVyfQogICAgICAgIEBtb3VzZWxlYXZlPSR7dGhpcy5oYW5kbGVNb3VzZUxlYXZlfQogICAgICAgIEBtb3VzZW1vdmU9JHt0aGlzLmhhbmRsZU1vdXNlTW92ZX0KICAgICAgPgogICAgICAgICR7dGhpcy5sb2FkaW5nP01gCiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWxvYWRpbmciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXRleHQiPkxvYWRpbmcgcHJldmlldy4uLjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDoiIn0KCiAgICAgICAgJHt0aGlzLmVycm9yP01gCiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWVycm9yIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6RmlsZVgiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXRleHQiPkZhaWxlZCB0byBsb2FkIFBERjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDoiIn0KCiAgICAgICAgJHshdGhpcy5sb2FkaW5nJiYhdGhpcy5lcnJvcj9NYAogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1zdGFjayAke3RoaXMuaXNBNEZvcm1hdD8iIjoibm9uLWE0In0iPgogICAgICAgICAgICA8Y2FudmFzCiAgICAgICAgICAgICAgY2xhc3M9InByZXZpZXctY2FudmFzIgogICAgICAgICAgICAgIGRhdGEtcGFnZT0iJHt0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZX0iCiAgICAgICAgICAgID48L2NhbnZhcz4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICR7dGhpcy5wYWdlQ291bnQ+MSYmdGhpcy5pc0hvdmVyaW5nP01gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcGFnZS1pbmRpY2F0b3IiPgogICAgICAgICAgICAgIFBhZ2UgJHt0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZX0gb2YgJHt0aGlzLnBhZ2VDb3VudH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOiIifQoKICAgICAgICAgICR7dGhpcy5wYWdlQ291bnQ+MCYmIXRoaXMuaXNIb3ZlcmluZz9NYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWluZm8iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZpbGVUZXh0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJldmlldy1wYWdlcyI+JHt0aGlzLnBhZ2VDb3VudH0gcGFnZSR7dGhpcy5wYWdlQ291bnQ+MT8icyI6IiJ9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6IiJ9CgogICAgICAgICAgJHt0aGlzLmNsaWNrYWJsZT9NYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LW92ZXJsYXkiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkV5ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPHNwYW4+VmlldyBQREY8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDoiIn0KICAgICAgICBgOiIifQogICAgICA8L2Rpdj4KICAgIGB9aGFuZGxlTW91c2VFbnRlcigpe3RoaXMuaXNIb3ZlcmluZz0hMH1oYW5kbGVNb3VzZUxlYXZlKCl7dGhpcy5pc0hvdmVyaW5nPSExLHRoaXMuY3VycmVudFByZXZpZXdQYWdlIT09MSYmKHRoaXMuY3VycmVudFByZXZpZXdQYWdlPTEsdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCkpfWhhbmRsZU1vdXNlTW92ZShBKXtpZighdGhpcy5pc0hvdmVyaW5nfHx0aGlzLnBhZ2VDb3VudDw9MSlyZXR1cm47bGV0IEY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhZT1BLmNsaWVudFgtRi5sZWZ0LFY9Ri53aWR0aCxTZT1NYXRoLm1heCgwLE1hdGgubWluKDEsYWUvVikpLHplPU1hdGguY2VpbChTZSp0aGlzLnBhZ2VDb3VudCl8fDE7emUhPT10aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSYmKHRoaXMuY3VycmVudFByZXZpZXdQYWdlPXplLHRoaXMuc2NoZWR1bGVSZW5kZXJQYWdlcygpKX1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCksYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSx0aGlzLmNhY2hlRWxlbWVudHMoKSx0aGlzLnNldHVwUmVzaXplT2JzZXJ2ZXIoKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jbGVhbnVwKCksdGhpcy5vYnNlcnZlciYmdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpLHRoaXMucmVzaXplT2JzZXJ2ZXI9dm9pZCAwfXNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKXtsZXQgQT17cm9vdDpudWxsLHJvb3RNYXJnaW46IjIwMHB4Iix0aHJlc2hvbGQ6LjAxfTt0aGlzLm9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihTT3QoRj0+e2ZvcihsZXQgYWUgb2YgRilhZS5pc0ludGVyc2VjdGluZyYmIXRoaXMucmVuZGVyZWQmJnRoaXMucGRmVXJsP3RoaXMubG9hZEFuZFJlbmRlclByZXZpZXcoKTohYWUuaXNJbnRlcnNlY3RpbmcmJnRoaXMucmVuZGVyZWR9LDEwMCksQSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMpfWFzeW5jIGxvYWRBbmRSZW5kZXJQcmV2aWV3KCl7aWYoISh0aGlzLnJlbmRlcmVkfHx0aGlzLmxvYWRpbmcpKXt0aGlzLmxvYWRpbmc9ITAsdGhpcy5lcnJvcj0hMSxSSS5tYXJrKGBwcmV2aWV3LWxvYWQtJHt0aGlzLnBkZlVybH1gKTt0cnl7dGhpcy5wZGZEb2N1bWVudD1hd2FpdCB0by5sb2FkRG9jdW1lbnQodGhpcy5wZGZVcmwpLHRoaXMucGFnZUNvdW50PXRoaXMucGRmRG9jdW1lbnQubnVtUGFnZXMsdGhpcy5jdXJyZW50UHJldmlld1BhZ2U9MSx0aGlzLmxvYWRlZFBkZlVybD10aGlzLnBkZlVybCx0aGlzLmxvYWRpbmc9ITEsYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSx0aGlzLmNhY2hlRWxlbWVudHMoKSxhd2FpdCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKSx0aGlzLnJlbmRlcmVkPSEwO2xldCBBPVJJLm1lYXN1cmUoYHByZXZpZXctcmVuZGVyLSR7dGhpcy5wZGZVcmx9YCxgcHJldmlldy1sb2FkLSR7dGhpcy5wZGZVcmx9YCk7Y29uc29sZS5sb2coYFBERiBwcmV2aWV3IHJlbmRlcmVkIGluICR7QX1tc2ApfWNhdGNoKEEpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIFBERiBwcmV2aWV3OiIsQSksdGhpcy5lcnJvcj0hMCx0aGlzLmxvYWRpbmc9ITF9fX1zY2hlZHVsZVJlbmRlclBhZ2VzKCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQ/dGhpcy5yZW5kZXJQYWdlc1Rhc2s/KHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQ9ITAsdGhpcy5yZW5kZXJQYWdlc1Rhc2spOih0aGlzLnJlbmRlclBhZ2VzVGFzaz0oYXN5bmMoKT0+e3RyeXthd2FpdCB0aGlzLnBlcmZvcm1SZW5kZXJQYWdlcygpfWNhdGNoKEEpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5kZXIgUERGIHByZXZpZXcgcGFnZXM6IixBKX19KSgpLmZpbmFsbHkoKCk9Pnt0aGlzLnJlbmRlclBhZ2VzVGFzaz1udWxsLHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQmJih0aGlzLnJlbmRlclBhZ2VzUXVldWVkPSExLHRoaXMuc2NoZWR1bGVSZW5kZXJQYWdlcygpKX0pLHRoaXMucmVuZGVyUGFnZXNUYXNrKTpQcm9taXNlLnJlc29sdmUoKX1hc3luYyBwZXJmb3JtUmVuZGVyUGFnZXMoKXtpZighdGhpcy5wZGZEb2N1bWVudClyZXR1cm47YXdhaXQgbmV3IFByb21pc2UoVj0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFYpKTtsZXQgQT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LWNhbnZhcyIpO2lmKCFBKXtjb25zb2xlLndhcm4oIlByZXZpZXcgY2FudmFzIG5vdCBmb3VuZCBpbiBET00iKTtyZXR1cm59dGhpcy5jbGVhckNhbnZhc2VzKCksdGhpcy5jYWNoZUVsZW1lbnRzKCk7bGV0e2F2YWlsYWJsZVdpZHRoOkYsYXZhaWxhYmxlSGVpZ2h0OmFlfT10aGlzLmdldEF2YWlsYWJsZVNpemUoKTt0cnl7bGV0IFY9dGhpcy5jdXJyZW50UHJldmlld1BhZ2UsU2U9YXdhaXQgdGhpcy5wZGZEb2N1bWVudC5nZXRQYWdlKFYpLHplPVNlLmdldFZpZXdwb3J0KHtzY2FsZToxfSksVz16ZS5oZWlnaHQvemUud2lkdGgsTmU9MS40MTQsUmU9LjcwNyxYPTEuMjk0LEk9Ljc3MyxPPS4wNSxHPU1hdGguYWJzKFctTmUpPE5lKk8saj1NYXRoLmFicyhXLVJlKTxSZSpPLHNlPU1hdGguYWJzKFctWCk8WCpPLGtlPU1hdGguYWJzKFctSSk8SSpPO3RoaXMuaXNBNEZvcm1hdD1HfHxqfHxzZXx8a2UsY29uc29sZS5sb2coYFBERiBhc3BlY3QgcmF0aW86ICR7Vy50b0ZpeGVkKDMpfSwgc3RhbmRhcmQgZm9ybWF0OiAke3RoaXMuaXNBNEZvcm1hdH1gKTtsZXQgRGU9dGhpcy5pc0E0Rm9ybWF0P0Y6Ri0yNCxPZT10aGlzLmlzQTRGb3JtYXQ/YWU6YWUtMjQsVT1EZT4wP0RlL3plLndpZHRoOjAsQj1PZT4wP09lL3plLmhlaWdodDowLG9lPU1hdGgubWluKFV8fC41LEJ8fFV8fC41KSx2ZT1NYXRoLm1pbihvZSoyLDMpO2lmKCFOdW1iZXIuaXNGaW5pdGUodmUpfHx2ZTw9MCl7U2UuY2xlYW51cD8uKCk7cmV0dXJufWxldCB5ZT1TZS5nZXRWaWV3cG9ydCh7c2NhbGU6dmV9KSwkZT1CSS5hY3F1aXJlKHllLndpZHRoLHllLmhlaWdodCk7dGhpcy5jYW52YXNlcy5wdXNoKCRlKTtsZXQgbmU9e2NhbnZhc0NvbnRleHQ6JGUuY3R4LHZpZXdwb3J0OnllfTthd2FpdCBTZS5yZW5kZXIobmUpLnByb21pc2UsQS53aWR0aD15ZS53aWR0aCxBLmhlaWdodD15ZS5oZWlnaHQ7bGV0IHJlPURlLGdlPXllLmhlaWdodC95ZS53aWR0aCpEZTtpZihnZT5PZSl7bGV0IHJ0PU9lLHVlPXllLndpZHRoL3llLmhlaWdodCpPZTtBLnN0eWxlLndpZHRoPWAke3VlfXB4YCxBLnN0eWxlLmhlaWdodD1gJHtydH1weGB9ZWxzZSBBLnN0eWxlLndpZHRoPWAke3JlfXB4YCxBLnN0eWxlLmhlaWdodD1gJHtnZX1weGA7bGV0IEVlPUEuZ2V0Q29udGV4dCgiMmQiKTtFZSYmKEVlLmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMCxFZS5pbWFnZVNtb290aGluZ1F1YWxpdHk9ImhpZ2giLEVlLmRyYXdJbWFnZSgkZS5jYW52YXMsMCwwKSksU2UuY2xlYW51cCgpfWNhdGNoKFYpe2NvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byByZW5kZXIgcGFnZSAke3RoaXMuY3VycmVudFByZXZpZXdQYWdlfTpgLFYpfX1jbGVhckNhbnZhc2VzKCl7Zm9yKGxldCBBIG9mIHRoaXMuY2FudmFzZXMpQkkucmVsZWFzZShBKTt0aGlzLmNhbnZhc2VzPVtdfWNsZWFudXAoKXt0aGlzLmNsZWFyQ2FudmFzZXMoKSx0aGlzLnBkZkRvY3VtZW50JiYodG8ucmVsZWFzZURvY3VtZW50KHRoaXMubG9hZGVkUGRmVXJsPz90aGlzLnBkZlVybCksdGhpcy5wZGZEb2N1bWVudD1udWxsKSx0aGlzLnJlbmRlclBhZ2VzUXVldWVkPSExLHRoaXMucGFnZUNvdW50PTAsdGhpcy5jdXJyZW50UHJldmlld1BhZ2U9MSx0aGlzLmlzSG92ZXJpbmc9ITEsdGhpcy5pc0E0Rm9ybWF0PSEwLHRoaXMucHJldmlld0NvbnRhaW5lcj1udWxsLHRoaXMuc3RhY2tFbGVtZW50PW51bGwsdGhpcy5sb2FkZWRQZGZVcmw9bnVsbCx0aGlzLnJlbmRlcmVkPSExLHRoaXMubG9hZGluZz0hMSx0aGlzLmVycm9yPSExfWhhbmRsZUNsaWNrKCl7dGhpcy5jbGlja2FibGUmJnRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInBkZi1wcmV2aWV3LWNsaWNrIix7ZGV0YWlsOntwZGZVcmw6dGhpcy5wZGZVcmwscGFnZUNvdW50OnRoaXMucGFnZUNvdW50fSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWFzeW5jIHVwZGF0ZWQoQSl7aWYoc3VwZXIudXBkYXRlZChBKSxBLmhhcygicGRmVXJsIikmJnRoaXMucGRmVXJsKXtsZXQgRj1BLmdldCgicGRmVXJsIik7aWYoRiYmdG8ucmVsZWFzZURvY3VtZW50KEYpLHRoaXMuY2xlYW51cCgpLHRoaXMucmVuZGVyZWQ9ITEsdGhpcy5jdXJyZW50UHJldmlld1BhZ2U9MSx0aGlzLm9ic2VydmVyKXtsZXQgYWU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthZS50b3A8d2luZG93LmlubmVySGVpZ2h0JiZhZS5ib3R0b20+MCYmdGhpcy5sb2FkQW5kUmVuZGVyUHJldmlldygpfX1BLmhhcygiY3VycmVudFByZXZpZXdQYWdlIikmJnRoaXMucmVuZGVyZWQmJmF3YWl0IHRoaXMuc2NoZWR1bGVSZW5kZXJQYWdlcygpfWdldENvbnRleHRNZW51SXRlbXMoKXtsZXQgQT1bXTtyZXR1cm4gdGhpcy5jbGlja2FibGUmJihBLnB1c2goe25hbWU6IlZpZXcgUERGIixpY29uTmFtZToibHVjaWRlOkV5ZSIsYWN0aW9uOmFzeW5jKCk9Pnt0aGlzLmhhbmRsZUNsaWNrKCl9fSksQS5wdXNoKHtkaXZpZGVyOiEwfSkpLEEucHVzaCh7bmFtZToiT3BlbiBQREYgaW4gTmV3IFRhYiIsaWNvbk5hbWU6Imx1Y2lkZTpFeHRlcm5hbExpbmsiLGFjdGlvbjphc3luYygpPT57d2luZG93Lm9wZW4odGhpcy5wZGZVcmwsIl9ibGFuayIpfX0se2RpdmlkZXI6ITB9LHtuYW1lOiJDb3B5IFBERiBVUkwiLGljb25OYW1lOiJsdWNpZGU6Q29weSIsYWN0aW9uOmFzeW5jKCk9Pnthd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLnBkZlVybCl9fSx7bmFtZToiRG93bmxvYWQgUERGIixpY29uTmFtZToibHVjaWRlOkRvd25sb2FkIixhY3Rpb246YXN5bmMoKT0+e2xldCBGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtGLmhyZWY9dGhpcy5wZGZVcmwsRi5kb3dubG9hZD10aGlzLnBkZlVybC5zcGxpdCgiLyIpLnBvcCgpfHwiZG9jdW1lbnQucGRmIixGLmNsaWNrKCl9fSksdGhpcy5wYWdlQ291bnQ+MCYmQS5wdXNoKHtkaXZpZGVyOiEwfSx7bmFtZTpgJHt0aGlzLnBhZ2VDb3VudH0gcGFnZSR7dGhpcy5wYWdlQ291bnQ+MT8icyI6IiJ9YCxpY29uTmFtZToibHVjaWRlOkZpbGVUZXh0IixkaXNhYmxlZDohMCxhY3Rpb246YXN5bmMoKT0+e319KSxBfWNhY2hlRWxlbWVudHMoKXt0aGlzLnByZXZpZXdDb250YWluZXJ8fCh0aGlzLnByZXZpZXdDb250YWluZXI9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIucHJldmlldy1jb250YWluZXIiKSksdGhpcy5zdGFja0VsZW1lbnR8fCh0aGlzLnN0YWNrRWxlbWVudD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LXN0YWNrIikpfXNldHVwUmVzaXplT2JzZXJ2ZXIoKXshdGhpcy5wcmV2aWV3Q29udGFpbmVyfHx0aGlzLnJlc2l6ZU9ic2VydmVyfHwodGhpcy5yZXNpemVPYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9Pnt0aGlzLnJlbmRlcmVkJiZ0aGlzLnBkZkRvY3VtZW50JiYhdGhpcy5sb2FkaW5nJiZ0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKX0pLHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKSl9Z2V0QXZhaWxhYmxlU2l6ZSgpe2lmKHRoaXMuc3RhY2tFbGVtZW50fHwodGhpcy5zdGFja0VsZW1lbnQ9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIucHJldmlldy1zdGFjayIpKSwhdGhpcy5zdGFja0VsZW1lbnQpcmV0dXJue2F2YWlsYWJsZVdpZHRoOjIwMCxhdmFpbGFibGVIZWlnaHQ6MjYwfTtsZXQgQT10aGlzLnN0YWNrRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxGPU1hdGgubWF4KEEud2lkdGgsMCl8fDIwMCxhZT1NYXRoLm1heChBLmhlaWdodCwwKXx8MjYwO3JldHVybnthdmFpbGFibGVXaWR0aDpGLGF2YWlsYWJsZUhlaWdodDphZX19c3RhdGlje1UxKHIsYSl9fTtyZXR1cm4gUj1yfSkoKTtmZSgpO3ZhciBUT3Q9W3AuZGVmYXVsdFN0eWxlcyx0ZWAKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDYwMHB4OwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgIGNvbnRhaW46IGxheW91dCBzdHlsZTsKICAgIH0KCiAgICAucGRmLXZpZXdlciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwiaHNsKDIxNSAyMCUgMTAlKSIpfTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC50b29sYmFyIHsKICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjE1IDIwJSAxNSUpIil9OwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTQgMzElIDkxJSkiLCJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgIGdhcDogMTZweDsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLnRvb2xiYXItZ3JvdXAgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDRweDsKICAgIH0KCiAgICAudG9vbGJhci1ncm91cC0tZW5kIHsKICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICB9CgogICAgLnRvb2xiYXItYnV0dG9uIHsKICAgICAgd2lkdGg6IDMycHg7CiAgICAgIGhlaWdodDogMzJweDsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICB9CgogICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsKICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTQgMzElIDkyJSkiLCJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgfQoKICAgIC50b29sYmFyLWJ1dHRvbjpkaXNhYmxlZCB7CiAgICAgIG9wYWNpdHk6IDAuNDsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b24gZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgfQoKICAgIC5wYWdlLWluZm8gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAucGFnZS1pbnB1dCB7CiAgICAgIHdpZHRoOiA0OHB4OwogICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMjIgNDclIDExJSkiLCJoc2woMjEwIDIwJSA5NiUpIil9OwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLnBhZ2UtaW5wdXQ6Zm9jdXMgewogICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAucGFnZS1zZXBhcmF0b3IgewogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUgMTYlIDYwJSkiLCJoc2woMjE1IDE2JSA1MCUpIil9OwogICAgfQoKICAgIC56b29tLWxldmVsIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBtaW4td2lkdGg6IDQ4cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAudmlld2VyLWNvbnRhaW5lciB7CiAgICAgIGZsZXg6IDE7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgbWluLWhlaWdodDogMDsKICAgIH0KCiAgICAuc2lkZWJhciB7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIxNSAyMCUgMTUlKSIpfTsKICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTQgMzElIDkxJSkiLCJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnNpZGViYXItaGVhZGVyIHsKICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MSUpIiwiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgfQoKICAgIC5zaWRlYmFyLWNsb3NlIHsKICAgICAgd2lkdGg6IDI0cHg7CiAgICAgIGhlaWdodDogMjRweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICB9CgogICAgLnNpZGViYXItY2xvc2U6aG92ZXIgewogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICB9CgogICAgLnNpZGViYXItY2xvc2UgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgfQoKICAgIC5zaWRlYmFyLWNvbnRlbnQgewogICAgICBmbGV4OiAxOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgfQoKICAgIC50aHVtYm5haWwgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwiaHNsKDIxNSAyMCUgMTglKSIpfTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAvKiBEZWZhdWx0IEE0IGFzcGVjdCByYXRpbyAoMjk3bW0gLyAyMTBtbSDiiYggMS40MTQpICovCiAgICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTc2cHggKiAxLjQxNCk7CiAgICB9CgogICAgLnRodW1ibmFpbDpsYXN0LWNoaWxkIHsKICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIH0KCiAgICAudGh1bWJuYWlsOmhvdmVyIHsKICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsImhzbCgyMTcgMjUlIDM1JSkiKX07CiAgICB9CgogICAgLnRodW1ibmFpbC5hY3RpdmUgewogICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAudGh1bWJuYWlsLWNhbnZhcyB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7CiAgICAgIGltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXM7CiAgICB9CgogICAgLnRodW1ibmFpbC1udW1iZXIgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogNHB4OwogICAgICByaWdodDogNHB4OwogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjcpIiwicmdiYSgwLCAwLCAwLCAwLjgpIil9OwogICAgICBjb2xvcjogd2hpdGU7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgIC52aWV3ZXItbWFpbiB7CiAgICAgIGZsZXg6IDE7CiAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7CiAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAubG9hZGluZy1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBnYXA6IDE2cHg7CiAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICB9CgogICAgLmxvYWRpbmctc3Bpbm5lciB7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgIGFuaW1hdGlvbjogc3BpbiAwLjhzIGxpbmVhciBpbmZpbml0ZTsKICAgIH0KCiAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICB0byB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgfQogICAgfQoKICAgIC5sb2FkaW5nLXRleHQgewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CgogICAgLnBhZ2VzLWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGdhcDogMjBweDsKICAgIH0KCiAgICAucGFnZS13cmFwcGVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIC5jYW52YXMtY29udGFpbmVyIHsKICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDEycHggJHtwLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsInJnYmEoMCwgMCwgMCwgMC4zKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB9CgogICAgLnBhZ2UtY2FudmFzIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGltYWdlLXJlbmRlcmluZzogLXdlYmtpdC1vcHRpbWl6ZS1jb250cmFzdDsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBjcmlzcC1lZGdlczsKICAgIH0KCiAgICAucGRmLXZpZXdlci53aXRoLXNpZGViYXIgLnZpZXdlci1tYWluIHsKICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICB9CiAgYF07ZmUoKTt2YXIgX090PSgpPT5NYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICB9CgogICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7CiAgICB9CgogICAgaDMgewogICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICB9CgogICAgZGVlcy1wZGYtdmlld2VyIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC52aWV3ZXItdGFsbCB7CiAgICAgIGhlaWdodDogODAwcHg7CiAgICB9CgogICAgLnZpZXdlci1jb21wYWN0IHsKICAgICAgaGVpZ2h0OiA1MDBweDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+RnVsbCBGZWF0dXJlZCBQREYgVmlld2VyIHdpdGggVG9vbGJhcjwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLXRhbGwiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvd2ViL2NvbXByZXNzZWQudHJhY2Vtb25rZXktcGxkaS0wOS5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9InRydWUiCiAgICAgICAgc2hvd1NpZGViYXI9ImZhbHNlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLWZpdCIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlBERiBWaWV3ZXIgd2l0aCBTaWRlYmFyIE5hdmlnYXRpb248L2gzPgogICAgICA8ZGVlcy1wZGYtdmlld2VyCiAgICAgICAgY2xhc3M9InZpZXdlci10YWxsIgogICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL3dlYi9jb21wcmVzc2VkLnRyYWNlbW9ua2V5LXBsZGktMDkucGRmIgogICAgICAgIHNob3dUb29sYmFyPSJ0cnVlIgogICAgICAgIHNob3dTaWRlYmFyPSJ0cnVlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLXdpZHRoIgogICAgICA+PC9kZWVzLXBkZi12aWV3ZXI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+Q29tcGFjdCBWaWV3ZXIgd2l0aG91dCBDb250cm9sczwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLWNvbXBhY3QiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9ImZhbHNlIgogICAgICAgIHNob3dTaWRlYmFyPSJmYWxzZSIKICAgICAgICBpbml0aWFsWm9vbT0iYXV0byIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7ZmUoKTtGdCgpO3ZhciBiYT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LHAxPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxkbjE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLXBkZi12aWV3ZXIiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXSx2LHk9W10sdz1bXSxFLEM9W10sej1bXSxQLF89W10sJD1bXSxILEw9W10saz1bXSxOLFM9W10sVD1bXSxSLEE9W10sRj1bXSxhZSxWPVtdLFNlPVtdLHplLFc9W10sTmU9W107dmFyIFJlPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgWD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOlN0cmluZ30pXSxmPVtEKHt0eXBlOk51bWJlcn0pXSxkPVtEKHt0eXBlOlN0cmluZ30pXSxiPVtEKHt0eXBlOkJvb2xlYW59KV0sdj1bRCh7dHlwZTpCb29sZWFufSldLEU9W0Qoe3R5cGU6TnVtYmVyfSldLFA9W0Qoe3R5cGU6TnVtYmVyfSldLEg9W0Qoe3R5cGU6TnVtYmVyfSldLE49W0Qoe3R5cGU6Qm9vbGVhbn0pXSxSPVtEKHt0eXBlOlN0cmluZ30pXSxhZT1bRCh7dHlwZTpBcnJheX0pXSx6ZT1bRCh7dHlwZTpBcnJheX0pXSxiYSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBkZlVybCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ST0+InBkZlVybCJpbiBJLGdldDpJPT5JLnBkZlVybCxzZXQ6KEksTyk9PntJLnBkZlVybD1PfX0sbWV0YWRhdGE6WH0scyxsKSxiYSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImluaXRpYWxQYWdlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpJPT4iaW5pdGlhbFBhZ2UiaW4gSSxnZXQ6ST0+SS5pbml0aWFsUGFnZSxzZXQ6KEksTyk9PntJLmluaXRpYWxQYWdlPU99fSxtZXRhZGF0YTpYfSxjLHUpLGJhKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaW5pdGlhbFpvb20iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkk9PiJpbml0aWFsWm9vbSJpbiBJLGdldDpJPT5JLmluaXRpYWxab29tLHNldDooSSxPKT0+e0kuaW5pdGlhbFpvb209T319LG1ldGFkYXRhOlh9LGgsZyksYmEodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaG93VG9vbGJhciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ST0+InNob3dUb29sYmFyImluIEksZ2V0Okk9Pkkuc2hvd1Rvb2xiYXIsc2V0OihJLE8pPT57SS5zaG93VG9vbGJhcj1PfX0sbWV0YWRhdGE6WH0seCxtKSxiYSh0aGlzLG51bGwsdix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dTaWRlYmFyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpJPT4ic2hvd1NpZGViYXIiaW4gSSxnZXQ6ST0+SS5zaG93U2lkZWJhcixzZXQ6KEksTyk9PntJLnNob3dTaWRlYmFyPU99fSxtZXRhZGF0YTpYfSx5LHcpLGJhKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY3VycmVudFBhZ2UiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkk9PiJjdXJyZW50UGFnZSJpbiBJLGdldDpJPT5JLmN1cnJlbnRQYWdlLHNldDooSSxPKT0+e0kuY3VycmVudFBhZ2U9T319LG1ldGFkYXRhOlh9LEMseiksYmEodGhpcyxudWxsLFAse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0b3RhbFBhZ2VzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpJPT4idG90YWxQYWdlcyJpbiBJLGdldDpJPT5JLnRvdGFsUGFnZXMsc2V0OihJLE8pPT57SS50b3RhbFBhZ2VzPU99fSxtZXRhZGF0YTpYfSxfLCQpLGJhKHRoaXMsbnVsbCxILHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY3VycmVudFpvb20iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkk9PiJjdXJyZW50Wm9vbSJpbiBJLGdldDpJPT5JLmN1cnJlbnRab29tLHNldDooSSxPKT0+e0kuY3VycmVudFpvb209T319LG1ldGFkYXRhOlh9LEwsayksYmEodGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsb2FkaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpJPT4ibG9hZGluZyJpbiBJLGdldDpJPT5JLmxvYWRpbmcsc2V0OihJLE8pPT57SS5sb2FkaW5nPU99fSxtZXRhZGF0YTpYfSxTLFQpLGJhKHRoaXMsbnVsbCxSLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZG9jdW1lbnRJZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ST0+ImRvY3VtZW50SWQiaW4gSSxnZXQ6ST0+SS5kb2N1bWVudElkLHNldDooSSxPKT0+e0kuZG9jdW1lbnRJZD1PfX0sbWV0YWRhdGE6WH0sQSxGKSxiYSh0aGlzLG51bGwsYWUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0aHVtYm5haWxEYXRhIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpJPT4idGh1bWJuYWlsRGF0YSJpbiBJLGdldDpJPT5JLnRodW1ibmFpbERhdGEsc2V0OihJLE8pPT57SS50aHVtYm5haWxEYXRhPU99fSxtZXRhZGF0YTpYfSxWLFNlKSxiYSh0aGlzLG51bGwsemUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwYWdlRGF0YSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ST0+InBhZ2VEYXRhImluIEksZ2V0Okk9PkkucGFnZURhdGEsc2V0OihJLE8pPT57SS5wYWdlRGF0YT1PfX0sbWV0YWRhdGE6WH0sVyxOZSksYmEobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6WH0sbnVsbCxhKSxSZT1yPWUudmFsdWUsWCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpYfSl9c3RhdGljIGRlbW89X090O3N0YXRpYyBkZW1vR3JvdXA9IlBERiI7c3RhdGljIHN0eWxlcz1UT3Q7I2U9cDEodGhpcyxzLCIiKTtnZXQgcGRmVXJsKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHBkZlVybChYKXt0aGlzLiNlPVh9I3Q9KHAxKHRoaXMsbCkscDEodGhpcyxjLDEpKTtnZXQgaW5pdGlhbFBhZ2UoKXtyZXR1cm4gdGhpcy4jdH1zZXQgaW5pdGlhbFBhZ2UoWCl7dGhpcy4jdD1YfSNhPShwMSh0aGlzLHUpLHAxKHRoaXMsaCwiYXV0byIpKTtnZXQgaW5pdGlhbFpvb20oKXtyZXR1cm4gdGhpcy4jYX1zZXQgaW5pdGlhbFpvb20oWCl7dGhpcy4jYT1YfSNyPShwMSh0aGlzLGcpLHAxKHRoaXMseCwhMCkpO2dldCBzaG93VG9vbGJhcigpe3JldHVybiB0aGlzLiNyfXNldCBzaG93VG9vbGJhcihYKXt0aGlzLiNyPVh9I2k9KHAxKHRoaXMsbSkscDEodGhpcyx5LCExKSk7Z2V0IHNob3dTaWRlYmFyKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHNob3dTaWRlYmFyKFgpe3RoaXMuI2k9WH0jbz0ocDEodGhpcyx3KSxwMSh0aGlzLEMsMSkpO2dldCBjdXJyZW50UGFnZSgpe3JldHVybiB0aGlzLiNvfXNldCBjdXJyZW50UGFnZShYKXt0aGlzLiNvPVh9I3M9KHAxKHRoaXMseikscDEodGhpcyxfLDEpKTtnZXQgdG90YWxQYWdlcygpe3JldHVybiB0aGlzLiNzfXNldCB0b3RhbFBhZ2VzKFgpe3RoaXMuI3M9WH0jbj0ocDEodGhpcywkKSxwMSh0aGlzLEwsMSkpO2dldCBjdXJyZW50Wm9vbSgpe3JldHVybiB0aGlzLiNufXNldCBjdXJyZW50Wm9vbShYKXt0aGlzLiNuPVh9I2w9KHAxKHRoaXMsaykscDEodGhpcyxTLCExKSk7Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy4jbH1zZXQgbG9hZGluZyhYKXt0aGlzLiNsPVh9I2M9KHAxKHRoaXMsVCkscDEodGhpcyxBLCIiKSk7Z2V0IGRvY3VtZW50SWQoKXtyZXR1cm4gdGhpcy4jY31zZXQgZG9jdW1lbnRJZChYKXt0aGlzLiNjPVh9I2Q9KHAxKHRoaXMsRikscDEodGhpcyxWLFtdKSk7Z2V0IHRodW1ibmFpbERhdGEoKXtyZXR1cm4gdGhpcy4jZH1zZXQgdGh1bWJuYWlsRGF0YShYKXt0aGlzLiNkPVh9I2Y9KHAxKHRoaXMsU2UpLHAxKHRoaXMsVyxbXSkpO2dldCBwYWdlRGF0YSgpe3JldHVybiB0aGlzLiNmfXNldCBwYWdlRGF0YShYKXt0aGlzLiNmPVh9cGRmRG9jdW1lbnQ9cDEodGhpcyxOZSk7cmVuZGVyU3RhdGU9ImlkbGUiO3JlbmRlckFib3J0Q29udHJvbGxlcj1udWxsO3BhZ2VSZW5kZXJpbmc9ITE7cGFnZU51bVBlbmRpbmc9bnVsbDtjdXJyZW50UmVuZGVyVGFzaz1udWxsO2N1cnJlbnRSZW5kZXJQcm9taXNlPW51bGw7dGh1bWJuYWlsUmVuZGVyVGFza3M9W107cGFnZVJlbmRlclRhc2tzPW5ldyBNYXA7Y2FudmFzO2N0eDt2aWV3ZXJNYWluPW51bGw7cmVzaXplT2JzZXJ2ZXI7aW50ZXJzZWN0aW9uT2JzZXJ2ZXI7c2Nyb2xsVGhyb3R0bGVUaW1lb3V0O3ZpZXdwb3J0RGltZW5zaW9ucz17d2lkdGg6MCxoZWlnaHQ6MH07dmlld3BvcnRNb2RlPSJhdXRvIjtNQU5VQUxfTUlOX1pPT009LjU7TUFOVUFMX01BWF9aT09NPTM7QUJTT0xVVEVfTUlOX1pPT009LjE7QUJTT0xVVEVfTUFYX1pPT009NDtQQUdFX0dBUD0yMDtSRU5ERVJfQlVGRkVSPTM7Y29uc3RydWN0b3IoKXtzdXBlcigpfXJlbmRlcigpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJwZGYtdmlld2VyICR7dGhpcy5zaG93U2lkZWJhcj8id2l0aC1zaWRlYmFyIjoiIn0iPgogICAgICAgICR7dGhpcy5zaG93VG9vbGJhcj9NYAogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItZ3JvdXAiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMucHJldmlvdXNQYWdlfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5jdXJyZW50UGFnZTw9MX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpDaGV2cm9uTGVmdCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnZS1pbmZvIj4KICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgICAgICAgIG1pbj0iMSIKICAgICAgICAgICAgICAgICAgbWF4PSIke3RoaXMudG90YWxQYWdlc30iCiAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke1N0cmluZyh0aGlzLmN1cnJlbnRQYWdlKX0KICAgICAgICAgICAgICAgICAgQGNoYW5nZT0ke3RoaXMuaGFuZGxlUGFnZUlucHV0fQogICAgICAgICAgICAgICAgICBjbGFzcz0icGFnZS1pbnB1dCIKICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFnZS1zZXBhcmF0b3IiPi88L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFnZS10b3RhbCI+JHt0aGlzLnRvdGFsUGFnZXN9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMubmV4dFBhZ2V9CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmN1cnJlbnRQYWdlPj10aGlzLnRvdGFsUGFnZXN9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Q2hldnJvblJpZ2h0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnpvb21PdXR9CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5jYW5ab29tT3V0fQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlpvb21PdXQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMucmVzZXRab29tfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ6b29tLWxldmVsIj4ke01hdGgucm91bmQodGhpcy5jdXJyZW50Wm9vbSoxMDApfSU8L3NwYW4+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tSW59CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5jYW5ab29tSW59CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Wm9vbUluIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmZpdFRvUGFnZX0KICAgICAgICAgICAgICAgIHRpdGxlPSJGaXQgdG8gcGFnZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpNYXhpbWl6ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5maXRUb1dpZHRofQogICAgICAgICAgICAgICAgdGl0bGU9IkZpdCB0byB3aWR0aCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpBcnJvd0xlZnRSaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCB0b29sYmFyLWdyb3VwLS1lbmQiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLnNob3dTaWRlYmFyPSF0aGlzLnNob3dTaWRlYmFyfQogICAgICAgICAgICAgICAgdGl0bGU9IiR7dGhpcy5zaG93U2lkZWJhcj8iSGlkZSB0aHVtYm5haWxzIjoiU2hvdyB0aHVtYm5haWxzIn0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSIke3RoaXMuc2hvd1NpZGViYXI/Imx1Y2lkZTpTaWRlYmFyQ2xvc2UiOiJsdWNpZGU6U2lkZWJhciJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmRvd25sb2FkUGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IkRvd25sb2FkIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnByaW50UGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IlByaW50IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlByaW50ZXIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA6IiJ9CgogICAgICAgIDxkaXYgY2xhc3M9InZpZXdlci1jb250YWluZXIiPgogICAgICAgICAgJHt0aGlzLnNob3dTaWRlYmFyP01gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxzcGFuPlBhZ2VzPC9zcGFuPgogICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICBjbGFzcz0ic2lkZWJhci1jbG9zZSIKICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMuc2hvd1NpZGViYXI9ITF9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlgiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1jb250ZW50Ij4KICAgICAgICAgICAgICAgICR7RWEua2V5ZWQodGhpcy5kb2N1bWVudElkLE1gCiAgICAgICAgICAgICAgICAgICR7RWEucmVwZWF0KHRoaXMudGh1bWJuYWlsRGF0YSxYPT5YLnBhZ2UsWD0+TWAKICAgICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRodW1ibmFpbCAke3RoaXMuY3VycmVudFBhZ2U9PT1YLnBhZ2U/ImFjdGl2ZSI6IiJ9IgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXBhZ2U9IiR7WC5wYWdlfSIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVUaHVtYm5haWxDbGlja30KICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBjbGFzcz0idGh1bWJuYWlsLWNhbnZhcyIgZGF0YS1wYWdlPSIke1gucGFnZX0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGh1bWJuYWlsLW51bWJlciI+JHtYLnBhZ2V9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOiIifQoKICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXdlci1tYWluIiBAc2Nyb2xsPSR7dGhpcy5oYW5kbGVTY3JvbGx9PgogICAgICAgICAgICAke3RoaXMubG9hZGluZz9NYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3Bpbm5lciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXRleHQiPkxvYWRpbmcgUERGLi4uPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA6TWAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlcy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgJHtFYS5yZXBlYXQodGhpcy5wYWdlRGF0YSxYPT5YLnBhZ2UsWD0+TWAKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLXdyYXBwZXIiIGRhdGEtcGFnZT0iJHtYLnBhZ2V9Ij4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbnZhcy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGNsYXNzPSJwYWdlLWNhbnZhcyIgZGF0YS1wYWdlPSIke1gucGFnZX0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSx0aGlzLmVuc3VyZVZpZXdlclJlZnMoKSx0aGlzLnBkZlVybCYmKHRoaXMuZG9jdW1lbnRJZD1gJHt0aGlzLnBkZlVybH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YCxhd2FpdCB0aGlzLmxvYWRQZGYoKSl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKSx0aGlzLnJlc2l6ZU9ic2VydmVyPXZvaWQgMCx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj12b2lkIDAsdGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQpLHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0PXZvaWQgMCksdGhpcy5yZW5kZXJTdGF0ZT0iZGlzcG9zZWQiLGF3YWl0IHRoaXMuY2xlYW51cERvY3VtZW50KCksdGhpcy5jYW52YXM9dm9pZCAwLHRoaXMuY3R4PXZvaWQgMH1hc3luYyB1cGRhdGVkKFgpe2lmKHN1cGVyLnVwZGF0ZWQoWCksWC5oYXMoInBkZlVybCIpJiZ0aGlzLnBkZlVybCl7bGV0IEk9WC5nZXQoInBkZlVybCIpO0kmJnRvLnJlbGVhc2VEb2N1bWVudChJKSx0aGlzLmRvY3VtZW50SWQ9YCR7dGhpcy5wZGZVcmx9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpfWAsYXdhaXQgdGhpcy5sb2FkUGRmKCl9WC5oYXMoInNob3dTaWRlYmFyIikmJnRoaXMuc2hvd1NpZGViYXImJnRoaXMucGRmRG9jdW1lbnQmJihhd2FpdCBuZXcgUHJvbWlzZShJPT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoSSkpLHRoaXMudGh1bWJuYWlsRGF0YS5mb3JFYWNoKEk9PkkucmVuZGVyZWQ9ITEpLGF3YWl0IHRoaXMucmVuZGVyVGh1bWJuYWlscygpLHRoaXMuc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpLHRoaXMuc2Nyb2xsVGh1bWJuYWlsSW50b1ZpZXcodGhpcy5jdXJyZW50UGFnZSkpfWFzeW5jIGxvYWRQZGYoKXt0aGlzLmxvYWRpbmc9ITAsdGhpcy5yZW5kZXJTdGF0ZT0ibG9hZGluZyI7dHJ5e2F3YWl0IHRoaXMuY2xlYW51cERvY3VtZW50KCksdGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcjtsZXQgWD10aGlzLnJlbmRlckFib3J0Q29udHJvbGxlci5zaWduYWw7aWYodGhpcy5wZGZEb2N1bWVudD1hd2FpdCB0by5sb2FkRG9jdW1lbnQodGhpcy5wZGZVcmwpLFguYWJvcnRlZHx8KHRoaXMudG90YWxQYWdlcz10aGlzLnBkZkRvY3VtZW50Lm51bVBhZ2VzLHRoaXMuY3VycmVudFBhZ2U9dGhpcy5pbml0aWFsUGFnZSx0aGlzLnJlc29sdmVJbml0aWFsVmlld3BvcnRNb2RlKCksdGhpcy50aHVtYm5haWxEYXRhPUFycmF5LmZyb20oe2xlbmd0aDp0aGlzLnRvdGFsUGFnZXN9LChJLE8pPT4oe3BhZ2U6TysxLHJlbmRlcmVkOiExfSkpLHRoaXMucGFnZURhdGE9QXJyYXkuZnJvbSh7bGVuZ3RoOnRoaXMudG90YWxQYWdlc30sKEksTyk9Pih7cGFnZTpPKzEscmVuZGVyZWQ6ITEscmVuZGVyaW5nOiExfSkpLHRoaXMubG9hZGluZz0hMSxhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLHRoaXMuZW5zdXJlVmlld2VyUmVmcygpLHRoaXMuc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpLGF3YWl0IG5ldyBQcm9taXNlKEk9PnJlcXVlc3RBbmltYXRpb25GcmFtZShJKSksWC5hYm9ydGVkKXx8KHRoaXMucmVuZGVyU3RhdGU9InJlbmRlcmluZy1tYWluIixhd2FpdCB0aGlzLnJlbmRlclZpc2libGVQYWdlcygpLFguYWJvcnRlZCl8fCh0aGlzLmluaXRpYWxQYWdlPjEmJmF3YWl0IHRoaXMuc2Nyb2xsVG9QYWdlKHRoaXMuaW5pdGlhbFBhZ2UsITEpLHRoaXMuc2hvd1NpZGViYXImJihhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLGF3YWl0IG5ldyBQcm9taXNlKEk9PnJlcXVlc3RBbmltYXRpb25GcmFtZShJKSksWC5hYm9ydGVkfHwoYXdhaXQgdGhpcy5yZW5kZXJUaHVtYm5haWxzKCksWC5hYm9ydGVkKSkpKXJldHVybjt0aGlzLnJlbmRlclN0YXRlPSJyZW5kZXJlZCJ9Y2F0Y2goWCl7Y29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBQREY6IixYKSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5yZW5kZXJTdGF0ZT0iZXJyb3IifX1zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCl7dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciYmdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoST0+e2ZvcihsZXQgTyBvZiBJKXtsZXQgRz1PLnRhcmdldCxqPXBhcnNlSW50KEcuZGF0YXNldC5wYWdlfHwiMSIpO08uaXNJbnRlcnNlY3RpbmcmJnRoaXMucmVuZGVyUGFnZUlmTmVlZGVkKGopfX0se3Jvb3Q6dGhpcy52aWV3ZXJNYWluLHJvb3RNYXJnaW46YCR7dGhpcy5SRU5ERVJfQlVGRkVSKjEwMH1weCAwcHhgLHRocmVzaG9sZDouMDF9KTtsZXQgWD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5wYWdlLXdyYXBwZXIiKTtYJiZYLmZvckVhY2goST0+e3RoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/Lm9ic2VydmUoSSl9KX1hc3luYyByZW5kZXJWaXNpYmxlUGFnZXMoKXtpZighdGhpcy52aWV3ZXJNYWluKXJldHVybjtsZXQgWD10aGlzLnZpZXdlck1haW4uY2xpZW50SGVpZ2h0O2ZvcihsZXQgSSBvZiB0aGlzLnBhZ2VEYXRhKXtsZXQgTz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLXdyYXBwZXJbZGF0YS1wYWdlPSIke0kucGFnZX0iXWApO2lmKCFPKWNvbnRpbnVlO2xldCBHPU8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaj10aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksc2U9Ry50b3Atai50b3Asa2U9c2UrRy5oZWlnaHQsRGU9dGhpcy5SRU5ERVJfQlVGRkVSKlg7a2U+PS1EZSYmc2U8PVgrRGUmJmF3YWl0IHRoaXMucmVuZGVyUGFnZUlmTmVlZGVkKEkucGFnZSl9fWFzeW5jIHJlbmRlclBhZ2VJZk5lZWRlZChYKXtsZXQgST10aGlzLnBhZ2VEYXRhLmZpbmQoTz0+Ty5wYWdlPT09WCk7aWYoISghSXx8SS5yZW5kZXJlZHx8SS5yZW5kZXJpbmcpKXtJLnJlbmRlcmluZz0hMDt0cnl7bGV0IE89dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAucGFnZS1jYW52YXNbZGF0YS1wYWdlPSIke1h9Il1gKTtpZighTyl7SS5yZW5kZXJpbmc9ITE7cmV0dXJufWxldCBHPWF3YWl0IHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShYKSxqPXRoaXMuY29tcHV0ZVZpZXdwb3J0KEcpO08uaGVpZ2h0PWouaGVpZ2h0LE8ud2lkdGg9ai53aWR0aCxPLnN0eWxlLndpZHRoPWAke2oud2lkdGh9cHhgLE8uc3R5bGUuaGVpZ2h0PWAke2ouaGVpZ2h0fXB4YDtsZXQgc2U9Ty5nZXRDb250ZXh0KCIyZCIpO2lmKCFzZSl7Ry5jbGVhbnVwPy4oKSxJLnJlbmRlcmluZz0hMTtyZXR1cm59bGV0IGtlPXtjYW52YXNDb250ZXh0OnNlLHZpZXdwb3J0Omp9LERlPUcucmVuZGVyKGtlKTt0aGlzLnBhZ2VSZW5kZXJUYXNrcy5zZXQoWCxEZSksYXdhaXQgRGUucHJvbWlzZSxHLmNsZWFudXA/LigpLEkucmVuZGVyZWQ9ITAsSS5yZW5kZXJpbmc9ITEsdGhpcy5wYWdlUmVuZGVyVGFza3MuZGVsZXRlKFgpLHRoaXMucmVxdWVzdFVwZGF0ZSgicGFnZURhdGEiKX1jYXRjaChPKXtPPy5uYW1lIT09IlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbiImJmNvbnNvbGUuZXJyb3IoYEVycm9yIHJlbmRlcmluZyBwYWdlICR7WH06YCxPKSxJLnJlbmRlcmluZz0hMSx0aGlzLnBhZ2VSZW5kZXJUYXNrcy5kZWxldGUoWCl9fX1oYW5kbGVTY3JvbGw9KCk9Pnt0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0KSx0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dD13aW5kb3cuc2V0VGltZW91dCgoKT0+e3RoaXMudXBkYXRlQ3VycmVudFBhZ2UoKSx0aGlzLnJlbmRlclZpc2libGVQYWdlcygpfSw1MCl9O3VwZGF0ZUN1cnJlbnRQYWdlKCl7aWYoIXRoaXMudmlld2VyTWFpbilyZXR1cm47bGV0IFg9dGhpcy52aWV3ZXJNYWluLnNjcm9sbFRvcCxJPXRoaXMudmlld2VyTWFpbi5jbGllbnRIZWlnaHQsTz1YK0kvMjtmb3IobGV0IEc9MDtHPHRoaXMucGFnZURhdGEubGVuZ3RoO0crKyl7bGV0IGo9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAucGFnZS13cmFwcGVyW2RhdGEtcGFnZT0iJHtHKzF9Il1gKTtpZighailjb250aW51ZTtsZXQgc2U9ai5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxrZT10aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRGU9c2UudG9wLWtlLnRvcCtYLE9lPURlK3NlLmhlaWdodDtpZihPPj1EZSYmTzw9T2Upe3RoaXMuY3VycmVudFBhZ2UhPT1HKzEmJih0aGlzLmN1cnJlbnRQYWdlPUcrMSx0aGlzLnNob3dTaWRlYmFyJiZ0aGlzLnNjcm9sbFRodW1ibmFpbEludG9WaWV3KEcrMSkpO2JyZWFrfX19c2Nyb2xsVGh1bWJuYWlsSW50b1ZpZXcoWCl7bGV0IEk9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAudGh1bWJuYWlsW2RhdGEtcGFnZT0iJHtYfSJdYCksTz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5zaWRlYmFyLWNvbnRlbnQiKTtpZihJJiZPKXtsZXQgRz1JLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGo9Ty5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzZT1HLnRvcDxqLnRvcCxrZT1HLmJvdHRvbT5qLmJvdHRvbTtpZihzZXx8a2Upe2xldCBEZT1JLm9mZnNldFRvcCxPZT1JLm9mZnNldEhlaWdodCxVPU8uY2xpZW50SGVpZ2h0LEI9RGUtVS8yK09lLzI7Ty5zY3JvbGxUbyh7dG9wOk1hdGgubWF4KDAsQiksYmVoYXZpb3I6InNtb290aCJ9KX19fWFzeW5jIHNjcm9sbFRvUGFnZShYLEk9ITApe2F3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7bGV0IE89dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAucGFnZS13cmFwcGVyW2RhdGEtcGFnZT0iJHtYfSJdYCk7aWYoTyYmdGhpcy52aWV3ZXJNYWluKXtsZXQgRz1PLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGo9dGhpcy52aWV3ZXJNYWluLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGtlPXRoaXMudmlld2VyTWFpbi5zY3JvbGxUb3ArKEcudG9wLWoudG9wKS10aGlzLnZpZXdlck1haW4uY2xpZW50VG9wO0k/dGhpcy52aWV3ZXJNYWluLnNjcm9sbFRvKHt0b3A6a2UsYmVoYXZpb3I6InNtb290aCJ9KTp0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wPWtlLHRoaXMuY3VycmVudFBhZ2U9WCx0aGlzLnNob3dTaWRlYmFyJiZ0aGlzLnNjcm9sbFRodW1ibmFpbEludG9WaWV3KFgpLGF3YWl0IHRoaXMucmVuZGVyUGFnZUlmTmVlZGVkKFgpfX1hc3luYyByZW5kZXJUaHVtYm5haWxzKCl7aWYoIXRoaXMucGRmRG9jdW1lbnR8fHRoaXMudGh1bWJuYWlsRGF0YS5sZW5ndGg+MCYmdGhpcy50aHVtYm5haWxEYXRhLmV2ZXJ5KEk9PkkucmVuZGVyZWQpfHx0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlcj8uc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2xldCBYPXRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyPy5zaWduYWw7dGhpcy5yZW5kZXJTdGF0ZT0icmVuZGVyaW5nLXRodW1icyI7Zm9yKGxldCBJIG9mIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MpdHJ5e0kuY2FuY2VsKCl9Y2F0Y2h7fXRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3M9W107dHJ5e2F3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7bGV0IEk9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIudGh1bWJuYWlsIiksTz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi50aHVtYm5haWwtY2FudmFzIiksRz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5zaWRlYmFyLWNvbnRlbnQiKSxqPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKEcpLGtlPTIwMC0ocGFyc2VGbG9hdChqLnBhZGRpbmdMZWZ0KStwYXJzZUZsb2F0KGoucGFkZGluZ1JpZ2h0KSktNDtmb3IobGV0IERlIG9mIEFycmF5LmZyb20oTykpe2xldCBPZT1EZS5nZXRDb250ZXh0KCIyZCIpO09lJiZPZS5jbGVhclJlY3QoMCwwLERlLndpZHRoLERlLmhlaWdodCl9Zm9yKGxldCBEZT0wO0RlPE8ubGVuZ3RoO0RlKyspe2lmKFg/LmFib3J0ZWQpcmV0dXJuO2xldCBPZT1PW0RlXSxVPUlbRGVdLEI9cGFyc2VJbnQoT2UuZGF0YXNldC5wYWdlfHwiMSIpLG9lPWF3YWl0IHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShCKSx2ZT1vZS5nZXRWaWV3cG9ydCh7c2NhbGU6MX0pLHllPWtlL3ZlLndpZHRoLCRlPW9lLmdldFZpZXdwb3J0KHtzY2FsZTp5ZX0pO09lLndpZHRoPSRlLndpZHRoLE9lLmhlaWdodD0kZS5oZWlnaHQsT2Uuc3R5bGUud2lkdGg9YCR7JGUud2lkdGh9cHhgLE9lLnN0eWxlLmhlaWdodD1gJHskZS5oZWlnaHR9cHhgLFUuc3R5bGUuaGVpZ2h0PWAkeyRlLmhlaWdodH1weGAsVS5zdHlsZS5taW5IZWlnaHQ9YCR7JGUuaGVpZ2h0fXB4YDtsZXQgbmU9T2UuZ2V0Q29udGV4dCgiMmQiKTtpZighbmUpe29lLmNsZWFudXA/LigpO2NvbnRpbnVlfWxldCByZT17Y2FudmFzQ29udGV4dDpuZSx2aWV3cG9ydDokZX0sZ2U9b2UucmVuZGVyKHJlKTt0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzLnB1c2goZ2UpLGF3YWl0IGdlLnByb21pc2Usb2UuY2xlYW51cD8uKCk7bGV0IEVlPXRoaXMudGh1bWJuYWlsRGF0YS5maW5kKHJ0PT5ydC5wYWdlPT09Qik7RWUmJihFZS5yZW5kZXJlZD0hMCl9dGhpcy5yZXF1ZXN0VXBkYXRlKCJ0aHVtYm5haWxEYXRhIil9Y2F0Y2goSSl7ST8ubmFtZSE9PSJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iJiZjb25zb2xlLmVycm9yKCJFcnJvciByZW5kZXJpbmcgdGh1bWJuYWlsczoiLEkpfWZpbmFsbHl7dGhpcy50aHVtYm5haWxSZW5kZXJUYXNrcz1bXX19cHJldmlvdXNQYWdlKCl7dGhpcy5jdXJyZW50UGFnZT4xJiZ0aGlzLnNjcm9sbFRvUGFnZSh0aGlzLmN1cnJlbnRQYWdlLTEpfW5leHRQYWdlKCl7dGhpcy5jdXJyZW50UGFnZTx0aGlzLnRvdGFsUGFnZXMmJnRoaXMuc2Nyb2xsVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UrMSl9aGFuZGxlVGh1bWJuYWlsQ2xpY2soWCl7bGV0IEk9WC5jdXJyZW50VGFyZ2V0LE89cGFyc2VJbnQoSS5kYXRhc2V0LnBhZ2V8fCIxIik7dGhpcy5zY3JvbGxUb1BhZ2UoTyl9aGFuZGxlUGFnZUlucHV0KFgpe2xldCBJPVgudGFyZ2V0LE89cGFyc2VJbnQoSS52YWx1ZSk7dGhpcy5zY3JvbGxUb1BhZ2UoTyl9em9vbUluKCl7bGV0IFg9TWF0aC5taW4odGhpcy5NQU5VQUxfTUFYX1pPT00sdGhpcy5jdXJyZW50Wm9vbSoxLjIpO3RoaXMudmlld3BvcnRNb2RlPSJjdXN0b20iLFghPT10aGlzLmN1cnJlbnRab29tJiYodGhpcy5jdXJyZW50Wm9vbT1YLHRoaXMucmVSZW5kZXJBbGxQYWdlcygpKX16b29tT3V0KCl7bGV0IFg9TWF0aC5tYXgodGhpcy5NQU5VQUxfTUlOX1pPT00sdGhpcy5jdXJyZW50Wm9vbS8xLjIpO3RoaXMudmlld3BvcnRNb2RlPSJjdXN0b20iLFghPT10aGlzLmN1cnJlbnRab29tJiYodGhpcy5jdXJyZW50Wm9vbT1YLHRoaXMucmVSZW5kZXJBbGxQYWdlcygpKX1yZXNldFpvb20oKXt0aGlzLnZpZXdwb3J0TW9kZT0iY3VzdG9tIix0aGlzLmN1cnJlbnRab29tPTEsdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCl9Zml0VG9QYWdlKCl7dGhpcy52aWV3cG9ydE1vZGU9InBhZ2UtZml0Iix0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKX1maXRUb1dpZHRoKCl7dGhpcy52aWV3cG9ydE1vZGU9InBhZ2Utd2lkdGgiLHRoaXMucmVSZW5kZXJBbGxQYWdlcygpfXJlUmVuZGVyQWxsUGFnZXMoKXt0aGlzLnBhZ2VEYXRhLmZvckVhY2goWD0+e1gucmVuZGVyZWQ9ITEsWC5yZW5kZXJpbmc9ITF9KSx0aGlzLnBhZ2VSZW5kZXJUYXNrcy5mb3JFYWNoKFg9Pnt0cnl7WC5jYW5jZWwoKX1jYXRjaHt9fSksdGhpcy5wYWdlUmVuZGVyVGFza3MuY2xlYXIoKSx0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9Pnt0aGlzLnJlbmRlclZpc2libGVQYWdlcygpfSl9ZG93bmxvYWRQZGYoKXtsZXQgWD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7WC5ocmVmPXRoaXMucGRmVXJsLFguZG93bmxvYWQ9dGhpcy5wZGZVcmwuc3BsaXQoIi8iKS5wb3AoKXx8ImRvY3VtZW50LnBkZiIsWC5jbGljaygpfXByaW50UGRmKCl7d2luZG93Lm9wZW4odGhpcy5wZGZVcmwsIl9ibGFuayIpPy5wcmludCgpfWdldENvbnRleHRNZW51SXRlbXMoKXtyZXR1cm5be25hbWU6Ik9wZW4gUERGIGluIE5ldyBUYWIiLGljb25OYW1lOiJsdWNpZGU6RXh0ZXJuYWxMaW5rIixhY3Rpb246YXN5bmMoKT0+e3dpbmRvdy5vcGVuKHRoaXMucGRmVXJsLCJfYmxhbmsiKX19LHtkaXZpZGVyOiEwfSx7bmFtZToiQ29weSBQREYgVVJMIixpY29uTmFtZToibHVjaWRlOkNvcHkiLGFjdGlvbjphc3luYygpPT57YXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpfX0se25hbWU6IkRvd25sb2FkIFBERiIsaWNvbk5hbWU6Imx1Y2lkZTpEb3dubG9hZCIsYWN0aW9uOmFzeW5jKCk9Pnt0aGlzLmRvd25sb2FkUGRmKCl9fSx7bmFtZToiUHJpbnQgUERGIixpY29uTmFtZToibHVjaWRlOlByaW50ZXIiLGFjdGlvbjphc3luYygpPT57dGhpcy5wcmludFBkZigpfX1dfWdldCBjYW5ab29tSW4oKXtyZXR1cm4gdGhpcy52aWV3cG9ydE1vZGUhPT0iY3VzdG9tInx8dGhpcy5jdXJyZW50Wm9vbTx0aGlzLk1BTlVBTF9NQVhfWk9PTX1nZXQgY2FuWm9vbU91dCgpe3JldHVybiB0aGlzLnZpZXdwb3J0TW9kZSE9PSJjdXN0b20ifHx0aGlzLmN1cnJlbnRab29tPnRoaXMuTUFOVUFMX01JTl9aT09NfWVuc3VyZVZpZXdlclJlZnMoKXt0aGlzLnZpZXdlck1haW58fCh0aGlzLnZpZXdlck1haW49dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudmlld2VyLW1haW4iKSksdGhpcy52aWV3ZXJNYWluJiYhdGhpcy5yZXNpemVPYnNlcnZlciYmKHRoaXMucmVzaXplT2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT57dGhpcy5tZWFzdXJlVmlld3BvcnREaW1lbnNpb25zKCksdGhpcy5wZGZEb2N1bWVudCYmdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCl9KSx0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy52aWV3ZXJNYWluKSx0aGlzLm1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKSx0aGlzLnZpZXdlck1haW4uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLFg9PntsZXQgST1YLmN1cnJlbnRUYXJnZXQsTz1JLnNjcm9sbFRvcCxHPUkuc2Nyb2xsSGVpZ2h0LGo9SS5jbGllbnRIZWlnaHQsc2U9WC5kZWx0YVksa2U9Tz09PTAsRGU9TWF0aC5hYnMoTytqLUcpPDE7c2U8MCYmIWtlfHxzZT4wJiYhRGU/WC5zdG9wUHJvcGFnYXRpb24oKTooc2U8MCYma2V8fHNlPjAmJkRlKSYmKFgucHJldmVudERlZmF1bHQoKSxYLnN0b3BQcm9wYWdhdGlvbigpKX0se3Bhc3NpdmU6ITF9KSl9bWVhc3VyZVZpZXdwb3J0RGltZW5zaW9ucygpe2lmKCF0aGlzLnZpZXdlck1haW4pe3RoaXMudmlld3BvcnREaW1lbnNpb25zPXt3aWR0aDowLGhlaWdodDowfTtyZXR1cm59bGV0IFg9Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnZpZXdlck1haW4pLEk9cGFyc2VGbG9hdChYLnBhZGRpbmdMZWZ0fHwiMCIpK3BhcnNlRmxvYXQoWC5wYWRkaW5nUmlnaHR8fCIwIiksTz1wYXJzZUZsb2F0KFgucGFkZGluZ1RvcHx8IjAiKStwYXJzZUZsb2F0KFgucGFkZGluZ0JvdHRvbXx8IjAiKSxHPU1hdGgubWF4KHRoaXMudmlld2VyTWFpbi5jbGllbnRXaWR0aC1JLDApLGo9TWF0aC5tYXgodGhpcy52aWV3ZXJNYWluLmNsaWVudEhlaWdodC1PLDApO3RoaXMudmlld3BvcnREaW1lbnNpb25zPXt3aWR0aDpHLGhlaWdodDpqfX1yZXNvbHZlSW5pdGlhbFZpZXdwb3J0TW9kZSgpe3R5cGVvZiB0aGlzLmluaXRpYWxab29tPT0ibnVtYmVyIj8odGhpcy52aWV3cG9ydE1vZGU9ImN1c3RvbSIsdGhpcy5jdXJyZW50Wm9vbT10aGlzLm5vcm1hbGl6ZVpvb20odGhpcy5pbml0aWFsWm9vbSwhMCkpOnRoaXMuaW5pdGlhbFpvb209PT0icGFnZS13aWR0aCI/dGhpcy52aWV3cG9ydE1vZGU9InBhZ2Utd2lkdGgiOnRoaXMuaW5pdGlhbFpvb209PT0icGFnZS1maXQifHx0aGlzLmluaXRpYWxab29tPT09ImF1dG8iP3RoaXMudmlld3BvcnRNb2RlPSJwYWdlLWZpdCI6dGhpcy52aWV3cG9ydE1vZGU9ImF1dG8iLHRoaXMudmlld3BvcnRNb2RlIT09ImN1c3RvbSImJih0aGlzLmN1cnJlbnRab29tPTEpfWNvbXB1dGVWaWV3cG9ydChYKXt0aGlzLm1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKTtsZXQgST1YLmdldFZpZXdwb3J0KHtzY2FsZToxfSksTztzd2l0Y2godGhpcy52aWV3cG9ydE1vZGUpe2Nhc2UicGFnZS13aWR0aCI6e089KHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRofHxJLndpZHRoKS9JLndpZHRoO2JyZWFrfWNhc2UicGFnZS1maXQiOmNhc2UiYXV0byI6e2xldCBqPXRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRofHxJLndpZHRoLHNlPXRoaXMudmlld3BvcnREaW1lbnNpb25zLmhlaWdodHx8SS5oZWlnaHQsa2U9ai9JLndpZHRoLERlPXNlL0kuaGVpZ2h0O089TWF0aC5taW4oa2UsRGUpO2JyZWFrfWRlZmF1bHQ6e089dGhpcy5ub3JtYWxpemVab29tKHRoaXMuY3VycmVudFpvb218fDEsITEpO2JyZWFrfX0oIU51bWJlci5pc0Zpbml0ZShPKXx8Tzw9MCkmJihPPTEpO2xldCBHPXRoaXMudmlld3BvcnRNb2RlPT09ImN1c3RvbSI/dGhpcy5ub3JtYWxpemVab29tKE8sITApOnRoaXMubm9ybWFsaXplWm9vbShPLCExKTtyZXR1cm4gdGhpcy52aWV3cG9ydE1vZGUhPT0iY3VzdG9tIiYmKHRoaXMuY3VycmVudFpvb209RyksWC5nZXRWaWV3cG9ydCh7c2NhbGU6R30pfW5vcm1hbGl6ZVpvb20oWCxJKXtsZXQgTz1JP3RoaXMuTUFOVUFMX01JTl9aT09NOnRoaXMuQUJTT0xVVEVfTUlOX1pPT00sRz1JP3RoaXMuTUFOVUFMX01BWF9aT09NOnRoaXMuQUJTT0xVVEVfTUFYX1pPT007cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KFgsTyksRyl9YXN5bmMgY2xlYW51cERvY3VtZW50KCl7aWYodGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXImJih0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlci5hYm9ydCgpLHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyPW51bGwpLHRoaXMuY3VycmVudFJlbmRlclByb21pc2Upe3RyeXthd2FpdCB0aGlzLmN1cnJlbnRSZW5kZXJQcm9taXNlfWNhdGNoe310aGlzLmN1cnJlbnRSZW5kZXJQcm9taXNlPW51bGx9dGhpcy5jdXJyZW50UmVuZGVyVGFzaz1udWxsLHRoaXMucGFnZVJlbmRlclRhc2tzLmZvckVhY2goWD0+e3RyeXtYLmNhbmNlbCgpfWNhdGNoe319KSx0aGlzLnBhZ2VSZW5kZXJUYXNrcy5jbGVhcigpO2ZvcihsZXQgWCBvZiB0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzfHxbXSl0cnl7WC5jYW5jZWwoKX1jYXRjaHt9aWYodGhpcy50aHVtYm5haWxSZW5kZXJUYXNrcz1bXSx0aGlzLnJlbmRlclN0YXRlPSJpZGxlIix0aGlzLnBhZ2VSZW5kZXJpbmc9ITEsdGhpcy5wYWdlTnVtUGVuZGluZz1udWxsLHRoaXMudGh1bWJuYWlsRGF0YT1bXSx0aGlzLnBhZ2VEYXRhPVtdLHRoaXMuZG9jdW1lbnRJZD0iIix0aGlzLmNhbnZhcyYmdGhpcy5jdHgmJnRoaXMuY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0KSx0aGlzLnBkZkRvY3VtZW50KXRyeXt0aGlzLnBkZkRvY3VtZW50LmRlc3Ryb3koKX1jYXRjaChYKXtjb25zb2xlLmVycm9yKCJFcnJvciBkZXN0cm95aW5nIFBERiBkb2N1bWVudDoiLFgpfXRoaXMucGRmRG9jdW1lbnQ9bnVsbCx0aGlzLnJlcXVlc3RVcGRhdGUoKX1zdGF0aWN7cDEocixhKX19O3JldHVybiBSZT1yfSkoKTtmZSgpO3ZhciBBT3QsJE90PSgpPT5NKEFPdHx8KEFPdD1oYyhbYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICBgLGAKICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPWAsIiAuc3VidGl0bGU9IixgPgogICAgICAgIDxkZWVzLXN0YXRzZ3JpZAogICAgICAgICAgLnRpbGVzPWAsYAogICAgICAgICAgLmdyaWRBY3Rpb25zPWAsYAogICAgICAgICAgLm1pblRpbGVXaWR0aD1gLGAKICAgICAgICAgIC5nYXA9YCxgCiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0iYWN0aW9uLW91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IHBhZGRpbmc6IDEycHg7IGJhY2tncm91bmQ6IGAsIjsgYm9yZGVyLXJhZGl1czogNnB4OyBmb250LXNpemU6IDE0cHg7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGNvbG9yOiAiLGA7Ij4KICAgICAgICAgIDxlbT5DbGljayBvbiB0aWxlIGFjdGlvbnMgb3IgZ3JpZCBhY3Rpb25zIHRvIHNlZSB0aGUgcmVzdWx0Li4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPWAsIiAuc3VidGl0bGU9IixgPgogICAgICAgIDxkZWVzLXN0YXRzZ3JpZAogICAgICAgICAgLnRpbGVzPWAsYAogICAgICAgICAgLm1pblRpbGVXaWR0aD1gLGAKICAgICAgICAgIC5nYXA9YCxgCiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1jb25maWciPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctdGl0bGUiPkNvbmZpZ3VyYXRpb24gT3B0aW9uczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctZGVzY3JpcHRpb24iPgogICAgICAgICAgICAgIEVhY2ggdGlsZSB0eXBlIHN1cHBvcnRzIGRpZmZlcmVudCBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luOiA4cHggMDsgcGFkZGluZy1sZWZ0OiAyMHB4OyI+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5OdW1iZXI6PC9zdHJvbmc+IHZhbHVlLCB1bml0LCBjb2xvciwgZGVzY3JpcHRpb248L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+R2F1Z2U6PC9zdHJvbmc+IHZhbHVlLCB1bml0LCBnYXVnZU9wdGlvbnMgKG1pbiwgbWF4LCB0aHJlc2hvbGRzKTwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5QZXJjZW50YWdlOjwvc3Ryb25nPiB2YWx1ZSAoMC0xMDApLCBjb2xvciwgZGVzY3JpcHRpb248L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+VHJlbmQ6PC9zdHJvbmc+IHZhbHVlLCB1bml0LCB0cmVuZERhdGEgYXJyYXksIGRlc2NyaXB0aW9uPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlRleHQ6PC9zdHJvbmc+IHZhbHVlIChzdHJpbmcpLCBjb2xvciwgZGVzY3JpcHRpb248L2xpPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT1gLCIgLnN1YnRpdGxlPSIsYD4KICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDE2cHggMDsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyI+Q29tcGFjdCBMYXlvdXQgKDE4MHB4IHRpbGVzKTwvaDQ+CiAgICAgICAgPGRlZXMtc3RhdHNncmlkCiAgICAgICAgICAudGlsZXM9YCxgCiAgICAgICAgICAubWluVGlsZVdpZHRoPWAsYAogICAgICAgICAgLmdhcD1gLGAKICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD4KICAgICAgICAKICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMjRweCAwIDE2cHggMDsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyI+U3BhY2lvdXMgTGF5b3V0ICgzMjBweCB0aWxlcyk8L2g0PgogICAgICAgIDxkZWVzLXN0YXRzZ3JpZAogICAgICAgICAgLnRpbGVzPWAsYAogICAgICAgICAgLm1pblRpbGVXaWR0aD1gLGAKICAgICAgICAgIC5nYXA9YCxgCiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT1gLCIgLnN1YnRpdGxlPSIsYD4KICAgICAgICA8ZGVlcy1zdGF0c2dyaWQKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1ncmlkIgogICAgICAgICAgLnRpbGVzPWAsYAogICAgICAgICAgLmdyaWRBY3Rpb25zPWAsYAogICAgICAgICAgLm1pblRpbGVXaWR0aD1gLGAKICAgICAgICAgIC5nYXA9YCxgCiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT1gLCIgLnN1YnRpdGxlPSIsYD4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJsb2NrIj5gLGA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgICAKICAgIDxzY3JpcHQ+CiAgICAgIC8vIENsZWFudXAgbGl2ZSB1cGRhdGVzIG9uIHBhZ2UgdW5sb2FkCiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCAoKSA9PiB7CiAgICAgICAgaWYgKCh3aW5kb3cgYXMgYW55KS5saXZlVXBkYXRlSW50ZXJ2YWwpIHsKICAgICAgICAgIGNsZWFySW50ZXJ2YWwoKHdpbmRvdyBhcyBhbnkpLmxpdmVVcGRhdGVJbnRlcnZhbCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIDxcL3NjcmlwdD4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYF0pKSx0ZWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxNDAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRpbGUtY29uZmlnIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMwMHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb25maWctc2VjdGlvbiB7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29uZmlnLXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29uZmlnLWRlc2NyaXB0aW9uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29kZS1ibG9jayB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICAgICB9CiAgICAgIGAsIjEuIENvbXByZWhlbnNpdmUgRGFzaGJvYXJkIiwiRnVsbC1mZWF0dXJlZCBzdGF0cyBncmlkIHdpdGggdmFyaW91cyB0aWxlIHR5cGVzLCBhY3Rpb25zLCBhbmQgTHVjaWRlIGljb25zIixbe2lkOiJyZXZlbnVlIix0aXRsZToiVG90YWwgUmV2ZW51ZSIsdmFsdWU6MTI1NDIwLHVuaXQ6IiQiLHR5cGU6Im51bWJlciIsaWNvbjoibHVjaWRlOmRvbGxhci1zaWduIixkZXNjcmlwdGlvbjoiKzEyLjUlIGZyb20gbGFzdCBtb250aCIsYWN0aW9uczpbe25hbWU6IlZpZXcgRGV0YWlscyIsaWNvbk5hbWU6Imx1Y2lkZTp0cmVuZGluZy11cCIsYWN0aW9uOmFzeW5jKCk9PntsZXQgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpO3QmJih0LnRleHRDb250ZW50PSJWaWV3aW5nIHJldmVudWUgZGV0YWlsczogJDEyNSw0MjAgKCsxMi41JSkiKX19LHtuYW1lOiJFeHBvcnQgRGF0YSIsaWNvbk5hbWU6Imx1Y2lkZTpkb3dubG9hZCIsYWN0aW9uOmFzeW5jKCk9PntsZXQgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpO3QmJih0LnRleHRDb250ZW50PSJFeHBvcnRpbmcgcmV2ZW51ZSBkYXRhIHRvIENTVi4uLiIpfX1dfSx7aWQ6InVzZXJzIix0aXRsZToiQWN0aXZlIFVzZXJzIix2YWx1ZTozODQ3LHR5cGU6Im51bWJlciIsaWNvbjoibHVjaWRlOnVzZXJzIixkZXNjcmlwdGlvbjoiMzI0IG5ldyB0aGlzIHdlZWsiLGFjdGlvbnM6W3tuYW1lOiJWaWV3IFVzZXIgTGlzdCIsaWNvbk5hbWU6Imx1Y2lkZTpsaXN0IixhY3Rpb246YXN5bmMoKT0+e2xldCB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb24tb3V0cHV0Iik7dCYmKHQudGV4dENvbnRlbnQ9Ik9wZW5pbmcgdXNlciBsaXN0Li4uIil9fV19LHtpZDoiY3B1Iix0aXRsZToiQ1BVIFVzYWdlIix2YWx1ZTo3Myx1bml0OiIlIix0eXBlOiJnYXVnZSIsaWNvbjoibHVjaWRlOmNwdSIsZ2F1Z2VPcHRpb25zOnttaW46MCxtYXg6MTAwLHRocmVzaG9sZHM6W3t2YWx1ZTowLGNvbG9yOiJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIn0se3ZhbHVlOjYwLGNvbG9yOiJoc2woNDUuNCA5My40JSA0Ny41JSkifSx7dmFsdWU6ODAsY29sb3I6ImhzbCgwIDg0LjIlIDYwLjIlKSJ9XX19LHtpZDoic3RvcmFnZSIsdGl0bGU6IlN0b3JhZ2UgVXNlZCIsdmFsdWU6NjUsdHlwZToicGVyY2VudGFnZSIsaWNvbjoibHVjaWRlOmhhcmQtZHJpdmUiLGRlc2NyaXB0aW9uOiI2NTAgR0Igb2YgMSBUQiJ9LHtpZDoibGF0ZW5jeSIsdGl0bGU6IlJlc3BvbnNlIFRpbWUiLHZhbHVlOjE0Mix1bml0OiJtcyIsdHlwZToidHJlbmQiLGljb246Imx1Y2lkZTphY3Rpdml0eSIsdHJlbmREYXRhOlsxNTAsMTQ1LDE0OCwxNDIsMTM4LDE0MCwxMzUsMTQ1LDE0Ml0sZGVzY3JpcHRpb246IlA5NSJ9LHtpZDoidXB0aW1lIix0aXRsZToiU3lzdGVtIFVwdGltZSIsdmFsdWU6Ijk5Ljk1JSIsdHlwZToidGV4dCIsaWNvbjoibHVjaWRlOmNoZWNrLWNpcmNsZSIsY29sb3I6ImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLGRlc2NyaXB0aW9uOiJMYXN0IDMwIGRheXMifV0sW3tuYW1lOiJSZWZyZXNoIixpY29uTmFtZToibHVjaWRlOnJlZnJlc2gtY3ciLGFjdGlvbjphc3luYygpPT57bGV0IHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1zdGF0c2dyaWQiKTt0JiYodC5zdHlsZS5vcGFjaXR5PSIwLjUiLHNldFRpbWVvdXQoKCk9Pnt0LnN0eWxlLm9wYWNpdHk9IjEifSwzMDApKX19LHtuYW1lOiJFeHBvcnQiLGljb25OYW1lOiJsdWNpZGU6c2hhcmUiLGFjdGlvbjphc3luYygpPT57bGV0IHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTt0JiYodC50ZXh0Q29udGVudD0iRXhwb3J0aW5nIGRhc2hib2FyZCByZXBvcnQuLi4iKX19LHtuYW1lOiJTZXR0aW5ncyIsaWNvbk5hbWU6Imx1Y2lkZTpzZXR0aW5ncyIsYWN0aW9uOmFzeW5jKCk9PntsZXQgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpO3QmJih0LnRleHRDb250ZW50PSJPcGVuaW5nIGRhc2hib2FyZCBzZXR0aW5ncy4uLiIpfX1dLDI1MCwxNixwLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsImhzbCgyMTUgMjAuMiUgMTYuOCUpIikscC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwiaHNsKDIxMCA0MCUgOTglKSIpLCIyLiBUaWxlIFR5cGVzIiwiRGlmZmVyZW50IHZpc3VhbGl6YXRpb24gdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBzdGF0cyBncmlkIixbe2lkOiJudW1iZXItZXhhbXBsZSIsdGl0bGU6Ik51bWJlciBUaWxlIix2YWx1ZTo0MjE5NSx1bml0OiIkIix0eXBlOiJudW1iZXIiLGljb246Imx1Y2lkZTpoYXNoIixkZXNjcmlwdGlvbjoiU2ltcGxlIG51bWVyaWMgZGlzcGxheSJ9LHtpZDoiZ2F1Z2UtZXhhbXBsZSIsdGl0bGU6IkdhdWdlIFRpbGUiLHZhbHVlOjY4LHVuaXQ6IiUiLHR5cGU6ImdhdWdlIixpY29uOiJsdWNpZGU6Z2F1Z2UiLGdhdWdlT3B0aW9uczp7bWluOjAsbWF4OjEwMCx0aHJlc2hvbGRzOlt7dmFsdWU6MCxjb2xvcjoiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSJ9LHt2YWx1ZTo1MCxjb2xvcjoiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIn0se3ZhbHVlOjgwLGNvbG9yOiJoc2woMCA4NC4yJSA2MC4yJSkifV19fSx7aWQ6InBlcmNlbnRhZ2UtZXhhbXBsZSIsdGl0bGU6IlBlcmNlbnRhZ2UgVGlsZSIsdmFsdWU6NzgsdHlwZToicGVyY2VudGFnZSIsaWNvbjoibHVjaWRlOnBlcmNlbnQiLGRlc2NyaXB0aW9uOiJQcm9ncmVzcyBiYXIgdmlzdWFsaXphdGlvbiJ9LHtpZDoidHJlbmQtZXhhbXBsZSIsdGl0bGU6IlRyZW5kIFRpbGUiLHZhbHVlOjg5Mix1bml0OiJvcHMvcyIsdHlwZToidHJlbmQiLGljb246Imx1Y2lkZTp0cmVuZGluZy11cCIsdHJlbmREYXRhOls3MjAsNzUwLDc4MCw3OTUsODEwLDgzNSw4NTAsODY1LDg4MCw4OTJdLGRlc2NyaXB0aW9uOiJhdmcifSx7aWQ6InRleHQtZXhhbXBsZSIsdGl0bGU6IlRleHQgVGlsZSIsdmFsdWU6Ik9wZXJhdGlvbmFsIix0eXBlOiJ0ZXh0IixpY29uOiJsdWNpZGU6aW5mbyIsY29sb3I6ImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLGRlc2NyaXB0aW9uOiJTdGF0dXMgZGlzcGxheSJ9XSwyODAsMTYsIjMuIEdyaWQgQ29uZmlndXJhdGlvbnMiLCJEaWZmZXJlbnQgbGF5b3V0IG9wdGlvbnMgYW5kIHJlc3BvbnNpdmUgYmVoYXZpb3IiLFt7aWQ6IjEiLHRpdGxlOiJPcmRlcnMiLHZhbHVlOjE1Nix0eXBlOiJudW1iZXIiLGljb246Imx1Y2lkZTpzaG9wcGluZy1jYXJ0In0se2lkOiIyIix0aXRsZToiUmV2ZW51ZSIsdmFsdWU6ODQyMCx1bml0OiIkIix0eXBlOiJudW1iZXIiLGljb246Imx1Y2lkZTpkb2xsYXItc2lnbiJ9LHtpZDoiMyIsdGl0bGU6IlVzZXJzIix2YWx1ZTo0MjMsdHlwZToibnVtYmVyIixpY29uOiJsdWNpZGU6dXNlcnMifSx7aWQ6IjQiLHRpdGxlOiJHcm93dGgiLHZhbHVlOjEyLjUsdW5pdDoiJSIsdHlwZToibnVtYmVyIixpY29uOiJsdWNpZGU6dHJlbmRpbmctdXAiLGNvbG9yOiJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIn1dLDE4MCwxMixbe2lkOiJzcGFjaW91czEiLHRpdGxlOiJNb250aGx5IFJldmVudWUiLHZhbHVlOjE4NDUwMCx1bml0OiIkIix0eXBlOiJudW1iZXIiLGljb246Imx1Y2lkZTpjcmVkaXQtY2FyZCIsZGVzY3JpcHRpb246IlRvdGFsIHJldmVudWUgdGhpcyBtb250aCJ9LHtpZDoic3BhY2lvdXMyIix0aXRsZToiQ3VzdG9tZXIgU2F0aXNmYWN0aW9uIix2YWx1ZTo5NCx0eXBlOiJwZXJjZW50YWdlIixpY29uOiJsdWNpZGU6c21pbGUiLGRlc2NyaXB0aW9uOiJCYXNlZCBvbiAxLDIzNCByZXZpZXdzIn0se2lkOiJzcGFjaW91czMiLHRpdGxlOiJTZXJ2ZXIgUmVzcG9uc2UiLHZhbHVlOjk4LHVuaXQ6Im1zIix0eXBlOiJ0cmVuZCIsaWNvbjoibHVjaWRlOnNlcnZlciIsdHJlbmREYXRhOlsxMDUsMTAyLDEwMCw5OSw5OCw5OCw5Nyw5OF0sZGVzY3JpcHRpb246ImF2ZyByZXNwb25zZSB0aW1lIn1dLDMyMCwyMCwiNC4gSW50ZXJhY3RpdmUgRmVhdHVyZXMiLCJUaWxlcyB3aXRoIGFjdGlvbnMgYW5kIHJlYWwtdGltZSB1cGRhdGVzIixbe2lkOiJsaXZlLWNwdSIsdGl0bGU6IkxpdmUgQ1BVIix2YWx1ZTo0NSx1bml0OiIlIix0eXBlOiJnYXVnZSIsaWNvbjoibHVjaWRlOmNwdSIsZ2F1Z2VPcHRpb25zOnttaW46MCxtYXg6MTAwLHRocmVzaG9sZHM6W3t2YWx1ZTowLGNvbG9yOiJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIn0se3ZhbHVlOjYwLGNvbG9yOiJoc2woNDUuNCA5My40JSA0Ny41JSkifSx7dmFsdWU6ODAsY29sb3I6ImhzbCgwIDg0LjIlIDYwLjIlKSJ9XX19LHtpZDoibGl2ZS1yZXF1ZXN0cyIsdGl0bGU6IlJlcXVlc3RzL3NlYyIsdmFsdWU6ODkyLHR5cGU6InRyZW5kIixpY29uOiJsdWNpZGU6YWN0aXZpdHkiLHRyZW5kRGF0YTpbODUwLDg2MCw4NzAsODgwLDg4NSw4OTAsODkyXX0se2lkOiJsaXZlLW1lbW9yeSIsdGl0bGU6Ik1lbW9yeSBVc2FnZSIsdmFsdWU6NjIsdHlwZToicGVyY2VudGFnZSIsaWNvbjoibHVjaWRlOmRhdGFiYXNlIn0se2lkOiJjb3VudGVyIix0aXRsZToiRXZlbnQgQ291bnRlciIsdmFsdWU6MCx0eXBlOiJudW1iZXIiLGljb246Imx1Y2lkZTp6YXAiLGFjdGlvbnM6W3tuYW1lOiJJbmNyZW1lbnQiLGljb25OYW1lOiJsdWNpZGU6cGx1cyIsYWN0aW9uOmFzeW5jKCk9PntsZXQgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaW50ZXJhY3RpdmUtZ3JpZCIpO2lmKCF0KXJldHVybjtsZXQgZT10LnRpbGVzLmZpbmQoYT0+YS5pZD09PSJjb3VudGVyIik7ZS52YWx1ZT10eXBlb2YgZS52YWx1ZT09Im51bWJlciI/ZS52YWx1ZSsxOjEsdC50aWxlcz1bLi4udC50aWxlc119fSx7bmFtZToiUmVzZXQiLGljb25OYW1lOiJsdWNpZGU6cm90YXRlLWNjdyIsYWN0aW9uOmFzeW5jKCk9PntsZXQgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaW50ZXJhY3RpdmUtZ3JpZCIpO2lmKCF0KXJldHVybjtsZXQgZT10LnRpbGVzLmZpbmQoYT0+YS5pZD09PSJjb3VudGVyIik7ZS52YWx1ZT0wLHQudGlsZXM9Wy4uLnQudGlsZXNdfX1dfV0sW3tuYW1lOiJTdGFydCBMaXZlIFVwZGF0ZXMiLGljb25OYW1lOiJsdWNpZGU6cGxheSIsYWN0aW9uOmFzeW5jIGZ1bmN0aW9uKCl7d2luZG93LmxpdmVVcGRhdGVJbnRlcnZhbD8oY2xlYXJJbnRlcnZhbCh3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsKSx3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsPW51bGwsdGhpcy5uYW1lPSJTdGFydCBMaXZlIFVwZGF0ZXMiLHRoaXMuaWNvbk5hbWU9Imx1Y2lkZTpwbGF5Iik6KHdpbmRvdy5saXZlVXBkYXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9PntsZXQgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaW50ZXJhY3RpdmUtZ3JpZCIpO2lmKHQpe2xldCBlPVsuLi50LnRpbGVzXSxhPWUuZmluZChzPT5zLmlkPT09ImxpdmUtY3B1Iik7YS52YWx1ZT1NYXRoLm1heCgwLE1hdGgubWluKDEwMCxhLnZhbHVlKyhNYXRoLnJhbmRvbSgpKjIwLTEwKSkpO2xldCByPWUuZmluZChzPT5zLmlkPT09ImxpdmUtcmVxdWVzdHMiKSxpPXIudmFsdWUrTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKjUwLTI1KTtyLnZhbHVlPU1hdGgubWF4KDgwMCxpKSxyLnRyZW5kRGF0YT1bLi4uci50cmVuZERhdGEuc2xpY2UoMSksci52YWx1ZV07bGV0IG89ZS5maW5kKHM9PnMuaWQ9PT0ibGl2ZS1tZW1vcnkiKTtvLnZhbHVlPU1hdGgubWF4KDAsTWF0aC5taW4oMTAwLG8udmFsdWUrKE1hdGgucmFuZG9tKCkqMTAtNSkpKSx0LnRpbGVzPWV9fSwxZTMpLHRoaXMubmFtZT0iU3RvcCBMaXZlIFVwZGF0ZXMiLHRoaXMuaWNvbk5hbWU9Imx1Y2lkZTpwYXVzZSIpfX1dLDI1MCwxNiwiNS4gQ29kZSBFeGFtcGxlIiwiSG93IHRvIGltcGxlbWVudCBhIHN0YXRzIGdyaWQgd2l0aCBUeXBlU2NyaXB0IixgY29uc3QgdGlsZXM6IElTdGF0c1RpbGVbXSA9IFsKICB7CiAgICBpZDogJ3JldmVudWUnLAogICAgdGl0bGU6ICdUb3RhbCBSZXZlbnVlJywKICAgIHZhbHVlOiAxMjU0MjAsCiAgICB1bml0OiAnJCcsCiAgICB0eXBlOiAnbnVtYmVyJywKICAgIGljb246ICdsdWNpZGU6ZG9sbGFyLXNpZ24nLAogICAgZGVzY3JpcHRpb246ICcrMTIuNSUgZnJvbSBsYXN0IG1vbnRoJywKICAgIGFjdGlvbnM6IFsKICAgICAgewogICAgICAgIG5hbWU6ICdWaWV3IERldGFpbHMnLAogICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnRyZW5kaW5nLXVwJywKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKCdWaWV3IHJldmVudWUgZGV0YWlscycpOwogICAgICAgIH0KICAgICAgfQogICAgXQogIH0sCiAgewogICAgaWQ6ICdjcHUnLAogICAgdGl0bGU6ICdDUFUgVXNhZ2UnLAogICAgdmFsdWU6IDczLAogICAgdW5pdDogJyUnLAogICAgdHlwZTogJ2dhdWdlJywKICAgIGljb246ICdsdWNpZGU6Y3B1JywKICAgIGdhdWdlT3B0aW9uczogewogICAgICBtaW46IDAsCiAgICAgIG1heDogMTAwLAogICAgICB0aHJlc2hvbGRzOiBbCiAgICAgICAgeyB2YWx1ZTogMCwgY29sb3I6ICdoc2woMTQyLjEgNzYuMiUgMzYuMyUpJyB9LAogICAgICAgIHsgdmFsdWU6IDYwLCBjb2xvcjogJ2hzbCg0NS40IDkzLjQlIDQ3LjUlKScgfSwKICAgICAgICB7IHZhbHVlOiA4MCwgY29sb3I6ICdoc2woMCA4NC4yJSA2MC4yJSknIH0KICAgICAgXQogICAgfQogIH0KXTsKCi8vIFJlbmRlciB0aGUgc3RhdHMgZ3JpZApodG1sXGAKICA8ZGVlcy1zdGF0c2dyaWQKICAgIC50aWxlcz1cJHt0aWxlc30KICAgIC5taW5UaWxlV2lkdGg9XCR7MjUwfQogICAgLmdhcD1cJHsxNn0KICAgIC5ncmlkQWN0aW9ucz1cJHtbCiAgICAgIHsKICAgICAgICBuYW1lOiAnUmVmcmVzaCcsCiAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6cmVmcmVzaC1jdycsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygnUmVmcmVzaCcpCiAgICAgIH0KICAgIF19CiAgPjwvZGVlcy1zdGF0c2dyaWQ+ClxgO2ApO2ZlKCk7RnQoKTtCZSgpO3ZhciBwcz1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LGoyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxmbjE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLXN0YXRzZ3JpZCIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdLEUsQz1bXSx6PVtdLFAsXz1bXSwkPVtdO3ZhciBIPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgTD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOkFycmF5fSldLGY9W0Qoe3R5cGU6TnVtYmVyfSldLGQ9W0Qoe3R5cGU6TnVtYmVyfSldLGI9W0Qoe3R5cGU6QXJyYXl9KV0sdj1bbGUoKV0sRT1bbGUoKV0sUD1bbGUoKV0scHModGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0aWxlcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InRpbGVzImluIGssZ2V0Oms9PmsudGlsZXMsc2V0OihrLE4pPT57ay50aWxlcz1OfX0sbWV0YWRhdGE6TH0scyxsKSxwcyh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1pblRpbGVXaWR0aCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+Im1pblRpbGVXaWR0aCJpbiBrLGdldDprPT5rLm1pblRpbGVXaWR0aCxzZXQ6KGssTik9PntrLm1pblRpbGVXaWR0aD1OfX0sbWV0YWRhdGE6TH0sYyx1KSxwcyh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImdhcCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImdhcCJpbiBrLGdldDprPT5rLmdhcCxzZXQ6KGssTik9PntrLmdhcD1OfX0sbWV0YWRhdGE6TH0saCxnKSxwcyh0aGlzLG51bGwsYix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImdyaWRBY3Rpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4iZ3JpZEFjdGlvbnMiaW4gayxnZXQ6az0+ay5ncmlkQWN0aW9ucyxzZXQ6KGssTik9PntrLmdyaWRBY3Rpb25zPU59fSxtZXRhZGF0YTpMfSx4LG0pLHBzKHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29udGV4dE1lbnVWaXNpYmxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4iY29udGV4dE1lbnVWaXNpYmxlImluIGssZ2V0Oms9PmsuY29udGV4dE1lbnVWaXNpYmxlLHNldDooayxOKT0+e2suY29udGV4dE1lbnVWaXNpYmxlPU59fSxtZXRhZGF0YTpMfSx5LHcpLHBzKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29udGV4dE1lbnVQb3NpdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImNvbnRleHRNZW51UG9zaXRpb24iaW4gayxnZXQ6az0+ay5jb250ZXh0TWVudVBvc2l0aW9uLHNldDooayxOKT0+e2suY29udGV4dE1lbnVQb3NpdGlvbj1OfX0sbWV0YWRhdGE6TH0sQyx6KSxwcyh0aGlzLG51bGwsUCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNvbnRleHRNZW51QWN0aW9ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImNvbnRleHRNZW51QWN0aW9ucyJpbiBrLGdldDprPT5rLmNvbnRleHRNZW51QWN0aW9ucyxzZXQ6KGssTik9PntrLmNvbnRleHRNZW51QWN0aW9ucz1OfX0sbWV0YWRhdGE6TH0sXywkKSxwcyhudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpMfSxudWxsLGEpLEg9cj1lLnZhbHVlLEwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TH0pfXN0YXRpYyBkZW1vPSRPdDsjZT1qMih0aGlzLHMsW10pO2dldCB0aWxlcygpe3JldHVybiB0aGlzLiNlfXNldCB0aWxlcyhMKXt0aGlzLiNlPUx9I3Q9KGoyKHRoaXMsbCksajIodGhpcyxjLDI1MCkpO2dldCBtaW5UaWxlV2lkdGgoKXtyZXR1cm4gdGhpcy4jdH1zZXQgbWluVGlsZVdpZHRoKEwpe3RoaXMuI3Q9TH0jYT0oajIodGhpcyx1KSxqMih0aGlzLGgsMTYpKTtnZXQgZ2FwKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGdhcChMKXt0aGlzLiNhPUx9I3I9KGoyKHRoaXMsZyksajIodGhpcyx4LFtdKSk7Z2V0IGdyaWRBY3Rpb25zKCl7cmV0dXJuIHRoaXMuI3J9c2V0IGdyaWRBY3Rpb25zKEwpe3RoaXMuI3I9TH0jaT0oajIodGhpcyxtKSxqMih0aGlzLHksITEpKTtnZXQgY29udGV4dE1lbnVWaXNpYmxlKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGNvbnRleHRNZW51VmlzaWJsZShMKXt0aGlzLiNpPUx9I289KGoyKHRoaXMsdyksajIodGhpcyxDLHt4OjAseTowfSkpO2dldCBjb250ZXh0TWVudVBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuI299c2V0IGNvbnRleHRNZW51UG9zaXRpb24oTCl7dGhpcy4jbz1MfSNzPShqMih0aGlzLHopLGoyKHRoaXMsXyxbXSkpO2dldCBjb250ZXh0TWVudUFjdGlvbnMoKXtyZXR1cm4gdGhpcy4jc31zZXQgY29udGV4dE1lbnVBY3Rpb25zKEwpe3RoaXMuI3M9TH1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmb250LWZhbWlseTogJHtKdH07CiAgICAgIH0KCiAgICAgIC8qIENTUyBWYXJpYWJsZXMgZm9yIGNvbnNpc3RlbnQgc3BhY2luZyBhbmQgc2l6aW5nICovCiAgICAgIDpob3N0IHsKICAgICAgICAtLWdyaWQtZ2FwOiAxMnB4OwogICAgICAgIC0tdGlsZS1wYWRkaW5nOiAxNnB4OwogICAgICAgIC0taGVhZGVyLXNwYWNpbmc6IDEycHg7CiAgICAgICAgLS1jb250ZW50LW1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgLS12YWx1ZS1mb250LXNpemU6IDI2cHg7CiAgICAgICAgLS11bml0LWZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLWxhYmVsLWZvbnQtc2l6ZTogMTJweDsKICAgICAgICAtLXRpdGxlLWZvbnQtc2l6ZTogMTNweDsKICAgICAgICAtLWRlc2NyaXB0aW9uLXNwYWNpbmc6IDhweDsKICAgICAgICAtLWJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAtLXRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzOwogICAgICB9CgogICAgICAvKiBHcmlkIExheW91dCAqLwogICAgICAuZ3JpZC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogY2FsYyh2YXIoLS1ncmlkLWdhcCkgKiAxLjUpOwogICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgIH0KCiAgICAgIC5ncmlkLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuZ3JpZC1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNnB4OwogICAgICB9CgogICAgICAuZ3JpZC1hY3Rpb25zIGRlZXMtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLWxhYmVsLWZvbnQtc2l6ZSk7CiAgICAgIH0KCiAgICAgIC5zdGF0cy1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoJHtCdCgyNTApfXB4LCAxZnIpKTsKICAgICAgICBnYXA6ICR7QnQoMTYpfXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAvKiBUaWxlIEJhc2UgU3R5bGVzICovCiAgICAgIC5zdGF0cy10aWxlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMwOTA5MGIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlMGUwZTAiLCIjMjAyMDIwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOwogICAgICAgIHBhZGRpbmc6IHZhcigtLXRpbGUtcGFkZGluZyk7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tZHVyYXRpb24pIGVhc2U7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLnN0YXRzLXRpbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmFmYWZhIiwiIzBkMGQwZCIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCIjZDBkMGQwIiwiIzJhMmEyYSIpfTsKICAgICAgfQoKICAgICAgLnN0YXRzLXRpbGUuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5zdGF0cy10aWxlLmNsaWNrYWJsZTpob3ZlciB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDZweCAke3AuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjAzKSIsInJnYmEoMCwwLDAsMC4xNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFRpbGUgSGVhZGVyICovCiAgICAgIC50aWxlLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogdmFyKC0taGVhZGVyLXNwYWNpbmcpOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGlsZS10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10aXRsZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICAgIH0KCiAgICAgIC50aWxlLWljb24gewogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC8qIFRpbGUgQ29udGVudCAqLwogICAgICAudGlsZS1jb250ZW50IHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1jb250ZW50LW1pbi1oZWlnaHQpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAudGlsZS12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLnRpbGUtdW5pdCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS11bml0LWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLnRpbGUtZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBtYXJnaW4tdG9wOiB2YXIoLS1kZXNjcmlwdGlvbi1zcGFjaW5nKTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLyogR2F1Z2UgU3R5bGVzICovCiAgICAgIC5nYXVnZS13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgICBoZWlnaHQ6IDcwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbi10b3A6IC04cHg7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1zdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmdhdWdlLWJhY2tncm91bmQgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAke3AuYmRUaGVtZSgiI2U4ZThlOCIsIiMxYTFhMWEiKX07CiAgICAgICAgc3Ryb2tlLXdpZHRoOiA2OwogICAgICB9CgogICAgICAuZ2F1Z2UtZmlsbCB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2Utd2lkdGg6IDY7CiAgICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICAgIHRyYW5zaXRpb246IHN0cm9rZS1kYXNob2Zmc2V0IDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmdhdWdlLXRleHQgewogICAgICAgIGZpbGw6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBmb250LWZhbWlseTogJHtKdH07CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5nYXVnZS11bml0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXVuaXQtZm9udC1zaXplKTsKICAgICAgICBmaWxsOiAke3AuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7SnR9OwogICAgICB9CgogICAgICAvKiBQZXJjZW50YWdlIFN0eWxlcyAqLwogICAgICAucGVyY2VudGFnZS13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQoKICAgICAgLnBlcmNlbnRhZ2UtYmFyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2U4ZThlOCIsIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzMzMzMzMyIsIiNlMGUwZTAiKX07CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLyogVHJlbmQgU3R5bGVzICovCiAgICAgIC50cmVuZC1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnRyZW5kLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC50cmVuZC12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLnRyZW5kLXVuaXQgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdW5pdC1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC50cmVuZC1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1sYWJlbC1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgIC50cmVuZC1ncmFwaCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnRyZW5kLXN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAudHJlbmQtbGluZSB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6ICR7cC5iZFRoZW1lKCIjOTk5OTk5IiwiIzY2NjY2NiIpfTsKICAgICAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgICAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgfQoKICAgICAgLnRyZW5kLWFyZWEgewogICAgICAgIGZpbGw6ICR7cC5iZFRoZW1lKCJyZ2JhKDE1MCwgMTUwLCAxNTAsIDAuMDgpIiwicmdiYSgxMDAsIDEwMCwgMTAwLCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLyogVGV4dCBWYWx1ZSBTdHlsZXMgKi8KICAgICAgLnRleHQtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC8qIENvbnRleHQgTWVudSAqLwogICAgICBkZWVzLWNvbnRleHRtZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQogICAgYF07Y29uc3RydWN0b3IoKXtzdXBlcigpLGoyKHRoaXMsJCl9cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgICR7dGhpcy5ncmlkQWN0aW9ucy5sZW5ndGg+MD9NYAogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtdGl0bGUiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1hY3Rpb25zIj4KICAgICAgICAgICAgJHt0aGlzLmdyaWRBY3Rpb25zLm1hcChMPT5NYAogICAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiAKICAgICAgICAgICAgICAgIEBjbGlja2VkPSR7KCk9PnRoaXMuaGFuZGxlR3JpZEFjdGlvbihMKX0KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBzaXplPSJzbSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAke0wuaWNvbk5hbWU/TWA8ZGVlcy1pY29uIC5pY29uPSR7TC5pY29uTmFtZX0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPmA6IiJ9CiAgICAgICAgICAgICAgICAke0wubmFtZX0KICAgICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICBgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOiIifQogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoJHt0aGlzLm1pblRpbGVXaWR0aH1weCwgMWZyKSk7IGdhcDogJHt0aGlzLmdhcH1weDsiPgogICAgICAgICR7dGhpcy50aWxlcy5tYXAoTD0+dGhpcy5yZW5kZXJUaWxlKEwpKX0KICAgICAgPC9kaXY+CgogICAgICAke3RoaXMuY29udGV4dE1lbnVWaXNpYmxlP01gCiAgICAgICAgPGRlZXMtY29udGV4dG1lbnUKICAgICAgICAgIC54PSR7dGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnh9CiAgICAgICAgICAueT0ke3RoaXMuY29udGV4dE1lbnVQb3NpdGlvbi55fQogICAgICAgICAgLm1lbnVJdGVtcz0ke3RoaXMuY29udGV4dE1lbnVBY3Rpb25zfQogICAgICAgICAgQGNsaWNrZWQ9JHsoKT0+dGhpcy5jb250ZXh0TWVudVZpc2libGU9ITF9CiAgICAgICAgPjwvZGVlcy1jb250ZXh0bWVudT4KICAgICAgYDoiIn0KICAgIGB9cmVuZGVyVGlsZShMKXtsZXQgaz1MLmFjdGlvbnMmJkwuYWN0aW9ucy5sZW5ndGg+MCxOPWsmJkwuYWN0aW9ucy5sZW5ndGg9PT0xO3JldHVybiBNYAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJzdGF0cy10aWxlICR7Tj8iY2xpY2thYmxlIjoiIn0iCiAgICAgICAgQGNsaWNrPSR7Tj8oKT0+dGhpcy5oYW5kbGVUaWxlQWN0aW9uKEwuYWN0aW9uc1swXSxMKTp2b2lkIDB9CiAgICAgICAgQGNvbnRleHRtZW51PSR7az9TPT50aGlzLnNob3dDb250ZXh0TWVudShTLEwpOnZvaWQgMH0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtaGVhZGVyIj4KICAgICAgICAgIDxoMyBjbGFzcz0idGlsZS10aXRsZSI+JHtMLnRpdGxlfTwvaDM+CiAgICAgICAgICAke0wuaWNvbj9NYAogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJ0aWxlLWljb24iIC5pY29uPSR7TC5pY29ufSBzaXplPSJzbWFsbCI+PC9kZWVzLWljb24+CiAgICAgICAgICBgOiIifQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29udGVudCI+CiAgICAgICAgICAke3RoaXMucmVuZGVyVGlsZUNvbnRlbnQoTCl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgJHtMLmRlc2NyaXB0aW9uJiZMLnR5cGUhPT0idHJlbmQiP01gCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWRlc2NyaXB0aW9uIj4ke0wuZGVzY3JpcHRpb259PC9kaXY+CiAgICAgICAgYDoiIn0KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlclRpbGVDb250ZW50KEwpe3N3aXRjaChMLnR5cGUpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTWAKICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUtdmFsdWUiIHN0eWxlPSIke0wuY29sb3I/YGNvbG9yOiAke0wuY29sb3J9YDoiIn0iPgogICAgICAgICAgICA8c3Bhbj4ke0wudmFsdWV9PC9zcGFuPgogICAgICAgICAgICAke0wudW5pdD9NYDxzcGFuIGNsYXNzPSJ0aWxlLXVuaXQiPiR7TC51bml0fTwvc3Bhbj5gOiIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDtjYXNlImdhdWdlIjpyZXR1cm4gdGhpcy5yZW5kZXJHYXVnZShMKTtjYXNlInBlcmNlbnRhZ2UiOnJldHVybiB0aGlzLnJlbmRlclBlcmNlbnRhZ2UoTCk7Y2FzZSJ0cmVuZCI6cmV0dXJuIHRoaXMucmVuZGVyVHJlbmQoTCk7Y2FzZSJ0ZXh0IjpyZXR1cm4gTWAKICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtdmFsdWUiIHN0eWxlPSIke0wuY29sb3I/YGNvbG9yOiAke0wuY29sb3J9YDoiIn0iPgogICAgICAgICAgICAke0wudmFsdWV9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgO2RlZmF1bHQ6cmV0dXJuIE1gPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHtMLnZhbHVlfTwvZGl2PmB9fXJlbmRlckdhdWdlKEwpe2xldCBrPXR5cGVvZiBMLnZhbHVlPT0ibnVtYmVyIj9MLnZhbHVlOnBhcnNlRmxvYXQoTC52YWx1ZSksTj1MLmdhdWdlT3B0aW9uc3x8e21pbjowLG1heDoxMDB9LFM9KGstTi5taW4pLyhOLm1heC1OLm1pbikqMTAwLFQ9MTIwLFI9NzAsRj02LzIrMixhZT00MCxWPVQvMixTZT1SLUYsemU9Vi1hZSxXPVNlLE5lPVYrYWUsWD1gTSAke3plfSAke1d9IEEgJHthZX0gJHthZX0gMCAwIDEgJHtOZX0gJHtTZX1gLEk9TWF0aC5QSSphZSxPPUktSSpTLzEwMCxHPUwuY29sb3J8fHAuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyOC44JSkiLCJoc2woMjEwIDQwJSA3OCUpIik7aWYoTi50aHJlc2hvbGRzKXtsZXQgaj1bLi4uTi50aHJlc2hvbGRzXS5zb3J0KChzZSxrZSk9PmtlLnZhbHVlLXNlLnZhbHVlKTtmb3IobGV0IHNlIG9mIGopaWYoaz49c2UudmFsdWUpe0c9c2UuY29sb3I7YnJlYWt9fXJldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJnYXVnZS13cmFwcGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJnYXVnZS1jb250YWluZXIiPgogICAgICAgICAgPHN2ZyBjbGFzcz0iZ2F1Z2Utc3ZnIiB2aWV3Qm94PSIwIDAgJHtUfSAke1J9IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0Ij4KICAgICAgICAgICAgPCEtLSBCYWNrZ3JvdW5kIGFyYyAtLT4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICBjbGFzcz0iZ2F1Z2UtYmFja2dyb3VuZCIKICAgICAgICAgICAgICBkPSIke1h9IgogICAgICAgICAgICAvPgogICAgICAgICAgICA8IS0tIEZpbGxlZCBhcmMgLS0+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgY2xhc3M9ImdhdWdlLWZpbGwiCiAgICAgICAgICAgICAgZD0iJHtYfSIKICAgICAgICAgICAgICBzdHJva2U9IiR7R30iCiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT0iJHtJfSIKICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldD0iJHtPfSIKICAgICAgICAgICAgLz4KICAgICAgICAgICAgPCEtLSBWYWx1ZSB0ZXh0IC0tPgogICAgICAgICAgICA8dGV4dCBjbGFzcz0iZ2F1Z2UtdGV4dCIgeD0iJHtWfSIgeT0iJHtTZS04fSIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSI+CiAgICAgICAgICAgICAgPHRzcGFuPiR7a308L3RzcGFuPiR7TC51bml0P01gPHRzcGFuIGNsYXNzPSJnYXVnZS11bml0IiBkeD0iMiIgZHk9IjAiPiR7TC51bml0fTwvdHNwYW4+YDoiIn0KICAgICAgICAgICAgPC90ZXh0PgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJQZXJjZW50YWdlKEwpe2xldCBrPXR5cGVvZiBMLnZhbHVlPT0ibnVtYmVyIj9MLnZhbHVlOnBhcnNlRmxvYXQoTC52YWx1ZSksTj1NYXRoLm1pbigxMDAsTWF0aC5tYXgoMCxrKSk7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9InBlcmNlbnRhZ2Utd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudGFnZS12YWx1ZSI+JHtOfSU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50YWdlLWJhciI+CiAgICAgICAgICA8ZGl2IAogICAgICAgICAgICBjbGFzcz0icGVyY2VudGFnZS1maWxsIiAKICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke059JTsgJHtMLmNvbG9yP2BiYWNrZ3JvdW5kOiAke0wuY29sb3J9YDoiIn0iCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJUcmVuZChMKXtpZighTC50cmVuZERhdGF8fEwudHJlbmREYXRhLmxlbmd0aDwyKXJldHVybiBNYDxkaXYgY2xhc3M9InRpbGUtdmFsdWUiPiR7TC52YWx1ZX08L2Rpdj5gO2xldCBrPUwudHJlbmREYXRhLE49TWF0aC5tYXgoLi4uayksUz1NYXRoLm1pbiguLi5rKSxUPU4tU3x8MSxSPTMwMCxBPTMyLEY9MixhZT1rLm1hcCgoU2UsemUpPT57bGV0IFc9emUvKGsubGVuZ3RoLTEpKlIsTmU9RisoQS0yKkYpLShTZS1TKS9UKihBLTIqRik7cmV0dXJuYCR7V30sJHtOZX1gfSkuam9pbigiICIpLFY9YDAsJHtBfSAke2FlfSAke1J9LCR7QX1gO3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJ0cmVuZC1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InRyZW5kLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idHJlbmQtdmFsdWUiPiR7TC52YWx1ZX08L3NwYW4+CiAgICAgICAgICAke0wudW5pdD9NYDxzcGFuIGNsYXNzPSJ0cmVuZC11bml0Ij4ke0wudW5pdH08L3NwYW4+YDoiIn0KICAgICAgICAgICR7TC5kZXNjcmlwdGlvbj9NYDxzcGFuIGNsYXNzPSJ0cmVuZC1sYWJlbCI+JHtMLmRlc2NyaXB0aW9ufTwvc3Bhbj5gOiIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRyZW5kLWdyYXBoIj4KICAgICAgICAgIDxzdmcgY2xhc3M9InRyZW5kLXN2ZyIgdmlld0JveD0iMCAwICR7Un0gJHtBfSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJ0cmVuZC1hcmVhIiBwb2ludHM9IiR7Vn0iIC8+CiAgICAgICAgICAgIDxwb2x5bGluZSBjbGFzcz0idHJlbmQtbGluZSIgcG9pbnRzPSIke2FlfSIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgaGFuZGxlR3JpZEFjdGlvbihMKXtMLmFjdGlvbiYmYXdhaXQgTC5hY3Rpb24oKX1hc3luYyBoYW5kbGVUaWxlQWN0aW9uKEwsayl7TC5hY3Rpb24mJmF3YWl0IEwuYWN0aW9uKCl9c2hvd0NvbnRleHRNZW51KEwsayl7aWYoIWsuYWN0aW9uc3x8ay5hY3Rpb25zLmxlbmd0aD09PTApcmV0dXJuO0wucHJldmVudERlZmF1bHQoKSx0aGlzLmNvbnRleHRNZW51UG9zaXRpb249e3g6TC5jbGllbnRYLHk6TC5jbGllbnRZfSx0aGlzLmNvbnRleHRNZW51QWN0aW9ucz1rLmFjdGlvbnMsdGhpcy5jb250ZXh0TWVudVZpc2libGU9ITA7bGV0IE49KCk9Pnt0aGlzLmNvbnRleHRNZW51VmlzaWJsZT0hMSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsTil9O3NldFRpbWVvdXQoKCk9Pntkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsTil9LDEwMCl9c3RhdGlje2oyKHIsYSl9fTtyZXR1cm4gSD1yfSkoKTtmZSgpO3ZhciBYRWU9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxRRWU9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LHVuMT0oKCk9PntsZXQgdD1bY2UoImRlbW8tdmlldy1kYXNoYm9hcmQiKV0sZSxhPVtdLHIsaT1wZTt2YXIgbz1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IHM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7WEVlKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOnN9LG51bGwsYSksbz1yPWUudmFsdWUscyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSl9c3RhdGljIHN0eWxlcz1bcC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgfQogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzAwMCIsIiNmZmYiKX07CiAgICAgIH0KICAgICAgZGVlcy1zdGF0c2dyaWQgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgIH0KICAgIGBdO3N0YXRzVGlsZXM9W3tpZDoidXNlcnMiLHRpdGxlOiJBY3RpdmUgVXNlcnMiLHZhbHVlOjEyMzQsdHlwZToibnVtYmVyIixpY29uOiJmYVVzZXJzIixkZXNjcmlwdGlvbjoiKzE1JSBmcm9tIGxhc3Qgd2VlayIsY29sb3I6IiMyMmM1NWUifSx7aWQ6InBhZ2V2aWV3cyIsdGl0bGU6IlBhZ2UgVmlld3MiLHZhbHVlOjU2NzAwLHR5cGU6Im51bWJlciIsaWNvbjoiZmFFeWUiLGRlc2NyaXB0aW9uOiI1Ni43ayB0b3RhbCB2aWV3cyIsY29sb3I6IiMzYjgyZjYifSx7aWQ6InVwdGltZSIsdGl0bGU6IlN5c3RlbSBVcHRpbWUiLHZhbHVlOjg5LHVuaXQ6IiUiLHR5cGU6ImdhdWdlIixpY29uOiJmYVNlcnZlciIsZGVzY3JpcHRpb246Ikxhc3QgMzAgZGF5cyIsY29sb3I6IiMxMGI5ODEiLGdhdWdlT3B0aW9uczp7bWluOjAsbWF4OjEwMCx0aHJlc2hvbGRzOlt7dmFsdWU6ODAsY29sb3I6IiNlZjQ0NDQifSx7dmFsdWU6OTAsY29sb3I6IiNmNTllMGIifSx7dmFsdWU6MTAwLGNvbG9yOiIjMTBiOTgxIn1dfX0se2lkOiJyZXNwb25zZSIsdGl0bGU6IkF2ZyBSZXNwb25zZSBUaW1lIix2YWx1ZTozLjIsdW5pdDoicyIsdHlwZToibnVtYmVyIixpY29uOiJmYUNsb2NrIixkZXNjcmlwdGlvbjoiLTAuNXMgaW1wcm92ZW1lbnQiLGNvbG9yOiIjZjU5ZTBiIn0se2lkOiJyZXZlbnVlIix0aXRsZToiTW9udGhseSBSZXZlbnVlIix2YWx1ZTo0ODUyMCx1bml0OiIkIix0eXBlOiJ0cmVuZCIsaWNvbjoiZmFEb2xsYXJTaWduIixkZXNjcmlwdGlvbjoiKzguMiUgZ3Jvd3RoIixjb2xvcjoiIzIyYzU1ZSIsdHJlbmREYXRhOlszNWUzLDM4ZTMsMzc1MDAsNDFlMywzOTgwMCw0MmUzLDQ0MTAwLDQzMjAwLDQ1NjAwLDQ3MTAwLDQ2ODAwLDQ4NTIwXX0se2lkOiJ0cmFmZmljIix0aXRsZToiVHJhZmZpYyBUcmVuZCIsdmFsdWU6MTY4MCx0eXBlOiJ0cmVuZCIsaWNvbjoiZmFDaGFydExpbmUiLGRlc2NyaXB0aW9uOiJMYXN0IDcgZGF5cyIsY29sb3I6IiMzYjgyZjYiLHRyZW5kRGF0YTpbMTIwMCwxMzUwLDExMDAsMTQ1MCwxNjAwLDE1NTAsMTY4MF19XTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGgxPkRhc2hib2FyZDwvaDE+CiAgICAgIDxwPldlbGNvbWUgdG8geW91ciBhcHBsaWNhdGlvbiBkYXNoYm9hcmQuIEhlcmUncyBhbiBvdmVydmlldyBvZiB5b3VyIG1ldHJpY3M6PC9wPgogICAgICA8ZGVlcy1zdGF0c2dyaWQKICAgICAgICAudGlsZXM9JHt0aGlzLnN0YXRzVGlsZXN9CiAgICAgICAgQHRpbGUtYWN0aW9uPSR7cz0+e2NvbnNvbGUubG9nKCJUaWxlIGFjdGlvbjoiLHMuZGV0YWlsKX19CiAgICAgID48L2RlZXMtc3RhdHNncmlkPgogICAgYH1zdGF0aWN7UUVlKHIsYSl9fTtyZXR1cm4gbz1yfSkoKSxwbjE9KCgpPT57bGV0IHQ9W2NlKCJkZW1vLXZpZXctYW5hbHl0aWNzIildLGUsYT1bXSxyLGk9cGU7dmFyIG89Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBzPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO1hFZShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpzfSxudWxsLGEpLG89cj1lLnZhbHVlLHMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6c30pfXN0YXRpYyBzdHlsZXM9W3AuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIH0KICAgICAgaDEgewogICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwMDAiLCIjZmZmIil9OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGgxPkFuYWx5dGljczwvaDE+CiAgICAgIDxwPlRoaXMgaXMgdGhlIGFuYWx5dGljcyB2aWV3LiBZb3UgY2FuIGFkZCBjaGFydHMgYW5kIG1ldHJpY3MgaGVyZS48L3A+CiAgICBgfXN0YXRpY3tRRWUocixhKX19O3JldHVybiBvPXJ9KSgpLGhuMT0oKCk9PntsZXQgdD1bY2UoImRlbW8tdmlldy1zZXR0aW5ncyIpXSxlLGE9W10scixpPXBlO3ZhciBvPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgcz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtYRWUobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6c30sbnVsbCxhKSxvPXI9ZS52YWx1ZSxzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnN9KX1zdGF0aWMgc3R5bGVzPVtwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICB9CiAgICAgIGgxIHsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDAwIiwiI2ZmZiIpfTsKICAgICAgfQogICAgICAuc2V0dGluZ3Mtc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMzBweDsKICAgICAgfQogICAgICAuc2V0dGluZ3Mtc2VjdGlvbiBoMiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIG1hcmdpbjogMCAwIDE1cHggMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzMzMiLCIjY2NjIil9OwogICAgICB9CiAgICAgIC5ob3Jpem9udGFsLWZvcm0tc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmNWY1ZjUiLCIjMWExYTFhIil9OwogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG1hcmdpbjogMTVweCAwOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGgxPlNldHRpbmdzPC9oMT4KICAgICAgPHA+Q29uZmlndXJlIHlvdXIgYXBwbGljYXRpb24gc2V0dGluZ3MgYmVsb3c6PC9wPgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGgyPkdlbmVyYWwgU2V0dGluZ3M8L2gyPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0iYXBwTmFtZSIgbGFiZWw9IkFwcGxpY2F0aW9uIE5hbWUiIHZhbHVlPSJNeSBBcHAiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9ImFwaUVuZHBvaW50IiBsYWJlbD0iQVBJIEVuZHBvaW50IiB2YWx1ZT0iaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20iPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAga2V5PSJlbnZpcm9ubWVudCIKICAgICAgICAgICAgbGFiZWw9IkVudmlyb25tZW50IgogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJEZXZlbG9wbWVudCIsa2V5OiJkZXYifSx7b3B0aW9uOiJTdGFnaW5nIixrZXk6InN0YWdpbmcifSx7b3B0aW9uOiJQcm9kdWN0aW9uIixrZXk6InByb2QifV19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3tvcHRpb246IlByb2R1Y3Rpb24iLGtleToicHJvZCJ9fQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0iZW5hYmxlTm90aWZpY2F0aW9ucyIgbGFiZWw9IkVuYWJsZSBOb3RpZmljYXRpb25zIiB2YWx1ZT0idHJ1ZSI+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gga2V5PSJlbmFibGVBbmFseXRpY3MiIGxhYmVsPSJFbmFibGUgQW5hbHl0aWNzIiB2YWx1ZT0iZmFsc2UiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PlNhdmUgR2VuZXJhbCBTZXR0aW5nczwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1zZWN0aW9uIj4KICAgICAgICA8aDI+RGlzcGxheSBQcmVmZXJlbmNlczwvaDI+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1mb3JtLXNlY3Rpb24iPgogICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6IDA7IG1hcmdpbi1ib3R0b206IDE2cHg7Ij5RdWljayBkaXNwbGF5IHNldHRpbmdzIHVzaW5nIGhvcml6b250YWwgbGF5b3V0OjwvcD4KICAgICAgICAgIDxkZWVzLWZvcm0gaG9yaXpvbnRhbC1sYXlvdXQ+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgICAga2V5PSJ0aGVtZSIKICAgICAgICAgICAgICBsYWJlbD0iVGhlbWUiCiAgICAgICAgICAgICAgLmVuYWJsZVNlYXJjaD0keyExfQogICAgICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IkxpZ2h0IixrZXk6ImxpZ2h0In0se29wdGlvbjoiRGFyayIsa2V5OiJkYXJrIn0se29wdGlvbjoiQXV0byIsa2V5OiJhdXRvIn1dfQogICAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3tvcHRpb246IkRhcmsiLGtleToiZGFyayJ9fQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAgIGtleT0ibGFuZ3VhZ2UiCiAgICAgICAgICAgICAgbGFiZWw9Ikxhbmd1YWdlIgogICAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHshMX0KICAgICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJFbmdsaXNoIixrZXk6ImVuIn0se29wdGlvbjoiR2VybWFuIixrZXk6ImRlIn0se29wdGlvbjoiU3BhbmlzaCIsa2V5OiJlcyJ9LHtvcHRpb246IkZyZW5jaCIsa2V5OiJmciJ9XX0KICAgICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHt7b3B0aW9uOiJFbmdsaXNoIixrZXk6ImVuIn19CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0iY29tcGFjdE1vZGUiIGxhYmVsPSJDb21wYWN0IE1vZGUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5Ob3RpZmljYXRpb24gU2V0dGluZ3M8L2gyPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBGcmVxdWVuY3kifQogICAgICAgICAgICAub3B0aW9ucz0ke1siUmVhbC10aW1lIiwiRGFpbHkgRGlnZXN0IiwiV2Vla2x5IFN1bW1hcnkiLCJOZXZlciJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiUmVhbC10aW1lIn0KICAgICAgICAgICAgLmtleT0keyJlbWFpbEZyZXF1ZW5jeSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9InB1c2hOb3RpZmljYXRpb25zIiBsYWJlbD0iRW5hYmxlIFB1c2ggTm90aWZpY2F0aW9ucyIgdmFsdWU9InRydWUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0ic291bmRBbGVydHMiIGxhYmVsPSJQbGF5IFNvdW5kIGZvciBBbGVydHMiIHZhbHVlPSJ0cnVlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5VcGRhdGUgTm90aWZpY2F0aW9uczwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kaXY+CiAgICBgfXN0YXRpY3tRRWUocixhKX19O3JldHVybiBvPXJ9KSgpLERPdD0oKT0+TWAKICA8c3R5bGU+CiAgICBib2R5IHsKICAgICAgbWFyZ2luOiAwOwogICAgICBwYWRkaW5nOiAwOwogICAgfQogICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1zaW1wbGUtYXBwZGFzaAogICAgICBuYW1lPSJNeSBBcHBsaWNhdGlvbiIKICAgICAgdGVybWluYWxTZXR1cENvbW1hbmQ9ImVjaG8gJ1dlbGNvbWUgdG8gdGhlIHRlcm1pbmFsISciCiAgICAgIC52aWV3VGFicz0ke1t7bmFtZToiRGFzaGJvYXJkIixpY29uTmFtZToibHVjaWRlOmhvbWUiLGVsZW1lbnQ6dW4xfSx7bmFtZToiQW5hbHl0aWNzIixpY29uTmFtZToibHVjaWRlOmxpbmVDaGFydCIsZWxlbWVudDpwbjF9LHtuYW1lOiJTZXR0aW5ncyIsaWNvbk5hbWU6Imx1Y2lkZTpzZXR0aW5ncyIsZWxlbWVudDpobjF9XX0KICAgICAgQGxvZ291dD0keygpPT57Y29uc29sZS5sb2coIkxvZ291dCBldmVudCB0cmlnZ2VyZWQiKSxhbGVydCgiTG9nb3V0IGNsaWNrZWQhIil9fQogICAgICBAdmlldy1zZWxlY3Q9JHt0PT57Y29uc29sZS5sb2coIlZpZXcgc2VsZWN0ZWQ6Iix0LmRldGFpbC52aWV3Lm5hbWUpfX0KICAgID48L2RlZXMtc2ltcGxlLWFwcGRhc2g+CiAgPC9kaXY+CmA7ZmUoKTtGdCgpO0JlKCk7dmFyIEhJPWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sYW89ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LG1uMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtc2ltcGxlLWFwcGRhc2giKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXTt2YXIgdj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IHk9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCgpXSxmPVtEKHt0eXBlOkFycmF5fSldLGQ9W0Qoe3R5cGU6U3RyaW5nfSldLGI9W2xlKCldLEhJKHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibmFtZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+Im5hbWUiaW4gdyxnZXQ6dz0+dy5uYW1lLHNldDoodyxFKT0+e3cubmFtZT1FfX0sbWV0YWRhdGE6eX0scyxsKSxISSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZpZXdUYWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4idmlld1RhYnMiaW4gdyxnZXQ6dz0+dy52aWV3VGFicyxzZXQ6KHcsRSk9Pnt3LnZpZXdUYWJzPUV9fSxtZXRhZGF0YTp5fSxjLHUpLEhJKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGVybWluYWxTZXR1cENvbW1hbmQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnc9PiJ0ZXJtaW5hbFNldHVwQ29tbWFuZCJpbiB3LGdldDp3PT53LnRlcm1pbmFsU2V0dXBDb21tYW5kLHNldDoodyxFKT0+e3cudGVybWluYWxTZXR1cENvbW1hbmQ9RX19LG1ldGFkYXRhOnl9LGgsZyksSEkodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZFZpZXciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnc9PiJzZWxlY3RlZFZpZXciaW4gdyxnZXQ6dz0+dy5zZWxlY3RlZFZpZXcsc2V0Oih3LEUpPT57dy5zZWxlY3RlZFZpZXc9RX19LG1ldGFkYXRhOnl9LHgsbSksSEkobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6eX0sbnVsbCxhKSx2PXI9ZS52YWx1ZSx5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnl9KX1zdGF0aWMgZGVtbz1ET3Q7c3RhdGljIGRlbW9Hcm91cD0iU2ltcGxlIjsjZT1hbyh0aGlzLHMsIkFwcGxpY2F0aW9uIERhc2hib2FyZCIpO2dldCBuYW1lKCl7cmV0dXJuIHRoaXMuI2V9c2V0IG5hbWUoeSl7dGhpcy4jZT15fSN0PShhbyh0aGlzLGwpLGFvKHRoaXMsYyxbXSkpO2dldCB2aWV3VGFicygpe3JldHVybiB0aGlzLiN0fXNldCB2aWV3VGFicyh5KXt0aGlzLiN0PXl9I2E9KGFvKHRoaXMsdSksYW8odGhpcyxoLCdlY2hvICJUZXJtaW5hbCByZWFkeSInKSk7Z2V0IHRlcm1pbmFsU2V0dXBDb21tYW5kKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHRlcm1pbmFsU2V0dXBDb21tYW5kKHkpe3RoaXMuI2E9eX0jcj0oYW8odGhpcyxnKSxhbyh0aGlzLHgsdm9pZCAwKSk7Z2V0IHNlbGVjdGVkVmlldygpe3JldHVybiB0aGlzLiNyfXNldCBzZWxlY3RlZFZpZXcoeSl7dGhpcy4jcj15fXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIGJvdHRvbTogMHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5hcHBiYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyNHB4KTsKICAgICAgICB3aWR0aDogMjQwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDk5JSkiLCJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtwLmJkVGhlbWUoImhzbCgwIDAlIDkxJSkiLCJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMWZyIG1pbi1jb250ZW50OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMjBweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsImhzbCgwIDAlIDEzJSkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmhlYWRlci1pY29uLXdyYXBwZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzZweDsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgibGluZWFyLWdyYWRpZW50KDEzNWRlZywgaHNsKDIxNSAyMCUgOTUlKSAwJSwgaHNsKDIxNSAyMCUgOTAlKSAxMDAlKSIsImxpbmVhci1ncmFkaWVudCgxMzVkZWcsIGhzbCgyMTUgMjAlIDE4JSkgMCUsIGhzbCgyMTUgMjAlIDE0JSkgMTAwJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtwLmJkVGhlbWUoIjAgMXB4IDJweCByZ2IoMCAwIDAgLyAwLjA1KSwgaW5zZXQgMCAxcHggMCByZ2IoMjU1IDI1NSAyNTUgLyAwLjUpIiwiMCAxcHggMnB4IHJnYigwIDAgMCAvIDAuMiksIGluc2V0IDAgMXB4IDAgcmdiKDI1NSAyNTUgMjU1IC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDIxNSAyMCUgNDAlKSIsImhzbCgyMTUgMjAlIDcwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hcHBOYW1lIHsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOwogICAgICB9CgogICAgICAudmlld1RhYnMtY29udGFpbmVyIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEycHggOHB4OwogICAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKICAgICAgICBzY3JvbGxiYXItY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMjAlKSIpfSB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNzUlKSIsImhzbCgwIDAlIDMwJSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWN0aW9uLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAudmlld1RhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnZpZXdUYWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCJoc2woMCAwJSA2NSUpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIH0KCiAgICAgIC52aWV3VGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA0KSIsImhzbCgwIDAlIDEwMCUgLyAwLjA1KSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudmlld1RhYjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAwJSAvIDAuMDYpIiwiaHNsKDAgMCUgMTAwJSAvIDAuMDcpIil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OSk7CiAgICAgIH0KCiAgICAgIC52aWV3VGFiLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDIxNSAyNSUgOTUlKSIsImhzbCgyMTUgMjAlIDE1JSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMjE1IDI1JSAzMCUpIiwiaHNsKDIxNSAyNSUgODUlKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICB3aWR0aDogM3B4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMjE1IDcwJSA1MCUpIiwiaHNsKDIxNSA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnZpZXdUYWIgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC41NTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnZpZXdUYWI6aG92ZXIgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAwLjc1OwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZCBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDAuOTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgyMTUgNzAlIDQ1JSkiLCJoc2woMjE1IDcwJSA2NSUpIil9OwogICAgICB9CgogICAgICAudmlld1RhYiBzcGFuIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmFwcEFjdGlvbnMgewogICAgICAgIHBhZGRpbmc6IDEycHggOHB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsImhzbCgwIDAlIDEzJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwiaHNsKDAgMCUgNjUlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDg0JSA2MCUgLyAwLjA4KSIsImhzbCgwIDg0JSA2MCUgLyAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoImhzbCgwIDg0JSA0NSUpIiwiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWN0aW9uOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC45OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgODQlIDQ1JSkiLCJoc2woMCA4NCUgNjUlKSIpfTsKICAgICAgfQoKICAgICAgLmFwcGNvbnRlbnQgewogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIHJpZ2h0OiAwcHg7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyNHB4KTsKICAgICAgICBib3R0b206IDI0cHg7CiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDI0MHB4KTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsImhzbCgwIDAlIDUlKSIpfTsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICB9CgogICAgICAuY29udHJvbGJhciB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgyMjAgMTMlIDE4JSkiLCJoc2woMjIwIDEzJSAxMiUpIil9OwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgICB9CgogICAgICAuY29udHJvbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDcwJSk7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBoc2woMCAwJSAxMDAlIC8gMC4wOCk7CiAgICAgIH0KCiAgICAgIC5jb250cm9sOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2w6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgwIDAlIDEwMCUgLyAwLjA2KTsKICAgICAgICBjb2xvcjogaHNsKDAgMCUgOTUlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLnN0YXR1cy1jb25uZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogaHNsKDE0MiA3MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wuc3RhdHVzLXRlcm1pbmFsIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6IGhzbCg0NSA5MCUgNTUlKTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImFwcGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1pY29uLXdyYXBwZXIiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7Imx1Y2lkZTpsYXlvdXRHcmlkIn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXBwTmFtZSI+JHt0aGlzLm5hbWV9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXdUYWJzLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tbGFiZWwiPk5hdmlnYXRpb248L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmlld1RhYnMiPgogICAgICAgICAgICAgICR7dGhpcy52aWV3VGFicy5tYXAoeT0+TWAKICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ2aWV3VGFiICR7dGhpcy5zZWxlY3RlZFZpZXc9PT15PyJzZWxlY3RlZCI6IiJ9IgogICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLmxvYWRWaWV3KHkpfQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgJHt5Lmljb25OYW1lP01gCiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIke3kuaWNvbk5hbWUuaW5jbHVkZXMoIjoiKT95Lmljb25OYW1lOmBsdWNpZGU6JHt5Lmljb25OYW1lfWB9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgOk1gCiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6ZmlsZSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgIDxzcGFuPiR7eS5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcEFjdGlvbnMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iIEBjbGljaz0keygpPT57dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibG9nb3V0Iix7YnViYmxlczohMCxjb21wb3NlZDohMH0pKX19PgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7Imx1Y2lkZTpsb2dPdXQifSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPHNwYW4+U2lnbiBvdXQ8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYXBwY29udGVudCI+CiAgICAgICAgICA8IS0tIENvbnRlbnQgZ29lcyBoZXJlIC0tPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbCBzdGF0dXMtY29ubmVjdGVkIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOndpZmkifSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxzcGFuPkNvbm5lY3RlZDwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbCBzdGF0dXMtdGVybWluYWwiIEBjbGljaz0ke3RoaXMubGF1bmNoVGVybWluYWx9PgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6dGVybWluYWwifSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxzcGFuPlRlcm1pbmFsPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoeSl7bGV0IHc9YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7c3VwZXIuZmlyc3RVcGRhdGVkKHkpLHRoaXMudmlld1RhYnMmJnRoaXMudmlld1RhYnMubGVuZ3RoPjAmJmF3YWl0IHRoaXMubG9hZFZpZXcodGhpcy52aWV3VGFic1swXSl9Y3VycmVudFRlcm1pbmFsPWFvKHRoaXMsbSk7YXN5bmMgbGF1bmNoVGVybWluYWwoKXtsZXQgeT1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTtpZih0aGlzLmN1cnJlbnRUZXJtaW5hbCl7YXdhaXQgdGhpcy5jbG9zZVRlcm1pbmFsKCk7cmV0dXJufWxldCB3PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpLHtEZWVzV29ya3NwYWNlVGVybWluYWw6RX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFNJKCksdU90KSksQz1uZXcgRTtyZXR1cm4gQy5zZXR1cENvbW1hbmQ9dGhpcy50ZXJtaW5hbFNldHVwQ29tbWFuZCx0aGlzLmN1cnJlbnRUZXJtaW5hbD1DLHcuYXBwZW5kQ2hpbGQoQyksQy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLEMuc3R5bGUuekluZGV4PSIxMCIsQy5zdHlsZS50b3A9IjBweCIsQy5zdHlsZS5sZWZ0PSIyNDBweCIsQy5zdHlsZS5yaWdodD0iMHB4IixDLnN0eWxlLmJvdHRvbT0iMjRweCIsQy5zdHlsZS5vcGFjaXR5PSIwIixDLnN0eWxlLnRyYW5zZm9ybT0idHJhbnNsYXRlWSg4cHgpIHNjYWxlKDAuOTkpIixDLnN0eWxlLnRyYW5zaXRpb249ImFsbCAwLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIixDLnN0eWxlLmJveFNoYWRvdz0iMCAyNXB4IDUwcHggLTEycHggcmdiKDAgMCAwIC8gMC41KSwgMCAwIDAgMXB4IHJnYigyNTUgMjU1IDI1NSAvIDAuMDUpIixDLnN0eWxlLm1heFdpZHRoPWBjYWxjKCR7dy5jbGllbnRXaWR0aH1weCAtMjQwcHgpYCxDLnN0eWxlLm1heEhlaWdodD1gY2FsYygke3cuY2xpZW50SGVpZ2h0fXB4IC0gMjRweClgLEMuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCgpPT50aGlzLmNsb3NlVGVybWluYWwoKSksYXdhaXQgeS5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApLEMuc3R5bGUub3BhY2l0eT0iMSIsQy5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZVkoMCkgc2NhbGUoMSkiLEN9YXN5bmMgY2xvc2VUZXJtaW5hbCgpe2xldCB5PWF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlO3RoaXMuY3VycmVudFRlcm1pbmFsJiYodGhpcy5jdXJyZW50VGVybWluYWwuc3R5bGUub3BhY2l0eT0iMCIsdGhpcy5jdXJyZW50VGVybWluYWwuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OSkiLGF3YWl0IHkuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigyNTApLHRoaXMuY3VycmVudFRlcm1pbmFsLnJlbW92ZSgpLHRoaXMuY3VycmVudFRlcm1pbmFsPW51bGwpfWN1cnJlbnRWaWV3O2FzeW5jIGxvYWRWaWV3KHkpe2xldCB3PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYXBwY29udGVudCIpLEU9bmV3IHkuZWxlbWVudDt0aGlzLmN1cnJlbnRWaWV3JiZ0aGlzLmN1cnJlbnRWaWV3LnJlbW92ZSgpLHcuYXBwZW5kQ2hpbGQoRSksdGhpcy5jdXJyZW50Vmlldz1FLHRoaXMuc2VsZWN0ZWRWaWV3PXksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidmlldy1zZWxlY3QiLHtkZXRhaWw6e3ZpZXc6eX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1zdGF0aWN7YW8ocixhKX19O3JldHVybiB2PXJ9KSgpO2ZlKCk7dmFyIEVPdD0oKT0+TWAKICA8c3R5bGU+CiAgICBib2R5IHsKICAgICAgbWFyZ2luOiAwOwogICAgICBwYWRkaW5nOiAwOwogICAgfQogICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1zaW1wbGUtbG9naW4gCiAgICAgIG5hbWU9Ik15IEFwcGxpY2F0aW9uIgogICAgICBAbG9naW49JHt0PT57Y29uc29sZS5sb2coIkxvZ2luIGV2ZW50IHJlY2VpdmVkOiIsdC5kZXRhaWwpO2xldCBlPXQuZGV0YWlsPy5kYXRhfHx0LmRldGFpbDtlPy51c2VybmFtZSYmZT8ucGFzc3dvcmQ/YWxlcnQoYExvZ2luIGF0dGVtcHRlZCB3aXRoOgpVc2VybmFtZTogJHtlLnVzZXJuYW1lfQpQYXNzd29yZDogJHtlLnBhc3N3b3JkfWApOmNvbnNvbGUuZXJyb3IoIkludmFsaWQgbG9naW4gZGF0YSBzdHJ1Y3R1cmU6Iix0LmRldGFpbCl9fQogICAgPgogICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiA0MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICA8aDE+V2VsY29tZSE8L2gxPgogICAgICAgIDxwPlRoaXMgaXMgdGhlIHNsb3R0ZWQgY29udGVudCB0aGF0IGFwcGVhcnMgYWZ0ZXIgbG9naW4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1zaW1wbGUtbG9naW4+CiAgPC9kaXY+CmA7ZmUoKTtCZSgpO3ZhciBOT3Q9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxLRWU9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0wO2k8ZS5sZW5ndGg7aSsrKWE9cj9lW2ldLmNhbGwodCxhKTplW2ldLmNhbGwodCk7cmV0dXJuIHI/YTp2b2lkIDB9LGduMT0oKCk9PntsZXQgdD1bY2UoImRlZXMtc2ltcGxlLWxvZ2luIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W107dmFyIGY9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0QoKV0sTk90KHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibmFtZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dT0+Im5hbWUiaW4gdSxnZXQ6dT0+dS5uYW1lLHNldDoodSxkKT0+e3UubmFtZT1kfX0sbWV0YWRhdGE6Y30scyxsKSxOT3QobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6Y30sbnVsbCxhKSxmPXI9ZS52YWx1ZSxjJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmN9KX1zdGF0aWMgZGVtbz1FT3Q7c3RhdGljIGRlbW9Hcm91cD0iU2ltcGxlIjsjZT1LRWUodGhpcyxzLCJBcHBsaWNhdGlvbiIpO2dldCBuYW1lKCl7cmV0dXJuIHRoaXMuI2V9c2V0IG5hbWUoYyl7dGhpcy4jZT1jfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubG9naW5Db250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDMuOSUpIil9OwogICAgICB9CgogICAgICAuc2xvdENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubG9naW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzYwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQoKICAgICAgLmxvZ2luLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnN1YmhlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICB9CgogICAgICAubG9naW4tY2FyZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5sb2dpbi1jYXJkIGRlZXMtZm9ybSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1pbnB1dC10ZXh0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1mb3JtLXN1Ym1pdCB7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0ibG9naW5Db250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImxvZ2luIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ2luLWhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+U2lnbiBpbjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWJoZWFkZXIiPkVudGVyIHlvdXIgY3JlZGVudGlhbHMgdG8gYWNjZXNzICR7dGhpcy5uYW1lfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbi1jYXJkIj4KICAgICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0idXNlcm5hbWUiIGxhYmVsPSJVc2VybmFtZSIgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9InBhc3N3b3JkIiBsYWJlbD0iUGFzc3dvcmQiIGlzUGFzc3dvcmRCb29sIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PlNpZ24gaW48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzbG90Q29udGFpbmVyIj4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoYyl7c3VwZXIuZmlyc3RVcGRhdGVkKGMpO2xldCB1PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTt1JiZ1LmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIixkPT57dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibG9naW4iLHtkZXRhaWw6ZC5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX0pfWFzeW5jIHN3aXRjaFRvU2xvdHRlZENvbnRlbnQoKXtsZXQgYz1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZSx1PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubG9naW4iKSxkPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubG9naW5Db250YWluZXIiKSxoPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2xvdENvbnRhaW5lciIpO3Uuc3R5bGUub3BhY2l0eT0iMCIsdS5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZVkoMjBweCkiLGQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsaC5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZVkoMjBweCkiLGF3YWl0IGMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzMDApLGguc3R5bGUub3BhY2l0eT0iMSIsaC5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZVkoMHB4KSIsYXdhaXQgYy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDMwMCksaC5zdHlsZS5wb2ludGVyRXZlbnRzPSJhbGwifWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxLRWUodGhpcyxsKX1zdGF0aWN7S0VlKHIsYSl9fTtyZXR1cm4gZj1yfSkoKTtnaigpO2ZlKCk7dmFyIFBPdD0oKT0+TWAKICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDsgYWxpZ24taXRlbXM6IGNlbnRlcjsiPgogICAgPGRlZXMtYmFkZ2UgLnRleHQ9JHsiRGVmYXVsdCJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7InByaW1hcnkifSAudGV4dD0keyJQcmltYXJ5In0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsic3VjY2VzcyJ9IC50ZXh0PSR7IlN1Y2Nlc3MifT48L2RlZXMtYmFkZ2U+CiAgICA8ZGVlcy1iYWRnZSAudHlwZT0keyJ3YXJuaW5nIn0gLnRleHQ9JHsiV2FybmluZyJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7ImVycm9yIn0gLnRleHQ9JHsiRXJyb3IifT48L2RlZXMtYmFkZ2U+CiAgICA8ZGVlcy1iYWRnZSAudHlwZT0keyJwcmltYXJ5In0gLnJvdW5kZWQ9JHshMH0gLnRleHQ9JHsiUm91bmRlZCJ9PjwvZGVlcy1iYWRnZT4KICA8L2Rpdj4KYDtmZSgpO1N0KCk7QmUoKTt2YXIgVGo9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxkYz1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0seG4xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1iYWRnZSIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdO3ZhciBiPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgeD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOlN0cmluZ30pXSxmPVtEKHt0eXBlOlN0cmluZ30pXSxkPVtEKHt0eXBlOkJvb2xlYW59KV0sVGoodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0eXBlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4idHlwZSJpbiBtLGdldDptPT5tLnR5cGUsc2V0OihtLHYpPT57bS50eXBlPXZ9fSxtZXRhZGF0YTp4fSxzLGwpLFRqKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGV4dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+InRleHQiaW4gbSxnZXQ6bT0+bS50ZXh0LHNldDoobSx2KT0+e20udGV4dD12fX0sbWV0YWRhdGE6eH0sYyx1KSxUaih0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJvdW5kZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJyb3VuZGVkImluIG0sZ2V0Om09Pm0ucm91bmRlZCxzZXQ6KG0sdik9PnttLnJvdW5kZWQ9dn19LG1ldGFkYXRhOnh9LGgsZyksVGoobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6eH0sbnVsbCxhKSxiPXI9ZS52YWx1ZSx4JiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnh9KX1zdGF0aWMgZGVtbz1QT3Q7I2U9ZGModGhpcyxzLCJkZWZhdWx0Iik7Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdHlwZSh4KXt0aGlzLiNlPXh9I3Q9KGRjKHRoaXMsbCksZGModGhpcyxjLCIiKSk7Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy4jdH1zZXQgdGV4dCh4KXt0aGlzLiN0PXh9I2E9KGRjKHRoaXMsdSksZGModGhpcyxoLCExKSk7Z2V0IHJvdW5kZWQoKXtyZXR1cm4gdGhpcy4jYX1zZXQgcm91bmRlZCh4KXt0aGlzLiNhPXh9Y29uc3RydWN0b3IoKXtzdXBlcigpLGRjKHRoaXMsZyksYzEuc2V0dXAoKX1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5iYWRnZS5yb3VuZGVkIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICB9CgogICAgICAuYmFkZ2UuZGVmYXVsdCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmNWY1ZjUiLCIjMzMzIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzY2NiIsIiNjY2MiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDA1MGI5OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogIzJlN2QzMjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICNlZDZjMDI7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogI2U0MDAyYjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9ImJhZGdlICR7dGhpcy50eXBlfSAke3RoaXMucm91bmRlZD8icm91bmRlZCI6IiJ9Ij4KICAgICAgICAke3RoaXMudGV4dH0KICAgICAgPC9kaXY+CiAgICBgfXN0YXRpY3tkYyhyLGEpfX07cmV0dXJuIGI9cn0pKCk7ZmUoKTt2YXIgSU90PSgpPT5NYAogIDxzdHlsZT4KICAgIC5kZW1vQ29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAzMnB4OwogICAgICBwYWRkaW5nOiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y4ZjlmYSIsIiMwYTBhMGEiKX07CiAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgfQogICAgCiAgICAuc2VjdGlvbiB7CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzE4MTgxYiIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgfQogICAgCiAgICAuc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9Db250YWluZXIiPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk5vbi1TZWxlY3RhYmxlIENoaXBzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkJhc2ljIGNoaXBzIHdpdGhvdXQgc2VsZWN0aW9uIGNhcGFiaWxpdHkuIFVzZSBmb3IgZGlzcGxheS1vbmx5IHRhZ3MuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ibm9uZSIKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7W3trZXk6InN0YXR1cyIsdmFsdWU6IkFjdGl2ZSJ9LHtrZXk6InRpZXIiLHZhbHVlOiJQcmVtaXVtIn0se2tleToicmVnaW9uIix2YWx1ZToiRVUtV2VzdCJ9LHtrZXk6InR5cGUiLHZhbHVlOiJFbnRlcnByaXNlIn1dfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TaW5nbGUgU2VsZWN0aW9uIENoaXBzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkNsaWNrIHRvIHNlbGVjdCBvbmUgY2hpcCBhdCBhIHRpbWUuIFVzZWZ1bCBmb3IgZmlsdGVycyBhbmQgb3B0aW9ucy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJzaW5nbGUiCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1t7a2V5OiJhbGwiLHZhbHVlOiJBbGwgUHJvamVjdHMifSx7a2V5OiJhY3RpdmUiLHZhbHVlOiJBY3RpdmUifSx7a2V5OiJhcmNoaXZlZCIsdmFsdWU6IkFyY2hpdmVkIn0se2tleToiZHJhZnRzIix2YWx1ZToiRHJhZnRzIn1dfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NdWx0aXBsZSBTZWxlY3Rpb24gQ2hpcHM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+U2VsZWN0IG11bHRpcGxlIGNoaXBzIHNpbXVsdGFuZW91c2x5LiBHcmVhdCBmb3IgdGFnIHNlbGVjdGlvbi48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7W3trZXk6ImpzIix2YWx1ZToiSmF2YVNjcmlwdCJ9LHtrZXk6InRzIix2YWx1ZToiVHlwZVNjcmlwdCJ9LHtrZXk6InJlYWN0Iix2YWx1ZToiUmVhY3QifSx7a2V5OiJ2dWUiLHZhbHVlOiJWdWUifSx7a2V5OiJhbmd1bGFyIix2YWx1ZToiQW5ndWxhciJ9LHtrZXk6Im5vZGUiLHZhbHVlOiJOb2RlLmpzIn1dfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5SZW1vdmFibGUgQ2hpcHMgd2l0aCBLZXlzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkNoaXBzIHdpdGggcmVtb3ZlIGJ1dHRvbnMgYW5kIGtleS12YWx1ZSBwYWlycy4gUGVyZmVjdCBmb3IgZHluYW1pYyBsaXN0cy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJzaW5nbGUiCiAgICAgICAgY2hpcHNBcmVSZW1vdmFibGUKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7W3trZXk6ImVudiIsdmFsdWU6IlByb2R1Y3Rpb24ifSx7a2V5OiJ2ZXJzaW9uIix2YWx1ZToiMi40LjEifSx7a2V5OiJicmFuY2giLHZhbHVlOiJtYWluIn0se2tleToiYXV0aG9yIix2YWx1ZToiSm9obiBEb2UifV19CiAgICAgID48L2RlZXMtY2hpcHM+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk1peGVkIENvbnRlbnQgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Db21iaW5pbmcgZGlmZmVyZW50IGNoaXAgdHlwZXMgZm9yIGNvbXBsZXggVUlzLjwvZGl2PgogICAgICA8ZGVlcy1jaGlwcwogICAgICAgIHNlbGVjdGlvbk1vZGU9Im11bHRpcGxlIgogICAgICAgIGNoaXBzQXJlUmVtb3ZhYmxlCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1t7a2V5OiJwcmlvcml0eSIsdmFsdWU6IkhpZ2gifSx7a2V5OiJzdGF0dXMiLHZhbHVlOiJJbiBQcm9ncmVzcyJ9LHtrZXk6ImJ1ZyIsdmFsdWU6IkJ1ZyJ9LHtrZXk6ImZlYXR1cmUiLHZhbHVlOiJGZWF0dXJlIn0se2tleToic3ByaW50Iix2YWx1ZToiU3ByaW50IDIzIn0se2tleToiYXNzaWduZWUiLHZhbHVlOiJBbGljZSJ9XX0KICAgICAgPjwvZGVlcy1jaGlwcz4KICAgIDwvZGl2PgogIDwvZGl2PgpgO2ZlKCk7U3QoKTtCZSgpO3ZhciBiNT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LHVyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxibjE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWNoaXBzIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W107dmFyIEU9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBDPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0QoKV0sZj1bRCh7dHlwZTpCb29sZWFufSldLGQ9W0Qoe3R5cGU6QXJyYXl9KV0sYj1bRCgpXSx2PVtEKHt0eXBlOkFycmF5fSldLGI1KHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0aW9uTW9kZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InNlbGVjdGlvbk1vZGUiaW4geixnZXQ6ej0+ei5zZWxlY3Rpb25Nb2RlLHNldDooeixQKT0+e3ouc2VsZWN0aW9uTW9kZT1QfX0sbWV0YWRhdGE6Q30scyxsKSxiNSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNoaXBzQXJlUmVtb3ZhYmxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4iY2hpcHNBcmVSZW1vdmFibGUiaW4geixnZXQ6ej0+ei5jaGlwc0FyZVJlbW92YWJsZSxzZXQ6KHosUCk9Pnt6LmNoaXBzQXJlUmVtb3ZhYmxlPVB9fSxtZXRhZGF0YTpDfSxjLHUpLGI1KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0YWJsZUNoaXBzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ic2VsZWN0YWJsZUNoaXBzImluIHosZ2V0Ono9Pnouc2VsZWN0YWJsZUNoaXBzLHNldDooeixQKT0+e3ouc2VsZWN0YWJsZUNoaXBzPVB9fSxtZXRhZGF0YTpDfSxoLGcpLGI1KHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWRDaGlwIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ic2VsZWN0ZWRDaGlwImluIHosZ2V0Ono9Pnouc2VsZWN0ZWRDaGlwLHNldDooeixQKT0+e3ouc2VsZWN0ZWRDaGlwPVB9fSxtZXRhZGF0YTpDfSx4LG0pLGI1KHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWRDaGlwcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InNlbGVjdGVkQ2hpcHMiaW4geixnZXQ6ej0+ei5zZWxlY3RlZENoaXBzLHNldDooeixQKT0+e3ouc2VsZWN0ZWRDaGlwcz1QfX0sbWV0YWRhdGE6Q30seSx3KSxiNShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpDfSxudWxsLGEpLEU9cj1lLnZhbHVlLEMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Q30pfXN0YXRpYyBkZW1vPUlPdDsjZT11cih0aGlzLHMsInNpbmdsZSIpO2dldCBzZWxlY3Rpb25Nb2RlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHNlbGVjdGlvbk1vZGUoQyl7dGhpcy4jZT1DfSN0PSh1cih0aGlzLGwpLHVyKHRoaXMsYywhMSkpO2dldCBjaGlwc0FyZVJlbW92YWJsZSgpe3JldHVybiB0aGlzLiN0fXNldCBjaGlwc0FyZVJlbW92YWJsZShDKXt0aGlzLiN0PUN9I2E9KHVyKHRoaXMsdSksdXIodGhpcyxoLFtdKSk7Z2V0IHNlbGVjdGFibGVDaGlwcygpe3JldHVybiB0aGlzLiNhfXNldCBzZWxlY3RhYmxlQ2hpcHMoQyl7dGhpcy4jYT1DfSNyPSh1cih0aGlzLGcpLHVyKHRoaXMseCxudWxsKSk7Z2V0IHNlbGVjdGVkQ2hpcCgpe3JldHVybiB0aGlzLiNyfXNldCBzZWxlY3RlZENoaXAoQyl7dGhpcy4jcj1DfSNpPSh1cih0aGlzLG0pLHVyKHRoaXMseSxbXSkpO2dldCBzZWxlY3RlZENoaXBzKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHNlbGVjdGVkQ2hpcHMoQyl7dGhpcy4jaT1DfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx1cih0aGlzLHcpfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmNoaXAgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjRmNGY1IiwiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzZjNmNDYiKX07CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgICB9CgogICAgICAuY2hpcDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjM2YzZjQ2Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoIiNkMWQ1ZGIiLCIjNTI1MjViIil9OwogICAgICB9CgogICAgICAuY2hpcDphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KCiAgICAgIC5jaGlwLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KCiAgICAgIC5jaGlwLnNlbGVjdGVkOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzI1NjNlYiIsIiMyNTYzZWIiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZSgiIzI1NjNlYiIsIiMyNTYzZWIiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwS2V5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtYXJnaW4tbGVmdDogLThweDsKICAgICAgICBwYWRkaW5nOiAwcHggOHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZCAuY2hpcEtleSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICAgIH0KCiAgICAgIGRlZXMtaWNvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogLTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgICB9CgogICAgICBkZWVzLWljb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjZWY0NDQ0IiwiI2VmNDQ0NCIpfTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgZGVlcy1pY29uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAke3RoaXMuc2VsZWN0YWJsZUNoaXBzLm1hcChDPT5NYAogICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMuc2VsZWN0Q2hpcChDKX0KICAgICAgICAgICAgICBjbGFzcz0iY2hpcCAke3RoaXMuaXNTZWxlY3RlZChDKT8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7Qy5rZXk/TWA8ZGl2IGNsYXNzPSJjaGlwS2V5Ij4ke0Mua2V5fTwvZGl2PmA6TWBgfSAke0MudmFsdWV9CiAgICAgICAgICAgICAgJHt0aGlzLmNoaXBzQXJlUmVtb3ZhYmxlP01gCiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7ej0+e3ouc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5yZW1vdmVDaGlwKEMpfX0KICAgICAgICAgICAgICAgICAgICAgIC5pY29uPSR7ImZhOnhtYXJrIn0KICAgICAgICAgICAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgIGA6TWBgfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGApfQogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7fWlzU2VsZWN0ZWQoQyl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZT09PSJzaW5nbGUiP3RoaXMuc2VsZWN0ZWRDaGlwP3RoaXMuaXNTYW1lQ2hpcCh0aGlzLnNlbGVjdGVkQ2hpcCxDKTohMTp0aGlzLnNlbGVjdGVkQ2hpcHMuc29tZSh6PT50aGlzLmlzU2FtZUNoaXAoeixDKSl9aXNTYW1lQ2hpcChDLHope3JldHVybihDLmtleSYmei5rZXl8fEMudmFsdWU9PT16LnZhbHVlKSYmQy5rZXk9PT16LmtleX1hc3luYyBzZWxlY3RDaGlwKEMpe3RoaXMuc2VsZWN0aW9uTW9kZSE9PSJub25lIiYmKHRoaXMuc2VsZWN0aW9uTW9kZT09PSJzaW5nbGUiP3RoaXMuaXNTZWxlY3RlZChDKT8odGhpcy5zZWxlY3RlZENoaXA9bnVsbCx0aGlzLnNlbGVjdGVkQ2hpcHM9W10pOih0aGlzLnNlbGVjdGVkQ2hpcD1DLHRoaXMuc2VsZWN0ZWRDaGlwcz1bQ10pOnRoaXMuc2VsZWN0aW9uTW9kZT09PSJtdWx0aXBsZSImJih0aGlzLmlzU2VsZWN0ZWQoQyk/dGhpcy5zZWxlY3RlZENoaXBzPXRoaXMuc2VsZWN0ZWRDaGlwcy5maWx0ZXIoej0+IXRoaXMuaXNTYW1lQ2hpcCh6LEMpKTp0aGlzLnNlbGVjdGVkQ2hpcHM9Wy4uLnRoaXMuc2VsZWN0ZWRDaGlwcyxDXSx0aGlzLnJlcXVlc3RVcGRhdGUoKSksY29uc29sZS5sb2codGhpcy5zZWxlY3RlZENoaXBzKSl9cmVtb3ZlQ2hpcChDKXt0aGlzLnNlbGVjdGFibGVDaGlwcz10aGlzLnNlbGVjdGFibGVDaGlwcy5maWx0ZXIoej0+IXRoaXMuaXNTYW1lQ2hpcCh6LEMpKSx0aGlzLnNlbGVjdGVkQ2hpcHM9dGhpcy5zZWxlY3RlZENoaXBzLmZpbHRlcih6PT4hdGhpcy5pc1NhbWVDaGlwKHosQykpLHRoaXMuc2VsZWN0ZWRDaGlwJiZ0aGlzLmlzU2FtZUNoaXAodGhpcy5zZWxlY3RlZENoaXAsQykmJih0aGlzLnNlbGVjdGVkQ2hpcD1udWxsKSx0aGlzLnJlcXVlc3RVcGRhdGUoKX1zdGF0aWN7dXIocixhKX19O3JldHVybiBFPXJ9KSgpO2ZlKCk7dmFyIEZPdD0oKT0+TWAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoIiNkYXNoYm9hcmRHcmlkIiksYT1be2lkOiJtZXRyaWNzMSIseDowLHk6MCx3OjMsaDoyLHRpdGxlOiJSZXZlbnVlIixpY29uOiJsdWNpZGU6ZG9sbGFyU2lnbiIsY29udGVudDpNYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAzMnB4OyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OyI+JDEyNCw1NjM8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjogIzIyYzU1ZTsgZm9udC1zaXplOiAxNHB4OyBtYXJnaW4tdG9wOiA4cHg7Ij7ihpEgMTIuNSUgZnJvbSBsYXN0IG1vbnRoPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYH0se2lkOiJtZXRyaWNzMiIseDozLHk6MCx3OjMsaDoyLHRpdGxlOiJVc2VycyIsaWNvbjoibHVjaWRlOnVzZXJzIixjb250ZW50Ok1gCiAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDIwcHg7Ij4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDMycHg7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07Ij44LDIzNDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjM2I4MmY2OyBmb250LXNpemU6IDE0cHg7IG1hcmdpbi10b3A6IDhweDsiPuKGkSA1LjIlIGZyb20gbGFzdCB3ZWVrPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYH0se2lkOiJjaGFydDEiLHg6Nix5OjAsdzo2LGg6NCx0aXRsZToiQW5hbHl0aWNzIixpY29uOiJsdWNpZGU6bGluZUNoYXJ0Iixjb250ZW50Ok1gCiAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDIwcHg7IGhlaWdodDogMTAwJTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjNzE3MTdhOyI+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpsaW5lQ2hhcnQifSBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAxNnB4OyI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8ZGl2PkNoYXJ0IHZpc3VhbGl6YXRpb24gYXJlYTwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGB9XTtlLndpZGdldHM9YS5tYXAodj0+KHsuLi52fSkpLGUuY2VsbEhlaWdodD04MCxlLm1hcmdpbj17dG9wOjEwLHJpZ2h0OjEwLGJvdHRvbToxMCxsZWZ0OjEwfSxlLmVuYWJsZUFuaW1hdGlvbj0hMCxlLnNob3dHcmlkTGluZXM9ITE7bGV0IHI9ZS5nZXRMYXlvdXQoKS5tYXAodj0+KHsuLi52fSkpLGk9ZS53aWRnZXRzLm1hcCgodix5KT0+KHtpZDp2LmlkLHg6MCx5Onk9PT0wPzA6ZS53aWRnZXRzLnNsaWNlKDAseSkucmVkdWNlKCh3LEUpPT53K0UuaCwwKSx3OmUuY29sdW1ucyxoOnYuaH0pKTtlLmxheW91dHM9e2Jhc2U6cixtb2JpbGU6aX07bGV0IG89dC5xdWVyeVNlbGVjdG9yKCIjZGFzaGJvYXJkTGF5b3V0U3RhdHVzIikscz0oKT0+e2xldCB2PWUuZ2V0TGF5b3V0KCk7by50ZXh0Q29udGVudD1gQWN0aXZlIGJyZWFrcG9pbnQ6ICR7ZS5hY3RpdmVCcmVha3BvaW50fSBcdTIwMjIgVGlsZXM6ICR7di5sZW5ndGh9YH0sbD13aW5kb3cubWF0Y2hNZWRpYSgiKG1heC13aWR0aDogNzY4cHgpIiksZj0oKT0+e2xldCB2PWwubWF0Y2hlcz8ibW9iaWxlIjoiYmFzZSI7ZS5hcHBseUJyZWFrcG9pbnRMYXlvdXQodikscygpfTt0eXBlb2YgbC5hZGRFdmVudExpc3RlbmVyPT0iZnVuY3Rpb24iP2wuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixmKTpsLmFkZExpc3RlbmVyPy4oZiksZigpO2xldCBjPTQ7dC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpLmZvckVhY2godj0+e3N3aXRjaCh2LnRleHRDb250ZW50Py50cmltKCkpe2Nhc2UiVG9nZ2xlIEFuaW1hdGlvbiI6di5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntlLmVuYWJsZUFuaW1hdGlvbj0hZS5lbmFibGVBbmltYXRpb259KTticmVhaztjYXNlIlRvZ2dsZSBHcmlkIExpbmVzIjp2LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2Uuc2hvd0dyaWRMaW5lcz0hZS5zaG93R3JpZExpbmVzfSk7YnJlYWs7Y2FzZSJBZGQgV2lkZ2V0Ijp2LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2xldCB3PXtpZDpgd2lkZ2V0JHtjKyt9YCx4OjAseTowLHc6MyxoOjIsYXV0b1Bvc2l0aW9uOiEwLHRpdGxlOmBXaWRnZXQgJHtjLTF9YCxpY29uOiJsdWNpZGU6cGFja2FnZSIsY29udGVudDpNYAogICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjogIzcxNzE3YTsiPk5ldyB3aWRnZXQgY29udGVudDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsgZm9udC1zaXplOiAyNHB4OyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OyI+JHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWUzKX08L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgfTtlLmFkZFdpZGdldCh3LCEwKX0pO2JyZWFrO2Nhc2UiQ29tcGFjdCBHcmlkIjp2LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2UuY29tcGFjdCgpfSk7YnJlYWs7Y2FzZSJUb2dnbGUgRWRpdCBNb2RlIjp2LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2UuZWRpdGFibGU9IWUuZWRpdGFibGUsdi50ZXh0Q29udGVudD1lLmVkaXRhYmxlPyJMb2NrIEdyaWQiOiJVbmxvY2sgR3JpZCJ9KTticmVhaztjYXNlIlJlc2V0IExheW91dCI6di5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntlLmFwcGx5QnJlYWtwb2ludExheW91dChlLmFjdGl2ZUJyZWFrcG9pbnQpfSk7YnJlYWs7ZGVmYXVsdDpicmVha319KTtsZXQgZD1udWxsLGg9MCxnPSh2LHkpPT57bGV0IHc9ZS5nZXRMYXlvdXQoKTtjb25zb2xlLmdyb3VwKGBcdXsxRjUwNH0gJHt2fSBbRXZlbnQgIyR7KytofV1gKSxjb25zb2xlLmxvZygiVGltZXN0YW1wOiIsbmV3IERhdGUoKS50b0lTT1N0cmluZygpKSxjb25zb2xlLmxvZygiR3JpZCBDb25maWd1cmF0aW9uOiIse2NvbHVtbnM6ZS5jb2x1bW5zLGNlbGxIZWlnaHQ6ZS5jZWxsSGVpZ2h0LG1hcmdpbjplLm1hcmdpbixlZGl0YWJsZTplLmVkaXRhYmxlLGFjdGl2ZUJyZWFrcG9pbnQ6ZS5hY3RpdmVCcmVha3BvaW50fSksY29uc29sZS5sb2coIkN1cnJlbnQgTGF5b3V0OiIsdyksY29uc29sZS5sb2coIldpZGdldCBDb3VudDoiLHcubGVuZ3RoKSxjb25zb2xlLmxvZygiR3JpZCBCb3VuZHM6Iix7dG90YWxXaWRnZXRzOmUud2lkZ2V0cy5sZW5ndGgsbWF4WTpNYXRoLm1heCguLi53Lm1hcChFPT5FLnkrRS5oKSksb2NjdXBpZWQ6dy5tYXAoRT0+YCR7RS5pZH06ICgke0UueH0sJHtFLnl9KSAke0Uud314JHtFLmh9YCkuam9pbigiLCAiKX0pLHkmJmNvbnNvbGUubG9nKCJFdmVudCBEZXRhaWxzOiIseSksY29uc29sZS5ncm91cEVuZCgpfSxiPW5ldyBNdXRhdGlvbk9ic2VydmVyKCgpPT57bGV0IHY9ZS5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIucGxhY2Vob2xkZXIiKTtpZih2KXtsZXQgeT17bGVmdDp2LnN0eWxlLmxlZnQsdG9wOnYuc3R5bGUudG9wLHdpZHRoOnYuc3R5bGUud2lkdGgsaGVpZ2h0OnYuc3R5bGUuaGVpZ2h0fTtpZihKU09OLnN0cmluZ2lmeSh5KSE9PUpTT04uc3RyaW5naWZ5KGQpKXtjb25zb2xlLmdyb3VwKCJcdXsxRjRDRH0gUGxhY2Vob2xkZXIgUG9zaXRpb24gQ2hhbmdlZCIpLGNvbnNvbGUubG9nKCJQcmV2aW91czoiLGQpLGNvbnNvbGUubG9nKCJDdXJyZW50OiIseSk7bGV0IHc9ZS5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZ3JpZC1jb250YWluZXIiKTt3JiZjb25zb2xlLmxvZygiR3JpZCBDb250YWluZXIgRGltZW5zaW9uczoiLHt3aWR0aDp3LmNsaWVudFdpZHRoLGhlaWdodDp3LmNsaWVudEhlaWdodH0pLGNvbnNvbGUuZ3JvdXBFbmQoKSxkPXl9fX0pO2Uuc2hhZG93Um9vdCYmYi5vYnNlcnZlKGUuc2hhZG93Um9vdCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITAsYXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJzdHlsZSJdfSksZygiSW5pdGlhbCBHcmlkIFN0YXRlIiksZS5hZGRFdmVudExpc3RlbmVyKCJ3aWRnZXQtbW92ZSIsdj0+e2coIldpZGdldCBNb3ZlIix7d2lkZ2V0OnYuZGV0YWlsLndpZGdldCxkaXNwbGFjZWQ6di5kZXRhaWwuZGlzcGxhY2VkLHN3YXBwZWRXaXRoOnYuZGV0YWlsLnN3YXBwZWRXaXRofSl9KSxlLmFkZEV2ZW50TGlzdGVuZXIoIndpZGdldC1yZXNpemUiLHY9PntnKCJXaWRnZXQgUmVzaXplIix7d2lkZ2V0OnYuZGV0YWlsLndpZGdldCxkaXNwbGFjZWQ6di5kZXRhaWwuZGlzcGxhY2VkLHN3YXBwZWRXaXRoOnYuZGV0YWlsLnN3YXBwZWRXaXRofSl9KSxlLmFkZEV2ZW50TGlzdGVuZXIoIndpZGdldC1yZW1vdmUiLHY9PntnKCJXaWRnZXQgUmVtb3ZlIix7cmVtb3ZlZFdpZGdldDp2LmRldGFpbC53aWRnZXR9KSxzKCl9KSxlLmFkZEV2ZW50TGlzdGVuZXIoImxheW91dC1jaGFuZ2UiLCgpPT57ZygiTGF5b3V0IENoYW5nZSIpLHMoKX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHY9PntsZXQgeT12LnRhcmdldC5jbG9zZXN0KCIud2lkZ2V0LWhlYWRlciIpLHc9di50YXJnZXQuY2xvc2VzdCgiLnJlc2l6ZS1oYW5kbGUiKTtpZih5fHx3KXtjb25zb2xlLmdyb3VwKGBcdXsxRjNBRn0gSW50ZXJhY3Rpb24gU3RhcnRlZDogJHt5PyJEcmFnIjoiUmVzaXplIn1gKSxjb25zb2xlLmxvZygiVGFyZ2V0IFdpZGdldDoiLHYudGFyZ2V0LmNsb3Nlc3QoIi53aWRnZXQiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLXdpZGdldC1pZCIpKSxjb25zb2xlLmxvZygiUG9pbnRlciBQb3NpdGlvbjoiLHt4OnYuY2xpZW50WCx5OnYuY2xpZW50WX0pLGNvbnNvbGUuZ3JvdXBFbmQoKTtsZXQgRT16PT57bGV0IFA9di50YXJnZXQuY2xvc2VzdCgiLndpZGdldCIpO1AmJmNvbnNvbGUubG9nKCJcdTIxOTRcdUZFMEYgUG9pbnRlciBNb3ZlOiIse3dpZGdldElkOlAuZ2V0QXR0cmlidXRlKCJkYXRhLXdpZGdldC1pZCIpLHBvc2l0aW9uOnt4OnouY2xpZW50WCx5OnouY2xpZW50WX0sZGVsdGE6e3g6ei5jbGllbnRYLXYuY2xpZW50WCx5OnouY2xpZW50WS12LmNsaWVudFl9fSl9LEM9KCk9Pntjb25zb2xlLmdyb3VwKCJcdXsxRjNDMX0gSW50ZXJhY3Rpb24gRW5kZWQiKSxnKCJGaW5hbCBTdGF0ZSBBZnRlciBJbnRlcmFjdGlvbiIpLGNvbnNvbGUuZ3JvdXBFbmQoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsRSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixDKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsQyl9fSk7bGV0IHg9ZS5hZGRXaWRnZXQuYmluZChlKTtlLmFkZFdpZGdldD0odix5KT0+e2NvbnNvbGUuZ3JvdXAoIlx1Mjc5NSBBZGRpbmcgV2lkZ2V0IiksY29uc29sZS5sb2coIk5ldyBXaWRnZXQ6Iix2KSxjb25zb2xlLmxvZygiQXV0byBQb3NpdGlvbjoiLHkpO2xldCB3PXgodix5KTtyZXR1cm4gZygiQWZ0ZXIgV2lkZ2V0IEFkZGVkIiksY29uc29sZS5ncm91cEVuZCgpLHd9O2xldCBtPWUuY29tcGFjdC5iaW5kKGUpO2UuY29tcGFjdD12PT57Y29uc29sZS5ncm91cCgiXHV7MUY1REN9XHVGRTBGIENvbXBhY3RpbmcgR3JpZCIpLGNvbnNvbGUubG9nKCJEaXJlY3Rpb246Iix2fHwidmVydGljYWwiKSxnKCJCZWZvcmUgQ29tcGFjdCIpO2xldCB5PW0odik7cmV0dXJuIGcoIkFmdGVyIENvbXBhY3QiKSxjb25zb2xlLmdyb3VwRW5kKCkseX0scygpfX0+CiAgICAgIDxzdHlsZT4KICAgICAgICAke3RlYAogICAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjRmNGY1IiwiIzA5MDkwYiIpfTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgfQoKICAgICAgICAgIC5kZW1vLWNvbnRyb2xzIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICB9CgogICAgICAgICAgLmRlbW8tY29udHJvbHMgZGVlcy1idXR0b24gewogICAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICAgIH0KCiAgICAgICAgICAuZ3JpZC1jb250YWluZXItd3JhcHBlciB7CiAgICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDYwMHB4OwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICB9CgogICAgICAgICAgLmluZm8gewogICAgICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjNzE3MTdhIil9OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgICB9CgogICAgICAgICAgI2Rhc2hib2FyZExheW91dFN0YXR1cyB7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiM2MGE1ZmEiKX07CiAgICAgICAgICB9CiAgICAgICAgYH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtb0JveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250cm9scyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFuaW1hdGlvbjoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEFuaW1hdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGlzcGxheToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEdyaWQgTGluZXM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBXaWRnZXQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+Q29tcGFjdCBHcmlkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlJlc2V0IExheW91dDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iTW9kZToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEVkaXQgTW9kZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNvbnRhaW5lci13cmFwcGVyIj4KICAgICAgICAgIDxkZWVzLWRhc2hib2FyZGdyaWQgaWQ9ImRhc2hib2FyZEdyaWQiPjwvZGVlcy1kYXNoYm9hcmRncmlkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvIj4KICAgICAgICAgIDxkaXY+RHJhZyB0byByZXBvc2l0aW9uLCByZXNpemUgZnJvbSBoYW5kbGVzLCBvciByaWdodC1jbGljayBhIGhlYWRlciB0byBkZWxldGUgYSB0aWxlLjwvZGl2PgogICAgICAgICAgPGRpdiBpZD0iZGFzaGJvYXJkTGF5b3V0U3RhdHVzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDtmZSgpO3ZhciBPT3Q9W3AuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpbGwtY2hhbmdlOiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZW5hYmxlYW5pbWF0aW9uXSkgLmdyaWQtd2lkZ2V0IHsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAuZ3JpZC13aWRnZXQuZHJhZ2dpbmcgewogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLXdpZGdldC5wbGFjZWhvbGRlciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtd2lkZ2V0LnBsYWNlaG9sZGVyIC53aWRnZXQtY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwicmdiYSg1OSwgMTMwLCAyNDYsIDAuMSkiKX07CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7cC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICAgICAgICBib3gtc2hhZG93OiBub25lOwogICAgICB9CgogICAgICAuZ3JpZC13aWRnZXQucmVzaXppbmcgewogICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLndpZGdldC1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm94LXNoYWRvdzogJHtwLmJkVGhlbWUoIjAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSkiLCIwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAuZ3JpZC13aWRnZXQ6aG92ZXIgLndpZGdldC1jb250ZW50IHsKICAgICAgICBib3gtc2hhZG93OiAke3AuYmRUaGVtZSgiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpIiwiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuNCkiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldC5kcmFnZ2luZyAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJveC1zaGFkb3c6ICR7cC5iZFRoZW1lKCIwIDE2cHggNDhweCByZ2JhKDAsIDAsIDAsIDAuMjUpIiwiMCAxNnB4IDQ4cHggcmdiYSgwLCAwLCAwLCAwLjYpIil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICAgIH0KCiAgICAgIC53aWRnZXQtaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y5ZmFmYiIsIiMwYTBhMGEiKX07CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CiAgICAgIAogICAgICAud2lkZ2V0LWhlYWRlcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmNGY0ZjUiLCIjMTgxODFiIil9OwogICAgICB9CiAgICAgIAogICAgICAud2lkZ2V0LWhlYWRlcjphY3RpdmUgewogICAgICAgIGN1cnNvcjogZ3JhYmJpbmc7CiAgICAgIH0KCiAgICAgIC53aWRnZXQtaGVhZGVyLmxvY2tlZCB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CiAgICAgIAogICAgICAud2lkZ2V0LWhlYWRlci5sb2NrZWQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjlmYWZiIiwiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1oZWFkZXIgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1ib2R5IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQtYm9keS5oYXMtaGVhZGVyIHsKICAgICAgICB0b3A6IDQ1cHg7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1lIHsKICAgICAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICByaWdodDogLTZweDsKICAgICAgICB0b3A6IDEwJTsKICAgICAgICBoZWlnaHQ6IDgwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtcyB7CiAgICAgICAgY3Vyc29yOiBucy1yZXNpemU7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgYm90dG9tOiAtNnB4OwogICAgICAgIGxlZnQ6IDEwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2UgewogICAgICAgIGN1cnNvcjogc2UtcmVzaXplOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICByaWdodDogLTJweDsKICAgICAgICBib3R0b206IC0ycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2U6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDRweDsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICR7cC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjNzE3MTdhIil9OwogICAgICB9CgogICAgICAuZ3JpZC13aWRnZXQ6aG92ZXIgLnJlc2l6ZS1oYW5kbGUtc2UgewogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2U6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKICAgICAgfQogICAgICAKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2U6aG92ZXI6OmFmdGVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7cC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICAgICAgfQoKICAgICAgLmdyaWQtcGxhY2Vob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgICAgb3BhY2l0eTogMC4xOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgJHtwLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjNzE3MTdhIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDQ4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLWxpbmVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLXZlcnRpY2FsIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLWxpbmUtaG9yaXpvbnRhbCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgICAgIG9wYWNpdHk6IDAuMzsKICAgICAgfQogIGBdO3ZhciBkS2E9MTAsSkVlPXQ9PntpZih0eXBlb2YgdD09Im51bWJlciIpcmV0dXJue2hvcml6b250YWw6dCx2ZXJ0aWNhbDp0LHRvcDp0LHJpZ2h0OnQsYm90dG9tOnQsbGVmdDp0fTtsZXQgZT17dG9wOnQudG9wPz8xMCxyaWdodDp0LnJpZ2h0Pz8xMCxib3R0b206dC5ib3R0b20/PzEwLGxlZnQ6dC5sZWZ0Pz8xMH07cmV0dXJuey4uLmUsaG9yaXpvbnRhbDooZS5sZWZ0K2UucmlnaHQpLzIsdmVydGljYWw6KGUudG9wK2UuYm90dG9tKS8yfX0sSE90PSh0LGUsYSxyLGkpPT57bGV0IG89YS5ob3Jpem9udGFsKihlKzEpLHM9TWF0aC5tYXgodC1vLDApLGw9ZT4wP3MvZTowLGY9aT09PSJhdXRvIj9sOnI7cmV0dXJue2NvbnRhaW5lcldpZHRoOnQsY2VsbFdpZHRoUHg6bCxtYXJnaW5Ib3Jpem9udGFsUHg6YS5ob3Jpem9udGFsLGNlbGxIZWlnaHRQeDpmLG1hcmdpblZlcnRpY2FsUHg6YS52ZXJ0aWNhbH19LHFPdD0odCxlLGEpPT57aWYodC5sZW5ndGg9PT0wKXJldHVybiAwO2xldCByPU1hdGgubWF4KC4uLnQubWFwKGk9PmkueStpLmgpLDApO3JldHVybiByKmErKHIrMSkqZS52ZXJ0aWNhbH0sQk90PSh0LGUsYSxyLGkpPT5lPHQueCt0LncmJmUrcj50LngmJmE8dC55K3QuaCYmYStpPnQueSxxST0odCxlLGEscixpPWUudyxvPWUuaCk9PnQuZmlsdGVyKHM9PnMuaWQ9PT1lLmlkPyExOkJPdChzLGEscixpLG8pKSxST3Q9KHQsZSxhLHIpPT5xSSh0LGUsYSxyKS5sZW5ndGg+MCx2bjE9dD0+KHsuLi50fSkseW4xPXQ9PnQubWFwKHZuMSksZU5lPSh0LGUsYSxyKT0+e2ZvcihsZXQgbz0wO288MjAwO28rKylmb3IobGV0IHM9MDtzPD1yLWU7cysrKWlmKCF0LnNvbWUoZj0+Qk90KGYscyxvLGUsYSkpKXJldHVybnt4OnMseTpvfTtyZXR1cm57eDowLHk6dC5yZWR1Y2UoKG8scyk9Pk1hdGgubWF4KG8scy55K3MuaCksMCl9fSxocz0odCxlLGEscixpKT0+e2xldCBvPXluMSh0KSxzPW8uZmluZChoPT5oLmlkPT09ZSksbD10LmZpbmQoaD0+aC5pZD09PWUpO2lmKCFzfHwhbClyZXR1cm4gbnVsbDtsZXQgZj17eDphLngseTphLnksdzphLnc/P3MudyxoOmEuaD8/cy5ofTtzLng9Zi54LHMueT1mLnkscy53PWYudyxzLmg9Zi5oO2xldCBjPXFJKG8scyxmLngsZi55LGYudyxmLmgpO2lmKGMubGVuZ3RoPT09MClyZXR1cm57d2lkZ2V0czpvLG1vdmVkV2lkZ2V0czpbcy5pZF19O2lmKGMubGVuZ3RoPT09MSl7bGV0IGg9Y1swXTtpZighaC5sb2NrZWQmJiFoLm5vTW92ZSYmaC53PT09cy53JiZoLmg9PT1zLmgpe2xldCBnPW8uZmluZChiPT5iLmlkPT09aC5pZCk7aWYoZyl7bGV0IGI9bCx4PXt4OmcueCx5OmcueX07aWYoZy54PWIueCxnLnk9Yi55LHFJKG8scyxzLngscy55LHMudyxzLmgpLmxlbmd0aD09PTAmJnFJKG8sZyxnLngsZy55LGcudyxnLmgpLmxlbmd0aD09PTApcmV0dXJue3dpZGdldHM6byxtb3ZlZFdpZGdldHM6W3MuaWQsZy5pZF0sc3dhcHBlZFdpdGg6Zy5pZH07Zy54PXgueCxnLnk9eC55fX19bGV0IHU9bmV3IFNldChbcy5pZF0pO2ZvcihsZXQgaCBvZiBjKXtpZihoLmxvY2tlZHx8aC5ub01vdmUpcmV0dXJuIG51bGw7bGV0IGc9by5maW5kKG09Pm0uaWQ9PT1oLmlkKTtpZighZyljb250aW51ZTtsZXQgYj1vLmZpbHRlcihtPT5tLmlkIT09aC5pZCkseD1lTmUoYixnLncsZy5oLHIpO2cueD14LngsZy55PXgueSx1LmFkZChnLmlkKX1yZXR1cm4gcUkobyxzLHMueCxzLnkscy53LHMuaCkubGVuZ3RoPjA/bnVsbDp7d2lkZ2V0czpvLG1vdmVkV2lkZ2V0czpBcnJheS5mcm9tKHUpfX0sVk90PSh0LGU9InZlcnRpY2FsIik9PntsZXQgYT1bLi4udF0uc29ydCgocixpKT0+ZT09PSJ2ZXJ0aWNhbCI/ci55IT09aS55P3IueS1pLnk6ci54LWkueDpyLnghPT1pLng/ci54LWkueDpyLnktaS55KTtmb3IobGV0IHIgb2YgYSlpZighKHIubG9ja2VkfHxyLm5vTW92ZSkpaWYoZT09PSJ2ZXJ0aWNhbCIpZm9yKDtyLnk+MCYmIVJPdCh0LHIsci54LHIueS0xKTspci55LT0xO2Vsc2UgZm9yKDtyLng+MCYmIVJPdCh0LHIsci54LTEsci55KTspci54LT0xfSxVT3Q9KHQsZSk9PnQubWFwKGE9PntsZXQgcj1lLmZpbmQoaT0+aS5pZD09PWEuaWQpO3JldHVybiByP3suLi5hLC4uLnJ9OmF9KTt2YXIgak90PSh7cG9pbnRlcjp0LGNvbnRhaW5lclJlY3Q6ZSxtZXRyaWNzOmEsY29sdW1uczpyLHdpZGdldDppLHJ0bDpvLGRyYWdPZmZzZXRYOnM9MCxkcmFnT2Zmc2V0WTpsPTB9KT0+e2xldCBmPXQuY2xpZW50WC1lLmxlZnQtcyxjPXQuY2xpZW50WS1lLnRvcC1sLHU9YS5tYXJnaW5Ib3Jpem9udGFsUHgsZD1hLm1hcmdpblZlcnRpY2FsUHgsaD1hLmNlbGxXaWR0aFB4LGc9YS5jZWxsSGVpZ2h0UHgsYj0oQyx6LFApPT5NYXRoLm1heCh6LE1hdGgubWluKFAsQykpLHg9YihmLXUsMCxlLndpZHRoLXUpLG09YihjLWQsMCxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHY9aCt1LHk9ZytkLHc9TWF0aC5yb3VuZCh4L3YpO28mJih3PXItaS53LXcpLHc9Yih3LDAsci1pLncpO2xldCBFPWIoTWF0aC5yb3VuZChtL3kpLDAsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO3JldHVybnt4OncseTpFfX0sV090PSh7cG9pbnRlcjp0LGNvbnRhaW5lclJlY3Q6ZSxtZXRyaWNzOmEsc3RhcnRXaWR0aDpyLHN0YXJ0SGVpZ2h0Omksc3RhcnRQb2ludGVyOm8saGFuZGxlcjpzLHdpZGdldDpsLGNvbHVtbnM6Zn0pPT57bGV0IGM9dC5jbGllbnRYLW8uY2xpZW50WCx1PXQuY2xpZW50WS1vLmNsaWVudFksZD1yLGg9aSxnPWEuY2VsbFdpZHRoUHgrYS5tYXJnaW5Ib3Jpem9udGFsUHgsYj1hLmNlbGxIZWlnaHRQeCthLm1hcmdpblZlcnRpY2FsUHg7aWYocy5pbmNsdWRlcygiZSIpKXtsZXQgdj1NYXRoLnJvdW5kKGMvZyk7ZD1yK3Z9aWYocy5pbmNsdWRlcygicyIpKXtsZXQgdj1NYXRoLnJvdW5kKHUvYik7aD1pK3Z9bGV0IHg9TWF0aC5tYXgobC5taW5XfHwxLE1hdGgubWluKGQsbC5tYXhXfHxmLWwueCkpLG09TWF0aC5tYXgobC5taW5IfHwxLE1hdGgubWluKGgsbC5tYXhIfHxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpO3JldHVybnt3aWR0aDp4LGhlaWdodDptfX07dmFyIEdPdD0oe3dpZGdldDp0LGhvc3Q6ZSxldmVudDphfSk9PntsZXQgcj1be25hbWU6IkRlbGV0ZSB0aWxlIixpY29uTmFtZToibHVjaWRlOnRyYXNoMiIsYWN0aW9uOmFzeW5jKCk9PihlLnJlbW92ZVdpZGdldCh0LmlkKSxudWxsKX1dO1d0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGEscil9O2ZlKCk7RnQoKTt2YXIgQTI9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxIdD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sd24xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1kYXNoYm9hcmRncmlkIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W10sZCxoPVtdLGc9W10sYix4PVtdLG09W10sdix5PVtdLHc9W10sRSxDPVtdLHo9W10sUCxfPVtdLCQ9W10sSCxMPVtdLGs9W10sTixTPVtdLFQ9W10sUixBPVtdLEY9W10sYWUsVj1bXSxTZT1bXSx6ZSxXPVtdLE5lPVtdLFJlLFg9W10sST1bXSxPLEc9W10saj1bXSxzZSxrZT1bXSxEZT1bXTt2YXIgT2U9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBVPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6QXJyYXl9KV0sZj1bRCh7dHlwZTpOdW1iZXJ9KV0sZD1bRCh7dHlwZTpPYmplY3R9KV0sYj1bRCh7dHlwZTpOdW1iZXJ9KV0sdj1bRCh7dHlwZTpCb29sZWFufSldLEU9W0Qoe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLFA9W0Qoe3R5cGU6U3RyaW5nfSldLEg9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxOPVtEKHt0eXBlOkJvb2xlYW59KV0sUj1bRCh7YXR0cmlidXRlOiExfSldLGFlPVtEKHt0eXBlOlN0cmluZ30pXSx6ZT1bbGUoKV0sUmU9W2xlKCldLE89W2xlKCldLHNlPVtsZSgpXSxBMih0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6IndpZGdldHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJ3aWRnZXRzImluIEIsZ2V0OkI9PkIud2lkZ2V0cyxzZXQ6KEIsb2UpPT57Qi53aWRnZXRzPW9lfX0sbWV0YWRhdGE6VX0scyxsKSxBMih0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNlbGxIZWlnaHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJjZWxsSGVpZ2h0ImluIEIsZ2V0OkI9PkIuY2VsbEhlaWdodCxzZXQ6KEIsb2UpPT57Qi5jZWxsSGVpZ2h0PW9lfX0sbWV0YWRhdGE6VX0sYyx1KSxBMih0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1hcmdpbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Qj0+Im1hcmdpbiJpbiBCLGdldDpCPT5CLm1hcmdpbixzZXQ6KEIsb2UpPT57Qi5tYXJnaW49b2V9fSxtZXRhZGF0YTpVfSxoLGcpLEEyKHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29sdW1ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Qj0+ImNvbHVtbnMiaW4gQixnZXQ6Qj0+Qi5jb2x1bW5zLHNldDooQixvZSk9PntCLmNvbHVtbnM9b2V9fSxtZXRhZGF0YTpVfSx4LG0pLEEyKHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZWRpdGFibGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJlZGl0YWJsZSJpbiBCLGdldDpCPT5CLmVkaXRhYmxlLHNldDooQixvZSk9PntCLmVkaXRhYmxlPW9lfX0sbWV0YWRhdGE6VX0seSx3KSxBMih0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImVuYWJsZUFuaW1hdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Qj0+ImVuYWJsZUFuaW1hdGlvbiJpbiBCLGdldDpCPT5CLmVuYWJsZUFuaW1hdGlvbixzZXQ6KEIsb2UpPT57Qi5lbmFibGVBbmltYXRpb249b2V9fSxtZXRhZGF0YTpVfSxDLHopLEEyKHRoaXMsbnVsbCxQLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY2VsbEhlaWdodFVuaXQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJjZWxsSGVpZ2h0VW5pdCJpbiBCLGdldDpCPT5CLmNlbGxIZWlnaHRVbml0LHNldDooQixvZSk9PntCLmNlbGxIZWlnaHRVbml0PW9lfX0sbWV0YWRhdGE6VX0sXywkKSxBMih0aGlzLG51bGwsSCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJ0bCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Qj0+InJ0bCJpbiBCLGdldDpCPT5CLnJ0bCxzZXQ6KEIsb2UpPT57Qi5ydGw9b2V9fSxtZXRhZGF0YTpVfSxMLGspLEEyKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hvd0dyaWRMaW5lcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Qj0+InNob3dHcmlkTGluZXMiaW4gQixnZXQ6Qj0+Qi5zaG93R3JpZExpbmVzLHNldDooQixvZSk9PntCLnNob3dHcmlkTGluZXM9b2V9fSxtZXRhZGF0YTpVfSxTLFQpLEEyKHRoaXMsbnVsbCxSLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGF5b3V0cyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Qj0+ImxheW91dHMiaW4gQixnZXQ6Qj0+Qi5sYXlvdXRzLHNldDooQixvZSk9PntCLmxheW91dHM9b2V9fSxtZXRhZGF0YTpVfSxBLEYpLEEyKHRoaXMsbnVsbCxhZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFjdGl2ZUJyZWFrcG9pbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJhY3RpdmVCcmVha3BvaW50ImluIEIsZ2V0OkI9PkIuYWN0aXZlQnJlYWtwb2ludCxzZXQ6KEIsb2UpPT57Qi5hY3RpdmVCcmVha3BvaW50PW9lfX0sbWV0YWRhdGE6VX0sVixTZSksQTIodGhpcyxudWxsLHplLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicGxhY2Vob2xkZXJQb3NpdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Qj0+InBsYWNlaG9sZGVyUG9zaXRpb24iaW4gQixnZXQ6Qj0+Qi5wbGFjZWhvbGRlclBvc2l0aW9uLHNldDooQixvZSk9PntCLnBsYWNlaG9sZGVyUG9zaXRpb249b2V9fSxtZXRhZGF0YTpVfSxXLE5lKSxBMih0aGlzLG51bGwsUmUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtZXRyaWNzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpCPT4ibWV0cmljcyJpbiBCLGdldDpCPT5CLm1ldHJpY3Msc2V0OihCLG9lKT0+e0IubWV0cmljcz1vZX19LG1ldGFkYXRhOlV9LFgsSSksQTIodGhpcyxudWxsLE8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyZXNvbHZlZE1hcmdpbnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkI9PiJyZXNvbHZlZE1hcmdpbnMiaW4gQixnZXQ6Qj0+Qi5yZXNvbHZlZE1hcmdpbnMsc2V0OihCLG9lKT0+e0IucmVzb2x2ZWRNYXJnaW5zPW9lfX0sbWV0YWRhdGE6VX0sRyxqKSxBMih0aGlzLG51bGwsc2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwcmV2aWV3V2lkZ2V0cyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Qj0+InByZXZpZXdXaWRnZXRzImluIEIsZ2V0OkI9PkIucHJldmlld1dpZGdldHMsc2V0OihCLG9lKT0+e0IucHJldmlld1dpZGdldHM9b2V9fSxtZXRhZGF0YTpVfSxrZSxEZSksQTIobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6VX0sbnVsbCxhKSxPZT1yPWUudmFsdWUsVSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpVfSl9c3RhdGljIGRlbW89Rk90O3N0YXRpYyBzdHlsZXM9T090OyNlPUh0KHRoaXMscyxbXSk7Z2V0IHdpZGdldHMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgd2lkZ2V0cyhVKXt0aGlzLiNlPVV9I3Q9KEh0KHRoaXMsbCksSHQodGhpcyxjLDgwKSk7Z2V0IGNlbGxIZWlnaHQoKXtyZXR1cm4gdGhpcy4jdH1zZXQgY2VsbEhlaWdodChVKXt0aGlzLiN0PVV9I2E9KEh0KHRoaXMsdSksSHQodGhpcyxoLDEwKSk7Z2V0IG1hcmdpbigpe3JldHVybiB0aGlzLiNhfXNldCBtYXJnaW4oVSl7dGhpcy4jYT1VfSNyPShIdCh0aGlzLGcpLEh0KHRoaXMseCwxMikpO2dldCBjb2x1bW5zKCl7cmV0dXJuIHRoaXMuI3J9c2V0IGNvbHVtbnMoVSl7dGhpcy4jcj1VfSNpPShIdCh0aGlzLG0pLEh0KHRoaXMseSwhMCkpO2dldCBlZGl0YWJsZSgpe3JldHVybiB0aGlzLiNpfXNldCBlZGl0YWJsZShVKXt0aGlzLiNpPVV9I289KEh0KHRoaXMsdyksSHQodGhpcyxDLCEwKSk7Z2V0IGVuYWJsZUFuaW1hdGlvbigpe3JldHVybiB0aGlzLiNvfXNldCBlbmFibGVBbmltYXRpb24oVSl7dGhpcy4jbz1VfSNzPShIdCh0aGlzLHopLEh0KHRoaXMsXywicHgiKSk7Z2V0IGNlbGxIZWlnaHRVbml0KCl7cmV0dXJuIHRoaXMuI3N9c2V0IGNlbGxIZWlnaHRVbml0KFUpe3RoaXMuI3M9VX0jbj0oSHQodGhpcywkKSxIdCh0aGlzLEwsITEpKTtnZXQgcnRsKCl7cmV0dXJuIHRoaXMuI259c2V0IHJ0bChVKXt0aGlzLiNuPVV9I2w9KEh0KHRoaXMsayksSHQodGhpcyxTLCExKSk7Z2V0IHNob3dHcmlkTGluZXMoKXtyZXR1cm4gdGhpcy4jbH1zZXQgc2hvd0dyaWRMaW5lcyhVKXt0aGlzLiNsPVV9I2M9KEh0KHRoaXMsVCksSHQodGhpcyxBLHZvaWQgMCkpO2dldCBsYXlvdXRzKCl7cmV0dXJuIHRoaXMuI2N9c2V0IGxheW91dHMoVSl7dGhpcy4jYz1VfSNkPShIdCh0aGlzLEYpLEh0KHRoaXMsViwiYmFzZSIpKTtnZXQgYWN0aXZlQnJlYWtwb2ludCgpe3JldHVybiB0aGlzLiNkfXNldCBhY3RpdmVCcmVha3BvaW50KFUpe3RoaXMuI2Q9VX0jZj0oSHQodGhpcyxTZSksSHQodGhpcyxXLG51bGwpKTtnZXQgcGxhY2Vob2xkZXJQb3NpdGlvbigpe3JldHVybiB0aGlzLiNmfXNldCBwbGFjZWhvbGRlclBvc2l0aW9uKFUpe3RoaXMuI2Y9VX0jdT0oSHQodGhpcyxOZSksSHQodGhpcyxYLG51bGwpKTtnZXQgbWV0cmljcygpe3JldHVybiB0aGlzLiN1fXNldCBtZXRyaWNzKFUpe3RoaXMuI3U9VX0jcD0oSHQodGhpcyxJKSxIdCh0aGlzLEcsbnVsbCkpO2dldCByZXNvbHZlZE1hcmdpbnMoKXtyZXR1cm4gdGhpcy4jcH1zZXQgcmVzb2x2ZWRNYXJnaW5zKFUpe3RoaXMuI3A9VX0jaD0oSHQodGhpcyxqKSxIdCh0aGlzLGtlLG51bGwpKTtnZXQgcHJldmlld1dpZGdldHMoKXtyZXR1cm4gdGhpcy4jaH1zZXQgcHJldmlld1dpZGdldHMoVSl7dGhpcy4jaD1VfWNvbnRhaW5lckJvdW5kcz0oSHQodGhpcyxEZSksbnVsbCk7ZHJhZ1N0YXRlPW51bGw7cmVzaXplU3RhdGU9bnVsbDtyZXNpemVPYnNlcnZlcjtpbnRlcmFjdGlvbkFjdGl2ZT0hMTthc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jb21wdXRlTWV0cmljcygpLHRoaXMub2JzZXJ2ZVJlc2l6ZSgpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpLHRoaXMucmVsZWFzZVBvaW50ZXJFdmVudHMoKX11cGRhdGVkKFUpeyhVLmhhcygibWFyZ2luIil8fFUuaGFzKCJjb2x1bW5zIil8fFUuaGFzKCJjZWxsSGVpZ2h0Iil8fFUuaGFzKCJjZWxsSGVpZ2h0VW5pdCIpKSYmdGhpcy5jb21wdXRlTWV0cmljcygpLFUuaGFzKCJ3aWRnZXRzIikmJiF0aGlzLmludGVyYWN0aW9uQWN0aXZlJiZ0aGlzLm5vdGlmeUxheW91dENoYW5nZSgpfXJlbmRlcigpe2xldCBVPXRoaXMud2lkZ2V0cztpZihVLmxlbmd0aD09PTApcmV0dXJuIE1gCiAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bGF5b3V0R3JpZCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgPGRpdj5ObyB3aWRnZXRzIGNvbmZpZ3VyZWQ8L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLXRvcDogOHB4OyI+QWRkIHdpZGdldHMgdG8gcG9wdWxhdGUgdGhlIGRhc2hib2FyZDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgO2xldCBCPXRoaXMuZW5zdXJlTWV0cmljcygpLG9lPXRoaXMucmVzb2x2ZWRNYXJnaW5zPz9KRWUodGhpcy5tYXJnaW4pLHZlPUIuY2VsbEhlaWdodFB4LHllPXRoaXMucHJldmlld1dpZGdldHM/P3RoaXMud2lkZ2V0cywkZT1xT3QoeWUsb2UsdmUpLG5lPXRoaXMucHJldmlld1dpZGdldHM/bmV3IE1hcCh0aGlzLnByZXZpZXdXaWRnZXRzLm1hcChyZT0+W3JlLmlkLHJlXSkpOm51bGw7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9ImdyaWQtY29udGFpbmVyIiBzdHlsZT0iaGVpZ2h0OiAkeyRlfXB4OyI+CiAgICAgICAgJHt0aGlzLnNob3dHcmlkTGluZXM/dGhpcy5yZW5kZXJHcmlkTGluZXMoQiwkZSk6bnVsbH0KICAgICAgICAke1UubWFwKHJlPT50aGlzLnJlbmRlcldpZGdldChyZSxCLG9lLG5lKSl9CiAgICAgICAgJHt0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24/dGhpcy5yZW5kZXJQbGFjZWhvbGRlcihCLG9lKTpudWxsfQogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyR3JpZExpbmVzKFUsQil7bGV0IG9lPVtdLHZlPVtdLHllPVUuY2VsbFdpZHRoUHgrVS5tYXJnaW5Ib3Jpem9udGFsUHgsJGU9VS5jZWxsSGVpZ2h0UHgrVS5tYXJnaW5WZXJ0aWNhbFB4O2ZvcihsZXQgcmU9MDtyZTw9dGhpcy5jb2x1bW5zO3JlKyspe2xldCBnZT1yZSp5ZStVLm1hcmdpbkhvcml6b250YWxQeCxFZT10aGlzLnB4VG9QZXJjZW50KGdlLFUuY29udGFpbmVyV2lkdGgpO29lLnB1c2goTWA8ZGl2IGNsYXNzPSJncmlkLWxpbmUtdmVydGljYWwiIHN0eWxlPSJsZWZ0OiAke0VlfSU7Ij48L2Rpdj5gKX1sZXQgbmU9TWF0aC5jZWlsKEIvJGUpO2ZvcihsZXQgcmU9MDtyZTw9bmU7cmUrKyl7bGV0IGdlPXJlKiRlO3ZlLnB1c2goTWA8ZGl2IGNsYXNzPSJncmlkLWxpbmUtaG9yaXpvbnRhbCIgc3R5bGU9InRvcDogJHtnZX1weDsiPjwvZGl2PmApfXJldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWxpbmVzIj4KICAgICAgICAke29lfQogICAgICAgICR7dmV9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJXaWRnZXQoVSxCLG9lLHZlKXtsZXQgeWU9dGhpcy5kcmFnU3RhdGU/LndpZGdldElkPT09VS5pZCwkZT10aGlzLnJlc2l6ZVN0YXRlPy53aWRnZXRJZD09PVUuaWQsbmU9VS5sb2NrZWR8fCF0aGlzLmVkaXRhYmxlLHJlPXZlPy5nZXQoVS5pZCk/P251bGwsZ2U9eWU/VTpyZT8/VSxFZT10aGlzLmNvbXB1dGVXaWRnZXRSZWN0KGdlLEIsb2UpLHJ0PXRoaXMucnRsPyJyaWdodCI6ImxlZnQiLHVlPXRoaXMucHhUb1BlcmNlbnQoRWUubGVmdCxCLmNvbnRhaW5lcldpZHRoKSxaPXRoaXMucHhUb1BlcmNlbnQoRWUud2lkdGgsQi5jb250YWluZXJXaWR0aCksSj0iIjtpZih5ZSYmdGhpcy5kcmFnU3RhdGU/LmN1cnJlbnRQb2ludGVyKXtsZXQgZGU9dGhpcy5kcmFnU3RhdGUuY3VycmVudFBvaW50ZXIsQWU9dGhpcy5jb250YWluZXJCb3VuZHM/P3RoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSGU9ZGUuY2xpZW50WC1BZS5sZWZ0LXRoaXMuZHJhZ1N0YXRlLm9mZnNldFgtRWUubGVmdCxNdD1kZS5jbGllbnRZLUFlLnRvcC10aGlzLmRyYWdTdGF0ZS5vZmZzZXRZLUVlLnRvcDtKPWB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgke0hlfXB4LCAke010fXB4KTtgfXJldHVybiBNYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImdyaWQtd2lkZ2V0ICR7eWU/ImRyYWdnaW5nIjoiIn0gJHskZT8icmVzaXppbmciOiIifSIKICAgICAgICBzdHlsZT0iCiAgICAgICAgICAke3J0fTogJHt1ZX0lOwogICAgICAgICAgdG9wOiAke0VlLnRvcH1weDsKICAgICAgICAgIHdpZHRoOiAke1p9JTsKICAgICAgICAgIGhlaWdodDogJHtFZS5oZWlnaHR9cHg7CiAgICAgICAgICAke0p9CiAgICAgICAgIgogICAgICAgIGRhdGEtd2lkZ2V0LWlkPSR7VS5pZH0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1jb250ZW50Ij4KICAgICAgICAgICR7VS50aXRsZT9NYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0id2lkZ2V0LWhlYWRlciAke25lPyJsb2NrZWQiOiIifSIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7IW5lJiYhVS5ub01vdmU/ZGU9PnRoaXMuc3RhcnREcmFnKGRlLFUpOm51bGx9CiAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0ke2RlPT50aGlzLmhhbmRsZVdpZGdldENvbnRleHRNZW51KGRlLFUpfQogICAgICAgICAgICAgICAgICB0YWJpbmRleD0keyFuZSYmIVUubm9Nb3ZlPzA6LTF9CiAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7ZGU9PnRoaXMuaGFuZGxlSGVhZGVyS2V5ZG93bihkZSxVKX0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgJHtVLmljb24/TWA8ZGVlcy1pY29uIC5pY29uPSR7VS5pY29ufT48L2RlZXMtaWNvbj5gOm51bGx9CiAgICAgICAgICAgICAgICAgICR7VS50aXRsZX0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGA6bnVsbH0KICAgICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1ib2R5ICR7VS50aXRsZT8iaGFzLWhlYWRlciI6IiJ9Ij4KICAgICAgICAgICAgJHtVLmNvbnRlbnR9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7IW5lJiYhVS5ub1Jlc2l6ZT9NYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWhhbmRsZSByZXNpemUtaGFuZGxlLWUiCiAgICAgICAgICAgICAgICAgIEBwb2ludGVyZG93bj0ke2RlPT50aGlzLnN0YXJ0UmVzaXplKGRlLFUsImUiKX0KICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InJlc2l6ZS1oYW5kbGUgcmVzaXplLWhhbmRsZS1zIgogICAgICAgICAgICAgICAgICBAcG9pbnRlcmRvd249JHtkZT0+dGhpcy5zdGFydFJlc2l6ZShkZSxVLCJzIil9CiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlIHJlc2l6ZS1oYW5kbGUtc2UiCiAgICAgICAgICAgICAgICAgIEBwb2ludGVyZG93bj0ke2RlPT50aGlzLnN0YXJ0UmVzaXplKGRlLFUsInNlIil9CiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgYDpudWxsfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyUGxhY2Vob2xkZXIoVSxCKXtpZighdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uKXJldHVybiBNYGA7bGV0IG9lPXRoaXMuY29tcHV0ZVdpZGdldFJlY3QodGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uLFUsQiksdmU9dGhpcy5ydGw/InJpZ2h0IjoibGVmdCIseWU9dGhpcy5weFRvUGVyY2VudChvZS5sZWZ0LFUuY29udGFpbmVyV2lkdGgpLCRlPXRoaXMucHhUb1BlcmNlbnQob2Uud2lkdGgsVS5jb250YWluZXJXaWR0aCk7cmV0dXJuIE1gCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iZ3JpZC13aWRnZXQgcGxhY2Vob2xkZXIiCiAgICAgICAgc3R5bGU9IgogICAgICAgICAgJHt2ZX06ICR7eWV9JTsKICAgICAgICAgIHRvcDogJHtvZS50b3B9cHg7CiAgICAgICAgICB3aWR0aDogJHskZX0lOwogICAgICAgICAgaGVpZ2h0OiAke29lLmhlaWdodH1weDsKICAgICAgICAiCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXQtY29udGVudCI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1zdGFydERyYWcoVSxCKXtpZighdGhpcy5lZGl0YWJsZXx8Qi5ub01vdmV8fEIubG9ja2VkKXJldHVybjtVLnByZXZlbnREZWZhdWx0KCksVS5zdG9wUHJvcGFnYXRpb24oKTtsZXQgb2U9VS5jdXJyZW50VGFyZ2V0LmNsb3Nlc3QoIi5ncmlkLXdpZGdldCIpO2lmKCFvZSlyZXR1cm47bGV0IHZlPW9lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuY29udGFpbmVyQm91bmRzPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5lbnN1cmVNZXRyaWNzKCksdGhpcy5kcmFnU3RhdGU9e3dpZGdldElkOkIuaWQscG9pbnRlcklkOlUucG9pbnRlcklkLG9mZnNldFg6VS5jbGllbnRYLXZlLmxlZnQsb2Zmc2V0WTpVLmNsaWVudFktdmUudG9wLHN0YXJ0OntpZDpCLmlkLHg6Qi54LHk6Qi55LHc6Qi53LGg6Qi5ofSxwcmV2aW91c1Bvc2l0aW9uOntpZDpCLmlkLHg6Qi54LHk6Qi55LHc6Qi53LGg6Qi5ofSxjdXJyZW50UG9pbnRlcjp7Y2xpZW50WDpVLmNsaWVudFgsY2xpZW50WTpVLmNsaWVudFl9LGxhc3RQbGFjZW1lbnQ6bnVsbH0sdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZT0hMCxVLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoVS5wb2ludGVySWQpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix0aGlzLmhhbmRsZURyYWdNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHRoaXMuaGFuZGxlRHJhZ0VuZCksdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uPXtpZDpCLmlkLHg6Qi54LHk6Qi55LHc6Qi53LGg6Qi5ofX1oYW5kbGVEcmFnTW92ZT1VPT57aWYoIXRoaXMuZHJhZ1N0YXRlKXJldHVybjtsZXQgQj10aGlzLmVuc3VyZU1ldHJpY3MoKSxvZT10aGlzLndpZGdldHMsdmU9b2UuZmluZChyZT0+cmUuaWQ9PT10aGlzLmRyYWdTdGF0ZS53aWRnZXRJZCk7aWYoIXZlKXJldHVybjtVLnByZXZlbnREZWZhdWx0KCk7bGV0IHllPXRoaXMuZHJhZ1N0YXRlLnByZXZpb3VzUG9zaXRpb24sJGU9ak90KHtwb2ludGVyOntjbGllbnRYOlUuY2xpZW50WCxjbGllbnRZOlUuY2xpZW50WX0sY29udGFpbmVyUmVjdDp0aGlzLmNvbnRhaW5lckJvdW5kcz8/dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxtZXRyaWNzOkIsY29sdW1uczp0aGlzLmNvbHVtbnMsd2lkZ2V0OnZlLHJ0bDp0aGlzLnJ0bCxkcmFnT2Zmc2V0WDp0aGlzLmRyYWdTdGF0ZS5vZmZzZXRYLGRyYWdPZmZzZXRZOnRoaXMuZHJhZ1N0YXRlLm9mZnNldFl9KSxuZT1ocyhvZSx2ZS5pZCx7eDokZS54LHk6JGUueX0sdGhpcy5jb2x1bW5zLHllKTtpZihuZSl7bGV0IHJlPW5lLndpZGdldHMuZmluZChFZT0+RWUuaWQ9PT12ZS5pZCk7dGhpcy5kcmFnU3RhdGU9ey4uLnRoaXMuZHJhZ1N0YXRlLGN1cnJlbnRQb2ludGVyOntjbGllbnRYOlUuY2xpZW50WCxjbGllbnRZOlUuY2xpZW50WX0sbGFzdFBsYWNlbWVudDpuZSxwcmV2aW91c1Bvc2l0aW9uOnJlP3tpZDpyZS5pZCx4OnJlLngseTpyZS55LHc6cmUudyxoOnJlLmh9OntpZDp2ZS5pZCx4OiRlLngseTokZS55LHc6dmUudyxoOnZlLmh9fSx0aGlzLnByZXZpZXdXaWRnZXRzPW5lLndpZGdldHM7bGV0IGdlPW5lLndpZGdldHMuZmluZChFZT0+RWUuaWQ9PT12ZS5pZCk7Z2U/dGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uPXtpZDpnZS5pZCx4OmdlLngseTpnZS55LHc6Z2UudyxoOmdlLmh9OnRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj17aWQ6dmUuaWQseDokZS54LHk6JGUueSx3OnZlLncsaDp2ZS5ofX1lbHNlIHRoaXMucHJldmlld1dpZGdldHM9bnVsbCx0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb249bnVsbDt0aGlzLnJlcXVlc3RVcGRhdGUoKX07aGFuZGxlRHJhZ0VuZD1VPT57bGV0IEI9dGhpcy5kcmFnU3RhdGU7aWYoIUJ8fFUucG9pbnRlcklkIT09Qi5wb2ludGVySWQpcmV0dXJuO2xldCBvZT10aGlzLndpZGdldHM7dGhpcy5wcmV2aWV3V2lkZ2V0cz1udWxsO2xldCB2ZT10aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24/P0Iuc3RhcnQseWU9aHMob2UsQi53aWRnZXRJZCx7eDp2ZS54LHk6dmUueX0sdGhpcy5jb2x1bW5zLEIucHJldmlvdXNQb3NpdGlvbik7aWYoeWUpe2xldCAkZT15ZS53aWRnZXRzLmZpbmQobmU9Pm5lLmlkPT09Qi53aWRnZXRJZCk7JGUmJih5ZS53aWRnZXRzLnNvbWUocmU9PnJlLmlkPT09Qi53aWRnZXRJZD8hMTokZS54PHJlLngrcmUudyYmJGUueCskZS53PnJlLngmJiRlLnk8cmUueStyZS5oJiYkZS55KyRlLmg+cmUueSk/dGhpcy53aWRnZXRzPXRoaXMud2lkZ2V0cy5tYXAocmU9PnJlLmlkPT09Qi53aWRnZXRJZD97Li4ucmUseDpCLnN0YXJ0LngseTpCLnN0YXJ0Lnl9OnJlKTp0aGlzLmNvbW1pdFBsYWNlbWVudCh5ZSxCLndpZGdldElkLCJ3aWRnZXQtbW92ZSIpKX1lbHNlIHRoaXMud2lkZ2V0cz10aGlzLndpZGdldHMubWFwKCRlPT4kZS5pZD09PUIud2lkZ2V0SWQ/ey4uLiRlLHg6Qi5zdGFydC54LHk6Qi5zdGFydC55fTokZSk7dGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uPW51bGwsdGhpcy5kcmFnU3RhdGU9bnVsbCx0aGlzLmludGVyYWN0aW9uQWN0aXZlPSExLHRoaXMucmVsZWFzZVBvaW50ZXJFdmVudHMoKX07c3RhcnRSZXNpemUoVSxCLG9lKXshdGhpcy5lZGl0YWJsZXx8Qi5ub1Jlc2l6ZXx8Qi5sb2NrZWR8fChVLnByZXZlbnREZWZhdWx0KCksVS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmVuc3VyZU1ldHJpY3MoKSx0aGlzLnJlc2l6ZVN0YXRlPXt3aWRnZXRJZDpCLmlkLHBvaW50ZXJJZDpVLnBvaW50ZXJJZCxoYW5kbGVyOm9lLHN0YXJ0UG9pbnRlcjp7Y2xpZW50WDpVLmNsaWVudFgsY2xpZW50WTpVLmNsaWVudFl9LHN0YXJ0OntpZDpCLmlkLHg6Qi54LHk6Qi55LHc6Qi53LGg6Qi5ofSxzdGFydFdpZHRoOkIudyxzdGFydEhlaWdodDpCLmgsbGFzdFBsYWNlbWVudDpudWxsfSx0aGlzLmludGVyYWN0aW9uQWN0aXZlPSEwLFUuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShVLnBvaW50ZXJJZCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHRoaXMuaGFuZGxlUmVzaXplTW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIix0aGlzLmhhbmRsZVJlc2l6ZUVuZCksdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uPXtpZDpCLmlkLHg6Qi54LHk6Qi55LHc6Qi53LGg6Qi5ofSl9aGFuZGxlUmVzaXplTW92ZT1VPT57aWYoIXRoaXMucmVzaXplU3RhdGUpcmV0dXJuO2xldCBCPXRoaXMuZW5zdXJlTWV0cmljcygpLG9lPXRoaXMud2lkZ2V0cyx2ZT1vZS5maW5kKG5lPT5uZS5pZD09PXRoaXMucmVzaXplU3RhdGUud2lkZ2V0SWQpO2lmKCF2ZSlyZXR1cm47VS5wcmV2ZW50RGVmYXVsdCgpO2xldCB5ZT1XT3Qoe3BvaW50ZXI6e2NsaWVudFg6VS5jbGllbnRYLGNsaWVudFk6VS5jbGllbnRZfSxjb250YWluZXJSZWN0OnRoaXMuY29udGFpbmVyQm91bmRzPz90aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG1ldHJpY3M6QixzdGFydFdpZHRoOnRoaXMucmVzaXplU3RhdGUuc3RhcnRXaWR0aCxzdGFydEhlaWdodDp0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0SGVpZ2h0LHN0YXJ0UG9pbnRlcjp0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0UG9pbnRlcixoYW5kbGVyOnRoaXMucmVzaXplU3RhdGUuaGFuZGxlcix3aWRnZXQ6dmUsY29sdW1uczp0aGlzLmNvbHVtbnN9KSwkZT1ocyhvZSx2ZS5pZCx7eDp2ZS54LHk6dmUueSx3OnllLndpZHRoLGg6eWUuaGVpZ2h0fSx0aGlzLmNvbHVtbnMsdGhpcy5yZXNpemVTdGF0ZS5zdGFydCk7aWYoJGUpe3RoaXMucmVzaXplU3RhdGU9ey4uLnRoaXMucmVzaXplU3RhdGUsbGFzdFBsYWNlbWVudDokZX0sdGhpcy5wcmV2aWV3V2lkZ2V0cz0kZS53aWRnZXRzO2xldCBuZT0kZS53aWRnZXRzLmZpbmQocmU9PnJlLmlkPT09dmUuaWQpO25lP3RoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj17aWQ6bmUuaWQseDpuZS54LHk6bmUueSx3Om5lLncsaDpuZS5ofTp0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb249e2lkOnZlLmlkLHg6dmUueCx5OnZlLnksdzp5ZS53aWR0aCxoOnllLmhlaWdodH19ZWxzZSB0aGlzLnByZXZpZXdXaWRnZXRzPW51bGwsdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uPW51bGw7dGhpcy5yZXF1ZXN0VXBkYXRlKCl9O2hhbmRsZVJlc2l6ZUVuZD1VPT57bGV0IEI9dGhpcy5yZXNpemVTdGF0ZTtpZighQnx8VS5wb2ludGVySWQhPT1CLnBvaW50ZXJJZClyZXR1cm47bGV0IG9lPXRoaXMud2lkZ2V0czt0aGlzLnByZXZpZXdXaWRnZXRzPW51bGw7bGV0IHZlPUIubGFzdFBsYWNlbWVudD8/aHMob2UsQi53aWRnZXRJZCx7eDp0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24/Lng/P0Iuc3RhcnQueCx5OnRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8ueT8/Qi5zdGFydC55LHc6dGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uPy53Pz9CLnN0YXJ0LncsaDp0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24/Lmg/P0Iuc3RhcnQuaH0sdGhpcy5jb2x1bW5zLEIuc3RhcnQpO3ZlP3RoaXMuY29tbWl0UGxhY2VtZW50KHZlLEIud2lkZ2V0SWQsIndpZGdldC1yZXNpemUiKTp0aGlzLndpZGdldHM9dGhpcy53aWRnZXRzLm1hcCh5ZT0+eWUuaWQ9PT1CLndpZGdldElkP3suLi55ZSx3OkIuc3RhcnQudyxoOkIuc3RhcnQuaH06eWUpLHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj1udWxsLHRoaXMucmVzaXplU3RhdGU9bnVsbCx0aGlzLmludGVyYWN0aW9uQWN0aXZlPSExLHRoaXMucmVsZWFzZVBvaW50ZXJFdmVudHMoKX07aGFuZGxlSGVhZGVyS2V5ZG93bihVLEIpe2lmKCF0aGlzLmVkaXRhYmxlfHxCLm5vTW92ZXx8Qi5sb2NrZWQpcmV0dXJuO2xldCBvZT1VLmtleSx2ZT1VLnNoaWZ0S2V5LHllPW51bGw7aWYodmUmJlsiQXJyb3dMZWZ0IiwiQXJyb3dSaWdodCIsIkFycm93VXAiLCJBcnJvd0Rvd24iXS5pbmNsdWRlcyhvZSkpe1UucHJldmVudERlZmF1bHQoKTtsZXQgRWU9b2U9PT0iQXJyb3dSaWdodCJ8fG9lPT09IkFycm93RG93biI/MTotMTtpZihvZT09PSJBcnJvd0xlZnQifHxvZT09PSJBcnJvd1JpZ2h0Iil7bGV0IHJ0PUIubWF4Vz8/dGhpcy5jb2x1bW5zLUIueCx1ZT1NYXRoLm1heChCLm1pblc/PzEsTWF0aC5taW4ocnQsQi53K0VlKSk7eWU9aHModGhpcy53aWRnZXRzLEIuaWQse3g6Qi54LHk6Qi55LHc6dWUsaDpCLmh9LHRoaXMuY29sdW1ucyl9ZWxzZXtsZXQgcnQ9Qi5tYXhIPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdWU9TWF0aC5tYXgoQi5taW5IPz8xLE1hdGgubWluKHJ0LEIuaCtFZSkpO3llPWhzKHRoaXMud2lkZ2V0cyxCLmlkLHt4OkIueCx5OkIueSx3OkIudyxoOnVlfSx0aGlzLmNvbHVtbnMpfXllJiZ0aGlzLmNvbW1pdFBsYWNlbWVudCh5ZSxCLmlkLCJ3aWRnZXQtcmVzaXplIik7cmV0dXJufWxldCBuZT17QXJyb3dMZWZ0OntkeDotMSxkeTowfSxBcnJvd1JpZ2h0OntkeDoxLGR5OjB9LEFycm93VXA6e2R4OjAsZHk6LTF9LEFycm93RG93bjp7ZHg6MCxkeToxfX1bb2VdO2lmKCFuZSlyZXR1cm47VS5wcmV2ZW50RGVmYXVsdCgpO2xldCByZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuY29sdW1ucy1CLncsQi54K25lLmR4KSksZ2U9TWF0aC5tYXgoMCxCLnkrbmUuZHkpO3llPWhzKHRoaXMud2lkZ2V0cyxCLmlkLHt4OnJlLHk6Z2V9LHRoaXMuY29sdW1ucykseWUmJnRoaXMuY29tbWl0UGxhY2VtZW50KHllLEIuaWQsIndpZGdldC1tb3ZlIil9aGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoVSxCKXtVLnByZXZlbnREZWZhdWx0KCksVS5zdG9wUHJvcGFnYXRpb24oKSxHT3Qoe3dpZGdldDpCLGhvc3Q6dGhpcyxldmVudDpVfSl9Y29tbWl0UGxhY2VtZW50KFUsQixvZSl7dGhpcy5wcmV2aWV3V2lkZ2V0cz1udWxsLHRoaXMud2lkZ2V0cz1VLndpZGdldHM7bGV0IHZlPXRoaXMud2lkZ2V0cy5maW5kKHllPT55ZS5pZD09PUIpO3ZlJiZ0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KG9lLHtkZXRhaWw6e3dpZGdldDp2ZSxkaXNwbGFjZWQ6VS5tb3ZlZFdpZGdldHMuZmlsdGVyKHllPT55ZSE9PUIpLHN3YXBwZWRXaXRoOlUuc3dhcHBlZFdpdGh9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9cmVtb3ZlV2lkZ2V0KFUpe2xldCBCPXRoaXMud2lkZ2V0cy5maW5kKG9lPT5vZS5pZD09PVUpO0ImJih0aGlzLndpZGdldHM9dGhpcy53aWRnZXRzLmZpbHRlcihvZT0+b2UuaWQhPT1VKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ3aWRnZXQtcmVtb3ZlIix7ZGV0YWlsOnt3aWRnZXQ6Qn0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSl9dXBkYXRlV2lkZ2V0KFUsQil7dGhpcy53aWRnZXRzPXRoaXMud2lkZ2V0cy5tYXAob2U9Pm9lLmlkPT09VT97Li4ub2UsLi4uQn06b2UpfWdldExheW91dCgpe3JldHVybiB0aGlzLndpZGdldHMubWFwKCh7aWQ6VSx4OkIseTpvZSx3OnZlLGg6eWV9KT0+KHtpZDpVLHg6Qix5Om9lLHc6dmUsaDp5ZX0pKX1zZXRMYXlvdXQoVSl7dGhpcy53aWRnZXRzPVVPdCh0aGlzLndpZGdldHMsVSl9bG9ja0dyaWQoKXt0aGlzLmVkaXRhYmxlPSExfXVubG9ja0dyaWQoKXt0aGlzLmVkaXRhYmxlPSEwfWFkZFdpZGdldChVLEI9ITEpe2xldCBvZT17Li4uVX07aWYoQnx8b2UuYXV0b1Bvc2l0aW9uKXtsZXQgdmU9ZU5lKHRoaXMud2lkZ2V0cyxvZS53LG9lLmgsdGhpcy5jb2x1bW5zKTtvZS54PXZlLngsb2UueT12ZS55fXRoaXMud2lkZ2V0cz1bLi4udGhpcy53aWRnZXRzLG9lXX1jb21wYWN0KFU9InZlcnRpY2FsIil7bGV0IEI9dGhpcy53aWRnZXRzLm1hcChvZT0+KHsuLi5vZX0pKTtWT3QoQixVKSx0aGlzLndpZGdldHM9Qn1hcHBseUJyZWFrcG9pbnRMYXlvdXQoVSl7dGhpcy5hY3RpdmVCcmVha3BvaW50PVU7bGV0IEI9dGhpcy5sYXlvdXRzPy5bVV07QiYmdGhpcy5zZXRMYXlvdXQoQil9bm90aWZ5TGF5b3V0Q2hhbmdlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibGF5b3V0LWNoYW5nZSIse2RldGFpbDp7bGF5b3V0OnRoaXMuZ2V0TGF5b3V0KCl9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9ZW5zdXJlTWV0cmljcygpe3JldHVybiB0aGlzLm1ldHJpY3N8fHRoaXMuY29tcHV0ZU1ldHJpY3MoKSx0aGlzLm1ldHJpY3N9Y29tcHV0ZU1ldHJpY3MoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm47bGV0IFU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLmNvbnRhaW5lckJvdW5kcz1VO2xldCBCPUpFZSh0aGlzLm1hcmdpbik7dGhpcy5yZXNvbHZlZE1hcmdpbnM9Qix0aGlzLm1ldHJpY3M9SE90KFUud2lkdGgsdGhpcy5jb2x1bW5zLEIsdGhpcy5jZWxsSGVpZ2h0LHRoaXMuY2VsbEhlaWdodFVuaXQpfW9ic2VydmVSZXNpemUoKXt0aGlzLnJlc2l6ZU9ic2VydmVyfHwodGhpcy5yZXNpemVPYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9Pnt0aGlzLmNvbXB1dGVNZXRyaWNzKCl9KSx0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcykpfWRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpe3RoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKSx0aGlzLnJlc2l6ZU9ic2VydmVyPXZvaWQgMH1yZWxlYXNlUG9pbnRlckV2ZW50cygpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix0aGlzLmhhbmRsZURyYWdNb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHRoaXMuaGFuZGxlRHJhZ0VuZCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHRoaXMuaGFuZGxlUmVzaXplTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIix0aGlzLmhhbmRsZVJlc2l6ZUVuZCl9cHhUb1BlcmNlbnQoVSxCKXtyZXR1cm4gQj9OdW1iZXIoKFUvQioxMDApLnRvRml4ZWQoNCkpOjB9Y29tcHV0ZVdpZGdldFJlY3QoVSxCLG9lKXtsZXQgdmU9Qi5jZWxsV2lkdGhQeCx5ZT1CLmNlbGxIZWlnaHRQeCwkZT1VLngqKHZlK29lLmhvcml6b250YWwpK29lLmhvcml6b250YWwsbmU9VS55Kih5ZStvZS52ZXJ0aWNhbCkrb2UudmVydGljYWwscmU9VS53KnZlK01hdGgubWF4KDAsVS53LTEpKm9lLmhvcml6b250YWwsZ2U9VS5oKnllK01hdGgubWF4KDAsVS5oLTEpKm9lLnZlcnRpY2FsO3JldHVybntsZWZ0OiRlLHRvcDpuZSx3aWR0aDpyZSxoZWlnaHQ6Z2V9fXN0YXRpY3tIdChyLGEpfX07cmV0dXJuIE9lPXJ9KSgpO2ZlKCk7ZnVuY3Rpb24gWU90KCl7cmV0dXJuIE1gCiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSIxIj5UaGlzIGlzIGEgSDEgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iMiI+VGhpcyBpcyBhIEgyIGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjMiPlRoaXMgaXMgYSBIMyBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSI0Ij5UaGlzIGlzIGEgSDQgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iNSI+VGhpcyBpcyBhIEg1IGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjYiPlRoaXMgaXMgYSBINiBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSJociI+VGhpcyBpcyBhbiBociBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSJoci1zbWFsbCI+VGhpcyBpcyBhbiBociBzbWFsbCBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgYH1mZSgpO0JlKCk7dmFyIFpPdD1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LHROZT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sTW4xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1oZWFkaW5nIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W107dmFyIGY9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6U3RyaW5nLHJlZmxlY3Q6ITB9KV0sWk90KHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGV2ZWwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnU9PiJsZXZlbCJpbiB1LGdldDp1PT51LmxldmVsLHNldDoodSxkKT0+e3UubGV2ZWw9ZH19LG1ldGFkYXRhOmN9LHMsbCksWk90KG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOmN9LG51bGwsYSksZj1yPWUudmFsdWUsYyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpjfSl9c3RhdGljIGRlbW89WU90OyNlPXROZSh0aGlzLHMsIjEiKTtnZXQgbGV2ZWwoKXtyZXR1cm4gdGhpcy4jZX1zZXQgbGV2ZWwoYyl7dGhpcy4jZT1jfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgLyogSGVhZGluZyBzdHlsZXMgKi8KICAgICAgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7CiAgICAgICAgbWFyZ2luOiAxNnB4IDAgOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDAwIiwiI2ZmZiIpfTsKICAgICAgfQogICAgICBoMSB7IGZvbnQtc2l6ZTogMzJweDsgZm9udC1mYW1pbHk6ICR7T0l0fTsgbGV0dGVyLXNwYWNpbmc6IDAuMDI1ZW07fQogICAgICBoMiB7IGZvbnQtc2l6ZTogMjhweDsgfQogICAgICBoMyB7IGZvbnQtc2l6ZTogMjRweDsgfQogICAgICBoNCB7IGZvbnQtc2l6ZTogMjBweDsgfQogICAgICBoNSB7IGZvbnQtc2l6ZTogMTZweDsgfQogICAgICBoNiB7IGZvbnQtc2l6ZTogMTRweDsgfQogICAgICAvKiBIb3Jpem9udGFsIHJ1bGUgc3R5bGUgaGVhZGluZyAqLwogICAgICAuaGVhZGluZy1ociB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDE2cHggMDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwMDAiLCIjZmZmIil9OwogICAgICB9CiAgICAgIC8qIEZhZGUgbGluZXMgdG93YXJkIGFuZCBhd2F5IGZyb20gdGV4dCBmb3IgaHIgc3R5bGUgKi8KICAgICAgLmhlYWRpbmctaHI6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgZmxleDogMTsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICAvKiBmYWRlIGluIHRvd2FyZCBjZW50ZXIgKi8KICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCwgI2NjYykiLCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCAjMzMzKSIpfTsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICB9CiAgICAgIC5oZWFkaW5nLWhyOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgZmxleDogMTsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICAvKiBmYWRlIG91dCBhd2F5IGZyb20gY2VudGVyICovCiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2NjYywgdHJhbnNwYXJlbnQpIiwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMzMzLCB0cmFuc3BhcmVudCkiKX07CiAgICAgICAgbWFyZ2luOiAwIDhweDsKICAgICAgfQogICAgICAvKiBTbWFsbCBociB2YXJpYW50IHdpdGggcmVkdWNlZCBtYXJnaW5zICovCiAgICAgIC5oZWFkaW5nLWhyLmhlYWRpbmctaHItc21hbGwgewogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CiAgICAgIC5oZWFkaW5nLWhyLmhlYWRpbmctaHItc21hbGw6OmJlZm9yZSwKICAgICAgLmhlYWRpbmctaHIuaGVhZGluZy1oci1zbWFsbDo6YWZ0ZXIgewogICAgICAgIG1hcmdpbjogMCA4cHg7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3N3aXRjaCh0aGlzLmxldmVsKXtjYXNlIjEiOnJldHVybiBNYDxoMT48c2xvdD48L3Nsb3Q+PC9oMT5gO2Nhc2UiMiI6cmV0dXJuIE1gPGgyPjxzbG90Pjwvc2xvdD48L2gyPmA7Y2FzZSIzIjpyZXR1cm4gTWA8aDM+PHNsb3Q+PC9zbG90PjwvaDM+YDtjYXNlIjQiOnJldHVybiBNYDxoND48c2xvdD48L3Nsb3Q+PC9oND5gO2Nhc2UiNSI6cmV0dXJuIE1gPGg1PjxzbG90Pjwvc2xvdD48L2g1PmA7Y2FzZSI2IjpyZXR1cm4gTWA8aDY+PHNsb3Q+PC9zbG90PjwvaDY+YDtjYXNlImhyIjpyZXR1cm4gTWA8ZGl2IGNsYXNzPSJoZWFkaW5nLWhyIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtjYXNlImhyLXNtYWxsIjpyZXR1cm4gTWA8ZGl2IGNsYXNzPSJoZWFkaW5nLWhyIGhlYWRpbmctaHItc21hbGwiPjxzbG90Pjwvc2xvdD48L2Rpdj5gO2RlZmF1bHQ6cmV0dXJuIE1gPGgxPjxzbG90Pjwvc2xvdD48L2gxPmB9fWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0TmUodGhpcyxsKX1zdGF0aWN7dE5lKHIsYSl9fTtyZXR1cm4gZj1yfSkoKTtmZSgpO3ZhciBYT3Q9KCk9Pk1gCiAgPGRlZXMtaGludD48L2RlZXMtaGludD4KYDtmZSgpO1N0KCk7QmUoKTt2YXIgUU90PWZ1bmN0aW9uKHQsZSxhLHIsaSxvKXtmdW5jdGlvbiBzKHYpe2lmKHYhPT12b2lkIDAmJnR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHZ9Zm9yKHZhciBsPXIua2luZCxmPWw9PT0iZ2V0dGVyIj8iZ2V0IjpsPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P3Iuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCx1PWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxyLm5hbWUpOnt9KSxkLGg9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgYj17fTtmb3IodmFyIHggaW4gciliW3hdPXg9PT0iYWNjZXNzIj97fTpyW3hdO2Zvcih2YXIgeCBpbiByLmFjY2VzcyliLmFjY2Vzc1t4XT1yLmFjY2Vzc1t4XTtiLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHYpe2lmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7by5wdXNoKHModnx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShsPT09ImFjY2Vzc29yIj97Z2V0OnUuZ2V0LHNldDp1LnNldH06dVtmXSxiKTtpZihsPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPXMobS5nZXQpKSYmKHUuZ2V0PWQpLChkPXMobS5zZXQpKSYmKHUuc2V0PWQpLChkPXMobS5pbml0KSkmJmkudW5zaGlmdChkKX1lbHNlKGQ9cyhtKSkmJihsPT09ImZpZWxkIj9pLnVuc2hpZnQoZCk6dVtmXT1kKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxyLm5hbWUsdSksaD0hMH0sYU5lPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSx6bjE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLWhpbnQiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXTt2YXIgZj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpTdHJpbmd9KV0sUU90KHRoaXMsbnVsbCxvLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidHlwZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dT0+InR5cGUiaW4gdSxnZXQ6dT0+dS50eXBlLHNldDoodSxkKT0+e3UudHlwZT1kfX0sbWV0YWRhdGE6Y30scyxsKSxRT3QobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6Y30sbnVsbCxhKSxmPXI9ZS52YWx1ZSxjJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmN9KX1zdGF0aWMgZGVtbz1YT3Q7I2U9YU5lKHRoaXMscywiaW5mbyIpO2dldCB0eXBlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHR5cGUoYyl7dGhpcy4jZT1jfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxhTmUodGhpcyxsKSxjMS5zZXR1cCgpfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYCA8ZGl2IGNsYXNzPSJtYWluYm94Ij48L2Rpdj4gYH1zdGF0aWN7YU5lKHIsYSl9fTtyZXR1cm4gZj1yfSkoKTtGdCgpO2ZlKCk7RnQoKTtCZSgpO3ZhciBfaj1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LGZjPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxrbjE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLW1vYmlsZW5hdmlnYXRpb24iKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXTt2YXIgYj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IHg9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpTdHJpbmd9KV0sZj1bRCh7dHlwZTpBcnJheX0pXSxkPVtsZSgpXSxfaih0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImhlYWRpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJoZWFkaW5nImluIG0sZ2V0Om09Pm0uaGVhZGluZyxzZXQ6KG0sdik9PnttLmhlYWRpbmc9dn19LG1ldGFkYXRhOnh9LHMsbCksX2oodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtZW51SXRlbXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJtZW51SXRlbXMiaW4gbSxnZXQ6bT0+bS5tZW51SXRlbXMsc2V0OihtLHYpPT57bS5tZW51SXRlbXM9dn19LG1ldGFkYXRhOnh9LGMsdSksX2oodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtb2JpbGVOYXZaSW5kZXgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJtb2JpbGVOYXZaSW5kZXgiaW4gbSxnZXQ6bT0+bS5tb2JpbGVOYXZaSW5kZXgsc2V0OihtLHYpPT57bS5tb2JpbGVOYXZaSW5kZXg9dn19LG1ldGFkYXRhOnh9LGgsZyksX2oobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6eH0sbnVsbCxhKSxiPXI9ZS52YWx1ZSx4JiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnh9KX1zdGF0aWMgZGVtbz0oKT0+TWAKICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e2IuY3JlYXRlQW5kU2hvdyhbe25hbWU6IkRhc2hib2FyZCIsaWNvbk5hbWU6Imx1Y2lkZTpsYXlvdXQtZGFzaGJvYXJkIixhY3Rpb246YXN5bmMgeD0+KGNvbnNvbGUubG9nKCJOYXZpZ2F0ZSB0byBkYXNoYm9hcmQiKSxudWxsKX0se25hbWU6IlByb2ZpbGUiLGljb25OYW1lOiJsdWNpZGU6dXNlciIsYWN0aW9uOmFzeW5jIHg9Pihjb25zb2xlLmxvZygiTmF2aWdhdGUgdG8gcHJvZmlsZSIpLG51bGwpfSx7bmFtZToiU2V0dGluZ3MiLGljb25OYW1lOiJsdWNpZGU6c2V0dGluZ3MiLGFjdGlvbjphc3luYyB4PT4oY29uc29sZS5sb2coIk5hdmlnYXRlIHRvIHNldHRpbmdzIiksbnVsbCl9LHtkaXZpZGVyOiEwfSx7bmFtZToiSGVscCIsaWNvbk5hbWU6Imx1Y2lkZTpoZWxwLWNpcmNsZSIsYWN0aW9uOmFzeW5jIHg9Pihjb25zb2xlLmxvZygiU2hvdyBoZWxwIiksbnVsbCl9LHtuYW1lOiJTaWduIE91dCIsaWNvbk5hbWU6Imx1Y2lkZTpsb2ctb3V0IixhY3Rpb246YXN5bmMgeD0+KGNvbnNvbGUubG9nKCJTaWduIG91dCIpLG51bGwpfV0pfX0+T3BlbiBNb2JpbGUgTmF2aWdhdGlvbjwvZGVlcy1idXR0b24+CiAgYDtzdGF0aWMgc2luZ2xldG9uUmVmO3N0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KHgpe3JldHVybiB0aGlzLnNpbmdsZXRvblJlZnx8KHRoaXMuc2luZ2xldG9uUmVmPW5ldyBiLGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuc2luZ2xldG9uUmVmKSxhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5pbml0KCkpLHRoaXMuc2luZ2xldG9uUmVmLm1lbnVJdGVtcz14LGF3YWl0IHRoaXMuc2luZ2xldG9uUmVmLnJlYWR5RGVmZXJyZWQucHJvbWlzZSx0aGlzLnNpbmdsZXRvblJlZi5zaG93KCksdGhpcy5zaW5nbGV0b25SZWZ9I2U9ZmModGhpcyxzLCJNZW51Iik7Z2V0IGhlYWRpbmcoKXtyZXR1cm4gdGhpcy4jZX1zZXQgaGVhZGluZyh4KXt0aGlzLiNlPXh9I3Q9KGZjKHRoaXMsbCksZmModGhpcyxjLFtdKSk7Z2V0IG1lbnVJdGVtcygpe3JldHVybiB0aGlzLiN0fXNldCBtZW51SXRlbXMoeCl7dGhpcy4jdD14fSNhPShmYyh0aGlzLHUpLGZjKHRoaXMsaCwxZTMpKTtnZXQgbW9iaWxlTmF2WkluZGV4KCl7cmV0dXJuIHRoaXMuI2F9c2V0IG1vYmlsZU5hdlpJbmRleCh4KXt0aGlzLiNhPXh9cmVhZHlEZWZlcnJlZD0oZmModGhpcyxnKSxzdC5wbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpKTtjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9YXN5bmMgaW5pdCgpe2F3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsdGhpcy5yZWFkeURlZmVycmVkLnJlc29sdmUoKX1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogJHtKdH07CiAgICAgIH0KCiAgICAgIC5tYWluIHsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAzMjBweDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgICB6LWluZGV4OiB2YXIoLS16LWluZGV4KTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHJpZ2h0OiAwcHg7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6ICR7cC5iZFRoZW1lKCItMjBweCAwIDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMSksIC0xMHB4IDAgMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4wNCkiLCItMjBweCAwIDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMyksIC0xMHB4IDAgMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5tYWluLnNob3cgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDBweCk7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5tZW51LWNvbnRhaW5lciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNlNWU3ZWIiLCIjM2YzZjQ2Iil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSBkZWVzLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS1kaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgbWFyZ2luOiA4cHggMTZweDsKICAgICAgfQoKICAgICAgLyogTW9iaWxlIHJlc3BvbnNpdmVuZXNzICovCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0MDBweCkgewogICAgICAgIC5tYWluIHsKICAgICAgICAgIG1heC13aWR0aDogMTAwdnc7CiAgICAgICAgICB3aWR0aDogODV2dzsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIEFuaW1hdGlvbiBmb3IgbWVudSBpdGVtcyAqLwogICAgICBAa2V5ZnJhbWVzIHNsaWRlSW5SaWdodCB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDIwcHgpOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm1haW4uc2hvdyAubWVudUl0ZW0gewogICAgICAgIGFuaW1hdGlvbjogc2xpZGVJblJpZ2h0IDAuM3MgZWFzZS1vdXQgZm9yd2FyZHM7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiBjYWxjKHZhcigtLWl0ZW0taW5kZXgsIDApICogMC4wNXMpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC8qIFNjcm9sbGJhciBzdHlsaW5nICovCiAgICAgIC5tZW51LWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgIH0KCiAgICAgIC5tZW51LWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAubWVudS1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2U1ZTdlYiIsIiMzZjNmNDYiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAubWVudS1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2QxZDVkYiIsIiM1MjUyNWIiKX07CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiBNYAogICAgICA8c3R5bGU+CiAgICAgICAgLm1haW4gewogICAgICAgICAgLS16LWluZGV4OiAke3RoaXMubW9iaWxlTmF2WkluZGV4fTsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1haW4iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8aDIgY2xhc3M9ImhlYWRpbmciPiR7dGhpcy5oZWFkaW5nfTwvaDI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVudS1jb250YWluZXIiPgogICAgICAgICAgJHt0aGlzLm1lbnVJdGVtcy5tYXAoKHgsbSk9PiJkaXZpZGVyImluIHgmJnguZGl2aWRlcj9NYDxkaXYgY2xhc3M9Im1lbnVJdGVtLWRpdmlkZXIiPjwvZGl2PmA6TWAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0ibWVudUl0ZW0iCiAgICAgICAgICAgICAgICBzdHlsZT0iLS1pdGVtLWluZGV4OiAke219IgogICAgICAgICAgICAgICAgQGNsaWNrPSIkeygpPT57dGhpcy5oaWRlKCkseC5hY3Rpb24odGhpcyl9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAke3guaWNvbk5hbWU/TWAKICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3guaWNvbk5hbWV9IHNpemU9IjIwIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudUl0ZW0tdGV4dCI+JHt4Lm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXdpbmRvd0xheWVyO2FzeW5jIHNob3coKXtsZXQgeD1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZSxtPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbiIpO3RoaXMud2luZG93TGF5ZXI/KGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMud2luZG93TGF5ZXIpLGF3YWl0IHRoaXMud2luZG93TGF5ZXIuc2hvdygpKToodGhpcy53aW5kb3dMYXllcj1hd2FpdCBLYS5jcmVhdGVBbmRTaG93KHtibHVyOiEwfSksdGhpcy53aW5kb3dMYXllci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pnt0aGlzLmhpZGUoKX0pKSx0aGlzLm1vYmlsZU5hdlpJbmRleD1zMS5nZXROZXh0WkluZGV4KCksczEucmVnaXN0ZXIodGhpcyx0aGlzLm1vYmlsZU5hdlpJbmRleCksYXdhaXQgeC5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDEwKSxtLmNsYXNzTGlzdC5hZGQoInNob3ciKX1hc3luYyBoaWRlKCl7bGV0IHg9YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluIikuY2xhc3NMaXN0LnJlbW92ZSgic2hvdyIpLHMxLnVucmVnaXN0ZXIodGhpcyksdGhpcy53aW5kb3dMYXllciYmYXdhaXQgdGhpcy53aW5kb3dMYXllci5kZXN0cm95KCl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHMxLnVucmVnaXN0ZXIodGhpcyksdGhpcy53aW5kb3dMYXllciYmYXdhaXQgdGhpcy53aW5kb3dMYXllci5kZXN0cm95KCl9c3RhdGlje2ZjKHIsYSl9fTtyZXR1cm4gYj1yfSkoKTtmZSgpO3ZhciBLT3Q9KCk9Pk1gCiAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxNnB4OyI+CiAgICA8IS0tIFNtYWxsIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjUgcGFnZXMsIHN0YXJ0aW5nIGF0IDE6PC9zcGFuPgogICAgICA8ZGVlcy1wYWdpbmF0aW9uCiAgICAgICAgLnRvdGFsPSR7NX0KICAgICAgICAucGFnZT0kezF9CiAgICAgICAgQHBhZ2UtY2hhbmdlPSR7dD0+Y29uc29sZS5sb2coIlBhZ2UgY2hhbmdlZCB0byIsdC5kZXRhaWwucGFnZSl9CiAgICAgID48L2RlZXMtcGFnaW5hdGlvbj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTGFyZ2VyIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjE1IHBhZ2VzLCBzdGFydGluZyBhdCA4Ojwvc3Bhbj4KICAgICAgPGRlZXMtcGFnaW5hdGlvbgogICAgICAgIC50b3RhbD0kezE1fQogICAgICAgIC5wYWdlPSR7OH0KICAgICAgICBAcGFnZS1jaGFuZ2U9JHt0PT5jb25zb2xlLmxvZygiUGFnZSBjaGFuZ2VkIHRvIix0LmRldGFpbC5wYWdlKX0KICAgICAgPjwvZGVlcy1wYWdpbmF0aW9uPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7ZmUoKTtCZSgpO3ZhciByTmU9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxWST1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sU24xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1wYWdpbmF0aW9uIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W107dmFyIGQ9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBoPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6TnVtYmVyLHJlZmxlY3Q6ITB9KV0sZj1bRCh7dHlwZTpOdW1iZXIscmVmbGVjdDohMH0pXSxyTmUodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwYWdlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4icGFnZSJpbiBnLGdldDpnPT5nLnBhZ2Usc2V0OihnLGIpPT57Zy5wYWdlPWJ9fSxtZXRhZGF0YTpofSxzLGwpLHJOZSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRvdGFsIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4idG90YWwiaW4gZyxnZXQ6Zz0+Zy50b3RhbCxzZXQ6KGcsYik9PntnLnRvdGFsPWJ9fSxtZXRhZGF0YTpofSxjLHUpLHJOZShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpofSxudWxsLGEpLGQ9cj1lLnZhbHVlLGgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6aH0pfXN0YXRpYyBkZW1vPUtPdDsjZT1WSSh0aGlzLHMsMSk7Z2V0IHBhZ2UoKXtyZXR1cm4gdGhpcy4jZX1zZXQgcGFnZShoKXt0aGlzLiNlPWh9I3Q9KFZJKHRoaXMsbCksVkkodGhpcyxjLDEpKTtnZXQgdG90YWwoKXtyZXR1cm4gdGhpcy4jdH1zZXQgdG90YWwoaCl7dGhpcy4jdD1ofXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KICAgICAgYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBtYXJnaW46IDAgMnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzIiwiI2NjYyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CiAgICAgIGJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNlZWUiLCIjNDQ0Iil9OwogICAgICB9CiAgICAgIGJ1dHRvbjpkaXNhYmxlZCB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiI2FhYSIsIiM2NjYiKX07CiAgICAgIH0KICAgICAgYnV0dG9uLmN1cnJlbnQgewogICAgICAgIGJhY2tncm91bmQ6ICMwMDUwYjk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CiAgICAgIHNwYW4uZWxsaXBzaXMgewogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzIiwiI2NjYyIpfTsKICAgICAgfQogICAgYF07Z2V0IHBhZ2VzKCl7bGV0IGg9W10sZz10aGlzLnRvdGFsLGI9dGhpcy5wYWdlO2lmKGc8PTcpZm9yKGxldCB4PTE7eDw9Zzt4KyspaC5wdXNoKHgpO2Vsc2V7aC5wdXNoKDEpLGI+NCYmaC5wdXNoKCIuLi4iKTtsZXQgeD1NYXRoLm1heCgyLGItMiksbT1NYXRoLm1pbihnLTEsYisyKTtmb3IobGV0IHY9eDt2PD1tO3YrKyloLnB1c2godik7YjxnLTMmJmgucHVzaCgiLi4uIiksaC5wdXNoKGcpfXJldHVybiBofXJlbmRlcigpe3JldHVybiBNYAogICAgICA8YnV0dG9uCiAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMuY2hhbmdlUGFnZSh0aGlzLnBhZ2UtMSl9CiAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5wYWdlPD0xfQogICAgICAgIGFyaWEtbGFiZWw9IlByZXZpb3VzIHBhZ2UiCiAgICAgID4KICAgICAgICDigLkKICAgICAgPC9idXR0b24+CiAgICAgICR7dGhpcy5wYWdlcy5tYXAoaD0+aD09PSIuLi4iP01gPHNwYW4gY2xhc3M9ImVsbGlwc2lzIj7igKY8L3NwYW4+YDpNYAogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSIke2g9PT10aGlzLnBhZ2U/ImN1cnJlbnQiOiIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLmNoYW5nZVBhZ2UoaCl9CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtoPT09dGhpcy5wYWdlfQogICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iUGFnZSAke2h9IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICR7aH0KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgYCl9CiAgICAgIDxidXR0b24KICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5jaGFuZ2VQYWdlKHRoaXMucGFnZSsxKX0KICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnBhZ2U+PXRoaXMudG90YWx9CiAgICAgICAgYXJpYS1sYWJlbD0iTmV4dCBwYWdlIgogICAgICA+CiAgICAgICAg4oC6CiAgICAgIDwvYnV0dG9uPgogICAgYH1jaGFuZ2VQYWdlKGgpe2g8MXx8aD50aGlzLnRvdGFsfHxoPT09dGhpcy5wYWdlfHwodGhpcy5wYWdlPWgsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicGFnZS1jaGFuZ2UiLHtkZXRhaWw6e3BhZ2U6dGhpcy5wYWdlfSxidWJibGVzOiEwfSkpKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksVkkodGhpcyx1KX1zdGF0aWN7VkkocixhKX19O3JldHVybiBkPXJ9KSgpO2ZlKCk7dmFyIEpPdD0oKT0+TWAKICAgIDxkZWVzLXByb2dyZXNzYmFyCiAgICAgIC5wZXJjZW50YWdlPSR7NTB9CiAgICA+PC9kZWVzLXByb2dyZXNzYmFyPgogIGA7ZmUoKTtTdCgpO0JlKCk7dmFyIGVCdD1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LGlOZT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sQ24xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1wcm9ncmVzc2JhciIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdO3ZhciBmPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgYz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOk51bWJlcn0pXSxlQnQodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwZXJjZW50YWdlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp1PT4icGVyY2VudGFnZSJpbiB1LGdldDp1PT51LnBlcmNlbnRhZ2Usc2V0Oih1LGQpPT57dS5wZXJjZW50YWdlPWR9fSxtZXRhZGF0YTpjfSxzLGwpLGVCdChudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpjfSxudWxsLGEpLGY9cj1lLnZhbHVlLGMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Y30pfXN0YXRpYyBkZW1vPUpPdDsjZT1pTmUodGhpcyxzLDApO2dldCBwZXJjZW50YWdlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHBlcmNlbnRhZ2UoYyl7dGhpcy4jZT1jfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZShHbC50ZXh0LFBhLnRleHQpfTsKICAgICAgfQogICAgICAucHJvZ3Jlc3NCYXJDb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBtaW4td2lkdGg6IDIwMHB4OwogICAgICB9CgogICAgICAucHJvZ3Jlc3NCYXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZWVlZWViIiwiIzQ0NCIpfTsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMC41cHggc29saWQgJHtwLmJkVGhlbWUoIm5vbmUiLCIjNTU1Iil9OwogICAgICB9CgogICAgICAucHJvZ3Jlc3NCYXJGaWxsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZShQYS5ibHVlQWN0aXZlLEdsLmJsdWVBY3RpdmUpfTsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMC41cHg7CiAgICAgICAgdHJhbnNpdGlvbjogMC4ycyB3aWR0aDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgd2lkdGg6IDBweDsKICAgICAgICBib3JkZXItdG9wOiAwLjUgc29saWQgJHtwLmJkVGhlbWUoIm5vbmUiLCIjMzk4ZmZmIil9OwogICAgICB9CgogICAgICAucHJvZ3Jlc3NUZXh0IHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3NCYXJDb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzQmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzQmFyRmlsbCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzc1RleHQiPgogICAgICAgICAgICAke3RoaXMucGVyY2VudGFnZX0lCiAgICAgICAgICA8ZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9Zmlyc3RVcGRhdGVkKGMpe3N1cGVyLmZpcnN0VXBkYXRlZChjKSx0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9Pnt0aGlzLnVwZGF0ZVBlcmNlbnRhZ2UoKX0pfWFzeW5jIHVwZGF0ZVBlcmNlbnRhZ2UoKXtsZXQgYz10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnByb2dyZXNzQmFyRmlsbCIpO2Muc3R5bGUud2lkdGg9YCR7dGhpcy5wZXJjZW50YWdlfSVgfXVwZGF0ZWQoKXt0aGlzLnVwZGF0ZVBlcmNlbnRhZ2UoKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksaU5lKHRoaXMsbCl9c3RhdGlje2lOZShyLGEpfX07cmV0dXJuIGY9cn0pKCk7ZmUoKTt2YXIgdEJ0PSgpPT5NYAogICAgPHN0eWxlPgogICAgICAuZGVtb1dyYXBwZXIgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAKICAgICAgICBiYWNrZ3JvdW5kOiAjODg4ODg4OwogICAgICB9CiAgICAgIC5sb2dzIHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIHdpZHRoOiA2MDBweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CiAgICAgIC5sb2dzIGRpdiB7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImRlbW9XcmFwcGVyIj4KICAgICAgPGRlZXMtc2VhcmNoYmFyCiAgICAgICAgQHNlYXJjaC1jaGFuZ2VkPSR7YT0+e2xldCBpPWEudGFyZ2V0LmNsb3Nlc3QoIi5kZW1vV3JhcHBlciIpPy5xdWVyeVNlbGVjdG9yKCIjY2hhbmdlZCIpO2kmJihpLnRleHRDb250ZW50PWBzZWFyY2gtY2hhbmdlZDogJHthLmRldGFpbC52YWx1ZX1gKX19CiAgICAgICAgQHNlYXJjaC1zdWJtaXQ9JHthPT57bGV0IGk9YS50YXJnZXQuY2xvc2VzdCgiLmRlbW9XcmFwcGVyIik/LnF1ZXJ5U2VsZWN0b3IoIiNzdWJtaXR0ZWQiKTtpJiYoaS50ZXh0Q29udGVudD1gc2VhcmNoLXN1Ym1pdDogJHthLmRldGFpbC52YWx1ZX1gKX19CiAgICAgID48L2RlZXMtc2VhcmNoYmFyPgogICAgICA8ZGl2IGNsYXNzPSJsb2dzIj4KICAgICAgICA8ZGl2IGlkPSJjaGFuZ2VkIj5zZWFyY2gtY2hhbmdlZDo8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzdWJtaXR0ZWQiPnNlYXJjaC1zdWJtaXQ6PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtmZSgpO0JlKCk7dmFyIGFCdD1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LG9OZT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sTG4xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy1zZWFyY2hiYXIiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXTt2YXIgZj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCgpXSxhQnQodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJmaWx0ZXJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp1PT4iZmlsdGVycyJpbiB1LGdldDp1PT51LmZpbHRlcnMsc2V0Oih1LGQpPT57dS5maWx0ZXJzPWR9fSxtZXRhZGF0YTpjfSxzLGwpLGFCdChudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpjfSxudWxsLGEpLGY9cj1lLnZhbHVlLGMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Y30pfXN0YXRpYyBkZW1vPXRCdDtzdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBEZWVzIFNhbnM7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNlZWVlZWIiLCIjMDAwMDAwIil9OwogICAgICB9CgogICAgICAuc2VhcmNoYm94Q29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIG1heC13aWR0aDogODAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiMwMDAwMDAxNSIsIiNmZmZmZmYxNSIpfTsKICAgICAgICAtLWJveEhlaWdodDogNjBweDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWJveEhlaWdodCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm94SGVpZ2h0KTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDE0MHB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjMDAwMDAwMTUiLCIjZmZmZmZmMjAiKX07CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDAwMDAwIiwiI2VlZWVlYiIpfTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDI1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtOHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICB9CgogICAgICAuc2VhcmNoQnV0dG9uIHsKICAgICAgICAtLWJ1dHRvblBhZGRpbmc6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2VlZWVlYiIsIiMwMDAwMDAiKX07CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDAwMDAwIiwiI2VlZWVlYiIpfTsKICAgICAgICBsaW5lLWhlaWdodDogY2FsYyh2YXIoLS1ib3hIZWlnaHQpIC0gKHZhcigtLWJ1dHRvblBhZGRpbmcpICogMikpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJveEhlaWdodCk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSA7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgCiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMXMsIGJhY2tncm91bmQgMC4xczsKICAgICAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLWJ1dHRvblBhZGRpbmcpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc2VhcmNoQnV0dG9uOmhvdmVyIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZShHbC5ibHVlLFBhLmJsdWUpfTsKICAgICAgfQoKICAgICAgLnNlYXJjaEJ1dHRvbjphY3RpdmUgewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKEdsLmJsdWVBY3RpdmUsUGEuYmx1ZUFjdGl2ZSl9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KCiAgICAgIC5maWx0ZXJzIHsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgfQogICAgYF07I2U9b05lKHRoaXMscyxbXSk7Z2V0IGZpbHRlcnMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgZmlsdGVycyhjKXt0aGlzLiNlPWN9c2VhcmNoSW5wdXQ9b05lKHRoaXMsbCk7c2VhcmNoQnV0dG9uO2NvbnN0cnVjdG9yKCl7c3VwZXIoKX1yZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoYm94Q29udGFpbmVyIj4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IllvdXIgU2tpbGxzIChlLmcuIFR5cGVTY3JpcHQsIFJ1c3QsIFByb2plY3RtYW5hZ2VtZW50KSIgLz4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hCdXR0b24iPlNlYXJjaCAtPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLmZpbHRlcnMubGVuZ3RoPjA/TWAKICAgICAgICA8ZGl2IGNsYXNzPSJmaWx0ZXJzIj4KICAgICAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSJoci1zbWFsbCI+RmlsdGVyczwvZGVlcy1oZWFkaW5nPgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duIC5sYWJlbD0keyJsb2NhdGlvbiJ9PjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgPC9kaXY+ICAKICAgICAgYDpNYGB9CiAgICBgfWZpcnN0VXBkYXRlZCgpe3RoaXMuc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCgpPT57dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoLWNoYW5nZWQiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwLGRldGFpbDp7dmFsdWU6dGhpcy5zZWFyY2hJbnB1dC52YWx1ZX19KSl9KSx0aGlzLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGM9PntjLmtleT09PSJFbnRlciImJnRoaXMuX2Rpc3BhdGNoU3VibWl0KCl9KSx0aGlzLnNlYXJjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PnRoaXMuX2Rpc3BhdGNoU3VibWl0KCkpfV9kaXNwYXRjaFN1Ym1pdCgpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlYXJjaC1zdWJtaXQiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwLGRldGFpbDp7dmFsdWU6dGhpcy5zZWFyY2hJbnB1dC52YWx1ZX19KSl9c3RhdGlje29OZShyLGEpfX07cmV0dXJuIGY9cn0pKCk7ZmUoKTt2YXIgckJ0PSgpPT5NYAogICAgPHN0eWxlPgogICAgICAucmVmMSB7CiAgICAgICAgbWFyZ2luOiAyMHB4OwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJyZWYxIj48L2Rpdj4KICAgIDxkZWVzLXNwZWVjaGJ1YmJsZSAudGV4dD0ke2AKICAgICAgKipUaGlzIGlzIGEgbG9uZ2VyIG1hcmtkb3duIHRleHQgdGhhdCAgY2FuIGJlIHVzZWQgdGhlIHdyaXRlKiogIAogICAgICBhIGxvbmdlciBkZXNjcmlwdGlvbiBhYm91dCB3aGF0cyBnb2luZyBvbiB0aGUgYXBwICAKICAKICAgICAgKipUaGlzIGlzIGEgc3ViaGVhZGVyKioKICAgICAgYW5kIGFub3RoZXIgdGV4dAogICAgCiAgICBgfT48L2RlZXMtc3BlZWNoYnViYmxlPgogIGA7ZmUoKTtCZSgpO3ZhciB2NT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LHByPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxUbjE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLXNwZWVjaGJ1YmJsZSIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdO3ZhciBFPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgQz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOk9iamVjdH0pXSxmPVtEKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLGQ9W0Qoe3R5cGU6Qm9vbGVhbn0pXSxiPVtEKHt0eXBlOkJvb2xlYW59KV0sdj1bRCh7dHlwZTpTdHJpbmd9KV0sdjUodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyZWZmZWRFbGVtZW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4icmVmZmVkRWxlbWVudCJpbiB6LGdldDp6PT56LnJlZmZlZEVsZW1lbnQsc2V0Oih6LFApPT57ei5yZWZmZWRFbGVtZW50PVB9fSxtZXRhZGF0YTpDfSxzLGwpLHY1KHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGV4dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InRleHQiaW4geixnZXQ6ej0+ei50ZXh0LHNldDooeixQKT0+e3oudGV4dD1QfX0sbWV0YWRhdGE6Q30sYyx1KSx2NSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6IndhdmUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJ3YXZlImluIHosZ2V0Ono9Pnoud2F2ZSxzZXQ6KHosUCk9Pnt6LndhdmU9UH19LG1ldGFkYXRhOkN9LGgsZyksdjUodGhpcyxudWxsLGIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYW5pZmVzdGVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ibWFuaWZlc3RlZCJpbiB6LGdldDp6PT56Lm1hbmlmZXN0ZWQsc2V0Oih6LFApPT57ei5tYW5pZmVzdGVkPVB9fSxtZXRhZGF0YTpDfSx4LG0pLHY1KHRoaXMsbnVsbCx2LHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3RhdHVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ic3RhdHVzImluIHosZ2V0Ono9Pnouc3RhdHVzLHNldDooeixQKT0+e3ouc3RhdHVzPVB9fSxtZXRhZGF0YTpDfSx5LHcpLHY1KG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOkN9LG51bGwsYSksRT1yPWUudmFsdWUsQyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpDfSl9c3RhdGljIGRlbW89ckJ0O3N0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KEMseil7bGV0IFA9YXdhaXQgS2EuY3JlYXRlQW5kU2hvdyh7Ymx1cjohMX0pLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGVlcy1zcGVlY2hidWJibGUiKTtyZXR1cm4gXy53aW5kb3dMYXllcj1QLF8ucmVmZmVkRWxlbWVudD1DLF8udGV4dD16LF8ubWFuaWZlc3RlZD0hMCxQLmFwcGVuZENoaWxkKF8pLFAuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsUC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi53aW5kb3dPdmVybGF5Iikuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsX30jZT1wcih0aGlzLHMsdm9pZCAwKTtnZXQgcmVmZmVkRWxlbWVudCgpe3JldHVybiB0aGlzLiNlfXNldCByZWZmZWRFbGVtZW50KEMpe3RoaXMuI2U9Q30jdD0ocHIodGhpcyxsKSxwcih0aGlzLGMsdm9pZCAwKSk7Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy4jdH1zZXQgdGV4dChDKXt0aGlzLiN0PUN9I2E9KHByKHRoaXMsdSkscHIodGhpcyxoLCExKSk7Z2V0IHdhdmUoKXtyZXR1cm4gdGhpcy4jYX1zZXQgd2F2ZShDKXt0aGlzLiNhPUN9I3I9KHByKHRoaXMsZykscHIodGhpcyx4LCExKSk7Z2V0IG1hbmlmZXN0ZWQoKXtyZXR1cm4gdGhpcy4jcn1zZXQgbWFuaWZlc3RlZChDKXt0aGlzLiNyPUN9I2k9KHByKHRoaXMsbSkscHIodGhpcyx5LCJub3JtYWwiKSk7Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLiNpfXNldCBzdGF0dXMoQyl7dGhpcy4jaT1DfXdpbmRvd0xheWVyPXByKHRoaXMsdyk7Y29uc3RydWN0b3IoKXtzdXBlcigpfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzIiwiI2ZmZiIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwcHgpOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwcHggMHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMikpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIH0KCiAgICAgIC5hcnJvdyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZiIsIiMzMzMiKX07CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIHdpZHRoOiAxNXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAuc3BlZWNoYnViYmxlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZiIsIiMzMzMiKX07CiAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtaW4td2lkdGg6IDI0MHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgIH0KCiAgICAgIC53YXZlIHsKICAgICAgICBhbmltYXRpb24tbmFtZTogd2F2ZS1hbmltYXRpb247IC8qIFJlZmVycyB0byB0aGUgbmFtZSBvZiB5b3VyIEBrZXlmcmFtZXMgZWxlbWVudCBiZWxvdyAqLwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMi41czsgLyogQ2hhbmdlIHRvIHNwZWVkIHVwIG9yIHNsb3cgZG93biAqLwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOyAvKiBOZXZlciBzdG9wIHdhdmluZyA6KSAqLwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDcwJSA3MCU7IC8qIFBpdm90IGFyb3VuZCB0aGUgYm90dG9tLWxlZnQgcGFsbSAqLwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyB3YXZlLWFuaW1hdGlvbiB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNGRlZyk7CiAgICAgICAgfSAvKiBUaGUgZm9sbG93aW5nIGZpdmUgdmFsdWVzIGNhbiBiZSBwbGF5ZWQgd2l0aCB0byBtYWtlIHRoZSB3YXZpbmcgbW9yZSBvciBsZXNzIGV4dHJlbWUgKi8KICAgICAgICAyMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLThkZWcpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTRkZWcpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTBkZWcpOwogICAgICAgIH0KICAgICAgICA2MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfSAvKiBSZXNldCBmb3IgdGhlIGxhc3QgaGFsZiB0byBwYXVzZSAqLwogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgJHt0aGlzLm1hbmlmZXN0ZWQ/TWAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciIgQGNsaWNrPSR7dGhpcy5oYW5kbGVDbGlja30+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwZWVjaGJ1YmJsZSI+CiAgICAgICAgICAgICAgICAke3RoaXMud2F2ZT9NYDxzcGFuIGNsYXNzPSJ3YXZlIj7wn5GLPC9zcGFuPmA6TWBgfQogICAgICAgICAgICAgICAgJHtFYS5yZXNvbHZlKHRoaXMuZ2V0SHRtbCgpKX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOk1gYH0KICAgIGB9YXN5bmMgaGFuZGxlQ2xpY2soKXtjb25zb2xlLmxvZygic3BlZWNoYnViYmxlIGdvdCBjbGlja2VkLiIpfWFzeW5jIGZpcnN0VXBkYXRlZCgpe2lmKHRoaXMucmVmZmVkRWxlbWVudHx8KHRoaXMucmVmZmVkRWxlbWVudD10aGlzLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpLHRoaXMubWFuaWZlc3RlZClhd2FpdCB0aGlzLnVwZGF0ZVBvc2l0aW9uKCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluY29udGFpbmVyIikuc3R5bGUub3BhY2l0eT0iMSI7ZWxzZXtsZXQgQzt0aGlzLnJlZmZlZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsYXN5bmMoKT0+e0M9YXdhaXQgRS5jcmVhdGVBbmRTaG93KHRoaXMucmVmZmVkRWxlbWVudCx0aGlzLnRleHQpfSksdGhpcy5yZWZmZWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCgpPT57Qy5kZXN0cm95KCl9KX19YXN5bmMgdXBkYXRlUG9zaXRpb24oKXtsZXQgQz10aGlzLnJlZmZlZEVsZW1lbnQsej1DLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLnRvcD1gJHt6LnRvcC0xM31weGAsdGhpcy5zdHlsZS5sZWZ0PWAke3oubGVmdCtDLmNsaWVudFdpZHRoKzR9cHhgLHoucmlnaHQ+MjUwJiYodGhpcy5zdHlsZS53aWR0aD0iMjUwcHgiKX1hc3luYyBnZXRIdG1sKCl7aWYoIXRoaXMudGV4dClyZXR1cm4iIjtsZXQgQz1zdC5wbHVnaW5zLnNtYXJ0c3RyaW5nLm5vcm1hbGl6ZS5zdGFuZGFyZCh0aGlzLnRleHQpLHo9YXdhaXQgc3QucGx1Z2lucy5zbWFydG1hcmtkb3duLlNtYXJ0TWFya2Rvd24uZWFzeU1hcmtkb3duVG9IdG1sKEMpO3JldHVybiBWcSh6KX1hc3luYyBzaG93KCl7fWFzeW5jIGRlc3Ryb3koKXt0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW5jb250YWluZXIiKS5zdHlsZS5vcGFjaXR5PSIwIix0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKX1zdGF0aWN7cHIocixhKX19O3JldHVybiBFPXJ9KSgpO2ZlKCk7U3QoKTtCZSgpO3ZhciBBaj1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LHVjPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxfbjE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLXNwaW5uZXIiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXTt2YXIgYj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IHg9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpOdW1iZXJ9KV0sZj1bRCh7dHlwZTpTdHJpbmd9KV0sZD1bRCgpXSxBaih0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNpemUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJzaXplImluIG0sZ2V0Om09Pm0uc2l6ZSxzZXQ6KG0sdik9PnttLnNpemU9dn19LG1ldGFkYXRhOnh9LHMsbCksQWoodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJibnciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJibnciaW4gbSxnZXQ6bT0+bS5ibncsc2V0OihtLHYpPT57bS5ibnc9dn19LG1ldGFkYXRhOnh9LGMsdSksQWoodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzdGF0dXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJzdGF0dXMiaW4gbSxnZXQ6bT0+bS5zdGF0dXMsc2V0OihtLHYpPT57bS5zdGF0dXM9dn19LG1ldGFkYXRhOnh9LGgsZyksQWoobnVsbCxlPXt2YWx1ZTpyfSx0LHtraW5kOiJjbGFzcyIsbmFtZTpyLm5hbWUsbWV0YWRhdGE6eH0sbnVsbCxhKSxiPXI9ZS52YWx1ZSx4JiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnh9KX1zdGF0aWMgZGVtbz0oKT0+TWAKICAgIDxkZWVzLXNwaW5uZXI+PC9kZWVzLXNwaW5uZXI+CiAgICA8ZGVlcy1zcGlubmVyIHN0YXR1cz0ic3VjY2VzcyI+PC9kZWVzLXNwaW5uZXI+CiAgICA8ZGVlcy1zcGlubmVyIHN0YXR1cz0iZXJyb3IiPjwvZGVlcy1zcGlubmVyPgogICAgPGRlZXMtc3Bpbm5lciBzaXplPSR7NjR9IHN0YXR1cz0ic3VjY2VzcyI+PC9kZWVzLXNwaW5uZXI+CiAgICA8ZGVlcy1zcGlubmVyIC5zaXplPSR7NjR9IHN0YXR1cz0iZXJyb3IiPjwvZGVlcy1zcGlubmVyPgogIGA7I2U9dWModGhpcyxzLDIwKTtnZXQgc2l6ZSgpe3JldHVybiB0aGlzLiNlfXNldCBzaXplKHgpe3RoaXMuI2U9eH0jdD0odWModGhpcyxsKSx1Yyh0aGlzLGMsITEpKTtnZXQgYm53KCl7cmV0dXJuIHRoaXMuI3R9c2V0IGJudyh4KXt0aGlzLiN0PXh9I2E9KHVjKHRoaXMsdSksdWModGhpcyxoLCJub3JtYWwiKSk7Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLiNhfXNldCBzdGF0dXMoeCl7dGhpcy4jYT14fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx1Yyh0aGlzLGcpfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAjbG9hZGluZyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYmFja2dyb3VuZDogIzhiYzM0YTAwOwogICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7cC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMykiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlci10b3AtY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzIiwiI2ZmZiIpfTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IHNwaW4gMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgICNsb2FkaW5nLnN1Y2Nlc3MgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBub25lOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBub25lOwogICAgICB9CgogICAgICAjbG9hZGluZy5lcnJvciB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IG5vbmU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgdG8gewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgIH0KICAgICAgfQogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgdG8gewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZGVlcy1pY29uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPHN0eWxlPgogICAgICAgICNsb2FkaW5nIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuc2l6ZX1weDsKICAgICAgICAgIGhlaWdodDogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgfQogICAgICAgICNsb2FkaW5nLnN1Y2Nlc3MgewogICAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKHRoaXMuYm53PyIjMzMzIjoiIzhiYzM0YSIsdGhpcy5ibnc/IiNmZmYiOiIjOGJjMzRhIil9OwogICAgICAgICAgCiAgICAgICAgfQogICAgICAgICNsb2FkaW5nLmVycm9yIHsKICAgICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSh0aGlzLmJudz8iIzMzMyI6IiNlNjRhMTkiLHRoaXMuYm53PyIjZmZmIjoiI2U2NGExOSIpfTsKICAgICAgICB9CiAgICAgICAgZGVlcy1pY29uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSIke3RoaXMuc3RhdHVzfSIgaWQ9ImxvYWRpbmciPgogICAgICAgICR7KCgpPT57aWYodGhpcy5zdGF0dXM9PT0ic3VjY2VzcyIpcmV0dXJuIE1gPGRlZXMtaWNvbiBzdHlsZT0idHJhbnNmb3JtOiB0cmFuc2xhdGVYKDElKSB0cmFuc2xhdGVZKDMlKTsiIC5pY29uPSR7ImZhOmNpcmNsZS1jaGVjayJ9PjwvZGVlcy1pY29uPmA7aWYodGhpcy5zdGF0dXM9PT0iZXJyb3IiKXJldHVybiBNYDxkZWVzLWljb24gLmljb249JHsiZmE6Y2lyY2xlLXhtYXJrIn0+PC9kZWVzLWljb24+YH0pKCl9CiAgICAgIDwvZGl2PgogICAgYH1zdGF0aWN7dWMocixhKX19O3JldHVybiBiPXJ9KSgpO2ZlKCk7dmFyIGlCdD0oKT0+TWAKICA8ZGVlcy1zdGVwcGVyCiAgICAuc3RlcHM9JHtbe3RpdGxlOiJBY2NvdW50IFNldHVwIixjb250ZW50Ok1gCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0iZW1haWwiIGxhYmVsPSJXb3JrIEVtYWlsIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9InBhc3N3b3JkIiBsYWJlbD0iQ3JlYXRlIFBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCx2YWxpZGF0aW9uRnVuYzphc3luYyh0LGUpPT57ZS5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsKCk9PnQuZ29OZXh0KCkse29uY2U6ITB9KX19LHt0aXRsZToiUHJvZmlsZSBEZXRhaWxzIixjb250ZW50Ok1gCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0iZmlyc3ROYW1lIiBsYWJlbD0iRmlyc3QgTmFtZSIgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJsYXN0TmFtZSIgbGFiZWw9Ikxhc3QgTmFtZSIgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCx2YWxpZGF0aW9uRnVuYzphc3luYyh0LGUpPT57ZS5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsKCk9PnQuZ29OZXh0KCkse29uY2U6ITB9KX19LHt0aXRsZToiQ29udGFjdCBJbmZvcm1hdGlvbiIsY29udGVudDpNYAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUga2V5PSJwaG9uZSIgbGFiZWw9Ik1vYmlsZSBOdW1iZXIiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9ImNvbXBhbnkiIGxhYmVsPSJDb21wYW55Ij48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLHZhbGlkYXRpb25GdW5jOmFzeW5jKHQsZSk9PntlLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwoKT0+dC5nb05leHQoKSx7b25jZTohMH0pfX0se3RpdGxlOiJUZWFtIFNpemUiLGNvbnRlbnQ6TWAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgICAga2V5PSJ0ZWFtU2l6ZSIKICAgICAgICAgICAgICBsYWJlbD0iSG93IGJpZyBpcyB5b3VyIHRlYW0/IgogICAgICAgICAgICAgIC5vcHRpb25zPSR7W3tsYWJlbDoiMS01Iix2YWx1ZToiMS01In0se2xhYmVsOiI2LTIwIix2YWx1ZToiNi0yMCJ9LHtsYWJlbDoiMjEtNTAiLHZhbHVlOiIyMS01MCJ9LHtsYWJlbDoiNTErIix2YWx1ZToiNTErIn1dfQogICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCx2YWxpZGF0aW9uRnVuYzphc3luYyh0LGUpPT57ZS5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsKCk9PnQuZ29OZXh0KCkse29uY2U6ITB9KX19LHt0aXRsZToiR29hbHMiLGNvbnRlbnQ6TWAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgICAga2V5PSJnb2FsIgogICAgICAgICAgICAgIGxhYmVsPSJNYWluIG9iamVjdGl2ZSIKICAgICAgICAgICAgICAub3B0aW9ucz0ke1t7bGFiZWw6Ik9uYm9hcmRpbmciLHZhbHVlOiJvbmJvYXJkaW5nIn0se2xhYmVsOiJBbmFseXRpY3MiLHZhbHVlOiJhbmFseXRpY3MifSx7bGFiZWw6IkF1dG9tYXRpb24iLHZhbHVlOiJhdXRvbWF0aW9uIn1dfQogICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCx2YWxpZGF0aW9uRnVuYzphc3luYyh0LGUpPT57ZS5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsKCk9PnQuZ29OZXh0KCkse29uY2U6ITB9KX19LHt0aXRsZToiQnJhbmQgUHJlZmVyZW5jZXMiLGNvbnRlbnQ6TWAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJicmFuZENvbG9yIiBsYWJlbD0iUHJpbWFyeSBicmFuZCBjb2xvciI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJ0b25lIiBsYWJlbD0iUHJlZmVycmVkIHRvbmUgKGUuZy4gZnJpZW5kbHksIGZvcm1hbCkiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsdmFsaWRhdGlvbkZ1bmM6YXN5bmModCxlKT0+e2UucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIikuYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCgpPT50LmdvTmV4dCgpLHtvbmNlOiEwfSl9fSx7dGl0bGU6IkludGVncmF0aW9ucyIsY29udGVudDpNYAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIGtleT0iaW50ZWdyYXRpb25zIgogICAgICAgICAgICAgIGxhYmVsPSJJbnRlZ3JhdGlvbnMgaW4gdXNlIgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJBZGQgaW50ZWdyYXRpb24iCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLHZhbGlkYXRpb25GdW5jOmFzeW5jKHQsZSk9PntlLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwoKT0+dC5nb05leHQoKSx7b25jZTohMH0pfX0se3RpdGxlOiJSZXZpZXcgJiBMYXVuY2giLGNvbnRlbnQ6TWAKICAgICAgICAgIDxkZWVzLXBhbmVsPgogICAgICAgICAgICA8cD5BbG1vc3QgdGhlcmUhIFJldmlldyB5b3VyIHNlbGVjdGlvbnMgYW5kIGxhdW5jaCB3aGVuZXZlciB5b3UncmUgcmVhZHkuPC9wPgogICAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIGB9XX0KICA+PC9kZWVzLXN0ZXBwZXI+CmA7ZmUoKTtTdCgpO0JlKCk7dmFyIHNOZT1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LFVJPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxBbjE9KCgpPT57bGV0IHQ9W2NlKCJkZWVzLXN0ZXBwZXIiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXTt2YXIgZD1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IGg9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpBcnJheX0pXSxmPVtEKHt0eXBlOk9iamVjdH0pXSxzTmUodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzdGVwcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+InN0ZXBzImluIGcsZ2V0Omc9Pmcuc3RlcHMsc2V0OihnLGIpPT57Zy5zdGVwcz1ifX0sbWV0YWRhdGE6aH0scyxsKSxzTmUodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZFN0ZXAiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJzZWxlY3RlZFN0ZXAiaW4gZyxnZXQ6Zz0+Zy5zZWxlY3RlZFN0ZXAsc2V0OihnLGIpPT57Zy5zZWxlY3RlZFN0ZXA9Yn19LG1ldGFkYXRhOmh9LGMsdSksc05lKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOmh9LG51bGwsYSksZD1yPWUudmFsdWUsaCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpofSl9c3RhdGljIGRlbW89aUJ0OyNlPVVJKHRoaXMscyxbXSk7Z2V0IHN0ZXBzKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHN0ZXBzKGgpe3RoaXMuI2U9aH0jdD0oVUkodGhpcyxsKSxVSSh0aGlzLGMsdm9pZCAwKSk7Z2V0IHNlbGVjdGVkU3RlcCgpe3JldHVybiB0aGlzLiN0fXNldCBzZWxlY3RlZFN0ZXAoaCl7dGhpcy4jdD1ofWNvbnN0cnVjdG9yKCl7c3VwZXIoKX1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwcGVyQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zdGVwIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGJveC1zaGFkb3cgMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGZpbHRlciAwLjdzIGN1YmljLWJlemllcigwLjg3LCAwLCAwLjEzLCAxKSwgYm9yZGVyIDAuN3MgY3ViaWMtYmV6aWVyKDAuODcsIDAsIDAuMTMsIDEpOwogICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgbWluLWhlaWdodDogMzAwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMwZjBmMTEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlMmU4ZjAiLCIjMjcyNzI5Iil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzBmMTcyYSIsIiNmNWY1ZjUiKX07CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgZmlsdGVyOiBvcGFjaXR5KDAuNTUpIHNhdHVyYXRlKDAuODUpOwogICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc3RlcC5zZWxlY3RlZCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICBmaWx0ZXI6IG9wYWNpdHkoMSkgc2F0dXJhdGUoMSk7CiAgICAgICAgdXNlci1zZWxlY3Q6IGF1dG87CiAgICAgIH0KCiAgICAgIC5zdGVwLmhpZGRlblN0ZXAgewogICAgICAgIGZpbHRlcjogb3BhY2l0eSgwKTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UgewogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjM1cyBlYXNlLCBib3gtc2hhZG93IDAuMzVzIGVhc2UsIGZpbHRlciAwLjM1cyBlYXNlLCBib3JkZXIgMC4zNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UuaGlkZGVuU3RlcCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDE2cHgpOwogICAgICB9CgogICAgICAuc3RlcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMDB2aDsKICAgICAgfQoKICAgICAgLnN0ZXAgLnN0ZXBDb3VudGVyIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM2NDc0OGIiLCIjYTFhMWFhIil9OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgcmlnaHQ6IDEycHg7CiAgICAgICAgcGFkZGluZzogNnB4IDE0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNSkiLCJyZ2JhKDYzLCA2MywgNzAsIDAuNDUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNykiLCJyZ2JhKDYzLCA2MywgNzAsIDAuNikiKX07CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2sgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgbGVmdDogMTJweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuOSkiLCJyZ2JhKDYzLCA2MywgNzAsIDAuODUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSkiLCJyZ2JhKDM5LCAzOSwgNDIsIDAuODUpIil9OwogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzQ3NTU2OSIsIiNkNGQ0ZDgiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UsIGNvbG9yIDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2s6aG92ZXIgewogICAgICAgIGNvbG9yOiAke3AuYmRUaGVtZSgiIzBmMTcyYSIsIiNmYWZhZmEiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke3AuYmRUaGVtZShQYS5ibHVlLFBhLmJsdWUpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjk1KSIsInJnYmEoNjMsIDYzLCA3MCwgMC43KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTJweCk7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2s6YWN0aXZlIHsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwZjE3MmEiLCIjZmFmYWZhIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtwLmJkVGhlbWUoUGEuYmx1ZUFjdGl2ZSxQYS5ibHVlQWN0aXZlKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoInJnYmEoMjI2LCAyMzIsIDI0MCwgMC44NSkiLCJyZ2JhKDYzLCA2MywgNzAsIDAuNikiKX07CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2sgc3BhbiB7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2s6aG92ZXIgc3BhbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0ycHgpOwogICAgICB9CgogICAgICAuc3RlcCAudGl0bGUgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nLXRvcDogNjRweDsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICB9CgogICAgICAuc3RlcCAuY29udGVudCB7CiAgICAgICAgcGFkZGluZzogMzJweDsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9InN0ZXBwZXJDb250YWluZXIiPgogICAgICAgICR7dGhpcy5zdGVwcy5tYXAoaD0+TWA8ZGl2CiAgICAgICAgICAgICAgY2xhc3M9InN0ZXAgJHtoPT09dGhpcy5zZWxlY3RlZFN0ZXA/InNlbGVjdGVkIjpudWxsfSAke3RoaXMuZ2V0SW5kZXhPZlN0ZXAoaCk+dGhpcy5nZXRJbmRleE9mU3RlcCh0aGlzLnNlbGVjdGVkU3RlcCk/ImhpZGRlblN0ZXAiOiIifSAke3RoaXMuZ2V0SW5kZXhPZlN0ZXAoaCk9PT0wPyJlbnRyYW5jZSI6IiJ9IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgJHt0aGlzLmdldEluZGV4T2ZTdGVwKGgpPjA/TWA8ZGl2IGNsYXNzPSJnb0JhY2siIEBjbGljaz0ke3RoaXMuZ29CYWNrfT48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEludGVyIj48LTwvc3Bhbj4gZ28gdG8gcHJldmlvdXMgc3RlcDwvZGl2PmA6IiJ9CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcENvdW50ZXIiPgogICAgICAgICAgICAgICAgU3RlcCAke3RoaXMuc3RlcHMuZmluZEluZGV4KGc9Pmc9PT1oKSsxfSBvZgogICAgICAgICAgICAgICAgJHt0aGlzLnN0ZXBzLmxlbmd0aH0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+JHtoLnRpdGxlfTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPiR7aC5jb250ZW50fTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4gYCl9CiAgICAgIDwvZGl2PgogICAgYH1nZXRJbmRleE9mU3RlcD0oVUkodGhpcyx1KSxoPT50aGlzLnN0ZXBzLmZpbmRJbmRleChnPT5oPT09ZykpO2FzeW5jIGZpcnN0VXBkYXRlZCgpe2F3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlLGF3YWl0IHRoaXMuZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKSx0aGlzLnNlbGVjdGVkU3RlcD10aGlzLnN0ZXBzWzBdLHRoaXMuc2V0U2Nyb2xsU3RhdHVzKCksYXdhaXQgdGhpcy5kb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDM1MCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zdGVwLmVudHJhbmNlIik/LmNsYXNzTGlzdC5yZW1vdmUoImVudHJhbmNlIil9YXN5bmMgdXBkYXRlZCgpe3RoaXMuc2V0U2Nyb2xsU3RhdHVzKCl9c2Nyb2xsZXI7YXN5bmMgc2V0U2Nyb2xsU3RhdHVzKCl7bGV0IGg9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zdGVwcGVyQ29udGFpbmVyIiksZz10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnN0ZXAiKSxiPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VsZWN0ZWQiKTtpZighYilyZXR1cm47aC5zdHlsZS5wYWRkaW5nVG9wfHwoaC5zdHlsZS5wYWRkaW5nVG9wPWAke2gub2Zmc2V0SGVpZ2h0LzItYi5vZmZzZXRIZWlnaHQvMn1weGApLGNvbnNvbGUubG9nKCJTZXR0aW5nIHNjcm9sbCBzdGF0dXMiKSxjb25zb2xlLmxvZyhiKTtsZXQgeD1iLm9mZnNldFRvcC1oLm9mZnNldEhlaWdodC8yK2Iub2Zmc2V0SGVpZ2h0LzI7Y29uc29sZS5sb2coeCk7bGV0IG09YXdhaXQgQzIuc2V0dXBEb21Ub29scygpO3RoaXMuc2Nyb2xsZXJ8fCh0aGlzLnNjcm9sbGVyPW5ldyBBdC5Td2VldFNjcm9sbCh7dmVydGljYWw6ITAsaG9yaXpvbnRhbDohMSxlYXNpbmc6ImVhc2VJbk91dEV4cG8iLGR1cmF0aW9uOjcwMH0saCkpLCF0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuY0NhbGxlZCYmdGhpcy5zZWxlY3RlZFN0ZXAudmFsaWRhdGlvbkZ1bmMmJih0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuY0NhbGxlZD0hMCxhd2FpdCB0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuYyh0aGlzLGIsdGhpcy5zZWxlY3RlZFN0ZXAuYWJvcnRDb250cm9sbGVyLnNpZ25hbCkpLHRoaXMuc2Nyb2xsZXIudG8oeCl9YXN5bmMgZ29CYWNrKCl7bGV0IGg9dGhpcy5zdGVwcy5maW5kSW5kZXgoeD0+eD09PXRoaXMuc2VsZWN0ZWRTdGVwKTtpZihoPD0wKXJldHVybjt0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXImJnRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO2xldCBnPXRoaXMuc3RlcHNbaF07Zy52YWxpZGF0aW9uRnVuY0NhbGxlZD0hMTtsZXQgYj10aGlzLnN0ZXBzW2gtMV07Yi52YWxpZGF0aW9uRnVuY0NhbGxlZD0hMSx0aGlzLnNlbGVjdGVkU3RlcD1iLGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlLGF3YWl0IHRoaXMuZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigxMDApLHRoaXMuc2VsZWN0ZWRTdGVwLm9uUmV0dXJuVG9TdGVwRnVuYz8uKHRoaXMsdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWxlY3RlZCIpKX1nb05leHQoKXtsZXQgaD10aGlzLnN0ZXBzLmZpbmRJbmRleCh4PT54PT09dGhpcy5zZWxlY3RlZFN0ZXApO2lmKGg8MHx8aD49dGhpcy5zdGVwcy5sZW5ndGgtMSlyZXR1cm47dGhpcy5zZWxlY3RlZFN0ZXAuYWJvcnRDb250cm9sbGVyJiZ0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtsZXQgZz10aGlzLnN0ZXBzW2hdO2cudmFsaWRhdGlvbkZ1bmNDYWxsZWQ9ITE7bGV0IGI9dGhpcy5zdGVwc1toKzFdO2IudmFsaWRhdGlvbkZ1bmNDYWxsZWQ9ITEsdGhpcy5zZWxlY3RlZFN0ZXA9Yn1zdGF0aWN7VUkocixhKX19O3JldHVybiBkPXJ9KSgpO2ZlKCk7dmFyIG9CdD0oKT0+TWAKICAgIDxzdHlsZT4KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjhmOWZhIiwiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDsKICAgICAgfQoKICAgICAgLmRlbW8tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzIiwiI2ZmZiIpfTsKICAgICAgfQoKICAgICAgLmRlbW8tZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM2NjYiLCIjYWFhIil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgfQoKICAgICAgLnRoZW1lLXRvZ2dsZSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMTZweDsKICAgICAgICByaWdodDogMTZweDsKICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1idXR0b24gY2xhc3M9InRoZW1lLXRvZ2dsZSIgQGNsaWNrZWQ9JHsoKT0+e2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiYnJpZ2h0Iil9fT5Ub2dnbGUgVGhlbWU8L2RlZXMtYnV0dG9uPgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRvYXN0IFR5cGVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBEaWZmZXJlbnQgdG9hc3QgdHlwZXMgZm9yIHZhcmlvdXMgbm90aWZpY2F0aW9uIHNjZW5hcmlvcy4gQ2xpY2sgYW55IGJ1dHRvbiB0byBzaG93IGEgdG9hc3QuCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpPT57T3QuaW5mbygiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UiKX19PkluZm8gVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iaGlnaGxpZ2h0ZWQiIEBjbGlja2VkPSR7KCk9PntPdC5zdWNjZXNzKCJPcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEiKX19PlN1Y2Nlc3MgVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e090Lndhcm5pbmcoIlBsZWFzZSByZXZpZXcgYmVmb3JlIHByb2NlZWRpbmciKX19Pldhcm5pbmcgVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e090LmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIil9fT5FcnJvciBUb2FzdDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRvYXN0IFBvc2l0aW9uczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPgogICAgICAgICAgVG9hc3RzIGNhbiBhcHBlYXIgaW4gZGlmZmVyZW50IHBvc2l0aW9ucyBvbiB0aGUgc2NyZWVuLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e090LnNob3coe21lc3NhZ2U6IlRvcCBSaWdodCBQb3NpdGlvbiIsdHlwZToiaW5mbyIscG9zaXRpb246InRvcC1yaWdodCJ9KX19PlRvcCBSaWdodDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpPT57T3Quc2hvdyh7bWVzc2FnZToiVG9wIExlZnQgUG9zaXRpb24iLHR5cGU6ImluZm8iLHBvc2l0aW9uOiJ0b3AtbGVmdCJ9KX19PlRvcCBMZWZ0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntPdC5zaG93KHttZXNzYWdlOiJCb3R0b20gUmlnaHQgUG9zaXRpb24iLHR5cGU6ImluZm8iLHBvc2l0aW9uOiJib3R0b20tcmlnaHQifSl9fT5Cb3R0b20gUmlnaHQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e090LnNob3coe21lc3NhZ2U6IkJvdHRvbSBMZWZ0IFBvc2l0aW9uIix0eXBlOiJpbmZvIixwb3NpdGlvbjoiYm90dG9tLWxlZnQifSl9fT5Cb3R0b20gTGVmdDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpPT57T3Quc2hvdyh7bWVzc2FnZToiVG9wIENlbnRlciBQb3NpdGlvbiIsdHlwZToiaW5mbyIscG9zaXRpb246InRvcC1jZW50ZXIifSl9fT5Ub3AgQ2VudGVyPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntPdC5zaG93KHttZXNzYWdlOiJCb3R0b20gQ2VudGVyIFBvc2l0aW9uIix0eXBlOiJpbmZvIixwb3NpdGlvbjoiYm90dG9tLWNlbnRlciJ9KX19PkJvdHRvbSBDZW50ZXI8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5EdXJhdGlvbiBPcHRpb25zPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDb250cm9sIGhvdyBsb25nIHRvYXN0cyBzdGF5IHZpc2libGUuIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy4KICAgICAgICA8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntPdC5zaG93KHttZXNzYWdlOiJRdWljayB0b2FzdCAoMSBzZWNvbmQpIix0eXBlOiJpbmZvIixkdXJhdGlvbjoxZTN9KX19PjEgU2Vjb25kPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntPdC5zaG93KHttZXNzYWdlOiJTdGFuZGFyZCB0b2FzdCAoMyBzZWNvbmRzKSIsdHlwZToiaW5mbyIsZHVyYXRpb246M2UzfSl9fT4zIFNlY29uZHMgKERlZmF1bHQpPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntPdC5zaG93KHttZXNzYWdlOiJMb25nIHRvYXN0ICg1IHNlY29uZHMpIix0eXBlOiJpbmZvIixkdXJhdGlvbjo1ZTN9KX19PjUgU2Vjb25kczwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpPT57T3Quc2hvdyh7bWVzc2FnZToiTWFudWFsIGRpc21pc3Mgb25seSAoY2xpY2sgdG8gY2xvc2UpIix0eXBlOiJ3YXJuaW5nIixkdXJhdGlvbjowfSl9fT5ObyBBdXRvLURpc21pc3M8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5NdWx0aXBsZSBUb2FzdHM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIE11bHRpcGxlIHRvYXN0cyBzdGFjayBhdXRvbWF0aWNhbGx5LiBUaGV5IG1haW50YWluIHRoZWlyIG9yZGVyIGFuZCBhbmltYXRlIHNtb290aGx5LgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e090LmluZm8oIkZpcnN0IG5vdGlmaWNhdGlvbiIpLHNldFRpbWVvdXQoKCk9Pk90LnN1Y2Nlc3MoIlNlY29uZCBub3RpZmljYXRpb24iKSwyMDApLHNldFRpbWVvdXQoKCk9Pk90Lndhcm5pbmcoIlRoaXJkIG5vdGlmaWNhdGlvbiIpLDQwMCksc2V0VGltZW91dCgoKT0+T3QuZXJyb3IoIkZvdXJ0aCBub3RpZmljYXRpb24iKSw2MDApfX0+U2hvdyBNdWx0aXBsZTwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpPT57Zm9yKGxldCB0PTE7dDw9NTt0Kyspc2V0VGltZW91dCgoKT0+e090LnNob3coe21lc3NhZ2U6YE5vdGlmaWNhdGlvbiAjJHt0fWAsdHlwZTp0JTI9PT0wPyJzdWNjZXNzIjoiaW5mbyIsZHVyYXRpb246MmUzK3QqNTAwfSl9LHQqMTAwKX19PlJhcGlkIEZpcmU8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5SZWFsLVdvcmxkIEV4YW1wbGVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDb21tb24gdXNlIGNhc2VzIGZvciB0b2FzdCBub3RpZmljYXRpb25zIGluIGFwcGxpY2F0aW9ucy4KICAgICAgICA8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7YXN5bmMoKT0+e2xldCB0PWF3YWl0IE90LnNob3coe21lc3NhZ2U6IlNhdmluZyBjaGFuZ2VzLi4uIix0eXBlOiJpbmZvIixkdXJhdGlvbjowfSk7c2V0VGltZW91dCgoKT0+e3QuZGlzbWlzcygpLE90LnN1Y2Nlc3MoIkNoYW5nZXMgc2F2ZWQgc3VjY2Vzc2Z1bGx5ISIpfSwyZTMpfX0+U2F2ZSBPcGVyYXRpb248L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e090LmVycm9yKCJGYWlsZWQgdG8gY29ubmVjdCB0byBzZXJ2ZXIuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24uIil9fT5OZXR3b3JrIEVycm9yPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntPdC53YXJuaW5nKCJZb3VyIHNlc3Npb24gd2lsbCBleHBpcmUgaW4gNSBtaW51dGVzIil9fT5TZXNzaW9uIFdhcm5pbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e090LnN1Y2Nlc3MoIkZpbGUgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5ISIpfX0+VXBsb2FkIENvbXBsZXRlPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+UHJvZ3JhbW1hdGljIENvbnRyb2w8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIEFkdmFuY2VkIGNvbnRyb2wgb3ZlciB0b2FzdCBiZWhhdmlvci4KICAgICAgICA8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7YXN5bmMoKT0+e2xldCB0PWF3YWl0IE90LnNob3coe21lc3NhZ2U6IlRoaXMgdG9hc3QgY2FuIGJlIGRpc21pc3NlZCBwcm9ncmFtbWF0aWNhbGx5Iix0eXBlOiJpbmZvIixkdXJhdGlvbjowfSk7c2V0VGltZW91dCgoKT0+e3QuZGlzbWlzcygpLE90LnN1Y2Nlc3MoIlRvYXN0IGRpc21pc3NlZCBhZnRlciAyIHNlY29uZHMiKX0sMmUzKX19PlByb2dyYW1tYXRpYyBEaXNtaXNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntPdC5pbmZvKCJJbmZvIG1lc3NhZ2UiLDJlMyksc2V0VGltZW91dCgoKT0+T3Quc3VjY2VzcygiU3VjY2VzcyBtZXNzYWdlIiwyZTMpLDUwMCksc2V0VGltZW91dCgoKT0+T3Qud2FybmluZygiV2FybmluZyBtZXNzYWdlIiwyZTMpLDFlMyksc2V0VGltZW91dCgoKT0+T3QuZXJyb3IoIkVycm9yIG1lc3NhZ2UiLDJlMyksMTUwMCl9fT5Db252ZW5pZW5jZSBNZXRob2RzPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO2ZlKCk7U3QoKTtCZSgpO3ZhciBqST1mdW5jdGlvbih0LGUsYSxyLGksbyl7ZnVuY3Rpb24gcyh2KXtpZih2IT09dm9pZCAwJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB2fWZvcih2YXIgbD1yLmtpbmQsZj1sPT09ImdldHRlciI/ImdldCI6bD09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9yLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwsdT1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsci5uYW1lKTp7fSksZCxoPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGI9e307Zm9yKHZhciB4IGluIHIpYlt4XT14PT09ImFjY2VzcyI/e306clt4XTtmb3IodmFyIHggaW4gci5hY2Nlc3MpYi5hY2Nlc3NbeF09ci5hY2Nlc3NbeF07Yi5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih2KXtpZihoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO28ucHVzaChzKHZ8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobD09PSJhY2Nlc3NvciI/e2dldDp1LmdldCxzZXQ6dS5zZXR9OnVbZl0sYik7aWYobD09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsoZD1zKG0uZ2V0KSkmJih1LmdldD1kKSwoZD1zKG0uc2V0KSkmJih1LnNldD1kKSwoZD1zKG0uaW5pdCkpJiZpLnVuc2hpZnQoZCl9ZWxzZShkPXMobSkpJiYobD09PSJmaWVsZCI/aS51bnNoaWZ0KGQpOnVbZl09ZCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsci5uYW1lLHUpLGg9ITB9LHJvPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylhPXI/ZVtpXS5jYWxsKHQsYSk6ZVtpXS5jYWxsKHQpO3JldHVybiByP2E6dm9pZCAwfSxPdD0oKCk9PntsZXQgdD1bY2UoImRlZXMtdG9hc3QiKV0sZSxhPVtdLHIsaT1wZSxvLHM9W10sbD1bXSxmLGM9W10sdT1bXSxkLGg9W10sZz1bXSxiLHg9W10sbT1bXTt2YXIgdj1jbGFzcyBleHRlbmRzIGl7c3RhdGlje3I9dGhpc31zdGF0aWN7bGV0IHk9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUoaVtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7bz1bRCh7dHlwZTpTdHJpbmd9KV0sZj1bRCh7dHlwZTpTdHJpbmd9KV0sZD1bRCh7dHlwZTpOdW1iZXJ9KV0sYj1bRCh7dHlwZTpCb29sZWFuLHJlZmxlY3Q6ITB9KV0sakkodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtZXNzYWdlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4ibWVzc2FnZSJpbiB3LGdldDp3PT53Lm1lc3NhZ2Usc2V0Oih3LEUpPT57dy5tZXNzYWdlPUV9fSxtZXRhZGF0YTp5fSxzLGwpLGpJKHRoaXMsbnVsbCxmLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidHlwZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dz0+InR5cGUiaW4gdyxnZXQ6dz0+dy50eXBlLHNldDoodyxFKT0+e3cudHlwZT1FfX0sbWV0YWRhdGE6eX0sYyx1KSxqSSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImR1cmF0aW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4iZHVyYXRpb24iaW4gdyxnZXQ6dz0+dy5kdXJhdGlvbixzZXQ6KHcsRSk9Pnt3LmR1cmF0aW9uPUV9fSxtZXRhZGF0YTp5fSxoLGcpLGpJKHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNWaXNpYmxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp3PT4iaXNWaXNpYmxlImluIHcsZ2V0Onc9PncuaXNWaXNpYmxlLHNldDoodyxFKT0+e3cuaXNWaXNpYmxlPUV9fSxtZXRhZGF0YTp5fSx4LG0pLGpJKG51bGwsZT17dmFsdWU6cn0sdCx7a2luZDoiY2xhc3MiLG5hbWU6ci5uYW1lLG1ldGFkYXRhOnl9LG51bGwsYSksdj1yPWUudmFsdWUseSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp5fSl9c3RhdGljIGRlbW89b0J0O3N0YXRpYyB0b2FzdENvbnRhaW5lcnM9bmV3IE1hcDtzdGF0aWMgZ2V0T3JDcmVhdGVDb250YWluZXIoeSl7aWYoIXRoaXMudG9hc3RDb250YWluZXJzLmhhcyh5KSl7bGV0IHc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7c3dpdGNoKHcuY2xhc3NOYW1lPWB0b2FzdC1jb250YWluZXIgdG9hc3QtY29udGFpbmVyLSR7eX1gLHcuc3R5bGUuY3NzVGV4dD1gCiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHotaW5kZXg6ICR7WDEub3ZlcmxheS50b2FzdH07CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIGAseSl7Y2FzZSJ0b3AtcmlnaHQiOncuc3R5bGUudG9wPSIwIix3LnN0eWxlLnJpZ2h0PSIwIjticmVhaztjYXNlInRvcC1sZWZ0Ijp3LnN0eWxlLnRvcD0iMCIsdy5zdHlsZS5sZWZ0PSIwIjticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dy5zdHlsZS5ib3R0b209IjAiLHcuc3R5bGUucmlnaHQ9IjAiO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOncuc3R5bGUuYm90dG9tPSIwIix3LnN0eWxlLmxlZnQ9IjAiO2JyZWFrO2Nhc2UidG9wLWNlbnRlciI6dy5zdHlsZS50b3A9IjAiLHcuc3R5bGUubGVmdD0iNTAlIix3LnN0eWxlLnRyYW5zZm9ybT0idHJhbnNsYXRlWCgtNTAlKSI7YnJlYWs7Y2FzZSJib3R0b20tY2VudGVyIjp3LnN0eWxlLmJvdHRvbT0iMCIsdy5zdHlsZS5sZWZ0PSI1MCUiLHcuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGVYKC01MCUpIjticmVha31kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHcpLHRoaXMudG9hc3RDb250YWluZXJzLnNldCh5LHcpfXJldHVybiB0aGlzLnRvYXN0Q29udGFpbmVycy5nZXQoeSl9c3RhdGljIGFzeW5jIHNob3coeSl7bGV0IHc9dHlwZW9mIHk9PSJzdHJpbmciP3ttZXNzYWdlOnl9OnksRT1uZXcgdjtyZXR1cm4gRS5tZXNzYWdlPXcubWVzc2FnZSxFLnR5cGU9dy50eXBlfHwiaW5mbyIsRS5kdXJhdGlvbj13LmR1cmF0aW9ufHwzZTMsdGhpcy5nZXRPckNyZWF0ZUNvbnRhaW5lcih3LnBvc2l0aW9ufHwidG9wLXJpZ2h0IikuYXBwZW5kQ2hpbGQoRSksYXdhaXQgRS51cGRhdGVDb21wbGV0ZSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntFLmlzVmlzaWJsZT0hMH0pLEUuZHVyYXRpb24+MCYmc2V0VGltZW91dCgoKT0+e0UuZGlzbWlzcygpfSxFLmR1cmF0aW9uKSxFfXN0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KHkpe3JldHVybiB0aGlzLnNob3coeSl9c3RhdGljIGluZm8oeSx3KXtyZXR1cm4gdGhpcy5zaG93KHttZXNzYWdlOnksdHlwZToiaW5mbyIsZHVyYXRpb246d30pfXN0YXRpYyBzdWNjZXNzKHksdyl7cmV0dXJuIHRoaXMuc2hvdyh7bWVzc2FnZTp5LHR5cGU6InN1Y2Nlc3MiLGR1cmF0aW9uOnd9KX1zdGF0aWMgd2FybmluZyh5LHcpe3JldHVybiB0aGlzLnNob3coe21lc3NhZ2U6eSx0eXBlOiJ3YXJuaW5nIixkdXJhdGlvbjp3fSl9c3RhdGljIGVycm9yKHksdyl7cmV0dXJuIHRoaXMuc2hvdyh7bWVzc2FnZTp5LHR5cGU6ImVycm9yIixkdXJhdGlvbjp3fSl9I2U9cm8odGhpcyxzLCIiKTtnZXQgbWVzc2FnZSgpe3JldHVybiB0aGlzLiNlfXNldCBtZXNzYWdlKHkpe3RoaXMuI2U9eX0jdD0ocm8odGhpcyxsKSxybyh0aGlzLGMsImluZm8iKSk7Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy4jdH1zZXQgdHlwZSh5KXt0aGlzLiN0PXl9I2E9KHJvKHRoaXMsdSkscm8odGhpcyxoLDNlMykpO2dldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLiNhfXNldCBkdXJhdGlvbih5KXt0aGlzLiNhPXl9I3I9KHJvKHRoaXMsZykscm8odGhpcyx4LCExKSk7Z2V0IGlzVmlzaWJsZSgpe3JldHVybiB0aGlzLiNyfXNldCBpc1Zpc2libGUoeSl7dGhpcy4jcj15fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxybyh0aGlzLG0pLGMxLnNldHVwKCl9c3RhdGljIHN0eWxlcz1beGUscC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgZm9udC1mYW1pbHk6ICR7SnR9OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICA6aG9zdChbaXN2aXNpYmxlXSkgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICB9CgogICAgICAudG9hc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgcGFkZGluZzogMTZweCAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZiIsIiMyMjIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtwLmJkVGhlbWUoIiNlMGUwZTAiLCIjMzMzIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggJHtwLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4xKSIsInJnYmEoMCwwLDAsMC4zKSIpfTsKICAgICAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAudG9hc3Q6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMik7CiAgICAgIH0KCiAgICAgIC5pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuaWNvbiBzdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMzMzIiwiI2ZmZiIpfTsKICAgICAgfQoKICAgICAgLmNsb3NlIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgIH0KCiAgICAgIC5jbG9zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNsb3NlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLyogVHlwZS1zcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgOmhvc3QoW3R5cGU9ImluZm8iXSkgLmljb24gewogICAgICAgIGNvbG9yOiAjMDA4NGZmOwogICAgICB9CgogICAgICA6aG9zdChbdHlwZT0ic3VjY2VzcyJdKSAuaWNvbiB7CiAgICAgICAgY29sb3I6ICMyMmM1NWU7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0eXBlPSJ3YXJuaW5nIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogI2Y1OWUwYjsKICAgICAgfQoKICAgICAgOmhvc3QoW3R5cGU9ImVycm9yIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogI2VmNDQ0NDsKICAgICAgfQoKICAgICAgLyogUHJvZ3Jlc3MgYmFyICovCiAgICAgIC5wcm9ncmVzcyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDhweCA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdDsKICAgICAgICBhbmltYXRpb246IHByb2dyZXNzIGxpbmVhciBmb3J3YXJkczsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBwcm9ncmVzcyB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgfQogICAgICB9CiAgICBgXTtyZW5kZXIoKXtsZXQgeT17aW5mbzpNYDxzdmcgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTEtMTFhMSAxIDAgMTAtMiAwdjJIN2ExIDEgMCAxMDAgMmgydjJhMSAxIDAgMTAyIDB2LTJoMmExIDEgMCAxMDAtMmgtMlY3eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+CiAgICAgIDwvc3ZnPmAsc3VjY2VzczpNYDxzdmcgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuNzA3LTkuMjkzYTEgMSAwIDAwLTEuNDE0LTEuNDE0TDkgMTAuNTg2IDcuNzA3IDkuMjkzYTEgMSAwIDAwLTEuNDE0IDEuNDE0bDIgMmExIDEgMCAwMDEuNDE0IDBsNC00eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+CiAgICAgIDwvc3ZnPmAsd2FybmluZzpNYDxzdmcgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTguMjU3IDMuMDk5Yy43NjUtMS4zNiAyLjcyMi0xLjM2IDMuNDg2IDBsNS41OCA5LjkyYy43NSAxLjMzNC0uMjEzIDIuOTgtMS43NDIgMi45OEg0LjQyYy0xLjUzIDAtMi40OTMtMS42NDYtMS43NDMtMi45OGw1LjU4LTkuOTJ6TTExIDEzYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptLTEtOGExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDIgMFY2YTEgMSAwIDAwLTEtMXoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gLGVycm9yOk1gPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnpNOC43MDcgNy4yOTNhMSAxIDAgMDAtMS40MTQgMS40MTRMOC41ODYgMTBsLTEuMjkzIDEuMjkzYTEgMSAwIDEwMS40MTQgMS40MTRMMTAgMTEuNDE0bDEuMjkzIDEuMjkzYTEgMSAwIDAwMS40MTQtMS40MTRMMTEuNDE0IDEwbDEuMjkzLTEuMjkzYTEgMSAwIDAwLTEuNDE0LTEuNDE0TDEwIDguNTg2IDguNzA3IDcuMjkzeiIgY2xpcC1ydWxlPSJldmVub2RkIi8+CiAgICAgIDwvc3ZnPmB9O3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJ0b2FzdCIgQGNsaWNrPSR7dGhpcy5kaXNtaXNzfT4KICAgICAgICA8ZGl2IGNsYXNzPSJpY29uIj4KICAgICAgICAgICR7eVt0aGlzLnR5cGVdfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2UiPiR7dGhpcy5tZXNzYWdlfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNsb3NlIj4KICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDE2IDE2IiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICA8cGF0aCBkPSJNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4eiIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgJHt0aGlzLmR1cmF0aW9uPjA/TWAKICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIiBzdHlsZT0iYW5pbWF0aW9uLWR1cmF0aW9uOiAke3RoaXMuZHVyYXRpb259bXMiPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDoiIn0KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGRpc21pc3MoKXt0aGlzLmlzVmlzaWJsZT0hMSxhd2FpdCBuZXcgUHJvbWlzZSh3PT5zZXRUaW1lb3V0KHcsMzAwKSksdGhpcy5yZW1vdmUoKTtsZXQgeT10aGlzLnBhcmVudEVsZW1lbnQ7aWYoeSYmeS5jaGlsZHJlbi5sZW5ndGg9PT0wKXt5LnJlbW92ZSgpO2ZvcihsZXRbdyxFXW9mIHYudG9hc3RDb250YWluZXJzLmVudHJpZXMoKSlpZihFPT09eSl7di50b2FzdENvbnRhaW5lcnMuZGVsZXRlKHcpO2JyZWFrfX19Zmlyc3RVcGRhdGVkKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInR5cGUiLHRoaXMudHlwZSl9c3RhdGlje3JvKHIsYSl9fTtyZXR1cm4gdj1yfSkoKTtmZSgpO3ZhciBzQnQ9YXN5bmMoKT0+e2xldCB0PWF3YWl0IG5OZS5jcmVhdGVBbmRTaG93KCk7c2V0VGltZW91dChhc3luYygpPT57YXdhaXQgdC5kZXN0cm95KCl9LDFlNCl9O2ZlKCk7ZmUoKTtCZSgpO3ZhciBsTmU9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxXST1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sbk5lPSgoKT0+e2xldCB0PVtjZSgiZGVlcy11cGRhdGVyIildLGUsYT1bXSxyLGk9cGUsbyxzPVtdLGw9W10sZixjPVtdLHU9W107dmFyIGQ9Y2xhc3MgZXh0ZW5kcyBpe3N0YXRpY3tyPXRoaXN9c3RhdGlje2xldCBoPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKGlbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO289W0Qoe3R5cGU6U3RyaW5nfSldLGY9W0Qoe3R5cGU6U3RyaW5nfSldLGxOZSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImN1cnJlbnRWZXJzaW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4iY3VycmVudFZlcnNpb24iaW4gZyxnZXQ6Zz0+Zy5jdXJyZW50VmVyc2lvbixzZXQ6KGcsYik9PntnLmN1cnJlbnRWZXJzaW9uPWJ9fSxtZXRhZGF0YTpofSxzLGwpLGxOZSh0aGlzLG51bGwsZix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InVwZGF0ZWRWZXJzaW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4idXBkYXRlZFZlcnNpb24iaW4gZyxnZXQ6Zz0+Zy51cGRhdGVkVmVyc2lvbixzZXQ6KGcsYik9PntnLnVwZGF0ZWRWZXJzaW9uPWJ9fSxtZXRhZGF0YTpofSxjLHUpLGxOZShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpofSxudWxsLGEpLGQ9cj1lLnZhbHVlLGgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6aH0pfXN0YXRpYyBkZW1vPXNCdDtzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdygpe2xldCBoPW5ldyBkO3JldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgpLGh9I2U9V0kodGhpcyxzLHZvaWQgMCk7Z2V0IGN1cnJlbnRWZXJzaW9uKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGN1cnJlbnRWZXJzaW9uKGgpe3RoaXMuI2U9aH0jdD0oV0kodGhpcyxsKSxXSSh0aGlzLGMsdm9pZCAwKSk7Z2V0IHVwZGF0ZWRWZXJzaW9uKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHVwZGF0ZWRWZXJzaW9uKGgpe3RoaXMuI3Q9aH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksV0kodGhpcyx1KSxzdC5lbGVtZW50QmFzaWMuc2V0dXAoKX1zdGF0aWMgc3R5bGVzPVt4ZSxwLmRlZmF1bHRTdHlsZXMsdGVgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIC5tb2RhbENvbnRhaW5lciB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiNlZWVlZWIiLCIjMjIyIil9OwogICAgICAgIG1heC13aWR0aDogODAwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3AuYmRUaGVtZSgiI2VlZWVlYiIsIiMzMzMiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNDBweCA0MHB4OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMzMzMiLCIjZmZmIil9OwogICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KCiAgICAgIC5idXR0b25Db250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA1MCUgNTAlOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPGRlZXMtd2luZG93bGF5ZXIKICAgICAgICBAY2xpY2tlZD0iJHt0aGlzLndpbmRvd0xheWVyQ2xpY2tlZH0iCiAgICAgICAgLm9wdGlvbnM9JHt7Ymx1cjohMH19CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbENvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRlZXMtc3Bpbm5lciAuc2l6ZT0kezYwfT48L2RlZXMtc3Bpbm5lcj4KICAgICAgICAgICAgPGgxPlVwZGF0aW5nIHRoZSBhcHBsaWNhdGlvbi4uLjwvaDE+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj4KICAgICAgICAgICAgPGRlZXMtcHJvZ3Jlc3NiYXIgLnByb2dyZXNzPSR7LjV9PjwvZGVlcy1wcm9ncmVzc2Jhcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPk1vcmUgaW5mbzwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5DaGFuZ2Vsb2c8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+IDwvZGVlcy13aW5kb3dsYXllcgogICAgICA+PgogICAgYH1hc3luYyBkZXN0cm95KCl7dGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMpfXdpbmRvd0xheWVyQ2xpY2tlZCgpe31zdGF0aWN7V0kocixhKX19O3JldHVybiBkPXJ9KSgpO2ZlKCk7dmFyIG5CdD0oKT0+TWAKICA8c3R5bGU+CiAgICAuZGVtby1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDMycHg7CiAgICAgIHBhZGRpbmc6IDQ4cHg7CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZjhmOWZhIiwiIzBhMGEwYSIpfTsKICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICB9CgogICAgLnNlY3Rpb24gewogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2ZmZmZmZiIsIiMxODE4MWIiKX07CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBwYWRkaW5nOiAyNHB4OwogICAgfQoKICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgfQoKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgfQoKICAgIC50b2tlbi1ncmlkIHsKICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMjAwcHgsIDFmcikpOwogICAgICBnYXA6IDE2cHg7CiAgICB9CgogICAgLnRva2VuLWl0ZW0gewogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgcGFkZGluZzogMTZweDsKICAgIH0KCiAgICAudG9rZW4tbmFtZSB7CiAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZWwgT25lIE1vbm8nLCBtb25vc3BhY2U7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgfQoKICAgIC50b2tlbi12YWx1ZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7cC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgIH0KCiAgICAuc3BhY2luZy1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICBnYXA6IDhweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgfQoKICAgIC5zcGFjaW5nLWJveCB7CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgIC5yYWRpdXMtZGVtbyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMTZweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgfQoKICAgIC5yYWRpdXMtYm94IHsKICAgICAgd2lkdGg6IDYwcHg7CiAgICAgIGhlaWdodDogNjBweDsKICAgICAgYmFja2dyb3VuZDogJHtwLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CgogICAgLnNoYWRvdy1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAyNHB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLnNoYWRvdy1ib3ggewogICAgICB3aWR0aDogMTAwcHg7CiAgICAgIGhlaWdodDogMTAwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7cC5iZFRoZW1lKCIjZmZmZmZmIiwiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBjb2xvcjogJHtwLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgfQoKICAgIC5oZWlnaHQtZGVtbyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMTZweDsKICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLmhlaWdodC1ib3ggewogICAgICBiYWNrZ3JvdW5kOiAke3AuYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy10aGVtZT4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3BhY2luZyBTY2FsZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPgogICAgICAgICAgQ1NTIHZhcmlhYmxlczogLS1kZWVzLXNwYWNpbmcteHMgdGhyb3VnaCAtLWRlZXMtc3BhY2luZy0zeGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLXhzKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmcteHMpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnhzICg0cHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy1zbSk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLXNtKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5zbSAoOHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctbWQpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy1tZCk7Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bWQgKDEycHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy1sZyk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLWxnKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5sZyAoMTZweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLXhsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmcteGwpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnhsICgyNHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctMnhsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmctMnhsKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4yeGwgKDMycHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy0zeGwpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy0zeGwpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjN4bCAoNDhweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkJvcmRlciBSYWRpdXMgU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1yYWRpdXMteHMgdGhyb3VnaCAtLWRlZXMtcmFkaXVzLWZ1bGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtZGVtbyI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMteHMpOyI+eHM8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+MnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1zbSk7Ij5zbTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj40cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLWJveCIgc3R5bGU9ImJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXMtcmFkaXVzLW1kKTsiPm1kPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjZweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMtbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+OHB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy14bCk7Ij54bDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4xMnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1mdWxsKTsiPmZ1bGw8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+OTk5cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNoYWRvdyBFbGV2YXRpb24gU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1zaGFkb3cteHMgdGhyb3VnaCAtLWRlZXMtc2hhZG93LWxnCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LXhzKTsiPnhzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPm1pbmltYWw8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LXNtKTsiPnNtPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnN1YnRsZTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFkb3ctYm94IiBzdHlsZT0iYm94LXNoYWRvdzogdmFyKC0tZGVlcy1zaGFkb3ctbWQpOyI+bWQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bWVkaXVtPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYWRvdy1ib3giIHN0eWxlPSJib3gtc2hhZG93OiB2YXIoLS1kZWVzLXNoYWRvdy1sZyk7Ij5sZzwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5wcm9taW5lbnQ8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkNvbnRyb2wgSGVpZ2h0IFNjYWxlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtY29udHJvbC1oZWlnaHQtc20gdGhyb3VnaCAtLWRlZXMtY29udHJvbC1oZWlnaHQteGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtZGVtbyI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXNtKTsiPnNtPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjMycHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVpZ2h0LWJveCIgc3R5bGU9ImhlaWdodDogdmFyKC0tZGVlcy1jb250cm9sLWhlaWdodC1tZCk7Ij5tZDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4zNnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlaWdodC1ib3giIHN0eWxlPSJoZWlnaHQ6IHZhcigtLWRlZXMtY29udHJvbC1oZWlnaHQtbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+NDBweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXhsKTsiPnhsPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjQ4cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlRyYW5zaXRpb24gRHVyYXRpb25zPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtdHJhbnNpdGlvbi1mYXN0IHRocm91Z2ggLS1kZWVzLXRyYW5zaXRpb24tc2xvd2VyCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1pdGVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+LS1kZWVzLXRyYW5zaXRpb24tZmFzdDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4xczwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1pdGVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+LS1kZWVzLXRyYW5zaXRpb24tZGVmYXVsdDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4xNXM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLXNsb3c8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tdmFsdWUiPjAuMnM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLXNsb3dlcjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4zczwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kZWVzLXRoZW1lPgogIDwvZGl2PgpgO2ZlKCk7QmUoKTt2YXIgeTU9ZnVuY3Rpb24odCxlLGEscixpLG8pe2Z1bmN0aW9uIHModil7aWYodiE9PXZvaWQgMCYmdHlwZW9mIHYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4gdn1mb3IodmFyIGw9ci5raW5kLGY9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/ci5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHU9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHIubmFtZSk6e30pLGQsaD0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBiPXt9O2Zvcih2YXIgeCBpbiByKWJbeF09eD09PSJhY2Nlc3MiP3t9OnJbeF07Zm9yKHZhciB4IGluIHIuYWNjZXNzKWIuYWNjZXNzW3hdPXIuYWNjZXNzW3hdO2IuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24odil7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtvLnB1c2gocyh2fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6dS5nZXQsc2V0OnUuc2V0fTp1W2ZdLGIpO2lmKGw9PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGQ9cyhtLmdldCkpJiYodS5nZXQ9ZCksKGQ9cyhtLnNldCkpJiYodS5zZXQ9ZCksKGQ9cyhtLmluaXQpKSYmaS51bnNoaWZ0KGQpfWVsc2UoZD1zKG0pKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChkKTp1W2ZdPWQpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHIubmFtZSx1KSxoPSEwfSxocj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspYT1yP2VbaV0uY2FsbCh0LGEpOmVbaV0uY2FsbCh0KTtyZXR1cm4gcj9hOnZvaWQgMH0sJG4xPSgoKT0+e2xldCB0PVtjZSgiZGVlcy10aGVtZSIpXSxlLGE9W10scixpPXBlLG8scz1bXSxsPVtdLGYsYz1bXSx1PVtdLGQsaD1bXSxnPVtdLGIseD1bXSxtPVtdLHYseT1bXSx3PVtdO3ZhciBFPWNsYXNzIGV4dGVuZHMgaXtzdGF0aWN7cj10aGlzfXN0YXRpY3tsZXQgQz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShpW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtvPVtEKHt0eXBlOk9iamVjdH0pXSxmPVtEKHt0eXBlOk9iamVjdH0pXSxkPVtEKHt0eXBlOk9iamVjdH0pXSxiPVtEKHt0eXBlOk9iamVjdH0pXSx2PVtEKHt0eXBlOk9iamVjdH0pXSx5NSh0aGlzLG51bGwsbyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImN1c3RvbVNwYWNpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJjdXN0b21TcGFjaW5nImluIHosZ2V0Ono9PnouY3VzdG9tU3BhY2luZyxzZXQ6KHosUCk9Pnt6LmN1c3RvbVNwYWNpbmc9UH19LG1ldGFkYXRhOkN9LHMsbCkseTUodGhpcyxudWxsLGYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXN0b21SYWRpdXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJjdXN0b21SYWRpdXMiaW4geixnZXQ6ej0+ei5jdXN0b21SYWRpdXMsc2V0Oih6LFApPT57ei5jdXN0b21SYWRpdXM9UH19LG1ldGFkYXRhOkN9LGMsdSkseTUodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXN0b21TaGFkb3dzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4iY3VzdG9tU2hhZG93cyJpbiB6LGdldDp6PT56LmN1c3RvbVNoYWRvd3Msc2V0Oih6LFApPT57ei5jdXN0b21TaGFkb3dzPVB9fSxtZXRhZGF0YTpDfSxoLGcpLHk1KHRoaXMsbnVsbCxiLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY3VzdG9tVHJhbnNpdGlvbnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJjdXN0b21UcmFuc2l0aW9ucyJpbiB6LGdldDp6PT56LmN1c3RvbVRyYW5zaXRpb25zLHNldDooeixQKT0+e3ouY3VzdG9tVHJhbnNpdGlvbnM9UH19LG1ldGFkYXRhOkN9LHgsbSkseTUodGhpcyxudWxsLHYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXN0b21Db250cm9sSGVpZ2h0cyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImN1c3RvbUNvbnRyb2xIZWlnaHRzImluIHosZ2V0Ono9PnouY3VzdG9tQ29udHJvbEhlaWdodHMsc2V0Oih6LFApPT57ei5jdXN0b21Db250cm9sSGVpZ2h0cz1QfX0sbWV0YWRhdGE6Q30seSx3KSx5NShudWxsLGU9e3ZhbHVlOnJ9LHQse2tpbmQ6ImNsYXNzIixuYW1lOnIubmFtZSxtZXRhZGF0YTpDfSxudWxsLGEpLEU9cj1lLnZhbHVlLEMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Q30pfXN0YXRpYyBkZW1vPW5CdDsjZT1ocih0aGlzLHMsbnVsbCk7Z2V0IGN1c3RvbVNwYWNpbmcoKXtyZXR1cm4gdGhpcy4jZX1zZXQgY3VzdG9tU3BhY2luZyhDKXt0aGlzLiNlPUN9I3Q9KGhyKHRoaXMsbCksaHIodGhpcyxjLG51bGwpKTtnZXQgY3VzdG9tUmFkaXVzKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGN1c3RvbVJhZGl1cyhDKXt0aGlzLiN0PUN9I2E9KGhyKHRoaXMsdSksaHIodGhpcyxoLG51bGwpKTtnZXQgY3VzdG9tU2hhZG93cygpe3JldHVybiB0aGlzLiNhfXNldCBjdXN0b21TaGFkb3dzKEMpe3RoaXMuI2E9Q30jcj0oaHIodGhpcyxnKSxocih0aGlzLHgsbnVsbCkpO2dldCBjdXN0b21UcmFuc2l0aW9ucygpe3JldHVybiB0aGlzLiNyfXNldCBjdXN0b21UcmFuc2l0aW9ucyhDKXt0aGlzLiNyPUN9I2k9KGhyKHRoaXMsbSksaHIodGhpcyx5LG51bGwpKTtnZXQgY3VzdG9tQ29udHJvbEhlaWdodHMoKXtyZXR1cm4gdGhpcy4jaX1zZXQgY3VzdG9tQ29udHJvbEhlaWdodHMoQyl7dGhpcy4jaT1DfXN0YXRpYyBzdHlsZXM9W3hlLHAuZGVmYXVsdFN0eWxlcyx0ZWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gTWAKICAgICAgPHN0eWxlPgogICAgICAgICR7dGhpcy5nZW5lcmF0ZUN1c3RvbVN0eWxlcygpfQogICAgICA8L3N0eWxlPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgfWdlbmVyYXRlQ3VzdG9tU3R5bGVzKCl7bGV0IEM9WyI6aG9zdCB7Il07aWYodGhpcy5jdXN0b21TcGFjaW5nKWZvcihsZXRbeixQXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tU3BhY2luZykpUCYmQy5wdXNoKGAgIC0tZGVlcy1zcGFjaW5nLSR7en06ICR7UH07YCk7aWYodGhpcy5jdXN0b21SYWRpdXMpZm9yKGxldFt6LFBdb2YgT2JqZWN0LmVudHJpZXModGhpcy5jdXN0b21SYWRpdXMpKVAmJkMucHVzaChgICAtLWRlZXMtcmFkaXVzLSR7en06ICR7UH07YCk7aWYodGhpcy5jdXN0b21TaGFkb3dzKWZvcihsZXRbeixQXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tU2hhZG93cykpUCYmQy5wdXNoKGAgIC0tZGVlcy1zaGFkb3ctJHt6fTogJHtQfTtgKTtpZih0aGlzLmN1c3RvbVRyYW5zaXRpb25zKXtmb3IobGV0W3osUF1vZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVRyYW5zaXRpb25zKSlpZihQKXtsZXQgXz16PT09ImRlZmF1bHQiPyJkZWZhdWx0Ijp6O0MucHVzaChgICAtLWRlZXMtdHJhbnNpdGlvbi0ke199OiAke1B9O2ApfX1pZih0aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzKWZvcihsZXRbeixQXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMpKVAmJkMucHVzaChgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtJHt6fTogJHtQfTtgKTtyZXR1cm4gQy5wdXNoKCJ9IiksQy5qb2luKGAKYCl9c2V0U3BhY2luZyhDLHope3RoaXMuY3VzdG9tU3BhY2luZz17Li4udGhpcy5jdXN0b21TcGFjaW5nLFtDXTp6fX1zZXRSYWRpdXMoQyx6KXt0aGlzLmN1c3RvbVJhZGl1cz17Li4udGhpcy5jdXN0b21SYWRpdXMsW0NdOnp9fXNldFNoYWRvdyhDLHope3RoaXMuY3VzdG9tU2hhZG93cz17Li4udGhpcy5jdXN0b21TaGFkb3dzLFtDXTp6fX1zZXRUcmFuc2l0aW9uKEMseil7dGhpcy5jdXN0b21UcmFuc2l0aW9ucz17Li4udGhpcy5jdXN0b21UcmFuc2l0aW9ucyxbQ106en19c2V0Q29udHJvbEhlaWdodChDLHope3RoaXMuY3VzdG9tQ29udHJvbEhlaWdodHM9ey4uLnRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMsW0NdOnp9fWdldFRoZW1lKCl7cmV0dXJue2NvbG9yczpBbi5jb2xvcnMsc3BhY2luZzp7Li4uQW4uc3BhY2luZywuLi50aGlzLmN1c3RvbVNwYWNpbmd9LHJhZGl1czp7Li4uQW4ucmFkaXVzLC4uLnRoaXMuY3VzdG9tUmFkaXVzfSxzaGFkb3dzOnsuLi5Bbi5zaGFkb3dzLC4uLnRoaXMuY3VzdG9tU2hhZG93c30sdHJhbnNpdGlvbnM6ey4uLkFuLnRyYW5zaXRpb25zLC4uLnRoaXMuY3VzdG9tVHJhbnNpdGlvbnN9LGNvbnRyb2xIZWlnaHRzOnsuLi5Bbi5jb250cm9sSGVpZ2h0cywuLi50aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzfX19cmVzZXRUb0RlZmF1bHRzKCl7dGhpcy5jdXN0b21TcGFjaW5nPW51bGwsdGhpcy5jdXN0b21SYWRpdXM9bnVsbCx0aGlzLmN1c3RvbVNoYWRvd3M9bnVsbCx0aGlzLmN1c3RvbVRyYW5zaXRpb25zPW51bGwsdGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cz1udWxsfWFwcGx5VGhlbWUoQyl7Qy5zcGFjaW5nJiYodGhpcy5jdXN0b21TcGFjaW5nPUMuc3BhY2luZyksQy5yYWRpdXMmJih0aGlzLmN1c3RvbVJhZGl1cz1DLnJhZGl1cyksQy5zaGFkb3dzJiYodGhpcy5jdXN0b21TaGFkb3dzPUMuc2hhZG93cyksQy50cmFuc2l0aW9ucyYmKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnM9Qy50cmFuc2l0aW9ucyksQy5jb250cm9sSGVpZ2h0cyYmKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHM9Qy5jb250cm9sSGVpZ2h0cyl9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGhyKHRoaXMsdyl9c3RhdGlje2hyKHIsYSl9fTtyZXR1cm4gRT1yfSkoKTtCZSgpO21qKCk7ZmUoKTt2YXIgbEJ0LGNCdCxkQnQsZkJ0LHVCdCxwQnQsVzIsY05lLGROZSxmTmUsdU5lO3BCdD1bY2UoIm9wZW5jZG4tbWFpbnBhZ2UiKV07dmFyIFFyPWNsYXNzIGV4dGVuZHModUJ0PXBlLGZCdD1bRCh7dHlwZTpTdHJpbmd9KV0sZEJ0PVtEKHt0eXBlOlN0cmluZ30pXSxjQnQ9W0Qoe3R5cGU6QXJyYXl9KV0sbEJ0PVtsZSgpXSx1QnQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtKMSh0aGlzLGNOZSxEdChXMiw4LHRoaXMsIjEuMC4wIikpLER0KFcyLDExLHRoaXMpO0oxKHRoaXMsZE5lLER0KFcyLDEyLHRoaXMsInByb2QiKSksRHQoVzIsMTUsdGhpcyk7SjEodGhpcyxmTmUsRHQoVzIsMTYsdGhpcyxbXSkpLER0KFcyLDE5LHRoaXMpO0oxKHRoaXMsdU5lLER0KFcyLDIwLHRoaXMsImhvbWUiKSksRHQoVzIsMjMsdGhpcyl9cmVuZGVyKCl7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWljb24iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnBhY2thZ2UifSAuaWNvblNpemU9JHsyNH0+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibG9nby10ZXh0Ij5vcGVuY2RuPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8cCBjbGFzcz0idGFnbGluZSI+U2VydmUgZmlsZXMgZGlyZWN0bHkgZnJvbSBucG0gcGFja2FnZXM8L3A+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgICAgPGRpdiBjbGFzcz0idXNhZ2UtYm94Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNhZ2UtdGl0bGUiPlJlcXVlc3QgZmlsZXMgdXNpbmc6PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzYWdlLWNvZGUiPi9Ac2NvcGUvcGFja2FnZS9wYXRoL3RvL2ZpbGUuanM/dmVyc2lvbj0xLjAuMDwvZGl2PgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgJHt0aGlzLm1vZGU9PT0iZGV2Ij9NYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYXYtYnV0dG9ucyI+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIiBAY2xpY2s9JHsoKT0+d2luZG93LmxvY2F0aW9uLmhyZWY9Ii9wZWVrLyJ9PgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Zm9sZGVyLW9wZW4ifSAuaWNvblNpemU9JHsxNn0gc2xvdD0iaWNvbkxlZnQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgQnJvd3NlIFBhY2thZ2VzCiAgICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PndpbmRvdy5sb2NhdGlvbi5ocmVmPSIvcmVhZG1lLyJ9PgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Ym9vay1vcGVuIn0gLmljb25TaXplPSR7MTZ9IHNsb3Q9Imljb25MZWZ0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24KICAgICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6IiJ9CgogICAgICAgICAgJHt0aGlzLmFsbG93ZWRQYWNrYWdlcy5sZW5ndGg+MD9NYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWNrYWdlcy1zZWN0aW9uIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWNrYWdlcy10aXRsZSI+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpib3hlcyJ9IC5pY29uU2l6ZT0kezE2fT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIEF2YWlsYWJsZSBQYWNrYWdlcwogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhY2thZ2VzLWxpc3QiPgogICAgICAgICAgICAgICAgJHt0aGlzLmFsbG93ZWRQYWNrYWdlcy5tYXAoYT0+TWAKICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBhY2thZ2UtdGFnIiBAY2xpY2s9JHsoKT0+d2luZG93LmxvY2F0aW9uLmhyZWY9YC9wZWVrLyR7YX1gfT4KICAgICAgICAgICAgICAgICAgICAke2F9CiAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6TWAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnBhY2thZ2UteCJ9IC5pY29uU2l6ZT0kezQ4fSBzdHlsZT0ib3BhY2l0eTogMC41OyI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPHA+Tm8gcGFja2FnZXMgY29uZmlndXJlZDwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXIiPgogICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMnB4OyI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0dXMiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0dXMtZG90Ij48L3NwYW4+CiAgICAgICAgICAgICAgT25saW5lCiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24iPnYke3RoaXMudmVyc2lvbn08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RlLWJhZGdlICR7dGhpcy5tb2RlfSI+JHt0aGlzLm1vZGV9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXItcmlnaHQiPgogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3Rhc2sudmMiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iZm9vdGVyLWxpbmsiPlRhc2sgVmVudHVyZSBDYXBpdGFsPC9hPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH19O1cyPVhJKHVCdCksY05lPW5ldyBXZWFrTWFwLGROZT1uZXcgV2Vha01hcCxmTmU9bmV3IFdlYWtNYXAsdU5lPW5ldyBXZWFrTWFwLEkxKFcyLDQsInZlcnNpb24iLGZCdCxRcixjTmUpLEkxKFcyLDQsIm1vZGUiLGRCdCxRcixkTmUpLEkxKFcyLDQsImFsbG93ZWRQYWNrYWdlcyIsY0J0LFFyLGZOZSksSTEoVzIsNCwiY3VycmVudFZpZXciLGxCdCxRcix1TmUpLFFyPUkxKFcyLDAsIk9wZW5jZG5NYWlucGFnZSIscEJ0LFFyKSxRSShRciwic3R5bGVzIixbdGVgCiAgICAgIDpob3N0IHsKICAgICAgICAtLWJhY2tncm91bmQ6ICMwOTA5MGI7CiAgICAgICAgLS1mb3JlZ3JvdW5kOiAjZmFmYWZhOwogICAgICAgIC0tY2FyZDogIzA5MDkwYjsKICAgICAgICAtLWNhcmQtZm9yZWdyb3VuZDogI2ZhZmFmYTsKICAgICAgICAtLW11dGVkOiAjMjcyNzJhOwogICAgICAgIC0tbXV0ZWQtZm9yZWdyb3VuZDogI2ExYTFhYTsKICAgICAgICAtLWJvcmRlcjogIzI3MjcyYTsKICAgICAgICAtLWlucHV0OiAjMjcyNzJhOwogICAgICAgIC0tcHJpbWFyeTogI2ZhZmFmYTsKICAgICAgICAtLXByaW1hcnktZm9yZWdyb3VuZDogIzE4MTgxYjsKICAgICAgICAtLXNlY29uZGFyeTogIzI3MjcyYTsKICAgICAgICAtLXNlY29uZGFyeS1mb3JlZ3JvdW5kOiAjZmFmYWZhOwogICAgICAgIC0tYWNjZW50OiAjMjcyNzJhOwogICAgICAgIC0tYWNjZW50LWZvcmVncm91bmQ6ICNmYWZhZmE7CiAgICAgICAgLS1yaW5nOiAjZDRkNGQ4OwogICAgICAgIC0tcmFkaXVzOiAwLjVyZW07CgogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQpOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgJ0hlbHZldGljYSBOZXVlJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZCk7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH0KCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5jb250YWluZXIgewogICAgICAgIG1heC13aWR0aDogNzAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgcGFkZGluZzogNjBweCAyNHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IDQ4cHg7CiAgICAgIH0KCiAgICAgIC5sb2dvIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAubG9nby1pY29uIHsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZm9yZWdyb3VuZCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sb2dvLWljb24gZGVlcy1pY29uIHsKICAgICAgICAtLWRlZXMtaWNvbi1jb2xvcjogdmFyKC0tYmFja2dyb3VuZCk7CiAgICAgIH0KCiAgICAgIC5sb2dvLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMzZweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1mb3JlZ3JvdW5kKTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsKICAgICAgfQoKICAgICAgLnRhZ2xpbmUgewogICAgICAgIGNvbG9yOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKTsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQoKICAgICAgLmNhcmQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNhcmQpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzKTsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICB9CgogICAgICAudXNhZ2UtYm94IHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tdXRlZCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzKTsKICAgICAgICBwYWRkaW5nOiAyMHB4IDI0cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgICAgfQoKICAgICAgLnVzYWdlLXRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAudXNhZ2UtY29kZSB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ0ZpcmEgQ29kZScsICdGaXJhIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZCk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFja2dyb3VuZCk7CiAgICAgICAgcGFkZGluZzogMTRweCAxOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tcmFkaXVzKSAtIDJweCk7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICAgIH0KCiAgICAgIC5uYXYtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAubmF2LWJ1dHRvbnMgZGVlcy1idXR0b24gewogICAgICAgIC0tZGVlcy1idXR0b24td2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIC5wYWNrYWdlcy1zZWN0aW9uIHsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wYWNrYWdlcy10aXRsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLWZvcmVncm91bmQpOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAucGFja2FnZXMtbGlzdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wYWNrYWdlLXRhZyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5KTsKICAgICAgICBjb2xvcjogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCk7CiAgICAgICAgcGFkZGluZzogOHB4IDE0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogY2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KTsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnRmlyYSBDb2RlJywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnBhY2thZ2UtdGFnOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB2YXIoLS1mb3JlZ3JvdW5kKTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXJpbmcpOwogICAgICB9CgogICAgICAuZm9vdGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmctdG9wOiAzMnB4OwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKTsKICAgICAgfQoKICAgICAgLnN0YXR1cyB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjb2xvcjogIzIyYzU1ZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN0YXR1cy1kb3QgewogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogIzIyYzU1ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBwdWxzZSAycyBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBwdWxzZSB7CiAgICAgICAgMCUsIDEwMCUgeyBvcGFjaXR5OiAxOyB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMC41OyB9CiAgICAgIH0KCiAgICAgIC52ZXJzaW9uIHsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6IHZhcigtLW11dGVkLWZvcmVncm91bmQpOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQoKICAgICAgLm1vZGUtYmFkZ2UgewogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tcmFkaXVzKSAtIDJweCk7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICB9CgogICAgICAubW9kZS1iYWRnZS5kZXYgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMSk7CiAgICAgICAgY29sb3I6ICMyMmM1NWU7CiAgICAgIH0KCiAgICAgIC5tb2RlLWJhZGdlLnByb2QgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMSk7CiAgICAgICAgY29sb3I6ICNlZjQ0NDQ7CiAgICAgIH0KCiAgICAgIC5mb290ZXItcmlnaHQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5mb290ZXItbGluayB7CiAgICAgICAgY29sb3I6IHZhcigtLW11dGVkLWZvcmVncm91bmQpOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgLmZvb3Rlci1saW5rOmhvdmVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZCk7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQwcHggMjBweDsKICAgICAgICBjb2xvcjogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CiAgICBgXSksRHQoVzIsMSxRcik7ZmUoKTt2YXIgaEJ0LG1CdCxnQnQseEJ0LGJCdCx2QnQseUJ0LHdCdCxNQnQsekJ0LGtCdCxTQnQsQ0J0LFR0LHBOZSxoTmUsbU5lLGdOZSx4TmUsYk5lLHZOZSx5TmUsd05lLE1OZSx6TmU7Q0J0PVtjZSgib3BlbmNkbi1wZWVrcGFnZSIpXTt2YXIgZDI9Y2xhc3MgZXh0ZW5kcyhTQnQ9cGUsa0J0PVtEKHt0eXBlOlN0cmluZ30pXSx6QnQ9W0Qoe3R5cGU6U3RyaW5nfSldLE1CdD1bRCh7dHlwZTpBcnJheX0pXSx3QnQ9W2xlKCldLHlCdD1bbGUoKV0sdkJ0PVtsZSgpXSxiQnQ9W2xlKCldLHhCdD1bbGUoKV0sZ0J0PVtsZSgpXSxtQnQ9W2xlKCldLGhCdD1bbGUoKV0sU0J0KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7SjEodGhpcyxwTmUsRHQoVHQsOCx0aGlzLCIiKSksRHQoVHQsMTEsdGhpcyk7SjEodGhpcyxoTmUsRHQoVHQsMTIsdGhpcywiIikpLER0KFR0LDE1LHRoaXMpO0oxKHRoaXMsbU5lLER0KFR0LDE2LHRoaXMsW10pKSxEdChUdCwxOSx0aGlzKTtKMSh0aGlzLGdOZSxEdChUdCwyMCx0aGlzLFtdKSksRHQoVHQsMjMsdGhpcyk7SjEodGhpcyx4TmUsRHQoVHQsMjQsdGhpcyxbXSkpLER0KFR0LDI3LHRoaXMpO0oxKHRoaXMsYk5lLER0KFR0LDI4LHRoaXMsbnVsbCkpLER0KFR0LDMxLHRoaXMpO0oxKHRoaXMsdk5lLER0KFR0LDMyLHRoaXMsIiIpKSxEdChUdCwzNSx0aGlzKTtKMSh0aGlzLHlOZSxEdChUdCwzNix0aGlzLCExKSksRHQoVHQsMzksdGhpcyk7SjEodGhpcyx3TmUsRHQoVHQsNDAsdGhpcywiIikpLER0KFR0LDQzLHRoaXMpO0oxKHRoaXMsTU5lLER0KFR0LDQ0LHRoaXMsW10pKSxEdChUdCw0Nyx0aGlzKTtKMSh0aGlzLHpOZSxEdChUdCw0OCx0aGlzLG5ldyBTZXQpKSxEdChUdCw1MSx0aGlzKX1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7bGV0IGE9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO2lmKGEuc3RhcnRzV2l0aCgiL3BlZWsvIikmJmEubGVuZ3RoPjYpe2xldCByPWEuc2xpY2UoNikuc3BsaXQoIi8iKTtyWzBdPy5zdGFydHNXaXRoKCJAIikmJnJbMV0mJih0aGlzLnBhY2thZ2VOYW1lPWAke3JbMF19LyR7clsxXX1gLGF3YWl0IHRoaXMubG9hZFBhY2thZ2VGaWxlcygpKX19YXN5bmMgbG9hZFBhY2thZ2VGaWxlcygpe2lmKHRoaXMucGFja2FnZU5hbWUpe3RoaXMubG9hZGluZz0hMDt0cnl7bGV0IGE9YXdhaXQgZmV0Y2goYC9hcGkvZmlsZXMvJHt0aGlzLnBhY2thZ2VOYW1lfT92ZXJzaW9uPSR7dGhpcy52ZXJzaW9ufWApO2lmKGEub2spe2xldCByPWF3YWl0IGEuanNvbigpO3RoaXMuZmlsZXM9ci5maWxlc3x8W10sdGhpcy5hdmFpbGFibGVWZXJzaW9ucz1yLnZlcnNpb25zfHxbXSx0aGlzLmZpbGVUcmVlPXRoaXMuYnVpbGRGaWxlVHJlZSh0aGlzLmZpbGVzKX19Y2F0Y2goYSl7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGxvYWQgcGFja2FnZSBmaWxlczoiLGEpfXRoaXMubG9hZGluZz0hMX19YnVpbGRGaWxlVHJlZShhKXtsZXQgcj1bXTtmb3IobGV0IG8gb2YgYSl7bGV0IHM9by5zcGxpdCgiLyIpLmZpbHRlcihCb29sZWFuKSxsPXIsZj0iIjtmb3IobGV0IGM9MDtjPHMubGVuZ3RoO2MrKyl7bGV0IHU9c1tjXTtmKz0iLyIrdTtsZXQgZD1jPT09cy5sZW5ndGgtMSxoPWwuZmluZChnPT5nLm5hbWU9PT11KTtofHwoaD17bmFtZTp1LHBhdGg6Zixpc0ZpbGU6ZCxjaGlsZHJlbjpkP3ZvaWQgMDpbXX0sbC5wdXNoKGgpKSwhZCYmaC5jaGlsZHJlbiYmKGw9aC5jaGlsZHJlbil9fWxldCBpPW89PntvLnNvcnQoKHMsbCk9PnMuaXNGaWxlJiYhbC5pc0ZpbGU/MTohcy5pc0ZpbGUmJmwuaXNGaWxlPy0xOnMubmFtZS5sb2NhbGVDb21wYXJlKGwubmFtZSkpO2ZvcihsZXQgcyBvZiBvKXMuY2hpbGRyZW4mJmkocy5jaGlsZHJlbil9O3JldHVybiBpKHIpLHJ9dG9nZ2xlRm9sZGVyKGEpe2xldCByPW5ldyBTZXQodGhpcy5leHBhbmRlZEZvbGRlcnMpO3IuaGFzKGEpP3IuZGVsZXRlKGEpOnIuYWRkKGEpLHRoaXMuZXhwYW5kZWRGb2xkZXJzPXJ9YXN5bmMgc2VsZWN0RmlsZShhKXt0aGlzLnNlbGVjdGVkRmlsZT1hLHRoaXMubG9hZGluZz0hMDt0cnl7bGV0IHI9YC8ke3RoaXMucGFja2FnZU5hbWV9JHthfT92ZXJzaW9uPSR7dGhpcy52ZXJzaW9ufWAsaT1hd2FpdCBmZXRjaChyKTt0aGlzLmZpbGVDb250ZW50PWF3YWl0IGkudGV4dCgpfWNhdGNoe3RoaXMuZmlsZUNvbnRlbnQ9IkZhaWxlZCB0byBsb2FkIGZpbGUifXRoaXMubG9hZGluZz0hMX1uYXZpZ2F0ZVRvUGFja2FnZShhKXt3aW5kb3cubG9jYXRpb24uaHJlZj1gL3BlZWsvJHthfWB9Z2V0IGZpbHRlcmVkUGFja2FnZXMoKXtpZighdGhpcy5zZWFyY2hRdWVyeSlyZXR1cm4gdGhpcy5hbGxvd2VkUGFja2FnZXM7bGV0IGE9dGhpcy5zZWFyY2hRdWVyeS50b0xvd2VyQ2FzZSgpO3JldHVybiB0aGlzLmFsbG93ZWRQYWNrYWdlcy5maWx0ZXIocj0+ci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGEpKX1yZW5kZXJUcmVlTm9kZShhKXtpZihhLmlzRmlsZSlyZXR1cm4gTWAKICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0idHJlZS1maWxlICR7dGhpcy5zZWxlY3RlZEZpbGU9PT1hLnBhdGg/ImFjdGl2ZSI6IiJ9IgogICAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMuc2VsZWN0RmlsZShhLnBhdGgpfQogICAgICAgID4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmZpbGUifSAuaWNvblNpemU9JHsxNH0+PC9kZWVzLWljb24+CiAgICAgICAgICAke2EubmFtZX0KICAgICAgICA8L2Rpdj4KICAgICAgYDtsZXQgcj10aGlzLmV4cGFuZGVkRm9sZGVycy5oYXMoYS5wYXRoKTtyZXR1cm4gTWAKICAgICAgPGRpdiBjbGFzcz0idHJlZS1mb2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImZvbGRlci1oZWFkZXIiIEBjbGljaz0keygpPT50aGlzLnRvZ2dsZUZvbGRlcihhLnBhdGgpfT4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtyPyJsdWNpZGU6Zm9sZGVyLW9wZW4iOiJsdWNpZGU6Zm9sZGVyIn0gLmljb25TaXplPSR7MTR9PjwvZGVlcy1pY29uPgogICAgICAgICAgJHthLm5hbWV9CiAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9sZGVyLWNoZXZyb24gJHtyPyJvcGVuIjoiIn0iPuKWtjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke3ImJmEuY2hpbGRyZW4/TWAKICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGRlci1jaGlsZHJlbiI+CiAgICAgICAgICAgICR7YS5jaGlsZHJlbi5tYXAoaT0+dGhpcy5yZW5kZXJUcmVlTm9kZShpKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyUGFja2FnZUxpc3QoKXtsZXQgYT10aGlzLmZpbHRlcmVkUGFja2FnZXM7cmV0dXJuIE1gCiAgICAgIDxkaXYgY2xhc3M9InBhY2thZ2UtbGlzdC1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1sb2dvIiBAY2xpY2s9JHsoKT0+d2luZG93LmxvY2F0aW9uLmhyZWY9Ii8ifT4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnBhY2thZ2UifSAuaWNvblNpemU9JHsyNH0+PC9kZWVzLWljb24+CiAgICAgICAgICBvcGVuY2RuCiAgICAgICAgPC9kaXY+CgogICAgICAgIDxoMSBjbGFzcz0icGFnZS10aXRsZSIgc3R5bGU9Im1hcmdpbi10b3A6IDMycHg7Ij5Ccm93c2UgUGFja2FnZXM8L2gxPgoKICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtYm94Ij4KICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9InNlYXJjaC1pY29uIiAuaWNvbj0keyJsdWNpZGU6c2VhcmNoIn0gLmljb25TaXplPSR7MTZ9PjwvZGVlcy1pY29uPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJzZWFyY2gtaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggcGFja2FnZXMuLi4iCiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuc2VhcmNoUXVlcnl9CiAgICAgICAgICAgIEBpbnB1dD0ke3I9PnRoaXMuc2VhcmNoUXVlcnk9ci50YXJnZXQudmFsdWV9CiAgICAgICAgICAvPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwYWNrYWdlLWNvdW50Ij4KICAgICAgICAgICR7YS5sZW5ndGg9PT10aGlzLmFsbG93ZWRQYWNrYWdlcy5sZW5ndGg/YCR7dGhpcy5hbGxvd2VkUGFja2FnZXMubGVuZ3RofSBwYWNrYWdlJHt0aGlzLmFsbG93ZWRQYWNrYWdlcy5sZW5ndGghPT0xPyJzIjoiIn0gYXZhaWxhYmxlYDpgJHthLmxlbmd0aH0gb2YgJHt0aGlzLmFsbG93ZWRQYWNrYWdlcy5sZW5ndGh9IHBhY2thZ2VzYH0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHthLmxlbmd0aD4wP01gCiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWNrYWdlLWxpc3QiPgogICAgICAgICAgICAke2EubWFwKHI9Pk1gCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFja2FnZS1saW5rIiBAY2xpY2s9JHsoKT0+dGhpcy5uYXZpZ2F0ZVRvUGFja2FnZShyKX0+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpwYWNrYWdlIn0gLmljb25TaXplPSR7MTZ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgJHtyfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA6TWAKICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLXJlc3VsdHMiPk5vIHBhY2thZ2VzIGZvdW5kIG1hdGNoaW5nIHlvdXIgc2VhcmNoLjwvZGl2PgogICAgICAgIGB9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJGaWxlQnJvd3Nlcigpe3JldHVybiBNYAogICAgICA8ZGl2IGNsYXNzPSJhcHAiPgogICAgICAgIDxoZWFkZXIgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItbG9nbyIgQGNsaWNrPSR7KCk9PndpbmRvdy5sb2NhdGlvbi5ocmVmPSIvIn0+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnBhY2thZ2UifSAuaWNvblNpemU9JHsyMH0+PC9kZWVzLWljb24+CiAgICAgICAgICAgIG9wZW5jZG4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHNwYW4gY2xhc3M9ImhlYWRlci1zZXAiPi88L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVhZGVyLXBhY2thZ2UiPiR7dGhpcy5wYWNrYWdlTmFtZX08L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVhZGVyLXZlcnNpb24iPiR7dGhpcy52ZXJzaW9ufHwibGF0ZXN0In08L3NwYW4+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItc3BhY2VyIj48L2Rpdj4KICAgICAgICAgICR7dGhpcy5hdmFpbGFibGVWZXJzaW9ucy5sZW5ndGg+MD9NYAogICAgICAgICAgICA8c2VsZWN0CiAgICAgICAgICAgICAgY2xhc3M9InZlcnNpb24tc2VsZWN0IgogICAgICAgICAgICAgIEBjaGFuZ2U9JHthPT57dGhpcy52ZXJzaW9uPWEudGFyZ2V0LnZhbHVlLHRoaXMubG9hZFBhY2thZ2VGaWxlcygpfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+bGF0ZXN0PC9vcHRpb24+CiAgICAgICAgICAgICAgJHt0aGlzLmF2YWlsYWJsZVZlcnNpb25zLm1hcChhPT5NYAogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ke2F9ID9zZWxlY3RlZD0ke2E9PT10aGlzLnZlcnNpb259PiR7YX08L29wdGlvbj4KICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICBgOiIifQogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT53aW5kb3cubG9jYXRpb24uaHJlZj0iL3BlZWsvIn0+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmFycm93LWxlZnQifSAuaWNvblNpemU9JHsxNH0gc2xvdD0iaWNvbkxlZnQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICBBbGwgUGFja2FnZXMKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9oZWFkZXI+CgogICAgICAgIDxkaXYgY2xhc3M9Im1haW4iPgogICAgICAgICAgPGFzaWRlIGNsYXNzPSJzaWRlYmFyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPkZpbGVzICgke3RoaXMuZmlsZXMubGVuZ3RofSk8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS10cmVlIj4KICAgICAgICAgICAgICAke3RoaXMuZmlsZVRyZWUubWFwKGE9PnRoaXMucmVuZGVyVHJlZU5vZGUoYSkpfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvYXNpZGU+CgogICAgICAgICAgPG1haW4gY2xhc3M9ImNvbnRlbnQiPgogICAgICAgICAgICAke3RoaXMuc2VsZWN0ZWRGaWxlP01gCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1wYXRoIj4KICAgICAgICAgICAgICAgICAgPHNwYW4+JHt0aGlzLnNlbGVjdGVkRmlsZX08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtYWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e2xldCBhPWAvJHt0aGlzLnBhY2thZ2VOYW1lfSR7dGhpcy5zZWxlY3RlZEZpbGV9P3ZlcnNpb249JHt0aGlzLnZlcnNpb259YDt3aW5kb3cub3BlbihhLCJfYmxhbmsiKX19PgogICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmV4dGVybmFsLWxpbmsifSAuaWNvblNpemU9JHsxNH0gc2xvdD0iaWNvbkxlZnQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIFJhdwogICAgICAgICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS12aWV3ZXIiPgogICAgICAgICAgICAgICAgJHt0aGlzLmxvYWRpbmc/TWAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgICAgICAgICAgIDxkZWVzLXNwaW5uZXI+PC9kZWVzLXNwaW5uZXI+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYDpNYAogICAgICAgICAgICAgICAgICA8cHJlPiR7dGhpcy5maWxlQ29udGVudH08L3ByZT4KICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA6TWAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpmaWxlLXRleHQifSAuaWNvblNpemU9JHs0OH0gc3R5bGU9Im9wYWNpdHk6IDAuNTsiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdj5TZWxlY3QgYSBmaWxlIHRvIHZpZXcgaXRzIGNvbnRlbnRzPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9CiAgICAgICAgICA8L21haW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXIoKXtyZXR1cm4gdGhpcy5wYWNrYWdlTmFtZT90aGlzLnJlbmRlckZpbGVCcm93c2VyKCk6dGhpcy5yZW5kZXJQYWNrYWdlTGlzdCgpfX07VHQ9WEkoU0J0KSxwTmU9bmV3IFdlYWtNYXAsaE5lPW5ldyBXZWFrTWFwLG1OZT1uZXcgV2Vha01hcCxnTmU9bmV3IFdlYWtNYXAseE5lPW5ldyBXZWFrTWFwLGJOZT1uZXcgV2Vha01hcCx2TmU9bmV3IFdlYWtNYXAseU5lPW5ldyBXZWFrTWFwLHdOZT1uZXcgV2Vha01hcCxNTmU9bmV3IFdlYWtNYXAsek5lPW5ldyBXZWFrTWFwLEkxKFR0LDQsInBhY2thZ2VOYW1lIixrQnQsZDIscE5lKSxJMShUdCw0LCJ2ZXJzaW9uIix6QnQsZDIsaE5lKSxJMShUdCw0LCJhbGxvd2VkUGFja2FnZXMiLE1CdCxkMixtTmUpLEkxKFR0LDQsImZpbGVzIix3QnQsZDIsZ05lKSxJMShUdCw0LCJmaWxlVHJlZSIseUJ0LGQyLHhOZSksSTEoVHQsNCwic2VsZWN0ZWRGaWxlIix2QnQsZDIsYk5lKSxJMShUdCw0LCJmaWxlQ29udGVudCIsYkJ0LGQyLHZOZSksSTEoVHQsNCwibG9hZGluZyIseEJ0LGQyLHlOZSksSTEoVHQsNCwic2VhcmNoUXVlcnkiLGdCdCxkMix3TmUpLEkxKFR0LDQsImF2YWlsYWJsZVZlcnNpb25zIixtQnQsZDIsTU5lKSxJMShUdCw0LCJleHBhbmRlZEZvbGRlcnMiLGhCdCxkMix6TmUpLGQyPUkxKFR0LDAsIk9wZW5jZG5QZWVrcGFnZSIsQ0J0LGQyKSxRSShkMiwic3R5bGVzIixbcC5kZWZhdWx0U3R5bGVzLHRlYAogICAgICA6aG9zdCB7CiAgICAgICAgLS1iYWNrZ3JvdW5kOiAjMDkwOTBiOwogICAgICAgIC0tZm9yZWdyb3VuZDogI2ZhZmFmYTsKICAgICAgICAtLW11dGVkOiAjMjcyNzJhOwogICAgICAgIC0tbXV0ZWQtZm9yZWdyb3VuZDogI2ExYTFhYTsKICAgICAgICAtLWJvcmRlcjogIzI3MjcyYTsKICAgICAgICAtLXByaW1hcnk6ICNmYWZhZmE7CiAgICAgICAgLS1wcmltYXJ5LWZvcmVncm91bmQ6ICMxODE4MWI7CiAgICAgICAgLS1zZWNvbmRhcnk6ICMyNzI3MmE7CiAgICAgICAgLS1yaW5nOiAjZDRkNGQ4OwoKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQpOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgJ0hlbHZldGljYSBOZXVlJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZCk7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH0KCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5hcHAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC8qIEhlYWRlciAqLwogICAgICAuaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMjBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kKTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgICAgfQoKICAgICAgLmhlYWRlci1sb2dvIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6IHZhcigtLWZvcmVncm91bmQpOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXM7CiAgICAgIH0KCiAgICAgIC5oZWFkZXItbG9nbzpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLW11dGVkLWZvcmVncm91bmQpOwogICAgICB9CgogICAgICAuaGVhZGVyLXNlcCB7CiAgICAgICAgY29sb3I6IHZhcigtLWJvcmRlcik7CiAgICAgIH0KCiAgICAgIC5oZWFkZXItcGFja2FnZSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZCk7CiAgICAgIH0KCiAgICAgIC5oZWFkZXItdmVyc2lvbiB7CiAgICAgICAgcGFkZGluZzogNHB4IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tbXV0ZWQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6IHZhcigtLW11dGVkLWZvcmVncm91bmQpOwogICAgICB9CgogICAgICAuaGVhZGVyLXNwYWNlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLnZlcnNpb24tc2VsZWN0IHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tdXRlZCk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWZvcmVncm91bmQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzOwogICAgICB9CgogICAgICAudmVyc2lvbi1zZWxlY3Q6aG92ZXIsCiAgICAgIC52ZXJzaW9uLXNlbGVjdDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1yaW5nKTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAvKiBNYWluIENvbnRlbnQgKi8KICAgICAgLm1haW4gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAvKiBTaWRlYmFyICovCiAgICAgIC5zaWRlYmFyIHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFja2dyb3VuZCk7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICAgIH0KCiAgICAgIC5maWxlLXRyZWUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgfQoKICAgICAgLyogVHJlZSBJdGVtcyAqLwogICAgICAudHJlZS1mb2xkZXIgewogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuZm9sZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6IHZhcigtLWZvcmVncm91bmQpOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICAgIH0KCiAgICAgIC5mb2xkZXItaGVhZGVyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tdXRlZCk7CiAgICAgIH0KCiAgICAgIC5mb2xkZXItY2hldnJvbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xNXM7CiAgICAgIH0KCiAgICAgIC5mb2xkZXItY2hldnJvbi5vcGVuIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICAgIH0KCiAgICAgIC5mb2xkZXItY2hpbGRyZW4gewogICAgICAgIHBhZGRpbmctbGVmdDogMTZweDsKICAgICAgfQoKICAgICAgLnRyZWUtZmlsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6IHZhcigtLW11dGVkLWZvcmVncm91bmQpOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1czsKICAgICAgfQoKICAgICAgLnRyZWUtZmlsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tbXV0ZWQpOwogICAgICAgIGNvbG9yOiB2YXIoLS1mb3JlZ3JvdW5kKTsKICAgICAgfQoKICAgICAgLnRyZWUtZmlsZS5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnkpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LWZvcmVncm91bmQpOwogICAgICB9CgogICAgICAvKiBDb250ZW50IEFyZWEgKi8KICAgICAgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFja2dyb3VuZCk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXBhdGggewogICAgICAgIGZvbnQtZmFtaWx5OiAnU0YgTW9ubycsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtcGF0aCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZCk7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWFjdGlvbnMgewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIENvZGUgVmlld2VyICovCiAgICAgIC5jb2RlLXZpZXdlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kKTsKICAgICAgfQoKICAgICAgLmNvZGUtdmlld2VyIHByZSB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDE2cHggMjBweDsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnRmlyYSBDb2RlJywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgY29sb3I6IHZhcigtLWZvcmVncm91bmQpOwogICAgICB9CgogICAgICAvKiBFbXB0eSBTdGF0ZSAqLwogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLW11dGVkLWZvcmVncm91bmQpOwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLyogUGFja2FnZSBMaXN0IFZpZXcgKi8KICAgICAgLnBhY2thZ2UtbGlzdC1jb250YWluZXIgewogICAgICAgIG1heC13aWR0aDogNzAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgcGFkZGluZzogNjBweCAyNHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAucGFnZS10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1ib3ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuc2VhcmNoLWlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAxNHB4IDE2cHggMTRweCA0NHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLW11dGVkKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZCk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzOwogICAgICB9CgogICAgICAuc2VhcmNoLWlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXJpbmcpOwogICAgICB9CgogICAgICAuc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLW11dGVkLWZvcmVncm91bmQpOwogICAgICB9CgogICAgICAuc2VhcmNoLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxNHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBjb2xvcjogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCk7CiAgICAgIH0KCiAgICAgIC5wYWNrYWdlLWNvdW50IHsKICAgICAgICBjb2xvcjogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5wYWNrYWdlLWxpc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnBhY2thZ2UtbGluayB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxNnB4IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tbXV0ZWQpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1mb3JlZ3JvdW5kKTsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnRmlyYSBDb2RlJywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAucGFja2FnZS1saW5rOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5KTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXByaW1hcnkpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LWZvcmVncm91bmQpOwogICAgICB9CgogICAgICAubm8tcmVzdWx0cyB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQwcHggMjBweDsKICAgICAgICBjb2xvcjogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCk7CiAgICAgIH0KCiAgICAgIC8qIFNjcm9sbGJhciAqLwogICAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICB9CiAgICAgIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICAgIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLW11dGVkKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KICAgICAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzNmM2Y0NjsKICAgICAgfQogICAgYF0pLER0KFR0LDEsZDIpO2V4cG9ydHtRciBhcyBPcGVuY2RuTWFpbnBhZ2UsZDIgYXMgT3BlbmNkblBlZWtwYWdlfTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCkBsaXQvcmVhY3RpdmUtZWxlbWVudC9jc3MtdGFnLmpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAgKikKCkBsaXQvcmVhY3RpdmUtZWxlbWVudC9yZWFjdGl2ZS1lbGVtZW50LmpzOgpsaXQtaHRtbC9saXQtaHRtbC5qczoKbGl0LWVsZW1lbnQvbGl0LWVsZW1lbnQuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3Byb3BlcnR5LmpzOgpsaXQtaHRtbC9kaXJlY3RpdmUuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2N1c3RvbS1lbGVtZW50LmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9zdGF0ZS5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvZXZlbnQtb3B0aW9ucy5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvYmFzZS5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnkuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFsbC5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXN5bmMuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzc2lnbmVkLW5vZGVzLmpzOgpsaXQtaHRtbC9hc3luYy1kaXJlY3RpdmUuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvdW50aWwuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtcmVwbGFjZS5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy9hc3luYy1hcHBlbmQuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvcmVwZWF0LmpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAgKikKCmxpdC1odG1sL2lzLXNlcnZlci5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpzd2VldC1zY3JvbGwvc3dlZXQtc2Nyb2xsLmpzOgogICgqISBAcHJlc2VydmUgc3dlZXQtc2Nyb2xsIHY0LjAuMCAtIHRzdXlvc2hpd2FkYSB8IE1JVCBMaWNlbnNlICopCiAgKCohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCiAgICAgIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCiAgICAgIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgCiAgICAgIFRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAgICAgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRAogICAgICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLAogICAgICBNRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULgogIAogICAgICBTZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMKICAgICAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqKQoKbGl0LWh0bWwvc3RhdGljLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmUtaGVscGVycy5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1lbGVtZW50cy5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy9wcml2YXRlLWFzeW5jLWhlbHBlcnMuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMva2V5ZWQuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlL2luZGV4Lm1qczoKQGZvcnRhd2Vzb21lL2ZyZWUtYnJhbmRzLXN2Zy1pY29ucy9pbmRleC5tanM6CkBmb3J0YXdlc29tZS9mcmVlLXJlZ3VsYXItc3ZnLWljb25zL2luZGV4Lm1qczoKQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2luZGV4Lm1qczoKICAoKiEKICAgKiBGb250IEF3ZXNvbWUgRnJlZSA3LjEuMCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbQogICAqIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgKEljb25zOiBDQyBCWSA0LjAsIEZvbnRzOiBTSUwgT0ZMIDEuMSwgQ29kZTogTUlUIExpY2Vuc2UpCiAgICogQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuCiAgICopCgpsdWNpZGUvZGlzdC9lc20vZGVmYXVsdEF0dHJpYnV0ZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9jcmVhdGVFbGVtZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vcmVwbGFjZUVsZW1lbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hLWFycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYS1sYXJnZS1zbWFsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FjY2Vzc2liaWxpdHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hY3Rpdml0eS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fpci12ZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2stY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9haXJwbGF5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2stbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1zbW9rZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYnVtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tY2VudGVyLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1jZW50ZXItdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1lbmQtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWVuZC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtZGlzdHJpYnV0ZS1jZW50ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtc3RhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1qdXN0aWZ5LWNlbnRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1lbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWp1c3RpZnktc3RhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLXNwYWNlLWFyb3VuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtc3BhY2UtYmV0d2Vlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXN0YXJ0LWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1zdGFydC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLWRpc3RyaWJ1dGUtY2VudGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtZGlzdHJpYnV0ZS1lbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLXN0YXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtanVzdGlmeS1jZW50ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1qdXN0aWZ5LWVuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLWp1c3RpZnktc3RhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1zcGFjZS1hcm91bmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1zcGFjZS1iZXR3ZWVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYW1idWxhbmNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYW1wZXJzYW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYW1wZXJzYW5kcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FtcGhvcmEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmNob3IuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmdyeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fubm95ZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbnRlbm5hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYW52aWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcGVydHVyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FwcC13aW5kb3ctbWFjLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXBwLXdpbmRvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FwcGxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJjaGl2ZS1yZXN0b3JlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJjaGl2ZS14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJjaGl2ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FybWNoYWlyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLWRvd24tZGFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLWxlZnQtZGFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLXJpZ2h0LWRhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctdXAtZGFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tMC0xLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi0xLTAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLWEtei5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tZnJvbS1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tdG8tZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1uYXJyb3ctd2lkZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tdG8tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXdpZGUtbmFycm93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi16LWEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQtZnJvbS1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC10by1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXJpZ2h0LWZyb20tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXJpZ2h0LWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC10by1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC0wLTEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC0xLTAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1hLXouanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtZnJvbS1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1mcm9tLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtbmFycm93LXdpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLXRvLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC13aWRlLW5hcnJvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLXotYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3dzLXVwLWZyb20tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FzdGVyaXNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXQtc2lnbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F0b20uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hdWRpby1saW5lcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F3YXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXVkaW8td2F2ZWZvcm0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9heGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9heGlzLTNkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFieS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhY2twYWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtYWxlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1jZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1kb2xsYXItc2lnbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWV1cm8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1pbmRpYW4tcnVwZWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1pbmZvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtamFwYW5lc2UteWVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1wZXJjZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXBvdW5kLXN0ZXJsaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtcXVlc3Rpb24tbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXJ1c3NpYW4tcnVibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1zd2lzcy1mcmFuYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXR1cmtpc2gtbGlyYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZ2dhZ2UtY2xhaW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWxsb29uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFuYW5hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFuZGFnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jhbmtub3RlLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW5rbm90ZS1hcnJvdy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jhbmtub3RlLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW5rbm90ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhcmNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXJyZWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXNlbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdGguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LWNoYXJnaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1mdWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1sb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LW1lZGl1bS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktd2FybmluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWFrZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWFuLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlYW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWQtZG91YmxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVkLXNpbmdsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZWYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWVyLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLWRvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwtZWxlY3RyaWMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLXJpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi1ob3Jpem9udGFsLWVuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4taG9yaXpvbnRhbC1zdGFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4tdmVydGljYWwtZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi12ZXJ0aWNhbC1zdGFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpY2Vwcy1mbGV4ZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaWtlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmluYXJ5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmlvaGF6YXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmlub2N1bGFycy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpcmRob3VzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaXRjb2luLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmxlbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibGluZHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibG9ja3MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibHVldG9vdGgtY29ubmVjdGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmx1ZXRvb3RoLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JsdWV0b290aC1zZWFyY2hpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibHVldG9vdGguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib2xkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9sdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvbWIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1hbGVydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stYXVkaW8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1jb3B5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWhlYWRwaG9uZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWhlYXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1rZXkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWltYWdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1sb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1tYXJrZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1vcGVuLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1vcGVuLXRleHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stdGV4dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXR5cGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXVwLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXVzZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9va21hcmstY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2ttYXJrLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9va21hcmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29tLWJveC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvdC1tZXNzYWdlLXNxdWFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvdC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3R0bGUtd2luZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvdy1hcnJvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JveC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JveGVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJhY2VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJhY2tldHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFpbi1jaXJjdWl0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJhaW4tY29nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJhaW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmljay13YWxsLWZpcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmljay13YWxsLXNoaWVsZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWNrLXdhbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmllZmNhc2UtYnVzaW5lc3MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmllZmNhc2UtY29udmV5b3ItYmVsdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS1tZWRpY2FsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJpZWZjYXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJpbmctdG8tZnJvbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icnVzaC1jbGVhbmluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JydXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnViYmxlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1Zy1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWctcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1Zy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1aWxkaW5nLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWlsZGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1cy1mcm9udC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhYmxlLWNhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhYmxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FrZS1zbGljZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nha2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxjdWxhdG9yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItMS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1hcnJvdy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNoZWNrLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNsb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItZGF5cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWZvbGQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLW1pbnVzLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXBsdXMtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1yYW5nZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXN5bmMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci14LTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW1lcmEtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FtZXJhLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FuZHktY2FuZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbmR5LW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbmR5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FubmFiaXMtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FubmFiaXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXB0aW9ucy1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXB0aW9ucy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhci1mcm9udC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhci10YXhpLWZyb250LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyYXZhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcmQtc2ltLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2Fycm90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FzZS1sb3dlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc2Utc2Vuc2l0aXZlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FzZS11cHBlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc3NldHRlLXRhcGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FzdGxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2F0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2N0di5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWFyZWEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1iYXItYmlnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLWRlY3JlYXNpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1iYXItaW5jcmVhc2luZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci1zdGFja2VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY2FuZGxlc3RpY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4tYmlnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY29sdW1uLWRlY3JlYXNpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4taW5jcmVhc2luZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNvbHVtbi1zdGFja2VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY29sdW1uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtZ2FudHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbmV0d29yay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtY29sdW1uLWRlY3JlYXNpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1uby1heGVzLWNvbHVtbi1pbmNyZWFzaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1uby1heGVzLWNvbWJpbmVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1nYW50dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LXBpZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LXNjYXR0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1zcGxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZWNrLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZWYtaGF0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlcnJ5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3MtYmlzaG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3Mta2luZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLWtuaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLXBhd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1xdWVlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tZmlyc3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1yb29rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1sYXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1kb3duLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLWxlZnQtcmlnaHQtZWxsaXBzaXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1sZWZ0LXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLXJpZ2h0LWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLXVwLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NodXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpZ2FyZXR0ZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaHJvbWl1bS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpZ2FyZXR0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hbGVydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctb3V0LWRvd24tbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1vdXQtZG93bi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1vdXQtdXAtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1vdXQtdXAtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hlY2stYmlnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZXZyb24tZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hldnJvbi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kaXZpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZG9sbGFyLXNpZ24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZG90LWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZWxsaXBzaXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZXF1YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZmFkaW5nLWFycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWZhZGluZy1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWdhdWdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wYXJraW5nLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wYXJraW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBhdXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBlcmNlbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcGlsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wbGF5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBvdW5kLXN0ZXJsaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcG93ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcXVlc3Rpb24tbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1zbGFzaC0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXNsYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXNtYWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXN0YXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtc3RvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS11c2VyLXJvdW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXVzZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmN1aXQtYm9hcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXRydXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGFwcGVyYm9hcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY2xvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY29weS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1saXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXBhc3RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXBlbi1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXR5cGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0xMC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTExLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay01LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stNi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay04LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stOS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLWFsZXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stYXJyb3ctZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLWFycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1mYWRpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9zZWQtY2FwdGlvbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWFsZXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtYmFja3VwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1kb3dubG9hZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWRyaXp6bGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1mb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1oYWlsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtbGlnaHRuaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtbW9vbi1yYWluLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtbW9vbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXJhaW4td2luZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXJhaW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1zbm93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtc3VuLXJhaW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1zdW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1zeW5jLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtdXBsb2FkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG92ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbHViLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29kZS14bWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29kZXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvZGVzYW5kYm94LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29mZmVlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29pbnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2x1bW5zLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2x1bW5zLTMtY29nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy00LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29tYmluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbW1hbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21wYXNzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29tcG9uZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29tcHV0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb25jaWVyZ2UtYmVsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb25zdHJ1Y3Rpb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb250YWN0LXJvdW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udGFjdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbnRhaW5lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbnRyYXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29va2llLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29va2luZy1wb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHktcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHktc2xhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5cmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItZG93bi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1kb3duLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItbGVmdC1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLWxlZnQtdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItcmlnaHQtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1yaWdodC11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci11cC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLXVwLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3B1LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JlYXRpdmUtY29tbW9ucy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NyZWRpdC1jYXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvaXNzYW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nyb3NzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Jvc3NoYWlyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Jvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jdWJvaWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jdXAtc29kYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2N1cnJlbmN5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3lsaW5kZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYXRhYmFzZS1iYWNrdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYXRhYmFzZS16YXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYXRhYmFzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RlY2ltYWxzLWFycm93LWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kZWNpbWFscy1hcnJvdy1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RlbGV0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rlc3NlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtZXRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpYW1vbmQtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtb25kLXBlcmNlbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtb25kLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlLTEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtb25kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS01LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS02LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS00LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlzYy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlzYy0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlzYy1hbGJ1bS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaXZpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kbmEtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RuYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RvbGxhci1zaWduLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9udXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb29yLWNsb3NlZC1sb2NrZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb29yLWNsb3NlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rvb3Itb3Blbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rvd25sb2FkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJhZnRpbmctY29tcGFzcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RyYW1hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJpYmJibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmlsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Ryb25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJvcGxldC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcm9wbGV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJvcGxldHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcnVtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJ1bXN0aWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHVtYmJlbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lYXItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZWFyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZWFydGgtbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VhcnRoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZWNsaXBzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy1mcmllZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lZ2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lbGxpcHNpcy12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VsbGlwc2lzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZXF1YWwtYXBwcm94aW1hdGVseS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLW5vdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VyYXNlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZXRoZXJuZXQtcG9ydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V1cm8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ldi1jaGFyZ2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZXh0ZXJuYWwtbGluay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V4cGFuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V5ZS1jbG9zZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9leWUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZXllLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmFjdG9yeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZhY2Vib29rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmFzdC1mb3J3YXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmVhdGhlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZlbmNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmVycmlzLXdoZWVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlnbWEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWFyY2hpdmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWF4aXMtM2QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJhZGdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1icmFjZXMtY29ybmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1ib3guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJyYWNlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtY29sdW1uLWluY3JlYXNpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWNvbHVtbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtcGllLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jaGVjay1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY29kZS1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtZGlmZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtZGlnaXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWV4Y2xhbWF0aW9uLXBvaW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1oZWFkcGhvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWhlYXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1pbWFnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtaW5wdXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWtleS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtbWludXMtY29ybmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1tdXNpYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLW91dHB1dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGVuLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcXVlc3Rpb24tbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGx1cy1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNjYW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNlYXJjaC1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2lnbmFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1zcHJlYWRzaGVldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2xpZGVycy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc3RhY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXN5bWxpbmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXRlcm1pbmFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS10eXBlLWNvcm5lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdHlwZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXVzZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXZvbHVtZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdmlkZW8tY2FtZXJhLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS14LWNvcm5lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbG0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maW5nZXJwcmludC1wYXR0ZXJuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlyZS1leHRpbmd1aXNoZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maXNoLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zpc2gtc3ltYm9sLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zpc2hpbmctaG9vay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYWctb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy10cmlhbmdsZS1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy10cmlhbmdsZS1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYW1lLWtpbmRsaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYW1lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2hsaWdodC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFzaGxpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2stY29uaWNhbC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFzay1yb3VuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYXNrLWNvbmljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLWhvcml6b250YWwtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsaXAtdmVydGljYWwtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsaXAtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbG93ZXItMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zsb3dlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvY3VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZC1ob3Jpem9udGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1hcmNoaXZlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNsb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNsb3NlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1jb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1naXQtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1naXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItaGVhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItaW5wdXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXIta2FuYmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWtleS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1sb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW9wZW4tZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItb3V0cHV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXJvb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItc2VhcmNoLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItc2VhcmNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXN5bWxpbmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItc3luYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci10cmVlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXJzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9vdHByaW50cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvcmtsaWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9ybS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvcndhcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mcmFtZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZyYW1lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zyb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZnVlbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bGxzY3JlZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mdW5uZWwtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bm5lbC14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZnVubmVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS1ob3Jpem9udGFsLWVuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktdGh1bWJuYWlscy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktdmVydGljYWwtZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbWVwYWQtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbWVwYWQtZGlyZWN0aW9uYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYW1lcGFkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2F1Z2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYXZlbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dlbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dlb3JnaWFuLWxhcmkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naG9zdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtYnJhbmNoLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWJyYW5jaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1icmFuY2gtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21taXQtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21taXQtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtY29tcGFyZS1hcnJvd3MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtY29tcGFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1mb3JrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWdyYXBoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LW1lcmdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1hcnJvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtY2xvc2VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUtYXJyb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LWNyZWF0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtZHJhZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0aHViLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0bGFiLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2xhc3Mtd2F0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nbGFzc2VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2xvYmUtbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dsb2JlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ29hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dwdS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyYWR1YXRpb24tY2FwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JhcGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaWQtMngyLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0yeDIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTN4Mi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaWQtM3gzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpcC1ob3Jpem9udGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpcC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncm91cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2d1aXRhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbWJ1cmdlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbW1lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtY29pbnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWZpc3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWdyYWIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWhlYXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1oZWxwaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1tZXRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtcGxhdHRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kYmFnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZHNoYWtlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFyZC1kcml2ZS1kb3dubG9hZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhcmQtZHJpdmUtdXBsb2FkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFyZC1oYXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFyZC1kcml2ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhdC1nbGFzc2VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGF6ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGRtaS1wb3J0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy0xLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy00LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy01LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy02LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRwaG9uZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkcGhvbmVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZHNldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LWNyYWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtaGFuZHNoYWtlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFydC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFydC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtcHVsc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWF0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlbGljb3B0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZXhhZ29uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGlnaGxpZ2h0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oaXN0b3J5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaG9wLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvc3BpdGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaG90ZWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VyZ2xhc3MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXNlLXBsdWcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2Utd2lmaS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaWNlLWNyZWFtLWJvd2wuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pY2UtY3JlYW0tY29uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2lkLWNhcmQtbGFueWFyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2lkLWNhcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtdXBzY2FsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1wb3J0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5ib3guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbmRpYW4tcnVwZWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbmZpbml0eS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2luZm8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbnNwZWN0aW9uLXBhbmVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5zdGFncmFtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRhbGljLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRlcmF0aW9uLWNjdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2l0ZXJhdGlvbi1jdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2phcGFuZXNlLXllbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2pveXN0aWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2FuYmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2F5YWsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXktcm91bmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXktc3F1YXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5Ym9hcmQtbXVzaWMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXlib2FyZC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXlib2FyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtY2VpbGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtZGVzay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtZmxvb3IuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLXdhbGwtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtd2FsbC11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5kLXBsb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5kbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbmd1YWdlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhcHRvcC1taW5pbWFsLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFwdG9wLW1pbmltYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXB0b3AuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXNzby1zZWxlY3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXNzby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhdWdoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5ZXJzLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXllcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXllcnMtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1kYXNoYm9hcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtZ3JpZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1saXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LXBhbmVsLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtcGFuZWwtdG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LXRlbXBsYXRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVhZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xlYWZ5LWdyZWVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVjdGVybi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpYnJhcnktYmlnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlicmFyeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpZmUtYnVveS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpZ2F0dXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlnaHRidWxiLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpZ2h0YnVsYi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpbmUtc3F1aWdnbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rLTItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGluay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpbmtlZGluLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY2hlY2tzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jaGV2cm9ucy1kb3duLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jaGV2cm9ucy11cC1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jb2xsYXBzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1maWx0ZXItcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtZmlsdGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1pbmRlbnQtZGVjcmVhc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWluZGVudC1pbmNyZWFzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LW11c2ljLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1vcmRlcmVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1yZXN0YXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1zdGFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtdG9kby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtdHJlZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtdmlkZW8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2FkZXItY2lyY2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvYWRlci1waW53aGVlbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvYWRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2F0ZS1maXhlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2F0ZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NhdGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NrLWtleWhvbGUtb3Blbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2sta2V5aG9sZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2stb3Blbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2ctaW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2ctb3V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9ncy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvbGxpcG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbHVnZ2FnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hZ25ldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1vcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1xdWVzdGlvbi1tYXJrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1zZWFyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXdhcm5pbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbGJveC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWxzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1jaGVjay1pbnNpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1ob3VzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tbWludXMtaW5zaWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLXBsdXMtaW5zaWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi14LWluc2lkZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4teC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGlubmVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXJzLXN0cm9rZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXJ0aW5pLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWF4aW1pemUtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21heGltaXplLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVnYXBob25lLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lZ2FwaG9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lZGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVtb3J5LXN0aWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVyZ2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZW51LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtY29kZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLWhlYXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtbW9yZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS1xdWVzdGlvbi1tYXJrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtcmVwbHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS13YXJuaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtY29kZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWRpZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWxvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1tb3JlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXF1b3RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtcmVwbHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1zaGFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXRleHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS13YXJuaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZXMtc3F1YXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWljLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy12b2NhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3JvY2hpcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3Jvc2NvcGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWNyb3dhdmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWxlc3RvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWxrLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbGsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taW5pbWl6ZS0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWluaW1pemUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWNsb3VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWRvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3Itb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1wYXVzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3Itc21hcnRwaG9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3Itc3BlYWtlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3Itc3RvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9vbi1zdGFyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW90b3JiaWtlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9vbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdW50YWluLXNub3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VudGFpbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItMi1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLWJhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItY2xpY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLTNkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kaWFnb25hbC0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kaWFnb25hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZG93bi1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kb3duLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1ob3Jpem9udGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtdXAtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtdXAtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tdXNpYy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbXVzaWMtMy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL211c2ljLTQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tdXNpYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25hdmlnYXRpb24tMi1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9uYXZpZ2F0aW9uLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9uYXZpZ2F0aW9uLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25hdmlnYXRpb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9uZXdzcGFwZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9uZXR3b3JrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbmZjLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbm9uLWJpbmFyeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25vdGVib29rLXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25vdGVib29rLXRhYnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZWJvb2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlcGFkLXRleHQtZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZXBhZC10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbnV0LW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL251dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24tYWxlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvb2N0YWdvbi1wYXVzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24teC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9vbWVnYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29wdGlvbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29yYml0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvb3JpZ2FtaS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2UtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2UtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1vcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1zZWFyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnQtYnVja2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnQtcm9sbGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnRicnVzaC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhaW50YnJ1c2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWxldHRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZGEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1ib3R0b20tY2xvc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1ib3R0b20tZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtYm90dG9tLW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1ib3R0b20uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LWNsb3NlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtbGVmdC1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LXJpZ2h0LWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC1jbG9zZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXJpZ2h0LWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXJpZ2h0LW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1ib3R0b20tZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLWNsb3NlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1vcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWxzLWxlZnQtYm90dG9tLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWxzLXJpZ2h0LWJvdHRvbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVscy10b3AtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhcGVyY2xpcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhcmtpbmctbWV0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYXJlbnRoZXNlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhcnR5LXBvcHBlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhdXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGF3LXByaW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGMtY2FzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Blbi1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Blbi10b29sLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW5jaWwtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLXJ1bGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVudGFnb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZXJjZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVyc29uLXN0YW5kaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhpbGlwcGluZS1wZXNvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtZm9yd2FyZGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtY2FsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLWluY29taW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtbWlzc2VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtb3V0Z29pbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlhbm8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWNrYXhlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGljdHVyZS1pbi1waWN0dXJlLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWN0dXJlLWluLXBpY3R1cmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWdneS1iYW5rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlsY3Jvdy1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlsY3Jvdy1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGNyb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxsLWJvdHRsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waW4tb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGluLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlwZXR0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpenphLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGxhbmUtbGFuZGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYW5lLXRha2VvZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbGFuZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYXkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVnLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVnLXphcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsdWcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9ja2V0LWtuaWZlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9ja2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9kY2FzdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvaW50ZXItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9pbnRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvcGNvcm4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb3BzaWNsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvdW5kLXN0ZXJsaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG93ZXItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG93ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmVzZW50YXRpb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmludGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcHJpbnRlci1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Byb2plY3Rvci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Byb3BvcnRpb25zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcHV6emxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcHlyYW1pZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3FyLWNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9xdW90ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhYmJpdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGFyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWF0aW9uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGlvLXJlY2VpdmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaW8tdG93ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWRpby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGl1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhaWwtc3ltYm9sLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFpbmJvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhdGlvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1jZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1ldXJvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1pbmRpYW4tcnVwZWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LWphcGFuZXNlLXllbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtcG91bmQtc3RlcmxpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LXJ1c3NpYW4tcnVibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LXN3aXNzLWZyYW5jLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC10dXJraXNoLWxpcmEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjdGFuZ2xlLWNpcmNsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS1lbGxpcHNpcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS1nb2dnbGVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjdGFuZ2xlLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN5Y2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVkby0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVkby1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWRvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmVzaC1jY3ctZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmVzaC1jY3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWZyZXNoLWN3LW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJlc2gtY3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWZyaWdlcmF0b3IuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWdleC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlbW92ZS1mb3JtYXR0aW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwZWF0LTEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBlYXQtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGVhdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGxhY2UtYWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwbGFjZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGx5LWFsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGx5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmV3aW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmliYm9uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9ja2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9ja2luZy1jaGFpci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvbGxlci1jb2FzdGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9zZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS0zZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS1jY3cta2V5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWNjdy1zcXVhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtY2N3LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWN3LXNxdWFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS1jdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdXRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy00LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcnNzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcnVsZXItZGltZW5zaW9uLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ydWxlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3J1c3NpYW4tcnVibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYWlsYm9hdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhbGFkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2FuZHdpY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXRlbGxpdGUtZGlzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdGVsbGl0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdWRpLXJpeWFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F2ZS1hbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXZlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FsZS0zZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2NhbGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tZXllLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1iYXJjb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1mYWNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tcXItY29kZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tc2VhcmNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjaG9vbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjaXNzb3JzLWxpbmUtZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Npc3NvcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY29vdGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2NyZWVuLXNoYXJlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjcmVlbi1zaGFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njcm9sbC10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nyb2xsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLWFsZXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLWNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2gtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2gtc2xhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2gteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlbmQtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlY3Rpb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLXRvLWJhY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VwYXJhdG9yLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXBhcmF0b3ItdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXJ2ZXItY29nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VydmVyLWNyYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VydmVyLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NldHRpbmdzLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXR0aW5ncy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoYXBlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoYXJlLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoZWV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hlbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtYWxlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtYmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWVsbGlwc2lzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWhhbGYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtcXVlc3Rpb24tbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC11c2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGlwLXdoZWVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctYmFnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctYmFza2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctY2FydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nob3ZlbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nob3dlci1oZWFkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyZWRkZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaHJpbXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaHJpbmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaHJ1Yi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NodWZmbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwtaGlnaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ21hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbmFsLWxvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25hbC1tZWRpdW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwtemVyby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25hdHVyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25wb3N0LWJpZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25wb3N0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lyZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9za2lwLWJhY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9za3VsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NraXAtZm9yd2FyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsYWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2xhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbGljZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWRlcnMtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWRlcnMtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWFydHBob25lLWNoYXJnaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc21hcnRwaG9uZS1uZmMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWFydHBob25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc21pbGUtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtaWxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc25haWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbm93Zmxha2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zb2FwLWRpc3BlbnNlci1kcm9wbGV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc29mYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvbGFyLXBhbmVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc291cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwYWNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BhZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFya2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BhcmtsZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGVha2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BlZWNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BlbGwtY2hlY2stMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWxsLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BsaW5lLXBvaW50ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nwb29sLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BvdGxpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3ByYXktY2FuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Byb3V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFjdGl2aXR5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LWRvd24tbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1vdXQtZG93bi1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LW91dC1kb3duLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LW91dC11cC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LW91dC11cC1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy11cC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LXVwLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFzdGVyaXNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWJvdHRvbS1kYXNoZWQtc2Npc3NvcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hhcnQtZ2FudHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hlY2stYmlnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZXZyb24tZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jaGV2cm9uLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hldnJvbi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jaGV2cm9uLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLWJvdHRvbS1jb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1ib3R0b20uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLWthbmJhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kYXNoZWQtbW91c2UtcG9pbnRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kYXNoZWQtdG9wLXNvbGlkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kaXZpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWVxdWFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWZ1bmN0aW9uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWthbmJhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1saWJyYXJ5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtbWVudS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1tb3VzZS1wb2ludGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhcmtpbmctb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhcmtpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhdXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBlcmNlbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGlsY3Jvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wbGF5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcG93ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcmFkaWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zY2lzc29ycy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1yb3VuZC1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc2lnbWEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc2xhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3BsaXQtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zcGxpdC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zcXVhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3RhY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3Rhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zdG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXRlcm1pbmFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXVzZXItcm91bmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtdXNlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlcy1leGNsdWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlcy1pbnRlcnNlY3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmVzLXN1YnRyYWN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1aXJjbGUtZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlcy11bml0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWlyY2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1aXJyZWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGFtcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0YXItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci1oYWxmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0ZXAtYmFjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0ZXAtZm9yd2FyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0ZXRob3Njb3BlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RpY2tlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0b25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RpY2t5LW5vdGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdG9yZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0cmV0Y2gtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0cmV0Y2gtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJpa2V0aHJvdWdoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Vic2NyaXB0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VuLWRpbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bi1tZWRpdW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4tbW9vbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bi1zbm93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VucmlzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bnNldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1cGVyc2NyaXB0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3dhdGNoLWJvb2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd2lzcy1mcmFuYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N3aXRjaC1jYW1lcmEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd29yZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N3b3Jkcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N5cmluZ2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtY2VsbHMtbWVyZ2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1jZWxscy1zcGxpdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLW9mLWNvbnRlbnRzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtY29sdW1ucy1zcGxpdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLXByb3BlcnRpZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1yb3dzLXNwbGl0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZXQtc21hcnRwaG9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWdzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFsbHktMS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbGx5LTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFsbHktNC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbGx5LTUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YW5nZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFyZ2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVsZXNjb3BlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVudC10cmVlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlc3QtdHViZS1kaWFnb25hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlcm1pbmFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVzdC10dWJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVzdC10dWJlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtYWxpZ24tY2VudGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1hbGlnbi1lbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWFsaWduLWp1c3RpZnkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWFsaWduLXN0YXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1jdXJzb3ItaW5wdXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWN1cnNvci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtcXVvdGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWluaXRpYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtc2VsZWN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGhlYXRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtd3JhcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RoZXJtb21ldGVyLXNub3dmbGFrZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RoZXJtb21ldGVyLXN1bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RoZXJtb21ldGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGh1bWJzLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aHVtYnMtdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtcGVyY2VudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LXNsYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXRzLXBsYW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpbWVyLXJlc2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGltZXItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGltZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2dnbGUtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvZ2dsZS1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvaWxldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rvb2wtY2FzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rvb2xib3guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3JuYWRvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdG9ydXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3VjaHBhZC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3VjaHBhZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rvd2VyLWNvbnRyb2wuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3ktYnJpY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFmZmljLWNvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFjdG9yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhaW4tZnJvbnQtdHVubmVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhaW4tZnJvbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFpbi10cmFjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYW0tZnJvbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFuc2dlbmRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYXNoLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWUtZGVjaWR1b3VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlZS1wYWxtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlZS1waW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVsbG8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVuZGluZy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlbmRpbmctdXAtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZW5kaW5nLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUtYWxlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmlhbmdsZS1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmlhbmdsZS1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyaWFuZ2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJvcGh5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJ1Y2stZWxlY3RyaWMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cnVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R1cmtpc2gtbGlyYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R1cm50YWJsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R1cnRsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R2LW1pbmltYWwtcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R2LW1pbmltYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90di5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R3aXRjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R3aXR0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90eXBlLW91dGxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90eXBlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW1icmVsbGEtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW1icmVsbGEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRlcmxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRvLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRvLWRvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VuZG8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmZvbGQtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VuZm9sZC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VuZ3JvdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bml2ZXJzaXR5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5saW5rLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmxpbmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bnBsdWcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2IuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91cGxvYWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLWxvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItc3Rhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXIteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2Vycy1yb3VuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXJzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXRlbnNpbHMtY3Jvc3NlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3V0ZW5zaWxzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXRpbGl0eS1wb2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmFyaWFibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92YXVsdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZlY3Rvci1zcXVhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZWdhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZlbmV0aWFuLW1hc2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZlbnVzLWFuZC1tYXJzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmlicmF0ZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWJyYXRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmlkZW8tb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmlkZW8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2ljZW1haWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWRlb3RhcGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWV3LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sbGV5YmFsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZvbHVtZS0xLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92b3RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FsbGV0LW1pbmltYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxsZXQtY2FyZHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxsZXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxscGFwZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YW5kLXNwYXJrbGVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhcmVob3VzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhc2hpbmctbWFjaGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhdGNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F2ZXMtYXJyb3ctZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhdmVzLWFycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F2ZXMtbGFkZGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F2ZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXlwb2ludHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJjYW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJob29rLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dlYmhvb2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWlnaHQtdGlsZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aGVhdC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aGVhdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dob2xlLXdvcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLWNvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktbG93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1oaWdoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktc3luYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktemVyby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5kLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2luZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd29ybS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dvcmtmbG93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd3JlbmNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMveC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3lvdXR1YmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy96YXAtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvemFwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvem9vbS1pbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3pvb20tb3V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnNBbmRBbGlhc2VzLmpzOgpsdWNpZGUvZGlzdC9lc20vbHVjaWRlLmpzOgogICgqKgogICAqIEBsaWNlbnNlIGx1Y2lkZSB2MC41NjIuMCAtIElTQwogICAqCiAgICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAgICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAgICopCgppYmFudG9vbHMvanNuZXh0L2liYW50b29scy5qczoKICAoKiEKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCBTYcWhYSBKb3ZhbmnEhwogICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMCBvciB0aGUgTUlUIGxpY2Vuc2UsCiAgICogYXQgeW91ciBvcHRpb24uIFRoaXMgZmlsZSBtYXkgbm90IGJlIGNvcGllZCwgbW9kaWZpZWQsIG9yIGRpc3RyaWJ1dGVkCiAgICogZXhjZXB0IGFjY29yZGluZyB0byB0aG9zZSB0ZXJtcy4KICAgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTYcWhYSBKb3ZhbmnEhwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgb3IgTVBMLzIuMAogICAqKQogICgqKgogICAqIFZhbGlkYXRpb24sIGV4dHJhY3Rpb24gYW5kIGNyZWF0aW9uIG9mIElCQU4sIEJCQU4sIEJJQy9TV0lGVCBudW1iZXJzIHBsdXMgc29tZSBvdGhlciBoZWxwZnVsIHN0dWZmCiAgICogQHBhY2thZ2UgRG9jdW1lbnRhdGlvbgogICAqIEBhdXRob3IgU2HFoWEgSm92YW5pxIcKICAgKiBAbW9kdWxlIGliYW50b29scwogICAqIEB2ZXJzaW9uIDQuNS4xCiAgICogQGxpY2Vuc2UgTUlUIG9yIE1QTC0yLjAKICAgKiBAcHJlZmVycmVkCiAgICopCiovCi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1bmRsZS5qcy5tYXAK', contentType: 'application/javascript' }],
+ ['/bundle.js.map', { base64: 'ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L3NyYy9jc3MtdGFnLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9zcmMvcmVhY3RpdmUtZWxlbWVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3NyYy9saXQtaHRtbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0LWVsZW1lbnRANC4yLjIvbm9kZV9tb2R1bGVzL2xpdC1lbGVtZW50L3NyYy9saXQtZWxlbWVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3NyYy9pcy1zZXJ2ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcytpc291bmlxdWVAMS4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2lzb3VuaXF1ZS90cy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuZGVmZXJyZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cHJvbWlzZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlL3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmN1bXVsYXRpdmVkZWZlcnJlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L3RzL3NtYXJ0cngucGx1Z2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdHNsaWJAMi44LjEvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3V0aWwvaXNGdW5jdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvdXRpbC9jcmVhdGVFcnJvckNsYXNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3V0aWwvYXJyUmVtb3ZlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9TdWJzY3JpcHRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL2NvbmZpZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVyL3RpbWVvdXRQcm92aWRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvdXRpbC9ub29wLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9Ob3RpZmljYXRpb25GYWN0b3JpZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3V0aWwvZXJyb3JDb250ZXh0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9TdWJzY3JpYmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9zeW1ib2wvb2JzZXJ2YWJsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvdXRpbC9pZGVudGl0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvdXRpbC9waXBlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9PYnNlcnZhYmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL2xpZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9yZWZDb3VudC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3NjaGVkdWxlci9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWVQcm92aWRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kb20vYW5pbWF0aW9uRnJhbWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9TdWJqZWN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL1JlcGxheVN1YmplY3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL0FzeW5jU3ViamVjdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVyL0FjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVyL2ludGVydmFsUHJvdmlkZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3NjaGVkdWxlci9Bc3luY0FjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvdXRpbC9JbW1lZGlhdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3NjaGVkdWxlci9pbW1lZGlhdGVQcm92aWRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBBY3Rpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL1NjaGVkdWxlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVyL0FzeW5jU2NoZWR1bGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcFNjaGVkdWxlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVyL2FzYXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3NjaGVkdWxlci9hc3luYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlQWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9zY2hlZHVsZXIvUXVldWVTY2hlZHVsZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3NjaGVkdWxlci9xdWV1ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lQWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9zY2hlZHVsZXIvQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL2VtcHR5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL2lzU2NoZWR1bGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL2FyZ3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3V0aWwvaXNBcnJheUxpa2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3V0aWwvaXNQcm9taXNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3V0aWwvaXNBc3luY0l0ZXJhYmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3N5bWJvbC9pdGVyYXRvci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvdXRpbC9pc0l0ZXJhYmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL2lzUmVhZGFibGVTdHJlYW1MaWtlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvdXRpbC9leGVjdXRlU2NoZWR1bGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9vYnNlcnZlT24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9zdWJzY3JpYmVPbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlT2JzZXJ2YWJsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlUHJvbWlzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXJyYXkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUl0ZXJhYmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBc3luY0l0ZXJhYmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29ic2VydmFibGUvZnJvbS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb2JzZXJ2YWJsZS90aHJvd0Vycm9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9Ob3RpZmljYXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3V0aWwvaXNPYnNlcnZhYmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL0VtcHR5RXJyb3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL2xhc3RWYWx1ZUZyb20udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL2ZpcnN0VmFsdWVGcm9tLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL3V0aWwvU2VxdWVuY2VFcnJvci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvdXRpbC9pc0RhdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy90aW1lb3V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvbWFwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC91dGlsL21hcE9uZU9yTWFueUFyZ3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL2JpbmROb2RlQ2FsbGJhY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29ic2VydmFibGUvY29tYmluZUxhdGVzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlSW50ZXJuYWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VNYXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUFsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdEFsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb25jYXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29ic2VydmFibGUvZGVmZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29ic2VydmFibGUvY29ubmVjdGFibGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29ic2VydmFibGUvZm9ya0pvaW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29ic2VydmFibGUvaWlmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL2ludGVydmFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL21lcmdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL25ldmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL29uRXJyb3JSZXN1bWVOZXh0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhaXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvZmlsdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhbmdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL3VzaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2F1ZGl0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXRUaW1lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyQ291bnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyV2hlbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2NhdGNoRXJyb3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9yZWR1Y2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy90b0FycmF5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdEFsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVBbGwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXBUby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2Nvbm5lY3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9jb3VudC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VUaW1lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVmYXVsdElmRW1wdHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy90YWtlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvaWdub3JlRWxlbWVudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9tYXBUby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5V2hlbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3RVbnRpbENoYW5nZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm93SWZFbXB0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2V2ZXJ5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdE1hcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RBbGwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvZmluYWxpemUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9maW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZEluZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvZmlyc3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9ncm91cEJ5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvaXNFbXB0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2xhc3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9tYXRlcmlhbGl6ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL21heC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZsYXRNYXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcFRvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VTY2FuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvbWluLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvbXVsdGljYXN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9wbHVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoQmVoYXZpb3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoTGFzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hSZXBsYXkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9yZXRyeVdoZW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGVUaW1lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvc2Nhbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3NlcXVlbmNlRXF1YWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9zaGFyZVJlcGxheS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3NpbmdsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9za2lwTGFzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBVbnRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBXaGlsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaEFsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcFRvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoU2Nhbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VVbnRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VXaGlsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3RhcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGVUaW1lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZUludGVydmFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy90aW1lc3RhbXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUaW1lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL3NyYy9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93V2hlbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW50ZXJuYWwvb3BlcmF0b3JzL3ppcEFsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvc3JjL29wZXJhdG9ycy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvdHMvc21hcnRyeC5wbHVnaW5zLnJ4anMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L3RzL3NtYXJ0cnguY2xhc3Nlcy5vYnNlcnZhYmxlbWFwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZWludGFrZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvdHMvc21hcnRyeC5mdW5jdGlvbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L3RzL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9zcmMvZGVjb3JhdG9ycy9wcm9wZXJ0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRkZWxheUAzLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRkZWxheS90cy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0LWludGVyZmFjZXNAMy4wLjE5L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QtaW50ZXJmYWNlcy9kaXN0X3RzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9lc2NhcGUtc3RyaW5nLXJlZ2V4cEA1LjAuMC9ub2RlX21vZHVsZXMvZXNjYXBlLXN0cmluZy1yZWdleHAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21hdGNoZXJANS4wLjAvbm9kZV9tb2R1bGVzL21hdGNoZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWF0Y2hAMi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWF0Y2gvdHMvc21hcnRtYXRjaC5wbHVnaW5zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydG1hdGNoQDIuMC4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydG1hdGNoL3RzL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jcm9uZXJAOS4xLjAvbm9kZV9tb2R1bGVzL2Nyb25lci9kaXN0L2Nyb25lci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NvbnN0cnVjdEZyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90b0RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGREYXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTW9udGhzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYXR1cmRheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU3VuZGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNXZWVrZW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkQnVzaW5lc3NEYXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWlsbGlzZWNvbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkSG91cnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2RlZmF1bHRPcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZldlZWsuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSVNPV2Vlay5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWtZZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9ub3JtYWxpemVEYXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSVNPV2Vla1llYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRJU09XZWVrWWVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZElTT1dlZWtZZWFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1pbnV0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRRdWFydGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFNlY29uZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRXZWVrcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFllYXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tYXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jbGFtcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Nsb3Nlc3RJbmRleFRvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xvc2VzdFRvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZUFzYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NvbXBhcmVEZXNjLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RydWN0Tm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGF5c1RvV2Vla3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVEYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1ZhbGlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRRdWFydGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluRGF5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5Ib3Vycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1YklTT1dlZWtZZWFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbklTT1dlZWtZZWFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbnV0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZkRheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mTW9udGguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xhc3REYXlPZk1vbnRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTW9udGhzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluUXVhcnRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5TZWNvbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluV2Vla3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5ZZWFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvbm9ybWFsaXplSW50ZXJ2YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoRGF5T2ZJbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hIb3VyT2ZJbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hNaW51dGVPZkludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaE1vbnRoT2ZJbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZRdWFydGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFF1YXJ0ZXJPZkludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtPZkludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZkludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZk1vbnRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZk1vbnRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZZZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlllYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mWWVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hZZWFyT2ZJbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGVjYWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZIb3VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZXZWVrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZJU09XZWVrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZJU09XZWVrWWVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mTWludXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZRdWFydGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZTZWNvbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlRvZGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZUb21vcnJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mWWVzdGVyZGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0RGlzdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZEZvcm1hdExvbmdGbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdExvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkTG9jYWxpemVGbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2xvY2FsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRNYXRjaEZuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL21hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0TG9jYWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5T2ZZZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vlay5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtZZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZldlZWtZZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vlay5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvYWRkTGVhZGluZ1plcm9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvbGlnaHRGb3JtYXR0ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvZm9ybWF0dGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9wcm90ZWN0ZWRUb2tlbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlU3RyaWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2VUb05vdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREdXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTTy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTTzkwNzUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU09EdXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdFJGQzMzMzkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRSRkM3MjMxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0UmVsYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mcm9tVW5peFRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5c0luTW9udGguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xlYXBZZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5c0luWWVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERlY2FkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERlZmF1bHRPcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SG91cnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRJU09EYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRJU09XZWVrc0luWWVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1pbGxpc2Vjb25kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1pbnV0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRNb250aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0U2Vjb25kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRVbml4VGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtPZk1vbnRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mTW9udGguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRXZWVrc0luTW9udGguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRZZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaG91cnNUb01pbGxpc2Vjb25kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9NaW51dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaG91cnNUb1NlY29uZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGVydmFsVG9EdXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGxGb3JtYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbnRsRm9ybWF0RGlzdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0FmdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNCZWZvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0VxdWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFeGlzdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0ZpcnN0RGF5T2ZNb250aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRnJpZGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNGdXR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90cmFuc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL1NldHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0VyYVBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9ZZWFyUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1llYXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPV2Vla1llYXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRXh0ZW5kZWRZZWFyUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1F1YXJ0ZXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvTW9udGhQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZU1vbnRoUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0V2Vlay5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Mb2NhbFdlZWtQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRJU09XZWVrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF0ZVBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlPZlllYXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5UGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsRGF5UGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1N0YW5kQWxvbmVMb2NhbERheVBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT0RheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09EYXlQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvQU1QTVBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9BTVBNTWlkbmlnaHRQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5UGVyaW9kUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0hvdXIxdG8xMlBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMHRvMjNQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjBUbzExUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0hvdXIxVG8yNFBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9NaW51dGVQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU2Vjb25kUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0ZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPVGltZXpvbmVXaXRoWlBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9UaW1lc3RhbXBTZWNvbmRzUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNNYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTW9uZGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNQYXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZkhvdXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVIb3VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lV2Vlay5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUlTT1dlZWsuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVJU09XZWVrWWVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZNaW51dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVNaW51dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVNb250aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVF1YXJ0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mU2Vjb25kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lU2Vjb25kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lWWVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc0hvdXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNJU09XZWVrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzTWludXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzTW9udGguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNRdWFydGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzU2Vjb25kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzV2Vlay5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1llYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RodXJzZGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUb2RheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVG9tb3Jyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1R1ZXNkYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1dlZG5lc2RheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2l0aGluSW50ZXJ2YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJEYXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNZZXN0ZXJkYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZEZWNhZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZXZWVrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mSVNPV2Vlay5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZklTT1dlZWtZZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mUXVhcnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZlllYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9saWdodEZvcm1hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kc1RvSG91cnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb01pbnV0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb1NlY29uZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taW51dGVzVG9Ib3Vycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb01pbGxpc2Vjb25kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb1NlY29uZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tb250aHNUb1F1YXJ0ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbW9udGhzVG9ZZWFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHREYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0RnJpZGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dE1vbmRheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRTYXR1cmRheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRTdW5kYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0VGh1cnNkYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0VHVlc2RheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRXZWRuZXNkYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUlTTy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlSlNPTi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzRGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNGcmlkYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c01vbmRheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU2F0dXJkYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1N1bmRheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzVGh1cnNkYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1R1ZXNkYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1dlZG5lc2RheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3F1YXJ0ZXJzVG9Nb250aHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9xdWFydGVyc1RvWWVhcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9yb3VuZFRvTmVhcmVzdEhvdXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RNaW51dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvSG91cnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZWNvbmRzVG9NaWxsaXNlY29uZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZWNvbmRzVG9NaW51dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0TW9udGguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0RGF5T2ZZZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0RGVmYXVsdE9wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRIb3Vycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldE1pbGxpc2Vjb25kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldE1pbnV0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRRdWFydGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0U2Vjb25kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldFdlZWtZZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0WWVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEZWNhZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9kYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9tb3Jyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mWWVzdGVyZGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTW9udGhzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViQnVzaW5lc3NEYXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViSG91cnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJNaWxsaXNlY29uZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJNaW51dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViUXVhcnRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJTZWNvbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViV2Vla3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJZZWFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3dlZWtzVG9EYXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMveWVhcnNUb0RheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvTW9udGhzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMveWVhcnNUb1F1YXJ0ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTkvbm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF5anNAMS4xMS4xOS9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzVG9kYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3BhcnNlLW1zQDQuMC4wL25vZGVfbW9kdWxlcy9wYXJzZS1tcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LW1zQDkuMy4wL25vZGVfbW9kdWxlcy9wcmV0dHktbXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL3RzL3NtYXJ0dGltZS5wbHVnaW5zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS90cy9zbWFydHRpbWUuY2xhc3Nlcy5jcm9ucGFyc2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS90cy9zbWFydHRpbWUuY2xhc3Nlcy5jcm9uam9iLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS90cy9zbWFydHRpbWUudW5pdHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25tYW5hZ2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS90cy9zbWFydHRpbWUuY2xhc3Nlcy5leHRlbmRlZGRhdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL3RzL3NtYXJ0dGltZS5jbGFzc2VzLmhydG1lYXN1cmVtZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS90cy9zbWFydHRpbWUuY2xhc3Nlcy5pbnRlcnZhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvdHMvc21hcnR0aW1lLmNsYXNzZXMudGltZXN0YW1wLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS90cy9zbWFydHRpbWUuY2xhc3Nlcy50aW1lci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZU5vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvVHJlZVBvc2l0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVJdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9TeW1ib2xUcmVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay90cy9jbGFzc2VzLnBsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL3RzL2NsYXNzZXMuYXN5bmNleGVjdXRpb25zdGFjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvdHMvY2xhc3Nlcy5iYWNrcHJlc3N1cmVkYXJyYXkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL3RzL2NsYXNzZXMuZmFzdG1hcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvdHMvY2xhc3Nlcy5vYmplY3RtYXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAuaW50ZXJlc3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL3RzL2NsYXNzZXMubGltaXRlZGFycmF5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay90cy9jbGFzc2VzLmxvb3B0cmFja2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay90cy9jbGFzc2VzLnN0cmluZ21hcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvdHMvY2xhc3Nlcy50aW1lZGFnZ3JlZ2F0b3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL3RzL2NsYXNzZXMudHJlZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VpbnQ4YXJyYXktZXh0cmFzQDEuNS4wL25vZGVfbW9kdWxlcy91aW50OGFycmF5LWV4dHJhcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRidWZmZXJAMy4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyL3RzL3NtYXJ0YnVmZmVyLnBsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0YnVmZmVyQDMuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGJ1ZmZlci90cy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC90cy9zbWFydGd1YXJkLnBsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvdHMvY2xhc3Nlcy5ndWFyZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC90cy9jbGFzc2VzLmd1YXJkZXJyb3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvdHMvY2xhc3Nlcy5ndWFyZHNldC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC90cy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi90cy9zbWFydGVudi5wbHVnaW5zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA1LjAuMTMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0ZW52L3RzL2ludGVyZmFjZXMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0ZW52QDUuMC4xMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRlbnYvdHMvc21hcnRlbnYuY2xhc3Nlcy5zbWFydGVudi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi90cy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL3RzL3NtYXJ0c3RyaW5nLnBsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy90cy9zbWFydHN0cmluZy5jcmVhdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy90cy9zbWFydHN0cmluZy5kb2NrZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy90cy9zbWFydHN0cmluZy5pbmRlbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy90cy9zbWFydHN0cmluZy5ub3JtYWxpemUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy90cy9zbWFydHN0cmluZy5iYXNlNjQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy90cy9zbWFydHN0cmluZy50eXBlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvdHMvc21hcnRzdHJpbmcuZG9tYWluLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvdHMvc21hcnRzdHJpbmcuZ2l0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC5jbG9uZWRlZXBANC41LjAvbm9kZV9tb2R1bGVzL2xvZGFzaC5jbG9uZWRlZXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5QDIuMS4wL25vZGVfbW9kdWxlcy9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vdHMvc21hcnRqc29uLnBsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0anNvbkA1LjIuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRqc29uL3RzL2J1ZmZlcmhhbmRsaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANS4yLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi90cy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgraWRiQDguMC4zL25vZGVfbW9kdWxlcy9AdGVtcGZpeC9pZGIvYnVpbGQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvdHMvd2Vic3RvcmUucGx1Z2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic3RvcmVAMi4wLjIwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzdG9yZS90cy93ZWJzdG9yZS5jbGFzc2VzLndlYnN0b3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL3RzL3dlYnN0b3JlLmNsYXNzZXMudHlwZWRyZXF1ZXN0Y2FjaGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L3RzL3dlYnJlcXVlc3QucGx1Z2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEAzLjAuMzcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L3RzL3BsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L3RzL2NsYXNzZXMudHlwZWRyZXNwb25zZWVycm9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC90cy9jbGFzc2VzLnR5cGVkdG9vbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L3RzL2NsYXNzZXMudHlwZWRoYW5kbGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC90cy9jbGFzc2VzLnR5cGVkcm91dGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC90cy9jbGFzc2VzLnZpcnR1YWxzdHJlYW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L3RzL2NsYXNzZXMudHlwZWR0YXJnZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L3RzL2NsYXNzZXMudHlwZWRyZXF1ZXN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC90cy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4yLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMi4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL25hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vb2JsaXZpb3VzLXNldEAyLjAuMC9ub2RlX21vZHVsZXMvb2JsaXZpb3VzLXNldC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMi4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjIuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9pbmRleGVkLWRiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjIuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9sb2NhbHN0b3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMi4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL3NpbXVsYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjIuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kLWNob29zZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMi4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9icm9hZGNhc3QtY2hhbm5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5sb2FkQDIuNC4xL25vZGVfbW9kdWxlcy91bmxvYWQvZGlzdC9lcy9icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmxvYWRAMi40LjEvbm9kZV9tb2R1bGVzL3VubG9hZC9kaXN0L2VzL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VubG9hZEAyLjQuMS9ub2RlX21vZHVsZXMvdW5sb2FkL2Rpc3QvZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMi4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24tdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4yLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi13ZWItbG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4yLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4yLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy90cy9kZWVzLWNvbW1zLnBsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL3RzL2RlZXMtY29tbXMuY2xhc3Nlcy5kZWVzY29tbXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL3RzL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2V4Y2VwdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbWFyay5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3N0ci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZmFpbHNhZmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbnVsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9ib29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9mbG9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2pzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9jb3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3RpbWVzdGFtcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9iaW5hcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvb21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9wYWlycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvdW5kZWZpbmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3JlZ2V4cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbG9hZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9kdW1wZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR5YW1sQDIuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHlhbWwvdHMvc21hcnR5YW1sLnBsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL3RzL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iYWlsQDIuMC4yL25vZGVfbW9kdWxlcy9iYWlsL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9leHRlbmRAMy4wLjIvbm9kZV9tb2R1bGVzL2V4dGVuZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGV2bG9wQDEuMS4wL25vZGVfbW9kdWxlcy9kZXZsb3AvbGliL2RlZmF1bHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2lzLXBsYWluLW9iakA0LjEuMC9ub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90cm91Z2hAMi4yLjAvbm9kZV9tb2R1bGVzL3Ryb3VnaC9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3Ryb3VnaEAyLjIuMC9ub2RlX21vZHVsZXMvdHJvdWdoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbkA0LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb24vbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbkA0LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZS1tZXNzYWdlQDQuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS1tZXNzYWdlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnBhdGguYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW5wcm9jLmJyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWludXJsLnNoYXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW51cmwuYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9saWIvY2FsbGFibGUtaW5zdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuaWZpZWRAMTEuMC41L25vZGVfbW9kdWxlcy91bmlmaWVkL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5pZmllZEAxMS4wLjUvbm9kZV9tb2R1bGVzL3VuaWZpZWQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Njb3VudEAyLjAuMS9ub2RlX21vZHVsZXMvY2NvdW50L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jaGFyYWN0ZXJAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNoYXJhY3Rlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1pc0A2LjAuMS9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtaXNANi4wLjEvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2xpYi9jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzQDYuMC4yL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0LXBhcmVudHNANi4wLjIvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2UvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2VAMy4wLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1zdHJpa2V0aHJvdWdoQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS1zdHJpa2V0aHJvdWdoL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaEAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWFya2Rvd24tdGFibGVAMy4wLjQvbm9kZV9tb2R1bGVzL21hcmtkb3duLXRhYmxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS96d2l0Y2hAMi4wLjQvbm9kZV9tb2R1bGVzL3p3aXRjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvY29uZmlndXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvYmxvY2txdW90ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9wYXR0ZXJuLWluLXNjb3BlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvYnJlYWsuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvbmdlc3Qtc3RyZWFrQDMuMS4wL25vZGVfbW9kdWxlcy9sb25nZXN0LXN0cmVhay9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtY29kZS1hcy1pbmRlbnRlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1mZW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stcXVvdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9kZWZpbml0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWVtcGhhc2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2VuY29kZS1jaGFyYWN0ZXItcmVmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNsYXNzaWZ5LWNoYXJhY3Rlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9lbmNvZGUtaW5mby5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2VtcGhhc2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0QDUuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0L2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdEA1LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1zdHJpbmdANC4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tc3RyaW5nL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1zdHJpbmdANC4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tc3RyaW5nL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Zvcm1hdC1oZWFkaW5nLWFzLXNldGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2hlYWRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9odG1sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW1hZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbWFnZS1yZWZlcmVuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbmxpbmUtY29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtbGluay1hcy1hdXRvbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saW5rLXJlZmVyZW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1idWxsZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LW90aGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWJ1bGxldC1vcmRlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXJ1bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWxpc3QtaXRlbS1pbmRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saXN0LWl0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9wYXJhZ3JhcGguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtcGhyYXNpbmdANC4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtcGhyYXNpbmcvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXBocmFzaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXBocmFzaW5nL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvcm9vdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXJ1bGUtcmVwZXRpdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3RoZW1hdGljLWJyZWFrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2pvaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3Vuc2FmZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VAMS4yLjAvbm9kZV9tb2R1bGVzL2RlY29kZS1uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmRvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZUAyLjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZ0AyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9hc3NvY2lhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jb21waWxlLXBhdHRlcm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29udGFpbmVyLXBocmFzaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbnRhaW5lci1mbG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2luZGVudC1saW5lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9zYWZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3RyYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFibGVAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhYmxlL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFibGVAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhYmxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW0vbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtQDMuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtQDMuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2h1bmtlZEAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2h1bmtlZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY29tYmluZS1leHRlbnNpb25zQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jb21iaW5lLWV4dGVuc2lvbnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWwvbGliL3N5bnRheC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZW5jb2RlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1lbmNvZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2xpYi9odG1sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbEAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2F0dGVudGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYXV0b2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LXNwYWNlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1zcGFjZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYmxhbmstbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYmxvY2stcXVvdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NoYXJhY3Rlci1lc2NhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NoYXJhY3Rlci1yZWZlcmVuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvZGUtZmVuY2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLWluZGVudGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLXRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9saWIvc3BsaWNlLWJ1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb250ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbkAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1sYWJlbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktdGl0bGVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXRpdGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9kZWZpbml0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9oYXJkLWJyZWFrLWVzY2FwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGVhZGluZy1hdHguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtZmxvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaHRtbC10ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9sYWJlbC1lbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWltYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9sYWJlbC1zdGFydC1saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9saW5lLWVuZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvdGhlbWF0aWMtYnJlYWsuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL3NldGV4dC11bmRlcmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZS9saWIvc3ludGF4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvbGliL2h0bWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaC9saWIvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaC9saWIvc3ludGF4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL2h0bWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9saWIvZWRpdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9saWIvaW5mZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9saWIvc3ludGF4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbS9saWIvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9zeW50YXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm1AMy4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZ2ZtQDQuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstZ2ZtL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWdmbUA0LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWdmbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NvbXBpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2NvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2RvY3VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS9mbG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY29uc3RydWN0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NyZWF0ZS10b2tlbml6ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3Bvc3Rwcm9jZXNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvcHJlcHJvY2Vzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bkAyLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duQDIuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb20tbWFya2Rvd24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1wYXJzZUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1wYXJzZUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZm9ybWF0QDAuMi4yL25vZGVfbW9kdWxlcy9mb3JtYXQvZm9ybWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9mYXVsdEAyLjAuMS9ub2RlX21vZHVsZXMvZmF1bHQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL3RvLW1hdHRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL3N5bnRheC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9saWIvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9udG1hdHRlckAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9udG1hdHRlci9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1mcm9udG1hdHRlckA1LjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLWZyb250bWF0dGVyL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWZyb250bWF0dGVyQDUuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstZnJvbnRtYXR0ZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vZGVzZXJpYWxpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vc2VyaWFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXBvc2l0aW9uQDUuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXBvc2l0aW9uL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1wb3NpdGlvbkA1LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1wb3NpdGlvbi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXNhbml0aXplQDUuMC4yL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtc2FuaXRpemUvbGliL3NjaGVtYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXNhbml0aXplQDUuMC4yL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtc2FuaXRpemUvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9ibG9ja3F1b3RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2JyZWFrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2VtcGhhc2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2Zvb3Rub3RlLXJlZmVyZW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9oZWFkaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2h0bWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvcmV2ZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2ltYWdlLXJlZmVyZW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbmxpbmUtY29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saW5rLXJlZmVyZW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpc3QtaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3BhcmFncmFwaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9yb290LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3N0cm9uZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS1yb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUtY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdHJpbS1saW5lc0AzLjAuMS9ub2RlX21vZHVsZXMvdHJpbS1saW5lcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RoZW1hdGljLWJyZWFrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2Zvb3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9odG1sLXZvaWQtZWxlbWVudHNAMy4wLjAvbm9kZV9tb2R1bGVzL2h0bWwtdm9pZC1lbGVtZW50cy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL3NjaGVtYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL21lcmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL25vcm1hbGl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2luZm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2RlZmluZWQtaW5mby5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9hcmlhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY2FzZS1zZW5zaXRpdmUtdHJhbnNmb3JtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY2FzZS1pbnNlbnNpdGl2ZS10cmFuc2Zvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9zdmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveGxpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveG1sbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveG1sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2hhc3QtdG8tcmVhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvZmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvdG8taGV4YWRlY2ltYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLWRlY2ltYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3lAMy4wLjAvbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3kvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNEAyLjEuMC9ub2RlX21vZHVsZXMvY2hhcmFjdGVyLWVudGl0aWVzLWh0bWw0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvY29uc3RhbnQvZGFuZ2Vyb3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC90by1uYW1lZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LXNtYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC9mb3JtYXQtYmFzaWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2NvbW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2RvY3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hLXNlcGFyYXRlZC10b2tlbnNAMi4wLjMvbm9kZV9tb2R1bGVzL2NvbW1hLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NwYWNlLXNlcGFyYXRlZC10b2tlbnNAMi4wLjIvbm9kZV9tb2R1bGVzL3NwYWNlLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC13aGl0ZXNwYWNlQDMuMC4wL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtd2hpdGVzcGFjZS9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC13aGl0ZXNwYWNlQDMuMC4wL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtd2hpdGVzcGFjZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi91dGlsL3NpYmxpbmdzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29taXNzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL2Nsb3NpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vb3BlbmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvZWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvcmF3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9yb290LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstaHRtbEAxNi4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1odG1sL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXN0cmluZ2lmeUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstc3RyaW5naWZ5QDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdHVybmRvd25ANy4yLjIvbm9kZV9tb2R1bGVzL3R1cm5kb3duL2xpYi90dXJuZG93bi5icm93c2VyLmVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bi1wbHVnaW4tZ2ZtQDEuMC4yL25vZGVfbW9kdWxlcy90dXJuZG93bi1wbHVnaW4tZ2ZtL2xpYi90dXJuZG93bi1wbHVnaW4tZ2ZtLmVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydG1hcmtkb3duQDMuMC4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydG1hcmtkb3duL3RzL3NtYXJ0bWFya2Rvd24ucGx1Z2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi90cy9zbWFydG1hcmtkb3duLmNsYXNzZXMubWRwYXJzZWRyZXN1bHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3BhdGgtdG8tcmVnZXhwQDguMy4wL25vZGVfbW9kdWxlcy9wYXRoLXRvLXJlZ2V4cC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci90cy9zbWFydHJvdXRlci5wbHVnaW5zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvdHMvc21hcnRyb3V0ZXIuY2xhc3Nlcy5xdWVyeXBhcmFtcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL3RzL3NtYXJ0cm91dGVyLmNsYXNzZXMuc21hcnRyb3V0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci90cy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvdHNfd2ViL3BsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL3RzX3dlYi9zaGEyNTYuZmFsbGJhY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL3RzX3dlYi9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvdHMvc21hcnRzdGF0ZS5wbHVnaW5zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS90cy9zbWFydHN0YXRlLmNsYXNzZXMuc3RhdGVhY3Rpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZXBhcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zbWFydHN0YXRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS90cy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL2Rpc3RfdHMvc21hcnR1cmwucGx1Z2lucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL3RzL3NtYXJ0dXJsLmNsYXNzZXMuc21hcnR1cmwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC90cy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydHByb21pc2VANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRwcm9taXNlL3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuY3VtdWxhdGl2ZWRlZmVycmVkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRkZWxheUAzLjAuMS9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydGRlbGF5L3RzL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvYWRkcmVzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy90cy9idXNpbmVzcy9jb21wYW55LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL2J1c2luZXNzL2NvbnRhY3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvZmluYW5jZS9jaGVja2luZ2FjY291bnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2N1cnJlbmN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL2ZpbmFuY2UvZXhwZW5zZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy90cy9maW5hbmNlL2ludm9pY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL3BheW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL3RyYW5zYWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL2ZpbmFuY2UvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvYnVzaW5lc3Mvam9iLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2UvbW9uZ29kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvb2JqZWN0YWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvb2JqZWN0c3RhdHVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvd3JhcHBlZGRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvZGF0YWJhc2UvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvYnVzaW5lc3MvbGV0dGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcGRmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL2J1c2luZXNzL3BlcnNvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3Byb2plY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvYnVzaW5lc3MvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL2NvbW1pdGluZm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL3N0YXR1c29iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy90cy9jb2RlL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL2NvbnRhaW5lci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci92b2x1bWVtb3VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy90cy9jb250YWluZXIvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvY29udGVudC9hcnRpY2xlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL2NvbnRlbnQvYXV0aG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL2NvbnRlbnQvZG9jdW1lbnRhdGlvbnNldC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy90cy9jb250ZW50L2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC9kYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC90aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL2dlbmVyYWwvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2NlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvbmV0d29yay9jbmFtZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZGV2aWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2Ruc2NoYWxsZW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG9tYWluZGVsZWdhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvand0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9uZXR3b3Jrbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvcmV2ZXJzZXByb3h5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9zc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvbmV0d29yay9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy90cy9zYWFzL3Byb2R1Y3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvc2Fhcy9zdWJzY3JpcHRpb25wbGFuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL3NhYXMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zdG9yYWdlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9tZW51aXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbGlua2Jsb2NrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL3dlYnNpdGUvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy90eXBlZmVzdC5vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvdHMvd2Vic2V0dXAucGx1Z2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC90cy9pbnRlcmZhY2VzL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLmpzb25sZHRhZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5vcGVuZ3JhcGh0YWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWdsZXZlbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5tZXRhdGFnLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL3RzL3dlYnNldHVwLmNsYXNzZXMudGFnbWFuYWdlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC90cy93ZWJzZXR1cC5jbGFzc2VzLndlYnNldHVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL3RzL3dlYnNldHVwLmNsYXNzZXMudGl0bGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL3RzL2xpay5wbHVnaW5zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay90cy9saWsuZmFzdG1hcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvdHMvbGlrLm9iamVjdG1hcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvdHMvbGlrLnN0cmluZ21hcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrbGVuaXNAMS4zLjE3L25vZGVfbW9kdWxlcy9AdGVtcGZpeC9sZW5pcy9wYWNrYWdlLmpzb24iLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K2xlbmlzQDEuMy4xNy9ub2RlX21vZHVsZXMvQHRlbXBmaXgvbGVuaXMvcGFja2FnZXMvY29yZS9zcmMvbWF0aHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K2xlbmlzQDEuMy4xNy9ub2RlX21vZHVsZXMvQHRlbXBmaXgvbGVuaXMvcGFja2FnZXMvY29yZS9zcmMvYW5pbWF0ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrbGVuaXNAMS4zLjE3L25vZGVfbW9kdWxlcy9AdGVtcGZpeC9sZW5pcy9wYWNrYWdlcy9jb3JlL3NyYy9kZWJvdW5jZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrbGVuaXNAMS4zLjE3L25vZGVfbW9kdWxlcy9AdGVtcGZpeC9sZW5pcy9wYWNrYWdlcy9jb3JlL3NyYy9kaW1lbnNpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCtsZW5pc0AxLjMuMTcvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L2xlbmlzL3BhY2thZ2VzL2NvcmUvc3JjL2VtaXR0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K2xlbmlzQDEuMy4xNy9ub2RlX21vZHVsZXMvQHRlbXBmaXgvbGVuaXMvcGFja2FnZXMvY29yZS9zcmMvdmlydHVhbC1zY3JvbGwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K2xlbmlzQDEuMy4xNy9ub2RlX21vZHVsZXMvQHRlbXBmaXgvbGVuaXMvcGFja2FnZXMvY29yZS9zcmMvbGVuaXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N3ZWV0LXNjcm9sbEA0LjAuMC9ub2RlX21vZHVsZXMvc3dlZXQtc2Nyb2xsL3N3ZWV0LXNjcm9sbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy90cy9kb210b29scy5wbHVnaW5zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL3RzL2RvbXRvb2xzLmNzcy5icmVha3BvaW50cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy90cy9kb210b29scy5jbGFzc2VzLnNjcm9sbGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL3RzL2RvbXRvb2xzLmNsYXNzZXMudGhlbWVtYW5hZ2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL3RzL2RvbXRvb2xzLmNsYXNzZXMua2V5Ym9hcmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvdHMvZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy90cy9kb210b29scy5jc3MuYmFzZXN0eWxlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy90cy9kb210b29scy5lbGVtZW50YmFzaWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvdHMvZG9tdG9vbHMuY3NzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL3RzL2RvbXRvb2xzLnBsdWdpbmV4cG9ydHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L3RzL3BsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L3RzL2NsYXNzZXMuY3NzbWFuYWdlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3NyYy9zdGF0aWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L3N0YXRpYy1odG1sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvc3JjL2RpcmVjdGl2ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3NyYy9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9zcmMvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvc3JjL2RlY29yYXRvcnMvc3RhdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L3NyYy9kZWNvcmF0b3JzL2V2ZW50LW9wdGlvbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L3NyYy9kZWNvcmF0b3JzL2Jhc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L3NyYy9kZWNvcmF0b3JzL3F1ZXJ5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9zcmMvZGVjb3JhdG9ycy9xdWVyeS1hbGwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L3NyYy9kZWNvcmF0b3JzL3F1ZXJ5LWFzeW5jLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9zcmMvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1lbGVtZW50cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvc3JjL2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtbm9kZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L3RzL2NsYXNzZXMuZGVlcy1lbGVtZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvc3JjL2RpcmVjdGl2ZS1oZWxwZXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvc3JjL2FzeW5jLWRpcmVjdGl2ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvYXN5bmMtZGlyZWN0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC90cy9kaXJlY3RpdmVzL2NsYXNzZXMucmVzb2x2ZWRpcmVjdGl2ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvdHMvZGlyZWN0aXZlcy9jbGFzc2VzLnN1YnNjcmliZWRpcmVjdGl2ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvdHMvZGlyZWN0aXZlcy9jbGFzc2VzLnN1YnNjcmliZXdpdGh0ZW1wbGF0ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3NyYy9kaXJlY3RpdmVzL3ByaXZhdGUtYXN5bmMtaGVscGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3NyYy9kaXJlY3RpdmVzL3VudGlsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3VudGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvc3JjL2RpcmVjdGl2ZXMvYXN5bmMtcmVwbGFjZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3NyYy9kaXJlY3RpdmVzL2FzeW5jLWFwcGVuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9hc3luYy1hcHBlbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9zcmMvZGlyZWN0aXZlcy9rZXllZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9rZXllZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3NyYy9kaXJlY3RpdmVzL3JlcGVhdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9yZXBlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L3RzL2RpcmVjdGl2ZXMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L3RzL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwdGhlbWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmb250YXdlc29tZS1zdmctY29yZUA3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlL2luZGV4Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZyZWUtYnJhbmRzLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtYnJhbmRzLXN2Zy1pY29ucy9pbmRleC5tanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLXJlZ3VsYXItc3ZnLWljb25zQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1yZWd1bGFyLXN2Zy1pY29ucy9pbmRleC5tanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLXNvbGlkLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2luZGV4Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvZGVmYXVsdEF0dHJpYnV0ZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2NyZWF0ZUVsZW1lbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL3JlcGxhY2VFbGVtZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hLWFycm93LWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2EtYXJyb3ctdXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2EtbGFyZ2Utc21hbGwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FjY2Vzc2liaWxpdHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FjdGl2aXR5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9haXItdmVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYWxhcm0tY2xvY2stY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FpcnBsYXkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FsYXJtLWNsb2NrLW1pbnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hbGFybS1jbG9jay1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FsYXJtLWNsb2NrLXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FsYXJtLWNsb2NrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hbGFybS1zbW9rZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYWxidW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FsaWduLWNlbnRlci1ob3Jpem9udGFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hbGlnbi1jZW50ZXItdmVydGljYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FsaWduLWVuZC1ob3Jpem9udGFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hbGlnbi1lbmQtdmVydGljYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FsaWduLWhvcml6b250YWwtZGlzdHJpYnV0ZS1jZW50ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FsaWduLWhvcml6b250YWwtZGlzdHJpYnV0ZS1zdGFydC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1kaXN0cmlidXRlLWVuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1qdXN0aWZ5LWNlbnRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1qdXN0aWZ5LWVuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1qdXN0aWZ5LXN0YXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hbGlnbi1ob3Jpem9udGFsLXNwYWNlLWFyb3VuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1zcGFjZS1iZXR3ZWVuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hbGlnbi1zdGFydC1ob3Jpem9udGFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hbGlnbi1zdGFydC12ZXJ0aWNhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYWxpZ24tdmVydGljYWwtZGlzdHJpYnV0ZS1jZW50ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FsaWduLXZlcnRpY2FsLWRpc3RyaWJ1dGUtZW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLXN0YXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hbGlnbi12ZXJ0aWNhbC1qdXN0aWZ5LWNlbnRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYWxpZ24tdmVydGljYWwtanVzdGlmeS1lbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FsaWduLXZlcnRpY2FsLWp1c3RpZnktc3RhcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FsaWduLXZlcnRpY2FsLXNwYWNlLWFyb3VuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYWxpZ24tdmVydGljYWwtc3BhY2UtYmV0d2Vlbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYW1idWxhbmNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hbXBlcnNhbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FtcGVyc2FuZHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FtcGhvcmEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FuY2hvci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYW5ncnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fubm95ZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FudGVubmEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FudmlsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hcGVydHVyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXBwLXdpbmRvdy1tYWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FwcC13aW5kb3cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FwcGxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hcmNoaXZlLXJlc3RvcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FyY2hpdmUteC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJjaGl2ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJtY2hhaXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWJpZy1kb3duLWRhc2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWJpZy1kb3duLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hcnJvdy1iaWctbGVmdC1kYXNoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hcnJvdy1iaWctbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctYmlnLXJpZ2h0LWRhc2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWJpZy1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctYmlnLXVwLWRhc2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWJpZy11cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctZG93bi0wLTEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWRvd24tMS0wLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hcnJvdy1kb3duLWEtei50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctZG93bi1mcm9tLWxpbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWRvd24tbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctZG93bi1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctZG93bi10by1kb3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWRvd24tbmFycm93LXdpZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWRvd24tdG8tbGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctZG93bi11cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctZG93bi13aWRlLW5hcnJvdy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctZG93bi16LWEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWxlZnQtcmlnaHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWxlZnQtZnJvbS1saW5lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hcnJvdy1sZWZ0LXRvLWxpbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LWxlZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LXJpZ2h0LWZyb20tbGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctcmlnaHQtbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctcmlnaHQtdG8tbGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctcmlnaHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LXVwLTAtMS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctdXAtMS0wLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hcnJvdy11cC1hLXoudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LXVwLWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LXVwLWZyb20tZG90LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hcnJvdy11cC1mcm9tLWxpbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LXVwLWxlZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LXVwLW5hcnJvdy13aWRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hcnJvdy11cC1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctdXAtdG8tbGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctdXAtd2lkZS1uYXJyb3cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93LXVwLXotYS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXJyb3ctdXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Fycm93cy11cC1mcm9tLWxpbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2FzdGVyaXNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hdC1zaWduLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hdG9tLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9hdWRpby1saW5lcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYXdhcmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2F1ZGlvLXdhdmVmb3JtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9heGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2F4aXMtM2QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JhYnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JhY2twYWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYWRnZS1hbGVydC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmFkZ2UtY2VudC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmFkZ2UtY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JhZGdlLWRvbGxhci1zaWduLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYWRnZS1ldXJvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYWRnZS1pbmRpYW4tcnVwZWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JhZGdlLWluZm8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JhZGdlLWphcGFuZXNlLXllbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmFkZ2UtbWludXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JhZGdlLXBlcmNlbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JhZGdlLXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JhZGdlLXBvdW5kLXN0ZXJsaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYWRnZS1xdWVzdGlvbi1tYXJrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYWRnZS1ydXNzaWFuLXJ1YmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYWRnZS1zd2lzcy1mcmFuYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmFkZ2UtdHVya2lzaC1saXJhLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYWRnZS14LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYWRnZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmFnZ2FnZS1jbGFpbS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmFsbG9vbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmFuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYW5hbmEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JhbmRhZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jhbmtub3RlLWFycm93LWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jhbmtub3RlLWFycm93LXVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYW5rbm90ZS14LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYW5rbm90ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmFyY29kZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmFycmVsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYXNlbGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmF0aC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmF0dGVyeS1jaGFyZ2luZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmF0dGVyeS1mdWxsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYXR0ZXJ5LWxvdy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmF0dGVyeS1wbHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYXR0ZXJ5LW1lZGl1bS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmF0dGVyeS13YXJuaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iYXR0ZXJ5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iZWFrZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JlYW4tb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iZWFuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iZWQtZG91YmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iZWQtc2luZ2xlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JlZWYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JlZXItb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iZWVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iZWxsLWRvdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmVsbC1lbGVjdHJpYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmVsbC1taW51cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmVsbC1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JlbGwtcGx1cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmVsbC1yaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iZWxsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iZXR3ZWVuLWhvcml6b250YWwtZW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iZXR3ZWVuLWhvcml6b250YWwtc3RhcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JldHdlZW4tdmVydGljYWwtZW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iZXR3ZWVuLXZlcnRpY2FsLXN0YXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iaWNlcHMtZmxleGVkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iaWtlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iaW5hcnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jpb2hhemFyZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmlub2N1bGFycy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmlyZGhvdXNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iaXJkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9iaXRjb2luLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ibGVuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYmxpbmRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ibG9ja3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JsdWV0b290aC1jb25uZWN0ZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JsdWV0b290aC1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JsdWV0b290aC1zZWFyY2hpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JsdWV0b290aC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9sZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9sdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9tYi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9uZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9vay1hLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib29rLWFsZXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib29rLWF1ZGlvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib29rLWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib29rLWNvcHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvb2stZGFzaGVkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib29rLWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvb2staGVhZHBob25lcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9vay1oZWFydC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9vay1rZXkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvb2staW1hZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvb2stbG9jay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9vay1tYXJrZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvb2stbWludXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvb2stb3Blbi1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9vay1vcGVuLXRleHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvb2stb3Blbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9vay1wbHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib29rLXNlYXJjaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9vay10ZXh0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib29rLXVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib29rLXR5cGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvb2stdXAtMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9vay11c2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib29rLXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvb2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvb2ttYXJrLWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib29rbWFyay1taW51cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9va21hcmstcGx1cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9va21hcmsteC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm9va21hcmsudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvb20tYm94LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib3QtbWVzc2FnZS1zcXVhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JvdC1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JvdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm90dGxlLXdpbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Jvdy1hcnJvdy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYm94LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ib3hlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnJhY2VzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9icmFja2V0cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnJhaW4tY2lyY3VpdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnJhaW4tY29nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9icmFpbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnJpY2std2FsbC1maXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9icmljay13YWxsLXNoaWVsZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnJpY2std2FsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnJpZWZjYXNlLWJ1c2luZXNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9icmllZmNhc2UtY29udmV5b3ItYmVsdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnJpZWZjYXNlLW1lZGljYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JyaWVmY2FzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnJpbmctdG8tZnJvbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2JydXNoLWNsZWFuaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9icnVzaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnViYmxlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnVnLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnVnLXBsYXkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2J1Zy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnVpbGRpbmctMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnVpbGRpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2J1cy1mcm9udC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvYnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYWJsZS1jYXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhYmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYWtlLXNsaWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYWtlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYWxjdWxhdG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYWxlbmRhci0xLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYWxlbmRhci1hcnJvdy1kb3duLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYWxlbmRhci1hcnJvdy11cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2FsZW5kYXItY2hlY2stMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2FsZW5kYXItY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhbGVuZGFyLWNvZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2FsZW5kYXItY2xvY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhbGVuZGFyLWRheXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhbGVuZGFyLWZvbGQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhbGVuZGFyLWhlYXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYWxlbmRhci1taW51cy0yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYWxlbmRhci1taW51cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2FsZW5kYXItb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYWxlbmRhci1wbHVzLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhbGVuZGFyLXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhbGVuZGFyLXJhbmdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYWxlbmRhci1zZWFyY2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhbGVuZGFyLXN5bmMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhbGVuZGFyLXgtMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2FsZW5kYXIteC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2FsZW5kYXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhbGVuZGFycy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2FtZXJhLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2FtZXJhLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYW5keS1jYW5lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYW5keS1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhbmR5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYW5uYWJpcy1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nhbm5hYmlzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYXB0aW9ucy1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhcHRpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYXItZnJvbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nhci10YXhpLWZyb250LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhcmF2YW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhcmQtc2ltLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYXJyb3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nhc2UtbG93ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nhc2Utc2Vuc2l0aXZlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYXNlLXVwcGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYXNzZXR0ZS10YXBlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYXN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jYXN0bGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NhdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2N0di50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtYXJlYS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtYmFyLWJpZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtYmFyLWRlY3JlYXNpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NoYXJ0LWJhci1pbmNyZWFzaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaGFydC1iYXItc3RhY2tlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtYmFyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaGFydC1jYW5kbGVzdGljay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtY29sdW1uLWJpZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtY29sdW1uLWRlY3JlYXNpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NoYXJ0LWNvbHVtbi1pbmNyZWFzaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaGFydC1jb2x1bW4tc3RhY2tlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtY29sdW1uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaGFydC1nYW50dC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtbGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtbmV0d29yay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4tZGVjcmVhc2luZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4taW5jcmVhc2luZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NoYXJ0LW5vLWF4ZXMtY29tYmluZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NoYXJ0LW5vLWF4ZXMtZ2FudHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NoYXJ0LXBpZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtc2NhdHRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hhcnQtc3BsaW5lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaGVjay1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hlY2stbGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NoZWYtaGF0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaGVycnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NoZXNzLWJpc2hvcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hlc3Mta2luZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hlc3Mta25pZ2h0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaGVzcy1wYXduLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaGVzcy1xdWVlbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hldnJvbi1kb3duLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaGV2cm9uLWZpcnN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaGVzcy1yb29rLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaGV2cm9uLWxhc3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NoZXZyb24tbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hldnJvbi1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hldnJvbi11cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hldnJvbnMtZG93bi11cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hldnJvbnMtZG93bi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hldnJvbnMtbGVmdC1yaWdodC1lbGxpcHNpcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hldnJvbnMtbGVmdC1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hldnJvbnMtbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hldnJvbnMtcmlnaHQtbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2hldnJvbnMtcmlnaHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NoZXZyb25zLXVwLWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NoZXZyb25zLXVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaHVyY2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpZ2FyZXR0ZS1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nocm9taXVtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaWdhcmV0dGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1hbGVydC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLWFycm93LWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1hcnJvdy1sZWZ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtYXJyb3ctb3V0LWRvd24tbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLWFycm93LW91dC1kb3duLXJpZ2h0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtYXJyb3ctb3V0LXVwLWxlZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1hcnJvdy1vdXQtdXAtcmlnaHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1hcnJvdy1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLWFycm93LXVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1jaGVjay1iaWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1jaGV2cm9uLWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1jaGV2cm9uLWxlZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1jaGV2cm9uLXJpZ2h0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtY2hldnJvbi11cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLWRhc2hlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLWRpdmlkZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLWRvbGxhci1zaWduLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtZG90LWRhc2hlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLWRvdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLWVsbGlwc2lzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtZXF1YWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1mYWRpbmctYXJyb3ctdXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1mYWRpbmctcGx1cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLWdhdWdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtbWludXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1wYXJraW5nLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLXBhcmtpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1wYXVzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLXBlcmNlbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1waWxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtcGxheS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLXBvdW5kLXN0ZXJsaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtcGx1cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLXBvd2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtcXVlc3Rpb24tbWFyay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLXNsYXNoLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS1zbGFzaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLXNtYWxsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtc3Rhci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLXN0b3AudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS11c2VyLXJvdW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jaXJjbGUtdXNlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY2xlLXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NpcmNsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2lyY3VpdC1ib2FyZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2l0cnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbGFwcGVyYm9hcmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NsaXBib2FyZC1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xpcGJvYXJkLWNsb2NrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbGlwYm9hcmQtY29weS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xpcGJvYXJkLWxpc3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NsaXBib2FyZC1taW51cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xpcGJvYXJkLXBhc3RlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbGlwYm9hcmQtcGVuLWxpbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NsaXBib2FyZC1wZW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NsaXBib2FyZC1wbHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbGlwYm9hcmQtdHlwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xpcGJvYXJkLXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NsaXBib2FyZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stMS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stMTAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nsb2NrLTExLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG9jay0xMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stMy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stNC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stNS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stNi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stNy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stOC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stOS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stYWxlcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nsb2NrLWFycm93LWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nsb2NrLWFycm93LXVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG9jay1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvY2stZmFkaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG9jay1wbHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG9jay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvc2VkLWNhcHRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nsb3VkLWFsZXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG91ZC1iYWNrdXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nsb3VkLWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG91ZC1jb2cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nsb3VkLWRvd25sb2FkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG91ZC1kcml6emxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG91ZC1mb2cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nsb3VkLWhhaWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nsb3VkLWxpZ2h0bmluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvdWQtbW9vbi1yYWluLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG91ZC1tb29uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG91ZC1yYWluLXdpbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nsb3VkLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvdWQtcmFpbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvdWQtc25vdy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvdWQtc3VuLXJhaW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nsb3VkLXN1bi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvdWQtc3luYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvdWQtdXBsb2FkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG91ZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY2xvdWR5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jbG92ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NsdWIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NvZGUteG1sLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb2RlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb2RlcGVuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb2Rlc2FuZGJveC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY29mZmVlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY29nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb2x1bW5zLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NvbHVtbnMtMy1jb2cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NvbHVtbnMtMy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY29sdW1ucy00LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb21iaW5lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb21wYXNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb21wb25lbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NvbXB1dGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb25jaWVyZ2UtYmVsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY29uZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY29uc3RydWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb250YWN0LXJvdW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb250YWN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb250YWluZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NvbnRyYXN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb29raWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nvb2tpbmctcG90LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb3B5LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb3B5LW1pbnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb3B5LXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NvcHktc2xhc2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NvcHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NvcHkteC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY29weWxlZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NvcHlyaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY29ybmVyLWRvd24tcmlnaHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nvcm5lci1kb3duLWxlZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nvcm5lci1sZWZ0LWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nvcm5lci1sZWZ0LXVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb3JuZXItcmlnaHQtZG93bi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY29ybmVyLXJpZ2h0LXVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jb3JuZXItdXAtbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY29ybmVyLXVwLXJpZ2h0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jcHUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NyZWF0aXZlLWNvbW1vbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2NyZWRpdC1jYXJkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jcm9pc3NhbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nyb3AudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nyb3NzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jcm9zc2hhaXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Nyb3duLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jdWJvaWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2N1cC1zb2RhLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9jdXJyZW5jeS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvY3lsaW5kZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2RhbS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZGF0YWJhc2UtYmFja3VwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kYXRhYmFzZS16YXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2RhdGFiYXNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kZWNpbWFscy1hcnJvdy1sZWZ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kZWNpbWFscy1hcnJvdy1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZGVsZXRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kZXNzZXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kaWFtZXRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZGlhbW9uZC1taW51cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZGlhbW9uZC1wZXJjZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kaWFtb25kLXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2RpY2UtMS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZGlhbW9uZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZGljZS0yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kaWNlLTMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2RpY2UtNS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZGljZS02LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kaWNlLTQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2RpY2VzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kaWZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kaXNjLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Rpc2MtMy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZGlzYy1hbGJ1bS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZGlzYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZGl2aWRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kbmEtb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kb2NrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kbmEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2RvZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZG9sbGFyLXNpZ24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2RvbnV0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kb29yLWNsb3NlZC1sb2NrZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Rvb3ItY2xvc2VkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kb3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Rvb3Itb3Blbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZG93bmxvYWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2RyYWZ0aW5nLWNvbXBhc3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2RyYW1hLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kcmliYmJsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZHJpbGwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Ryb25lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9kcm9wbGV0LW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZHJvcGxldC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZHJvcGxldHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2RydW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2RydW1zdGljay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZHVtYmJlbGwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Vhci1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Vhci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZWFydGgtbG9jay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZWFydGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2VjbGlwc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2VnZy1mcmllZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZWdnLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZWdnLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9lbGxpcHNpcy12ZXJ0aWNhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZWxsaXBzaXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2VxdWFsLWFwcHJveGltYXRlbHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2VxdWFsLW5vdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZXJhc2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9lcXVhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZXRoZXJuZXQtcG9ydC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZXVyby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZXYtY2hhcmdlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZXh0ZXJuYWwtbGluay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZXhwYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9leWUtY2xvc2VkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9leWUtb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9leWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZhY3RvcnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZhY2Vib29rLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mYW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Zhc3QtZm9yd2FyZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmVhdGhlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmVuY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZlcnJpcy13aGVlbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlnbWEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtYXJjaGl2ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1heGlzLTNkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLWJhZGdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLWJyYWNlcy1jb3JuZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtYm94LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLWJyYWNlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1jaGFydC1jb2x1bW4taW5jcmVhc2luZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1jaGFydC1jb2x1bW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtY2hhcnQtbGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1jaGFydC1waWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtY2hlY2stY29ybmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLWNsb2NrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLWNvZGUtY29ybmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLWNvZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtY29nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLWRpZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtZGlnaXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtZG93bi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1leGNsYW1hdGlvbi1wb2ludC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1oZWFkcGhvbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtaGVhcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtaW1hZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtaW5wdXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUta2V5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLWxvY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtbWludXMtY29ybmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLW11c2ljLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLW1pbnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLW91dHB1dC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1wZW4tbGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1wZW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtcGxheS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1wbHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLXF1ZXN0aW9uLW1hcmsudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtcGx1cy1jb3JuZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtc2Nhbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1zZWFyY2gtY29ybmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLXNlYXJjaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1zaWduYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtc3ByZWFkc2hlZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtc2xpZGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1zdGFjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS1zeW1saW5rLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLXRlcm1pbmFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLXRleHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtdHlwZS1jb3JuZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUtdHlwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS11cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS11c2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maWxlLXZvbHVtZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS12aWRlby1jYW1lcmEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUteC1jb3JuZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbGUteC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlsZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbG0udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpbmdlcnByaW50LXBhdHRlcm4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZpcmUtZXh0aW5ndWlzaGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9maXNoLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmlzaC1zeW1ib2wudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Zpc2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Zpc2hpbmctaG9vay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmxhZy1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZsYWctdHJpYW5nbGUtbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmxhZy10cmlhbmdsZS1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmxhbWUta2luZGxpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZsYWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZsYW1lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mbGFzaGxpZ2h0LW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmxhc2hsaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZmxhc2stY29uaWNhbC1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZsYXNrLXJvdW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mbGFzay1jb25pY2FsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mbGlwLWhvcml6b250YWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZsaXAtaG9yaXpvbnRhbC0yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mbGlwLXZlcnRpY2FsLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZsaXAtdmVydGljYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Zsb3dlci0yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mbG93ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvY3VzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkLWhvcml6b250YWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvbGQtdmVydGljYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvbGRlci1hcmNoaXZlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXItY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvbGRlci1jbG9jay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZm9sZGVyLWNsb3NlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZm9sZGVyLWNvZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvbGRlci1jb2cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvbGRlci1kb3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvbGRlci1kb3duLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXItZ2l0LTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvbGRlci1naXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvbGRlci1oZWFydC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZm9sZGVyLWlucHV0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXIta2FuYmFuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXIta2V5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXItbG9jay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZm9sZGVyLW1pbnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXItb3Blbi1kb3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvbGRlci1vcGVuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXItb3V0cHV0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXItcGVuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXItcGx1cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZm9sZGVyLXJvb3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvbGRlci1zZWFyY2gtMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZm9sZGVyLXNlYXJjaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZm9sZGVyLXN5bWxpbmsudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZvbGRlci1zeW5jLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXItdHJlZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZm9sZGVyLXVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXIteC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZm9sZGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb2xkZXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb290cHJpbnRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mb3JrbGlmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZm9ybS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZm9yd2FyZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZnJhbWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ZyYW1lci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZnJvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Z1ZWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Z1bGxzY3JlZW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2Z1bm5lbC1wbHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9mdW5uZWwteC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZnVubmVsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9nYWxsZXJ5LWhvcml6b250YWwtZW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9nYWxsZXJ5LWhvcml6b250YWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dhbGxlcnktdGh1bWJuYWlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ2FsbGVyeS12ZXJ0aWNhbC1lbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dhbGxlcnktdmVydGljYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dhbWVwYWQtMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ2FtZXBhZC1kaXJlY3Rpb25hbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ2FtZXBhZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ2F1Z2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dhdmVsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9nZW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dlb3JnaWFuLWxhcmkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dob3N0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9naWZ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9naXQtYnJhbmNoLW1pbnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9naXQtYnJhbmNoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9naXQtYnJhbmNoLXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dpdC1jb21taXQtaG9yaXpvbnRhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ2l0LWNvbW1pdC12ZXJ0aWNhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ2l0LWNvbXBhcmUtYXJyb3dzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9naXQtY29tcGFyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ2l0LWZvcmsudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dpdC1ncmFwaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ2l0LW1lcmdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LWFycm93LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LWNsb3NlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUtYXJyb3cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtY3JlYXRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LWRyYWZ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9naXRodWIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dpdGxhYi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ2xhc3Mtd2F0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dsYXNzZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dsb2JlLWxvY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dsb2JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9nb2FsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ncHUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dyYWR1YXRpb24tY2FwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ncmFwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ3JpZC0yeDItY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dyaWQtMngyLXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dyaWQtMngyLXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dyaWQtMngyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ncmlkLTN4Mi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ3JpZC0zeDMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2dyaXAtaG9yaXpvbnRhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ3JpcC12ZXJ0aWNhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ3JpcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ3JvdXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hhbS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvZ3VpdGFyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oYW1idXJnZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hhbW1lci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaGFuZC1jb2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaGFuZC1maXN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oYW5kLWdyYWIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hhbmQtaGVhcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hhbmQtaGVscGluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaGFuZC1tZXRhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaGFuZC1wbGF0dGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oYW5kYmFnLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oYW5kc2hha2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hhcmQtZHJpdmUtZG93bmxvYWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hhcmQtZHJpdmUtdXBsb2FkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oYXJkLWhhdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaGFzaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaGFyZC1kcml2ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaGF0LWdsYXNzZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hhemUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oZG1pLXBvcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hlYWRpbmctMS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaGVhZGluZy0zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oZWFkaW5nLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hlYWRpbmctNC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaGVhZGluZy01LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oZWFkaW5nLTYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hlYWRpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hlYWRwaG9uZS1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hlYWRwaG9uZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hlYWRzZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hlYXJ0LWNyYWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oZWFydC1oYW5kc2hha2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hlYXJ0LW1pbnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oZWFydC1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hlYXJ0LXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hlYXJ0LXB1bHNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oZWF0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hlYXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oZWxpY29wdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oZXhhZ29uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9oaWdobGlnaHRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaGlzdG9yeS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaG9wLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ob3Atb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ob3NwaXRhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaG90ZWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hvdXJnbGFzcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaG91c2UtaGVhcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hvdXNlLXBsdWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hvdXNlLXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hvdXNlLXdpZmkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2hvdXNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9pY2UtY3JlYW0tYm93bC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaWNlLWNyZWFtLWNvbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2lkLWNhcmQtbGFueWFyZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaWQtY2FyZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaW1hZ2UtZG93bi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaW1hZ2UtbWludXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ltYWdlLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaW1hZ2UtcGx1cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaW1hZ2UtcGxheS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaW1hZ2UtdXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ltYWdlLXVwc2NhbGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ltYWdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9pbWFnZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2ltcG9ydC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaW5ib3gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2luZGlhbi1ydXBlZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaW5maW5pdHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2luZm8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2luc3BlY3Rpb24tcGFuZWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2luc3RhZ3JhbS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvaXRhbGljLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9pdGVyYXRpb24tY2N3LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9pdGVyYXRpb24tY3cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2phcGFuZXNlLXllbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvam95c3RpY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2thbmJhbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMva2F5YWsudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2tleS1yb3VuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMva2V5LXNxdWFyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMva2V5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9rZXlib2FyZC1tdXNpYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMva2V5Ym9hcmQtb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9rZXlib2FyZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGFtcC1jZWlsaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9sYW1wLWRlc2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xhbXAtZmxvb3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xhbXAtd2FsbC1kb3duLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9sYW1wLXdhbGwtdXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xhbXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xhbmQtcGxvdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGFuZG1hcmsudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xhbmd1YWdlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGFwdG9wLW1pbmltYWwtY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xhcHRvcC1taW5pbWFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9sYXB0b3AudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xhc3NvLXNlbGVjdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGFzc28udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xhdWdoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9sYXllcnMtMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGF5ZXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9sYXllcnMtcGx1cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGF5b3V0LWRhc2hib2FyZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGF5b3V0LWdyaWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xheW91dC1saXN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9sYXlvdXQtcGFuZWwtbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGF5b3V0LXBhbmVsLXRvcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGF5b3V0LXRlbXBsYXRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9sZWFmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9sZWFmeS1ncmVlbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGVjdGVybi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlicmFyeS1iaWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xpYnJhcnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xpZmUtYnVveS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlnYXR1cmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xpZ2h0YnVsYi1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xpZ2h0YnVsYi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGluZS1zcXVpZ2dsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGluay0yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9saW5rLTItb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9saW5rLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9saW5rZWRpbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlzdC1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlzdC1jaGVja3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xpc3QtY2hldnJvbnMtZG93bi11cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlzdC1jaGV2cm9ucy11cC1kb3duLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9saXN0LWNvbGxhcHNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9saXN0LWVuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlzdC1maWx0ZXItcGx1cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlzdC1maWx0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xpc3QtaW5kZW50LWRlY3JlYXNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9saXN0LWluZGVudC1pbmNyZWFzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlzdC1taW51cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlzdC1tdXNpYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlzdC1vcmRlcmVkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9saXN0LXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xpc3QtcmVzdGFydC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlzdC1zdGFydC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlzdC10b2RvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9saXN0LXRyZWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xpc3QtdmlkZW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xpc3QteC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbG9hZGVyLWNpcmNsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbGlzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbG9hZGVyLXBpbndoZWVsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9sb2FkZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xvY2F0ZS1maXhlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbG9jYXRlLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbG9jYXRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9sb2NrLWtleWhvbGUtb3Blbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbG9jay1rZXlob2xlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9sb2NrLW9wZW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xvY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2xvZy1pbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbG9nLW91dC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbG9ncy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbG9sbGlwb3AudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL2x1Z2dhZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21hZ25ldC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWFpbC1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWFpbC1taW51cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWFpbC1vcGVuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYWlsLXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21haWwtcXVlc3Rpb24tbWFyay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWFpbC1zZWFyY2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21haWwtd2FybmluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWFpbC14LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYWlsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYWlsYm94LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYWlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWFwLW1pbnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYXAtcGluLWNoZWNrLWluc2lkZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWFwLXBpbi1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWFwLXBpbi1ob3VzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWFwLXBpbi1taW51cy1pbnNpZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21hcC1waW4tbWludXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21hcC1waW4tb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYXAtcGluLXBlbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWFwLXBpbi1wbHVzLWluc2lkZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWFwLXBpbi1wbHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYXAtcGluLXgtaW5zaWRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYXAtcGluLXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21hcC1waW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21hcC1waW5uZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21hcC1wbHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21hcnMtc3Ryb2tlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYXJ0aW5pLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYXhpbWl6ZS0yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tYXhpbWl6ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWVnYXBob25lLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWVnYXBob25lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZWRhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWVoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZW1vcnktc3RpY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lcmdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZW51LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLWNpcmNsZS1jb2RlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLWNpcmNsZS1kYXNoZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lc3NhZ2UtY2lyY2xlLWhlYXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLWNpcmNsZS1tb3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLWNpcmNsZS1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lc3NhZ2UtY2lyY2xlLXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lc3NhZ2UtY2lyY2xlLXF1ZXN0aW9uLW1hcmsudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lc3NhZ2UtY2lyY2xlLXJlcGx5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLWNpcmNsZS13YXJuaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLWNpcmNsZS14LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLWNpcmNsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWVzc2FnZS1zcXVhcmUtY29kZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWVzc2FnZS1zcXVhcmUtZGFzaGVkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLXNxdWFyZS1kaWZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLXNxdWFyZS1kb3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lc3NhZ2Utc3F1YXJlLWhlYXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLXNxdWFyZS1sb2NrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLXNxdWFyZS1tb3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLXNxdWFyZS1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lc3NhZ2Utc3F1YXJlLXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lc3NhZ2Utc3F1YXJlLXF1b3RlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlLXNxdWFyZS1yZXBseS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWVzc2FnZS1zcXVhcmUtc2hhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lc3NhZ2Utc3F1YXJlLXRleHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lc3NhZ2Utc3F1YXJlLXdhcm5pbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lc3NhZ2Utc3F1YXJlLXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21lc3NhZ2Utc3F1YXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tZXNzYWdlcy1zcXVhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21pYy1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21pYy12b2NhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWljLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9taWNyb2NoaXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21pY3Jvc2NvcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21pY3Jvd2F2ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWlsZXN0b25lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9taWxrLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWlsay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWluaW1pemUtMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbWluaW1pemUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21pbnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb25pdG9yLWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb25pdG9yLWNsb3VkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb25pdG9yLWNvZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW9uaXRvci1kb3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21vbml0b3ItZG93bi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW9uaXRvci1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21vbml0b3ItcGF1c2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21vbml0b3ItcGxheS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW9uaXRvci1zbWFydHBob25lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb25pdG9yLXNwZWFrZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21vbml0b3Itc3RvcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW9uaXRvci11cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW9uaXRvci14LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb25pdG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb29uLXN0YXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21vdG9yYmlrZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW9vbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW91bnRhaW4tc25vdy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW91bnRhaW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21vdXNlLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW91c2UtcG9pbnRlci0yLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW91c2UtcG9pbnRlci0yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb3VzZS1wb2ludGVyLWJhbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW91c2UtcG9pbnRlci1jbGljay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW91c2UtcG9pbnRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW91c2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21vdmUtM2QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21vdmUtZGlhZ29uYWwtMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW92ZS1kaWFnb25hbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW92ZS1kb3duLWxlZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21vdmUtZG93bi1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW92ZS1kb3duLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb3ZlLWxlZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL21vdmUtaG9yaXpvbnRhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW92ZS1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbW92ZS11cC1sZWZ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb3ZlLXVwLXJpZ2h0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb3ZlLXVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb3ZlLXZlcnRpY2FsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tb3ZlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tdXNpYy0yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tdXNpYy0zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tdXNpYy00LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9tdXNpYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbmF2aWdhdGlvbi0yLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbmF2aWdhdGlvbi0yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9uYXZpZ2F0aW9uLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbmF2aWdhdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbmV3c3BhcGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9uZXR3b3JrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9uZmMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL25vbi1iaW5hcnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL25vdGVib29rLXBlbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbm90ZWJvb2stdGFicy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbm90ZWJvb2stdGV4dC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbm90ZWJvb2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL25vdGVwYWQtdGV4dC1kYXNoZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL25vdGVwYWQtdGV4dC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbnV0LW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvbnV0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9vY3RhZ29uLWFsZXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9vY3RhZ29uLW1pbnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9vY3RhZ29uLXBhdXNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9vY3RhZ29uLXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL29jdGFnb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL29tZWdhLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9vcHRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL29yYml0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9vcmlnYW1pLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYWNrYWdlLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhY2thZ2UtY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhY2thZ2UtbWludXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhY2thZ2Utb3Blbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFja2FnZS1wbHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYWNrYWdlLXNlYXJjaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFja2FnZS14LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYWNrYWdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYWludC1idWNrZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhaW50LXJvbGxlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFpbnRicnVzaC12ZXJ0aWNhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFpbnRicnVzaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFsZXR0ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFuZGEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhbmVsLWJvdHRvbS1jbG9zZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFuZWwtYm90dG9tLWRhc2hlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFuZWwtYm90dG9tLW9wZW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhbmVsLWJvdHRvbS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFuZWwtbGVmdC1jbG9zZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFuZWwtbGVmdC1kYXNoZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhbmVsLWxlZnQtb3Blbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFuZWwtbGVmdC1yaWdodC1kYXNoZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhbmVsLWxlZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhbmVsLXJpZ2h0LWNsb3NlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYW5lbC1yaWdodC1kYXNoZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhbmVsLXJpZ2h0LW9wZW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhbmVsLXJpZ2h0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYW5lbC10b3AtYm90dG9tLWRhc2hlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFuZWwtdG9wLWNsb3NlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYW5lbC10b3AtZGFzaGVkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYW5lbC10b3Atb3Blbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFuZWxzLWxlZnQtYm90dG9tLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYW5lbC10b3AudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhbmVscy1yaWdodC1ib3R0b20udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BhbmVscy10b3AtbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFwZXJjbGlwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYXJraW5nLW1ldGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYXJlbnRoZXNlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGFydHktcG9wcGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYXVzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGF3LXByaW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wYy1jYXNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wZW4tbGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGVuLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGVuLXRvb2wudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Blbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGVuY2lsLWxpbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BlbmNpbC1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BlbmNpbC1ydWxlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGVuY2lsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wZW50YWdvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGVyY2VudC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGVyc29uLXN0YW5kaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9waGlsaXBwaW5lLXBlc28udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Bob25lLWZvcndhcmRlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGhvbmUtY2FsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGhvbmUtaW5jb21pbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Bob25lLW1pc3NlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGhvbmUtb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9waG9uZS1vdXRnb2luZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGhvbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9waWFuby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGlja2F4ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGljdHVyZS1pbi1waWN0dXJlLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BpY3R1cmUtaW4tcGljdHVyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGlnZ3ktYmFuay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGlsY3Jvdy1sZWZ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9waWxjcm93LXJpZ2h0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9waWxjcm93LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9waWxsLWJvdHRsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGlsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGluLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGluLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9waXBldHRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9waXp6YS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGxhbmUtbGFuZGluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGxhbmUtdGFrZW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGxhbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BsYXkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BsdWctMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcGx1Zy16YXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BsdWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BvY2tldC1rbmlmZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcG9ja2V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wb2RjYXN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wb2ludGVyLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcG9pbnRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcG9wY29ybi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcG9wc2ljbGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3BvdW5kLXN0ZXJsaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wb3dlci1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Bvd2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9wcmVzZW50YXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3ByaW50ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3ByaW50ZXItY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Byb2plY3Rvci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcHJvcG9ydGlvbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3B1enpsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcHlyYW1pZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcXItY29kZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcXVvdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JhYmJpdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmFkYXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JhZGlhdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmFkaWNhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmFkaW8tcmVjZWl2ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JhZGlvLXRvd2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yYWRpby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmFkaXVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yYWlsLXN5bWJvbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmFpbmJvdy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmF0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yYXRpby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmVjZWlwdC1jZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWNlaXB0LWV1cm8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JlY2VpcHQtaW5kaWFuLXJ1cGVlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWNlaXB0LWphcGFuZXNlLXllbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmVjZWlwdC1wb3VuZC1zdGVybGluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmVjZWlwdC1ydXNzaWFuLXJ1YmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWNlaXB0LXN3aXNzLWZyYW5jLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWNlaXB0LXRleHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JlY2VpcHQtdHVya2lzaC1saXJhLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWNlaXB0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWN0YW5nbGUtY2lyY2xlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWN0YW5nbGUtZWxsaXBzaXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JlY3RhbmdsZS1nb2dnbGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWN0YW5nbGUtaG9yaXpvbnRhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmVjdGFuZ2xlLXZlcnRpY2FsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWN5Y2xlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWRvLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JlZG8tZG90LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWRvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWZyZXNoLWNjdy1kb3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JlZnJlc2gtY2N3LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWZyZXNoLWN3LW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmVmcmVzaC1jdy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmVmcmlnZXJhdG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZWdleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmVtb3ZlLWZvcm1hdHRpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JlcGVhdC0xLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZXBlYXQtMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmVwZWF0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZXBsYWNlLWFsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmVwbGFjZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmVwbHktYWxsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yZXBseS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcmV3aW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yaWJib24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JvY2tldC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcm9ja2luZy1jaGFpci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcm9sbGVyLWNvYXN0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Jvc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JvdGF0ZS0zZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcm90YXRlLWNjdy1rZXkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JvdGF0ZS1jY3ctc3F1YXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yb3RhdGUtY2N3LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yb3RhdGUtY3ctc3F1YXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yb3RhdGUtY3cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JvdXRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yb3V0ZS1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3JvdXRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcm93cy0yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9yb3dzLTMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Jvd3MtNC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcnNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9ydWxlci1kaW1lbnNpb24tbGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvcnVsZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3J1c3NpYW4tcnVibGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NhaWxib2F0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zYWxhZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2FuZHdpY2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NhdGVsbGl0ZS1kaXNoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zYXRlbGxpdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NhdWRpLXJpeWFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zYXZlLWFsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2F2ZS1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NhdmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NjYWxlLTNkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zY2FsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2NhbGluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2Nhbi1leWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NjYW4tYmFyY29kZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2Nhbi1mYWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zY2FuLWhlYXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zY2FuLWxpbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NjYW4tcXItY29kZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2Nhbi1zZWFyY2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NjYW4tdGV4dC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2Nhbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2Nob29sLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zY2lzc29ycy1saW5lLWRhc2hlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2Npc3NvcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Njb290ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NjcmVlbi1zaGFyZS1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NjcmVlbi1zaGFyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2Nyb2xsLXRleHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Njcm9sbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2VhcmNoLWFsZXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zZWFyY2gtY29kZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2VhcmNoLWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zZWFyY2gtc2xhc2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NlYXJjaC14LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zZWFyY2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NlbmQtaG9yaXpvbnRhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2VjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2VuZC10by1iYWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zZW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zZXBhcmF0b3ItaG9yaXpvbnRhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2VwYXJhdG9yLXZlcnRpY2FsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zZXJ2ZXItY29nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zZXJ2ZXItY3Jhc2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NlcnZlci1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2V0dGluZ3MtMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2V0dGluZ3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NoYXBlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hhcmUtMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NoZWV0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaGVsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hpZWxkLWFsZXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaGllbGQtYmFuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaGllbGQtY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NoaWVsZC1lbGxpcHNpcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hpZWxkLWhhbGYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NoaWVsZC1taW51cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hpZWxkLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hpZWxkLXBsdXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NoaWVsZC1xdWVzdGlvbi1tYXJrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaGllbGQtdXNlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hpZWxkLXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NoaWVsZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hpcC13aGVlbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hpcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hpcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Nob3BwaW5nLWJhZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hvcHBpbmctYmFza2V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaG9wcGluZy1jYXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaG92ZWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Nob3dlci1oZWFkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaHJlZGRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2hyaW1wLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaHJpbmsudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NocnViLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaHVmZmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaWduYWwtaGlnaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2lnbWEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NpZ25hbC1sb3cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NpZ25hbC1tZWRpdW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NpZ25hbC16ZXJvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaWduYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NpZ25hdHVyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2lnbnBvc3QtYmlnLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zaWducG9zdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2lyZW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NraXAtYmFjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2t1bGwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NraXAtZm9yd2FyZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2xhY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NsYXNoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zbGljZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc2xpZGVycy1ob3Jpem9udGFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zbGlkZXJzLXZlcnRpY2FsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zbWFydHBob25lLWNoYXJnaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zbWFydHBob25lLW5mYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc21hcnRwaG9uZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc21pbGUtcGx1cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc21pbGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NuYWlsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zbm93Zmxha2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NvYXAtZGlzcGVuc2VyLWRyb3BsZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NvZmEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NvbGFyLXBhbmVsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zb3VwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcGFjZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3BhZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NwYXJrbGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NwYXJrbGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcGVha2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcGVlY2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NwZWxsLWNoZWNrLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NwZWxsLWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcGxpbmUtcG9pbnRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3BsaW5lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcGxpdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3Bvb2wudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Nwb3RsaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3ByYXktY2FuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcHJvdXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1hY3Rpdml0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWFycm93LWRvd24tbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWFycm93LWRvd24tcmlnaHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtYXJyb3ctbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWFycm93LW91dC1kb3duLWxlZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1hcnJvdy1vdXQtZG93bi1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWFycm93LW91dC11cC1sZWZ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtYXJyb3ctb3V0LXVwLXJpZ2h0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtYXJyb3ctcmlnaHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1hcnJvdy11cC1sZWZ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtYXJyb3ctdXAtcmlnaHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1hcnJvdy11cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWFzdGVyaXNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtYm90dG9tLWRhc2hlZC1zY2lzc29ycy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWNoYXJ0LWdhbnR0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1jaGVjay1iaWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1jaGV2cm9uLWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1jaGV2cm9uLWxlZnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1jaGV2cm9uLXJpZ2h0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtY2hldnJvbi11cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWNvZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1kYXNoZWQtYm90dG9tLWNvZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1kYXNoZWQtYm90dG9tLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtZGFzaGVkLWthbmJhbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWRhc2hlZC1tb3VzZS1wb2ludGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtZGFzaGVkLXRvcC1zb2xpZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWRhc2hlZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWRpdmlkZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWRvdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLWVxdWFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtZnVuY3Rpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1rYW5iYW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1saWJyYXJ5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtbS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLW1lbnUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1taW51cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLW1vdXNlLXBvaW50ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1wYXJraW5nLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLXBhcmtpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1wZW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1wYXVzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLXBlcmNlbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1waS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLXBpbGNyb3cudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1wbGF5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtcGx1cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLXBvd2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtcmFkaWNhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLXNjaXNzb3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtcm91bmQtY29ybmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtc2lnbWEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1zbGFzaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLXNwbGl0LWhvcml6b250YWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS1zcGxpdC12ZXJ0aWNhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLXNxdWFyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLXN0YWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUtc3Rhci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLXN0b3AudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS10ZXJtaW5hbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLXVzZXItcm91bmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZS11c2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmUteC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3F1YXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmVzLWV4Y2x1ZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZXMtaW50ZXJzZWN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVhcmVzLXN1YnRyYWN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVpcmNsZS1kYXNoZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWFyZXMtdW5pdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3NxdWlyY2xlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zcXVpcnJlbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3RhbXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3N0YXItb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zdGFyLWhhbGYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3N0YXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3N0ZXAtYmFjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3RlcC1mb3J3YXJkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zdGV0aG9zY29wZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3RpY2tlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3RvbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3N0aWNreS1ub3RlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zdG9yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3RyZXRjaC1ob3Jpem9udGFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zdHJldGNoLXZlcnRpY2FsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zdHJpa2V0aHJvdWdoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zdWJzY3JpcHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3N1bi1kaW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3N1bi1tZWRpdW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3N1bi1tb29uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zdW4tc25vdy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3VuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zdW5yaXNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zdW5zZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3N1cGVyc2NyaXB0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zd2F0Y2gtYm9vay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvc3dpc3MtZnJhbmMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3N3aXRjaC1jYW1lcmEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3N3b3JkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy9zd29yZHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3N5cmluZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhYmxlLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhYmxlLWNlbGxzLW1lcmdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90YWJsZS1jZWxscy1zcGxpdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGFibGUtb2YtY29udGVudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhYmxlLWNvbHVtbnMtc3BsaXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhYmxlLXByb3BlcnRpZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhYmxlLXJvd3Mtc3BsaXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhYmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90YWJsZXQtc21hcnRwaG9uZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGFibGV0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90YWJsZXRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90YWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhZ3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhbGx5LTEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhbGx5LTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhbGx5LTMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhbGx5LTQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhbGx5LTUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhbmdlbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RhcmdldC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGVsZXNjb3BlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90ZW50LXRyZWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RlbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Rlc3QtdHViZS1kaWFnb25hbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGVybWluYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Rlc3QtdHViZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGVzdC10dWJlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGV4dC1hbGlnbi1jZW50ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RleHQtYWxpZ24tZW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90ZXh0LWFsaWduLWp1c3RpZnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RleHQtYWxpZ24tc3RhcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RleHQtY3Vyc29yLWlucHV0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90ZXh0LWN1cnNvci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGV4dC1xdW90ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGV4dC1pbml0aWFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90ZXh0LXNlYXJjaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGV4dC1zZWxlY3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RoZWF0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RleHQtd3JhcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGhlcm1vbWV0ZXItc25vd2ZsYWtlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90aGVybW9tZXRlci1zdW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RoZXJtb21ldGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90aHVtYnMtZG93bi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGh1bWJzLXVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90aWNrZXQtY2hlY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RpY2tldC1taW51cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdGlja2V0LXBlcmNlbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RpY2tldC1wbHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90aWNrZXQtc2xhc2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RpY2tldC14LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90aWNrZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RpY2tldHMtcGxhbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RpY2tldHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RpbWVyLXJlc2V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90aW1lci1vZmYudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RpbWVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90b2dnbGUtbGVmdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdG9nZ2xlLXJpZ2h0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90b2lsZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Rvb2wtY2FzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdG9vbGJveC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdG9ybmFkby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdG9ydXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RvdWNocGFkLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdG91Y2hwYWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Rvd2VyLWNvbnRyb2wudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RveS1icmljay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdHJhZmZpYy1jb25lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90cmFjdG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90cmFpbi1mcm9udC10dW5uZWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RyYWluLWZyb250LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90cmFpbi10cmFjay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdHJhbS1mcm9udC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdHJhbnNnZW5kZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RyYXNoLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RyYXNoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90cmVlLWRlY2lkdW91cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdHJlZS1wYWxtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90cmVlLXBpbmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RyZWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90cmVsbG8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RyZW5kaW5nLWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RyZW5kaW5nLXVwLWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RyZW5kaW5nLXVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90cmlhbmdsZS1hbGVydC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdHJpYW5nbGUtZGFzaGVkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90cmlhbmdsZS1yaWdodC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdHJpYW5nbGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3Ryb3BoeS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdHJ1Y2stZWxlY3RyaWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3RydWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90dXJraXNoLWxpcmEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3R1cm50YWJsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdHVydGxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90di1taW5pbWFsLXBsYXkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3R2LW1pbmltYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3R2LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy90d2l0Y2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3R3aXR0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3R5cGUtb3V0bGluZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdHlwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdW1icmVsbGEtb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91bWJyZWxsYS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdW5kZXJsaW5lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91bmRvLTIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3VuZG8tZG90LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91bmRvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91bmZvbGQtaG9yaXpvbnRhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdW5mb2xkLXZlcnRpY2FsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91bmdyb3VwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91bml2ZXJzaXR5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91bmxpbmstMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdW5saW5rLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91bnBsdWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3VzYi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdXBsb2FkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91c2VyLWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91c2VyLWNvZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdXNlci1sb2NrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91c2VyLW1pbnVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91c2VyLXBlbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdXNlci1wbHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91c2VyLXJvdW5kLWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91c2VyLXJvdW5kLWNvZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdXNlci1yb3VuZC1taW51cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdXNlci1yb3VuZC1wZW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3VzZXItcm91bmQtcGx1cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdXNlci1yb3VuZC1zZWFyY2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3VzZXItcm91bmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3VzZXItcm91bmQteC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdXNlci1zZWFyY2gudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3VzZXItc3Rhci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdXNlci14LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91c2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy91c2Vycy1yb3VuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdXNlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3V0ZW5zaWxzLWNyb3NzZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3V0ZW5zaWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy92YW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3V0aWxpdHktcG9sZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdmFyaWFibGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3ZhdWx0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy92ZWN0b3Itc3F1YXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy92ZWdhbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdmVuZXRpYW4tbWFzay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdmVudXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3ZlbnVzLWFuZC1tYXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy92aWJyYXRlLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdmlicmF0ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdmlkZW8tb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy92aWRlby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdm9pY2VtYWlsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy92aWRlb3RhcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3ZpZXcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3ZvbGxleWJhbGwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3ZvbHVtZS0xLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy92b2x1bWUtMi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdm9sdW1lLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdm9sdW1lLXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3ZvbHVtZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvdm90ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2FsbGV0LW1pbmltYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3dhbGxldC1jYXJkcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2FsbGV0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy93YWxscGFwZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3dhbmQtc3BhcmtsZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3dhbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3dhcmVob3VzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2FzaGluZy1tYWNoaW5lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy93YXRjaC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2F2ZXMtYXJyb3ctZG93bi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2F2ZXMtYXJyb3ctdXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3dhdmVzLWxhZGRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2F2ZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3dheXBvaW50cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2ViY2FtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy93ZWJob29rLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2ViaG9vay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2VpZ2h0LXRpbGRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy93ZWlnaHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3doZWF0LW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2hlYXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3dob2xlLXdvcmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3dpZmktY29nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy93aWZpLWxvdy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2lmaS1oaWdoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy93aWZpLW9mZi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2lmaS1wZW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3dpZmktc3luYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd2lmaS16ZXJvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy93aWZpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy93aW5kLWFycm93LWRvd24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3dpbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3dpbmUtb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy93aW5lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy93b3JtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy93b3JrZmxvdy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvaWNvbnMvd3JlbmNoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy94LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy95b3V0dWJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy96YXAtb2ZmLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL3NyYy9pY29ucy96YXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3pvb20taW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvc3JjL2ljb25zL3pvb20tb3V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zQW5kQWxpYXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9zcmMvbHVjaWRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtaWNvbi9kZWVzLWljb24uZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLWljb24vZGVlcy1pY29uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL3NlcnZpY2VzL3ZlcnNpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL3NlcnZpY2VzL0RlZXNTZXJ2aWNlTGliTG9hZGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL3NlcnZpY2VzL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2ludGVyZmFjZXMvSUV4ZWN1dGlvbkVudmlyb25tZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcnVudGltZS9pbnRlcmZhY2VzL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL1R5cGVkRXZlbnRUYXJnZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL3Rva2Vucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvaWZyYW1lLXVybC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvY29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvcmVzZXQtcHJvbWlzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvYXV0aC1zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvcHJldmlldy1tZXNzYWdlLXR5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC92ZW5kb3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL3JlbG9hZC1wcmV2aWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC91dGlscy9pcy1wcmV2aWV3LW1lc3NhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC91dGlscy9udWxsLXByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvZmlsZS1zeXN0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcnVudGltZS9lbnZpcm9ubWVudHMvV2ViQ29udGFpbmVyRW52aXJvbm1lbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1hY3Rpb25iYXIvZGVlcy1hY3Rpb25iYXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvdGVybWluYWwtdGFiLW1hbmFnZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDB6aW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvYnVzaW5lc3MvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvZGF0YWJhc2UvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvZmluYW5jZS9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy90cy9jb2RlL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL2NvbnRhaW5lci9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy90cy9kZXNjcmlwdG9ycy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy90cy9jb250ZW50L2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL2dlbmVyYWwvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvdHMvbmV0d29yay9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy90cy9uZXR3b3JrL2NuYW1lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL3NhYXMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zdG9yYWdlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL3RzL3dlYnNpdGUvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBwbHVnaW5zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtY29udGV4dG1lbnUvZGVlcy1jb250ZXh0bWVudS5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtd2luZG93bGF5ZXIvZGVlcy13aW5kb3dsYXllci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLWNvbnRleHRtZW51L2RlZXMtY29udGV4dG1lbnUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtd2NjdG9vbHNAMi4wLjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtd2NjdG9vbHMvdHNfZGVtb3Rvb2xzL2RlbW90b29scy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYWN0aXZpdHlsb2cvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy9kZWVzLWFwcHVpLWFjdGl2aXR5bG9nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hcHBiYXIvZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYXBwYmFyL3N0eWxlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYXBwYmFyL3RlbXBsYXRlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtd2luZG93Y29udHJvbHMvZGVlcy13aW5kb3djb250cm9scy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duL2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hcHBiYXIvY29tcG9uZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1ib3R0b21iYXIvZGVlcy1hcHB1aS1ib3R0b21iYXIuZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYm90dG9tYmFyL2RlZXMtYXBwdWktYm90dG9tYmFyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS9kZWVzLWFwcHVpLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpL3ZpZXcucmVnaXN0cnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLW1haW5tZW51L2RlZXMtYXBwdWktbWFpbm1lbnUuZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbm1lbnUvZGVlcy1hcHB1aS1tYWlubWVudS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudS9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUuZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudS9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXRhYnMvZGVlcy1hcHB1aS10YWJzLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXRhYnMvZGVlcy1hcHB1aS10YWJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1tYWluY29udGVudC9kZWVzLWFwcHVpLW1haW5jb250ZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS9kZWVzLWFwcHVpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtcGFuZWwvZGVlcy1wYW5lbC5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZm9udHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1wYW5lbC9kZWVzLXBhbmVsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1iYXNlL2RlZXMtaW5wdXQtYmFzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtY2hlY2tib3gvZGVlcy1pbnB1dC1jaGVja2JveC5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1jaGVja2JveC9kZWVzLWlucHV0LWNoZWNrYm94LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwY29sb3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtbW9kYWwvZGVlcy1tb2RhbC5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtbW9kYWwvZGVlcy1tb2RhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLWxhYmVsL2RlZXMtbGFiZWwuZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLWxhYmVsL2RlZXMtbGFiZWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtbW9uYWNvL3ZlcnNpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtbW9uYWNvL2RlZXMtd29ya3NwYWNlLW1vbmFjby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtY29kZS9kZWVzLWlucHV0LWNvZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtZGF0ZXBpY2tlci9zdHlsZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvdGVtcGxhdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvY29tcG9uZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10ZXh0L2RlZXMtaW5wdXQtdGV4dC5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10ZXh0L2RlZXMtaW5wdXQtdGV4dC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQuZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yYWRpb2dyb3VwL2RlZXMtaW5wdXQtcmFkaW9ncm91cC5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yYWRpb2dyb3VwL2RlZXMtaW5wdXQtcmFkaW9ncm91cC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZvcm0vZGVlcy1mb3JtLXN1Ym1pdC9kZWVzLWZvcm0tc3VibWl0LmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS1zdWJtaXQvZGVlcy1mb3JtLXN1Ym1pdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtZHJvcGRvd24vZGVlcy1pbnB1dC1kcm9wZG93bi5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kcm9wZG93bi9kZWVzLWlucHV0LWRyb3Bkb3duLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1maWxldXBsb2FkL2RlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWZpbGV1cGxvYWQvc3R5bGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1maWxldXBsb2FkL2NvbXBvbmVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaWJhbnRvb2xzQDQuNS4xL25vZGVfbW9kdWxlcy9pYmFudG9vbHMvanNuZXh0L2liYW50b29scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtaWJhbi9kZWVzLWlucHV0LWliYW4uZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtaWJhbi9kZWVzLWlucHV0LWliYW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlL2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUuZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcGhvbmUvZGVlcy1pbnB1dC1waG9uZS5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1waG9uZS9kZWVzLWlucHV0LXBob25lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10eXBlbGlzdC9kZWVzLWlucHV0LXR5cGVsaXN0LmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXR5cGVsaXN0L2RlZXMtaW5wdXQtdHlwZWxpc3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy10YWJsZS9kZWVzLXRhYmxlLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy10YWJsZS9zdHlsZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy10YWJsZS9kYXRhLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvbHVjZW5lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvZGVlcy10YWJsZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZvcm0vZGVlcy1mb3JtL2RlZXMtZm9ybS5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0vZGVlcy1mb3JtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uL2RlZXMtYnV0dG9uLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1idXR0b24vZGVlcy1idXR0b24vZGVlcy1idXR0b24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1idXR0b24vZGVlcy1idXR0b24tZXhpdC9kZWVzLWJ1dHRvbi1leGl0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uLWdyb3VwL2RlZXMtYnV0dG9uLWdyb3VwLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1idXR0b24vZGVlcy1idXR0b24tZ3JvdXAvZGVlcy1idXR0b24tZ3JvdXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWNoYXJ0L2RlZXMtY2hhcnQtYXJlYS9zdHlsZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvdGVtcGxhdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvY29tcG9uZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1sb2cvZGVlcy1jaGFydC1sb2cuZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWNoYXJ0L2RlZXMtY2hhcnQtbG9nL2RlZXMtY2hhcnQtbG9nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy1kYXRhdmlldy1jb2RlYm94L2RlZXMtZGF0YXZpZXctY29kZWJveC5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy1kYXRhdmlldy1jb2RlYm94L2RlZXMtZGF0YXZpZXctY29kZWJveC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0LmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdC9kZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1maWxldHJlZS9kZWVzLXdvcmtzcGFjZS1maWxldHJlZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyL2RlZXMtd29ya3NwYWNlLWJvdHRvbWJhci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS90eXBlc2NyaXB0LWludGVsbGlzZW5zZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1kaWZmLWVkaXRvci9kZWVzLXdvcmtzcGFjZS1kaWZmLWVkaXRvci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bi9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1saXN0L2RlZXMtaW5wdXQtbGlzdC5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1saXN0L2RlZXMtaW5wdXQtbGlzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvc3R5bGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yaWNodGV4dC90ZW1wbGF0ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvY29tcG9uZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10YWdzL2RlZXMtaW5wdXQtdGFncy5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10YWdzL2RlZXMtaW5wdXQtdGFncy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuc2hvcnRjdXRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtc2xhc2gtbWVudS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLnNlbGVjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmZvcm1hdHRpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvZGVlcy1mb3JtYXR0aW5nLW1lbnUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5pbnRlcmZhY2VzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuY29uc3RhbnRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuc3R5bGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuY29udmVydGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrb3BlcmF0aW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvYmxvY2suYmFzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvYmxvY2sucmVnaXN0cnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvcGFyYWdyYXBoLmJsb2NrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy90ZXh0L2hlYWRpbmcuYmxvY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvcXVvdGUuYmxvY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvY29kZS5ibG9jay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvdGV4dC9saXN0LmJsb2NrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9tZWRpYS9pbWFnZS5ibG9jay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvbWVkaWEveW91dHViZS5ibG9jay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvbWVkaWEvYXR0YWNobWVudC5ibG9jay50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvY29udGVudC9kaXZpZGVyLmJsb2NrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9jb250ZW50L21hcmtkb3duLmJsb2NrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9jb250ZW50L2h0bWwuYmxvY2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5ibG9ja3JlZ2lzdHJhdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLm1vZGFsbWFuYWdlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmlucHV0aGFuZGxlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmtleWJvYXJkaGFuZGxlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmRyYWdkcm9waGFuZGxlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmhpc3RvcnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvZGVlcy13eXNpd3lnLWJsb2NrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtaW5wdXQtd3lzaXd5Zy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L3Byb2ZpbGVwaWN0dXJlL3Byb2ZpbGVwaWN0dXJlLmNyb3BwZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9wcm9maWxlcGljdHVyZS9wcm9maWxlcGljdHVyZS5tb2RhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L3Byb2ZpbGVwaWN0dXJlL2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUuZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L3Byb2ZpbGVwaWN0dXJlL2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYvY29tcG9uZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcGRmL2RlZXMtcGRmLXNoYXJlZC9QZGZNYW5hZ2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcGRmL2RlZXMtcGRmLXNoYXJlZC9DYW52YXNQb29sLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcGRmL2RlZXMtcGRmLXNoYXJlZC91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi1wcmV2aWV3L3N0eWxlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi1wcmV2aWV3L2RlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtcHJldmlldy9jb21wb25lbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtdmlld2VyL3N0eWxlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi12aWV3ZXIvZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi12aWV3ZXIvY29tcG9uZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtc3RhdHNncmlkL2RlZXMtc3RhdHNncmlkLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1zdGF0c2dyaWQvZGVlcy1zdGF0c2dyaWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9kZWVzLXNpbXBsZS1hcHBkYXNoLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9kZWVzLXNpbXBsZS1hcHBkYXNoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2ltcGxlLWxvZ2luL2RlZXMtc2ltcGxlLWxvZ2luLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtbG9naW4vZGVlcy1zaW1wbGUtbG9naW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1hY3Rpb25iYXIvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1iYWRnZS9kZWVzLWJhZGdlLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1iYWRnZS9kZWVzLWJhZGdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtY2hpcHMvZGVlcy1jaGlwcy5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtY2hpcHMvZGVlcy1jaGlwcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvZGVlcy1kYXNoYm9hcmRncmlkLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL3N0eWxlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvbGF5b3V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtZGFzaGJvYXJkZ3JpZC9pbnRlcmFjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvY29udGV4dG1lbnUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL2RlZXMtZGFzaGJvYXJkZ3JpZC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLWhlYWRpbmcvZGVlcy1oZWFkaW5nLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLWhpbnQvZGVlcy1oaW50LmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1oaW50L2RlZXMtaGludC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLWljb24vaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1tb2JpbGVuYXZpZ2F0aW9uL2RlZXMtbW9iaWxlbmF2aWdhdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLXBhZ2luYXRpb24vZGVlcy1wYWdpbmF0aW9uLmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1wYWdpbmF0aW9uL2RlZXMtcGFnaW5hdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLXByb2dyZXNzYmFyL2RlZXMtcHJvZ3Jlc3NiYXIuZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLXByb2dyZXNzYmFyL2RlZXMtcHJvZ3Jlc3NiYXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1zZWFyY2hiYXIvZGVlcy1zZWFyY2hiYXIuZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLXNlYXJjaGJhci9kZWVzLXNlYXJjaGJhci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwZWVjaGJ1YmJsZS9kZWVzLXNwZWVjaGJ1YmJsZS5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtc3BlZWNoYnViYmxlL2RlZXMtc3BlZWNoYnViYmxlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtc3Bpbm5lci9kZWVzLXNwaW5uZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy1zdGVwcGVyL2RlZXMtc3RlcHBlci5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtc3RlcHBlci9kZWVzLXN0ZXBwZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy10b2FzdC9kZWVzLXRvYXN0LmRlbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjMyLjBfQHRpcHRhcCtwbUAyLjI3LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy90c193ZWIvZWxlbWVudHMvZGVlcy10b2FzdC9kZWVzLXRvYXN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtdXBkYXRlci9kZWVzLXVwZGF0ZXIuZGVtby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9kZWVzLXVwZGF0ZXIvZGVlcy11cGRhdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGhlbWUvZGVlcy10aGVtZS5kZW1vLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zMi4wX0B0aXB0YXArcG1AMi4yNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGhlbWUvZGVlcy10aGVtZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzIuMF9AdGlwdGFwK3BtQDIuMjcuMS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL3RzX3dlYi9lbGVtZW50cy9pbmRleC50cyIsICIuLi90c193ZWIvZWxlbWVudHMvb3BlbmNkbi1tYWlucGFnZS50cyIsICIuLi90c193ZWIvZWxlbWVudHMvb3BlbmNkbi1wZWVrcGFnZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQ1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZVxuICovXG5cbmNvbnN0IE5PREVfTU9ERSA9IGZhbHNlO1xuXG4vLyBBbGxvd3MgbWluaWZpZXJzIHRvIHJlbmFtZSByZWZlcmVuY2VzIHRvIGdsb2JhbFRoaXNcbmNvbnN0IGdsb2JhbCA9IGdsb2JhbFRoaXM7XG5cbi8qKlxuICogV2hldGhlciB0aGUgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIGBhZG9wdGVkU3R5bGVTaGVldHNgLlxuICovXG5leHBvcnQgY29uc3Qgc3VwcG9ydHNBZG9wdGluZ1N0eWxlU2hlZXRzOiBib29sZWFuID1cbiAgZ2xvYmFsLlNoYWRvd1Jvb3QgJiZcbiAgKGdsb2JhbC5TaGFkeUNTUyA9PT0gdW5kZWZpbmVkIHx8IGdsb2JhbC5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpICYmXG4gICdhZG9wdGVkU3R5bGVTaGVldHMnIGluIERvY3VtZW50LnByb3RvdHlwZSAmJlxuICAncmVwbGFjZScgaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbi8qKlxuICogQSBDU1NSZXN1bHQgb3IgbmF0aXZlIENTU1N0eWxlU2hlZXQuXG4gKlxuICogSW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGNvbnN0cnVjdGlibGUgQ1NTIHN0eWxlIHNoZWV0cywgQ1NTU3R5bGVTaGVldFxuICogb2JqZWN0IGNhbiBiZSB1c2VkIGZvciBzdHlsaW5nIGFsb25nIHNpZGUgQ1NTUmVzdWx0IGZyb20gdGhlIGBjc3NgXG4gKiB0ZW1wbGF0ZSB0YWcuXG4gKi9cbmV4cG9ydCB0eXBlIENTU1Jlc3VsdE9yTmF0aXZlID0gQ1NTUmVzdWx0IHwgQ1NTU3R5bGVTaGVldDtcblxuZXhwb3J0IHR5cGUgQ1NTUmVzdWx0QXJyYXkgPSBBcnJheTxDU1NSZXN1bHRPck5hdGl2ZSB8IENTU1Jlc3VsdEFycmF5PjtcblxuLyoqXG4gKiBBIHNpbmdsZSBDU1NSZXN1bHQsIENTU1N0eWxlU2hlZXQsIG9yIGFuIGFycmF5IG9yIG5lc3RlZCBhcnJheXMgb2YgdGhvc2UuXG4gKi9cbmV4cG9ydCB0eXBlIENTU1Jlc3VsdEdyb3VwID0gQ1NTUmVzdWx0T3JOYXRpdmUgfCBDU1NSZXN1bHRBcnJheTtcblxuY29uc3QgY29uc3RydWN0aW9uVG9rZW4gPSBTeW1ib2woKTtcblxuY29uc3QgY3NzVGFnQ2FjaGUgPSBuZXcgV2Vha01hcDxUZW1wbGF0ZVN0cmluZ3NBcnJheSwgQ1NTU3R5bGVTaGVldD4oKTtcblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3IgYSBzdHJpbmcgb2YgQ1NTIHRleHQsIHRoYXQgbWF5IGJlIHVzZWQgdG8gY3JlYXRlIGEgQ1NTU3R5bGVTaGVldC5cbiAqXG4gKiBDU1NSZXN1bHQgaXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgY3NzYC10YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbHMgYW5kXG4gKiBgdW5zYWZlQ1NTKClgLiBJbiBvcmRlciB0byBlbnN1cmUgdGhhdCBDU1NSZXN1bHRzIGFyZSBvbmx5IGNyZWF0ZWQgdmlhIHRoZVxuICogYGNzc2AgdGFnIGFuZCBgdW5zYWZlQ1NTKClgLCBDU1NSZXN1bHQgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5LlxuICovXG5leHBvcnQgY2xhc3MgQ1NTUmVzdWx0IHtcbiAgLy8gVGhpcyBwcm9wZXJ0eSBuZWVkcyB0byByZW1haW4gdW5taW5pZmllZC5cbiAgWydfJGNzc1Jlc3VsdCQnXSA9IHRydWU7XG4gIHJlYWRvbmx5IGNzc1RleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfc3R5bGVTaGVldD86IENTU1N0eWxlU2hlZXQ7XG4gIHByaXZhdGUgX3N0cmluZ3M6IFRlbXBsYXRlU3RyaW5nc0FycmF5IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgY3NzVGV4dDogc3RyaW5nLFxuICAgIHN0cmluZ3M6IFRlbXBsYXRlU3RyaW5nc0FycmF5IHwgdW5kZWZpbmVkLFxuICAgIHNhZmVUb2tlbjogc3ltYm9sXG4gICkge1xuICAgIGlmIChzYWZlVG9rZW4gIT09IGNvbnN0cnVjdGlvblRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDU1NSZXN1bHQgaXMgbm90IGNvbnN0cnVjdGFibGUuIFVzZSBgdW5zYWZlQ1NTYCBvciBgY3NzYCBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY3NzVGV4dCA9IGNzc1RleHQ7XG4gICAgdGhpcy5fc3RyaW5ncyA9IHN0cmluZ3M7XG4gIH1cblxuICAvLyBUaGlzIGlzIGEgZ2V0dGVyIHNvIHRoYXQgaXQncyBsYXp5LiBJbiBwcmFjdGljZSwgdGhpcyBtZWFucyBzdHlsZXNoZWV0c1xuICAvLyBhcmUgbm90IGNyZWF0ZWQgdW50aWwgdGhlIGZpcnN0IGVsZW1lbnQgaW5zdGFuY2UgaXMgbWFkZS5cbiAgZ2V0IHN0eWxlU2hlZXQoKTogQ1NTU3R5bGVTaGVldCB8IHVuZGVmaW5lZCB7XG4gICAgLy8gSWYgYHN1cHBvcnRzQWRvcHRpbmdTdHlsZVNoZWV0c2AgaXMgdHJ1ZSB0aGVuIHdlIGFzc3VtZSBDU1NTdHlsZVNoZWV0IGlzXG4gICAgLy8gY29uc3RydWN0YWJsZS5cbiAgICBsZXQgc3R5bGVTaGVldCA9IHRoaXMuX3N0eWxlU2hlZXQ7XG4gICAgY29uc3Qgc3RyaW5ncyA9IHRoaXMuX3N0cmluZ3M7XG4gICAgaWYgKHN1cHBvcnRzQWRvcHRpbmdTdHlsZVNoZWV0cyAmJiBzdHlsZVNoZWV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNhY2hlYWJsZSA9IHN0cmluZ3MgIT09IHVuZGVmaW5lZCAmJiBzdHJpbmdzLmxlbmd0aCA9PT0gMTtcbiAgICAgIGlmIChjYWNoZWFibGUpIHtcbiAgICAgICAgc3R5bGVTaGVldCA9IGNzc1RhZ0NhY2hlLmdldChzdHJpbmdzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZVNoZWV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKHRoaXMuX3N0eWxlU2hlZXQgPSBzdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKSkucmVwbGFjZVN5bmMoXG4gICAgICAgICAgdGhpcy5jc3NUZXh0XG4gICAgICAgICk7XG4gICAgICAgIGlmIChjYWNoZWFibGUpIHtcbiAgICAgICAgICBjc3NUYWdDYWNoZS5zZXQoc3RyaW5ncywgc3R5bGVTaGVldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlU2hlZXQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNzc1RleHQ7XG4gIH1cbn1cblxudHlwZSBDb25zdHJ1Y3RhYmxlQ1NTUmVzdWx0ID0gQ1NTUmVzdWx0ICYge1xuICBuZXcgKFxuICAgIGNzc1RleHQ6IHN0cmluZyxcbiAgICBzdHJpbmdzOiBUZW1wbGF0ZVN0cmluZ3NBcnJheSB8IHVuZGVmaW5lZCxcbiAgICBzYWZlVG9rZW46IHN5bWJvbFxuICApOiBDU1NSZXN1bHQ7XG59O1xuXG5jb25zdCB0ZXh0RnJvbUNTU1Jlc3VsdCA9ICh2YWx1ZTogQ1NTUmVzdWx0R3JvdXAgfCBudW1iZXIpID0+IHtcbiAgLy8gVGhpcyBwcm9wZXJ0eSBuZWVkcyB0byByZW1haW4gdW5taW5pZmllZC5cbiAgaWYgKCh2YWx1ZSBhcyBDU1NSZXN1bHQpWydfJGNzc1Jlc3VsdCQnXSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiAodmFsdWUgYXMgQ1NTUmVzdWx0KS5jc3NUZXh0O1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFZhbHVlIHBhc3NlZCB0byAnY3NzJyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24gcmVzdWx0OiBgICtcbiAgICAgICAgYCR7dmFsdWV9LiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgYCArXG4gICAgICAgIGB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS5gXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBXcmFwIGEgdmFsdWUgZm9yIGludGVycG9sYXRpb24gaW4gYSB7QGxpbmtjb2RlIGNzc30gdGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWwuXG4gKlxuICogVGhpcyBpcyB1bnNhZmUgYmVjYXVzZSB1bnRydXN0ZWQgQ1NTIHRleHQgY2FuIGJlIHVzZWQgdG8gcGhvbmUgaG9tZVxuICogb3IgZXhmaWx0cmF0ZSBkYXRhIHRvIGFuIGF0dGFja2VyIGNvbnRyb2xsZWQgc2l0ZS4gVGFrZSBjYXJlIHRvIG9ubHkgdXNlXG4gKiB0aGlzIHdpdGggdHJ1c3RlZCBpbnB1dC5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuc2FmZUNTUyA9ICh2YWx1ZTogdW5rbm93bikgPT5cbiAgbmV3IChDU1NSZXN1bHQgYXMgQ29uc3RydWN0YWJsZUNTU1Jlc3VsdCkoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogU3RyaW5nKHZhbHVlKSxcbiAgICB1bmRlZmluZWQsXG4gICAgY29uc3RydWN0aW9uVG9rZW5cbiAgKTtcblxuLyoqXG4gKiBBIHRlbXBsYXRlIGxpdGVyYWwgdGFnIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggTGl0RWxlbWVudCdzXG4gKiB7QGxpbmtjb2RlIExpdEVsZW1lbnQuc3R5bGVzfSBwcm9wZXJ0eSB0byBzZXQgZWxlbWVudCBzdHlsZXMuXG4gKlxuICogRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkgbGl0ZXJhbCBzdHJpbmcgdmFsdWVzIGFuZCBudW1iZXIgbWF5IGJlIHVzZWQgaW5cbiAqIGVtYmVkZGVkIGV4cHJlc3Npb25zLiBUbyBpbmNvcnBvcmF0ZSBub24tbGl0ZXJhbCB2YWx1ZXMge0BsaW5rY29kZSB1bnNhZmVDU1N9XG4gKiBtYXkgYmUgdXNlZCBpbnNpZGUgYW4gZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGNzcyA9IChcbiAgc3RyaW5nczogVGVtcGxhdGVTdHJpbmdzQXJyYXksXG4gIC4uLnZhbHVlczogKENTU1Jlc3VsdEdyb3VwIHwgbnVtYmVyKVtdXG4pOiBDU1NSZXN1bHQgPT4ge1xuICBjb25zdCBjc3NUZXh0ID1cbiAgICBzdHJpbmdzLmxlbmd0aCA9PT0gMVxuICAgICAgPyBzdHJpbmdzWzBdXG4gICAgICA6IHZhbHVlcy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgdiwgaWR4KSA9PiBhY2MgKyB0ZXh0RnJvbUNTU1Jlc3VsdCh2KSArIHN0cmluZ3NbaWR4ICsgMV0sXG4gICAgICAgICAgc3RyaW5nc1swXVxuICAgICAgICApO1xuICByZXR1cm4gbmV3IChDU1NSZXN1bHQgYXMgQ29uc3RydWN0YWJsZUNTU1Jlc3VsdCkoXG4gICAgY3NzVGV4dCxcbiAgICBzdHJpbmdzLFxuICAgIGNvbnN0cnVjdGlvblRva2VuXG4gICk7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGdpdmVuIHN0eWxlcyB0byBhIGBzaGFkb3dSb290YC4gV2hlbiBTaGFkb3cgRE9NIGlzXG4gKiBhdmFpbGFibGUgYnV0IGBhZG9wdGVkU3R5bGVTaGVldHNgIGlzIG5vdCwgc3R5bGVzIGFyZSBhcHBlbmRlZCB0byB0aGVcbiAqIGBzaGFkb3dSb290YCB0byBbbWltaWMgdGhlIG5hdGl2ZSBmZWF0dXJlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU2hhZG93Um9vdC9hZG9wdGVkU3R5bGVTaGVldHMpLlxuICogTm90ZSwgd2hlbiBzaGltbWluZyBpcyB1c2VkLCBhbnkgc3R5bGVzIHRoYXQgYXJlIHN1YnNlcXVlbnRseSBwbGFjZWQgaW50b1xuICogdGhlIHNoYWRvd1Jvb3Qgc2hvdWxkIGJlIHBsYWNlZCAqYmVmb3JlKiBhbnkgc2hpbW1lZCBhZG9wdGVkIHN0eWxlcy4gVGhpc1xuICogd2lsbCBtYXRjaCBzcGVjIGJlaGF2aW9yIHRoYXQgZ2l2ZXMgYWRvcHRlZCBzaGVldHMgcHJlY2VkZW5jZSBvdmVyIHN0eWxlcyBpblxuICogc2hhZG93Um9vdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFkb3B0U3R5bGVzID0gKFxuICByZW5kZXJSb290OiBTaGFkb3dSb290LFxuICBzdHlsZXM6IEFycmF5PENTU1Jlc3VsdE9yTmF0aXZlPlxuKSA9PiB7XG4gIGlmIChzdXBwb3J0c0Fkb3B0aW5nU3R5bGVTaGVldHMpIHtcbiAgICAocmVuZGVyUm9vdCBhcyBTaGFkb3dSb290KS5hZG9wdGVkU3R5bGVTaGVldHMgPSBzdHlsZXMubWFwKChzKSA9PlxuICAgICAgcyBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQgPyBzIDogcy5zdHlsZVNoZWV0IVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBzIG9mIHN0eWxlcykge1xuICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIGNvbnN0IG5vbmNlID0gKGdsb2JhbCBhcyBhbnkpWydsaXROb25jZSddO1xuICAgICAgaWYgKG5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3R5bGUuc2V0QXR0cmlidXRlKCdub25jZScsIG5vbmNlKTtcbiAgICAgIH1cbiAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gKHMgYXMgQ1NTUmVzdWx0KS5jc3NUZXh0O1xuICAgICAgcmVuZGVyUm9vdC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBjc3NSZXN1bHRGcm9tU3R5bGVTaGVldCA9IChzaGVldDogQ1NTU3R5bGVTaGVldCkgPT4ge1xuICBsZXQgY3NzVGV4dCA9ICcnO1xuICBmb3IgKGNvbnN0IHJ1bGUgb2Ygc2hlZXQuY3NzUnVsZXMpIHtcbiAgICBjc3NUZXh0ICs9IHJ1bGUuY3NzVGV4dDtcbiAgfVxuICByZXR1cm4gdW5zYWZlQ1NTKGNzc1RleHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbXBhdGlibGVTdHlsZSA9XG4gIHN1cHBvcnRzQWRvcHRpbmdTdHlsZVNoZWV0cyB8fFxuICAoTk9ERV9NT0RFICYmIGdsb2JhbC5DU1NTdHlsZVNoZWV0ID09PSB1bmRlZmluZWQpXG4gICAgPyAoczogQ1NTUmVzdWx0T3JOYXRpdmUpID0+IHNcbiAgICA6IChzOiBDU1NSZXN1bHRPck5hdGl2ZSkgPT5cbiAgICAgICAgcyBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQgPyBjc3NSZXN1bHRGcm9tU3R5bGVTaGVldChzKSA6IHM7XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQ1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZVxuICovXG5cbi8qKlxuICogVXNlIHRoaXMgbW9kdWxlIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBiYXNlIGNsYXNzIGV4dGVuZGluZ1xuICoge0BsaW5rIFJlYWN0aXZlRWxlbWVudH0uXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuXG5pbXBvcnQge1xuICBnZXRDb21wYXRpYmxlU3R5bGUsXG4gIGFkb3B0U3R5bGVzLFxuICBDU1NSZXN1bHRHcm91cCxcbiAgQ1NTUmVzdWx0T3JOYXRpdmUsXG59IGZyb20gJy4vY3NzLXRhZy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFJlYWN0aXZlQ29udHJvbGxlcixcbiAgUmVhY3RpdmVDb250cm9sbGVySG9zdCxcbn0gZnJvbSAnLi9yZWFjdGl2ZS1jb250cm9sbGVyLmpzJztcblxuLy8gSW4gdGhlIE5vZGUgYnVpbGQsIHRoaXMgaW1wb3J0IHdpbGwgYmUgaW5qZWN0ZWQgYnkgUm9sbHVwOlxuLy8gaW1wb3J0IHtIVE1MRWxlbWVudCwgY3VzdG9tRWxlbWVudHN9IGZyb20gJ0BsaXQtbGFicy9zc3ItZG9tLXNoaW0nO1xuXG5leHBvcnQgKiBmcm9tICcuL2Nzcy10YWcuanMnO1xuZXhwb3J0IHR5cGUge1xuICBSZWFjdGl2ZUNvbnRyb2xsZXIsXG4gIFJlYWN0aXZlQ29udHJvbGxlckhvc3QsXG59IGZyb20gJy4vcmVhY3RpdmUtY29udHJvbGxlci5qcyc7XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgYHJlYWRvbmx5YCBtb2RpZmllciBmcm9tIHByb3BlcnRpZXMgaW4gdGhlIHVuaW9uIEsuXG4gKlxuICogVGhpcyBpcyBhIHNhZmVyIHdheSB0byBjYXN0IGEgdmFsdWUgdG8gYSB0eXBlIHdpdGggYSBtdXRhYmxlIHZlcnNpb24gb2YgYVxuICogcmVhZG9ubHkgZmllbGQsIHRoYW4gY2FzdGluZyB0byBhbiBpbnRlcmZhY2Ugd2l0aCB0aGUgZmllbGQgcmUtZGVjbGFyZWRcbiAqIGJlY2F1c2UgaXQgcHJlc2VydmVzIHRoZSB0eXBlIG9mIGFsbCB0aGUgZmllbGRzIGFuZCB3YXJucyBvbiB0eXBvcy5cbiAqL1xudHlwZSBNdXRhYmxlPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IE9taXQ8VCwgSz4gJiB7XG4gIC1yZWFkb25seSBbUCBpbiBrZXlvZiBQaWNrPFQsIEs+XTogUCBleHRlbmRzIEsgPyBUW1BdIDogbmV2ZXI7XG59O1xuXG4vLyBUT0RPIChqdXN0aW5mYWduYW5pKTogQWRkIGBoYXNPd25gIGhlcmUgd2hlbiB3ZSBzaGlwIEVTMjAyMlxuY29uc3Qge1xuICBpcyxcbiAgZGVmaW5lUHJvcGVydHksXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzLFxuICBnZXRQcm90b3R5cGVPZixcbn0gPSBPYmplY3Q7XG5cbmNvbnN0IE5PREVfTU9ERSA9IGZhbHNlO1xuXG4vLyBMZXRzIGEgbWluaWZpZXIgcmVwbGFjZSBnbG9iYWxUaGlzIHJlZmVyZW5jZXMgd2l0aCBhIG1pbmlmaWVkIG5hbWVcbmNvbnN0IGdsb2JhbCA9IGdsb2JhbFRoaXM7XG5cbmlmIChOT0RFX01PREUpIHtcbiAgZ2xvYmFsLmN1c3RvbUVsZW1lbnRzID8/PSBjdXN0b21FbGVtZW50cztcbn1cblxuY29uc3QgREVWX01PREUgPSB0cnVlO1xuXG5sZXQgaXNzdWVXYXJuaW5nOiAoY29kZTogc3RyaW5nLCB3YXJuaW5nOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmNvbnN0IHRydXN0ZWRUeXBlcyA9IChnbG9iYWwgYXMgdW5rbm93biBhcyB7dHJ1c3RlZFR5cGVzPzoge2VtcHR5U2NyaXB0OiAnJ319KVxuICAudHJ1c3RlZFR5cGVzO1xuXG4vLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9jcmJ1Zy5jb20vOTkzMjY4XG4vLyBDdXJyZW50bHksIGFueSBhdHRyaWJ1dGUgc3RhcnRpbmcgd2l0aCBcIm9uXCIgaXMgY29uc2lkZXJlZCB0byBiZSBhXG4vLyBUcnVzdGVkU2NyaXB0IHNvdXJjZS4gU3VjaCBib29sZWFuIGF0dHJpYnV0ZXMgbXVzdCBiZSBzZXQgdG8gdGhlIGVxdWl2YWxlbnRcbi8vIHRydXN0ZWQgZW1wdHlTY3JpcHQgdmFsdWUuXG5jb25zdCBlbXB0eVN0cmluZ0ZvckJvb2xlYW5BdHRyaWJ1dGUgPSB0cnVzdGVkVHlwZXNcbiAgPyAodHJ1c3RlZFR5cGVzLmVtcHR5U2NyaXB0IGFzIHVua25vd24gYXMgJycpXG4gIDogJyc7XG5cbmNvbnN0IHBvbHlmaWxsU3VwcG9ydCA9IERFVl9NT0RFXG4gID8gZ2xvYmFsLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydERldk1vZGVcbiAgOiBnbG9iYWwucmVhY3RpdmVFbGVtZW50UG9seWZpbGxTdXBwb3J0O1xuXG5pZiAoREVWX01PREUpIHtcbiAgLy8gRW5zdXJlIHdhcm5pbmdzIGFyZSBpc3N1ZWQgb25seSAxeCwgZXZlbiBpZiBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBMaXRcbiAgLy8gYXJlIGxvYWRlZC5cbiAgZ2xvYmFsLmxpdElzc3VlZFdhcm5pbmdzID8/PSBuZXcgU2V0KCk7XG5cbiAgLyoqXG4gICAqIElzc3VlIGEgd2FybmluZyBpZiB3ZSBoYXZlbid0IGFscmVhZHksIGJhc2VkIGVpdGhlciBvbiBgY29kZWAgb3IgYHdhcm5pbmdgLlxuICAgKiBXYXJuaW5ncyBhcmUgZGlzYWJsZWQgYXV0b21hdGljYWxseSBvbmx5IGJ5IGB3YXJuaW5nYDsgZGlzYWJsaW5nIHZpYSBgY29kZWBcbiAgICogY2FuIGJlIGRvbmUgYnkgdXNlcnMuXG4gICAqL1xuICBpc3N1ZVdhcm5pbmcgPSAoY29kZTogc3RyaW5nLCB3YXJuaW5nOiBzdHJpbmcpID0+IHtcbiAgICB3YXJuaW5nICs9IGAgU2VlIGh0dHBzOi8vbGl0LmRldi9tc2cvJHtjb2RlfSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gO1xuICAgIGlmIChcbiAgICAgICFnbG9iYWwubGl0SXNzdWVkV2FybmluZ3MhLmhhcyh3YXJuaW5nKSAmJlxuICAgICAgIWdsb2JhbC5saXRJc3N1ZWRXYXJuaW5ncyEuaGFzKGNvZGUpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgICBnbG9iYWwubGl0SXNzdWVkV2FybmluZ3MhLmFkZCh3YXJuaW5nKTtcbiAgICB9XG4gIH07XG5cbiAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgIGlzc3VlV2FybmluZyhcbiAgICAgICdkZXYtbW9kZScsXG4gICAgICBgTGl0IGlzIGluIGRldiBtb2RlLiBOb3QgcmVjb21tZW5kZWQgZm9yIHByb2R1Y3Rpb24hYFxuICAgICk7XG5cbiAgICAvLyBJc3N1ZSBwb2x5ZmlsbCBzdXBwb3J0IHdhcm5pbmcuXG4gICAgaWYgKGdsb2JhbC5TaGFkeURPTT8uaW5Vc2UgJiYgcG9seWZpbGxTdXBwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlzc3VlV2FybmluZyhcbiAgICAgICAgJ3BvbHlmaWxsLXN1cHBvcnQtbWlzc2luZycsXG4gICAgICAgIGBTaGFkb3cgRE9NIGlzIGJlaW5nIHBvbHlmaWxsZWQgdmlhIFxcYFNoYWR5RE9NXFxgIGJ1dCBgICtcbiAgICAgICAgICBgdGhlIFxcYHBvbHlmaWxsLXN1cHBvcnRcXGAgbW9kdWxlIGhhcyBub3QgYmVlbiBsb2FkZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIHR5cGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHVuc3RhYmxlIGRlYnVnIEFQSS5cbiAqXG4gKiBFdmVyeXRoaW5nIGluIHRoaXMgQVBJIGlzIG5vdCBzdGFibGUgYW5kIG1heSBjaGFuZ2Ugb3IgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLFxuICogZXZlbiBvbiBwYXRjaCByZWxlYXNlcy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbmV4cG9ydCBuYW1lc3BhY2UgUmVhY3RpdmVVbnN0YWJsZSB7XG4gIC8qKlxuICAgKiBXaGVuIExpdCBpcyBydW5uaW5nIGluIGRldiBtb2RlIGFuZCBgd2luZG93LmVtaXRMaXREZWJ1Z0xvZ0V2ZW50c2AgaXMgdHJ1ZSxcbiAgICogd2Ugd2lsbCBlbWl0ICdsaXQtZGVidWcnIGV2ZW50cyB0byB3aW5kb3csIHdpdGggbGl2ZSBkZXRhaWxzIGFib3V0IHRoZSB1cGRhdGUgYW5kIHJlbmRlclxuICAgKiBsaWZlY3ljbGUuIFRoZXNlIGNhbiBiZSB1c2VmdWwgZm9yIHdyaXRpbmcgZGVidWcgdG9vbGluZyBhbmQgdmlzdWFsaXphdGlvbnMuXG4gICAqXG4gICAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHJ1bm5pbmcgd2l0aCB3aW5kb3cuZW1pdExpdERlYnVnTG9nRXZlbnRzIGhhcyBwZXJmb3JtYW5jZSBvdmVyaGVhZCxcbiAgICogbWFraW5nIGNlcnRhaW4gb3BlcmF0aW9ucyB0aGF0IGFyZSBub3JtYWxseSB2ZXJ5IGNoZWFwIChsaWtlIGEgbm8tb3AgcmVuZGVyKSBtdWNoIHNsb3dlcixcbiAgICogYmVjYXVzZSB3ZSBtdXN0IGNvcHkgZGF0YSBhbmQgZGlzcGF0Y2ggZXZlbnRzLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgZXhwb3J0IG5hbWVzcGFjZSBEZWJ1Z0xvZyB7XG4gICAgZXhwb3J0IHR5cGUgRW50cnkgPSBVcGRhdGU7XG4gICAgZXhwb3J0IGludGVyZmFjZSBVcGRhdGUge1xuICAgICAga2luZDogJ3VwZGF0ZSc7XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBEZWJ1Z0xvZ2dpbmdXaW5kb3cge1xuICAvLyBFdmVuIGluIGRldiBtb2RlLCB3ZSBnZW5lcmFsbHkgZG9uJ3Qgd2FudCB0byBlbWl0IHRoZXNlIGV2ZW50cywgYXMgdGhhdCdzXG4gIC8vIGFub3RoZXIgbGV2ZWwgb2YgY29zdCwgc28gb25seSBlbWl0IHRoZW0gd2hlbiBERVZfTU9ERSBpcyB0cnVlIF9hbmRfIHdoZW5cbiAgLy8gd2luZG93LmVtaXRMaXREZWJ1Z0V2ZW50cyBpcyB0cnVlLlxuICBlbWl0TGl0RGVidWdMb2dFdmVudHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFVzZWZ1bCBmb3IgdmlzdWFsaXppbmcgYW5kIGxvZ2dpbmcgaW5zaWdodHMgaW50byB3aGF0IHRoZSBMaXQgdGVtcGxhdGUgc3lzdGVtIGlzIGRvaW5nLlxuICpcbiAqIENvbXBpbGVkIG91dCBvZiBwcm9kIG1vZGUgYnVpbGRzLlxuICovXG5jb25zdCBkZWJ1Z0xvZ0V2ZW50ID0gREVWX01PREVcbiAgPyAoZXZlbnQ6IFJlYWN0aXZlVW5zdGFibGUuRGVidWdMb2cuRW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHNob3VsZEVtaXQgPSAoZ2xvYmFsIGFzIHVua25vd24gYXMgRGVidWdMb2dnaW5nV2luZG93KVxuICAgICAgICAuZW1pdExpdERlYnVnTG9nRXZlbnRzO1xuICAgICAgaWYgKCFzaG91bGRFbWl0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQ8UmVhY3RpdmVVbnN0YWJsZS5EZWJ1Z0xvZy5FbnRyeT4oJ2xpdC1kZWJ1ZycsIHtcbiAgICAgICAgICBkZXRhaWw6IGV2ZW50LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIDogdW5kZWZpbmVkO1xuXG4vKlxuICogV2hlbiB1c2luZyBDbG9zdXJlIENvbXBpbGVyLCBKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KHByb3BlcnR5LCBvYmplY3QpIGlzXG4gKiByZXBsYWNlZCBhdCBjb21waWxlIHRpbWUgYnkgdGhlIG11bmdlZCBuYW1lIGZvciBvYmplY3RbcHJvcGVydHldLiBXZSBjYW5ub3RcbiAqIGFsaWFzIHRoaXMgZnVuY3Rpb24sIHNvIHdlIGhhdmUgdG8gdXNlIGEgc21hbGwgc2hpbSB0aGF0IGhhcyB0aGUgc2FtZVxuICogYmVoYXZpb3Igd2hlbiBub3QgY29tcGlsaW5nLlxuICovXG4vKkBfX0lOTElORV9fKi9cbmNvbnN0IEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkgPSA8UCBleHRlbmRzIFByb3BlcnR5S2V5PihcbiAgcHJvcDogUCxcbiAgX29iajogdW5rbm93blxuKTogUCA9PiBwcm9wO1xuXG4vKipcbiAqIENvbnZlcnRzIHByb3BlcnR5IHZhbHVlcyB0byBhbmQgZnJvbSBhdHRyaWJ1dGUgdmFsdWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXhBdHRyaWJ1dGVDb252ZXJ0ZXI8VHlwZSA9IHVua25vd24sIFR5cGVIaW50ID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogQ2FsbGVkIHRvIGNvbnZlcnQgYW4gYXR0cmlidXRlIHZhbHVlIHRvIGEgcHJvcGVydHlcbiAgICogdmFsdWUuXG4gICAqL1xuICBmcm9tQXR0cmlidXRlPyh2YWx1ZTogc3RyaW5nIHwgbnVsbCwgdHlwZT86IFR5cGVIaW50KTogVHlwZTtcblxuICAvKipcbiAgICogQ2FsbGVkIHRvIGNvbnZlcnQgYSBwcm9wZXJ0eSB2YWx1ZSB0byBhbiBhdHRyaWJ1dGVcbiAgICogdmFsdWUuXG4gICAqXG4gICAqIEl0IHJldHVybnMgdW5rbm93biBpbnN0ZWFkIG9mIHN0cmluZywgdG8gYmUgY29tcGF0aWJsZSB3aXRoXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL3RydXN0ZWQtdHlwZXMgKGFuZCBzaW1pbGFyIGVmZm9ydHMpLlxuICAgKi9cbiAgdG9BdHRyaWJ1dGU/KHZhbHVlOiBUeXBlLCB0eXBlPzogVHlwZUhpbnQpOiB1bmtub3duO1xufVxuXG50eXBlIEF0dHJpYnV0ZUNvbnZlcnRlcjxUeXBlID0gdW5rbm93biwgVHlwZUhpbnQgPSB1bmtub3duPiA9XG4gIHwgQ29tcGxleEF0dHJpYnV0ZUNvbnZlcnRlcjxUeXBlPlxuICB8ICgodmFsdWU6IHN0cmluZyB8IG51bGwsIHR5cGU/OiBUeXBlSGludCkgPT4gVHlwZSk7XG5cbi8qKlxuICogRGVmaW5lcyBvcHRpb25zIGZvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5RGVjbGFyYXRpb248VHlwZSA9IHVua25vd24sIFR5cGVIaW50ID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogV2hlbiBzZXQgdG8gYHRydWVgLCBpbmRpY2F0ZXMgdGhlIHByb3BlcnR5IGlzIGludGVybmFsIHByaXZhdGUgc3RhdGUuIFRoZVxuICAgKiBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHNldCBieSB1c2Vycy4gV2hlbiB1c2luZyBUeXBlU2NyaXB0LCB0aGlzIHByb3BlcnR5XG4gICAqIHNob3VsZCBiZSBtYXJrZWQgYXMgYHByaXZhdGVgIG9yIGBwcm90ZWN0ZWRgLCBhbmQgaXQgaXMgYWxzbyBhIGNvbW1vblxuICAgKiBwcmFjdGljZSB0byB1c2UgYSBsZWFkaW5nIGBfYCBpbiB0aGUgbmFtZS4gVGhlIHByb3BlcnR5IGlzIG5vdCBhZGRlZCB0b1xuICAgKiBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGhvdyBhbmQgd2hldGhlciB0aGUgcHJvcGVydHkgYmVjb21lcyBhbiBvYnNlcnZlZCBhdHRyaWJ1dGUuXG4gICAqIElmIHRoZSB2YWx1ZSBpcyBgZmFsc2VgLCB0aGUgcHJvcGVydHkgaXMgbm90IGFkZGVkIHRvIGBvYnNlcnZlZEF0dHJpYnV0ZXNgLlxuICAgKiBJZiB0cnVlIG9yIGFic2VudCwgdGhlIGxvd2VyY2FzZWQgcHJvcGVydHkgbmFtZSBpcyBvYnNlcnZlZCAoZS5nLiBgZm9vQmFyYFxuICAgKiBiZWNvbWVzIGBmb29iYXJgKS4gSWYgYSBzdHJpbmcsIHRoZSBzdHJpbmcgdmFsdWUgaXMgb2JzZXJ2ZWQgKGUuZ1xuICAgKiBgYXR0cmlidXRlOiAnZm9vLWJhcidgKS5cbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZT86IGJvb2xlYW4gfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkuIFRoaXMgaXMgdXNlZCBvbmx5IGFzIGEgaGludCBmb3IgdGhlXG4gICAqIGBjb252ZXJ0ZXJgIHRvIGRldGVybWluZSBob3cgdG8gY29udmVydCB0aGUgYXR0cmlidXRlXG4gICAqIHRvL2Zyb20gYSBwcm9wZXJ0eS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBUeXBlSGludDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGhvdyB0byBjb252ZXJ0IHRoZSBhdHRyaWJ1dGUgdG8vZnJvbSBhIHByb3BlcnR5LiBJZiB0aGlzIHZhbHVlXG4gICAqIGlzIGEgZnVuY3Rpb24sIGl0IGlzIHVzZWQgdG8gY29udmVydCB0aGUgYXR0cmlidXRlIHZhbHVlIGEgdGhlIHByb3BlcnR5XG4gICAqIHZhbHVlLiBJZiBpdCdzIGFuIG9iamVjdCwgaXQgY2FuIGhhdmUga2V5cyBmb3IgYGZyb21BdHRyaWJ1dGVgIGFuZFxuICAgKiBgdG9BdHRyaWJ1dGVgLiBJZiBubyBgdG9BdHRyaWJ1dGVgIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGFuZFxuICAgKiBgcmVmbGVjdGAgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHNldCBkaXJlY3RseSB0byB0aGVcbiAgICogYXR0cmlidXRlLiBBIGRlZmF1bHQgYGNvbnZlcnRlcmAgaXMgdXNlZCBpZiBub25lIGlzIHByb3ZpZGVkOyBpdCBzdXBwb3J0c1xuICAgKiBgQm9vbGVhbmAsIGBTdHJpbmdgLCBgTnVtYmVyYCwgYE9iamVjdGAsIGFuZCBgQXJyYXlgLiBOb3RlLFxuICAgKiB3aGVuIGEgcHJvcGVydHkgY2hhbmdlcyBhbmQgdGhlIGNvbnZlcnRlciBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgYXR0cmlidXRlLFxuICAgKiB0aGUgcHJvcGVydHkgaXMgbmV2ZXIgdXBkYXRlZCBhZ2FpbiBhcyBhIHJlc3VsdCBvZiB0aGUgYXR0cmlidXRlIGNoYW5naW5nLFxuICAgKiBhbmQgdmljZSB2ZXJzYS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnZlcnRlcj86IEF0dHJpYnV0ZUNvbnZlcnRlcjxUeXBlLCBUeXBlSGludD47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgcHJvcGVydHkgc2hvdWxkIHJlZmxlY3QgdG8gYW4gYXR0cmlidXRlLlxuICAgKiBJZiBgdHJ1ZWAsIHdoZW4gdGhlIHByb3BlcnR5IGlzIHNldCwgdGhlIGF0dHJpYnV0ZSBpcyBzZXQgdXNpbmcgdGhlXG4gICAqIGF0dHJpYnV0ZSBuYW1lIGRldGVybWluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIGBhdHRyaWJ1dGVgXG4gICAqIHByb3BlcnR5IG9wdGlvbiBhbmQgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBjb252ZXJ0ZWQgdXNpbmcgdGhlIHJ1bGVzXG4gICAqIGZyb20gdGhlIGBjb252ZXJ0ZXJgIHByb3BlcnR5IG9wdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlZmxlY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgaW5kaWNhdGVzIGlmIGEgcHJvcGVydHkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgY2hhbmdlZCB3aGVuXG4gICAqIGl0IGlzIHNldC4gVGhlIGZ1bmN0aW9uIHNob3VsZCB0YWtlIHRoZSBgbmV3VmFsdWVgIGFuZCBgb2xkVmFsdWVgIGFuZFxuICAgKiByZXR1cm4gYHRydWVgIGlmIGFuIHVwZGF0ZSBzaG91bGQgYmUgcmVxdWVzdGVkLlxuICAgKi9cbiAgaGFzQ2hhbmdlZD8odmFsdWU6IFR5cGUsIG9sZFZhbHVlOiBUeXBlKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW4gYWNjZXNzb3Igd2lsbCBiZSBjcmVhdGVkIGZvciB0aGlzIHByb3BlcnR5LiBCeVxuICAgKiBkZWZhdWx0LCBhbiBhY2Nlc3NvciB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhpcyBwcm9wZXJ0eSB0aGF0IHJlcXVlc3RzIGFuXG4gICAqIHVwZGF0ZSB3aGVuIHNldC4gSWYgdGhpcyBmbGFnIGlzIGB0cnVlYCwgbm8gYWNjZXNzb3Igd2lsbCBiZSBjcmVhdGVkLCBhbmRcbiAgICogaXQgd2lsbCBiZSB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNhbGxcbiAgICogYHRoaXMucmVxdWVzdFVwZGF0ZShwcm9wZXJ0eU5hbWUsIG9sZFZhbHVlKWAgdG8gcmVxdWVzdCBhbiB1cGRhdGUgd2hlblxuICAgKiB0aGUgcHJvcGVydHkgY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IG5vQWNjZXNzb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcHJvcGVydHkgaXMgd3JhcHBpbmcgYWNjZXNzb3JzLiBUaGlzIGlzIHNldCBieSBgQHByb3BlcnR5YFxuICAgKiB0byBjb250cm9sIHRoZSBpbml0aWFsIHZhbHVlIGNoYW5nZSBhbmQgcmVmbGVjdGlvbiBsb2dpYy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICB3cmFwcGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHVzZXMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGFzIHRoZSBkZWZhdWx0IHZhbHVlLFxuICAgKiB3aGljaCBjaGFuZ2VzIGhvdyBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkOlxuICAgKiAgLSBUaGUgaW5pdGlhbCB2YWx1ZSBkb2VzICpub3QqIHJlZmxlY3QsIGV2ZW4gaWYgdGhlIGByZWZsZWN0YCBvcHRpb24gaXMgYHRydWVgLlxuICAgKiAgICBTdWJzZXF1ZW50IGNoYW5nZXMgdG8gdGhlIHByb3BlcnR5IHdpbGwgcmVmbGVjdCwgZXZlbiBpZiB0aGV5IGFyZSBlcXVhbCB0byB0aGVcbiAgICogICAgIGRlZmF1bHQgdmFsdWUuXG4gICAqICAtIFdoZW4gdGhlIGF0dHJpYnV0ZSBpcyByZW1vdmVkLCB0aGUgcHJvcGVydHkgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAqICAtIFRoZSBpbml0aWFsIHZhbHVlIHdpbGwgbm90IHRyaWdnZXIgYW4gb2xkIHZhbHVlIGluIHRoZSBgY2hhbmdlZFByb3BlcnRpZXNgIG1hcFxuICAgKiAgICBhcmd1bWVudCB0byB1cGRhdGUgbGlmZWN5Y2xlIG1ldGhvZHMuXG4gICAqXG4gICAqIFdoZW4gc2V0LCBwcm9wZXJ0aWVzIG11c3QgYmUgaW5pdGlhbGl6ZWQsIGVpdGhlciB3aXRoIGEgZmllbGQgaW5pdGlhbGl6ZXIsIG9yIGFuXG4gICAqIGFzc2lnbm1lbnQgaW4gdGhlIGNvbnN0cnVjdG9yLiBOb3QgaW5pdGlhbGl6aW5nIHRoZSBwcm9wZXJ0eSBtYXkgbGVhZCB0b1xuICAgKiBpbXByb3BlciBoYW5kbGluZyBvZiBzdWJzZXF1ZW50IHByb3BlcnR5IGFzc2lnbm1lbnRzLlxuICAgKlxuICAgKiBXaGlsZSB0aGlzIGJlaGF2aW9yIGlzIG9wdC1pbiwgbW9zdCBwcm9wZXJ0aWVzIHRoYXQgcmVmbGVjdCB0byBhdHRyaWJ1dGVzIHNob3VsZFxuICAgKiB1c2UgYHVzZURlZmF1bHQ6IHRydWVgIHNvIHRoYXQgdGhlaXIgaW5pdGlhbCB2YWx1ZXMgZG8gbm90IHJlZmxlY3QuXG4gICAqL1xuICB1c2VEZWZhdWx0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNYXAgb2YgcHJvcGVydGllcyB0byBQcm9wZXJ0eURlY2xhcmF0aW9uIG9wdGlvbnMuIEZvciBlYWNoIHByb3BlcnR5IGFuXG4gKiBhY2Nlc3NvciBpcyBtYWRlLCBhbmQgdGhlIHByb3BlcnR5IGlzIHByb2Nlc3NlZCBhY2NvcmRpbmcgdG8gdGhlXG4gKiBQcm9wZXJ0eURlY2xhcmF0aW9uIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlEZWNsYXJhdGlvbnMge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURlY2xhcmF0aW9uO1xufVxuXG50eXBlIFByb3BlcnR5RGVjbGFyYXRpb25NYXAgPSBNYXA8UHJvcGVydHlLZXksIFByb3BlcnR5RGVjbGFyYXRpb24+O1xuXG50eXBlIEF0dHJpYnV0ZU1hcCA9IE1hcDxzdHJpbmcsIFByb3BlcnR5S2V5PjtcblxuLyoqXG4gKiBBIE1hcCBvZiBwcm9wZXJ0eSBrZXlzIHRvIHZhbHVlcy5cbiAqXG4gKiBUYWtlcyBhbiBvcHRpb25hbCB0eXBlIHBhcmFtZXRlciBULCB3aGljaCB3aGVuIHNwZWNpZmllZCBhcyBhIG5vbi1hbnksXG4gKiBub24tdW5rbm93biB0eXBlLCB3aWxsIG1ha2UgdGhlIE1hcCBtb3JlIHN0cm9uZ2x5LXR5cGVkLCBhc3NvY2lhdGluZyB0aGUgbWFwXG4gKiBrZXlzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZSB0eXBlIG9uIFQuXG4gKlxuICogVXNlIGBQcm9wZXJ0eVZhbHVlczx0aGlzPmAgd2hlbiBvdmVycmlkaW5nIFJlYWN0aXZlRWxlbWVudC51cGRhdGUoKSBhbmRcbiAqIG90aGVyIGxpZmVjeWNsZSBtZXRob2RzIGluIG9yZGVyIHRvIGdldCBzdHJvbmdlciB0eXBlLWNoZWNraW5nIG9uIGtleXNcbiAqIGFuZCB2YWx1ZXMuXG4gKi9cbi8vIFRoaXMgdHlwZSBpcyBjb25kaXRpb25hbCBzbyB0aGF0IGlmIHRoZSBwYXJhbWV0ZXIgVCBpcyBub3Qgc3BlY2lmaWVkLCBvclxuLy8gaXMgYGFueWAsIHRoZSB0eXBlIHdpbGwgaW5jbHVkZSBgTWFwPFByb3BlcnR5S2V5LCB1bmtub3duPmAuIFNpbmNlIFQgaXMgbm90XG4vLyBnaXZlbiBpbiB0aGUgdXNlcyBvZiBQcm9wZXJ0eVZhbHVlcyBpbiB0aGlzIGZpbGUsIGFsbCB1c2VzIGhlcmUgZmFsbGJhY2sgdG9cbi8vIG1lYW5pbmcgYE1hcDxQcm9wZXJ0eUtleSwgdW5rbm93bj5gLCBidXQgaWYgYSBkZXZlbG9wZXIgdXNlc1xuLy8gYFByb3BlcnR5VmFsdWVzPHRoaXM+YCAob3IgYW55IG90aGVyIHZhbHVlIGZvciBUKSB0aGV5IHdpbGwgZ2V0IGFcbi8vIHN0cm9uZ2x5LXR5cGVkIE1hcCB0eXBlLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIFByb3BlcnR5VmFsdWVzPFQgPSBhbnk+ID0gVCBleHRlbmRzIG9iamVjdFxuICA/IFByb3BlcnR5VmFsdWVNYXA8VD5cbiAgOiBNYXA8UHJvcGVydHlLZXksIHVua25vd24+O1xuXG4vKipcbiAqIERvIG5vdCB1c2UsIGluc3RlYWQgcHJlZmVyIHtAbGlua2NvZGUgUHJvcGVydHlWYWx1ZXN9LlxuICovXG4vLyBUaGlzIHR5cGUgbXVzdCBiZSBleHBvcnRlZCBzdWNoIHRoYXQgSmF2YVNjcmlwdCBnZW5lcmF0ZWQgYnkgdGhlIEdvb2dsZVxuLy8gQ2xvc3VyZSBDb21waWxlciBjYW4gaW1wb3J0IGEgdHlwZSByZWZlcmVuY2UuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5VmFsdWVNYXA8VD4gZXh0ZW5kcyBNYXA8UHJvcGVydHlLZXksIHVua25vd24+IHtcbiAgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBUPihrOiBLKTogVFtLXSB8IHVuZGVmaW5lZDtcbiAgc2V0PEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEssIHZhbHVlOiBUW0tdKTogdGhpcztcbiAgaGFzPEsgZXh0ZW5kcyBrZXlvZiBUPihrOiBLKTogYm9vbGVhbjtcbiAgZGVsZXRlPEsgZXh0ZW5kcyBrZXlvZiBUPihrOiBLKTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb252ZXJ0ZXI6IENvbXBsZXhBdHRyaWJ1dGVDb252ZXJ0ZXIgPSB7XG4gIHRvQXR0cmlidXRlKHZhbHVlOiB1bmtub3duLCB0eXBlPzogdW5rbm93bik6IHVua25vd24ge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBCb29sZWFuOlxuICAgICAgICB2YWx1ZSA9IHZhbHVlID8gZW1wdHlTdHJpbmdGb3JCb29sZWFuQXR0cmlidXRlIDogbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE9iamVjdDpcbiAgICAgIGNhc2UgQXJyYXk6XG4gICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgcGFzcyB0aGlzIHRocm91Z2hcbiAgICAgICAgLy8gdG8gYWxsb3cgcmVtb3Zpbmcvbm8gY2hhbmdlIGJlaGF2aW9yLlxuICAgICAgICB2YWx1ZSA9IHZhbHVlID09IG51bGwgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcblxuICBmcm9tQXR0cmlidXRlKHZhbHVlOiBzdHJpbmcgfCBudWxsLCB0eXBlPzogdW5rbm93bikge1xuICAgIGxldCBmcm9tVmFsdWU6IHVua25vd24gPSB2YWx1ZTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgQm9vbGVhbjpcbiAgICAgICAgZnJvbVZhbHVlID0gdmFsdWUgIT09IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOdW1iZXI6XG4gICAgICAgIGZyb21WYWx1ZSA9IHZhbHVlID09PSBudWxsID8gbnVsbCA6IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBPYmplY3Q6XG4gICAgICBjYXNlIEFycmF5OlxuICAgICAgICAvLyBEbyAqbm90KiBnZW5lcmF0ZSBleGNlcHRpb24gd2hlbiBpbnZhbGlkIEpTT04gaXMgc2V0IGFzIGVsZW1lbnRzXG4gICAgICAgIC8vIGRvbid0IG5vcm1hbGx5IGNvbXBsYWluIG9uIGJlaW5nIG1pcy1jb25maWd1cmVkLlxuICAgICAgICAvLyBUT0RPKHNvcnZlbGwpOiBEbyBnZW5lcmF0ZSBleGNlcHRpb24gaW4gKmRldiBtb2RlKi5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBc3NlcnQgdG8gYWRoZXJlIHRvIEJhemVsJ3MgXCJtdXN0IHR5cGUgYXNzZXJ0IEpTT04gcGFyc2VcIiBydWxlLlxuICAgICAgICAgIGZyb21WYWx1ZSA9IEpTT04ucGFyc2UodmFsdWUhKSBhcyB1bmtub3duO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZnJvbVZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGZyb21WYWx1ZTtcbiAgfSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFzQ2hhbmdlZCB7XG4gICh2YWx1ZTogdW5rbm93biwgb2xkOiB1bmtub3duKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDaGFuZ2UgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyBkaWZmZXJlbnQgZnJvbSBgb2xkVmFsdWVgLlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBmb3IgYSBwcm9wZXJ0eSdzIGBoYXNDaGFuZ2VkYCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vdEVxdWFsOiBIYXNDaGFuZ2VkID0gKHZhbHVlOiB1bmtub3duLCBvbGQ6IHVua25vd24pOiBib29sZWFuID0+XG4gICFpcyh2YWx1ZSwgb2xkKTtcblxuY29uc3QgZGVmYXVsdFByb3BlcnR5RGVjbGFyYXRpb246IFByb3BlcnR5RGVjbGFyYXRpb24gPSB7XG4gIGF0dHJpYnV0ZTogdHJ1ZSxcbiAgdHlwZTogU3RyaW5nLFxuICBjb252ZXJ0ZXI6IGRlZmF1bHRDb252ZXJ0ZXIsXG4gIHJlZmxlY3Q6IGZhbHNlLFxuICB1c2VEZWZhdWx0OiBmYWxzZSxcbiAgaGFzQ2hhbmdlZDogbm90RXF1YWwsXG59O1xuXG4vKipcbiAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyBvbmUgb2YgdGhlIHN1cHBvcnRlZCBkZXYgbW9kZSB3YXJuaW5nIGNhdGVnb3JpZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFdhcm5pbmdLaW5kID1cbiAgfCAnY2hhbmdlLWluLXVwZGF0ZSdcbiAgfCAnbWlncmF0aW9uJ1xuICB8ICdhc3luYy1wZXJmb3JtLXVwZGF0ZSc7XG5cbmV4cG9ydCB0eXBlIEluaXRpYWxpemVyID0gKGVsZW1lbnQ6IFJlYWN0aXZlRWxlbWVudCkgPT4gdm9pZDtcblxuLy8gVGVtcG9yYXJ5LCB1bnRpbCBnb29nbGUzIGlzIG9uIFR5cGVTY3JpcHQgNS4yXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBTeW1ib2xDb25zdHJ1Y3RvciB7XG4gICAgcmVhZG9ubHkgbWV0YWRhdGE6IHVuaXF1ZSBzeW1ib2w7XG4gIH1cbn1cblxuLy8gRW5zdXJlIG1ldGFkYXRhIGlzIGVuYWJsZWQuIFR5cGVTY3JpcHQgZG9lcyBub3QgcG9seWZpbGxcbi8vIFN5bWJvbC5tZXRhZGF0YSwgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCBpdCBleGlzdHMuXG4oU3ltYm9sIGFzIHttZXRhZGF0YTogc3ltYm9sfSkubWV0YWRhdGEgPz89IFN5bWJvbCgnbWV0YWRhdGEnKTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICAvLyBUaGlzIGlzIHB1YmxpYyBnbG9iYWwgQVBJLCBkbyBub3QgY2hhbmdlIVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdmFyXG4gIHZhciBsaXRQcm9wZXJ0eU1ldGFkYXRhOiBXZWFrTWFwPFxuICAgIG9iamVjdCxcbiAgICBNYXA8UHJvcGVydHlLZXksIFByb3BlcnR5RGVjbGFyYXRpb24+XG4gID47XG59XG5cbi8vIE1hcCBmcm9tIGEgY2xhc3MncyBtZXRhZGF0YSBvYmplY3QgdG8gcHJvcGVydHkgb3B0aW9uc1xuLy8gTm90ZSB0aGF0IHdlIG11c3QgdXNlIG51bGxpc2gtY29hbGVzY2luZyBhc3NpZ25tZW50IHNvIHRoYXQgd2Ugb25seSB1c2Ugb25lXG4vLyBtYXAgZXZlbiBpZiB3ZSBsb2FkIG11bHRpcGxlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUuXG5nbG9iYWwubGl0UHJvcGVydHlNZXRhZGF0YSA/Pz0gbmV3IFdlYWtNYXA8XG4gIG9iamVjdCxcbiAgTWFwPFByb3BlcnR5S2V5LCBQcm9wZXJ0eURlY2xhcmF0aW9uPlxuPigpO1xuXG4vKipcbiAqIEJhc2UgZWxlbWVudCBjbGFzcyB3aGljaCBtYW5hZ2VzIGVsZW1lbnQgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcy4gV2hlblxuICogcHJvcGVydGllcyBjaGFuZ2UsIHRoZSBgdXBkYXRlYCBtZXRob2QgaXMgYXN5bmNocm9ub3VzbHkgY2FsbGVkLiBUaGlzIG1ldGhvZFxuICogc2hvdWxkIGJlIHN1cHBsaWVkIGJ5IHN1YmNsYXNzZXMgdG8gcmVuZGVyIHVwZGF0ZXMgYXMgZGVzaXJlZC5cbiAqIEBub0luaGVyaXREb2NcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlYWN0aXZlRWxlbWVudFxuICAvLyBJbiB0aGUgTm9kZSBidWlsZCwgdGhpcyBgZXh0ZW5kc2AgY2xhdXNlIHdpbGwgYmUgc3Vic3RpdHV0ZWQgd2l0aFxuICAvLyBgKGdsb2JhbFRoaXMuSFRNTEVsZW1lbnQgPz8gSFRNTEVsZW1lbnQpYC5cbiAgLy9cbiAgLy8gVGhpcyB3YXksIHdlIHdpbGwgZmlyc3QgcHJlZmVyIGFueSBnbG9iYWwgYEhUTUxFbGVtZW50YCBwb2x5ZmlsbCB0aGF0IHRoZVxuICAvLyB1c2VyIGhhcyBhc3NpZ25lZCwgYW5kIHRoZW4gZmFsbCBiYWNrIHRvIHRoZSBgSFRNTEVsZW1lbnRgIHNoaW0gd2hpY2ggaGFzXG4gIC8vIGJlZW4gaW1wb3J0ZWQgKHNlZSBub3RlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlIGFib3V0IGhvdyB0aGlzIGltcG9ydCBpc1xuICAvLyBnZW5lcmF0ZWQgYnkgUm9sbHVwKS4gTm90ZSB0aGF0IHRoZSBgSFRNTEVsZW1lbnRgIHZhcmlhYmxlIGhhcyBiZWVuXG4gIC8vIHNoYWRvd2VkIGJ5IHRoaXMgaW1wb3J0LCBzbyBpdCBubyBsb25nZXIgcmVmZXJzIHRvIHRoZSBnbG9iYWwuXG4gIGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAgaW1wbGVtZW50cyBSZWFjdGl2ZUNvbnRyb2xsZXJIb3N0XG57XG4gIC8vIE5vdGU6IHRoZXNlIGFyZSBwYXRjaGVkIGluIG9ubHkgaW4gREVWX01PREUuXG4gIC8qKlxuICAgKiBSZWFkIG9yIHNldCBhbGwgdGhlIGVuYWJsZWQgd2FybmluZyBjYXRlZ29yaWVzIGZvciB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgdXNlZCBpbiBkZXZlbG9wbWVudCBidWlsZHMuXG4gICAqXG4gICAqIEBub2NvbGxhcHNlXG4gICAqIEBjYXRlZ29yeSBkZXYtbW9kZVxuICAgKi9cbiAgc3RhdGljIGVuYWJsZWRXYXJuaW5ncz86IFdhcm5pbmdLaW5kW107XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgZ2l2ZW4gd2FybmluZyBjYXRlZ29yeSBmb3IgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogVGhpcyBtZXRob2Qgb25seSBleGlzdHMgaW4gZGV2ZWxvcG1lbnQgYnVpbGRzLCBzbyBpdCBzaG91bGQgYmUgYWNjZXNzZWRcbiAgICogd2l0aCBhIGd1YXJkIGxpa2U6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIC8vIEVuYWJsZSBmb3IgYWxsIFJlYWN0aXZlRWxlbWVudCBzdWJjbGFzc2VzXG4gICAqIFJlYWN0aXZlRWxlbWVudC5lbmFibGVXYXJuaW5nPy4oJ21pZ3JhdGlvbicpO1xuICAgKlxuICAgKiAvLyBFbmFibGUgZm9yIG9ubHkgTXlFbGVtZW50IGFuZCBzdWJjbGFzc2VzXG4gICAqIE15RWxlbWVudC5lbmFibGVXYXJuaW5nPy4oJ21pZ3JhdGlvbicpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQG5vY29sbGFwc2VcbiAgICogQGNhdGVnb3J5IGRldi1tb2RlXG4gICAqL1xuICBzdGF0aWMgZW5hYmxlV2FybmluZz86ICh3YXJuaW5nS2luZDogV2FybmluZ0tpbmQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIGdpdmVuIHdhcm5pbmcgY2F0ZWdvcnkgZm9yIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG9ubHkgZXhpc3RzIGluIGRldmVsb3BtZW50IGJ1aWxkcywgc28gaXQgc2hvdWxkIGJlIGFjY2Vzc2VkXG4gICAqIHdpdGggYSBndWFyZCBsaWtlOlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiAvLyBEaXNhYmxlIGZvciBhbGwgUmVhY3RpdmVFbGVtZW50IHN1YmNsYXNzZXNcbiAgICogUmVhY3RpdmVFbGVtZW50LmRpc2FibGVXYXJuaW5nPy4oJ21pZ3JhdGlvbicpO1xuICAgKlxuICAgKiAvLyBEaXNhYmxlIGZvciBvbmx5IE15RWxlbWVudCBhbmQgc3ViY2xhc3Nlc1xuICAgKiBNeUVsZW1lbnQuZGlzYWJsZVdhcm5pbmc/LignbWlncmF0aW9uJyk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAbm9jb2xsYXBzZVxuICAgKiBAY2F0ZWdvcnkgZGV2LW1vZGVcbiAgICovXG4gIHN0YXRpYyBkaXNhYmxlV2FybmluZz86ICh3YXJuaW5nS2luZDogV2FybmluZ0tpbmQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gaW5pdGlhbGl6ZXIgZnVuY3Rpb24gdG8gdGhlIGNsYXNzIHRoYXQgaXMgY2FsbGVkIGR1cmluZyBpbnN0YW5jZVxuICAgKiBjb25zdHJ1Y3Rpb24uXG4gICAqXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBjb2RlIHRoYXQgcnVucyBhZ2FpbnN0IGEgYFJlYWN0aXZlRWxlbWVudGBcbiAgICogc3ViY2xhc3MsIHN1Y2ggYXMgYSBkZWNvcmF0b3IsIHRoYXQgbmVlZHMgdG8gZG8gd29yayBmb3IgZWFjaFxuICAgKiBpbnN0YW5jZSwgc3VjaCBhcyBzZXR0aW5nIHVwIGEgYFJlYWN0aXZlQ29udHJvbGxlcmAuXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG15RGVjb3JhdG9yID0gKHRhcmdldDogdHlwZW9mIFJlYWN0aXZlRWxlbWVudCwga2V5OiBzdHJpbmcpID0+IHtcbiAgICogICB0YXJnZXQuYWRkSW5pdGlhbGl6ZXIoKGluc3RhbmNlOiBSZWFjdGl2ZUVsZW1lbnQpID0+IHtcbiAgICogICAgIC8vIFRoaXMgaXMgcnVuIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhlIGVsZW1lbnRcbiAgICogICAgIG5ldyBNeUNvbnRyb2xsZXIoaW5zdGFuY2UpO1xuICAgKiAgIH0pO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBEZWNvcmF0aW5nIGEgZmllbGQgd2lsbCB0aGVuIGNhdXNlIGVhY2ggaW5zdGFuY2UgdG8gcnVuIGFuIGluaXRpYWxpemVyXG4gICAqIHRoYXQgYWRkcyBhIGNvbnRyb2xsZXI6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNsYXNzIE15RWxlbWVudCBleHRlbmRzIExpdEVsZW1lbnQge1xuICAgKiAgIEBteURlY29yYXRvciBmb287XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEluaXRpYWxpemVycyBhcmUgc3RvcmVkIHBlci1jb25zdHJ1Y3Rvci4gQWRkaW5nIGFuIGluaXRpYWxpemVyIHRvIGFcbiAgICogc3ViY2xhc3MgZG9lcyBub3QgYWRkIGl0IHRvIGEgc3VwZXJjbGFzcy4gU2luY2UgaW5pdGlhbGl6ZXJzIGFyZSBydW4gaW5cbiAgICogY29uc3RydWN0b3JzLCBpbml0aWFsaXplcnMgd2lsbCBydW4gaW4gb3JkZXIgb2YgdGhlIGNsYXNzIGhpZXJhcmNoeSxcbiAgICogc3RhcnRpbmcgd2l0aCBzdXBlcmNsYXNzZXMgYW5kIHByb2dyZXNzaW5nIHRvIHRoZSBpbnN0YW5jZSdzIGNsYXNzLlxuICAgKlxuICAgKiBAbm9jb2xsYXBzZVxuICAgKi9cbiAgc3RhdGljIGFkZEluaXRpYWxpemVyKGluaXRpYWxpemVyOiBJbml0aWFsaXplcikge1xuICAgIHRoaXMuX19wcmVwYXJlKCk7XG4gICAgKHRoaXMuX2luaXRpYWxpemVycyA/Pz0gW10pLnB1c2goaW5pdGlhbGl6ZXIpO1xuICB9XG5cbiAgc3RhdGljIF9pbml0aWFsaXplcnM/OiBJbml0aWFsaXplcltdO1xuXG4gIC8qXG4gICAqIER1ZSB0byBjbG9zdXJlIGNvbXBpbGVyIEVTNiBjb21waWxhdGlvbiBidWdzLCBAbm9jb2xsYXBzZSBpcyByZXF1aXJlZCBvblxuICAgKiBhbGwgc3RhdGljIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgd2l0aCBpbml0aWFsaXplcnMuICBSZWZlcmVuY2U6XG4gICAqIC0gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL2lzc3Vlcy8xNzc2XG4gICAqL1xuXG4gIC8qKlxuICAgKiBNYXBzIGF0dHJpYnV0ZSBuYW1lcyB0byBwcm9wZXJ0aWVzOyBmb3IgZXhhbXBsZSBgZm9vYmFyYCBhdHRyaWJ1dGUgdG9cbiAgICogYGZvb0JhcmAgcHJvcGVydHkuIENyZWF0ZWQgbGF6aWx5IG9uIHVzZXIgc3ViY2xhc3NlcyB3aGVuIGZpbmFsaXppbmcgdGhlXG4gICAqIGNsYXNzLlxuICAgKiBAbm9jb2xsYXBzZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX19hdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOiBBdHRyaWJ1dGVNYXA7XG5cbiAgLyoqXG4gICAqIE1hcmtzIGNsYXNzIGFzIGhhdmluZyBiZWVuIGZpbmFsaXplZCwgd2hpY2ggaW5jbHVkZXMgY3JlYXRpbmcgcHJvcGVydGllc1xuICAgKiBmcm9tIGBzdGF0aWMgcHJvcGVydGllc2AsIGJ1dCBkb2VzICpub3QqIGluY2x1ZGUgYWxsIHByb3BlcnRpZXMgY3JlYXRlZFxuICAgKiBmcm9tIGRlY29yYXRvcnMuXG4gICAqIEBub2NvbGxhcHNlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsaXplZDogdHJ1ZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogTWVtb2l6ZWQgbGlzdCBvZiBhbGwgZWxlbWVudCBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgYW55IHN1cGVyY2xhc3NcbiAgICogcHJvcGVydGllcy4gQ3JlYXRlZCBsYXppbHkgb24gdXNlciBzdWJjbGFzc2VzIHdoZW4gZmluYWxpemluZyB0aGUgY2xhc3MuXG4gICAqXG4gICAqIEBub2NvbGxhcHNlXG4gICAqIEBjYXRlZ29yeSBwcm9wZXJ0aWVzXG4gICAqL1xuICBzdGF0aWMgZWxlbWVudFByb3BlcnRpZXM6IFByb3BlcnR5RGVjbGFyYXRpb25NYXA7XG5cbiAgLyoqXG4gICAqIFVzZXItc3VwcGxpZWQgb2JqZWN0IHRoYXQgbWFwcyBwcm9wZXJ0eSBuYW1lcyB0byBgUHJvcGVydHlEZWNsYXJhdGlvbmBcbiAgICogb2JqZWN0cyBjb250YWluaW5nIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHJlYWN0aXZlIHByb3BlcnRpZXMuIFdoZW5cbiAgICogYSByZWFjdGl2ZSBwcm9wZXJ0eSBpcyBzZXQgdGhlIGVsZW1lbnQgd2lsbCB1cGRhdGUgYW5kIHJlbmRlci5cbiAgICpcbiAgICogQnkgZGVmYXVsdCBwcm9wZXJ0aWVzIGFyZSBwdWJsaWMgZmllbGRzLCBhbmQgYXMgc3VjaCwgdGhleSBzaG91bGQgYmVcbiAgICogY29uc2lkZXJlZCBhcyBwcmltYXJpbHkgc2V0dGFibGUgYnkgZWxlbWVudCB1c2VycywgZWl0aGVyIHZpYSBhdHRyaWJ1dGUgb3JcbiAgICogdGhlIHByb3BlcnR5IGl0c2VsZi5cbiAgICpcbiAgICogR2VuZXJhbGx5LCBwcm9wZXJ0aWVzIHRoYXQgYXJlIGNoYW5nZWQgYnkgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHByaXZhdGUgb3JcbiAgICogcHJvdGVjdGVkIGZpZWxkcyBhbmQgc2hvdWxkIHVzZSB0aGUgYHN0YXRlOiB0cnVlYCBvcHRpb24uIFByb3BlcnRpZXNcbiAgICogbWFya2VkIGFzIGBzdGF0ZWAgZG8gbm90IHJlZmxlY3QgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGVcbiAgICpcbiAgICogSG93ZXZlciwgc29tZXRpbWVzIGVsZW1lbnQgY29kZSBkb2VzIG5lZWQgdG8gc2V0IGEgcHVibGljIHByb3BlcnR5LiBUaGlzXG4gICAqIHNob3VsZCB0eXBpY2FsbHkgb25seSBiZSBkb25lIGluIHJlc3BvbnNlIHRvIHVzZXIgaW50ZXJhY3Rpb24sIGFuZCBhbiBldmVudFxuICAgKiBzaG91bGQgYmUgZmlyZWQgaW5mb3JtaW5nIHRoZSB1c2VyOyBmb3IgZXhhbXBsZSwgYSBjaGVja2JveCBzZXRzIGl0c1xuICAgKiBgY2hlY2tlZGAgcHJvcGVydHkgd2hlbiBjbGlja2VkIGFuZCBmaXJlcyBhIGBjaGFuZ2VkYCBldmVudC4gTXV0YXRpbmdcbiAgICogcHVibGljIHByb3BlcnRpZXMgc2hvdWxkIHR5cGljYWxseSBub3QgYmUgZG9uZSBmb3Igbm9uLXByaW1pdGl2ZSAob2JqZWN0IG9yXG4gICAqIGFycmF5KSBwcm9wZXJ0aWVzLiBJbiBvdGhlciBjYXNlcyB3aGVuIGFuIGVsZW1lbnQgbmVlZHMgdG8gbWFuYWdlIHN0YXRlLCBhXG4gICAqIHByaXZhdGUgcHJvcGVydHkgc2V0IHdpdGggdGhlIGBzdGF0ZTogdHJ1ZWAgb3B0aW9uIHNob3VsZCBiZSB1c2VkLiBXaGVuXG4gICAqIG5lZWRlZCwgc3RhdGUgcHJvcGVydGllcyBjYW4gYmUgaW5pdGlhbGl6ZWQgdmlhIHB1YmxpYyBwcm9wZXJ0aWVzIHRvXG4gICAqIGZhY2lsaXRhdGUgY29tcGxleCBpbnRlcmFjdGlvbnMuXG4gICAqIEBub2NvbGxhcHNlXG4gICAqIEBjYXRlZ29yeSBwcm9wZXJ0aWVzXG4gICAqL1xuICBzdGF0aWMgcHJvcGVydGllczogUHJvcGVydHlEZWNsYXJhdGlvbnM7XG5cbiAgLyoqXG4gICAqIE1lbW9pemVkIGxpc3Qgb2YgYWxsIGVsZW1lbnQgc3R5bGVzLlxuICAgKiBDcmVhdGVkIGxhemlseSBvbiB1c2VyIHN1YmNsYXNzZXMgd2hlbiBmaW5hbGl6aW5nIHRoZSBjbGFzcy5cbiAgICogQG5vY29sbGFwc2VcbiAgICogQGNhdGVnb3J5IHN0eWxlc1xuICAgKi9cbiAgc3RhdGljIGVsZW1lbnRTdHlsZXM6IEFycmF5PENTU1Jlc3VsdE9yTmF0aXZlPiA9IFtdO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBzdHlsZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnQuIFRoZSBzdHlsZXMgc2hvdWxkIGJlIGRlZmluZWRcbiAgICogdXNpbmcgdGhlIHtAbGlua2NvZGUgY3NzfSB0YWcgZnVuY3Rpb24sIHZpYSBjb25zdHJ1Y3RpYmxlIHN0eWxlc2hlZXRzLCBvclxuICAgKiBpbXBvcnRlZCBmcm9tIG5hdGl2ZSBDU1MgbW9kdWxlIHNjcmlwdHMuXG4gICAqXG4gICAqIE5vdGUgb24gQ29udGVudCBTZWN1cml0eSBQb2xpY3k6XG4gICAqXG4gICAqIEVsZW1lbnQgc3R5bGVzIGFyZSBpbXBsZW1lbnRlZCB3aXRoIGA8c3R5bGU+YCB0YWdzIHdoZW4gdGhlIGJyb3dzZXIgZG9lc24ndFxuICAgKiBzdXBwb3J0IGFkb3B0ZWQgU3R5bGVTaGVldHMuIFRvIHVzZSBzdWNoIGA8c3R5bGU+YCB0YWdzIHdpdGggdGhlIHN0eWxlLXNyY1xuICAgKiBDU1AgZGlyZWN0aXZlLCB0aGUgc3R5bGUtc3JjIHZhbHVlIG11c3QgZWl0aGVyIGluY2x1ZGUgJ3Vuc2FmZS1pbmxpbmUnIG9yXG4gICAqIGBub25jZS08YmFzZTY0LXZhbHVlPmAgd2l0aCBgPGJhc2U2NC12YWx1ZT5gIHJlcGxhY2VkIGJlIGEgc2VydmVyLWdlbmVyYXRlZFxuICAgKiBub25jZS5cbiAgICpcbiAgICogVG8gcHJvdmlkZSBhIG5vbmNlIHRvIHVzZSBvbiBnZW5lcmF0ZWQgYDxzdHlsZT5gIGVsZW1lbnRzLCBzZXRcbiAgICogYHdpbmRvdy5saXROb25jZWAgdG8gYSBzZXJ2ZXItZ2VuZXJhdGVkIG5vbmNlIGluIHlvdXIgcGFnZSdzIEhUTUwsIGJlZm9yZVxuICAgKiBsb2FkaW5nIGFwcGxpY2F0aW9uIGNvZGU6XG4gICAqXG4gICAqIGBgYGh0bWxcbiAgICogPHNjcmlwdD5cbiAgICogICAvLyBHZW5lcmF0ZWQgYW5kIHVuaXF1ZSBwZXIgcmVxdWVzdDpcbiAgICogICB3aW5kb3cubGl0Tm9uY2UgPSAnYTFiMmMzZDQnO1xuICAgKiA8L3NjcmlwdD5cbiAgICogYGBgXG4gICAqIEBub2NvbGxhcHNlXG4gICAqIEBjYXRlZ29yeSBzdHlsZXNcbiAgICovXG4gIHN0YXRpYyBzdHlsZXM/OiBDU1NSZXN1bHRHcm91cDtcblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYXR0cmlidXRlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSByZWdpc3RlcmVkIHByb3BlcnRpZXMuXG4gICAqIEBub2NvbGxhcHNlXG4gICAqIEBjYXRlZ29yeSBhdHRyaWJ1dGVzXG4gICAqL1xuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICAvLyBFbnN1cmUgd2UndmUgY3JlYXRlZCBhbGwgcHJvcGVydGllc1xuICAgIHRoaXMuZmluYWxpemUoKTtcbiAgICAvLyB0aGlzLl9fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCBpcyBvbmx5IHVuZGVmaW5lZCBhZnRlciBmaW5hbGl6ZSgpIGluXG4gICAgLy8gUmVhY3RpdmVFbGVtZW50IGl0c2VsZi4gUmVhY3RpdmVFbGVtZW50Lm9ic2VydmVkQXR0cmlidXRlcyBpcyBvbmx5XG4gICAgLy8gYWNjZXNzZWQgd2l0aCBSZWFjdGl2ZUVsZW1lbnQgYXMgdGhlIHJlY2VpdmVyIHdoZW4gYSBzdWJjbGFzcyBvciBtaXhpblxuICAgIC8vIGNhbGxzIHN1cGVyLm9ic2VydmVkQXR0cmlidXRlc1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCAmJiBbLi4udGhpcy5fX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAua2V5cygpXVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9faW5zdGFuY2VQcm9wZXJ0aWVzPzogUHJvcGVydHlWYWx1ZXMgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwcm9wZXJ0eSBhY2Nlc3NvciBvbiB0aGUgZWxlbWVudCBwcm90b3R5cGUgaWYgb25lIGRvZXMgbm90IGV4aXN0XG4gICAqIGFuZCBzdG9yZXMgYSB7QGxpbmtjb2RlIFByb3BlcnR5RGVjbGFyYXRpb259IGZvciB0aGUgcHJvcGVydHkgd2l0aCB0aGVcbiAgICogZ2l2ZW4gb3B0aW9ucy4gVGhlIHByb3BlcnR5IHNldHRlciBjYWxscyB0aGUgcHJvcGVydHkncyBgaGFzQ2hhbmdlZGBcbiAgICogcHJvcGVydHkgb3B0aW9uIG9yIHVzZXMgYSBzdHJpY3QgaWRlbnRpdHkgY2hlY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90XG4gICAqIHRvIHJlcXVlc3QgYW4gdXBkYXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBtYXkgYmUgb3ZlcnJpZGRlbiB0byBjdXN0b21pemUgcHJvcGVydGllczsgaG93ZXZlcixcbiAgICogd2hlbiBkb2luZyBzbywgaXQncyBpbXBvcnRhbnQgdG8gY2FsbCBgc3VwZXIuY3JlYXRlUHJvcGVydHlgIHRvIGVuc3VyZVxuICAgKiB0aGUgcHJvcGVydHkgaXMgc2V0dXAgY29ycmVjdGx5LiBUaGlzIG1ldGhvZCBjYWxsc1xuICAgKiBgZ2V0UHJvcGVydHlEZXNjcmlwdG9yYCBpbnRlcm5hbGx5IHRvIGdldCBhIGRlc2NyaXB0b3IgdG8gaW5zdGFsbC5cbiAgICogVG8gY3VzdG9taXplIHdoYXQgcHJvcGVydGllcyBkbyB3aGVuIHRoZXkgYXJlIGdldCBvciBzZXQsIG92ZXJyaWRlXG4gICAqIGBnZXRQcm9wZXJ0eURlc2NyaXB0b3JgLiBUbyBjdXN0b21pemUgdGhlIG9wdGlvbnMgZm9yIGEgcHJvcGVydHksXG4gICAqIGltcGxlbWVudCBgY3JlYXRlUHJvcGVydHlgIGxpa2UgdGhpczpcbiAgICpcbiAgICogYGBgdHNcbiAgICogc3RhdGljIGNyZWF0ZVByb3BlcnR5KG5hbWUsIG9wdGlvbnMpIHtcbiAgICogICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbihvcHRpb25zLCB7bXlPcHRpb246IHRydWV9KTtcbiAgICogICBzdXBlci5jcmVhdGVQcm9wZXJ0eShuYW1lLCBvcHRpb25zKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQG5vY29sbGFwc2VcbiAgICogQGNhdGVnb3J5IHByb3BlcnRpZXNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVQcm9wZXJ0eShcbiAgICBuYW1lOiBQcm9wZXJ0eUtleSxcbiAgICBvcHRpb25zOiBQcm9wZXJ0eURlY2xhcmF0aW9uID0gZGVmYXVsdFByb3BlcnR5RGVjbGFyYXRpb25cbiAgKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIHN0YXRlIHByb3BlcnR5LCBmb3JjZSB0aGUgYXR0cmlidXRlIHRvIGZhbHNlLlxuICAgIGlmIChvcHRpb25zLnN0YXRlKSB7XG4gICAgICAob3B0aW9ucyBhcyBNdXRhYmxlPFByb3BlcnR5RGVjbGFyYXRpb24sICdhdHRyaWJ1dGUnPikuYXR0cmlidXRlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX19wcmVwYXJlKCk7XG4gICAgLy8gV2hldGhlciB0aGlzIHByb3BlcnR5IGlzIHdyYXBwaW5nIGFjY2Vzc29ycy5cbiAgICAvLyBIZWxwcyBjb250cm9sIHRoZSBpbml0aWFsIHZhbHVlIGNoYW5nZSBhbmQgcmVmbGVjdGlvbiBsb2dpYy5cbiAgICBpZiAodGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy53cmFwcGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5lbGVtZW50UHJvcGVydGllcy5zZXQobmFtZSwgb3B0aW9ucyk7XG4gICAgaWYgKCFvcHRpb25zLm5vQWNjZXNzb3IpIHtcbiAgICAgIGNvbnN0IGtleSA9IERFVl9NT0RFXG4gICAgICAgID8gLy8gVXNlIFN5bWJvbC5mb3IgaW4gZGV2IG1vZGUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gbWFpbnRhaW4gc3RhdGVcbiAgICAgICAgICAvLyB3aGVuIGRvaW5nIEhNUi5cbiAgICAgICAgICBTeW1ib2wuZm9yKGAke1N0cmluZyhuYW1lKX0gKEBwcm9wZXJ0eSgpIGNhY2hlKWApXG4gICAgICAgIDogU3ltYm9sKCk7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IobmFtZSwga2V5LCBvcHRpb25zKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcHJvcGVydHkgZGVzY3JpcHRvciB0byBiZSBkZWZpbmVkIG9uIHRoZSBnaXZlbiBuYW1lZCBwcm9wZXJ0eS5cbiAgICogSWYgbm8gZGVzY3JpcHRvciBpcyByZXR1cm5lZCwgdGhlIHByb3BlcnR5IHdpbGwgbm90IGJlY29tZSBhbiBhY2Nlc3Nvci5cbiAgICogRm9yIGV4YW1wbGUsXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNsYXNzIE15RWxlbWVudCBleHRlbmRzIExpdEVsZW1lbnQge1xuICAgKiAgIHN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IobmFtZSwga2V5LCBvcHRpb25zKSB7XG4gICAqICAgICBjb25zdCBkZWZhdWx0RGVzY3JpcHRvciA9XG4gICAqICAgICAgICAgc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG5hbWUsIGtleSwgb3B0aW9ucyk7XG4gICAqICAgICBjb25zdCBzZXR0ZXIgPSBkZWZhdWx0RGVzY3JpcHRvci5zZXQ7XG4gICAqICAgICByZXR1cm4ge1xuICAgKiAgICAgICBnZXQ6IGRlZmF1bHREZXNjcmlwdG9yLmdldCxcbiAgICogICAgICAgc2V0KHZhbHVlKSB7XG4gICAqICAgICAgICAgc2V0dGVyLmNhbGwodGhpcywgdmFsdWUpO1xuICAgKiAgICAgICAgIC8vIGN1c3RvbSBhY3Rpb24uXG4gICAqICAgICAgIH0sXG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgKiAgICAgfVxuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQG5vY29sbGFwc2VcbiAgICogQGNhdGVnb3J5IHByb3BlcnRpZXNcbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKFxuICAgIG5hbWU6IFByb3BlcnR5S2V5LFxuICAgIGtleTogc3RyaW5nIHwgc3ltYm9sLFxuICAgIG9wdGlvbnM6IFByb3BlcnR5RGVjbGFyYXRpb25cbiAgKTogUHJvcGVydHlEZXNjcmlwdG9yIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB7Z2V0LCBzZXR9ID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMucHJvdG90eXBlLCBuYW1lKSA/PyB7XG4gICAgICBnZXQodGhpczogUmVhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tleSBhcyBrZXlvZiB0eXBlb2YgdGhpc107XG4gICAgICB9LFxuICAgICAgc2V0KHRoaXM6IFJlYWN0aXZlRWxlbWVudCwgdjogdW5rbm93bikge1xuICAgICAgICAodGhpcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+KVtrZXldID0gdjtcbiAgICAgIH0sXG4gICAgfTtcbiAgICBpZiAoREVWX01PREUgJiYgZ2V0ID09IG51bGwpIHtcbiAgICAgIGlmICgndmFsdWUnIGluIChnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcy5wcm90b3R5cGUsIG5hbWUpID8/IHt9KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZpZWxkICR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKG5hbWUpKX0gb24gYCArXG4gICAgICAgICAgICBgJHt0aGlzLm5hbWV9IHdhcyBkZWNsYXJlZCBhcyBhIHJlYWN0aXZlIHByb3BlcnR5IGAgK1xuICAgICAgICAgICAgYGJ1dCBpdCdzIGFjdHVhbGx5IGRlY2xhcmVkIGFzIGEgdmFsdWUgb24gdGhlIHByb3RvdHlwZS4gYCArXG4gICAgICAgICAgICBgVXN1YWxseSB0aGlzIGlzIGR1ZSB0byB1c2luZyBAcHJvcGVydHkgb3IgQHN0YXRlIG9uIGEgbWV0aG9kLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlzc3VlV2FybmluZyhcbiAgICAgICAgJ3JlYWN0aXZlLXByb3BlcnR5LXdpdGhvdXQtZ2V0dGVyJyxcbiAgICAgICAgYEZpZWxkICR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKG5hbWUpKX0gb24gYCArXG4gICAgICAgICAgYCR7dGhpcy5uYW1lfSB3YXMgZGVjbGFyZWQgYXMgYSByZWFjdGl2ZSBwcm9wZXJ0eSBgICtcbiAgICAgICAgICBgYnV0IGl0IGRvZXMgbm90IGhhdmUgYSBnZXR0ZXIuIFRoaXMgd2lsbCBiZSBhbiBlcnJvciBpbiBhIGAgK1xuICAgICAgICAgIGBmdXR1cmUgdmVyc2lvbiBvZiBMaXQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldCxcbiAgICAgIHNldCh0aGlzOiBSZWFjdGl2ZUVsZW1lbnQsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gZ2V0Py5jYWxsKHRoaXMpO1xuICAgICAgICBzZXQ/LmNhbGwodGhpcywgdmFsdWUpO1xuICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUobmFtZSwgb2xkVmFsdWUsIG9wdGlvbnMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAqIFRoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgd2l0aCBhIGBQcm9wZXJ0eURlY2xhcmF0aW9uYCB2aWEgdGhlIGBwcm9wZXJ0aWVzYFxuICAgKiBvYmplY3Qgb3IgdGhlIGBAcHJvcGVydHlgIGRlY29yYXRvciBhbmQgYXJlIHJlZ2lzdGVyZWQgaW5cbiAgICogYGNyZWF0ZVByb3BlcnR5KC4uLilgLlxuICAgKlxuICAgKiBOb3RlLCB0aGlzIG1ldGhvZCBzaG91bGQgYmUgY29uc2lkZXJlZCBcImZpbmFsXCIgYW5kIG5vdCBvdmVycmlkZGVuLiBUb1xuICAgKiBjdXN0b21pemUgdGhlIG9wdGlvbnMgZm9yIGEgZ2l2ZW4gcHJvcGVydHksIG92ZXJyaWRlXG4gICAqIHtAbGlua2NvZGUgY3JlYXRlUHJvcGVydHl9LlxuICAgKlxuICAgKiBAbm9jb2xsYXBzZVxuICAgKiBAZmluYWxcbiAgICogQGNhdGVnb3J5IHByb3BlcnRpZXNcbiAgICovXG4gIHN0YXRpYyBnZXRQcm9wZXJ0eU9wdGlvbnMobmFtZTogUHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllcy5nZXQobmFtZSkgPz8gZGVmYXVsdFByb3BlcnR5RGVjbGFyYXRpb247XG4gIH1cblxuICAvLyBUZW1wb3JhcnksIHVudGlsIGdvb2dsZTMgaXMgb24gVHlwZVNjcmlwdCA1LjJcbiAgZGVjbGFyZSBzdGF0aWMgW1N5bWJvbC5tZXRhZGF0YV06IG9iamVjdCAmIFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHN0YXRpYyBvd24gcHJvcGVydGllcyBvZiB0aGUgY2xhc3MgdXNlZCBpbiBib29ra2VlcGluZ1xuICAgKiBmb3IgZWxlbWVudCBwcm9wZXJ0aWVzLCBpbml0aWFsaXplcnMsIGV0Yy5cbiAgICpcbiAgICogQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBieSBjb2RlIHRoYXQgbmVlZHMgdG8gZW5zdXJlIHRoZXNlXG4gICAqIHByb3BlcnRpZXMgZXhpc3QgYmVmb3JlIHVzaW5nIHRoZW0uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhlIHN1cGVyY2xhc3MgaXMgZmluYWxpemVkIHNvIHRoYXQgaW5oZXJpdGVkXG4gICAqIHByb3BlcnR5IG1ldGFkYXRhIGNhbiBiZSBjb3BpZWQgZG93bi5cbiAgICogQG5vY29sbGFwc2VcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9fcHJlcGFyZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ2VsZW1lbnRQcm9wZXJ0aWVzJywgdGhpcykpXG4gICAgKSB7XG4gICAgICAvLyBBbHJlYWR5IHByZXBhcmVkXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEZpbmFsaXplIGFueSBzdXBlcmNsYXNzZXNcbiAgICBjb25zdCBzdXBlckN0b3IgPSBnZXRQcm90b3R5cGVPZih0aGlzKSBhcyB0eXBlb2YgUmVhY3RpdmVFbGVtZW50O1xuICAgIHN1cGVyQ3Rvci5maW5hbGl6ZSgpO1xuXG4gICAgLy8gQ3JlYXRlIG93biBzZXQgb2YgaW5pdGlhbGl6ZXJzIGZvciB0aGlzIGNsYXNzIGlmIGFueSBleGlzdCBvbiB0aGVcbiAgICAvLyBzdXBlcmNsYXNzIGFuZCBjb3B5IHRoZW0gZG93bi4gTm90ZSwgZm9yIGEgc21hbGwgcGVyZiBib29zdCwgYXZvaWRcbiAgICAvLyBjcmVhdGluZyBpbml0aWFsaXplcnMgdW5sZXNzIG5lZWRlZC5cbiAgICBpZiAoc3VwZXJDdG9yLl9pbml0aWFsaXplcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZXJzID0gWy4uLnN1cGVyQ3Rvci5faW5pdGlhbGl6ZXJzXTtcbiAgICB9XG4gICAgLy8gSW5pdGlhbGl6ZSBlbGVtZW50UHJvcGVydGllcyBmcm9tIHRoZSBzdXBlcmNsYXNzXG4gICAgdGhpcy5lbGVtZW50UHJvcGVydGllcyA9IG5ldyBNYXAoc3VwZXJDdG9yLmVsZW1lbnRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5pc2hlcyBzZXR0aW5nIHVwIHRoZSBjbGFzcyBzbyB0aGF0IGl0J3MgcmVhZHkgdG8gYmUgcmVnaXN0ZXJlZFxuICAgKiBhcyBhIGN1c3RvbSBlbGVtZW50IGFuZCBpbnN0YW50aWF0ZWQuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgUmVhY3RpdmVFbGVtZW50Lm9ic2VydmVkQXR0cmlidXRlcyBnZXR0ZXIuXG4gICAqIElmIHlvdSBvdmVycmlkZSB0aGUgb2JzZXJ2ZWRBdHRyaWJ1dGVzIGdldHRlciwgeW91IG11c3QgZWl0aGVyIGNhbGxcbiAgICogc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzIHRvIHRyaWdnZXIgZmluYWxpemF0aW9uLCBvciBjYWxsIGZpbmFsaXplKClcbiAgICogeW91cnNlbGYuXG4gICAqXG4gICAqIEBub2NvbGxhcHNlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsaXplKCkge1xuICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ2ZpbmFsaXplZCcsIHRoaXMpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZpbmFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5fX3ByZXBhcmUoKTtcblxuICAgIC8vIENyZWF0ZSBwcm9wZXJ0aWVzIGZyb20gdGhlIHN0YXRpYyBwcm9wZXJ0aWVzIGJsb2NrOlxuICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ3Byb3BlcnRpZXMnLCB0aGlzKSkpIHtcbiAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgY29uc3QgcHJvcEtleXMgPSBbXG4gICAgICAgIC4uLmdldE93blByb3BlcnR5TmFtZXMocHJvcHMpLFxuICAgICAgICAuLi5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcHMpLFxuICAgICAgXSBhcyBBcnJheTxrZXlvZiB0eXBlb2YgcHJvcHM+O1xuICAgICAgZm9yIChjb25zdCBwIG9mIHByb3BLZXlzKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlUHJvcGVydHkocCwgcHJvcHNbcF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENyZWF0ZSBwcm9wZXJ0aWVzIGZyb20gc3RhbmRhcmQgZGVjb3JhdG9yIG1ldGFkYXRhOlxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpc1tTeW1ib2wubWV0YWRhdGFdO1xuICAgIGlmIChtZXRhZGF0YSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IGxpdFByb3BlcnR5TWV0YWRhdGEuZ2V0KG1ldGFkYXRhKTtcbiAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBbcCwgb3B0aW9uc10gb2YgcHJvcGVydGllcykge1xuICAgICAgICAgIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuc2V0KHAsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBhdHRyaWJ1dGUtdG8tcHJvcGVydHkgbWFwXG4gICAgdGhpcy5fX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAgPSBuZXcgTWFwKCk7XG4gICAgZm9yIChjb25zdCBbcCwgb3B0aW9uc10gb2YgdGhpcy5lbGVtZW50UHJvcGVydGllcykge1xuICAgICAgY29uc3QgYXR0ciA9IHRoaXMuX19hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkocCwgb3B0aW9ucyk7XG4gICAgICBpZiAoYXR0ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX19hdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLnNldChhdHRyLCBwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmVsZW1lbnRTdHlsZXMgPSB0aGlzLmZpbmFsaXplU3R5bGVzKHRoaXMuc3R5bGVzKTtcblxuICAgIGlmIChERVZfTU9ERSkge1xuICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoJ2NyZWF0ZVByb3BlcnR5JykpIHtcbiAgICAgICAgaXNzdWVXYXJuaW5nKFxuICAgICAgICAgICduby1vdmVycmlkZS1jcmVhdGUtcHJvcGVydHknLFxuICAgICAgICAgICdPdmVycmlkaW5nIFJlYWN0aXZlRWxlbWVudC5jcmVhdGVQcm9wZXJ0eSgpIGlzIGRlcHJlY2F0ZWQuICcgK1xuICAgICAgICAgICAgJ1RoZSBvdmVycmlkZSB3aWxsIG5vdCBiZSBjYWxsZWQgd2l0aCBzdGFuZGFyZCBkZWNvcmF0b3JzJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoJ2dldFByb3BlcnR5RGVzY3JpcHRvcicpKSB7XG4gICAgICAgIGlzc3VlV2FybmluZyhcbiAgICAgICAgICAnbm8tb3ZlcnJpZGUtZ2V0LXByb3BlcnR5LWRlc2NyaXB0b3InLFxuICAgICAgICAgICdPdmVycmlkaW5nIFJlYWN0aXZlRWxlbWVudC5nZXRQcm9wZXJ0eURlc2NyaXB0b3IoKSBpcyBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdUaGUgb3ZlcnJpZGUgd2lsbCBub3QgYmUgY2FsbGVkIHdpdGggc3RhbmRhcmQgZGVjb3JhdG9ycydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3B0aW9ucyB1c2VkIHdoZW4gY2FsbGluZyBgYXR0YWNoU2hhZG93YC4gU2V0IHRoaXMgcHJvcGVydHkgdG8gY3VzdG9taXplXG4gICAqIHRoZSBvcHRpb25zIGZvciB0aGUgc2hhZG93Um9vdDsgZm9yIGV4YW1wbGUsIHRvIGNyZWF0ZSBhIGNsb3NlZFxuICAgKiBzaGFkb3dSb290OiBge21vZGU6ICdjbG9zZWQnfWAuXG4gICAqXG4gICAqIE5vdGUsIHRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgaW4gYGNyZWF0ZVJlbmRlclJvb3RgLiBJZiB0aGlzIG1ldGhvZFxuICAgKiBpcyBjdXN0b21pemVkLCBvcHRpb25zIHNob3VsZCBiZSByZXNwZWN0ZWQgaWYgcG9zc2libGUuXG4gICAqIEBub2NvbGxhcHNlXG4gICAqIEBjYXRlZ29yeSByZW5kZXJpbmdcbiAgICovXG4gIHN0YXRpYyBzaGFkb3dSb290T3B0aW9uczogU2hhZG93Um9vdEluaXQgPSB7bW9kZTogJ29wZW4nfTtcblxuICAvKipcbiAgICogVGFrZXMgdGhlIHN0eWxlcyB0aGUgdXNlciBzdXBwbGllZCB2aWEgdGhlIGBzdGF0aWMgc3R5bGVzYCBwcm9wZXJ0eSBhbmRcbiAgICogcmV0dXJucyB0aGUgYXJyYXkgb2Ygc3R5bGVzIHRvIGFwcGx5IHRvIHRoZSBlbGVtZW50LlxuICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBpbnRlZ3JhdGUgaW50byBhIHN0eWxlIG1hbmFnZW1lbnQgc3lzdGVtLlxuICAgKlxuICAgKiBTdHlsZXMgYXJlIGRlZHVwbGljYXRlZCBwcmVzZXJ2aW5nIHRoZSBfbGFzdF8gaW5zdGFuY2UgaW4gdGhlIGxpc3QuIFRoaXNcbiAgICogaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdG8gYXZvaWQgZHVwbGljYXRlZCBzdHlsZXMgdGhhdCBjYW4gb2NjdXJcbiAgICogZXNwZWNpYWxseSB3aGVuIGNvbXBvc2luZyB2aWEgc3ViY2xhc3NpbmcuIFRoZSBsYXN0IGl0ZW0gaXMga2VwdCB0byB0cnlcbiAgICogdG8gcHJlc2VydmUgdGhlIGNhc2NhZGUgb3JkZXIgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IGl0J3MgbW9zdCBpbXBvcnRhbnRcbiAgICogdGhhdCBsYXN0IGFkZGVkIHN0eWxlcyBvdmVycmlkZSBwcmV2aW91cyBzdHlsZXMuXG4gICAqXG4gICAqIEBub2NvbGxhcHNlXG4gICAqIEBjYXRlZ29yeSBzdHlsZXNcbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgZmluYWxpemVTdHlsZXMoXG4gICAgc3R5bGVzPzogQ1NTUmVzdWx0R3JvdXBcbiAgKTogQXJyYXk8Q1NTUmVzdWx0T3JOYXRpdmU+IHtcbiAgICBjb25zdCBlbGVtZW50U3R5bGVzID0gW107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3R5bGVzKSkge1xuICAgICAgLy8gRGVkdXBlIHRoZSBmbGF0dGVuZWQgYXJyYXkgaW4gcmV2ZXJzZSBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgbGFzdCBpdGVtcy5cbiAgICAgIC8vIENhc3RpbmcgdG8gQXJyYXk8dW5rbm93bj4gd29ya3MgYXJvdW5kIFRTIGVycm9yIHRoYXRcbiAgICAgIC8vIGFwcGVhcnMgdG8gY29tZSBmcm9tIHRyeWluZyB0byBmbGF0dGVuIGEgdHlwZSBDU1NSZXN1bHRBcnJheS5cbiAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoKHN0eWxlcyBhcyBBcnJheTx1bmtub3duPikuZmxhdChJbmZpbml0eSkucmV2ZXJzZSgpKTtcbiAgICAgIC8vIFRoZW4gcHJlc2VydmUgb3JpZ2luYWwgb3JkZXIgYnkgYWRkaW5nIHRoZSBzZXQgaXRlbXMgaW4gcmV2ZXJzZSBvcmRlci5cbiAgICAgIGZvciAoY29uc3QgcyBvZiBzZXQpIHtcbiAgICAgICAgZWxlbWVudFN0eWxlcy51bnNoaWZ0KGdldENvbXBhdGlibGVTdHlsZShzIGFzIENTU1Jlc3VsdE9yTmF0aXZlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZWxlbWVudFN0eWxlcy5wdXNoKGdldENvbXBhdGlibGVTdHlsZShzdHlsZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRTdHlsZXM7XG4gIH1cblxuICAvKipcbiAgICogTm9kZSBvciBTaGFkb3dSb290IGludG8gd2hpY2ggZWxlbWVudCBET00gc2hvdWxkIGJlIHJlbmRlcmVkLiBEZWZhdWx0c1xuICAgKiB0byBhbiBvcGVuIHNoYWRvd1Jvb3QuXG4gICAqIEBjYXRlZ29yeSByZW5kZXJpbmdcbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlclJvb3QhOiBIVE1MRWxlbWVudCB8IERvY3VtZW50RnJhZ21lbnQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBnaXZlbiBhdHRyaWJ1dGUgYG5hbWVgLlxuICAgKiBAbm9jb2xsYXBzZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX19hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkoXG4gICAgbmFtZTogUHJvcGVydHlLZXksXG4gICAgb3B0aW9uczogUHJvcGVydHlEZWNsYXJhdGlvblxuICApIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBvcHRpb25zLmF0dHJpYnV0ZTtcbiAgICByZXR1cm4gYXR0cmlidXRlID09PSBmYWxzZVxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdHlwZW9mIGF0dHJpYnV0ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBhdHRyaWJ1dGVcbiAgICAgICAgOiB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IG5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gSW5pdGlhbGl6ZSB0byBhbiB1bnJlc29sdmVkIFByb21pc2Ugc28gd2UgY2FuIG1ha2Ugc3VyZSB0aGUgZWxlbWVudCBoYXNcbiAgLy8gY29ubmVjdGVkIGJlZm9yZSBmaXJzdCB1cGRhdGUuXG4gIHByaXZhdGUgX191cGRhdGVQcm9taXNlITogUHJvbWlzZTxib29sZWFuPjtcblxuICAvKipcbiAgICogVHJ1ZSBpZiB0aGVyZSBpcyBhIHBlbmRpbmcgdXBkYXRlIGFzIGEgcmVzdWx0IG9mIGNhbGxpbmcgYHJlcXVlc3RVcGRhdGUoKWAuXG4gICAqIFNob3VsZCBvbmx5IGJlIHJlYWQuXG4gICAqIEBjYXRlZ29yeSB1cGRhdGVzXG4gICAqL1xuICBpc1VwZGF0ZVBlbmRpbmcgPSBmYWxzZTtcblxuICAvKipcbiAgICogSXMgc2V0IHRvIGB0cnVlYCBhZnRlciB0aGUgZmlyc3QgdXBkYXRlLiBUaGUgZWxlbWVudCBjb2RlIGNhbm5vdCBhc3N1bWVcbiAgICogdGhhdCBgcmVuZGVyUm9vdGAgZXhpc3RzIGJlZm9yZSB0aGUgZWxlbWVudCBgaGFzVXBkYXRlZGAuXG4gICAqIEBjYXRlZ29yeSB1cGRhdGVzXG4gICAqL1xuICBoYXNVcGRhdGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE1hcCB3aXRoIGtleXMgZm9yIGFueSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0XG4gICAqIHVwZGF0ZSBjeWNsZSB3aXRoIHByZXZpb3VzIHZhbHVlcy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfJGNoYW5nZWRQcm9wZXJ0aWVzITogUHJvcGVydHlWYWx1ZXM7XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgcHJvcGVydHkgZGVmYXVsdCB2YWx1ZXMgd2hlbiB0aGVcbiAgICogYHVzZURlZmF1bHRgIG9wdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBfX2RlZmF1bHRWYWx1ZXM/OiBNYXA8UHJvcGVydHlLZXksIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlIHJlZmxlY3RlZCB3aGVuIHVwZGF0ZWQuXG4gICAqL1xuICBwcml2YXRlIF9fcmVmbGVjdGluZ1Byb3BlcnRpZXM/OiBTZXQ8UHJvcGVydHlLZXk+O1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIGN1cnJlbnRseSByZWZsZWN0aW5nIHByb3BlcnR5XG4gICAqL1xuICBwcml2YXRlIF9fcmVmbGVjdGluZ1Byb3BlcnR5OiBQcm9wZXJ0eUtleSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgY29udHJvbGxlcnMuXG4gICAqL1xuICBwcml2YXRlIF9fY29udHJvbGxlcnM/OiBTZXQ8UmVhY3RpdmVDb250cm9sbGVyPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX19pbml0aWFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgb25seSBvdmVycmlkZSBwb2ludCBmb3IgY3VzdG9taXppbmcgd29yayBkb25lIHdoZW4gZWxlbWVudHNcbiAgICogYXJlIGNvbnN0cnVjdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfX2luaXRpYWxpemUoKSB7XG4gICAgdGhpcy5fX3VwZGF0ZVByb21pc2UgPSBuZXcgUHJvbWlzZTxib29sZWFuPihcbiAgICAgIChyZXMpID0+ICh0aGlzLmVuYWJsZVVwZGF0aW5nID0gcmVzKVxuICAgICk7XG4gICAgdGhpcy5fJGNoYW5nZWRQcm9wZXJ0aWVzID0gbmV3IE1hcCgpO1xuICAgIC8vIFRoaXMgZW5xdWV1ZXMgYSBtaWNyb3Rhc2sgdGhhdCBtdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IHVwZGF0ZSwgc28gaXRcbiAgICAvLyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgcmVxdWVzdFVwZGF0ZSgpXG4gICAgdGhpcy5fX3NhdmVJbnN0YW5jZVByb3BlcnRpZXMoKTtcbiAgICAvLyBlbnN1cmVzIGZpcnN0IHVwZGF0ZSB3aWxsIGJlIGNhdWdodCBieSBhbiBlYXJseSBhY2Nlc3Mgb2ZcbiAgICAvLyBgdXBkYXRlQ29tcGxldGVgXG4gICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIFJlYWN0aXZlRWxlbWVudCkuX2luaXRpYWxpemVycz8uZm9yRWFjaCgoaSkgPT5cbiAgICAgIGkodGhpcylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGBSZWFjdGl2ZUNvbnRyb2xsZXJgIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBlbGVtZW50J3MgcmVhY3RpdmVcbiAgICogdXBkYXRlIGN5Y2xlLiBUaGUgZWxlbWVudCBhdXRvbWF0aWNhbGx5IGNhbGxzIGludG8gYW55IHJlZ2lzdGVyZWRcbiAgICogY29udHJvbGxlcnMgZHVyaW5nIGl0cyBsaWZlY3ljbGUgY2FsbGJhY2tzLlxuICAgKlxuICAgKiBJZiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQgd2hlbiBgYWRkQ29udHJvbGxlcigpYCBpcyBjYWxsZWQsIHRoZVxuICAgKiBjb250cm9sbGVyJ3MgYGhvc3RDb25uZWN0ZWQoKWAgY2FsbGJhY2sgd2lsbCBiZSBpbW1lZGlhdGVseSBjYWxsZWQuXG4gICAqIEBjYXRlZ29yeSBjb250cm9sbGVyc1xuICAgKi9cbiAgYWRkQ29udHJvbGxlcihjb250cm9sbGVyOiBSZWFjdGl2ZUNvbnRyb2xsZXIpIHtcbiAgICAodGhpcy5fX2NvbnRyb2xsZXJzID8/PSBuZXcgU2V0KCkpLmFkZChjb250cm9sbGVyKTtcbiAgICAvLyBJZiBhIGNvbnRyb2xsZXIgaXMgYWRkZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgaGFzIGJlZW4gY29ubmVjdGVkLFxuICAgIC8vIGNhbGwgaG9zdENvbm5lY3RlZC4gTm90ZSwgcmUtdXNpbmcgZXhpc3RlbmNlIG9mIGByZW5kZXJSb290YCBoZXJlXG4gICAgLy8gKHdoaWNoIGlzIHNldCBpbiBjb25uZWN0ZWRDYWxsYmFjaykgdG8gYXZvaWQgdGhlIG5lZWQgdG8gdHJhY2sgYVxuICAgIC8vIGZpcnN0IGNvbm5lY3RlZCBzdGF0ZS5cbiAgICBpZiAodGhpcy5yZW5kZXJSb290ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgY29udHJvbGxlci5ob3N0Q29ubmVjdGVkPy4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGBSZWFjdGl2ZUNvbnRyb2xsZXJgIGZyb20gdGhlIGVsZW1lbnQuXG4gICAqIEBjYXRlZ29yeSBjb250cm9sbGVyc1xuICAgKi9cbiAgcmVtb3ZlQ29udHJvbGxlcihjb250cm9sbGVyOiBSZWFjdGl2ZUNvbnRyb2xsZXIpIHtcbiAgICB0aGlzLl9fY29udHJvbGxlcnM/LmRlbGV0ZShjb250cm9sbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXhlcyBhbnkgcHJvcGVydGllcyBzZXQgb24gdGhlIGluc3RhbmNlIGJlZm9yZSB1cGdyYWRlIHRpbWUuXG4gICAqIE90aGVyd2lzZSB0aGVzZSB3b3VsZCBzaGFkb3cgdGhlIGFjY2Vzc29yIGFuZCBicmVhayB0aGVzZSBwcm9wZXJ0aWVzLlxuICAgKiBUaGUgcHJvcGVydGllcyBhcmUgc3RvcmVkIGluIGEgTWFwIHdoaWNoIGlzIHBsYXllZCBiYWNrIGFmdGVyIHRoZVxuICAgKiBjb25zdHJ1Y3RvciBydW5zLlxuICAgKi9cbiAgcHJpdmF0ZSBfX3NhdmVJbnN0YW5jZVByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgaW5zdGFuY2VQcm9wZXJ0aWVzID0gbmV3IE1hcDxQcm9wZXJ0eUtleSwgdW5rbm93bj4oKTtcbiAgICBjb25zdCBlbGVtZW50UHJvcGVydGllcyA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBSZWFjdGl2ZUVsZW1lbnQpXG4gICAgICAuZWxlbWVudFByb3BlcnRpZXM7XG4gICAgZm9yIChjb25zdCBwIG9mIGVsZW1lbnRQcm9wZXJ0aWVzLmtleXMoKSBhcyBJdGVyYWJsZUl0ZXJhdG9yPGtleW9mIHRoaXM+KSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShwKSkge1xuICAgICAgICBpbnN0YW5jZVByb3BlcnRpZXMuc2V0KHAsIHRoaXNbcF0pO1xuICAgICAgICBkZWxldGUgdGhpc1twXTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluc3RhbmNlUHJvcGVydGllcy5zaXplID4gMCkge1xuICAgICAgdGhpcy5fX2luc3RhbmNlUHJvcGVydGllcyA9IGluc3RhbmNlUHJvcGVydGllcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbm9kZSBpbnRvIHdoaWNoIHRoZSBlbGVtZW50IHNob3VsZCByZW5kZXIgYW5kIGJ5IGRlZmF1bHRcbiAgICogY3JlYXRlcyBhbmQgcmV0dXJucyBhbiBvcGVuIHNoYWRvd1Jvb3QuIEltcGxlbWVudCB0byBjdXN0b21pemUgd2hlcmUgdGhlXG4gICAqIGVsZW1lbnQncyBET00gaXMgcmVuZGVyZWQuIEZvciBleGFtcGxlLCB0byByZW5kZXIgaW50byB0aGUgZWxlbWVudCdzXG4gICAqIGNoaWxkTm9kZXMsIHJldHVybiBgdGhpc2AuXG4gICAqXG4gICAqIEByZXR1cm4gUmV0dXJucyBhIG5vZGUgaW50byB3aGljaCB0byByZW5kZXIuXG4gICAqIEBjYXRlZ29yeSByZW5kZXJpbmdcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZW5kZXJSb290KCk6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgY29uc3QgcmVuZGVyUm9vdCA9XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QgPz9cbiAgICAgIHRoaXMuYXR0YWNoU2hhZG93KFxuICAgICAgICAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgUmVhY3RpdmVFbGVtZW50KS5zaGFkb3dSb290T3B0aW9uc1xuICAgICAgKTtcbiAgICBhZG9wdFN0eWxlcyhcbiAgICAgIHJlbmRlclJvb3QsXG4gICAgICAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgUmVhY3RpdmVFbGVtZW50KS5lbGVtZW50U3R5bGVzXG4gICAgKTtcbiAgICByZXR1cm4gcmVuZGVyUm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBmaXJzdCBjb25uZWN0aW9uLCBjcmVhdGVzIHRoZSBlbGVtZW50J3MgcmVuZGVyUm9vdCwgc2V0cyB1cFxuICAgKiBlbGVtZW50IHN0eWxpbmcsIGFuZCBlbmFibGVzIHVwZGF0aW5nLlxuICAgKiBAY2F0ZWdvcnkgbGlmZWN5Y2xlXG4gICAqL1xuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAvLyBDcmVhdGUgcmVuZGVyUm9vdCBiZWZvcmUgY29udHJvbGxlcnMgYGhvc3RDb25uZWN0ZWRgXG4gICAgKHRoaXMgYXMgTXV0YWJsZTx0eXBlb2YgdGhpcywgJ3JlbmRlclJvb3QnPikucmVuZGVyUm9vdCA/Pz1cbiAgICAgIHRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpO1xuICAgIHRoaXMuZW5hYmxlVXBkYXRpbmcodHJ1ZSk7XG4gICAgdGhpcy5fX2NvbnRyb2xsZXJzPy5mb3JFYWNoKChjKSA9PiBjLmhvc3RDb25uZWN0ZWQ/LigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlLCB0aGlzIG1ldGhvZCBzaG91bGQgYmUgY29uc2lkZXJlZCBmaW5hbCBhbmQgbm90IG92ZXJyaWRkZW4uIEl0IGlzXG4gICAqIG92ZXJyaWRkZW4gb24gdGhlIGVsZW1lbnQgaW5zdGFuY2Ugd2l0aCBhIGZ1bmN0aW9uIHRoYXQgdHJpZ2dlcnMgdGhlIGZpcnN0XG4gICAqIHVwZGF0ZS5cbiAgICogQGNhdGVnb3J5IHVwZGF0ZXNcbiAgICovXG4gIHByb3RlY3RlZCBlbmFibGVVcGRhdGluZyhfcmVxdWVzdGVkVXBkYXRlOiBib29sZWFuKSB7fVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgZm9yIGBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpYCBpbiBleHRlbnNpb25zIHdoaWxlXG4gICAqIHJlc2VydmluZyB0aGUgcG9zc2liaWxpdHkgb2YgbWFraW5nIG5vbi1icmVha2luZyBmZWF0dXJlIGFkZGl0aW9uc1xuICAgKiB3aGVuIGRpc2Nvbm5lY3RpbmcgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLlxuICAgKiBAY2F0ZWdvcnkgbGlmZWN5Y2xlXG4gICAqL1xuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLl9fY29udHJvbGxlcnM/LmZvckVhY2goKGMpID0+IGMuaG9zdERpc2Nvbm5lY3RlZD8uKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXplcyBwcm9wZXJ0eSB2YWx1ZXMgd2hlbiBhdHRyaWJ1dGVzIGNoYW5nZS5cbiAgICpcbiAgICogU3BlY2lmaWNhbGx5LCB3aGVuIGFuIGF0dHJpYnV0ZSBpcyBzZXQsIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGlzIHNldC5cbiAgICogWW91IHNob3VsZCByYXJlbHkgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjay4gSWYgdGhpcyBtZXRob2QgaXNcbiAgICogb3ZlcnJpZGRlbiwgYHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBfb2xkLCB2YWx1ZSlgIG11c3QgYmVcbiAgICogY2FsbGVkLlxuICAgKlxuICAgKiBTZWUgW3Jlc3BvbmRpbmcgdG8gYXR0cmlidXRlIGNoYW5nZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJfY29tcG9uZW50cy9Vc2luZ19jdXN0b21fZWxlbWVudHMjcmVzcG9uZGluZ190b19hdHRyaWJ1dGVfY2hhbmdlcylcbiAgICogb24gTUROIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrYC5cbiAgICogQGNhdGVnb3J5IGF0dHJpYnV0ZXNcbiAgICovXG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgX29sZDogc3RyaW5nIHwgbnVsbCxcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbFxuICApIHtcbiAgICB0aGlzLl8kYXR0cmlidXRlVG9Qcm9wZXJ0eShuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9fcHJvcGVydHlUb0F0dHJpYnV0ZShuYW1lOiBQcm9wZXJ0eUtleSwgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBlbGVtUHJvcGVydGllczogUHJvcGVydHlEZWNsYXJhdGlvbk1hcCA9IChcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIFJlYWN0aXZlRWxlbWVudFxuICAgICkuZWxlbWVudFByb3BlcnRpZXM7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGVsZW1Qcm9wZXJ0aWVzLmdldChuYW1lKSE7XG4gICAgY29uc3QgYXR0ciA9IChcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIFJlYWN0aXZlRWxlbWVudFxuICAgICkuX19hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkobmFtZSwgb3B0aW9ucyk7XG4gICAgaWYgKGF0dHIgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnJlZmxlY3QgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlciA9XG4gICAgICAgIChvcHRpb25zLmNvbnZlcnRlciBhcyBDb21wbGV4QXR0cmlidXRlQ29udmVydGVyKT8udG9BdHRyaWJ1dGUgIT09XG4gICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9wdGlvbnMuY29udmVydGVyIGFzIENvbXBsZXhBdHRyaWJ1dGVDb252ZXJ0ZXIpXG4gICAgICAgICAgOiBkZWZhdWx0Q29udmVydGVyO1xuICAgICAgY29uc3QgYXR0clZhbHVlID0gY29udmVydGVyLnRvQXR0cmlidXRlISh2YWx1ZSwgb3B0aW9ucy50eXBlKTtcbiAgICAgIGlmIChcbiAgICAgICAgREVWX01PREUgJiZcbiAgICAgICAgKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIFJlYWN0aXZlRWxlbWVudCkuZW5hYmxlZFdhcm5pbmdzIS5pbmNsdWRlcyhcbiAgICAgICAgICAnbWlncmF0aW9uJ1xuICAgICAgICApICYmXG4gICAgICAgIGF0dHJWYWx1ZSA9PT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgaXNzdWVXYXJuaW5nKFxuICAgICAgICAgICd1bmRlZmluZWQtYXR0cmlidXRlLXZhbHVlJyxcbiAgICAgICAgICBgVGhlIGF0dHJpYnV0ZSB2YWx1ZSBmb3IgdGhlICR7bmFtZSBhcyBzdHJpbmd9IHByb3BlcnR5IGlzIGAgK1xuICAgICAgICAgICAgYHVuZGVmaW5lZCBvbiBlbGVtZW50ICR7dGhpcy5sb2NhbE5hbWV9LiBUaGUgYXR0cmlidXRlIHdpbGwgYmUgYCArXG4gICAgICAgICAgICBgcmVtb3ZlZCwgYnV0IGluIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIFxcYFJlYWN0aXZlRWxlbWVudFxcYCwgYCArXG4gICAgICAgICAgICBgdGhlIGF0dHJpYnV0ZSB3b3VsZCBub3QgaGF2ZSBjaGFuZ2VkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIFRyYWNrIGlmIHRoZSBwcm9wZXJ0eSBpcyBiZWluZyByZWZsZWN0ZWQgdG8gYXZvaWRcbiAgICAgIC8vIHNldHRpbmcgdGhlIHByb3BlcnR5IGFnYWluIHZpYSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrYC4gTm90ZTpcbiAgICAgIC8vIDEuIHRoaXMgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgdGhlIGNhbGxiYWNrIGlzIHN5bmNocm9ub3VzLlxuICAgICAgLy8gMi4gd2lsbCBiZWhhdmUgaW5jb3JyZWN0bHkgaWYgbXVsdGlwbGUgYXR0cmlidXRlcyBhcmUgaW4gdGhlIHJlYWN0aW9uXG4gICAgICAvLyBzdGFjayBhdCB0aW1lIG9mIGNhbGxpbmcuIEhvd2V2ZXIsIHNpbmNlIHdlIHByb2Nlc3MgYXR0cmlidXRlc1xuICAgICAgLy8gaW4gYHVwZGF0ZWAgdGhpcyBzaG91bGQgbm90IGJlIHBvc3NpYmxlIChvciBhbiBleHRyZW1lIGNvcm5lciBjYXNlXG4gICAgICAvLyB0aGF0IHdlJ2QgbGlrZSB0byBkaXNjb3ZlcikuXG4gICAgICAvLyBtYXJrIHN0YXRlIHJlZmxlY3RpbmdcbiAgICAgIHRoaXMuX19yZWZsZWN0aW5nUHJvcGVydHkgPSBuYW1lO1xuICAgICAgaWYgKGF0dHJWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoYXR0ciwgYXR0clZhbHVlIGFzIHN0cmluZyk7XG4gICAgICB9XG4gICAgICAvLyBtYXJrIHN0YXRlIG5vdCByZWZsZWN0aW5nXG4gICAgICB0aGlzLl9fcmVmbGVjdGluZ1Byb3BlcnR5ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIF8kYXR0cmlidXRlVG9Qcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgY29uc3QgY3RvciA9IHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIFJlYWN0aXZlRWxlbWVudDtcbiAgICAvLyBOb3RlLCBoaW50IHRoaXMgYXMgYW4gYEF0dHJpYnV0ZU1hcGAgc28gY2xvc3VyZSBjbGVhcmx5IHVuZGVyc3RhbmRzXG4gICAgLy8gdGhlIHR5cGU7IGl0IGhhcyBpc3N1ZXMgd2l0aCB0cmFja2luZyB0eXBlcyB0aHJvdWdoIHN0YXRpY3NcbiAgICBjb25zdCBwcm9wTmFtZSA9IChjdG9yLl9fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCBhcyBBdHRyaWJ1dGVNYXApLmdldChuYW1lKTtcbiAgICAvLyBVc2UgdHJhY2tpbmcgaW5mbyB0byBhdm9pZCByZWZsZWN0aW5nIGEgcHJvcGVydHkgdmFsdWUgdG8gYW4gYXR0cmlidXRlXG4gICAgLy8gaWYgaXQgd2FzIGp1c3Qgc2V0IGJlY2F1c2UgdGhlIGF0dHJpYnV0ZSBjaGFuZ2VkLlxuICAgIGlmIChwcm9wTmFtZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX19yZWZsZWN0aW5nUHJvcGVydHkgIT09IHByb3BOYW1lKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gY3Rvci5nZXRQcm9wZXJ0eU9wdGlvbnMocHJvcE5hbWUpO1xuICAgICAgY29uc3QgY29udmVydGVyID1cbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuY29udmVydGVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB7ZnJvbUF0dHJpYnV0ZTogb3B0aW9ucy5jb252ZXJ0ZXJ9XG4gICAgICAgICAgOiBvcHRpb25zLmNvbnZlcnRlcj8uZnJvbUF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG9wdGlvbnMuY29udmVydGVyXG4gICAgICAgICAgICA6IGRlZmF1bHRDb252ZXJ0ZXI7XG4gICAgICAvLyBtYXJrIHN0YXRlIHJlZmxlY3RpbmdcbiAgICAgIHRoaXMuX19yZWZsZWN0aW5nUHJvcGVydHkgPSBwcm9wTmFtZTtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gY29udmVydGVyLmZyb21BdHRyaWJ1dGUhKHZhbHVlLCBvcHRpb25zLnR5cGUpO1xuICAgICAgdGhpc1twcm9wTmFtZSBhcyBrZXlvZiB0aGlzXSA9XG4gICAgICAgIGNvbnZlcnRlZFZhbHVlID8/XG4gICAgICAgIHRoaXMuX19kZWZhdWx0VmFsdWVzPy5nZXQocHJvcE5hbWUpID8/XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIChjb252ZXJ0ZWRWYWx1ZSBhcyBhbnkpO1xuICAgICAgLy8gbWFyayBzdGF0ZSBub3QgcmVmbGVjdGluZ1xuICAgICAgdGhpcy5fX3JlZmxlY3RpbmdQcm9wZXJ0eSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIGFuIHVwZGF0ZSB3aGljaCBpcyBwcm9jZXNzZWQgYXN5bmNocm9ub3VzbHkuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZFxuICAgKiB3aGVuIGFuIGVsZW1lbnQgc2hvdWxkIHVwZGF0ZSBiYXNlZCBvbiBzb21lIHN0YXRlIG5vdCB0cmlnZ2VyZWQgYnkgc2V0dGluZ1xuICAgKiBhIHJlYWN0aXZlIHByb3BlcnR5LiBJbiB0aGlzIGNhc2UsIHBhc3Mgbm8gYXJndW1lbnRzLiBJdCBzaG91bGQgYWxzbyBiZVxuICAgKiBjYWxsZWQgd2hlbiBtYW51YWxseSBpbXBsZW1lbnRpbmcgYSBwcm9wZXJ0eSBzZXR0ZXIuIEluIHRoaXMgY2FzZSwgcGFzcyB0aGVcbiAgICogcHJvcGVydHkgYG5hbWVgIGFuZCBgb2xkVmFsdWVgIHRvIGVuc3VyZSB0aGF0IGFueSBjb25maWd1cmVkIHByb3BlcnR5XG4gICAqIG9wdGlvbnMgYXJlIGhvbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgcmVxdWVzdGluZyBwcm9wZXJ0eVxuICAgKiBAcGFyYW0gb2xkVmFsdWUgb2xkIHZhbHVlIG9mIHJlcXVlc3RpbmcgcHJvcGVydHlcbiAgICogQHBhcmFtIG9wdGlvbnMgcHJvcGVydHkgb3B0aW9ucyB0byB1c2UgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXNseVxuICAgKiAgICAgY29uZmlndXJlZCBvcHRpb25zXG4gICAqIEBwYXJhbSB1c2VOZXdWYWx1ZSBpZiB0cnVlLCB0aGUgbmV3VmFsdWUgYXJndW1lbnQgaXMgdXNlZCBpbnN0ZWFkIG9mXG4gICAqICAgICByZWFkaW5nIHRoZSBwcm9wZXJ0eSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdXNlIGlmIHRoZSByZWFjdGl2ZVxuICAgKiAgICAgcHJvcGVydHkgaXMgYSBzdGFuZGFyZCBwcml2YXRlIGFjY2Vzc29yLCBhcyBvcHBvc2VkIHRvIGEgcGxhaW5cbiAgICogICAgIHByb3BlcnR5LCBzaW5jZSBwcml2YXRlIG1lbWJlcnMgY2FuJ3QgYmUgZHluYW1pY2FsbHkgcmVhZCBieSBuYW1lLlxuICAgKiBAcGFyYW0gbmV3VmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIFRoaXMgaXMgb25seSB1c2VkIGlmXG4gICAqICAgICBgdXNlTmV3VmFsdWVgIGlzIHRydWUuXG4gICAqIEBjYXRlZ29yeSB1cGRhdGVzXG4gICAqL1xuICByZXF1ZXN0VXBkYXRlKFxuICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICBvbGRWYWx1ZT86IHVua25vd24sXG4gICAgb3B0aW9ucz86IFByb3BlcnR5RGVjbGFyYXRpb24sXG4gICAgdXNlTmV3VmFsdWUgPSBmYWxzZSxcbiAgICBuZXdWYWx1ZT86IHVua25vd25cbiAgKTogdm9pZCB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhIHByb3BlcnR5IGtleSwgcGVyZm9ybSBwcm9wZXJ0eSB1cGRhdGUgc3RlcHMuXG4gICAgaWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKERFVl9NT0RFICYmIChuYW1lIGFzIHVua25vd24pIGluc3RhbmNlb2YgRXZlbnQpIHtcbiAgICAgICAgaXNzdWVXYXJuaW5nKFxuICAgICAgICAgIGBgLFxuICAgICAgICAgIGBUaGUgcmVxdWVzdFVwZGF0ZSgpIG1ldGhvZCB3YXMgY2FsbGVkIHdpdGggYW4gRXZlbnQgYXMgdGhlIHByb3BlcnR5IG5hbWUuIFRoaXMgaXMgcHJvYmFibHkgYSBtaXN0YWtlIGNhdXNlZCBieSBiaW5kaW5nIHRoaXMucmVxdWVzdFVwZGF0ZSBhcyBhbiBldmVudCBsaXN0ZW5lci4gSW5zdGVhZCBiaW5kIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNhbGwgaXQgd2l0aCBubyBhcmd1bWVudHM6ICgpID0+IHRoaXMucmVxdWVzdFVwZGF0ZSgpYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgY3RvciA9IHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIFJlYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmICh1c2VOZXdWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzW25hbWUgYXMga2V5b2YgdGhpc107XG4gICAgICB9XG4gICAgICBvcHRpb25zID8/PSBjdG9yLmdldFByb3BlcnR5T3B0aW9ucyhuYW1lKTtcbiAgICAgIGNvbnN0IGNoYW5nZWQgPVxuICAgICAgICAob3B0aW9ucy5oYXNDaGFuZ2VkID8/IG5vdEVxdWFsKShuZXdWYWx1ZSwgb2xkVmFsdWUpIHx8XG4gICAgICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gY2hhbmdlLCBjaGVjayBhIGNvcm5lciBjYXNlIHRoYXQgY2FuIG9jY3VyIHdoZW5cbiAgICAgICAgLy8gMS4gdGhlcmUncyBhIGluaXRpYWwgdmFsdWUgd2hpY2ggd2FzIG5vdCByZWZsZWN0ZWRcbiAgICAgICAgLy8gMi4gdGhlIHByb3BlcnR5IGlzIHN1YnNlcXVlbnRseSBzZXQgdG8gdGhpcyB2YWx1ZS5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9wOiB7dXNlRGVmYXVsdDogdHJ1ZSwgcmVmbGVjdDogdHJ1ZX1gXG4gICAgICAgIC8vIGFuZCBlbC5wcm9wID0gJ2ZvbycuIFRoaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBjaGFuZ2UgaWYgdGhlXG4gICAgICAgIC8vIGF0dHJpYnV0ZSBpcyBub3Qgc2V0IGJlY2F1c2Ugd2Ugd2lsbCBub3cgcmVmbGVjdCB0aGUgcHJvcGVydHkgdG8gdGhlIGF0dHJpYnV0ZS5cbiAgICAgICAgKG9wdGlvbnMudXNlRGVmYXVsdCAmJlxuICAgICAgICAgIG9wdGlvbnMucmVmbGVjdCAmJlxuICAgICAgICAgIG5ld1ZhbHVlID09PSB0aGlzLl9fZGVmYXVsdFZhbHVlcz8uZ2V0KG5hbWUpICYmXG4gICAgICAgICAgIXRoaXMuaGFzQXR0cmlidXRlKGN0b3IuX19hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkobmFtZSwgb3B0aW9ucykhKSk7XG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLl8kY2hhbmdlUHJvcGVydHkobmFtZSwgb2xkVmFsdWUsIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWJvcnQgdGhlIHJlcXVlc3QgaWYgdGhlIHByb3BlcnR5IHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjaGFuZ2VkLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVXBkYXRlUGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX191cGRhdGVQcm9taXNlID0gdGhpcy5fX2VucXVldWVVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfJGNoYW5nZVByb3BlcnR5KFxuICAgIG5hbWU6IFByb3BlcnR5S2V5LFxuICAgIG9sZFZhbHVlOiB1bmtub3duLFxuICAgIHt1c2VEZWZhdWx0LCByZWZsZWN0LCB3cmFwcGVkfTogUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgICBpbml0aWFsaXplVmFsdWU/OiB1bmtub3duXG4gICkge1xuICAgIC8vIFJlY29yZCBkZWZhdWx0IHZhbHVlIHdoZW4gdXNlRGVmYXVsdCBpcyB1c2VkLiBUaGlzIGFsbG93cyB1cyB0b1xuICAgIC8vIHJlc3RvcmUgdGhpcyB2YWx1ZSB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgcmVtb3ZlZC5cbiAgICBpZiAodXNlRGVmYXVsdCAmJiAhKHRoaXMuX19kZWZhdWx0VmFsdWVzID8/PSBuZXcgTWFwKCkpLmhhcyhuYW1lKSkge1xuICAgICAgdGhpcy5fX2RlZmF1bHRWYWx1ZXMuc2V0KFxuICAgICAgICBuYW1lLFxuICAgICAgICBpbml0aWFsaXplVmFsdWUgPz8gb2xkVmFsdWUgPz8gdGhpc1tuYW1lIGFzIGtleW9mIHRoaXNdXG4gICAgICApO1xuICAgICAgLy8gaWYgdGhpcyBpcyBub3Qgd3JhcHBpbmcgYW4gYWNjZXNzb3IsIGl0IG11c3QgYmUgYW4gaW5pdGlhbCBzZXR0aW5nXG4gICAgICAvLyBhbmQgaW4gdGhpcyBjYXNlIHdlIGRvIG5vdCB3YW50IHRvIHJlY29yZCB0aGUgY2hhbmdlIG9yIHJlZmxlY3QuXG4gICAgICBpZiAod3JhcHBlZCAhPT0gdHJ1ZSB8fCBpbml0aWFsaXplVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFRPRE8gKGp1c3RpbmZhZ25hbmkpOiBDcmVhdGUgYSBiZW5jaG1hcmsgb2YgTWFwLmhhcygpICsgTWFwLnNldChcbiAgICAvLyB2cyBqdXN0IE1hcC5zZXQoKVxuICAgIGlmICghdGhpcy5fJGNoYW5nZWRQcm9wZXJ0aWVzLmhhcyhuYW1lKSkge1xuICAgICAgLy8gT24gdGhlIGluaXRpYWwgY2hhbmdlLCB0aGUgb2xkIHZhbHVlIHNob3VsZCBiZSBgdW5kZWZpbmVkYCwgZXhjZXB0XG4gICAgICAvLyB3aXRoIGB1c2VEZWZhdWx0YFxuICAgICAgaWYgKCF0aGlzLmhhc1VwZGF0ZWQgJiYgIXVzZURlZmF1bHQpIHtcbiAgICAgICAgb2xkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB0aGlzLl8kY2hhbmdlZFByb3BlcnRpZXMuc2V0KG5hbWUsIG9sZFZhbHVlKTtcbiAgICB9XG4gICAgLy8gQWRkIHRvIHJlZmxlY3RpbmcgcHJvcGVydGllcyBzZXQuXG4gICAgLy8gTm90ZSwgaXQncyBpbXBvcnRhbnQgdGhhdCBldmVyeSBjaGFuZ2UgaGFzIGEgY2hhbmNlIHRvIGFkZCB0aGVcbiAgICAvLyBwcm9wZXJ0eSB0byBgX19yZWZsZWN0aW5nUHJvcGVydGllc2AuIFRoaXMgZW5zdXJlcyBzZXR0aW5nXG4gICAgLy8gYXR0cmlidXRlICsgcHJvcGVydHkgcmVmbGVjdHMgY29ycmVjdGx5LlxuICAgIGlmIChyZWZsZWN0ID09PSB0cnVlICYmIHRoaXMuX19yZWZsZWN0aW5nUHJvcGVydHkgIT09IG5hbWUpIHtcbiAgICAgICh0aGlzLl9fcmVmbGVjdGluZ1Byb3BlcnRpZXMgPz89IG5ldyBTZXQ8UHJvcGVydHlLZXk+KCkpLmFkZChuYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgZWxlbWVudCB0byBhc3luY2hyb25vdXNseSB1cGRhdGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9fZW5xdWV1ZVVwZGF0ZSgpIHtcbiAgICB0aGlzLmlzVXBkYXRlUGVuZGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSBhbnkgcHJldmlvdXMgdXBkYXRlIGhhcyByZXNvbHZlZCBiZWZvcmUgdXBkYXRpbmcuXG4gICAgICAvLyBUaGlzIGBhd2FpdGAgYWxzbyBlbnN1cmVzIHRoYXQgcHJvcGVydHkgY2hhbmdlcyBhcmUgYmF0Y2hlZC5cbiAgICAgIGF3YWl0IHRoaXMuX191cGRhdGVQcm9taXNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFJlZmlyZSBhbnkgcHJldmlvdXMgZXJyb3JzIGFzeW5jIHNvIHRoZXkgZG8gbm90IGRpc3J1cHQgdGhlIHVwZGF0ZVxuICAgICAgLy8gY3ljbGUuIEVycm9ycyBhcmUgcmVmaXJlZCBzbyBkZXZlbG9wZXJzIGhhdmUgYSBjaGFuY2UgdG8gb2JzZXJ2ZVxuICAgICAgLy8gdGhlbSwgYW5kIHRoaXMgY2FuIGJlIGRvbmUgYnkgaW1wbGVtZW50aW5nXG4gICAgICAvLyBgd2luZG93Lm9udW5oYW5kbGVkcmVqZWN0aW9uYC5cbiAgICAgIFByb21pc2UucmVqZWN0KGUpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNjaGVkdWxlVXBkYXRlKCk7XG4gICAgLy8gSWYgYHNjaGVkdWxlVXBkYXRlYCByZXR1cm5zIGEgUHJvbWlzZSwgd2UgYXdhaXQgaXQuIFRoaXMgaXMgZG9uZSB0b1xuICAgIC8vIGVuYWJsZSBjb29yZGluYXRpbmcgdXBkYXRlcyB3aXRoIGEgc2NoZWR1bGVyLiBOb3RlLCB0aGUgcmVzdWx0IGlzXG4gICAgLy8gY2hlY2tlZCB0byBhdm9pZCBkZWxheWluZyBhbiBhZGRpdGlvbmFsIG1pY3JvdGFzayB1bmxlc3Mgd2UgbmVlZCB0by5cbiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgIGF3YWl0IHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuICF0aGlzLmlzVXBkYXRlUGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBTY2hlZHVsZXMgYW4gZWxlbWVudCB1cGRhdGUuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hhbmdlIHRoZVxuICAgKiB0aW1pbmcgb2YgdXBkYXRlcyBieSByZXR1cm5pbmcgYSBQcm9taXNlLiBUaGUgdXBkYXRlIHdpbGwgYXdhaXQgdGhlXG4gICAqIHJldHVybmVkIFByb21pc2UsIGFuZCB5b3Ugc2hvdWxkIHJlc29sdmUgdGhlIFByb21pc2UgdG8gYWxsb3cgdGhlIHVwZGF0ZVxuICAgKiB0byBwcm9jZWVkLiBJZiB0aGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuLCBgc3VwZXIuc2NoZWR1bGVVcGRhdGUoKWBcbiAgICogbXVzdCBiZSBjYWxsZWQuXG4gICAqXG4gICAqIEZvciBpbnN0YW5jZSwgdG8gc2NoZWR1bGUgdXBkYXRlcyB0byBvY2N1ciBqdXN0IGJlZm9yZSB0aGUgbmV4dCBmcmFtZTpcbiAgICpcbiAgICogYGBgdHNcbiAgICogb3ZlcnJpZGUgcHJvdGVjdGVkIGFzeW5jIHNjaGVkdWxlVXBkYXRlKCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgKiAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcmVzb2x2ZSgpKSk7XG4gICAqICAgc3VwZXIuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICogQGNhdGVnb3J5IHVwZGF0ZXNcbiAgICovXG4gIHByb3RlY3RlZCBzY2hlZHVsZVVwZGF0ZSgpOiB2b2lkIHwgUHJvbWlzZTx1bmtub3duPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wZXJmb3JtVXBkYXRlKCk7XG4gICAgaWYgKFxuICAgICAgREVWX01PREUgJiZcbiAgICAgICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBSZWFjdGl2ZUVsZW1lbnQpLmVuYWJsZWRXYXJuaW5ncyEuaW5jbHVkZXMoXG4gICAgICAgICdhc3luYy1wZXJmb3JtLXVwZGF0ZSdcbiAgICAgICkgJiZcbiAgICAgIHR5cGVvZiAocmVzdWx0IGFzIHVua25vd24gYXMgUHJvbWlzZTx1bmtub3duPiB8IHVuZGVmaW5lZCk/LnRoZW4gPT09XG4gICAgICAgICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIGlzc3VlV2FybmluZyhcbiAgICAgICAgJ2FzeW5jLXBlcmZvcm0tdXBkYXRlJyxcbiAgICAgICAgYEVsZW1lbnQgJHt0aGlzLmxvY2FsTmFtZX0gcmV0dXJuZWQgYSBQcm9taXNlIGZyb20gcGVyZm9ybVVwZGF0ZSgpLiBgICtcbiAgICAgICAgICBgVGhpcyBiZWhhdmlvciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgYCArXG4gICAgICAgICAgYHZlcnNpb24gb2YgUmVhY3RpdmVFbGVtZW50LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgYW4gZWxlbWVudCB1cGRhdGUuIE5vdGUsIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZHVyaW5nIHRoZVxuICAgKiB1cGRhdGUsIGBmaXJzdFVwZGF0ZWRgIGFuZCBgdXBkYXRlZGAgd2lsbCBub3QgYmUgY2FsbGVkLlxuICAgKlxuICAgKiBDYWxsIGBwZXJmb3JtVXBkYXRlKClgIHRvIGltbWVkaWF0ZWx5IHByb2Nlc3MgYSBwZW5kaW5nIHVwZGF0ZS4gVGhpcyBzaG91bGRcbiAgICogZ2VuZXJhbGx5IG5vdCBiZSBuZWVkZWQsIGJ1dCBpdCBjYW4gYmUgZG9uZSBpbiByYXJlIGNhc2VzIHdoZW4geW91IG5lZWQgdG9cbiAgICogdXBkYXRlIHN5bmNocm9ub3VzbHkuXG4gICAqXG4gICAqIEBjYXRlZ29yeSB1cGRhdGVzXG4gICAqL1xuICBwcm90ZWN0ZWQgcGVyZm9ybVVwZGF0ZSgpOiB2b2lkIHtcbiAgICAvLyBBYm9ydCBhbnkgdXBkYXRlIGlmIG9uZSBpcyBub3QgcGVuZGluZyB3aGVuIHRoaXMgaXMgY2FsbGVkLlxuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiBgcGVyZm9ybVVwZGF0ZWAgaXMgY2FsbGVkIGVhcmx5IHRvIFwiZmx1c2hcIlxuICAgIC8vIHRoZSB1cGRhdGUuXG4gICAgaWYgKCF0aGlzLmlzVXBkYXRlUGVuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkZWJ1Z0xvZ0V2ZW50Py4oe2tpbmQ6ICd1cGRhdGUnfSk7XG4gICAgaWYgKCF0aGlzLmhhc1VwZGF0ZWQpIHtcbiAgICAgIC8vIENyZWF0ZSByZW5kZXJSb290IGJlZm9yZSBmaXJzdCB1cGRhdGUuIFRoaXMgb2NjdXJzIGluIGBjb25uZWN0ZWRDYWxsYmFja2BcbiAgICAgIC8vIGJ1dCBpcyBkb25lIGhlcmUgdG8gc3VwcG9ydCBvdXQgb2YgdHJlZSBjYWxscyB0byBgZW5hYmxlVXBkYXRpbmdgL2BwZXJmb3JtVXBkYXRlYC5cbiAgICAgICh0aGlzIGFzIE11dGFibGU8dHlwZW9mIHRoaXMsICdyZW5kZXJSb290Jz4pLnJlbmRlclJvb3QgPz89XG4gICAgICAgIHRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpO1xuICAgICAgaWYgKERFVl9NT0RFKSB7XG4gICAgICAgIC8vIFByb2R1Y2Ugd2FybmluZyBpZiBhbnkgcmVhY3RpdmUgcHJvcGVydGllcyBvbiB0aGUgcHJvdG90eXBlIGFyZVxuICAgICAgICAvLyBzaGFkb3dlZCBieSBjbGFzcyBmaWVsZHMuIEluc3RhbmNlIGZpZWxkcyBzZXQgYmVmb3JlIHVwZ3JhZGUgYXJlXG4gICAgICAgIC8vIGRlbGV0ZWQgYnkgdGhpcyBwb2ludCwgc28gYW55IG93biBwcm9wZXJ0eSBpcyBjYXVzZWQgYnkgY2xhc3MgZmllbGRcbiAgICAgICAgLy8gaW5pdGlhbGl6YXRpb24gaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgICBjb25zdCBjdG9yID0gdGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgUmVhY3RpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBzaGFkb3dlZFByb3BlcnRpZXMgPSBbLi4uY3Rvci5lbGVtZW50UHJvcGVydGllcy5rZXlzKCldLmZpbHRlcihcbiAgICAgICAgICAocCkgPT4gdGhpcy5oYXNPd25Qcm9wZXJ0eShwKSAmJiBwIGluIGdldFByb3RvdHlwZU9mKHRoaXMpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzaGFkb3dlZFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBvbiBlbGVtZW50ICR7dGhpcy5sb2NhbE5hbWV9IHdpbGwgbm90IGAgK1xuICAgICAgICAgICAgICBgdHJpZ2dlciB1cGRhdGVzIGFzIGV4cGVjdGVkIGJlY2F1c2UgdGhleSBhcmUgc2V0IHVzaW5nIGNsYXNzIGAgK1xuICAgICAgICAgICAgICBgZmllbGRzOiAke3NoYWRvd2VkUHJvcGVydGllcy5qb2luKCcsICcpfS4gYCArXG4gICAgICAgICAgICAgIGBOYXRpdmUgY2xhc3MgZmllbGRzIGFuZCBzb21lIGNvbXBpbGVkIG91dHB1dCB3aWxsIG92ZXJ3cml0ZSBgICtcbiAgICAgICAgICAgICAgYGFjY2Vzc29ycyB1c2VkIGZvciBkZXRlY3RpbmcgY2hhbmdlcy4gU2VlIGAgK1xuICAgICAgICAgICAgICBgaHR0cHM6Ly9saXQuZGV2L21zZy9jbGFzcy1maWVsZC1zaGFkb3dpbmcgYCArXG4gICAgICAgICAgICAgIGBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gTWl4aW4gaW5zdGFuY2UgcHJvcGVydGllcyBvbmNlLCBpZiB0aGV5IGV4aXN0LlxuICAgICAgaWYgKHRoaXMuX19pbnN0YW5jZVByb3BlcnRpZXMpIHtcbiAgICAgICAgLy8gVE9ETyAoanVzdGluZmFnbmFuaSk6IHNob3VsZCB3ZSB1c2UgdGhlIHN0b3JlZCB2YWx1ZT8gQ291bGQgYSBuZXcgdmFsdWVcbiAgICAgICAgLy8gaGF2ZSBiZWVuIHNldCBzaW5jZSB3ZSBzdG9yZWQgdGhlIG93biBwcm9wZXJ0eSB2YWx1ZT9cbiAgICAgICAgZm9yIChjb25zdCBbcCwgdmFsdWVdIG9mIHRoaXMuX19pbnN0YW5jZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICB0aGlzW3AgYXMga2V5b2YgdGhpc10gPSB2YWx1ZSBhcyB0aGlzW2tleW9mIHRoaXNdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX19pbnN0YW5jZVByb3BlcnRpZXMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICAvLyBUcmlnZ2VyIGluaXRpYWwgdmFsdWUgcmVmbGVjdGlvbiBhbmQgcG9wdWxhdGUgdGhlIGluaXRpYWxcbiAgICAgIC8vIGBjaGFuZ2VkUHJvcGVydGllc2AgbWFwLCBidXQgb25seSBmb3IgdGhlIGNhc2Ugb2YgcHJvcGVydGllcyBjcmVhdGVkXG4gICAgICAvLyB2aWEgYGNyZWF0ZVByb3BlcnR5YCBvbiBhY2Nlc3NvcnMsIHdoaWNoIHdpbGwgbm90IGhhdmUgYWxyZWFkeVxuICAgICAgLy8gcG9wdWxhdGVkIHRoZSBgY2hhbmdlZFByb3BlcnRpZXNgIG1hcCBzaW5jZSB0aGV5IGFyZSBub3Qgc2V0LlxuICAgICAgLy8gV2UgY2FuJ3Qga25vdyBpZiB0aGVzZSBhY2Nlc3NvcnMgaGFkIGluaXRpYWxpemVycywgc28gd2UganVzdCBzZXRcbiAgICAgIC8vIHRoZW0gYW55d2F5IC0gYSBkaWZmZXJlbmNlIGZyb20gZXhwZXJpbWVudGFsIGRlY29yYXRvcnMgb24gZmllbGRzIGFuZFxuICAgICAgLy8gc3RhbmRhcmQgZGVjb3JhdG9ycyBvbiBhdXRvLWFjY2Vzc29ycy5cbiAgICAgIC8vIEZvciBjb250ZXh0IHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saXQvbGl0L3B1bGwvNDE4MyNpc3N1ZWNvbW1lbnQtMTcxMTk1OTYzNVxuICAgICAgY29uc3QgZWxlbWVudFByb3BlcnRpZXMgPSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgUmVhY3RpdmVFbGVtZW50KVxuICAgICAgICAuZWxlbWVudFByb3BlcnRpZXM7XG4gICAgICBpZiAoZWxlbWVudFByb3BlcnRpZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgZm9yIChjb25zdCBbcCwgb3B0aW9uc10gb2YgZWxlbWVudFByb3BlcnRpZXMpIHtcbiAgICAgICAgICBjb25zdCB7d3JhcHBlZH0gPSBvcHRpb25zO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1twIGFzIGtleW9mIHRoaXNdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHdyYXBwZWQgPT09IHRydWUgJiZcbiAgICAgICAgICAgICF0aGlzLl8kY2hhbmdlZFByb3BlcnRpZXMuaGFzKHApICYmXG4gICAgICAgICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl8kY2hhbmdlUHJvcGVydHkocCwgdW5kZWZpbmVkLCBvcHRpb25zLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBzaG91bGRVcGRhdGUgPSBmYWxzZTtcbiAgICBjb25zdCBjaGFuZ2VkUHJvcGVydGllcyA9IHRoaXMuXyRjaGFuZ2VkUHJvcGVydGllcztcbiAgICB0cnkge1xuICAgICAgc2hvdWxkVXBkYXRlID0gdGhpcy5zaG91bGRVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgICB0aGlzLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgICAgICB0aGlzLl9fY29udHJvbGxlcnM/LmZvckVhY2goKGMpID0+IGMuaG9zdFVwZGF0ZT8uKCkpO1xuICAgICAgICB0aGlzLnVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9fbWFya1VwZGF0ZWQoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBQcmV2ZW50IGBmaXJzdFVwZGF0ZWRgIGFuZCBgdXBkYXRlZGAgZnJvbSBydW5uaW5nIHdoZW4gdGhlcmUncyBhblxuICAgICAgLy8gdXBkYXRlIGV4Y2VwdGlvbi5cbiAgICAgIHNob3VsZFVwZGF0ZSA9IGZhbHNlO1xuICAgICAgLy8gRW5zdXJlIGVsZW1lbnQgY2FuIGFjY2VwdCBhZGRpdGlvbmFsIHVwZGF0ZXMgYWZ0ZXIgYW4gZXhjZXB0aW9uLlxuICAgICAgdGhpcy5fX21hcmtVcGRhdGVkKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICAvLyBUaGUgdXBkYXRlIGlzIG5vIGxvbmdlciBjb25zaWRlcmVkIHBlbmRpbmcgYW5kIGZ1cnRoZXIgdXBkYXRlcyBhcmUgbm93IGFsbG93ZWQuXG4gICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgdGhpcy5fJGRpZFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZWQgYmVmb3JlIGB1cGRhdGUoKWAgdG8gY29tcHV0ZSB2YWx1ZXMgbmVlZGVkIGR1cmluZyB0aGUgdXBkYXRlLlxuICAgKlxuICAgKiBJbXBsZW1lbnQgYHdpbGxVcGRhdGVgIHRvIGNvbXB1dGUgcHJvcGVydHkgdmFsdWVzIHRoYXQgZGVwZW5kIG9uIG90aGVyXG4gICAqIHByb3BlcnRpZXMgYW5kIGFyZSB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSB1cGRhdGUgcHJvY2Vzcy5cbiAgICpcbiAgICogYGBgdHNcbiAgICogd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcykge1xuICAgKiAgIC8vIG9ubHkgbmVlZCB0byBjaGVjayBjaGFuZ2VkIHByb3BlcnRpZXMgZm9yIGFuIGV4cGVuc2l2ZSBjb21wdXRhdGlvbi5cbiAgICogICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdmaXJzdE5hbWUnKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2xhc3ROYW1lJykpIHtcbiAgICogICAgIHRoaXMuc2hhID0gY29tcHV0ZVNIQShgJHt0aGlzLmZpcnN0TmFtZX0gJHt0aGlzLmxhc3ROYW1lfWApO1xuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiByZW5kZXIoKSB7XG4gICAqICAgcmV0dXJuIGh0bWxgU0hBOiAke3RoaXMuc2hhfWA7XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBjYXRlZ29yeSB1cGRhdGVzXG4gICAqL1xuICBwcm90ZWN0ZWQgd2lsbFVwZGF0ZShfY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzKTogdm9pZCB7fVxuXG4gIC8vIE5vdGUsIHRoaXMgaXMgYW4gb3ZlcnJpZGUgcG9pbnQgZm9yIHBvbHlmaWxsLXN1cHBvcnQuXG4gIC8vIEBpbnRlcm5hbFxuICBfJGRpZFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXMpIHtcbiAgICB0aGlzLl9fY29udHJvbGxlcnM/LmZvckVhY2goKGMpID0+IGMuaG9zdFVwZGF0ZWQ/LigpKTtcbiAgICBpZiAoIXRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgdGhpcy5oYXNVcGRhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICBpZiAoXG4gICAgICBERVZfTU9ERSAmJlxuICAgICAgdGhpcy5pc1VwZGF0ZVBlbmRpbmcgJiZcbiAgICAgICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBSZWFjdGl2ZUVsZW1lbnQpLmVuYWJsZWRXYXJuaW5ncyEuaW5jbHVkZXMoXG4gICAgICAgICdjaGFuZ2UtaW4tdXBkYXRlJ1xuICAgICAgKVxuICAgICkge1xuICAgICAgaXNzdWVXYXJuaW5nKFxuICAgICAgICAnY2hhbmdlLWluLXVwZGF0ZScsXG4gICAgICAgIGBFbGVtZW50ICR7dGhpcy5sb2NhbE5hbWV9IHNjaGVkdWxlZCBhbiB1cGRhdGUgYCArXG4gICAgICAgICAgYChnZW5lcmFsbHkgYmVjYXVzZSBhIHByb3BlcnR5IHdhcyBzZXQpIGAgK1xuICAgICAgICAgIGBhZnRlciBhbiB1cGRhdGUgY29tcGxldGVkLCBjYXVzaW5nIGEgbmV3IHVwZGF0ZSB0byBiZSBzY2hlZHVsZWQuIGAgK1xuICAgICAgICAgIGBUaGlzIGlzIGluZWZmaWNpZW50IGFuZCBzaG91bGQgYmUgYXZvaWRlZCB1bmxlc3MgdGhlIG5leHQgdXBkYXRlIGAgK1xuICAgICAgICAgIGBjYW4gb25seSBiZSBzY2hlZHVsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB0aGUgcHJldmlvdXMgdXBkYXRlLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfX21hcmtVcGRhdGVkKCkge1xuICAgIHRoaXMuXyRjaGFuZ2VkUHJvcGVydGllcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmlzVXBkYXRlUGVuZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBoYXMgY29tcGxldGVkIHVwZGF0aW5nLlxuICAgKiBUaGUgUHJvbWlzZSB2YWx1ZSBpcyBhIGJvb2xlYW4gdGhhdCBpcyBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgY29tcGxldGVkIHRoZVxuICAgKiB1cGRhdGUgd2l0aG91dCB0cmlnZ2VyaW5nIGFub3RoZXIgdXBkYXRlLiBUaGUgUHJvbWlzZSByZXN1bHQgaXMgYGZhbHNlYCBpZlxuICAgKiBhIHByb3BlcnR5IHdhcyBzZXQgaW5zaWRlIGB1cGRhdGVkKClgLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgYW5cbiAgICogZXhjZXB0aW9uIHdhcyB0aHJvd24gZHVyaW5nIHRoZSB1cGRhdGUuXG4gICAqXG4gICAqIFRvIGF3YWl0IGFkZGl0aW9uYWwgYXN5bmNocm9ub3VzIHdvcmssIG92ZXJyaWRlIHRoZSBgZ2V0VXBkYXRlQ29tcGxldGVgXG4gICAqIG1ldGhvZC4gRm9yIGV4YW1wbGUsIGl0IGlzIHNvbWV0aW1lcyB1c2VmdWwgdG8gYXdhaXQgYSByZW5kZXJlZCBlbGVtZW50XG4gICAqIGJlZm9yZSBmdWxmaWxsaW5nIHRoaXMgUHJvbWlzZS4gVG8gZG8gdGhpcywgZmlyc3QgYXdhaXRcbiAgICogYHN1cGVyLmdldFVwZGF0ZUNvbXBsZXRlKClgLCB0aGVuIGFueSBzdWJzZXF1ZW50IHN0YXRlLlxuICAgKlxuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSBvZiBhIGJvb2xlYW4gdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSB1cGRhdGUgY29tcGxldGVkXG4gICAqICAgICB3aXRob3V0IHRyaWdnZXJpbmcgYW5vdGhlciB1cGRhdGUuXG4gICAqIEBjYXRlZ29yeSB1cGRhdGVzXG4gICAqL1xuICBnZXQgdXBkYXRlQ29tcGxldGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VXBkYXRlQ29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBwb2ludCBmb3IgdGhlIGB1cGRhdGVDb21wbGV0ZWAgcHJvbWlzZS5cbiAgICpcbiAgICogSXQgaXMgbm90IHNhZmUgdG8gb3ZlcnJpZGUgdGhlIGB1cGRhdGVDb21wbGV0ZWAgZ2V0dGVyIGRpcmVjdGx5IGR1ZSB0byBhXG4gICAqIGxpbWl0YXRpb24gaW4gVHlwZVNjcmlwdCB3aGljaCBtZWFucyBpdCBpcyBub3QgcG9zc2libGUgdG8gY2FsbCBhXG4gICAqIHN1cGVyY2xhc3MgZ2V0dGVyIChlLmcuIGBzdXBlci51cGRhdGVDb21wbGV0ZS50aGVuKC4uLilgKSB3aGVuIHRoZSB0YXJnZXRcbiAgICogbGFuZ3VhZ2UgaXMgRVM1IChodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzMzOCkuXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBvdmVycmlkZGVuIGluc3RlYWQuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBjbGFzcyBNeUVsZW1lbnQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgICogICBvdmVycmlkZSBhc3luYyBnZXRVcGRhdGVDb21wbGV0ZSgpIHtcbiAgICogICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1cGVyLmdldFVwZGF0ZUNvbXBsZXRlKCk7XG4gICAqICAgICBhd2FpdCB0aGlzLl9teUNoaWxkLnVwZGF0ZUNvbXBsZXRlO1xuICAgKiAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIG9mIGEgYm9vbGVhbiB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIHVwZGF0ZSBjb21wbGV0ZWRcbiAgICogICAgIHdpdGhvdXQgdHJpZ2dlcmluZyBhbm90aGVyIHVwZGF0ZS5cbiAgICogQGNhdGVnb3J5IHVwZGF0ZXNcbiAgICovXG4gIHByb3RlY3RlZCBnZXRVcGRhdGVDb21wbGV0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fX3VwZGF0ZVByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciBvciBub3QgYHVwZGF0ZSgpYCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgcmVxdWVzdHNcbiAgICogYW4gdXBkYXRlLiBCeSBkZWZhdWx0LCB0aGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyBgdHJ1ZWAsIGJ1dCB0aGlzIGNhbiBiZVxuICAgKiBjdXN0b21pemVkIHRvIGNvbnRyb2wgd2hlbiB0byB1cGRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBfY2hhbmdlZFByb3BlcnRpZXMgTWFwIG9mIGNoYW5nZWQgcHJvcGVydGllcyB3aXRoIG9sZCB2YWx1ZXNcbiAgICogQGNhdGVnb3J5IHVwZGF0ZXNcbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRVcGRhdGUoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGVsZW1lbnQuIFRoaXMgbWV0aG9kIHJlZmxlY3RzIHByb3BlcnR5IHZhbHVlcyB0byBhdHRyaWJ1dGVzLlxuICAgKiBJdCBjYW4gYmUgb3ZlcnJpZGRlbiB0byByZW5kZXIgYW5kIGtlZXAgdXBkYXRlZCBlbGVtZW50IERPTS5cbiAgICogU2V0dGluZyBwcm9wZXJ0aWVzIGluc2lkZSB0aGlzIG1ldGhvZCB3aWxsICpub3QqIHRyaWdnZXJcbiAgICogYW5vdGhlciB1cGRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBfY2hhbmdlZFByb3BlcnRpZXMgTWFwIG9mIGNoYW5nZWQgcHJvcGVydGllcyB3aXRoIG9sZCB2YWx1ZXNcbiAgICogQGNhdGVnb3J5IHVwZGF0ZXNcbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGUoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlcykge1xuICAgIC8vIFRoZSBmb3JFYWNoKCkgZXhwcmVzc2lvbiB3aWxsIG9ubHkgcnVuIHdoZW4gX19yZWZsZWN0aW5nUHJvcGVydGllcyBpc1xuICAgIC8vIGRlZmluZWQsIGFuZCBpdCByZXR1cm5zIHVuZGVmaW5lZCwgc2V0dGluZyBfX3JlZmxlY3RpbmdQcm9wZXJ0aWVzIHRvXG4gICAgLy8gdW5kZWZpbmVkXG4gICAgdGhpcy5fX3JlZmxlY3RpbmdQcm9wZXJ0aWVzICYmPSB0aGlzLl9fcmVmbGVjdGluZ1Byb3BlcnRpZXMuZm9yRWFjaCgocCkgPT5cbiAgICAgIHRoaXMuX19wcm9wZXJ0eVRvQXR0cmlidXRlKHAsIHRoaXNbcCBhcyBrZXlvZiB0aGlzXSlcbiAgICApIGFzIHVuZGVmaW5lZDtcbiAgICB0aGlzLl9fbWFya1VwZGF0ZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW5ldmVyIHRoZSBlbGVtZW50IGlzIHVwZGF0ZWQuIEltcGxlbWVudCB0byBwZXJmb3JtXG4gICAqIHBvc3QtdXBkYXRpbmcgdGFza3MgdmlhIERPTSBBUElzLCBmb3IgZXhhbXBsZSwgZm9jdXNpbmcgYW4gZWxlbWVudC5cbiAgICpcbiAgICogU2V0dGluZyBwcm9wZXJ0aWVzIGluc2lkZSB0aGlzIG1ldGhvZCB3aWxsIHRyaWdnZXIgdGhlIGVsZW1lbnQgdG8gdXBkYXRlXG4gICAqIGFnYWluIGFmdGVyIHRoaXMgdXBkYXRlIGN5Y2xlIGNvbXBsZXRlcy5cbiAgICpcbiAgICogQHBhcmFtIF9jaGFuZ2VkUHJvcGVydGllcyBNYXAgb2YgY2hhbmdlZCBwcm9wZXJ0aWVzIHdpdGggb2xkIHZhbHVlc1xuICAgKiBAY2F0ZWdvcnkgdXBkYXRlc1xuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlcykge31cblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGZpcnN0IHVwZGF0ZWQuIEltcGxlbWVudCB0byBwZXJmb3JtIG9uZSB0aW1lXG4gICAqIHdvcmsgb24gdGhlIGVsZW1lbnQgYWZ0ZXIgdXBkYXRlLlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBmaXJzdFVwZGF0ZWQoKSB7XG4gICAqICAgdGhpcy5yZW5kZXJSb290LmdldEVsZW1lbnRCeUlkKCdteS10ZXh0LWFyZWEnKS5mb2N1cygpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBTZXR0aW5nIHByb3BlcnRpZXMgaW5zaWRlIHRoaXMgbWV0aG9kIHdpbGwgdHJpZ2dlciB0aGUgZWxlbWVudCB0byB1cGRhdGVcbiAgICogYWdhaW4gYWZ0ZXIgdGhpcyB1cGRhdGUgY3ljbGUgY29tcGxldGVzLlxuICAgKlxuICAgKiBAcGFyYW0gX2NoYW5nZWRQcm9wZXJ0aWVzIE1hcCBvZiBjaGFuZ2VkIHByb3BlcnRpZXMgd2l0aCBvbGQgdmFsdWVzXG4gICAqIEBjYXRlZ29yeSB1cGRhdGVzXG4gICAqL1xuICBwcm90ZWN0ZWQgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXMpIHt9XG59XG4vLyBBc3NpZ25lZCBoZXJlIHRvIHdvcmsgYXJvdW5kIGEganNjb21waWxlciBidWcgd2l0aCBzdGF0aWMgZmllbGRzXG4vLyB3aGVuIGNvbXBpbGluZyB0byBFUzUuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvaXNzdWVzLzMxNzdcbihSZWFjdGl2ZUVsZW1lbnQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbXG4gIEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ2VsZW1lbnRQcm9wZXJ0aWVzJywgUmVhY3RpdmVFbGVtZW50KVxuXSA9IG5ldyBNYXAoKTtcbihSZWFjdGl2ZUVsZW1lbnQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbXG4gIEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ2ZpbmFsaXplZCcsIFJlYWN0aXZlRWxlbWVudClcbl0gPSBuZXcgTWFwKCk7XG5cbi8vIEFwcGx5IHBvbHlmaWxscyBpZiBhdmFpbGFibGVcbnBvbHlmaWxsU3VwcG9ydD8uKHtSZWFjdGl2ZUVsZW1lbnR9KTtcblxuLy8gRGV2IG1vZGUgd2FybmluZ3MuLi5cbmlmIChERVZfTU9ERSkge1xuICAvLyBEZWZhdWx0IHdhcm5pbmcgc2V0LlxuICBSZWFjdGl2ZUVsZW1lbnQuZW5hYmxlZFdhcm5pbmdzID0gW1xuICAgICdjaGFuZ2UtaW4tdXBkYXRlJyxcbiAgICAnYXN5bmMtcGVyZm9ybS11cGRhdGUnLFxuICBdO1xuICBjb25zdCBlbnN1cmVPd25XYXJuaW5ncyA9IGZ1bmN0aW9uIChjdG9yOiB0eXBlb2YgUmVhY3RpdmVFbGVtZW50KSB7XG4gICAgaWYgKFxuICAgICAgIWN0b3IuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnZW5hYmxlZFdhcm5pbmdzJywgY3RvcikpXG4gICAgKSB7XG4gICAgICBjdG9yLmVuYWJsZWRXYXJuaW5ncyA9IGN0b3IuZW5hYmxlZFdhcm5pbmdzIS5zbGljZSgpO1xuICAgIH1cbiAgfTtcbiAgUmVhY3RpdmVFbGVtZW50LmVuYWJsZVdhcm5pbmcgPSBmdW5jdGlvbiAoXG4gICAgdGhpczogdHlwZW9mIFJlYWN0aXZlRWxlbWVudCxcbiAgICB3YXJuaW5nOiBXYXJuaW5nS2luZFxuICApIHtcbiAgICBlbnN1cmVPd25XYXJuaW5ncyh0aGlzKTtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZFdhcm5pbmdzIS5pbmNsdWRlcyh3YXJuaW5nKSkge1xuICAgICAgdGhpcy5lbmFibGVkV2FybmluZ3MhLnB1c2god2FybmluZyk7XG4gICAgfVxuICB9O1xuICBSZWFjdGl2ZUVsZW1lbnQuZGlzYWJsZVdhcm5pbmcgPSBmdW5jdGlvbiAoXG4gICAgdGhpczogdHlwZW9mIFJlYWN0aXZlRWxlbWVudCxcbiAgICB3YXJuaW5nOiBXYXJuaW5nS2luZFxuICApIHtcbiAgICBlbnN1cmVPd25XYXJuaW5ncyh0aGlzKTtcbiAgICBjb25zdCBpID0gdGhpcy5lbmFibGVkV2FybmluZ3MhLmluZGV4T2Yod2FybmluZyk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5lbmFibGVkV2FybmluZ3MhLnNwbGljZShpLCAxKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIElNUE9SVEFOVDogZG8gbm90IGNoYW5nZSB0aGUgcHJvcGVydHkgbmFtZSBvciB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uLlxuLy8gVGhpcyBsaW5lIHdpbGwgYmUgdXNlZCBpbiByZWdleGVzIHRvIHNlYXJjaCBmb3IgUmVhY3RpdmVFbGVtZW50IHVzYWdlLlxuKGdsb2JhbC5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucyA/Pz0gW10pLnB1c2goJzIuMS4yJyk7XG5pZiAoREVWX01PREUgJiYgZ2xvYmFsLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zLmxlbmd0aCA+IDEpIHtcbiAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgIGlzc3VlV2FybmluZyEoXG4gICAgICAnbXVsdGlwbGUtdmVyc2lvbnMnLFxuICAgICAgYE11bHRpcGxlIHZlcnNpb25zIG9mIExpdCBsb2FkZWQuIExvYWRpbmcgbXVsdGlwbGUgdmVyc2lvbnMgYCArXG4gICAgICAgIGBpcyBub3QgcmVjb21tZW5kZWQuYFxuICAgICk7XG4gIH0pO1xufVxuIiwgIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTENcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2VcbiAqL1xuXG4vLyBJTVBPUlRBTlQ6IHRoZXNlIGltcG9ydHMgbXVzdCBiZSB0eXBlLW9ubHlcbmltcG9ydCB0eXBlIHtEaXJlY3RpdmUsIERpcmVjdGl2ZVJlc3VsdCwgUGFydEluZm99IGZyb20gJy4vZGlyZWN0aXZlLmpzJztcbmltcG9ydCB0eXBlIHtUcnVzdGVkSFRNTCwgVHJ1c3RlZFR5cGVzV2luZG93fSBmcm9tICd0cnVzdGVkLXR5cGVzL2xpYi9pbmRleC5qcyc7XG5cbmNvbnN0IERFVl9NT0RFID0gdHJ1ZTtcbmNvbnN0IEVOQUJMRV9FWFRSQV9TRUNVUklUWV9IT09LUyA9IHRydWU7XG5jb25zdCBFTkFCTEVfU0hBRFlET01fTk9QQVRDSCA9IHRydWU7XG5jb25zdCBOT0RFX01PREUgPSBmYWxzZTtcblxuLy8gQWxsb3dzIG1pbmlmaWVycyB0byByZW5hbWUgcmVmZXJlbmNlcyB0byBnbG9iYWxUaGlzXG5jb25zdCBnbG9iYWwgPSBnbG9iYWxUaGlzO1xuXG4vKipcbiAqIENvbnRhaW5zIHR5cGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHVuc3RhYmxlIGRlYnVnIEFQSS5cbiAqXG4gKiBFdmVyeXRoaW5nIGluIHRoaXMgQVBJIGlzIG5vdCBzdGFibGUgYW5kIG1heSBjaGFuZ2Ugb3IgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLFxuICogZXZlbiBvbiBwYXRjaCByZWxlYXNlcy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbmV4cG9ydCBuYW1lc3BhY2UgTGl0VW5zdGFibGUge1xuICAvKipcbiAgICogV2hlbiBMaXQgaXMgcnVubmluZyBpbiBkZXYgbW9kZSBhbmQgYHdpbmRvdy5lbWl0TGl0RGVidWdMb2dFdmVudHNgIGlzIHRydWUsXG4gICAqIHdlIHdpbGwgZW1pdCAnbGl0LWRlYnVnJyBldmVudHMgdG8gd2luZG93LCB3aXRoIGxpdmUgZGV0YWlscyBhYm91dCB0aGUgdXBkYXRlIGFuZCByZW5kZXJcbiAgICogbGlmZWN5Y2xlLiBUaGVzZSBjYW4gYmUgdXNlZnVsIGZvciB3cml0aW5nIGRlYnVnIHRvb2xpbmcgYW5kIHZpc3VhbGl6YXRpb25zLlxuICAgKlxuICAgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCBydW5uaW5nIHdpdGggd2luZG93LmVtaXRMaXREZWJ1Z0xvZ0V2ZW50cyBoYXMgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQsXG4gICAqIG1ha2luZyBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm9ybWFsbHkgdmVyeSBjaGVhcCAobGlrZSBhIG5vLW9wIHJlbmRlcikgbXVjaCBzbG93ZXIsXG4gICAqIGJlY2F1c2Ugd2UgbXVzdCBjb3B5IGRhdGEgYW5kIGRpc3BhdGNoIGV2ZW50cy5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gIGV4cG9ydCBuYW1lc3BhY2UgRGVidWdMb2cge1xuICAgIGV4cG9ydCB0eXBlIEVudHJ5ID1cbiAgICAgIHwgVGVtcGxhdGVQcmVwXG4gICAgICB8IFRlbXBsYXRlSW5zdGFudGlhdGVkXG4gICAgICB8IFRlbXBsYXRlSW5zdGFudGlhdGVkQW5kVXBkYXRlZFxuICAgICAgfCBUZW1wbGF0ZVVwZGF0aW5nXG4gICAgICB8IEJlZ2luUmVuZGVyXG4gICAgICB8IEVuZFJlbmRlclxuICAgICAgfCBDb21taXRQYXJ0RW50cnlcbiAgICAgIHwgU2V0UGFydFZhbHVlO1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVQcmVwIHtcbiAgICAgIGtpbmQ6ICd0ZW1wbGF0ZSBwcmVwJztcbiAgICAgIHRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgICAgIHN0cmluZ3M6IFRlbXBsYXRlU3RyaW5nc0FycmF5O1xuICAgICAgY2xvbmFibGVUZW1wbGF0ZTogSFRNTFRlbXBsYXRlRWxlbWVudDtcbiAgICAgIHBhcnRzOiBUZW1wbGF0ZVBhcnRbXTtcbiAgICB9XG4gICAgZXhwb3J0IGludGVyZmFjZSBCZWdpblJlbmRlciB7XG4gICAgICBraW5kOiAnYmVnaW4gcmVuZGVyJztcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB2YWx1ZTogdW5rbm93bjtcbiAgICAgIGNvbnRhaW5lcjogUmVuZGVyUm9vdE5vZGU7XG4gICAgICBvcHRpb25zOiBSZW5kZXJPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgICAgcGFydDogQ2hpbGRQYXJ0IHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBleHBvcnQgaW50ZXJmYWNlIEVuZFJlbmRlciB7XG4gICAgICBraW5kOiAnZW5kIHJlbmRlcic7XG4gICAgICBpZDogbnVtYmVyO1xuICAgICAgdmFsdWU6IHVua25vd247XG4gICAgICBjb250YWluZXI6IFJlbmRlclJvb3ROb2RlO1xuICAgICAgb3B0aW9uczogUmVuZGVyT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICAgIHBhcnQ6IENoaWxkUGFydDtcbiAgICB9XG4gICAgZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZUluc3RhbnRpYXRlZCB7XG4gICAgICBraW5kOiAndGVtcGxhdGUgaW5zdGFudGlhdGVkJztcbiAgICAgIHRlbXBsYXRlOiBUZW1wbGF0ZSB8IENvbXBpbGVkVGVtcGxhdGU7XG4gICAgICBpbnN0YW5jZTogVGVtcGxhdGVJbnN0YW5jZTtcbiAgICAgIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgICBmcmFnbWVudDogTm9kZTtcbiAgICAgIHBhcnRzOiBBcnJheTxQYXJ0IHwgdW5kZWZpbmVkPjtcbiAgICAgIHZhbHVlczogdW5rbm93bltdO1xuICAgIH1cbiAgICBleHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlSW5zdGFudGlhdGVkQW5kVXBkYXRlZCB7XG4gICAgICBraW5kOiAndGVtcGxhdGUgaW5zdGFudGlhdGVkIGFuZCB1cGRhdGVkJztcbiAgICAgIHRlbXBsYXRlOiBUZW1wbGF0ZSB8IENvbXBpbGVkVGVtcGxhdGU7XG4gICAgICBpbnN0YW5jZTogVGVtcGxhdGVJbnN0YW5jZTtcbiAgICAgIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgICBmcmFnbWVudDogTm9kZTtcbiAgICAgIHBhcnRzOiBBcnJheTxQYXJ0IHwgdW5kZWZpbmVkPjtcbiAgICAgIHZhbHVlczogdW5rbm93bltdO1xuICAgIH1cbiAgICBleHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlVXBkYXRpbmcge1xuICAgICAga2luZDogJ3RlbXBsYXRlIHVwZGF0aW5nJztcbiAgICAgIHRlbXBsYXRlOiBUZW1wbGF0ZSB8IENvbXBpbGVkVGVtcGxhdGU7XG4gICAgICBpbnN0YW5jZTogVGVtcGxhdGVJbnN0YW5jZTtcbiAgICAgIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgICBwYXJ0czogQXJyYXk8UGFydCB8IHVuZGVmaW5lZD47XG4gICAgICB2YWx1ZXM6IHVua25vd25bXTtcbiAgICB9XG4gICAgZXhwb3J0IGludGVyZmFjZSBTZXRQYXJ0VmFsdWUge1xuICAgICAga2luZDogJ3NldCBwYXJ0JztcbiAgICAgIHBhcnQ6IFBhcnQ7XG4gICAgICB2YWx1ZTogdW5rbm93bjtcbiAgICAgIHZhbHVlSW5kZXg6IG51bWJlcjtcbiAgICAgIHZhbHVlczogdW5rbm93bltdO1xuICAgICAgdGVtcGxhdGVJbnN0YW5jZTogVGVtcGxhdGVJbnN0YW5jZTtcbiAgICB9XG5cbiAgICBleHBvcnQgdHlwZSBDb21taXRQYXJ0RW50cnkgPVxuICAgICAgfCBDb21taXROb3RoaW5nVG9DaGlsZEVudHJ5XG4gICAgICB8IENvbW1pdFRleHRcbiAgICAgIHwgQ29tbWl0Tm9kZVxuICAgICAgfCBDb21taXRBdHRyaWJ1dGVcbiAgICAgIHwgQ29tbWl0UHJvcGVydHlcbiAgICAgIHwgQ29tbWl0Qm9vbGVhbkF0dHJpYnV0ZVxuICAgICAgfCBDb21taXRFdmVudExpc3RlbmVyXG4gICAgICB8IENvbW1pdFRvRWxlbWVudEJpbmRpbmc7XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIENvbW1pdE5vdGhpbmdUb0NoaWxkRW50cnkge1xuICAgICAga2luZDogJ2NvbW1pdCBub3RoaW5nIHRvIGNoaWxkJztcbiAgICAgIHN0YXJ0OiBDaGlsZE5vZGU7XG4gICAgICBlbmQ6IENoaWxkTm9kZSB8IG51bGw7XG4gICAgICBwYXJlbnQ6IERpc2Nvbm5lY3RhYmxlIHwgdW5kZWZpbmVkO1xuICAgICAgb3B0aW9uczogUmVuZGVyT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIENvbW1pdFRleHQge1xuICAgICAga2luZDogJ2NvbW1pdCB0ZXh0JztcbiAgICAgIG5vZGU6IFRleHQ7XG4gICAgICB2YWx1ZTogdW5rbm93bjtcbiAgICAgIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZXhwb3J0IGludGVyZmFjZSBDb21taXROb2RlIHtcbiAgICAgIGtpbmQ6ICdjb21taXQgbm9kZSc7XG4gICAgICBzdGFydDogTm9kZTtcbiAgICAgIHBhcmVudDogRGlzY29ubmVjdGFibGUgfCB1bmRlZmluZWQ7XG4gICAgICB2YWx1ZTogTm9kZTtcbiAgICAgIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZXhwb3J0IGludGVyZmFjZSBDb21taXRBdHRyaWJ1dGUge1xuICAgICAga2luZDogJ2NvbW1pdCBhdHRyaWJ1dGUnO1xuICAgICAgZWxlbWVudDogRWxlbWVudDtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHZhbHVlOiB1bmtub3duO1xuICAgICAgb3B0aW9uczogUmVuZGVyT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIENvbW1pdFByb3BlcnR5IHtcbiAgICAgIGtpbmQ6ICdjb21taXQgcHJvcGVydHknO1xuICAgICAgZWxlbWVudDogRWxlbWVudDtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHZhbHVlOiB1bmtub3duO1xuICAgICAgb3B0aW9uczogUmVuZGVyT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIENvbW1pdEJvb2xlYW5BdHRyaWJ1dGUge1xuICAgICAga2luZDogJ2NvbW1pdCBib29sZWFuIGF0dHJpYnV0ZSc7XG4gICAgICBlbGVtZW50OiBFbGVtZW50O1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgdmFsdWU6IGJvb2xlYW47XG4gICAgICBvcHRpb25zOiBSZW5kZXJPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGV4cG9ydCBpbnRlcmZhY2UgQ29tbWl0RXZlbnRMaXN0ZW5lciB7XG4gICAgICBraW5kOiAnY29tbWl0IGV2ZW50IGxpc3RlbmVyJztcbiAgICAgIGVsZW1lbnQ6IEVsZW1lbnQ7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICB2YWx1ZTogdW5rbm93bjtcbiAgICAgIG9sZExpc3RlbmVyOiB1bmtub3duO1xuICAgICAgb3B0aW9uczogUmVuZGVyT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICAgIC8vIFRydWUgaWYgd2UncmUgcmVtb3ZpbmcgdGhlIG9sZCBldmVudCBsaXN0ZW5lciAoZS5nLiBiZWNhdXNlIHNldHRpbmdzIGNoYW5nZWQsIG9yIHZhbHVlIGlzIG5vdGhpbmcpXG4gICAgICByZW1vdmVMaXN0ZW5lcjogYm9vbGVhbjtcbiAgICAgIC8vIFRydWUgaWYgd2UncmUgYWRkaW5nIGEgbmV3IGV2ZW50IGxpc3RlbmVyIChlLmcuIGJlY2F1c2UgZmlyc3QgcmVuZGVyLCBvciBzZXR0aW5ncyBjaGFuZ2VkKVxuICAgICAgYWRkTGlzdGVuZXI6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgZXhwb3J0IGludGVyZmFjZSBDb21taXRUb0VsZW1lbnRCaW5kaW5nIHtcbiAgICAgIGtpbmQ6ICdjb21taXQgdG8gZWxlbWVudCBiaW5kaW5nJztcbiAgICAgIGVsZW1lbnQ6IEVsZW1lbnQ7XG4gICAgICB2YWx1ZTogdW5rbm93bjtcbiAgICAgIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBEZWJ1Z0xvZ2dpbmdXaW5kb3cge1xuICAvLyBFdmVuIGluIGRldiBtb2RlLCB3ZSBnZW5lcmFsbHkgZG9uJ3Qgd2FudCB0byBlbWl0IHRoZXNlIGV2ZW50cywgYXMgdGhhdCdzXG4gIC8vIGFub3RoZXIgbGV2ZWwgb2YgY29zdCwgc28gb25seSBlbWl0IHRoZW0gd2hlbiBERVZfTU9ERSBpcyB0cnVlIF9hbmRfIHdoZW5cbiAgLy8gd2luZG93LmVtaXRMaXREZWJ1Z0V2ZW50cyBpcyB0cnVlLlxuICBlbWl0TGl0RGVidWdMb2dFdmVudHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFVzZWZ1bCBmb3IgdmlzdWFsaXppbmcgYW5kIGxvZ2dpbmcgaW5zaWdodHMgaW50byB3aGF0IHRoZSBMaXQgdGVtcGxhdGUgc3lzdGVtIGlzIGRvaW5nLlxuICpcbiAqIENvbXBpbGVkIG91dCBvZiBwcm9kIG1vZGUgYnVpbGRzLlxuICovXG5jb25zdCBkZWJ1Z0xvZ0V2ZW50ID0gREVWX01PREVcbiAgPyAoZXZlbnQ6IExpdFVuc3RhYmxlLkRlYnVnTG9nLkVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBzaG91bGRFbWl0ID0gKGdsb2JhbCBhcyB1bmtub3duIGFzIERlYnVnTG9nZ2luZ1dpbmRvdylcbiAgICAgICAgLmVtaXRMaXREZWJ1Z0xvZ0V2ZW50cztcbiAgICAgIGlmICghc2hvdWxkRW1pdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBnbG9iYWwuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50PExpdFVuc3RhYmxlLkRlYnVnTG9nLkVudHJ5PignbGl0LWRlYnVnJywge1xuICAgICAgICAgIGRldGFpbDogZXZlbnQsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgOiB1bmRlZmluZWQ7XG4vLyBVc2VkIGZvciBjb25uZWN0aW5nIGJlZ2luUmVuZGVyIGFuZCBlbmRSZW5kZXIgZXZlbnRzIHdoZW4gdGhlcmUgYXJlIG5lc3RlZFxuLy8gcmVuZGVycyB3aGVuIGVycm9ycyBhcmUgdGhyb3duIHByZXZlbnRpbmcgYW4gZW5kUmVuZGVyIGV2ZW50IGZyb20gYmVpbmdcbi8vIGNhbGxlZC5cbmxldCBkZWJ1Z0xvZ1JlbmRlcklkID0gMDtcblxubGV0IGlzc3VlV2FybmluZzogKGNvZGU6IHN0cmluZywgd2FybmluZzogc3RyaW5nKSA9PiB2b2lkO1xuXG5pZiAoREVWX01PREUpIHtcbiAgZ2xvYmFsLmxpdElzc3VlZFdhcm5pbmdzID8/PSBuZXcgU2V0KCk7XG5cbiAgLyoqXG4gICAqIElzc3VlIGEgd2FybmluZyBpZiB3ZSBoYXZlbid0IGFscmVhZHksIGJhc2VkIGVpdGhlciBvbiBgY29kZWAgb3IgYHdhcm5pbmdgLlxuICAgKiBXYXJuaW5ncyBhcmUgZGlzYWJsZWQgYXV0b21hdGljYWxseSBvbmx5IGJ5IGB3YXJuaW5nYDsgZGlzYWJsaW5nIHZpYSBgY29kZWBcbiAgICogY2FuIGJlIGRvbmUgYnkgdXNlcnMuXG4gICAqL1xuICBpc3N1ZVdhcm5pbmcgPSAoY29kZTogc3RyaW5nLCB3YXJuaW5nOiBzdHJpbmcpID0+IHtcbiAgICB3YXJuaW5nICs9IGNvZGVcbiAgICAgID8gYCBTZWUgaHR0cHM6Ly9saXQuZGV2L21zZy8ke2NvZGV9IGZvciBtb3JlIGluZm9ybWF0aW9uLmBcbiAgICAgIDogJyc7XG4gICAgaWYgKFxuICAgICAgIWdsb2JhbC5saXRJc3N1ZWRXYXJuaW5ncyEuaGFzKHdhcm5pbmcpICYmXG4gICAgICAhZ2xvYmFsLmxpdElzc3VlZFdhcm5pbmdzIS5oYXMoY29kZSlcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICAgIGdsb2JhbC5saXRJc3N1ZWRXYXJuaW5ncyEuYWRkKHdhcm5pbmcpO1xuICAgIH1cbiAgfTtcblxuICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgaXNzdWVXYXJuaW5nKFxuICAgICAgJ2Rldi1tb2RlJyxcbiAgICAgIGBMaXQgaXMgaW4gZGV2IG1vZGUuIE5vdCByZWNvbW1lbmRlZCBmb3IgcHJvZHVjdGlvbiFgXG4gICAgKTtcbiAgfSk7XG59XG5cbmNvbnN0IHdyYXAgPVxuICBFTkFCTEVfU0hBRFlET01fTk9QQVRDSCAmJlxuICBnbG9iYWwuU2hhZHlET00/LmluVXNlICYmXG4gIGdsb2JhbC5TaGFkeURPTT8ubm9QYXRjaCA9PT0gdHJ1ZVxuICAgID8gKGdsb2JhbC5TaGFkeURPTSEud3JhcCBhcyA8VCBleHRlbmRzIE5vZGU+KG5vZGU6IFQpID0+IFQpXG4gICAgOiA8VCBleHRlbmRzIE5vZGU+KG5vZGU6IFQpID0+IG5vZGU7XG5cbmNvbnN0IHRydXN0ZWRUeXBlcyA9IChnbG9iYWwgYXMgdW5rbm93biBhcyBUcnVzdGVkVHlwZXNXaW5kb3cpLnRydXN0ZWRUeXBlcztcblxuLyoqXG4gKiBPdXIgVHJ1c3RlZFR5cGVQb2xpY3kgZm9yIEhUTUwgd2hpY2ggaXMgZGVjbGFyZWQgdXNpbmcgdGhlIGh0bWwgdGVtcGxhdGVcbiAqIHRhZyBmdW5jdGlvbi5cbiAqXG4gKiBUaGF0IEhUTUwgaXMgYSBkZXZlbG9wZXItYXV0aG9yZWQgY29uc3RhbnQsIGFuZCBpcyBwYXJzZWQgd2l0aCBpbm5lckhUTUxcbiAqIGJlZm9yZSBhbnkgdW50cnVzdGVkIGV4cHJlc3Npb25zIGhhdmUgYmVlbiBtaXhlZCBpbi4gVGhlcmVmb3IgaXQgaXNcbiAqIGNvbnNpZGVyZWQgc2FmZSBieSBjb25zdHJ1Y3Rpb24uXG4gKi9cbmNvbnN0IHBvbGljeSA9IHRydXN0ZWRUeXBlc1xuICA/IHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koJ2xpdC1odG1sJywge1xuICAgICAgY3JlYXRlSFRNTDogKHMpID0+IHMsXG4gICAgfSlcbiAgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVXNlZCB0byBzYW5pdGl6ZSBhbnkgdmFsdWUgYmVmb3JlIGl0IGlzIHdyaXR0ZW4gaW50byB0aGUgRE9NLiBUaGlzIGNhbiBiZVxuICogdXNlZCB0byBpbXBsZW1lbnQgYSBzZWN1cml0eSBwb2xpY3kgb2YgYWxsb3dlZCBhbmQgZGlzYWxsb3dlZCB2YWx1ZXMgaW5cbiAqIG9yZGVyIHRvIHByZXZlbnQgWFNTIGF0dGFja3MuXG4gKlxuICogT25lIHdheSBvZiB1c2luZyB0aGlzIGNhbGxiYWNrIHdvdWxkIGJlIHRvIGNoZWNrIGF0dHJpYnV0ZXMgYW5kIHByb3BlcnRpZXNcbiAqIGFnYWluc3QgYSBsaXN0IG9mIGhpZ2ggcmlzayBmaWVsZHMsIGFuZCByZXF1aXJlIHRoYXQgdmFsdWVzIHdyaXR0ZW4gdG8gc3VjaFxuICogZmllbGRzIGJlIGluc3RhbmNlcyBvZiBhIGNsYXNzIHdoaWNoIGlzIHNhZmUgYnkgY29uc3RydWN0aW9uLiBDbG9zdXJlJ3MgU2FmZVxuICogSFRNTCBUeXBlcyBpcyBvbmUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyB0ZWNobmlxdWUgKFxuICogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9zYWZlLWh0bWwtdHlwZXMvYmxvYi9tYXN0ZXIvZG9jL3NhZmVodG1sLXR5cGVzLm1kKS5cbiAqIFRoZSBUcnVzdGVkVHlwZXMgcG9seWZpbGwgaW4gQVBJLW9ubHkgbW9kZSBjb3VsZCBhbHNvIGJlIHVzZWQgYXMgYSBiYXNpc1xuICogZm9yIHRoaXMgdGVjaG5pcXVlIChodHRwczovL2dpdGh1Yi5jb20vV0lDRy90cnVzdGVkLXR5cGVzKS5cbiAqXG4gKiBAcGFyYW0gbm9kZSBUaGUgSFRNTCBub2RlICh1c3VhbGx5IGVpdGhlciBhICN0ZXh0IG5vZGUgb3IgYW4gRWxlbWVudCkgdGhhdFxuICogICAgIGlzIGJlaW5nIHdyaXR0ZW4gdG8uIE5vdGUgdGhhdCB0aGlzIGlzIGp1c3QgYW4gZXhlbXBsYXIgbm9kZSwgdGhlIHdyaXRlXG4gKiAgICAgbWF5IHRha2UgcGxhY2UgYWdhaW5zdCBhbm90aGVyIGluc3RhbmNlIG9mIHRoZSBzYW1lIGNsYXNzIG9mIG5vZGUuXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiBhbiBhdHRyaWJ1dGUgb3IgcHJvcGVydHkgKGZvciBleGFtcGxlLCAnaHJlZicpLlxuICogQHBhcmFtIHR5cGUgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHdyaXRlIHRoYXQncyBhYm91dCB0byBiZSBwZXJmb3JtZWQgd2lsbFxuICogICAgIGJlIHRvIGEgcHJvcGVydHkgb3IgYSBub2RlLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBzYW5pdGl6ZSB0aGlzIGNsYXNzIG9mIHdyaXRlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU2FuaXRpemVyRmFjdG9yeSA9IChcbiAgbm9kZTogTm9kZSxcbiAgbmFtZTogc3RyaW5nLFxuICB0eXBlOiAncHJvcGVydHknIHwgJ2F0dHJpYnV0ZSdcbikgPT4gVmFsdWVTYW5pdGl6ZXI7XG5cbi8qKlxuICogQSBmdW5jdGlvbiB3aGljaCBjYW4gc2FuaXRpemUgdmFsdWVzIHRoYXQgd2lsbCBiZSB3cml0dGVuIHRvIGEgc3BlY2lmaWMga2luZFxuICogb2YgRE9NIHNpbmsuXG4gKlxuICogU2VlIFNhbml0aXplckZhY3RvcnkuXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBzYW5pdGl6ZS4gV2lsbCBiZSB0aGUgYWN0dWFsIHZhbHVlIHBhc3NlZCBpbnRvXG4gKiAgICAgdGhlIGxpdC1odG1sIHRlbXBsYXRlIGxpdGVyYWwsIHNvIHRoaXMgY291bGQgYmUgb2YgYW55IHR5cGUuXG4gKiBAcmV0dXJuIFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgRE9NLiBVc3VhbGx5IHRoZSBzYW1lIGFzIHRoZSBpbnB1dCB2YWx1ZSxcbiAqICAgICB1bmxlc3Mgc2FuaXRpemF0aW9uIGlzIG5lZWRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgVmFsdWVTYW5pdGl6ZXIgPSAodmFsdWU6IHVua25vd24pID0+IHVua25vd247XG5cbmNvbnN0IGlkZW50aXR5RnVuY3Rpb246IFZhbHVlU2FuaXRpemVyID0gKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZTtcbmNvbnN0IG5vb3BTYW5pdGl6ZXI6IFNhbml0aXplckZhY3RvcnkgPSAoXG4gIF9ub2RlOiBOb2RlLFxuICBfbmFtZTogc3RyaW5nLFxuICBfdHlwZTogJ3Byb3BlcnR5JyB8ICdhdHRyaWJ1dGUnXG4pID0+IGlkZW50aXR5RnVuY3Rpb247XG5cbi8qKiBTZXRzIHRoZSBnbG9iYWwgc2FuaXRpemVyIGZhY3RvcnkuICovXG5jb25zdCBzZXRTYW5pdGl6ZXIgPSAobmV3U2FuaXRpemVyOiBTYW5pdGl6ZXJGYWN0b3J5KSA9PiB7XG4gIGlmICghRU5BQkxFX0VYVFJBX1NFQ1VSSVRZX0hPT0tTKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChzYW5pdGl6ZXJGYWN0b3J5SW50ZXJuYWwgIT09IG5vb3BTYW5pdGl6ZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQXR0ZW1wdGVkIHRvIG92ZXJ3cml0ZSBleGlzdGluZyBsaXQtaHRtbCBzZWN1cml0eSBwb2xpY3kuYCArXG4gICAgICAgIGAgc2V0U2FuaXRpemVET01WYWx1ZUZhY3Rvcnkgc2hvdWxkIGJlIGNhbGxlZCBhdCBtb3N0IG9uY2UuYFxuICAgICk7XG4gIH1cbiAgc2FuaXRpemVyRmFjdG9yeUludGVybmFsID0gbmV3U2FuaXRpemVyO1xufTtcblxuLyoqXG4gKiBPbmx5IHVzZWQgaW4gaW50ZXJuYWwgdGVzdHMsIG5vdCBhIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuXG4gKi9cbmNvbnN0IF90ZXN0T25seUNsZWFyU2FuaXRpemVyRmFjdG9yeURvTm90Q2FsbE9yRWxzZSA9ICgpID0+IHtcbiAgc2FuaXRpemVyRmFjdG9yeUludGVybmFsID0gbm9vcFNhbml0aXplcjtcbn07XG5cbmNvbnN0IGNyZWF0ZVNhbml0aXplcjogU2FuaXRpemVyRmFjdG9yeSA9IChub2RlLCBuYW1lLCB0eXBlKSA9PiB7XG4gIHJldHVybiBzYW5pdGl6ZXJGYWN0b3J5SW50ZXJuYWwobm9kZSwgbmFtZSwgdHlwZSk7XG59O1xuXG4vLyBBZGRlZCB0byBhbiBhdHRyaWJ1dGUgbmFtZSB0byBtYXJrIHRoZSBhdHRyaWJ1dGUgYXMgYm91bmQgc28gd2UgY2FuIGZpbmRcbi8vIGl0IGVhc2lseS5cbmNvbnN0IGJvdW5kQXR0cmlidXRlU3VmZml4ID0gJyRsaXQkJztcblxuLy8gVGhpcyBtYXJrZXIgaXMgdXNlZCBpbiBtYW55IHN5bnRhY3RpYyBwb3NpdGlvbnMgaW4gSFRNTCwgc28gaXQgbXVzdCBiZVxuLy8gYSB2YWxpZCBlbGVtZW50IG5hbWUgYW5kIGF0dHJpYnV0ZSBuYW1lLiBXZSBkb24ndCBzdXBwb3J0IGR5bmFtaWMgbmFtZXMgKHlldClcbi8vIGJ1dCB0aGlzIGF0IGxlYXN0IGVuc3VyZXMgdGhhdCB0aGUgcGFyc2UgdHJlZSBpcyBjbG9zZXIgdG8gdGhlIHRlbXBsYXRlXG4vLyBpbnRlbnRpb24uXG5jb25zdCBtYXJrZXIgPSBgbGl0JCR7TWF0aC5yYW5kb20oKS50b0ZpeGVkKDkpLnNsaWNlKDIpfSRgO1xuXG4vLyBTdHJpbmcgdXNlZCB0byB0ZWxsIGlmIGEgY29tbWVudCBpcyBhIG1hcmtlciBjb21tZW50XG5jb25zdCBtYXJrZXJNYXRjaCA9ICc/JyArIG1hcmtlcjtcblxuLy8gVGV4dCB1c2VkIHRvIGluc2VydCBhIGNvbW1lbnQgbWFya2VyIG5vZGUuIFdlIHVzZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uXG4vLyBzeW50YXggYmVjYXVzZSBpdCdzIHNsaWdodGx5IHNtYWxsZXIsIGJ1dCBwYXJzZXMgYXMgYSBjb21tZW50IG5vZGUuXG5jb25zdCBub2RlTWFya2VyID0gYDwke21hcmtlck1hdGNofT5gO1xuXG5jb25zdCBkID1cbiAgTk9ERV9NT0RFICYmIGdsb2JhbC5kb2N1bWVudCA9PT0gdW5kZWZpbmVkXG4gICAgPyAoe1xuICAgICAgICBjcmVhdGVUcmVlV2Fsa2VyKCkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBEb2N1bWVudClcbiAgICA6IGRvY3VtZW50O1xuXG4vLyBDcmVhdGVzIGEgZHluYW1pYyBtYXJrZXIuIFdlIG5ldmVyIGhhdmUgdG8gc2VhcmNoIGZvciB0aGVzZSBpbiB0aGUgRE9NLlxuY29uc3QgY3JlYXRlTWFya2VyID0gKCkgPT4gZC5jcmVhdGVDb21tZW50KCcnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdHlwZW9mLW9wZXJhdG9yXG50eXBlIFByaW1pdGl2ZSA9IG51bGwgfCB1bmRlZmluZWQgfCBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgc3ltYm9sIHwgYmlnaW50O1xuY29uc3QgaXNQcmltaXRpdmUgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQcmltaXRpdmUgPT5cbiAgdmFsdWUgPT09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT0gJ2Z1bmN0aW9uJyk7XG5jb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmNvbnN0IGlzSXRlcmFibGUgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBJdGVyYWJsZTx1bmtub3duPiA9PlxuICBpc0FycmF5KHZhbHVlKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB0eXBlb2YgKHZhbHVlIGFzIGFueSk/LltTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xuXG5jb25zdCBTUEFDRV9DSEFSID0gYFsgXFx0XFxuXFxmXFxyXWA7XG5jb25zdCBBVFRSX1ZBTFVFX0NIQVIgPSBgW14gXFx0XFxuXFxmXFxyXCInXFxgPD49XWA7XG5jb25zdCBOQU1FX0NIQVIgPSBgW15cXFxcc1wiJz49L11gO1xuXG4vLyBUaGVzZSByZWdleGVzIHJlcHJlc2VudCB0aGUgZml2ZSBwYXJzaW5nIHN0YXRlcyB0aGF0IHdlIGNhcmUgYWJvdXQgaW4gdGhlXG4vLyBUZW1wbGF0ZSdzIEhUTUwgc2Nhbm5lci4gVGhleSBtYXRjaCB0aGUgKmVuZCogb2YgdGhlIHN0YXRlIHRoZXkncmUgbmFtZWRcbi8vIGFmdGVyLlxuLy8gRGVwZW5kaW5nIG9uIHRoZSBtYXRjaCwgd2UgdHJhbnNpdGlvbiB0byBhIG5ldyBzdGF0ZS4gSWYgdGhlcmUncyBubyBtYXRjaCxcbi8vIHdlIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUuXG4vLyBOb3RlIHRoYXQgdGhlIHJlZ2V4ZXMgYXJlIHN0YXRlZnVsLiBXZSB1dGlsaXplIGxhc3RJbmRleCBhbmQgc3luYyBpdFxuLy8gYWNyb3NzIHRoZSBtdWx0aXBsZSByZWdleGVzIHVzZWQuIEluIGFkZGl0aW9uIHRvIHRoZSBmaXZlIHJlZ2V4ZXMgYmVsb3dcbi8vIHdlIGFsc28gZHluYW1pY2FsbHkgY3JlYXRlIGEgcmVnZXggdG8gZmluZCB0aGUgbWF0Y2hpbmcgZW5kIHRhZ3MgZm9yIHJhd1xuLy8gdGV4dCBlbGVtZW50cy5cblxuLyoqXG4gKiBFbmQgb2YgdGV4dCBpczogYDxgIGZvbGxvd2VkIGJ5OlxuICogICAoY29tbWVudCBzdGFydCkgb3IgKHRhZykgb3IgKGR5bmFtaWMgdGFnIGJpbmRpbmcpXG4gKi9cbmNvbnN0IHRleHRFbmRSZWdleCA9IC88KD86KCEtLXxcXC9bXmEtekEtWl0pfChcXC8/W2EtekEtWl1bXj5cXHNdKil8KFxcLz8kKSkvZztcbmNvbnN0IENPTU1FTlRfU1RBUlQgPSAxO1xuY29uc3QgVEFHX05BTUUgPSAyO1xuY29uc3QgRFlOQU1JQ19UQUdfTkFNRSA9IDM7XG5cbmNvbnN0IGNvbW1lbnRFbmRSZWdleCA9IC8tLT4vZztcbi8qKlxuICogQ29tbWVudHMgbm90IHN0YXJ0ZWQgd2l0aCA8IS0tLCBsaWtlIDwveywgY2FuIGJlIGVuZGVkIGJ5IGEgc2luZ2xlIGA+YFxuICovXG5jb25zdCBjb21tZW50MkVuZFJlZ2V4ID0gLz4vZztcblxuLyoqXG4gKiBUaGUgdGFnRW5kIHJlZ2V4IG1hdGNoZXMgdGhlIGVuZCBvZiB0aGUgXCJpbnNpZGUgYW4gb3BlbmluZ1wiIHRhZyBzeW50YXhcbiAqIHBvc2l0aW9uLiBJdCBlaXRoZXIgbWF0Y2hlcyBhIGA+YCwgYW4gYXR0cmlidXRlLWxpa2Ugc2VxdWVuY2UsIG9yIHRoZSBlbmRcbiAqIG9mIHRoZSBzdHJpbmcgYWZ0ZXIgYSBzcGFjZSAoYXR0cmlidXRlLW5hbWUgcG9zaXRpb24gZW5kaW5nKS5cbiAqXG4gKiBTZWUgYXR0cmlidXRlcyBpbiB0aGUgSFRNTCBzcGVjOlxuICogaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI2VsZW1lbnRzLWF0dHJpYnV0ZXNcbiAqXG4gKiBcIiBcXHRcXG5cXGZcXHJcIiBhcmUgSFRNTCBzcGFjZSBjaGFyYWN0ZXJzOlxuICogaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqXG4gKiBTbyBhbiBhdHRyaWJ1dGUgaXM6XG4gKiAgKiBUaGUgbmFtZTogYW55IGNoYXJhY3RlciBleGNlcHQgYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciwgKFwiKSwgKCcpLCBcIj5cIixcbiAqICAgIFwiPVwiLCBvciBcIi9cIi4gTm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgSFRNTCBzcGVjIHdoaWNoIGFsc28gZXhjbHVkZXMgY29udHJvbCBjaGFyYWN0ZXJzLlxuICogICogRm9sbG93ZWQgYnkgemVybyBvciBtb3JlIHNwYWNlIGNoYXJhY3RlcnNcbiAqICAqIEZvbGxvd2VkIGJ5IFwiPVwiXG4gKiAgKiBGb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgc3BhY2UgY2hhcmFjdGVyc1xuICogICogRm9sbG93ZWQgYnk6XG4gKiAgICAqIEFueSBjaGFyYWN0ZXIgZXhjZXB0IHNwYWNlLCAoJyksIChcIiksIFwiPFwiLCBcIj5cIiwgXCI9XCIsIChgKSwgb3JcbiAqICAgICogKFwiKSB0aGVuIGFueSBub24tKFwiKSwgb3JcbiAqICAgICogKCcpIHRoZW4gYW55IG5vbi0oJylcbiAqL1xuY29uc3QgdGFnRW5kUmVnZXggPSBuZXcgUmVnRXhwKFxuICBgPnwke1NQQUNFX0NIQVJ9KD86KCR7TkFNRV9DSEFSfSspKCR7U1BBQ0VfQ0hBUn0qPSR7U1BBQ0VfQ0hBUn0qKD86JHtBVFRSX1ZBTFVFX0NIQVJ9fChcInwnKXwpKXwkKWAsXG4gICdnJ1xuKTtcbmNvbnN0IEVOVElSRV9NQVRDSCA9IDA7XG5jb25zdCBBVFRSSUJVVEVfTkFNRSA9IDE7XG5jb25zdCBTUEFDRVNfQU5EX0VRVUFMUyA9IDI7XG5jb25zdCBRVU9URV9DSEFSID0gMztcblxuY29uc3Qgc2luZ2xlUXVvdGVBdHRyRW5kUmVnZXggPSAvJy9nO1xuY29uc3QgZG91YmxlUXVvdGVBdHRyRW5kUmVnZXggPSAvXCIvZztcbi8qKlxuICogTWF0Y2hlcyB0aGUgcmF3IHRleHQgZWxlbWVudHMuXG4gKlxuICogQ29tbWVudHMgYXJlIG5vdCBwYXJzZWQgd2l0aGluIHJhdyB0ZXh0IGVsZW1lbnRzLCBzbyB3ZSBuZWVkIHRvIHNlYXJjaCB0aGVpclxuICogdGV4dCBjb250ZW50IGZvciBtYXJrZXIgc3RyaW5ncy5cbiAqL1xuY29uc3QgcmF3VGV4dEVsZW1lbnQgPSAvXig/OnNjcmlwdHxzdHlsZXx0ZXh0YXJlYXx0aXRsZSkkL2k7XG5cbi8qKiBUZW1wbGF0ZVJlc3VsdCB0eXBlcyAqL1xuY29uc3QgSFRNTF9SRVNVTFQgPSAxO1xuY29uc3QgU1ZHX1JFU1VMVCA9IDI7XG5jb25zdCBNQVRITUxfUkVTVUxUID0gMztcblxudHlwZSBSZXN1bHRUeXBlID0gdHlwZW9mIEhUTUxfUkVTVUxUIHwgdHlwZW9mIFNWR19SRVNVTFQgfCB0eXBlb2YgTUFUSE1MX1JFU1VMVDtcblxuLy8gVGVtcGxhdGVQYXJ0IHR5cGVzXG4vLyBJTVBPUlRBTlQ6IHRoZXNlIG11c3QgbWF0Y2ggdGhlIHZhbHVlcyBpbiBQYXJ0VHlwZVxuY29uc3QgQVRUUklCVVRFX1BBUlQgPSAxO1xuY29uc3QgQ0hJTERfUEFSVCA9IDI7XG5jb25zdCBQUk9QRVJUWV9QQVJUID0gMztcbmNvbnN0IEJPT0xFQU5fQVRUUklCVVRFX1BBUlQgPSA0O1xuY29uc3QgRVZFTlRfUEFSVCA9IDU7XG5jb25zdCBFTEVNRU5UX1BBUlQgPSA2O1xuY29uc3QgQ09NTUVOVF9QQVJUID0gNztcblxuLyoqXG4gKiBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIHRlbXBsYXRlIHRhZyBmdW5jdGlvbnMsIHtAbGlua2NvZGUgaHRtbH0gYW5kXG4gKiB7QGxpbmtjb2RlIHN2Z30gd2hlbiBpdCBoYXNuJ3QgYmVlbiBjb21waWxlZCBieSBAbGl0LWxhYnMvY29tcGlsZXIuXG4gKlxuICogQSBgVGVtcGxhdGVSZXN1bHRgIG9iamVjdCBob2xkcyBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgdGVtcGxhdGVcbiAqIGV4cHJlc3Npb24gcmVxdWlyZWQgdG8gcmVuZGVyIGl0OiB0aGUgdGVtcGxhdGUgc3RyaW5ncywgZXhwcmVzc2lvbiB2YWx1ZXMsXG4gKiBhbmQgdHlwZSBvZiB0ZW1wbGF0ZSAoaHRtbCBvciBzdmcpLlxuICpcbiAqIGBUZW1wbGF0ZVJlc3VsdGAgb2JqZWN0cyBkbyBub3QgY3JlYXRlIGFueSBET00gb24gdGhlaXIgb3duLiBUbyBjcmVhdGUgb3JcbiAqIHVwZGF0ZSBET00geW91IG5lZWQgdG8gcmVuZGVyIHRoZSBgVGVtcGxhdGVSZXN1bHRgLiBTZWVcbiAqIFtSZW5kZXJpbmddKGh0dHBzOi8vbGl0LmRldi9kb2NzL2NvbXBvbmVudHMvcmVuZGVyaW5nKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKi9cbmV4cG9ydCB0eXBlIFVuY29tcGlsZWRUZW1wbGF0ZVJlc3VsdDxUIGV4dGVuZHMgUmVzdWx0VHlwZSA9IFJlc3VsdFR5cGU+ID0ge1xuICAvLyBUaGlzIHByb3BlcnR5IG5lZWRzIHRvIHJlbWFpbiB1bm1pbmlmaWVkLlxuICBbJ18kbGl0VHlwZSQnXTogVDtcbiAgc3RyaW5nczogVGVtcGxhdGVTdHJpbmdzQXJyYXk7XG4gIHZhbHVlczogdW5rbm93bltdO1xufTtcblxuLyoqXG4gKiBUaGlzIGlzIGEgdGVtcGxhdGUgcmVzdWx0IHRoYXQgbWF5IGJlIGVpdGhlciB1bmNvbXBpbGVkIG9yIGNvbXBpbGVkLlxuICpcbiAqIEluIHRoZSBmdXR1cmUsIFRlbXBsYXRlUmVzdWx0IHdpbGwgYmUgdGhpcyB0eXBlLiBJZiB5b3Ugd2FudCB0byBleHBsaWNpdGx5XG4gKiBub3RlIHRoYXQgYSB0ZW1wbGF0ZSByZXN1bHQgaXMgcG90ZW50aWFsbHkgY29tcGlsZWQsIHlvdSBjYW4gcmVmZXJlbmNlIHRoaXNcbiAqIHR5cGUgYW5kIGl0IHdpbGwgY29udGludWUgdG8gYmVoYXZlIHRoZSBzYW1lIHRocm91Z2ggdGhlIG5leHQgbWFqb3IgdmVyc2lvblxuICogb2YgTGl0LiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGNvZGUgdGhhdCB3YW50cyB0byBwcmVwYXJlIGZvciB0aGUgbmV4dFxuICogbWFqb3IgdmVyc2lvbiBvZiBMaXQuXG4gKi9cbmV4cG9ydCB0eXBlIE1heWJlQ29tcGlsZWRUZW1wbGF0ZVJlc3VsdDxUIGV4dGVuZHMgUmVzdWx0VHlwZSA9IFJlc3VsdFR5cGU+ID1cbiAgfCBVbmNvbXBpbGVkVGVtcGxhdGVSZXN1bHQ8VD5cbiAgfCBDb21waWxlZFRlbXBsYXRlUmVzdWx0O1xuXG4vKipcbiAqIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgdGVtcGxhdGUgdGFnIGZ1bmN0aW9ucywge0BsaW5rY29kZSBodG1sfSBhbmRcbiAqIHtAbGlua2NvZGUgc3ZnfS5cbiAqXG4gKiBBIGBUZW1wbGF0ZVJlc3VsdGAgb2JqZWN0IGhvbGRzIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYSB0ZW1wbGF0ZVxuICogZXhwcmVzc2lvbiByZXF1aXJlZCB0byByZW5kZXIgaXQ6IHRoZSB0ZW1wbGF0ZSBzdHJpbmdzLCBleHByZXNzaW9uIHZhbHVlcyxcbiAqIGFuZCB0eXBlIG9mIHRlbXBsYXRlIChodG1sIG9yIHN2ZykuXG4gKlxuICogYFRlbXBsYXRlUmVzdWx0YCBvYmplY3RzIGRvIG5vdCBjcmVhdGUgYW55IERPTSBvbiB0aGVpciBvd24uIFRvIGNyZWF0ZSBvclxuICogdXBkYXRlIERPTSB5b3UgbmVlZCB0byByZW5kZXIgdGhlIGBUZW1wbGF0ZVJlc3VsdGAuIFNlZVxuICogW1JlbmRlcmluZ10oaHR0cHM6Ly9saXQuZGV2L2RvY3MvY29tcG9uZW50cy9yZW5kZXJpbmcpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEluIExpdCA0LCB0aGlzIHR5cGUgd2lsbCBiZSBhbiBhbGlhcyBvZlxuICogTWF5YmVDb21waWxlZFRlbXBsYXRlUmVzdWx0LCBzbyB0aGF0IGNvZGUgd2lsbCBnZXQgdHlwZSBlcnJvcnMgaWYgaXQgYXNzdW1lc1xuICogdGhhdCBMaXQgdGVtcGxhdGVzIGFyZSBub3QgY29tcGlsZWQuIFdoZW4gZGVsaWJlcmF0ZWx5IHdvcmtpbmcgd2l0aCBvbmx5XG4gKiBvbmUsIHVzZSBlaXRoZXIge0BsaW5rY29kZSBDb21waWxlZFRlbXBsYXRlUmVzdWx0fSBvclxuICoge0BsaW5rY29kZSBVbmNvbXBpbGVkVGVtcGxhdGVSZXN1bHR9IGV4cGxpY2l0bHkuXG4gKi9cbmV4cG9ydCB0eXBlIFRlbXBsYXRlUmVzdWx0PFQgZXh0ZW5kcyBSZXN1bHRUeXBlID0gUmVzdWx0VHlwZT4gPVxuICBVbmNvbXBpbGVkVGVtcGxhdGVSZXN1bHQ8VD47XG5cbmV4cG9ydCB0eXBlIEhUTUxUZW1wbGF0ZVJlc3VsdCA9IFRlbXBsYXRlUmVzdWx0PHR5cGVvZiBIVE1MX1JFU1VMVD47XG5cbmV4cG9ydCB0eXBlIFNWR1RlbXBsYXRlUmVzdWx0ID0gVGVtcGxhdGVSZXN1bHQ8dHlwZW9mIFNWR19SRVNVTFQ+O1xuXG5leHBvcnQgdHlwZSBNYXRoTUxUZW1wbGF0ZVJlc3VsdCA9IFRlbXBsYXRlUmVzdWx0PHR5cGVvZiBNQVRITUxfUkVTVUxUPjtcblxuLyoqXG4gKiBBIFRlbXBsYXRlUmVzdWx0IHRoYXQgaGFzIGJlZW4gY29tcGlsZWQgYnkgQGxpdC1sYWJzL2NvbXBpbGVyLCBza2lwcGluZyB0aGVcbiAqIHByZXBhcmUgc3RlcC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21waWxlZFRlbXBsYXRlUmVzdWx0IHtcbiAgLy8gVGhpcyBpcyBhIGZhY3RvcnkgaW4gb3JkZXIgdG8gbWFrZSB0ZW1wbGF0ZSBpbml0aWFsaXphdGlvbiBsYXp5XG4gIC8vIGFuZCBhbGxvdyBTaGFkeVJlbmRlck9wdGlvbnMgc2NvcGUgdG8gYmUgcGFzc2VkIGluLlxuICAvLyBUaGlzIHByb3BlcnR5IG5lZWRzIHRvIHJlbWFpbiB1bm1pbmlmaWVkLlxuICBbJ18kbGl0VHlwZSQnXTogQ29tcGlsZWRUZW1wbGF0ZTtcbiAgdmFsdWVzOiB1bmtub3duW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsZWRUZW1wbGF0ZSBleHRlbmRzIE9taXQ8VGVtcGxhdGUsICdlbCc+IHtcbiAgLy8gZWwgaXMgb3ZlcnJpZGRlbiB0byBiZSBvcHRpb25hbC4gV2UgaW5pdGlhbGl6ZSBpdCBvbiBmaXJzdCByZW5kZXJcbiAgZWw/OiBIVE1MVGVtcGxhdGVFbGVtZW50O1xuXG4gIC8vIFRoZSBwcmVwYXJlZCBIVE1MIHN0cmluZyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBlbGVtZW50IGZyb20uXG4gIC8vIFRoZSB0eXBlIGlzIGEgVGVtcGxhdGVTdHJpbmdzQXJyYXkgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHZhbHVlIGNhbWUgZnJvbVxuICAvLyBzb3VyY2UgY29kZSwgcHJldmVudGluZyBhIEpTT04gaW5qZWN0aW9uIGF0dGFjay5cbiAgaDogVGVtcGxhdGVTdHJpbmdzQXJyYXk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgdGVtcGxhdGUgbGl0ZXJhbCB0YWcgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgVGVtcGxhdGVSZXN1bHQgd2l0aFxuICogdGhlIGdpdmVuIHJlc3VsdCB0eXBlLlxuICovXG5jb25zdCB0YWcgPVxuICA8VCBleHRlbmRzIFJlc3VsdFR5cGU+KHR5cGU6IFQpID0+XG4gIChzdHJpbmdzOiBUZW1wbGF0ZVN0cmluZ3NBcnJheSwgLi4udmFsdWVzOiB1bmtub3duW10pOiBUZW1wbGF0ZVJlc3VsdDxUPiA9PiB7XG4gICAgLy8gV2FybiBhZ2FpbnN0IHRlbXBsYXRlcyBvY3RhbCBlc2NhcGUgc2VxdWVuY2VzXG4gICAgLy8gV2UgZG8gdGhpcyBoZXJlIHJhdGhlciB0aGFuIGluIHJlbmRlciBzbyB0aGF0IHRoZSB3YXJuaW5nIGlzIGNsb3NlciB0byB0aGVcbiAgICAvLyB0ZW1wbGF0ZSBkZWZpbml0aW9uLlxuICAgIGlmIChERVZfTU9ERSAmJiBzdHJpbmdzLnNvbWUoKHMpID0+IHMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1NvbWUgdGVtcGxhdGUgc3RyaW5ncyBhcmUgdW5kZWZpbmVkLlxcbicgK1xuICAgICAgICAgICdUaGlzIGlzIHByb2JhYmx5IGNhdXNlZCBieSBpbGxlZ2FsIG9jdGFsIGVzY2FwZSBzZXF1ZW5jZXMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKERFVl9NT0RFKSB7XG4gICAgICAvLyBJbXBvcnQgc3RhdGljLWh0bWwuanMgcmVzdWx0cyBpbiBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2hpY2ggZzMgZG9lc24ndFxuICAgICAgLy8gaGFuZGxlLiBJbnN0ZWFkIHdlIGtub3cgdGhhdCBzdGF0aWMgdmFsdWVzIG11c3QgaGF2ZSB0aGUgZmllbGRcbiAgICAgIC8vIGBfJGxpdFN0YXRpYyRgLlxuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZXMuc29tZSgodmFsKSA9PiAodmFsIGFzIHtfJGxpdFN0YXRpYyQ6IHVua25vd259KT8uWydfJGxpdFN0YXRpYyQnXSlcbiAgICAgICkge1xuICAgICAgICBpc3N1ZVdhcm5pbmcoXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYFN0YXRpYyB2YWx1ZXMgJ2xpdGVyYWwnIG9yICd1bnNhZmVTdGF0aWMnIGNhbm5vdCBiZSB1c2VkIGFzIHZhbHVlcyB0byBub24tc3RhdGljIHRlbXBsYXRlcy5cXG5gICtcbiAgICAgICAgICAgIGBQbGVhc2UgdXNlIHRoZSBzdGF0aWMgJ2h0bWwnIHRhZyBmdW5jdGlvbi4gU2VlIGh0dHBzOi8vbGl0LmRldi9kb2NzL3RlbXBsYXRlcy9leHByZXNzaW9ucy8jc3RhdGljLWV4cHJlc3Npb25zYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLy8gVGhpcyBwcm9wZXJ0eSBuZWVkcyB0byByZW1haW4gdW5taW5pZmllZC5cbiAgICAgIFsnXyRsaXRUeXBlJCddOiB0eXBlLFxuICAgICAgc3RyaW5ncyxcbiAgICAgIHZhbHVlcyxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIEludGVycHJldHMgYSB0ZW1wbGF0ZSBsaXRlcmFsIGFzIGFuIEhUTUwgdGVtcGxhdGUgdGhhdCBjYW4gZWZmaWNpZW50bHlcbiAqIHJlbmRlciB0byBhbmQgdXBkYXRlIGEgY29udGFpbmVyLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBoZWFkZXIgPSAodGl0bGU6IHN0cmluZykgPT4gaHRtbGA8aDE+JHt0aXRsZX08L2gxPmA7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYGh0bWxgIHRhZyByZXR1cm5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIERPTSB0byByZW5kZXIgYXMgYSB2YWx1ZS4gSXQgaXNcbiAqIGxhenksIG1lYW5pbmcgbm8gd29yayBpcyBkb25lIHVudGlsIHRoZSB0ZW1wbGF0ZSBpcyByZW5kZXJlZC4gV2hlbiByZW5kZXJpbmcsXG4gKiBpZiBhIHRlbXBsYXRlIGNvbWVzIGZyb20gdGhlIHNhbWUgZXhwcmVzc2lvbiBhcyBhIHByZXZpb3VzbHkgcmVuZGVyZWQgcmVzdWx0LFxuICogaXQncyBlZmZpY2llbnRseSB1cGRhdGVkIGluc3RlYWQgb2YgcmVwbGFjZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBodG1sID0gdGFnKEhUTUxfUkVTVUxUKTtcblxuLyoqXG4gKiBJbnRlcnByZXRzIGEgdGVtcGxhdGUgbGl0ZXJhbCBhcyBhbiBTVkcgZnJhZ21lbnQgdGhhdCBjYW4gZWZmaWNpZW50bHkgcmVuZGVyXG4gKiB0byBhbmQgdXBkYXRlIGEgY29udGFpbmVyLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCByZWN0ID0gc3ZnYDxyZWN0IHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiPjwvcmVjdD5gO1xuICpcbiAqIGNvbnN0IG15SW1hZ2UgPSBodG1sYFxuICogICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTAgMTBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gKiAgICAgJHtyZWN0fVxuICogICA8L3N2Zz5gO1xuICogYGBgXG4gKlxuICogVGhlIGBzdmdgICp0YWcgZnVuY3Rpb24qIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIFNWRyBmcmFnbWVudHMsIG9yIGVsZW1lbnRzXG4gKiB0aGF0IHdvdWxkIGJlIGNvbnRhaW5lZCAqKmluc2lkZSoqIGFuIGA8c3ZnPmAgSFRNTCBlbGVtZW50LiBBIGNvbW1vbiBlcnJvciBpc1xuICogcGxhY2luZyBhbiBgPHN2Zz5gICplbGVtZW50KiBpbiBhIHRlbXBsYXRlIHRhZ2dlZCB3aXRoIHRoZSBgc3ZnYCB0YWdcbiAqIGZ1bmN0aW9uLiBUaGUgYDxzdmc+YCBlbGVtZW50IGlzIGFuIEhUTUwgZWxlbWVudCBhbmQgc2hvdWxkIGJlIHVzZWQgd2l0aGluIGFcbiAqIHRlbXBsYXRlIHRhZ2dlZCB3aXRoIHRoZSB7QGxpbmtjb2RlIGh0bWx9IHRhZyBmdW5jdGlvbi5cbiAqXG4gKiBJbiBMaXRFbGVtZW50IHVzYWdlLCBpdCdzIGludmFsaWQgdG8gcmV0dXJuIGFuIFNWRyBmcmFnbWVudCBmcm9tIHRoZVxuICogYHJlbmRlcigpYCBtZXRob2QsIGFzIHRoZSBTVkcgZnJhZ21lbnQgd2lsbCBiZSBjb250YWluZWQgd2l0aGluIHRoZSBlbGVtZW50J3NcbiAqIHNoYWRvdyByb290IGFuZCB0aHVzIG5vdCBiZSBwcm9wZXJseSBjb250YWluZWQgd2l0aGluIGFuIGA8c3ZnPmAgSFRNTFxuICogZWxlbWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IHN2ZyA9IHRhZyhTVkdfUkVTVUxUKTtcblxuLyoqXG4gKiBJbnRlcnByZXRzIGEgdGVtcGxhdGUgbGl0ZXJhbCBhcyBNYXRoTUwgZnJhZ21lbnQgdGhhdCBjYW4gZWZmaWNpZW50bHkgcmVuZGVyXG4gKiB0byBhbmQgdXBkYXRlIGEgY29udGFpbmVyLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBudW0gPSBtYXRobWxgPG1uPjE8L21uPmA7XG4gKlxuICogY29uc3QgZXEgPSBodG1sYFxuICogICA8bWF0aD5cbiAqICAgICAke251bX1cbiAqICAgPC9tYXRoPmA7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYG1hdGhtbGAgKnRhZyBmdW5jdGlvbiogc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgTWF0aE1MIGZyYWdtZW50cywgb3JcbiAqIGVsZW1lbnRzIHRoYXQgd291bGQgYmUgY29udGFpbmVkICoqaW5zaWRlKiogYSBgPG1hdGg+YCBIVE1MIGVsZW1lbnQuIEEgY29tbW9uXG4gKiBlcnJvciBpcyBwbGFjaW5nIGEgYDxtYXRoPmAgKmVsZW1lbnQqIGluIGEgdGVtcGxhdGUgdGFnZ2VkIHdpdGggdGhlIGBtYXRobWxgXG4gKiB0YWcgZnVuY3Rpb24uIFRoZSBgPG1hdGg+YCBlbGVtZW50IGlzIGFuIEhUTUwgZWxlbWVudCBhbmQgc2hvdWxkIGJlIHVzZWRcbiAqIHdpdGhpbiBhIHRlbXBsYXRlIHRhZ2dlZCB3aXRoIHRoZSB7QGxpbmtjb2RlIGh0bWx9IHRhZyBmdW5jdGlvbi5cbiAqXG4gKiBJbiBMaXRFbGVtZW50IHVzYWdlLCBpdCdzIGludmFsaWQgdG8gcmV0dXJuIGFuIE1hdGhNTCBmcmFnbWVudCBmcm9tIHRoZVxuICogYHJlbmRlcigpYCBtZXRob2QsIGFzIHRoZSBNYXRoTUwgZnJhZ21lbnQgd2lsbCBiZSBjb250YWluZWQgd2l0aGluIHRoZVxuICogZWxlbWVudCdzIHNoYWRvdyByb290IGFuZCB0aHVzIG5vdCBiZSBwcm9wZXJseSBjb250YWluZWQgd2l0aGluIGEgYDxtYXRoPmBcbiAqIEhUTUwgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGhtbCA9IHRhZyhNQVRITUxfUkVTVUxUKTtcblxuLyoqXG4gKiBBIHNlbnRpbmVsIHZhbHVlIHRoYXQgc2lnbmFscyB0aGF0IGEgdmFsdWUgd2FzIGhhbmRsZWQgYnkgYSBkaXJlY3RpdmUgYW5kXG4gKiBzaG91bGQgbm90IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vQ2hhbmdlID0gU3ltYm9sLmZvcignbGl0LW5vQ2hhbmdlJyk7XG5cbi8qKlxuICogQSBzZW50aW5lbCB2YWx1ZSB0aGF0IHNpZ25hbHMgYSBDaGlsZFBhcnQgdG8gZnVsbHkgY2xlYXIgaXRzIGNvbnRlbnQuXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IGJ1dHRvbiA9IGh0bWxgJHtcbiAqICB1c2VyLmlzQWRtaW5cbiAqICAgID8gaHRtbGA8YnV0dG9uPkRFTEVURTwvYnV0dG9uPmBcbiAqICAgIDogbm90aGluZ1xuICogfWA7XG4gKiBgYGBcbiAqXG4gKiBQcmVmZXIgdXNpbmcgYG5vdGhpbmdgIG92ZXIgb3RoZXIgZmFsc3kgdmFsdWVzIGFzIGl0IHByb3ZpZGVzIGEgY29uc2lzdGVudFxuICogYmVoYXZpb3IgYmV0d2VlbiB2YXJpb3VzIGV4cHJlc3Npb24gYmluZGluZyBjb250ZXh0cy5cbiAqXG4gKiBJbiBjaGlsZCBleHByZXNzaW9ucywgYHVuZGVmaW5lZGAsIGBudWxsYCwgYCcnYCwgYW5kIGBub3RoaW5nYCBhbGwgYmVoYXZlIHRoZVxuICogc2FtZSBhbmQgcmVuZGVyIG5vIG5vZGVzLiBJbiBhdHRyaWJ1dGUgZXhwcmVzc2lvbnMsIGBub3RoaW5nYCBfcmVtb3Zlc18gdGhlXG4gKiBhdHRyaWJ1dGUsIHdoaWxlIGB1bmRlZmluZWRgIGFuZCBgbnVsbGAgd2lsbCByZW5kZXIgYW4gZW1wdHkgc3RyaW5nLiBJblxuICogcHJvcGVydHkgZXhwcmVzc2lvbnMgYG5vdGhpbmdgIGJlY29tZXMgYHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBjb25zdCBub3RoaW5nID0gU3ltYm9sLmZvcignbGl0LW5vdGhpbmcnKTtcblxuLyoqXG4gKiBUaGUgY2FjaGUgb2YgcHJlcGFyZWQgdGVtcGxhdGVzLCBrZXllZCBieSB0aGUgdGFnZ2VkIFRlbXBsYXRlU3RyaW5nc0FycmF5XG4gKiBhbmQgX25vdF8gYWNjb3VudGluZyBmb3IgdGhlIHNwZWNpZmljIHRlbXBsYXRlIHRhZyB1c2VkLiBUaGlzIG1lYW5zIHRoYXRcbiAqIHRlbXBsYXRlIHRhZ3MgY2Fubm90IGJlIGR5bmFtaWMgLSB0aGV5IG11c3Qgc3RhdGljYWxseSBiZSBvbmUgb2YgaHRtbCwgc3ZnLFxuICogb3IgYXR0ci4gVGhpcyByZXN0cmljdGlvbiBzaW1wbGlmaWVzIHRoZSBjYWNoZSBsb29rdXAsIHdoaWNoIGlzIG9uIHRoZSBob3RcbiAqIHBhdGggZm9yIHJlbmRlcmluZy5cbiAqL1xuY29uc3QgdGVtcGxhdGVDYWNoZSA9IG5ldyBXZWFrTWFwPFRlbXBsYXRlU3RyaW5nc0FycmF5LCBUZW1wbGF0ZT4oKTtcblxuLyoqXG4gKiBPYmplY3Qgc3BlY2lmeWluZyBvcHRpb25zIGZvciBjb250cm9sbGluZyBsaXQtaHRtbCByZW5kZXJpbmcuIE5vdGUgdGhhdFxuICogd2hpbGUgYHJlbmRlcmAgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBgY29udGFpbmVyYCAoYW5kXG4gKiBgcmVuZGVyQmVmb3JlYCByZWZlcmVuY2Ugbm9kZSkgdG8gZWZmaWNpZW50bHkgdXBkYXRlIHRoZSByZW5kZXJlZCBjb250ZW50LFxuICogb25seSB0aGUgb3B0aW9ucyBwYXNzZWQgaW4gZHVyaW5nIHRoZSBmaXJzdCByZW5kZXIgYXJlIHJlc3BlY3RlZCBkdXJpbmdcbiAqIHRoZSBsaWZldGltZSBvZiByZW5kZXJzIHRvIHRoYXQgdW5pcXVlIGBjb250YWluZXJgICsgYHJlbmRlckJlZm9yZWBcbiAqIGNvbWJpbmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlck9wdGlvbnMge1xuICAvKipcbiAgICogQW4gb2JqZWN0IHRvIHVzZSBhcyB0aGUgYHRoaXNgIHZhbHVlIGZvciBldmVudCBsaXN0ZW5lcnMuIEl0J3Mgb2Z0ZW5cbiAgICogdXNlZnVsIHRvIHNldCB0aGlzIHRvIHRoZSBob3N0IGNvbXBvbmVudCByZW5kZXJpbmcgYSB0ZW1wbGF0ZS5cbiAgICovXG4gIGhvc3Q/OiBvYmplY3Q7XG4gIC8qKlxuICAgKiBBIERPTSBub2RlIGJlZm9yZSB3aGljaCB0byByZW5kZXIgY29udGVudCBpbiB0aGUgY29udGFpbmVyLlxuICAgKi9cbiAgcmVuZGVyQmVmb3JlPzogQ2hpbGROb2RlIHwgbnVsbDtcbiAgLyoqXG4gICAqIE5vZGUgdXNlZCBmb3IgY2xvbmluZyB0aGUgdGVtcGxhdGUgKGBpbXBvcnROb2RlYCB3aWxsIGJlIGNhbGxlZCBvbiB0aGlzXG4gICAqIG5vZGUpLiBUaGlzIGNvbnRyb2xzIHRoZSBgb3duZXJEb2N1bWVudGAgb2YgdGhlIHJlbmRlcmVkIERPTSwgYWxvbmcgd2l0aFxuICAgKiBhbnkgaW5oZXJpdGVkIGNvbnRleHQuIERlZmF1bHRzIHRvIHRoZSBnbG9iYWwgYGRvY3VtZW50YC5cbiAgICovXG4gIGNyZWF0aW9uU2NvcGU/OiB7aW1wb3J0Tm9kZShub2RlOiBOb2RlLCBkZWVwPzogYm9vbGVhbik6IE5vZGV9O1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgY29ubmVjdGVkIHN0YXRlIGZvciB0aGUgdG9wLWxldmVsIHBhcnQgYmVpbmcgcmVuZGVyZWQuIElmIG5vXG4gICAqIGBpc0Nvbm5lY3RlZGAgb3B0aW9uIGlzIHNldCwgYEFzeW5jRGlyZWN0aXZlYHMgd2lsbCBiZSBjb25uZWN0ZWQgYnlcbiAgICogZGVmYXVsdC4gU2V0IHRvIGBmYWxzZWAgaWYgdGhlIGluaXRpYWwgcmVuZGVyIG9jY3VycyBpbiBhIGRpc2Nvbm5lY3RlZCB0cmVlXG4gICAqIGFuZCBgQXN5bmNEaXJlY3RpdmVgcyBzaG91bGQgc2VlIGBpc0Nvbm5lY3RlZCA9PT0gZmFsc2VgIGZvciB0aGVpciBpbml0aWFsXG4gICAqIHJlbmRlci4gVGhlIGBwYXJ0LnNldENvbm5lY3RlZCgpYCBtZXRob2QgbXVzdCBiZSB1c2VkIHN1YnNlcXVlbnQgdG8gaW5pdGlhbFxuICAgKiByZW5kZXIgdG8gY2hhbmdlIHRoZSBjb25uZWN0ZWQgc3RhdGUgb2YgdGhlIHBhcnQuXG4gICAqL1xuICBpc0Nvbm5lY3RlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJvb3QgRE9NIG5vZGUgZm9yIHJlbmRlcmluZy5cbiAqL1xuZXhwb3J0IHR5cGUgUmVuZGVyUm9vdE5vZGUgPSBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQgfCBEb2N1bWVudEZyYWdtZW50O1xuXG5jb25zdCB3YWxrZXIgPSBkLmNyZWF0ZVRyZWVXYWxrZXIoXG4gIGQsXG4gIDEyOSAvKiBOb2RlRmlsdGVyLlNIT1dfe0VMRU1FTlR8Q09NTUVOVH0gKi9cbik7XG5cbmxldCBzYW5pdGl6ZXJGYWN0b3J5SW50ZXJuYWw6IFNhbml0aXplckZhY3RvcnkgPSBub29wU2FuaXRpemVyO1xuXG4vL1xuLy8gQ2xhc3NlcyBvbmx5IGJlbG93IGhlcmUsIGNvbnN0IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBvbmx5IGFib3ZlIGhlcmUuLi5cbi8vXG4vLyBLZWVwaW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBhbmQgY2xhc3NlcyB0b2dldGhlciBpbXByb3ZlcyBtaW5pZmljYXRpb24uXG4vLyBJbnRlcmZhY2VzIGFuZCB0eXBlIGFsaWFzZXMgY2FuIGJlIGludGVybGVhdmVkIGZyZWVseS5cbi8vXG5cbi8vIFR5cGUgZm9yIGNsYXNzZXMgdGhhdCBoYXZlIGEgYF9kaXJlY3RpdmVgIG9yIGBfZGlyZWN0aXZlc1tdYCBmaWVsZCwgdXNlZCBieVxuLy8gYHJlc29sdmVEaXJlY3RpdmVgXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdGl2ZVBhcmVudCB7XG4gIF8kcGFyZW50PzogRGlyZWN0aXZlUGFyZW50O1xuICBfJGlzQ29ubmVjdGVkOiBib29sZWFuO1xuICBfX2RpcmVjdGl2ZT86IERpcmVjdGl2ZTtcbiAgX19kaXJlY3RpdmVzPzogQXJyYXk8RGlyZWN0aXZlIHwgdW5kZWZpbmVkPjtcbn1cblxuZnVuY3Rpb24gdHJ1c3RGcm9tVGVtcGxhdGVTdHJpbmcoXG4gIHRzYTogVGVtcGxhdGVTdHJpbmdzQXJyYXksXG4gIHN0cmluZ0Zyb21UU0E6IHN0cmluZ1xuKTogVHJ1c3RlZEhUTUwge1xuICAvLyBBIHNlY3VyaXR5IGNoZWNrIHRvIHByZXZlbnQgc3Bvb2Zpbmcgb2YgTGl0IHRlbXBsYXRlIHJlc3VsdHMuXG4gIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyB3aXRoIEFycmF5LmlzVGVtcGxhdGVPYmplY3QsXG4gIC8vIHRob3VnaCB3ZSBtaWdodCBuZWVkIHRvIG1ha2UgdGhhdCBjaGVjayBpbnNpZGUgb2YgdGhlIGh0bWwgYW5kIHN2Z1xuICAvLyBmdW5jdGlvbnMsIGJlY2F1c2UgcHJlY29tcGlsZWQgdGVtcGxhdGVzIGRvbid0IGNvbWUgaW4gYXNcbiAgLy8gVGVtcGxhdGVTdHJpbmdBcnJheSBvYmplY3RzLlxuICBpZiAoIWlzQXJyYXkodHNhKSB8fCAhdHNhLmhhc093blByb3BlcnR5KCdyYXcnKSkge1xuICAgIGxldCBtZXNzYWdlID0gJ2ludmFsaWQgdGVtcGxhdGUgc3RyaW5ncyBhcnJheSc7XG4gICAgaWYgKERFVl9NT0RFKSB7XG4gICAgICBtZXNzYWdlID0gYFxuICAgICAgICAgIEludGVybmFsIEVycm9yOiBleHBlY3RlZCB0ZW1wbGF0ZSBzdHJpbmdzIHRvIGJlIGFuIGFycmF5XG4gICAgICAgICAgd2l0aCBhICdyYXcnIGZpZWxkLiBGYWtpbmcgYSB0ZW1wbGF0ZSBzdHJpbmdzIGFycmF5IGJ5XG4gICAgICAgICAgY2FsbGluZyBodG1sIG9yIHN2ZyBsaWtlIGFuIG9yZGluYXJ5IGZ1bmN0aW9uIGlzIGVmZmVjdGl2ZWx5XG4gICAgICAgICAgdGhlIHNhbWUgYXMgY2FsbGluZyB1bnNhZmVIdG1sIGFuZCBjYW4gbGVhZCB0byBtYWpvciBzZWN1cml0eVxuICAgICAgICAgIGlzc3VlcywgZS5nLiBvcGVuaW5nIHlvdXIgY29kZSB1cCB0byBYU1MgYXR0YWNrcy5cbiAgICAgICAgICBJZiB5b3UncmUgdXNpbmcgdGhlIGh0bWwgb3Igc3ZnIHRhZ2dlZCB0ZW1wbGF0ZSBmdW5jdGlvbnMgbm9ybWFsbHlcbiAgICAgICAgICBhbmQgc3RpbGwgc2VlaW5nIHRoaXMgZXJyb3IsIHBsZWFzZSBmaWxlIGEgYnVnIGF0XG4gICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2xpdC9saXQvaXNzdWVzL25ldz90ZW1wbGF0ZT1idWdfcmVwb3J0Lm1kXG4gICAgICAgICAgYW5kIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBidWlsZCB0b29saW5nLCBpZiBhbnkuXG4gICAgICAgIGBcbiAgICAgICAgLnRyaW0oKVxuICAgICAgICAucmVwbGFjZSgvXFxuICovZywgJ1xcbicpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgcmV0dXJuIHBvbGljeSAhPT0gdW5kZWZpbmVkXG4gICAgPyBwb2xpY3kuY3JlYXRlSFRNTChzdHJpbmdGcm9tVFNBKVxuICAgIDogKHN0cmluZ0Zyb21UU0EgYXMgdW5rbm93biBhcyBUcnVzdGVkSFRNTCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBIVE1MIHN0cmluZyBmb3IgdGhlIGdpdmVuIFRlbXBsYXRlU3RyaW5nc0FycmF5IGFuZCByZXN1bHQgdHlwZVxuICogKEhUTUwgb3IgU1ZHKSwgYWxvbmcgd2l0aCB0aGUgY2FzZS1zZW5zaXRpdmUgYm91bmQgYXR0cmlidXRlIG5hbWVzIGluXG4gKiB0ZW1wbGF0ZSBvcmRlci4gVGhlIEhUTUwgY29udGFpbnMgY29tbWVudCBtYXJrZXJzIGRlbm90aW5nIHRoZSBgQ2hpbGRQYXJ0YHNcbiAqIGFuZCBzdWZmaXhlcyBvbiBib3VuZCBhdHRyaWJ1dGVzIGRlbm90aW5nIHRoZSBgQXR0cmlidXRlUGFydHNgLlxuICpcbiAqIEBwYXJhbSBzdHJpbmdzIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXlcbiAqIEBwYXJhbSB0eXBlIEhUTUwgb3IgU1ZHXG4gKiBAcmV0dXJuIEFycmF5IGNvbnRhaW5pbmcgYFtodG1sLCBhdHRyTmFtZXNdYCAoYXJyYXkgcmV0dXJuZWQgZm9yIHRlcnNlbmVzcyxcbiAqICAgICB0byBhdm9pZCBvYmplY3QgZmllbGRzIHNpbmNlIHRoaXMgY29kZSBpcyBzaGFyZWQgd2l0aCBub24tbWluaWZpZWQgU1NSXG4gKiAgICAgY29kZSlcbiAqL1xuY29uc3QgZ2V0VGVtcGxhdGVIdG1sID0gKFxuICBzdHJpbmdzOiBUZW1wbGF0ZVN0cmluZ3NBcnJheSxcbiAgdHlwZTogUmVzdWx0VHlwZVxuKTogW1RydXN0ZWRIVE1MLCBBcnJheTxzdHJpbmc+XSA9PiB7XG4gIC8vIEluc2VydCBtYWtlcnMgaW50byB0aGUgdGVtcGxhdGUgSFRNTCB0byByZXByZXNlbnQgdGhlIHBvc2l0aW9uIG9mXG4gIC8vIGJpbmRpbmdzLiBUaGUgZm9sbG93aW5nIGNvZGUgc2NhbnMgdGhlIHRlbXBsYXRlIHN0cmluZ3MgdG8gZGV0ZXJtaW5lIHRoZVxuICAvLyBzeW50YWN0aWMgcG9zaXRpb24gb2YgdGhlIGJpbmRpbmdzLiBUaGV5IGNhbiBiZSBpbiB0ZXh0IHBvc2l0aW9uLCB3aGVyZVxuICAvLyB3ZSBpbnNlcnQgYW4gSFRNTCBjb21tZW50LCBhdHRyaWJ1dGUgdmFsdWUgcG9zaXRpb24sIHdoZXJlIHdlIGluc2VydCBhXG4gIC8vIHNlbnRpbmVsIHN0cmluZyBhbmQgcmUtd3JpdGUgdGhlIGF0dHJpYnV0ZSBuYW1lLCBvciBpbnNpZGUgYSB0YWcgd2hlcmVcbiAgLy8gd2UgaW5zZXJ0IHRoZSBzZW50aW5lbCBzdHJpbmcuXG4gIGNvbnN0IGwgPSBzdHJpbmdzLmxlbmd0aCAtIDE7XG4gIC8vIFN0b3JlcyB0aGUgY2FzZS1zZW5zaXRpdmUgYm91bmQgYXR0cmlidXRlIG5hbWVzIGluIHRoZSBvcmRlciBvZiB0aGVpclxuICAvLyBwYXJ0cy4gRWxlbWVudFBhcnRzIGFyZSBhbHNvIHJlZmxlY3RlZCBpbiB0aGlzIGFycmF5IGFzIHVuZGVmaW5lZFxuICAvLyByYXRoZXIgdGhhbiBhIHN0cmluZywgdG8gZGlzYW1iaWd1YXRlIGZyb20gYXR0cmlidXRlIGJpbmRpbmdzLlxuICBjb25zdCBhdHRyTmFtZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgbGV0IGh0bWwgPVxuICAgIHR5cGUgPT09IFNWR19SRVNVTFQgPyAnPHN2Zz4nIDogdHlwZSA9PT0gTUFUSE1MX1JFU1VMVCA/ICc8bWF0aD4nIDogJyc7XG5cbiAgLy8gV2hlbiB3ZSdyZSBpbnNpZGUgYSByYXcgdGV4dCB0YWcgKG5vdCBpdCdzIHRleHQgY29udGVudCksIHRoZSByZWdleFxuICAvLyB3aWxsIHN0aWxsIGJlIHRhZ1JlZ2V4IHNvIHdlIGNhbiBmaW5kIGF0dHJpYnV0ZXMsIGJ1dCB3aWxsIHN3aXRjaCB0b1xuICAvLyB0aGlzIHJlZ2V4IHdoZW4gdGhlIHRhZyBlbmRzLlxuICBsZXQgcmF3VGV4dEVuZFJlZ2V4OiBSZWdFeHAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gVGhlIGN1cnJlbnQgcGFyc2luZyBzdGF0ZSwgcmVwcmVzZW50ZWQgYXMgYSByZWZlcmVuY2UgdG8gb25lIG9mIHRoZVxuICAvLyByZWdleGVzXG4gIGxldCByZWdleCA9IHRleHRFbmRSZWdleDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IHMgPSBzdHJpbmdzW2ldO1xuICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgZW5kIG9mIHRoZSBsYXN0IGF0dHJpYnV0ZSBuYW1lLiBXaGVuIHRoaXMgaXNcbiAgICAvLyBwb3NpdGl2ZSBhdCBlbmQgb2YgYSBzdHJpbmcsIGl0IG1lYW5zIHdlJ3JlIGluIGFuIGF0dHJpYnV0ZSB2YWx1ZVxuICAgIC8vIHBvc2l0aW9uIGFuZCBuZWVkIHRvIHJld3JpdGUgdGhlIGF0dHJpYnV0ZSBuYW1lLlxuICAgIC8vIFdlIGFsc28gdXNlIGEgc3BlY2lhbCB2YWx1ZSBvZiAtMiB0byBpbmRpY2F0ZSB0aGF0IHdlIGVuY291bnRlcmVkXG4gICAgLy8gdGhlIGVuZCBvZiBhIHN0cmluZyBpbiBhdHRyaWJ1dGUgbmFtZSBwb3NpdGlvbi5cbiAgICBsZXQgYXR0ck5hbWVFbmRJbmRleCA9IC0xO1xuICAgIGxldCBhdHRyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBsYXN0SW5kZXggPSAwO1xuICAgIGxldCBtYXRjaCE6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG5cbiAgICAvLyBUaGUgY29uZGl0aW9ucyBpbiB0aGlzIGxvb3AgaGFuZGxlIHRoZSBjdXJyZW50IHBhcnNlIHN0YXRlLCBhbmQgdGhlXG4gICAgLy8gYXNzaWdubWVudHMgdG8gdGhlIGByZWdleGAgdmFyaWFibGUgYXJlIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucy5cbiAgICB3aGlsZSAobGFzdEluZGV4IDwgcy5sZW5ndGgpIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aGVyZSB3ZSBwcmV2aW91c2x5IGxlZnQgb2ZmXG4gICAgICByZWdleC5sYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICBtYXRjaCA9IHJlZ2V4LmV4ZWMocyk7XG4gICAgICBpZiAobWF0Y2ggPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBsYXN0SW5kZXggPSByZWdleC5sYXN0SW5kZXg7XG4gICAgICBpZiAocmVnZXggPT09IHRleHRFbmRSZWdleCkge1xuICAgICAgICBpZiAobWF0Y2hbQ09NTUVOVF9TVEFSVF0gPT09ICchLS0nKSB7XG4gICAgICAgICAgcmVnZXggPSBjb21tZW50RW5kUmVnZXg7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2hbQ09NTUVOVF9TVEFSVF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIFdlIHN0YXJ0ZWQgYSB3ZWlyZCBjb21tZW50LCBsaWtlIDwve1xuICAgICAgICAgIHJlZ2V4ID0gY29tbWVudDJFbmRSZWdleDtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaFtUQUdfTkFNRV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChyYXdUZXh0RWxlbWVudC50ZXN0KG1hdGNoW1RBR19OQU1FXSkpIHtcbiAgICAgICAgICAgIC8vIFJlY29yZCBpZiB3ZSBlbmNvdW50ZXIgYSByYXctdGV4dCBlbGVtZW50LiBXZSdsbCBzd2l0Y2ggdG9cbiAgICAgICAgICAgIC8vIHRoaXMgcmVnZXggYXQgdGhlIGVuZCBvZiB0aGUgdGFnLlxuICAgICAgICAgICAgcmF3VGV4dEVuZFJlZ2V4ID0gbmV3IFJlZ0V4cChgPC8ke21hdGNoW1RBR19OQU1FXX1gLCAnZycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWdleCA9IHRhZ0VuZFJlZ2V4O1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoW0RZTkFNSUNfVEFHX05BTUVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoREVWX01PREUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0JpbmRpbmdzIGluIHRhZyBuYW1lcyBhcmUgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBzdGF0aWMgdGVtcGxhdGVzIGluc3RlYWQuICcgK1xuICAgICAgICAgICAgICAgICdTZWUgaHR0cHM6Ly9saXQuZGV2L2RvY3MvdGVtcGxhdGVzL2V4cHJlc3Npb25zLyNzdGF0aWMtZXhwcmVzc2lvbnMnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWdleCA9IHRhZ0VuZFJlZ2V4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlZ2V4ID09PSB0YWdFbmRSZWdleCkge1xuICAgICAgICBpZiAobWF0Y2hbRU5USVJFX01BVENIXSA9PT0gJz4nKSB7XG4gICAgICAgICAgLy8gRW5kIG9mIGEgdGFnLiBJZiB3ZSBoYWQgc3RhcnRlZCBhIHJhdy10ZXh0IGVsZW1lbnQsIHVzZSB0aGF0XG4gICAgICAgICAgLy8gcmVnZXhcbiAgICAgICAgICByZWdleCA9IHJhd1RleHRFbmRSZWdleCA/PyB0ZXh0RW5kUmVnZXg7XG4gICAgICAgICAgLy8gV2UgbWF5IGJlIGVuZGluZyBhbiB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUsIHNvIG1ha2Ugc3VyZSB3ZVxuICAgICAgICAgIC8vIGNsZWFyIGFueSBwZW5kaW5nIGF0dHJOYW1lRW5kSW5kZXhcbiAgICAgICAgICBhdHRyTmFtZUVuZEluZGV4ID0gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2hbQVRUUklCVVRFX05BTUVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBBdHRyaWJ1dGUgbmFtZSBwb3NpdGlvblxuICAgICAgICAgIGF0dHJOYW1lRW5kSW5kZXggPSAtMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdHRyTmFtZUVuZEluZGV4ID0gcmVnZXgubGFzdEluZGV4IC0gbWF0Y2hbU1BBQ0VTX0FORF9FUVVBTFNdLmxlbmd0aDtcbiAgICAgICAgICBhdHRyTmFtZSA9IG1hdGNoW0FUVFJJQlVURV9OQU1FXTtcbiAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICBtYXRjaFtRVU9URV9DSEFSXSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gdGFnRW5kUmVnZXhcbiAgICAgICAgICAgICAgOiBtYXRjaFtRVU9URV9DSEFSXSA9PT0gJ1wiJ1xuICAgICAgICAgICAgICAgID8gZG91YmxlUXVvdGVBdHRyRW5kUmVnZXhcbiAgICAgICAgICAgICAgICA6IHNpbmdsZVF1b3RlQXR0ckVuZFJlZ2V4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICByZWdleCA9PT0gZG91YmxlUXVvdGVBdHRyRW5kUmVnZXggfHxcbiAgICAgICAgcmVnZXggPT09IHNpbmdsZVF1b3RlQXR0ckVuZFJlZ2V4XG4gICAgICApIHtcbiAgICAgICAgcmVnZXggPSB0YWdFbmRSZWdleDtcbiAgICAgIH0gZWxzZSBpZiAocmVnZXggPT09IGNvbW1lbnRFbmRSZWdleCB8fCByZWdleCA9PT0gY29tbWVudDJFbmRSZWdleCkge1xuICAgICAgICByZWdleCA9IHRleHRFbmRSZWdleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vdCBvbmUgb2YgdGhlIGZpdmUgc3RhdGUgcmVnZXhlcywgc28gaXQgbXVzdCBiZSB0aGUgZHluYW1pY2FsbHlcbiAgICAgICAgLy8gY3JlYXRlZCByYXcgdGV4dCByZWdleCBhbmQgd2UncmUgYXQgdGhlIGNsb3NlIG9mIHRoYXQgZWxlbWVudC5cbiAgICAgICAgcmVnZXggPSB0YWdFbmRSZWdleDtcbiAgICAgICAgcmF3VGV4dEVuZFJlZ2V4ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChERVZfTU9ERSkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBhIGF0dHJOYW1lRW5kSW5kZXgsIHdoaWNoIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZFxuICAgICAgLy8gcmV3cml0ZSB0aGUgYXR0cmlidXRlIG5hbWUsIGFzc2VydCB0aGF0IHdlJ3JlIGluIGEgdmFsaWQgYXR0cmlidXRlXG4gICAgICAvLyBwb3NpdGlvbiAtIGVpdGhlciBpbiBhIHRhZywgb3IgYSBxdW90ZWQgYXR0cmlidXRlIHZhbHVlLlxuICAgICAgY29uc29sZS5hc3NlcnQoXG4gICAgICAgIGF0dHJOYW1lRW5kSW5kZXggPT09IC0xIHx8XG4gICAgICAgICAgcmVnZXggPT09IHRhZ0VuZFJlZ2V4IHx8XG4gICAgICAgICAgcmVnZXggPT09IHNpbmdsZVF1b3RlQXR0ckVuZFJlZ2V4IHx8XG4gICAgICAgICAgcmVnZXggPT09IGRvdWJsZVF1b3RlQXR0ckVuZFJlZ2V4LFxuICAgICAgICAndW5leHBlY3RlZCBwYXJzZSBzdGF0ZSBCJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBXZSBoYXZlIGZvdXIgY2FzZXM6XG4gICAgLy8gIDEuIFdlJ3JlIGluIHRleHQgcG9zaXRpb24sIGFuZCBub3QgaW4gYSByYXcgdGV4dCBlbGVtZW50XG4gICAgLy8gICAgIChyZWdleCA9PT0gdGV4dEVuZFJlZ2V4KTogaW5zZXJ0IGEgY29tbWVudCBtYXJrZXIuXG4gICAgLy8gIDIuIFdlIGhhdmUgYSBub24tbmVnYXRpdmUgYXR0ck5hbWVFbmRJbmRleCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvXG4gICAgLy8gICAgIHJld3JpdGUgdGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGFkZCBhIGJvdW5kIGF0dHJpYnV0ZSBzdWZmaXguXG4gICAgLy8gIDMuIFdlJ3JlIGF0IHRoZSBub24tZmlyc3QgYmluZGluZyBpbiBhIG11bHRpLWJpbmRpbmcgYXR0cmlidXRlLCB1c2UgYVxuICAgIC8vICAgICBwbGFpbiBtYXJrZXIuXG4gICAgLy8gIDQuIFdlJ3JlIHNvbWV3aGVyZSBlbHNlIGluc2lkZSB0aGUgdGFnLiBJZiB3ZSdyZSBpbiBhdHRyaWJ1dGUgbmFtZVxuICAgIC8vICAgICBwb3NpdGlvbiAoYXR0ck5hbWVFbmRJbmRleCA9PT0gLTIpLCBhZGQgYSBzZXF1ZW50aWFsIHN1ZmZpeCB0b1xuICAgIC8vICAgICBnZW5lcmF0ZSBhIHVuaXF1ZSBhdHRyaWJ1dGUgbmFtZS5cblxuICAgIC8vIERldGVjdCBhIGJpbmRpbmcgbmV4dCB0byBzZWxmLWNsb3NpbmcgdGFnIGVuZCBhbmQgaW5zZXJ0IGEgc3BhY2UgdG9cbiAgICAvLyBzZXBhcmF0ZSB0aGUgbWFya2VyIGZyb20gdGhlIHRhZyBlbmQ6XG4gICAgY29uc3QgZW5kID1cbiAgICAgIHJlZ2V4ID09PSB0YWdFbmRSZWdleCAmJiBzdHJpbmdzW2kgKyAxXS5zdGFydHNXaXRoKCcvPicpID8gJyAnIDogJyc7XG4gICAgaHRtbCArPVxuICAgICAgcmVnZXggPT09IHRleHRFbmRSZWdleFxuICAgICAgICA/IHMgKyBub2RlTWFya2VyXG4gICAgICAgIDogYXR0ck5hbWVFbmRJbmRleCA+PSAwXG4gICAgICAgICAgPyAoYXR0ck5hbWVzLnB1c2goYXR0ck5hbWUhKSxcbiAgICAgICAgICAgIHMuc2xpY2UoMCwgYXR0ck5hbWVFbmRJbmRleCkgK1xuICAgICAgICAgICAgICBib3VuZEF0dHJpYnV0ZVN1ZmZpeCArXG4gICAgICAgICAgICAgIHMuc2xpY2UoYXR0ck5hbWVFbmRJbmRleCkpICtcbiAgICAgICAgICAgIG1hcmtlciArXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICA6IHMgKyBtYXJrZXIgKyAoYXR0ck5hbWVFbmRJbmRleCA9PT0gLTIgPyBpIDogZW5kKTtcbiAgfVxuXG4gIGNvbnN0IGh0bWxSZXN1bHQ6IHN0cmluZyB8IFRydXN0ZWRIVE1MID1cbiAgICBodG1sICtcbiAgICAoc3RyaW5nc1tsXSB8fCAnPD8+JykgK1xuICAgICh0eXBlID09PSBTVkdfUkVTVUxUID8gJzwvc3ZnPicgOiB0eXBlID09PSBNQVRITUxfUkVTVUxUID8gJzwvbWF0aD4nIDogJycpO1xuXG4gIC8vIFJldHVybmVkIGFzIGFuIGFycmF5IGZvciB0ZXJzZW5lc3NcbiAgcmV0dXJuIFt0cnVzdEZyb21UZW1wbGF0ZVN0cmluZyhzdHJpbmdzLCBodG1sUmVzdWx0KSwgYXR0ck5hbWVzXTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCB0eXBlIHtUZW1wbGF0ZX07XG5jbGFzcyBUZW1wbGF0ZSB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZWwhOiBIVE1MVGVtcGxhdGVFbGVtZW50O1xuXG4gIHBhcnRzOiBBcnJheTxUZW1wbGF0ZVBhcnQ+ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy8gVGhpcyBwcm9wZXJ0eSBuZWVkcyB0byByZW1haW4gdW5taW5pZmllZC5cbiAgICB7c3RyaW5ncywgWydfJGxpdFR5cGUkJ106IHR5cGV9OiBVbmNvbXBpbGVkVGVtcGxhdGVSZXN1bHQsXG4gICAgb3B0aW9ucz86IFJlbmRlck9wdGlvbnNcbiAgKSB7XG4gICAgbGV0IG5vZGU6IE5vZGUgfCBudWxsO1xuICAgIGxldCBub2RlSW5kZXggPSAwO1xuICAgIGxldCBhdHRyTmFtZUluZGV4ID0gMDtcbiAgICBjb25zdCBwYXJ0Q291bnQgPSBzdHJpbmdzLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzO1xuXG4gICAgLy8gQ3JlYXRlIHRlbXBsYXRlIGVsZW1lbnRcbiAgICBjb25zdCBbaHRtbCwgYXR0ck5hbWVzXSA9IGdldFRlbXBsYXRlSHRtbChzdHJpbmdzLCB0eXBlKTtcbiAgICB0aGlzLmVsID0gVGVtcGxhdGUuY3JlYXRlRWxlbWVudChodG1sLCBvcHRpb25zKTtcbiAgICB3YWxrZXIuY3VycmVudE5vZGUgPSB0aGlzLmVsLmNvbnRlbnQ7XG5cbiAgICAvLyBSZS1wYXJlbnQgU1ZHIG9yIE1hdGhNTCBub2RlcyBpbnRvIHRlbXBsYXRlIHJvb3RcbiAgICBpZiAodHlwZSA9PT0gU1ZHX1JFU1VMVCB8fCB0eXBlID09PSBNQVRITUxfUkVTVUxUKSB7XG4gICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5lbC5jb250ZW50LmZpcnN0Q2hpbGQhO1xuICAgICAgd3JhcHBlci5yZXBsYWNlV2l0aCguLi53cmFwcGVyLmNoaWxkTm9kZXMpO1xuICAgIH1cblxuICAgIC8vIFdhbGsgdGhlIHRlbXBsYXRlIHRvIGZpbmQgYmluZGluZyBtYXJrZXJzIGFuZCBjcmVhdGUgVGVtcGxhdGVQYXJ0c1xuICAgIHdoaWxlICgobm9kZSA9IHdhbGtlci5uZXh0Tm9kZSgpKSAhPT0gbnVsbCAmJiBwYXJ0cy5sZW5ndGggPCBwYXJ0Q291bnQpIHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgIGlmIChERVZfTU9ERSkge1xuICAgICAgICAgIGNvbnN0IHRhZyA9IChub2RlIGFzIEVsZW1lbnQpLmxvY2FsTmFtZTtcbiAgICAgICAgICAvLyBXYXJuIGlmIGB0ZXh0YXJlYWAgaW5jbHVkZXMgYW4gZXhwcmVzc2lvbiBhbmQgdGhyb3cgaWYgYHRlbXBsYXRlYFxuICAgICAgICAgIC8vIGRvZXMgc2luY2UgdGhlc2UgYXJlIG5vdCBzdXBwb3J0ZWQuIFdlIGRvIHRoaXMgYnkgY2hlY2tpbmdcbiAgICAgICAgICAvLyBpbm5lckhUTUwgZm9yIGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIG1hcmtlci4gVGhpcyBjYXRjaGVzXG4gICAgICAgICAgLy8gY2FzZXMgbGlrZSBiaW5kaW5ncyBpbiB0ZXh0YXJlYSB0aGVyZSBtYXJrZXJzIHR1cm4gaW50byB0ZXh0IG5vZGVzLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC9eKD86dGV4dGFyZWF8dGVtcGxhdGUpJC9pIS50ZXN0KHRhZykgJiZcbiAgICAgICAgICAgIChub2RlIGFzIEVsZW1lbnQpLmlubmVySFRNTC5pbmNsdWRlcyhtYXJrZXIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBtID1cbiAgICAgICAgICAgICAgYEV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBcXGAke3RhZ31cXGAgYCArXG4gICAgICAgICAgICAgIGBlbGVtZW50cy4gU2VlIGh0dHBzOi8vbGl0LmRldi9tc2cvZXhwcmVzc2lvbi1pbi0ke3RhZ30gZm9yIG1vcmUgYCArXG4gICAgICAgICAgICAgIGBpbmZvcm1hdGlvbi5gO1xuICAgICAgICAgICAgaWYgKHRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7XG4gICAgICAgICAgICB9IGVsc2UgaXNzdWVXYXJuaW5nKCcnLCBtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyAoanVzdGluZmFnbmFuaSk6IGZvciBhdHRlbXB0ZWQgZHluYW1pYyB0YWcgbmFtZXMsIHdlIGRvbid0XG4gICAgICAgIC8vIGluY3JlbWVudCB0aGUgYmluZGluZ0luZGV4LCBhbmQgaXQnbGwgYmUgb2ZmIGJ5IDEgaW4gdGhlIGVsZW1lbnRcbiAgICAgICAgLy8gYW5kIG9mZiBieSB0d28gYWZ0ZXIgaXQuXG4gICAgICAgIGlmICgobm9kZSBhcyBFbGVtZW50KS5oYXNBdHRyaWJ1dGVzKCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgKG5vZGUgYXMgRWxlbWVudCkuZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xuICAgICAgICAgICAgaWYgKG5hbWUuZW5kc1dpdGgoYm91bmRBdHRyaWJ1dGVTdWZmaXgpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlYWxOYW1lID0gYXR0ck5hbWVzW2F0dHJOYW1lSW5kZXgrK107XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKG5vZGUgYXMgRWxlbWVudCkuZ2V0QXR0cmlidXRlKG5hbWUpITtcbiAgICAgICAgICAgICAgY29uc3Qgc3RhdGljcyA9IHZhbHVlLnNwbGl0KG1hcmtlcik7XG4gICAgICAgICAgICAgIGNvbnN0IG0gPSAvKFsuP0BdKT8oLiopLy5leGVjKHJlYWxOYW1lKSE7XG4gICAgICAgICAgICAgIHBhcnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IEFUVFJJQlVURV9QQVJULFxuICAgICAgICAgICAgICAgIGluZGV4OiBub2RlSW5kZXgsXG4gICAgICAgICAgICAgICAgbmFtZTogbVsyXSxcbiAgICAgICAgICAgICAgICBzdHJpbmdzOiBzdGF0aWNzLFxuICAgICAgICAgICAgICAgIGN0b3I6XG4gICAgICAgICAgICAgICAgICBtWzFdID09PSAnLidcbiAgICAgICAgICAgICAgICAgICAgPyBQcm9wZXJ0eVBhcnRcbiAgICAgICAgICAgICAgICAgICAgOiBtWzFdID09PSAnPydcbiAgICAgICAgICAgICAgICAgICAgICA/IEJvb2xlYW5BdHRyaWJ1dGVQYXJ0XG4gICAgICAgICAgICAgICAgICAgICAgOiBtWzFdID09PSAnQCdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gRXZlbnRQYXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICA6IEF0dHJpYnV0ZVBhcnQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAobm9kZSBhcyBFbGVtZW50KS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aChtYXJrZXIpKSB7XG4gICAgICAgICAgICAgIHBhcnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IEVMRU1FTlRfUEFSVCxcbiAgICAgICAgICAgICAgICBpbmRleDogbm9kZUluZGV4LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgKG5vZGUgYXMgRWxlbWVudCkucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIChqdXN0aW5mYWduYW5pKTogYmVuY2htYXJrIHRoZSByZWdleCBhZ2FpbnN0IHRlc3RpbmcgZm9yIGVhY2hcbiAgICAgICAgLy8gb2YgdGhlIDMgcmF3IHRleHQgZWxlbWVudCBuYW1lcy5cbiAgICAgICAgaWYgKHJhd1RleHRFbGVtZW50LnRlc3QoKG5vZGUgYXMgRWxlbWVudCkudGFnTmFtZSkpIHtcbiAgICAgICAgICAvLyBGb3IgcmF3IHRleHQgZWxlbWVudHMgd2UgbmVlZCB0byBzcGxpdCB0aGUgdGV4dCBjb250ZW50IG9uXG4gICAgICAgICAgLy8gbWFya2VycywgY3JlYXRlIGEgVGV4dCBub2RlIGZvciBlYWNoIHNlZ21lbnQsIGFuZCBjcmVhdGVcbiAgICAgICAgICAvLyBhIFRlbXBsYXRlUGFydCBmb3IgZWFjaCBtYXJrZXIuXG4gICAgICAgICAgY29uc3Qgc3RyaW5ncyA9IChub2RlIGFzIEVsZW1lbnQpLnRleHRDb250ZW50IS5zcGxpdChtYXJrZXIpO1xuICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHN0cmluZ3MubGVuZ3RoIC0gMTtcbiAgICAgICAgICBpZiAobGFzdEluZGV4ID4gMCkge1xuICAgICAgICAgICAgKG5vZGUgYXMgRWxlbWVudCkudGV4dENvbnRlbnQgPSB0cnVzdGVkVHlwZXNcbiAgICAgICAgICAgICAgPyAodHJ1c3RlZFR5cGVzLmVtcHR5U2NyaXB0IGFzIHVua25vd24gYXMgJycpXG4gICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAvLyBHZW5lcmF0ZSBhIG5ldyB0ZXh0IG5vZGUgZm9yIGVhY2ggbGl0ZXJhbCBzZWN0aW9uXG4gICAgICAgICAgICAvLyBUaGVzZSBub2RlcyBhcmUgYWxzbyB1c2VkIGFzIHRoZSBtYXJrZXJzIGZvciBjaGlsZCBwYXJ0c1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXN0SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAobm9kZSBhcyBFbGVtZW50KS5hcHBlbmQoc3RyaW5nc1tpXSwgY3JlYXRlTWFya2VyKCkpO1xuICAgICAgICAgICAgICAvLyBXYWxrIHBhc3QgdGhlIG1hcmtlciBub2RlIHdlIGp1c3QgYWRkZWRcbiAgICAgICAgICAgICAgd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgICAgIHBhcnRzLnB1c2goe3R5cGU6IENISUxEX1BBUlQsIGluZGV4OiArK25vZGVJbmRleH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTm90ZSBiZWNhdXNlIHRoaXMgbWFya2VyIGlzIGFkZGVkIGFmdGVyIHRoZSB3YWxrZXIncyBjdXJyZW50XG4gICAgICAgICAgICAvLyBub2RlLCBpdCB3aWxsIGJlIHdhbGtlZCB0byBpbiB0aGUgb3V0ZXIgbG9vcCAoYW5kIGlnbm9yZWQpLCBzb1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBhZGp1c3Qgbm9kZUluZGV4IGhlcmVcbiAgICAgICAgICAgIChub2RlIGFzIEVsZW1lbnQpLmFwcGVuZChzdHJpbmdzW2xhc3RJbmRleF0sIGNyZWF0ZU1hcmtlcigpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gOCkge1xuICAgICAgICBjb25zdCBkYXRhID0gKG5vZGUgYXMgQ29tbWVudCkuZGF0YTtcbiAgICAgICAgaWYgKGRhdGEgPT09IG1hcmtlck1hdGNoKSB7XG4gICAgICAgICAgcGFydHMucHVzaCh7dHlwZTogQ0hJTERfUEFSVCwgaW5kZXg6IG5vZGVJbmRleH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBpID0gLTE7XG4gICAgICAgICAgd2hpbGUgKChpID0gKG5vZGUgYXMgQ29tbWVudCkuZGF0YS5pbmRleE9mKG1hcmtlciwgaSArIDEpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIENvbW1lbnQgbm9kZSBoYXMgYSBiaW5kaW5nIG1hcmtlciBpbnNpZGUsIG1ha2UgYW4gaW5hY3RpdmUgcGFydFxuICAgICAgICAgICAgLy8gVGhlIGJpbmRpbmcgd29uJ3Qgd29yaywgYnV0IHN1YnNlcXVlbnQgYmluZGluZ3Mgd2lsbFxuICAgICAgICAgICAgcGFydHMucHVzaCh7dHlwZTogQ09NTUVOVF9QQVJULCBpbmRleDogbm9kZUluZGV4fSk7XG4gICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIG1hdGNoXG4gICAgICAgICAgICBpICs9IG1hcmtlci5sZW5ndGggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbm9kZUluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKERFVl9NT0RFKSB7XG4gICAgICAvLyBJZiB0aGVyZSB3YXMgYSBkdXBsaWNhdGUgYXR0cmlidXRlIG9uIGEgdGFnLCB0aGVuIHdoZW4gdGhlIHRhZyBpc1xuICAgICAgLy8gcGFyc2VkIGludG8gYW4gZWxlbWVudCB0aGUgYXR0cmlidXRlIGdldHMgZGUtZHVwbGljYXRlZC4gV2UgY2FuIGRldGVjdFxuICAgICAgLy8gdGhpcyBtaXNtYXRjaCBpZiB3ZSBoYXZlbid0IHByZWNpc2VseSBjb25zdW1lZCBldmVyeSBhdHRyaWJ1dGUgbmFtZVxuICAgICAgLy8gd2hlbiBwcmVwYXJpbmcgdGhlIHRlbXBsYXRlLiBUaGlzIHdvcmtzIGJlY2F1c2UgYGF0dHJOYW1lc2AgaXMgYnVpbHRcbiAgICAgIC8vIGZyb20gdGhlIHRlbXBsYXRlIHN0cmluZyBhbmQgYGF0dHJOYW1lSW5kZXhgIGNvbWVzIGZyb20gcHJvY2Vzc2luZyB0aGVcbiAgICAgIC8vIHJlc3VsdGluZyBET00uXG4gICAgICBpZiAoYXR0ck5hbWVzLmxlbmd0aCAhPT0gYXR0ck5hbWVJbmRleCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYERldGVjdGVkIGR1cGxpY2F0ZSBhdHRyaWJ1dGUgYmluZGluZ3MuIFRoaXMgb2NjdXJzIGlmIHlvdXIgdGVtcGxhdGUgYCArXG4gICAgICAgICAgICBgaGFzIGR1cGxpY2F0ZSBhdHRyaWJ1dGVzIG9uIGFuIGVsZW1lbnQgdGFnLiBGb3IgZXhhbXBsZSBgICtcbiAgICAgICAgICAgIGBcIjxpbnB1dCA/ZGlzYWJsZWQ9XFwke3RydWV9ID9kaXNhYmxlZD1cXCR7ZmFsc2V9PlwiIGNvbnRhaW5zIGEgYCArXG4gICAgICAgICAgICBgZHVwbGljYXRlIFwiZGlzYWJsZWRcIiBhdHRyaWJ1dGUuIFRoZSBlcnJvciB3YXMgZGV0ZWN0ZWQgaW4gYCArXG4gICAgICAgICAgICBgdGhlIGZvbGxvd2luZyB0ZW1wbGF0ZTogXFxuYCArXG4gICAgICAgICAgICAnYCcgK1xuICAgICAgICAgICAgc3RyaW5ncy5qb2luKCckey4uLn0nKSArXG4gICAgICAgICAgICAnYCdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXZSBjb3VsZCBzZXQgd2Fsa2VyLmN1cnJlbnROb2RlIHRvIGFub3RoZXIgbm9kZSBoZXJlIHRvIHByZXZlbnQgYSBtZW1vcnlcbiAgICAvLyBsZWFrLCBidXQgZXZlcnkgdGltZSB3ZSBwcmVwYXJlIGEgdGVtcGxhdGUsIHdlIGltbWVkaWF0ZWx5IHJlbmRlciBpdFxuICAgIC8vIGFuZCByZS11c2UgdGhlIHdhbGtlciBpbiBuZXcgVGVtcGxhdGVJbnN0YW5jZS5fY2xvbmUoKS5cbiAgICBkZWJ1Z0xvZ0V2ZW50ICYmXG4gICAgICBkZWJ1Z0xvZ0V2ZW50KHtcbiAgICAgICAga2luZDogJ3RlbXBsYXRlIHByZXAnLFxuICAgICAgICB0ZW1wbGF0ZTogdGhpcyxcbiAgICAgICAgY2xvbmFibGVUZW1wbGF0ZTogdGhpcy5lbCxcbiAgICAgICAgcGFydHM6IHRoaXMucGFydHMsXG4gICAgICAgIHN0cmluZ3MsXG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRkZW4gdmlhIGBsaXRIdG1sUG9seWZpbGxTdXBwb3J0YCB0byBwcm92aWRlIHBsYXRmb3JtIHN1cHBvcnQuXG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgY3JlYXRlRWxlbWVudChodG1sOiBUcnVzdGVkSFRNTCwgX29wdGlvbnM/OiBSZW5kZXJPcHRpb25zKSB7XG4gICAgY29uc3QgZWwgPSBkLmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgZWwuaW5uZXJIVE1MID0gaHRtbCBhcyB1bmtub3duIGFzIHN0cmluZztcbiAgICByZXR1cm4gZWw7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNjb25uZWN0YWJsZSB7XG4gIF8kcGFyZW50PzogRGlzY29ubmVjdGFibGU7XG4gIF8kZGlzY29ubmVjdGFibGVDaGlsZHJlbj86IFNldDxEaXNjb25uZWN0YWJsZT47XG4gIC8vIFJhdGhlciB0aGFuIGhvbGQgY29ubmVjdGlvbiBzdGF0ZSBvbiBpbnN0YW5jZXMsIERpc2Nvbm5lY3RhYmxlcyByZWN1cnNpdmVseVxuICAvLyBmZXRjaCB0aGUgY29ubmVjdGlvbiBzdGF0ZSBmcm9tIHRoZSBSb290UGFydCB0aGV5IGFyZSBjb25uZWN0ZWQgaW4gdmlhXG4gIC8vIGdldHRlcnMgdXAgdGhlIERpc2Nvbm5lY3RhYmxlIHRyZWUgdmlhIF8kcGFyZW50IHJlZmVyZW5jZXMuIFRoaXMgcHVzaGVzIHRoZVxuICAvLyBjb3N0IG9mIHRyYWNraW5nIHRoZSBpc0Nvbm5lY3RlZCBzdGF0ZSB0byBgQXN5bmNEaXJlY3RpdmVzYCwgYW5kIGF2b2lkc1xuICAvLyBuZWVkaW5nIHRvIHBhc3MgYWxsIERpc2Nvbm5lY3RhYmxlcyAocGFydHMsIHRlbXBsYXRlIGluc3RhbmNlcywgYW5kXG4gIC8vIGRpcmVjdGl2ZXMpIHRoZWlyIGNvbm5lY3Rpb24gc3RhdGUgZWFjaCB0aW1lIGl0IGNoYW5nZXMsIHdoaWNoIHdvdWxkIGJlXG4gIC8vIGNvc3RseSBmb3IgdHJlZXMgdGhhdCBoYXZlIG5vIEFzeW5jRGlyZWN0aXZlcy5cbiAgXyRpc0Nvbm5lY3RlZDogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpcmVjdGl2ZShcbiAgcGFydDogQ2hpbGRQYXJ0IHwgQXR0cmlidXRlUGFydCB8IEVsZW1lbnRQYXJ0LFxuICB2YWx1ZTogdW5rbm93bixcbiAgcGFyZW50OiBEaXJlY3RpdmVQYXJlbnQgPSBwYXJ0LFxuICBhdHRyaWJ1dGVJbmRleD86IG51bWJlclxuKTogdW5rbm93biB7XG4gIC8vIEJhaWwgZWFybHkgaWYgdGhlIHZhbHVlIGlzIGV4cGxpY2l0bHkgbm9DaGFuZ2UuIE5vdGUsIHRoaXMgbWVhbnMgYW55XG4gIC8vIG5lc3RlZCBkaXJlY3RpdmUgaXMgc3RpbGwgYXR0YWNoZWQgYW5kIGlzIG5vdCBydW4uXG4gIGlmICh2YWx1ZSA9PT0gbm9DaGFuZ2UpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgbGV0IGN1cnJlbnREaXJlY3RpdmUgPVxuICAgIGF0dHJpYnV0ZUluZGV4ICE9PSB1bmRlZmluZWRcbiAgICAgID8gKHBhcmVudCBhcyBBdHRyaWJ1dGVQYXJ0KS5fX2RpcmVjdGl2ZXM/LlthdHRyaWJ1dGVJbmRleF1cbiAgICAgIDogKHBhcmVudCBhcyBDaGlsZFBhcnQgfCBFbGVtZW50UGFydCB8IERpcmVjdGl2ZSkuX19kaXJlY3RpdmU7XG4gIGNvbnN0IG5leHREaXJlY3RpdmVDb25zdHJ1Y3RvciA9IGlzUHJpbWl0aXZlKHZhbHVlKVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiAvLyBUaGlzIHByb3BlcnR5IG5lZWRzIHRvIHJlbWFpbiB1bm1pbmlmaWVkLlxuICAgICAgKHZhbHVlIGFzIERpcmVjdGl2ZVJlc3VsdClbJ18kbGl0RGlyZWN0aXZlJCddO1xuICBpZiAoY3VycmVudERpcmVjdGl2ZT8uY29uc3RydWN0b3IgIT09IG5leHREaXJlY3RpdmVDb25zdHJ1Y3Rvcikge1xuICAgIC8vIFRoaXMgcHJvcGVydHkgbmVlZHMgdG8gcmVtYWluIHVubWluaWZpZWQuXG4gICAgY3VycmVudERpcmVjdGl2ZT8uWydfJG5vdGlmeURpcmVjdGl2ZUNvbm5lY3Rpb25DaGFuZ2VkJ10/LihmYWxzZSk7XG4gICAgaWYgKG5leHREaXJlY3RpdmVDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdXJyZW50RGlyZWN0aXZlID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50RGlyZWN0aXZlID0gbmV3IG5leHREaXJlY3RpdmVDb25zdHJ1Y3RvcihwYXJ0IGFzIFBhcnRJbmZvKTtcbiAgICAgIGN1cnJlbnREaXJlY3RpdmUuXyRpbml0aWFsaXplKHBhcnQsIHBhcmVudCwgYXR0cmlidXRlSW5kZXgpO1xuICAgIH1cbiAgICBpZiAoYXR0cmlidXRlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgKChwYXJlbnQgYXMgQXR0cmlidXRlUGFydCkuX19kaXJlY3RpdmVzID8/PSBbXSlbYXR0cmlidXRlSW5kZXhdID1cbiAgICAgICAgY3VycmVudERpcmVjdGl2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgKHBhcmVudCBhcyBDaGlsZFBhcnQgfCBEaXJlY3RpdmUpLl9fZGlyZWN0aXZlID0gY3VycmVudERpcmVjdGl2ZTtcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnREaXJlY3RpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbHVlID0gcmVzb2x2ZURpcmVjdGl2ZShcbiAgICAgIHBhcnQsXG4gICAgICBjdXJyZW50RGlyZWN0aXZlLl8kcmVzb2x2ZShwYXJ0LCAodmFsdWUgYXMgRGlyZWN0aXZlUmVzdWx0KS52YWx1ZXMpLFxuICAgICAgY3VycmVudERpcmVjdGl2ZSxcbiAgICAgIGF0dHJpYnV0ZUluZGV4XG4gICAgKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCB0eXBlIHtUZW1wbGF0ZUluc3RhbmNlfTtcbi8qKlxuICogQW4gdXBkYXRlYWJsZSBpbnN0YW5jZSBvZiBhIFRlbXBsYXRlLiBIb2xkcyByZWZlcmVuY2VzIHRvIHRoZSBQYXJ0cyB1c2VkIHRvXG4gKiB1cGRhdGUgdGhlIHRlbXBsYXRlIGluc3RhbmNlLlxuICovXG5jbGFzcyBUZW1wbGF0ZUluc3RhbmNlIGltcGxlbWVudHMgRGlzY29ubmVjdGFibGUge1xuICBfJHRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgXyRwYXJ0czogQXJyYXk8UGFydCB8IHVuZGVmaW5lZD4gPSBbXTtcblxuICAvKiogQGludGVybmFsICovXG4gIF8kcGFyZW50OiBDaGlsZFBhcnQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgXyRkaXNjb25uZWN0YWJsZUNoaWxkcmVuPzogU2V0PERpc2Nvbm5lY3RhYmxlPiA9IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZTogVGVtcGxhdGUsIHBhcmVudDogQ2hpbGRQYXJ0KSB7XG4gICAgdGhpcy5fJHRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgdGhpcy5fJHBhcmVudCA9IHBhcmVudDtcbiAgfVxuXG4gIC8vIENhbGxlZCBieSBDaGlsZFBhcnQgcGFyZW50Tm9kZSBnZXR0ZXJcbiAgZ2V0IHBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuXyRwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIC8vIFNlZSBjb21tZW50IGluIERpc2Nvbm5lY3RhYmxlIGludGVyZmFjZSBmb3Igd2h5IHRoaXMgaXMgYSBnZXR0ZXJcbiAgZ2V0IF8kaXNDb25uZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuXyRwYXJlbnQuXyRpc0Nvbm5lY3RlZDtcbiAgfVxuXG4gIC8vIFRoaXMgbWV0aG9kIGlzIHNlcGFyYXRlIGZyb20gdGhlIGNvbnN0cnVjdG9yIGJlY2F1c2Ugd2UgbmVlZCB0byByZXR1cm4gYVxuICAvLyBEb2N1bWVudEZyYWdtZW50IGFuZCB3ZSBkb24ndCB3YW50IHRvIGhvbGQgb250byBpdCB3aXRoIGFuIGluc3RhbmNlIGZpZWxkLlxuICBfY2xvbmUob3B0aW9uczogUmVuZGVyT3B0aW9ucyB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsOiB7Y29udGVudH0sXG4gICAgICBwYXJ0czogcGFydHMsXG4gICAgfSA9IHRoaXMuXyR0ZW1wbGF0ZTtcbiAgICBjb25zdCBmcmFnbWVudCA9IChvcHRpb25zPy5jcmVhdGlvblNjb3BlID8/IGQpLmltcG9ydE5vZGUoY29udGVudCwgdHJ1ZSk7XG4gICAgd2Fsa2VyLmN1cnJlbnROb2RlID0gZnJhZ21lbnQ7XG5cbiAgICBsZXQgbm9kZSA9IHdhbGtlci5uZXh0Tm9kZSgpITtcbiAgICBsZXQgbm9kZUluZGV4ID0gMDtcbiAgICBsZXQgcGFydEluZGV4ID0gMDtcbiAgICBsZXQgdGVtcGxhdGVQYXJ0ID0gcGFydHNbMF07XG5cbiAgICB3aGlsZSAodGVtcGxhdGVQYXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChub2RlSW5kZXggPT09IHRlbXBsYXRlUGFydC5pbmRleCkge1xuICAgICAgICBsZXQgcGFydDogUGFydCB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRlbXBsYXRlUGFydC50eXBlID09PSBDSElMRF9QQVJUKSB7XG4gICAgICAgICAgcGFydCA9IG5ldyBDaGlsZFBhcnQoXG4gICAgICAgICAgICBub2RlIGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgbm9kZS5uZXh0U2libGluZyxcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZW1wbGF0ZVBhcnQudHlwZSA9PT0gQVRUUklCVVRFX1BBUlQpIHtcbiAgICAgICAgICBwYXJ0ID0gbmV3IHRlbXBsYXRlUGFydC5jdG9yKFxuICAgICAgICAgICAgbm9kZSBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgIHRlbXBsYXRlUGFydC5uYW1lLFxuICAgICAgICAgICAgdGVtcGxhdGVQYXJ0LnN0cmluZ3MsXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGVtcGxhdGVQYXJ0LnR5cGUgPT09IEVMRU1FTlRfUEFSVCkge1xuICAgICAgICAgIHBhcnQgPSBuZXcgRWxlbWVudFBhcnQobm9kZSBhcyBIVE1MRWxlbWVudCwgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fJHBhcnRzLnB1c2gocGFydCk7XG4gICAgICAgIHRlbXBsYXRlUGFydCA9IHBhcnRzWysrcGFydEluZGV4XTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlSW5kZXggIT09IHRlbXBsYXRlUGFydD8uaW5kZXgpIHtcbiAgICAgICAgbm9kZSA9IHdhbGtlci5uZXh0Tm9kZSgpITtcbiAgICAgICAgbm9kZUluZGV4Kys7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBjdXJyZW50Tm9kZSBhd2F5IGZyb20gdGhlIGNsb25lZCB0cmVlIHNvIHRoYXQgd2VcbiAgICAvLyBkb24ndCBob2xkIG9udG8gdGhlIHRyZWUgZXZlbiBpZiB0aGUgdHJlZSBpcyBkZXRhY2hlZCBhbmQgc2hvdWxkIGJlXG4gICAgLy8gZnJlZWQuXG4gICAgd2Fsa2VyLmN1cnJlbnROb2RlID0gZDtcbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH1cblxuICBfdXBkYXRlKHZhbHVlczogQXJyYXk8dW5rbm93bj4pIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHRoaXMuXyRwYXJ0cykge1xuICAgICAgaWYgKHBhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWJ1Z0xvZ0V2ZW50ICYmXG4gICAgICAgICAgZGVidWdMb2dFdmVudCh7XG4gICAgICAgICAgICBraW5kOiAnc2V0IHBhcnQnLFxuICAgICAgICAgICAgcGFydCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaV0sXG4gICAgICAgICAgICB2YWx1ZUluZGV4OiBpLFxuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgdGVtcGxhdGVJbnN0YW5jZTogdGhpcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKChwYXJ0IGFzIEF0dHJpYnV0ZVBhcnQpLnN0cmluZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChwYXJ0IGFzIEF0dHJpYnV0ZVBhcnQpLl8kc2V0VmFsdWUodmFsdWVzLCBwYXJ0IGFzIEF0dHJpYnV0ZVBhcnQsIGkpO1xuICAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgdmFsdWVzIHRoZSBwYXJ0IGNvbnN1bWVzIGlzIHBhcnQuc3RyaW5ncy5sZW5ndGggLSAxXG4gICAgICAgICAgLy8gc2luY2UgdmFsdWVzIGFyZSBpbiBiZXR3ZWVuIHRlbXBsYXRlIHNwYW5zLiBXZSBpbmNyZW1lbnQgaSBieSAxXG4gICAgICAgICAgLy8gbGF0ZXIgaW4gdGhlIGxvb3AsIHNvIGluY3JlbWVudCBpdCBieSBwYXJ0LnN0cmluZ3MubGVuZ3RoIC0gMiBoZXJlXG4gICAgICAgICAgaSArPSAocGFydCBhcyBBdHRyaWJ1dGVQYXJ0KS5zdHJpbmdzIS5sZW5ndGggLSAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnQuXyRzZXRWYWx1ZSh2YWx1ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfVxuICB9XG59XG5cbi8qXG4gKiBQYXJ0c1xuICovXG50eXBlIEF0dHJpYnV0ZVRlbXBsYXRlUGFydCA9IHtcbiAgcmVhZG9ubHkgdHlwZTogdHlwZW9mIEFUVFJJQlVURV9QQVJUO1xuICByZWFkb25seSBpbmRleDogbnVtYmVyO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGN0b3I6IHR5cGVvZiBBdHRyaWJ1dGVQYXJ0O1xuICByZWFkb25seSBzdHJpbmdzOiBSZWFkb25seUFycmF5PHN0cmluZz47XG59O1xudHlwZSBDaGlsZFRlbXBsYXRlUGFydCA9IHtcbiAgcmVhZG9ubHkgdHlwZTogdHlwZW9mIENISUxEX1BBUlQ7XG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG59O1xudHlwZSBFbGVtZW50VGVtcGxhdGVQYXJ0ID0ge1xuICByZWFkb25seSB0eXBlOiB0eXBlb2YgRUxFTUVOVF9QQVJUO1xuICByZWFkb25seSBpbmRleDogbnVtYmVyO1xufTtcbnR5cGUgQ29tbWVudFRlbXBsYXRlUGFydCA9IHtcbiAgcmVhZG9ubHkgdHlwZTogdHlwZW9mIENPTU1FTlRfUEFSVDtcbiAgcmVhZG9ubHkgaW5kZXg6IG51bWJlcjtcbn07XG5cbi8qKlxuICogQSBUZW1wbGF0ZVBhcnQgcmVwcmVzZW50cyBhIGR5bmFtaWMgcGFydCBpbiBhIHRlbXBsYXRlLCBiZWZvcmUgdGhlIHRlbXBsYXRlXG4gKiBpcyBpbnN0YW50aWF0ZWQuIFdoZW4gYSB0ZW1wbGF0ZSBpcyBpbnN0YW50aWF0ZWQgUGFydHMgYXJlIGNyZWF0ZWQgZnJvbVxuICogVGVtcGxhdGVQYXJ0cy5cbiAqL1xudHlwZSBUZW1wbGF0ZVBhcnQgPVxuICB8IENoaWxkVGVtcGxhdGVQYXJ0XG4gIHwgQXR0cmlidXRlVGVtcGxhdGVQYXJ0XG4gIHwgRWxlbWVudFRlbXBsYXRlUGFydFxuICB8IENvbW1lbnRUZW1wbGF0ZVBhcnQ7XG5cbmV4cG9ydCB0eXBlIFBhcnQgPVxuICB8IENoaWxkUGFydFxuICB8IEF0dHJpYnV0ZVBhcnRcbiAgfCBQcm9wZXJ0eVBhcnRcbiAgfCBCb29sZWFuQXR0cmlidXRlUGFydFxuICB8IEVsZW1lbnRQYXJ0XG4gIHwgRXZlbnRQYXJ0O1xuXG5leHBvcnQgdHlwZSB7Q2hpbGRQYXJ0fTtcbmNsYXNzIENoaWxkUGFydCBpbXBsZW1lbnRzIERpc2Nvbm5lY3RhYmxlIHtcbiAgcmVhZG9ubHkgdHlwZSA9IENISUxEX1BBUlQ7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFJlbmRlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIF8kY29tbWl0dGVkVmFsdWU6IHVua25vd24gPSBub3RoaW5nO1xuICAvKiogQGludGVybmFsICovXG4gIF9fZGlyZWN0aXZlPzogRGlyZWN0aXZlO1xuICAvKiogQGludGVybmFsICovXG4gIF8kc3RhcnROb2RlOiBDaGlsZE5vZGU7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgXyRlbmROb2RlOiBDaGlsZE5vZGUgfCBudWxsO1xuICBwcml2YXRlIF90ZXh0U2FuaXRpemVyOiBWYWx1ZVNhbml0aXplciB8IHVuZGVmaW5lZDtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfJHBhcmVudDogRGlzY29ubmVjdGFibGUgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBDb25uZWN0aW9uIHN0YXRlIGZvciBSb290UGFydHMgb25seSAoaS5lLiBDaGlsZFBhcnQgd2l0aG91dCBfJHBhcmVudFxuICAgKiByZXR1cm5lZCBmcm9tIHRvcC1sZXZlbCBgcmVuZGVyYCkuIFRoaXMgZmllbGQgaXMgdW51c2VkIG90aGVyd2lzZS4gVGhlXG4gICAqIGludGVudGlvbiB3b3VsZCBiZSBjbGVhcmVyIGlmIHdlIG1hZGUgYFJvb3RQYXJ0YCBhIHN1YmNsYXNzIG9mIGBDaGlsZFBhcnRgXG4gICAqIHdpdGggdGhpcyBmaWVsZCAoYW5kIGEgZGlmZmVyZW50IF8kaXNDb25uZWN0ZWQgZ2V0dGVyKSwgYnV0IHRoZSBzdWJjbGFzc1xuICAgKiBjYXVzZWQgYSBwZXJmIHJlZ3Jlc3Npb24sIHBvc3NpYmx5IGR1ZSB0byBtYWtpbmcgY2FsbCBzaXRlcyBwb2x5bW9ycGhpYy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBfX2lzQ29ubmVjdGVkOiBib29sZWFuO1xuXG4gIC8vIFNlZSBjb21tZW50IGluIERpc2Nvbm5lY3RhYmxlIGludGVyZmFjZSBmb3Igd2h5IHRoaXMgaXMgYSBnZXR0ZXJcbiAgZ2V0IF8kaXNDb25uZWN0ZWQoKSB7XG4gICAgLy8gQ2hpbGRQYXJ0cyB0aGF0IGFyZSBub3QgYXQgdGhlIHJvb3Qgc2hvdWxkIGFsd2F5cyBiZSBjcmVhdGVkIHdpdGggYVxuICAgIC8vIHBhcmVudDsgb25seSBSb290Q2hpbGROb2RlJ3Mgd29uJ3QsIHNvIHRoZXkgcmV0dXJuIHRoZSBsb2NhbCBpc0Nvbm5lY3RlZFxuICAgIC8vIHN0YXRlXG4gICAgcmV0dXJuIHRoaXMuXyRwYXJlbnQ/Ll8kaXNDb25uZWN0ZWQgPz8gdGhpcy5fX2lzQ29ubmVjdGVkO1xuICB9XG5cbiAgLy8gVGhlIGZvbGxvd2luZyBmaWVsZHMgd2lsbCBiZSBwYXRjaGVkIG9udG8gQ2hpbGRQYXJ0cyB3aGVuIHJlcXVpcmVkIGJ5XG4gIC8vIEFzeW5jRGlyZWN0aXZlXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgXyRkaXNjb25uZWN0YWJsZUNoaWxkcmVuPzogU2V0PERpc2Nvbm5lY3RhYmxlPiA9IHVuZGVmaW5lZDtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfJG5vdGlmeUNvbm5lY3Rpb25DaGFuZ2VkPyhcbiAgICBpc0Nvbm5lY3RlZDogYm9vbGVhbixcbiAgICByZW1vdmVGcm9tUGFyZW50PzogYm9vbGVhbixcbiAgICBmcm9tPzogbnVtYmVyXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgXyRyZXBhcmVudERpc2Nvbm5lY3RhYmxlcz8ocGFyZW50OiBEaXNjb25uZWN0YWJsZSk6IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RhcnROb2RlOiBDaGlsZE5vZGUsXG4gICAgZW5kTm9kZTogQ2hpbGROb2RlIHwgbnVsbCxcbiAgICBwYXJlbnQ6IFRlbXBsYXRlSW5zdGFuY2UgfCBDaGlsZFBhcnQgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogUmVuZGVyT3B0aW9ucyB8IHVuZGVmaW5lZFxuICApIHtcbiAgICB0aGlzLl8kc3RhcnROb2RlID0gc3RhcnROb2RlO1xuICAgIHRoaXMuXyRlbmROb2RlID0gZW5kTm9kZTtcbiAgICB0aGlzLl8kcGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgLy8gTm90ZSBfX2lzQ29ubmVjdGVkIGlzIG9ubHkgZXZlciBhY2Nlc3NlZCBvbiBSb290UGFydHMgKGkuZS4gd2hlbiB0aGVyZSBpc1xuICAgIC8vIG5vIF8kcGFyZW50KTsgdGhlIHZhbHVlIG9uIGEgbm9uLXJvb3QtcGFydCBpcyBcImRvbid0IGNhcmVcIiwgYnV0IGNoZWNraW5nXG4gICAgLy8gZm9yIHBhcmVudCB3b3VsZCBiZSBtb3JlIGNvZGVcbiAgICB0aGlzLl9faXNDb25uZWN0ZWQgPSBvcHRpb25zPy5pc0Nvbm5lY3RlZCA/PyB0cnVlO1xuICAgIGlmIChFTkFCTEVfRVhUUkFfU0VDVVJJVFlfSE9PS1MpIHtcbiAgICAgIC8vIEV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBmb3IgY29uc2lzdGVudCBjbGFzcyBzaGFwZS5cbiAgICAgIHRoaXMuX3RleHRTYW5pdGl6ZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgbm9kZSBpbnRvIHdoaWNoIHRoZSBwYXJ0IHJlbmRlcnMgaXRzIGNvbnRlbnQuXG4gICAqXG4gICAqIEEgQ2hpbGRQYXJ0J3MgY29udGVudCBjb25zaXN0cyBvZiBhIHJhbmdlIG9mIGFkamFjZW50IGNoaWxkIG5vZGVzIG9mXG4gICAqIGAucGFyZW50Tm9kZWAsIHBvc3NpYmx5IGJvcmRlcmVkIGJ5ICdtYXJrZXIgbm9kZXMnIChgLnN0YXJ0Tm9kZWAgYW5kXG4gICAqIGAuZW5kTm9kZWApLlxuICAgKlxuICAgKiAtIElmIGJvdGggYC5zdGFydE5vZGVgIGFuZCBgLmVuZE5vZGVgIGFyZSBub24tbnVsbCwgdGhlbiB0aGUgcGFydCdzIGNvbnRlbnRcbiAgICogY29uc2lzdHMgb2YgYWxsIHNpYmxpbmdzIGJldHdlZW4gYC5zdGFydE5vZGVgIGFuZCBgLmVuZE5vZGVgLCBleGNsdXNpdmVseS5cbiAgICpcbiAgICogLSBJZiBgLnN0YXJ0Tm9kZWAgaXMgbm9uLW51bGwgYnV0IGAuZW5kTm9kZWAgaXMgbnVsbCwgdGhlbiB0aGUgcGFydCdzXG4gICAqIGNvbnRlbnQgY29uc2lzdHMgb2YgYWxsIHNpYmxpbmdzIGZvbGxvd2luZyBgLnN0YXJ0Tm9kZWAsIHVwIHRvIGFuZFxuICAgKiBpbmNsdWRpbmcgdGhlIGxhc3QgY2hpbGQgb2YgYC5wYXJlbnROb2RlYC4gSWYgYC5lbmROb2RlYCBpcyBub24tbnVsbCwgdGhlblxuICAgKiBgLnN0YXJ0Tm9kZWAgd2lsbCBhbHdheXMgYmUgbm9uLW51bGwuXG4gICAqXG4gICAqIC0gSWYgYm90aCBgLmVuZE5vZGVgIGFuZCBgLnN0YXJ0Tm9kZWAgYXJlIG51bGwsIHRoZW4gdGhlIHBhcnQncyBjb250ZW50XG4gICAqIGNvbnNpc3RzIG9mIGFsbCBjaGlsZCBub2RlcyBvZiBgLnBhcmVudE5vZGVgLlxuICAgKi9cbiAgZ2V0IHBhcmVudE5vZGUoKTogTm9kZSB7XG4gICAgbGV0IHBhcmVudE5vZGU6IE5vZGUgPSB3cmFwKHRoaXMuXyRzdGFydE5vZGUpLnBhcmVudE5vZGUhO1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuXyRwYXJlbnQ7XG4gICAgaWYgKFxuICAgICAgcGFyZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHBhcmVudE5vZGU/Lm5vZGVUeXBlID09PSAxMSAvKiBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UICovXG4gICAgKSB7XG4gICAgICAvLyBJZiB0aGUgcGFyZW50Tm9kZSBpcyBhIERvY3VtZW50RnJhZ21lbnQsIGl0IG1heSBiZSBiZWNhdXNlIHRoZSBET00gaXNcbiAgICAgIC8vIHN0aWxsIGluIHRoZSBjbG9uZWQgZnJhZ21lbnQgZHVyaW5nIGluaXRpYWwgcmVuZGVyOyBpZiBzbywgZ2V0IHRoZSByZWFsXG4gICAgICAvLyBwYXJlbnROb2RlIHRoZSBwYXJ0IHdpbGwgYmUgY29tbWl0dGVkIGludG8gYnkgYXNraW5nIHRoZSBwYXJlbnQuXG4gICAgICBwYXJlbnROb2RlID0gKHBhcmVudCBhcyBDaGlsZFBhcnQgfCBUZW1wbGF0ZUluc3RhbmNlKS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGFydCdzIGxlYWRpbmcgbWFya2VyIG5vZGUsIGlmIGFueS4gU2VlIGAucGFyZW50Tm9kZWAgZm9yIG1vcmVcbiAgICogaW5mb3JtYXRpb24uXG4gICAqL1xuICBnZXQgc3RhcnROb2RlKCk6IE5vZGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fJHN0YXJ0Tm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGFydCdzIHRyYWlsaW5nIG1hcmtlciBub2RlLCBpZiBhbnkuIFNlZSBgLnBhcmVudE5vZGVgIGZvciBtb3JlXG4gICAqIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgZ2V0IGVuZE5vZGUoKTogTm9kZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl8kZW5kTm9kZTtcbiAgfVxuXG4gIF8kc2V0VmFsdWUodmFsdWU6IHVua25vd24sIGRpcmVjdGl2ZVBhcmVudDogRGlyZWN0aXZlUGFyZW50ID0gdGhpcyk6IHZvaWQge1xuICAgIGlmIChERVZfTU9ERSAmJiB0aGlzLnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoaXMgXFxgQ2hpbGRQYXJ0XFxgIGhhcyBubyBcXGBwYXJlbnROb2RlXFxgIGFuZCB0aGVyZWZvcmUgY2Fubm90IGFjY2VwdCBhIHZhbHVlLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgZWxlbWVudCBjb250YWluaW5nIHRoZSBwYXJ0IHdhcyBtYW5pcHVsYXRlZCBpbiBhbiB1bnN1cHBvcnRlZCB3YXkgb3V0c2lkZSBvZiBMaXQncyBjb250cm9sIHN1Y2ggdGhhdCB0aGUgcGFydCdzIG1hcmtlciBub2RlcyB3ZXJlIGVqZWN0ZWQgZnJvbSBET00uIEZvciBleGFtcGxlLCBzZXR0aW5nIHRoZSBlbGVtZW50J3MgXFxgaW5uZXJIVE1MXFxgIG9yIFxcYHRleHRDb250ZW50XFxgIGNhbiBkbyB0aGlzLmBcbiAgICAgICk7XG4gICAgfVxuICAgIHZhbHVlID0gcmVzb2x2ZURpcmVjdGl2ZSh0aGlzLCB2YWx1ZSwgZGlyZWN0aXZlUGFyZW50KTtcbiAgICBpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG4gICAgICAvLyBOb24tcmVuZGVyaW5nIGNoaWxkIHZhbHVlcy4gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGVzZSBkbyBub3QgcmVuZGVyXG4gICAgICAvLyBlbXB0eSB0ZXh0IG5vZGVzIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHByZXZlbnRpbmcgZGVmYXVsdCA8c2xvdD5cbiAgICAgIC8vIGZhbGxiYWNrIGNvbnRlbnQuXG4gICAgICBpZiAodmFsdWUgPT09IG5vdGhpbmcgfHwgdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgaWYgKHRoaXMuXyRjb21taXR0ZWRWYWx1ZSAhPT0gbm90aGluZykge1xuICAgICAgICAgIGRlYnVnTG9nRXZlbnQgJiZcbiAgICAgICAgICAgIGRlYnVnTG9nRXZlbnQoe1xuICAgICAgICAgICAgICBraW5kOiAnY29tbWl0IG5vdGhpbmcgdG8gY2hpbGQnLFxuICAgICAgICAgICAgICBzdGFydDogdGhpcy5fJHN0YXJ0Tm9kZSxcbiAgICAgICAgICAgICAgZW5kOiB0aGlzLl8kZW5kTm9kZSxcbiAgICAgICAgICAgICAgcGFyZW50OiB0aGlzLl8kcGFyZW50LFxuICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLl8kY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl8kY29tbWl0dGVkVmFsdWUgPSBub3RoaW5nO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gdGhpcy5fJGNvbW1pdHRlZFZhbHVlICYmIHZhbHVlICE9PSBub0NoYW5nZSkge1xuICAgICAgICB0aGlzLl9jb21taXRUZXh0KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgcHJvcGVydHkgbmVlZHMgdG8gcmVtYWluIHVubWluaWZpZWQuXG4gICAgfSBlbHNlIGlmICgodmFsdWUgYXMgVGVtcGxhdGVSZXN1bHQpWydfJGxpdFR5cGUkJ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY29tbWl0VGVtcGxhdGVSZXN1bHQodmFsdWUgYXMgVGVtcGxhdGVSZXN1bHQpO1xuICAgIH0gZWxzZSBpZiAoKHZhbHVlIGFzIE5vZGUpLm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChERVZfTU9ERSAmJiB0aGlzLm9wdGlvbnM/Lmhvc3QgPT09IHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2NvbW1pdFRleHQoXG4gICAgICAgICAgYFtwcm9iYWJsZSBtaXN0YWtlOiByZW5kZXJlZCBhIHRlbXBsYXRlJ3MgaG9zdCBpbiBpdHNlbGYgYCArXG4gICAgICAgICAgICBgKGNvbW1vbmx5IGNhdXNlZCBieSB3cml0aW5nIFxcJHt0aGlzfSBpbiBhIHRlbXBsYXRlXWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gcmVuZGVyIHRoZSB0ZW1wbGF0ZSBob3N0YCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBgaW5zaWRlIGl0c2VsZi4gVGhpcyBpcyBhbG1vc3QgYWx3YXlzIGEgbWlzdGFrZSwgYW5kIGluIGRldiBtb2RlIGAsXG4gICAgICAgICAgYHdlIHJlbmRlciBzb21lIHdhcm5pbmcgdGV4dC4gSW4gcHJvZHVjdGlvbiBob3dldmVyLCB3ZSdsbCBgLFxuICAgICAgICAgIGByZW5kZXIgaXQsIHdoaWNoIHdpbGwgdXN1YWxseSByZXN1bHQgaW4gYW4gZXJyb3IsIGFuZCBzb21ldGltZXMgYCxcbiAgICAgICAgICBgaW4gdGhlIGVsZW1lbnQgZGlzYXBwZWFyaW5nIGZyb20gdGhlIERPTS5gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NvbW1pdE5vZGUodmFsdWUgYXMgTm9kZSk7XG4gICAgfSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuICAgICAgdGhpcy5fY29tbWl0SXRlcmFibGUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjaywgd2lsbCByZW5kZXIgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgICAgdGhpcy5fY29tbWl0VGV4dCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaW5zZXJ0PFQgZXh0ZW5kcyBOb2RlPihub2RlOiBUKSB7XG4gICAgcmV0dXJuIHdyYXAod3JhcCh0aGlzLl8kc3RhcnROb2RlKS5wYXJlbnROb2RlISkuaW5zZXJ0QmVmb3JlKFxuICAgICAgbm9kZSxcbiAgICAgIHRoaXMuXyRlbmROb2RlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbW1pdE5vZGUodmFsdWU6IE5vZGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fJGNvbW1pdHRlZFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fJGNsZWFyKCk7XG4gICAgICBpZiAoXG4gICAgICAgIEVOQUJMRV9FWFRSQV9TRUNVUklUWV9IT09LUyAmJlxuICAgICAgICBzYW5pdGl6ZXJGYWN0b3J5SW50ZXJuYWwgIT09IG5vb3BTYW5pdGl6ZXJcbiAgICAgICkge1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlTmFtZSA9IHRoaXMuXyRzdGFydE5vZGUucGFyZW50Tm9kZT8ubm9kZU5hbWU7XG4gICAgICAgIGlmIChwYXJlbnROb2RlTmFtZSA9PT0gJ1NUWUxFJyB8fCBwYXJlbnROb2RlTmFtZSA9PT0gJ1NDUklQVCcpIHtcbiAgICAgICAgICBsZXQgbWVzc2FnZSA9ICdGb3JiaWRkZW4nO1xuICAgICAgICAgIGlmIChERVZfTU9ERSkge1xuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGVOYW1lID09PSAnU1RZTEUnKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIGBMaXQgZG9lcyBub3Qgc3VwcG9ydCBiaW5kaW5nIGluc2lkZSBzdHlsZSBub2Rlcy4gYCArXG4gICAgICAgICAgICAgICAgYFRoaXMgaXMgYSBzZWN1cml0eSByaXNrLCBhcyBzdHlsZSBpbmplY3Rpb24gYXR0YWNrcyBjYW4gYCArXG4gICAgICAgICAgICAgICAgYGV4ZmlsdHJhdGUgZGF0YSBhbmQgc3Bvb2YgVUlzLiBgICtcbiAgICAgICAgICAgICAgICBgQ29uc2lkZXIgaW5zdGVhZCB1c2luZyBjc3NcXGAuLi5cXGAgbGl0ZXJhbHMgYCArXG4gICAgICAgICAgICAgICAgYHRvIGNvbXBvc2Ugc3R5bGVzLCBhbmQgZG8gZHluYW1pYyBzdHlsaW5nIHdpdGggYCArXG4gICAgICAgICAgICAgICAgYGNzcyBjdXN0b20gcHJvcGVydGllcywgOjpwYXJ0cywgPHNsb3Q+cywgYCArXG4gICAgICAgICAgICAgICAgYGFuZCBieSBtdXRhdGluZyB0aGUgRE9NIHJhdGhlciB0aGFuIHN0eWxlc2hlZXRzLmA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgICAgICBgTGl0IGRvZXMgbm90IHN1cHBvcnQgYmluZGluZyBpbnNpZGUgc2NyaXB0IG5vZGVzLiBgICtcbiAgICAgICAgICAgICAgICBgVGhpcyBpcyBhIHNlY3VyaXR5IHJpc2ssIGFzIGl0IGNvdWxkIGFsbG93IGFyYml0cmFyeSBgICtcbiAgICAgICAgICAgICAgICBgY29kZSBleGVjdXRpb24uYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWJ1Z0xvZ0V2ZW50ICYmXG4gICAgICAgIGRlYnVnTG9nRXZlbnQoe1xuICAgICAgICAgIGtpbmQ6ICdjb21taXQgbm9kZScsXG4gICAgICAgICAgc3RhcnQ6IHRoaXMuXyRzdGFydE5vZGUsXG4gICAgICAgICAgcGFyZW50OiB0aGlzLl8kcGFyZW50LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5fJGNvbW1pdHRlZFZhbHVlID0gdGhpcy5faW5zZXJ0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jb21taXRUZXh0KHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgLy8gSWYgdGhlIGNvbW1pdHRlZCB2YWx1ZSBpcyBhIHByaW1pdGl2ZSBpdCBtZWFucyB3ZSBjYWxsZWQgX2NvbW1pdFRleHQgb25cbiAgICAvLyB0aGUgcHJldmlvdXMgcmVuZGVyLCBhbmQgd2Uga25vdyB0aGF0IHRoaXMuXyRzdGFydE5vZGUubmV4dFNpYmxpbmcgaXMgYVxuICAgIC8vIFRleHQgbm9kZS4gV2UgY2FuIG5vdyBqdXN0IHJlcGxhY2UgdGhlIHRleHQgY29udGVudCAoLmRhdGEpIG9mIHRoZSBub2RlLlxuICAgIGlmIChcbiAgICAgIHRoaXMuXyRjb21taXR0ZWRWYWx1ZSAhPT0gbm90aGluZyAmJlxuICAgICAgaXNQcmltaXRpdmUodGhpcy5fJGNvbW1pdHRlZFZhbHVlKVxuICAgICkge1xuICAgICAgY29uc3Qgbm9kZSA9IHdyYXAodGhpcy5fJHN0YXJ0Tm9kZSkubmV4dFNpYmxpbmcgYXMgVGV4dDtcbiAgICAgIGlmIChFTkFCTEVfRVhUUkFfU0VDVVJJVFlfSE9PS1MpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RleHRTYW5pdGl6ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX3RleHRTYW5pdGl6ZXIgPSBjcmVhdGVTYW5pdGl6ZXIobm9kZSwgJ2RhdGEnLCAncHJvcGVydHknKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IHRoaXMuX3RleHRTYW5pdGl6ZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgZGVidWdMb2dFdmVudCAmJlxuICAgICAgICBkZWJ1Z0xvZ0V2ZW50KHtcbiAgICAgICAgICBraW5kOiAnY29tbWl0IHRleHQnLFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgIChub2RlIGFzIFRleHQpLmRhdGEgPSB2YWx1ZSBhcyBzdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChFTkFCTEVfRVhUUkFfU0VDVVJJVFlfSE9PS1MpIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkLmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICAgICAgdGhpcy5fY29tbWl0Tm9kZSh0ZXh0Tm9kZSk7XG4gICAgICAgIC8vIFdoZW4gc2V0dGluZyB0ZXh0IGNvbnRlbnQsIGZvciBzZWN1cml0eSBwdXJwb3NlcyBpdCBtYXR0ZXJzIGEgbG90XG4gICAgICAgIC8vIHdoYXQgdGhlIHBhcmVudCBpcy4gRm9yIGV4YW1wbGUsIDxzdHlsZT4gYW5kIDxzY3JpcHQ+IG5lZWQgdG8gYmVcbiAgICAgICAgLy8gaGFuZGxlZCB3aXRoIGNhcmUsIHdoaWxlIDxzcGFuPiBkb2VzIG5vdC4gU28gZmlyc3Qgd2UgbmVlZCB0byBwdXQgYVxuICAgICAgICAvLyB0ZXh0IG5vZGUgaW50byB0aGUgZG9jdW1lbnQsIHRoZW4gd2UgY2FuIHNhbml0aXplIGl0cyBjb250ZW50LlxuICAgICAgICBpZiAodGhpcy5fdGV4dFNhbml0aXplciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fdGV4dFNhbml0aXplciA9IGNyZWF0ZVNhbml0aXplcih0ZXh0Tm9kZSwgJ2RhdGEnLCAncHJvcGVydHknKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IHRoaXMuX3RleHRTYW5pdGl6ZXIodmFsdWUpO1xuICAgICAgICBkZWJ1Z0xvZ0V2ZW50ICYmXG4gICAgICAgICAgZGVidWdMb2dFdmVudCh7XG4gICAgICAgICAgICBraW5kOiAnY29tbWl0IHRleHQnLFxuICAgICAgICAgICAgbm9kZTogdGV4dE5vZGUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGV4dE5vZGUuZGF0YSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NvbW1pdE5vZGUoZC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSBhcyBzdHJpbmcpKTtcbiAgICAgICAgZGVidWdMb2dFdmVudCAmJlxuICAgICAgICAgIGRlYnVnTG9nRXZlbnQoe1xuICAgICAgICAgICAga2luZDogJ2NvbW1pdCB0ZXh0JyxcbiAgICAgICAgICAgIG5vZGU6IHdyYXAodGhpcy5fJHN0YXJ0Tm9kZSkubmV4dFNpYmxpbmcgYXMgVGV4dCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl8kY29tbWl0dGVkVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbW1pdFRlbXBsYXRlUmVzdWx0KFxuICAgIHJlc3VsdDogVGVtcGxhdGVSZXN1bHQgfCBDb21waWxlZFRlbXBsYXRlUmVzdWx0XG4gICk6IHZvaWQge1xuICAgIC8vIFRoaXMgcHJvcGVydHkgbmVlZHMgdG8gcmVtYWluIHVubWluaWZpZWQuXG4gICAgY29uc3Qge3ZhbHVlcywgWydfJGxpdFR5cGUkJ106IHR5cGV9ID0gcmVzdWx0O1xuICAgIC8vIElmICRsaXRUeXBlJCBpcyBhIG51bWJlciwgcmVzdWx0IGlzIGEgcGxhaW4gVGVtcGxhdGVSZXN1bHQgYW5kIHdlIGdldFxuICAgIC8vIHRoZSB0ZW1wbGF0ZSBmcm9tIHRoZSB0ZW1wbGF0ZSBjYWNoZS4gSWYgbm90LCByZXN1bHQgaXMgYVxuICAgIC8vIENvbXBpbGVkVGVtcGxhdGVSZXN1bHQgYW5kIF8kbGl0VHlwZSQgaXMgYSBDb21waWxlZFRlbXBsYXRlIGFuZCB3ZSBuZWVkXG4gICAgLy8gdG8gY3JlYXRlIHRoZSA8dGVtcGxhdGU+IGVsZW1lbnQgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0LlxuICAgIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSB8IENvbXBpbGVkVGVtcGxhdGUgPVxuICAgICAgdHlwZW9mIHR5cGUgPT09ICdudW1iZXInXG4gICAgICAgID8gdGhpcy5fJGdldFRlbXBsYXRlKHJlc3VsdCBhcyBVbmNvbXBpbGVkVGVtcGxhdGVSZXN1bHQpXG4gICAgICAgIDogKHR5cGUuZWwgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgKHR5cGUuZWwgPSBUZW1wbGF0ZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICB0cnVzdEZyb21UZW1wbGF0ZVN0cmluZyh0eXBlLmgsIHR5cGUuaFswXSksXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgdHlwZSk7XG5cbiAgICBpZiAoKHRoaXMuXyRjb21taXR0ZWRWYWx1ZSBhcyBUZW1wbGF0ZUluc3RhbmNlKT8uXyR0ZW1wbGF0ZSA9PT0gdGVtcGxhdGUpIHtcbiAgICAgIGRlYnVnTG9nRXZlbnQgJiZcbiAgICAgICAgZGVidWdMb2dFdmVudCh7XG4gICAgICAgICAga2luZDogJ3RlbXBsYXRlIHVwZGF0aW5nJyxcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBpbnN0YW5jZTogdGhpcy5fJGNvbW1pdHRlZFZhbHVlIGFzIFRlbXBsYXRlSW5zdGFuY2UsXG4gICAgICAgICAgcGFydHM6ICh0aGlzLl8kY29tbWl0dGVkVmFsdWUgYXMgVGVtcGxhdGVJbnN0YW5jZSkuXyRwYXJ0cyxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgdmFsdWVzLFxuICAgICAgICB9KTtcbiAgICAgICh0aGlzLl8kY29tbWl0dGVkVmFsdWUgYXMgVGVtcGxhdGVJbnN0YW5jZSkuX3VwZGF0ZSh2YWx1ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBUZW1wbGF0ZUluc3RhbmNlKHRlbXBsYXRlIGFzIFRlbXBsYXRlLCB0aGlzKTtcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gaW5zdGFuY2UuX2Nsb25lKHRoaXMub3B0aW9ucyk7XG4gICAgICBkZWJ1Z0xvZ0V2ZW50ICYmXG4gICAgICAgIGRlYnVnTG9nRXZlbnQoe1xuICAgICAgICAgIGtpbmQ6ICd0ZW1wbGF0ZSBpbnN0YW50aWF0ZWQnLFxuICAgICAgICAgIHRlbXBsYXRlLFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIHBhcnRzOiBpbnN0YW5jZS5fJHBhcnRzLFxuICAgICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgIH0pO1xuICAgICAgaW5zdGFuY2UuX3VwZGF0ZSh2YWx1ZXMpO1xuICAgICAgZGVidWdMb2dFdmVudCAmJlxuICAgICAgICBkZWJ1Z0xvZ0V2ZW50KHtcbiAgICAgICAgICBraW5kOiAndGVtcGxhdGUgaW5zdGFudGlhdGVkIGFuZCB1cGRhdGVkJyxcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBwYXJ0czogaW5zdGFuY2UuXyRwYXJ0cyxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgICAgdmFsdWVzLFxuICAgICAgICB9KTtcbiAgICAgIHRoaXMuX2NvbW1pdE5vZGUoZnJhZ21lbnQpO1xuICAgICAgdGhpcy5fJGNvbW1pdHRlZFZhbHVlID0gaW5zdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgLy8gT3ZlcnJpZGRlbiB2aWEgYGxpdEh0bWxQb2x5ZmlsbFN1cHBvcnRgIHRvIHByb3ZpZGUgcGxhdGZvcm0gc3VwcG9ydC5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfJGdldFRlbXBsYXRlKHJlc3VsdDogVW5jb21waWxlZFRlbXBsYXRlUmVzdWx0KSB7XG4gICAgbGV0IHRlbXBsYXRlID0gdGVtcGxhdGVDYWNoZS5nZXQocmVzdWx0LnN0cmluZ3MpO1xuICAgIGlmICh0ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0ZW1wbGF0ZUNhY2hlLnNldChyZXN1bHQuc3RyaW5ncywgKHRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKHJlc3VsdCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29tbWl0SXRlcmFibGUodmFsdWU6IEl0ZXJhYmxlPHVua25vd24+KTogdm9pZCB7XG4gICAgLy8gRm9yIGFuIEl0ZXJhYmxlLCB3ZSBjcmVhdGUgYSBuZXcgSW5zdGFuY2VQYXJ0IHBlciBpdGVtLCB0aGVuIHNldCBpdHNcbiAgICAvLyB2YWx1ZSB0byB0aGUgaXRlbS4gVGhpcyBpcyBhIGxpdHRsZSBiaXQgb2Ygb3ZlcmhlYWQgZm9yIGV2ZXJ5IGl0ZW0gaW5cbiAgICAvLyBhbiBJdGVyYWJsZSwgYnV0IGl0IGxldHMgdXMgcmVjdXJzZSBlYXNpbHkgYW5kIGVmZmljaWVudGx5IHVwZGF0ZSBBcnJheXNcbiAgICAvLyBvZiBUZW1wbGF0ZVJlc3VsdHMgdGhhdCB3aWxsIGJlIGNvbW1vbmx5IHJldHVybmVkIGZyb20gZXhwcmVzc2lvbnMgbGlrZTpcbiAgICAvLyBhcnJheS5tYXAoKGkpID0+IGh0bWxgJHtpfWApLCBieSByZXVzaW5nIGV4aXN0aW5nIFRlbXBsYXRlSW5zdGFuY2VzLlxuXG4gICAgLy8gSWYgdmFsdWUgaXMgYW4gYXJyYXksIHRoZW4gdGhlIHByZXZpb3VzIHJlbmRlciB3YXMgb2YgYW5cbiAgICAvLyBpdGVyYWJsZSBhbmQgdmFsdWUgd2lsbCBjb250YWluIHRoZSBDaGlsZFBhcnRzIGZyb20gdGhlIHByZXZpb3VzXG4gICAgLy8gcmVuZGVyLiBJZiB2YWx1ZSBpcyBub3QgYW4gYXJyYXksIGNsZWFyIHRoaXMgcGFydCBhbmQgbWFrZSBhIG5ld1xuICAgIC8vIGFycmF5IGZvciBDaGlsZFBhcnRzLlxuICAgIGlmICghaXNBcnJheSh0aGlzLl8kY29tbWl0dGVkVmFsdWUpKSB7XG4gICAgICB0aGlzLl8kY29tbWl0dGVkVmFsdWUgPSBbXTtcbiAgICAgIHRoaXMuXyRjbGVhcigpO1xuICAgIH1cblxuICAgIC8vIExldHMgdXMga2VlcCB0cmFjayBvZiBob3cgbWFueSBpdGVtcyB3ZSBzdGFtcGVkIHNvIHdlIGNhbiBjbGVhciBsZWZ0b3ZlclxuICAgIC8vIGl0ZW1zIGZyb20gYSBwcmV2aW91cyByZW5kZXJcbiAgICBjb25zdCBpdGVtUGFydHMgPSB0aGlzLl8kY29tbWl0dGVkVmFsdWUgYXMgQ2hpbGRQYXJ0W107XG4gICAgbGV0IHBhcnRJbmRleCA9IDA7XG4gICAgbGV0IGl0ZW1QYXJ0OiBDaGlsZFBhcnQgfCB1bmRlZmluZWQ7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgIGlmIChwYXJ0SW5kZXggPT09IGl0ZW1QYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gSWYgbm8gZXhpc3RpbmcgcGFydCwgY3JlYXRlIGEgbmV3IG9uZVxuICAgICAgICAvLyBUT0RPIChqdXN0aW5mYWduYW5pKTogdGVzdCBwZXJmIGltcGFjdCBvZiBhbHdheXMgY3JlYXRpbmcgdHdvIHBhcnRzXG4gICAgICAgIC8vIGluc3RlYWQgb2Ygc2hhcmluZyBwYXJ0cyBiZXR3ZWVuIG5vZGVzXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saXQvbGl0L2lzc3Vlcy8xMjY2XG4gICAgICAgIGl0ZW1QYXJ0cy5wdXNoKFxuICAgICAgICAgIChpdGVtUGFydCA9IG5ldyBDaGlsZFBhcnQoXG4gICAgICAgICAgICB0aGlzLl9pbnNlcnQoY3JlYXRlTWFya2VyKCkpLFxuICAgICAgICAgICAgdGhpcy5faW5zZXJ0KGNyZWF0ZU1hcmtlcigpKSxcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICApKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV1c2UgYW4gZXhpc3RpbmcgcGFydFxuICAgICAgICBpdGVtUGFydCA9IGl0ZW1QYXJ0c1twYXJ0SW5kZXhdO1xuICAgICAgfVxuICAgICAgaXRlbVBhcnQuXyRzZXRWYWx1ZShpdGVtKTtcbiAgICAgIHBhcnRJbmRleCsrO1xuICAgIH1cblxuICAgIGlmIChwYXJ0SW5kZXggPCBpdGVtUGFydHMubGVuZ3RoKSB7XG4gICAgICAvLyBpdGVtUGFydHMgYWx3YXlzIGhhdmUgZW5kIG5vZGVzXG4gICAgICB0aGlzLl8kY2xlYXIoXG4gICAgICAgIGl0ZW1QYXJ0ICYmIHdyYXAoaXRlbVBhcnQuXyRlbmROb2RlISkubmV4dFNpYmxpbmcsXG4gICAgICAgIHBhcnRJbmRleFxuICAgICAgKTtcbiAgICAgIC8vIFRydW5jYXRlIHRoZSBwYXJ0cyBhcnJheSBzbyBfdmFsdWUgcmVmbGVjdHMgdGhlIGN1cnJlbnQgc3RhdGVcbiAgICAgIGl0ZW1QYXJ0cy5sZW5ndGggPSBwYXJ0SW5kZXg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIG5vZGVzIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBQYXJ0IGZyb20gdGhlIERPTS5cbiAgICpcbiAgICogQHBhcmFtIHN0YXJ0IFN0YXJ0IG5vZGUgdG8gY2xlYXIgZnJvbSwgZm9yIGNsZWFyaW5nIGEgc3Vic2V0IG9mIHRoZSBwYXJ0J3NcbiAgICogICAgIERPTSAodXNlZCB3aGVuIHRydW5jYXRpbmcgaXRlcmFibGVzKVxuICAgKiBAcGFyYW0gZnJvbSAgV2hlbiBgc3RhcnRgIGlzIHNwZWNpZmllZCwgdGhlIGluZGV4IHdpdGhpbiB0aGUgaXRlcmFibGUgZnJvbVxuICAgKiAgICAgd2hpY2ggQ2hpbGRQYXJ0cyBhcmUgYmVpbmcgcmVtb3ZlZCwgdXNlZCBmb3IgZGlzY29ubmVjdGluZyBkaXJlY3RpdmVzXG4gICAqICAgICBpbiB0aG9zZSBQYXJ0cy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfJGNsZWFyKFxuICAgIHN0YXJ0OiBDaGlsZE5vZGUgfCBudWxsID0gd3JhcCh0aGlzLl8kc3RhcnROb2RlKS5uZXh0U2libGluZyxcbiAgICBmcm9tPzogbnVtYmVyXG4gICkge1xuICAgIHRoaXMuXyRub3RpZnlDb25uZWN0aW9uQ2hhbmdlZD8uKGZhbHNlLCB0cnVlLCBmcm9tKTtcbiAgICB3aGlsZSAoc3RhcnQgIT09IHRoaXMuXyRlbmROb2RlKSB7XG4gICAgICAvLyBUaGUgbm9uLW51bGwgYXNzZXJ0aW9uIGlzIHNhZmUgYmVjYXVzZSBpZiBfJHN0YXJ0Tm9kZS5uZXh0U2libGluZyBpc1xuICAgICAgLy8gbnVsbCwgdGhlbiBfJGVuZE5vZGUgaXMgYWxzbyBudWxsLCBhbmQgd2Ugd291bGQgbm90IGhhdmUgZW50ZXJlZCB0aGlzXG4gICAgICAvLyBsb29wLlxuICAgICAgY29uc3QgbiA9IHdyYXAoc3RhcnQhKS5uZXh0U2libGluZztcbiAgICAgIHdyYXAoc3RhcnQhKS5yZW1vdmUoKTtcbiAgICAgIHN0YXJ0ID0gbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50YXRpb24gb2YgUm9vdFBhcnQncyBgaXNDb25uZWN0ZWRgLiBOb3RlIHRoYXQgdGhpcyBtZXRob2RcbiAgICogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGBSb290UGFydGBzICh0aGUgYENoaWxkUGFydGAgcmV0dXJuZWQgZnJvbSBhXG4gICAqIHRvcC1sZXZlbCBgcmVuZGVyKClgIGNhbGwpLiBJdCBoYXMgbm8gZWZmZWN0IG9uIG5vbi1yb290IENoaWxkUGFydHMuXG4gICAqIEBwYXJhbSBpc0Nvbm5lY3RlZCBXaGV0aGVyIHRvIHNldFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHNldENvbm5lY3RlZChpc0Nvbm5lY3RlZDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl8kcGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX19pc0Nvbm5lY3RlZCA9IGlzQ29ubmVjdGVkO1xuICAgICAgdGhpcy5fJG5vdGlmeUNvbm5lY3Rpb25DaGFuZ2VkPy4oaXNDb25uZWN0ZWQpO1xuICAgIH0gZWxzZSBpZiAoREVWX01PREUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3BhcnQuc2V0Q29ubmVjdGVkKCkgbWF5IG9ubHkgYmUgY2FsbGVkIG9uIGEgJyArXG4gICAgICAgICAgJ1Jvb3RQYXJ0IHJldHVybmVkIGZyb20gcmVuZGVyKCkuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBIHRvcC1sZXZlbCBgQ2hpbGRQYXJ0YCByZXR1cm5lZCBmcm9tIGByZW5kZXJgIHRoYXQgbWFuYWdlcyB0aGUgY29ubmVjdGVkXG4gKiBzdGF0ZSBvZiBgQXN5bmNEaXJlY3RpdmVgcyBjcmVhdGVkIHRocm91Z2hvdXQgdGhlIHRyZWUgYmVsb3cgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9vdFBhcnQgZXh0ZW5kcyBDaGlsZFBhcnQge1xuICAvKipcbiAgICogU2V0cyB0aGUgY29ubmVjdGlvbiBzdGF0ZSBmb3IgYEFzeW5jRGlyZWN0aXZlYHMgY29udGFpbmVkIHdpdGhpbiB0aGlzIHJvb3RcbiAgICogQ2hpbGRQYXJ0LlxuICAgKlxuICAgKiBsaXQtaHRtbCBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IG1vbml0b3IgdGhlIGNvbm5lY3RlZG5lc3Mgb2YgRE9NIHJlbmRlcmVkO1xuICAgKiBhcyBzdWNoLCBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBgcmVuZGVyYCB0byBlbnN1cmUgdGhhdFxuICAgKiBgcGFydC5zZXRDb25uZWN0ZWQoZmFsc2UpYCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBwYXJ0IG9iamVjdCBpcyBwb3RlbnRpYWxseVxuICAgKiBkaXNjYXJkZWQsIHRvIGVuc3VyZSB0aGF0IGBBc3luY0RpcmVjdGl2ZWBzIGhhdmUgYSBjaGFuY2UgdG8gZGlzcG9zZSBvZlxuICAgKiBhbnkgcmVzb3VyY2VzIGJlaW5nIGhlbGQuIElmIGEgYFJvb3RQYXJ0YCB0aGF0IHdhcyBwcmV2aW91c2x5XG4gICAqIGRpc2Nvbm5lY3RlZCBpcyBzdWJzZXF1ZW50bHkgcmUtY29ubmVjdGVkIChhbmQgaXRzIGBBc3luY0RpcmVjdGl2ZWBzIHNob3VsZFxuICAgKiByZS1jb25uZWN0KSwgYHNldENvbm5lY3RlZCh0cnVlKWAgc2hvdWxkIGJlIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIGlzQ29ubmVjdGVkIFdoZXRoZXIgZGlyZWN0aXZlcyB3aXRoaW4gdGhpcyB0cmVlIHNob3VsZCBiZSBjb25uZWN0ZWRcbiAgICogb3Igbm90XG4gICAqL1xuICBzZXRDb25uZWN0ZWQoaXNDb25uZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSB7QXR0cmlidXRlUGFydH07XG5jbGFzcyBBdHRyaWJ1dGVQYXJ0IGltcGxlbWVudHMgRGlzY29ubmVjdGFibGUge1xuICByZWFkb25seSB0eXBlOlxuICAgIHwgdHlwZW9mIEFUVFJJQlVURV9QQVJUXG4gICAgfCB0eXBlb2YgUFJPUEVSVFlfUEFSVFxuICAgIHwgdHlwZW9mIEJPT0xFQU5fQVRUUklCVVRFX1BBUlRcbiAgICB8IHR5cGVvZiBFVkVOVF9QQVJUID0gQVRUUklCVVRFX1BBUlQ7XG4gIHJlYWRvbmx5IGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFJlbmRlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgYXR0cmlidXRlIHBhcnQgcmVwcmVzZW50cyBhbiBpbnRlcnBvbGF0aW9uLCB0aGlzIGNvbnRhaW5zIHRoZVxuICAgKiBzdGF0aWMgc3RyaW5ncyBvZiB0aGUgaW50ZXJwb2xhdGlvbi4gRm9yIHNpbmdsZS12YWx1ZSwgY29tcGxldGUgYmluZGluZ3MsXG4gICAqIHRoaXMgaXMgdW5kZWZpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RyaW5ncz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfJGNvbW1pdHRlZFZhbHVlOiB1bmtub3duIHwgQXJyYXk8dW5rbm93bj4gPSBub3RoaW5nO1xuICAvKiogQGludGVybmFsICovXG4gIF9fZGlyZWN0aXZlcz86IEFycmF5PERpcmVjdGl2ZSB8IHVuZGVmaW5lZD47XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgXyRwYXJlbnQ6IERpc2Nvbm5lY3RhYmxlO1xuICAvKiogQGludGVybmFsICovXG4gIF8kZGlzY29ubmVjdGFibGVDaGlsZHJlbj86IFNldDxEaXNjb25uZWN0YWJsZT4gPSB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIF9zYW5pdGl6ZXI6IFZhbHVlU2FuaXRpemVyIHwgdW5kZWZpbmVkO1xuXG4gIGdldCB0YWdOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQudGFnTmFtZTtcbiAgfVxuXG4gIC8vIFNlZSBjb21tZW50IGluIERpc2Nvbm5lY3RhYmxlIGludGVyZmFjZSBmb3Igd2h5IHRoaXMgaXMgYSBnZXR0ZXJcbiAgZ2V0IF8kaXNDb25uZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuXyRwYXJlbnQuXyRpc0Nvbm5lY3RlZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBzdHJpbmdzOiBSZWFkb25seUFycmF5PHN0cmluZz4sXG4gICAgcGFyZW50OiBEaXNjb25uZWN0YWJsZSxcbiAgICBvcHRpb25zOiBSZW5kZXJPcHRpb25zIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLl8kcGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKHN0cmluZ3MubGVuZ3RoID4gMiB8fCBzdHJpbmdzWzBdICE9PSAnJyB8fCBzdHJpbmdzWzFdICE9PSAnJykge1xuICAgICAgdGhpcy5fJGNvbW1pdHRlZFZhbHVlID0gbmV3IEFycmF5KHN0cmluZ3MubGVuZ3RoIC0gMSkuZmlsbChuZXcgU3RyaW5nKCkpO1xuICAgICAgdGhpcy5zdHJpbmdzID0gc3RyaW5ncztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fJGNvbW1pdHRlZFZhbHVlID0gbm90aGluZztcbiAgICB9XG4gICAgaWYgKEVOQUJMRV9FWFRSQV9TRUNVUklUWV9IT09LUykge1xuICAgICAgdGhpcy5fc2FuaXRpemVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGlzIHBhcnQgYnkgcmVzb2x2aW5nIHRoZSB2YWx1ZSBmcm9tIHBvc3NpYmx5IG11bHRpcGxlXG4gICAqIHZhbHVlcyBhbmQgc3RhdGljIHN0cmluZ3MgYW5kIGNvbW1pdHRpbmcgaXQgdG8gdGhlIERPTS5cbiAgICogSWYgdGhpcyBwYXJ0IGlzIHNpbmdsZS12YWx1ZWQsIGB0aGlzLl9zdHJpbmdzYCB3aWxsIGJlIHVuZGVmaW5lZCwgYW5kIHRoZVxuICAgKiBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2l0aCBhIHNpbmdsZSB2YWx1ZSBhcmd1bWVudC4gSWYgdGhpcyBwYXJ0IGlzXG4gICAqIG11bHRpLXZhbHVlLCBgdGhpcy5fc3RyaW5nc2Agd2lsbCBiZSBkZWZpbmVkLCBhbmQgdGhlIG1ldGhvZCBpcyBjYWxsZWRcbiAgICogd2l0aCB0aGUgdmFsdWUgYXJyYXkgb2YgdGhlIHBhcnQncyBvd25pbmcgVGVtcGxhdGVJbnN0YW5jZSwgYW5kIGFuIG9mZnNldFxuICAgKiBpbnRvIHRoZSB2YWx1ZSBhcnJheSBmcm9tIHdoaWNoIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIHJlYWQuXG4gICAqIFRoaXMgbWV0aG9kIGlzIG92ZXJsb2FkZWQgdGhpcyB3YXkgdG8gZWxpbWluYXRlIHNob3J0LWxpdmVkIGFycmF5IHNsaWNlc1xuICAgKiBvZiB0aGUgdGVtcGxhdGUgaW5zdGFuY2UgdmFsdWVzLCBhbmQgYWxsb3cgYSBmYXN0LXBhdGggZm9yIHNpbmdsZS12YWx1ZWRcbiAgICogcGFydHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgcGFydCB2YWx1ZSwgb3IgYW4gYXJyYXkgb2YgdmFsdWVzIGZvciBtdWx0aS12YWx1ZWQgcGFydHNcbiAgICogQHBhcmFtIHZhbHVlSW5kZXggdGhlIGluZGV4IHRvIHN0YXJ0IHJlYWRpbmcgdmFsdWVzIGZyb20uIGB1bmRlZmluZWRgIGZvclxuICAgKiAgIHNpbmdsZS12YWx1ZWQgcGFydHNcbiAgICogQHBhcmFtIG5vQ29tbWl0IGNhdXNlcyB0aGUgcGFydCB0byBub3QgY29tbWl0IGl0cyB2YWx1ZSB0byB0aGUgRE9NLiBVc2VkXG4gICAqICAgaW4gaHlkcmF0aW9uIHRvIHByaW1lIGF0dHJpYnV0ZSBwYXJ0cyB3aXRoIHRoZWlyIGZpcnN0LXJlbmRlcmVkIHZhbHVlLFxuICAgKiAgIGJ1dCBub3Qgc2V0IHRoZSBhdHRyaWJ1dGUsIGFuZCBpbiBTU1IgdG8gbm8tb3AgdGhlIERPTSBvcGVyYXRpb24gYW5kXG4gICAqICAgY2FwdHVyZSB0aGUgdmFsdWUgZm9yIHNlcmlhbGl6YXRpb24uXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgXyRzZXRWYWx1ZShcbiAgICB2YWx1ZTogdW5rbm93biB8IEFycmF5PHVua25vd24+LFxuICAgIGRpcmVjdGl2ZVBhcmVudDogRGlyZWN0aXZlUGFyZW50ID0gdGhpcyxcbiAgICB2YWx1ZUluZGV4PzogbnVtYmVyLFxuICAgIG5vQ29tbWl0PzogYm9vbGVhblxuICApIHtcbiAgICBjb25zdCBzdHJpbmdzID0gdGhpcy5zdHJpbmdzO1xuXG4gICAgLy8gV2hldGhlciBhbnkgb2YgdGhlIHZhbHVlcyBoYXMgY2hhbmdlZCwgZm9yIGRpcnR5LWNoZWNraW5nXG4gICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xuXG4gICAgaWYgKHN0cmluZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gU2luZ2xlLXZhbHVlIGJpbmRpbmcgY2FzZVxuICAgICAgdmFsdWUgPSByZXNvbHZlRGlyZWN0aXZlKHRoaXMsIHZhbHVlLCBkaXJlY3RpdmVQYXJlbnQsIDApO1xuICAgICAgY2hhbmdlID1cbiAgICAgICAgIWlzUHJpbWl0aXZlKHZhbHVlKSB8fFxuICAgICAgICAodmFsdWUgIT09IHRoaXMuXyRjb21taXR0ZWRWYWx1ZSAmJiB2YWx1ZSAhPT0gbm9DaGFuZ2UpO1xuICAgICAgaWYgKGNoYW5nZSkge1xuICAgICAgICB0aGlzLl8kY29tbWl0dGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW50ZXJwb2xhdGlvbiBjYXNlXG4gICAgICBjb25zdCB2YWx1ZXMgPSB2YWx1ZSBhcyBBcnJheTx1bmtub3duPjtcbiAgICAgIHZhbHVlID0gc3RyaW5nc1swXTtcblxuICAgICAgbGV0IGksIHY7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgdiA9IHJlc29sdmVEaXJlY3RpdmUodGhpcywgdmFsdWVzW3ZhbHVlSW5kZXghICsgaV0sIGRpcmVjdGl2ZVBhcmVudCwgaSk7XG5cbiAgICAgICAgaWYgKHYgPT09IG5vQ2hhbmdlKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHVzZXItcHJvdmlkZWQgdmFsdWUgaXMgYG5vQ2hhbmdlYCwgdXNlIHRoZSBwcmV2aW91cyB2YWx1ZVxuICAgICAgICAgIHYgPSAodGhpcy5fJGNvbW1pdHRlZFZhbHVlIGFzIEFycmF5PHVua25vd24+KVtpXTtcbiAgICAgICAgfVxuICAgICAgICBjaGFuZ2UgfHw9XG4gICAgICAgICAgIWlzUHJpbWl0aXZlKHYpIHx8IHYgIT09ICh0aGlzLl8kY29tbWl0dGVkVmFsdWUgYXMgQXJyYXk8dW5rbm93bj4pW2ldO1xuICAgICAgICBpZiAodiA9PT0gbm90aGluZykge1xuICAgICAgICAgIHZhbHVlID0gbm90aGluZztcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gbm90aGluZykge1xuICAgICAgICAgIHZhbHVlICs9ICh2ID8/ICcnKSArIHN0cmluZ3NbaSArIDFdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIGFsd2F5cyByZWNvcmQgZWFjaCB2YWx1ZSwgZXZlbiBpZiBvbmUgaXMgYG5vdGhpbmdgLCBmb3IgZnV0dXJlXG4gICAgICAgIC8vIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgICAgICh0aGlzLl8kY29tbWl0dGVkVmFsdWUgYXMgQXJyYXk8dW5rbm93bj4pW2ldID0gdjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZSAmJiAhbm9Db21taXQpIHtcbiAgICAgIHRoaXMuX2NvbW1pdFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIF9jb21taXRWYWx1ZSh2YWx1ZTogdW5rbm93bikge1xuICAgIGlmICh2YWx1ZSA9PT0gbm90aGluZykge1xuICAgICAgKHdyYXAodGhpcy5lbGVtZW50KSBhcyBFbGVtZW50KS5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEVOQUJMRV9FWFRSQV9TRUNVUklUWV9IT09LUykge1xuICAgICAgICBpZiAodGhpcy5fc2FuaXRpemVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9zYW5pdGl6ZXIgPSBzYW5pdGl6ZXJGYWN0b3J5SW50ZXJuYWwoXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQsXG4gICAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgICAnYXR0cmlidXRlJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB0aGlzLl9zYW5pdGl6ZXIodmFsdWUgPz8gJycpO1xuICAgICAgfVxuICAgICAgZGVidWdMb2dFdmVudCAmJlxuICAgICAgICBkZWJ1Z0xvZ0V2ZW50KHtcbiAgICAgICAgICBraW5kOiAnY29tbWl0IGF0dHJpYnV0ZScsXG4gICAgICAgICAgZWxlbWVudDogdGhpcy5lbGVtZW50LFxuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgKHdyYXAodGhpcy5lbGVtZW50KSBhcyBFbGVtZW50KS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgKHZhbHVlID8/ICcnKSBhcyBzdHJpbmdcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIHtQcm9wZXJ0eVBhcnR9O1xuY2xhc3MgUHJvcGVydHlQYXJ0IGV4dGVuZHMgQXR0cmlidXRlUGFydCB7XG4gIG92ZXJyaWRlIHJlYWRvbmx5IHR5cGUgPSBQUk9QRVJUWV9QQVJUO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgb3ZlcnJpZGUgX2NvbW1pdFZhbHVlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgaWYgKEVOQUJMRV9FWFRSQV9TRUNVUklUWV9IT09LUykge1xuICAgICAgaWYgKHRoaXMuX3Nhbml0aXplciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3Nhbml0aXplciA9IHNhbml0aXplckZhY3RvcnlJbnRlcm5hbChcbiAgICAgICAgICB0aGlzLmVsZW1lbnQsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgICdwcm9wZXJ0eSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gdGhpcy5fc2FuaXRpemVyKHZhbHVlKTtcbiAgICB9XG4gICAgZGVidWdMb2dFdmVudCAmJlxuICAgICAgZGVidWdMb2dFdmVudCh7XG4gICAgICAgIGtpbmQ6ICdjb21taXQgcHJvcGVydHknLFxuICAgICAgICBlbGVtZW50OiB0aGlzLmVsZW1lbnQsXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgKHRoaXMuZWxlbWVudCBhcyBhbnkpW3RoaXMubmFtZV0gPSB2YWx1ZSA9PT0gbm90aGluZyA/IHVuZGVmaW5lZCA6IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIHtCb29sZWFuQXR0cmlidXRlUGFydH07XG5jbGFzcyBCb29sZWFuQXR0cmlidXRlUGFydCBleHRlbmRzIEF0dHJpYnV0ZVBhcnQge1xuICBvdmVycmlkZSByZWFkb25seSB0eXBlID0gQk9PTEVBTl9BVFRSSUJVVEVfUEFSVDtcblxuICAvKiogQGludGVybmFsICovXG4gIG92ZXJyaWRlIF9jb21taXRWYWx1ZSh2YWx1ZTogdW5rbm93bikge1xuICAgIGRlYnVnTG9nRXZlbnQgJiZcbiAgICAgIGRlYnVnTG9nRXZlbnQoe1xuICAgICAgICBraW5kOiAnY29tbWl0IGJvb2xlYW4gYXR0cmlidXRlJyxcbiAgICAgICAgZWxlbWVudDogdGhpcy5lbGVtZW50LFxuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIHZhbHVlOiAhISh2YWx1ZSAmJiB2YWx1ZSAhPT0gbm90aGluZyksXG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgICh3cmFwKHRoaXMuZWxlbWVudCkgYXMgRWxlbWVudCkudG9nZ2xlQXR0cmlidXRlKFxuICAgICAgdGhpcy5uYW1lLFxuICAgICAgISF2YWx1ZSAmJiB2YWx1ZSAhPT0gbm90aGluZ1xuICAgICk7XG4gIH1cbn1cblxudHlwZSBFdmVudExpc3RlbmVyV2l0aE9wdGlvbnMgPSBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0ICZcbiAgUGFydGlhbDxBZGRFdmVudExpc3RlbmVyT3B0aW9ucz47XG5cbi8qKlxuICogQW4gQXR0cmlidXRlUGFydCB0aGF0IG1hbmFnZXMgYW4gZXZlbnQgbGlzdGVuZXIgdmlhIGFkZC9yZW1vdmVFdmVudExpc3RlbmVyLlxuICpcbiAqIFRoaXMgcGFydCB3b3JrcyBieSBhZGRpbmcgaXRzZWxmIGFzIHRoZSBldmVudCBsaXN0ZW5lciBvbiBhbiBlbGVtZW50LCB0aGVuXG4gKiBkZWxlZ2F0aW5nIHRvIHRoZSB2YWx1ZSBwYXNzZWQgdG8gaXQuIFRoaXMgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvXG4gKiBhZGQvcmVtb3ZlRXZlbnRMaXN0ZW5lciBpZiB0aGUgbGlzdGVuZXIgY2hhbmdlcyBmcmVxdWVudGx5LCBzdWNoIGFzIHdoZW4gYW5cbiAqIGlubGluZSBmdW5jdGlvbiBpcyB1c2VkIGFzIGEgbGlzdGVuZXIuXG4gKlxuICogQmVjYXVzZSBldmVudCBvcHRpb25zIGFyZSBwYXNzZWQgd2hlbiBhZGRpbmcgbGlzdGVuZXJzLCB3ZSBtdXN0IHRha2UgY2FzZVxuICogdG8gYWRkIGFuZCByZW1vdmUgdGhlIHBhcnQgYXMgYSBsaXN0ZW5lciB3aGVuIHRoZSBldmVudCBvcHRpb25zIGNoYW5nZS5cbiAqL1xuZXhwb3J0IHR5cGUge0V2ZW50UGFydH07XG5jbGFzcyBFdmVudFBhcnQgZXh0ZW5kcyBBdHRyaWJ1dGVQYXJ0IHtcbiAgb3ZlcnJpZGUgcmVhZG9ubHkgdHlwZSA9IEVWRU5UX1BBUlQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHN0cmluZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPixcbiAgICBwYXJlbnQ6IERpc2Nvbm5lY3RhYmxlLFxuICAgIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgbmFtZSwgc3RyaW5ncywgcGFyZW50LCBvcHRpb25zKTtcblxuICAgIGlmIChERVZfTU9ERSAmJiB0aGlzLnN0cmluZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQSBcXGA8JHtlbGVtZW50LmxvY2FsTmFtZX0+XFxgIGhhcyBhIFxcYEAke25hbWV9PS4uLlxcYCBsaXN0ZW5lciB3aXRoIGAgK1xuICAgICAgICAgICdpbnZhbGlkIGNvbnRlbnQuIEV2ZW50IGxpc3RlbmVycyBpbiB0ZW1wbGF0ZXMgbXVzdCBoYXZlIGV4YWN0bHkgJyArXG4gICAgICAgICAgJ29uZSBleHByZXNzaW9uIGFuZCBubyBzdXJyb3VuZGluZyB0ZXh0LidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gRXZlbnRQYXJ0IGRvZXMgbm90IHVzZSB0aGUgYmFzZSBfJHNldFZhbHVlL19yZXNvbHZlVmFsdWUgaW1wbGVtZW50YXRpb25cbiAgLy8gc2luY2UgdGhlIGRpcnR5IGNoZWNraW5nIGlzIG1vcmUgY29tcGxleFxuICAvKiogQGludGVybmFsICovXG4gIG92ZXJyaWRlIF8kc2V0VmFsdWUoXG4gICAgbmV3TGlzdGVuZXI6IHVua25vd24sXG4gICAgZGlyZWN0aXZlUGFyZW50OiBEaXJlY3RpdmVQYXJlbnQgPSB0aGlzXG4gICkge1xuICAgIG5ld0xpc3RlbmVyID1cbiAgICAgIHJlc29sdmVEaXJlY3RpdmUodGhpcywgbmV3TGlzdGVuZXIsIGRpcmVjdGl2ZVBhcmVudCwgMCkgPz8gbm90aGluZztcbiAgICBpZiAobmV3TGlzdGVuZXIgPT09IG5vQ2hhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9sZExpc3RlbmVyID0gdGhpcy5fJGNvbW1pdHRlZFZhbHVlO1xuXG4gICAgLy8gSWYgdGhlIG5ldyB2YWx1ZSBpcyBub3RoaW5nIG9yIGFueSBvcHRpb25zIGNoYW5nZSB3ZSBoYXZlIHRvIHJlbW92ZSB0aGVcbiAgICAvLyBwYXJ0IGFzIGEgbGlzdGVuZXIuXG4gICAgY29uc3Qgc2hvdWxkUmVtb3ZlTGlzdGVuZXIgPVxuICAgICAgKG5ld0xpc3RlbmVyID09PSBub3RoaW5nICYmIG9sZExpc3RlbmVyICE9PSBub3RoaW5nKSB8fFxuICAgICAgKG5ld0xpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXJXaXRoT3B0aW9ucykuY2FwdHVyZSAhPT1cbiAgICAgICAgKG9sZExpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXJXaXRoT3B0aW9ucykuY2FwdHVyZSB8fFxuICAgICAgKG5ld0xpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXJXaXRoT3B0aW9ucykub25jZSAhPT1cbiAgICAgICAgKG9sZExpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXJXaXRoT3B0aW9ucykub25jZSB8fFxuICAgICAgKG5ld0xpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXJXaXRoT3B0aW9ucykucGFzc2l2ZSAhPT1cbiAgICAgICAgKG9sZExpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXJXaXRoT3B0aW9ucykucGFzc2l2ZTtcblxuICAgIC8vIElmIHRoZSBuZXcgdmFsdWUgaXMgbm90IG5vdGhpbmcgYW5kIHdlIHJlbW92ZWQgdGhlIGxpc3RlbmVyLCB3ZSBoYXZlXG4gICAgLy8gdG8gYWRkIHRoZSBwYXJ0IGFzIGEgbGlzdGVuZXIuXG4gICAgY29uc3Qgc2hvdWxkQWRkTGlzdGVuZXIgPVxuICAgICAgbmV3TGlzdGVuZXIgIT09IG5vdGhpbmcgJiZcbiAgICAgIChvbGRMaXN0ZW5lciA9PT0gbm90aGluZyB8fCBzaG91bGRSZW1vdmVMaXN0ZW5lcik7XG5cbiAgICBkZWJ1Z0xvZ0V2ZW50ICYmXG4gICAgICBkZWJ1Z0xvZ0V2ZW50KHtcbiAgICAgICAga2luZDogJ2NvbW1pdCBldmVudCBsaXN0ZW5lcicsXG4gICAgICAgIGVsZW1lbnQ6IHRoaXMuZWxlbWVudCxcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB2YWx1ZTogbmV3TGlzdGVuZXIsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXI6IHNob3VsZFJlbW92ZUxpc3RlbmVyLFxuICAgICAgICBhZGRMaXN0ZW5lcjogc2hvdWxkQWRkTGlzdGVuZXIsXG4gICAgICAgIG9sZExpc3RlbmVyLFxuICAgICAgfSk7XG4gICAgaWYgKHNob3VsZFJlbW92ZUxpc3RlbmVyKSB7XG4gICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICB0aGlzLFxuICAgICAgICBvbGRMaXN0ZW5lciBhcyBFdmVudExpc3RlbmVyV2l0aE9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzaG91bGRBZGRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgdGhpcyxcbiAgICAgICAgbmV3TGlzdGVuZXIgYXMgRXZlbnRMaXN0ZW5lcldpdGhPcHRpb25zXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl8kY29tbWl0dGVkVmFsdWUgPSBuZXdMaXN0ZW5lcjtcbiAgfVxuXG4gIGhhbmRsZUV2ZW50KGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fJGNvbW1pdHRlZFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl8kY29tbWl0dGVkVmFsdWUuY2FsbCh0aGlzLm9wdGlvbnM/Lmhvc3QgPz8gdGhpcy5lbGVtZW50LCBldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICh0aGlzLl8kY29tbWl0dGVkVmFsdWUgYXMgRXZlbnRMaXN0ZW5lck9iamVjdCkuaGFuZGxlRXZlbnQoZXZlbnQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSB7RWxlbWVudFBhcnR9O1xuY2xhc3MgRWxlbWVudFBhcnQgaW1wbGVtZW50cyBEaXNjb25uZWN0YWJsZSB7XG4gIHJlYWRvbmx5IHR5cGUgPSBFTEVNRU5UX1BBUlQ7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfX2RpcmVjdGl2ZT86IERpcmVjdGl2ZTtcblxuICAvLyBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5IFBhcnQgaGFzIGEgXyRjb21taXR0ZWRWYWx1ZVxuICBfJGNvbW1pdHRlZFZhbHVlOiB1bmRlZmluZWQ7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfJHBhcmVudCE6IERpc2Nvbm5lY3RhYmxlO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgXyRkaXNjb25uZWN0YWJsZUNoaWxkcmVuPzogU2V0PERpc2Nvbm5lY3RhYmxlPiA9IHVuZGVmaW5lZDtcblxuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50LFxuICAgIHBhcmVudDogRGlzY29ubmVjdGFibGUsXG4gICAgb3B0aW9uczogUmVuZGVyT3B0aW9ucyB8IHVuZGVmaW5lZFxuICApIHtcbiAgICB0aGlzLl8kcGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvLyBTZWUgY29tbWVudCBpbiBEaXNjb25uZWN0YWJsZSBpbnRlcmZhY2UgZm9yIHdoeSB0aGlzIGlzIGEgZ2V0dGVyXG4gIGdldCBfJGlzQ29ubmVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl8kcGFyZW50Ll8kaXNDb25uZWN0ZWQ7XG4gIH1cblxuICBfJHNldFZhbHVlKHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgZGVidWdMb2dFdmVudCAmJlxuICAgICAgZGVidWdMb2dFdmVudCh7XG4gICAgICAgIGtpbmQ6ICdjb21taXQgdG8gZWxlbWVudCBiaW5kaW5nJyxcbiAgICAgICAgZWxlbWVudDogdGhpcy5lbGVtZW50LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgfSk7XG4gICAgcmVzb2x2ZURpcmVjdGl2ZSh0aGlzLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFTkQgVVNFUlMgU0hPVUxEIE5PVCBSRUxZIE9OIFRISVMgT0JKRUNULlxuICpcbiAqIFByaXZhdGUgZXhwb3J0cyBmb3IgdXNlIGJ5IG90aGVyIExpdCBwYWNrYWdlcywgbm90IGludGVuZGVkIGZvciB1c2UgYnlcbiAqIGV4dGVybmFsIHVzZXJzLlxuICpcbiAqIFdlIGN1cnJlbnRseSBkbyBub3QgbWFrZSBhIG1hbmdsZWQgcm9sbHVwIGJ1aWxkIG9mIHRoZSBsaXQtc3NyIGNvZGUuIEluIG9yZGVyXG4gKiB0byBrZWVwIGEgbnVtYmVyIG9mIChvdGhlcndpc2UgcHJpdmF0ZSkgdG9wLWxldmVsIGV4cG9ydHMgbWFuZ2xlZCBpbiB0aGVcbiAqIGNsaWVudCBzaWRlIGNvZGUsIHdlIGV4cG9ydCBhIF8kTEggb2JqZWN0IGNvbnRhaW5pbmcgdGhvc2UgbWVtYmVycyAob3JcbiAqIGhlbHBlciBtZXRob2RzIGZvciBhY2Nlc3NpbmcgcHJpdmF0ZSBmaWVsZHMgb2YgdGhvc2UgbWVtYmVycyksIGFuZCB0aGVuXG4gKiByZS1leHBvcnQgdGhlbSBmb3IgdXNlIGluIGxpdC1zc3IuIFRoaXMga2VlcHMgbGl0LXNzciBhZ25vc3RpYyB0byB3aGV0aGVyIHRoZVxuICogY2xpZW50LXNpZGUgY29kZSBpcyBiZWluZyB1c2VkIGluIGBkZXZgIG1vZGUgb3IgYHByb2RgIG1vZGUuXG4gKlxuICogVGhpcyBoYXMgYSB1bmlxdWUgbmFtZSwgdG8gZGlzYW1iaWd1YXRlIGl0IGZyb20gcHJpdmF0ZSBleHBvcnRzIGluXG4gKiBsaXQtZWxlbWVudCwgd2hpY2ggcmUtZXhwb3J0cyBhbGwgb2YgbGl0LWh0bWwuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IF8kTEggPSB7XG4gIC8vIFVzZWQgaW4gbGl0LXNzclxuICBfYm91bmRBdHRyaWJ1dGVTdWZmaXg6IGJvdW5kQXR0cmlidXRlU3VmZml4LFxuICBfbWFya2VyOiBtYXJrZXIsXG4gIF9tYXJrZXJNYXRjaDogbWFya2VyTWF0Y2gsXG4gIF9IVE1MX1JFU1VMVDogSFRNTF9SRVNVTFQsXG4gIF9nZXRUZW1wbGF0ZUh0bWw6IGdldFRlbXBsYXRlSHRtbCxcbiAgLy8gVXNlZCBpbiB0ZXN0cyBhbmQgcHJpdmF0ZS1zc3Itc3VwcG9ydFxuICBfVGVtcGxhdGVJbnN0YW5jZTogVGVtcGxhdGVJbnN0YW5jZSxcbiAgX2lzSXRlcmFibGU6IGlzSXRlcmFibGUsXG4gIF9yZXNvbHZlRGlyZWN0aXZlOiByZXNvbHZlRGlyZWN0aXZlLFxuICBfQ2hpbGRQYXJ0OiBDaGlsZFBhcnQsXG4gIF9BdHRyaWJ1dGVQYXJ0OiBBdHRyaWJ1dGVQYXJ0LFxuICBfQm9vbGVhbkF0dHJpYnV0ZVBhcnQ6IEJvb2xlYW5BdHRyaWJ1dGVQYXJ0LFxuICBfRXZlbnRQYXJ0OiBFdmVudFBhcnQsXG4gIF9Qcm9wZXJ0eVBhcnQ6IFByb3BlcnR5UGFydCxcbiAgX0VsZW1lbnRQYXJ0OiBFbGVtZW50UGFydCxcbn07XG5cbi8vIEFwcGx5IHBvbHlmaWxscyBpZiBhdmFpbGFibGVcbmNvbnN0IHBvbHlmaWxsU3VwcG9ydCA9IERFVl9NT0RFXG4gID8gZ2xvYmFsLmxpdEh0bWxQb2x5ZmlsbFN1cHBvcnREZXZNb2RlXG4gIDogZ2xvYmFsLmxpdEh0bWxQb2x5ZmlsbFN1cHBvcnQ7XG5wb2x5ZmlsbFN1cHBvcnQ/LihUZW1wbGF0ZSwgQ2hpbGRQYXJ0KTtcblxuLy8gSU1QT1JUQU5UOiBkbyBub3QgY2hhbmdlIHRoZSBwcm9wZXJ0eSBuYW1lIG9yIHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24uXG4vLyBUaGlzIGxpbmUgd2lsbCBiZSB1c2VkIGluIHJlZ2V4ZXMgdG8gc2VhcmNoIGZvciBsaXQtaHRtbCB1c2FnZS5cbihnbG9iYWwubGl0SHRtbFZlcnNpb25zID8/PSBbXSkucHVzaCgnMy4zLjInKTtcbmlmIChERVZfTU9ERSAmJiBnbG9iYWwubGl0SHRtbFZlcnNpb25zLmxlbmd0aCA+IDEpIHtcbiAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgIGlzc3VlV2FybmluZyEoXG4gICAgICAnbXVsdGlwbGUtdmVyc2lvbnMnLFxuICAgICAgYE11bHRpcGxlIHZlcnNpb25zIG9mIExpdCBsb2FkZWQuIGAgK1xuICAgICAgICBgTG9hZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBpcyBub3QgcmVjb21tZW5kZWQuYFxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB2YWx1ZSwgdXN1YWxseSBhIGxpdC1odG1sIFRlbXBsYXRlUmVzdWx0LCB0byB0aGUgY29udGFpbmVyLlxuICpcbiAqIFRoaXMgZXhhbXBsZSByZW5kZXJzIHRoZSB0ZXh0IFwiSGVsbG8sIFpvZSFcIiBpbnNpZGUgYSBwYXJhZ3JhcGggdGFnLCBhcHBlbmRpbmdcbiAqIGl0IHRvIHRoZSBjb250YWluZXIgYGRvY3VtZW50LmJvZHlgLlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge2h0bWwsIHJlbmRlcn0gZnJvbSAnbGl0JztcbiAqXG4gKiBjb25zdCBuYW1lID0gXCJab2VcIjtcbiAqIHJlbmRlcihodG1sYDxwPkhlbGxvLCAke25hbWV9ITwvcD5gLCBkb2N1bWVudC5ib2R5KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZSBBbnkgW3JlbmRlcmFibGVcbiAqICAgdmFsdWVdKGh0dHBzOi8vbGl0LmRldi9kb2NzL3RlbXBsYXRlcy9leHByZXNzaW9ucy8jY2hpbGQtZXhwcmVzc2lvbnMpLFxuICogICB0eXBpY2FsbHkgYSB7QGxpbmtjb2RlIFRlbXBsYXRlUmVzdWx0fSBjcmVhdGVkIGJ5IGV2YWx1YXRpbmcgYSB0ZW1wbGF0ZSB0YWdcbiAqICAgbGlrZSB7QGxpbmtjb2RlIGh0bWx9IG9yIHtAbGlua2NvZGUgc3ZnfS5cbiAqIEBwYXJhbSBjb250YWluZXIgQSBET00gY29udGFpbmVyIHRvIHJlbmRlciB0by4gVGhlIGZpcnN0IHJlbmRlciB3aWxsIGFwcGVuZFxuICogICB0aGUgcmVuZGVyZWQgdmFsdWUgdG8gdGhlIGNvbnRhaW5lciwgYW5kIHN1YnNlcXVlbnQgcmVuZGVycyB3aWxsXG4gKiAgIGVmZmljaWVudGx5IHVwZGF0ZSB0aGUgcmVuZGVyZWQgdmFsdWUgaWYgdGhlIHNhbWUgcmVzdWx0IHR5cGUgd2FzXG4gKiAgIHByZXZpb3VzbHkgcmVuZGVyZWQgdGhlcmUuXG4gKiBAcGFyYW0gb3B0aW9ucyBTZWUge0BsaW5rY29kZSBSZW5kZXJPcHRpb25zfSBmb3Igb3B0aW9ucyBkb2N1bWVudGF0aW9uLlxuICogQHNlZVxuICoge0BsaW5rIGh0dHBzOi8vbGl0LmRldi9kb2NzL2xpYnJhcmllcy9zdGFuZGFsb25lLXRlbXBsYXRlcy8jcmVuZGVyaW5nLWxpdC1odG1sLXRlbXBsYXRlc3wgUmVuZGVyaW5nIExpdCBIVE1MIFRlbXBsYXRlc31cbiAqL1xuZXhwb3J0IGNvbnN0IHJlbmRlciA9IChcbiAgdmFsdWU6IHVua25vd24sXG4gIGNvbnRhaW5lcjogUmVuZGVyUm9vdE5vZGUsXG4gIG9wdGlvbnM/OiBSZW5kZXJPcHRpb25zXG4pOiBSb290UGFydCA9PiB7XG4gIGlmIChERVZfTU9ERSAmJiBjb250YWluZXIgPT0gbnVsbCkge1xuICAgIC8vIEdpdmUgYSBjbGVhcmVyIGVycm9yIG1lc3NhZ2UgdGhhblxuICAgIC8vICAgICBVbmNhdWdodCBUeXBlRXJyb3I6IENhbm5vdCByZWFkIHByb3BlcnRpZXMgb2YgbnVsbCAocmVhZGluZ1xuICAgIC8vICAgICAnXyRsaXRQYXJ0JCcpXG4gICAgLy8gd2hpY2ggcmVhZHMgbGlrZSBhbiBpbnRlcm5hbCBMaXQgZXJyb3IuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIGNvbnRhaW5lciB0byByZW5kZXIgaW50byBtYXkgbm90IGJlICR7Y29udGFpbmVyfWApO1xuICB9XG4gIGNvbnN0IHJlbmRlcklkID0gREVWX01PREUgPyBkZWJ1Z0xvZ1JlbmRlcklkKysgOiAwO1xuICBjb25zdCBwYXJ0T3duZXJOb2RlID0gb3B0aW9ucz8ucmVuZGVyQmVmb3JlID8/IGNvbnRhaW5lcjtcbiAgLy8gVGhpcyBwcm9wZXJ0eSBuZWVkcyB0byByZW1haW4gdW5taW5pZmllZC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgbGV0IHBhcnQ6IENoaWxkUGFydCA9IChwYXJ0T3duZXJOb2RlIGFzIGFueSlbJ18kbGl0UGFydCQnXTtcbiAgZGVidWdMb2dFdmVudCAmJlxuICAgIGRlYnVnTG9nRXZlbnQoe1xuICAgICAga2luZDogJ2JlZ2luIHJlbmRlcicsXG4gICAgICBpZDogcmVuZGVySWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG9wdGlvbnMsXG4gICAgICBwYXJ0LFxuICAgIH0pO1xuICBpZiAocGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZW5kTm9kZSA9IG9wdGlvbnM/LnJlbmRlckJlZm9yZSA/PyBudWxsO1xuICAgIC8vIFRoaXMgcHJvcGVydHkgbmVlZHMgdG8gcmVtYWluIHVubWluaWZpZWQuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAocGFydE93bmVyTm9kZSBhcyBhbnkpWydfJGxpdFBhcnQkJ10gPSBwYXJ0ID0gbmV3IENoaWxkUGFydChcbiAgICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUoY3JlYXRlTWFya2VyKCksIGVuZE5vZGUpLFxuICAgICAgZW5kTm9kZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIG9wdGlvbnMgPz8ge31cbiAgICApO1xuICB9XG4gIHBhcnQuXyRzZXRWYWx1ZSh2YWx1ZSk7XG4gIGRlYnVnTG9nRXZlbnQgJiZcbiAgICBkZWJ1Z0xvZ0V2ZW50KHtcbiAgICAgIGtpbmQ6ICdlbmQgcmVuZGVyJyxcbiAgICAgIGlkOiByZW5kZXJJZCxcbiAgICAgIHZhbHVlLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHBhcnQsXG4gICAgfSk7XG4gIHJldHVybiBwYXJ0IGFzIFJvb3RQYXJ0O1xufTtcblxuaWYgKEVOQUJMRV9FWFRSQV9TRUNVUklUWV9IT09LUykge1xuICByZW5kZXIuc2V0U2FuaXRpemVyID0gc2V0U2FuaXRpemVyO1xuICByZW5kZXIuY3JlYXRlU2FuaXRpemVyID0gY3JlYXRlU2FuaXRpemVyO1xuICBpZiAoREVWX01PREUpIHtcbiAgICByZW5kZXIuX3Rlc3RPbmx5Q2xlYXJTYW5pdGl6ZXJGYWN0b3J5RG9Ob3RDYWxsT3JFbHNlID1cbiAgICAgIF90ZXN0T25seUNsZWFyU2FuaXRpemVyRmFjdG9yeURvTm90Q2FsbE9yRWxzZTtcbiAgfVxufVxuIiwgIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTENcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoZSBtYWluIExpdEVsZW1lbnQgbW9kdWxlLCB3aGljaCBkZWZpbmVzIHRoZSB7QGxpbmtjb2RlIExpdEVsZW1lbnR9IGJhc2VcbiAqIGNsYXNzIGFuZCByZWxhdGVkIEFQSXMuXG4gKlxuICogTGl0RWxlbWVudCBjb21wb25lbnRzIGNhbiBkZWZpbmUgYSB0ZW1wbGF0ZSBhbmQgYSBzZXQgb2Ygb2JzZXJ2ZWRcbiAqIHByb3BlcnRpZXMuIENoYW5naW5nIGFuIG9ic2VydmVkIHByb3BlcnR5IHRyaWdnZXJzIGEgcmUtcmVuZGVyIG9mIHRoZVxuICogZWxlbWVudC5cbiAqXG4gKiBJbXBvcnQge0BsaW5rY29kZSBMaXRFbGVtZW50fSBhbmQge0BsaW5rY29kZSBodG1sfSBmcm9tIHRoaXMgbW9kdWxlIHRvXG4gKiBjcmVhdGUgYSBjb21wb25lbnQ6XG4gKlxuICogIGBgYGpzXG4gKiBpbXBvcnQge0xpdEVsZW1lbnQsIGh0bWx9IGZyb20gJ2xpdC1lbGVtZW50JztcbiAqXG4gKiBjbGFzcyBNeUVsZW1lbnQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAqXG4gKiAgIC8vIERlY2xhcmUgb2JzZXJ2ZWQgcHJvcGVydGllc1xuICogICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gKiAgICAgcmV0dXJuIHtcbiAqICAgICAgIGFkamVjdGl2ZToge31cbiAqICAgICB9XG4gKiAgIH1cbiAqXG4gKiAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgIHRoaXMuYWRqZWN0aXZlID0gJ2F3ZXNvbWUnO1xuICogICB9XG4gKlxuICogICAvLyBEZWZpbmUgdGhlIGVsZW1lbnQncyB0ZW1wbGF0ZVxuICogICByZW5kZXIoKSB7XG4gKiAgICAgcmV0dXJuIGh0bWxgPHA+eW91ciAke2FkamVjdGl2ZX0gdGVtcGxhdGUgaGVyZTwvcD5gO1xuICogICB9XG4gKiB9XG4gKlxuICogY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdteS1lbGVtZW50JywgTXlFbGVtZW50KTtcbiAqIGBgYFxuICpcbiAqIGBMaXRFbGVtZW50YCBleHRlbmRzIHtAbGlua2NvZGUgUmVhY3RpdmVFbGVtZW50fSBhbmQgYWRkcyBsaXQtaHRtbFxuICogdGVtcGxhdGluZy4gVGhlIGBSZWFjdGl2ZUVsZW1lbnRgIGNsYXNzIGlzIHByb3ZpZGVkIGZvciB1c2VycyB0aGF0IHdhbnQgdG9cbiAqIGJ1aWxkIHRoZWlyIG93biBjdXN0b20gZWxlbWVudCBiYXNlIGNsYXNzZXMgdGhhdCBkb24ndCB1c2UgbGl0LWh0bWwuXG4gKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cbmltcG9ydCB7UHJvcGVydHlWYWx1ZXMsIFJlYWN0aXZlRWxlbWVudH0gZnJvbSAnQGxpdC9yZWFjdGl2ZS1lbGVtZW50JztcbmltcG9ydCB7cmVuZGVyLCBSZW5kZXJPcHRpb25zLCBub0NoYW5nZSwgUm9vdFBhcnR9IGZyb20gJ2xpdC1odG1sJztcbmV4cG9ydCAqIGZyb20gJ0BsaXQvcmVhY3RpdmUtZWxlbWVudCc7XG5leHBvcnQgKiBmcm9tICdsaXQtaHRtbCc7XG5cbmltcG9ydCB7TGl0VW5zdGFibGV9IGZyb20gJ2xpdC1odG1sJztcbmltcG9ydCB7UmVhY3RpdmVVbnN0YWJsZX0gZnJvbSAnQGxpdC9yZWFjdGl2ZS1lbGVtZW50JztcblxuLyoqXG4gKiBDb250YWlucyB0eXBlcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSB1bnN0YWJsZSBkZWJ1ZyBBUEkuXG4gKlxuICogRXZlcnl0aGluZyBpbiB0aGlzIEFQSSBpcyBub3Qgc3RhYmxlIGFuZCBtYXkgY2hhbmdlIG9yIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSxcbiAqIGV2ZW4gb24gcGF0Y2ggcmVsZWFzZXMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG5leHBvcnQgbmFtZXNwYWNlIFVuc3RhYmxlIHtcbiAgLyoqXG4gICAqIFdoZW4gTGl0IGlzIHJ1bm5pbmcgaW4gZGV2IG1vZGUgYW5kIGB3aW5kb3cuZW1pdExpdERlYnVnTG9nRXZlbnRzYCBpcyB0cnVlLFxuICAgKiB3ZSB3aWxsIGVtaXQgJ2xpdC1kZWJ1ZycgZXZlbnRzIHRvIHdpbmRvdywgd2l0aCBsaXZlIGRldGFpbHMgYWJvdXQgdGhlIHVwZGF0ZSBhbmQgcmVuZGVyXG4gICAqIGxpZmVjeWNsZS4gVGhlc2UgY2FuIGJlIHVzZWZ1bCBmb3Igd3JpdGluZyBkZWJ1ZyB0b29saW5nIGFuZCB2aXN1YWxpemF0aW9ucy5cbiAgICpcbiAgICogUGxlYXNlIGJlIGF3YXJlIHRoYXQgcnVubmluZyB3aXRoIHdpbmRvdy5lbWl0TGl0RGVidWdMb2dFdmVudHMgaGFzIHBlcmZvcm1hbmNlIG92ZXJoZWFkLFxuICAgKiBtYWtpbmcgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgYXJlIG5vcm1hbGx5IHZlcnkgY2hlYXAgKGxpa2UgYSBuby1vcCByZW5kZXIpIG11Y2ggc2xvd2VyLFxuICAgKiBiZWNhdXNlIHdlIG11c3QgY29weSBkYXRhIGFuZCBkaXNwYXRjaCBldmVudHMuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICBleHBvcnQgbmFtZXNwYWNlIERlYnVnTG9nIHtcbiAgICBleHBvcnQgdHlwZSBFbnRyeSA9XG4gICAgICB8IExpdFVuc3RhYmxlLkRlYnVnTG9nLkVudHJ5XG4gICAgICB8IFJlYWN0aXZlVW5zdGFibGUuRGVidWdMb2cuRW50cnk7XG4gIH1cbn1cbi8qXG4gKiBXaGVuIHVzaW5nIENsb3N1cmUgQ29tcGlsZXIsIEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkocHJvcGVydHksIG9iamVjdCkgaXNcbiAqIHJlcGxhY2VkIGF0IGNvbXBpbGUgdGltZSBieSB0aGUgbXVuZ2VkIG5hbWUgZm9yIG9iamVjdFtwcm9wZXJ0eV0uIFdlIGNhbm5vdFxuICogYWxpYXMgdGhpcyBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0byB1c2UgYSBzbWFsbCBzaGltIHRoYXQgaGFzIHRoZSBzYW1lXG4gKiBiZWhhdmlvciB3aGVuIG5vdCBjb21waWxpbmcuXG4gKi9cbi8qQF9fSU5MSU5FX18qL1xuY29uc3QgSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSA9IDxQIGV4dGVuZHMgUHJvcGVydHlLZXk+KFxuICBwcm9wOiBQLFxuICBfb2JqOiB1bmtub3duXG4pOiBQID0+IHByb3A7XG5cbmNvbnN0IERFVl9NT0RFID0gdHJ1ZTtcbi8vIEFsbG93cyBtaW5pZmllcnMgdG8gcmVuYW1lIHJlZmVyZW5jZXMgdG8gZ2xvYmFsVGhpc1xuY29uc3QgZ2xvYmFsID0gZ2xvYmFsVGhpcztcblxubGV0IGlzc3VlV2FybmluZzogKGNvZGU6IHN0cmluZywgd2FybmluZzogc3RyaW5nKSA9PiB2b2lkO1xuXG5pZiAoREVWX01PREUpIHtcbiAgLy8gRW5zdXJlIHdhcm5pbmdzIGFyZSBpc3N1ZWQgb25seSAxeCwgZXZlbiBpZiBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBMaXRcbiAgLy8gYXJlIGxvYWRlZC5cbiAgZ2xvYmFsLmxpdElzc3VlZFdhcm5pbmdzID8/PSBuZXcgU2V0KCk7XG5cbiAgLyoqXG4gICAqIElzc3VlIGEgd2FybmluZyBpZiB3ZSBoYXZlbid0IGFscmVhZHksIGJhc2VkIGVpdGhlciBvbiBgY29kZWAgb3IgYHdhcm5pbmdgLlxuICAgKiBXYXJuaW5ncyBhcmUgZGlzYWJsZWQgYXV0b21hdGljYWxseSBvbmx5IGJ5IGB3YXJuaW5nYDsgZGlzYWJsaW5nIHZpYSBgY29kZWBcbiAgICogY2FuIGJlIGRvbmUgYnkgdXNlcnMuXG4gICAqL1xuICBpc3N1ZVdhcm5pbmcgPSAoY29kZTogc3RyaW5nLCB3YXJuaW5nOiBzdHJpbmcpID0+IHtcbiAgICB3YXJuaW5nICs9IGAgU2VlIGh0dHBzOi8vbGl0LmRldi9tc2cvJHtjb2RlfSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gO1xuICAgIGlmIChcbiAgICAgICFnbG9iYWwubGl0SXNzdWVkV2FybmluZ3MhLmhhcyh3YXJuaW5nKSAmJlxuICAgICAgIWdsb2JhbC5saXRJc3N1ZWRXYXJuaW5ncyEuaGFzKGNvZGUpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgICBnbG9iYWwubGl0SXNzdWVkV2FybmluZ3MhLmFkZCh3YXJuaW5nKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQmFzZSBlbGVtZW50IGNsYXNzIHRoYXQgbWFuYWdlcyBlbGVtZW50IHByb3BlcnRpZXMgYW5kIGF0dHJpYnV0ZXMsIGFuZFxuICogcmVuZGVycyBhIGxpdC1odG1sIHRlbXBsYXRlLlxuICpcbiAqIFRvIGRlZmluZSBhIGNvbXBvbmVudCwgc3ViY2xhc3MgYExpdEVsZW1lbnRgIGFuZCBpbXBsZW1lbnQgYVxuICogYHJlbmRlcmAgbWV0aG9kIHRvIHByb3ZpZGUgdGhlIGNvbXBvbmVudCdzIHRlbXBsYXRlLiBEZWZpbmUgcHJvcGVydGllc1xuICogdXNpbmcgdGhlIHtAbGlua2NvZGUgTGl0RWxlbWVudC5wcm9wZXJ0aWVzIHByb3BlcnRpZXN9IHByb3BlcnR5IG9yIHRoZVxuICoge0BsaW5rY29kZSBwcm9wZXJ0eX0gZGVjb3JhdG9yLlxuICovXG5leHBvcnQgY2xhc3MgTGl0RWxlbWVudCBleHRlbmRzIFJlYWN0aXZlRWxlbWVudCB7XG4gIC8vIFRoaXMgcHJvcGVydHkgbmVlZHMgdG8gcmVtYWluIHVubWluaWZpZWQuXG4gIHN0YXRpYyBbJ18kbGl0RWxlbWVudCQnXSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBjYXRlZ29yeSByZW5kZXJpbmdcbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7aG9zdDogdGhpc307XG5cbiAgcHJpdmF0ZSBfX2NoaWxkUGFydDogUm9vdFBhcnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBjYXRlZ29yeSByZW5kZXJpbmdcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjcmVhdGVSZW5kZXJSb290KCkge1xuICAgIGNvbnN0IHJlbmRlclJvb3QgPSBzdXBlci5jcmVhdGVSZW5kZXJSb290KCk7XG4gICAgLy8gV2hlbiBhZG9wdGVkU3R5bGVTaGVldHMgYXJlIHNoaW1tZWQsIHRoZXkgYXJlIGluc2VydGVkIGludG8gdGhlXG4gICAgLy8gc2hhZG93Um9vdCBieSBjcmVhdGVSZW5kZXJSb290LiBBZGp1c3QgdGhlIHJlbmRlckJlZm9yZSBub2RlIHNvIHRoYXRcbiAgICAvLyBhbnkgc3R5bGVzIGluIExpdCBjb250ZW50IHJlbmRlciBiZWZvcmUgYWRvcHRlZFN0eWxlU2hlZXRzLiBUaGlzIGlzXG4gICAgLy8gaW1wb3J0YW50IHNvIHRoYXQgYWRvcHRlZFN0eWxlU2hlZXRzIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHN0eWxlcyBpblxuICAgIC8vIHRoZSBzaGFkb3dSb290LlxuICAgIHRoaXMucmVuZGVyT3B0aW9ucy5yZW5kZXJCZWZvcmUgPz89IHJlbmRlclJvb3QhLmZpcnN0Q2hpbGQgYXMgQ2hpbGROb2RlO1xuICAgIHJldHVybiByZW5kZXJSb290O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGVsZW1lbnQuIFRoaXMgbWV0aG9kIHJlZmxlY3RzIHByb3BlcnR5IHZhbHVlcyB0byBhdHRyaWJ1dGVzXG4gICAqIGFuZCBjYWxscyBgcmVuZGVyYCB0byByZW5kZXIgRE9NIHZpYSBsaXQtaHRtbC4gU2V0dGluZyBwcm9wZXJ0aWVzIGluc2lkZVxuICAgKiB0aGlzIG1ldGhvZCB3aWxsICpub3QqIHRyaWdnZXIgYW5vdGhlciB1cGRhdGUuXG4gICAqIEBwYXJhbSBjaGFuZ2VkUHJvcGVydGllcyBNYXAgb2YgY2hhbmdlZCBwcm9wZXJ0aWVzIHdpdGggb2xkIHZhbHVlc1xuICAgKiBAY2F0ZWdvcnkgdXBkYXRlc1xuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXMpIHtcbiAgICAvLyBTZXR0aW5nIHByb3BlcnRpZXMgaW4gYHJlbmRlcmAgc2hvdWxkIG5vdCB0cmlnZ2VyIGFuIHVwZGF0ZS4gU2luY2VcbiAgICAvLyB1cGRhdGVzIGFyZSBhbGxvd2VkIGFmdGVyIHN1cGVyLnVwZGF0ZSwgaXQncyBpbXBvcnRhbnQgdG8gY2FsbCBgcmVuZGVyYFxuICAgIC8vIGJlZm9yZSB0aGF0LlxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZW5kZXIoKTtcbiAgICBpZiAoIXRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgdGhpcy5yZW5kZXJPcHRpb25zLmlzQ29ubmVjdGVkID0gdGhpcy5pc0Nvbm5lY3RlZDtcbiAgICB9XG4gICAgc3VwZXIudXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICB0aGlzLl9fY2hpbGRQYXJ0ID0gcmVuZGVyKHZhbHVlLCB0aGlzLnJlbmRlclJvb3QsIHRoaXMucmVuZGVyT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgYWRkZWQgdG8gdGhlIGRvY3VtZW50J3MgRE9NLlxuICAgKlxuICAgKiBJbiBgY29ubmVjdGVkQ2FsbGJhY2soKWAgeW91IHNob3VsZCBzZXR1cCB0YXNrcyB0aGF0IHNob3VsZCBvbmx5IG9jY3VyIHdoZW5cbiAgICogdGhlIGVsZW1lbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBkb2N1bWVudC4gVGhlIG1vc3QgY29tbW9uIG9mIHRoZXNlIGlzXG4gICAqIGFkZGluZyBldmVudCBsaXN0ZW5lcnMgdG8gbm9kZXMgZXh0ZXJuYWwgdG8gdGhlIGVsZW1lbnQsIGxpa2UgYSBrZXlkb3duXG4gICAqIGV2ZW50IGhhbmRsZXIgYWRkZWQgdG8gdGhlIHdpbmRvdy5cbiAgICpcbiAgICogYGBgdHNcbiAgICogY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAqICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICogICBhZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5faGFuZGxlS2V5ZG93bik7XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIFR5cGljYWxseSwgYW55dGhpbmcgZG9uZSBpbiBgY29ubmVjdGVkQ2FsbGJhY2soKWAgc2hvdWxkIGJlIHVuZG9uZSB3aGVuIHRoZVxuICAgKiBlbGVtZW50IGlzIGRpc2Nvbm5lY3RlZCwgaW4gYGRpc2Nvbm5lY3RlZENhbGxiYWNrKClgLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgbGlmZWN5Y2xlXG4gICAqL1xuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX19jaGlsZFBhcnQ/LnNldENvbm5lY3RlZCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50J3MgRE9NLlxuICAgKlxuICAgKiBUaGlzIGNhbGxiYWNrIGlzIHRoZSBtYWluIHNpZ25hbCB0byB0aGUgZWxlbWVudCB0aGF0IGl0IG1heSBubyBsb25nZXIgYmVcbiAgICogdXNlZC4gYGRpc2Nvbm5lY3RlZENhbGxiYWNrKClgIHNob3VsZCBlbnN1cmUgdGhhdCBub3RoaW5nIGlzIGhvbGRpbmcgYVxuICAgKiByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgKHN1Y2ggYXMgZXZlbnQgbGlzdGVuZXJzIGFkZGVkIHRvIG5vZGVzIGV4dGVybmFsXG4gICAqIHRvIHRoZSBlbGVtZW50KSwgc28gdGhhdCBpdCBpcyBmcmVlIHRvIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICogICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgKiAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5faGFuZGxlS2V5ZG93bik7XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEFuIGVsZW1lbnQgbWF5IGJlIHJlLWNvbm5lY3RlZCBhZnRlciBiZWluZyBkaXNjb25uZWN0ZWQuXG4gICAqXG4gICAqIEBjYXRlZ29yeSBsaWZlY3ljbGVcbiAgICovXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fX2NoaWxkUGFydD8uc2V0Q29ubmVjdGVkKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VkIG9uIGVhY2ggdXBkYXRlIHRvIHBlcmZvcm0gcmVuZGVyaW5nIHRhc2tzLiBUaGlzIG1ldGhvZCBtYXkgcmV0dXJuXG4gICAqIGFueSB2YWx1ZSByZW5kZXJhYmxlIGJ5IGxpdC1odG1sJ3MgYENoaWxkUGFydGAgLSB0eXBpY2FsbHkgYVxuICAgKiBgVGVtcGxhdGVSZXN1bHRgLiBTZXR0aW5nIHByb3BlcnRpZXMgaW5zaWRlIHRoaXMgbWV0aG9kIHdpbGwgKm5vdCogdHJpZ2dlclxuICAgKiB0aGUgZWxlbWVudCB0byB1cGRhdGUuXG4gICAqIEBjYXRlZ29yeSByZW5kZXJpbmdcbiAgICovXG4gIHByb3RlY3RlZCByZW5kZXIoKTogdW5rbm93biB7XG4gICAgcmV0dXJuIG5vQ2hhbmdlO1xuICB9XG59XG5cbi8qKlxuICogRW5zdXJlIHRoaXMgY2xhc3MgaXMgbWFya2VkIGFzIGBmaW5hbGl6ZWRgIGFzIGFuIG9wdGltaXphdGlvbiBlbnN1cmluZ1xuICogaXQgd2lsbCBub3QgbmVlZGxlc3NseSB0cnkgdG8gYGZpbmFsaXplYC5cbiAqXG4gKiBOb3RlIHRoaXMgcHJvcGVydHkgbmFtZSBpcyBhIHN0cmluZyB0byBwcmV2ZW50IGJyZWFraW5nIENsb3N1cmUgSlMgQ29tcGlsZXJcbiAqIG9wdGltaXphdGlvbnMuIFNlZSBAbGl0L3JlYWN0aXZlLWVsZW1lbnQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbihMaXRFbGVtZW50IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW1xuICBKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdmaW5hbGl6ZWQnLCBMaXRFbGVtZW50KVxuXSA9IHRydWU7XG5cbi8vIEluc3RhbGwgaHlkcmF0aW9uIGlmIGF2YWlsYWJsZVxuZ2xvYmFsLmxpdEVsZW1lbnRIeWRyYXRlU3VwcG9ydD8uKHtMaXRFbGVtZW50fSk7XG5cbi8vIEFwcGx5IHBvbHlmaWxscyBpZiBhdmFpbGFibGVcbmNvbnN0IHBvbHlmaWxsU3VwcG9ydCA9IERFVl9NT0RFXG4gID8gZ2xvYmFsLmxpdEVsZW1lbnRQb2x5ZmlsbFN1cHBvcnREZXZNb2RlXG4gIDogZ2xvYmFsLmxpdEVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQ7XG5wb2x5ZmlsbFN1cHBvcnQ/Lih7TGl0RWxlbWVudH0pO1xuXG4vKipcbiAqIEVORCBVU0VSUyBTSE9VTEQgTk9UIFJFTFkgT04gVEhJUyBPQkpFQ1QuXG4gKlxuICogUHJpdmF0ZSBleHBvcnRzIGZvciB1c2UgYnkgb3RoZXIgTGl0IHBhY2thZ2VzLCBub3QgaW50ZW5kZWQgZm9yIHVzZSBieVxuICogZXh0ZXJuYWwgdXNlcnMuXG4gKlxuICogV2UgY3VycmVudGx5IGRvIG5vdCBtYWtlIGEgbWFuZ2xlZCByb2xsdXAgYnVpbGQgb2YgdGhlIGxpdC1zc3IgY29kZS4gSW4gb3JkZXJcbiAqIHRvIGtlZXAgYSBudW1iZXIgb2YgKG90aGVyd2lzZSBwcml2YXRlKSB0b3AtbGV2ZWwgZXhwb3J0cyAgbWFuZ2xlZCBpbiB0aGVcbiAqIGNsaWVudCBzaWRlIGNvZGUsIHdlIGV4cG9ydCBhIF8kTEUgb2JqZWN0IGNvbnRhaW5pbmcgdGhvc2UgbWVtYmVycyAob3JcbiAqIGhlbHBlciBtZXRob2RzIGZvciBhY2Nlc3NpbmcgcHJpdmF0ZSBmaWVsZHMgb2YgdGhvc2UgbWVtYmVycyksIGFuZCB0aGVuXG4gKiByZS1leHBvcnQgdGhlbSBmb3IgdXNlIGluIGxpdC1zc3IuIFRoaXMga2VlcHMgbGl0LXNzciBhZ25vc3RpYyB0byB3aGV0aGVyIHRoZVxuICogY2xpZW50LXNpZGUgY29kZSBpcyBiZWluZyB1c2VkIGluIGBkZXZgIG1vZGUgb3IgYHByb2RgIG1vZGUuXG4gKlxuICogVGhpcyBoYXMgYSB1bmlxdWUgbmFtZSwgdG8gZGlzYW1iaWd1YXRlIGl0IGZyb20gcHJpdmF0ZSBleHBvcnRzIGluXG4gKiBsaXQtaHRtbCwgc2luY2UgdGhpcyBtb2R1bGUgcmUtZXhwb3J0cyBhbGwgb2YgbGl0LWh0bWwuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IF8kTEUgPSB7XG4gIF8kYXR0cmlidXRlVG9Qcm9wZXJ0eTogKFxuICAgIGVsOiBMaXRFbGVtZW50LFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbFxuICApID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAoZWwgYXMgYW55KS5fJGF0dHJpYnV0ZVRvUHJvcGVydHkobmFtZSwgdmFsdWUpO1xuICB9LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgXyRjaGFuZ2VkUHJvcGVydGllczogKGVsOiBMaXRFbGVtZW50KSA9PiAoZWwgYXMgYW55KS5fJGNoYW5nZWRQcm9wZXJ0aWVzLFxufTtcblxuLy8gSU1QT1JUQU5UOiBkbyBub3QgY2hhbmdlIHRoZSBwcm9wZXJ0eSBuYW1lIG9yIHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24uXG4vLyBUaGlzIGxpbmUgd2lsbCBiZSB1c2VkIGluIHJlZ2V4ZXMgdG8gc2VhcmNoIGZvciBMaXRFbGVtZW50IHVzYWdlLlxuKGdsb2JhbC5saXRFbGVtZW50VmVyc2lvbnMgPz89IFtdKS5wdXNoKCc0LjIuMicpO1xuaWYgKERFVl9NT0RFICYmIGdsb2JhbC5saXRFbGVtZW50VmVyc2lvbnMubGVuZ3RoID4gMSkge1xuICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgaXNzdWVXYXJuaW5nIShcbiAgICAgICdtdWx0aXBsZS12ZXJzaW9ucycsXG4gICAgICBgTXVsdGlwbGUgdmVyc2lvbnMgb2YgTGl0IGxvYWRlZC4gTG9hZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBgICtcbiAgICAgICAgYGlzIG5vdCByZWNvbW1lbmRlZC5gXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQ1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZVxuICovXG5cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICpcbiAqIFRoaXMgZmlsZSBleHBvcnRzIGEgYm9vbGVhbiBjb25zdCB3aG9zZSB2YWx1ZSB3aWxsIGRlcGVuZCBvbiB3aGF0IGVudmlyb25tZW50XG4gKiB0aGUgbW9kdWxlIGlzIGJlaW5nIGltcG9ydGVkIGZyb20uXG4gKi9cblxuY29uc3QgTk9ERV9NT0RFID0gZmFsc2U7XG5cbi8qKlxuICogQSBib29sZWFuIHRoYXQgd2lsbCBiZSBgdHJ1ZWAgaW4gc2VydmVyIGVudmlyb25tZW50cyBsaWtlIE5vZGUsIGFuZCBgZmFsc2VgXG4gKiBpbiBicm93c2VyIGVudmlyb25tZW50cy4gTm90ZSB0aGF0IHlvdXIgc2VydmVyIGVudmlyb25tZW50IG9yIHRvb2xjaGFpbiBtdXN0XG4gKiBzdXBwb3J0IHRoZSBgXCJub2RlXCJgIGV4cG9ydCBjb25kaXRpb24gZm9yIHRoaXMgdG8gYmUgYHRydWVgLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgd2hlbiBhdXRob3JpbmcgY29tcG9uZW50cyB0byBjaGFuZ2UgYmVoYXZpb3IgYmFzZWQgb25cbiAqIHdoZXRoZXIgb3Igbm90IHRoZSBjb21wb25lbnQgaXMgZXhlY3V0aW5nIGluIGFuIFNTUiBjb250ZXh0LlxuICovXG5leHBvcnQgY29uc3QgaXNTZXJ2ZXIgPSBOT0RFX01PREU7XG4iLCAiaW1wb3J0XCJAbGl0L3JlYWN0aXZlLWVsZW1lbnRcIjtpbXBvcnRcImxpdC1odG1sXCI7ZXhwb3J0KmZyb21cImxpdC1lbGVtZW50L2xpdC1lbGVtZW50LmpzXCI7ZXhwb3J0KmZyb21cImxpdC1odG1sL2lzLXNlcnZlci5qc1wiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCAiZXhwb3J0IGNvbnN0IHVuaSA9IChwcmVmaXg6IHN0cmluZyA9ICd1bmknKSA9PiB7XG4gIHJldHVybiBgJHtwcmVmaXh9XyR7YHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eGAucmVwbGFjZSgvW3h5XS9nLCAoYykgPT4ge1xuICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDA7XG4gICAgY29uc3QgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDg7XG4gICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICB9KX1gO1xufTtcbiIsICJleHBvcnQgaW50ZXJmYWNlIElSZXNvbHZlPFQ+IHtcbiAgKHZhbHVlPzogVCB8IFByb21pc2VMaWtlPFQ+KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVqZWN0IHtcbiAgKHJlYXNvbj86IGFueSk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFREZWZlcnJlZFN0YXR1cyA9ICdwZW5kaW5nJyB8ICdmdWxmaWxsZWQnIHwgJ3JlamVjdGVkJztcblxuZXhwb3J0IGNsYXNzIERlZmVycmVkPFQ+IHtcbiAgcHVibGljIHByb21pc2U6IFByb21pc2U8VD47XG4gIHB1YmxpYyByZXNvbHZlOiBJUmVzb2x2ZTxUPjtcbiAgcHVibGljIHJlamVjdDogSVJlamVjdDtcbiAgcHVibGljIHN0YXR1czogVERlZmVycmVkU3RhdHVzO1xuICBwdWJsaWMgY2xhaW1lZCA9IGZhbHNlO1xuICBwdWJsaWMgY2xhaW0oKSB7XG4gICAgaWYgKHRoaXMuY2xhaW1lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZWZlcnJlZCBhbHJlYWR5IGNsYWltZWQnKTtcbiAgICB9XG4gICAgdGhpcy5jbGFpbWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydGVkQXQ6IG51bWJlcjtcbiAgcHVibGljIHN0b3BwZWRBdDogbnVtYmVyO1xuICBwdWJsaWMgZ2V0IGR1cmF0aW9uKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuc3RvcHBlZEF0KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9wcGVkQXQgLSB0aGlzLnN0YXJ0ZWRBdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLnN0YXJ0ZWRBdDtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmUgPSAodmFsdWVBcmc6IFQgfCBQcm9taXNlTGlrZTxUPikgPT4ge1xuICAgICAgICB0aGlzLnN0YXR1cyA9ICdmdWxmaWxsZWQnO1xuICAgICAgICB0aGlzLnN0b3BwZWRBdCA9IERhdGUubm93KCk7XG4gICAgICAgIHJlc29sdmUodmFsdWVBcmcpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucmVqZWN0ID0gKHJlYXNvbjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gJ3JlamVjdGVkJztcbiAgICAgICAgdGhpcy5zdG9wcGVkQXQgPSBEYXRlLm5vdygpO1xuICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICB0aGlzLnN0YXR1cyA9ICdwZW5kaW5nJztcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGVmZXIgPSA8VD4oKSA9PiB7XG4gIHJldHVybiBuZXcgRGVmZXJyZWQ8VD4oKTtcbn07IiwgImltcG9ydCB7IGRlZmVyIH0gZnJvbSBcIi4vc21hcnRwcm9taXNlLmNsYXNzZXMuZGVmZXJyZWQuanNcIjtcblxuZXhwb3J0IGNsYXNzIEN1bXVsYXRpdmVEZWZlcnJlZCB7XG4gIHByaXZhdGUgYWNjdW11bGF0ZWRQcm9taXNlczogUHJvbWlzZTxhbnk+W10gPSBbXTtcbiAgcHJpdmF0ZSBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gIHB1YmxpYyBwcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgd2hpbGUgKHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHBvcHBlZFByb21pc2UgPSB0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMuc2hpZnQoKTtcbiAgICAgICAgYXdhaXQgcG9wcGVkUHJvbWlzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIHN1YkRlZmVyKCkge1xuICAgIGNvbnN0IGRvbmUgPSBkZWZlcigpO1xuICAgIHRoaXMuYWRkUHJvbWlzZShkb25lLnByb21pc2UpO1xuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgcHVibGljIGFkZFByb21pc2UocHJvbWlzZUFyZzogUHJvbWlzZTxhbnk+KSB7XG4gICAgdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnB1c2gocHJvbWlzZUFyZyk7XG4gIH1cbn1cblxuXG5leHBvcnQgY29uc3QgY3VtdWxhdGl2ZURlZmVyID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IEN1bXVsYXRpdmVEZWZlcnJlZCgpO1xufSIsICJpbXBvcnQgeyBkZWZlciB9IGZyb20gJy4vc21hcnRwcm9taXNlLmNsYXNzZXMuZGVmZXJyZWQuanMnO1xuXG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmN1bXVsYXRpdmVkZWZlcnJlZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLmpzJztcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcmVzb2x2ZWQgcHJvbWlzZSBmb3IgdGhlIHByb3ZpZGVkIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZWRQcm9taXNlID0gPFQ+KHZhbHVlPzogVCk6IFByb21pc2U8VD4gPT4ge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyByZWplY3RlZCBwcm9taXNlIGZvciB0aGUgcHJvdmlkZWQgcmVhc29uLlxuICovXG5leHBvcnQgY29uc3QgcmVqZWN0ZWRQcm9taXNlID0gKGVycikgPT4ge1xuICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbn07XG5cbmludGVyZmFjZSBJQXN5bmNGdW5jdGlvbjxUPiB7XG4gIChzb21lQXJnOiBUKTogUHJvbWlzZTxUPjtcbn1cblxuLyoqXG4gKiBhY2NlcHRzIGFuIGFycmF5IG9mIGlucHV0cyBhbmQgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIGlucHV0LlxuICogcnVucyBhbGwgaXRlbXMgd2l0aCB0aGUgZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcnJheSB3aGVuIGFsbCBpdGVtcyBoYXZlIHJ1blxuICogQHBhcmFtIGlucHV0QXJnXG4gKiBAcGFyYW0gZnVuY3Rpb25BcmdcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcCA9IGFzeW5jIDxUPihpbnB1dEFyZzogVFtdLCBmdW5jdGlvbkFyZzogSUFzeW5jRnVuY3Rpb248VD4pID0+IHtcbiAgY29uc3QgcHJvbWlzZUFycmF5OiBQcm9taXNlPGFueT5bXSA9IFtdO1xuICBjb25zdCByZXN1bHRBcnJheSA9IFtdO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXRBcmcpIHtcbiAgICBjb25zdCBwcm9taXNlOiBQcm9taXNlPGFueT4gPSBmdW5jdGlvbkFyZyhpdGVtKTtcbiAgICBwcm9taXNlQXJyYXkucHVzaChwcm9taXNlKTtcbiAgICBwcm9taXNlLnRoZW4oKHgpID0+IHtcbiAgICAgIHJlc3VsdEFycmF5LnB1c2goeCk7XG4gICAgfSk7XG4gIH1cbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycmF5KTtcbiAgcmV0dXJuIHJlc3VsdEFycmF5O1xufTtcblxuZXhwb3J0IGNvbnN0IHRpbWVvdXRXcmFwID0gYXN5bmMgPFQgPSBhbnk+KFxuICBwcm9taXNlQXJnOiBQcm9taXNlPFQ+LFxuICB0aW1lb3V0SW5Nc0FyZzogbnVtYmVyLFxuICByZWplY3RBcmcgPSB0cnVlXG4pID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChyZWplY3RBcmcpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigndGltZW91dCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dEluTXNBcmcpO1xuICAgIHByb21pc2VBcmcudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB0aW1lb3V0QW5kQ29udGludWUgPSBhc3luYyA8VCA9IGFueT4oXG4gIHByb21pc2VBcmc6IFByb21pc2U8VD4sXG4gIHRpbWVvdXRJbk1zQXJnID0gNjAwMDBcbikgPT4ge1xuICByZXR1cm4gdGltZW91dFdyYXAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcsIGZhbHNlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaXJzdFRydWVPckZhbHNlID0gYXN5bmMgKHByb21pc2VzQXJnOiBQcm9taXNlPGJvb2xlYW4+W10pID0+IHtcbiAgY29uc3QgZG9uZSA9IGRlZmVyPGJvb2xlYW4+KCk7XG4gIGZvciAoY29uc3QgcHJvbWlzZUFyZyBvZiBwcm9taXNlc0FyZykge1xuICAgIHByb21pc2VBcmcudGhlbigocmVzdWx0QXJnKSA9PiB7XG4gICAgICBpZiAocmVzdWx0QXJnID09PSB0cnVlKSB7XG4gICAgICAgIGRvbmUucmVzb2x2ZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBQcm9taXNlLmFsbChwcm9taXNlc0FyZykudGhlbigoKSA9PiB7XG4gICAgZG9uZS5yZXNvbHZlKGZhbHNlKTtcbiAgfSk7XG4gIHJldHVybiBkb25lLnByb21pc2U7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgTm9kZS5qcy1zdHlsZSBjYWxsYmFjay1iYXNlZCBmdW5jdGlvbiBpbnRvIGEgUHJvbWlzZS5cbiAqIEBwYXJhbSBmbiBUaGUgZnVuY3Rpb24gdGhhdCBleHBlY3RzIGEgY2FsbGJhY2suXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIG9yIHJlamVjdHMgd2l0aCBhbiBlcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IGZyb21DYWxsYmFjayA9IDxUPihcbiAgZm46IChjYWxsYmFjazogKGVycjogTm9kZUpTLkVycm5vRXhjZXB0aW9uIHwgbnVsbCwgcmVzdWx0PzogVCkgPT4gdm9pZCkgPT4gdm9pZFxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZm4oKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpOyAvLyBSZWplY3QgdGhlIHByb21pc2Ugd2l0aCB0aGUgZXJyb3JcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUocmVzdWx0IGFzIFQpOyAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIHJlc3VsdFxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG4iLCAiaW1wb3J0ICogYXMgc21hcnRwcm9taXNlIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSc7XG5cbmV4cG9ydCB7IHNtYXJ0cHJvbWlzZSB9O1xuIiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG52YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcbiAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIGFyID0gW107XG4gICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICByZXR1cm4gYXI7XG4gIH07XG4gIHJldHVybiBvd25LZXlzKG8pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBvd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICB2YXIgciwgcyA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xuICAgICAgICBpZiAoci5kaXNwb3NlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xuICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzIHw9IDE7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uKHBhdGgsIHByZXNlcnZlSnN4KSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcLlxcLj9cXC8vLnRlc3QocGF0aCkpIHtcbiAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLih0c3gpJHwoKD86XFwuZCk/KSgoPzpcXC5bXi4vXSs/KT8pXFwuKFtjbV0/KXRzJC9pLCBmdW5jdGlvbiAobSwgdHN4LCBkLCBleHQsIGNtKSB7XG4gICAgICAgICAgcmV0dXJuIHRzeCA/IHByZXNlcnZlSnN4ID8gXCIuanN4XCIgOiBcIi5qc1wiIDogZCAmJiAoIWV4dCB8fCAhY20pID8gbSA6IChkICsgZXh0ICsgXCIuXCIgKyBjbS50b0xvd2VyQ2FzZSgpICsgXCJqc1wiKTtcbiAgICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZXh0ZW5kcyxcbiAgX19hc3NpZ24sXG4gIF9fcmVzdCxcbiAgX19kZWNvcmF0ZSxcbiAgX19wYXJhbSxcbiAgX19lc0RlY29yYXRlLFxuICBfX3J1bkluaXRpYWxpemVycyxcbiAgX19wcm9wS2V5LFxuICBfX3NldEZ1bmN0aW9uTmFtZSxcbiAgX19tZXRhZGF0YSxcbiAgX19hd2FpdGVyLFxuICBfX2dlbmVyYXRvcixcbiAgX19jcmVhdGVCaW5kaW5nLFxuICBfX2V4cG9ydFN0YXIsXG4gIF9fdmFsdWVzLFxuICBfX3JlYWQsXG4gIF9fc3ByZWFkLFxuICBfX3NwcmVhZEFycmF5cyxcbiAgX19zcHJlYWRBcnJheSxcbiAgX19hd2FpdCxcbiAgX19hc3luY0dlbmVyYXRvcixcbiAgX19hc3luY0RlbGVnYXRvcixcbiAgX19hc3luY1ZhbHVlcyxcbiAgX19tYWtlVGVtcGxhdGVPYmplY3QsXG4gIF9faW1wb3J0U3RhcixcbiAgX19pbXBvcnREZWZhdWx0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXG4gIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxuICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXG4gIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uLFxufTtcbiIsICIvKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgZnVuY3Rpb24uXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyAoLi4uYXJnczogYW55W10pID0+IGFueSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG4iLCAiLyoqXG4gKiBVc2VkIHRvIGNyZWF0ZSBFcnJvciBzdWJjbGFzc2VzIHVudGlsIHRoZSBjb21tdW5pdHkgbW92ZXMgYXdheSBmcm9tIEVTNS5cbiAqXG4gKiBUaGlzIGlzIGJlY2F1c2UgY29tcGlsaW5nIGZyb20gVHlwZVNjcmlwdCBkb3duIHRvIEVTNSBoYXMgaXNzdWVzIHdpdGggc3ViY2xhc3NpbmcgRXJyb3JzXG4gKiBhcyB3ZWxsIGFzIG90aGVyIGJ1aWx0LWluIHR5cGVzOiBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzEyMTIzXG4gKlxuICogQHBhcmFtIGNyZWF0ZUltcGwgQSBmYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYWN0dWFsIGNvbnN0cnVjdG9yIGltcGxlbWVudGF0aW9uLiBUaGUgcmV0dXJuZWRcbiAqIGZ1bmN0aW9uIHNob3VsZCBiZSBhIG5hbWVkIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYF9zdXBlcmAgaW50ZXJuYWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3M8VD4oY3JlYXRlSW1wbDogKF9zdXBlcjogYW55KSA9PiBhbnkpOiBUIHtcbiAgY29uc3QgX3N1cGVyID0gKGluc3RhbmNlOiBhbnkpID0+IHtcbiAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9O1xuXG4gIGNvbnN0IGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICByZXR1cm4gY3RvckZ1bmM7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXJyb3JDbGFzcyB9IGZyb20gJy4vY3JlYXRlRXJyb3JDbGFzcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5zdWJzY3JpcHRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgZXJyb3JzOiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbnN1YnNjcmlwdGlvbkVycm9yQ3RvciB7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIERvIG5vdCBjb25zdHJ1Y3QgZXJyb3IgaW5zdGFuY2VzLlxuICAgKiBDYW5ub3QgYmUgdGFnZ2VkIGFzIGludGVybmFsOiBodHRwczovL2dpdGh1Yi5jb20vUmVhY3RpdmVYL3J4anMvaXNzdWVzLzYyNjlcbiAgICovXG4gIG5ldyAoZXJyb3JzOiBhbnlbXSk6IFVuc3Vic2NyaXB0aW9uRXJyb3I7XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gb25lIG9yIG1vcmUgZXJyb3JzIGhhdmUgb2NjdXJyZWQgZHVyaW5nIHRoZVxuICogYHVuc3Vic2NyaWJlYCBvZiBhIHtAbGluayBTdWJzY3JpcHRpb259LlxuICovXG5leHBvcnQgY29uc3QgVW5zdWJzY3JpcHRpb25FcnJvcjogVW5zdWJzY3JpcHRpb25FcnJvckN0b3IgPSBjcmVhdGVFcnJvckNsYXNzKFxuICAoX3N1cGVyKSA9PlxuICAgIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKHRoaXM6IGFueSwgZXJyb3JzOiAoRXJyb3IgfCBzdHJpbmcpW10pIHtcbiAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICA/IGAke2Vycm9ycy5sZW5ndGh9IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2Vycm9ycy5tYXAoKGVyciwgaSkgPT4gYCR7aSArIDF9KSAke2Vyci50b1N0cmluZygpfWApLmpvaW4oJ1xcbiAgJyl9YFxuICAgICAgICA6ICcnO1xuICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuKTtcbiIsICIvKipcbiAqIFJlbW92ZXMgYW4gaXRlbSBmcm9tIGFuIGFycmF5LCBtdXRhdGluZyBpdC5cbiAqIEBwYXJhbSBhcnIgVGhlIGFycmF5IHRvIHJlbW92ZSB0aGUgaXRlbSBmcm9tXG4gKiBAcGFyYW0gaXRlbSBUaGUgaXRlbSB0byByZW1vdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFyclJlbW92ZTxUPihhcnI6IFRbXSB8IHVuZGVmaW5lZCB8IG51bGwsIGl0ZW06IFQpIHtcbiAgaWYgKGFycikge1xuICAgIGNvbnN0IGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBVbnN1YnNjcmlwdGlvbkVycm9yIH0gZnJvbSAnLi91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uTGlrZSwgVGVhcmRvd25Mb2dpYywgVW5zdWJzY3JpYmFibGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGFyclJlbW92ZSB9IGZyb20gJy4vdXRpbC9hcnJSZW1vdmUnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBkaXNwb3NhYmxlIHJlc291cmNlLCBzdWNoIGFzIHRoZSBleGVjdXRpb24gb2YgYW4gT2JzZXJ2YWJsZS4gQVxuICogU3Vic2NyaXB0aW9uIGhhcyBvbmUgaW1wb3J0YW50IG1ldGhvZCwgYHVuc3Vic2NyaWJlYCwgdGhhdCB0YWtlcyBubyBhcmd1bWVudFxuICogYW5kIGp1c3QgZGlzcG9zZXMgdGhlIHJlc291cmNlIGhlbGQgYnkgdGhlIHN1YnNjcmlwdGlvbi5cbiAqXG4gKiBBZGRpdGlvbmFsbHksIHN1YnNjcmlwdGlvbnMgbWF5IGJlIGdyb3VwZWQgdG9nZXRoZXIgdGhyb3VnaCB0aGUgYGFkZCgpYFxuICogbWV0aG9kLCB3aGljaCB3aWxsIGF0dGFjaCBhIGNoaWxkIFN1YnNjcmlwdGlvbiB0byB0aGUgY3VycmVudCBTdWJzY3JpcHRpb24uXG4gKiBXaGVuIGEgU3Vic2NyaXB0aW9uIGlzIHVuc3Vic2NyaWJlZCwgYWxsIGl0cyBjaGlsZHJlbiAoYW5kIGl0cyBncmFuZGNoaWxkcmVuKVxuICogd2lsbCBiZSB1bnN1YnNjcmliZWQgYXMgd2VsbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvbiBpbXBsZW1lbnRzIFN1YnNjcmlwdGlvbkxpa2Uge1xuICBwdWJsaWMgc3RhdGljIEVNUFRZID0gKCgpID0+IHtcbiAgICBjb25zdCBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgIHJldHVybiBlbXB0eTtcbiAgfSkoKTtcblxuICAvKipcbiAgICogQSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhpcyBTdWJzY3JpcHRpb24gaGFzIGFscmVhZHkgYmVlbiB1bnN1YnNjcmliZWQuXG4gICAqL1xuICBwdWJsaWMgY2xvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfcGFyZW50YWdlOiBTdWJzY3JpcHRpb25bXSB8IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiByZWdpc3RlcmVkIGZpbmFsaXplcnMgdG8gZXhlY3V0ZSB1cG9uIHVuc3Vic2NyaXB0aW9uLiBBZGRpbmcgYW5kIHJlbW92aW5nIGZyb20gdGhpc1xuICAgKiBsaXN0IG9jY3VycyBpbiB0aGUge0BsaW5rICNhZGR9IGFuZCB7QGxpbmsgI3JlbW92ZX0gbWV0aG9kcy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbmFsaXplcnM6IEV4Y2x1ZGU8VGVhcmRvd25Mb2dpYywgdm9pZD5bXSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gaW5pdGlhbFRlYXJkb3duIEEgZnVuY3Rpb24gZXhlY3V0ZWQgZmlyc3QgYXMgcGFydCBvZiB0aGUgZmluYWxpemF0aW9uXG4gICAqIHByb2Nlc3MgdGhhdCBpcyBraWNrZWQgb2ZmIHdoZW4ge0BsaW5rICN1bnN1YnNjcmliZX0gaXMgY2FsbGVkLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbml0aWFsVGVhcmRvd24/OiAoKSA9PiB2b2lkKSB7fVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgcmVzb3VyY2VzIGhlbGQgYnkgdGhlIHN1YnNjcmlwdGlvbi4gTWF5LCBmb3IgaW5zdGFuY2UsIGNhbmNlbFxuICAgKiBhbiBvbmdvaW5nIE9ic2VydmFibGUgZXhlY3V0aW9uIG9yIGNhbmNlbCBhbnkgb3RoZXIgdHlwZSBvZiB3b3JrIHRoYXRcbiAgICogc3RhcnRlZCB3aGVuIHRoZSBTdWJzY3JpcHRpb24gd2FzIGNyZWF0ZWQuXG4gICAqL1xuICB1bnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICBsZXQgZXJyb3JzOiBhbnlbXSB8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgICAgLy8gUmVtb3ZlIHRoaXMgZnJvbSBpdCdzIHBhcmVudHMuXG4gICAgICBjb25zdCB7IF9wYXJlbnRhZ2UgfSA9IHRoaXM7XG4gICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgcGFyZW50IG9mIF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgIHBhcmVudC5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgaW5pdGlhbFRlYXJkb3duOiBpbml0aWFsRmluYWxpemVyIH0gPSB0aGlzO1xuICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgX2ZpbmFsaXplcnMgfSA9IHRoaXM7XG4gICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZmluYWxpemVyIG9mIF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyA/PyBbXTtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgIGVycm9ycyA9IFsuLi5lcnJvcnMsIC4uLmVyci5lcnJvcnNdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgZmluYWxpemVyIHRvIHRoaXMgc3Vic2NyaXB0aW9uLCBzbyB0aGF0IGZpbmFsaXphdGlvbiB3aWxsIGJlIHVuc3Vic2NyaWJlZC9jYWxsZWRcbiAgICogd2hlbiB0aGlzIHN1YnNjcmlwdGlvbiBpcyB1bnN1YnNjcmliZWQuIElmIHRoaXMgc3Vic2NyaXB0aW9uIGlzIGFscmVhZHkge0BsaW5rICNjbG9zZWR9LFxuICAgKiBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gdW5zdWJzY3JpYmVkLCB0aGVuIHdoYXRldmVyIGZpbmFsaXplciBpcyBwYXNzZWQgdG8gaXRcbiAgICogd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGV4ZWN1dGVkICh1bmxlc3MgdGhlIGZpbmFsaXplciBpdHNlbGYgaXMgYWxzbyBhIGNsb3NlZCBzdWJzY3JpcHRpb24pLlxuICAgKlxuICAgKiBDbG9zZWQgU3Vic2NyaXB0aW9ucyBjYW5ub3QgYmUgYWRkZWQgYXMgZmluYWxpemVycyB0byBhbnkgc3Vic2NyaXB0aW9uLiBBZGRpbmcgYSBjbG9zZWRcbiAgICogc3Vic2NyaXB0aW9uIHRvIGEgYW55IHN1YnNjcmlwdGlvbiB3aWxsIHJlc3VsdCBpbiBubyBvcGVyYXRpb24uIChBIG5vb3ApLlxuICAgKlxuICAgKiBBZGRpbmcgYSBzdWJzY3JpcHRpb24gdG8gaXRzZWxmLCBvciBhZGRpbmcgYG51bGxgIG9yIGB1bmRlZmluZWRgIHdpbGwgbm90IHBlcmZvcm0gYW55XG4gICAqIG9wZXJhdGlvbiBhdCBhbGwuIChBIG5vb3ApLlxuICAgKlxuICAgKiBgU3Vic2NyaXB0aW9uYCBpbnN0YW5jZXMgdGhhdCBhcmUgYWRkZWQgdG8gdGhpcyBpbnN0YW5jZSB3aWxsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZW1zZWx2ZXNcbiAgICogaWYgdGhleSBhcmUgdW5zdWJzY3JpYmVkLiBGdW5jdGlvbnMgYW5kIHtAbGluayBVbnN1YnNjcmliYWJsZX0gb2JqZWN0cyB0aGF0IHlvdSB3aXNoIHRvIHJlbW92ZVxuICAgKiB3aWxsIG5lZWQgdG8gYmUgcmVtb3ZlZCBtYW51YWxseSB3aXRoIHtAbGluayAjcmVtb3ZlfVxuICAgKlxuICAgKiBAcGFyYW0gdGVhcmRvd24gVGhlIGZpbmFsaXphdGlvbiBsb2dpYyB0byBhZGQgdG8gdGhpcyBzdWJzY3JpcHRpb24uXG4gICAqL1xuICBhZGQodGVhcmRvd246IFRlYXJkb3duTG9naWMpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGFkZCB0aGUgZmluYWxpemVyIGlmIGl0J3Mgbm90IHVuZGVmaW5lZFxuICAgIC8vIGFuZCBkb24ndCBhZGQgYSBzdWJzY3JpcHRpb24gdG8gaXRzZWxmLlxuICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgIC8vIElmIHRoaXMgc3Vic2NyaXB0aW9uIGlzIGFscmVhZHkgY2xvc2VkLFxuICAgICAgICAvLyBleGVjdXRlIHdoYXRldmVyIGZpbmFsaXplciBpcyBoYW5kZWQgdG8gaXQgYXV0b21hdGljYWxseS5cbiAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAvLyBXZSBkb24ndCBhZGQgY2xvc2VkIHN1YnNjcmlwdGlvbnMsIGFuZCB3ZSBkb24ndCBhZGQgdGhlIHNhbWUgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgLy8gdHdpY2UuIFN1YnNjcmlwdGlvbiB1bnN1YnNjcmliZSBpcyBpZGVtcG90ZW50LlxuICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycyA/PyBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0byBzZWUgaWYgYSB0aGlzIHN1YnNjcmlwdGlvbiBhbHJlYWR5IGhhcyBhIHBhcnRpY3VsYXIgcGFyZW50LlxuICAgKiBUaGlzIHdpbGwgc2lnbmFsIHRoYXQgdGhpcyBzdWJzY3JpcHRpb24gaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgcGFyZW50IGluIHF1ZXN0aW9uLlxuICAgKiBAcGFyYW0gcGFyZW50IHRoZSBwYXJlbnQgdG8gY2hlY2sgZm9yXG4gICAqL1xuICBwcml2YXRlIF9oYXNQYXJlbnQocGFyZW50OiBTdWJzY3JpcHRpb24pIHtcbiAgICBjb25zdCB7IF9wYXJlbnRhZ2UgfSA9IHRoaXM7XG4gICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBwYXJlbnQgdG8gdGhpcyBzdWJzY3JpcHRpb24gc28gaXQgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgcGFyZW50IGlmIGl0XG4gICAqIHVuc3Vic2NyaWJlcyBvbiBpdCdzIG93bi5cbiAgICpcbiAgICogTk9URTogVEhJUyBBU1NVTUVTIFRIQVQge0BsaW5rIF9oYXNQYXJlbnR9IEhBUyBBTFJFQURZIEJFRU4gQ0hFQ0tFRC5cbiAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHN1YnNjcmlwdGlvbiB0byBhZGRcbiAgICovXG4gIHByaXZhdGUgX2FkZFBhcmVudChwYXJlbnQ6IFN1YnNjcmlwdGlvbikge1xuICAgIGNvbnN0IHsgX3BhcmVudGFnZSB9ID0gdGhpcztcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgb24gYSBjaGlsZCB3aGVuIGl0IGlzIHJlbW92ZWQgdmlhIHtAbGluayAjcmVtb3ZlfS5cbiAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHRvIHJlbW92ZVxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlUGFyZW50KHBhcmVudDogU3Vic2NyaXB0aW9uKSB7XG4gICAgY29uc3QgeyBfcGFyZW50YWdlIH0gPSB0aGlzO1xuICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGZpbmFsaXplciBmcm9tIHRoaXMgc3Vic2NyaXB0aW9uIHRoYXQgd2FzIHByZXZpb3VzbHkgYWRkZWQgd2l0aCB0aGUge0BsaW5rICNhZGR9IG1ldGhvZC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGBTdWJzY3JpcHRpb25gIGluc3RhbmNlcywgd2hlbiB1bnN1YnNjcmliZWQsIHdpbGwgYXV0b21hdGljYWxseSByZW1vdmUgdGhlbXNlbHZlc1xuICAgKiBmcm9tIGV2ZXJ5IG90aGVyIGBTdWJzY3JpcHRpb25gIHRoZXkgaGF2ZSBiZWVuIGFkZGVkIHRvLiBUaGlzIG1lYW5zIHRoYXQgdXNpbmcgdGhlIGByZW1vdmVgIG1ldGhvZFxuICAgKiBpcyBub3QgYSBjb21tb24gdGhpbmcgYW5kIHNob3VsZCBiZSB1c2VkIHRob3VnaHRmdWxseS5cbiAgICpcbiAgICogSWYgeW91IGFkZCB0aGUgc2FtZSBmaW5hbGl6ZXIgaW5zdGFuY2Ugb2YgYSBmdW5jdGlvbiBvciBhbiB1bnN1YnNjcmliYWJsZSBvYmplY3QgdG8gYSBgU3Vic2NyaXB0aW9uYCBpbnN0YW5jZVxuICAgKiBtb3JlIHRoYW4gb25jZSwgeW91IHdpbGwgbmVlZCB0byBjYWxsIGByZW1vdmVgIHRoZSBzYW1lIG51bWJlciBvZiB0aW1lcyB0byByZW1vdmUgYWxsIGluc3RhbmNlcy5cbiAgICpcbiAgICogQWxsIGZpbmFsaXplciBpbnN0YW5jZXMgYXJlIHJlbW92ZWQgdG8gZnJlZSB1cCBtZW1vcnkgdXBvbiB1bnN1YnNjcmlwdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRlYXJkb3duIFRoZSBmaW5hbGl6ZXIgdG8gcmVtb3ZlIGZyb20gdGhpcyBzdWJzY3JpcHRpb25cbiAgICovXG4gIHJlbW92ZSh0ZWFyZG93bjogRXhjbHVkZTxUZWFyZG93bkxvZ2ljLCB2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IHsgX2ZpbmFsaXplcnMgfSA9IHRoaXM7XG4gICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG5cbiAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZTogYW55KTogdmFsdWUgaXMgU3Vic2NyaXB0aW9uIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKVxuICApO1xufVxuXG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcjogVW5zdWJzY3JpYmFibGUgfCAoKCkgPT4gdm9pZCkpIHtcbiAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgIGZpbmFsaXplcigpO1xuICB9IGVsc2Uge1xuICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlTm90aWZpY2F0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIHtAbGluayBHbG9iYWxDb25maWd9IG9iamVjdCBmb3IgUnhKUy4gSXQgaXMgdXNlZCB0byBjb25maWd1cmUgdGhpbmdzXG4gKiBsaWtlIGhvdyB0byByZWFjdCBvbiB1bmhhbmRsZWQgZXJyb3JzLlxuICovXG5leHBvcnQgY29uc3QgY29uZmlnOiBHbG9iYWxDb25maWcgPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiBmYWxzZSxcbn07XG5cbi8qKlxuICogVGhlIGdsb2JhbCBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgUnhKUywgdXNlZCB0byBjb25maWd1cmUgdGhpbmdzXG4gKiBsaWtlIGhvdyB0byByZWFjdCBvbiB1bmhhbmRsZWQgZXJyb3JzLiBBY2Nlc3NpYmxlIHZpYSB7QGxpbmsgY29uZmlnfVxuICogb2JqZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbENvbmZpZyB7XG4gIC8qKlxuICAgKiBBIHJlZ2lzdHJhdGlvbiBwb2ludCBmb3IgdW5oYW5kbGVkIGVycm9ycyBmcm9tIFJ4SlMuIFRoZXNlIGFyZSBlcnJvcnMgdGhhdFxuICAgKiBjYW5ub3Qgd2VyZSBub3QgaGFuZGxlZCBieSBjb25zdW1pbmcgY29kZSBpbiB0aGUgdXN1YWwgc3Vic2NyaXB0aW9uIHBhdGguIEZvclxuICAgKiBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0aGlzIGNvbmZpZ3VyZWQsIGFuZCB5b3Ugc3Vic2NyaWJlIHRvIGFuIG9ic2VydmFibGUgd2l0aG91dFxuICAgKiBwcm92aWRpbmcgYW4gZXJyb3IgaGFuZGxlciwgZXJyb3JzIGZyb20gdGhhdCBzdWJzY3JpcHRpb24gd2lsbCBlbmQgdXAgaGVyZS4gVGhpc1xuICAgKiB3aWxsIF9hbHdheXNfIGJlIGNhbGxlZCBhc3luY2hyb25vdXNseSBvbiBhbm90aGVyIGpvYiBpbiB0aGUgcnVudGltZS4gVGhpcyBpcyBiZWNhdXNlXG4gICAqIHdlIGRvIG5vdCB3YW50IGVycm9ycyB0aHJvd24gaW4gdGhpcyB1c2VyLWNvbmZpZ3VyZWQgaGFuZGxlciB0byBpbnRlcmZlcmUgd2l0aCB0aGVcbiAgICogYmVoYXZpb3Igb2YgdGhlIGxpYnJhcnkuXG4gICAqL1xuICBvblVuaGFuZGxlZEVycm9yOiAoKGVycjogYW55KSA9PiB2b2lkKSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgcmVnaXN0cmF0aW9uIHBvaW50IGZvciBub3RpZmljYXRpb25zIHRoYXQgY2Fubm90IGJlIHNlbnQgdG8gc3Vic2NyaWJlcnMgYmVjYXVzZSB0aGV5XG4gICAqIGhhdmUgY29tcGxldGVkLCBlcnJvcmVkIG9yIGhhdmUgYmVlbiBleHBsaWNpdGx5IHVuc3Vic2NyaWJlZC4gQnkgZGVmYXVsdCwgbmV4dCwgY29tcGxldGVcbiAgICogYW5kIGVycm9yIG5vdGlmaWNhdGlvbnMgc2VudCB0byBzdG9wcGVkIHN1YnNjcmliZXJzIGFyZSBub29wcy4gSG93ZXZlciwgc29tZXRpbWVzIGNhbGxlcnNcbiAgICogbWlnaHQgd2FudCBhIGRpZmZlcmVudCBiZWhhdmlvci4gRm9yIGV4YW1wbGUsIHdpdGggc291cmNlcyB0aGF0IGF0dGVtcHQgdG8gcmVwb3J0IGVycm9yc1xuICAgKiB0byBzdG9wcGVkIHN1YnNjcmliZXJzLCBhIGNhbGxlciBjYW4gY29uZmlndXJlIFJ4SlMgdG8gdGhyb3cgYW4gdW5oYW5kbGVkIGVycm9yIGluc3RlYWQuXG4gICAqIFRoaXMgd2lsbCBfYWx3YXlzXyBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHkgb24gYW5vdGhlciBqb2IgaW4gdGhlIHJ1bnRpbWUuIFRoaXMgaXMgYmVjYXVzZVxuICAgKiB3ZSBkbyBub3Qgd2FudCBlcnJvcnMgdGhyb3duIGluIHRoaXMgdXNlci1jb25maWd1cmVkIGhhbmRsZXIgdG8gaW50ZXJmZXJlIHdpdGggdGhlXG4gICAqIGJlaGF2aW9yIG9mIHRoZSBsaWJyYXJ5LlxuICAgKi9cbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiAoKG5vdGlmaWNhdGlvbjogT2JzZXJ2YWJsZU5vdGlmaWNhdGlvbjxhbnk+LCBzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPGFueT4pID0+IHZvaWQpIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHByb21pc2UgY29uc3RydWN0b3IgdXNlZCBieSBkZWZhdWx0IGZvciB7QGxpbmsgT2JzZXJ2YWJsZSN0b1Byb21pc2UgdG9Qcm9taXNlfSBhbmQge0BsaW5rIE9ic2VydmFibGUjZm9yRWFjaCBmb3JFYWNofVxuICAgKiBtZXRob2RzLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBBcyBvZiB2ZXJzaW9uIDgsIFJ4SlMgd2lsbCBubyBsb25nZXIgc3VwcG9ydCB0aGlzIHNvcnQgb2YgaW5qZWN0aW9uIG9mIGFcbiAgICogUHJvbWlzZSBjb25zdHJ1Y3Rvci4gSWYgeW91IG5lZWQgYSBQcm9taXNlIGltcGxlbWVudGF0aW9uIG90aGVyIHRoYW4gbmF0aXZlIHByb21pc2VzLFxuICAgKiBwbGVhc2UgcG9seWZpbGwvcGF0Y2ggUHJvbWlzZSBhcyB5b3Ugc2VlIGFwcHJvcHJpYXRlLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gICAqL1xuICBQcm9taXNlPzogUHJvbWlzZUNvbnN0cnVjdG9yTGlrZTtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgdHVybnMgb24gc3luY2hyb25vdXMgZXJyb3IgcmV0aHJvd2luZywgd2hpY2ggaXMgYSBkZXByZWNhdGVkIGJlaGF2aW9yXG4gICAqIGluIHY2IGFuZCBoaWdoZXIuIFRoaXMgYmVoYXZpb3IgZW5hYmxlcyBiYWQgcGF0dGVybnMgbGlrZSB3cmFwcGluZyBhIHN1YnNjcmliZVxuICAgKiBjYWxsIGluIGEgdHJ5L2NhdGNoIGJsb2NrLiBJdCBhbHNvIGVuYWJsZXMgcHJvZHVjZXIgaW50ZXJmZXJlbmNlLCBhIG5hc3R5IGJ1Z1xuICAgKiB3aGVyZSBhIG11bHRpY2FzdCBjYW4gYmUgYnJva2VuIGZvciBhbGwgb2JzZXJ2ZXJzIGJ5IGEgZG93bnN0cmVhbSBjb25zdW1lciB3aXRoXG4gICAqIGFuIHVuaGFuZGxlZCBlcnJvci4gRE8gTk9UIFVTRSBUSElTIEZMQUcgVU5MRVNTIElUJ1MgTkVFREVEIFRPIEJVWSBUSU1FXG4gICAqIEZPUiBNSUdSQVRJT04gUkVBU09OUy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgQXMgb2YgdmVyc2lvbiA4LCBSeEpTIHdpbGwgbm8gbG9uZ2VyIHN1cHBvcnQgc3luY2hyb25vdXMgdGhyb3dpbmdcbiAgICogb2YgdW5oYW5kbGVkIGVycm9ycy4gQWxsIGVycm9ycyB3aWxsIGJlIHRocm93biBvbiBhIHNlcGFyYXRlIGNhbGwgc3RhY2sgdG8gcHJldmVudCBiYWRcbiAgICogYmVoYXZpb3JzIGRlc2NyaWJlZCBhYm92ZS4gV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICAgKi9cbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgZW5hYmxlcyBhbiBhcy1vZi15ZXQgdW5kb2N1bWVudGVkIGZlYXR1cmUgZnJvbSB2NTogVGhlIGFiaWxpdHkgdG8gYWNjZXNzXG4gICAqIGB1bnN1YnNjcmliZSgpYCB2aWEgYHRoaXNgIGNvbnRleHQgaW4gYG5leHRgIGZ1bmN0aW9ucyBjcmVhdGVkIGluIG9ic2VydmVycyBwYXNzZWRcbiAgICogdG8gYHN1YnNjcmliZWAuXG4gICAqXG4gICAqIFRoaXMgaXMgYmVpbmcgcmVtb3ZlZCBiZWNhdXNlIHRoZSBwZXJmb3JtYW5jZSB3YXMgc2V2ZXJlbHkgcHJvYmxlbWF0aWMsIGFuZCBpdCBjb3VsZCBhbHNvIGNhdXNlXG4gICAqIGlzc3VlcyB3aGVuIHR5cGVzIG90aGVyIHRoYW4gUE9KT3MgYXJlIHBhc3NlZCB0byBzdWJzY3JpYmUgYXMgc3Vic2NyaWJlcnMsIGFzIHRoZXkgd2lsbCBsaWtlbHkgaGF2ZVxuICAgKiB0aGVpciBgdGhpc2AgY29udGV4dCBvdmVyd3JpdHRlbi5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgQXMgb2YgdmVyc2lvbiA4LCBSeEpTIHdpbGwgbm8gbG9uZ2VyIHN1cHBvcnQgYWx0ZXJpbmcgdGhlXG4gICAqIGNvbnRleHQgb2YgbmV4dCBmdW5jdGlvbnMgcHJvdmlkZWQgYXMgcGFydCBvZiBhbiBvYnNlcnZlciB0byBTdWJzY3JpYmUuIEluc3RlYWQsXG4gICAqIHlvdSB3aWxsIGhhdmUgYWNjZXNzIHRvIGEgc3Vic2NyaXB0aW9uIG9yIGEgc2lnbmFsIG9yIHRva2VuIHRoYXQgd2lsbCBhbGxvdyB5b3UgdG8gZG8gdGhpbmdzIGxpa2VcbiAgICogdW5zdWJzY3JpYmUgYW5kIHRlc3QgY2xvc2VkIHN0YXR1cy4gV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICAgKi9cbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiBib29sZWFuO1xufVxuIiwgImltcG9ydCB0eXBlIHsgVGltZXJIYW5kbGUgfSBmcm9tICcuL3RpbWVySGFuZGxlJztcbnR5cGUgU2V0VGltZW91dEZ1bmN0aW9uID0gKGhhbmRsZXI6ICgpID0+IHZvaWQsIHRpbWVvdXQ/OiBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKSA9PiBUaW1lckhhbmRsZTtcbnR5cGUgQ2xlYXJUaW1lb3V0RnVuY3Rpb24gPSAoaGFuZGxlOiBUaW1lckhhbmRsZSkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFRpbWVvdXRQcm92aWRlciB7XG4gIHNldFRpbWVvdXQ6IFNldFRpbWVvdXRGdW5jdGlvbjtcbiAgY2xlYXJUaW1lb3V0OiBDbGVhclRpbWVvdXRGdW5jdGlvbjtcbiAgZGVsZWdhdGU6XG4gICAgfCB7XG4gICAgICAgIHNldFRpbWVvdXQ6IFNldFRpbWVvdXRGdW5jdGlvbjtcbiAgICAgICAgY2xlYXJUaW1lb3V0OiBDbGVhclRpbWVvdXRGdW5jdGlvbjtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNvbnN0IHRpbWVvdXRQcm92aWRlcjogVGltZW91dFByb3ZpZGVyID0ge1xuICAvLyBXaGVuIGFjY2Vzc2luZyB0aGUgZGVsZWdhdGUsIHVzZSB0aGUgdmFyaWFibGUgcmF0aGVyIHRoYW4gYHRoaXNgIHNvIHRoYXRcbiAgLy8gdGhlIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYmVpbmcgYm91bmQgdG8gdGhlIHByb3ZpZGVyLlxuICBzZXRUaW1lb3V0KGhhbmRsZXI6ICgpID0+IHZvaWQsIHRpbWVvdXQ/OiBudW1iZXIsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCB7IGRlbGVnYXRlIH0gPSB0aW1lb3V0UHJvdmlkZXI7XG4gICAgaWYgKGRlbGVnYXRlPy5zZXRUaW1lb3V0KSB7XG4gICAgICByZXR1cm4gZGVsZWdhdGUuc2V0VGltZW91dChoYW5kbGVyLCB0aW1lb3V0LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCwgLi4uYXJncyk7XG4gIH0sXG4gIGNsZWFyVGltZW91dChoYW5kbGUpIHtcbiAgICBjb25zdCB7IGRlbGVnYXRlIH0gPSB0aW1lb3V0UHJvdmlkZXI7XG4gICAgcmV0dXJuIChkZWxlZ2F0ZT8uY2xlYXJUaW1lb3V0IHx8IGNsZWFyVGltZW91dCkoaGFuZGxlIGFzIGFueSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuIiwgImltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyB0aW1lb3V0UHJvdmlkZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyJztcblxuLyoqXG4gKiBIYW5kbGVzIGFuIGVycm9yIG9uIGFub3RoZXIgam9iIGVpdGhlciB3aXRoIHRoZSB1c2VyLWNvbmZpZ3VyZWQge0BsaW5rIG9uVW5oYW5kbGVkRXJyb3J9LFxuICogb3IgYnkgdGhyb3dpbmcgaXQgb24gdGhhdCBuZXcgam9iIHNvIGl0IGNhbiBiZSBwaWNrZWQgdXAgYnkgYHdpbmRvdy5vbmVycm9yYCwgYHByb2Nlc3Mub24oJ2Vycm9yJylgLCBldGMuXG4gKlxuICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGlzIGFuIGVycm9yIHRoYXQgaXMgb3V0LW9mLWJhbmQgd2l0aCB0aGUgc3Vic2NyaXB0aW9uXG4gKiBvciB3aGVuIGFuIGVycm9yIGhpdHMgYSB0ZXJtaW5hbCBib3VuZGFyeSBvZiB0aGUgc3Vic2NyaXB0aW9uIGFuZCBubyBlcnJvciBoYW5kbGVyIHdhcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0gZXJyIHRoZSBlcnJvciB0byByZXBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycjogYW55KSB7XG4gIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCB7IG9uVW5oYW5kbGVkRXJyb3IgfSA9IGNvbmZpZztcbiAgICBpZiAob25VbmhhbmRsZWRFcnJvcikge1xuICAgICAgLy8gRXhlY3V0ZSB0aGUgdXNlci1jb25maWd1cmVkIGVycm9yIGhhbmRsZXIuXG4gICAgICBvblVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRocm93IHNvIGl0IGlzIHBpY2tlZCB1cCBieSB0aGUgcnVudGltZSdzIHVuY2F1Z2h0IGVycm9yIG1lY2hhbmlzbS5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH0pO1xufVxuIiwgIi8qIHRzbGludDpkaXNhYmxlOm5vLWVtcHR5ICovXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpIHsgfVxuIiwgImltcG9ydCB7IENvbXBsZXRlTm90aWZpY2F0aW9uLCBOZXh0Tm90aWZpY2F0aW9uLCBFcnJvck5vdGlmaWNhdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEEgY29tcGxldGlvbiBvYmplY3Qgb3B0aW1pemVkIGZvciBtZW1vcnkgdXNlIGFuZCBjcmVhdGVkIHRvIGJlIHRoZVxuICogc2FtZSBcInNoYXBlXCIgYXMgb3RoZXIgbm90aWZpY2F0aW9ucyBpbiB2OC5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gKCgpID0+IGNyZWF0ZU5vdGlmaWNhdGlvbignQycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSBhcyBDb21wbGV0ZU5vdGlmaWNhdGlvbikoKTtcblxuLyoqXG4gKiBJbnRlcm5hbCB1c2Ugb25seS4gQ3JlYXRlcyBhbiBvcHRpbWl6ZWQgZXJyb3Igbm90aWZpY2F0aW9uIHRoYXQgaXMgdGhlIHNhbWUgXCJzaGFwZVwiXG4gKiBhcyBvdGhlciBub3RpZmljYXRpb25zLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvck5vdGlmaWNhdGlvbihlcnJvcjogYW55KTogRXJyb3JOb3RpZmljYXRpb24ge1xuICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdFJywgdW5kZWZpbmVkLCBlcnJvcikgYXMgYW55O1xufVxuXG4vKipcbiAqIEludGVybmFsIHVzZSBvbmx5LiBDcmVhdGVzIGFuIG9wdGltaXplZCBuZXh0IG5vdGlmaWNhdGlvbiB0aGF0IGlzIHRoZSBzYW1lIFwic2hhcGVcIlxuICogYXMgb3RoZXIgbm90aWZpY2F0aW9ucy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dE5vdGlmaWNhdGlvbjxUPih2YWx1ZTogVCkge1xuICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdOJywgdmFsdWUsIHVuZGVmaW5lZCkgYXMgTmV4dE5vdGlmaWNhdGlvbjxUPjtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgYWxsIG5vdGlmaWNhdGlvbnMgY3JlYXRlZCBpbnRlcm5hbGx5IGhhdmUgdGhlIHNhbWUgXCJzaGFwZVwiIGluIHY4LlxuICpcbiAqIFRPRE86IFRoaXMgaXMgb25seSBleHBvcnRlZCB0byBzdXBwb3J0IGEgY3JhenkgbGVnYWN5IHRlc3QgaW4gYGdyb3VwQnlgLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOb3RpZmljYXRpb24oa2luZDogJ04nIHwgJ0UnIHwgJ0MnLCB2YWx1ZTogYW55LCBlcnJvcjogYW55KSB7XG4gIHJldHVybiB7XG4gICAga2luZCxcbiAgICB2YWx1ZSxcbiAgICBlcnJvcixcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBjb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuXG5sZXQgY29udGV4dDogeyBlcnJvclRocm93bjogYm9vbGVhbjsgZXJyb3I6IGFueSB9IHwgbnVsbCA9IG51bGw7XG5cbi8qKlxuICogSGFuZGxlcyBkZWFsaW5nIHdpdGggZXJyb3JzIGZvciBzdXBlci1ncm9zcyBtb2RlLiBDcmVhdGVzIGEgY29udGV4dCwgaW4gd2hpY2hcbiAqIGFueSBzeW5jaHJvbm91c2x5IHRocm93biBlcnJvcnMgd2lsbCBiZSBwYXNzZWQgdG8ge0BsaW5rIGNhcHR1cmVFcnJvcn0uIFdoaWNoXG4gKiB3aWxsIHJlY29yZCB0aGUgZXJyb3Igc3VjaCB0aGF0IGl0IHdpbGwgYmUgcmV0aHJvd24gYWZ0ZXIgdGhlIGNhbGwgYmFjayBpcyBjb21wbGV0ZS5cbiAqIFRPRE86IFJlbW92ZSBpbiB2OFxuICogQHBhcmFtIGNiIEFuIGltbWVkaWF0ZWx5IGV4ZWN1dGVkIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiOiAoKSA9PiB2b2lkKSB7XG4gIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykge1xuICAgIGNvbnN0IGlzUm9vdCA9ICFjb250ZXh0O1xuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIGNvbnRleHQgPSB7IGVycm9yVGhyb3duOiBmYWxzZSwgZXJyb3I6IG51bGwgfTtcbiAgICB9XG4gICAgY2IoKTtcbiAgICBpZiAoaXNSb290KSB7XG4gICAgICBjb25zdCB7IGVycm9yVGhyb3duLCBlcnJvciB9ID0gY29udGV4dCE7XG4gICAgICBjb250ZXh0ID0gbnVsbDtcbiAgICAgIGlmIChlcnJvclRocm93bikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBub24tZGVwcmVjYXRlZCBwYXRoIGZvciBldmVyeW9uZSB0aGF0XG4gICAgLy8gaXNuJ3QgY3JhenkgZW5vdWdoIHRvIHVzZSBzdXBlci1ncm9zcyBtb2RlICh1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKVxuICAgIGNiKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDYXB0dXJlcyBlcnJvcnMgb25seSBpbiBzdXBlci1ncm9zcyBtb2RlLlxuICogQHBhcmFtIGVyciB0aGUgZXJyb3IgdG8gY2FwdHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZUVycm9yKGVycjogYW55KSB7XG4gIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyAmJiBjb250ZXh0KSB7XG4gICAgY29udGV4dC5lcnJvclRocm93biA9IHRydWU7XG4gICAgY29udGV4dC5lcnJvciA9IGVycjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBPYnNlcnZlciwgT2JzZXJ2YWJsZU5vdGlmaWNhdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgaXNTdWJzY3JpcHRpb24sIFN1YnNjcmlwdGlvbiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHJlcG9ydFVuaGFuZGxlZEVycm9yIH0gZnJvbSAnLi91dGlsL3JlcG9ydFVuaGFuZGxlZEVycm9yJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL3V0aWwvbm9vcCc7XG5pbXBvcnQgeyBuZXh0Tm90aWZpY2F0aW9uLCBlcnJvck5vdGlmaWNhdGlvbiwgQ09NUExFVEVfTk9USUZJQ0FUSU9OIH0gZnJvbSAnLi9Ob3RpZmljYXRpb25GYWN0b3JpZXMnO1xuaW1wb3J0IHsgdGltZW91dFByb3ZpZGVyIH0gZnJvbSAnLi9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyJztcbmltcG9ydCB7IGNhcHR1cmVFcnJvciB9IGZyb20gJy4vdXRpbC9lcnJvckNvbnRleHQnO1xuXG4vKipcbiAqIEltcGxlbWVudHMgdGhlIHtAbGluayBPYnNlcnZlcn0gaW50ZXJmYWNlIGFuZCBleHRlbmRzIHRoZVxuICoge0BsaW5rIFN1YnNjcmlwdGlvbn0gY2xhc3MuIFdoaWxlIHRoZSB7QGxpbmsgT2JzZXJ2ZXJ9IGlzIHRoZSBwdWJsaWMgQVBJIGZvclxuICogY29uc3VtaW5nIHRoZSB2YWx1ZXMgb2YgYW4ge0BsaW5rIE9ic2VydmFibGV9LCBhbGwgT2JzZXJ2ZXJzIGdldCBjb252ZXJ0ZWQgdG9cbiAqIGEgU3Vic2NyaWJlciwgaW4gb3JkZXIgdG8gcHJvdmlkZSBTdWJzY3JpcHRpb24tbGlrZSBjYXBhYmlsaXRpZXMgc3VjaCBhc1xuICogYHVuc3Vic2NyaWJlYC4gU3Vic2NyaWJlciBpcyBhIGNvbW1vbiB0eXBlIGluIFJ4SlMsIGFuZCBjcnVjaWFsIGZvclxuICogaW1wbGVtZW50aW5nIG9wZXJhdG9ycywgYnV0IGl0IGlzIHJhcmVseSB1c2VkIGFzIGEgcHVibGljIEFQSS5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1YnNjcmliZXI8VD4gZXh0ZW5kcyBTdWJzY3JpcHRpb24gaW1wbGVtZW50cyBPYnNlcnZlcjxUPiB7XG4gIC8qKlxuICAgKiBBIHN0YXRpYyBmYWN0b3J5IGZvciBhIFN1YnNjcmliZXIsIGdpdmVuIGEgKHBvdGVudGlhbGx5IHBhcnRpYWwpIGRlZmluaXRpb25cbiAgICogb2YgYW4gT2JzZXJ2ZXIuXG4gICAqIEBwYXJhbSBuZXh0IFRoZSBgbmV4dGAgY2FsbGJhY2sgb2YgYW4gT2JzZXJ2ZXIuXG4gICAqIEBwYXJhbSBlcnJvciBUaGUgYGVycm9yYCBjYWxsYmFjayBvZiBhblxuICAgKiBPYnNlcnZlci5cbiAgICogQHBhcmFtIGNvbXBsZXRlIFRoZSBgY29tcGxldGVgIGNhbGxiYWNrIG9mIGFuXG4gICAqIE9ic2VydmVyLlxuICAgKiBAcmV0dXJuIEEgU3Vic2NyaWJlciB3cmFwcGluZyB0aGUgKHBhcnRpYWxseSBkZWZpbmVkKVxuICAgKiBPYnNlcnZlciByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gYXJndW1lbnRzLlxuICAgKiBAZGVwcmVjYXRlZCBEbyBub3QgdXNlLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguIFRoZXJlIGlzIG5vIHJlcGxhY2VtZW50IGZvciB0aGlzXG4gICAqIG1ldGhvZCwgYW5kIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBiZSBjcmVhdGluZyBpbnN0YW5jZXMgb2YgYFN1YnNjcmliZXJgIGRpcmVjdGx5LlxuICAgKiBJZiB5b3UgaGF2ZSBhIHNwZWNpZmljIHVzZSBjYXNlLCBwbGVhc2UgZmlsZSBhbiBpc3N1ZS5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGU8VD4obmV4dD86ICh4PzogVCkgPT4gdm9pZCwgZXJyb3I/OiAoZT86IGFueSkgPT4gdm9pZCwgY29tcGxldGU/OiAoKSA9PiB2b2lkKTogU3Vic2NyaWJlcjxUPiB7XG4gICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCwgZG8gbm90IHVzZSBkaXJlY3RseS4gV2lsbCBiZSBtYWRlIGludGVybmFsIGluIHY4LiAqL1xuICBwcm90ZWN0ZWQgaXNTdG9wcGVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBAZGVwcmVjYXRlZCBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGRvIG5vdCB1c2UgZGlyZWN0bHkuIFdpbGwgYmUgbWFkZSBpbnRlcm5hbCBpbiB2OC4gKi9cbiAgcHJvdGVjdGVkIGRlc3RpbmF0aW9uOiBTdWJzY3JpYmVyPGFueT4gfCBPYnNlcnZlcjxhbnk+OyAvLyB0aGlzIGBhbnlgIGlzIHRoZSBlc2NhcGUgaGF0Y2ggdG8gZXJhc2UgZXh0cmEgdHlwZSBwYXJhbSAoZS5nLiBSKVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGRvIG5vdCB1c2UgZGlyZWN0bHkuIFdpbGwgYmUgbWFkZSBpbnRlcm5hbCBpbiB2OC5cbiAgICogVGhlcmUgaXMgbm8gcmVhc29uIHRvIGRpcmVjdGx5IGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBTdWJzY3JpYmVyLiBUaGlzIHR5cGUgaXMgZXhwb3J0ZWQgZm9yIHR5cGluZ3MgcmVhc29ucy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRlc3RpbmF0aW9uPzogU3Vic2NyaWJlcjxhbnk+IHwgT2JzZXJ2ZXI8YW55Pikge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IGNoYWluIHN1YnNjcmlwdGlvbnMgdG9nZXRoZXIgaGVyZS5cbiAgICAgIC8vIGlmIGRlc3RpbmF0aW9uIGlzIGEgU3Vic2NyaXB0aW9uLCB0aGVuIGl0IGlzIGEgU3Vic2NyaWJlci5cbiAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgZGVzdGluYXRpb24uYWRkKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgT2JzZXJ2ZXJ9IGNhbGxiYWNrIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucyBvZiB0eXBlIGBuZXh0YCBmcm9tXG4gICAqIHRoZSBPYnNlcnZhYmxlLCB3aXRoIGEgdmFsdWUuIFRoZSBPYnNlcnZhYmxlIG1heSBjYWxsIHRoaXMgbWV0aG9kIDAgb3IgbW9yZVxuICAgKiB0aW1lcy5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBgbmV4dGAgdmFsdWUuXG4gICAqL1xuICBuZXh0KHZhbHVlOiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKG5leHROb3RpZmljYXRpb24odmFsdWUpLCB0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbmV4dCh2YWx1ZSEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIE9ic2VydmVyfSBjYWxsYmFjayB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgb2YgdHlwZSBgZXJyb3JgIGZyb21cbiAgICogdGhlIE9ic2VydmFibGUsIHdpdGggYW4gYXR0YWNoZWQgYEVycm9yYC4gTm90aWZpZXMgdGhlIE9ic2VydmVyIHRoYXRcbiAgICogdGhlIE9ic2VydmFibGUgaGFzIGV4cGVyaWVuY2VkIGFuIGVycm9yIGNvbmRpdGlvbi5cbiAgICogQHBhcmFtIGVyciBUaGUgYGVycm9yYCBleGNlcHRpb24uXG4gICAqL1xuICBlcnJvcihlcnI/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24oZXJyb3JOb3RpZmljYXRpb24oZXJyKSwgdGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgT2JzZXJ2ZXJ9IGNhbGxiYWNrIHRvIHJlY2VpdmUgYSB2YWx1ZWxlc3Mgbm90aWZpY2F0aW9uIG9mIHR5cGVcbiAgICogYGNvbXBsZXRlYCBmcm9tIHRoZSBPYnNlcnZhYmxlLiBOb3RpZmllcyB0aGUgT2JzZXJ2ZXIgdGhhdCB0aGUgT2JzZXJ2YWJsZVxuICAgKiBoYXMgZmluaXNoZWQgc2VuZGluZyBwdXNoLWJhc2VkIG5vdGlmaWNhdGlvbnMuXG4gICAqL1xuICBjb21wbGV0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24oQ09NUExFVEVfTk9USUZJQ0FUSU9OLCB0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICB9XG4gIH1cblxuICB1bnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICBzdXBlci51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwhO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfbmV4dCh2YWx1ZTogVCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2Vycm9yKGVycjogYW55KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfY29tcGxldGUoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgYmluZCBpcyBjYXB0dXJlZCBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIGhhdmVcbiAqIGNvbXBhdGliaWxpdHkgd2l0aCBtb25vaWQgbGlicmFyaWVzIHRoYXQgdGVuZCB0byB1c2UgYSBtZXRob2QgbmFtZWRcbiAqIGBiaW5kYC4gSW4gcGFydGljdWxhciwgYSBsaWJyYXJ5IGNhbGxlZCBNb25pbyByZXF1aXJlcyB0aGlzLlxuICovXG5jb25zdCBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuXG5mdW5jdGlvbiBiaW5kPEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+KGZuOiBGbiwgdGhpc0FyZzogYW55KTogRm4ge1xuICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG5cbi8qKlxuICogSW50ZXJuYWwgb3B0aW1pemF0aW9uIG9ubHksIERPIE5PVCBFWFBPU0UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgQ29uc3VtZXJPYnNlcnZlcjxUPiBpbXBsZW1lbnRzIE9ic2VydmVyPFQ+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJ0aWFsT2JzZXJ2ZXI6IFBhcnRpYWw8T2JzZXJ2ZXI8VD4+KSB7fVxuXG4gIG5leHQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBjb25zdCB7IHBhcnRpYWxPYnNlcnZlciB9ID0gdGhpcztcbiAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlcnJvcihlcnI6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHsgcGFydGlhbE9ic2VydmVyIH0gPSB0aGlzO1xuICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgcGFydGlhbE9ic2VydmVyIH0gPSB0aGlzO1xuICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2FmZVN1YnNjcmliZXI8VD4gZXh0ZW5kcyBTdWJzY3JpYmVyPFQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgb2JzZXJ2ZXJPck5leHQ/OiBQYXJ0aWFsPE9ic2VydmVyPFQ+PiB8ICgodmFsdWU6IFQpID0+IHZvaWQpIHwgbnVsbCxcbiAgICBlcnJvcj86ICgoZT86IGFueSkgPT4gdm9pZCkgfCBudWxsLFxuICAgIGNvbXBsZXRlPzogKCgpID0+IHZvaWQpIHwgbnVsbFxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgbGV0IHBhcnRpYWxPYnNlcnZlcjogUGFydGlhbDxPYnNlcnZlcjxUPj47XG4gICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgZnVuY3Rpb24sIG5vdCBhbiBvYnNlcnZlci4gVGhlIG5leHRcbiAgICAgIC8vIHR3byBhcmd1bWVudHMgKmNvdWxkKiBiZSBvYnNlcnZlcnMsIG9yIHRoZXkgY291bGQgYmUgZW1wdHkuXG4gICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCA/PyB1bmRlZmluZWQpIGFzICgodmFsdWU6IFQpID0+IHZvaWQpIHwgdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogZXJyb3IgPz8gdW5kZWZpbmVkLFxuICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgPz8gdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgcGFydGlhbCBvYnNlcnZlci5cbiAgICAgIGxldCBjb250ZXh0OiBhbnk7XG4gICAgICBpZiAodGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBkZXByZWNhdGVkIHBhdGggdGhhdCBtYWRlIGB0aGlzLnVuc3Vic2NyaWJlKClgIGF2YWlsYWJsZSBpblxuICAgICAgICAvLyBuZXh0IGhhbmRsZXIgZnVuY3Rpb25zIHBhc3NlZCB0byBzdWJzY3JpYmUuIFRoaXMgb25seSBleGlzdHMgYmVoaW5kIGEgZmxhZ1xuICAgICAgICAvLyBub3csIGFzIGl0IGlzICp2ZXJ5KiBzbG93LlxuICAgICAgICBjb250ZXh0ID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgIGNvbnRleHQudW5zdWJzY3JpYmUgPSAoKSA9PiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICBuZXh0OiBvYnNlcnZlck9yTmV4dC5uZXh0ICYmIGJpbmQob2JzZXJ2ZXJPck5leHQubmV4dCwgY29udGV4dCksXG4gICAgICAgICAgZXJyb3I6IG9ic2VydmVyT3JOZXh0LmVycm9yICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuZXJyb3IsIGNvbnRleHQpLFxuICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0KSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSBcIm5vcm1hbFwiIHBhdGguIEp1c3QgdXNlIHRoZSBwYXJ0aWFsIG9ic2VydmVyIGRpcmVjdGx5LlxuICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXcmFwIHRoZSBwYXJ0aWFsIG9ic2VydmVyIHRvIGVuc3VyZSBpdCdzIGEgZnVsbCBvYnNlcnZlciwgYW5kXG4gICAgLy8gbWFrZSBzdXJlIHByb3BlciBlcnJvciBoYW5kbGluZyBpcyBhY2NvdW50ZWQgZm9yLlxuICAgIHRoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yOiBhbnkpIHtcbiAgaWYgKGNvbmZpZy51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKSB7XG4gICAgY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZGVhbCBwYXRoLCB3ZSByZXBvcnQgdGhpcyBhcyBhbiB1bmhhbmRsZWQgZXJyb3IsXG4gICAgLy8gd2hpY2ggaXMgdGhyb3duIG9uIGEgbmV3IGNhbGwgc3RhY2suXG4gICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3IgaGFuZGxlciB1c2VkIHdoZW4gbm8gZXJyb3IgaGFuZGxlciB3YXMgc3VwcGxpZWRcbiAqIHRvIHRoZSBTYWZlU3Vic2NyaWJlciAtLSBtZWFuaW5nIG5vIGVycm9yIGhhbmRsZXIgd2FzIHN1cHBsaWVkXG4gKiBkbyB0aGUgYHN1YnNjcmliZWAgY2FsbCBvbiBvdXIgb2JzZXJ2YWJsZS5cbiAqIEBwYXJhbSBlcnIgVGhlIGVycm9yIHRvIGhhbmRsZVxuICovXG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycjogYW55KSB7XG4gIHRocm93IGVycjtcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIG5vdGlmaWNhdGlvbnMgdGhhdCBjYW5ub3QgYmUgc2VudCB0byBhIHN0b3BwZWQgc3Vic2NyaWJlci5cbiAqIEBwYXJhbSBub3RpZmljYXRpb24gVGhlIG5vdGlmaWNhdGlvbiBiZWluZyBzZW50LlxuICogQHBhcmFtIHN1YnNjcmliZXIgVGhlIHN0b3BwZWQgc3Vic2NyaWJlci5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE9ic2VydmFibGVOb3RpZmljYXRpb248YW55Piwgc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxhbnk+KSB7XG4gIGNvbnN0IHsgb25TdG9wcGVkTm90aWZpY2F0aW9uIH0gPSBjb25maWc7XG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbiAmJiB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dCgoKSA9PiBvblN0b3BwZWROb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBzdWJzY3JpYmVyKSk7XG59XG5cbi8qKlxuICogVGhlIG9ic2VydmVyIHVzZWQgYXMgYSBzdHViIGZvciBzdWJzY3JpcHRpb25zIHdoZXJlIHRoZSB1c2VyIGRpZCBub3RcbiAqIHBhc3MgYW55IGFyZ3VtZW50cyB0byBgc3Vic2NyaWJlYC4gQ29tZXMgd2l0aCB0aGUgZGVmYXVsdCBlcnJvciBoYW5kbGluZ1xuICogYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBFTVBUWV9PQlNFUlZFUjogUmVhZG9ubHk8T2JzZXJ2ZXI8YW55Pj4gJiB7IGNsb3NlZDogdHJ1ZSB9ID0ge1xuICBjbG9zZWQ6IHRydWUsXG4gIG5leHQ6IG5vb3AsXG4gIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICBjb21wbGV0ZTogbm9vcCxcbn07XG4iLCAiLyoqXG4gKiBTeW1ib2wub2JzZXJ2YWJsZSBvciBhIHN0cmluZyBcIkBAb2JzZXJ2YWJsZVwiLiBVc2VkIGZvciBpbnRlcm9wXG4gKlxuICogQGRlcHJlY2F0ZWQgV2Ugd2lsbCBubyBsb25nZXIgYmUgZXhwb3J0aW5nIHRoaXMgc3ltYm9sIGluIHVwY29taW5nIHZlcnNpb25zIG9mIFJ4SlMuXG4gKiBJbnN0ZWFkIHBvbHlmaWxsIGFuZCB1c2UgU3ltYm9sLm9ic2VydmFibGUgZGlyZWN0bHkgKm9yKiB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvc3ltYm9sLW9ic2VydmFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IG9ic2VydmFibGU6IHN0cmluZyB8IHN5bWJvbCA9ICgoKSA9PiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSkgfHwgJ0BAb2JzZXJ2YWJsZScpKCk7XG4iLCAiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIG9uZSBwYXJhbWV0ZXIgYW5kIGp1c3QgcmV0dXJucyBpdC4gU2ltcGx5IHB1dCxcbiAqIHRoaXMgaXMgbGlrZSBgPFQ+KHg6IFQpOiBUID0+IHhgLlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgaW4gc29tZSBjYXNlcyB3aGVuIHVzaW5nIHRoaW5ncyBsaWtlIGBtZXJnZU1hcGBcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIHRha2UsIG1hcCwgcmFuZ2UsIG1lcmdlTWFwLCBpZGVudGl0eSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHNvdXJjZSQgPSBpbnRlcnZhbCgxMDAwKS5waXBlKHRha2UoNSkpO1xuICpcbiAqIGNvbnN0IHJlc3VsdCQgPSBzb3VyY2UkLnBpcGUoXG4gKiAgIG1hcChpID0+IHJhbmdlKGkpKSxcbiAqICAgbWVyZ2VNYXAoaWRlbnRpdHkpIC8vIHNhbWUgYXMgbWVyZ2VNYXAoeCA9PiB4KVxuICogKTtcbiAqXG4gKiByZXN1bHQkLnN1YnNjcmliZSh7XG4gKiAgIG5leHQ6IGNvbnNvbGUubG9nXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIE9yIHdoZW4geW91IHdhbnQgdG8gc2VsZWN0aXZlbHkgYXBwbHkgYW4gb3BlcmF0b3JcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIHRha2UsIGlkZW50aXR5IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgc2hvdWxkTGltaXQgPSAoKSA9PiBNYXRoLnJhbmRvbSgpIDwgMC41O1xuICpcbiAqIGNvbnN0IHNvdXJjZSQgPSBpbnRlcnZhbCgxMDAwKTtcbiAqXG4gKiBjb25zdCByZXN1bHQkID0gc291cmNlJC5waXBlKHNob3VsZExpbWl0KCkgPyB0YWtlKDUpIDogaWRlbnRpdHkpO1xuICpcbiAqIHJlc3VsdCQuc3Vic2NyaWJlKHtcbiAqICAgbmV4dDogY29uc29sZS5sb2dcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggQW55IHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvblxuICogQHJldHVybnMgVGhlIHZhbHVlIHBhc3NlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoaXMgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5PFQ+KHg6IFQpOiBUIHtcbiAgcmV0dXJuIHg7XG59XG4iLCAiaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuL2lkZW50aXR5JztcbmltcG9ydCB7IFVuYXJ5RnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwaXBlKCk6IHR5cGVvZiBpZGVudGl0eTtcbmV4cG9ydCBmdW5jdGlvbiBwaXBlPFQsIEE+KGZuMTogVW5hcnlGdW5jdGlvbjxULCBBPik6IFVuYXJ5RnVuY3Rpb248VCwgQT47XG5leHBvcnQgZnVuY3Rpb24gcGlwZTxULCBBLCBCPihmbjE6IFVuYXJ5RnVuY3Rpb248VCwgQT4sIGZuMjogVW5hcnlGdW5jdGlvbjxBLCBCPik6IFVuYXJ5RnVuY3Rpb248VCwgQj47XG5leHBvcnQgZnVuY3Rpb24gcGlwZTxULCBBLCBCLCBDPihmbjE6IFVuYXJ5RnVuY3Rpb248VCwgQT4sIGZuMjogVW5hcnlGdW5jdGlvbjxBLCBCPiwgZm4zOiBVbmFyeUZ1bmN0aW9uPEIsIEM+KTogVW5hcnlGdW5jdGlvbjxULCBDPjtcbmV4cG9ydCBmdW5jdGlvbiBwaXBlPFQsIEEsIEIsIEMsIEQ+KFxuICBmbjE6IFVuYXJ5RnVuY3Rpb248VCwgQT4sXG4gIGZuMjogVW5hcnlGdW5jdGlvbjxBLCBCPixcbiAgZm4zOiBVbmFyeUZ1bmN0aW9uPEIsIEM+LFxuICBmbjQ6IFVuYXJ5RnVuY3Rpb248QywgRD5cbik6IFVuYXJ5RnVuY3Rpb248VCwgRD47XG5leHBvcnQgZnVuY3Rpb24gcGlwZTxULCBBLCBCLCBDLCBELCBFPihcbiAgZm4xOiBVbmFyeUZ1bmN0aW9uPFQsIEE+LFxuICBmbjI6IFVuYXJ5RnVuY3Rpb248QSwgQj4sXG4gIGZuMzogVW5hcnlGdW5jdGlvbjxCLCBDPixcbiAgZm40OiBVbmFyeUZ1bmN0aW9uPEMsIEQ+LFxuICBmbjU6IFVuYXJ5RnVuY3Rpb248RCwgRT5cbik6IFVuYXJ5RnVuY3Rpb248VCwgRT47XG5leHBvcnQgZnVuY3Rpb24gcGlwZTxULCBBLCBCLCBDLCBELCBFLCBGPihcbiAgZm4xOiBVbmFyeUZ1bmN0aW9uPFQsIEE+LFxuICBmbjI6IFVuYXJ5RnVuY3Rpb248QSwgQj4sXG4gIGZuMzogVW5hcnlGdW5jdGlvbjxCLCBDPixcbiAgZm40OiBVbmFyeUZ1bmN0aW9uPEMsIEQ+LFxuICBmbjU6IFVuYXJ5RnVuY3Rpb248RCwgRT4sXG4gIGZuNjogVW5hcnlGdW5jdGlvbjxFLCBGPlxuKTogVW5hcnlGdW5jdGlvbjxULCBGPjtcbmV4cG9ydCBmdW5jdGlvbiBwaXBlPFQsIEEsIEIsIEMsIEQsIEUsIEYsIEc+KFxuICBmbjE6IFVuYXJ5RnVuY3Rpb248VCwgQT4sXG4gIGZuMjogVW5hcnlGdW5jdGlvbjxBLCBCPixcbiAgZm4zOiBVbmFyeUZ1bmN0aW9uPEIsIEM+LFxuICBmbjQ6IFVuYXJ5RnVuY3Rpb248QywgRD4sXG4gIGZuNTogVW5hcnlGdW5jdGlvbjxELCBFPixcbiAgZm42OiBVbmFyeUZ1bmN0aW9uPEUsIEY+LFxuICBmbjc6IFVuYXJ5RnVuY3Rpb248RiwgRz5cbik6IFVuYXJ5RnVuY3Rpb248VCwgRz47XG5leHBvcnQgZnVuY3Rpb24gcGlwZTxULCBBLCBCLCBDLCBELCBFLCBGLCBHLCBIPihcbiAgZm4xOiBVbmFyeUZ1bmN0aW9uPFQsIEE+LFxuICBmbjI6IFVuYXJ5RnVuY3Rpb248QSwgQj4sXG4gIGZuMzogVW5hcnlGdW5jdGlvbjxCLCBDPixcbiAgZm40OiBVbmFyeUZ1bmN0aW9uPEMsIEQ+LFxuICBmbjU6IFVuYXJ5RnVuY3Rpb248RCwgRT4sXG4gIGZuNjogVW5hcnlGdW5jdGlvbjxFLCBGPixcbiAgZm43OiBVbmFyeUZ1bmN0aW9uPEYsIEc+LFxuICBmbjg6IFVuYXJ5RnVuY3Rpb248RywgSD5cbik6IFVuYXJ5RnVuY3Rpb248VCwgSD47XG5leHBvcnQgZnVuY3Rpb24gcGlwZTxULCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJPihcbiAgZm4xOiBVbmFyeUZ1bmN0aW9uPFQsIEE+LFxuICBmbjI6IFVuYXJ5RnVuY3Rpb248QSwgQj4sXG4gIGZuMzogVW5hcnlGdW5jdGlvbjxCLCBDPixcbiAgZm40OiBVbmFyeUZ1bmN0aW9uPEMsIEQ+LFxuICBmbjU6IFVuYXJ5RnVuY3Rpb248RCwgRT4sXG4gIGZuNjogVW5hcnlGdW5jdGlvbjxFLCBGPixcbiAgZm43OiBVbmFyeUZ1bmN0aW9uPEYsIEc+LFxuICBmbjg6IFVuYXJ5RnVuY3Rpb248RywgSD4sXG4gIGZuOTogVW5hcnlGdW5jdGlvbjxILCBJPlxuKTogVW5hcnlGdW5jdGlvbjxULCBJPjtcbmV4cG9ydCBmdW5jdGlvbiBwaXBlPFQsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEk+KFxuICBmbjE6IFVuYXJ5RnVuY3Rpb248VCwgQT4sXG4gIGZuMjogVW5hcnlGdW5jdGlvbjxBLCBCPixcbiAgZm4zOiBVbmFyeUZ1bmN0aW9uPEIsIEM+LFxuICBmbjQ6IFVuYXJ5RnVuY3Rpb248QywgRD4sXG4gIGZuNTogVW5hcnlGdW5jdGlvbjxELCBFPixcbiAgZm42OiBVbmFyeUZ1bmN0aW9uPEUsIEY+LFxuICBmbjc6IFVuYXJ5RnVuY3Rpb248RiwgRz4sXG4gIGZuODogVW5hcnlGdW5jdGlvbjxHLCBIPixcbiAgZm45OiBVbmFyeUZ1bmN0aW9uPEgsIEk+LFxuICAuLi5mbnM6IFVuYXJ5RnVuY3Rpb248YW55LCBhbnk+W11cbik6IFVuYXJ5RnVuY3Rpb248VCwgdW5rbm93bj47XG5cbi8qKlxuICogcGlwZSgpIGNhbiBiZSBjYWxsZWQgb24gb25lIG9yIG1vcmUgZnVuY3Rpb25zLCBlYWNoIG9mIHdoaWNoIGNhbiB0YWtlIG9uZSBhcmd1bWVudCAoXCJVbmFyeUZ1bmN0aW9uXCIpXG4gKiBhbmQgdXNlcyBpdCB0byByZXR1cm4gYSB2YWx1ZS5cbiAqIEl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIG9uZSBhcmd1bWVudCwgcGFzc2VzIGl0IHRvIHRoZSBmaXJzdCBVbmFyeUZ1bmN0aW9uLCBhbmQgdGhlblxuICogcGFzc2VzIHRoZSByZXN1bHQgdG8gdGhlIG5leHQgb25lLCBwYXNzZXMgdGhhdCByZXN1bHQgdG8gdGhlIG5leHQgb25lLCBhbmQgc28gb24uICBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpcGUoLi4uZm5zOiBBcnJheTxVbmFyeUZ1bmN0aW9uPGFueSwgYW55Pj4pOiBVbmFyeUZ1bmN0aW9uPGFueSwgYW55PiB7XG4gIHJldHVybiBwaXBlRnJvbUFycmF5KGZucyk7XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBwaXBlRnJvbUFycmF5PFQsIFI+KGZuczogQXJyYXk8VW5hcnlGdW5jdGlvbjxULCBSPj4pOiBVbmFyeUZ1bmN0aW9uPFQsIFI+IHtcbiAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gaWRlbnRpdHkgYXMgVW5hcnlGdW5jdGlvbjxhbnksIGFueT47XG4gIH1cblxuICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBmbnNbMF07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQ6IFQpOiBSIHtcbiAgICByZXR1cm4gZm5zLnJlZHVjZSgocHJldjogYW55LCBmbjogVW5hcnlGdW5jdGlvbjxULCBSPikgPT4gZm4ocHJldiksIGlucHV0IGFzIGFueSk7XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tICcuL09wZXJhdG9yJztcbmltcG9ydCB7IFNhZmVTdWJzY3JpYmVyLCBTdWJzY3JpYmVyIH0gZnJvbSAnLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IGlzU3Vic2NyaXB0aW9uLCBTdWJzY3JpcHRpb24gfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBUZWFyZG93bkxvZ2ljLCBPcGVyYXRvckZ1bmN0aW9uLCBTdWJzY3JpYmFibGUsIE9ic2VydmVyIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBvYnNlcnZhYmxlIGFzIFN5bWJvbF9vYnNlcnZhYmxlIH0gZnJvbSAnLi9zeW1ib2wvb2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBwaXBlRnJvbUFycmF5IH0gZnJvbSAnLi91dGlsL3BpcGUnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IGVycm9yQ29udGV4dCB9IGZyb20gJy4vdXRpbC9lcnJvckNvbnRleHQnO1xuXG4vKipcbiAqIEEgcmVwcmVzZW50YXRpb24gb2YgYW55IHNldCBvZiB2YWx1ZXMgb3ZlciBhbnkgYW1vdW50IG9mIHRpbWUuIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgYnVpbGRpbmcgYmxvY2tcbiAqIG9mIFJ4SlMuXG4gKi9cbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmxlPFQ+IGltcGxlbWVudHMgU3Vic2NyaWJhYmxlPFQ+IHtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCwgZG8gbm90IHVzZSBkaXJlY3RseS4gV2lsbCBiZSBtYWRlIGludGVybmFsIGluIHY4LlxuICAgKi9cbiAgc291cmNlOiBPYnNlcnZhYmxlPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCwgZG8gbm90IHVzZSBkaXJlY3RseS4gV2lsbCBiZSBtYWRlIGludGVybmFsIGluIHY4LlxuICAgKi9cbiAgb3BlcmF0b3I6IE9wZXJhdG9yPGFueSwgVD4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzdWJzY3JpYmUgVGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIE9ic2VydmFibGUgaXNcbiAgICogaW5pdGlhbGx5IHN1YnNjcmliZWQgdG8uIFRoaXMgZnVuY3Rpb24gaXMgZ2l2ZW4gYSBTdWJzY3JpYmVyLCB0byB3aGljaCBuZXcgdmFsdWVzXG4gICAqIGNhbiBiZSBgbmV4dGBlZCwgb3IgYW4gYGVycm9yYCBtZXRob2QgY2FuIGJlIGNhbGxlZCB0byByYWlzZSBhbiBlcnJvciwgb3JcbiAgICogYGNvbXBsZXRlYCBjYW4gYmUgY2FsbGVkIHRvIG5vdGlmeSBvZiBhIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHN1YnNjcmliZT86ICh0aGlzOiBPYnNlcnZhYmxlPFQ+LCBzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFQ+KSA9PiBUZWFyZG93bkxvZ2ljKSB7XG4gICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhBQ0s6IFNpbmNlIFR5cGVTY3JpcHQgaW5oZXJpdHMgc3RhdGljIHByb3BlcnRpZXMgdG9vLCB3ZSBoYXZlIHRvXG4gIC8vIGZpZ2h0IGFnYWluc3QgVHlwZVNjcmlwdCBoZXJlIHNvIFN1YmplY3QgY2FuIGhhdmUgYSBkaWZmZXJlbnQgc3RhdGljIGNyZWF0ZSBzaWduYXR1cmVcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgT2JzZXJ2YWJsZSBieSBjYWxsaW5nIHRoZSBPYnNlcnZhYmxlIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBzdWJzY3JpYmUgdGhlIHN1YnNjcmliZXIgZnVuY3Rpb24gdG8gYmUgcGFzc2VkIHRvIHRoZSBPYnNlcnZhYmxlIGNvbnN0cnVjdG9yXG4gICAqIEByZXR1cm4gQSBuZXcgb2JzZXJ2YWJsZS5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBuZXcgT2JzZXJ2YWJsZSgpYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlOiAoLi4uYXJnczogYW55W10pID0+IGFueSA9IDxUPihzdWJzY3JpYmU/OiAoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxUPikgPT4gVGVhcmRvd25Mb2dpYykgPT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUPihzdWJzY3JpYmUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IE9ic2VydmFibGUsIHdpdGggdGhpcyBPYnNlcnZhYmxlIGluc3RhbmNlIGFzIHRoZSBzb3VyY2UsIGFuZCB0aGUgcGFzc2VkXG4gICAqIG9wZXJhdG9yIGRlZmluZWQgYXMgdGhlIG5ldyBvYnNlcnZhYmxlJ3Mgb3BlcmF0b3IuXG4gICAqIEBwYXJhbSBvcGVyYXRvciB0aGUgb3BlcmF0b3IgZGVmaW5pbmcgdGhlIG9wZXJhdGlvbiB0byB0YWtlIG9uIHRoZSBvYnNlcnZhYmxlXG4gICAqIEByZXR1cm4gQSBuZXcgb2JzZXJ2YWJsZSB3aXRoIHRoZSBPcGVyYXRvciBhcHBsaWVkLlxuICAgKiBAZGVwcmVjYXRlZCBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGRvIG5vdCB1c2UgZGlyZWN0bHkuIFdpbGwgYmUgbWFkZSBpbnRlcm5hbCBpbiB2OC5cbiAgICogSWYgeW91IGhhdmUgaW1wbGVtZW50ZWQgYW4gb3BlcmF0b3IgdXNpbmcgYGxpZnRgLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjcmVhdGUgYW5cbiAgICogb3BlcmF0b3IgYnkgc2ltcGx5IHJldHVybmluZyBgbmV3IE9ic2VydmFibGUoKWAgZGlyZWN0bHkuIFNlZSBcIkNyZWF0aW5nIG5ldyBvcGVyYXRvcnMgZnJvbVxuICAgKiBzY3JhdGNoXCIgc2VjdGlvbiBoZXJlOiBodHRwczovL3J4anMuZGV2L2d1aWRlL29wZXJhdG9yc1xuICAgKi9cbiAgbGlmdDxSPihvcGVyYXRvcj86IE9wZXJhdG9yPFQsIFI+KTogT2JzZXJ2YWJsZTxSPiB7XG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPFI+KCk7XG4gICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgfVxuXG4gIHN1YnNjcmliZShvYnNlcnZlck9yTmV4dD86IFBhcnRpYWw8T2JzZXJ2ZXI8VD4+IHwgKCh2YWx1ZTogVCkgPT4gdm9pZCkpOiBTdWJzY3JpcHRpb247XG4gIC8qKiBAZGVwcmVjYXRlZCBJbnN0ZWFkIG9mIHBhc3Npbmcgc2VwYXJhdGUgY2FsbGJhY2sgYXJndW1lbnRzLCB1c2UgYW4gb2JzZXJ2ZXIgYXJndW1lbnQuIFNpZ25hdHVyZXMgdGFraW5nIHNlcGFyYXRlIGNhbGxiYWNrIGFyZ3VtZW50cyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL3N1YnNjcmliZS1hcmd1bWVudHMgKi9cbiAgc3Vic2NyaWJlKG5leHQ/OiAoKHZhbHVlOiBUKSA9PiB2b2lkKSB8IG51bGwsIGVycm9yPzogKChlcnJvcjogYW55KSA9PiB2b2lkKSB8IG51bGwsIGNvbXBsZXRlPzogKCgpID0+IHZvaWQpIHwgbnVsbCk6IFN1YnNjcmlwdGlvbjtcbiAgLyoqXG4gICAqIEludm9rZXMgYW4gZXhlY3V0aW9uIG9mIGFuIE9ic2VydmFibGUgYW5kIHJlZ2lzdGVycyBPYnNlcnZlciBoYW5kbGVycyBmb3Igbm90aWZpY2F0aW9ucyBpdCB3aWxsIGVtaXQuXG4gICAqXG4gICAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5Vc2UgaXQgd2hlbiB5b3UgaGF2ZSBhbGwgdGhlc2UgT2JzZXJ2YWJsZXMsIGJ1dCBzdGlsbCBub3RoaW5nIGlzIGhhcHBlbmluZy48L3NwYW4+XG4gICAqXG4gICAqIGBzdWJzY3JpYmVgIGlzIG5vdCBhIHJlZ3VsYXIgb3BlcmF0b3IsIGJ1dCBhIG1ldGhvZCB0aGF0IGNhbGxzIE9ic2VydmFibGUncyBpbnRlcm5hbCBgc3Vic2NyaWJlYCBmdW5jdGlvbi4gSXRcbiAgICogbWlnaHQgYmUgZm9yIGV4YW1wbGUgYSBmdW5jdGlvbiB0aGF0IHlvdSBwYXNzZWQgdG8gT2JzZXJ2YWJsZSdzIGNvbnN0cnVjdG9yLCBidXQgbW9zdCBvZiB0aGUgdGltZSBpdCBpc1xuICAgKiBhIGxpYnJhcnkgaW1wbGVtZW50YXRpb24sIHdoaWNoIGRlZmluZXMgd2hhdCB3aWxsIGJlIGVtaXR0ZWQgYnkgYW4gT2JzZXJ2YWJsZSwgYW5kIHdoZW4gaXQgYmUgd2lsbCBlbWl0dGVkLiBUaGlzIG1lYW5zXG4gICAqIHRoYXQgY2FsbGluZyBgc3Vic2NyaWJlYCBpcyBhY3R1YWxseSB0aGUgbW9tZW50IHdoZW4gT2JzZXJ2YWJsZSBzdGFydHMgaXRzIHdvcmssIG5vdCB3aGVuIGl0IGlzIGNyZWF0ZWQsIGFzIGl0IGlzIG9mdGVuXG4gICAqIHRoZSB0aG91Z2h0LlxuICAgKlxuICAgKiBBcGFydCBmcm9tIHN0YXJ0aW5nIHRoZSBleGVjdXRpb24gb2YgYW4gT2JzZXJ2YWJsZSwgdGhpcyBtZXRob2QgYWxsb3dzIHlvdSB0byBsaXN0ZW4gZm9yIHZhbHVlc1xuICAgKiB0aGF0IGFuIE9ic2VydmFibGUgZW1pdHMsIGFzIHdlbGwgYXMgZm9yIHdoZW4gaXQgY29tcGxldGVzIG9yIGVycm9ycy4gWW91IGNhbiBhY2hpZXZlIHRoaXMgaW4gdHdvXG4gICAqIG9mIHRoZSBmb2xsb3dpbmcgd2F5cy5cbiAgICpcbiAgICogVGhlIGZpcnN0IHdheSBpcyBjcmVhdGluZyBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBPYnNlcnZlcn0gaW50ZXJmYWNlLiBJdCBzaG91bGQgaGF2ZSBtZXRob2RzXG4gICAqIGRlZmluZWQgYnkgdGhhdCBpbnRlcmZhY2UsIGJ1dCBub3RlIHRoYXQgaXQgc2hvdWxkIGJlIGp1c3QgYSByZWd1bGFyIEphdmFTY3JpcHQgb2JqZWN0LCB3aGljaCB5b3UgY2FuIGNyZWF0ZVxuICAgKiB5b3Vyc2VsZiBpbiBhbnkgd2F5IHlvdSB3YW50IChFUzYgY2xhc3MsIGNsYXNzaWMgZnVuY3Rpb24gY29uc3RydWN0b3IsIG9iamVjdCBsaXRlcmFsIGV0Yy4pLiBJbiBwYXJ0aWN1bGFyLCBkb1xuICAgKiBub3QgYXR0ZW1wdCB0byB1c2UgYW55IFJ4SlMgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byBjcmVhdGUgT2JzZXJ2ZXJzIC0geW91IGRvbid0IG5lZWQgdGhlbS4gUmVtZW1iZXIgYWxzb1xuICAgKiB0aGF0IHlvdXIgb2JqZWN0IGRvZXMgbm90IGhhdmUgdG8gaW1wbGVtZW50IGFsbCBtZXRob2RzLiBJZiB5b3UgZmluZCB5b3Vyc2VsZiBjcmVhdGluZyBhIG1ldGhvZCB0aGF0IGRvZXNuJ3RcbiAgICogZG8gYW55dGhpbmcsIHlvdSBjYW4gc2ltcGx5IG9taXQgaXQuIE5vdGUgaG93ZXZlciwgaWYgdGhlIGBlcnJvcmAgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCBhbmQgYW4gZXJyb3IgaGFwcGVucyxcbiAgICogaXQgd2lsbCBiZSB0aHJvd24gYXN5bmNocm9ub3VzbHkuIEVycm9ycyB0aHJvd24gYXN5bmNocm9ub3VzbHkgY2Fubm90IGJlIGNhdWdodCB1c2luZyBgdHJ5YC9gY2F0Y2hgLiBJbnN0ZWFkLFxuICAgKiB1c2UgdGhlIHtAbGluayBvblVuaGFuZGxlZEVycm9yfSBjb25maWd1cmF0aW9uIG9wdGlvbiBvciB1c2UgYSBydW50aW1lIGhhbmRsZXIgKGxpa2UgYHdpbmRvdy5vbmVycm9yYCBvclxuICAgKiBgcHJvY2Vzcy5vbignZXJyb3IpYCkgdG8gYmUgbm90aWZpZWQgb2YgdW5oYW5kbGVkIGVycm9ycy4gQmVjYXVzZSBvZiB0aGlzLCBpdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IHByb3ZpZGVcbiAgICogYW4gYGVycm9yYCBtZXRob2QgdG8gYXZvaWQgbWlzc2luZyB0aHJvd24gZXJyb3JzLlxuICAgKlxuICAgKiBUaGUgc2Vjb25kIHdheSBpcyB0byBnaXZlIHVwIG9uIE9ic2VydmVyIG9iamVjdCBhbHRvZ2V0aGVyIGFuZCBzaW1wbHkgcHJvdmlkZSBjYWxsYmFjayBmdW5jdGlvbnMgaW4gcGxhY2Ugb2YgaXRzIG1ldGhvZHMuXG4gICAqIFRoaXMgbWVhbnMgeW91IGNhbiBwcm92aWRlIHRocmVlIGZ1bmN0aW9ucyBhcyBhcmd1bWVudHMgdG8gYHN1YnNjcmliZWAsIHdoZXJlIHRoZSBmaXJzdCBmdW5jdGlvbiBpcyBlcXVpdmFsZW50XG4gICAqIG9mIGEgYG5leHRgIG1ldGhvZCwgdGhlIHNlY29uZCBvZiBhbiBgZXJyb3JgIG1ldGhvZCBhbmQgdGhlIHRoaXJkIG9mIGEgYGNvbXBsZXRlYCBtZXRob2QuIEp1c3QgYXMgaW4gY2FzZSBvZiBhbiBPYnNlcnZlcixcbiAgICogaWYgeW91IGRvIG5vdCBuZWVkIHRvIGxpc3RlbiBmb3Igc29tZXRoaW5nLCB5b3UgY2FuIG9taXQgYSBmdW5jdGlvbiBieSBwYXNzaW5nIGB1bmRlZmluZWRgIG9yIGBudWxsYCxcbiAgICogc2luY2UgYHN1YnNjcmliZWAgcmVjb2duaXplcyB0aGVzZSBmdW5jdGlvbnMgYnkgd2hlcmUgdGhleSB3ZXJlIHBsYWNlZCBpbiBmdW5jdGlvbiBjYWxsLiBXaGVuIGl0IGNvbWVzXG4gICAqIHRvIHRoZSBgZXJyb3JgIGZ1bmN0aW9uLCBhcyB3aXRoIGFuIE9ic2VydmVyLCBpZiBub3QgcHJvdmlkZWQsIGVycm9ycyBlbWl0dGVkIGJ5IGFuIE9ic2VydmFibGUgd2lsbCBiZSB0aHJvd24gYXN5bmNocm9ub3VzbHkuXG4gICAqXG4gICAqIFlvdSBjYW4sIGhvd2V2ZXIsIHN1YnNjcmliZSB3aXRoIG5vIHBhcmFtZXRlcnMgYXQgYWxsLiBUaGlzIG1heSBiZSB0aGUgY2FzZSB3aGVyZSB5b3UncmUgbm90IGludGVyZXN0ZWQgaW4gdGVybWluYWwgZXZlbnRzXG4gICAqIGFuZCB5b3UgYWxzbyBoYW5kbGVkIGVtaXNzaW9ucyBpbnRlcm5hbGx5IGJ5IHVzaW5nIG9wZXJhdG9ycyAoZS5nLiB1c2luZyBgdGFwYCkuXG4gICAqXG4gICAqIFdoaWNoZXZlciBzdHlsZSBvZiBjYWxsaW5nIGBzdWJzY3JpYmVgIHlvdSB1c2UsIGluIGJvdGggY2FzZXMgaXQgcmV0dXJucyBhIFN1YnNjcmlwdGlvbiBvYmplY3QuXG4gICAqIFRoaXMgb2JqZWN0IGFsbG93cyB5b3UgdG8gY2FsbCBgdW5zdWJzY3JpYmVgIG9uIGl0LCB3aGljaCBpbiB0dXJuIHdpbGwgc3RvcCB0aGUgd29yayB0aGF0IGFuIE9ic2VydmFibGUgZG9lcyBhbmQgd2lsbCBjbGVhblxuICAgKiB1cCBhbGwgcmVzb3VyY2VzIHRoYXQgYW4gT2JzZXJ2YWJsZSB1c2VkLiBOb3RlIHRoYXQgY2FuY2VsbGluZyBhIHN1YnNjcmlwdGlvbiB3aWxsIG5vdCBjYWxsIGBjb21wbGV0ZWAgY2FsbGJhY2tcbiAgICogcHJvdmlkZWQgdG8gYHN1YnNjcmliZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHJlc2VydmVkIGZvciBhIHJlZ3VsYXIgY29tcGxldGlvbiBzaWduYWwgdGhhdCBjb21lcyBmcm9tIGFuIE9ic2VydmFibGUuXG4gICAqXG4gICAqIFJlbWVtYmVyIHRoYXQgY2FsbGJhY2tzIHByb3ZpZGVkIHRvIGBzdWJzY3JpYmVgIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHkuXG4gICAqIEl0IGlzIGFuIE9ic2VydmFibGUgaXRzZWxmIHRoYXQgZGVjaWRlcyB3aGVuIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZC4gRm9yIGV4YW1wbGUge0BsaW5rIG9mfVxuICAgKiBieSBkZWZhdWx0IGVtaXRzIGFsbCBpdHMgdmFsdWVzIHN5bmNocm9ub3VzbHkuIEFsd2F5cyBjaGVjayBkb2N1bWVudGF0aW9uIGZvciBob3cgZ2l2ZW4gT2JzZXJ2YWJsZVxuICAgKiB3aWxsIGJlaGF2ZSB3aGVuIHN1YnNjcmliZWQgYW5kIGlmIGl0cyBkZWZhdWx0IGJlaGF2aW9yIGNhbiBiZSBtb2RpZmllZCB3aXRoIGEgYHNjaGVkdWxlcmAuXG4gICAqXG4gICAqICMjIyMgRXhhbXBsZXNcbiAgICpcbiAgICogU3Vic2NyaWJlIHdpdGggYW4ge0BsaW5rIGd1aWRlL29ic2VydmVyIE9ic2VydmVyfVxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBpbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuICAgKlxuICAgKiBjb25zdCBzdW1PYnNlcnZlciA9IHtcbiAgICogICBzdW06IDAsXG4gICAqICAgbmV4dCh2YWx1ZSkge1xuICAgKiAgICAgY29uc29sZS5sb2coJ0FkZGluZzogJyArIHZhbHVlKTtcbiAgICogICAgIHRoaXMuc3VtID0gdGhpcy5zdW0gKyB2YWx1ZTtcbiAgICogICB9LFxuICAgKiAgIGVycm9yKCkge1xuICAgKiAgICAgLy8gV2UgYWN0dWFsbHkgY291bGQganVzdCByZW1vdmUgdGhpcyBtZXRob2QsXG4gICAqICAgICAvLyBzaW5jZSB3ZSBkbyBub3QgcmVhbGx5IGNhcmUgYWJvdXQgZXJyb3JzIHJpZ2h0IG5vdy5cbiAgICogICB9LFxuICAgKiAgIGNvbXBsZXRlKCkge1xuICAgKiAgICAgY29uc29sZS5sb2coJ1N1bSBlcXVhbHM6ICcgKyB0aGlzLnN1bSk7XG4gICAqICAgfVxuICAgKiB9O1xuICAgKlxuICAgKiBvZigxLCAyLCAzKSAvLyBTeW5jaHJvbm91c2x5IGVtaXRzIDEsIDIsIDMgYW5kIHRoZW4gY29tcGxldGVzLlxuICAgKiAgIC5zdWJzY3JpYmUoc3VtT2JzZXJ2ZXIpO1xuICAgKlxuICAgKiAvLyBMb2dzOlxuICAgKiAvLyAnQWRkaW5nOiAxJ1xuICAgKiAvLyAnQWRkaW5nOiAyJ1xuICAgKiAvLyAnQWRkaW5nOiAzJ1xuICAgKiAvLyAnU3VtIGVxdWFsczogNidcbiAgICogYGBgXG4gICAqXG4gICAqIFN1YnNjcmliZSB3aXRoIGZ1bmN0aW9ucyAoe0BsaW5rIGRlcHJlY2F0aW9ucy9zdWJzY3JpYmUtYXJndW1lbnRzIGRlcHJlY2F0ZWR9KVxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBpbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnXG4gICAqXG4gICAqIGxldCBzdW0gPSAwO1xuICAgKlxuICAgKiBvZigxLCAyLCAzKS5zdWJzY3JpYmUoXG4gICAqICAgdmFsdWUgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coJ0FkZGluZzogJyArIHZhbHVlKTtcbiAgICogICAgIHN1bSA9IHN1bSArIHZhbHVlO1xuICAgKiAgIH0sXG4gICAqICAgdW5kZWZpbmVkLFxuICAgKiAgICgpID0+IGNvbnNvbGUubG9nKCdTdW0gZXF1YWxzOiAnICsgc3VtKVxuICAgKiApO1xuICAgKlxuICAgKiAvLyBMb2dzOlxuICAgKiAvLyAnQWRkaW5nOiAxJ1xuICAgKiAvLyAnQWRkaW5nOiAyJ1xuICAgKiAvLyAnQWRkaW5nOiAzJ1xuICAgKiAvLyAnU3VtIGVxdWFsczogNidcbiAgICogYGBgXG4gICAqXG4gICAqIENhbmNlbCBhIHN1YnNjcmlwdGlvblxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBpbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuICAgKlxuICAgKiBjb25zdCBzdWJzY3JpcHRpb24gPSBpbnRlcnZhbCgxMDAwKS5zdWJzY3JpYmUoe1xuICAgKiAgIG5leHQobnVtKSB7XG4gICAqICAgICBjb25zb2xlLmxvZyhudW0pXG4gICAqICAgfSxcbiAgICogICBjb21wbGV0ZSgpIHtcbiAgICogICAgIC8vIFdpbGwgbm90IGJlIGNhbGxlZCwgZXZlbiB3aGVuIGNhbmNlbGxpbmcgc3Vic2NyaXB0aW9uLlxuICAgKiAgICAgY29uc29sZS5sb2coJ2NvbXBsZXRlZCEnKTtcbiAgICogICB9XG4gICAqIH0pO1xuICAgKlxuICAgKiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICogICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICogICBjb25zb2xlLmxvZygndW5zdWJzY3JpYmVkIScpO1xuICAgKiB9LCAyNTAwKTtcbiAgICpcbiAgICogLy8gTG9nczpcbiAgICogLy8gMCBhZnRlciAxc1xuICAgKiAvLyAxIGFmdGVyIDJzXG4gICAqIC8vICd1bnN1YnNjcmliZWQhJyBhZnRlciAyLjVzXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gb2JzZXJ2ZXJPck5leHQgRWl0aGVyIGFuIHtAbGluayBPYnNlcnZlcn0gd2l0aCBzb21lIG9yIGFsbCBjYWxsYmFjayBtZXRob2RzLFxuICAgKiBvciB0aGUgYG5leHRgIGhhbmRsZXIgdGhhdCBpcyBjYWxsZWQgZm9yIGVhY2ggdmFsdWUgZW1pdHRlZCBmcm9tIHRoZSBzdWJzY3JpYmVkIE9ic2VydmFibGUuXG4gICAqIEBwYXJhbSBlcnJvciBBIGhhbmRsZXIgZm9yIGEgdGVybWluYWwgZXZlbnQgcmVzdWx0aW5nIGZyb20gYW4gZXJyb3IuIElmIG5vIGVycm9yIGhhbmRsZXIgaXMgcHJvdmlkZWQsXG4gICAqIHRoZSBlcnJvciB3aWxsIGJlIHRocm93biBhc3luY2hyb25vdXNseSBhcyB1bmhhbmRsZWQuXG4gICAqIEBwYXJhbSBjb21wbGV0ZSBBIGhhbmRsZXIgZm9yIGEgdGVybWluYWwgZXZlbnQgcmVzdWx0aW5nIGZyb20gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLlxuICAgKiBAcmV0dXJuIEEgc3Vic2NyaXB0aW9uIHJlZmVyZW5jZSB0byB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVycy5cbiAgICovXG4gIHN1YnNjcmliZShcbiAgICBvYnNlcnZlck9yTmV4dD86IFBhcnRpYWw8T2JzZXJ2ZXI8VD4+IHwgKCh2YWx1ZTogVCkgPT4gdm9pZCkgfCBudWxsLFxuICAgIGVycm9yPzogKChlcnJvcjogYW55KSA9PiB2b2lkKSB8IG51bGwsXG4gICAgY29tcGxldGU/OiAoKCkgPT4gdm9pZCkgfCBudWxsXG4gICk6IFN1YnNjcmlwdGlvbiB7XG4gICAgY29uc3Qgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcblxuICAgIGVycm9yQ29udGV4dCgoKSA9PiB7XG4gICAgICBjb25zdCB7IG9wZXJhdG9yLCBzb3VyY2UgfSA9IHRoaXM7XG4gICAgICBzdWJzY3JpYmVyLmFkZChcbiAgICAgICAgb3BlcmF0b3JcbiAgICAgICAgICA/IC8vIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIHN1YnNjcmlwdGlvbiBpbiB0aGVcbiAgICAgICAgICAgIC8vIG9wZXJhdG9yIGNoYWluIHRvIG9uZSBvZiBvdXIgbGlmdGVkIG9wZXJhdG9ycy5cbiAgICAgICAgICAgIG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKVxuICAgICAgICAgIDogc291cmNlXG4gICAgICAgICAgPyAvLyBJZiBgc291cmNlYCBoYXMgYSB2YWx1ZSwgYnV0IGBvcGVyYXRvcmAgZG9lcyBub3QsIHNvbWV0aGluZyB0aGF0XG4gICAgICAgICAgICAvLyBoYWQgaW50aW1hdGUga25vd2xlZGdlIG9mIG91ciBBUEksIGxpa2Ugb3VyIGBTdWJqZWN0YCwgbXVzdCBoYXZlXG4gICAgICAgICAgICAvLyBzZXQgaXQuIFdlJ3JlIGdvaW5nIHRvIGp1c3QgY2FsbCBgX3N1YnNjcmliZWAgZGlyZWN0bHkuXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICA6IC8vIEluIGFsbCBvdGhlciBjYXNlcywgd2UncmUgbGlrZWx5IHdyYXBwaW5nIGEgdXNlci1wcm92aWRlZCBpbml0aWFsaXplclxuICAgICAgICAgICAgLy8gZnVuY3Rpb24sIHNvIHdlIG5lZWQgdG8gY2F0Y2ggZXJyb3JzIGFuZCBoYW5kbGUgdGhlbSBhcHByb3ByaWF0ZWx5LlxuICAgICAgICAgICAgdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHByb3RlY3RlZCBfdHJ5U3Vic2NyaWJlKHNpbms6IFN1YnNjcmliZXI8VD4pOiBUZWFyZG93bkxvZ2ljIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmV0dXJuIGFueXRoaW5nIGluIHRoaXMgY2FzZSxcbiAgICAgIC8vIGJlY2F1c2UgaXQncyBqdXN0IGdvaW5nIHRvIHRyeSB0byBgYWRkKClgIHRvIGEgc3Vic2NyaXB0aW9uXG4gICAgICAvLyBhYm92ZS5cbiAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBhcyBhIE5PTi1DQU5DRUxMQUJMRSBtZWFucyBvZiBzdWJzY3JpYmluZyB0byBhbiBvYnNlcnZhYmxlLCBmb3IgdXNlIHdpdGhcbiAgICogQVBJcyB0aGF0IGV4cGVjdCBwcm9taXNlcywgbGlrZSBgYXN5bmMvYXdhaXRgLiBZb3UgY2Fubm90IHVuc3Vic2NyaWJlIGZyb20gdGhpcy5cbiAgICpcbiAgICogKipXQVJOSU5HKio6IE9ubHkgdXNlIHRoaXMgd2l0aCBvYnNlcnZhYmxlcyB5b3UgKmtub3cqIHdpbGwgY29tcGxldGUuIElmIHRoZSBzb3VyY2VcbiAgICogb2JzZXJ2YWJsZSBkb2VzIG5vdCBjb21wbGV0ZSwgeW91IHdpbGwgZW5kIHVwIHdpdGggYSBwcm9taXNlIHRoYXQgaXMgaHVuZyB1cCwgYW5kXG4gICAqIHBvdGVudGlhbGx5IGFsbCBvZiB0aGUgc3RhdGUgb2YgYW4gYXN5bmMgZnVuY3Rpb24gaGFuZ2luZyBvdXQgaW4gbWVtb3J5LiBUbyBhdm9pZFxuICAgKiB0aGlzIHNpdHVhdGlvbiwgbG9vayBpbnRvIGFkZGluZyBzb21ldGhpbmcgbGlrZSB7QGxpbmsgdGltZW91dH0sIHtAbGluayB0YWtlfSxcbiAgICoge0BsaW5rIHRha2VXaGlsZX0sIG9yIHtAbGluayB0YWtlVW50aWx9IGFtb25nc3Qgb3RoZXJzLlxuICAgKlxuICAgKiAjIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBgdHNcbiAgICogaW1wb3J0IHsgaW50ZXJ2YWwsIHRha2UgfSBmcm9tICdyeGpzJztcbiAgICpcbiAgICogY29uc3Qgc291cmNlJCA9IGludGVydmFsKDEwMDApLnBpcGUodGFrZSg0KSk7XG4gICAqXG4gICAqIGFzeW5jIGZ1bmN0aW9uIGdldFRvdGFsKCkge1xuICAgKiAgIGxldCB0b3RhbCA9IDA7XG4gICAqXG4gICAqICAgYXdhaXQgc291cmNlJC5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICogICAgIHRvdGFsICs9IHZhbHVlO1xuICAgKiAgICAgY29uc29sZS5sb2coJ29ic2VydmFibGUgLT4gJyArIHZhbHVlKTtcbiAgICogICB9KTtcbiAgICpcbiAgICogICByZXR1cm4gdG90YWw7XG4gICAqIH1cbiAgICpcbiAgICogZ2V0VG90YWwoKS50aGVuKFxuICAgKiAgIHRvdGFsID0+IGNvbnNvbGUubG9nKCdUb3RhbDogJyArIHRvdGFsKVxuICAgKiApO1xuICAgKlxuICAgKiAvLyBFeHBlY3RlZDpcbiAgICogLy8gJ29ic2VydmFibGUgLT4gMCdcbiAgICogLy8gJ29ic2VydmFibGUgLT4gMSdcbiAgICogLy8gJ29ic2VydmFibGUgLT4gMidcbiAgICogLy8gJ29ic2VydmFibGUgLT4gMydcbiAgICogLy8gJ1RvdGFsOiA2J1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIG5leHQgQSBoYW5kbGVyIGZvciBlYWNoIHZhbHVlIGVtaXR0ZWQgYnkgdGhlIG9ic2VydmFibGUuXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgZWl0aGVyIHJlc29sdmVzIG9uIG9ic2VydmFibGUgY29tcGxldGlvbiBvclxuICAgKiByZWplY3RzIHdpdGggdGhlIGhhbmRsZWQgZXJyb3IuXG4gICAqL1xuICBmb3JFYWNoKG5leHQ6ICh2YWx1ZTogVCkgPT4gdm9pZCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBuZXh0IGEgaGFuZGxlciBmb3IgZWFjaCB2YWx1ZSBlbWl0dGVkIGJ5IHRoZSBvYnNlcnZhYmxlXG4gICAqIEBwYXJhbSBwcm9taXNlQ3RvciBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHVzZWQgdG8gaW5zdGFudGlhdGUgdGhlIFByb21pc2VcbiAgICogQHJldHVybiBhIHByb21pc2UgdGhhdCBlaXRoZXIgcmVzb2x2ZXMgb24gb2JzZXJ2YWJsZSBjb21wbGV0aW9uIG9yXG4gICAqICByZWplY3RzIHdpdGggdGhlIGhhbmRsZWQgZXJyb3JcbiAgICogQGRlcHJlY2F0ZWQgUGFzc2luZyBhIFByb21pc2UgY29uc3RydWN0b3Igd2lsbCBubyBsb25nZXIgYmUgYXZhaWxhYmxlXG4gICAqIGluIHVwY29taW5nIHZlcnNpb25zIG9mIFJ4SlMuIFRoaXMgaXMgYmVjYXVzZSBpdCBhZGRzIHdlaWdodCB0byB0aGUgbGlicmFyeSwgZm9yIHZlcnlcbiAgICogbGl0dGxlIGJlbmVmaXQuIElmIHlvdSBuZWVkIHRoaXMgZnVuY3Rpb25hbGl0eSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZWl0aGVyXG4gICAqIHBvbHlmaWxsIFByb21pc2UsIG9yIHlvdSBjcmVhdGUgYW4gYWRhcHRlciB0byBjb252ZXJ0IHRoZSByZXR1cm5lZCBuYXRpdmUgcHJvbWlzZVxuICAgKiB0byB3aGF0ZXZlciBwcm9taXNlIGltcGxlbWVudGF0aW9uIHlvdSB3YW50ZWQuIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAgICovXG4gIGZvckVhY2gobmV4dDogKHZhbHVlOiBUKSA9PiB2b2lkLCBwcm9taXNlQ3RvcjogUHJvbWlzZUNvbnN0cnVjdG9yTGlrZSk6IFByb21pc2U8dm9pZD47XG5cbiAgZm9yRWFjaChuZXh0OiAodmFsdWU6IFQpID0+IHZvaWQsIHByb21pc2VDdG9yPzogUHJvbWlzZUNvbnN0cnVjdG9yTGlrZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuXG4gICAgcmV0dXJuIG5ldyBwcm9taXNlQ3Rvcjx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyPFQ+KHtcbiAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSkgYXMgUHJvbWlzZTx2b2lkPjtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJvdGVjdGVkIF9zdWJzY3JpYmUoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxhbnk+KTogVGVhcmRvd25Mb2dpYyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlPy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gIH1cblxuICAvKipcbiAgICogQW4gaW50ZXJvcCBwb2ludCBkZWZpbmVkIGJ5IHRoZSBlczctb2JzZXJ2YWJsZSBzcGVjIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbiAgICogQHJldHVybiBUaGlzIGluc3RhbmNlIG9mIHRoZSBvYnNlcnZhYmxlLlxuICAgKi9cbiAgW1N5bWJvbF9vYnNlcnZhYmxlXSgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuICBwaXBlKCk6IE9ic2VydmFibGU8VD47XG4gIHBpcGU8QT4ob3AxOiBPcGVyYXRvckZ1bmN0aW9uPFQsIEE+KTogT2JzZXJ2YWJsZTxBPjtcbiAgcGlwZTxBLCBCPihvcDE6IE9wZXJhdG9yRnVuY3Rpb248VCwgQT4sIG9wMjogT3BlcmF0b3JGdW5jdGlvbjxBLCBCPik6IE9ic2VydmFibGU8Qj47XG4gIHBpcGU8QSwgQiwgQz4ob3AxOiBPcGVyYXRvckZ1bmN0aW9uPFQsIEE+LCBvcDI6IE9wZXJhdG9yRnVuY3Rpb248QSwgQj4sIG9wMzogT3BlcmF0b3JGdW5jdGlvbjxCLCBDPik6IE9ic2VydmFibGU8Qz47XG4gIHBpcGU8QSwgQiwgQywgRD4oXG4gICAgb3AxOiBPcGVyYXRvckZ1bmN0aW9uPFQsIEE+LFxuICAgIG9wMjogT3BlcmF0b3JGdW5jdGlvbjxBLCBCPixcbiAgICBvcDM6IE9wZXJhdG9yRnVuY3Rpb248QiwgQz4sXG4gICAgb3A0OiBPcGVyYXRvckZ1bmN0aW9uPEMsIEQ+XG4gICk6IE9ic2VydmFibGU8RD47XG4gIHBpcGU8QSwgQiwgQywgRCwgRT4oXG4gICAgb3AxOiBPcGVyYXRvckZ1bmN0aW9uPFQsIEE+LFxuICAgIG9wMjogT3BlcmF0b3JGdW5jdGlvbjxBLCBCPixcbiAgICBvcDM6IE9wZXJhdG9yRnVuY3Rpb248QiwgQz4sXG4gICAgb3A0OiBPcGVyYXRvckZ1bmN0aW9uPEMsIEQ+LFxuICAgIG9wNTogT3BlcmF0b3JGdW5jdGlvbjxELCBFPlxuICApOiBPYnNlcnZhYmxlPEU+O1xuICBwaXBlPEEsIEIsIEMsIEQsIEUsIEY+KFxuICAgIG9wMTogT3BlcmF0b3JGdW5jdGlvbjxULCBBPixcbiAgICBvcDI6IE9wZXJhdG9yRnVuY3Rpb248QSwgQj4sXG4gICAgb3AzOiBPcGVyYXRvckZ1bmN0aW9uPEIsIEM+LFxuICAgIG9wNDogT3BlcmF0b3JGdW5jdGlvbjxDLCBEPixcbiAgICBvcDU6IE9wZXJhdG9yRnVuY3Rpb248RCwgRT4sXG4gICAgb3A2OiBPcGVyYXRvckZ1bmN0aW9uPEUsIEY+XG4gICk6IE9ic2VydmFibGU8Rj47XG4gIHBpcGU8QSwgQiwgQywgRCwgRSwgRiwgRz4oXG4gICAgb3AxOiBPcGVyYXRvckZ1bmN0aW9uPFQsIEE+LFxuICAgIG9wMjogT3BlcmF0b3JGdW5jdGlvbjxBLCBCPixcbiAgICBvcDM6IE9wZXJhdG9yRnVuY3Rpb248QiwgQz4sXG4gICAgb3A0OiBPcGVyYXRvckZ1bmN0aW9uPEMsIEQ+LFxuICAgIG9wNTogT3BlcmF0b3JGdW5jdGlvbjxELCBFPixcbiAgICBvcDY6IE9wZXJhdG9yRnVuY3Rpb248RSwgRj4sXG4gICAgb3A3OiBPcGVyYXRvckZ1bmN0aW9uPEYsIEc+XG4gICk6IE9ic2VydmFibGU8Rz47XG4gIHBpcGU8QSwgQiwgQywgRCwgRSwgRiwgRywgSD4oXG4gICAgb3AxOiBPcGVyYXRvckZ1bmN0aW9uPFQsIEE+LFxuICAgIG9wMjogT3BlcmF0b3JGdW5jdGlvbjxBLCBCPixcbiAgICBvcDM6IE9wZXJhdG9yRnVuY3Rpb248QiwgQz4sXG4gICAgb3A0OiBPcGVyYXRvckZ1bmN0aW9uPEMsIEQ+LFxuICAgIG9wNTogT3BlcmF0b3JGdW5jdGlvbjxELCBFPixcbiAgICBvcDY6IE9wZXJhdG9yRnVuY3Rpb248RSwgRj4sXG4gICAgb3A3OiBPcGVyYXRvckZ1bmN0aW9uPEYsIEc+LFxuICAgIG9wODogT3BlcmF0b3JGdW5jdGlvbjxHLCBIPlxuICApOiBPYnNlcnZhYmxlPEg+O1xuICBwaXBlPEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEk+KFxuICAgIG9wMTogT3BlcmF0b3JGdW5jdGlvbjxULCBBPixcbiAgICBvcDI6IE9wZXJhdG9yRnVuY3Rpb248QSwgQj4sXG4gICAgb3AzOiBPcGVyYXRvckZ1bmN0aW9uPEIsIEM+LFxuICAgIG9wNDogT3BlcmF0b3JGdW5jdGlvbjxDLCBEPixcbiAgICBvcDU6IE9wZXJhdG9yRnVuY3Rpb248RCwgRT4sXG4gICAgb3A2OiBPcGVyYXRvckZ1bmN0aW9uPEUsIEY+LFxuICAgIG9wNzogT3BlcmF0b3JGdW5jdGlvbjxGLCBHPixcbiAgICBvcDg6IE9wZXJhdG9yRnVuY3Rpb248RywgSD4sXG4gICAgb3A5OiBPcGVyYXRvckZ1bmN0aW9uPEgsIEk+XG4gICk6IE9ic2VydmFibGU8ST47XG4gIHBpcGU8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgST4oXG4gICAgb3AxOiBPcGVyYXRvckZ1bmN0aW9uPFQsIEE+LFxuICAgIG9wMjogT3BlcmF0b3JGdW5jdGlvbjxBLCBCPixcbiAgICBvcDM6IE9wZXJhdG9yRnVuY3Rpb248QiwgQz4sXG4gICAgb3A0OiBPcGVyYXRvckZ1bmN0aW9uPEMsIEQ+LFxuICAgIG9wNTogT3BlcmF0b3JGdW5jdGlvbjxELCBFPixcbiAgICBvcDY6IE9wZXJhdG9yRnVuY3Rpb248RSwgRj4sXG4gICAgb3A3OiBPcGVyYXRvckZ1bmN0aW9uPEYsIEc+LFxuICAgIG9wODogT3BlcmF0b3JGdW5jdGlvbjxHLCBIPixcbiAgICBvcDk6IE9wZXJhdG9yRnVuY3Rpb248SCwgST4sXG4gICAgLi4ub3BlcmF0aW9uczogT3BlcmF0b3JGdW5jdGlvbjxhbnksIGFueT5bXVxuICApOiBPYnNlcnZhYmxlPHVua25vd24+O1xuICAvKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHN0aXRjaCB0b2dldGhlciBmdW5jdGlvbmFsIG9wZXJhdG9ycyBpbnRvIGEgY2hhaW4uXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBgdHNcbiAgICogaW1wb3J0IHsgaW50ZXJ2YWwsIGZpbHRlciwgbWFwLCBzY2FuIH0gZnJvbSAncnhqcyc7XG4gICAqXG4gICAqIGludGVydmFsKDEwMDApXG4gICAqICAgLnBpcGUoXG4gICAqICAgICBmaWx0ZXIoeCA9PiB4ICUgMiA9PT0gMCksXG4gICAqICAgICBtYXAoeCA9PiB4ICsgeCksXG4gICAqICAgICBzY2FuKChhY2MsIHgpID0+IGFjYyArIHgpXG4gICAqICAgKVxuICAgKiAgIC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBPYnNlcnZhYmxlIHJlc3VsdCBvZiBhbGwgdGhlIG9wZXJhdG9ycyBoYXZpbmcgYmVlbiBjYWxsZWRcbiAgICogaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBwYXNzZWQgaW4uXG4gICAqL1xuICBwaXBlKC4uLm9wZXJhdGlvbnM6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBhbnk+W10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBwaXBlRnJvbUFycmF5KG9wZXJhdGlvbnMpKHRoaXMpO1xuICB9XG5cbiAgLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4gIC8qKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCB3aXRoIHtAbGluayBmaXJzdFZhbHVlRnJvbX0gYW5kIHtAbGluayBsYXN0VmFsdWVGcm9tfS4gV2lsbCBiZSByZW1vdmVkIGluIHY4LiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy90by1wcm9taXNlICovXG4gIHRvUHJvbWlzZSgpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAvKiogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgd2l0aCB7QGxpbmsgZmlyc3RWYWx1ZUZyb219IGFuZCB7QGxpbmsgbGFzdFZhbHVlRnJvbX0uIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvdG8tcHJvbWlzZSAqL1xuICB0b1Byb21pc2UoUHJvbWlzZUN0b3I6IHR5cGVvZiBQcm9taXNlKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgLyoqIEBkZXByZWNhdGVkIFJlcGxhY2VkIHdpdGgge0BsaW5rIGZpcnN0VmFsdWVGcm9tfSBhbmQge0BsaW5rIGxhc3RWYWx1ZUZyb219LiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL3RvLXByb21pc2UgKi9cbiAgdG9Qcm9taXNlKFByb21pc2VDdG9yOiBQcm9taXNlQ29uc3RydWN0b3JMaWtlKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoaXMgT2JzZXJ2YWJsZSBhbmQgZ2V0IGEgUHJvbWlzZSByZXNvbHZpbmcgb25cbiAgICogYGNvbXBsZXRlYCB3aXRoIHRoZSBsYXN0IGVtaXNzaW9uIChpZiBhbnkpLlxuICAgKlxuICAgKiAqKldBUk5JTkcqKjogT25seSB1c2UgdGhpcyB3aXRoIG9ic2VydmFibGVzIHlvdSAqa25vdyogd2lsbCBjb21wbGV0ZS4gSWYgdGhlIHNvdXJjZVxuICAgKiBvYnNlcnZhYmxlIGRvZXMgbm90IGNvbXBsZXRlLCB5b3Ugd2lsbCBlbmQgdXAgd2l0aCBhIHByb21pc2UgdGhhdCBpcyBodW5nIHVwLCBhbmRcbiAgICogcG90ZW50aWFsbHkgYWxsIG9mIHRoZSBzdGF0ZSBvZiBhbiBhc3luYyBmdW5jdGlvbiBoYW5naW5nIG91dCBpbiBtZW1vcnkuIFRvIGF2b2lkXG4gICAqIHRoaXMgc2l0dWF0aW9uLCBsb29rIGludG8gYWRkaW5nIHNvbWV0aGluZyBsaWtlIHtAbGluayB0aW1lb3V0fSwge0BsaW5rIHRha2V9LFxuICAgKiB7QGxpbmsgdGFrZVdoaWxlfSwgb3Ige0BsaW5rIHRha2VVbnRpbH0gYW1vbmdzdCBvdGhlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBbcHJvbWlzZUN0b3JdIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gdXNlZCB0byBpbnN0YW50aWF0ZVxuICAgKiB0aGUgUHJvbWlzZVxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGxhc3QgdmFsdWUgZW1pdCwgb3JcbiAgICogcmVqZWN0cyBvbiBhbiBlcnJvci4gSWYgdGhlcmUgd2VyZSBubyBlbWlzc2lvbnMsIFByb21pc2VcbiAgICogcmVzb2x2ZXMgd2l0aCB1bmRlZmluZWQuXG4gICAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIHdpdGgge0BsaW5rIGZpcnN0VmFsdWVGcm9tfSBhbmQge0BsaW5rIGxhc3RWYWx1ZUZyb219LiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL3RvLXByb21pc2VcbiAgICovXG4gIHRvUHJvbWlzZShwcm9taXNlQ3Rvcj86IFByb21pc2VDb25zdHJ1Y3Rvckxpa2UpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcblxuICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHZhbHVlOiBUIHwgdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zdWJzY3JpYmUoXG4gICAgICAgICh4OiBUKSA9PiAodmFsdWUgPSB4KSxcbiAgICAgICAgKGVycjogYW55KSA9PiByZWplY3QoZXJyKSxcbiAgICAgICAgKCkgPT4gcmVzb2x2ZSh2YWx1ZSlcbiAgICAgICk7XG4gICAgfSkgYXMgUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgfVxufVxuXG4vKipcbiAqIERlY2lkZXMgYmV0d2VlbiBhIHBhc3NlZCBwcm9taXNlIGNvbnN0cnVjdG9yIGZyb20gY29uc3VtaW5nIGNvZGUsXG4gKiBBIGRlZmF1bHQgY29uZmlndXJlZCBwcm9taXNlIGNvbnN0cnVjdG9yLCBhbmQgdGhlIG5hdGl2ZSBwcm9taXNlXG4gKiBjb25zdHJ1Y3RvciBhbmQgcmV0dXJucyBpdC4gSWYgbm90aGluZyBjYW4gYmUgZm91bmQsIGl0IHdpbGwgdGhyb3dcbiAqIGFuIGVycm9yLlxuICogQHBhcmFtIHByb21pc2VDdG9yIFRoZSBvcHRpb25hbCBwcm9taXNlIGNvbnN0cnVjdG9yIHRvIHBhc3NlZCBieSBjb25zdW1pbmcgY29kZVxuICovXG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3RvcjogUHJvbWlzZUNvbnN0cnVjdG9yTGlrZSB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gcHJvbWlzZUN0b3IgPz8gY29uZmlnLlByb21pc2UgPz8gUHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gaXNPYnNlcnZlcjxUPih2YWx1ZTogYW55KTogdmFsdWUgaXMgT2JzZXJ2ZXI8VD4ge1xuICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cblxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyPFQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBTdWJzY3JpYmVyPFQ+IHtcbiAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXIpIHx8IChpc09ic2VydmVyKHZhbHVlKSAmJiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkpO1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uJztcblxuLyoqXG4gKiBVc2VkIHRvIGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYW4gT2JzZXJ2YWJsZSB3aXRoIGEgbGlmdCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0xpZnQoc291cmNlOiBhbnkpOiBzb3VyY2UgaXMgeyBsaWZ0OiBJbnN0YW5jZVR5cGU8dHlwZW9mIE9ic2VydmFibGU+WydsaWZ0J10gfSB7XG4gIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZT8ubGlmdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBgT3BlcmF0b3JGdW5jdGlvbmAuIFVzZWQgdG8gZGVmaW5lIG9wZXJhdG9ycyB0aHJvdWdob3V0IHRoZSBsaWJyYXJ5IGluIGEgY29uY2lzZSB3YXkuXG4gKiBAcGFyYW0gaW5pdCBUaGUgbG9naWMgdG8gY29ubmVjdCB0aGUgbGlmdGVkU291cmNlIHRvIHRoZSBzdWJzY3JpYmVyIGF0IHRoZSBtb21lbnQgb2Ygc3Vic2NyaXB0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3BlcmF0ZTxULCBSPihcbiAgaW5pdDogKGxpZnRlZFNvdXJjZTogT2JzZXJ2YWJsZTxUPiwgc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxSPikgPT4gKCgpID0+IHZvaWQpIHwgdm9pZFxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBSPiB7XG4gIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiB7XG4gICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uICh0aGlzOiBTdWJzY3JpYmVyPFI+LCBsaWZ0ZWRTb3VyY2U6IE9ic2VydmFibGU8VD4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICB9O1xufVxuIiwgImltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGFuIGBPcGVyYXRvclN1YnNjcmliZXJgLlxuICogQHBhcmFtIGRlc3RpbmF0aW9uIFRoZSBkb3duc3RyZWFtIHN1YnNjcmliZXIuXG4gKiBAcGFyYW0gb25OZXh0IEhhbmRsZXMgbmV4dCB2YWx1ZXMsIG9ubHkgY2FsbGVkIGlmIHRoaXMgc3Vic2NyaWJlciBpcyBub3Qgc3RvcHBlZCBvciBjbG9zZWQuIEFueVxuICogZXJyb3IgdGhhdCBvY2N1cnMgaW4gdGhpcyBmdW5jdGlvbiBpcyBjYXVnaHQgYW5kIHNlbnQgdG8gdGhlIGBlcnJvcmAgbWV0aG9kIG9mIHRoaXMgc3Vic2NyaWJlci5cbiAqIEBwYXJhbSBvbkVycm9yIEhhbmRsZXMgZXJyb3JzIGZyb20gdGhlIHN1YnNjcmlwdGlvbiwgYW55IGVycm9ycyB0aGF0IG9jY3VyIGluIHRoaXMgaGFuZGxlciBhcmUgY2F1Z2h0XG4gKiBhbmQgc2VuZCB0byB0aGUgYGRlc3RpbmF0aW9uYCBlcnJvciBoYW5kbGVyLlxuICogQHBhcmFtIG9uQ29tcGxldGUgSGFuZGxlcyBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBzdWJzY3JpcHRpb24uIEFueSBlcnJvcnMgdGhhdCBvY2N1ciBpblxuICogdGhpcyBoYW5kbGVyIGFyZSBzZW50IHRvIHRoZSBgZGVzdGluYXRpb25gIGVycm9yIGhhbmRsZXIuXG4gKiBAcGFyYW0gb25GaW5hbGl6ZSBBZGRpdGlvbmFsIHRlYXJkb3duIGxvZ2ljIGhlcmUuIFRoaXMgd2lsbCBvbmx5IGJlIGNhbGxlZCBvbiB0ZWFyZG93biBpZiB0aGVcbiAqIHN1YnNjcmliZXIgaXRzZWxmIGlzIG5vdCBhbHJlYWR5IGNsb3NlZC4gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgYWxsIG90aGVyIHRlYXJkb3duIGxvZ2ljIGlzIGV4ZWN1dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyPFQ+KFxuICBkZXN0aW5hdGlvbjogU3Vic2NyaWJlcjxhbnk+LFxuICBvbk5leHQ/OiAodmFsdWU6IFQpID0+IHZvaWQsXG4gIG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkLFxuICBvbkVycm9yPzogKGVycjogYW55KSA9PiB2b2lkLFxuICBvbkZpbmFsaXplPzogKCkgPT4gdm9pZFxuKTogU3Vic2NyaWJlcjxUPiB7XG4gIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxuXG4vKipcbiAqIEEgZ2VuZXJpYyBoZWxwZXIgZm9yIGFsbG93aW5nIG9wZXJhdG9ycyB0byBiZSBjcmVhdGVkIHdpdGggYSBTdWJzY3JpYmVyIGFuZFxuICogdXNlIGNsb3N1cmVzIHRvIGNhcHR1cmUgbmVjZXNzYXJ5IHN0YXRlIGZyb20gdGhlIG9wZXJhdG9yIGZ1bmN0aW9uIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGNsYXNzIE9wZXJhdG9yU3Vic2NyaWJlcjxUPiBleHRlbmRzIFN1YnNjcmliZXI8VD4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBhbiBgT3BlcmF0b3JTdWJzY3JpYmVyYC5cbiAgICogQHBhcmFtIGRlc3RpbmF0aW9uIFRoZSBkb3duc3RyZWFtIHN1YnNjcmliZXIuXG4gICAqIEBwYXJhbSBvbk5leHQgSGFuZGxlcyBuZXh0IHZhbHVlcywgb25seSBjYWxsZWQgaWYgdGhpcyBzdWJzY3JpYmVyIGlzIG5vdCBzdG9wcGVkIG9yIGNsb3NlZC4gQW55XG4gICAqIGVycm9yIHRoYXQgb2NjdXJzIGluIHRoaXMgZnVuY3Rpb24gaXMgY2F1Z2h0IGFuZCBzZW50IHRvIHRoZSBgZXJyb3JgIG1ldGhvZCBvZiB0aGlzIHN1YnNjcmliZXIuXG4gICAqIEBwYXJhbSBvbkVycm9yIEhhbmRsZXMgZXJyb3JzIGZyb20gdGhlIHN1YnNjcmlwdGlvbiwgYW55IGVycm9ycyB0aGF0IG9jY3VyIGluIHRoaXMgaGFuZGxlciBhcmUgY2F1Z2h0XG4gICAqIGFuZCBzZW5kIHRvIHRoZSBgZGVzdGluYXRpb25gIGVycm9yIGhhbmRsZXIuXG4gICAqIEBwYXJhbSBvbkNvbXBsZXRlIEhhbmRsZXMgY29tcGxldGlvbiBub3RpZmljYXRpb24gZnJvbSB0aGUgc3Vic2NyaXB0aW9uLiBBbnkgZXJyb3JzIHRoYXQgb2NjdXIgaW5cbiAgICogdGhpcyBoYW5kbGVyIGFyZSBzZW50IHRvIHRoZSBgZGVzdGluYXRpb25gIGVycm9yIGhhbmRsZXIuXG4gICAqIEBwYXJhbSBvbkZpbmFsaXplIEFkZGl0aW9uYWwgZmluYWxpemF0aW9uIGxvZ2ljIGhlcmUuIFRoaXMgd2lsbCBvbmx5IGJlIGNhbGxlZCBvbiBmaW5hbGl6YXRpb24gaWYgdGhlXG4gICAqIHN1YnNjcmliZXIgaXRzZWxmIGlzIG5vdCBhbHJlYWR5IGNsb3NlZC4gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgYWxsIG90aGVyIGZpbmFsaXphdGlvbiBsb2dpYyBpcyBleGVjdXRlZC5cbiAgICogQHBhcmFtIHNob3VsZFVuc3Vic2NyaWJlIEFuIG9wdGlvbmFsIGNoZWNrIHRvIHNlZSBpZiBhbiB1bnN1YnNjcmliZSBjYWxsIHNob3VsZCB0cnVseSB1bnN1YnNjcmliZS5cbiAgICogTk9URTogVGhpcyBjdXJyZW50bHkgKipPTkxZKiogZXhpc3RzIHRvIHN1cHBvcnQgdGhlIHN0cmFuZ2UgYmVoYXZpb3Igb2Yge0BsaW5rIGdyb3VwQnl9LCB3aGVyZSB1bnN1YnNjcmlwdGlvblxuICAgKiB0byB0aGUgcmVzdWx0aW5nIG9ic2VydmFibGUgZG9lcyBub3QgYWN0dWFsbHkgZGlzY29ubmVjdCBmcm9tIHRoZSBzb3VyY2UgaWYgdGhlcmUgYXJlIGFjdGl2ZSBzdWJzY3JpcHRpb25zXG4gICAqIHRvIGFueSBncm91cGVkIG9ic2VydmFibGUuIChETyBOT1QgRVhQT1NFIE9SIFVTRSBFWFRFUk5BTExZISEhKVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgZGVzdGluYXRpb246IFN1YnNjcmliZXI8YW55PixcbiAgICBvbk5leHQ/OiAodmFsdWU6IFQpID0+IHZvaWQsXG4gICAgb25Db21wbGV0ZT86ICgpID0+IHZvaWQsXG4gICAgb25FcnJvcj86IChlcnI6IGFueSkgPT4gdm9pZCxcbiAgICBwcml2YXRlIG9uRmluYWxpemU/OiAoKSA9PiB2b2lkLFxuICAgIHByaXZhdGUgc2hvdWxkVW5zdWJzY3JpYmU/OiAoKSA9PiBib29sZWFuXG4gICkge1xuICAgIC8vIEl0J3MgaW1wb3J0YW50IC0gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgLSB0aGF0IGFsbCBvZiB0aGlzIGNsYXNzJ3NcbiAgICAvLyBtZW1iZXJzIGFyZSBpbml0aWFsaXplZCBhbmQgdGhhdCB0aGV5IGFyZSBhbHdheXMgaW5pdGlhbGl6ZWQgaW4gdGhlIHNhbWVcbiAgICAvLyBvcmRlci4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IGFsbCBPcGVyYXRvclN1YnNjcmliZXIgaW5zdGFuY2VzIGhhdmUgdGhlXG4gICAgLy8gc2FtZSBoaWRkZW4gY2xhc3MgaW4gVjguIFRoaXMsIGluIHR1cm4sIHdpbGwgaGVscCBrZWVwIHRoZSBudW1iZXIgb2ZcbiAgICAvLyBoaWRkZW4gY2xhc3NlcyBpbnZvbHZlZCBpbiBwcm9wZXJ0eSBhY2Nlc3NlcyB3aXRoaW4gdGhlIGJhc2UgY2xhc3MgYXNcbiAgICAvLyBsb3cgYXMgcG9zc2libGUuIElmIHRoZSBudW1iZXIgb2YgaGlkZGVuIGNsYXNzZXMgaW52b2x2ZWQgZXhjZWVkcyBmb3VyLFxuICAgIC8vIHRoZSBwcm9wZXJ0eSBhY2Nlc3NlcyB3aWxsIGJlY29tZSBtZWdhbW9ycGhpYyBhbmQgcGVyZm9ybWFuY2UgcGVuYWx0aWVzXG4gICAgLy8gd2lsbCBiZSBpbmN1cnJlZCAtIGkuZS4gaW5saW5lIGNhY2hlcyB3b24ndCBiZSB1c2VkLlxuICAgIC8vXG4gICAgLy8gVGhlIHJlYXNvbnMgZm9yIGVuc3VyaW5nIGFsbCBpbnN0YW5jZXMgaGF2ZSB0aGUgc2FtZSBoaWRkZW4gY2xhc3MgYXJlXG4gICAgLy8gZnVydGhlciBkaXNjdXNzZWQgaW4gdGhpcyBibG9nIHBvc3QgZnJvbSBCZW5lZGlrdCBNZXVyZXI6XG4gICAgLy8gaHR0cHM6Ly9iZW5lZGlrdG1ldXJlci5kZS8yMDE4LzAzLzIzL2ltcGFjdC1vZi1wb2x5bW9ycGhpc20tb24tY29tcG9uZW50LWJhc2VkLWZyYW1ld29ya3MtbGlrZS1yZWFjdC9cbiAgICBzdXBlcihkZXN0aW5hdGlvbik7XG4gICAgdGhpcy5fbmV4dCA9IG9uTmV4dFxuICAgICAgPyBmdW5jdGlvbiAodGhpczogT3BlcmF0b3JTdWJzY3JpYmVyPFQ+LCB2YWx1ZTogVCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvbk5leHQodmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogc3VwZXIuX25leHQ7XG4gICAgdGhpcy5fZXJyb3IgPSBvbkVycm9yXG4gICAgICA/IGZ1bmN0aW9uICh0aGlzOiBPcGVyYXRvclN1YnNjcmliZXI8VD4sIGVycjogYW55KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIFNlbmQgYW55IGVycm9ycyB0aGF0IG9jY3VyIGRvd24gc3RyZWFtLlxuICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gRW5zdXJlIGZpbmFsaXphdGlvbi5cbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogc3VwZXIuX2Vycm9yO1xuICAgIHRoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgPyBmdW5jdGlvbiAodGhpczogT3BlcmF0b3JTdWJzY3JpYmVyPFQ+KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIFNlbmQgYW55IGVycm9ycyB0aGF0IG9jY3VyIGRvd24gc3RyZWFtLlxuICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gRW5zdXJlIGZpbmFsaXphdGlvbi5cbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogc3VwZXIuX2NvbXBsZXRlO1xuICB9XG5cbiAgdW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgY29uc3QgeyBjbG9zZWQgfSA9IHRoaXM7XG4gICAgICBzdXBlci51bnN1YnNjcmliZSgpO1xuICAgICAgLy8gRXhlY3V0ZSBhZGRpdGlvbmFsIHRlYXJkb3duIGlmIHdlIGhhdmUgYW55IGFuZCB3ZSBkaWRuJ3QgYWxyZWFkeSBkbyBzby5cbiAgICAgICFjbG9zZWQgJiYgdGhpcy5vbkZpbmFsaXplPy4oKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBDb25uZWN0YWJsZU9ic2VydmFibGUgfSBmcm9tICcuLi9vYnNlcnZhYmxlL0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5cbi8qKlxuICogTWFrZSBhIHtAbGluayBDb25uZWN0YWJsZU9ic2VydmFibGV9IGJlaGF2ZSBsaWtlIGEgb3JkaW5hcnkgb2JzZXJ2YWJsZSBhbmQgYXV0b21hdGVzIHRoZSB3YXlcbiAqIHlvdSBjYW4gY29ubmVjdCB0byBpdC5cbiAqXG4gKiBJbnRlcm5hbGx5IGl0IGNvdW50cyB0aGUgc3Vic2NyaXB0aW9ucyB0byB0aGUgb2JzZXJ2YWJsZSBhbmQgc3Vic2NyaWJlcyAob25seSBvbmNlKSB0byB0aGUgc291cmNlIGlmXG4gKiB0aGUgbnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMgaXMgbGFyZ2VyIHRoYW4gMC4gSWYgdGhlIG51bWJlciBvZiBzdWJzY3JpcHRpb25zIGlzIHNtYWxsZXIgdGhhbiAxLCBpdFxuICogdW5zdWJzY3JpYmVzIGZyb20gdGhlIHNvdXJjZS4gVGhpcyB3YXkgeW91IGNhbiBtYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nIGJlZm9yZSB0aGUgKnB1Ymxpc2hlZCpcbiAqIHJlZkNvdW50IGhhcyBvbmx5IGEgc2luZ2xlIHN1YnNjcmlwdGlvbiBpbmRlcGVuZGVudGx5IG9mIHRoZSBudW1iZXIgb2Ygc3Vic2NyaWJlcnMgdG8gdGhlIHRhcmdldFxuICogb2JzZXJ2YWJsZS5cbiAqXG4gKiBOb3RlIHRoYXQgdXNpbmcgdGhlIHtAbGluayBzaGFyZX0gb3BlcmF0b3IgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyB1c2luZyB0aGUgYG11bHRpY2FzdCgoKSA9PiBuZXcgU3ViamVjdCgpKWAgb3BlcmF0b3JcbiAqIChtYWtpbmcgdGhlIG9ic2VydmFibGUgaG90KSBhbmQgdGhlICpyZWZDb3VudCogb3BlcmF0b3IgaW4gYSBzZXF1ZW5jZS5cbiAqXG4gKiAhW10ocmVmQ291bnQucG5nKVxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgdGhlcmUgYXJlIHR3byBpbnRlcnZhbHMgdHVybmVkIGludG8gY29ubmVjdGFibGUgb2JzZXJ2YWJsZXNcbiAqIGJ5IHVzaW5nIHRoZSAqcHVibGlzaCogb3BlcmF0b3IuIFRoZSBmaXJzdCBvbmUgdXNlcyB0aGUgKnJlZkNvdW50KiBvcGVyYXRvciwgdGhlXG4gKiBzZWNvbmQgb25lIGRvZXMgbm90IHVzZSBpdC4gWW91IHdpbGwgbm90aWNlIHRoYXQgYSBjb25uZWN0YWJsZSBvYnNlcnZhYmxlIGRvZXMgbm90aGluZ1xuICogdW50aWwgeW91IGNhbGwgaXRzIGNvbm5lY3QgZnVuY3Rpb24uXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCB0YXAsIHB1Ymxpc2gsIHJlZkNvdW50IH0gZnJvbSAncnhqcyc7XG4gKlxuICogLy8gVHVybiB0aGUgaW50ZXJ2YWwgb2JzZXJ2YWJsZSBpbnRvIGEgQ29ubmVjdGFibGVPYnNlcnZhYmxlIChob3QpXG4gKiBjb25zdCByZWZDb3VudEludGVydmFsID0gaW50ZXJ2YWwoNDAwKS5waXBlKFxuICogICB0YXAobnVtID0+IGNvbnNvbGUubG9nKGByZWZDb3VudCAkeyBudW0gfWApKSxcbiAqICAgcHVibGlzaCgpLFxuICogICByZWZDb3VudCgpXG4gKiApO1xuICpcbiAqIGNvbnN0IHB1Ymxpc2hlZEludGVydmFsID0gaW50ZXJ2YWwoNDAwKS5waXBlKFxuICogICB0YXAobnVtID0+IGNvbnNvbGUubG9nKGBwdWJsaXNoICR7IG51bSB9YCkpLFxuICogICBwdWJsaXNoKClcbiAqICk7XG4gKlxuICogcmVmQ291bnRJbnRlcnZhbC5zdWJzY3JpYmUoKTtcbiAqIHJlZkNvdW50SW50ZXJ2YWwuc3Vic2NyaWJlKCk7XG4gKiAvLyAncmVmQ291bnQgMCcgLS0tLS0+ICdyZWZDb3VudCAxJyAtLS0tLT4gZXRjXG4gKiAvLyBBbGwgc3Vic2NyaXB0aW9ucyB3aWxsIHJlY2VpdmUgdGhlIHNhbWUgdmFsdWUgYW5kIHRoZSB0YXAgKGFuZFxuICogLy8gZXZlcnkgb3RoZXIgb3BlcmF0b3IpIGJlZm9yZSB0aGUgYHB1Ymxpc2hgIG9wZXJhdG9yIHdpbGwgYmUgZXhlY3V0ZWRcbiAqIC8vIG9ubHkgb25jZSBwZXIgZXZlbnQgaW5kZXBlbmRlbnRseSBvZiB0aGUgbnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMuXG4gKlxuICogcHVibGlzaGVkSW50ZXJ2YWwuc3Vic2NyaWJlKCk7XG4gKiAvLyBOb3RoaW5nIGhhcHBlbnMgdW50aWwgeW91IGNhbGwgLmNvbm5lY3QoKSBvbiB0aGUgb2JzZXJ2YWJsZS5cbiAqIGBgYFxuICpcbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGF1dG9tYXRlcyB0aGUgY29ubmVjdGlvblxuICogdG8gQ29ubmVjdGFibGVPYnNlcnZhYmxlLlxuICogQHNlZSB7QGxpbmsgQ29ubmVjdGFibGVPYnNlcnZhYmxlfVxuICogQHNlZSB7QGxpbmsgc2hhcmV9XG4gKiBAc2VlIHtAbGluayBwdWJsaXNofVxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgd2l0aCB0aGUge0BsaW5rIHNoYXJlfSBvcGVyYXRvci4gSG93IGBzaGFyZWAgaXMgdXNlZFxuICogd2lsbCBkZXBlbmQgb24gdGhlIGNvbm5lY3RhYmxlIG9ic2VydmFibGUgeW91IGNyZWF0ZWQganVzdCBwcmlvciB0byB0aGVcbiAqIGByZWZDb3VudGAgb3BlcmF0b3IuXG4gKiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9tdWx0aWNhc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZkNvdW50PFQ+KCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBsZXQgY29ubmVjdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgICAoc291cmNlIGFzIGFueSkuX3JlZkNvdW50Kys7XG5cbiAgICBjb25zdCByZWZDb3VudGVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICgpID0+IHtcbiAgICAgIGlmICghc291cmNlIHx8IChzb3VyY2UgYXMgYW55KS5fcmVmQ291bnQgPD0gMCB8fCAwIDwgLS0oc291cmNlIGFzIGFueSkuX3JlZkNvdW50KSB7XG4gICAgICAgIGNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vL1xuICAgICAgLy8gQ29tcGFyZSB0aGUgbG9jYWwgUmVmQ291bnRTdWJzY3JpYmVyJ3MgY29ubmVjdGlvbiBTdWJzY3JpcHRpb24gdG8gdGhlXG4gICAgICAvLyBjb25uZWN0aW9uIFN1YnNjcmlwdGlvbiBvbiB0aGUgc2hhcmVkIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS4gSW4gY2FzZXNcbiAgICAgIC8vIHdoZXJlIHRoZSBDb25uZWN0YWJsZU9ic2VydmFibGUgc291cmNlIHN5bmNocm9ub3VzbHkgZW1pdHMgdmFsdWVzLCBhbmRcbiAgICAgIC8vIHRoZSBSZWZDb3VudFN1YnNjcmliZXIncyBkb3duc3RyZWFtIE9ic2VydmVycyBzeW5jaHJvbm91c2x5IHVuc3Vic2NyaWJlLFxuICAgICAgLy8gZXhlY3V0aW9uIGNvbnRpbnVlcyB0byBoZXJlIGJlZm9yZSB0aGUgUmVmQ291bnRPcGVyYXRvciBoYXMgYSBjaGFuY2UgdG9cbiAgICAgIC8vIHN1cHBseSB0aGUgUmVmQ291bnRTdWJzY3JpYmVyIHdpdGggdGhlIHNoYXJlZCBjb25uZWN0aW9uIFN1YnNjcmlwdGlvbi5cbiAgICAgIC8vIEZvciBleGFtcGxlOlxuICAgICAgLy8gYGBgXG4gICAgICAvLyByYW5nZSgwLCAxMCkucGlwZShcbiAgICAgIC8vICAgcHVibGlzaCgpLFxuICAgICAgLy8gICByZWZDb3VudCgpLFxuICAgICAgLy8gICB0YWtlKDUpLFxuICAgICAgLy8gKVxuICAgICAgLy8gLnN1YnNjcmliZSgpO1xuICAgICAgLy8gYGBgXG4gICAgICAvLyBJbiBvcmRlciB0byBhY2NvdW50IGZvciB0aGlzIGNhc2UsIFJlZkNvdW50U3Vic2NyaWJlciBzaG91bGQgb25seSBkaXNwb3NlXG4gICAgICAvLyB0aGUgQ29ubmVjdGFibGVPYnNlcnZhYmxlJ3Mgc2hhcmVkIGNvbm5lY3Rpb24gU3Vic2NyaXB0aW9uIGlmIHRoZVxuICAgICAgLy8gY29ubmVjdGlvbiBTdWJzY3JpcHRpb24gZXhpc3RzLCAqYW5kKiBlaXRoZXI6XG4gICAgICAvLyAgIGEuIFJlZkNvdW50U3Vic2NyaWJlciBkb2Vzbid0IGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlIHNoYXJlZCBjb25uZWN0aW9uXG4gICAgICAvLyAgICAgIFN1YnNjcmlwdGlvbiB5ZXQsIG9yLFxuICAgICAgLy8gICBiLiBSZWZDb3VudFN1YnNjcmliZXIncyBjb25uZWN0aW9uIFN1YnNjcmlwdGlvbiByZWZlcmVuY2UgaXMgaWRlbnRpY2FsXG4gICAgICAvLyAgICAgIHRvIHRoZSBzaGFyZWQgY29ubmVjdGlvbiBTdWJzY3JpcHRpb25cbiAgICAgIC8vL1xuXG4gICAgICBjb25zdCBzaGFyZWRDb25uZWN0aW9uID0gKHNvdXJjZSBhcyBhbnkpLl9jb25uZWN0aW9uO1xuICAgICAgY29uc3QgY29ubiA9IGNvbm5lY3Rpb247XG4gICAgICBjb25uZWN0aW9uID0gbnVsbDtcblxuICAgICAgaWYgKHNoYXJlZENvbm5lY3Rpb24gJiYgKCFjb25uIHx8IHNoYXJlZENvbm5lY3Rpb24gPT09IGNvbm4pKSB7XG4gICAgICAgIHNoYXJlZENvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cblxuICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuXG4gICAgc291cmNlLnN1YnNjcmliZShyZWZDb3VudGVyKTtcblxuICAgIGlmICghcmVmQ291bnRlci5jbG9zZWQpIHtcbiAgICAgIGNvbm5lY3Rpb24gPSAoc291cmNlIGFzIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTxUPikuY29ubmVjdCgpO1xuICAgIH1cbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHJlZkNvdW50IGFzIGhpZ2hlck9yZGVyUmVmQ291bnQgfSBmcm9tICcuLi9vcGVyYXRvcnMvcmVmQ291bnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBoYXNMaWZ0IH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcblxuLyoqXG4gKiBAY2xhc3MgQ29ubmVjdGFibGVPYnNlcnZhYmxlPFQ+XG4gKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSB7QGxpbmsgY29ubmVjdGFibGV9IHRvIGNyZWF0ZSBhIGNvbm5lY3RhYmxlIG9ic2VydmFibGUuXG4gKiBJZiB5b3UgYXJlIHVzaW5nIHRoZSBgcmVmQ291bnRgIG1ldGhvZCBvZiBgQ29ubmVjdGFibGVPYnNlcnZhYmxlYCwgdXNlIHRoZSB7QGxpbmsgc2hhcmV9IG9wZXJhdG9yXG4gKiBpbnN0ZWFkLlxuICogRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvbXVsdGljYXN0aW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0YWJsZU9ic2VydmFibGU8VD4gZXh0ZW5kcyBPYnNlcnZhYmxlPFQ+IHtcbiAgcHJvdGVjdGVkIF9zdWJqZWN0OiBTdWJqZWN0PFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBfcmVmQ291bnQ6IG51bWJlciA9IDA7XG4gIHByb3RlY3RlZCBfY29ubmVjdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYnNlcnZhYmxlXG4gICAqIEBwYXJhbSBzdWJqZWN0RmFjdG9yeSBUaGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIHN1YmplY3QgdXNlZCBpbnRlcm5hbGx5LlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSB7QGxpbmsgY29ubmVjdGFibGV9IHRvIGNyZWF0ZSBhIGNvbm5lY3RhYmxlIG9ic2VydmFibGUuXG4gICAqIGBuZXcgQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgZmFjdG9yeSlgIGlzIGVxdWl2YWxlbnQgdG9cbiAgICogYGNvbm5lY3RhYmxlKHNvdXJjZSwgeyBjb25uZWN0b3I6IGZhY3RvcnkgfSlgLlxuICAgKiBXaGVuIHRoZSBgcmVmQ291bnQoKWAgbWV0aG9kIGlzIG5lZWRlZCwgdGhlIHtAbGluayBzaGFyZX0gb3BlcmF0b3Igc2hvdWxkIGJlIHVzZWQgaW5zdGVhZDpcbiAgICogYG5ldyBDb25uZWN0YWJsZU9ic2VydmFibGUoc291cmNlLCBmYWN0b3J5KS5yZWZDb3VudCgpYCBpcyBlcXVpdmFsZW50IHRvXG4gICAqIGBzb3VyY2UucGlwZShzaGFyZSh7IGNvbm5lY3RvcjogZmFjdG9yeSB9KSlgLlxuICAgKiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9tdWx0aWNhc3RpbmdcbiAgICovXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzb3VyY2U6IE9ic2VydmFibGU8VD4sIHByb3RlY3RlZCBzdWJqZWN0RmFjdG9yeTogKCkgPT4gU3ViamVjdDxUPikge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gSWYgd2UgaGF2ZSBsaWZ0LCBtb25rZXkgcGF0Y2ggdGhhdCBoZXJlLiBUaGlzIGlzIGRvbmUgc28gY3VzdG9tIG9ic2VydmFibGVcbiAgICAvLyB0eXBlcyB3aWxsIGNvbXBvc2UgdGhyb3VnaCBtdWx0aWNhc3QuIE90aGVyd2lzZSB0aGUgcmVzdWx0aW5nIG9ic2VydmFibGUgd291bGRcbiAgICAvLyBzaW1wbHkgYmUgYW4gaW5zdGFuY2Ugb2YgYENvbm5lY3RhYmxlT2JzZXJ2YWJsZWAuXG4gICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgdGhpcy5saWZ0ID0gc291cmNlLmxpZnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcm90ZWN0ZWQgX3N1YnNjcmliZShzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFQ+KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdWJqZWN0KCk6IFN1YmplY3Q8VD4ge1xuICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLl9zdWJqZWN0O1xuICAgIGlmICghc3ViamVjdCB8fCBzdWJqZWN0LmlzU3RvcHBlZCkge1xuICAgICAgdGhpcy5fc3ViamVjdCA9IHRoaXMuc3ViamVjdEZhY3RvcnkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3QhO1xuICB9XG5cbiAgcHJvdGVjdGVkIF90ZWFyZG93bigpIHtcbiAgICB0aGlzLl9yZWZDb3VudCA9IDA7XG4gICAgY29uc3QgeyBfY29ubmVjdGlvbiB9ID0gdGhpcztcbiAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7XG4gICAgX2Nvbm5lY3Rpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQge0BsaW5rIENvbm5lY3RhYmxlT2JzZXJ2YWJsZX0gd2lsbCBiZSByZW1vdmVkIGluIHY4LiBVc2Uge0BsaW5rIGNvbm5lY3RhYmxlfSBpbnN0ZWFkLlxuICAgKiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9tdWx0aWNhc3RpbmdcbiAgICovXG4gIGNvbm5lY3QoKTogU3Vic2NyaXB0aW9uIHtcbiAgICBsZXQgY29ubmVjdGlvbiA9IHRoaXMuX2Nvbm5lY3Rpb247XG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLmdldFN1YmplY3QoKTtcbiAgICAgIGNvbm5lY3Rpb24uYWRkKFxuICAgICAgICB0aGlzLnNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICAgICAgc3ViamVjdCBhcyBhbnksXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3RlYXJkb3duKCk7XG4gICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3RlYXJkb3duKCk7XG4gICAgICAgICAgICAgIHN1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB0aGlzLl90ZWFyZG93bigpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICBpZiAoY29ubmVjdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgIGNvbm5lY3Rpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHtAbGluayBDb25uZWN0YWJsZU9ic2VydmFibGV9IHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIHRoZSB7QGxpbmsgc2hhcmV9IG9wZXJhdG9yIGluc3RlYWQuXG4gICAqIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL211bHRpY2FzdGluZ1xuICAgKi9cbiAgcmVmQ291bnQoKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIGhpZ2hlck9yZGVyUmVmQ291bnQoKSh0aGlzKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgVGltZXN0YW1wUHJvdmlkZXIgfSBmcm9tICcuLi90eXBlcyc7XG5cbmludGVyZmFjZSBQZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyIGV4dGVuZHMgVGltZXN0YW1wUHJvdmlkZXIge1xuICBkZWxlZ2F0ZTogVGltZXN0YW1wUHJvdmlkZXIgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyOiBQZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICBub3coKSB7XG4gICAgLy8gVXNlIHRoZSB2YXJpYWJsZSByYXRoZXIgdGhhbiBgdGhpc2Agc28gdGhhdCB0aGUgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZFxuICAgIC8vIHdpdGhvdXQgYmVpbmcgYm91bmQgdG8gdGhlIHByb3ZpZGVyLlxuICAgIHJldHVybiAocGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlci5kZWxlZ2F0ZSB8fCBwZXJmb3JtYW5jZSkubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuIiwgImltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5cbmludGVyZmFjZSBBbmltYXRpb25GcmFtZVByb3ZpZGVyIHtcbiAgc2NoZWR1bGUoY2FsbGJhY2s6IEZyYW1lUmVxdWVzdENhbGxiYWNrKTogU3Vic2NyaXB0aW9uO1xuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gIGNhbmNlbEFuaW1hdGlvbkZyYW1lOiB0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG4gIGRlbGVnYXRlOlxuICAgIHwge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lOiB0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBhbmltYXRpb25GcmFtZVByb3ZpZGVyOiBBbmltYXRpb25GcmFtZVByb3ZpZGVyID0ge1xuICAvLyBXaGVuIGFjY2Vzc2luZyB0aGUgZGVsZWdhdGUsIHVzZSB0aGUgdmFyaWFibGUgcmF0aGVyIHRoYW4gYHRoaXNgIHNvIHRoYXRcbiAgLy8gdGhlIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYmVpbmcgYm91bmQgdG8gdGhlIHByb3ZpZGVyLlxuICBzY2hlZHVsZShjYWxsYmFjaykge1xuICAgIGxldCByZXF1ZXN0ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIGxldCBjYW5jZWw6IHR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZSB8IHVuZGVmaW5lZCA9IGNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuICAgIGNvbnN0IHsgZGVsZWdhdGUgfSA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXI7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICByZXF1ZXN0ID0gZGVsZWdhdGUucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgICAgY2FuY2VsID0gZGVsZWdhdGUuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZSA9IHJlcXVlc3QoKHRpbWVzdGFtcCkgPT4ge1xuICAgICAgLy8gQ2xlYXIgdGhlIGNhbmNlbCBmdW5jdGlvbi4gVGhlIHJlcXVlc3QgaGFzIGJlZW4gZnVsZmlsbGVkLCBzb1xuICAgICAgLy8gYXR0ZW1wdGluZyB0byBjYW5jZWwgdGhlIHJlcXVlc3QgdXBvbiB1bnN1YnNjcmlwdGlvbiB3b3VsZCBiZVxuICAgICAgLy8gcG9pbnRsZXNzLlxuICAgICAgY2FuY2VsID0gdW5kZWZpbmVkO1xuICAgICAgY2FsbGJhY2sodGltZXN0YW1wKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiBjYW5jZWw/LihoYW5kbGUpKTtcbiAgfSxcbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKC4uLmFyZ3MpIHtcbiAgICBjb25zdCB7IGRlbGVnYXRlIH0gPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyO1xuICAgIHJldHVybiAoZGVsZWdhdGU/LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLmFyZ3MpO1xuICB9LFxuICBjYW5jZWxBbmltYXRpb25GcmFtZSguLi5hcmdzKSB7XG4gICAgY29uc3QgeyBkZWxlZ2F0ZSB9ID0gYW5pbWF0aW9uRnJhbWVQcm92aWRlcjtcbiAgICByZXR1cm4gKGRlbGVnYXRlPy5jYW5jZWxBbmltYXRpb25GcmFtZSB8fCBjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4uYXJncyk7XG4gIH0sXG4gIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi8uLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFRpbWVzdGFtcFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlciB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyJztcbmltcG9ydCB7IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWVQcm92aWRlcic7XG5cbi8qKlxuICogQW4gb2JzZXJ2YWJsZSBvZiBhbmltYXRpb24gZnJhbWVzXG4gKlxuICogRW1pdHMgdGhlIGFtb3VudCBvZiB0aW1lIGVsYXBzZWQgc2luY2Ugc3Vic2NyaXB0aW9uIGFuZCB0aGUgdGltZXN0YW1wIG9uIGVhY2ggYW5pbWF0aW9uIGZyYW1lLlxuICogRGVmYXVsdHMgdG8gbWlsbGlzZWNvbmRzIHByb3ZpZGVkIHRvIHRoZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUncyBjYWxsYmFjay4gRG9lcyBub3QgZW5kIG9uIGl0cyBvd24uXG4gKlxuICogRXZlcnkgc3Vic2NyaXB0aW9uIHdpbGwgc3RhcnQgYSBzZXBhcmF0ZSBhbmltYXRpb24gbG9vcC4gU2luY2UgYW5pbWF0aW9uIGZyYW1lcyBhcmUgYWx3YXlzIHNjaGVkdWxlZFxuICogYnkgdGhlIGJyb3dzZXIgdG8gb2NjdXIgZGlyZWN0bHkgYmVmb3JlIGEgcmVwYWludCwgc2NoZWR1bGluZyBtb3JlIHRoYW4gb25lIGFuaW1hdGlvbiBmcmFtZSBzeW5jaHJvbm91c2x5XG4gKiBzaG91bGQgbm90IGJlIG11Y2ggZGlmZmVyZW50IG9yIGhhdmUgbW9yZSBvdmVyaGVhZCB0aGFuIGxvb3Bpbmcgb3ZlciBhbiBhcnJheSBvZiBldmVudHMgZHVyaW5nXG4gKiBhIHNpbmdsZSBhbmltYXRpb24gZnJhbWUuIEhvd2V2ZXIsIGlmIGZvciBzb21lIHJlYXNvbiB0aGUgZGV2ZWxvcGVyIHdvdWxkIGxpa2UgdG8gZW5zdXJlIHRoZVxuICogZXhlY3V0aW9uIG9mIGFuaW1hdGlvbi1yZWxhdGVkIGhhbmRsZXJzIGFyZSBhbGwgZXhlY3V0ZWQgZHVyaW5nIHRoZSBzYW1lIHRhc2sgYnkgdGhlIGVuZ2luZSxcbiAqIHRoZSBgc2hhcmVgIG9wZXJhdG9yIGNhbiBiZSB1c2VkLlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBzZXR0aW5nIHVwIGFuaW1hdGlvbnMgd2l0aCBSeEpTLlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogVHdlZW5pbmcgYSBkaXYgdG8gbW92ZSBpdCBvbiB0aGUgc2NyZWVuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGFuaW1hdGlvbkZyYW1lcywgbWFwLCB0YWtlV2hpbGUsIGVuZFdpdGggfSBmcm9tICdyeGpzJztcbiAqXG4gKiBmdW5jdGlvbiB0d2VlbihzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgZHVyYXRpb246IG51bWJlcikge1xuICogICBjb25zdCBkaWZmID0gZW5kIC0gc3RhcnQ7XG4gKiAgIHJldHVybiBhbmltYXRpb25GcmFtZXMoKS5waXBlKFxuICogICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBwZXJjZW50YWdlIG9mIHRpbWUgaGFzIHBhc3NlZFxuICogICAgIG1hcCgoeyBlbGFwc2VkIH0pID0+IGVsYXBzZWQgLyBkdXJhdGlvbiksXG4gKiAgICAgLy8gVGFrZSB0aGUgdmVjdG9yIHdoaWxlIGxlc3MgdGhhbiAxMDAlXG4gKiAgICAgdGFrZVdoaWxlKHYgPT4gdiA8IDEpLFxuICogICAgIC8vIEZpbmlzaCB3aXRoIDEwMCVcbiAqICAgICBlbmRXaXRoKDEpLFxuICogICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdHJhdmVsZWQgYmV0d2VlbiBzdGFydCBhbmQgZW5kXG4gKiAgICAgbWFwKHYgPT4gdiAqIGRpZmYgKyBzdGFydClcbiAqICAgKTtcbiAqIH1cbiAqXG4gKiAvLyBTZXR1cCBhIGRpdiBmb3IgdXMgdG8gbW92ZSBhcm91bmRcbiAqIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICogZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAqIGRpdi5zdHlsZS53aWR0aCA9ICc0MHB4JztcbiAqIGRpdi5zdHlsZS5oZWlnaHQgPSAnNDBweCc7XG4gKiBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ2xpbWUnO1xuICogZGl2LnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUzZCgxMHB4LCAwLCAwKSc7XG4gKlxuICogdHdlZW4oMTAsIDIwMCwgNDAwMCkuc3Vic2NyaWJlKHggPT4ge1xuICogICBkaXYuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7IHggfXB4LCAwLCAwKWA7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIFByb3ZpZGluZyBhIGN1c3RvbSB0aW1lc3RhbXAgcHJvdmlkZXJcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYW5pbWF0aW9uRnJhbWVzLCBUaW1lc3RhbXBQcm92aWRlciB9IGZyb20gJ3J4anMnO1xuICpcbiAqIC8vIEEgY3VzdG9tIHRpbWVzdGFtcCBwcm92aWRlclxuICogbGV0IG5vdyA9IDA7XG4gKiBjb25zdCBjdXN0b21UU1Byb3ZpZGVyOiBUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAqICAgbm93KCkgeyByZXR1cm4gbm93Kys7IH1cbiAqIH07XG4gKlxuICogY29uc3Qgc291cmNlJCA9IGFuaW1hdGlvbkZyYW1lcyhjdXN0b21UU1Byb3ZpZGVyKTtcbiAqXG4gKiAvLyBMb2cgaW5jcmVhc2luZyBudW1iZXJzIDAuLi4xLi4uMi4uLiBvbiBldmVyeSBhbmltYXRpb24gZnJhbWUuXG4gKiBzb3VyY2UkLnN1YnNjcmliZSgoeyBlbGFwc2VkIH0pID0+IGNvbnNvbGUubG9nKGVsYXBzZWQpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB0aW1lc3RhbXBQcm92aWRlciBBbiBvYmplY3Qgd2l0aCBhIGBub3dgIG1ldGhvZCB0aGF0IHByb3ZpZGVzIGEgbnVtZXJpYyB0aW1lc3RhbXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lcyh0aW1lc3RhbXBQcm92aWRlcj86IFRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gIHJldHVybiB0aW1lc3RhbXBQcm92aWRlciA/IGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkodGltZXN0YW1wUHJvdmlkZXIpIDogREVGQVVMVF9BTklNQVRJT05fRlJBTUVTO1xufVxuXG4vKipcbiAqIERvZXMgdGhlIHdvcmsgb2YgY3JlYXRpbmcgdGhlIG9ic2VydmFibGUgZm9yIGBhbmltYXRpb25GcmFtZXNgLlxuICogQHBhcmFtIHRpbWVzdGFtcFByb3ZpZGVyIFRoZSB0aW1lc3RhbXAgcHJvdmlkZXIgdG8gdXNlIHRvIGNyZWF0ZSB0aGUgb2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBhbmltYXRpb25GcmFtZXNGYWN0b3J5KHRpbWVzdGFtcFByb3ZpZGVyPzogVGltZXN0YW1wUHJvdmlkZXIpIHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHsgdGltZXN0YW1wOiBudW1iZXI7IGVsYXBzZWQ6IG51bWJlciB9Pigoc3Vic2NyaWJlcikgPT4ge1xuICAgIC8vIElmIG5vIHRpbWVzdGFtcCBwcm92aWRlciBpcyBzcGVjaWZpZWQsIHVzZSBwZXJmb3JtYW5jZS5ub3coKSAtIGFzIGl0XG4gICAgLy8gd2lsbCByZXR1cm4gdGltZXN0YW1wcyAnY29tcGF0aWJsZScgd2l0aCB0aG9zZSBwYXNzZWQgdG8gdGhlIHJ1blxuICAgIC8vIGNhbGxiYWNrIGFuZCB3b24ndCBiZSBhZmZlY3RlZCBieSBOVFAgYWRqdXN0bWVudHMsIGV0Yy5cbiAgICBjb25zdCBwcm92aWRlciA9IHRpbWVzdGFtcFByb3ZpZGVyIHx8IHBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXI7XG5cbiAgICAvLyBDYXB0dXJlIHRoZSBzdGFydCB0aW1lIHVwb24gc3Vic2NyaXB0aW9uLCBhcyB0aGUgcnVuIGNhbGxiYWNrIGNhbiByZW1haW5cbiAgICAvLyBxdWV1ZWQgZm9yIGEgY29uc2lkZXJhYmxlIHBlcmlvZCBvZiB0aW1lIGFuZCB0aGUgZWxhcHNlZCB0aW1lIHNob3VsZFxuICAgIC8vIHJlcHJlc2VudCB0aGUgdGltZSBlbGFwc2VkIHNpbmNlIHN1YnNjcmlwdGlvbiAtIG5vdCB0aGUgdGltZSBzaW5jZSB0aGVcbiAgICAvLyBmaXJzdCByZW5kZXJlZCBhbmltYXRpb24gZnJhbWUuXG4gICAgY29uc3Qgc3RhcnQgPSBwcm92aWRlci5ub3coKTtcblxuICAgIGxldCBpZCA9IDA7XG4gICAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICBpZCA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCh0aW1lc3RhbXA6IERPTUhpZ2hSZXNUaW1lU3RhbXAgfCBudW1iZXIpID0+IHtcbiAgICAgICAgICBpZCA9IDA7XG4gICAgICAgICAgLy8gVXNlIHRoZSBwcm92aWRlcidzIHRpbWVzdGFtcCB0byBjYWxjdWxhdGUgdGhlIGVsYXBzZWQgdGltZS4gTm90ZSB0aGF0XG4gICAgICAgICAgLy8gdGhpcyBtZWFucyAtIGlmIHRoZSBjYWxsZXIgaGFzbid0IHBhc3NlZCBhIHByb3ZpZGVyIC0gdGhhdFxuICAgICAgICAgIC8vIHBlcmZvcm1hbmNlLm5vdygpIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB0aW1lc3RhbXAgdGhhdCB3YXNcbiAgICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIHJ1biBjYWxsYmFjay4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZSB0aW1lc3RhbXBcbiAgICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGNhbiBiZSBlYXJsaWVyIHRoYW4gdGhlIHN0YXJ0IHRpbWUsIGFzIGl0XG4gICAgICAgICAgLy8gcmVwcmVzZW50cyB0aGUgdGltZSBhdCB3aGljaCB0aGUgYnJvd3NlciBkZWNpZGVkIGl0IHdvdWxkIHJlbmRlciBhbnlcbiAgICAgICAgICAvLyBxdWV1ZWQgZnJhbWVzIC0gYW5kIHRoYXQgdGltZSBjYW4gYmUgZWFybGllciB0aGUgY2FwdHVyZWQgc3RhcnQgdGltZS5cbiAgICAgICAgICBjb25zdCBub3cgPSBwcm92aWRlci5ub3coKTtcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoe1xuICAgICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBQcm92aWRlciA/IG5vdyA6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgIGVsYXBzZWQ6IG5vdyAtIHN0YXJ0LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJ1bigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcnVuKCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIEluIHRoZSBjb21tb24gY2FzZSwgd2hlcmUgdGhlIHRpbWVzdGFtcCBwcm92aWRlZCBieSB0aGUgckFGIEFQSSBpcyB1c2VkLFxuICogd2UgdXNlIHRoaXMgc2hhcmVkIG9ic2VydmFibGUgdG8gcmVkdWNlIG92ZXJoZWFkLlxuICovXG5jb25zdCBERUZBVUxUX0FOSU1BVElPTl9GUkFNRVMgPSBhbmltYXRpb25GcmFtZXNGYWN0b3J5KCk7XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXJyb3JDbGFzcyB9IGZyb20gJy4vY3JlYXRlRXJyb3JDbGFzcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yQ3RvciB7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIERvIG5vdCBjb25zdHJ1Y3QgZXJyb3IgaW5zdGFuY2VzLlxuICAgKiBDYW5ub3QgYmUgdGFnZ2VkIGFzIGludGVybmFsOiBodHRwczovL2dpdGh1Yi5jb20vUmVhY3RpdmVYL3J4anMvaXNzdWVzLzYyNjlcbiAgICovXG4gIG5ldyAoKTogT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3I7XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gYW4gYWN0aW9uIGlzIGludmFsaWQgYmVjYXVzZSB0aGUgb2JqZWN0IGhhcyBiZWVuXG4gKiB1bnN1YnNjcmliZWQuXG4gKlxuICogQHNlZSB7QGxpbmsgU3ViamVjdH1cbiAqIEBzZWUge0BsaW5rIEJlaGF2aW9yU3ViamVjdH1cbiAqXG4gKiBAY2xhc3MgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcbiAqL1xuZXhwb3J0IGNvbnN0IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yOiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckN0b3IgPSBjcmVhdGVFcnJvckNsYXNzKFxuICAoX3N1cGVyKSA9PlxuICAgIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCh0aGlzOiBhbnkpIHtcbiAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfVxuKTtcbiIsICJpbXBvcnQgeyBPcGVyYXRvciB9IGZyb20gJy4vT3BlcmF0b3InO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgRU1QVFlfU1VCU0NSSVBUSU9OIH0gZnJvbSAnLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgT2JzZXJ2ZXIsIFN1YnNjcmlwdGlvbkxpa2UsIFRlYXJkb3duTG9naWMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yIH0gZnJvbSAnLi91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbmltcG9ydCB7IGFyclJlbW92ZSB9IGZyb20gJy4vdXRpbC9hcnJSZW1vdmUnO1xuaW1wb3J0IHsgZXJyb3JDb250ZXh0IH0gZnJvbSAnLi91dGlsL2Vycm9yQ29udGV4dCc7XG5cbi8qKlxuICogQSBTdWJqZWN0IGlzIGEgc3BlY2lhbCB0eXBlIG9mIE9ic2VydmFibGUgdGhhdCBhbGxvd3MgdmFsdWVzIHRvIGJlXG4gKiBtdWx0aWNhc3RlZCB0byBtYW55IE9ic2VydmVycy4gU3ViamVjdHMgYXJlIGxpa2UgRXZlbnRFbWl0dGVycy5cbiAqXG4gKiBFdmVyeSBTdWJqZWN0IGlzIGFuIE9ic2VydmFibGUgYW5kIGFuIE9ic2VydmVyLiBZb3UgY2FuIHN1YnNjcmliZSB0byBhXG4gKiBTdWJqZWN0LCBhbmQgeW91IGNhbiBjYWxsIG5leHQgdG8gZmVlZCB2YWx1ZXMgYXMgd2VsbCBhcyBlcnJvciBhbmQgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWJqZWN0PFQ+IGV4dGVuZHMgT2JzZXJ2YWJsZTxUPiBpbXBsZW1lbnRzIFN1YnNjcmlwdGlvbkxpa2Uge1xuICBjbG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGN1cnJlbnRPYnNlcnZlcnM6IE9ic2VydmVyPFQ+W10gfCBudWxsID0gbnVsbDtcblxuICAvKiogQGRlcHJlY2F0ZWQgSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBkbyBub3QgdXNlIGRpcmVjdGx5LiBXaWxsIGJlIG1hZGUgaW50ZXJuYWwgaW4gdjguICovXG4gIG9ic2VydmVyczogT2JzZXJ2ZXI8VD5bXSA9IFtdO1xuICAvKiogQGRlcHJlY2F0ZWQgSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBkbyBub3QgdXNlIGRpcmVjdGx5LiBXaWxsIGJlIG1hZGUgaW50ZXJuYWwgaW4gdjguICovXG4gIGlzU3RvcHBlZCA9IGZhbHNlO1xuICAvKiogQGRlcHJlY2F0ZWQgSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBkbyBub3QgdXNlIGRpcmVjdGx5LiBXaWxsIGJlIG1hZGUgaW50ZXJuYWwgaW4gdjguICovXG4gIGhhc0Vycm9yID0gZmFsc2U7XG4gIC8qKiBAZGVwcmVjYXRlZCBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGRvIG5vdCB1c2UgZGlyZWN0bHkuIFdpbGwgYmUgbWFkZSBpbnRlcm5hbCBpbiB2OC4gKi9cbiAgdGhyb3duRXJyb3I6IGFueSA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBcInN1YmplY3RcIiBieSBiYXNpY2FsbHkgZ2x1aW5nIGFuIG9ic2VydmVyIHRvIGFuIG9ic2VydmFibGUuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFJlY29tbWVuZGVkIHlvdSBkbyBub3QgdXNlLiBXaWxsIGJlIHJlbW92ZWQgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLiBQbGFucyBmb3IgcmVwbGFjZW1lbnQgc3RpbGwgdW5kZXIgZGlzY3Vzc2lvbi5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGU6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID0gPFQ+KGRlc3RpbmF0aW9uOiBPYnNlcnZlcjxUPiwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KTogQW5vbnltb3VzU3ViamVjdDxUPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0PFQ+KGRlc3RpbmF0aW9uLCBzb3VyY2UpO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIE5PVEU6IFRoaXMgbXVzdCBiZSBoZXJlIHRvIG9ic2N1cmUgT2JzZXJ2YWJsZSdzIGNvbnN0cnVjdG9yLlxuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBkbyBub3QgdXNlIGRpcmVjdGx5LiBXaWxsIGJlIG1hZGUgaW50ZXJuYWwgaW4gdjguICovXG4gIGxpZnQ8Uj4ob3BlcmF0b3I6IE9wZXJhdG9yPFQsIFI+KTogT2JzZXJ2YWJsZTxSPiB7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvciBhcyBhbnk7XG4gICAgcmV0dXJuIHN1YmplY3QgYXMgYW55O1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcm90ZWN0ZWQgX3Rocm93SWZDbG9zZWQoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICBuZXh0KHZhbHVlOiBUKSB7XG4gICAgZXJyb3JDb250ZXh0KCgpID0+IHtcbiAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG9ic2VydmVyIG9mIHRoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBlcnJvcihlcnI6IGFueSkge1xuICAgIGVycm9yQ29udGV4dCgoKSA9PiB7XG4gICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgIHRoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgIGNvbnN0IHsgb2JzZXJ2ZXJzIH0gPSB0aGlzO1xuICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpIS5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb21wbGV0ZSgpIHtcbiAgICBlcnJvckNvbnRleHQoKCkgPT4ge1xuICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHsgb2JzZXJ2ZXJzIH0gPSB0aGlzO1xuICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpIS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1bnN1YnNjcmliZSgpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwhO1xuICB9XG5cbiAgZ2V0IG9ic2VydmVkKCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycz8ubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJvdGVjdGVkIF90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxUPik6IFRlYXJkb3duTG9naWMge1xuICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICByZXR1cm4gc3VwZXIuX3RyeVN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJvdGVjdGVkIF9zdWJzY3JpYmUoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxUPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcm90ZWN0ZWQgX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8YW55Pikge1xuICAgIGNvbnN0IHsgaGFzRXJyb3IsIGlzU3RvcHBlZCwgb2JzZXJ2ZXJzIH0gPSB0aGlzO1xuICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfVxuICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgIGFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcm90ZWN0ZWQgX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxhbnk+KSB7XG4gICAgY29uc3QgeyBoYXNFcnJvciwgdGhyb3duRXJyb3IsIGlzU3RvcHBlZCB9ID0gdGhpcztcbiAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgIH0gZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgT2JzZXJ2YWJsZSB3aXRoIHRoaXMgU3ViamVjdCBhcyB0aGUgc291cmNlLiBZb3UgY2FuIGRvIHRoaXNcbiAgICogdG8gY3JlYXRlIGN1c3RvbSBPYnNlcnZlci1zaWRlIGxvZ2ljIG9mIHRoZSBTdWJqZWN0IGFuZCBjb25jZWFsIGl0IGZyb21cbiAgICogY29kZSB0aGF0IHVzZXMgdGhlIE9ic2VydmFibGUuXG4gICAqIEByZXR1cm4gT2JzZXJ2YWJsZSB0aGF0IHRoaXMgU3ViamVjdCBjYXN0cyB0by5cbiAgICovXG4gIGFzT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCBvYnNlcnZhYmxlOiBhbnkgPSBuZXcgT2JzZXJ2YWJsZTxUPigpO1xuICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQW5vbnltb3VzU3ViamVjdDxUPiBleHRlbmRzIFN1YmplY3Q8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICAvKiogQGRlcHJlY2F0ZWQgSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBkbyBub3QgdXNlIGRpcmVjdGx5LiBXaWxsIGJlIG1hZGUgaW50ZXJuYWwgaW4gdjguICovXG4gICAgcHVibGljIGRlc3RpbmF0aW9uPzogT2JzZXJ2ZXI8VD4sXG4gICAgc291cmNlPzogT2JzZXJ2YWJsZTxUPlxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICB9XG5cbiAgbmV4dCh2YWx1ZTogVCkge1xuICAgIHRoaXMuZGVzdGluYXRpb24/Lm5leHQ/Lih2YWx1ZSk7XG4gIH1cblxuICBlcnJvcihlcnI6IGFueSkge1xuICAgIHRoaXMuZGVzdGluYXRpb24/LmVycm9yPy4oZXJyKTtcbiAgfVxuXG4gIGNvbXBsZXRlKCkge1xuICAgIHRoaXMuZGVzdGluYXRpb24/LmNvbXBsZXRlPy4oKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJvdGVjdGVkIF9zdWJzY3JpYmUoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxUPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlPy5zdWJzY3JpYmUoc3Vic2NyaWJlcikgPz8gRU1QVFlfU1VCU0NSSVBUSU9OO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcblxuLyoqXG4gKiBBIHZhcmlhbnQgb2YgU3ViamVjdCB0aGF0IHJlcXVpcmVzIGFuIGluaXRpYWwgdmFsdWUgYW5kIGVtaXRzIGl0cyBjdXJyZW50XG4gKiB2YWx1ZSB3aGVuZXZlciBpdCBpcyBzdWJzY3JpYmVkIHRvLlxuICovXG5leHBvcnQgY2xhc3MgQmVoYXZpb3JTdWJqZWN0PFQ+IGV4dGVuZHMgU3ViamVjdDxUPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3ZhbHVlOiBUKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcm90ZWN0ZWQgX3N1YnNjcmliZShzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFQ+KTogU3Vic2NyaXB0aW9uIHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzdXBlci5fc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICFzdWJzY3JpcHRpb24uY2xvc2VkICYmIHN1YnNjcmliZXIubmV4dCh0aGlzLl92YWx1ZSk7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldFZhbHVlKCk6IFQge1xuICAgIGNvbnN0IHsgaGFzRXJyb3IsIHRocm93bkVycm9yLCBfdmFsdWUgfSA9IHRoaXM7XG4gICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICB0aHJvdyB0aHJvd25FcnJvcjtcbiAgICB9XG4gICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgIHJldHVybiBfdmFsdWU7XG4gIH1cblxuICBuZXh0KHZhbHVlOiBUKTogdm9pZCB7XG4gICAgc3VwZXIubmV4dCgodGhpcy5fdmFsdWUgPSB2YWx1ZSkpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgVGltZXN0YW1wUHJvdmlkZXIgfSBmcm9tICcuLi90eXBlcyc7XG5cbmludGVyZmFjZSBEYXRlVGltZXN0YW1wUHJvdmlkZXIgZXh0ZW5kcyBUaW1lc3RhbXBQcm92aWRlciB7XG4gIGRlbGVnYXRlOiBUaW1lc3RhbXBQcm92aWRlciB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNvbnN0IGRhdGVUaW1lc3RhbXBQcm92aWRlcjogRGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICBub3coKSB7XG4gICAgLy8gVXNlIHRoZSB2YXJpYWJsZSByYXRoZXIgdGhhbiBgdGhpc2Agc28gdGhhdCB0aGUgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZFxuICAgIC8vIHdpdGhvdXQgYmVpbmcgYm91bmQgdG8gdGhlIHByb3ZpZGVyLlxuICAgIHJldHVybiAoZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLmRlbGVnYXRlIHx8IERhdGUpLm5vdygpO1xuICB9LFxuICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbiIsICJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCB7IFRpbWVzdGFtcFByb3ZpZGVyIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IGRhdGVUaW1lc3RhbXBQcm92aWRlciB9IGZyb20gJy4vc2NoZWR1bGVyL2RhdGVUaW1lc3RhbXBQcm92aWRlcic7XG5cbi8qKlxuICogQSB2YXJpYW50IG9mIHtAbGluayBTdWJqZWN0fSB0aGF0IFwicmVwbGF5c1wiIG9sZCB2YWx1ZXMgdG8gbmV3IHN1YnNjcmliZXJzIGJ5IGVtaXR0aW5nIHRoZW0gd2hlbiB0aGV5IGZpcnN0IHN1YnNjcmliZS5cbiAqXG4gKiBgUmVwbGF5U3ViamVjdGAgaGFzIGFuIGludGVybmFsIGJ1ZmZlciB0aGF0IHdpbGwgc3RvcmUgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIHZhbHVlcyB0aGF0IGl0IGhhcyBvYnNlcnZlZC4gTGlrZSBgU3ViamVjdGAsXG4gKiBgUmVwbGF5U3ViamVjdGAgXCJvYnNlcnZlc1wiIHZhbHVlcyBieSBoYXZpbmcgdGhlbSBwYXNzZWQgdG8gaXRzIGBuZXh0YCBtZXRob2QuIFdoZW4gaXQgb2JzZXJ2ZXMgYSB2YWx1ZSwgaXQgd2lsbCBzdG9yZSB0aGF0XG4gKiB2YWx1ZSBmb3IgYSB0aW1lIGRldGVybWluZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGBSZXBsYXlTdWJqZWN0YCwgYXMgcGFzc2VkIHRvIGl0cyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBXaGVuIGEgbmV3IHN1YnNjcmliZXIgc3Vic2NyaWJlcyB0byB0aGUgYFJlcGxheVN1YmplY3RgIGluc3RhbmNlLCBpdCB3aWxsIHN5bmNocm9ub3VzbHkgZW1pdCBhbGwgdmFsdWVzIGluIGl0cyBidWZmZXIgaW5cbiAqIGEgRmlyc3QtSW4tRmlyc3QtT3V0IChGSUZPKSBtYW5uZXIuIFRoZSBgUmVwbGF5U3ViamVjdGAgd2lsbCBhbHNvIGNvbXBsZXRlLCBpZiBpdCBoYXMgb2JzZXJ2ZWQgY29tcGxldGlvbjsgYW5kIGl0IHdpbGxcbiAqIGVycm9yIGlmIGl0IGhhcyBvYnNlcnZlZCBhbiBlcnJvci5cbiAqXG4gKiBUaGVyZSBhcmUgdHdvIG1haW4gY29uZmlndXJhdGlvbiBpdGVtcyB0byBiZSBjb25jZXJuZWQgd2l0aDpcbiAqXG4gKiAxLiBgYnVmZmVyU2l6ZWAgLSBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBtYW55IGl0ZW1zIGFyZSBzdG9yZWQgaW4gdGhlIGJ1ZmZlciwgZGVmYXVsdHMgdG8gaW5maW5pdGUuXG4gKiAyLiBgd2luZG93VGltZWAgLSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gaG9sZCBhIHZhbHVlIGluIHRoZSBidWZmZXIgYmVmb3JlIHJlbW92aW5nIGl0IGZyb20gdGhlIGJ1ZmZlci5cbiAqXG4gKiBCb3RoIGNvbmZpZ3VyYXRpb25zIG1heSBleGlzdCBzaW11bHRhbmVvdXNseS4gU28gaWYgeW91IHdvdWxkIGxpa2UgdG8gYnVmZmVyIGEgbWF4aW11bSBvZiAzIHZhbHVlcywgYXMgbG9uZyBhcyB0aGUgdmFsdWVzXG4gKiBhcmUgbGVzcyB0aGFuIDIgc2Vjb25kcyBvbGQsIHlvdSBjb3VsZCBkbyBzbyB3aXRoIGEgYG5ldyBSZXBsYXlTdWJqZWN0KDMsIDIwMDApYC5cbiAqXG4gKiAjIyMgRGlmZmVyZW5jZXMgd2l0aCBCZWhhdmlvclN1YmplY3RcbiAqXG4gKiBgQmVoYXZpb3JTdWJqZWN0YCBpcyBzaW1pbGFyIHRvIGBuZXcgUmVwbGF5U3ViamVjdCgxKWAsIHdpdGggYSBjb3VwbGUgb2YgZXhjZXB0aW9uczpcbiAqXG4gKiAxLiBgQmVoYXZpb3JTdWJqZWN0YCBjb21lcyBcInByaW1lZFwiIHdpdGggYSBzaW5nbGUgdmFsdWUgdXBvbiBjb25zdHJ1Y3Rpb24uXG4gKiAyLiBgUmVwbGF5U3ViamVjdGAgd2lsbCByZXBsYXkgdmFsdWVzLCBldmVuIGFmdGVyIG9ic2VydmluZyBhbiBlcnJvciwgd2hlcmUgYEJlaGF2aW9yU3ViamVjdGAgd2lsbCBub3QuXG4gKlxuICogQHNlZSB7QGxpbmsgU3ViamVjdH1cbiAqIEBzZWUge0BsaW5rIEJlaGF2aW9yU3ViamVjdH1cbiAqIEBzZWUge0BsaW5rIHNoYXJlUmVwbGF5fVxuICovXG5leHBvcnQgY2xhc3MgUmVwbGF5U3ViamVjdDxUPiBleHRlbmRzIFN1YmplY3Q8VD4ge1xuICBwcml2YXRlIF9idWZmZXI6IChUIHwgbnVtYmVyKVtdID0gW107XG4gIHByaXZhdGUgX2luZmluaXRlVGltZVdpbmRvdyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBfYnVmZmVyU2l6ZSBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHJlcGxheSBvbiBzdWJzY3JpcHRpb25cbiAgICogQHBhcmFtIF93aW5kb3dUaW1lIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgYnVmZmVyZWQgaXRlbXMgd2lsbCBzdGF5IGJ1ZmZlcmVkXG4gICAqIEBwYXJhbSBfdGltZXN0YW1wUHJvdmlkZXIgQW4gb2JqZWN0IHdpdGggYSBgbm93KClgIG1ldGhvZCB0aGF0IHByb3ZpZGVzIHRoZSBjdXJyZW50IHRpbWVzdGFtcC4gVGhpcyBpcyB1c2VkIHRvXG4gICAqIGNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHRpbWUgc29tZXRoaW5nIGhhcyBiZWVuIGJ1ZmZlcmVkLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfYnVmZmVyU2l6ZSA9IEluZmluaXR5LFxuICAgIHByaXZhdGUgX3dpbmRvd1RpbWUgPSBJbmZpbml0eSxcbiAgICBwcml2YXRlIF90aW1lc3RhbXBQcm92aWRlcjogVGltZXN0YW1wUHJvdmlkZXIgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXJcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfd2luZG93VGltZSA9PT0gSW5maW5pdHk7XG4gICAgdGhpcy5fYnVmZmVyU2l6ZSA9IE1hdGgubWF4KDEsIF9idWZmZXJTaXplKTtcbiAgICB0aGlzLl93aW5kb3dUaW1lID0gTWF0aC5tYXgoMSwgX3dpbmRvd1RpbWUpO1xuICB9XG5cbiAgbmV4dCh2YWx1ZTogVCk6IHZvaWQge1xuICAgIGNvbnN0IHsgaXNTdG9wcGVkLCBfYnVmZmVyLCBfaW5maW5pdGVUaW1lV2luZG93LCBfdGltZXN0YW1wUHJvdmlkZXIsIF93aW5kb3dUaW1lIH0gPSB0aGlzO1xuICAgIGlmICghaXNTdG9wcGVkKSB7XG4gICAgICBfYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgIV9pbmZpbml0ZVRpbWVXaW5kb3cgJiYgX2J1ZmZlci5wdXNoKF90aW1lc3RhbXBQcm92aWRlci5ub3coKSArIF93aW5kb3dUaW1lKTtcbiAgICB9XG4gICAgdGhpcy5fdHJpbUJ1ZmZlcigpO1xuICAgIHN1cGVyLm5leHQodmFsdWUpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcm90ZWN0ZWQgX3N1YnNjcmliZShzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFQ+KTogU3Vic2NyaXB0aW9uIHtcbiAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgdGhpcy5fdHJpbUJ1ZmZlcigpO1xuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG5cbiAgICBjb25zdCB7IF9pbmZpbml0ZVRpbWVXaW5kb3csIF9idWZmZXIgfSA9IHRoaXM7XG4gICAgLy8gV2UgdXNlIGEgY29weSBoZXJlLCBzbyByZWVudHJhbnQgY29kZSBkb2VzIG5vdCBtdXRhdGUgb3VyIGFycmF5IHdoaWxlIHdlJ3JlXG4gICAgLy8gZW1pdHRpbmcgaXQgdG8gYSBuZXcgc3Vic2NyaWJlci5cbiAgICBjb25zdCBjb3B5ID0gX2J1ZmZlci5zbGljZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29weS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpICs9IF9pbmZpbml0ZVRpbWVXaW5kb3cgPyAxIDogMikge1xuICAgICAgc3Vic2NyaWJlci5uZXh0KGNvcHlbaV0gYXMgVCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcblxuICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gIH1cblxuICBwcml2YXRlIF90cmltQnVmZmVyKCkge1xuICAgIGNvbnN0IHsgX2J1ZmZlclNpemUsIF90aW1lc3RhbXBQcm92aWRlciwgX2J1ZmZlciwgX2luZmluaXRlVGltZVdpbmRvdyB9ID0gdGhpcztcbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIGluZmluaXRlIGJ1ZmZlciBzaXplLCBhbmQgd2UncmUgb3ZlciB0aGUgbGVuZ3RoLFxuICAgIC8vIHVzZSBzcGxpY2UgdG8gdHJ1bmNhdGUgdGhlIG9sZCBidWZmZXIgdmFsdWVzIG9mZi4gTm90ZSB0aGF0IHdlIGhhdmUgdG9cbiAgICAvLyBkb3VibGUgdGhlIHNpemUgZm9yIGluc3RhbmNlcyB3aGVyZSB3ZSdyZSBub3QgdXNpbmcgYW4gaW5maW5pdGUgdGltZSB3aW5kb3dcbiAgICAvLyBiZWNhdXNlIHdlJ3JlIHN0b3JpbmcgdGhlIHZhbHVlcyBhbmQgdGhlIHRpbWVzdGFtcHMgaW4gdGhlIHNhbWUgYXJyYXkuXG4gICAgY29uc3QgYWRqdXN0ZWRCdWZmZXJTaXplID0gKF9pbmZpbml0ZVRpbWVXaW5kb3cgPyAxIDogMikgKiBfYnVmZmVyU2l6ZTtcbiAgICBfYnVmZmVyU2l6ZSA8IEluZmluaXR5ICYmIGFkanVzdGVkQnVmZmVyU2l6ZSA8IF9idWZmZXIubGVuZ3RoICYmIF9idWZmZXIuc3BsaWNlKDAsIF9idWZmZXIubGVuZ3RoIC0gYWRqdXN0ZWRCdWZmZXJTaXplKTtcblxuICAgIC8vIE5vdywgaWYgd2UncmUgbm90IGluIGFuIGluZmluaXRlIHRpbWUgd2luZG93LCByZW1vdmUgYWxsIHZhbHVlcyB3aGVyZSB0aGUgdGltZSBpc1xuICAgIC8vIG9sZGVyIHRoYW4gd2hhdCBpcyBhbGxvd2VkLlxuICAgIGlmICghX2luZmluaXRlVGltZVdpbmRvdykge1xuICAgICAgY29uc3Qgbm93ID0gX3RpbWVzdGFtcFByb3ZpZGVyLm5vdygpO1xuICAgICAgbGV0IGxhc3QgPSAwO1xuICAgICAgLy8gU2VhcmNoIHRoZSBhcnJheSBmb3IgdGhlIGZpcnN0IHRpbWVzdGFtcCB0aGF0IGlzbid0IGV4cGlyZWQgYW5kXG4gICAgICAvLyB0cnVuY2F0ZSB0aGUgYnVmZmVyIHVwIHRvIHRoYXQgcG9pbnQuXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IF9idWZmZXIubGVuZ3RoICYmIChfYnVmZmVyW2ldIGFzIG51bWJlcikgPD0gbm93OyBpICs9IDIpIHtcbiAgICAgICAgbGFzdCA9IGk7XG4gICAgICB9XG4gICAgICBsYXN0ICYmIF9idWZmZXIuc3BsaWNlKDAsIGxhc3QgKyAxKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuL1N1YnNjcmliZXInO1xuXG4vKipcbiAqIEEgdmFyaWFudCBvZiBTdWJqZWN0IHRoYXQgb25seSBlbWl0cyBhIHZhbHVlIHdoZW4gaXQgY29tcGxldGVzLiBJdCB3aWxsIGVtaXRcbiAqIGl0cyBsYXRlc3QgdmFsdWUgdG8gYWxsIGl0cyBvYnNlcnZlcnMgb24gY29tcGxldGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzeW5jU3ViamVjdDxUPiBleHRlbmRzIFN1YmplY3Q8VD4ge1xuICBwcml2YXRlIF92YWx1ZTogVCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICBwcml2YXRlIF9pc0NvbXBsZXRlID0gZmFsc2U7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcm90ZWN0ZWQgX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxUPikge1xuICAgIGNvbnN0IHsgaGFzRXJyb3IsIF9oYXNWYWx1ZSwgX3ZhbHVlLCB0aHJvd25FcnJvciwgaXNTdG9wcGVkLCBfaXNDb21wbGV0ZSB9ID0gdGhpcztcbiAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgIH0gZWxzZSBpZiAoaXNTdG9wcGVkIHx8IF9pc0NvbXBsZXRlKSB7XG4gICAgICBfaGFzVmFsdWUgJiYgc3Vic2NyaWJlci5uZXh0KF92YWx1ZSEpO1xuICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5leHQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5faGFzVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgX2hhc1ZhbHVlLCBfdmFsdWUsIF9pc0NvbXBsZXRlIH0gPSB0aGlzO1xuICAgIGlmICghX2lzQ29tcGxldGUpIHtcbiAgICAgIHRoaXMuX2lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgX2hhc1ZhbHVlICYmIHN1cGVyLm5leHQoX3ZhbHVlISk7XG4gICAgICBzdXBlci5jb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IFNjaGVkdWxlciB9IGZyb20gJy4uL1NjaGVkdWxlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgU2NoZWR1bGVyQWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIEEgdW5pdCBvZiB3b3JrIHRvIGJlIGV4ZWN1dGVkIGluIGEgYHNjaGVkdWxlcmAuIEFuIGFjdGlvbiBpcyB0eXBpY2FsbHlcbiAqIGNyZWF0ZWQgZnJvbSB3aXRoaW4gYSB7QGxpbmsgU2NoZWR1bGVyTGlrZX0gYW5kIGFuIFJ4SlMgdXNlciBkb2VzIG5vdCBuZWVkIHRvIGNvbmNlcm5cbiAqIHRoZW1zZWx2ZXMgYWJvdXQgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBhbiBBY3Rpb24uXG4gKlxuICogYGBgdHNcbiAqIGNsYXNzIEFjdGlvbjxUPiBleHRlbmRzIFN1YnNjcmlwdGlvbiB7XG4gKiAgIG5ldyAoc2NoZWR1bGVyOiBTY2hlZHVsZXIsIHdvcms6IChzdGF0ZT86IFQpID0+IHZvaWQpO1xuICogICBzY2hlZHVsZShzdGF0ZT86IFQsIGRlbGF5OiBudW1iZXIgPSAwKTogU3Vic2NyaXB0aW9uO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb248VD4gZXh0ZW5kcyBTdWJzY3JpcHRpb24ge1xuICBjb25zdHJ1Y3RvcihzY2hlZHVsZXI6IFNjaGVkdWxlciwgd29yazogKHRoaXM6IFNjaGVkdWxlckFjdGlvbjxUPiwgc3RhdGU/OiBUKSA9PiB2b2lkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICAvKipcbiAgICogU2NoZWR1bGVzIHRoaXMgYWN0aW9uIG9uIGl0cyBwYXJlbnQge0BsaW5rIFNjaGVkdWxlckxpa2V9IGZvciBleGVjdXRpb24uIE1heSBiZSBwYXNzZWRcbiAgICogc29tZSBjb250ZXh0IG9iamVjdCwgYHN0YXRlYC4gTWF5IGhhcHBlbiBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsXG4gICAqIGFjY29yZGluZyB0byB0aGUgYGRlbGF5YCBwYXJhbWV0ZXIsIGlmIHNwZWNpZmllZC5cbiAgICogQHBhcmFtIHN0YXRlIFNvbWUgY29udGV4dHVhbCBkYXRhIHRoYXQgdGhlIGB3b3JrYCBmdW5jdGlvbiB1c2VzIHdoZW4gY2FsbGVkIGJ5IHRoZVxuICAgKiBTY2hlZHVsZXIuXG4gICAqIEBwYXJhbSBkZWxheSBUaW1lIHRvIHdhaXQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgd29yaywgd2hlcmUgdGhlIHRpbWUgdW5pdCBpcyBpbXBsaWNpdFxuICAgKiBhbmQgZGVmaW5lZCBieSB0aGUgU2NoZWR1bGVyLlxuICAgKiBAcmV0dXJuIEEgc3Vic2NyaXB0aW9uIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdW5zdWJzY3JpYmUgdGhlIHNjaGVkdWxlZCB3b3JrLlxuICAgKi9cbiAgcHVibGljIHNjaGVkdWxlKHN0YXRlPzogVCwgZGVsYXk6IG51bWJlciA9IDApOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBUaW1lckhhbmRsZSB9IGZyb20gJy4vdGltZXJIYW5kbGUnO1xudHlwZSBTZXRJbnRlcnZhbEZ1bmN0aW9uID0gKGhhbmRsZXI6ICgpID0+IHZvaWQsIHRpbWVvdXQ/OiBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKSA9PiBUaW1lckhhbmRsZTtcbnR5cGUgQ2xlYXJJbnRlcnZhbEZ1bmN0aW9uID0gKGhhbmRsZTogVGltZXJIYW5kbGUpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBJbnRlcnZhbFByb3ZpZGVyIHtcbiAgc2V0SW50ZXJ2YWw6IFNldEludGVydmFsRnVuY3Rpb247XG4gIGNsZWFySW50ZXJ2YWw6IENsZWFySW50ZXJ2YWxGdW5jdGlvbjtcbiAgZGVsZWdhdGU6XG4gICAgfCB7XG4gICAgICAgIHNldEludGVydmFsOiBTZXRJbnRlcnZhbEZ1bmN0aW9uO1xuICAgICAgICBjbGVhckludGVydmFsOiBDbGVhckludGVydmFsRnVuY3Rpb247XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBpbnRlcnZhbFByb3ZpZGVyOiBJbnRlcnZhbFByb3ZpZGVyID0ge1xuICAvLyBXaGVuIGFjY2Vzc2luZyB0aGUgZGVsZWdhdGUsIHVzZSB0aGUgdmFyaWFibGUgcmF0aGVyIHRoYW4gYHRoaXNgIHNvIHRoYXRcbiAgLy8gdGhlIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYmVpbmcgYm91bmQgdG8gdGhlIHByb3ZpZGVyLlxuICBzZXRJbnRlcnZhbChoYW5kbGVyOiAoKSA9PiB2b2lkLCB0aW1lb3V0PzogbnVtYmVyLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgeyBkZWxlZ2F0ZSB9ID0gaW50ZXJ2YWxQcm92aWRlcjtcbiAgICBpZiAoZGVsZWdhdGU/LnNldEludGVydmFsKSB7XG4gICAgICByZXR1cm4gZGVsZWdhdGUuc2V0SW50ZXJ2YWwoaGFuZGxlciwgdGltZW91dCwgLi4uYXJncyk7XG4gICAgfVxuICAgIHJldHVybiBzZXRJbnRlcnZhbChoYW5kbGVyLCB0aW1lb3V0LCAuLi5hcmdzKTtcbiAgfSxcbiAgY2xlYXJJbnRlcnZhbChoYW5kbGUpIHtcbiAgICBjb25zdCB7IGRlbGVnYXRlIH0gPSBpbnRlcnZhbFByb3ZpZGVyO1xuICAgIHJldHVybiAoZGVsZWdhdGU/LmNsZWFySW50ZXJ2YWwgfHwgY2xlYXJJbnRlcnZhbCkoaGFuZGxlIGFzIGFueSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuIiwgImltcG9ydCB7IEFjdGlvbiB9IGZyb20gJy4vQWN0aW9uJztcbmltcG9ydCB7IFNjaGVkdWxlckFjdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBBc3luY1NjaGVkdWxlciB9IGZyb20gJy4vQXN5bmNTY2hlZHVsZXInO1xuaW1wb3J0IHsgaW50ZXJ2YWxQcm92aWRlciB9IGZyb20gJy4vaW50ZXJ2YWxQcm92aWRlcic7XG5pbXBvcnQgeyBhcnJSZW1vdmUgfSBmcm9tICcuLi91dGlsL2FyclJlbW92ZSc7XG5pbXBvcnQgeyBUaW1lckhhbmRsZSB9IGZyb20gJy4vdGltZXJIYW5kbGUnO1xuXG5leHBvcnQgY2xhc3MgQXN5bmNBY3Rpb248VD4gZXh0ZW5kcyBBY3Rpb248VD4ge1xuICBwdWJsaWMgaWQ6IFRpbWVySGFuZGxlIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgc3RhdGU/OiBUO1xuICAvLyBAdHMtaWdub3JlOiBQcm9wZXJ0eSBoYXMgbm8gaW5pdGlhbGl6ZXIgYW5kIGlzIG5vdCBkZWZpbml0ZWx5IGFzc2lnbmVkXG4gIHB1YmxpYyBkZWxheTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgcGVuZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzY2hlZHVsZXI6IEFzeW5jU2NoZWR1bGVyLCBwcm90ZWN0ZWQgd29yazogKHRoaXM6IFNjaGVkdWxlckFjdGlvbjxUPiwgc3RhdGU/OiBUKSA9PiB2b2lkKSB7XG4gICAgc3VwZXIoc2NoZWR1bGVyLCB3b3JrKTtcbiAgfVxuXG4gIHB1YmxpYyBzY2hlZHVsZShzdGF0ZT86IFQsIGRlbGF5OiBudW1iZXIgPSAwKTogU3Vic2NyaXB0aW9uIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFsd2F5cyByZXBsYWNlIHRoZSBjdXJyZW50IHN0YXRlIHdpdGggdGhlIG5ldyBzdGF0ZS5cbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG5cbiAgICBjb25zdCBpZCA9IHRoaXMuaWQ7XG4gICAgY29uc3Qgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG5cbiAgICAvL1xuICAgIC8vIEltcG9ydGFudCBpbXBsZW1lbnRhdGlvbiBub3RlOlxuICAgIC8vXG4gICAgLy8gQWN0aW9ucyBvbmx5IGV4ZWN1dGUgb25jZSBieSBkZWZhdWx0LCB1bmxlc3MgcmVzY2hlZHVsZWQgZnJvbSB3aXRoaW4gdGhlXG4gICAgLy8gc2NoZWR1bGVkIGNhbGxiYWNrLiBUaGlzIGFsbG93cyB1cyB0byBpbXBsZW1lbnQgc2luZ2xlIGFuZCByZXBlYXRcbiAgICAvLyBhY3Rpb25zIHZpYSB0aGUgc2FtZSBjb2RlIHBhdGgsIHdpdGhvdXQgYWRkaW5nIEFQSSBzdXJmYWNlIGFyZWEsIGFzIHdlbGxcbiAgICAvLyBhcyBtaW1pYyB0cmFkaXRpb25hbCByZWN1cnNpb24gYnV0IGFjcm9zcyBhc3luY2hyb25vdXMgYm91bmRhcmllcy5cbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIEpTIHJ1bnRpbWVzIGFuZCB0aW1lcnMgZGlzdGluZ3Vpc2ggYmV0d2VlbiBpbnRlcnZhbHMgYWNoaWV2ZWQgYnlcbiAgICAvLyBzZXJpYWwgYHNldFRpbWVvdXRgIGNhbGxzIHZzLiBhIHNpbmdsZSBgc2V0SW50ZXJ2YWxgIGNhbGwuIEFuIGludGVydmFsIG9mXG4gICAgLy8gc2VyaWFsIGBzZXRUaW1lb3V0YCBjYWxscyBjYW4gYmUgaW5kaXZpZHVhbGx5IGRlbGF5ZWQsIHdoaWNoIGRlbGF5c1xuICAgIC8vIHNjaGVkdWxpbmcgdGhlIG5leHQgYHNldFRpbWVvdXRgLCBhbmQgc28gb24uIGBzZXRJbnRlcnZhbGAgYXR0ZW1wdHMgdG9cbiAgICAvLyBndWFyYW50ZWUgdGhlIGludGVydmFsIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBtb3JlIHByZWNpc2VseSB0byB0aGVcbiAgICAvLyBpbnRlcnZhbCBwZXJpb2QsIHJlZ2FyZGxlc3Mgb2YgbG9hZC5cbiAgICAvL1xuICAgIC8vIFRoZXJlZm9yZSwgd2UgdXNlIGBzZXRJbnRlcnZhbGAgdG8gc2NoZWR1bGUgc2luZ2xlIGFuZCByZXBlYXQgYWN0aW9ucy5cbiAgICAvLyBJZiB0aGUgYWN0aW9uIHJlc2NoZWR1bGVzIGl0c2VsZiB3aXRoIHRoZSBzYW1lIGRlbGF5LCB0aGUgaW50ZXJ2YWwgaXMgbm90XG4gICAgLy8gY2FuY2VsZWQuIElmIHRoZSBhY3Rpb24gZG9lc24ndCByZXNjaGVkdWxlLCBvciByZXNjaGVkdWxlcyB3aXRoIGFcbiAgICAvLyBkaWZmZXJlbnQgZGVsYXksIHRoZSBpbnRlcnZhbCB3aWxsIGJlIGNhbmNlbGVkIGFmdGVyIHNjaGVkdWxlZCBjYWxsYmFja1xuICAgIC8vIGV4ZWN1dGlvbi5cbiAgICAvL1xuICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBwZW5kaW5nIGZsYWcgaW5kaWNhdGluZyB0aGF0IHRoaXMgYWN0aW9uIGhhcyBiZWVuIHNjaGVkdWxlZCwgb3JcbiAgICAvLyBoYXMgcmVjdXJzaXZlbHkgcmVzY2hlZHVsZWQgaXRzZWxmLlxuICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgLy8gSWYgdGhpcyBhY3Rpb24gaGFzIGFscmVhZHkgYW4gYXN5bmMgSWQsIGRvbid0IHJlcXVlc3QgYSBuZXcgb25lLlxuICAgIHRoaXMuaWQgPSB0aGlzLmlkID8/IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXI6IEFzeW5jU2NoZWR1bGVyLCBfaWQ/OiBUaW1lckhhbmRsZSwgZGVsYXk6IG51bWJlciA9IDApOiBUaW1lckhhbmRsZSB7XG4gICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlY3ljbGVBc3luY0lkKF9zY2hlZHVsZXI6IEFzeW5jU2NoZWR1bGVyLCBpZD86IFRpbWVySGFuZGxlLCBkZWxheTogbnVtYmVyIHwgbnVsbCA9IDApOiBUaW1lckhhbmRsZSB8IHVuZGVmaW5lZCB7XG4gICAgLy8gSWYgdGhpcyBhY3Rpb24gaXMgcmVzY2hlZHVsZWQgd2l0aCB0aGUgc2FtZSBkZWxheSB0aW1lLCBkb24ndCBjbGVhciB0aGUgaW50ZXJ2YWwgaWQuXG4gICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBhY3Rpb24ncyBkZWxheSB0aW1lIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IGRlbGF5LFxuICAgIC8vIG9yIHRoZSBhY3Rpb24gaGFzIGJlZW4gcmVzY2hlZHVsZWQgYmVmb3JlIGl0J3MgZXhlY3V0ZWQsIGNsZWFyIHRoZSBpbnRlcnZhbCBpZFxuICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogSW1tZWRpYXRlbHkgZXhlY3V0ZXMgdGhpcyBhY3Rpb24gYW5kIHRoZSBgd29ya2AgaXQgY29udGFpbnMuXG4gICAqL1xuICBwdWJsaWMgZXhlY3V0ZShzdGF0ZTogVCwgZGVsYXk6IG51bWJlcik6IGFueSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgLy8gRGVxdWV1ZSBpZiB0aGUgYWN0aW9uIGRpZG4ndCByZXNjaGVkdWxlIGl0c2VsZi4gRG9uJ3QgY2FsbFxuICAgICAgLy8gdW5zdWJzY3JpYmUoKSwgYmVjYXVzZSB0aGUgYWN0aW9uIGNvdWxkIHJlc2NoZWR1bGUgbGF0ZXIuXG4gICAgICAvLyBGb3IgZXhhbXBsZTpcbiAgICAgIC8vIGBgYFxuICAgICAgLy8gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uIGRvV29yayhjb3VudGVyKSB7XG4gICAgICAvLyAgIC8qIC4uLiBJJ20gYSBidXN5IHdvcmtlciBiZWUgLi4uICovXG4gICAgICAvLyAgIHZhciBvcmlnaW5hbEFjdGlvbiA9IHRoaXM7XG4gICAgICAvLyAgIC8qIHdhaXQgMTAwbXMgYmVmb3JlIHJlc2NoZWR1bGluZyB0aGUgYWN0aW9uICovXG4gICAgICAvLyAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gICAgIG9yaWdpbmFsQWN0aW9uLnNjaGVkdWxlKGNvdW50ZXIgKyAxKTtcbiAgICAgIC8vICAgfSwgMTAwKTtcbiAgICAgIC8vIH0sIDEwMDApO1xuICAgICAgLy8gYGBgXG4gICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9leGVjdXRlKHN0YXRlOiBULCBfZGVsYXk6IG51bWJlcik6IGFueSB7XG4gICAgbGV0IGVycm9yZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgZXJyb3JWYWx1ZTogYW55O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgLy8gSEFDSzogU2luY2UgY29kZSBlbHNld2hlcmUgaXMgcmVseWluZyBvbiB0aGUgXCJ0cnV0aGluZXNzXCIgb2YgdGhlXG4gICAgICAvLyByZXR1cm4gaGVyZSwgd2UgY2FuJ3QgaGF2ZSBpdCByZXR1cm4gXCJcIiBvciAwIG9yIGZhbHNlLlxuICAgICAgLy8gVE9ETzogQ2xlYW4gdGhpcyB1cCB3aGVuIHdlIHJlZmFjdG9yIHNjaGVkdWxlcnMgbWlkLXZlcnNpb24tOCBvciBzby5cbiAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgIH1cbiAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgdW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgY29uc3QgeyBpZCwgc2NoZWR1bGVyIH0gPSB0aGlzO1xuICAgICAgY29uc3QgeyBhY3Rpb25zIH0gPSBzY2hlZHVsZXI7XG5cbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwhO1xuICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRlbGF5ID0gbnVsbCE7XG4gICAgICBzdXBlci51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIiwgImxldCBuZXh0SGFuZGxlID0gMTtcbi8vIFRoZSBwcm9taXNlIG5lZWRzIHRvIGJlIGNyZWF0ZWQgbGF6aWx5IG90aGVyd2lzZSBpdCB3b24ndCBiZSBwYXRjaGVkIGJ5IFpvbmVzXG5sZXQgcmVzb2x2ZWQ6IFByb21pc2U8YW55PjtcbmNvbnN0IGFjdGl2ZUhhbmRsZXM6IHsgW2tleTogbnVtYmVyXTogYW55IH0gPSB7fTtcblxuLyoqXG4gKiBGaW5kcyB0aGUgaGFuZGxlIGluIHRoZSBsaXN0IG9mIGFjdGl2ZSBoYW5kbGVzLCBhbmQgcmVtb3ZlcyBpdC5cbiAqIFJldHVybnMgYHRydWVgIGlmIGZvdW5kLCBgZmFsc2VgIG90aGVyd2lzZS4gVXNlZCBib3RoIHRvIGNsZWFyXG4gKiBJbW1lZGlhdGUgc2NoZWR1bGVkIHRhc2tzLCBhbmQgdG8gaWRlbnRpZnkgaWYgYSB0YXNrIHNob3VsZCBiZSBzY2hlZHVsZWQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICBpZiAoaGFuZGxlIGluIGFjdGl2ZUhhbmRsZXMpIHtcbiAgICBkZWxldGUgYWN0aXZlSGFuZGxlc1toYW5kbGVdO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHRvIHNjaGVkdWxlIGFuZCB1bnNjaGVkdWxlIG1pY3JvdGFza3MuXG4gKi9cbmV4cG9ydCBjb25zdCBJbW1lZGlhdGUgPSB7XG4gIHNldEltbWVkaWF0ZShjYjogKCkgPT4gdm9pZCk6IG51bWJlciB7XG4gICAgY29uc3QgaGFuZGxlID0gbmV4dEhhbmRsZSsrO1xuICAgIGFjdGl2ZUhhbmRsZXNbaGFuZGxlXSA9IHRydWU7XG4gICAgaWYgKCFyZXNvbHZlZCkge1xuICAgICAgcmVzb2x2ZWQgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmVzb2x2ZWQudGhlbigoKSA9PiBmaW5kQW5kQ2xlYXJIYW5kbGUoaGFuZGxlKSAmJiBjYigpKTtcbiAgICByZXR1cm4gaGFuZGxlO1xuICB9LFxuXG4gIGNsZWFySW1tZWRpYXRlKGhhbmRsZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZSk7XG4gIH0sXG59O1xuXG4vKipcbiAqIFVzZWQgZm9yIGludGVybmFsIHRlc3RpbmcgcHVycG9zZXMgb25seS4gRG8gbm90IGV4cG9ydCBmcm9tIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBUZXN0VG9vbHMgPSB7XG4gIHBlbmRpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdGl2ZUhhbmRsZXMpLmxlbmd0aDtcbiAgfVxufTtcbiIsICJpbXBvcnQgeyBJbW1lZGlhdGUgfSBmcm9tICcuLi91dGlsL0ltbWVkaWF0ZSc7XG5pbXBvcnQgdHlwZSB7IFRpbWVySGFuZGxlIH0gZnJvbSAnLi90aW1lckhhbmRsZSc7XG5jb25zdCB7IHNldEltbWVkaWF0ZSwgY2xlYXJJbW1lZGlhdGUgfSA9IEltbWVkaWF0ZTtcblxudHlwZSBTZXRJbW1lZGlhdGVGdW5jdGlvbiA9IChoYW5kbGVyOiAoKSA9PiB2b2lkLCAuLi5hcmdzOiBhbnlbXSkgPT4gVGltZXJIYW5kbGU7XG50eXBlIENsZWFySW1tZWRpYXRlRnVuY3Rpb24gPSAoaGFuZGxlOiBUaW1lckhhbmRsZSkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIEltbWVkaWF0ZVByb3ZpZGVyIHtcbiAgc2V0SW1tZWRpYXRlOiBTZXRJbW1lZGlhdGVGdW5jdGlvbjtcbiAgY2xlYXJJbW1lZGlhdGU6IENsZWFySW1tZWRpYXRlRnVuY3Rpb247XG4gIGRlbGVnYXRlOlxuICAgIHwge1xuICAgICAgICBzZXRJbW1lZGlhdGU6IFNldEltbWVkaWF0ZUZ1bmN0aW9uO1xuICAgICAgICBjbGVhckltbWVkaWF0ZTogQ2xlYXJJbW1lZGlhdGVGdW5jdGlvbjtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNvbnN0IGltbWVkaWF0ZVByb3ZpZGVyOiBJbW1lZGlhdGVQcm92aWRlciA9IHtcbiAgLy8gV2hlbiBhY2Nlc3NpbmcgdGhlIGRlbGVnYXRlLCB1c2UgdGhlIHZhcmlhYmxlIHJhdGhlciB0aGFuIGB0aGlzYCBzbyB0aGF0XG4gIC8vIHRoZSBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGJlaW5nIGJvdW5kIHRvIHRoZSBwcm92aWRlci5cbiAgc2V0SW1tZWRpYXRlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCB7IGRlbGVnYXRlIH0gPSBpbW1lZGlhdGVQcm92aWRlcjtcbiAgICByZXR1cm4gKGRlbGVnYXRlPy5zZXRJbW1lZGlhdGUgfHwgc2V0SW1tZWRpYXRlKSguLi5hcmdzKTtcbiAgfSxcbiAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgY29uc3QgeyBkZWxlZ2F0ZSB9ID0gaW1tZWRpYXRlUHJvdmlkZXI7XG4gICAgcmV0dXJuIChkZWxlZ2F0ZT8uY2xlYXJJbW1lZGlhdGUgfHwgY2xlYXJJbW1lZGlhdGUpKGhhbmRsZSBhcyBhbnkpO1xuICB9LFxuICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbiIsICJpbXBvcnQgeyBBc3luY0FjdGlvbiB9IGZyb20gJy4vQXN5bmNBY3Rpb24nO1xuaW1wb3J0IHsgQXNhcFNjaGVkdWxlciB9IGZyb20gJy4vQXNhcFNjaGVkdWxlcic7XG5pbXBvcnQgeyBTY2hlZHVsZXJBY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpbW1lZGlhdGVQcm92aWRlciB9IGZyb20gJy4vaW1tZWRpYXRlUHJvdmlkZXInO1xuaW1wb3J0IHsgVGltZXJIYW5kbGUgfSBmcm9tICcuL3RpbWVySGFuZGxlJztcblxuZXhwb3J0IGNsYXNzIEFzYXBBY3Rpb248VD4gZXh0ZW5kcyBBc3luY0FjdGlvbjxUPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzY2hlZHVsZXI6IEFzYXBTY2hlZHVsZXIsIHByb3RlY3RlZCB3b3JrOiAodGhpczogU2NoZWR1bGVyQWN0aW9uPFQ+LCBzdGF0ZT86IFQpID0+IHZvaWQpIHtcbiAgICBzdXBlcihzY2hlZHVsZXIsIHdvcmspO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVlc3RBc3luY0lkKHNjaGVkdWxlcjogQXNhcFNjaGVkdWxlciwgaWQ/OiBUaW1lckhhbmRsZSwgZGVsYXk6IG51bWJlciA9IDApOiBUaW1lckhhbmRsZSB7XG4gICAgLy8gSWYgZGVsYXkgaXMgZ3JlYXRlciB0aGFuIDAsIHJlcXVlc3QgYXMgYW4gYXN5bmMgYWN0aW9uLlxuICAgIGlmIChkZWxheSAhPT0gbnVsbCAmJiBkZWxheSA+IDApIHtcbiAgICAgIHJldHVybiBzdXBlci5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgfVxuICAgIC8vIFB1c2ggdGhlIGFjdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBzY2hlZHVsZXIgcXVldWUuXG4gICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAvLyBJZiBhIG1pY3JvdGFzayBoYXMgYWxyZWFkeSBiZWVuIHNjaGVkdWxlZCwgZG9uJ3Qgc2NoZWR1bGUgYW5vdGhlclxuICAgIC8vIG9uZS4gSWYgYSBtaWNyb3Rhc2sgaGFzbid0IGJlZW4gc2NoZWR1bGVkIHlldCwgc2NoZWR1bGUgb25lIG5vdy4gUmV0dXJuXG4gICAgLy8gdGhlIGN1cnJlbnQgc2NoZWR1bGVkIG1pY3JvdGFzayBpZC5cbiAgICByZXR1cm4gc2NoZWR1bGVyLl9zY2hlZHVsZWQgfHwgKHNjaGVkdWxlci5fc2NoZWR1bGVkID0gaW1tZWRpYXRlUHJvdmlkZXIuc2V0SW1tZWRpYXRlKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdW5kZWZpbmVkKSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlY3ljbGVBc3luY0lkKHNjaGVkdWxlcjogQXNhcFNjaGVkdWxlciwgaWQ/OiBUaW1lckhhbmRsZSwgZGVsYXk6IG51bWJlciA9IDApOiBUaW1lckhhbmRsZSB8IHVuZGVmaW5lZCB7XG4gICAgLy8gSWYgZGVsYXkgZXhpc3RzIGFuZCBpcyBncmVhdGVyIHRoYW4gMCwgb3IgaWYgdGhlIGRlbGF5IGlzIG51bGwgKHRoZVxuICAgIC8vIGFjdGlvbiB3YXNuJ3QgcmVzY2hlZHVsZWQpIGJ1dCB3YXMgb3JpZ2luYWxseSBzY2hlZHVsZWQgYXMgYW4gYXN5bmNcbiAgICAvLyBhY3Rpb24sIHRoZW4gcmVjeWNsZSBhcyBhbiBhc3luYyBhY3Rpb24uXG4gICAgaWYgKGRlbGF5ICE9IG51bGwgPyBkZWxheSA+IDAgOiB0aGlzLmRlbGF5ID4gMCkge1xuICAgICAgcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICB9XG4gICAgLy8gSWYgdGhlIHNjaGVkdWxlciBxdWV1ZSBoYXMgbm8gcmVtYWluaW5nIGFjdGlvbnMgd2l0aCB0aGUgc2FtZSBhc3luYyBpZCxcbiAgICAvLyBjYW5jZWwgdGhlIHJlcXVlc3RlZCBtaWNyb3Rhc2sgYW5kIHNldCB0aGUgc2NoZWR1bGVkIGZsYWcgdG8gdW5kZWZpbmVkXG4gICAgLy8gc28gdGhlIG5leHQgQXNhcEFjdGlvbiB3aWxsIHJlcXVlc3QgaXRzIG93bi5cbiAgICBjb25zdCB7IGFjdGlvbnMgfSA9IHNjaGVkdWxlcjtcbiAgICBpZiAoaWQgIT0gbnVsbCAmJiBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0/LmlkICE9PSBpZCkge1xuICAgICAgaW1tZWRpYXRlUHJvdmlkZXIuY2xlYXJJbW1lZGlhdGUoaWQpO1xuICAgICAgaWYgKHNjaGVkdWxlci5fc2NoZWR1bGVkID09PSBpZCkge1xuICAgICAgICBzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmV0dXJuIHVuZGVmaW5lZCBzbyB0aGUgYWN0aW9uIGtub3dzIHRvIHJlcXVlc3QgYSBuZXcgYXN5bmMgaWQgaWYgaXQncyByZXNjaGVkdWxlZC5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi9zY2hlZHVsZXIvQWN0aW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IFNjaGVkdWxlckxpa2UsIFNjaGVkdWxlckFjdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIH0gZnJvbSAnLi9zY2hlZHVsZXIvZGF0ZVRpbWVzdGFtcFByb3ZpZGVyJztcblxuLyoqXG4gKiBBbiBleGVjdXRpb24gY29udGV4dCBhbmQgYSBkYXRhIHN0cnVjdHVyZSB0byBvcmRlciB0YXNrcyBhbmQgc2NoZWR1bGUgdGhlaXJcbiAqIGV4ZWN1dGlvbi4gUHJvdmlkZXMgYSBub3Rpb24gb2YgKHBvdGVudGlhbGx5IHZpcnR1YWwpIHRpbWUsIHRocm91Z2ggdGhlXG4gKiBgbm93KClgIGdldHRlciBtZXRob2QuXG4gKlxuICogRWFjaCB1bml0IG9mIHdvcmsgaW4gYSBTY2hlZHVsZXIgaXMgY2FsbGVkIGFuIGBBY3Rpb25gLlxuICpcbiAqIGBgYHRzXG4gKiBjbGFzcyBTY2hlZHVsZXIge1xuICogICBub3coKTogbnVtYmVyO1xuICogICBzY2hlZHVsZSh3b3JrLCBkZWxheT8sIHN0YXRlPyk6IFN1YnNjcmlwdGlvbjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBkZXByZWNhdGVkIFNjaGVkdWxlciBpcyBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgUnhKUywgYW5kXG4gKiBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkuIFJhdGhlciwgY3JlYXRlIHlvdXIgb3duIGNsYXNzIGFuZCBpbXBsZW1lbnRcbiAqIHtAbGluayBTY2hlZHVsZXJMaWtlfS4gV2lsbCBiZSBtYWRlIGludGVybmFsIGluIHY4LlxuICovXG5leHBvcnQgY2xhc3MgU2NoZWR1bGVyIGltcGxlbWVudHMgU2NoZWR1bGVyTGlrZSB7XG4gIHB1YmxpYyBzdGF0aWMgbm93OiAoKSA9PiBudW1iZXIgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2NoZWR1bGVyQWN0aW9uQ3RvcjogdHlwZW9mIEFjdGlvbiwgbm93OiAoKSA9PiBudW1iZXIgPSBTY2hlZHVsZXIubm93KSB7XG4gICAgdGhpcy5ub3cgPSBub3c7XG4gIH1cblxuICAvKipcbiAgICogQSBnZXR0ZXIgbWV0aG9kIHRoYXQgcmV0dXJucyBhIG51bWJlciByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgdGltZVxuICAgKiAoYXQgdGhlIHRpbWUgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkKSBhY2NvcmRpbmcgdG8gdGhlIHNjaGVkdWxlcidzIG93blxuICAgKiBpbnRlcm5hbCBjbG9jay5cbiAgICogQHJldHVybiBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdGltZS4gTWF5IG9yIG1heSBub3RcbiAgICogaGF2ZSBhIHJlbGF0aW9uIHRvIHdhbGwtY2xvY2sgdGltZS4gTWF5IG9yIG1heSBub3QgcmVmZXIgdG8gYSB0aW1lIHVuaXRcbiAgICogKGUuZy4gbWlsbGlzZWNvbmRzKS5cbiAgICovXG4gIHB1YmxpYyBub3c6ICgpID0+IG51bWJlcjtcblxuICAvKipcbiAgICogU2NoZWR1bGVzIGEgZnVuY3Rpb24sIGB3b3JrYCwgZm9yIGV4ZWN1dGlvbi4gTWF5IGhhcHBlbiBhdCBzb21lIHBvaW50IGluXG4gICAqIHRoZSBmdXR1cmUsIGFjY29yZGluZyB0byB0aGUgYGRlbGF5YCBwYXJhbWV0ZXIsIGlmIHNwZWNpZmllZC4gTWF5IGJlIHBhc3NlZFxuICAgKiBzb21lIGNvbnRleHQgb2JqZWN0LCBgc3RhdGVgLCB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgYHdvcmtgIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGUgZ2l2ZW4gYXJndW1lbnRzIHdpbGwgYmUgcHJvY2Vzc2VkIGFuIHN0b3JlZCBhcyBhbiBBY3Rpb24gb2JqZWN0IGluIGFcbiAgICogcXVldWUgb2YgYWN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHdvcmsgQSBmdW5jdGlvbiByZXByZXNlbnRpbmcgYSB0YXNrLCBvciBzb21lIHVuaXQgb2Ygd29yayB0byBiZVxuICAgKiBleGVjdXRlZCBieSB0aGUgU2NoZWR1bGVyLlxuICAgKiBAcGFyYW0gZGVsYXkgVGltZSB0byB3YWl0IGJlZm9yZSBleGVjdXRpbmcgdGhlIHdvcmssIHdoZXJlIHRoZSB0aW1lIHVuaXQgaXNcbiAgICogaW1wbGljaXQgYW5kIGRlZmluZWQgYnkgdGhlIFNjaGVkdWxlciBpdHNlbGYuXG4gICAqIEBwYXJhbSBzdGF0ZSBTb21lIGNvbnRleHR1YWwgZGF0YSB0aGF0IHRoZSBgd29ya2AgZnVuY3Rpb24gdXNlcyB3aGVuIGNhbGxlZFxuICAgKiBieSB0aGUgU2NoZWR1bGVyLlxuICAgKiBAcmV0dXJuIEEgc3Vic2NyaXB0aW9uIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdW5zdWJzY3JpYmUgdGhlIHNjaGVkdWxlZCB3b3JrLlxuICAgKi9cbiAgcHVibGljIHNjaGVkdWxlPFQ+KHdvcms6ICh0aGlzOiBTY2hlZHVsZXJBY3Rpb248VD4sIHN0YXRlPzogVCkgPT4gdm9pZCwgZGVsYXk6IG51bWJlciA9IDAsIHN0YXRlPzogVCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3I8VD4odGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFNjaGVkdWxlciB9IGZyb20gJy4uL1NjaGVkdWxlcic7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuL0FjdGlvbic7XG5pbXBvcnQgeyBBc3luY0FjdGlvbiB9IGZyb20gJy4vQXN5bmNBY3Rpb24nO1xuaW1wb3J0IHsgVGltZXJIYW5kbGUgfSBmcm9tICcuL3RpbWVySGFuZGxlJztcblxuZXhwb3J0IGNsYXNzIEFzeW5jU2NoZWR1bGVyIGV4dGVuZHMgU2NoZWR1bGVyIHtcbiAgcHVibGljIGFjdGlvbnM6IEFycmF5PEFzeW5jQWN0aW9uPGFueT4+ID0gW107XG4gIC8qKlxuICAgKiBBIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgU2NoZWR1bGVyIGlzIGN1cnJlbnRseSBleGVjdXRpbmcgYSBiYXRjaCBvZlxuICAgKiBxdWV1ZWQgYWN0aW9ucy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogQW4gaW50ZXJuYWwgSUQgdXNlZCB0byB0cmFjayB0aGUgbGF0ZXN0IGFzeW5jaHJvbm91cyB0YXNrIHN1Y2ggYXMgdGhvc2VcbiAgICogY29taW5nIGZyb20gYHNldFRpbWVvdXRgLCBgc2V0SW50ZXJ2YWxgLCBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCwgYW5kXG4gICAqIG90aGVycy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3NjaGVkdWxlZDogVGltZXJIYW5kbGUgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoU2NoZWR1bGVyQWN0aW9uOiB0eXBlb2YgQWN0aW9uLCBub3c6ICgpID0+IG51bWJlciA9IFNjaGVkdWxlci5ub3cpIHtcbiAgICBzdXBlcihTY2hlZHVsZXJBY3Rpb24sIG5vdyk7XG4gIH1cblxuICBwdWJsaWMgZmx1c2goYWN0aW9uOiBBc3luY0FjdGlvbjxhbnk+KTogdm9pZCB7XG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGVycm9yOiBhbnk7XG4gICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcblxuICAgIGRvIHtcbiAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkhKSk7IC8vIGV4aGF1c3QgdGhlIHNjaGVkdWxlciBxdWV1ZVxuXG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpISkpIHtcbiAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBBc3luY0FjdGlvbiB9IGZyb20gJy4vQXN5bmNBY3Rpb24nO1xuaW1wb3J0IHsgQXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuL0FzeW5jU2NoZWR1bGVyJztcblxuZXhwb3J0IGNsYXNzIEFzYXBTY2hlZHVsZXIgZXh0ZW5kcyBBc3luY1NjaGVkdWxlciB7XG4gIHB1YmxpYyBmbHVzaChhY3Rpb24/OiBBc3luY0FjdGlvbjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAvLyBUaGUgYXN5bmMgaWQgdGhhdCBlZmZlY3RzIGEgY2FsbCB0byBmbHVzaCBpcyBzdG9yZWQgaW4gX3NjaGVkdWxlZC5cbiAgICAvLyBCZWZvcmUgZXhlY3V0aW5nIGFuIGFjdGlvbiwgaXQncyBuZWNlc3NhcnkgdG8gY2hlY2sgdGhlIGFjdGlvbidzIGFzeW5jXG4gICAgLy8gaWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBzdXBwb3NlZCB0byBiZSBleGVjdXRlZCBpbiB0aGUgY3VycmVudFxuICAgIC8vIGZsdXNoLlxuICAgIC8vIFByZXZpb3VzIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCB1c2VkIGEgY291bnQgdG8gZGV0ZXJtaW5lIHRoaXMsXG4gICAgLy8gYnV0IHRoYXQgd2FzIHVuc291bmQsIGFzIGFjdGlvbnMgdGhhdCBhcmUgdW5zdWJzY3JpYmVkIC0gaS5lLiBjYW5jZWxsZWQgLVxuICAgIC8vIGFyZSByZW1vdmVkIGZyb20gdGhlIGFjdGlvbnMgYXJyYXkgYW5kIHRoYXQgY2FuIHNoaWZ0IGFjdGlvbnMgdGhhdCBhcmVcbiAgICAvLyBzY2hlZHVsZWQgdG8gYmUgZXhlY3V0ZWQgaW4gYSBzdWJzZXF1ZW50IGZsdXNoIGludG8gcG9zaXRpb25zIGF0IHdoaWNoXG4gICAgLy8gdGhleSBhcmUgZXhlY3V0ZWQgd2l0aGluIHRoZSBjdXJyZW50IGZsdXNoLlxuICAgIGNvbnN0IGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7XG4gICAgdGhpcy5fc2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSB0aGlzO1xuICAgIGxldCBlcnJvcjogYW55O1xuICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCkhO1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpO1xuXG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSkge1xuICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IEFzYXBBY3Rpb24gfSBmcm9tICcuL0FzYXBBY3Rpb24nO1xuaW1wb3J0IHsgQXNhcFNjaGVkdWxlciB9IGZyb20gJy4vQXNhcFNjaGVkdWxlcic7XG5cbi8qKlxuICpcbiAqIEFzYXAgU2NoZWR1bGVyXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlBlcmZvcm0gdGFzayBhcyBmYXN0IGFzIGl0IGNhbiBiZSBwZXJmb3JtZWQgYXN5bmNocm9ub3VzbHk8L3NwYW4+XG4gKlxuICogYGFzYXBgIHNjaGVkdWxlciBiZWhhdmVzIHRoZSBzYW1lIGFzIHtAbGluayBhc3luY1NjaGVkdWxlcn0gc2NoZWR1bGVyIHdoZW4geW91IHVzZSBpdCB0byBkZWxheSB0YXNrXG4gKiBpbiB0aW1lLiBJZiBob3dldmVyIHlvdSBzZXQgZGVsYXkgdG8gYDBgLCBgYXNhcGAgd2lsbCB3YWl0IGZvciBjdXJyZW50IHN5bmNocm9ub3VzbHkgZXhlY3V0aW5nXG4gKiBjb2RlIHRvIGVuZCBhbmQgdGhlbiBpdCB3aWxsIHRyeSB0byBleGVjdXRlIGdpdmVuIHRhc2sgYXMgZmFzdCBhcyBwb3NzaWJsZS5cbiAqXG4gKiBgYXNhcGAgc2NoZWR1bGVyIHdpbGwgZG8gaXRzIGJlc3QgdG8gbWluaW1pemUgdGltZSBiZXR3ZWVuIGVuZCBvZiBjdXJyZW50bHkgZXhlY3V0aW5nIGNvZGVcbiAqIGFuZCBzdGFydCBvZiBzY2hlZHVsZWQgdGFzay4gVGhpcyBtYWtlcyBpdCBiZXN0IGNhbmRpZGF0ZSBmb3IgcGVyZm9ybWluZyBzbyBjYWxsZWQgXCJkZWZlcnJpbmdcIi5cbiAqIFRyYWRpdGlvbmFsbHkgdGhpcyB3YXMgYWNoaWV2ZWQgYnkgY2FsbGluZyBgc2V0VGltZW91dChkZWZlcnJlZFRhc2ssIDApYCwgYnV0IHRoYXQgdGVjaG5pcXVlIGludm9sdmVzXG4gKiBzb21lIChhbHRob3VnaCBtaW5pbWFsKSB1bndhbnRlZCBkZWxheS5cbiAqXG4gKiBOb3RlIHRoYXQgdXNpbmcgYGFzYXBgIHNjaGVkdWxlciBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgeW91ciB0YXNrIHdpbGwgYmUgZmlyc3QgdG8gcHJvY2Vzc1xuICogYWZ0ZXIgY3VycmVudGx5IGV4ZWN1dGluZyBjb2RlLiBJbiBwYXJ0aWN1bGFyLCBpZiBzb21lIHRhc2sgd2FzIGFsc28gc2NoZWR1bGVkIHdpdGggYGFzYXBgIGJlZm9yZSxcbiAqIHRoYXQgdGFzayB3aWxsIGV4ZWN1dGUgZmlyc3QuIFRoYXQgYmVpbmcgc2FpZCwgaWYgeW91IG5lZWQgdG8gc2NoZWR1bGUgdGFzayBhc3luY2hyb25vdXNseSwgYnV0XG4gKiBhcyBzb29uIGFzIHBvc3NpYmxlLCBgYXNhcGAgc2NoZWR1bGVyIGlzIHlvdXIgYmVzdCBiZXQuXG4gKlxuICogIyMgRXhhbXBsZVxuICogQ29tcGFyZSBhc3luYyBhbmQgYXNhcCBzY2hlZHVsZXI8XG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYXNhcFNjaGVkdWxlciwgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBhc3luY1NjaGVkdWxlci5zY2hlZHVsZSgoKSA9PiBjb25zb2xlLmxvZygnYXN5bmMnKSk7IC8vIHNjaGVkdWxpbmcgJ2FzeW5jJyBmaXJzdC4uLlxuICogYXNhcFNjaGVkdWxlci5zY2hlZHVsZSgoKSA9PiBjb25zb2xlLmxvZygnYXNhcCcpKTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8gXCJhc2FwXCJcbiAqIC8vIFwiYXN5bmNcIlxuICogLy8gLi4uIGJ1dCAnYXNhcCcgZ29lcyBmaXJzdCFcbiAqIGBgYFxuICovXG5cbmV4cG9ydCBjb25zdCBhc2FwU2NoZWR1bGVyID0gbmV3IEFzYXBTY2hlZHVsZXIoQXNhcEFjdGlvbik7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgUmVuYW1lZCB0byB7QGxpbmsgYXNhcFNjaGVkdWxlcn0uIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzYXAgPSBhc2FwU2NoZWR1bGVyO1xuIiwgImltcG9ydCB7IEFzeW5jQWN0aW9uIH0gZnJvbSAnLi9Bc3luY0FjdGlvbic7XG5pbXBvcnQgeyBBc3luY1NjaGVkdWxlciB9IGZyb20gJy4vQXN5bmNTY2hlZHVsZXInO1xuXG4vKipcbiAqXG4gKiBBc3luYyBTY2hlZHVsZXJcbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+U2NoZWR1bGUgdGFzayBhcyBpZiB5b3UgdXNlZCBzZXRUaW1lb3V0KHRhc2ssIGR1cmF0aW9uKTwvc3Bhbj5cbiAqXG4gKiBgYXN5bmNgIHNjaGVkdWxlciBzY2hlZHVsZXMgdGFza3MgYXN5bmNocm9ub3VzbHksIGJ5IHB1dHRpbmcgdGhlbSBvbiB0aGUgSmF2YVNjcmlwdFxuICogZXZlbnQgbG9vcCBxdWV1ZS4gSXQgaXMgYmVzdCB1c2VkIHRvIGRlbGF5IHRhc2tzIGluIHRpbWUgb3IgdG8gc2NoZWR1bGUgdGFza3MgcmVwZWF0aW5nXG4gKiBpbiBpbnRlcnZhbHMuXG4gKlxuICogSWYgeW91IGp1c3Qgd2FudCB0byBcImRlZmVyXCIgdGFzaywgdGhhdCBpcyB0byBwZXJmb3JtIGl0IHJpZ2h0IGFmdGVyIGN1cnJlbnRseVxuICogZXhlY3V0aW5nIHN5bmNocm9ub3VzIGNvZGUgZW5kcyAoY29tbW9ubHkgYWNoaWV2ZWQgYnkgYHNldFRpbWVvdXQoZGVmZXJyZWRUYXNrLCAwKWApLFxuICogYmV0dGVyIGNob2ljZSB3aWxsIGJlIHRoZSB7QGxpbmsgYXNhcFNjaGVkdWxlcn0gc2NoZWR1bGVyLlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKiBVc2UgYXN5bmMgc2NoZWR1bGVyIHRvIGRlbGF5IHRhc2tcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBhc3luY1NjaGVkdWxlciB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHRhc2sgPSAoKSA9PiBjb25zb2xlLmxvZygnaXQgd29ya3MhJyk7XG4gKlxuICogYXN5bmNTY2hlZHVsZXIuc2NoZWR1bGUodGFzaywgMjAwMCk7XG4gKlxuICogLy8gQWZ0ZXIgMiBzZWNvbmRzIGxvZ3M6XG4gKiAvLyBcIml0IHdvcmtzIVwiXG4gKiBgYGBcbiAqXG4gKiBVc2UgYXN5bmMgc2NoZWR1bGVyIHRvIHJlcGVhdCB0YXNrIGluIGludGVydmFsc1xuICogYGBgdHNcbiAqIGltcG9ydCB7IGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAncnhqcyc7XG4gKlxuICogZnVuY3Rpb24gdGFzayhzdGF0ZSkge1xuICogICBjb25zb2xlLmxvZyhzdGF0ZSk7XG4gKiAgIHRoaXMuc2NoZWR1bGUoc3RhdGUgKyAxLCAxMDAwKTsgLy8gYHRoaXNgIHJlZmVyZW5jZXMgY3VycmVudGx5IGV4ZWN1dGluZyBBY3Rpb24sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2UgcmVzY2hlZHVsZSB3aXRoIG5ldyBzdGF0ZSBhbmQgZGVsYXlcbiAqIH1cbiAqXG4gKiBhc3luY1NjaGVkdWxlci5zY2hlZHVsZSh0YXNrLCAzMDAwLCAwKTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8gMCBhZnRlciAzc1xuICogLy8gMSBhZnRlciA0c1xuICogLy8gMiBhZnRlciA1c1xuICogLy8gMyBhZnRlciA2c1xuICogYGBgXG4gKi9cblxuZXhwb3J0IGNvbnN0IGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBSZW5hbWVkIHRvIHtAbGluayBhc3luY1NjaGVkdWxlcn0uIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzeW5jID0gYXN5bmNTY2hlZHVsZXI7XG4iLCAiaW1wb3J0IHsgQXN5bmNBY3Rpb24gfSBmcm9tICcuL0FzeW5jQWN0aW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBRdWV1ZVNjaGVkdWxlciB9IGZyb20gJy4vUXVldWVTY2hlZHVsZXInO1xuaW1wb3J0IHsgU2NoZWR1bGVyQWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVGltZXJIYW5kbGUgfSBmcm9tICcuL3RpbWVySGFuZGxlJztcblxuZXhwb3J0IGNsYXNzIFF1ZXVlQWN0aW9uPFQ+IGV4dGVuZHMgQXN5bmNBY3Rpb248VD4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2NoZWR1bGVyOiBRdWV1ZVNjaGVkdWxlciwgcHJvdGVjdGVkIHdvcms6ICh0aGlzOiBTY2hlZHVsZXJBY3Rpb248VD4sIHN0YXRlPzogVCkgPT4gdm9pZCkge1xuICAgIHN1cGVyKHNjaGVkdWxlciwgd29yayk7XG4gIH1cblxuICBwdWJsaWMgc2NoZWR1bGUoc3RhdGU/OiBULCBkZWxheTogbnVtYmVyID0gMCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgcmV0dXJuIHN1cGVyLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfVxuICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZShzdGF0ZTogVCwgZGVsYXk6IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIGRlbGF5ID4gMCB8fCB0aGlzLmNsb3NlZCA/IHN1cGVyLmV4ZWN1dGUoc3RhdGUsIGRlbGF5KSA6IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXI6IFF1ZXVlU2NoZWR1bGVyLCBpZD86IFRpbWVySGFuZGxlLCBkZWxheTogbnVtYmVyID0gMCk6IFRpbWVySGFuZGxlIHtcbiAgICAvLyBJZiBkZWxheSBleGlzdHMgYW5kIGlzIGdyZWF0ZXIgdGhhbiAwLCBvciBpZiB0aGUgZGVsYXkgaXMgbnVsbCAodGhlXG4gICAgLy8gYWN0aW9uIHdhc24ndCByZXNjaGVkdWxlZCkgYnV0IHdhcyBvcmlnaW5hbGx5IHNjaGVkdWxlZCBhcyBhbiBhc3luY1xuICAgIC8vIGFjdGlvbiwgdGhlbiByZWN5Y2xlIGFzIGFuIGFzeW5jIGFjdGlvbi5cblxuICAgIGlmICgoZGVsYXkgIT0gbnVsbCAmJiBkZWxheSA+IDApIHx8IChkZWxheSA9PSBudWxsICYmIHRoaXMuZGVsYXkgPiAwKSkge1xuICAgICAgcmV0dXJuIHN1cGVyLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UgZmx1c2ggdGhlIHNjaGVkdWxlciBzdGFydGluZyB3aXRoIHRoaXMgYWN0aW9uLlxuICAgIHNjaGVkdWxlci5mbHVzaCh0aGlzKTtcblxuICAgIC8vIEhBQ0s6IEluIHRoZSBwYXN0LCB0aGlzIHdhcyByZXR1cm5pbmcgYHZvaWRgLiBIb3dldmVyLCBgdm9pZGAgaXNuJ3QgYSB2YWxpZFxuICAgIC8vIGBUaW1lckhhbmRsZWAsIGFuZCBnZW5lcmFsbHkgdGhlIHJldHVybiB2YWx1ZSBoZXJlIGlzbid0IHJlYWxseSB1c2VkLiBTbyB0aGVcbiAgICAvLyBjb21wcm9taXNlIGlzIHRvIHJldHVybiBgMGAgd2hpY2ggaXMgYm90aCBcImZhbHN5XCIgYW5kIGEgdmFsaWQgYFRpbWVySGFuZGxlYCxcbiAgICAvLyBhcyBvcHBvc2VkIHRvIHJlZmFjdG9yaW5nIGV2ZXJ5IG90aGVyIGluc3RhbmNlbyBvZiBgcmVxdWVzdEFzeW5jSWRgLlxuICAgIHJldHVybiAwO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuL0FzeW5jU2NoZWR1bGVyJztcblxuZXhwb3J0IGNsYXNzIFF1ZXVlU2NoZWR1bGVyIGV4dGVuZHMgQXN5bmNTY2hlZHVsZXIge1xufVxuIiwgImltcG9ydCB7IFF1ZXVlQWN0aW9uIH0gZnJvbSAnLi9RdWV1ZUFjdGlvbic7XG5pbXBvcnQgeyBRdWV1ZVNjaGVkdWxlciB9IGZyb20gJy4vUXVldWVTY2hlZHVsZXInO1xuXG4vKipcbiAqXG4gKiBRdWV1ZSBTY2hlZHVsZXJcbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+UHV0IGV2ZXJ5IG5leHQgdGFzayBvbiBhIHF1ZXVlLCBpbnN0ZWFkIG9mIGV4ZWN1dGluZyBpdCBpbW1lZGlhdGVseTwvc3Bhbj5cbiAqXG4gKiBgcXVldWVgIHNjaGVkdWxlciwgd2hlbiB1c2VkIHdpdGggZGVsYXksIGJlaGF2ZXMgdGhlIHNhbWUgYXMge0BsaW5rIGFzeW5jU2NoZWR1bGVyfSBzY2hlZHVsZXIuXG4gKlxuICogV2hlbiB1c2VkIHdpdGhvdXQgZGVsYXksIGl0IHNjaGVkdWxlcyBnaXZlbiB0YXNrIHN5bmNocm9ub3VzbHkgLSBleGVjdXRlcyBpdCByaWdodCB3aGVuXG4gKiBpdCBpcyBzY2hlZHVsZWQuIEhvd2V2ZXIgd2hlbiBjYWxsZWQgcmVjdXJzaXZlbHksIHRoYXQgaXMgd2hlbiBpbnNpZGUgdGhlIHNjaGVkdWxlZCB0YXNrLFxuICogYW5vdGhlciB0YXNrIGlzIHNjaGVkdWxlZCB3aXRoIHF1ZXVlIHNjaGVkdWxlciwgaW5zdGVhZCBvZiBleGVjdXRpbmcgaW1tZWRpYXRlbHkgYXMgd2VsbCxcbiAqIHRoYXQgdGFzayB3aWxsIGJlIHB1dCBvbiBhIHF1ZXVlIGFuZCB3YWl0IGZvciBjdXJyZW50IG9uZSB0byBmaW5pc2guXG4gKlxuICogVGhpcyBtZWFucyB0aGF0IHdoZW4geW91IGV4ZWN1dGUgdGFzayB3aXRoIGBxdWV1ZWAgc2NoZWR1bGVyLCB5b3UgYXJlIHN1cmUgaXQgd2lsbCBlbmRcbiAqIGJlZm9yZSBhbnkgb3RoZXIgdGFzayBzY2hlZHVsZWQgd2l0aCB0aGF0IHNjaGVkdWxlciB3aWxsIHN0YXJ0LlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKiBTY2hlZHVsZSByZWN1cnNpdmVseSBmaXJzdCwgdGhlbiBkbyBzb21ldGhpbmdcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBxdWV1ZVNjaGVkdWxlciB9IGZyb20gJ3J4anMnO1xuICpcbiAqIHF1ZXVlU2NoZWR1bGVyLnNjaGVkdWxlKCgpID0+IHtcbiAqICAgcXVldWVTY2hlZHVsZXIuc2NoZWR1bGUoKCkgPT4gY29uc29sZS5sb2coJ3NlY29uZCcpKTsgLy8gd2lsbCBub3QgaGFwcGVuIG5vdywgYnV0IHdpbGwgYmUgcHV0IG9uIGEgcXVldWVcbiAqXG4gKiAgIGNvbnNvbGUubG9nKCdmaXJzdCcpO1xuICogfSk7XG4gKlxuICogLy8gTG9nczpcbiAqIC8vIFwiZmlyc3RcIlxuICogLy8gXCJzZWNvbmRcIlxuICogYGBgXG4gKlxuICogUmVzY2hlZHVsZSBpdHNlbGYgcmVjdXJzaXZlbHlcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBxdWV1ZVNjaGVkdWxlciB9IGZyb20gJ3J4anMnO1xuICpcbiAqIHF1ZXVlU2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKHN0YXRlKSB7XG4gKiAgIGlmIChzdGF0ZSAhPT0gMCkge1xuICogICAgIGNvbnNvbGUubG9nKCdiZWZvcmUnLCBzdGF0ZSk7XG4gKiAgICAgdGhpcy5zY2hlZHVsZShzdGF0ZSAtIDEpOyAvLyBgdGhpc2AgcmVmZXJlbmNlcyBjdXJyZW50bHkgZXhlY3V0aW5nIEFjdGlvbixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdlIHJlc2NoZWR1bGUgd2l0aCBuZXcgc3RhdGVcbiAqICAgICBjb25zb2xlLmxvZygnYWZ0ZXInLCBzdGF0ZSk7XG4gKiAgIH1cbiAqIH0sIDAsIDMpO1xuICpcbiAqIC8vIEluIHNjaGVkdWxlciB0aGF0IHJ1bnMgcmVjdXJzaXZlbHksIHlvdSB3b3VsZCBleHBlY3Q6XG4gKiAvLyBcImJlZm9yZVwiLCAzXG4gKiAvLyBcImJlZm9yZVwiLCAyXG4gKiAvLyBcImJlZm9yZVwiLCAxXG4gKiAvLyBcImFmdGVyXCIsIDFcbiAqIC8vIFwiYWZ0ZXJcIiwgMlxuICogLy8gXCJhZnRlclwiLCAzXG4gKlxuICogLy8gQnV0IHdpdGggcXVldWUgaXQgbG9nczpcbiAqIC8vIFwiYmVmb3JlXCIsIDNcbiAqIC8vIFwiYWZ0ZXJcIiwgM1xuICogLy8gXCJiZWZvcmVcIiwgMlxuICogLy8gXCJhZnRlclwiLCAyXG4gKiAvLyBcImJlZm9yZVwiLCAxXG4gKiAvLyBcImFmdGVyXCIsIDFcbiAqIGBgYFxuICovXG5cbmV4cG9ydCBjb25zdCBxdWV1ZVNjaGVkdWxlciA9IG5ldyBRdWV1ZVNjaGVkdWxlcihRdWV1ZUFjdGlvbik7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgUmVuYW1lZCB0byB7QGxpbmsgcXVldWVTY2hlZHVsZXJ9LiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gKi9cbmV4cG9ydCBjb25zdCBxdWV1ZSA9IHF1ZXVlU2NoZWR1bGVyO1xuIiwgImltcG9ydCB7IEFzeW5jQWN0aW9uIH0gZnJvbSAnLi9Bc3luY0FjdGlvbic7XG5pbXBvcnQgeyBBbmltYXRpb25GcmFtZVNjaGVkdWxlciB9IGZyb20gJy4vQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXInO1xuaW1wb3J0IHsgU2NoZWR1bGVyQWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYW5pbWF0aW9uRnJhbWVQcm92aWRlciB9IGZyb20gJy4vYW5pbWF0aW9uRnJhbWVQcm92aWRlcic7XG5pbXBvcnQgeyBUaW1lckhhbmRsZSB9IGZyb20gJy4vdGltZXJIYW5kbGUnO1xuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uRnJhbWVBY3Rpb248VD4gZXh0ZW5kcyBBc3luY0FjdGlvbjxUPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzY2hlZHVsZXI6IEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBwcm90ZWN0ZWQgd29yazogKHRoaXM6IFNjaGVkdWxlckFjdGlvbjxUPiwgc3RhdGU/OiBUKSA9PiB2b2lkKSB7XG4gICAgc3VwZXIoc2NoZWR1bGVyLCB3b3JrKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXI6IEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBpZD86IFRpbWVySGFuZGxlLCBkZWxheTogbnVtYmVyID0gMCk6IFRpbWVySGFuZGxlIHtcbiAgICAvLyBJZiBkZWxheSBpcyBncmVhdGVyIHRoYW4gMCwgcmVxdWVzdCBhcyBhbiBhc3luYyBhY3Rpb24uXG4gICAgaWYgKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkge1xuICAgICAgcmV0dXJuIHN1cGVyLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICB9XG4gICAgLy8gUHVzaCB0aGUgYWN0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIHNjaGVkdWxlciBxdWV1ZS5cbiAgICBzY2hlZHVsZXIuYWN0aW9ucy5wdXNoKHRoaXMpO1xuICAgIC8vIElmIGFuIGFuaW1hdGlvbiBmcmFtZSBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgZG9uJ3QgcmVxdWVzdCBhbm90aGVyXG4gICAgLy8gb25lLiBJZiBhbiBhbmltYXRpb24gZnJhbWUgaGFzbid0IGJlZW4gcmVxdWVzdGVkIHlldCwgcmVxdWVzdCBvbmUuIFJldHVyblxuICAgIC8vIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmcmFtZSByZXF1ZXN0IGlkLlxuICAgIHJldHVybiBzY2hlZHVsZXIuX3NjaGVkdWxlZCB8fCAoc2NoZWR1bGVyLl9zY2hlZHVsZWQgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBzY2hlZHVsZXIuZmx1c2godW5kZWZpbmVkKSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlY3ljbGVBc3luY0lkKHNjaGVkdWxlcjogQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIGlkPzogVGltZXJIYW5kbGUsIGRlbGF5OiBudW1iZXIgPSAwKTogVGltZXJIYW5kbGUgfCB1bmRlZmluZWQge1xuICAgIC8vIElmIGRlbGF5IGV4aXN0cyBhbmQgaXMgZ3JlYXRlciB0aGFuIDAsIG9yIGlmIHRoZSBkZWxheSBpcyBudWxsICh0aGVcbiAgICAvLyBhY3Rpb24gd2Fzbid0IHJlc2NoZWR1bGVkKSBidXQgd2FzIG9yaWdpbmFsbHkgc2NoZWR1bGVkIGFzIGFuIGFzeW5jXG4gICAgLy8gYWN0aW9uLCB0aGVuIHJlY3ljbGUgYXMgYW4gYXN5bmMgYWN0aW9uLlxuICAgIGlmIChkZWxheSAhPSBudWxsID8gZGVsYXkgPiAwIDogdGhpcy5kZWxheSA+IDApIHtcbiAgICAgIHJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgfVxuICAgIC8vIElmIHRoZSBzY2hlZHVsZXIgcXVldWUgaGFzIG5vIHJlbWFpbmluZyBhY3Rpb25zIHdpdGggdGhlIHNhbWUgYXN5bmMgaWQsXG4gICAgLy8gY2FuY2VsIHRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lIGFuZCBzZXQgdGhlIHNjaGVkdWxlZCBmbGFnIHRvXG4gICAgLy8gdW5kZWZpbmVkIHNvIHRoZSBuZXh0IEFuaW1hdGlvbkZyYW1lQWN0aW9uIHdpbGwgcmVxdWVzdCBpdHMgb3duLlxuICAgIGNvbnN0IHsgYWN0aW9ucyB9ID0gc2NoZWR1bGVyO1xuICAgIGlmIChpZCAhPSBudWxsICYmIGlkID09PSBzY2hlZHVsZXIuX3NjaGVkdWxlZCAmJiBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0/LmlkICE9PSBpZCkge1xuICAgICAgYW5pbWF0aW9uRnJhbWVQcm92aWRlci5jYW5jZWxBbmltYXRpb25GcmFtZShpZCBhcyBudW1iZXIpO1xuICAgICAgc2NoZWR1bGVyLl9zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIFJldHVybiB1bmRlZmluZWQgc28gdGhlIGFjdGlvbiBrbm93cyB0byByZXF1ZXN0IGEgbmV3IGFzeW5jIGlkIGlmIGl0J3MgcmVzY2hlZHVsZWQuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIiwgImltcG9ydCB7IEFzeW5jQWN0aW9uIH0gZnJvbSAnLi9Bc3luY0FjdGlvbic7XG5pbXBvcnQgeyBBc3luY1NjaGVkdWxlciB9IGZyb20gJy4vQXN5bmNTY2hlZHVsZXInO1xuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgZXh0ZW5kcyBBc3luY1NjaGVkdWxlciB7XG4gIHB1YmxpYyBmbHVzaChhY3Rpb24/OiBBc3luY0FjdGlvbjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAvLyBUaGUgYXN5bmMgaWQgdGhhdCBlZmZlY3RzIGEgY2FsbCB0byBmbHVzaCBpcyBzdG9yZWQgaW4gX3NjaGVkdWxlZC5cbiAgICAvLyBCZWZvcmUgZXhlY3V0aW5nIGFuIGFjdGlvbiwgaXQncyBuZWNlc3NhcnkgdG8gY2hlY2sgdGhlIGFjdGlvbidzIGFzeW5jXG4gICAgLy8gaWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBzdXBwb3NlZCB0byBiZSBleGVjdXRlZCBpbiB0aGUgY3VycmVudFxuICAgIC8vIGZsdXNoLlxuICAgIC8vIFByZXZpb3VzIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCB1c2VkIGEgY291bnQgdG8gZGV0ZXJtaW5lIHRoaXMsXG4gICAgLy8gYnV0IHRoYXQgd2FzIHVuc291bmQsIGFzIGFjdGlvbnMgdGhhdCBhcmUgdW5zdWJzY3JpYmVkIC0gaS5lLiBjYW5jZWxsZWQgLVxuICAgIC8vIGFyZSByZW1vdmVkIGZyb20gdGhlIGFjdGlvbnMgYXJyYXkgYW5kIHRoYXQgY2FuIHNoaWZ0IGFjdGlvbnMgdGhhdCBhcmVcbiAgICAvLyBzY2hlZHVsZWQgdG8gYmUgZXhlY3V0ZWQgaW4gYSBzdWJzZXF1ZW50IGZsdXNoIGludG8gcG9zaXRpb25zIGF0IHdoaWNoXG4gICAgLy8gdGhleSBhcmUgZXhlY3V0ZWQgd2l0aGluIHRoZSBjdXJyZW50IGZsdXNoLlxuICAgIGxldCBmbHVzaElkO1xuICAgIGlmIChhY3Rpb24pIHtcbiAgICAgIGZsdXNoSWQgPSBhY3Rpb24uaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7XG4gICAgICB0aGlzLl9zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSB0aGlzO1xuICAgIGxldCBlcnJvcjogYW55O1xuICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCkhO1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpO1xuXG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSkge1xuICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IEFuaW1hdGlvbkZyYW1lQWN0aW9uIH0gZnJvbSAnLi9BbmltYXRpb25GcmFtZUFjdGlvbic7XG5pbXBvcnQgeyBBbmltYXRpb25GcmFtZVNjaGVkdWxlciB9IGZyb20gJy4vQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXInO1xuXG4vKipcbiAqXG4gKiBBbmltYXRpb24gRnJhbWUgU2NoZWR1bGVyXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlBlcmZvcm0gdGFzayB3aGVuIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYCB3b3VsZCBmaXJlPC9zcGFuPlxuICpcbiAqIFdoZW4gYGFuaW1hdGlvbkZyYW1lYCBzY2hlZHVsZXIgaXMgdXNlZCB3aXRoIGRlbGF5LCBpdCB3aWxsIGZhbGwgYmFjayB0byB7QGxpbmsgYXN5bmNTY2hlZHVsZXJ9IHNjaGVkdWxlclxuICogYmVoYXZpb3VyLlxuICpcbiAqIFdpdGhvdXQgZGVsYXksIGBhbmltYXRpb25GcmFtZWAgc2NoZWR1bGVyIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBzbW9vdGggYnJvd3NlciBhbmltYXRpb25zLlxuICogSXQgbWFrZXMgc3VyZSBzY2hlZHVsZWQgdGFzayB3aWxsIGhhcHBlbiBqdXN0IGJlZm9yZSBuZXh0IGJyb3dzZXIgY29udGVudCByZXBhaW50LFxuICogdGh1cyBwZXJmb3JtaW5nIGFuaW1hdGlvbnMgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuXG4gKlxuICogIyMgRXhhbXBsZVxuICogU2NoZWR1bGUgZGl2IGhlaWdodCBhbmltYXRpb25cbiAqIGBgYHRzXG4gKiAvLyBodG1sOiA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDogIzBmZjtcIj48L2Rpdj5cbiAqIGltcG9ydCB7IGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgZGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2Jyk7XG4gKlxuICogYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24oaGVpZ2h0KSB7XG4gKiAgIGRpdi5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBcInB4XCI7XG4gKlxuICogICB0aGlzLnNjaGVkdWxlKGhlaWdodCArIDEpOyAgLy8gYHRoaXNgIHJlZmVyZW5jZXMgY3VycmVudGx5IGV4ZWN1dGluZyBBY3Rpb24sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB3ZSByZXNjaGVkdWxlIHdpdGggbmV3IHN0YXRlXG4gKiB9LCAwLCAwKTtcbiAqXG4gKiAvLyBZb3Ugd2lsbCBzZWUgYSBkaXYgZWxlbWVudCBncm93aW5nIGluIGhlaWdodFxuICogYGBgXG4gKi9cblxuZXhwb3J0IGNvbnN0IGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyID0gbmV3IEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKEFuaW1hdGlvbkZyYW1lQWN0aW9uKTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBSZW5hbWVkIHRvIHtAbGluayBhbmltYXRpb25GcmFtZVNjaGVkdWxlcn0uIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFuaW1hdGlvbkZyYW1lID0gYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXI7XG4iLCAiaW1wb3J0IHsgQXN5bmNBY3Rpb24gfSBmcm9tICcuL0FzeW5jQWN0aW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBBc3luY1NjaGVkdWxlciB9IGZyb20gJy4vQXN5bmNTY2hlZHVsZXInO1xuaW1wb3J0IHsgU2NoZWR1bGVyQWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVGltZXJIYW5kbGUgfSBmcm9tICcuL3RpbWVySGFuZGxlJztcblxuZXhwb3J0IGNsYXNzIFZpcnR1YWxUaW1lU2NoZWR1bGVyIGV4dGVuZHMgQXN5bmNTY2hlZHVsZXIge1xuICAvKiogQGRlcHJlY2F0ZWQgTm90IHVzZWQgaW4gVmlydHVhbFRpbWVTY2hlZHVsZXIgZGlyZWN0bHkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gKi9cbiAgc3RhdGljIGZyYW1lVGltZUZhY3RvciA9IDEwO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBmcmFtZSBmb3IgdGhlIHN0YXRlIG9mIHRoZSB2aXJ0dWFsIHNjaGVkdWxlciBpbnN0YW5jZS4gVGhlIGRpZmZlcmVuY2VcbiAgICogYmV0d2VlbiB0d28gXCJmcmFtZXNcIiBpcyBzeW5vbnltb3VzIHdpdGggdGhlIHBhc3NhZ2Ugb2YgXCJ2aXJ0dWFsIHRpbWUgdW5pdHNcIi4gU28gaWZcbiAgICogeW91IHJlY29yZCBgc2NoZWR1bGVyLmZyYW1lYCB0byBiZSBgMWAsIHRoZW4gbGF0ZXIsIG9ic2VydmUgYHNjaGVkdWxlci5mcmFtZWAgdG8gYmUgYXQgYDExYCxcbiAgICogdGhhdCBtZWFucyBgMTBgIHZpcnR1YWwgdGltZSB1bml0cyBoYXZlIHBhc3NlZC5cbiAgICovXG4gIHB1YmxpYyBmcmFtZTogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogVXNlZCBpbnRlcm5hbGx5IHRvIGV4YW1pbmUgdGhlIGN1cnJlbnQgdmlydHVhbCBhY3Rpb24gaW5kZXggYmVpbmcgcHJvY2Vzc2VkLlxuICAgKiBAZGVwcmVjYXRlZCBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGRvIG5vdCB1c2UgZGlyZWN0bHkuIFdpbGwgYmUgbWFkZSBpbnRlcm5hbCBpbiB2OC5cbiAgICovXG4gIHB1YmxpYyBpbmRleDogbnVtYmVyID0gLTE7XG5cbiAgLyoqXG4gICAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBhIGBWaXJ0dWFsVGltZVNjaGVkdWxlcmAuIEV4cGVydHMgb25seS4gVGhlIHNpZ25hdHVyZSBvZlxuICAgKiB0aGlzIGNvbnN0cnVjdG9yIGlzIGxpa2VseSB0byBjaGFuZ2UgaW4gdGhlIGxvbmcgcnVuLlxuICAgKlxuICAgKiBAcGFyYW0gc2NoZWR1bGVyQWN0aW9uQ3RvciBUaGUgdHlwZSBvZiBBY3Rpb24gdG8gaW5pdGlhbGl6ZSB3aGVuIGluaXRpYWxpemluZyBhY3Rpb25zIGR1cmluZyBzY2hlZHVsaW5nLlxuICAgKiBAcGFyYW0gbWF4RnJhbWVzIFRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgdG8gcHJvY2VzcyBiZWZvcmUgc3RvcHBpbmcuIFVzZWQgdG8gcHJldmVudCBlbmRsZXNzIGZsdXNoIGN5Y2xlcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjaGVkdWxlckFjdGlvbkN0b3I6IHR5cGVvZiBBc3luY0FjdGlvbiA9IFZpcnR1YWxBY3Rpb24gYXMgYW55LCBwdWJsaWMgbWF4RnJhbWVzOiBudW1iZXIgPSBJbmZpbml0eSkge1xuICAgIHN1cGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsICgpID0+IHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb21wdCB0aGUgU2NoZWR1bGVyIHRvIGV4ZWN1dGUgYWxsIG9mIGl0cyBxdWV1ZWQgYWN0aW9ucywgdGhlcmVmb3JlXG4gICAqIGNsZWFyaW5nIGl0cyBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBmbHVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGFjdGlvbnMsIG1heEZyYW1lcyB9ID0gdGhpcztcbiAgICBsZXQgZXJyb3I6IGFueTtcbiAgICBsZXQgYWN0aW9uOiBBc3luY0FjdGlvbjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uZGVsYXkgPD0gbWF4RnJhbWVzKSB7XG4gICAgICBhY3Rpb25zLnNoaWZ0KCk7XG4gICAgICB0aGlzLmZyYW1lID0gYWN0aW9uLmRlbGF5O1xuXG4gICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmlydHVhbEFjdGlvbjxUPiBleHRlbmRzIEFzeW5jQWN0aW9uPFQ+IHtcbiAgcHJvdGVjdGVkIGFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHNjaGVkdWxlcjogVmlydHVhbFRpbWVTY2hlZHVsZXIsXG4gICAgcHJvdGVjdGVkIHdvcms6ICh0aGlzOiBTY2hlZHVsZXJBY3Rpb248VD4sIHN0YXRlPzogVCkgPT4gdm9pZCxcbiAgICBwcm90ZWN0ZWQgaW5kZXg6IG51bWJlciA9IChzY2hlZHVsZXIuaW5kZXggKz0gMSlcbiAgKSB7XG4gICAgc3VwZXIoc2NoZWR1bGVyLCB3b3JrKTtcbiAgICB0aGlzLmluZGV4ID0gc2NoZWR1bGVyLmluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBwdWJsaWMgc2NoZWR1bGUoc3RhdGU/OiBULCBkZWxheTogbnVtYmVyID0gMCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShkZWxheSkpIHtcbiAgICAgIGlmICghdGhpcy5pZCkge1xuICAgICAgICByZXR1cm4gc3VwZXIuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAvLyBJZiBhbiBhY3Rpb24gaXMgcmVzY2hlZHVsZWQsIHdlIHNhdmUgYWxsb2NhdGlvbnMgYnkgbXV0YXRpbmcgaXRzIHN0YXRlLFxuICAgICAgLy8gcHVzaGluZyBpdCB0byB0aGUgZW5kIG9mIHRoZSBzY2hlZHVsZXIgcXVldWUsIGFuZCByZWN5Y2xpbmcgdGhlIGFjdGlvbi5cbiAgICAgIC8vIEJ1dCBzaW5jZSB0aGUgVmlydHVhbFRpbWVTY2hlZHVsZXIgaXMgdXNlZCBmb3IgdGVzdGluZywgVmlydHVhbEFjdGlvbnNcbiAgICAgIC8vIG11c3QgYmUgaW1tdXRhYmxlIHNvIHRoZXkgY2FuIGJlIGluc3BlY3RlZCBsYXRlci5cbiAgICAgIGNvbnN0IGFjdGlvbiA9IG5ldyBWaXJ0dWFsQWN0aW9uKHRoaXMuc2NoZWR1bGVyLCB0aGlzLndvcmspO1xuICAgICAgdGhpcy5hZGQoYWN0aW9uKTtcbiAgICAgIHJldHVybiBhY3Rpb24uc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgc29tZW9uZSBzY2hlZHVsZXMgc29tZXRoaW5nIHdpdGggSW5maW5pdHksIGl0J2xsIG5ldmVyIGhhcHBlbi4gU28gd2VcbiAgICAgIC8vIGRvbid0IGV2ZW4gc2NoZWR1bGUgaXQuXG4gICAgICByZXR1cm4gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXI6IFZpcnR1YWxUaW1lU2NoZWR1bGVyLCBpZD86IGFueSwgZGVsYXk6IG51bWJlciA9IDApOiBUaW1lckhhbmRsZSB7XG4gICAgdGhpcy5kZWxheSA9IHNjaGVkdWxlci5mcmFtZSArIGRlbGF5O1xuICAgIGNvbnN0IHsgYWN0aW9ucyB9ID0gc2NoZWR1bGVyO1xuICAgIGFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAoYWN0aW9ucyBhcyBBcnJheTxWaXJ0dWFsQWN0aW9uPFQ+Pikuc29ydChWaXJ0dWFsQWN0aW9uLnNvcnRBY3Rpb25zKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXI6IFZpcnR1YWxUaW1lU2NoZWR1bGVyLCBpZD86IGFueSwgZGVsYXk6IG51bWJlciA9IDApOiBUaW1lckhhbmRsZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfZXhlY3V0ZShzdGF0ZTogVCwgZGVsYXk6IG51bWJlcik6IGFueSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gc3VwZXIuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzb3J0QWN0aW9uczxUPihhOiBWaXJ0dWFsQWN0aW9uPFQ+LCBiOiBWaXJ0dWFsQWN0aW9uPFQ+KSB7XG4gICAgaWYgKGEuZGVsYXkgPT09IGIuZGVsYXkpIHtcbiAgICAgIGlmIChhLmluZGV4ID09PSBiLmluZGV4KSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSBlbHNlIGlmIChhLmluZGV4ID4gYi5pbmRleCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGEuZGVsYXkgPiBiLmRlbGF5KSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFNjaGVkdWxlckxpa2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogQSBzaW1wbGUgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIG5vIGl0ZW1zIHRvIHRoZSBPYnNlcnZlciBhbmQgaW1tZWRpYXRlbHlcbiAqIGVtaXRzIGEgY29tcGxldGUgbm90aWZpY2F0aW9uLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5KdXN0IGVtaXRzICdjb21wbGV0ZScsIGFuZCBub3RoaW5nIGVsc2UuPC9zcGFuPlxuICpcbiAqICFbXShlbXB0eS5wbmcpXG4gKlxuICogQSBzaW1wbGUgT2JzZXJ2YWJsZSB0aGF0IG9ubHkgZW1pdHMgdGhlIGNvbXBsZXRlIG5vdGlmaWNhdGlvbi4gSXQgY2FuIGJlIHVzZWRcbiAqIGZvciBjb21wb3Npbmcgd2l0aCBvdGhlciBPYnNlcnZhYmxlcywgc3VjaCBhcyBpbiBhIHtAbGluayBtZXJnZU1hcH0uXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBMb2cgY29tcGxldGUgbm90aWZpY2F0aW9uXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IEVNUFRZIH0gZnJvbSAncnhqcyc7XG4gKlxuICogRU1QVFkuc3Vic2NyaWJlKHtcbiAqICAgbmV4dDogKCkgPT4gY29uc29sZS5sb2coJ05leHQnKSxcbiAqICAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUubG9nKCdDb21wbGV0ZSEnKVxuICogfSk7XG4gKlxuICogLy8gT3V0cHV0c1xuICogLy8gQ29tcGxldGUhXG4gKiBgYGBcbiAqXG4gKiBFbWl0IHRoZSBudW1iZXIgNywgdGhlbiBjb21wbGV0ZVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBFTVBUWSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgcmVzdWx0ID0gRU1QVFkucGlwZShzdGFydFdpdGgoNykpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBPdXRwdXRzXG4gKiAvLyA3XG4gKiBgYGBcbiAqXG4gKiBNYXAgYW5kIGZsYXR0ZW4gb25seSBvZGQgbnVtYmVycyB0byB0aGUgc2VxdWVuY2UgYCdhJ2AsIGAnYidgLCBgJ2MnYFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbnRlcnZhbCwgbWVyZ2VNYXAsIG9mLCBFTVBUWSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGludGVydmFsJCA9IGludGVydmFsKDEwMDApO1xuICogY29uc3QgcmVzdWx0ID0gaW50ZXJ2YWwkLnBpcGUoXG4gKiAgIG1lcmdlTWFwKHggPT4geCAlIDIgPT09IDEgPyBvZignYScsICdiJywgJ2MnKSA6IEVNUFRZKSxcbiAqICk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZyB0byB0aGUgY29uc29sZTpcbiAqIC8vIHggaXMgZXF1YWwgdG8gdGhlIGNvdW50IG9uIHRoZSBpbnRlcnZhbCwgZS5nLiAoMCwgMSwgMiwgMywgLi4uKVxuICogLy8geCB3aWxsIG9jY3VyIGV2ZXJ5IDEwMDBtc1xuICogLy8gaWYgeCAlIDIgaXMgZXF1YWwgdG8gMSwgcHJpbnQgYSwgYiwgYyAoZWFjaCBvbiBpdHMgb3duKVxuICogLy8gaWYgeCAlIDIgaXMgbm90IGVxdWFsIHRvIDEsIG5vdGhpbmcgd2lsbCBiZSBvdXRwdXRcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIE9ic2VydmFibGV9XG4gKiBAc2VlIHtAbGluayBORVZFUn1cbiAqIEBzZWUge0BsaW5rIG9mfVxuICogQHNlZSB7QGxpbmsgdGhyb3dFcnJvcn1cbiAqL1xuZXhwb3J0IGNvbnN0IEVNUFRZID0gbmV3IE9ic2VydmFibGU8bmV2ZXI+KChzdWJzY3JpYmVyKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpO1xuXG4vKipcbiAqIEBwYXJhbSBzY2hlZHVsZXIgQSB7QGxpbmsgU2NoZWR1bGVyTGlrZX0gdG8gdXNlIGZvciBzY2hlZHVsaW5nXG4gKiB0aGUgZW1pc3Npb24gb2YgdGhlIGNvbXBsZXRlIG5vdGlmaWNhdGlvbi5cbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIHdpdGggdGhlIHtAbGluayBFTVBUWX0gY29uc3RhbnQgb3Ige0BsaW5rIHNjaGVkdWxlZH0gKGUuZy4gYHNjaGVkdWxlZChbXSwgc2NoZWR1bGVyKWApLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eShzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKSB7XG4gIHJldHVybiBzY2hlZHVsZXIgPyBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIDogRU1QVFk7XG59XG5cbmZ1bmN0aW9uIGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZSkge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGU8bmV2ZXI+KChzdWJzY3JpYmVyKSA9PiBzY2hlZHVsZXIuc2NoZWR1bGUoKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKSk7XG59XG4iLCAiaW1wb3J0IHsgU2NoZWR1bGVyTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTY2hlZHVsZXIodmFsdWU6IGFueSk6IHZhbHVlIGlzIFNjaGVkdWxlckxpa2Uge1xuICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5zY2hlZHVsZSk7XG59XG4iLCAiaW1wb3J0IHsgU2NoZWR1bGVyTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgaXNTY2hlZHVsZXIgfSBmcm9tICcuL2lzU2NoZWR1bGVyJztcblxuZnVuY3Rpb24gbGFzdDxUPihhcnI6IFRbXSk6IFQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gYXJyW2Fyci5sZW5ndGggLSAxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcFJlc3VsdFNlbGVjdG9yKGFyZ3M6IGFueVtdKTogKCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24obGFzdChhcmdzKSkgPyBhcmdzLnBvcCgpIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wU2NoZWR1bGVyKGFyZ3M6IGFueVtdKTogU2NoZWR1bGVyTGlrZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpc1NjaGVkdWxlcihsYXN0KGFyZ3MpKSA/IGFyZ3MucG9wKCkgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BOdW1iZXIoYXJnczogYW55W10sIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIHR5cGVvZiBsYXN0KGFyZ3MpID09PSAnbnVtYmVyJyA/IGFyZ3MucG9wKCkhIDogZGVmYXVsdFZhbHVlO1xufVxuIiwgImV4cG9ydCBjb25zdCBpc0FycmF5TGlrZSA9ICg8VD4oeDogYW55KTogeCBpcyBBcnJheUxpa2U8VD4gPT4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nKTsiLCAiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuL2lzRnVuY3Rpb25cIjtcblxuLyoqXG4gKiBUZXN0cyB0byBzZWUgaWYgdGhlIG9iamVjdCBpcyBcInRoZW5uYWJsZVwiLlxuICogQHBhcmFtIHZhbHVlIHRoZSBvYmplY3QgdG8gdGVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQcm9taXNlTGlrZTxhbnk+IHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWU/LnRoZW4pO1xufVxuIiwgImltcG9ydCB7IEludGVyb3BPYnNlcnZhYmxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb2JzZXJ2YWJsZSBhcyBTeW1ib2xfb2JzZXJ2YWJsZSB9IGZyb20gJy4uL3N5bWJvbC9vYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuXG4vKiogSWRlbnRpZmllcyBhbiBpbnB1dCBhcyBiZWluZyBPYnNlcnZhYmxlIChidXQgbm90IG5lY2Vzc2FyeSBhbiBSeCBPYnNlcnZhYmxlKSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQ6IGFueSk6IGlucHV0IGlzIEludGVyb3BPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtTeW1ib2xfb2JzZXJ2YWJsZV0pO1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlPFQ+KG9iajogYW55KTogb2JqIGlzIEFzeW5jSXRlcmFibGU8VD4ge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmo/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuIiwgIi8qKlxuICogQ3JlYXRlcyB0aGUgVHlwZUVycm9yIHRvIHRocm93IGlmIGFuIGludmFsaWQgb2JqZWN0IGlzIHBhc3NlZCB0byBgZnJvbWAgb3IgYHNjaGVkdWxlZGAuXG4gKiBAcGFyYW0gaW5wdXQgVGhlIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dDogYW55KSB7XG4gIC8vIFRPRE86IFdlIHNob3VsZCBjcmVhdGUgZXJyb3IgY29kZXMgdGhhdCBjYW4gYmUgbG9va2VkIHVwLCBzbyB0aGlzIGNhbiBiZSBsZXNzIHZlcmJvc2UuXG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFxuICAgIGBZb3UgcHJvdmlkZWQgJHtcbiAgICAgIGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogYCcke2lucHV0fSdgXG4gICAgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmBcbiAgKTtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKTogc3ltYm9sIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgIHJldHVybiAnQEBpdGVyYXRvcicgYXMgYW55O1xuICB9XG5cbiAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcbiIsICJpbXBvcnQgeyBpdGVyYXRvciBhcyBTeW1ib2xfaXRlcmF0b3IgfSBmcm9tICcuLi9zeW1ib2wvaXRlcmF0b3InO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5cbi8qKiBJZGVudGlmaWVzIGFuIGlucHV0IGFzIGJlaW5nIGFuIEl0ZXJhYmxlICovXG5leHBvcnQgZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dDogYW55KTogaW5wdXQgaXMgSXRlcmFibGU8YW55PiB7XG4gIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0Py5bU3ltYm9sX2l0ZXJhdG9yXSk7XG59XG4iLCAiaW1wb3J0IHsgUmVhZGFibGVTdHJlYW1MaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcjxUPihyZWFkYWJsZVN0cmVhbTogUmVhZGFibGVTdHJlYW1MaWtlPFQ+KTogQXN5bmNHZW5lcmF0b3I8VD4ge1xuICBjb25zdCByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgdHJ5IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHlpZWxkIHZhbHVlITtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlPFQ+KG9iajogYW55KTogb2JqIGlzIFJlYWRhYmxlU3RyZWFtTGlrZTxUPiB7XG4gIC8vIFdlIGRvbid0IHdhbnQgdG8gdXNlIGluc3RhbmNlb2YgY2hlY2tzIGJlY2F1c2UgdGhleSB3b3VsZCByZXR1cm5cbiAgLy8gZmFsc2UgZm9yIGluc3RhbmNlcyBmcm9tIGFub3RoZXIgUmVhbG0sIGxpa2UgYW4gPGlmcmFtZT4uXG4gIHJldHVybiBpc0Z1bmN0aW9uKG9iaj8uZ2V0UmVhZGVyKTtcbn1cbiIsICJpbXBvcnQgeyBpc0FycmF5TGlrZSB9IGZyb20gJy4uL3V0aWwvaXNBcnJheUxpa2UnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi4vdXRpbC9pc1Byb21pc2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0LCBPYnNlcnZlZFZhbHVlT2YsIFJlYWRhYmxlU3RyZWFtTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlzSW50ZXJvcE9ic2VydmFibGUgfSBmcm9tICcuLi91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNBc3luY0l0ZXJhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0FzeW5jSXRlcmFibGUnO1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IgfSBmcm9tICcuLi91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3InO1xuaW1wb3J0IHsgaXNJdGVyYWJsZSB9IGZyb20gJy4uL3V0aWwvaXNJdGVyYWJsZSc7XG5pbXBvcnQgeyBpc1JlYWRhYmxlU3RyZWFtTGlrZSwgcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciB9IGZyb20gJy4uL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UnO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyByZXBvcnRVbmhhbmRsZWRFcnJvciB9IGZyb20gJy4uL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3InO1xuaW1wb3J0IHsgb2JzZXJ2YWJsZSBhcyBTeW1ib2xfb2JzZXJ2YWJsZSB9IGZyb20gJy4uL3N5bWJvbC9vYnNlcnZhYmxlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlubmVyRnJvbTxPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PGFueT4+KGlucHV0OiBPKTogT2JzZXJ2YWJsZTxPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuZXhwb3J0IGZ1bmN0aW9uIGlubmVyRnJvbTxUPihpbnB1dDogT2JzZXJ2YWJsZUlucHV0PFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgfVxuICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgIH1cbiAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICB9XG4gICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICB9XG4gICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIFJ4SlMgT2JzZXJ2YWJsZSBmcm9tIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgYFN5bWJvbC5vYnNlcnZhYmxlYC5cbiAqIEBwYXJhbSBvYmogQW4gb2JqZWN0IHRoYXQgcHJvcGVybHkgaW1wbGVtZW50cyBgU3ltYm9sLm9ic2VydmFibGVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlPFQ+KG9iajogYW55KSB7XG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxUPikgPT4ge1xuICAgIGNvbnN0IG9icyA9IG9ialtTeW1ib2xfb2JzZXJ2YWJsZV0oKTtcbiAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfVxuICAgIC8vIFNob3VsZCBiZSBjYXVnaHQgYnkgb2JzZXJ2YWJsZSBzdWJzY3JpYmUgZnVuY3Rpb24gZXJyb3IgaGFuZGxpbmcuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgfSk7XG59XG5cbi8qKlxuICogU3luY2hyb25vdXNseSBlbWl0cyB0aGUgdmFsdWVzIG9mIGFuIGFycmF5IGxpa2UgYW5kIGNvbXBsZXRlcy5cbiAqIFRoaXMgaXMgZXhwb3J0ZWQgYmVjYXVzZSB0aGVyZSBhcmUgY3JlYXRpb24gZnVuY3Rpb25zIGFuZCBvcGVyYXRvcnMgdGhhdCBuZWVkIHRvXG4gKiBtYWtlIGRpcmVjdCB1c2Ugb2YgdGhlIHNhbWUgbG9naWMsIGFuZCB0aGVyZSdzIG5vIHJlYXNvbiB0byBtYWtlIHRoZW0gcnVuIHRocm91Z2hcbiAqIGBmcm9tYCBjb25kaXRpb25hbHMgYmVjYXVzZSB3ZSAqa25vdyogdGhleSdyZSBkZWFsaW5nIHdpdGggYW4gYXJyYXkuXG4gKiBAcGFyYW0gYXJyYXkgVGhlIGFycmF5IHRvIGVtaXQgdmFsdWVzIGZyb21cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21BcnJheUxpa2U8VD4oYXJyYXk6IEFycmF5TGlrZTxUPikge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8VD4pID0+IHtcbiAgICAvLyBMb29wIG92ZXIgdGhlIGFycmF5IGFuZCBlbWl0IGVhY2ggdmFsdWUuIE5vdGUgdHdvIHRoaW5ncyBoZXJlOlxuICAgIC8vIDEuIFdlJ3JlIG1ha2luZyBzdXJlIHRoYXQgdGhlIHN1YnNjcmliZXIgaXMgbm90IGNsb3NlZCBvbiBlYWNoIGxvb3AuXG4gICAgLy8gICAgVGhpcyBpcyBzbyB3ZSBkb24ndCBjb250aW51ZSBsb29waW5nIG92ZXIgYSB2ZXJ5IGxhcmdlIGFycmF5IGFmdGVyXG4gICAgLy8gICAgc29tZXRoaW5nIGxpa2UgYSBgdGFrZWAsIGB0YWtlV2hpbGVgLCBvciBvdGhlciBzeW5jaHJvbm91cyB1bnN1YnNjcmlwdGlvblxuICAgIC8vICAgIGhhcyBhbHJlYWR5IHVuc3Vic2NyaWJlZC5cbiAgICAvLyAyLiBJbiB0aGlzIGZvcm0sIHJlZW50cmFudCBjb2RlIGNhbiBhbHRlciB0aGF0IGFycmF5IHdlJ3JlIGxvb3Bpbmcgb3Zlci5cbiAgICAvLyAgICBUaGlzIGlzIGEga25vd24gaXNzdWUsIGJ1dCBjb25zaWRlcmVkIGFuIGVkZ2UgY2FzZS4gVGhlIGFsdGVybmF0aXZlIHdvdWxkXG4gICAgLy8gICAgYmUgdG8gY29weSB0aGUgYXJyYXkgYmVmb3JlIGV4ZWN1dGluZyB0aGUgbG9vcCwgYnV0IHRoaXMgaGFzXG4gICAgLy8gICAgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgIH1cbiAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVByb21pc2U8VD4ocHJvbWlzZTogUHJvbWlzZUxpa2U8VD4pIHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFQ+KSA9PiB7XG4gICAgcHJvbWlzZVxuICAgICAgLnRoZW4oXG4gICAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyOiBhbnkpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyKVxuICAgICAgKVxuICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21JdGVyYWJsZTxUPihpdGVyYWJsZTogSXRlcmFibGU8VD4pIHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFQ+KSA9PiB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYWJsZSkge1xuICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZTxUPihhc3luY0l0ZXJhYmxlOiBBc3luY0l0ZXJhYmxlPFQ+KSB7XG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxUPikgPT4ge1xuICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goKGVycikgPT4gc3Vic2NyaWJlci5lcnJvcihlcnIpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlPFQ+KHJlYWRhYmxlU3RyZWFtOiBSZWFkYWJsZVN0cmVhbUxpa2U8VD4pIHtcbiAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2VzczxUPihhc3luY0l0ZXJhYmxlOiBBc3luY0l0ZXJhYmxlPFQ+LCBzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFQ+KSB7XG4gIGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2YgYXN5bmNJdGVyYWJsZSkge1xuICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgLy8gQSBzaWRlLWVmZmVjdCBtYXkgaGF2ZSBjbG9zZWQgb3VyIHN1YnNjcmliZXIsXG4gICAgLy8gY2hlY2sgYmVmb3JlIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xufVxuIiwgImltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBTY2hlZHVsZXJBY3Rpb24sIFNjaGVkdWxlckxpa2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUoXG4gIHBhcmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uLFxuICBzY2hlZHVsZXI6IFNjaGVkdWxlckxpa2UsXG4gIHdvcms6ICgpID0+IHZvaWQsXG4gIGRlbGF5OiBudW1iZXIsXG4gIHJlcGVhdDogdHJ1ZVxuKTogdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUoXG4gIHBhcmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uLFxuICBzY2hlZHVsZXI6IFNjaGVkdWxlckxpa2UsXG4gIHdvcms6ICgpID0+IHZvaWQsXG4gIGRlbGF5PzogbnVtYmVyLFxuICByZXBlYXQ/OiBmYWxzZVxuKTogU3Vic2NyaXB0aW9uO1xuXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKFxuICBwYXJlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbixcbiAgc2NoZWR1bGVyOiBTY2hlZHVsZXJMaWtlLFxuICB3b3JrOiAoKSA9PiB2b2lkLFxuICBkZWxheSA9IDAsXG4gIHJlcGVhdCA9IGZhbHNlXG4pOiBTdWJzY3JpcHRpb24gfCB2b2lkIHtcbiAgY29uc3Qgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKHRoaXM6IFNjaGVkdWxlckFjdGlvbjxhbnk+KSB7XG4gICAgd29yaygpO1xuICAgIGlmIChyZXBlYXQpIHtcbiAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCBkZWxheSk7XG5cbiAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG5cbiAgaWYgKCFyZXBlYXQpIHtcbiAgICAvLyBCZWNhdXNlIHVzZXItbGFuZCBzY2hlZHVsZXIgaW1wbGVtZW50YXRpb25zIGFyZSB1bmxpa2VseSB0byBwcm9wZXJseSByZXVzZVxuICAgIC8vIEFjdGlvbnMgZm9yIHJlcGVhdCBzY2hlZHVsaW5nLCB3ZSBjYW4ndCB0cnVzdCB0aGF0IHRoZSByZXR1cm5lZCBzdWJzY3JpcHRpb25cbiAgICAvLyB3aWxsIGNvbnRyb2wgcmVwZWF0IHN1YnNjcmlwdGlvbiBzY2VuYXJpb3MuIFNvIHdlJ3JlIHRyeWluZyB0byBhdm9pZCB1c2luZyB0aGVtXG4gICAgLy8gaW5jb3JyZWN0bHkgd2l0aGluIHRoaXMgbGlicmFyeS5cbiAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gIH1cbn1cbiIsICIvKiogQHByZXR0aWVyICovXG5pbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIFNjaGVkdWxlckxpa2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuLyoqXG4gKiBSZS1lbWl0cyBhbGwgbm90aWZpY2F0aW9ucyBmcm9tIHNvdXJjZSBPYnNlcnZhYmxlIHdpdGggc3BlY2lmaWVkIHNjaGVkdWxlci5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RW5zdXJlIGEgc3BlY2lmaWMgc2NoZWR1bGVyIGlzIHVzZWQsIGZyb20gb3V0c2lkZSBvZiBhbiBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiBgb2JzZXJ2ZU9uYCBpcyBhbiBvcGVyYXRvciB0aGF0IGFjY2VwdHMgYSBzY2hlZHVsZXIgYXMgYSBmaXJzdCBwYXJhbWV0ZXIsIHdoaWNoIHdpbGwgYmUgdXNlZCB0byByZXNjaGVkdWxlXG4gKiBub3RpZmljYXRpb25zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBJdCBtaWdodCBiZSB1c2VmdWwsIGlmIHlvdSBkbyBub3QgaGF2ZSBjb250cm9sIG92ZXJcbiAqIGludGVybmFsIHNjaGVkdWxlciBvZiBhIGdpdmVuIE9ic2VydmFibGUsIGJ1dCB3YW50IHRvIGNvbnRyb2wgd2hlbiBpdHMgdmFsdWVzIGFyZSBlbWl0dGVkIG5ldmVydGhlbGVzcy5cbiAqXG4gKiBSZXR1cm5lZCBPYnNlcnZhYmxlIGVtaXRzIHRoZSBzYW1lIG5vdGlmaWNhdGlvbnMgKG5leHRlZCB2YWx1ZXMsIGNvbXBsZXRlIGFuZCBlcnJvciBldmVudHMpIGFzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSxcbiAqIGJ1dCByZXNjaGVkdWxlZCB3aXRoIHByb3ZpZGVkIHNjaGVkdWxlci4gTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBtZWFuIHRoYXQgc291cmNlIE9ic2VydmFibGVzIGludGVybmFsXG4gKiBzY2hlZHVsZXIgd2lsbCBiZSByZXBsYWNlZCBpbiBhbnkgd2F5LiBPcmlnaW5hbCBzY2hlZHVsZXIgc3RpbGwgd2lsbCBiZSB1c2VkLCBidXQgd2hlbiB0aGUgc291cmNlIE9ic2VydmFibGUgZW1pdHNcbiAqIG5vdGlmaWNhdGlvbiwgaXQgd2lsbCBiZSBpbW1lZGlhdGVseSBzY2hlZHVsZWQgYWdhaW4gLSB0aGlzIHRpbWUgd2l0aCBzY2hlZHVsZXIgcGFzc2VkIHRvIGBvYnNlcnZlT25gLlxuICogQW4gYW50aS1wYXR0ZXJuIHdvdWxkIGJlIGNhbGxpbmcgYG9ic2VydmVPbmAgb24gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGxvdHMgb2YgdmFsdWVzIHN5bmNocm9ub3VzbHksIHRvIHNwbGl0XG4gKiB0aGF0IGVtaXNzaW9ucyBpbnRvIGFzeW5jaHJvbm91cyBjaHVua3MuIEZvciB0aGlzIHRvIGhhcHBlbiwgc2NoZWR1bGVyIHdvdWxkIGhhdmUgdG8gYmUgcGFzc2VkIGludG8gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSBkaXJlY3RseSAodXN1YWxseSBpbnRvIHRoZSBvcGVyYXRvciB0aGF0IGNyZWF0ZXMgaXQpLiBgb2JzZXJ2ZU9uYCBzaW1wbHkgZGVsYXlzIG5vdGlmaWNhdGlvbnMgYVxuICogbGl0dGxlIGJpdCBtb3JlLCB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBlbWl0dGVkIGF0IGV4cGVjdGVkIG1vbWVudHMuXG4gKlxuICogQXMgYSBtYXR0ZXIgb2YgZmFjdCwgYG9ic2VydmVPbmAgYWNjZXB0cyBzZWNvbmQgcGFyYW1ldGVyLCB3aGljaCBzcGVjaWZpZXMgaW4gbWlsbGlzZWNvbmRzIHdpdGggd2hhdCBkZWxheSBub3RpZmljYXRpb25zXG4gKiB3aWxsIGJlIGVtaXR0ZWQuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB7QGxpbmsgZGVsYXl9IG9wZXJhdG9yIGFuZCBgb2JzZXJ2ZU9uYCBpcyB0aGF0IGBvYnNlcnZlT25gXG4gKiB3aWxsIGRlbGF5IGFsbCBub3RpZmljYXRpb25zIC0gaW5jbHVkaW5nIGVycm9yIG5vdGlmaWNhdGlvbnMgLSB3aGlsZSBgZGVsYXlgIHdpbGwgcGFzcyB0aHJvdWdoIGVycm9yXG4gKiBmcm9tIHNvdXJjZSBPYnNlcnZhYmxlIGltbWVkaWF0ZWx5IHdoZW4gaXQgaXMgZW1pdHRlZC4gSW4gZ2VuZXJhbCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gdXNlIGBkZWxheWAgb3BlcmF0b3JcbiAqIGZvciBhbnkga2luZCBvZiBkZWxheWluZyBvZiB2YWx1ZXMgaW4gdGhlIHN0cmVhbSwgd2hpbGUgdXNpbmcgYG9ic2VydmVPbmAgdG8gc3BlY2lmeSB3aGljaCBzY2hlZHVsZXIgc2hvdWxkIGJlIHVzZWRcbiAqIGZvciBub3RpZmljYXRpb24gZW1pc3Npb25zIGluIGdlbmVyYWwuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIEVuc3VyZSB2YWx1ZXMgaW4gc3Vic2NyaWJlIGFyZSBjYWxsZWQganVzdCBiZWZvcmUgYnJvd3NlciByZXBhaW50XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCBvYnNlcnZlT24sIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgc29tZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICogc29tZURpdi5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOiAyMDBweDtiYWNrZ3JvdW5kOiAjMDljJztcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc29tZURpdik7XG4gKiBjb25zdCBpbnRlcnZhbHMgPSBpbnRlcnZhbCgxMCk7ICAgICAgLy8gSW50ZXJ2YWxzIGFyZSBzY2hlZHVsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGFzeW5jIHNjaGVkdWxlciBieSBkZWZhdWx0Li4uXG4gKiBpbnRlcnZhbHMucGlwZShcbiAqICAgb2JzZXJ2ZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSAvLyAuLi5idXQgd2Ugd2lsbCBvYnNlcnZlIG9uIGFuaW1hdGlvbkZyYW1lXG4gKiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2NoZWR1bGVyIHRvIGVuc3VyZSBzbW9vdGggYW5pbWF0aW9uLlxuICogLnN1YnNjcmliZSh2YWwgPT4ge1xuICogICBzb21lRGl2LnN0eWxlLmhlaWdodCA9IHZhbCArICdweCc7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGRlbGF5fVxuICpcbiAqIEBwYXJhbSBzY2hlZHVsZXIgU2NoZWR1bGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlc2NoZWR1bGUgbm90aWZpY2F0aW9ucyBmcm9tIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHBhcmFtIGRlbGF5IE51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBzdGF0ZXMgd2l0aCB3aGF0IGRlbGF5IGV2ZXJ5IG5vdGlmaWNhdGlvbiBzaG91bGQgYmUgcmVzY2hlZHVsZWQuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc2FtZVxuICogbm90aWZpY2F0aW9ucyBhcyB0aGUgc291cmNlIE9ic2VydmFibGUsIGJ1dCB3aXRoIHByb3ZpZGVkIHNjaGVkdWxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVPbjxUPihzY2hlZHVsZXI6IFNjaGVkdWxlckxpa2UsIGRlbGF5ID0gMCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAodmFsdWUpID0+IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsICgpID0+IHN1YnNjcmliZXIubmV4dCh2YWx1ZSksIGRlbGF5KSxcbiAgICAgICAgKCkgPT4gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpLCBkZWxheSksXG4gICAgICAgIChlcnIpID0+IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsICgpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyKSwgZGVsYXkpXG4gICAgICApXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBTY2hlZHVsZXJMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgc3Vic2NyaWJlcyBPYnNlcnZlcnMgdG8gdGhpcyBPYnNlcnZhYmxlIG9uIHRoZSBzcGVjaWZpZWQge0BsaW5rIFNjaGVkdWxlckxpa2V9LlxuICpcbiAqIFdpdGggYHN1YnNjcmliZU9uYCB5b3UgY2FuIGRlY2lkZSB3aGF0IHR5cGUgb2Ygc2NoZWR1bGVyIGEgc3BlY2lmaWMgT2JzZXJ2YWJsZSB3aWxsIGJlIHVzaW5nIHdoZW4gaXQgaXMgc3Vic2NyaWJlZCB0by5cbiAqXG4gKiBTY2hlZHVsZXJzIGNvbnRyb2wgdGhlIHNwZWVkIGFuZCBvcmRlciBvZiBlbWlzc2lvbnMgdG8gb2JzZXJ2ZXJzIGZyb20gYW4gT2JzZXJ2YWJsZSBzdHJlYW0uXG4gKlxuICogIVtdKHN1YnNjcmliZU9uLnBuZylcbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogR2l2ZW4gdGhlIGZvbGxvd2luZyBjb2RlOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBvZiwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBhID0gb2YoMSwgMiwgMyk7XG4gKiBjb25zdCBiID0gb2YoNCwgNSwgNik7XG4gKlxuICogbWVyZ2UoYSwgYikuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcbiAqXG4gKiAvLyBPdXRwdXRzXG4gKiAvLyAxXG4gKiAvLyAyXG4gKiAvLyAzXG4gKiAvLyA0XG4gKiAvLyA1XG4gKiAvLyA2XG4gKiBgYGBcbiAqXG4gKiBCb3RoIE9ic2VydmFibGUgYGFgIGFuZCBgYmAgd2lsbCBlbWl0IHRoZWlyIHZhbHVlcyBkaXJlY3RseSBhbmQgc3luY2hyb25vdXNseSBvbmNlIHRoZXkgYXJlIHN1YnNjcmliZWQgdG8uXG4gKlxuICogSWYgd2UgaW5zdGVhZCB1c2UgdGhlIGBzdWJzY3JpYmVPbmAgb3BlcmF0b3IgZGVjbGFyaW5nIHRoYXQgd2Ugd2FudCB0byB1c2UgdGhlIHtAbGluayBhc3luY1NjaGVkdWxlcn0gZm9yIHZhbHVlcyBlbWl0dGVkIGJ5IE9ic2VydmFibGUgYGFgOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBvZiwgc3Vic2NyaWJlT24sIGFzeW5jU2NoZWR1bGVyLCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGEgPSBvZigxLCAyLCAzKS5waXBlKHN1YnNjcmliZU9uKGFzeW5jU2NoZWR1bGVyKSk7XG4gKiBjb25zdCBiID0gb2YoNCwgNSwgNik7XG4gKlxuICogbWVyZ2UoYSwgYikuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcbiAqXG4gKiAvLyBPdXRwdXRzXG4gKiAvLyA0XG4gKiAvLyA1XG4gKiAvLyA2XG4gKiAvLyAxXG4gKiAvLyAyXG4gKiAvLyAzXG4gKiBgYGBcbiAqXG4gKiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgT2JzZXJ2YWJsZSBgYmAgZW1pdHMgaXRzIHZhbHVlcyBkaXJlY3RseSBhbmQgc3luY2hyb25vdXNseSBsaWtlIGJlZm9yZVxuICogYnV0IHRoZSBlbWlzc2lvbnMgZnJvbSBgYWAgYXJlIHNjaGVkdWxlZCBvbiB0aGUgZXZlbnQgbG9vcCBiZWNhdXNlIHdlIGFyZSBub3cgdXNpbmcgdGhlIHtAbGluayBhc3luY1NjaGVkdWxlcn0gZm9yIHRoYXQgc3BlY2lmaWMgT2JzZXJ2YWJsZS5cbiAqXG4gKiBAcGFyYW0gc2NoZWR1bGVyIFRoZSB7QGxpbmsgU2NoZWR1bGVyTGlrZX0gdG8gcGVyZm9ybSBzdWJzY3JpcHRpb24gYWN0aW9ucyBvbi5cbiAqIEBwYXJhbSBkZWxheSBBIGRlbGF5IHRvIHBhc3MgdG8gdGhlIHNjaGVkdWxlciB0byBkZWxheSBzdWJzY3JpcHRpb25zXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgbW9kaWZpZWQgc28gdGhhdCBpdHNcbiAqIHN1YnNjcmlwdGlvbnMgaGFwcGVuIG9uIHRoZSBzcGVjaWZpZWQge0BsaW5rIFNjaGVkdWxlckxpa2V9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlT248VD4oc2NoZWR1bGVyOiBTY2hlZHVsZXJMaWtlLCBkZWxheTogbnVtYmVyID0gMCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBzdWJzY3JpYmVyLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoKCkgPT4gc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKSwgZGVsYXkpKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgb2JzZXJ2ZU9uIH0gZnJvbSAnLi4vb3BlcmF0b3JzL29ic2VydmVPbic7XG5pbXBvcnQgeyBzdWJzY3JpYmVPbiB9IGZyb20gJy4uL29wZXJhdG9ycy9zdWJzY3JpYmVPbic7XG5pbXBvcnQgeyBJbnRlcm9wT2JzZXJ2YWJsZSwgU2NoZWR1bGVyTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlT2JzZXJ2YWJsZTxUPihpbnB1dDogSW50ZXJvcE9ic2VydmFibGU8VD4sIHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZSkge1xuICByZXR1cm4gaW5uZXJGcm9tKGlucHV0KS5waXBlKHN1YnNjcmliZU9uKHNjaGVkdWxlciksIG9ic2VydmVPbihzY2hlZHVsZXIpKTtcbn1cbiIsICJpbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBvYnNlcnZlT24gfSBmcm9tICcuLi9vcGVyYXRvcnMvb2JzZXJ2ZU9uJztcbmltcG9ydCB7IHN1YnNjcmliZU9uIH0gZnJvbSAnLi4vb3BlcmF0b3JzL3N1YnNjcmliZU9uJztcbmltcG9ydCB7IFNjaGVkdWxlckxpa2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZVByb21pc2U8VD4oaW5wdXQ6IFByb21pc2VMaWtlPFQ+LCBzY2hlZHVsZXI6IFNjaGVkdWxlckxpa2UpIHtcbiAgcmV0dXJuIGlubmVyRnJvbShpbnB1dCkucGlwZShzdWJzY3JpYmVPbihzY2hlZHVsZXIpLCBvYnNlcnZlT24oc2NoZWR1bGVyKSk7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU2NoZWR1bGVyTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlQXJyYXk8VD4oaW5wdXQ6IEFycmF5TGlrZTxUPiwgc2NoZWR1bGVyOiBTY2hlZHVsZXJMaWtlKSB7XG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUPigoc3Vic2NyaWJlcikgPT4ge1xuICAgIC8vIFRoZSBjdXJyZW50IGFycmF5IGluZGV4LlxuICAgIGxldCBpID0gMDtcbiAgICAvLyBTdGFydCBpdGVyYXRpbmcgb3ZlciB0aGUgYXJyYXkgbGlrZSBvbiBhIHNjaGVkdWxlLlxuICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGkgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIHRoZSBhcnJheSBsaWtlIGluIHRoZVxuICAgICAgICAvLyBwcmV2aW91cyBqb2IsIHdlIGNhbiBjb21wbGV0ZS5cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGxldCdzIG5leHQgdGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IGluZGV4LFxuICAgICAgICAvLyB0aGVuIGluY3JlbWVudCBvdXIgaW5kZXguXG4gICAgICAgIHN1YnNjcmliZXIubmV4dChpbnB1dFtpKytdKTtcbiAgICAgICAgLy8gSWYgdGhlIGxhc3QgZW1pc3Npb24gZGlkbid0IGNhdXNlIHVzIHRvIGNsb3NlIHRoZSBzdWJzY3JpYmVyXG4gICAgICAgIC8vICh2aWEgdGFrZSBvciBzb21lIHNpZGUgZWZmZWN0KSwgcmVzY2hlZHVsZSB0aGUgam9iIGFuZCB3ZSdsbFxuICAgICAgICAvLyBtYWtlIGFub3RoZXIgcGFzcy5cbiAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBTY2hlZHVsZXJMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXRlcmF0b3IgYXMgU3ltYm9sX2l0ZXJhdG9yIH0gZnJvbSAnLi4vc3ltYm9sL2l0ZXJhdG9yJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgZXhlY3V0ZVNjaGVkdWxlIH0gZnJvbSAnLi4vdXRpbC9leGVjdXRlU2NoZWR1bGUnO1xuXG4vKipcbiAqIFVzZWQgaW4ge0BsaW5rIHNjaGVkdWxlZH0gdG8gY3JlYXRlIGFuIG9ic2VydmFibGUgZnJvbSBhbiBJdGVyYWJsZS5cbiAqIEBwYXJhbSBpbnB1dCBUaGUgaXRlcmFibGUgdG8gY3JlYXRlIGFuIG9ic2VydmFibGUgZnJvbVxuICogQHBhcmFtIHNjaGVkdWxlciBUaGUgc2NoZWR1bGVyIHRvIHVzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVJdGVyYWJsZTxUPihpbnB1dDogSXRlcmFibGU8VD4sIHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZSkge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHN1YnNjcmliZXIpID0+IHtcbiAgICBsZXQgaXRlcmF0b3I6IEl0ZXJhdG9yPFQsIFQ+O1xuXG4gICAgLy8gU2NoZWR1bGUgdGhlIGluaXRpYWwgY3JlYXRpb24gb2YgdGhlIGl0ZXJhdG9yIGZyb21cbiAgICAvLyB0aGUgaXRlcmFibGUuIFRoaXMgaXMgc28gdGhlIGNvZGUgaW4gdGhlIGl0ZXJhYmxlIGlzXG4gICAgLy8gbm90IGNhbGxlZCB1bnRpbCB0aGUgc2NoZWR1bGVkIGpvYiBmaXJlcy5cbiAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCAoKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGl0ZXJhdG9yLlxuICAgICAgaXRlcmF0b3IgPSAoaW5wdXQgYXMgYW55KVtTeW1ib2xfaXRlcmF0b3JdKCk7XG5cbiAgICAgIGV4ZWN1dGVTY2hlZHVsZShcbiAgICAgICAgc3Vic2NyaWJlcixcbiAgICAgICAgc2NoZWR1bGVyLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlOiBUO1xuICAgICAgICAgIGxldCBkb25lOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBQdWxsIHRoZSB2YWx1ZSBvdXQgb2YgdGhlIGl0ZXJhdG9yXG4gICAgICAgICAgICAoeyB2YWx1ZSwgZG9uZSB9ID0gaXRlcmF0b3IubmV4dCgpKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIFdlIGdvdCBhbiBlcnJvciB3aGlsZSBwdWxsaW5nIGZyb20gdGhlIGl0ZXJhdG9yXG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGlzIFwiZG9uZVwiIHdlIGp1c3QgY29tcGxldGUuIFRoaXMgbWltaWNzIHRoZVxuICAgICAgICAgICAgLy8gYmVoYXZpb3Igb2YgSmF2YVNjcmlwdCdzIGBmb3IuLm9mYCBjb25zdW1wdGlvbiBvZlxuICAgICAgICAgICAgLy8gaXRlcmFibGVzLCB3aGljaCB3aWxsIG5vdCBlbWl0IHRoZSB2YWx1ZSBmcm9tIGFuIGl0ZXJhdG9yXG4gICAgICAgICAgICAvLyByZXN1bHQgb2YgYHsgZG9uZTogdHJ1ZTogdmFsdWU6ICdoZXJlJyB9YC5cbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIGl0ZXJhYmxlIGlzIG5vdCBkb25lLCBlbWl0IHRoZSB2YWx1ZS5cbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAwLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLy8gRHVyaW5nIGZpbmFsaXphdGlvbiwgaWYgd2Ugc2VlIHRoaXMgaXRlcmF0b3IgaGFzIGEgYHJldHVybmAgbWV0aG9kLFxuICAgIC8vIHRoZW4gd2Uga25vdyBpdCBpcyBhIEdlbmVyYXRvciwgYW5kIG5vdCBqdXN0IGFuIEl0ZXJhdG9yLiBTbyB3ZSBjYWxsXG4gICAgLy8gdGhlIGByZXR1cm4oKWAgZnVuY3Rpb24uIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCBhbnkgYGZpbmFsbHkgeyB9YCBibG9ja3NcbiAgICAvLyBpbnNpZGUgb2YgdGhlIGdlbmVyYXRvciB3ZSBjYW4gaGl0IHdpbGwgYmUgaGl0IHByb3Blcmx5LlxuICAgIHJldHVybiAoKSA9PiBpc0Z1bmN0aW9uKGl0ZXJhdG9yPy5yZXR1cm4pICYmIGl0ZXJhdG9yLnJldHVybigpO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBTY2hlZHVsZXJMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgZXhlY3V0ZVNjaGVkdWxlIH0gZnJvbSAnLi4vdXRpbC9leGVjdXRlU2NoZWR1bGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVBc3luY0l0ZXJhYmxlPFQ+KGlucHV0OiBBc3luY0l0ZXJhYmxlPFQ+LCBzY2hlZHVsZXI6IFNjaGVkdWxlckxpa2UpIHtcbiAgaWYgKCFpbnB1dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSXRlcmFibGUgY2Fubm90IGJlIG51bGwnKTtcbiAgfVxuICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHN1YnNjcmliZXIpID0+IHtcbiAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCAoKSA9PiB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IGlucHV0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuICAgICAgZXhlY3V0ZVNjaGVkdWxlKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICBzY2hlZHVsZXIsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpdGVyYXRvci5uZXh0KCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJlbW92ZSB0aGUgc3Vic2NyaXB0aW9ucyBmcm9tXG4gICAgICAgICAgICAgIC8vIHRoZSBwYXJlbnQgc3Vic2NyaXB0aW9uLlxuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgMCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgU2NoZWR1bGVyTGlrZSwgUmVhZGFibGVTdHJlYW1MaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgc2NoZWR1bGVBc3luY0l0ZXJhYmxlIH0gZnJvbSAnLi9zY2hlZHVsZUFzeW5jSXRlcmFibGUnO1xuaW1wb3J0IHsgcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciB9IGZyb20gJy4uL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2U8VD4oaW5wdXQ6IFJlYWRhYmxlU3RyZWFtTGlrZTxUPiwgc2NoZWR1bGVyOiBTY2hlZHVsZXJMaWtlKTogT2JzZXJ2YWJsZTxUPiB7XG4gIHJldHVybiBzY2hlZHVsZUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihpbnB1dCksIHNjaGVkdWxlcik7XG59XG4iLCAiaW1wb3J0IHsgc2NoZWR1bGVPYnNlcnZhYmxlIH0gZnJvbSAnLi9zY2hlZHVsZU9ic2VydmFibGUnO1xuaW1wb3J0IHsgc2NoZWR1bGVQcm9taXNlIH0gZnJvbSAnLi9zY2hlZHVsZVByb21pc2UnO1xuaW1wb3J0IHsgc2NoZWR1bGVBcnJheSB9IGZyb20gJy4vc2NoZWR1bGVBcnJheSc7XG5pbXBvcnQgeyBzY2hlZHVsZUl0ZXJhYmxlIH0gZnJvbSAnLi9zY2hlZHVsZUl0ZXJhYmxlJztcbmltcG9ydCB7IHNjaGVkdWxlQXN5bmNJdGVyYWJsZSB9IGZyb20gJy4vc2NoZWR1bGVBc3luY0l0ZXJhYmxlJztcbmltcG9ydCB7IGlzSW50ZXJvcE9ic2VydmFibGUgfSBmcm9tICcuLi91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi4vdXRpbC9pc1Byb21pc2UnO1xuaW1wb3J0IHsgaXNBcnJheUxpa2UgfSBmcm9tICcuLi91dGlsL2lzQXJyYXlMaWtlJztcbmltcG9ydCB7IGlzSXRlcmFibGUgfSBmcm9tICcuLi91dGlsL2lzSXRlcmFibGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0LCBTY2hlZHVsZXJMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNBc3luY0l0ZXJhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0FzeW5jSXRlcmFibGUnO1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IgfSBmcm9tICcuLi91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3InO1xuaW1wb3J0IHsgaXNSZWFkYWJsZVN0cmVhbUxpa2UgfSBmcm9tICcuLi91dGlsL2lzUmVhZGFibGVTdHJlYW1MaWtlJztcbmltcG9ydCB7IHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlIH0gZnJvbSAnLi9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSc7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIGNvbW1vbiB7QGxpbmsgT2JzZXJ2YWJsZUlucHV0fSB0eXBlIHRvIGFuIG9ic2VydmFibGUgd2hlcmUgc3Vic2NyaXB0aW9uIGFuZCBlbWlzc2lvbnNcbiAqIGFyZSBzY2hlZHVsZWQgb24gdGhlIHByb3ZpZGVkIHNjaGVkdWxlci5cbiAqXG4gKiBAc2VlIHtAbGluayBmcm9tfVxuICogQHNlZSB7QGxpbmsgb2Z9XG4gKlxuICogQHBhcmFtIGlucHV0IFRoZSBvYnNlcnZhYmxlLCBhcnJheSwgcHJvbWlzZSwgaXRlcmFibGUsIGV0YyB5b3Ugd291bGQgbGlrZSB0byBzY2hlZHVsZVxuICogQHBhcmFtIHNjaGVkdWxlciBUaGUgc2NoZWR1bGVyIHRvIHVzZSB0byBzY2hlZHVsZSB0aGUgc3Vic2NyaXB0aW9uIGFuZCBlbWlzc2lvbnMgZnJvbVxuICogdGhlIHJldHVybmVkIG9ic2VydmFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZWQ8VD4oaW5wdXQ6IE9ic2VydmFibGVJbnB1dDxUPiwgc2NoZWR1bGVyOiBTY2hlZHVsZXJMaWtlKTogT2JzZXJ2YWJsZTxUPiB7XG4gIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gc2NoZWR1bGVPYnNlcnZhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gc2NoZWR1bGVBcnJheShpbnB1dCwgc2NoZWR1bGVyKTtcbiAgICB9XG4gICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgfVxuICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gc2NoZWR1bGVBc3luY0l0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgIH1cbiAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBzY2hlZHVsZUl0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgIH1cbiAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgfVxuICB9XG4gIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXQsIFNjaGVkdWxlckxpa2UsIE9ic2VydmVkVmFsdWVPZiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHNjaGVkdWxlZCB9IGZyb20gJy4uL3NjaGVkdWxlZC9zY2hlZHVsZWQnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi9pbm5lckZyb20nO1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbTxPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PGFueT4+KGlucHV0OiBPKTogT2JzZXJ2YWJsZTxPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuLyoqIEBkZXByZWNhdGVkIFRoZSBgc2NoZWR1bGVyYCBwYXJhbWV0ZXIgd2lsbCBiZSByZW1vdmVkIGluIHY4LiBVc2UgYHNjaGVkdWxlZGAuIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL3NjaGVkdWxlci1hcmd1bWVudCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb208TyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihpbnB1dDogTywgc2NoZWR1bGVyOiBTY2hlZHVsZXJMaWtlIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gT2JzZXJ2YWJsZSBmcm9tIGFuIEFycmF5LCBhbiBhcnJheS1saWtlIG9iamVjdCwgYSBQcm9taXNlLCBhbiBpdGVyYWJsZSBvYmplY3QsIG9yIGFuIE9ic2VydmFibGUtbGlrZSBvYmplY3QuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbnZlcnRzIGFsbW9zdCBhbnl0aGluZyB0byBhbiBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiAhW10oZnJvbS5wbmcpXG4gKlxuICogYGZyb21gIGNvbnZlcnRzIHZhcmlvdXMgb3RoZXIgb2JqZWN0cyBhbmQgZGF0YSB0eXBlcyBpbnRvIE9ic2VydmFibGVzLiBJdCBhbHNvIGNvbnZlcnRzIGEgUHJvbWlzZSwgYW4gYXJyYXktbGlrZSwgb3IgYW5cbiAqIDxhIGhyZWY9XCJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9JdGVyYXRpb25fcHJvdG9jb2xzI2l0ZXJhYmxlXCIgdGFyZ2V0PVwiX2JsYW5rXCI+aXRlcmFibGU8L2E+XG4gKiBvYmplY3QgaW50byBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGl0ZW1zIGluIHRoYXQgcHJvbWlzZSwgYXJyYXksIG9yIGl0ZXJhYmxlLiBBIFN0cmluZywgaW4gdGhpcyBjb250ZXh0LCBpcyB0cmVhdGVkXG4gKiBhcyBhbiBhcnJheSBvZiBjaGFyYWN0ZXJzLiBPYnNlcnZhYmxlLWxpa2Ugb2JqZWN0cyAoY29udGFpbnMgYSBmdW5jdGlvbiBuYW1lZCB3aXRoIHRoZSBFUzIwMTUgU3ltYm9sIGZvciBPYnNlcnZhYmxlKSBjYW4gYWxzbyBiZVxuICogY29udmVydGVkIHRocm91Z2ggdGhpcyBvcGVyYXRvci5cbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIENvbnZlcnRzIGFuIGFycmF5IHRvIGFuIE9ic2VydmFibGVcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGFycmF5ID0gWzEwLCAyMCwgMzBdO1xuICogY29uc3QgcmVzdWx0ID0gZnJvbShhcnJheSk7XG4gKlxuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8gMTBcbiAqIC8vIDIwXG4gKiAvLyAzMFxuICogYGBgXG4gKlxuICogQ29udmVydCBhbiBpbmZpbml0ZSBpdGVyYWJsZSAoZnJvbSBhIGdlbmVyYXRvcikgdG8gYW4gT2JzZXJ2YWJsZVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tLCB0YWtlIH0gZnJvbSAncnhqcyc7XG4gKlxuICogZnVuY3Rpb24qIGdlbmVyYXRlRG91YmxlcyhzZWVkKSB7XG4gKiAgICBsZXQgaSA9IHNlZWQ7XG4gKiAgICB3aGlsZSAodHJ1ZSkge1xuICogICAgICB5aWVsZCBpO1xuICogICAgICBpID0gMiAqIGk7IC8vIGRvdWJsZSBpdFxuICogICAgfVxuICogfVxuICpcbiAqIGNvbnN0IGl0ZXJhdG9yID0gZ2VuZXJhdGVEb3VibGVzKDMpO1xuICogY29uc3QgcmVzdWx0ID0gZnJvbShpdGVyYXRvcikucGlwZSh0YWtlKDEwKSk7XG4gKlxuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8gM1xuICogLy8gNlxuICogLy8gMTJcbiAqIC8vIDI0XG4gKiAvLyA0OFxuICogLy8gOTZcbiAqIC8vIDE5MlxuICogLy8gMzg0XG4gKiAvLyA3NjhcbiAqIC8vIDE1MzZcbiAqIGBgYFxuICpcbiAqIFdpdGggYGFzeW5jU2NoZWR1bGVyYFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tLCBhc3luY1NjaGVkdWxlciB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnNvbGUubG9nKCdzdGFydCcpO1xuICpcbiAqIGNvbnN0IGFycmF5ID0gWzEwLCAyMCwgMzBdO1xuICogY29uc3QgcmVzdWx0ID0gZnJvbShhcnJheSwgYXN5bmNTY2hlZHVsZXIpO1xuICpcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogY29uc29sZS5sb2coJ2VuZCcpO1xuICpcbiAqIC8vIExvZ3M6XG4gKiAvLyAnc3RhcnQnXG4gKiAvLyAnZW5kJ1xuICogLy8gMTBcbiAqIC8vIDIwXG4gKiAvLyAzMFxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgZnJvbUV2ZW50fVxuICogQHNlZSB7QGxpbmsgZnJvbUV2ZW50UGF0dGVybn1cbiAqXG4gKiBAcGFyYW0gaW5wdXQgQSBzdWJzY3JpcHRpb24gb2JqZWN0LCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUtbGlrZSxcbiAqIGFuIEFycmF5LCBhbiBpdGVyYWJsZSwgb3IgYW4gYXJyYXktbGlrZSBvYmplY3QgdG8gYmUgY29udmVydGVkLlxuICogQHBhcmFtIHNjaGVkdWxlciBBbiBvcHRpb25hbCB7QGxpbmsgU2NoZWR1bGVyTGlrZX0gb24gd2hpY2ggdG8gc2NoZWR1bGUgdGhlIGVtaXNzaW9uIG9mIHZhbHVlcy5cbiAqIEByZXR1cm4gQW4gT2JzZXJ2YWJsZSBjb252ZXJ0ZWQgZnJvbSB7QGxpbmsgT2JzZXJ2YWJsZUlucHV0fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb208VD4oaW5wdXQ6IE9ic2VydmFibGVJbnB1dDxUPiwgc2NoZWR1bGVyPzogU2NoZWR1bGVyTGlrZSk6IE9ic2VydmFibGU8VD4ge1xuICByZXR1cm4gc2NoZWR1bGVyID8gc2NoZWR1bGVkKGlucHV0LCBzY2hlZHVsZXIpIDogaW5uZXJGcm9tKGlucHV0KTtcbn1cbiIsICJpbXBvcnQgeyBTY2hlZHVsZXJMaWtlLCBWYWx1ZUZyb21BcnJheSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IHBvcFNjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvYXJncyc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi9mcm9tJztcblxuLy8gRGV2cyBhcmUgbW9yZSBsaWtlbHkgdG8gcGFzcyBudWxsIG9yIHVuZGVmaW5lZCB0aGFuIHRoZXkgYXJlIGEgc2NoZWR1bGVyXG4vLyB3aXRob3V0IGFjY29tcGFueWluZyB2YWx1ZXMuIFRvIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgKG5hdWdodHkpIGRldnMgd2hvXG4vLyB1c2UgdGhlIGBzdHJpY3ROdWxsQ2hlY2tzOiBmYWxzZWAgVHlwZVNjcmlwdCBjb21waWxlciBvcHRpb24sIHRoZXNlXG4vLyBvdmVybG9hZHMgd2l0aCBleHBsaWNpdCBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzIGFyZSBpbmNsdWRlZC5cblxuZXhwb3J0IGZ1bmN0aW9uIG9mKHZhbHVlOiBudWxsKTogT2JzZXJ2YWJsZTxudWxsPjtcbmV4cG9ydCBmdW5jdGlvbiBvZih2YWx1ZTogdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTx1bmRlZmluZWQ+O1xuXG4vKiogQGRlcHJlY2F0ZWQgVGhlIGBzY2hlZHVsZXJgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBgc2NoZWR1bGVkYC4gRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvc2NoZWR1bGVyLWFyZ3VtZW50ICovXG5leHBvcnQgZnVuY3Rpb24gb2Yoc2NoZWR1bGVyOiBTY2hlZHVsZXJMaWtlKTogT2JzZXJ2YWJsZTxuZXZlcj47XG4vKiogQGRlcHJlY2F0ZWQgVGhlIGBzY2hlZHVsZXJgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBgc2NoZWR1bGVkYC4gRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvc2NoZWR1bGVyLWFyZ3VtZW50ICovXG5leHBvcnQgZnVuY3Rpb24gb2Y8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oLi4udmFsdWVzQW5kU2NoZWR1bGVyOiBbLi4uQSwgU2NoZWR1bGVyTGlrZV0pOiBPYnNlcnZhYmxlPFZhbHVlRnJvbUFycmF5PEE+PjtcblxuZXhwb3J0IGZ1bmN0aW9uIG9mKCk6IE9ic2VydmFibGU8bmV2ZXI+O1xuLyoqIEBkZXByZWNhdGVkIERvIG5vdCBzcGVjaWZ5IGV4cGxpY2l0IHR5cGUgcGFyYW1ldGVycy4gU2lnbmF0dXJlcyB3aXRoIHR5cGUgcGFyYW1ldGVycyB0aGF0IGNhbm5vdCBiZSBpbmZlcnJlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjguICovXG5leHBvcnQgZnVuY3Rpb24gb2Y8VD4oKTogT2JzZXJ2YWJsZTxUPjtcbmV4cG9ydCBmdW5jdGlvbiBvZjxUPih2YWx1ZTogVCk6IE9ic2VydmFibGU8VD47XG5leHBvcnQgZnVuY3Rpb24gb2Y8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oLi4udmFsdWVzOiBBKTogT2JzZXJ2YWJsZTxWYWx1ZUZyb21BcnJheTxBPj47XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGFyZ3VtZW50cyB0byBhbiBvYnNlcnZhYmxlIHNlcXVlbmNlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5FYWNoIGFyZ3VtZW50IGJlY29tZXMgYSBgbmV4dGAgbm90aWZpY2F0aW9uLjwvc3Bhbj5cbiAqXG4gKiAhW10ob2YucG5nKVxuICpcbiAqIFVubGlrZSB7QGxpbmsgZnJvbX0sIGl0IGRvZXMgbm90IGRvIGFueSBmbGF0dGVuaW5nIGFuZCBlbWl0cyBlYWNoIGFyZ3VtZW50IGluIHdob2xlXG4gKiBhcyBhIHNlcGFyYXRlIGBuZXh0YCBub3RpZmljYXRpb24uXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBFbWl0IHRoZSB2YWx1ZXMgYDEwLCAyMCwgMzBgXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG4gKlxuICogb2YoMTAsIDIwLCAzMClcbiAqICAgLnN1YnNjcmliZSh7XG4gKiAgICAgbmV4dDogdmFsdWUgPT4gY29uc29sZS5sb2coJ25leHQ6JywgdmFsdWUpLFxuICogICAgIGVycm9yOiBlcnIgPT4gY29uc29sZS5sb2coJ2Vycm9yOicsIGVyciksXG4gKiAgICAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUubG9nKCd0aGUgZW5kJyksXG4gKiAgIH0pO1xuICpcbiAqIC8vIE91dHB1dHNcbiAqIC8vIG5leHQ6IDEwXG4gKiAvLyBuZXh0OiAyMFxuICogLy8gbmV4dDogMzBcbiAqIC8vIHRoZSBlbmRcbiAqIGBgYFxuICpcbiAqIEVtaXQgdGhlIGFycmF5IGBbMSwgMiwgM11gXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG4gKlxuICogb2YoWzEsIDIsIDNdKVxuICogICAuc3Vic2NyaWJlKHtcbiAqICAgICBuZXh0OiB2YWx1ZSA9PiBjb25zb2xlLmxvZygnbmV4dDonLCB2YWx1ZSksXG4gKiAgICAgZXJyb3I6IGVyciA9PiBjb25zb2xlLmxvZygnZXJyb3I6JywgZXJyKSxcbiAqICAgICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ3RoZSBlbmQnKSxcbiAqICAgfSk7XG4gKlxuICogLy8gT3V0cHV0c1xuICogLy8gbmV4dDogWzEsIDIsIDNdXG4gKiAvLyB0aGUgZW5kXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBmcm9tfVxuICogQHNlZSB7QGxpbmsgcmFuZ2V9XG4gKlxuICogQHBhcmFtIGFyZ3MgQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhcmd1bWVudHMgeW91IHdhbnQgdG8gYmUgZW1pdHRlZC5cbiAqIEByZXR1cm4gQW4gT2JzZXJ2YWJsZSB0aGF0IHN5bmNocm9ub3VzbHkgZW1pdHMgdGhlIGFyZ3VtZW50cyBkZXNjcmliZWRcbiAqIGFib3ZlIGFuZCB0aGVuIGltbWVkaWF0ZWx5IGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mPFQ+KC4uLmFyZ3M6IEFycmF5PFQgfCBTY2hlZHVsZXJMaWtlPik6IE9ic2VydmFibGU8VD4ge1xuICBjb25zdCBzY2hlZHVsZXIgPSBwb3BTY2hlZHVsZXIoYXJncyk7XG4gIHJldHVybiBmcm9tKGFyZ3MgYXMgVFtdLCBzY2hlZHVsZXIpO1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IFNjaGVkdWxlckxpa2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIGNyZWF0ZSBhbiBlcnJvciBpbnN0YW5jZSBhbmQgcHVzaCBpdCB0byB0aGUgY29uc3VtZXIgYXMgYW4gZXJyb3JcbiAqIGltbWVkaWF0ZWx5IHVwb24gc3Vic2NyaXB0aW9uLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5KdXN0IGVycm9ycyBhbmQgZG9lcyBub3RoaW5nIGVsc2U8L3NwYW4+XG4gKlxuICogIVtdKHRocm93LnBuZylcbiAqXG4gKiBUaGlzIGNyZWF0aW9uIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYW4gb2JzZXJ2YWJsZSB0aGF0IHdpbGwgY3JlYXRlIGFuIGVycm9yIGFuZCBlcnJvciBldmVyeVxuICogdGltZSBpdCBpcyBzdWJzY3JpYmVkIHRvLiBHZW5lcmFsbHksIGluc2lkZSBvZiBtb3N0IG9wZXJhdG9ycyB3aGVuIHlvdSBtaWdodCB3YW50IHRvIHJldHVybiBhbiBlcnJvcmVkXG4gKiBvYnNlcnZhYmxlLCB0aGlzIGlzIHVubmVjZXNzYXJ5LiBJbiBtb3N0IGNhc2VzLCBzdWNoIGFzIGluIHRoZSBpbm5lciByZXR1cm4gb2Yge0BsaW5rIGNvbmNhdE1hcH0sXG4gKiB7QGxpbmsgbWVyZ2VNYXB9LCB7QGxpbmsgZGVmZXJ9LCBhbmQgbWFueSBvdGhlcnMsIHlvdSBjYW4gc2ltcGx5IHRocm93IHRoZSBlcnJvciwgYW5kIFJ4SlMgd2lsbCBwaWNrXG4gKiB0aGF0IHVwIGFuZCBub3RpZnkgdGhlIGNvbnN1bWVyIG9mIHRoZSBlcnJvci5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogQ3JlYXRlIGEgc2ltcGxlIG9ic2VydmFibGUgdGhhdCB3aWxsIGNyZWF0ZSBhIG5ldyBlcnJvciB3aXRoIGEgdGltZXN0YW1wIGFuZCBsb2cgaXRcbiAqIGFuZCB0aGUgbWVzc2FnZSBldmVyeSB0aW1lIHlvdSBzdWJzY3JpYmUgdG8gaXRcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGxldCBlcnJvckNvdW50ID0gMDtcbiAqXG4gKiBjb25zdCBlcnJvcldpdGhUaW1lc3RhbXAkID0gdGhyb3dFcnJvcigoKSA9PiB7XG4gKiAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoYFRoaXMgaXMgZXJyb3IgbnVtYmVyICR7ICsrZXJyb3JDb3VudCB9YCk7XG4gKiAgIGVycm9yLnRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gKiAgIHJldHVybiBlcnJvcjtcbiAqIH0pO1xuICpcbiAqIGVycm9yV2l0aFRpbWVzdGFtcCQuc3Vic2NyaWJlKHtcbiAqICAgZXJyb3I6IGVyciA9PiBjb25zb2xlLmxvZyhlcnIudGltZXN0YW1wLCBlcnIubWVzc2FnZSlcbiAqIH0pO1xuICpcbiAqIGVycm9yV2l0aFRpbWVzdGFtcCQuc3Vic2NyaWJlKHtcbiAqICAgZXJyb3I6IGVyciA9PiBjb25zb2xlLmxvZyhlcnIudGltZXN0YW1wLCBlcnIubWVzc2FnZSlcbiAqIH0pO1xuICpcbiAqIC8vIExvZ3MgdGhlIHRpbWVzdGFtcCBhbmQgYSBuZXcgZXJyb3IgbWVzc2FnZSBmb3IgZWFjaCBzdWJzY3JpcHRpb25cbiAqIGBgYFxuICpcbiAqICMjIyBVbm5lY2Vzc2FyeSB1c2FnZVxuICpcbiAqIFVzaW5nIGB0aHJvd0Vycm9yYCBpbnNpZGUgb2YgYW4gb3BlcmF0b3Igb3IgY3JlYXRpb24gZnVuY3Rpb25cbiAqIHdpdGggYSBjYWxsYmFjaywgaXMgdXN1YWxseSBub3QgbmVjZXNzYXJ5XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBjb25jYXRNYXAsIHRpbWVyLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgZGVsYXlzJCA9IG9mKDEwMDAsIDIwMDAsIEluZmluaXR5LCAzMDAwKTtcbiAqXG4gKiBkZWxheXMkLnBpcGUoXG4gKiAgIGNvbmNhdE1hcChtcyA9PiB7XG4gKiAgICAgaWYgKG1zIDwgMTAwMDApIHtcbiAqICAgICAgIHJldHVybiB0aW1lcihtcyk7XG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgb3ZlcmtpbGwuXG4gKiAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoYEludmFsaWQgdGltZSAkeyBtcyB9YCkpO1xuICogICAgIH1cbiAqICAgfSlcbiAqIClcbiAqIC5zdWJzY3JpYmUoe1xuICogICBuZXh0OiBjb25zb2xlLmxvZyxcbiAqICAgZXJyb3I6IGNvbnNvbGUuZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogWW91IGNhbiBqdXN0IHRocm93IHRoZSBlcnJvciBpbnN0ZWFkXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBjb25jYXRNYXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgZGVsYXlzJCA9IG9mKDEwMDAsIDIwMDAsIEluZmluaXR5LCAzMDAwKTtcbiAqXG4gKiBkZWxheXMkLnBpcGUoXG4gKiAgIGNvbmNhdE1hcChtcyA9PiB7XG4gKiAgICAgaWYgKG1zIDwgMTAwMDApIHtcbiAqICAgICAgIHJldHVybiB0aW1lcihtcyk7XG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgIC8vIENsZWFuZXIgYW5kIGVhc2llciB0byByZWFkIGZvciBtb3N0IGZvbGtzLlxuICogICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRpbWUgJHsgbXMgfWApO1xuICogICAgIH1cbiAqICAgfSlcbiAqIClcbiAqIC5zdWJzY3JpYmUoe1xuICogICBuZXh0OiBjb25zb2xlLmxvZyxcbiAqICAgZXJyb3I6IGNvbnNvbGUuZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGVycm9yRmFjdG9yeSBBIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCB3aWxsIGNyZWF0ZSB0aGUgZXJyb3IgaW5zdGFuY2UgdGhhdCBpcyBwdXNoZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yRmFjdG9yeTogKCkgPT4gYW55KTogT2JzZXJ2YWJsZTxuZXZlcj47XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgd2lsbCBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgZXJyb3IgaW1tZWRpYXRlbHkgdXBvbiBzdWJzY3JpcHRpb24uXG4gKlxuICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciBpbnN0YW5jZSB0byBlbWl0XG4gKiBAZGVwcmVjYXRlZCBTdXBwb3J0IGZvciBwYXNzaW5nIGFuIGVycm9yIHZhbHVlIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gSW5zdGVhZCwgcGFzcyBhIGZhY3RvcnkgZnVuY3Rpb24gdG8gYHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCd0ZXN0JykpYC4gVGhpcyBpc1xuICogYmVjYXVzZSBpdCB3aWxsIGNyZWF0ZSB0aGUgZXJyb3IgYXQgdGhlIG1vbWVudCBpdCBzaG91bGQgYmUgY3JlYXRlZCBhbmQgY2FwdHVyZSBhIG1vcmUgYXBwcm9wcmlhdGUgc3RhY2sgdHJhY2UuIElmXG4gKiBmb3Igc29tZSByZWFzb24geW91IG5lZWQgdG8gY3JlYXRlIHRoZSBlcnJvciBhaGVhZCBvZiB0aW1lLCB5b3UgY2FuIHN0aWxsIGRvIHRoYXQ6IGBjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ3Rlc3QnKTsgdGhyb3dFcnJvcigoKSA9PiBlcnIpO2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPG5ldmVyPjtcblxuLyoqXG4gKiBOb3RpZmllcyB0aGUgY29uc3VtZXIgb2YgYW4gZXJyb3IgdXNpbmcgYSBnaXZlbiBzY2hlZHVsZXIgYnkgc2NoZWR1bGluZyBpdCBhdCBkZWxheSBgMGAgdXBvbiBzdWJzY3JpcHRpb24uXG4gKlxuICogQHBhcmFtIGVycm9yT3JFcnJvckZhY3RvcnkgQW4gZXJyb3IgaW5zdGFuY2Ugb3IgZXJyb3IgZmFjdG9yeVxuICogQHBhcmFtIHNjaGVkdWxlciBBIHNjaGVkdWxlciB0byB1c2UgdG8gc2NoZWR1bGUgdGhlIGVycm9yIG5vdGlmaWNhdGlvblxuICogQGRlcHJlY2F0ZWQgVGhlIGBzY2hlZHVsZXJgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gKiBVc2UgYHRocm93RXJyb3JgIGluIGNvbWJpbmF0aW9uIHdpdGgge0BsaW5rIG9ic2VydmVPbn06IGB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcigndGVzdCcpKS5waXBlKG9ic2VydmVPbihzY2hlZHVsZXIpKTtgLlxuICogRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvc2NoZWR1bGVyLWFyZ3VtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3Rvcnk6IGFueSwgc2NoZWR1bGVyOiBTY2hlZHVsZXJMaWtlKTogT2JzZXJ2YWJsZTxuZXZlcj47XG5cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3Rvcnk6IGFueSwgc2NoZWR1bGVyPzogU2NoZWR1bGVyTGlrZSk6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgY29uc3QgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiAoKSA9PiBlcnJvck9yRXJyb3JGYWN0b3J5O1xuICBjb25zdCBpbml0ID0gKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8bmV2ZXI+KSA9PiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHNjaGVkdWxlciA/IChzdWJzY3JpYmVyKSA9PiBzY2hlZHVsZXIuc2NoZWR1bGUoaW5pdCBhcyBhbnksIDAsIHN1YnNjcmliZXIpIDogaW5pdCk7XG59XG4iLCAiaW1wb3J0IHsgUGFydGlhbE9ic2VydmVyLCBPYnNlcnZhYmxlTm90aWZpY2F0aW9uLCBDb21wbGV0ZU5vdGlmaWNhdGlvbiwgTmV4dE5vdGlmaWNhdGlvbiwgRXJyb3JOb3RpZmljYXRpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuL09ic2VydmFibGUnO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICcuL29ic2VydmFibGUvZW1wdHknO1xuaW1wb3J0IHsgb2YgfSBmcm9tICcuL29ic2VydmFibGUvb2YnO1xuaW1wb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJy4vb2JzZXJ2YWJsZS90aHJvd0Vycm9yJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL3V0aWwvaXNGdW5jdGlvbic7XG5cbi8vIFRPRE86IFdoZW4gdGhpcyBlbnVtIGlzIHJlbW92ZWQsIHJlcGxhY2UgaXQgd2l0aCBhIHR5cGUgYWxpYXMuIFNlZSAjNDU1Ni5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGEgc3RyaW5nIGxpdGVyYWwgaW5zdGVhZC4gYE5vdGlmaWNhdGlvbktpbmRgIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHR5cGUgYWxpYXMgaW4gdjguXG4gKiBJdCB3aWxsIG5vdCBiZSByZXBsYWNlZCB3aXRoIGEgY29uc3QgZW51bSBhcyB0aG9zZSBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCBpc29sYXRlZCBtb2R1bGVzLlxuICovXG5leHBvcnQgZW51bSBOb3RpZmljYXRpb25LaW5kIHtcbiAgTkVYVCA9ICdOJyxcbiAgRVJST1IgPSAnRScsXG4gIENPTVBMRVRFID0gJ0MnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBwdXNoLWJhc2VkIGV2ZW50IG9yIHZhbHVlIHRoYXQgYW4ge0BsaW5rIE9ic2VydmFibGV9IGNhbiBlbWl0LlxuICogVGhpcyBjbGFzcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBvcGVyYXRvcnMgdGhhdCBtYW5hZ2Ugbm90aWZpY2F0aW9ucyxcbiAqIGxpa2Uge0BsaW5rIG1hdGVyaWFsaXplfSwge0BsaW5rIGRlbWF0ZXJpYWxpemV9LCB7QGxpbmsgb2JzZXJ2ZU9ufSwgYW5kXG4gKiBvdGhlcnMuIEJlc2lkZXMgd3JhcHBpbmcgdGhlIGFjdHVhbCBkZWxpdmVyZWQgdmFsdWUsIGl0IGFsc28gYW5ub3RhdGVzIGl0XG4gKiB3aXRoIG1ldGFkYXRhIG9mLCBmb3IgaW5zdGFuY2UsIHdoYXQgdHlwZSBvZiBwdXNoIG1lc3NhZ2UgaXQgaXMgKGBuZXh0YCxcbiAqIGBlcnJvcmAsIG9yIGBjb21wbGV0ZWApLlxuICpcbiAqIEBzZWUge0BsaW5rIG1hdGVyaWFsaXplfVxuICogQHNlZSB7QGxpbmsgZGVtYXRlcmlhbGl6ZX1cbiAqIEBzZWUge0BsaW5rIG9ic2VydmVPbn1cbiAqIEBkZXByZWNhdGVkIEl0IGlzIE5PVCByZWNvbW1lbmRlZCB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIGBOb3RpZmljYXRpb25gIGRpcmVjdGx5LlxuICogUmF0aGVyLCB0cnkgdG8gY3JlYXRlIFBPSk9zIG1hdGNoaW5nIHRoZSBzaWduYXR1cmUgb3V0bGluZWQgaW4ge0BsaW5rIE9ic2VydmFibGVOb3RpZmljYXRpb259LlxuICogRm9yIGV4YW1wbGU6IGB7IGtpbmQ6ICdOJywgdmFsdWU6IDEgfWAsIGB7IGtpbmQ6ICdFJywgZXJyb3I6IG5ldyBFcnJvcignYmFkJykgfWAsIG9yIGB7IGtpbmQ6ICdDJyB9YC5cbiAqIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbjxUPiB7XG4gIC8qKlxuICAgKiBBIHZhbHVlIHNpZ25pZnlpbmcgdGhhdCB0aGUgbm90aWZpY2F0aW9uIHdpbGwgXCJuZXh0XCIgaWYgb2JzZXJ2ZWQuIEluIHRydXRoLFxuICAgKiBUaGlzIGlzIHJlYWxseSBzeW5vbnltb3VzIHdpdGgganVzdCBjaGVja2luZyBga2luZCA9PT0gXCJOXCJgLlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gdjguIEluc3RlYWQsIGp1c3QgY2hlY2sgdG8gc2VlIGlmIHRoZSB2YWx1ZSBvZiBga2luZGAgaXMgYFwiTlwiYC5cbiAgICovXG4gIHJlYWRvbmx5IGhhc1ZhbHVlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgXCJOZXh0XCIgbm90aWZpY2F0aW9uIG9iamVjdC5cbiAgICogQHBhcmFtIGtpbmQgQWx3YXlzIGAnTidgXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gbm90aWZ5IHdpdGggaWYgb2JzZXJ2ZWQuXG4gICAqIEBkZXByZWNhdGVkIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbC4gVXNlIHtAbGluayBOb3RpZmljYXRpb24jY3JlYXRlTmV4dCBjcmVhdGVOZXh0fSBpbnN0ZWFkLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioa2luZDogJ04nLCB2YWx1ZT86IFQpO1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBcIkVycm9yXCIgbm90aWZpY2F0aW9uIG9iamVjdC5cbiAgICogQHBhcmFtIGtpbmQgQWx3YXlzIGAnRSdgXG4gICAqIEBwYXJhbSB2YWx1ZSBBbHdheXMgYHVuZGVmaW5lZGBcbiAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciB0byBub3RpZnkgd2l0aCBpZiBvYnNlcnZlZC5cbiAgICogQGRlcHJlY2F0ZWQgSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLiBVc2Uge0BsaW5rIE5vdGlmaWNhdGlvbiNjcmVhdGVFcnJvciBjcmVhdGVFcnJvcn0gaW5zdGVhZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGtpbmQ6ICdFJywgdmFsdWU6IHVuZGVmaW5lZCwgZXJyb3I6IGFueSk7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgXCJjb21wbGV0aW9uXCIgbm90aWZpY2F0aW9uIG9iamVjdC5cbiAgICogQHBhcmFtIGtpbmQgQWx3YXlzIGAnQydgXG4gICAqIEBkZXByZWNhdGVkIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbC4gVXNlIHtAbGluayBOb3RpZmljYXRpb24jY3JlYXRlQ29tcGxldGUgY3JlYXRlQ29tcGxldGV9IGluc3RlYWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihraW5kOiAnQycpO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkga2luZDogJ04nIHwgJ0UnIHwgJ0MnLCBwdWJsaWMgcmVhZG9ubHkgdmFsdWU/OiBULCBwdWJsaWMgcmVhZG9ubHkgZXJyb3I/OiBhbnkpIHtcbiAgICB0aGlzLmhhc1ZhbHVlID0ga2luZCA9PT0gJ04nO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIG9uIGEgcGFzc2VkIGBvYnNlcnZlcmAgZ2l2ZW4gdGhlIGBraW5kYCBvZiBub3RpZmljYXRpb24uXG4gICAqIElmIHRoZSBoYW5kbGVyIGlzIG1pc3NpbmcgaXQgd2lsbCBkbyBub3RoaW5nLiBFdmVuIGlmIHRoZSBub3RpZmljYXRpb24gaXMgYW4gZXJyb3IsIGlmXG4gICAqIHRoZXJlIGlzIG5vIGVycm9yIGhhbmRsZXIgb24gdGhlIG9ic2VydmVyLCBhbiBlcnJvciB3aWxsIG5vdCBiZSB0aHJvd24sIGl0IHdpbGwgbm9vcC5cbiAgICogQHBhcmFtIG9ic2VydmVyIFRoZSBvYnNlcnZlciB0byBub3RpZnkuXG4gICAqL1xuICBvYnNlcnZlKG9ic2VydmVyOiBQYXJ0aWFsT2JzZXJ2ZXI8VD4pOiB2b2lkIHtcbiAgICByZXR1cm4gb2JzZXJ2ZU5vdGlmaWNhdGlvbih0aGlzIGFzIE9ic2VydmFibGVOb3RpZmljYXRpb248VD4sIG9ic2VydmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIG5vdGlmaWNhdGlvbiBvbiB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlciBmcm9tIGEgbGlzdCBwcm92aWRlZC5cbiAgICogSWYgYSBoYW5kbGVyIGlzIG1pc3NpbmcgZm9yIHRoZSBraW5kIG9mIG5vdGlmaWNhdGlvbiwgbm90aGluZyBpcyBjYWxsZWRcbiAgICogYW5kIG5vIGVycm9yIGlzIHRocm93biwgaXQgd2lsbCBiZSBhIG5vb3AuXG4gICAqIEBwYXJhbSBuZXh0IEEgbmV4dCBoYW5kbGVyXG4gICAqIEBwYXJhbSBlcnJvciBBbiBlcnJvciBoYW5kbGVyXG4gICAqIEBwYXJhbSBjb21wbGV0ZSBBIGNvbXBsZXRlIGhhbmRsZXJcbiAgICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgd2l0aCB7QGxpbmsgTm90aWZpY2F0aW9uI29ic2VydmUgb2JzZXJ2ZX0uIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAgICovXG4gIGRvKG5leHQ6ICh2YWx1ZTogVCkgPT4gdm9pZCwgZXJyb3I6IChlcnI6IGFueSkgPT4gdm9pZCwgY29tcGxldGU6ICgpID0+IHZvaWQpOiB2b2lkO1xuICAvKipcbiAgICogRXhlY3V0ZXMgYSBub3RpZmljYXRpb24gb24gdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIgZnJvbSBhIGxpc3QgcHJvdmlkZWQuXG4gICAqIElmIGEgaGFuZGxlciBpcyBtaXNzaW5nIGZvciB0aGUga2luZCBvZiBub3RpZmljYXRpb24sIG5vdGhpbmcgaXMgY2FsbGVkXG4gICAqIGFuZCBubyBlcnJvciBpcyB0aHJvd24sIGl0IHdpbGwgYmUgYSBub29wLlxuICAgKiBAcGFyYW0gbmV4dCBBIG5leHQgaGFuZGxlclxuICAgKiBAcGFyYW0gZXJyb3IgQW4gZXJyb3IgaGFuZGxlclxuICAgKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCB3aXRoIHtAbGluayBOb3RpZmljYXRpb24jb2JzZXJ2ZSBvYnNlcnZlfS4gV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICAgKi9cbiAgZG8obmV4dDogKHZhbHVlOiBUKSA9PiB2b2lkLCBlcnJvcjogKGVycjogYW55KSA9PiB2b2lkKTogdm9pZDtcbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBuZXh0IGhhbmRsZXIgaWYgdGhlIE5vdGlmaWNhdGlvbiBpcyBvZiBga2luZGAgYFwiTlwiYC4gT3RoZXJ3aXNlXG4gICAqIHRoaXMgd2lsbCBub3QgZXJyb3IsIGFuZCBpdCB3aWxsIGJlIGEgbm9vcC5cbiAgICogQHBhcmFtIG5leHQgVGhlIG5leHQgaGFuZGxlclxuICAgKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCB3aXRoIHtAbGluayBOb3RpZmljYXRpb24jb2JzZXJ2ZSBvYnNlcnZlfS4gV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICAgKi9cbiAgZG8obmV4dDogKHZhbHVlOiBUKSA9PiB2b2lkKTogdm9pZDtcbiAgZG8obmV4dEhhbmRsZXI6ICh2YWx1ZTogVCkgPT4gdm9pZCwgZXJyb3JIYW5kbGVyPzogKGVycjogYW55KSA9PiB2b2lkLCBjb21wbGV0ZUhhbmRsZXI/OiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgeyBraW5kLCB2YWx1ZSwgZXJyb3IgfSA9IHRoaXM7XG4gICAgcmV0dXJuIGtpbmQgPT09ICdOJyA/IG5leHRIYW5kbGVyPy4odmFsdWUhKSA6IGtpbmQgPT09ICdFJyA/IGVycm9ySGFuZGxlcj8uKGVycm9yKSA6IGNvbXBsZXRlSGFuZGxlcj8uKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBub3RpZmljYXRpb24gb24gdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIgZnJvbSBhIGxpc3QgcHJvdmlkZWQuXG4gICAqIElmIGEgaGFuZGxlciBpcyBtaXNzaW5nIGZvciB0aGUga2luZCBvZiBub3RpZmljYXRpb24sIG5vdGhpbmcgaXMgY2FsbGVkXG4gICAqIGFuZCBubyBlcnJvciBpcyB0aHJvd24sIGl0IHdpbGwgYmUgYSBub29wLlxuICAgKiBAcGFyYW0gbmV4dCBBIG5leHQgaGFuZGxlclxuICAgKiBAcGFyYW0gZXJyb3IgQW4gZXJyb3IgaGFuZGxlclxuICAgKiBAcGFyYW0gY29tcGxldGUgQSBjb21wbGV0ZSBoYW5kbGVyXG4gICAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIHdpdGgge0BsaW5rIE5vdGlmaWNhdGlvbiNvYnNlcnZlIG9ic2VydmV9LiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gICAqL1xuICBhY2NlcHQobmV4dDogKHZhbHVlOiBUKSA9PiB2b2lkLCBlcnJvcjogKGVycjogYW55KSA9PiB2b2lkLCBjb21wbGV0ZTogKCkgPT4gdm9pZCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIG5vdGlmaWNhdGlvbiBvbiB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlciBmcm9tIGEgbGlzdCBwcm92aWRlZC5cbiAgICogSWYgYSBoYW5kbGVyIGlzIG1pc3NpbmcgZm9yIHRoZSBraW5kIG9mIG5vdGlmaWNhdGlvbiwgbm90aGluZyBpcyBjYWxsZWRcbiAgICogYW5kIG5vIGVycm9yIGlzIHRocm93biwgaXQgd2lsbCBiZSBhIG5vb3AuXG4gICAqIEBwYXJhbSBuZXh0IEEgbmV4dCBoYW5kbGVyXG4gICAqIEBwYXJhbSBlcnJvciBBbiBlcnJvciBoYW5kbGVyXG4gICAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIHdpdGgge0BsaW5rIE5vdGlmaWNhdGlvbiNvYnNlcnZlIG9ic2VydmV9LiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gICAqL1xuICBhY2NlcHQobmV4dDogKHZhbHVlOiBUKSA9PiB2b2lkLCBlcnJvcjogKGVycjogYW55KSA9PiB2b2lkKTogdm9pZDtcbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBuZXh0IGhhbmRsZXIgaWYgdGhlIE5vdGlmaWNhdGlvbiBpcyBvZiBga2luZGAgYFwiTlwiYC4gT3RoZXJ3aXNlXG4gICAqIHRoaXMgd2lsbCBub3QgZXJyb3IsIGFuZCBpdCB3aWxsIGJlIGEgbm9vcC5cbiAgICogQHBhcmFtIG5leHQgVGhlIG5leHQgaGFuZGxlclxuICAgKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCB3aXRoIHtAbGluayBOb3RpZmljYXRpb24jb2JzZXJ2ZSBvYnNlcnZlfS4gV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICAgKi9cbiAgYWNjZXB0KG5leHQ6ICh2YWx1ZTogVCkgPT4gdm9pZCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIG9uIGEgcGFzc2VkIGBvYnNlcnZlcmAgZ2l2ZW4gdGhlIGBraW5kYCBvZiBub3RpZmljYXRpb24uXG4gICAqIElmIHRoZSBoYW5kbGVyIGlzIG1pc3NpbmcgaXQgd2lsbCBkbyBub3RoaW5nLiBFdmVuIGlmIHRoZSBub3RpZmljYXRpb24gaXMgYW4gZXJyb3IsIGlmXG4gICAqIHRoZXJlIGlzIG5vIGVycm9yIGhhbmRsZXIgb24gdGhlIG9ic2VydmVyLCBhbiBlcnJvciB3aWxsIG5vdCBiZSB0aHJvd24sIGl0IHdpbGwgbm9vcC5cbiAgICogQHBhcmFtIG9ic2VydmVyIFRoZSBvYnNlcnZlciB0byBub3RpZnkuXG4gICAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIHdpdGgge0BsaW5rIE5vdGlmaWNhdGlvbiNvYnNlcnZlIG9ic2VydmV9LiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gICAqL1xuICBhY2NlcHQob2JzZXJ2ZXI6IFBhcnRpYWxPYnNlcnZlcjxUPik6IHZvaWQ7XG4gIGFjY2VwdChuZXh0T3JPYnNlcnZlcjogUGFydGlhbE9ic2VydmVyPFQ+IHwgKCh2YWx1ZTogVCkgPT4gdm9pZCksIGVycm9yPzogKGVycjogYW55KSA9PiB2b2lkLCBjb21wbGV0ZT86ICgpID0+IHZvaWQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbigobmV4dE9yT2JzZXJ2ZXIgYXMgYW55KT8ubmV4dClcbiAgICAgID8gdGhpcy5vYnNlcnZlKG5leHRPck9ic2VydmVyIGFzIFBhcnRpYWxPYnNlcnZlcjxUPilcbiAgICAgIDogdGhpcy5kbyhuZXh0T3JPYnNlcnZlciBhcyAodmFsdWU6IFQpID0+IHZvaWQsIGVycm9yIGFzIGFueSwgY29tcGxldGUgYXMgYW55KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2ltcGxlIE9ic2VydmFibGUgdGhhdCBqdXN0IGRlbGl2ZXJzIHRoZSBub3RpZmljYXRpb24gcmVwcmVzZW50ZWRcbiAgICogYnkgdGhpcyBOb3RpZmljYXRpb24gaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVG8gY29udmVydCBhIGBOb3RpZmljYXRpb25gIHRvIGFuIHtAbGluayBPYnNlcnZhYmxlfSxcbiAgICogdXNlIHtAbGluayBvZn0gYW5kIHtAbGluayBkZW1hdGVyaWFsaXplfTogYG9mKG5vdGlmaWNhdGlvbikucGlwZShkZW1hdGVyaWFsaXplKCkpYC5cbiAgICovXG4gIHRvT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCB7IGtpbmQsIHZhbHVlLCBlcnJvciB9ID0gdGhpcztcbiAgICAvLyBTZWxlY3QgdGhlIG9ic2VydmFibGUgdG8gcmV0dXJuIGJ5IGBraW5kYFxuICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICBraW5kID09PSAnTidcbiAgICAgICAgPyAvLyBOZXh0IGtpbmQuIFJldHVybiBhbiBvYnNlcnZhYmxlIG9mIHRoYXQgdmFsdWUuXG4gICAgICAgICAgb2YodmFsdWUhKVxuICAgICAgICA6IC8vXG4gICAgICAgIGtpbmQgPT09ICdFJ1xuICAgICAgICA/IC8vIEVycm9yIGtpbmQuIFJldHVybiBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGVycm9yLlxuICAgICAgICAgIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXG4gICAgICAgIDogLy9cbiAgICAgICAga2luZCA9PT0gJ0MnXG4gICAgICAgID8gLy8gQ29tcGxldGlvbiBraW5kLiBLaW5kIGlzIFwiQ1wiLCByZXR1cm4gYW4gb2JzZXJ2YWJsZSB0aGF0IGp1c3QgY29tcGxldGVzLlxuICAgICAgICAgIEVNUFRZXG4gICAgICAgIDogLy8gVW5rbm93biBraW5kLCByZXR1cm4gZmFsc3ksIHNvIHdlIGVycm9yIGJlbG93LlxuICAgICAgICAgIDA7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIC8vIFRPRE86IGNvbnNpZGVyIHJlbW92aW5nIHRoaXMgY2hlY2suIFRoZSBvbmx5IHdheSB0byBjYXVzZSB0aGlzIHdvdWxkIGJlIHRvXG4gICAgICAvLyB1c2UgdGhlIE5vdGlmaWNhdGlvbiBjb25zdHJ1Y3RvciBkaXJlY3RseSBpbiBhIHdheSB0aGF0IGlzIG5vdCB0eXBlLXNhZmUuXG4gICAgICAvLyBhbmQgZGlyZWN0IHVzZSBvZiB0aGUgTm90aWZpY2F0aW9uIGNvbnN0cnVjdG9yIGlzIGRlcHJlY2F0ZWQuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICR7a2luZH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvbXBsZXRlTm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbignQycpIGFzIE5vdGlmaWNhdGlvbjxuZXZlcj4gJiBDb21wbGV0ZU5vdGlmaWNhdGlvbjtcbiAgLyoqXG4gICAqIEEgc2hvcnRjdXQgdG8gY3JlYXRlIGEgTm90aWZpY2F0aW9uIGluc3RhbmNlIG9mIHRoZSB0eXBlIGBuZXh0YCBmcm9tIGFcbiAgICogZ2l2ZW4gdmFsdWUuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgYG5leHRgIHZhbHVlLlxuICAgKiBAcmV0dXJuIFRoZSBcIm5leHRcIiBOb3RpZmljYXRpb24gcmVwcmVzZW50aW5nIHRoZSBhcmd1bWVudC5cbiAgICogQGRlcHJlY2F0ZWQgSXQgaXMgTk9UIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YgYE5vdGlmaWNhdGlvbmAgZGlyZWN0bHkuXG4gICAqIFJhdGhlciwgdHJ5IHRvIGNyZWF0ZSBQT0pPcyBtYXRjaGluZyB0aGUgc2lnbmF0dXJlIG91dGxpbmVkIGluIHtAbGluayBPYnNlcnZhYmxlTm90aWZpY2F0aW9ufS5cbiAgICogRm9yIGV4YW1wbGU6IGB7IGtpbmQ6ICdOJywgdmFsdWU6IDEgfWAsIGB7IGtpbmQ6ICdFJywgZXJyb3I6IG5ldyBFcnJvcignYmFkJykgfWAsIG9yIGB7IGtpbmQ6ICdDJyB9YC5cbiAgICogV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZU5leHQ8VD4odmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IE5vdGlmaWNhdGlvbignTicsIHZhbHVlKSBhcyBOb3RpZmljYXRpb248VD4gJiBOZXh0Tm90aWZpY2F0aW9uPFQ+O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc2hvcnRjdXQgdG8gY3JlYXRlIGEgTm90aWZpY2F0aW9uIGluc3RhbmNlIG9mIHRoZSB0eXBlIGBlcnJvcmAgZnJvbSBhXG4gICAqIGdpdmVuIGVycm9yLlxuICAgKiBAcGFyYW0gZXJyIFRoZSBgZXJyb3JgIGVycm9yLlxuICAgKiBAcmV0dXJuIFRoZSBcImVycm9yXCIgTm90aWZpY2F0aW9uIHJlcHJlc2VudGluZyB0aGUgYXJndW1lbnQuXG4gICAqIEBkZXByZWNhdGVkIEl0IGlzIE5PVCByZWNvbW1lbmRlZCB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIGBOb3RpZmljYXRpb25gIGRpcmVjdGx5LlxuICAgKiBSYXRoZXIsIHRyeSB0byBjcmVhdGUgUE9KT3MgbWF0Y2hpbmcgdGhlIHNpZ25hdHVyZSBvdXRsaW5lZCBpbiB7QGxpbmsgT2JzZXJ2YWJsZU5vdGlmaWNhdGlvbn0uXG4gICAqIEZvciBleGFtcGxlOiBgeyBraW5kOiAnTicsIHZhbHVlOiAxIH1gLCBgeyBraW5kOiAnRScsIGVycm9yOiBuZXcgRXJyb3IoJ2JhZCcpIH1gLCBvciBgeyBraW5kOiAnQycgfWAuXG4gICAqIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVFcnJvcihlcnI/OiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IE5vdGlmaWNhdGlvbignRScsIHVuZGVmaW5lZCwgZXJyKSBhcyBOb3RpZmljYXRpb248bmV2ZXI+ICYgRXJyb3JOb3RpZmljYXRpb247XG4gIH1cblxuICAvKipcbiAgICogQSBzaG9ydGN1dCB0byBjcmVhdGUgYSBOb3RpZmljYXRpb24gaW5zdGFuY2Ugb2YgdGhlIHR5cGUgYGNvbXBsZXRlYC5cbiAgICogQHJldHVybiBUaGUgdmFsdWVsZXNzIFwiY29tcGxldGVcIiBOb3RpZmljYXRpb24uXG4gICAqIEBkZXByZWNhdGVkIEl0IGlzIE5PVCByZWNvbW1lbmRlZCB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIGBOb3RpZmljYXRpb25gIGRpcmVjdGx5LlxuICAgKiBSYXRoZXIsIHRyeSB0byBjcmVhdGUgUE9KT3MgbWF0Y2hpbmcgdGhlIHNpZ25hdHVyZSBvdXRsaW5lZCBpbiB7QGxpbmsgT2JzZXJ2YWJsZU5vdGlmaWNhdGlvbn0uXG4gICAqIEZvciBleGFtcGxlOiBgeyBraW5kOiAnTicsIHZhbHVlOiAxIH1gLCBgeyBraW5kOiAnRScsIGVycm9yOiBuZXcgRXJyb3IoJ2JhZCcpIH1gLCBvciBgeyBraW5kOiAnQycgfWAuXG4gICAqIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDb21wbGV0ZSgpOiBOb3RpZmljYXRpb248bmV2ZXI+ICYgQ29tcGxldGVOb3RpZmljYXRpb24ge1xuICAgIHJldHVybiBOb3RpZmljYXRpb24uY29tcGxldGVOb3RpZmljYXRpb247XG4gIH1cbn1cblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlciBvbiBhIHBhc3NlZCBgb2JzZXJ2ZXJgIGdpdmVuIHRoZSBga2luZGAgb2Ygbm90aWZpY2F0aW9uLlxuICogSWYgdGhlIGhhbmRsZXIgaXMgbWlzc2luZyBpdCB3aWxsIGRvIG5vdGhpbmcuIEV2ZW4gaWYgdGhlIG5vdGlmaWNhdGlvbiBpcyBhbiBlcnJvciwgaWZcbiAqIHRoZXJlIGlzIG5vIGVycm9yIGhhbmRsZXIgb24gdGhlIG9ic2VydmVyLCBhbiBlcnJvciB3aWxsIG5vdCBiZSB0aHJvd24sIGl0IHdpbGwgbm9vcC5cbiAqIEBwYXJhbSBub3RpZmljYXRpb24gVGhlIG5vdGlmaWNhdGlvbiBvYmplY3QgdG8gb2JzZXJ2ZS5cbiAqIEBwYXJhbSBvYnNlcnZlciBUaGUgb2JzZXJ2ZXIgdG8gbm90aWZ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZU5vdGlmaWNhdGlvbjxUPihub3RpZmljYXRpb246IE9ic2VydmFibGVOb3RpZmljYXRpb248VD4sIG9ic2VydmVyOiBQYXJ0aWFsT2JzZXJ2ZXI8VD4pIHtcbiAgY29uc3QgeyBraW5kLCB2YWx1ZSwgZXJyb3IgfSA9IG5vdGlmaWNhdGlvbiBhcyBhbnk7XG4gIGlmICh0eXBlb2Yga2luZCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vdGlmaWNhdGlvbiwgbWlzc2luZyBcImtpbmRcIicpO1xuICB9XG4gIGtpbmQgPT09ICdOJyA/IG9ic2VydmVyLm5leHQ/Lih2YWx1ZSEpIDoga2luZCA9PT0gJ0UnID8gb2JzZXJ2ZXIuZXJyb3I/LihlcnJvcikgOiBvYnNlcnZlci5jb21wbGV0ZT8uKCk7XG59XG4iLCAiLyoqIHByZXR0aWVyICovXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uJztcblxuLyoqXG4gKiBUZXN0cyB0byBzZWUgaWYgdGhlIG9iamVjdCBpcyBhbiBSeEpTIHtAbGluayBPYnNlcnZhYmxlfVxuICogQHBhcmFtIG9iaiB0aGUgb2JqZWN0IHRvIHRlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JzZXJ2YWJsZShvYmo6IGFueSk6IG9iaiBpcyBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgLy8gVGhlICEhIGlzIHRvIGVuc3VyZSB0aGF0IHRoaXMgcHVibGljbHkgZXhwb3NlZCBmdW5jdGlvbiByZXR1cm5zXG4gIC8vIGBmYWxzZWAgaWYgc29tZXRoaW5nIGxpa2UgYG51bGxgIG9yIGAwYCBpcyBwYXNzZWQuXG4gIHJldHVybiAhIW9iaiAmJiAob2JqIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSB8fCAoaXNGdW5jdGlvbihvYmoubGlmdCkgJiYgaXNGdW5jdGlvbihvYmouc3Vic2NyaWJlKSkpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUVycm9yQ2xhc3MgfSBmcm9tICcuL2NyZWF0ZUVycm9yQ2xhc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVtcHR5RXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtcHR5RXJyb3JDdG9yIHtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbC4gRG8gbm90IGNvbnN0cnVjdCBlcnJvciBpbnN0YW5jZXMuXG4gICAqIENhbm5vdCBiZSB0YWdnZWQgYXMgaW50ZXJuYWw6IGh0dHBzOi8vZ2l0aHViLmNvbS9SZWFjdGl2ZVgvcnhqcy9pc3N1ZXMvNjI2OVxuICAgKi9cbiAgbmV3ICgpOiBFbXB0eUVycm9yO1xufVxuXG4vKipcbiAqIEFuIGVycm9yIHRocm93biB3aGVuIGFuIE9ic2VydmFibGUgb3IgYSBzZXF1ZW5jZSB3YXMgcXVlcmllZCBidXQgaGFzIG5vXG4gKiBlbGVtZW50cy5cbiAqXG4gKiBAc2VlIHtAbGluayBmaXJzdH1cbiAqIEBzZWUge0BsaW5rIGxhc3R9XG4gKiBAc2VlIHtAbGluayBzaW5nbGV9XG4gKiBAc2VlIHtAbGluayBmaXJzdFZhbHVlRnJvbX1cbiAqIEBzZWUge0BsaW5rIGxhc3RWYWx1ZUZyb219XG4gKi9cbmV4cG9ydCBjb25zdCBFbXB0eUVycm9yOiBFbXB0eUVycm9yQ3RvciA9IGNyZWF0ZUVycm9yQ2xhc3MoXG4gIChfc3VwZXIpID0+XG4gICAgZnVuY3Rpb24gRW1wdHlFcnJvckltcGwodGhpczogYW55KSB7XG4gICAgICBfc3VwZXIodGhpcyk7XG4gICAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xuICAgIH1cbik7XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBFbXB0eUVycm9yIH0gZnJvbSAnLi91dGlsL0VtcHR5RXJyb3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIExhc3RWYWx1ZUZyb21Db25maWc8VD4ge1xuICBkZWZhdWx0VmFsdWU6IFQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXN0VmFsdWVGcm9tPFQsIEQ+KHNvdXJjZTogT2JzZXJ2YWJsZTxUPiwgY29uZmlnOiBMYXN0VmFsdWVGcm9tQ29uZmlnPEQ+KTogUHJvbWlzZTxUIHwgRD47XG5leHBvcnQgZnVuY3Rpb24gbGFzdFZhbHVlRnJvbTxUPihzb3VyY2U6IE9ic2VydmFibGU8VD4pOiBQcm9taXNlPFQ+O1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9ic2VydmFibGUgdG8gYSBwcm9taXNlIGJ5IHN1YnNjcmliaW5nIHRvIHRoZSBvYnNlcnZhYmxlLFxuICogd2FpdGluZyBmb3IgaXQgdG8gY29tcGxldGUsIGFuZCByZXNvbHZpbmcgdGhlIHJldHVybmVkIHByb21pc2Ugd2l0aCB0aGVcbiAqIGxhc3QgdmFsdWUgZnJvbSB0aGUgb2JzZXJ2ZWQgc3RyZWFtLlxuICpcbiAqIElmIHRoZSBvYnNlcnZhYmxlIHN0cmVhbSBjb21wbGV0ZXMgYmVmb3JlIGFueSB2YWx1ZXMgd2VyZSBlbWl0dGVkLCB0aGVcbiAqIHJldHVybmVkIHByb21pc2Ugd2lsbCByZWplY3Qgd2l0aCB7QGxpbmsgRW1wdHlFcnJvcn0gb3Igd2lsbCByZXNvbHZlXG4gKiB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlIGlmIGEgZGVmYXVsdCB3YXMgc3BlY2lmaWVkLlxuICpcbiAqIElmIHRoZSBvYnNlcnZhYmxlIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCByZWplY3RcbiAqIHdpdGggdGhhdCBlcnJvci5cbiAqXG4gKiAqKldBUk5JTkcqKjogT25seSB1c2UgdGhpcyB3aXRoIG9ic2VydmFibGVzIHlvdSAqa25vdyogd2lsbCBjb21wbGV0ZS4gSWYgdGhlIHNvdXJjZVxuICogb2JzZXJ2YWJsZSBkb2VzIG5vdCBjb21wbGV0ZSwgeW91IHdpbGwgZW5kIHVwIHdpdGggYSBwcm9taXNlIHRoYXQgaXMgaHVuZyB1cCwgYW5kXG4gKiBwb3RlbnRpYWxseSBhbGwgb2YgdGhlIHN0YXRlIG9mIGFuIGFzeW5jIGZ1bmN0aW9uIGhhbmdpbmcgb3V0IGluIG1lbW9yeS4gVG8gYXZvaWRcbiAqIHRoaXMgc2l0dWF0aW9uLCBsb29rIGludG8gYWRkaW5nIHNvbWV0aGluZyBsaWtlIHtAbGluayB0aW1lb3V0fSwge0BsaW5rIHRha2V9LFxuICoge0BsaW5rIHRha2VXaGlsZX0sIG9yIHtAbGluayB0YWtlVW50aWx9IGFtb25nc3Qgb3RoZXJzLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBXYWl0IGZvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIGEgc3RyZWFtIGFuZCBlbWl0IGl0IGZyb20gYSBwcm9taXNlIGluXG4gKiBhbiBhc3luYyBmdW5jdGlvblxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbnRlcnZhbCwgdGFrZSwgbGFzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gKiAgIGNvbnN0IHNvdXJjZSQgPSBpbnRlcnZhbCgyMDAwKS5waXBlKHRha2UoMTApKTtcbiAqICAgY29uc3QgZmluYWxOdW1iZXIgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKHNvdXJjZSQpO1xuICogICBjb25zb2xlLmxvZyhgVGhlIGZpbmFsIG51bWJlciBpcyAkeyBmaW5hbE51bWJlciB9YCk7XG4gKiB9XG4gKlxuICogZXhlY3V0ZSgpO1xuICpcbiAqIC8vIEV4cGVjdGVkIG91dHB1dDpcbiAqIC8vICdUaGUgZmluYWwgbnVtYmVyIGlzIDknXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBmaXJzdFZhbHVlRnJvbX1cbiAqXG4gKiBAcGFyYW0gc291cmNlIHRoZSBvYnNlcnZhYmxlIHRvIGNvbnZlcnQgdG8gYSBwcm9taXNlXG4gKiBAcGFyYW0gY29uZmlnIGEgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gZGVmaW5lIHRoZSBgZGVmYXVsdFZhbHVlYCB0byB1c2UgaWYgdGhlIHNvdXJjZSBjb21wbGV0ZXMgd2l0aG91dCBlbWl0dGluZyBhIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXN0VmFsdWVGcm9tPFQsIEQ+KHNvdXJjZTogT2JzZXJ2YWJsZTxUPiwgY29uZmlnPzogTGFzdFZhbHVlRnJvbUNvbmZpZzxEPik6IFByb21pc2U8VCB8IEQ+IHtcbiAgY29uc3QgaGFzQ29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCc7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUIHwgRD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBfaGFzVmFsdWUgPSBmYWxzZTtcbiAgICBsZXQgX3ZhbHVlOiBUO1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICBfaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgcmVzb2x2ZShfdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhc0NvbmZpZykge1xuICAgICAgICAgIHJlc29sdmUoY29uZmlnIS5kZWZhdWx0VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBFbXB0eUVycm9yIH0gZnJvbSAnLi91dGlsL0VtcHR5RXJyb3InO1xuaW1wb3J0IHsgU2FmZVN1YnNjcmliZXIgfSBmcm9tICcuL1N1YnNjcmliZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpcnN0VmFsdWVGcm9tQ29uZmlnPFQ+IHtcbiAgZGVmYXVsdFZhbHVlOiBUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RWYWx1ZUZyb208VCwgRD4oc291cmNlOiBPYnNlcnZhYmxlPFQ+LCBjb25maWc6IEZpcnN0VmFsdWVGcm9tQ29uZmlnPEQ+KTogUHJvbWlzZTxUIHwgRD47XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RWYWx1ZUZyb208VD4oc291cmNlOiBPYnNlcnZhYmxlPFQ+KTogUHJvbWlzZTxUPjtcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYnNlcnZhYmxlIHRvIGEgcHJvbWlzZSBieSBzdWJzY3JpYmluZyB0byB0aGUgb2JzZXJ2YWJsZSxcbiAqIGFuZCByZXR1cm5pbmcgYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIGFzIHNvb24gYXMgdGhlIGZpcnN0IHZhbHVlXG4gKiBhcnJpdmVzIGZyb20gdGhlIG9ic2VydmFibGUuIFRoZSBzdWJzY3JpcHRpb24gd2lsbCB0aGVuIGJlIGNsb3NlZC5cbiAqXG4gKiBJZiB0aGUgb2JzZXJ2YWJsZSBzdHJlYW0gY29tcGxldGVzIGJlZm9yZSBhbnkgdmFsdWVzIHdlcmUgZW1pdHRlZCwgdGhlXG4gKiByZXR1cm5lZCBwcm9taXNlIHdpbGwgcmVqZWN0IHdpdGgge0BsaW5rIEVtcHR5RXJyb3J9IG9yIHdpbGwgcmVzb2x2ZVxuICogd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBhIGRlZmF1bHQgd2FzIHNwZWNpZmllZC5cbiAqXG4gKiBJZiB0aGUgb2JzZXJ2YWJsZSBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgcmVqZWN0XG4gKiB3aXRoIHRoYXQgZXJyb3IuXG4gKlxuICogKipXQVJOSU5HKio6IE9ubHkgdXNlIHRoaXMgd2l0aCBvYnNlcnZhYmxlcyB5b3UgKmtub3cqIHdpbGwgZW1pdCBhdCBsZWFzdCBvbmUgdmFsdWUsXG4gKiAqT1IqIGNvbXBsZXRlLiBJZiB0aGUgc291cmNlIG9ic2VydmFibGUgZG9lcyBub3QgZW1pdCBvbmUgdmFsdWUgb3IgY29tcGxldGUsIHlvdSB3aWxsXG4gKiBlbmQgdXAgd2l0aCBhIHByb21pc2UgdGhhdCBpcyBodW5nIHVwLCBhbmQgcG90ZW50aWFsbHkgYWxsIG9mIHRoZSBzdGF0ZSBvZiBhblxuICogYXN5bmMgZnVuY3Rpb24gaGFuZ2luZyBvdXQgaW4gbWVtb3J5LiBUbyBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgbG9vayBpbnRvIGFkZGluZ1xuICogc29tZXRoaW5nIGxpa2Uge0BsaW5rIHRpbWVvdXR9LCB7QGxpbmsgdGFrZX0sIHtAbGluayB0YWtlV2hpbGV9LCBvciB7QGxpbmsgdGFrZVVudGlsfVxuICogYW1vbmdzdCBvdGhlcnMuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFdhaXQgZm9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIGEgc3RyZWFtIGFuZCBlbWl0IGl0IGZyb20gYSBwcm9taXNlIGluXG4gKiBhbiBhc3luYyBmdW5jdGlvblxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbnRlcnZhbCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbiAqXG4gKiBhc3luYyBmdW5jdGlvbiBleGVjdXRlKCkge1xuICogICBjb25zdCBzb3VyY2UkID0gaW50ZXJ2YWwoMjAwMCk7XG4gKiAgIGNvbnN0IGZpcnN0TnVtYmVyID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oc291cmNlJCk7XG4gKiAgIGNvbnNvbGUubG9nKGBUaGUgZmlyc3QgbnVtYmVyIGlzICR7IGZpcnN0TnVtYmVyIH1gKTtcbiAqIH1cbiAqXG4gKiBleGVjdXRlKCk7XG4gKlxuICogLy8gRXhwZWN0ZWQgb3V0cHV0OlxuICogLy8gJ1RoZSBmaXJzdCBudW1iZXIgaXMgMCdcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGxhc3RWYWx1ZUZyb219XG4gKlxuICogQHBhcmFtIHNvdXJjZSB0aGUgb2JzZXJ2YWJsZSB0byBjb252ZXJ0IHRvIGEgcHJvbWlzZVxuICogQHBhcmFtIGNvbmZpZyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGRlZmluZSB0aGUgYGRlZmF1bHRWYWx1ZWAgdG8gdXNlIGlmIHRoZSBzb3VyY2UgY29tcGxldGVzIHdpdGhvdXQgZW1pdHRpbmcgYSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RWYWx1ZUZyb208VCwgRD4oc291cmNlOiBPYnNlcnZhYmxlPFQ+LCBjb25maWc/OiBGaXJzdFZhbHVlRnJvbUNvbmZpZzxEPik6IFByb21pc2U8VCB8IEQ+IHtcbiAgY29uc3QgaGFzQ29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCc7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUIHwgRD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXI8VD4oe1xuICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgIGlmIChoYXNDb25maWcpIHtcbiAgICAgICAgICByZXNvbHZlKGNvbmZpZyEuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gICAgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXJyb3JDbGFzcyB9IGZyb20gJy4vY3JlYXRlRXJyb3JDbGFzcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yQ3RvciB7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIERvIG5vdCBjb25zdHJ1Y3QgZXJyb3IgaW5zdGFuY2VzLlxuICAgKiBDYW5ub3QgYmUgdGFnZ2VkIGFzIGludGVybmFsOiBodHRwczovL2dpdGh1Yi5jb20vUmVhY3RpdmVYL3J4anMvaXNzdWVzLzYyNjlcbiAgICovXG4gIG5ldyAoKTogQXJndW1lbnRPdXRPZlJhbmdlRXJyb3I7XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gYW4gZWxlbWVudCB3YXMgcXVlcmllZCBhdCBhIGNlcnRhaW4gaW5kZXggb2YgYW5cbiAqIE9ic2VydmFibGUsIGJ1dCBubyBzdWNoIGluZGV4IG9yIHBvc2l0aW9uIGV4aXN0cyBpbiB0aGF0IHNlcXVlbmNlLlxuICpcbiAqIEBzZWUge0BsaW5rIGVsZW1lbnRBdH1cbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKiBAc2VlIHtAbGluayB0YWtlTGFzdH1cbiAqL1xuZXhwb3J0IGNvbnN0IEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yOiBBcmd1bWVudE91dE9mUmFuZ2VFcnJvckN0b3IgPSBjcmVhdGVFcnJvckNsYXNzKFxuICAoX3N1cGVyKSA9PlxuICAgIGZ1bmN0aW9uIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9ySW1wbCh0aGlzOiBhbnkpIHtcbiAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgIHRoaXMubmFtZSA9ICdBcmd1bWVudE91dE9mUmFuZ2VFcnJvcic7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSAnYXJndW1lbnQgb3V0IG9mIHJhbmdlJztcbiAgICB9XG4pO1xuIiwgImltcG9ydCB7IGNyZWF0ZUVycm9yQ2xhc3MgfSBmcm9tICcuL2NyZWF0ZUVycm9yQ2xhc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vdEZvdW5kRXJyb3JDdG9yIHtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbC4gRG8gbm90IGNvbnN0cnVjdCBlcnJvciBpbnN0YW5jZXMuXG4gICAqIENhbm5vdCBiZSB0YWdnZWQgYXMgaW50ZXJuYWw6IGh0dHBzOi8vZ2l0aHViLmNvbS9SZWFjdGl2ZVgvcnhqcy9pc3N1ZXMvNjI2OVxuICAgKi9cbiAgbmV3IChtZXNzYWdlOiBzdHJpbmcpOiBOb3RGb3VuZEVycm9yO1xufVxuXG4vKipcbiAqIEFuIGVycm9yIHRocm93biB3aGVuIGEgdmFsdWUgb3IgdmFsdWVzIGFyZSBtaXNzaW5nIGZyb20gYW5cbiAqIG9ic2VydmFibGUgc2VxdWVuY2UuXG4gKlxuICogQHNlZSB7QGxpbmsgb3BlcmF0b3JzL3NpbmdsZX1cbiAqL1xuZXhwb3J0IGNvbnN0IE5vdEZvdW5kRXJyb3I6IE5vdEZvdW5kRXJyb3JDdG9yID0gY3JlYXRlRXJyb3JDbGFzcyhcbiAgKF9zdXBlcikgPT5cbiAgICBmdW5jdGlvbiBOb3RGb3VuZEVycm9ySW1wbCh0aGlzOiBhbnksIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgdGhpcy5uYW1lID0gJ05vdEZvdW5kRXJyb3InO1xuICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG4pO1xuIiwgImltcG9ydCB7IGNyZWF0ZUVycm9yQ2xhc3MgfSBmcm9tICcuL2NyZWF0ZUVycm9yQ2xhc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcXVlbmNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcXVlbmNlRXJyb3JDdG9yIHtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbC4gRG8gbm90IGNvbnN0cnVjdCBlcnJvciBpbnN0YW5jZXMuXG4gICAqIENhbm5vdCBiZSB0YWdnZWQgYXMgaW50ZXJuYWw6IGh0dHBzOi8vZ2l0aHViLmNvbS9SZWFjdGl2ZVgvcnhqcy9pc3N1ZXMvNjI2OVxuICAgKi9cbiAgbmV3IChtZXNzYWdlOiBzdHJpbmcpOiBTZXF1ZW5jZUVycm9yO1xufVxuXG4vKipcbiAqIEFuIGVycm9yIHRocm93biB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHRoZSBzZXF1ZW5jZSBvZlxuICogdmFsdWVzIGFycml2aW5nIG9uIHRoZSBvYnNlcnZhYmxlLlxuICpcbiAqIEBzZWUge0BsaW5rIG9wZXJhdG9ycy9zaW5nbGV9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXF1ZW5jZUVycm9yOiBTZXF1ZW5jZUVycm9yQ3RvciA9IGNyZWF0ZUVycm9yQ2xhc3MoXG4gIChfc3VwZXIpID0+XG4gICAgZnVuY3Rpb24gU2VxdWVuY2VFcnJvckltcGwodGhpczogYW55LCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgIHRoaXMubmFtZSA9ICdTZXF1ZW5jZUVycm9yJztcbiAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuKTtcbiIsICIvKipcbiAqIENoZWNrcyB0byBzZWUgaWYgYSB2YWx1ZSBpcyBub3Qgb25seSBhIGBEYXRlYCBvYmplY3QsXG4gKiBidXQgYSAqdmFsaWQqIGBEYXRlYCBvYmplY3QgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIGFcbiAqIG51bWJlci4gRm9yIGV4YW1wbGUsIGBuZXcgRGF0ZSgnYmxhaCcpYCBpcyBpbmRlZWQgYW5cbiAqIGBpbnN0YW5jZW9mIERhdGVgLCBob3dldmVyIGl0IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYVxuICogbnVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIERhdGUge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSBhcyBhbnkpO1xufVxuIiwgImltcG9ydCB7IGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgU2NoZWR1bGVyTGlrZSwgT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZUlucHV0LCBPYnNlcnZlZFZhbHVlT2YgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc1ZhbGlkRGF0ZSB9IGZyb20gJy4uL3V0aWwvaXNEYXRlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IGNyZWF0ZUVycm9yQ2xhc3MgfSBmcm9tICcuLi91dGlsL2NyZWF0ZUVycm9yQ2xhc3MnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgZXhlY3V0ZVNjaGVkdWxlIH0gZnJvbSAnLi4vdXRpbC9leGVjdXRlU2NoZWR1bGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRDb25maWc8VCwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDx1bmtub3duPiA9IE9ic2VydmFibGVJbnB1dDxUPiwgTSA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIFRoZSB0aW1lIGFsbG93ZWQgYmV0d2VlbiB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIGJlZm9yZSB0aW1lb3V0IGlzIHRyaWdnZXJlZC5cbiAgICovXG4gIGVhY2g/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZWxhdGl2ZSB0aW1lIGFzIGEgYG51bWJlcmAgaW4gbWlsbGlzZWNvbmRzLCBvciBhIHNwZWNpZmljIHRpbWUgYXMgYSBgRGF0ZWAgb2JqZWN0LFxuICAgKiBieSB3aGljaCB0aGUgZmlyc3QgdmFsdWUgbXVzdCBhcnJpdmUgZnJvbSB0aGUgc291cmNlIGJlZm9yZSB0aW1lb3V0IGlzIHRyaWdnZXJlZC5cbiAgICovXG4gIGZpcnN0PzogbnVtYmVyIHwgRGF0ZTtcblxuICAvKipcbiAgICogVGhlIHNjaGVkdWxlciB0byB1c2Ugd2l0aCB0aW1lLXJlbGF0ZWQgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBvcGVyYXRvci4gRGVmYXVsdHMgdG8ge0BsaW5rIGFzeW5jU2NoZWR1bGVyfVxuICAgKi9cbiAgc2NoZWR1bGVyPzogU2NoZWR1bGVyTGlrZTtcblxuICAvKipcbiAgICogQSBmYWN0b3J5IHVzZWQgdG8gY3JlYXRlIG9ic2VydmFibGUgdG8gc3dpdGNoIHRvIHdoZW4gdGltZW91dCBvY2N1cnMuIFByb3ZpZGVzXG4gICAqIGEge0BsaW5rIFRpbWVvdXRJbmZvfSBhYm91dCB0aGUgc291cmNlIG9ic2VydmFibGUncyBlbWlzc2lvbnMgYW5kIHdoYXQgZGVsYXkgb3JcbiAgICogZXhhY3QgdGltZSB0cmlnZ2VyZWQgdGhlIHRpbWVvdXQuXG4gICAqL1xuICB3aXRoPzogKGluZm86IFRpbWVvdXRJbmZvPFQsIE0+KSA9PiBPO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhZGRpdGlvbmFsIG1ldGFkYXRhIHlvdSBjYW4gcHJvdmlkZSB0byBjb2RlIHRoYXQgaGFuZGxlc1xuICAgKiB0aGUgdGltZW91dCwgd2lsbCBiZSBwcm92aWRlZCB0aHJvdWdoIHRoZSB7QGxpbmsgVGltZW91dEVycm9yfS5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBoZWxwIGlkZW50aWZ5IHRoZSBzb3VyY2Ugb2YgYSB0aW1lb3V0IG9yIHBhc3MgYWxvbmdcbiAgICogb3RoZXIgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgdGltZW91dC5cbiAgICovXG4gIG1ldGE/OiBNO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRJbmZvPFQsIE0gPSB1bmtub3duPiB7XG4gIC8qKiBPcHRpb25hbCBtZXRhZGF0YSB0aGF0IHdhcyBwcm92aWRlZCB0byB0aGUgdGltZW91dCBjb25maWd1cmF0aW9uLiAqL1xuICByZWFkb25seSBtZXRhOiBNO1xuICAvKiogVGhlIG51bWJlciBvZiBtZXNzYWdlcyBzZWVuIGJlZm9yZSB0aGUgdGltZW91dCAqL1xuICByZWFkb25seSBzZWVuOiBudW1iZXI7XG4gIC8qKiBUaGUgbGFzdCBtZXNzYWdlIHNlZW4gKi9cbiAgcmVhZG9ubHkgbGFzdFZhbHVlOiBUIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBBbiBlcnJvciBlbWl0dGVkIHdoZW4gYSB0aW1lb3V0IG9jY3Vycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lb3V0RXJyb3I8VCA9IHVua25vd24sIE0gPSB1bmtub3duPiBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIFRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCB0byB0aGUgZXJyb3IgYnkgdGhlIHRpbWVvdXRcbiAgICogb3BlcmF0aW9uIHRoYXQgY3JlYXRlZCB0aGUgZXJyb3IuIFdpbGwgYmUgYG51bGxgIGlmXG4gICAqIHVzZWQgZGlyZWN0bHkgaW4gbm9uLVJ4SlMgY29kZSB3aXRoIGFuIGVtcHR5IGNvbnN0cnVjdG9yLlxuICAgKiAoTm90ZSB0aGF0IHVzaW5nIHRoaXMgY29uc3RydWN0b3IgZGlyZWN0bHkgaXMgbm90IHJlY29tbWVuZGVkLFxuICAgKiB5b3Ugc2hvdWxkIGNyZWF0ZSB5b3VyIG93biBlcnJvcnMpXG4gICAqL1xuICBpbmZvOiBUaW1lb3V0SW5mbzxULCBNPiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZW91dEVycm9yQ3RvciB7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIERvIG5vdCBjb25zdHJ1Y3QgZXJyb3IgaW5zdGFuY2VzLlxuICAgKiBDYW5ub3QgYmUgdGFnZ2VkIGFzIGludGVybmFsOiBodHRwczovL2dpdGh1Yi5jb20vUmVhY3RpdmVYL3J4anMvaXNzdWVzLzYyNjlcbiAgICovXG4gIG5ldyA8VCA9IHVua25vd24sIE0gPSB1bmtub3duPihpbmZvPzogVGltZW91dEluZm88VCwgTT4pOiBUaW1lb3V0RXJyb3I8VCwgTT47XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIGJ5IHRoZSB7QGxpbmsgdGltZW91dH0gb3BlcmF0b3IuXG4gKlxuICogUHJvdmlkZWQgc28gdXNlcnMgY2FuIHVzZSBhcyBhIHR5cGUgYW5kIGRvIHF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKiBXZSByZWNvbW1lbmQgeW91IGRvIG5vdCBzdWJjbGFzcyB0aGlzIG9yIGNyZWF0ZSBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBkaXJlY3RseS5cbiAqIElmIHlvdSBoYXZlIG5lZWQgb2YgYSBlcnJvciByZXByZXNlbnRpbmcgYSB0aW1lb3V0LCB5b3Ugc2hvdWxkXG4gKiBjcmVhdGUgeW91ciBvd24gZXJyb3IgY2xhc3MgYW5kIHVzZSB0aGF0LlxuICpcbiAqIEBzZWUge0BsaW5rIHRpbWVvdXR9XG4gKi9cbmV4cG9ydCBjb25zdCBUaW1lb3V0RXJyb3I6IFRpbWVvdXRFcnJvckN0b3IgPSBjcmVhdGVFcnJvckNsYXNzKFxuICAoX3N1cGVyKSA9PlxuICAgIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwodGhpczogYW55LCBpbmZvOiBUaW1lb3V0SW5mbzxhbnk+IHwgbnVsbCA9IG51bGwpIHtcbiAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfVxuKTtcblxuLyoqXG4gKiBJZiBgd2l0aGAgaXMgcHJvdmlkZWQsIHRoaXMgd2lsbCByZXR1cm4gYW4gb2JzZXJ2YWJsZSB0aGF0IHdpbGwgc3dpdGNoIHRvIGEgZGlmZmVyZW50IG9ic2VydmFibGUgaWYgdGhlIHNvdXJjZVxuICogZG9lcyBub3QgcHVzaCB2YWx1ZXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSBwYXJhbWV0ZXJzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5UaGUgbW9zdCBmbGV4aWJsZSBvcHRpb24gZm9yIGNyZWF0aW5nIGEgdGltZW91dCBiZWhhdmlvci48L3NwYW4+XG4gKlxuICogVGhlIGZpcnN0IHRoaW5nIHRvIGtub3cgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaWYgeW91IGRvIG5vdCBwcm92aWRlIGEgYHdpdGhgIHByb3BlcnR5IHRvIHRoZSBjb25maWd1cmF0aW9uLFxuICogd2hlbiB0aW1lb3V0IGNvbmRpdGlvbnMgYXJlIG1ldCwgdGhpcyBvcGVyYXRvciB3aWxsIGVtaXQgYSB7QGxpbmsgVGltZW91dEVycm9yfS4gT3RoZXJ3aXNlLCBpdCB3aWxsIHVzZSB0aGUgZmFjdG9yeVxuICogZnVuY3Rpb24gcHJvdmlkZWQgYnkgYHdpdGhgLCBhbmQgc3dpdGNoIHlvdXIgc3Vic2NyaXB0aW9uIHRvIHRoZSByZXN1bHQgb2YgdGhhdC4gVGltZW91dCBjb25kaXRpb25zIGFyZSBwcm92aWRlZCBieVxuICogdGhlIHNldHRpbmdzIGluIGBmaXJzdGAgYW5kIGBlYWNoYC5cbiAqXG4gKiBUaGUgYGZpcnN0YCBwcm9wZXJ0eSBjYW4gYmUgZWl0aGVyIGEgYERhdGVgIGZvciBhIHNwZWNpZmljIHRpbWUsIGEgYG51bWJlcmAgZm9yIGEgdGltZSBwZXJpb2QgcmVsYXRpdmUgdG8gdGhlXG4gKiBwb2ludCBvZiBzdWJzY3JpcHRpb24sIG9yIGl0IGNhbiBiZSBza2lwcGVkLiBUaGlzIHByb3BlcnR5IGlzIHRvIGNoZWNrIHRpbWVvdXQgY29uZGl0aW9ucyBmb3IgdGhlIGFycml2YWwgb2ZcbiAqIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgX29ubHlfLiBUaGUgdGltaW5ncyBvZiBhbGwgc3Vic2VxdWVudCB2YWx1ZXMgIGZyb20gdGhlIHNvdXJjZSB3aWxsIGJlIGNoZWNrZWRcbiAqIGFnYWluc3QgdGhlIHRpbWUgcGVyaW9kIHByb3ZpZGVkIGJ5IGBlYWNoYCwgaWYgaXQgd2FzIHByb3ZpZGVkLlxuICpcbiAqIFRoZSBgZWFjaGAgcHJvcGVydHkgY2FuIGJlIGVpdGhlciBhIGBudW1iZXJgIG9yIHNraXBwZWQuIElmIGEgdmFsdWUgZm9yIGBlYWNoYCBpcyBwcm92aWRlZCwgaXQgcmVwcmVzZW50cyB0aGUgYW1vdW50IG9mXG4gKiB0aW1lIHRoZSByZXN1bHRpbmcgb2JzZXJ2YWJsZSB3aWxsIHdhaXQgYmV0d2VlbiB0aGUgYXJyaXZhbCBvZiB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIGJlZm9yZSB0aW1pbmcgb3V0LiBOb3RlIHRoYXQgaWZcbiAqIGBmaXJzdGAgaXMgX25vdF8gcHJvdmlkZWQsIHRoZSB2YWx1ZSBmcm9tIGBlYWNoYCB3aWxsIGJlIHVzZWQgdG8gY2hlY2sgdGltZW91dCBjb25kaXRpb25zIGZvciB0aGUgYXJyaXZhbCBvZiB0aGUgZmlyc3RcbiAqIHZhbHVlIGFuZCBhbGwgc3Vic2VxdWVudCB2YWx1ZXMuIElmIGBmaXJzdGAgX2lzXyBwcm92aWRlZCwgYGVhY2hgIHdpbGwgb25seSBiZSB1c2UgdG8gY2hlY2sgYWxsIHZhbHVlcyBhZnRlciB0aGUgZmlyc3QuXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBFbWl0IGEgY3VzdG9tIGVycm9yIGlmIHRoZXJlIGlzIHRvbyBtdWNoIHRpbWUgYmV0d2VlbiB2YWx1ZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIHRpbWVvdXQsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjbGFzcyBDdXN0b21UaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gKiAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgIHN1cGVyKCdJdCB3YXMgdG9vIHNsb3cnKTtcbiAqICAgICB0aGlzLm5hbWUgPSAnQ3VzdG9tVGltZW91dEVycm9yJztcbiAqICAgfVxuICogfVxuICpcbiAqIGNvbnN0IHNsb3ckID0gaW50ZXJ2YWwoOTAwKTtcbiAqXG4gKiBzbG93JC5waXBlKFxuICogICB0aW1lb3V0KHtcbiAqICAgICBlYWNoOiAxMDAwLFxuICogICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEN1c3RvbVRpbWVvdXRFcnJvcigpKVxuICogICB9KVxuICogKVxuICogLnN1YnNjcmliZSh7XG4gKiAgIGVycm9yOiBjb25zb2xlLmVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIFN3aXRjaCB0byBhIGZhc3RlciBvYnNlcnZhYmxlIGlmIHlvdXIgc291cmNlIGlzIHNsb3cuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCB0aW1lb3V0IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgc2xvdyQgPSBpbnRlcnZhbCg5MDApO1xuICogY29uc3QgZmFzdCQgPSBpbnRlcnZhbCg1MDApO1xuICpcbiAqIHNsb3ckLnBpcGUoXG4gKiAgIHRpbWVvdXQoe1xuICogICAgIGVhY2g6IDEwMDAsXG4gKiAgICAgd2l0aDogKCkgPT4gZmFzdCQsXG4gKiAgIH0pXG4gKiApXG4gKiAuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcbiAqIGBgYFxuICogQHBhcmFtIGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lb3V0PFQsIE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8dW5rbm93bj4sIE0gPSB1bmtub3duPihcbiAgY29uZmlnOiBUaW1lb3V0Q29uZmlnPFQsIE8sIE0+ICYgeyB3aXRoOiAoaW5mbzogVGltZW91dEluZm88VCwgTT4pID0+IE8gfVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUIHwgT2JzZXJ2ZWRWYWx1ZU9mPE8+PjtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIGVycm9yIG9yIHN3aXRjaCB0byBhIGRpZmZlcmVudCBvYnNlcnZhYmxlIGlmIHRoZSBzb3VyY2UgZG9lcyBub3QgcHVzaCB2YWx1ZXNcbiAqIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgcGFyYW1ldGVycy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+VGhlIG1vc3QgZmxleGlibGUgb3B0aW9uIGZvciBjcmVhdGluZyBhIHRpbWVvdXQgYmVoYXZpb3IuPC9zcGFuPlxuICpcbiAqIFRoZSBmaXJzdCB0aGluZyB0byBrbm93IGFib3V0IHRoZSBjb25maWd1cmF0aW9uIGlzIGlmIHlvdSBkbyBub3QgcHJvdmlkZSBhIGB3aXRoYCBwcm9wZXJ0eSB0byB0aGUgY29uZmlndXJhdGlvbixcbiAqIHdoZW4gdGltZW91dCBjb25kaXRpb25zIGFyZSBtZXQsIHRoaXMgb3BlcmF0b3Igd2lsbCBlbWl0IGEge0BsaW5rIFRpbWVvdXRFcnJvcn0uIE90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGZhY3RvcnlcbiAqIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IGB3aXRoYCwgYW5kIHN3aXRjaCB5b3VyIHN1YnNjcmlwdGlvbiB0byB0aGUgcmVzdWx0IG9mIHRoYXQuIFRpbWVvdXQgY29uZGl0aW9ucyBhcmUgcHJvdmlkZWQgYnlcbiAqIHRoZSBzZXR0aW5ncyBpbiBgZmlyc3RgIGFuZCBgZWFjaGAuXG4gKlxuICogVGhlIGBmaXJzdGAgcHJvcGVydHkgY2FuIGJlIGVpdGhlciBhIGBEYXRlYCBmb3IgYSBzcGVjaWZpYyB0aW1lLCBhIGBudW1iZXJgIGZvciBhIHRpbWUgcGVyaW9kIHJlbGF0aXZlIHRvIHRoZVxuICogcG9pbnQgb2Ygc3Vic2NyaXB0aW9uLCBvciBpdCBjYW4gYmUgc2tpcHBlZC4gVGhpcyBwcm9wZXJ0eSBpcyB0byBjaGVjayB0aW1lb3V0IGNvbmRpdGlvbnMgZm9yIHRoZSBhcnJpdmFsIG9mXG4gKiB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgc291cmNlIF9vbmx5Xy4gVGhlIHRpbWluZ3Mgb2YgYWxsIHN1YnNlcXVlbnQgdmFsdWVzICBmcm9tIHRoZSBzb3VyY2Ugd2lsbCBiZSBjaGVja2VkXG4gKiBhZ2FpbnN0IHRoZSB0aW1lIHBlcmlvZCBwcm92aWRlZCBieSBgZWFjaGAsIGlmIGl0IHdhcyBwcm92aWRlZC5cbiAqXG4gKiBUaGUgYGVhY2hgIHByb3BlcnR5IGNhbiBiZSBlaXRoZXIgYSBgbnVtYmVyYCBvciBza2lwcGVkLiBJZiBhIHZhbHVlIGZvciBgZWFjaGAgaXMgcHJvdmlkZWQsIGl0IHJlcHJlc2VudHMgdGhlIGFtb3VudCBvZlxuICogdGltZSB0aGUgcmVzdWx0aW5nIG9ic2VydmFibGUgd2lsbCB3YWl0IGJldHdlZW4gdGhlIGFycml2YWwgb2YgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSBiZWZvcmUgdGltaW5nIG91dC4gTm90ZSB0aGF0IGlmXG4gKiBgZmlyc3RgIGlzIF9ub3RfIHByb3ZpZGVkLCB0aGUgdmFsdWUgZnJvbSBgZWFjaGAgd2lsbCBiZSB1c2VkIHRvIGNoZWNrIHRpbWVvdXQgY29uZGl0aW9ucyBmb3IgdGhlIGFycml2YWwgb2YgdGhlIGZpcnN0XG4gKiB2YWx1ZSBhbmQgYWxsIHN1YnNlcXVlbnQgdmFsdWVzLiBJZiBgZmlyc3RgIF9pc18gcHJvdmlkZWQsIGBlYWNoYCB3aWxsIG9ubHkgYmUgdXNlIHRvIGNoZWNrIGFsbCB2YWx1ZXMgYWZ0ZXIgdGhlIGZpcnN0LlxuICpcbiAqICMjIyBIYW5kbGluZyBUaW1lb3V0RXJyb3JzXG4gKlxuICogSWYgbm8gYHdpdGhgIHByb3BlcnR5IHdhcyBwcm92aWRlZCwgc3Vic2NyaXB0aW9ucyB0byB0aGUgcmVzdWx0aW5nIG9ic2VydmFibGUgbWF5IGVtaXQgYW4gZXJyb3Igb2Yge0BsaW5rIFRpbWVvdXRFcnJvcn0uXG4gKiBUaGUgdGltZW91dCBlcnJvciBwcm92aWRlcyB1c2VmdWwgaW5mb3JtYXRpb24geW91IGNhbiBleGFtaW5lIHdoZW4geW91J3JlIGhhbmRsaW5nIHRoZSBlcnJvci4gVGhlIG1vc3QgY29tbW9uIHdheSB0byBoYW5kbGVcbiAqIHRoZSBlcnJvciB3b3VsZCBiZSB3aXRoIHtAbGluayBjYXRjaEVycm9yfSwgYWx0aG91Z2ggeW91IGNvdWxkIHVzZSB7QGxpbmsgdGFwfSBvciBqdXN0IHRoZSBlcnJvciBoYW5kbGVyIGluIHlvdXIgYHN1YnNjcmliZWAgY2FsbFxuICogZGlyZWN0bHksIGlmIHlvdXIgZXJyb3IgaGFuZGxpbmcgaXMgb25seSBhIHNpZGUgZWZmZWN0IChzdWNoIGFzIG5vdGlmeWluZyB0aGUgdXNlciwgb3IgbG9nZ2luZykuXG4gKlxuICogSW4gdGhpcyBjYXNlLCB5b3Ugd291bGQgY2hlY2sgdGhlIGVycm9yIGZvciBgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3JgIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGVycm9yIHdhcyBpbmRlZWQgZnJvbSBgdGltZW91dGAsIGFuZFxuICogbm90IGZyb20gc29tZSBvdGhlciBzb3VyY2UuIElmIGl0J3Mgbm90IGZyb20gYHRpbWVvdXRgLCB5b3Ugc2hvdWxkIHByb2JhYmx5IHJldGhyb3cgaXQgaWYgeW91J3JlIGluIGEgYGNhdGNoRXJyb3JgLlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogRW1pdCBhIHtAbGluayBUaW1lb3V0RXJyb3J9IGlmIHRoZSBmaXJzdCB2YWx1ZSwgYW5kIF9vbmx5XyB0aGUgZmlyc3QgdmFsdWUsIGRvZXMgbm90IGFycml2ZSB3aXRoaW4gNSBzZWNvbmRzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCB0aW1lb3V0IH0gZnJvbSAncnhqcyc7XG4gKlxuICogLy8gQSByYW5kb20gaW50ZXJ2YWwgdGhhdCBsYXN0cyBiZXR3ZWVuIDAgYW5kIDEwIHNlY29uZHMgcGVyIHRpY2tcbiAqIGNvbnN0IHNvdXJjZSQgPSBpbnRlcnZhbChNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMF8wMDApKTtcbiAqXG4gKiBzb3VyY2UkLnBpcGUoXG4gKiAgIHRpbWVvdXQoeyBmaXJzdDogNV8wMDAgfSlcbiAqIClcbiAqIC5zdWJzY3JpYmUoe1xuICogICBuZXh0OiBjb25zb2xlLmxvZyxcbiAqICAgZXJyb3I6IGNvbnNvbGUuZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogRW1pdCBhIHtAbGluayBUaW1lb3V0RXJyb3J9IGlmIHRoZSBzb3VyY2Ugd2FpdHMgbG9uZ2VyIHRoYW4gNSBzZWNvbmRzIGJldHdlZW4gYW55IHR3byB2YWx1ZXMgb3IgdGhlIGZpcnN0IHZhbHVlXG4gKiBhbmQgc3Vic2NyaXB0aW9uLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB0aW1lciwgdGltZW91dCwgZXhwYW5kIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgZ2V0UmFuZG9tVGltZSA9ICgpID0+IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwXzAwMCk7XG4gKlxuICogLy8gQW4gb2JzZXJ2YWJsZSB0aGF0IHdhaXRzIGEgcmFuZG9tIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gZWFjaCBkZWxpdmVyZWQgdmFsdWVcbiAqIGNvbnN0IHNvdXJjZSQgPSB0aW1lcihnZXRSYW5kb21UaW1lKCkpXG4gKiAgIC5waXBlKGV4cGFuZCgoKSA9PiB0aW1lcihnZXRSYW5kb21UaW1lKCkpKSk7XG4gKlxuICogc291cmNlJFxuICogICAucGlwZSh0aW1lb3V0KHsgZWFjaDogNV8wMDAgfSkpXG4gKiAgIC5zdWJzY3JpYmUoe1xuICogICAgIG5leHQ6IGNvbnNvbGUubG9nLFxuICogICAgIGVycm9yOiBjb25zb2xlLmVycm9yXG4gKiAgIH0pO1xuICogYGBgXG4gKlxuICogRW1pdCBhIHtAbGluayBUaW1lb3V0RXJyb3J9IGlmIHRoZSBzb3VyY2UgZG9lcyBub3QgZW1pdCBiZWZvcmUgNyBzZWNvbmRzLCBfb3JfIGlmIHRoZSBzb3VyY2Ugd2FpdHMgbG9uZ2VyIHRoYW5cbiAqIDUgc2Vjb25kcyBiZXR3ZWVuIGFueSB0d28gdmFsdWVzIGFmdGVyIHRoZSBmaXJzdC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdGltZXIsIHRpbWVvdXQsIGV4cGFuZCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGdldFJhbmRvbVRpbWUgPSAoKSA9PiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMF8wMDApO1xuICpcbiAqIC8vIEFuIG9ic2VydmFibGUgdGhhdCB3YWl0cyBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIGVhY2ggZGVsaXZlcmVkIHZhbHVlXG4gKiBjb25zdCBzb3VyY2UkID0gdGltZXIoZ2V0UmFuZG9tVGltZSgpKVxuICogICAucGlwZShleHBhbmQoKCkgPT4gdGltZXIoZ2V0UmFuZG9tVGltZSgpKSkpO1xuICpcbiAqIHNvdXJjZSRcbiAqICAgLnBpcGUodGltZW91dCh7IGZpcnN0OiA3XzAwMCwgZWFjaDogNV8wMDAgfSkpXG4gKiAgIC5zdWJzY3JpYmUoe1xuICogICAgIG5leHQ6IGNvbnNvbGUubG9nLFxuICogICAgIGVycm9yOiBjb25zb2xlLmVycm9yXG4gKiAgIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lb3V0PFQsIE0gPSB1bmtub3duPihjb25maWc6IE9taXQ8VGltZW91dENvbmZpZzxULCBhbnksIE0+LCAnd2l0aCc+KTogT3BlcmF0b3JGdW5jdGlvbjxULCBUPjtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIGVycm9yIGlmIHRoZSBzb3VyY2UgZG9lcyBub3QgcHVzaCBpdHMgZmlyc3QgdmFsdWUgYmVmb3JlIHRoZSBzcGVjaWZpZWQgdGltZSBwYXNzZWQgYXMgYSBgRGF0ZWAuXG4gKiBUaGlzIGlzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyBgdGltZW91dCh7IGZpcnN0OiBzb21lRGF0ZSB9KWAuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkVycm9ycyBpZiB0aGUgZmlyc3QgdmFsdWUgZG9lc24ndCBzaG93IHVwIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZSBhbmQgdGltZTwvc3Bhbj5cbiAqXG4gKiAhW10odGltZW91dC5wbmcpXG4gKlxuICogQHBhcmFtIGZpcnN0IFRoZSBkYXRlIHRvIGF0IHdoaWNoIHRoZSByZXN1bHRpbmcgb2JzZXJ2YWJsZSB3aWxsIHRpbWVvdXQgaWYgdGhlIHNvdXJjZSBvYnNlcnZhYmxlXG4gKiBkb2VzIG5vdCBlbWl0IGF0IGxlYXN0IG9uZSB2YWx1ZS5cbiAqIEBwYXJhbSBzY2hlZHVsZXIgVGhlIHNjaGVkdWxlciB0byB1c2UuIERlZmF1bHRzIHRvIHtAbGluayBhc3luY1NjaGVkdWxlcn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lb3V0PFQ+KGZpcnN0OiBEYXRlLCBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSB0aGF0IHdpbGwgZXJyb3IgaWYgdGhlIHNvdXJjZSBkb2VzIG5vdCBwdXNoIGEgdmFsdWUgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gKiBUaGlzIGlzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyBgdGltZW91dCh7IGVhY2g6IG1pbGxpc2Vjb25kcyB9KWAuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkVycm9ycyBpZiBpdCB3YWl0cyB0b28gbG9uZyBiZXR3ZWVuIGFueSB2YWx1ZTwvc3Bhbj5cbiAqXG4gKiAhW10odGltZW91dC5wbmcpXG4gKlxuICogQHBhcmFtIGVhY2ggVGhlIHRpbWUgYWxsb3dlZCBiZXR3ZWVuIGVhY2ggcHVzaGVkIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBiZWZvcmUgdGhlIHJlc3VsdGluZyBvYnNlcnZhYmxlXG4gKiB3aWxsIHRpbWVvdXQuXG4gKiBAcGFyYW0gc2NoZWR1bGVyIFRoZSBzY2hlZHVsZXIgdG8gdXNlLiBEZWZhdWx0cyB0byB7QGxpbmsgYXN5bmNTY2hlZHVsZXJ9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZW91dDxUPihlYWNoOiBudW1iZXIsIHNjaGVkdWxlcj86IFNjaGVkdWxlckxpa2UpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD47XG5cbi8qKlxuICpcbiAqIEVycm9ycyBpZiBPYnNlcnZhYmxlIGRvZXMgbm90IGVtaXQgYSB2YWx1ZSBpbiBnaXZlbiB0aW1lIHNwYW4uXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlRpbWVvdXRzIG9uIE9ic2VydmFibGUgdGhhdCBkb2Vzbid0IGVtaXQgdmFsdWVzIGZhc3QgZW5vdWdoLjwvc3Bhbj5cbiAqXG4gKiAhW10odGltZW91dC5wbmcpXG4gKlxuICogQHNlZSB7QGxpbmsgdGltZW91dFdpdGh9XG4gKlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgbWlycm9ycyBiZWhhdmlvdXIgb2YgdGhlXG4gKiBzb3VyY2UgT2JzZXJ2YWJsZSwgdW5sZXNzIHRpbWVvdXQgaGFwcGVucyB3aGVuIGl0IHRocm93cyBhbiBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXQ8VCwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+LCBNPihcbiAgY29uZmlnOiBudW1iZXIgfCBEYXRlIHwgVGltZW91dENvbmZpZzxULCBPLCBNPixcbiAgc2NoZWR1bGVyQXJnPzogU2NoZWR1bGVyTGlrZVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUIHwgT2JzZXJ2ZWRWYWx1ZU9mPE8+PiB7XG4gIC8vIEludGVudGlvbmFsbHkgdGVyc2UgY29kZS5cbiAgLy8gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgdmFsaWQgYERhdGVgLCB0aGVuIHdlIHVzZSBpdCBhcyB0aGUgYGZpcnN0YCBjb25maWcuXG4gIC8vIE90aGVyd2lzZSwgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgYG51bWJlcmAsIHRoZW4gd2UgdXNlIGl0IGFzIHRoZSBgZWFjaGAgY29uZmlnLlxuICAvLyBPdGhlcndpc2UsIGl0IGNhbiBiZSBhc3N1bWVkIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgaXRzZWxmLCBhbmRcbiAgLy8gd2UgZGVzdHJ1Y3R1cmUgdGhhdCBpbnRvIHdoYXQgd2UncmUgZ29pbmcgdG8gdXNlLCBzZXR0aW5nIGltcG9ydGFudCBkZWZhdWx0cyBhcyB3ZSBkby5cbiAgLy8gTk9URTogVGhlIGRlZmF1bHQgZm9yIGBzY2hlZHVsZXJgIHdpbGwgYmUgdGhlIGBzY2hlZHVsZXJgIGFyZ3VtZW50IGlmIGl0IGV4aXN0cywgb3JcbiAgLy8gaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBgYXN5bmNTY2hlZHVsZXJgLlxuICBjb25zdCB7XG4gICAgZmlyc3QsXG4gICAgZWFjaCxcbiAgICB3aXRoOiBfd2l0aCA9IHRpbWVvdXRFcnJvckZhY3RvcnksXG4gICAgc2NoZWR1bGVyID0gc2NoZWR1bGVyQXJnID8/IGFzeW5jU2NoZWR1bGVyLFxuICAgIG1ldGEgPSBudWxsISxcbiAgfSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpIGFzIFRpbWVvdXRDb25maWc8VCwgTywgTT47XG5cbiAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgLy8gRW5zdXJlIHRpbWVvdXQgd2FzIHByb3ZpZGVkIGF0IHJ1bnRpbWUuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgfVxuXG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICAvLyBUaGlzIHN1YnNjcmlwdGlvbiBlbmNhcHN1bGF0ZXMgb3VyIHN1YnNjcmlwdGlvbiB0byB0aGVcbiAgICAvLyBzb3VyY2UgZm9yIHRoaXMgb3BlcmF0b3IuIFdlJ3JlIGNhcHR1cmluZyBpdCBzZXBhcmF0ZWx5LFxuICAgIC8vIGJlY2F1c2UgaWYgdGhlcmUgaXMgYSBgd2l0aGAgb2JzZXJ2YWJsZSB0byBmYWlsIG92ZXIgdG8sXG4gICAgLy8gd2Ugd2FudCB0byB1bnN1YnNjcmliZSBmcm9tIG91ciBvcmlnaW5hbCBzdWJzY3JpcHRpb24sIGFuZFxuICAgIC8vIGhhbmQgb2YgdGhlIHN1YnNjcmlwdGlvbiB0byB0aGF0IG9uZS5cbiAgICBsZXQgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICAvLyBUaGUgc3Vic2NyaXB0aW9uIGZvciBvdXIgdGltZW91dCB0aW1lci4gVGhpcyBjaGFuZ2VzXG4gICAgLy8gZXZlcnkgdGltZSB3ZSBnZXQgYSBuZXcgdmFsdWUuXG4gICAgbGV0IHRpbWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgLy8gQSBiaXQgb2Ygc3RhdGUgd2UgcGFzcyB0byBvdXIgd2l0aCBhbmQgZXJyb3IgZmFjdG9yaWVzIHRvXG4gICAgLy8gdGVsbCB3aGF0IHRoZSBsYXN0IHZhbHVlIHdlIHNhdyB3YXMuXG4gICAgbGV0IGxhc3RWYWx1ZTogVCB8IG51bGwgPSBudWxsO1xuICAgIC8vIEEgYml0IG9mIHN0YXRlIHdlIHBhc3MgdG8gdGhlIHdpdGggYW5kIGVycm9yIGZhY3RvcmllcyB0b1xuICAgIC8vIHRlbGwgaG93IG1hbnkgdmFsdWVzIHdlIGhhdmUgc2VlbiBzbyBmYXIuXG4gICAgbGV0IHNlZW4gPSAwO1xuICAgIGNvbnN0IHN0YXJ0VGltZXIgPSAoZGVsYXk6IG51bWJlcikgPT4ge1xuICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoXG4gICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgIHNjaGVkdWxlcixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaW5uZXJGcm9tKFxuICAgICAgICAgICAgICBfd2l0aCEoe1xuICAgICAgICAgICAgICAgIG1ldGEsXG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlLFxuICAgICAgICAgICAgICAgIHNlZW4sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlbGF5XG4gICAgICApO1xuICAgIH07XG5cbiAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICh2YWx1ZTogVCkgPT4ge1xuICAgICAgICAgIC8vIGNsZWFyIHRoZSB0aW1lciBzbyB3ZSBjYW4gZW1pdCBhbmQgc3RhcnQgYW5vdGhlciBvbmUuXG4gICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgc2VlbisrO1xuICAgICAgICAgIC8vIEVtaXRcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKGxhc3RWYWx1ZSA9IHZhbHVlKSk7XG4gICAgICAgICAgLy8gbnVsbCB8IHVuZGVmaW5lZCBhcmUgYm90aCA8IDAuIFRoYW5rcywgSmF2YVNjcmlwdC5cbiAgICAgICAgICBlYWNoISA+IDAgJiYgc3RhcnRUaW1lcihlYWNoISk7XG4gICAgICAgIH0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aW1lclN1YnNjcmlwdGlvbj8uY2xvc2VkKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQmUgc3VyZSBub3QgdG8gaG9sZCB0aGUgbGFzdCB2YWx1ZSBpbiBtZW1vcnkgYWZ0ZXIgdW5zdWJzY3JpcHRpb25cbiAgICAgICAgICAvLyBpdCBjb3VsZCBiZSBxdWl0ZSBsYXJnZS5cbiAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIEludGVudGlvbmFsbHkgdGVyc2UgY29kZS5cbiAgICAvLyBJZiB3ZSd2ZSBgc2VlbmAgYSB2YWx1ZSwgdGhhdCBtZWFucyB0aGUgXCJmaXJzdFwiIGNsYXVzZSB3YXMgbWV0IGFscmVhZHksIGlmIGl0IGV4aXN0ZWQuXG4gICAgLy8gICBpdCBhbHNvIG1lYW5zIHRoYXQgYSB0aW1lciB3YXMgYWxyZWFkeSBzdGFydGVkIGZvciBcImVhY2hcIiAoaW4gdGhlIG5leHQgaGFuZGxlciBhYm92ZSkuXG4gICAgLy8gSWYgYGZpcnN0YCB3YXMgcHJvdmlkZWQsIGFuZCBpdCdzIGEgbnVtYmVyLCB0aGVuIHVzZSBpdC5cbiAgICAvLyBJZiBgZmlyc3RgIHdhcyBwcm92aWRlZCBhbmQgaXQncyBub3QgYSBudW1iZXIsIGl0J3MgYSBEYXRlLCBhbmQgd2UgZ2V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaXQgYW5kIFwibm93XCIuXG4gICAgLy8gSWYgYGZpcnN0YCB3YXMgbm90IHByb3ZpZGVkIGF0IGFsbCwgdGhlbiBvdXIgZmlyc3QgdGltZXIgd2lsbCBiZSB0aGUgdmFsdWUgZnJvbSBgZWFjaGAuXG4gICAgIXNlZW4gJiYgc3RhcnRUaW1lcihmaXJzdCAhPSBudWxsID8gKHR5cGVvZiBmaXJzdCA9PT0gJ251bWJlcicgPyBmaXJzdCA6ICtmaXJzdCAtIHNjaGVkdWxlciEubm93KCkpIDogZWFjaCEpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byB1c2UgdG8gZW1pdCBhbiBlcnJvciB3aGVuIHRpbWVvdXQgb2NjdXJzIGFuZCBhIGB3aXRoYCBmdW5jdGlvblxuICogaXMgbm90IHNwZWNpZmllZC5cbiAqIEBwYXJhbSBpbmZvIFRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGltZW91dCB0byBwYXNzIGFsb25nIHRvIHRoZSBlcnJvclxuICovXG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm86IFRpbWVvdXRJbmZvPGFueT4pOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gIHRocm93IG5ldyBUaW1lb3V0RXJyb3IoaW5mbyk7XG59XG4iLCAiaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gbWFwPFQsIFI+KHByb2plY3Q6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gUik6IE9wZXJhdG9yRnVuY3Rpb248VCwgUj47XG4vKiogQGRlcHJlY2F0ZWQgVXNlIGEgY2xvc3VyZSBpbnN0ZWFkIG9mIGEgYHRoaXNBcmdgLiBTaWduYXR1cmVzIGFjY2VwdGluZyBhIGB0aGlzQXJnYCB3aWxsIGJlIHJlbW92ZWQgaW4gdjguICovXG5leHBvcnQgZnVuY3Rpb24gbWFwPFQsIFIsIEE+KHByb2plY3Q6ICh0aGlzOiBBLCB2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gUiwgdGhpc0FyZzogQSk6IE9wZXJhdG9yRnVuY3Rpb248VCwgUj47XG5cbi8qKlxuICogQXBwbGllcyBhIGdpdmVuIGBwcm9qZWN0YCBmdW5jdGlvbiB0byBlYWNoIHZhbHVlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSwgYW5kIGVtaXRzIHRoZSByZXN1bHRpbmcgdmFsdWVzIGFzIGFuIE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkxpa2UgW0FycmF5LnByb3RvdHlwZS5tYXAoKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvbWFwKSxcbiAqIGl0IHBhc3NlcyBlYWNoIHNvdXJjZSB2YWx1ZSB0aHJvdWdoIGEgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gdG8gZ2V0XG4gKiBjb3JyZXNwb25kaW5nIG91dHB1dCB2YWx1ZXMuPC9zcGFuPlxuICpcbiAqICFbXShtYXAucG5nKVxuICpcbiAqIFNpbWlsYXIgdG8gdGhlIHdlbGwga25vd24gYEFycmF5LnByb3RvdHlwZS5tYXBgIGZ1bmN0aW9uLCB0aGlzIG9wZXJhdG9yXG4gKiBhcHBsaWVzIGEgcHJvamVjdGlvbiB0byBlYWNoIHZhbHVlIGFuZCBlbWl0cyB0aGF0IHByb2plY3Rpb24gaW4gdGhlIG91dHB1dFxuICogT2JzZXJ2YWJsZS5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogTWFwIGV2ZXJ5IGNsaWNrIHRvIHRoZSBgY2xpZW50WGAgcG9zaXRpb24gb2YgdGhhdCBjbGlja1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIG1hcCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudDxQb2ludGVyRXZlbnQ+KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHBvc2l0aW9ucyA9IGNsaWNrcy5waXBlKG1hcChldiA9PiBldi5jbGllbnRYKSk7XG4gKlxuICogcG9zaXRpb25zLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIG1hcFRvfVxuICogQHNlZSB7QGxpbmsgcGx1Y2t9XG4gKlxuICogQHBhcmFtIHByb2plY3QgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggYHZhbHVlYCBlbWl0dGVkIGJ5IHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuIFRoZSBgaW5kZXhgIHBhcmFtZXRlciBpcyB0aGUgbnVtYmVyIGBpYCBmb3IgdGhlIGktdGggZW1pc3Npb25cbiAqIHRoYXQgaGFzIGhhcHBlbmVkIHNpbmNlIHRoZSBzdWJzY3JpcHRpb24sIHN0YXJ0aW5nIGZyb20gdGhlIG51bWJlciBgMGAuXG4gKiBAcGFyYW0gdGhpc0FyZyBBbiBvcHRpb25hbCBhcmd1bWVudCB0byBkZWZpbmUgd2hhdCBgdGhpc2AgaXMgaW4gdGhlXG4gKiBgcHJvamVjdGAgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdmFsdWVzIGZyb20gdGhlXG4gKiBzb3VyY2UgT2JzZXJ2YWJsZSB0cmFuc2Zvcm1lZCBieSB0aGUgZ2l2ZW4gYHByb2plY3RgIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwPFQsIFI+KHByb2plY3Q6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gUiwgdGhpc0FyZz86IGFueSk6IE9wZXJhdG9yRnVuY3Rpb248VCwgUj4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgLy8gVGhlIGluZGV4IG9mIHRoZSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UuIFVzZWQgd2l0aCBwcm9qZWN0aW9uLlxuICAgIGxldCBpbmRleCA9IDA7XG4gICAgLy8gU3Vic2NyaWJlIHRvIHRoZSBzb3VyY2UsIGFsbCBlcnJvcnMgYW5kIGNvbXBsZXRpb25zIGFyZSBzZW50IGFsb25nXG4gICAgLy8gdG8gdGhlIGNvbnN1bWVyLlxuICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgKHZhbHVlOiBUKSA9PiB7XG4gICAgICAgIC8vIENhbGwgdGhlIHByb2plY3Rpb24gZnVuY3Rpb24gd2l0aCB0aGUgYXBwcm9wcmlhdGUgdGhpcyBjb250ZXh0LFxuICAgICAgICAvLyBhbmQgc2VuZCB0aGUgcmVzdWx0aW5nIHZhbHVlIHRvIHRoZSBjb25zdW1lci5cbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHByb2plY3QuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgrKykpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBtYXAgfSBmcm9tIFwiLi4vb3BlcmF0b3JzL21hcFwiO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5mdW5jdGlvbiBjYWxsT3JBcHBseTxULCBSPihmbjogKCguLi52YWx1ZXM6IFRbXSkgPT4gUiksIGFyZ3M6IFR8VFtdKTogUiB7XG4gICAgcmV0dXJuIGlzQXJyYXkoYXJncykgPyBmbiguLi5hcmdzKSA6IGZuKGFyZ3MpO1xufVxuXG4vKipcbiAqIFVzZWQgaW4gc2V2ZXJhbCAtLSBtb3N0bHkgZGVwcmVjYXRlZCAtLSBzaXR1YXRpb25zIHdoZXJlIHdlIG5lZWQgdG8gXG4gKiBhcHBseSBhIGxpc3Qgb2YgYXJndW1lbnRzIG9yIGEgc2luZ2xlIGFyZ3VtZW50IHRvIGEgcmVzdWx0IHNlbGVjdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwT25lT3JNYW55QXJnczxULCBSPihmbjogKCguLi52YWx1ZXM6IFRbXSkgPT4gUikpOiBPcGVyYXRvckZ1bmN0aW9uPFR8VFtdLCBSPiB7XG4gICAgcmV0dXJuIG1hcChhcmdzID0+IGNhbGxPckFwcGx5KGZuLCBhcmdzKSlcbn0iLCAiLyogQHByZXR0aWVyICovXG5pbXBvcnQgeyBTY2hlZHVsZXJMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgYmluZENhbGxiYWNrSW50ZXJuYWxzIH0gZnJvbSAnLi9iaW5kQ2FsbGJhY2tJbnRlcm5hbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gYmluZENhbGxiYWNrKFxuICBjYWxsYmFja0Z1bmM6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgcmVzdWx0U2VsZWN0b3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LFxuICBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlXG4pOiAoLi4uYXJnczogYW55W10pID0+IE9ic2VydmFibGU8YW55PjtcblxuLy8gYXJncyBpcyB0aGUgYXJndW1lbnRzIGFycmF5IGFuZCB3ZSBwdXNoIHRoZSBjYWxsYmFjayBvbiB0aGUgcmVzdCB0dXBsZSBzaW5jZSB0aGUgcmVzdCBwYXJhbWV0ZXIgbXVzdCBiZSBsYXN0IChvbmx5IGl0ZW0pIGluIGEgcGFyYW1ldGVyIGxpc3RcbmV4cG9ydCBmdW5jdGlvbiBiaW5kQ2FsbGJhY2s8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSwgUiBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oXG4gIGNhbGxiYWNrRnVuYzogKC4uLmFyZ3M6IFsuLi5BLCAoLi4ucmVzOiBSKSA9PiB2b2lkXSkgPT4gdm9pZCxcbiAgc2NoZWR1bGVyTGlrZT86IFNjaGVkdWxlckxpa2Vcbik6ICguLi5hcmc6IEEpID0+IE9ic2VydmFibGU8UiBleHRlbmRzIFtdID8gdm9pZCA6IFIgZXh0ZW5kcyBbYW55XSA/IFJbMF0gOiBSPjtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNhbGxiYWNrIEFQSSB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5HaXZlIGl0IGEgZnVuY3Rpb24gYGZgIG9mIHR5cGUgYGYoeCwgY2FsbGJhY2spYCBhbmRcbiAqIGl0IHdpbGwgcmV0dXJuIGEgZnVuY3Rpb24gYGdgIHRoYXQgd2hlbiBjYWxsZWQgYXMgYGcoeClgIHdpbGwgb3V0cHV0IGFuXG4gKiBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiBgYmluZENhbGxiYWNrYCBpcyBub3QgYW4gb3BlcmF0b3IgYmVjYXVzZSBpdHMgaW5wdXQgYW5kIG91dHB1dCBhcmUgbm90XG4gKiBPYnNlcnZhYmxlcy4gVGhlIGlucHV0IGlzIGEgZnVuY3Rpb24gYGZ1bmNgIHdpdGggc29tZSBwYXJhbWV0ZXJzLiBUaGVcbiAqIGxhc3QgcGFyYW1ldGVyIG11c3QgYmUgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGBmdW5jYCBjYWxscyB3aGVuIGl0IGlzXG4gKiBkb25lLlxuICpcbiAqIFRoZSBvdXRwdXQgb2YgYGJpbmRDYWxsYmFja2AgaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBzYW1lIHBhcmFtZXRlcnNcbiAqIGFzIGBmdW5jYCwgZXhjZXB0IHRoZSBsYXN0IG9uZSAodGhlIGNhbGxiYWNrKS4gV2hlbiB0aGUgb3V0cHV0IGZ1bmN0aW9uXG4gKiBpcyBjYWxsZWQgd2l0aCBhcmd1bWVudHMgaXQgd2lsbCByZXR1cm4gYW4gT2JzZXJ2YWJsZS4gSWYgZnVuY3Rpb24gYGZ1bmNgXG4gKiBjYWxscyBpdHMgY2FsbGJhY2sgd2l0aCBvbmUgYXJndW1lbnQsIHRoZSBPYnNlcnZhYmxlIHdpbGwgZW1pdCB0aGF0IHZhbHVlLlxuICogSWYgb24gdGhlIG90aGVyIGhhbmQgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIG11bHRpcGxlIHZhbHVlcyB0aGUgcmVzdWx0aW5nXG4gKiBPYnNlcnZhYmxlIHdpbGwgZW1pdCBhbiBhcnJheSB3aXRoIHNhaWQgdmFsdWVzIGFzIGFyZ3VtZW50cy5cbiAqXG4gKiBJdCBpcyAqKnZlcnkgaW1wb3J0YW50KiogdG8gcmVtZW1iZXIgdGhhdCBpbnB1dCBmdW5jdGlvbiBgZnVuY2AgaXMgbm90IGNhbGxlZFxuICogd2hlbiB0aGUgb3V0cHV0IGZ1bmN0aW9uIGlzLCBidXQgcmF0aGVyIHdoZW4gdGhlIE9ic2VydmFibGUgcmV0dXJuZWQgYnkgdGhlIG91dHB1dFxuICogZnVuY3Rpb24gaXMgc3Vic2NyaWJlZC4gVGhpcyBtZWFucyBpZiBgZnVuY2AgbWFrZXMgYW4gQUpBWCByZXF1ZXN0LCB0aGF0IHJlcXVlc3RcbiAqIHdpbGwgYmUgbWFkZSBldmVyeSB0aW1lIHNvbWVvbmUgc3Vic2NyaWJlcyB0byB0aGUgcmVzdWx0aW5nIE9ic2VydmFibGUsIGJ1dCBub3QgYmVmb3JlLlxuICpcbiAqIFRoZSBsYXN0IG9wdGlvbmFsIHBhcmFtZXRlciAtIGBzY2hlZHVsZXJgIC0gY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGVuIHRoZSBjYWxsXG4gKiB0byBgZnVuY2AgaGFwcGVucyBhZnRlciBzb21lb25lIHN1YnNjcmliZXMgdG8gT2JzZXJ2YWJsZSwgYXMgd2VsbCBhcyB3aGVuIHJlc3VsdHNcbiAqIHBhc3NlZCB0byBjYWxsYmFjayB3aWxsIGJlIGVtaXR0ZWQuIEJ5IGRlZmF1bHQsIHRoZSBzdWJzY3JpcHRpb24gdG8gYW4gT2JzZXJ2YWJsZSBjYWxscyBgZnVuY2BcbiAqIHN5bmNocm9ub3VzbHksIGJ1dCB1c2luZyB7QGxpbmsgYXN5bmNTY2hlZHVsZXJ9IGFzIHRoZSBsYXN0IHBhcmFtZXRlciB3aWxsIGRlZmVyIHRoZSBjYWxsIHRvIGBmdW5jYCxcbiAqIGp1c3QgbGlrZSB3cmFwcGluZyB0aGUgY2FsbCBpbiBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgIHdvdWxkLiBJZiB5b3Ugd2VyZSB0byB1c2UgdGhlIGFzeW5jIFNjaGVkdWxlclxuICogYW5kIGNhbGwgYHN1YnNjcmliZWAgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLCBhbGwgZnVuY3Rpb24gY2FsbHMgdGhhdCBhcmUgY3VycmVudGx5IGV4ZWN1dGluZ1xuICogd2lsbCBlbmQgYmVmb3JlIGBmdW5jYCBpcyBpbnZva2VkLlxuICpcbiAqIEJ5IGRlZmF1bHQsIHJlc3VsdHMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBhcmUgZW1pdHRlZCBpbW1lZGlhdGVseSBhZnRlciBgZnVuY2AgaW52b2tlcyB0aGUgY2FsbGJhY2suXG4gKiBJbiBwYXJ0aWN1bGFyLCBpZiB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIHN5bmNocm9ub3VzbHksIHRoZW4gdGhlIHN1YnNjcmlwdGlvbiBvZiB0aGUgcmVzdWx0aW5nIE9ic2VydmFibGVcbiAqIHdpbGwgY2FsbCB0aGUgYG5leHRgIGZ1bmN0aW9uIHN5bmNocm9ub3VzbHkgYXMgd2VsbC4gIElmIHlvdSB3YW50IHRvIGRlZmVyIHRoYXQgY2FsbCxcbiAqIHlvdSBtYXkgdXNlIHtAbGluayBhc3luY1NjaGVkdWxlcn0ganVzdCBhcyBiZWZvcmUuICBUaGlzIG1lYW5zIHRoYXQgYnkgdXNpbmcgYFNjaGVkdWxlci5hc3luY2AgeW91IGNhblxuICogZW5zdXJlIHRoYXQgYGZ1bmNgIGFsd2F5cyBjYWxscyBpdHMgY2FsbGJhY2sgYXN5bmNocm9ub3VzbHksIHRodXMgYXZvaWRpbmcgdGVycmlmeWluZyBaYWxnby5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlIE9ic2VydmFibGUgY3JlYXRlZCBieSB0aGUgb3V0cHV0IGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGVtaXQgYSBzaW5nbGUgdmFsdWVcbiAqIGFuZCB0aGVuIGNvbXBsZXRlIGltbWVkaWF0ZWx5LiBJZiBgZnVuY2AgY2FsbHMgdGhlIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzLCB2YWx1ZXMgZnJvbSBzdWJzZXF1ZW50XG4gKiBjYWxscyB3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIHN0cmVhbS4gSWYgeW91IG5lZWQgdG8gbGlzdGVuIGZvciBtdWx0aXBsZSBjYWxscyxcbiAqICB5b3UgcHJvYmFibHkgd2FudCB0byB1c2Uge0BsaW5rIGZyb21FdmVudH0gb3Ige0BsaW5rIGZyb21FdmVudFBhdHRlcm59IGluc3RlYWQuXG4gKlxuICogSWYgYGZ1bmNgIGRlcGVuZHMgb24gc29tZSBjb250ZXh0IChgdGhpc2AgcHJvcGVydHkpIGFuZCBpcyBub3QgYWxyZWFkeSBib3VuZCwgdGhlIGNvbnRleHQgb2YgYGZ1bmNgXG4gKiB3aWxsIGJlIHRoZSBjb250ZXh0IHRoYXQgdGhlIG91dHB1dCBmdW5jdGlvbiBoYXMgYXQgY2FsbCB0aW1lLiBJbiBwYXJ0aWN1bGFyLCBpZiBgZnVuY2BcbiAqIGlzIGNhbGxlZCBhcyBhIG1ldGhvZCBvZiBzb21lIG9iamVjdCBhbmQgaWYgYGZ1bmNgIGlzIG5vdCBhbHJlYWR5IGJvdW5kLCBpbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgY29udGV4dFxuICogaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgY29udGV4dCBvZiB0aGUgb3V0cHV0IGZ1bmN0aW9uIGlzIHNldCB0byB0aGF0IG9iamVjdCBhcyB3ZWxsLlxuICpcbiAqIElmIHRoZSBpbnB1dCBmdW5jdGlvbiBjYWxscyBpdHMgY2FsbGJhY2sgaW4gdGhlIFwibm9kZSBzdHlsZVwiIChpLmUuIGZpcnN0IGFyZ3VtZW50IHRvIGNhbGxiYWNrIGlzXG4gKiBvcHRpb25hbCBlcnJvciBwYXJhbWV0ZXIgc2lnbmFsaW5nIHdoZXRoZXIgdGhlIGNhbGwgZmFpbGVkIG9yIG5vdCksIHtAbGluayBiaW5kTm9kZUNhbGxiYWNrfVxuICogcHJvdmlkZXMgY29udmVuaWVudCBlcnJvciBoYW5kbGluZyBhbmQgcHJvYmFibHkgaXMgYSBiZXR0ZXIgY2hvaWNlLlxuICogYGJpbmRDYWxsYmFja2Agd2lsbCB0cmVhdCBzdWNoIGZ1bmN0aW9ucyB0aGUgc2FtZSBhcyBhbnkgb3RoZXIgYW5kIGVycm9yIHBhcmFtZXRlcnNcbiAqICh3aGV0aGVyIHBhc3NlZCBvciBub3QpIHdpbGwgYWx3YXlzIGJlIGludGVycHJldGVkIGFzIHJlZ3VsYXIgY2FsbGJhY2sgYXJndW1lbnQuXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBDb252ZXJ0IGpRdWVyeSdzIGdldEpTT04gdG8gYW4gT2JzZXJ2YWJsZSBBUElcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYmluZENhbGxiYWNrIH0gZnJvbSAncnhqcyc7XG4gKiBpbXBvcnQgKiBhcyBqUXVlcnkgZnJvbSAnanF1ZXJ5JztcbiAqXG4gKiAvLyBTdXBwb3NlIHdlIGhhdmUgalF1ZXJ5LmdldEpTT04oJy9teS91cmwnLCBjYWxsYmFjaylcbiAqIGNvbnN0IGdldEpTT05Bc09ic2VydmFibGUgPSBiaW5kQ2FsbGJhY2soalF1ZXJ5LmdldEpTT04pO1xuICogY29uc3QgcmVzdWx0ID0gZ2V0SlNPTkFzT2JzZXJ2YWJsZSgnL215L3VybCcpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpLCBlID0+IGNvbnNvbGUuZXJyb3IoZSkpO1xuICogYGBgXG4gKlxuICogUmVjZWl2ZSBhbiBhcnJheSBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIGEgY2FsbGJhY2tcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYmluZENhbGxiYWNrIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgc29tZUZ1bmN0aW9uID0gKG4sIHMsIGNiKSA9PiB7XG4gKiAgIGNiKG4sIHMsIHsgc29tZVByb3BlcnR5OiAnc29tZVZhbHVlJyB9KTtcbiAqIH07XG4gKlxuICogY29uc3QgYm91bmRTb21lRnVuY3Rpb24gPSBiaW5kQ2FsbGJhY2soc29tZUZ1bmN0aW9uKTtcbiAqIGJvdW5kU29tZUZ1bmN0aW9uKDUsICdzb21lIHN0cmluZycpLnN1YnNjcmliZSgodmFsdWVzKSA9PiB7XG4gKiAgIGNvbnNvbGUubG9nKHZhbHVlcyk7IC8vIFs1LCAnc29tZSBzdHJpbmcnLCB7c29tZVByb3BlcnR5OiAnc29tZVZhbHVlJ31dXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIENvbXBhcmUgYmVoYXZpb3VyIHdpdGggYW5kIHdpdGhvdXQgYGFzeW5jU2NoZWR1bGVyYFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBiaW5kQ2FsbGJhY2ssIGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAncnhqcyc7XG4gKlxuICogZnVuY3Rpb24gaUNhbGxNeUNhbGxiYWNrU3luY2hyb25vdXNseShjYikge1xuICogICBjYigpO1xuICogfVxuICpcbiAqIGNvbnN0IGJvdW5kU3luY0ZuID0gYmluZENhbGxiYWNrKGlDYWxsTXlDYWxsYmFja1N5bmNocm9ub3VzbHkpO1xuICogY29uc3QgYm91bmRBc3luY0ZuID0gYmluZENhbGxiYWNrKGlDYWxsTXlDYWxsYmFja1N5bmNocm9ub3VzbHksIG51bGwsIGFzeW5jU2NoZWR1bGVyKTtcbiAqXG4gKiBib3VuZFN5bmNGbigpLnN1YnNjcmliZSgoKSA9PiBjb25zb2xlLmxvZygnSSB3YXMgc3luYyEnKSk7XG4gKiBib3VuZEFzeW5jRm4oKS5zdWJzY3JpYmUoKCkgPT4gY29uc29sZS5sb2coJ0kgd2FzIGFzeW5jIScpKTtcbiAqIGNvbnNvbGUubG9nKCdUaGlzIGhhcHBlbmVkLi4uJyk7XG4gKlxuICogLy8gTG9nczpcbiAqIC8vIEkgd2FzIHN5bmMhXG4gKiAvLyBUaGlzIGhhcHBlbmVkLi4uXG4gKiAvLyBJIHdhcyBhc3luYyFcbiAqIGBgYFxuICpcbiAqIFVzZSBgYmluZENhbGxiYWNrYCBvbiBhbiBvYmplY3QgbWV0aG9kXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGJpbmRDYWxsYmFjayB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGJvdW5kTWV0aG9kID0gYmluZENhbGxiYWNrKHNvbWVPYmplY3QubWV0aG9kV2l0aENhbGxiYWNrKTtcbiAqIGJvdW5kTWV0aG9kXG4gKiAgIC5jYWxsKHNvbWVPYmplY3QpIC8vIG1ha2Ugc3VyZSBtZXRob2RXaXRoQ2FsbGJhY2sgaGFzIGFjY2VzcyB0byBzb21lT2JqZWN0XG4gKiAgIC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBiaW5kTm9kZUNhbGxiYWNrfVxuICogQHNlZSB7QGxpbmsgZnJvbX1cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2tGdW5jIEEgZnVuY3Rpb24gd2l0aCBhIGNhbGxiYWNrIGFzIHRoZSBsYXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSByZXN1bHRTZWxlY3RvciBBIG1hcHBpbmcgZnVuY3Rpb24gdXNlZCB0byB0cmFuc2Zvcm0gY2FsbGJhY2sgZXZlbnRzLlxuICogQHBhcmFtIHNjaGVkdWxlciBUaGUgc2NoZWR1bGVyIG9uIHdoaWNoIHRvIHNjaGVkdWxlIHRoZSBjYWxsYmFja3MuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUgT2JzZXJ2YWJsZSB0aGF0IGRlbGl2ZXJzIHRoZSBzYW1lXG4gKiB2YWx1ZXMgdGhlIGNhbGxiYWNrIHdvdWxkIGRlbGl2ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kQ2FsbGJhY2soXG4gIGNhbGxiYWNrRnVuYzogKC4uLmFyZ3M6IFsuLi5hbnlbXSwgKC4uLnJlczogYW55KSA9PiB2b2lkXSkgPT4gdm9pZCxcbiAgcmVzdWx0U2VsZWN0b3I/OiAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHwgU2NoZWR1bGVyTGlrZSxcbiAgc2NoZWR1bGVyPzogU2NoZWR1bGVyTGlrZVxuKTogKC4uLmFyZ3M6IGFueVtdKSA9PiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgcmV0dXJuIGJpbmRDYWxsYmFja0ludGVybmFscyhmYWxzZSwgY2FsbGJhY2tGdW5jLCByZXN1bHRTZWxlY3Rvciwgc2NoZWR1bGVyKTtcbn1cbiIsICIvKiBAcHJldHRpZXIgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFNjaGVkdWxlckxpa2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBiaW5kQ2FsbGJhY2tJbnRlcm5hbHMgfSBmcm9tICcuL2JpbmRDYWxsYmFja0ludGVybmFscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTm9kZUNhbGxiYWNrKFxuICBjYWxsYmFja0Z1bmM6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgcmVzdWx0U2VsZWN0b3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LFxuICBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlXG4pOiAoLi4uYXJnczogYW55W10pID0+IE9ic2VydmFibGU8YW55PjtcblxuLy8gYXJncyBpcyB0aGUgYXJndW1lbnRzIGFycmF5IGFuZCB3ZSBwdXNoIHRoZSBjYWxsYmFjayBvbiB0aGUgcmVzdCB0dXBsZSBzaW5jZSB0aGUgcmVzdCBwYXJhbWV0ZXIgbXVzdCBiZSBsYXN0IChvbmx5IGl0ZW0pIGluIGEgcGFyYW1ldGVyIGxpc3RcbmV4cG9ydCBmdW5jdGlvbiBiaW5kTm9kZUNhbGxiYWNrPEEgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10sIFIgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10+KFxuICBjYWxsYmFja0Z1bmM6ICguLi5hcmdzOiBbLi4uQSwgKGVycjogYW55LCAuLi5yZXM6IFIpID0+IHZvaWRdKSA9PiB2b2lkLFxuICBzY2hlZHVsZXJMaWtlPzogU2NoZWR1bGVyTGlrZVxuKTogKC4uLmFyZzogQSkgPT4gT2JzZXJ2YWJsZTxSIGV4dGVuZHMgW10gPyB2b2lkIDogUiBleHRlbmRzIFthbnldID8gUlswXSA6IFI+O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgTm9kZS5qcy1zdHlsZSBjYWxsYmFjayBBUEkgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW5cbiAqIE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MganVzdCBsaWtlIHtAbGluayBiaW5kQ2FsbGJhY2t9LCBidXQgdGhlXG4gKiBjYWxsYmFjayBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlIGBjYWxsYmFjayhlcnJvciwgcmVzdWx0KWAuPC9zcGFuPlxuICpcbiAqIGBiaW5kTm9kZUNhbGxiYWNrYCBpcyBub3QgYW4gb3BlcmF0b3IgYmVjYXVzZSBpdHMgaW5wdXQgYW5kIG91dHB1dCBhcmUgbm90XG4gKiBPYnNlcnZhYmxlcy4gVGhlIGlucHV0IGlzIGEgZnVuY3Rpb24gYGZ1bmNgIHdpdGggc29tZSBwYXJhbWV0ZXJzLCBidXQgdGhlXG4gKiBsYXN0IHBhcmFtZXRlciBtdXN0IGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBgZnVuY2AgY2FsbHMgd2hlbiBpdCBpc1xuICogZG9uZS4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIGZvbGxvdyBOb2RlLmpzIGNvbnZlbnRpb25zLFxuICogd2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjayBpcyBhbiBlcnJvciBvYmplY3QsIHNpZ25hbGluZ1xuICogd2hldGhlciBjYWxsIHdhcyBzdWNjZXNzZnVsLiBJZiB0aGF0IG9iamVjdCBpcyBwYXNzZWQgdG8gY2FsbGJhY2ssIGl0IG1lYW5zXG4gKiBzb21ldGhpbmcgd2VudCB3cm9uZy5cbiAqXG4gKiBUaGUgb3V0cHV0IG9mIGBiaW5kTm9kZUNhbGxiYWNrYCBpcyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIHNhbWVcbiAqIHBhcmFtZXRlcnMgYXMgYGZ1bmNgLCBleGNlcHQgdGhlIGxhc3Qgb25lICh0aGUgY2FsbGJhY2spLiBXaGVuIHRoZSBvdXRwdXRcbiAqIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGFyZ3VtZW50cywgaXQgd2lsbCByZXR1cm4gYW4gT2JzZXJ2YWJsZS5cbiAqIElmIGBmdW5jYCBjYWxscyBpdHMgY2FsbGJhY2sgd2l0aCBlcnJvciBwYXJhbWV0ZXIgcHJlc2VudCwgT2JzZXJ2YWJsZSB3aWxsXG4gKiBlcnJvciB3aXRoIHRoYXQgdmFsdWUgYXMgd2VsbC4gSWYgZXJyb3IgcGFyYW1ldGVyIGlzIG5vdCBwYXNzZWQsIE9ic2VydmFibGUgd2lsbCBlbWl0XG4gKiBzZWNvbmQgcGFyYW1ldGVyLiBJZiB0aGVyZSBhcmUgbW9yZSBwYXJhbWV0ZXJzICh0aGlyZCBhbmQgc28gb24pLFxuICogT2JzZXJ2YWJsZSB3aWxsIGVtaXQgYW4gYXJyYXkgd2l0aCBhbGwgYXJndW1lbnRzLCBleGNlcHQgZmlyc3QgZXJyb3IgYXJndW1lbnQuXG4gKlxuICogTm90ZSB0aGF0IGBmdW5jYCB3aWxsIG5vdCBiZSBjYWxsZWQgYXQgdGhlIHNhbWUgdGltZSBvdXRwdXQgZnVuY3Rpb24gaXMsXG4gKiBidXQgcmF0aGVyIHdoZW5ldmVyIHJlc3VsdGluZyBPYnNlcnZhYmxlIGlzIHN1YnNjcmliZWQuIEJ5IGRlZmF1bHQgY2FsbCB0b1xuICogYGZ1bmNgIHdpbGwgaGFwcGVuIHN5bmNocm9ub3VzbHkgYWZ0ZXIgc3Vic2NyaXB0aW9uLCBidXQgdGhhdCBjYW4gYmUgY2hhbmdlZFxuICogd2l0aCBwcm9wZXIgYHNjaGVkdWxlcmAgcHJvdmlkZWQgYXMgb3B0aW9uYWwgdGhpcmQgcGFyYW1ldGVyLiB7QGxpbmsgU2NoZWR1bGVyTGlrZX1cbiAqIGNhbiBhbHNvIGNvbnRyb2wgd2hlbiB2YWx1ZXMgZnJvbSBjYWxsYmFjayB3aWxsIGJlIGVtaXR0ZWQgYnkgT2JzZXJ2YWJsZS5cbiAqIFRvIGZpbmQgb3V0IG1vcmUsIGNoZWNrIG91dCBkb2N1bWVudGF0aW9uIGZvciB7QGxpbmsgYmluZENhbGxiYWNrfSwgd2hlcmVcbiAqIHtAbGluayBTY2hlZHVsZXJMaWtlfSB3b3JrcyBleGFjdGx5IHRoZSBzYW1lLlxuICpcbiAqIEFzIGluIHtAbGluayBiaW5kQ2FsbGJhY2t9LCBjb250ZXh0IChgdGhpc2AgcHJvcGVydHkpIG9mIGlucHV0IGZ1bmN0aW9uIHdpbGwgYmUgc2V0IHRvIGNvbnRleHRcbiAqIG9mIHJldHVybmVkIGZ1bmN0aW9uLCB3aGVuIGl0IGlzIGNhbGxlZC5cbiAqXG4gKiBBZnRlciBPYnNlcnZhYmxlIGVtaXRzIHZhbHVlLCBpdCB3aWxsIGNvbXBsZXRlIGltbWVkaWF0ZWx5LiBUaGlzIG1lYW5zXG4gKiBldmVuIGlmIGBmdW5jYCBjYWxscyBjYWxsYmFjayBhZ2FpbiwgdmFsdWVzIGZyb20gc2Vjb25kIGFuZCBjb25zZWN1dGl2ZVxuICogY2FsbHMgd2lsbCBuZXZlciBhcHBlYXIgb24gdGhlIHN0cmVhbS4gSWYgeW91IG5lZWQgdG8gaGFuZGxlIGZ1bmN0aW9uc1xuICogdGhhdCBjYWxsIGNhbGxiYWNrcyBtdWx0aXBsZSB0aW1lcywgY2hlY2sgb3V0IHtAbGluayBmcm9tRXZlbnR9IG9yXG4gKiB7QGxpbmsgZnJvbUV2ZW50UGF0dGVybn0gaW5zdGVhZC5cbiAqXG4gKiBOb3RlIHRoYXQgYGJpbmROb2RlQ2FsbGJhY2tgIGNhbiBiZSB1c2VkIGluIG5vbi1Ob2RlLmpzIGVudmlyb25tZW50cyBhcyB3ZWxsLlxuICogXCJOb2RlLmpzLXN0eWxlXCIgY2FsbGJhY2tzIGFyZSBqdXN0IGEgY29udmVudGlvbiwgc28gaWYgeW91IHdyaXRlIGZvclxuICogYnJvd3NlcnMgb3IgYW55IG90aGVyIGVudmlyb25tZW50IGFuZCBBUEkgeW91IHVzZSBpbXBsZW1lbnRzIHRoYXQgY2FsbGJhY2sgc3R5bGUsXG4gKiBgYmluZE5vZGVDYWxsYmFja2AgY2FuIGJlIHNhZmVseSB1c2VkIG9uIHRoYXQgQVBJIGZ1bmN0aW9ucyBhcyB3ZWxsLlxuICpcbiAqIFJlbWVtYmVyIHRoYXQgRXJyb3Igb2JqZWN0IHBhc3NlZCB0byBjYWxsYmFjayBkb2VzIG5vdCBoYXZlIHRvIGJlIGFuIGluc3RhbmNlXG4gKiBvZiBKYXZhU2NyaXB0IGJ1aWx0LWluIGBFcnJvcmAgb2JqZWN0LiBJbiBmYWN0LCBpdCBkb2VzIG5vdCBldmVuIGhhdmUgdG8gYW4gb2JqZWN0LlxuICogRXJyb3IgcGFyYW1ldGVyIG9mIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludGVycHJldGVkIGFzIFwicHJlc2VudFwiLCB3aGVuIHZhbHVlXG4gKiBvZiB0aGF0IHBhcmFtZXRlciBpcyB0cnV0aHkuIEl0IGNvdWxkIGJlLCBmb3IgZXhhbXBsZSwgbm9uLXplcm8gbnVtYmVyLCBub24tZW1wdHlcbiAqIHN0cmluZyBvciBib29sZWFuIGB0cnVlYC4gSW4gYWxsIG9mIHRoZXNlIGNhc2VzIHJlc3VsdGluZyBPYnNlcnZhYmxlIHdvdWxkIGVycm9yXG4gKiB3aXRoIHRoYXQgdmFsdWUuIFRoaXMgbWVhbnMgdXN1YWxseSByZWd1bGFyIHN0eWxlIGNhbGxiYWNrcyB3aWxsIGZhaWwgdmVyeSBvZnRlbiB3aGVuXG4gKiBgYmluZE5vZGVDYWxsYmFja2AgaXMgdXNlZC4gSWYgeW91ciBPYnNlcnZhYmxlIGVycm9ycyBtdWNoIG1vcmUgb2Z0ZW4gdGhlbiB5b3VcbiAqIHdvdWxkIGV4cGVjdCwgY2hlY2sgaWYgY2FsbGJhY2sgcmVhbGx5IGlzIGNhbGxlZCBpbiBOb2RlLmpzLXN0eWxlIGFuZCwgaWYgbm90LFxuICogc3dpdGNoIHRvIHtAbGluayBiaW5kQ2FsbGJhY2t9IGluc3RlYWQuXG4gKlxuICogTm90ZSB0aGF0IGV2ZW4gaWYgZXJyb3IgcGFyYW1ldGVyIGlzIHRlY2huaWNhbGx5IHByZXNlbnQgaW4gY2FsbGJhY2ssIGJ1dCBpdHMgdmFsdWVcbiAqIGlzIGZhbHN5LCBpdCBzdGlsbCB3b24ndCBhcHBlYXIgaW4gYXJyYXkgZW1pdHRlZCBieSBPYnNlcnZhYmxlLlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogIFJlYWQgYSBmaWxlIGZyb20gdGhlIGZpbGVzeXN0ZW0gYW5kIGdldCB0aGUgZGF0YSBhcyBhbiBPYnNlcnZhYmxlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbiAqIGNvbnN0IHJlYWRGaWxlQXNPYnNlcnZhYmxlID0gYmluZE5vZGVDYWxsYmFjayhmcy5yZWFkRmlsZSk7XG4gKiBjb25zdCByZXN1bHQgPSByZWFkRmlsZUFzT2JzZXJ2YWJsZSgnLi9yb2FkTmFtZXMudHh0JywgJ3V0ZjgnKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSwgZSA9PiBjb25zb2xlLmVycm9yKGUpKTtcbiAqIGBgYFxuICpcbiAqIFVzZSBvbiBmdW5jdGlvbiBjYWxsaW5nIGNhbGxiYWNrIHdpdGggbXVsdGlwbGUgYXJndW1lbnRzXG4gKlxuICogYGBgdHNcbiAqIHNvbWVGdW5jdGlvbigoZXJyLCBhLCBiKSA9PiB7XG4gKiAgIGNvbnNvbGUubG9nKGVycik7IC8vIG51bGxcbiAqICAgY29uc29sZS5sb2coYSk7IC8vIDVcbiAqICAgY29uc29sZS5sb2coYik7IC8vIFwic29tZSBzdHJpbmdcIlxuICogfSk7XG4gKiBjb25zdCBib3VuZFNvbWVGdW5jdGlvbiA9IGJpbmROb2RlQ2FsbGJhY2soc29tZUZ1bmN0aW9uKTtcbiAqIGJvdW5kU29tZUZ1bmN0aW9uKClcbiAqIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICogICBjb25zb2xlLmxvZyh2YWx1ZSk7IC8vIFs1LCBcInNvbWUgc3RyaW5nXCJdXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIFVzZSBvbiBmdW5jdGlvbiBjYWxsaW5nIGNhbGxiYWNrIGluIHJlZ3VsYXIgc3R5bGVcbiAqXG4gKiBgYGB0c1xuICogc29tZUZ1bmN0aW9uKGEgPT4ge1xuICogICBjb25zb2xlLmxvZyhhKTsgLy8gNVxuICogfSk7XG4gKiBjb25zdCBib3VuZFNvbWVGdW5jdGlvbiA9IGJpbmROb2RlQ2FsbGJhY2soc29tZUZ1bmN0aW9uKTtcbiAqIGJvdW5kU29tZUZ1bmN0aW9uKClcbiAqIC5zdWJzY3JpYmUoXG4gKiAgIHZhbHVlID0+IHt9ICAgICAgICAgICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gKiAgIGVyciA9PiBjb25zb2xlLmxvZyhlcnIpIC8vIDVcbiAqICk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBiaW5kQ2FsbGJhY2t9XG4gKiBAc2VlIHtAbGluayBmcm9tfVxuICpcbiAqIEBwYXJhbSBjYWxsYmFja0Z1bmMgRnVuY3Rpb24gd2l0aCBhIE5vZGUuanMtc3R5bGUgY2FsbGJhY2sgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHJlc3VsdFNlbGVjdG9yIEEgbWFwcGluZyBmdW5jdGlvbiB1c2VkIHRvIHRyYW5zZm9ybSBjYWxsYmFjayBldmVudHMuXG4gKiBAcGFyYW0gc2NoZWR1bGVyIFRoZSBzY2hlZHVsZXIgb24gd2hpY2ggdG8gc2NoZWR1bGUgdGhlIGNhbGxiYWNrcy5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHRoZSBPYnNlcnZhYmxlIHRoYXQgZGVsaXZlcnMgdGhlIHNhbWUgdmFsdWVzIHRoZVxuICogTm9kZS5qcyBjYWxsYmFjayB3b3VsZCBkZWxpdmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZE5vZGVDYWxsYmFjayhcbiAgY2FsbGJhY2tGdW5jOiAoLi4uYXJnczogWy4uLmFueVtdLCAoZXJyOiBhbnksIC4uLnJlczogYW55KSA9PiB2b2lkXSkgPT4gdm9pZCxcbiAgcmVzdWx0U2VsZWN0b3I/OiAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHwgU2NoZWR1bGVyTGlrZSxcbiAgc2NoZWR1bGVyPzogU2NoZWR1bGVyTGlrZVxuKTogKC4uLmFyZ3M6IGFueVtdKSA9PiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gYmluZENhbGxiYWNrSW50ZXJuYWxzKHRydWUsIGNhbGxiYWNrRnVuYywgcmVzdWx0U2VsZWN0b3IsIHNjaGVkdWxlcik7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0LCBTY2hlZHVsZXJMaWtlLCBPYnNlcnZlZFZhbHVlT2YsIE9ic2VydmFibGVJbnB1dFR1cGxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXJnc0FyZ0FycmF5T3JPYmplY3QgfSBmcm9tICcuLi91dGlsL2FyZ3NBcmdBcnJheU9yT2JqZWN0JztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuL2Zyb20nO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBtYXBPbmVPck1hbnlBcmdzIH0gZnJvbSAnLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzJztcbmltcG9ydCB7IHBvcFJlc3VsdFNlbGVjdG9yLCBwb3BTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgY3JlYXRlT2JqZWN0IH0gZnJvbSAnLi4vdXRpbC9jcmVhdGVPYmplY3QnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBBbnlDYXRjaGVyIH0gZnJvbSAnLi4vQW55Q2F0Y2hlcic7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5cbi8vIGNvbWJpbmVMYXRlc3QoYW55KVxuLy8gV2UgcHV0IHRoaXMgZmlyc3QgYmVjYXVzZSB3ZSBuZWVkIHRvIGNhdGNoIGNhc2VzIHdoZXJlIHRoZSB1c2VyIGhhcyBzdXBwbGllZFxuLy8gX2V4YWN0bHkgYGFueWBfIGFzIHRoZSBhcmd1bWVudC4gU2luY2UgYGFueWAgbGl0ZXJhbGx5IG1hdGNoZXMgX2FueXRoaW5nXyxcbi8vIHdlIGRvbid0IHdhbnQgaXQgdG8gcmFuZG9tbHkgaGl0IG9uZSBvZiB0aGUgb3RoZXIgdHlwZSBzaWduYXR1cmVzIGJlbG93LFxuLy8gYXMgd2UgaGF2ZSBubyBpZGVhIGF0IGJ1aWxkLXRpbWUgd2hhdCB0eXBlIHdlIHNob3VsZCBiZSByZXR1cm5pbmcgd2hlbiBnaXZlbiBhbiBhbnkuXG5cbi8qKlxuICogWW91IGhhdmUgcGFzc2VkIGBhbnlgIGhlcmUsIHdlIGNhbid0IGZpZ3VyZSBvdXQgaWYgaXQgaXNcbiAqIGFuIGFycmF5IG9yIGFuIG9iamVjdCwgc28geW91J3JlIGdldHRpbmcgYHVua25vd25gLiBVc2UgYmV0dGVyIHR5cGVzLlxuICogQHBhcmFtIGFyZyBTb21ldGhpbmcgdHlwZWQgYXMgYGFueWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3Q8VCBleHRlbmRzIEFueUNhdGNoZXI+KGFyZzogVCk6IE9ic2VydmFibGU8dW5rbm93bj47XG5cbi8vIGNvbWJpbmVMYXRlc3QoW2EsIGIsIGNdKVxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3Qoc291cmNlczogW10pOiBPYnNlcnZhYmxlPG5ldmVyPjtcbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lTGF0ZXN0PEEgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10+KHNvdXJjZXM6IHJlYWRvbmx5IFsuLi5PYnNlcnZhYmxlSW5wdXRUdXBsZTxBPl0pOiBPYnNlcnZhYmxlPEE+O1xuLyoqIEBkZXByZWNhdGVkIFRoZSBgc2NoZWR1bGVyYCBwYXJhbWV0ZXIgd2lsbCBiZSByZW1vdmVkIGluIHY4LiBVc2UgYHNjaGVkdWxlZGAgYW5kIGBjb21iaW5lTGF0ZXN0QWxsYC4gRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvc2NoZWR1bGVyLWFyZ3VtZW50ICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUxhdGVzdDxBIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdLCBSPihcbiAgc291cmNlczogcmVhZG9ubHkgWy4uLk9ic2VydmFibGVJbnB1dFR1cGxlPEE+XSxcbiAgcmVzdWx0U2VsZWN0b3I6ICguLi52YWx1ZXM6IEEpID0+IFIsXG4gIHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZVxuKTogT2JzZXJ2YWJsZTxSPjtcbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lTGF0ZXN0PEEgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10sIFI+KFxuICBzb3VyY2VzOiByZWFkb25seSBbLi4uT2JzZXJ2YWJsZUlucHV0VHVwbGU8QT5dLFxuICByZXN1bHRTZWxlY3RvcjogKC4uLnZhbHVlczogQSkgPT4gUlxuKTogT2JzZXJ2YWJsZTxSPjtcbi8qKiBAZGVwcmVjYXRlZCBUaGUgYHNjaGVkdWxlcmAgcGFyYW1ldGVyIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIGBzY2hlZHVsZWRgIGFuZCBgY29tYmluZUxhdGVzdEFsbGAuIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL3NjaGVkdWxlci1hcmd1bWVudCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3Q8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oXG4gIHNvdXJjZXM6IHJlYWRvbmx5IFsuLi5PYnNlcnZhYmxlSW5wdXRUdXBsZTxBPl0sXG4gIHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZVxuKTogT2JzZXJ2YWJsZTxBPjtcblxuLy8gY29tYmluZUxhdGVzdChhLCBiLCBjKVxuLyoqIEBkZXByZWNhdGVkIFBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcyBpbnN0ZWFkLiBUaGUgcmVzdC1wYXJhbWV0ZXJzIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL2FycmF5LWFyZ3VtZW50ICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUxhdGVzdDxBIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdPiguLi5zb3VyY2VzOiBbLi4uT2JzZXJ2YWJsZUlucHV0VHVwbGU8QT5dKTogT2JzZXJ2YWJsZTxBPjtcbi8qKiBAZGVwcmVjYXRlZCBUaGUgYHNjaGVkdWxlcmAgcGFyYW1ldGVyIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIGBzY2hlZHVsZWRgIGFuZCBgY29tYmluZUxhdGVzdEFsbGAuIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL3NjaGVkdWxlci1hcmd1bWVudCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3Q8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSwgUj4oXG4gIC4uLnNvdXJjZXNBbmRSZXN1bHRTZWxlY3RvckFuZFNjaGVkdWxlcjogWy4uLk9ic2VydmFibGVJbnB1dFR1cGxlPEE+LCAoLi4udmFsdWVzOiBBKSA9PiBSLCBTY2hlZHVsZXJMaWtlXVxuKTogT2JzZXJ2YWJsZTxSPjtcbi8qKiBAZGVwcmVjYXRlZCBQYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMgaW5zdGVhZC4gVGhlIHJlc3QtcGFyYW1ldGVycyBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHY4LiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9hcnJheS1hcmd1bWVudCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3Q8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSwgUj4oXG4gIC4uLnNvdXJjZXNBbmRSZXN1bHRTZWxlY3RvcjogWy4uLk9ic2VydmFibGVJbnB1dFR1cGxlPEE+LCAoLi4udmFsdWVzOiBBKSA9PiBSXVxuKTogT2JzZXJ2YWJsZTxSPjtcbi8qKiBAZGVwcmVjYXRlZCBUaGUgYHNjaGVkdWxlcmAgcGFyYW1ldGVyIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIGBzY2hlZHVsZWRgIGFuZCBgY29tYmluZUxhdGVzdEFsbGAuIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL3NjaGVkdWxlci1hcmd1bWVudCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3Q8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oXG4gIC4uLnNvdXJjZXNBbmRTY2hlZHVsZXI6IFsuLi5PYnNlcnZhYmxlSW5wdXRUdXBsZTxBPiwgU2NoZWR1bGVyTGlrZV1cbik6IE9ic2VydmFibGU8QT47XG5cbi8vIGNvbWJpbmVMYXRlc3Qoe2EsIGIsIGN9KVxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3Qoc291cmNlc09iamVjdDogeyBbSyBpbiBhbnldOiBuZXZlciB9KTogT2JzZXJ2YWJsZTxuZXZlcj47XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUxhdGVzdDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZUlucHV0PGFueT4+PihcbiAgc291cmNlc09iamVjdDogVFxuKTogT2JzZXJ2YWJsZTx7IFtLIGluIGtleW9mIFRdOiBPYnNlcnZlZFZhbHVlT2Y8VFtLXT4gfT47XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgT2JzZXJ2YWJsZXMgdG8gY3JlYXRlIGFuIE9ic2VydmFibGUgd2hvc2UgdmFsdWVzIGFyZVxuICogY2FsY3VsYXRlZCBmcm9tIHRoZSBsYXRlc3QgdmFsdWVzIG9mIGVhY2ggb2YgaXRzIGlucHV0IE9ic2VydmFibGVzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5XaGVuZXZlciBhbnkgaW5wdXQgT2JzZXJ2YWJsZSBlbWl0cyBhIHZhbHVlLCBpdFxuICogY29tcHV0ZXMgYSBmb3JtdWxhIHVzaW5nIHRoZSBsYXRlc3QgdmFsdWVzIGZyb20gYWxsIHRoZSBpbnB1dHMsIHRoZW4gZW1pdHNcbiAqIHRoZSBvdXRwdXQgb2YgdGhhdCBmb3JtdWxhLjwvc3Bhbj5cbiAqXG4gKiAhW10oY29tYmluZUxhdGVzdC5wbmcpXG4gKlxuICogYGNvbWJpbmVMYXRlc3RgIGNvbWJpbmVzIHRoZSB2YWx1ZXMgZnJvbSBhbGwgdGhlIE9ic2VydmFibGVzIHBhc3NlZCBpbiB0aGVcbiAqIG9ic2VydmFibGVzIGFycmF5LiBUaGlzIGlzIGRvbmUgYnkgc3Vic2NyaWJpbmcgdG8gZWFjaCBPYnNlcnZhYmxlIGluIG9yZGVyIGFuZCxcbiAqIHdoZW5ldmVyIGFueSBPYnNlcnZhYmxlIGVtaXRzLCBjb2xsZWN0aW5nIGFuIGFycmF5IG9mIHRoZSBtb3N0IHJlY2VudFxuICogdmFsdWVzIGZyb20gZWFjaCBPYnNlcnZhYmxlLiBTbyBpZiB5b3UgcGFzcyBgbmAgT2JzZXJ2YWJsZXMgdG8gdGhpcyBvcGVyYXRvcixcbiAqIHRoZSByZXR1cm5lZCBPYnNlcnZhYmxlIHdpbGwgYWx3YXlzIGVtaXQgYW4gYXJyYXkgb2YgYG5gIHZhbHVlcywgaW4gYW4gb3JkZXJcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9yZGVyIG9mIHRoZSBwYXNzZWQgT2JzZXJ2YWJsZXMgKHRoZSB2YWx1ZSBmcm9tIHRoZSBmaXJzdCBPYnNlcnZhYmxlXG4gKiB3aWxsIGJlIGF0IGluZGV4IDAgb2YgdGhlIGFycmF5IGFuZCBzbyBvbikuXG4gKlxuICogU3RhdGljIHZlcnNpb24gb2YgYGNvbWJpbmVMYXRlc3RgIGFjY2VwdHMgYW4gYXJyYXkgb2YgT2JzZXJ2YWJsZXMuIE5vdGUgdGhhdCBhbiBhcnJheSBvZlxuICogT2JzZXJ2YWJsZXMgaXMgYSBnb29kIGNob2ljZSwgaWYgeW91IGRvbid0IGtub3cgYmVmb3JlaGFuZCBob3cgbWFueSBPYnNlcnZhYmxlc1xuICogeW91IHdpbGwgY29tYmluZS4gUGFzc2luZyBhbiBlbXB0eSBhcnJheSB3aWxsIHJlc3VsdCBpbiBhbiBPYnNlcnZhYmxlIHRoYXRcbiAqIGNvbXBsZXRlcyBpbW1lZGlhdGVseS5cbiAqXG4gKiBUbyBlbnN1cmUgdGhlIG91dHB1dCBhcnJheSBhbHdheXMgaGFzIHRoZSBzYW1lIGxlbmd0aCwgYGNvbWJpbmVMYXRlc3RgIHdpbGxcbiAqIGFjdHVhbGx5IHdhaXQgZm9yIGFsbCBpbnB1dCBPYnNlcnZhYmxlcyB0byBlbWl0IGF0IGxlYXN0IG9uY2UsXG4gKiBiZWZvcmUgaXQgc3RhcnRzIGVtaXR0aW5nIHJlc3VsdHMuIFRoaXMgbWVhbnMgaWYgc29tZSBPYnNlcnZhYmxlIGVtaXRzXG4gKiB2YWx1ZXMgYmVmb3JlIG90aGVyIE9ic2VydmFibGVzIHN0YXJ0ZWQgZW1pdHRpbmcsIGFsbCB0aGVzZSB2YWx1ZXMgYnV0IHRoZSBsYXN0XG4gKiB3aWxsIGJlIGxvc3QuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBzb21lIE9ic2VydmFibGUgZG9lcyBub3QgZW1pdCBhIHZhbHVlIGJ1dFxuICogY29tcGxldGVzLCByZXN1bHRpbmcgT2JzZXJ2YWJsZSB3aWxsIGNvbXBsZXRlIGF0IHRoZSBzYW1lIG1vbWVudCB3aXRob3V0XG4gKiBlbWl0dGluZyBhbnl0aGluZywgc2luY2UgaXQgd2lsbCBub3cgYmUgaW1wb3NzaWJsZSB0byBpbmNsdWRlIGEgdmFsdWUgZnJvbSB0aGVcbiAqIGNvbXBsZXRlZCBPYnNlcnZhYmxlIGluIHRoZSByZXN1bHRpbmcgYXJyYXkuIEFsc28sIGlmIHNvbWUgaW5wdXQgT2JzZXJ2YWJsZSBkb2VzXG4gKiBub3QgZW1pdCBhbnkgdmFsdWUgYW5kIG5ldmVyIGNvbXBsZXRlcywgYGNvbWJpbmVMYXRlc3RgIHdpbGwgYWxzbyBuZXZlciBlbWl0XG4gKiBhbmQgbmV2ZXIgY29tcGxldGUsIHNpbmNlLCBhZ2FpbiwgaXQgd2lsbCB3YWl0IGZvciBhbGwgc3RyZWFtcyB0byBlbWl0IHNvbWVcbiAqIHZhbHVlLlxuICpcbiAqIElmIGF0IGxlYXN0IG9uZSBPYnNlcnZhYmxlIHdhcyBwYXNzZWQgdG8gYGNvbWJpbmVMYXRlc3RgIGFuZCBhbGwgcGFzc2VkIE9ic2VydmFibGVzXG4gKiBlbWl0dGVkIHNvbWV0aGluZywgdGhlIHJlc3VsdGluZyBPYnNlcnZhYmxlIHdpbGwgY29tcGxldGUgd2hlbiBhbGwgY29tYmluZWRcbiAqIHN0cmVhbXMgY29tcGxldGUuIFNvIGV2ZW4gaWYgc29tZSBPYnNlcnZhYmxlIGNvbXBsZXRlcywgdGhlIHJlc3VsdCBvZlxuICogYGNvbWJpbmVMYXRlc3RgIHdpbGwgc3RpbGwgZW1pdCB2YWx1ZXMgd2hlbiBvdGhlciBPYnNlcnZhYmxlcyBkby4gSW4gY2FzZVxuICogb2YgYSBjb21wbGV0ZWQgT2JzZXJ2YWJsZSwgaXRzIHZhbHVlIGZyb20gbm93IG9uIHdpbGwgYWx3YXlzIGJlIHRoZSBsYXN0XG4gKiBlbWl0dGVkIHZhbHVlLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgYW55IE9ic2VydmFibGUgZXJyb3JzLCBgY29tYmluZUxhdGVzdGBcbiAqIHdpbGwgZXJyb3IgaW1tZWRpYXRlbHkgYXMgd2VsbCwgYW5kIGFsbCBvdGhlciBPYnNlcnZhYmxlcyB3aWxsIGJlIHVuc3Vic2NyaWJlZC5cbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIENvbWJpbmUgdHdvIHRpbWVyIE9ic2VydmFibGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRpbWVyLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgZmlyc3RUaW1lciA9IHRpbWVyKDAsIDEwMDApOyAvLyBlbWl0IDAsIDEsIDIuLi4gYWZ0ZXIgZXZlcnkgc2Vjb25kLCBzdGFydGluZyBmcm9tIG5vd1xuICogY29uc3Qgc2Vjb25kVGltZXIgPSB0aW1lcig1MDAsIDEwMDApOyAvLyBlbWl0IDAsIDEsIDIuLi4gYWZ0ZXIgZXZlcnkgc2Vjb25kLCBzdGFydGluZyAwLDVzIGZyb20gbm93XG4gKiBjb25zdCBjb21iaW5lZFRpbWVycyA9IGNvbWJpbmVMYXRlc3QoW2ZpcnN0VGltZXIsIHNlY29uZFRpbWVyXSk7XG4gKiBjb21iaW5lZFRpbWVycy5zdWJzY3JpYmUodmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpKTtcbiAqIC8vIExvZ3NcbiAqIC8vIFswLCAwXSBhZnRlciAwLjVzXG4gKiAvLyBbMSwgMF0gYWZ0ZXIgMXNcbiAqIC8vIFsxLCAxXSBhZnRlciAxLjVzXG4gKiAvLyBbMiwgMV0gYWZ0ZXIgMnNcbiAqIGBgYFxuICpcbiAqIENvbWJpbmUgYSBkaWN0aW9uYXJ5IG9mIE9ic2VydmFibGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBkZWxheSwgc3RhcnRXaXRoLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgb2JzZXJ2YWJsZXMgPSB7XG4gKiAgIGE6IG9mKDEpLnBpcGUoZGVsYXkoMTAwMCksIHN0YXJ0V2l0aCgwKSksXG4gKiAgIGI6IG9mKDUpLnBpcGUoZGVsYXkoNTAwMCksIHN0YXJ0V2l0aCgwKSksXG4gKiAgIGM6IG9mKDEwKS5waXBlKGRlbGF5KDEwMDAwKSwgc3RhcnRXaXRoKDApKVxuICogfTtcbiAqIGNvbnN0IGNvbWJpbmVkID0gY29tYmluZUxhdGVzdChvYnNlcnZhYmxlcyk7XG4gKiBjb21iaW5lZC5zdWJzY3JpYmUodmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpKTtcbiAqIC8vIExvZ3NcbiAqIC8vIHsgYTogMCwgYjogMCwgYzogMCB9IGltbWVkaWF0ZWx5XG4gKiAvLyB7IGE6IDEsIGI6IDAsIGM6IDAgfSBhZnRlciAxc1xuICogLy8geyBhOiAxLCBiOiA1LCBjOiAwIH0gYWZ0ZXIgNXNcbiAqIC8vIHsgYTogMSwgYjogNSwgYzogMTAgfSBhZnRlciAxMHNcbiAqIGBgYFxuICpcbiAqIENvbWJpbmUgYW4gYXJyYXkgb2YgT2JzZXJ2YWJsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIGRlbGF5LCBzdGFydFdpdGgsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBvYnNlcnZhYmxlcyA9IFsxLCA1LCAxMF0ubWFwKFxuICogICBuID0+IG9mKG4pLnBpcGUoXG4gKiAgICAgZGVsYXkobiAqIDEwMDApLCAvLyBlbWl0IDAgYW5kIHRoZW4gZW1pdCBuIGFmdGVyIG4gc2Vjb25kc1xuICogICAgIHN0YXJ0V2l0aCgwKVxuICogICApXG4gKiApO1xuICogY29uc3QgY29tYmluZWQgPSBjb21iaW5lTGF0ZXN0KG9ic2VydmFibGVzKTtcbiAqIGNvbWJpbmVkLnN1YnNjcmliZSh2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSkpO1xuICogLy8gTG9nc1xuICogLy8gWzAsIDAsIDBdIGltbWVkaWF0ZWx5XG4gKiAvLyBbMSwgMCwgMF0gYWZ0ZXIgMXNcbiAqIC8vIFsxLCA1LCAwXSBhZnRlciA1c1xuICogLy8gWzEsIDUsIDEwXSBhZnRlciAxMHNcbiAqIGBgYFxuICpcbiAqIFVzZSBtYXAgb3BlcmF0b3IgdG8gZHluYW1pY2FsbHkgY2FsY3VsYXRlIHRoZSBCb2R5LU1hc3MgSW5kZXhcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIGNvbWJpbmVMYXRlc3QsIG1hcCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHdlaWdodCA9IG9mKDcwLCA3MiwgNzYsIDc5LCA3NSk7XG4gKiBjb25zdCBoZWlnaHQgPSBvZigxLjc2LCAxLjc3LCAxLjc4KTtcbiAqIGNvbnN0IGJtaSA9IGNvbWJpbmVMYXRlc3QoW3dlaWdodCwgaGVpZ2h0XSkucGlwZShcbiAqICAgbWFwKChbdywgaF0pID0+IHcgLyAoaCAqIGgpKSxcbiAqICk7XG4gKiBibWkuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coJ0JNSSBpcyAnICsgeCkpO1xuICpcbiAqIC8vIFdpdGggb3V0cHV0IHRvIGNvbnNvbGU6XG4gKiAvLyBCTUkgaXMgMjQuMjEyMjkzMzg4NDI5NzUzXG4gKiAvLyBCTUkgaXMgMjMuOTM5NDgwOTkyMDUyMDlcbiAqIC8vIEJNSSBpcyAyMy42NzEyNTM2Mjk1OTIyMjJcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGNvbWJpbmVMYXRlc3RBbGx9XG4gKiBAc2VlIHtAbGluayBtZXJnZX1cbiAqIEBzZWUge0BsaW5rIHdpdGhMYXRlc3RGcm9tfVxuICpcbiAqIEBwYXJhbSBhcmdzIEFueSBudW1iZXIgb2YgYE9ic2VydmFibGVJbnB1dGBzIHByb3ZpZGVkIGVpdGhlciBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3RcbiAqIHRvIGNvbWJpbmUgd2l0aCBlYWNoIG90aGVyLiBJZiB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgdGhlIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIHVzZWQgdG8gcHJvamVjdCB0aGVcbiAqIHZhbHVlcyBmcm9tIHRoZSBjb21iaW5lZCBsYXRlc3QgdmFsdWVzIGludG8gYSBuZXcgdmFsdWUgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICogQHJldHVybiBBbiBPYnNlcnZhYmxlIG9mIHByb2plY3RlZCB2YWx1ZXMgZnJvbSB0aGUgbW9zdCByZWNlbnQgdmFsdWVzIGZyb20gZWFjaCBgT2JzZXJ2YWJsZUlucHV0YCxcbiAqIG9yIGFuIGFycmF5IG9mIHRoZSBtb3N0IHJlY2VudCB2YWx1ZXMgZnJvbSBlYWNoIGBPYnNlcnZhYmxlSW5wdXRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUxhdGVzdDxPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PGFueT4sIFI+KC4uLmFyZ3M6IGFueVtdKTogT2JzZXJ2YWJsZTxSPiB8IE9ic2VydmFibGU8T2JzZXJ2ZWRWYWx1ZU9mPE8+W10+IHtcbiAgY29uc3Qgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKGFyZ3MpO1xuICBjb25zdCByZXN1bHRTZWxlY3RvciA9IHBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpO1xuXG4gIGNvbnN0IHsgYXJnczogb2JzZXJ2YWJsZXMsIGtleXMgfSA9IGFyZ3NBcmdBcnJheU9yT2JqZWN0KGFyZ3MpO1xuXG4gIGlmIChvYnNlcnZhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiBubyBvYnNlcnZhYmxlcyBhcmUgcGFzc2VkLCBvciBzb21lb25lIGhhcyBwYXNzZWQgYW4gZW1wdHkgYXJyYXlcbiAgICAvLyBvZiBvYnNlcnZhYmxlcywgb3IgZXZlbiBhbiBlbXB0eSBvYmplY3QgUE9KTywgd2UgbmVlZCB0byBqdXN0XG4gICAgLy8gY29tcGxldGUgKEVNUFRZKSwgYnV0IHdlIGhhdmUgdG8gaG9ub3IgdGhlIHNjaGVkdWxlciBwcm92aWRlZCBpZiBhbnkuXG4gICAgcmV0dXJuIGZyb20oW10sIHNjaGVkdWxlciBhcyBhbnkpO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gbmV3IE9ic2VydmFibGU8T2JzZXJ2ZWRWYWx1ZU9mPE8+W10+KFxuICAgIGNvbWJpbmVMYXRlc3RJbml0KFxuICAgICAgb2JzZXJ2YWJsZXMgYXMgT2JzZXJ2YWJsZUlucHV0PE9ic2VydmVkVmFsdWVPZjxPPj5bXSxcbiAgICAgIHNjaGVkdWxlcixcbiAgICAgIGtleXNcbiAgICAgICAgPyAvLyBBIGhhbmRsZXIgZm9yIHNjcnViYmluZyB0aGUgYXJyYXkgb2YgYXJncyBpbnRvIGEgZGljdGlvbmFyeS5cbiAgICAgICAgICAodmFsdWVzKSA9PiBjcmVhdGVPYmplY3Qoa2V5cywgdmFsdWVzKVxuICAgICAgICA6IC8vIEEgcGFzc3Rocm91Z2ggdG8ganVzdCByZXR1cm4gdGhlIGFycmF5XG4gICAgICAgICAgaWRlbnRpdHlcbiAgICApXG4gICk7XG5cbiAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yID8gKHJlc3VsdC5waXBlKG1hcE9uZU9yTWFueUFyZ3MocmVzdWx0U2VsZWN0b3IpKSBhcyBPYnNlcnZhYmxlPFI+KSA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3RJbml0KFxuICBvYnNlcnZhYmxlczogT2JzZXJ2YWJsZUlucHV0PGFueT5bXSxcbiAgc2NoZWR1bGVyPzogU2NoZWR1bGVyTGlrZSxcbiAgdmFsdWVUcmFuc2Zvcm06ICh2YWx1ZXM6IGFueVtdKSA9PiBhbnkgPSBpZGVudGl0eVxuKSB7XG4gIHJldHVybiAoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxhbnk+KSA9PiB7XG4gICAgLy8gVGhlIG91dGVyIHN1YnNjcmlwdGlvbi4gV2UncmUgY2FwdHVyaW5nIHRoaXMgaW4gYSBmdW5jdGlvblxuICAgIC8vIGJlY2F1c2Ugd2UgbWF5IGhhdmUgdG8gc2NoZWR1bGUgaXQuXG4gICAgbWF5YmVTY2hlZHVsZShcbiAgICAgIHNjaGVkdWxlcixcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IG9ic2VydmFibGVzO1xuICAgICAgICAvLyBBIHN0b3JlIGZvciB0aGUgdmFsdWVzIGVhY2ggb2JzZXJ2YWJsZSBoYXMgZW1pdHRlZCBzbyBmYXIuIFdlIG1hdGNoIG9ic2VydmFibGUgdG8gdmFsdWUgb24gaW5kZXguXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGN1cnJlbnRseSBhY3RpdmUgc3Vic2NyaXB0aW9ucywgYXMgdGhleSBjb21wbGV0ZSwgd2UgZGVjcmVtZW50IHRoaXMgbnVtYmVyIHRvIHNlZSBpZlxuICAgICAgICAvLyB3ZSBhcmUgYWxsIGRvbmUgY29tYmluaW5nIHZhbHVlcywgc28gd2UgY2FuIGNvbXBsZXRlIHRoZSByZXN1bHQuXG4gICAgICAgIGxldCBhY3RpdmUgPSBsZW5ndGg7XG4gICAgICAgIC8vIFRoZSBudW1iZXIgb2YgaW5uZXIgc291cmNlcyB0aGF0IHN0aWxsIGhhdmVuJ3QgZW1pdHRlZCB0aGUgZmlyc3QgdmFsdWVcbiAgICAgICAgLy8gV2UgbmVlZCB0byB0cmFjayB0aGlzIGJlY2F1c2UgYWxsIHNvdXJjZXMgbmVlZCB0byBlbWl0IG9uZSB2YWx1ZSBpbiBvcmRlclxuICAgICAgICAvLyB0byBzdGFydCBlbWl0dGluZyB2YWx1ZXMuXG4gICAgICAgIGxldCByZW1haW5pbmdGaXJzdFZhbHVlcyA9IGxlbmd0aDtcbiAgICAgICAgLy8gVGhlIGxvb3AgdG8ga2ljayBvZmYgc3Vic2NyaXB0aW9uLiBXZSdyZSBrZXlpbmcgZXZlcnl0aGluZyBvbiBpbmRleCBgaWAgdG8gcmVsYXRlIHRoZSBvYnNlcnZhYmxlcyBwYXNzZWRcbiAgICAgICAgLy8gaW4gdG8gdGhlIHNsb3QgaW4gdGhlIG91dHB1dCBhcnJheSBvciB0aGUga2V5IGluIHRoZSBhcnJheSBvZiBrZXlzIGluIHRoZSBvdXRwdXQgZGljdGlvbmFyeS5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgIG1heWJlU2NoZWR1bGUoXG4gICAgICAgICAgICBzY2hlZHVsZXIsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGZyb20ob2JzZXJ2YWJsZXNbaV0sIHNjaGVkdWxlciBhcyBhbnkpO1xuICAgICAgICAgICAgICBsZXQgaGFzRmlyc3RWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICAgICAgICAgICAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBnZXQgYSB2YWx1ZSwgcmVjb3JkIGl0IGluIG91ciBzZXQgb2YgdmFsdWVzLlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNGaXJzdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgdmFsdWUsIHJlY29yZCB0aGF0LlxuICAgICAgICAgICAgICAgICAgICAgIGhhc0ZpcnN0VmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0ZpcnN0VmFsdWVzLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdGaXJzdFZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCB3YWl0aW5nIGZvciBhbnkgbW9yZVxuICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IHZhbHVlcywgc28gd2UgY2FuIGVtaXQhXG4gICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlVHJhbnNmb3JtKHZhbHVlcy5zbGljZSgpKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghLS1hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IGNvbXBsZXRlIHRoZSByZXN1bHQgaWYgd2UgaGF2ZSBubyBtb3JlIGFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgIC8vIGlubmVyIG9ic2VydmFibGVzLlxuICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWJzY3JpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHN1YnNjcmliZXJcbiAgICApO1xuICB9O1xufVxuXG4vKipcbiAqIEEgc21hbGwgdXRpbGl0eSB0byBoYW5kbGUgdGhlIGNvdXBsZSBvZiBsb2NhdGlvbnMgd2hlcmUgd2Ugd2FudCB0byBzY2hlZHVsZSBpZiBhIHNjaGVkdWxlciB3YXMgcHJvdmlkZWQsXG4gKiBidXQgd2UgZG9uJ3QgaWYgdGhlcmUgd2FzIG5vIHNjaGVkdWxlci5cbiAqL1xuZnVuY3Rpb24gbWF5YmVTY2hlZHVsZShzY2hlZHVsZXI6IFNjaGVkdWxlckxpa2UgfCB1bmRlZmluZWQsIGV4ZWN1dGU6ICgpID0+IHZvaWQsIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uKSB7XG4gIGlmIChzY2hlZHVsZXIpIHtcbiAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIGV4ZWN1dGUpO1xuICB9IGVsc2Uge1xuICAgIGV4ZWN1dGUoKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IE9ic2VydmFibGVJbnB1dCwgU2NoZWR1bGVyTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGV4ZWN1dGVTY2hlZHVsZSB9IGZyb20gJy4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlJztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuLyoqXG4gKiBBIHByb2Nlc3MgZW1ib2R5aW5nIHRoZSBnZW5lcmFsIFwibWVyZ2VcIiBzdHJhdGVneS4gVGhpcyBpcyB1c2VkIGluXG4gKiBgbWVyZ2VNYXBgIGFuZCBgbWVyZ2VTY2FuYCBiZWNhdXNlIHRoZSBsb2dpYyBpcyBvdGhlcndpc2UgbmVhcmx5IGlkZW50aWNhbC5cbiAqIEBwYXJhbSBzb3VyY2UgVGhlIG9yaWdpbmFsIHNvdXJjZSBvYnNlcnZhYmxlXG4gKiBAcGFyYW0gc3Vic2NyaWJlciBUaGUgY29uc3VtZXIgc3Vic2NyaWJlclxuICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3Rpb24gZnVuY3Rpb24gdG8gZ2V0IG91ciBpbm5lciBzb3VyY2VzXG4gKiBAcGFyYW0gY29uY3VycmVudCBUaGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgaW5uZXIgc3Vic2NyaXB0aW9uc1xuICogQHBhcmFtIG9uQmVmb3JlTmV4dCBBZGRpdGlvbmFsIGxvZ2ljIHRvIGFwcGx5IGJlZm9yZSBuZXh0aW5nIHRvIG91ciBjb25zdW1lclxuICogQHBhcmFtIGV4cGFuZCBJZiBgdHJ1ZWAgdGhpcyB3aWxsIHBlcmZvcm0gYW4gXCJleHBhbmRcIiBzdHJhdGVneSwgd2hpY2ggZGlmZmVycyBvbmx5XG4gKiBpbiB0aGF0IGl0IHJlY3Vyc2VzLCBhbmQgdGhlIGlubmVyIHN1YnNjcmlwdGlvbiBtdXN0IGJlIHNjaGVkdWxlLWFibGUuXG4gKiBAcGFyYW0gaW5uZXJTdWJTY2hlZHVsZXIgQSBzY2hlZHVsZXIgdG8gdXNlIHRvIHNjaGVkdWxlIGlubmVyIHN1YnNjcmlwdGlvbnMsXG4gKiB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGV4cGFuZCBzdHJhdGVneSwgbW9zdGx5LCBhbmQgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJuYWxzPFQsIFI+KFxuICBzb3VyY2U6IE9ic2VydmFibGU8VD4sXG4gIHN1YnNjcmliZXI6IFN1YnNjcmliZXI8Uj4sXG4gIHByb2plY3Q6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gT2JzZXJ2YWJsZUlucHV0PFI+LFxuICBjb25jdXJyZW50OiBudW1iZXIsXG4gIG9uQmVmb3JlTmV4dD86IChpbm5lclZhbHVlOiBSKSA9PiB2b2lkLFxuICBleHBhbmQ/OiBib29sZWFuLFxuICBpbm5lclN1YlNjaGVkdWxlcj86IFNjaGVkdWxlckxpa2UsXG4gIGFkZGl0aW9uYWxGaW5hbGl6ZXI/OiAoKSA9PiB2b2lkXG4pIHtcbiAgLy8gQnVmZmVyZWQgdmFsdWVzLCBpbiB0aGUgZXZlbnQgb2YgZ29pbmcgb3ZlciBvdXIgY29uY3VycmVuY3kgbGltaXRcbiAgY29uc3QgYnVmZmVyOiBUW10gPSBbXTtcbiAgLy8gVGhlIG51bWJlciBvZiBhY3RpdmUgaW5uZXIgc3Vic2NyaXB0aW9ucy5cbiAgbGV0IGFjdGl2ZSA9IDA7XG4gIC8vIEFuIGluZGV4IHRvIHBhc3MgdG8gb3VyIGFjY3VtdWxhdG9yIGZ1bmN0aW9uXG4gIGxldCBpbmRleCA9IDA7XG4gIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBvdXRlciBzb3VyY2UgaGFzIGNvbXBsZXRlZC5cbiAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ2hlY2tzIHRvIHNlZSBpZiB3ZSBjYW4gY29tcGxldGUgb3VyIHJlc3VsdCBvciBub3QuXG4gICAqL1xuICBjb25zdCBjaGVja0NvbXBsZXRlID0gKCkgPT4ge1xuICAgIC8vIElmIHRoZSBvdXRlciBoYXMgY29tcGxldGVkLCBhbmQgbm90aGluZyBpcyBsZWZ0IGluIHRoZSBidWZmZXIsXG4gICAgLy8gYW5kIHdlIGRvbid0IGhhdmUgYW55IGFjdGl2ZSBpbm5lciBzdWJzY3JpcHRpb25zLCB0aGVuIHdlIGNhblxuICAgIC8vIEVtaXQgdGhlIHN0YXRlIGFuZCBjb21wbGV0ZS5cbiAgICBpZiAoaXNDb21wbGV0ZSAmJiAhYnVmZmVyLmxlbmd0aCAmJiAhYWN0aXZlKSB7XG4gICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIElmIHdlJ3JlIHVuZGVyIG91ciBjb25jdXJyZW5jeSBsaW1pdCwganVzdCBzdGFydCB0aGUgaW5uZXIgc3Vic2NyaXB0aW9uLCBvdGhlcndpc2UgYnVmZmVyIGFuZCB3YWl0LlxuICBjb25zdCBvdXRlck5leHQgPSAodmFsdWU6IFQpID0+IChhY3RpdmUgPCBjb25jdXJyZW50ID8gZG9Jbm5lclN1Yih2YWx1ZSkgOiBidWZmZXIucHVzaCh2YWx1ZSkpO1xuXG4gIGNvbnN0IGRvSW5uZXJTdWIgPSAodmFsdWU6IFQpID0+IHtcbiAgICAvLyBJZiB3ZSdyZSBleHBhbmRpbmcsIHdlIG5lZWQgdG8gZW1pdCB0aGUgb3V0ZXIgdmFsdWVzIGFuZCB0aGUgaW5uZXIgdmFsdWVzXG4gICAgLy8gYXMgdGhlIGlubmVycyB3aWxsIFwiYmVjb21lIG91dGVyc1wiIGluIGEgd2F5IGFzIHRoZXkgYXJlIHJlY3Vyc2l2ZWx5IGZlZFxuICAgIC8vIGJhY2sgdG8gdGhlIHByb2plY3Rpb24gbWVjaGFuaXNtLlxuICAgIGV4cGFuZCAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUgYXMgYW55KTtcblxuICAgIC8vIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBzdWJzY3JpcHRpb25zIHNvIHdlIGNhbiB0cmFjayBpdFxuICAgIC8vIGFnYWluc3Qgb3VyIGNvbmN1cnJlbmN5IGxpbWl0IGxhdGVyLlxuICAgIGFjdGl2ZSsrO1xuXG4gICAgLy8gQSBmbGFnIHVzZWQgdG8gc2hvdyB0aGF0IHRoZSBpbm5lciBvYnNlcnZhYmxlIGNvbXBsZXRlZC5cbiAgICAvLyBUaGlzIGlzIGNoZWNrZWQgZHVyaW5nIGZpbmFsaXphdGlvbiB0byBzZWUgaWYgd2Ugc2hvdWxkXG4gICAgLy8gbW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBidWZmZXIsIGlmIHRoZXJlIGlzIG9uLlxuICAgIGxldCBpbm5lckNvbXBsZXRlID0gZmFsc2U7XG5cbiAgICAvLyBTdGFydCBvdXIgaW5uZXIgc3Vic2NyaXB0aW9uLlxuICAgIGlubmVyRnJvbShwcm9qZWN0KHZhbHVlLCBpbmRleCsrKSkuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAoaW5uZXJWYWx1ZSkgPT4ge1xuICAgICAgICAgIC8vIGBtZXJnZVNjYW5gIGhhcyBhZGRpdGlvbmFsIGhhbmRsaW5nIGhlcmUuIEZvciBleGFtcGxlXG4gICAgICAgICAgLy8gdGFraW5nIHRoZSBpbm5lciB2YWx1ZSBhbmQgdXBkYXRpbmcgc3RhdGUuXG4gICAgICAgICAgb25CZWZvcmVOZXh0Py4oaW5uZXJWYWx1ZSk7XG5cbiAgICAgICAgICBpZiAoZXhwYW5kKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSdyZSBleHBhbmRpbmcsIHRoZW4ganVzdCByZWN1cnNlIGJhY2sgdG8gb3VyIG91dGVyXG4gICAgICAgICAgICAvLyBoYW5kbGVyLiBJdCB3aWxsIGVtaXQgdGhlIHZhbHVlIGZpcnN0IHRoaW5nLlxuICAgICAgICAgICAgb3V0ZXJOZXh0KGlubmVyVmFsdWUgYXMgYW55KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBlbWl0IHRoZSBpbm5lciB2YWx1ZS5cbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChpbm5lclZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICAvLyBGbGFnIHRoYXQgd2UgaGF2ZSBjb21wbGV0ZWQsIHNvIHdlIGtub3cgdG8gY2hlY2sgdGhlIGJ1ZmZlclxuICAgICAgICAgIC8vIGR1cmluZyBmaW5hbGl6YXRpb24uXG4gICAgICAgICAgaW5uZXJDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEVycm9ycyBhcmUgcGFzc2VkIHRvIHRoZSBkZXN0aW5hdGlvbi5cbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgLy8gRHVyaW5nIGZpbmFsaXphdGlvbiwgaWYgdGhlIGlubmVyIGNvbXBsZXRlZCAoaXQgd2Fzbid0IGVycm9yZWQgb3JcbiAgICAgICAgICAvLyBjYW5jZWxsZWQpLCB0aGVuIHdlIHdhbnQgdG8gdHJ5IHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGJ1ZmZlciBpZlxuICAgICAgICAgIC8vIHRoZXJlIGlzIG9uZS5cbiAgICAgICAgICBpZiAoaW5uZXJDb21wbGV0ZSkge1xuICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byB3cmFwIHRoaXMgaW4gYSB0cnkvY2F0Y2ggYmVjYXVzZSBpdCBoYXBwZW5zIGR1cmluZ1xuICAgICAgICAgICAgLy8gZmluYWxpemF0aW9uLCBwb3NzaWJseSBhc3luY2hyb25vdXNseSwgYW5kIHdlIHdhbnQgdG8gcGFzc1xuICAgICAgICAgICAgLy8gYW55IGVycm9ycyB0aGF0IGhhcHBlbiAobGlrZSBpbiBhIHByb2plY3Rpb24gZnVuY3Rpb24pIHRvXG4gICAgICAgICAgICAvLyB0aGUgb3V0ZXIgU3Vic2NyaWJlci5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIElOTkVSIFNPVVJDRSBDT01QTEVURVxuICAgICAgICAgICAgICAvLyBEZWNyZW1lbnQgdGhlIGFjdGl2ZSBjb3VudCB0byBlbnN1cmUgdGhhdCB0aGUgbmV4dCB0aW1lXG4gICAgICAgICAgICAgIC8vIHdlIHRyeSB0byBjYWxsIGBkb0lubmVyU3ViYCwgdGhlIG51bWJlciBpcyBhY2N1cmF0ZS5cbiAgICAgICAgICAgICAgYWN0aXZlLS07XG4gICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgbW9yZSB2YWx1ZXMgaW4gdGhlIGJ1ZmZlciwgdHJ5IHRvIHByb2Nlc3MgdGhvc2VcbiAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgY2FsbCB3aWxsIGluY3JlbWVudCBgYWN0aXZlYCBhaGVhZCBvZiB0aGVcbiAgICAgICAgICAgICAgLy8gbmV4dCBjb25kaXRpb25hbCwgaWYgdGhlcmUgd2VyZSBhbnkgbW9yZSBpbm5lciBzdWJzY3JpcHRpb25zXG4gICAgICAgICAgICAgIC8vIHRvIHN0YXJ0LlxuICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCAmJiBhY3RpdmUgPCBjb25jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVmZmVyZWRWYWx1ZSA9IGJ1ZmZlci5zaGlmdCgpITtcbiAgICAgICAgICAgICAgICAvLyBQYXJ0aWN1bGFybHkgZm9yIGBleHBhbmRgLCB3ZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiBhIHNjaGVkdWxlciB3YXMgcHJvdmlkZWRcbiAgICAgICAgICAgICAgICAvLyBmb3Igd2hlbiB3ZSB3YW50IHRvIHN0YXJ0IG91ciBpbm5lciBzdWJzY3JpcHRpb24uIE90aGVyd2lzZSwgd2UganVzdCBzdGFydFxuICAgICAgICAgICAgICAgIC8vIGFyZSBuZXh0IGlubmVyIHN1YnNjcmlwdGlvbi5cbiAgICAgICAgICAgICAgICBpZiAoaW5uZXJTdWJTY2hlZHVsZXIpIHtcbiAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBpbm5lclN1YlNjaGVkdWxlciwgKCkgPT4gZG9Jbm5lclN1YihidWZmZXJlZFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRvSW5uZXJTdWIoYnVmZmVyZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gY29tcGxldGUsIGFuZCBjb21wbGV0ZSBpZiBzby5cbiAgICAgICAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9O1xuXG4gIC8vIFN1YnNjcmliZSB0byBvdXIgc291cmNlIG9ic2VydmFibGUuXG4gIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIG91dGVyTmV4dCwgKCkgPT4ge1xuICAgICAgLy8gT3V0ZXIgY29tcGxldGVkLCBtYWtlIGEgbm90ZSBvZiBpdCwgYW5kIGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gY29tcGxldGUgZXZlcnl0aGluZy5cbiAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgIH0pXG4gICk7XG5cbiAgLy8gQWRkaXRpb25hbCBmaW5hbGl6YXRpb24gKGZvciB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyB0b3JuIGRvd24pLlxuICAvLyBPdGhlciBmaW5hbGl6YXRpb24gaXMgYWRkZWQgaW1wbGljaXRseSB2aWEgc3Vic2NyaXB0aW9uIGFib3ZlLlxuICByZXR1cm4gKCkgPT4ge1xuICAgIGFkZGl0aW9uYWxGaW5hbGl6ZXI/LigpO1xuICB9O1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGVJbnB1dCwgT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2ZWRWYWx1ZU9mIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBtZXJnZUludGVybmFscyB9IGZyb20gJy4vbWVyZ2VJbnRlcm5hbHMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5cbi8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTWFwPFQsIE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8YW55Pj4oXG4gIHByb2plY3Q6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gTyxcbiAgY29uY3VycmVudD86IG51bWJlclxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuLyoqIEBkZXByZWNhdGVkIFRoZSBgcmVzdWx0U2VsZWN0b3JgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBhbiBpbm5lciBgbWFwYCBpbnN0ZWFkLiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9yZXN1bHRTZWxlY3RvciAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTWFwPFQsIE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8YW55Pj4oXG4gIHByb2plY3Q6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gTyxcbiAgcmVzdWx0U2VsZWN0b3I6IHVuZGVmaW5lZCxcbiAgY29uY3VycmVudD86IG51bWJlclxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuLyoqIEBkZXByZWNhdGVkIFRoZSBgcmVzdWx0U2VsZWN0b3JgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBhbiBpbm5lciBgbWFwYCBpbnN0ZWFkLiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9yZXN1bHRTZWxlY3RvciAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTWFwPFQsIFIsIE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8YW55Pj4oXG4gIHByb2plY3Q6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gTyxcbiAgcmVzdWx0U2VsZWN0b3I6IChvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBPYnNlcnZlZFZhbHVlT2Y8Tz4sIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKSA9PiBSLFxuICBjb25jdXJyZW50PzogbnVtYmVyXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFI+O1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cblxuLyoqXG4gKiBQcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byBhbiBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBpbiB0aGUgb3V0cHV0XG4gKiBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5NYXBzIGVhY2ggdmFsdWUgdG8gYW4gT2JzZXJ2YWJsZSwgdGhlbiBmbGF0dGVucyBhbGwgb2ZcbiAqIHRoZXNlIGlubmVyIE9ic2VydmFibGVzIHVzaW5nIHtAbGluayBtZXJnZUFsbH0uPC9zcGFuPlxuICpcbiAqICFbXShtZXJnZU1hcC5wbmcpXG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgYmFzZWQgb24gYXBwbHlpbmcgYSBmdW5jdGlvbiB0aGF0IHlvdVxuICogc3VwcGx5IHRvIGVhY2ggaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgd2hlcmUgdGhhdCBmdW5jdGlvblxuICogcmV0dXJucyBhbiBPYnNlcnZhYmxlLCBhbmQgdGhlbiBtZXJnaW5nIHRob3NlIHJlc3VsdGluZyBPYnNlcnZhYmxlcyBhbmRcbiAqIGVtaXR0aW5nIHRoZSByZXN1bHRzIG9mIHRoaXMgbWVyZ2VyLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBNYXAgYW5kIGZsYXR0ZW4gZWFjaCBsZXR0ZXIgdG8gYW4gT2JzZXJ2YWJsZSB0aWNraW5nIGV2ZXJ5IDEgc2Vjb25kXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBtZXJnZU1hcCwgaW50ZXJ2YWwsIG1hcCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGxldHRlcnMgPSBvZignYScsICdiJywgJ2MnKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGxldHRlcnMucGlwZShcbiAqICAgbWVyZ2VNYXAoeCA9PiBpbnRlcnZhbCgxMDAwKS5waXBlKG1hcChpID0+IHggKyBpKSkpXG4gKiApO1xuICpcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gUmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nOlxuICogLy8gYTBcbiAqIC8vIGIwXG4gKiAvLyBjMFxuICogLy8gYTFcbiAqIC8vIGIxXG4gKiAvLyBjMVxuICogLy8gY29udGludWVzIHRvIGxpc3QgYSwgYiwgYyBldmVyeSBzZWNvbmQgd2l0aCByZXNwZWN0aXZlIGFzY2VuZGluZyBpbnRlZ2Vyc1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwfVxuICogQHNlZSB7QGxpbmsgZXhoYXVzdE1hcH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcFRvfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VTY2FufVxuICogQHNlZSB7QGxpbmsgc3dpdGNoTWFwfVxuICpcbiAqIEBwYXJhbSBwcm9qZWN0IEEgZnVuY3Rpb24gdGhhdCwgd2hlbiBhcHBsaWVkIHRvIGFuIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLCByZXR1cm5zIGFuIE9ic2VydmFibGUuXG4gKiBAcGFyYW0gY29uY3VycmVudCBNYXhpbXVtIG51bWJlciBvZiBgT2JzZXJ2YWJsZUlucHV0YHMgYmVpbmcgc3Vic2NyaWJlZCB0byBjb25jdXJyZW50bHkuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mXG4gKiBhcHBseWluZyB0aGUgcHJvamVjdGlvbiBmdW5jdGlvbiAoYW5kIHRoZSBvcHRpb25hbCBkZXByZWNhdGVkXG4gKiBgcmVzdWx0U2VsZWN0b3JgKSB0byBlYWNoIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYW5kIG1lcmdpbmdcbiAqIHRoZSByZXN1bHRzIG9mIHRoZSBPYnNlcnZhYmxlcyBvYnRhaW5lZCBmcm9tIHRoaXMgdHJhbnNmb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU1hcDxULCBSLCBPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PGFueT4+KFxuICBwcm9qZWN0OiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IE8sXG4gIHJlc3VsdFNlbGVjdG9yPzogKChvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBPYnNlcnZlZFZhbHVlT2Y8Tz4sIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKSA9PiBSKSB8IG51bWJlcixcbiAgY29uY3VycmVudDogbnVtYmVyID0gSW5maW5pdHlcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgT2JzZXJ2ZWRWYWx1ZU9mPE8+IHwgUj4ge1xuICBpZiAoaXNGdW5jdGlvbihyZXN1bHRTZWxlY3RvcikpIHtcbiAgICAvLyBERVBSRUNBVEVEIFBBVEhcbiAgICByZXR1cm4gbWVyZ2VNYXAoKGEsIGkpID0+IG1hcCgoYjogYW55LCBpaTogbnVtYmVyKSA9PiByZXN1bHRTZWxlY3RvcihhLCBiLCBpLCBpaSkpKGlubmVyRnJvbShwcm9qZWN0KGEsIGkpKSksIGNvbmN1cnJlbnQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiByZXN1bHRTZWxlY3RvciA9PT0gJ251bWJlcicpIHtcbiAgICBjb25jdXJyZW50ID0gcmVzdWx0U2VsZWN0b3I7XG4gIH1cblxuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQpKTtcbn1cbiIsICJpbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJy4vbWVyZ2VNYXAnO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGVJbnB1dCwgT2JzZXJ2ZWRWYWx1ZU9mIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgaGlnaGVyLW9yZGVyIE9ic2VydmFibGUgaW50byBhIGZpcnN0LW9yZGVyIE9ic2VydmFibGUgd2hpY2hcbiAqIGNvbmN1cnJlbnRseSBkZWxpdmVycyBhbGwgdmFsdWVzIHRoYXQgYXJlIGVtaXR0ZWQgb24gdGhlIGlubmVyIE9ic2VydmFibGVzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5GbGF0dGVucyBhbiBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzLjwvc3Bhbj5cbiAqXG4gKiAhW10obWVyZ2VBbGwucG5nKVxuICpcbiAqIGBtZXJnZUFsbGAgc3Vic2NyaWJlcyB0byBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgT2JzZXJ2YWJsZXMsIGFsc28ga25vd24gYXNcbiAqIGEgaGlnaGVyLW9yZGVyIE9ic2VydmFibGUuIEVhY2ggdGltZSBpdCBvYnNlcnZlcyBvbmUgb2YgdGhlc2UgZW1pdHRlZCBpbm5lclxuICogT2JzZXJ2YWJsZXMsIGl0IHN1YnNjcmliZXMgdG8gdGhhdCBhbmQgZGVsaXZlcnMgYWxsIHRoZSB2YWx1ZXMgZnJvbSB0aGVcbiAqIGlubmVyIE9ic2VydmFibGUgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLiBUaGUgb3V0cHV0IE9ic2VydmFibGUgb25seVxuICogY29tcGxldGVzIG9uY2UgYWxsIGlubmVyIE9ic2VydmFibGVzIGhhdmUgY29tcGxldGVkLiBBbnkgZXJyb3IgZGVsaXZlcmVkIGJ5XG4gKiBhIGlubmVyIE9ic2VydmFibGUgd2lsbCBiZSBpbW1lZGlhdGVseSBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIFNwYXduIGEgbmV3IGludGVydmFsIE9ic2VydmFibGUgZm9yIGVhY2ggY2xpY2sgZXZlbnQsIGFuZCBibGVuZCB0aGVpciBvdXRwdXRzIGFzIG9uZSBPYnNlcnZhYmxlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgbWFwLCBpbnRlcnZhbCwgbWVyZ2VBbGwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgaGlnaGVyT3JkZXIgPSBjbGlja3MucGlwZShtYXAoKCkgPT4gaW50ZXJ2YWwoMTAwMCkpKTtcbiAqIGNvbnN0IGZpcnN0T3JkZXIgPSBoaWdoZXJPcmRlci5waXBlKG1lcmdlQWxsKCkpO1xuICpcbiAqIGZpcnN0T3JkZXIuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogQ291bnQgZnJvbSAwIHRvIDkgZXZlcnkgc2Vjb25kIGZvciBlYWNoIGNsaWNrLCBidXQgb25seSBhbGxvdyAyIGNvbmN1cnJlbnQgdGltZXJzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgbWFwLCBpbnRlcnZhbCwgdGFrZSwgbWVyZ2VBbGwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgaGlnaGVyT3JkZXIgPSBjbGlja3MucGlwZShcbiAqICAgbWFwKCgpID0+IGludGVydmFsKDEwMDApLnBpcGUodGFrZSgxMCkpKVxuICogKTtcbiAqIGNvbnN0IGZpcnN0T3JkZXIgPSBoaWdoZXJPcmRlci5waXBlKG1lcmdlQWxsKDIpKTtcbiAqXG4gKiBmaXJzdE9yZGVyLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGNvbWJpbmVMYXRlc3RBbGx9XG4gKiBAc2VlIHtAbGluayBjb25jYXRBbGx9XG4gKiBAc2VlIHtAbGluayBleGhhdXN0QWxsfVxuICogQHNlZSB7QGxpbmsgbWVyZ2V9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwVG99XG4gKiBAc2VlIHtAbGluayBtZXJnZVNjYW59XG4gKiBAc2VlIHtAbGluayBzd2l0Y2hBbGx9XG4gKiBAc2VlIHtAbGluayBzd2l0Y2hNYXB9XG4gKiBAc2VlIHtAbGluayB6aXBBbGx9XG4gKlxuICogQHBhcmFtIGNvbmN1cnJlbnQgTWF4aW11bSBudW1iZXIgb2YgaW5uZXIgT2JzZXJ2YWJsZXMgYmVpbmcgc3Vic2NyaWJlZCB0b1xuICogY29uY3VycmVudGx5LlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdmFsdWVzIGNvbWluZyBmcm9tXG4gKiBhbGwgdGhlIGlubmVyIE9ic2VydmFibGVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbGw8TyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+Pihjb25jdXJyZW50OiBudW1iZXIgPSBJbmZpbml0eSk6IE9wZXJhdG9yRnVuY3Rpb248TywgT2JzZXJ2ZWRWYWx1ZU9mPE8+PiB7XG4gIHJldHVybiBtZXJnZU1hcChpZGVudGl0eSwgY29uY3VycmVudCk7XG59XG4iLCAiaW1wb3J0IHsgbWVyZ2VBbGwgfSBmcm9tICcuL21lcmdlQWxsJztcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGVJbnB1dCwgT2JzZXJ2ZWRWYWx1ZU9mIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgaGlnaGVyLW9yZGVyIE9ic2VydmFibGUgaW50byBhIGZpcnN0LW9yZGVyIE9ic2VydmFibGUgYnlcbiAqIGNvbmNhdGVuYXRpbmcgdGhlIGlubmVyIE9ic2VydmFibGVzIGluIG9yZGVyLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5GbGF0dGVucyBhbiBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzIGJ5IHB1dHRpbmcgb25lXG4gKiBpbm5lciBPYnNlcnZhYmxlIGFmdGVyIHRoZSBvdGhlci48L3NwYW4+XG4gKlxuICogIVtdKGNvbmNhdEFsbC5zdmcpXG4gKlxuICogSm9pbnMgZXZlcnkgT2JzZXJ2YWJsZSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgKGEgaGlnaGVyLW9yZGVyIE9ic2VydmFibGUpLCBpblxuICogYSBzZXJpYWwgZmFzaGlvbi4gSXQgc3Vic2NyaWJlcyB0byBlYWNoIGlubmVyIE9ic2VydmFibGUgb25seSBhZnRlciB0aGVcbiAqIHByZXZpb3VzIGlubmVyIE9ic2VydmFibGUgaGFzIGNvbXBsZXRlZCwgYW5kIG1lcmdlcyBhbGwgb2YgdGhlaXIgdmFsdWVzIGludG9cbiAqIHRoZSByZXR1cm5lZCBvYnNlcnZhYmxlLlxuICpcbiAqIF9fV2FybmluZzpfXyBJZiB0aGUgc291cmNlIE9ic2VydmFibGUgZW1pdHMgT2JzZXJ2YWJsZXMgcXVpY2tseSBhbmRcbiAqIGVuZGxlc3NseSwgYW5kIHRoZSBpbm5lciBPYnNlcnZhYmxlcyBpdCBlbWl0cyBnZW5lcmFsbHkgY29tcGxldGUgc2xvd2VyIHRoYW5cbiAqIHRoZSBzb3VyY2UgZW1pdHMsIHlvdSBjYW4gcnVuIGludG8gbWVtb3J5IGlzc3VlcyBhcyB0aGUgaW5jb21pbmcgT2JzZXJ2YWJsZXNcbiAqIGNvbGxlY3QgaW4gYW4gdW5ib3VuZGVkIGJ1ZmZlci5cbiAqXG4gKiBOb3RlOiBgY29uY2F0QWxsYCBpcyBlcXVpdmFsZW50IHRvIGBtZXJnZUFsbGAgd2l0aCBjb25jdXJyZW5jeSBwYXJhbWV0ZXIgc2V0XG4gKiB0byBgMWAuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIEZvciBlYWNoIGNsaWNrIGV2ZW50LCB0aWNrIGV2ZXJ5IHNlY29uZCBmcm9tIDAgdG8gMywgd2l0aCBubyBjb25jdXJyZW5jeVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIG1hcCwgaW50ZXJ2YWwsIHRha2UsIGNvbmNhdEFsbCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCBoaWdoZXJPcmRlciA9IGNsaWNrcy5waXBlKFxuICogICBtYXAoKCkgPT4gaW50ZXJ2YWwoMTAwMCkucGlwZSh0YWtlKDQpKSlcbiAqICk7XG4gKiBjb25zdCBmaXJzdE9yZGVyID0gaGlnaGVyT3JkZXIucGlwZShjb25jYXRBbGwoKSk7XG4gKiBmaXJzdE9yZGVyLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gKiAvLyAocmVzdWx0cyBhcmUgbm90IGNvbmN1cnJlbnQpXG4gKiAvLyBGb3IgZXZlcnkgY2xpY2sgb24gdGhlIFwiZG9jdW1lbnRcIiBpdCB3aWxsIGVtaXQgdmFsdWVzIDAgdG8gMyBzcGFjZWRcbiAqIC8vIG9uIGEgMTAwMG1zIGludGVydmFsXG4gKiAvLyBvbmUgY2xpY2sgPSAxMDAwbXMtPiAwIC0xMDAwbXMtPiAxIC0xMDAwbXMtPiAyIC0xMDAwbXMtPiAzXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBjb21iaW5lTGF0ZXN0QWxsfVxuICogQHNlZSB7QGxpbmsgY29uY2F0fVxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwfVxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwVG99XG4gKiBAc2VlIHtAbGluayBleGhhdXN0QWxsfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKiBAc2VlIHtAbGluayBzd2l0Y2hBbGx9XG4gKiBAc2VlIHtAbGluayBzd2l0Y2hNYXB9XG4gKiBAc2VlIHtAbGluayB6aXBBbGx9XG4gKlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIGVtaXR0aW5nIHZhbHVlcyBmcm9tIGFsbCB0aGVcbiAqIGlubmVyIE9ic2VydmFibGVzIGNvbmNhdGVuYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdEFsbDxPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PGFueT4+KCk6IE9wZXJhdG9yRnVuY3Rpb248TywgT2JzZXJ2ZWRWYWx1ZU9mPE8+PiB7XG4gIHJldHVybiBtZXJnZUFsbCgxKTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXRUdXBsZSwgU2NoZWR1bGVyTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGNvbmNhdEFsbCB9IGZyb20gJy4uL29wZXJhdG9ycy9jb25jYXRBbGwnO1xuaW1wb3J0IHsgcG9wU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9hcmdzJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuL2Zyb20nO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0PFQgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10+KC4uLmlucHV0czogWy4uLk9ic2VydmFibGVJbnB1dFR1cGxlPFQ+XSk6IE9ic2VydmFibGU8VFtudW1iZXJdPjtcbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQ8VCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oXG4gIC4uLmlucHV0c0FuZFNjaGVkdWxlcjogWy4uLk9ic2VydmFibGVJbnB1dFR1cGxlPFQ+LCBTY2hlZHVsZXJMaWtlXVxuKTogT2JzZXJ2YWJsZTxUW251bWJlcl0+O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb3V0cHV0IE9ic2VydmFibGUgd2hpY2ggc2VxdWVudGlhbGx5IGVtaXRzIGFsbCB2YWx1ZXMgZnJvbSB0aGUgZmlyc3QgZ2l2ZW5cbiAqIE9ic2VydmFibGUgYW5kIHRoZW4gbW92ZXMgb24gdG8gdGhlIG5leHQuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbmNhdGVuYXRlcyBtdWx0aXBsZSBPYnNlcnZhYmxlcyB0b2dldGhlciBieVxuICogc2VxdWVudGlhbGx5IGVtaXR0aW5nIHRoZWlyIHZhbHVlcywgb25lIE9ic2VydmFibGUgYWZ0ZXIgdGhlIG90aGVyLjwvc3Bhbj5cbiAqXG4gKiAhW10oY29uY2F0LnBuZylcbiAqXG4gKiBgY29uY2F0YCBqb2lucyBtdWx0aXBsZSBPYnNlcnZhYmxlcyB0b2dldGhlciwgYnkgc3Vic2NyaWJpbmcgdG8gdGhlbSBvbmUgYXQgYSB0aW1lIGFuZFxuICogbWVyZ2luZyB0aGVpciByZXN1bHRzIGludG8gdGhlIG91dHB1dCBPYnNlcnZhYmxlLiBZb3UgY2FuIHBhc3MgZWl0aGVyIGFuIGFycmF5IG9mXG4gKiBPYnNlcnZhYmxlcywgb3IgcHV0IHRoZW0gZGlyZWN0bHkgYXMgYXJndW1lbnRzLiBQYXNzaW5nIGFuIGVtcHR5IGFycmF5IHdpbGwgcmVzdWx0XG4gKiBpbiBPYnNlcnZhYmxlIHRoYXQgY29tcGxldGVzIGltbWVkaWF0ZWx5LlxuICpcbiAqIGBjb25jYXRgIHdpbGwgc3Vic2NyaWJlIHRvIGZpcnN0IGlucHV0IE9ic2VydmFibGUgYW5kIGVtaXQgYWxsIGl0cyB2YWx1ZXMsIHdpdGhvdXRcbiAqIGNoYW5naW5nIG9yIGFmZmVjdGluZyB0aGVtIGluIGFueSB3YXkuIFdoZW4gdGhhdCBPYnNlcnZhYmxlIGNvbXBsZXRlcywgaXQgd2lsbFxuICogc3Vic2NyaWJlIHRvIHRoZW4gbmV4dCBPYnNlcnZhYmxlIHBhc3NlZCBhbmQsIGFnYWluLCBlbWl0IGl0cyB2YWx1ZXMuIFRoaXMgd2lsbCBiZVxuICogcmVwZWF0ZWQsIHVudGlsIHRoZSBvcGVyYXRvciBydW5zIG91dCBvZiBPYnNlcnZhYmxlcy4gV2hlbiBsYXN0IGlucHV0IE9ic2VydmFibGUgY29tcGxldGVzLFxuICogYGNvbmNhdGAgd2lsbCBjb21wbGV0ZSBhcyB3ZWxsLiBBdCBhbnkgZ2l2ZW4gbW9tZW50IG9ubHkgb25lIE9ic2VydmFibGUgcGFzc2VkIHRvIG9wZXJhdG9yXG4gKiBlbWl0cyB2YWx1ZXMuIElmIHlvdSB3b3VsZCBsaWtlIHRvIGVtaXQgdmFsdWVzIGZyb20gcGFzc2VkIE9ic2VydmFibGVzIGNvbmN1cnJlbnRseSwgY2hlY2sgb3V0XG4gKiB7QGxpbmsgbWVyZ2V9IGluc3RlYWQsIGVzcGVjaWFsbHkgd2l0aCBvcHRpb25hbCBgY29uY3VycmVudGAgcGFyYW1ldGVyLiBBcyBhIG1hdHRlciBvZiBmYWN0LFxuICogYGNvbmNhdGAgaXMgYW4gZXF1aXZhbGVudCBvZiBgbWVyZ2VgIG9wZXJhdG9yIHdpdGggYGNvbmN1cnJlbnRgIHBhcmFtZXRlciBzZXQgdG8gYDFgLlxuICpcbiAqIE5vdGUgdGhhdCBpZiBzb21lIGlucHV0IE9ic2VydmFibGUgbmV2ZXIgY29tcGxldGVzLCBgY29uY2F0YCB3aWxsIGFsc28gbmV2ZXIgY29tcGxldGVcbiAqIGFuZCBPYnNlcnZhYmxlcyBmb2xsb3dpbmcgdGhlIG9uZSB0aGF0IGRpZCBub3QgY29tcGxldGUgd2lsbCBuZXZlciBiZSBzdWJzY3JpYmVkLiBPbiB0aGUgb3RoZXJcbiAqIGhhbmQsIGlmIHNvbWUgT2JzZXJ2YWJsZSBzaW1wbHkgY29tcGxldGVzIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHN1YnNjcmliZWQsIGl0IHdpbGwgYmVcbiAqIGludmlzaWJsZSBmb3IgYGNvbmNhdGAsIHdoaWNoIHdpbGwganVzdCBtb3ZlIG9uIHRvIHRoZSBuZXh0IE9ic2VydmFibGUuXG4gKlxuICogSWYgYW55IE9ic2VydmFibGUgaW4gY2hhaW4gZXJyb3JzLCBpbnN0ZWFkIG9mIHBhc3NpbmcgY29udHJvbCB0byB0aGUgbmV4dCBPYnNlcnZhYmxlLFxuICogYGNvbmNhdGAgd2lsbCBlcnJvciBpbW1lZGlhdGVseSBhcyB3ZWxsLiBPYnNlcnZhYmxlcyB0aGF0IHdvdWxkIGJlIHN1YnNjcmliZWQgYWZ0ZXJcbiAqIHRoZSBvbmUgdGhhdCBlbWl0dGVkIGVycm9yLCBuZXZlciB3aWxsLlxuICpcbiAqIElmIHlvdSBwYXNzIHRvIGBjb25jYXRgIHRoZSBzYW1lIE9ic2VydmFibGUgbWFueSB0aW1lcywgaXRzIHN0cmVhbSBvZiB2YWx1ZXNcbiAqIHdpbGwgYmUgXCJyZXBsYXllZFwiIG9uIGV2ZXJ5IHN1YnNjcmlwdGlvbiwgd2hpY2ggbWVhbnMgeW91IGNhbiByZXBlYXQgZ2l2ZW4gT2JzZXJ2YWJsZVxuICogYXMgbWFueSB0aW1lcyBhcyB5b3UgbGlrZS4gSWYgcGFzc2luZyB0aGUgc2FtZSBPYnNlcnZhYmxlIHRvIGBjb25jYXRgIDEwMDAgdGltZXMgYmVjb21lcyB0ZWRpb3VzLFxuICogeW91IGNhbiBhbHdheXMgdXNlIHtAbGluayByZXBlYXR9LlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogQ29uY2F0ZW5hdGUgYSB0aW1lciBjb3VudGluZyBmcm9tIDAgdG8gMyB3aXRoIGEgc3luY2hyb25vdXMgc2VxdWVuY2UgZnJvbSAxIHRvIDEwXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCB0YWtlLCByYW5nZSwgY29uY2F0IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgdGltZXIgPSBpbnRlcnZhbCgxMDAwKS5waXBlKHRha2UoNCkpO1xuICogY29uc3Qgc2VxdWVuY2UgPSByYW5nZSgxLCAxMCk7XG4gKiBjb25zdCByZXN1bHQgPSBjb25jYXQodGltZXIsIHNlcXVlbmNlKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gcmVzdWx0cyBpbjpcbiAqIC8vIDAgLTEwMDBtcy0+IDEgLTEwMDBtcy0+IDIgLTEwMDBtcy0+IDMgLWltbWVkaWF0ZS0+IDEgLi4uIDEwXG4gKiBgYGBcbiAqXG4gKiBDb25jYXRlbmF0ZSAzIE9ic2VydmFibGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCB0YWtlLCBjb25jYXQgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCB0aW1lcjEgPSBpbnRlcnZhbCgxMDAwKS5waXBlKHRha2UoMTApKTtcbiAqIGNvbnN0IHRpbWVyMiA9IGludGVydmFsKDIwMDApLnBpcGUodGFrZSg2KSk7XG4gKiBjb25zdCB0aW1lcjMgPSBpbnRlcnZhbCg1MDApLnBpcGUodGFrZSgxMCkpO1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGNvbmNhdCh0aW1lcjEsIHRpbWVyMiwgdGltZXIzKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gcmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nOlxuICogLy8gKFByaW50cyB0byBjb25zb2xlIHNlcXVlbnRpYWxseSlcbiAqIC8vIC0xMDAwbXMtPiAwIC0xMDAwbXMtPiAxIC0xMDAwbXMtPiAuLi4gOVxuICogLy8gLTIwMDBtcy0+IDAgLTIwMDBtcy0+IDEgLTIwMDBtcy0+IC4uLiA1XG4gKiAvLyAtNTAwbXMtPiAwIC01MDBtcy0+IDEgLTUwMG1zLT4gLi4uIDlcbiAqIGBgYFxuICpcbiAqIENvbmNhdGVuYXRlIHRoZSBzYW1lIE9ic2VydmFibGUgdG8gcmVwZWF0IGl0XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCB0YWtlLCBjb25jYXQgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCB0aW1lciA9IGludGVydmFsKDEwMDApLnBpcGUodGFrZSgyKSk7XG4gKlxuICogY29uY2F0KHRpbWVyLCB0aW1lcikgLy8gY29uY2F0ZW5hdGluZyB0aGUgc2FtZSBPYnNlcnZhYmxlIVxuICogICAuc3Vic2NyaWJlKHtcbiAqICAgICBuZXh0OiB2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSksXG4gKiAgICAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUubG9nKCcuLi5hbmQgaXQgaXMgZG9uZSEnKVxuICogICB9KTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8gMCBhZnRlciAxc1xuICogLy8gMSBhZnRlciAyc1xuICogLy8gMCBhZnRlciAzc1xuICogLy8gMSBhZnRlciA0c1xuICogLy8gJy4uLmFuZCBpdCBpcyBkb25lIScgYWxzbyBhZnRlciA0c1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgY29uY2F0QWxsfVxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwfVxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwVG99XG4gKiBAc2VlIHtAbGluayBzdGFydFdpdGh9XG4gKiBAc2VlIHtAbGluayBlbmRXaXRofVxuICpcbiAqIEBwYXJhbSBhcmdzIGBPYnNlcnZhYmxlSW5wdXRgcyB0byBjb25jYXRlbmF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzOiBhbnlbXSk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICByZXR1cm4gY29uY2F0QWxsKCkoZnJvbShhcmdzLCBwb3BTY2hlZHVsZXIoYXJncykpKTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBPYnNlcnZlZFZhbHVlT2YsIE9ic2VydmFibGVJbnB1dCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4vaW5uZXJGcm9tJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgdGhhdCwgb24gc3Vic2NyaWJlLCBjYWxscyBhbiBPYnNlcnZhYmxlIGZhY3RvcnkgdG9cbiAqIG1ha2UgYW4gT2JzZXJ2YWJsZSBmb3IgZWFjaCBuZXcgT2JzZXJ2ZXIuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNyZWF0ZXMgdGhlIE9ic2VydmFibGUgbGF6aWx5LCB0aGF0IGlzLCBvbmx5IHdoZW4gaXRcbiAqIGlzIHN1YnNjcmliZWQuXG4gKiA8L3NwYW4+XG4gKlxuICogIVtdKGRlZmVyLnBuZylcbiAqXG4gKiBgZGVmZXJgIGFsbG93cyB5b3UgdG8gY3JlYXRlIGFuIE9ic2VydmFibGUgb25seSB3aGVuIHRoZSBPYnNlcnZlclxuICogc3Vic2NyaWJlcy4gSXQgd2FpdHMgdW50aWwgYW4gT2JzZXJ2ZXIgc3Vic2NyaWJlcyB0byBpdCwgY2FsbHMgdGhlIGdpdmVuXG4gKiBmYWN0b3J5IGZ1bmN0aW9uIHRvIGdldCBhbiBPYnNlcnZhYmxlIC0tIHdoZXJlIGEgZmFjdG9yeSBmdW5jdGlvbiB0eXBpY2FsbHlcbiAqIGdlbmVyYXRlcyBhIG5ldyBPYnNlcnZhYmxlIC0tIGFuZCBzdWJzY3JpYmVzIHRoZSBPYnNlcnZlciB0byB0aGlzIE9ic2VydmFibGUuXG4gKiBJbiBjYXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIHJldHVybnMgYSBmYWxzeSB2YWx1ZSwgdGhlbiBFTVBUWSBpcyB1c2VkIGFzXG4gKiBPYnNlcnZhYmxlIGluc3RlYWQuIExhc3QgYnV0IG5vdCBsZWFzdCwgYW4gZXhjZXB0aW9uIGR1cmluZyB0aGUgZmFjdG9yeVxuICogZnVuY3Rpb24gY2FsbCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgT2JzZXJ2ZXIgYnkgY2FsbGluZyBgZXJyb3JgLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBTdWJzY3JpYmUgdG8gZWl0aGVyIGFuIE9ic2VydmFibGUgb2YgY2xpY2tzIG9yIGFuIE9ic2VydmFibGUgb2YgaW50ZXJ2YWwsIGF0IHJhbmRvbVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBkZWZlciwgZnJvbUV2ZW50LCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGNsaWNrc09ySW50ZXJ2YWwgPSBkZWZlcigoKSA9PiB7XG4gKiAgIHJldHVybiBNYXRoLnJhbmRvbSgpID4gMC41XG4gKiAgICAgPyBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpXG4gKiAgICAgOiBpbnRlcnZhbCgxMDAwKTtcbiAqIH0pO1xuICogY2xpY2tzT3JJbnRlcnZhbC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gUmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nIGJlaGF2aW9yOlxuICogLy8gSWYgdGhlIHJlc3VsdCBvZiBNYXRoLnJhbmRvbSgpIGlzIGdyZWF0ZXIgdGhhbiAwLjUgaXQgd2lsbCBsaXN0ZW5cbiAqIC8vIGZvciBjbGlja3MgYW55d2hlcmUgb24gdGhlIFwiZG9jdW1lbnRcIjsgd2hlbiBkb2N1bWVudCBpcyBjbGlja2VkIGl0XG4gKiAvLyB3aWxsIGxvZyBhIE1vdXNlRXZlbnQgb2JqZWN0IHRvIHRoZSBjb25zb2xlLiBJZiB0aGUgcmVzdWx0IGlzIGxlc3NcbiAqIC8vIHRoYW4gMC41IGl0IHdpbGwgZW1pdCBhc2NlbmRpbmcgbnVtYmVycywgb25lIGV2ZXJ5IHNlY29uZCgxMDAwbXMpLlxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgT2JzZXJ2YWJsZX1cbiAqXG4gKiBAcGFyYW0gb2JzZXJ2YWJsZUZhY3RvcnkgVGhlIE9ic2VydmFibGUgZmFjdG9yeSBmdW5jdGlvbiB0byBpbnZva2UgZm9yIGVhY2hcbiAqIE9ic2VydmVyIHRoYXQgc3Vic2NyaWJlcyB0byB0aGUgb3V0cHV0IE9ic2VydmFibGUuIE1heSBhbHNvIHJldHVybiBhbnlcbiAqIGBPYnNlcnZhYmxlSW5wdXRgLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCBvbiB0aGUgZmx5IHRvIGFuIE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIEFuIE9ic2VydmFibGUgd2hvc2UgT2JzZXJ2ZXJzJyBzdWJzY3JpcHRpb25zIHRyaWdnZXIgYW4gaW52b2NhdGlvbiBvZiB0aGVcbiAqIGdpdmVuIE9ic2VydmFibGUgZmFjdG9yeSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmVyPFIgZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8YW55Pj4ob2JzZXJ2YWJsZUZhY3Rvcnk6ICgpID0+IFIpOiBPYnNlcnZhYmxlPE9ic2VydmVkVmFsdWVPZjxSPj4ge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGU8T2JzZXJ2ZWRWYWx1ZU9mPFI+Pigoc3Vic2NyaWJlcikgPT4ge1xuICAgIGlubmVyRnJvbShvYnNlcnZhYmxlRmFjdG9yeSgpKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IENvbm5lY3RhYmxlLCBPYnNlcnZhYmxlSW5wdXQsIFN1YmplY3RMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnLi9kZWZlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGFibGVDb25maWc8VD4ge1xuICAvKipcbiAgICogQSBmYWN0b3J5IGZ1bmN0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBTdWJqZWN0IHRocm91Z2ggd2hpY2ggdGhlIHNvdXJjZVxuICAgKiBpcyBtdWx0aWNhc3QuIEJ5IGRlZmF1bHQgdGhpcyBjcmVhdGVzIGEge0BsaW5rIFN1YmplY3R9LlxuICAgKi9cbiAgY29ubmVjdG9yOiAoKSA9PiBTdWJqZWN0TGlrZTxUPjtcbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSByZXN1bHRpbmcgb2JzZXJ2YWJsZSB3aWxsIHJlc2V0IGludGVybmFsIHN0YXRlIHVwb24gZGlzY29ubmVjdGlvblxuICAgKiBhbmQgcmV0dXJuIHRvIGEgXCJjb2xkXCIgc3RhdGUuIFRoaXMgYWxsb3dzIHRoZSByZXN1bHRpbmcgb2JzZXJ2YWJsZSB0byBiZVxuICAgKiByZWNvbm5lY3RlZC5cbiAgICogSWYgZmFsc2UsIHVwb24gZGlzY29ubmVjdGlvbiwgdGhlIGNvbm5lY3Rpbmcgc3ViamVjdCB3aWxsIHJlbWFpbiB0aGVcbiAgICogY29ubmVjdGluZyBzdWJqZWN0LCBtZWFuaW5nIHRoZSByZXN1bHRpbmcgb2JzZXJ2YWJsZSB3aWxsIG5vdCBnbyBcImNvbGRcIiBhZ2FpbixcbiAgICogYW5kIHN1YnNlcXVlbnQgcmVwZWF0cyBvciByZXN1YnNjcmlwdGlvbnMgd2lsbCByZXN1YnNjcmliZSB0byB0aGF0IHNhbWUgc3ViamVjdC5cbiAgICovXG4gIHJlc2V0T25EaXNjb25uZWN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBgY29ubmVjdGFibGVgLlxuICovXG5jb25zdCBERUZBVUxUX0NPTkZJRzogQ29ubmVjdGFibGVDb25maWc8dW5rbm93bj4gPSB7XG4gIGNvbm5lY3RvcjogKCkgPT4gbmV3IFN1YmplY3Q8dW5rbm93bj4oKSxcbiAgcmVzZXRPbkRpc2Nvbm5lY3Q6IHRydWUsXG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JzZXJ2YWJsZSB0aGF0IG11bHRpY2FzdHMgb25jZSBgY29ubmVjdCgpYCBpcyBjYWxsZWQgb24gaXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBUaGUgb2JzZXJ2YWJsZSBzb3VyY2UgdG8gbWFrZSBjb25uZWN0YWJsZS5cbiAqIEBwYXJhbSBjb25maWcgVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBgY29ubmVjdGFibGVgLlxuICogQHJldHVybnMgQSBcImNvbm5lY3RhYmxlXCIgb2JzZXJ2YWJsZSwgdGhhdCBoYXMgYSBgY29ubmVjdCgpYCBtZXRob2QsIHRoYXQgeW91IG11c3QgY2FsbCB0b1xuICogY29ubmVjdCB0aGUgc291cmNlIHRvIGFsbCBjb25zdW1lcnMgdGhyb3VnaCB0aGUgc3ViamVjdCBwcm92aWRlZCBhcyB0aGUgY29ubmVjdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdGFibGU8VD4oc291cmNlOiBPYnNlcnZhYmxlSW5wdXQ8VD4sIGNvbmZpZzogQ29ubmVjdGFibGVDb25maWc8VD4gPSBERUZBVUxUX0NPTkZJRyk6IENvbm5lY3RhYmxlPFQ+IHtcbiAgLy8gVGhlIHN1YnNjcmlwdGlvbiByZXByZXNlbnRpbmcgdGhlIGNvbm5lY3Rpb24uXG4gIGxldCBjb25uZWN0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgY29uc3QgeyBjb25uZWN0b3IsIHJlc2V0T25EaXNjb25uZWN0ID0gdHJ1ZSB9ID0gY29uZmlnO1xuICBsZXQgc3ViamVjdCA9IGNvbm5lY3RvcigpO1xuXG4gIGNvbnN0IHJlc3VsdDogYW55ID0gbmV3IE9ic2VydmFibGU8VD4oKHN1YnNjcmliZXIpID0+IHtcbiAgICByZXR1cm4gc3ViamVjdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gIH0pO1xuXG4gIC8vIERlZmluZSB0aGUgYGNvbm5lY3RgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoYXQgdXNlcnMgbXVzdCBjYWxsXG4gIC8vIGluIG9yZGVyIHRvIFwiY29ubmVjdFwiIHRoZSBzb3VyY2UgdG8gdGhlIHN1YmplY3QgdGhhdCBpc1xuICAvLyBtdWx0aWNhc3RpbmcgaXQuXG4gIHJlc3VsdC5jb25uZWN0ID0gKCkgPT4ge1xuICAgIGlmICghY29ubmVjdGlvbiB8fCBjb25uZWN0aW9uLmNsb3NlZCkge1xuICAgICAgY29ubmVjdGlvbiA9IGRlZmVyKCgpID0+IHNvdXJjZSkuc3Vic2NyaWJlKHN1YmplY3QpO1xuICAgICAgaWYgKHJlc2V0T25EaXNjb25uZWN0KSB7XG4gICAgICAgIGNvbm5lY3Rpb24uYWRkKCgpID0+IChzdWJqZWN0ID0gY29ubmVjdG9yKCkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gIH07XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBPYnNlcnZlZFZhbHVlT2YsIE9ic2VydmFibGVJbnB1dFR1cGxlLCBPYnNlcnZhYmxlSW5wdXQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhcmdzQXJnQXJyYXlPck9iamVjdCB9IGZyb20gJy4uL3V0aWwvYXJnc0FyZ0FycmF5T3JPYmplY3QnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi9pbm5lckZyb20nO1xuaW1wb3J0IHsgcG9wUmVzdWx0U2VsZWN0b3IgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBtYXBPbmVPck1hbnlBcmdzIH0gZnJvbSAnLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzJztcbmltcG9ydCB7IGNyZWF0ZU9iamVjdCB9IGZyb20gJy4uL3V0aWwvY3JlYXRlT2JqZWN0JztcbmltcG9ydCB7IEFueUNhdGNoZXIgfSBmcm9tICcuLi9BbnlDYXRjaGVyJztcblxuLy8gZm9ya0pvaW4oYW55KVxuLy8gV2UgcHV0IHRoaXMgZmlyc3QgYmVjYXVzZSB3ZSBuZWVkIHRvIGNhdGNoIGNhc2VzIHdoZXJlIHRoZSB1c2VyIGhhcyBzdXBwbGllZFxuLy8gX2V4YWN0bHkgYGFueWBfIGFzIHRoZSBhcmd1bWVudC4gU2luY2UgYGFueWAgbGl0ZXJhbGx5IG1hdGNoZXMgX2FueXRoaW5nXyxcbi8vIHdlIGRvbid0IHdhbnQgaXQgdG8gcmFuZG9tbHkgaGl0IG9uZSBvZiB0aGUgb3RoZXIgdHlwZSBzaWduYXR1cmVzIGJlbG93LFxuLy8gYXMgd2UgaGF2ZSBubyBpZGVhIGF0IGJ1aWxkLXRpbWUgd2hhdCB0eXBlIHdlIHNob3VsZCBiZSByZXR1cm5pbmcgd2hlbiBnaXZlbiBhbiBhbnkuXG5cbi8qKlxuICogWW91IGhhdmUgcGFzc2VkIGBhbnlgIGhlcmUsIHdlIGNhbid0IGZpZ3VyZSBvdXQgaWYgaXQgaXNcbiAqIGFuIGFycmF5IG9yIGFuIG9iamVjdCwgc28geW91J3JlIGdldHRpbmcgYHVua25vd25gLiBVc2UgYmV0dGVyIHR5cGVzLlxuICogQHBhcmFtIGFyZyBTb21ldGhpbmcgdHlwZWQgYXMgYGFueWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcmtKb2luPFQgZXh0ZW5kcyBBbnlDYXRjaGVyPihhcmc6IFQpOiBPYnNlcnZhYmxlPHVua25vd24+O1xuXG4vLyBmb3JrSm9pbihudWxsIHwgdW5kZWZpbmVkKVxuZXhwb3J0IGZ1bmN0aW9uIGZvcmtKb2luKHNjaGVkdWxlcjogbnVsbCB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8bmV2ZXI+O1xuXG4vLyBmb3JrSm9pbihbYSwgYiwgY10pXG5leHBvcnQgZnVuY3Rpb24gZm9ya0pvaW4oc291cmNlczogcmVhZG9ubHkgW10pOiBPYnNlcnZhYmxlPG5ldmVyPjtcbmV4cG9ydCBmdW5jdGlvbiBmb3JrSm9pbjxBIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdPihzb3VyY2VzOiByZWFkb25seSBbLi4uT2JzZXJ2YWJsZUlucHV0VHVwbGU8QT5dKTogT2JzZXJ2YWJsZTxBPjtcbmV4cG9ydCBmdW5jdGlvbiBmb3JrSm9pbjxBIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdLCBSPihcbiAgc291cmNlczogcmVhZG9ubHkgWy4uLk9ic2VydmFibGVJbnB1dFR1cGxlPEE+XSxcbiAgcmVzdWx0U2VsZWN0b3I6ICguLi52YWx1ZXM6IEEpID0+IFJcbik6IE9ic2VydmFibGU8Uj47XG5cbi8vIGZvcmtKb2luKGEsIGIsIGMpXG4vKiogQGRlcHJlY2F0ZWQgUGFzcyBhbiBhcnJheSBvZiBzb3VyY2VzIGluc3RlYWQuIFRoZSByZXN0LXBhcmFtZXRlcnMgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvYXJyYXktYXJndW1lbnQgKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JrSm9pbjxBIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdPiguLi5zb3VyY2VzOiBbLi4uT2JzZXJ2YWJsZUlucHV0VHVwbGU8QT5dKTogT2JzZXJ2YWJsZTxBPjtcbi8qKiBAZGVwcmVjYXRlZCBQYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMgaW5zdGVhZC4gVGhlIHJlc3QtcGFyYW1ldGVycyBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHY4LiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9hcnJheS1hcmd1bWVudCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcmtKb2luPEEgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10sIFI+KFxuICAuLi5zb3VyY2VzQW5kUmVzdWx0U2VsZWN0b3I6IFsuLi5PYnNlcnZhYmxlSW5wdXRUdXBsZTxBPiwgKC4uLnZhbHVlczogQSkgPT4gUl1cbik6IE9ic2VydmFibGU8Uj47XG5cbi8vIGZvcmtKb2luKHthLCBiLCBjfSlcbmV4cG9ydCBmdW5jdGlvbiBmb3JrSm9pbihzb3VyY2VzT2JqZWN0OiB7IFtLIGluIGFueV06IG5ldmVyIH0pOiBPYnNlcnZhYmxlPG5ldmVyPjtcbmV4cG9ydCBmdW5jdGlvbiBmb3JrSm9pbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZUlucHV0PGFueT4+PihcbiAgc291cmNlc09iamVjdDogVFxuKTogT2JzZXJ2YWJsZTx7IFtLIGluIGtleW9mIFRdOiBPYnNlcnZlZFZhbHVlT2Y8VFtLXT4gfT47XG5cbi8qKlxuICogQWNjZXB0cyBhbiBgQXJyYXlgIG9mIHtAbGluayBPYnNlcnZhYmxlSW5wdXR9IG9yIGEgZGljdGlvbmFyeSBgT2JqZWN0YCBvZiB7QGxpbmsgT2JzZXJ2YWJsZUlucHV0fSBhbmQgcmV0dXJuc1xuICogYW4ge0BsaW5rIE9ic2VydmFibGV9IHRoYXQgZW1pdHMgZWl0aGVyIGFuIGFycmF5IG9mIHZhbHVlcyBpbiB0aGUgZXhhY3Qgc2FtZSBvcmRlciBhcyB0aGUgcGFzc2VkIGFycmF5LFxuICogb3IgYSBkaWN0aW9uYXJ5IG9mIHZhbHVlcyBpbiB0aGUgc2FtZSBzaGFwZSBhcyB0aGUgcGFzc2VkIGRpY3Rpb25hcnkuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPldhaXQgZm9yIE9ic2VydmFibGVzIHRvIGNvbXBsZXRlIGFuZCB0aGVuIGNvbWJpbmUgbGFzdCB2YWx1ZXMgdGhleSBlbWl0dGVkO1xuICogY29tcGxldGUgaW1tZWRpYXRlbHkgaWYgYW4gZW1wdHkgYXJyYXkgaXMgcGFzc2VkLjwvc3Bhbj5cbiAqXG4gKiAhW10oZm9ya0pvaW4ucG5nKVxuICpcbiAqIGBmb3JrSm9pbmAgaXMgYW4gb3BlcmF0b3IgdGhhdCB0YWtlcyBhbnkgbnVtYmVyIG9mIGlucHV0IG9ic2VydmFibGVzIHdoaWNoIGNhbiBiZSBwYXNzZWQgZWl0aGVyIGFzIGFuIGFycmF5XG4gKiBvciBhIGRpY3Rpb25hcnkgb2YgaW5wdXQgb2JzZXJ2YWJsZXMuIElmIG5vIGlucHV0IG9ic2VydmFibGVzIGFyZSBwcm92aWRlZCAoZS5nLiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQpLFxuICogdGhlbiB0aGUgcmVzdWx0aW5nIHN0cmVhbSB3aWxsIGNvbXBsZXRlIGltbWVkaWF0ZWx5LlxuICpcbiAqIGBmb3JrSm9pbmAgd2lsbCB3YWl0IGZvciBhbGwgcGFzc2VkIG9ic2VydmFibGVzIHRvIGVtaXQgYW5kIGNvbXBsZXRlIGFuZCB0aGVuIGl0IHdpbGwgZW1pdCBhbiBhcnJheSBvciBhbiBvYmplY3Qgd2l0aCBsYXN0XG4gKiB2YWx1ZXMgZnJvbSBjb3JyZXNwb25kaW5nIG9ic2VydmFibGVzLlxuICpcbiAqIElmIHlvdSBwYXNzIGFuIGFycmF5IG9mIGBuYCBvYnNlcnZhYmxlcyB0byB0aGUgb3BlcmF0b3IsIHRoZW4gdGhlIHJlc3VsdGluZ1xuICogYXJyYXkgd2lsbCBoYXZlIGBuYCB2YWx1ZXMsIHdoZXJlIHRoZSBmaXJzdCB2YWx1ZSBpcyB0aGUgbGFzdCBvbmUgZW1pdHRlZCBieSB0aGUgZmlyc3Qgb2JzZXJ2YWJsZSxcbiAqIHNlY29uZCB2YWx1ZSBpcyB0aGUgbGFzdCBvbmUgZW1pdHRlZCBieSB0aGUgc2Vjb25kIG9ic2VydmFibGUgYW5kIHNvIG9uLlxuICpcbiAqIElmIHlvdSBwYXNzIGEgZGljdGlvbmFyeSBvZiBvYnNlcnZhYmxlcyB0byB0aGUgb3BlcmF0b3IsIHRoZW4gdGhlIHJlc3VsdGluZ1xuICogb2JqZWN0cyB3aWxsIGhhdmUgdGhlIHNhbWUga2V5cyBhcyB0aGUgZGljdGlvbmFyeSBwYXNzZWQsIHdpdGggdGhlaXIgbGFzdCB2YWx1ZXMgdGhleSBoYXZlIGVtaXR0ZWRcbiAqIGxvY2F0ZWQgYXQgdGhlIGNvcnJlc3BvbmRpbmcga2V5LlxuICpcbiAqIFRoYXQgbWVhbnMgYGZvcmtKb2luYCB3aWxsIG5vdCBlbWl0IG1vcmUgdGhhbiBvbmNlIGFuZCBpdCB3aWxsIGNvbXBsZXRlIGFmdGVyIHRoYXQuIElmIHlvdSBuZWVkIHRvIGVtaXQgY29tYmluZWRcbiAqIHZhbHVlcyBub3Qgb25seSBhdCB0aGUgZW5kIG9mIHRoZSBsaWZlY3ljbGUgb2YgcGFzc2VkIG9ic2VydmFibGVzLCBidXQgYWxzbyB0aHJvdWdob3V0IGl0LCB0cnkgb3V0IHtAbGluayBjb21iaW5lTGF0ZXN0fVxuICogb3Ige0BsaW5rIHppcH0gaW5zdGVhZC5cbiAqXG4gKiBJbiBvcmRlciBmb3IgdGhlIHJlc3VsdGluZyBhcnJheSB0byBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgbnVtYmVyIG9mIGlucHV0IG9ic2VydmFibGVzLCB3aGVuZXZlciBhbnkgb2ZcbiAqIHRoZSBnaXZlbiBvYnNlcnZhYmxlcyBjb21wbGV0ZXMgd2l0aG91dCBlbWl0dGluZyBhbnkgdmFsdWUsIGBmb3JrSm9pbmAgd2lsbCBjb21wbGV0ZSBhdCB0aGF0IG1vbWVudCBhcyB3ZWxsXG4gKiBhbmQgaXQgd2lsbCBub3QgZW1pdCBhbnl0aGluZyBlaXRoZXIsIGV2ZW4gaWYgaXQgYWxyZWFkeSBoYXMgc29tZSBsYXN0IHZhbHVlcyBmcm9tIG90aGVyIG9ic2VydmFibGVzLlxuICogQ29udmVyc2VseSwgaWYgdGhlcmUgaXMgYW4gb2JzZXJ2YWJsZSB0aGF0IG5ldmVyIGNvbXBsZXRlcywgYGZvcmtKb2luYCB3aWxsIG5ldmVyIGNvbXBsZXRlIGVpdGhlcixcbiAqIHVubGVzcyBhdCBhbnkgcG9pbnQgc29tZSBvdGhlciBvYnNlcnZhYmxlIGNvbXBsZXRlcyB3aXRob3V0IGVtaXR0aW5nIGEgdmFsdWUsIHdoaWNoIGJyaW5ncyB1cyBiYWNrIHRvXG4gKiB0aGUgcHJldmlvdXMgY2FzZS4gT3ZlcmFsbCwgaW4gb3JkZXIgZm9yIGBmb3JrSm9pbmAgdG8gZW1pdCBhIHZhbHVlLCBhbGwgZ2l2ZW4gb2JzZXJ2YWJsZXNcbiAqIGhhdmUgdG8gZW1pdCBzb21ldGhpbmcgYXQgbGVhc3Qgb25jZSBhbmQgY29tcGxldGUuXG4gKlxuICogSWYgYW55IGdpdmVuIG9ic2VydmFibGUgZXJyb3JzIGF0IHNvbWUgcG9pbnQsIGBmb3JrSm9pbmAgd2lsbCBlcnJvciBhcyB3ZWxsIGFuZCBpbW1lZGlhdGVseSB1bnN1YnNjcmliZVxuICogZnJvbSB0aGUgb3RoZXIgb2JzZXJ2YWJsZXMuXG4gKlxuICogT3B0aW9uYWxseSBgZm9ya0pvaW5gIGFjY2VwdHMgYSBgcmVzdWx0U2VsZWN0b3JgIGZ1bmN0aW9uLCB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdmFsdWVzIHdoaWNoIG5vcm1hbGx5XG4gKiB3b3VsZCBsYW5kIGluIHRoZSBlbWl0dGVkIGFycmF5LiBXaGF0ZXZlciBpcyByZXR1cm5lZCBieSB0aGUgYHJlc3VsdFNlbGVjdG9yYCwgd2lsbCBhcHBlYXIgaW4gdGhlIG91dHB1dFxuICogb2JzZXJ2YWJsZSBpbnN0ZWFkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGRlZmF1bHQgYHJlc3VsdFNlbGVjdG9yYCBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXNcbiAqIGFsbCBpdHMgYXJndW1lbnRzIGFuZCBwdXRzIHRoZW0gaW50byBhbiBhcnJheS4gTm90ZSB0aGF0IHRoZSBgcmVzdWx0U2VsZWN0b3JgIHdpbGwgYmUgY2FsbGVkIG9ubHlcbiAqIHdoZW4gYGZvcmtKb2luYCBpcyBzdXBwb3NlZCB0byBlbWl0IGEgcmVzdWx0LlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogVXNlIGBmb3JrSm9pbmAgd2l0aCBhIGRpY3Rpb25hcnkgb2Ygb2JzZXJ2YWJsZSBpbnB1dHNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZm9ya0pvaW4sIG9mLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IG9ic2VydmFibGUgPSBmb3JrSm9pbih7XG4gKiAgIGZvbzogb2YoMSwgMiwgMywgNCksXG4gKiAgIGJhcjogUHJvbWlzZS5yZXNvbHZlKDgpLFxuICogICBiYXo6IHRpbWVyKDQwMDApXG4gKiB9KTtcbiAqIG9ic2VydmFibGUuc3Vic2NyaWJlKHtcbiAqICBuZXh0OiB2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSksXG4gKiAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUubG9nKCdUaGlzIGlzIGhvdyBpdCBlbmRzIScpLFxuICogfSk7XG4gKlxuICogLy8gTG9nczpcbiAqIC8vIHsgZm9vOiA0LCBiYXI6IDgsIGJhejogMCB9IGFmdGVyIDQgc2Vjb25kc1xuICogLy8gJ1RoaXMgaXMgaG93IGl0IGVuZHMhJyBpbW1lZGlhdGVseSBhZnRlclxuICogYGBgXG4gKlxuICogVXNlIGBmb3JrSm9pbmAgd2l0aCBhbiBhcnJheSBvZiBvYnNlcnZhYmxlIGlucHV0c1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmb3JrSm9pbiwgb2YsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgb2JzZXJ2YWJsZSA9IGZvcmtKb2luKFtcbiAqICAgb2YoMSwgMiwgMywgNCksXG4gKiAgIFByb21pc2UucmVzb2x2ZSg4KSxcbiAqICAgdGltZXIoNDAwMClcbiAqIF0pO1xuICogb2JzZXJ2YWJsZS5zdWJzY3JpYmUoe1xuICogIG5leHQ6IHZhbHVlID0+IGNvbnNvbGUubG9nKHZhbHVlKSxcbiAqICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ1RoaXMgaXMgaG93IGl0IGVuZHMhJyksXG4gKiB9KTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8gWzQsIDgsIDBdIGFmdGVyIDQgc2Vjb25kc1xuICogLy8gJ1RoaXMgaXMgaG93IGl0IGVuZHMhJyBpbW1lZGlhdGVseSBhZnRlclxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgY29tYmluZUxhdGVzdH1cbiAqIEBzZWUge0BsaW5rIHppcH1cbiAqXG4gKiBAcGFyYW0gYXJncyBBbnkgbnVtYmVyIG9mIGBPYnNlcnZhYmxlSW5wdXRgcyBwcm92aWRlZCBlaXRoZXIgYXMgYW4gYXJyYXksIGFzIGFuIG9iamVjdFxuICogb3IgYXMgYXJndW1lbnRzIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgb3BlcmF0b3IuXG4gKiBAcmV0dXJuIE9ic2VydmFibGUgZW1pdHRpbmcgZWl0aGVyIGFuIGFycmF5IG9mIGxhc3QgdmFsdWVzIGVtaXR0ZWQgYnkgcGFzc2VkIE9ic2VydmFibGVzXG4gKiBvciB2YWx1ZSBmcm9tIHByb2plY3QgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JrSm9pbiguLi5hcmdzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XG4gIGNvbnN0IHJlc3VsdFNlbGVjdG9yID0gcG9wUmVzdWx0U2VsZWN0b3IoYXJncyk7XG4gIGNvbnN0IHsgYXJnczogc291cmNlcywga2V5cyB9ID0gYXJnc0FyZ0FycmF5T3JPYmplY3QoYXJncyk7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgY29uc3QgeyBsZW5ndGggfSA9IHNvdXJjZXM7XG4gICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgbGV0IHJlbWFpbmluZ0NvbXBsZXRpb25zID0gbGVuZ3RoO1xuICAgIGxldCByZW1haW5pbmdFbWlzc2lvbnMgPSBsZW5ndGg7XG4gICAgZm9yIChsZXQgc291cmNlSW5kZXggPSAwOyBzb3VyY2VJbmRleCA8IGxlbmd0aDsgc291cmNlSW5kZXgrKykge1xuICAgICAgbGV0IGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICBpbm5lckZyb20oc291cmNlc1tzb3VyY2VJbmRleF0pLnN1YnNjcmliZShcbiAgICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICAgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmVtYWluaW5nRW1pc3Npb25zLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZXNbc291cmNlSW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiByZW1haW5pbmdDb21wbGV0aW9ucy0tLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ0NvbXBsZXRpb25zIHx8ICFoYXNWYWx1ZSkge1xuICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ0VtaXNzaW9ucykge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChrZXlzID8gY3JlYXRlT2JqZWN0KGtleXMsIHZhbHVlcykgOiB2YWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yID8gcmVzdWx0LnBpcGUobWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpIDogcmVzdWx0O1xufVxuIiwgImltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAnLi4vb3BlcmF0b3JzL21lcmdlTWFwJztcbmltcG9ydCB7IGlzQXJyYXlMaWtlIH0gZnJvbSAnLi4vdXRpbC9pc0FycmF5TGlrZSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IG1hcE9uZU9yTWFueUFyZ3MgfSBmcm9tICcuLi91dGlsL21hcE9uZU9yTWFueUFyZ3MnO1xuXG4vLyBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8gY3JlYXRlIGhhbmRsZXIgcmVnaXN0cnkgZnVuY3Rpb25zIHVzaW5nIGFycmF5IG1hcHBpbmcgYmVsb3cuXG5jb25zdCBub2RlRXZlbnRFbWl0dGVyTWV0aG9kcyA9IFsnYWRkTGlzdGVuZXInLCAncmVtb3ZlTGlzdGVuZXInXSBhcyBjb25zdDtcbmNvbnN0IGV2ZW50VGFyZ2V0TWV0aG9kcyA9IFsnYWRkRXZlbnRMaXN0ZW5lcicsICdyZW1vdmVFdmVudExpc3RlbmVyJ10gYXMgY29uc3Q7XG5jb25zdCBqcXVlcnlNZXRob2RzID0gWydvbicsICdvZmYnXSBhcyBjb25zdDtcblxuZXhwb3J0IGludGVyZmFjZSBOb2RlU3R5bGVFdmVudEVtaXR0ZXIge1xuICBhZGRMaXN0ZW5lcihldmVudE5hbWU6IHN0cmluZyB8IHN5bWJvbCwgaGFuZGxlcjogTm9kZUV2ZW50SGFuZGxlcik6IHRoaXM7XG4gIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZTogc3RyaW5nIHwgc3ltYm9sLCBoYW5kbGVyOiBOb2RlRXZlbnRIYW5kbGVyKTogdGhpcztcbn1cblxuZXhwb3J0IHR5cGUgTm9kZUV2ZW50SGFuZGxlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcblxuLy8gRm9yIEFQSXMgdGhhdCBpbXBsZW1lbnQgYGFkZExpc3RlbmVyYCBhbmQgYHJlbW92ZUxpc3RlbmVyYCBtZXRob2RzIHRoYXQgbWF5XG4vLyBub3QgdXNlIHRoZSBzYW1lIGFyZ3VtZW50cyBvciByZXR1cm4gRXZlbnRFbWl0dGVyIHZhbHVlc1xuLy8gc3VjaCBhcyBSZWFjdCBOYXRpdmVcbmV4cG9ydCBpbnRlcmZhY2UgTm9kZUNvbXBhdGlibGVFdmVudEVtaXR0ZXIge1xuICBhZGRMaXN0ZW5lcihldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogTm9kZUV2ZW50SGFuZGxlcik6IHZvaWQgfCB7fTtcbiAgcmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lOiBzdHJpbmcsIGhhbmRsZXI6IE5vZGVFdmVudEhhbmRsZXIpOiB2b2lkIHwge307XG59XG5cbi8vIFVzZSBoYW5kbGVyIHR5cGVzIGxpa2UgdGhvc2UgaW4gQHR5cGVzL2pxdWVyeS4gU2VlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvYmxvYi84NDc3MzFiYTFkN2ZhNmRiNmI5MTFjMGU0M2FhMGFmZTU5NmU3NzIzL3R5cGVzL2pxdWVyeS9taXNjLmQudHMjTDYzOTVcbmV4cG9ydCBpbnRlcmZhY2UgSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXI8VENvbnRleHQsIFQ+IHtcbiAgb24oZXZlbnROYW1lOiBzdHJpbmcsIGhhbmRsZXI6ICh0aGlzOiBUQ29udGV4dCwgdDogVCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IHZvaWQ7XG4gIG9mZihldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogKHRoaXM6IFRDb250ZXh0LCB0OiBULCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudExpc3RlbmVyT2JqZWN0PEU+IHtcbiAgaGFuZGxlRXZlbnQoZXZ0OiBFKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIYXNFdmVudFRhcmdldEFkZFJlbW92ZTxFPiB7XG4gIGFkZEV2ZW50TGlzdGVuZXIoXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGxpc3RlbmVyOiAoKGV2dDogRSkgPT4gdm9pZCkgfCBFdmVudExpc3RlbmVyT2JqZWN0PEU+IHwgbnVsbCxcbiAgICBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICk6IHZvaWQ7XG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGxpc3RlbmVyOiAoKGV2dDogRSkgPT4gdm9pZCkgfCBFdmVudExpc3RlbmVyT2JqZWN0PEU+IHwgbnVsbCxcbiAgICBvcHRpb25zPzogRXZlbnRMaXN0ZW5lck9wdGlvbnMgfCBib29sZWFuXG4gICk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMaXN0ZW5lck9wdGlvbnMge1xuICBjYXB0dXJlPzogYm9vbGVhbjtcbiAgcGFzc2l2ZT86IGJvb2xlYW47XG4gIG9uY2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIGV4dGVuZHMgRXZlbnRMaXN0ZW5lck9wdGlvbnMge1xuICBvbmNlPzogYm9vbGVhbjtcbiAgcGFzc2l2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXZlbnQ8VD4odGFyZ2V0OiBIYXNFdmVudFRhcmdldEFkZFJlbW92ZTxUPiB8IEFycmF5TGlrZTxIYXNFdmVudFRhcmdldEFkZFJlbW92ZTxUPj4sIGV2ZW50TmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPjtcbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXZlbnQ8VCwgUj4oXG4gIHRhcmdldDogSGFzRXZlbnRUYXJnZXRBZGRSZW1vdmU8VD4gfCBBcnJheUxpa2U8SGFzRXZlbnRUYXJnZXRBZGRSZW1vdmU8VD4+LFxuICBldmVudE5hbWU6IHN0cmluZyxcbiAgcmVzdWx0U2VsZWN0b3I6IChldmVudDogVCkgPT4gUlxuKTogT2JzZXJ2YWJsZTxSPjtcbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXZlbnQ8VD4oXG4gIHRhcmdldDogSGFzRXZlbnRUYXJnZXRBZGRSZW1vdmU8VD4gfCBBcnJheUxpa2U8SGFzRXZlbnRUYXJnZXRBZGRSZW1vdmU8VD4+LFxuICBldmVudE5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogRXZlbnRMaXN0ZW5lck9wdGlvbnNcbik6IE9ic2VydmFibGU8VD47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50PFQsIFI+KFxuICB0YXJnZXQ6IEhhc0V2ZW50VGFyZ2V0QWRkUmVtb3ZlPFQ+IHwgQXJyYXlMaWtlPEhhc0V2ZW50VGFyZ2V0QWRkUmVtb3ZlPFQ+PixcbiAgZXZlbnROYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEV2ZW50TGlzdGVuZXJPcHRpb25zLFxuICByZXN1bHRTZWxlY3RvcjogKGV2ZW50OiBUKSA9PiBSXG4pOiBPYnNlcnZhYmxlPFI+O1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50KHRhcmdldDogTm9kZVN0eWxlRXZlbnRFbWl0dGVyIHwgQXJyYXlMaWtlPE5vZGVTdHlsZUV2ZW50RW1pdHRlcj4sIGV2ZW50TmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTx1bmtub3duPjtcbi8qKiBAZGVwcmVjYXRlZCBEbyBub3Qgc3BlY2lmeSBleHBsaWNpdCB0eXBlIHBhcmFtZXRlcnMuIFNpZ25hdHVyZXMgd2l0aCB0eXBlIHBhcmFtZXRlcnMgdGhhdCBjYW5ub3QgYmUgaW5mZXJyZWQgd2lsbCBiZSByZW1vdmVkIGluIHY4LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdmVudDxUPih0YXJnZXQ6IE5vZGVTdHlsZUV2ZW50RW1pdHRlciB8IEFycmF5TGlrZTxOb2RlU3R5bGVFdmVudEVtaXR0ZXI+LCBldmVudE5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8VD47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50PFI+KFxuICB0YXJnZXQ6IE5vZGVTdHlsZUV2ZW50RW1pdHRlciB8IEFycmF5TGlrZTxOb2RlU3R5bGVFdmVudEVtaXR0ZXI+LFxuICBldmVudE5hbWU6IHN0cmluZyxcbiAgcmVzdWx0U2VsZWN0b3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gUlxuKTogT2JzZXJ2YWJsZTxSPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdmVudChcbiAgdGFyZ2V0OiBOb2RlQ29tcGF0aWJsZUV2ZW50RW1pdHRlciB8IEFycmF5TGlrZTxOb2RlQ29tcGF0aWJsZUV2ZW50RW1pdHRlcj4sXG4gIGV2ZW50TmFtZTogc3RyaW5nXG4pOiBPYnNlcnZhYmxlPHVua25vd24+O1xuLyoqIEBkZXByZWNhdGVkIERvIG5vdCBzcGVjaWZ5IGV4cGxpY2l0IHR5cGUgcGFyYW1ldGVycy4gU2lnbmF0dXJlcyB3aXRoIHR5cGUgcGFyYW1ldGVycyB0aGF0IGNhbm5vdCBiZSBpbmZlcnJlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjguICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50PFQ+KHRhcmdldDogTm9kZUNvbXBhdGlibGVFdmVudEVtaXR0ZXIgfCBBcnJheUxpa2U8Tm9kZUNvbXBhdGlibGVFdmVudEVtaXR0ZXI+LCBldmVudE5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8VD47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50PFI+KFxuICB0YXJnZXQ6IE5vZGVDb21wYXRpYmxlRXZlbnRFbWl0dGVyIHwgQXJyYXlMaWtlPE5vZGVDb21wYXRpYmxlRXZlbnRFbWl0dGVyPixcbiAgZXZlbnROYW1lOiBzdHJpbmcsXG4gIHJlc3VsdFNlbGVjdG9yOiAoLi4uYXJnczogYW55W10pID0+IFJcbik6IE9ic2VydmFibGU8Uj47XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXZlbnQ8VD4oXG4gIHRhcmdldDogSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXI8YW55LCBUPiB8IEFycmF5TGlrZTxKUXVlcnlTdHlsZUV2ZW50RW1pdHRlcjxhbnksIFQ+PixcbiAgZXZlbnROYW1lOiBzdHJpbmdcbik6IE9ic2VydmFibGU8VD47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50PFQsIFI+KFxuICB0YXJnZXQ6IEpRdWVyeVN0eWxlRXZlbnRFbWl0dGVyPGFueSwgVD4gfCBBcnJheUxpa2U8SlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXI8YW55LCBUPj4sXG4gIGV2ZW50TmFtZTogc3RyaW5nLFxuICByZXN1bHRTZWxlY3RvcjogKHZhbHVlOiBULCAuLi5hcmdzOiBhbnlbXSkgPT4gUlxuKTogT2JzZXJ2YWJsZTxSPjtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBldmVudHMgb2YgYSBzcGVjaWZpYyB0eXBlIGNvbWluZyBmcm9tIHRoZVxuICogZ2l2ZW4gZXZlbnQgdGFyZ2V0LlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5DcmVhdGVzIGFuIE9ic2VydmFibGUgZnJvbSBET00gZXZlbnRzLCBvciBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgZXZlbnRzIG9yIG90aGVycy48L3NwYW4+XG4gKlxuICogIVtdKGZyb21FdmVudC5wbmcpXG4gKlxuICogYGZyb21FdmVudGAgYWNjZXB0cyBhcyBhIGZpcnN0IGFyZ3VtZW50IGV2ZW50IHRhcmdldCwgd2hpY2ggaXMgYW4gb2JqZWN0IHdpdGggbWV0aG9kc1xuICogZm9yIHJlZ2lzdGVyaW5nIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zLiBBcyBhIHNlY29uZCBhcmd1bWVudCBpdCB0YWtlcyBzdHJpbmcgdGhhdCBpbmRpY2F0ZXNcbiAqIHR5cGUgb2YgZXZlbnQgd2Ugd2FudCB0byBsaXN0ZW4gZm9yLiBgZnJvbUV2ZW50YCBzdXBwb3J0cyBzZWxlY3RlZCB0eXBlcyBvZiBldmVudCB0YXJnZXRzLFxuICogd2hpY2ggYXJlIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuIElmIHlvdXIgZXZlbnQgdGFyZ2V0IGRvZXMgbm90IG1hdGNoIGFueSBvZiB0aGUgb25lcyBsaXN0ZWQsXG4gKiB5b3Ugc2hvdWxkIHVzZSB7QGxpbmsgZnJvbUV2ZW50UGF0dGVybn0sIHdoaWNoIGNhbiBiZSB1c2VkIG9uIGFyYml0cmFyeSBBUElzLlxuICogV2hlbiBpdCBjb21lcyB0byBBUElzIHN1cHBvcnRlZCBieSBgZnJvbUV2ZW50YCwgdGhlaXIgbWV0aG9kcyBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBldmVudFxuICogaGFuZGxlciBmdW5jdGlvbnMgaGF2ZSBkaWZmZXJlbnQgbmFtZXMsIGJ1dCB0aGV5IGFsbCBhY2NlcHQgYSBzdHJpbmcgZGVzY3JpYmluZyBldmVudCB0eXBlXG4gKiBhbmQgZnVuY3Rpb24gaXRzZWxmLCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBzYWlkIGV2ZW50IGhhcHBlbnMuXG4gKlxuICogRXZlcnkgdGltZSByZXN1bHRpbmcgT2JzZXJ2YWJsZSBpcyBzdWJzY3JpYmVkLCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHdpbGwgYmUgcmVnaXN0ZXJlZFxuICogdG8gZXZlbnQgdGFyZ2V0IG9uIGdpdmVuIGV2ZW50IHR5cGUuIFdoZW4gdGhhdCBldmVudCBmaXJlcywgdmFsdWVcbiAqIHBhc3NlZCBhcyBhIGZpcnN0IGFyZ3VtZW50IHRvIHJlZ2lzdGVyZWQgZnVuY3Rpb24gd2lsbCBiZSBlbWl0dGVkIGJ5IG91dHB1dCBPYnNlcnZhYmxlLlxuICogV2hlbiBPYnNlcnZhYmxlIGlzIHVuc3Vic2NyaWJlZCwgZnVuY3Rpb24gd2lsbCBiZSB1bnJlZ2lzdGVyZWQgZnJvbSBldmVudCB0YXJnZXQuXG4gKlxuICogTm90ZSB0aGF0IGlmIGV2ZW50IHRhcmdldCBjYWxscyByZWdpc3RlcmVkIGZ1bmN0aW9uIHdpdGggbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgc2Vjb25kXG4gKiBhbmQgZm9sbG93aW5nIGFyZ3VtZW50cyB3aWxsIG5vdCBhcHBlYXIgaW4gcmVzdWx0aW5nIHN0cmVhbS4gSW4gb3JkZXIgdG8gZ2V0IGFjY2VzcyB0byB0aGVtLFxuICogeW91IGNhbiBwYXNzIHRvIGBmcm9tRXZlbnRgIG9wdGlvbmFsIHByb2plY3QgZnVuY3Rpb24sIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdpdGggYWxsIGFyZ3VtZW50c1xuICogcGFzc2VkIHRvIGV2ZW50IGhhbmRsZXIuIE91dHB1dCBPYnNlcnZhYmxlIHdpbGwgdGhlbiBlbWl0IHZhbHVlIHJldHVybmVkIGJ5IHByb2plY3QgZnVuY3Rpb24sXG4gKiBpbnN0ZWFkIG9mIHRoZSB1c3VhbCB2YWx1ZS5cbiAqXG4gKiBSZW1lbWJlciB0aGF0IGV2ZW50IHRhcmdldHMgbGlzdGVkIGJlbG93IGFyZSBjaGVja2VkIHZpYSBkdWNrIHR5cGluZy4gSXQgbWVhbnMgdGhhdFxuICogbm8gbWF0dGVyIHdoYXQga2luZCBvZiBvYmplY3QgeW91IGhhdmUgYW5kIG5vIG1hdHRlciB3aGF0IGVudmlyb25tZW50IHlvdSB3b3JrIGluLFxuICogeW91IGNhbiBzYWZlbHkgdXNlIGBmcm9tRXZlbnRgIG9uIHRoYXQgb2JqZWN0IGlmIGl0IGV4cG9zZXMgZGVzY3JpYmVkIG1ldGhvZHMgKHByb3ZpZGVkXG4gKiBvZiBjb3Vyc2UgdGhleSBiZWhhdmUgYXMgd2FzIGRlc2NyaWJlZCBhYm92ZSkuIFNvIGZvciBleGFtcGxlIGlmIE5vZGUuanMgbGlicmFyeSBleHBvc2VzXG4gKiBldmVudCB0YXJnZXQgd2hpY2ggaGFzIHRoZSBzYW1lIG1ldGhvZCBuYW1lcyBhcyBET00gRXZlbnRUYXJnZXQsIGBmcm9tRXZlbnRgIGlzIHN0aWxsXG4gKiBhIGdvb2QgY2hvaWNlLlxuICpcbiAqIElmIHRoZSBBUEkgeW91IHVzZSBpcyBtb3JlIGNhbGxiYWNrIHRoZW4gZXZlbnQgaGFuZGxlciBvcmllbnRlZCAoc3Vic2NyaWJlZFxuICogY2FsbGJhY2sgZnVuY3Rpb24gZmlyZXMgb25seSBvbmNlIGFuZCB0aHVzIHRoZXJlIGlzIG5vIG5lZWQgdG8gbWFudWFsbHlcbiAqIHVucmVnaXN0ZXIgaXQpLCB5b3Ugc2hvdWxkIHVzZSB7QGxpbmsgYmluZENhbGxiYWNrfSBvciB7QGxpbmsgYmluZE5vZGVDYWxsYmFja31cbiAqIGluc3RlYWQuXG4gKlxuICogYGZyb21FdmVudGAgc3VwcG9ydHMgZm9sbG93aW5nIHR5cGVzIG9mIGV2ZW50IHRhcmdldHM6XG4gKlxuICogKipET00gRXZlbnRUYXJnZXQqKlxuICpcbiAqIFRoaXMgaXMgYW4gb2JqZWN0IHdpdGggYGFkZEV2ZW50TGlzdGVuZXJgIGFuZCBgcmVtb3ZlRXZlbnRMaXN0ZW5lcmAgbWV0aG9kcy5cbiAqXG4gKiBJbiB0aGUgYnJvd3NlciwgYGFkZEV2ZW50TGlzdGVuZXJgIGFjY2VwdHMgLSBhcGFydCBmcm9tIGV2ZW50IHR5cGUgc3RyaW5nIGFuZCBldmVudFxuICogaGFuZGxlciBmdW5jdGlvbiBhcmd1bWVudHMgLSBvcHRpb25hbCB0aGlyZCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGVpdGhlciBhbiBvYmplY3Qgb3IgYm9vbGVhbixcbiAqIGJvdGggdXNlZCBmb3IgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGhvdyBhbmQgd2hlbiBwYXNzZWQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQuIFdoZW5cbiAqIGBmcm9tRXZlbnRgIGlzIHVzZWQgd2l0aCBldmVudCB0YXJnZXQgb2YgdGhhdCB0eXBlLCB5b3UgY2FuIHByb3ZpZGUgdGhpcyB2YWx1ZXNcbiAqIGFzIHRoaXJkIHBhcmFtZXRlciBhcyB3ZWxsLlxuICpcbiAqICoqTm9kZS5qcyBFdmVudEVtaXR0ZXIqKlxuICpcbiAqIEFuIG9iamVjdCB3aXRoIGBhZGRMaXN0ZW5lcmAgYW5kIGByZW1vdmVMaXN0ZW5lcmAgbWV0aG9kcy5cbiAqXG4gKiAqKkpRdWVyeS1zdHlsZSBldmVudCB0YXJnZXQqKlxuICpcbiAqIEFuIG9iamVjdCB3aXRoIGBvbmAgYW5kIGBvZmZgIG1ldGhvZHNcbiAqXG4gKiAqKkRPTSBOb2RlTGlzdCoqXG4gKlxuICogTGlzdCBvZiBET00gTm9kZXMsIHJldHVybmVkIGZvciBleGFtcGxlIGJ5IGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsYCBvciBgTm9kZS5jaGlsZE5vZGVzYC5cbiAqXG4gKiBBbHRob3VnaCB0aGlzIGNvbGxlY3Rpb24gaXMgbm90IGV2ZW50IHRhcmdldCBpbiBpdHNlbGYsIGBmcm9tRXZlbnRgIHdpbGwgaXRlcmF0ZSBvdmVyIGFsbCBOb2Rlc1xuICogaXQgY29udGFpbnMgYW5kIGluc3RhbGwgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBpbiBldmVyeSBvZiB0aGVtLiBXaGVuIHJldHVybmVkIE9ic2VydmFibGVcbiAqIGlzIHVuc3Vic2NyaWJlZCwgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGZyb20gYWxsIE5vZGVzLlxuICpcbiAqICoqRE9NIEh0bWxDb2xsZWN0aW9uKipcbiAqXG4gKiBKdXN0IGFzIGluIGNhc2Ugb2YgTm9kZUxpc3QgaXQgaXMgYSBjb2xsZWN0aW9uIG9mIERPTSBub2Rlcy4gSGVyZSBhcyB3ZWxsIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gaXNcbiAqIGluc3RhbGxlZCBhbmQgcmVtb3ZlZCBpbiBlYWNoIG9mIGVsZW1lbnRzLlxuICpcbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIEVtaXQgY2xpY2tzIGhhcHBlbmluZyBvbiB0aGUgRE9NIGRvY3VtZW50XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjbGlja3Muc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHMgaW46XG4gKiAvLyBNb3VzZUV2ZW50IG9iamVjdCBsb2dnZWQgdG8gY29uc29sZSBldmVyeSB0aW1lIGEgY2xpY2tcbiAqIC8vIG9jY3VycyBvbiB0aGUgZG9jdW1lbnQuXG4gKiBgYGBcbiAqXG4gKiBVc2UgYGFkZEV2ZW50TGlzdGVuZXJgIHdpdGggY2FwdHVyZSBvcHRpb25cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gKiBkaXYuc3R5bGUuY3NzVGV4dCA9ICd3aWR0aDogMjAwcHg7IGhlaWdodDogMjAwcHg7IGJhY2tncm91bmQ6ICMwOWM7JztcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAqXG4gKiAvLyBub3RlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIGFkZEV2ZW50TGlzdGVuZXJcbiAqIGNvbnN0IGNsaWNrc0luRG9jdW1lbnQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAqIGNvbnN0IGNsaWNrc0luRGl2ID0gZnJvbUV2ZW50KGRpdiwgJ2NsaWNrJyk7XG4gKlxuICogY2xpY2tzSW5Eb2N1bWVudC5zdWJzY3JpYmUoKCkgPT4gY29uc29sZS5sb2coJ2RvY3VtZW50JykpO1xuICogY2xpY2tzSW5EaXYuc3Vic2NyaWJlKCgpID0+IGNvbnNvbGUubG9nKCdkaXYnKSk7XG4gKlxuICogLy8gQnkgZGVmYXVsdCBldmVudHMgYnViYmxlIFVQIGluIERPTSB0cmVlLCBzbyBub3JtYWxseVxuICogLy8gd2hlbiB3ZSB3b3VsZCBjbGljayBvbiBkaXYgaW4gZG9jdW1lbnRcbiAqIC8vIFwiZGl2XCIgd291bGQgYmUgbG9nZ2VkIGZpcnN0IGFuZCB0aGVuIFwiZG9jdW1lbnRcIi5cbiAqIC8vIFNpbmNlIHdlIHNwZWNpZmllZCBvcHRpb25hbCBgY2FwdHVyZWAgb3B0aW9uLCBkb2N1bWVudFxuICogLy8gd2lsbCBjYXRjaCBldmVudCB3aGVuIGl0IGdvZXMgRE9XTiBET00gdHJlZSwgc28gY29uc29sZVxuICogLy8gd2lsbCBsb2cgXCJkb2N1bWVudFwiIGFuZCB0aGVuIFwiZGl2XCIuXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBiaW5kQ2FsbGJhY2t9XG4gKiBAc2VlIHtAbGluayBiaW5kTm9kZUNhbGxiYWNrfVxuICogQHNlZSB7QGxpbmsgZnJvbUV2ZW50UGF0dGVybn1cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBET00gRXZlbnRUYXJnZXQsIE5vZGUuanMgRXZlbnRFbWl0dGVyLCBKUXVlcnktbGlrZSBldmVudCB0YXJnZXQsXG4gKiBOb2RlTGlzdCBvciBIVE1MQ29sbGVjdGlvbiB0byBhdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgdG8uXG4gKiBAcGFyYW0gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIG9mIGludGVyZXN0LCBiZWluZyBlbWl0dGVkIGJ5IHRoZSBgdGFyZ2V0YC5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSB1bmRlcmx5aW5nIGBhZGRMaXN0ZW5lcmAsXG4gKiBgYWRkRXZlbnRMaXN0ZW5lcmAgb3IgYG9uYCBmdW5jdGlvbnMuXG4gKiBAcGFyYW0gcmVzdWx0U2VsZWN0b3IgQSBtYXBwaW5nIGZ1bmN0aW9uIHVzZWQgdG8gdHJhbnNmb3JtIGV2ZW50cy4gSXQgdGFrZXMgdGhlXG4gKiBhcmd1bWVudHMgZnJvbSB0aGUgZXZlbnQgaGFuZGxlciBhbmQgc2hvdWxkIHJldHVybiBhIHNpbmdsZSB2YWx1ZS5cbiAqIEByZXR1cm4gQW4gT2JzZXJ2YWJsZSBlbWl0dGluZyBldmVudHMgcmVnaXN0ZXJlZCB0aHJvdWdoIGB0YXJnZXRgJ3NcbiAqIGxpc3RlbmVyIGhhbmRsZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50PFQ+KFxuICB0YXJnZXQ6IGFueSxcbiAgZXZlbnROYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBFdmVudExpc3RlbmVyT3B0aW9ucyB8ICgoLi4uYXJnczogYW55W10pID0+IFQpLFxuICByZXN1bHRTZWxlY3Rvcj86ICguLi5hcmdzOiBhbnlbXSkgPT4gVFxuKTogT2JzZXJ2YWJsZTxUPiB7XG4gIGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgcmVzdWx0U2VsZWN0b3IgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZyb21FdmVudDxUPih0YXJnZXQsIGV2ZW50TmFtZSwgb3B0aW9ucyBhcyBFdmVudExpc3RlbmVyT3B0aW9ucykucGlwZShtYXBPbmVPck1hbnlBcmdzKHJlc3VsdFNlbGVjdG9yKSk7XG4gIH1cblxuICAvLyBGaWd1cmUgb3V0IG91ciBhZGQgYW5kIHJlbW92ZSBtZXRob2RzLiBJbiBvcmRlciB0byBkbyB0aGlzLFxuICAvLyB3ZSBhcmUgZ29pbmcgdG8gYW5hbHl6ZSB0aGUgdGFyZ2V0IGluIGEgcHJlZmVycmVkIG9yZGVyLCBpZlxuICAvLyB0aGUgdGFyZ2V0IG1hdGNoZXMgYSBnaXZlbiBzaWduYXR1cmUsIHdlIHRha2UgdGhlIHR3byBcImFkZFwiIGFuZCBcInJlbW92ZVwiXG4gIC8vIG1ldGhvZCBuYW1lcyBhbmQgYXBwbHkgdGhlbSB0byBhIG1hcCB0byBjcmVhdGUgb3Bwb3NpdGUgdmVyc2lvbnMgb2YgdGhlXG4gIC8vIHNhbWUgZnVuY3Rpb24uIFRoaXMgaXMgYmVjYXVzZSB0aGV5IGFsbCBvcGVyYXRlIGluIGR1cGxpY2F0ZSBwYWlycyxcbiAgLy8gYGFkZExpc3RlbmVyKG5hbWUsIGhhbmRsZXIpYCwgYHJlbW92ZUxpc3RlbmVyKG5hbWUsIGhhbmRsZXIpYCwgZm9yIGV4YW1wbGUuXG4gIC8vIFRoZSBjYWxsIG9ubHkgZGlmZmVycyBieSBtZXRob2QgbmFtZSwgYXMgdG8gd2hldGhlciBvciBub3QgeW91J3JlIGFkZGluZyBvciByZW1vdmluZy5cbiAgY29uc3QgW2FkZCwgcmVtb3ZlXSA9XG4gICAgLy8gSWYgaXQgaXMgYW4gRXZlbnRUYXJnZXQsIHdlIG5lZWQgdG8gdXNlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG1ldGhvZCB0aGFuIHRoZSBvdGhlciB0d28gcGF0dGVybnMuXG4gICAgaXNFdmVudFRhcmdldCh0YXJnZXQpXG4gICAgICA/IGV2ZW50VGFyZ2V0TWV0aG9kcy5tYXAoKG1ldGhvZE5hbWUpID0+IChoYW5kbGVyOiBhbnkpID0+IHRhcmdldFttZXRob2ROYW1lXShldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMgYXMgRXZlbnRMaXN0ZW5lck9wdGlvbnMpKVxuICAgICAgOiAvLyBJbiBhbGwgb3RoZXIgY2FzZXMsIHRoZSBjYWxsIHBhdHRlcm4gaXMgaWRlbnRpY2FsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgbWV0aG9kIG5hbWVzLlxuICAgICAgaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KVxuICAgICAgPyBub2RlRXZlbnRFbWl0dGVyTWV0aG9kcy5tYXAodG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpKVxuICAgICAgOiBpc0pRdWVyeVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldClcbiAgICAgID8ganF1ZXJ5TWV0aG9kcy5tYXAodG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpKVxuICAgICAgOiBbXTtcblxuICAvLyBJZiBhZGQgaXMgZmFsc3ksIGl0J3MgYmVjYXVzZSB3ZSBkaWRuJ3QgbWF0Y2ggYSBwYXR0ZXJuIGFib3ZlLlxuICAvLyBDaGVjayB0byBzZWUgaWYgaXQgaXMgYW4gQXJyYXlMaWtlLCBiZWNhdXNlIGlmIGl0IGlzLCB3ZSB3YW50IHRvXG4gIC8vIHRyeSB0byBhcHBseSBmcm9tRXZlbnQgdG8gYWxsIG9mIGl0J3MgaXRlbXMuIFdlIGRvIHRoaXMgY2hlY2sgbGFzdCxcbiAgLy8gYmVjYXVzZSB0aGVyZSBhcmUgbWF5IGJlIHNvbWUgdHlwZXMgdGhhdCBhcmUgYm90aCBBcnJheUxpa2UgKmFuZCogaW1wbGVtZW50XG4gIC8vIGV2ZW50IHJlZ2lzdHJ5IHBvaW50cywgYW5kIHdlJ2QgcmF0aGVyIGRlbGVnYXRlIHRvIHRoYXQgd2hlbiBwb3NzaWJsZS5cbiAgaWYgKCFhZGQpIHtcbiAgICBpZiAoaXNBcnJheUxpa2UodGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIG1lcmdlTWFwKChzdWJUYXJnZXQ6IGFueSkgPT4gZnJvbUV2ZW50KHN1YlRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zIGFzIEV2ZW50TGlzdGVuZXJPcHRpb25zKSkoXG4gICAgICAgIGlubmVyRnJvbSh0YXJnZXQpXG4gICAgICApIGFzIE9ic2VydmFibGU8VD47XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgYWRkIGlzIGZhbHN5IGFuZCB3ZSBtYWRlIGl0IGhlcmUsIGl0J3MgYmVjYXVzZSB3ZSBkaWRuJ3RcbiAgLy8gbWF0Y2ggYW55IHZhbGlkIHRhcmdldCBvYmplY3RzIGFib3ZlLlxuICBpZiAoIWFkZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZXZlbnQgdGFyZ2V0Jyk7XG4gIH1cblxuICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHN1YnNjcmliZXIpID0+IHtcbiAgICAvLyBUaGUgaGFuZGxlciB3ZSBhcmUgZ29pbmcgdG8gcmVnaXN0ZXIuIEZvcndhcmRzIHRoZSBldmVudCBvYmplY3QsIGJ5IGl0c2VsZiwgb3JcbiAgICAvLyBhbiBhcnJheSBvZiBhcmd1bWVudHMgdG8gdGhlIGV2ZW50IGhhbmRsZXIsIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsXG4gICAgLy8gdG8gdGhlIGNvbnN1bWVyLlxuICAgIGNvbnN0IGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCgxIDwgYXJncy5sZW5ndGggPyBhcmdzIDogYXJnc1swXSk7XG4gICAgLy8gRG8gdGhlIHdvcmsgb2YgYWRkaW5nIHRoZSBoYW5kbGVyIHRvIHRoZSB0YXJnZXQuXG4gICAgYWRkKGhhbmRsZXIpO1xuICAgIC8vIFdoZW4gd2UgZmluYWxpemUsIHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBoYW5kbGVyIGFuZCBmcmVlIHVwIG1lbW9yeS5cbiAgICByZXR1cm4gKCkgPT4gcmVtb3ZlIShoYW5kbGVyKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVXNlZCB0byBjcmVhdGUgYGFkZGAgYW5kIGByZW1vdmVgIGZ1bmN0aW9ucyB0byByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBldmVudCBoYW5kbGVyc1xuICogZnJvbSBhIHRhcmdldCBpbiB0aGUgbW9zdCBjb21tb24gaGFuZGxlciBwYXR0ZXJuLCB3aGVyZSB0aGVyZSBhcmUgb25seSB0d28gYXJndW1lbnRzLlxuICogKGUuZy4gIGBvbihuYW1lLCBmbilgLCBgb2ZmKG5hbWUsIGZuKWAsIGBhZGRMaXN0ZW5lcihuYW1lLCBmbilgLCBvciBgcmVtb3ZlTGlzdGVuZXIobmFtZSwgZm4pYClcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCB3ZSdyZSBjYWxsaW5nIG1ldGhvZHMgb25cbiAqIEBwYXJhbSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgZm9yIHRoZSBldmVudCB3ZSdyZSBjcmVhdGluZyByZWdpc3RlciBvciB1bnJlZ2lzdGVyIGZ1bmN0aW9ucyBmb3JcbiAqL1xuZnVuY3Rpb24gdG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0OiBhbnksIGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiAobWV0aG9kTmFtZTogc3RyaW5nKSA9PiAoaGFuZGxlcjogYW55KSA9PiB0YXJnZXRbbWV0aG9kTmFtZV0oZXZlbnROYW1lLCBoYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgdG8gc2VlIGlmIHRoZSB0YXJnZXQgaW1wbGVtZW50cyB0aGUgcmVxdWlyZWQgbm9kZS1zdHlsZSBFdmVudEVtaXR0ZXIgbWV0aG9kc1xuICogZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgZXZlbnQgaGFuZGxlcnMuXG4gKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gY2hlY2tcbiAqL1xuZnVuY3Rpb24gaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0OiBhbnkpOiB0YXJnZXQgaXMgTm9kZVN0eWxlRXZlbnRFbWl0dGVyIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24odGFyZ2V0LmFkZExpc3RlbmVyKSAmJiBpc0Z1bmN0aW9uKHRhcmdldC5yZW1vdmVMaXN0ZW5lcik7XG59XG5cbi8qKlxuICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgdGFyZ2V0IGltcGxlbWVudHMgdGhlIHJlcXVpcmVkIGpRdWVyeS1zdHlsZSBFdmVudEVtaXR0ZXIgbWV0aG9kc1xuICogZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgZXZlbnQgaGFuZGxlcnMuXG4gKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gY2hlY2tcbiAqL1xuZnVuY3Rpb24gaXNKUXVlcnlTdHlsZUV2ZW50RW1pdHRlcih0YXJnZXQ6IGFueSk6IHRhcmdldCBpcyBKUXVlcnlTdHlsZUV2ZW50RW1pdHRlcjxhbnksIGFueT4ge1xuICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQub24pICYmIGlzRnVuY3Rpb24odGFyZ2V0Lm9mZik7XG59XG5cbi8qKlxuICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgdGFyZ2V0IGltcGxlbWVudHMgdGhlIHJlcXVpcmVkIEV2ZW50VGFyZ2V0IG1ldGhvZHNcbiAqIGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIGV2ZW50IGhhbmRsZXJzLlxuICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGNoZWNrXG4gKi9cbmZ1bmN0aW9uIGlzRXZlbnRUYXJnZXQodGFyZ2V0OiBhbnkpOiB0YXJnZXQgaXMgSGFzRXZlbnRUYXJnZXRBZGRSZW1vdmU8YW55PiB7XG4gIHJldHVybiBpc0Z1bmN0aW9uKHRhcmdldC5hZGRFdmVudExpc3RlbmVyKSAmJiBpc0Z1bmN0aW9uKHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IE5vZGVFdmVudEhhbmRsZXIgfSBmcm9tICcuL2Zyb21FdmVudCc7XG5pbXBvcnQgeyBtYXBPbmVPck1hbnlBcmdzIH0gZnJvbSAnLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzJztcblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50UGF0dGVybjxUPihcbiAgYWRkSGFuZGxlcjogKGhhbmRsZXI6IE5vZGVFdmVudEhhbmRsZXIpID0+IGFueSxcbiAgcmVtb3ZlSGFuZGxlcj86IChoYW5kbGVyOiBOb2RlRXZlbnRIYW5kbGVyLCBzaWduYWw/OiBhbnkpID0+IHZvaWRcbik6IE9ic2VydmFibGU8VD47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50UGF0dGVybjxUPihcbiAgYWRkSGFuZGxlcjogKGhhbmRsZXI6IE5vZGVFdmVudEhhbmRsZXIpID0+IGFueSxcbiAgcmVtb3ZlSGFuZGxlcj86IChoYW5kbGVyOiBOb2RlRXZlbnRIYW5kbGVyLCBzaWduYWw/OiBhbnkpID0+IHZvaWQsXG4gIHJlc3VsdFNlbGVjdG9yPzogKC4uLmFyZ3M6IGFueVtdKSA9PiBUXG4pOiBPYnNlcnZhYmxlPFQ+O1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cblxuLyoqXG4gKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgZnJvbSBhbiBhcmJpdHJhcnkgQVBJIGZvciByZWdpc3RlcmluZyBldmVudCBoYW5kbGVycy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+V2hlbiB0aGF0IG1ldGhvZCBmb3IgYWRkaW5nIGV2ZW50IGhhbmRsZXIgd2FzIHNvbWV0aGluZyB7QGxpbmsgZnJvbUV2ZW50fVxuICogd2FzIG5vdCBwcmVwYXJlZCBmb3IuPC9zcGFuPlxuICpcbiAqICFbXShmcm9tRXZlbnRQYXR0ZXJuLnBuZylcbiAqXG4gKiBgZnJvbUV2ZW50UGF0dGVybmAgYWxsb3dzIHlvdSB0byBjb252ZXJ0IGludG8gYW4gT2JzZXJ2YWJsZSBhbnkgQVBJIHRoYXQgc3VwcG9ydHMgcmVnaXN0ZXJpbmcgaGFuZGxlciBmdW5jdGlvbnNcbiAqIGZvciBldmVudHMuIEl0IGlzIHNpbWlsYXIgdG8ge0BsaW5rIGZyb21FdmVudH0sIGJ1dCBmYXJcbiAqIG1vcmUgZmxleGlibGUuIEluIGZhY3QsIGFsbCB1c2UgY2FzZXMgb2Yge0BsaW5rIGZyb21FdmVudH0gY291bGQgYmUgZWFzaWx5IGhhbmRsZWQgYnlcbiAqIGBmcm9tRXZlbnRQYXR0ZXJuYCAoYWx0aG91Z2ggaW4gc2xpZ2h0bHkgbW9yZSB2ZXJib3NlIHdheSkuXG4gKlxuICogVGhpcyBvcGVyYXRvciBhY2NlcHRzIGFzIGEgZmlyc3QgYXJndW1lbnQgYW4gYGFkZEhhbmRsZXJgIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGJlIGluamVjdGVkIHdpdGhcbiAqIGhhbmRsZXIgcGFyYW1ldGVyLiBUaGF0IGhhbmRsZXIgaXMgYWN0dWFsbHkgYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB0aGF0IHlvdSBub3cgY2FuIHBhc3NcbiAqIHRvIEFQSSBleHBlY3RpbmcgaXQuIGBhZGRIYW5kbGVyYCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBPYnNlcnZhYmxlXG4gKiByZXR1cm5lZCBieSB0aGUgb3BlcmF0b3IgaXMgc3Vic2NyaWJlZCwgc28gcmVnaXN0ZXJpbmcgaGFuZGxlciBpbiBBUEkgd2lsbCBub3RcbiAqIG5lY2Vzc2FyaWx5IGhhcHBlbiB3aGVuIGBmcm9tRXZlbnRQYXR0ZXJuYCBpcyBjYWxsZWQuXG4gKlxuICogQWZ0ZXIgcmVnaXN0cmF0aW9uLCBldmVyeSB0aW1lIGFuIGV2ZW50IHRoYXQgd2UgbGlzdGVuIHRvIGhhcHBlbnMsXG4gKiBPYnNlcnZhYmxlIHJldHVybmVkIGJ5IGBmcm9tRXZlbnRQYXR0ZXJuYCB3aWxsIGVtaXQgdmFsdWUgdGhhdCBldmVudCBoYW5kbGVyXG4gKiBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGguIE5vdGUgdGhhdCBpZiBldmVudCBoYW5kbGVyIHdhcyBjYWxsZWQgd2l0aCBtb3JlXG4gKiB0aGFuIG9uZSBhcmd1bWVudCwgc2Vjb25kIGFuZCBmb2xsb3dpbmcgYXJndW1lbnRzIHdpbGwgbm90IGFwcGVhciBpbiB0aGUgT2JzZXJ2YWJsZS5cbiAqXG4gKiBJZiBBUEkgeW91IGFyZSB1c2luZyBhbGxvd3MgdG8gdW5yZWdpc3RlciBldmVudCBoYW5kbGVycyBhcyB3ZWxsLCB5b3UgY2FuIHBhc3MgdG8gYGZyb21FdmVudFBhdHRlcm5gXG4gKiBhbm90aGVyIGZ1bmN0aW9uIC0gYHJlbW92ZUhhbmRsZXJgIC0gYXMgYSBzZWNvbmQgcGFyYW1ldGVyLiBJdCB3aWxsIGJlIGluamVjdGVkXG4gKiB3aXRoIHRoZSBzYW1lIGhhbmRsZXIgZnVuY3Rpb24gYXMgYmVmb3JlLCB3aGljaCBub3cgeW91IGNhbiB1c2UgdG8gdW5yZWdpc3RlclxuICogaXQgZnJvbSB0aGUgQVBJLiBgcmVtb3ZlSGFuZGxlcmAgd2lsbCBiZSBjYWxsZWQgd2hlbiBjb25zdW1lciBvZiByZXN1bHRpbmcgT2JzZXJ2YWJsZVxuICogdW5zdWJzY3JpYmVzIGZyb20gaXQuXG4gKlxuICogSW4gc29tZSBBUElzIHVucmVnaXN0ZXJpbmcgaXMgYWN0dWFsbHkgaGFuZGxlZCBkaWZmZXJlbnRseS4gTWV0aG9kIHJlZ2lzdGVyaW5nIGFuIGV2ZW50IGhhbmRsZXJcbiAqIHJldHVybnMgc29tZSBraW5kIG9mIHRva2VuLCB3aGljaCBpcyBsYXRlciB1c2VkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9uIHNob3VsZFxuICogYmUgdW5yZWdpc3RlcmVkIG9yIGl0IGl0c2VsZiBoYXMgbWV0aG9kIHRoYXQgdW5yZWdpc3RlcnMgZXZlbnQgaGFuZGxlci5cbiAqIElmIHRoYXQgaXMgdGhlIGNhc2Ugd2l0aCB5b3VyIEFQSSwgbWFrZSBzdXJlIHRva2VuIHJldHVybmVkXG4gKiBieSByZWdpc3RlcmluZyBtZXRob2QgaXMgcmV0dXJuZWQgYnkgYGFkZEhhbmRsZXJgLiBUaGVuIGl0IHdpbGwgYmUgcGFzc2VkXG4gKiBhcyBhIHNlY29uZCBhcmd1bWVudCB0byBgcmVtb3ZlSGFuZGxlcmAsIHdoZXJlIHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlIGl0LlxuICpcbiAqIElmIHlvdSBuZWVkIGFjY2VzcyB0byBhbGwgZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzIChub3Qgb25seSB0aGUgZmlyc3Qgb25lKSxcbiAqIG9yIHlvdSBuZWVkIHRvIHRyYW5zZm9ybSB0aGVtIGluIGFueSB3YXksIHlvdSBjYW4gY2FsbCBgZnJvbUV2ZW50UGF0dGVybmAgd2l0aCBvcHRpb25hbFxuICogdGhpcmQgcGFyYW1ldGVyIC0gcHJvamVjdCBmdW5jdGlvbiB3aGljaCB3aWxsIGFjY2VwdCBhbGwgYXJndW1lbnRzIHBhc3NlZCB0b1xuICogZXZlbnQgaGFuZGxlciB3aGVuIGl0IGlzIGNhbGxlZC4gV2hhdGV2ZXIgaXMgcmV0dXJuZWQgZnJvbSBwcm9qZWN0IGZ1bmN0aW9uIHdpbGwgYXBwZWFyIG9uXG4gKiByZXN1bHRpbmcgc3RyZWFtIGluc3RlYWQgb2YgdXN1YWwgZXZlbnQgaGFuZGxlcnMgZmlyc3QgYXJndW1lbnQuIFRoaXMgbWVhbnNcbiAqIHRoYXQgZGVmYXVsdCBwcm9qZWN0IGNhbiBiZSB0aG91Z2h0IG9mIGFzIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaXRzIGZpcnN0IHBhcmFtZXRlclxuICogYW5kIGlnbm9yZXMgdGhlIHJlc3QuXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBFbWl0cyBjbGlja3MgaGFwcGVuaW5nIG9uIHRoZSBET00gZG9jdW1lbnRcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50UGF0dGVybiB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGZ1bmN0aW9uIGFkZENsaWNrSGFuZGxlcihoYW5kbGVyKSB7XG4gKiAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG4gKiB9XG4gKlxuICogZnVuY3Rpb24gcmVtb3ZlQ2xpY2tIYW5kbGVyKGhhbmRsZXIpIHtcbiAqICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyKTtcbiAqIH1cbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnRQYXR0ZXJuKFxuICogICBhZGRDbGlja0hhbmRsZXIsXG4gKiAgIHJlbW92ZUNsaWNrSGFuZGxlclxuICogKTtcbiAqIGNsaWNrcy5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gV2hlbmV2ZXIgeW91IGNsaWNrIGFueXdoZXJlIGluIHRoZSBicm93c2VyLCBET00gTW91c2VFdmVudFxuICogLy8gb2JqZWN0IHdpbGwgYmUgbG9nZ2VkLlxuICogYGBgXG4gKlxuICogVXNlIHdpdGggQVBJIHRoYXQgcmV0dXJucyBjYW5jZWxsYXRpb24gdG9rZW5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50UGF0dGVybiB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHRva2VuID0gc29tZUFQSS5yZWdpc3RlckV2ZW50SGFuZGxlcihmdW5jdGlvbigpIHt9KTtcbiAqIHNvbWVBUEkudW5yZWdpc3RlckV2ZW50SGFuZGxlcih0b2tlbik7IC8vIHRoaXMgQVBJcyBjYW5jZWxsYXRpb24gbWV0aG9kIGFjY2VwdHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBoYW5kbGVyIGl0c2VsZiwgYnV0IHNwZWNpYWwgdG9rZW4uXG4gKlxuICogY29uc3Qgc29tZUFQSU9ic2VydmFibGUgPSBmcm9tRXZlbnRQYXR0ZXJuKFxuICogICBmdW5jdGlvbihoYW5kbGVyKSB7IHJldHVybiBzb21lQVBJLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGhhbmRsZXIpOyB9LCAvLyBOb3RlIHRoYXQgd2UgcmV0dXJuIHRoZSB0b2tlbiBoZXJlLi4uXG4gKiAgIGZ1bmN0aW9uKGhhbmRsZXIsIHRva2VuKSB7IHNvbWVBUEkudW5yZWdpc3RlckV2ZW50SGFuZGxlcih0b2tlbik7IH0gIC8vIC4uLnRvIHRoZW4gdXNlIGl0IGhlcmUuXG4gKiApO1xuICogYGBgXG4gKlxuICogVXNlIHdpdGggcHJvamVjdCBmdW5jdGlvblxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnRQYXR0ZXJuIH0gZnJvbSAncnhqcyc7XG4gKlxuICogc29tZUFQSS5yZWdpc3RlckV2ZW50SGFuZGxlcigoZXZlbnRUeXBlLCBldmVudE1lc3NhZ2UpID0+IHtcbiAqICAgY29uc29sZS5sb2coZXZlbnRUeXBlLCBldmVudE1lc3NhZ2UpOyAvLyBMb2dzICdFVkVOVF9UWVBFJyAnRVZFTlRfTUVTU0FHRScgdG8gY29uc29sZS5cbiAqIH0pO1xuICpcbiAqIGNvbnN0IHNvbWVBUElPYnNlcnZhYmxlID0gZnJvbUV2ZW50UGF0dGVybihcbiAqICAgaGFuZGxlciA9PiBzb21lQVBJLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGhhbmRsZXIpLFxuICogICBoYW5kbGVyID0+IHNvbWVBUEkudW5yZWdpc3RlckV2ZW50SGFuZGxlcihoYW5kbGVyKVxuICogICAoZXZlbnRUeXBlLCBldmVudE1lc3NhZ2UpID0+IGV2ZW50VHlwZSArICcgLS0tICcgKyBldmVudE1lc3NhZ2UgLy8gd2l0aG91dCB0aGF0IGZ1bmN0aW9uIG9ubHkgJ0VWRU5UX1RZUEUnXG4gKiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3b3VsZCBiZSBlbWl0dGVkIGJ5IHRoZSBPYnNlcnZhYmxlXG4gKlxuICogc29tZUFQSU9ic2VydmFibGUuc3Vic2NyaWJlKHZhbHVlID0+IGNvbnNvbGUubG9nKHZhbHVlKSk7XG4gKlxuICogLy8gTG9nczpcbiAqIC8vICdFVkVOVF9UWVBFIC0tLSBFVkVOVF9NRVNTQUdFJ1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgZnJvbUV2ZW50fVxuICogQHNlZSB7QGxpbmsgYmluZENhbGxiYWNrfVxuICogQHNlZSB7QGxpbmsgYmluZE5vZGVDYWxsYmFja31cbiAqXG4gKiBAcGFyYW0gYWRkSGFuZGxlciBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBgaGFuZGxlcmAgZnVuY3Rpb24gYXMgYXJndW1lbnQgYW5kIGF0dGFjaGVzIGl0XG4gKiBzb21laG93IHRvIHRoZSBhY3R1YWwgc291cmNlIG9mIGV2ZW50cy5cbiAqIEBwYXJhbSByZW1vdmVIYW5kbGVyIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIGBoYW5kbGVyYCBmdW5jdGlvbiBhcyBhbiBhcmd1bWVudCBhbmQgcmVtb3Zlc1xuICogaXQgZnJvbSB0aGUgZXZlbnQgc291cmNlLiBJZiBgYWRkSGFuZGxlcmAgcmV0dXJucyBzb21lIGtpbmQgb2YgdG9rZW4sIGByZW1vdmVIYW5kbGVyYCBmdW5jdGlvblxuICogd2lsbCBoYXZlIGl0IGFzIGEgc2Vjb25kIHBhcmFtZXRlci5cbiAqIEBwYXJhbSByZXN1bHRTZWxlY3RvciBBIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSByZXN1bHRzLiBJdCB0YWtlcyB0aGUgYXJndW1lbnRzIGZyb20gdGhlIGV2ZW50XG4gKiBoYW5kbGVyIGFuZCBzaG91bGQgcmV0dXJuIGEgc2luZ2xlIHZhbHVlLlxuICogQHJldHVybiBPYnNlcnZhYmxlIHdoaWNoLCB3aGVuIGFuIGV2ZW50IGhhcHBlbnMsIGVtaXRzIGZpcnN0IHBhcmFtZXRlciBwYXNzZWQgdG8gcmVnaXN0ZXJlZFxuICogZXZlbnQgaGFuZGxlci4gQWx0ZXJuYXRpdmVseSBpdCBlbWl0cyB3aGF0ZXZlciBwcm9qZWN0IGZ1bmN0aW9uIHJldHVybnMgYXQgdGhhdCBtb21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXZlbnRQYXR0ZXJuPFQ+KFxuICBhZGRIYW5kbGVyOiAoaGFuZGxlcjogTm9kZUV2ZW50SGFuZGxlcikgPT4gYW55LFxuICByZW1vdmVIYW5kbGVyPzogKGhhbmRsZXI6IE5vZGVFdmVudEhhbmRsZXIsIHNpZ25hbD86IGFueSkgPT4gdm9pZCxcbiAgcmVzdWx0U2VsZWN0b3I/OiAoLi4uYXJnczogYW55W10pID0+IFRcbik6IE9ic2VydmFibGU8VCB8IFRbXT4ge1xuICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZnJvbUV2ZW50UGF0dGVybjxUPihhZGRIYW5kbGVyLCByZW1vdmVIYW5kbGVyKS5waXBlKG1hcE9uZU9yTWFueUFyZ3MocmVzdWx0U2VsZWN0b3IpKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUIHwgVFtdPigoc3Vic2NyaWJlcikgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoLi4uZTogVFtdKSA9PiBzdWJzY3JpYmVyLm5leHQoZS5sZW5ndGggPT09IDEgPyBlWzBdIDogZSk7XG4gICAgY29uc3QgcmV0VmFsdWUgPSBhZGRIYW5kbGVyKGhhbmRsZXIpO1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHJlbW92ZUhhbmRsZXIpID8gKCkgPT4gcmVtb3ZlSGFuZGxlcihoYW5kbGVyLCByZXRWYWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnLi9kZWZlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXQgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogQ2hlY2tzIGEgYm9vbGVhbiBhdCBzdWJzY3JpcHRpb24gdGltZSwgYW5kIGNob29zZXMgYmV0d2VlbiBvbmUgb2YgdHdvIG9ic2VydmFibGUgc291cmNlc1xuICpcbiAqIGBpaWZgIGV4cGVjdHMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBib29sZWFuICh0aGUgYGNvbmRpdGlvbmAgZnVuY3Rpb24pLCBhbmQgdHdvIHNvdXJjZXMsXG4gKiB0aGUgYHRydWVSZXN1bHRgIGFuZCB0aGUgYGZhbHNlUmVzdWx0YCwgYW5kIHJldHVybnMgYW4gT2JzZXJ2YWJsZS5cbiAqXG4gKiBBdCB0aGUgbW9tZW50IG9mIHN1YnNjcmlwdGlvbiwgdGhlIGBjb25kaXRpb25gIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSWYgdGhlIHJlc3VsdCBpcyBgdHJ1ZWAsIHRoZVxuICogc3Vic2NyaXB0aW9uIHdpbGwgYmUgdG8gdGhlIHNvdXJjZSBwYXNzZWQgYXMgdGhlIGB0cnVlUmVzdWx0YCwgb3RoZXJ3aXNlLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgYmVcbiAqIHRvIHRoZSBzb3VyY2UgcGFzc2VkIGFzIHRoZSBgZmFsc2VSZXN1bHRgLlxuICpcbiAqIElmIHlvdSBuZWVkIHRvIGNoZWNrIG1vcmUgdGhhbiB0d28gb3B0aW9ucyB0byBjaG9vc2UgYmV0d2VlbiBtb3JlIHRoYW4gb25lIG9ic2VydmFibGUsIGhhdmUgYSBsb29rIGF0IHRoZSB7QGxpbmsgZGVmZXJ9IGNyZWF0aW9uIG1ldGhvZC5cbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIENoYW5nZSBhdCBydW50aW1lIHdoaWNoIE9ic2VydmFibGUgd2lsbCBiZSBzdWJzY3JpYmVkXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGlpZiwgb2YgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBsZXQgc3Vic2NyaWJlVG9GaXJzdDtcbiAqIGNvbnN0IGZpcnN0T3JTZWNvbmQgPSBpaWYoXG4gKiAgICgpID0+IHN1YnNjcmliZVRvRmlyc3QsXG4gKiAgIG9mKCdmaXJzdCcpLFxuICogICBvZignc2Vjb25kJylcbiAqICk7XG4gKlxuICogc3Vic2NyaWJlVG9GaXJzdCA9IHRydWU7XG4gKiBmaXJzdE9yU2Vjb25kLnN1YnNjcmliZSh2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSkpO1xuICpcbiAqIC8vIExvZ3M6XG4gKiAvLyAnZmlyc3QnXG4gKlxuICogc3Vic2NyaWJlVG9GaXJzdCA9IGZhbHNlO1xuICogZmlyc3RPclNlY29uZC5zdWJzY3JpYmUodmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpKTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8gJ3NlY29uZCdcbiAqIGBgYFxuICpcbiAqIENvbnRyb2wgYWNjZXNzIHRvIGFuIE9ic2VydmFibGVcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaWlmLCBvZiwgRU1QVFkgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBsZXQgYWNjZXNzR3JhbnRlZDtcbiAqIGNvbnN0IG9ic2VydmFibGVJZllvdUhhdmVBY2Nlc3MgPSBpaWYoXG4gKiAgICgpID0+IGFjY2Vzc0dyYW50ZWQsXG4gKiAgIG9mKCdJdCBzZWVtcyB5b3UgaGF2ZSBhbiBhY2Nlc3MuLi4nKSxcbiAqICAgRU1QVFlcbiAqICk7XG4gKlxuICogYWNjZXNzR3JhbnRlZCA9IHRydWU7XG4gKiBvYnNlcnZhYmxlSWZZb3VIYXZlQWNjZXNzLnN1YnNjcmliZSh7XG4gKiAgIG5leHQ6IHZhbHVlID0+IGNvbnNvbGUubG9nKHZhbHVlKSxcbiAqICAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUubG9nKCdUaGUgZW5kJylcbiAqIH0pO1xuICpcbiAqIC8vIExvZ3M6XG4gKiAvLyAnSXQgc2VlbXMgeW91IGhhdmUgYW4gYWNjZXNzLi4uJ1xuICogLy8gJ1RoZSBlbmQnXG4gKlxuICogYWNjZXNzR3JhbnRlZCA9IGZhbHNlO1xuICogb2JzZXJ2YWJsZUlmWW91SGF2ZUFjY2Vzcy5zdWJzY3JpYmUoe1xuICogICBuZXh0OiB2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSksXG4gKiAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZygnVGhlIGVuZCcpXG4gKiB9KTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8gJ1RoZSBlbmQnXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBkZWZlcn1cbiAqXG4gKiBAcGFyYW0gY29uZGl0aW9uIENvbmRpdGlvbiB3aGljaCBPYnNlcnZhYmxlIHNob3VsZCBiZSBjaG9zZW4uXG4gKiBAcGFyYW0gdHJ1ZVJlc3VsdCBBbiBPYnNlcnZhYmxlIHRoYXQgd2lsbCBiZSBzdWJzY3JpYmVkIGlmIGNvbmRpdGlvbiBpcyB0cnVlLlxuICogQHBhcmFtIGZhbHNlUmVzdWx0IEFuIE9ic2VydmFibGUgdGhhdCB3aWxsIGJlIHN1YnNjcmliZWQgaWYgY29uZGl0aW9uIGlzIGZhbHNlLlxuICogQHJldHVybiBBbiBvYnNlcnZhYmxlIHRoYXQgcHJveGllcyB0byBgdHJ1ZVJlc3VsdGAgb3IgYGZhbHNlUmVzdWx0YCwgZGVwZW5kaW5nIG9uIHRoZSByZXN1bHQgb2YgdGhlIGBjb25kaXRpb25gIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaWlmPFQsIEY+KGNvbmRpdGlvbjogKCkgPT4gYm9vbGVhbiwgdHJ1ZVJlc3VsdDogT2JzZXJ2YWJsZUlucHV0PFQ+LCBmYWxzZVJlc3VsdDogT2JzZXJ2YWJsZUlucHV0PEY+KTogT2JzZXJ2YWJsZTxUIHwgRj4ge1xuICByZXR1cm4gZGVmZXIoKCkgPT4gKGNvbmRpdGlvbigpID8gdHJ1ZVJlc3VsdCA6IGZhbHNlUmVzdWx0KSk7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU2NoZWR1bGVyTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGFzeW5jIGFzIGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IGlzU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9pc1NjaGVkdWxlcic7XG5pbXBvcnQgeyBpc1ZhbGlkRGF0ZSB9IGZyb20gJy4uL3V0aWwvaXNEYXRlJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIHdhaXQgZm9yIGEgc3BlY2lmaWVkIHRpbWUgcGVyaW9kLCBvciBleGFjdCBkYXRlLCBiZWZvcmVcbiAqIGVtaXR0aW5nIHRoZSBudW1iZXIgMC5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+VXNlZCB0byBlbWl0IGEgbm90aWZpY2F0aW9uIGFmdGVyIGEgZGVsYXkuPC9zcGFuPlxuICpcbiAqIFRoaXMgb2JzZXJ2YWJsZSBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIGRlbGF5cyBpbiBjb2RlLCBvciByYWNpbmcgYWdhaW5zdCBvdGhlciB2YWx1ZXNcbiAqIGZvciBhZC1ob2MgdGltZW91dHMuXG4gKlxuICogVGhlIGBkZWxheWAgaXMgc3BlY2lmaWVkIGJ5IGRlZmF1bHQgaW4gbWlsbGlzZWNvbmRzLCBob3dldmVyIHByb3ZpZGluZyBhIGN1c3RvbSBzY2hlZHVsZXIgY291bGRcbiAqIGNyZWF0ZSBhIGRpZmZlcmVudCBiZWhhdmlvci5cbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIFdhaXQgMyBzZWNvbmRzIGFuZCBzdGFydCBhbm90aGVyIG9ic2VydmFibGVcbiAqXG4gKiBZb3UgbWlnaHQgd2FudCB0byB1c2UgYHRpbWVyYCB0byBkZWxheSBzdWJzY3JpcHRpb24gdG8gYW5cbiAqIG9ic2VydmFibGUgYnkgYSBzZXQgYW1vdW50IG9mIHRpbWUuIEhlcmUgd2UgdXNlIGEgdGltZXIgd2l0aFxuICoge0BsaW5rIGNvbmNhdE1hcFRvfSBvciB7QGxpbmsgY29uY2F0TWFwfSBpbiBvcmRlciB0byB3YWl0XG4gKiBhIGZldyBzZWNvbmRzIGFuZCBzdGFydCBhIHN1YnNjcmlwdGlvbiB0byBhIHNvdXJjZS5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIHRpbWVyLCBjb25jYXRNYXAgfSBmcm9tICdyeGpzJztcbiAqXG4gKiAvLyBUaGlzIGNvdWxkIGJlIGFueSBvYnNlcnZhYmxlXG4gKiBjb25zdCBzb3VyY2UgPSBvZigxLCAyLCAzKTtcbiAqXG4gKiB0aW1lcigzMDAwKVxuICogICAucGlwZShjb25jYXRNYXAoKCkgPT4gc291cmNlKSlcbiAqICAgLnN1YnNjcmliZShjb25zb2xlLmxvZyk7XG4gKiBgYGBcbiAqXG4gKiBUYWtlIGFsbCB2YWx1ZXMgdW50aWwgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IG1pbnV0ZVxuICpcbiAqIFVzaW5nIGEgYERhdGVgIGFzIHRoZSB0cmlnZ2VyIGZvciB0aGUgZmlyc3QgZW1pc3Npb24sIHlvdSBjYW5cbiAqIGRvIHRoaW5ncyBsaWtlIHdhaXQgdW50aWwgbWlkbmlnaHQgdG8gZmlyZSBhbiBldmVudCwgb3IgaW4gdGhpcyBjYXNlLFxuICogd2FpdCB1bnRpbCBhIG5ldyBtaW51dGUgc3RhcnRzIChjaG9zZW4gc28gdGhlIGV4YW1wbGUgd291bGRuJ3QgdGFrZVxuICogdG9vIGxvbmcgdG8gcnVuKSBpbiBvcmRlciB0byBzdG9wIHdhdGNoaW5nIGEgc3RyZWFtLiBMZXZlcmFnaW5nXG4gKiB7QGxpbmsgdGFrZVVudGlsfS5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIHRha2VVbnRpbCwgdGltZXIgfSBmcm9tICdyeGpzJztcbiAqXG4gKiAvLyBCdWlsZCBhIERhdGUgb2JqZWN0IHRoYXQgbWFya3MgdGhlXG4gKiAvLyBuZXh0IG1pbnV0ZS5cbiAqIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAqIGNvbnN0IHN0YXJ0T2ZOZXh0TWludXRlID0gbmV3IERhdGUoXG4gKiAgIGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCksXG4gKiAgIGN1cnJlbnREYXRlLmdldE1vbnRoKCksXG4gKiAgIGN1cnJlbnREYXRlLmdldERhdGUoKSxcbiAqICAgY3VycmVudERhdGUuZ2V0SG91cnMoKSxcbiAqICAgY3VycmVudERhdGUuZ2V0TWludXRlcygpICsgMVxuICogKTtcbiAqXG4gKiAvLyBUaGlzIGNvdWxkIGJlIGFueSBvYnNlcnZhYmxlIHN0cmVhbVxuICogY29uc3Qgc291cmNlID0gaW50ZXJ2YWwoMTAwMCk7XG4gKlxuICogY29uc3QgcmVzdWx0ID0gc291cmNlLnBpcGUoXG4gKiAgIHRha2VVbnRpbCh0aW1lcihzdGFydE9mTmV4dE1pbnV0ZSkpXG4gKiApO1xuICpcbiAqIHJlc3VsdC5zdWJzY3JpYmUoY29uc29sZS5sb2cpO1xuICogYGBgXG4gKlxuICogIyMjIEtub3duIExpbWl0YXRpb25zXG4gKlxuICogLSBUaGUge0BsaW5rIGFzeW5jU2NoZWR1bGVyfSB1c2VzIGBzZXRUaW1lb3V0YCB3aGljaCBoYXMgbGltaXRhdGlvbnMgZm9yIGhvdyBmYXIgaW4gdGhlIGZ1dHVyZSBpdCBjYW4gYmUgc2NoZWR1bGVkLlxuICpcbiAqIC0gSWYgYSBgc2NoZWR1bGVyYCBpcyBwcm92aWRlZCB0aGF0IHJldHVybnMgYSB0aW1lc3RhbXAgb3RoZXIgdGhhbiBhbiBlcG9jaCBmcm9tIGBub3coKWAsIGFuZFxuICogYSBgRGF0ZWAgb2JqZWN0IGlzIHBhc3NlZCB0byB0aGUgYGR1ZVRpbWVgIGFyZ3VtZW50LCB0aGUgY2FsY3VsYXRpb24gZm9yIHdoZW4gdGhlIGZpcnN0IGVtaXNzaW9uXG4gKiBzaG91bGQgb2NjdXIgd2lsbCBiZSBpbmNvcnJlY3QuIEluIHRoaXMgY2FzZSwgaXQgd291bGQgYmUgYmVzdCB0byBkbyB5b3VyIG93biBjYWxjdWxhdGlvbnNcbiAqIGFoZWFkIG9mIHRpbWUsIGFuZCBwYXNzIGEgYG51bWJlcmAgaW4gYXMgdGhlIGBkdWVUaW1lYC5cbiAqXG4gKiBAcGFyYW0gZHVlIElmIGEgYG51bWJlcmAsIHRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZW1pdHRpbmcuXG4gKiBJZiBhIGBEYXRlYCwgdGhlIGV4YWN0IHRpbWUgYXQgd2hpY2ggdG8gZW1pdC5cbiAqIEBwYXJhbSBzY2hlZHVsZXIgVGhlIHNjaGVkdWxlciB0byB1c2UgdG8gc2NoZWR1bGUgdGhlIGRlbGF5LiBEZWZhdWx0cyB0byB7QGxpbmsgYXN5bmNTY2hlZHVsZXJ9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZXIoZHVlOiBudW1iZXIgfCBEYXRlLCBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKTogT2JzZXJ2YWJsZTwwPjtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9ic2VydmFibGUgdGhhdCBzdGFydHMgYW4gaW50ZXJ2YWwgYWZ0ZXIgYSBzcGVjaWZpZWQgZGVsYXksIGVtaXR0aW5nIGluY3JlbWVudGluZyBudW1iZXJzIC0tIHN0YXJ0aW5nIGF0IGAwYCAtLVxuICogb24gZWFjaCBpbnRlcnZhbCBhZnRlciB3b3Jkcy5cbiAqXG4gKiBUaGUgYGRlbGF5YCBhbmQgYGludGVydmFsRHVyYXRpb25gIGFyZSBzcGVjaWZpZWQgYnkgZGVmYXVsdCBpbiBtaWxsaXNlY29uZHMsIGhvd2V2ZXIgcHJvdmlkaW5nIGEgY3VzdG9tIHNjaGVkdWxlciBjb3VsZFxuICogY3JlYXRlIGEgZGlmZmVyZW50IGJlaGF2aW9yLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiAjIyMgU3RhcnQgYW4gaW50ZXJ2YWwgdGhhdCBzdGFydHMgcmlnaHQgYXdheVxuICpcbiAqIFNpbmNlIHtAbGluayBpbnRlcnZhbH0gd2FpdHMgZm9yIHRoZSBwYXNzZWQgZGVsYXkgYmVmb3JlIHN0YXJ0aW5nLFxuICogc29tZXRpbWVzIHRoYXQncyBub3QgaWRlYWwuIFlvdSBtYXkgd2FudCB0byBzdGFydCBhbiBpbnRlcnZhbCBpbW1lZGlhdGVseS5cbiAqIGB0aW1lcmAgd29ya3Mgd2VsbCBmb3IgdGhpcy4gSGVyZSB3ZSBoYXZlIGJvdGggc2lkZS1ieS1zaWRlIHNvIHlvdSBjYW5cbiAqIHNlZSB0aGVtIGluIGNvbXBhcmlzb24uXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgb2JzZXJ2YWJsZSB3aWxsIG5ldmVyIGNvbXBsZXRlLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB0aW1lciwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiB0aW1lcigwLCAxMDAwKS5zdWJzY3JpYmUobiA9PiBjb25zb2xlLmxvZygndGltZXInLCBuKSk7XG4gKiBpbnRlcnZhbCgxMDAwKS5zdWJzY3JpYmUobiA9PiBjb25zb2xlLmxvZygnaW50ZXJ2YWwnLCBuKSk7XG4gKiBgYGBcbiAqXG4gKiAjIyMgS25vd24gTGltaXRhdGlvbnNcbiAqXG4gKiAtIFRoZSB7QGxpbmsgYXN5bmNTY2hlZHVsZXJ9IHVzZXMgYHNldFRpbWVvdXRgIHdoaWNoIGhhcyBsaW1pdGF0aW9ucyBmb3IgaG93IGZhciBpbiB0aGUgZnV0dXJlIGl0IGNhbiBiZSBzY2hlZHVsZWQuXG4gKlxuICogLSBJZiBhIGBzY2hlZHVsZXJgIGlzIHByb3ZpZGVkIHRoYXQgcmV0dXJucyBhIHRpbWVzdGFtcCBvdGhlciB0aGFuIGFuIGVwb2NoIGZyb20gYG5vdygpYCwgYW5kXG4gKiBhIGBEYXRlYCBvYmplY3QgaXMgcGFzc2VkIHRvIHRoZSBgZHVlVGltZWAgYXJndW1lbnQsIHRoZSBjYWxjdWxhdGlvbiBmb3Igd2hlbiB0aGUgZmlyc3QgZW1pc3Npb25cbiAqIHNob3VsZCBvY2N1ciB3aWxsIGJlIGluY29ycmVjdC4gSW4gdGhpcyBjYXNlLCBpdCB3b3VsZCBiZSBiZXN0IHRvIGRvIHlvdXIgb3duIGNhbGN1bGF0aW9uc1xuICogYWhlYWQgb2YgdGltZSwgYW5kIHBhc3MgYSBgbnVtYmVyYCBpbiBhcyB0aGUgYHN0YXJ0RHVlYC5cbiAqIEBwYXJhbSBzdGFydER1ZSBJZiBhIGBudW1iZXJgLCBpcyB0aGUgdGltZSB0byB3YWl0IGJlZm9yZSBzdGFydGluZyB0aGUgaW50ZXJ2YWwuXG4gKiBJZiBhIGBEYXRlYCwgaXMgdGhlIGV4YWN0IHRpbWUgYXQgd2hpY2ggdG8gc3RhcnQgdGhlIGludGVydmFsLlxuICogQHBhcmFtIGludGVydmFsRHVyYXRpb24gVGhlIGRlbGF5IGJldHdlZW4gZWFjaCB2YWx1ZSBlbWl0dGVkIGluIHRoZSBpbnRlcnZhbC4gUGFzc2luZyBhXG4gKiBuZWdhdGl2ZSBudW1iZXIgaGVyZSB3aWxsIHJlc3VsdCBpbiBpbW1lZGlhdGUgY29tcGxldGlvbiBhZnRlciB0aGUgZmlyc3QgdmFsdWUgaXMgZW1pdHRlZCwgYXMgdGhvdWdoXG4gKiBubyBgaW50ZXJ2YWxEdXJhdGlvbmAgd2FzIHBhc3NlZCBhdCBhbGwuXG4gKiBAcGFyYW0gc2NoZWR1bGVyIFRoZSBzY2hlZHVsZXIgdG8gdXNlIHRvIHNjaGVkdWxlIHRoZSBkZWxheS4gRGVmYXVsdHMgdG8ge0BsaW5rIGFzeW5jU2NoZWR1bGVyfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKHN0YXJ0RHVlOiBudW1iZXIgfCBEYXRlLCBpbnRlcnZhbER1cmF0aW9uOiBudW1iZXIsIHNjaGVkdWxlcj86IFNjaGVkdWxlckxpa2UpOiBPYnNlcnZhYmxlPG51bWJlcj47XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhlIHNpZ25hdHVyZSBhbGxvd2luZyBgdW5kZWZpbmVkYCB0byBiZSBwYXNzZWQgZm9yIGBpbnRlcnZhbER1cmF0aW9uYCB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSB0aGUgYHRpbWVyKGR1ZVRpbWUsIHNjaGVkdWxlcj8pYCBzaWduYXR1cmUgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKGR1ZVRpbWU6IG51bWJlciB8IERhdGUsIHVudXNlZDogdW5kZWZpbmVkLCBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKTogT2JzZXJ2YWJsZTwwPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKFxuICBkdWVUaW1lOiBudW1iZXIgfCBEYXRlID0gMCxcbiAgaW50ZXJ2YWxPclNjaGVkdWxlcj86IG51bWJlciB8IFNjaGVkdWxlckxpa2UsXG4gIHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZSA9IGFzeW5jU2NoZWR1bGVyXG4pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAvLyBTaW5jZSBuZWdhdGl2ZSBpbnRlcnZhbER1cmF0aW9uIGlzIHRyZWF0ZWQgYXMgdGhvdWdoIG5vXG4gIC8vIGludGVydmFsIHdhcyBzcGVjaWZpZWQgYXQgYWxsLCB3ZSBzdGFydCB3aXRoIGEgbmVnYXRpdmUgbnVtYmVyLlxuICBsZXQgaW50ZXJ2YWxEdXJhdGlvbiA9IC0xO1xuXG4gIGlmIChpbnRlcnZhbE9yU2NoZWR1bGVyICE9IG51bGwpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgc2Vjb25kIGFyZ3VtZW50LCBhbmQgaXQncyBhIHNjaGVkdWxlcixcbiAgICAvLyBvdmVycmlkZSB0aGUgc2NoZWR1bGVyIHdlIGhhZCBkZWZhdWx0ZWQuIE90aGVyd2lzZSxcbiAgICAvLyBpdCBtdXN0IGJlIGFuIGludGVydmFsLlxuICAgIGlmIChpc1NjaGVkdWxlcihpbnRlcnZhbE9yU2NoZWR1bGVyKSkge1xuICAgICAgc2NoZWR1bGVyID0gaW50ZXJ2YWxPclNjaGVkdWxlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgKmNvdWxkKiBiZSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZVxuICAgICAgLy8gaXQncyBsaWtlIG5vdCBwYXNzaW5nIGFuIGludGVydmFsRHVyYXRpb24gYXQgYWxsLlxuICAgICAgaW50ZXJ2YWxEdXJhdGlvbiA9IGludGVydmFsT3JTY2hlZHVsZXI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgLy8gSWYgYSB2YWxpZCBkYXRlIGlzIHBhc3NlZCwgY2FsY3VsYXRlIGhvdyBsb25nIHRvIHdhaXQgYmVmb3JlXG4gICAgLy8gZXhlY3V0aW5nIHRoZSBmaXJzdCB2YWx1ZS4uLiBvdGhlcndpc2UsIGlmIGl0J3MgYSBudW1iZXIganVzdCBzY2hlZHVsZVxuICAgIC8vIHRoYXQgbWFueSBtaWxsaXNlY29uZHMgKG9yIHNjaGVkdWxlci1zcGVjaWZpZWQgdW5pdCBzaXplKSBpbiB0aGUgZnV0dXJlLlxuICAgIGxldCBkdWUgPSBpc1ZhbGlkRGF0ZShkdWVUaW1lKSA/ICtkdWVUaW1lIC0gc2NoZWR1bGVyIS5ub3coKSA6IGR1ZVRpbWU7XG5cbiAgICBpZiAoZHVlIDwgMCkge1xuICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IHNjaGVkdWxlIGluIHRoZSBmdXR1cmUuXG4gICAgICBkdWUgPSAwO1xuICAgIH1cblxuICAgIC8vIFRoZSBpbmNyZW1lbnRpbmcgdmFsdWUgd2UgZW1pdC5cbiAgICBsZXQgbiA9IDA7XG5cbiAgICAvLyBTdGFydCB0aGUgdGltZXIuXG4gICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgIC8vIEVtaXQgdGhlIG5leHQgdmFsdWUgYW5kIGluY3JlbWVudC5cbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KG4rKyk7XG5cbiAgICAgICAgaWYgKDAgPD0gaW50ZXJ2YWxEdXJhdGlvbikge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBpbnRlcnZhbCBhZnRlciB0aGUgaW5pdGlhbCB0aW1lcixcbiAgICAgICAgICAvLyByZXNjaGVkdWxlIHdpdGggdGhlIHBlcmlvZC5cbiAgICAgICAgICB0aGlzLnNjaGVkdWxlKHVuZGVmaW5lZCwgaW50ZXJ2YWxEdXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gV2UgZGlkbid0IGhhdmUgYW4gaW50ZXJ2YWwuIFNvIGp1c3QgY29tcGxldGUuXG4gICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgZHVlKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXN5bmMnO1xuaW1wb3J0IHsgU2NoZWR1bGVyTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAnLi90aW1lcic7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgc2VxdWVudGlhbCBudW1iZXJzIGV2ZXJ5IHNwZWNpZmllZFxuICogaW50ZXJ2YWwgb2YgdGltZSwgb24gYSBzcGVjaWZpZWQge0BsaW5rIFNjaGVkdWxlckxpa2V9LlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5FbWl0cyBpbmNyZW1lbnRhbCBudW1iZXJzIHBlcmlvZGljYWxseSBpbiB0aW1lLjwvc3Bhbj5cbiAqXG4gKiAhW10oaW50ZXJ2YWwucG5nKVxuICpcbiAqIGBpbnRlcnZhbGAgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gaW5maW5pdGUgc2VxdWVuY2Ugb2ZcbiAqIGFzY2VuZGluZyBpbnRlZ2Vycywgd2l0aCBhIGNvbnN0YW50IGludGVydmFsIG9mIHRpbWUgb2YgeW91ciBjaG9vc2luZ1xuICogYmV0d2VlbiB0aG9zZSBlbWlzc2lvbnMuIFRoZSBmaXJzdCBlbWlzc2lvbiBpcyBub3Qgc2VudCBpbW1lZGlhdGVseSwgYnV0XG4gKiBvbmx5IGFmdGVyIHRoZSBmaXJzdCBwZXJpb2QgaGFzIHBhc3NlZC4gQnkgZGVmYXVsdCwgdGhpcyBvcGVyYXRvciB1c2VzIHRoZVxuICogYGFzeW5jYCB7QGxpbmsgU2NoZWR1bGVyTGlrZX0gdG8gcHJvdmlkZSBhIG5vdGlvbiBvZiB0aW1lLCBidXQgeW91IG1heSBwYXNzIGFueVxuICoge0BsaW5rIFNjaGVkdWxlckxpa2V9IHRvIGl0LlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBFbWl0cyBhc2NlbmRpbmcgbnVtYmVycywgb25lIGV2ZXJ5IHNlY29uZCAoMTAwMG1zKSB1cCB0byB0aGUgbnVtYmVyIDNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIHRha2UgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBudW1iZXJzID0gaW50ZXJ2YWwoMTAwMCk7XG4gKlxuICogY29uc3QgdGFrZUZvdXJOdW1iZXJzID0gbnVtYmVycy5waXBlKHRha2UoNCkpO1xuICpcbiAqIHRha2VGb3VyTnVtYmVycy5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZygnTmV4dDogJywgeCkpO1xuICpcbiAqIC8vIExvZ3M6XG4gKiAvLyBOZXh0OiAwXG4gKiAvLyBOZXh0OiAxXG4gKiAvLyBOZXh0OiAyXG4gKiAvLyBOZXh0OiAzXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayB0aW1lcn1cbiAqIEBzZWUge0BsaW5rIGRlbGF5fVxuICpcbiAqIEBwYXJhbSBwZXJpb2QgVGhlIGludGVydmFsIHNpemUgaW4gbWlsbGlzZWNvbmRzIChieSBkZWZhdWx0KSBvciB0aGUgdGltZSB1bml0IGRldGVybWluZWRcbiAqIGJ5IHRoZSBzY2hlZHVsZXIncyBjbG9jay5cbiAqIEBwYXJhbSBzY2hlZHVsZXIgVGhlIHtAbGluayBTY2hlZHVsZXJMaWtlfSB0byB1c2UgZm9yIHNjaGVkdWxpbmcgdGhlIGVtaXNzaW9uIG9mIHZhbHVlcyxcbiAqIGFuZCBwcm92aWRpbmcgYSBub3Rpb24gb2YgXCJ0aW1lXCIuXG4gKiBAcmV0dXJuIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhIHNlcXVlbnRpYWwgbnVtYmVyIGVhY2ggdGltZSBpbnRlcnZhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVydmFsKHBlcmlvZCA9IDAsIHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZSA9IGFzeW5jU2NoZWR1bGVyKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgaWYgKHBlcmlvZCA8IDApIHtcbiAgICAvLyBXZSBjYW5ub3Qgc2NoZWR1bGUgYW4gaW50ZXJ2YWwgaW4gdGhlIHBhc3QuXG4gICAgcGVyaW9kID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aW1lcihwZXJpb2QsIHBlcmlvZCwgc2NoZWR1bGVyKTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXQsIE9ic2VydmFibGVJbnB1dFR1cGxlLCBTY2hlZHVsZXJMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbWVyZ2VBbGwgfSBmcm9tICcuLi9vcGVyYXRvcnMvbWVyZ2VBbGwnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi9pbm5lckZyb20nO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICcuL2VtcHR5JztcbmltcG9ydCB7IHBvcE51bWJlciwgcG9wU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9hcmdzJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuL2Zyb20nO1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2U8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oLi4uc291cmNlczogWy4uLk9ic2VydmFibGVJbnB1dFR1cGxlPEE+XSk6IE9ic2VydmFibGU8QVtudW1iZXJdPjtcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZTxBIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdPiguLi5zb3VyY2VzQW5kQ29uY3VycmVuY3k6IFsuLi5PYnNlcnZhYmxlSW5wdXRUdXBsZTxBPiwgbnVtYmVyP10pOiBPYnNlcnZhYmxlPEFbbnVtYmVyXT47XG4vKiogQGRlcHJlY2F0ZWQgVGhlIGBzY2hlZHVsZXJgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBgc2NoZWR1bGVkYCBhbmQgYG1lcmdlQWxsYC4gRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvc2NoZWR1bGVyLWFyZ3VtZW50ICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2U8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oXG4gIC4uLnNvdXJjZXNBbmRTY2hlZHVsZXI6IFsuLi5PYnNlcnZhYmxlSW5wdXRUdXBsZTxBPiwgU2NoZWR1bGVyTGlrZT9dXG4pOiBPYnNlcnZhYmxlPEFbbnVtYmVyXT47XG4vKiogQGRlcHJlY2F0ZWQgVGhlIGBzY2hlZHVsZXJgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBgc2NoZWR1bGVkYCBhbmQgYG1lcmdlQWxsYC4gRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvc2NoZWR1bGVyLWFyZ3VtZW50ICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2U8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oXG4gIC4uLnNvdXJjZXNBbmRDb25jdXJyZW5jeUFuZFNjaGVkdWxlcjogWy4uLk9ic2VydmFibGVJbnB1dFR1cGxlPEE+LCBudW1iZXI/LCBTY2hlZHVsZXJMaWtlP11cbik6IE9ic2VydmFibGU8QVtudW1iZXJdPjtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG91dHB1dCBPYnNlcnZhYmxlIHdoaWNoIGNvbmN1cnJlbnRseSBlbWl0cyBhbGwgdmFsdWVzIGZyb20gZXZlcnlcbiAqIGdpdmVuIGlucHV0IE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkZsYXR0ZW5zIG11bHRpcGxlIE9ic2VydmFibGVzIHRvZ2V0aGVyIGJ5IGJsZW5kaW5nXG4gKiB0aGVpciB2YWx1ZXMgaW50byBvbmUgT2JzZXJ2YWJsZS48L3NwYW4+XG4gKlxuICogIVtdKG1lcmdlLnBuZylcbiAqXG4gKiBgbWVyZ2VgIHN1YnNjcmliZXMgdG8gZWFjaCBnaXZlbiBpbnB1dCBPYnNlcnZhYmxlIChhcyBhcmd1bWVudHMpLCBhbmQgc2ltcGx5XG4gKiBmb3J3YXJkcyAod2l0aG91dCBkb2luZyBhbnkgdHJhbnNmb3JtYXRpb24pIGFsbCB0aGUgdmFsdWVzIGZyb20gYWxsIHRoZSBpbnB1dFxuICogT2JzZXJ2YWJsZXMgdG8gdGhlIG91dHB1dCBPYnNlcnZhYmxlLiBUaGUgb3V0cHV0IE9ic2VydmFibGUgb25seSBjb21wbGV0ZXNcbiAqIG9uY2UgYWxsIGlucHV0IE9ic2VydmFibGVzIGhhdmUgY29tcGxldGVkLiBBbnkgZXJyb3IgZGVsaXZlcmVkIGJ5IGFuIGlucHV0XG4gKiBPYnNlcnZhYmxlIHdpbGwgYmUgaW1tZWRpYXRlbHkgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBNZXJnZSB0b2dldGhlciB0d28gT2JzZXJ2YWJsZXM6IDFzIGludGVydmFsIGFuZCBjbGlja3NcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbWVyZ2UsIGZyb21FdmVudCwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgdGltZXIgPSBpbnRlcnZhbCgxMDAwKTtcbiAqIGNvbnN0IGNsaWNrc09yVGltZXIgPSBtZXJnZShjbGlja3MsIHRpbWVyKTtcbiAqIGNsaWNrc09yVGltZXIuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZzpcbiAqIC8vIHRpbWVyIHdpbGwgZW1pdCBhc2NlbmRpbmcgdmFsdWVzLCBvbmUgZXZlcnkgc2Vjb25kKDEwMDBtcykgdG8gY29uc29sZVxuICogLy8gY2xpY2tzIGxvZ3MgTW91c2VFdmVudHMgdG8gY29uc29sZSBldmVyeSB0aW1lIHRoZSBcImRvY3VtZW50XCIgaXMgY2xpY2tlZFxuICogLy8gU2luY2UgdGhlIHR3byBzdHJlYW1zIGFyZSBtZXJnZWQgeW91IHNlZSB0aGVzZSBoYXBwZW5pbmdcbiAqIC8vIGFzIHRoZXkgb2NjdXIuXG4gKiBgYGBcbiAqXG4gKiBNZXJnZSB0b2dldGhlciAzIE9ic2VydmFibGVzLCBidXQgcnVuIG9ubHkgMiBjb25jdXJyZW50bHlcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIHRha2UsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgdGltZXIxID0gaW50ZXJ2YWwoMTAwMCkucGlwZSh0YWtlKDEwKSk7XG4gKiBjb25zdCB0aW1lcjIgPSBpbnRlcnZhbCgyMDAwKS5waXBlKHRha2UoNikpO1xuICogY29uc3QgdGltZXIzID0gaW50ZXJ2YWwoNTAwKS5waXBlKHRha2UoMTApKTtcbiAqXG4gKiBjb25zdCBjb25jdXJyZW50ID0gMjsgLy8gdGhlIGFyZ3VtZW50XG4gKiBjb25zdCBtZXJnZWQgPSBtZXJnZSh0aW1lcjEsIHRpbWVyMiwgdGltZXIzLCBjb25jdXJyZW50KTtcbiAqIG1lcmdlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gUmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nOlxuICogLy8gLSBGaXJzdCB0aW1lcjEgYW5kIHRpbWVyMiB3aWxsIHJ1biBjb25jdXJyZW50bHlcbiAqIC8vIC0gdGltZXIxIHdpbGwgZW1pdCBhIHZhbHVlIGV2ZXJ5IDEwMDBtcyBmb3IgMTAgaXRlcmF0aW9uc1xuICogLy8gLSB0aW1lcjIgd2lsbCBlbWl0IGEgdmFsdWUgZXZlcnkgMjAwMG1zIGZvciA2IGl0ZXJhdGlvbnNcbiAqIC8vIC0gYWZ0ZXIgdGltZXIxIGhpdHMgaXRzIG1heCBpdGVyYXRpb24sIHRpbWVyMiB3aWxsXG4gKiAvLyAgIGNvbnRpbnVlLCBhbmQgdGltZXIzIHdpbGwgc3RhcnQgdG8gcnVuIGNvbmN1cnJlbnRseSB3aXRoIHRpbWVyMlxuICogLy8gLSB3aGVuIHRpbWVyMiBoaXRzIGl0cyBtYXggaXRlcmF0aW9uIGl0IHRlcm1pbmF0ZXMsIGFuZFxuICogLy8gICB0aW1lcjMgd2lsbCBjb250aW51ZSB0byBlbWl0IGEgdmFsdWUgZXZlcnkgNTAwbXMgdW50aWwgaXQgaXMgY29tcGxldGVcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIG1lcmdlQWxsfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VNYXB9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcFRvfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VTY2FufVxuICpcbiAqIEBwYXJhbSBhcmdzIGBPYnNlcnZhYmxlSW5wdXRgcyB0byBtZXJnZSB0b2dldGhlci4gSWYgdGhlIGxhc3QgcGFyYW1ldGVyXG4gKiBpcyBvZiB0eXBlIG51bWJlciwgYG1lcmdlYCB3aWxsIHVzZSBpdCB0byBsaW1pdCBudW1iZXIgb2YgY29uY3VycmVudGx5XG4gKiBzdWJzY3JpYmVkIGBPYnNlcnZhYmxlSW5wdXRgcy4gSWYgdGhlIGxhc3QgcGFyYW1ldGVyIGlzIHtAbGluayBTY2hlZHVsZXJMaWtlfSxcbiAqIGl0IHdpbGwgYmUgdXNlZCBmb3Igc2NoZWR1bGluZyB0aGUgZW1pc3Npb24gb2YgdmFsdWVzLlxuICogQHJldHVybiBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgdGhhdCBhcmUgdGhlIHJlc3VsdCBvZiBldmVyeSBpbnB1dCBPYnNlcnZhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UoLi4uYXJnczogKE9ic2VydmFibGVJbnB1dDx1bmtub3duPiB8IG51bWJlciB8IFNjaGVkdWxlckxpa2UpW10pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgY29uc3Qgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKGFyZ3MpO1xuICBjb25zdCBjb25jdXJyZW50ID0gcG9wTnVtYmVyKGFyZ3MsIEluZmluaXR5KTtcbiAgY29uc3Qgc291cmNlcyA9IGFyZ3MgYXMgT2JzZXJ2YWJsZUlucHV0PHVua25vd24+W107XG4gIHJldHVybiAhc291cmNlcy5sZW5ndGhcbiAgICA/IC8vIE5vIHNvdXJjZSBwcm92aWRlZFxuICAgICAgRU1QVFlcbiAgICA6IHNvdXJjZXMubGVuZ3RoID09PSAxXG4gICAgPyAvLyBPbmUgc291cmNlPyBKdXN0IHJldHVybiBpdC5cbiAgICAgIGlubmVyRnJvbShzb3VyY2VzWzBdKVxuICAgIDogLy8gTWVyZ2UgYWxsIHNvdXJjZXNcbiAgICAgIG1lcmdlQWxsKGNvbmN1cnJlbnQpKGZyb20oc291cmNlcywgc2NoZWR1bGVyKSk7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWwvbm9vcCc7XG5cbi8qKlxuICogQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIG5vIGl0ZW1zIHRvIHRoZSBPYnNlcnZlciBhbmQgbmV2ZXIgY29tcGxldGVzLlxuICpcbiAqICFbXShuZXZlci5wbmcpXG4gKlxuICogQSBzaW1wbGUgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIG5laXRoZXIgdmFsdWVzIG5vciBlcnJvcnMgbm9yIHRoZSBjb21wbGV0aW9uXG4gKiBub3RpZmljYXRpb24uIEl0IGNhbiBiZSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9yIGZvciBjb21wb3Npbmcgd2l0aCBvdGhlclxuICogT2JzZXJ2YWJsZXMuIFBsZWFzZSBub3RlIHRoYXQgYnkgbmV2ZXIgZW1pdHRpbmcgYSBjb21wbGV0ZSBub3RpZmljYXRpb24sIHRoaXNcbiAqIE9ic2VydmFibGUga2VlcHMgdGhlIHN1YnNjcmlwdGlvbiBmcm9tIGJlaW5nIGRpc3Bvc2VkIGF1dG9tYXRpY2FsbHkuXG4gKiBTdWJzY3JpcHRpb25zIG5lZWQgdG8gYmUgbWFudWFsbHkgZGlzcG9zZWQuXG4gKlxuICogIyMgIEV4YW1wbGVcbiAqXG4gKiBFbWl0IHRoZSBudW1iZXIgNywgdGhlbiBuZXZlciBlbWl0IGFueXRoaW5nIGVsc2UgKG5vdCBldmVuIGNvbXBsZXRlKVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBORVZFUiwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgaW5mbyA9ICgpID0+IGNvbnNvbGUubG9nKCdXaWxsIG5vdCBiZSBjYWxsZWQnKTtcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBORVZFUi5waXBlKHN0YXJ0V2l0aCg3KSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHtcbiAqICAgbmV4dDogeCA9PiBjb25zb2xlLmxvZyh4KSxcbiAqICAgZXJyb3I6IGluZm8sXG4gKiAgIGNvbXBsZXRlOiBpbmZvXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIE9ic2VydmFibGV9XG4gKiBAc2VlIHtAbGluayBFTVBUWX1cbiAqIEBzZWUge0BsaW5rIG9mfVxuICogQHNlZSB7QGxpbmsgdGhyb3dFcnJvcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE5FVkVSID0gbmV3IE9ic2VydmFibGU8bmV2ZXI+KG5vb3ApO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIHdpdGggdGhlIHtAbGluayBORVZFUn0gY29uc3RhbnQuIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5ldmVyKCkge1xuICByZXR1cm4gTkVWRVI7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0VHVwbGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhcmdzT3JBcmdBcnJheSB9IGZyb20gJy4uL3V0aWwvYXJnc09yQXJnQXJyYXknO1xuaW1wb3J0IHsgT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4vaW5uZXJGcm9tJztcblxuZXhwb3J0IGZ1bmN0aW9uIG9uRXJyb3JSZXN1bWVOZXh0PEEgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10+KHNvdXJjZXM6IFsuLi5PYnNlcnZhYmxlSW5wdXRUdXBsZTxBPl0pOiBPYnNlcnZhYmxlPEFbbnVtYmVyXT47XG5leHBvcnQgZnVuY3Rpb24gb25FcnJvclJlc3VtZU5leHQ8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oLi4uc291cmNlczogWy4uLk9ic2VydmFibGVJbnB1dFR1cGxlPEE+XSk6IE9ic2VydmFibGU8QVtudW1iZXJdPjtcblxuLyoqXG4gKiBXaGVuIGFueSBvZiB0aGUgcHJvdmlkZWQgT2JzZXJ2YWJsZSBlbWl0cyBhIGNvbXBsZXRlIG9yIGFuIGVycm9yIG5vdGlmaWNhdGlvbiwgaXQgaW1tZWRpYXRlbHkgc3Vic2NyaWJlcyB0byB0aGUgbmV4dCBvbmVcbiAqIHRoYXQgd2FzIHBhc3NlZC5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RXhlY3V0ZSBzZXJpZXMgb2YgT2JzZXJ2YWJsZXMgbm8gbWF0dGVyIHdoYXQsIGV2ZW4gaWYgaXQgbWVhbnMgc3dhbGxvd2luZyBlcnJvcnMuPC9zcGFuPlxuICpcbiAqICFbXShvbkVycm9yUmVzdW1lTmV4dC5wbmcpXG4gKlxuICogYG9uRXJyb3JSZXN1bWVOZXh0YCB3aWxsIHN1YnNjcmliZSB0byBlYWNoIG9ic2VydmFibGUgc291cmNlIGl0IGlzIHByb3ZpZGVkLCBpbiBvcmRlci5cbiAqIElmIHRoZSBzb3VyY2UgaXQncyBzdWJzY3JpYmVkIHRvIGVtaXRzIGFuIGVycm9yIG9yIGNvbXBsZXRlcywgaXQgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IHNvdXJjZVxuICogd2l0aG91dCBlcnJvci5cbiAqXG4gKiBJZiBgb25FcnJvclJlc3VtZU5leHRgIGlzIHByb3ZpZGVkIG5vIGFyZ3VtZW50cywgb3IgYSBzaW5nbGUsIGVtcHR5IGFycmF5LCBpdCB3aWxsIHJldHVybiB7QGxpbmsgRU1QVFl9LlxuICpcbiAqIGBvbkVycm9yUmVzdW1lTmV4dGAgaXMgYmFzaWNhbGx5IHtAbGluayBjb25jYXR9LCBvbmx5IGl0IHdpbGwgY29udGludWUsIGV2ZW4gaWYgb25lIG9mIGl0c1xuICogc291cmNlcyBlbWl0cyBhbiBlcnJvci5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRvIGhhbmRsZSBhbnkgZXJyb3JzIHRocm93biBieSBzb3VyY2VzIHZpYSB0aGUgcmVzdWx0IG9mXG4gKiBgb25FcnJvclJlc3VtZU5leHRgLiBJZiB5b3Ugd2FudCB0byBoYW5kbGUgZXJyb3JzIHRocm93biBpbiBhbnkgZ2l2ZW4gc291cmNlLCB5b3UgY2FuXG4gKiBhbHdheXMgdXNlIHRoZSB7QGxpbmsgY2F0Y2hFcnJvcn0gb3BlcmF0b3Igb24gdGhlbSBiZWZvcmUgcGFzc2luZyB0aGVtIGludG8gYG9uRXJyb3JSZXN1bWVOZXh0YC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogU3Vic2NyaWJlIHRvIHRoZSBuZXh0IE9ic2VydmFibGUgYWZ0ZXIgbWFwIGZhaWxzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9uRXJyb3JSZXN1bWVOZXh0LCBvZiwgbWFwIH0gZnJvbSAncnhqcyc7XG4gKlxuICogb25FcnJvclJlc3VtZU5leHQoXG4gKiAgIG9mKDEsIDIsIDMsIDApLnBpcGUoXG4gKiAgICAgbWFwKHggPT4ge1xuICogICAgICAgaWYgKHggPT09IDApIHtcbiAqICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAqICAgICAgIH1cbiAqICAgICAgIHJldHVybiAxMCAvIHg7XG4gKiAgICAgfSlcbiAqICAgKSxcbiAqICAgb2YoMSwgMiwgMylcbiAqIClcbiAqIC5zdWJzY3JpYmUoe1xuICogICBuZXh0OiB2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSksXG4gKiAgIGVycm9yOiBlcnIgPT4gY29uc29sZS5sb2coZXJyKSwgICAgIC8vIFdpbGwgbmV2ZXIgYmUgY2FsbGVkLlxuICogICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ2RvbmUnKVxuICogfSk7XG4gKlxuICogLy8gTG9nczpcbiAqIC8vIDEwXG4gKiAvLyA1XG4gKiAvLyAzLjMzMzMzMzMzMzMzMzMzMzVcbiAqIC8vIDFcbiAqIC8vIDJcbiAqIC8vIDNcbiAqIC8vICdkb25lJ1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgY29uY2F0fVxuICogQHNlZSB7QGxpbmsgY2F0Y2hFcnJvcn1cbiAqXG4gKiBAcGFyYW0gc291cmNlcyBgT2JzZXJ2YWJsZUlucHV0YHMgcGFzc2VkIGVpdGhlciBkaXJlY3RseSBvciBhcyBhbiBhcnJheS5cbiAqIEByZXR1cm4gQW4gT2JzZXJ2YWJsZSB0aGF0IGNvbmNhdGVuYXRlcyBhbGwgc291cmNlcywgb25lIGFmdGVyIHRoZSBvdGhlcixcbiAqIGlnbm9yaW5nIGFsbCBlcnJvcnMsIHN1Y2ggdGhhdCBhbnkgZXJyb3IgY2F1c2VzIGl0IHRvIG1vdmUgb24gdG8gdGhlIG5leHQgc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb25FcnJvclJlc3VtZU5leHQ8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oXG4gIC4uLnNvdXJjZXM6IFtbLi4uT2JzZXJ2YWJsZUlucHV0VHVwbGU8QT5dXSB8IFsuLi5PYnNlcnZhYmxlSW5wdXRUdXBsZTxBPl1cbik6IE9ic2VydmFibGU8QVtudW1iZXJdPiB7XG4gIGNvbnN0IG5leHRTb3VyY2VzOiBPYnNlcnZhYmxlSW5wdXRUdXBsZTxBPiA9IGFyZ3NPckFyZ0FycmF5KHNvdXJjZXMpIGFzIGFueTtcblxuICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICBsZXQgc291cmNlSW5kZXggPSAwO1xuICAgIGNvbnN0IHN1YnNjcmliZU5leHQgPSAoKSA9PiB7XG4gICAgICBpZiAoc291cmNlSW5kZXggPCBuZXh0U291cmNlcy5sZW5ndGgpIHtcbiAgICAgICAgbGV0IG5leHRTb3VyY2U6IE9ic2VydmFibGU8QVtudW1iZXJdPjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXh0U291cmNlID0gaW5uZXJGcm9tKG5leHRTb3VyY2VzW3NvdXJjZUluZGV4KytdKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgc3Vic2NyaWJlTmV4dCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbm5lclN1YnNjcmliZXIgPSBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgbm9vcCwgbm9vcCk7XG4gICAgICAgIG5leHRTb3VyY2Uuc3Vic2NyaWJlKGlubmVyU3Vic2NyaWJlcik7XG4gICAgICAgIGlubmVyU3Vic2NyaWJlci5hZGQoc3Vic2NyaWJlTmV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBzdWJzY3JpYmVOZXh0KCk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFNjaGVkdWxlckxpa2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi9mcm9tJztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGZyb20oT2JqZWN0LmVudHJpZXMob2JqKSlgIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhaXJzPFQ+KGFycjogcmVhZG9ubHkgVFtdLCBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKTogT2JzZXJ2YWJsZTxbc3RyaW5nLCBUXT47XG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgZnJvbShPYmplY3QuZW50cmllcyhvYmopKWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFpcnM8TyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihvYmo6IE8sIHNjaGVkdWxlcj86IFNjaGVkdWxlckxpa2UpOiBPYnNlcnZhYmxlPFtrZXlvZiBPLCBPW2tleW9mIE9dXT47XG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgZnJvbShPYmplY3QuZW50cmllcyhvYmopKWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFpcnM8VD4oaXRlcmFibGU6IEl0ZXJhYmxlPFQ+LCBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKTogT2JzZXJ2YWJsZTxbc3RyaW5nLCBUXT47XG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgZnJvbShPYmplY3QuZW50cmllcyhvYmopKWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFpcnMoXG4gIG46IG51bWJlciB8IGJpZ2ludCB8IGJvb2xlYW4gfCAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHwgc3ltYm9sLFxuICBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlXG4pOiBPYnNlcnZhYmxlPFtuZXZlciwgbmV2ZXJdPjtcblxuLyoqXG4gKiBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIE9ic2VydmFibGUgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlR1cm4gZW50cmllcyBvZiBhbiBvYmplY3QgaW50byBhIHN0cmVhbS48L3NwYW4+XG4gKlxuICogIVtdKHBhaXJzLnBuZylcbiAqXG4gKiBgcGFpcnNgIHRha2VzIGFuIGFyYml0cmFyeSBvYmplY3QgYW5kIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFycmF5cy4gRWFjaFxuICogZW1pdHRlZCBhcnJheSBoYXMgZXhhY3RseSB0d28gZWxlbWVudHMgLSB0aGUgZmlyc3QgaXMgYSBrZXkgZnJvbSB0aGUgb2JqZWN0XG4gKiBhbmQgdGhlIHNlY29uZCBpcyBhIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBrZXkuIEtleXMgYXJlIGV4dHJhY3RlZCBmcm9tXG4gKiBhbiBvYmplY3QgdmlhIGBPYmplY3Qua2V5c2AgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIHRoYXQgdGhleSB3aWxsIGJlIG9ubHlcbiAqIGVudW1lcmFibGUga2V5cyB0aGF0IGFyZSBwcmVzZW50IG9uIGFuIG9iamVjdCBkaXJlY3RseSAtIG5vdCBvbmVzIGluaGVyaXRlZFxuICogdmlhIHByb3RvdHlwZSBjaGFpbi5cbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGVzZSBhcnJheXMgYXJlIGVtaXR0ZWQgc3luY2hyb25vdXNseS4gVG8gY2hhbmdlIHRoYXQgeW91IGNhblxuICogcGFzcyBhIHtAbGluayBTY2hlZHVsZXJMaWtlfSBhcyBhIHNlY29uZCBhcmd1bWVudCB0byBgcGFpcnNgLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3QgdG8gYW4gT2JzZXJ2YWJsZVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYWlycyB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IG9iaiA9IHtcbiAqICAgZm9vOiA0MixcbiAqICAgYmFyOiA1NixcbiAqICAgYmF6OiA3OFxuICogfTtcbiAqXG4gKiBwYWlycyhvYmopLnN1YnNjcmliZSh7XG4gKiAgIG5leHQ6IHZhbHVlID0+IGNvbnNvbGUubG9nKHZhbHVlKSxcbiAqICAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUubG9nKCdDb21wbGV0ZSEnKVxuICogfSk7XG4gKlxuICogLy8gTG9nczpcbiAqIC8vIFsnZm9vJywgNDJdXG4gKiAvLyBbJ2JhcicsIDU2XVxuICogLy8gWydiYXonLCA3OF1cbiAqIC8vICdDb21wbGV0ZSEnXG4gKiBgYGBcbiAqXG4gKiAjIyMgT2JqZWN0LmVudHJpZXMgcmVxdWlyZWRcbiAqXG4gKiBJbiBJRSwgeW91IHdpbGwgbmVlZCB0byBwb2x5ZmlsbCBgT2JqZWN0LmVudHJpZXNgIGluIG9yZGVyIHRvIHVzZSB0aGlzLlxuICogW01ETiBoYXMgYSBwb2x5ZmlsbCBoZXJlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvZW50cmllcylcbiAqXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gaW5zcGVjdCBhbmQgdHVybiBpbnRvIGFuIE9ic2VydmFibGUgc2VxdWVuY2UuXG4gKiBAcGFyYW0gc2NoZWR1bGVyIEFuIG9wdGlvbmFsIElTY2hlZHVsZXIgdG8gc2NoZWR1bGUgd2hlbiByZXN1bHRpbmdcbiAqIE9ic2VydmFibGUgd2lsbCBlbWl0IHZhbHVlcy5cbiAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgc2VxdWVuY2Ugb2YgW2tleSwgdmFsdWVdIHBhaXJzIGZyb20gdGhlIG9iamVjdC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgZnJvbShPYmplY3QuZW50cmllcyhvYmopKWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFpcnMob2JqOiBhbnksIHNjaGVkdWxlcj86IFNjaGVkdWxlckxpa2UpIHtcbiAgcmV0dXJuIGZyb20oT2JqZWN0LmVudHJpZXMob2JqKSwgc2NoZWR1bGVyIGFzIGFueSk7XG59XG4iLCAiaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBUcnV0aHlUeXBlc09mIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYSBjbG9zdXJlIGluc3RlYWQgb2YgYSBgdGhpc0FyZ2AuIFNpZ25hdHVyZXMgYWNjZXB0aW5nIGEgYHRoaXNBcmdgIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXI8VCwgUyBleHRlbmRzIFQsIEE+KHByZWRpY2F0ZTogKHRoaXM6IEEsIHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiB2YWx1ZSBpcyBTLCB0aGlzQXJnOiBBKTogT3BlcmF0b3JGdW5jdGlvbjxULCBTPjtcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXI8VCwgUyBleHRlbmRzIFQ+KHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiB2YWx1ZSBpcyBTKTogT3BlcmF0b3JGdW5jdGlvbjxULCBTPjtcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXI8VD4ocHJlZGljYXRlOiBCb29sZWFuQ29uc3RydWN0b3IpOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFRydXRoeVR5cGVzT2Y8VD4+O1xuLyoqIEBkZXByZWNhdGVkIFVzZSBhIGNsb3N1cmUgaW5zdGVhZCBvZiBhIGB0aGlzQXJnYC4gU2lnbmF0dXJlcyBhY2NlcHRpbmcgYSBgdGhpc0FyZ2Agd2lsbCBiZSByZW1vdmVkIGluIHY4LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcjxULCBBPihwcmVkaWNhdGU6ICh0aGlzOiBBLCB2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbiwgdGhpc0FyZzogQSk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPjtcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXI8VD4ocHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD47XG5cbi8qKlxuICogRmlsdGVyIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGJ5IG9ubHkgZW1pdHRpbmcgdGhvc2UgdGhhdFxuICogc2F0aXNmeSBhIHNwZWNpZmllZCBwcmVkaWNhdGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkxpa2VcbiAqIFtBcnJheS5wcm90b3R5cGUuZmlsdGVyKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZpbHRlciksXG4gKiBpdCBvbmx5IGVtaXRzIGEgdmFsdWUgZnJvbSB0aGUgc291cmNlIGlmIGl0IHBhc3NlcyBhIGNyaXRlcmlvbiBmdW5jdGlvbi48L3NwYW4+XG4gKlxuICogIVtdKGZpbHRlci5wbmcpXG4gKlxuICogU2ltaWxhciB0byB0aGUgd2VsbC1rbm93biBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kLCB0aGlzIG9wZXJhdG9yXG4gKiB0YWtlcyB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUsIHBhc3NlcyB0aGVtIHRocm91Z2ggYSBgcHJlZGljYXRlYFxuICogZnVuY3Rpb24gYW5kIG9ubHkgZW1pdHMgdGhvc2UgdmFsdWVzIHRoYXQgeWllbGRlZCBgdHJ1ZWAuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIEVtaXQgb25seSBjbGljayBldmVudHMgd2hvc2UgdGFyZ2V0IHdhcyBhIERJViBlbGVtZW50XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gKiBkaXYuc3R5bGUuY3NzVGV4dCA9ICd3aWR0aDogMjAwcHg7IGhlaWdodDogMjAwcHg7IGJhY2tncm91bmQ6ICMwOWM7JztcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgY2xpY2tzT25EaXZzID0gY2xpY2tzLnBpcGUoZmlsdGVyKGV2ID0+ICg8SFRNTEVsZW1lbnQ+ZXYudGFyZ2V0KS50YWdOYW1lID09PSAnRElWJykpO1xuICogY2xpY2tzT25EaXZzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGRpc3RpbmN0fVxuICogQHNlZSB7QGxpbmsgZGlzdGluY3RVbnRpbENoYW5nZWR9XG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZH1cbiAqIEBzZWUge0BsaW5rIGlnbm9yZUVsZW1lbnRzfVxuICogQHNlZSB7QGxpbmsgcGFydGl0aW9ufVxuICogQHNlZSB7QGxpbmsgc2tpcH1cbiAqXG4gKiBAcGFyYW0gcHJlZGljYXRlIEEgZnVuY3Rpb24gdGhhdFxuICogZXZhbHVhdGVzIGVhY2ggdmFsdWUgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuIElmIGl0IHJldHVybnMgYHRydWVgLFxuICogdGhlIHZhbHVlIGlzIGVtaXR0ZWQsIGlmIGBmYWxzZWAgdGhlIHZhbHVlIGlzIG5vdCBwYXNzZWQgdG8gdGhlIG91dHB1dFxuICogT2JzZXJ2YWJsZS4gVGhlIGBpbmRleGAgcGFyYW1ldGVyIGlzIHRoZSBudW1iZXIgYGlgIGZvciB0aGUgaS10aCBzb3VyY2VcbiAqIGVtaXNzaW9uIHRoYXQgaGFzIGhhcHBlbmVkIHNpbmNlIHRoZSBzdWJzY3JpcHRpb24sIHN0YXJ0aW5nIGZyb20gdGhlIG51bWJlclxuICogYDBgLlxuICogQHBhcmFtIHRoaXNBcmcgQW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiBgdGhpc2BcbiAqIGluIHRoZSBgcHJlZGljYXRlYCBmdW5jdGlvbi5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW1zIGZyb20gdGhlXG4gKiBzb3VyY2UgT2JzZXJ2YWJsZSB0aGF0IHNhdGlzZnkgdGhlIHNwZWNpZmllZCBgcHJlZGljYXRlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcjxUPihwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbiwgdGhpc0FyZz86IGFueSk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICAvLyBBbiBpbmRleCBwYXNzZWQgdG8gb3VyIHByZWRpY2F0ZSBmdW5jdGlvbiBvbiBlYWNoIGNhbGwuXG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIC8vIFN1YnNjcmliZSB0byB0aGUgc291cmNlLCBhbGwgZXJyb3JzIGFuZCBjb21wbGV0aW9ucyBhcmVcbiAgICAvLyBmb3J3YXJkZWQgdG8gdGhlIGNvbnN1bWVyLlxuICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICAvLyBDYWxsIHRoZSBwcmVkaWNhdGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYHRoaXNgIGNvbnRleHQsXG4gICAgICAvLyBpZiB0aGUgcHJlZGljYXRlIHJldHVybnMgYHRydWVgLCB0aGVuIHNlbmQgdGhlIHZhbHVlXG4gICAgICAvLyB0byB0aGUgY29uc3VtZXIuXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgKHZhbHVlKSA9PiBwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgrKykgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKSlcbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBub3QgfSBmcm9tICcuLi91dGlsL25vdCc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICcuLi9vcGVyYXRvcnMvZmlsdGVyJztcbmltcG9ydCB7IE9ic2VydmFibGVJbnB1dCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4vaW5uZXJGcm9tJztcblxuLyoqIEBkZXByZWNhdGVkIFVzZSBhIGNsb3N1cmUgaW5zdGVhZCBvZiBhIGB0aGlzQXJnYC4gU2lnbmF0dXJlcyBhY2NlcHRpbmcgYSBgdGhpc0FyZ2Agd2lsbCBiZSByZW1vdmVkIGluIHY4LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpdGlvbjxULCBVIGV4dGVuZHMgVCwgQT4oXG4gIHNvdXJjZTogT2JzZXJ2YWJsZUlucHV0PFQ+LFxuICBwcmVkaWNhdGU6ICh0aGlzOiBBLCB2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gdmFsdWUgaXMgVSxcbiAgdGhpc0FyZzogQVxuKTogW09ic2VydmFibGU8VT4sIE9ic2VydmFibGU8RXhjbHVkZTxULCBVPj5dO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpdGlvbjxULCBVIGV4dGVuZHMgVD4oXG4gIHNvdXJjZTogT2JzZXJ2YWJsZUlucHV0PFQ+LFxuICBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gdmFsdWUgaXMgVVxuKTogW09ic2VydmFibGU8VT4sIE9ic2VydmFibGU8RXhjbHVkZTxULCBVPj5dO1xuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGEgY2xvc3VyZSBpbnN0ZWFkIG9mIGEgYHRoaXNBcmdgLiBTaWduYXR1cmVzIGFjY2VwdGluZyBhIGB0aGlzQXJnYCB3aWxsIGJlIHJlbW92ZWQgaW4gdjguICovXG5leHBvcnQgZnVuY3Rpb24gcGFydGl0aW9uPFQsIEE+KFxuICBzb3VyY2U6IE9ic2VydmFibGVJbnB1dDxUPixcbiAgcHJlZGljYXRlOiAodGhpczogQSwgdmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4sXG4gIHRoaXNBcmc6IEFcbik6IFtPYnNlcnZhYmxlPFQ+LCBPYnNlcnZhYmxlPFQ+XTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aXRpb248VD4oc291cmNlOiBPYnNlcnZhYmxlSW5wdXQ8VD4sIHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTogW09ic2VydmFibGU8VD4sIE9ic2VydmFibGU8VD5dO1xuXG4vKipcbiAqIFNwbGl0cyB0aGUgc291cmNlIE9ic2VydmFibGUgaW50byB0d28sIG9uZSB3aXRoIHZhbHVlcyB0aGF0IHNhdGlzZnkgYVxuICogcHJlZGljYXRlLCBhbmQgYW5vdGhlciB3aXRoIHZhbHVlcyB0aGF0IGRvbid0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBmaWx0ZXJ9LCBidXQgcmV0dXJucyB0d28gT2JzZXJ2YWJsZXM6XG4gKiBvbmUgbGlrZSB0aGUgb3V0cHV0IG9mIHtAbGluayBmaWx0ZXJ9LCBhbmQgdGhlIG90aGVyIHdpdGggdmFsdWVzIHRoYXQgZGlkIG5vdFxuICogcGFzcyB0aGUgY29uZGl0aW9uLjwvc3Bhbj5cbiAqXG4gKiAhW10ocGFydGl0aW9uLnBuZylcbiAqXG4gKiBgcGFydGl0aW9uYCBvdXRwdXRzIGFuIGFycmF5IHdpdGggdHdvIE9ic2VydmFibGVzIHRoYXQgcGFydGl0aW9uIHRoZSB2YWx1ZXNcbiAqIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRocm91Z2ggdGhlIGdpdmVuIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLiBUaGUgZmlyc3RcbiAqIE9ic2VydmFibGUgaW4gdGhhdCBhcnJheSBlbWl0cyBzb3VyY2UgdmFsdWVzIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIGFyZ3VtZW50XG4gKiByZXR1cm5zIHRydWUuIFRoZSBzZWNvbmQgT2JzZXJ2YWJsZSBlbWl0cyBzb3VyY2UgdmFsdWVzIGZvciB3aGljaCB0aGVcbiAqIHByZWRpY2F0ZSByZXR1cm5zIGZhbHNlLiBUaGUgZmlyc3QgYmVoYXZlcyBsaWtlIHtAbGluayBmaWx0ZXJ9IGFuZCB0aGUgc2Vjb25kXG4gKiBiZWhhdmVzIGxpa2Uge0BsaW5rIGZpbHRlcn0gd2l0aCB0aGUgcHJlZGljYXRlIG5lZ2F0ZWQuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFBhcnRpdGlvbiBhIHNldCBvZiBudW1iZXJzIGludG8gb2RkcyBhbmQgZXZlbnMgb2JzZXJ2YWJsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIHBhcnRpdGlvbiB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IG9ic2VydmFibGVWYWx1ZXMgPSBvZigxLCAyLCAzLCA0LCA1LCA2KTtcbiAqIGNvbnN0IFtldmVucyQsIG9kZHMkXSA9IHBhcnRpdGlvbihvYnNlcnZhYmxlVmFsdWVzLCB2YWx1ZSA9PiB2YWx1ZSAlIDIgPT09IDApO1xuICpcbiAqIG9kZHMkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKCdvZGRzJywgeCkpO1xuICogZXZlbnMkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKCdldmVucycsIHgpKTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8gb2RkcyAxXG4gKiAvLyBvZGRzIDNcbiAqIC8vIG9kZHMgNVxuICogLy8gZXZlbnMgMlxuICogLy8gZXZlbnMgNFxuICogLy8gZXZlbnMgNlxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgZmlsdGVyfVxuICpcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBgT2JzZXJ2YWJsZUlucHV0YCB0aGF0IHdpbGwgYmUgc3BsaXQgaW50byBhIHR1cGxlIG9mXG4gKiB0d28gT2JzZXJ2YWJsZSBlbGVtZW50cy5cbiAqIEBwYXJhbSBwcmVkaWNhdGUgQSBmdW5jdGlvbiB0aGF0IGV2YWx1YXRlcyBlYWNoIHZhbHVlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZS4gSWYgaXQgcmV0dXJucyBgdHJ1ZWAsIHRoZSB2YWx1ZSBpcyBlbWl0dGVkIG9uIHRoZSBmaXJzdCBPYnNlcnZhYmxlXG4gKiBpbiB0aGUgcmV0dXJuZWQgYXJyYXksIGlmIGBmYWxzZWAgdGhlIHZhbHVlIGlzIGVtaXR0ZWQgb24gdGhlIHNlY29uZCBPYnNlcnZhYmxlXG4gKiBpbiB0aGUgYXJyYXkuIFRoZSBgaW5kZXhgIHBhcmFtZXRlciBpcyB0aGUgbnVtYmVyIGBpYCBmb3IgdGhlIGktdGggc291cmNlXG4gKiBlbWlzc2lvbiB0aGF0IGhhcyBoYXBwZW5lZCBzaW5jZSB0aGUgc3Vic2NyaXB0aW9uLCBzdGFydGluZyBmcm9tIHRoZSBudW1iZXIgYDBgLlxuICogQHBhcmFtIHRoaXNBcmcgQW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiBgdGhpc2AgaW4gdGhlXG4gKiBgcHJlZGljYXRlYCBmdW5jdGlvbi5cbiAqIEByZXR1cm4gQW4gYXJyYXkgd2l0aCB0d28gT2JzZXJ2YWJsZXM6IG9uZSB3aXRoIHZhbHVlcyB0aGF0IHBhc3NlZCB0aGVcbiAqIHByZWRpY2F0ZSwgYW5kIGFub3RoZXIgd2l0aCB2YWx1ZXMgdGhhdCBkaWQgbm90IHBhc3MgdGhlIHByZWRpY2F0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpdGlvbjxUPihcbiAgc291cmNlOiBPYnNlcnZhYmxlSW5wdXQ8VD4sXG4gIHByZWRpY2F0ZTogKHRoaXM6IGFueSwgdmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4sXG4gIHRoaXNBcmc/OiBhbnlcbik6IFtPYnNlcnZhYmxlPFQ+LCBPYnNlcnZhYmxlPFQ+XSB7XG4gIHJldHVybiBbZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykoaW5uZXJGcm9tKHNvdXJjZSkpLCBmaWx0ZXIobm90KHByZWRpY2F0ZSwgdGhpc0FyZykpKGlubmVyRnJvbShzb3VyY2UpKV0gYXMgW1xuICAgIE9ic2VydmFibGU8VD4sXG4gICAgT2JzZXJ2YWJsZTxUPlxuICBdO1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4vaW5uZXJGcm9tJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXQsIE9ic2VydmFibGVJbnB1dFR1cGxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXJnc09yQXJnQXJyYXkgfSBmcm9tICcuLi91dGlsL2FyZ3NPckFyZ0FycmF5JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gcmFjZTxUIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdPihpbnB1dHM6IFsuLi5PYnNlcnZhYmxlSW5wdXRUdXBsZTxUPl0pOiBPYnNlcnZhYmxlPFRbbnVtYmVyXT47XG5leHBvcnQgZnVuY3Rpb24gcmFjZTxUIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdPiguLi5pbnB1dHM6IFsuLi5PYnNlcnZhYmxlSW5wdXRUdXBsZTxUPl0pOiBPYnNlcnZhYmxlPFRbbnVtYmVyXT47XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgbWlycm9ycyB0aGUgZmlyc3Qgc291cmNlIG9ic2VydmFibGUgdG8gZW1pdCBhbiBpdGVtLlxuICpcbiAqICFbXShyYWNlLnBuZylcbiAqXG4gKiBgcmFjZWAgcmV0dXJucyBhbiBvYnNlcnZhYmxlLCB0aGF0IHdoZW4gc3Vic2NyaWJlZCB0bywgc3Vic2NyaWJlcyB0byBhbGwgc291cmNlIG9ic2VydmFibGVzIGltbWVkaWF0ZWx5LlxuICogQXMgc29vbiBhcyBvbmUgb2YgdGhlIHNvdXJjZSBvYnNlcnZhYmxlcyBlbWl0cyBhIHZhbHVlLCB0aGUgcmVzdWx0IHVuc3Vic2NyaWJlcyBmcm9tIHRoZSBvdGhlciBzb3VyY2VzLlxuICogVGhlIHJlc3VsdGluZyBvYnNlcnZhYmxlIHdpbGwgZm9yd2FyZCBhbGwgbm90aWZpY2F0aW9ucywgaW5jbHVkaW5nIGVycm9yIGFuZCBjb21wbGV0aW9uLCBmcm9tIHRoZSBcIndpbm5pbmdcIlxuICogc291cmNlIG9ic2VydmFibGUuXG4gKlxuICogSWYgb25lIG9mIHRoZSB1c2VkIHNvdXJjZSBvYnNlcnZhYmxlIHRocm93cyBhbiBlcnJvcnMgYmVmb3JlIGEgZmlyc3Qgbm90aWZpY2F0aW9uXG4gKiB0aGUgcmFjZSBvcGVyYXRvciB3aWxsIGFsc28gdGhyb3cgYW4gZXJyb3IsIG5vIG1hdHRlciBpZiBhbm90aGVyIHNvdXJjZSBvYnNlcnZhYmxlXG4gKiBjb3VsZCBwb3RlbnRpYWxseSB3aW4gdGhlIHJhY2UuXG4gKlxuICogYHJhY2VgIGNhbiBiZSB1c2VmdWwgZm9yIHNlbGVjdGluZyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgZmFzdGVzdCBuZXR3b3JrIGNvbm5lY3Rpb24gZm9yXG4gKiBIVFRQIG9yIFdlYlNvY2tldHMuIGByYWNlYCBjYW4gYWxzbyBiZSB1c2VmdWwgZm9yIHN3aXRjaGluZyBvYnNlcnZhYmxlIGNvbnRleHQgYmFzZWQgb24gdXNlclxuICogaW5wdXQuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFN1YnNjcmliZXMgdG8gdGhlIG9ic2VydmFibGUgdGhhdCB3YXMgdGhlIGZpcnN0IHRvIHN0YXJ0IGVtaXR0aW5nLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbnRlcnZhbCwgbWFwLCByYWNlIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgb2JzMSA9IGludGVydmFsKDcwMDApLnBpcGUobWFwKCgpID0+ICdzbG93IG9uZScpKTtcbiAqIGNvbnN0IG9iczIgPSBpbnRlcnZhbCgzMDAwKS5waXBlKG1hcCgoKSA9PiAnZmFzdCBvbmUnKSk7XG4gKiBjb25zdCBvYnMzID0gaW50ZXJ2YWwoNTAwMCkucGlwZShtYXAoKCkgPT4gJ21lZGl1bSBvbmUnKSk7XG4gKlxuICogcmFjZShvYnMxLCBvYnMyLCBvYnMzKVxuICogICAuc3Vic2NyaWJlKHdpbm5lciA9PiBjb25zb2xlLmxvZyh3aW5uZXIpKTtcbiAqXG4gKiAvLyBPdXRwdXRzXG4gKiAvLyBhIHNlcmllcyBvZiAnZmFzdCBvbmUnXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc291cmNlcyBVc2VkIHRvIHJhY2UgZm9yIHdoaWNoIGBPYnNlcnZhYmxlSW5wdXRgIGVtaXRzIGZpcnN0LlxuICogQHJldHVybiBBbiBPYnNlcnZhYmxlIHRoYXQgbWlycm9ycyB0aGUgb3V0cHV0IG9mIHRoZSBmaXJzdCBPYnNlcnZhYmxlIHRvIGVtaXQgYW4gaXRlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhY2U8VD4oLi4uc291cmNlczogKE9ic2VydmFibGVJbnB1dDxUPiB8IE9ic2VydmFibGVJbnB1dDxUPltdKVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgc291cmNlcyA9IGFyZ3NPckFyZ0FycmF5KHNvdXJjZXMpO1xuICAvLyBJZiBvbmx5IG9uZSBzb3VyY2Ugd2FzIHBhc3NlZCwganVzdCByZXR1cm4gaXQuIE90aGVyd2lzZSByZXR1cm4gdGhlIHJhY2UuXG4gIHJldHVybiBzb3VyY2VzLmxlbmd0aCA9PT0gMSA/IGlubmVyRnJvbShzb3VyY2VzWzBdIGFzIE9ic2VydmFibGVJbnB1dDxUPikgOiBuZXcgT2JzZXJ2YWJsZTxUPihyYWNlSW5pdChzb3VyY2VzIGFzIE9ic2VydmFibGVJbnB1dDxUPltdKSk7XG59XG5cbi8qKlxuICogQW4gb2JzZXJ2YWJsZSBpbml0aWFsaXplciBmdW5jdGlvbiBmb3IgYm90aCB0aGUgc3RhdGljIHZlcnNpb24gYW5kIHRoZVxuICogb3BlcmF0b3IgdmVyc2lvbiBvZiByYWNlLlxuICogQHBhcmFtIHNvdXJjZXMgVGhlIHNvdXJjZXMgdG8gcmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFjZUluaXQ8VD4oc291cmNlczogT2JzZXJ2YWJsZUlucHV0PFQ+W10pIHtcbiAgcmV0dXJuIChzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFQ+KSA9PiB7XG4gICAgbGV0IHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gYWxsIG9mIHRoZSBzb3VyY2VzLiBOb3RlIHRoYXQgd2UgYXJlIGNoZWNraW5nIGBzdWJzY3JpcHRpb25zYCBoZXJlXG4gICAgLy8gSXMgaXMgYW4gYXJyYXkgb2YgYWxsIGFjdGl2ZWx5IFwicmFjaW5nXCIgc3Vic2NyaXB0aW9ucywgYW5kIGl0IGlzIGBudWxsYCBhZnRlciB0aGVcbiAgICAvLyByYWNlIGhhcyBiZWVuIHdvbi4gU28sIGlmIHdlIGhhdmUgcmFjZXIgdGhhdCBzeW5jaHJvbm91c2x5IFwid2luc1wiLCB0aGlzIGxvb3Agd2lsbFxuICAgIC8vIHN0b3AgYmVmb3JlIGl0IHN1YnNjcmliZXMgdG8gYW55IG1vcmUuXG4gICAgZm9yIChsZXQgaSA9IDA7IHN1YnNjcmlwdGlvbnMgJiYgIXN1YnNjcmliZXIuY2xvc2VkICYmIGkgPCBzb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGlubmVyRnJvbShzb3VyY2VzW2ldIGFzIE9ic2VydmFibGVJbnB1dDxUPikuc3Vic2NyaWJlKFxuICAgICAgICAgIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ3JlIHN0aWxsIHJhY2luZywgYnV0IHdlIHdvbiEgU28gdW5zdWJzY3JpYmVcbiAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHN1YnNjcmlwdGlvbnMgdGhhdCB3ZSBoYXZlLCBleGNlcHQgdGhpcyBvbmUuXG4gICAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc3Vic2NyaXB0aW9ucy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgICAgIHMgIT09IGkgJiYgc3Vic2NyaXB0aW9uc1tzXS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMgPSBudWxsITtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgU2NoZWR1bGVyTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IEVNUFRZIH0gZnJvbSAnLi9lbXB0eSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZShzdGFydDogbnVtYmVyLCBjb3VudD86IG51bWJlcik6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGUgYHNjaGVkdWxlcmAgcGFyYW1ldGVyIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIGByYW5nZShzdGFydCwgY291bnQpLnBpcGUob2JzZXJ2ZU9uKHNjaGVkdWxlcikpYCBpbnN0ZWFkLiBEZXRhaWxzOiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9zY2hlZHVsZXItYXJndW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlKHN0YXJ0OiBudW1iZXIsIGNvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZSk6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhIHNlcXVlbmNlIG9mIG51bWJlcnMgd2l0aGluIGEgc3BlY2lmaWVkXG4gKiByYW5nZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RW1pdHMgYSBzZXF1ZW5jZSBvZiBudW1iZXJzIGluIGEgcmFuZ2UuPC9zcGFuPlxuICpcbiAqICFbXShyYW5nZS5wbmcpXG4gKlxuICogYHJhbmdlYCBvcGVyYXRvciBlbWl0cyBhIHJhbmdlIG9mIHNlcXVlbnRpYWwgaW50ZWdlcnMsIGluIG9yZGVyLCB3aGVyZSB5b3VcbiAqIHNlbGVjdCB0aGUgYHN0YXJ0YCBvZiB0aGUgcmFuZ2UgYW5kIGl0cyBgbGVuZ3RoYC4gQnkgZGVmYXVsdCwgdXNlcyBub1xuICoge0BsaW5rIFNjaGVkdWxlckxpa2V9IGFuZCBqdXN0IGRlbGl2ZXJzIHRoZSBub3RpZmljYXRpb25zIHN5bmNocm9ub3VzbHksIGJ1dCBtYXkgdXNlXG4gKiBhbiBvcHRpb25hbCB7QGxpbmsgU2NoZWR1bGVyTGlrZX0gdG8gcmVndWxhdGUgdGhvc2UgZGVsaXZlcmllcy5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogUHJvZHVjZSBhIHJhbmdlIG9mIG51bWJlcnNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmFuZ2UgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBudW1iZXJzID0gcmFuZ2UoMSwgMyk7XG4gKlxuICogbnVtYmVycy5zdWJzY3JpYmUoe1xuICogICBuZXh0OiB2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSksXG4gKiAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZygnQ29tcGxldGUhJylcbiAqIH0pO1xuICpcbiAqIC8vIExvZ3M6XG4gKiAvLyAxXG4gKiAvLyAyXG4gKiAvLyAzXG4gKiAvLyAnQ29tcGxldGUhJ1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgdGltZXJ9XG4gKiBAc2VlIHtAbGluayBpbnRlcnZhbH1cbiAqXG4gKiBAcGFyYW0gc3RhcnQgVGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpbnRlZ2VyIGluIHRoZSBzZXF1ZW5jZS5cbiAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIHNlcXVlbnRpYWwgaW50ZWdlcnMgdG8gZ2VuZXJhdGUuXG4gKiBAcGFyYW0gc2NoZWR1bGVyIEEge0BsaW5rIFNjaGVkdWxlckxpa2V9IHRvIHVzZSBmb3Igc2NoZWR1bGluZyB0aGUgZW1pc3Npb25zXG4gKiBvZiB0aGUgbm90aWZpY2F0aW9ucy5cbiAqIEByZXR1cm4gQW4gT2JzZXJ2YWJsZSBvZiBudW1iZXJzIHRoYXQgZW1pdHMgYSBmaW5pdGUgcmFuZ2Ugb2Ygc2VxdWVudGlhbCBpbnRlZ2Vycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlKHN0YXJ0OiBudW1iZXIsIGNvdW50PzogbnVtYmVyLCBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgaWYgKGNvdW50ID09IG51bGwpIHtcbiAgICAvLyBJZiBvbmUgYXJndW1lbnQgd2FzIHBhc3NlZCwgaXQncyB0aGUgY291bnQsIG5vdCB0aGUgc3RhcnQuXG4gICAgY291bnQgPSBzdGFydDtcbiAgICBzdGFydCA9IDA7XG4gIH1cblxuICBpZiAoY291bnQgPD0gMCkge1xuICAgIC8vIE5vIGNvdW50PyBXZSdyZSBnb2luZyBub3doZXJlLiBSZXR1cm4gRU1QVFkuXG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgLy8gV2hlcmUgdGhlIHJhbmdlIHNob3VsZCBzdG9wLlxuICBjb25zdCBlbmQgPSBjb3VudCArIHN0YXJ0O1xuXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZShcbiAgICBzY2hlZHVsZXJcbiAgICAgID8gLy8gVGhlIGRlcHJlY2F0ZWQgc2NoZWR1bGVkIHBhdGguXG4gICAgICAgIChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgbGV0IG4gPSBzdGFydDtcbiAgICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChuIDwgZW5kKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChuKyspO1xuICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIDogLy8gU3RhbmRhcmQgc3luY2hyb25vdXMgcmFuZ2UuXG4gICAgICAgIChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgbGV0IG4gPSBzdGFydDtcbiAgICAgICAgICB3aGlsZSAobiA8IGVuZCAmJiAhc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChuKyspO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBVbnN1YnNjcmliYWJsZSwgT2JzZXJ2YWJsZUlucHV0LCBPYnNlcnZlZFZhbHVlT2YgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBFTVBUWSB9IGZyb20gJy4vZW1wdHknO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gT2JzZXJ2YWJsZSB0aGF0IHVzZXMgYSByZXNvdXJjZSB3aGljaCB3aWxsIGJlIGRpc3Bvc2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlVzZSBpdCB3aGVuIHlvdSBjYXRjaCB5b3Vyc2VsZiBjbGVhbmluZyB1cCBhZnRlciBhbiBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiBgdXNpbmdgIGlzIGEgZmFjdG9yeSBvcGVyYXRvciwgd2hpY2ggYWNjZXB0cyB0d28gZnVuY3Rpb25zLiBGaXJzdCBmdW5jdGlvbiByZXR1cm5zIGEgZGlzcG9zYWJsZSByZXNvdXJjZS5cbiAqIEl0IGNhbiBiZSBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgaW1wbGVtZW50cyBgdW5zdWJzY3JpYmVgIG1ldGhvZC4gU2Vjb25kIGZ1bmN0aW9uIHdpbGwgYmUgaW5qZWN0ZWQgd2l0aFxuICogdGhhdCBvYmplY3QgYW5kIHNob3VsZCByZXR1cm4gYW4gT2JzZXJ2YWJsZS4gVGhhdCBPYnNlcnZhYmxlIGNhbiB1c2UgcmVzb3VyY2Ugb2JqZWN0IGR1cmluZyBpdHMgZXhlY3V0aW9uLlxuICogQm90aCBmdW5jdGlvbnMgcGFzc2VkIHRvIGB1c2luZ2Agd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSBzb21lb25lIHN1YnNjcmliZXMgLSBuZWl0aGVyIGFuIE9ic2VydmFibGUgbm9yXG4gKiByZXNvdXJjZSBvYmplY3Qgd2lsbCBiZSBzaGFyZWQgaW4gYW55IHdheSBiZXR3ZWVuIHN1YnNjcmlwdGlvbnMuXG4gKlxuICogV2hlbiBPYnNlcnZhYmxlIHJldHVybmVkIGJ5IGB1c2luZ2AgaXMgc3Vic2NyaWJlZCwgT2JzZXJ2YWJsZSByZXR1cm5lZCBmcm9tIHRoZSBzZWNvbmQgZnVuY3Rpb24gd2lsbCBiZSBzdWJzY3JpYmVkXG4gKiBhcyB3ZWxsLiBBbGwgaXRzIG5vdGlmaWNhdGlvbnMgKG5leHRlZCB2YWx1ZXMsIGNvbXBsZXRpb24gYW5kIGVycm9yIGV2ZW50cykgd2lsbCBiZSBlbWl0dGVkIHVuY2hhbmdlZCBieSB0aGUgb3V0cHV0XG4gKiBPYnNlcnZhYmxlLiBJZiBob3dldmVyIHNvbWVvbmUgdW5zdWJzY3JpYmVzIGZyb20gdGhlIE9ic2VydmFibGUgb3Igc291cmNlIE9ic2VydmFibGUgY29tcGxldGVzIG9yIGVycm9ycyBieSBpdHNlbGYsXG4gKiB0aGUgYHVuc3Vic2NyaWJlYCBtZXRob2Qgb24gcmVzb3VyY2Ugb2JqZWN0IHdpbGwgYmUgY2FsbGVkLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGRvIGFueSBuZWNlc3NhcnkgY2xlYW4gdXAsIHdoaWNoXG4gKiBvdGhlcndpc2Ugd291bGQgaGF2ZSB0byBiZSBoYW5kbGVkIGJ5IGhhbmQuIE5vdGUgdGhhdCBjb21wbGV0ZSBvciBlcnJvciBub3RpZmljYXRpb25zIGFyZSBub3QgZW1pdHRlZCB3aGVuIHNvbWVvbmVcbiAqIGNhbmNlbHMgc3Vic2NyaXB0aW9uIHRvIGFuIE9ic2VydmFibGUgdmlhIGB1bnN1YnNjcmliZWAsIHNvIGB1c2luZ2AgY2FuIGJlIHVzZWQgYXMgYSBob29rLCBhbGxvd2luZyB5b3UgdG8gbWFrZVxuICogc3VyZSB0aGF0IGFsbCByZXNvdXJjZXMgd2hpY2ggbmVlZCB0byBleGlzdCBkdXJpbmcgYW4gT2JzZXJ2YWJsZSBleGVjdXRpb24gd2lsbCBiZSBkaXNwb3NlZCBhdCBhcHByb3ByaWF0ZSB0aW1lLlxuICpcbiAqIEBzZWUge0BsaW5rIGRlZmVyfVxuICpcbiAqIEBwYXJhbSByZXNvdXJjZUZhY3RvcnkgQSBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIGFueSByZXNvdXJjZSBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIGB1bnN1YnNjcmliZWAgbWV0aG9kLlxuICogQHBhcmFtIG9ic2VydmFibGVGYWN0b3J5IEEgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhbiBPYnNlcnZhYmxlLCB0aGF0IGNhbiB1c2UgaW5qZWN0ZWQgcmVzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybiBBbiBPYnNlcnZhYmxlIHRoYXQgYmVoYXZlcyB0aGUgc2FtZSBhcyBPYnNlcnZhYmxlIHJldHVybmVkIGJ5IGBvYnNlcnZhYmxlRmFjdG9yeWAsIGJ1dFxuICogd2hpY2ggLSB3aGVuIGNvbXBsZXRlZCwgZXJyb3JlZCBvciB1bnN1YnNjcmliZWQgLSB3aWxsIGFsc28gY2FsbCBgdW5zdWJzY3JpYmVgIG9uIGNyZWF0ZWQgcmVzb3VyY2Ugb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNpbmc8VCBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihcbiAgcmVzb3VyY2VGYWN0b3J5OiAoKSA9PiBVbnN1YnNjcmliYWJsZSB8IHZvaWQsXG4gIG9ic2VydmFibGVGYWN0b3J5OiAocmVzb3VyY2U6IFVuc3Vic2NyaWJhYmxlIHwgdm9pZCkgPT4gVCB8IHZvaWRcbik6IE9ic2VydmFibGU8T2JzZXJ2ZWRWYWx1ZU9mPFQ+PiB7XG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxPYnNlcnZlZFZhbHVlT2Y8VD4+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnkoKTtcbiAgICBjb25zdCByZXN1bHQgPSBvYnNlcnZhYmxlRmFjdG9yeShyZXNvdXJjZSk7XG4gICAgY29uc3Qgc291cmNlID0gcmVzdWx0ID8gaW5uZXJGcm9tKHJlc3VsdCkgOiBFTVBUWTtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvLyBOT1RFOiBPcHRpb25hbCBjaGFpbmluZyBkaWQgbm90IHdvcmsgaGVyZS5cbiAgICAgIC8vIFJlbGF0ZWQgVFMgSXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvNDA4MThcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICByZXNvdXJjZS51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xufVxuIiwgImV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsICJpbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGVJbnB1dCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5cbi8qKlxuICogSWdub3JlcyBzb3VyY2UgdmFsdWVzIGZvciBhIGR1cmF0aW9uIGRldGVybWluZWQgYnkgYW5vdGhlciBPYnNlcnZhYmxlLCB0aGVuXG4gKiBlbWl0cyB0aGUgbW9zdCByZWNlbnQgdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUsIHRoZW4gcmVwZWF0cyB0aGlzXG4gKiBwcm9jZXNzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGF1ZGl0VGltZX0sIGJ1dCB0aGUgc2lsZW5jaW5nXG4gKiBkdXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IGEgc2Vjb25kIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqICFbXShhdWRpdC5zdmcpXG4gKlxuICogYGF1ZGl0YCBpcyBzaW1pbGFyIHRvIGB0aHJvdHRsZWAsIGJ1dCBlbWl0cyB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSBzaWxlbmNlZFxuICogdGltZSB3aW5kb3csIGluc3RlYWQgb2YgdGhlIGZpcnN0IHZhbHVlLiBgYXVkaXRgIGVtaXRzIHRoZSBtb3N0IHJlY2VudCB2YWx1ZVxuICogZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlIGFzIHNvb24gYXMgaXRzIGludGVybmFsXG4gKiB0aW1lciBiZWNvbWVzIGRpc2FibGVkLCBhbmQgaWdub3JlcyBzb3VyY2UgdmFsdWVzIHdoaWxlIHRoZSB0aW1lciBpcyBlbmFibGVkLlxuICogSW5pdGlhbGx5LCB0aGUgdGltZXIgaXMgZGlzYWJsZWQuIEFzIHNvb24gYXMgdGhlIGZpcnN0IHNvdXJjZSB2YWx1ZSBhcnJpdmVzLFxuICogdGhlIHRpbWVyIGlzIGVuYWJsZWQgYnkgY2FsbGluZyB0aGUgYGR1cmF0aW9uU2VsZWN0b3JgIGZ1bmN0aW9uIHdpdGggdGhlXG4gKiBzb3VyY2UgdmFsdWUsIHdoaWNoIHJldHVybnMgdGhlIFwiZHVyYXRpb25cIiBPYnNlcnZhYmxlLiBXaGVuIHRoZSBkdXJhdGlvblxuICogT2JzZXJ2YWJsZSBlbWl0cyBhIHZhbHVlLCB0aGUgdGltZXIgaXMgZGlzYWJsZWQsIHRoZW4gdGhlIG1vc3RcbiAqIHJlY2VudCBzb3VyY2UgdmFsdWUgaXMgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUsIGFuZCB0aGlzIHByb2Nlc3NcbiAqIHJlcGVhdHMgZm9yIHRoZSBuZXh0IHNvdXJjZSB2YWx1ZS5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogRW1pdCBjbGlja3MgYXQgYSByYXRlIG9mIGF0IG1vc3Qgb25lIGNsaWNrIHBlciBzZWNvbmRcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBhdWRpdCwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgcmVzdWx0ID0gY2xpY2tzLnBpcGUoYXVkaXQoZXYgPT4gaW50ZXJ2YWwoMTAwMCkpKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBhdWRpdFRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZX1cbiAqIEBzZWUge0BsaW5rIGRlbGF5V2hlbn1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlfVxuICpcbiAqIEBwYXJhbSBkdXJhdGlvblNlbGVjdG9yIEEgZnVuY3Rpb25cbiAqIHRoYXQgcmVjZWl2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgZm9yIGNvbXB1dGluZyB0aGUgc2lsZW5jaW5nXG4gKiBkdXJhdGlvbiwgcmV0dXJuZWQgYXMgYW4gT2JzZXJ2YWJsZSBvciBhIFByb21pc2UuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBwZXJmb3JtcyByYXRlLWxpbWl0aW5nIG9mXG4gKiBlbWlzc2lvbnMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdWRpdDxUPihkdXJhdGlvblNlbGVjdG9yOiAodmFsdWU6IFQpID0+IE9ic2VydmFibGVJbnB1dDxhbnk+KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgIGxldCBsYXN0VmFsdWU6IFQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgZHVyYXRpb25TdWJzY3JpYmVyOiBTdWJzY3JpYmVyPGFueT4gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgaXNDb21wbGV0ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZW5kRHVyYXRpb24gPSAoKSA9PiB7XG4gICAgICBkdXJhdGlvblN1YnNjcmliZXI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbGFzdFZhbHVlITtcbiAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlzQ29tcGxldGUgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBjbGVhbnVwRHVyYXRpb24gPSAoKSA9PiB7XG4gICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfTtcblxuICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBsYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICBpZiAoIWR1cmF0aW9uU3Vic2NyaWJlcikge1xuICAgICAgICAgICAgaW5uZXJGcm9tKGR1cmF0aW9uU2VsZWN0b3IodmFsdWUpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIChkdXJhdGlvblN1YnNjcmliZXIgPSBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kRHVyYXRpb24sIGNsZWFudXBEdXJhdGlvbikpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICghaGFzVmFsdWUgfHwgIWR1cmF0aW9uU3Vic2NyaWJlciB8fCBkdXJhdGlvblN1YnNjcmliZXIuY2xvc2VkKSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBhc3luY1NjaGVkdWxlciB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBhdWRpdCB9IGZyb20gJy4vYXVkaXQnO1xuaW1wb3J0IHsgdGltZXIgfSBmcm9tICcuLi9vYnNlcnZhYmxlL3RpbWVyJztcbmltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgU2NoZWR1bGVyTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBJZ25vcmVzIHNvdXJjZSB2YWx1ZXMgZm9yIGBkdXJhdGlvbmAgbWlsbGlzZWNvbmRzLCB0aGVuIGVtaXRzIHRoZSBtb3N0IHJlY2VudFxuICogdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUsIHRoZW4gcmVwZWF0cyB0aGlzIHByb2Nlc3MuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPldoZW4gaXQgc2VlcyBhIHNvdXJjZSB2YWx1ZSwgaXQgaWdub3JlcyB0aGF0IHBsdXNcbiAqIHRoZSBuZXh0IG9uZXMgZm9yIGBkdXJhdGlvbmAgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBpdCBlbWl0cyB0aGUgbW9zdCByZWNlbnRcbiAqIHZhbHVlIGZyb20gdGhlIHNvdXJjZS48L3NwYW4+XG4gKlxuICogIVtdKGF1ZGl0VGltZS5wbmcpXG4gKlxuICogYGF1ZGl0VGltZWAgaXMgc2ltaWxhciB0byBgdGhyb3R0bGVUaW1lYCwgYnV0IGVtaXRzIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlXG4gKiBzaWxlbmNlZCB0aW1lIHdpbmRvdywgaW5zdGVhZCBvZiB0aGUgZmlyc3QgdmFsdWUuIGBhdWRpdFRpbWVgIGVtaXRzIHRoZSBtb3N0XG4gKiByZWNlbnQgdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlIGFzIHNvb24gYXNcbiAqIGl0cyBpbnRlcm5hbCB0aW1lciBiZWNvbWVzIGRpc2FibGVkLCBhbmQgaWdub3JlcyBzb3VyY2UgdmFsdWVzIHdoaWxlIHRoZVxuICogdGltZXIgaXMgZW5hYmxlZC4gSW5pdGlhbGx5LCB0aGUgdGltZXIgaXMgZGlzYWJsZWQuIEFzIHNvb24gYXMgdGhlIGZpcnN0XG4gKiBzb3VyY2UgdmFsdWUgYXJyaXZlcywgdGhlIHRpbWVyIGlzIGVuYWJsZWQuIEFmdGVyIGBkdXJhdGlvbmAgbWlsbGlzZWNvbmRzIChvclxuICogdGhlIHRpbWUgdW5pdCBkZXRlcm1pbmVkIGludGVybmFsbHkgYnkgdGhlIG9wdGlvbmFsIGBzY2hlZHVsZXJgKSBoYXMgcGFzc2VkLFxuICogdGhlIHRpbWVyIGlzIGRpc2FibGVkLCB0aGVuIHRoZSBtb3N0IHJlY2VudCBzb3VyY2UgdmFsdWUgaXMgZW1pdHRlZCBvbiB0aGVcbiAqIG91dHB1dCBPYnNlcnZhYmxlLCBhbmQgdGhpcyBwcm9jZXNzIHJlcGVhdHMgZm9yIHRoZSBuZXh0IHNvdXJjZSB2YWx1ZS5cbiAqIE9wdGlvbmFsbHkgdGFrZXMgYSB7QGxpbmsgU2NoZWR1bGVyTGlrZX0gZm9yIG1hbmFnaW5nIHRpbWVycy5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogRW1pdCBjbGlja3MgYXQgYSByYXRlIG9mIGF0IG1vc3Qgb25lIGNsaWNrIHBlciBzZWNvbmRcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBhdWRpdFRpbWUgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgcmVzdWx0ID0gY2xpY2tzLnBpcGUoYXVkaXRUaW1lKDEwMDApKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBhdWRpdH1cbiAqIEBzZWUge0BsaW5rIGRlYm91bmNlVGltZX1cbiAqIEBzZWUge0BsaW5rIGRlbGF5fVxuICogQHNlZSB7QGxpbmsgc2FtcGxlVGltZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlVGltZX1cbiAqXG4gKiBAcGFyYW0gZHVyYXRpb24gVGltZSB0byB3YWl0IGJlZm9yZSBlbWl0dGluZyB0aGUgbW9zdCByZWNlbnQgc291cmNlIHZhbHVlLFxuICogbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzIG9yIHRoZSB0aW1lIHVuaXQgZGV0ZXJtaW5lZCBpbnRlcm5hbGx5IGJ5IHRoZVxuICogb3B0aW9uYWwgYHNjaGVkdWxlcmAuXG4gKiBAcGFyYW0gc2NoZWR1bGVyIFRoZSB7QGxpbmsgU2NoZWR1bGVyTGlrZX0gdG8gdXNlIGZvciBtYW5hZ2luZyB0aGUgdGltZXJzXG4gKiB0aGF0IGhhbmRsZSB0aGUgcmF0ZS1saW1pdGluZyBiZWhhdmlvci5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHBlcmZvcm1zIHJhdGUtbGltaXRpbmcgb2ZcbiAqIGVtaXNzaW9ucyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0VGltZTxUPihkdXJhdGlvbjogbnVtYmVyLCBzY2hlZHVsZXI6IFNjaGVkdWxlckxpa2UgPSBhc3luY1NjaGVkdWxlcik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIHJldHVybiBhdWRpdCgoKSA9PiB0aW1lcihkdXJhdGlvbiwgc2NoZWR1bGVyKSk7XG59XG4iLCAiaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZUlucHV0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcblxuLyoqXG4gKiBCdWZmZXJzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB2YWx1ZXMgdW50aWwgYGNsb3NpbmdOb3RpZmllcmAgZW1pdHMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbGxlY3RzIHZhbHVlcyBmcm9tIHRoZSBwYXN0IGFzIGFuIGFycmF5LCBhbmQgZW1pdHNcbiAqIHRoYXQgYXJyYXkgb25seSB3aGVuIGFub3RoZXIgT2JzZXJ2YWJsZSBlbWl0cy48L3NwYW4+XG4gKlxuICogIVtdKGJ1ZmZlci5wbmcpXG4gKlxuICogQnVmZmVycyB0aGUgaW5jb21pbmcgT2JzZXJ2YWJsZSB2YWx1ZXMgdW50aWwgdGhlIGdpdmVuIGBjbG9zaW5nTm90aWZpZXJgXG4gKiBgT2JzZXJ2YWJsZUlucHV0YCAodGhhdCBpbnRlcm5hbGx5IGdldHMgY29udmVydGVkIHRvIGFuIE9ic2VydmFibGUpXG4gKiBlbWl0cyBhIHZhbHVlLCBhdCB3aGljaCBwb2ludCBpdCBlbWl0cyB0aGUgYnVmZmVyIG9uIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUgYW5kIHN0YXJ0cyBhIG5ldyBidWZmZXIgaW50ZXJuYWxseSwgYXdhaXRpbmcgdGhlIG5leHQgdGltZVxuICogYGNsb3NpbmdOb3RpZmllcmAgZW1pdHMuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIE9uIGV2ZXJ5IGNsaWNrLCBlbWl0IGFycmF5IG9mIG1vc3QgcmVjZW50IGludGVydmFsIGV2ZW50c1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIGludGVydmFsLCBidWZmZXIgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgaW50ZXJ2YWxFdmVudHMgPSBpbnRlcnZhbCgxMDAwKTtcbiAqIGNvbnN0IGJ1ZmZlcmVkID0gaW50ZXJ2YWxFdmVudHMucGlwZShidWZmZXIoY2xpY2tzKSk7XG4gKiBidWZmZXJlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBidWZmZXJDb3VudH1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlclRpbWV9XG4gKiBAc2VlIHtAbGluayBidWZmZXJUb2dnbGV9XG4gKiBAc2VlIHtAbGluayBidWZmZXJXaGVufVxuICogQHNlZSB7QGxpbmsgd2luZG93fVxuICpcbiAqIEBwYXJhbSBjbG9zaW5nTm90aWZpZXIgQW4gYE9ic2VydmFibGVJbnB1dGAgdGhhdCBzaWduYWxzIHRoZVxuICogYnVmZmVyIHRvIGJlIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIG9mIGJ1ZmZlcnMsIHdoaWNoIGFyZSBhcnJheXNcbiAqIG9mIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlcjxUPihjbG9zaW5nTm90aWZpZXI6IE9ic2VydmFibGVJbnB1dDxhbnk+KTogT3BlcmF0b3JGdW5jdGlvbjxULCBUW10+IHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIC8vIFRoZSBjdXJyZW50IGJ1ZmZlcmVkIHZhbHVlcy5cbiAgICBsZXQgY3VycmVudEJ1ZmZlcjogVFtdID0gW107XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gb3VyIHNvdXJjZS5cbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAodmFsdWUpID0+IGN1cnJlbnRCdWZmZXIucHVzaCh2YWx1ZSksXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY3VycmVudEJ1ZmZlcik7XG4gICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byB0aGUgY2xvc2luZyBub3RpZmllci5cbiAgICBpbm5lckZyb20oY2xvc2luZ05vdGlmaWVyKS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICAvLyBTdGFydCBhIG5ldyBidWZmZXIgYW5kIGVtaXQgdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgICBjb25zdCBiID0gY3VycmVudEJ1ZmZlcjtcbiAgICAgICAgICBjdXJyZW50QnVmZmVyID0gW107XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGIpO1xuICAgICAgICB9LFxuICAgICAgICBub29wXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvLyBFbnN1cmUgYnVmZmVyZWQgdmFsdWVzIGFyZSByZWxlYXNlZCBvbiBmaW5hbGl6YXRpb24uXG4gICAgICBjdXJyZW50QnVmZmVyID0gbnVsbCE7XG4gICAgfTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgYXJyUmVtb3ZlIH0gZnJvbSAnLi4vdXRpbC9hcnJSZW1vdmUnO1xuXG4vKipcbiAqIEJ1ZmZlcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHZhbHVlcyB1bnRpbCB0aGUgc2l6ZSBoaXRzIHRoZSBtYXhpbXVtXG4gKiBgYnVmZmVyU2l6ZWAgZ2l2ZW4uXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbGxlY3RzIHZhbHVlcyBmcm9tIHRoZSBwYXN0IGFzIGFuIGFycmF5LCBhbmQgZW1pdHNcbiAqIHRoYXQgYXJyYXkgb25seSB3aGVuIGl0cyBzaXplIHJlYWNoZXMgYGJ1ZmZlclNpemVgLjwvc3Bhbj5cbiAqXG4gKiAhW10oYnVmZmVyQ291bnQucG5nKVxuICpcbiAqIEJ1ZmZlcnMgYSBudW1iZXIgb2YgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGJ5IGBidWZmZXJTaXplYCB0aGVuXG4gKiBlbWl0cyB0aGUgYnVmZmVyIGFuZCBjbGVhcnMgaXQsIGFuZCBzdGFydHMgYSBuZXcgYnVmZmVyIGVhY2hcbiAqIGBzdGFydEJ1ZmZlckV2ZXJ5YCB2YWx1ZXMuIElmIGBzdGFydEJ1ZmZlckV2ZXJ5YCBpcyBub3QgcHJvdmlkZWQgb3IgaXNcbiAqIGBudWxsYCwgdGhlbiBuZXcgYnVmZmVycyBhcmUgc3RhcnRlZCBpbW1lZGlhdGVseSBhdCB0aGUgc3RhcnQgb2YgdGhlIHNvdXJjZVxuICogYW5kIHdoZW4gZWFjaCBidWZmZXIgY2xvc2VzIGFuZCBpcyBlbWl0dGVkLlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogRW1pdCB0aGUgbGFzdCB0d28gY2xpY2sgZXZlbnRzIGFzIGFuIGFycmF5XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgYnVmZmVyQ291bnQgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgYnVmZmVyZWQgPSBjbGlja3MucGlwZShidWZmZXJDb3VudCgyKSk7XG4gKiBidWZmZXJlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBPbiBldmVyeSBjbGljaywgZW1pdCB0aGUgbGFzdCB0d28gY2xpY2sgZXZlbnRzIGFzIGFuIGFycmF5XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgYnVmZmVyQ291bnQgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgYnVmZmVyZWQgPSBjbGlja3MucGlwZShidWZmZXJDb3VudCgyLCAxKSk7XG4gKiBidWZmZXJlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBidWZmZXJ9XG4gKiBAc2VlIHtAbGluayBidWZmZXJUaW1lfVxuICogQHNlZSB7QGxpbmsgYnVmZmVyVG9nZ2xlfVxuICogQHNlZSB7QGxpbmsgYnVmZmVyV2hlbn1cbiAqIEBzZWUge0BsaW5rIHBhaXJ3aXNlfVxuICogQHNlZSB7QGxpbmsgd2luZG93Q291bnR9XG4gKlxuICogQHBhcmFtIGJ1ZmZlclNpemUgVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIGVtaXR0ZWQuXG4gKiBAcGFyYW0gc3RhcnRCdWZmZXJFdmVyeSBJbnRlcnZhbCBhdCB3aGljaCB0byBzdGFydCBhIG5ldyBidWZmZXIuXG4gKiBGb3IgZXhhbXBsZSBpZiBgc3RhcnRCdWZmZXJFdmVyeWAgaXMgYDJgLCB0aGVuIGEgbmV3IGJ1ZmZlciB3aWxsIGJlIHN0YXJ0ZWRcbiAqIG9uIGV2ZXJ5IG90aGVyIHZhbHVlIGZyb20gdGhlIHNvdXJjZS4gQSBuZXcgYnVmZmVyIGlzIHN0YXJ0ZWQgYXQgdGhlXG4gKiBiZWdpbm5pbmcgb2YgdGhlIHNvdXJjZSBieSBkZWZhdWx0LlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIG9mIGFycmF5cyBvZiBidWZmZXJlZCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWZmZXJDb3VudDxUPihidWZmZXJTaXplOiBudW1iZXIsIHN0YXJ0QnVmZmVyRXZlcnk6IG51bWJlciB8IG51bGwgPSBudWxsKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUW10+IHtcbiAgLy8gSWYgbm8gYHN0YXJ0QnVmZmVyRXZlcnlgIHZhbHVlIHdhcyBzdXBwbGllZCwgdGhlbiB3ZSdyZVxuICAvLyBvcGVuaW5nIGFuZCBjbG9zaW5nIG9uIHRoZSBidWZmZXJTaXplIGl0c2VsZi5cbiAgc3RhcnRCdWZmZXJFdmVyeSA9IHN0YXJ0QnVmZmVyRXZlcnkgPz8gYnVmZmVyU2l6ZTtcblxuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IGJ1ZmZlcnM6IFRbXVtdID0gW107XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGxldCB0b0VtaXQ6IFRbXVtdIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBzdGFydCBhIGJ1ZmZlci5cbiAgICAgICAgICAvLyBUaGlzIHdpbGwgc3RhcnQgb25lIGF0IHRoZSBmaXJzdCB2YWx1ZSwgYW5kIHRoZW5cbiAgICAgICAgICAvLyBhIG5ldyBvbmUgZXZlcnkgTiBhZnRlciB0aGF0LlxuICAgICAgICAgIGlmIChjb3VudCsrICUgc3RhcnRCdWZmZXJFdmVyeSEgPT09IDApIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChbXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUHVzaCBvdXIgdmFsdWUgaW50byBvdXIgYWN0aXZlIGJ1ZmZlcnMuXG4gICAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIG92ZXIgdGhlIGJ1ZmZlclNpemVcbiAgICAgICAgICAgIC8vIGlmIHdlIGFyZSwgcmVjb3JkIGl0IHNvIHdlIGNhbiBlbWl0IGl0IGxhdGVyLlxuICAgICAgICAgICAgLy8gSWYgd2UgZW1pdHRlZCBpdCBub3cgYW5kIHJlbW92ZWQgaXQsIGl0IHdvdWxkXG4gICAgICAgICAgICAvLyBtdXRhdGUgdGhlIGBidWZmZXJzYCBhcnJheSB3aGlsZSB3ZSdyZSBsb29waW5nXG4gICAgICAgICAgICAvLyBvdmVyIGl0LlxuICAgICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPD0gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQgPz8gW107XG4gICAgICAgICAgICAgIHRvRW1pdC5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRvRW1pdCkge1xuICAgICAgICAgICAgLy8gV2UgaGF2ZSBmb3VuZCBzb21lIGJ1ZmZlcnMgdGhhdCBhcmUgb3ZlciB0aGVcbiAgICAgICAgICAgIC8vIGBidWZmZXJTaXplYC4gRW1pdCB0aGVtLCBhbmQgcmVtb3ZlIHRoZW0gZnJvbSBvdXJcbiAgICAgICAgICAgIC8vIGJ1ZmZlcnMgbGlzdC5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIHRvRW1pdCkge1xuICAgICAgICAgICAgICBhcnJSZW1vdmUoYnVmZmVycywgYnVmZmVyKTtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgLy8gV2hlbiB0aGUgc291cmNlIGNvbXBsZXRlcywgZW1pdCBhbGwgb2Ygb3VyXG4gICAgICAgICAgLy8gYWN0aXZlIGJ1ZmZlcnMuXG4gICAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUGFzcyBhbGwgZXJyb3JzIHRocm91Z2ggdG8gY29uc3VtZXIuXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIC8vIENsZWFuIHVwIG91ciBtZW1vcnkgd2hlbiB3ZSBmaW5hbGl6ZVxuICAgICAgICAgIGJ1ZmZlcnMgPSBudWxsITtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uLCBTY2hlZHVsZXJMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBhcnJSZW1vdmUgfSBmcm9tICcuLi91dGlsL2FyclJlbW92ZSc7XG5pbXBvcnQgeyBhc3luY1NjaGVkdWxlciB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBwb3BTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgZXhlY3V0ZVNjaGVkdWxlIH0gZnJvbSAnLi4vdXRpbC9leGVjdXRlU2NoZWR1bGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyVGltZTxUPihidWZmZXJUaW1lU3BhbjogbnVtYmVyLCBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUW10+O1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclRpbWU8VD4oXG4gIGJ1ZmZlclRpbWVTcGFuOiBudW1iZXIsXG4gIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWw6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHNjaGVkdWxlcj86IFNjaGVkdWxlckxpa2Vcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgVFtdPjtcbmV4cG9ydCBmdW5jdGlvbiBidWZmZXJUaW1lPFQ+KFxuICBidWZmZXJUaW1lU3BhbjogbnVtYmVyLFxuICBidWZmZXJDcmVhdGlvbkludGVydmFsOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBtYXhCdWZmZXJTaXplOiBudW1iZXIsXG4gIHNjaGVkdWxlcj86IFNjaGVkdWxlckxpa2Vcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgVFtdPjtcblxuLyoqXG4gKiBCdWZmZXJzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB2YWx1ZXMgZm9yIGEgc3BlY2lmaWMgdGltZSBwZXJpb2QuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbGxlY3RzIHZhbHVlcyBmcm9tIHRoZSBwYXN0IGFzIGFuIGFycmF5LCBhbmQgZW1pdHNcbiAqIHRob3NlIGFycmF5cyBwZXJpb2RpY2FsbHkgaW4gdGltZS48L3NwYW4+XG4gKlxuICogIVtdKGJ1ZmZlclRpbWUucG5nKVxuICpcbiAqIEJ1ZmZlcnMgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSBmb3IgYSBzcGVjaWZpYyB0aW1lIGR1cmF0aW9uIGBidWZmZXJUaW1lU3BhbmAuXG4gKiBVbmxlc3MgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IGBidWZmZXJDcmVhdGlvbkludGVydmFsYCBpcyBnaXZlbiwgaXQgZW1pdHMgYW5kXG4gKiByZXNldHMgdGhlIGJ1ZmZlciBldmVyeSBgYnVmZmVyVGltZVNwYW5gIG1pbGxpc2Vjb25kcy4gSWZcbiAqIGBidWZmZXJDcmVhdGlvbkludGVydmFsYCBpcyBnaXZlbiwgdGhpcyBvcGVyYXRvciBvcGVucyB0aGUgYnVmZmVyIGV2ZXJ5XG4gKiBgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbGAgbWlsbGlzZWNvbmRzIGFuZCBjbG9zZXMgKGVtaXRzIGFuZCByZXNldHMpIHRoZVxuICogYnVmZmVyIGV2ZXJ5IGBidWZmZXJUaW1lU3BhbmAgbWlsbGlzZWNvbmRzLiBXaGVuIHRoZSBvcHRpb25hbCBhcmd1bWVudFxuICogYG1heEJ1ZmZlclNpemVgIGlzIHNwZWNpZmllZCwgdGhlIGJ1ZmZlciB3aWxsIGJlIGNsb3NlZCBlaXRoZXIgYWZ0ZXJcbiAqIGBidWZmZXJUaW1lU3BhbmAgbWlsbGlzZWNvbmRzIG9yIHdoZW4gaXQgY29udGFpbnMgYG1heEJ1ZmZlclNpemVgIGVsZW1lbnRzLlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogRXZlcnkgc2Vjb25kLCBlbWl0IGFuIGFycmF5IG9mIHRoZSByZWNlbnQgY2xpY2sgZXZlbnRzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgYnVmZmVyVGltZSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCBidWZmZXJlZCA9IGNsaWNrcy5waXBlKGJ1ZmZlclRpbWUoMTAwMCkpO1xuICogYnVmZmVyZWQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogRXZlcnkgNSBzZWNvbmRzLCBlbWl0IHRoZSBjbGljayBldmVudHMgZnJvbSB0aGUgbmV4dCAyIHNlY29uZHNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBidWZmZXJUaW1lIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IGJ1ZmZlcmVkID0gY2xpY2tzLnBpcGUoYnVmZmVyVGltZSgyMDAwLCA1MDAwKSk7XG4gKiBidWZmZXJlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBidWZmZXJ9XG4gKiBAc2VlIHtAbGluayBidWZmZXJDb3VudH1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlclRvZ2dsZX1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcldoZW59XG4gKiBAc2VlIHtAbGluayB3aW5kb3dUaW1lfVxuICpcbiAqIEBwYXJhbSBidWZmZXJUaW1lU3BhbiBUaGUgYW1vdW50IG9mIHRpbWUgdG8gZmlsbCBlYWNoIGJ1ZmZlciBhcnJheS5cbiAqIEBwYXJhbSBvdGhlckFyZ3MgT3RoZXIgY29uZmlndXJhdGlvbiBhcmd1bWVudHMgc3VjaCBhczpcbiAqIC0gYGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWxgIC0gdGhlIGludGVydmFsIGF0IHdoaWNoIHRvIHN0YXJ0IG5ldyBidWZmZXJzO1xuICogLSBgbWF4QnVmZmVyU2l6ZWAgLSB0aGUgbWF4aW11bSBidWZmZXIgc2l6ZTtcbiAqIC0gYHNjaGVkdWxlcmAgLSB0aGUgc2NoZWR1bGVyIG9uIHdoaWNoIHRvIHNjaGVkdWxlIHRoZSBpbnRlcnZhbHMgdGhhdCBkZXRlcm1pbmUgYnVmZmVyIGJvdW5kYXJpZXMuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgb2YgYXJyYXlzIG9mIGJ1ZmZlcmVkIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclRpbWU8VD4oYnVmZmVyVGltZVNwYW46IG51bWJlciwgLi4ub3RoZXJBcmdzOiBhbnlbXSk6IE9wZXJhdG9yRnVuY3Rpb248VCwgVFtdPiB7XG4gIGNvbnN0IHNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcihvdGhlckFyZ3MpID8/IGFzeW5jU2NoZWR1bGVyO1xuICBjb25zdCBidWZmZXJDcmVhdGlvbkludGVydmFsID0gKG90aGVyQXJnc1swXSBhcyBudW1iZXIpID8/IG51bGw7XG4gIGNvbnN0IG1heEJ1ZmZlclNpemUgPSAob3RoZXJBcmdzWzFdIGFzIG51bWJlcikgfHwgSW5maW5pdHk7XG5cbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIC8vIFRoZSBhY3RpdmUgYnVmZmVycywgdGhlaXIgcmVsYXRlZCBzdWJzY3JpcHRpb25zLCBhbmQgcmVtb3ZhbCBmdW5jdGlvbnMuXG4gICAgbGV0IGJ1ZmZlclJlY29yZHM6IHsgYnVmZmVyOiBUW107IHN1YnM6IFN1YnNjcmlwdGlvbiB9W10gfCBudWxsID0gW107XG4gICAgLy8gSWYgdHJ1ZSwgaXQgbWVhbnMgdGhhdCBldmVyeSB0aW1lIHdlIGVtaXQgYSBidWZmZXIsIHdlIHdhbnQgdG8gc3RhcnQgYSBuZXcgYnVmZmVyXG4gICAgLy8gdGhpcyBpcyBvbmx5IHJlYWxseSB1c2VkIGZvciB3aGVuICpqdXN0KiB0aGUgYnVmZmVyIHRpbWUgc3BhbiBpcyBwYXNzZWQuXG4gICAgbGV0IHJlc3RhcnRPbkVtaXQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhlIHdvcmsgb2YgZW1pdHRpbmcgdGhlIGJ1ZmZlciBmcm9tIHRoZSByZWNvcmQsIGVuc3VyaW5nIHRoYXQgdGhlXG4gICAgICogcmVjb3JkIGlzIHJlbW92ZWQgYmVmb3JlIHRoZSBlbWlzc2lvbiBzbyByZWVudHJhbnQgY29kZSAoZnJvbSBzb21lIGN1c3RvbSBzY2hlZHVsaW5nLCBwZXJoYXBzKVxuICAgICAqIGRvZXMgbm90IGFsdGVyIHRoZSBidWZmZXIuIEFsc28gY2hlY2tzIHRvIHNlZSBpZiBhIG5ldyBidWZmZXIgbmVlZHMgdG8gYmUgc3RhcnRlZFxuICAgICAqIGFmdGVyIHRoZSBlbWl0LlxuICAgICAqL1xuICAgIGNvbnN0IGVtaXQgPSAocmVjb3JkOiB7IGJ1ZmZlcjogVFtdOyBzdWJzOiBTdWJzY3JpcHRpb24gfSkgPT4ge1xuICAgICAgY29uc3QgeyBidWZmZXIsIHN1YnMgfSA9IHJlY29yZDtcbiAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgIGFyclJlbW92ZShidWZmZXJSZWNvcmRzLCByZWNvcmQpO1xuICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcik7XG4gICAgICByZXN0YXJ0T25FbWl0ICYmIHN0YXJ0QnVmZmVyKCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBldmVyeSB0aW1lIHdlIHN0YXJ0IGEgbmV3IGJ1ZmZlci4gVGhpcyBkb2VzXG4gICAgICogdGhlIHdvcmsgb2Ygc2NoZWR1bGluZyBhIGpvYiBhdCB0aGUgcmVxdWVzdGVkIGJ1ZmZlclRpbWVTcGFuXG4gICAgICogdGhhdCB3aWxsIGVtaXQgdGhlIGJ1ZmZlciAoaWYgaXQncyBub3QgdW5zdWJzY3JpYmVkIGJlZm9yZSB0aGVuKS5cbiAgICAgKi9cbiAgICBjb25zdCBzdGFydEJ1ZmZlciA9ICgpID0+IHtcbiAgICAgIGlmIChidWZmZXJSZWNvcmRzKSB7XG4gICAgICAgIGNvbnN0IHN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHN1YnNjcmliZXIuYWRkKHN1YnMpO1xuICAgICAgICBjb25zdCBidWZmZXI6IFRbXSA9IFtdO1xuICAgICAgICBjb25zdCByZWNvcmQgPSB7XG4gICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgIHN1YnMsXG4gICAgICAgIH07XG4gICAgICAgIGJ1ZmZlclJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgICBleGVjdXRlU2NoZWR1bGUoc3Vicywgc2NoZWR1bGVyLCAoKSA9PiBlbWl0KHJlY29yZCksIGJ1ZmZlclRpbWVTcGFuKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7XG4gICAgICAvLyBUaGUgdXNlciBwYXNzZWQgYm90aCBhIGJ1ZmZlclRpbWVTcGFuIChyZXF1aXJlZCksIGFuZCBhIGNyZWF0aW9uIGludGVydmFsXG4gICAgICAvLyBUaGF0IG1lYW5zIHdlIG5lZWQgdG8gc3RhcnQgbmV3IGJ1ZmZlcnMgb24gdGhlIGludGVydmFsLCBhbmQgdGhvc2UgYnVmZmVycyBuZWVkXG4gICAgICAvLyB0byB3YWl0IHRoZSByZXF1aXJlZCB0aW1lIHNwYW4gYmVmb3JlIGVtaXR0aW5nLlxuICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgc3RhcnRCdWZmZXIsIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0YXJ0T25FbWl0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzdGFydEJ1ZmZlcigpO1xuXG4gICAgY29uc3QgYnVmZmVyVGltZVN1YnNjcmliZXIgPSBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICBzdWJzY3JpYmVyLFxuICAgICAgKHZhbHVlOiBUKSA9PiB7XG4gICAgICAgIC8vIENvcHkgdGhlIHJlY29yZHMsIHNvIGlmIHdlIG5lZWQgdG8gcmVtb3ZlIG9uZSB3ZVxuICAgICAgICAvLyBkb24ndCBtdXRhdGUgdGhlIGFycmF5LiBJdCdzIGhhcmQsIGJ1dCBub3QgaW1wb3NzaWJsZSB0b1xuICAgICAgICAvLyBzZXQgdXAgYSBidWZmZXIgdGltZSB0aGF0IGNvdWxkIG11dGF0ZSB0aGUgYXJyYXkgYW5kXG4gICAgICAgIC8vIGNhdXNlIGlzc3VlcyBoZXJlLlxuICAgICAgICBjb25zdCByZWNvcmRzQ29weSA9IGJ1ZmZlclJlY29yZHMhLnNsaWNlKCk7XG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHNDb3B5KSB7XG4gICAgICAgICAgLy8gTG9vcCBvdmVyIGFsbCBidWZmZXJzIGFuZFxuICAgICAgICAgIGNvbnN0IHsgYnVmZmVyIH0gPSByZWNvcmQ7XG4gICAgICAgICAgYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgIC8vIElmIHRoZSBidWZmZXIgaXMgb3ZlciB0aGUgbWF4IHNpemUsIHdlIG5lZWQgdG8gZW1pdCBpdC5cbiAgICAgICAgICBtYXhCdWZmZXJTaXplIDw9IGJ1ZmZlci5sZW5ndGggJiYgZW1pdChyZWNvcmQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICAvLyBUaGUgc291cmNlIGNvbXBsZXRlZCwgZW1pdCBhbGwgb2YgdGhlIGFjdGl2ZVxuICAgICAgICAvLyBidWZmZXJzIHdlIGhhdmUgYmVmb3JlIHdlIGNvbXBsZXRlLlxuICAgICAgICB3aGlsZSAoYnVmZmVyUmVjb3Jkcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlclJlY29yZHMuc2hpZnQoKSEuYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBidWZmZXJUaW1lU3Vic2NyaWJlcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LFxuICAgICAgLy8gUGFzcyBhbGwgZXJyb3JzIHRocm91Z2ggdG8gY29uc3VtZXIuXG4gICAgICB1bmRlZmluZWQsXG4gICAgICAvLyBDbGVhbiB1cFxuICAgICAgKCkgPT4gKGJ1ZmZlclJlY29yZHMgPSBudWxsKVxuICAgICk7XG5cbiAgICBzb3VyY2Uuc3Vic2NyaWJlKGJ1ZmZlclRpbWVTdWJzY3JpYmVyKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0LCBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcblxuLyoqXG4gKiBCdWZmZXJzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB2YWx1ZXMsIHVzaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiBvZiBjbG9zaW5nXG4gKiBPYnNlcnZhYmxlcyB0byBkZXRlcm1pbmUgd2hlbiB0byBjbG9zZSwgZW1pdCwgYW5kIHJlc2V0IHRoZSBidWZmZXIuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbGxlY3RzIHZhbHVlcyBmcm9tIHRoZSBwYXN0IGFzIGFuIGFycmF5LiBXaGVuIGl0XG4gKiBzdGFydHMgY29sbGVjdGluZyB2YWx1ZXMsIGl0IGNhbGxzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdFxuICogdGVsbHMgd2hlbiB0byBjbG9zZSB0aGUgYnVmZmVyIGFuZCByZXN0YXJ0IGNvbGxlY3RpbmcuPC9zcGFuPlxuICpcbiAqICFbXShidWZmZXJXaGVuLnN2ZylcbiAqXG4gKiBPcGVucyBhIGJ1ZmZlciBpbW1lZGlhdGVseSwgdGhlbiBjbG9zZXMgdGhlIGJ1ZmZlciB3aGVuIHRoZSBvYnNlcnZhYmxlXG4gKiByZXR1cm5lZCBieSBjYWxsaW5nIGBjbG9zaW5nU2VsZWN0b3JgIGZ1bmN0aW9uIGVtaXRzIGEgdmFsdWUuIFdoZW4gaXQgY2xvc2VzXG4gKiB0aGUgYnVmZmVyLCBpdCBpbW1lZGlhdGVseSBvcGVucyBhIG5ldyBidWZmZXIgYW5kIHJlcGVhdHMgdGhlIHByb2Nlc3MuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIEVtaXQgYW4gYXJyYXkgb2YgdGhlIGxhc3QgY2xpY2tzIGV2ZXJ5IFsxLTVdIHJhbmRvbSBzZWNvbmRzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgYnVmZmVyV2hlbiwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgYnVmZmVyZWQgPSBjbGlja3MucGlwZShcbiAqICAgYnVmZmVyV2hlbigoKSA9PiBpbnRlcnZhbCgxMDAwICsgTWF0aC5yYW5kb20oKSAqIDQwMDApKVxuICogKTtcbiAqIGJ1ZmZlcmVkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcn1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlckNvdW50fVxuICogQHNlZSB7QGxpbmsgYnVmZmVyVGltZX1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlclRvZ2dsZX1cbiAqIEBzZWUge0BsaW5rIHdpbmRvd1doZW59XG4gKlxuICogQHBhcmFtIGNsb3NpbmdTZWxlY3RvciBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzIGFuZCByZXR1cm5zIGFuXG4gKiBPYnNlcnZhYmxlIHRoYXQgc2lnbmFscyBidWZmZXIgY2xvc3VyZS5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiBhcnJheXMgb2YgYnVmZmVyZWQgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyV2hlbjxUPihjbG9zaW5nU2VsZWN0b3I6ICgpID0+IE9ic2VydmFibGVJbnB1dDxhbnk+KTogT3BlcmF0b3JGdW5jdGlvbjxULCBUW10+IHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIC8vIFRoZSBidWZmZXIgd2Uga2VlcCBhbmQgZW1pdC5cbiAgICBsZXQgYnVmZmVyOiBUW10gfCBudWxsID0gbnVsbDtcbiAgICAvLyBBIHJlZmVyZW5jZSB0byB0aGUgc3Vic2NyaWJlciB1c2VkIHRvIHN1YnNjcmliZSB0b1xuICAgIC8vIHRoZSBjbG9zaW5nIG5vdGlmaWVyLiBXZSBuZWVkIHRvIGhvbGQgdGhpcyBzbyB3ZSBjYW5cbiAgICAvLyBlbmQgdGhlIHN1YnNjcmlwdGlvbiBhZnRlciB0aGUgZmlyc3Qgbm90aWZpY2F0aW9uLlxuICAgIGxldCBjbG9zaW5nU3Vic2NyaWJlcjogU3Vic2NyaWJlcjxUPiB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gRW5kcyB0aGUgcHJldmlvdXMgY2xvc2luZyBub3RpZmllciBzdWJzY3JpcHRpb24sIHNvIGl0XG4gICAgLy8gdGVybWluYXRlcyBhZnRlciB0aGUgZmlyc3QgZW1pc3Npb24sIHRoZW4gZW1pdHNcbiAgICAvLyB0aGUgY3VycmVudCBidWZmZXIgIGlmIHRoZXJlIGlzIG9uZSwgc3RhcnRzIGEgbmV3IGJ1ZmZlciwgYW5kIHN0YXJ0cyBhXG4gICAgLy8gbmV3IGNsb3Npbmcgbm90aWZpZXIuXG4gICAgY29uc3Qgb3BlbkJ1ZmZlciA9ICgpID0+IHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0byBmaW5hbGl6ZSB0aGUgY2xvc2luZyBzdWJzY3JpcHRpb24sIHdlIG9ubHkgY2FyZWRcbiAgICAgIC8vIGFib3V0IG9uZSBub3RpZmljYXRpb24uXG4gICAgICBjbG9zaW5nU3Vic2NyaWJlcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIC8vIGVtaXQgdGhlIGJ1ZmZlciBpZiB3ZSBoYXZlIG9uZSwgYW5kIHN0YXJ0IGEgbmV3IGJ1ZmZlci5cbiAgICAgIGNvbnN0IGIgPSBidWZmZXI7XG4gICAgICBidWZmZXIgPSBbXTtcbiAgICAgIGIgJiYgc3Vic2NyaWJlci5uZXh0KGIpO1xuXG4gICAgICAvLyBHZXQgYSBuZXcgY2xvc2luZyBub3RpZmllciBhbmQgc3Vic2NyaWJlIHRvIGl0LlxuICAgICAgaW5uZXJGcm9tKGNsb3NpbmdTZWxlY3RvcigpKS5zdWJzY3JpYmUoKGNsb3NpbmdTdWJzY3JpYmVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIG9wZW5CdWZmZXIsIG5vb3ApKSk7XG4gICAgfTtcblxuICAgIC8vIFN0YXJ0IHRoZSBmaXJzdCBidWZmZXIuXG4gICAgb3BlbkJ1ZmZlcigpO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIG91ciBzb3VyY2UuXG4gICAgc291cmNlLnN1YnNjcmliZShcbiAgICAgIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihcbiAgICAgICAgc3Vic2NyaWJlcixcbiAgICAgICAgLy8gQWRkIGV2ZXJ5IG5ldyB2YWx1ZSB0byB0aGUgY3VycmVudCBidWZmZXIuXG4gICAgICAgICh2YWx1ZSkgPT4gYnVmZmVyPy5wdXNoKHZhbHVlKSxcbiAgICAgICAgLy8gV2hlbiB3ZSBjb21wbGV0ZSwgZW1pdCB0aGUgYnVmZmVyIGlmIHdlIGhhdmUgb25lLFxuICAgICAgICAvLyB0aGVuIGNvbXBsZXRlIHRoZSByZXN1bHQuXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBidWZmZXIgJiYgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcik7XG4gICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBQYXNzIGFsbCBlcnJvcnMgdGhyb3VnaCB0byBjb25zdW1lci5cbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAvLyBSZWxlYXNlIG1lbW9yeSBvbiBmaW5hbGl6YXRpb25cbiAgICAgICAgKCkgPT4gKGJ1ZmZlciA9IGNsb3NpbmdTdWJzY3JpYmVyID0gbnVsbCEpXG4gICAgICApXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXQsIE9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmVkVmFsdWVPZiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGNhdGNoRXJyb3I8VCwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihcbiAgc2VsZWN0b3I6IChlcnI6IGFueSwgY2F1Z2h0OiBPYnNlcnZhYmxlPFQ+KSA9PiBPXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFQgfCBPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuXG4vKipcbiAqIENhdGNoZXMgZXJyb3JzIG9uIHRoZSBvYnNlcnZhYmxlIHRvIGJlIGhhbmRsZWQgYnkgcmV0dXJuaW5nIGEgbmV3IG9ic2VydmFibGUgb3IgdGhyb3dpbmcgYW4gZXJyb3IuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlxuICogSXQgb25seSBsaXN0ZW5zIHRvIHRoZSBlcnJvciBjaGFubmVsIGFuZCBpZ25vcmVzIG5vdGlmaWNhdGlvbnMuXG4gKiBIYW5kbGVzIGVycm9ycyBmcm9tIHRoZSBzb3VyY2Ugb2JzZXJ2YWJsZSwgYW5kIG1hcHMgdGhlbSB0byBhIG5ldyBvYnNlcnZhYmxlLlxuICogVGhlIGVycm9yIG1heSBhbHNvIGJlIHJldGhyb3duLCBvciBhIG5ldyBlcnJvciBjYW4gYmUgdGhyb3duIHRvIGVtaXQgYW4gZXJyb3IgZnJvbSB0aGUgcmVzdWx0LlxuICogPC9zcGFuPlxuICpcbiAqICFbXShjYXRjaC5wbmcpXG4gKlxuICogVGhpcyBvcGVyYXRvciBoYW5kbGVzIGVycm9ycywgYnV0IGZvcndhcmRzIGFsb25nIGFsbCBvdGhlciBldmVudHMgdG8gdGhlIHJlc3VsdGluZyBvYnNlcnZhYmxlLlxuICogSWYgdGhlIHNvdXJjZSBvYnNlcnZhYmxlIHRlcm1pbmF0ZXMgd2l0aCBhbiBlcnJvciwgaXQgd2lsbCBtYXAgdGhhdCBlcnJvciB0byBhIG5ldyBvYnNlcnZhYmxlLFxuICogc3Vic2NyaWJlIHRvIGl0LCBhbmQgZm9yd2FyZCBhbGwgb2YgaXRzIGV2ZW50cyB0byB0aGUgcmVzdWx0aW5nIG9ic2VydmFibGUuXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBDb250aW51ZSB3aXRoIGEgZGlmZmVyZW50IE9ic2VydmFibGUgd2hlbiB0aGVyZSdzIGFuIGVycm9yXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBtYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBvZigxLCAyLCAzLCA0LCA1KVxuICogICAucGlwZShcbiAqICAgICBtYXAobiA9PiB7XG4gKiAgICAgICBpZiAobiA9PT0gNCkge1xuICogICAgICAgICB0aHJvdyAnZm91ciEnO1xuICogICAgICAgfVxuICogICAgICAgcmV0dXJuIG47XG4gKiAgICAgfSksXG4gKiAgICAgY2F0Y2hFcnJvcihlcnIgPT4gb2YoJ0knLCAnSUknLCAnSUlJJywgJ0lWJywgJ1YnKSlcbiAqICAgKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogICAvLyAxLCAyLCAzLCBJLCBJSSwgSUlJLCBJViwgVlxuICogYGBgXG4gKlxuICogUmV0cnkgdGhlIGNhdWdodCBzb3VyY2UgT2JzZXJ2YWJsZSBhZ2FpbiBpbiBjYXNlIG9mIGVycm9yLCBzaW1pbGFyIHRvIGByZXRyeSgpYCBvcGVyYXRvclxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBvZiwgbWFwLCBjYXRjaEVycm9yLCB0YWtlIH0gZnJvbSAncnhqcyc7XG4gKlxuICogb2YoMSwgMiwgMywgNCwgNSlcbiAqICAgLnBpcGUoXG4gKiAgICAgbWFwKG4gPT4ge1xuICogICAgICAgaWYgKG4gPT09IDQpIHtcbiAqICAgICAgICAgdGhyb3cgJ2ZvdXIhJztcbiAqICAgICAgIH1cbiAqICAgICAgIHJldHVybiBuO1xuICogICAgIH0pLFxuICogICAgIGNhdGNoRXJyb3IoKGVyciwgY2F1Z2h0KSA9PiBjYXVnaHQpLFxuICogICAgIHRha2UoMzApXG4gKiAgIClcbiAqICAgLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqICAgLy8gMSwgMiwgMywgMSwgMiwgMywgLi4uXG4gKiBgYGBcbiAqXG4gKiBUaHJvdyBhIG5ldyBlcnJvciB3aGVuIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0aHJvd3MgYW4gZXJyb3JcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIG1hcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMnO1xuICpcbiAqIG9mKDEsIDIsIDMsIDQsIDUpXG4gKiAgIC5waXBlKFxuICogICAgIG1hcChuID0+IHtcbiAqICAgICAgIGlmIChuID09PSA0KSB7XG4gKiAgICAgICAgIHRocm93ICdmb3VyISc7XG4gKiAgICAgICB9XG4gKiAgICAgICByZXR1cm4gbjtcbiAqICAgICB9KSxcbiAqICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gKiAgICAgICB0aHJvdyAnZXJyb3IgaW4gc291cmNlLiBEZXRhaWxzOiAnICsgZXJyO1xuICogICAgIH0pXG4gKiAgIClcbiAqICAgLnN1YnNjcmliZSh7XG4gKiAgICAgbmV4dDogeCA9PiBjb25zb2xlLmxvZyh4KSxcbiAqICAgICBlcnJvcjogZXJyID0+IGNvbnNvbGUubG9nKGVycilcbiAqICAgfSk7XG4gKiAgIC8vIDEsIDIsIDMsIGVycm9yIGluIHNvdXJjZS4gRGV0YWlsczogZm91ciFcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIG9uRXJyb3JSZXN1bWVOZXh0fVxuICogQHNlZSB7QGxpbmsgcmVwZWF0fVxuICogQHNlZSB7QGxpbmsgcmVwZWF0V2hlbn1cbiAqIEBzZWUge0BsaW5rIHJldHJ5IH1cbiAqIEBzZWUge0BsaW5rIHJldHJ5V2hlbn1cbiAqXG4gKiBAcGFyYW0gc2VsZWN0b3IgQSBmdW5jdGlvbiB0aGF0IHRha2VzIGFzIGFyZ3VtZW50cyBgZXJyYCwgd2hpY2ggaXMgdGhlIGVycm9yLCBhbmQgYGNhdWdodGAsIHdoaWNoXG4gKiBpcyB0aGUgc291cmNlIG9ic2VydmFibGUsIGluIGNhc2UgeW91J2QgbGlrZSB0byBcInJldHJ5XCIgdGhhdCBvYnNlcnZhYmxlIGJ5IHJldHVybmluZyBpdCBhZ2Fpbi5cbiAqIFdoYXRldmVyIG9ic2VydmFibGUgaXMgcmV0dXJuZWQgYnkgdGhlIGBzZWxlY3RvcmAgd2lsbCBiZSB1c2VkIHRvIGNvbnRpbnVlIHRoZSBvYnNlcnZhYmxlIGNoYWluLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgb3JpZ2luYXRlcyBmcm9tIGVpdGhlclxuICogdGhlIHNvdXJjZSBvciB0aGUgT2JzZXJ2YWJsZSByZXR1cm5lZCBieSB0aGUgYHNlbGVjdG9yYCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGNoRXJyb3I8VCwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihcbiAgc2VsZWN0b3I6IChlcnI6IGFueSwgY2F1Z2h0OiBPYnNlcnZhYmxlPFQ+KSA9PiBPXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFQgfCBPYnNlcnZlZFZhbHVlT2Y8Tz4+IHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBpbm5lclN1YjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHN5bmNVbnN1YiA9IGZhbHNlO1xuICAgIGxldCBoYW5kbGVkUmVzdWx0OiBPYnNlcnZhYmxlPE9ic2VydmVkVmFsdWVPZjxPPj47XG5cbiAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIChlcnIpID0+IHtcbiAgICAgICAgaGFuZGxlZFJlc3VsdCA9IGlubmVyRnJvbShzZWxlY3RvcihlcnIsIGNhdGNoRXJyb3Ioc2VsZWN0b3IpKHNvdXJjZSkpKTtcbiAgICAgICAgaWYgKGlubmVyU3ViKSB7XG4gICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgaGFuZGxlZFJlc3VsdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbiBpbm5lclN1YiB5ZXQsIHRoYXQgbWVhbnMgdGhlIGVycm9yIHdhcyBzeW5jaHJvbm91c1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHN1YnNjcmliZSBjYWxsIGhhc24ndCByZXR1cm5lZCB5ZXQuXG4gICAgICAgICAgc3luY1Vuc3ViID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKHN5bmNVbnN1Yikge1xuICAgICAgLy8gV2UgaGF2ZSBhIHN5bmNocm9ub3VzIGVycm9yLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0b1xuICAgICAgLy8gZmluYWxpemUgcmlnaHQgYXdheS4gVGhpcyBlbnN1cmVzIHRoYXQgY2FsbGJhY2tzIGluIHRoZSBgZmluYWxpemVgIG9wZXJhdG9yIGFyZSBjYWxsZWRcbiAgICAgIC8vIGF0IHRoZSByaWdodCB0aW1lLCBhbmQgdGhhdCBmaW5hbGl6YXRpb24gb2NjdXJzIGF0IHRoZSBleHBlY3RlZFxuICAgICAgLy8gdGltZSBiZXR3ZWVuIHRoZSBzb3VyY2UgZXJyb3IgYW5kIHRoZSBzdWJzY3JpcHRpb24gdG8gdGhlXG4gICAgICAvLyBuZXh0IG9ic2VydmFibGUuXG4gICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgaGFuZGxlZFJlc3VsdCEuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH1cbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgc2NhbkludGVybmFscyB9IGZyb20gJy4vc2NhbkludGVybmFscyc7XG5pbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2U8ViwgQSA9IFY+KGFjY3VtdWxhdG9yOiAoYWNjOiBBIHwgViwgdmFsdWU6IFYsIGluZGV4OiBudW1iZXIpID0+IEEpOiBPcGVyYXRvckZ1bmN0aW9uPFYsIFYgfCBBPjtcbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2U8ViwgQT4oYWNjdW11bGF0b3I6IChhY2M6IEEsIHZhbHVlOiBWLCBpbmRleDogbnVtYmVyKSA9PiBBLCBzZWVkOiBBKTogT3BlcmF0b3JGdW5jdGlvbjxWLCBBPjtcbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2U8ViwgQSwgUyA9IEE+KGFjY3VtdWxhdG9yOiAoYWNjOiBBIHwgUywgdmFsdWU6IFYsIGluZGV4OiBudW1iZXIpID0+IEEsIHNlZWQ6IFMpOiBPcGVyYXRvckZ1bmN0aW9uPFYsIEE+O1xuXG4vKipcbiAqIEFwcGxpZXMgYW4gYWNjdW11bGF0b3IgZnVuY3Rpb24gb3ZlciB0aGUgc291cmNlIE9ic2VydmFibGUsIGFuZCByZXR1cm5zIHRoZVxuICogYWNjdW11bGF0ZWQgcmVzdWx0IHdoZW4gdGhlIHNvdXJjZSBjb21wbGV0ZXMsIGdpdmVuIGFuIG9wdGlvbmFsIHNlZWQgdmFsdWUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbWJpbmVzIHRvZ2V0aGVyIGFsbCB2YWx1ZXMgZW1pdHRlZCBvbiB0aGUgc291cmNlLFxuICogdXNpbmcgYW4gYWNjdW11bGF0b3IgZnVuY3Rpb24gdGhhdCBrbm93cyBob3cgdG8gam9pbiBhIG5ldyBzb3VyY2UgdmFsdWUgaW50b1xuICogdGhlIGFjY3VtdWxhdGlvbiBmcm9tIHRoZSBwYXN0Ljwvc3Bhbj5cbiAqXG4gKiAhW10ocmVkdWNlLnBuZylcbiAqXG4gKiBMaWtlXG4gKiBbQXJyYXkucHJvdG90eXBlLnJlZHVjZSgpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9yZWR1Y2UpLFxuICogYHJlZHVjZWAgYXBwbGllcyBhbiBgYWNjdW11bGF0b3JgIGZ1bmN0aW9uIGFnYWluc3QgYW4gYWNjdW11bGF0aW9uIGFuZCBlYWNoXG4gKiB2YWx1ZSBvZiB0aGUgc291cmNlIE9ic2VydmFibGUgKGZyb20gdGhlIHBhc3QpIHRvIHJlZHVjZSBpdCB0byBhIHNpbmdsZVxuICogdmFsdWUsIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLiBOb3RlIHRoYXQgYHJlZHVjZWAgd2lsbCBvbmx5IGVtaXRcbiAqIG9uZSB2YWx1ZSwgb25seSB3aGVuIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBjb21wbGV0ZXMuIEl0IGlzIGVxdWl2YWxlbnQgdG9cbiAqIGFwcGx5aW5nIG9wZXJhdG9yIHtAbGluayBzY2FufSBmb2xsb3dlZCBieSBvcGVyYXRvciB7QGxpbmsgbGFzdH0uXG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgYXBwbGllcyBhIHNwZWNpZmllZCBgYWNjdW11bGF0b3JgIGZ1bmN0aW9uIHRvIGVhY2hcbiAqIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuIElmIGEgYHNlZWRgIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlblxuICogdGhhdCB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBhY2N1bXVsYXRvci4gSWYgbm8gc2VlZFxuICogdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZmlyc3QgaXRlbSBvZiB0aGUgc291cmNlIGlzIHVzZWQgYXMgdGhlIHNlZWQuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgY2xpY2sgZXZlbnRzIHRoYXQgaGFwcGVuZWQgaW4gNSBzZWNvbmRzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgdGFrZVVudGlsLCBpbnRlcnZhbCwgbWFwLCByZWR1Y2UgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3NJbkZpdmVTZWNvbmRzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKVxuICogICAucGlwZSh0YWtlVW50aWwoaW50ZXJ2YWwoNTAwMCkpKTtcbiAqXG4gKiBjb25zdCBvbmVzID0gY2xpY2tzSW5GaXZlU2Vjb25kcy5waXBlKG1hcCgoKSA9PiAxKSk7XG4gKiBjb25zdCBzZWVkID0gMDtcbiAqIGNvbnN0IGNvdW50ID0gb25lcy5waXBlKHJlZHVjZSgoYWNjLCBvbmUpID0+IGFjYyArIG9uZSwgc2VlZCkpO1xuICpcbiAqIGNvdW50LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGNvdW50fVxuICogQHNlZSB7QGxpbmsgZXhwYW5kfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VTY2FufVxuICogQHNlZSB7QGxpbmsgc2Nhbn1cbiAqXG4gKiBAcGFyYW0gYWNjdW11bGF0b3IgVGhlIGFjY3VtdWxhdG9yIGZ1bmN0aW9uIGNhbGxlZCBvbiBlYWNoIHNvdXJjZSB2YWx1ZS5cbiAqIEBwYXJhbSBzZWVkIFRoZSBpbml0aWFsIGFjY3VtdWxhdGlvbiB2YWx1ZS5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGEgc2luZ2xlIHZhbHVlIHRoYXRcbiAqIGlzIHRoZSByZXN1bHQgb2YgYWNjdW11bGF0aW5nIHRoZSB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2U8ViwgQT4oYWNjdW11bGF0b3I6IChhY2M6IFYgfCBBLCB2YWx1ZTogViwgaW5kZXg6IG51bWJlcikgPT4gQSwgc2VlZD86IGFueSk6IE9wZXJhdG9yRnVuY3Rpb248ViwgViB8IEE+IHtcbiAgcmV0dXJuIG9wZXJhdGUoc2NhbkludGVybmFscyhhY2N1bXVsYXRvciwgc2VlZCwgYXJndW1lbnRzLmxlbmd0aCA+PSAyLCBmYWxzZSwgdHJ1ZSkpO1xufVxuIiwgImltcG9ydCB7IHJlZHVjZSB9IGZyb20gJy4vcmVkdWNlJztcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcblxuY29uc3QgYXJyUmVkdWNlciA9IChhcnI6IGFueVtdLCB2YWx1ZTogYW55KSA9PiAoYXJyLnB1c2godmFsdWUpLCBhcnIpO1xuXG4vKipcbiAqIENvbGxlY3RzIGFsbCBzb3VyY2UgZW1pc3Npb25zIGFuZCBlbWl0cyB0aGVtIGFzIGFuIGFycmF5IHdoZW4gdGhlIHNvdXJjZSBjb21wbGV0ZXMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkdldCBhbGwgdmFsdWVzIGluc2lkZSBhbiBhcnJheSB3aGVuIHRoZSBzb3VyY2UgY29tcGxldGVzPC9zcGFuPlxuICpcbiAqICFbXSh0b0FycmF5LnBuZylcbiAqXG4gKiBgdG9BcnJheWAgd2lsbCB3YWl0IHVudGlsIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBjb21wbGV0ZXMgYmVmb3JlIGVtaXR0aW5nXG4gKiB0aGUgYXJyYXkgY29udGFpbmluZyBhbGwgZW1pc3Npb25zLiBXaGVuIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBlcnJvcnMgbm9cbiAqIGFycmF5IHdpbGwgYmUgZW1pdHRlZC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCB0YWtlLCB0b0FycmF5IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgc291cmNlID0gaW50ZXJ2YWwoMTAwMCk7XG4gKiBjb25zdCBleGFtcGxlID0gc291cmNlLnBpcGUoXG4gKiAgIHRha2UoMTApLFxuICogICB0b0FycmF5KClcbiAqICk7XG4gKlxuICogZXhhbXBsZS5zdWJzY3JpYmUodmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpKTtcbiAqXG4gKiAvLyBvdXRwdXQ6IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XVxuICogYGBgXG4gKlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gYXJyYXkgb2YgaXRlbXNcbiAqIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdoZW4gc291cmNlIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXk8VD4oKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUW10+IHtcbiAgLy8gQmVjYXVzZSBhcnJheXMgYXJlIG11dGFibGUsIGFuZCB3ZSdyZSBtdXRhdGluZyB0aGUgYXJyYXkgaW4gdGhpc1xuICAvLyByZWR1Y2VyIHByb2Nlc3MsIHdlIGhhdmUgdG8gZW5jYXBzdWxhdGUgdGhlIGNyZWF0aW9uIG9mIHRoZSBpbml0aWFsXG4gIC8vIGFycmF5IHdpdGhpbiB0aGlzIGBvcGVyYXRlYCBmdW5jdGlvbi5cbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIHJlZHVjZShhcnJSZWR1Y2VyLCBbXSBhcyBUW10pKHNvdXJjZSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0JztcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGVJbnB1dCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGpvaW5BbGxJbnRlcm5hbHMgfSBmcm9tICcuL2pvaW5BbGxJbnRlcm5hbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUxhdGVzdEFsbDxUPigpOiBPcGVyYXRvckZ1bmN0aW9uPE9ic2VydmFibGVJbnB1dDxUPiwgVFtdPjtcbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lTGF0ZXN0QWxsPFQ+KCk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBUW10+O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3RBbGw8VCwgUj4ocHJvamVjdDogKC4uLnZhbHVlczogVFtdKSA9PiBSKTogT3BlcmF0b3JGdW5jdGlvbjxPYnNlcnZhYmxlSW5wdXQ8VD4sIFI+O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3RBbGw8Uj4ocHJvamVjdDogKC4uLnZhbHVlczogQXJyYXk8YW55PikgPT4gUik6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBSPjtcblxuLyoqXG4gKiBGbGF0dGVucyBhbiBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzIGJ5IGFwcGx5aW5nIHtAbGluayBjb21iaW5lTGF0ZXN0fSB3aGVuIHRoZSBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzIGNvbXBsZXRlcy5cbiAqXG4gKiBgY29tYmluZUxhdGVzdEFsbGAgdGFrZXMgYW4gT2JzZXJ2YWJsZSBvZiBPYnNlcnZhYmxlcywgYW5kIGNvbGxlY3RzIGFsbCBPYnNlcnZhYmxlcyBmcm9tIGl0LiBPbmNlIHRoZSBvdXRlciBPYnNlcnZhYmxlIGNvbXBsZXRlcyxcbiAqIGl0IHN1YnNjcmliZXMgdG8gYWxsIGNvbGxlY3RlZCBPYnNlcnZhYmxlcyBhbmQgY29tYmluZXMgdGhlaXIgdmFsdWVzIHVzaW5nIHRoZSB7QGxpbmsgY29tYmluZUxhdGVzdH0gc3RyYXRlZ3ksIHN1Y2ggdGhhdDpcbiAqXG4gKiAqIEV2ZXJ5IHRpbWUgYW4gaW5uZXIgT2JzZXJ2YWJsZSBlbWl0cywgdGhlIG91dHB1dCBPYnNlcnZhYmxlIGVtaXRzXG4gKiAqIFdoZW4gdGhlIHJldHVybmVkIG9ic2VydmFibGUgZW1pdHMsIGl0IGVtaXRzIGFsbCBvZiB0aGUgbGF0ZXN0IHZhbHVlcyBieTpcbiAqICAgICogSWYgYSBgcHJvamVjdGAgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGl0IGlzIGNhbGxlZCB3aXRoIGVhY2ggcmVjZW50IHZhbHVlIGZyb20gZWFjaCBpbm5lciBPYnNlcnZhYmxlIGluIHdoYXRldmVyIG9yZGVyIHRoZXlcbiAqICAgICAgYXJyaXZlZCwgYW5kIHRoZSByZXN1bHQgb2YgdGhlIGBwcm9qZWN0YCBmdW5jdGlvbiBpcyB3aGF0IGlzIGVtaXR0ZWQgYnkgdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICogICAgKiBJZiB0aGVyZSBpcyBubyBgcHJvamVjdGAgZnVuY3Rpb24sIGFuIGFycmF5IG9mIGFsbCB0aGUgbW9zdCByZWNlbnQgdmFsdWVzIGlzIGVtaXR0ZWQgYnkgdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBNYXAgdHdvIGNsaWNrIGV2ZW50cyB0byBhIGZpbml0ZSBpbnRlcnZhbCBPYnNlcnZhYmxlLCB0aGVuIGFwcGx5IGBjb21iaW5lTGF0ZXN0QWxsYFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIG1hcCwgaW50ZXJ2YWwsIHRha2UsIGNvbWJpbmVMYXRlc3RBbGwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgaGlnaGVyT3JkZXIgPSBjbGlja3MucGlwZShcbiAqICAgbWFwKCgpID0+IGludGVydmFsKE1hdGgucmFuZG9tKCkgKiAyMDAwKS5waXBlKHRha2UoMykpKSxcbiAqICAgdGFrZSgyKVxuICogKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGhpZ2hlck9yZGVyLnBpcGUoY29tYmluZUxhdGVzdEFsbCgpKTtcbiAqXG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgY29tYmluZUxhdGVzdH1cbiAqIEBzZWUge0BsaW5rIGNvbWJpbmVMYXRlc3RXaXRofVxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKlxuICogQHBhcmFtIHByb2plY3Qgb3B0aW9uYWwgZnVuY3Rpb24gdG8gbWFwIHRoZSBtb3N0IHJlY2VudCB2YWx1ZXMgZnJvbSBlYWNoIGlubmVyIE9ic2VydmFibGUgaW50byBhIG5ldyByZXN1bHQuXG4gKiBUYWtlcyBlYWNoIG9mIHRoZSBtb3N0IHJlY2VudCB2YWx1ZXMgZnJvbSBlYWNoIGNvbGxlY3RlZCBpbm5lciBPYnNlcnZhYmxlIGFzIGFyZ3VtZW50cywgaW4gb3JkZXIuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBmbGF0dGVucyBPYnNlcnZhYmxlc1xuICogZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lTGF0ZXN0QWxsPFI+KHByb2plY3Q/OiAoLi4udmFsdWVzOiBBcnJheTxhbnk+KSA9PiBSKSB7XG4gIHJldHVybiBqb2luQWxsSW50ZXJuYWxzKGNvbWJpbmVMYXRlc3QsIHByb2plY3QpO1xufVxuIiwgImltcG9ydCB7IGNvbWJpbmVMYXRlc3RBbGwgfSBmcm9tICcuL2NvbWJpbmVMYXRlc3RBbGwnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFJlbmFtZWQgdG8ge0BsaW5rIGNvbWJpbmVMYXRlc3RBbGx9LiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gKi9cbmV4cG9ydCBjb25zdCBjb21iaW5lQWxsID0gY29tYmluZUxhdGVzdEFsbDtcbiIsICJpbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJy4vbWVyZ2VNYXAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0LCBPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZlZFZhbHVlT2YgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0TWFwPFQsIE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8YW55Pj4oXG4gIHByb2plY3Q6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gT1xuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuLyoqIEBkZXByZWNhdGVkIFRoZSBgcmVzdWx0U2VsZWN0b3JgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBhbiBpbm5lciBgbWFwYCBpbnN0ZWFkLiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9yZXN1bHRTZWxlY3RvciAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdE1hcDxULCBPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PGFueT4+KFxuICBwcm9qZWN0OiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IE8sXG4gIHJlc3VsdFNlbGVjdG9yOiB1bmRlZmluZWRcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgT2JzZXJ2ZWRWYWx1ZU9mPE8+Pjtcbi8qKiBAZGVwcmVjYXRlZCBUaGUgYHJlc3VsdFNlbGVjdG9yYCBwYXJhbWV0ZXIgd2lsbCBiZSByZW1vdmVkIGluIHY4LiBVc2UgYW4gaW5uZXIgYG1hcGAgaW5zdGVhZC4gRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvcmVzdWx0U2VsZWN0b3IgKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRNYXA8VCwgUiwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihcbiAgcHJvamVjdDogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBPLFxuICByZXN1bHRTZWxlY3RvcjogKG91dGVyVmFsdWU6IFQsIGlubmVyVmFsdWU6IE9ic2VydmVkVmFsdWVPZjxPPiwgb3V0ZXJJbmRleDogbnVtYmVyLCBpbm5lckluZGV4OiBudW1iZXIpID0+IFJcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgUj47XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuXG4vKipcbiAqIFByb2plY3RzIGVhY2ggc291cmNlIHZhbHVlIHRvIGFuIE9ic2VydmFibGUgd2hpY2ggaXMgbWVyZ2VkIGluIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUsIGluIGEgc2VyaWFsaXplZCBmYXNoaW9uIHdhaXRpbmcgZm9yIGVhY2ggb25lIHRvIGNvbXBsZXRlIGJlZm9yZVxuICogbWVyZ2luZyB0aGUgbmV4dC5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+TWFwcyBlYWNoIHZhbHVlIHRvIGFuIE9ic2VydmFibGUsIHRoZW4gZmxhdHRlbnMgYWxsIG9mXG4gKiB0aGVzZSBpbm5lciBPYnNlcnZhYmxlcyB1c2luZyB7QGxpbmsgY29uY2F0QWxsfS48L3NwYW4+XG4gKlxuICogIVtdKGNvbmNhdE1hcC5wbmcpXG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgYmFzZWQgb24gYXBwbHlpbmcgYSBmdW5jdGlvbiB0aGF0IHlvdVxuICogc3VwcGx5IHRvIGVhY2ggaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgd2hlcmUgdGhhdCBmdW5jdGlvblxuICogcmV0dXJucyBhbiAoc28tY2FsbGVkIFwiaW5uZXJcIikgT2JzZXJ2YWJsZS4gRWFjaCBuZXcgaW5uZXIgT2JzZXJ2YWJsZSBpc1xuICogY29uY2F0ZW5hdGVkIHdpdGggdGhlIHByZXZpb3VzIGlubmVyIE9ic2VydmFibGUuXG4gKlxuICogX19XYXJuaW5nOl9fIGlmIHNvdXJjZSB2YWx1ZXMgYXJyaXZlIGVuZGxlc3NseSBhbmQgZmFzdGVyIHRoYW4gdGhlaXJcbiAqIGNvcnJlc3BvbmRpbmcgaW5uZXIgT2JzZXJ2YWJsZXMgY2FuIGNvbXBsZXRlLCBpdCB3aWxsIHJlc3VsdCBpbiBtZW1vcnkgaXNzdWVzXG4gKiBhcyBpbm5lciBPYnNlcnZhYmxlcyBhbWFzcyBpbiBhbiB1bmJvdW5kZWQgYnVmZmVyIHdhaXRpbmcgZm9yIHRoZWlyIHR1cm4gdG9cbiAqIGJlIHN1YnNjcmliZWQgdG8uXG4gKlxuICogTm90ZTogYGNvbmNhdE1hcGAgaXMgZXF1aXZhbGVudCB0byBgbWVyZ2VNYXBgIHdpdGggY29uY3VycmVuY3kgcGFyYW1ldGVyIHNldFxuICogdG8gYDFgLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBGb3IgZWFjaCBjbGljayBldmVudCwgdGljayBldmVyeSBzZWNvbmQgZnJvbSAwIHRvIDMsIHdpdGggbm8gY29uY3VycmVuY3lcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBjb25jYXRNYXAsIGludGVydmFsLCB0YWtlIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGNsaWNrcy5waXBlKFxuICogICBjb25jYXRNYXAoZXYgPT4gaW50ZXJ2YWwoMTAwMCkucGlwZSh0YWtlKDQpKSlcbiAqICk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZzpcbiAqIC8vIChyZXN1bHRzIGFyZSBub3QgY29uY3VycmVudClcbiAqIC8vIEZvciBldmVyeSBjbGljayBvbiB0aGUgXCJkb2N1bWVudFwiIGl0IHdpbGwgZW1pdCB2YWx1ZXMgMCB0byAzIHNwYWNlZFxuICogLy8gb24gYSAxMDAwbXMgaW50ZXJ2YWxcbiAqIC8vIG9uZSBjbGljayA9IDEwMDBtcy0+IDAgLTEwMDBtcy0+IDEgLTEwMDBtcy0+IDIgLTEwMDBtcy0+IDNcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGNvbmNhdH1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdEFsbH1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcFRvfVxuICogQHNlZSB7QGxpbmsgZXhoYXVzdE1hcH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwfVxuICogQHNlZSB7QGxpbmsgc3dpdGNoTWFwfVxuICpcbiAqIEBwYXJhbSBwcm9qZWN0IEEgZnVuY3Rpb24gdGhhdCwgd2hlbiBhcHBsaWVkIHRvIGFuIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLCByZXR1cm5zIGFuIE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mXG4gKiBhcHBseWluZyB0aGUgcHJvamVjdGlvbiBmdW5jdGlvbiAoYW5kIHRoZSBvcHRpb25hbCBkZXByZWNhdGVkXG4gKiBgcmVzdWx0U2VsZWN0b3JgKSB0byBlYWNoIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYW5kIHRha2luZ1xuICogdmFsdWVzIGZyb20gZWFjaCBwcm9qZWN0ZWQgaW5uZXIgT2JzZXJ2YWJsZSBzZXF1ZW50aWFsbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRNYXA8VCwgUiwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihcbiAgcHJvamVjdDogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBPLFxuICByZXN1bHRTZWxlY3Rvcj86IChvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBPYnNlcnZlZFZhbHVlT2Y8Tz4sIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKSA9PiBSXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIE9ic2VydmVkVmFsdWVPZjxPPiB8IFI+IHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpID8gbWVyZ2VNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IsIDEpIDogbWVyZ2VNYXAocHJvamVjdCwgMSk7XG59XG4iLCAiaW1wb3J0IHsgY29uY2F0TWFwIH0gZnJvbSAnLi9jb25jYXRNYXAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0LCBPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZlZFZhbHVlT2YgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcblxuLyoqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OS4gVXNlIHtAbGluayBjb25jYXRNYXB9IGluc3RlYWQ6IGBjb25jYXRNYXAoKCkgPT4gcmVzdWx0KWAgKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRNYXBUbzxPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PHVua25vd24+PihvYnNlcnZhYmxlOiBPKTogT3BlcmF0b3JGdW5jdGlvbjx1bmtub3duLCBPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuLyoqIEBkZXByZWNhdGVkIFRoZSBgcmVzdWx0U2VsZWN0b3JgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBhbiBpbm5lciBgbWFwYCBpbnN0ZWFkLiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9yZXN1bHRTZWxlY3RvciAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdE1hcFRvPE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8dW5rbm93bj4+KFxuICBvYnNlcnZhYmxlOiBPLFxuICByZXN1bHRTZWxlY3RvcjogdW5kZWZpbmVkXG4pOiBPcGVyYXRvckZ1bmN0aW9uPHVua25vd24sIE9ic2VydmVkVmFsdWVPZjxPPj47XG4vKiogQGRlcHJlY2F0ZWQgVGhlIGByZXN1bHRTZWxlY3RvcmAgcGFyYW1ldGVyIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIGFuIGlubmVyIGBtYXBgIGluc3RlYWQuIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL3Jlc3VsdFNlbGVjdG9yICovXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0TWFwVG88VCwgUiwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDx1bmtub3duPj4oXG4gIG9ic2VydmFibGU6IE8sXG4gIHJlc3VsdFNlbGVjdG9yOiAob3V0ZXJWYWx1ZTogVCwgaW5uZXJWYWx1ZTogT2JzZXJ2ZWRWYWx1ZU9mPE8+LCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcikgPT4gUlxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBSPjtcblxuLyoqXG4gKiBQcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byB0aGUgc2FtZSBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBtdWx0aXBsZVxuICogdGltZXMgaW4gYSBzZXJpYWxpemVkIGZhc2hpb24gb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGNvbmNhdE1hcH0sIGJ1dCBtYXBzIGVhY2ggdmFsdWVcbiAqIGFsd2F5cyB0byB0aGUgc2FtZSBpbm5lciBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiAhW10oY29uY2F0TWFwVG8ucG5nKVxuICpcbiAqIE1hcHMgZWFjaCBzb3VyY2UgdmFsdWUgdG8gdGhlIGdpdmVuIE9ic2VydmFibGUgYGlubmVyT2JzZXJ2YWJsZWAgcmVnYXJkbGVzc1xuICogb2YgdGhlIHNvdXJjZSB2YWx1ZSwgYW5kIHRoZW4gZmxhdHRlbnMgdGhvc2UgcmVzdWx0aW5nIE9ic2VydmFibGVzIGludG8gb25lXG4gKiBzaW5nbGUgT2JzZXJ2YWJsZSwgd2hpY2ggaXMgdGhlIG91dHB1dCBPYnNlcnZhYmxlLiBFYWNoIG5ldyBgaW5uZXJPYnNlcnZhYmxlYFxuICogaW5zdGFuY2UgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgaXMgY29uY2F0ZW5hdGVkIHdpdGggdGhlIHByZXZpb3VzXG4gKiBgaW5uZXJPYnNlcnZhYmxlYCBpbnN0YW5jZS5cbiAqXG4gKiBfX1dhcm5pbmc6X18gaWYgc291cmNlIHZhbHVlcyBhcnJpdmUgZW5kbGVzc2x5IGFuZCBmYXN0ZXIgdGhhbiB0aGVpclxuICogY29ycmVzcG9uZGluZyBpbm5lciBPYnNlcnZhYmxlcyBjYW4gY29tcGxldGUsIGl0IHdpbGwgcmVzdWx0IGluIG1lbW9yeSBpc3N1ZXNcbiAqIGFzIGlubmVyIE9ic2VydmFibGVzIGFtYXNzIGluIGFuIHVuYm91bmRlZCBidWZmZXIgd2FpdGluZyBmb3IgdGhlaXIgdHVybiB0b1xuICogYmUgc3Vic2NyaWJlZCB0by5cbiAqXG4gKiBOb3RlOiBgY29uY2F0TWFwVG9gIGlzIGVxdWl2YWxlbnQgdG8gYG1lcmdlTWFwVG9gIHdpdGggY29uY3VycmVuY3kgcGFyYW1ldGVyXG4gKiBzZXQgdG8gYDFgLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBGb3IgZWFjaCBjbGljayBldmVudCwgdGljayBldmVyeSBzZWNvbmQgZnJvbSAwIHRvIDMsIHdpdGggbm8gY29uY3VycmVuY3lcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBjb25jYXRNYXBUbywgaW50ZXJ2YWwsIHRha2UgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgcmVzdWx0ID0gY2xpY2tzLnBpcGUoXG4gKiAgIGNvbmNhdE1hcFRvKGludGVydmFsKDEwMDApLnBpcGUodGFrZSg0KSkpXG4gKiApO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gKiAvLyAocmVzdWx0cyBhcmUgbm90IGNvbmN1cnJlbnQpXG4gKiAvLyBGb3IgZXZlcnkgY2xpY2sgb24gdGhlIFwiZG9jdW1lbnRcIiBpdCB3aWxsIGVtaXQgdmFsdWVzIDAgdG8gMyBzcGFjZWRcbiAqIC8vIG9uIGEgMTAwMG1zIGludGVydmFsXG4gKiAvLyBvbmUgY2xpY2sgPSAxMDAwbXMtPiAwIC0xMDAwbXMtPiAxIC0xMDAwbXMtPiAyIC0xMDAwbXMtPiAzXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBjb25jYXR9XG4gKiBAc2VlIHtAbGluayBjb25jYXRBbGx9XG4gKiBAc2VlIHtAbGluayBjb25jYXRNYXB9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcFRvfVxuICogQHNlZSB7QGxpbmsgc3dpdGNoTWFwVG99XG4gKlxuICogQHBhcmFtIGlubmVyT2JzZXJ2YWJsZSBBbiBgT2JzZXJ2YWJsZUlucHV0YCB0byByZXBsYWNlIGVhY2ggdmFsdWUgZnJvbSB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIG9mIHZhbHVlcyBtZXJnZWQgdG9nZXRoZXIgYnlcbiAqIGpvaW5pbmcgdGhlIHBhc3NlZCBPYnNlcnZhYmxlIHdpdGggaXRzZWxmLCBvbmUgYWZ0ZXIgdGhlIG90aGVyLCBmb3IgZWFjaFxuICogdmFsdWUgZW1pdHRlZCBmcm9tIHRoZSBzb3VyY2UuXG4gKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gdjkuIFVzZSB7QGxpbmsgY29uY2F0TWFwfSBpbnN0ZWFkOiBgY29uY2F0TWFwKCgpID0+IHJlc3VsdClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRNYXBUbzxULCBSLCBPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PHVua25vd24+PihcbiAgaW5uZXJPYnNlcnZhYmxlOiBPLFxuICByZXN1bHRTZWxlY3Rvcj86IChvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBPYnNlcnZlZFZhbHVlT2Y8Tz4sIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKSA9PiBSXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIE9ic2VydmVkVmFsdWVPZjxPPiB8IFI+IHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpID8gY29uY2F0TWFwKCgpID0+IGlubmVyT2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IpIDogY29uY2F0TWFwKCgpID0+IGlubmVyT2JzZXJ2YWJsZSk7XG59XG4iLCAiaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZUlucHV0LCBPYnNlcnZlZFZhbHVlT2YsIFN1YmplY3RMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBmcm9tU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9mcm9tU3Vic2NyaWJhYmxlJztcblxuLyoqXG4gKiBBbiBvYmplY3QgdXNlZCB0byBjb25maWd1cmUge0BsaW5rIGNvbm5lY3R9IG9wZXJhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RDb25maWc8VD4ge1xuICAvKipcbiAgICogQSBmYWN0b3J5IGZ1bmN0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBTdWJqZWN0IHRocm91Z2ggd2hpY2ggdGhlIHNvdXJjZVxuICAgKiBpcyBtdWx0aWNhc3QuIEJ5IGRlZmF1bHQsIHRoaXMgY3JlYXRlcyBhIHtAbGluayBTdWJqZWN0fS5cbiAgICovXG4gIGNvbm5lY3RvcjogKCkgPT4gU3ViamVjdExpa2U8VD47XG59XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgYGNvbm5lY3RgLlxuICovXG5jb25zdCBERUZBVUxUX0NPTkZJRzogQ29ubmVjdENvbmZpZzx1bmtub3duPiA9IHtcbiAgY29ubmVjdG9yOiAoKSA9PiBuZXcgU3ViamVjdDx1bmtub3duPigpLFxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9ic2VydmFibGUgYnkgbXVsdGljYXN0aW5nIHRoZSBzb3VyY2Ugd2l0aGluIGEgZnVuY3Rpb24gdGhhdFxuICogYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gZGVmaW5lIHRoZSB1c2FnZSBvZiB0aGUgbXVsdGljYXN0IHByaW9yIHRvIGNvbm5lY3Rpb24uXG4gKlxuICogVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGlmIHRoZSBvYnNlcnZhYmxlIHNvdXJjZSB5b3Ugd2lzaCB0byBtdWx0aWNhc3QgY291bGRcbiAqIGJlIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cy4gVGhpcyBzZXRzIGl0IGFwYXJ0IGZyb20ge0BsaW5rIHNoYXJlfSwgd2hpY2gsIGluIHRoZVxuICogY2FzZSBvZiB0b3RhbGx5IHN5bmNocm9ub3VzIHNvdXJjZXMgd2lsbCBmYWlsIHRvIHNoYXJlIGEgc2luZ2xlIHN1YnNjcmlwdGlvbiB3aXRoXG4gKiBtdWx0aXBsZSBjb25zdW1lcnMsIGFzIGJ5IHRoZSB0aW1lIHRoZSBzdWJzY3JpcHRpb24gdG8gdGhlIHJlc3VsdCBvZiB7QGxpbmsgc2hhcmV9XG4gKiBoYXMgcmV0dXJuZWQsIGlmIHRoZSBzb3VyY2UgaXMgc3luY2hyb25vdXMgaXRzIGludGVybmFsIHJlZmVyZW5jZSBjb3VudCB3aWxsIGp1bXAgZnJvbVxuICogMCB0byAxIGJhY2sgdG8gMCBhbmQgcmVzZXQuXG4gKlxuICogVG8gdXNlIGBjb25uZWN0YCwgeW91IHByb3ZpZGUgYSBgc2VsZWN0b3JgIGZ1bmN0aW9uIHRoYXQgd2lsbCBnaXZlIHlvdVxuICogYSBtdWx0aWNhc3Qgb2JzZXJ2YWJsZSB0aGF0IGlzIG5vdCB5ZXQgY29ubmVjdGVkLiBZb3UgdGhlbiB1c2UgdGhhdCBtdWx0aWNhc3Qgb2JzZXJ2YWJsZVxuICogdG8gY3JlYXRlIGEgcmVzdWx0aW5nIG9ic2VydmFibGUgdGhhdCwgd2hlbiBzdWJzY3JpYmVkLCB3aWxsIHNldCB1cCB5b3VyIG11bHRpY2FzdC4gVGhpcyBpc1xuICogZ2VuZXJhbGx5LCBidXQgbm90IGFsd2F5cywgYWNjb21wbGlzaGVkIHdpdGgge0BsaW5rIG1lcmdlfS5cbiAqXG4gKiBOb3RlIHRoYXQgdXNpbmcgYSB7QGxpbmsgdGFrZVVudGlsfSBpbnNpZGUgb2YgYGNvbm5lY3RgJ3MgYHNlbGVjdG9yYCBfbWlnaHRfIG1lYW4geW91IHdlcmUgbG9va2luZ1xuICogdG8gdXNlIHRoZSB7QGxpbmsgdGFrZVdoaWxlfSBvcGVyYXRvciBpbnN0ZWFkLlxuICpcbiAqIFdoZW4geW91IHN1YnNjcmliZSB0byB0aGUgcmVzdWx0IG9mIGBjb25uZWN0YCwgdGhlIGBzZWxlY3RvcmAgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQuIEFmdGVyXG4gKiB0aGUgYHNlbGVjdG9yYCBmdW5jdGlvbiByZXR1cm5zLCB0aGUgb2JzZXJ2YWJsZSBpdCByZXR1cm5zIHdpbGwgYmUgc3Vic2NyaWJlZCB0bywgX3RoZW5fIHRoZVxuICogbXVsdGljYXN0IHdpbGwgYmUgY29ubmVjdGVkIHRvIHRoZSBzb3VyY2UuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFNoYXJpbmcgYSB0b3RhbGx5IHN5bmNocm9ub3VzIG9ic2VydmFibGVcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIHRhcCwgY29ubmVjdCwgbWVyZ2UsIG1hcCwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgc291cmNlJCA9IG9mKDEsIDIsIDMsIDQsIDUpLnBpcGUoXG4gKiAgIHRhcCh7XG4gKiAgICAgc3Vic2NyaWJlOiAoKSA9PiBjb25zb2xlLmxvZygnc3Vic2NyaXB0aW9uIHN0YXJ0ZWQnKSxcbiAqICAgICBuZXh0OiBuID0+IGNvbnNvbGUubG9nKGBzb3VyY2UgZW1pdHRlZCAkeyBuIH1gKVxuICogICB9KVxuICogKTtcbiAqXG4gKiBzb3VyY2UkLnBpcGUoXG4gKiAgIC8vIE5vdGljZSBpbiBoZXJlIHdlJ3JlIG1lcmdpbmcgMyBzdWJzY3JpcHRpb25zIHRvIGBzaGFyZWQkYC5cbiAqICAgY29ubmVjdChzaGFyZWQkID0+IG1lcmdlKFxuICogICAgIHNoYXJlZCQucGlwZShtYXAobiA9PiBgYWxsICR7IG4gfWApKSxcbiAqICAgICBzaGFyZWQkLnBpcGUoZmlsdGVyKG4gPT4gbiAlIDIgPT09IDApLCBtYXAobiA9PiBgZXZlbiAkeyBuIH1gKSksXG4gKiAgICAgc2hhcmVkJC5waXBlKGZpbHRlcihuID0+IG4gJSAyID09PSAxKSwgbWFwKG4gPT4gYG9kZCAkeyBuIH1gKSlcbiAqICAgKSlcbiAqIClcbiAqIC5zdWJzY3JpYmUoY29uc29sZS5sb2cpO1xuICpcbiAqIC8vIEV4cGVjdGVkIG91dHB1dDogKG5vdGljZSBvbmx5IG9uZSBzdWJzY3JpcHRpb24pXG4gKiAnc3Vic2NyaXB0aW9uIHN0YXJ0ZWQnXG4gKiAnc291cmNlIGVtaXR0ZWQgMSdcbiAqICdhbGwgMSdcbiAqICdvZGQgMSdcbiAqICdzb3VyY2UgZW1pdHRlZCAyJ1xuICogJ2FsbCAyJ1xuICogJ2V2ZW4gMidcbiAqICdzb3VyY2UgZW1pdHRlZCAzJ1xuICogJ2FsbCAzJ1xuICogJ29kZCAzJ1xuICogJ3NvdXJjZSBlbWl0dGVkIDQnXG4gKiAnYWxsIDQnXG4gKiAnZXZlbiA0J1xuICogJ3NvdXJjZSBlbWl0dGVkIDUnXG4gKiAnYWxsIDUnXG4gKiAnb2RkIDUnXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2VsZWN0b3IgQSBmdW5jdGlvbiB1c2VkIHRvIHNldCB1cCB0aGUgbXVsdGljYXN0LiBHaXZlcyB5b3UgYSBtdWx0aWNhc3Qgb2JzZXJ2YWJsZVxuICogdGhhdCBpcyBub3QgeWV0IGNvbm5lY3RlZC4gV2l0aCB0aGF0LCB5b3UncmUgZXhwZWN0ZWQgdG8gY3JlYXRlIGFuZCByZXR1cm5cbiAqIGFuZCBPYnNlcnZhYmxlLCB0aGF0IHdoZW4gc3Vic2NyaWJlZCB0bywgd2lsbCB1dGlsaXplIHRoZSBtdWx0aWNhc3Qgb2JzZXJ2YWJsZS5cbiAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgLS0gYW5kIGl0cyByZXR1cm4gdmFsdWUgc3Vic2NyaWJlZCB0byAtLSB0aGVcbiAqIG9wZXJhdG9yIHdpbGwgc3Vic2NyaWJlIHRvIHRoZSBzb3VyY2UsIGFuZCB0aGUgY29ubmVjdGlvbiB3aWxsIGJlIG1hZGUuXG4gKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgYGNvbm5lY3RgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdDxULCBPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PHVua25vd24+PihcbiAgc2VsZWN0b3I6IChzaGFyZWQ6IE9ic2VydmFibGU8VD4pID0+IE8sXG4gIGNvbmZpZzogQ29ubmVjdENvbmZpZzxUPiA9IERFRkFVTFRfQ09ORklHXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIE9ic2VydmVkVmFsdWVPZjxPPj4ge1xuICBjb25zdCB7IGNvbm5lY3RvciB9ID0gY29uZmlnO1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgY29uc3Qgc3ViamVjdCA9IGNvbm5lY3RvcigpO1xuICAgIGlubmVyRnJvbShzZWxlY3Rvcihmcm9tU3Vic2NyaWJhYmxlKHN1YmplY3QpKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIHN1YnNjcmliZXIuYWRkKHNvdXJjZS5zdWJzY3JpYmUoc3ViamVjdCkpO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgcmVkdWNlIH0gZnJvbSAnLi9yZWR1Y2UnO1xuXG4vKipcbiAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGVtaXNzaW9ucyBvbiB0aGUgc291cmNlIGFuZCBlbWl0cyB0aGF0IG51bWJlciB3aGVuIHRoZVxuICogc291cmNlIGNvbXBsZXRlcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+VGVsbHMgaG93IG1hbnkgdmFsdWVzIHdlcmUgZW1pdHRlZCwgd2hlbiB0aGUgc291cmNlXG4gKiBjb21wbGV0ZXMuPC9zcGFuPlxuICpcbiAqICFbXShjb3VudC5wbmcpXG4gKlxuICogYGNvdW50YCB0cmFuc2Zvcm1zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB2YWx1ZXMgaW50byBhbiBPYnNlcnZhYmxlIHRoYXRcbiAqIGVtaXRzIGEgc2luZ2xlIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZVxuICogc291cmNlIE9ic2VydmFibGUuIElmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0ZXJtaW5hdGVzIHdpdGggYW4gZXJyb3IsIGBjb3VudGBcbiAqIHdpbGwgcGFzcyB0aGlzIGVycm9yIG5vdGlmaWNhdGlvbiBhbG9uZyB3aXRob3V0IGVtaXR0aW5nIGEgdmFsdWUgZmlyc3QuIElmXG4gKiB0aGUgc291cmNlIE9ic2VydmFibGUgZG9lcyBub3QgdGVybWluYXRlIGF0IGFsbCwgYGNvdW50YCB3aWxsIG5laXRoZXIgZW1pdFxuICogYSB2YWx1ZSBub3IgdGVybWluYXRlLiBUaGlzIG9wZXJhdG9yIHRha2VzIGFuIG9wdGlvbmFsIGBwcmVkaWNhdGVgIGZ1bmN0aW9uXG4gKiBhcyBhcmd1bWVudCwgaW4gd2hpY2ggY2FzZSB0aGUgb3V0cHV0IGVtaXNzaW9uIHdpbGwgcmVwcmVzZW50IHRoZSBudW1iZXIgb2ZcbiAqIHNvdXJjZSB2YWx1ZXMgdGhhdCBtYXRjaGVkIGB0cnVlYCB3aXRoIHRoZSBgcHJlZGljYXRlYC5cbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIENvdW50cyBob3cgbWFueSBzZWNvbmRzIGhhdmUgcGFzc2VkIGJlZm9yZSB0aGUgZmlyc3QgY2xpY2sgaGFwcGVuZWRcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIGZyb21FdmVudCwgdGFrZVVudGlsLCBjb3VudCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHNlY29uZHMgPSBpbnRlcnZhbCgxMDAwKTtcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCBzZWNvbmRzQmVmb3JlQ2xpY2sgPSBzZWNvbmRzLnBpcGUodGFrZVVudGlsKGNsaWNrcykpO1xuICogY29uc3QgcmVzdWx0ID0gc2Vjb25kc0JlZm9yZUNsaWNrLnBpcGUoY291bnQoKSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogQ291bnRzIGhvdyBtYW55IG9kZCBudW1iZXJzIGFyZSB0aGVyZSBiZXR3ZWVuIDEgYW5kIDdcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmFuZ2UsIGNvdW50IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgbnVtYmVycyA9IHJhbmdlKDEsIDcpO1xuICogY29uc3QgcmVzdWx0ID0gbnVtYmVycy5waXBlKGNvdW50KGkgPT4gaSAlIDIgPT09IDEpKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiAvLyBSZXN1bHRzIGluOlxuICogLy8gNFxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgbWF4fVxuICogQHNlZSB7QGxpbmsgbWlufVxuICogQHNlZSB7QGxpbmsgcmVkdWNlfVxuICpcbiAqIEBwYXJhbSBwcmVkaWNhdGUgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgdG8gYW5hbHl6ZSB0aGUgdmFsdWUgYW5kIHRoZSBpbmRleCBhbmRcbiAqIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBpbmNyZW1lbnQgdGhlIGNvdW50LiBSZXR1cm4gYHRydWVgIHRvIGluY3JlbWVudCB0aGUgY291bnQsXG4gKiBhbmQgcmV0dXJuIGBmYWxzZWAgdG8ga2VlcCB0aGUgY291bnQgdGhlIHNhbWUuXG4gKiBJZiB0aGUgcHJlZGljYXRlIGlzIG5vdCBwcm92aWRlZCwgZXZlcnkgdmFsdWUgd2lsbCBiZSBjb3VudGVkLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgb25lIG51bWJlciB0aGF0XG4gKiByZXByZXNlbnRzIHRoZSBjb3VudCBvZiBlbWlzc2lvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3VudDxUPihwcmVkaWNhdGU/OiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIG51bWJlcj4ge1xuICByZXR1cm4gcmVkdWNlKCh0b3RhbCwgdmFsdWUsIGkpID0+ICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh2YWx1ZSwgaSkgPyB0b3RhbCArIDEgOiB0b3RhbCksIDApO1xufVxuIiwgImltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZUlucHV0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcblxuLyoqXG4gKiBFbWl0cyBhIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBvbmx5IGFmdGVyIGEgcGFydGljdWxhciB0aW1lIHNwYW5cbiAqIGRldGVybWluZWQgYnkgYW5vdGhlciBPYnNlcnZhYmxlIGhhcyBwYXNzZWQgd2l0aG91dCBhbm90aGVyIHNvdXJjZSBlbWlzc2lvbi5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBkZWJvdW5jZVRpbWV9LCBidXQgdGhlIHRpbWUgc3BhbiBvZlxuICogZW1pc3Npb24gc2lsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5IGEgc2Vjb25kIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqICFbXShkZWJvdW5jZS5zdmcpXG4gKlxuICogYGRlYm91bmNlYCBkZWxheXMgbm90aWZpY2F0aW9ucyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgYnV0IGRyb3BzIHByZXZpb3VzXG4gKiBwZW5kaW5nIGRlbGF5ZWQgZW1pc3Npb25zIGlmIGEgbmV3IG5vdGlmaWNhdGlvbiBhcnJpdmVzIG9uIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIFRoaXMgb3BlcmF0b3Iga2VlcHMgdHJhY2sgb2YgdGhlIG1vc3QgcmVjZW50IG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUsIGFuZCBzcGF3bnMgYSBkdXJhdGlvbiBPYnNlcnZhYmxlIGJ5IGNhbGxpbmcgdGhlXG4gKiBgZHVyYXRpb25TZWxlY3RvcmAgZnVuY3Rpb24uIFRoZSBub3RpZmljYXRpb24gaXMgZW1pdHRlZCBvbmx5IHdoZW4gdGhlIGR1cmF0aW9uXG4gKiBPYnNlcnZhYmxlIGVtaXRzIGEgbmV4dCBub3RpZmljYXRpb24sIGFuZCBpZiBubyBvdGhlciBub3RpZmljYXRpb24gd2FzIGVtaXR0ZWQgb25cbiAqIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBzaW5jZSB0aGUgZHVyYXRpb24gT2JzZXJ2YWJsZSB3YXMgc3Bhd25lZC4gSWYgYSBuZXdcbiAqIG5vdGlmaWNhdGlvbiBhcHBlYXJzIGJlZm9yZSB0aGUgZHVyYXRpb24gT2JzZXJ2YWJsZSBlbWl0cywgdGhlIHByZXZpb3VzIG5vdGlmaWNhdGlvbiB3aWxsXG4gKiBub3QgYmUgZW1pdHRlZCBhbmQgYSBuZXcgZHVyYXRpb24gaXMgc2NoZWR1bGVkIGZyb20gYGR1cmF0aW9uU2VsZWN0b3JgIGlzIHNjaGVkdWxlZC5cbiAqIElmIHRoZSBjb21wbGV0aW5nIGV2ZW50IGhhcHBlbnMgZHVyaW5nIHRoZSBzY2hlZHVsZWQgZHVyYXRpb24gdGhlIGxhc3QgY2FjaGVkIG5vdGlmaWNhdGlvblxuICogaXMgZW1pdHRlZCBiZWZvcmUgdGhlIGNvbXBsZXRpb24gZXZlbnQgaXMgZm9yd2FyZGVkIHRvIHRoZSBvdXRwdXQgb2JzZXJ2YWJsZS5cbiAqIElmIHRoZSBlcnJvciBldmVudCBoYXBwZW5zIGR1cmluZyB0aGUgc2NoZWR1bGVkIGR1cmF0aW9uIG9yIGFmdGVyIGl0IG9ubHkgdGhlIGVycm9yIGV2ZW50IGlzXG4gKiBmb3J3YXJkZWQgdG8gdGhlIG91dHB1dCBvYnNlcnZhYmxlLiBUaGUgY2FjaGUgbm90aWZpY2F0aW9uIGlzIG5vdCBlbWl0dGVkIGluIHRoaXMgY2FzZS5cbiAqXG4gKiBMaWtlIHtAbGluayBkZWJvdW5jZVRpbWV9LCB0aGlzIGlzIGEgcmF0ZS1saW1pdGluZyBvcGVyYXRvciwgYW5kIGFsc28gYVxuICogZGVsYXktbGlrZSBvcGVyYXRvciBzaW5jZSBvdXRwdXQgZW1pc3Npb25zIGRvIG5vdCBuZWNlc3NhcmlseSBvY2N1ciBhdCB0aGVcbiAqIHNhbWUgdGltZSBhcyB0aGV5IGRpZCBvbiB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIEVtaXQgdGhlIG1vc3QgcmVjZW50IGNsaWNrIGFmdGVyIGEgYnVyc3Qgb2YgY2xpY2tzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgc2NhbiwgZGVib3VuY2UsIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGNsaWNrcy5waXBlKFxuICogICBzY2FuKGkgPT4gKytpLCAxKSxcbiAqICAgZGVib3VuY2UoaSA9PiBpbnRlcnZhbCgyMDAgKiBpKSlcbiAqICk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgYXVkaXR9XG4gKiBAc2VlIHtAbGluayBhdWRpdFRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZVRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWxheX1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZX1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZVRpbWV9XG4gKiBAc2VlIHtAbGluayB0aHJvdHRsZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlVGltZX1cbiAqXG4gKiBAcGFyYW0gZHVyYXRpb25TZWxlY3RvciBBIGZ1bmN0aW9uXG4gKiB0aGF0IHJlY2VpdmVzIGEgdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUsIGZvciBjb21wdXRpbmcgdGhlIHRpbWVvdXRcbiAqIGR1cmF0aW9uIGZvciBlYWNoIHNvdXJjZSB2YWx1ZSwgcmV0dXJuZWQgYXMgYW4gT2JzZXJ2YWJsZSBvciBhIFByb21pc2UuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBkZWxheXMgdGhlIGVtaXNzaW9ucyBvZlxuICogdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGJ5IHRoZSBzcGVjaWZpZWQgZHVyYXRpb24gT2JzZXJ2YWJsZSByZXR1cm5lZCBieVxuICogYGR1cmF0aW9uU2VsZWN0b3JgLCBhbmQgbWF5IGRyb3Agc29tZSB2YWx1ZXMgaWYgdGhleSBvY2N1ciB0b28gZnJlcXVlbnRseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQ+KGR1cmF0aW9uU2VsZWN0b3I6ICh2YWx1ZTogVCkgPT4gT2JzZXJ2YWJsZUlucHV0PGFueT4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgbGV0IGxhc3RWYWx1ZTogVCB8IG51bGwgPSBudWxsO1xuICAgIC8vIFRoZSBzdWJzY3JpYmVyL3N1YnNjcmlwdGlvbiBmb3IgdGhlIGN1cnJlbnQgZGVib3VuY2UsIGlmIHRoZXJlIGlzIG9uZS5cbiAgICBsZXQgZHVyYXRpb25TdWJzY3JpYmVyOiBTdWJzY3JpYmVyPGFueT4gfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0IGVtaXQgPSAoKSA9PiB7XG4gICAgICAvLyBVbnN1YnNjcmliZSBhbnkgY3VycmVudCBkZWJvdW5jZSBzdWJzY3JpcHRpb24gd2UgaGF2ZSxcbiAgICAgIC8vIHdlIG9ubHkgY2FyZWQgYWJvdXQgdGhlIGZpcnN0IG5vdGlmaWNhdGlvbiBmcm9tIGl0LCBhbmQgd2VcbiAgICAgIC8vIHdhbnQgdG8gY2xlYW4gdGhhdCBzdWJzY3JpcHRpb24gdXAgYXMgc29vbiBhcyBwb3NzaWJsZS5cbiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBhIHZhbHVlISBGcmVlIHVwIG1lbW9yeSBmaXJzdCwgdGhlbiBlbWl0IHRoZSB2YWx1ZS5cbiAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBsYXN0VmFsdWUhO1xuICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAodmFsdWU6IFQpID0+IHtcbiAgICAgICAgICAvLyBDYW5jZWwgYW55IHBlbmRpbmcgZGVib3VuY2UgZHVyYXRpb24uIFdlIGRvbid0XG4gICAgICAgICAgLy8gbmVlZCB0byBudWxsIGl0IG91dCBoZXJlIHlldCB0aG8sIGJlY2F1c2Ugd2UncmUganVzdCBnb2luZ1xuICAgICAgICAgIC8vIHRvIGNyZWF0ZSBhbm90aGVyIG9uZSBpbiBhIGZldyBsaW5lcy5cbiAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIC8vIENhcHR1cmUgb3VyIGR1cmF0aW9uIHN1YnNjcmliZXIsIHNvIHdlIGNhbiB1bnN1YnNjcmliZSBpdCB3aGVuIHdlJ3JlIG5vdGlmaWVkXG4gICAgICAgICAgLy8gYW5kIHdlJ3JlIGdvaW5nIHRvIGVtaXQgdGhlIHZhbHVlLlxuICAgICAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBlbWl0LCBub29wKTtcbiAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gdGhlIGR1cmF0aW9uLlxuICAgICAgICAgIGlubmVyRnJvbShkdXJhdGlvblNlbGVjdG9yKHZhbHVlKSkuc3Vic2NyaWJlKGR1cmF0aW9uU3Vic2NyaWJlcik7XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICAvLyBTb3VyY2UgY29tcGxldGVkLlxuICAgICAgICAgIC8vIEVtaXQgYW55IHBlbmRpbmcgZGVib3VuY2VkIHZhbHVlcyB0aGVuIGNvbXBsZXRlXG4gICAgICAgICAgZW1pdCgpO1xuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUGFzcyBhbGwgZXJyb3JzIHRocm91Z2ggdG8gY29uc3VtZXJcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgLy8gRmluYWxpemF0aW9uLlxuICAgICAgICAgIGxhc3RWYWx1ZSA9IGR1cmF0aW9uU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBhc3luY1NjaGVkdWxlciB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBTY2hlZHVsZXJBY3Rpb24sIFNjaGVkdWxlckxpa2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuLyoqXG4gKiBFbWl0cyBhIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBvbmx5IGFmdGVyIGEgcGFydGljdWxhciB0aW1lIHNwYW5cbiAqIGhhcyBwYXNzZWQgd2l0aG91dCBhbm90aGVyIHNvdXJjZSBlbWlzc2lvbi5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBkZWxheX0sIGJ1dCBwYXNzZXMgb25seSB0aGUgbW9zdFxuICogcmVjZW50IG5vdGlmaWNhdGlvbiBmcm9tIGVhY2ggYnVyc3Qgb2YgZW1pc3Npb25zLjwvc3Bhbj5cbiAqXG4gKiAhW10oZGVib3VuY2VUaW1lLnBuZylcbiAqXG4gKiBgZGVib3VuY2VUaW1lYCBkZWxheXMgbm90aWZpY2F0aW9ucyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgYnV0IGRyb3BzXG4gKiBwcmV2aW91cyBwZW5kaW5nIGRlbGF5ZWQgZW1pc3Npb25zIGlmIGEgbmV3IG5vdGlmaWNhdGlvbiBhcnJpdmVzIG9uIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuIFRoaXMgb3BlcmF0b3Iga2VlcHMgdHJhY2sgb2YgdGhlIG1vc3QgcmVjZW50IG5vdGlmaWNhdGlvbiBmcm9tIHRoZVxuICogc291cmNlIE9ic2VydmFibGUsIGFuZCBlbWl0cyB0aGF0IG9ubHkgd2hlbiBgZHVlVGltZWAgaGFzIHBhc3NlZFxuICogd2l0aG91dCBhbnkgb3RoZXIgbm90aWZpY2F0aW9uIGFwcGVhcmluZyBvbiB0aGUgc291cmNlIE9ic2VydmFibGUuIElmIGEgbmV3IHZhbHVlXG4gKiBhcHBlYXJzIGJlZm9yZSBgZHVlVGltZWAgc2lsZW5jZSBvY2N1cnMsIHRoZSBwcmV2aW91cyBub3RpZmljYXRpb24gd2lsbCBiZSBkcm9wcGVkXG4gKiBhbmQgd2lsbCBub3QgYmUgZW1pdHRlZCBhbmQgYSBuZXcgYGR1ZVRpbWVgIGlzIHNjaGVkdWxlZC5cbiAqIElmIHRoZSBjb21wbGV0aW5nIGV2ZW50IGhhcHBlbnMgZHVyaW5nIGBkdWVUaW1lYCB0aGUgbGFzdCBjYWNoZWQgbm90aWZpY2F0aW9uXG4gKiBpcyBlbWl0dGVkIGJlZm9yZSB0aGUgY29tcGxldGlvbiBldmVudCBpcyBmb3J3YXJkZWQgdG8gdGhlIG91dHB1dCBvYnNlcnZhYmxlLlxuICogSWYgdGhlIGVycm9yIGV2ZW50IGhhcHBlbnMgZHVyaW5nIGBkdWVUaW1lYCBvciBhZnRlciBpdCBvbmx5IHRoZSBlcnJvciBldmVudCBpc1xuICogZm9yd2FyZGVkIHRvIHRoZSBvdXRwdXQgb2JzZXJ2YWJsZS4gVGhlIGNhY2hlIG5vdGlmaWNhdGlvbiBpcyBub3QgZW1pdHRlZCBpbiB0aGlzIGNhc2UuXG4gKlxuICogVGhpcyBpcyBhIHJhdGUtbGltaXRpbmcgb3BlcmF0b3IsIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSBmb3IgbW9yZSB0aGFuIG9uZVxuICogbm90aWZpY2F0aW9uIHRvIGJlIGVtaXR0ZWQgaW4gYW55IHRpbWUgd2luZG93IG9mIGR1cmF0aW9uIGBkdWVUaW1lYCwgYnV0IGl0IGlzIGFsc29cbiAqIGEgZGVsYXktbGlrZSBvcGVyYXRvciBzaW5jZSBvdXRwdXQgZW1pc3Npb25zIGRvIG5vdCBvY2N1ciBhdCB0aGUgc2FtZSB0aW1lIGFzXG4gKiB0aGV5IGRpZCBvbiB0aGUgc291cmNlIE9ic2VydmFibGUuIE9wdGlvbmFsbHkgdGFrZXMgYSB7QGxpbmsgU2NoZWR1bGVyTGlrZX0gZm9yXG4gKiBtYW5hZ2luZyB0aW1lcnMuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIEVtaXQgdGhlIG1vc3QgcmVjZW50IGNsaWNrIGFmdGVyIGEgYnVyc3Qgb2YgY2xpY2tzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGNsaWNrcy5waXBlKGRlYm91bmNlVGltZSgxMDAwKSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgYXVkaXR9XG4gKiBAc2VlIHtAbGluayBhdWRpdFRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZX1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZX1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZVRpbWV9XG4gKiBAc2VlIHtAbGluayB0aHJvdHRsZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlVGltZX1cbiAqXG4gKiBAcGFyYW0gZHVlVGltZSBUaGUgdGltZW91dCBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgKG9yIHRoZSB0aW1lIHVuaXQgZGV0ZXJtaW5lZFxuICogaW50ZXJuYWxseSBieSB0aGUgb3B0aW9uYWwgYHNjaGVkdWxlcmApIGZvciB0aGUgd2luZG93IG9mIHRpbWUgcmVxdWlyZWQgdG8gd2FpdFxuICogZm9yIGVtaXNzaW9uIHNpbGVuY2UgYmVmb3JlIGVtaXR0aW5nIHRoZSBtb3N0IHJlY2VudCBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0gc2NoZWR1bGVyIFRoZSB7QGxpbmsgU2NoZWR1bGVyTGlrZX0gdG8gdXNlIGZvciBtYW5hZ2luZyB0aGUgdGltZXJzIHRoYXRcbiAqIGhhbmRsZSB0aGUgdGltZW91dCBmb3IgZWFjaCB2YWx1ZS5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGRlbGF5cyB0aGUgZW1pc3Npb25zIG9mXG4gKiB0aGUgc291cmNlIE9ic2VydmFibGUgYnkgdGhlIHNwZWNpZmllZCBgZHVlVGltZWAsIGFuZCBtYXkgZHJvcCBzb21lIHZhbHVlc1xuICogaWYgdGhleSBvY2N1ciB0b28gZnJlcXVlbnRseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlVGltZTxUPihkdWVUaW1lOiBudW1iZXIsIHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZSA9IGFzeW5jU2NoZWR1bGVyKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBhY3RpdmVUYXNrOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgbGFzdFZhbHVlOiBUIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGxhc3RUaW1lOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0IGVtaXQgPSAoKSA9PiB7XG4gICAgICBpZiAoYWN0aXZlVGFzaykge1xuICAgICAgICAvLyBXZSBoYXZlIGEgdmFsdWUhIEZyZWUgdXAgbWVtb3J5IGZpcnN0LCB0aGVuIGVtaXQgdGhlIHZhbHVlLlxuICAgICAgICBhY3RpdmVUYXNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGFjdGl2ZVRhc2sgPSBudWxsO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGxhc3RWYWx1ZSE7XG4gICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBlbWl0V2hlbklkbGUodGhpczogU2NoZWR1bGVyQWN0aW9uPHVua25vd24+KSB7XG4gICAgICAvLyBUaGlzIGlzIGNhbGxlZCBgZHVlVGltZWAgYWZ0ZXIgdGhlIGZpcnN0IHZhbHVlXG4gICAgICAvLyBidXQgd2UgbWlnaHQgaGF2ZSByZWNlaXZlZCBuZXcgdmFsdWVzIGR1cmluZyB0aGlzIHdpbmRvdyFcblxuICAgICAgY29uc3QgdGFyZ2V0VGltZSA9IGxhc3RUaW1lISArIGR1ZVRpbWU7XG4gICAgICBjb25zdCBub3cgPSBzY2hlZHVsZXIubm93KCk7XG4gICAgICBpZiAobm93IDwgdGFyZ2V0VGltZSkge1xuICAgICAgICAvLyBPbiB0aGF0IGNhc2UsIHJlLXNjaGVkdWxlIHRvIHRoZSBuZXcgdGFyZ2V0XG4gICAgICAgIGFjdGl2ZVRhc2sgPSB0aGlzLnNjaGVkdWxlKHVuZGVmaW5lZCwgdGFyZ2V0VGltZSAtIG5vdyk7XG4gICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVtaXQoKTtcbiAgICB9XG5cbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAodmFsdWU6IFQpID0+IHtcbiAgICAgICAgICBsYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0VGltZSA9IHNjaGVkdWxlci5ub3coKTtcblxuICAgICAgICAgIC8vIE9ubHkgc2V0IHVwIGEgdGFzayBpZiBpdCdzIG5vdCBhbHJlYWR5IHVwXG4gICAgICAgICAgaWYgKCFhY3RpdmVUYXNrKSB7XG4gICAgICAgICAgICBhY3RpdmVUYXNrID0gc2NoZWR1bGVyLnNjaGVkdWxlKGVtaXRXaGVuSWRsZSwgZHVlVGltZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChhY3RpdmVUYXNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICAvLyBTb3VyY2UgY29tcGxldGVkLlxuICAgICAgICAgIC8vIEVtaXQgYW55IHBlbmRpbmcgZGVib3VuY2VkIHZhbHVlcyB0aGVuIGNvbXBsZXRlXG4gICAgICAgICAgZW1pdCgpO1xuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUGFzcyBhbGwgZXJyb3JzIHRocm91Z2ggdG8gY29uc3VtZXIuXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIC8vIEZpbmFsaXphdGlvbi5cbiAgICAgICAgICBsYXN0VmFsdWUgPSBhY3RpdmVUYXNrID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuLyoqXG4gKiBFbWl0cyBhIGdpdmVuIHZhbHVlIGlmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBjb21wbGV0ZXMgd2l0aG91dCBlbWl0dGluZyBhbnlcbiAqIGBuZXh0YCB2YWx1ZSwgb3RoZXJ3aXNlIG1pcnJvcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JZiB0aGUgc291cmNlIE9ic2VydmFibGUgdHVybnMgb3V0IHRvIGJlIGVtcHR5LCB0aGVuXG4gKiB0aGlzIG9wZXJhdG9yIHdpbGwgZW1pdCBhIGRlZmF1bHQgdmFsdWUuPC9zcGFuPlxuICpcbiAqICFbXShkZWZhdWx0SWZFbXB0eS5wbmcpXG4gKlxuICogYGRlZmF1bHRJZkVtcHR5YCBlbWl0cyB0aGUgdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIG9yIGFcbiAqIHNwZWNpZmllZCBkZWZhdWx0IHZhbHVlIGlmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBpcyBlbXB0eSAoY29tcGxldGVzIHdpdGhvdXRcbiAqIGhhdmluZyBlbWl0dGVkIGFueSBgbmV4dGAgdmFsdWUpLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBJZiBubyBjbGlja3MgaGFwcGVuIGluIDUgc2Vjb25kcywgdGhlbiBlbWl0ICdubyBjbGlja3MnXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgdGFrZVVudGlsLCBpbnRlcnZhbCwgZGVmYXVsdElmRW1wdHkgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgY2xpY2tzQmVmb3JlRml2ZSA9IGNsaWNrcy5waXBlKHRha2VVbnRpbChpbnRlcnZhbCg1MDAwKSkpO1xuICogY29uc3QgcmVzdWx0ID0gY2xpY2tzQmVmb3JlRml2ZS5waXBlKGRlZmF1bHRJZkVtcHR5KCdubyBjbGlja3MnKSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgZW1wdHl9XG4gKiBAc2VlIHtAbGluayBsYXN0fVxuICpcbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgVGhlIGRlZmF1bHQgdmFsdWUgdXNlZCBpZiB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGlzIGVtcHR5LlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgZWl0aGVyIHRoZVxuICogc3BlY2lmaWVkIGBkZWZhdWx0VmFsdWVgIGlmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBlbWl0cyBubyBpdGVtcywgb3IgdGhlXG4gKiB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0SWZFbXB0eTxULCBSPihkZWZhdWx0VmFsdWU6IFIpOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFQgfCBSPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBsZXQgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAodmFsdWUpID0+IHtcbiAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChkZWZhdWx0VmFsdWUhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2VtcHR5JztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuXG4vKipcbiAqIEVtaXRzIG9ubHkgdGhlIGZpcnN0IGBjb3VudGAgdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5UYWtlcyB0aGUgZmlyc3QgYGNvdW50YCB2YWx1ZXMgZnJvbSB0aGUgc291cmNlLCB0aGVuXG4gKiBjb21wbGV0ZXMuPC9zcGFuPlxuICpcbiAqICFbXSh0YWtlLnBuZylcbiAqXG4gKiBgdGFrZWAgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgb25seSB0aGUgZmlyc3QgYGNvdW50YCB2YWx1ZXMgZW1pdHRlZFxuICogYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBJZiB0aGUgc291cmNlIGVtaXRzIGZld2VyIHRoYW4gYGNvdW50YCB2YWx1ZXMgdGhlblxuICogYWxsIG9mIGl0cyB2YWx1ZXMgYXJlIGVtaXR0ZWQuIEFmdGVyIHRoYXQsIGl0IGNvbXBsZXRlcywgcmVnYXJkbGVzcyBpZiB0aGVcbiAqIHNvdXJjZSBjb21wbGV0ZXMuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFRha2UgdGhlIGZpcnN0IDUgc2Vjb25kcyBvZiBhbiBpbmZpbml0ZSAxLXNlY29uZCBpbnRlcnZhbCBPYnNlcnZhYmxlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCB0YWtlIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgaW50ZXJ2YWxDb3VudCA9IGludGVydmFsKDEwMDApO1xuICogY29uc3QgdGFrZUZpdmUgPSBpbnRlcnZhbENvdW50LnBpcGUodGFrZSg1KSk7XG4gKiB0YWtlRml2ZS5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gTG9nczpcbiAqIC8vIDBcbiAqIC8vIDFcbiAqIC8vIDJcbiAqIC8vIDNcbiAqIC8vIDRcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIHRha2VMYXN0fVxuICogQHNlZSB7QGxpbmsgdGFrZVVudGlsfVxuICogQHNlZSB7QGxpbmsgdGFrZVdoaWxlfVxuICogQHNlZSB7QGxpbmsgc2tpcH1cbiAqXG4gKiBAcGFyYW0gY291bnQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGBuZXh0YCB2YWx1ZXMgdG8gZW1pdC5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIG9ubHkgdGhlIGZpcnN0XG4gKiBgY291bnRgIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgb3IgYWxsIG9mIHRoZSB2YWx1ZXMgZnJvbVxuICogdGhlIHNvdXJjZSBpZiB0aGUgc291cmNlIGVtaXRzIGZld2VyIHRoYW4gYGNvdW50YCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWtlPFQ+KGNvdW50OiBudW1iZXIpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICByZXR1cm4gY291bnQgPD0gMFxuICAgID8gLy8gSWYgd2UgYXJlIHRha2luZyBubyB2YWx1ZXMsIHRoYXQncyBlbXB0eS5cbiAgICAgICgpID0+IEVNUFRZXG4gICAgOiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICAgICAgbGV0IHNlZW4gPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgICAgIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIC8vIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHZhbHVlcyB3ZSBoYXZlIHNlZW4sXG4gICAgICAgICAgICAvLyB0aGVuIGNoZWNrIGl0IGFnYWluc3QgdGhlIGFsbG93ZWQgY291bnQgdG8gc2VlXG4gICAgICAgICAgICAvLyBpZiB3ZSBhcmUgc3RpbGwgbGV0dGluZyB2YWx1ZXMgdGhyb3VnaC5cbiAgICAgICAgICAgIGlmICgrK3NlZW4gPD0gY291bnQpIHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBtZXQgb3IgcGFzc2VkIG91ciBhbGxvd2VkIGNvdW50LFxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGNvbXBsZXRlLiBXZSBoYXZlIHRvIGRvIDw9IGhlcmUsXG4gICAgICAgICAgICAgIC8vIGJlY2F1c2UgcmUtZW50cmFudCBjb2RlIHdpbGwgaW5jcmVtZW50IGBzZWVuYCB0d2ljZS5cbiAgICAgICAgICAgICAgaWYgKGNvdW50IDw9IHNlZW4pIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWwvbm9vcCc7XG5cbi8qKlxuICogSWdub3JlcyBhbGwgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYW5kIG9ubHkgcGFzc2VzIGNhbGxzIG9mIGBjb21wbGV0ZWAgb3IgYGVycm9yYC5cbiAqXG4gKiAhW10oaWdub3JlRWxlbWVudHMucG5nKVxuICpcbiAqIFRoZSBgaWdub3JlRWxlbWVudHNgIG9wZXJhdG9yIHN1cHByZXNzZXMgYWxsIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLFxuICogYnV0IGFsbG93cyBpdHMgdGVybWluYXRpb24gbm90aWZpY2F0aW9uIChlaXRoZXIgYGVycm9yYCBvciBgY29tcGxldGVgKSB0byBwYXNzIHRocm91Z2ggdW5jaGFuZ2VkLlxuICpcbiAqIElmIHlvdSBkbyBub3QgY2FyZSBhYm91dCB0aGUgaXRlbXMgYmVpbmcgZW1pdHRlZCBieSBhbiBPYnNlcnZhYmxlLCBidXQgeW91IGRvIHdhbnQgdG8gYmUgbm90aWZpZWRcbiAqIHdoZW4gaXQgY29tcGxldGVzIG9yIHdoZW4gaXQgdGVybWluYXRlcyB3aXRoIGFuIGVycm9yLCB5b3UgY2FuIGFwcGx5IHRoZSBgaWdub3JlRWxlbWVudHNgIG9wZXJhdG9yXG4gKiB0byB0aGUgT2JzZXJ2YWJsZSwgd2hpY2ggd2lsbCBlbnN1cmUgdGhhdCBpdCB3aWxsIG5ldmVyIGNhbGwgaXRzIG9ic2VydmVyc1x1MjAxOSBgbmV4dGAgaGFuZGxlcnMuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIElnbm9yZSBhbGwgYG5leHRgIGVtaXNzaW9ucyBmcm9tIHRoZSBzb3VyY2VcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIGlnbm9yZUVsZW1lbnRzIH0gZnJvbSAncnhqcyc7XG4gKlxuICogb2YoJ3lvdScsICd0YWxraW5nJywgJ3RvJywgJ21lJylcbiAqICAgLnBpcGUoaWdub3JlRWxlbWVudHMoKSlcbiAqICAgLnN1YnNjcmliZSh7XG4gKiAgICAgbmV4dDogd29yZCA9PiBjb25zb2xlLmxvZyh3b3JkKSxcbiAqICAgICBlcnJvcjogZXJyID0+IGNvbnNvbGUubG9nKCdlcnJvcjonLCBlcnIpLFxuICogICAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZygndGhlIGVuZCcpLFxuICogICB9KTtcbiAqXG4gKiAvLyByZXN1bHQ6XG4gKiAvLyAndGhlIGVuZCdcbiAqIGBgYFxuICpcbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZW1wdHkgT2JzZXJ2YWJsZSB0aGF0IG9ubHkgY2FsbHNcbiAqIGBjb21wbGV0ZWAgb3IgYGVycm9yYCwgYmFzZWQgb24gd2hpY2ggb25lIGlzIGNhbGxlZCBieSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlRWxlbWVudHMoKTogT3BlcmF0b3JGdW5jdGlvbjx1bmtub3duLCBuZXZlcj4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgbm9vcCkpO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi9tYXAnO1xuXG4vKiogQGRlcHJlY2F0ZWQgVG8gYmUgcmVtb3ZlZCBpbiB2OS4gVXNlIHtAbGluayBtYXB9IGluc3RlYWQ6IGBtYXAoKCkgPT4gdmFsdWUpYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBUbzxSPih2YWx1ZTogUik6IE9wZXJhdG9yRnVuY3Rpb248dW5rbm93biwgUj47XG4vKipcbiAqIEBkZXByZWNhdGVkIERvIG5vdCBzcGVjaWZ5IGV4cGxpY2l0IHR5cGUgcGFyYW1ldGVycy4gU2lnbmF0dXJlcyB3aXRoIHR5cGUgcGFyYW1ldGVyc1xuICogdGhhdCBjYW5ub3QgYmUgaW5mZXJyZWQgd2lsbCBiZSByZW1vdmVkIGluIHY4LiBgbWFwVG9gIGl0c2VsZiB3aWxsIGJlIHJlbW92ZWQgaW4gdjksXG4gKiB1c2Uge0BsaW5rIG1hcH0gaW5zdGVhZDogYG1hcCgoKSA9PiB2YWx1ZSlgLlxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBUbzxULCBSPih2YWx1ZTogUik6IE9wZXJhdG9yRnVuY3Rpb248VCwgUj47XG5cbi8qKlxuICogRW1pdHMgdGhlIGdpdmVuIGNvbnN0YW50IHZhbHVlIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBldmVyeSB0aW1lIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+TGlrZSB7QGxpbmsgbWFwfSwgYnV0IGl0IG1hcHMgZXZlcnkgc291cmNlIHZhbHVlIHRvXG4gKiB0aGUgc2FtZSBvdXRwdXQgdmFsdWUgZXZlcnkgdGltZS48L3NwYW4+XG4gKlxuICogIVtdKG1hcFRvLnBuZylcbiAqXG4gKiBUYWtlcyBhIGNvbnN0YW50IGB2YWx1ZWAgYXMgYXJndW1lbnQsIGFuZCBlbWl0cyB0aGF0IHdoZW5ldmVyIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZS4gSW4gb3RoZXIgd29yZHMsIGlnbm9yZXMgdGhlIGFjdHVhbCBzb3VyY2UgdmFsdWUsXG4gKiBhbmQgc2ltcGx5IHVzZXMgdGhlIGVtaXNzaW9uIG1vbWVudCB0byBrbm93IHdoZW4gdG8gZW1pdCB0aGUgZ2l2ZW4gYHZhbHVlYC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogTWFwIGV2ZXJ5IGNsaWNrIHRvIHRoZSBzdHJpbmcgYCdIaSdgXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgbWFwVG8gfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgZ3JlZXRpbmdzID0gY2xpY2tzLnBpcGUobWFwVG8oJ0hpJykpO1xuICpcbiAqIGdyZWV0aW5ncy5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBtYXB9XG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBtYXAgZWFjaCBzb3VyY2UgdmFsdWUgdG8uXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZ2l2ZW4gYHZhbHVlYFxuICogZXZlcnkgdGltZSB0aGUgc291cmNlIE9ic2VydmFibGUgZW1pdHMuXG4gKiBAZGVwcmVjYXRlZCBUbyBiZSByZW1vdmVkIGluIHY5LiBVc2Uge0BsaW5rIG1hcH0gaW5zdGVhZDogYG1hcCgoKSA9PiB2YWx1ZSlgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwVG88Uj4odmFsdWU6IFIpOiBPcGVyYXRvckZ1bmN0aW9uPHVua25vd24sIFI+IHtcbiAgcmV0dXJuIG1hcCgoKSA9PiB2YWx1ZSk7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlSW5wdXQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBjb25jYXQgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2NvbmNhdCc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAnLi90YWtlJztcbmltcG9ydCB7IGlnbm9yZUVsZW1lbnRzIH0gZnJvbSAnLi9pZ25vcmVFbGVtZW50cyc7XG5pbXBvcnQgeyBtYXBUbyB9IGZyb20gJy4vbWFwVG8nO1xuaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICcuL21lcmdlTWFwJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcblxuLyoqIEBkZXByZWNhdGVkIFRoZSBgc3Vic2NyaXB0aW9uRGVsYXlgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguICovXG5leHBvcnQgZnVuY3Rpb24gZGVsYXlXaGVuPFQ+KFxuICBkZWxheUR1cmF0aW9uU2VsZWN0b3I6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gT2JzZXJ2YWJsZUlucHV0PGFueT4sXG4gIHN1YnNjcmlwdGlvbkRlbGF5OiBPYnNlcnZhYmxlPGFueT5cbik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPjtcbmV4cG9ydCBmdW5jdGlvbiBkZWxheVdoZW48VD4oZGVsYXlEdXJhdGlvblNlbGVjdG9yOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IE9ic2VydmFibGVJbnB1dDxhbnk+KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+O1xuXG4vKipcbiAqIERlbGF5cyB0aGUgZW1pc3Npb24gb2YgaXRlbXMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgYnkgYSBnaXZlbiB0aW1lIHNwYW5cbiAqIGRldGVybWluZWQgYnkgdGhlIGVtaXNzaW9ucyBvZiBhbm90aGVyIE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MgbGlrZSB7QGxpbmsgZGVsYXl9LCBidXQgdGhlIHRpbWUgc3BhbiBvZiB0aGVcbiAqIGRlbGF5IGR1cmF0aW9uIGlzIGRldGVybWluZWQgYnkgYSBzZWNvbmQgT2JzZXJ2YWJsZS48L3NwYW4+XG4gKlxuICogIVtdKGRlbGF5V2hlbi5wbmcpXG4gKlxuICogYGRlbGF5V2hlbmAgb3BlcmF0b3Igc2hpZnRzIGVhY2ggZW1pdHRlZCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBieVxuICogYSB0aW1lIHNwYW4gZGV0ZXJtaW5lZCBieSBhbm90aGVyIE9ic2VydmFibGUuIFdoZW4gdGhlIHNvdXJjZSBlbWl0cyBhIHZhbHVlLFxuICogdGhlIGBkZWxheUR1cmF0aW9uU2VsZWN0b3JgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBlbWl0dGVkIGZyb21cbiAqIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGBkZWxheUR1cmF0aW9uU2VsZWN0b3JgLlxuICogVGhlIGBkZWxheUR1cmF0aW9uU2VsZWN0b3JgIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYW4ge0BsaW5rIE9ic2VydmFibGVJbnB1dH0sXG4gKiB0aGF0IGlzIGludGVybmFsbHkgY29udmVydGVkIHRvIGFuIE9ic2VydmFibGUgdGhhdCBpcyBjYWxsZWQgdGhlIFwiZHVyYXRpb25cIlxuICogT2JzZXJ2YWJsZS5cbiAqXG4gKiBUaGUgc291cmNlIHZhbHVlIGlzIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlIG9ubHkgd2hlbiB0aGUgXCJkdXJhdGlvblwiXG4gKiBPYnNlcnZhYmxlIGVtaXRzICh7QGxpbmsgZ3VpZGUvZ2xvc3NhcnktYW5kLXNlbWFudGljcyNuZXh0IG5leHR9cykgYW55IHZhbHVlLlxuICogVXBvbiB0aGF0LCB0aGUgXCJkdXJhdGlvblwiIE9ic2VydmFibGUgZ2V0cyB1bnN1YnNjcmliZWQuXG4gKlxuICogQmVmb3JlIFJ4SlMgVjcsIHRoZSB7QGxpbmsgZ3VpZGUvZ2xvc3NhcnktYW5kLXNlbWFudGljcyNjb21wbGV0ZSBjb21wbGV0aW9ufVxuICogb2YgdGhlIFwiZHVyYXRpb25cIiBPYnNlcnZhYmxlIHdvdWxkIGhhdmUgYmVlbiB0cmlnZ2VyaW5nIHRoZSBlbWlzc2lvbiBvZiB0aGVcbiAqIHNvdXJjZSB2YWx1ZSB0byB0aGUgb3V0cHV0IE9ic2VydmFibGUsIGJ1dCB3aXRoIFJ4SlMgVjcsIHRoaXMgaXMgbm90IHRoZSBjYXNlXG4gKiBhbnltb3JlLlxuICpcbiAqIE9ubHkgbmV4dCBub3RpZmljYXRpb25zIChmcm9tIHRoZSBcImR1cmF0aW9uXCIgT2JzZXJ2YWJsZSkgdHJpZ2dlciB2YWx1ZXMgZnJvbVxuICogdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRvIGJlIHBhc3NlZCB0byB0aGUgb3V0cHV0IE9ic2VydmFibGUuIElmIHRoZSBcImR1cmF0aW9uXCJcbiAqIE9ic2VydmFibGUgb25seSBlbWl0cyB0aGUgY29tcGxldGUgbm90aWZpY2F0aW9uICh3aXRob3V0IG5leHQpLCB0aGUgdmFsdWVcbiAqIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdpbGwgbmV2ZXIgZ2V0IHRvIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSAtIGl0XG4gKiB3aWxsIGJlIHN3YWxsb3dlZC4gSWYgdGhlIFwiZHVyYXRpb25cIiBPYnNlcnZhYmxlIGVycm9ycywgdGhlIGVycm9yIHdpbGwgYmVcbiAqIHByb3BhZ2F0ZWQgdG8gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIE9wdGlvbmFsbHksIGBkZWxheVdoZW5gIHRha2VzIGEgc2Vjb25kIGFyZ3VtZW50LCBgc3Vic2NyaXB0aW9uRGVsYXlgLCB3aGljaFxuICogaXMgYW4gT2JzZXJ2YWJsZS4gV2hlbiBgc3Vic2NyaXB0aW9uRGVsYXlgIGVtaXRzIGl0cyBmaXJzdCB2YWx1ZSBvclxuICogY29tcGxldGVzLCB0aGUgc291cmNlIE9ic2VydmFibGUgaXMgc3Vic2NyaWJlZCB0byBhbmQgc3RhcnRzIGJlaGF2aW5nIGxpa2VcbiAqIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLiBJZiBgc3Vic2NyaXB0aW9uRGVsYXlgIGlzIG5vdCBwcm92aWRlZCxcbiAqIGBkZWxheVdoZW5gIHdpbGwgc3Vic2NyaWJlIHRvIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhcyBzb29uIGFzIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUgaXMgc3Vic2NyaWJlZC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogRGVsYXkgZWFjaCBjbGljayBieSBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSwgYmV0d2VlbiAwIGFuZCA1IHNlY29uZHNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBkZWxheVdoZW4sIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IGRlbGF5ZWRDbGlja3MgPSBjbGlja3MucGlwZShcbiAqICAgZGVsYXlXaGVuKCgpID0+IGludGVydmFsKE1hdGgucmFuZG9tKCkgKiA1MDAwKSlcbiAqICk7XG4gKiBkZWxheWVkQ2xpY2tzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGRlbGF5fVxuICogQHNlZSB7QGxpbmsgdGhyb3R0bGV9XG4gKiBAc2VlIHtAbGluayB0aHJvdHRsZVRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZX1cbiAqIEBzZWUge0BsaW5rIGRlYm91bmNlVGltZX1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZX1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZVRpbWV9XG4gKiBAc2VlIHtAbGluayBhdWRpdH1cbiAqIEBzZWUge0BsaW5rIGF1ZGl0VGltZX1cbiAqXG4gKiBAcGFyYW0gZGVsYXlEdXJhdGlvblNlbGVjdG9yIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGBPYnNlcnZhYmxlSW5wdXRgIGZvclxuICogZWFjaCBgdmFsdWVgIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCB3aGljaCBpcyB0aGVuIHVzZWQgdG8gZGVsYXkgdGhlXG4gKiBlbWlzc2lvbiBvZiB0aGF0IGB2YWx1ZWAgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlIHVudGlsIHRoZSBgT2JzZXJ2YWJsZUlucHV0YFxuICogcmV0dXJuZWQgZnJvbSB0aGlzIGZ1bmN0aW9uIGVtaXRzIGEgbmV4dCB2YWx1ZS4gV2hlbiBjYWxsZWQsIGJlc2lkZSBgdmFsdWVgLFxuICogdGhpcyBmdW5jdGlvbiByZWNlaXZlcyBhIHplcm8tYmFzZWQgYGluZGV4YCBvZiB0aGUgZW1pc3Npb24gb3JkZXIuXG4gKiBAcGFyYW0gc3Vic2NyaXB0aW9uRGVsYXkgQW4gT2JzZXJ2YWJsZSB0aGF0IHRyaWdnZXJzIHRoZSBzdWJzY3JpcHRpb24gdG8gdGhlXG4gKiBzb3VyY2UgT2JzZXJ2YWJsZSBvbmNlIGl0IGVtaXRzIGFueSB2YWx1ZS5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGRlbGF5cyB0aGUgZW1pc3Npb25zIG9mXG4gKiB0aGUgc291cmNlIE9ic2VydmFibGUgYnkgYW4gYW1vdW50IG9mIHRpbWUgc3BlY2lmaWVkIGJ5IHRoZSBPYnNlcnZhYmxlXG4gKiByZXR1cm5lZCBieSBgZGVsYXlEdXJhdGlvblNlbGVjdG9yYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5V2hlbjxUPihcbiAgZGVsYXlEdXJhdGlvblNlbGVjdG9yOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IE9ic2VydmFibGVJbnB1dDxhbnk+LFxuICBzdWJzY3JpcHRpb25EZWxheT86IE9ic2VydmFibGU8YW55PlxuKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgaWYgKHN1YnNjcmlwdGlvbkRlbGF5KSB7XG4gICAgLy8gREVQUkVDQVRFRCBQQVRIXG4gICAgcmV0dXJuIChzb3VyY2U6IE9ic2VydmFibGU8VD4pID0+XG4gICAgICBjb25jYXQoc3Vic2NyaXB0aW9uRGVsYXkucGlwZSh0YWtlKDEpLCBpZ25vcmVFbGVtZW50cygpKSwgc291cmNlLnBpcGUoZGVsYXlXaGVuKGRlbGF5RHVyYXRpb25TZWxlY3RvcikpKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZU1hcCgodmFsdWUsIGluZGV4KSA9PiBpbm5lckZyb20oZGVsYXlEdXJhdGlvblNlbGVjdG9yKHZhbHVlLCBpbmRleCkpLnBpcGUodGFrZSgxKSwgbWFwVG8odmFsdWUpKSk7XG59XG4iLCAiaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXN5bmMnO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBTY2hlZHVsZXJMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZGVsYXlXaGVuIH0gZnJvbSAnLi9kZWxheVdoZW4nO1xuaW1wb3J0IHsgdGltZXIgfSBmcm9tICcuLi9vYnNlcnZhYmxlL3RpbWVyJztcblxuLyoqXG4gKiBEZWxheXMgdGhlIGVtaXNzaW9uIG9mIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGJ5IGEgZ2l2ZW4gdGltZW91dCBvclxuICogdW50aWwgYSBnaXZlbiBEYXRlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5UaW1lIHNoaWZ0cyBlYWNoIGl0ZW0gYnkgc29tZSBzcGVjaWZpZWQgYW1vdW50IG9mXG4gKiBtaWxsaXNlY29uZHMuPC9zcGFuPlxuICpcbiAqICFbXShkZWxheS5zdmcpXG4gKlxuICogSWYgdGhlIGRlbGF5IGFyZ3VtZW50IGlzIGEgTnVtYmVyLCB0aGlzIG9wZXJhdG9yIHRpbWUgc2hpZnRzIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgYnkgdGhhdCBhbW91bnQgb2YgdGltZSBleHByZXNzZWQgaW4gbWlsbGlzZWNvbmRzLiBUaGUgcmVsYXRpdmVcbiAqIHRpbWUgaW50ZXJ2YWxzIGJldHdlZW4gdGhlIHZhbHVlcyBhcmUgcHJlc2VydmVkLlxuICpcbiAqIElmIHRoZSBkZWxheSBhcmd1bWVudCBpcyBhIERhdGUsIHRoaXMgb3BlcmF0b3IgdGltZSBzaGlmdHMgdGhlIHN0YXJ0IG9mIHRoZVxuICogT2JzZXJ2YWJsZSBleGVjdXRpb24gdW50aWwgdGhlIGdpdmVuIGRhdGUgb2NjdXJzLlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogRGVsYXkgZWFjaCBjbGljayBieSBvbmUgc2Vjb25kXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgZGVsYXkgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgZGVsYXllZENsaWNrcyA9IGNsaWNrcy5waXBlKGRlbGF5KDEwMDApKTsgLy8gZWFjaCBjbGljayBlbWl0dGVkIGFmdGVyIDEgc2Vjb25kXG4gKiBkZWxheWVkQ2xpY2tzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIERlbGF5IGFsbCBjbGlja3MgdW50aWwgYSBmdXR1cmUgZGF0ZSBoYXBwZW5zXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgZGVsYXkgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCdNYXJjaCAxNSwgMjA1MCAxMjowMDowMCcpOyAvLyBpbiB0aGUgZnV0dXJlXG4gKiBjb25zdCBkZWxheWVkQ2xpY2tzID0gY2xpY2tzLnBpcGUoZGVsYXkoZGF0ZSkpOyAvLyBjbGljayBlbWl0dGVkIG9ubHkgYWZ0ZXIgdGhhdCBkYXRlXG4gKiBkZWxheWVkQ2xpY2tzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGRlbGF5V2hlbn1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlfVxuICogQHNlZSB7QGxpbmsgdGhyb3R0bGVUaW1lfVxuICogQHNlZSB7QGxpbmsgZGVib3VuY2V9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZVRpbWV9XG4gKiBAc2VlIHtAbGluayBzYW1wbGV9XG4gKiBAc2VlIHtAbGluayBzYW1wbGVUaW1lfVxuICogQHNlZSB7QGxpbmsgYXVkaXR9XG4gKiBAc2VlIHtAbGluayBhdWRpdFRpbWV9XG4gKlxuICogQHBhcmFtIGR1ZSBUaGUgZGVsYXkgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIChhIGBudW1iZXJgKSBvciBhIGBEYXRlYCB1bnRpbFxuICogd2hpY2ggdGhlIGVtaXNzaW9uIG9mIHRoZSBzb3VyY2UgaXRlbXMgaXMgZGVsYXllZC5cbiAqIEBwYXJhbSBzY2hlZHVsZXIgVGhlIHtAbGluayBTY2hlZHVsZXJMaWtlfSB0byB1c2UgZm9yIG1hbmFnaW5nIHRoZSB0aW1lcnNcbiAqIHRoYXQgaGFuZGxlIHRoZSB0aW1lLXNoaWZ0IGZvciBlYWNoIGl0ZW0uXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBkZWxheXMgdGhlIGVtaXNzaW9ucyBvZlxuICogdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGJ5IHRoZSBzcGVjaWZpZWQgdGltZW91dCBvciBEYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsYXk8VD4oZHVlOiBudW1iZXIgfCBEYXRlLCBzY2hlZHVsZXI6IFNjaGVkdWxlckxpa2UgPSBhc3luY1NjaGVkdWxlcik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIGNvbnN0IGR1cmF0aW9uID0gdGltZXIoZHVlLCBzY2hlZHVsZXIpO1xuICByZXR1cm4gZGVsYXlXaGVuKCgpID0+IGR1cmF0aW9uKTtcbn1cbiIsICJpbXBvcnQgeyBvYnNlcnZlTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vTm90aWZpY2F0aW9uJztcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGVOb3RpZmljYXRpb24sIFZhbHVlRnJvbU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIE9ic2VydmFibGUgb2Yge0BsaW5rIE9ic2VydmFibGVOb3RpZmljYXRpb259IG9iamVjdHMgaW50byB0aGUgZW1pc3Npb25zXG4gKiB0aGF0IHRoZXkgcmVwcmVzZW50LlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5VbndyYXBzIHtAbGluayBPYnNlcnZhYmxlTm90aWZpY2F0aW9ufSBvYmplY3RzIGFzIGFjdHVhbCBgbmV4dGAsXG4gKiBgZXJyb3JgIGFuZCBgY29tcGxldGVgIGVtaXNzaW9ucy4gVGhlIG9wcG9zaXRlIG9mIHtAbGluayBtYXRlcmlhbGl6ZX0uPC9zcGFuPlxuICpcbiAqICFbXShkZW1hdGVyaWFsaXplLnBuZylcbiAqXG4gKiBgZGVtYXRlcmlhbGl6ZWAgaXMgYXNzdW1lZCB0byBvcGVyYXRlIGFuIE9ic2VydmFibGUgdGhhdCBvbmx5IGVtaXRzXG4gKiB7QGxpbmsgT2JzZXJ2YWJsZU5vdGlmaWNhdGlvbn0gb2JqZWN0cyBhcyBgbmV4dGAgZW1pc3Npb25zLCBhbmQgZG9lcyBub3QgZW1pdCBhbnlcbiAqIGBlcnJvcmAuIFN1Y2ggT2JzZXJ2YWJsZSBpcyB0aGUgb3V0cHV0IG9mIGEgYG1hdGVyaWFsaXplYCBvcGVyYXRpb24uIFRob3NlXG4gKiBub3RpZmljYXRpb25zIGFyZSB0aGVuIHVud3JhcHBlZCB1c2luZyB0aGUgbWV0YWRhdGEgdGhleSBjb250YWluLCBhbmQgZW1pdHRlZFxuICogYXMgYG5leHRgLCBgZXJyb3JgLCBhbmQgYGNvbXBsZXRlYCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKlxuICogVXNlIHRoaXMgb3BlcmF0b3IgaW4gY29uanVuY3Rpb24gd2l0aCB7QGxpbmsgbWF0ZXJpYWxpemV9LlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBDb252ZXJ0IGFuIE9ic2VydmFibGUgb2YgTm90aWZpY2F0aW9ucyB0byBhbiBhY3R1YWwgT2JzZXJ2YWJsZVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBOZXh0Tm90aWZpY2F0aW9uLCBFcnJvck5vdGlmaWNhdGlvbiwgb2YsIGRlbWF0ZXJpYWxpemUgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBub3RpZkE6IE5leHROb3RpZmljYXRpb248c3RyaW5nPiA9IHsga2luZDogJ04nLCB2YWx1ZTogJ0EnIH07XG4gKiBjb25zdCBub3RpZkI6IE5leHROb3RpZmljYXRpb248c3RyaW5nPiA9IHsga2luZDogJ04nLCB2YWx1ZTogJ0InIH07XG4gKiBjb25zdCBub3RpZkU6IEVycm9yTm90aWZpY2F0aW9uID0geyBraW5kOiAnRScsIGVycm9yOiBuZXcgVHlwZUVycm9yKCd4LnRvVXBwZXJDYXNlIGlzIG5vdCBhIGZ1bmN0aW9uJykgfTtcbiAqXG4gKiBjb25zdCBtYXRlcmlhbGl6ZWQgPSBvZihub3RpZkEsIG5vdGlmQiwgbm90aWZFKTtcbiAqXG4gKiBjb25zdCB1cHBlckNhc2UgPSBtYXRlcmlhbGl6ZWQucGlwZShkZW1hdGVyaWFsaXplKCkpO1xuICogdXBwZXJDYXNlLnN1YnNjcmliZSh7XG4gKiAgIG5leHQ6IHggPT4gY29uc29sZS5sb2coeCksXG4gKiAgIGVycm9yOiBlID0+IGNvbnNvbGUuZXJyb3IoZSlcbiAqIH0pO1xuICpcbiAqIC8vIFJlc3VsdHMgaW46XG4gKiAvLyBBXG4gKiAvLyBCXG4gKiAvLyBUeXBlRXJyb3I6IHgudG9VcHBlckNhc2UgaXMgbm90IGEgZnVuY3Rpb25cbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIG1hdGVyaWFsaXplfVxuICpcbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW1zIGFuZFxuICogbm90aWZpY2F0aW9ucyBlbWJlZGRlZCBpbiBOb3RpZmljYXRpb24gb2JqZWN0cyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZW1hdGVyaWFsaXplPE4gZXh0ZW5kcyBPYnNlcnZhYmxlTm90aWZpY2F0aW9uPGFueT4+KCk6IE9wZXJhdG9yRnVuY3Rpb248TiwgVmFsdWVGcm9tTm90aWZpY2F0aW9uPE4+PiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCAobm90aWZpY2F0aW9uKSA9PiBvYnNlcnZlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcikpKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlSW5wdXQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi91dGlsL25vb3AnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuXG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFsbCBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0aGF0IGFyZSBkaXN0aW5jdCBieSBjb21wYXJpc29uIGZyb20gcHJldmlvdXMgaXRlbXMuXG4gKlxuICogSWYgYSBga2V5U2VsZWN0b3JgIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCB0aGVuIGl0IHdpbGwgcHJvamVjdCBlYWNoIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBvYnNlcnZhYmxlIGludG8gYSBuZXcgdmFsdWUgdGhhdCBpdCB3aWxsXG4gKiBjaGVjayBmb3IgZXF1YWxpdHkgd2l0aCBwcmV2aW91c2x5IHByb2plY3RlZCB2YWx1ZXMuIElmIHRoZSBga2V5U2VsZWN0b3JgIGZ1bmN0aW9uIGlzIG5vdCBwcm92aWRlZCwgaXQgd2lsbCB1c2UgZWFjaCB2YWx1ZSBmcm9tIHRoZVxuICogc291cmNlIG9ic2VydmFibGUgZGlyZWN0bHkgd2l0aCBhbiBlcXVhbGl0eSBjaGVjayBhZ2FpbnN0IHByZXZpb3VzIHZhbHVlcy5cbiAqXG4gKiBJbiBKYXZhU2NyaXB0IHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCBgU2V0YCwgdGhpcyBvcGVyYXRvciB3aWxsIHVzZSBhIGBTZXRgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgdGhlIGRpc3RpbmN0IHZhbHVlIGNoZWNraW5nLlxuICpcbiAqIEluIG90aGVyIHJ1bnRpbWVzLCB0aGlzIG9wZXJhdG9yIHdpbGwgdXNlIGEgbWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBgU2V0YCB0aGF0IHJlbGllcyBvbiBhbiBgQXJyYXlgIGFuZCBgaW5kZXhPZmAgdW5kZXIgdGhlXG4gKiBob29kLCBzbyBwZXJmb3JtYW5jZSB3aWxsIGRlZ3JhZGUgYXMgbW9yZSB2YWx1ZXMgYXJlIGNoZWNrZWQgZm9yIGRpc3RpbmN0aW9uLiBFdmVuIGluIG5ld2VyIGJyb3dzZXJzLCBhIGxvbmctcnVubmluZyBgZGlzdGluY3RgXG4gKiB1c2UgbWlnaHQgcmVzdWx0IGluIG1lbW9yeSBsZWFrcy4gVG8gaGVscCBhbGxldmlhdGUgdGhpcyBpbiBzb21lIHNjZW5hcmlvcywgYW4gb3B0aW9uYWwgYGZsdXNoZXNgIHBhcmFtZXRlciBpcyBhbHNvIHByb3ZpZGVkIHNvXG4gKiB0aGF0IHRoZSBpbnRlcm5hbCBgU2V0YCBjYW4gYmUgXCJmbHVzaGVkXCIsIGJhc2ljYWxseSBjbGVhcmluZyBpdCBvZiB2YWx1ZXMuXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBBIHNpbXBsZSBleGFtcGxlIHdpdGggbnVtYmVyc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBvZiwgZGlzdGluY3QgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBvZigxLCAxLCAyLCAyLCAyLCAxLCAyLCAzLCA0LCAzLCAyLCAxKVxuICogICAucGlwZShkaXN0aW5jdCgpKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIE91dHB1dHNcbiAqIC8vIDFcbiAqIC8vIDJcbiAqIC8vIDNcbiAqIC8vIDRcbiAqIGBgYFxuICpcbiAqIEFuIGV4YW1wbGUgdXNpbmcgdGhlIGBrZXlTZWxlY3RvcmAgZnVuY3Rpb25cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIGRpc3RpbmN0IH0gZnJvbSAncnhqcyc7XG4gKlxuICogb2YoXG4gKiAgIHsgYWdlOiA0LCBuYW1lOiAnRm9vJ30sXG4gKiAgIHsgYWdlOiA3LCBuYW1lOiAnQmFyJ30sXG4gKiAgIHsgYWdlOiA1LCBuYW1lOiAnRm9vJ31cbiAqIClcbiAqIC5waXBlKGRpc3RpbmN0KCh7IG5hbWUgfSkgPT4gbmFtZSkpXG4gKiAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIE91dHB1dHNcbiAqIC8vIHsgYWdlOiA0LCBuYW1lOiAnRm9vJyB9XG4gKiAvLyB7IGFnZTogNywgbmFtZTogJ0JhcicgfVxuICogYGBgXG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdFVudGlsQ2hhbmdlZH1cbiAqIEBzZWUge0BsaW5rIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkfVxuICpcbiAqIEBwYXJhbSBrZXlTZWxlY3RvciBPcHRpb25hbCBgZnVuY3Rpb25gIHRvIHNlbGVjdCB3aGljaCB2YWx1ZSB5b3Ugd2FudCB0byBjaGVjayBhcyBkaXN0aW5jdC5cbiAqIEBwYXJhbSBmbHVzaGVzIE9wdGlvbmFsIGBPYnNlcnZhYmxlSW5wdXRgIGZvciBmbHVzaGluZyB0aGUgaW50ZXJuYWwgSGFzaFNldCBvZiB0aGUgb3BlcmF0b3IuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBmcm9tIHRoZVxuICogc291cmNlIE9ic2VydmFibGUgd2l0aCBkaXN0aW5jdCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXN0aW5jdDxULCBLPihrZXlTZWxlY3Rvcj86ICh2YWx1ZTogVCkgPT4gSywgZmx1c2hlcz86IE9ic2VydmFibGVJbnB1dDxhbnk+KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGNvbnN0IGRpc3RpbmN0S2V5cyA9IG5ldyBTZXQoKTtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlTZWxlY3RvciA/IGtleVNlbGVjdG9yKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICBpZiAoIWRpc3RpbmN0S2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgIGRpc3RpbmN0S2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBmbHVzaGVzICYmIGlubmVyRnJvbShmbHVzaGVzKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsICgpID0+IGRpc3RpbmN0S2V5cy5jbGVhcigpLCBub29wKSk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RpbmN0VW50aWxDaGFuZ2VkPFQ+KGNvbXBhcmF0b3I/OiAocHJldmlvdXM6IFQsIGN1cnJlbnQ6IFQpID0+IGJvb2xlYW4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD47XG5leHBvcnQgZnVuY3Rpb24gZGlzdGluY3RVbnRpbENoYW5nZWQ8VCwgSz4oXG4gIGNvbXBhcmF0b3I6IChwcmV2aW91czogSywgY3VycmVudDogSykgPT4gYm9vbGVhbixcbiAga2V5U2VsZWN0b3I6ICh2YWx1ZTogVCkgPT4gS1xuKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+O1xuXG4vKipcbiAqIFJldHVybnMgYSByZXN1bHQge0BsaW5rIE9ic2VydmFibGV9IHRoYXQgZW1pdHMgYWxsIHZhbHVlcyBwdXNoZWQgYnkgdGhlIHNvdXJjZSBvYnNlcnZhYmxlIGlmIHRoZXlcbiAqIGFyZSBkaXN0aW5jdCBpbiBjb21wYXJpc29uIHRvIHRoZSBsYXN0IHZhbHVlIHRoZSByZXN1bHQgb2JzZXJ2YWJsZSBlbWl0dGVkLlxuICpcbiAqIFdoZW4gcHJvdmlkZWQgd2l0aG91dCBwYXJhbWV0ZXJzIG9yIHdpdGggdGhlIGZpcnN0IHBhcmFtZXRlciAoYHtAbGluayBkaXN0aW5jdFVudGlsQ2hhbmdlZCNjb21wYXJhdG9yIGNvbXBhcmF0b3J9YCksXG4gKiBpdCBiZWhhdmVzIGxpa2UgdGhpczpcbiAqXG4gKiAxLiBJdCB3aWxsIGFsd2F5cyBlbWl0IHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UuXG4gKiAyLiBGb3IgYWxsIHN1YnNlcXVlbnQgdmFsdWVzIHB1c2hlZCBieSB0aGUgc291cmNlLCB0aGV5IHdpbGwgYmUgY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzbHkgZW1pdHRlZCB2YWx1ZXNcbiAqICAgIHVzaW5nIHRoZSBwcm92aWRlZCBgY29tcGFyYXRvcmAgb3IgYW4gYD09PWAgZXF1YWxpdHkgY2hlY2suXG4gKiAzLiBJZiB0aGUgdmFsdWUgcHVzaGVkIGJ5IHRoZSBzb3VyY2UgaXMgZGV0ZXJtaW5lZCB0byBiZSB1bmVxdWFsIGJ5IHRoaXMgY2hlY2ssIHRoYXQgdmFsdWUgaXMgZW1pdHRlZCBhbmRcbiAqICAgIGJlY29tZXMgdGhlIG5ldyBcInByZXZpb3VzbHkgZW1pdHRlZCB2YWx1ZVwiIGludGVybmFsbHkuXG4gKlxuICogV2hlbiB0aGUgc2Vjb25kIHBhcmFtZXRlciAoYHtAbGluayBkaXN0aW5jdFVudGlsQ2hhbmdlZCNrZXlTZWxlY3RvciBrZXlTZWxlY3Rvcn1gKSBpcyBwcm92aWRlZCwgdGhlIGJlaGF2aW9yXG4gKiBjaGFuZ2VzOlxuICpcbiAqIDEuIEl0IHdpbGwgYWx3YXlzIGVtaXQgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlIHNvdXJjZS5cbiAqIDIuIFRoZSBga2V5U2VsZWN0b3JgIHdpbGwgYmUgcnVuIGFnYWluc3QgYWxsIHZhbHVlcywgaW5jbHVkaW5nIHRoZSBmaXJzdCB2YWx1ZS5cbiAqIDMuIEZvciBhbGwgdmFsdWVzIGFmdGVyIHRoZSBmaXJzdCwgdGhlIHNlbGVjdGVkIGtleSB3aWxsIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhlIGtleSBzZWxlY3RlZCBmcm9tXG4gKiAgICB0aGUgcHJldmlvdXNseSBlbWl0dGVkIHZhbHVlIHVzaW5nIHRoZSBgY29tcGFyYXRvcmAuXG4gKiA0LiBJZiB0aGUga2V5cyBhcmUgZGV0ZXJtaW5lZCB0byBiZSB1bmVxdWFsIGJ5IHRoaXMgY2hlY2ssIHRoZSB2YWx1ZSAobm90IHRoZSBrZXkpLCBpcyBlbWl0dGVkXG4gKiAgICBhbmQgdGhlIHNlbGVjdGVkIGtleSBmcm9tIHRoYXQgdmFsdWUgaXMgc2F2ZWQgZm9yIGZ1dHVyZSBjb21wYXJpc29ucyBhZ2FpbnN0IG90aGVyIGtleXMuXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBBIHZlcnkgYmFzaWMgZXhhbXBsZSB3aXRoIG5vIGB7QGxpbmsgZGlzdGluY3RVbnRpbENoYW5nZWQjY29tcGFyYXRvciBjb21wYXJhdG9yfWAuIE5vdGUgdGhhdCBgMWAgaXMgZW1pdHRlZCBtb3JlIHRoYW4gb25jZSxcbiAqIGJlY2F1c2UgaXQncyBkaXN0aW5jdCBpbiBjb21wYXJpc29uIHRvIHRoZSBfcHJldmlvdXNseSBlbWl0dGVkXyB2YWx1ZSxcbiAqIG5vdCBpbiBjb21wYXJpc29uIHRvIF9hbGwgb3RoZXIgZW1pdHRlZCB2YWx1ZXNfLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBvZiwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBvZigxLCAxLCAxLCAyLCAyLCAyLCAxLCAxLCAzLCAzKVxuICogICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICogICAuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcbiAqIC8vIExvZ3M6IDEsIDIsIDEsIDNcbiAqIGBgYFxuICpcbiAqIFdpdGggYSBge0BsaW5rIGRpc3RpbmN0VW50aWxDaGFuZ2VkI2NvbXBhcmF0b3IgY29tcGFyYXRvcn1gLCB5b3UgY2FuIGRvIGN1c3RvbSBjb21wYXJpc29ucy4gTGV0J3Mgc2F5XG4gKiB5b3Ugb25seSB3YW50IHRvIGVtaXQgYSB2YWx1ZSB3aGVuIGFsbCBvZiBpdHMgY29tcG9uZW50cyBoYXZlXG4gKiBjaGFuZ2VkOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBvZiwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCB0b3RhbGx5RGlmZmVyZW50QnVpbGRzJCA9IG9mKFxuICogICB7IGVuZ2luZVZlcnNpb246ICcxLjEuMCcsIHRyYW5zbWlzc2lvblZlcnNpb246ICcxLjIuMCcgfSxcbiAqICAgeyBlbmdpbmVWZXJzaW9uOiAnMS4xLjAnLCB0cmFuc21pc3Npb25WZXJzaW9uOiAnMS40LjAnIH0sXG4gKiAgIHsgZW5naW5lVmVyc2lvbjogJzEuMy4wJywgdHJhbnNtaXNzaW9uVmVyc2lvbjogJzEuNC4wJyB9LFxuICogICB7IGVuZ2luZVZlcnNpb246ICcxLjMuMCcsIHRyYW5zbWlzc2lvblZlcnNpb246ICcxLjUuMCcgfSxcbiAqICAgeyBlbmdpbmVWZXJzaW9uOiAnMi4wLjAnLCB0cmFuc21pc3Npb25WZXJzaW9uOiAnMS41LjAnIH1cbiAqICkucGlwZShcbiAqICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHtcbiAqICAgICByZXR1cm4gKFxuICogICAgICAgcHJldi5lbmdpbmVWZXJzaW9uID09PSBjdXJyLmVuZ2luZVZlcnNpb24gfHxcbiAqICAgICAgIHByZXYudHJhbnNtaXNzaW9uVmVyc2lvbiA9PT0gY3Vyci50cmFuc21pc3Npb25WZXJzaW9uXG4gKiAgICAgKTtcbiAqICAgfSlcbiAqICk7XG4gKlxuICogdG90YWxseURpZmZlcmVudEJ1aWxkcyQuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8geyBlbmdpbmVWZXJzaW9uOiAnMS4xLjAnLCB0cmFuc21pc3Npb25WZXJzaW9uOiAnMS4yLjAnIH1cbiAqIC8vIHsgZW5naW5lVmVyc2lvbjogJzEuMy4wJywgdHJhbnNtaXNzaW9uVmVyc2lvbjogJzEuNC4wJyB9XG4gKiAvLyB7IGVuZ2luZVZlcnNpb246ICcyLjAuMCcsIHRyYW5zbWlzc2lvblZlcnNpb246ICcxLjUuMCcgfVxuICogYGBgXG4gKlxuICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBjdXN0b20gYHtAbGluayBkaXN0aW5jdFVudGlsQ2hhbmdlZCNjb21wYXJhdG9yIGNvbXBhcmF0b3J9YCB0byBjaGVjayB0aGF0IGVtaXR0ZWRcbiAqIGNoYW5nZXMgYXJlIG9ubHkgaW4gb25lIGRpcmVjdGlvbi4gTGV0J3Mgc2F5IHlvdSBvbmx5IHdhbnQgdG8gZ2V0XG4gKiB0aGUgbmV4dCByZWNvcmQgdGVtcGVyYXR1cmU6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHRlbXBzJCA9IG9mKDMwLCAzMSwgMjAsIDM0LCAzMywgMjksIDM1LCAyMCk7XG4gKlxuICogY29uc3QgcmVjb3JkSGlnaHMkID0gdGVtcHMkLnBpcGUoXG4gKiAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2SGlnaCwgdGVtcCkgPT4ge1xuICogICAgIC8vIElmIHRoZSBjdXJyZW50IHRlbXAgaXMgbGVzcyB0aGFuXG4gKiAgICAgLy8gb3IgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHJlY29yZCxcbiAqICAgICAvLyB0aGUgcmVjb3JkIGhhc24ndCBjaGFuZ2VkLlxuICogICAgIHJldHVybiB0ZW1wIDw9IHByZXZIaWdoO1xuICogICB9KVxuICogKTtcbiAqXG4gKiByZWNvcmRIaWdocyQuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcbiAqIC8vIExvZ3M6IDMwLCAzMSwgMzQsIDM1XG4gKiBgYGBcbiAqXG4gKiBTZWxlY3RpbmcgdXBkYXRlIGV2ZW50cyBvbmx5IHdoZW4gdGhlIGB1cGRhdGVkQnlgIGZpZWxkIHNob3dzXG4gKiB0aGUgYWNjb3VudCBjaGFuZ2VkIGhhbmRzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBvZiwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcbiAqXG4gKiAvLyBBIHN0cmVhbSBvZiB1cGRhdGVzIHRvIGEgZ2l2ZW4gYWNjb3VudFxuICogY29uc3QgYWNjb3VudFVwZGF0ZXMkID0gb2YoXG4gKiAgIHsgdXBkYXRlZEJ5OiAnYmxlc2gnLCBkYXRhOiBbXSB9LFxuICogICB7IHVwZGF0ZWRCeTogJ2JsZXNoJywgZGF0YTogW10gfSxcbiAqICAgeyB1cGRhdGVkQnk6ICduY2phbWllc29uJywgZGF0YTogW10gfSxcbiAqICAgeyB1cGRhdGVkQnk6ICduY2phbWllc29uJywgZGF0YTogW10gfSxcbiAqICAgeyB1cGRhdGVkQnk6ICdibGVzaCcsIGRhdGE6IFtdIH1cbiAqICk7XG4gKlxuICogLy8gV2Ugb25seSB3YW50IHRoZSBldmVudHMgd2hlcmUgaXQgY2hhbmdlZCBoYW5kc1xuICogY29uc3QgY2hhbmdlZEhhbmRzJCA9IGFjY291bnRVcGRhdGVzJC5waXBlKFxuICogICBkaXN0aW5jdFVudGlsQ2hhbmdlZCh1bmRlZmluZWQsIHVwZGF0ZSA9PiB1cGRhdGUudXBkYXRlZEJ5KVxuICogKTtcbiAqXG4gKiBjaGFuZ2VkSGFuZHMkLnN1YnNjcmliZShjb25zb2xlLmxvZyk7XG4gKiAvLyBMb2dzOlxuICogLy8geyB1cGRhdGVkQnk6ICdibGVzaCcsIGRhdGE6IEFycmF5WzBdIH1cbiAqIC8vIHsgdXBkYXRlZEJ5OiAnbmNqYW1pZXNvbicsIGRhdGE6IEFycmF5WzBdIH1cbiAqIC8vIHsgdXBkYXRlZEJ5OiAnYmxlc2gnLCBkYXRhOiBBcnJheVswXSB9XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdH1cbiAqIEBzZWUge0BsaW5rIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkfVxuICpcbiAqIEBwYXJhbSBjb21wYXJhdG9yIEEgZnVuY3Rpb24gdXNlZCB0byBjb21wYXJlIHRoZSBwcmV2aW91cyBhbmQgY3VycmVudCBrZXlzIGZvclxuICogZXF1YWxpdHkuIERlZmF1bHRzIHRvIGEgYD09PWAgY2hlY2suXG4gKiBAcGFyYW0ga2V5U2VsZWN0b3IgVXNlZCB0byBzZWxlY3QgYSBrZXkgdmFsdWUgdG8gYmUgcGFzc2VkIHRvIHRoZSBgY29tcGFyYXRvcmAuXG4gKlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgZnJvbSB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlIHdpdGggZGlzdGluY3QgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzdGluY3RVbnRpbENoYW5nZWQ8VCwgSz4oXG4gIGNvbXBhcmF0b3I/OiAocHJldmlvdXM6IEssIGN1cnJlbnQ6IEspID0+IGJvb2xlYW4sXG4gIGtleVNlbGVjdG9yOiAodmFsdWU6IFQpID0+IEsgPSBpZGVudGl0eSBhcyAodmFsdWU6IFQpID0+IEtcbik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIC8vIFdlJ3ZlIGJlZW4gYWxsb3dpbmcgYG51bGxgIGRvIGJlIHBhc3NlZCBhcyB0aGUgYGNvbXBhcmVgLCBzbyB3ZSBjYW4ndCBkb1xuICAvLyBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIsIGJlY2F1c2UgdGhhdCB3aWxsIG9ubHkgd29ya1xuICAvLyBmb3IgYHVuZGVmaW5lZGAuXG4gIGNvbXBhcmF0b3IgPSBjb21wYXJhdG9yID8/IGRlZmF1bHRDb21wYXJlO1xuXG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICAvLyBUaGUgcHJldmlvdXMga2V5LCB1c2VkIHRvIGNvbXBhcmUgYWdhaW5zdCBrZXlzIHNlbGVjdGVkXG4gICAgLy8gZnJvbSBuZXcgYXJyaXZhbHMgdG8gZGV0ZXJtaW5lIFwiZGlzdGluY3RpdmVuZXNzXCIuXG4gICAgbGV0IHByZXZpb3VzS2V5OiBLO1xuICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoaXMgaXMgdGhlIGZpcnN0IHZhbHVlIHdlJ3ZlIGdvdHRlbi5cbiAgICBsZXQgZmlyc3QgPSB0cnVlO1xuXG4gICAgc291cmNlLnN1YnNjcmliZShcbiAgICAgIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCAodmFsdWUpID0+IHtcbiAgICAgICAgLy8gV2UgYWx3YXlzIGNhbGwgdGhlIGtleSBzZWxlY3Rvci5cbiAgICAgICAgY29uc3QgY3VycmVudEtleSA9IGtleVNlbGVjdG9yKHZhbHVlKTtcblxuICAgICAgICAvLyBJZiBpdCdzIHRoZSBmaXJzdCB2YWx1ZSwgd2UgYWx3YXlzIGVtaXQgaXQuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgd2UgY29tcGFyZSB0aGlzIGtleSB0byB0aGUgcHJldmlvdXMga2V5LCBhbmRcbiAgICAgICAgLy8gaWYgdGhlIGNvbXBhcmVyIHJldHVybnMgZmFsc2UsIHdlIGVtaXQuXG4gICAgICAgIGlmIChmaXJzdCB8fCAhY29tcGFyYXRvciEocHJldmlvdXNLZXksIGN1cnJlbnRLZXkpKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIG91ciBzdGF0ZSAqYmVmb3JlKiB3ZSBlbWl0IHRoZSB2YWx1ZVxuICAgICAgICAgIC8vIGFzIGVtaXNzaW9uIGNhbiBiZSB0aGUgc291cmNlIG9mIHJlLWVudHJhbnQgY29kZVxuICAgICAgICAgIC8vIGluIGZ1bmN0aW9uYWwgbGlicmFyaWVzIGxpa2UgdGhpcy4gV2Ugb25seSByZWFsbHlcbiAgICAgICAgICAvLyBuZWVkIHRvIGRvIHRoaXMgaWYgaXQncyB0aGUgZmlyc3QgdmFsdWUsIG9yIGlmIHRoZVxuICAgICAgICAgIC8vIGtleSB3ZSdyZSB0cmFja2luZyBpbiBwcmV2aW91cyBuZWVkcyB0byBjaGFuZ2UuXG4gICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICBwcmV2aW91c0tleSA9IGN1cnJlbnRLZXk7XG5cbiAgICAgICAgICAvLyBFbWl0IHRoZSB2YWx1ZSFcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyZShhOiBhbnksIGI6IGFueSkge1xuICByZXR1cm4gYSA9PT0gYjtcbn1cbiIsICJpbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJy4vZGlzdGluY3RVbnRpbENoYW5nZWQnO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGluY3RVbnRpbEtleUNoYW5nZWQ8VD4oa2V5OiBrZXlvZiBUKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEssIGNvbXBhcmU6ICh4OiBUW0tdLCB5OiBUW0tdKSA9PiBib29sZWFuKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+O1xuXG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFsbCBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0aGF0XG4gKiBhcmUgZGlzdGluY3QgYnkgY29tcGFyaXNvbiBmcm9tIHRoZSBwcmV2aW91cyBpdGVtLCB1c2luZyBhIHByb3BlcnR5IGFjY2Vzc2VkIGJ5XG4gKiB1c2luZyB0aGUga2V5IHByb3ZpZGVkIHRvIGNoZWNrIGlmIHRoZSB0d28gaXRlbXMgYXJlIGRpc3RpbmN0LlxuICpcbiAqIElmIGEgY29tcGFyYXRvciBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBpdGVtIHRvXG4gKiB0ZXN0IGZvciB3aGV0aGVyIHRoYXQgdmFsdWUgc2hvdWxkIGJlIGVtaXR0ZWQgb3Igbm90LlxuICpcbiAqIElmIGEgY29tcGFyYXRvciBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQsIGFuIGVxdWFsaXR5IGNoZWNrIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIEFuIGV4YW1wbGUgY29tcGFyaW5nIHRoZSBuYW1lIG9mIHBlcnNvbnNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkIH0gZnJvbSAncnhqcyc7XG4gKlxuICogb2YoXG4gKiAgIHsgYWdlOiA0LCBuYW1lOiAnRm9vJyB9LFxuICogICB7IGFnZTogNywgbmFtZTogJ0JhcicgfSxcbiAqICAgeyBhZ2U6IDUsIG5hbWU6ICdGb28nIH0sXG4gKiAgIHsgYWdlOiA2LCBuYW1lOiAnRm9vJyB9XG4gKiApLnBpcGUoXG4gKiAgIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKCduYW1lJylcbiAqIClcbiAqIC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gZGlzcGxheXM6XG4gKiAvLyB7IGFnZTogNCwgbmFtZTogJ0ZvbycgfVxuICogLy8geyBhZ2U6IDcsIG5hbWU6ICdCYXInIH1cbiAqIC8vIHsgYWdlOiA1LCBuYW1lOiAnRm9vJyB9XG4gKiBgYGBcbiAqXG4gKiBBbiBleGFtcGxlIGNvbXBhcmluZyB0aGUgZmlyc3QgbGV0dGVycyBvZiB0aGUgbmFtZVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBvZiwgZGlzdGluY3RVbnRpbEtleUNoYW5nZWQgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBvZihcbiAqICAgeyBhZ2U6IDQsIG5hbWU6ICdGb28xJyB9LFxuICogICB7IGFnZTogNywgbmFtZTogJ0JhcicgfSxcbiAqICAgeyBhZ2U6IDUsIG5hbWU6ICdGb28yJyB9LFxuICogICB7IGFnZTogNiwgbmFtZTogJ0ZvbzMnIH1cbiAqICkucGlwZShcbiAqICAgZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoJ25hbWUnLCAoeCwgeSkgPT4geC5zdWJzdHJpbmcoMCwgMykgPT09IHkuc3Vic3RyaW5nKDAsIDMpKVxuICogKVxuICogLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBkaXNwbGF5czpcbiAqIC8vIHsgYWdlOiA0LCBuYW1lOiAnRm9vMScgfVxuICogLy8geyBhZ2U6IDcsIG5hbWU6ICdCYXInIH1cbiAqIC8vIHsgYWdlOiA1LCBuYW1lOiAnRm9vMicgfVxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgZGlzdGluY3R9XG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdFVudGlsQ2hhbmdlZH1cbiAqXG4gKiBAcGFyYW0ga2V5IFN0cmluZyBrZXkgZm9yIG9iamVjdCBwcm9wZXJ0eSBsb29rdXAgb24gZWFjaCBpdGVtLlxuICogQHBhcmFtIGNvbXBhcmUgT3B0aW9uYWwgY29tcGFyaXNvbiBmdW5jdGlvbiBjYWxsZWQgdG8gdGVzdCBpZiBhbiBpdGVtIGlzIGRpc3RpbmN0XG4gKiBmcm9tIHRoZSBwcmV2aW91cyBpdGVtIGluIHRoZSBzb3VyY2UuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgd2l0aCBkaXN0aW5jdCB2YWx1ZXMgYmFzZWQgb24gdGhlIGtleSBzcGVjaWZpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZDxULCBLIGV4dGVuZHMga2V5b2YgVD4oXG4gIGtleTogSyxcbiAgY29tcGFyZT86ICh4OiBUW0tdLCB5OiBUW0tdKSA9PiBib29sZWFuXG4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICByZXR1cm4gZGlzdGluY3RVbnRpbENoYW5nZWQoKHg6IFQsIHk6IFQpID0+IChjb21wYXJlID8gY29tcGFyZSh4W2tleV0sIHlba2V5XSkgOiB4W2tleV0gPT09IHlba2V5XSkpO1xufVxuIiwgImltcG9ydCB7IEVtcHR5RXJyb3IgfSBmcm9tICcuLi91dGlsL0VtcHR5RXJyb3InO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5cbi8qKlxuICogSWYgdGhlIHNvdXJjZSBvYnNlcnZhYmxlIGNvbXBsZXRlcyB3aXRob3V0IGVtaXR0aW5nIGEgdmFsdWUsIGl0IHdpbGwgZW1pdFxuICogYW4gZXJyb3IuIFRoZSBlcnJvciB3aWxsIGJlIGNyZWF0ZWQgYXQgdGhhdCB0aW1lIGJ5IHRoZSBvcHRpb25hbFxuICogYGVycm9yRmFjdG9yeWAgYXJndW1lbnQsIG90aGVyd2lzZSwgdGhlIGVycm9yIHdpbGwgYmUge0BsaW5rIEVtcHR5RXJyb3J9LlxuICpcbiAqICFbXSh0aHJvd0lmRW1wdHkucG5nKVxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBUaHJvdyBhbiBlcnJvciBpZiB0aGUgZG9jdW1lbnQgd2Fzbid0IGNsaWNrZWQgd2l0aGluIDEgc2Vjb25kXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgdGFrZVVudGlsLCB0aW1lciwgdGhyb3dJZkVtcHR5IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2skID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqXG4gKiBjbGljayQucGlwZShcbiAqICAgdGFrZVVudGlsKHRpbWVyKDEwMDApKSxcbiAqICAgdGhyb3dJZkVtcHR5KCgpID0+IG5ldyBFcnJvcignVGhlIGRvY3VtZW50IHdhcyBub3QgY2xpY2tlZCB3aXRoaW4gMSBzZWNvbmQnKSlcbiAqIClcbiAqIC5zdWJzY3JpYmUoe1xuICogICBuZXh0KCkge1xuICogICAgY29uc29sZS5sb2coJ1RoZSBkb2N1bWVudCB3YXMgY2xpY2tlZCcpO1xuICogICB9LFxuICogICBlcnJvcihlcnIpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGVyci5tZXNzYWdlKTtcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZXJyb3JGYWN0b3J5IEEgZmFjdG9yeSBmdW5jdGlvbiBjYWxsZWQgdG8gcHJvZHVjZSB0aGVcbiAqIGVycm9yIHRvIGJlIHRocm93biB3aGVuIHRoZSBzb3VyY2Ugb2JzZXJ2YWJsZSBjb21wbGV0ZXMgd2l0aG91dCBlbWl0dGluZyBhXG4gKiB2YWx1ZS5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHRocm93cyBhbiBlcnJvciBpZiB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlIGNvbXBsZXRlZCB3aXRob3V0IGVtaXR0aW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dJZkVtcHR5PFQ+KGVycm9yRmFjdG9yeTogKCkgPT4gYW55ID0gZGVmYXVsdEVycm9yRmFjdG9yeSk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBsZXQgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAodmFsdWUpID0+IHtcbiAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gKGhhc1ZhbHVlID8gc3Vic2NyaWJlci5jb21wbGV0ZSgpIDogc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSkpXG4gICAgICApXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckZhY3RvcnkoKSB7XG4gIHJldHVybiBuZXcgRW1wdHlFcnJvcigpO1xufVxuIiwgImltcG9ydCB7IEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yIH0gZnJvbSAnLi4vdXRpbC9Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnLi9maWx0ZXInO1xuaW1wb3J0IHsgdGhyb3dJZkVtcHR5IH0gZnJvbSAnLi90aHJvd0lmRW1wdHknO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHkgfSBmcm9tICcuL2RlZmF1bHRJZkVtcHR5JztcbmltcG9ydCB7IHRha2UgfSBmcm9tICcuL3Rha2UnO1xuXG4vKipcbiAqIEVtaXRzIHRoZSBzaW5nbGUgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBgaW5kZXhgIGluIGEgc2VxdWVuY2Ugb2YgZW1pc3Npb25zXG4gKiBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RW1pdHMgb25seSB0aGUgaS10aCB2YWx1ZSwgdGhlbiBjb21wbGV0ZXMuPC9zcGFuPlxuICpcbiAqICFbXShlbGVtZW50QXQucG5nKVxuICpcbiAqIGBlbGVtZW50QXRgIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBpdGVtIGF0IHRoZSBzcGVjaWZpZWRcbiAqIGBpbmRleGAgaW4gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBvciBhIGRlZmF1bHQgdmFsdWUgaWYgdGhhdCBgaW5kZXhgIGlzIG91dFxuICogb2YgcmFuZ2UgYW5kIHRoZSBgZGVmYXVsdGAgYXJndW1lbnQgaXMgcHJvdmlkZWQuIElmIHRoZSBgZGVmYXVsdGAgYXJndW1lbnQgaXNcbiAqIG5vdCBnaXZlbiBhbmQgdGhlIGBpbmRleGAgaXMgb3V0IG9mIHJhbmdlLCB0aGUgb3V0cHV0IE9ic2VydmFibGUgd2lsbCBlbWl0IGFuXG4gKiBgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JgIGVycm9yLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBFbWl0IG9ubHkgdGhlIHRoaXJkIGNsaWNrIGV2ZW50XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgZWxlbWVudEF0IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGNsaWNrcy5waXBlKGVsZW1lbnRBdCgyKSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHMgaW46XG4gKiAvLyBjbGljayAxID0gbm90aGluZ1xuICogLy8gY2xpY2sgMiA9IG5vdGhpbmdcbiAqIC8vIGNsaWNrIDMgPSBNb3VzZUV2ZW50IG9iamVjdCBsb2dnZWQgdG8gY29uc29sZVxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgZmlyc3R9XG4gKiBAc2VlIHtAbGluayBsYXN0fVxuICogQHNlZSB7QGxpbmsgc2tpcH1cbiAqIEBzZWUge0BsaW5rIHNpbmdsZX1cbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKlxuICogQHRocm93cyB7QXJndW1lbnRPdXRPZlJhbmdlRXJyb3J9IFdoZW4gdXNpbmcgYGVsZW1lbnRBdChpKWAsIGl0IGRlbGl2ZXJzIGFuXG4gKiBgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JgIHRvIHRoZSBPYnNlcnZlcidzIGBlcnJvcmAgY2FsbGJhY2sgaWYgYGkgPCAwYCBvciB0aGVcbiAqIE9ic2VydmFibGUgaGFzIGNvbXBsZXRlZCBiZWZvcmUgZW1pdHRpbmcgdGhlIGktdGggYG5leHRgIG5vdGlmaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXggSXMgdGhlIG51bWJlciBgaWAgZm9yIHRoZSBpLXRoIHNvdXJjZSBlbWlzc2lvbiB0aGF0IGhhcyBoYXBwZW5lZFxuICogc2luY2UgdGhlIHN1YnNjcmlwdGlvbiwgc3RhcnRpbmcgZnJvbSB0aGUgbnVtYmVyIGAwYC5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgVGhlIGRlZmF1bHQgdmFsdWUgcmV0dXJuZWQgZm9yIG1pc3NpbmcgaW5kaWNlcy5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGEgc2luZ2xlIGl0ZW0sIGlmXG4gKiBpdCBpcyBmb3VuZC4gT3RoZXJ3aXNlLCBpdCB3aWxsIGVtaXQgdGhlIGRlZmF1bHQgdmFsdWUgaWYgZ2l2ZW4uIElmIG5vdCwgaXRcbiAqIGVtaXRzIGFuIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudEF0PFQsIEQgPSBUPihpbmRleDogbnVtYmVyLCBkZWZhdWx0VmFsdWU/OiBEKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUIHwgRD4ge1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yKCk7XG4gIH1cbiAgY29uc3QgaGFzRGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyO1xuICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT5cbiAgICBzb3VyY2UucGlwZShcbiAgICAgIGZpbHRlcigodiwgaSkgPT4gaSA9PT0gaW5kZXgpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIGhhc0RlZmF1bHRWYWx1ZSA/IGRlZmF1bHRJZkVtcHR5KGRlZmF1bHRWYWx1ZSEpIDogdGhyb3dJZkVtcHR5KCgpID0+IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcigpKVxuICAgICk7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgRmFsc3ksIE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5PFQ+KHByZWRpY2F0ZTogQm9vbGVhbkNvbnN0cnVjdG9yKTogT3BlcmF0b3JGdW5jdGlvbjxULCBFeGNsdWRlPFQsIEZhbHN5PiBleHRlbmRzIG5ldmVyID8gZmFsc2UgOiBib29sZWFuPjtcbi8qKiBAZGVwcmVjYXRlZCBVc2UgYSBjbG9zdXJlIGluc3RlYWQgb2YgYSBgdGhpc0FyZ2AuIFNpZ25hdHVyZXMgYWNjZXB0aW5nIGEgYHRoaXNBcmdgIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVyeTxUPihcbiAgcHJlZGljYXRlOiBCb29sZWFuQ29uc3RydWN0b3IsXG4gIHRoaXNBcmc6IGFueVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBFeGNsdWRlPFQsIEZhbHN5PiBleHRlbmRzIG5ldmVyID8gZmFsc2UgOiBib29sZWFuPjtcbi8qKiBAZGVwcmVjYXRlZCBVc2UgYSBjbG9zdXJlIGluc3RlYWQgb2YgYSBgdGhpc0FyZ2AuIFNpZ25hdHVyZXMgYWNjZXB0aW5nIGEgYHRoaXNBcmdgIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVyeTxULCBBPihcbiAgcHJlZGljYXRlOiAodGhpczogQSwgdmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gYm9vbGVhbixcbiAgdGhpc0FyZzogQVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBib29sZWFuPjtcbmV4cG9ydCBmdW5jdGlvbiBldmVyeTxUPihwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBib29sZWFuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBib29sZWFuPjtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGV0aGVyIG9yIG5vdCBldmVyeSBpdGVtIG9mIHRoZSBzb3VyY2Ugc2F0aXNmaWVzIHRoZSBjb25kaXRpb24gc3BlY2lmaWVkLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JZiBhbGwgdmFsdWVzIHBhc3MgcHJlZGljYXRlIGJlZm9yZSB0aGUgc291cmNlIGNvbXBsZXRlcywgZW1pdHMgdHJ1ZSBiZWZvcmUgY29tcGxldGlvbixcbiAqIG90aGVyd2lzZSBlbWl0IGZhbHNlLCB0aGVuIGNvbXBsZXRlLjwvc3Bhbj5cbiAqXG4gKiAhW10oZXZlcnkucG5nKVxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBBIHNpbXBsZSBleGFtcGxlIGVtaXR0aW5nIHRydWUgaWYgYWxsIGVsZW1lbnRzIGFyZSBsZXNzIHRoYW4gNSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBldmVyeSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIG9mKDEsIDIsIDMsIDQsIDUsIDYpXG4gKiAgIC5waXBlKGV2ZXJ5KHggPT4geCA8IDUpKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpOyAvLyAtPiBmYWxzZVxuICogYGBgXG4gKlxuICogQHBhcmFtIHByZWRpY2F0ZSBBIGZ1bmN0aW9uIGZvciBkZXRlcm1pbmluZyBpZiBhbiBpdGVtIG1lZXRzIGEgc3BlY2lmaWVkIGNvbmRpdGlvbi5cbiAqIEBwYXJhbSB0aGlzQXJnIE9wdGlvbmFsIG9iamVjdCB0byB1c2UgZm9yIGB0aGlzYCBpbiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgb2YgYm9vbGVhbnMgdGhhdCBkZXRlcm1pbmVzIGlmXG4gKiBhbGwgaXRlbXMgb2YgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIG1lZXQgdGhlIGNvbmRpdGlvbiBzcGVjaWZpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVyeTxUPihcbiAgcHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gYm9vbGVhbixcbiAgdGhpc0FyZz86IGFueVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBib29sZWFuPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghcHJlZGljYXRlLmNhbGwodGhpc0FyZywgdmFsdWUsIGluZGV4KyssIHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChmYWxzZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHRydWUpO1xuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IE9ic2VydmFibGVJbnB1dCwgT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2ZWRWYWx1ZU9mIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5cbi8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4aGF1c3RNYXA8VCwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihcbiAgcHJvamVjdDogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBPXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIE9ic2VydmVkVmFsdWVPZjxPPj47XG4vKiogQGRlcHJlY2F0ZWQgVGhlIGByZXN1bHRTZWxlY3RvcmAgcGFyYW1ldGVyIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIGFuIGlubmVyIGBtYXBgIGluc3RlYWQuIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL3Jlc3VsdFNlbGVjdG9yICovXG5leHBvcnQgZnVuY3Rpb24gZXhoYXVzdE1hcDxULCBPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PGFueT4+KFxuICBwcm9qZWN0OiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IE8sXG4gIHJlc3VsdFNlbGVjdG9yOiB1bmRlZmluZWRcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgT2JzZXJ2ZWRWYWx1ZU9mPE8+Pjtcbi8qKiBAZGVwcmVjYXRlZCBUaGUgYHJlc3VsdFNlbGVjdG9yYCBwYXJhbWV0ZXIgd2lsbCBiZSByZW1vdmVkIGluIHY4LiBVc2UgYW4gaW5uZXIgYG1hcGAgaW5zdGVhZC4gRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvcmVzdWx0U2VsZWN0b3IgKi9cbmV4cG9ydCBmdW5jdGlvbiBleGhhdXN0TWFwPFQsIEksIFI+KFxuICBwcm9qZWN0OiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IE9ic2VydmFibGVJbnB1dDxJPixcbiAgcmVzdWx0U2VsZWN0b3I6IChvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBJLCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcikgPT4gUlxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBSPjtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG5cbi8qKlxuICogUHJvamVjdHMgZWFjaCBzb3VyY2UgdmFsdWUgdG8gYW4gT2JzZXJ2YWJsZSB3aGljaCBpcyBtZXJnZWQgaW4gdGhlIG91dHB1dFxuICogT2JzZXJ2YWJsZSBvbmx5IGlmIHRoZSBwcmV2aW91cyBwcm9qZWN0ZWQgT2JzZXJ2YWJsZSBoYXMgY29tcGxldGVkLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5NYXBzIGVhY2ggdmFsdWUgdG8gYW4gT2JzZXJ2YWJsZSwgdGhlbiBmbGF0dGVucyBhbGwgb2ZcbiAqIHRoZXNlIGlubmVyIE9ic2VydmFibGVzIHVzaW5nIHtAbGluayBleGhhdXN0QWxsfS48L3NwYW4+XG4gKlxuICogIVtdKGV4aGF1c3RNYXAucG5nKVxuICpcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW1zIGJhc2VkIG9uIGFwcGx5aW5nIGEgZnVuY3Rpb24gdGhhdCB5b3VcbiAqIHN1cHBseSB0byBlYWNoIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUsIHdoZXJlIHRoYXQgZnVuY3Rpb25cbiAqIHJldHVybnMgYW4gKHNvLWNhbGxlZCBcImlubmVyXCIpIE9ic2VydmFibGUuIFdoZW4gaXQgcHJvamVjdHMgYSBzb3VyY2UgdmFsdWUgdG9cbiAqIGFuIE9ic2VydmFibGUsIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBiZWdpbnMgZW1pdHRpbmcgdGhlIGl0ZW1zIGVtaXR0ZWQgYnlcbiAqIHRoYXQgcHJvamVjdGVkIE9ic2VydmFibGUuIEhvd2V2ZXIsIGBleGhhdXN0TWFwYCBpZ25vcmVzIGV2ZXJ5IG5ldyBwcm9qZWN0ZWRcbiAqIE9ic2VydmFibGUgaWYgdGhlIHByZXZpb3VzIHByb2plY3RlZCBPYnNlcnZhYmxlIGhhcyBub3QgeWV0IGNvbXBsZXRlZC4gT25jZVxuICogdGhhdCBvbmUgY29tcGxldGVzLCBpdCB3aWxsIGFjY2VwdCBhbmQgZmxhdHRlbiB0aGUgbmV4dCBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogYW5kIHJlcGVhdCB0aGlzIHByb2Nlc3MuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFJ1biBhIGZpbml0ZSB0aW1lciBmb3IgZWFjaCBjbGljaywgb25seSBpZiB0aGVyZSBpcyBubyBjdXJyZW50bHkgYWN0aXZlIHRpbWVyXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgZXhoYXVzdE1hcCwgaW50ZXJ2YWwsIHRha2UgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgcmVzdWx0ID0gY2xpY2tzLnBpcGUoXG4gKiAgIGV4aGF1c3RNYXAoKCkgPT4gaW50ZXJ2YWwoMTAwMCkucGlwZSh0YWtlKDUpKSlcbiAqICk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwfVxuICogQHNlZSB7QGxpbmsgZXhoYXVzdH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwfVxuICogQHNlZSB7QGxpbmsgc3dpdGNoTWFwfVxuICpcbiAqIEBwYXJhbSBwcm9qZWN0IEEgZnVuY3Rpb24gdGhhdCwgd2hlbiBhcHBsaWVkIHRvIGFuIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLCByZXR1cm5zIGFuIE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgY29udGFpbmluZyBwcm9qZWN0ZWRcbiAqIE9ic2VydmFibGVzIG9mIGVhY2ggaXRlbSBvZiB0aGUgc291cmNlLCBpZ25vcmluZyBwcm9qZWN0ZWQgT2JzZXJ2YWJsZXMgdGhhdFxuICogc3RhcnQgYmVmb3JlIHRoZWlyIHByZWNlZGluZyBPYnNlcnZhYmxlIGhhcyBjb21wbGV0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGhhdXN0TWFwPFQsIFIsIE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8YW55Pj4oXG4gIHByb2plY3Q6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gTyxcbiAgcmVzdWx0U2VsZWN0b3I/OiAob3V0ZXJWYWx1ZTogVCwgaW5uZXJWYWx1ZTogT2JzZXJ2ZWRWYWx1ZU9mPE8+LCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcikgPT4gUlxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZlZFZhbHVlT2Y8Tz4gfCBSPiB7XG4gIGlmIChyZXN1bHRTZWxlY3Rvcikge1xuICAgIC8vIERFUFJFQ0FURUQgUEFUSFxuICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PlxuICAgICAgc291cmNlLnBpcGUoZXhoYXVzdE1hcCgoYSwgaSkgPT4gaW5uZXJGcm9tKHByb2plY3QoYSwgaSkpLnBpcGUobWFwKChiOiBhbnksIGlpOiBhbnkpID0+IHJlc3VsdFNlbGVjdG9yKGEsIGIsIGksIGlpKSkpKSk7XG4gIH1cbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgbGV0IGlubmVyU3ViOiBTdWJzY3JpYmVyPFQ+IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAob3V0ZXJWYWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghaW5uZXJTdWIpIHtcbiAgICAgICAgICAgIGlubmVyU3ViID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgKCkgPT4ge1xuICAgICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICAgIGlzQ29tcGxldGUgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbm5lckZyb20ocHJvamVjdChvdXRlclZhbHVlLCBpbmRleCsrKSkuc3Vic2NyaWJlKGlubmVyU3ViKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAhaW5uZXJTdWIgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZUlucHV0LCBPYnNlcnZlZFZhbHVlT2YgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwIH0gZnJvbSAnLi9leGhhdXN0TWFwJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5cbi8qKlxuICogQ29udmVydHMgYSBoaWdoZXItb3JkZXIgT2JzZXJ2YWJsZSBpbnRvIGEgZmlyc3Qtb3JkZXIgT2JzZXJ2YWJsZSBieSBkcm9wcGluZ1xuICogaW5uZXIgT2JzZXJ2YWJsZXMgd2hpbGUgdGhlIHByZXZpb3VzIGlubmVyIE9ic2VydmFibGUgaGFzIG5vdCB5ZXQgY29tcGxldGVkLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5GbGF0dGVucyBhbiBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzIGJ5IGRyb3BwaW5nIHRoZVxuICogbmV4dCBpbm5lciBPYnNlcnZhYmxlcyB3aGlsZSB0aGUgY3VycmVudCBpbm5lciBpcyBzdGlsbCBleGVjdXRpbmcuPC9zcGFuPlxuICpcbiAqICFbXShleGhhdXN0QWxsLnN2ZylcbiAqXG4gKiBgZXhoYXVzdEFsbGAgc3Vic2NyaWJlcyB0byBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgT2JzZXJ2YWJsZXMsIGFsc28ga25vd24gYXMgYVxuICogaGlnaGVyLW9yZGVyIE9ic2VydmFibGUuIEVhY2ggdGltZSBpdCBvYnNlcnZlcyBvbmUgb2YgdGhlc2UgZW1pdHRlZCBpbm5lclxuICogT2JzZXJ2YWJsZXMsIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBiZWdpbnMgZW1pdHRpbmcgdGhlIGl0ZW1zIGVtaXR0ZWQgYnkgdGhhdFxuICogaW5uZXIgT2JzZXJ2YWJsZS4gU28gZmFyLCBpdCBiZWhhdmVzIGxpa2Uge0BsaW5rIG1lcmdlQWxsfS4gSG93ZXZlcixcbiAqIGBleGhhdXN0QWxsYCBpZ25vcmVzIGV2ZXJ5IG5ldyBpbm5lciBPYnNlcnZhYmxlIGlmIHRoZSBwcmV2aW91cyBPYnNlcnZhYmxlIGhhc1xuICogbm90IHlldCBjb21wbGV0ZWQuIE9uY2UgdGhhdCBvbmUgY29tcGxldGVzLCBpdCB3aWxsIGFjY2VwdCBhbmQgZmxhdHRlbiB0aGVcbiAqIG5leHQgaW5uZXIgT2JzZXJ2YWJsZSBhbmQgcmVwZWF0IHRoaXMgcHJvY2Vzcy5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogUnVuIGEgZmluaXRlIHRpbWVyIGZvciBlYWNoIGNsaWNrLCBvbmx5IGlmIHRoZXJlIGlzIG5vIGN1cnJlbnRseSBhY3RpdmUgdGltZXJcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBtYXAsIGludGVydmFsLCB0YWtlLCBleGhhdXN0QWxsIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IGhpZ2hlck9yZGVyID0gY2xpY2tzLnBpcGUoXG4gKiAgIG1hcCgoKSA9PiBpbnRlcnZhbCgxMDAwKS5waXBlKHRha2UoNSkpKVxuICogKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGhpZ2hlck9yZGVyLnBpcGUoZXhoYXVzdEFsbCgpKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBjb21iaW5lTGF0ZXN0QWxsfVxuICogQHNlZSB7QGxpbmsgY29uY2F0QWxsfVxuICogQHNlZSB7QGxpbmsgc3dpdGNoQWxsfVxuICogQHNlZSB7QGxpbmsgc3dpdGNoTWFwfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKiBAc2VlIHtAbGluayBleGhhdXN0TWFwfVxuICogQHNlZSB7QGxpbmsgemlwQWxsfVxuICpcbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHRha2VzIGEgc291cmNlIG9mXG4gKiBPYnNlcnZhYmxlcyBhbmQgcHJvcGFnYXRlcyB0aGUgZmlyc3QgT2JzZXJ2YWJsZSBleGNsdXNpdmVseSB1bnRpbCBpdFxuICogY29tcGxldGVzIGJlZm9yZSBzdWJzY3JpYmluZyB0byB0aGUgbmV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4aGF1c3RBbGw8TyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PigpOiBPcGVyYXRvckZ1bmN0aW9uPE8sIE9ic2VydmVkVmFsdWVPZjxPPj4ge1xuICByZXR1cm4gZXhoYXVzdE1hcChpZGVudGl0eSk7XG59XG4iLCAiaW1wb3J0IHsgZXhoYXVzdEFsbCB9IGZyb20gJy4vZXhoYXVzdEFsbCc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgUmVuYW1lZCB0byB7QGxpbmsgZXhoYXVzdEFsbH0uIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4aGF1c3QgPSBleGhhdXN0QWxsO1xuIiwgImltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGVJbnB1dCwgT2JzZXJ2ZWRWYWx1ZU9mLCBTY2hlZHVsZXJMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBtZXJnZUludGVybmFscyB9IGZyb20gJy4vbWVyZ2VJbnRlcm5hbHMnO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmQ8VCwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDx1bmtub3duPj4oXG4gIHByb2plY3Q6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gTyxcbiAgY29uY3VycmVudD86IG51bWJlcixcbiAgc2NoZWR1bGVyPzogU2NoZWR1bGVyTGlrZVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGUgYHNjaGVkdWxlcmAgcGFyYW1ldGVyIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gSWYgeW91IG5lZWQgdG8gc2NoZWR1bGUgdGhlIGlubmVyIHN1YnNjcmlwdGlvbixcbiAqIHVzZSBgc3Vic2NyaWJlT25gIHdpdGhpbiB0aGUgcHJvamVjdGlvbiBmdW5jdGlvbjogYGV4cGFuZCgodmFsdWUpID0+IGZuKHZhbHVlKS5waXBlKHN1YnNjcmliZU9uKHNjaGVkdWxlcikpKWAuXG4gKiBEZXRhaWxzOiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9zY2hlZHVsZXItYXJndW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZDxULCBPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PHVua25vd24+PihcbiAgcHJvamVjdDogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBPLFxuICBjb25jdXJyZW50OiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBwcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byBhbiBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBpblxuICogdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIHNpbWlsYXIgdG8ge0BsaW5rIG1lcmdlTWFwfSwgYnV0IGFwcGxpZXMgdGhlXG4gKiBwcm9qZWN0aW9uIGZ1bmN0aW9uIHRvIGV2ZXJ5IHNvdXJjZSB2YWx1ZSBhcyB3ZWxsIGFzIGV2ZXJ5IG91dHB1dCB2YWx1ZS5cbiAqIEl0J3MgcmVjdXJzaXZlLjwvc3Bhbj5cbiAqXG4gKiAhW10oZXhwYW5kLnBuZylcbiAqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBiYXNlZCBvbiBhcHBseWluZyBhIGZ1bmN0aW9uIHRoYXQgeW91XG4gKiBzdXBwbHkgdG8gZWFjaCBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCB3aGVyZSB0aGF0IGZ1bmN0aW9uXG4gKiByZXR1cm5zIGFuIE9ic2VydmFibGUsIGFuZCB0aGVuIG1lcmdpbmcgdGhvc2UgcmVzdWx0aW5nIE9ic2VydmFibGVzIGFuZFxuICogZW1pdHRpbmcgdGhlIHJlc3VsdHMgb2YgdGhpcyBtZXJnZXIuICpFeHBhbmQqIHdpbGwgcmUtZW1pdCBvbiB0aGUgb3V0cHV0XG4gKiBPYnNlcnZhYmxlIGV2ZXJ5IHNvdXJjZSB2YWx1ZS4gVGhlbiwgZWFjaCBvdXRwdXQgdmFsdWUgaXMgZ2l2ZW4gdG8gdGhlXG4gKiBgcHJvamVjdGAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBpbm5lciBPYnNlcnZhYmxlIHRvIGJlIG1lcmdlZCBvbiB0aGVcbiAqIG91dHB1dCBPYnNlcnZhYmxlLiBUaG9zZSBvdXRwdXQgdmFsdWVzIHJlc3VsdGluZyBmcm9tIHRoZSBwcm9qZWN0aW9uIGFyZSBhbHNvXG4gKiBnaXZlbiB0byB0aGUgYHByb2plY3RgIGZ1bmN0aW9uIHRvIHByb2R1Y2UgbmV3IG91dHB1dCB2YWx1ZXMuIFRoaXMgaXMgaG93XG4gKiAqZXhwYW5kKiBiZWhhdmVzIHJlY3Vyc2l2ZWx5LlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBTdGFydCBlbWl0dGluZyB0aGUgcG93ZXJzIG9mIHR3byBvbiBldmVyeSBjbGljaywgYXQgbW9zdCAxMCBvZiB0aGVtXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgbWFwLCBleHBhbmQsIG9mLCBkZWxheSwgdGFrZSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCBwb3dlcnNPZlR3byA9IGNsaWNrcy5waXBlKFxuICogICBtYXAoKCkgPT4gMSksXG4gKiAgIGV4cGFuZCh4ID0+IG9mKDIgKiB4KS5waXBlKGRlbGF5KDEwMDApKSksXG4gKiAgIHRha2UoMTApXG4gKiApO1xuICogcG93ZXJzT2ZUd28uc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgbWVyZ2VNYXB9XG4gKiBAc2VlIHtAbGluayBtZXJnZVNjYW59XG4gKlxuICogQHBhcmFtIHByb2plY3QgQSBmdW5jdGlvbiB0aGF0LCB3aGVuIGFwcGxpZWQgdG8gYW4gaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2VcbiAqIG9yIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSwgcmV0dXJucyBhbiBPYnNlcnZhYmxlLlxuICogQHBhcmFtIGNvbmN1cnJlbnQgTWF4aW11bSBudW1iZXIgb2YgaW5wdXQgT2JzZXJ2YWJsZXMgYmVpbmcgc3Vic2NyaWJlZCB0b1xuICogY29uY3VycmVudGx5LlxuICogQHBhcmFtIHNjaGVkdWxlciBUaGUge0BsaW5rIFNjaGVkdWxlckxpa2V9IHRvIHVzZSBmb3Igc3Vic2NyaWJpbmcgdG9cbiAqIGVhY2ggcHJvamVjdGVkIGlubmVyIE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc291cmNlIHZhbHVlc1xuICogYW5kIGFsc28gcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBwcm9qZWN0aW9uIGZ1bmN0aW9uIHRvIGVhY2ggdmFsdWUgZW1pdHRlZCBvblxuICogdGhlIG91dHB1dCBPYnNlcnZhYmxlIGFuZCBtZXJnaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBPYnNlcnZhYmxlcyBvYnRhaW5lZFxuICogZnJvbSB0aGlzIHRyYW5zZm9ybWF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kPFQsIE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8dW5rbm93bj4+KFxuICBwcm9qZWN0OiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IE8sXG4gIGNvbmN1cnJlbnQgPSBJbmZpbml0eSxcbiAgc2NoZWR1bGVyPzogU2NoZWR1bGVyTGlrZVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZlZFZhbHVlT2Y8Tz4+IHtcbiAgY29uY3VycmVudCA9IChjb25jdXJyZW50IHx8IDApIDwgMSA/IEluZmluaXR5IDogY29uY3VycmVudDtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT5cbiAgICBtZXJnZUludGVybmFscyhcbiAgICAgIC8vIEdlbmVyYWwgbWVyZ2UgcGFyYW1zXG4gICAgICBzb3VyY2UsXG4gICAgICBzdWJzY3JpYmVyLFxuICAgICAgcHJvamVjdCxcbiAgICAgIGNvbmN1cnJlbnQsXG5cbiAgICAgIC8vIG9uQmVmb3JlTmV4dFxuICAgICAgdW5kZWZpbmVkLFxuXG4gICAgICAvLyBFeHBhbmQtc3BlY2lmaWNcbiAgICAgIHRydWUsIC8vIFVzZSBleHBhbmQgcGF0aFxuICAgICAgc2NoZWR1bGVyIC8vIElubmVyIHN1YnNjcmlwdGlvbiBzY2hlZHVsZXJcbiAgICApXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5cbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgbWlycm9ycyB0aGUgc291cmNlIE9ic2VydmFibGUsIGJ1dCB3aWxsIGNhbGwgYSBzcGVjaWZpZWQgZnVuY3Rpb24gd2hlblxuICogdGhlIHNvdXJjZSB0ZXJtaW5hdGVzIG9uIGNvbXBsZXRlIG9yIGVycm9yLlxuICogVGhlIHNwZWNpZmllZCBmdW5jdGlvbiB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gdGhlIHN1YnNjcmliZXIgZXhwbGljaXRseSB1bnN1YnNjcmliZXMuXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBFeGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIG9ic2VydmFibGUgY29tcGxldGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCB0YWtlLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIC8vIGVtaXQgdmFsdWUgaW4gc2VxdWVuY2UgZXZlcnkgMSBzZWNvbmRcbiAqIGNvbnN0IHNvdXJjZSA9IGludGVydmFsKDEwMDApO1xuICogY29uc3QgZXhhbXBsZSA9IHNvdXJjZS5waXBlKFxuICogICB0YWtlKDUpLCAvL3Rha2Ugb25seSB0aGUgZmlyc3QgNSB2YWx1ZXNcbiAqICAgZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coJ1NlcXVlbmNlIGNvbXBsZXRlJykpIC8vIEV4ZWN1dGUgd2hlbiB0aGUgb2JzZXJ2YWJsZSBjb21wbGV0ZXNcbiAqICk7XG4gKiBjb25zdCBzdWJzY3JpYmUgPSBleGFtcGxlLnN1YnNjcmliZSh2YWwgPT4gY29uc29sZS5sb2codmFsKSk7XG4gKlxuICogLy8gcmVzdWx0czpcbiAqIC8vIDBcbiAqIC8vIDFcbiAqIC8vIDJcbiAqIC8vIDNcbiAqIC8vIDRcbiAqIC8vICdTZXF1ZW5jZSBjb21wbGV0ZSdcbiAqIGBgYFxuICpcbiAqIEV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB0aGUgc3Vic2NyaWJlciBleHBsaWNpdGx5IHVuc3Vic2NyaWJlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbnRlcnZhbCwgZmluYWxpemUsIHRhcCwgbm9vcCwgdGltZXIgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBzb3VyY2UgPSBpbnRlcnZhbCgxMDApLnBpcGUoXG4gKiAgIGZpbmFsaXplKCgpID0+IGNvbnNvbGUubG9nKCdbZmluYWxpemVdIENhbGxlZCcpKSxcbiAqICAgdGFwKHtcbiAqICAgICBuZXh0OiAoKSA9PiBjb25zb2xlLmxvZygnW25leHRdIENhbGxlZCcpLFxuICogICAgIGVycm9yOiAoKSA9PiBjb25zb2xlLmxvZygnW2Vycm9yXSBOb3QgY2FsbGVkJyksXG4gKiAgICAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUubG9nKCdbdGFwIGNvbXBsZXRlXSBOb3QgY2FsbGVkJylcbiAqICAgfSlcbiAqICk7XG4gKlxuICogY29uc3Qgc3ViID0gc291cmNlLnN1YnNjcmliZSh7XG4gKiAgIG5leHQ6IHggPT4gY29uc29sZS5sb2coeCksXG4gKiAgIGVycm9yOiBub29wLFxuICogICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ1tjb21wbGV0ZV0gTm90IGNhbGxlZCcpXG4gKiB9KTtcbiAqXG4gKiB0aW1lcigxNTApLnN1YnNjcmliZSgoKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gKlxuICogLy8gcmVzdWx0czpcbiAqIC8vICdbbmV4dF0gQ2FsbGVkJ1xuICogLy8gMFxuICogLy8gJ1tmaW5hbGl6ZV0gQ2FsbGVkJ1xuICogYGBgXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHNvdXJjZSB0ZXJtaW5hdGVzLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgbWlycm9ycyB0aGUgc291cmNlLCBidXRcbiAqIHdpbGwgY2FsbCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIHRlcm1pbmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemU8VD4oY2FsbGJhY2s6ICgpID0+IHZvaWQpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgLy8gVE9ETzogVGhpcyB0cnkvZmluYWxseSB3YXMgb25seSBhZGRlZCBmb3IgYHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmdgLlxuICAgIC8vIFJFTU9WRSBUSElTIFdIRU4gVEhBVCBIT1QgR0FSQkFHRSBJUyBSRU1PVkVEIElOIFY4LlxuICAgIHRyeSB7XG4gICAgICBzb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzdWJzY3JpYmVyLmFkZChjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uLCBUcnV0aHlUeXBlc09mIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kPFQ+KHByZWRpY2F0ZTogQm9vbGVhbkNvbnN0cnVjdG9yKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUcnV0aHlUeXBlc09mPFQ+Pjtcbi8qKiBAZGVwcmVjYXRlZCBVc2UgYSBjbG9zdXJlIGluc3RlYWQgb2YgYSBgdGhpc0FyZ2AuIFNpZ25hdHVyZXMgYWNjZXB0aW5nIGEgYHRoaXNBcmdgIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kPFQsIFMgZXh0ZW5kcyBULCBBPihcbiAgcHJlZGljYXRlOiAodGhpczogQSwgdmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gdmFsdWUgaXMgUyxcbiAgdGhpc0FyZzogQVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBTIHwgdW5kZWZpbmVkPjtcbmV4cG9ydCBmdW5jdGlvbiBmaW5kPFQsIFMgZXh0ZW5kcyBUPihcbiAgcHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gdmFsdWUgaXMgU1xuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBTIHwgdW5kZWZpbmVkPjtcbi8qKiBAZGVwcmVjYXRlZCBVc2UgYSBjbG9zdXJlIGluc3RlYWQgb2YgYSBgdGhpc0FyZ2AuIFNpZ25hdHVyZXMgYWNjZXB0aW5nIGEgYHRoaXNBcmdgIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kPFQsIEE+KFxuICBwcmVkaWNhdGU6ICh0aGlzOiBBLCB2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBib29sZWFuLFxuICB0aGlzQXJnOiBBXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFQgfCB1bmRlZmluZWQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmQ8VD4ocHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gYm9vbGVhbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgVCB8IHVuZGVmaW5lZD47XG4vKipcbiAqIEVtaXRzIG9ubHkgdGhlIGZpcnN0IHZhbHVlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgbWVldHMgc29tZVxuICogY29uZGl0aW9uLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5GaW5kcyB0aGUgZmlyc3QgdmFsdWUgdGhhdCBwYXNzZXMgc29tZSB0ZXN0IGFuZCBlbWl0c1xuICogdGhhdC48L3NwYW4+XG4gKlxuICogIVtdKGZpbmQucG5nKVxuICpcbiAqIGBmaW5kYCBzZWFyY2hlcyBmb3IgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgbWF0Y2hlcyB0aGVcbiAqIHNwZWNpZmllZCBjb25kaXRpb24gZW1ib2RpZWQgYnkgdGhlIGBwcmVkaWNhdGVgLCBhbmQgcmV0dXJucyB0aGUgZmlyc3RcbiAqIG9jY3VycmVuY2UgaW4gdGhlIHNvdXJjZS4gVW5saWtlIHtAbGluayBmaXJzdH0sIHRoZSBgcHJlZGljYXRlYCBpcyByZXF1aXJlZFxuICogaW4gYGZpbmRgLCBhbmQgZG9lcyBub3QgZW1pdCBhbiBlcnJvciBpZiBhIHZhbGlkIHZhbHVlIGlzIG5vdCBmb3VuZFxuICogKGVtaXRzIGB1bmRlZmluZWRgIGluc3RlYWQpLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBGaW5kIGFuZCBlbWl0IHRoZSBmaXJzdCBjbGljayB0aGF0IGhhcHBlbnMgb24gYSBESVYgZWxlbWVudFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIGZpbmQgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAqIGRpdi5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOiAyMDBweDsgaGVpZ2h0OiAyMDBweDsgYmFja2dyb3VuZDogIzA5YzsnO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCByZXN1bHQgPSBjbGlja3MucGlwZShmaW5kKGV2ID0+ICg8SFRNTEVsZW1lbnQ+ZXYudGFyZ2V0KS50YWdOYW1lID09PSAnRElWJykpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGZpbHRlcn1cbiAqIEBzZWUge0BsaW5rIGZpcnN0fVxuICogQHNlZSB7QGxpbmsgZmluZEluZGV4fVxuICogQHNlZSB7QGxpbmsgdGFrZX1cbiAqXG4gKiBAcGFyYW0gcHJlZGljYXRlIEEgZnVuY3Rpb24gY2FsbGVkIHdpdGggZWFjaCBpdGVtIHRvIHRlc3QgZm9yIGNvbmRpdGlvbiBtYXRjaGluZy5cbiAqIEBwYXJhbSB0aGlzQXJnIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgYHRoaXNgIGluIHRoZVxuICogYHByZWRpY2F0ZWAgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZmlyc3QgaXRlbSB0aGF0XG4gKiBtYXRjaGVzIHRoZSBjb25kaXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kPFQ+KFxuICBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBib29sZWFuLFxuICB0aGlzQXJnPzogYW55XG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFQgfCB1bmRlZmluZWQ+IHtcbiAgcmV0dXJuIG9wZXJhdGUoY3JlYXRlRmluZChwcmVkaWNhdGUsIHRoaXNBcmcsICd2YWx1ZScpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbmQ8VD4oXG4gIHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBzb3VyY2U6IE9ic2VydmFibGU8VD4pID0+IGJvb2xlYW4sXG4gIHRoaXNBcmc6IGFueSxcbiAgZW1pdDogJ3ZhbHVlJyB8ICdpbmRleCdcbikge1xuICBjb25zdCBmaW5kSW5kZXggPSBlbWl0ID09PSAnaW5kZXgnO1xuICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxUPiwgc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxhbnk+KSA9PiB7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAodmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBpID0gaW5kZXgrKztcbiAgICAgICAgICBpZiAocHJlZGljYXRlLmNhbGwodGhpc0FyZywgdmFsdWUsIGksIHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChmaW5kSW5kZXggPyBpIDogdmFsdWUpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHN1YnNjcmliZXIubmV4dChmaW5kSW5kZXggPyAtMSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBGYWxzeSwgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlRmluZCB9IGZyb20gJy4vZmluZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSW5kZXg8VD4ocHJlZGljYXRlOiBCb29sZWFuQ29uc3RydWN0b3IpOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFQgZXh0ZW5kcyBGYWxzeSA/IC0xIDogbnVtYmVyPjtcbi8qKiBAZGVwcmVjYXRlZCBVc2UgYSBjbG9zdXJlIGluc3RlYWQgb2YgYSBgdGhpc0FyZ2AuIFNpZ25hdHVyZXMgYWNjZXB0aW5nIGEgYHRoaXNBcmdgIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSW5kZXg8VD4ocHJlZGljYXRlOiBCb29sZWFuQ29uc3RydWN0b3IsIHRoaXNBcmc6IGFueSk6IE9wZXJhdG9yRnVuY3Rpb248VCwgVCBleHRlbmRzIEZhbHN5ID8gLTEgOiBudW1iZXI+O1xuLyoqIEBkZXByZWNhdGVkIFVzZSBhIGNsb3N1cmUgaW5zdGVhZCBvZiBhIGB0aGlzQXJnYC4gU2lnbmF0dXJlcyBhY2NlcHRpbmcgYSBgdGhpc0FyZ2Agd2lsbCBiZSByZW1vdmVkIGluIHY4LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRJbmRleDxULCBBPihcbiAgcHJlZGljYXRlOiAodGhpczogQSwgdmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gYm9vbGVhbixcbiAgdGhpc0FyZzogQVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBudW1iZXI+O1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRJbmRleDxUPihwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBib29sZWFuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBudW1iZXI+O1xuXG4vKipcbiAqIEVtaXRzIG9ubHkgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2YWx1ZSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0aGF0XG4gKiBtZWV0cyBzb21lIGNvbmRpdGlvbi5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBmaW5kfSwgYnV0IGVtaXRzIHRoZSBpbmRleCBvZiB0aGVcbiAqIGZvdW5kIHZhbHVlLCBub3QgdGhlIHZhbHVlIGl0c2VsZi48L3NwYW4+XG4gKlxuICogIVtdKGZpbmRJbmRleC5wbmcpXG4gKlxuICogYGZpbmRJbmRleGAgc2VhcmNoZXMgZm9yIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0aGF0IG1hdGNoZXNcbiAqIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9uIGVtYm9kaWVkIGJ5IHRoZSBgcHJlZGljYXRlYCwgYW5kIHJldHVybnMgdGhlXG4gKiAoemVyby1iYXNlZCkgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gdGhlIHNvdXJjZS4gVW5saWtlXG4gKiB7QGxpbmsgZmlyc3R9LCB0aGUgYHByZWRpY2F0ZWAgaXMgcmVxdWlyZWQgaW4gYGZpbmRJbmRleGAsIGFuZCBkb2VzIG5vdCBlbWl0XG4gKiBhbiBlcnJvciBpZiBhIHZhbGlkIHZhbHVlIGlzIG5vdCBmb3VuZC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogRW1pdCB0aGUgaW5kZXggb2YgZmlyc3QgY2xpY2sgdGhhdCBoYXBwZW5zIG9uIGEgRElWIGVsZW1lbnRcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBmaW5kSW5kZXggfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAqIGRpdi5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOiAyMDBweDsgaGVpZ2h0OiAyMDBweDsgYmFja2dyb3VuZDogIzA5YzsnO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCByZXN1bHQgPSBjbGlja3MucGlwZShmaW5kSW5kZXgoZXYgPT4gKDxIVE1MRWxlbWVudD5ldi50YXJnZXQpLnRhZ05hbWUgPT09ICdESVYnKSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgZmlsdGVyfVxuICogQHNlZSB7QGxpbmsgZmluZH1cbiAqIEBzZWUge0BsaW5rIGZpcnN0fVxuICogQHNlZSB7QGxpbmsgdGFrZX1cbiAqXG4gKiBAcGFyYW0gcHJlZGljYXRlIEEgZnVuY3Rpb24gY2FsbGVkIHdpdGggZWFjaCBpdGVtIHRvIHRlc3QgZm9yIGNvbmRpdGlvbiBtYXRjaGluZy5cbiAqIEBwYXJhbSB0aGlzQXJnIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgYHRoaXNgIGluIHRoZVxuICogYHByZWRpY2F0ZWAgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgaW5kZXggb2YgdGhlXG4gKiBmaXJzdCBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgY29uZGl0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEluZGV4PFQ+KFxuICBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBib29sZWFuLFxuICB0aGlzQXJnPzogYW55XG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIG51bWJlcj4ge1xuICByZXR1cm4gb3BlcmF0ZShjcmVhdGVGaW5kKHByZWRpY2F0ZSwgdGhpc0FyZywgJ2luZGV4JykpO1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IEVtcHR5RXJyb3IgfSBmcm9tICcuLi91dGlsL0VtcHR5RXJyb3InO1xuaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiwgVHJ1dGh5VHlwZXNPZiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJy4vZmlsdGVyJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICcuL3Rha2UnO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHkgfSBmcm9tICcuL2RlZmF1bHRJZkVtcHR5JztcbmltcG9ydCB7IHRocm93SWZFbXB0eSB9IGZyb20gJy4vdGhyb3dJZkVtcHR5JztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdDxULCBEID0gVD4ocHJlZGljYXRlPzogbnVsbCwgZGVmYXVsdFZhbHVlPzogRCk6IE9wZXJhdG9yRnVuY3Rpb248VCwgVCB8IEQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0PFQ+KHByZWRpY2F0ZTogQm9vbGVhbkNvbnN0cnVjdG9yKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUcnV0aHlUeXBlc09mPFQ+PjtcbmV4cG9ydCBmdW5jdGlvbiBmaXJzdDxULCBEPihwcmVkaWNhdGU6IEJvb2xlYW5Db25zdHJ1Y3RvciwgZGVmYXVsdFZhbHVlOiBEKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUcnV0aHlUeXBlc09mPFQ+IHwgRD47XG5leHBvcnQgZnVuY3Rpb24gZmlyc3Q8VCwgUyBleHRlbmRzIFQ+KFxuICBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiB2YWx1ZSBpcyBTLFxuICBkZWZhdWx0VmFsdWU/OiBTXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFM+O1xuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0PFQsIFMgZXh0ZW5kcyBULCBEPihcbiAgcHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gdmFsdWUgaXMgUyxcbiAgZGVmYXVsdFZhbHVlOiBEXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFMgfCBEPjtcbmV4cG9ydCBmdW5jdGlvbiBmaXJzdDxULCBEID0gVD4oXG4gIHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBzb3VyY2U6IE9ic2VydmFibGU8VD4pID0+IGJvb2xlYW4sXG4gIGRlZmF1bHRWYWx1ZT86IERcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgVCB8IEQ+O1xuXG4vKipcbiAqIEVtaXRzIG9ubHkgdGhlIGZpcnN0IHZhbHVlIChvciB0aGUgZmlyc3QgdmFsdWUgdGhhdCBtZWV0cyBzb21lIGNvbmRpdGlvbilcbiAqIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5FbWl0cyBvbmx5IHRoZSBmaXJzdCB2YWx1ZS4gT3IgZW1pdHMgb25seSB0aGUgZmlyc3RcbiAqIHZhbHVlIHRoYXQgcGFzc2VzIHNvbWUgdGVzdC48L3NwYW4+XG4gKlxuICogIVtdKGZpcnN0LnBuZylcbiAqXG4gKiBJZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMsIGBmaXJzdGAgZW1pdHMgdGhlIGZpcnN0IHZhbHVlIG9mIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUsIHRoZW4gY29tcGxldGVzLiBJZiBjYWxsZWQgd2l0aCBhIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLCBgZmlyc3RgXG4gKiBlbWl0cyB0aGUgZmlyc3QgdmFsdWUgb2YgdGhlIHNvdXJjZSB0aGF0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBjb25kaXRpb24uIEVtaXRzIGFuIGVycm9yXG4gKiBub3RpZmljYXRpb24gaWYgYGRlZmF1bHRWYWx1ZWAgd2FzIG5vdCBwcm92aWRlZCBhbmQgYSBtYXRjaGluZyBlbGVtZW50IGlzIG5vdCBmb3VuZC5cbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIEVtaXQgb25seSB0aGUgZmlyc3QgY2xpY2sgdGhhdCBoYXBwZW5zIG9uIHRoZSBET01cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBmaXJzdCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCByZXN1bHQgPSBjbGlja3MucGlwZShmaXJzdCgpKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBFbWl0cyB0aGUgZmlyc3QgY2xpY2sgdGhhdCBoYXBwZW5zIG9uIGEgRElWXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgZmlyc3QgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAqIGRpdi5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOiAyMDBweDsgaGVpZ2h0OiAyMDBweDsgYmFja2dyb3VuZDogIzA5YzsnO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCByZXN1bHQgPSBjbGlja3MucGlwZShmaXJzdChldiA9PiAoPEhUTUxFbGVtZW50PmV2LnRhcmdldCkudGFnTmFtZSA9PT0gJ0RJVicpKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBmaWx0ZXJ9XG4gKiBAc2VlIHtAbGluayBmaW5kfVxuICogQHNlZSB7QGxpbmsgdGFrZX1cbiAqIEBzZWUge0BsaW5rIGxhc3R9XG4gKlxuICogQHRocm93cyB7RW1wdHlFcnJvcn0gRGVsaXZlcnMgYW4gYEVtcHR5RXJyb3JgIHRvIHRoZSBPYnNlcnZlcidzIGBlcnJvcmBcbiAqIGNhbGxiYWNrIGlmIHRoZSBPYnNlcnZhYmxlIGNvbXBsZXRlcyBiZWZvcmUgYW55IGBuZXh0YCBub3RpZmljYXRpb24gd2FzIHNlbnQuXG4gKiBUaGlzIGlzIGhvdyBgZmlyc3QoKWAgaXMgZGlmZmVyZW50IGZyb20gYHRha2UoMSlgIHdoaWNoIGNvbXBsZXRlcyBpbnN0ZWFkLlxuICpcbiAqIEBwYXJhbSBwcmVkaWNhdGUgQW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGVkIHdpdGggZWFjaCBpdGVtIHRvIHRlc3QgZm9yIGNvbmRpdGlvblxuICogbWF0Y2hpbmcuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlIGVtaXR0ZWQgaW4gY2FzZSBubyB2YWxpZCB2YWx1ZSB3YXMgZm91bmQgb25cbiAqIHRoZSBzb3VyY2UuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZmlyc3QgaXRlbSB0aGF0XG4gKiBtYXRjaGVzIHRoZSBjb25kaXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdDxULCBEPihcbiAgcHJlZGljYXRlPzogKCh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBib29sZWFuKSB8IG51bGwsXG4gIGRlZmF1bHRWYWx1ZT86IERcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgVCB8IEQ+IHtcbiAgY29uc3QgaGFzRGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyO1xuICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT5cbiAgICBzb3VyY2UucGlwZShcbiAgICAgIHByZWRpY2F0ZSA/IGZpbHRlcigodiwgaSkgPT4gcHJlZGljYXRlKHYsIGksIHNvdXJjZSkpIDogaWRlbnRpdHksXG4gICAgICB0YWtlKDEpLFxuICAgICAgaGFzRGVmYXVsdFZhbHVlID8gZGVmYXVsdElmRW1wdHkoZGVmYXVsdFZhbHVlISkgOiB0aHJvd0lmRW1wdHkoKCkgPT4gbmV3IEVtcHR5RXJyb3IoKSlcbiAgICApO1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IE9ic2VydmFibGVJbnB1dCwgT2JzZXJ2ZXIsIE9wZXJhdG9yRnVuY3Rpb24sIFN1YmplY3RMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIsIE9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNpY0dyb3VwQnlPcHRpb25zPEssIFQ+IHtcbiAgZWxlbWVudD86IHVuZGVmaW5lZDtcbiAgZHVyYXRpb24/OiAoZ3JvdXBlZDogR3JvdXBlZE9ic2VydmFibGU8SywgVD4pID0+IE9ic2VydmFibGVJbnB1dDxhbnk+O1xuICBjb25uZWN0b3I/OiAoKSA9PiBTdWJqZWN0TGlrZTxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcm91cEJ5T3B0aW9uc1dpdGhFbGVtZW50PEssIEUsIFQ+IHtcbiAgZWxlbWVudDogKHZhbHVlOiBUKSA9PiBFO1xuICBkdXJhdGlvbj86IChncm91cGVkOiBHcm91cGVkT2JzZXJ2YWJsZTxLLCBFPikgPT4gT2JzZXJ2YWJsZUlucHV0PGFueT47XG4gIGNvbm5lY3Rvcj86ICgpID0+IFN1YmplY3RMaWtlPEU+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeTxULCBLPihrZXk6ICh2YWx1ZTogVCkgPT4gSywgb3B0aW9uczogQmFzaWNHcm91cEJ5T3B0aW9uczxLLCBUPik6IE9wZXJhdG9yRnVuY3Rpb248VCwgR3JvdXBlZE9ic2VydmFibGU8SywgVD4+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeTxULCBLLCBFPihcbiAga2V5OiAodmFsdWU6IFQpID0+IEssXG4gIG9wdGlvbnM6IEdyb3VwQnlPcHRpb25zV2l0aEVsZW1lbnQ8SywgRSwgVD5cbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgR3JvdXBlZE9ic2VydmFibGU8SywgRT4+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeTxULCBLIGV4dGVuZHMgVD4oXG4gIGtleTogKHZhbHVlOiBUKSA9PiB2YWx1ZSBpcyBLXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIEdyb3VwZWRPYnNlcnZhYmxlPHRydWUsIEs+IHwgR3JvdXBlZE9ic2VydmFibGU8ZmFsc2UsIEV4Y2x1ZGU8VCwgSz4+PjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQnk8VCwgSz4oa2V5OiAodmFsdWU6IFQpID0+IEspOiBPcGVyYXRvckZ1bmN0aW9uPFQsIEdyb3VwZWRPYnNlcnZhYmxlPEssIFQ+PjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgdGhlIG9wdGlvbnMgcGFyYW1ldGVyIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5PFQsIEs+KFxuICBrZXk6ICh2YWx1ZTogVCkgPT4gSyxcbiAgZWxlbWVudDogdm9pZCxcbiAgZHVyYXRpb246IChncm91cGVkOiBHcm91cGVkT2JzZXJ2YWJsZTxLLCBUPikgPT4gT2JzZXJ2YWJsZTxhbnk+XG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIEdyb3VwZWRPYnNlcnZhYmxlPEssIFQ+PjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgdGhlIG9wdGlvbnMgcGFyYW1ldGVyIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5PFQsIEssIFI+KFxuICBrZXk6ICh2YWx1ZTogVCkgPT4gSyxcbiAgZWxlbWVudD86ICh2YWx1ZTogVCkgPT4gUixcbiAgZHVyYXRpb24/OiAoZ3JvdXBlZDogR3JvdXBlZE9ic2VydmFibGU8SywgUj4pID0+IE9ic2VydmFibGU8YW55PlxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBHcm91cGVkT2JzZXJ2YWJsZTxLLCBSPj47XG5cbi8qKlxuICogR3JvdXBzIHRoZSBpdGVtcyBlbWl0dGVkIGJ5IGFuIE9ic2VydmFibGUgYWNjb3JkaW5nIHRvIGEgc3BlY2lmaWVkIGNyaXRlcmlvbixcbiAqIGFuZCBlbWl0cyB0aGVzZSBncm91cGVkIGl0ZW1zIGFzIGBHcm91cGVkT2JzZXJ2YWJsZXNgLCBvbmVcbiAqIHtAbGluayBHcm91cGVkT2JzZXJ2YWJsZX0gcGVyIGdyb3VwLlxuICpcbiAqICFbXShncm91cEJ5LnBuZylcbiAqXG4gKiBXaGVuIHRoZSBPYnNlcnZhYmxlIGVtaXRzIGFuIGl0ZW0sIGEga2V5IGlzIGNvbXB1dGVkIGZvciB0aGlzIGl0ZW0gd2l0aCB0aGUga2V5IGZ1bmN0aW9uLlxuICpcbiAqIElmIGEge0BsaW5rIEdyb3VwZWRPYnNlcnZhYmxlfSBmb3IgdGhpcyBrZXkgZXhpc3RzLCB0aGlzIHtAbGluayBHcm91cGVkT2JzZXJ2YWJsZX0gZW1pdHMuIE90aGVyd2lzZSwgYSBuZXdcbiAqIHtAbGluayBHcm91cGVkT2JzZXJ2YWJsZX0gZm9yIHRoaXMga2V5IGlzIGNyZWF0ZWQgYW5kIGVtaXRzLlxuICpcbiAqIEEge0BsaW5rIEdyb3VwZWRPYnNlcnZhYmxlfSByZXByZXNlbnRzIHZhbHVlcyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgZ3JvdXAgcmVwcmVzZW50ZWQgYnkgYSBjb21tb24ga2V5LiBUaGUgY29tbW9uXG4gKiBrZXkgaXMgYXZhaWxhYmxlIGFzIHRoZSBga2V5YCBmaWVsZCBvZiBhIHtAbGluayBHcm91cGVkT2JzZXJ2YWJsZX0gaW5zdGFuY2UuXG4gKlxuICogVGhlIGVsZW1lbnRzIGVtaXR0ZWQgYnkge0BsaW5rIEdyb3VwZWRPYnNlcnZhYmxlfXMgYXJlIGJ5IGRlZmF1bHQgdGhlIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIE9ic2VydmFibGUsIG9yIGVsZW1lbnRzXG4gKiByZXR1cm5lZCBieSB0aGUgZWxlbWVudCBmdW5jdGlvbi5cbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIEdyb3VwIG9iamVjdHMgYnkgYGlkYCBhbmQgcmV0dXJuIGFzIGFycmF5XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBncm91cEJ5LCBtZXJnZU1hcCwgcmVkdWNlIH0gZnJvbSAncnhqcyc7XG4gKlxuICogb2YoXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdKYXZhU2NyaXB0JyB9LFxuICogICB7IGlkOiAyLCBuYW1lOiAnUGFyY2VsJyB9LFxuICogICB7IGlkOiAyLCBuYW1lOiAnd2VicGFjaycgfSxcbiAqICAgeyBpZDogMSwgbmFtZTogJ1R5cGVTY3JpcHQnIH0sXG4gKiAgIHsgaWQ6IDMsIG5hbWU6ICdUU0xpbnQnIH1cbiAqICkucGlwZShcbiAqICAgZ3JvdXBCeShwID0+IHAuaWQpLFxuICogICBtZXJnZU1hcChncm91cCQgPT4gZ3JvdXAkLnBpcGUocmVkdWNlKChhY2MsIGN1cikgPT4gWy4uLmFjYywgY3VyXSwgW10pKSlcbiAqIClcbiAqIC5zdWJzY3JpYmUocCA9PiBjb25zb2xlLmxvZyhwKSk7XG4gKlxuICogLy8gZGlzcGxheXM6XG4gKiAvLyBbeyBpZDogMSwgbmFtZTogJ0phdmFTY3JpcHQnIH0sIHsgaWQ6IDEsIG5hbWU6ICdUeXBlU2NyaXB0J31dXG4gKiAvLyBbeyBpZDogMiwgbmFtZTogJ1BhcmNlbCcgfSwgeyBpZDogMiwgbmFtZTogJ3dlYnBhY2snfV1cbiAqIC8vIFt7IGlkOiAzLCBuYW1lOiAnVFNMaW50JyB9XVxuICogYGBgXG4gKlxuICogUGl2b3QgZGF0YSBvbiB0aGUgYGlkYCBmaWVsZFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBvZiwgZ3JvdXBCeSwgbWVyZ2VNYXAsIHJlZHVjZSwgbWFwIH0gZnJvbSAncnhqcyc7XG4gKlxuICogb2YoXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdKYXZhU2NyaXB0JyB9LFxuICogICB7IGlkOiAyLCBuYW1lOiAnUGFyY2VsJyB9LFxuICogICB7IGlkOiAyLCBuYW1lOiAnd2VicGFjaycgfSxcbiAqICAgeyBpZDogMSwgbmFtZTogJ1R5cGVTY3JpcHQnIH0sXG4gKiAgIHsgaWQ6IDMsIG5hbWU6ICdUU0xpbnQnIH1cbiAqICkucGlwZShcbiAqICAgZ3JvdXBCeShwID0+IHAuaWQsIHsgZWxlbWVudDogcCA9PiBwLm5hbWUgfSksXG4gKiAgIG1lcmdlTWFwKGdyb3VwJCA9PiBncm91cCQucGlwZShyZWR1Y2UoKGFjYywgY3VyKSA9PiBbLi4uYWNjLCBjdXJdLCBbYCR7IGdyb3VwJC5rZXkgfWBdKSkpLFxuICogICBtYXAoYXJyID0+ICh7IGlkOiBwYXJzZUludChhcnJbMF0sIDEwKSwgdmFsdWVzOiBhcnIuc2xpY2UoMSkgfSkpXG4gKiApXG4gKiAuc3Vic2NyaWJlKHAgPT4gY29uc29sZS5sb2cocCkpO1xuICpcbiAqIC8vIGRpc3BsYXlzOlxuICogLy8geyBpZDogMSwgdmFsdWVzOiBbICdKYXZhU2NyaXB0JywgJ1R5cGVTY3JpcHQnIF0gfVxuICogLy8geyBpZDogMiwgdmFsdWVzOiBbICdQYXJjZWwnLCAnd2VicGFjaycgXSB9XG4gKiAvLyB7IGlkOiAzLCB2YWx1ZXM6IFsgJ1RTTGludCcgXSB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ga2V5IEEgZnVuY3Rpb24gdGhhdCBleHRyYWN0cyB0aGUga2V5XG4gKiBmb3IgZWFjaCBpdGVtLlxuICogQHBhcmFtIGVsZW1lbnQgQSBmdW5jdGlvbiB0aGF0IGV4dHJhY3RzIHRoZVxuICogcmV0dXJuIGVsZW1lbnQgZm9yIGVhY2ggaXRlbS5cbiAqIEBwYXJhbSBkdXJhdGlvblxuICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0byBkZXRlcm1pbmUgaG93IGxvbmcgZWFjaCBncm91cCBzaG91bGRcbiAqIGV4aXN0LlxuICogQHBhcmFtIGNvbm5lY3RvciBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhblxuICogaW50ZXJtZWRpYXRlIFN1YmplY3QgdGhyb3VnaCB3aGljaCBncm91cGVkIGVsZW1lbnRzIGFyZSBlbWl0dGVkLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgR3JvdXBlZE9ic2VydmFibGVzLFxuICogZWFjaCBvZiB3aGljaCBjb3JyZXNwb25kcyB0byBhIHVuaXF1ZSBrZXkgdmFsdWUgYW5kIGVhY2ggb2Ygd2hpY2ggZW1pdHNcbiAqIHRob3NlIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgc2hhcmUgdGhhdCBrZXkgdmFsdWUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBvcHRpb25zIHBhcmFtZXRlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeTxULCBLLCBSPihcbiAga2V5OiAodmFsdWU6IFQpID0+IEssXG4gIGVsZW1lbnQ/OiAodmFsdWU6IFQpID0+IFIsXG4gIGR1cmF0aW9uPzogKGdyb3VwZWQ6IEdyb3VwZWRPYnNlcnZhYmxlPEssIFI+KSA9PiBPYnNlcnZhYmxlPGFueT4sXG4gIGNvbm5lY3Rvcj86ICgpID0+IFN1YmplY3Q8Uj5cbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgR3JvdXBlZE9ic2VydmFibGU8SywgUj4+O1xuXG4vLyBJbXBsXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeTxULCBLLCBSPihcbiAga2V5U2VsZWN0b3I6ICh2YWx1ZTogVCkgPT4gSyxcbiAgZWxlbWVudE9yT3B0aW9ucz86ICgodmFsdWU6IGFueSkgPT4gYW55KSB8IHZvaWQgfCBCYXNpY0dyb3VwQnlPcHRpb25zPEssIFQ+IHwgR3JvdXBCeU9wdGlvbnNXaXRoRWxlbWVudDxLLCBSLCBUPixcbiAgZHVyYXRpb24/OiAoZ3JvdXBlZDogR3JvdXBlZE9ic2VydmFibGU8YW55LCBhbnk+KSA9PiBPYnNlcnZhYmxlSW5wdXQ8YW55PixcbiAgY29ubmVjdG9yPzogKCkgPT4gU3ViamVjdExpa2U8YW55PlxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBHcm91cGVkT2JzZXJ2YWJsZTxLLCBSPj4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IGVsZW1lbnQ6ICgodmFsdWU6IGFueSkgPT4gYW55KSB8IHZvaWQ7XG4gICAgaWYgKCFlbGVtZW50T3JPcHRpb25zIHx8IHR5cGVvZiBlbGVtZW50T3JPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlbGVtZW50ID0gZWxlbWVudE9yT3B0aW9ucyBhcyAoKHZhbHVlOiBhbnkpID0+IGFueSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICh7IGR1cmF0aW9uLCBlbGVtZW50LCBjb25uZWN0b3IgfSA9IGVsZW1lbnRPck9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIEEgbG9va3VwIGZvciB0aGUgZ3JvdXBzIHRoYXQgd2UgaGF2ZSBzbyBmYXIuXG4gICAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcDxLLCBTdWJqZWN0TGlrZTxhbnk+PigpO1xuXG4gICAgLy8gVXNlZCBmb3Igbm90aWZ5aW5nIGFsbCBncm91cHMgYW5kIHRoZSBzdWJzY3JpYmVyIGluIHRoZSBzYW1lIHdheS5cbiAgICBjb25zdCBub3RpZnkgPSAoY2I6IChncm91cDogT2JzZXJ2ZXI8YW55PikgPT4gdm9pZCkgPT4ge1xuICAgICAgZ3JvdXBzLmZvckVhY2goY2IpO1xuICAgICAgY2Ioc3Vic2NyaWJlcik7XG4gICAgfTtcblxuICAgIC8vIFVzZWQgdG8gaGFuZGxlIGVycm9ycyBmcm9tIHRoZSBzb3VyY2UsIEFORCBlcnJvcnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlXG4gICAgLy8gbmV4dCBjYWxsIGZyb20gdGhlIHNvdXJjZS5cbiAgICBjb25zdCBoYW5kbGVFcnJvciA9IChlcnI6IGFueSkgPT4gbm90aWZ5KChjb25zdW1lcikgPT4gY29uc3VtZXIuZXJyb3IoZXJyKSk7XG5cbiAgICAvLyBUaGUgbnVtYmVyIG9mIGFjdGl2ZWx5IHN1YnNjcmliZWQgZ3JvdXBzXG4gICAgbGV0IGFjdGl2ZUdyb3VwcyA9IDA7XG5cbiAgICAvLyBXaGV0aGVyIG9yIG5vdCB0ZWFyZG93biB3YXMgYXR0ZW1wdGVkIG9uIHRoaXMgc3Vic2NyaXB0aW9uLlxuICAgIGxldCB0ZWFyZG93bkF0dGVtcHRlZCA9IGZhbHNlO1xuXG4gICAgLy8gQ2FwdHVyaW5nIGEgcmVmZXJlbmNlIHRvIHRoaXMsIGJlY2F1c2Ugd2UgbmVlZCBhIGhhbmRsZSB0byBpdFxuICAgIC8vIGluIGBjcmVhdGVHcm91cGVkT2JzZXJ2YWJsZWAgYmVsb3cuIFRoaXMgaXMgd2hhdCB3ZSB1c2UgdG9cbiAgICAvLyBzdWJzY3JpYmUgdG8gb3VyIHNvdXJjZSBvYnNlcnZhYmxlLiBUaGlzIHNvbWV0aW1lcyBuZWVkcyB0byBiZSB1bnN1YnNjcmliZWRcbiAgICAvLyBvdXQtb2YtYmFuZCB3aXRoIG91ciBgc3Vic2NyaWJlcmAgd2hpY2ggaXMgdGhlIGRvd25zdHJlYW0gc3Vic2NyaWJlciwgb3IgZGVzdGluYXRpb24sXG4gICAgLy8gaW4gY2FzZXMgd2hlcmUgYSB1c2VyIHVuc3Vic2NyaWJlcyBmcm9tIHRoZSBtYWluIHJlc3VsdGluZyBzdWJzY3JpcHRpb24sIGJ1dFxuICAgIC8vIHN0aWxsIGhhcyBncm91cHMgZnJvbSB0aGlzIHN1YnNjcmlwdGlvbiBzdWJzY3JpYmVkIGFuZCB3b3VsZCBleHBlY3QgdmFsdWVzIGZyb20gaXRcbiAgICAvLyBDb25zaWRlcjogIGBzb3VyY2UucGlwZShncm91cEJ5KGZuKSwgdGFrZSgyKSlgLlxuICAgIGNvbnN0IGdyb3VwQnlTb3VyY2VTdWJzY3JpYmVyID0gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihcbiAgICAgIHN1YnNjcmliZXIsXG4gICAgICAodmFsdWU6IFQpID0+IHtcbiAgICAgICAgLy8gQmVjYXVzZSB3ZSBoYXZlIHRvIG5vdGlmeSBhbGwgZ3JvdXBzIG9mIGFueSBlcnJvcnMgdGhhdCBvY2N1ciBpbiBoZXJlLFxuICAgICAgICAvLyB3ZSBoYXZlIHRvIGFkZCBvdXIgb3duIHRyeS9jYXRjaCB0byBlbnN1cmUgdGhhdCB0aG9zZSBlcnJvcnMgYXJlIHByb3BhZ2F0ZWQuXG4gICAgICAgIC8vIE9wZXJhdG9yU3Vic2NyaWJlciB3aWxsIG9ubHkgc2VuZCB0aGUgZXJyb3IgdG8gdGhlIG1haW4gc3Vic2NyaWJlci5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBrZXlTZWxlY3Rvcih2YWx1ZSk7XG5cbiAgICAgICAgICBsZXQgZ3JvdXAgPSBncm91cHMuZ2V0KGtleSk7XG4gICAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIG91ciBncm91cCBzdWJqZWN0XG4gICAgICAgICAgICBncm91cHMuc2V0KGtleSwgKGdyb3VwID0gY29ubmVjdG9yID8gY29ubmVjdG9yKCkgOiBuZXcgU3ViamVjdDxhbnk+KCkpKTtcblxuICAgICAgICAgICAgLy8gRW1pdCB0aGUgZ3JvdXBlZCBvYnNlcnZhYmxlLiBOb3RlIHRoYXQgd2UgY2FuJ3QgZG8gYSBzaW1wbGUgYGFzT2JzZXJ2YWJsZSgpYCBoZXJlLFxuICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgZ3JvdXBlZCBvYnNlcnZhYmxlIGhhcyBzcGVjaWFsIHNlbWFudGljcyBhcm91bmQgcmVmZXJlbmNlIGNvdW50aW5nXG4gICAgICAgICAgICAvLyB0byBlbnN1cmUgd2UgZG9uJ3Qgc2V2ZXIgb3VyIGNvbm5lY3Rpb24gdG8gdGhlIHNvdXJjZSBwcmVtYXR1cmVseS5cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSBjcmVhdGVHcm91cGVkT2JzZXJ2YWJsZShrZXksIGdyb3VwKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChncm91cGVkKTtcblxuICAgICAgICAgICAgaWYgKGR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihcbiAgICAgICAgICAgICAgICAvLyBQcm92aWRpbmcgdGhlIGdyb3VwIGhlcmUgZW5zdXJlcyB0aGF0IGl0IGlzIGRpc3Bvc2VkIG9mIC0tIHZpYSBgdW5zdWJzY3JpYmVgIC0tXG4gICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgZHVyYXRpb24gc3Vic2NyaXB0aW9uIGlzIHRvcm4gZG93bi4gVGhhdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlblxuICAgICAgICAgICAgICAgIC8vIGlmIHNvbWVvbmUgaG9sZHMgYSBoYW5kbGUgdG8gdGhlIGdyb3VwZWQgb2JzZXJ2YWJsZSBhbmQgdHJpZXMgdG8gc3Vic2NyaWJlIHRvIGl0XG4gICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNvdXJjZSBoYXMgYmVlbiBzZXZlcmVkLCB0aGV5IHdpbGwgZ2V0IGFuXG4gICAgICAgICAgICAgICAgLy8gYE9iamVjdFVuc3Vic2NyaWJlZEVycm9yYCBhbmQga25vdyB0aGV5IGNhbid0IHBvc3NpYmx5IGdldCBhbnkgbm90aWZpY2F0aW9ucy5cbiAgICAgICAgICAgICAgICBncm91cCBhcyBhbnksXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gT3VyIGR1cmF0aW9uIG5vdGlmaWVkISBXZSBjYW4gY29tcGxldGUgdGhlIGdyb3VwLlxuICAgICAgICAgICAgICAgICAgLy8gVGhlIGdyb3VwIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtYXAgaW4gdGhlIGZpbmFsaXphdGlvbiBwaGFzZS5cbiAgICAgICAgICAgICAgICAgIGdyb3VwIS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8gQ29tcGxldGlvbnMgYXJlIGFsc28gc2VudCB0byB0aGUgZ3JvdXAsIGJ1dCBqdXN0IHRoZSBncm91cC5cbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgLy8gRXJyb3JzIG9uIHRoZSBkdXJhdGlvbiBzdWJzY3JpYmVyIGFyZSBzZW50IHRvIHRoZSBncm91cFxuICAgICAgICAgICAgICAgIC8vIGJ1dCBvbmx5IHRoZSBncm91cC4gVGhleSBhcmUgbm90IHNlbnQgdG8gdGhlIG1haW4gc3Vic2NyaXB0aW9uLlxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAvLyBGaW5hbGl6YXRpb246IFJlbW92ZSB0aGlzIGdyb3VwIGZyb20gb3VyIG1hcC5cbiAgICAgICAgICAgICAgICAoKSA9PiBncm91cHMuZGVsZXRlKGtleSlcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAvLyBTdGFydCBvdXIgZHVyYXRpb24gbm90aWZpZXIuXG4gICAgICAgICAgICAgIGdyb3VwQnlTb3VyY2VTdWJzY3JpYmVyLmFkZChpbm5lckZyb20oZHVyYXRpb24oZ3JvdXBlZCkpLnN1YnNjcmliZShkdXJhdGlvblN1YnNjcmliZXIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTZW5kIHRoZSB2YWx1ZSB0byBvdXIgZ3JvdXAuXG4gICAgICAgICAgZ3JvdXAubmV4dChlbGVtZW50ID8gZWxlbWVudCh2YWx1ZSkgOiB2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBTb3VyY2UgY29tcGxldGVzLlxuICAgICAgKCkgPT4gbm90aWZ5KChjb25zdW1lcikgPT4gY29uc3VtZXIuY29tcGxldGUoKSksXG4gICAgICAvLyBFcnJvciBmcm9tIHRoZSBzb3VyY2UuXG4gICAgICBoYW5kbGVFcnJvcixcbiAgICAgIC8vIEZyZWUgdXAgbWVtb3J5LlxuICAgICAgLy8gV2hlbiB0aGUgc291cmNlIHN1YnNjcmlwdGlvbiBpcyBfZmluYWxseV8gdG9ybiBkb3duLCByZWxlYXNlIHRoZSBzdWJqZWN0cyBhbmQga2V5c1xuICAgICAgLy8gaW4gb3VyIGdyb3VwcyBNYXAsIHRoZXkgbWF5IGJlIHF1aXRlIGxhcmdlIGFuZCB3ZSBkb24ndCB3YW50IHRvIGtlZXAgdGhlbSBhcm91bmQgaWYgd2VcbiAgICAgIC8vIGRvbid0IGhhdmUgdG8uXG4gICAgICAoKSA9PiBncm91cHMuY2xlYXIoKSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGVhcmRvd25BdHRlbXB0ZWQgPSB0cnVlO1xuICAgICAgICAvLyBXZSBvbmx5IGtpbGwgb3VyIHN1YnNjcmlwdGlvbiB0byB0aGUgc291cmNlIGlmIHdlIGhhdmVcbiAgICAgICAgLy8gbm8gYWN0aXZlIGdyb3Vwcy4gQXMgc3RhdGVkIGFib3ZlLCBjb25zaWRlciB0aGlzIHNjZW5hcmlvOlxuICAgICAgICAvLyBzb3VyY2UkLnBpcGUoZ3JvdXBCeShmbiksIHRha2UoMikpLlxuICAgICAgICByZXR1cm4gYWN0aXZlR3JvdXBzID09PSAwO1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gdGhlIHNvdXJjZVxuICAgIHNvdXJjZS5zdWJzY3JpYmUoZ3JvdXBCeVNvdXJjZVN1YnNjcmliZXIpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgYWN0dWFsIGdyb3VwZWQgb2JzZXJ2YWJsZSByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgb2YgdGhlIGdyb3VwXG4gICAgICogQHBhcmFtIGdyb3VwU3ViamVjdCBUaGUgc3ViamVjdCB0aGF0IGZ1ZWxzIHRoZSBncm91cFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUdyb3VwZWRPYnNlcnZhYmxlKGtleTogSywgZ3JvdXBTdWJqZWN0OiBTdWJqZWN0TGlrZTxhbnk+KSB7XG4gICAgICBjb25zdCByZXN1bHQ6IGFueSA9IG5ldyBPYnNlcnZhYmxlPFQ+KChncm91cFN1YnNjcmliZXIpID0+IHtcbiAgICAgICAgYWN0aXZlR3JvdXBzKys7XG4gICAgICAgIGNvbnN0IGlubmVyU3ViID0gZ3JvdXBTdWJqZWN0LnN1YnNjcmliZShncm91cFN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgLy8gV2UgY2FuIGtpbGwgdGhlIHN1YnNjcmlwdGlvbiB0byBvdXIgc291cmNlIGlmIHdlIG5vdyBoYXZlIG5vIG1vcmVcbiAgICAgICAgICAvLyBhY3RpdmUgZ3JvdXBzIHN1YnNjcmliZWQsIGFuZCBhIGZpbmFsaXphdGlvbiB3YXMgYWxyZWFkeSBhdHRlbXB0ZWQgb25cbiAgICAgICAgICAvLyB0aGUgc291cmNlLlxuICAgICAgICAgIC0tYWN0aXZlR3JvdXBzID09PSAwICYmIHRlYXJkb3duQXR0ZW1wdGVkICYmIGdyb3VwQnlTb3VyY2VTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5rZXkgPSBrZXk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQW4gb2JzZXJ2YWJsZSBvZiB2YWx1ZXMgdGhhdCBpcyB0aGUgZW1pdHRlZCBieSB0aGUgcmVzdWx0IG9mIGEge0BsaW5rIGdyb3VwQnl9IG9wZXJhdG9yLFxuICogY29udGFpbnMgYSBga2V5YCBwcm9wZXJ0eSBmb3IgdGhlIGdyb3VwaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwZWRPYnNlcnZhYmxlPEssIFQ+IGV4dGVuZHMgT2JzZXJ2YWJsZTxUPiB7XG4gIC8qKlxuICAgKiBUaGUga2V5IHZhbHVlIGZvciB0aGUgZ3JvdXBlZCBub3RpZmljYXRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBLO1xufVxuIiwgImltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuLyoqXG4gKiBFbWl0cyBgZmFsc2VgIGlmIHRoZSBpbnB1dCBPYnNlcnZhYmxlIGVtaXRzIGFueSB2YWx1ZXMsIG9yIGVtaXRzIGB0cnVlYCBpZiB0aGVcbiAqIGlucHV0IE9ic2VydmFibGUgY29tcGxldGVzIHdpdGhvdXQgZW1pdHRpbmcgYW55IHZhbHVlcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+VGVsbHMgd2hldGhlciBhbnkgdmFsdWVzIGFyZSBlbWl0dGVkIGJ5IGFuIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqICFbXShpc0VtcHR5LnBuZylcbiAqXG4gKiBgaXNFbXB0eWAgdHJhbnNmb3JtcyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdmFsdWVzIGludG8gYW4gT2JzZXJ2YWJsZSB0aGF0XG4gKiBlbWl0cyBhIHNpbmdsZSBib29sZWFuIHZhbHVlIHJlcHJlc2VudGluZyB3aGV0aGVyIG9yIG5vdCBhbnkgdmFsdWVzIHdlcmVcbiAqIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBBcyBzb29uIGFzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBlbWl0cyBhXG4gKiB2YWx1ZSwgYGlzRW1wdHlgIHdpbGwgZW1pdCBhIGBmYWxzZWAgYW5kIGNvbXBsZXRlLiAgSWYgdGhlIHNvdXJjZSBPYnNlcnZhYmxlXG4gKiBjb21wbGV0ZXMgaGF2aW5nIG5vdCBlbWl0dGVkIGFueXRoaW5nLCBgaXNFbXB0eWAgd2lsbCBlbWl0IGEgYHRydWVgIGFuZFxuICogY29tcGxldGUuXG4gKlxuICogQSBzaW1pbGFyIGVmZmVjdCBjb3VsZCBiZSBhY2hpZXZlZCB3aXRoIHtAbGluayBjb3VudH0sIGJ1dCBgaXNFbXB0eWAgY2FuIGVtaXRcbiAqIGEgYGZhbHNlYCB2YWx1ZSBzb29uZXIuXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBFbWl0IGBmYWxzZWAgZm9yIGEgbm9uLWVtcHR5IE9ic2VydmFibGVcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgU3ViamVjdCwgaXNFbXB0eSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHNvdXJjZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAqIGNvbnN0IHJlc3VsdCA9IHNvdXJjZS5waXBlKGlzRW1wdHkoKSk7XG4gKlxuICogc291cmNlLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogc291cmNlLm5leHQoJ2EnKTtcbiAqIHNvdXJjZS5uZXh0KCdiJyk7XG4gKiBzb3VyY2UubmV4dCgnYycpO1xuICogc291cmNlLmNvbXBsZXRlKCk7XG4gKlxuICogLy8gT3V0cHV0c1xuICogLy8gJ2EnXG4gKiAvLyBmYWxzZVxuICogLy8gJ2InXG4gKiAvLyAnYydcbiAqIGBgYFxuICpcbiAqIEVtaXQgYHRydWVgIGZvciBhbiBlbXB0eSBPYnNlcnZhYmxlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IEVNUFRZLCBpc0VtcHR5IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgcmVzdWx0ID0gRU1QVFkucGlwZShpc0VtcHR5KCkpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBPdXRwdXRzXG4gKiAvLyB0cnVlXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBjb3VudH1cbiAqIEBzZWUge0BsaW5rIEVNUFRZfVxuICpcbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGJvb2xlYW4gdmFsdWVcbiAqIGluZGljYXRpbmcgd2hldGhlciB0aGUgc291cmNlIE9ic2VydmFibGUgd2FzIGVtcHR5IG9yIG5vdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHk8VD4oKTogT3BlcmF0b3JGdW5jdGlvbjxULCBib29sZWFuPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGZhbHNlKTtcbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgRW1wdHlFcnJvciB9IGZyb20gJy4uL3V0aWwvRW1wdHlFcnJvcic7XG5pbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uLCBUcnV0aHlUeXBlc09mIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnLi9maWx0ZXInO1xuaW1wb3J0IHsgdGFrZUxhc3QgfSBmcm9tICcuL3Rha2VMYXN0JztcbmltcG9ydCB7IHRocm93SWZFbXB0eSB9IGZyb20gJy4vdGhyb3dJZkVtcHR5JztcbmltcG9ydCB7IGRlZmF1bHRJZkVtcHR5IH0gZnJvbSAnLi9kZWZhdWx0SWZFbXB0eSc7XG5pbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uL3V0aWwvaWRlbnRpdHknO1xuXG5leHBvcnQgZnVuY3Rpb24gbGFzdDxUPihwcmVkaWNhdGU6IEJvb2xlYW5Db25zdHJ1Y3Rvcik6IE9wZXJhdG9yRnVuY3Rpb248VCwgVHJ1dGh5VHlwZXNPZjxUPj47XG5leHBvcnQgZnVuY3Rpb24gbGFzdDxULCBEPihwcmVkaWNhdGU6IEJvb2xlYW5Db25zdHJ1Y3RvciwgZGVmYXVsdFZhbHVlOiBEKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUcnV0aHlUeXBlc09mPFQ+IHwgRD47XG5leHBvcnQgZnVuY3Rpb24gbGFzdDxULCBEID0gVD4ocHJlZGljYXRlPzogbnVsbCwgZGVmYXVsdFZhbHVlPzogRCk6IE9wZXJhdG9yRnVuY3Rpb248VCwgVCB8IEQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGxhc3Q8VCwgUyBleHRlbmRzIFQ+KFxuICBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiB2YWx1ZSBpcyBTLFxuICBkZWZhdWx0VmFsdWU/OiBTXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFM+O1xuZXhwb3J0IGZ1bmN0aW9uIGxhc3Q8VCwgRCA9IFQ+KFxuICBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBib29sZWFuLFxuICBkZWZhdWx0VmFsdWU/OiBEXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFQgfCBEPjtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBvbmx5IHRoZSBsYXN0IGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBJdCBvcHRpb25hbGx5IHRha2VzIGEgcHJlZGljYXRlIGZ1bmN0aW9uIGFzIGEgcGFyYW1ldGVyLCBpbiB3aGljaCBjYXNlLCByYXRoZXIgdGhhbiBlbWl0dGluZ1xuICogdGhlIGxhc3QgaXRlbSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgdGhlIHJlc3VsdGluZyBPYnNlcnZhYmxlIHdpbGwgZW1pdCB0aGUgbGFzdCBpdGVtXG4gKiBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0aGF0IHNhdGlzZmllcyB0aGUgcHJlZGljYXRlLlxuICpcbiAqICFbXShsYXN0LnBuZylcbiAqXG4gKiBJdCB3aWxsIGVtaXQgYW4gZXJyb3Igbm90aWZpY2F0aW9uIGlmIHRoZSBzb3VyY2UgY29tcGxldGVzIHdpdGhvdXQgbm90aWZpY2F0aW9uIG9yIG9uZSB0aGF0IG1hdGNoZXNcbiAqIHRoZSBwcmVkaWNhdGUuIEl0IHJldHVybnMgdGhlIGxhc3QgdmFsdWUgb3IgaWYgYSBwcmVkaWNhdGUgaXMgcHJvdmlkZWQgbGFzdCB2YWx1ZSB0aGF0IG1hdGNoZXMgdGhlXG4gKiBwcmVkaWNhdGUuIEl0IHJldHVybnMgdGhlIGdpdmVuIGRlZmF1bHQgdmFsdWUgaWYgbm8gbm90aWZpY2F0aW9uIGlzIGVtaXR0ZWQgb3IgbWF0Y2hlcyB0aGUgcHJlZGljYXRlLlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogTGFzdCBhbHBoYWJldCBmcm9tIHRoZSBzZXF1ZW5jZVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tLCBsYXN0IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgc291cmNlID0gZnJvbShbJ3gnLCAneScsICd6J10pO1xuICogY29uc3QgcmVzdWx0ID0gc291cmNlLnBpcGUobGFzdCgpKTtcbiAqXG4gKiByZXN1bHQuc3Vic2NyaWJlKHZhbHVlID0+IGNvbnNvbGUubG9nKGBMYXN0IGFscGhhYmV0OiAkeyB2YWx1ZSB9YCkpO1xuICpcbiAqIC8vIE91dHB1dHNcbiAqIC8vIExhc3QgYWxwaGFiZXQ6IHpcbiAqIGBgYFxuICpcbiAqIERlZmF1bHQgdmFsdWUgd2hlbiB0aGUgdmFsdWUgaW4gdGhlIHByZWRpY2F0ZSBpcyBub3QgbWF0Y2hlZFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tLCBsYXN0IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgc291cmNlID0gZnJvbShbJ3gnLCAneScsICd6J10pO1xuICogY29uc3QgcmVzdWx0ID0gc291cmNlLnBpcGUobGFzdChjaGFyID0+IGNoYXIgPT09ICdhJywgJ25vdCBmb3VuZCcpKTtcbiAqXG4gKiByZXN1bHQuc3Vic2NyaWJlKHZhbHVlID0+IGNvbnNvbGUubG9nKGAnYScgaXMgJHsgdmFsdWUgfS5gKSk7XG4gKlxuICogLy8gT3V0cHV0c1xuICogLy8gJ2EnIGlzIG5vdCBmb3VuZC5cbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIHNraXB9XG4gKiBAc2VlIHtAbGluayBza2lwVW50aWx9XG4gKiBAc2VlIHtAbGluayBza2lwTGFzdH1cbiAqIEBzZWUge0BsaW5rIHNraXBXaGlsZX1cbiAqIEBzZWUge0BsaW5rIGZpcnN0fVxuICpcbiAqIEB0aHJvd3Mge0VtcHR5RXJyb3J9IERlbGl2ZXJzIGFuIGBFbXB0eUVycm9yYCB0byB0aGUgT2JzZXJ2ZXIncyBgZXJyb3JgXG4gKiBjYWxsYmFjayBpZiB0aGUgT2JzZXJ2YWJsZSBjb21wbGV0ZXMgYmVmb3JlIGFueSBgbmV4dGAgbm90aWZpY2F0aW9uIHdhcyBzZW50LlxuICpcbiAqIEBwYXJhbSBwcmVkaWNhdGUgVGhlIGNvbmRpdGlvbiBhbnkgc291cmNlIGVtaXR0ZWQgaXRlbSBoYXMgdG8gc2F0aXNmeS5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgZGVmYXVsdCB2YWx1ZSB0byBwcm92aWRlIGlmIGxhc3QgYHByZWRpY2F0ZWBcbiAqIGlzbid0IG1ldCBvciBubyB2YWx1ZXMgd2VyZSBlbWl0dGVkLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgb25seSB0aGUgbGFzdCBpdGVtXG4gKiBzYXRpc2Z5aW5nIHRoZSBnaXZlbiBjb25kaXRpb24gZnJvbSB0aGUgc291cmNlLCBvciBhbiBlcnJvciBub3RpZmljYXRpb25cbiAqIHdpdGggYW4gYEVtcHR5RXJyb3JgIG9iamVjdCBpZiBubyBzdWNoIGl0ZW1zIGFyZSBlbWl0dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGFzdDxULCBEPihcbiAgcHJlZGljYXRlPzogKCh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBib29sZWFuKSB8IG51bGwsXG4gIGRlZmF1bHRWYWx1ZT86IERcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgVCB8IEQ+IHtcbiAgY29uc3QgaGFzRGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyO1xuICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT5cbiAgICBzb3VyY2UucGlwZShcbiAgICAgIHByZWRpY2F0ZSA/IGZpbHRlcigodiwgaSkgPT4gcHJlZGljYXRlKHYsIGksIHNvdXJjZSkpIDogaWRlbnRpdHksXG4gICAgICB0YWtlTGFzdCgxKSxcbiAgICAgIGhhc0RlZmF1bHRWYWx1ZSA/IGRlZmF1bHRJZkVtcHR5KGRlZmF1bHRWYWx1ZSEpIDogdGhyb3dJZkVtcHR5KCgpID0+IG5ldyBFbXB0eUVycm9yKCkpXG4gICAgKTtcbn1cbiIsICJpbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICcuLi9Ob3RpZmljYXRpb24nO1xuaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYWxsIG9mIHRoZSBub3RpZmljYXRpb25zIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGFzIGBuZXh0YFxuICogZW1pc3Npb25zIG1hcmtlZCB3aXRoIHRoZWlyIG9yaWdpbmFsIHR5cGVzIHdpdGhpbiB7QGxpbmsgTm90aWZpY2F0aW9ufVxuICogb2JqZWN0cy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+V3JhcHMgYG5leHRgLCBgZXJyb3JgIGFuZCBgY29tcGxldGVgIGVtaXNzaW9ucyBpblxuICoge0BsaW5rIE5vdGlmaWNhdGlvbn0gb2JqZWN0cywgZW1pdHRlZCBhcyBgbmV4dGAgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICogPC9zcGFuPlxuICpcbiAqICFbXShtYXRlcmlhbGl6ZS5wbmcpXG4gKlxuICogYG1hdGVyaWFsaXplYCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhIGBuZXh0YCBub3RpZmljYXRpb24gZm9yIGVhY2hcbiAqIGBuZXh0YCwgYGVycm9yYCwgb3IgYGNvbXBsZXRlYCBlbWlzc2lvbiBvZiB0aGUgc291cmNlIE9ic2VydmFibGUuIFdoZW4gdGhlXG4gKiBzb3VyY2UgT2JzZXJ2YWJsZSBlbWl0cyBgY29tcGxldGVgLCB0aGUgb3V0cHV0IE9ic2VydmFibGUgd2lsbCBlbWl0IGBuZXh0YCBhc1xuICogYSBOb3RpZmljYXRpb24gb2YgdHlwZSBcImNvbXBsZXRlXCIsIGFuZCB0aGVuIGl0IHdpbGwgZW1pdCBgY29tcGxldGVgIGFzIHdlbGwuXG4gKiBXaGVuIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBlbWl0cyBgZXJyb3JgLCB0aGUgb3V0cHV0IHdpbGwgZW1pdCBgbmV4dGAgYXMgYVxuICogTm90aWZpY2F0aW9uIG9mIHR5cGUgXCJlcnJvclwiLCBhbmQgdGhlbiBgY29tcGxldGVgLlxuICpcbiAqIFRoaXMgb3BlcmF0b3IgaXMgdXNlZnVsIGZvciBwcm9kdWNpbmcgbWV0YWRhdGEgb2YgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCB0b1xuICogYmUgY29uc3VtZWQgYXMgYG5leHRgIGVtaXNzaW9ucy4gVXNlIGl0IGluIGNvbmp1bmN0aW9uIHdpdGhcbiAqIHtAbGluayBkZW1hdGVyaWFsaXplfS5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogQ29udmVydCBhIGZhdWx0eSBPYnNlcnZhYmxlIHRvIGFuIE9ic2VydmFibGUgb2YgTm90aWZpY2F0aW9uc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBvZiwgbWF0ZXJpYWxpemUsIG1hcCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGxldHRlcnMgPSBvZignYScsICdiJywgMTMsICdkJyk7XG4gKiBjb25zdCB1cHBlckNhc2UgPSBsZXR0ZXJzLnBpcGUobWFwKCh4OiBhbnkpID0+IHgudG9VcHBlckNhc2UoKSkpO1xuICogY29uc3QgbWF0ZXJpYWxpemVkID0gdXBwZXJDYXNlLnBpcGUobWF0ZXJpYWxpemUoKSk7XG4gKlxuICogbWF0ZXJpYWxpemVkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gKiAvLyAtIE5vdGlmaWNhdGlvbiB7IGtpbmQ6ICdOJywgdmFsdWU6ICdBJywgZXJyb3I6IHVuZGVmaW5lZCwgaGFzVmFsdWU6IHRydWUgfVxuICogLy8gLSBOb3RpZmljYXRpb24geyBraW5kOiAnTicsIHZhbHVlOiAnQicsIGVycm9yOiB1bmRlZmluZWQsIGhhc1ZhbHVlOiB0cnVlIH1cbiAqIC8vIC0gTm90aWZpY2F0aW9uIHsga2luZDogJ0UnLCB2YWx1ZTogdW5kZWZpbmVkLCBlcnJvcjogVHlwZUVycm9yIHsgbWVzc2FnZTogeC50b1VwcGVyQ2FzZSBpcyBub3QgYSBmdW5jdGlvbiB9LCBoYXNWYWx1ZTogZmFsc2UgfVxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgTm90aWZpY2F0aW9ufVxuICogQHNlZSB7QGxpbmsgZGVtYXRlcmlhbGl6ZX1cbiAqXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0c1xuICoge0BsaW5rIE5vdGlmaWNhdGlvbn0gb2JqZWN0cyB0aGF0IHdyYXAgdGhlIG9yaWdpbmFsIGVtaXNzaW9ucyBmcm9tIHRoZVxuICogc291cmNlIE9ic2VydmFibGUgd2l0aCBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGVyaWFsaXplPFQ+KCk6IE9wZXJhdG9yRnVuY3Rpb248VCwgTm90aWZpY2F0aW9uPFQ+ICYgT2JzZXJ2YWJsZU5vdGlmaWNhdGlvbjxUPj4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgc291cmNlLnN1YnNjcmliZShcbiAgICAgIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihcbiAgICAgICAgc3Vic2NyaWJlcixcbiAgICAgICAgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KE5vdGlmaWNhdGlvbi5jcmVhdGVOZXh0KHZhbHVlKSk7XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoTm90aWZpY2F0aW9uLmNyZWF0ZUNvbXBsZXRlKCkpO1xuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIHN1YnNjcmliZXIubmV4dChOb3RpZmljYXRpb24uY3JlYXRlRXJyb3IoZXJyKSk7XG4gICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgcmVkdWNlIH0gZnJvbSAnLi9yZWR1Y2UnO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5cbi8qKlxuICogVGhlIGBtYXhgIG9wZXJhdG9yIG9wZXJhdGVzIG9uIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBudW1iZXJzIChvciBpdGVtcyB0aGF0XG4gKiBjYW4gYmUgY29tcGFyZWQgd2l0aCBhIHByb3ZpZGVkIGZ1bmN0aW9uKSwgYW5kIHdoZW4gc291cmNlIE9ic2VydmFibGUgY29tcGxldGVzXG4gKiBpdCBlbWl0cyBhIHNpbmdsZSBpdGVtOiB0aGUgaXRlbSB3aXRoIHRoZSBsYXJnZXN0IHZhbHVlLlxuICpcbiAqICFbXShtYXgucG5nKVxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogR2V0IHRoZSBtYXhpbWFsIHZhbHVlIG9mIGEgc2VyaWVzIG9mIG51bWJlcnNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIG1heCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIG9mKDUsIDQsIDcsIDIsIDgpXG4gKiAgIC5waXBlKG1heCgpKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIE91dHB1dHNcbiAqIC8vIDhcbiAqIGBgYFxuICpcbiAqIFVzZSBhIGNvbXBhcmVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgbWF4aW1hbCBpdGVtXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBtYXggfSBmcm9tICdyeGpzJztcbiAqXG4gKiBvZihcbiAqICAgeyBhZ2U6IDcsIG5hbWU6ICdGb28nIH0sXG4gKiAgIHsgYWdlOiA1LCBuYW1lOiAnQmFyJyB9LFxuICogICB7IGFnZTogOSwgbmFtZTogJ0JlZXInIH1cbiAqICkucGlwZShcbiAqICAgbWF4KChhLCBiKSA9PiBhLmFnZSA8IGIuYWdlID8gLTEgOiAxKVxuICogKVxuICogLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgubmFtZSkpO1xuICpcbiAqIC8vIE91dHB1dHNcbiAqIC8vICdCZWVyJ1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgbWlufVxuICpcbiAqIEBwYXJhbSBjb21wYXJlciBPcHRpb25hbCBjb21wYXJlciBmdW5jdGlvbiB0aGF0IGl0IHdpbGwgdXNlIGluc3RlYWQgb2YgaXRzXG4gKiBkZWZhdWx0IHRvIGNvbXBhcmUgdGhlIHZhbHVlIG9mIHR3byBpdGVtcy5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW0gd2l0aCB0aGVcbiAqIGxhcmdlc3QgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXg8VD4oY29tcGFyZXI/OiAoeDogVCwgeTogVCkgPT4gbnVtYmVyKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgcmV0dXJuIHJlZHVjZShpc0Z1bmN0aW9uKGNvbXBhcmVyKSA/ICh4LCB5KSA9PiAoY29tcGFyZXIoeCwgeSkgPiAwID8geCA6IHkpIDogKHgsIHkpID0+ICh4ID4geSA/IHggOiB5KSk7XG59XG4iLCAiaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICcuL21lcmdlTWFwJztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBSZW5hbWVkIHRvIHtAbGluayBtZXJnZU1hcH0uIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC5cbiAqL1xuZXhwb3J0IGNvbnN0IGZsYXRNYXAgPSBtZXJnZU1hcDtcbiIsICJpbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZlZFZhbHVlT2YsIE9ic2VydmFibGVJbnB1dCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAnLi9tZXJnZU1hcCc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcblxuLyoqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OS4gVXNlIHtAbGluayBtZXJnZU1hcH0gaW5zdGVhZDogYG1lcmdlTWFwKCgpID0+IHJlc3VsdClgICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VNYXBUbzxPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PHVua25vd24+PihcbiAgaW5uZXJPYnNlcnZhYmxlOiBPLFxuICBjb25jdXJyZW50PzogbnVtYmVyXG4pOiBPcGVyYXRvckZ1bmN0aW9uPHVua25vd24sIE9ic2VydmVkVmFsdWVPZjxPPj47XG4vKipcbiAqIEBkZXByZWNhdGVkIFRoZSBgcmVzdWx0U2VsZWN0b3JgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBhbiBpbm5lciBgbWFwYCBpbnN0ZWFkLlxuICogRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvcmVzdWx0U2VsZWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTWFwVG88VCwgUiwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDx1bmtub3duPj4oXG4gIGlubmVyT2JzZXJ2YWJsZTogTyxcbiAgcmVzdWx0U2VsZWN0b3I6IChvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBPYnNlcnZlZFZhbHVlT2Y8Tz4sIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKSA9PiBSLFxuICBjb25jdXJyZW50PzogbnVtYmVyXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFI+O1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cblxuLyoqXG4gKiBQcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byB0aGUgc2FtZSBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBtdWx0aXBsZVxuICogdGltZXMgaW4gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIG1lcmdlTWFwfSwgYnV0IG1hcHMgZWFjaCB2YWx1ZSBhbHdheXNcbiAqIHRvIHRoZSBzYW1lIGlubmVyIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqICFbXShtZXJnZU1hcFRvLnBuZylcbiAqXG4gKiBNYXBzIGVhY2ggc291cmNlIHZhbHVlIHRvIHRoZSBnaXZlbiBPYnNlcnZhYmxlIGBpbm5lck9ic2VydmFibGVgIHJlZ2FyZGxlc3NcbiAqIG9mIHRoZSBzb3VyY2UgdmFsdWUsIGFuZCB0aGVuIG1lcmdlcyB0aG9zZSByZXN1bHRpbmcgT2JzZXJ2YWJsZXMgaW50byBvbmVcbiAqIHNpbmdsZSBPYnNlcnZhYmxlLCB3aGljaCBpcyB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIEZvciBlYWNoIGNsaWNrIGV2ZW50LCBzdGFydCBhbiBpbnRlcnZhbCBPYnNlcnZhYmxlIHRpY2tpbmcgZXZlcnkgMSBzZWNvbmRcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZU1hcFRvLCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCByZXN1bHQgPSBjbGlja3MucGlwZShtZXJnZU1hcFRvKGludGVydmFsKDEwMDApKSk7XG4gKlxuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcFRvfVxuICogQHNlZSB7QGxpbmsgbWVyZ2V9XG4gKiBAc2VlIHtAbGluayBtZXJnZUFsbH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VTY2FufVxuICogQHNlZSB7QGxpbmsgc3dpdGNoTWFwVG99XG4gKlxuICogQHBhcmFtIGlubmVyT2JzZXJ2YWJsZSBBbiBgT2JzZXJ2YWJsZUlucHV0YCB0byByZXBsYWNlIGVhY2ggdmFsdWUgZnJvbSB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHBhcmFtIGNvbmN1cnJlbnQgTWF4aW11bSBudW1iZXIgb2YgaW5wdXQgT2JzZXJ2YWJsZXMgYmVpbmcgc3Vic2NyaWJlZCB0b1xuICogY29uY3VycmVudGx5LlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgZnJvbSB0aGVcbiAqIGdpdmVuIGBpbm5lck9ic2VydmFibGVgLlxuICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHY5LiBVc2Uge0BsaW5rIG1lcmdlTWFwfSBpbnN0ZWFkOiBgbWVyZ2VNYXAoKCkgPT4gcmVzdWx0KWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTWFwVG88VCwgUiwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDx1bmtub3duPj4oXG4gIGlubmVyT2JzZXJ2YWJsZTogTyxcbiAgcmVzdWx0U2VsZWN0b3I/OiAoKG91dGVyVmFsdWU6IFQsIGlubmVyVmFsdWU6IE9ic2VydmVkVmFsdWVPZjxPPiwgb3V0ZXJJbmRleDogbnVtYmVyLCBpbm5lckluZGV4OiBudW1iZXIpID0+IFIpIHwgbnVtYmVyLFxuICBjb25jdXJyZW50OiBudW1iZXIgPSBJbmZpbml0eVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZlZFZhbHVlT2Y8Tz4gfCBSPiB7XG4gIGlmIChpc0Z1bmN0aW9uKHJlc3VsdFNlbGVjdG9yKSkge1xuICAgIHJldHVybiBtZXJnZU1hcCgoKSA9PiBpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yLCBjb25jdXJyZW50KTtcbiAgfVxuICBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAnbnVtYmVyJykge1xuICAgIGNvbmN1cnJlbnQgPSByZXN1bHRTZWxlY3RvcjtcbiAgfVxuICByZXR1cm4gbWVyZ2VNYXAoKCkgPT4gaW5uZXJPYnNlcnZhYmxlLCBjb25jdXJyZW50KTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXQsIE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IG1lcmdlSW50ZXJuYWxzIH0gZnJvbSAnLi9tZXJnZUludGVybmFscyc7XG5cbi8qKlxuICogQXBwbGllcyBhbiBhY2N1bXVsYXRvciBmdW5jdGlvbiBvdmVyIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aGVyZSB0aGVcbiAqIGFjY3VtdWxhdG9yIGZ1bmN0aW9uIGl0c2VsZiByZXR1cm5zIGFuIE9ic2VydmFibGUsIHRoZW4gZWFjaCBpbnRlcm1lZGlhdGVcbiAqIE9ic2VydmFibGUgcmV0dXJuZWQgaXMgbWVyZ2VkIGludG8gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIHNjYW59LCBidXQgdGhlIE9ic2VydmFibGVzIHJldHVybmVkXG4gKiBieSB0aGUgYWNjdW11bGF0b3IgYXJlIG1lcmdlZCBpbnRvIHRoZSBvdXRlciBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiBUaGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZSBgbWVyZ2VTY2FuYCBpcyBhbiBgYWNjdW11bGF0b3JgIGZ1bmN0aW9uIHdoaWNoIGlzXG4gKiBiZWluZyBjYWxsZWQgZXZlcnkgdGltZSB0aGUgc291cmNlIE9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZS4gYG1lcmdlU2NhbmAgd2lsbFxuICogc3Vic2NyaWJlIHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYGFjY3VtdWxhdG9yYCBmdW5jdGlvbiBhbmQgd2lsbCBlbWl0XG4gKiB2YWx1ZXMgdG8gdGhlIHN1YnNjcmliZXIgZW1pdHRlZCBieSBpbm5lciBPYnNlcnZhYmxlLlxuICpcbiAqIFRoZSBgYWNjdW11bGF0b3JgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCB3aXRoIHRocmVlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIGl0OlxuICogYGFjY2AsIGB2YWx1ZWAgYW5kIGBpbmRleGAuIFRoZSBgYWNjYCBwYXJhbWV0ZXIgaXMgdXNlZCBhcyB0aGUgc3RhdGUgcGFyYW1ldGVyXG4gKiB3aG9zZSB2YWx1ZSBpcyBpbml0aWFsbHkgc2V0IHRvIHRoZSBgc2VlZGAgcGFyYW1ldGVyICh0aGUgc2Vjb25kIHBhcmFtZXRlclxuICogcGFzc2VkIHRvIHRoZSBgbWVyZ2VTY2FuYCBvcGVyYXRvcikuXG4gKlxuICogYG1lcmdlU2NhbmAgaW50ZXJuYWxseSBrZWVwcyB0aGUgdmFsdWUgb2YgdGhlIGBhY2NgIHBhcmFtZXRlcjogYXMgbG9uZyBhcyB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlIGVtaXRzIHdpdGhvdXQgaW5uZXIgT2JzZXJ2YWJsZSBlbWl0dGluZywgdGhlIGBhY2NgIHdpbGwgYmVcbiAqIHNldCB0byBgc2VlZGAuIFRoZSBuZXh0IHRpbWUgdGhlIGlubmVyIE9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZSwgYG1lcmdlU2NhbmBcbiAqIHdpbGwgaW50ZXJuYWxseSByZW1lbWJlciBpdCBhbmQgaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBhY2N1bXVsYXRvcmBcbiAqIGZ1bmN0aW9uIGFzIGBhY2NgIHBhcmFtZXRlciB0aGUgbmV4dCB0aW1lIHNvdXJjZSBlbWl0cy5cbiAqXG4gKiBUaGUgYHZhbHVlYCBwYXJhbWV0ZXIgb2YgdGhlIGBhY2N1bXVsYXRvcmAgZnVuY3Rpb24gaXMgdGhlIHZhbHVlIGVtaXR0ZWQgYnkgdGhlXG4gKiBzb3VyY2UgT2JzZXJ2YWJsZSwgd2hpbGUgdGhlIGBpbmRleGAgaXMgYSBudW1iZXIgd2hpY2ggcmVwcmVzZW50IHRoZSBvcmRlciBvZiB0aGVcbiAqIGN1cnJlbnQgZW1pc3Npb24gYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBJdCBzdGFydHMgd2l0aCAwLlxuICpcbiAqIFRoZSBsYXN0IHBhcmFtZXRlciB0byB0aGUgYG1lcmdlU2NhbmAgaXMgdGhlIGBjb25jdXJyZW50YCB2YWx1ZSB3aGljaCBkZWZhdWx0c1xuICogdG8gSW5maW5pdHkuIEl0IHJlcHJlc2VudHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGlubmVyIE9ic2VydmFibGUgc3Vic2NyaXB0aW9uc1xuICogYXQgYSB0aW1lLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNsaWNrIGV2ZW50c1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIG1hcCwgbWVyZ2VTY2FuLCBvZiB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGNsaWNrJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCBvbmUkID0gY2xpY2skLnBpcGUobWFwKCgpID0+IDEpKTtcbiAqIGNvbnN0IHNlZWQgPSAwO1xuICogY29uc3QgY291bnQkID0gb25lJC5waXBlKFxuICogICBtZXJnZVNjYW4oKGFjYywgb25lKSA9PiBvZihhY2MgKyBvbmUpLCBzZWVkKVxuICogKTtcbiAqXG4gKiBjb3VudCQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHM6XG4gKiAvLyAxXG4gKiAvLyAyXG4gKiAvLyAzXG4gKiAvLyA0XG4gKiAvLyAuLi5hbmQgc28gb24gZm9yIGVhY2ggY2xpY2tcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIHNjYW59XG4gKiBAc2VlIHtAbGluayBzd2l0Y2hTY2FufVxuICpcbiAqIEBwYXJhbSBhY2N1bXVsYXRvciBUaGUgYWNjdW11bGF0b3IgZnVuY3Rpb24gY2FsbGVkIG9uIGVhY2ggc291cmNlIHZhbHVlLlxuICogQHBhcmFtIHNlZWQgVGhlIGluaXRpYWwgYWNjdW11bGF0aW9uIHZhbHVlLlxuICogQHBhcmFtIGNvbmN1cnJlbnQgTWF4aW11bSBudW1iZXIgb2YgaW5wdXQgT2JzZXJ2YWJsZXMgYmVpbmcgc3Vic2NyaWJlZCB0b1xuICogY29uY3VycmVudGx5LlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIG9mIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNjYW48VCwgUj4oXG4gIGFjY3VtdWxhdG9yOiAoYWNjOiBSLCB2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gT2JzZXJ2YWJsZUlucHV0PFI+LFxuICBzZWVkOiBSLFxuICBjb25jdXJyZW50ID0gSW5maW5pdHlcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgUj4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgLy8gVGhlIGFjY3VtdWxhdGVkIHN0YXRlLlxuICAgIGxldCBzdGF0ZSA9IHNlZWQ7XG5cbiAgICByZXR1cm4gbWVyZ2VJbnRlcm5hbHMoXG4gICAgICBzb3VyY2UsXG4gICAgICBzdWJzY3JpYmVyLFxuICAgICAgKHZhbHVlLCBpbmRleCkgPT4gYWNjdW11bGF0b3Ioc3RhdGUsIHZhbHVlLCBpbmRleCksXG4gICAgICBjb25jdXJyZW50LFxuICAgICAgKHZhbHVlKSA9PiB7XG4gICAgICAgIHN0YXRlID0gdmFsdWU7XG4gICAgICB9LFxuICAgICAgZmFsc2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICAoKSA9PiAoc3RhdGUgPSBudWxsISlcbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyByZWR1Y2UgfSBmcm9tICcuL3JlZHVjZSc7XG5pbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcblxuLyoqXG4gKiBUaGUgYG1pbmAgb3BlcmF0b3Igb3BlcmF0ZXMgb24gYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIG51bWJlcnMgKG9yIGl0ZW1zIHRoYXRcbiAqIGNhbiBiZSBjb21wYXJlZCB3aXRoIGEgcHJvdmlkZWQgZnVuY3Rpb24pLCBhbmQgd2hlbiBzb3VyY2UgT2JzZXJ2YWJsZSBjb21wbGV0ZXNcbiAqIGl0IGVtaXRzIGEgc2luZ2xlIGl0ZW06IHRoZSBpdGVtIHdpdGggdGhlIHNtYWxsZXN0IHZhbHVlLlxuICpcbiAqICFbXShtaW4ucG5nKVxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogR2V0IHRoZSBtaW5pbWFsIHZhbHVlIG9mIGEgc2VyaWVzIG9mIG51bWJlcnNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIG1pbiB9IGZyb20gJ3J4anMnO1xuICpcbiAqIG9mKDUsIDQsIDcsIDIsIDgpXG4gKiAgIC5waXBlKG1pbigpKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIE91dHB1dHNcbiAqIC8vIDJcbiAqIGBgYFxuICpcbiAqIFVzZSBhIGNvbXBhcmVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgbWluaW1hbCBpdGVtXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBtaW4gfSBmcm9tICdyeGpzJztcbiAqXG4gKiBvZihcbiAqICAgeyBhZ2U6IDcsIG5hbWU6ICdGb28nIH0sXG4gKiAgIHsgYWdlOiA1LCBuYW1lOiAnQmFyJyB9LFxuICogICB7IGFnZTogOSwgbmFtZTogJ0JlZXInIH1cbiAqICkucGlwZShcbiAqICAgbWluKChhLCBiKSA9PiBhLmFnZSA8IGIuYWdlID8gLTEgOiAxKVxuICogKVxuICogLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgubmFtZSkpO1xuICpcbiAqIC8vIE91dHB1dHNcbiAqIC8vICdCYXInXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBtYXh9XG4gKlxuICogQHBhcmFtIGNvbXBhcmVyIE9wdGlvbmFsIGNvbXBhcmVyIGZ1bmN0aW9uIHRoYXQgaXQgd2lsbCB1c2UgaW5zdGVhZCBvZiBpdHNcbiAqIGRlZmF1bHQgdG8gY29tcGFyZSB0aGUgdmFsdWUgb2YgdHdvIGl0ZW1zLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbSB3aXRoIHRoZVxuICogc21hbGxlc3QgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaW48VD4oY29tcGFyZXI/OiAoeDogVCwgeTogVCkgPT4gbnVtYmVyKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgcmV0dXJuIHJlZHVjZShpc0Z1bmN0aW9uKGNvbXBhcmVyKSA/ICh4LCB5KSA9PiAoY29tcGFyZXIoeCwgeSkgPCAwID8geCA6IHkpIDogKHgsIHkpID0+ICh4IDwgeSA/IHggOiB5KSk7XG59XG4iLCAiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgQ29ubmVjdGFibGVPYnNlcnZhYmxlIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUnO1xuaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiwgVW5hcnlGdW5jdGlvbiwgT2JzZXJ2ZWRWYWx1ZU9mLCBPYnNlcnZhYmxlSW5wdXQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICcuL2Nvbm5lY3QnO1xuXG4vKipcbiAqIEFuIG9wZXJhdG9yIHRoYXQgY3JlYXRlcyBhIHtAbGluayBDb25uZWN0YWJsZU9ic2VydmFibGV9LCB0aGF0IHdoZW4gY29ubmVjdGVkLFxuICogd2l0aCB0aGUgYGNvbm5lY3RgIG1ldGhvZCwgd2lsbCB1c2UgdGhlIHByb3ZpZGVkIHN1YmplY3QgdG8gbXVsdGljYXN0IHRoZSB2YWx1ZXNcbiAqIGZyb20gdGhlIHNvdXJjZSB0byBhbGwgY29uc3VtZXJzLlxuICpcbiAqIEBwYXJhbSBzdWJqZWN0IFRoZSBzdWJqZWN0IHRvIG11bHRpY2FzdCB0aHJvdWdoLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHtAbGluayBDb25uZWN0YWJsZU9ic2VydmFibGV9XG4gKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gdjguIFRvIGNyZWF0ZSBhIGNvbm5lY3RhYmxlIG9ic2VydmFibGUsIHVzZSB7QGxpbmsgY29ubmVjdGFibGV9LlxuICogSWYgeW91J3JlIHVzaW5nIHtAbGluayByZWZDb3VudH0gYWZ0ZXIgYG11bHRpY2FzdGAsIHVzZSB0aGUge0BsaW5rIHNoYXJlfSBvcGVyYXRvciBpbnN0ZWFkLlxuICogYG11bHRpY2FzdChzdWJqZWN0KSwgcmVmQ291bnQoKWAgaXMgZXF1aXZhbGVudCB0b1xuICogYHNoYXJlKHsgY29ubmVjdG9yOiAoKSA9PiBzdWJqZWN0LCByZXNldE9uRXJyb3I6IGZhbHNlLCByZXNldE9uQ29tcGxldGU6IGZhbHNlLCByZXNldE9uUmVmQ291bnRaZXJvOiBmYWxzZSB9KWAuXG4gKiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9tdWx0aWNhc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG11bHRpY2FzdDxUPihzdWJqZWN0OiBTdWJqZWN0PFQ+KTogVW5hcnlGdW5jdGlvbjxPYnNlcnZhYmxlPFQ+LCBDb25uZWN0YWJsZU9ic2VydmFibGU8VD4+O1xuXG4vKipcbiAqIEJlY2F1c2UgdGhpcyBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSB7QGxpbmsgY29ubmVjdH0gb3BlcmF0b3IsIGFuZCB3YXMgb3RoZXJ3aXNlIHBvb3JseSBkb2N1bWVudGVkLFxuICogcmF0aGVyIHRoYW4gZHVwbGljYXRlIHRoZSBlZmZvcnQgb2YgZG9jdW1lbnRpbmcgdGhlIHNhbWUgYmVoYXZpb3IsIHBsZWFzZSBzZWUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlXG4gKiB7QGxpbmsgY29ubmVjdH0gb3BlcmF0b3IuXG4gKlxuICogQHBhcmFtIHN1YmplY3QgVGhlIHN1YmplY3QgdXNlZCB0byBtdWx0aWNhc3QuXG4gKiBAcGFyYW0gc2VsZWN0b3IgQSBzZXR1cCBmdW5jdGlvbiB0byBzZXR1cCB0aGUgbXVsdGljYXN0XG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCBtaXJyb3JzIHRoZSBvYnNlcnZhYmxlIHJldHVybmVkIGJ5IHRoZSBzZWxlY3Rvci5cbiAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIHRoZSB7QGxpbmsgY29ubmVjdH0gb3BlcmF0b3IgaW5zdGVhZC5cbiAqIGBtdWx0aWNhc3Qoc3ViamVjdCwgc2VsZWN0b3IpYCBpcyBlcXVpdmFsZW50IHRvXG4gKiBgY29ubmVjdChzZWxlY3RvciwgeyBjb25uZWN0b3I6ICgpID0+IHN1YmplY3QgfSlgLlxuICogRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvbXVsdGljYXN0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aWNhc3Q8VCwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihcbiAgc3ViamVjdDogU3ViamVjdDxUPixcbiAgc2VsZWN0b3I6IChzaGFyZWQ6IE9ic2VydmFibGU8VD4pID0+IE9cbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgT2JzZXJ2ZWRWYWx1ZU9mPE8+PjtcblxuLyoqXG4gKiBBbiBvcGVyYXRvciB0aGF0IGNyZWF0ZXMgYSB7QGxpbmsgQ29ubmVjdGFibGVPYnNlcnZhYmxlfSwgdGhhdCB3aGVuIGNvbm5lY3RlZCxcbiAqIHdpdGggdGhlIGBjb25uZWN0YCBtZXRob2QsIHdpbGwgdXNlIHRoZSBwcm92aWRlZCBzdWJqZWN0IHRvIG11bHRpY2FzdCB0aGUgdmFsdWVzXG4gKiBmcm9tIHRoZSBzb3VyY2UgdG8gYWxsIGNvbnN1bWVycy5cbiAqXG4gKiBAcGFyYW0gc3ViamVjdEZhY3RvcnkgQSBmYWN0b3J5IHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gY3JlYXRlIHRoZSBzdWJqZWN0LiBQYXNzaW5nIGEgZnVuY3Rpb24gaGVyZVxuICogd2lsbCBjYXVzZSB0aGUgdW5kZXJseWluZyBzdWJqZWN0IHRvIGJlIFwicmVzZXRcIiBvbiBlcnJvciwgY29tcGxldGlvbiwgb3IgcmVmQ291bnRlZCB1bnN1YnNjcmlwdGlvbiBvZlxuICogdGhlIHNvdXJjZS5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB7QGxpbmsgQ29ubmVjdGFibGVPYnNlcnZhYmxlfVxuICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHY4LiBUbyBjcmVhdGUgYSBjb25uZWN0YWJsZSBvYnNlcnZhYmxlLCB1c2Uge0BsaW5rIGNvbm5lY3RhYmxlfS5cbiAqIElmIHlvdSdyZSB1c2luZyB7QGxpbmsgcmVmQ291bnR9IGFmdGVyIGBtdWx0aWNhc3RgLCB1c2UgdGhlIHtAbGluayBzaGFyZX0gb3BlcmF0b3IgaW5zdGVhZC5cbiAqIGBtdWx0aWNhc3QoKCkgPT4gbmV3IEJlaGF2aW9yU3ViamVjdCgndGVzdCcpKSwgcmVmQ291bnQoKWAgaXMgZXF1aXZhbGVudCB0b1xuICogYHNoYXJlKHsgY29ubmVjdG9yOiAoKSA9PiBuZXcgQmVoYXZpb3JTdWJqZWN0KCd0ZXN0JykgfSlgLlxuICogRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvbXVsdGljYXN0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aWNhc3Q8VD4oc3ViamVjdEZhY3Rvcnk6ICgpID0+IFN1YmplY3Q8VD4pOiBVbmFyeUZ1bmN0aW9uPE9ic2VydmFibGU8VD4sIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTxUPj47XG5cbi8qKlxuICogQmVjYXVzZSB0aGlzIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIHtAbGluayBjb25uZWN0fSBvcGVyYXRvciwgYW5kIHdhcyBvdGhlcndpc2UgcG9vcmx5IGRvY3VtZW50ZWQsXG4gKiByYXRoZXIgdGhhbiBkdXBsaWNhdGUgdGhlIGVmZm9ydCBvZiBkb2N1bWVudGluZyB0aGUgc2FtZSBiZWhhdmlvciwgcGxlYXNlIHNlZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAqIHtAbGluayBjb25uZWN0fSBvcGVyYXRvci5cbiAqXG4gKiBAcGFyYW0gc3ViamVjdEZhY3RvcnkgQSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgc3ViamVjdCB1c2VkIHRvIG11bHRpY2FzdC5cbiAqIEBwYXJhbSBzZWxlY3RvciBBIGZ1bmN0aW9uIHRvIHNldHVwIHRoZSBtdWx0aWNhc3QgYW5kIHNlbGVjdCB0aGUgb3V0cHV0LlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgbWlycm9ycyB0aGUgb2JzZXJ2YWJsZSByZXR1cm5lZCBieSB0aGUgc2VsZWN0b3IuXG4gKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSB0aGUge0BsaW5rIGNvbm5lY3R9IG9wZXJhdG9yIGluc3RlYWQuXG4gKiBgbXVsdGljYXN0KHN1YmplY3RGYWN0b3J5LCBzZWxlY3RvcilgIGlzIGVxdWl2YWxlbnQgdG9cbiAqIGBjb25uZWN0KHNlbGVjdG9yLCB7IGNvbm5lY3Rvcjogc3ViamVjdEZhY3RvcnkgfSlgLlxuICogRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvbXVsdGljYXN0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aWNhc3Q8VCwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihcbiAgc3ViamVjdEZhY3Rvcnk6ICgpID0+IFN1YmplY3Q8VD4sXG4gIHNlbGVjdG9yOiAoc2hhcmVkOiBPYnNlcnZhYmxlPFQ+KSA9PiBPXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIE9ic2VydmVkVmFsdWVPZjxPPj47XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHY4LiBVc2UgdGhlIHtAbGluayBjb25uZWN0YWJsZX0gb2JzZXJ2YWJsZSwgdGhlIHtAbGluayBjb25uZWN0fSBvcGVyYXRvciBvciB0aGVcbiAqIHtAbGluayBzaGFyZX0gb3BlcmF0b3IgaW5zdGVhZC4gU2VlIHRoZSBvdmVybG9hZHMgYmVsb3cgZm9yIGVxdWl2YWxlbnQgcmVwbGFjZW1lbnQgZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRvcidzXG4gKiBiZWhhdmlvcnMuXG4gKiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9tdWx0aWNhc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG11bHRpY2FzdDxULCBSPihcbiAgc3ViamVjdE9yU3ViamVjdEZhY3Rvcnk6IFN1YmplY3Q8VD4gfCAoKCkgPT4gU3ViamVjdDxUPiksXG4gIHNlbGVjdG9yPzogKHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gT2JzZXJ2YWJsZTxSPlxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBSPiB7XG4gIGNvbnN0IHN1YmplY3RGYWN0b3J5ID0gaXNGdW5jdGlvbihzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeSkgPyBzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeSA6ICgpID0+IHN1YmplY3RPclN1YmplY3RGYWN0b3J5O1xuXG4gIGlmIChpc0Z1bmN0aW9uKHNlbGVjdG9yKSkge1xuICAgIC8vIElmIGEgc2VsZWN0b3IgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoZW4gd2UncmUgYSBcIm5vcm1hbFwiIG9wZXJhdG9yIHRoYXQgaXNuJ3RcbiAgICAvLyBnb2luZyB0byByZXR1cm4gYSBDb25uZWN0YWJsZU9ic2VydmFibGUuIFdlIGNhbiB1c2UgYGNvbm5lY3RgIHRvIGRvIHdoYXQgd2VcbiAgICAvLyBuZWVkIHRvIGRvLlxuICAgIHJldHVybiBjb25uZWN0KHNlbGVjdG9yLCB7XG4gICAgICBjb25uZWN0b3I6IHN1YmplY3RGYWN0b3J5LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChzb3VyY2U6IE9ic2VydmFibGU8VD4pID0+IG5ldyBDb25uZWN0YWJsZU9ic2VydmFibGU8YW55Pihzb3VyY2UsIHN1YmplY3RGYWN0b3J5KTtcbn1cbiIsICJpbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5cbi8qKlxuICogR3JvdXBzIHBhaXJzIG9mIGNvbnNlY3V0aXZlIGVtaXNzaW9ucyB0b2dldGhlciBhbmQgZW1pdHMgdGhlbSBhcyBhbiBhcnJheSBvZlxuICogdHdvIHZhbHVlcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+UHV0cyB0aGUgY3VycmVudCB2YWx1ZSBhbmQgcHJldmlvdXMgdmFsdWUgdG9nZXRoZXIgYXNcbiAqIGFuIGFycmF5LCBhbmQgZW1pdHMgdGhhdC48L3NwYW4+XG4gKlxuICogIVtdKHBhaXJ3aXNlLnBuZylcbiAqXG4gKiBUaGUgTnRoIGVtaXNzaW9uIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdpbGwgY2F1c2UgdGhlIG91dHB1dCBPYnNlcnZhYmxlXG4gKiB0byBlbWl0IGFuIGFycmF5IFsoTi0xKXRoLCBOdGhdIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnQgdmFsdWUsIGFzIGFcbiAqIHBhaXIuIEZvciB0aGlzIHJlYXNvbiwgYHBhaXJ3aXNlYCBlbWl0cyBvbiB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50XG4gKiBlbWlzc2lvbnMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUsIGJ1dCBub3Qgb24gdGhlIGZpcnN0IGVtaXNzaW9uLCBiZWNhdXNlXG4gKiB0aGVyZSBpcyBubyBwcmV2aW91cyB2YWx1ZSBpbiB0aGF0IGNhc2UuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIE9uIGV2ZXJ5IGNsaWNrIChzdGFydGluZyBmcm9tIHRoZSBzZWNvbmQpLCBlbWl0IHRoZSByZWxhdGl2ZSBkaXN0YW5jZSB0byB0aGUgcHJldmlvdXMgY2xpY2tcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBwYWlyd2lzZSwgbWFwIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50PFBvaW50ZXJFdmVudD4oZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgcGFpcnMgPSBjbGlja3MucGlwZShwYWlyd2lzZSgpKTtcbiAqIGNvbnN0IGRpc3RhbmNlID0gcGFpcnMucGlwZShcbiAqICAgbWFwKChbZmlyc3QsIHNlY29uZF0pID0+IHtcbiAqICAgICBjb25zdCB4MCA9IGZpcnN0LmNsaWVudFg7XG4gKiAgICAgY29uc3QgeTAgPSBmaXJzdC5jbGllbnRZO1xuICogICAgIGNvbnN0IHgxID0gc2Vjb25kLmNsaWVudFg7XG4gKiAgICAgY29uc3QgeTEgPSBzZWNvbmQuY2xpZW50WTtcbiAqICAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHgwIC0geDEsIDIpICsgTWF0aC5wb3coeTAgLSB5MSwgMikpO1xuICogICB9KVxuICogKTtcbiAqXG4gKiBkaXN0YW5jZS5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBidWZmZXJ9XG4gKiBAc2VlIHtAbGluayBidWZmZXJDb3VudH1cbiAqXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgb2YgcGFpcnMgKGFzIGFycmF5cykgb2ZcbiAqIGNvbnNlY3V0aXZlIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhaXJ3aXNlPFQ+KCk6IE9wZXJhdG9yRnVuY3Rpb248VCwgW1QsIFRdPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBsZXQgcHJldjogVDtcbiAgICBsZXQgaGFzUHJldiA9IGZhbHNlO1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHAgPSBwcmV2O1xuICAgICAgICBwcmV2ID0gdmFsdWU7XG4gICAgICAgIGhhc1ByZXYgJiYgc3Vic2NyaWJlci5uZXh0KFtwLCB2YWx1ZV0pO1xuICAgICAgICBoYXNQcmV2ID0gdHJ1ZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKiogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBtYXB9IGFuZCBvcHRpb25hbCBjaGFpbmluZzogYHBsdWNrKCdmb28nLCAnYmFyJylgIGlzIGBtYXAoeCA9PiB4Py5mb28/LmJhcilgLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguICovXG5leHBvcnQgZnVuY3Rpb24gcGx1Y2s8VCwgSzEgZXh0ZW5kcyBrZXlvZiBUPihrMTogSzEpOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFRbSzFdPjtcbi8qKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIG1hcH0gYW5kIG9wdGlvbmFsIGNoYWluaW5nOiBgcGx1Y2soJ2ZvbycsICdiYXInKWAgaXMgYG1hcCh4ID0+IHg/LmZvbz8uYmFyKWAuIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVjazxULCBLMSBleHRlbmRzIGtleW9mIFQsIEsyIGV4dGVuZHMga2V5b2YgVFtLMV0+KGsxOiBLMSwgazI6IEsyKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUW0sxXVtLMl0+O1xuLyoqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgbWFwfSBhbmQgb3B0aW9uYWwgY2hhaW5pbmc6IGBwbHVjaygnZm9vJywgJ2JhcicpYCBpcyBgbWFwKHggPT4geD8uZm9vPy5iYXIpYC4gV2lsbCBiZSByZW1vdmVkIGluIHY4LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsdWNrPFQsIEsxIGV4dGVuZHMga2V5b2YgVCwgSzIgZXh0ZW5kcyBrZXlvZiBUW0sxXSwgSzMgZXh0ZW5kcyBrZXlvZiBUW0sxXVtLMl0+KFxuICBrMTogSzEsXG4gIGsyOiBLMixcbiAgazM6IEszXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFRbSzFdW0syXVtLM10+O1xuLyoqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgbWFwfSBhbmQgb3B0aW9uYWwgY2hhaW5pbmc6IGBwbHVjaygnZm9vJywgJ2JhcicpYCBpcyBgbWFwKHggPT4geD8uZm9vPy5iYXIpYC4gV2lsbCBiZSByZW1vdmVkIGluIHY4LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsdWNrPFQsIEsxIGV4dGVuZHMga2V5b2YgVCwgSzIgZXh0ZW5kcyBrZXlvZiBUW0sxXSwgSzMgZXh0ZW5kcyBrZXlvZiBUW0sxXVtLMl0sIEs0IGV4dGVuZHMga2V5b2YgVFtLMV1bSzJdW0szXT4oXG4gIGsxOiBLMSxcbiAgazI6IEsyLFxuICBrMzogSzMsXG4gIGs0OiBLNFxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUW0sxXVtLMl1bSzNdW0s0XT47XG4vKiogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBtYXB9IGFuZCBvcHRpb25hbCBjaGFpbmluZzogYHBsdWNrKCdmb28nLCAnYmFyJylgIGlzIGBtYXAoeCA9PiB4Py5mb28/LmJhcilgLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguICovXG5leHBvcnQgZnVuY3Rpb24gcGx1Y2s8XG4gIFQsXG4gIEsxIGV4dGVuZHMga2V5b2YgVCxcbiAgSzIgZXh0ZW5kcyBrZXlvZiBUW0sxXSxcbiAgSzMgZXh0ZW5kcyBrZXlvZiBUW0sxXVtLMl0sXG4gIEs0IGV4dGVuZHMga2V5b2YgVFtLMV1bSzJdW0szXSxcbiAgSzUgZXh0ZW5kcyBrZXlvZiBUW0sxXVtLMl1bSzNdW0s0XVxuPihrMTogSzEsIGsyOiBLMiwgazM6IEszLCBrNDogSzQsIGs1OiBLNSk6IE9wZXJhdG9yRnVuY3Rpb248VCwgVFtLMV1bSzJdW0szXVtLNF1bSzVdPjtcbi8qKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIG1hcH0gYW5kIG9wdGlvbmFsIGNoYWluaW5nOiBgcGx1Y2soJ2ZvbycsICdiYXInKWAgaXMgYG1hcCh4ID0+IHg/LmZvbz8uYmFyKWAuIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVjazxcbiAgVCxcbiAgSzEgZXh0ZW5kcyBrZXlvZiBULFxuICBLMiBleHRlbmRzIGtleW9mIFRbSzFdLFxuICBLMyBleHRlbmRzIGtleW9mIFRbSzFdW0syXSxcbiAgSzQgZXh0ZW5kcyBrZXlvZiBUW0sxXVtLMl1bSzNdLFxuICBLNSBleHRlbmRzIGtleW9mIFRbSzFdW0syXVtLM11bSzRdLFxuICBLNiBleHRlbmRzIGtleW9mIFRbSzFdW0syXVtLM11bSzRdW0s1XVxuPihrMTogSzEsIGsyOiBLMiwgazM6IEszLCBrNDogSzQsIGs1OiBLNSwgazY6IEs2KTogT3BlcmF0b3JGdW5jdGlvbjxULCBUW0sxXVtLMl1bSzNdW0s0XVtLNV1bSzZdPjtcbi8qKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIG1hcH0gYW5kIG9wdGlvbmFsIGNoYWluaW5nOiBgcGx1Y2soJ2ZvbycsICdiYXInKWAgaXMgYG1hcCh4ID0+IHg/LmZvbz8uYmFyKWAuIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVjazxcbiAgVCxcbiAgSzEgZXh0ZW5kcyBrZXlvZiBULFxuICBLMiBleHRlbmRzIGtleW9mIFRbSzFdLFxuICBLMyBleHRlbmRzIGtleW9mIFRbSzFdW0syXSxcbiAgSzQgZXh0ZW5kcyBrZXlvZiBUW0sxXVtLMl1bSzNdLFxuICBLNSBleHRlbmRzIGtleW9mIFRbSzFdW0syXVtLM11bSzRdLFxuICBLNiBleHRlbmRzIGtleW9mIFRbSzFdW0syXVtLM11bSzRdW0s1XVxuPihrMTogSzEsIGsyOiBLMiwgazM6IEszLCBrNDogSzQsIGs1OiBLNSwgazY6IEs2LCAuLi5yZXN0OiBzdHJpbmdbXSk6IE9wZXJhdG9yRnVuY3Rpb248VCwgdW5rbm93bj47XG4vKiogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBtYXB9IGFuZCBvcHRpb25hbCBjaGFpbmluZzogYHBsdWNrKCdmb28nLCAnYmFyJylgIGlzIGBtYXAoeCA9PiB4Py5mb28/LmJhcilgLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguICovXG5leHBvcnQgZnVuY3Rpb24gcGx1Y2s8VD4oLi4ucHJvcGVydGllczogc3RyaW5nW10pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIHVua25vd24+O1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cblxuLyoqXG4gKiBNYXBzIGVhY2ggc291cmNlIHZhbHVlIHRvIGl0cyBzcGVjaWZpZWQgbmVzdGVkIHByb3BlcnR5LlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5MaWtlIHtAbGluayBtYXB9LCBidXQgbWVhbnQgb25seSBmb3IgcGlja2luZyBvbmUgb2ZcbiAqIHRoZSBuZXN0ZWQgcHJvcGVydGllcyBvZiBldmVyeSBlbWl0dGVkIHZhbHVlLjwvc3Bhbj5cbiAqXG4gKiAhW10ocGx1Y2sucG5nKVxuICpcbiAqIEdpdmVuIGEgbGlzdCBvZiBzdHJpbmdzIG9yIG51bWJlcnMgZGVzY3JpYmluZyBhIHBhdGggdG8gYSBwcm9wZXJ0eSwgcmV0cmlldmVzXG4gKiB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpZWQgbmVzdGVkIHByb3BlcnR5IGZyb20gYWxsIHZhbHVlcyBpbiB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBJZiBhIHByb3BlcnR5IGNhbid0IGJlIHJlc29sdmVkLCBpdCB3aWxsIHJldHVybiBgdW5kZWZpbmVkYCBmb3JcbiAqIHRoYXQgdmFsdWUuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIE1hcCBldmVyeSBjbGljayB0byB0aGUgdGFnTmFtZSBvZiB0aGUgY2xpY2tlZCB0YXJnZXQgZWxlbWVudFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIHBsdWNrIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHRhZ05hbWVzID0gY2xpY2tzLnBpcGUocGx1Y2soJ3RhcmdldCcsICd0YWdOYW1lJykpO1xuICpcbiAqIHRhZ05hbWVzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIG1hcH1cbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyBUaGUgbmVzdGVkIHByb3BlcnRpZXMgdG8gcGx1Y2sgZnJvbSBlYWNoIHNvdXJjZVxuICogdmFsdWUuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgb2YgcHJvcGVydHkgdmFsdWVzIGZyb20gdGhlXG4gKiBzb3VyY2UgdmFsdWVzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBtYXB9IGFuZCBvcHRpb25hbCBjaGFpbmluZzogYHBsdWNrKCdmb28nLCAnYmFyJylgIGlzIGBtYXAoeCA9PiB4Py5mb28/LmJhcilgLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVjazxULCBSPiguLi5wcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w+KTogT3BlcmF0b3JGdW5jdGlvbjxULCBSPiB7XG4gIGNvbnN0IGxlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoO1xuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdsaXN0IG9mIHByb3BlcnRpZXMgY2Fubm90IGJlIGVtcHR5LicpO1xuICB9XG4gIHJldHVybiBtYXAoKHgpID0+IHtcbiAgICBsZXQgY3VycmVudFByb3A6IGFueSA9IHg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcCA9IGN1cnJlbnRQcm9wPy5bcHJvcGVydGllc1tpXV07XG4gICAgICBpZiAodHlwZW9mIHAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGN1cnJlbnRQcm9wID0gcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50UHJvcDtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuaW1wb3J0IHsgbXVsdGljYXN0IH0gZnJvbSAnLi9tdWx0aWNhc3QnO1xuaW1wb3J0IHsgQ29ubmVjdGFibGVPYnNlcnZhYmxlIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUnO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPcGVyYXRvckZ1bmN0aW9uLCBVbmFyeUZ1bmN0aW9uLCBPYnNlcnZhYmxlSW5wdXQsIE9ic2VydmVkVmFsdWVPZiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICcuL2Nvbm5lY3QnO1xuXG4vKipcbiAqIFJldHVybnMgYSBjb25uZWN0YWJsZSBvYnNlcnZhYmxlIHRoYXQsIHdoZW4gY29ubmVjdGVkLCB3aWxsIG11bHRpY2FzdFxuICogYWxsIHZhbHVlcyB0aHJvdWdoIGEgc2luZ2xlIHVuZGVybHlpbmcge0BsaW5rIFN1YmplY3R9IGluc3RhbmNlLlxuICpcbiAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVG8gY3JlYXRlIGEgY29ubmVjdGFibGUgb2JzZXJ2YWJsZSwgdXNlIHtAbGluayBjb25uZWN0YWJsZX0uXG4gKiBgc291cmNlLnBpcGUocHVibGlzaCgpKWAgaXMgZXF1aXZhbGVudCB0b1xuICogYGNvbm5lY3RhYmxlKHNvdXJjZSwgeyBjb25uZWN0b3I6ICgpID0+IG5ldyBTdWJqZWN0KCksIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSB9KWAuXG4gKiBJZiB5b3UncmUgdXNpbmcge0BsaW5rIHJlZkNvdW50fSBhZnRlciBgcHVibGlzaGAsIHVzZSB7QGxpbmsgc2hhcmV9IG9wZXJhdG9yIGluc3RlYWQuXG4gKiBgc291cmNlLnBpcGUocHVibGlzaCgpLCByZWZDb3VudCgpKWAgaXMgZXF1aXZhbGVudCB0b1xuICogYHNvdXJjZS5waXBlKHNoYXJlKHsgcmVzZXRPbkVycm9yOiBmYWxzZSwgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSwgcmVzZXRPblJlZkNvdW50WmVybzogZmFsc2UgfSkpYC5cbiAqIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL211bHRpY2FzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaDxUPigpOiBVbmFyeUZ1bmN0aW9uPE9ic2VydmFibGU8VD4sIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTxUPj47XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYnNlcnZhYmxlLCB0aGF0IHdoZW4gc3Vic2NyaWJlZCB0bywgY3JlYXRlcyBhbiB1bmRlcmx5aW5nIHtAbGluayBTdWJqZWN0fSxcbiAqIHByb3ZpZGVzIGFuIG9ic2VydmFibGUgdmlldyBvZiBpdCB0byBhIGBzZWxlY3RvcmAgZnVuY3Rpb24sIHRha2VzIHRoZSBvYnNlcnZhYmxlIHJlc3VsdCBvZlxuICogdGhhdCBzZWxlY3RvciBmdW5jdGlvbiBhbmQgc3Vic2NyaWJlcyB0byBpdCwgc2VuZGluZyBpdHMgdmFsdWVzIHRvIHRoZSBjb25zdW1lciwgX3RoZW5fIGNvbm5lY3RzXG4gKiB0aGUgc3ViamVjdCB0byB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIEBwYXJhbSBzZWxlY3RvciBBIGZ1bmN0aW9uIHVzZWQgdG8gc2V0dXAgbXVsdGljYXN0aW5nIHByaW9yIHRvIGF1dG9tYXRpYyBjb25uZWN0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIHRoZSB7QGxpbmsgY29ubmVjdH0gb3BlcmF0b3IgaW5zdGVhZC5cbiAqIGBwdWJsaXNoKHNlbGVjdG9yKWAgaXMgZXF1aXZhbGVudCB0byBgY29ubmVjdChzZWxlY3RvcilgLlxuICogRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvbXVsdGljYXN0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoPFQsIE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8YW55Pj4oc2VsZWN0b3I6IChzaGFyZWQ6IE9ic2VydmFibGU8VD4pID0+IE8pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIE9ic2VydmVkVmFsdWVPZjxPPj47XG5cbi8qKlxuICogUmV0dXJucyBhIENvbm5lY3RhYmxlT2JzZXJ2YWJsZSwgd2hpY2ggaXMgYSB2YXJpZXR5IG9mIE9ic2VydmFibGUgdGhhdCB3YWl0cyB1bnRpbCBpdHMgY29ubmVjdCBtZXRob2QgaXMgY2FsbGVkXG4gKiBiZWZvcmUgaXQgYmVnaW5zIGVtaXR0aW5nIGl0ZW1zIHRvIHRob3NlIE9ic2VydmVycyB0aGF0IGhhdmUgc3Vic2NyaWJlZCB0byBpdC5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+TWFrZXMgYSBjb2xkIE9ic2VydmFibGUgaG90PC9zcGFuPlxuICpcbiAqICFbXShwdWJsaXNoLnBuZylcbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIE1ha2UgYHNvdXJjZSRgIGhvdCBieSBhcHBseWluZyBgcHVibGlzaGAgb3BlcmF0b3IsIHRoZW4gbWVyZ2UgZWFjaCBpbm5lciBvYnNlcnZhYmxlIGludG8gYSBzaW5nbGUgb25lXG4gKiBhbmQgc3Vic2NyaWJlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHppcCwgaW50ZXJ2YWwsIG9mLCBtYXAsIHB1Ymxpc2gsIG1lcmdlLCB0YXAgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBzb3VyY2UkID0gemlwKGludGVydmFsKDIwMDApLCBvZigxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5KSlcbiAqICAgLnBpcGUobWFwKChbLCBudW1iZXJdKSA9PiBudW1iZXIpKTtcbiAqXG4gKiBzb3VyY2UkXG4gKiAgIC5waXBlKFxuICogICAgIHB1Ymxpc2gobXVsdGljYXN0ZWQkID0+XG4gKiAgICAgICBtZXJnZShcbiAqICAgICAgICAgbXVsdGljYXN0ZWQkLnBpcGUodGFwKHggPT4gY29uc29sZS5sb2coJ1N0cmVhbSAxOicsIHgpKSksXG4gKiAgICAgICAgIG11bHRpY2FzdGVkJC5waXBlKHRhcCh4ID0+IGNvbnNvbGUubG9nKCdTdHJlYW0gMjonLCB4KSkpLFxuICogICAgICAgICBtdWx0aWNhc3RlZCQucGlwZSh0YXAoeCA9PiBjb25zb2xlLmxvZygnU3RyZWFtIDM6JywgeCkpKVxuICogICAgICAgKVxuICogICAgIClcbiAqICAgKVxuICogICAuc3Vic2NyaWJlKCk7XG4gKlxuICogLy8gUmVzdWx0cyBldmVyeSB0d28gc2Vjb25kc1xuICogLy8gU3RyZWFtIDE6IDFcbiAqIC8vIFN0cmVhbSAyOiAxXG4gKiAvLyBTdHJlYW0gMzogMVxuICogLy8gLi4uXG4gKiAvLyBTdHJlYW0gMTogOVxuICogLy8gU3RyZWFtIDI6IDlcbiAqIC8vIFN0cmVhbSAzOiA5XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBwdWJsaXNoTGFzdH1cbiAqIEBzZWUge0BsaW5rIHB1Ymxpc2hSZXBsYXl9XG4gKiBAc2VlIHtAbGluayBwdWJsaXNoQmVoYXZpb3J9XG4gKlxuICogQHBhcmFtIHNlbGVjdG9yIE9wdGlvbmFsIHNlbGVjdG9yIGZ1bmN0aW9uIHdoaWNoIGNhbiB1c2UgdGhlIG11bHRpY2FzdGVkIHNvdXJjZSBzZXF1ZW5jZSBhcyBtYW55IHRpbWVzXG4gKiBhcyBuZWVkZWQsIHdpdGhvdXQgY2F1c2luZyBtdWx0aXBsZSBzdWJzY3JpcHRpb25zIHRvIHRoZSBzb3VyY2Ugc2VxdWVuY2UuXG4gKiBTdWJzY3JpYmVycyB0byB0aGUgZ2l2ZW4gc291cmNlIHdpbGwgcmVjZWl2ZSBhbGwgbm90aWZpY2F0aW9ucyBvZiB0aGUgc291cmNlIGZyb20gdGhlIHRpbWUgb2YgdGhlIHN1YnNjcmlwdGlvbiBvbi5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBDb25uZWN0YWJsZU9ic2VydmFibGUgdGhhdCB1cG9uIGNvbm5lY3Rpb25cbiAqIGNhdXNlcyB0aGUgc291cmNlIE9ic2VydmFibGUgdG8gZW1pdCBpdGVtcyB0byBpdHMgT2JzZXJ2ZXJzLlxuICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHY4LiBVc2UgdGhlIHtAbGluayBjb25uZWN0YWJsZX0gb2JzZXJ2YWJsZSwgdGhlIHtAbGluayBjb25uZWN0fSBvcGVyYXRvciBvciB0aGVcbiAqIHtAbGluayBzaGFyZX0gb3BlcmF0b3IgaW5zdGVhZC4gU2VlIHRoZSBvdmVybG9hZHMgYmVsb3cgZm9yIGVxdWl2YWxlbnQgcmVwbGFjZW1lbnQgZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRvcidzXG4gKiBiZWhhdmlvcnMuXG4gKiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9tdWx0aWNhc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2g8VCwgUj4oc2VsZWN0b3I/OiBPcGVyYXRvckZ1bmN0aW9uPFQsIFI+KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHwgT3BlcmF0b3JGdW5jdGlvbjxULCBSPiB7XG4gIHJldHVybiBzZWxlY3RvciA/IChzb3VyY2UpID0+IGNvbm5lY3Qoc2VsZWN0b3IpKHNvdXJjZSkgOiAoc291cmNlKSA9PiBtdWx0aWNhc3QobmV3IFN1YmplY3Q8VD4oKSkoc291cmNlKTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICcuLi9CZWhhdmlvclN1YmplY3QnO1xuaW1wb3J0IHsgQ29ubmVjdGFibGVPYnNlcnZhYmxlIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUnO1xuaW1wb3J0IHsgVW5hcnlGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIENvbm5lY3RhYmxlT2JzZXJ2YWJsZX0gdGhhdCB1dGlsaXplcyBhIHtAbGluayBCZWhhdmlvclN1YmplY3R9LlxuICpcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgVGhlIGluaXRpYWwgdmFsdWUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgQmVoYXZpb3JTdWJqZWN0fS5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB7QGxpbmsgQ29ubmVjdGFibGVPYnNlcnZhYmxlfVxuICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHY4LiBUbyBjcmVhdGUgYSBjb25uZWN0YWJsZSBvYnNlcnZhYmxlIHRoYXQgdXNlcyBhXG4gKiB7QGxpbmsgQmVoYXZpb3JTdWJqZWN0fSB1bmRlciB0aGUgaG9vZCwgdXNlIHtAbGluayBjb25uZWN0YWJsZX0uXG4gKiBgc291cmNlLnBpcGUocHVibGlzaEJlaGF2aW9yKGluaXRWYWx1ZSkpYCBpcyBlcXVpdmFsZW50IHRvXG4gKiBgY29ubmVjdGFibGUoc291cmNlLCB7IGNvbm5lY3RvcjogKCkgPT4gbmV3IEJlaGF2aW9yU3ViamVjdChpbml0VmFsdWUpLCByZXNldE9uRGlzY29ubmVjdDogZmFsc2UgfSlgLlxuICogSWYgeW91J3JlIHVzaW5nIHtAbGluayByZWZDb3VudH0gYWZ0ZXIgYHB1Ymxpc2hCZWhhdmlvcmAsIHVzZSB0aGUge0BsaW5rIHNoYXJlfSBvcGVyYXRvciBpbnN0ZWFkLlxuICogYHNvdXJjZS5waXBlKHB1Ymxpc2hCZWhhdmlvcihpbml0VmFsdWUpLCByZWZDb3VudCgpKWAgaXMgZXF1aXZhbGVudCB0b1xuICogYHNvdXJjZS5waXBlKHNoYXJlKHsgY29ubmVjdG9yOiAoKSA9PiBuZXcgQmVoYXZpb3JTdWJqZWN0KGluaXRWYWx1ZSksIHJlc2V0T25FcnJvcjogZmFsc2UsIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlICB9KSlgLlxuICogRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvbXVsdGljYXN0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoQmVoYXZpb3I8VD4oaW5pdGlhbFZhbHVlOiBUKTogVW5hcnlGdW5jdGlvbjxPYnNlcnZhYmxlPFQ+LCBDb25uZWN0YWJsZU9ic2VydmFibGU8VD4+IHtcbiAgLy8gTm90ZSB0aGF0IHRoaXMgaGFzICpuZXZlciogc3VwcG9ydGVkIHRoZSBzZWxlY3RvciBmdW5jdGlvbi5cbiAgcmV0dXJuIChzb3VyY2UpID0+IHtcbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUPihpbml0aWFsVmFsdWUpO1xuICAgIHJldHVybiBuZXcgQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgKCkgPT4gc3ViamVjdCk7XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgQXN5bmNTdWJqZWN0IH0gZnJvbSAnLi4vQXN5bmNTdWJqZWN0JztcbmltcG9ydCB7IENvbm5lY3RhYmxlT2JzZXJ2YWJsZSB9IGZyb20gJy4uL29ic2VydmFibGUvQ29ubmVjdGFibGVPYnNlcnZhYmxlJztcbmltcG9ydCB7IFVuYXJ5RnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogUmV0dXJucyBhIGNvbm5lY3RhYmxlIG9ic2VydmFibGUgc2VxdWVuY2UgdGhhdCBzaGFyZXMgYSBzaW5nbGUgc3Vic2NyaXB0aW9uIHRvIHRoZVxuICogdW5kZXJseWluZyBzZXF1ZW5jZSBjb250YWluaW5nIG9ubHkgdGhlIGxhc3Qgbm90aWZpY2F0aW9uLlxuICpcbiAqICFbXShwdWJsaXNoTGFzdC5wbmcpXG4gKlxuICogU2ltaWxhciB0byB7QGxpbmsgcHVibGlzaH0sIGJ1dCBpdCB3YWl0cyB1bnRpbCB0aGUgc291cmNlIG9ic2VydmFibGUgY29tcGxldGVzIGFuZCBzdG9yZXNcbiAqIHRoZSBsYXN0IGVtaXR0ZWQgdmFsdWUuXG4gKiBTaW1pbGFybHkgdG8ge0BsaW5rIHB1Ymxpc2hSZXBsYXl9IGFuZCB7QGxpbmsgcHVibGlzaEJlaGF2aW9yfSwgdGhpcyBrZWVwcyBzdG9yaW5nIHRoZSBsYXN0XG4gKiB2YWx1ZSBldmVuIGlmIGl0IGhhcyBubyBtb3JlIHN1YnNjcmliZXJzLiBJZiBzdWJzZXF1ZW50IHN1YnNjcmlwdGlvbnMgaGFwcGVuLCB0aGV5IHdpbGxcbiAqIGltbWVkaWF0ZWx5IGdldCB0aGF0IGxhc3Qgc3RvcmVkIHZhbHVlIGFuZCBjb21wbGV0ZS5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IENvbm5lY3RhYmxlT2JzZXJ2YWJsZSwgaW50ZXJ2YWwsIHB1Ymxpc2hMYXN0LCB0YXAsIHRha2UgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjb25uZWN0YWJsZSA9IDxDb25uZWN0YWJsZU9ic2VydmFibGU8bnVtYmVyPj5pbnRlcnZhbCgxMDAwKVxuICogICAucGlwZShcbiAqICAgICB0YXAoeCA9PiBjb25zb2xlLmxvZygnc2lkZSBlZmZlY3QnLCB4KSksXG4gKiAgICAgdGFrZSgzKSxcbiAqICAgICBwdWJsaXNoTGFzdCgpXG4gKiAgICk7XG4gKlxuICogY29ubmVjdGFibGUuc3Vic2NyaWJlKHtcbiAqICAgbmV4dDogeCA9PiBjb25zb2xlLmxvZygnU3ViLiBBJywgeCksXG4gKiAgIGVycm9yOiBlcnIgPT4gY29uc29sZS5sb2coJ1N1Yi4gQSBFcnJvcicsIGVyciksXG4gKiAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZygnU3ViLiBBIENvbXBsZXRlJylcbiAqIH0pO1xuICpcbiAqIGNvbm5lY3RhYmxlLnN1YnNjcmliZSh7XG4gKiAgIG5leHQ6IHggPT4gY29uc29sZS5sb2coJ1N1Yi4gQicsIHgpLFxuICogICBlcnJvcjogZXJyID0+IGNvbnNvbGUubG9nKCdTdWIuIEIgRXJyb3InLCBlcnIpLFxuICogICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ1N1Yi4gQiBDb21wbGV0ZScpXG4gKiB9KTtcbiAqXG4gKiBjb25uZWN0YWJsZS5jb25uZWN0KCk7XG4gKlxuICogLy8gUmVzdWx0czpcbiAqIC8vICdzaWRlIGVmZmVjdCAwJyAgIC0gYWZ0ZXIgb25lIHNlY29uZFxuICogLy8gJ3NpZGUgZWZmZWN0IDEnICAgLSBhZnRlciB0d28gc2Vjb25kc1xuICogLy8gJ3NpZGUgZWZmZWN0IDInICAgLSBhZnRlciB0aHJlZSBzZWNvbmRzXG4gKiAvLyAnU3ViLiBBIDInICAgICAgICAtIGltbWVkaWF0ZWx5IGFmdGVyICdzaWRlIGVmZmVjdCAyJ1xuICogLy8gJ1N1Yi4gQiAyJ1xuICogLy8gJ1N1Yi4gQSBDb21wbGV0ZSdcbiAqIC8vICdTdWIuIEIgQ29tcGxldGUnXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBDb25uZWN0YWJsZU9ic2VydmFibGV9XG4gKiBAc2VlIHtAbGluayBwdWJsaXNofVxuICogQHNlZSB7QGxpbmsgcHVibGlzaFJlcGxheX1cbiAqIEBzZWUge0BsaW5rIHB1Ymxpc2hCZWhhdmlvcn1cbiAqXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBlbGVtZW50cyBvZiBhXG4gKiBzZXF1ZW5jZSBwcm9kdWNlZCBieSBtdWx0aWNhc3RpbmcgdGhlIHNvdXJjZSBzZXF1ZW5jZS5cbiAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVG8gY3JlYXRlIGEgY29ubmVjdGFibGUgb2JzZXJ2YWJsZSB3aXRoIGFuXG4gKiB7QGxpbmsgQXN5bmNTdWJqZWN0fSB1bmRlciB0aGUgaG9vZCwgdXNlIHtAbGluayBjb25uZWN0YWJsZX0uXG4gKiBgc291cmNlLnBpcGUocHVibGlzaExhc3QoKSlgIGlzIGVxdWl2YWxlbnQgdG9cbiAqIGBjb25uZWN0YWJsZShzb3VyY2UsIHsgY29ubmVjdG9yOiAoKSA9PiBuZXcgQXN5bmNTdWJqZWN0KCksIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSB9KWAuXG4gKiBJZiB5b3UncmUgdXNpbmcge0BsaW5rIHJlZkNvdW50fSBhZnRlciBgcHVibGlzaExhc3RgLCB1c2UgdGhlIHtAbGluayBzaGFyZX0gb3BlcmF0b3IgaW5zdGVhZC5cbiAqIGBzb3VyY2UucGlwZShwdWJsaXNoTGFzdCgpLCByZWZDb3VudCgpKWAgaXMgZXF1aXZhbGVudCB0b1xuICogYHNvdXJjZS5waXBlKHNoYXJlKHsgY29ubmVjdG9yOiAoKSA9PiBuZXcgQXN5bmNTdWJqZWN0KCksIHJlc2V0T25FcnJvcjogZmFsc2UsIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlIH0pKWAuXG4gKiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9tdWx0aWNhc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hMYXN0PFQ+KCk6IFVuYXJ5RnVuY3Rpb248T2JzZXJ2YWJsZTxUPiwgQ29ubmVjdGFibGVPYnNlcnZhYmxlPFQ+PiB7XG4gIC8vIE5vdGUgdGhhdCB0aGlzIGhhcyAqbmV2ZXIqIHN1cHBvcnRlZCBhIHNlbGVjdG9yIGZ1bmN0aW9uIGxpa2UgYHB1Ymxpc2hgIGFuZCBgcHVibGlzaFJlcGxheWAuXG4gIHJldHVybiAoc291cmNlKSA9PiB7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBBc3luY1N1YmplY3Q8VD4oKTtcbiAgICByZXR1cm4gbmV3IENvbm5lY3RhYmxlT2JzZXJ2YWJsZShzb3VyY2UsICgpID0+IHN1YmplY3QpO1xuICB9O1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICcuLi9SZXBsYXlTdWJqZWN0JztcbmltcG9ydCB7IG11bHRpY2FzdCB9IGZyb20gJy4vbXVsdGljYXN0JztcbmltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT3BlcmF0b3JGdW5jdGlvbiwgVGltZXN0YW1wUHJvdmlkZXIsIE9ic2VydmFibGVJbnB1dCwgT2JzZXJ2ZWRWYWx1ZU9mIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBDb25uZWN0YWJsZU9ic2VydmFibGV9IHRoYXQgdXNlcyBhIHtAbGluayBSZXBsYXlTdWJqZWN0fVxuICogaW50ZXJuYWxseS5cbiAqXG4gKiBAcGFyYW0gYnVmZmVyU2l6ZSBUaGUgYnVmZmVyIHNpemUgZm9yIHRoZSB1bmRlcmx5aW5nIHtAbGluayBSZXBsYXlTdWJqZWN0fS5cbiAqIEBwYXJhbSB3aW5kb3dUaW1lIFRoZSB3aW5kb3cgdGltZSBmb3IgdGhlIHVuZGVybHlpbmcge0BsaW5rIFJlcGxheVN1YmplY3R9LlxuICogQHBhcmFtIHRpbWVzdGFtcFByb3ZpZGVyIFRoZSB0aW1lc3RhbXAgcHJvdmlkZXIgZm9yIHRoZSB1bmRlcmx5aW5nIHtAbGluayBSZXBsYXlTdWJqZWN0fS5cbiAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVG8gY3JlYXRlIGEgY29ubmVjdGFibGUgb2JzZXJ2YWJsZSB0aGF0IHVzZXMgYVxuICoge0BsaW5rIFJlcGxheVN1YmplY3R9IHVuZGVyIHRoZSBob29kLCB1c2Uge0BsaW5rIGNvbm5lY3RhYmxlfS5cbiAqIGBzb3VyY2UucGlwZShwdWJsaXNoUmVwbGF5KHNpemUsIHRpbWUsIHNjaGVkdWxlcikpYCBpcyBlcXVpdmFsZW50IHRvXG4gKiBgY29ubmVjdGFibGUoc291cmNlLCB7IGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3Qoc2l6ZSwgdGltZSwgc2NoZWR1bGVyKSwgcmVzZXRPbkRpc2Nvbm5lY3Q6IGZhbHNlIH0pYC5cbiAqIElmIHlvdSdyZSB1c2luZyB7QGxpbmsgcmVmQ291bnR9IGFmdGVyIGBwdWJsaXNoUmVwbGF5YCwgdXNlIHRoZSB7QGxpbmsgc2hhcmV9IG9wZXJhdG9yIGluc3RlYWQuXG4gKiBgcHVibGlzaFJlcGxheShzaXplLCB0aW1lLCBzY2hlZHVsZXIpLCByZWZDb3VudCgpYCBpcyBlcXVpdmFsZW50IHRvXG4gKiBgc2hhcmUoeyBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KHNpemUsIHRpbWUsIHNjaGVkdWxlciksIHJlc2V0T25FcnJvcjogZmFsc2UsIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlIH0pYC5cbiAqIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL211bHRpY2FzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaFJlcGxheTxUPihcbiAgYnVmZmVyU2l6ZT86IG51bWJlcixcbiAgd2luZG93VGltZT86IG51bWJlcixcbiAgdGltZXN0YW1wUHJvdmlkZXI/OiBUaW1lc3RhbXBQcm92aWRlclxuKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JzZXJ2YWJsZSwgdGhhdCB3aGVuIHN1YnNjcmliZWQgdG8sIHdpbGwgY3JlYXRlIGEge0BsaW5rIFJlcGxheVN1YmplY3R9LFxuICogYW5kIHBhc3MgYW4gb2JzZXJ2YWJsZSBmcm9tIGl0ICh1c2luZyBbYXNPYnNlcnZhYmxlXShhcGkvaW5kZXgvY2xhc3MvU3ViamVjdCNhc09ic2VydmFibGUpKSB0b1xuICogdGhlIGBzZWxlY3RvcmAgZnVuY3Rpb24sIHdoaWNoIHRoZW4gcmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgaXMgc3Vic2NyaWJlZCB0byBiZWZvcmVcbiAqIFwiY29ubmVjdGluZ1wiIHRoZSBzb3VyY2UgdG8gdGhlIGludGVybmFsIGBSZXBsYXlTdWJqZWN0YC5cbiAqXG4gKiBTaW5jZSB0aGlzIGlzIGRlcHJlY2F0ZWQsIGZvciBhZGRpdGlvbmFsIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB7QGxpbmsgY29ubmVjdH0uXG4gKlxuICogQHBhcmFtIGJ1ZmZlclNpemUgVGhlIGJ1ZmZlciBzaXplIGZvciB0aGUgdW5kZXJseWluZyB7QGxpbmsgUmVwbGF5U3ViamVjdH0uXG4gKiBAcGFyYW0gd2luZG93VGltZSBUaGUgd2luZG93IHRpbWUgZm9yIHRoZSB1bmRlcmx5aW5nIHtAbGluayBSZXBsYXlTdWJqZWN0fS5cbiAqIEBwYXJhbSBzZWxlY3RvciBBIGZ1bmN0aW9uIHVzZWQgdG8gc2V0dXAgdGhlIG11bHRpY2FzdC5cbiAqIEBwYXJhbSB0aW1lc3RhbXBQcm92aWRlciBUaGUgdGltZXN0YW1wIHByb3ZpZGVyIGZvciB0aGUgdW5kZXJseWluZyB7QGxpbmsgUmVwbGF5U3ViamVjdH0uXG4gKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSB0aGUge0BsaW5rIGNvbm5lY3R9IG9wZXJhdG9yIGluc3RlYWQuXG4gKiBgc291cmNlLnBpcGUocHVibGlzaFJlcGxheShzaXplLCB3aW5kb3csIHNlbGVjdG9yLCBzY2hlZHVsZXIpKWAgaXMgZXF1aXZhbGVudCB0b1xuICogYHNvdXJjZS5waXBlKGNvbm5lY3Qoc2VsZWN0b3IsIHsgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdChzaXplLCB3aW5kb3csIHNjaGVkdWxlcikgfSkpYC5cbiAqIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL211bHRpY2FzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaFJlcGxheTxULCBPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PGFueT4+KFxuICBidWZmZXJTaXplOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIHdpbmRvd1RpbWU6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgc2VsZWN0b3I6IChzaGFyZWQ6IE9ic2VydmFibGU8VD4pID0+IE8sXG4gIHRpbWVzdGFtcFByb3ZpZGVyPzogVGltZXN0YW1wUHJvdmlkZXJcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgT2JzZXJ2ZWRWYWx1ZU9mPE8+PjtcblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIENvbm5lY3RhYmxlT2JzZXJ2YWJsZX0gdGhhdCB1c2VzIGEge0BsaW5rIFJlcGxheVN1YmplY3R9XG4gKiBpbnRlcm5hbGx5LlxuICpcbiAqIEBwYXJhbSBidWZmZXJTaXplIFRoZSBidWZmZXIgc2l6ZSBmb3IgdGhlIHVuZGVybHlpbmcge0BsaW5rIFJlcGxheVN1YmplY3R9LlxuICogQHBhcmFtIHdpbmRvd1RpbWUgVGhlIHdpbmRvdyB0aW1lIGZvciB0aGUgdW5kZXJseWluZyB7QGxpbmsgUmVwbGF5U3ViamVjdH0uXG4gKiBAcGFyYW0gc2VsZWN0b3IgUGFzc2luZyBgdW5kZWZpbmVkYCBoZXJlIGRldGVybWluZXMgdGhhdCB0aGlzIG9wZXJhdG9yIHdpbGwgcmV0dXJuIGEge0BsaW5rIENvbm5lY3RhYmxlT2JzZXJ2YWJsZX0uXG4gKiBAcGFyYW0gdGltZXN0YW1wUHJvdmlkZXIgVGhlIHRpbWVzdGFtcCBwcm92aWRlciBmb3IgdGhlIHVuZGVybHlpbmcge0BsaW5rIFJlcGxheVN1YmplY3R9LlxuICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHY4LiBUbyBjcmVhdGUgYSBjb25uZWN0YWJsZSBvYnNlcnZhYmxlIHRoYXQgdXNlcyBhXG4gKiB7QGxpbmsgUmVwbGF5U3ViamVjdH0gdW5kZXIgdGhlIGhvb2QsIHVzZSB7QGxpbmsgY29ubmVjdGFibGV9LlxuICogYHNvdXJjZS5waXBlKHB1Ymxpc2hSZXBsYXkoc2l6ZSwgdGltZSwgc2NoZWR1bGVyKSlgIGlzIGVxdWl2YWxlbnQgdG9cbiAqIGBjb25uZWN0YWJsZShzb3VyY2UsIHsgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdChzaXplLCB0aW1lLCBzY2hlZHVsZXIpLCByZXNldE9uRGlzY29ubmVjdDogZmFsc2UgfSlgLlxuICogSWYgeW91J3JlIHVzaW5nIHtAbGluayByZWZDb3VudH0gYWZ0ZXIgYHB1Ymxpc2hSZXBsYXlgLCB1c2UgdGhlIHtAbGluayBzaGFyZX0gb3BlcmF0b3IgaW5zdGVhZC5cbiAqIGBwdWJsaXNoUmVwbGF5KHNpemUsIHRpbWUsIHNjaGVkdWxlciksIHJlZkNvdW50KClgIGlzIGVxdWl2YWxlbnQgdG9cbiAqIGBzaGFyZSh7IGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3Qoc2l6ZSwgdGltZSwgc2NoZWR1bGVyKSwgcmVzZXRPbkVycm9yOiBmYWxzZSwgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSwgcmVzZXRPblJlZkNvdW50WmVybzogZmFsc2UgfSlgLlxuICogRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvbXVsdGljYXN0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoUmVwbGF5PFQsIE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8YW55Pj4oXG4gIGJ1ZmZlclNpemU6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgd2luZG93VGltZTogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBzZWxlY3RvcjogdW5kZWZpbmVkLFxuICB0aW1lc3RhbXBQcm92aWRlcjogVGltZXN0YW1wUHJvdmlkZXJcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgT2JzZXJ2ZWRWYWx1ZU9mPE8+PjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSB0aGUge0BsaW5rIGNvbm5lY3RhYmxlfSBvYnNlcnZhYmxlLCB0aGUge0BsaW5rIGNvbm5lY3R9IG9wZXJhdG9yIG9yIHRoZVxuICoge0BsaW5rIHNoYXJlfSBvcGVyYXRvciBpbnN0ZWFkLiBTZWUgdGhlIG92ZXJsb2FkcyBiZWxvdyBmb3IgZXF1aXZhbGVudCByZXBsYWNlbWVudCBleGFtcGxlcyBvZiB0aGlzIG9wZXJhdG9yJ3NcbiAqIGJlaGF2aW9ycy5cbiAqIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL211bHRpY2FzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaFJlcGxheTxULCBSPihcbiAgYnVmZmVyU2l6ZT86IG51bWJlcixcbiAgd2luZG93VGltZT86IG51bWJlcixcbiAgc2VsZWN0b3JPclNjaGVkdWxlcj86IFRpbWVzdGFtcFByb3ZpZGVyIHwgT3BlcmF0b3JGdW5jdGlvbjxULCBSPixcbiAgdGltZXN0YW1wUHJvdmlkZXI/OiBUaW1lc3RhbXBQcm92aWRlclxuKSB7XG4gIGlmIChzZWxlY3Rvck9yU2NoZWR1bGVyICYmICFpc0Z1bmN0aW9uKHNlbGVjdG9yT3JTY2hlZHVsZXIpKSB7XG4gICAgdGltZXN0YW1wUHJvdmlkZXIgPSBzZWxlY3Rvck9yU2NoZWR1bGVyO1xuICB9XG4gIGNvbnN0IHNlbGVjdG9yID0gaXNGdW5jdGlvbihzZWxlY3Rvck9yU2NoZWR1bGVyKSA/IHNlbGVjdG9yT3JTY2hlZHVsZXIgOiB1bmRlZmluZWQ7XG4gIC8vIE5vdGUsIHdlJ3JlIHBhc3NpbmcgYHNlbGVjdG9yIWAgaGVyZSwgYmVjYXVzZSBhdCBydW50aW1lLCBgdW5kZWZpbmVkYCBpcyBhbiBhY2NlcHRhYmxlIGFyZ3VtZW50XG4gIC8vIGJ1dCBpdCBtYWtlcyBvdXIgVHlwZVNjcmlwdCBzaWduYXR1cmUgZm9yIGBtdWx0aWNhc3RgIHVuaGFwcHkgKGFzIGl0IHNob3VsZCwgYmVjYXVzZSBpdCdzIGdyb3NzKS5cbiAgcmV0dXJuIChzb3VyY2U6IE9ic2VydmFibGU8VD4pID0+IG11bHRpY2FzdChuZXcgUmVwbGF5U3ViamVjdDxUPihidWZmZXJTaXplLCB3aW5kb3dUaW1lLCB0aW1lc3RhbXBQcm92aWRlciksIHNlbGVjdG9yISkoc291cmNlKTtcbn1cbiIsICJpbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2VtcHR5JztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlSW5wdXQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyB0aW1lciB9IGZyb20gJy4uL29ic2VydmFibGUvdGltZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcGVhdENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc291cmNlLiBEZWZhdWx0cyB0byBgSW5maW5pdHlgLlxuICAgKi9cbiAgY291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElmIGEgYG51bWJlcmAsIHdpbGwgZGVsYXkgdGhlIHJlcGVhdCBvZiB0aGUgc291cmNlIGJ5IHRoYXQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAgICogSWYgYSBmdW5jdGlvbiwgaXQgd2lsbCBwcm92aWRlIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHNvdXJjZSBoYXMgYmVlbiBzdWJzY3JpYmVkIHRvLFxuICAgKiBhbmQgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgYSB2YWxpZCBvYnNlcnZhYmxlIGlucHV0IHRoYXQgd2lsbCBub3RpZnkgd2hlbiB0aGUgc291cmNlXG4gICAqIHNob3VsZCBiZSByZXBlYXRlZC4gSWYgdGhlIG5vdGlmaWVyIG9ic2VydmFibGUgaXMgZW1wdHksIHRoZSByZXN1bHQgd2lsbCBjb21wbGV0ZS5cbiAgICovXG4gIGRlbGF5PzogbnVtYmVyIHwgKChjb3VudDogbnVtYmVyKSA9PiBPYnNlcnZhYmxlSW5wdXQ8YW55Pik7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgd2lsbCByZXN1YnNjcmliZSB0byB0aGUgc291cmNlIHN0cmVhbSB3aGVuIHRoZSBzb3VyY2Ugc3RyZWFtIGNvbXBsZXRlcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+UmVwZWF0cyBhbGwgdmFsdWVzIGVtaXR0ZWQgb24gdGhlIHNvdXJjZS4gSXQncyBsaWtlIHtAbGluayByZXRyeX0sIGJ1dCBmb3Igbm9uIGVycm9yIGNhc2VzLjwvc3Bhbj5cbiAqXG4gKiAhW10ocmVwZWF0LnBuZylcbiAqXG4gKiBSZXBlYXQgd2lsbCBvdXRwdXQgdmFsdWVzIGZyb20gYSBzb3VyY2UgdW50aWwgdGhlIHNvdXJjZSBjb21wbGV0ZXMsIHRoZW4gaXQgd2lsbCByZXN1YnNjcmliZSB0byB0aGVcbiAqIHNvdXJjZSBhIHNwZWNpZmllZCBudW1iZXIgb2YgdGltZXMsIHdpdGggYSBzcGVjaWZpZWQgZGVsYXkuIFJlcGVhdCBjYW4gYmUgcGFydGljdWxhcmx5IHVzZWZ1bCBpblxuICogY29tYmluYXRpb24gd2l0aCBjbG9zaW5nIG9wZXJhdG9ycyBsaWtlIHtAbGluayB0YWtlfSwge0BsaW5rIHRha2VVbnRpbH0sIHtAbGluayBmaXJzdH0sIG9yIHtAbGluayB0YWtlV2hpbGV9LFxuICogYXMgaXQgY2FuIGJlIHVzZWQgdG8gcmVzdGFydCBhIHNvdXJjZSBhZ2FpbiBmcm9tIHNjcmF0Y2guXG4gKlxuICogUmVwZWF0IGlzIHZlcnkgc2ltaWxhciB0byB7QGxpbmsgcmV0cnl9LCB3aGVyZSB7QGxpbmsgcmV0cnl9IHdpbGwgcmVzdWJzY3JpYmUgdG8gdGhlIHNvdXJjZSBpbiB0aGUgZXJyb3IgY2FzZSwgYnV0XG4gKiBgcmVwZWF0YCB3aWxsIHJlc3Vic2NyaWJlIGlmIHRoZSBzb3VyY2UgY29tcGxldGVzLlxuICpcbiAqIE5vdGUgdGhhdCBgcmVwZWF0YCB3aWxsIF9ub3RfIGNhdGNoIGVycm9ycy4gVXNlIHtAbGluayByZXRyeX0gZm9yIHRoYXQuXG4gKlxuICogLSBgcmVwZWF0KDApYCByZXR1cm5zIGFuIGVtcHR5IG9ic2VydmFibGVcbiAqIC0gYHJlcGVhdCgpYCB3aWxsIHJlcGVhdCBmb3JldmVyXG4gKiAtIGByZXBlYXQoeyBkZWxheTogMjAwIH0pYCB3aWxsIHJlcGVhdCBmb3JldmVyLCB3aXRoIGEgZGVsYXkgb2YgMjAwbXMgYmV0d2VlbiByZXBldGl0aW9ucy5cbiAqIC0gYHJlcGVhdCh7IGNvdW50OiAyLCBkZWxheTogNDAwIH0pYCB3aWxsIHJlcGVhdCB0d2ljZSwgd2l0aCBhIGRlbGF5IG9mIDQwMG1zIGJldHdlZW4gcmVwZXRpdGlvbnMuXG4gKiAtIGByZXBlYXQoeyBkZWxheTogKGNvdW50KSA9PiB0aW1lcihjb3VudCAqIDEwMDApIH0pYCB3aWxsIHJlcGVhdCBmb3JldmVyLCBidXQgd2lsbCBoYXZlIGEgZGVsYXkgdGhhdCBncm93cyBieSBvbmUgc2Vjb25kIGZvciBlYWNoIHJlcGV0aXRpb24uXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFJlcGVhdCBhIG1lc3NhZ2Ugc3RyZWFtXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCByZXBlYXQgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBzb3VyY2UgPSBvZignUmVwZWF0IG1lc3NhZ2UnKTtcbiAqIGNvbnN0IHJlc3VsdCA9IHNvdXJjZS5waXBlKHJlcGVhdCgzKSk7XG4gKlxuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzXG4gKiAvLyAnUmVwZWF0IG1lc3NhZ2UnXG4gKiAvLyAnUmVwZWF0IG1lc3NhZ2UnXG4gKiAvLyAnUmVwZWF0IG1lc3NhZ2UnXG4gKiBgYGBcbiAqXG4gKiBSZXBlYXQgMyB2YWx1ZXMsIDIgdGltZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIHRha2UsIHJlcGVhdCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHNvdXJjZSA9IGludGVydmFsKDEwMDApO1xuICogY29uc3QgcmVzdWx0ID0gc291cmNlLnBpcGUodGFrZSgzKSwgcmVwZWF0KDIpKTtcbiAqXG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHMgZXZlcnkgc2Vjb25kXG4gKiAvLyAwXG4gKiAvLyAxXG4gKiAvLyAyXG4gKiAvLyAwXG4gKiAvLyAxXG4gKiAvLyAyXG4gKiBgYGBcbiAqXG4gKiBEZWZpbmluZyB0d28gY29tcGxleCByZXBlYXRzIHdpdGggZGVsYXlzIG9uIHRoZSBzYW1lIHNvdXJjZS5cbiAqIE5vdGUgdGhhdCB0aGUgc2Vjb25kIHJlcGVhdCBjYW5ub3QgYmUgY2FsbGVkIHVudGlsIHRoZSBmaXJzdFxuICogcmVwZWF0IGFzIGV4aGF1c3RlZCBpdCdzIGNvdW50LlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBkZWZlciwgb2YsIHJlcGVhdCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHNvdXJjZSA9IGRlZmVyKCgpID0+IHtcbiAqICAgIHJldHVybiBvZihgSGVsbG8sIGl0IGlzICR7bmV3IERhdGUoKX1gKVxuICogfSk7XG4gKlxuICogc291cmNlLnBpcGUoXG4gKiAgICAvLyBSZXBlYXQgMyB0aW1lcyB3aXRoIGEgZGVsYXkgb2YgMSBzZWNvbmQgYmV0d2VlbiByZXBldGl0aW9uc1xuICogICAgcmVwZWF0KHtcbiAqICAgICAgY291bnQ6IDMsXG4gKiAgICAgIGRlbGF5OiAxMDAwLFxuICogICAgfSksXG4gKlxuICogICAgLy8gKlRoZW4qIHJlcGVhdCBmb3JldmVyLCBidXQgd2l0aCBhbiBleHBvbmVudGlhbCBzdGVwLWJhY2tcbiAqICAgIC8vIG1heGluZyBvdXQgYXQgMSBtaW51dGUuXG4gKiAgICByZXBlYXQoe1xuICogICAgICBkZWxheTogKGNvdW50KSA9PiB0aW1lcihNYXRoLm1pbig2MDAwMCwgMiBeIGNvdW50ICogMTAwMCkpXG4gKiAgICB9KVxuICogKVxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgcmVwZWF0V2hlbn1cbiAqIEBzZWUge0BsaW5rIHJldHJ5fVxuICpcbiAqIEBwYXJhbSBjb3VudE9yQ29uZmlnIEVpdGhlciB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBpdGVtcyBhcmUgcmVwZWF0ZWRcbiAqIChhIGNvdW50IG9mIDAgd2lsbCB5aWVsZCBhbiBlbXB0eSBPYnNlcnZhYmxlKSBvciBhIHtAbGluayBSZXBlYXRDb25maWd9IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdDxUPihjb3VudE9yQ29uZmlnPzogbnVtYmVyIHwgUmVwZWF0Q29uZmlnKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgbGV0IGNvdW50ID0gSW5maW5pdHk7XG4gIGxldCBkZWxheTogUmVwZWF0Q29uZmlnWydkZWxheSddO1xuXG4gIGlmIChjb3VudE9yQ29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGNvdW50T3JDb25maWcgPT09ICdvYmplY3QnKSB7XG4gICAgICAoeyBjb3VudCA9IEluZmluaXR5LCBkZWxheSB9ID0gY291bnRPckNvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gY291bnRPckNvbmZpZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY291bnQgPD0gMFxuICAgID8gKCkgPT4gRU1QVFlcbiAgICA6IG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgICAgICBsZXQgc29GYXIgPSAwO1xuICAgICAgICBsZXQgc291cmNlU3ViOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gICAgICAgIGNvbnN0IHJlc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgICAgIHNvdXJjZVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBzb3VyY2VTdWIgPSBudWxsO1xuICAgICAgICAgIGlmIChkZWxheSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBub3RpZmllciA9IHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgPyB0aW1lcihkZWxheSkgOiBpbm5lckZyb20oZGVsYXkoc29GYXIpKTtcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmaWVyU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCAoKSA9PiB7XG4gICAgICAgICAgICAgIG5vdGlmaWVyU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICBzdWJzY3JpYmVUb1NvdXJjZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBub3RpZmllci5zdWJzY3JpYmUobm90aWZpZXJTdWJzY3JpYmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3Vic2NyaWJlVG9Tb3VyY2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlVG9Tb3VyY2UgPSAoKSA9PiB7XG4gICAgICAgICAgbGV0IHN5bmNVbnN1YiA9IGZhbHNlO1xuICAgICAgICAgIHNvdXJjZVN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICAgICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICgrK3NvRmFyIDwgY291bnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlU3ViKSB7XG4gICAgICAgICAgICAgICAgICByZXN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzeW5jVW5zdWIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzeW5jVW5zdWIpIHtcbiAgICAgICAgICAgIHJlc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHN1YnNjcmliZVRvU291cmNlKCk7XG4gICAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi4vU3ViamVjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuXG5pbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGVJbnB1dCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuXG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IG1pcnJvcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhIGBjb21wbGV0ZWAuIElmIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgY2FsbHMgYGNvbXBsZXRlYCwgdGhpcyBtZXRob2Qgd2lsbCBlbWl0IHRvIHRoZSBPYnNlcnZhYmxlIHJldHVybmVkIGZyb20gYG5vdGlmaWVyYC4gSWYgdGhhdCBPYnNlcnZhYmxlXG4gKiBjYWxscyBgY29tcGxldGVgIG9yIGBlcnJvcmAsIHRoZW4gdGhpcyBtZXRob2Qgd2lsbCBjYWxsIGBjb21wbGV0ZWAgb3IgYGVycm9yYCBvbiB0aGUgY2hpbGQgc3Vic2NyaXB0aW9uLiBPdGhlcndpc2VcbiAqIHRoaXMgbWV0aG9kIHdpbGwgcmVzdWJzY3JpYmUgdG8gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqICFbXShyZXBlYXRXaGVuLnBuZylcbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogUmVwZWF0IGEgbWVzc2FnZSBzdHJlYW0gb24gY2xpY2tcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIGZyb21FdmVudCwgcmVwZWF0V2hlbiB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHNvdXJjZSA9IG9mKCdSZXBlYXQgbWVzc2FnZScpO1xuICogY29uc3QgZG9jdW1lbnRDbGljayQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IHNvdXJjZS5waXBlKHJlcGVhdFdoZW4oKCkgPT4gZG9jdW1lbnRDbGljayQpKTtcbiAqXG4gKiByZXN1bHQuc3Vic2NyaWJlKGRhdGEgPT4gY29uc29sZS5sb2coZGF0YSkpXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayByZXBlYXR9XG4gKiBAc2VlIHtAbGluayByZXRyeX1cbiAqIEBzZWUge0BsaW5rIHJldHJ5V2hlbn1cbiAqXG4gKiBAcGFyYW0gbm90aWZpZXIgRnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhbiBPYnNlcnZhYmxlIG9mIG5vdGlmaWNhdGlvbnMgd2l0aFxuICogd2hpY2ggYSB1c2VyIGNhbiBgY29tcGxldGVgIG9yIGBlcnJvcmAsIGFib3J0aW5nIHRoZSByZXBldGl0aW9uLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgbWlycm9ycyB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhIGBjb21wbGV0ZWAuXG4gKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gdjkgb3IgdjEwLiBVc2Uge0BsaW5rIHJlcGVhdH0ncyB7QGxpbmsgUmVwZWF0Q29uZmlnI2RlbGF5IGRlbGF5fSBvcHRpb24gaW5zdGVhZC5cbiAqIEluc3RlYWQgb2YgYHJlcGVhdFdoZW4oKCkgPT4gbm90aWZ5JClgLCB1c2U6IGByZXBlYXQoeyBkZWxheTogKCkgPT4gbm90aWZ5JCB9KWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRXaGVuPFQ+KG5vdGlmaWVyOiAobm90aWZpY2F0aW9uczogT2JzZXJ2YWJsZTx2b2lkPikgPT4gT2JzZXJ2YWJsZUlucHV0PGFueT4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IGlubmVyU3ViOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuICAgIGxldCBzeW5jUmVzdWIgPSBmYWxzZTtcbiAgICBsZXQgY29tcGxldGlvbnMkOiBTdWJqZWN0PHZvaWQ+O1xuICAgIGxldCBpc05vdGlmaWVyQ29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgaXNNYWluQ29tcGxldGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgd2UgY2FuIGNvbXBsZXRlIHRoZSByZXN1bHQsIGNvbXBsZXRlcyBpdCwgYW5kIHJldHVybnMgYHRydWVgIGlmIGl0IHdhcyBjb21wbGV0ZWQuXG4gICAgICovXG4gICAgY29uc3QgY2hlY2tDb21wbGV0ZSA9ICgpID0+IGlzTWFpbkNvbXBsZXRlICYmIGlzTm90aWZpZXJDb21wbGV0ZSAmJiAoc3Vic2NyaWJlci5jb21wbGV0ZSgpLCB0cnVlKTtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdWJqZWN0IHRvIHNlbmQgZXJyb3JzIHRocm91Z2guIElmIGl0IGRvZXNuJ3QgZXhpc3QsXG4gICAgICogd2Uga25vdyB3ZSBuZWVkIHRvIHNldHVwIHRoZSBub3RpZmllci5cbiAgICAgKi9cbiAgICBjb25zdCBnZXRDb21wbGV0aW9uU3ViamVjdCA9ICgpID0+IHtcbiAgICAgIGlmICghY29tcGxldGlvbnMkKSB7XG4gICAgICAgIGNvbXBsZXRpb25zJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAgICAgLy8gSWYgdGhlIGNhbGwgdG8gYG5vdGlmaWVyYCB0aHJvd3MsIGl0IHdpbGwgYmUgY2F1Z2h0IGJ5IHRoZSBPcGVyYXRvclN1YnNjcmliZXJcbiAgICAgICAgLy8gSW4gdGhlIG1haW4gc3Vic2NyaXB0aW9uIC0tIGluIGBzdWJzY3JpYmVGb3JSZXBlYXRXaGVuYC5cbiAgICAgICAgaW5uZXJGcm9tKG5vdGlmaWVyKGNvbXBsZXRpb25zJCkpLnN1YnNjcmliZShcbiAgICAgICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaW5uZXJTdWIpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXBlYXRXaGVuKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiBpbm5lclN1YiB5ZXQsIHRoYXQncyBiZWNhdXNlIHRoZSBpbm5lciBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAvLyBjYWxsIGhhc24ndCBldmVuIHJldHVybmVkIHlldC4gV2UndmUgYXJyaXZlZCBoZXJlIHN5bmNocm9ub3VzbHkuXG4gICAgICAgICAgICAgICAgLy8gU28gd2UgZmxhZyB0aGF0IHdlIHdhbnQgdG8gcmVzdWIsIHN1Y2ggdGhhdCB3ZSBjYW4gZW5zdXJlIGZpbmFsaXphdGlvblxuICAgICAgICAgICAgICAgIC8vIGhhcHBlbnMgYmVmb3JlIHdlIHJlc3Vic2NyaWJlLlxuICAgICAgICAgICAgICAgIHN5bmNSZXN1YiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIGlzTm90aWZpZXJDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tcGxldGlvbnMkO1xuICAgIH07XG5cbiAgICBjb25zdCBzdWJzY3JpYmVGb3JSZXBlYXRXaGVuID0gKCkgPT4ge1xuICAgICAgaXNNYWluQ29tcGxldGUgPSBmYWxzZTtcblxuICAgICAgaW5uZXJTdWIgPSBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgaXNNYWluQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgY29tcGxldGUsIGFuZCBjb21wbGV0ZSBpZiBzby5cbiAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGNvbXBsZXRlLiBHZXQgdGhlIHN1YmplY3QuIFRoaXMgY2FsbHMgdGhlIGBub3RpZmllcmAgZnVuY3Rpb24uXG4gICAgICAgICAgLy8gSWYgdGhhdCBmdW5jdGlvbiBmYWlscywgaXQgd2lsbCB0aHJvdyBhbmQgYC5uZXh0KClgIHdpbGwgbm90IGJlIHJlYWNoZWQgb24gdGhpc1xuICAgICAgICAgIC8vIGxpbmUuIFRoZSB0aHJvd24gZXJyb3IgaXMgY2F1Z2h0IGJ5IHRoZSBfY29tcGxldGUgaGFuZGxlciBpbiB0aGlzXG4gICAgICAgICAgLy8gYE9wZXJhdG9yU3Vic2NyaWJlcmAgYW5kIGhhbmRsZWQgYXBwcm9wcmlhdGVseS5cbiAgICAgICAgICAhY2hlY2tDb21wbGV0ZSgpICYmIGdldENvbXBsZXRpb25TdWJqZWN0KCkubmV4dCgpO1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgaWYgKHN5bmNSZXN1Yikge1xuICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaW5uZXIgc3Vic2NyaXB0aW9uIGlzIHRvcm4gZG93biBiZWZvcmVcbiAgICAgICAgLy8gbW92aW5nIG9uIHRvIHRoZSBuZXh0IHN1YnNjcmlwdGlvbiBpbiB0aGUgc3luY2hyb25vdXMgY2FzZS5cbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcyBoZXJlLCBhbGwgaW5uZXIgc3Vic2NyaXB0aW9ucyB3aWxsIG5vdCBiZVxuICAgICAgICAvLyB0b3JuIGRvd24gdW50aWwgdGhlIGVudGlyZSBvYnNlcnZhYmxlIGlzIGRvbmUuXG4gICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBudWxsIHRoaXMgb3V0LiBOb3Qgb25seSB0byBmcmVlIHVwIG1lbW9yeSwgYnV0XG4gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBjb2RlIGFib3ZlIGtub3dzIHdlIGFyZSBpbiBhIHN1YnNjcmliaW5nIHN0YXRlIHRvXG4gICAgICAgIC8vIGhhbmRsZSBzeW5jaHJvbm91cyByZXN1YnNjcmlwdGlvbi5cbiAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICAvLyBXZSBtYXkgbmVlZCB0byBkbyB0aGlzIG11bHRpcGxlIHRpbWVzLCBzbyByZXNldCB0aGUgZmxhZ3MuXG4gICAgICAgIHN5bmNSZXN1YiA9IGZhbHNlO1xuICAgICAgICAvLyBSZXN1YnNjcmliZVxuICAgICAgICBzdWJzY3JpYmVGb3JSZXBlYXRXaGVuKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFN0YXJ0IHRoZSBzdWJzY3JpcHRpb25cbiAgICBzdWJzY3JpYmVGb3JSZXBlYXRXaGVuKCk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZUlucHV0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS90aW1lcic7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5cbi8qKlxuICogVGhlIHtAbGluayByZXRyeX0gb3BlcmF0b3IgY29uZmlndXJhdGlvbiBvYmplY3QuIGByZXRyeWAgZWl0aGVyIGFjY2VwdHMgYSBgbnVtYmVyYFxuICogb3IgYW4gb2JqZWN0IGRlc2NyaWJlZCBieSB0aGlzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXRyeUNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkuIElmIGBjb3VudGAgaXMgb21pdHRlZCwgYHJldHJ5YCB3aWxsIHRyeSB0b1xuICAgKiByZXN1YnNjcmliZSBvbiBlcnJvcnMgaW5maW5pdGUgbnVtYmVyIG9mIHRpbWVzLlxuICAgKi9cbiAgY291bnQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBiZWZvcmUgcmV0cnlpbmcsIE9SIGEgZnVuY3Rpb24gdG9cbiAgICogcmV0dXJuIGEgbm90aWZpZXIgZm9yIGRlbGF5aW5nLiBJZiBhIGZ1bmN0aW9uIGlzIGdpdmVuLCB0aGF0IGZ1bmN0aW9uIHNob3VsZFxuICAgKiByZXR1cm4gYSBub3RpZmllciB0aGF0LCB3aGVuIGl0IGVtaXRzIHdpbGwgcmV0cnkgdGhlIHNvdXJjZS4gSWYgdGhlIG5vdGlmaWVyXG4gICAqIGNvbXBsZXRlcyBfd2l0aG91dF8gZW1pdHRpbmcsIHRoZSByZXN1bHRpbmcgb2JzZXJ2YWJsZSB3aWxsIGNvbXBsZXRlIHdpdGhvdXQgZXJyb3IsXG4gICAqIGlmIHRoZSBub3RpZmllciBlcnJvcnMsIHRoZSBlcnJvciB3aWxsIGJlIHB1c2hlZCB0byB0aGUgcmVzdWx0LlxuICAgKi9cbiAgZGVsYXk/OiBudW1iZXIgfCAoKGVycm9yOiBhbnksIHJldHJ5Q291bnQ6IG51bWJlcikgPT4gT2JzZXJ2YWJsZUlucHV0PGFueT4pO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcmVzZXQgdGhlIHJldHJ5IGNvdW50ZXIgd2hlbiB0aGUgcmV0cmllZCBzdWJzY3JpcHRpb25cbiAgICogZW1pdHMgaXRzIGZpcnN0IHZhbHVlLlxuICAgKi9cbiAgcmVzZXRPblN1Y2Nlc3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0cnk8VD4oY291bnQ/OiBudW1iZXIpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD47XG5leHBvcnQgZnVuY3Rpb24gcmV0cnk8VD4oY29uZmlnOiBSZXRyeUNvbmZpZyk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPjtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBtaXJyb3JzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aXRoIHRoZSBleGNlcHRpb24gb2YgYW4gYGVycm9yYC5cbiAqXG4gKiBJZiB0aGUgc291cmNlIE9ic2VydmFibGUgY2FsbHMgYGVycm9yYCwgdGhpcyBtZXRob2Qgd2lsbCByZXN1YnNjcmliZSB0byB0aGUgc291cmNlIE9ic2VydmFibGUgZm9yIGEgbWF4aW11bSBvZlxuICogYGNvdW50YCByZXN1YnNjcmlwdGlvbnMgcmF0aGVyIHRoYW4gcHJvcGFnYXRpbmcgdGhlIGBlcnJvcmAgY2FsbC5cbiAqXG4gKiAhW10ocmV0cnkucG5nKVxuICpcbiAqIFRoZSBudW1iZXIgb2YgcmV0cmllcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBgY291bnRgIHBhcmFtZXRlci4gSXQgY2FuIGJlIHNldCBlaXRoZXIgYnkgcGFzc2luZyBhIG51bWJlciB0b1xuICogYHJldHJ5YCBmdW5jdGlvbiBvciBieSBzZXR0aW5nIGBjb3VudGAgcHJvcGVydHkgd2hlbiBgcmV0cnlgIGlzIGNvbmZpZ3VyZWQgdXNpbmcge0BsaW5rIFJldHJ5Q29uZmlnfS4gSWZcbiAqIGBjb3VudGAgaXMgb21pdHRlZCwgYHJldHJ5YCB3aWxsIHRyeSB0byByZXN1YnNjcmliZSBvbiBlcnJvcnMgaW5maW5pdGUgbnVtYmVyIG9mIHRpbWVzLlxuICpcbiAqIEFueSBhbmQgYWxsIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdpbGwgYmUgZW1pdHRlZCBieSB0aGUgcmVzdWx0aW5nIE9ic2VydmFibGUsIGV2ZW4gdGhvc2VcbiAqIGVtaXR0ZWQgZHVyaW5nIGZhaWxlZCBzdWJzY3JpcHRpb25zLiBGb3IgZXhhbXBsZSwgaWYgYW4gT2JzZXJ2YWJsZSBmYWlscyBhdCBmaXJzdCBidXQgZW1pdHMgYFsxLCAyXWAgdGhlblxuICogc3VjY2VlZHMgdGhlIHNlY29uZCB0aW1lIGFuZCBlbWl0czogYFsxLCAyLCAzLCA0LCA1LCBjb21wbGV0ZV1gIHRoZW4gdGhlIGNvbXBsZXRlIHN0cmVhbSBvZiBlbWlzc2lvbnMgYW5kXG4gKiBub3RpZmljYXRpb25zIHdvdWxkIGJlOiBgWzEsIDIsIDEsIDIsIDMsIDQsIDUsIGNvbXBsZXRlXWAuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbnRlcnZhbCwgbWVyZ2VNYXAsIHRocm93RXJyb3IsIG9mLCByZXRyeSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHNvdXJjZSA9IGludGVydmFsKDEwMDApO1xuICogY29uc3QgcmVzdWx0ID0gc291cmNlLnBpcGUoXG4gKiAgIG1lcmdlTWFwKHZhbCA9PiB2YWwgPiA1ID8gdGhyb3dFcnJvcigoKSA9PiAnRXJyb3IhJykgOiBvZih2YWwpKSxcbiAqICAgcmV0cnkoMikgLy8gcmV0cnkgMiB0aW1lcyBvbiBlcnJvclxuICogKTtcbiAqXG4gKiByZXN1bHQuc3Vic2NyaWJlKHtcbiAqICAgbmV4dDogdmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpLFxuICogICBlcnJvcjogZXJyID0+IGNvbnNvbGUubG9nKGAkeyBlcnIgfTogUmV0cmllZCAyIHRpbWVzIHRoZW4gcXVpdCFgKVxuICogfSk7XG4gKlxuICogLy8gT3V0cHV0OlxuICogLy8gMC4uMS4uMi4uMy4uNC4uNS4uXG4gKiAvLyAwLi4xLi4yLi4zLi40Li41Li5cbiAqIC8vIDAuLjEuLjIuLjMuLjQuLjUuLlxuICogLy8gJ0Vycm9yITogUmV0cmllZCAyIHRpbWVzIHRoZW4gcXVpdCEnXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayByZXRyeVdoZW59XG4gKlxuICogQHBhcmFtIGNvbmZpZ09yQ291bnQgRWl0aGVyIG51bWJlciBvZiByZXRyeSBhdHRlbXB0cyBiZWZvcmUgZmFpbGluZyBvciBhXG4gKiB7QGxpbmsgUmV0cnlDb25maWd9IG9iamVjdC5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHdpbGwgcmVzdWJzY3JpYmUgdG8gdGhlXG4gKiBzb3VyY2Ugc3RyZWFtIHdoZW4gdGhlIHNvdXJjZSBzdHJlYW0gZXJyb3JzLCBhdCBtb3N0IGBjb3VudGAgdGltZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXRyeTxUPihjb25maWdPckNvdW50OiBudW1iZXIgfCBSZXRyeUNvbmZpZyA9IEluZmluaXR5KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgbGV0IGNvbmZpZzogUmV0cnlDb25maWc7XG4gIGlmIChjb25maWdPckNvdW50ICYmIHR5cGVvZiBjb25maWdPckNvdW50ID09PSAnb2JqZWN0Jykge1xuICAgIGNvbmZpZyA9IGNvbmZpZ09yQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgY291bnQ6IGNvbmZpZ09yQ291bnQgYXMgbnVtYmVyLFxuICAgIH07XG4gIH1cbiAgY29uc3QgeyBjb3VudCA9IEluZmluaXR5LCBkZWxheSwgcmVzZXRPblN1Y2Nlc3M6IHJlc2V0T25TdWNjZXNzID0gZmFsc2UgfSA9IGNvbmZpZztcblxuICByZXR1cm4gY291bnQgPD0gMFxuICAgID8gaWRlbnRpdHlcbiAgICA6IG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgICAgICBsZXQgc29GYXIgPSAwO1xuICAgICAgICBsZXQgaW5uZXJTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGw7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZUZvclJldHJ5ID0gKCkgPT4ge1xuICAgICAgICAgIGxldCBzeW5jVW5zdWIgPSBmYWxzZTtcbiAgICAgICAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICAgICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICAgICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHJlc2V0dGluZyBvbiBzdWNjZXNzXG4gICAgICAgICAgICAgICAgaWYgKHJlc2V0T25TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICBzb0ZhciA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC8vIENvbXBsZXRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBjb25zdW1lci5cbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNvRmFyKysgPCBjb3VudCkge1xuICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHN0aWxsIHVuZGVyIG91ciByZXRyeSBjb3VudFxuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbm5lclN1Yikge1xuICAgICAgICAgICAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZUZvclJldHJ5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3luY1Vuc3ViID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVzZXIgc3BlY2lmaWVkIGEgcmV0cnkgZGVsYXkuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZXkgZ2F2ZSB1cyBhIG51bWJlciwgdXNlIGEgdGltZXIsIG90aGVyd2lzZSwgaXQncyBhIGZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd2UncmUgZ29pbmcgdG8gY2FsbCBpdCB0byBnZXQgYSBub3RpZmllci5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpZXIgPSB0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInID8gdGltZXIoZGVsYXkpIDogaW5uZXJGcm9tKGRlbGF5KGVyciwgc29GYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpZXJTdWJzY3JpYmVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWZ0ZXIgd2UgZ2V0IHRoZSBmaXJzdCBub3RpZmljYXRpb24sIHdlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIHRoZSBub3RpZmllciwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFueW1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSByZXN1YnNjcmliZSB0byB0aGUgc291cmNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXJTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1YigpO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG5vdGlmaWVyIGNvbXBsZXRlZCB3aXRob3V0IGVtaXR0aW5nLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGF1dGhvciBpcyB0ZWxsaW5nIHVzIHRoZXkgd2FudCB0byBjb21wbGV0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1YnNjcmliZShub3RpZmllclN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgd2FzIG5vIG5vdGlmaWVyIGdpdmVuLiBKdXN0IHJlc3ViIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAgICAgICByZXN1YigpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBXZSdyZSBwYXN0IG91ciBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzLlxuICAgICAgICAgICAgICAgICAgLy8gSnVzdCBzZW5kIGFsb25nIHRoZSBlcnJvci5cbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChzeW5jVW5zdWIpIHtcbiAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXRyeSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnkoKTtcbiAgICAgIH0pO1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5cbmltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZUlucHV0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5cbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgbWlycm9ycyB0aGUgc291cmNlIE9ic2VydmFibGUgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFuIGBlcnJvcmAuIElmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZVxuICogY2FsbHMgYGVycm9yYCwgdGhpcyBtZXRob2Qgd2lsbCBlbWl0IHRoZSBUaHJvd2FibGUgdGhhdCBjYXVzZWQgdGhlIGVycm9yIHRvIHRoZSBgT2JzZXJ2YWJsZUlucHV0YCByZXR1cm5lZCBmcm9tIGBub3RpZmllcmAuXG4gKiBJZiB0aGF0IE9ic2VydmFibGUgY2FsbHMgYGNvbXBsZXRlYCBvciBgZXJyb3JgIHRoZW4gdGhpcyBtZXRob2Qgd2lsbCBjYWxsIGBjb21wbGV0ZWAgb3IgYGVycm9yYCBvbiB0aGUgY2hpbGRcbiAqIHN1YnNjcmlwdGlvbi4gT3RoZXJ3aXNlIHRoaXMgbWV0aG9kIHdpbGwgcmVzdWJzY3JpYmUgdG8gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqICFbXShyZXRyeVdoZW4ucG5nKVxuICpcbiAqIFJldHJ5IGFuIG9ic2VydmFibGUgc2VxdWVuY2Ugb24gZXJyb3IgYmFzZWQgb24gY3VzdG9tIGNyaXRlcmlhLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIG1hcCwgcmV0cnlXaGVuLCB0YXAsIGRlbGF5V2hlbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBzb3VyY2UgPSBpbnRlcnZhbCgxMDAwKTtcbiAqIGNvbnN0IHJlc3VsdCA9IHNvdXJjZS5waXBlKFxuICogICBtYXAodmFsdWUgPT4ge1xuICogICAgIGlmICh2YWx1ZSA+IDUpIHtcbiAqICAgICAgIC8vIGVycm9yIHdpbGwgYmUgcGlja2VkIHVwIGJ5IHJldHJ5V2hlblxuICogICAgICAgdGhyb3cgdmFsdWU7XG4gKiAgICAgfVxuICogICAgIHJldHVybiB2YWx1ZTtcbiAqICAgfSksXG4gKiAgIHJldHJ5V2hlbihlcnJvcnMgPT5cbiAqICAgICBlcnJvcnMucGlwZShcbiAqICAgICAgIC8vIGxvZyBlcnJvciBtZXNzYWdlXG4gKiAgICAgICB0YXAodmFsdWUgPT4gY29uc29sZS5sb2coYFZhbHVlICR7IHZhbHVlIH0gd2FzIHRvbyBoaWdoIWApKSxcbiAqICAgICAgIC8vIHJlc3RhcnQgaW4gNSBzZWNvbmRzXG4gKiAgICAgICBkZWxheVdoZW4odmFsdWUgPT4gdGltZXIodmFsdWUgKiAxMDAwKSlcbiAqICAgICApXG4gKiAgIClcbiAqICk7XG4gKlxuICogcmVzdWx0LnN1YnNjcmliZSh2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSkpO1xuICpcbiAqIC8vIHJlc3VsdHM6XG4gKiAvLyAwXG4gKiAvLyAxXG4gKiAvLyAyXG4gKiAvLyAzXG4gKiAvLyA0XG4gKiAvLyA1XG4gKiAvLyAnVmFsdWUgNiB3YXMgdG9vIGhpZ2ghJ1xuICogLy8gLSBXYWl0IDUgc2Vjb25kcyB0aGVuIHJlcGVhdFxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgcmV0cnl9XG4gKlxuICogQHBhcmFtIG5vdGlmaWVyIEZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYW4gT2JzZXJ2YWJsZSBvZiBub3RpZmljYXRpb25zIHdpdGggd2hpY2ggYVxuICogdXNlciBjYW4gYGNvbXBsZXRlYCBvciBgZXJyb3JgLCBhYm9ydGluZyB0aGUgcmV0cnkuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBtaXJyb3JzIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFuIGBlcnJvcmAuXG4gKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gdjkgb3IgdjEwLCB1c2Uge0BsaW5rIHJldHJ5fSdzIGBkZWxheWAgb3B0aW9uIGluc3RlYWQuXG4gKiBXaWxsIGJlIHJlbW92ZWQgaW4gdjkgb3IgdjEwLiBVc2Uge0BsaW5rIHJldHJ5fSdzIHtAbGluayBSZXRyeUNvbmZpZyNkZWxheSBkZWxheX0gb3B0aW9uIGluc3RlYWQuXG4gKiBJbnN0ZWFkIG9mIGByZXRyeVdoZW4oKCkgPT4gbm90aWZ5JClgLCB1c2U6IGByZXRyeSh7IGRlbGF5OiAoKSA9PiBub3RpZnkkIH0pYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJldHJ5V2hlbjxUPihub3RpZmllcjogKGVycm9yczogT2JzZXJ2YWJsZTxhbnk+KSA9PiBPYnNlcnZhYmxlSW5wdXQ8YW55Pik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBsZXQgaW5uZXJTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGw7XG4gICAgbGV0IHN5bmNSZXN1YiA9IGZhbHNlO1xuICAgIGxldCBlcnJvcnMkOiBTdWJqZWN0PGFueT47XG5cbiAgICBjb25zdCBzdWJzY3JpYmVGb3JSZXRyeVdoZW4gPSAoKSA9PiB7XG4gICAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICAgIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgKGVycikgPT4ge1xuICAgICAgICAgIGlmICghZXJyb3JzJCkge1xuICAgICAgICAgICAgZXJyb3JzJCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgICAgICBpbm5lckZyb20obm90aWZpZXIoZXJyb3JzJCkpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsICgpID0+XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpbm5lclN1YiwgdGhpcyB3YXMgYW4gYXN5bmNocm9ub3VzIGNhbGwsIGtpY2sgb2ZmIHRoZSByZXRyeS5cbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHdlIGRvbid0IGhhdmUgYW4gaW5uZXJTdWIgeWV0LCB0aGF0J3MgYmVjYXVzZSB0aGUgaW5uZXIgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBoYXNuJ3QgZXZlbiByZXR1cm5lZCB5ZXQuIFdlJ3ZlIGFycml2ZWQgaGVyZSBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgICAgIC8vIFNvIHdlIGZsYWcgdGhhdCB3ZSB3YW50IHRvIHJlc3ViLCBzdWNoIHRoYXQgd2UgY2FuIGVuc3VyZSBmaW5hbGl6YXRpb25cbiAgICAgICAgICAgICAgICAvLyBoYXBwZW5zIGJlZm9yZSB3ZSByZXN1YnNjcmliZS5cbiAgICAgICAgICAgICAgICBpbm5lclN1YiA/IHN1YnNjcmliZUZvclJldHJ5V2hlbigpIDogKHN5bmNSZXN1YiA9IHRydWUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlcnJvcnMkKSB7XG4gICAgICAgICAgICAvLyBXZSBoYXZlIHNldCB1cCB0aGUgbm90aWZpZXIgd2l0aG91dCBlcnJvci5cbiAgICAgICAgICAgIGVycm9ycyQubmV4dChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGlmIChzeW5jUmVzdWIpIHtcbiAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGlubmVyIHN1YnNjcmlwdGlvbiBpcyB0b3JuIGRvd24gYmVmb3JlXG4gICAgICAgIC8vIG1vdmluZyBvbiB0byB0aGUgbmV4dCBzdWJzY3JpcHRpb24gaW4gdGhlIHN5bmNocm9ub3VzIGNhc2UuXG4gICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMgaGVyZSwgYWxsIGlubmVyIHN1YnNjcmlwdGlvbnMgd2lsbCBub3QgYmVcbiAgICAgICAgLy8gdG9ybiBkb3duIHVudGlsIHRoZSBlbnRpcmUgb2JzZXJ2YWJsZSBpcyBkb25lLlxuICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgIC8vIFdlIG1heSBuZWVkIHRvIGRvIHRoaXMgbXVsdGlwbGUgdGltZXMsIHNvIHJlc2V0IHRoZSBmbGFnLlxuICAgICAgICBzeW5jUmVzdWIgPSBmYWxzZTtcbiAgICAgICAgLy8gUmVzdWJzY3JpYmVcbiAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnlXaGVuKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFN0YXJ0IHRoZSBzdWJzY3JpcHRpb25cbiAgICBzdWJzY3JpYmVGb3JSZXRyeVdoZW4oKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlSW5wdXQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi91dGlsL25vb3AnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuXG4vKipcbiAqIEVtaXRzIHRoZSBtb3N0IHJlY2VudGx5IGVtaXR0ZWQgdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgd2hlbmV2ZXJcbiAqIGFub3RoZXIgT2JzZXJ2YWJsZSwgdGhlIGBub3RpZmllcmAsIGVtaXRzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIHNhbXBsZVRpbWV9LCBidXQgc2FtcGxlcyB3aGVuZXZlclxuICogdGhlIGBub3RpZmllcmAgYE9ic2VydmFibGVJbnB1dGAgZW1pdHMgc29tZXRoaW5nLjwvc3Bhbj5cbiAqXG4gKiAhW10oc2FtcGxlLnBuZylcbiAqXG4gKiBXaGVuZXZlciB0aGUgYG5vdGlmaWVyYCBgT2JzZXJ2YWJsZUlucHV0YCBlbWl0cyBhIHZhbHVlLCBgc2FtcGxlYFxuICogbG9va3MgYXQgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGFuZCBlbWl0cyB3aGljaGV2ZXIgdmFsdWUgaXQgaGFzIG1vc3QgcmVjZW50bHlcbiAqIGVtaXR0ZWQgc2luY2UgdGhlIHByZXZpb3VzIHNhbXBsaW5nLCB1bmxlc3MgdGhlIHNvdXJjZSBoYXMgbm90IGVtaXR0ZWRcbiAqIGFueXRoaW5nIHNpbmNlIHRoZSBwcmV2aW91cyBzYW1wbGluZy4gVGhlIGBub3RpZmllcmAgaXMgc3Vic2NyaWJlZCB0byBhcyBzb29uXG4gKiBhcyB0aGUgb3V0cHV0IE9ic2VydmFibGUgaXMgc3Vic2NyaWJlZC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogT24gZXZlcnkgY2xpY2ssIHNhbXBsZSB0aGUgbW9zdCByZWNlbnQgYHNlY29uZHNgIHRpbWVyXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgaW50ZXJ2YWwsIHNhbXBsZSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHNlY29uZHMgPSBpbnRlcnZhbCgxMDAwKTtcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCByZXN1bHQgPSBzZWNvbmRzLnBpcGUoc2FtcGxlKGNsaWNrcykpO1xuICpcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBhdWRpdH1cbiAqIEBzZWUge0BsaW5rIGRlYm91bmNlfVxuICogQHNlZSB7QGxpbmsgc2FtcGxlVGltZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlfVxuICpcbiAqIEBwYXJhbSBub3RpZmllciBUaGUgYE9ic2VydmFibGVJbnB1dGAgdG8gdXNlIGZvciBzYW1wbGluZyB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdHMgb2ZcbiAqIHNhbXBsaW5nIHRoZSB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgd2hlbmV2ZXIgdGhlIG5vdGlmaWVyXG4gKiBPYnNlcnZhYmxlIGVtaXRzIHZhbHVlIG9yIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbXBsZTxUPihub3RpZmllcjogT2JzZXJ2YWJsZUlucHV0PGFueT4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgbGV0IGxhc3RWYWx1ZTogVCB8IG51bGwgPSBudWxsO1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgKHZhbHVlKSA9PiB7XG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgbGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG4gICAgaW5uZXJGcm9tKG5vdGlmaWVyKS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGxhc3RWYWx1ZSE7XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG5vb3BcbiAgICAgIClcbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBhc3luY1NjaGVkdWxlciB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIFNjaGVkdWxlckxpa2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBzYW1wbGUgfSBmcm9tICcuL3NhbXBsZSc7XG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJy4uL29ic2VydmFibGUvaW50ZXJ2YWwnO1xuXG4vKipcbiAqIEVtaXRzIHRoZSBtb3N0IHJlY2VudGx5IGVtaXR0ZWQgdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgd2l0aGluXG4gKiBwZXJpb2RpYyB0aW1lIGludGVydmFscy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+U2FtcGxlcyB0aGUgc291cmNlIE9ic2VydmFibGUgYXQgcGVyaW9kaWMgdGltZVxuICogaW50ZXJ2YWxzLCBlbWl0dGluZyB3aGF0IGl0IHNhbXBsZXMuPC9zcGFuPlxuICpcbiAqICFbXShzYW1wbGVUaW1lLnBuZylcbiAqXG4gKiBgc2FtcGxlVGltZWAgcGVyaW9kaWNhbGx5IGxvb2tzIGF0IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhbmQgZW1pdHMgd2hpY2hldmVyXG4gKiB2YWx1ZSBpdCBoYXMgbW9zdCByZWNlbnRseSBlbWl0dGVkIHNpbmNlIHRoZSBwcmV2aW91cyBzYW1wbGluZywgdW5sZXNzIHRoZVxuICogc291cmNlIGhhcyBub3QgZW1pdHRlZCBhbnl0aGluZyBzaW5jZSB0aGUgcHJldmlvdXMgc2FtcGxpbmcuIFRoZSBzYW1wbGluZ1xuICogaGFwcGVucyBwZXJpb2RpY2FsbHkgaW4gdGltZSBldmVyeSBgcGVyaW9kYCBtaWxsaXNlY29uZHMgKG9yIHRoZSB0aW1lIHVuaXRcbiAqIGRlZmluZWQgYnkgdGhlIG9wdGlvbmFsIGBzY2hlZHVsZXJgIGFyZ3VtZW50KS4gVGhlIHNhbXBsaW5nIHN0YXJ0cyBhcyBzb29uIGFzXG4gKiB0aGUgb3V0cHV0IE9ic2VydmFibGUgaXMgc3Vic2NyaWJlZC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogRXZlcnkgc2Vjb25kLCBlbWl0IHRoZSBtb3N0IHJlY2VudCBjbGljayBhdCBtb3N0IG9uY2VcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBzYW1wbGVUaW1lIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGNsaWNrcy5waXBlKHNhbXBsZVRpbWUoMTAwMCkpO1xuICpcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBhdWRpdFRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZVRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWxheX1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlVGltZX1cbiAqXG4gKiBAcGFyYW0gcGVyaW9kIFRoZSBzYW1wbGluZyBwZXJpb2QgZXhwcmVzc2VkIGluIG1pbGxpc2Vjb25kcyBvciB0aGUgdGltZSB1bml0XG4gKiBkZXRlcm1pbmVkIGludGVybmFsbHkgYnkgdGhlIG9wdGlvbmFsIGBzY2hlZHVsZXJgLlxuICogQHBhcmFtIHNjaGVkdWxlciBUaGUge0BsaW5rIFNjaGVkdWxlckxpa2V9IHRvIHVzZSBmb3IgbWFuYWdpbmcgdGhlIHRpbWVyc1xuICogdGhhdCBoYW5kbGUgdGhlIHNhbXBsaW5nLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdHMgb2ZcbiAqIHNhbXBsaW5nIHRoZSB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYXQgdGhlIHNwZWNpZmllZCB0aW1lXG4gKiBpbnRlcnZhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbXBsZVRpbWU8VD4ocGVyaW9kOiBudW1iZXIsIHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZSA9IGFzeW5jU2NoZWR1bGVyKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgcmV0dXJuIHNhbXBsZShpbnRlcnZhbChwZXJpb2QsIHNjaGVkdWxlcikpO1xufVxuIiwgImltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IHNjYW5JbnRlcm5hbHMgfSBmcm9tICcuL3NjYW5JbnRlcm5hbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbjxWLCBBID0gVj4oYWNjdW11bGF0b3I6IChhY2M6IEEgfCBWLCB2YWx1ZTogViwgaW5kZXg6IG51bWJlcikgPT4gQSk6IE9wZXJhdG9yRnVuY3Rpb248ViwgViB8IEE+O1xuZXhwb3J0IGZ1bmN0aW9uIHNjYW48ViwgQT4oYWNjdW11bGF0b3I6IChhY2M6IEEsIHZhbHVlOiBWLCBpbmRleDogbnVtYmVyKSA9PiBBLCBzZWVkOiBBKTogT3BlcmF0b3JGdW5jdGlvbjxWLCBBPjtcbmV4cG9ydCBmdW5jdGlvbiBzY2FuPFYsIEEsIFM+KGFjY3VtdWxhdG9yOiAoYWNjOiBBIHwgUywgdmFsdWU6IFYsIGluZGV4OiBudW1iZXIpID0+IEEsIHNlZWQ6IFMpOiBPcGVyYXRvckZ1bmN0aW9uPFYsIEE+O1xuXG4vLyBUT0RPOiBsaW5rIHRvIGEgXCJyZWR1eCBwYXR0ZXJuXCIgc2VjdGlvbiBpbiB0aGUgZ3VpZGUgKGxvY2F0aW9uIFRCRClcblxuLyoqXG4gKiBVc2VmdWwgZm9yIGVuY2Fwc3VsYXRpbmcgYW5kIG1hbmFnaW5nIHN0YXRlLiBBcHBsaWVzIGFuIGFjY3VtdWxhdG9yIChvciBcInJlZHVjZXIgZnVuY3Rpb25cIilcbiAqIHRvIGVhY2ggdmFsdWUgZnJvbSB0aGUgc291cmNlIGFmdGVyIGFuIGluaXRpYWwgc3RhdGUgaXMgZXN0YWJsaXNoZWQgLS0gZWl0aGVyIHZpYVxuICogYSBgc2VlZGAgdmFsdWUgKHNlY29uZCBhcmd1bWVudCksIG9yIGZyb20gdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlIHNvdXJjZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayByZWR1Y2V9LCBidXQgZW1pdHMgdGhlIGN1cnJlbnRcbiAqIGFjY3VtdWxhdGlvbiBzdGF0ZSBhZnRlciBlYWNoIHVwZGF0ZTwvc3Bhbj5cbiAqXG4gKiAhW10oc2Nhbi5wbmcpXG4gKlxuICogVGhpcyBvcGVyYXRvciBtYWludGFpbnMgYW4gaW50ZXJuYWwgc3RhdGUgYW5kIGVtaXRzIGl0IGFmdGVyIHByb2Nlc3NpbmcgZWFjaCB2YWx1ZSBhcyBmb2xsb3dzOlxuICpcbiAqIDEuIEZpcnN0IHZhbHVlIGFycml2ZXNcbiAqICAgLSBJZiBhIGBzZWVkYCB2YWx1ZSB3YXMgc3VwcGxpZWQgKGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYHNjYW5gKSwgbGV0IGBzdGF0ZSA9IHNlZWRgIGFuZCBgdmFsdWUgPSBmaXJzdFZhbHVlYC5cbiAqICAgLSBJZiBOTyBgc2VlZGAgdmFsdWUgd2FzIHN1cHBsaWVkIChubyBzZWNvbmQgYXJndW1lbnQpLCBsZXQgYHN0YXRlID0gZmlyc3RWYWx1ZWAgYW5kIGdvIHRvIDMuXG4gKiAyLiBMZXQgYHN0YXRlID0gYWNjdW11bGF0b3Ioc3RhdGUsIHZhbHVlKWAuXG4gKiAgIC0gSWYgYW4gZXJyb3IgaXMgdGhyb3duIGJ5IGBhY2N1bXVsYXRvcmAsIG5vdGlmeSB0aGUgY29uc3VtZXIgb2YgYW4gZXJyb3IuIFRoZSBwcm9jZXNzIGVuZHMuXG4gKiAzLiBFbWl0IGBzdGF0ZWAuXG4gKiA0LiBOZXh0IHZhbHVlIGFycml2ZXMsIGxldCBgdmFsdWUgPSBuZXh0VmFsdWVgLCBnbyB0byAyLlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogQW4gYXZlcmFnZSBvZiBwcmV2aW91cyBudW1iZXJzLiBUaGlzIGV4YW1wbGUgc2hvd3MgaG93XG4gKiBub3QgcHJvdmlkaW5nIGEgYHNlZWRgIGNhbiBwcmltZSB0aGUgc3RyZWFtIHdpdGggdGhlXG4gKiBmaXJzdCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBzY2FuLCBtYXAgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBudW1iZXJzJCA9IG9mKDEsIDIsIDMpO1xuICpcbiAqIG51bWJlcnMkXG4gKiAgIC5waXBlKFxuICogICAgIC8vIEdldCB0aGUgc3VtIG9mIHRoZSBudW1iZXJzIGNvbWluZyBpbi5cbiAqICAgICBzY2FuKCh0b3RhbCwgbikgPT4gdG90YWwgKyBuKSxcbiAqICAgICAvLyBHZXQgdGhlIGF2ZXJhZ2UgYnkgZGl2aWRpbmcgdGhlIHN1bSBieSB0aGUgdG90YWwgbnVtYmVyXG4gKiAgICAgLy8gcmVjZWl2ZWQgc28gZmFyICh3aGljaCBpcyAxIG1vcmUgdGhhbiB0aGUgemVyby1iYXNlZCBpbmRleCkuXG4gKiAgICAgbWFwKChzdW0sIGluZGV4KSA9PiBzdW0gLyAoaW5kZXggKyAxKSlcbiAqICAgKVxuICogICAuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBGaWJvbmFjY2kgc2VxdWVuY2UuIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgeW91IGNhbiB1c2VcbiAqIGEgc2VlZCB0byBwcmltZSBhY2N1bXVsYXRpb24gcHJvY2Vzcy4gQWxzby4uLiB5b3Uga25vdy4uLiBGaWJvbmFjY2kuXG4gKiBTbyBpbXBvcnRhbnQgdG8gbGlrZSwgY29tcHV0ZXJzIGFuZCBzdHVmZiB0aGF0IGl0cyB3aGl0ZWJvYXJkZWRcbiAqIGluIGpvYiBpbnRlcnZpZXdzLiBOb3cgeW91IGNhbiBzaG93IHRoZW0gdGhlIFJ4IHZlcnNpb24hIChQbGVhc2UgZG9uJ3QsIGhhaGEpXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCBzY2FuLCBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGZpcnN0VHdvRmlicyA9IFswLCAxXTtcbiAqIC8vIEFuIGVuZGxlc3Mgc3RyZWFtIG9mIEZpYm9uYWNjaSBudW1iZXJzLlxuICogY29uc3QgZmlib25hY2NpJCA9IGludGVydmFsKDEwMDApLnBpcGUoXG4gKiAgIC8vIFNjYW4gdG8gZ2V0IHRoZSBmaWJvbmFjY2kgbnVtYmVycyAoYWZ0ZXIgMCwgMSlcbiAqICAgc2NhbigoW2EsIGJdKSA9PiBbYiwgYSArIGJdLCBmaXJzdFR3b0ZpYnMpLFxuICogICAvLyBHZXQgdGhlIHNlY29uZCBudW1iZXIgaW4gdGhlIHR1cGxlLCBpdCdzIHRoZSBvbmUgeW91IGNhbGN1bGF0ZWRcbiAqICAgbWFwKChbLCBuXSkgPT4gbiksXG4gKiAgIC8vIFN0YXJ0IHdpdGggb3VyIGZpcnN0IHR3byBkaWdpdHMgOilcbiAqICAgc3RhcnRXaXRoKC4uLmZpcnN0VHdvRmlicylcbiAqICk7XG4gKlxuICogZmlib25hY2NpJC5zdWJzY3JpYmUoY29uc29sZS5sb2cpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgZXhwYW5kfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VTY2FufVxuICogQHNlZSB7QGxpbmsgcmVkdWNlfVxuICogQHNlZSB7QGxpbmsgc3dpdGNoU2Nhbn1cbiAqXG4gKiBAcGFyYW0gYWNjdW11bGF0b3IgQSBcInJlZHVjZXIgZnVuY3Rpb25cIi4gVGhpcyB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCB2YWx1ZSBhZnRlciBhbiBpbml0aWFsIHN0YXRlIGlzXG4gKiBhY3F1aXJlZC5cbiAqIEBwYXJhbSBzZWVkIFRoZSBpbml0aWFsIHN0YXRlLiBJZiB0aGlzIGlzIG5vdCBwcm92aWRlZCwgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlIHNvdXJjZSB3aWxsXG4gKiBiZSB1c2VkIGFzIHRoZSBpbml0aWFsIHN0YXRlLCBhbmQgZW1pdHRlZCB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIGFjY3VtdWxhdG9yLiBBbGwgc3Vic2VxdWVudCB2YWx1ZXNcbiAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoZSBhY2N1bXVsYXRvciBmdW5jdGlvbi4gSWYgdGhpcyBpcyBwcm92aWRlZCwgYWxsIHZhbHVlcyB3aWxsIGdvIHRocm91Z2hcbiAqIHRoZSBhY2N1bXVsYXRvciBmdW5jdGlvbi5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiB0aGUgYWNjdW11bGF0ZWQgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NhbjxWLCBBLCBTPihhY2N1bXVsYXRvcjogKGFjYzogViB8IEEgfCBTLCB2YWx1ZTogViwgaW5kZXg6IG51bWJlcikgPT4gQSwgc2VlZD86IFMpOiBPcGVyYXRvckZ1bmN0aW9uPFYsIFYgfCBBPiB7XG4gIC8vIHByb3ZpZGluZyBhIHNlZWQgb2YgYHVuZGVmaW5lZGAgKnNob3VsZCogYmUgdmFsaWQgYW5kIHRyaWdnZXJcbiAgLy8gaGFzU2VlZCEgc28gZG9uJ3QgdXNlIGBzZWVkICE9PSB1bmRlZmluZWRgIGNoZWNrcyFcbiAgLy8gRm9yIHRoaXMgcmVhc29uLCB3ZSBoYXZlIHRvIGNoZWNrIGl0IGhlcmUgYXQgdGhlIG9yaWdpbmFsIGNhbGwgc2l0ZVxuICAvLyBvdGhlcndpc2UgaW5zaWRlIE9wZXJhdG9yL1N1YnNjcmliZXIgd2Ugd29uJ3Qga25vdyBpZiBgdW5kZWZpbmVkYFxuICAvLyBtZWFucyB0aGV5IGRpZG4ndCBwcm92aWRlIGFueXRoaW5nIG9yIGlmIHRoZXkgbGl0ZXJhbGx5IHByb3ZpZGVkIGB1bmRlZmluZWRgXG4gIHJldHVybiBvcGVyYXRlKHNjYW5JbnRlcm5hbHMoYWNjdW11bGF0b3IsIHNlZWQgYXMgUywgYXJndW1lbnRzLmxlbmd0aCA+PSAyLCB0cnVlKSk7XG59XG4iLCAiaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZUlucHV0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5cbi8qKlxuICogQ29tcGFyZXMgYWxsIHZhbHVlcyBvZiB0d28gb2JzZXJ2YWJsZXMgaW4gc2VxdWVuY2UgdXNpbmcgYW4gb3B0aW9uYWwgY29tcGFyYXRvciBmdW5jdGlvblxuICogYW5kIHJldHVybnMgYW4gb2JzZXJ2YWJsZSBvZiBhIHNpbmdsZSBib29sZWFuIHZhbHVlIHJlcHJlc2VudGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgdHdvIHNlcXVlbmNlc1xuICogYXJlIGVxdWFsLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5DaGVja3MgdG8gc2VlIG9mIGFsbCB2YWx1ZXMgZW1pdHRlZCBieSBib3RoIG9ic2VydmFibGVzIGFyZSBlcXVhbCwgaW4gb3JkZXIuPC9zcGFuPlxuICpcbiAqICFbXShzZXF1ZW5jZUVxdWFsLnBuZylcbiAqXG4gKiBgc2VxdWVuY2VFcXVhbGAgc3Vic2NyaWJlcyB0byBzb3VyY2Ugb2JzZXJ2YWJsZSBhbmQgYGNvbXBhcmVUb2AgYE9ic2VydmFibGVJbnB1dGAgKHRoYXQgaW50ZXJuYWxseVxuICogZ2V0cyBjb252ZXJ0ZWQgdG8gYW4gb2JzZXJ2YWJsZSkgYW5kIGJ1ZmZlcnMgaW5jb21pbmcgdmFsdWVzIGZyb20gZWFjaCBvYnNlcnZhYmxlLiBXaGVuZXZlciBlaXRoZXJcbiAqIG9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZSwgdGhlIHZhbHVlIGlzIGJ1ZmZlcmVkIGFuZCB0aGUgYnVmZmVycyBhcmUgc2hpZnRlZCBhbmQgY29tcGFyZWQgZnJvbSB0aGUgYm90dG9tXG4gKiB1cDsgSWYgYW55IHZhbHVlIHBhaXIgZG9lc24ndCBtYXRjaCwgdGhlIHJldHVybmVkIG9ic2VydmFibGUgd2lsbCBlbWl0IGBmYWxzZWAgYW5kIGNvbXBsZXRlLiBJZiBvbmUgb2YgdGhlXG4gKiBvYnNlcnZhYmxlcyBjb21wbGV0ZXMsIHRoZSBvcGVyYXRvciB3aWxsIHdhaXQgZm9yIHRoZSBvdGhlciBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlOyBJZiB0aGUgb3RoZXJcbiAqIG9ic2VydmFibGUgZW1pdHMgYmVmb3JlIGNvbXBsZXRpbmcsIHRoZSByZXR1cm5lZCBvYnNlcnZhYmxlIHdpbGwgZW1pdCBgZmFsc2VgIGFuZCBjb21wbGV0ZS4gSWYgb25lIG9ic2VydmFibGUgbmV2ZXJcbiAqIGNvbXBsZXRlcyBvciBlbWl0cyBhZnRlciB0aGUgb3RoZXIgY29tcGxldGVzLCB0aGUgcmV0dXJuZWQgb2JzZXJ2YWJsZSB3aWxsIG5ldmVyIGNvbXBsZXRlLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBGaWd1cmUgb3V0IGlmIHRoZSBLb25hbWkgY29kZSBtYXRjaGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb20sIGZyb21FdmVudCwgbWFwLCBidWZmZXJDb3VudCwgbWVyZ2VNYXAsIHNlcXVlbmNlRXF1YWwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjb2RlcyA9IGZyb20oW1xuICogICAnQXJyb3dVcCcsXG4gKiAgICdBcnJvd1VwJyxcbiAqICAgJ0Fycm93RG93bicsXG4gKiAgICdBcnJvd0Rvd24nLFxuICogICAnQXJyb3dMZWZ0JyxcbiAqICAgJ0Fycm93UmlnaHQnLFxuICogICAnQXJyb3dMZWZ0JyxcbiAqICAgJ0Fycm93UmlnaHQnLFxuICogICAnS2V5QicsXG4gKiAgICdLZXlBJyxcbiAqICAgJ0VudGVyJywgLy8gbm8gc3RhcnQga2V5LCBjbGVhcmx5LlxuICogXSk7XG4gKlxuICogY29uc3Qga2V5cyA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleXVwJykucGlwZShtYXAoZSA9PiBlLmNvZGUpKTtcbiAqIGNvbnN0IG1hdGNoZXMgPSBrZXlzLnBpcGUoXG4gKiAgIGJ1ZmZlckNvdW50KDExLCAxKSxcbiAqICAgbWVyZ2VNYXAobGFzdDExID0+IGZyb20obGFzdDExKS5waXBlKHNlcXVlbmNlRXF1YWwoY29kZXMpKSlcbiAqICk7XG4gKiBtYXRjaGVzLnN1YnNjcmliZShtYXRjaGVkID0+IGNvbnNvbGUubG9nKCdTdWNjZXNzZnVsIGNoZWF0IGF0IENvbnRyYT8gJywgbWF0Y2hlZCkpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgY29tYmluZUxhdGVzdH1cbiAqIEBzZWUge0BsaW5rIHppcH1cbiAqIEBzZWUge0BsaW5rIHdpdGhMYXRlc3RGcm9tfVxuICpcbiAqIEBwYXJhbSBjb21wYXJlVG8gVGhlIGBPYnNlcnZhYmxlSW5wdXRgIHNlcXVlbmNlIHRvIGNvbXBhcmUgdGhlIHNvdXJjZSBzZXF1ZW5jZSB0by5cbiAqIEBwYXJhbSBjb21wYXJhdG9yIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNvbXBhcmUgZWFjaCB2YWx1ZSBwYWlyLlxuICpcbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGEgc2luZ2xlIGJvb2xlYW5cbiAqIHZhbHVlIHJlcHJlc2VudGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSBhbmQgcHJvdmlkZWQgYE9ic2VydmFibGVJbnB1dGAgd2VyZSBlcXVhbCBpbiBzZXF1ZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlRXF1YWw8VD4oXG4gIGNvbXBhcmVUbzogT2JzZXJ2YWJsZUlucHV0PFQ+LFxuICBjb21wYXJhdG9yOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbiA9IChhLCBiKSA9PiBhID09PSBiXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIGJvb2xlYW4+IHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIC8vIFRoZSBzdGF0ZSBmb3IgdGhlIHNvdXJjZSBvYnNlcnZhYmxlXG4gICAgY29uc3QgYVN0YXRlID0gY3JlYXRlU3RhdGU8VD4oKTtcbiAgICAvLyBUaGUgc3RhdGUgZm9yIHRoZSBjb21wYXJlVG8gb2JzZXJ2YWJsZTtcbiAgICBjb25zdCBiU3RhdGUgPSBjcmVhdGVTdGF0ZTxUPigpO1xuXG4gICAgLyoqIEEgdXRpbGl0eSB0byBlbWl0IGFuZCBjb21wbGV0ZSAqL1xuICAgIGNvbnN0IGVtaXQgPSAoaXNFcXVhbDogYm9vbGVhbikgPT4ge1xuICAgICAgc3Vic2NyaWJlci5uZXh0KGlzRXF1YWwpO1xuICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3Vic2NyaWJlciB0aGF0IHN1YnNjcmliZXMgdG8gb25lIG9mIHRoZSBzb3VyY2VzLCBhbmQgY29tcGFyZXMgaXRzIGNvbGxlY3RlZFxuICAgICAqIHN0YXRlIC0tIGBzZWxmU3RhdGVgIC0tIHRvIHRoZSBvdGhlciBzb3VyY2UncyBjb2xsZWN0ZWQgc3RhdGUgLS0gYG90aGVyU3RhdGVgLiBUaGlzXG4gICAgICogaXMgdXNlZCBmb3IgYm90aCBzdHJlYW1zLlxuICAgICAqL1xuICAgIGNvbnN0IGNyZWF0ZVN1YnNjcmliZXIgPSAoc2VsZlN0YXRlOiBTZXF1ZW5jZVN0YXRlPFQ+LCBvdGhlclN0YXRlOiBTZXF1ZW5jZVN0YXRlPFQ+KSA9PiB7XG4gICAgICBjb25zdCBzZXF1ZW5jZUVxdWFsU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihcbiAgICAgICAgc3Vic2NyaWJlcixcbiAgICAgICAgKGE6IFQpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGJ1ZmZlciwgY29tcGxldGUgfSA9IG90aGVyU3RhdGU7XG4gICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gdmFsdWVzIGluIHRoZSBvdGhlciBidWZmZXJcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgb3RoZXIgc3RyZWFtIGlzIGNvbXBsZXRlLCB3ZSBrbm93XG4gICAgICAgICAgICAvLyB0aGlzIGlzbid0IGEgbWF0Y2gsIGJlY2F1c2Ugd2UgZ290IG9uZSBtb3JlIHZhbHVlLlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBwdXNoIG9udG8gb3VyIGJ1ZmZlciwgc28gd2hlbiB0aGUgb3RoZXJcbiAgICAgICAgICAgIC8vIHN0cmVhbSBlbWl0cywgaXQgY2FuIHB1bGwgdGhpcyB2YWx1ZSBvZmYgb3VyIGJ1ZmZlciBhbmQgY2hlY2sgaXRcbiAgICAgICAgICAgIC8vIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lLlxuICAgICAgICAgICAgY29tcGxldGUgPyBlbWl0KGZhbHNlKSA6IHNlbGZTdGF0ZS5idWZmZXIucHVzaChhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlIG90aGVyIHN0cmVhbSAqZG9lcyogaGF2ZSB2YWx1ZXMgaW4gaXRzIGJ1ZmZlcixcbiAgICAgICAgICAgIC8vIHB1bGwgdGhlIG9sZGVzdCBvbmUgb2ZmIHNvIHdlIGNhbiBjb21wYXJlIGl0IHRvIHdoYXQgd2VcbiAgICAgICAgICAgIC8vIGp1c3QgZ290LiBJZiBpdCB3YXNuJ3QgYSBtYXRjaCwgZW1pdCBgZmFsc2VgIGFuZCBjb21wbGV0ZS5cbiAgICAgICAgICAgICFjb21wYXJhdG9yKGEsIGJ1ZmZlci5zaGlmdCgpISkgJiYgZW1pdChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgLy8gT3Igb2JzZXJ2YWJsZSBjb21wbGV0ZWRcbiAgICAgICAgICBzZWxmU3RhdGUuY29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHsgY29tcGxldGUsIGJ1ZmZlciB9ID0gb3RoZXJTdGF0ZTtcbiAgICAgICAgICAvLyBJZiB0aGUgb3RoZXIgb2JzZXJ2YWJsZSBpcyBhbHNvIGNvbXBsZXRlLCBhbmQgdGhlcmUnc1xuICAgICAgICAgIC8vIHN0aWxsIHN0dWZmIGxlZnQgaW4gdGhlaXIgYnVmZmVyLCBpdCBkb2Vzbid0IG1hdGNoLCBpZiB0aGVpclxuICAgICAgICAgIC8vIGJ1ZmZlciBpcyBlbXB0eSwgdGhlbiBpdCBkb2VzIG1hdGNoLiBUaGlzIGlzIGJlY2F1c2Ugd2UgY2FuJ3RcbiAgICAgICAgICAvLyBwb3NzaWJseSBnZXQgbW9yZSB2YWx1ZXMgaGVyZSBhbnltb3JlLlxuICAgICAgICAgIGNvbXBsZXRlICYmIGVtaXQoYnVmZmVyLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byBjbGVhbiB1cCBvdXIgc3RyZWFtIGFzIHNvb24gYXMgcG9zc2libGUgaWYgd2UgY2FuLlxuICAgICAgICAgIHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gc2VxdWVuY2VFcXVhbFN1YnNjcmliZXI7XG4gICAgfTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBlYWNoIHNvdXJjZS5cbiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZVN1YnNjcmliZXIoYVN0YXRlLCBiU3RhdGUpKTtcbiAgICBpbm5lckZyb20oY29tcGFyZVRvKS5zdWJzY3JpYmUoY3JlYXRlU3Vic2NyaWJlcihiU3RhdGUsIGFTdGF0ZSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBIHNpbXBsZSBzdHJ1Y3R1cmUgZm9yIHRoZSBkYXRhIHVzZWQgdG8gdGVzdCBlYWNoIHNlcXVlbmNlXG4gKi9cbmludGVyZmFjZSBTZXF1ZW5jZVN0YXRlPFQ+IHtcbiAgLyoqIEEgdGVtcG9yYXJ5IHN0b3JlIGZvciBhcnJpdmVkIHZhbHVlcyBiZWZvcmUgdGhleSBhcmUgY2hlY2tlZCAqL1xuICBidWZmZXI6IFRbXTtcbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBzZXF1ZW5jZSBzb3VyY2UgaGFzIGNvbXBsZXRlZC4gKi9cbiAgY29tcGxldGU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNpbXBsZSBzdHJ1Y3R1cmUgdGhhdCBpcyB1c2VkIHRvIHJlcHJlc2VudFxuICogZGF0YSB1c2VkIHRvIHRlc3QgZWFjaCBzZXF1ZW5jZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3RhdGU8VD4oKTogU2VxdWVuY2VTdGF0ZTxUPiB7XG4gIHJldHVybiB7XG4gICAgYnVmZmVyOiBbXSxcbiAgICBjb21wbGV0ZTogZmFsc2UsXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gJy4uL1JlcGxheVN1YmplY3QnO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBTY2hlZHVsZXJMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgc2hhcmUgfSBmcm9tICcuL3NoYXJlJztcblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZVJlcGxheUNvbmZpZyB7XG4gIGJ1ZmZlclNpemU/OiBudW1iZXI7XG4gIHdpbmRvd1RpbWU/OiBudW1iZXI7XG4gIHJlZkNvdW50OiBib29sZWFuO1xuICBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hhcmVSZXBsYXk8VD4oY29uZmlnOiBTaGFyZVJlcGxheUNvbmZpZyk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPjtcbmV4cG9ydCBmdW5jdGlvbiBzaGFyZVJlcGxheTxUPihidWZmZXJTaXplPzogbnVtYmVyLCB3aW5kb3dUaW1lPzogbnVtYmVyLCBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+O1xuXG4vKipcbiAqIFNoYXJlIHNvdXJjZSBhbmQgcmVwbGF5IHNwZWNpZmllZCBudW1iZXIgb2YgZW1pc3Npb25zIG9uIHN1YnNjcmlwdGlvbi5cbiAqXG4gKiBUaGlzIG9wZXJhdG9yIGlzIGEgc3BlY2lhbGl6YXRpb24gb2YgYHJlcGxheWAgdGhhdCBjb25uZWN0cyB0byBhIHNvdXJjZSBvYnNlcnZhYmxlXG4gKiBhbmQgbXVsdGljYXN0cyB0aHJvdWdoIGEgYFJlcGxheVN1YmplY3RgIGNvbnN0cnVjdGVkIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuXG4gKiBBIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgc291cmNlIHdpbGwgc3RheSBjYWNoZWQgaW4gdGhlIGBzaGFyZVJlcGxheWBlZCBvYnNlcnZhYmxlIGZvcmV2ZXIsXG4gKiBidXQgYW4gZXJyb3JlZCBzb3VyY2UgY2FuIGJlIHJldHJpZWQuXG4gKlxuICogIyMgV2h5IHVzZSBgc2hhcmVSZXBsYXlgP1xuICpcbiAqIFlvdSBnZW5lcmFsbHkgd2FudCB0byB1c2UgYHNoYXJlUmVwbGF5YCB3aGVuIHlvdSBoYXZlIHNpZGUtZWZmZWN0cyBvciB0YXhpbmcgY29tcHV0YXRpb25zXG4gKiB0aGF0IHlvdSBkbyBub3Qgd2lzaCB0byBiZSBleGVjdXRlZCBhbW9uZ3N0IG11bHRpcGxlIHN1YnNjcmliZXJzLlxuICogSXQgbWF5IGFsc28gYmUgdmFsdWFibGUgaW4gc2l0dWF0aW9ucyB3aGVyZSB5b3Uga25vdyB5b3Ugd2lsbCBoYXZlIGxhdGUgc3Vic2NyaWJlcnMgdG9cbiAqIGEgc3RyZWFtIHRoYXQgbmVlZCBhY2Nlc3MgdG8gcHJldmlvdXNseSBlbWl0dGVkIHZhbHVlcy5cbiAqIFRoaXMgYWJpbGl0eSB0byByZXBsYXkgdmFsdWVzIG9uIHN1YnNjcmlwdGlvbiBpcyB3aGF0IGRpZmZlcmVudGlhdGVzIHtAbGluayBzaGFyZX0gYW5kIGBzaGFyZVJlcGxheWAuXG4gKlxuICogIyMgUmVmZXJlbmNlIGNvdW50aW5nXG4gKlxuICogQnkgZGVmYXVsdCBgc2hhcmVSZXBsYXlgIHdpbGwgdXNlIGByZWZDb3VudGAgb2YgZmFsc2UsIG1lYW5pbmcgdGhhdCBpdCB3aWxsIF9ub3RfIHVuc3Vic2NyaWJlIHRoZVxuICogc291cmNlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudGVyIGRyb3BzIHRvIHplcm8sIGkuZS4gdGhlIGlubmVyIGBSZXBsYXlTdWJqZWN0YCB3aWxsIF9ub3RfIGJlIHVuc3Vic2NyaWJlZFxuICogKGFuZCBwb3RlbnRpYWxseSBydW4gZm9yIGV2ZXIpLlxuICogVGhpcyBpcyB0aGUgZGVmYXVsdCBhcyBpdCBpcyBleHBlY3RlZCB0aGF0IGBzaGFyZVJlcGxheWAgaXMgb2Z0ZW4gdXNlZCB0byBrZWVwIGFyb3VuZCBleHBlbnNpdmUgdG8gc2V0dXBcbiAqIG9ic2VydmFibGVzIHdoaWNoIHdlIHdhbnQgdG8ga2VlcCBydW5uaW5nIGluc3RlYWQgb2YgaGF2aW5nIHRvIGRvIHRoZSBleHBlbnNpdmUgc2V0dXAgYWdhaW4uXG4gKlxuICogQXMgb2YgUlhKUyB2ZXJzaW9uIDYuNC4wIGEgbmV3IG92ZXJsb2FkIHNpZ25hdHVyZSB3YXMgYWRkZWQgdG8gYWxsb3cgZm9yIG1hbnVhbCBjb250cm9sIG92ZXIgd2hhdFxuICogaGFwcGVucyB3aGVuIHRoZSBvcGVyYXRvcnMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50ZXIgZHJvcHMgdG8gemVyby5cbiAqIElmIGByZWZDb3VudGAgaXMgdHJ1ZSwgdGhlIHNvdXJjZSB3aWxsIGJlIHVuc3Vic2NyaWJlZCBmcm9tIG9uY2UgdGhlIHJlZmVyZW5jZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBpLmUuXG4gKiB0aGUgaW5uZXIgYFJlcGxheVN1YmplY3RgIHdpbGwgYmUgdW5zdWJzY3JpYmVkLiBBbGwgbmV3IHN1YnNjcmliZXJzIHdpbGwgcmVjZWl2ZSB2YWx1ZSBlbWlzc2lvbnMgZnJvbSBhXG4gKiBuZXcgYFJlcGxheVN1YmplY3RgIHdoaWNoIGluIHR1cm4gd2lsbCBjYXVzZSBhIG5ldyBzdWJzY3JpcHRpb24gdG8gdGhlIHNvdXJjZSBvYnNlcnZhYmxlLlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogRXhhbXBsZSB3aXRoIGEgdGhpcmQgc3Vic2NyaWJlciBjb21pbmcgbGF0ZSB0byB0aGUgcGFydHlcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIHRha2UsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgc2hhcmVkJCA9IGludGVydmFsKDIwMDApLnBpcGUoXG4gKiAgIHRha2UoNiksXG4gKiAgIHNoYXJlUmVwbGF5KDMpXG4gKiApO1xuICpcbiAqIHNoYXJlZCQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coJ3N1YiBBOiAnLCB4KSk7XG4gKiBzaGFyZWQkLnN1YnNjcmliZSh5ID0+IGNvbnNvbGUubG9nKCdzdWIgQjogJywgeSkpO1xuICpcbiAqIHNldFRpbWVvdXQoKCkgPT4ge1xuICogICBzaGFyZWQkLnN1YnNjcmliZSh5ID0+IGNvbnNvbGUubG9nKCdzdWIgQzogJywgeSkpO1xuICogfSwgMTEwMDApO1xuICpcbiAqIC8vIExvZ3M6XG4gKiAvLyAoYWZ0ZXIgfjIwMDAgbXMpXG4gKiAvLyBzdWIgQTogMFxuICogLy8gc3ViIEI6IDBcbiAqIC8vIChhZnRlciB+NDAwMCBtcylcbiAqIC8vIHN1YiBBOiAxXG4gKiAvLyBzdWIgQjogMVxuICogLy8gKGFmdGVyIH42MDAwIG1zKVxuICogLy8gc3ViIEE6IDJcbiAqIC8vIHN1YiBCOiAyXG4gKiAvLyAoYWZ0ZXIgfjgwMDAgbXMpXG4gKiAvLyBzdWIgQTogM1xuICogLy8gc3ViIEI6IDNcbiAqIC8vIChhZnRlciB+MTAwMDAgbXMpXG4gKiAvLyBzdWIgQTogNFxuICogLy8gc3ViIEI6IDRcbiAqIC8vIChhZnRlciB+MTEwMDAgbXMsIHN1YiBDIGdldHMgdGhlIGxhc3QgMyB2YWx1ZXMpXG4gKiAvLyBzdWIgQzogMlxuICogLy8gc3ViIEM6IDNcbiAqIC8vIHN1YiBDOiA0XG4gKiAvLyAoYWZ0ZXIgfjEyMDAwIG1zKVxuICogLy8gc3ViIEE6IDVcbiAqIC8vIHN1YiBCOiA1XG4gKiAvLyBzdWIgQzogNVxuICogYGBgXG4gKlxuICogRXhhbXBsZSBmb3IgYHJlZkNvdW50YCB1c2FnZVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBPYnNlcnZhYmxlLCB0YXAsIGludGVydmFsLCBzaGFyZVJlcGxheSwgdGFrZSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGxvZyA9IDxUPihuYW1lOiBzdHJpbmcsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gc291cmNlLnBpcGUoXG4gKiAgIHRhcCh7XG4gKiAgICAgc3Vic2NyaWJlOiAoKSA9PiBjb25zb2xlLmxvZyhgJHsgbmFtZSB9OiBzdWJzY3JpYmVkYCksXG4gKiAgICAgbmV4dDogdmFsdWUgPT4gY29uc29sZS5sb2coYCR7IG5hbWUgfTogJHsgdmFsdWUgfWApLFxuICogICAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZyhgJHsgbmFtZSB9OiBjb21wbGV0ZWRgKSxcbiAqICAgICBmaW5hbGl6ZTogKCkgPT4gY29uc29sZS5sb2coYCR7IG5hbWUgfTogdW5zdWJzY3JpYmVkYClcbiAqICAgfSlcbiAqICk7XG4gKlxuICogY29uc3Qgb2JzJCA9IGxvZygnc291cmNlJywgaW50ZXJ2YWwoMTAwMCkpO1xuICpcbiAqIGNvbnN0IHNoYXJlZCQgPSBsb2coJ3NoYXJlZCcsIG9icyQucGlwZShcbiAqICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAqICAgdGFrZSgyKVxuICogKSk7XG4gKlxuICogc2hhcmVkJC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZygnc3ViIEE6ICcsIHgpKTtcbiAqIHNoYXJlZCQuc3Vic2NyaWJlKHkgPT4gY29uc29sZS5sb2coJ3N1YiBCOiAnLCB5KSk7XG4gKlxuICogLy8gUFJJTlRTOlxuICogLy8gc2hhcmVkOiBzdWJzY3JpYmVkIDwtLSByZWZlcmVuY2UgY291bnQgPSAxXG4gKiAvLyBzb3VyY2U6IHN1YnNjcmliZWRcbiAqIC8vIHNoYXJlZDogc3Vic2NyaWJlZCA8LS0gcmVmZXJlbmNlIGNvdW50ID0gMlxuICogLy8gc291cmNlOiAwXG4gKiAvLyBzaGFyZWQ6IDBcbiAqIC8vIHN1YiBBOiAwXG4gKiAvLyBzaGFyZWQ6IDBcbiAqIC8vIHN1YiBCOiAwXG4gKiAvLyBzb3VyY2U6IDFcbiAqIC8vIHNoYXJlZDogMVxuICogLy8gc3ViIEE6IDFcbiAqIC8vIHNoYXJlZDogY29tcGxldGVkIDwtLSB0YWtlKDIpIGNvbXBsZXRlcyB0aGUgc3Vic2NyaXB0aW9uIGZvciBzdWIgQVxuICogLy8gc2hhcmVkOiB1bnN1YnNjcmliZWQgPC0tIHJlZmVyZW5jZSBjb3VudCA9IDFcbiAqIC8vIHNoYXJlZDogMVxuICogLy8gc3ViIEI6IDFcbiAqIC8vIHNoYXJlZDogY29tcGxldGVkIDwtLSB0YWtlKDIpIGNvbXBsZXRlcyB0aGUgc3Vic2NyaXB0aW9uIGZvciBzdWIgQlxuICogLy8gc2hhcmVkOiB1bnN1YnNjcmliZWQgPC0tIHJlZmVyZW5jZSBjb3VudCA9IDBcbiAqIC8vIHNvdXJjZTogdW5zdWJzY3JpYmVkIDwtLSByZXBsYXlTdWJqZWN0IHVuc3Vic2NyaWJlcyBmcm9tIHNvdXJjZSBvYnNlcnZhYmxlIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBjb3VudCBkcm9wcGVkIHRvIDAgYW5kIHJlZkNvdW50IGlzIHRydWVcbiAqXG4gKiAvLyBJbiBjYXNlIG9mIHJlZkNvdW50IGJlaW5nIGZhbHNlLCB0aGUgdW5zdWJzY3JpYmUgaXMgbmV2ZXIgY2FsbGVkIG9uIHRoZSBzb3VyY2UgYW5kIHRoZSBzb3VyY2Ugd291bGQga2VlcCBvbiBlbWl0dGluZywgZXZlbiBpZiBubyBzdWJzY3JpYmVyc1xuICogLy8gYXJlIGxpc3RlbmluZy5cbiAqIC8vIHNvdXJjZTogMlxuICogLy8gc291cmNlOiAzXG4gKiAvLyBzb3VyY2U6IDRcbiAqIC8vIC4uLlxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgcHVibGlzaH1cbiAqIEBzZWUge0BsaW5rIHNoYXJlfVxuICogQHNlZSB7QGxpbmsgcHVibGlzaFJlcGxheX1cbiAqXG4gKiBAcGFyYW0gY29uZmlnT3JCdWZmZXJTaXplIE1heGltdW0gZWxlbWVudCBjb3VudCBvZiB0aGUgcmVwbGF5IGJ1ZmZlciBvciB7QGxpbmsgU2hhcmVSZXBsYXlDb25maWcgY29uZmlndXJhdGlvbn1cbiAqIG9iamVjdC5cbiAqIEBwYXJhbSB3aW5kb3dUaW1lIE1heGltdW0gdGltZSBsZW5ndGggb2YgdGhlIHJlcGxheSBidWZmZXIgaW4gbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIHNjaGVkdWxlciBTY2hlZHVsZXIgd2hlcmUgY29ubmVjdGVkIG9ic2VydmVycyB3aXRoaW4gdGhlIHNlbGVjdG9yIGZ1bmN0aW9uXG4gKiB3aWxsIGJlIGludm9rZWQgb24uXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgc2VxdWVuY2UgdGhhdCBjb250YWlucyB0aGVcbiAqIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UgcHJvZHVjZWQgYnkgbXVsdGljYXN0aW5nIHRoZSBzb3VyY2Ugc2VxdWVuY2Ugd2l0aGluIGFcbiAqIHNlbGVjdG9yIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hhcmVSZXBsYXk8VD4oXG4gIGNvbmZpZ09yQnVmZmVyU2l6ZT86IFNoYXJlUmVwbGF5Q29uZmlnIHwgbnVtYmVyLFxuICB3aW5kb3dUaW1lPzogbnVtYmVyLFxuICBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlXG4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICBsZXQgYnVmZmVyU2l6ZTogbnVtYmVyO1xuICBsZXQgcmVmQ291bnQgPSBmYWxzZTtcbiAgaWYgKGNvbmZpZ09yQnVmZmVyU2l6ZSAmJiB0eXBlb2YgY29uZmlnT3JCdWZmZXJTaXplID09PSAnb2JqZWN0Jykge1xuICAgICh7IGJ1ZmZlclNpemUgPSBJbmZpbml0eSwgd2luZG93VGltZSA9IEluZmluaXR5LCByZWZDb3VudCA9IGZhbHNlLCBzY2hlZHVsZXIgfSA9IGNvbmZpZ09yQnVmZmVyU2l6ZSk7XG4gIH0gZWxzZSB7XG4gICAgYnVmZmVyU2l6ZSA9IChjb25maWdPckJ1ZmZlclNpemUgPz8gSW5maW5pdHkpIGFzIG51bWJlcjtcbiAgfVxuICByZXR1cm4gc2hhcmU8VD4oe1xuICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoYnVmZmVyU2l6ZSwgd2luZG93VGltZSwgc2NoZWR1bGVyKSxcbiAgICByZXNldE9uRXJyb3I6IHRydWUsXG4gICAgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSxcbiAgICByZXNldE9uUmVmQ291bnRaZXJvOiByZWZDb3VudCxcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgRW1wdHlFcnJvciB9IGZyb20gJy4uL3V0aWwvRW1wdHlFcnJvcic7XG5cbmltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT3BlcmF0b3JGdW5jdGlvbiwgVHJ1dGh5VHlwZXNPZiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFNlcXVlbmNlRXJyb3IgfSBmcm9tICcuLi91dGlsL1NlcXVlbmNlRXJyb3InO1xuaW1wb3J0IHsgTm90Rm91bmRFcnJvciB9IGZyb20gJy4uL3V0aWwvTm90Rm91bmRFcnJvcic7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNpbmdsZTxUPihwcmVkaWNhdGU6IEJvb2xlYW5Db25zdHJ1Y3Rvcik6IE9wZXJhdG9yRnVuY3Rpb248VCwgVHJ1dGh5VHlwZXNPZjxUPj47XG5leHBvcnQgZnVuY3Rpb24gc2luZ2xlPFQ+KHByZWRpY2F0ZT86ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBib29sZWFuKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSB0aGF0IGFzc2VydHMgdGhhdCBvbmx5IG9uZSB2YWx1ZSBpc1xuICogZW1pdHRlZCBmcm9tIHRoZSBvYnNlcnZhYmxlIHRoYXQgbWF0Y2hlcyB0aGUgcHJlZGljYXRlLiBJZiBub1xuICogcHJlZGljYXRlIGlzIHByb3ZpZGVkLCB0aGVuIGl0IHdpbGwgYXNzZXJ0IHRoYXQgdGhlIG9ic2VydmFibGVcbiAqIG9ubHkgZW1pdHMgb25lIHZhbHVlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBkaWQgbm90IGVtaXQgYG5leHRgIGJlZm9yZSBjb21wbGV0aW9uLCBpdFxuICogd2lsbCBlbWl0IGFuIHtAbGluayBFbXB0eUVycm9yfSB0byB0aGUgT2JzZXJ2ZXIncyBgZXJyb3JgIGNhbGxiYWNrLlxuICpcbiAqIEluIHRoZSBldmVudCB0aGF0IHR3byB2YWx1ZXMgYXJlIGZvdW5kIHRoYXQgbWF0Y2ggdGhlIHByZWRpY2F0ZSxcbiAqIG9yIHdoZW4gdGhlcmUgYXJlIHR3byB2YWx1ZXMgZW1pdHRlZCBhbmQgbm8gcHJlZGljYXRlLCBpdCB3aWxsXG4gKiBlbWl0IGEge0BsaW5rIFNlcXVlbmNlRXJyb3J9IHRvIHRoZSBPYnNlcnZlcidzIGBlcnJvcmAgY2FsbGJhY2suXG4gKlxuICogSW4gdGhlIGV2ZW50IHRoYXQgbm8gdmFsdWVzIG1hdGNoIHRoZSBwcmVkaWNhdGUsIGlmIG9uZSBpcyBwcm92aWRlZCxcbiAqIGl0IHdpbGwgZW1pdCBhIHtAbGluayBOb3RGb3VuZEVycm9yfSB0byB0aGUgT2JzZXJ2ZXIncyBgZXJyb3JgIGNhbGxiYWNrLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBFeHBlY3Qgb25seSBgbmFtZWAgYmVnaW5uaW5nIHdpdGggYCdCJ2BcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIHNpbmdsZSB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHNvdXJjZTEgPSBvZihcbiAqICB7IG5hbWU6ICdCZW4nIH0sXG4gKiAgeyBuYW1lOiAnVHJhY3knIH0sXG4gKiAgeyBuYW1lOiAnTGFuZXknIH0sXG4gKiAgeyBuYW1lOiAnTGlseScgfVxuICogKTtcbiAqXG4gKiBzb3VyY2UxXG4gKiAgIC5waXBlKHNpbmdsZSh4ID0+IHgubmFtZS5zdGFydHNXaXRoKCdCJykpKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogLy8gRW1pdHMgJ0JlbidcbiAqXG4gKlxuICogY29uc3Qgc291cmNlMiA9IG9mKFxuICogIHsgbmFtZTogJ0JlbicgfSxcbiAqICB7IG5hbWU6ICdUcmFjeScgfSxcbiAqICB7IG5hbWU6ICdCcmFkbGV5JyB9LFxuICogIHsgbmFtZTogJ0xpbmNvbG4nIH1cbiAqICk7XG4gKlxuICogc291cmNlMlxuICogICAucGlwZShzaW5nbGUoeCA9PiB4Lm5hbWUuc3RhcnRzV2l0aCgnQicpKSlcbiAqICAgLnN1YnNjcmliZSh7IGVycm9yOiBlcnIgPT4gY29uc29sZS5lcnJvcihlcnIpIH0pO1xuICogLy8gRXJyb3IgZW1pdHRlZDogU2VxdWVuY2VFcnJvcignVG9vIG1hbnkgdmFsdWVzIG1hdGNoJylcbiAqXG4gKlxuICogY29uc3Qgc291cmNlMyA9IG9mKFxuICogIHsgbmFtZTogJ0xhbmV5JyB9LFxuICogIHsgbmFtZTogJ1RyYWN5JyB9LFxuICogIHsgbmFtZTogJ0xpbHknIH0sXG4gKiAgeyBuYW1lOiAnTGluY29sbicgfVxuICogKTtcbiAqXG4gKiBzb3VyY2UzXG4gKiAgIC5waXBlKHNpbmdsZSh4ID0+IHgubmFtZS5zdGFydHNXaXRoKCdCJykpKVxuICogICAuc3Vic2NyaWJlKHsgZXJyb3I6IGVyciA9PiBjb25zb2xlLmVycm9yKGVycikgfSk7XG4gKiAvLyBFcnJvciBlbWl0dGVkOiBOb3RGb3VuZEVycm9yKCdObyB2YWx1ZXMgbWF0Y2gnKVxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgZmlyc3R9XG4gKiBAc2VlIHtAbGluayBmaW5kfVxuICogQHNlZSB7QGxpbmsgZmluZEluZGV4fVxuICogQHNlZSB7QGxpbmsgZWxlbWVudEF0fVxuICpcbiAqIEB0aHJvd3Mge05vdEZvdW5kRXJyb3J9IERlbGl2ZXJzIGEgYE5vdEZvdW5kRXJyb3JgIHRvIHRoZSBPYnNlcnZlcidzIGBlcnJvcmBcbiAqIGNhbGxiYWNrIGlmIHRoZSBPYnNlcnZhYmxlIGNvbXBsZXRlcyBiZWZvcmUgYW55IGBuZXh0YCBub3RpZmljYXRpb24gd2FzIHNlbnQuXG4gKiBAdGhyb3dzIHtTZXF1ZW5jZUVycm9yfSBEZWxpdmVycyBhIGBTZXF1ZW5jZUVycm9yYCBpZiBtb3JlIHRoYW4gb25lIHZhbHVlIGlzXG4gKiBlbWl0dGVkIHRoYXQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgcHJlZGljYXRlLiBJZiBubyBwcmVkaWNhdGUgaXMgcHJvdmlkZWQsIGl0XG4gKiB3aWxsIGRlbGl2ZXIgYSBgU2VxdWVuY2VFcnJvcmAgaWYgbW9yZSB0aGFuIG9uZSB2YWx1ZSBjb21lcyBmcm9tIHRoZSBzb3VyY2UuXG4gKiBAdGhyb3dzIHtFbXB0eUVycm9yfSBEZWxpdmVycyBhbiBgRW1wdHlFcnJvcmAgaWYgbm8gdmFsdWVzIHdlcmUgYG5leHRgZWQgcHJpb3JcbiAqIHRvIGNvbXBsZXRpb24uXG4gKlxuICogQHBhcmFtIHByZWRpY2F0ZSBBIHByZWRpY2F0ZSBmdW5jdGlvbiB0byBldmFsdWF0ZSBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc2luZ2xlIGl0ZW1cbiAqIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgbWF0Y2hlcyB0aGUgcHJlZGljYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2luZ2xlPFQ+KHByZWRpY2F0ZT86ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBib29sZWFuKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgIGxldCBzaW5nbGVWYWx1ZTogVDtcbiAgICBsZXQgc2VlblZhbHVlID0gZmFsc2U7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAodmFsdWUpID0+IHtcbiAgICAgICAgICBzZWVuVmFsdWUgPSB0cnVlO1xuICAgICAgICAgIGlmICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgrKywgc291cmNlKSkge1xuICAgICAgICAgICAgaGFzVmFsdWUgJiYgc3Vic2NyaWJlci5lcnJvcihuZXcgU2VxdWVuY2VFcnJvcignVG9vIG1hbnkgbWF0Y2hpbmcgdmFsdWVzJykpO1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgc2luZ2xlVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChzaW5nbGVWYWx1ZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3Ioc2VlblZhbHVlID8gbmV3IE5vdEZvdW5kRXJyb3IoJ05vIG1hdGNoaW5nIHZhbHVlcycpIDogbmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnLi9maWx0ZXInO1xuXG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHNraXBzIHRoZSBmaXJzdCBgY291bnRgIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqICFbXShza2lwLnBuZylcbiAqXG4gKiBTa2lwcyB0aGUgdmFsdWVzIHVudGlsIHRoZSBzZW50IG5vdGlmaWNhdGlvbnMgYXJlIGVxdWFsIG9yIGxlc3MgdGhhbiBwcm92aWRlZCBza2lwIGNvdW50LiBJdCByYWlzZXNcbiAqIGFuIGVycm9yIGlmIHNraXAgY291bnQgaXMgZXF1YWwgb3IgbW9yZSB0aGFuIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGVtaXRzIGFuZCBzb3VyY2UgcmFpc2VzIGFuIGVycm9yLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBTa2lwIHRoZSB2YWx1ZXMgYmVmb3JlIHRoZSBlbWlzc2lvblxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbnRlcnZhbCwgc2tpcCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIC8vIGVtaXQgZXZlcnkgaGFsZiBzZWNvbmRcbiAqIGNvbnN0IHNvdXJjZSA9IGludGVydmFsKDUwMCk7XG4gKiAvLyBza2lwIHRoZSBmaXJzdCAxMCBlbWl0dGVkIHZhbHVlc1xuICogY29uc3QgcmVzdWx0ID0gc291cmNlLnBpcGUoc2tpcCgxMCkpO1xuICpcbiAqIHJlc3VsdC5zdWJzY3JpYmUodmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpKTtcbiAqIC8vIG91dHB1dDogMTAuLi4xMS4uLjEyLi4uMTMuLi5cbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGxhc3R9XG4gKiBAc2VlIHtAbGluayBza2lwV2hpbGV9XG4gKiBAc2VlIHtAbGluayBza2lwVW50aWx9XG4gKiBAc2VlIHtAbGluayBza2lwTGFzdH1cbiAqXG4gKiBAcGFyYW0gY291bnQgVGhlIG51bWJlciBvZiB0aW1lcywgaXRlbXMgZW1pdHRlZCBieSBzb3VyY2UgT2JzZXJ2YWJsZSBzaG91bGQgYmUgc2tpcHBlZC5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHNraXBzIHRoZSBmaXJzdCBgY291bnRgXG4gKiB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBza2lwPFQ+KGNvdW50OiBudW1iZXIpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICByZXR1cm4gZmlsdGVyKChfLCBpbmRleCkgPT4gY291bnQgPD0gaW5kZXgpO1xufVxuIiwgImltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuLyoqXG4gKiBTa2lwIGEgc3BlY2lmaWVkIG51bWJlciBvZiB2YWx1ZXMgYmVmb3JlIHRoZSBjb21wbGV0aW9uIG9mIGFuIG9ic2VydmFibGUuXG4gKlxuICogIVtdKHNraXBMYXN0LnBuZylcbiAqXG4gKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIGVtaXQgdmFsdWVzIGFzIHNvb24gYXMgaXQgY2FuLCBnaXZlbiBhIG51bWJlciBvZlxuICogc2tpcHBlZCB2YWx1ZXMuIEZvciBleGFtcGxlLCBpZiB5b3UgYHNraXBMYXN0KDMpYCBvbiBhIHNvdXJjZSwgd2hlbiB0aGUgc291cmNlXG4gKiBlbWl0cyBpdHMgZm91cnRoIHZhbHVlLCB0aGUgZmlyc3QgdmFsdWUgdGhlIHNvdXJjZSBlbWl0dGVkIHdpbGwgZmluYWxseSBiZSBlbWl0dGVkXG4gKiBmcm9tIHRoZSByZXR1cm5lZCBvYnNlcnZhYmxlLCBhcyBpdCBpcyBubyBsb25nZXIgcGFydCBvZiB3aGF0IG5lZWRzIHRvIGJlIHNraXBwZWQuXG4gKlxuICogQWxsIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSByZXN1bHQgb2YgYHNraXBMYXN0KE4pYCB3aWxsIGJlIGRlbGF5ZWQgYnkgYE5gIGVtaXNzaW9ucyxcbiAqIGFzIGVhY2ggdmFsdWUgaXMgaGVsZCBpbiBhIGJ1ZmZlciB1bnRpbCBlbm91Z2ggdmFsdWVzIGhhdmUgYmVlbiBlbWl0dGVkIHRoYXQgdGhhdFxuICogdGhlIGJ1ZmZlcmVkIHZhbHVlIG1heSBmaW5hbGx5IGJlIHNlbnQgdG8gdGhlIGNvbnN1bWVyLlxuICpcbiAqIEFmdGVyIHN1YnNjcmliaW5nLCB1bnN1YnNjcmliaW5nIHdpbGwgbm90IHJlc3VsdCBpbiB0aGUgZW1pc3Npb24gb2YgdGhlIGJ1ZmZlcmVkXG4gKiBza2lwcGVkIHZhbHVlcy5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogU2tpcCB0aGUgbGFzdCAyIHZhbHVlcyBvZiBhbiBvYnNlcnZhYmxlIHdpdGggbWFueSB2YWx1ZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIHNraXBMYXN0IH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgbnVtYmVycyA9IG9mKDEsIDIsIDMsIDQsIDUpO1xuICogY29uc3Qgc2tpcExhc3RUd28gPSBudW1iZXJzLnBpcGUoc2tpcExhc3QoMikpO1xuICogc2tpcExhc3RUd28uc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHMgaW46XG4gKiAvLyAxIDIgM1xuICogLy8gKDQgYW5kIDUgYXJlIHNraXBwZWQpXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBza2lwfVxuICogQHNlZSB7QGxpbmsgc2tpcFVudGlsfVxuICogQHNlZSB7QGxpbmsgc2tpcFdoaWxlfVxuICogQHNlZSB7QGxpbmsgdGFrZX1cbiAqXG4gKiBAcGFyYW0gc2tpcENvdW50IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGZyb20gdGhlIGVuZCBvZiB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBza2lwcyB0aGUgbGFzdCBgY291bnRgXG4gKiB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBza2lwTGFzdDxUPihza2lwQ291bnQ6IG51bWJlcik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIHJldHVybiBza2lwQ291bnQgPD0gMFxuICAgID8gLy8gRm9yIHNraXBDb3VudHMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIHdlIGFyZSBqdXN0IG1pcnJvcmluZyB0aGUgc291cmNlLlxuICAgICAgaWRlbnRpdHlcbiAgICA6IG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgICAgICAvLyBBIHJpbmcgYnVmZmVyIHRvIGhvbGQgdGhlIHZhbHVlcyB3aGlsZSB3ZSB3YWl0IHRvIHNlZVxuICAgICAgICAvLyBpZiB3ZSBjYW4gZW1pdCBpdCBvciBpdCdzIHBhcnQgb2YgdGhlIFwic2tpcHBlZFwiIGxhc3QgdmFsdWVzLlxuICAgICAgICAvLyBOb3RlIHRoYXQgaXQgaXMgdGhlIF9zYW1lIHNpemVfIGFzIHRoZSBza2lwIGNvdW50LlxuICAgICAgICBsZXQgcmluZzogVFtdID0gbmV3IEFycmF5KHNraXBDb3VudCk7XG4gICAgICAgIC8vIFRoZSBudW1iZXIgb2YgdmFsdWVzIHNlZW4gc28gZmFyLiBUaGlzIGlzIHVzZWQgdG8gZ2V0XG4gICAgICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCB2YWx1ZSB3aGVuIGl0IGFycml2ZXMuXG4gICAgICAgIGxldCBzZWVuID0gMDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShcbiAgICAgICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSB2YWx1ZSB3ZSBoYXZlIHJpZ2h0IG5vd1xuICAgICAgICAgICAgLy8gcmVsYXRpdmUgdG8gYWxsIG90aGVyIHZhbHVlcyB3ZSd2ZSBzZWVuLCB0aGVuXG4gICAgICAgICAgICAvLyBpbmNyZW1lbnQgYHNlZW5gLiBUaGlzIGVuc3VyZXMgd2UndmUgbW92ZWQgdG9cbiAgICAgICAgICAgIC8vIHRoZSBuZXh0IHNsb3QgaW4gb3VyIHJpbmcgYnVmZmVyLlxuICAgICAgICAgICAgY29uc3QgdmFsdWVJbmRleCA9IHNlZW4rKztcbiAgICAgICAgICAgIGlmICh2YWx1ZUluZGV4IDwgc2tpcENvdW50KSB7XG4gICAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3Qgc2VlbiBlbm91Z2ggdmFsdWVzIHRvIGZpbGwgb3VyIGJ1ZmZlciB5ZXQsXG4gICAgICAgICAgICAgIC8vIFRoZW4gd2UgYXJlbid0IHRvIGEgbnVtYmVyIG9mIHNlZW4gdmFsdWVzIHdoZXJlIHdlIGNhblxuICAgICAgICAgICAgICAvLyBlbWl0IGFueXRoaW5nLCBzbyBsZXQncyBqdXN0IHN0YXJ0IGJ5IGZpbGxpbmcgdGhlIHJpbmcgYnVmZmVyLlxuICAgICAgICAgICAgICByaW5nW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBXZSBhcmUgdHJhdmVyc2luZyBvdmVyIHRoZSByaW5nIGFycmF5IGluIHN1Y2hcbiAgICAgICAgICAgICAgLy8gYSB3YXkgdGhhdCB3aGVuIHdlIGdldCB0byB0aGUgZW5kLCB3ZSBsb29wIGJhY2tcbiAgICAgICAgICAgICAgLy8gYW5kIGdvIHRvIHRoZSBzdGFydC5cbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB2YWx1ZUluZGV4ICUgc2tpcENvdW50O1xuICAgICAgICAgICAgICAvLyBQdWxsIHRoZSBvbGRlc3QgdmFsdWUgb3V0IHNvIHdlIGNhbiBlbWl0IGl0LFxuICAgICAgICAgICAgICAvLyBhbmQgc3R1ZmYgdGhlIG5ldyB2YWx1ZSBpbiBpdCdzIHBsYWNlLlxuICAgICAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHJpbmdbaW5kZXhdO1xuICAgICAgICAgICAgICByaW5nW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAvLyBFbWl0IHRoZSBvbGQgdmFsdWUuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoaXMgaGFwcGVuc1xuICAgICAgICAgICAgICAvLyBhZnRlciB3ZSBzd2FwIHRoZSB2YWx1ZSBpbiB0aGUgYnVmZmVyLCBpZiBpdCBoYXBwZW5zXG4gICAgICAgICAgICAgIC8vIGJlZm9yZSB3ZSBzd2FwIHRoZSB2YWx1ZSBpbiB0aGUgYnVmZmVyLCB0aGVuIGEgc3luY2hyb25vdXNcbiAgICAgICAgICAgICAgLy8gc291cmNlIGNhbiBnZXQgdGhlIGJ1ZmZlciBvdXQgb2Ygd2hhY2suXG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChvbGRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIC8vIFJlbGVhc2Ugb3VyIHZhbHVlcyBpbiBtZW1vcnlcbiAgICAgICAgICByaW5nID0gbnVsbCE7XG4gICAgICAgIH07XG4gICAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGVJbnB1dCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWwvbm9vcCc7XG5cbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgc2tpcHMgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgdW50aWwgYSBzZWNvbmQgT2JzZXJ2YWJsZSBlbWl0cyBhbiBpdGVtLlxuICpcbiAqIFRoZSBgc2tpcFVudGlsYCBvcGVyYXRvciBjYXVzZXMgdGhlIG9ic2VydmFibGUgc3RyZWFtIHRvIHNraXAgdGhlIGVtaXNzaW9uIG9mIHZhbHVlcyB1bnRpbCB0aGUgcGFzc2VkIGluIG9ic2VydmFibGVcbiAqIGVtaXRzIHRoZSBmaXJzdCB2YWx1ZS4gVGhpcyBjYW4gYmUgcGFydGljdWxhcmx5IHVzZWZ1bCBpbiBjb21iaW5hdGlvbiB3aXRoIHVzZXIgaW50ZXJhY3Rpb25zLCByZXNwb25zZXMgb2YgSFRUUFxuICogcmVxdWVzdHMgb3Igd2FpdGluZyBmb3Igc3BlY2lmaWMgdGltZXMgdG8gcGFzcyBieS5cbiAqXG4gKiAhW10oc2tpcFVudGlsLnBuZylcbiAqXG4gKiBJbnRlcm5hbGx5LCB0aGUgYHNraXBVbnRpbGAgb3BlcmF0b3Igc3Vic2NyaWJlcyB0byB0aGUgcGFzc2VkIGluIGBub3RpZmllcmAgYE9ic2VydmFibGVJbnB1dGAgKHdoaWNoIGdldHMgY29udmVydGVkXG4gKiB0byBhbiBPYnNlcnZhYmxlKSBpbiBvcmRlciB0byByZWNvZ25pemUgdGhlIGVtaXNzaW9uIG9mIGl0cyBmaXJzdCB2YWx1ZS4gV2hlbiBgbm90aWZpZXJgIGVtaXRzIG5leHQsIHRoZSBvcGVyYXRvclxuICogdW5zdWJzY3JpYmVzIGZyb20gaXQgYW5kIHN0YXJ0cyBlbWl0dGluZyB0aGUgdmFsdWVzIG9mIHRoZSAqc291cmNlKiBvYnNlcnZhYmxlIHVudGlsIGl0IGNvbXBsZXRlcyBvciBlcnJvcnMuIEl0XG4gKiB3aWxsIG5ldmVyIGxldCB0aGUgKnNvdXJjZSogb2JzZXJ2YWJsZSBlbWl0IGFueSB2YWx1ZXMgaWYgdGhlIGBub3RpZmllcmAgY29tcGxldGVzIG9yIHRocm93cyBhbiBlcnJvciB3aXRob3V0XG4gKiBlbWl0dGluZyBhIHZhbHVlIGJlZm9yZS5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBhbGwgZW1pdHRlZCB2YWx1ZXMgb2YgdGhlIGludGVydmFsIG9ic2VydmFibGUgYXJlIHNraXBwZWQgdW50aWwgdGhlIHVzZXIgY2xpY2tzIGFueXdoZXJlXG4gKiB3aXRoaW4gdGhlIHBhZ2VcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIGZyb21FdmVudCwgc2tpcFVudGlsIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgaW50ZXJ2YWxPYnNlcnZhYmxlID0gaW50ZXJ2YWwoMTAwMCk7XG4gKiBjb25zdCBjbGljayA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKlxuICogY29uc3QgZW1pdEFmdGVyQ2xpY2sgPSBpbnRlcnZhbE9ic2VydmFibGUucGlwZShcbiAqICAgc2tpcFVudGlsKGNsaWNrKVxuICogKTtcbiAqIC8vIGNsaWNrZWQgYXQgNC42cy4gb3V0cHV0OiA1Li4uNi4uLjcuLi44Li4uLi4uLi4gb3JcbiAqIC8vIGNsaWNrZWQgYXQgNy4zcy4gb3V0cHV0OiA4Li4uOS4uLjEwLi4xMS4uLi4uLi5cbiAqIGVtaXRBZnRlckNsaWNrLnN1YnNjcmliZSh2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSkpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgbGFzdH1cbiAqIEBzZWUge0BsaW5rIHNraXB9XG4gKiBAc2VlIHtAbGluayBza2lwV2hpbGV9XG4gKiBAc2VlIHtAbGluayBza2lwTGFzdH1cbiAqXG4gKiBAcGFyYW0gbm90aWZpZXIgQW4gYE9ic2VydmFibGVJbnB1dGAgdGhhdCBoYXMgdG8gZW1pdCBhbiBpdGVtIGJlZm9yZSB0aGUgc291cmNlIE9ic2VydmFibGUgZWxlbWVudHMgYmVnaW4gdG9cbiAqIGJlIG1pcnJvcmVkIGJ5IHRoZSByZXN1bHRpbmcgT2JzZXJ2YWJsZS5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHNraXBzIGl0ZW1zIGZyb20gdGhlXG4gKiBzb3VyY2UgT2JzZXJ2YWJsZSB1bnRpbCB0aGUgYG5vdGlmaWVyYCBPYnNlcnZhYmxlIGVtaXRzIGFuIGl0ZW0sIHRoZW4gZW1pdHMgdGhlXG4gKiByZW1haW5pbmcgaXRlbXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBza2lwVW50aWw8VD4obm90aWZpZXI6IE9ic2VydmFibGVJbnB1dDxhbnk+KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCB0YWtpbmcgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNraXBTdWJzY3JpYmVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgc3Vic2NyaWJlcixcbiAgICAgICgpID0+IHtcbiAgICAgICAgc2tpcFN1YnNjcmliZXI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRha2luZyA9IHRydWU7XG4gICAgICB9LFxuICAgICAgbm9vcFxuICAgICk7XG5cbiAgICBpbm5lckZyb20obm90aWZpZXIpLnN1YnNjcmliZShza2lwU3Vic2NyaWJlcik7XG5cbiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCAodmFsdWUpID0+IHRha2luZyAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUpKSk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IEZhbHN5LCBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNraXBXaGlsZTxUPihwcmVkaWNhdGU6IEJvb2xlYW5Db25zdHJ1Y3Rvcik6IE9wZXJhdG9yRnVuY3Rpb248VCwgRXh0cmFjdDxULCBGYWxzeT4gZXh0ZW5kcyBuZXZlciA/IG5ldmVyIDogVD47XG5leHBvcnQgZnVuY3Rpb24gc2tpcFdoaWxlPFQ+KHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiB0cnVlKTogT3BlcmF0b3JGdW5jdGlvbjxULCBuZXZlcj47XG5leHBvcnQgZnVuY3Rpb24gc2tpcFdoaWxlPFQ+KHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+O1xuXG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHNraXBzIGFsbCBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhcyBsb25nIGFzIGEgc3BlY2lmaWVkIGNvbmRpdGlvbiBob2xkc1xuICogdHJ1ZSwgYnV0IGVtaXRzIGFsbCBmdXJ0aGVyIHNvdXJjZSBpdGVtcyBhcyBzb29uIGFzIHRoZSBjb25kaXRpb24gYmVjb21lcyBmYWxzZS5cbiAqXG4gKiAhW10oc2tpcFdoaWxlLnBuZylcbiAqXG4gKiBTa2lwcyBhbGwgdGhlIG5vdGlmaWNhdGlvbnMgd2l0aCBhIHRydXRoeSBwcmVkaWNhdGUuIEl0IHdpbGwgbm90IHNraXAgdGhlIG5vdGlmaWNhdGlvbnMgd2hlbiB0aGUgcHJlZGljYXRlIGlzIGZhbHN5LlxuICogSXQgY2FuIGFsc28gYmUgc2tpcHBlZCB1c2luZyBpbmRleC4gT25jZSB0aGUgcHJlZGljYXRlIGlzIHRydWUsIGl0IHdpbGwgbm90IGJlIGNhbGxlZCBhZ2Fpbi5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogU2tpcCBzb21lIHN1cGVyIGhlcm9lc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tLCBza2lwV2hpbGUgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBzb3VyY2UgPSBmcm9tKFsnR3JlZW4gQXJyb3cnLCAnU3VwZXJNYW4nLCAnRmxhc2gnLCAnU3VwZXJHaXJsJywgJ0JsYWNrIENhbmFyeSddKVxuICogLy8gU2tpcCB0aGUgaGVyb2VzIHVudGlsIFN1cGVyR2lybFxuICogY29uc3QgZXhhbXBsZSA9IHNvdXJjZS5waXBlKHNraXBXaGlsZShoZXJvID0+IGhlcm8gIT09ICdTdXBlckdpcmwnKSk7XG4gKiAvLyBvdXRwdXQ6IFN1cGVyR2lybCwgQmxhY2sgQ2FuYXJ5XG4gKiBleGFtcGxlLnN1YnNjcmliZShmZW1hbGVIZXJvID0+IGNvbnNvbGUubG9nKGZlbWFsZUhlcm8pKTtcbiAqIGBgYFxuICpcbiAqIFNraXAgdmFsdWVzIGZyb20gdGhlIGFycmF5IHVudGlsIGluZGV4IDVcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbSwgc2tpcFdoaWxlIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgc291cmNlID0gZnJvbShbMSwgMiwgMywgNCwgNSwgNiwgNywgOSwgMTBdKTtcbiAqIGNvbnN0IGV4YW1wbGUgPSBzb3VyY2UucGlwZShza2lwV2hpbGUoKF8sIGkpID0+IGkgIT09IDUpKTtcbiAqIC8vIG91dHB1dDogNiwgNywgOSwgMTBcbiAqIGV4YW1wbGUuc3Vic2NyaWJlKHZhbHVlID0+IGNvbnNvbGUubG9nKHZhbHVlKSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBsYXN0fVxuICogQHNlZSB7QGxpbmsgc2tpcH1cbiAqIEBzZWUge0BsaW5rIHNraXBVbnRpbH1cbiAqIEBzZWUge0BsaW5rIHNraXBMYXN0fVxuICpcbiAqIEBwYXJhbSBwcmVkaWNhdGUgQSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggaXRlbSBlbWl0dGVkIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgYmVnaW5zIGVtaXR0aW5nIGl0ZW1zXG4gKiBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aGVuIHRoZSBzcGVjaWZpZWQgcHJlZGljYXRlIGJlY29tZXMgZmFsc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBza2lwV2hpbGU8VD4ocHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IHRha2luZyA9IGZhbHNlO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgc291cmNlLnN1YnNjcmliZShcbiAgICAgIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCAodmFsdWUpID0+ICh0YWtpbmcgfHwgKHRha2luZyA9ICFwcmVkaWNhdGUodmFsdWUsIGluZGV4KyspKSkgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKSlcbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBjb25jYXQgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2NvbmNhdCc7XG5pbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uLCBTY2hlZHVsZXJMaWtlLCBWYWx1ZUZyb21BcnJheSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHBvcFNjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvYXJncyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcblxuLy8gRGV2cyBhcmUgbW9yZSBsaWtlbHkgdG8gcGFzcyBudWxsIG9yIHVuZGVmaW5lZCB0aGFuIHRoZXkgYXJlIGEgc2NoZWR1bGVyXG4vLyB3aXRob3V0IGFjY29tcGFueWluZyB2YWx1ZXMuIFRvIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgKG5hdWdodHkpIGRldnMgd2hvXG4vLyB1c2UgdGhlIGBzdHJpY3ROdWxsQ2hlY2tzOiBmYWxzZWAgVHlwZVNjcmlwdCBjb21waWxlciBvcHRpb24sIHRoZXNlXG4vLyBvdmVybG9hZHMgd2l0aCBleHBsaWNpdCBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzIGFyZSBpbmNsdWRlZC5cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0V2l0aDxUPih2YWx1ZTogbnVsbCk6IE9wZXJhdG9yRnVuY3Rpb248VCwgVCB8IG51bGw+O1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0V2l0aDxUPih2YWx1ZTogdW5kZWZpbmVkKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUIHwgdW5kZWZpbmVkPjtcblxuLyoqIEBkZXByZWNhdGVkIFRoZSBgc2NoZWR1bGVyYCBwYXJhbWV0ZXIgd2lsbCBiZSByZW1vdmVkIGluIHY4LiBVc2UgYHNjaGVkdWxlZGAgYW5kIGBjb25jYXRBbGxgLiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9zY2hlZHVsZXItYXJndW1lbnQgKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFdpdGg8VCwgQSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSA9IFRbXT4oXG4gIC4uLnZhbHVlc0FuZFNjaGVkdWxlcjogWy4uLkEsIFNjaGVkdWxlckxpa2VdXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFQgfCBWYWx1ZUZyb21BcnJheTxBPj47XG5leHBvcnQgZnVuY3Rpb24gc3RhcnRXaXRoPFQsIEEgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gPSBUW10+KC4uLnZhbHVlczogQSk6IE9wZXJhdG9yRnVuY3Rpb248VCwgVCB8IFZhbHVlRnJvbUFycmF5PEE+PjtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCwgYXQgdGhlIG1vbWVudCBvZiBzdWJzY3JpcHRpb24sIHdpbGwgc3luY2hyb25vdXNseSBlbWl0IGFsbFxuICogdmFsdWVzIHByb3ZpZGVkIHRvIHRoaXMgb3BlcmF0b3IsIHRoZW4gc3Vic2NyaWJlIHRvIHRoZSBzb3VyY2UgYW5kIG1pcnJvciBhbGwgb2YgaXRzIGVtaXNzaW9uc1xuICogdG8gc3Vic2NyaWJlcnMuXG4gKlxuICogVGhpcyBpcyBhIHVzZWZ1bCB3YXkgdG8ga25vdyB3aGVuIHN1YnNjcmlwdGlvbiBoYXMgb2NjdXJyZWQgb24gYW4gZXhpc3Rpbmcgb2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+Rmlyc3QgZW1pdHMgaXRzIGFyZ3VtZW50cyBpbiBvcmRlciwgYW5kIHRoZW4gYW55XG4gKiBlbWlzc2lvbnMgZnJvbSB0aGUgc291cmNlLjwvc3Bhbj5cbiAqXG4gKiAhW10oc3RhcnRXaXRoLnBuZylcbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIEVtaXQgYSB2YWx1ZSB3aGVuIGEgdGltZXIgc3RhcnRzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB0aW1lciwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbiAqXG4gKiB0aW1lcigxMDAwKVxuICogICAucGlwZShcbiAqICAgICBtYXAoKCkgPT4gJ3RpbWVyIGVtaXQnKSxcbiAqICAgICBzdGFydFdpdGgoJ3RpbWVyIHN0YXJ0JylcbiAqICAgKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIHJlc3VsdHM6XG4gKiAvLyAndGltZXIgc3RhcnQnXG4gKiAvLyAndGltZXIgZW1pdCdcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZXMgSXRlbXMgeW91IHdhbnQgdGhlIG1vZGlmaWVkIE9ic2VydmFibGUgdG8gZW1pdCBmaXJzdC5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHN5bmNocm9ub3VzbHkgZW1pdHNcbiAqIHByb3ZpZGVkIHZhbHVlcyBiZWZvcmUgc3Vic2NyaWJpbmcgdG8gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIEBzZWUge0BsaW5rIGVuZFdpdGh9XG4gKiBAc2VlIHtAbGluayBmaW5hbGl6ZX1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0V2l0aDxULCBEPiguLi52YWx1ZXM6IERbXSk6IE9wZXJhdG9yRnVuY3Rpb248VCwgVCB8IEQ+IHtcbiAgY29uc3Qgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKHZhbHVlcyk7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICAvLyBIZXJlIHdlIGNhbid0IHBhc3MgYHVuZGVmaW5lZGAgYXMgYSBzY2hlZHVsZXIsIGJlY2F1c2UgaWYgd2UgZGlkLCB0aGVcbiAgICAvLyBjb2RlIGluc2lkZSBvZiBgY29uY2F0YCB3b3VsZCBiZSBjb25mdXNlZCBieSB0aGUgYHVuZGVmaW5lZGAsIGFuZCB0cmVhdCBpdFxuICAgIC8vIGxpa2UgYW4gaW52YWxpZCBvYnNlcnZhYmxlLiBTbyB3ZSBoYXZlIHRvIHNwbGl0IGl0IHR3byBkaWZmZXJlbnQgd2F5cy5cbiAgICAoc2NoZWR1bGVyID8gY29uY2F0KHZhbHVlcywgc291cmNlLCBzY2hlZHVsZXIpIDogY29uY2F0KHZhbHVlcywgc291cmNlKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXQsIE9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmVkVmFsdWVPZiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbmV4cG9ydCBmdW5jdGlvbiBzd2l0Y2hNYXA8VCwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihcbiAgcHJvamVjdDogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBPXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIE9ic2VydmVkVmFsdWVPZjxPPj47XG4vKiogQGRlcHJlY2F0ZWQgVGhlIGByZXN1bHRTZWxlY3RvcmAgcGFyYW1ldGVyIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIGFuIGlubmVyIGBtYXBgIGluc3RlYWQuIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL3Jlc3VsdFNlbGVjdG9yICovXG5leHBvcnQgZnVuY3Rpb24gc3dpdGNoTWFwPFQsIE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8YW55Pj4oXG4gIHByb2plY3Q6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gTyxcbiAgcmVzdWx0U2VsZWN0b3I6IHVuZGVmaW5lZFxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuLyoqIEBkZXByZWNhdGVkIFRoZSBgcmVzdWx0U2VsZWN0b3JgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBhbiBpbm5lciBgbWFwYCBpbnN0ZWFkLiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9yZXN1bHRTZWxlY3RvciAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN3aXRjaE1hcDxULCBSLCBPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PGFueT4+KFxuICBwcm9qZWN0OiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IE8sXG4gIHJlc3VsdFNlbGVjdG9yOiAob3V0ZXJWYWx1ZTogVCwgaW5uZXJWYWx1ZTogT2JzZXJ2ZWRWYWx1ZU9mPE8+LCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcikgPT4gUlxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBSPjtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG5cbi8qKlxuICogUHJvamVjdHMgZWFjaCBzb3VyY2UgdmFsdWUgdG8gYW4gT2JzZXJ2YWJsZSB3aGljaCBpcyBtZXJnZWQgaW4gdGhlIG91dHB1dFxuICogT2JzZXJ2YWJsZSwgZW1pdHRpbmcgdmFsdWVzIG9ubHkgZnJvbSB0aGUgbW9zdCByZWNlbnRseSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+TWFwcyBlYWNoIHZhbHVlIHRvIGFuIE9ic2VydmFibGUsIHRoZW4gZmxhdHRlbnMgYWxsIG9mXG4gKiB0aGVzZSBpbm5lciBPYnNlcnZhYmxlcyB1c2luZyB7QGxpbmsgc3dpdGNoQWxsfS48L3NwYW4+XG4gKlxuICogIVtdKHN3aXRjaE1hcC5wbmcpXG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgYmFzZWQgb24gYXBwbHlpbmcgYSBmdW5jdGlvbiB0aGF0IHlvdVxuICogc3VwcGx5IHRvIGVhY2ggaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgd2hlcmUgdGhhdCBmdW5jdGlvblxuICogcmV0dXJucyBhbiAoc28tY2FsbGVkIFwiaW5uZXJcIikgT2JzZXJ2YWJsZS4gRWFjaCB0aW1lIGl0IG9ic2VydmVzIG9uZSBvZiB0aGVzZVxuICogaW5uZXIgT2JzZXJ2YWJsZXMsIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBiZWdpbnMgZW1pdHRpbmcgdGhlIGl0ZW1zIGVtaXR0ZWQgYnlcbiAqIHRoYXQgaW5uZXIgT2JzZXJ2YWJsZS4gV2hlbiBhIG5ldyBpbm5lciBPYnNlcnZhYmxlIGlzIGVtaXR0ZWQsIGBzd2l0Y2hNYXBgXG4gKiBzdG9wcyBlbWl0dGluZyBpdGVtcyBmcm9tIHRoZSBlYXJsaWVyLWVtaXR0ZWQgaW5uZXIgT2JzZXJ2YWJsZSBhbmQgYmVnaW5zXG4gKiBlbWl0dGluZyBpdGVtcyBmcm9tIHRoZSBuZXcgb25lLiBJdCBjb250aW51ZXMgdG8gYmVoYXZlIGxpa2UgdGhpcyBmb3JcbiAqIHN1YnNlcXVlbnQgaW5uZXIgT2JzZXJ2YWJsZXMuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIEdlbmVyYXRlIG5ldyBPYnNlcnZhYmxlIGFjY29yZGluZyB0byBzb3VyY2UgT2JzZXJ2YWJsZSB2YWx1ZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IHN3aXRjaGVkID0gb2YoMSwgMiwgMykucGlwZShzd2l0Y2hNYXAoeCA9PiBvZih4LCB4ICoqIDIsIHggKiogMykpKTtcbiAqIHN3aXRjaGVkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIC8vIG91dHB1dHNcbiAqIC8vIDFcbiAqIC8vIDFcbiAqIC8vIDFcbiAqIC8vIDJcbiAqIC8vIDRcbiAqIC8vIDhcbiAqIC8vIDNcbiAqIC8vIDlcbiAqIC8vIDI3XG4gKiBgYGBcbiAqXG4gKiBSZXN0YXJ0IGFuIGludGVydmFsIE9ic2VydmFibGUgb24gZXZlcnkgY2xpY2sgZXZlbnRcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBzd2l0Y2hNYXAsIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGNsaWNrcy5waXBlKHN3aXRjaE1hcCgoKSA9PiBpbnRlcnZhbCgxMDAwKSkpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcH1cbiAqIEBzZWUge0BsaW5rIGV4aGF1c3RNYXB9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcH1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaEFsbH1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaE1hcFRvfVxuICpcbiAqIEBwYXJhbSBwcm9qZWN0IEEgZnVuY3Rpb24gdGhhdCwgd2hlbiBhcHBsaWVkIHRvIGFuIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLCByZXR1cm5zIGFuIE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mXG4gKiBhcHBseWluZyB0aGUgcHJvamVjdGlvbiBmdW5jdGlvbiAoYW5kIHRoZSBvcHRpb25hbCBkZXByZWNhdGVkXG4gKiBgcmVzdWx0U2VsZWN0b3JgKSB0byBlYWNoIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYW5kIHRha2luZ1xuICogb25seSB0aGUgdmFsdWVzIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgcHJvamVjdGVkIGlubmVyIE9ic2VydmFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzd2l0Y2hNYXA8VCwgUiwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihcbiAgcHJvamVjdDogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBPLFxuICByZXN1bHRTZWxlY3Rvcj86IChvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBPYnNlcnZlZFZhbHVlT2Y8Tz4sIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKSA9PiBSXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIE9ic2VydmVkVmFsdWVPZjxPPiB8IFI+IHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBpbm5lclN1YnNjcmliZXI6IFN1YnNjcmliZXI8T2JzZXJ2ZWRWYWx1ZU9mPE8+PiB8IG51bGwgPSBudWxsO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNvdXJjZSBzdWJzY3JpcHRpb24gaGFzIGNvbXBsZXRlZFxuICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XG5cbiAgICAvLyBXZSBvbmx5IGNvbXBsZXRlIHRoZSByZXN1bHQgaWYgdGhlIHNvdXJjZSBpcyBjb21wbGV0ZSBBTkQgd2UgZG9uJ3QgaGF2ZSBhbiBhY3RpdmUgaW5uZXIgc3Vic2NyaXB0aW9uLlxuICAgIC8vIFRoaXMgaXMgY2FsbGVkIGJvdGggd2hlbiB0aGUgc291cmNlIGNvbXBsZXRlcyBhbmQgd2hlbiB0aGUgaW5uZXJzIGNvbXBsZXRlLlxuICAgIGNvbnN0IGNoZWNrQ29tcGxldGUgPSAoKSA9PiBpc0NvbXBsZXRlICYmICFpbm5lclN1YnNjcmliZXIgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuXG4gICAgc291cmNlLnN1YnNjcmliZShcbiAgICAgIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihcbiAgICAgICAgc3Vic2NyaWJlcixcbiAgICAgICAgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgLy8gQ2FuY2VsIHRoZSBwcmV2aW91cyBpbm5lciBzdWJzY3JpcHRpb24gaWYgdGhlcmUgd2FzIG9uZVxuICAgICAgICAgIGlubmVyU3Vic2NyaWJlcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBsZXQgaW5uZXJJbmRleCA9IDA7XG4gICAgICAgICAgY29uc3Qgb3V0ZXJJbmRleCA9IGluZGV4Kys7XG4gICAgICAgICAgLy8gU3RhcnQgdGhlIG5leHQgaW5uZXIgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgaW5uZXJGcm9tKHByb2plY3QodmFsdWUsIG91dGVySW5kZXgpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoaW5uZXJTdWJzY3JpYmVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAgICAgICAvLyBXaGVuIHdlIGdldCBhIG5ldyBpbm5lciB2YWx1ZSwgbmV4dCBpdCB0aHJvdWdoLiBOb3RlIHRoYXQgdGhpcyBpc1xuICAgICAgICAgICAgICAvLyBoYW5kbGluZyB0aGUgZGVwcmVjYXRlIHJlc3VsdCBzZWxlY3RvciBoZXJlLiBUaGlzIGlzIGJlY2F1c2Ugd2l0aCB0aGlzIGFyY2hpdGVjdHVyZVxuICAgICAgICAgICAgICAvLyBpdCBlbmRzIHVwIGJlaW5nIHNtYWxsZXIgdGhhbiB1c2luZyB0aGUgbWFwIG9wZXJhdG9yLlxuICAgICAgICAgICAgICAoaW5uZXJWYWx1ZSkgPT4gc3Vic2NyaWJlci5uZXh0KHJlc3VsdFNlbGVjdG9yID8gcmVzdWx0U2VsZWN0b3IodmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgrKykgOiBpbm5lclZhbHVlKSxcbiAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBpbm5lciBoYXMgY29tcGxldGVkLiBOdWxsIG91dCB0aGUgaW5uZXIgc3Vic2NyaWJlciB0b1xuICAgICAgICAgICAgICAgIC8vIGZyZWUgdXAgbWVtb3J5IGFuZCB0byBzaWduYWwgdGhhdCB3ZSBoYXZlIG5vIGlubmVyIHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseS5cbiAgICAgICAgICAgICAgICBpbm5lclN1YnNjcmliZXIgPSBudWxsITtcbiAgICAgICAgICAgICAgICBjaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGVJbnB1dCwgT2JzZXJ2ZWRWYWx1ZU9mIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAnLi9zd2l0Y2hNYXAnO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGhpZ2hlci1vcmRlciBPYnNlcnZhYmxlIGludG8gYSBmaXJzdC1vcmRlciBPYnNlcnZhYmxlXG4gKiBwcm9kdWNpbmcgdmFsdWVzIG9ubHkgZnJvbSB0aGUgbW9zdCByZWNlbnQgb2JzZXJ2YWJsZSBzZXF1ZW5jZVxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5GbGF0dGVucyBhbiBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzLjwvc3Bhbj5cbiAqXG4gKiAhW10oc3dpdGNoQWxsLnBuZylcbiAqXG4gKiBgc3dpdGNoQWxsYCBzdWJzY3JpYmVzIHRvIGEgc291cmNlIHRoYXQgaXMgYW4gb2JzZXJ2YWJsZSBvZiBvYnNlcnZhYmxlcywgYWxzbyBrbm93biBhcyBhXG4gKiBcImhpZ2hlci1vcmRlciBvYnNlcnZhYmxlXCIgKG9yIGBPYnNlcnZhYmxlPE9ic2VydmFibGU8VD4+YCkuIEl0IHN1YnNjcmliZXMgdG8gdGhlIG1vc3QgcmVjZW50bHlcbiAqIHByb3ZpZGVkIFwiaW5uZXIgb2JzZXJ2YWJsZVwiIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSwgdW5zdWJzY3JpYmluZyBmcm9tIGFueSBwcmV2aW91c2x5IHN1YnNjcmliZWRcbiAqIHRvIGlubmVyIG9ic2VydmFibGUsIHN1Y2ggdGhhdCBvbmx5IHRoZSBtb3N0IHJlY2VudCBpbm5lciBvYnNlcnZhYmxlIG1heSBiZSBzdWJzY3JpYmVkIHRvIGF0XG4gKiBhbnkgcG9pbnQgaW4gdGltZS4gVGhlIHJlc3VsdGluZyBvYnNlcnZhYmxlIHJldHVybmVkIGJ5IGBzd2l0Y2hBbGxgIHdpbGwgb25seSBjb21wbGV0ZSBpZiB0aGVcbiAqIHNvdXJjZSBvYnNlcnZhYmxlIGNvbXBsZXRlcywgKmFuZCogYW55IGN1cnJlbnRseSBzdWJzY3JpYmVkIHRvIGlubmVyIG9ic2VydmFibGUgYWxzbyBoYXMgY29tcGxldGVkLFxuICogaWYgdGhlcmUgYXJlIGFueS5cbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIFNwYXduIGEgbmV3IGludGVydmFsIG9ic2VydmFibGUgZm9yIGVhY2ggY2xpY2sgZXZlbnQsIGJ1dCBmb3IgZXZlcnkgbmV3XG4gKiBjbGljaywgY2FuY2VsIHRoZSBwcmV2aW91cyBpbnRlcnZhbCBhbmQgc3Vic2NyaWJlIHRvIHRoZSBuZXcgb25lXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgdGFwLCBtYXAsIGludGVydmFsLCBzd2l0Y2hBbGwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnBpcGUodGFwKCgpID0+IGNvbnNvbGUubG9nKCdjbGljaycpKSk7XG4gKiBjb25zdCBzb3VyY2UgPSBjbGlja3MucGlwZShtYXAoKCkgPT4gaW50ZXJ2YWwoMTAwMCkpKTtcbiAqXG4gKiBzb3VyY2VcbiAqICAgLnBpcGUoc3dpdGNoQWxsKCkpXG4gKiAgIC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gT3V0cHV0XG4gKiAvLyBjbGlja1xuICogLy8gMFxuICogLy8gMVxuICogLy8gMlxuICogLy8gM1xuICogLy8gLi4uXG4gKiAvLyBjbGlja1xuICogLy8gMFxuICogLy8gMVxuICogLy8gMlxuICogLy8gLi4uXG4gKiAvLyBjbGlja1xuICogLy8gLi4uXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBjb21iaW5lTGF0ZXN0QWxsfVxuICogQHNlZSB7QGxpbmsgY29uY2F0QWxsfVxuICogQHNlZSB7QGxpbmsgZXhoYXVzdEFsbH1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaE1hcH1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaE1hcFRvfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgY29udmVydHMgYSBoaWdoZXItb3JkZXJcbiAqIE9ic2VydmFibGUgaW50byBhIGZpcnN0LW9yZGVyIE9ic2VydmFibGUgcHJvZHVjaW5nIHZhbHVlcyBvbmx5IGZyb20gdGhlIG1vc3RcbiAqIHJlY2VudCBPYnNlcnZhYmxlIHNlcXVlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3dpdGNoQWxsPE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8YW55Pj4oKTogT3BlcmF0b3JGdW5jdGlvbjxPLCBPYnNlcnZlZFZhbHVlT2Y8Tz4+IHtcbiAgcmV0dXJuIHN3aXRjaE1hcChpZGVudGl0eSk7XG59XG4iLCAiaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAnLi9zd2l0Y2hNYXAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0LCBPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZlZFZhbHVlT2YgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcblxuLyoqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2OS4gVXNlIHtAbGluayBzd2l0Y2hNYXB9IGluc3RlYWQ6IGBzd2l0Y2hNYXAoKCkgPT4gcmVzdWx0KWAgKi9cbmV4cG9ydCBmdW5jdGlvbiBzd2l0Y2hNYXBUbzxPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PHVua25vd24+PihvYnNlcnZhYmxlOiBPKTogT3BlcmF0b3JGdW5jdGlvbjx1bmtub3duLCBPYnNlcnZlZFZhbHVlT2Y8Tz4+O1xuLyoqIEBkZXByZWNhdGVkIFRoZSBgcmVzdWx0U2VsZWN0b3JgIHBhcmFtZXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdjguIFVzZSBhbiBpbm5lciBgbWFwYCBpbnN0ZWFkLiBEZXRhaWxzOiBodHRwczovL3J4anMuZGV2L2RlcHJlY2F0aW9ucy9yZXN1bHRTZWxlY3RvciAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN3aXRjaE1hcFRvPE8gZXh0ZW5kcyBPYnNlcnZhYmxlSW5wdXQ8dW5rbm93bj4+KFxuICBvYnNlcnZhYmxlOiBPLFxuICByZXN1bHRTZWxlY3RvcjogdW5kZWZpbmVkXG4pOiBPcGVyYXRvckZ1bmN0aW9uPHVua25vd24sIE9ic2VydmVkVmFsdWVPZjxPPj47XG4vKiogQGRlcHJlY2F0ZWQgVGhlIGByZXN1bHRTZWxlY3RvcmAgcGFyYW1ldGVyIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gVXNlIGFuIGlubmVyIGBtYXBgIGluc3RlYWQuIERldGFpbHM6IGh0dHBzOi8vcnhqcy5kZXYvZGVwcmVjYXRpb25zL3Jlc3VsdFNlbGVjdG9yICovXG5leHBvcnQgZnVuY3Rpb24gc3dpdGNoTWFwVG88VCwgUiwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDx1bmtub3duPj4oXG4gIG9ic2VydmFibGU6IE8sXG4gIHJlc3VsdFNlbGVjdG9yOiAob3V0ZXJWYWx1ZTogVCwgaW5uZXJWYWx1ZTogT2JzZXJ2ZWRWYWx1ZU9mPE8+LCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcikgPT4gUlxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBSPjtcblxuLyoqXG4gKiBQcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byB0aGUgc2FtZSBPYnNlcnZhYmxlIHdoaWNoIGlzIGZsYXR0ZW5lZCBtdWx0aXBsZVxuICogdGltZXMgd2l0aCB7QGxpbmsgc3dpdGNoTWFwfSBpbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MgbGlrZSB7QGxpbmsgc3dpdGNoTWFwfSwgYnV0IG1hcHMgZWFjaCB2YWx1ZVxuICogYWx3YXlzIHRvIHRoZSBzYW1lIGlubmVyIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqICFbXShzd2l0Y2hNYXBUby5wbmcpXG4gKlxuICogTWFwcyBlYWNoIHNvdXJjZSB2YWx1ZSB0byB0aGUgZ2l2ZW4gT2JzZXJ2YWJsZSBgaW5uZXJPYnNlcnZhYmxlYCByZWdhcmRsZXNzXG4gKiBvZiB0aGUgc291cmNlIHZhbHVlLCBhbmQgdGhlbiBmbGF0dGVucyB0aG9zZSByZXN1bHRpbmcgT2JzZXJ2YWJsZXMgaW50byBvbmVcbiAqIHNpbmdsZSBPYnNlcnZhYmxlLCB3aGljaCBpcyB0aGUgb3V0cHV0IE9ic2VydmFibGUuIFRoZSBvdXRwdXQgT2JzZXJ2YWJsZXNcbiAqIGVtaXRzIHZhbHVlcyBvbmx5IGZyb20gdGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCBpbnN0YW5jZSBvZlxuICogYGlubmVyT2JzZXJ2YWJsZWAuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFJlc3RhcnQgYW4gaW50ZXJ2YWwgT2JzZXJ2YWJsZSBvbiBldmVyeSBjbGljayBldmVudFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIHN3aXRjaE1hcFRvLCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCByZXN1bHQgPSBjbGlja3MucGlwZShzd2l0Y2hNYXBUbyhpbnRlcnZhbCgxMDAwKSkpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcFRvfVxuICogQHNlZSB7QGxpbmsgc3dpdGNoQWxsfVxuICogQHNlZSB7QGxpbmsgc3dpdGNoTWFwfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VNYXBUb31cbiAqXG4gKiBAcGFyYW0gaW5uZXJPYnNlcnZhYmxlIEFuIGBPYnNlcnZhYmxlSW5wdXRgIHRvIHJlcGxhY2UgZWFjaCB2YWx1ZSBmcm9tIHRoZVxuICogc291cmNlIE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBmcm9tIHRoZVxuICogZ2l2ZW4gYGlubmVyT2JzZXJ2YWJsZWAgKGFuZCBvcHRpb25hbGx5IHRyYW5zZm9ybWVkIHRocm91Z2ggdGhlIGRlcHJlY2F0ZWRcbiAqIGByZXN1bHRTZWxlY3RvcmApIGV2ZXJ5IHRpbWUgYSB2YWx1ZSBpcyBlbWl0dGVkIG9uIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSxcbiAqIGFuZCB0YWtpbmcgb25seSB0aGUgdmFsdWVzIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgcHJvamVjdGVkIGlubmVyXG4gKiBPYnNlcnZhYmxlLlxuICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHY5LiBVc2Uge0BsaW5rIHN3aXRjaE1hcH0gaW5zdGVhZDogYHN3aXRjaE1hcCgoKSA9PiByZXN1bHQpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3dpdGNoTWFwVG88VCwgUiwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDx1bmtub3duPj4oXG4gIGlubmVyT2JzZXJ2YWJsZTogTyxcbiAgcmVzdWx0U2VsZWN0b3I/OiAob3V0ZXJWYWx1ZTogVCwgaW5uZXJWYWx1ZTogT2JzZXJ2ZWRWYWx1ZU9mPE8+LCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcikgPT4gUlxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZlZFZhbHVlT2Y8Tz4gfCBSPiB7XG4gIHJldHVybiBpc0Z1bmN0aW9uKHJlc3VsdFNlbGVjdG9yKSA/IHN3aXRjaE1hcCgoKSA9PiBpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yKSA6IHN3aXRjaE1hcCgoKSA9PiBpbm5lck9ic2VydmFibGUpO1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGVJbnB1dCwgT2JzZXJ2ZWRWYWx1ZU9mLCBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAnLi9zd2l0Y2hNYXAnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5cbi8vIFRPRE86IEdlbmVyYXRlIGEgbWFyYmxlIGRpYWdyYW0gZm9yIHRoZXNlIGRvY3MuXG5cbi8qKlxuICogQXBwbGllcyBhbiBhY2N1bXVsYXRvciBmdW5jdGlvbiBvdmVyIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aGVyZSB0aGVcbiAqIGFjY3VtdWxhdG9yIGZ1bmN0aW9uIGl0c2VsZiByZXR1cm5zIGFuIE9ic2VydmFibGUsIGVtaXR0aW5nIHZhbHVlc1xuICogb25seSBmcm9tIHRoZSBtb3N0IHJlY2VudGx5IHJldHVybmVkIE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MgbGlrZSB7QGxpbmsgbWVyZ2VTY2FufSwgYnV0IG9ubHkgdGhlIG1vc3QgcmVjZW50XG4gKiBPYnNlcnZhYmxlIHJldHVybmVkIGJ5IHRoZSBhY2N1bXVsYXRvciBpcyBtZXJnZWQgaW50byB0aGUgb3V0ZXIgT2JzZXJ2YWJsZS48L3NwYW4+XG4gKlxuICogQHNlZSB7QGxpbmsgc2Nhbn1cbiAqIEBzZWUge0BsaW5rIG1lcmdlU2Nhbn1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaE1hcH1cbiAqXG4gKiBAcGFyYW0gYWNjdW11bGF0b3JcbiAqIFRoZSBhY2N1bXVsYXRvciBmdW5jdGlvbiBjYWxsZWQgb24gZWFjaCBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0gc2VlZCBUaGUgaW5pdGlhbCBhY2N1bXVsYXRpb24gdmFsdWUuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUgb2YgdGhlIGFjY3VtdWxhdGVkIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN3aXRjaFNjYW48VCwgUiwgTyBleHRlbmRzIE9ic2VydmFibGVJbnB1dDxhbnk+PihcbiAgYWNjdW11bGF0b3I6IChhY2M6IFIsIHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBPLFxuICBzZWVkOiBSXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIE9ic2VydmVkVmFsdWVPZjxPPj4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgLy8gVGhlIHN0YXRlIHdlIHdpbGwga2VlcCB1cCB0byBkYXRlIHRvIHBhc3MgaW50byBvdXJcbiAgICAvLyBhY2N1bXVsYXRvciBmdW5jdGlvbiBhdCBlYWNoIG5ldyB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UuXG4gICAgbGV0IHN0YXRlID0gc2VlZDtcblxuICAgIC8vIFVzZSBgc3dpdGNoTWFwYCBvbiBvdXIgYHNvdXJjZWAgdG8gZG8gdGhlIHdvcmsgb2YgY3JlYXRpbmdcbiAgICAvLyB0aGlzIG9wZXJhdG9yLiBOb3RlIHRoZSBiYWNrd2FyZHMgb3JkZXIgaGVyZSBvZiBgc3dpdGNoTWFwKCkoc291cmNlKWBcbiAgICAvLyB0byBhdm9pZCBuZWVkaW5nIHRvIHVzZSBgcGlwZWAgdW5uZWNlc3NhcmlseVxuICAgIHN3aXRjaE1hcChcbiAgICAgIC8vIE9uIGVhY2ggdmFsdWUgZnJvbSB0aGUgc291cmNlLCBjYWxsIHRoZSBhY2N1bXVsYXRvciB3aXRoXG4gICAgICAvLyBvdXIgcHJldmlvdXMgc3RhdGUsIHRoZSB2YWx1ZSBhbmQgdGhlIGluZGV4LlxuICAgICAgKHZhbHVlOiBULCBpbmRleCkgPT4gYWNjdW11bGF0b3Ioc3RhdGUsIHZhbHVlLCBpbmRleCksXG4gICAgICAvLyBVc2luZyB0aGUgZGVwcmVjYXRlZCByZXN1bHQgc2VsZWN0b3IgaGVyZSBhcyBhIGRpcnR5IHRyaWNrXG4gICAgICAvLyB0byB1cGRhdGUgb3VyIHN0YXRlIHdpdGggdGhlIGZsYXR0ZW5lZCB2YWx1ZS5cbiAgICAgIChfLCBpbm5lclZhbHVlKSA9PiAoKHN0YXRlID0gaW5uZXJWYWx1ZSksIGlubmVyVmFsdWUpXG4gICAgKShzb3VyY2UpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvLyBSZWxlYXNlIHN0YXRlIG9uIGZpbmFsaXphdGlvblxuICAgICAgc3RhdGUgPSBudWxsITtcbiAgICB9O1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGVJbnB1dCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWwvbm9vcCc7XG5cbi8qKlxuICogRW1pdHMgdGhlIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB1bnRpbCBhIGBub3RpZmllcmBcbiAqIE9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+TGV0cyB2YWx1ZXMgcGFzcyB1bnRpbCBhIHNlY29uZCBPYnNlcnZhYmxlLFxuICogYG5vdGlmaWVyYCwgZW1pdHMgYSB2YWx1ZS4gVGhlbiwgaXQgY29tcGxldGVzLjwvc3Bhbj5cbiAqXG4gKiAhW10odGFrZVVudGlsLnBuZylcbiAqXG4gKiBgdGFrZVVudGlsYCBzdWJzY3JpYmVzIGFuZCBiZWdpbnMgbWlycm9yaW5nIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS4gSXQgYWxzb1xuICogbW9uaXRvcnMgYSBzZWNvbmQgT2JzZXJ2YWJsZSwgYG5vdGlmaWVyYCB0aGF0IHlvdSBwcm92aWRlLiBJZiB0aGUgYG5vdGlmaWVyYFxuICogZW1pdHMgYSB2YWx1ZSwgdGhlIG91dHB1dCBPYnNlcnZhYmxlIHN0b3BzIG1pcnJvcmluZyB0aGUgc291cmNlIE9ic2VydmFibGVcbiAqIGFuZCBjb21wbGV0ZXMuIElmIHRoZSBgbm90aWZpZXJgIGRvZXNuJ3QgZW1pdCBhbnkgdmFsdWUgYW5kIGNvbXBsZXRlc1xuICogdGhlbiBgdGFrZVVudGlsYCB3aWxsIHBhc3MgYWxsIHZhbHVlcy5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogVGljayBldmVyeSBzZWNvbmQgdW50aWwgdGhlIGZpcnN0IGNsaWNrIGhhcHBlbnNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW50ZXJ2YWwsIGZyb21FdmVudCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3Qgc291cmNlID0gaW50ZXJ2YWwoMTAwMCk7XG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgcmVzdWx0ID0gc291cmNlLnBpcGUodGFrZVVudGlsKGNsaWNrcykpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKiBAc2VlIHtAbGluayB0YWtlTGFzdH1cbiAqIEBzZWUge0BsaW5rIHRha2VXaGlsZX1cbiAqIEBzZWUge0BsaW5rIHNraXB9XG4gKlxuICogQHBhcmFtIG5vdGlmaWVyIFRoZSBgT2JzZXJ2YWJsZUlucHV0YCB3aG9zZSBmaXJzdCBlbWl0dGVkIHZhbHVlIHdpbGwgY2F1c2UgdGhlIG91dHB1dFxuICogT2JzZXJ2YWJsZSBvZiBgdGFrZVVudGlsYCB0byBzdG9wIGVtaXR0aW5nIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB2YWx1ZXMgZnJvbSB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlIHVudGlsIGBub3RpZmllcmAgZW1pdHMgaXRzIGZpcnN0IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFrZVVudGlsPFQ+KG5vdGlmaWVyOiBPYnNlcnZhYmxlSW5wdXQ8YW55Pik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBpbm5lckZyb20obm90aWZpZXIpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpLCBub29wKSk7XG4gICAgIXN1YnNjcmliZXIuY2xvc2VkICYmIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24sIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgVHJ1dGh5VHlwZXNPZiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gdGFrZVdoaWxlPFQ+KHByZWRpY2F0ZTogQm9vbGVhbkNvbnN0cnVjdG9yLCBpbmNsdXNpdmU6IHRydWUpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD47XG5leHBvcnQgZnVuY3Rpb24gdGFrZVdoaWxlPFQ+KHByZWRpY2F0ZTogQm9vbGVhbkNvbnN0cnVjdG9yLCBpbmNsdXNpdmU6IGZhbHNlKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUcnV0aHlUeXBlc09mPFQ+PjtcbmV4cG9ydCBmdW5jdGlvbiB0YWtlV2hpbGU8VD4ocHJlZGljYXRlOiBCb29sZWFuQ29uc3RydWN0b3IpOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFRydXRoeVR5cGVzT2Y8VD4+O1xuZXhwb3J0IGZ1bmN0aW9uIHRha2VXaGlsZTxULCBTIGV4dGVuZHMgVD4ocHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IHZhbHVlIGlzIFMpOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFM+O1xuZXhwb3J0IGZ1bmN0aW9uIHRha2VXaGlsZTxULCBTIGV4dGVuZHMgVD4ocHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IHZhbHVlIGlzIFMsIGluY2x1c2l2ZTogZmFsc2UpOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFM+O1xuZXhwb3J0IGZ1bmN0aW9uIHRha2VXaGlsZTxUPihwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbiwgaW5jbHVzaXZlPzogYm9vbGVhbik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPjtcblxuLyoqXG4gKiBFbWl0cyB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgc28gbG9uZyBhcyBlYWNoIHZhbHVlIHNhdGlzZmllc1xuICogdGhlIGdpdmVuIGBwcmVkaWNhdGVgLCBhbmQgdGhlbiBjb21wbGV0ZXMgYXMgc29vbiBhcyB0aGlzIGBwcmVkaWNhdGVgIGlzIG5vdFxuICogc2F0aXNmaWVkLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5UYWtlcyB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIG9ubHkgd2hpbGUgdGhleSBwYXNzIHRoZVxuICogY29uZGl0aW9uIGdpdmVuLiBXaGVuIHRoZSBmaXJzdCB2YWx1ZSBkb2VzIG5vdCBzYXRpc2Z5LCBpdCBjb21wbGV0ZXMuPC9zcGFuPlxuICpcbiAqICFbXSh0YWtlV2hpbGUucG5nKVxuICpcbiAqIGB0YWtlV2hpbGVgIHN1YnNjcmliZXMgYW5kIGJlZ2lucyBtaXJyb3JpbmcgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBFYWNoIHZhbHVlXG4gKiBlbWl0dGVkIG9uIHRoZSBzb3VyY2UgaXMgZ2l2ZW4gdG8gdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYVxuICogYm9vbGVhbiwgcmVwcmVzZW50aW5nIGEgY29uZGl0aW9uIHRvIGJlIHNhdGlzZmllZCBieSB0aGUgc291cmNlIHZhbHVlcy4gVGhlXG4gKiBvdXRwdXQgT2JzZXJ2YWJsZSBlbWl0cyB0aGUgc291cmNlIHZhbHVlcyB1bnRpbCBzdWNoIHRpbWUgYXMgdGhlIGBwcmVkaWNhdGVgXG4gKiByZXR1cm5zIGZhbHNlLCBhdCB3aGljaCBwb2ludCBgdGFrZVdoaWxlYCBzdG9wcyBtaXJyb3JpbmcgdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSBhbmQgY29tcGxldGVzIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogRW1pdCBjbGljayBldmVudHMgb25seSB3aGlsZSB0aGUgY2xpZW50WCBwcm9wZXJ0eSBpcyBncmVhdGVyIHRoYW4gMjAwXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50PFBvaW50ZXJFdmVudD4oZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgcmVzdWx0ID0gY2xpY2tzLnBpcGUodGFrZVdoaWxlKGV2ID0+IGV2LmNsaWVudFggPiAyMDApKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayB0YWtlfVxuICogQHNlZSB7QGxpbmsgdGFrZUxhc3R9XG4gKiBAc2VlIHtAbGluayB0YWtlVW50aWx9XG4gKiBAc2VlIHtAbGluayBza2lwfVxuICpcbiAqIEBwYXJhbSBwcmVkaWNhdGUgQSBmdW5jdGlvbiB0aGF0IGV2YWx1YXRlcyBhIHZhbHVlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSBhbmQgcmV0dXJucyBhIGJvb2xlYW4uIEFsc28gdGFrZXMgdGhlICh6ZXJvLWJhc2VkKSBpbmRleCBhcyB0aGVcbiAqIHNlY29uZCBhcmd1bWVudC5cbiAqIEBwYXJhbSBpbmNsdXNpdmUgV2hlbiBzZXQgdG8gYHRydWVgIHRoZSB2YWx1ZSB0aGF0IGNhdXNlZCBgcHJlZGljYXRlYCB0b1xuICogcmV0dXJuIGBmYWxzZWAgd2lsbCBhbHNvIGJlIGVtaXR0ZWQuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB2YWx1ZXMgZnJvbSB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlIHNvIGxvbmcgYXMgZWFjaCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIGNvbmRpdGlvbiBkZWZpbmVkIGJ5XG4gKiB0aGUgYHByZWRpY2F0ZWAsIHRoZW4gY29tcGxldGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFrZVdoaWxlPFQ+KHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuLCBpbmNsdXNpdmUgPSBmYWxzZSk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgrKyk7XG4gICAgICAgIChyZXN1bHQgfHwgaW5jbHVzaXZlKSAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAhcmVzdWx0ICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZlciB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uL3V0aWwvaWRlbnRpdHknO1xuXG4vKipcbiAqIEFuIGV4dGVuc2lvbiB0byB0aGUge0BsaW5rIE9ic2VydmVyfSBpbnRlcmZhY2UgdXNlZCBvbmx5IGJ5IHRoZSB7QGxpbmsgdGFwfSBvcGVyYXRvci5cbiAqXG4gKiBJdCBwcm92aWRlcyBhIHVzZWZ1bCBzZXQgb2YgY2FsbGJhY2tzIGEgdXNlciBjYW4gcmVnaXN0ZXIgdG8gZG8gc2lkZS1lZmZlY3RzIGluXG4gKiBjYXNlcyBvdGhlciB0aGFuIHdoYXQgdGhlIHVzdWFsIHtAbGluayBPYnNlcnZlcn0gY2FsbGJhY2tzIGFyZVxuICogKHtAbGluayBndWlkZS9nbG9zc2FyeS1hbmQtc2VtYW50aWNzI25leHQgbmV4dH0sXG4gKiB7QGxpbmsgZ3VpZGUvZ2xvc3NhcnktYW5kLXNlbWFudGljcyNlcnJvciBlcnJvcn0gYW5kL29yXG4gKiB7QGxpbmsgZ3VpZGUvZ2xvc3NhcnktYW5kLXNlbWFudGljcyNjb21wbGV0ZSBjb21wbGV0ZX0pLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCBzd2l0Y2hNYXAsIHRhcCwgaW50ZXJ2YWwsIHRha2UgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBzb3VyY2UkID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHJlc3VsdCQgPSBzb3VyY2UkLnBpcGUoXG4gKiAgIHN3aXRjaE1hcCgoXywgaSkgPT4gaSAlIDIgPT09IDBcbiAqICAgICA/IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlbW92ZScpLnBpcGUoXG4gKiAgICAgICAgIHRhcCh7XG4gKiAgICAgICAgICAgc3Vic2NyaWJlOiAoKSA9PiBjb25zb2xlLmxvZygnU3Vic2NyaWJlZCB0byB0aGUgbW91c2UgbW92ZSBldmVudHMgYWZ0ZXIgY2xpY2sgIycgKyBpKSxcbiAqICAgICAgICAgICB1bnN1YnNjcmliZTogKCkgPT4gY29uc29sZS5sb2coJ01vdXNlIG1vdmUgZXZlbnRzICMnICsgaSArICcgdW5zdWJzY3JpYmVkJyksXG4gKiAgICAgICAgICAgZmluYWxpemU6ICgpID0+IGNvbnNvbGUubG9nKCdNb3VzZSBtb3ZlIGV2ZW50cyAjJyArIGkgKyAnIGZpbmFsaXplZCcpXG4gKiAgICAgICAgIH0pXG4gKiAgICAgICApXG4gKiAgICAgOiBpbnRlcnZhbCgxXzAwMCkucGlwZShcbiAqICAgICAgICAgdGFrZSg1KSxcbiAqICAgICAgICAgdGFwKHtcbiAqICAgICAgICAgICBzdWJzY3JpYmU6ICgpID0+IGNvbnNvbGUubG9nKCdTdWJzY3JpYmVkIHRvIHRoZSAxLXNlY29uZCBpbnRlcnZhbCBldmVudHMgYWZ0ZXIgY2xpY2sgIycgKyBpKSxcbiAqICAgICAgICAgICB1bnN1YnNjcmliZTogKCkgPT4gY29uc29sZS5sb2coJzEtc2Vjb25kIGludGVydmFsIGV2ZW50cyAjJyArIGkgKyAnIHVuc3Vic2NyaWJlZCcpLFxuICogICAgICAgICAgIGZpbmFsaXplOiAoKSA9PiBjb25zb2xlLmxvZygnMS1zZWNvbmQgaW50ZXJ2YWwgZXZlbnRzICMnICsgaSArICcgZmluYWxpemVkJylcbiAqICAgICAgICAgfSlcbiAqICAgICAgIClcbiAqICAgKVxuICogKTtcbiAqXG4gKiBjb25zdCBzdWJzY3JpcHRpb24gPSByZXN1bHQkLnN1YnNjcmliZSh7XG4gKiAgIG5leHQ6IGNvbnNvbGUubG9nXG4gKiB9KTtcbiAqXG4gKiBzZXRUaW1lb3V0KCgpID0+IHtcbiAqICAgY29uc29sZS5sb2coJ1Vuc3Vic2NyaWJlIGFmdGVyIDYwIHNlY29uZHMnKTtcbiAqICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gKiB9LCA2MF8wMDApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFwT2JzZXJ2ZXI8VD4gZXh0ZW5kcyBPYnNlcnZlcjxUPiB7XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdGhhdCBgdGFwYCBvcGVyYXRvciBpbnZva2VzIGF0IHRoZSBtb21lbnQgd2hlbiB0aGUgc291cmNlIE9ic2VydmFibGVcbiAgICogZ2V0cyBzdWJzY3JpYmVkIHRvLlxuICAgKi9cbiAgc3Vic2NyaWJlOiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogVGhlIGNhbGxiYWNrIHRoYXQgYHRhcGAgb3BlcmF0b3IgaW52b2tlcyB3aGVuIGFuIGV4cGxpY2l0XG4gICAqIHtAbGluayBndWlkZS9nbG9zc2FyeS1hbmQtc2VtYW50aWNzI3Vuc3Vic2NyaXB0aW9uIHVuc3Vic2NyaWJlfSBoYXBwZW5zLiBJdCB3b24ndCBnZXQgaW52b2tlZCBvblxuICAgKiBgZXJyb3JgIG9yIGBjb21wbGV0ZWAgZXZlbnRzLlxuICAgKi9cbiAgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdGhhdCBgdGFwYCBvcGVyYXRvciBpbnZva2VzIHdoZW4gYW55IGtpbmQgb2ZcbiAgICoge0BsaW5rIGd1aWRlL2dsb3NzYXJ5LWFuZC1zZW1hbnRpY3MjZmluYWxpemF0aW9uIGZpbmFsaXphdGlvbn0gaGFwcGVucyAtIGVpdGhlciB3aGVuXG4gICAqIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBgZXJyb3JgcyBvciBgY29tcGxldGVgcyBvciB3aGVuIGl0IGdldHMgZXhwbGljaXRseSB1bnN1YnNjcmliZWRcbiAgICogYnkgdGhlIHVzZXIuIFRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgaW4gdXNpbmcgdGhpcyBjYWxsYmFjayBvciB0aGUge0BsaW5rIGZpbmFsaXplfVxuICAgKiBvcGVyYXRvciwgYnV0IGlmIHlvdSdyZSBhbHJlYWR5IHVzaW5nIGB0YXBgIG9wZXJhdG9yLCB5b3UgY2FuIHVzZSB0aGlzIGNhbGxiYWNrXG4gICAqIGluc3RlYWQuIFlvdSdkIGdldCB0aGUgc2FtZSByZXN1bHQgaW4gZWl0aGVyIGNhc2UuXG4gICAqL1xuICBmaW5hbGl6ZTogKCkgPT4gdm9pZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0YXA8VD4ob2JzZXJ2ZXJPck5leHQ/OiBQYXJ0aWFsPFRhcE9ic2VydmVyPFQ+PiB8ICgodmFsdWU6IFQpID0+IHZvaWQpKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+O1xuLyoqIEBkZXByZWNhdGVkIEluc3RlYWQgb2YgcGFzc2luZyBzZXBhcmF0ZSBjYWxsYmFjayBhcmd1bWVudHMsIHVzZSBhbiBvYnNlcnZlciBhcmd1bWVudC4gU2lnbmF0dXJlcyB0YWtpbmcgc2VwYXJhdGUgY2FsbGJhY2sgYXJndW1lbnRzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4gRGV0YWlsczogaHR0cHM6Ly9yeGpzLmRldi9kZXByZWNhdGlvbnMvc3Vic2NyaWJlLWFyZ3VtZW50cyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhcDxUPihcbiAgbmV4dD86ICgodmFsdWU6IFQpID0+IHZvaWQpIHwgbnVsbCxcbiAgZXJyb3I/OiAoKGVycm9yOiBhbnkpID0+IHZvaWQpIHwgbnVsbCxcbiAgY29tcGxldGU/OiAoKCkgPT4gdm9pZCkgfCBudWxsXG4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD47XG5cbi8qKlxuICogVXNlZCB0byBwZXJmb3JtIHNpZGUtZWZmZWN0cyBmb3Igbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBzb3VyY2Ugb2JzZXJ2YWJsZVxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5Vc2VkIHdoZW4geW91IHdhbnQgdG8gYWZmZWN0IG91dHNpZGUgc3RhdGUgd2l0aCBhIG5vdGlmaWNhdGlvbiB3aXRob3V0IGFsdGVyaW5nIHRoZSBub3RpZmljYXRpb248L3NwYW4+XG4gKlxuICogIVtdKHRhcC5wbmcpXG4gKlxuICogVGFwIGlzIGRlc2lnbmVkIHRvIGFsbG93IHRoZSBkZXZlbG9wZXIgYSBkZXNpZ25hdGVkIHBsYWNlIHRvIHBlcmZvcm0gc2lkZSBlZmZlY3RzLiBXaGlsZSB5b3UgX2NvdWxkXyBwZXJmb3JtIHNpZGUtZWZmZWN0c1xuICogaW5zaWRlIG9mIGEgYG1hcGAgb3IgYSBgbWVyZ2VNYXBgLCB0aGF0IHdvdWxkIG1ha2UgdGhlaXIgbWFwcGluZyBmdW5jdGlvbnMgaW1wdXJlLCB3aGljaCBpc24ndCBhbHdheXMgYSBiaWcgZGVhbCwgYnV0IHdpbGxcbiAqIG1ha2UgaXQgc28geW91IGNhbid0IGRvIHRoaW5ncyBsaWtlIG1lbW9pemUgdGhvc2UgZnVuY3Rpb25zLiBUaGUgYHRhcGAgb3BlcmF0b3IgaXMgZGVzaWduZWQgc29sZWx5IGZvciBzdWNoIHNpZGUtZWZmZWN0cyB0b1xuICogaGVscCB5b3UgcmVtb3ZlIHNpZGUtZWZmZWN0cyBmcm9tIG90aGVyIG9wZXJhdGlvbnMuXG4gKlxuICogRm9yIGFueSBub3RpZmljYXRpb24sIG5leHQsIGVycm9yLCBvciBjb21wbGV0ZSwgYHRhcGAgd2lsbCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayB5b3UgaGF2ZSBwcm92aWRlZCB0byBpdCwgdmlhIGEgZnVuY3Rpb25cbiAqIHJlZmVyZW5jZSwgb3IgYSBwYXJ0aWFsIG9ic2VydmVyLCB0aGVuIHBhc3MgdGhhdCBub3RpZmljYXRpb24gZG93biB0aGUgc3RyZWFtLlxuICpcbiAqIFRoZSBvYnNlcnZhYmxlIHJldHVybmVkIGJ5IGB0YXBgIGlzIGFuIGV4YWN0IG1pcnJvciBvZiB0aGUgc291cmNlLCB3aXRoIG9uZSBleGNlcHRpb246IEFueSBlcnJvciB0aGF0IG9jY3VycyAtLSBzeW5jaHJvbm91c2x5IC0tIGluIGEgaGFuZGxlclxuICogcHJvdmlkZWQgdG8gYHRhcGAgd2lsbCBiZSBlbWl0dGVkIGFzIGFuIGVycm9yIGZyb20gdGhlIHJldHVybmVkIG9ic2VydmFibGUuXG4gKlxuICogPiBCZSBjYXJlZnVsISBZb3UgY2FuIG11dGF0ZSBvYmplY3RzIGFzIHRoZXkgcGFzcyB0aHJvdWdoIHRoZSBgdGFwYCBvcGVyYXRvcidzIGhhbmRsZXJzLlxuICpcbiAqIFRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgYHRhcGAgaXMgYWN0dWFsbHkgZm9yIGRlYnVnZ2luZy4gWW91IGNhbiBwbGFjZSBhIGB0YXAoY29uc29sZS5sb2cpYCBhbnl3aGVyZVxuICogaW4geW91ciBvYnNlcnZhYmxlIGBwaXBlYCwgbG9nIG91dCB0aGUgbm90aWZpY2F0aW9ucyBhcyB0aGV5IGFyZSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgcmV0dXJuZWQgYnkgdGhlIHByZXZpb3VzXG4gKiBvcGVyYXRpb24uXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiBDaGVjayBhIHJhbmRvbSBudW1iZXIgYmVmb3JlIGl0IGlzIGhhbmRsZWQuIEJlbG93IGlzIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIHVzZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLFxuICogYW5kIGVtaXQgYCdiaWcnYCBvciBgJ3NtYWxsJ2AgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoYXQgbnVtYmVyLiBCdXQgd2Ugd2FudGVkIHRvIGxvZyB3aGF0IHRoZSBvcmlnaW5hbCBudW1iZXJcbiAqIHdhcywgc28gd2UgaGF2ZSBhZGRlZCBhIGB0YXAoY29uc29sZS5sb2cpYC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgb2YsIHRhcCwgbWFwIH0gZnJvbSAncnhqcyc7XG4gKlxuICogb2YoTWF0aC5yYW5kb20oKSkucGlwZShcbiAqICAgdGFwKGNvbnNvbGUubG9nKSxcbiAqICAgbWFwKG4gPT4gbiA+IDAuNSA/ICdiaWcnIDogJ3NtYWxsJylcbiAqICkuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcbiAqIGBgYFxuICpcbiAqIFVzaW5nIGB0YXBgIHRvIGFuYWx5emUgYSB2YWx1ZSBhbmQgZm9yY2UgYW4gZXJyb3IuIEJlbG93IGlzIGFuIG9ic2VydmFibGUgd2hlcmUgaW4gb3VyIHN5c3RlbSB3ZSBvbmx5XG4gKiB3YW50IHRvIGVtaXQgbnVtYmVycyAzIG9yIGxlc3Mgd2UgZ2V0IGZyb20gYW5vdGhlciBzb3VyY2UuIFdlIGNhbiBmb3JjZSBvdXIgb2JzZXJ2YWJsZSB0byBlcnJvclxuICogdXNpbmcgYHRhcGAuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCB0YXAgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBzb3VyY2UgPSBvZigxLCAyLCAzLCA0LCA1KTtcbiAqXG4gKiBzb3VyY2UucGlwZShcbiAqICAgdGFwKG4gPT4ge1xuICogICAgIGlmIChuID4gMykge1xuICogICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVmFsdWUgJHsgbiB9IGlzIGdyZWF0ZXIgdGhhbiAzYCk7XG4gKiAgICAgfVxuICogICB9KVxuICogKVxuICogLnN1YnNjcmliZSh7IG5leHQ6IGNvbnNvbGUubG9nLCBlcnJvcjogZXJyID0+IGNvbnNvbGUubG9nKGVyci5tZXNzYWdlKSB9KTtcbiAqIGBgYFxuICpcbiAqIFdlIHdhbnQgdG8ga25vdyB3aGVuIGFuIG9ic2VydmFibGUgY29tcGxldGVzIGJlZm9yZSBtb3Zpbmcgb24gdG8gdGhlIG5leHQgb2JzZXJ2YWJsZS4gVGhlIHN5c3RlbVxuICogYmVsb3cgd2lsbCBlbWl0IGEgcmFuZG9tIHNlcmllcyBvZiBgJ1gnYCBjaGFyYWN0ZXJzIGZyb20gMyBkaWZmZXJlbnQgb2JzZXJ2YWJsZXMgaW4gc2VxdWVuY2UuIFRoZVxuICogb25seSB3YXkgd2Uga25vdyB3aGVuIG9uZSBvYnNlcnZhYmxlIGNvbXBsZXRlcyBhbmQgbW92ZXMgdG8gdGhlIG5leHQgb25lLCBpbiB0aGlzIGNhc2UsIGlzIGJlY2F1c2VcbiAqIHdlIGhhdmUgYWRkZWQgYSBgdGFwYCB3aXRoIHRoZSBzaWRlIGVmZmVjdCBvZiBsb2dnaW5nIHRvIGNvbnNvbGUuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG9mLCBjb25jYXRNYXAsIGludGVydmFsLCB0YWtlLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIG9mKDEsIDIsIDMpLnBpcGUoXG4gKiAgIGNvbmNhdE1hcChuID0+IGludGVydmFsKDEwMDApLnBpcGUoXG4gKiAgICAgdGFrZShNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMCkpLFxuICogICAgIG1hcCgoKSA9PiAnWCcpLFxuICogICAgIHRhcCh7IGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZyhgRG9uZSB3aXRoICR7IG4gfWApIH0pXG4gKiAgICkpXG4gKiApXG4gKiAuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGZpbmFsaXplfVxuICogQHNlZSB7QGxpbmsgVGFwT2JzZXJ2ZXJ9XG4gKlxuICogQHBhcmFtIG9ic2VydmVyT3JOZXh0IEEgbmV4dCBoYW5kbGVyIG9yIHBhcnRpYWwgb2JzZXJ2ZXJcbiAqIEBwYXJhbSBlcnJvciBBbiBlcnJvciBoYW5kbGVyXG4gKiBAcGFyYW0gY29tcGxldGUgQSBjb21wbGV0aW9uIGhhbmRsZXJcbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSwgYnV0XG4gKiBydW5zIHRoZSBzcGVjaWZpZWQgT2JzZXJ2ZXIgb3IgY2FsbGJhY2socykgZm9yIGVhY2ggaXRlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhcDxUPihcbiAgb2JzZXJ2ZXJPck5leHQ/OiBQYXJ0aWFsPFRhcE9ic2VydmVyPFQ+PiB8ICgodmFsdWU6IFQpID0+IHZvaWQpIHwgbnVsbCxcbiAgZXJyb3I/OiAoKGU6IGFueSkgPT4gdm9pZCkgfCBudWxsLFxuICBjb21wbGV0ZT86ICgoKSA9PiB2b2lkKSB8IG51bGxcbik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIC8vIFdlIGhhdmUgdG8gY2hlY2sgdG8gc2VlIG5vdCBvbmx5IGlmIG5leHQgaXMgYSBmdW5jdGlvbixcbiAgLy8gYnV0IGlmIGVycm9yIG9yIGNvbXBsZXRlIHdlcmUgcGFzc2VkLiBUaGlzIGlzIGJlY2F1c2Ugc29tZW9uZVxuICAvLyBjb3VsZCB0ZWNobmljYWxseSBjYWxsIHRhcCBsaWtlIGB0YXAobnVsbCwgZm4pYCBvciBgdGFwKG51bGwsIG51bGwsIGZuKWAuXG4gIGNvbnN0IHRhcE9ic2VydmVyID1cbiAgICBpc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCBlcnJvciB8fCBjb21wbGV0ZVxuICAgICAgPyAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW9iamVjdC1saXRlcmFsLXR5cGUtYXNzZXJ0aW9uXG4gICAgICAgICh7IG5leHQ6IG9ic2VydmVyT3JOZXh0IGFzIEV4Y2x1ZGU8dHlwZW9mIG9ic2VydmVyT3JOZXh0LCBQYXJ0aWFsPFRhcE9ic2VydmVyPFQ+Pj4sIGVycm9yLCBjb21wbGV0ZSB9IGFzIFBhcnRpYWw8VGFwT2JzZXJ2ZXI8VD4+KVxuICAgICAgOiBvYnNlcnZlck9yTmV4dDtcblxuICByZXR1cm4gdGFwT2JzZXJ2ZXJcbiAgICA/IG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgICAgICB0YXBPYnNlcnZlci5zdWJzY3JpYmU/LigpO1xuICAgICAgICBsZXQgaXNVbnN1YiA9IHRydWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICAgICAgc3Vic2NyaWJlcixcbiAgICAgICAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICB0YXBPYnNlcnZlci5uZXh0Py4odmFsdWUpO1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgaXNVbnN1YiA9IGZhbHNlO1xuICAgICAgICAgICAgICB0YXBPYnNlcnZlci5jb21wbGV0ZT8uKCk7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGlzVW5zdWIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGFwT2JzZXJ2ZXIuZXJyb3I/LihlcnIpO1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNVbnN1Yikge1xuICAgICAgICAgICAgICAgIHRhcE9ic2VydmVyLnVuc3Vic2NyaWJlPy4oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0YXBPYnNlcnZlci5maW5hbGl6ZT8uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICA6IC8vIFRhcCB3YXMgY2FsbGVkIHdpdGggbm8gdmFsaWQgdGFwIG9ic2VydmVyIG9yIGhhbmRsZXJcbiAgICAgIC8vIChlLmcuIGB0YXAobnVsbCwgbnVsbCwgbnVsbClgIG9yIGB0YXAobnVsbClgIG9yIGB0YXAoKWApXG4gICAgICAvLyBzbyB3ZSdyZSBnb2luZyB0byBqdXN0IG1pcnJvciB0aGUgc291cmNlLlxuICAgICAgaWRlbnRpdHk7XG59XG4iLCAiaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcblxuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlSW5wdXQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcblxuLyoqXG4gKiBBbiBvYmplY3QgaW50ZXJmYWNlIHVzZWQgYnkge0BsaW5rIHRocm90dGxlfSBvciB7QGxpbmsgdGhyb3R0bGVUaW1lfSB0aGF0IGVuc3VyZVxuICogY29uZmlndXJhdGlvbiBvcHRpb25zIG9mIHRoZXNlIG9wZXJhdG9ycy5cbiAqXG4gKiBAc2VlIHtAbGluayB0aHJvdHRsZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlVGltZX1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaHJvdHRsZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByZXN1bHRpbmcgT2JzZXJ2YWJsZSB3aWxsIGVtaXQgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlIHNvdXJjZVxuICAgKiBPYnNlcnZhYmxlIGF0IHRoZSAqKnN0YXJ0Kiogb2YgdGhlIFwidGhyb3R0bGluZ1wiIHByb2Nlc3MgKHdoZW4gc3RhcnRpbmcgYW5cbiAgICogaW50ZXJuYWwgdGltZXIgdGhhdCBwcmV2ZW50cyBvdGhlciBlbWlzc2lvbnMgZnJvbSB0aGUgc291cmNlIHRvIHBhc3MgdGhyb3VnaCkuXG4gICAqIElmIGBmYWxzZWAsIGl0IHdpbGwgbm90IGVtaXQgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGF0IHRoZVxuICAgKiBzdGFydCBvZiB0aGUgXCJ0aHJvdHRsaW5nXCIgcHJvY2Vzcy5cbiAgICpcbiAgICogSWYgbm90IHByb3ZpZGVkLCBkZWZhdWx0cyB0bzogYHRydWVgLlxuICAgKi9cbiAgbGVhZGluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByZXN1bHRpbmcgT2JzZXJ2YWJsZSB3aWxsIGVtaXQgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgc291cmNlXG4gICAqIE9ic2VydmFibGUgYXQgdGhlICoqZW5kKiogb2YgdGhlIFwidGhyb3R0bGluZ1wiIHByb2Nlc3MgKHdoZW4gZW5kaW5nIGFuIGludGVybmFsXG4gICAqIHRpbWVyIHRoYXQgcHJldmVudHMgb3RoZXIgZW1pc3Npb25zIGZyb20gdGhlIHNvdXJjZSB0byBwYXNzIHRocm91Z2gpLlxuICAgKiBJZiBgZmFsc2VgLCBpdCB3aWxsIG5vdCBlbWl0IHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGF0IHRoZVxuICAgKiBlbmQgb2YgdGhlIFwidGhyb3R0bGluZ1wiIHByb2Nlc3MuXG4gICAqXG4gICAqIElmIG5vdCBwcm92aWRlZCwgZGVmYXVsdHMgdG86IGBmYWxzZWAuXG4gICAqL1xuICB0cmFpbGluZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW1pdHMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgdGhlbiBpZ25vcmVzIHN1YnNlcXVlbnQgc291cmNlXG4gKiB2YWx1ZXMgZm9yIGEgZHVyYXRpb24gZGV0ZXJtaW5lZCBieSBhbm90aGVyIE9ic2VydmFibGUsIHRoZW4gcmVwZWF0cyB0aGlzXG4gKiBwcm9jZXNzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIHRocm90dGxlVGltZX0sIGJ1dCB0aGUgc2lsZW5jaW5nXG4gKiBkdXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IGEgc2Vjb25kIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqICFbXSh0aHJvdHRsZS5zdmcpXG4gKlxuICogYHRocm90dGxlYCBlbWl0cyB0aGUgc291cmNlIE9ic2VydmFibGUgdmFsdWVzIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZVxuICogd2hlbiBpdHMgaW50ZXJuYWwgdGltZXIgaXMgZGlzYWJsZWQsIGFuZCBpZ25vcmVzIHNvdXJjZSB2YWx1ZXMgd2hlbiB0aGUgdGltZXJcbiAqIGlzIGVuYWJsZWQuIEluaXRpYWxseSwgdGhlIHRpbWVyIGlzIGRpc2FibGVkLiBBcyBzb29uIGFzIHRoZSBmaXJzdCBzb3VyY2VcbiAqIHZhbHVlIGFycml2ZXMsIGl0IGlzIGZvcndhcmRlZCB0byB0aGUgb3V0cHV0IE9ic2VydmFibGUsIGFuZCB0aGVuIHRoZSB0aW1lclxuICogaXMgZW5hYmxlZCBieSBjYWxsaW5nIHRoZSBgZHVyYXRpb25TZWxlY3RvcmAgZnVuY3Rpb24gd2l0aCB0aGUgc291cmNlIHZhbHVlLFxuICogd2hpY2ggcmV0dXJucyB0aGUgXCJkdXJhdGlvblwiIE9ic2VydmFibGUuIFdoZW4gdGhlIGR1cmF0aW9uIE9ic2VydmFibGUgZW1pdHMgYVxuICogdmFsdWUsIHRoZSB0aW1lciBpcyBkaXNhYmxlZCwgYW5kIHRoaXMgcHJvY2VzcyByZXBlYXRzIGZvciB0aGVcbiAqIG5leHQgc291cmNlIHZhbHVlLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBFbWl0IGNsaWNrcyBhdCBhIHJhdGUgb2YgYXQgbW9zdCBvbmUgY2xpY2sgcGVyIHNlY29uZFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIHRocm90dGxlLCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNvbnN0IGNsaWNrcyA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCByZXN1bHQgPSBjbGlja3MucGlwZSh0aHJvdHRsZSgoKSA9PiBpbnRlcnZhbCgxMDAwKSkpO1xuICpcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBhdWRpdH1cbiAqIEBzZWUge0BsaW5rIGRlYm91bmNlfVxuICogQHNlZSB7QGxpbmsgZGVsYXlXaGVufVxuICogQHNlZSB7QGxpbmsgc2FtcGxlfVxuICogQHNlZSB7QGxpbmsgdGhyb3R0bGVUaW1lfVxuICpcbiAqIEBwYXJhbSBkdXJhdGlvblNlbGVjdG9yIEEgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIHZhbHVlIGZyb20gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSwgZm9yIGNvbXB1dGluZyB0aGUgc2lsZW5jaW5nIGR1cmF0aW9uIGZvciBlYWNoIHNvdXJjZSB2YWx1ZSxcbiAqIHJldHVybmVkIGFzIGFuIGBPYnNlcnZhYmxlSW5wdXRgLlxuICogQHBhcmFtIGNvbmZpZyBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGRlZmluZSBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2BcbiAqIGJlaGF2aW9yLiBEZWZhdWx0cyB0byBgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogZmFsc2UgfWAuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBwZXJmb3JtcyB0aGUgdGhyb3R0bGVcbiAqIG9wZXJhdGlvbiB0byBsaW1pdCB0aGUgcmF0ZSBvZiBlbWlzc2lvbnMgZnJvbSB0aGUgc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3R0bGU8VD4oZHVyYXRpb25TZWxlY3RvcjogKHZhbHVlOiBUKSA9PiBPYnNlcnZhYmxlSW5wdXQ8YW55PiwgY29uZmlnPzogVGhyb3R0bGVDb25maWcpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgY29uc3QgeyBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSBmYWxzZSB9ID0gY29uZmlnID8/IHt9O1xuICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgIGxldCBzZW5kVmFsdWU6IFQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgdGhyb3R0bGVkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgaXNDb21wbGV0ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZW5kVGhyb3R0bGluZyA9ICgpID0+IHtcbiAgICAgIHRocm90dGxlZD8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm90dGxlZCA9IG51bGw7XG4gICAgICBpZiAodHJhaWxpbmcpIHtcbiAgICAgICAgc2VuZCgpO1xuICAgICAgICBpc0NvbXBsZXRlICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY2xlYW51cFRocm90dGxpbmcgPSAoKSA9PiB7XG4gICAgICB0aHJvdHRsZWQgPSBudWxsO1xuICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHN0YXJ0VGhyb3R0bGUgPSAodmFsdWU6IFQpID0+XG4gICAgICAodGhyb3R0bGVkID0gaW5uZXJGcm9tKGR1cmF0aW9uU2VsZWN0b3IodmFsdWUpKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGVuZFRocm90dGxpbmcsIGNsZWFudXBUaHJvdHRsaW5nKSkpO1xuXG4gICAgY29uc3Qgc2VuZCA9ICgpID0+IHtcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAvLyBFbnN1cmUgd2UgY2xlYXIgb3V0IG91ciB2YWx1ZSBhbmQgaGFzVmFsdWUgZmxhZ1xuICAgICAgICAvLyBiZWZvcmUgd2UgZW1pdCwgb3RoZXJ3aXNlIHJlZW50cmFudCBjb2RlIGNhbiBjYXVzZVxuICAgICAgICAvLyBpc3N1ZXMgaGVyZS5cbiAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzZW5kVmFsdWUhO1xuICAgICAgICBzZW5kVmFsdWUgPSBudWxsO1xuICAgICAgICAvLyBFbWl0IHRoZSB2YWx1ZS5cbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgIWlzQ29tcGxldGUgJiYgc3RhcnRUaHJvdHRsZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgIC8vIFJlZ2FyZGluZyB0aGUgcHJlc2VuY2Ugb2YgdGhyb3R0bGVkLmNsb3NlZCBpbiB0aGUgZm9sbG93aW5nXG4gICAgICAgIC8vIGNvbmRpdGlvbnMsIGlmIGEgc3luY2hyb25vdXMgZHVyYXRpb24gc2VsZWN0b3IgaXMgc3BlY2lmaWVkIC0gd2VpcmQsXG4gICAgICAgIC8vIGJ1dCBsZWdhbCAtIGFuIGFscmVhZHktY2xvc2VkIHN1YnNjcmlwdGlvbiB3aWxsIGJlIGFzc2lnbmVkIHRvXG4gICAgICAgIC8vIHRocm90dGxlZCwgc28gdGhlIHN1YnNjcmlwdGlvbidzIGNsb3NlZCBwcm9wZXJ0eSBuZWVkcyB0byBiZSBjaGVja2VkLFxuICAgICAgICAvLyB0b28uXG4gICAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBzZW5kVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAhKHRocm90dGxlZCAmJiAhdGhyb3R0bGVkLmNsb3NlZCkgJiYgKGxlYWRpbmcgPyBzZW5kKCkgOiBzdGFydFRocm90dGxlKHZhbHVlKSk7XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAhKHRyYWlsaW5nICYmIGhhc1ZhbHVlICYmIHRocm90dGxlZCAmJiAhdGhyb3R0bGVkLmNsb3NlZCkgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXN5bmMnO1xuaW1wb3J0IHsgdGhyb3R0bGUsIFRocm90dGxlQ29uZmlnIH0gZnJvbSAnLi90aHJvdHRsZSc7XG5pbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIFNjaGVkdWxlckxpa2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyB0aW1lciB9IGZyb20gJy4uL29ic2VydmFibGUvdGltZXInO1xuXG4vKipcbiAqIEVtaXRzIGEgdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUsIHRoZW4gaWdub3JlcyBzdWJzZXF1ZW50IHNvdXJjZVxuICogdmFsdWVzIGZvciBgZHVyYXRpb25gIG1pbGxpc2Vjb25kcywgdGhlbiByZXBlYXRzIHRoaXMgcHJvY2Vzcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+TGV0cyBhIHZhbHVlIHBhc3MsIHRoZW4gaWdub3JlcyBzb3VyY2UgdmFsdWVzIGZvciB0aGVcbiAqIG5leHQgYGR1cmF0aW9uYCBtaWxsaXNlY29uZHMuPC9zcGFuPlxuICpcbiAqICFbXSh0aHJvdHRsZVRpbWUucG5nKVxuICpcbiAqIGB0aHJvdHRsZVRpbWVgIGVtaXRzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB2YWx1ZXMgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlXG4gKiB3aGVuIGl0cyBpbnRlcm5hbCB0aW1lciBpcyBkaXNhYmxlZCwgYW5kIGlnbm9yZXMgc291cmNlIHZhbHVlcyB3aGVuIHRoZSB0aW1lclxuICogaXMgZW5hYmxlZC4gSW5pdGlhbGx5LCB0aGUgdGltZXIgaXMgZGlzYWJsZWQuIEFzIHNvb24gYXMgdGhlIGZpcnN0IHNvdXJjZVxuICogdmFsdWUgYXJyaXZlcywgaXQgaXMgZm9yd2FyZGVkIHRvIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSwgYW5kIHRoZW4gdGhlIHRpbWVyXG4gKiBpcyBlbmFibGVkLiBBZnRlciBgZHVyYXRpb25gIG1pbGxpc2Vjb25kcyAob3IgdGhlIHRpbWUgdW5pdCBkZXRlcm1pbmVkXG4gKiBpbnRlcm5hbGx5IGJ5IHRoZSBvcHRpb25hbCBgc2NoZWR1bGVyYCkgaGFzIHBhc3NlZCwgdGhlIHRpbWVyIGlzIGRpc2FibGVkLFxuICogYW5kIHRoaXMgcHJvY2VzcyByZXBlYXRzIGZvciB0aGUgbmV4dCBzb3VyY2UgdmFsdWUuIE9wdGlvbmFsbHkgdGFrZXMgYVxuICoge0BsaW5rIFNjaGVkdWxlckxpa2V9IGZvciBtYW5hZ2luZyB0aW1lcnMuXG4gKlxuICogIyMgRXhhbXBsZXNcbiAqXG4gKiAjIyMgTGltaXQgY2xpY2sgcmF0ZVxuICpcbiAqIEVtaXQgY2xpY2tzIGF0IGEgcmF0ZSBvZiBhdCBtb3N0IG9uZSBjbGljayBwZXIgc2Vjb25kXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGNsaWNrcy5waXBlKHRocm90dGxlVGltZSgxMDAwKSk7XG4gKlxuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGF1ZGl0VGltZX1cbiAqIEBzZWUge0BsaW5rIGRlYm91bmNlVGltZX1cbiAqIEBzZWUge0BsaW5rIGRlbGF5fVxuICogQHNlZSB7QGxpbmsgc2FtcGxlVGltZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlfVxuICpcbiAqIEBwYXJhbSBkdXJhdGlvbiBUaW1lIHRvIHdhaXQgYmVmb3JlIGVtaXR0aW5nIGFub3RoZXIgdmFsdWUgYWZ0ZXJcbiAqIGVtaXR0aW5nIHRoZSBsYXN0IHZhbHVlLCBtZWFzdXJlZCBpbiBtaWxsaXNlY29uZHMgb3IgdGhlIHRpbWUgdW5pdCBkZXRlcm1pbmVkXG4gKiBpbnRlcm5hbGx5IGJ5IHRoZSBvcHRpb25hbCBgc2NoZWR1bGVyYC5cbiAqIEBwYXJhbSBzY2hlZHVsZXIgVGhlIHtAbGluayBTY2hlZHVsZXJMaWtlfSB0byB1c2UgZm9yXG4gKiBtYW5hZ2luZyB0aGUgdGltZXJzIHRoYXQgaGFuZGxlIHRoZSB0aHJvdHRsaW5nLiBEZWZhdWx0cyB0byB7QGxpbmsgYXN5bmNTY2hlZHVsZXJ9LlxuICogQHBhcmFtIGNvbmZpZyBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGRlZmluZSBgbGVhZGluZ2AgYW5kXG4gKiBgdHJhaWxpbmdgIGJlaGF2aW9yLiBEZWZhdWx0cyB0byBgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogZmFsc2UgfWAuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBwZXJmb3JtcyB0aGUgdGhyb3R0bGVcbiAqIG9wZXJhdGlvbiB0byBsaW1pdCB0aGUgcmF0ZSBvZiBlbWlzc2lvbnMgZnJvbSB0aGUgc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3R0bGVUaW1lPFQ+KFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICBzY2hlZHVsZXI6IFNjaGVkdWxlckxpa2UgPSBhc3luY1NjaGVkdWxlcixcbiAgY29uZmlnPzogVGhyb3R0bGVDb25maWdcbik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIGNvbnN0IGR1cmF0aW9uJCA9IHRpbWVyKGR1cmF0aW9uLCBzY2hlZHVsZXIpO1xuICByZXR1cm4gdGhyb3R0bGUoKCkgPT4gZHVyYXRpb24kLCBjb25maWcpO1xufVxuIiwgImltcG9ydCB7IGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IFNjaGVkdWxlckxpa2UsIE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcblxuLyoqXG4gKiBFbWl0cyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgY3VycmVudCB2YWx1ZSwgYW5kIHRoZSB0aW1lIHRoYXQgaGFzXG4gKiBwYXNzZWQgYmV0d2VlbiBlbWl0dGluZyB0aGUgY3VycmVudCB2YWx1ZSBhbmQgdGhlIHByZXZpb3VzIHZhbHVlLCB3aGljaCBpc1xuICogY2FsY3VsYXRlZCBieSB1c2luZyB0aGUgcHJvdmlkZWQgYHNjaGVkdWxlcmAncyBgbm93KClgIG1ldGhvZCB0byByZXRyaWV2ZVxuICogdGhlIGN1cnJlbnQgdGltZSBhdCBlYWNoIGVtaXNzaW9uLCB0aGVuIGNhbGN1bGF0aW5nIHRoZSBkaWZmZXJlbmNlLiBUaGUgYHNjaGVkdWxlcmBcbiAqIGRlZmF1bHRzIHRvIHtAbGluayBhc3luY1NjaGVkdWxlcn0sIHNvIGJ5IGRlZmF1bHQsIHRoZSBgaW50ZXJ2YWxgIHdpbGwgYmUgaW5cbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+Q29udmVydCBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgaW50byBvbmUgdGhhdFxuICogZW1pdHMgaW5kaWNhdGlvbnMgb2YgdGhlIGFtb3VudCBvZiB0aW1lIGVsYXBzZWQgYmV0d2VlbiB0aG9zZSBlbWlzc2lvbnMuPC9zcGFuPlxuICpcbiAqICFbXSh0aW1lSW50ZXJ2YWwucG5nKVxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBFbWl0IGludGVydmFsIGJldHdlZW4gY3VycmVudCB2YWx1ZSB3aXRoIHRoZSBsYXN0IHZhbHVlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCB0aW1lSW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBzZWNvbmRzID0gaW50ZXJ2YWwoMTAwMCk7XG4gKlxuICogc2Vjb25kc1xuICogICAucGlwZSh0aW1lSW50ZXJ2YWwoKSlcbiAqICAgLnN1YnNjcmliZSh2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSkpO1xuICpcbiAqIC8vIE5PVEU6IFRoZSB2YWx1ZXMgd2lsbCBuZXZlciBiZSB0aGlzIHByZWNpc2UsXG4gKiAvLyBpbnRlcnZhbHMgY3JlYXRlZCB3aXRoIGBpbnRlcnZhbGAgb3IgYHNldEludGVydmFsYFxuICogLy8gYXJlIG5vbi1kZXRlcm1pbmlzdGljLlxuICpcbiAqIC8vIHsgdmFsdWU6IDAsIGludGVydmFsOiAxMDAwIH1cbiAqIC8vIHsgdmFsdWU6IDEsIGludGVydmFsOiAxMDAwIH1cbiAqIC8vIHsgdmFsdWU6IDIsIGludGVydmFsOiAxMDAwIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzY2hlZHVsZXIgU2NoZWR1bGVyIHVzZWQgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWUuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpbmZvcm1hdGlvbiBhYm91dFxuICogdmFsdWUgYW5kIGludGVydmFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZUludGVydmFsPFQ+KHNjaGVkdWxlcjogU2NoZWR1bGVyTGlrZSA9IGFzeW5jU2NoZWR1bGVyKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUaW1lSW50ZXJ2YWw8VD4+IHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBsYXN0ID0gc2NoZWR1bGVyLm5vdygpO1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IHNjaGVkdWxlci5ub3coKTtcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBub3cgLSBsYXN0O1xuICAgICAgICBsYXN0ID0gbm93O1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQobmV3IFRpbWVJbnRlcnZhbCh2YWx1ZSwgaW50ZXJ2YWwpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG59XG5cbi8vIFRPRE8oYmVubGVzaCk6IG1ha2UgdGhpcyBhbiBpbnRlcmZhY2UsIGV4cG9ydCB0aGUgaW50ZXJmYWNlLCBidXQgbm90IHRoZSBpbXBsZW1lbnRlZCBjbGFzcyxcbi8vIHRoZXJlJ3Mgbm8gcmVhc29uIHVzZXJzIHNob3VsZCBiZSBtYW51YWxseSBjcmVhdGluZyB0aGlzIHR5cGUuXG5cbmV4cG9ydCBjbGFzcyBUaW1lSW50ZXJ2YWw8VD4ge1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBkbyBub3QgY29uc3RydWN0IGRpcmVjdGx5LiBXaWxsIGJlIG1hZGUgYW4gaW50ZXJmYWNlIGluIHY4LlxuICAgKi9cbiAgY29uc3RydWN0b3IocHVibGljIHZhbHVlOiBULCBwdWJsaWMgaW50ZXJ2YWw6IG51bWJlcikge31cbn1cbiIsICJpbXBvcnQgeyBhc3luYyB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBpc1ZhbGlkRGF0ZSB9IGZyb20gJy4uL3V0aWwvaXNEYXRlJztcbmltcG9ydCB7IE9ic2VydmFibGVJbnB1dCwgT3BlcmF0b3JGdW5jdGlvbiwgU2NoZWR1bGVyTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHRpbWVvdXQgfSBmcm9tICcuL3RpbWVvdXQnO1xuXG4vKiogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgd2l0aCB7QGxpbmsgdGltZW91dH0uIEluc3RlYWQgb2YgYHRpbWVvdXRXaXRoKHNvbWVEYXRlLCBhJCwgc2NoZWR1bGVyKWAsIHVzZSB0aGUgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqIGB0aW1lb3V0KHsgZmlyc3Q6IHNvbWVEYXRlLCB3aXRoOiAoKSA9PiBhJCwgc2NoZWR1bGVyIH0pYC4gV2lsbCBiZSByZW1vdmVkIGluIHY4LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXRXaXRoPFQsIFI+KGR1ZUJ5OiBEYXRlLCBzd2l0Y2hUbzogT2JzZXJ2YWJsZUlucHV0PFI+LCBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUIHwgUj47XG4vKiogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgd2l0aCB7QGxpbmsgdGltZW91dH0uIEluc3RlYWQgb2YgYHRpbWVvdXRXaXRoKDEwMCwgYSQsIHNjaGVkdWxlcilgLCB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKiAgYHRpbWVvdXQoeyBlYWNoOiAxMDAsIHdpdGg6ICgpID0+IGEkLCBzY2hlZHVsZXIgfSlgLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjguICovXG5leHBvcnQgZnVuY3Rpb24gdGltZW91dFdpdGg8VCwgUj4od2FpdEZvcjogbnVtYmVyLCBzd2l0Y2hUbzogT2JzZXJ2YWJsZUlucHV0PFI+LCBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUIHwgUj47XG5cbi8qKlxuICogV2hlbiB0aGUgcGFzc2VkIHRpbWVzcGFuIGVsYXBzZXMgYmVmb3JlIHRoZSBzb3VyY2UgZW1pdHMgYW55IGdpdmVuIHZhbHVlLCBpdCB3aWxsIHVuc3Vic2NyaWJlIGZyb20gdGhlIHNvdXJjZSxcbiAqIGFuZCBzd2l0Y2ggdGhlIHN1YnNjcmlwdGlvbiB0byBhbm90aGVyIG9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlVzZWQgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IG9ic2VydmFibGUgaWYgeW91ciBzb3VyY2UgaXMgYmVpbmcgc2xvdy48L3NwYW4+XG4gKlxuICogVXNlZnVsIGluIGNhc2VzIHdoZXJlOlxuICpcbiAqIC0gWW91IHdhbnQgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IHNvdXJjZSB0aGF0IG1heSBiZSBmYXN0ZXIuXG4gKiAtIFlvdSB3YW50IHRvIG5vdGlmeSBhIHVzZXIgdGhhdCB0aGUgZGF0YSBzdHJlYW0gaXMgc2xvdy5cbiAqIC0gWW91IHdhbnQgdG8gZW1pdCBhIGN1c3RvbSBlcnJvciByYXRoZXIgdGhhbiB0aGUge0BsaW5rIFRpbWVvdXRFcnJvcn0gZW1pdHRlZFxuICogICBieSB0aGUgZGVmYXVsdCB1c2FnZSBvZiB7QGxpbmsgdGltZW91dH0uXG4gKlxuICogSWYgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBwYXNzZWQgYXMgRGF0ZSBhbmQgdGhlIHRpbWUgb2YgdGhlIERhdGUgYXJyaXZlcyBiZWZvcmUgdGhlIGZpcnN0IHZhbHVlIGFycml2ZXMgZnJvbSB0aGUgc291cmNlLFxuICogaXQgd2lsbCB1bnN1YnNjcmliZSBmcm9tIHRoZSBzb3VyY2UgYW5kIHN3aXRjaCB0aGUgc3Vic2NyaXB0aW9uIHRvIGFub3RoZXIgb2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+VXNlIERhdGUgb2JqZWN0IHRvIHN3aXRjaCB0byBhIGRpZmZlcmVudCBvYnNlcnZhYmxlIGlmIHRoZSBmaXJzdCB2YWx1ZSBkb2Vzbid0IGFycml2ZSBieSBhIHNwZWNpZmljIHRpbWUuPC9zcGFuPlxuICpcbiAqIENhbiBiZSB1c2VkIHRvIHNldCBhIHRpbWVvdXQgb25seSBmb3IgdGhlIGZpcnN0IHZhbHVlLCBob3dldmVyIGl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSB7QGxpbmsgdGltZW91dH0gb3BlcmF0b3Igd2l0aFxuICogdGhlIGBmaXJzdGAgY29uZmlndXJhdGlvbiB0byBnZXQgdGhlIHNhbWUgZWZmZWN0LlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogRmFsbGJhY2sgdG8gYSBmYXN0ZXIgb2JzZXJ2YWJsZVxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbnRlcnZhbCwgdGltZW91dFdpdGggfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBzbG93JCA9IGludGVydmFsKDEwMDApO1xuICogY29uc3QgZmFzdGVyJCA9IGludGVydmFsKDUwMCk7XG4gKlxuICogc2xvdyRcbiAqICAgLnBpcGUodGltZW91dFdpdGgoOTAwLCBmYXN0ZXIkKSlcbiAqICAgLnN1YnNjcmliZShjb25zb2xlLmxvZyk7XG4gKiBgYGBcbiAqXG4gKiBFbWl0IHlvdXIgb3duIGN1c3RvbSB0aW1lb3V0IGVycm9yXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGludGVydmFsLCB0aW1lb3V0V2l0aCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuICpcbiAqIGNsYXNzIEN1c3RvbVRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAqICAgY29uc3RydWN0b3IoKSB7XG4gKiAgICAgc3VwZXIoJ0l0IHdhcyB0b28gc2xvdycpO1xuICogICAgIHRoaXMubmFtZSA9ICdDdXN0b21UaW1lb3V0RXJyb3InO1xuICogICB9XG4gKiB9XG4gKlxuICogY29uc3Qgc2xvdyQgPSBpbnRlcnZhbCgxMDAwKTtcbiAqXG4gKiBzbG93JFxuICogICAucGlwZSh0aW1lb3V0V2l0aCg5MDAsIHRocm93RXJyb3IoKCkgPT4gbmV3IEN1c3RvbVRpbWVvdXRFcnJvcigpKSkpXG4gKiAgIC5zdWJzY3JpYmUoe1xuICogICAgIGVycm9yOiBlcnIgPT4gY29uc29sZS5lcnJvcihlcnIubWVzc2FnZSlcbiAqICAgfSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayB0aW1lb3V0fVxuICpcbiAqIEBwYXJhbSBkdWUgV2hlbiBwYXNzZWQgYSBudW1iZXIsIHVzZWQgYXMgdGhlIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgYWxsb3dlZCBiZXR3ZWVuIGVhY2ggdmFsdWUgZnJvbSB0aGUgc291cmNlIGJlZm9yZSB0aW1lb3V0XG4gKiBpcyB0cmlnZ2VyZWQuIFdoZW4gcGFzc2VkIGEgRGF0ZSwgdXNlZCBhcyB0aGUgZXhhY3QgdGltZSBhdCB3aGljaCB0aGUgdGltZW91dCB3aWxsIGJlIHRyaWdnZXJlZCBpZiB0aGUgZmlyc3QgdmFsdWUgZG9lcyBub3QgYXJyaXZlLlxuICogQHBhcmFtIHdpdGhPYnNlcnZhYmxlIFRoZSBvYnNlcnZhYmxlIHRvIHN3aXRjaCB0byB3aGVuIHRpbWVvdXQgb2NjdXJzLlxuICogQHBhcmFtIHNjaGVkdWxlciBUaGUgc2NoZWR1bGVyIHRvIHVzZSB3aXRoIHRpbWUtcmVsYXRlZCBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIG9wZXJhdG9yLiBEZWZhdWx0cyB0byB7QGxpbmsgYXN5bmNTY2hlZHVsZXJ9XG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBtaXJyb3JzIGJlaGF2aW91ciBvZiB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlLCB1bmxlc3MgdGltZW91dCBoYXBwZW5zIHdoZW4gaXQgc3RhcnRzIGVtaXR0aW5nIHZhbHVlc1xuICogZnJvbSB0aGUgYE9ic2VydmFibGVJbnB1dGAgcGFzc2VkIGFzIGEgc2Vjb25kIHBhcmFtZXRlci5cbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIHdpdGgge0BsaW5rIHRpbWVvdXR9LiBJbnN0ZWFkIG9mIGB0aW1lb3V0V2l0aCgxMDAsIGEkLCBzY2hlZHVsZXIpYCwgdXNlIHtAbGluayB0aW1lb3V0fSB3aXRoIHRoZSBjb25maWd1cmF0aW9uXG4gKiBvYmplY3Q6IGB0aW1lb3V0KHsgZWFjaDogMTAwLCB3aXRoOiAoKSA9PiBhJCwgc2NoZWR1bGVyIH0pYC4gSW5zdGVhZCBvZiBgdGltZW91dFdpdGgoc29tZURhdGUsIGEkLCBzY2hlZHVsZXIpYCwgdXNlIHtAbGluayB0aW1lb3V0fVxuICogd2l0aCB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6IGB0aW1lb3V0KHsgZmlyc3Q6IHNvbWVEYXRlLCB3aXRoOiAoKSA9PiBhJCwgc2NoZWR1bGVyIH0pYC4gV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZW91dFdpdGg8VCwgUj4oXG4gIGR1ZTogbnVtYmVyIHwgRGF0ZSxcbiAgd2l0aE9ic2VydmFibGU6IE9ic2VydmFibGVJbnB1dDxSPixcbiAgc2NoZWR1bGVyPzogU2NoZWR1bGVyTGlrZVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBUIHwgUj4ge1xuICBsZXQgZmlyc3Q6IG51bWJlciB8IERhdGUgfCB1bmRlZmluZWQ7XG4gIGxldCBlYWNoOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBfd2l0aDogKCkgPT4gT2JzZXJ2YWJsZUlucHV0PFI+O1xuICBzY2hlZHVsZXIgPSBzY2hlZHVsZXIgPz8gYXN5bmM7XG5cbiAgaWYgKGlzVmFsaWREYXRlKGR1ZSkpIHtcbiAgICBmaXJzdCA9IGR1ZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZHVlID09PSAnbnVtYmVyJykge1xuICAgIGVhY2ggPSBkdWU7XG4gIH1cblxuICBpZiAod2l0aE9ic2VydmFibGUpIHtcbiAgICBfd2l0aCA9ICgpID0+IHdpdGhPYnNlcnZhYmxlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9ic2VydmFibGUgcHJvdmlkZWQgdG8gc3dpdGNoIHRvJyk7XG4gIH1cblxuICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAvLyBFbnN1cmUgdGltZW91dCB3YXMgcHJvdmlkZWQgYXQgcnVudGltZS5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICB9XG5cbiAgcmV0dXJuIHRpbWVvdXQ8VCwgT2JzZXJ2YWJsZUlucHV0PFI+Pih7XG4gICAgZmlyc3QsXG4gICAgZWFjaCxcbiAgICBzY2hlZHVsZXIsXG4gICAgd2l0aDogX3dpdGgsXG4gIH0pO1xufVxuIiwgImltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24sIFRpbWVzdGFtcFByb3ZpZGVyLCBUaW1lc3RhbXAgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkYXRlVGltZXN0YW1wUHJvdmlkZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvZGF0ZVRpbWVzdGFtcFByb3ZpZGVyJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJy4vbWFwJztcblxuLyoqXG4gKiBBdHRhY2hlcyBhIHRpbWVzdGFtcCB0byBlYWNoIGl0ZW0gZW1pdHRlZCBieSBhbiBvYnNlcnZhYmxlIGluZGljYXRpbmcgd2hlbiBpdCB3YXMgZW1pdHRlZFxuICpcbiAqIFRoZSBgdGltZXN0YW1wYCBvcGVyYXRvciBtYXBzIHRoZSAqc291cmNlKiBvYnNlcnZhYmxlIHN0cmVhbSB0byBhbiBvYmplY3Qgb2YgdHlwZVxuICogYHt2YWx1ZTogVCwgdGltZXN0YW1wOiBSfWAuIFRoZSBwcm9wZXJ0aWVzIGFyZSBnZW5lcmljYWxseSB0eXBlZC4gVGhlIGB2YWx1ZWAgcHJvcGVydHkgY29udGFpbnMgdGhlIHZhbHVlXG4gKiBhbmQgdHlwZSBvZiB0aGUgKnNvdXJjZSogb2JzZXJ2YWJsZS4gVGhlIGB0aW1lc3RhbXBgIGlzIGdlbmVyYXRlZCBieSB0aGUgc2NoZWR1bGVycyBgbm93YCBmdW5jdGlvbi4gQnlcbiAqIGRlZmF1bHQsIGl0IHVzZXMgdGhlIGBhc3luY1NjaGVkdWxlcmAgd2hpY2ggc2ltcGx5IHJldHVybnMgYERhdGUubm93KClgIChtaWxsaXNlY29uZHMgc2luY2UgMTk3MC8wMS8wMVxuICogMDA6MDA6MDA6MDAwKSBhbmQgdGhlcmVmb3JlIGlzIG9mIHR5cGUgYG51bWJlcmAuXG4gKlxuICogIVtdKHRpbWVzdGFtcC5wbmcpXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIEluIHRoaXMgZXhhbXBsZSB0aGVyZSBpcyBhIHRpbWVzdGFtcCBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnQncyBjbGljayBldmVudHNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCB0aW1lc3RhbXAgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja1dpdGhUaW1lc3RhbXAgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnBpcGUoXG4gKiAgIHRpbWVzdGFtcCgpXG4gKiApO1xuICpcbiAqIC8vIEVtaXRzIGRhdGEgb2YgdHlwZSB7IHZhbHVlOiBQb2ludGVyRXZlbnQsIHRpbWVzdGFtcDogbnVtYmVyIH1cbiAqIGNsaWNrV2l0aFRpbWVzdGFtcC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gKiAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdGltZXN0YW1wUHJvdmlkZXIgQW4gb2JqZWN0IHdpdGggYSBgbm93KClgIG1ldGhvZCB1c2VkIHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAuXG4gKiBAcmV0dXJuIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBhdHRhY2hlcyBhIHRpbWVzdGFtcCB0b1xuICogZWFjaCBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGluZGljYXRpbmcgd2hlbiBpdCB3YXMgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVzdGFtcDxUPih0aW1lc3RhbXBQcm92aWRlcjogVGltZXN0YW1wUHJvdmlkZXIgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIpOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFRpbWVzdGFtcDxUPj4ge1xuICByZXR1cm4gbWFwKCh2YWx1ZTogVCkgPT4gKHsgdmFsdWUsIHRpbWVzdGFtcDogdGltZXN0YW1wUHJvdmlkZXIubm93KCkgfSkpO1xufVxuIiwgImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGVJbnB1dCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWwvbm9vcCc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5cbi8qKlxuICogQnJhbmNoIG91dCB0aGUgc291cmNlIE9ic2VydmFibGUgdmFsdWVzIGFzIGEgbmVzdGVkIE9ic2VydmFibGUgd2hlbmV2ZXJcbiAqIGB3aW5kb3dCb3VuZGFyaWVzYCBlbWl0cy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBidWZmZXJ9LCBidXQgZW1pdHMgYSBuZXN0ZWQgT2JzZXJ2YWJsZVxuICogaW5zdGVhZCBvZiBhbiBhcnJheS48L3NwYW4+XG4gKlxuICogIVtdKHdpbmRvdy5wbmcpXG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2luZG93cyBvZiBpdGVtcyBpdCBjb2xsZWN0cyBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuIFRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBlbWl0cyBjb25uZWN0ZWQsIG5vbi1vdmVybGFwcGluZ1xuICogd2luZG93cy4gSXQgZW1pdHMgdGhlIGN1cnJlbnQgd2luZG93IGFuZCBvcGVucyBhIG5ldyBvbmUgd2hlbmV2ZXIgdGhlXG4gKiBgd2luZG93Qm91bmRhcmllc2AgZW1pdHMgYW4gaXRlbS4gYHdpbmRvd0JvdW5kYXJpZXNgIGNhbiBiZSBhbnkgdHlwZSB0aGF0XG4gKiBgT2JzZXJ2YWJsZUlucHV0YCBhY2NlcHRzLiBJdCBpbnRlcm5hbGx5IGdldHMgY29udmVydGVkIHRvIGFuIE9ic2VydmFibGUuXG4gKiBCZWNhdXNlIGVhY2ggd2luZG93IGlzIGFuIE9ic2VydmFibGUsIHRoZSBvdXRwdXQgaXMgYSBoaWdoZXItb3JkZXIgT2JzZXJ2YWJsZS5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogSW4gZXZlcnkgd2luZG93IG9mIDEgc2Vjb25kIGVhY2gsIGVtaXQgYXQgbW9zdCAyIGNsaWNrIGV2ZW50c1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIGludGVydmFsLCB3aW5kb3csIG1hcCwgdGFrZSwgbWVyZ2VBbGwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3Qgc2VjID0gaW50ZXJ2YWwoMTAwMCk7XG4gKiBjb25zdCByZXN1bHQgPSBjbGlja3MucGlwZShcbiAqICAgd2luZG93KHNlYyksXG4gKiAgIG1hcCh3aW4gPT4gd2luLnBpcGUodGFrZSgyKSkpLCAvLyB0YWtlIGF0IG1vc3QgMiBlbWlzc2lvbnMgZnJvbSBlYWNoIHdpbmRvd1xuICogICBtZXJnZUFsbCgpICAgICAgICAgICAgICAgICAgICAgLy8gZmxhdHRlbiB0aGUgT2JzZXJ2YWJsZS1vZi1PYnNlcnZhYmxlc1xuICogKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayB3aW5kb3dDb3VudH1cbiAqIEBzZWUge0BsaW5rIHdpbmRvd1RpbWV9XG4gKiBAc2VlIHtAbGluayB3aW5kb3dUb2dnbGV9XG4gKiBAc2VlIHtAbGluayB3aW5kb3dXaGVufVxuICogQHNlZSB7QGxpbmsgYnVmZmVyfVxuICpcbiAqIEBwYXJhbSB3aW5kb3dCb3VuZGFyaWVzIEFuIGBPYnNlcnZhYmxlSW5wdXRgIHRoYXQgY29tcGxldGVzIHRoZVxuICogcHJldmlvdXMgd2luZG93IGFuZCBzdGFydHMgYSBuZXcgd2luZG93LlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIG9mIHdpbmRvd3MsIHdoaWNoIGFyZVxuICogT2JzZXJ2YWJsZXMgZW1pdHRpbmcgdmFsdWVzIG9mIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvdzxUPih3aW5kb3dCb3VuZGFyaWVzOiBPYnNlcnZhYmxlSW5wdXQ8YW55Pik6IE9wZXJhdG9yRnVuY3Rpb248VCwgT2JzZXJ2YWJsZTxUPj4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IHdpbmRvd1N1YmplY3Q6IFN1YmplY3Q8VD4gPSBuZXcgU3ViamVjdDxUPigpO1xuXG4gICAgc3Vic2NyaWJlci5uZXh0KHdpbmRvd1N1YmplY3QuYXNPYnNlcnZhYmxlKCkpO1xuXG4gICAgY29uc3QgZXJyb3JIYW5kbGVyID0gKGVycjogYW55KSA9PiB7XG4gICAgICB3aW5kb3dTdWJqZWN0LmVycm9yKGVycik7XG4gICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgfTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBvdXIgc291cmNlXG4gICAgc291cmNlLnN1YnNjcmliZShcbiAgICAgIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihcbiAgICAgICAgc3Vic2NyaWJlcixcbiAgICAgICAgKHZhbHVlKSA9PiB3aW5kb3dTdWJqZWN0Py5uZXh0KHZhbHVlKSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHdpbmRvd1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9ySGFuZGxlclxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gdGhlIHdpbmRvdyBib3VuZGFyaWVzLlxuICAgIGlubmVyRnJvbSh3aW5kb3dCb3VuZGFyaWVzKS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB3aW5kb3dTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KCh3aW5kb3dTdWJqZWN0ID0gbmV3IFN1YmplY3QoKSkpO1xuICAgICAgICB9LFxuICAgICAgICBub29wLFxuICAgICAgICBlcnJvckhhbmRsZXJcbiAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIFVuc3Vic2NyaWJpbmcgdGhlIHN1YmplY3QgZW5zdXJlcyB0aGF0IGFueW9uZSB3aG8gaGFzIGNhcHR1cmVkXG4gICAgICAvLyBhIHJlZmVyZW5jZSB0byB0aGlzIHdpbmRvdyB0aGF0IHRyaWVzIHRvIHVzZSBpdCBhZnRlciBpdCBjYW5cbiAgICAgIC8vIG5vIGxvbmdlciBnZXQgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSB3aWxsIGdldCBhbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvci5cbiAgICAgIHdpbmRvd1N1YmplY3Q/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB3aW5kb3dTdWJqZWN0ID0gbnVsbCE7XG4gICAgfTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXN5bmMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IE9ic2VydmVyLCBPcGVyYXRvckZ1bmN0aW9uLCBTY2hlZHVsZXJMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBhcnJSZW1vdmUgfSBmcm9tICcuLi91dGlsL2FyclJlbW92ZSc7XG5pbXBvcnQgeyBwb3BTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgZXhlY3V0ZVNjaGVkdWxlIH0gZnJvbSAnLi4vdXRpbC9leGVjdXRlU2NoZWR1bGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gd2luZG93VGltZTxUPih3aW5kb3dUaW1lU3BhbjogbnVtYmVyLCBzY2hlZHVsZXI/OiBTY2hlZHVsZXJMaWtlKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZhYmxlPFQ+PjtcbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dUaW1lPFQ+KFxuICB3aW5kb3dUaW1lU3BhbjogbnVtYmVyLFxuICB3aW5kb3dDcmVhdGlvbkludGVydmFsOiBudW1iZXIsXG4gIHNjaGVkdWxlcj86IFNjaGVkdWxlckxpa2Vcbik6IE9wZXJhdG9yRnVuY3Rpb248VCwgT2JzZXJ2YWJsZTxUPj47XG5leHBvcnQgZnVuY3Rpb24gd2luZG93VGltZTxUPihcbiAgd2luZG93VGltZVNwYW46IG51bWJlcixcbiAgd2luZG93Q3JlYXRpb25JbnRlcnZhbDogbnVtYmVyIHwgbnVsbCB8IHZvaWQsXG4gIG1heFdpbmRvd1NpemU6IG51bWJlcixcbiAgc2NoZWR1bGVyPzogU2NoZWR1bGVyTGlrZVxuKTogT3BlcmF0b3JGdW5jdGlvbjxULCBPYnNlcnZhYmxlPFQ+PjtcblxuLyoqXG4gKiBCcmFuY2ggb3V0IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB2YWx1ZXMgYXMgYSBuZXN0ZWQgT2JzZXJ2YWJsZSBwZXJpb2RpY2FsbHlcbiAqIGluIHRpbWUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MgbGlrZSB7QGxpbmsgYnVmZmVyVGltZX0sIGJ1dCBlbWl0cyBhIG5lc3RlZFxuICogT2JzZXJ2YWJsZSBpbnN0ZWFkIG9mIGFuIGFycmF5Ljwvc3Bhbj5cbiAqXG4gKiAhW10od2luZG93VGltZS5wbmcpXG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2luZG93cyBvZiBpdGVtcyBpdCBjb2xsZWN0cyBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuIFRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBzdGFydHMgYSBuZXcgd2luZG93IHBlcmlvZGljYWxseSwgYXNcbiAqIGRldGVybWluZWQgYnkgdGhlIGB3aW5kb3dDcmVhdGlvbkludGVydmFsYCBhcmd1bWVudC4gSXQgZW1pdHMgZWFjaCB3aW5kb3dcbiAqIGFmdGVyIGEgZml4ZWQgdGltZXNwYW4sIHNwZWNpZmllZCBieSB0aGUgYHdpbmRvd1RpbWVTcGFuYCBhcmd1bWVudC4gV2hlbiB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlIGNvbXBsZXRlcyBvciBlbmNvdW50ZXJzIGFuIGVycm9yLCB0aGUgb3V0cHV0IE9ic2VydmFibGVcbiAqIGVtaXRzIHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgcHJvcGFnYXRlcyB0aGUgbm90aWZpY2F0aW9uIGZyb20gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZS4gSWYgYHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWxgIGlzIG5vdCBwcm92aWRlZCwgdGhlIG91dHB1dFxuICogT2JzZXJ2YWJsZSBzdGFydHMgYSBuZXcgd2luZG93IHdoZW4gdGhlIHByZXZpb3VzIHdpbmRvdyBvZiBkdXJhdGlvblxuICogYHdpbmRvd1RpbWVTcGFuYCBjb21wbGV0ZXMuIElmIGBtYXhXaW5kb3dDb3VudGAgaXMgcHJvdmlkZWQsIGVhY2ggd2luZG93XG4gKiB3aWxsIGVtaXQgYXQgbW9zdCBmaXhlZCBudW1iZXIgb2YgdmFsdWVzLiBXaW5kb3cgd2lsbCBjb21wbGV0ZSBpbW1lZGlhdGVseVxuICogYWZ0ZXIgZW1pdHRpbmcgbGFzdCB2YWx1ZSBhbmQgbmV4dCBvbmUgc3RpbGwgd2lsbCBvcGVuIGFzIHNwZWNpZmllZCBieVxuICogYHdpbmRvd1RpbWVTcGFuYCBhbmQgYHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWxgIGFyZ3VtZW50cy5cbiAqXG4gKiAjIyBFeGFtcGxlc1xuICpcbiAqIEluIGV2ZXJ5IHdpbmRvdyBvZiAxIHNlY29uZCBlYWNoLCBlbWl0IGF0IG1vc3QgMiBjbGljayBldmVudHNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZnJvbUV2ZW50LCB3aW5kb3dUaW1lLCBtYXAsIHRha2UsIG1lcmdlQWxsIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGNsaWNrcy5waXBlKFxuICogICB3aW5kb3dUaW1lKDEwMDApLFxuICogICBtYXAod2luID0+IHdpbi5waXBlKHRha2UoMikpKSwgLy8gdGFrZSBhdCBtb3N0IDIgZW1pc3Npb25zIGZyb20gZWFjaCB3aW5kb3dcbiAqICAgbWVyZ2VBbGwoKSAgICAgICAgICAgICAgICAgICAgIC8vIGZsYXR0ZW4gdGhlIE9ic2VydmFibGUtb2YtT2JzZXJ2YWJsZXNcbiAqICk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogRXZlcnkgNSBzZWNvbmRzIHN0YXJ0IGEgd2luZG93IDEgc2Vjb25kIGxvbmcsIGFuZCBlbWl0IGF0IG1vc3QgMiBjbGljayBldmVudHMgcGVyIHdpbmRvd1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIHdpbmRvd1RpbWUsIG1hcCwgdGFrZSwgbWVyZ2VBbGwgfSBmcm9tICdyeGpzJztcbiAqXG4gKiBjb25zdCBjbGlja3MgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3QgcmVzdWx0ID0gY2xpY2tzLnBpcGUoXG4gKiAgIHdpbmRvd1RpbWUoMTAwMCwgNTAwMCksXG4gKiAgIG1hcCh3aW4gPT4gd2luLnBpcGUodGFrZSgyKSkpLCAvLyB0YWtlIGF0IG1vc3QgMiBlbWlzc2lvbnMgZnJvbSBlYWNoIHdpbmRvd1xuICogICBtZXJnZUFsbCgpICAgICAgICAgICAgICAgICAgICAgLy8gZmxhdHRlbiB0aGUgT2JzZXJ2YWJsZS1vZi1PYnNlcnZhYmxlc1xuICogKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiBgYGBcbiAqXG4gKiBTYW1lIGFzIGV4YW1wbGUgYWJvdmUgYnV0IHdpdGggYG1heFdpbmRvd0NvdW50YCBpbnN0ZWFkIG9mIGB0YWtlYFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIHdpbmRvd1RpbWUsIG1lcmdlQWxsIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGNsaWNrcy5waXBlKFxuICogICB3aW5kb3dUaW1lKDEwMDAsIDUwMDAsIDIpLCAvLyB0YWtlIGF0IG1vc3QgMiBlbWlzc2lvbnMgZnJvbSBlYWNoIHdpbmRvd1xuICogICBtZXJnZUFsbCgpICAgICAgICAgICAgICAgICAvLyBmbGF0dGVuIHRoZSBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzXG4gKiApO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIHdpbmRvd31cbiAqIEBzZWUge0BsaW5rIHdpbmRvd0NvdW50fVxuICogQHNlZSB7QGxpbmsgd2luZG93VG9nZ2xlfVxuICogQHNlZSB7QGxpbmsgd2luZG93V2hlbn1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlclRpbWV9XG4gKlxuICogQHBhcmFtIHdpbmRvd1RpbWVTcGFuIFRoZSBhbW91bnQgb2YgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0byBmaWxsIGVhY2ggd2luZG93LlxuICogQHBhcmFtIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgVGhlIGludGVydmFsIGF0IHdoaWNoIHRvIHN0YXJ0IG5ld1xuICogd2luZG93cy5cbiAqIEBwYXJhbSBtYXhXaW5kb3dTaXplIE1heCBudW1iZXIgb2ZcbiAqIHZhbHVlcyBlYWNoIHdpbmRvdyBjYW4gZW1pdCBiZWZvcmUgY29tcGxldGlvbi5cbiAqIEBwYXJhbSBzY2hlZHVsZXIgVGhlIHNjaGVkdWxlciBvbiB3aGljaCB0byBzY2hlZHVsZSB0aGVcbiAqIGludGVydmFscyB0aGF0IGRldGVybWluZSB3aW5kb3cgYm91bmRhcmllcy5cbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiB3aW5kb3dzLCB3aGljaCBpbiB0dXJuIGFyZVxuICogT2JzZXJ2YWJsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dUaW1lPFQ+KHdpbmRvd1RpbWVTcGFuOiBudW1iZXIsIC4uLm90aGVyQXJnczogYW55W10pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIE9ic2VydmFibGU8VD4+IHtcbiAgY29uc3Qgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKG90aGVyQXJncykgPz8gYXN5bmNTY2hlZHVsZXI7XG4gIGNvbnN0IHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgPSAob3RoZXJBcmdzWzBdIGFzIG51bWJlcikgPz8gbnVsbDtcbiAgY29uc3QgbWF4V2luZG93U2l6ZSA9IChvdGhlckFyZ3NbMV0gYXMgbnVtYmVyKSB8fCBJbmZpbml0eTtcblxuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgLy8gVGhlIGFjdGl2ZSB3aW5kb3dzLCB0aGVpciByZWxhdGVkIHN1YnNjcmlwdGlvbnMsIGFuZCByZW1vdmFsIGZ1bmN0aW9ucy5cbiAgICBsZXQgd2luZG93UmVjb3JkczogV2luZG93UmVjb3JkPFQ+W10gfCBudWxsID0gW107XG4gICAgLy8gSWYgdHJ1ZSwgaXQgbWVhbnMgdGhhdCBldmVyeSB0aW1lIHdlIGNsb3NlIGEgd2luZG93LCB3ZSB3YW50IHRvIHN0YXJ0IGEgbmV3IHdpbmRvdy5cbiAgICAvLyBUaGlzIGlzIG9ubHkgcmVhbGx5IHVzZWQgZm9yIHdoZW4gKmp1c3QqIHRoZSB0aW1lIHNwYW4gaXMgcGFzc2VkLlxuICAgIGxldCByZXN0YXJ0T25DbG9zZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgY2xvc2VXaW5kb3cgPSAocmVjb3JkOiB7IHdpbmRvdzogU3ViamVjdDxUPjsgc3ViczogU3Vic2NyaXB0aW9uIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgd2luZG93LCBzdWJzIH0gPSByZWNvcmQ7XG4gICAgICB3aW5kb3cuY29tcGxldGUoKTtcbiAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgIGFyclJlbW92ZSh3aW5kb3dSZWNvcmRzLCByZWNvcmQpO1xuICAgICAgcmVzdGFydE9uQ2xvc2UgJiYgc3RhcnRXaW5kb3coKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGV2ZXJ5IHRpbWUgd2Ugc3RhcnQgYSBuZXcgd2luZG93LiBUaGlzIGFsc28gZG9lc1xuICAgICAqIHRoZSB3b3JrIG9mIHNjaGVkdWxpbmcgdGhlIGpvYiB0byBjbG9zZSB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIGNvbnN0IHN0YXJ0V2luZG93ID0gKCkgPT4ge1xuICAgICAgaWYgKHdpbmRvd1JlY29yZHMpIHtcbiAgICAgICAgY29uc3Qgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgc3Vic2NyaWJlci5hZGQoc3Vicyk7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IG5ldyBTdWJqZWN0PFQ+KCk7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHtcbiAgICAgICAgICB3aW5kb3csXG4gICAgICAgICAgc3VicyxcbiAgICAgICAgICBzZWVuOiAwLFxuICAgICAgICB9O1xuICAgICAgICB3aW5kb3dSZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHdpbmRvdy5hc09ic2VydmFibGUoKSk7XG4gICAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzLCBzY2hlZHVsZXIsICgpID0+IGNsb3NlV2luZG93KHJlY29yZCksIHdpbmRvd1RpbWVTcGFuKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgd2luZG93Q3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7XG4gICAgICAvLyBUaGUgdXNlciBwYXNzZWQgYm90aCBhIHdpbmRvd1RpbWVTcGFuIChyZXF1aXJlZCksIGFuZCBhIGNyZWF0aW9uIGludGVydmFsXG4gICAgICAvLyBUaGF0IG1lYW5zIHdlIG5lZWQgdG8gc3RhcnQgbmV3IHdpbmRvdyBvbiB0aGUgaW50ZXJ2YWwsIGFuZCB0aG9zZSB3aW5kb3dzIG5lZWRcbiAgICAgIC8vIHRvIHdhaXQgdGhlIHJlcXVpcmVkIHRpbWUgc3BhbiBiZWZvcmUgY29tcGxldGluZy5cbiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIHN0YXJ0V2luZG93LCB3aW5kb3dDcmVhdGlvbkludGVydmFsLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdGFydE9uQ2xvc2UgPSB0cnVlO1xuICAgIH1cblxuICAgIHN0YXJ0V2luZG93KCk7XG5cbiAgICAvKipcbiAgICAgKiBXZSBuZWVkIHRvIGxvb3Agb3ZlciBhIGNvcHkgb2YgdGhlIHdpbmRvdyByZWNvcmRzIHNldmVyYWwgdGltZXMgaW4gdGhpcyBvcGVyYXRvci5cbiAgICAgKiBUaGlzIGlzIHRvIHNhdmUgYnl0ZXMgb3ZlciB0aGUgd2lyZSBtb3JlIHRoYW4gYW55dGhpbmcuXG4gICAgICogVGhlIHJlYXNvbiB3ZSBjb3B5IHRoZSBhcnJheSBpcyB0aGF0IHJlZW50cmFudCBjb2RlIGNvdWxkIG11dGF0ZSB0aGUgYXJyYXkgd2hpbGVcbiAgICAgKiB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIgaXQuXG4gICAgICovXG4gICAgY29uc3QgbG9vcCA9IChjYjogKHJlY29yZDogV2luZG93UmVjb3JkPFQ+KSA9PiB2b2lkKSA9PiB3aW5kb3dSZWNvcmRzIS5zbGljZSgpLmZvckVhY2goY2IpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBub3RpZnkgYWxsIG9mIHRoZSB3aW5kb3dzIGFuZCB0aGUgc3Vic2NyaWJlciBpbiB0aGUgc2FtZSB3YXlcbiAgICAgKiBpbiB0aGUgZXJyb3IgYW5kIGNvbXBsZXRlIGhhbmRsZXJzLlxuICAgICAqL1xuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjYjogKGNvbnN1bWVyOiBPYnNlcnZlcjxhbnk+KSA9PiB2b2lkKSA9PiB7XG4gICAgICBsb29wKCh7IHdpbmRvdyB9KSA9PiBjYih3aW5kb3cpKTtcbiAgICAgIGNiKHN1YnNjcmliZXIpO1xuICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgIH07XG5cbiAgICBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgICAodmFsdWU6IFQpID0+IHtcbiAgICAgICAgICAvLyBOb3RpZnkgYWxsIHdpbmRvd3Mgb2YgdGhlIHZhbHVlLlxuICAgICAgICAgIGxvb3AoKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgcmVjb3JkLndpbmRvdy5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIC8vIElmIHRoZSB3aW5kb3cgaXMgb3ZlciB0aGUgbWF4IHNpemUsIHdlIG5lZWQgdG8gY2xvc2UgaXQuXG4gICAgICAgICAgICBtYXhXaW5kb3dTaXplIDw9ICsrcmVjb3JkLnNlZW4gJiYgY2xvc2VXaW5kb3cocmVjb3JkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQ29tcGxldGUgdGhlIHdpbmRvd3MgYW5kIHRoZSBkb3duc3RyZWFtIHN1YnNjcmliZXIgYW5kIGNsZWFuIHVwLlxuICAgICAgICAoKSA9PiB0ZXJtaW5hdGUoKGNvbnN1bWVyKSA9PiBjb25zdW1lci5jb21wbGV0ZSgpKSxcbiAgICAgICAgLy8gTm90aWZ5IHRoZSB3aW5kb3dzIGFuZCB0aGUgZG93bnN0cmVhbSBzdWJzY3JpYmVyIG9mIHRoZSBlcnJvciBhbmQgY2xlYW4gdXAuXG4gICAgICAgIChlcnIpID0+IHRlcm1pbmF0ZSgoY29uc3VtZXIpID0+IGNvbnN1bWVyLmVycm9yKGVycikpXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIEFkZGl0aW9uYWwgZmluYWxpemF0aW9uLiBUaGlzIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlXG4gICAgLy8gZGVzdGluYXRpb24gdGVhcnMgZG93bi4gT3RoZXIgZmluYWxpemF0aW9ucyBhcmUgcmVnaXN0ZXJlZCBpbXBsaWNpdGx5XG4gICAgLy8gYWJvdmUgdmlhIHN1YnNjcmlwdGlvbi5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBpcyByZWxlYXNlZC5cbiAgICAgIHdpbmRvd1JlY29yZHMgPSBudWxsITtcbiAgICB9O1xuICB9KTtcbn1cblxuaW50ZXJmYWNlIFdpbmRvd1JlY29yZDxUPiB7XG4gIHNlZW46IG51bWJlcjtcbiAgd2luZG93OiBTdWJqZWN0PFQ+O1xuICBzdWJzOiBTdWJzY3JpcHRpb247XG59XG4iLCAiaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0LCBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5cbi8qKlxuICogQnJhbmNoIG91dCB0aGUgc291cmNlIE9ic2VydmFibGUgdmFsdWVzIGFzIGEgbmVzdGVkIE9ic2VydmFibGUgdXNpbmcgYVxuICogZmFjdG9yeSBmdW5jdGlvbiBvZiBjbG9zaW5nIE9ic2VydmFibGVzIHRvIGRldGVybWluZSB3aGVuIHRvIHN0YXJ0IGEgbmV3XG4gKiB3aW5kb3cuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MgbGlrZSB7QGxpbmsgYnVmZmVyV2hlbn0sIGJ1dCBlbWl0cyBhIG5lc3RlZFxuICogT2JzZXJ2YWJsZSBpbnN0ZWFkIG9mIGFuIGFycmF5Ljwvc3Bhbj5cbiAqXG4gKiAhW10od2luZG93V2hlbi5wbmcpXG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2luZG93cyBvZiBpdGVtcyBpdCBjb2xsZWN0cyBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuIFRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBlbWl0cyBjb25uZWN0ZWQsIG5vbi1vdmVybGFwcGluZyB3aW5kb3dzLlxuICogSXQgZW1pdHMgdGhlIGN1cnJlbnQgd2luZG93IGFuZCBvcGVucyBhIG5ldyBvbmUgd2hlbmV2ZXIgdGhlIE9ic2VydmFibGVcbiAqIHByb2R1Y2VkIGJ5IHRoZSBzcGVjaWZpZWQgYGNsb3NpbmdTZWxlY3RvcmAgZnVuY3Rpb24gZW1pdHMgYW4gaXRlbS4gVGhlIGZpcnN0XG4gKiB3aW5kb3cgaXMgb3BlbmVkIGltbWVkaWF0ZWx5IHdoZW4gc3Vic2NyaWJpbmcgdG8gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBFbWl0IG9ubHkgdGhlIGZpcnN0IHR3byBjbGlja3MgZXZlbnRzIGluIGV2ZXJ5IHdpbmRvdyBvZiBbMS01XSByYW5kb20gc2Vjb25kc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmcm9tRXZlbnQsIHdpbmRvd1doZW4sIGludGVydmFsLCBtYXAsIHRha2UsIG1lcmdlQWxsIH0gZnJvbSAncnhqcyc7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGNsaWNrcy5waXBlKFxuICogICB3aW5kb3dXaGVuKCgpID0+IGludGVydmFsKDEwMDAgKyBNYXRoLnJhbmRvbSgpICogNDAwMCkpLFxuICogICBtYXAod2luID0+IHdpbi5waXBlKHRha2UoMikpKSwgLy8gdGFrZSBhdCBtb3N0IDIgZW1pc3Npb25zIGZyb20gZWFjaCB3aW5kb3dcbiAqICAgbWVyZ2VBbGwoKSAgICAgICAgICAgICAgICAgICAgIC8vIGZsYXR0ZW4gdGhlIE9ic2VydmFibGUtb2YtT2JzZXJ2YWJsZXNcbiAqICk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgd2luZG93fVxuICogQHNlZSB7QGxpbmsgd2luZG93Q291bnR9XG4gKiBAc2VlIHtAbGluayB3aW5kb3dUaW1lfVxuICogQHNlZSB7QGxpbmsgd2luZG93VG9nZ2xlfVxuICogQHNlZSB7QGxpbmsgYnVmZmVyV2hlbn1cbiAqXG4gKiBAcGFyYW0gY2xvc2luZ1NlbGVjdG9yIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBubyBhcmd1bWVudHMgYW5kIHJldHVybnMgYW5cbiAqIHtAbGluayBPYnNlcnZhYmxlSW5wdXR9ICh0aGF0IGdldHMgY29udmVydGVkIHRvIE9ic2VydmFibGUpIHRoYXQgc2lnbmFsc1xuICogKG9uIGVpdGhlciBgbmV4dGAgb3IgYGNvbXBsZXRlYCkgd2hlbiB0byBjbG9zZSB0aGUgcHJldmlvdXMgd2luZG93IGFuZFxuICogc3RhcnQgYSBuZXcgb25lLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIG9mIHdpbmRvd3MsIHdoaWNoIGluIHR1cm4gYXJlXG4gKiBPYnNlcnZhYmxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd1doZW48VD4oY2xvc2luZ1NlbGVjdG9yOiAoKSA9PiBPYnNlcnZhYmxlSW5wdXQ8YW55Pik6IE9wZXJhdG9yRnVuY3Rpb248VCwgT2JzZXJ2YWJsZTxUPj4ge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IHdpbmRvdzogU3ViamVjdDxUPiB8IG51bGw7XG4gICAgbGV0IGNsb3NpbmdTdWJzY3JpYmVyOiBTdWJzY3JpYmVyPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHdlIGdldCBhbiBlcnJvciwgd2UgaGF2ZSB0byBub3RpZnkgYm90aCB0aGVcbiAgICAgKiBkZXN0aW5hdGlvbiBzdWJzY3JpYmVyIGFuZCB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZUVycm9yID0gKGVycjogYW55KSA9PiB7XG4gICAgICB3aW5kb3chLmVycm9yKGVycik7XG4gICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBldmVyeSB0aW1lIHdlIG5lZWQgdG8gb3BlbiBhIHdpbmRvdy5cbiAgICAgKiBSZWN1cnNpdmUsIGFzIGl0IHdpbGwgc3RhcnQgdGhlIGNsb3Npbmcgbm90aWZpZXIsIHdoaWNoXG4gICAgICogaW5ldml0YWJseSAqc2hvdWxkKiBjYWxsIG9wZW5XaW5kb3cgLS0gYnV0IG1heSBub3QgaWZcbiAgICAgKiBpdCBpcyBhIFwibmV2ZXJcIiBvYnNlcnZhYmxlLlxuICAgICAqL1xuICAgIGNvbnN0IG9wZW5XaW5kb3cgPSAoKSA9PiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGNsZWFuIHVwIG91ciBjbG9zaW5nIHN1YnNjcmlwdGlvbixcbiAgICAgIC8vIHdlIG9ubHkgY2FyZWQgYWJvdXQgdGhlIGZpcnN0IG5leHQgb3IgY29tcGxldGUgbm90aWZpY2F0aW9uLlxuICAgICAgY2xvc2luZ1N1YnNjcmliZXI/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgIC8vIENsb3NlIG91ciB3aW5kb3cgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IG9uZS5cbiAgICAgIHdpbmRvdz8uY29tcGxldGUoKTtcblxuICAgICAgLy8gU3RhcnQgdGhlIG5ldyB3aW5kb3cuXG4gICAgICB3aW5kb3cgPSBuZXcgU3ViamVjdDxUPigpO1xuICAgICAgc3Vic2NyaWJlci5uZXh0KHdpbmRvdy5hc09ic2VydmFibGUoKSk7XG5cbiAgICAgIC8vIEdldCBvdXIgY2xvc2luZyBub3RpZmllci5cbiAgICAgIGxldCBjbG9zaW5nTm90aWZpZXI6IE9ic2VydmFibGU8YW55PjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsb3NpbmdOb3RpZmllciA9IGlubmVyRnJvbShjbG9zaW5nU2VsZWN0b3IoKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gdGhlIGNsb3Npbmcgbm90aWZpZXIsIGJlIHN1cmVcbiAgICAgIC8vIHRvIGNhcHR1cmUgdGhlIHN1YnNjcmliZXIgKGFrYSBTdWJzY3JpcHRpb24pXG4gICAgICAvLyBzbyB3ZSBjYW4gY2xlYW4gaXQgdXAgd2hlbiB3ZSBjbG9zZSB0aGUgd2luZG93XG4gICAgICAvLyBhbmQgb3BlbiBhIG5ldyBvbmUuXG4gICAgICBjbG9zaW5nTm90aWZpZXIuc3Vic2NyaWJlKChjbG9zaW5nU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBvcGVuV2luZG93LCBvcGVuV2luZG93LCBoYW5kbGVFcnJvcikpKTtcbiAgICB9O1xuXG4gICAgLy8gU3RhcnQgdGhlIGZpcnN0IHdpbmRvdy5cbiAgICBvcGVuV2luZG93KCk7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gdGhlIHNvdXJjZVxuICAgIHNvdXJjZS5zdWJzY3JpYmUoXG4gICAgICBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoXG4gICAgICAgIHN1YnNjcmliZXIsXG4gICAgICAgICh2YWx1ZSkgPT4gd2luZG93IS5uZXh0KHZhbHVlKSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIC8vIFRoZSBzb3VyY2UgY29tcGxldGVkLCBjbG9zZSB0aGUgd2luZG93IGFuZCBjb21wbGV0ZS5cbiAgICAgICAgICB3aW5kb3chLmNvbXBsZXRlKCk7XG4gICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVFcnJvcixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gY2xlYW4gdXAgb3VyIGNsb3Npbmcgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgLy8gd2hlbiB0aGlzIHRlYXJzIGRvd24uXG4gICAgICAgICAgY2xvc2luZ1N1YnNjcmliZXI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgd2luZG93ID0gbnVsbCE7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlSW5wdXQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyB6aXAgfSBmcm9tICcuLi9vYnNlcnZhYmxlL3ppcCc7XG5pbXBvcnQgeyBqb2luQWxsSW50ZXJuYWxzIH0gZnJvbSAnLi9qb2luQWxsSW50ZXJuYWxzJztcblxuLyoqXG4gKiBDb2xsZWN0cyBhbGwgb2JzZXJ2YWJsZSBpbm5lciBzb3VyY2VzIGZyb20gdGhlIHNvdXJjZSwgb25jZSB0aGUgc291cmNlIGNvbXBsZXRlcyxcbiAqIGl0IHdpbGwgc3Vic2NyaWJlIHRvIGFsbCBpbm5lciBzb3VyY2VzLCBjb21iaW5pbmcgdGhlaXIgdmFsdWVzIGJ5IGluZGV4IGFuZCBlbWl0dGluZ1xuICogdGhlbS5cbiAqXG4gKiBAc2VlIHtAbGluayB6aXBXaXRofVxuICogQHNlZSB7QGxpbmsgemlwfVxuICovXG5leHBvcnQgZnVuY3Rpb24gemlwQWxsPFQ+KCk6IE9wZXJhdG9yRnVuY3Rpb248T2JzZXJ2YWJsZUlucHV0PFQ+LCBUW10+O1xuZXhwb3J0IGZ1bmN0aW9uIHppcEFsbDxUPigpOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgVFtdPjtcbmV4cG9ydCBmdW5jdGlvbiB6aXBBbGw8VCwgUj4ocHJvamVjdDogKC4uLnZhbHVlczogVFtdKSA9PiBSKTogT3BlcmF0b3JGdW5jdGlvbjxPYnNlcnZhYmxlSW5wdXQ8VD4sIFI+O1xuZXhwb3J0IGZ1bmN0aW9uIHppcEFsbDxSPihwcm9qZWN0OiAoLi4udmFsdWVzOiBBcnJheTxhbnk+KSA9PiBSKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIFI+O1xuXG5leHBvcnQgZnVuY3Rpb24gemlwQWxsPFQsIFI+KHByb2plY3Q/OiAoLi4udmFsdWVzOiBUW10pID0+IFIpIHtcbiAgcmV0dXJuIGpvaW5BbGxJbnRlcm5hbHMoemlwLCBwcm9qZWN0KTtcbn1cbiIsICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBIZXJlIHdlIG5lZWQgdG8gcmVmZXJlbmNlIG91ciBvdGhlciBkZWVwIGltcG9ydHNcbi8vIHNvIFZTIGNvZGUgd2lsbCBmaWd1cmUgb3V0IHdoZXJlIHRoZXkgYXJlXG4vLyBzZWUgY29udmVyc2F0aW9uIGhlcmU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzQzMDM0XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vIHRzbGludDpkaXNhYmxlOiBuby1yZWZlcmVuY2Vcbi8vIEl0J3MgdGVtcHRpbmcgdG8gYWRkIHJlZmVyZW5jZXMgdG8gYWxsIG9mIHRoZSBkZWVwLWltcG9ydCBsb2NhdGlvbnMsIGJ1dFxuLy8gYWRkaW5nIHJlZmVyZW5jZXMgdG8gdGhvc2UgdGhhdCByZXF1aXJlIERPTSB0eXBlcyBicmVha3MgTm9kZSBwcm9qZWN0cy5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuL29wZXJhdG9ycy9pbmRleC50c1wiIC8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi90ZXN0aW5nL2luZGV4LnRzXCIgLz5cbi8vIHRzbGludDplbmFibGU6IG5vLXJlZmVyZW5jZVxuXG4vKiBPYnNlcnZhYmxlICovXG5leHBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi9pbnRlcm5hbC9PYnNlcnZhYmxlJztcbmV4cG9ydCB7IENvbm5lY3RhYmxlT2JzZXJ2YWJsZSB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUnO1xuZXhwb3J0IHsgR3JvdXBlZE9ic2VydmFibGUgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9ncm91cEJ5JztcbmV4cG9ydCB7IE9wZXJhdG9yIH0gZnJvbSAnLi9pbnRlcm5hbC9PcGVyYXRvcic7XG5leHBvcnQgeyBvYnNlcnZhYmxlIH0gZnJvbSAnLi9pbnRlcm5hbC9zeW1ib2wvb2JzZXJ2YWJsZSc7XG5leHBvcnQgeyBhbmltYXRpb25GcmFtZXMgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvZG9tL2FuaW1hdGlvbkZyYW1lcyc7XG5cbi8qIFN1YmplY3RzICovXG5leHBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi9pbnRlcm5hbC9TdWJqZWN0JztcbmV4cG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJy4vaW50ZXJuYWwvQmVoYXZpb3JTdWJqZWN0JztcbmV4cG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICcuL2ludGVybmFsL1JlcGxheVN1YmplY3QnO1xuZXhwb3J0IHsgQXN5bmNTdWJqZWN0IH0gZnJvbSAnLi9pbnRlcm5hbC9Bc3luY1N1YmplY3QnO1xuXG4vKiBTY2hlZHVsZXJzICovXG5leHBvcnQgeyBhc2FwLCBhc2FwU2NoZWR1bGVyIH0gZnJvbSAnLi9pbnRlcm5hbC9zY2hlZHVsZXIvYXNhcCc7XG5leHBvcnQgeyBhc3luYywgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuL2ludGVybmFsL3NjaGVkdWxlci9hc3luYyc7XG5leHBvcnQgeyBxdWV1ZSwgcXVldWVTY2hlZHVsZXIgfSBmcm9tICcuL2ludGVybmFsL3NjaGVkdWxlci9xdWV1ZSc7XG5leHBvcnQgeyBhbmltYXRpb25GcmFtZSwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgfSBmcm9tICcuL2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZSc7XG5leHBvcnQgeyBWaXJ0dWFsVGltZVNjaGVkdWxlciwgVmlydHVhbEFjdGlvbiB9IGZyb20gJy4vaW50ZXJuYWwvc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyJztcbmV4cG9ydCB7IFNjaGVkdWxlciB9IGZyb20gJy4vaW50ZXJuYWwvU2NoZWR1bGVyJztcblxuLyogU3Vic2NyaXB0aW9uICovXG5leHBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuL2ludGVybmFsL1N1YnNjcmlwdGlvbic7XG5leHBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi9pbnRlcm5hbC9TdWJzY3JpYmVyJztcblxuLyogTm90aWZpY2F0aW9uICovXG5leHBvcnQgeyBOb3RpZmljYXRpb24sIE5vdGlmaWNhdGlvbktpbmQgfSBmcm9tICcuL2ludGVybmFsL05vdGlmaWNhdGlvbic7XG5cbi8qIFV0aWxzICovXG5leHBvcnQgeyBwaXBlIH0gZnJvbSAnLi9pbnRlcm5hbC91dGlsL3BpcGUnO1xuZXhwb3J0IHsgbm9vcCB9IGZyb20gJy4vaW50ZXJuYWwvdXRpbC9ub29wJztcbmV4cG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi9pbnRlcm5hbC91dGlsL2lkZW50aXR5JztcbmV4cG9ydCB7IGlzT2JzZXJ2YWJsZSB9IGZyb20gJy4vaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUnO1xuXG4vKiBQcm9taXNlIENvbnZlcnNpb24gKi9cbmV4cG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICcuL2ludGVybmFsL2xhc3RWYWx1ZUZyb20nO1xuZXhwb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICcuL2ludGVybmFsL2ZpcnN0VmFsdWVGcm9tJztcblxuLyogRXJyb3IgdHlwZXMgKi9cbmV4cG9ydCB7IEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yIH0gZnJvbSAnLi9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yJztcbmV4cG9ydCB7IEVtcHR5RXJyb3IgfSBmcm9tICcuL2ludGVybmFsL3V0aWwvRW1wdHlFcnJvcic7XG5leHBvcnQgeyBOb3RGb3VuZEVycm9yIH0gZnJvbSAnLi9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3InO1xuZXhwb3J0IHsgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgfSBmcm9tICcuL2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuZXhwb3J0IHsgU2VxdWVuY2VFcnJvciB9IGZyb20gJy4vaW50ZXJuYWwvdXRpbC9TZXF1ZW5jZUVycm9yJztcbmV4cG9ydCB7IFRpbWVvdXRFcnJvciB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXQnO1xuZXhwb3J0IHsgVW5zdWJzY3JpcHRpb25FcnJvciB9IGZyb20gJy4vaW50ZXJuYWwvdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yJztcblxuLyogU3RhdGljIG9ic2VydmFibGUgY3JlYXRpb24gZXhwb3J0cyAqL1xuZXhwb3J0IHsgYmluZENhbGxiYWNrIH0gZnJvbSAnLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2JpbmRDYWxsYmFjayc7XG5leHBvcnQgeyBiaW5kTm9kZUNhbGxiYWNrIH0gZnJvbSAnLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2JpbmROb2RlQ2FsbGJhY2snO1xuZXhwb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0JztcbmV4cG9ydCB7IGNvbmNhdCB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb25jYXQnO1xuZXhwb3J0IHsgY29ubmVjdGFibGUgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvY29ubmVjdGFibGUnO1xuZXhwb3J0IHsgZGVmZXIgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvZGVmZXInO1xuZXhwb3J0IHsgZW1wdHkgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvZW1wdHknO1xuZXhwb3J0IHsgZm9ya0pvaW4gfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvZm9ya0pvaW4nO1xuZXhwb3J0IHsgZnJvbSB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tJztcbmV4cG9ydCB7IGZyb21FdmVudCB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tRXZlbnQnO1xuZXhwb3J0IHsgZnJvbUV2ZW50UGF0dGVybiB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tRXZlbnRQYXR0ZXJuJztcbmV4cG9ydCB7IGdlbmVyYXRlIH0gZnJvbSAnLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2dlbmVyYXRlJztcbmV4cG9ydCB7IGlpZiB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9paWYnO1xuZXhwb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvaW50ZXJ2YWwnO1xuZXhwb3J0IHsgbWVyZ2UgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvbWVyZ2UnO1xuZXhwb3J0IHsgbmV2ZXIgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvbmV2ZXInO1xuZXhwb3J0IHsgb2YgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvb2YnO1xuZXhwb3J0IHsgb25FcnJvclJlc3VtZU5leHQgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHQnO1xuZXhwb3J0IHsgcGFpcnMgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvcGFpcnMnO1xuZXhwb3J0IHsgcGFydGl0aW9uIH0gZnJvbSAnLi9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbic7XG5leHBvcnQgeyByYWNlIH0gZnJvbSAnLi9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhY2UnO1xuZXhwb3J0IHsgcmFuZ2UgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFibGUvcmFuZ2UnO1xuZXhwb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJsZS90aHJvd0Vycm9yJztcbmV4cG9ydCB7IHRpbWVyIH0gZnJvbSAnLi9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyJztcbmV4cG9ydCB7IHVzaW5nIH0gZnJvbSAnLi9pbnRlcm5hbC9vYnNlcnZhYmxlL3VzaW5nJztcbmV4cG9ydCB7IHppcCB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJsZS96aXAnO1xuZXhwb3J0IHsgc2NoZWR1bGVkIH0gZnJvbSAnLi9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVkJztcblxuLyogQ29uc3RhbnRzICovXG5leHBvcnQgeyBFTVBUWSB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9lbXB0eSc7XG5leHBvcnQgeyBORVZFUiB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9uZXZlcic7XG5cbi8qIFR5cGVzICovXG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL3R5cGVzJztcblxuLyogQ29uZmlnICovXG5leHBvcnQgeyBjb25maWcsIEdsb2JhbENvbmZpZyB9IGZyb20gJy4vaW50ZXJuYWwvY29uZmlnJztcblxuLyogT3BlcmF0b3JzICovXG5leHBvcnQgeyBhdWRpdCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2F1ZGl0JztcbmV4cG9ydCB7IGF1ZGl0VGltZSB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2F1ZGl0VGltZSc7XG5leHBvcnQgeyBidWZmZXIgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXInO1xuZXhwb3J0IHsgYnVmZmVyQ291bnQgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJDb3VudCc7XG5leHBvcnQgeyBidWZmZXJUaW1lIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyVGltZSc7XG5leHBvcnQgeyBidWZmZXJUb2dnbGUgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGUnO1xuZXhwb3J0IHsgYnVmZmVyV2hlbiB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlcldoZW4nO1xuZXhwb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2NhdGNoRXJyb3InO1xuZXhwb3J0IHsgY29tYmluZUFsbCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVBbGwnO1xuZXhwb3J0IHsgY29tYmluZUxhdGVzdEFsbCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3RBbGwnO1xuZXhwb3J0IHsgY29tYmluZUxhdGVzdFdpdGggfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aCc7XG5leHBvcnQgeyBjb25jYXRBbGwgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGwnO1xuZXhwb3J0IHsgY29uY2F0TWFwIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwJztcbmV4cG9ydCB7IGNvbmNhdE1hcFRvIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwVG8nO1xuZXhwb3J0IHsgY29uY2F0V2l0aCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGgnO1xuZXhwb3J0IHsgY29ubmVjdCwgQ29ubmVjdENvbmZpZyB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2Nvbm5lY3QnO1xuZXhwb3J0IHsgY291bnQgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9jb3VudCc7XG5leHBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlJztcbmV4cG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlVGltZSc7XG5leHBvcnQgeyBkZWZhdWx0SWZFbXB0eSB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2RlZmF1bHRJZkVtcHR5JztcbmV4cG9ydCB7IGRlbGF5IH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXknO1xuZXhwb3J0IHsgZGVsYXlXaGVuIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXlXaGVuJztcbmV4cG9ydCB7IGRlbWF0ZXJpYWxpemUgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9kZW1hdGVyaWFsaXplJztcbmV4cG9ydCB7IGRpc3RpbmN0IH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QnO1xuZXhwb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsQ2hhbmdlZCc7XG5leHBvcnQgeyBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxLZXlDaGFuZ2VkJztcbmV4cG9ydCB7IGVsZW1lbnRBdCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdCc7XG5leHBvcnQgeyBlbmRXaXRoIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvZW5kV2l0aCc7XG5leHBvcnQgeyBldmVyeSB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2V2ZXJ5JztcbmV4cG9ydCB7IGV4aGF1c3QgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0JztcbmV4cG9ydCB7IGV4aGF1c3RBbGwgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0QWxsJztcbmV4cG9ydCB7IGV4aGF1c3RNYXAgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0TWFwJztcbmV4cG9ydCB7IGV4cGFuZCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2V4cGFuZCc7XG5leHBvcnQgeyBmaWx0ZXIgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9maWx0ZXInO1xuZXhwb3J0IHsgZmluYWxpemUgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZSc7XG5leHBvcnQgeyBmaW5kIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZCc7XG5leHBvcnQgeyBmaW5kSW5kZXggfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9maW5kSW5kZXgnO1xuZXhwb3J0IHsgZmlyc3QgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9maXJzdCc7XG5leHBvcnQgeyBncm91cEJ5LCBCYXNpY0dyb3VwQnlPcHRpb25zLCBHcm91cEJ5T3B0aW9uc1dpdGhFbGVtZW50IH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvZ3JvdXBCeSc7XG5leHBvcnQgeyBpZ25vcmVFbGVtZW50cyB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzJztcbmV4cG9ydCB7IGlzRW1wdHkgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9pc0VtcHR5JztcbmV4cG9ydCB7IGxhc3QgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9sYXN0JztcbmV4cG9ydCB7IG1hcCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL21hcCc7XG5leHBvcnQgeyBtYXBUbyB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL21hcFRvJztcbmV4cG9ydCB7IG1hdGVyaWFsaXplIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWF0ZXJpYWxpemUnO1xuZXhwb3J0IHsgbWF4IH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWF4JztcbmV4cG9ydCB7IG1lcmdlQWxsIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VBbGwnO1xuZXhwb3J0IHsgZmxhdE1hcCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZsYXRNYXAnO1xuZXhwb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcCc7XG5leHBvcnQgeyBtZXJnZU1hcFRvIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VNYXBUbyc7XG5leHBvcnQgeyBtZXJnZVNjYW4gfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVNjYW4nO1xuZXhwb3J0IHsgbWVyZ2VXaXRoIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VXaXRoJztcbmV4cG9ydCB7IG1pbiB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL21pbic7XG5leHBvcnQgeyBtdWx0aWNhc3QgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9tdWx0aWNhc3QnO1xuZXhwb3J0IHsgb2JzZXJ2ZU9uIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvb2JzZXJ2ZU9uJztcbmV4cG9ydCB7IG9uRXJyb3JSZXN1bWVOZXh0V2l0aCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0V2l0aCc7XG5leHBvcnQgeyBwYWlyd2lzZSB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3BhaXJ3aXNlJztcbmV4cG9ydCB7IHBsdWNrIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvcGx1Y2snO1xuZXhwb3J0IHsgcHVibGlzaCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2gnO1xuZXhwb3J0IHsgcHVibGlzaEJlaGF2aW9yIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaEJlaGF2aW9yJztcbmV4cG9ydCB7IHB1Ymxpc2hMYXN0IH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaExhc3QnO1xuZXhwb3J0IHsgcHVibGlzaFJlcGxheSB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hSZXBsYXknO1xuZXhwb3J0IHsgcmFjZVdpdGggfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9yYWNlV2l0aCc7XG5leHBvcnQgeyByZWR1Y2UgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9yZWR1Y2UnO1xuZXhwb3J0IHsgcmVwZWF0LCBSZXBlYXRDb25maWcgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXQnO1xuZXhwb3J0IHsgcmVwZWF0V2hlbiB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdFdoZW4nO1xuZXhwb3J0IHsgcmV0cnksIFJldHJ5Q29uZmlnIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnknO1xuZXhwb3J0IHsgcmV0cnlXaGVuIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnlXaGVuJztcbmV4cG9ydCB7IHJlZkNvdW50IH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnQnO1xuZXhwb3J0IHsgc2FtcGxlIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlJztcbmV4cG9ydCB7IHNhbXBsZVRpbWUgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGVUaW1lJztcbmV4cG9ydCB7IHNjYW4gfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9zY2FuJztcbmV4cG9ydCB7IHNlcXVlbmNlRXF1YWwgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9zZXF1ZW5jZUVxdWFsJztcbmV4cG9ydCB7IHNoYXJlLCBTaGFyZUNvbmZpZyB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlJztcbmV4cG9ydCB7IHNoYXJlUmVwbGF5LCBTaGFyZVJlcGxheUNvbmZpZyB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5JztcbmV4cG9ydCB7IHNpbmdsZSB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3NpbmdsZSc7XG5leHBvcnQgeyBza2lwIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcCc7XG5leHBvcnQgeyBza2lwTGFzdCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0JztcbmV4cG9ydCB7IHNraXBVbnRpbCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBVbnRpbCc7XG5leHBvcnQgeyBza2lwV2hpbGUgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9za2lwV2hpbGUnO1xuZXhwb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvc3RhcnRXaXRoJztcbmV4cG9ydCB7IHN1YnNjcmliZU9uIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvc3Vic2NyaWJlT24nO1xuZXhwb3J0IHsgc3dpdGNoQWxsIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoQWxsJztcbmV4cG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcCc7XG5leHBvcnQgeyBzd2l0Y2hNYXBUbyB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcFRvJztcbmV4cG9ydCB7IHN3aXRjaFNjYW4gfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hTY2FuJztcbmV4cG9ydCB7IHRha2UgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy90YWtlJztcbmV4cG9ydCB7IHRha2VMYXN0IH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZUxhc3QnO1xuZXhwb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVVudGlsJztcbmV4cG9ydCB7IHRha2VXaGlsZSB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VXaGlsZSc7XG5leHBvcnQgeyB0YXAsIFRhcE9ic2VydmVyIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFwJztcbmV4cG9ydCB7IHRocm90dGxlLCBUaHJvdHRsZUNvbmZpZyB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlJztcbmV4cG9ydCB7IHRocm90dGxlVGltZSB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlVGltZSc7XG5leHBvcnQgeyB0aHJvd0lmRW1wdHkgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy90aHJvd0lmRW1wdHknO1xuZXhwb3J0IHsgdGltZUludGVydmFsIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZUludGVydmFsJztcbmV4cG9ydCB7IHRpbWVvdXQsIFRpbWVvdXRDb25maWcsIFRpbWVvdXRJbmZvIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dCc7XG5leHBvcnQgeyB0aW1lb3V0V2l0aCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXRXaXRoJztcbmV4cG9ydCB7IHRpbWVzdGFtcCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVzdGFtcCc7XG5leHBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvdG9BcnJheSc7XG5leHBvcnQgeyB3aW5kb3cgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3cnO1xuZXhwb3J0IHsgd2luZG93Q291bnQgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dDb3VudCc7XG5leHBvcnQgeyB3aW5kb3dUaW1lIH0gZnJvbSAnLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93VGltZSc7XG5leHBvcnQgeyB3aW5kb3dUb2dnbGUgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUb2dnbGUnO1xuZXhwb3J0IHsgd2luZG93V2hlbiB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1doZW4nO1xuZXhwb3J0IHsgd2l0aExhdGVzdEZyb20gfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy93aXRoTGF0ZXN0RnJvbSc7XG5leHBvcnQgeyB6aXBBbGwgfSBmcm9tICcuL2ludGVybmFsL29wZXJhdG9ycy96aXBBbGwnO1xuZXhwb3J0IHsgemlwV2l0aCB9IGZyb20gJy4vaW50ZXJuYWwvb3BlcmF0b3JzL3ppcFdpdGgnO1xuIiwgImltcG9ydCB7IG5vdCB9IGZyb20gJy4uL3V0aWwvbm90JztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJy4vZmlsdGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFVuYXJ5RnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogU3BsaXRzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBpbnRvIHR3bywgb25lIHdpdGggdmFsdWVzIHRoYXQgc2F0aXNmeSBhXG4gKiBwcmVkaWNhdGUsIGFuZCBhbm90aGVyIHdpdGggdmFsdWVzIHRoYXQgZG9uJ3Qgc2F0aXNmeSB0aGUgcHJlZGljYXRlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGZpbHRlcn0sIGJ1dCByZXR1cm5zIHR3byBPYnNlcnZhYmxlczpcbiAqIG9uZSBsaWtlIHRoZSBvdXRwdXQgb2Yge0BsaW5rIGZpbHRlcn0sIGFuZCB0aGUgb3RoZXIgd2l0aCB2YWx1ZXMgdGhhdCBkaWQgbm90XG4gKiBwYXNzIHRoZSBjb25kaXRpb24uPC9zcGFuPlxuICpcbiAqICFbXShwYXJ0aXRpb24ucG5nKVxuICpcbiAqIGBwYXJ0aXRpb25gIG91dHB1dHMgYW4gYXJyYXkgd2l0aCB0d28gT2JzZXJ2YWJsZXMgdGhhdCBwYXJ0aXRpb24gdGhlIHZhbHVlc1xuICogZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgdGhyb3VnaCB0aGUgZ2l2ZW4gYHByZWRpY2F0ZWAgZnVuY3Rpb24uIFRoZSBmaXJzdFxuICogT2JzZXJ2YWJsZSBpbiB0aGF0IGFycmF5IGVtaXRzIHNvdXJjZSB2YWx1ZXMgZm9yIHdoaWNoIHRoZSBwcmVkaWNhdGUgYXJndW1lbnRcbiAqIHJldHVybnMgdHJ1ZS4gVGhlIHNlY29uZCBPYnNlcnZhYmxlIGVtaXRzIHNvdXJjZSB2YWx1ZXMgZm9yIHdoaWNoIHRoZVxuICogcHJlZGljYXRlIHJldHVybnMgZmFsc2UuIFRoZSBmaXJzdCBiZWhhdmVzIGxpa2Uge0BsaW5rIGZpbHRlcn0gYW5kIHRoZSBzZWNvbmRcbiAqIGJlaGF2ZXMgbGlrZSB7QGxpbmsgZmlsdGVyfSB3aXRoIHRoZSBwcmVkaWNhdGUgbmVnYXRlZC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogUGFydGl0aW9uIGNsaWNrIGV2ZW50cyBpbnRvIHRob3NlIG9uIERJViBlbGVtZW50cyBhbmQgdGhvc2UgZWxzZXdoZXJlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuICogaW1wb3J0IHsgcGFydGl0aW9uIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuICpcbiAqIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICogZGl2LnN0eWxlLmNzc1RleHQgPSAnd2lkdGg6IDIwMHB4OyBoZWlnaHQ6IDIwMHB4OyBiYWNrZ3JvdW5kOiAjMDljOyc7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gKlxuICogY29uc3QgY2xpY2tzID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIGNvbnN0IFtjbGlja3NPbkRpdnMsIGNsaWNrc0Vsc2V3aGVyZV0gPSBjbGlja3MucGlwZShwYXJ0aXRpb24oZXYgPT4gKDxIVE1MRWxlbWVudD5ldi50YXJnZXQpLnRhZ05hbWUgPT09ICdESVYnKSk7XG4gKlxuICogY2xpY2tzT25EaXZzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKCdESVYgY2xpY2tlZDogJywgeCkpO1xuICogY2xpY2tzRWxzZXdoZXJlLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKCdPdGhlciBjbGlja2VkOiAnLCB4KSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBmaWx0ZXJ9XG4gKlxuICogQHBhcmFtIHByZWRpY2F0ZSBBIGZ1bmN0aW9uIHRoYXQgZXZhbHVhdGVzIGVhY2ggdmFsdWUgZW1pdHRlZCBieSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBJZiBpdCByZXR1cm5zIGB0cnVlYCwgdGhlIHZhbHVlIGlzIGVtaXR0ZWQgb24gdGhlIGZpcnN0IE9ic2VydmFibGVcbiAqIGluIHRoZSByZXR1cm5lZCBhcnJheSwgaWYgYGZhbHNlYCB0aGUgdmFsdWUgaXMgZW1pdHRlZCBvbiB0aGUgc2Vjb25kIE9ic2VydmFibGVcbiAqIGluIHRoZSBhcnJheS4gVGhlIGBpbmRleGAgcGFyYW1ldGVyIGlzIHRoZSBudW1iZXIgYGlgIGZvciB0aGUgaS10aCBzb3VyY2VcbiAqIGVtaXNzaW9uIHRoYXQgaGFzIGhhcHBlbmVkIHNpbmNlIHRoZSBzdWJzY3JpcHRpb24sIHN0YXJ0aW5nIGZyb20gdGhlIG51bWJlciBgMGAuXG4gKiBAcGFyYW0gdGhpc0FyZyBBbiBvcHRpb25hbCBhcmd1bWVudCB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIGB0aGlzYCBpbiB0aGVcbiAqIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogQHJldHVybiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBhcnJheSB3aXRoIHR3byBPYnNlcnZhYmxlczogb25lIHdpdGhcbiAqIHZhbHVlcyB0aGF0IHBhc3NlZCB0aGUgcHJlZGljYXRlLCBhbmQgYW5vdGhlciB3aXRoIHZhbHVlcyB0aGF0IGRpZCBub3QgcGFzc1xuICogdGhlIHByZWRpY2F0ZS5cbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIHdpdGggdGhlIHtAbGluayBwYXJ0aXRpb259IHN0YXRpYyBjcmVhdGlvbiBmdW5jdGlvbi4gV2lsbCBiZSByZW1vdmVkIGluIHY4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFydGl0aW9uPFQ+KFxuICBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgdGhpc0FyZz86IGFueVxuKTogVW5hcnlGdW5jdGlvbjxPYnNlcnZhYmxlPFQ+LCBbT2JzZXJ2YWJsZTxUPiwgT2JzZXJ2YWJsZTxUPl0+IHtcbiAgcmV0dXJuIChzb3VyY2U6IE9ic2VydmFibGU8VD4pID0+XG4gICAgW2ZpbHRlcihwcmVkaWNhdGUsIHRoaXNBcmcpKHNvdXJjZSksIGZpbHRlcihub3QocHJlZGljYXRlLCB0aGlzQXJnKSkoc291cmNlKV0gYXMgW09ic2VydmFibGU8VD4sIE9ic2VydmFibGU8VD5dO1xufVxuIiwgIi8qIE9wZXJhdG9yIGV4cG9ydHMgKi9cbmV4cG9ydCB7IGF1ZGl0IH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2F1ZGl0JztcbmV4cG9ydCB7IGF1ZGl0VGltZSB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFRpbWUnO1xuZXhwb3J0IHsgYnVmZmVyIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlcic7XG5leHBvcnQgeyBidWZmZXJDb3VudCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJDb3VudCc7XG5leHBvcnQgeyBidWZmZXJUaW1lIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRpbWUnO1xuZXhwb3J0IHsgYnVmZmVyVG9nZ2xlIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRvZ2dsZSc7XG5leHBvcnQgeyBidWZmZXJXaGVuIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlcldoZW4nO1xuZXhwb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yJztcbmV4cG9ydCB7IGNvbWJpbmVBbGwgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUFsbCc7XG5leHBvcnQgeyBjb21iaW5lTGF0ZXN0QWxsIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3RBbGwnO1xuZXhwb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0JztcbmV4cG9ydCB7IGNvbWJpbmVMYXRlc3RXaXRoIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3RXaXRoJztcbmV4cG9ydCB7IGNvbmNhdCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQnO1xuZXhwb3J0IHsgY29uY2F0QWxsIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdEFsbCc7XG5leHBvcnQgeyBjb25jYXRNYXAgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwJztcbmV4cG9ydCB7IGNvbmNhdE1hcFRvIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvJztcbmV4cG9ydCB7IGNvbmNhdFdpdGggfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0V2l0aCc7XG5leHBvcnQgeyBjb25uZWN0LCBDb25uZWN0Q29uZmlnIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2Nvbm5lY3QnO1xuZXhwb3J0IHsgY291bnQgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnQnO1xuZXhwb3J0IHsgZGVib3VuY2UgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2UnO1xuZXhwb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlVGltZSc7XG5leHBvcnQgeyBkZWZhdWx0SWZFbXB0eSB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eSc7XG5leHBvcnQgeyBkZWxheSB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9kZWxheSc7XG5leHBvcnQgeyBkZWxheVdoZW4gfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXlXaGVuJztcbmV4cG9ydCB7IGRlbWF0ZXJpYWxpemUgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZSc7XG5leHBvcnQgeyBkaXN0aW5jdCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdCc7XG5leHBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsQ2hhbmdlZCc7XG5leHBvcnQgeyBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCc7XG5leHBvcnQgeyBlbGVtZW50QXQgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZWxlbWVudEF0JztcbmV4cG9ydCB7IGVuZFdpdGggfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZW5kV2l0aCc7XG5leHBvcnQgeyBldmVyeSB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9ldmVyeSc7XG5leHBvcnQgeyBleGhhdXN0IH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3QnO1xuZXhwb3J0IHsgZXhoYXVzdEFsbCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0QWxsJztcbmV4cG9ydCB7IGV4aGF1c3RNYXAgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdE1hcCc7XG5leHBvcnQgeyBleHBhbmQgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kJztcbmV4cG9ydCB7IGZpbHRlciB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9maWx0ZXInO1xuZXhwb3J0IHsgZmluYWxpemUgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmluYWxpemUnO1xuZXhwb3J0IHsgZmluZCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9maW5kJztcbmV4cG9ydCB7IGZpbmRJbmRleCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9maW5kSW5kZXgnO1xuZXhwb3J0IHsgZmlyc3QgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmlyc3QnO1xuZXhwb3J0IHsgZ3JvdXBCeSwgQmFzaWNHcm91cEJ5T3B0aW9ucywgR3JvdXBCeU9wdGlvbnNXaXRoRWxlbWVudCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9ncm91cEJ5JztcbmV4cG9ydCB7IGlnbm9yZUVsZW1lbnRzIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzJztcbmV4cG9ydCB7IGlzRW1wdHkgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvaXNFbXB0eSc7XG5leHBvcnQgeyBsYXN0IH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL2xhc3QnO1xuZXhwb3J0IHsgbWFwIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL21hcCc7XG5leHBvcnQgeyBtYXBUbyB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9tYXBUbyc7XG5leHBvcnQgeyBtYXRlcmlhbGl6ZSB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9tYXRlcmlhbGl6ZSc7XG5leHBvcnQgeyBtYXggfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWF4JztcbmV4cG9ydCB7IG1lcmdlIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlJztcbmV4cG9ydCB7IG1lcmdlQWxsIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlQWxsJztcbmV4cG9ydCB7IGZsYXRNYXAgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmxhdE1hcCc7XG5leHBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcCc7XG5leHBvcnQgeyBtZXJnZU1hcFRvIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG8nO1xuZXhwb3J0IHsgbWVyZ2VTY2FuIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlU2Nhbic7XG5leHBvcnQgeyBtZXJnZVdpdGggfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VXaXRoJztcbmV4cG9ydCB7IG1pbiB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9taW4nO1xuZXhwb3J0IHsgbXVsdGljYXN0IH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL211bHRpY2FzdCc7XG5leHBvcnQgeyBvYnNlcnZlT24gfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvb2JzZXJ2ZU9uJztcbmV4cG9ydCB7IG9uRXJyb3JSZXN1bWVOZXh0IH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0V2l0aCc7XG5leHBvcnQgeyBwYWlyd2lzZSB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9wYWlyd2lzZSc7XG5leHBvcnQgeyBwYXJ0aXRpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcGFydGl0aW9uJztcbmV4cG9ydCB7IHBsdWNrIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3BsdWNrJztcbmV4cG9ydCB7IHB1Ymxpc2ggfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaCc7XG5leHBvcnQgeyBwdWJsaXNoQmVoYXZpb3IgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaEJlaGF2aW9yJztcbmV4cG9ydCB7IHB1Ymxpc2hMYXN0IH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hMYXN0JztcbmV4cG9ydCB7IHB1Ymxpc2hSZXBsYXkgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaFJlcGxheSc7XG5leHBvcnQgeyByYWNlIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JhY2UnO1xuZXhwb3J0IHsgcmFjZVdpdGggfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGgnO1xuZXhwb3J0IHsgcmVkdWNlIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZSc7XG5leHBvcnQgeyByZXBlYXQsIFJlcGVhdENvbmZpZyB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXQnO1xuZXhwb3J0IHsgcmVwZWF0V2hlbiB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuJztcbmV4cG9ydCB7IHJldHJ5LCBSZXRyeUNvbmZpZyB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9yZXRyeSc7XG5leHBvcnQgeyByZXRyeVdoZW4gfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnlXaGVuJztcbmV4cG9ydCB7IHJlZkNvdW50IH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JlZkNvdW50JztcbmV4cG9ydCB7IHNhbXBsZSB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGUnO1xuZXhwb3J0IHsgc2FtcGxlVGltZSB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGVUaW1lJztcbmV4cG9ydCB7IHNjYW4gfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2Nhbic7XG5leHBvcnQgeyBzZXF1ZW5jZUVxdWFsIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NlcXVlbmNlRXF1YWwnO1xuZXhwb3J0IHsgc2hhcmUsIFNoYXJlQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlJztcbmV4cG9ydCB7IHNoYXJlUmVwbGF5LCBTaGFyZVJlcGxheUNvbmZpZyB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9zaGFyZVJlcGxheSc7XG5leHBvcnQgeyBzaW5nbGUgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2luZ2xlJztcbmV4cG9ydCB7IHNraXAgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcCc7XG5leHBvcnQgeyBza2lwTGFzdCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9za2lwTGFzdCc7XG5leHBvcnQgeyBza2lwVW50aWwgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFVudGlsJztcbmV4cG9ydCB7IHNraXBXaGlsZSB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9za2lwV2hpbGUnO1xuZXhwb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aCc7XG5leHBvcnQgeyBzdWJzY3JpYmVPbiB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9zdWJzY3JpYmVPbic7XG5leHBvcnQgeyBzd2l0Y2hBbGwgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoQWxsJztcbmV4cG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hNYXAnO1xuZXhwb3J0IHsgc3dpdGNoTWFwVG8gfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8nO1xuZXhwb3J0IHsgc3dpdGNoU2NhbiB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hTY2FuJztcbmV4cG9ydCB7IHRha2UgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZSc7XG5leHBvcnQgeyB0YWtlTGFzdCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdCc7XG5leHBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVVudGlsJztcbmV4cG9ydCB7IHRha2VXaGlsZSB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGUnO1xuZXhwb3J0IHsgdGFwLCBUYXBPYnNlcnZlciB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy90YXAnO1xuZXhwb3J0IHsgdGhyb3R0bGUsIFRocm90dGxlQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlJztcbmV4cG9ydCB7IHRocm90dGxlVGltZSB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy90aHJvdHRsZVRpbWUnO1xuZXhwb3J0IHsgdGhyb3dJZkVtcHR5IH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm93SWZFbXB0eSc7XG5leHBvcnQgeyB0aW1lSW50ZXJ2YWwgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZUludGVydmFsJztcbmV4cG9ydCB7IHRpbWVvdXQsIFRpbWVvdXRDb25maWcsIFRpbWVvdXRJbmZvIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXQnO1xuZXhwb3J0IHsgdGltZW91dFdpdGggfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGgnO1xuZXhwb3J0IHsgdGltZXN0YW1wIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVzdGFtcCc7XG5leHBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXknO1xuZXhwb3J0IHsgd2luZG93IH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvdyc7XG5leHBvcnQgeyB3aW5kb3dDb3VudCB9IGZyb20gJy4uL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dDb3VudCc7XG5leHBvcnQgeyB3aW5kb3dUaW1lIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RpbWUnO1xuZXhwb3J0IHsgd2luZG93VG9nZ2xlIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RvZ2dsZSc7XG5leHBvcnQgeyB3aW5kb3dXaGVuIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1doZW4nO1xuZXhwb3J0IHsgd2l0aExhdGVzdEZyb20gfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2l0aExhdGVzdEZyb20nO1xuZXhwb3J0IHsgemlwIH0gZnJvbSAnLi4vaW50ZXJuYWwvb3BlcmF0b3JzL3ppcCc7XG5leHBvcnQgeyB6aXBBbGwgfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvemlwQWxsJztcbmV4cG9ydCB7IHppcFdpdGggfSBmcm9tICcuLi9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aCc7XG4iLCAiLy8gdGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGtlZXAgdGhlIGJ1bmRsZSBzaXplIGRvd25cblxuZXhwb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZnJvbUV2ZW50LCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIHsgT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgYnVmZmVyLFxuICBidWZmZXJDb3VudCxcbiAgYnVmZmVyVGltZSxcbiAgZGVib3VuY2UsXG4gIGRlYm91bmNlVGltZSxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIHN0YXJ0V2l0aCxcbiAgdGFrZVVudGlsLFxuICB0aHJvdHRsZVRpbWUsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGNvbnN0IG9wcyA9IHtcbiAgYnVmZmVyLFxuICBidWZmZXJDb3VudCxcbiAgYnVmZmVyVGltZSxcbiAgZGVib3VuY2UsXG4gIGRlYm91bmNlVGltZSxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIHN0YXJ0V2l0aCxcbiAgdGFrZVVudGlsLFxuICB0aHJvdHRsZVRpbWUsXG59O1xuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydHJ4LnBsdWdpbnMuanMnO1xuaW1wb3J0ICogYXMgcnhqcyBmcm9tICcuL3NtYXJ0cngucGx1Z2lucy5yeGpzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJRXZlbnRFbWl0dGVyPFQgPSBhbnk+IHtcbiAgb246IChldmVudE5hbWVBcmc6IHN0cmluZywgZXZlbnRIYW5kbGVyQXJnOiAoZXZlbnRQYXlsb2FkOiBUKSA9PiBhbnkpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogYnVuZGxlcyBhbiBvYnNlcnZhYmxlIHdpdGggYW4gZW1pdHRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIElPYnNlcnZhYmxlRXZlbnRCdW5kbGU8VD4ge1xuICBzdWJqZWN0OiByeGpzLlN1YmplY3Q8YW55PjtcbiAgZXZlbnRSZWY6IFQ7XG4gIGV2ZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogbWFuYWdlcyBvYnNlcnZhYmxlcyBieSBtYWtpbmcgc3VyZSB0aGF0IG9ubHkgb25lIG9ic2VydmFibGUgaXMgcmVnc2l0ZXJlZCBwZXIgZXZlbnRcbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2VydmFibGVtYXAge1xuICBwdWJsaWMgb2JzZXJ2YWJsZUV2ZW50RW1pdHRlckJ1bmRsZUFycmF5ID0gbmV3IEFycmF5PFxuICAgIElPYnNlcnZhYmxlRXZlbnRCdW5kbGU8SUV2ZW50RW1pdHRlcjx1bmtub3duPj5cbiAgPigpO1xuICBwdWJsaWMgb2JzZXJ2YWJsZUV2ZW50VGFyZ2V0QnVuZGxlQXJyYXkgPSBuZXcgQXJyYXk8SU9ic2VydmFibGVFdmVudEJ1bmRsZTxFdmVudFRhcmdldD4+KCk7XG5cbiAgLyoqXG4gICAqIGNyZWF0ZXMgYSBob3Qgc3ViamVjdCBpZiBub3QgeWV0IHJlZ2lzdGVyZWQgZm9yIHRoZSBldmVudC5cbiAgICogSW4gY2FzZSBldmVudCBoYXMgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgc2FtZSBvYnNlcnZhYmxlIGlzIHJldHVybmVkLlxuICAgKi9cbiAgcHVibGljIGdldFN1YmplY3RGb3JFbWl0dGVyRXZlbnQ8VD4oXG4gICAgZW1pdHRlckFyZzogSUV2ZW50RW1pdHRlcjxUPixcbiAgICBldmVudEFyZzogc3RyaW5nLFxuICApOiByeGpzLlN1YmplY3Q8VD4ge1xuICAgIGNvbnN0IGV4aXN0aW5nQnVuZGxlID0gdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkuZmluZCgoYnVuZGxlQXJnKSA9PiB7XG4gICAgICByZXR1cm4gYnVuZGxlQXJnLmV2ZW50UmVmID09PSBlbWl0dGVyQXJnICYmIGJ1bmRsZUFyZy5ldmVudCA9PT0gZXZlbnRBcmc7XG4gICAgfSk7XG4gICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZW1pdHRlck9ic2VydmFibGUgPSByeGpzLmZyb21FdmVudDxUPihlbWl0dGVyQXJnIGFzIGFueSwgZXZlbnRBcmcpO1xuICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgcnhqcy5TdWJqZWN0KCk7XG4gICAgICBlbWl0dGVyT2JzZXJ2YWJsZS5zdWJzY3JpYmUoZW1pdHRlclN1YmplY3QpO1xuICAgICAgY29uc3QgbmV3QnVuZGxlOiBJT2JzZXJ2YWJsZUV2ZW50QnVuZGxlPElFdmVudEVtaXR0ZXI+ID0ge1xuICAgICAgICBzdWJqZWN0OiBlbWl0dGVyU3ViamVjdCxcbiAgICAgICAgZXZlbnRSZWY6IGVtaXR0ZXJBcmcsXG4gICAgICAgIGV2ZW50OiBldmVudEFyZyxcbiAgICAgIH07XG4gICAgICB0aGlzLm9ic2VydmFibGVFdmVudEVtaXR0ZXJCdW5kbGVBcnJheS5wdXNoKG5ld0J1bmRsZSk7XG4gICAgICByZXR1cm4gbmV3QnVuZGxlLnN1YmplY3Q7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFN1YmplY3RGb3JFdmVudFRhcmdldDxUPihcbiAgICBldmVudFRhcmdldEFyZzogRXZlbnRUYXJnZXQsXG4gICAgZXZlbnROYW1lQXJnOiBzdHJpbmcsXG4gICk6IHJ4anMuU3ViamVjdDxUPiB7XG4gICAgY29uc3QgZXhpc3RpbmdCdW5kbGUgPSB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5LmZpbmQoKGJ1bmRsZUFyZykgPT4ge1xuICAgICAgcmV0dXJuIGJ1bmRsZUFyZy5ldmVudFJlZiA9PT0gZXZlbnRUYXJnZXRBcmcgJiYgYnVuZGxlQXJnLmV2ZW50ID09PSBldmVudE5hbWVBcmc7XG4gICAgfSk7XG4gICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgcnhqcy5TdWJqZWN0KCk7XG4gICAgICBjb25zdCBuZXdCdW5kbGU6IElPYnNlcnZhYmxlRXZlbnRCdW5kbGU8RXZlbnRUYXJnZXQ+ID0ge1xuICAgICAgICBzdWJqZWN0OiBlbWl0dGVyU3ViamVjdCxcbiAgICAgICAgZXZlbnRSZWY6IGV2ZW50VGFyZ2V0QXJnLFxuICAgICAgICBldmVudDogZXZlbnROYW1lQXJnLFxuICAgICAgfTtcbiAgICAgIHRoaXMub2JzZXJ2YWJsZUV2ZW50VGFyZ2V0QnVuZGxlQXJyYXkucHVzaChuZXdCdW5kbGUpO1xuICAgICAgcmV0dXJuIG5ld0J1bmRsZS5zdWJqZWN0O1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydHJ4LnBsdWdpbnMuanMnO1xuXG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJy4vc21hcnRyeC5wbHVnaW5zLnJ4anMuanMnO1xuXG4vKipcbiAqIE9ic2VydmFibGVJbnRha2VcbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2VydmFibGVJbnRha2U8VD4ge1xuICBwdWJsaWMgb2JzZXJ2YWJsZTogcnhqcy5PYnNlcnZhYmxlPFQ+O1xuICBwdWJsaWMgY29tcGxldGVkOiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIGNvbXBsZXRlZERlZmZlcmVkOiBwbHVnaW5zLnNtYXJ0cHJvbWlzZS5EZWZlcnJlZDx2b2lkPjtcbiAgcHJpdmF0ZSBvYnNlcnZhYmxlRnVuY3Rpb25zOiBhbnkgPSB7XG4gICAgbmV4dDogKHBheWxvYWRBcmc6IFQpID0+IHtcbiAgICAgIC8vIG5vdGhpbmdcbiAgICB9LFxuICAgIGNvbXBsZXRlOiAocGF5bG9hZEFyZzogVCkgPT4ge1xuICAgICAgLy8gbm90aGluZ1xuICAgIH0sXG4gIH07XG4gIHByaXZhdGUgZ2VuZXJhdG9yOiBHZW5lcmF0b3I8VD4gPSBudWxsO1xuICBwcml2YXRlIGJ1ZmZlcmVkID0gZmFsc2U7XG4gIHByaXZhdGUgcGF5bG9hZEJ1ZmZlcjogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm9ic2VydmFibGUgPSBuZXcgcnhqcy5PYnNlcnZhYmxlKChvYnNlcnZlckFyZzogcnhqcy5PYnNlcnZlcjxhbnk+KSA9PiB7XG4gICAgICB0aGlzLm9ic2VydmFibGVGdW5jdGlvbnMubmV4dCA9ICguLi5hcmdzOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLm5leHQoYXJncyk7XG4gICAgICB9O1xuICAgICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBsZXRlZERlZmZlcmVkLnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLmNvbXBsZXRlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY29tcGxldGVkRGVmZmVyZWQgPSBwbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpO1xuICAgIHRoaXMuY29tcGxldGVkID0gdGhpcy5jb21wbGV0ZWREZWZmZXJlZC5wcm9taXNlO1xuICB9XG5cbiAgcHVibGljIHNldE9ic2VydmFibGUob2JzZXJ2YWJsZUZ1bmM6IHJ4anMuT2JzZXJ2YWJsZTxhbnk+KSB7XG4gICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZUZ1bmM7XG4gIH1cblxuICBwdWJsaWMgcHVzaChwYXlsb2FkQXJnOiBUKSB7XG4gICAgaWYgKHRoaXMuYnVmZmVyZWQpIHtcbiAgICAgIHRoaXMucGF5bG9hZEJ1ZmZlci5wdXNoKHBheWxvYWRBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybmFsUHVzaChwYXlsb2FkQXJnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcHVzaGVzIG1hbnkgcGF5bG9hZHMgYXMgYXJyYXlcbiAgICogQHBhcmFtIHBheWxvYWRBcmdBcnJheVxuICAgKi9cbiAgcHVibGljIHB1c2hNYW55KHBheWxvYWRBcmdBcnJheTogVFtdKSB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHBheWxvYWRBcmdBcnJheSkge1xuICAgICAgdGhpcy5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRzIGEgZ2VuZXJhdG9yIHRvIHF1ZXJ5IHRoZSBuZXh0IHB1c2hlZCB2YWx1ZVxuICAgKiBAcGFyYW0gZ2VuZXJhdG9yQXJnXG4gICAqL1xuICBwdWJsaWMgc2V0R2VuZXJhdG9yKGdlbmVyYXRvckFyZzogR2VuZXJhdG9yPFQ+KSB7XG4gICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0b3JBcmc7XG4gIH1cblxuICBwdWJsaWMgbWFrZUJ1ZmZlcmVkKCkge1xuICAgIHRoaXMuYnVmZmVyZWQgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZSguLi5hcmdzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSguLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXF1ZXN0IHRoZSBuZXh0IHZhbHVlcyBpbiB0aGUgcXVhbnRpdHkgc3BlY2lmaWVkXG4gICAqIEBwYXJhbSBob3dNYW55QXJnIGlmIGEgZ2VuZXJhdG9yIGlzIHNldCwgb2YgYSBidWZmZXIgZXhpc3RzLCB0aGlzIGFsbG93cyByZXRyaWV2aW5nIHZhbHVlc1xuICAgKi9cbiAgcHVibGljIHJlcXVlc3QoaG93TWFueUFyZzogbnVtYmVyKSB7XG4gICAgaWYgKGhvd01hbnlBcmcgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT09IGhvd01hbnlBcmc7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5wYXlsb2FkQnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmludGVybmFsUHVzaCh0aGlzLnBheWxvYWRCdWZmZXIuc2hpZnQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbmV4dFBheWxvYWQgPSB0aGlzLmdlbmVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbFB1c2gobmV4dFBheWxvYWQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNpZ25hbHMgdGhlIGNvbXBsZXRpb24gb2YgdGhpcyBvYnNlcnZhYmxlXG4gICAqL1xuICBwdWJsaWMgc2lnbmFsQ29tcGxldGUoKSB7XG4gICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGludGVybmFsUHVzaChwYXlsb2FkQXJnOiBUKSB7XG4gICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLm5leHQocGF5bG9hZEFyZyk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TdHJlYW1XaXRoQmFja3ByZXNzdXJlPFQ+KHN0cmVhbTogUmVhZGFibGUpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFQ+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgY29uc3QgcGF1c2VTdHJlYW0gPSAoKSA9PiBzdHJlYW0ucGF1c2UoKTtcbiAgICBjb25zdCByZXN1bWVTdHJlYW0gPSAoKSA9PiBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHN0cmVhbS5yZXN1bWUoKSk7XG5cbiAgICAvLyBIYW5kbGVyIGZvciBlYWNoIHBpZWNlIG9mIGRhdGFcbiAgICBjb25zdCBvbkRhdGEgPSAoZGF0YTogVCkgPT4ge1xuICAgICAgLy8gUGF1c2UgdGhlIHN0cmVhbSB0byBhcHBseSBiYWNrcHJlc3N1cmVcbiAgICAgIHBhdXNlU3RyZWFtKCk7XG4gICAgICAvLyBFbWl0IGRhdGEgYW5kIHJlc3VtZSB0aGUgc3RyZWFtIGlmIHRoZSBzdWJzY3JpYmVyIGlzIHJlYWR5XG4gICAgICBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG4gICAgICByZXN1bWVTdHJlYW0oKTtcbiAgICB9O1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIHN0cmVhbSBldmVudHNcbiAgICBzdHJlYW0ub24oJ2RhdGEnLCBvbkRhdGEpO1xuICAgIHN0cmVhbS5vbignZXJyb3InLCAoZXJyb3IpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpKTtcbiAgICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHN1YnNjcmliZXIuY29tcGxldGUoKSk7XG4gICAgc3RyZWFtLm9uKCdjbG9zZScsICgpID0+IHN1YnNjcmliZXIuY29tcGxldGUoKSk7XG5cbiAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB1bnN1YnNjcmliZXMsIGNsZWFuIHVwIHRoZSBzdHJlYW0gbGlzdGVuZXJzXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSk7XG4gICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgc3Vic2NyaWJlci5lcnJvcik7XG4gICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHN1YnNjcmliZXIuY29tcGxldGUpO1xuICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIHN1YnNjcmliZXIuY29tcGxldGUpO1xuICAgIH07XG4gIH0pO1xufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydHJ4LnBsdWdpbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZW1hcC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0cnguY2xhc3Nlcy5vYnNlcnZhYmxlaW50YWtlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc21hcnRyeC5mdW5jdGlvbnMuanMnO1xuaW1wb3J0ICogYXMgcnhqcyBmcm9tICcuL3NtYXJ0cngucGx1Z2lucy5yeGpzLmpzJztcbmV4cG9ydCB7IHJ4anMgfTtcbiIsICIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlXG4gKi9cblxuLypcbiAqIElNUE9SVEFOVDogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0c2lja2xlIGFuZCB0aGUgQ2xvc3VyZSBKUyBjb21waWxlciwgYWxsXG4gKiBwcm9wZXJ0eSBkZWNvcmF0b3JzIChidXQgbm90IGNsYXNzIGRlY29yYXRvcnMpIGluIHRoaXMgZmlsZSB0aGF0IGhhdmVcbiAqIGFuIEBFeHBvcnREZWNvcmF0ZWRJdGVtcyBhbm5vdGF0aW9uIG11c3QgYmUgZGVmaW5lZCBhcyBhIHJlZ3VsYXIgZnVuY3Rpb24sXG4gKiBub3QgYW4gYXJyb3cgZnVuY3Rpb24uXG4gKi9cblxuaW1wb3J0IHtcbiAgdHlwZSBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICB0eXBlIFJlYWN0aXZlRWxlbWVudCxcbiAgZGVmYXVsdENvbnZlcnRlcixcbiAgbm90RXF1YWwsXG59IGZyb20gJy4uL3JlYWN0aXZlLWVsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUge0ludGVyZmFjZX0gZnJvbSAnLi9iYXNlLmpzJztcblxuY29uc3QgREVWX01PREUgPSB0cnVlO1xuXG5sZXQgaXNzdWVXYXJuaW5nOiAoY29kZTogc3RyaW5nLCB3YXJuaW5nOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmlmIChERVZfTU9ERSkge1xuICAvLyBFbnN1cmUgd2FybmluZ3MgYXJlIGlzc3VlZCBvbmx5IDF4LCBldmVuIGlmIG11bHRpcGxlIHZlcnNpb25zIG9mIExpdFxuICAvLyBhcmUgbG9hZGVkLlxuICBnbG9iYWxUaGlzLmxpdElzc3VlZFdhcm5pbmdzID8/PSBuZXcgU2V0KCk7XG5cbiAgLyoqXG4gICAqIElzc3VlIGEgd2FybmluZyBpZiB3ZSBoYXZlbid0IGFscmVhZHksIGJhc2VkIGVpdGhlciBvbiBgY29kZWAgb3IgYHdhcm5pbmdgLlxuICAgKiBXYXJuaW5ncyBhcmUgZGlzYWJsZWQgYXV0b21hdGljYWxseSBvbmx5IGJ5IGB3YXJuaW5nYDsgZGlzYWJsaW5nIHZpYSBgY29kZWBcbiAgICogY2FuIGJlIGRvbmUgYnkgdXNlcnMuXG4gICAqL1xuICBpc3N1ZVdhcm5pbmcgPSAoY29kZTogc3RyaW5nLCB3YXJuaW5nOiBzdHJpbmcpID0+IHtcbiAgICB3YXJuaW5nICs9IGAgU2VlIGh0dHBzOi8vbGl0LmRldi9tc2cvJHtjb2RlfSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gO1xuICAgIGlmIChcbiAgICAgICFnbG9iYWxUaGlzLmxpdElzc3VlZFdhcm5pbmdzIS5oYXMod2FybmluZykgJiZcbiAgICAgICFnbG9iYWxUaGlzLmxpdElzc3VlZFdhcm5pbmdzIS5oYXMoY29kZSlcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICAgIGdsb2JhbFRoaXMubGl0SXNzdWVkV2FybmluZ3MhLmFkZCh3YXJuaW5nKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIE92ZXJsb2FkcyBmb3IgcHJvcGVydHkgZGVjb3JhdG9yIHNvIHRoYXQgVHlwZVNjcmlwdCBjYW4gaW5mZXIgdGhlIGNvcnJlY3Rcbi8vIHJldHVybiB0eXBlIHdoZW4gYSBkZWNvcmF0b3IgaXMgdXNlZCBhcyBhbiBhY2Nlc3NvciBkZWNvcmF0b3Igb3IgYSBzZXR0ZXJcbi8vIGRlY29yYXRvci5cbmV4cG9ydCB0eXBlIFByb3BlcnR5RGVjb3JhdG9yID0ge1xuICAvLyBhY2Nlc3NvciBkZWNvcmF0b3Igc2lnbmF0dXJlXG4gIDxDIGV4dGVuZHMgSW50ZXJmYWNlPFJlYWN0aXZlRWxlbWVudD4sIFY+KFxuICAgIHRhcmdldDogQ2xhc3NBY2Nlc3NvckRlY29yYXRvclRhcmdldDxDLCBWPixcbiAgICBjb250ZXh0OiBDbGFzc0FjY2Vzc29yRGVjb3JhdG9yQ29udGV4dDxDLCBWPlxuICApOiBDbGFzc0FjY2Vzc29yRGVjb3JhdG9yUmVzdWx0PEMsIFY+O1xuXG4gIC8vIHNldHRlciBkZWNvcmF0b3Igc2lnbmF0dXJlXG4gIDxDIGV4dGVuZHMgSW50ZXJmYWNlPFJlYWN0aXZlRWxlbWVudD4sIFY+KFxuICAgIHRhcmdldDogKHZhbHVlOiBWKSA9PiB2b2lkLFxuICAgIGNvbnRleHQ6IENsYXNzU2V0dGVyRGVjb3JhdG9yQ29udGV4dDxDLCBWPlxuICApOiAodGhpczogQywgdmFsdWU6IFYpID0+IHZvaWQ7XG5cbiAgLy8gbGVnYWN5IGRlY29yYXRvciBzaWduYXR1cmVcbiAgKFxuICAgIHByb3RvT3JEZXNjcmlwdG9yOiBPYmplY3QsXG4gICAgbmFtZTogUHJvcGVydHlLZXksXG4gICAgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICk6IGFueTtcbn07XG5cbmNvbnN0IGxlZ2FjeVByb3BlcnR5ID0gKFxuICBvcHRpb25zOiBQcm9wZXJ0eURlY2xhcmF0aW9uIHwgdW5kZWZpbmVkLFxuICBwcm90bzogT2JqZWN0LFxuICBuYW1lOiBQcm9wZXJ0eUtleVxuKSA9PiB7XG4gIGNvbnN0IGhhc093blByb3BlcnR5ID0gcHJvdG8uaGFzT3duUHJvcGVydHkobmFtZSk7XG4gIChwcm90by5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgUmVhY3RpdmVFbGVtZW50KS5jcmVhdGVQcm9wZXJ0eShuYW1lLCBvcHRpb25zKTtcbiAgLy8gRm9yIGFjY2Vzc29ycyAod2hpY2ggaGF2ZSBhIGRlc2NyaXB0b3Igb24gdGhlIHByb3RvdHlwZSkgd2UgbmVlZCB0b1xuICAvLyByZXR1cm4gYSBkZXNjcmlwdG9yLCBvdGhlcndpc2UgVHlwZVNjcmlwdCBvdmVyd3JpdGVzIHRoZSBkZXNjcmlwdG9yIHdlXG4gIC8vIGRlZmluZSBpbiBjcmVhdGVQcm9wZXJ0eSgpIHdpdGggdGhlIG9yaWdpbmFsIGRlc2NyaXB0b3IuIFdlIGRvbid0IGRvIHRoaXNcbiAgLy8gZm9yIGZpZWxkcywgd2hpY2ggZG9uJ3QgaGF2ZSBhIGRlc2NyaXB0b3IsIGJlY2F1c2UgdGhpcyBjb3VsZCBvdmVyd3JpdGVcbiAgLy8gZGVzY3JpcHRvciBkZWZpbmVkIGJ5IG90aGVyIGRlY29yYXRvcnMuXG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eVxuICAgID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgbmFtZSlcbiAgICA6IHVuZGVmaW5lZDtcbn07XG5cbi8vIFRoaXMgaXMgZHVwbGljYXRlZCBmcm9tIGEgc2ltaWxhciB2YXJpYWJsZSBpbiByZWFjdGl2ZS1lbGVtZW50LnRzLCBidXRcbi8vIGFjdHVhbGx5IG1ha2VzIHNlbnNlIHRvIGhhdmUgdGhpcyBkZWZhdWx0IGRlZmluZWQgd2l0aCB0aGUgZGVjb3JhdG9yLCBzb1xuLy8gdGhhdCBkaWZmZXJlbnQgZGVjb3JhdG9ycyBjb3VsZCBoYXZlIGRpZmZlcmVudCBkZWZhdWx0cy5cbmNvbnN0IGRlZmF1bHRQcm9wZXJ0eURlY2xhcmF0aW9uOiBQcm9wZXJ0eURlY2xhcmF0aW9uID0ge1xuICBhdHRyaWJ1dGU6IHRydWUsXG4gIHR5cGU6IFN0cmluZyxcbiAgY29udmVydGVyOiBkZWZhdWx0Q29udmVydGVyLFxuICByZWZsZWN0OiBmYWxzZSxcbiAgaGFzQ2hhbmdlZDogbm90RXF1YWwsXG59O1xuXG4vLyBUZW1wb3JhcnkgdHlwZSwgdW50aWwgZ29vZ2xlMyBpcyBvbiBUeXBlU2NyaXB0IDUuMlxudHlwZSBTdGFuZGFyZFByb3BlcnR5Q29udGV4dDxDLCBWPiA9IChcbiAgfCBDbGFzc0FjY2Vzc29yRGVjb3JhdG9yQ29udGV4dDxDLCBWPlxuICB8IENsYXNzU2V0dGVyRGVjb3JhdG9yQ29udGV4dDxDLCBWPlxuKSAmIHttZXRhZGF0YTogb2JqZWN0fTtcblxuLyoqXG4gKiBXcmFwcyBhIGNsYXNzIGFjY2Vzc29yIG9yIHNldHRlciBzbyB0aGF0IGByZXF1ZXN0VXBkYXRlKClgIGlzIGNhbGxlZCB3aXRoIHRoZVxuICogcHJvcGVydHkgbmFtZSBhbmQgb2xkIHZhbHVlIHdoZW4gdGhlIGFjY2Vzc29yIGlzIHNldC5cbiAqL1xuZXhwb3J0IGNvbnN0IHN0YW5kYXJkUHJvcGVydHkgPSA8QyBleHRlbmRzIEludGVyZmFjZTxSZWFjdGl2ZUVsZW1lbnQ+LCBWPihcbiAgb3B0aW9uczogUHJvcGVydHlEZWNsYXJhdGlvbiA9IGRlZmF1bHRQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICB0YXJnZXQ6IENsYXNzQWNjZXNzb3JEZWNvcmF0b3JUYXJnZXQ8QywgVj4gfCAoKHZhbHVlOiBWKSA9PiB2b2lkKSxcbiAgY29udGV4dDogU3RhbmRhcmRQcm9wZXJ0eUNvbnRleHQ8QywgVj5cbik6IENsYXNzQWNjZXNzb3JEZWNvcmF0b3JSZXN1bHQ8QywgVj4gfCAoKHRoaXM6IEMsIHZhbHVlOiBWKSA9PiB2b2lkKSA9PiB7XG4gIGNvbnN0IHtraW5kLCBtZXRhZGF0YX0gPSBjb250ZXh0O1xuXG4gIGlmIChERVZfTU9ERSAmJiBtZXRhZGF0YSA9PSBudWxsKSB7XG4gICAgaXNzdWVXYXJuaW5nKFxuICAgICAgJ21pc3NpbmctY2xhc3MtbWV0YWRhdGEnLFxuICAgICAgYFRoZSBjbGFzcyAke3RhcmdldH0gaXMgbWlzc2luZyBkZWNvcmF0b3IgbWV0YWRhdGEuIFRoaXMgYCArXG4gICAgICAgIGBjb3VsZCBtZWFuIHRoYXQgeW91J3JlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBzdXBwb3J0cyBkZWNvcmF0b3JzIGAgK1xuICAgICAgICBgYnV0IGRvZXNuJ3Qgc3VwcG9ydCBkZWNvcmF0b3IgbWV0YWRhdGEsIHN1Y2ggYXMgVHlwZVNjcmlwdCA1LjEuIGAgK1xuICAgICAgICBgUGxlYXNlIHVwZGF0ZSB5b3VyIGNvbXBpbGVyLmBcbiAgICApO1xuICB9XG5cbiAgLy8gU3RvcmUgdGhlIHByb3BlcnR5IG9wdGlvbnNcbiAgbGV0IHByb3BlcnRpZXMgPSBnbG9iYWxUaGlzLmxpdFByb3BlcnR5TWV0YWRhdGEuZ2V0KG1ldGFkYXRhKTtcbiAgaWYgKHByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgIGdsb2JhbFRoaXMubGl0UHJvcGVydHlNZXRhZGF0YS5zZXQobWV0YWRhdGEsIChwcm9wZXJ0aWVzID0gbmV3IE1hcCgpKSk7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICdzZXR0ZXInKSB7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUob3B0aW9ucyk7XG4gICAgb3B0aW9ucy53cmFwcGVkID0gdHJ1ZTtcbiAgfVxuICBwcm9wZXJ0aWVzLnNldChjb250ZXh0Lm5hbWUsIG9wdGlvbnMpO1xuXG4gIGlmIChraW5kID09PSAnYWNjZXNzb3InKSB7XG4gICAgLy8gU3RhbmRhcmQgZGVjb3JhdG9ycyBjYW5ub3QgZHluYW1pY2FsbHkgbW9kaWZ5IHRoZSBjbGFzcywgc28gd2UgY2FuJ3RcbiAgICAvLyByZXBsYWNlIGEgZmllbGQgd2l0aCBhY2Nlc3NvcnMuIFRoZSB1c2VyIG11c3QgdXNlIHRoZSBuZXcgYGFjY2Vzc29yYFxuICAgIC8vIGtleXdvcmQgaW5zdGVhZC5cbiAgICBjb25zdCB7bmFtZX0gPSBjb250ZXh0O1xuICAgIHJldHVybiB7XG4gICAgICBzZXQodGhpczogUmVhY3RpdmVFbGVtZW50LCB2OiBWKSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gKFxuICAgICAgICAgIHRhcmdldCBhcyBDbGFzc0FjY2Vzc29yRGVjb3JhdG9yVGFyZ2V0PEMsIFY+XG4gICAgICAgICkuZ2V0LmNhbGwodGhpcyBhcyB1bmtub3duIGFzIEMpO1xuICAgICAgICAodGFyZ2V0IGFzIENsYXNzQWNjZXNzb3JEZWNvcmF0b3JUYXJnZXQ8QywgVj4pLnNldC5jYWxsKFxuICAgICAgICAgIHRoaXMgYXMgdW5rbm93biBhcyBDLFxuICAgICAgICAgIHZcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBvcHRpb25zLCB0cnVlLCB2KTtcbiAgICAgIH0sXG4gICAgICBpbml0KHRoaXM6IFJlYWN0aXZlRWxlbWVudCwgdjogVik6IFYge1xuICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fJGNoYW5nZVByb3BlcnR5KG5hbWUsIHVuZGVmaW5lZCwgb3B0aW9ucywgdik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9LFxuICAgIH0gYXMgdW5rbm93biBhcyBDbGFzc0FjY2Vzc29yRGVjb3JhdG9yUmVzdWx0PEMsIFY+O1xuICB9IGVsc2UgaWYgKGtpbmQgPT09ICdzZXR0ZXInKSB7XG4gICAgY29uc3Qge25hbWV9ID0gY29udGV4dDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IFJlYWN0aXZlRWxlbWVudCwgdmFsdWU6IFYpIHtcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpc1tuYW1lIGFzIGtleW9mIFJlYWN0aXZlRWxlbWVudF07XG4gICAgICAodGFyZ2V0IGFzICh2YWx1ZTogVikgPT4gdm9pZCkuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLnJlcXVlc3RVcGRhdGUobmFtZSwgb2xkVmFsdWUsIG9wdGlvbnMsIHRydWUsIHZhbHVlKTtcbiAgICB9IGFzIHVua25vd24gYXMgKHRoaXM6IEMsIHZhbHVlOiBWKSA9PiB2b2lkO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZGVjb3JhdG9yIGxvY2F0aW9uOiAke2tpbmR9YCk7XG59O1xuXG4vKipcbiAqIEEgY2xhc3MgZmllbGQgb3IgYWNjZXNzb3IgZGVjb3JhdG9yIHdoaWNoIGNyZWF0ZXMgYSByZWFjdGl2ZSBwcm9wZXJ0eSB0aGF0XG4gKiByZWZsZWN0cyBhIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIHZhbHVlLiBXaGVuIGEgZGVjb3JhdGVkIHByb3BlcnR5IGlzIHNldFxuICogdGhlIGVsZW1lbnQgd2lsbCB1cGRhdGUgYW5kIHJlbmRlci4gQSB7QGxpbmtjb2RlIFByb3BlcnR5RGVjbGFyYXRpb259IG1heVxuICogb3B0aW9uYWxseSBiZSBzdXBwbGllZCB0byBjb25maWd1cmUgcHJvcGVydHkgZmVhdHVyZXMuXG4gKlxuICogVGhpcyBkZWNvcmF0b3Igc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgcHVibGljIGZpZWxkcy4gQXMgcHVibGljIGZpZWxkcyxcbiAqIHByb3BlcnRpZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXMgcHJpbWFyaWx5IHNldHRhYmxlIGJ5IGVsZW1lbnQgdXNlcnMsXG4gKiBlaXRoZXIgdmlhIGF0dHJpYnV0ZSBvciB0aGUgcHJvcGVydHkgaXRzZWxmLlxuICpcbiAqIEdlbmVyYWxseSwgcHJvcGVydGllcyB0aGF0IGFyZSBjaGFuZ2VkIGJ5IHRoZSBlbGVtZW50IHNob3VsZCBiZSBwcml2YXRlIG9yXG4gKiBwcm90ZWN0ZWQgZmllbGRzIGFuZCBzaG91bGQgdXNlIHRoZSB7QGxpbmtjb2RlIHN0YXRlfSBkZWNvcmF0b3IuXG4gKlxuICogSG93ZXZlciwgc29tZXRpbWVzIGVsZW1lbnQgY29kZSBkb2VzIG5lZWQgdG8gc2V0IGEgcHVibGljIHByb3BlcnR5LiBUaGlzXG4gKiBzaG91bGQgdHlwaWNhbGx5IG9ubHkgYmUgZG9uZSBpbiByZXNwb25zZSB0byB1c2VyIGludGVyYWN0aW9uLCBhbmQgYW4gZXZlbnRcbiAqIHNob3VsZCBiZSBmaXJlZCBpbmZvcm1pbmcgdGhlIHVzZXI7IGZvciBleGFtcGxlLCBhIGNoZWNrYm94IHNldHMgaXRzXG4gKiBgY2hlY2tlZGAgcHJvcGVydHkgd2hlbiBjbGlja2VkIGFuZCBmaXJlcyBhIGBjaGFuZ2VkYCBldmVudC4gTXV0YXRpbmcgcHVibGljXG4gKiBwcm9wZXJ0aWVzIHNob3VsZCB0eXBpY2FsbHkgbm90IGJlIGRvbmUgZm9yIG5vbi1wcmltaXRpdmUgKG9iamVjdCBvciBhcnJheSlcbiAqIHByb3BlcnRpZXMuIEluIG90aGVyIGNhc2VzIHdoZW4gYW4gZWxlbWVudCBuZWVkcyB0byBtYW5hZ2Ugc3RhdGUsIGEgcHJpdmF0ZVxuICogcHJvcGVydHkgZGVjb3JhdGVkIHZpYSB0aGUge0BsaW5rY29kZSBzdGF0ZX0gZGVjb3JhdG9yIHNob3VsZCBiZSB1c2VkLiBXaGVuXG4gKiBuZWVkZWQsIHN0YXRlIHByb3BlcnRpZXMgY2FuIGJlIGluaXRpYWxpemVkIHZpYSBwdWJsaWMgcHJvcGVydGllcyB0b1xuICogZmFjaWxpdGF0ZSBjb21wbGV4IGludGVyYWN0aW9ucy5cbiAqXG4gKiBgYGB0c1xuICogY2xhc3MgTXlFbGVtZW50IHtcbiAqICAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICogICBjbGlja2VkID0gZmFsc2U7XG4gKiB9XG4gKiBgYGBcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JcbiAqIEBFeHBvcnREZWNvcmF0ZWRJdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHkob3B0aW9ucz86IFByb3BlcnR5RGVjbGFyYXRpb24pOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gIHJldHVybiA8QyBleHRlbmRzIEludGVyZmFjZTxSZWFjdGl2ZUVsZW1lbnQ+LCBWPihcbiAgICBwcm90b09yVGFyZ2V0OlxuICAgICAgfCBvYmplY3RcbiAgICAgIHwgQ2xhc3NBY2Nlc3NvckRlY29yYXRvclRhcmdldDxDLCBWPlxuICAgICAgfCAoKHZhbHVlOiBWKSA9PiB2b2lkKSxcbiAgICBuYW1lT3JDb250ZXh0OlxuICAgICAgfCBQcm9wZXJ0eUtleVxuICAgICAgfCBDbGFzc0FjY2Vzc29yRGVjb3JhdG9yQ29udGV4dDxDLCBWPlxuICAgICAgfCBDbGFzc1NldHRlckRlY29yYXRvckNvbnRleHQ8QywgVj5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICApOiBhbnkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgbmFtZU9yQ29udGV4dCA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzdGFuZGFyZFByb3BlcnR5PEMsIFY+KFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHByb3RvT3JUYXJnZXQgYXNcbiAgICAgICAgICAgICAgfCBDbGFzc0FjY2Vzc29yRGVjb3JhdG9yVGFyZ2V0PEMsIFY+XG4gICAgICAgICAgICAgIHwgKCh2YWx1ZTogVikgPT4gdm9pZCksXG4gICAgICAgICAgICBuYW1lT3JDb250ZXh0IGFzIFN0YW5kYXJkUHJvcGVydHlDb250ZXh0PEMsIFY+XG4gICAgICAgICAgKVxuICAgICAgICA6IGxlZ2FjeVByb3BlcnR5KFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHByb3RvT3JUYXJnZXQgYXMgT2JqZWN0LFxuICAgICAgICAgICAgbmFtZU9yQ29udGV4dCBhcyBQcm9wZXJ0eUtleVxuICAgICAgICAgIClcbiAgICApIGFzIFByb3BlcnR5RGVjb3JhdG9yO1xuICB9O1xufVxuIiwgImV4cG9ydCpmcm9tXCJAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qc1wiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydHkuanMubWFwXG4iLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkc5dGRHOXZiSE11WTI5c2IzSnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZkSE12Wkc5dGRHOXZiSE11WTI5c2IzSnpMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUlpZlE9PSIsICJpbXBvcnQgKiBhcyBzbWFydHByb21pc2UgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlJztcblxuLyoqXG4gKiBkZWxheSBzb21ldGhpbmcsIHdvcmtzIGxpa2Ugc2V0VGltZW91dFxuICogQHBhcmFtIHRpbWVJbk1pbGxpc2Vjb25kQXJnXG4gKiBAcGFyYW0gcGFzc09uQXJnXG4gKi9cbmV4cG9ydCBsZXQgZGVsYXlGb3IgPSBhc3luYyA8VD4oXG4gIHRpbWVJbk1pbGxpc2Vjb25kQXJnOiBudW1iZXIsXG4gIHBhc3NPbkFyZz86IFQsXG4gIHVucmVmZWRBcmcgPSBmYWxzZVxuKSA9PiB7XG4gIGNvbnN0IHRpbWVvdXQgPSBuZXcgVGltZW91dCh0aW1lSW5NaWxsaXNlY29uZEFyZywgbnVsbCwgdW5yZWZlZEFyZyk7XG4gIGF3YWl0IHRpbWVvdXQucHJvbWlzZTtcbiAgcmV0dXJuIHBhc3NPbkFyZztcbn07XG5cbi8qKlxuICogZGVsYXkgZm9yIGEgcmFuZG9tIHRpbWVcbiAqL1xuZXhwb3J0IGxldCBkZWxheUZvclJhbmRvbSA9IGFzeW5jIDxUPihcbiAgdGltZU1pbkluTWlsbGlzZWNvbmRBcmc6IG51bWJlcixcbiAgdGltZU1heEluTWlsbGlzZWNvbmRBcmc6IG51bWJlcixcbiAgcGFzc09uQXJnPzogVCxcbiAgdW5yZWZlZEFyZyA9IGZhbHNlXG4pID0+IHtcbiAgYXdhaXQgZGVsYXlGb3IoXG4gICAgTWF0aC5yYW5kb20oKSAqICh0aW1lTWF4SW5NaWxsaXNlY29uZEFyZyAtIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnKSArIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLFxuICAgIG51bGwsXG4gICAgdW5yZWZlZEFyZ1xuICApO1xuICByZXR1cm4gcGFzc09uQXJnO1xufTtcblxuZXhwb3J0IGNsYXNzIFRpbWVvdXQ8VD4ge1xuICBwcm9taXNlOiBQcm9taXNlPFQ+O1xuICBwcml2YXRlIF9kZWZlcnJlZDogc21hcnRwcm9taXNlLkRlZmVycmVkPFQ+O1xuICBwcml2YXRlIF90aW1lb3V0O1xuICBwcml2YXRlIF9jYW5jZWxsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIHRpbWVvdXRJbk1pbGxpczogbnVtYmVyO1xuICBwcml2YXRlIHN0YXJ0ZWQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih0aW1lSW5NaWxsaXNlY29uZEFyZywgcGFzc09uPzogVCwgdW5yZWZlZEFyZyA9IGZhbHNlKSB7XG4gICAgdGhpcy50aW1lb3V0SW5NaWxsaXMgPSB0aW1lSW5NaWxsaXNlY29uZEFyZztcbiAgICB0aGlzLl9kZWZlcnJlZCA9IHNtYXJ0cHJvbWlzZS5kZWZlcjxUPigpO1xuICAgIHRoaXMucHJvbWlzZSA9IHRoaXMuX2RlZmVycmVkLnByb21pc2U7XG4gICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jYW5jZWxsZWQpIHtcbiAgICAgICAgdGhpcy5fZGVmZXJyZWQucmVzb2x2ZShwYXNzT24pO1xuICAgICAgfVxuICAgIH0sIHRpbWVJbk1pbGxpc2Vjb25kQXJnKTtcbiAgICB0aGlzLnN0YXJ0ZWQgPSBEYXRlLm5vdygpO1xuICAgIGlmICh1bnJlZmVkQXJnKSB7XG4gICAgICB0aGlzLm1ha2VVbnJlZmVkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHVucmVmZmluZyBhIHRpbWVvdXQgY2F1c2VzIHRoZSBub2RlIHByb2Nlc3MgdG8gbm90IHdhaXQgZm9yIGNvbXBsZXRpb24gYmVmb3JlIGV4aXRcbiAgICovXG4gIHB1YmxpYyBtYWtlVW5yZWZlZCgpIHtcbiAgICB0aGlzLl90aW1lb3V0LnVucmVmKCk7XG4gIH1cblxuICAvKipcbiAgICogY2FuY2VscyB0aGUgdGltZXJcbiAgICovXG4gIHB1YmxpYyBjYW5jZWwoKSB7XG4gICAgdGhpcy5fY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGltZUxlZnQoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zdGFydGVkICsgdGhpcy50aW1lb3V0SW5NaWxsaXMgLSBEYXRlLm5vdygpO1xuICAgIHJldHVybiByZXN1bHQgPiAwID8gcmVzdWx0IDogMDtcbiAgfVxufVxuIiwgImV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTkwY3k5cGJtUmxlQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pSW4wPSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlc2NhcGVTdHJpbmdSZWdleHAoc3RyaW5nKSB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nJyk7XG5cdH1cblxuXHQvLyBFc2NhcGUgY2hhcmFjdGVycyB3aXRoIHNwZWNpYWwgbWVhbmluZyBlaXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgY2hhcmFjdGVyIHNldHMuXG5cdC8vIFVzZSBhIHNpbXBsZSBiYWNrc2xhc2ggZXNjYXBlIHdoZW4gaXRcdTIwMTlzIGFsd2F5cyB2YWxpZCwgYW5kIGEgYFxceG5uYCBlc2NhcGUgd2hlbiB0aGUgc2ltcGxlciBmb3JtIHdvdWxkIGJlIGRpc2FsbG93ZWQgYnkgVW5pY29kZSBwYXR0ZXJuc1x1MjAxOSBzdHJpY3RlciBncmFtbWFyLlxuXHRyZXR1cm4gc3RyaW5nXG5cdFx0LnJlcGxhY2UoL1t8XFxcXHt9KClbXFxdXiQrKj8uXS9nLCAnXFxcXCQmJylcblx0XHQucmVwbGFjZSgvLS9nLCAnXFxcXHgyZCcpO1xufVxuIiwgImltcG9ydCBlc2NhcGVTdHJpbmdSZWdleHAgZnJvbSAnZXNjYXBlLXN0cmluZy1yZWdleHAnO1xuXG5jb25zdCByZWdleHBDYWNoZSA9IG5ldyBNYXAoKTtcblxuY29uc3Qgc2FuaXRpemVBcnJheSA9IChpbnB1dCwgaW5wdXROYW1lKSA9PiB7XG5cdGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcblx0XHRzd2l0Y2ggKHR5cGVvZiBpbnB1dCkge1xuXHRcdFx0Y2FzZSAnc3RyaW5nJzpcblx0XHRcdFx0aW5wdXQgPSBbaW5wdXRdO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3VuZGVmaW5lZCc6XG5cdFx0XHRcdGlucHV0ID0gW107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJyR7aW5wdXROYW1lfScgdG8gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXksIGJ1dCBnb3QgYSB0eXBlIG9mICcke3R5cGVvZiBpbnB1dH0nYCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGlucHV0LmZpbHRlcihzdHJpbmcgPT4ge1xuXHRcdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKHR5cGVvZiBzdHJpbmcgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJyR7aW5wdXROYW1lfScgdG8gYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncywgYnV0IGZvdW5kIGEgdHlwZSBvZiAnJHt0eXBlb2Ygc3RyaW5nfScgaW4gdGhlIGFycmF5YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pO1xufTtcblxuY29uc3QgbWFrZVJlZ2V4cCA9IChwYXR0ZXJuLCBvcHRpb25zKSA9PiB7XG5cdG9wdGlvbnMgPSB7XG5cdFx0Y2FzZVNlbnNpdGl2ZTogZmFsc2UsXG5cdFx0Li4ub3B0aW9ucyxcblx0fTtcblxuXHRjb25zdCBjYWNoZUtleSA9IHBhdHRlcm4gKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKTtcblxuXHRpZiAocmVnZXhwQ2FjaGUuaGFzKGNhY2hlS2V5KSkge1xuXHRcdHJldHVybiByZWdleHBDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXHR9XG5cblx0Y29uc3QgbmVnYXRlZCA9IHBhdHRlcm5bMF0gPT09ICchJztcblxuXHRpZiAobmVnYXRlZCkge1xuXHRcdHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKDEpO1xuXHR9XG5cblx0cGF0dGVybiA9IGVzY2FwZVN0cmluZ1JlZ2V4cChwYXR0ZXJuKS5yZXBsYWNlKC9cXFxcXFwqL2csICdbXFxcXHNcXFxcU10qJyk7XG5cblx0Y29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgXiR7cGF0dGVybn0kYCwgb3B0aW9ucy5jYXNlU2Vuc2l0aXZlID8gJycgOiAnaScpO1xuXHRyZWdleHAubmVnYXRlZCA9IG5lZ2F0ZWQ7XG5cdHJlZ2V4cENhY2hlLnNldChjYWNoZUtleSwgcmVnZXhwKTtcblxuXHRyZXR1cm4gcmVnZXhwO1xufTtcblxuY29uc3QgYmFzZU1hdGNoZXIgPSAoaW5wdXRzLCBwYXR0ZXJucywgb3B0aW9ucywgZmlyc3RNYXRjaE9ubHkpID0+IHtcblx0aW5wdXRzID0gc2FuaXRpemVBcnJheShpbnB1dHMsICdpbnB1dHMnKTtcblx0cGF0dGVybnMgPSBzYW5pdGl6ZUFycmF5KHBhdHRlcm5zLCAncGF0dGVybnMnKTtcblxuXHRpZiAocGF0dGVybnMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0cGF0dGVybnMgPSBwYXR0ZXJucy5tYXAocGF0dGVybiA9PiBtYWtlUmVnZXhwKHBhdHRlcm4sIG9wdGlvbnMpKTtcblxuXHRjb25zdCB7YWxsUGF0dGVybnN9ID0gb3B0aW9ucyB8fCB7fTtcblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHQvLyBTdHJpbmcgaXMgaW5jbHVkZWQgb25seSBpZiBpdCBtYXRjaGVzIGF0IGxlYXN0IG9uZSBub24tbmVnYXRlZCBwYXR0ZXJuIHN1cHBsaWVkLlxuXHRcdC8vIE5vdGU6IHRoZSBgYWxsUGF0dGVybnNgIG9wdGlvbiByZXF1aXJlcyBldmVyeSBub24tbmVnYXRlZCBwYXR0ZXJuIHRvIGJlIG1hdGNoZWQgb25jZS5cblx0XHQvLyBNYXRjaGluZyBhIG5lZ2F0ZWQgcGF0dGVybiBleGNsdWRlcyB0aGUgc3RyaW5nLlxuXHRcdGxldCBtYXRjaGVzO1xuXHRcdGNvbnN0IGRpZEZpdCA9IFsuLi5wYXR0ZXJuc10uZmlsbChmYWxzZSk7XG5cblx0XHRmb3IgKGNvbnN0IFtpbmRleCwgcGF0dGVybl0gb2YgcGF0dGVybnMuZW50cmllcygpKSB7XG5cdFx0XHRpZiAocGF0dGVybi50ZXN0KGlucHV0KSkge1xuXHRcdFx0XHRkaWRGaXRbaW5kZXhdID0gdHJ1ZTtcblx0XHRcdFx0bWF0Y2hlcyA9ICFwYXR0ZXJuLm5lZ2F0ZWQ7XG5cblx0XHRcdFx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHQhKFxuXHRcdFx0XHRtYXRjaGVzID09PSBmYWxzZVxuXHRcdFx0XHR8fCAobWF0Y2hlcyA9PT0gdW5kZWZpbmVkICYmIHBhdHRlcm5zLnNvbWUocGF0dGVybiA9PiAhcGF0dGVybi5uZWdhdGVkKSlcblx0XHRcdFx0fHwgKGFsbFBhdHRlcm5zICYmIGRpZEZpdC5zb21lKCh5ZXMsIGluZGV4KSA9PiAheWVzICYmICFwYXR0ZXJuc1tpbmRleF0ubmVnYXRlZCkpXG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHRyZXN1bHQucHVzaChpbnB1dCk7XG5cblx0XHRcdGlmIChmaXJzdE1hdGNoT25seSkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoZXIoaW5wdXRzLCBwYXR0ZXJucywgb3B0aW9ucykge1xuXHRyZXR1cm4gYmFzZU1hdGNoZXIoaW5wdXRzLCBwYXR0ZXJucywgb3B0aW9ucywgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaChpbnB1dHMsIHBhdHRlcm5zLCBvcHRpb25zKSB7XG5cdHJldHVybiBiYXNlTWF0Y2hlcihpbnB1dHMsIHBhdHRlcm5zLCBvcHRpb25zLCB0cnVlKS5sZW5ndGggPiAwO1xufVxuIiwgIi8vIHRoaXJkIHBhcnR5IHNjb3BlXG5pbXBvcnQgKiBhcyBtYXRjaGVyIGZyb20gJ21hdGNoZXInO1xuXG5leHBvcnQgeyBtYXRjaGVyIH07XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0bWF0Y2gucGx1Z2lucy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTbWFydE1hdGNoIHtcbiAgcHVibGljIHdpbGRjYXJkOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHdpbGRjYXJkQXJnOiBzdHJpbmcpIHtcbiAgICB0aGlzLndpbGRjYXJkID0gd2lsZGNhcmRBcmc7XG4gIH1cblxuICBwdWJsaWMgbWF0Y2gobWF0Y2hTdHJpbmdBcmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwbHVnaW5zLm1hdGNoZXIuaXNNYXRjaChtYXRjaFN0cmluZ0FyZywgdGhpcy53aWxkY2FyZCk7XG4gIH1cbn1cbiIsICJmdW5jdGlvbiBoKG4sdCxlLHIscyxpLGEsbCl7cmV0dXJuIGguZnJvbVRaKGgudHAobix0LGUscixzLGksYSksbCl9aC5mcm9tVFpJU089KG4sdCxlKT0+aC5mcm9tVFooayhuLHQpLGUpO2guZnJvbVRaPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bmV3IERhdGUoRGF0ZS5VVEMobi55LG4ubS0xLG4uZCxuLmgsbi5pLG4ucykpLHI9RChuLnR6LGUpLHM9bmV3IERhdGUoZS5nZXRUaW1lKCktciksaT1EKG4udHoscyk7aWYoaS1yPT09MClyZXR1cm4gczt7bGV0IGE9bmV3IERhdGUoZS5nZXRUaW1lKCktaSksbD1EKG4udHosYSk7aWYobC1pPT09MClyZXR1cm4gYTtpZighdCYmbC1pPjApcmV0dXJuIGE7aWYodCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgcGFzc2VkIHRvIGZyb21UWigpXCIpO3JldHVybiBzfX07aC50b1RaPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIse3RpbWVab25lOnR9KS5yZXBsYWNlKC9bXFx1MjAyZl0vLFwiIFwiKSxyPW5ldyBEYXRlKGUpO3JldHVybnt5OnIuZ2V0RnVsbFllYXIoKSxtOnIuZ2V0TW9udGgoKSsxLGQ6ci5nZXREYXRlKCksaDpyLmdldEhvdXJzKCksaTpyLmdldE1pbnV0ZXMoKSxzOnIuZ2V0U2Vjb25kcygpLHR6OnR9fTtoLnRwPShuLHQsZSxyLHMsaSxhKT0+KHt5Om4sbTp0LGQ6ZSxoOnIsaTpzLHM6aSx0ejphfSk7ZnVuY3Rpb24gRChuLHQ9bmV3IERhdGUpe2xldCBlPXQudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLHt0aW1lWm9uZTpuLHRpbWVab25lTmFtZTpcInNob3J0T2Zmc2V0XCJ9KS5zcGxpdChcIiBcIikuc2xpY2UoLTEpWzBdLHI9dC50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIpLnJlcGxhY2UoL1tcXHUyMDJmXS8sXCIgXCIpO3JldHVybiBEYXRlLnBhcnNlKGAke3J9IEdNVGApLURhdGUucGFyc2UoYCR7cn0gJHtlfWApfWZ1bmN0aW9uIGsobix0KXtsZXQgZT1uZXcgRGF0ZShEYXRlLnBhcnNlKG4pKTtpZihpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoXCJtaW5pdHo6IEludmFsaWQgSVNPODYwMSBwYXNzZWQgdG8gcGFyc2VyLlwiKTtsZXQgcj1uLnN1YnN0cmluZyg5KTtyZXR1cm4gbi5pbmNsdWRlcyhcIlpcIil8fHIuaW5jbHVkZXMoXCItXCIpfHxyLmluY2x1ZGVzKFwiK1wiKT9oLnRwKGUuZ2V0VVRDRnVsbFllYXIoKSxlLmdldFVUQ01vbnRoKCkrMSxlLmdldFVUQ0RhdGUoKSxlLmdldFVUQ0hvdXJzKCksZS5nZXRVVENNaW51dGVzKCksZS5nZXRVVENTZWNvbmRzKCksXCJFdGMvVVRDXCIpOmgudHAoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSsxLGUuZ2V0RGF0ZSgpLGUuZ2V0SG91cnMoKSxlLmdldE1pbnV0ZXMoKSxlLmdldFNlY29uZHMoKSx0KX1oLm1pbml0ej1oO3ZhciBiPTMyLHA9MzF8Yix2PVsxLDIsNCw4LDE2XSxkPWNsYXNze3BhdHRlcm47dGltZXpvbmU7c2Vjb25kO21pbnV0ZTtob3VyO2RheTttb250aDtkYXlPZldlZWs7bGFzdERheU9mTW9udGg7c3RhckRPTTtzdGFyRE9XO2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5wYXR0ZXJuPXQsdGhpcy50aW1lem9uZT1lLHRoaXMuc2Vjb25kPUFycmF5KDYwKS5maWxsKDApLHRoaXMubWludXRlPUFycmF5KDYwKS5maWxsKDApLHRoaXMuaG91cj1BcnJheSgyNCkuZmlsbCgwKSx0aGlzLmRheT1BcnJheSgzMSkuZmlsbCgwKSx0aGlzLm1vbnRoPUFycmF5KDEyKS5maWxsKDApLHRoaXMuZGF5T2ZXZWVrPUFycmF5KDcpLmZpbGwoMCksdGhpcy5sYXN0RGF5T2ZNb250aD0hMSx0aGlzLnN0YXJET009ITEsdGhpcy5zdGFyRE9XPSExLHRoaXMucGFyc2UoKX1wYXJzZSgpe2lmKCEodHlwZW9mIHRoaXMucGF0dGVybj09XCJzdHJpbmdcInx8dGhpcy5wYXR0ZXJuIGluc3RhbmNlb2YgU3RyaW5nKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFBhdHRlcm4gaGFzIHRvIGJlIG9mIHR5cGUgc3RyaW5nLlwiKTt0aGlzLnBhdHRlcm4uaW5kZXhPZihcIkBcIik+PTAmJih0aGlzLnBhdHRlcm49dGhpcy5oYW5kbGVOaWNrbmFtZXModGhpcy5wYXR0ZXJuKS50cmltKCkpO2xldCB0PXRoaXMucGF0dGVybi5yZXBsYWNlKC9cXHMrL2csXCIgXCIpLnNwbGl0KFwiIFwiKTtpZih0Lmxlbmd0aDw1fHx0Lmxlbmd0aD42KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogaW52YWxpZCBjb25maWd1cmF0aW9uIGZvcm1hdCAoJ1wiK3RoaXMucGF0dGVybitcIicpLCBleGFjdGx5IGZpdmUgb3Igc2l4IHNwYWNlIHNlcGFyYXRlZCBwYXJ0cyBhcmUgcmVxdWlyZWQuXCIpO2lmKHQubGVuZ3RoPT09NSYmdC51bnNoaWZ0KFwiMFwiKSx0WzNdLmluZGV4T2YoXCJMXCIpPj0wJiYodFszXT10WzNdLnJlcGxhY2UoXCJMXCIsXCJcIiksdGhpcy5sYXN0RGF5T2ZNb250aD0hMCksdFszXT09XCIqXCImJih0aGlzLnN0YXJET009ITApLHRbNF0ubGVuZ3RoPj0zJiYodFs0XT10aGlzLnJlcGxhY2VBbHBoYU1vbnRocyh0WzRdKSksdFs1XS5sZW5ndGg+PTMmJih0WzVdPXRoaXMucmVwbGFjZUFscGhhRGF5cyh0WzVdKSksdFs1XT09XCIqXCImJih0aGlzLnN0YXJET1c9ITApLHRoaXMucGF0dGVybi5pbmRleE9mKFwiP1wiKT49MCl7bGV0IGU9bmV3IGYobmV3IERhdGUsdGhpcy50aW1lem9uZSkuZ2V0RGF0ZSghMCk7dFswXT10WzBdLnJlcGxhY2UoXCI/XCIsZS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSksdFsxXT10WzFdLnJlcGxhY2UoXCI/XCIsZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSksdFsyXT10WzJdLnJlcGxhY2UoXCI/XCIsZS5nZXRIb3VycygpLnRvU3RyaW5nKCkpLHRoaXMuc3RhckRPTXx8KHRbM109dFszXS5yZXBsYWNlKFwiP1wiLGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkpKSx0WzRdPXRbNF0ucmVwbGFjZShcIj9cIiwoZS5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkpLHRoaXMuc3RhckRPV3x8KHRbNV09dFs1XS5yZXBsYWNlKFwiP1wiLGUuZ2V0RGF5KCkudG9TdHJpbmcoKSkpfXRoaXMudGhyb3dBdElsbGVnYWxDaGFyYWN0ZXJzKHQpLHRoaXMucGFydFRvQXJyYXkoXCJzZWNvbmRcIix0WzBdLDAsMSksdGhpcy5wYXJ0VG9BcnJheShcIm1pbnV0ZVwiLHRbMV0sMCwxKSx0aGlzLnBhcnRUb0FycmF5KFwiaG91clwiLHRbMl0sMCwxKSx0aGlzLnBhcnRUb0FycmF5KFwiZGF5XCIsdFszXSwtMSwxKSx0aGlzLnBhcnRUb0FycmF5KFwibW9udGhcIix0WzRdLC0xLDEpLHRoaXMucGFydFRvQXJyYXkoXCJkYXlPZldlZWtcIix0WzVdLDAscCksdGhpcy5kYXlPZldlZWtbN10mJih0aGlzLmRheU9mV2Vla1swXT10aGlzLmRheU9mV2Vla1s3XSl9cGFydFRvQXJyYXkodCxlLHIscyl7bGV0IGk9dGhpc1t0XSxhPXQ9PT1cImRheVwiJiZ0aGlzLmxhc3REYXlPZk1vbnRoO2lmKGU9PT1cIlwiJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgXCIrdCtcIiAoXCIrZStcIikgaXMgZW1wdHksIGNoZWNrIGZvciB0cmFpbGluZyBzcGFjZXMuXCIpO2lmKGU9PT1cIipcIilyZXR1cm4gaS5maWxsKHMpO2xldCBsPWUuc3BsaXQoXCIsXCIpO2lmKGwubGVuZ3RoPjEpZm9yKGxldCBvPTA7bzxsLmxlbmd0aDtvKyspdGhpcy5wYXJ0VG9BcnJheSh0LGxbb10scixzKTtlbHNlIGUuaW5kZXhPZihcIi1cIikhPT0tMSYmZS5pbmRleE9mKFwiL1wiKSE9PS0xP3RoaXMuaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcoZSx0LHIscyk6ZS5pbmRleE9mKFwiLVwiKSE9PS0xP3RoaXMuaGFuZGxlUmFuZ2UoZSx0LHIscyk6ZS5pbmRleE9mKFwiL1wiKSE9PS0xP3RoaXMuaGFuZGxlU3RlcHBpbmcoZSx0LHIscyk6ZSE9PVwiXCImJnRoaXMuaGFuZGxlTnVtYmVyKGUsdCxyLHMpfXRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyh0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZigoZT09PTU/L1teLyowLTksXFwtI0xdKy86L1teLyowLTksLV0rLykudGVzdCh0W2VdKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgXCIrZStcIiAoXCIrdFtlXStcIikgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLlwiKX1oYW5kbGVOdW1iZXIodCxlLHIscyl7bGV0IGk9dGhpcy5leHRyYWN0TnRoKHQsZSksYT1wYXJzZUludChpWzBdLDEwKStyO2lmKGlzTmFOKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogXCIrZStcIiBpcyBub3QgYSBudW1iZXI6ICdcIit0K1wiJ1wiKTt0aGlzLnNldFBhcnQoZSxhLGlbMV18fHMpfXNldFBhcnQodCxlLHIpe2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcyx0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IEludmFsaWQgcGFydCBzcGVjaWZpZWQ6IFwiK3QpO2lmKHQ9PT1cImRheU9mV2Vla1wiKXtpZihlPT09NyYmKGU9MCksZTwwfHxlPjYpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgZGF5T2ZXZWVrOiBcIitlKTt0aGlzLnNldE50aFdlZWtkYXlPZk1vbnRoKGUscik7cmV0dXJufWlmKHQ9PT1cInNlY29uZFwifHx0PT09XCJtaW51dGVcIil7aWYoZTwwfHxlPj02MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBcIit0K1wiOiBcIitlKX1lbHNlIGlmKHQ9PT1cImhvdXJcIil7aWYoZTwwfHxlPj0yNCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBcIit0K1wiOiBcIitlKX1lbHNlIGlmKHQ9PT1cImRheVwiKXtpZihlPDB8fGU+PTMxKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yIFwiK3QrXCI6IFwiK2UpfWVsc2UgaWYodD09PVwibW9udGhcIiYmKGU8MHx8ZT49MTIpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yIFwiK3QrXCI6IFwiK2UpO3RoaXNbdF1bZV09cn1oYW5kbGVSYW5nZVdpdGhTdGVwcGluZyh0LGUscixzKXtsZXQgaT10aGlzLmV4dHJhY3ROdGgodCxlKSxhPWlbMF0ubWF0Y2goL14oXFxkKyktKFxcZCspXFwvKFxcZCspJC8pO2lmKGE9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHJhbmdlIHdpdGggc3RlcHBpbmc6ICdcIit0K1wiJ1wiKTtsZXRbLGwsbyx1XT1hLGM9cGFyc2VJbnQobCwxMCkrcix3PXBhcnNlSW50KG8sMTApK3IsQz1wYXJzZUludCh1LDEwKTtpZihpc05hTihjKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBsb3dlciByYW5nZSAoTmFOKVwiKTtpZihpc05hTih3KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCB1cHBlciByYW5nZSAoTmFOKVwiKTtpZihpc05hTihDKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTilcIik7aWYoQz09PTApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6IDBcIik7aWYoQz50aGlzW2VdLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgc3RlcHMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIHZhbHVlIG9mIHBhcnQgKFwiK3RoaXNbZV0ubGVuZ3RoK1wiKVwiKTtpZihjPncpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBGcm9tIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRvIHZhbHVlOiAnXCIrdCtcIidcIik7Zm9yKGxldCBUPWM7VDw9dztUKz1DKXRoaXMuc2V0UGFydChlLFQsaVsxXXx8cyl9ZXh0cmFjdE50aCh0LGUpe2xldCByPXQscztpZihyLmluY2x1ZGVzKFwiI1wiKSl7aWYoZSE9PVwiZGF5T2ZXZWVrXCIpdGhyb3cgbmV3IEVycm9yKFwiQ3JvblBhdHRlcm46IG50aCAoIykgb25seSBhbGxvd2VkIGluIGRheS1vZi13ZWVrIGZpZWxkXCIpO3M9ci5zcGxpdChcIiNcIilbMV0scj1yLnNwbGl0KFwiI1wiKVswXX1yZXR1cm5bcixzXX1oYW5kbGVSYW5nZSh0LGUscixzKXtsZXQgaT10aGlzLmV4dHJhY3ROdGgodCxlKSxhPWlbMF0uc3BsaXQoXCItXCIpO2lmKGEubGVuZ3RoIT09Mil0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZTogJ1wiK3QrXCInXCIpO2xldCBsPXBhcnNlSW50KGFbMF0sMTApK3Isbz1wYXJzZUludChhWzFdLDEwKStyO2lmKGlzTmFOKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pXCIpO2lmKGlzTmFOKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHVwcGVyIHJhbmdlIChOYU4pXCIpO2lmKGw+byl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IEZyb20gdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdG8gdmFsdWU6ICdcIit0K1wiJ1wiKTtmb3IobGV0IHU9bDt1PD1vO3UrKyl0aGlzLnNldFBhcnQoZSx1LGlbMV18fHMpfWhhbmRsZVN0ZXBwaW5nKHQsZSxyLHMpe2xldCBpPXRoaXMuZXh0cmFjdE50aCh0LGUpLGE9aVswXS5zcGxpdChcIi9cIik7aWYoYS5sZW5ndGghPT0yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAnXCIrdCtcIidcIik7YVswXT09PVwiXCImJihhWzBdPVwiKlwiKTtsZXQgbD0wO2FbMF0hPT1cIipcIiYmKGw9cGFyc2VJbnQoYVswXSwxMCkrcik7bGV0IG89cGFyc2VJbnQoYVsxXSwxMCk7aWYoaXNOYU4obykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6IChOYU4pXCIpO2lmKG89PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAwXCIpO2lmKG8+dGhpc1tlXS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIG1heCBzdGVwcyBmb3IgcGFydCBpcyAoXCIrdGhpc1tlXS5sZW5ndGgrXCIpXCIpO2ZvcihsZXQgdT1sO3U8dGhpc1tlXS5sZW5ndGg7dSs9byl0aGlzLnNldFBhcnQoZSx1LGlbMV18fHMpfXJlcGxhY2VBbHBoYURheXModCl7cmV0dXJuIHQucmVwbGFjZSgvLXN1bi9naSxcIi03XCIpLnJlcGxhY2UoL3N1bi9naSxcIjBcIikucmVwbGFjZSgvbW9uL2dpLFwiMVwiKS5yZXBsYWNlKC90dWUvZ2ksXCIyXCIpLnJlcGxhY2UoL3dlZC9naSxcIjNcIikucmVwbGFjZSgvdGh1L2dpLFwiNFwiKS5yZXBsYWNlKC9mcmkvZ2ksXCI1XCIpLnJlcGxhY2UoL3NhdC9naSxcIjZcIil9cmVwbGFjZUFscGhhTW9udGhzKHQpe3JldHVybiB0LnJlcGxhY2UoL2phbi9naSxcIjFcIikucmVwbGFjZSgvZmViL2dpLFwiMlwiKS5yZXBsYWNlKC9tYXIvZ2ksXCIzXCIpLnJlcGxhY2UoL2Fwci9naSxcIjRcIikucmVwbGFjZSgvbWF5L2dpLFwiNVwiKS5yZXBsYWNlKC9qdW4vZ2ksXCI2XCIpLnJlcGxhY2UoL2p1bC9naSxcIjdcIikucmVwbGFjZSgvYXVnL2dpLFwiOFwiKS5yZXBsYWNlKC9zZXAvZ2ksXCI5XCIpLnJlcGxhY2UoL29jdC9naSxcIjEwXCIpLnJlcGxhY2UoL25vdi9naSxcIjExXCIpLnJlcGxhY2UoL2RlYy9naSxcIjEyXCIpfWhhbmRsZU5pY2tuYW1lcyh0KXtsZXQgZT10LnRyaW0oKS50b0xvd2VyQ2FzZSgpO3JldHVybiBlPT09XCJAeWVhcmx5XCJ8fGU9PT1cIkBhbm51YWxseVwiP1wiMCAwIDEgMSAqXCI6ZT09PVwiQG1vbnRobHlcIj9cIjAgMCAxICogKlwiOmU9PT1cIkB3ZWVrbHlcIj9cIjAgMCAqICogMFwiOmU9PT1cIkBkYWlseVwiP1wiMCAwICogKiAqXCI6ZT09PVwiQGhvdXJseVwiP1wiMCAqICogKiAqXCI6dH1zZXROdGhXZWVrZGF5T2ZNb250aCh0LGUpe2lmKHR5cGVvZiBlIT1cIm51bWJlclwiJiZlPT09XCJMXCIpdGhpcy5kYXlPZldlZWtbdF09dGhpcy5kYXlPZldlZWtbdF18YjtlbHNlIGlmKGU9PT1wKXRoaXMuZGF5T2ZXZWVrW3RdPXA7ZWxzZSBpZihlPDYmJmU+MCl0aGlzLmRheU9mV2Vla1t0XT10aGlzLmRheU9mV2Vla1t0XXx2W2UtMV07ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKGBDcm9uUGF0dGVybjogbnRoIHdlZWtkYXkgb3V0IG9mIHJhbmdlLCBzaG91bGQgYmUgMS01IG9yIEwuIFZhbHVlOiAke2V9LCBUeXBlOiAke3R5cGVvZiBlfWApfX07dmFyIE89WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxtPVtbXCJtb250aFwiLFwieWVhclwiLDBdLFtcImRheVwiLFwibW9udGhcIiwtMV0sW1wiaG91clwiLFwiZGF5XCIsMF0sW1wibWludXRlXCIsXCJob3VyXCIsMF0sW1wic2Vjb25kXCIsXCJtaW51dGVcIiwwXV0sZj1jbGFzcyBue3R6O21zO3NlY29uZDttaW51dGU7aG91cjtkYXk7bW9udGg7eWVhcjtjb25zdHJ1Y3Rvcih0LGUpe2lmKHRoaXMudHo9ZSx0JiZ0IGluc3RhbmNlb2YgRGF0ZSlpZighaXNOYU4odCkpdGhpcy5mcm9tRGF0ZSh0KTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uRGF0ZTogSW52YWxpZCBkYXRlIHBhc3NlZCB0byBDcm9uRGF0ZSBjb25zdHJ1Y3RvclwiKTtlbHNlIGlmKHQ9PT12b2lkIDApdGhpcy5mcm9tRGF0ZShuZXcgRGF0ZSk7ZWxzZSBpZih0JiZ0eXBlb2YgdD09XCJzdHJpbmdcIil0aGlzLmZyb21TdHJpbmcodCk7ZWxzZSBpZih0IGluc3RhbmNlb2Ygbil0aGlzLmZyb21Dcm9uRGF0ZSh0KTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uRGF0ZTogSW52YWxpZCB0eXBlIChcIit0eXBlb2YgdCtcIikgcGFzc2VkIHRvIENyb25EYXRlIGNvbnN0cnVjdG9yXCIpfWlzTnRoV2Vla2RheU9mTW9udGgodCxlLHIscyl7bGV0IGE9bmV3IERhdGUoRGF0ZS5VVEModCxlLHIpKS5nZXRVVENEYXkoKSxsPTA7Zm9yKGxldCBvPTE7bzw9cjtvKyspbmV3IERhdGUoRGF0ZS5VVEModCxlLG8pKS5nZXRVVENEYXkoKT09PWEmJmwrKztpZihzJnAmJnZbbC0xXSZzKXJldHVybiEwO2lmKHMmYil7bGV0IG89bmV3IERhdGUoRGF0ZS5VVEModCxlKzEsMCkpLmdldFVUQ0RhdGUoKTtmb3IobGV0IHU9cisxO3U8PW87dSsrKWlmKG5ldyBEYXRlKERhdGUuVVRDKHQsZSx1KSkuZ2V0VVRDRGF5KCk9PT1hKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZyb21EYXRlKHQpe2lmKHRoaXMudHohPT12b2lkIDApaWYodHlwZW9mIHRoaXMudHo9PVwibnVtYmVyXCIpdGhpcy5tcz10LmdldFVUQ01pbGxpc2Vjb25kcygpLHRoaXMuc2Vjb25kPXQuZ2V0VVRDU2Vjb25kcygpLHRoaXMubWludXRlPXQuZ2V0VVRDTWludXRlcygpK3RoaXMudHosdGhpcy5ob3VyPXQuZ2V0VVRDSG91cnMoKSx0aGlzLmRheT10LmdldFVUQ0RhdGUoKSx0aGlzLm1vbnRoPXQuZ2V0VVRDTW9udGgoKSx0aGlzLnllYXI9dC5nZXRVVENGdWxsWWVhcigpLHRoaXMuYXBwbHkoKTtlbHNle2xldCBlPWgudG9UWih0LHRoaXMudHopO3RoaXMubXM9dC5nZXRNaWxsaXNlY29uZHMoKSx0aGlzLnNlY29uZD1lLnMsdGhpcy5taW51dGU9ZS5pLHRoaXMuaG91cj1lLmgsdGhpcy5kYXk9ZS5kLHRoaXMubW9udGg9ZS5tLTEsdGhpcy55ZWFyPWUueX1lbHNlIHRoaXMubXM9dC5nZXRNaWxsaXNlY29uZHMoKSx0aGlzLnNlY29uZD10LmdldFNlY29uZHMoKSx0aGlzLm1pbnV0ZT10LmdldE1pbnV0ZXMoKSx0aGlzLmhvdXI9dC5nZXRIb3VycygpLHRoaXMuZGF5PXQuZ2V0RGF0ZSgpLHRoaXMubW9udGg9dC5nZXRNb250aCgpLHRoaXMueWVhcj10LmdldEZ1bGxZZWFyKCl9ZnJvbUNyb25EYXRlKHQpe3RoaXMudHo9dC50eix0aGlzLnllYXI9dC55ZWFyLHRoaXMubW9udGg9dC5tb250aCx0aGlzLmRheT10LmRheSx0aGlzLmhvdXI9dC5ob3VyLHRoaXMubWludXRlPXQubWludXRlLHRoaXMuc2Vjb25kPXQuc2Vjb25kLHRoaXMubXM9dC5tc31hcHBseSgpe2lmKHRoaXMubW9udGg+MTF8fHRoaXMuZGF5Pk9bdGhpcy5tb250aF18fHRoaXMuaG91cj41OXx8dGhpcy5taW51dGU+NTl8fHRoaXMuc2Vjb25kPjU5fHx0aGlzLmhvdXI8MHx8dGhpcy5taW51dGU8MHx8dGhpcy5zZWNvbmQ8MCl7bGV0IHQ9bmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXksdGhpcy5ob3VyLHRoaXMubWludXRlLHRoaXMuc2Vjb25kLHRoaXMubXMpKTtyZXR1cm4gdGhpcy5tcz10LmdldFVUQ01pbGxpc2Vjb25kcygpLHRoaXMuc2Vjb25kPXQuZ2V0VVRDU2Vjb25kcygpLHRoaXMubWludXRlPXQuZ2V0VVRDTWludXRlcygpLHRoaXMuaG91cj10LmdldFVUQ0hvdXJzKCksdGhpcy5kYXk9dC5nZXRVVENEYXRlKCksdGhpcy5tb250aD10LmdldFVUQ01vbnRoKCksdGhpcy55ZWFyPXQuZ2V0VVRDRnVsbFllYXIoKSwhMH1lbHNlIHJldHVybiExfWZyb21TdHJpbmcodCl7aWYodHlwZW9mIHRoaXMudHo9PVwibnVtYmVyXCIpe2xldCBlPWguZnJvbVRaSVNPKHQpO3RoaXMubXM9ZS5nZXRVVENNaWxsaXNlY29uZHMoKSx0aGlzLnNlY29uZD1lLmdldFVUQ1NlY29uZHMoKSx0aGlzLm1pbnV0ZT1lLmdldFVUQ01pbnV0ZXMoKSx0aGlzLmhvdXI9ZS5nZXRVVENIb3VycygpLHRoaXMuZGF5PWUuZ2V0VVRDRGF0ZSgpLHRoaXMubW9udGg9ZS5nZXRVVENNb250aCgpLHRoaXMueWVhcj1lLmdldFVUQ0Z1bGxZZWFyKCksdGhpcy5hcHBseSgpfWVsc2UgcmV0dXJuIHRoaXMuZnJvbURhdGUoaC5mcm9tVFpJU08odCx0aGlzLnR6KSl9ZmluZE5leHQodCxlLHIscyl7bGV0IGk9dGhpc1tlXSxhO3IubGFzdERheU9mTW9udGgmJih0aGlzLm1vbnRoIT09MT9hPU9bdGhpcy5tb250aF06YT1uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCsxLDAsMCwwLDAsMCkpLmdldFVUQ0RhdGUoKSk7bGV0IGw9IXIuc3RhckRPVyYmZT09XCJkYXlcIj9uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCwxLDAsMCwwLDApKS5nZXRVVENEYXkoKTp2b2lkIDA7Zm9yKGxldCBvPXRoaXNbZV0rcztvPHJbZV0ubGVuZ3RoO28rKyl7bGV0IHU9cltlXVtvXTtpZihlPT09XCJkYXlcIiYmci5sYXN0RGF5T2ZNb250aCYmby1zPT1hJiYodT0xKSxlPT09XCJkYXlcIiYmIXIuc3RhckRPVyl7bGV0IGM9ci5kYXlPZldlZWtbKGwrKG8tcy0xKSklN107aWYoYyYmYyZwKWM9dGhpcy5pc050aFdlZWtkYXlPZk1vbnRoKHRoaXMueWVhcix0aGlzLm1vbnRoLG8tcyxjKT8xOjA7ZWxzZSBpZihjKXRocm93IG5ldyBFcnJvcihgQ3JvbkRhdGU6IEludmFsaWQgdmFsdWUgZm9yIGRheU9mV2VlayBlbmNvdW50ZXJlZC4gJHtjfWApO3QubGVnYWN5TW9kZSYmIXIuc3RhckRPTT91PXV8fGM6dT11JiZjfWlmKHUpcmV0dXJuIHRoaXNbZV09by1zLGkhPT10aGlzW2VdPzI6MX1yZXR1cm4gM31yZWN1cnNlKHQsZSxyKXtsZXQgcz10aGlzLmZpbmROZXh0KGUsbVtyXVswXSx0LG1bcl1bMl0pO2lmKHM+MSl7bGV0IGk9cisxO2Zvcig7aTxtLmxlbmd0aDspdGhpc1ttW2ldWzBdXT0tbVtpXVsyXSxpKys7aWYocz09PTMpcmV0dXJuIHRoaXNbbVtyXVsxXV0rKyx0aGlzW21bcl1bMF1dPS1tW3JdWzJdLHRoaXMuYXBwbHkoKSx0aGlzLnJlY3Vyc2UodCxlLDApO2lmKHRoaXMuYXBwbHkoKSlyZXR1cm4gdGhpcy5yZWN1cnNlKHQsZSxyLTEpfXJldHVybiByKz0xLHI+PW0ubGVuZ3RoP3RoaXM6dGhpcy55ZWFyPj0zZTM/bnVsbDp0aGlzLnJlY3Vyc2UodCxlLHIpfWluY3JlbWVudCh0LGUscil7cmV0dXJuIHRoaXMuc2Vjb25kKz1lLmludGVydmFsIT09dm9pZCAwJiZlLmludGVydmFsPjEmJnI/ZS5pbnRlcnZhbDoxLHRoaXMubXM9MCx0aGlzLmFwcGx5KCksdGhpcy5yZWN1cnNlKHQsZSwwKX1nZXREYXRlKHQpe3JldHVybiB0fHx0aGlzLnR6PT09dm9pZCAwP25ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF5LHRoaXMuaG91cix0aGlzLm1pbnV0ZSx0aGlzLnNlY29uZCx0aGlzLm1zKTp0eXBlb2YgdGhpcy50ej09XCJudW1iZXJcIj9uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUtdGhpcy50eix0aGlzLnNlY29uZCx0aGlzLm1zKSk6aC5mcm9tVFooaC50cCh0aGlzLnllYXIsdGhpcy5tb250aCsxLHRoaXMuZGF5LHRoaXMuaG91cix0aGlzLm1pbnV0ZSx0aGlzLnNlY29uZCx0aGlzLnR6KSwhMSl9Z2V0VGltZSgpe3JldHVybiB0aGlzLmdldERhdGUoITEpLmdldFRpbWUoKX19O2Z1bmN0aW9uIE4obil7aWYobj09PXZvaWQgMCYmKG49e30pLGRlbGV0ZSBuLm5hbWUsbi5sZWdhY3lNb2RlPW4ubGVnYWN5TW9kZT09PXZvaWQgMD8hMDpuLmxlZ2FjeU1vZGUsbi5wYXVzZWQ9bi5wYXVzZWQ9PT12b2lkIDA/ITE6bi5wYXVzZWQsbi5tYXhSdW5zPW4ubWF4UnVucz09PXZvaWQgMD8xLzA6bi5tYXhSdW5zLG4uY2F0Y2g9bi5jYXRjaD09PXZvaWQgMD8hMTpuLmNhdGNoLG4uaW50ZXJ2YWw9bi5pbnRlcnZhbD09PXZvaWQgMD8wOnBhcnNlSW50KG4uaW50ZXJ2YWwudG9TdHJpbmcoKSwxMCksbi51dGNPZmZzZXQ9bi51dGNPZmZzZXQ9PT12b2lkIDA/dm9pZCAwOnBhcnNlSW50KG4udXRjT2Zmc2V0LnRvU3RyaW5nKCksMTApLG4udW5yZWY9bi51bnJlZj09PXZvaWQgMD8hMTpuLnVucmVmLG4uc3RhcnRBdCYmKG4uc3RhcnRBdD1uZXcgZihuLnN0YXJ0QXQsbi50aW1lem9uZSkpLG4uc3RvcEF0JiYobi5zdG9wQXQ9bmV3IGYobi5zdG9wQXQsbi50aW1lem9uZSkpLG4uaW50ZXJ2YWwhPT1udWxsKXtpZihpc05hTihuLmludGVydmFsKSl0aHJvdyBuZXcgRXJyb3IoXCJDcm9uT3B0aW9uczogU3VwcGxpZWQgdmFsdWUgZm9yIGludGVydmFsIGlzIG5vdCBhIG51bWJlclwiKTtpZihuLmludGVydmFsPDApdGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IFN1cHBsaWVkIHZhbHVlIGZvciBpbnRlcnZhbCBjYW4gbm90IGJlIG5lZ2F0aXZlXCIpfWlmKG4udXRjT2Zmc2V0IT09dm9pZCAwKXtpZihpc05hTihuLnV0Y09mZnNldCkpdGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IEludmFsaWQgdmFsdWUgcGFzc2VkIGZvciB1dGNPZmZzZXQsIHNob3VsZCBiZSBudW1iZXIgcmVwcmVzZW50aW5nIG1pbnV0ZXMgb2Zmc2V0IGZyb20gVVRDLlwiKTtpZihuLnV0Y09mZnNldDwtODcwfHxuLnV0Y09mZnNldD44NzApdGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IHV0Y09mZnNldCBvdXQgb2YgYm91bmRzLlwiKTtpZihuLnV0Y09mZnNldCE9PXZvaWQgMCYmbi50aW1lem9uZSl0aHJvdyBuZXcgRXJyb3IoXCJDcm9uT3B0aW9uczogQ29tYmluaW5nICd1dGNPZmZzZXQnIHdpdGggJ3RpbWV6b25lJyBpcyBub3QgYWxsb3dlZC5cIil9aWYobi51bnJlZiE9PSEwJiZuLnVucmVmIT09ITEpdGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IFVucmVmIHNob3VsZCBiZSBlaXRoZXIgdHJ1ZSwgZmFsc2Ugb3IgdW5kZWZpbmVkKGZhbHNlKS5cIik7cmV0dXJuIG59ZnVuY3Rpb24gZyhuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pPT09XCJbb2JqZWN0IEZ1bmN0aW9uXVwifHx0eXBlb2Ygbj09XCJmdW5jdGlvblwifHxuIGluc3RhbmNlb2YgRnVuY3Rpb259ZnVuY3Rpb24gUyhuKXtyZXR1cm4gZyhuKX1mdW5jdGlvbiBQKG4pe3R5cGVvZiBEZW5vPFwidVwiJiZ0eXBlb2YgRGVuby51bnJlZlRpbWVyPFwidVwiP0Rlbm8udW5yZWZUaW1lcihuKTpuJiZ0eXBlb2Ygbi51bnJlZjxcInVcIiYmbi51bnJlZigpfXZhciBfPTMwKjFlMyx5PVtdLFI9Y2xhc3N7bmFtZTtvcHRpb25zO19zdGF0ZXM7Zm47Y29uc3RydWN0b3IodCxlLHIpe2xldCBzLGk7aWYoZyhlKSlpPWU7ZWxzZSBpZih0eXBlb2YgZT09XCJvYmplY3RcIilzPWU7ZWxzZSBpZihlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihcIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBvcHRpb25zSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuXCIpO2lmKGcocikpaT1yO2Vsc2UgaWYodHlwZW9mIHI9PVwib2JqZWN0XCIpcz1yO2Vsc2UgaWYociE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoXCJDcm9uOiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBmb3IgZnVuY0luLiBTaG91bGQgYmUgb25lIG9mIGZ1bmN0aW9uLCBvciBvYmplY3QgKG9wdGlvbnMpLlwiKTtpZih0aGlzLm5hbWU9cz8ubmFtZSx0aGlzLm9wdGlvbnM9TihzKSx0aGlzLl9zdGF0ZXM9e2tpbGw6ITEsYmxvY2tpbmc6ITEscHJldmlvdXNSdW46dm9pZCAwLGN1cnJlbnRSdW46dm9pZCAwLG9uY2U6dm9pZCAwLGN1cnJlbnRUaW1lb3V0OnZvaWQgMCxtYXhSdW5zOnM/cy5tYXhSdW5zOnZvaWQgMCxwYXVzZWQ6cz9zLnBhdXNlZDohMSxwYXR0ZXJuOm5ldyBkKFwiKiAqICogKiAqXCIpfSx0JiYodCBpbnN0YW5jZW9mIERhdGV8fHR5cGVvZiB0PT1cInN0cmluZ1wiJiZ0LmluZGV4T2YoXCI6XCIpPjApP3RoaXMuX3N0YXRlcy5vbmNlPW5ldyBmKHQsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KTp0aGlzLl9zdGF0ZXMucGF0dGVybj1uZXcgZCh0LHRoaXMub3B0aW9ucy50aW1lem9uZSksdGhpcy5uYW1lKXtpZih5LmZpbmQobD0+bC5uYW1lPT09dGhpcy5uYW1lKSl0aHJvdyBuZXcgRXJyb3IoXCJDcm9uOiBUcmllZCB0byBpbml0aWFsaXplIG5ldyBuYW1lZCBqb2IgJ1wiK3RoaXMubmFtZStcIicsIGJ1dCBuYW1lIGFscmVhZHkgdGFrZW4uXCIpO3kucHVzaCh0aGlzKX1yZXR1cm4gaSE9PXZvaWQgMCYmUyhpKSYmKHRoaXMuZm49aSx0aGlzLnNjaGVkdWxlKCkpLHRoaXN9bmV4dFJ1bih0KXtsZXQgZT10aGlzLl9uZXh0KHQpO3JldHVybiBlP2UuZ2V0RGF0ZSghMSk6bnVsbH1uZXh0UnVucyh0LGUpe3RoaXMuX3N0YXRlcy5tYXhSdW5zIT09dm9pZCAwJiZ0PnRoaXMuX3N0YXRlcy5tYXhSdW5zJiYodD10aGlzLl9zdGF0ZXMubWF4UnVucyk7bGV0IHI9W10scz1lfHx0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bnx8dm9pZCAwO2Zvcig7dC0tJiYocz10aGlzLm5leHRSdW4ocykpOylyLnB1c2gocyk7cmV0dXJuIHJ9Z2V0UGF0dGVybigpe3JldHVybiB0aGlzLl9zdGF0ZXMucGF0dGVybj90aGlzLl9zdGF0ZXMucGF0dGVybi5wYXR0ZXJuOnZvaWQgMH1pc1J1bm5pbmcoKXtsZXQgdD10aGlzLm5leHRSdW4odGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4pLGU9IXRoaXMuX3N0YXRlcy5wYXVzZWQscj10aGlzLmZuIT09dm9pZCAwLHM9IXRoaXMuX3N0YXRlcy5raWxsO3JldHVybiBlJiZyJiZzJiZ0IT09bnVsbH1pc1N0b3BwZWQoKXtyZXR1cm4gdGhpcy5fc3RhdGVzLmtpbGx9aXNCdXN5KCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5ibG9ja2luZ31jdXJyZW50UnVuKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuP3RoaXMuX3N0YXRlcy5jdXJyZW50UnVuLmdldERhdGUoKTpudWxsfXByZXZpb3VzUnVuKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5wcmV2aW91c1J1bj90aGlzLl9zdGF0ZXMucHJldmlvdXNSdW4uZ2V0RGF0ZSgpOm51bGx9bXNUb05leHQodCl7bGV0IGU9dGhpcy5fbmV4dCh0KTtyZXR1cm4gZT90IGluc3RhbmNlb2YgZnx8dCBpbnN0YW5jZW9mIERhdGU/ZS5nZXRUaW1lKCktdC5nZXRUaW1lKCk6ZS5nZXRUaW1lKCktbmV3IGYodCkuZ2V0VGltZSgpOm51bGx9c3RvcCgpe3RoaXMuX3N0YXRlcy5raWxsPSEwLHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCk7bGV0IHQ9eS5pbmRleE9mKHRoaXMpO3Q+PTAmJnkuc3BsaWNlKHQsMSl9cGF1c2UoKXtyZXR1cm4gdGhpcy5fc3RhdGVzLnBhdXNlZD0hMCwhdGhpcy5fc3RhdGVzLmtpbGx9cmVzdW1lKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5wYXVzZWQ9ITEsIXRoaXMuX3N0YXRlcy5raWxsfXNjaGVkdWxlKHQpe2lmKHQmJnRoaXMuZm4pdGhyb3cgbmV3IEVycm9yKFwiQ3JvbjogSXQgaXMgbm90IGFsbG93ZWQgdG8gc2NoZWR1bGUgdHdvIGZ1bmN0aW9ucyB1c2luZyB0aGUgc2FtZSBDcm9uZXIgaW5zdGFuY2UuXCIpO3QmJih0aGlzLmZuPXQpO2xldCBlPXRoaXMubXNUb05leHQoKSxyPXRoaXMubmV4dFJ1bih0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bik7cmV0dXJuIGU9PW51bGx8fGlzTmFOKGUpfHxyPT09bnVsbD90aGlzOihlPl8mJihlPV8pLHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLl9jaGVja1RyaWdnZXIociksZSksdGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0JiZ0aGlzLm9wdGlvbnMudW5yZWYmJlAodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KSx0aGlzKX1hc3luYyBfdHJpZ2dlcih0KXtpZih0aGlzLl9zdGF0ZXMuYmxvY2tpbmc9ITAsdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW49bmV3IGYodm9pZCAwLHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCksdGhpcy5vcHRpb25zLmNhdGNoKXRyeXt0aGlzLmZuIT09dm9pZCAwJiZhd2FpdCB0aGlzLmZuKHRoaXMsdGhpcy5vcHRpb25zLmNvbnRleHQpfWNhdGNoKGUpe2codGhpcy5vcHRpb25zLmNhdGNoKSYmdGhpcy5vcHRpb25zLmNhdGNoKGUsdGhpcyl9ZWxzZSB0aGlzLmZuIT09dm9pZCAwJiZhd2FpdCB0aGlzLmZuKHRoaXMsdGhpcy5vcHRpb25zLmNvbnRleHQpO3RoaXMuX3N0YXRlcy5wcmV2aW91c1J1bj1uZXcgZih0LHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCksdGhpcy5fc3RhdGVzLmJsb2NraW5nPSExfWFzeW5jIHRyaWdnZXIoKXthd2FpdCB0aGlzLl90cmlnZ2VyKCl9cnVuc0xlZnQoKXtyZXR1cm4gdGhpcy5fc3RhdGVzLm1heFJ1bnN9X2NoZWNrVHJpZ2dlcih0KXtsZXQgZT1uZXcgRGF0ZSxyPSF0aGlzLl9zdGF0ZXMucGF1c2VkJiZlLmdldFRpbWUoKT49dC5nZXRUaW1lKCkscz10aGlzLl9zdGF0ZXMuYmxvY2tpbmcmJnRoaXMub3B0aW9ucy5wcm90ZWN0O3ImJiFzPyh0aGlzLl9zdGF0ZXMubWF4UnVucyE9PXZvaWQgMCYmdGhpcy5fc3RhdGVzLm1heFJ1bnMtLSx0aGlzLl90cmlnZ2VyKCkpOnImJnMmJmcodGhpcy5vcHRpb25zLnByb3RlY3QpJiZzZXRUaW1lb3V0KCgpPT50aGlzLm9wdGlvbnMucHJvdGVjdCh0aGlzKSwwKSx0aGlzLnNjaGVkdWxlKCl9X25leHQodCl7bGV0IGU9ISEodHx8dGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4pLHI9ITE7IXQmJnRoaXMub3B0aW9ucy5zdGFydEF0JiZ0aGlzLm9wdGlvbnMuaW50ZXJ2YWwmJihbdCxlXT10aGlzLl9jYWxjdWxhdGVQcmV2aW91c1J1bih0LGUpLHI9IXQpLHQ9bmV3IGYodCx0aGlzLm9wdGlvbnMudGltZXpvbmV8fHRoaXMub3B0aW9ucy51dGNPZmZzZXQpLHRoaXMub3B0aW9ucy5zdGFydEF0JiZ0JiZ0LmdldFRpbWUoKTx0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCkmJih0PXRoaXMub3B0aW9ucy5zdGFydEF0KTtsZXQgcz10aGlzLl9zdGF0ZXMub25jZXx8bmV3IGYodCx0aGlzLm9wdGlvbnMudGltZXpvbmV8fHRoaXMub3B0aW9ucy51dGNPZmZzZXQpO3JldHVybiFyJiZzIT09dGhpcy5fc3RhdGVzLm9uY2UmJihzPXMuaW5jcmVtZW50KHRoaXMuX3N0YXRlcy5wYXR0ZXJuLHRoaXMub3B0aW9ucyxlKSksdGhpcy5fc3RhdGVzLm9uY2UmJnRoaXMuX3N0YXRlcy5vbmNlLmdldFRpbWUoKTw9dC5nZXRUaW1lKCl8fHM9PT1udWxsfHx0aGlzLl9zdGF0ZXMubWF4UnVucyE9PXZvaWQgMCYmdGhpcy5fc3RhdGVzLm1heFJ1bnM8PTB8fHRoaXMuX3N0YXRlcy5raWxsfHx0aGlzLm9wdGlvbnMuc3RvcEF0JiZzLmdldFRpbWUoKT49dGhpcy5vcHRpb25zLnN0b3BBdC5nZXRUaW1lKCk/bnVsbDpzfV9jYWxjdWxhdGVQcmV2aW91c1J1bih0LGUpe2xldCByPW5ldyBmKHZvaWQgMCx0aGlzLm9wdGlvbnMudGltZXpvbmV8fHRoaXMub3B0aW9ucy51dGNPZmZzZXQpLHM9dDtpZih0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCk8PXIuZ2V0VGltZSgpKXtzPXRoaXMub3B0aW9ucy5zdGFydEF0O2xldCBpPXMuZ2V0VGltZSgpK3RoaXMub3B0aW9ucy5pbnRlcnZhbCoxZTM7Zm9yKDtpPD1yLmdldFRpbWUoKTspcz1uZXcgZihzLHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCkuaW5jcmVtZW50KHRoaXMuX3N0YXRlcy5wYXR0ZXJuLHRoaXMub3B0aW9ucywhMCksaT1zLmdldFRpbWUoKSt0aGlzLm9wdGlvbnMuaW50ZXJ2YWwqMWUzO2U9ITB9cmV0dXJuIHM9PT1udWxsJiYocz12b2lkIDApLFtzLGVdfX07ZXhwb3J0e1IgYXMgQ3JvbixmIGFzIENyb25EYXRlLGQgYXMgQ3JvblBhdHRlcm4seSBhcyBzY2hlZHVsZWRKb2JzfTtcbiIsICIvKipcbiAqIEBtb2R1bGUgY29uc3RhbnRzXG4gKiBAc3VtbWFyeSBVc2VmdWwgY29uc3RhbnRzXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbGxlY3Rpb24gb2YgdXNlZnVsIGRhdGUgY29uc3RhbnRzLlxuICpcbiAqIFRoZSBjb25zdGFudHMgY291bGQgYmUgaW1wb3J0ZWQgZnJvbSBgZGF0ZS1mbnMvY29uc3RhbnRzYDpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbWF4VGltZSwgbWluVGltZSB9IGZyb20gXCIuL2NvbnN0YW50cy9kYXRlLWZucy9jb25zdGFudHNcIjtcbiAqXG4gKiBmdW5jdGlvbiBpc0FsbG93ZWRUaW1lKHRpbWUpIHtcbiAqICAgcmV0dXJuIHRpbWUgPD0gbWF4VGltZSAmJiB0aW1lID49IG1pblRpbWU7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgZGF5c0luV2Vla1xuICogQHN1bW1hcnkgRGF5cyBpbiAxIHdlZWsuXG4gKi9cbmV4cG9ydCBjb25zdCBkYXlzSW5XZWVrID0gNztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIGRheXNJblllYXJcbiAqIEBzdW1tYXJ5IERheXMgaW4gMSB5ZWFyLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSG93IG1hbnkgZGF5cyBpbiBhIHllYXIuXG4gKlxuICogT25lIHllYXJzIGVxdWFscyAzNjUuMjQyNSBkYXlzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTpcbiAqXG4gKiA+IExlYXAgeWVhciBvY2N1cnMgZXZlcnkgNCB5ZWFycywgZXhjZXB0IGZvciB5ZWFycyB0aGF0IGFyZSBkaXZpc2libGUgYnkgMTAwIGFuZCBub3QgZGl2aXNpYmxlIGJ5IDQwMC5cbiAqID4gMSBtZWFuIHllYXIgPSAoMzY1KzEvNC0xLzEwMCsxLzQwMCkgZGF5cyA9IDM2NS4yNDI1IGRheXNcbiAqL1xuZXhwb3J0IGNvbnN0IGRheXNJblllYXIgPSAzNjUuMjQyNTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1heFRpbWVcbiAqIEBzdW1tYXJ5IE1heGltdW0gYWxsb3dlZCB0aW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBtYXhUaW1lIH0gZnJvbSBcIi4vY29uc3RhbnRzL2RhdGUtZm5zL2NvbnN0YW50c1wiO1xuICpcbiAqIGNvbnN0IGlzVmFsaWQgPSA4NjQwMDAwMDAwMDAwMDAxIDw9IG1heFRpbWU7XG4gKiAvLz0+IGZhbHNlXG4gKlxuICogbmV3IERhdGUoODY0MDAwMDAwMDAwMDAwMSk7XG4gKiAvLz0+IEludmFsaWQgRGF0ZVxuICovXG5leHBvcnQgY29uc3QgbWF4VGltZSA9IE1hdGgucG93KDEwLCA4KSAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaW5UaW1lXG4gKiBAc3VtbWFyeSBNaW5pbXVtIGFsbG93ZWQgdGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgbWluVGltZSB9IGZyb20gXCIuL2NvbnN0YW50cy9kYXRlLWZucy9jb25zdGFudHNcIjtcbiAqXG4gKiBjb25zdCBpc1ZhbGlkID0gLTg2NDAwMDAwMDAwMDAwMDEgPj0gbWluVGltZTtcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBuZXcgRGF0ZSgtODY0MDAwMDAwMDAwMDAwMSlcbiAqIC8vPT4gSW52YWxpZCBEYXRlXG4gKi9cbmV4cG9ydCBjb25zdCBtaW5UaW1lID0gLW1heFRpbWU7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbldlZWtcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIHdlZWsuXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJbldlZWsgPSA2MDQ4MDAwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbkRheVxuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgZGF5LlxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5EYXkgPSA4NjQwMDAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luTWludXRlXG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSBtaW51dGVcbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luTWludXRlID0gNjAwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbkhvdXJcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIGhvdXJcbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luSG91ciA9IDM2MDAwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJblNlY29uZFxuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgc2Vjb25kXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJblNlY29uZCA9IDEwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaW51dGVzSW5ZZWFyXG4gKiBAc3VtbWFyeSBNaW51dGVzIGluIDEgeWVhci5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbnV0ZXNJblllYXIgPSA1MjU2MDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaW51dGVzSW5Nb250aFxuICogQHN1bW1hcnkgTWludXRlcyBpbiAxIG1vbnRoLlxuICovXG5leHBvcnQgY29uc3QgbWludXRlc0luTW9udGggPSA0MzIwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbnV0ZXNJbkRheVxuICogQHN1bW1hcnkgTWludXRlcyBpbiAxIGRheS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbnV0ZXNJbkRheSA9IDE0NDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaW51dGVzSW5Ib3VyXG4gKiBAc3VtbWFyeSBNaW51dGVzIGluIDEgaG91ci5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbnV0ZXNJbkhvdXIgPSA2MDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1vbnRoc0luUXVhcnRlclxuICogQHN1bW1hcnkgTW9udGhzIGluIDEgcXVhcnRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IG1vbnRoc0luUXVhcnRlciA9IDM7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtb250aHNJblllYXJcbiAqIEBzdW1tYXJ5IE1vbnRocyBpbiAxIHllYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBtb250aHNJblllYXIgPSAxMjtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHF1YXJ0ZXJzSW5ZZWFyXG4gKiBAc3VtbWFyeSBRdWFydGVycyBpbiAxIHllYXJcbiAqL1xuZXhwb3J0IGNvbnN0IHF1YXJ0ZXJzSW5ZZWFyID0gNDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbkhvdXJcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBob3VyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luSG91ciA9IDM2MDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5NaW51dGVcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBtaW51dGUuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5NaW51dGUgPSA2MDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbkRheVxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIGRheS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbkRheSA9IHNlY29uZHNJbkhvdXIgKiAyNDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbldlZWtcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSB3ZWVrLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luV2VlayA9IHNlY29uZHNJbkRheSAqIDc7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5ZZWFyXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgeWVhci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJblllYXIgPSBzZWNvbmRzSW5EYXkgKiBkYXlzSW5ZZWFyO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luTW9udGhcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBtb250aFxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luTW9udGggPSBzZWNvbmRzSW5ZZWFyIC8gMTI7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5RdWFydGVyXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgcXVhcnRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJblF1YXJ0ZXIgPSBzZWNvbmRzSW5Nb250aCAqIDM7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBjb25zdHJ1Y3RGcm9tU3ltYm9sXG4gKiBAc3VtbWFyeSBTeW1ib2wgZW5hYmxpbmcgRGF0ZSBleHRlbnNpb25zIHRvIGluaGVyaXQgcHJvcGVydGllcyBmcm9tIHRoZSByZWZlcmVuY2UgZGF0ZS5cbiAqXG4gKiBUaGUgc3ltYm9sIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBgY29uc3RydWN0RnJvbWAgZnVuY3Rpb24gdG8gY29uc3RydWN0IGEgZGF0ZVxuICogdXNpbmcgYSByZWZlcmVuY2UgZGF0ZSBhbmQgYSB2YWx1ZS4gSXQgYWxsb3dzIHRvIHRyYW5zZmVyIGV4dHJhIHByb3BlcnRpZXNcbiAqIGZyb20gdGhlIHJlZmVyZW5jZSBkYXRlIHRvIHRoZSBuZXcgZGF0ZS4gSXQncyB1c2VmdWwgZm9yIGV4dGVuc2lvbnMgbGlrZVxuICogW2BUWkRhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdHopIHRoYXQgYWNjZXB0IGEgdGltZSB6b25lIGFzXG4gKiBhIGNvbnN0cnVjdG9yIGFyZ3VtZW50LlxuICovXG5leHBvcnQgY29uc3QgY29uc3RydWN0RnJvbVN5bWJvbCA9IFN5bWJvbC5mb3IoXCJjb25zdHJ1Y3REYXRlRnJvbVwiKTtcbiIsICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tU3ltYm9sIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgY29uc3RydWN0RnJvbVxuICogQGNhdGVnb3J5IEdlbmVyaWMgSGVscGVyc1xuICogQHN1bW1hcnkgQ29uc3RydWN0cyBhIGRhdGUgdXNpbmcgdGhlIHJlZmVyZW5jZSBkYXRlIGFuZCB0aGUgdmFsdWVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBmdW5jdGlvbiBjb25zdHJ1Y3RzIGEgbmV3IGRhdGUgdXNpbmcgdGhlIGNvbnN0cnVjdG9yIGZyb20gdGhlIHJlZmVyZW5jZVxuICogZGF0ZSBhbmQgdGhlIGdpdmVuIHZhbHVlLiBJdCBoZWxwcyB0byBidWlsZCBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdFxuICogZGF0ZSBleHRlbnNpb25zLlxuICpcbiAqIEl0IGRlZmF1bHRzIHRvIGBEYXRlYCBpZiB0aGUgcGFzc2VkIHJlZmVyZW5jZSBkYXRlIGlzIGEgbnVtYmVyIG9yIGEgc3RyaW5nLlxuICpcbiAqIFN0YXJ0aW5nIGZyb20gdjMuNy4wLCBpdCBhbGxvd3MgdG8gY29uc3RydWN0IGEgZGF0ZSB1c2luZyBgW1N5bWJvbC5mb3IoXCJjb25zdHJ1Y3REYXRlRnJvbVwiKV1gXG4gKiBlbmFibGluZyB0byB0cmFuc2ZlciBleHRyYSBwcm9wZXJ0aWVzIGZyb20gdGhlIHJlZmVyZW5jZSBkYXRlIHRvIHRoZSBuZXcgZGF0ZS5cbiAqIEl0J3MgdXNlZnVsIGZvciBleHRlbnNpb25zIGxpa2UgW2BUWkRhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdHopXG4gKiB0aGF0IGFjY2VwdCBhIHRpbWUgem9uZSBhcyBhIGNvbnN0cnVjdG9yIGFyZ3VtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIHJlZmVyZW5jZSBkYXRlIHRvIHRha2UgY29uc3RydWN0b3IgZnJvbVxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNyZWF0ZSB0aGUgZGF0ZVxuICpcbiAqIEByZXR1cm5zIERhdGUgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGdpdmVuIGRhdGUgYW5kIHZhbHVlXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tL2RhdGUtZm5zXCI7XG4gKlxuICogLy8gQSBmdW5jdGlvbiB0aGF0IGNsb25lcyBhIGRhdGUgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgdHlwZVxuICogZnVuY3Rpb24gY2xvbmVEYXRlPERhdGVUeXBlIGV4dGVuZHMgRGF0ZT4oZGF0ZTogRGF0ZVR5cGUpOiBEYXRlVHlwZSB7XG4gKiAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKFxuICogICAgIGRhdGUsIC8vIFVzZSBjb25zdHJ1Y3RvciBmcm9tIHRoZSBnaXZlbiBkYXRlXG4gKiAgICAgZGF0ZS5nZXRUaW1lKCkgLy8gVXNlIHRoZSBkYXRlIHZhbHVlIHRvIGNyZWF0ZSBhIG5ldyBkYXRlXG4gKiAgICk7XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZGF0ZSh2YWx1ZSk7XG5cbiAgaWYgKGRhdGUgJiYgdHlwZW9mIGRhdGUgPT09IFwib2JqZWN0XCIgJiYgY29uc3RydWN0RnJvbVN5bWJvbCBpbiBkYXRlKVxuICAgIHJldHVybiBkYXRlW2NvbnN0cnVjdEZyb21TeW1ib2xdKHZhbHVlKTtcblxuICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBuZXcgZGF0ZS5jb25zdHJ1Y3Rvcih2YWx1ZSk7XG5cbiAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBjb25zdHJ1Y3RGcm9tO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIFN0YXJ0aW5nIGZyb20gdjMuNy4wLCBpdCBjbG9uZXMgYSBkYXRlIHVzaW5nIGBbU3ltYm9sLmZvcihcImNvbnN0cnVjdERhdGVGcm9tXCIpXWBcbiAqIGVuYWJsaW5nIHRvIHRyYW5zZmVyIGV4dHJhIHByb3BlcnRpZXMgZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUgdG8gdGhlIG5ldyBkYXRlLlxuICogSXQncyB1c2VmdWwgZm9yIGV4dGVuc2lvbnMgbGlrZSBbYFRaRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy90eilcbiAqIHRoYXQgYWNjZXB0IGEgdGltZSB6b25lIGFzIGEgY29uc3RydWN0b3IgYXJndW1lbnQuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBhcmd1bWVudCAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQsIGNvbnRleHQpIHtcbiAgLy8gW1RPRE9dIEdldCByaWQgb2YgYHRvRGF0ZWAgb3IgYGNvbnN0cnVjdEZyb21gP1xuICByZXR1cm4gY29uc3RydWN0RnJvbShjb250ZXh0IHx8IGFyZ3VtZW50LCBhcmd1bWVudCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgdG9EYXRlO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGFkZERheXN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBhZGREYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIGFtb3VudCAtIFRoZSBhbW91bnQgb2YgZGF5cyB0byBiZSBhZGRlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBkYXlzIGFkZGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCAxMCBkYXlzIHRvIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBhZGREYXlzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAxMClcbiAqIC8vPT4gVGh1IFNlcCAxMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGlmIChpc05hTihhbW91bnQpKSByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBOYU4pO1xuXG4gIC8vIElmIDAgZGF5cywgbm8tb3AgdG8gYXZvaWQgY2hhbmdpbmcgdGltZXMgaW4gdGhlIGhvdXIgYmVmb3JlIGVuZCBvZiBEU1RcbiAgaWYgKCFhbW91bnQpIHJldHVybiBfZGF0ZTtcblxuICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIGFtb3VudCk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBhZGREYXlzO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGFkZE1vbnRoc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGFkZE1vbnRoc1xuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtb250aHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbW9udGhzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIG1vbnRocyB0byBiZSBhZGRlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0XG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIG1vbnRocyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNSBtb250aHMgdG8gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZE1vbnRocyhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgNSlcbiAqIC8vPT4gU3VuIEZlYiAwMSAyMDE1IDAwOjAwOjAwXG4gKlxuICogLy8gQWRkIG9uZSBtb250aCB0byAzMCBKYW51YXJ5IDIwMjM6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNb250aHMobmV3IERhdGUoMjAyMywgMCwgMzApLCAxKVxuICogLy89PiBUdWUgRmViIDI4IDIwMjMgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZE1vbnRocyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBpZiAoaXNOYU4oYW1vdW50KSkgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgTmFOKTtcbiAgaWYgKCFhbW91bnQpIHtcbiAgICAvLyBJZiAwIG1vbnRocywgbm8tb3AgdG8gYXZvaWQgY2hhbmdpbmcgdGltZXMgaW4gdGhlIGhvdXIgYmVmb3JlIGVuZCBvZiBEU1RcbiAgICByZXR1cm4gX2RhdGU7XG4gIH1cbiAgY29uc3QgZGF5T2ZNb250aCA9IF9kYXRlLmdldERhdGUoKTtcblxuICAvLyBUaGUgSlMgRGF0ZSBvYmplY3Qgc3VwcG9ydHMgZGF0ZSBtYXRoIGJ5IGFjY2VwdGluZyBvdXQtb2YtYm91bmRzIHZhbHVlcyBmb3JcbiAgLy8gbW9udGgsIGRheSwgZXRjLiBGb3IgZXhhbXBsZSwgbmV3IERhdGUoMjAyMCwgMCwgMCkgcmV0dXJucyAzMSBEZWMgMjAxOSBhbmRcbiAgLy8gbmV3IERhdGUoMjAyMCwgMTMsIDEpIHJldHVybnMgMSBGZWIgMjAyMS4gIFRoaXMgaXMgKmFsbW9zdCogdGhlIGJlaGF2aW9yIHdlXG4gIC8vIHdhbnQgZXhjZXB0IHRoYXQgZGF0ZXMgd2lsbCB3cmFwIGFyb3VuZCB0aGUgZW5kIG9mIGEgbW9udGgsIG1lYW5pbmcgdGhhdFxuICAvLyBuZXcgRGF0ZSgyMDIwLCAxMywgMzEpIHdpbGwgcmV0dXJuIDMgTWFyIDIwMjEgbm90IDI4IEZlYiAyMDIxIGFzIGRlc2lyZWQuIFNvXG4gIC8vIHdlJ2xsIGRlZmF1bHQgdG8gdGhlIGVuZCBvZiB0aGUgZGVzaXJlZCBtb250aCBieSBhZGRpbmcgMSB0byB0aGUgZGVzaXJlZFxuICAvLyBtb250aCBhbmQgdXNpbmcgYSBkYXRlIG9mIDAgdG8gYmFjayB1cCBvbmUgZGF5IHRvIHRoZSBlbmQgb2YgdGhlIGRlc2lyZWRcbiAgLy8gbW9udGguXG4gIGNvbnN0IGVuZE9mRGVzaXJlZE1vbnRoID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBfZGF0ZS5nZXRUaW1lKCkpO1xuICBlbmRPZkRlc2lyZWRNb250aC5zZXRNb250aChfZGF0ZS5nZXRNb250aCgpICsgYW1vdW50ICsgMSwgMCk7XG4gIGNvbnN0IGRheXNJbk1vbnRoID0gZW5kT2ZEZXNpcmVkTW9udGguZ2V0RGF0ZSgpO1xuICBpZiAoZGF5T2ZNb250aCA+PSBkYXlzSW5Nb250aCkge1xuICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgYXQgdGhlIGVuZCBvZiB0aGUgbW9udGgsIHRoZW4gdGhpcyBpcyB0aGUgY29ycmVjdCBkYXRlXG4gICAgLy8gYW5kIHdlJ3JlIGRvbmUuXG4gICAgcmV0dXJuIGVuZE9mRGVzaXJlZE1vbnRoO1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSwgd2Ugbm93IGtub3cgdGhhdCBzZXR0aW5nIHRoZSBvcmlnaW5hbCBkYXktb2YtbW9udGggdmFsdWUgd29uJ3RcbiAgICAvLyBjYXVzZSBhbiBvdmVyZmxvdywgc28gc2V0IHRoZSBkZXNpcmVkIGRheS1vZi1tb250aC4gTm90ZSB0aGF0IHdlIGNhbid0XG4gICAgLy8ganVzdCBzZXQgdGhlIGRhdGUgb2YgYGVuZE9mRGVzaXJlZE1vbnRoYCBiZWNhdXNlIHRoYXQgb2JqZWN0IG1heSBoYXZlIGhhZFxuICAgIC8vIGl0cyB0aW1lIGNoYW5nZWQgaW4gdGhlIHVudXN1YWwgY2FzZSB3aGVyZSB3aGVyZSBhIERTVCB0cmFuc2l0aW9uIHdhcyBvblxuICAgIC8vIHRoZSBsYXN0IGRheSBvZiB0aGUgbW9udGggYW5kIGl0cyBsb2NhbCB0aW1lIHdhcyBpbiB0aGUgaG91ciBza2lwcGVkIG9yXG4gICAgLy8gcmVwZWF0ZWQgbmV4dCB0byBhIERTVCB0cmFuc2l0aW9uLiAgU28gd2UgdXNlIGBkYXRlYCBpbnN0ZWFkIHdoaWNoIGlzXG4gICAgLy8gZ3VhcmFudGVlZCB0byBzdGlsbCBoYXZlIHRoZSBvcmlnaW5hbCB0aW1lLlxuICAgIF9kYXRlLnNldEZ1bGxZZWFyKFxuICAgICAgZW5kT2ZEZXNpcmVkTW9udGguZ2V0RnVsbFllYXIoKSxcbiAgICAgIGVuZE9mRGVzaXJlZE1vbnRoLmdldE1vbnRoKCksXG4gICAgICBkYXlPZk1vbnRoLFxuICAgICk7XG4gICAgcmV0dXJuIF9kYXRlO1xuICB9XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgYWRkTW9udGhzO1xuIiwgImltcG9ydCB7IGFkZERheXMgfSBmcm9tIFwiLi9hZGREYXlzLmpzXCI7XG5pbXBvcnQgeyBhZGRNb250aHMgfSBmcm9tIFwiLi9hZGRNb250aHMuanNcIjtcbmltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGFkZH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGFkZFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB1c2luZyBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIGR1cmF0aW9uIC0gVGhlIG9iamVjdCB3aXRoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgdG8gYmUgYWRkZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgc2Vjb25kcyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgdGhlIGZvbGxvd2luZyBkdXJhdGlvbiB0byAxIFNlcHRlbWJlciAyMDE0LCAxMDoxOTo1MFxuICogY29uc3QgcmVzdWx0ID0gYWRkKG5ldyBEYXRlKDIwMTQsIDgsIDEsIDEwLCAxOSwgNTApLCB7XG4gKiAgIHllYXJzOiAyLFxuICogICBtb250aHM6IDksXG4gKiAgIHdlZWtzOiAxLFxuICogICBkYXlzOiA3LFxuICogICBob3VyczogNSxcbiAqICAgbWludXRlczogOSxcbiAqICAgc2Vjb25kczogMzAsXG4gKiB9KVxuICogLy89PiBUaHUgSnVuIDE1IDIwMTcgMTU6Mjk6MjBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZChkYXRlLCBkdXJhdGlvbiwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgeWVhcnMgPSAwLFxuICAgIG1vbnRocyA9IDAsXG4gICAgd2Vla3MgPSAwLFxuICAgIGRheXMgPSAwLFxuICAgIGhvdXJzID0gMCxcbiAgICBtaW51dGVzID0gMCxcbiAgICBzZWNvbmRzID0gMCxcbiAgfSA9IGR1cmF0aW9uO1xuXG4gIC8vIEFkZCB5ZWFycyBhbmQgbW9udGhzXG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgZGF0ZVdpdGhNb250aHMgPVxuICAgIG1vbnRocyB8fCB5ZWFycyA/IGFkZE1vbnRocyhfZGF0ZSwgbW9udGhzICsgeWVhcnMgKiAxMikgOiBfZGF0ZTtcblxuICAvLyBBZGQgd2Vla3MgYW5kIGRheXNcbiAgY29uc3QgZGF0ZVdpdGhEYXlzID1cbiAgICBkYXlzIHx8IHdlZWtzID8gYWRkRGF5cyhkYXRlV2l0aE1vbnRocywgZGF5cyArIHdlZWtzICogNykgOiBkYXRlV2l0aE1vbnRocztcblxuICAvLyBBZGQgZGF5cywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzXG4gIGNvbnN0IG1pbnV0ZXNUb0FkZCA9IG1pbnV0ZXMgKyBob3VycyAqIDYwO1xuICBjb25zdCBzZWNvbmRzVG9BZGQgPSBzZWNvbmRzICsgbWludXRlc1RvQWRkICogNjA7XG4gIGNvbnN0IG1zVG9BZGQgPSBzZWNvbmRzVG9BZGQgKiAxMDAwO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsICtkYXRlV2l0aERheXMgKyBtc1RvQWRkKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBhZGQ7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBpc1NhdHVyZGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgaXNTYXR1cmRheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgU2F0dXJkYXk/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBTYXR1cmRheT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZSBpcyBTYXR1cmRheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJcyAyNyBTZXB0ZW1iZXIgMjAxNCBTYXR1cmRheT9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2F0dXJkYXkobmV3IERhdGUoMjAxNCwgOCwgMjcpKVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhdHVyZGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDY7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNTYXR1cmRheTtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGlzU3VuZGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgaXNTdW5kYXlcbiAqIEBjYXRlZ29yeSBXZWVrZGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIFN1bmRheT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBnaXZlbiBkYXRlIFN1bmRheT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIFN1bmRheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJcyAyMSBTZXB0ZW1iZXIgMjAxNCBTdW5kYXk/XG4gKiBjb25zdCByZXN1bHQgPSBpc1N1bmRheShuZXcgRGF0ZSgyMDE0LCA4LCAyMSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3VuZGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDA7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNTdW5kYXk7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBpc1dlZWtlbmR9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpc1dlZWtlbmRcbiAqIEBjYXRlZ29yeSBXZWVrZGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IERvZXMgdGhlIGdpdmVuIGRhdGUgZmFsbCBvbiBhIHdlZWtlbmQ/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBEb2VzIHRoZSBnaXZlbiBkYXRlIGZhbGwgb24gYSB3ZWVrZW5kPyBBIHdlZWtlbmQgaXMgZWl0aGVyIFNhdHVyZGF5IChgNmApIG9yIFN1bmRheSAoYDBgKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZSBmYWxscyBvbiBhIHdlZWtlbmRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRG9lcyA1IE9jdG9iZXIgMjAxNCBmYWxsIG9uIGEgd2Vla2VuZD9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzV2Vla2VuZChuZXcgRGF0ZSgyMDE0LCA5LCA1KSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXZWVrZW5kKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGF5ID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKTtcbiAgcmV0dXJuIGRheSA9PT0gMCB8fCBkYXkgPT09IDY7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNXZWVrZW5kO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBpc1NhdHVyZGF5IH0gZnJvbSBcIi4vaXNTYXR1cmRheS5qc1wiO1xuaW1wb3J0IHsgaXNTdW5kYXkgfSBmcm9tIFwiLi9pc1N1bmRheS5qc1wiO1xuaW1wb3J0IHsgaXNXZWVrZW5kIH0gZnJvbSBcIi4vaXNXZWVrZW5kLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGFkZEJ1c2luZXNzRGF5c30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGFkZEJ1c2luZXNzRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYnVzaW5lc3MgZGF5cyAobW9uIC0gZnJpKSB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBidXNpbmVzcyBkYXlzIChtb24gLSBmcmkpIHRvIHRoZSBnaXZlbiBkYXRlLCBpZ25vcmluZyB3ZWVrZW5kcy5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBidXNpbmVzcyBkYXlzIHRvIGJlIGFkZGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIGJ1c2luZXNzIGRheXMgYWRkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDEwIGJ1c2luZXNzIGRheXMgdG8gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZEJ1c2luZXNzRGF5cyhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgMTApXG4gKiAvLz0+IE1vbiBTZXAgMTUgMjAxNCAwMDowMDowMCAoc2tpcHBlZCB3ZWVrZW5kIGRheXMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRCdXNpbmVzc0RheXMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3Qgc3RhcnRlZE9uV2Vla2VuZCA9IGlzV2Vla2VuZChfZGF0ZSwgb3B0aW9ucyk7XG5cbiAgaWYgKGlzTmFOKGFtb3VudCkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCBOYU4pO1xuXG4gIGNvbnN0IGhvdXJzID0gX2RhdGUuZ2V0SG91cnMoKTtcbiAgY29uc3Qgc2lnbiA9IGFtb3VudCA8IDAgPyAtMSA6IDE7XG4gIGNvbnN0IGZ1bGxXZWVrcyA9IE1hdGgudHJ1bmMoYW1vdW50IC8gNSk7XG5cbiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBmdWxsV2Vla3MgKiA3KTtcblxuICAvLyBHZXQgcmVtYWluaW5nIGRheXMgbm90IHBhcnQgb2YgYSBmdWxsIHdlZWtcbiAgbGV0IHJlc3REYXlzID0gTWF0aC5hYnMoYW1vdW50ICUgNSk7XG5cbiAgLy8gTG9vcHMgb3ZlciByZW1haW5pbmcgZGF5c1xuICB3aGlsZSAocmVzdERheXMgPiAwKSB7XG4gICAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBzaWduKTtcbiAgICBpZiAoIWlzV2Vla2VuZChfZGF0ZSwgb3B0aW9ucykpIHJlc3REYXlzIC09IDE7XG4gIH1cblxuICAvLyBJZiB0aGUgZGF0ZSBpcyBhIHdlZWtlbmQgZGF5IGFuZCB3ZSByZWR1Y2UgYSBkaXZpZGFibGUgb2ZcbiAgLy8gNSBmcm9tIGl0LCB3ZSBsYW5kIG9uIGEgd2Vla2VuZCBkYXRlLlxuICAvLyBUbyBjb3VudGVyIHRoaXMsIHdlIGFkZCBkYXlzIGFjY29yZGluZ2x5IHRvIGxhbmQgb24gdGhlIG5leHQgYnVzaW5lc3MgZGF5XG4gIGlmIChzdGFydGVkT25XZWVrZW5kICYmIGlzV2Vla2VuZChfZGF0ZSwgb3B0aW9ucykgJiYgYW1vdW50ICE9PSAwKSB7XG4gICAgLy8gSWYgd2UncmUgcmVkdWNpbmcgZGF5cywgd2Ugd2FudCB0byBhZGQgZGF5cyB1bnRpbCB3ZSBsYW5kIG9uIGEgd2Vla2RheVxuICAgIC8vIElmIHdlJ3JlIGFkZGluZyBkYXlzIHdlIHdhbnQgdG8gcmVkdWNlIGRheXMgdW50aWwgd2UgbGFuZCBvbiBhIHdlZWtkYXlcbiAgICBpZiAoaXNTYXR1cmRheShfZGF0ZSwgb3B0aW9ucykpXG4gICAgICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIChzaWduIDwgMCA/IDIgOiAtMSkpO1xuICAgIGlmIChpc1N1bmRheShfZGF0ZSwgb3B0aW9ucykpXG4gICAgICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIChzaWduIDwgMCA/IDEgOiAtMikpO1xuICB9XG5cbiAgLy8gUmVzdG9yZSBob3VycyB0byBhdm9pZCBEU1QgbGFnXG4gIF9kYXRlLnNldEhvdXJzKGhvdXJzKTtcblxuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgYWRkQnVzaW5lc3NEYXlzO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGFkZE1pbGxpc2Vjb25kc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0XG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsICt0b0RhdGUoZGF0ZSkgKyBhbW91bnQpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFkZE1pbGxpc2Vjb25kcztcbiIsICJpbXBvcnQgeyBhZGRNaWxsaXNlY29uZHMgfSBmcm9tIFwiLi9hZGRNaWxsaXNlY29uZHMuanNcIjtcbmltcG9ydCB7IG1pbGxpc2Vjb25kc0luSG91ciB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgYWRkSG91cnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBhZGRIb3Vyc1xuICogQGNhdGVnb3J5IEhvdXIgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGhvdXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGhvdXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGhvdXJzIHRvIGJlIGFkZGVkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgaG91cnMgYWRkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDIgaG91cnMgdG8gMTAgSnVseSAyMDE0IDIzOjAwOjAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkSG91cnMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDIzLCAwKSwgMilcbiAqIC8vPT4gRnJpIEp1bCAxMSAyMDE0IDAxOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb3VycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQgKiBtaWxsaXNlY29uZHNJbkhvdXIsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFkZEhvdXJzO1xuIiwgImxldCBkZWZhdWx0T3B0aW9ucyA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXdPcHRpb25zO1xufVxuIiwgImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mV2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZXZWVrXG4gKiBAY2F0ZWdvcnkgV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSB3ZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBTdW4gQXVnIDMxIDIwMTQgMDA6MDA6MDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdGhlIHdlZWsgc3RhcnRzIG9uIE1vbmRheSwgdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSwgeyB3ZWVrU3RhcnRzT246IDEgfSlcbiAqIC8vPT4gTW9uIFNlcCAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3Qgd2Vla1N0YXJ0c09uID1cbiAgICBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgMDtcblxuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRheSA9IF9kYXRlLmdldERheSgpO1xuICBjb25zdCBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcblxuICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSAtIGRpZmYpO1xuICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZXZWVrO1xuIiwgImltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZJU09XZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZklTT1dlZWtcbiAqIEBjYXRlZ29yeSBJU08gV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYW4gSVNPIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhbiBJU08gd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYW4gSVNPIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mSVNPV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZJU09XZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHN0YXJ0T2ZXZWVrKGRhdGUsIHsgLi4ub3B0aW9ucywgd2Vla1N0YXJ0c09uOiAxIH0pO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZJU09XZWVrO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mSVNPV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldElTT1dlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0SVNPV2Vla1llYXJcbiAqIEBjYXRlZ29yeSBJU08gV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZSxcbiAqIHdoaWNoIGFsd2F5cyBzdGFydHMgMyBkYXlzIGJlZm9yZSB0aGUgeWVhcidzIGZpcnN0IFRodXJzZGF5LlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKlxuICogQHJldHVybnMgVGhlIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIElTTy13ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0SVNPV2Vla1llYXIobmV3IERhdGUoMjAwNSwgMCwgMikpXG4gKiAvLz0+IDIwMDRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTtcblxuICBjb25zdCBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShfZGF0ZSwgMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyKTtcblxuICBjb25zdCBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gY29uc3RydWN0RnJvbShfZGF0ZSwgMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGNvbnN0IHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIpO1xuXG4gIGlmIChfZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChfZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldElTT1dlZWtZZWFyO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUpO1xuICBjb25zdCB1dGNEYXRlID0gbmV3IERhdGUoXG4gICAgRGF0ZS5VVEMoXG4gICAgICBfZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgX2RhdGUuZ2V0TW9udGgoKSxcbiAgICAgIF9kYXRlLmdldERhdGUoKSxcbiAgICAgIF9kYXRlLmdldEhvdXJzKCksXG4gICAgICBfZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICBfZGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgICBfZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSxcbiAgICApLFxuICApO1xuICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKF9kYXRlLmdldEZ1bGxZZWFyKCkpO1xuICByZXR1cm4gK2RhdGUgLSArdXRjRGF0ZTtcbn1cbiIsICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4uL2NvbnN0cnVjdEZyb20uanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZURhdGVzKGNvbnRleHQsIC4uLmRhdGVzKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZSA9IGNvbnN0cnVjdEZyb20uYmluZChcbiAgICBudWxsLFxuICAgIGNvbnRleHQgfHwgZGF0ZXMuZmluZCgoZGF0ZSkgPT4gdHlwZW9mIGRhdGUgPT09IFwib2JqZWN0XCIpLFxuICApO1xuICByZXR1cm4gZGF0ZXMubWFwKG5vcm1hbGl6ZSk7XG59XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mRGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZkRheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgZGF5IGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSBkYXkgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhIGRheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSBkYXkgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFR1ZSBTZXAgMDIgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZkRheShkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mRGF5O1xuIiwgImltcG9ydCB7IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgfSBmcm9tIFwiLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5EYXkgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZEYXkgfSBmcm9tIFwiLi9zdGFydE9mRGF5LmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgZGF5cyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIGRheXMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgdGltZXMgYXJlIHJlbW92ZWRcbiAqIGZyb20gdGhlIGRhdGVzIGFuZCB0aGVuIHRoZSBkaWZmZXJlbmNlIGluIGRheXMgaXMgY2FsY3VsYXRlZC5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0XG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjAwOjAwIGFuZCAyIEp1bHkgMjAxMiAwMDowMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMiwgNiwgMiwgMCwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCAwKVxuICogKVxuICogLy89PiAzNjZcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjU5OjAwIGFuZCAzIEp1bHkgMjAxMSAwMDowMTowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMywgMCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCA1OSlcbiAqIClcbiAqIC8vPT4gMVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBsYXRlckRhdGUsXG4gICAgZWFybGllckRhdGUsXG4gICk7XG5cbiAgY29uc3QgbGF0ZXJTdGFydE9mRGF5ID0gc3RhcnRPZkRheShsYXRlckRhdGVfKTtcbiAgY29uc3QgZWFybGllclN0YXJ0T2ZEYXkgPSBzdGFydE9mRGF5KGVhcmxpZXJEYXRlXyk7XG5cbiAgY29uc3QgbGF0ZXJUaW1lc3RhbXAgPVxuICAgICtsYXRlclN0YXJ0T2ZEYXkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGxhdGVyU3RhcnRPZkRheSk7XG4gIGNvbnN0IGVhcmxpZXJUaW1lc3RhbXAgPVxuICAgICtlYXJsaWVyU3RhcnRPZkRheSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllclN0YXJ0T2ZEYXkpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIGJlY2F1c2UgdGhlIG51bWJlciBvZlxuICAvLyBtaWxsaXNlY29uZHMgaW4gYSBkYXkgaXMgbm90IGNvbnN0YW50IChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mXG4gIC8vIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdCkuXG4gIHJldHVybiBNYXRoLnJvdW5kKChsYXRlclRpbWVzdGFtcCAtIGVhcmxpZXJUaW1lc3RhbXApIC8gbWlsbGlzZWNvbmRzSW5EYXkpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cztcbiIsICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgZ2V0SVNPV2Vla1llYXIgfSBmcm9tIFwiLi9nZXRJU09XZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZklTT1dlZWsgfSBmcm9tIFwiLi9zdGFydE9mSVNPV2Vlay5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZklTT1dlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZklTT1dlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLFxuICogd2hpY2ggYWx3YXlzIHN0YXJ0cyAzIGRheXMgYmVmb3JlIHRoZSB5ZWFyJ3MgZmlyc3QgVGh1cnNkYXkuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgMiBKdWx5IDIwMDU6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mSVNPV2Vla1llYXIobmV3IERhdGUoMjAwNSwgNiwgMikpXG4gKiAvLz0+IE1vbiBKYW4gMDMgMjAwNSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICBjb25zdCBmb3VydGhPZkphbnVhcnkgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZklTT1dlZWtZZWFyO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrWWVhciB9IGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzZXRJU09XZWVrWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHNldElTT1dlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgU2V0IHRoZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhciB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCB0aGUgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgdG8gdGhlIGdpdmVuIGRhdGUsXG4gKiBzYXZpbmcgdGhlIHdlZWsgbnVtYmVyIGFuZCB0aGUgd2Vla2RheSBudW1iZXIuXG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB1c2luZyBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHdlZWtZZWFyIC0gVGhlIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBuZXcgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIHNldFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgMjAwNyB0byAyOSBEZWNlbWJlciAyMDA4OlxuICogY29uc3QgcmVzdWx0ID0gc2V0SVNPV2Vla1llYXIobmV3IERhdGUoMjAwOCwgMTEsIDI5KSwgMjAwNylcbiAqIC8vPT4gTW9uIEphbiAwMSAyMDA3IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRJU09XZWVrWWVhcihkYXRlLCB3ZWVrWWVhciwgb3B0aW9ucykge1xuICBsZXQgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKFxuICAgIF9kYXRlLFxuICAgIHN0YXJ0T2ZJU09XZWVrWWVhcihfZGF0ZSwgb3B0aW9ucyksXG4gICk7XG4gIGNvbnN0IGZvdXJ0aE9mSmFudWFyeSA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRGdWxsWWVhcih3ZWVrWWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgX2RhdGUgPSBzdGFydE9mSVNPV2Vla1llYXIoZm91cnRoT2ZKYW51YXJ5KTtcbiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHNldElTT1dlZWtZZWFyO1xuIiwgImltcG9ydCB7IGdldElTT1dlZWtZZWFyIH0gZnJvbSBcIi4vZ2V0SVNPV2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHNldElTT1dlZWtZZWFyIH0gZnJvbSBcIi4vc2V0SVNPV2Vla1llYXIuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGFkZElTT1dlZWtZZWFyc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGFkZElTT1dlZWtZZWFyc1xuICogQGNhdGVnb3J5IElTTyBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyB0byBiZSBhZGRlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgYWRkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDUgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIHRvIDIgSnVseSAyMDEwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkSVNPV2Vla1llYXJzKG5ldyBEYXRlKDIwMTAsIDYsIDIpLCA1KVxuICogLy89PiBGcmkgSnVuIDI2IDIwMTUgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZElTT1dlZWtZZWFycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHNldElTT1dlZWtZZWFyKGRhdGUsIGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpICsgYW1vdW50LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBhZGRJU09XZWVrWWVhcnM7XG4iLCAiaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5NaW51dGUgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgYWRkTWludXRlc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGFkZE1pbnV0ZXNcbiAqIEBjYXRlZ29yeSBNaW51dGUgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWludXRlcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBtaW51dGVzIHRvIGJlIGFkZGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbnV0ZXMgYWRkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDMwIG1pbnV0ZXMgdG8gMTAgSnVseSAyMDE0IDEyOjAwOjAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWludXRlcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDApLCAzMClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjMwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRNaW51dGVzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIF9kYXRlLnNldFRpbWUoX2RhdGUuZ2V0VGltZSgpICsgYW1vdW50ICogbWlsbGlzZWNvbmRzSW5NaW51dGUpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgYWRkTWludXRlcztcbiIsICJpbXBvcnQgeyBhZGRNb250aHMgfSBmcm9tIFwiLi9hZGRNb250aHMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGFkZFF1YXJ0ZXJzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgYWRkUXVhcnRlcnNcbiAqIEBjYXRlZ29yeSBRdWFydGVyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB5ZWFyIHF1YXJ0ZXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHllYXIgcXVhcnRlcnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIGFtb3VudCAtIFRoZSBhbW91bnQgb2YgcXVhcnRlcnMgdG8gYmUgYWRkZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgcXVhcnRlcnMgYWRkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDEgcXVhcnRlciB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gYWRkUXVhcnRlcnMobmV3IERhdGUoMjAxNCwgOCwgMSksIDEpXG4gKiAvLz07IE1vbiBEZWMgMDEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkUXVhcnRlcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIHJldHVybiBhZGRNb250aHMoZGF0ZSwgYW1vdW50ICogMywgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgYWRkUXVhcnRlcnM7XG4iLCAiaW1wb3J0IHsgYWRkTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4vYWRkTWlsbGlzZWNvbmRzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBhZGRTZWNvbmRzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgYWRkU2Vjb25kc1xuICogQGNhdGVnb3J5IFNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIHNlY29uZHMgdG8gYmUgYWRkZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgc2Vjb25kcyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgMzAgc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRTZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDApLCAzMClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjMwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZWNvbmRzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIGFtb3VudCAqIDEwMDAsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFkZFNlY29uZHM7XG4iLCAiaW1wb3J0IHsgYWRkRGF5cyB9IGZyb20gXCIuL2FkZERheXMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGFkZFdlZWtzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgYWRkV2Vla3NcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB3ZWVrcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB3ZWVrcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiB3ZWVrcyB0byBiZSBhZGRlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSB3ZWVrcyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNCB3ZWVrcyB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gYWRkV2Vla3MobmV3IERhdGUoMjAxNCwgOCwgMSksIDQpXG4gKiAvLz0+IE1vbiBTZXAgMjkgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkV2Vla3MoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIHJldHVybiBhZGREYXlzKGRhdGUsIGFtb3VudCAqIDcsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFkZFdlZWtzO1xuIiwgImltcG9ydCB7IGFkZE1vbnRocyB9IGZyb20gXCIuL2FkZE1vbnRocy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgYWRkWWVhcnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBhZGRZZWFyc1xuICogQGNhdGVnb3J5IFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHllYXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHllYXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIHllYXJzIHRvIGJlIGFkZGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSB5ZWFycyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNSB5ZWFycyB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gYWRkWWVhcnMobmV3IERhdGUoMjAxNCwgOCwgMSksIDUpXG4gKiAvLz0+IFN1biBTZXAgMDEgMjAxOSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIHJldHVybiBhZGRNb250aHMoZGF0ZSwgYW1vdW50ICogMTIsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFkZFllYXJzO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmd9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBhcmVJbnRlcnZhbHNPdmVybGFwcGluZ1xuICogQGNhdGVnb3J5IEludGVydmFsIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB0aW1lIGludGVydmFsIG92ZXJsYXBwaW5nIHdpdGggYW5vdGhlciB0aW1lIGludGVydmFsP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIHRpbWUgaW50ZXJ2YWwgb3ZlcmxhcHBpbmcgd2l0aCBhbm90aGVyIHRpbWUgaW50ZXJ2YWw/IEFkamFjZW50IGludGVydmFscyBkbyBub3QgY291bnQgYXMgb3ZlcmxhcHBpbmcgdW5sZXNzIGBpbmNsdXNpdmVgIGlzIHNldCB0byBgdHJ1ZWAuXG4gKlxuICogQHBhcmFtIGludGVydmFsTGVmdCAtIFRoZSBmaXJzdCBpbnRlcnZhbCB0byBjb21wYXJlLlxuICogQHBhcmFtIGludGVydmFsUmlnaHQgLSBUaGUgc2Vjb25kIGludGVydmFsIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdGltZSBpbnRlcnZhbHMgYXJlIG92ZXJsYXBwaW5nXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBvdmVybGFwcGluZyB0aW1lIGludGVydmFsczpcbiAqIGFyZUludGVydmFsc092ZXJsYXBwaW5nKFxuICogICB7IHN0YXJ0OiBuZXcgRGF0ZSgyMDE0LCAwLCAxMCksIGVuZDogbmV3IERhdGUoMjAxNCwgMCwgMjApIH0sXG4gKiAgIHsgc3RhcnQ6IG5ldyBEYXRlKDIwMTQsIDAsIDE3KSwgZW5kOiBuZXcgRGF0ZSgyMDE0LCAwLCAyMSkgfVxuICogKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBub24tb3ZlcmxhcHBpbmcgdGltZSBpbnRlcnZhbHM6XG4gKiBhcmVJbnRlcnZhbHNPdmVybGFwcGluZyhcbiAqICAgeyBzdGFydDogbmV3IERhdGUoMjAxNCwgMCwgMTApLCBlbmQ6IG5ldyBEYXRlKDIwMTQsIDAsIDIwKSB9LFxuICogICB7IHN0YXJ0OiBuZXcgRGF0ZSgyMDE0LCAwLCAyMSksIGVuZDogbmV3IERhdGUoMjAxNCwgMCwgMjIpIH1cbiAqIClcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFkamFjZW50IHRpbWUgaW50ZXJ2YWxzOlxuICogYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcoXG4gKiAgIHsgc3RhcnQ6IG5ldyBEYXRlKDIwMTQsIDAsIDEwKSwgZW5kOiBuZXcgRGF0ZSgyMDE0LCAwLCAyMCkgfSxcbiAqICAgeyBzdGFydDogbmV3IERhdGUoMjAxNCwgMCwgMjApLCBlbmQ6IG5ldyBEYXRlKDIwMTQsIDAsIDMwKSB9XG4gKiApXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFVzaW5nIHRoZSBpbmNsdXNpdmUgb3B0aW9uOlxuICogYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcoXG4gKiAgIHsgc3RhcnQ6IG5ldyBEYXRlKDIwMTQsIDAsIDEwKSwgZW5kOiBuZXcgRGF0ZSgyMDE0LCAwLCAyMCkgfSxcbiAqICAgeyBzdGFydDogbmV3IERhdGUoMjAxNCwgMCwgMjApLCBlbmQ6IG5ldyBEYXRlKDIwMTQsIDAsIDI0KSB9LFxuICogICB7IGluY2x1c2l2ZTogdHJ1ZSB9XG4gKiApXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFyZUludGVydmFsc092ZXJsYXBwaW5nKGludGVydmFsTGVmdCwgaW50ZXJ2YWxSaWdodCwgb3B0aW9ucykge1xuICBjb25zdCBbbGVmdFN0YXJ0VGltZSwgbGVmdEVuZFRpbWVdID0gW1xuICAgICt0b0RhdGUoaW50ZXJ2YWxMZWZ0LnN0YXJ0LCBvcHRpb25zPy5pbiksXG4gICAgK3RvRGF0ZShpbnRlcnZhbExlZnQuZW5kLCBvcHRpb25zPy5pbiksXG4gIF0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICBjb25zdCBbcmlnaHRTdGFydFRpbWUsIHJpZ2h0RW5kVGltZV0gPSBbXG4gICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LnN0YXJ0LCBvcHRpb25zPy5pbiksXG4gICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LmVuZCwgb3B0aW9ucz8uaW4pLFxuICBdLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblxuICBpZiAob3B0aW9ucz8uaW5jbHVzaXZlKVxuICAgIHJldHVybiBsZWZ0U3RhcnRUaW1lIDw9IHJpZ2h0RW5kVGltZSAmJiByaWdodFN0YXJ0VGltZSA8PSBsZWZ0RW5kVGltZTtcblxuICByZXR1cm4gbGVmdFN0YXJ0VGltZSA8IHJpZ2h0RW5kVGltZSAmJiByaWdodFN0YXJ0VGltZSA8IGxlZnRFbmRUaW1lO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFyZUludGVydmFsc092ZXJsYXBwaW5nO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIG1heH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIG1heFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGxhdGVzdCBvZiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGxhdGVzdCBvZiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlcyAtIFRoZSBkYXRlcyB0byBjb21wYXJlXG4gKlxuICogQHJldHVybnMgVGhlIGxhdGVzdCBvZiB0aGUgZGF0ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggb2YgdGhlc2UgZGF0ZXMgaXMgdGhlIGxhdGVzdD9cbiAqIGNvbnN0IHJlc3VsdCA9IG1heChbXG4gKiAgIG5ldyBEYXRlKDE5ODksIDYsIDEwKSxcbiAqICAgbmV3IERhdGUoMTk4NywgMSwgMTEpLFxuICogICBuZXcgRGF0ZSgxOTk1LCA2LCAyKSxcbiAqICAgbmV3IERhdGUoMTk5MCwgMCwgMSlcbiAqIF0pXG4gKiAvLz0+IFN1biBKdWwgMDIgMTk5NSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF4KGRhdGVzLCBvcHRpb25zKSB7XG4gIGxldCByZXN1bHQ7XG4gIGxldCBjb250ZXh0ID0gb3B0aW9ucz8uaW47XG5cbiAgZGF0ZXMuZm9yRWFjaCgoZGF0ZSkgPT4ge1xuICAgIC8vIFVzZSB0aGUgZmlyc3QgZGF0ZSBvYmplY3QgYXMgdGhlIGNvbnRleHQgZnVuY3Rpb25cbiAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIGRhdGUgPT09IFwib2JqZWN0XCIpXG4gICAgICBjb250ZXh0ID0gY29uc3RydWN0RnJvbS5iaW5kKG51bGwsIGRhdGUpO1xuXG4gICAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgY29udGV4dCk7XG4gICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0IDwgZGF0ZV8gfHwgaXNOYU4oK2RhdGVfKSkgcmVzdWx0ID0gZGF0ZV87XG4gIH0pO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RGcm9tKGNvbnRleHQsIHJlc3VsdCB8fCBOYU4pO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IG1heDtcbiIsICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBtaW59IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBtaW5cbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJucyB0aGUgZWFybGllc3Qgb2YgdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyB0aGUgZWFybGllc3Qgb2YgdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZXMgLSBUaGUgZGF0ZXMgdG8gY29tcGFyZVxuICpcbiAqIEByZXR1cm5zIFRoZSBlYXJsaWVzdCBvZiB0aGUgZGF0ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggb2YgdGhlc2UgZGF0ZXMgaXMgdGhlIGVhcmxpZXN0P1xuICogY29uc3QgcmVzdWx0ID0gbWluKFtcbiAqICAgbmV3IERhdGUoMTk4OSwgNiwgMTApLFxuICogICBuZXcgRGF0ZSgxOTg3LCAxLCAxMSksXG4gKiAgIG5ldyBEYXRlKDE5OTUsIDYsIDIpLFxuICogICBuZXcgRGF0ZSgxOTkwLCAwLCAxKVxuICogXSlcbiAqIC8vPT4gV2VkIEZlYiAxMSAxOTg3IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaW4oZGF0ZXMsIG9wdGlvbnMpIHtcbiAgbGV0IHJlc3VsdDtcbiAgbGV0IGNvbnRleHQgPSBvcHRpb25zPy5pbjtcblxuICBkYXRlcy5mb3JFYWNoKChkYXRlKSA9PiB7XG4gICAgLy8gVXNlIHRoZSBmaXJzdCBkYXRlIG9iamVjdCBhcyB0aGUgY29udGV4dCBmdW5jdGlvblxuICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgZGF0ZSA9PT0gXCJvYmplY3RcIilcbiAgICAgIGNvbnRleHQgPSBjb25zdHJ1Y3RGcm9tLmJpbmQobnVsbCwgZGF0ZSk7XG5cbiAgICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBjb250ZXh0KTtcbiAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQgPiBkYXRlXyB8fCBpc05hTigrZGF0ZV8pKSByZXN1bHQgPSBkYXRlXztcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdEZyb20oY29udGV4dCwgcmVzdWx0IHx8IE5hTik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgbWluO1xuIiwgImltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgbWF4IH0gZnJvbSBcIi4vbWF4LmpzXCI7XG5pbXBvcnQgeyBtaW4gfSBmcm9tIFwiLi9taW4uanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGNsYW1wfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogVGhlIHtAbGluayBjbGFtcH0gZnVuY3Rpb24gcmVzdWx0IHR5cGUuIEl0IHJlc29sdmVzIHRoZSBwcm9wZXIgZGF0YSB0eXBlLlxuICogSXQgdXNlcyB0aGUgZmlyc3QgYXJndW1lbnQgZGF0ZSBvYmplY3QgdHlwZSwgc3RhcnRpbmcgZnJvbSB0aGUgZGF0ZSBhcmd1bWVudCxcbiAqIHRoZW4gdGhlIHN0YXJ0IGludGVydmFsIGRhdGUsIGFuZCBmaW5hbGx5IHRoZSBlbmQgaW50ZXJ2YWwgZGF0ZS4gSWZcbiAqIGEgY29udGV4dCBmdW5jdGlvbiBpcyBwYXNzZWQsIGl0IHVzZXMgdGhlIGNvbnRleHQgZnVuY3Rpb24gcmV0dXJuIHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBjbGFtcFxuICogQGNhdGVnb3J5IEludGVydmFsIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiBhIGRhdGUgYm91bmRlZCBieSB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgb2YgdGhlIGdpdmVuIGludGVydmFsLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ2xhbXBzIGEgZGF0ZSB0byB0aGUgbG93ZXIgYm91bmQgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIGludGVydmFsIGFuZCB0aGUgdXBwZXJcbiAqIGJvdW5kIHdpdGggdGhlIGVuZCBvZiB0aGUgaW50ZXJ2YWwuXG4gKlxuICogLSBXaGVuIHRoZSBkYXRlIGlzIGxlc3MgdGhhbiB0aGUgc3RhcnQgb2YgdGhlIGludGVydmFsLCB0aGUgc3RhcnQgaXMgcmV0dXJuZWQuXG4gKiAtIFdoZW4gdGhlIGRhdGUgaXMgZ3JlYXRlciB0aGFuIHRoZSBlbmQgb2YgdGhlIGludGVydmFsLCB0aGUgZW5kIGlzIHJldHVybmVkLlxuICogLSBPdGhlcndpc2UgdGhlIGRhdGUgaXMgcmV0dXJuZWQuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIERhdGUgYXJndW1lbnQgdHlwZS5cbiAqIEB0eXBlUGFyYW0gSW50ZXJ2YWxUeXBlIC0gSW50ZXJ2YWwgYXJndW1lbnQgdHlwZS5cbiAqIEB0eXBlUGFyYW0gT3B0aW9ucyAtIE9wdGlvbnMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGJvdW5kZWRcbiAqIEBwYXJhbSBpbnRlcnZhbCAtIFRoZSBpbnRlcnZhbCB0byBib3VuZCB0b1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGUgYm91bmRlZCBieSB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgb2YgdGhlIGludGVydmFsXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoYXQgaXMgTWFyIDIxLCAyMDIxIGJvdW5kZWQgdG8gYW4gaW50ZXJ2YWwgc3RhcnRpbmcgYXQgTWFyIDIyLCAyMDIxIGFuZCBlbmRpbmcgYXQgQXByIDAxLCAyMDIxXG4gKiBjb25zdCByZXN1bHQgPSBjbGFtcChuZXcgRGF0ZSgyMDIxLCAyLCAyMSksIHtcbiAqICAgc3RhcnQ6IG5ldyBEYXRlKDIwMjEsIDIsIDIyKSxcbiAqICAgZW5kOiBuZXcgRGF0ZSgyMDIxLCAzLCAxKSxcbiAqIH0pXG4gKiAvLz0+IE1vbiBNYXIgMjIgMjAyMSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAoZGF0ZSwgaW50ZXJ2YWwsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2RhdGVfLCBzdGFydCwgZW5kXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGRhdGUsXG4gICAgaW50ZXJ2YWwuc3RhcnQsXG4gICAgaW50ZXJ2YWwuZW5kLFxuICApO1xuXG4gIHJldHVybiBtaW4oW21heChbZGF0ZV8sIHN0YXJ0XSwgb3B0aW9ucyksIGVuZF0sIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGNsYW1wO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGNsb3Nlc3RJbmRleFRvXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiBhbiBpbmRleCBvZiB0aGUgY2xvc2VzdCBkYXRlIGZyb20gdGhlIGFycmF5IGNvbXBhcmluZyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiBhbiBpbmRleCBvZiB0aGUgY2xvc2VzdCBkYXRlIGZyb20gdGhlIGFycmF5IGNvbXBhcmluZyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZVRvQ29tcGFyZSAtIFRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aFxuICogQHBhcmFtIGRhdGVzIC0gVGhlIGFycmF5IHRvIHNlYXJjaFxuICpcbiAqIEByZXR1cm5zIEFuIGluZGV4IG9mIHRoZSBkYXRlIGNsb3Nlc3QgdG8gdGhlIGdpdmVuIGRhdGUgb3IgdW5kZWZpbmVkIGlmIG5vIHZhbGlkIHZhbHVlIGlzIGdpdmVuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIGRhdGUgaXMgY2xvc2VyIHRvIDYgU2VwdGVtYmVyIDIwMTU/XG4gKiBjb25zdCBkYXRlVG9Db21wYXJlID0gbmV3IERhdGUoMjAxNSwgOCwgNilcbiAqIGNvbnN0IGRhdGVzQXJyYXkgPSBbXG4gKiAgIG5ldyBEYXRlKDIwMTUsIDAsIDEpLFxuICogICBuZXcgRGF0ZSgyMDE2LCAwLCAxKSxcbiAqICAgbmV3IERhdGUoMjAxNywgMCwgMSlcbiAqIF1cbiAqIGNvbnN0IHJlc3VsdCA9IGNsb3Nlc3RJbmRleFRvKGRhdGVUb0NvbXBhcmUsIGRhdGVzQXJyYXkpXG4gKiAvLz0+IDFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3Nlc3RJbmRleFRvKGRhdGVUb0NvbXBhcmUsIGRhdGVzKSB7XG4gIC8vIFtUT0RPXSBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gcmV0dXJuIC0xIGhlcmUgcmF0aGVyIHRoYW4gdW5kZWZpbmVkLCBhcyB0aGlzXG4gIC8vIGlzIGhvdyBKUyBiZWhhdmVzLCBidXQgaXQgd291bGQgYmUgYSBicmVha2luZyBjaGFuZ2UsIHNvIHdlIG5lZWRcbiAgLy8gdG8gY29uc2lkZXIgaXQgZm9yIHY0LlxuICBjb25zdCB0aW1lVG9Db21wYXJlID0gK3RvRGF0ZShkYXRlVG9Db21wYXJlKTtcblxuICBpZiAoaXNOYU4odGltZVRvQ29tcGFyZSkpIHJldHVybiBOYU47XG5cbiAgbGV0IHJlc3VsdDtcbiAgbGV0IG1pbkRpc3RhbmNlO1xuICBkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUpO1xuXG4gICAgaWYgKGlzTmFOKCtkYXRlXykpIHtcbiAgICAgIHJlc3VsdCA9IE5hTjtcbiAgICAgIG1pbkRpc3RhbmNlID0gTmFOO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnModGltZVRvQ29tcGFyZSAtICtkYXRlXyk7XG4gICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgIHJlc3VsdCA9IGluZGV4O1xuICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgY2xvc2VzdEluZGV4VG87XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBjbG9zZXN0SW5kZXhUbyB9IGZyb20gXCIuL2Nsb3Nlc3RJbmRleFRvLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgY2xvc2VzdFRvfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogVGhlIHtAbGluayBjbG9zZXN0VG99IGZ1bmN0aW9uIHJlc3VsdCB0eXBlLiBJdCByZXNvbHZlcyB0aGUgcHJvcGVyIGRhdGEgdHlwZS5cbiAqIEl0IHVzZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGRhdGUgb2JqZWN0IHR5cGUsIHN0YXJ0aW5nIGZyb20gdGhlIGRhdGUgYXJndW1lbnQsXG4gKiB0aGVuIHRoZSBzdGFydCBpbnRlcnZhbCBkYXRlLCBhbmQgZmluYWxseSB0aGUgZW5kIGludGVydmFsIGRhdGUuIElmXG4gKiBhIGNvbnRleHQgZnVuY3Rpb24gaXMgcGFzc2VkLCBpdCB1c2VzIHRoZSBjb250ZXh0IGZ1bmN0aW9uIHJldHVybiB0eXBlLlxuICovXG5cbi8qKlxuICogQG5hbWUgY2xvc2VzdFRvXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiBhIGRhdGUgZnJvbSB0aGUgYXJyYXkgY2xvc2VzdCB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiBhIGRhdGUgZnJvbSB0aGUgYXJyYXkgY2xvc2VzdCB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUb0NvbXBhcmUgLSBEYXRlIHRvIGNvbXBhcmUgYXJndW1lbnQgdHlwZS5cbiAqIEB0eXBlUGFyYW0gRGF0ZXNUeXBlIC0gRGF0ZXMgYXJyYXkgYXJndW1lbnQgdHlwZS5cbiAqIEB0eXBlUGFyYW0gT3B0aW9ucyAtIE9wdGlvbnMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZVRvQ29tcGFyZSAtIFRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aFxuICogQHBhcmFtIGRhdGVzIC0gVGhlIGFycmF5IHRvIHNlYXJjaFxuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGZyb20gdGhlIGFycmF5IGNsb3Nlc3QgdG8gdGhlIGdpdmVuIGRhdGUgb3IgdW5kZWZpbmVkIGlmIG5vIHZhbGlkIHZhbHVlIGlzIGdpdmVuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIGRhdGUgaXMgY2xvc2VyIHRvIDYgU2VwdGVtYmVyIDIwMTU6IDEgSmFudWFyeSAyMDAwIG9yIDEgSmFudWFyeSAyMDMwP1xuICogY29uc3QgZGF0ZVRvQ29tcGFyZSA9IG5ldyBEYXRlKDIwMTUsIDgsIDYpXG4gKiBjb25zdCByZXN1bHQgPSBjbG9zZXN0VG8oZGF0ZVRvQ29tcGFyZSwgW1xuICogICBuZXcgRGF0ZSgyMDAwLCAwLCAxKSxcbiAqICAgbmV3IERhdGUoMjAzMCwgMCwgMSlcbiAqIF0pXG4gKiAvLz0+IFR1ZSBKYW4gMDEgMjAzMCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VzdFRvKGRhdGVUb0NvbXBhcmUsIGRhdGVzLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtkYXRlVG9Db21wYXJlXywgLi4uZGF0ZXNfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGRhdGVUb0NvbXBhcmUsXG4gICAgLi4uZGF0ZXMsXG4gICk7XG5cbiAgY29uc3QgaW5kZXggPSBjbG9zZXN0SW5kZXhUbyhkYXRlVG9Db21wYXJlXywgZGF0ZXNfKTtcblxuICBpZiAodHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiICYmIGlzTmFOKGluZGV4KSlcbiAgICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlVG9Db21wYXJlXywgTmFOKTtcblxuICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRhdGVzX1tpbmRleF07XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgY2xvc2VzdFRvO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGNvbXBhcmVBc2NcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29tcGFyZSB0aGUgdHdvIGRhdGVzIGFuZCByZXR1cm4gLTEsIDAgb3IgMS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbXBhcmUgdGhlIHR3byBkYXRlcyBhbmQgcmV0dXJuIDEgaWYgdGhlIGZpcnN0IGRhdGUgaXMgYWZ0ZXIgdGhlIHNlY29uZCxcbiAqIC0xIGlmIHRoZSBmaXJzdCBkYXRlIGlzIGJlZm9yZSB0aGUgc2Vjb25kIG9yIDAgaWYgZGF0ZXMgYXJlIGVxdWFsLlxuICpcbiAqIEBwYXJhbSBkYXRlTGVmdCAtIFRoZSBmaXJzdCBkYXRlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSBkYXRlUmlnaHQgLSBUaGUgc2Vjb25kIGRhdGUgdG8gY29tcGFyZVxuICpcbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb25cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29tcGFyZSAxMSBGZWJydWFyeSAxOTg3IGFuZCAxMCBKdWx5IDE5ODk6XG4gKiBjb25zdCByZXN1bHQgPSBjb21wYXJlQXNjKG5ldyBEYXRlKDE5ODcsIDEsIDExKSwgbmV3IERhdGUoMTk4OSwgNiwgMTApKVxuICogLy89PiAtMVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTb3J0IHRoZSBhcnJheSBvZiBkYXRlczpcbiAqIGNvbnN0IHJlc3VsdCA9IFtcbiAqICAgbmV3IERhdGUoMTk5NSwgNiwgMiksXG4gKiAgIG5ldyBEYXRlKDE5ODcsIDEsIDExKSxcbiAqICAgbmV3IERhdGUoMTk4OSwgNiwgMTApXG4gKiBdLnNvcnQoY29tcGFyZUFzYylcbiAqIC8vPT4gW1xuICogLy8gICBXZWQgRmViIDExIDE5ODcgMDA6MDA6MDAsXG4gKiAvLyAgIE1vbiBKdWwgMTAgMTk4OSAwMDowMDowMCxcbiAqIC8vICAgU3VuIEp1bCAwMiAxOTk1IDAwOjAwOjAwXG4gKiAvLyBdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlQXNjKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHtcbiAgY29uc3QgZGlmZiA9ICt0b0RhdGUoZGF0ZUxlZnQpIC0gK3RvRGF0ZShkYXRlUmlnaHQpO1xuXG4gIGlmIChkaWZmIDwgMCkgcmV0dXJuIC0xO1xuICBlbHNlIGlmIChkaWZmID4gMCkgcmV0dXJuIDE7XG5cbiAgLy8gUmV0dXJuIDAgaWYgZGlmZiBpcyAwOyByZXR1cm4gTmFOIGlmIGRpZmYgaXMgTmFOXG4gIHJldHVybiBkaWZmO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGNvbXBhcmVBc2M7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgY29tcGFyZURlc2NcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29tcGFyZSB0aGUgdHdvIGRhdGVzIHJldmVyc2UgY2hyb25vbG9naWNhbGx5IGFuZCByZXR1cm4gLTEsIDAgb3IgMS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbXBhcmUgdGhlIHR3byBkYXRlcyBhbmQgcmV0dXJuIC0xIGlmIHRoZSBmaXJzdCBkYXRlIGlzIGFmdGVyIHRoZSBzZWNvbmQsXG4gKiAxIGlmIHRoZSBmaXJzdCBkYXRlIGlzIGJlZm9yZSB0aGUgc2Vjb25kIG9yIDAgaWYgZGF0ZXMgYXJlIGVxdWFsLlxuICpcbiAqIEBwYXJhbSBkYXRlTGVmdCAtIFRoZSBmaXJzdCBkYXRlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSBkYXRlUmlnaHQgLSBUaGUgc2Vjb25kIGRhdGUgdG8gY29tcGFyZVxuICpcbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb25cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29tcGFyZSAxMSBGZWJydWFyeSAxOTg3IGFuZCAxMCBKdWx5IDE5ODkgcmV2ZXJzZSBjaHJvbm9sb2dpY2FsbHk6XG4gKiBjb25zdCByZXN1bHQgPSBjb21wYXJlRGVzYyhuZXcgRGF0ZSgxOTg3LCAxLCAxMSksIG5ldyBEYXRlKDE5ODksIDYsIDEwKSlcbiAqIC8vPT4gMVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTb3J0IHRoZSBhcnJheSBvZiBkYXRlcyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXI6XG4gKiBjb25zdCByZXN1bHQgPSBbXG4gKiAgIG5ldyBEYXRlKDE5OTUsIDYsIDIpLFxuICogICBuZXcgRGF0ZSgxOTg3LCAxLCAxMSksXG4gKiAgIG5ldyBEYXRlKDE5ODksIDYsIDEwKVxuICogXS5zb3J0KGNvbXBhcmVEZXNjKVxuICogLy89PiBbXG4gKiAvLyAgIFN1biBKdWwgMDIgMTk5NSAwMDowMDowMCxcbiAqIC8vICAgTW9uIEp1bCAxMCAxOTg5IDAwOjAwOjAwLFxuICogLy8gICBXZWQgRmViIDExIDE5ODcgMDA6MDA6MDBcbiAqIC8vIF1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVEZXNjKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHtcbiAgY29uc3QgZGlmZiA9ICt0b0RhdGUoZGF0ZUxlZnQpIC0gK3RvRGF0ZShkYXRlUmlnaHQpO1xuXG4gIGlmIChkaWZmID4gMCkgcmV0dXJuIC0xO1xuICBlbHNlIGlmIChkaWZmIDwgMCkgcmV0dXJuIDE7XG5cbiAgLy8gUmV0dXJuIDAgaWYgZGlmZiBpcyAwOyByZXR1cm4gTmFOIGlmIGRpZmYgaXMgTmFOXG4gIHJldHVybiBkaWZmO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGNvbXBhcmVEZXNjO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgY29uc3RydWN0Tm93XG4gKiBAY2F0ZWdvcnkgR2VuZXJpYyBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb25zdHJ1Y3RzIGEgbmV3IGN1cnJlbnQgZGF0ZSB1c2luZyB0aGUgcGFzc2VkIHZhbHVlIGNvbnN0cnVjdG9yLlxuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBmdW5jdGlvbiBjb25zdHJ1Y3RzIGEgbmV3IGN1cnJlbnQgZGF0ZSB1c2luZyB0aGUgY29uc3RydWN0b3IgZnJvbVxuICogdGhlIHJlZmVyZW5jZSBkYXRlLiBJdCBoZWxwcyB0byBidWlsZCBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBkYXRlXG4gKiBleHRlbnNpb25zIGFuZCB1c2UgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBJdCBkZWZhdWx0cyB0byBgRGF0ZWAgaWYgdGhlIHBhc3NlZCByZWZlcmVuY2UgZGF0ZSBpcyBhIG51bWJlciBvciBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSB0byB0YWtlIGNvbnN0cnVjdG9yIGZyb21cbiAqXG4gKiBAcmV0dXJucyBDdXJyZW50IGRhdGUgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGdpdmVuIGRhdGUgY29uc3RydWN0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgY29uc3RydWN0Tm93LCBpc1NhbWVEYXkgfSBmcm9tICdkYXRlLWZucydcbiAqXG4gKiBmdW5jdGlvbiBpc1RvZGF5PERhdGVUeXBlIGV4dGVuZHMgRGF0ZT4oXG4gKiAgIGRhdGU6IERhdGVBcmc8RGF0ZVR5cGU+LFxuICogKTogYm9vbGVhbiB7XG4gKiAgIC8vIElmIHdlIHdlcmUgdG8gdXNlIGBuZXcgRGF0ZSgpYCBkaXJlY3RseSwgdGhlIGZ1bmN0aW9uIHdvdWxkICBiZWhhdmVcbiAqICAgLy8gZGlmZmVyZW50bHkgaW4gZGlmZmVyZW50IHRpbWV6b25lcyBhbmQgcmV0dXJuIGZhbHNlIGZvciB0aGUgc2FtZSBkYXRlLlxuICogICByZXR1cm4gaXNTYW1lRGF5KGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSk7XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3ROb3coZGF0ZSkge1xuICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBEYXRlLm5vdygpKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBjb25zdHJ1Y3ROb3c7XG4iLCAiaW1wb3J0IHsgZGF5c0luV2VlayB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGRheXNUb1dlZWtzXG4gKiBAY2F0ZWdvcnkgQ29udmVyc2lvbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IGRheXMgdG8gd2Vla3MuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IGEgbnVtYmVyIG9mIGRheXMgdG8gYSBmdWxsIG51bWJlciBvZiB3ZWVrcy5cbiAqXG4gKiBAcGFyYW0gZGF5cyAtIFRoZSBudW1iZXIgb2YgZGF5cyB0byBiZSBjb252ZXJ0ZWRcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGRheXMgY29udmVydGVkIGluIHdlZWtzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgMTQgZGF5cyB0byB3ZWVrczpcbiAqIGNvbnN0IHJlc3VsdCA9IGRheXNUb1dlZWtzKDE0KVxuICogLy89PiAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEl0IHVzZXMgdHJ1bmMgcm91bmRpbmc6XG4gKiBjb25zdCByZXN1bHQgPSBkYXlzVG9XZWVrcygxMylcbiAqIC8vPT4gMVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF5c1RvV2Vla3MoZGF5cykge1xuICBjb25zdCByZXN1bHQgPSBNYXRoLnRydW5jKGRheXMgLyBkYXlzSW5XZWVrKTtcbiAgLy8gUHJldmVudCBuZWdhdGl2ZSB6ZXJvXG4gIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0O1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRheXNUb1dlZWtzO1xuIiwgImltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZkRheSB9IGZyb20gXCIuL3N0YXJ0T2ZEYXkuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGlzU2FtZURheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGlzU2FtZURheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIGRheSAoYW5kIHllYXIgYW5kIG1vbnRoKT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgZGF5IChhbmQgeWVhciBhbmQgbW9udGgpP1xuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIHNlY29uZCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZXMgYXJlIGluIHRoZSBzYW1lIGRheSAoYW5kIHllYXIgYW5kIG1vbnRoKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgNCBTZXB0ZW1iZXIgMDY6MDA6MDAgYW5kIDQgU2VwdGVtYmVyIDE4OjAwOjAwIGluIHRoZSBzYW1lIGRheT9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZURheShuZXcgRGF0ZSgyMDE0LCA4LCA0LCA2LCAwKSwgbmV3IERhdGUoMjAxNCwgOCwgNCwgMTgsIDApKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSA0IFNlcHRlbWJlciBhbmQgNCBPY3RvYmVyIGluIHRoZSBzYW1lIGRheT9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZURheShuZXcgRGF0ZSgyMDE0LCA4LCA0KSwgbmV3IERhdGUoMjAxNCwgOSwgNCkpXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSA0IFNlcHRlbWJlciwgMjAxNCBhbmQgNCBTZXB0ZW1iZXIsIDIwMTUgaW4gdGhlIHNhbWUgZGF5P1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDQpLCBuZXcgRGF0ZSgyMDE1LCA4LCA0KSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZURheShsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtkYXRlTGVmdF8sIGRhdGVSaWdodF9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuICByZXR1cm4gK3N0YXJ0T2ZEYXkoZGF0ZUxlZnRfKSA9PT0gK3N0YXJ0T2ZEYXkoZGF0ZVJpZ2h0Xyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNTYW1lRGF5O1xuIiwgIi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IERhdGVdXCIpXG4gICk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNEYXRlO1xuIiwgImltcG9ydCB7IGlzRGF0ZSB9IGZyb20gXCIuL2lzRGF0ZS5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgaXNWYWxpZFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB2YWxpZD9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgZmFsc2UgaWYgYXJndW1lbnQgaXMgSW52YWxpZCBEYXRlIGFuZCB0cnVlIG90aGVyd2lzZS5cbiAqIEFyZ3VtZW50IGlzIGNvbnZlcnRlZCB0byBEYXRlIHVzaW5nIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV0oaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGUpXG4gKiBJbnZhbGlkIERhdGUgaXMgYSBEYXRlLCB3aG9zZSB0aW1lIHZhbHVlIGlzIE5hTi5cbiAqXG4gKiBUaW1lIHZhbHVlIG9mIERhdGU6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuOS4xLjFcbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGUgaXMgdmFsaWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgyMDE0LCAxLCAzMSkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWx1ZSwgY29udmVydGlibGUgaW50byBhIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKDEzOTM4MDQ4MDAwMDApXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKCcnKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWQoZGF0ZSkge1xuICByZXR1cm4gISgoIWlzRGF0ZShkYXRlKSAmJiB0eXBlb2YgZGF0ZSAhPT0gXCJudW1iZXJcIikgfHwgaXNOYU4oK3RvRGF0ZShkYXRlKSkpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzVmFsaWQ7XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBhZGREYXlzIH0gZnJvbSBcIi4vYWRkRGF5cy5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzLmpzXCI7XG5pbXBvcnQgeyBpc1NhbWVEYXkgfSBmcm9tIFwiLi9pc1NhbWVEYXkuanNcIjtcbmltcG9ydCB7IGlzVmFsaWQgfSBmcm9tIFwiLi9pc1ZhbGlkLmpzXCI7XG5pbXBvcnQgeyBpc1dlZWtlbmQgfSBmcm9tIFwiLi9pc1dlZWtlbmQuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5c30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBidXNpbmVzcyBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgYnVzaW5lc3MgZGF5IHBlcmlvZHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKiBCdXNpbmVzcyBkYXlzIGJlaW5nIGRheXMgdGhhdCBhcmVuJ3QgaW4gdGhlIHdlZWtlbmQuXG4gKiBMaWtlIGBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNgLCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdGltZXMgZnJvbVxuICogdGhlIGRhdGVzIGJlZm9yZSBjYWxjdWxhdGluZyB0aGUgZGlmZmVyZW5jZS5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnVzaW5lc3MgZGF5c1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBidXNpbmVzcyBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAxMCBKYW51YXJ5IDIwMTQgYW5kIDIwIEp1bHkgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMjApLFxuICogICBuZXcgRGF0ZSgyMDE0LCAwLCAxMClcbiAqIClcbiAqIC8vPT4gMTM2XG4gKlxuICogLy8gSG93IG1hbnkgYnVzaW5lc3MgZGF5cyBhcmUgYmV0d2VlblxuICogLy8gMzAgTm92ZW1iZXIgMjAyMSBhbmQgMSBOb3ZlbWJlciAyMDIxP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzKFxuICogICBuZXcgRGF0ZSgyMDIxLCAxMCwgMzApLFxuICogICBuZXcgRGF0ZSgyMDIxLCAxMCwgMSlcbiAqIClcbiAqIC8vPT4gMjFcbiAqXG4gKiAvLyBIb3cgbWFueSBidXNpbmVzcyBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAxIE5vdmVtYmVyIDIwMjEgYW5kIDEgRGVjZW1iZXIgMjAyMT9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5cyhcbiAqICAgbmV3IERhdGUoMjAyMSwgMTAsIDEpLFxuICogICBuZXcgRGF0ZSgyMDIxLCAxMSwgMSlcbiAqIClcbiAqIC8vPT4gLTIyXG4gKlxuICogLy8gSG93IG1hbnkgYnVzaW5lc3MgZGF5cyBhcmUgYmV0d2VlblxuICogLy8gMSBOb3ZlbWJlciAyMDIxIGFuZCAxIE5vdmVtYmVyIDIwMjEgP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzKFxuICogICBuZXcgRGF0ZSgyMDIxLCAxMCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMjEsIDEwLCAxKVxuICogKVxuICogLy89PiAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcblxuICBpZiAoIWlzVmFsaWQobGF0ZXJEYXRlXykgfHwgIWlzVmFsaWQoZWFybGllckRhdGVfKSkgcmV0dXJuIE5hTjtcblxuICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7XG4gIGNvbnN0IHNpZ24gPSBkaWZmIDwgMCA/IC0xIDogMTtcbiAgY29uc3Qgd2Vla3MgPSBNYXRoLnRydW5jKGRpZmYgLyA3KTtcblxuICBsZXQgcmVzdWx0ID0gd2Vla3MgKiA1O1xuICBsZXQgbW92aW5nRGF0ZSA9IGFkZERheXMoZWFybGllckRhdGVfLCB3ZWVrcyAqIDcpO1xuXG4gIC8vIHRoZSBsb29wIGJlbG93IHdpbGwgcnVuIGF0IG1vc3QgNiB0aW1lcyB0byBhY2NvdW50IGZvciB0aGUgcmVtYWluaW5nIGRheXMgdGhhdCBkb24ndCBtYWtldXAgYSBmdWxsIHdlZWtcbiAgd2hpbGUgKCFpc1NhbWVEYXkobGF0ZXJEYXRlXywgbW92aW5nRGF0ZSkpIHtcbiAgICAvLyBzaWduIGlzIHVzZWQgdG8gYWNjb3VudCBmb3IgYm90aCBuZWdhdGl2ZSBhbmQgcG9zaXRpdmUgZGlmZmVyZW5jZXNcbiAgICByZXN1bHQgKz0gaXNXZWVrZW5kKG1vdmluZ0RhdGUsIG9wdGlvbnMpID8gMCA6IHNpZ247XG4gICAgbW92aW5nRGF0ZSA9IGFkZERheXMobW92aW5nRGF0ZSwgc2lnbik7XG4gIH1cblxuICAvLyBQcmV2ZW50IG5lZ2F0aXZlIHplcm9cbiAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzO1xuIiwgImltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgZ2V0SVNPV2Vla1llYXIgfSBmcm9tIFwiLi9nZXRJU09XZWVrWWVhci5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFyc1xuICogQGNhdGVnb3J5IElTTyBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHBhcmFtIGxhdGVyRGF0ZSAtIFRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0gZWFybGllckRhdGUgLSBUaGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNhbGVuZGFyIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIDEgSmFudWFyeSAyMDEwIGFuZCAxIEphbnVhcnkgMjAxMj9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzKFxuICogICBuZXcgRGF0ZSgyMDEyLCAwLCAxKSxcbiAqICAgbmV3IERhdGUoMjAxMCwgMCwgMSlcbiAqIClcbiAqIC8vPT4gMlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnMoXG4gIGxhdGVyRGF0ZSxcbiAgZWFybGllckRhdGUsXG4gIG9wdGlvbnMsXG4pIHtcbiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBsYXRlckRhdGUsXG4gICAgZWFybGllckRhdGUsXG4gICk7XG4gIHJldHVybiAoXG4gICAgZ2V0SVNPV2Vla1llYXIobGF0ZXJEYXRlXywgb3B0aW9ucykgLSBnZXRJU09XZWVrWWVhcihlYXJsaWVyRGF0ZV8sIG9wdGlvbnMpXG4gICk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnM7XG4iLCAiaW1wb3J0IHsgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBtaWxsaXNlY29uZHNJbldlZWsgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWsuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3N9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgSVNPIHdlZWtzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgSVNPIHdlZWtzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY2FsZW5kYXIgSVNPIHdlZWtzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIElTTyB3ZWVrcyBhcmUgYmV0d2VlbiA2IEp1bHkgMjAxNCBhbmQgMjEgSnVseSAyMDE0P1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrcyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMjEpLFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCA2KSxcbiAqICk7XG4gKiAvLz0+IDNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcblxuICBjb25zdCBzdGFydE9mSVNPV2Vla0xlZnQgPSBzdGFydE9mSVNPV2VlayhsYXRlckRhdGVfKTtcbiAgY29uc3Qgc3RhcnRPZklTT1dlZWtSaWdodCA9IHN0YXJ0T2ZJU09XZWVrKGVhcmxpZXJEYXRlXyk7XG5cbiAgY29uc3QgdGltZXN0YW1wTGVmdCA9XG4gICAgK3N0YXJ0T2ZJU09XZWVrTGVmdCAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoc3RhcnRPZklTT1dlZWtMZWZ0KTtcbiAgY29uc3QgdGltZXN0YW1wUmlnaHQgPVxuICAgICtzdGFydE9mSVNPV2Vla1JpZ2h0IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhzdGFydE9mSVNPV2Vla1JpZ2h0KTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIHdlZWtzIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgYmVjYXVzZSB0aGUgbnVtYmVyIG9mXG4gIC8vIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50IChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mXG4gIC8vIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdCkuXG4gIHJldHVybiBNYXRoLnJvdW5kKCh0aW1lc3RhbXBMZWZ0IC0gdGltZXN0YW1wUmlnaHQpIC8gbWlsbGlzZWNvbmRzSW5XZWVrKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzO1xuIiwgImltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRoc1xuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIG1vbnRocyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIG1vbnRocyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY2FsZW5kYXIgbW9udGhzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIG1vbnRocyBhcmUgYmV0d2VlbiAzMSBKYW51YXJ5IDIwMTQgYW5kIDEgU2VwdGVtYmVyIDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhcbiAqICAgbmV3IERhdGUoMjAxNCwgOCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDAsIDMxKVxuICogKVxuICogLy89PiA4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuXG4gIGNvbnN0IHllYXJzRGlmZiA9IGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aHNEaWZmID0gbGF0ZXJEYXRlXy5nZXRNb250aCgpIC0gZWFybGllckRhdGVfLmdldE1vbnRoKCk7XG5cbiAgcmV0dXJuIHllYXJzRGlmZiAqIDEyICsgbW9udGhzRGlmZjtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocztcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldFF1YXJ0ZXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXRRdWFydGVyXG4gKiBAY2F0ZWdvcnkgUXVhcnRlciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIHllYXIgcXVhcnRlciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgeWVhciBxdWFydGVyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBxdWFydGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHF1YXJ0ZXIgaXMgMiBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRRdWFydGVyKG5ldyBEYXRlKDIwMTQsIDYsIDIpKTtcbiAqIC8vPT4gM1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVhcnRlcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgcXVhcnRlciA9IE1hdGgudHJ1bmMoX2RhdGUuZ2V0TW9udGgoKSAvIDMpICsgMTtcbiAgcmV0dXJuIHF1YXJ0ZXI7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0UXVhcnRlcjtcbiIsICJpbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcbmltcG9ydCB7IGdldFF1YXJ0ZXIgfSBmcm9tIFwiLi9nZXRRdWFydGVyLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyc1xuICogQGNhdGVnb3J5IFF1YXJ0ZXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgcXVhcnRlcnMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBxdWFydGVycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY2FsZW5kYXIgcXVhcnRlcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgY2FsZW5kYXIgcXVhcnRlcnMgYXJlIGJldHdlZW4gMzEgRGVjZW1iZXIgMjAxMyBhbmQgMiBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyKSxcbiAqICAgbmV3IERhdGUoMjAxMywgMTEsIDMxKVxuICogKVxuICogLy89PiAzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBsYXRlckRhdGUsXG4gICAgZWFybGllckRhdGUsXG4gICk7XG5cbiAgY29uc3QgeWVhcnNEaWZmID0gbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpIC0gZWFybGllckRhdGVfLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IHF1YXJ0ZXJzRGlmZiA9IGdldFF1YXJ0ZXIobGF0ZXJEYXRlXykgLSBnZXRRdWFydGVyKGVhcmxpZXJEYXRlXyk7XG5cbiAgcmV0dXJuIHllYXJzRGlmZiAqIDQgKyBxdWFydGVyc0RpZmY7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycztcbiIsICJpbXBvcnQgeyBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzLmpzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcbmltcG9ydCB7IG1pbGxpc2Vjb25kc0luV2VlayB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZldlZWsgfSBmcm9tIFwiLi9zdGFydE9mV2Vlay5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHdlZWtzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgd2Vla3MgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIGxhdGVyRGF0ZSAtIFRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0gZWFybGllckRhdGUgLSBUaGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBjYWxlbmRhciB3ZWVrc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciB3ZWVrcyBhcmUgYmV0d2VlbiA1IEp1bHkgMjAxNCBhbmQgMjAgSnVseSAyMDE0P1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMjApLFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCA1KVxuICogKVxuICogLy89PiAzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRoZSB3ZWVrIHN0YXJ0cyBvbiBNb25kYXksXG4gKiAvLyBob3cgbWFueSBjYWxlbmRhciB3ZWVrcyBhcmUgYmV0d2VlbiA1IEp1bHkgMjAxNCBhbmQgMjAgSnVseSAyMDE0P1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMjApLFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCA1KSxcbiAqICAgeyB3ZWVrU3RhcnRzT246IDEgfVxuICogKVxuICogLy89PiAyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBsYXRlckRhdGUsXG4gICAgZWFybGllckRhdGUsXG4gICk7XG5cbiAgY29uc3QgbGF0ZXJTdGFydE9mV2VlayA9IHN0YXJ0T2ZXZWVrKGxhdGVyRGF0ZV8sIG9wdGlvbnMpO1xuICBjb25zdCBlYXJsaWVyU3RhcnRPZldlZWsgPSBzdGFydE9mV2VlayhlYXJsaWVyRGF0ZV8sIG9wdGlvbnMpO1xuXG4gIGNvbnN0IGxhdGVyVGltZXN0YW1wID1cbiAgICArbGF0ZXJTdGFydE9mV2VlayAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobGF0ZXJTdGFydE9mV2Vlayk7XG4gIGNvbnN0IGVhcmxpZXJUaW1lc3RhbXAgPVxuICAgICtlYXJsaWVyU3RhcnRPZldlZWsgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJTdGFydE9mV2Vlayk7XG5cbiAgcmV0dXJuIE1hdGgucm91bmQoKGxhdGVyVGltZXN0YW1wIC0gZWFybGllclRpbWVzdGFtcCkgLyBtaWxsaXNlY29uZHNJbldlZWspO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3M7XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFyc1xuICogQGNhdGVnb3J5IFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgeWVhcnMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciB5ZWFycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNhbGVuZGFyIHllYXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIHllYXJzIGFyZSBiZXR3ZWVuIDMxIERlY2VtYmVyIDIwMTMgYW5kIDExIEZlYnJ1YXJ5IDIwMTU/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKFxuICogICBuZXcgRGF0ZSgyMDE1LCAxLCAxMSksXG4gKiAgIG5ldyBEYXRlKDIwMTMsIDExLCAzMSlcbiAqICk7XG4gKiAvLz0+IDJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcbiAgcmV0dXJuIGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnM7XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGRpZmZlcmVuY2VJbkRheXN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5EYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGZ1bGwgZGF5cyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGZ1bGwgZGF5IHBlcmlvZHMgYmV0d2VlbiB0d28gZGF0ZXMuIEZyYWN0aW9uYWwgZGF5cyBhcmVcbiAqIHRydW5jYXRlZCB0b3dhcmRzIHplcm8uXG4gKlxuICogT25lIFwiZnVsbCBkYXlcIiBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIGxvY2FsIHRpbWUgaW4gb25lIGRheSB0byB0aGUgc2FtZVxuICogbG9jYWwgdGltZSBvbiB0aGUgbmV4dCBvciBwcmV2aW91cyBkYXkuIEEgZnVsbCBkYXkgY2FuIHNvbWV0aW1lcyBiZSBsZXNzIHRoYW5cbiAqIG9yIG1vcmUgdGhhbiAyNCBob3VycyBpZiBhIGRheWxpZ2h0IHNhdmluZ3MgY2hhbmdlIGhhcHBlbnMgYmV0d2VlbiB0d28gZGF0ZXMuXG4gKlxuICogVG8gaWdub3JlIERTVCBhbmQgb25seSBtZWFzdXJlIGV4YWN0IDI0LWhvdXIgcGVyaW9kcywgdXNlIHRoaXMgaW5zdGVhZDpcbiAqIGBNYXRoLnRydW5jKGRpZmZlcmVuY2VJbkhvdXJzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpLzI0KXwwYC5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZnVsbCBkYXlzIGFjY29yZGluZyB0byB0aGUgbG9jYWwgdGltZXpvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZnVsbCBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzowMDowMCBhbmQgMiBKdWx5IDIwMTIgMDA6MDA6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5EYXlzKFxuICogICBuZXcgRGF0ZSgyMDEyLCA2LCAyLCAwLCAwKSxcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMiwgMjMsIDApXG4gKiApXG4gKiAvLz0+IDM2NVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBmdWxsIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjU5OjAwIGFuZCAzIEp1bHkgMjAxMSAwMDowMTowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDMsIDAsIDEpLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgNTkpXG4gKiApXG4gKiAvLz0+IDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZnVsbCBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAxIE1hcmNoIDIwMjAgMDowMCBhbmQgMSBKdW5lIDIwMjAgMDowMCA/XG4gKiAvLyBOb3RlOiBiZWNhdXNlIGxvY2FsIHRpbWUgaXMgdXNlZCwgdGhlXG4gKiAvLyByZXN1bHQgd2lsbCBhbHdheXMgYmUgOTIgZGF5cywgZXZlbiBpblxuICogLy8gdGltZSB6b25lcyB3aGVyZSBEU1Qgc3RhcnRzIGFuZCB0aGVcbiAqIC8vIHBlcmlvZCBoYXMgb25seSA5MioyNC0xIGhvdXJzLlxuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluRGF5cyhcbiAqICAgbmV3IERhdGUoMjAyMCwgNSwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMjAsIDIsIDEpXG4gKiApXG4gKiAvLz0+IDkyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5EYXlzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBsYXRlckRhdGUsXG4gICAgZWFybGllckRhdGUsXG4gICk7XG5cbiAgY29uc3Qgc2lnbiA9IGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICBjb25zdCBkaWZmZXJlbmNlID0gTWF0aC5hYnMoXG4gICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyksXG4gICk7XG5cbiAgbGF0ZXJEYXRlXy5zZXREYXRlKGxhdGVyRGF0ZV8uZ2V0RGF0ZSgpIC0gc2lnbiAqIGRpZmZlcmVuY2UpO1xuXG4gIC8vIE1hdGguYWJzKGRpZmYgaW4gZnVsbCBkYXlzIC0gZGlmZiBpbiBjYWxlbmRhciBkYXlzKSA9PT0gMSBpZiBsYXN0IGNhbGVuZGFyIGRheSBpcyBub3QgZnVsbFxuICAvLyBJZiBzbywgcmVzdWx0IG11c3QgYmUgZGVjcmVhc2VkIGJ5IDEgaW4gYWJzb2x1dGUgdmFsdWVcbiAgY29uc3QgaXNMYXN0RGF5Tm90RnVsbCA9IE51bWJlcihcbiAgICBjb21wYXJlTG9jYWxBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA9PT0gLXNpZ24sXG4gICk7XG5cbiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmZXJlbmNlIC0gaXNMYXN0RGF5Tm90RnVsbCk7XG4gIC8vIFByZXZlbnQgbmVnYXRpdmUgemVyb1xuICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDtcbn1cblxuLy8gTGlrZSBgY29tcGFyZUFzY2AgYnV0IHVzZXMgbG9jYWwgdGltZSBub3QgVVRDLCB3aGljaCBpcyBuZWVkZWRcbi8vIGZvciBhY2N1cmF0ZSBlcXVhbGl0eSBjb21wYXJpc29ucyBvZiBVVEMgdGltZXN0YW1wcyB0aGF0IGVuZCB1cFxuLy8gaGF2aW5nIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIGluIGxvY2FsIHRpbWUsIGUuZy4gb25lIGhvdXIgYmVmb3JlXG4vLyBEU1QgZW5kcyB2cy4gdGhlIGluc3RhbnQgdGhhdCBEU1QgZW5kcy5cbmZ1bmN0aW9uIGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7XG4gIGNvbnN0IGRpZmYgPVxuICAgIGxhdGVyRGF0ZS5nZXRGdWxsWWVhcigpIC0gZWFybGllckRhdGUuZ2V0RnVsbFllYXIoKSB8fFxuICAgIGxhdGVyRGF0ZS5nZXRNb250aCgpIC0gZWFybGllckRhdGUuZ2V0TW9udGgoKSB8fFxuICAgIGxhdGVyRGF0ZS5nZXREYXRlKCkgLSBlYXJsaWVyRGF0ZS5nZXREYXRlKCkgfHxcbiAgICBsYXRlckRhdGUuZ2V0SG91cnMoKSAtIGVhcmxpZXJEYXRlLmdldEhvdXJzKCkgfHxcbiAgICBsYXRlckRhdGUuZ2V0TWludXRlcygpIC0gZWFybGllckRhdGUuZ2V0TWludXRlcygpIHx8XG4gICAgbGF0ZXJEYXRlLmdldFNlY29uZHMoKSAtIGVhcmxpZXJEYXRlLmdldFNlY29uZHMoKSB8fFxuICAgIGxhdGVyRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGVhcmxpZXJEYXRlLmdldE1pbGxpc2Vjb25kcygpO1xuXG4gIGlmIChkaWZmIDwgMCkgcmV0dXJuIC0xO1xuICBpZiAoZGlmZiA+IDApIHJldHVybiAxO1xuXG4gIC8vIFJldHVybiAwIGlmIGRpZmYgaXMgMDsgcmV0dXJuIE5hTiBpZiBkaWZmIGlzIE5hTlxuICByZXR1cm4gZGlmZjtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5EYXlzO1xuIiwgImV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZGluZ01ldGhvZChtZXRob2QpIHtcbiAgcmV0dXJuIChudW1iZXIpID0+IHtcbiAgICBjb25zdCByb3VuZCA9IG1ldGhvZCA/IE1hdGhbbWV0aG9kXSA6IE1hdGgudHJ1bmM7XG4gICAgY29uc3QgcmVzdWx0ID0gcm91bmQobnVtYmVyKTtcbiAgICAvLyBQcmV2ZW50IG5lZ2F0aXZlIHplcm9cbiAgICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDtcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBnZXRSb3VuZGluZ01ldGhvZCB9IGZyb20gXCIuL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5Ib3VyIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5Ib3Vyc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBob3VycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGhvdXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaG91cnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgaG91cnMgYXJlIGJldHdlZW4gMiBKdWx5IDIwMTQgMDY6NTA6MDAgYW5kIDIgSnVseSAyMDE0IDE5OjAwOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluSG91cnMoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE5LCAwKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgNiwgNTApXG4gKiApXG4gKiAvLz0+IDEyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5Ib3VycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuICBjb25zdCBkaWZmID0gKCtsYXRlckRhdGVfIC0gK2VhcmxpZXJEYXRlXykgLyBtaWxsaXNlY29uZHNJbkhvdXI7XG4gIHJldHVybiBnZXRSb3VuZGluZ01ldGhvZChvcHRpb25zPy5yb3VuZGluZ01ldGhvZCkoZGlmZik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluSG91cnM7XG4iLCAiaW1wb3J0IHsgYWRkSVNPV2Vla1llYXJzIH0gZnJvbSBcIi4vYWRkSVNPV2Vla1llYXJzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdWJJU09XZWVrWWVhcnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdWJJU09XZWVrWWVhcnNcbiAqIEBjYXRlZ29yeSBJU08gV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgdG8gYmUgc3VidHJhY3RlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIHN1YnRyYWN0ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNSBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgZnJvbSAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gc3ViSVNPV2Vla1llYXJzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCA1KVxuICogLy89PiBNb24gQXVnIDMxIDIwMDkgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YklTT1dlZWtZZWFycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGFkZElTT1dlZWtZZWFycyhkYXRlLCAtYW1vdW50LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdWJJU09XZWVrWWVhcnM7XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBjb21wYXJlQXNjIH0gZnJvbSBcIi4vY29tcGFyZUFzYy5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycy5qc1wiO1xuaW1wb3J0IHsgc3ViSVNPV2Vla1llYXJzIH0gZnJvbSBcIi4vc3ViSVNPV2Vla1llYXJzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5JU09XZWVrWWVhcnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5JU09XZWVrWWVhcnNcbiAqIEBjYXRlZ29yeSBJU08gV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBmdWxsIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGZ1bGwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGZ1bGwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGZ1bGwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBiZXR3ZWVuIDEgSmFudWFyeSAyMDEwIGFuZCAxIEphbnVhcnkgMjAxMj9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbklTT1dlZWtZZWFycyhcbiAqICAgbmV3IERhdGUoMjAxMiwgMCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTAsIDAsIDEpXG4gKiApXG4gKiAvLyA9PiAxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5JU09XZWVrWWVhcnMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcblxuICBjb25zdCBzaWduID0gY29tcGFyZUFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICBjb25zdCBkaWZmID0gTWF0aC5hYnMoXG4gICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfLCBvcHRpb25zKSxcbiAgKTtcblxuICBjb25zdCBhZGp1c3RlZERhdGUgPSBzdWJJU09XZWVrWWVhcnMobGF0ZXJEYXRlXywgc2lnbiAqIGRpZmYsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IGlzTGFzdElTT1dlZWtZZWFyTm90RnVsbCA9IE51bWJlcihcbiAgICBjb21wYXJlQXNjKGFkanVzdGVkRGF0ZSwgZWFybGllckRhdGVfKSA9PT0gLXNpZ24sXG4gICk7XG4gIGNvbnN0IHJlc3VsdCA9IHNpZ24gKiAoZGlmZiAtIGlzTGFzdElTT1dlZWtZZWFyTm90RnVsbCk7XG5cbiAgLy8gUHJldmVudCBuZWdhdGl2ZSB6ZXJvXG4gIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0O1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbklTT1dlZWtZZWFycztcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIGxhdGVyRGF0ZSAtIFRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0gZWFybGllckRhdGUgLSBUaGUgZWFybGllciBkYXRlXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgbWlsbGlzZWNvbmRzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxNCAxMjozMDoyMC42MDAgYW5kIDIgSnVseSAyMDE0IDEyOjMwOjIxLjcwMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTIsIDMwLCAyMSwgNzAwKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTIsIDMwLCAyMCwgNjAwKVxuICogKVxuICogLy89PiAxMTAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSkge1xuICByZXR1cm4gK3RvRGF0ZShsYXRlckRhdGUpIC0gK3RvRGF0ZShlYXJsaWVyRGF0ZSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzO1xuIiwgImltcG9ydCB7IGdldFJvdW5kaW5nTWV0aG9kIH0gZnJvbSBcIi4vX2xpYi9nZXRSb3VuZGluZ01ldGhvZC5qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5NaW51dGUgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluTWludXRlc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbk1pbnV0ZXNcbiAqIEBjYXRlZ29yeSBNaW51dGUgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgbWludXRlcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgc2lnbmVkIG51bWJlciBvZiBmdWxsIChyb3VuZGVkIHRvd2FyZHMgMCkgbWludXRlcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gZGF0ZUxlZnQgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGRhdGVSaWdodCAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIG1pbnV0ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgbWludXRlcyBhcmUgYmV0d2VlbiAyIEp1bHkgMjAxNCAxMjowNzo1OSBhbmQgMiBKdWx5IDIwMTQgMTI6MjA6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5NaW51dGVzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxMiwgMjAsIDApLFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxMiwgNywgNTkpXG4gKiApXG4gKiAvLz0+IDEyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IG1pbnV0ZXMgYXJlIGJldHdlZW4gMTA6MDE6NTkgYW5kIDEwOjAwOjAwXG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5NaW51dGVzKFxuICogICBuZXcgRGF0ZSgyMDAwLCAwLCAxLCAxMCwgMCwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMDAsIDAsIDEsIDEwLCAxLCA1OSlcbiAqIClcbiAqIC8vPT4gLTFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1pbnV0ZXMoZGF0ZUxlZnQsIGRhdGVSaWdodCwgb3B0aW9ucykge1xuICBjb25zdCBkaWZmID1cbiAgICBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMoZGF0ZUxlZnQsIGRhdGVSaWdodCkgLyBtaWxsaXNlY29uZHNJbk1pbnV0ZTtcbiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5NaW51dGVzO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZW5kT2ZEYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBlbmRPZkRheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVuZCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGVuZCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZW5kIG9mIGEgZGF5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBlbmQgb2YgYSBkYXkgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBlbmRPZkRheShuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBUdWUgU2VwIDAyIDIwMTQgMjM6NTk6NTkuOTk5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRPZkRheShkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGVuZE9mRGF5O1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZW5kT2ZNb250aH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGVuZE9mTW9udGhcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVuZCBvZiBhIG1vbnRoIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZW5kIG9mIGEgbW9udGggZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGVuZCBvZiBhIG1vbnRoXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBlbmQgb2YgYSBtb250aCBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGVuZE9mTW9udGgobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gVHVlIFNlcCAzMCAyMDE0IDIzOjU5OjU5Ljk5OVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5kT2ZNb250aChkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgbW9udGggPSBfZGF0ZS5nZXRNb250aCgpO1xuICBfZGF0ZS5zZXRGdWxsWWVhcihfZGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCArIDEsIDApO1xuICBfZGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZW5kT2ZNb250aDtcbiIsICJpbXBvcnQgeyBlbmRPZkRheSB9IGZyb20gXCIuL2VuZE9mRGF5LmpzXCI7XG5pbXBvcnQgeyBlbmRPZk1vbnRoIH0gZnJvbSBcIi4vZW5kT2ZNb250aC5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgaXNMYXN0RGF5T2ZNb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHRoZSBsYXN0IGRheSBvZiBhIG1vbnRoP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgdGhlIGxhc3QgZGF5IG9mIGEgbW9udGg/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGUgaXMgdGhlIGxhc3QgZGF5IG9mIGEgbW9udGhcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXMgMjggRmVicnVhcnkgMjAxNCB0aGUgbGFzdCBkYXkgb2YgYSBtb250aD9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzTGFzdERheU9mTW9udGgobmV3IERhdGUoMjAxNCwgMSwgMjgpKVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xhc3REYXlPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICByZXR1cm4gK2VuZE9mRGF5KF9kYXRlLCBvcHRpb25zKSA9PT0gK2VuZE9mTW9udGgoX2RhdGUsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzTGFzdERheU9mTW9udGg7XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBjb21wYXJlQXNjIH0gZnJvbSBcIi4vY29tcGFyZUFzYy5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocy5qc1wiO1xuaW1wb3J0IHsgaXNMYXN0RGF5T2ZNb250aCB9IGZyb20gXCIuL2lzTGFzdERheU9mTW9udGguanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGRpZmZlcmVuY2VJbk1vbnRoc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbk1vbnRoc1xuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGZ1bGwgbW9udGhzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBmdWxsIG1vbnRoc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBmdWxsIG1vbnRocyBhcmUgYmV0d2VlbiAzMSBKYW51YXJ5IDIwMTQgYW5kIDEgU2VwdGVtYmVyIDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5Nb250aHMobmV3IERhdGUoMjAxNCwgOCwgMSksIG5ldyBEYXRlKDIwMTQsIDAsIDMxKSlcbiAqIC8vPT4gN1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZUluTW9udGhzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2xhdGVyRGF0ZV8sIHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBsYXRlckRhdGUsXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuXG4gIGNvbnN0IHNpZ24gPSBjb21wYXJlQXNjKHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlXyk7XG4gIGNvbnN0IGRpZmZlcmVuY2UgPSBNYXRoLmFicyhcbiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyh3b3JraW5nTGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZV8pLFxuICApO1xuXG4gIGlmIChkaWZmZXJlbmNlIDwgMSkgcmV0dXJuIDA7XG5cbiAgaWYgKHdvcmtpbmdMYXRlckRhdGUuZ2V0TW9udGgoKSA9PT0gMSAmJiB3b3JraW5nTGF0ZXJEYXRlLmdldERhdGUoKSA+IDI3KVxuICAgIHdvcmtpbmdMYXRlckRhdGUuc2V0RGF0ZSgzMCk7XG5cbiAgd29ya2luZ0xhdGVyRGF0ZS5zZXRNb250aCh3b3JraW5nTGF0ZXJEYXRlLmdldE1vbnRoKCkgLSBzaWduICogZGlmZmVyZW5jZSk7XG5cbiAgbGV0IGlzTGFzdE1vbnRoTm90RnVsbCA9IGNvbXBhcmVBc2Mod29ya2luZ0xhdGVyRGF0ZSwgZWFybGllckRhdGVfKSA9PT0gLXNpZ247XG5cbiAgaWYgKFxuICAgIGlzTGFzdERheU9mTW9udGgobGF0ZXJEYXRlXykgJiZcbiAgICBkaWZmZXJlbmNlID09PSAxICYmXG4gICAgY29tcGFyZUFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pID09PSAxXG4gICkge1xuICAgIGlzTGFzdE1vbnRoTm90RnVsbCA9IGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmZXJlbmNlIC0gK2lzTGFzdE1vbnRoTm90RnVsbCk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0O1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbk1vbnRocztcbiIsICJpbXBvcnQgeyBnZXRSb3VuZGluZ01ldGhvZCB9IGZyb20gXCIuL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbk1vbnRocyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbk1vbnRocy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluUXVhcnRlcnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5RdWFydGVyc1xuICogQGNhdGVnb3J5IFF1YXJ0ZXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgcXVhcnRlcnMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBxdWFydGVycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGZ1bGwgcXVhcnRlcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZnVsbCBxdWFydGVycyBhcmUgYmV0d2VlbiAzMSBEZWNlbWJlciAyMDEzIGFuZCAyIEp1bHkgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJblF1YXJ0ZXJzKG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBuZXcgRGF0ZSgyMDEzLCAxMSwgMzEpKVxuICogLy89PiAyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5RdWFydGVycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5Nb250aHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgLyAzO1xuICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJblF1YXJ0ZXJzO1xuIiwgImltcG9ydCB7IGdldFJvdW5kaW5nTWV0aG9kIH0gZnJvbSBcIi4vX2xpYi9nZXRSb3VuZGluZ01ldGhvZC5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5TZWNvbmRzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluU2Vjb25kc1xuICogQGNhdGVnb3J5IFNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIHNlY29uZHNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgc2Vjb25kcyBhcmUgYmV0d2VlblxuICogLy8gMiBKdWx5IDIwMTQgMTI6MzA6MDcuOTk5IGFuZCAyIEp1bHkgMjAxNCAxMjozMDoyMC4wMDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxMiwgMzAsIDIwLCAwKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTIsIDMwLCA3LCA5OTkpXG4gKiApXG4gKiAvLz0+IDEyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5TZWNvbmRzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSAvIDEwMDA7XG4gIHJldHVybiBnZXRSb3VuZGluZ01ldGhvZChvcHRpb25zPy5yb3VuZGluZ01ldGhvZCkoZGlmZik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluU2Vjb25kcztcbiIsICJpbXBvcnQgeyBnZXRSb3VuZGluZ01ldGhvZCB9IGZyb20gXCIuL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbkRheXMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5EYXlzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5XZWVrc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbldlZWtzXG4gKiBAY2F0ZWdvcnkgV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBmdWxsIHdlZWtzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgZnVsbCB3ZWVrcyBiZXR3ZWVuIHR3byBkYXRlcy4gRnJhY3Rpb25hbCB3ZWVrcyBhcmVcbiAqIHRydW5jYXRlZCB0b3dhcmRzIHplcm8gYnkgZGVmYXVsdC5cbiAqXG4gKiBPbmUgXCJmdWxsIHdlZWtcIiBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIGxvY2FsIHRpbWUgaW4gb25lIGRheSB0byB0aGUgc2FtZVxuICogbG9jYWwgdGltZSA3IGRheXMgZWFybGllciBvciBsYXRlci4gQSBmdWxsIHdlZWsgY2FuIHNvbWV0aW1lcyBiZSBsZXNzIHRoYW5cbiAqIG9yIG1vcmUgdGhhbiA3KjI0IGhvdXJzIGlmIGEgZGF5bGlnaHQgc2F2aW5ncyBjaGFuZ2UgaGFwcGVucyBiZXR3ZWVuIHR3byBkYXRlcy5cbiAqXG4gKiBUbyBpZ25vcmUgRFNUIGFuZCBvbmx5IG1lYXN1cmUgZXhhY3QgNyoyNC1ob3VyIHBlcmlvZHMsIHVzZSB0aGlzIGluc3RlYWQ6XG4gKiBgTWF0aC50cnVuYyhkaWZmZXJlbmNlSW5Ib3VycyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KS8oNyoyNCkpfDBgLlxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBmdWxsIHdlZWtzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGZ1bGwgd2Vla3MgYXJlIGJldHdlZW4gNSBKdWx5IDIwMTQgYW5kIDIwIEp1bHkgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbldlZWtzKG5ldyBEYXRlKDIwMTQsIDYsIDIwKSwgbmV3IERhdGUoMjAxNCwgNiwgNSkpXG4gKiAvLz0+IDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZnVsbCB3ZWVrcyBhcmUgYmV0d2VlblxuICogLy8gMSBNYXJjaCAyMDIwIDA6MDAgYW5kIDYgSnVuZSAyMDIwIDA6MDAgP1xuICogLy8gTm90ZTogYmVjYXVzZSBsb2NhbCB0aW1lIGlzIHVzZWQsIHRoZVxuICogLy8gcmVzdWx0IHdpbGwgYWx3YXlzIGJlIDggd2Vla3MgKDU0IGRheXMpLFxuICogLy8gZXZlbiBpZiBEU1Qgc3RhcnRzIGFuZCB0aGUgcGVyaW9kIGhhc1xuICogLy8gb25seSA1NCoyNC0xIGhvdXJzLlxuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluV2Vla3MoXG4gKiAgIG5ldyBEYXRlKDIwMjAsIDUsIDEpLFxuICogICBuZXcgRGF0ZSgyMDIwLCAyLCA2KVxuICogKVxuICogLy89PiA4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5XZWVrcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5EYXlzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIC8gNztcbiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5XZWVrcztcbiIsICJpbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcbmltcG9ydCB7IGNvbXBhcmVBc2MgfSBmcm9tIFwiLi9jb21wYXJlQXNjLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluWWVhcnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5ZZWFyc1xuICogQGNhdGVnb3J5IFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgZnVsbCB5ZWFycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGZ1bGwgeWVhcnMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIGxhdGVyRGF0ZSAtIFRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0gZWFybGllckRhdGUgLSBUaGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGZ1bGwgeWVhcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZnVsbCB5ZWFycyBhcmUgYmV0d2VlbiAzMSBEZWNlbWJlciAyMDEzIGFuZCAxMSBGZWJydWFyeSAyMDE1P1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluWWVhcnMobmV3IERhdGUoMjAxNSwgMSwgMTEpLCBuZXcgRGF0ZSgyMDEzLCAxMSwgMzEpKVxuICogLy89PiAxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5ZZWFycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuXG4gIC8vIC0xIGlmIHRoZSBsZWZ0IGRhdGUgaXMgZWFybGllciB0aGFuIHRoZSByaWdodCBkYXRlXG4gIC8vIDIwMjMtMTItMzEgLSAyMDI0LTAxLTAxID0gLTFcbiAgY29uc3Qgc2lnbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTtcblxuICAvLyBGaXJzdCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4gY2FsZW5kYXIgeWVhcnNcbiAgLy8gMjAyNC0wMS0wMSAtIDIwMjMtMTItMzEgPSAxIHllYXJcbiAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSk7XG5cbiAgLy8gTm93IHdlIG5lZWQgdG8gY2FsY3VsYXRlIGlmIHRoZSBkaWZmZXJlbmNlIGlzIGZ1bGwuIFRvIGRvIHRoYXQgd2Ugc2V0XG4gIC8vIGJvdGggZGF0ZXMgdG8gdGhlIHNhbWUgeWVhciBhbmQgY2hlY2sgaWYgdGhlIGJvdGggZGF0ZSdzIG1vbnRoIGFuZCBkYXlcbiAgLy8gZm9ybSBhIGZ1bGwgeWVhci5cbiAgbGF0ZXJEYXRlXy5zZXRGdWxsWWVhcigxNTg0KTtcbiAgZWFybGllckRhdGVfLnNldEZ1bGxZZWFyKDE1ODQpO1xuXG4gIC8vIEZvciBpdCB0byBiZSB0cnVlLCB3aGVuIHRoZSBsYXRlciBkYXRlIGlzIGluZGVlZCBsYXRlciB0aGFuIHRoZSBlYXJsaWVyIGRhdGVcbiAgLy8gKDIwMjYtMDItMDEgLSAyMDIzLTEyLTEwID0gMyB5ZWFycyksIHRoZSBkaWZmZXJlbmNlIGlzIGZ1bGwgaWZcbiAgLy8gdGhlIG5vcm1hbGl6ZWQgbGF0ZXIgZGF0ZSBpcyBhbHNvIGxhdGVyIHRoYW4gdGhlIG5vcm1hbGl6ZWQgZWFybGllciBkYXRlLlxuICAvLyBJbiBvdXIgZXhhbXBsZSwgMTU4NC0wMi0wMSBpcyBlYXJsaWVyIHRoYW4gMTU4NC0xMi0xMCwgc28gdGhlIGRpZmZlcmVuY2VcbiAgLy8gaXMgcGFydGlhbCwgaGVuY2Ugd2UgbmVlZCB0byBzdWJ0cmFjdCAxIGZyb20gdGhlIGRpZmZlcmVuY2UgMyAtIDEgPSAyLlxuICBjb25zdCBwYXJ0aWFsID0gY29tcGFyZUFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pID09PSAtc2lnbjtcblxuICBjb25zdCByZXN1bHQgPSBzaWduICogKGRpZmYgLSArcGFydGlhbCk7XG5cbiAgLy8gUHJldmVudCBuZWdhdGl2ZSB6ZXJvXG4gIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0O1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJblllYXJzO1xuIiwgImltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vbm9ybWFsaXplRGF0ZXMuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUludGVydmFsKGNvbnRleHQsIGludGVydmFsKSB7XG4gIGNvbnN0IFtzdGFydCwgZW5kXSA9IG5vcm1hbGl6ZURhdGVzKGNvbnRleHQsIGludGVydmFsLnN0YXJ0LCBpbnRlcnZhbC5lbmQpO1xuICByZXR1cm4geyBzdGFydCwgZW5kIH07XG59XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplSW50ZXJ2YWwgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZUludGVydmFsLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZWFjaERheU9mSW50ZXJ2YWx9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBUaGUge0BsaW5rIGVhY2hEYXlPZkludGVydmFsfSBmdW5jdGlvbiByZXN1bHQgdHlwZS4gSXQgcmVzb2x2ZXMgdGhlIHByb3BlciBkYXRhIHR5cGUuXG4gKiBJdCB1c2VzIHRoZSBmaXJzdCBhcmd1bWVudCBkYXRlIG9iamVjdCB0eXBlLCBzdGFydGluZyBmcm9tIHRoZSBkYXRlIGFyZ3VtZW50LFxuICogdGhlbiB0aGUgc3RhcnQgaW50ZXJ2YWwgZGF0ZSwgYW5kIGZpbmFsbHkgdGhlIGVuZCBpbnRlcnZhbCBkYXRlLiBJZlxuICogYSBjb250ZXh0IGZ1bmN0aW9uIGlzIHBhc3NlZCwgaXQgdXNlcyB0aGUgY29udGV4dCBmdW5jdGlvbiByZXR1cm4gdHlwZS5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGVhY2hEYXlPZkludGVydmFsXG4gKiBAY2F0ZWdvcnkgSW50ZXJ2YWwgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBhcnJheSBvZiBkYXRlcyB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lIGludGVydmFsLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBhcnJheSBvZiBkYXRlcyB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lIGludGVydmFsLlxuICpcbiAqIEB0eXBlUGFyYW0gSW50ZXJ2YWxUeXBlIC0gSW50ZXJ2YWwgdHlwZS5cbiAqIEB0eXBlUGFyYW0gT3B0aW9ucyAtIE9wdGlvbnMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gaW50ZXJ2YWwgLSBUaGUgaW50ZXJ2YWwuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKlxuICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggc3RhcnRzIG9mIGRheXMgZnJvbSB0aGUgZGF5IG9mIHRoZSBpbnRlcnZhbCBzdGFydCB0byB0aGUgZGF5IG9mIHRoZSBpbnRlcnZhbCBlbmRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRWFjaCBkYXkgYmV0d2VlbiA2IE9jdG9iZXIgMjAxNCBhbmQgMTAgT2N0b2JlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gZWFjaERheU9mSW50ZXJ2YWwoe1xuICogICBzdGFydDogbmV3IERhdGUoMjAxNCwgOSwgNiksXG4gKiAgIGVuZDogbmV3IERhdGUoMjAxNCwgOSwgMTApXG4gKiB9KVxuICogLy89PiBbXG4gKiAvLyAgIE1vbiBPY3QgMDYgMjAxNCAwMDowMDowMCxcbiAqIC8vICAgVHVlIE9jdCAwNyAyMDE0IDAwOjAwOjAwLFxuICogLy8gICBXZWQgT2N0IDA4IDIwMTQgMDA6MDA6MDAsXG4gKiAvLyAgIFRodSBPY3QgMDkgMjAxNCAwMDowMDowMCxcbiAqIC8vICAgRnJpIE9jdCAxMCAyMDE0IDAwOjAwOjAwXG4gKiAvLyBdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlYWNoRGF5T2ZJbnRlcnZhbChpbnRlcnZhbCwgb3B0aW9ucykge1xuICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbCk7XG5cbiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDtcbiAgY29uc3QgZW5kVGltZSA9IHJldmVyc2VkID8gK3N0YXJ0IDogK2VuZDtcbiAgY29uc3QgZGF0ZSA9IHJldmVyc2VkID8gZW5kIDogc3RhcnQ7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG5cbiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7XG4gIGlmICghc3RlcCkgcmV0dXJuIFtdO1xuICBpZiAoc3RlcCA8IDApIHtcbiAgICBzdGVwID0gLXN0ZXA7XG4gICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7XG4gIH1cblxuICBjb25zdCBkYXRlcyA9IFtdO1xuXG4gIHdoaWxlICgrZGF0ZSA8PSBlbmRUaW1lKSB7XG4gICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfVxuXG4gIHJldHVybiByZXZlcnNlZCA/IGRhdGVzLnJldmVyc2UoKSA6IGRhdGVzO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGVhY2hEYXlPZkludGVydmFsO1xuIiwgImltcG9ydCB7IG5vcm1hbGl6ZUludGVydmFsIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVJbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGVhY2hIb3VyT2ZJbnRlcnZhbH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZWFjaEhvdXJPZkludGVydmFsfSBmdW5jdGlvbiByZXN1bHQgdHlwZS5cbiAqIFJlc29sdmVzIHRvIHRoZSBhcHByb3ByaWF0ZSBkYXRlIHR5cGUgYmFzZWQgb24gaW5wdXRzLlxuICovXG5cbi8qKlxuICogQG5hbWUgZWFjaEhvdXJPZkludGVydmFsXG4gKiBAY2F0ZWdvcnkgSW50ZXJ2YWwgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBhcnJheSBvZiBob3VycyB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lIGludGVydmFsLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBhcnJheSBvZiBob3VycyB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lIGludGVydmFsLlxuICpcbiAqIEB0eXBlUGFyYW0gSW50ZXJ2YWxUeXBlIC0gSW50ZXJ2YWwgdHlwZS5cbiAqIEB0eXBlUGFyYW0gT3B0aW9ucyAtIE9wdGlvbnMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gaW50ZXJ2YWwgLSBUaGUgaW50ZXJ2YWwuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKlxuICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggc3RhcnRzIG9mIGhvdXJzIGZyb20gdGhlIGhvdXIgb2YgdGhlIGludGVydmFsIHN0YXJ0IHRvIHRoZSBob3VyIG9mIHRoZSBpbnRlcnZhbCBlbmRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRWFjaCBob3VyIGJldHdlZW4gNiBPY3RvYmVyIDIwMTQsIDEyOjAwIGFuZCA2IE9jdG9iZXIgMjAxNCwgMTU6MDBcbiAqIGNvbnN0IHJlc3VsdCA9IGVhY2hIb3VyT2ZJbnRlcnZhbCh7XG4gKiAgIHN0YXJ0OiBuZXcgRGF0ZSgyMDE0LCA5LCA2LCAxMiksXG4gKiAgIGVuZDogbmV3IERhdGUoMjAxNCwgOSwgNiwgMTUpXG4gKiB9KTtcbiAqIC8vPT4gW1xuICogLy8gICBNb24gT2N0IDA2IDIwMTQgMTI6MDA6MDAsXG4gKiAvLyAgIE1vbiBPY3QgMDYgMjAxNCAxMzowMDowMCxcbiAqIC8vICAgTW9uIE9jdCAwNiAyMDE0IDE0OjAwOjAwLFxuICogLy8gICBNb24gT2N0IDA2IDIwMTQgMTU6MDA6MDBcbiAqIC8vIF1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhY2hIb3VyT2ZJbnRlcnZhbChpbnRlcnZhbCwgb3B0aW9ucykge1xuICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbCk7XG5cbiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDtcbiAgY29uc3QgZW5kVGltZSA9IHJldmVyc2VkID8gK3N0YXJ0IDogK2VuZDtcbiAgY29uc3QgZGF0ZSA9IHJldmVyc2VkID8gZW5kIDogc3RhcnQ7XG4gIGRhdGUuc2V0TWludXRlcygwLCAwLCAwKTtcblxuICBsZXQgc3RlcCA9IG9wdGlvbnM/LnN0ZXAgPz8gMTtcbiAgaWYgKCFzdGVwKSByZXR1cm4gW107XG4gIGlmIChzdGVwIDwgMCkge1xuICAgIHN0ZXAgPSAtc3RlcDtcbiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDtcbiAgfVxuXG4gIGNvbnN0IGRhdGVzID0gW107XG5cbiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHtcbiAgICBkYXRlcy5wdXNoKGNvbnN0cnVjdEZyb20oc3RhcnQsIGRhdGUpKTtcbiAgICBkYXRlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSArIHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZWFjaEhvdXJPZkludGVydmFsO1xuIiwgImltcG9ydCB7IG5vcm1hbGl6ZUludGVydmFsIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVJbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHsgYWRkTWludXRlcyB9IGZyb20gXCIuL2FkZE1pbnV0ZXMuanNcIjtcbmltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBlYWNoTWludXRlT2ZJbnRlcnZhbH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZWFjaE1pbnV0ZU9mSW50ZXJ2YWx9IGZ1bmN0aW9uIHJlc3VsdCB0eXBlLiBJdCByZXNvbHZlcyB0aGUgcHJvcGVyIGRhdGEgdHlwZS5cbiAqIEl0IHVzZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGRhdGUgb2JqZWN0IHR5cGUsIHN0YXJ0aW5nIGZyb20gdGhlIGRhdGUgYXJndW1lbnQsXG4gKiB0aGVuIHRoZSBzdGFydCBpbnRlcnZhbCBkYXRlLCBhbmQgZmluYWxseSB0aGUgZW5kIGludGVydmFsIGRhdGUuIElmXG4gKiBhIGNvbnRleHQgZnVuY3Rpb24gaXMgcGFzc2VkLCBpdCB1c2VzIHRoZSBjb250ZXh0IGZ1bmN0aW9uIHJldHVybiB0eXBlLlxuICovXG5cbi8qKlxuICogQG5hbWUgZWFjaE1pbnV0ZU9mSW50ZXJ2YWxcbiAqIEBjYXRlZ29yeSBJbnRlcnZhbCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGFycmF5IG9mIG1pbnV0ZXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSBpbnRlcnZhbC5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdGhlIGFycmF5IG9mIG1pbnV0ZXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSBpbnRlcnZhbC5cbiAqXG4gKiBAdHlwZVBhcmFtIEludGVydmFsVHlwZSAtIEludGVydmFsIHR5cGUuXG4gKiBAdHlwZVBhcmFtIE9wdGlvbnMgLSBPcHRpb25zIHR5cGUuXG4gKlxuICogQHBhcmFtIGludGVydmFsIC0gVGhlIGludGVydmFsLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIHN0YXJ0cyBvZiBtaW51dGVzIGZyb20gdGhlIG1pbnV0ZSBvZiB0aGUgaW50ZXJ2YWwgc3RhcnQgdG8gdGhlIG1pbnV0ZSBvZiB0aGUgaW50ZXJ2YWwgZW5kXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVhY2ggbWludXRlIGJldHdlZW4gMTQgT2N0b2JlciAyMDIwLCAxMzowMCBhbmQgMTQgT2N0b2JlciAyMDIwLCAxMzowM1xuICogY29uc3QgcmVzdWx0ID0gZWFjaE1pbnV0ZU9mSW50ZXJ2YWwoe1xuICogICBzdGFydDogbmV3IERhdGUoMjAxNCwgOSwgMTQsIDEzKSxcbiAqICAgZW5kOiBuZXcgRGF0ZSgyMDE0LCA5LCAxNCwgMTMsIDMpXG4gKiB9KVxuICogLy89PiBbXG4gKiAvLyAgIFdlZCBPY3QgMTQgMjAxNCAxMzowMDowMCxcbiAqIC8vICAgV2VkIE9jdCAxNCAyMDE0IDEzOjAxOjAwLFxuICogLy8gICBXZWQgT2N0IDE0IDIwMTQgMTM6MDI6MDAsXG4gKiAvLyAgIFdlZCBPY3QgMTQgMjAxNCAxMzowMzowMFxuICogLy8gXVxuICovXG5leHBvcnQgZnVuY3Rpb24gZWFjaE1pbnV0ZU9mSW50ZXJ2YWwoaW50ZXJ2YWwsIG9wdGlvbnMpIHtcbiAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwpO1xuICAvLyBTZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtaW51dGVcbiAgc3RhcnQuc2V0U2Vjb25kcygwLCAwKTtcblxuICBsZXQgcmV2ZXJzZWQgPSArc3RhcnQgPiArZW5kO1xuICBjb25zdCBlbmRUaW1lID0gcmV2ZXJzZWQgPyArc3RhcnQgOiArZW5kO1xuICBsZXQgZGF0ZSA9IHJldmVyc2VkID8gZW5kIDogc3RhcnQ7XG5cbiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7XG4gIGlmICghc3RlcCkgcmV0dXJuIFtdO1xuICBpZiAoc3RlcCA8IDApIHtcbiAgICBzdGVwID0gLXN0ZXA7XG4gICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7XG4gIH1cblxuICBjb25zdCBkYXRlcyA9IFtdO1xuXG4gIHdoaWxlICgrZGF0ZSA8PSBlbmRUaW1lKSB7XG4gICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7XG4gICAgZGF0ZSA9IGFkZE1pbnV0ZXMoZGF0ZSwgc3RlcCk7XG4gIH1cblxuICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlcztcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlYWNoTWludXRlT2ZJbnRlcnZhbDtcbiIsICJpbXBvcnQgeyBub3JtYWxpemVJbnRlcnZhbCB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplSW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBlYWNoTW9udGhPZkludGVydmFsfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogVGhlIHtAbGluayBlYWNoTW9udGhPZkludGVydmFsfSBmdW5jdGlvbiByZXN1bHQgdHlwZS4gSXQgcmVzb2x2ZXMgdGhlIHByb3BlciBkYXRhIHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBlYWNoTW9udGhPZkludGVydmFsXG4gKiBAY2F0ZWdvcnkgSW50ZXJ2YWwgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBhcnJheSBvZiBtb250aHMgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSBpbnRlcnZhbC5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgYXJyYXkgb2YgbW9udGhzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuXG4gKlxuICogQHR5cGVQYXJhbSBJbnRlcnZhbFR5cGUgLSBJbnRlcnZhbCB0eXBlLlxuICogQHR5cGVQYXJhbSBPcHRpb25zIC0gT3B0aW9ucyB0eXBlLlxuICpcbiAqIEBwYXJhbSBpbnRlcnZhbCAtIFRoZSBpbnRlcnZhbC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBzdGFydHMgb2YgbW9udGhzIGZyb20gdGhlIG1vbnRoIG9mIHRoZSBpbnRlcnZhbCBzdGFydCB0byB0aGUgbW9udGggb2YgdGhlIGludGVydmFsIGVuZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFYWNoIG1vbnRoIGJldHdlZW4gNiBGZWJydWFyeSAyMDE0IGFuZCAxMCBBdWd1c3QgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IGVhY2hNb250aE9mSW50ZXJ2YWwoe1xuICogICBzdGFydDogbmV3IERhdGUoMjAxNCwgMSwgNiksXG4gKiAgIGVuZDogbmV3IERhdGUoMjAxNCwgNywgMTApXG4gKiB9KVxuICogLy89PiBbXG4gKiAvLyAgIFNhdCBGZWIgMDEgMjAxNCAwMDowMDowMCxcbiAqIC8vICAgU2F0IE1hciAwMSAyMDE0IDAwOjAwOjAwLFxuICogLy8gICBUdWUgQXByIDAxIDIwMTQgMDA6MDA6MDAsXG4gKiAvLyAgIFRodSBNYXkgMDEgMjAxNCAwMDowMDowMCxcbiAqIC8vICAgU3VuIEp1biAwMSAyMDE0IDAwOjAwOjAwLFxuICogLy8gICBUdWUgSnVsIDAxIDIwMTQgMDA6MDA6MDAsXG4gKiAvLyAgIEZyaSBBdWcgMDEgMjAxNCAwMDowMDowMFxuICogLy8gXVxuICovXG5leHBvcnQgZnVuY3Rpb24gZWFjaE1vbnRoT2ZJbnRlcnZhbChpbnRlcnZhbCwgb3B0aW9ucykge1xuICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbCk7XG5cbiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDtcbiAgY29uc3QgZW5kVGltZSA9IHJldmVyc2VkID8gK3N0YXJ0IDogK2VuZDtcbiAgY29uc3QgZGF0ZSA9IHJldmVyc2VkID8gZW5kIDogc3RhcnQ7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcblxuICBsZXQgc3RlcCA9IG9wdGlvbnM/LnN0ZXAgPz8gMTtcbiAgaWYgKCFzdGVwKSByZXR1cm4gW107XG4gIGlmIChzdGVwIDwgMCkge1xuICAgIHN0ZXAgPSAtc3RlcDtcbiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDtcbiAgfVxuXG4gIGNvbnN0IGRhdGVzID0gW107XG5cbiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHtcbiAgICBkYXRlcy5wdXNoKGNvbnN0cnVjdEZyb20oc3RhcnQsIGRhdGUpKTtcbiAgICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZWFjaE1vbnRoT2ZJbnRlcnZhbDtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZRdWFydGVyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZlF1YXJ0ZXJcbiAqIEBjYXRlZ29yeSBRdWFydGVyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSB5ZWFyIHF1YXJ0ZXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIHllYXIgcXVhcnRlciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgcXVhcnRlclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSBxdWFydGVyIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZlF1YXJ0ZXIobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gVHVlIEp1bCAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mUXVhcnRlcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgY3VycmVudE1vbnRoID0gX2RhdGUuZ2V0TW9udGgoKTtcbiAgY29uc3QgbW9udGggPSBjdXJyZW50TW9udGggLSAoY3VycmVudE1vbnRoICUgMyk7XG4gIF9kYXRlLnNldE1vbnRoKG1vbnRoLCAxKTtcbiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mUXVhcnRlcjtcbiIsICJpbXBvcnQgeyBub3JtYWxpemVJbnRlcnZhbCB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplSW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7IGFkZFF1YXJ0ZXJzIH0gZnJvbSBcIi4vYWRkUXVhcnRlcnMuanNcIjtcbmltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mUXVhcnRlciB9IGZyb20gXCIuL3N0YXJ0T2ZRdWFydGVyLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBlYWNoUXVhcnRlck9mSW50ZXJ2YWx9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBUaGUge0BsaW5rIGVhY2hRdWFydGVyT2ZJbnRlcnZhbH0gZnVuY3Rpb24gcmVzdWx0IHR5cGUuIEl0IHJlc29sdmVzIHRoZSBwcm9wZXIgZGF0YSB0eXBlLlxuICogSXQgdXNlcyB0aGUgZmlyc3QgYXJndW1lbnQgZGF0ZSBvYmplY3QgdHlwZSwgc3RhcnRpbmcgZnJvbSB0aGUgZGF0ZSBhcmd1bWVudCxcbiAqIHRoZW4gdGhlIHN0YXJ0IGludGVydmFsIGRhdGUsIGFuZCBmaW5hbGx5IHRoZSBlbmQgaW50ZXJ2YWwgZGF0ZS4gSWZcbiAqIGEgY29udGV4dCBmdW5jdGlvbiBpcyBwYXNzZWQsIGl0IHVzZXMgdGhlIGNvbnRleHQgZnVuY3Rpb24gcmV0dXJuIHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBlYWNoUXVhcnRlck9mSW50ZXJ2YWxcbiAqIEBjYXRlZ29yeSBJbnRlcnZhbCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGFycmF5IG9mIHF1YXJ0ZXJzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGFycmF5IG9mIHF1YXJ0ZXJzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuXG4gKlxuICogQHR5cGVQYXJhbSBJbnRlcnZhbFR5cGUgLSBJbnRlcnZhbCB0eXBlLlxuICogQHR5cGVQYXJhbSBPcHRpb25zIC0gT3B0aW9ucyB0eXBlLlxuICpcbiAqIEBwYXJhbSBpbnRlcnZhbCAtIFRoZSBpbnRlcnZhbFxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggc3RhcnRzIG9mIHF1YXJ0ZXJzIGZyb20gdGhlIHF1YXJ0ZXIgb2YgdGhlIGludGVydmFsIHN0YXJ0IHRvIHRoZSBxdWFydGVyIG9mIHRoZSBpbnRlcnZhbCBlbmRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRWFjaCBxdWFydGVyIHdpdGhpbiBpbnRlcnZhbCA2IEZlYnJ1YXJ5IDIwMTQgLSAxMCBBdWd1c3QgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IGVhY2hRdWFydGVyT2ZJbnRlcnZhbCh7XG4gKiAgIHN0YXJ0OiBuZXcgRGF0ZSgyMDE0LCAxLCA2KSxcbiAqICAgZW5kOiBuZXcgRGF0ZSgyMDE0LCA3LCAxMCksXG4gKiB9KVxuICogLy89PiBbXG4gKiAvLyAgIFdlZCBKYW4gMDEgMjAxNCAwMDowMDowMCxcbiAqIC8vICAgVHVlIEFwciAwMSAyMDE0IDAwOjAwOjAwLFxuICogLy8gICBUdWUgSnVsIDAxIDIwMTQgMDA6MDA6MDAsXG4gKiAvLyBdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlYWNoUXVhcnRlck9mSW50ZXJ2YWwoaW50ZXJ2YWwsIG9wdGlvbnMpIHtcbiAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwpO1xuXG4gIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQ7XG4gIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydE9mUXVhcnRlcihzdGFydCkgOiArc3RhcnRPZlF1YXJ0ZXIoZW5kKTtcbiAgbGV0IGRhdGUgPSByZXZlcnNlZCA/IHN0YXJ0T2ZRdWFydGVyKGVuZCkgOiBzdGFydE9mUXVhcnRlcihzdGFydCk7XG5cbiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7XG4gIGlmICghc3RlcCkgcmV0dXJuIFtdO1xuICBpZiAoc3RlcCA8IDApIHtcbiAgICBzdGVwID0gLXN0ZXA7XG4gICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7XG4gIH1cblxuICBjb25zdCBkYXRlcyA9IFtdO1xuXG4gIHdoaWxlICgrZGF0ZSA8PSBlbmRUaW1lKSB7XG4gICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7XG4gICAgZGF0ZSA9IGFkZFF1YXJ0ZXJzKGRhdGUsIHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZWFjaFF1YXJ0ZXJPZkludGVydmFsO1xuIiwgImltcG9ydCB7IG5vcm1hbGl6ZUludGVydmFsIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVJbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHsgYWRkV2Vla3MgfSBmcm9tIFwiLi9hZGRXZWVrcy5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGVhY2hXZWVrT2ZJbnRlcnZhbH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZWFjaFdlZWtPZkludGVydmFsfSBmdW5jdGlvbiByZXN1bHQgdHlwZS4gSXQgcmVzb2x2ZXMgdGhlIHByb3BlciBkYXRhIHR5cGUuXG4gKiBJdCB1c2VzIHRoZSBmaXJzdCBhcmd1bWVudCBkYXRlIG9iamVjdCB0eXBlLCBzdGFydGluZyBmcm9tIHRoZSBpbnRlcnZhbCBzdGFydCBkYXRlLFxuICogdGhlbiB0aGUgZW5kIGludGVydmFsIGRhdGUuIElmIGEgY29udGV4dCBmdW5jdGlvbiBpcyBwYXNzZWQsIGl0IHVzZXMgdGhlIGNvbnRleHQgZnVuY3Rpb24gcmV0dXJuIHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBlYWNoV2Vla09mSW50ZXJ2YWxcbiAqIEBjYXRlZ29yeSBJbnRlcnZhbCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGFycmF5IG9mIHdlZWtzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGFycmF5IG9mIHdlZWtzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuXG4gKlxuICogQHBhcmFtIGludGVydmFsIC0gVGhlIGludGVydmFsLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIHN0YXJ0cyBvZiB3ZWVrcyBmcm9tIHRoZSB3ZWVrIG9mIHRoZSBpbnRlcnZhbCBzdGFydCB0byB0aGUgd2VlayBvZiB0aGUgaW50ZXJ2YWwgZW5kXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVhY2ggd2VlayB3aXRoaW4gaW50ZXJ2YWwgNiBPY3RvYmVyIDIwMTQgLSAyMyBOb3ZlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gZWFjaFdlZWtPZkludGVydmFsKHtcbiAqICAgc3RhcnQ6IG5ldyBEYXRlKDIwMTQsIDksIDYpLFxuICogICBlbmQ6IG5ldyBEYXRlKDIwMTQsIDEwLCAyMylcbiAqIH0pXG4gKiAvLz0+IFtcbiAqIC8vICAgU3VuIE9jdCAwNSAyMDE0IDAwOjAwOjAwLFxuICogLy8gICBTdW4gT2N0IDEyIDIwMTQgMDA6MDA6MDAsXG4gKiAvLyAgIFN1biBPY3QgMTkgMjAxNCAwMDowMDowMCxcbiAqIC8vICAgU3VuIE9jdCAyNiAyMDE0IDAwOjAwOjAwLFxuICogLy8gICBTdW4gTm92IDAyIDIwMTQgMDA6MDA6MDAsXG4gKiAvLyAgIFN1biBOb3YgMDkgMjAxNCAwMDowMDowMCxcbiAqIC8vICAgU3VuIE5vdiAxNiAyMDE0IDAwOjAwOjAwLFxuICogLy8gICBTdW4gTm92IDIzIDIwMTQgMDA6MDA6MDBcbiAqIC8vIF1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhY2hXZWVrT2ZJbnRlcnZhbChpbnRlcnZhbCwgb3B0aW9ucykge1xuICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbCk7XG5cbiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDtcbiAgY29uc3Qgc3RhcnREYXRlV2VlayA9IHJldmVyc2VkXG4gICAgPyBzdGFydE9mV2VlayhlbmQsIG9wdGlvbnMpXG4gICAgOiBzdGFydE9mV2VlayhzdGFydCwgb3B0aW9ucyk7XG4gIGNvbnN0IGVuZERhdGVXZWVrID0gcmV2ZXJzZWRcbiAgICA/IHN0YXJ0T2ZXZWVrKHN0YXJ0LCBvcHRpb25zKVxuICAgIDogc3RhcnRPZldlZWsoZW5kLCBvcHRpb25zKTtcblxuICBzdGFydERhdGVXZWVrLnNldEhvdXJzKDE1KTtcbiAgZW5kRGF0ZVdlZWsuc2V0SG91cnMoMTUpO1xuXG4gIGNvbnN0IGVuZFRpbWUgPSArZW5kRGF0ZVdlZWsuZ2V0VGltZSgpO1xuICBsZXQgY3VycmVudERhdGUgPSBzdGFydERhdGVXZWVrO1xuXG4gIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxO1xuICBpZiAoIXN0ZXApIHJldHVybiBbXTtcbiAgaWYgKHN0ZXAgPCAwKSB7XG4gICAgc3RlcCA9IC1zdGVwO1xuICAgIHJldmVyc2VkID0gIXJldmVyc2VkO1xuICB9XG5cbiAgY29uc3QgZGF0ZXMgPSBbXTtcblxuICB3aGlsZSAoK2N1cnJlbnREYXRlIDw9IGVuZFRpbWUpIHtcbiAgICBjdXJyZW50RGF0ZS5zZXRIb3VycygwKTtcbiAgICBkYXRlcy5wdXNoKGNvbnN0cnVjdEZyb20oc3RhcnQsIGN1cnJlbnREYXRlKSk7XG4gICAgY3VycmVudERhdGUgPSBhZGRXZWVrcyhjdXJyZW50RGF0ZSwgc3RlcCk7XG4gICAgY3VycmVudERhdGUuc2V0SG91cnMoMTUpO1xuICB9XG5cbiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZWFjaFdlZWtPZkludGVydmFsO1xuIiwgImltcG9ydCB7IG5vcm1hbGl6ZUludGVydmFsIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVJbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IGVhY2hEYXlPZkludGVydmFsIH0gZnJvbSBcIi4vZWFjaERheU9mSW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7IGlzV2Vla2VuZCB9IGZyb20gXCIuL2lzV2Vla2VuZC5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZWFjaFdlZWtlbmRPZkludGVydmFsfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogVGhlIHtAbGluayBlYWNoV2Vla2VuZE9mSW50ZXJ2YWx9IGZ1bmN0aW9uIHJlc3VsdCB0eXBlLlxuICovXG5cbi8qKlxuICogQG5hbWUgZWFjaFdlZWtlbmRPZkludGVydmFsXG4gKiBAY2F0ZWdvcnkgSW50ZXJ2YWwgSGVscGVyc1xuICogQHN1bW1hcnkgTGlzdCBhbGwgdGhlIFNhdHVyZGF5cyBhbmQgU3VuZGF5cyBpbiB0aGUgZ2l2ZW4gZGF0ZSBpbnRlcnZhbC5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCBhbGwgdGhlIFNhdHVyZGF5cyBhbmQgU3VuZGF5cyBpbiB0aGUgZ2l2ZW4gZGF0ZSBpbnRlcnZhbC5cbiAqXG4gKiBAdHlwZVBhcmFtIEludGVydmFsVHlwZSAtIEludGVydmFsIHR5cGUuXG4gKiBAdHlwZVBhcmFtIE9wdGlvbnMgLSBPcHRpb25zIHR5cGUuXG4gKlxuICogQHBhcmFtIGludGVydmFsIC0gVGhlIGdpdmVuIGludGVydmFsXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgU2F0dXJkYXlzIGFuZCBTdW5kYXlzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIExpc3RzIGFsbCBTYXR1cmRheXMgYW5kIFN1bmRheXMgaW4gdGhlIGdpdmVuIGRhdGUgaW50ZXJ2YWxcbiAqIGNvbnN0IHJlc3VsdCA9IGVhY2hXZWVrZW5kT2ZJbnRlcnZhbCh7XG4gKiAgIHN0YXJ0OiBuZXcgRGF0ZSgyMDE4LCA4LCAxNyksXG4gKiAgIGVuZDogbmV3IERhdGUoMjAxOCwgOCwgMzApXG4gKiB9KVxuICogLy89PiBbXG4gKiAvLyAgIFNhdCBTZXAgMjIgMjAxOCAwMDowMDowMCxcbiAqIC8vICAgU3VuIFNlcCAyMyAyMDE4IDAwOjAwOjAwLFxuICogLy8gICBTYXQgU2VwIDI5IDIwMTggMDA6MDA6MDAsXG4gKiAvLyAgIFN1biBTZXAgMzAgMjAxOCAwMDowMDowMFxuICogLy8gXVxuICovXG5leHBvcnQgZnVuY3Rpb24gZWFjaFdlZWtlbmRPZkludGVydmFsKGludGVydmFsLCBvcHRpb25zKSB7XG4gIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsKTtcbiAgY29uc3QgZGF0ZUludGVydmFsID0gZWFjaERheU9mSW50ZXJ2YWwoeyBzdGFydCwgZW5kIH0sIG9wdGlvbnMpO1xuICBjb25zdCB3ZWVrZW5kcyA9IFtdO1xuICBsZXQgaW5kZXggPSAwO1xuICB3aGlsZSAoaW5kZXggPCBkYXRlSW50ZXJ2YWwubGVuZ3RoKSB7XG4gICAgY29uc3QgZGF0ZSA9IGRhdGVJbnRlcnZhbFtpbmRleCsrXTtcbiAgICBpZiAoaXNXZWVrZW5kKGRhdGUpKSB3ZWVrZW5kcy5wdXNoKGNvbnN0cnVjdEZyb20oc3RhcnQsIGRhdGUpKTtcbiAgfVxuICByZXR1cm4gd2Vla2VuZHM7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZWFjaFdlZWtlbmRPZkludGVydmFsO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZk1vbnRofSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZk1vbnRoXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIG1vbnRoIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSBtb250aCBmb3IgdGhlIGdpdmVuIGRhdGUuIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy5cbiAqIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsXG4gKiBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgbW9udGhcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgbW9udGggZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mTW9udGgobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gTW9uIFNlcCAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mTW9udGgoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIF9kYXRlLnNldERhdGUoMSk7XG4gIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZk1vbnRoO1xuIiwgImltcG9ydCB7IGVhY2hXZWVrZW5kT2ZJbnRlcnZhbCB9IGZyb20gXCIuL2VhY2hXZWVrZW5kT2ZJbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHsgZW5kT2ZNb250aCB9IGZyb20gXCIuL2VuZE9mTW9udGguanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZNb250aCB9IGZyb20gXCIuL3N0YXJ0T2ZNb250aC5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZWFjaFdlZWtlbmRPZk1vbnRofSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZWFjaFdlZWtlbmRPZk1vbnRoXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgTGlzdCBhbGwgdGhlIFNhdHVyZGF5cyBhbmQgU3VuZGF5cyBpbiB0aGUgZ2l2ZW4gbW9udGguXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgYWxsIHRoZSBTYXR1cmRheXMgYW5kIFN1bmRheXMgaW4gdGhlIGdpdmVuIG1vbnRoLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBtb250aFxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIFNhdHVyZGF5cyBhbmQgU3VuZGF5c1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBMaXN0cyBhbGwgU2F0dXJkYXlzIGFuZCBTdW5kYXlzIGluIHRoZSBnaXZlbiBtb250aFxuICogY29uc3QgcmVzdWx0ID0gZWFjaFdlZWtlbmRPZk1vbnRoKG5ldyBEYXRlKDIwMjIsIDEsIDEpKVxuICogLy89PiBbXG4gKiAvLyAgIFNhdCBGZWIgMDUgMjAyMiAwMDowMDowMCxcbiAqIC8vICAgU3VuIEZlYiAwNiAyMDIyIDAwOjAwOjAwLFxuICogLy8gICBTYXQgRmViIDEyIDIwMjIgMDA6MDA6MDAsXG4gKiAvLyAgIFN1biBGZWIgMTMgMjAyMiAwMDowMDowMCxcbiAqIC8vICAgU2F0IEZlYiAxOSAyMDIyIDAwOjAwOjAwLFxuICogLy8gICBTdW4gRmViIDIwIDIwMjIgMDA6MDA6MDAsXG4gKiAvLyAgIFNhdCBGZWIgMjYgMjAyMiAwMDowMDowMCxcbiAqIC8vICAgU3VuIEZlYiAyNyAyMDIyIDAwOjAwOjAwXG4gKiAvLyBdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlYWNoV2Vla2VuZE9mTW9udGgoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBzdGFydCA9IHN0YXJ0T2ZNb250aChkYXRlLCBvcHRpb25zKTtcbiAgY29uc3QgZW5kID0gZW5kT2ZNb250aChkYXRlLCBvcHRpb25zKTtcbiAgcmV0dXJuIGVhY2hXZWVrZW5kT2ZJbnRlcnZhbCh7IHN0YXJ0LCBlbmQgfSwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZWFjaFdlZWtlbmRPZk1vbnRoO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZW5kT2ZZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZW5kT2ZZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVuZCBvZiBhIHllYXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBlbmQgb2YgYSB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZW5kIG9mIGEgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgZW5kIG9mIGEgeWVhciBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGVuZE9mWWVhcihuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBXZWQgRGVjIDMxIDIwMTQgMjM6NTk6NTkuOTk5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRPZlllYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBfZGF0ZS5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgMCk7XG4gIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlbmRPZlllYXI7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSB5ZWFyIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZlllYXIobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwMCkpXG4gKiAvLz0+IFdlZCBKYW4gMDEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGRhdGVfLnNldEZ1bGxZZWFyKGRhdGVfLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICBkYXRlXy5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGVfO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZZZWFyO1xuIiwgImltcG9ydCB7IGVhY2hXZWVrZW5kT2ZJbnRlcnZhbCB9IGZyb20gXCIuL2VhY2hXZWVrZW5kT2ZJbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHsgZW5kT2ZZZWFyIH0gZnJvbSBcIi4vZW5kT2ZZZWFyLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mWWVhciB9IGZyb20gXCIuL3N0YXJ0T2ZZZWFyLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBlYWNoV2Vla2VuZE9mWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGVhY2hXZWVrZW5kT2ZZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBMaXN0IGFsbCB0aGUgU2F0dXJkYXlzIGFuZCBTdW5kYXlzIGluIHRoZSB5ZWFyLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IGFsbCB0aGUgU2F0dXJkYXlzIGFuZCBTdW5kYXlzIGluIHRoZSB5ZWFyLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiB5ZWFyXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgU2F0dXJkYXlzIGFuZCBTdW5kYXlzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIExpc3RzIGFsbCBTYXR1cmRheXMgYW5kIFN1bmRheXMgaW4gdGhlIHllYXJcbiAqIGNvbnN0IHJlc3VsdCA9IGVhY2hXZWVrZW5kT2ZZZWFyKG5ldyBEYXRlKDIwMjAsIDEsIDEpKVxuICogLy89PiBbXG4gKiAvLyAgIFNhdCBKYW4gMDMgMjAyMCAwMDowMDowMCxcbiAqIC8vICAgU3VuIEphbiAwNCAyMDIwIDAwOjAwOjAwLFxuICogLy8gICAuLi5cbiAqIC8vICAgU3VuIERlYyAyNyAyMDIwIDAwOjAwOjAwXG4gKiAvLyBdXG4gKiBdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlYWNoV2Vla2VuZE9mWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0YXJ0ID0gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucyk7XG4gIGNvbnN0IGVuZCA9IGVuZE9mWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgcmV0dXJuIGVhY2hXZWVrZW5kT2ZJbnRlcnZhbCh7IHN0YXJ0LCBlbmQgfSwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZWFjaFdlZWtlbmRPZlllYXI7XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplSW50ZXJ2YWwgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZUludGVydmFsLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZWFjaFllYXJPZkludGVydmFsfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogVGhlIHtAbGluayBlYWNoWWVhck9mSW50ZXJ2YWx9IGZ1bmN0aW9uIHJlc3VsdCB0eXBlLiBJdCByZXNvbHZlcyB0aGUgcHJvcGVyIGRhdGEgdHlwZS5cbiAqIEl0IHVzZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGRhdGUgb2JqZWN0IHR5cGUsIHN0YXJ0aW5nIGZyb20gdGhlIGRhdGUgYXJndW1lbnQsXG4gKiB0aGVuIHRoZSBzdGFydCBpbnRlcnZhbCBkYXRlLCBhbmQgZmluYWxseSB0aGUgZW5kIGludGVydmFsIGRhdGUuIElmXG4gKiBhIGNvbnRleHQgZnVuY3Rpb24gaXMgcGFzc2VkLCBpdCB1c2VzIHRoZSBjb250ZXh0IGZ1bmN0aW9uIHJldHVybiB0eXBlLlxuICovXG5cbi8qKlxuICogQG5hbWUgZWFjaFllYXJPZkludGVydmFsXG4gKiBAY2F0ZWdvcnkgSW50ZXJ2YWwgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBhcnJheSBvZiB5ZWFybHkgdGltZXN0YW1wcyB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lIGludGVydmFsLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBhcnJheSBvZiB5ZWFybHkgdGltZXN0YW1wcyB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lIGludGVydmFsLlxuICpcbiAqIEB0eXBlUGFyYW0gSW50ZXJ2YWxUeXBlIC0gSW50ZXJ2YWwgdHlwZS5cbiAqIEB0eXBlUGFyYW0gT3B0aW9ucyAtIE9wdGlvbnMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gaW50ZXJ2YWwgLSBUaGUgaW50ZXJ2YWwuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKlxuICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggc3RhcnRzIG9mIHllYXJseSB0aW1lc3RhbXBzIGZyb20gdGhlIG1vbnRoIG9mIHRoZSBpbnRlcnZhbCBzdGFydCB0byB0aGUgbW9udGggb2YgdGhlIGludGVydmFsIGVuZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFYWNoIHllYXIgYmV0d2VlbiA2IEZlYnJ1YXJ5IDIwMTQgYW5kIDEwIEF1Z3VzdCAyMDE3OlxuICogY29uc3QgcmVzdWx0ID0gZWFjaFllYXJPZkludGVydmFsKHtcbiAqICAgc3RhcnQ6IG5ldyBEYXRlKDIwMTQsIDEsIDYpLFxuICogICBlbmQ6IG5ldyBEYXRlKDIwMTcsIDcsIDEwKVxuICogfSlcbiAqIC8vPT4gW1xuICogLy8gICBXZWQgSmFuIDAxIDIwMTQgMDA6MDA6MDAsXG4gKiAvLyAgIFRodSBKYW4gMDEgMjAxNSAwMDowMDowMCxcbiAqIC8vICAgRnJpIEphbiAwMSAyMDE2IDAwOjAwOjAwLFxuICogLy8gICBTdW4gSmFuIDAxIDIwMTcgMDA6MDA6MDBcbiAqIC8vIF1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhY2hZZWFyT2ZJbnRlcnZhbChpbnRlcnZhbCwgb3B0aW9ucykge1xuICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbCk7XG5cbiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDtcbiAgY29uc3QgZW5kVGltZSA9IHJldmVyc2VkID8gK3N0YXJ0IDogK2VuZDtcbiAgY29uc3QgZGF0ZSA9IHJldmVyc2VkID8gZW5kIDogc3RhcnQ7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG5cbiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7XG4gIGlmICghc3RlcCkgcmV0dXJuIFtdO1xuICBpZiAoc3RlcCA8IDApIHtcbiAgICBzdGVwID0gLXN0ZXA7XG4gICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7XG4gIH1cblxuICBjb25zdCBkYXRlcyA9IFtdO1xuXG4gIHdoaWxlICgrZGF0ZSA8PSBlbmRUaW1lKSB7XG4gICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwKTtcbiAgfVxuXG4gIHJldHVybiByZXZlcnNlZCA/IGRhdGVzLnJldmVyc2UoKSA6IGRhdGVzO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGVhY2hZZWFyT2ZJbnRlcnZhbDtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGVuZE9mRGVjYWRlfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZW5kT2ZEZWNhZGVcbiAqIEBjYXRlZ29yeSBEZWNhZGUgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBlbmQgb2YgYSBkZWNhZGUgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBlbmQgb2YgYSBkZWNhZGUgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZW5kIG9mIGEgZGVjYWRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBlbmQgb2YgYSBkZWNhZGUgZm9yIDEyIE1heSAxOTg0IDAwOjAwOjAwOlxuICogY29uc3QgcmVzdWx0ID0gZW5kT2ZEZWNhZGUobmV3IERhdGUoMTk4NCwgNCwgMTIsIDAwLCAwMCwgMDApKVxuICogLy89PiBEZWMgMzEgMTk4OSAyMzo1OTo1OS45OTlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZE9mRGVjYWRlKGRhdGUsIG9wdGlvbnMpIHtcbiAgLy8gVE9ETzogU3dpdGNoIHRvIG1vcmUgdGVjaG5pY2FsIGRlZmluaXRpb24gaW4gb2YgZGVjYWRlcyB0aGF0IHN0YXJ0IHdpdGggMVxuICAvLyBlbmQgd2l0aCAwLiBJLmUuIDIwMDEtMjAxMCBpbnN0ZWFkIG9mIGN1cnJlbnQgMjAwMC0yMDA5LiBJdCdzIGEgYnJlYWtpbmdcbiAgLy8gY2hhbmdlLCBzbyBpdCBjYW4gb25seSBiZSBkb25lIGluIDQuMC5cbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTtcbiAgY29uc3QgZGVjYWRlID0gOSArIE1hdGguZmxvb3IoeWVhciAvIDEwKSAqIDEwO1xuICBfZGF0ZS5zZXRGdWxsWWVhcihkZWNhZGUsIDExLCAzMSk7XG4gIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlbmRPZkRlY2FkZTtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGVuZE9mSG91cn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGVuZE9mSG91clxuICogQGNhdGVnb3J5IEhvdXIgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBlbmQgb2YgYW4gaG91ciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGVuZCBvZiBhbiBob3VyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBlbmQgb2YgYW4gaG91clxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgZW5kIG9mIGFuIGhvdXIgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBlbmRPZkhvdXIobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1KSlcbiAqIC8vPT4gVHVlIFNlcCAwMiAyMDE0IDExOjU5OjU5Ljk5OVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5kT2ZIb3VyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBfZGF0ZS5zZXRNaW51dGVzKDU5LCA1OSwgOTk5KTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGVuZE9mSG91cjtcbiIsICJpbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZW5kT2ZXZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZW5kT2ZXZWVrXG4gKiBAY2F0ZWdvcnkgV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVuZCBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBlbmQgb2YgYSB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBlbmQgb2YgYSB3ZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBlbmQgb2YgYSB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gZW5kT2ZXZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFNhdCBTZXAgMDYgMjAxNCAyMzo1OTo1OS45OTlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdGhlIHdlZWsgc3RhcnRzIG9uIE1vbmRheSwgdGhlIGVuZCBvZiB0aGUgd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGVuZE9mV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApLCB7IHdlZWtTdGFydHNPbjogMSB9KVxuICogLy89PiBTdW4gU2VwIDA3IDIwMTQgMjM6NTk6NTkuOTk5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRPZldlZWsoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IHdlZWtTdGFydHNPbiA9XG4gICAgb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIDA7XG5cbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkYXkgPSBfZGF0ZS5nZXREYXkoKTtcbiAgY29uc3QgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyAtNyA6IDApICsgNiAtIChkYXkgLSB3ZWVrU3RhcnRzT24pO1xuXG4gIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlbmRPZldlZWs7XG4iLCAiaW1wb3J0IHsgZW5kT2ZXZWVrIH0gZnJvbSBcIi4vZW5kT2ZXZWVrLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBlbmRPZklTT1dlZWt9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBlbmRPZklTT1dlZWtcbiAqIEBjYXRlZ29yeSBJU08gV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVuZCBvZiBhbiBJU08gd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGVuZCBvZiBhbiBJU08gd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGVuZCBvZiBhbiBJU08gd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgZW5kIG9mIGFuIElTTyB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gZW5kT2ZJU09XZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFN1biBTZXAgMDcgMjAxNCAyMzo1OTo1OS45OTlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZE9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBlbmRPZldlZWsoZGF0ZSwgeyAuLi5vcHRpb25zLCB3ZWVrU3RhcnRzT246IDEgfSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZW5kT2ZJU09XZWVrO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBnZXRJU09XZWVrWWVhciB9IGZyb20gXCIuL2dldElTT1dlZWtZZWFyLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mSVNPV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBlbmRPZklTT1dlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZW5kT2ZJU09XZWVrWWVhclxuICogQGNhdGVnb3J5IElTTyBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgZW5kIG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZW5kIG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLFxuICogd2hpY2ggYWx3YXlzIHN0YXJ0cyAzIGRheXMgYmVmb3JlIHRoZSB5ZWFyJ3MgZmlyc3QgVGh1cnNkYXkuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gQ29udGV4dERhdGUgLSBUaGUgYERhdGVgIHR5cGUgb2YgdGhlIGNvbnRleHQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBlbmQgb2YgYW4gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIGVuZCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgMiBKdWx5IDIwMDU6XG4gKiBjb25zdCByZXN1bHQgPSBlbmRPZklTT1dlZWtZZWFyKG5ldyBEYXRlKDIwMDUsIDYsIDIpKVxuICogLy89PiBTdW4gSmFuIDAxIDIwMDYgMjM6NTk6NTkuOTk5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICBjb25zdCBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGNvbnN0IF9kYXRlID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciwgb3B0aW9ucyk7XG4gIF9kYXRlLnNldE1pbGxpc2Vjb25kcyhfZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIDEpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZW5kT2ZJU09XZWVrWWVhcjtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGVuZE9mTWludXRlfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZW5kT2ZNaW51dGVcbiAqIEBjYXRlZ29yeSBNaW51dGUgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBlbmQgb2YgYSBtaW51dGUgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBlbmQgb2YgYSBtaW51dGUgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZSBvciB0aGUgcHJvdmlkZWQgY29udGV4dC5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGVuZCBvZiBhIG1pbnV0ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgZW5kIG9mIGEgbWludXRlIGZvciAxIERlY2VtYmVyIDIwMTQgMjI6MTU6NDUuNDAwOlxuICogY29uc3QgcmVzdWx0ID0gZW5kT2ZNaW51dGUobmV3IERhdGUoMjAxNCwgMTEsIDEsIDIyLCAxNSwgNDUsIDQwMCkpXG4gKiAvLz0+IE1vbiBEZWMgMDEgMjAxNCAyMjoxNTo1OS45OTlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZE9mTWludXRlKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBfZGF0ZS5zZXRTZWNvbmRzKDU5LCA5OTkpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZW5kT2ZNaW51dGU7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBlbmRPZlF1YXJ0ZXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBlbmRPZlF1YXJ0ZXJcbiAqIEBjYXRlZ29yeSBRdWFydGVyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgZW5kIG9mIGEgeWVhciBxdWFydGVyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZW5kIG9mIGEgeWVhciBxdWFydGVyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBlbmQgb2YgYSBxdWFydGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBlbmQgb2YgYSBxdWFydGVyIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gZW5kT2ZRdWFydGVyKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFR1ZSBTZXAgMzAgMjAxNCAyMzo1OTo1OS45OTlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZE9mUXVhcnRlcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgY3VycmVudE1vbnRoID0gX2RhdGUuZ2V0TW9udGgoKTtcbiAgY29uc3QgbW9udGggPSBjdXJyZW50TW9udGggLSAoY3VycmVudE1vbnRoICUgMykgKyAzO1xuICBfZGF0ZS5zZXRNb250aChtb250aCwgMCk7XG4gIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlbmRPZlF1YXJ0ZXI7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBlbmRPZlNlY29uZH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGVuZE9mU2Vjb25kXG4gKiBAY2F0ZWdvcnkgU2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgZW5kIG9mIGEgc2Vjb25kIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZW5kIG9mIGEgc2Vjb25kIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUgaWYgbm8gYGluYCBvcHRpb24gaXMgc3BlY2lmaWVkLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZW5kIG9mIGEgc2Vjb25kXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBlbmQgb2YgYSBzZWNvbmQgZm9yIDEgRGVjZW1iZXIgMjAxNCAyMjoxNTo0NS40MDA6XG4gKiBjb25zdCByZXN1bHQgPSBlbmRPZlNlY29uZChuZXcgRGF0ZSgyMDE0LCAxMSwgMSwgMjIsIDE1LCA0NSwgNDAwKSlcbiAqIC8vPT4gTW9uIERlYyAwMSAyMDE0IDIyOjE1OjQ1Ljk5OVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5kT2ZTZWNvbmQoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIF9kYXRlLnNldE1pbGxpc2Vjb25kcyg5OTkpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZW5kT2ZTZWNvbmQ7XG4iLCAiaW1wb3J0IHsgZW5kT2ZEYXkgfSBmcm9tIFwiLi9lbmRPZkRheS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZW5kT2ZUb2RheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGVuZE9mVG9kYXlcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBlbmQgb2YgdG9kYXkuXG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBlbmQgb2YgdG9kYXkuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZW5kIG9mIHRvZGF5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDYgT2N0b2JlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gZW5kT2ZUb2RheSgpXG4gKiAvLz0+IE1vbiBPY3QgNiAyMDE0IDIzOjU5OjU5Ljk5OVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5kT2ZUb2RheShvcHRpb25zKSB7XG4gIHJldHVybiBlbmRPZkRheShEYXRlLm5vdygpLCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlbmRPZlRvZGF5O1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdE5vdyB9IGZyb20gXCIuL2NvbnN0cnVjdE5vdy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZW5kT2ZUb21vcnJvd30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGVuZE9mVG9tb3Jyb3dcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBlbmQgb2YgdG9tb3Jyb3cuXG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBlbmQgb2YgdG9tb3Jyb3cuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBlbmQgb2YgdG9tb3Jyb3dcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgNiBPY3RvYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBlbmRPZlRvbW9ycm93KClcbiAqIC8vPT4gVHVlIE9jdCA3IDIwMTQgMjM6NTk6NTkuOTk5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRPZlRvbW9ycm93KG9wdGlvbnMpIHtcbiAgY29uc3Qgbm93ID0gY29uc3RydWN0Tm93KG9wdGlvbnM/LmluKTtcbiAgY29uc3QgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aCA9IG5vdy5nZXRNb250aCgpO1xuICBjb25zdCBkYXkgPSBub3cuZ2V0RGF0ZSgpO1xuXG4gIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pO1xuICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXkgKyAxKTtcbiAgZGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICByZXR1cm4gb3B0aW9ucz8uaW4gPyBvcHRpb25zLmluKGRhdGUpIDogZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlbmRPZlRvbW9ycm93O1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3ROb3cgfSBmcm9tIFwiLi9jb25zdHJ1Y3ROb3cuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGVuZE9mWWVzdGVyZGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZW5kT2ZZZXN0ZXJkYXlcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBlbmQgb2YgeWVzdGVyZGF5LlxuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZW5kIG9mIHllc3RlcmRheS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHJldHVybnMgVGhlIGVuZCBvZiB5ZXN0ZXJkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgNiBPY3RvYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBlbmRPZlllc3RlcmRheSgpXG4gKiAvLz0+IFN1biBPY3QgNSAyMDE0IDIzOjU5OjU5Ljk5OVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5kT2ZZZXN0ZXJkYXkob3B0aW9ucykge1xuICBjb25zdCBub3cgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pO1xuICBjb25zdCBkYXRlID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiwgMCk7XG4gIGRhdGUuc2V0RnVsbFllYXIobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpIC0gMSk7XG4gIGRhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZW5kT2ZZZXN0ZXJkYXk7XG4iLCAiY29uc3QgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBvbmU6IFwibGVzcyB0aGFuIGEgc2Vjb25kXCIsXG4gICAgb3RoZXI6IFwibGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzXCIsXG4gIH0sXG5cbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6IFwiMSBzZWNvbmRcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gc2Vjb25kc1wiLFxuICB9LFxuXG4gIGhhbGZBTWludXRlOiBcImhhbGYgYSBtaW51dGVcIixcblxuICBsZXNzVGhhblhNaW51dGVzOiB7XG4gICAgb25lOiBcImxlc3MgdGhhbiBhIG1pbnV0ZVwiLFxuICAgIG90aGVyOiBcImxlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlc1wiLFxuICB9LFxuXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiBcIjEgbWludXRlXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IG1pbnV0ZXNcIixcbiAgfSxcblxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogXCJhYm91dCAxIGhvdXJcIixcbiAgICBvdGhlcjogXCJhYm91dCB7e2NvdW50fX0gaG91cnNcIixcbiAgfSxcblxuICB4SG91cnM6IHtcbiAgICBvbmU6IFwiMSBob3VyXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IGhvdXJzXCIsXG4gIH0sXG5cbiAgeERheXM6IHtcbiAgICBvbmU6IFwiMSBkYXlcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gZGF5c1wiLFxuICB9LFxuXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiBcImFib3V0IDEgd2Vla1wiLFxuICAgIG90aGVyOiBcImFib3V0IHt7Y291bnR9fSB3ZWVrc1wiLFxuICB9LFxuXG4gIHhXZWVrczoge1xuICAgIG9uZTogXCIxIHdlZWtcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gd2Vla3NcIixcbiAgfSxcblxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6IFwiYWJvdXQgMSBtb250aFwiLFxuICAgIG90aGVyOiBcImFib3V0IHt7Y291bnR9fSBtb250aHNcIixcbiAgfSxcblxuICB4TW9udGhzOiB7XG4gICAgb25lOiBcIjEgbW9udGhcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gbW9udGhzXCIsXG4gIH0sXG5cbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBvbmU6IFwiYWJvdXQgMSB5ZWFyXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG5cbiAgeFllYXJzOiB7XG4gICAgb25lOiBcIjEgeWVhclwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSB5ZWFyc1wiLFxuICB9LFxuXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6IFwib3ZlciAxIHllYXJcIixcbiAgICBvdGhlcjogXCJvdmVyIHt7Y291bnR9fSB5ZWFyc1wiLFxuICB9LFxuXG4gIGFsbW9zdFhZZWFyczoge1xuICAgIG9uZTogXCJhbG1vc3QgMSB5ZWFyXCIsXG4gICAgb3RoZXI6IFwiYWxtb3N0IHt7Y291bnR9fSB5ZWFyc1wiLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdERpc3RhbmNlID0gKHRva2VuLCBjb3VudCwgb3B0aW9ucykgPT4ge1xuICBsZXQgcmVzdWx0O1xuXG4gIGNvbnN0IHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWU7XG4gIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm9uZTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm90aGVyLnJlcGxhY2UoXCJ7e2NvdW50fX1cIiwgY291bnQudG9TdHJpbmcoKSk7XG4gIH1cblxuICBpZiAob3B0aW9ucz8uYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gXCJpbiBcIiArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIFwiIGFnb1wiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgImV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1hdExvbmdGbihhcmdzKSB7XG4gIHJldHVybiAob3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgLy8gVE9ETzogUmVtb3ZlIFN0cmluZygpXG4gICAgY29uc3Qgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgY29uc3QgZm9ybWF0ID0gYXJncy5mb3JtYXRzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHNbYXJncy5kZWZhdWx0V2lkdGhdO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgYnVpbGRGb3JtYXRMb25nRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZEZvcm1hdExvbmdGbi5qc1wiO1xuXG5jb25zdCBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJFRUVFLCBNTU1NIGRvLCB5XCIsXG4gIGxvbmc6IFwiTU1NTSBkbywgeVwiLFxuICBtZWRpdW06IFwiTU1NIGQsIHlcIixcbiAgc2hvcnQ6IFwiTU0vZGQveXl5eVwiLFxufTtcblxuY29uc3QgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwiaDptbTpzcyBhIHp6enpcIixcbiAgbG9uZzogXCJoOm1tOnNzIGEgelwiLFxuICBtZWRpdW06IFwiaDptbTpzcyBhXCIsXG4gIHNob3J0OiBcImg6bW0gYVwiLFxufTtcblxuY29uc3QgZGF0ZVRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbG9uZzogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIG1lZGl1bTogXCJ7e2RhdGV9fSwge3t0aW1lfX1cIixcbiAgc2hvcnQ6IFwie3tkYXRlfX0sIHt7dGltZX19XCIsXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCIsXG4gIH0pLFxuXG4gIHRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiB0aW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiLFxuICB9KSxcblxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiLFxuICB9KSxcbn07XG4iLCAiY29uc3QgZm9ybWF0UmVsYXRpdmVMb2NhbGUgPSB7XG4gIGxhc3RXZWVrOiBcIidsYXN0JyBlZWVlICdhdCcgcFwiLFxuICB5ZXN0ZXJkYXk6IFwiJ3llc3RlcmRheSBhdCcgcFwiLFxuICB0b2RheTogXCIndG9kYXkgYXQnIHBcIixcbiAgdG9tb3Jyb3c6IFwiJ3RvbW9ycm93IGF0JyBwXCIsXG4gIG5leHRXZWVrOiBcImVlZWUgJ2F0JyBwXCIsXG4gIG90aGVyOiBcIlBcIixcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRSZWxhdGl2ZSA9ICh0b2tlbiwgX2RhdGUsIF9iYXNlRGF0ZSwgX29wdGlvbnMpID0+XG4gIGZvcm1hdFJlbGF0aXZlTG9jYWxlW3Rva2VuXTtcbiIsICIvKipcbiAqIFRoZSBsb2NhbGl6ZSBmdW5jdGlvbiBhcmd1bWVudCBjYWxsYmFjayB3aGljaCBhbGxvd3MgdG8gY29udmVydCByYXcgdmFsdWUgdG9cbiAqIHRoZSBhY3R1YWwgdHlwZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY29udmVydFxuICpcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgdmFsdWVcbiAqL1xuXG4vKipcbiAqIFRoZSBtYXAgb2YgbG9jYWxpemVkIHZhbHVlcyBmb3IgZWFjaCB3aWR0aC5cbiAqL1xuXG4vKipcbiAqIFRoZSBpbmRleCB0eXBlIG9mIHRoZSBsb2NhbGUgdW5pdCB2YWx1ZS4gSXQgdHlwZXMgY29udmVyc2lvbiBvZiB1bml0cyBvZlxuICogdmFsdWVzIHRoYXQgZG9uJ3Qgc3RhcnQgYXQgMCAoaS5lLiBxdWFydGVycykuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgdW5pdCB2YWx1ZSB0byB0aGUgdHVwbGUgb2YgdmFsdWVzLlxuICovXG5cbi8qKlxuICogVGhlIHR1cGxlIG9mIGxvY2FsaXplZCBlcmEgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIEJDLFxuICogdGhlIHNlY29uZCBlbGVtZW50IHJlcHJlc2VudHMgQUQuXG4gKi9cblxuLyoqXG4gKiBUaGUgdHVwbGUgb2YgbG9jYWxpemVkIHF1YXJ0ZXIgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIFExLlxuICovXG5cbi8qKlxuICogVGhlIHR1cGxlIG9mIGxvY2FsaXplZCBkYXkgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIFN1bmRheS5cbiAqL1xuXG4vKipcbiAqIFRoZSB0dXBsZSBvZiBsb2NhbGl6ZWQgbW9udGggdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIEphbnVhcnkuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogXCJzdGFuZGFsb25lXCI7XG5cbiAgICBsZXQgdmFsdWVzQXJyYXk7XG4gICAgaWYgKGNvbnRleHQgPT09IFwiZm9ybWF0dGluZ1wiICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgY29uc3Qgd2lkdGggPSBvcHRpb25zPy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcblxuICAgICAgdmFsdWVzQXJyYXkgPVxuICAgICAgICBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucz8ud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcblxuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1t3aWR0aF0gfHwgYXJncy52YWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufVxuIiwgImltcG9ydCB7IGJ1aWxkTG9jYWxpemVGbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi5qc1wiO1xuXG5jb25zdCBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiQlwiLCBcIkFcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJCQ1wiLCBcIkFEXCJdLFxuICB3aWRlOiBbXCJCZWZvcmUgQ2hyaXN0XCIsIFwiQW5ubyBEb21pbmlcIl0sXG59O1xuXG5jb25zdCBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJRMVwiLCBcIlEyXCIsIFwiUTNcIiwgXCJRNFwiXSxcbiAgd2lkZTogW1wiMXN0IHF1YXJ0ZXJcIiwgXCIybmQgcXVhcnRlclwiLCBcIjNyZCBxdWFydGVyXCIsIFwiNHRoIHF1YXJ0ZXJcIl0sXG59O1xuXG4vLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG5jb25zdCBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbXCJKXCIsIFwiRlwiLCBcIk1cIiwgXCJBXCIsIFwiTVwiLCBcIkpcIiwgXCJKXCIsIFwiQVwiLCBcIlNcIiwgXCJPXCIsIFwiTlwiLCBcIkRcIl0sXG4gIGFiYnJldmlhdGVkOiBbXG4gICAgXCJKYW5cIixcbiAgICBcIkZlYlwiLFxuICAgIFwiTWFyXCIsXG4gICAgXCJBcHJcIixcbiAgICBcIk1heVwiLFxuICAgIFwiSnVuXCIsXG4gICAgXCJKdWxcIixcbiAgICBcIkF1Z1wiLFxuICAgIFwiU2VwXCIsXG4gICAgXCJPY3RcIixcbiAgICBcIk5vdlwiLFxuICAgIFwiRGVjXCIsXG4gIF0sXG5cbiAgd2lkZTogW1xuICAgIFwiSmFudWFyeVwiLFxuICAgIFwiRmVicnVhcnlcIixcbiAgICBcIk1hcmNoXCIsXG4gICAgXCJBcHJpbFwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5lXCIsXG4gICAgXCJKdWx5XCIsXG4gICAgXCJBdWd1c3RcIixcbiAgICBcIlNlcHRlbWJlclwiLFxuICAgIFwiT2N0b2JlclwiLFxuICAgIFwiTm92ZW1iZXJcIixcbiAgICBcIkRlY2VtYmVyXCIsXG4gIF0sXG59O1xuXG5jb25zdCBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiU1wiLCBcIk1cIiwgXCJUXCIsIFwiV1wiLCBcIlRcIiwgXCJGXCIsIFwiU1wiXSxcbiAgc2hvcnQ6IFtcIlN1XCIsIFwiTW9cIiwgXCJUdVwiLCBcIldlXCIsIFwiVGhcIiwgXCJGclwiLCBcIlNhXCJdLFxuICBhYmJyZXZpYXRlZDogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICB3aWRlOiBbXG4gICAgXCJTdW5kYXlcIixcbiAgICBcIk1vbmRheVwiLFxuICAgIFwiVHVlc2RheVwiLFxuICAgIFwiV2VkbmVzZGF5XCIsXG4gICAgXCJUaHVyc2RheVwiLFxuICAgIFwiRnJpZGF5XCIsXG4gICAgXCJTYXR1cmRheVwiLFxuICBdLFxufTtcblxuY29uc3QgZGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCJhXCIsXG4gICAgcG06IFwicFwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pXCIsXG4gICAgbm9vbjogXCJuXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06IFwiQU1cIixcbiAgICBwbTogXCJQTVwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogXCJhLm0uXCIsXG4gICAgcG06IFwicC5tLlwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG59O1xuXG5jb25zdCBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCJhXCIsXG4gICAgcG06IFwicFwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pXCIsXG4gICAgbm9vbjogXCJuXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06IFwiQU1cIixcbiAgICBwbTogXCJQTVwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogXCJhLm0uXCIsXG4gICAgcG06IFwicC5tLlwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG59O1xuXG5jb25zdCBvcmRpbmFsTnVtYmVyID0gKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykgPT4ge1xuICBjb25zdCBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgY29uc3QgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuICBpZiAocmVtMTAwID4gMjAgfHwgcmVtMTAwIDwgMTApIHtcbiAgICBzd2l0Y2ggKHJlbTEwMCAlIDEwKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcInN0XCI7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcIm5kXCI7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcInJkXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW1iZXIgKyBcInRoXCI7XG59O1xuXG5leHBvcnQgY29uc3QgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXIsXG5cbiAgZXJhOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZXJhVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gICAgYXJndW1lbnRDYWxsYmFjazogKHF1YXJ0ZXIpID0+IHF1YXJ0ZXIgLSAxLFxuICB9KSxcblxuICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICB9KSxcblxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6IFwid2lkZVwiLFxuICB9KSxcbn07XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hGbihhcmdzKSB7XG4gIHJldHVybiAoc3RyaW5nLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnMud2lkdGg7XG5cbiAgICBjb25zdCBtYXRjaFBhdHRlcm4gPVxuICAgICAgKHdpZHRoICYmIGFyZ3MubWF0Y2hQYXR0ZXJuc1t3aWR0aF0pIHx8XG4gICAgICBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgY29uc3QgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2gobWF0Y2hQYXR0ZXJuKTtcblxuICAgIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG5cbiAgICBjb25zdCBwYXJzZVBhdHRlcm5zID1cbiAgICAgICh3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdKSB8fFxuICAgICAgYXJncy5wYXJzZVBhdHRlcm5zW2FyZ3MuZGVmYXVsdFBhcnNlV2lkdGhdO1xuXG4gICAgY29uc3Qga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKVxuICAgICAgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSlcbiAgICAgIDogLy8gW1RPRE9dIC0tIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGVcbiAgICAgICAgZmluZEtleShwYXJzZVBhdHRlcm5zLCAocGF0dGVybikgPT4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpKTtcblxuICAgIGxldCB2YWx1ZTtcblxuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2tcbiAgICAgID8gLy8gW1RPRE9dIC0tIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGVcbiAgICAgICAgb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKVxuICAgICAgOiB2YWx1ZTtcblxuICAgIGNvbnN0IHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuXG4gICAgcmV0dXJuIHsgdmFsdWUsIHJlc3QgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmXG4gICAgICBwcmVkaWNhdGUob2JqZWN0W2tleV0pXG4gICAgKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSkge1xuICBmb3IgKGxldCBrZXkgPSAwOyBrZXkgPCBhcnJheS5sZW5ndGg7IGtleSsrKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7XG4gIHJldHVybiAoc3RyaW5nLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuXG4gICAgY29uc3QgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIGxldCB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFja1xuICAgICAgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pXG4gICAgICA6IHBhcnNlUmVzdWx0WzBdO1xuXG4gICAgLy8gW1RPRE9dIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGVcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIGNvbnN0IHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuXG4gICAgcmV0dXJuIHsgdmFsdWUsIHJlc3QgfTtcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBidWlsZE1hdGNoRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4uanNcIjtcbmltcG9ydCB7IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuLmpzXCI7XG5cbmNvbnN0IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcXGQrKSh0aHxzdHxuZHxyZCk/L2k7XG5jb25zdCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcblxuY29uc3QgbWF0Y2hFcmFQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihifGEpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihiXFwuP1xccz9jXFwuP3xiXFwuP1xccz9jXFwuP1xccz9lXFwuP3xhXFwuP1xccz9kXFwuP3xjXFwuP1xccz9lXFwuPykvaSxcbiAgd2lkZTogL14oYmVmb3JlIGNocmlzdHxiZWZvcmUgY29tbW9uIGVyYXxhbm5vIGRvbWluaXxjb21tb24gZXJhKS9pLFxufTtcbmNvbnN0IHBhcnNlRXJhUGF0dGVybnMgPSB7XG4gIGFueTogWy9eYi9pLCAvXihhfGMpL2ldLFxufTtcblxuY29uc3QgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaSxcbn07XG5jb25zdCBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV0sXG59O1xuXG5jb25zdCBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxcbn07XG5jb25zdCBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogW1xuICAgIC9eai9pLFxuICAgIC9eZi9pLFxuICAgIC9ebS9pLFxuICAgIC9eYS9pLFxuICAgIC9ebS9pLFxuICAgIC9eai9pLFxuICAgIC9eai9pLFxuICAgIC9eYS9pLFxuICAgIC9ecy9pLFxuICAgIC9eby9pLFxuICAgIC9ebi9pLFxuICAgIC9eZC9pLFxuICBdLFxuXG4gIGFueTogW1xuICAgIC9eamEvaSxcbiAgICAvXmYvaSxcbiAgICAvXm1hci9pLFxuICAgIC9eYXAvaSxcbiAgICAvXm1heS9pLFxuICAgIC9eanVuL2ksXG4gICAgL15qdWwvaSxcbiAgICAvXmF1L2ksXG4gICAgL15zL2ksXG4gICAgL15vL2ksXG4gICAgL15uL2ksXG4gICAgL15kL2ksXG4gIF0sXG59O1xuXG5jb25zdCBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pLFxufTtcbmNvbnN0IHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXSxcbn07XG5cbmNvbnN0IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxufTtcbmNvbnN0IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiAodmFsdWUpID0+IHBhcnNlSW50KHZhbHVlLCAxMCksXG4gIH0pLFxuXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZUVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcblxuICBxdWFydGVyOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgICB2YWx1ZUNhbGxiYWNrOiAoaW5kZXgpID0+IGluZGV4ICsgMSxcbiAgfSksXG5cbiAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxuXG4gIGRheTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcblxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJhbnlcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcbn07XG4iLCAiaW1wb3J0IHsgZm9ybWF0RGlzdGFuY2UgfSBmcm9tIFwiLi9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlLmpzXCI7XG5pbXBvcnQgeyBmb3JtYXRMb25nIH0gZnJvbSBcIi4vZW4tVVMvX2xpYi9mb3JtYXRMb25nLmpzXCI7XG5pbXBvcnQgeyBmb3JtYXRSZWxhdGl2ZSB9IGZyb20gXCIuL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUuanNcIjtcbmltcG9ydCB7IGxvY2FsaXplIH0gZnJvbSBcIi4vZW4tVVMvX2xpYi9sb2NhbGl6ZS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2ggfSBmcm9tIFwiLi9lbi1VUy9fbGliL21hdGNoLmpzXCI7XG5cbi8qKlxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF0oaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnApXG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3MpXG4gKi9cbmV4cG9ydCBjb25zdCBlblVTID0ge1xuICBjb2RlOiBcImVuLVVTXCIsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxLFxuICB9LFxufTtcblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlblVTO1xuIiwgImV4cG9ydCB7IGVuVVMgYXMgZGVmYXVsdExvY2FsZSB9IGZyb20gXCIuLi9sb2NhbGUvZW4tVVMuanNcIjtcbiIsICJpbXBvcnQgeyBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZZZWFyIH0gZnJvbSBcIi4vc3RhcnRPZlllYXIuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0RGF5T2ZZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0RGF5T2ZZZWFyXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgZGF5IG9mIHRoZSB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBkYXkgb2YgdGhlIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXkgb2YgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCBkYXkgb2YgdGhlIHllYXIgaXMgMiBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBnZXREYXlPZlllYXIobmV3IERhdGUoMjAxNCwgNiwgMikpXG4gKiAvLz0+IDE4M1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKF9kYXRlLCBzdGFydE9mWWVhcihfZGF0ZSkpO1xuICBjb25zdCBkYXlPZlllYXIgPSBkaWZmICsgMTtcbiAgcmV0dXJuIGRheU9mWWVhcjtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXREYXlPZlllYXI7XG4iLCAiaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5XZWVrIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mSVNPV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mSVNPV2Vla1llYXIgfSBmcm9tIFwiLi9zdGFydE9mSVNPV2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0SVNPV2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldElTT1dlZWtcbiAqIEBjYXRlZ29yeSBJU08gV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIElTTyB3ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBJU08gd2VlayBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBJU08gd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBJU08td2VlayBudW1iZXJpbmcgeWVhciBpcyAyIEphbnVhcnkgMjAwNT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldElTT1dlZWsobmV3IERhdGUoMjAwNSwgMCwgMikpXG4gKiAvLz0+IDUzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJU09XZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkaWZmID0gK3N0YXJ0T2ZJU09XZWVrKF9kYXRlKSAtICtzdGFydE9mSVNPV2Vla1llYXIoX2RhdGUpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2Ygd2Vla3MgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBiZWNhdXNlIHRoZSBudW1iZXIgb2ZcbiAgLy8gbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnQgKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2ZcbiAgLy8gdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KS5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldElTT1dlZWs7XG4iLCAiaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRPcHRpb25zLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZldlZWsgfSBmcm9tIFwiLi9zdGFydE9mV2Vlay5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXRXZWVrWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldFdlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgZXhhY3QgY2FsY3VsYXRpb24gZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mXG4gKiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gICh3aGljaCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaylcbiAqIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgICh3aGljaCBpcyB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzIGFsd2F5cyBpblxuICogdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIpXG4gKlxuICogV2VlayBudW1iZXJpbmc6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlZWsjVGhlX0lTT193ZWVrX2RhdGVfc3lzdGVtXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMjYgRGVjZW1iZXIgMjAwNCB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmdzP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2Vla1llYXIobmV3IERhdGUoMjAwNCwgMTEsIDI2KSlcbiAqIC8vPT4gMjAwNVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDI2IERlY2VtYmVyIDIwMDQgaWYgd2VlayBzdGFydHMgb24gU2F0dXJkYXk/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRXZWVrWWVhcihuZXcgRGF0ZSgyMDA0LCAxMSwgMjYpLCB7IHdlZWtTdGFydHNPbjogNiB9KVxuICogLy89PiAyMDA0XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMjYgRGVjZW1iZXIgMjAwNCBpZiB0aGUgZmlyc3Qgd2VlayBjb250YWlucyA0IEphbnVhcnk/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRXZWVrWWVhcihuZXcgRGF0ZSgyMDA0LCAxMSwgMjYpLCB7IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNCB9KVxuICogLy89PiAyMDA0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPVxuICAgIG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICAxO1xuXG4gIGNvbnN0IGZpcnN0V2Vla09mTmV4dFllYXIgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcblxuICBjb25zdCBmaXJzdFdlZWtPZlRoaXNZZWFyID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mV2VlayhmaXJzdFdlZWtPZlRoaXNZZWFyLCBvcHRpb25zKTtcblxuICBpZiAoK19kYXRlID49ICtzdGFydE9mTmV4dFllYXIpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoK19kYXRlID49ICtzdGFydE9mVGhpc1llYXIpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRXZWVrWWVhcjtcbiIsICJpbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBnZXRXZWVrWWVhciB9IGZyb20gXCIuL2dldFdlZWtZZWFyLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mV2Vla1llYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mV2Vla1llYXJcbiAqIEBjYXRlZ29yeSBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogVGhlIGV4YWN0IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZlxuICogYG9wdGlvbnMud2Vla1N0YXJ0c09uYCAod2hpY2ggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWspXG4gKiBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAod2hpY2ggaXMgdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW5cbiAqIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyKVxuICpcbiAqIFdlZWsgbnVtYmVyaW5nOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWVrI1RoZV9JU09fd2Vla19kYXRlX3N5c3RlbVxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhbiBhIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIDIgSnVseSAyMDA1IHdpdGggZGVmYXVsdCBzZXR0aW5nczpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSlcbiAqIC8vPT4gU3VuIERlYyAyNiAyMDA0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIDIgSnVseSAyMDA1XG4gKiAvLyBpZiBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB3ZWVrXG4gKiAvLyBhbmQgNCBKYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhcjpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSwge1xuICogICB3ZWVrU3RhcnRzT246IDEsXG4gKiAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNFxuICogfSlcbiAqIC8vPT4gTW9uIEphbiAwMyAyMDA1IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9XG4gICAgb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIDE7XG5cbiAgY29uc3QgeWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApO1xuICBmaXJzdFdlZWsuc2V0RnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBfZGF0ZSA9IHN0YXJ0T2ZXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mV2Vla1llYXI7XG4iLCAiaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5XZWVrIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2Vla1llYXIgfSBmcm9tIFwiLi9zdGFydE9mV2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0V2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldFdlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbG9jYWwgd2VlayBpbmRleCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbG9jYWwgd2VlayBpbmRleCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBleGFjdCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2ZcbiAqIGBvcHRpb25zLndlZWtTdGFydHNPbmAgKHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrKVxuICogYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKHdoaWNoIGlzIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXMgYWx3YXlzIGluXG4gKiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhcilcbiAqXG4gKiBXZWVrIG51bWJlcmluZzogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VlayNUaGVfSVNPX3dlZWtfZGF0ZV9zeXN0ZW1cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBsb2NhbCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1IHdpdGggZGVmYXVsdCBvcHRpb25zP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2VlayhuZXcgRGF0ZSgyMDA1LCAwLCAyKSlcbiAqIC8vPT4gMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBsb2NhbCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1LFxuICogLy8gaWYgTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssXG4gKiAvLyBhbmQgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIgYWx3YXlzIGNvbnRhaW5zIDQgSmFudWFyeT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWsobmV3IERhdGUoMjAwNSwgMCwgMiksIHtcbiAqICAgd2Vla1N0YXJ0c09uOiAxLFxuICogICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDRcbiAqIH0pXG4gKiAvLz0+IDUzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkaWZmID0gK3N0YXJ0T2ZXZWVrKF9kYXRlLCBvcHRpb25zKSAtICtzdGFydE9mV2Vla1llYXIoX2RhdGUsIG9wdGlvbnMpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2Ygd2Vla3MgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBiZWNhdXNlIHRoZSBudW1iZXIgb2ZcbiAgLy8gbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnQgKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2ZcbiAgLy8gdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KS5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldFdlZWs7XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIsIHRhcmdldExlbmd0aCkge1xuICBjb25zdCBzaWduID0gbnVtYmVyIDwgMCA/IFwiLVwiIDogXCJcIjtcbiAgY29uc3Qgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpLnBhZFN0YXJ0KHRhcmdldExlbmd0aCwgXCIwXCIpO1xuICByZXR1cm4gc2lnbiArIG91dHB1dDtcbn1cbiIsICJpbXBvcnQgeyBhZGRMZWFkaW5nWmVyb3MgfSBmcm9tIFwiLi4vYWRkTGVhZGluZ1plcm9zLmpzXCI7XG5cbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG5cbmV4cG9ydCBjb25zdCBsaWdodEZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuXG4gICAgY29uc3Qgc2lnbmVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIGNvbnN0IHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRva2VuID09PSBcInl5XCIgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBNb250aFxuICBNKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSBcIk1cIiA/IFN0cmluZyhtb250aCArIDEpIDogYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gIH0sXG5cbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldERhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBBTSBvciBQTVxuICBhKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRIb3VycygpIC8gMTIgPj0gMSA/IFwicG1cIiA6IFwiYW1cIjtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJhXCI6XG4gICAgICBjYXNlIFwiYWFcIjpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY2FzZSBcImFhYVwiOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgICAgY2FzZSBcImFhYWFhXCI6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlIFwiYWFhYVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gXCJhbVwiID8gXCJhLm0uXCIgOiBcInAubS5cIjtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSG91ciBbMS0xMl1cbiAgaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gSG91ciBbMC0yM11cbiAgSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIE1pbnV0ZVxuICBtKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldE1pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBTZWNvbmRcbiAgcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCBudW1iZXJPZkRpZ2l0cyA9IHRva2VuLmxlbmd0aDtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpO1xuICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYyhcbiAgICAgIG1pbGxpc2Vjb25kcyAqIE1hdGgucG93KDEwLCBudW1iZXJPZkRpZ2l0cyAtIDMpLFxuICAgICk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbn07XG4iLCAiaW1wb3J0IHsgZ2V0RGF5T2ZZZWFyIH0gZnJvbSBcIi4uLy4uL2dldERheU9mWWVhci5qc1wiO1xuaW1wb3J0IHsgZ2V0SVNPV2VlayB9IGZyb20gXCIuLi8uLi9nZXRJU09XZWVrLmpzXCI7XG5pbXBvcnQgeyBnZXRJU09XZWVrWWVhciB9IGZyb20gXCIuLi8uLi9nZXRJU09XZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgZ2V0V2VlayB9IGZyb20gXCIuLi8uLi9nZXRXZWVrLmpzXCI7XG5pbXBvcnQgeyBnZXRXZWVrWWVhciB9IGZyb20gXCIuLi8uLi9nZXRXZWVrWWVhci5qc1wiO1xuXG5pbXBvcnQgeyBhZGRMZWFkaW5nWmVyb3MgfSBmcm9tIFwiLi4vYWRkTGVhZGluZ1plcm9zLmpzXCI7XG5pbXBvcnQgeyBsaWdodEZvcm1hdHRlcnMgfSBmcm9tIFwiLi9saWdodEZvcm1hdHRlcnMuanNcIjtcblxuY29uc3QgZGF5UGVyaW9kRW51bSA9IHtcbiAgYW06IFwiYW1cIixcbiAgcG06IFwicG1cIixcbiAgbWlkbmlnaHQ6IFwibWlkbmlnaHRcIixcbiAgbm9vbjogXCJub29uXCIsXG4gIG1vcm5pbmc6IFwibW9ybmluZ1wiLFxuICBhZnRlcm5vb246IFwiYWZ0ZXJub29uXCIsXG4gIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICBuaWdodDogXCJuaWdodFwiLFxufTtcblxuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgTWlsbGlzZWNvbmRzIGluIGRheSAgICAgICAgICAgIHxcbiAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAqIHwgIGMgIHwgU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsgIHwgIEMqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGYgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEYqIHwgRGF5IG9mIHdlZWsgaW4gbW9udGggICAgICAgICAgIHxcbiAqIHwgIGcqIHwgTW9kaWZpZWQgSnVsaWFuIGRheSAgICAgICAgICAgIHwgIEcgIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGkhIHwgSVNPIGRheSBvZiB3ZWVrICAgICAgICAgICAgICAgIHwgIEkhIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgIHxcbiAqIHwgIGoqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHwgIEoqIHwgTG9jYWxpemVkIGhvdXIgdy9vIGRheSBwZXJpb2QgIHxcbiAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGwqIHwgKGRlcHJlY2F0ZWQpICAgICAgICAgICAgICAgICAgIHwgIEwgIHwgU3RhbmQtYWxvbmUgbW9udGggICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG8hIHwgT3JkaW5hbCBudW1iZXIgbW9kaWZpZXIgICAgICAgIHwgIE8gIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHAhIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgIHwgIFAhIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgIHxcbiAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHIqIHwgUmVsYXRlZCBHcmVnb3JpYW4geWVhciAgICAgICAgIHwgIFIhIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAqIHwgIHUgIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgIHwgIFUqIHwgQ3ljbGljIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHYqIHwgVGltZXpvbmUgKGdlbmVyaWMgbm9uLWxvY2F0LikgIHwgIFYqIHwgVGltZXpvbmUgKGxvY2F0aW9uKSAgICAgICAgICAgIHxcbiAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHggIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgIHwgIFggIHwgVGltZXpvbmUgKElTTy04NjAxKSAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgIHxcbiAqIHwgIHogIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgISBhcmUgbm9uLXN0YW5kYXJkLCBidXQgaW1wbGVtZW50ZWQgYnkgZGF0ZS1mbnM6XG4gKiAtIGBvYCBtb2RpZmllcyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gdHVybiBpdCBpbnRvIGFuIG9yZGluYWwgKHNlZSBgZm9ybWF0YCBkb2NzKVxuICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICogICBpLmUuIDcgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gKiAtIGBJYCBpcyBJU08gd2VlayBvZiB5ZWFyLCBhcyBvcHBvc2VkIHRvIGB3YCB3aGljaCBpcyBsb2NhbCB3ZWVrIG9mIHllYXIuXG4gKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqICAgYFJgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSWAgYW5kIGBpYFxuICogICBmb3IgdW5pdmVyc2FsIElTTyB3ZWVrLW51bWJlcmluZyBkYXRlLCB3aGVyZWFzXG4gKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAqICAgZm9yIHdlZWstbnVtYmVyaW5nIGRhdGUgc3BlY2lmaWMgdG8gdGhlIGxvY2FsZS5cbiAqIC0gYFBgIGlzIGxvbmcgbG9jYWxpemVkIGRhdGUgZm9ybWF0XG4gKiAtIGBwYCBpcyBsb25nIGxvY2FsaXplZCB0aW1lIGZvcm1hdFxuICovXG5cbmV4cG9ydCBjb25zdCBmb3JtYXR0ZXJzID0ge1xuICAvLyBFcmFcbiAgRzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGVyYSA9IGRhdGUuZ2V0RnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgXCJHXCI6XG4gICAgICBjYXNlIFwiR0dcIjpcbiAgICAgIGNhc2UgXCJHR0dcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHsgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIiB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgXCJHR0dHR1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwgeyB3aWR0aDogXCJuYXJyb3dcIiB9KTtcbiAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0XG4gICAgICBjYXNlIFwiR0dHR1wiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHsgd2lkdGg6IFwid2lkZVwiIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gXCJ5b1wiKSB7XG4gICAgICBjb25zdCBzaWduZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIGNvbnN0IHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHllYXIsIHsgdW5pdDogXCJ5ZWFyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzaWduZWRXZWVrWWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgY29uc3Qgd2Vla1llYXIgPSBzaWduZWRXZWVrWWVhciA+IDAgPyBzaWduZWRXZWVrWWVhciA6IDEgLSBzaWduZWRXZWVrWWVhcjtcblxuICAgIC8vIFR3byBkaWdpdCB5ZWFyXG4gICAgaWYgKHRva2VuID09PSBcIllZXCIpIHtcbiAgICAgIGNvbnN0IHR3b0RpZ2l0WWVhciA9IHdlZWtZZWFyICUgMTAwO1xuICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0d29EaWdpdFllYXIsIDIpO1xuICAgIH1cblxuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSBcIllvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7IHVuaXQ6IFwieWVhclwiIH0pO1xuICAgIH1cblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIGNvbnN0IGlzb1dlZWtZZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSk7XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBFeHRlbmRlZCB5ZWFyLiBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZyB0aGUgeWVhciBvZiB0aGlzIGNhbGVuZGFyIHN5c3RlbS5cbiAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIGxvY2FsaXplcnMgYXJlIEIuQy4geWVhcnM6XG4gIC8vIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gIC8vIHwtLS0tLS18LS0tLS18LS0tLS18XG4gIC8vIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gIC8vIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gIC8vIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gIC8vIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAgLy8gd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkLlxuICB1OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBRdWFydGVyXG4gIFE6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldE1vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgXCJRXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSBcIlFRXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgXCJRb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7IHVuaXQ6IFwicXVhcnRlclwiIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgXCJRUVFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlIFwiUVFRUVFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlIFwiUVFRUVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0TW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlIFwicXFcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSBcInFvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHsgdW5pdDogXCJxdWFydGVyXCIgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSBcInFxcVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgXCJxcXFxcVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgXCJxcXFxXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJNXCI6XG4gICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgXCJNb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHsgdW5pdDogXCJtb250aFwiIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlIFwiTU1NTU1cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgXCJNTU1NXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHsgd2lkdGg6IFwid2lkZVwiLCBjb250ZXh0OiBcImZvcm1hdHRpbmdcIiB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gU3RhbmQtYWxvbmUgbW9udGhcbiAgTDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgXCJMXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuICAgICAgY2FzZSBcIkxMXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgXCJMb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHsgdW5pdDogXCJtb250aFwiIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlIFwiTExMXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlIFwiTExMTExcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHsgd2lkdGg6IFwid2lkZVwiLCBjb250ZXh0OiBcInN0YW5kYWxvbmVcIiB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB3ZWVrID0gZ2V0V2VlayhkYXRlLCBvcHRpb25zKTtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJ3b1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrLCB7IHVuaXQ6IFwid2Vla1wiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBpc29XZWVrID0gZ2V0SVNPV2VlayhkYXRlKTtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJJb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7IHVuaXQ6IFwid2Vla1wiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwiZG9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXREYXRlKCksIHsgdW5pdDogXCJkYXRlXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBEYXkgb2YgeWVhclxuICBEOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgZGF5T2ZZZWFyID0gZ2V0RGF5T2ZZZWFyKGRhdGUpO1xuXG4gICAgaWYgKHRva2VuID09PSBcIkRvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwgeyB1bml0OiBcImRheU9mWWVhclwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF5T2ZZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSBcIkVcIjpcbiAgICAgIGNhc2UgXCJFRVwiOlxuICAgICAgY2FzZSBcIkVFRVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSBcIkVFRUVFXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgXCJFRUVFRUVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIExvY2FsIGRheSBvZiB3ZWVrXG4gIGU6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpO1xuICAgIGNvbnN0IGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pXG4gICAgICBjYXNlIFwiZVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgXCJlZVwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSBcImVvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7IHVuaXQ6IFwiZGF5XCIgfSk7XG4gICAgICBjYXNlIFwiZWVlXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiZWVlZWVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcImVlZWVlZVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcImVlZWVcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWtcbiAgYzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgY29uc3QgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKVxuICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlIFwiY2NcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSBcImNvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7IHVuaXQ6IFwiZGF5XCIgfSk7XG4gICAgICBjYXNlIFwiY2NjXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiY2NjY2NcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcImNjY2NjY1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpO1xuICAgIGNvbnN0IGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMlxuICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcbiAgICAgIGNhc2UgXCJpaVwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSBcImlvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb0RheU9mV2VlaywgeyB1bml0OiBcImRheVwiIH0pO1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlIFwiaWlpXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiaWlpaWlcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcImlpaWlpaVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcImlpaWlcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/IFwicG1cIiA6IFwiYW1cIjtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJhXCI6XG4gICAgICBjYXNlIFwiYWFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJhYWFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplXG4gICAgICAgICAgLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSBcImFhYWFhXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImFhYWFcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gQU0sIFBNLCBtaWRuaWdodCwgbm9vblxuICBiOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgbGV0IGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPT09IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA9PT0gMCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5taWRuaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gXCJwbVwiIDogXCJhbVwiO1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJiXCI6XG4gICAgICBjYXNlIFwiYmJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJiYmJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplXG4gICAgICAgICAgLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSBcImJiYmJiXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImJiYmJcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgbGV0IGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPj0gMTcpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uZXZlbmluZztcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmFmdGVybm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDQpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubW9ybmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5uaWdodDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiQlwiOlxuICAgICAgY2FzZSBcIkJCXCI6XG4gICAgICBjYXNlIFwiQkJCXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiQkJCQkJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiQkJCQlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcImhvXCIpIHtcbiAgICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyO1xuICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcIkhvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0SG91cnMoKSwgeyB1bml0OiBcImhvdXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLkgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyO1xuXG4gICAgaWYgKHRva2VuID09PSBcIktvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6IFwiaG91clwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7XG5cbiAgICBpZiAodG9rZW4gPT09IFwia29cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gXCJtb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldE1pbnV0ZXMoKSwgeyB1bml0OiBcIm1pbnV0ZVwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMubShkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwic29cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRTZWNvbmRzKCksIHsgdW5pdDogXCJzZWNvbmRcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApXG4gIFg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBpZiAodGltZXpvbmVPZmZzZXQgPT09IDApIHtcbiAgICAgIHJldHVybiBcIlpcIjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYYFxuICAgICAgY2FzZSBcIlhYWFhcIjpcbiAgICAgIGNhc2UgXCJYWFwiOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSBcIlhYWFhYXCI6XG4gICAgICBjYXNlIFwiWFhYXCI6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpXG4gIHg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuICAgICAgY2FzZSBcInh4eHhcIjpcbiAgICAgIGNhc2UgXCJ4eFwiOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHh4YFxuICAgICAgY2FzZSBcInh4eHh4XCI6XG4gICAgICBjYXNlIFwieHh4XCI6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRpbWV6b25lIChHTVQpXG4gIE86IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSBcIk9cIjpcbiAgICAgIGNhc2UgXCJPT1wiOlxuICAgICAgY2FzZSBcIk9PT1wiOlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgXCJPT09PXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pXG4gIHo6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSBcInpcIjpcbiAgICAgIGNhc2UgXCJ6elwiOlxuICAgICAgY2FzZSBcInp6elwiOlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgXCJ6enp6XCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gTWF0aC50cnVuYygrZGF0ZSAvIDEwMDApO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKCtkYXRlLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxufTtcblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRlbGltaXRlciA9IFwiXCIpIHtcbiAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyBcIi1cIiA6IFwiK1wiO1xuICBjb25zdCBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICBjb25zdCBob3VycyA9IE1hdGgudHJ1bmMoYWJzT2Zmc2V0IC8gNjApO1xuICBjb25zdCBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGVsaW1pdGVyKSB7XG4gIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkge1xuICAgIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gXCItXCIgOiBcIitcIjtcbiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpO1xuICB9XG4gIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRlbGltaXRlcik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGVsaW1pdGVyID0gXCJcIikge1xuICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/IFwiLVwiIDogXCIrXCI7XG4gIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIGNvbnN0IGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzT2Zmc2V0IC8gNjApLCAyKTtcbiAgY29uc3QgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuIiwgImNvbnN0IGRhdGVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcpID0+IHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSBcIlBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJzaG9ydFwiIH0pO1xuICAgIGNhc2UgXCJQUFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7IHdpZHRoOiBcIm1lZGl1bVwiIH0pO1xuICAgIGNhc2UgXCJQUFBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJsb25nXCIgfSk7XG4gICAgY2FzZSBcIlBQUFBcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7IHdpZHRoOiBcImZ1bGxcIiB9KTtcbiAgfVxufTtcblxuY29uc3QgdGltZUxvbmdGb3JtYXR0ZXIgPSAocGF0dGVybiwgZm9ybWF0TG9uZykgPT4ge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlIFwicFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcInNob3J0XCIgfSk7XG4gICAgY2FzZSBcInBwXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHsgd2lkdGg6IFwibWVkaXVtXCIgfSk7XG4gICAgY2FzZSBcInBwcFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcImxvbmdcIiB9KTtcbiAgICBjYXNlIFwicHBwcFwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHsgd2lkdGg6IFwiZnVsbFwiIH0pO1xuICB9XG59O1xuXG5jb25zdCBkYXRlVGltZUxvbmdGb3JtYXR0ZXIgPSAocGF0dGVybiwgZm9ybWF0TG9uZykgPT4ge1xuICBjb25zdCBtYXRjaFJlc3VsdCA9IHBhdHRlcm4ubWF0Y2goLyhQKykocCspPy8pIHx8IFtdO1xuICBjb25zdCBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICBjb25zdCB0aW1lUGF0dGVybiA9IG1hdGNoUmVzdWx0WzJdO1xuXG4gIGlmICghdGltZVBhdHRlcm4pIHtcbiAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZyk7XG4gIH1cblxuICBsZXQgZGF0ZVRpbWVGb3JtYXQ7XG5cbiAgc3dpdGNoIChkYXRlUGF0dGVybikge1xuICAgIGNhc2UgXCJQXCI6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJzaG9ydFwiIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIlBQXCI6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJtZWRpdW1cIiB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFBcIjpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7IHdpZHRoOiBcImxvbmdcIiB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFBQXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7IHdpZHRoOiBcImZ1bGxcIiB9KTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0XG4gICAgLnJlcGxhY2UoXCJ7e2RhdGV9fVwiLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpXG4gICAgLnJlcGxhY2UoXCJ7e3RpbWV9fVwiLCB0aW1lTG9uZ0Zvcm1hdHRlcih0aW1lUGF0dGVybiwgZm9ybWF0TG9uZykpO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvbmdGb3JtYXR0ZXJzID0ge1xuICBwOiB0aW1lTG9uZ0Zvcm1hdHRlcixcbiAgUDogZGF0ZVRpbWVMb25nRm9ybWF0dGVyLFxufTtcbiIsICJjb25zdCBkYXlPZlllYXJUb2tlblJFID0gL15EKyQvO1xuY29uc3Qgd2Vla1llYXJUb2tlblJFID0gL15ZKyQvO1xuXG5jb25zdCB0aHJvd1Rva2VucyA9IFtcIkRcIiwgXCJERFwiLCBcIllZXCIsIFwiWVlZWVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIGRheU9mWWVhclRva2VuUkUudGVzdCh0b2tlbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHdlZWtZZWFyVG9rZW5SRS50ZXN0KHRva2VuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgY29uc3QgX21lc3NhZ2UgPSBtZXNzYWdlKHRva2VuLCBmb3JtYXQsIGlucHV0KTtcbiAgY29uc29sZS53YXJuKF9tZXNzYWdlKTtcbiAgaWYgKHRocm93VG9rZW5zLmluY2x1ZGVzKHRva2VuKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoX21lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiBtZXNzYWdlKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGNvbnN0IHN1YmplY3QgPSB0b2tlblswXSA9PT0gXCJZXCIgPyBcInllYXJzXCIgOiBcImRheXMgb2YgdGhlIG1vbnRoXCI7XG4gIHJldHVybiBgVXNlIFxcYCR7dG9rZW4udG9Mb3dlckNhc2UoKX1cXGAgaW5zdGVhZCBvZiBcXGAke3Rva2VufVxcYCAoaW4gXFxgJHtmb3JtYXR9XFxgKSBmb3IgZm9ybWF0dGluZyAke3N1YmplY3R9IHRvIHRoZSBpbnB1dCBcXGAke2lucHV0fVxcYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kYDtcbn1cbiIsICJpbXBvcnQgeyBkZWZhdWx0TG9jYWxlIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IGZvcm1hdHRlcnMgfSBmcm9tIFwiLi9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzLmpzXCI7XG5pbXBvcnQgeyBsb25nRm9ybWF0dGVycyB9IGZyb20gXCIuL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzXCI7XG5pbXBvcnQge1xuICBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuLFxuICBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4sXG4gIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IsXG59IGZyb20gXCIuL19saWIvcHJvdGVjdGVkVG9rZW5zLmpzXCI7XG5pbXBvcnQgeyBpc1ZhbGlkIH0gZnJvbSBcIi4vaXNWYWxpZC5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8vIFJleHBvcnRzIG9mIGludGVybmFsIGZvciBsaWJyYXJpZXMgdG8gdXNlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM2MzgjaXNzdWVjb21tZW50LTE4NzcwODI4NzRcbmV4cG9ydCB7IGZvcm1hdHRlcnMsIGxvbmdGb3JtYXR0ZXJzIH07XG5cbi8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xuY29uc3QgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9XG4gIC9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcXHcpXFwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuLy8gVGhpcyBSZWdFeHAgY2F0Y2hlcyBzeW1ib2xzIGVzY2FwZWQgYnkgcXVvdGVzLCBhbmQgYWxzb1xuLy8gc2VxdWVuY2VzIG9mIHN5bWJvbHMgUCwgcCwgYW5kIHRoZSBjb21iaW5hdGlvbnMgbGlrZSBgUFBQUFBQUHBwcHBwYFxuY29uc3QgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuY29uc3QgZXNjYXBlZFN0cmluZ1JlZ0V4cCA9IC9eJyhbXl0qPyknPyQvO1xuY29uc3QgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbmNvbnN0IHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuZXhwb3J0IHsgZm9ybWF0IGFzIGZvcm1hdERhdGUgfTtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdFxuICogQGFsaWFzIGZvcm1hdERhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl0oaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcilcbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJdKGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXIpKS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIGZvcm1hdCAtIFRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKlxuICogQHRocm93cyBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3MgYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgdXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KGRhdGUsIGZvcm1hdFN0ciwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9ucy5sb2NhbGUgPz8gZGVmYXVsdExvY2FsZTtcblxuICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPVxuICAgIG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICAxO1xuXG4gIGNvbnN0IHdlZWtTdGFydHNPbiA9XG4gICAgb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIDA7XG5cbiAgY29uc3Qgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcblxuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB0aW1lIHZhbHVlXCIpO1xuICB9XG5cbiAgbGV0IHBhcnRzID0gZm9ybWF0U3RyXG4gICAgLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKVxuICAgIC5tYXAoKHN1YnN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwicFwiIHx8IGZpcnN0Q2hhcmFjdGVyID09PSBcIlBcIikge1xuICAgICAgICBjb25zdCBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWJzdHJpbmc7XG4gICAgfSlcbiAgICAuam9pbihcIlwiKVxuICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKVxuICAgIC5tYXAoKHN1YnN0cmluZykgPT4ge1xuICAgICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgICAgaWYgKHN1YnN0cmluZyA9PT0gXCInJ1wiKSB7XG4gICAgICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogXCInXCIgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwiJ1wiKSB7XG4gICAgICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZykgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdKSB7XG4gICAgICAgIHJldHVybiB7IGlzVG9rZW46IHRydWUsIHZhbHVlOiBzdWJzdHJpbmcgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgICAgICBcIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgXCIgK1xuICAgICAgICAgICAgZmlyc3RDaGFyYWN0ZXIgK1xuICAgICAgICAgICAgXCJgXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogc3Vic3RyaW5nIH07XG4gICAgfSk7XG5cbiAgLy8gaW52b2tlIGxvY2FsaXplIHByZXByb2Nlc3NvciAob25seSBmb3IgZnJlbmNoIGxvY2FsZXMgYXQgdGhlIG1vbWVudClcbiAgaWYgKGxvY2FsZS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3IpIHtcbiAgICBwYXJ0cyA9IGxvY2FsZS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3Iob3JpZ2luYWxEYXRlLCBwYXJ0cyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXR0ZXJPcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSxcbiAgICB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlLFxuICB9O1xuXG4gIHJldHVybiBwYXJ0c1xuICAgIC5tYXAoKHBhcnQpID0+IHtcbiAgICAgIGlmICghcGFydC5pc1Rva2VuKSByZXR1cm4gcGFydC52YWx1ZTtcblxuICAgICAgY29uc3QgdG9rZW4gPSBwYXJ0LnZhbHVlO1xuXG4gICAgICBpZiAoXG4gICAgICAgICghb3B0aW9ucz8udXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zICYmXG4gICAgICAgICAgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSkgfHxcbiAgICAgICAgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zICYmXG4gICAgICAgICAgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikpXG4gICAgICApIHtcbiAgICAgICAgd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0U3RyLCBTdHJpbmcoZGF0ZSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW3Rva2VuWzBdXTtcbiAgICAgIHJldHVybiBmb3JtYXR0ZXIob3JpZ2luYWxEYXRlLCB0b2tlbiwgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9KVxuICAgIC5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgY29uc3QgbWF0Y2hlZCA9IGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHApO1xuXG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBmb3JtYXQ7XG4iLCAiaW1wb3J0IHsgZGVmYXVsdExvY2FsZSB9IGZyb20gXCIuL19saWIvZGVmYXVsdExvY2FsZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRPcHRpb25zLmpzXCI7XG5pbXBvcnQgeyBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzLmpzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcbmltcG9ydCB7IGNvbXBhcmVBc2MgfSBmcm9tIFwiLi9jb21wYXJlQXNjLmpzXCI7XG5pbXBvcnQgeyBtaW51dGVzSW5EYXksIG1pbnV0ZXNJbk1vbnRoIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5Nb250aHMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5Nb250aHMuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJblNlY29uZHMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5TZWNvbmRzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBmb3JtYXREaXN0YW5jZX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdERpc3RhbmNlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMgaW4gd29yZHMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzIGluIHdvcmRzLlxuICpcbiAqIHwgRGlzdGFuY2UgYmV0d2VlbiBkYXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgMCAuLi4gMzAgc2VjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBsZXNzIHRoYW4gYSBtaW51dGUgIHxcbiAqIHwgMzAgc2VjcyAuLi4gMSBtaW4gMzAgc2VjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxIG1pbnV0ZSAgICAgICAgICAgIHxcbiAqIHwgMSBtaW4gMzAgc2VjcyAuLi4gNDQgbWlucyAzMCBzZWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbMi4uNDRdIG1pbnV0ZXMgICAgIHxcbiAqIHwgNDQgbWlucyAuLi4gMzAgc2VjcyAuLi4gODkgbWlucyAzMCBzZWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYm91dCAxIGhvdXIgICAgICAgIHxcbiAqIHwgODkgbWlucyAzMCBzZWNzIC4uLiAyMyBocnMgNTkgbWlucyAzMCBzZWNzICAgICAgICAgICAgICAgICAgICAgICAgfCBhYm91dCBbMi4uMjRdIGhvdXJzIHxcbiAqIHwgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAuLi4gNDEgaHJzIDU5IG1pbnMgMzAgc2VjcyAgICAgICAgICAgICAgICAgfCAxIGRheSAgICAgICAgICAgICAgIHxcbiAqIHwgNDEgaHJzIDU5IG1pbnMgMzAgc2VjcyAuLi4gMjkgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzICAgICAgICAgfCBbMi4uMzBdIGRheXMgICAgICAgIHxcbiAqIHwgMjkgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzIC4uLiA0NCBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgfCBhYm91dCAxIG1vbnRoICAgICAgIHxcbiAqIHwgNDQgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzIC4uLiA1OSBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgfCBhYm91dCAyIG1vbnRocyAgICAgIHxcbiAqIHwgNTkgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzIC4uLiAxIHlyICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbMi4uMTJdIG1vbnRocyAgICAgIHxcbiAqIHwgMSB5ciAuLi4gMSB5ciAzIG1vbnRocyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYm91dCAxIHllYXIgICAgICAgIHxcbiAqIHwgMSB5ciAzIG1vbnRocyAuLi4gMSB5ciA5IG1vbnRoIHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVyIDEgeWVhciAgICAgICAgIHxcbiAqIHwgMSB5ciA5IG1vbnRocyAuLi4gMiB5cnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbG1vc3QgMiB5ZWFycyAgICAgIHxcbiAqIHwgTiB5cnMgLi4uIE4geXJzIDMgbW9udGhzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYm91dCBOIHllYXJzICAgICAgIHxcbiAqIHwgTiB5cnMgMyBtb250aHMgLi4uIE4geXJzIDkgbW9udGhzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVyIE4geWVhcnMgICAgICAgIHxcbiAqIHwgTiB5cnMgOSBtb250aHMgLi4uIE4rMSB5cnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbG1vc3QgTisxIHllYXJzICAgIHxcbiAqXG4gKiBXaXRoIGBvcHRpb25zLmluY2x1ZGVTZWNvbmRzID09IHRydWVgOlxuICogfCBEaXN0YW5jZSBiZXR3ZWVuIGRhdGVzIHwgUmVzdWx0ICAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAwIHNlY3MgLi4uIDUgc2VjcyAgICAgIHwgbGVzcyB0aGFuIDUgc2Vjb25kcyAgfFxuICogfCA1IHNlY3MgLi4uIDEwIHNlY3MgICAgIHwgbGVzcyB0aGFuIDEwIHNlY29uZHMgfFxuICogfCAxMCBzZWNzIC4uLiAyMCBzZWNzICAgIHwgbGVzcyB0aGFuIDIwIHNlY29uZHMgfFxuICogfCAyMCBzZWNzIC4uLiA0MCBzZWNzICAgIHwgaGFsZiBhIG1pbnV0ZSAgICAgICAgfFxuICogfCA0MCBzZWNzIC4uLiA2MCBzZWNzICAgIHwgbGVzcyB0aGFuIGEgbWludXRlICAgfFxuICogfCA2MCBzZWNzIC4uLiA5MCBzZWNzICAgIHwgMSBtaW51dGUgICAgICAgICAgICAgfFxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGRhdGUgdG8gY29tcGFyZSB3aXRoXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgaW4gd29yZHNcbiAqXG4gKiBAdGhyb3dzIGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3MgYGJhc2VEYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3MgYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdERpc3RhbmNlYCBwcm9wZXJ0eVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGF0IGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIDIgSnVseSAyMDE0IGFuZCAxIEphbnVhcnkgMjAxNT9cbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERpc3RhbmNlKG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBuZXcgRGF0ZSgyMDE1LCAwLCAxKSlcbiAqIC8vPT4gJzYgbW9udGhzJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGF0IGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIDEgSmFudWFyeSAyMDE1IDAwOjAwOjE1XG4gKiAvLyBhbmQgMSBKYW51YXJ5IDIwMTUgMDA6MDA6MDAsIGluY2x1ZGluZyBzZWNvbmRzP1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2UoXG4gKiAgIG5ldyBEYXRlKDIwMTUsIDAsIDEsIDAsIDAsIDE1KSxcbiAqICAgbmV3IERhdGUoMjAxNSwgMCwgMSwgMCwgMCwgMCksXG4gKiAgIHsgaW5jbHVkZVNlY29uZHM6IHRydWUgfVxuICogKVxuICogLy89PiAnbGVzcyB0aGFuIDIwIHNlY29uZHMnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoYXQgaXMgdGhlIGRpc3RhbmNlIGZyb20gMSBKYW51YXJ5IDIwMTZcbiAqIC8vIHRvIDEgSmFudWFyeSAyMDE1LCB3aXRoIGEgc3VmZml4P1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2UobmV3IERhdGUoMjAxNSwgMCwgMSksIG5ldyBEYXRlKDIwMTYsIDAsIDEpLCB7XG4gKiAgIGFkZFN1ZmZpeDogdHJ1ZVxuICogfSlcbiAqIC8vPT4gJ2Fib3V0IDEgeWVhciBhZ28nXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoYXQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gMSBBdWd1c3QgMjAxNiBhbmQgMSBKYW51YXJ5IDIwMTUgaW4gRXNwZXJhbnRvP1xuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXREaXN0YW5jZShuZXcgRGF0ZSgyMDE2LCA3LCAxKSwgbmV3IERhdGUoMjAxNSwgMCwgMSksIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJ3BsaSBvbCAxIGphcm8nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZShsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3QgbG9jYWxlID0gb3B0aW9ucz8ubG9jYWxlID8/IGRlZmF1bHRPcHRpb25zLmxvY2FsZSA/PyBkZWZhdWx0TG9jYWxlO1xuICBjb25zdCBtaW51dGVzSW5BbG1vc3RUd29EYXlzID0gMjUyMDtcblxuICBjb25zdCBjb21wYXJpc29uID0gY29tcGFyZUFzYyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKTtcblxuICBpZiAoaXNOYU4oY29tcGFyaXNvbikpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB0aW1lIHZhbHVlXCIpO1xuXG4gIGNvbnN0IGxvY2FsaXplT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICBhZGRTdWZmaXg6IG9wdGlvbnM/LmFkZFN1ZmZpeCxcbiAgICBjb21wYXJpc29uOiBjb21wYXJpc29uLFxuICB9KTtcblxuICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIC4uLihjb21wYXJpc29uID4gMCA/IFtlYXJsaWVyRGF0ZSwgbGF0ZXJEYXRlXSA6IFtsYXRlckRhdGUsIGVhcmxpZXJEYXRlXSksXG4gICk7XG5cbiAgY29uc3Qgc2Vjb25kcyA9IGRpZmZlcmVuY2VJblNlY29uZHMoZWFybGllckRhdGVfLCBsYXRlckRhdGVfKTtcbiAgY29uc3Qgb2Zmc2V0SW5TZWNvbmRzID1cbiAgICAoZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhlYXJsaWVyRGF0ZV8pIC1cbiAgICAgIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlXykpIC9cbiAgICAxMDAwO1xuICBjb25zdCBtaW51dGVzID0gTWF0aC5yb3VuZCgoc2Vjb25kcyAtIG9mZnNldEluU2Vjb25kcykgLyA2MCk7XG4gIGxldCBtb250aHM7XG5cbiAgLy8gMCB1cCB0byAyIG1pbnNcbiAgaWYgKG1pbnV0ZXMgPCAyKSB7XG4gICAgaWYgKG9wdGlvbnM/LmluY2x1ZGVTZWNvbmRzKSB7XG4gICAgICBpZiAoc2Vjb25kcyA8IDUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcImxlc3NUaGFuWFNlY29uZHNcIiwgNSwgbG9jYWxpemVPcHRpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDEwKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJsZXNzVGhhblhTZWNvbmRzXCIsIDEwLCBsb2NhbGl6ZU9wdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgMjApIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcImxlc3NUaGFuWFNlY29uZHNcIiwgMjAsIGxvY2FsaXplT3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCA0MCkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwiaGFsZkFNaW51dGVcIiwgMCwgbG9jYWxpemVPcHRpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDYwKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJsZXNzVGhhblhNaW51dGVzXCIsIDEsIGxvY2FsaXplT3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwieE1pbnV0ZXNcIiwgMSwgbG9jYWxpemVPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1pbnV0ZXMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcImxlc3NUaGFuWE1pbnV0ZXNcIiwgMSwgbG9jYWxpemVPcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJ4TWludXRlc1wiLCBtaW51dGVzLCBsb2NhbGl6ZU9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIgbWlucyB1cCB0byAwLjc1IGhyc1xuICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCA0NSkge1xuICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJ4TWludXRlc1wiLCBtaW51dGVzLCBsb2NhbGl6ZU9wdGlvbnMpO1xuXG4gICAgLy8gMC43NSBocnMgdXAgdG8gMS41IGhyc1xuICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCA5MCkge1xuICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJhYm91dFhIb3Vyc1wiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpO1xuXG4gICAgLy8gMS41IGhycyB1cCB0byAyNCBocnNcbiAgfSBlbHNlIGlmIChtaW51dGVzIDwgbWludXRlc0luRGF5KSB7XG4gICAgY29uc3QgaG91cnMgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyA2MCk7XG4gICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcImFib3V0WEhvdXJzXCIsIGhvdXJzLCBsb2NhbGl6ZU9wdGlvbnMpO1xuXG4gICAgLy8gMSBkYXkgdXAgdG8gMS43NSBkYXlzXG4gIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkFsbW9zdFR3b0RheXMpIHtcbiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwieERheXNcIiwgMSwgbG9jYWxpemVPcHRpb25zKTtcblxuICAgIC8vIDEuNzUgZGF5cyB1cCB0byAzMCBkYXlzXG4gIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbk1vbnRoKSB7XG4gICAgY29uc3QgZGF5cyA9IE1hdGgucm91bmQobWludXRlcyAvIG1pbnV0ZXNJbkRheSk7XG4gICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcInhEYXlzXCIsIGRheXMsIGxvY2FsaXplT3B0aW9ucyk7XG5cbiAgICAvLyAxIG1vbnRoIHVwIHRvIDIgbW9udGhzXG4gIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbk1vbnRoICogMikge1xuICAgIG1vbnRocyA9IE1hdGgucm91bmQobWludXRlcyAvIG1pbnV0ZXNJbk1vbnRoKTtcbiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwiYWJvdXRYTW9udGhzXCIsIG1vbnRocywgbG9jYWxpemVPcHRpb25zKTtcbiAgfVxuXG4gIG1vbnRocyA9IGRpZmZlcmVuY2VJbk1vbnRocyhlYXJsaWVyRGF0ZV8sIGxhdGVyRGF0ZV8pO1xuXG4gIC8vIDIgbW9udGhzIHVwIHRvIDEyIG1vbnRoc1xuICBpZiAobW9udGhzIDwgMTIpIHtcbiAgICBjb25zdCBuZWFyZXN0TW9udGggPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5Nb250aCk7XG4gICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcInhNb250aHNcIiwgbmVhcmVzdE1vbnRoLCBsb2NhbGl6ZU9wdGlvbnMpO1xuXG4gICAgLy8gMSB5ZWFyIHVwIHRvIG1heCBEYXRlXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbW9udGhzU2luY2VTdGFydE9mWWVhciA9IG1vbnRocyAlIDEyO1xuICAgIGNvbnN0IHllYXJzID0gTWF0aC50cnVuYyhtb250aHMgLyAxMik7XG5cbiAgICAvLyBOIHllYXJzIHVwIHRvIDEgeWVhcnMgMyBtb250aHNcbiAgICBpZiAobW9udGhzU2luY2VTdGFydE9mWWVhciA8IDMpIHtcbiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJhYm91dFhZZWFyc1wiLCB5ZWFycywgbG9jYWxpemVPcHRpb25zKTtcblxuICAgICAgLy8gTiB5ZWFycyAzIG1vbnRocyB1cCB0byBOIHllYXJzIDkgbW9udGhzXG4gICAgfSBlbHNlIGlmIChtb250aHNTaW5jZVN0YXJ0T2ZZZWFyIDwgOSkge1xuICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcIm92ZXJYWWVhcnNcIiwgeWVhcnMsIGxvY2FsaXplT3B0aW9ucyk7XG5cbiAgICAgIC8vIE4geWVhcnMgOSBtb250aHMgdXAgdG8gTiB5ZWFyIDEyIG1vbnRoc1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwiYWxtb3N0WFllYXJzXCIsIHllYXJzICsgMSwgbG9jYWxpemVPcHRpb25zKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTtcbiIsICJpbXBvcnQgeyBkZWZhdWx0TG9jYWxlIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IGdldFJvdW5kaW5nTWV0aG9kIH0gZnJvbSBcIi4vX2xpYi9nZXRSb3VuZGluZ01ldGhvZC5qc1wiO1xuaW1wb3J0IHsgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBjb21wYXJlQXNjIH0gZnJvbSBcIi4vY29tcGFyZUFzYy5qc1wiO1xuaW1wb3J0IHtcbiAgbWlsbGlzZWNvbmRzSW5NaW51dGUsXG4gIG1pbnV0ZXNJbkRheSxcbiAgbWludXRlc0luTW9udGgsXG4gIG1pbnV0ZXNJblllYXIsXG59IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZm9ybWF0RGlzdGFuY2VTdHJpY3R9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBUaGUgdW5pdCB1c2VkIHRvIGZvcm1hdCB0aGUgZGlzdGFuY2UgaW4ge0BsaW5rIGZvcm1hdERpc3RhbmNlU3RyaWN0fS5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdERpc3RhbmNlU3RyaWN0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMgaW4gd29yZHMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzIGluIHdvcmRzLCB1c2luZyBzdHJpY3QgdW5pdHMuXG4gKiBUaGlzIGlzIGxpa2UgYGZvcm1hdERpc3RhbmNlYCwgYnV0IGRvZXMgbm90IHVzZSBoZWxwZXJzIGxpa2UgJ2FsbW9zdCcsICdvdmVyJyxcbiAqICdsZXNzIHRoYW4nIGFuZCB0aGUgbGlrZS5cbiAqXG4gKiB8IERpc3RhbmNlIGJldHdlZW4gZGF0ZXMgfCBSZXN1bHQgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAwIC4uLiA1OSBzZWNzICAgICAgICAgIHwgWzAuLjU5XSBzZWNvbmRzICAgICB8XG4gKiB8IDEgLi4uIDU5IG1pbnMgICAgICAgICAgfCBbMS4uNTldIG1pbnV0ZXMgICAgIHxcbiAqIHwgMSAuLi4gMjMgaHJzICAgICAgICAgICB8IFsxLi4yM10gaG91cnMgICAgICAgfFxuICogfCAxIC4uLiAyOSBkYXlzICAgICAgICAgIHwgWzEuLjI5XSBkYXlzICAgICAgICB8XG4gKiB8IDEgLi4uIDExIG1vbnRocyAgICAgICAgfCBbMS4uMTFdIG1vbnRocyAgICAgIHxcbiAqIHwgMSAuLi4gTiB5ZWFycyAgICAgICAgICB8IFsxLi5OXSAgeWVhcnMgICAgICAgfFxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGRhdGUgdG8gY29tcGFyZSB3aXRoXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgaW4gd29yZHNcbiAqXG4gKiBAdGhyb3dzIGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3MgYGJhc2VEYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3MgYG9wdGlvbnMudW5pdGAgbXVzdCBiZSAnc2Vjb25kJywgJ21pbnV0ZScsICdob3VyJywgJ2RheScsICdtb250aCcgb3IgJ3llYXInXG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXREaXN0YW5jZWAgcHJvcGVydHlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hhdCBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiAyIEp1bHkgMjAxNCBhbmQgMSBKYW51YXJ5IDIwMTU/XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXREaXN0YW5jZVN0cmljdChuZXcgRGF0ZSgyMDE0LCA2LCAyKSwgbmV3IERhdGUoMjAxNSwgMCwgMikpXG4gKiAvLz0+ICc2IG1vbnRocydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hhdCBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiAxIEphbnVhcnkgMjAxNSAwMDowMDoxNVxuICogLy8gYW5kIDEgSmFudWFyeSAyMDE1IDAwOjAwOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2VTdHJpY3QoXG4gKiAgIG5ldyBEYXRlKDIwMTUsIDAsIDEsIDAsIDAsIDE1KSxcbiAqICAgbmV3IERhdGUoMjAxNSwgMCwgMSwgMCwgMCwgMClcbiAqIClcbiAqIC8vPT4gJzE1IHNlY29uZHMnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoYXQgaXMgdGhlIGRpc3RhbmNlIGZyb20gMSBKYW51YXJ5IDIwMTZcbiAqIC8vIHRvIDEgSmFudWFyeSAyMDE1LCB3aXRoIGEgc3VmZml4P1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2VTdHJpY3QobmV3IERhdGUoMjAxNSwgMCwgMSksIG5ldyBEYXRlKDIwMTYsIDAsIDEpLCB7XG4gKiAgIGFkZFN1ZmZpeDogdHJ1ZVxuICogfSlcbiAqIC8vPT4gJzEgeWVhciBhZ28nXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoYXQgaXMgdGhlIGRpc3RhbmNlIGZyb20gMSBKYW51YXJ5IDIwMTZcbiAqIC8vIHRvIDEgSmFudWFyeSAyMDE1LCBpbiBtaW51dGVzP1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2VTdHJpY3QobmV3IERhdGUoMjAxNiwgMCwgMSksIG5ldyBEYXRlKDIwMTUsIDAsIDEpLCB7XG4gKiAgIHVuaXQ6ICdtaW51dGUnXG4gKiB9KVxuICogLy89PiAnNTI1NjAwIG1pbnV0ZXMnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoYXQgaXMgdGhlIGRpc3RhbmNlIGZyb20gMSBKYW51YXJ5IDIwMTVcbiAqIC8vIHRvIDI4IEphbnVhcnkgMjAxNSwgaW4gbW9udGhzLCByb3VuZGVkIHVwP1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2VTdHJpY3QobmV3IERhdGUoMjAxNSwgMCwgMjgpLCBuZXcgRGF0ZSgyMDE1LCAwLCAxKSwge1xuICogICB1bml0OiAnbW9udGgnLFxuICogICByb3VuZGluZ01ldGhvZDogJ2NlaWwnXG4gKiB9KVxuICogLy89PiAnMSBtb250aCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hhdCBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiAxIEF1Z3VzdCAyMDE2IGFuZCAxIEphbnVhcnkgMjAxNSBpbiBFc3BlcmFudG8/XG4gKiBpbXBvcnQgeyBlb0xvY2FsZSB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbydcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERpc3RhbmNlU3RyaWN0KG5ldyBEYXRlKDIwMTYsIDcsIDEpLCBuZXcgRGF0ZSgyMDE1LCAwLCAxKSwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMSBqYXJvJ1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVN0cmljdChsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3QgbG9jYWxlID0gb3B0aW9ucz8ubG9jYWxlID8/IGRlZmF1bHRPcHRpb25zLmxvY2FsZSA/PyBkZWZhdWx0TG9jYWxlO1xuXG4gIGNvbnN0IGNvbXBhcmlzb24gPSBjb21wYXJlQXNjKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpO1xuXG4gIGlmIChpc05hTihjb21wYXJpc29uKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB0aW1lIHZhbHVlXCIpO1xuICB9XG5cbiAgY29uc3QgbG9jYWxpemVPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgIGFkZFN1ZmZpeDogb3B0aW9ucz8uYWRkU3VmZml4LFxuICAgIGNvbXBhcmlzb246IGNvbXBhcmlzb24sXG4gIH0pO1xuXG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgLi4uKGNvbXBhcmlzb24gPiAwID8gW2VhcmxpZXJEYXRlLCBsYXRlckRhdGVdIDogW2xhdGVyRGF0ZSwgZWFybGllckRhdGVdKSxcbiAgKTtcblxuICBjb25zdCByb3VuZGluZ01ldGhvZCA9IGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kID8/IFwicm91bmRcIik7XG5cbiAgY29uc3QgbWlsbGlzZWNvbmRzID0gZWFybGllckRhdGVfLmdldFRpbWUoKSAtIGxhdGVyRGF0ZV8uZ2V0VGltZSgpO1xuICBjb25zdCBtaW51dGVzID0gbWlsbGlzZWNvbmRzIC8gbWlsbGlzZWNvbmRzSW5NaW51dGU7XG5cbiAgY29uc3QgdGltZXpvbmVPZmZzZXQgPVxuICAgIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllckRhdGVfKSAtXG4gICAgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlckRhdGVfKTtcblxuICAvLyBVc2UgRFNULW5vcm1hbGl6ZWQgZGlmZmVyZW5jZSBpbiBtaW51dGVzIGZvciB5ZWFycywgbW9udGhzIGFuZCBkYXlzO1xuICAvLyB1c2UgcmVndWxhciBkaWZmZXJlbmNlIGluIG1pbnV0ZXMgZm9yIGhvdXJzLCBtaW51dGVzIGFuZCBzZWNvbmRzLlxuICBjb25zdCBkc3ROb3JtYWxpemVkTWludXRlcyA9XG4gICAgKG1pbGxpc2Vjb25kcyAtIHRpbWV6b25lT2Zmc2V0KSAvIG1pbGxpc2Vjb25kc0luTWludXRlO1xuXG4gIGNvbnN0IGRlZmF1bHRVbml0ID0gb3B0aW9ucz8udW5pdDtcbiAgbGV0IHVuaXQ7XG4gIGlmICghZGVmYXVsdFVuaXQpIHtcbiAgICBpZiAobWludXRlcyA8IDEpIHtcbiAgICAgIHVuaXQgPSBcInNlY29uZFwiO1xuICAgIH0gZWxzZSBpZiAobWludXRlcyA8IDYwKSB7XG4gICAgICB1bml0ID0gXCJtaW51dGVcIjtcbiAgICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5EYXkpIHtcbiAgICAgIHVuaXQgPSBcImhvdXJcIjtcbiAgICB9IGVsc2UgaWYgKGRzdE5vcm1hbGl6ZWRNaW51dGVzIDwgbWludXRlc0luTW9udGgpIHtcbiAgICAgIHVuaXQgPSBcImRheVwiO1xuICAgIH0gZWxzZSBpZiAoZHN0Tm9ybWFsaXplZE1pbnV0ZXMgPCBtaW51dGVzSW5ZZWFyKSB7XG4gICAgICB1bml0ID0gXCJtb250aFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bml0ID0gXCJ5ZWFyXCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHVuaXQgPSBkZWZhdWx0VW5pdDtcbiAgfVxuXG4gIC8vIDAgdXAgdG8gNjAgc2Vjb25kc1xuICBpZiAodW5pdCA9PT0gXCJzZWNvbmRcIikge1xuICAgIGNvbnN0IHNlY29uZHMgPSByb3VuZGluZ01ldGhvZChtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwieFNlY29uZHNcIiwgc2Vjb25kcywgbG9jYWxpemVPcHRpb25zKTtcblxuICAgIC8vIDEgdXAgdG8gNjAgbWluc1xuICB9IGVsc2UgaWYgKHVuaXQgPT09IFwibWludXRlXCIpIHtcbiAgICBjb25zdCByb3VuZGVkTWludXRlcyA9IHJvdW5kaW5nTWV0aG9kKG1pbnV0ZXMpO1xuICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJ4TWludXRlc1wiLCByb3VuZGVkTWludXRlcywgbG9jYWxpemVPcHRpb25zKTtcblxuICAgIC8vIDEgdXAgdG8gMjQgaG91cnNcbiAgfSBlbHNlIGlmICh1bml0ID09PSBcImhvdXJcIikge1xuICAgIGNvbnN0IGhvdXJzID0gcm91bmRpbmdNZXRob2QobWludXRlcyAvIDYwKTtcbiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwieEhvdXJzXCIsIGhvdXJzLCBsb2NhbGl6ZU9wdGlvbnMpO1xuXG4gICAgLy8gMSB1cCB0byAzMCBkYXlzXG4gIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJkYXlcIikge1xuICAgIGNvbnN0IGRheXMgPSByb3VuZGluZ01ldGhvZChkc3ROb3JtYWxpemVkTWludXRlcyAvIG1pbnV0ZXNJbkRheSk7XG4gICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcInhEYXlzXCIsIGRheXMsIGxvY2FsaXplT3B0aW9ucyk7XG5cbiAgICAvLyAxIHVwIHRvIDEyIG1vbnRoc1xuICB9IGVsc2UgaWYgKHVuaXQgPT09IFwibW9udGhcIikge1xuICAgIGNvbnN0IG1vbnRocyA9IHJvdW5kaW5nTWV0aG9kKGRzdE5vcm1hbGl6ZWRNaW51dGVzIC8gbWludXRlc0luTW9udGgpO1xuICAgIHJldHVybiBtb250aHMgPT09IDEyICYmIGRlZmF1bHRVbml0ICE9PSBcIm1vbnRoXCJcbiAgICAgID8gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwieFllYXJzXCIsIDEsIGxvY2FsaXplT3B0aW9ucylcbiAgICAgIDogbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwieE1vbnRoc1wiLCBtb250aHMsIGxvY2FsaXplT3B0aW9ucyk7XG5cbiAgICAvLyAxIHllYXIgdXAgdG8gbWF4IERhdGVcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB5ZWFycyA9IHJvdW5kaW5nTWV0aG9kKGRzdE5vcm1hbGl6ZWRNaW51dGVzIC8gbWludXRlc0luWWVhcik7XG4gICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcInhZZWFyc1wiLCB5ZWFycywgbG9jYWxpemVPcHRpb25zKTtcbiAgfVxufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdERpc3RhbmNlU3RyaWN0O1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdE5vdyB9IGZyb20gXCIuL2NvbnN0cnVjdE5vdy5qc1wiO1xuXG5pbXBvcnQgeyBmb3JtYXREaXN0YW5jZSB9IGZyb20gXCIuL2Zvcm1hdERpc3RhbmNlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBmb3JtYXREaXN0YW5jZVRvTm93fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZm9ybWF0RGlzdGFuY2VUb05vd1xuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGdpdmVuIGRhdGUgYW5kIG5vdyBpbiB3b3Jkcy5cbiAqIEBwdXJlIGZhbHNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGdpdmVuIGRhdGUgYW5kIG5vdyBpbiB3b3Jkcy5cbiAqXG4gKiB8IERpc3RhbmNlIHRvIG5vdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IDAgLi4uIDMwIHNlY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbGVzcyB0aGFuIGEgbWludXRlICB8XG4gKiB8IDMwIHNlY3MgLi4uIDEgbWluIDMwIHNlY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSBtaW51dGUgICAgICAgICAgICB8XG4gKiB8IDEgbWluIDMwIHNlY3MgLi4uIDQ0IG1pbnMgMzAgc2VjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWzIuLjQ0XSBtaW51dGVzICAgICB8XG4gKiB8IDQ0IG1pbnMgLi4uIDMwIHNlY3MgLi4uIDg5IG1pbnMgMzAgc2VjcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWJvdXQgMSBob3VyICAgICAgICB8XG4gKiB8IDg5IG1pbnMgMzAgc2VjcyAuLi4gMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAgICAgICAgICAgICAgICAgICAgICAgIHwgYWJvdXQgWzIuLjI0XSBob3VycyB8XG4gKiB8IDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgLi4uIDQxIGhycyA1OSBtaW5zIDMwIHNlY3MgICAgICAgICAgICAgICAgIHwgMSBkYXkgICAgICAgICAgICAgICB8XG4gKiB8IDQxIGhycyA1OSBtaW5zIDMwIHNlY3MgLi4uIDI5IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAgICAgICAgIHwgWzIuLjMwXSBkYXlzICAgICAgICB8XG4gKiB8IDI5IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAuLi4gNDQgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzIHwgYWJvdXQgMSBtb250aCAgICAgICB8XG4gKiB8IDQ0IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAuLi4gNTkgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzIHwgYWJvdXQgMiBtb250aHMgICAgICB8XG4gKiB8IDU5IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAuLi4gMSB5ciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWzIuLjEyXSBtb250aHMgICAgICB8XG4gKiB8IDEgeXIgLi4uIDEgeXIgMyBtb250aHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWJvdXQgMSB5ZWFyICAgICAgICB8XG4gKiB8IDEgeXIgMyBtb250aHMgLi4uIDEgeXIgOSBtb250aCBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlciAxIHllYXIgICAgICAgICB8XG4gKiB8IDEgeXIgOSBtb250aHMgLi4uIDIgeXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWxtb3N0IDIgeWVhcnMgICAgICB8XG4gKiB8IE4geXJzIC4uLiBOIHlycyAzIG1vbnRocyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWJvdXQgTiB5ZWFycyAgICAgICB8XG4gKiB8IE4geXJzIDMgbW9udGhzIC4uLiBOIHlycyA5IG1vbnRocyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlciBOIHllYXJzICAgICAgICB8XG4gKiB8IE4geXJzIDkgbW9udGhzIC4uLiBOKzEgeXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWxtb3N0IE4rMSB5ZWFycyAgICB8XG4gKlxuICogV2l0aCBgb3B0aW9ucy5pbmNsdWRlU2Vjb25kcyA9PSB0cnVlYDpcbiAqIHwgRGlzdGFuY2UgdG8gbm93ICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgMCBzZWNzIC4uLiA1IHNlY3MgICB8IGxlc3MgdGhhbiA1IHNlY29uZHMgIHxcbiAqIHwgNSBzZWNzIC4uLiAxMCBzZWNzICB8IGxlc3MgdGhhbiAxMCBzZWNvbmRzIHxcbiAqIHwgMTAgc2VjcyAuLi4gMjAgc2VjcyB8IGxlc3MgdGhhbiAyMCBzZWNvbmRzIHxcbiAqIHwgMjAgc2VjcyAuLi4gNDAgc2VjcyB8IGhhbGYgYSBtaW51dGUgICAgICAgIHxcbiAqIHwgNDAgc2VjcyAuLi4gNjAgc2VjcyB8IGxlc3MgdGhhbiBhIG1pbnV0ZSAgIHxcbiAqIHwgNjAgc2VjcyAuLi4gOTAgc2VjcyB8IDEgbWludXRlICAgICAgICAgICAgIHxcbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRpc3RhbmNlIGluIHdvcmRzXG4gKlxuICogQHRocm93cyBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXREaXN0YW5jZWAgcHJvcGVydHlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgMSBKYW51YXJ5IDIwMTUsIHdoYXQgaXMgdGhlIGRpc3RhbmNlIHRvIDIgSnVseSAyMDE0P1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2VUb05vdyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMilcbiAqIClcbiAqIC8vPT4gJzYgbW9udGhzJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiBub3cgaXMgMSBKYW51YXJ5IDIwMTUgMDA6MDA6MDAsXG4gKiAvLyB3aGF0IGlzIHRoZSBkaXN0YW5jZSB0byAxIEphbnVhcnkgMjAxNSAwMDowMDoxNSwgaW5jbHVkaW5nIHNlY29uZHM/XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXREaXN0YW5jZVRvTm93KFxuICogICBuZXcgRGF0ZSgyMDE1LCAwLCAxLCAwLCAwLCAxNSksXG4gKiAgIHtpbmNsdWRlU2Vjb25kczogdHJ1ZX1cbiAqIClcbiAqIC8vPT4gJ2xlc3MgdGhhbiAyMCBzZWNvbmRzJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyAxIEphbnVhcnkgMjAxNSxcbiAqIC8vIHdoYXQgaXMgdGhlIGRpc3RhbmNlIHRvIDEgSmFudWFyeSAyMDE2LCB3aXRoIGEgc3VmZml4P1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2VUb05vdyhcbiAqICAgbmV3IERhdGUoMjAxNiwgMCwgMSksXG4gKiAgIHthZGRTdWZmaXg6IHRydWV9XG4gKiApXG4gKiAvLz0+ICdpbiBhYm91dCAxIHllYXInXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDEgSmFudWFyeSAyMDE1LFxuICogLy8gd2hhdCBpcyB0aGUgZGlzdGFuY2UgdG8gMSBBdWd1c3QgMjAxNiBpbiBFc3BlcmFudG8/XG4gKiBjb25zdCBlb0xvY2FsZSA9IHJlcXVpcmUoJ2RhdGUtZm5zL2xvY2FsZS9lbycpXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXREaXN0YW5jZVRvTm93KFxuICogICBuZXcgRGF0ZSgyMDE2LCA3LCAxKSxcbiAqICAge2xvY2FsZTogZW9Mb2NhbGV9XG4gKiApXG4gKiAvLz0+ICdwbGkgb2wgMSBqYXJvJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2VUb05vdyhkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXREaXN0YW5jZShkYXRlLCBjb25zdHJ1Y3ROb3coZGF0ZSksIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdERpc3RhbmNlVG9Ob3c7XG4iLCAiaW1wb3J0IHsgY29uc3RydWN0Tm93IH0gZnJvbSBcIi4vY29uc3RydWN0Tm93LmpzXCI7XG5cbmltcG9ydCB7IGZvcm1hdERpc3RhbmNlU3RyaWN0IH0gZnJvbSBcIi4vZm9ybWF0RGlzdGFuY2VTdHJpY3QuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3R9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZSBhbmQgbm93IGluIHdvcmRzLlxuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMgaW4gd29yZHMsIHVzaW5nIHN0cmljdCB1bml0cy5cbiAqIFRoaXMgaXMgbGlrZSBgZm9ybWF0RGlzdGFuY2VgLCBidXQgZG9lcyBub3QgdXNlIGhlbHBlcnMgbGlrZSAnYWxtb3N0JywgJ292ZXInLFxuICogJ2xlc3MgdGhhbicgYW5kIHRoZSBsaWtlLlxuICpcbiAqIHwgRGlzdGFuY2UgYmV0d2VlbiBkYXRlcyB8IFJlc3VsdCAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IDAgLi4uIDU5IHNlY3MgICAgICAgICAgfCBbMC4uNTldIHNlY29uZHMgICAgIHxcbiAqIHwgMSAuLi4gNTkgbWlucyAgICAgICAgICB8IFsxLi41OV0gbWludXRlcyAgICAgfFxuICogfCAxIC4uLiAyMyBocnMgICAgICAgICAgIHwgWzEuLjIzXSBob3VycyAgICAgICB8XG4gKiB8IDEgLi4uIDI5IGRheXMgICAgICAgICAgfCBbMS4uMjldIGRheXMgICAgICAgIHxcbiAqIHwgMSAuLi4gMTEgbW9udGhzICAgICAgICB8IFsxLi4xMV0gbW9udGhzICAgICAgfFxuICogfCAxIC4uLiBOIHllYXJzICAgICAgICAgIHwgWzEuLk5dICB5ZWFycyAgICAgICB8XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBkaXN0YW5jZSBpbiB3b3Jkc1xuICpcbiAqIEB0aHJvd3MgYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgZm9ybWF0RGlzdGFuY2VgIHByb3BlcnR5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDEgSmFudWFyeSAyMDE1LCB3aGF0IGlzIHRoZSBkaXN0YW5jZSB0byAyIEp1bHkgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3QoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIpXG4gKiApXG4gKiAvLz0+ICc2IG1vbnRocydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgbm93IGlzIDEgSmFudWFyeSAyMDE1IDAwOjAwOjAwLFxuICogLy8gd2hhdCBpcyB0aGUgZGlzdGFuY2UgdG8gMSBKYW51YXJ5IDIwMTUgMDA6MDA6MTUsIGluY2x1ZGluZyBzZWNvbmRzP1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdChcbiAqICAgbmV3IERhdGUoMjAxNSwgMCwgMSwgMCwgMCwgMTUpXG4gKiApXG4gKiAvLz0+ICcxNSBzZWNvbmRzJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyAxIEphbnVhcnkgMjAxNSxcbiAqIC8vIHdoYXQgaXMgdGhlIGRpc3RhbmNlIHRvIDEgSmFudWFyeSAyMDE2LCB3aXRoIGEgc3VmZml4P1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdChcbiAqICAgbmV3IERhdGUoMjAxNiwgMCwgMSksXG4gKiAgIHthZGRTdWZmaXg6IHRydWV9XG4gKiApXG4gKiAvLz0+ICdpbiAxIHllYXInXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDI4IEphbnVhcnkgMjAxNSxcbiAqIC8vIHdoYXQgaXMgdGhlIGRpc3RhbmNlIHRvIDEgSmFudWFyeSAyMDE1LCBpbiBtb250aHMsIHJvdW5kZWQgdXA/P1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdChuZXcgRGF0ZSgyMDE1LCAwLCAxKSwge1xuICogICB1bml0OiAnbW9udGgnLFxuICogICByb3VuZGluZ01ldGhvZDogJ2NlaWwnXG4gKiB9KVxuICogLy89PiAnMSBtb250aCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgMSBKYW51YXJ5IDIwMTUsXG4gKiAvLyB3aGF0IGlzIHRoZSBkaXN0YW5jZSB0byAxIEphbnVhcnkgMjAxNiBpbiBFc3BlcmFudG8/XG4gKiBjb25zdCBlb0xvY2FsZSA9IHJlcXVpcmUoJ2RhdGUtZm5zL2xvY2FsZS9lbycpXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0KFxuICogICBuZXcgRGF0ZSgyMDE2LCAwLCAxKSxcbiAqICAge2xvY2FsZTogZW9Mb2NhbGV9XG4gKiApXG4gKiAvLz0+ICcxIGphcm8nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZvcm1hdERpc3RhbmNlU3RyaWN0KGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdDtcbiIsICJpbXBvcnQgeyBkZWZhdWx0TG9jYWxlIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdER1cmF0aW9ufSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbmNvbnN0IGRlZmF1bHRGb3JtYXQgPSBbXG4gIFwieWVhcnNcIixcbiAgXCJtb250aHNcIixcbiAgXCJ3ZWVrc1wiLFxuICBcImRheXNcIixcbiAgXCJob3Vyc1wiLFxuICBcIm1pbnV0ZXNcIixcbiAgXCJzZWNvbmRzXCIsXG5dO1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdER1cmF0aW9uXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdHMgYSBkdXJhdGlvbiBpbiBodW1hbi1yZWFkYWJsZSBmb3JtYXRcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiBodW1hbi1yZWFkYWJsZSBkdXJhdGlvbiBzdHJpbmcgaS5lLiBcIjkgbW9udGhzIDIgZGF5c1wiXG4gKlxuICogQHBhcmFtIGR1cmF0aW9uIC0gVGhlIGR1cmF0aW9uIHRvIGZvcm1hdFxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9ybWF0IGZ1bGwgZHVyYXRpb25cbiAqIGZvcm1hdER1cmF0aW9uKHtcbiAqICAgeWVhcnM6IDIsXG4gKiAgIG1vbnRoczogOSxcbiAqICAgd2Vla3M6IDEsXG4gKiAgIGRheXM6IDcsXG4gKiAgIGhvdXJzOiA1LFxuICogICBtaW51dGVzOiA5LFxuICogICBzZWNvbmRzOiAzMFxuICogfSlcbiAqIC8vPT4gJzIgeWVhcnMgOSBtb250aHMgMSB3ZWVrIDcgZGF5cyA1IGhvdXJzIDkgbWludXRlcyAzMCBzZWNvbmRzJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3JtYXQgcGFydGlhbCBkdXJhdGlvblxuICogZm9ybWF0RHVyYXRpb24oeyBtb250aHM6IDksIGRheXM6IDIgfSlcbiAqIC8vPT4gJzkgbW9udGhzIDIgZGF5cydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3VzdG9taXplIHRoZSBmb3JtYXRcbiAqIGZvcm1hdER1cmF0aW9uKFxuICogICB7XG4gKiAgICAgeWVhcnM6IDIsXG4gKiAgICAgbW9udGhzOiA5LFxuICogICAgIHdlZWtzOiAxLFxuICogICAgIGRheXM6IDcsXG4gKiAgICAgaG91cnM6IDUsXG4gKiAgICAgbWludXRlczogOSxcbiAqICAgICBzZWNvbmRzOiAzMFxuICogICB9LFxuICogICB7IGZvcm1hdDogWydtb250aHMnLCAnd2Vla3MnXSB9XG4gKiApID09PSAnOSBtb250aHMgMSB3ZWVrJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDdXN0b21pemUgdGhlIHplcm9zIHByZXNlbmNlXG4gKiBmb3JtYXREdXJhdGlvbih7IHllYXJzOiAwLCBtb250aHM6IDkgfSlcbiAqIC8vPT4gJzkgbW9udGhzJ1xuICogZm9ybWF0RHVyYXRpb24oeyB5ZWFyczogMCwgbW9udGhzOiA5IH0sIHsgemVybzogdHJ1ZSB9KVxuICogLy89PiAnMCB5ZWFycyA5IG1vbnRocydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3VzdG9taXplIHRoZSBkZWxpbWl0ZXJcbiAqIGZvcm1hdER1cmF0aW9uKHsgeWVhcnM6IDIsIG1vbnRoczogOSwgd2Vla3M6IDMgfSwgeyBkZWxpbWl0ZXI6ICcsICcgfSlcbiAqIC8vPT4gJzIgeWVhcnMsIDkgbW9udGhzLCAzIHdlZWtzJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24oZHVyYXRpb24sIG9wdGlvbnMpIHtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMubG9jYWxlID8/IGRlZmF1bHRMb2NhbGU7XG4gIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnM/LmZvcm1hdCA/PyBkZWZhdWx0Rm9ybWF0O1xuICBjb25zdCB6ZXJvID0gb3B0aW9ucz8uemVybyA/PyBmYWxzZTtcbiAgY29uc3QgZGVsaW1pdGVyID0gb3B0aW9ucz8uZGVsaW1pdGVyID8/IFwiIFwiO1xuXG4gIGlmICghbG9jYWxlLmZvcm1hdERpc3RhbmNlKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBmb3JtYXRcbiAgICAucmVkdWNlKChhY2MsIHVuaXQpID0+IHtcbiAgICAgIGNvbnN0IHRva2VuID0gYHgke3VuaXQucmVwbGFjZSgvKF4uKS8sIChtKSA9PiBtLnRvVXBwZXJDYXNlKCkpfWA7XG4gICAgICBjb25zdCB2YWx1ZSA9IGR1cmF0aW9uW3VuaXRdO1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgKHplcm8gfHwgZHVyYXRpb25bdW5pdF0pKSB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KGxvY2FsZS5mb3JtYXREaXN0YW5jZSh0b2tlbiwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pXG4gICAgLmpvaW4oZGVsaW1pdGVyKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdER1cmF0aW9uO1xuIiwgImltcG9ydCB7IGFkZExlYWRpbmdaZXJvcyB9IGZyb20gXCIuL19saWIvYWRkTGVhZGluZ1plcm9zLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdElTT30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdElTT1xuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXQgdGhlIGRhdGUgYWNjb3JkaW5nIHRvIHRoZSBJU08gODYwMSBzdGFuZGFyZCAoaHR0cHM6Ly9zdXBwb3J0LnNhcy5jb20vZG9jdW1lbnRhdGlvbi9jZGwvZW4vbHJkaWN0LzY0MzE2L0hUTUwvZGVmYXVsdC92aWV3ZXIuaHRtI2EwMDMxNjk4MTQuaHRtKS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIElTTyA4NjAxIGZvcm1hdC4gT3B0aW9ucyBtYXkgYmUgcGFzc2VkIHRvIGNvbnRyb2wgdGhlIHBhcnRzIGFuZCBub3RhdGlvbnMgb2YgdGhlIGRhdGUuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgKGluIGxvY2FsIHRpbWUgem9uZSlcbiAqXG4gKiBAdGhyb3dzIGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDE4IFNlcHRlbWJlciAyMDE5IGluIElTTyA4NjAxIGZvcm1hdCAobG9jYWwgdGltZSB6b25lIGlzIFVUQyk6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXRJU08obmV3IERhdGUoMjAxOSwgOCwgMTgsIDE5LCAwLCA1MikpXG4gKiAvLz0+ICcyMDE5LTA5LTE4VDE5OjAwOjUyWidcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDE4IFNlcHRlbWJlciAyMDE5IGluIElTTyA4NjAxLCBzaG9ydCBmb3JtYXQgKGxvY2FsIHRpbWUgem9uZSBpcyBVVEMpOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0SVNPKG5ldyBEYXRlKDIwMTksIDgsIDE4LCAxOSwgMCwgNTIpLCB7IGZvcm1hdDogJ2Jhc2ljJyB9KVxuICogLy89PiAnMjAxOTA5MThUMTkwMDUyJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMTggU2VwdGVtYmVyIDIwMTkgaW4gSVNPIDg2MDEgZm9ybWF0LCBkYXRlIG9ubHk6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXRJU08obmV3IERhdGUoMjAxOSwgOCwgMTgsIDE5LCAwLCA1MiksIHsgcmVwcmVzZW50YXRpb246ICdkYXRlJyB9KVxuICogLy89PiAnMjAxOS0wOS0xOCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDE4IFNlcHRlbWJlciAyMDE5IGluIElTTyA4NjAxIGZvcm1hdCwgdGltZSBvbmx5IChsb2NhbCB0aW1lIHpvbmUgaXMgVVRDKTpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdElTTyhuZXcgRGF0ZSgyMDE5LCA4LCAxOCwgMTksIDAsIDUyKSwgeyByZXByZXNlbnRhdGlvbjogJ3RpbWUnIH0pXG4gKiAvLz0+ICcxOTowMDo1MlonXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJU08oZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG5cbiAgaWYgKGlzTmFOKCtkYXRlXykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdGltZSB2YWx1ZVwiKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnM/LmZvcm1hdCA/PyBcImV4dGVuZGVkXCI7XG4gIGNvbnN0IHJlcHJlc2VudGF0aW9uID0gb3B0aW9ucz8ucmVwcmVzZW50YXRpb24gPz8gXCJjb21wbGV0ZVwiO1xuXG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBsZXQgdHpPZmZzZXQgPSBcIlwiO1xuXG4gIGNvbnN0IGRhdGVEZWxpbWl0ZXIgPSBmb3JtYXQgPT09IFwiZXh0ZW5kZWRcIiA/IFwiLVwiIDogXCJcIjtcbiAgY29uc3QgdGltZURlbGltaXRlciA9IGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiID8gXCI6XCIgOiBcIlwiO1xuXG4gIC8vIFJlcHJlc2VudGF0aW9uIGlzIGVpdGhlciAnZGF0ZScgb3IgJ2NvbXBsZXRlJ1xuICBpZiAocmVwcmVzZW50YXRpb24gIT09IFwidGltZVwiKSB7XG4gICAgY29uc3QgZGF5ID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldERhdGUoKSwgMik7XG4gICAgY29uc3QgbW9udGggPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TW9udGgoKSArIDEsIDIpO1xuICAgIGNvbnN0IHllYXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RnVsbFllYXIoKSwgNCk7XG5cbiAgICAvLyB5eXl5TU1kZCBvciB5eXl5LU1NLWRkLlxuICAgIHJlc3VsdCA9IGAke3llYXJ9JHtkYXRlRGVsaW1pdGVyfSR7bW9udGh9JHtkYXRlRGVsaW1pdGVyfSR7ZGF5fWA7XG4gIH1cblxuICAvLyBSZXByZXNlbnRhdGlvbiBpcyBlaXRoZXIgJ3RpbWUnIG9yICdjb21wbGV0ZSdcbiAgaWYgKHJlcHJlc2VudGF0aW9uICE9PSBcImRhdGVcIikge1xuICAgIC8vIEFkZCB0aGUgdGltZXpvbmUuXG4gICAgY29uc3Qgb2Zmc2V0ID0gZGF0ZV8uZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIGlmIChvZmZzZXQgIT09IDApIHtcbiAgICAgIGNvbnN0IGFic29sdXRlT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgICAgIGNvbnN0IGhvdXJPZmZzZXQgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC50cnVuYyhhYnNvbHV0ZU9mZnNldCAvIDYwKSwgMik7XG4gICAgICBjb25zdCBtaW51dGVPZmZzZXQgPSBhZGRMZWFkaW5nWmVyb3MoYWJzb2x1dGVPZmZzZXQgJSA2MCwgMik7XG4gICAgICAvLyBJZiBsZXNzIHRoYW4gMCwgdGhlIHNpZ24gaXMgKywgYmVjYXVzZSBpdCBpcyBhaGVhZCBvZiB0aW1lLlxuICAgICAgY29uc3Qgc2lnbiA9IG9mZnNldCA8IDAgPyBcIitcIiA6IFwiLVwiO1xuXG4gICAgICB0ek9mZnNldCA9IGAke3NpZ259JHtob3VyT2Zmc2V0fToke21pbnV0ZU9mZnNldH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ek9mZnNldCA9IFwiWlwiO1xuICAgIH1cblxuICAgIGNvbnN0IGhvdXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0SG91cnMoKSwgMik7XG4gICAgY29uc3QgbWludXRlID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1pbnV0ZXMoKSwgMik7XG4gICAgY29uc3Qgc2Vjb25kID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldFNlY29uZHMoKSwgMik7XG5cbiAgICAvLyBJZiB0aGVyZSdzIGFsc28gZGF0ZSwgc2VwYXJhdGUgaXQgd2l0aCB0aW1lIHdpdGggJ1QnXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gcmVzdWx0ID09PSBcIlwiID8gXCJcIiA6IFwiVFwiO1xuXG4gICAgLy8gQ3JlYXRlcyBhIHRpbWUgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgaG91ciwgbWludXRlLCBhbmQgc2Vjb25kLCBzZXBhcmF0ZWQgYnkgZGVsaW1pdGVycywgaWYgZGVmaW5lZC5cbiAgICBjb25zdCB0aW1lID0gW2hvdXIsIG1pbnV0ZSwgc2Vjb25kXS5qb2luKHRpbWVEZWxpbWl0ZXIpO1xuXG4gICAgLy8gSEhtbXNzIG9yIEhIOm1tOnNzLlxuICAgIHJlc3VsdCA9IGAke3Jlc3VsdH0ke3NlcGFyYXRvcn0ke3RpbWV9JHt0ek9mZnNldH1gO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRJU087XG4iLCAiaW1wb3J0IHsgYWRkTGVhZGluZ1plcm9zIH0gZnJvbSBcIi4vX2xpYi9hZGRMZWFkaW5nWmVyb3MuanNcIjtcbmltcG9ydCB7IGlzVmFsaWQgfSBmcm9tIFwiLi9pc1ZhbGlkLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdElTTzkwNzV9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRJU085MDc1XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZSBhY2NvcmRpbmcgdG8gdGhlIElTTyA5MDc1IHN0YW5kYXJkIChodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjcvZW4vZGF0ZS1hbmQtdGltZS1mdW5jdGlvbnMuaHRtbCNmdW5jdGlvbl9nZXQtZm9ybWF0KS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIElTTyA5MDc1IGZvcm1hdC4gT3B0aW9ucyBtYXkgYmUgcGFzc2VkIHRvIGNvbnRyb2wgdGhlIHBhcnRzIGFuZCBub3RhdGlvbnMgb2YgdGhlIGRhdGUuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqXG4gKiBAdGhyb3dzIGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDE4IFNlcHRlbWJlciAyMDE5IGluIElTTyA5MDc1IGZvcm1hdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdElTTzkwNzUobmV3IERhdGUoMjAxOSwgOCwgMTgsIDE5LCAwLCA1MikpXG4gKiAvLz0+ICcyMDE5LTA5LTE4IDE5OjAwOjUyJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMTggU2VwdGVtYmVyIDIwMTkgaW4gSVNPIDkwNzUsIHNob3J0IGZvcm1hdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdElTTzkwNzUobmV3IERhdGUoMjAxOSwgOCwgMTgsIDE5LCAwLCA1MiksIHsgZm9ybWF0OiAnYmFzaWMnIH0pXG4gKiAvLz0+ICcyMDE5MDkxOCAxOTAwNTInXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxOCBTZXB0ZW1iZXIgMjAxOSBpbiBJU08gOTA3NSBmb3JtYXQsIGRhdGUgb25seTpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdElTTzkwNzUobmV3IERhdGUoMjAxOSwgOCwgMTgsIDE5LCAwLCA1MiksIHsgcmVwcmVzZW50YXRpb246ICdkYXRlJyB9KVxuICogLy89PiAnMjAxOS0wOS0xOCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDE4IFNlcHRlbWJlciAyMDE5IGluIElTTyA5MDc1IGZvcm1hdCwgdGltZSBvbmx5OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0SVNPOTA3NShuZXcgRGF0ZSgyMDE5LCA4LCAxOCwgMTksIDAsIDUyKSwgeyByZXByZXNlbnRhdGlvbjogJ3RpbWUnIH0pXG4gKiAvLz0+ICcxOTowMDo1MidcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdElTTzkwNzUoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG5cbiAgaWYgKCFpc1ZhbGlkKGRhdGVfKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB0aW1lIHZhbHVlXCIpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucz8uZm9ybWF0ID8/IFwiZXh0ZW5kZWRcIjtcbiAgY29uc3QgcmVwcmVzZW50YXRpb24gPSBvcHRpb25zPy5yZXByZXNlbnRhdGlvbiA/PyBcImNvbXBsZXRlXCI7XG5cbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG5cbiAgY29uc3QgZGF0ZURlbGltaXRlciA9IGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiID8gXCItXCIgOiBcIlwiO1xuICBjb25zdCB0aW1lRGVsaW1pdGVyID0gZm9ybWF0ID09PSBcImV4dGVuZGVkXCIgPyBcIjpcIiA6IFwiXCI7XG5cbiAgLy8gUmVwcmVzZW50YXRpb24gaXMgZWl0aGVyICdkYXRlJyBvciAnY29tcGxldGUnXG4gIGlmIChyZXByZXNlbnRhdGlvbiAhPT0gXCJ0aW1lXCIpIHtcbiAgICBjb25zdCBkYXkgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RGF0ZSgpLCAyKTtcbiAgICBjb25zdCBtb250aCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRNb250aCgpICsgMSwgMik7XG4gICAgY29uc3QgeWVhciA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRGdWxsWWVhcigpLCA0KTtcblxuICAgIC8vIHl5eXlNTWRkIG9yIHl5eXktTU0tZGQuXG4gICAgcmVzdWx0ID0gYCR7eWVhcn0ke2RhdGVEZWxpbWl0ZXJ9JHttb250aH0ke2RhdGVEZWxpbWl0ZXJ9JHtkYXl9YDtcbiAgfVxuXG4gIC8vIFJlcHJlc2VudGF0aW9uIGlzIGVpdGhlciAndGltZScgb3IgJ2NvbXBsZXRlJ1xuICBpZiAocmVwcmVzZW50YXRpb24gIT09IFwiZGF0ZVwiKSB7XG4gICAgY29uc3QgaG91ciA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRIb3VycygpLCAyKTtcbiAgICBjb25zdCBtaW51dGUgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TWludXRlcygpLCAyKTtcbiAgICBjb25zdCBzZWNvbmQgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0U2Vjb25kcygpLCAyKTtcblxuICAgIC8vIElmIHRoZXJlJ3MgYWxzbyBkYXRlLCBzZXBhcmF0ZSBpdCB3aXRoIHRpbWUgd2l0aCBhIHNwYWNlXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gcmVzdWx0ID09PSBcIlwiID8gXCJcIiA6IFwiIFwiO1xuXG4gICAgLy8gSEhtbXNzIG9yIEhIOm1tOnNzLlxuICAgIHJlc3VsdCA9IGAke3Jlc3VsdH0ke3NlcGFyYXRvcn0ke2hvdXJ9JHt0aW1lRGVsaW1pdGVyfSR7bWludXRlfSR7dGltZURlbGltaXRlcn0ke3NlY29uZH1gO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRJU085MDc1O1xuIiwgIi8qKlxuICogQG5hbWUgZm9ybWF0SVNPRHVyYXRpb25cbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IGEgZHVyYXRpb24gb2JqZWN0IGFjY29yZGluZyBhcyBJU08gODYwMSBkdXJhdGlvbiBzdHJpbmdcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZvcm1hdCBhIGR1cmF0aW9uIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIElTTyA4NjAxIGR1cmF0aW9uIHN0YW5kYXJkIChodHRwczovL3d3dy5kaWdpLmNvbS9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi9kaWdpZG9jcy8vOTAwMDE0ODgtMTMvcmVmZXJlbmNlL3JfaXNvXzg2MDFfZHVyYXRpb25fZm9ybWF0Lmh0bSlcbiAqXG4gKiBAcGFyYW0gZHVyYXRpb24gLSBUaGUgZHVyYXRpb24gdG8gZm9ybWF0XG4gKlxuICogQHJldHVybnMgVGhlIElTTyA4NjAxIGR1cmF0aW9uIHN0cmluZ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3JtYXQgdGhlIGdpdmVuIGR1cmF0aW9uIGFzIElTTyA4NjAxIHN0cmluZ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0SVNPRHVyYXRpb24oe1xuICogICB5ZWFyczogMzksXG4gKiAgIG1vbnRoczogMixcbiAqICAgZGF5czogMjAsXG4gKiAgIGhvdXJzOiA3LFxuICogICBtaW51dGVzOiA1LFxuICogICBzZWNvbmRzOiAwXG4gKiB9KVxuICogLy89PiAnUDM5WTJNMjBEVDBIME0wUydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdElTT0R1cmF0aW9uKGR1cmF0aW9uKSB7XG4gIGNvbnN0IHtcbiAgICB5ZWFycyA9IDAsXG4gICAgbW9udGhzID0gMCxcbiAgICBkYXlzID0gMCxcbiAgICBob3VycyA9IDAsXG4gICAgbWludXRlcyA9IDAsXG4gICAgc2Vjb25kcyA9IDAsXG4gIH0gPSBkdXJhdGlvbjtcblxuICByZXR1cm4gYFAke3llYXJzfVkke21vbnRoc31NJHtkYXlzfURUJHtob3Vyc31IJHttaW51dGVzfU0ke3NlY29uZHN9U2A7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0SVNPRHVyYXRpb247XG4iLCAiaW1wb3J0IHsgYWRkTGVhZGluZ1plcm9zIH0gZnJvbSBcIi4vX2xpYi9hZGRMZWFkaW5nWmVyb3MuanNcIjtcbmltcG9ydCB7IGlzVmFsaWQgfSBmcm9tIFwiLi9pc1ZhbGlkLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdFJGQzMzMzl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRSRkMzMzM5XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZSBhY2NvcmRpbmcgdG8gdGhlIFJGQyAzMzM5IHN0YW5kYXJkIChodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNikuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiBSRkMgMzMzOSBmb3JtYXQuIE9wdGlvbnMgbWF5IGJlIHBhc3NlZCB0byBjb250cm9sIHRoZSBwYXJ0cyBhbmQgbm90YXRpb25zIG9mIHRoZSBkYXRlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKlxuICogQHRocm93cyBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxOCBTZXB0ZW1iZXIgMjAxOSBpbiBSRkMgMzMzOSBmb3JtYXQ6XG4gKiBmb3JtYXRSRkMzMzM5KG5ldyBEYXRlKDIwMTksIDgsIDE4LCAxOSwgMCwgNTIpKVxuICogLy89PiAnMjAxOS0wOS0xOFQxOTowMDo1MlonXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxOCBTZXB0ZW1iZXIgMjAxOSBpbiBSRkMgMzMzOSBmb3JtYXQsIDMgZGlnaXRzIG9mIHNlY29uZCBmcmFjdGlvblxuICogZm9ybWF0UkZDMzMzOShuZXcgRGF0ZSgyMDE5LCA4LCAxOCwgMTksIDAsIDUyLCAyMzQpLCB7XG4gKiAgIGZyYWN0aW9uRGlnaXRzOiAzXG4gKiB9KVxuICogLy89PiAnMjAxOS0wOS0xOFQxOTowMDo1Mi4yMzRaJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UkZDMzMzOShkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcblxuICBpZiAoIWlzVmFsaWQoZGF0ZV8pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHRpbWUgdmFsdWVcIik7XG4gIH1cblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0cyA9IG9wdGlvbnM/LmZyYWN0aW9uRGlnaXRzID8/IDA7XG5cbiAgY29uc3QgZGF5ID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldERhdGUoKSwgMik7XG4gIGNvbnN0IG1vbnRoID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1vbnRoKCkgKyAxLCAyKTtcbiAgY29uc3QgeWVhciA9IGRhdGVfLmdldEZ1bGxZZWFyKCk7XG5cbiAgY29uc3QgaG91ciA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRIb3VycygpLCAyKTtcbiAgY29uc3QgbWludXRlID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1pbnV0ZXMoKSwgMik7XG4gIGNvbnN0IHNlY29uZCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRTZWNvbmRzKCksIDIpO1xuXG4gIGxldCBmcmFjdGlvbmFsU2Vjb25kID0gXCJcIjtcbiAgaWYgKGZyYWN0aW9uRGlnaXRzID4gMCkge1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IGRhdGVfLmdldE1pbGxpc2Vjb25kcygpO1xuICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYyhcbiAgICAgIG1pbGxpc2Vjb25kcyAqIE1hdGgucG93KDEwLCBmcmFjdGlvbkRpZ2l0cyAtIDMpLFxuICAgICk7XG4gICAgZnJhY3Rpb25hbFNlY29uZCA9IFwiLlwiICsgYWRkTGVhZGluZ1plcm9zKGZyYWN0aW9uYWxTZWNvbmRzLCBmcmFjdGlvbkRpZ2l0cyk7XG4gIH1cblxuICBsZXQgb2Zmc2V0ID0gXCJcIjtcbiAgY29uc3QgdHpPZmZzZXQgPSBkYXRlXy5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gIGlmICh0ek9mZnNldCAhPT0gMCkge1xuICAgIGNvbnN0IGFic29sdXRlT2Zmc2V0ID0gTWF0aC5hYnModHpPZmZzZXQpO1xuICAgIGNvbnN0IGhvdXJPZmZzZXQgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC50cnVuYyhhYnNvbHV0ZU9mZnNldCAvIDYwKSwgMik7XG4gICAgY29uc3QgbWludXRlT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKGFic29sdXRlT2Zmc2V0ICUgNjAsIDIpO1xuICAgIC8vIElmIGxlc3MgdGhhbiAwLCB0aGUgc2lnbiBpcyArLCBiZWNhdXNlIGl0IGlzIGFoZWFkIG9mIHRpbWUuXG4gICAgY29uc3Qgc2lnbiA9IHR6T2Zmc2V0IDwgMCA/IFwiK1wiIDogXCItXCI7XG5cbiAgICBvZmZzZXQgPSBgJHtzaWdufSR7aG91ck9mZnNldH06JHttaW51dGVPZmZzZXR9YDtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXQgPSBcIlpcIjtcbiAgfVxuXG4gIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1UJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9JHtmcmFjdGlvbmFsU2Vjb25kfSR7b2Zmc2V0fWA7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UkZDMzMzOTtcbiIsICJpbXBvcnQgeyBhZGRMZWFkaW5nWmVyb3MgfSBmcm9tIFwiLi9fbGliL2FkZExlYWRpbmdaZXJvcy5qc1wiO1xuaW1wb3J0IHsgaXNWYWxpZCB9IGZyb20gXCIuL2lzVmFsaWQuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG5jb25zdCBkYXlzID0gW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdO1xuXG5jb25zdCBtb250aHMgPSBbXG4gIFwiSmFuXCIsXG4gIFwiRmViXCIsXG4gIFwiTWFyXCIsXG4gIFwiQXByXCIsXG4gIFwiTWF5XCIsXG4gIFwiSnVuXCIsXG4gIFwiSnVsXCIsXG4gIFwiQXVnXCIsXG4gIFwiU2VwXCIsXG4gIFwiT2N0XCIsXG4gIFwiTm92XCIsXG4gIFwiRGVjXCIsXG5dO1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdFJGQzcyMzFcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlIGFjY29yZGluZyB0byB0aGUgUkZDIDcyMzEgc3RhbmRhcmQgKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNy4xLjEuMSkuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiBSRkMgNzIzMSBmb3JtYXQuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYWx3YXlzIGJlIGluIFVUQyB0aW1lem9uZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICpcbiAqIEB0aHJvd3MgYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMTggU2VwdGVtYmVyIDIwMTkgaW4gUkZDIDcyMzEgZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0UkZDNzIzMShuZXcgRGF0ZSgyMDE5LCA4LCAxOCwgMTksIDAsIDUyKSlcbiAqIC8vPT4gJ1dlZCwgMTggU2VwIDIwMTkgMTk6MDA6NTIgR01UJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UkZDNzIzMShkYXRlKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUpO1xuXG4gIGlmICghaXNWYWxpZChfZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdGltZSB2YWx1ZVwiKTtcbiAgfVxuXG4gIGNvbnN0IGRheU5hbWUgPSBkYXlzW19kYXRlLmdldFVUQ0RheSgpXTtcbiAgY29uc3QgZGF5T2ZNb250aCA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENEYXRlKCksIDIpO1xuICBjb25zdCBtb250aE5hbWUgPSBtb250aHNbX2RhdGUuZ2V0VVRDTW9udGgoKV07XG4gIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuXG4gIGNvbnN0IGhvdXIgPSBhZGRMZWFkaW5nWmVyb3MoX2RhdGUuZ2V0VVRDSG91cnMoKSwgMik7XG4gIGNvbnN0IG1pbnV0ZSA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENNaW51dGVzKCksIDIpO1xuICBjb25zdCBzZWNvbmQgPSBhZGRMZWFkaW5nWmVyb3MoX2RhdGUuZ2V0VVRDU2Vjb25kcygpLCAyKTtcblxuICAvLyBSZXN1bHQgdmFyaWFibGVzLlxuICByZXR1cm4gYCR7ZGF5TmFtZX0sICR7ZGF5T2ZNb250aH0gJHttb250aE5hbWV9ICR7eWVhcn0gJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9IEdNVGA7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UkZDNzIzMTtcbiIsICJpbXBvcnQgeyBkZWZhdWx0TG9jYWxlIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzLmpzXCI7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tIFwiLi9mb3JtYXQuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdFJlbGF0aXZlfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZm9ybWF0UmVsYXRpdmVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgUmVwcmVzZW50IHRoZSBkYXRlIGluIHdvcmRzIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBiYXNlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXByZXNlbnQgdGhlIGRhdGUgaW4gd29yZHMgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIGJhc2UgZGF0ZS5cbiAqXG4gKiB8IERpc3RhbmNlIHRvIHRoZSBiYXNlIGRhdGUgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBQcmV2aW91cyA2IGRheXMgICAgICAgICAgIHwgbGFzdCBTdW5kYXkgYXQgMDQ6MzAgQU0gICB8XG4gKiB8IExhc3QgZGF5ICAgICAgICAgICAgICAgICAgfCB5ZXN0ZXJkYXkgYXQgMDQ6MzAgQU0gICAgIHxcbiAqIHwgU2FtZSBkYXkgICAgICAgICAgICAgICAgICB8IHRvZGF5IGF0IDA0OjMwIEFNICAgICAgICAgfFxuICogfCBOZXh0IGRheSAgICAgICAgICAgICAgICAgIHwgdG9tb3Jyb3cgYXQgMDQ6MzAgQU0gICAgICB8XG4gKiB8IE5leHQgNiBkYXlzICAgICAgICAgICAgICAgfCBTdW5kYXkgYXQgMDQ6MzAgQU0gICAgICAgIHxcbiAqIHwgT3RoZXIgICAgICAgICAgICAgICAgICAgICB8IDEyLzMxLzIwMTcgICAgICAgICAgICAgICAgfFxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gZm9ybWF0XG4gKiBAcGFyYW0gYmFzZURhdGUgLSBUaGUgZGF0ZSB0byBjb21wYXJlIHdpdGhcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGluIHdvcmRzXG4gKlxuICogQHRocm93cyBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIGBiYXNlRGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3MgYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRSZWxhdGl2ZWAgcHJvcGVydHlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IHRoZSBkYXRlIG9mIDYgZGF5cyBhZ28gaW4gd29yZHMgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIGJhc2UgZGF0ZS4gSW4gdGhpcyBleGFtcGxlLCB0b2RheSBpcyBXZWRuZXNkYXlcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFJlbGF0aXZlKHN1YkRheXMobmV3IERhdGUoKSwgNiksIG5ldyBEYXRlKCkpXG4gKiAvLz0+IFwibGFzdCBUaHVyc2RheSBhdCAxMjo0NSBBTVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZShkYXRlLCBiYXNlRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbZGF0ZV8sIGJhc2VEYXRlX10gPSBub3JtYWxpemVEYXRlcyhvcHRpb25zPy5pbiwgZGF0ZSwgYmFzZURhdGUpO1xuXG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3QgbG9jYWxlID0gb3B0aW9ucz8ubG9jYWxlID8/IGRlZmF1bHRPcHRpb25zLmxvY2FsZSA/PyBkZWZhdWx0TG9jYWxlO1xuICBjb25zdCB3ZWVrU3RhcnRzT24gPVxuICAgIG9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICAwO1xuXG4gIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZGF0ZV8sIGJhc2VEYXRlXyk7XG5cbiAgaWYgKGlzTmFOKGRpZmYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHRpbWUgdmFsdWVcIik7XG4gIH1cblxuICBsZXQgdG9rZW47XG4gIGlmIChkaWZmIDwgLTYpIHtcbiAgICB0b2tlbiA9IFwib3RoZXJcIjtcbiAgfSBlbHNlIGlmIChkaWZmIDwgLTEpIHtcbiAgICB0b2tlbiA9IFwibGFzdFdlZWtcIjtcbiAgfSBlbHNlIGlmIChkaWZmIDwgMCkge1xuICAgIHRva2VuID0gXCJ5ZXN0ZXJkYXlcIjtcbiAgfSBlbHNlIGlmIChkaWZmIDwgMSkge1xuICAgIHRva2VuID0gXCJ0b2RheVwiO1xuICB9IGVsc2UgaWYgKGRpZmYgPCAyKSB7XG4gICAgdG9rZW4gPSBcInRvbW9ycm93XCI7XG4gIH0gZWxzZSBpZiAoZGlmZiA8IDcpIHtcbiAgICB0b2tlbiA9IFwibmV4dFdlZWtcIjtcbiAgfSBlbHNlIHtcbiAgICB0b2tlbiA9IFwib3RoZXJcIjtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFN0ciA9IGxvY2FsZS5mb3JtYXRSZWxhdGl2ZSh0b2tlbiwgZGF0ZV8sIGJhc2VEYXRlXywge1xuICAgIGxvY2FsZSxcbiAgICB3ZWVrU3RhcnRzT24sXG4gIH0pO1xuICByZXR1cm4gZm9ybWF0KGRhdGVfLCBmb3JtYXRTdHIsIHsgbG9jYWxlLCB3ZWVrU3RhcnRzT24gfSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBmcm9tVW5peFRpbWV9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBmcm9tVW5peFRpbWVcbiAqIEBjYXRlZ29yeSBUaW1lc3RhbXAgSGVscGVyc1xuICogQHN1bW1hcnkgQ3JlYXRlIGEgZGF0ZSBmcm9tIGEgVW5peCB0aW1lc3RhbXAuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGUgYSBkYXRlIGZyb20gYSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykuIERlY2ltYWwgdmFsdWVzIHdpbGwgYmUgZGlzY2FyZGVkLlxuICpcbiAqIEBwYXJhbSB1bml4VGltZSAtIFRoZSBnaXZlbiBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcylcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy4gQWxsb3dzIHRvIHBhc3MgYSBjb250ZXh0LlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSB0aGUgZGF0ZSAyOSBGZWJydWFyeSAyMDEyIDExOjQ1OjA1OlxuICogY29uc3QgcmVzdWx0ID0gZnJvbVVuaXhUaW1lKDEzMzA1MTU5MDUpXG4gKiAvLz0+IFdlZCBGZWIgMjkgMjAxMiAxMTo0NTowNVxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVVuaXhUaW1lKHVuaXhUaW1lLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0RhdGUodW5peFRpbWUgKiAxMDAwLCBvcHRpb25zPy5pbik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZnJvbVVuaXhUaW1lO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0RGF0ZX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldERhdGVcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBkYXkgb2YgdGhlIG1vbnRoIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBkYXkgb2YgdGhlIG1vbnRoIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF5IG9mIG1vbnRoXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIGRheSBvZiB0aGUgbW9udGggaXMgMjkgRmVicnVhcnkgMjAxMj9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldERhdGUobmV3IERhdGUoMjAxMiwgMSwgMjkpKVxuICogLy89PiAyOVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZShkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERhdGUoKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXREYXRlO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0RGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0RGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGRheSBvZiB0aGUgd2VlayBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgZGF5IG9mIHRoZSB3ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF5IG9mIHdlZWssIDAgcmVwcmVzZW50cyBTdW5kYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggZGF5IG9mIHRoZSB3ZWVrIGlzIDI5IEZlYnJ1YXJ5IDIwMTI/XG4gKiBjb25zdCByZXN1bHQgPSBnZXREYXkobmV3IERhdGUoMjAxMiwgMSwgMjkpKVxuICogLy89PiAzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXkoZGF0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXREYXk7XG4iLCAiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0RGF5c0luTW9udGh9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXREYXlzSW5Nb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aCBvZiB0aGUgZ2l2ZW4gZGF0ZSwgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgaWYgcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGhcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZGF5cyBhcmUgaW4gRmVicnVhcnkgMjAwMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldERheXNJbk1vbnRoKG5ldyBEYXRlKDIwMDAsIDEpKVxuICogLy89PiAyOVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aEluZGV4ID0gX2RhdGUuZ2V0TW9udGgoKTtcbiAgY29uc3QgbGFzdERheU9mTW9udGggPSBjb25zdHJ1Y3RGcm9tKF9kYXRlLCAwKTtcbiAgbGFzdERheU9mTW9udGguc2V0RnVsbFllYXIoeWVhciwgbW9udGhJbmRleCArIDEsIDApO1xuICBsYXN0RGF5T2ZNb250aC5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGxhc3REYXlPZk1vbnRoLmdldERhdGUoKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXREYXlzSW5Nb250aDtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpc0xlYXBZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgbGVhcCB5ZWFyP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIGxlYXAgeWVhcj9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIGluIHRoZSBsZWFwIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXMgMSBTZXB0ZW1iZXIgMjAxMiBpbiB0aGUgbGVhcCB5ZWFyP1xuICogY29uc3QgcmVzdWx0ID0gaXNMZWFwWWVhcihuZXcgRGF0ZSgyMDEyLCA4LCAxKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMZWFwWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7XG4gIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8ICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0xlYXBZZWFyO1xuIiwgImltcG9ydCB7IGlzTGVhcFllYXIgfSBmcm9tIFwiLi9pc0xlYXBZZWFyLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldERheXNJblllYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXREYXlzSW5ZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZGF5cyBhcmUgaW4gMjAxMj9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldERheXNJblllYXIobmV3IERhdGUoMjAxMiwgMCwgMSkpXG4gKiAvLz0+IDM2NlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5c0luWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgaWYgKE51bWJlci5pc05hTigrX2RhdGUpKSByZXR1cm4gTmFOO1xuICByZXR1cm4gaXNMZWFwWWVhcihfZGF0ZSkgPyAzNjYgOiAzNjU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0RGF5c0luWWVhcjtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldERlY2FkZX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldERlY2FkZVxuICogQGNhdGVnb3J5IERlY2FkZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGRlY2FkZSBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgZGVjYWRlIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSB5ZWFyIG9mIGRlY2FkZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCBkZWNhZGUgYmVsb25ncyAyNyBOb3ZlbWJlciAxOTQyP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0RGVjYWRlKG5ldyBEYXRlKDE5NDIsIDEwLCAyNykpXG4gKiAvLz0+IDE5NDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY2FkZShkYXRlLCBvcHRpb25zKSB7XG4gIC8vIFRPRE86IFN3aXRjaCB0byBtb3JlIHRlY2huaWNhbCBkZWZpbml0aW9uIGluIG9mIGRlY2FkZXMgdGhhdCBzdGFydCB3aXRoIDFcbiAgLy8gZW5kIHdpdGggMC4gSS5lLiAyMDAxLTIwMTAgaW5zdGVhZCBvZiBjdXJyZW50IDIwMDAtMjAwOS4gSXQncyBhIGJyZWFraW5nXG4gIC8vIGNoYW5nZSwgc28gaXQgY2FuIG9ubHkgYmUgZG9uZSBpbiA0LjAuXG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IGRlY2FkZSA9IE1hdGguZmxvb3IoeWVhciAvIDEwKSAqIDEwO1xuICByZXR1cm4gZGVjYWRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldERlY2FkZTtcbiIsICJpbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyBhcyBnZXRJbnRlcm5hbERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGdldERlZmF1bHRPcHRpb25zXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCBkZWZhdWx0IG9wdGlvbnMuXG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBkZWZhdWx0cyBmb3JcbiAqIGBvcHRpb25zLmxvY2FsZWAsIGBvcHRpb25zLndlZWtTdGFydHNPbmAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWBcbiAqIGFyZ3VtZW50cyBmb3IgYWxsIGZ1bmN0aW9ucy5cbiAqXG4gKiBZb3UgY2FuIGNoYW5nZSB0aGVzZSB3aXRoIFtzZXREZWZhdWx0T3B0aW9uc10oaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9zZXREZWZhdWx0T3B0aW9ucykuXG4gKlxuICogQHJldHVybnMgVGhlIGRlZmF1bHQgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZXN1bHQgPSBnZXREZWZhdWx0T3B0aW9ucygpXG4gKiAvLz0+IHt9XG4gKlxuICogQGV4YW1wbGVcbiAqIHNldERlZmF1bHRPcHRpb25zKHsgd2Vla1N0YXJzT246IDEsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNCB9KVxuICogY29uc3QgcmVzdWx0ID0gZ2V0RGVmYXVsdE9wdGlvbnMoKVxuICogLy89PiB7IHdlZWtTdGFyc09uOiAxLCBmaXJzdFdlZWtDb250YWluc0RhdGU6IDQgfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXRJbnRlcm5hbERlZmF1bHRPcHRpb25zKCkpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldERlZmF1bHRPcHRpb25zO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0SG91cnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXRIb3Vyc1xuICogQGNhdGVnb3J5IEhvdXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBob3VycyBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgaG91cnMgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGhvdXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB0aGUgaG91cnMgb2YgMjkgRmVicnVhcnkgMjAxMiAxMTo0NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGdldEhvdXJzKG5ldyBEYXRlKDIwMTIsIDEsIDI5LCAxMSwgNDUpKVxuICogLy89PiAxMVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SG91cnMoZGF0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXRIb3VycygpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldEhvdXJzO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0SVNPRGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0SVNPRGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGRheSBvZiB0aGUgSVNPIHdlZWsgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIGRheSBvZiB0aGUgSVNPIHdlZWsgb2YgdGhlIGdpdmVuIGRhdGUsXG4gKiB3aGljaCBpcyA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSBldGMuXG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXkgb2YgSVNPIHdlZWtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggZGF5IG9mIHRoZSBJU08gd2VlayBpcyAyNiBGZWJydWFyeSAyMDEyP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0SVNPRGF5KG5ldyBEYXRlKDIwMTIsIDEsIDI2KSlcbiAqIC8vPT4gN1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SVNPRGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGF5ID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKTtcbiAgcmV0dXJuIGRheSA9PT0gMCA/IDcgOiBkYXk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0SVNPRGF5O1xuIiwgImltcG9ydCB7IGFkZFdlZWtzIH0gZnJvbSBcIi4vYWRkV2Vla3MuanNcIjtcbmltcG9ydCB7IG1pbGxpc2Vjb25kc0luV2VlayB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZklTT1dlZWtZZWFyIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWtZZWFyLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXRJU09XZWVrc0luWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldElTT1dlZWtzSW5ZZWFyXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2Ygd2Vla3MgaW4gYW4gSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiB3ZWVrcyBpbiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBJU08gd2Vla3MgaW4gYSB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IHdlZWtzIGFyZSBpbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAyMDE1P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0SVNPV2Vla3NJblllYXIobmV3IERhdGUoMjAxNSwgMSwgMTEpKVxuICogLy89PiA1M1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB0aGlzWWVhciA9IHN0YXJ0T2ZJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgY29uc3QgbmV4dFllYXIgPSBzdGFydE9mSVNPV2Vla1llYXIoYWRkV2Vla3ModGhpc1llYXIsIDYwKSk7XG4gIGNvbnN0IGRpZmYgPSArbmV4dFllYXIgLSArdGhpc1llYXI7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiB3ZWVrcyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIGJlY2F1c2UgdGhlIG51bWJlciBvZlxuICAvLyBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudCAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZlxuICAvLyB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpLlxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gbWlsbGlzZWNvbmRzSW5XZWVrKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRJU09XZWVrc0luWWVhcjtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBnZXRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG1pbGxpc2Vjb25kcyBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbWlsbGlzZWNvbmRzIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBUaGUgbWlsbGlzZWNvbmRzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB0aGUgbWlsbGlzZWNvbmRzIG9mIDI5IEZlYnJ1YXJ5IDIwMTIgMTE6NDU6MDUuMTIzOlxuICogY29uc3QgcmVzdWx0ID0gZ2V0TWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTIsIDEsIDI5LCAxMSwgNDUsIDUsIDEyMykpXG4gKiAvLz0+IDEyM1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgcmV0dXJuIHRvRGF0ZShkYXRlKS5nZXRNaWxsaXNlY29uZHMoKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRNaWxsaXNlY29uZHM7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXRNaW51dGVzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0TWludXRlc1xuICogQGNhdGVnb3J5IE1pbnV0ZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG1pbnV0ZXMgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG1pbnV0ZXMgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBtaW51dGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB0aGUgbWludXRlcyBvZiAyOSBGZWJydWFyeSAyMDEyIDExOjQ1OjA1OlxuICogY29uc3QgcmVzdWx0ID0gZ2V0TWludXRlcyhuZXcgRGF0ZSgyMDEyLCAxLCAyOSwgMTEsIDQ1LCA1KSlcbiAqIC8vPT4gNDVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1pbnV0ZXMoZGF0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXRNaW51dGVzKCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0TWludXRlcztcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldE1vbnRofSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0TW9udGhcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG1vbnRoIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBtb250aCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbW9udGggaW5kZXggKDAtMTEpXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIG1vbnRoIGlzIDI5IEZlYnJ1YXJ5IDIwMTI/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRNb250aChuZXcgRGF0ZSgyMDEyLCAxLCAyOSkpXG4gKiAvLz0+IDFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbnRoKGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0TW9udGgoKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRNb250aDtcbiIsICJpbXBvcnQgeyBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzLmpzXCI7XG5pbXBvcnQgeyBtaWxsaXNlY29uZHNJbkRheSB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHNcbiAqIEBjYXRlZ29yeSBJbnRlcnZhbCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBkYXlzIHRoYXQgb3ZlcmxhcCBpbiB0d28gdGltZSBpbnRlcnZhbHNcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGRheXMgdGhhdCBvdmVybGFwIGluIHR3byB0aW1lIGludGVydmFscy4gSXQgdXNlcyB0aGUgdGltZVxuICogYmV0d2VlbiBkYXRlcyB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBkYXlzLCByb3VuZGluZyBpdCB1cCB0byBpbmNsdWRlXG4gKiBwYXJ0aWFsIGRheXMuXG4gKlxuICogVHdvIGVxdWFsIDAtbGVuZ3RoIGludGVydmFscyB3aWxsIHJlc3VsdCBpbiAwLiBUd28gZXF1YWwgMW1zIGludGVydmFscyB3aWxsXG4gKiByZXN1bHQgaW4gMS5cbiAqXG4gKiBAcGFyYW0gaW50ZXJ2YWxMZWZ0IC0gVGhlIGZpcnN0IGludGVydmFsIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0gaW50ZXJ2YWxSaWdodCAtIFRoZSBzZWNvbmQgaW50ZXJ2YWwgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZGF5cyB0aGF0IG92ZXJsYXAgaW4gdHdvIHRpbWUgaW50ZXJ2YWxzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBvdmVybGFwcGluZyB0aW1lIGludGVydmFscyBhZGRzIDEgZm9yIGVhY2ggc3RhcnRlZCBvdmVybGFwcGluZyBkYXk6XG4gKiBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscyhcbiAqICAgeyBzdGFydDogbmV3IERhdGUoMjAxNCwgMCwgMTApLCBlbmQ6IG5ldyBEYXRlKDIwMTQsIDAsIDIwKSB9LFxuICogICB7IHN0YXJ0OiBuZXcgRGF0ZSgyMDE0LCAwLCAxNyksIGVuZDogbmV3IERhdGUoMjAxNCwgMCwgMjEpIH1cbiAqIClcbiAqIC8vPT4gM1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3Igbm9uLW92ZXJsYXBwaW5nIHRpbWUgaW50ZXJ2YWxzIHJldHVybnMgMDpcbiAqIGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzKFxuICogICB7IHN0YXJ0OiBuZXcgRGF0ZSgyMDE0LCAwLCAxMCksIGVuZDogbmV3IERhdGUoMjAxNCwgMCwgMjApIH0sXG4gKiAgIHsgc3RhcnQ6IG5ldyBEYXRlKDIwMTQsIDAsIDIxKSwgZW5kOiBuZXcgRGF0ZSgyMDE0LCAwLCAyMikgfVxuICogKVxuICogLy89PiAwXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzKGludGVydmFsTGVmdCwgaW50ZXJ2YWxSaWdodCkge1xuICBjb25zdCBbbGVmdFN0YXJ0LCBsZWZ0RW5kXSA9IFtcbiAgICArdG9EYXRlKGludGVydmFsTGVmdC5zdGFydCksXG4gICAgK3RvRGF0ZShpbnRlcnZhbExlZnQuZW5kKSxcbiAgXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIGNvbnN0IFtyaWdodFN0YXJ0LCByaWdodEVuZF0gPSBbXG4gICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LnN0YXJ0KSxcbiAgICArdG9EYXRlKGludGVydmFsUmlnaHQuZW5kKSxcbiAgXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG5cbiAgLy8gUHJldmVudCBOYU4gcmVzdWx0IGlmIGludGVydmFscyBkb24ndCBvdmVybGFwIGF0IGFsbC5cbiAgY29uc3QgaXNPdmVybGFwcGluZyA9IGxlZnRTdGFydCA8IHJpZ2h0RW5kICYmIHJpZ2h0U3RhcnQgPCBsZWZ0RW5kO1xuICBpZiAoIWlzT3ZlcmxhcHBpbmcpIHJldHVybiAwO1xuXG4gIC8vIFJlbW92ZSB0aGUgdGltZXpvbmUgb2Zmc2V0IHRvIG5lZ2F0ZSB0aGUgRFNUIGVmZmVjdCBvbiBjYWxjdWxhdGlvbnMuXG4gIGNvbnN0IG92ZXJsYXBMZWZ0ID0gcmlnaHRTdGFydCA8IGxlZnRTdGFydCA/IGxlZnRTdGFydCA6IHJpZ2h0U3RhcnQ7XG4gIGNvbnN0IGxlZnQgPSBvdmVybGFwTGVmdCAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMob3ZlcmxhcExlZnQpO1xuICBjb25zdCBvdmVybGFwUmlnaHQgPSByaWdodEVuZCA+IGxlZnRFbmQgPyBsZWZ0RW5kIDogcmlnaHRFbmQ7XG4gIGNvbnN0IHJpZ2h0ID0gb3ZlcmxhcFJpZ2h0IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvdmVybGFwUmlnaHQpO1xuXG4gIC8vIENlaWwgdGhlIG51bWJlciB0byBpbmNsdWRlIHBhcnRpYWwgZGF5cyB0b28uXG4gIHJldHVybiBNYXRoLmNlaWwoKHJpZ2h0IC0gbGVmdCkgLyBtaWxsaXNlY29uZHNJbkRheSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHM7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgZ2V0U2Vjb25kc1xuICogQGNhdGVnb3J5IFNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIHNlY29uZHMgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIHNlY29uZHMgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICpcbiAqIEByZXR1cm5zIFRoZSBzZWNvbmRzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB0aGUgc2Vjb25kcyBvZiAyOSBGZWJydWFyeSAyMDEyIDExOjQ1OjA1LjEyMzpcbiAqIGNvbnN0IHJlc3VsdCA9IGdldFNlY29uZHMobmV3IERhdGUoMjAxMiwgMSwgMjksIDExLCA0NSwgNSwgMTIzKSlcbiAqIC8vPT4gNVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Vjb25kcyhkYXRlKSB7XG4gIHJldHVybiB0b0RhdGUoZGF0ZSkuZ2V0U2Vjb25kcygpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldFNlY29uZHM7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgZ2V0VGltZVxuICogQGNhdGVnb3J5IFRpbWVzdGFtcCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICpcbiAqIEByZXR1cm5zIFRoZSB0aW1lc3RhbXBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHRoZSB0aW1lc3RhbXAgb2YgMjkgRmVicnVhcnkgMjAxMiAxMTo0NTowNS4xMjM6XG4gKiBjb25zdCByZXN1bHQgPSBnZXRUaW1lKG5ldyBEYXRlKDIwMTIsIDEsIDI5LCAxMSwgNDUsIDUsIDEyMykpXG4gKiAvLz0+IDEzMzA1MTU5MDUxMjNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWUoZGF0ZSkge1xuICByZXR1cm4gK3RvRGF0ZShkYXRlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRUaW1lO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGdldFVuaXhUaW1lXG4gKiBAY2F0ZWdvcnkgVGltZXN0YW1wIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgc2Vjb25kcyB0aW1lc3RhbXAgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIHNlY29uZHMgdGltZXN0YW1wIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBUaGUgdGltZXN0YW1wXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB0aGUgdGltZXN0YW1wIG9mIDI5IEZlYnJ1YXJ5IDIwMTIgMTE6NDU6MDUgQ0VUOlxuICogY29uc3QgcmVzdWx0ID0gZ2V0VW5peFRpbWUobmV3IERhdGUoMjAxMiwgMSwgMjksIDExLCA0NSwgNSkpXG4gKiAvLz0+IDEzMzA1MTIzMDVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXhUaW1lKGRhdGUpIHtcbiAgcmV0dXJuIE1hdGgudHJ1bmMoK3RvRGF0ZShkYXRlKSAvIDEwMDApO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldFVuaXhUaW1lO1xuIiwgImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0ZSB9IGZyb20gXCIuL2dldERhdGUuanNcIjtcbmltcG9ydCB7IGdldERheSB9IGZyb20gXCIuL2dldERheS5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZk1vbnRoIH0gZnJvbSBcIi4vc3RhcnRPZk1vbnRoLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldFdlZWtPZk1vbnRofSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0V2Vla09mTW9udGhcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgd2VlayBvZiB0aGUgbW9udGggb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIHdlZWsgb2YgdGhlIG1vbnRoIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgd2VlayBvZiBtb250aFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBtb250aCBpcyA5IE5vdmVtYmVyIDIwMTc/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRXZWVrT2ZNb250aChuZXcgRGF0ZSgyMDE3LCAxMCwgOSkpXG4gKiAvLz0+IDJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCB3ZWVrU3RhcnRzT24gPVxuICAgIG9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICAwO1xuXG4gIGNvbnN0IGN1cnJlbnREYXlPZk1vbnRoID0gZ2V0RGF0ZSh0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pKTtcbiAgaWYgKGlzTmFOKGN1cnJlbnREYXlPZk1vbnRoKSkgcmV0dXJuIE5hTjtcblxuICBjb25zdCBzdGFydFdlZWtEYXkgPSBnZXREYXkoc3RhcnRPZk1vbnRoKGRhdGUsIG9wdGlvbnMpKTtcblxuICBsZXQgbGFzdERheU9mRmlyc3RXZWVrID0gd2Vla1N0YXJ0c09uIC0gc3RhcnRXZWVrRGF5O1xuICBpZiAobGFzdERheU9mRmlyc3RXZWVrIDw9IDApIGxhc3REYXlPZkZpcnN0V2VlayArPSA3O1xuXG4gIGNvbnN0IHJlbWFpbmluZ0RheXNBZnRlckZpcnN0V2VlayA9IGN1cnJlbnREYXlPZk1vbnRoIC0gbGFzdERheU9mRmlyc3RXZWVrO1xuICByZXR1cm4gTWF0aC5jZWlsKHJlbWFpbmluZ0RheXNBZnRlckZpcnN0V2VlayAvIDcpICsgMTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRXZWVrT2ZNb250aDtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGxhc3REYXlPZk1vbnRofSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgbGFzdERheU9mTW9udGhcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGxhc3QgZGF5IG9mIGEgbW9udGggZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBsYXN0IGRheSBvZiBhIG1vbnRoIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBsYXN0IGRheSBvZiBhIG1vbnRoXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBsYXN0IGRheSBvZiBhIG1vbnRoIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gbGFzdERheU9mTW9udGgobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gVHVlIFNlcCAzMCAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXN0RGF5T2ZNb250aChkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgbW9udGggPSBfZGF0ZS5nZXRNb250aCgpO1xuICBfZGF0ZS5zZXRGdWxsWWVhcihfZGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCArIDEsIDApO1xuICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIHRvRGF0ZShfZGF0ZSwgb3B0aW9ucz8uaW4pO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGxhc3REYXlPZk1vbnRoO1xuIiwgImltcG9ydCB7IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzLmpzXCI7XG5pbXBvcnQgeyBsYXN0RGF5T2ZNb250aCB9IGZyb20gXCIuL2xhc3REYXlPZk1vbnRoLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mTW9udGggfSBmcm9tIFwiLi9zdGFydE9mTW9udGguanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0V2Vla3NJbk1vbnRofSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0V2Vla3NJbk1vbnRoXG4gKiBAY2F0ZWdvcnkgV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciB3ZWVrcyBhIG1vbnRoIHNwYW5zLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgd2Vla3MgdGhlIG1vbnRoIGluIHRoZSBnaXZlbiBkYXRlIHNwYW5zLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNhbGVuZGFyIHdlZWtzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIHdlZWtzIGRvZXMgRmVicnVhcnkgMjAxNSBzcGFuP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2Vla3NJbk1vbnRoKG5ldyBEYXRlKDIwMTUsIDEsIDgpKVxuICogLy89PiA0XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRoZSB3ZWVrIHN0YXJ0cyBvbiBNb25kYXksXG4gKiAvLyBob3cgbWFueSBjYWxlbmRhciB3ZWVrcyBkb2VzIEp1bHkgMjAxNyBzcGFuP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2Vla3NJbk1vbnRoKG5ldyBEYXRlKDIwMTcsIDYsIDUpLCB7IHdlZWtTdGFydHNPbjogMSB9KVxuICogLy89PiA2XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrc0luTW9udGgoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBjb250ZXh0RGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIHJldHVybiAoXG4gICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyhcbiAgICAgIGxhc3REYXlPZk1vbnRoKGNvbnRleHREYXRlLCBvcHRpb25zKSxcbiAgICAgIHN0YXJ0T2ZNb250aChjb250ZXh0RGF0ZSwgb3B0aW9ucyksXG4gICAgICBvcHRpb25zLFxuICAgICkgKyAxXG4gICk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0V2Vla3NJbk1vbnRoO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0WWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldFllYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB5ZWFyIGlzIDIgSnVseSAyMDE0P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0WWVhcihuZXcgRGF0ZSgyMDE0LCA2LCAyKSlcbiAqIC8vPT4gMjAxNFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0WWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldEZ1bGxZZWFyKCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0WWVhcjtcbiIsICJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbkhvdXIgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBob3Vyc1RvTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgIENvbnZlcnNpb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCBob3VycyB0byBtaWxsaXNlY29uZHMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IGEgbnVtYmVyIG9mIGhvdXJzIHRvIGEgZnVsbCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBob3VycyAtIG51bWJlciBvZiBob3VycyB0byBiZSBjb252ZXJ0ZWRcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGhvdXJzIGNvbnZlcnRlZCB0byBtaWxsaXNlY29uZHNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCAyIGhvdXJzIHRvIG1pbGxpc2Vjb25kczpcbiAqIGNvbnN0IHJlc3VsdCA9IGhvdXJzVG9NaWxsaXNlY29uZHMoMilcbiAqIC8vPT4gNzIwMDAwMFxuICovXG5leHBvcnQgZnVuY3Rpb24gaG91cnNUb01pbGxpc2Vjb25kcyhob3Vycykge1xuICByZXR1cm4gTWF0aC50cnVuYyhob3VycyAqIG1pbGxpc2Vjb25kc0luSG91cik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaG91cnNUb01pbGxpc2Vjb25kcztcbiIsICJpbXBvcnQgeyBtaW51dGVzSW5Ib3VyIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgaG91cnNUb01pbnV0ZXNcbiAqIEBjYXRlZ29yeSBDb252ZXJzaW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgaG91cnMgdG8gbWludXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgYSBudW1iZXIgb2YgaG91cnMgdG8gYSBmdWxsIG51bWJlciBvZiBtaW51dGVzLlxuICpcbiAqIEBwYXJhbSBob3VycyAtIG51bWJlciBvZiBob3VycyB0byBiZSBjb252ZXJ0ZWRcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGhvdXJzIGNvbnZlcnRlZCBpbiBtaW51dGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgMiBob3VycyB0byBtaW51dGVzOlxuICogY29uc3QgcmVzdWx0ID0gaG91cnNUb01pbnV0ZXMoMilcbiAqIC8vPT4gMTIwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob3Vyc1RvTWludXRlcyhob3Vycykge1xuICByZXR1cm4gTWF0aC50cnVuYyhob3VycyAqIG1pbnV0ZXNJbkhvdXIpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGhvdXJzVG9NaW51dGVzO1xuIiwgImltcG9ydCB7IHNlY29uZHNJbkhvdXIgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBob3Vyc1RvU2Vjb25kc1xuICogQGNhdGVnb3J5IENvbnZlcnNpb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCBob3VycyB0byBzZWNvbmRzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCBhIG51bWJlciBvZiBob3VycyB0byBhIGZ1bGwgbnVtYmVyIG9mIHNlY29uZHMuXG4gKlxuICogQHBhcmFtIGhvdXJzIC0gVGhlIG51bWJlciBvZiBob3VycyB0byBiZSBjb252ZXJ0ZWRcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGhvdXJzIGNvbnZlcnRlZCBpbiBzZWNvbmRzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgMiBob3VycyB0byBzZWNvbmRzOlxuICogY29uc3QgcmVzdWx0ID0gaG91cnNUb1NlY29uZHMoMilcbiAqIC8vPT4gNzIwMFxuICovXG5leHBvcnQgZnVuY3Rpb24gaG91cnNUb1NlY29uZHMoaG91cnMpIHtcbiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMgKiBzZWNvbmRzSW5Ib3VyKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBob3Vyc1RvU2Vjb25kcztcbiIsICJpbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGludGVydmFsfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogVGhlIHtAbGluayBpbnRlcnZhbH0gZnVuY3Rpb24gcmVzdWx0IHR5cGUuIEl0IHJlc29sdmVzIHRoZSBwcm9wZXIgZGF0YSB0eXBlLlxuICogSXQgdXNlcyB0aGUgZmlyc3QgYXJndW1lbnQgZGF0ZSBvYmplY3QgdHlwZSwgc3RhcnRpbmcgZnJvbSB0aGUgc3RhcnQgYXJndW1lbnQsXG4gKiB0aGVuIHRoZSBlbmQgaW50ZXJ2YWwgZGF0ZS4gSWYgYSBjb250ZXh0IGZ1bmN0aW9uIGlzIHBhc3NlZCwgaXQgdXNlcyB0aGUgY29udGV4dFxuICogZnVuY3Rpb24gcmV0dXJuIHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpbnRlcnZhbFxuICogQGNhdGVnb3J5IEludGVydmFsIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYW4gaW50ZXJ2YWwgb2JqZWN0IGFuZCB2YWxpZGF0ZXMgaXRzIHZhbHVlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENyZWF0ZXMgYSBub3JtYWxpemVkIGludGVydmFsIG9iamVjdCBhbmQgdmFsaWRhdGVzIGl0cyB2YWx1ZXMuIElmIHRoZSBpbnRlcnZhbCBpcyBpbnZhbGlkLCBhbiBleGNlcHRpb24gaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gU3RhcnREYXRlIC0gU3RhcnQgZGF0ZSB0eXBlLlxuICogQHR5cGVQYXJhbSBFbmREYXRlIC0gRW5kIGRhdGUgdHlwZS5cbiAqIEB0eXBlUGFyYW0gT3B0aW9ucyAtIE9wdGlvbnMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gc3RhcnQgLSBUaGUgc3RhcnQgb2YgdGhlIGludGVydmFsLlxuICogQHBhcmFtIGVuZCAtIFRoZSBlbmQgb2YgdGhlIGludGVydmFsLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogQHRocm93cyBgU3RhcnQgZGF0ZSBpcyBpbnZhbGlkYCB3aGVuIGBzdGFydGAgaXMgaW52YWxpZC5cbiAqIEB0aHJvd3MgYEVuZCBkYXRlIGlzIGludmFsaWRgIHdoZW4gYGVuZGAgaXMgaW52YWxpZC5cbiAqIEB0aHJvd3MgYEVuZCBkYXRlIG11c3QgYmUgYWZ0ZXIgc3RhcnQgZGF0ZWAgd2hlbiBlbmQgaXMgYmVmb3JlIGBzdGFydGAgYW5kIGBvcHRpb25zLmFzc2VydFBvc2l0aXZlYCBpcyB0cnVlLlxuICpcbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIGFuZCB2YWxpZGF0ZWQgaW50ZXJ2YWwgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJ2YWwoc3RhcnQsIGVuZCwgb3B0aW9ucykge1xuICBjb25zdCBbX3N0YXJ0LCBfZW5kXSA9IG5vcm1hbGl6ZURhdGVzKG9wdGlvbnM/LmluLCBzdGFydCwgZW5kKTtcblxuICBpZiAoaXNOYU4oK19zdGFydCkpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdGFydCBkYXRlIGlzIGludmFsaWRcIik7XG4gIGlmIChpc05hTigrX2VuZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFbmQgZGF0ZSBpcyBpbnZhbGlkXCIpO1xuXG4gIGlmIChvcHRpb25zPy5hc3NlcnRQb3NpdGl2ZSAmJiArX3N0YXJ0ID4gK19lbmQpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkVuZCBkYXRlIG11c3QgYmUgYWZ0ZXIgc3RhcnQgZGF0ZVwiKTtcblxuICByZXR1cm4geyBzdGFydDogX3N0YXJ0LCBlbmQ6IF9lbmQgfTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpbnRlcnZhbDtcbiIsICJpbXBvcnQgeyBub3JtYWxpemVJbnRlcnZhbCB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplSW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluRGF5cyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbkRheXMuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbkhvdXJzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluSG91cnMuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbk1pbnV0ZXMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5NaW51dGVzLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5Nb250aHMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5Nb250aHMuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJblNlY29uZHMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5TZWNvbmRzLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5ZZWFycyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJblllYXJzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBpbnRlcnZhbFRvRHVyYXRpb259IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpbnRlcnZhbFRvRHVyYXRpb25cbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCBpbnRlcnZhbCB0byBkdXJhdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCBhbiBpbnRlcnZhbCBvYmplY3QgdG8gYSBkdXJhdGlvbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIGludGVydmFsIC0gVGhlIGludGVydmFsIHRvIGNvbnZlcnQgdG8gZHVyYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNvbnRleHQgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkdXJhdGlvbiBvYmplY3RcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHRoZSBkdXJhdGlvbiBiZXR3ZWVuIEphbnVhcnkgMTUsIDE5MjkgYW5kIEFwcmlsIDQsIDE5NjguXG4gKiBpbnRlcnZhbFRvRHVyYXRpb24oe1xuICogICBzdGFydDogbmV3IERhdGUoMTkyOSwgMCwgMTUsIDEyLCAwLCAwKSxcbiAqICAgZW5kOiBuZXcgRGF0ZSgxOTY4LCAzLCA0LCAxOSwgNSwgMClcbiAqIH0pO1xuICogLy89PiB7IHllYXJzOiAzOSwgbW9udGhzOiAyLCBkYXlzOiAyMCwgaG91cnM6IDcsIG1pbnV0ZXM6IDUsIHNlY29uZHM6IDAgfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJ2YWxUb0R1cmF0aW9uKGludGVydmFsLCBvcHRpb25zKSB7XG4gIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsKTtcbiAgY29uc3QgZHVyYXRpb24gPSB7fTtcblxuICBjb25zdCB5ZWFycyA9IGRpZmZlcmVuY2VJblllYXJzKGVuZCwgc3RhcnQpO1xuICBpZiAoeWVhcnMpIGR1cmF0aW9uLnllYXJzID0geWVhcnM7XG5cbiAgY29uc3QgcmVtYWluaW5nTW9udGhzID0gYWRkKHN0YXJ0LCB7IHllYXJzOiBkdXJhdGlvbi55ZWFycyB9KTtcbiAgY29uc3QgbW9udGhzID0gZGlmZmVyZW5jZUluTW9udGhzKGVuZCwgcmVtYWluaW5nTW9udGhzKTtcbiAgaWYgKG1vbnRocykgZHVyYXRpb24ubW9udGhzID0gbW9udGhzO1xuXG4gIGNvbnN0IHJlbWFpbmluZ0RheXMgPSBhZGQocmVtYWluaW5nTW9udGhzLCB7IG1vbnRoczogZHVyYXRpb24ubW9udGhzIH0pO1xuICBjb25zdCBkYXlzID0gZGlmZmVyZW5jZUluRGF5cyhlbmQsIHJlbWFpbmluZ0RheXMpO1xuICBpZiAoZGF5cykgZHVyYXRpb24uZGF5cyA9IGRheXM7XG5cbiAgY29uc3QgcmVtYWluaW5nSG91cnMgPSBhZGQocmVtYWluaW5nRGF5cywgeyBkYXlzOiBkdXJhdGlvbi5kYXlzIH0pO1xuICBjb25zdCBob3VycyA9IGRpZmZlcmVuY2VJbkhvdXJzKGVuZCwgcmVtYWluaW5nSG91cnMpO1xuICBpZiAoaG91cnMpIGR1cmF0aW9uLmhvdXJzID0gaG91cnM7XG5cbiAgY29uc3QgcmVtYWluaW5nTWludXRlcyA9IGFkZChyZW1haW5pbmdIb3VycywgeyBob3VyczogZHVyYXRpb24uaG91cnMgfSk7XG4gIGNvbnN0IG1pbnV0ZXMgPSBkaWZmZXJlbmNlSW5NaW51dGVzKGVuZCwgcmVtYWluaW5nTWludXRlcyk7XG4gIGlmIChtaW51dGVzKSBkdXJhdGlvbi5taW51dGVzID0gbWludXRlcztcblxuICBjb25zdCByZW1haW5pbmdTZWNvbmRzID0gYWRkKHJlbWFpbmluZ01pbnV0ZXMsIHsgbWludXRlczogZHVyYXRpb24ubWludXRlcyB9KTtcbiAgY29uc3Qgc2Vjb25kcyA9IGRpZmZlcmVuY2VJblNlY29uZHMoZW5kLCByZW1haW5pbmdTZWNvbmRzKTtcbiAgaWYgKHNlY29uZHMpIGR1cmF0aW9uLnNlY29uZHMgPSBzZWNvbmRzO1xuXG4gIHJldHVybiBkdXJhdGlvbjtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpbnRlcnZhbFRvRHVyYXRpb247XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIGxvY2FsZSBzdHJpbmcgKHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bCNsb2NhbGVzX2FyZ3VtZW50KS5cbiAqIEBkZXByZWNhdGVkXG4gKlxuICogW1RPRE9dIFJlbW92ZSBpbiB2NFxuICovXG5cbi8qKlxuICogVGhlIGZvcm1hdCBvcHRpb25zIChzZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvRGF0ZVRpbWVGb3JtYXQvRGF0ZVRpbWVGb3JtYXQjb3B0aW9ucylcbiAqL1xuXG4vKipcbiAqIFRoZSBsb2NhbGUgb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGludGxGb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlIHdpdGggSW50bC5EYXRlVGltZUZvcm1hdCAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9EYXRlVGltZUZvcm1hdCkuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LlxuICogVGhlIG1ldGhvZCB1c2VzIFtgSW50bC5EYXRlVGltZUZvcm1hdGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvRGF0ZVRpbWVGb3JtYXQpIGluc2lkZS5cbiAqIGZvcm1hdE9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIFtgSW50bC5EYXRlVGltZUZvcm1hdGAgb3B0aW9uc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9EYXRlVGltZUZvcm1hdCN1c2luZ19vcHRpb25zKVxuICpcbiAqID4gXHUyNkEwXHVGRTBGIFBsZWFzZSBub3RlIHRoYXQgYmVmb3JlIE5vZGUgdmVyc2lvbiAxMy4wLjAsIG9ubHkgdGhlIGxvY2FsZSBkYXRhIGZvciBlbi1VUyBpcyBhdmFpbGFibGUgYnkgZGVmYXVsdC5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGZvcm1hdFxuICpcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqXG4gKiBAdGhyb3dzIGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDQgT2N0b2JlciAyMDE5IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gaW50bEZvcm1hdChuZXcgRGF0ZSgyMDE5LCA5LCA0LCAxMiwgMzAsIDEzLCA0NTYpKVxuICogLy89PiAxMC80LzIwMTlcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gZm9ybWF0XG4gKiBAcGFyYW0gbG9jYWxlT3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIGxvY2FsZVxuICpcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqXG4gKiBAdGhyb3dzIGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDQgT2N0b2JlciAyMDE5IGluIEtvcmVhbi5cbiAqIC8vIENvbnZlcnQgdGhlIGRhdGUgd2l0aCBsb2NhbGUncyBvcHRpb25zLlxuICogY29uc3QgcmVzdWx0ID0gaW50bEZvcm1hdChuZXcgRGF0ZSgyMDE5LCA5LCA0LCAxMiwgMzAsIDEzLCA0NTYpLCB7XG4gKiAgIGxvY2FsZTogJ2tvLUtSJyxcbiAqIH0pXG4gKiAvLz0+IDIwMTkuIDEwLiA0LlxuICovXG5cbi8qKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBmb3JtYXRcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zIC0gVGhlIGZvcm1hdCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICpcbiAqIEB0aHJvd3MgYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgNCBPY3RvYmVyIDIwMTkuXG4gKiAvLyBDb252ZXJ0IHRoZSBkYXRlIHdpdGggZm9ybWF0J3Mgb3B0aW9ucy5cbiAqIGNvbnN0IHJlc3VsdCA9IGludGxGb3JtYXQuZGVmYXVsdChuZXcgRGF0ZSgyMDE5LCA5LCA0LCAxMiwgMzAsIDEzLCA0NTYpLCB7XG4gKiAgIHllYXI6ICdudW1lcmljJyxcbiAqICAgbW9udGg6ICdudW1lcmljJyxcbiAqICAgZGF5OiAnbnVtZXJpYycsXG4gKiAgIGhvdXI6ICdudW1lcmljJyxcbiAqIH0pXG4gKiAvLz0+IDEwLzQvMjAxOSwgMTIgUE1cbiAqL1xuXG4vKipcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gZm9ybWF0XG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucyAtIFRoZSBmb3JtYXQgb3B0aW9uc1xuICogQHBhcmFtIGxvY2FsZU9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBsb2NhbGVcbiAqXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKlxuICogQHRocm93cyBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCA0IE9jdG9iZXIgMjAxOSBpbiBHZXJtYW4uXG4gKiAvLyBDb252ZXJ0IHRoZSBkYXRlIHdpdGggZm9ybWF0J3Mgb3B0aW9ucyBhbmQgbG9jYWxlJ3Mgb3B0aW9ucy5cbiAqIGNvbnN0IHJlc3VsdCA9IGludGxGb3JtYXQobmV3IERhdGUoMjAxOSwgOSwgNCwgMTIsIDMwLCAxMywgNDU2KSwge1xuICogICB3ZWVrZGF5OiAnbG9uZycsXG4gKiAgIHllYXI6ICdudW1lcmljJyxcbiAqICAgbW9udGg6ICdsb25nJyxcbiAqICAgZGF5OiAnbnVtZXJpYycsXG4gKiB9LCB7XG4gKiAgIGxvY2FsZTogJ2RlLURFJyxcbiAqIH0pXG4gKiAvLz0+IEZyZWl0YWcsIDQuIE9rdG9iZXIgMjAxOVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRsRm9ybWF0KGRhdGUsIGZvcm1hdE9yTG9jYWxlLCBsb2NhbGVPcHRpb25zKSB7XG4gIGxldCBmb3JtYXRPcHRpb25zO1xuXG4gIGlmIChpc0Zvcm1hdE9wdGlvbnMoZm9ybWF0T3JMb2NhbGUpKSB7XG4gICAgZm9ybWF0T3B0aW9ucyA9IGZvcm1hdE9yTG9jYWxlO1xuICB9IGVsc2Uge1xuICAgIGxvY2FsZU9wdGlvbnMgPSBmb3JtYXRPckxvY2FsZTtcbiAgfVxuXG4gIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGVPcHRpb25zPy5sb2NhbGUsIGZvcm1hdE9wdGlvbnMpLmZvcm1hdChcbiAgICB0b0RhdGUoZGF0ZSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRm9ybWF0T3B0aW9ucyhvcHRzKSB7XG4gIHJldHVybiBvcHRzICE9PSB1bmRlZmluZWQgJiYgIShcImxvY2FsZVwiIGluIG9wdHMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGludGxGb3JtYXQ7XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQge1xuICBzZWNvbmRzSW5EYXksXG4gIHNlY29uZHNJbkhvdXIsXG4gIHNlY29uZHNJbk1pbnV0ZSxcbiAgc2Vjb25kc0luTW9udGgsXG4gIHNlY29uZHNJblF1YXJ0ZXIsXG4gIHNlY29uZHNJbldlZWssXG4gIHNlY29uZHNJblllYXIsXG59IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycy5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5Ib3VycyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbkhvdXJzLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5NaW51dGVzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluTWludXRlcy5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluU2Vjb25kcyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJblNlY29uZHMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGludGxGb3JtYXREaXN0YW5jZX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIFRoZSB1bml0IHVzZWQgdG8gZm9ybWF0IHRoZSBkaXN0YW5jZSBpbiB7QGxpbmsgaW50bEZvcm1hdERpc3RhbmNlfS5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGludGxGb3JtYXREaXN0YW5jZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXRzIGRpc3RhbmNlIGJldHdlZW4gdHdvIGRhdGVzIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybWF0XG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGVzIGFuZCBmb3JtYXRzIGl0IGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICpcbiAqIFRoZSBmdW5jdGlvbiB3aWxsIHBpY2sgdGhlIG1vc3QgYXBwcm9wcmlhdGUgdW5pdCBkZXBlbmRpbmcgb24gdGhlIGRpc3RhbmNlIGJldHdlZW4gZGF0ZXMuIEZvciBleGFtcGxlLCBpZiB0aGUgZGlzdGFuY2UgaXMgYSBmZXcgaG91cnMsIGl0IG1pZ2h0IHJldHVybiBgeCBob3Vyc2AuIElmIHRoZSBkaXN0YW5jZSBpcyBhIGZldyBtb250aHMsIGl0IG1pZ2h0IHJldHVybiBgeCBtb250aHNgLlxuICpcbiAqIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgdW5pdCB0byBmb3JjZSB1c2luZyBpdCByZWdhcmRsZXNzIG9mIHRoZSBkaXN0YW5jZSB0byBnZXQgYSByZXN1bHQgbGlrZSBgMTIzNDU2IGhvdXJzYC5cbiAqXG4gKiBTZWUgdGhlIHRhYmxlIGJlbG93IGZvciB0aGUgdW5pdCBwaWNraW5nIGxvZ2ljOlxuICpcbiAqIHwgRGlzdGFuY2UgYmV0d2VlbiBkYXRlcyB8IFJlc3VsdCAocGFzdCkgIHwgUmVzdWx0IChmdXR1cmUpIHxcbiAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHxcbiAqIHwgMCBzZWNvbmRzICAgICAgICAgICAgICB8IG5vdyAgICAgICAgICAgIHwgbm93ICAgICAgICAgICAgIHxcbiAqIHwgMS01OSBzZWNvbmRzICAgICAgICAgICB8IFggc2Vjb25kcyBhZ28gIHwgaW4gWCBzZWNvbmRzICAgIHxcbiAqIHwgMS01OSBtaW51dGVzICAgICAgICAgICB8IFggbWludXRlcyBhZ28gIHwgaW4gWCBtaW51dGVzICAgIHxcbiAqIHwgMS0yMyBob3VycyAgICAgICAgICAgICB8IFggaG91cnMgYWdvICAgIHwgaW4gWCBob3VycyAgICAgIHxcbiAqIHwgMSBkYXkgICAgICAgICAgICAgICAgICB8IHllc3RlcmRheSAgICAgIHwgdG9tb3Jyb3cgICAgICAgIHxcbiAqIHwgMi02IGRheXMgICAgICAgICAgICAgICB8IFggZGF5cyBhZ28gICAgIHwgaW4gWCBkYXlzICAgICAgIHxcbiAqIHwgNyBkYXlzICAgICAgICAgICAgICAgICB8IGxhc3Qgd2VlayAgICAgIHwgbmV4dCB3ZWVrICAgICAgIHxcbiAqIHwgOCBkYXlzLTEgbW9udGggICAgICAgICB8IFggd2Vla3MgYWdvICAgIHwgaW4gWCB3ZWVrcyAgICAgIHxcbiAqIHwgMSBtb250aCAgICAgICAgICAgICAgICB8IGxhc3QgbW9udGggICAgIHwgbmV4dCBtb250aCAgICAgIHxcbiAqIHwgMi0zIG1vbnRocyAgICAgICAgICAgICB8IFggbW9udGhzIGFnbyAgIHwgaW4gWCBtb250aHMgICAgIHxcbiAqIHwgMSBxdWFydGVyICAgICAgICAgICAgICB8IGxhc3QgcXVhcnRlciAgIHwgbmV4dCBxdWFydGVyICAgIHxcbiAqIHwgMi0zIHF1YXJ0ZXJzICAgICAgICAgICB8IFggcXVhcnRlcnMgYWdvIHwgaW4gWCBxdWFydGVycyAgIHxcbiAqIHwgMSB5ZWFyICAgICAgICAgICAgICAgICB8IGxhc3QgeWVhciAgICAgIHwgbmV4dCB5ZWFyICAgICAgIHxcbiAqIHwgMisgeWVhcnMgICAgICAgICAgICAgICB8IFggeWVhcnMgYWdvICAgIHwgaW4gWCB5ZWFycyAgICAgIHxcbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIFNlZSBNRE4gZm9yIGRldGFpbHMgW0xvY2FsZSBpZGVudGlmaWNhdGlvbiBhbmQgbmVnb3RpYXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwjbG9jYWxlX2lkZW50aWZpY2F0aW9uX2FuZF9uZWdvdGlhdGlvbilcbiAqIFRoZSBuYXJyb3cgb25lIGNvdWxkIGJlIHNpbWlsYXIgdG8gdGhlIHNob3J0IG9uZSBmb3Igc29tZSBsb2NhbGVzLlxuICpcbiAqIEByZXR1cm5zIFRoZSBkaXN0YW5jZSBpbiB3b3JkcyBhY2NvcmRpbmcgdG8gbGFuZ3VhZ2Utc2Vuc2l0aXZlIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZy5cbiAqXG4gKiBAdGhyb3dzIGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3MgYGJhc2VEYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3MgYG9wdGlvbnMudW5pdGAgbXVzdCBub3QgYmUgaW52YWxpZCBVbml0XG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBub3QgYmUgaW52YWxpZCBsb2NhbGVcbiAqIEB0aHJvd3MgYG9wdGlvbnMubG9jYWxlTWF0Y2hlcmAgbXVzdCBub3QgYmUgaW52YWxpZCBsb2NhbGVNYXRjaGVyXG4gKiBAdGhyb3dzIGBvcHRpb25zLm51bWVyaWNgIG11c3Qgbm90IGJlIGludmFsaWQgbnVtZXJpY1xuICogQHRocm93cyBgb3B0aW9ucy5zdHlsZWAgbXVzdCBub3QgYmUgaW52YWxpZCBzdHlsZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGF0IGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBkYXRlcyB3aGVuIHRoZSBmaXN0IGRhdGUgaXMgYWZ0ZXIgdGhlIHNlY29uZD9cbiAqIGludGxGb3JtYXREaXN0YW5jZShcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTEsIDMwLCAwKSxcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTAsIDMwLCAwKVxuICogKVxuICogLy89PiAnaW4gMSBob3VyJ1xuICpcbiAqIC8vIFdoYXQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGRhdGVzIHdoZW4gdGhlIGZpc3QgZGF0ZSBpcyBiZWZvcmUgdGhlIHNlY29uZD9cbiAqIGludGxGb3JtYXREaXN0YW5jZShcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTAsIDMwLCAwKSxcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTEsIDMwLCAwKVxuICogKVxuICogLy89PiAnMSBob3VyIGFnbydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVXNlIHRoZSB1bml0IG9wdGlvbiB0byBmb3JjZSB0aGUgZnVuY3Rpb24gdG8gb3V0cHV0IHRoZSByZXN1bHQgaW4gcXVhcnRlcnMuIFdpdGhvdXQgc2V0dGluZyBpdCwgdGhlIGV4YW1wbGUgd291bGQgcmV0dXJuIFwibmV4dCB5ZWFyXCJcbiAqIGludGxGb3JtYXREaXN0YW5jZShcbiAqICAgbmV3IERhdGUoMTk4NywgNiwgNCwgMTAsIDMwLCAwKSxcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTAsIDMwLCAwKSxcbiAqICAgeyB1bml0OiAncXVhcnRlcicgfVxuICogKVxuICogLy89PiAnaW4gNSBxdWFydGVycydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVXNlIHRoZSBsb2NhbGUgb3B0aW9uIHRvIGdldCB0aGUgcmVzdWx0IGluIFNwYW5pc2guIFdpdGhvdXQgc2V0dGluZyBpdCwgdGhlIGV4YW1wbGUgd291bGQgcmV0dXJuIFwiaW4gMSBob3VyXCIuXG4gKiBpbnRsRm9ybWF0RGlzdGFuY2UoXG4gKiAgIG5ldyBEYXRlKDE5ODYsIDMsIDQsIDExLCAzMCwgMCksXG4gKiAgIG5ldyBEYXRlKDE5ODYsIDMsIDQsIDEwLCAzMCwgMCksXG4gKiAgIHsgbG9jYWxlOiAnZXMnIH1cbiAqIClcbiAqIC8vPT4gJ2RlbnRybyBkZSAxIGhvcmEnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFVzZSB0aGUgbnVtZXJpYyBvcHRpb24gdG8gZm9yY2UgdGhlIGZ1bmN0aW9uIHRvIHVzZSBudW1lcmljIHZhbHVlcy4gV2l0aG91dCBzZXR0aW5nIGl0LCB0aGUgZXhhbXBsZSB3b3VsZCByZXR1cm4gXCJ0b21vcnJvd1wiLlxuICogaW50bEZvcm1hdERpc3RhbmNlKFxuICogICBuZXcgRGF0ZSgxOTg2LCAzLCA1LCAxMSwgMzAsIDApLFxuICogICBuZXcgRGF0ZSgxOTg2LCAzLCA0LCAxMSwgMzAsIDApLFxuICogICB7IG51bWVyaWM6ICdhbHdheXMnIH1cbiAqIClcbiAqIC8vPT4gJ2luIDEgZGF5J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVc2UgdGhlIHN0eWxlIG9wdGlvbiB0byBmb3JjZSB0aGUgZnVuY3Rpb24gdG8gdXNlIHNob3J0IHZhbHVlcy4gV2l0aG91dCBzZXR0aW5nIGl0LCB0aGUgZXhhbXBsZSB3b3VsZCByZXR1cm4gXCJpbiAyIHllYXJzXCIuXG4gKiBpbnRsRm9ybWF0RGlzdGFuY2UoXG4gKiAgIG5ldyBEYXRlKDE5ODgsIDMsIDQsIDExLCAzMCwgMCksXG4gKiAgIG5ldyBEYXRlKDE5ODYsIDMsIDQsIDExLCAzMCwgMCksXG4gKiAgIHsgc3R5bGU6ICdzaG9ydCcgfVxuICogKVxuICogLy89PiAnaW4gMiB5cidcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGxGb3JtYXREaXN0YW5jZShsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGxldCB2YWx1ZSA9IDA7XG4gIGxldCB1bml0O1xuXG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuXG4gIGlmICghb3B0aW9ucz8udW5pdCkge1xuICAgIC8vIEdldCB0aGUgdW5pdCBiYXNlZCBvbiBkaWZmSW5TZWNvbmRzIGNhbGN1bGF0aW9ucyBpZiBubyB1bml0IGlzIHNwZWNpZmllZFxuICAgIGNvbnN0IGRpZmZJblNlY29uZHMgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7IC8vIFRoZSBzbWFsbGVzdCB1bml0XG5cbiAgICBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5NaW51dGUpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluU2Vjb25kcyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICAgICAgdW5pdCA9IFwic2Vjb25kXCI7XG4gICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbkhvdXIpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluTWludXRlcyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICAgICAgdW5pdCA9IFwibWludXRlXCI7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luRGF5ICYmXG4gICAgICBNYXRoLmFicyhkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSkgPCAxXG4gICAgKSB7XG4gICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJbkhvdXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7XG4gICAgICB1bml0ID0gXCJob3VyXCI7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luV2VlayAmJlxuICAgICAgKHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXykpICYmXG4gICAgICBNYXRoLmFicyh2YWx1ZSkgPCA3XG4gICAgKSB7XG4gICAgICB1bml0ID0gXCJkYXlcIjtcbiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luTW9udGgpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICAgICAgdW5pdCA9IFwid2Vla1wiO1xuICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5RdWFydGVyKSB7XG4gICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7XG4gICAgICB1bml0ID0gXCJtb250aFwiO1xuICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5ZZWFyKSB7XG4gICAgICBpZiAoZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pIDwgNCkge1xuICAgICAgICAvLyBUbyBmaWx0ZXIgb3V0IGNhc2VzIHRoYXQgYXJlIGxlc3MgdGhhbiBhIHllYXIgYnV0IG1hdGNoIDQgcXVhcnRlcnNcbiAgICAgICAgdmFsdWUgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7XG4gICAgICAgIHVuaXQgPSBcInF1YXJ0ZXJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICAgICAgICB1bml0ID0gXCJ5ZWFyXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICAgICAgdW5pdCA9IFwieWVhclwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIHZhbHVlIGlmIHVuaXQgaXMgc3BlY2lmaWVkXG4gICAgdW5pdCA9IG9wdGlvbnM/LnVuaXQ7XG4gICAgaWYgKHVuaXQgPT09IFwic2Vjb25kXCIpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluU2Vjb25kcyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJtaW51dGVcIikge1xuICAgICAgdmFsdWUgPSBkaWZmZXJlbmNlSW5NaW51dGVzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09PSBcImhvdXJcIikge1xuICAgICAgdmFsdWUgPSBkaWZmZXJlbmNlSW5Ib3VycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJkYXlcIikge1xuICAgICAgdmFsdWUgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTtcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwid2Vla1wiKSB7XG4gICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTtcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwibW9udGhcIikge1xuICAgICAgdmFsdWUgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJxdWFydGVyXCIpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJ5ZWFyXCIpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJ0ZiA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChvcHRpb25zPy5sb2NhbGUsIHtcbiAgICBudW1lcmljOiBcImF1dG9cIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcblxuICByZXR1cm4gcnRmLmZvcm1hdCh2YWx1ZSwgdW5pdCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaW50bEZvcm1hdERpc3RhbmNlO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzQWZ0ZXJcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGZpcnN0IGRhdGUgYWZ0ZXIgdGhlIHNlY29uZCBvbmU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZmlyc3QgZGF0ZSBhZnRlciB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRoYXQgc2hvdWxkIGJlIGFmdGVyIHRoZSBvdGhlciBvbmUgdG8gcmV0dXJuIHRydWVcbiAqIEBwYXJhbSBkYXRlVG9Db21wYXJlIC0gVGhlIGRhdGUgdG8gY29tcGFyZSB3aXRoXG4gKlxuICogQHJldHVybnMgVGhlIGZpcnN0IGRhdGUgaXMgYWZ0ZXIgdGhlIHNlY29uZCBkYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElzIDEwIEp1bHkgMTk4OSBhZnRlciAxMSBGZWJydWFyeSAxOTg3P1xuICogY29uc3QgcmVzdWx0ID0gaXNBZnRlcihuZXcgRGF0ZSgxOTg5LCA2LCAxMCksIG5ldyBEYXRlKDE5ODcsIDEsIDExKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBZnRlcihkYXRlLCBkYXRlVG9Db21wYXJlKSB7XG4gIHJldHVybiArdG9EYXRlKGRhdGUpID4gK3RvRGF0ZShkYXRlVG9Db21wYXJlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0FmdGVyO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzQmVmb3JlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBmaXJzdCBkYXRlIGJlZm9yZSB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBmaXJzdCBkYXRlIGJlZm9yZSB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRoYXQgc2hvdWxkIGJlIGJlZm9yZSB0aGUgb3RoZXIgb25lIHRvIHJldHVybiB0cnVlXG4gKiBAcGFyYW0gZGF0ZVRvQ29tcGFyZSAtIFRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aFxuICpcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBkYXRlIGlzIGJlZm9yZSB0aGUgc2Vjb25kIGRhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXMgMTAgSnVseSAxOTg5IGJlZm9yZSAxMSBGZWJydWFyeSAxOTg3P1xuICogY29uc3QgcmVzdWx0ID0gaXNCZWZvcmUobmV3IERhdGUoMTk4OSwgNiwgMTApLCBuZXcgRGF0ZSgxOTg3LCAxLCAxMSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JlZm9yZShkYXRlLCBkYXRlVG9Db21wYXJlKSB7XG4gIHJldHVybiArdG9EYXRlKGRhdGUpIDwgK3RvRGF0ZShkYXRlVG9Db21wYXJlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0JlZm9yZTtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpc0VxdWFsXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgZXF1YWw/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBcmUgdGhlIGdpdmVuIGRhdGVzIGVxdWFsP1xuICpcbiAqIEBwYXJhbSBkYXRlTGVmdCAtIFRoZSBmaXJzdCBkYXRlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSBkYXRlUmlnaHQgLSBUaGUgc2Vjb25kIGRhdGUgdG8gY29tcGFyZVxuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlcyBhcmUgZXF1YWxcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDIgSnVseSAyMDE0IDA2OjMwOjQ1LjAwMCBhbmQgMiBKdWx5IDIwMTQgMDY6MzA6NDUuNTAwIGVxdWFsP1xuICogY29uc3QgcmVzdWx0ID0gaXNFcXVhbChcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgNiwgMzAsIDQ1LCAwKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgNiwgMzAsIDQ1LCA1MDApXG4gKiApXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VxdWFsKGxlZnREYXRlLCByaWdodERhdGUpIHtcbiAgcmV0dXJuICt0b0RhdGUobGVmdERhdGUpID09PSArdG9EYXRlKHJpZ2h0RGF0ZSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNFcXVhbDtcbiIsICIvKipcbiAqIEBuYW1lIGlzRXhpc3RzXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIGV4aXN0cz9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGNvbnZlcnQgdG8gYW4gZXhpc3RpbmcgZGF0ZS5cbiAqXG4gKiBAcGFyYW0geWVhciAtIFRoZSB5ZWFyIG9mIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gbW9udGggLSBUaGUgbW9udGggb2YgdGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBkYXkgLSBUaGUgZGF5IG9mIHRoZSBkYXRlIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBkYXRlIGV4aXN0c1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0V4aXN0cygyMDE4LCAwLCAzMSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRXhpc3RzKDIwMTgsIDEsIDMxKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFeGlzdHMoeWVhciwgbW9udGgsIGRheSkge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XG4gIHJldHVybiAoXG4gICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aCAmJlxuICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBkYXlcbiAgKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0V4aXN0cztcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGlzRmlyc3REYXlPZk1vbnRofSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgaXNGaXJzdERheU9mTW9udGhcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB0aGUgZmlyc3QgZGF5IG9mIGEgbW9udGg/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSB0aGUgZmlyc3QgZGF5IG9mIGEgbW9udGg/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGUgaXMgdGhlIGZpcnN0IGRheSBvZiBhIG1vbnRoXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElzIDEgU2VwdGVtYmVyIDIwMTQgdGhlIGZpcnN0IGRheSBvZiBhIG1vbnRoP1xuICogY29uc3QgcmVzdWx0ID0gaXNGaXJzdERheU9mTW9udGgobmV3IERhdGUoMjAxNCwgOCwgMSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmlyc3REYXlPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF0ZSgpID09PSAxO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzRmlyc3REYXlPZk1vbnRoO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgaXNGcmlkYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpc0ZyaWRheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgRnJpZGF5P1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgRnJpZGF5P1xuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIEZyaWRheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJcyAyNiBTZXB0ZW1iZXIgMjAxNCBGcmlkYXk/XG4gKiBjb25zdCByZXN1bHQgPSBpc0ZyaWRheShuZXcgRGF0ZSgyMDE0LCA4LCAyNikpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJpZGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNGcmlkYXk7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgaXNGdXR1cmVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIGZ1dHVyZT9cbiAqIEBwdXJlIGZhbHNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgZnV0dXJlP1xuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZSBpcyBpbiB0aGUgZnV0dXJlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDYgT2N0b2JlciAyMDE0LCBpcyAzMSBEZWNlbWJlciAyMDE0IGluIHRoZSBmdXR1cmU/XG4gKiBjb25zdCByZXN1bHQgPSBpc0Z1dHVyZShuZXcgRGF0ZSgyMDE0LCAxMSwgMzEpKVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1dHVyZShkYXRlKSB7XG4gIHJldHVybiArdG9EYXRlKGRhdGUpID4gRGF0ZS5ub3coKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0Z1dHVyZTtcbiIsICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIHRyYW5zcG9zZVxuICogQGNhdGVnb3J5IEdlbmVyaWMgSGVscGVyc1xuICogQHN1bW1hcnkgVHJhbnNwb3NlIHRoZSBkYXRlIHRvIHRoZSBnaXZlbiBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBmdW5jdGlvbiB0cmFuc3Bvc2VzIHRoZSBkYXRlIHRvIHRoZSBnaXZlbiBjb25zdHJ1Y3Rvci4gSXQgaGVscHMgeW91XG4gKiB0byB0cmFuc3Bvc2UgdGhlIGRhdGUgaW4gdGhlIHN5c3RlbSB0aW1lIHpvbmUgdG8gc2F5IGBVVENEYXRlYCBvciBhbnkgb3RoZXJcbiAqIGRhdGUgZXh0ZW5zaW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gSW5wdXREYXRlIC0gVGhlIGlucHV0IGBEYXRlYCB0eXBlIGRlcml2ZWQgZnJvbSB0aGUgcGFzc2VkIGFyZ3VtZW50LlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSBkZXJpdmVkIGZyb20gdGhlIHBhc3NlZCBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIHVzZSB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIGNvbnN0cnVjdG9yIC0gVGhlIGRhdGUgY29uc3RydWN0b3IgdG8gdXNlXG4gKlxuICogQHJldHVybnMgRGF0ZSB0cmFuc3Bvc2VkIHRvIHRoZSBnaXZlbiBjb25zdHJ1Y3RvclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgSnVseSAxMCwgMjAyMiAwMDowMCBpbiBsb2NhbGUgdGltZSB6b25lXG4gKiBjb25zdCBkYXRlID0gbmV3IERhdGUoMjAyMiwgNiwgMTApXG4gKiAvLz0+ICdTdW4gSnVsIDEwIDIwMjIgMDA6MDA6MDAgR01UKzA4MDAgKFNpbmdhcG9yZSBTdGFuZGFyZCBUaW1lKSdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVHJhbnNwb3NlIHRoZSBkYXRlIHRvIEp1bHkgMTAsIDIwMjIgMDA6MDAgaW4gVVRDXG4gKiB0cmFuc3Bvc2UoZGF0ZSwgVVRDRGF0ZSlcbiAqIC8vPT4gJ1N1biBKdWwgMTAgMjAyMiAwMDowMDowMCBHTVQrMDAwMCAoQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUpJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKGRhdGUsIGNvbnN0cnVjdG9yKSB7XG4gIGNvbnN0IGRhdGVfID0gaXNDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcilcbiAgICA/IG5ldyBjb25zdHJ1Y3RvcigwKVxuICAgIDogY29uc3RydWN0RnJvbShjb25zdHJ1Y3RvciwgMCk7XG4gIGRhdGVfLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XG4gIGRhdGVfLnNldEhvdXJzKFxuICAgIGRhdGUuZ2V0SG91cnMoKSxcbiAgICBkYXRlLmdldE1pbnV0ZXMoKSxcbiAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpLFxuICApO1xuICByZXR1cm4gZGF0ZV87XG59XG5cbmZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoY29uc3RydWN0b3IpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgY29uc3RydWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZT8uY29uc3RydWN0b3IgPT09IGNvbnN0cnVjdG9yXG4gICk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgdHJhbnNwb3NlO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi4vLi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgdHJhbnNwb3NlIH0gZnJvbSBcIi4uLy4uL3RyYW5zcG9zZS5qc1wiO1xuXG5jb25zdCBUSU1FWk9ORV9VTklUX1BSSU9SSVRZID0gMTA7XG5cbmV4cG9ydCBjbGFzcyBTZXR0ZXIge1xuICBzdWJQcmlvcml0eSA9IDA7XG5cbiAgdmFsaWRhdGUoX3V0Y0RhdGUsIF9vcHRpb25zKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZhbHVlU2V0dGVyIGV4dGVuZHMgU2V0dGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgdmFsdWUsXG5cbiAgICB2YWxpZGF0ZVZhbHVlLFxuXG4gICAgc2V0VmFsdWUsXG5cbiAgICBwcmlvcml0eSxcbiAgICBzdWJQcmlvcml0eSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlID0gdmFsaWRhdGVWYWx1ZTtcbiAgICB0aGlzLnNldFZhbHVlID0gc2V0VmFsdWU7XG4gICAgdGhpcy5wcmlvcml0eSA9IHByaW9yaXR5O1xuICAgIGlmIChzdWJQcmlvcml0eSkge1xuICAgICAgdGhpcy5zdWJQcmlvcml0eSA9IHN1YlByaW9yaXR5O1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKGRhdGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVZhbHVlKGRhdGUsIHRoaXMudmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgc2V0KGRhdGUsIGZsYWdzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0VmFsdWUoZGF0ZSwgZmxhZ3MsIHRoaXMudmFsdWUsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlVGltZXpvbmVTZXR0ZXIgZXh0ZW5kcyBTZXR0ZXIge1xuICBwcmlvcml0eSA9IFRJTUVaT05FX1VOSVRfUFJJT1JJVFk7XG4gIHN1YlByaW9yaXR5ID0gLTE7XG5cbiAgY29uc3RydWN0b3IoY29udGV4dCwgcmVmZXJlbmNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0IHx8ICgoZGF0ZSkgPT4gY29uc3RydWN0RnJvbShyZWZlcmVuY2UsIGRhdGUpKTtcbiAgfVxuXG4gIHNldChkYXRlLCBmbGFncykge1xuICAgIGlmIChmbGFncy50aW1lc3RhbXBJc1NldCkgcmV0dXJuIGRhdGU7XG4gICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oZGF0ZSwgdHJhbnNwb3NlKGRhdGUsIHRoaXMuY29udGV4dCkpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgVmFsdWVTZXR0ZXIgfSBmcm9tIFwiLi9TZXR0ZXIuanNcIjtcblxuZXhwb3J0IGNsYXNzIFBhcnNlciB7XG4gIHJ1bihkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gsIG9wdGlvbnMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCwgb3B0aW9ucyk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzZXR0ZXI6IG5ldyBWYWx1ZVNldHRlcihcbiAgICAgICAgcmVzdWx0LnZhbHVlLFxuICAgICAgICB0aGlzLnZhbGlkYXRlLFxuICAgICAgICB0aGlzLnNldCxcbiAgICAgICAgdGhpcy5wcmlvcml0eSxcbiAgICAgICAgdGhpcy5zdWJQcmlvcml0eSxcbiAgICAgICksXG4gICAgICByZXN0OiByZXN1bHQucmVzdCxcbiAgICB9O1xuICB9XG5cbiAgdmFsaWRhdGUoX3V0Y0RhdGUsIF92YWx1ZSwgX29wdGlvbnMpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcblxuZXhwb3J0IGNsYXNzIEVyYVBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gMTQwO1xuXG4gIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCkge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEFELCBCQ1xuICAgICAgY2FzZSBcIkdcIjpcbiAgICAgIGNhc2UgXCJHR1wiOlxuICAgICAgY2FzZSBcIkdHR1wiOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1hdGNoLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiBcImFiYnJldmlhdGVkXCIgfSkgfHxcbiAgICAgICAgICBtYXRjaC5lcmEoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJuYXJyb3dcIiB9KVxuICAgICAgICApO1xuXG4gICAgICAvLyBBLCBCXG4gICAgICBjYXNlIFwiR0dHR0dcIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiBcIm5hcnJvd1wiIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcbiAgICAgIGNhc2UgXCJHR0dHXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1hdGNoLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiBcIndpZGVcIiB9KSB8fFxuICAgICAgICAgIG1hdGNoLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiBcImFiYnJldmlhdGVkXCIgfSkgfHxcbiAgICAgICAgICBtYXRjaC5lcmEoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJuYXJyb3dcIiB9KVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNldChkYXRlLCBmbGFncywgdmFsdWUpIHtcbiAgICBmbGFncy5lcmEgPSB2YWx1ZTtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKHZhbHVlLCAwLCAxKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1wiUlwiLCBcInVcIiwgXCJ0XCIsIFwiVFwiXTtcbn1cbiIsICJleHBvcnQgY29uc3QgbnVtZXJpY1BhdHRlcm5zID0ge1xuICBtb250aDogL14oMVswLTJdfDA/XFxkKS8sIC8vIDAgdG8gMTJcbiAgZGF0ZTogL14oM1swLTFdfFswLTJdP1xcZCkvLCAvLyAwIHRvIDMxXG4gIGRheU9mWWVhcjogL14oMzZbMC02XXwzWzAtNV1cXGR8WzAtMl0/XFxkP1xcZCkvLCAvLyAwIHRvIDM2NlxuICB3ZWVrOiAvXig1WzAtM118WzAtNF0/XFxkKS8sIC8vIDAgdG8gNTNcbiAgaG91cjIzaDogL14oMlswLTNdfFswLTFdP1xcZCkvLCAvLyAwIHRvIDIzXG4gIGhvdXIyNGg6IC9eKDJbMC00XXxbMC0xXT9cXGQpLywgLy8gMCB0byAyNFxuICBob3VyMTFoOiAvXigxWzAtMV18MD9cXGQpLywgLy8gMCB0byAxMVxuICBob3VyMTJoOiAvXigxWzAtMl18MD9cXGQpLywgLy8gMCB0byAxMlxuICBtaW51dGU6IC9eWzAtNV0/XFxkLywgLy8gMCB0byA1OVxuICBzZWNvbmQ6IC9eWzAtNV0/XFxkLywgLy8gMCB0byA1OVxuXG4gIHNpbmdsZURpZ2l0OiAvXlxcZC8sIC8vIDAgdG8gOVxuICB0d29EaWdpdHM6IC9eXFxkezEsMn0vLCAvLyAwIHRvIDk5XG4gIHRocmVlRGlnaXRzOiAvXlxcZHsxLDN9LywgLy8gMCB0byA5OTlcbiAgZm91ckRpZ2l0czogL15cXGR7MSw0fS8sIC8vIDAgdG8gOTk5OVxuXG4gIGFueURpZ2l0c1NpZ25lZDogL14tP1xcZCsvLFxuICBzaW5nbGVEaWdpdFNpZ25lZDogL14tP1xcZC8sIC8vIDAgdG8gOSwgLTAgdG8gLTlcbiAgdHdvRGlnaXRzU2lnbmVkOiAvXi0/XFxkezEsMn0vLCAvLyAwIHRvIDk5LCAtMCB0byAtOTlcbiAgdGhyZWVEaWdpdHNTaWduZWQ6IC9eLT9cXGR7MSwzfS8sIC8vIDAgdG8gOTk5LCAtMCB0byAtOTk5XG4gIGZvdXJEaWdpdHNTaWduZWQ6IC9eLT9cXGR7MSw0fS8sIC8vIDAgdG8gOTk5OSwgLTAgdG8gLTk5OTlcbn07XG5cbmV4cG9ydCBjb25zdCB0aW1lem9uZVBhdHRlcm5zID0ge1xuICBiYXNpY09wdGlvbmFsTWludXRlczogL14oWystXSkoXFxkezJ9KShcXGR7Mn0pP3xaLyxcbiAgYmFzaWM6IC9eKFsrLV0pKFxcZHsyfSkoXFxkezJ9KXxaLyxcbiAgYmFzaWNPcHRpb25hbFNlY29uZHM6IC9eKFsrLV0pKFxcZHsyfSkoXFxkezJ9KSgoXFxkezJ9KSk/fFovLFxuICBleHRlbmRlZDogL14oWystXSkoXFxkezJ9KTooXFxkezJ9KXxaLyxcbiAgZXh0ZW5kZWRPcHRpb25hbFNlY29uZHM6IC9eKFsrLV0pKFxcZHsyfSk6KFxcZHsyfSkoOihcXGR7Mn0pKT98Wi8sXG59O1xuIiwgImltcG9ydCB7XG4gIG1pbGxpc2Vjb25kc0luSG91cixcbiAgbWlsbGlzZWNvbmRzSW5NaW51dGUsXG4gIG1pbGxpc2Vjb25kc0luU2Vjb25kLFxufSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLmpzXCI7XG5cbmltcG9ydCB7IG51bWVyaWNQYXR0ZXJucyB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbWFwVmFsdWUocGFyc2VGblJlc3VsdCwgbWFwRm4pIHtcbiAgaWYgKCFwYXJzZUZuUmVzdWx0KSB7XG4gICAgcmV0dXJuIHBhcnNlRm5SZXN1bHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiBtYXBGbihwYXJzZUZuUmVzdWx0LnZhbHVlKSxcbiAgICByZXN0OiBwYXJzZUZuUmVzdWx0LnJlc3QsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWVyaWNQYXR0ZXJuKHBhdHRlcm4sIGRhdGVTdHJpbmcpIHtcbiAgY29uc3QgbWF0Y2hSZXN1bHQgPSBkYXRlU3RyaW5nLm1hdGNoKHBhdHRlcm4pO1xuXG4gIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHBhcnNlSW50KG1hdGNoUmVzdWx0WzBdLCAxMCksXG4gICAgcmVzdDogZGF0ZVN0cmluZy5zbGljZShtYXRjaFJlc3VsdFswXS5sZW5ndGgpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUaW1lem9uZVBhdHRlcm4ocGF0dGVybiwgZGF0ZVN0cmluZykge1xuICBjb25zdCBtYXRjaFJlc3VsdCA9IGRhdGVTdHJpbmcubWF0Y2gocGF0dGVybik7XG5cbiAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gSW5wdXQgaXMgJ1onXG4gIGlmIChtYXRjaFJlc3VsdFswXSA9PT0gXCJaXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IDAsXG4gICAgICByZXN0OiBkYXRlU3RyaW5nLnNsaWNlKDEpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBzaWduID0gbWF0Y2hSZXN1bHRbMV0gPT09IFwiK1wiID8gMSA6IC0xO1xuICBjb25zdCBob3VycyA9IG1hdGNoUmVzdWx0WzJdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbMl0sIDEwKSA6IDA7XG4gIGNvbnN0IG1pbnV0ZXMgPSBtYXRjaFJlc3VsdFszXSA/IHBhcnNlSW50KG1hdGNoUmVzdWx0WzNdLCAxMCkgOiAwO1xuICBjb25zdCBzZWNvbmRzID0gbWF0Y2hSZXN1bHRbNV0gPyBwYXJzZUludChtYXRjaFJlc3VsdFs1XSwgMTApIDogMDtcblxuICByZXR1cm4ge1xuICAgIHZhbHVlOlxuICAgICAgc2lnbiAqXG4gICAgICAoaG91cnMgKiBtaWxsaXNlY29uZHNJbkhvdXIgK1xuICAgICAgICBtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUgK1xuICAgICAgICBzZWNvbmRzICogbWlsbGlzZWNvbmRzSW5TZWNvbmQpLFxuICAgIHJlc3Q6IGRhdGVTdHJpbmcuc2xpY2UobWF0Y2hSZXN1bHRbMF0ubGVuZ3RoKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQW55RGlnaXRzU2lnbmVkKGRhdGVTdHJpbmcpIHtcbiAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmFueURpZ2l0c1NpZ25lZCwgZGF0ZVN0cmluZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU5EaWdpdHMobiwgZGF0ZVN0cmluZykge1xuICBzd2l0Y2ggKG4pIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuc2luZ2xlRGlnaXQsIGRhdGVTdHJpbmcpO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy50d29EaWdpdHMsIGRhdGVTdHJpbmcpO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy50aHJlZURpZ2l0cywgZGF0ZVN0cmluZyk7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmZvdXJEaWdpdHMsIGRhdGVTdHJpbmcpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihuZXcgUmVnRXhwKFwiXlxcXFxkezEsXCIgKyBuICsgXCJ9XCIpLCBkYXRlU3RyaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VORGlnaXRzU2lnbmVkKG4sIGRhdGVTdHJpbmcpIHtcbiAgc3dpdGNoIChuKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnNpbmdsZURpZ2l0U2lnbmVkLCBkYXRlU3RyaW5nKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudHdvRGlnaXRzU2lnbmVkLCBkYXRlU3RyaW5nKTtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudGhyZWVEaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5mb3VyRGlnaXRzU2lnbmVkLCBkYXRlU3RyaW5nKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obmV3IFJlZ0V4cChcIl4tP1xcXFxkezEsXCIgKyBuICsgXCJ9XCIpLCBkYXRlU3RyaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF5UGVyaW9kRW51bVRvSG91cnMoZGF5UGVyaW9kKSB7XG4gIHN3aXRjaCAoZGF5UGVyaW9kKSB7XG4gICAgY2FzZSBcIm1vcm5pbmdcIjpcbiAgICAgIHJldHVybiA0O1xuICAgIGNhc2UgXCJldmVuaW5nXCI6XG4gICAgICByZXR1cm4gMTc7XG4gICAgY2FzZSBcInBtXCI6XG4gICAgY2FzZSBcIm5vb25cIjpcbiAgICBjYXNlIFwiYWZ0ZXJub29uXCI6XG4gICAgICByZXR1cm4gMTI7XG4gICAgY2FzZSBcImFtXCI6XG4gICAgY2FzZSBcIm1pZG5pZ2h0XCI6XG4gICAgY2FzZSBcIm5pZ2h0XCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUd29EaWdpdFllYXIodHdvRGlnaXRZZWFyLCBjdXJyZW50WWVhcikge1xuICBjb25zdCBpc0NvbW1vbkVyYSA9IGN1cnJlbnRZZWFyID4gMDtcbiAgLy8gQWJzb2x1dGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IHllYXI6XG4gIC8vIDEgLT4gMSBBQ1xuICAvLyAwIC0+IDEgQkNcbiAgLy8gLTEgLT4gMiBCQ1xuICBjb25zdCBhYnNDdXJyZW50WWVhciA9IGlzQ29tbW9uRXJhID8gY3VycmVudFllYXIgOiAxIC0gY3VycmVudFllYXI7XG5cbiAgbGV0IHJlc3VsdDtcbiAgaWYgKGFic0N1cnJlbnRZZWFyIDw9IDUwKSB7XG4gICAgcmVzdWx0ID0gdHdvRGlnaXRZZWFyIHx8IDEwMDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUVuZCA9IGFic0N1cnJlbnRZZWFyICsgNTA7XG4gICAgY29uc3QgcmFuZ2VFbmRDZW50dXJ5ID0gTWF0aC50cnVuYyhyYW5nZUVuZCAvIDEwMCkgKiAxMDA7XG4gICAgY29uc3QgaXNQcmV2aW91c0NlbnR1cnkgPSB0d29EaWdpdFllYXIgPj0gcmFuZ2VFbmQgJSAxMDA7XG4gICAgcmVzdWx0ID0gdHdvRGlnaXRZZWFyICsgcmFuZ2VFbmRDZW50dXJ5IC0gKGlzUHJldmlvdXNDZW50dXJ5ID8gMTAwIDogMCk7XG4gIH1cblxuICByZXR1cm4gaXNDb21tb25FcmEgPyByZXN1bHQgOiAxIC0gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMZWFwWWVhckluZGV4KHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApO1xufVxuIiwgImltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcblxuaW1wb3J0IHsgbWFwVmFsdWUsIG5vcm1hbGl6ZVR3b0RpZ2l0WWVhciwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbi8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfUGF0dGVybnNcbi8vIHwgWWVhciAgICAgfCAgICAgeSB8IHl5IHwgICB5eXkgfCAgeXl5eSB8IHl5eXl5IHxcbi8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbi8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbi8vIHwgQUQgMTIgICAgfCAgICAxMiB8IDEyIHwgICAwMTIgfCAgMDAxMiB8IDAwMDEyIHxcbi8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbi8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbi8vIHwgQUQgMTIzNDUgfCAxMjM0NSB8IDQ1IHwgMTIzNDUgfCAxMjM0NSB8IDEyMzQ1IHxcbmV4cG9ydCBjbGFzcyBZZWFyUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSAxMzA7XG4gIGluY29tcGF0aWJsZVRva2VucyA9IFtcIllcIiwgXCJSXCIsIFwidVwiLCBcIndcIiwgXCJJXCIsIFwiaVwiLCBcImVcIiwgXCJjXCIsIFwidFwiLCBcIlRcIl07XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh5ZWFyKSA9PiAoe1xuICAgICAgeWVhcixcbiAgICAgIGlzVHdvRGlnaXRZZWFyOiB0b2tlbiA9PT0gXCJ5eVwiLFxuICAgIH0pO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyg0LCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7XG4gICAgICBjYXNlIFwieW9cIjpcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKFxuICAgICAgICAgIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogXCJ5ZWFyXCIsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdmFsdWVDYWxsYmFjayxcbiAgICAgICAgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmlzVHdvRGlnaXRZZWFyIHx8IHZhbHVlLnllYXIgPiAwO1xuICB9XG5cbiAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZSkge1xuICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgaWYgKHZhbHVlLmlzVHdvRGlnaXRZZWFyKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkVHdvRGlnaXRZZWFyID0gbm9ybWFsaXplVHdvRGlnaXRZZWFyKFxuICAgICAgICB2YWx1ZS55ZWFyLFxuICAgICAgICBjdXJyZW50WWVhcixcbiAgICAgICk7XG4gICAgICBkYXRlLnNldEZ1bGxZZWFyKG5vcm1hbGl6ZWRUd29EaWdpdFllYXIsIDAsIDEpO1xuICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHllYXIgPVxuICAgICAgIShcImVyYVwiIGluIGZsYWdzKSB8fCBmbGFncy5lcmEgPT09IDEgPyB2YWx1ZS55ZWFyIDogMSAtIHZhbHVlLnllYXI7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCAwLCAxKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZ2V0V2Vla1llYXIgfSBmcm9tIFwiLi4vLi4vLi4vZ2V0V2Vla1llYXIuanNcIjtcblxuaW1wb3J0IHsgc3RhcnRPZldlZWsgfSBmcm9tIFwiLi4vLi4vLi4vc3RhcnRPZldlZWsuanNcIjtcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcblxuaW1wb3J0IHsgbWFwVmFsdWUsIG5vcm1hbGl6ZVR3b0RpZ2l0WWVhciwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbi8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbmV4cG9ydCBjbGFzcyBMb2NhbFdlZWtZZWFyUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSAxMzA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh5ZWFyKSA9PiAoe1xuICAgICAgeWVhcixcbiAgICAgIGlzVHdvRGlnaXRZZWFyOiB0b2tlbiA9PT0gXCJZWVwiLFxuICAgIH0pO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIllcIjpcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyg0LCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7XG4gICAgICBjYXNlIFwiWW9cIjpcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKFxuICAgICAgICAgIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogXCJ5ZWFyXCIsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdmFsdWVDYWxsYmFjayxcbiAgICAgICAgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmlzVHdvRGlnaXRZZWFyIHx8IHZhbHVlLnllYXIgPiAwO1xuICB9XG5cbiAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gZ2V0V2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAodmFsdWUuaXNUd29EaWdpdFllYXIpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUd29EaWdpdFllYXIgPSBub3JtYWxpemVUd29EaWdpdFllYXIoXG4gICAgICAgIHZhbHVlLnllYXIsXG4gICAgICAgIGN1cnJlbnRZZWFyLFxuICAgICAgKTtcbiAgICAgIGRhdGUuc2V0RnVsbFllYXIoXG4gICAgICAgIG5vcm1hbGl6ZWRUd29EaWdpdFllYXIsXG4gICAgICAgIDAsXG4gICAgICAgIG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgICAgKTtcbiAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gc3RhcnRPZldlZWsoZGF0ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgeWVhciA9XG4gICAgICAhKFwiZXJhXCIgaW4gZmxhZ3MpIHx8IGZsYWdzLmVyYSA9PT0gMSA/IHZhbHVlLnllYXIgOiAxIC0gdmFsdWUueWVhcjtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIDAsIG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGluY29tcGF0aWJsZVRva2VucyA9IFtcbiAgICBcInlcIixcbiAgICBcIlJcIixcbiAgICBcInVcIixcbiAgICBcIlFcIixcbiAgICBcInFcIixcbiAgICBcIk1cIixcbiAgICBcIkxcIixcbiAgICBcIklcIixcbiAgICBcImRcIixcbiAgICBcIkRcIixcbiAgICBcImlcIixcbiAgICBcInRcIixcbiAgICBcIlRcIixcbiAgXTtcbn1cbiIsICJpbXBvcnQgeyBzdGFydE9mSVNPV2VlayB9IGZyb20gXCIuLi8uLi8uLi9zdGFydE9mSVNPV2Vlay5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuLi8uLi8uLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbmltcG9ydCB7IHBhcnNlTkRpZ2l0c1NpZ25lZCB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG4vLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuZXhwb3J0IGNsYXNzIElTT1dlZWtZZWFyUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSAxMzA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4gPT09IFwiUlwiKSB7XG4gICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKDQsIGRhdGVTdHJpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU5EaWdpdHNTaWduZWQodG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTtcbiAgfVxuXG4gIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgY29uc3QgZmlyc3RXZWVrT2ZZZWFyID0gY29uc3RydWN0RnJvbShkYXRlLCAwKTtcbiAgICBmaXJzdFdlZWtPZlllYXIuc2V0RnVsbFllYXIodmFsdWUsIDAsIDQpO1xuICAgIGZpcnN0V2Vla09mWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICByZXR1cm4gc3RhcnRPZklTT1dlZWsoZmlyc3RXZWVrT2ZZZWFyKTtcbiAgfVxuXG4gIGluY29tcGF0aWJsZVRva2VucyA9IFtcbiAgICBcIkdcIixcbiAgICBcInlcIixcbiAgICBcIllcIixcbiAgICBcInVcIixcbiAgICBcIlFcIixcbiAgICBcInFcIixcbiAgICBcIk1cIixcbiAgICBcIkxcIixcbiAgICBcIndcIixcbiAgICBcImRcIixcbiAgICBcIkRcIixcbiAgICBcImVcIixcbiAgICBcImNcIixcbiAgICBcInRcIixcbiAgICBcIlRcIixcbiAgXTtcbn1cbiIsICJpbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbmltcG9ydCB7IHBhcnNlTkRpZ2l0c1NpZ25lZCB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgRXh0ZW5kZWRZZWFyUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSAxMzA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4gPT09IFwidVwiKSB7XG4gICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKDQsIGRhdGVTdHJpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU5EaWdpdHNTaWduZWQodG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTtcbiAgfVxuXG4gIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZSwgMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIGluY29tcGF0aWJsZVRva2VucyA9IFtcIkdcIiwgXCJ5XCIsIFwiWVwiLCBcIlJcIiwgXCJ3XCIsIFwiSVwiLCBcImlcIiwgXCJlXCIsIFwiY1wiLCBcInRcIiwgXCJUXCJdO1xufVxuIiwgImltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcblxuaW1wb3J0IHsgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWFydGVyUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSAxMjA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSBcIlFcIjpcbiAgICAgIGNhc2UgXCJRUVwiOiAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgXCJRb1wiOlxuICAgICAgICByZXR1cm4gbWF0Y2gub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6IFwicXVhcnRlclwiIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgXCJRUVFcIjpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXRjaC5xdWFydGVyKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KSB8fFxuICAgICAgICAgIG1hdGNoLnF1YXJ0ZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgXCJRUVFRUVwiOlxuICAgICAgICByZXR1cm4gbWF0Y2gucXVhcnRlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgXCJRUVFRXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1hdGNoLnF1YXJ0ZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSkgfHxcbiAgICAgICAgICBtYXRjaC5xdWFydGVyKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KSB8fFxuICAgICAgICAgIG1hdGNoLnF1YXJ0ZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IDQ7XG4gIH1cblxuICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgIGRhdGUuc2V0TW9udGgoKHZhbHVlIC0gMSkgKiAzLCAxKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1xuICAgIFwiWVwiLFxuICAgIFwiUlwiLFxuICAgIFwicVwiLFxuICAgIFwiTVwiLFxuICAgIFwiTFwiLFxuICAgIFwid1wiLFxuICAgIFwiSVwiLFxuICAgIFwiZFwiLFxuICAgIFwiRFwiLFxuICAgIFwiaVwiLFxuICAgIFwiZVwiLFxuICAgIFwiY1wiLFxuICAgIFwidFwiLFxuICAgIFwiVFwiLFxuICBdO1xufVxuIiwgImltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcblxuaW1wb3J0IHsgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBTdGFuZEFsb25lUXVhcnRlclBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gMTIwO1xuXG4gIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCkge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgXCJxXCI6XG4gICAgICBjYXNlIFwicXFcIjogLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlIFwicW9cIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiBcInF1YXJ0ZXJcIiB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlIFwicXFxXCI6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbWF0Y2gucXVhcnRlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgICAgfSkgfHxcbiAgICAgICAgICBtYXRjaC5xdWFydGVyKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlIFwicXFxcXFcIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLnF1YXJ0ZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlIFwicXFxcVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXRjaC5xdWFydGVyKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgbWF0Y2gucXVhcnRlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgICAgfSkgfHxcbiAgICAgICAgICBtYXRjaC5xdWFydGVyKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSA0O1xuICB9XG5cbiAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICBkYXRlLnNldE1vbnRoKCh2YWx1ZSAtIDEpICogMywgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIGluY29tcGF0aWJsZVRva2VucyA9IFtcbiAgICBcIllcIixcbiAgICBcIlJcIixcbiAgICBcIlFcIixcbiAgICBcIk1cIixcbiAgICBcIkxcIixcbiAgICBcIndcIixcbiAgICBcIklcIixcbiAgICBcImRcIixcbiAgICBcIkRcIixcbiAgICBcImlcIixcbiAgICBcImVcIixcbiAgICBcImNcIixcbiAgICBcInRcIixcbiAgICBcIlRcIixcbiAgXTtcbn1cbiIsICJpbXBvcnQgeyBudW1lcmljUGF0dGVybnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbmltcG9ydCB7IG1hcFZhbHVlLCBwYXJzZU5EaWdpdHMsIHBhcnNlTnVtZXJpY1BhdHRlcm4gfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIE1vbnRoUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1xuICAgIFwiWVwiLFxuICAgIFwiUlwiLFxuICAgIFwicVwiLFxuICAgIFwiUVwiLFxuICAgIFwiTFwiLFxuICAgIFwid1wiLFxuICAgIFwiSVwiLFxuICAgIFwiRFwiLFxuICAgIFwiaVwiLFxuICAgIFwiZVwiLFxuICAgIFwiY1wiLFxuICAgIFwidFwiLFxuICAgIFwiVFwiLFxuICBdO1xuXG4gIHByaW9yaXR5ID0gMTEwO1xuXG4gIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCkge1xuICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUpID0+IHZhbHVlIC0gMTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgIHJldHVybiBtYXBWYWx1ZShcbiAgICAgICAgICBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5tb250aCwgZGF0ZVN0cmluZyksXG4gICAgICAgICAgdmFsdWVDYWxsYmFjayxcbiAgICAgICAgKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHMoMiwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSBcIk1vXCI6XG4gICAgICAgIHJldHVybiBtYXBWYWx1ZShcbiAgICAgICAgICBtYXRjaC5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6IFwibW9udGhcIixcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB2YWx1ZUNhbGxiYWNrLFxuICAgICAgICApO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbWF0Y2gubW9udGgoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgbWF0Y2gubW9udGgoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJuYXJyb3dcIiwgY29udGV4dDogXCJmb3JtYXR0aW5nXCIgfSlcbiAgICAgICAgKTtcblxuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlIFwiTU1NTU1cIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLm1vbnRoKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSBcIk1NTU1cIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbWF0Y2gubW9udGgoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJ3aWRlXCIsIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiIH0pIHx8XG4gICAgICAgICAgbWF0Y2gubW9udGgoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgbWF0Y2gubW9udGgoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJuYXJyb3dcIiwgY29udGV4dDogXCJmb3JtYXR0aW5nXCIgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAxMTtcbiAgfVxuXG4gIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgZGF0ZS5zZXRNb250aCh2YWx1ZSwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IG51bWVyaWNQYXR0ZXJucyB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcblxuaW1wb3J0IHsgbWFwVmFsdWUsIHBhcnNlTkRpZ2l0cywgcGFyc2VOdW1lcmljUGF0dGVybiB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgU3RhbmRBbG9uZU1vbnRoUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSAxMTA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh2YWx1ZSkgPT4gdmFsdWUgLSAxO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKFxuICAgICAgICAgIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLm1vbnRoLCBkYXRlU3RyaW5nKSxcbiAgICAgICAgICB2YWx1ZUNhbGxiYWNrLFxuICAgICAgICApO1xuICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyXG4gICAgICBjYXNlIFwiTExcIjpcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cygyLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlIFwiTG9cIjpcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKFxuICAgICAgICAgIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogXCJtb250aFwiLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHZhbHVlQ2FsbGJhY2ssXG4gICAgICAgICk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXRjaC5tb250aChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgICAgfSkgfHxcbiAgICAgICAgICBtYXRjaC5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiBcIm5hcnJvd1wiLCBjb250ZXh0OiBcInN0YW5kYWxvbmVcIiB9KVxuICAgICAgICApO1xuXG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgXCJMTExMTFwiOlxuICAgICAgICByZXR1cm4gbWF0Y2gubW9udGgoZGF0ZVN0cmluZywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXRjaC5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiBcIndpZGVcIiwgY29udGV4dDogXCJzdGFuZGFsb25lXCIgfSkgfHxcbiAgICAgICAgICBtYXRjaC5tb250aChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgICAgfSkgfHxcbiAgICAgICAgICBtYXRjaC5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiBcIm5hcnJvd1wiLCBjb250ZXh0OiBcInN0YW5kYWxvbmVcIiB9KVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDExO1xuICB9XG5cbiAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICBkYXRlLnNldE1vbnRoKHZhbHVlLCAxKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1xuICAgIFwiWVwiLFxuICAgIFwiUlwiLFxuICAgIFwicVwiLFxuICAgIFwiUVwiLFxuICAgIFwiTVwiLFxuICAgIFwid1wiLFxuICAgIFwiSVwiLFxuICAgIFwiRFwiLFxuICAgIFwiaVwiLFxuICAgIFwiZVwiLFxuICAgIFwiY1wiLFxuICAgIFwidFwiLFxuICAgIFwiVFwiLFxuICBdO1xufVxuIiwgImltcG9ydCB7IGdldFdlZWsgfSBmcm9tIFwiLi9nZXRXZWVrLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHNldFdlZWt9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzZXRXZWVrXG4gKiBAY2F0ZWdvcnkgV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTZXQgdGhlIGxvY2FsIHdlZWsgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZXQgdGhlIGxvY2FsIHdlZWsgdG8gdGhlIGdpdmVuIGRhdGUsIHNhdmluZyB0aGUgd2Vla2RheSBudW1iZXIuXG4gKiBUaGUgZXhhY3QgY2FsY3VsYXRpb24gZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mXG4gKiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gICh3aGljaCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaylcbiAqIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgICh3aGljaCBpcyB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzIGFsd2F5cyBpblxuICogdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIpXG4gKlxuICogV2VlayBudW1iZXJpbmc6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlZWsjVGhlX0lTT193ZWVrX2RhdGVfc3lzdGVtXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHdlZWsgLSBUaGUgd2VlayBvZiB0aGUgbmV3IGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBsb2NhbCB3ZWVrIHNldFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgdGhlIDFzdCB3ZWVrIHRvIDIgSmFudWFyeSAyMDA1IHdpdGggZGVmYXVsdCBvcHRpb25zOlxuICogY29uc3QgcmVzdWx0ID0gc2V0V2VlayhuZXcgRGF0ZSgyMDA1LCAwLCAyKSwgMSlcbiAqIC8vPT4gU3VuIERlYyAyNiAyMDA0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCB0aGUgMXN0IHdlZWsgdG8gMiBKYW51YXJ5IDIwMDUsXG4gKiAvLyBpZiBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayxcbiAqIC8vIGFuZCB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciBhbHdheXMgY29udGFpbnMgNCBKYW51YXJ5OlxuICogY29uc3QgcmVzdWx0ID0gc2V0V2VlayhuZXcgRGF0ZSgyMDA1LCAwLCAyKSwgMSwge1xuICogICB3ZWVrU3RhcnRzT246IDEsXG4gKiAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNFxuICogfSlcbiAqIC8vPT4gU3VuIEphbiA0IDIwMDQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFdlZWsoZGF0ZSwgd2Vlaywgb3B0aW9ucykge1xuICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRpZmYgPSBnZXRXZWVrKGRhdGVfLCBvcHRpb25zKSAtIHdlZWs7XG4gIGRhdGVfLnNldERhdGUoZGF0ZV8uZ2V0RGF0ZSgpIC0gZGlmZiAqIDcpO1xuICByZXR1cm4gdG9EYXRlKGRhdGVfLCBvcHRpb25zPy5pbik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc2V0V2VlaztcbiIsICJpbXBvcnQgeyBzZXRXZWVrIH0gZnJvbSBcIi4uLy4uLy4uL3NldFdlZWsuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4uLy4uLy4uL3N0YXJ0T2ZXZWVrLmpzXCI7XG5pbXBvcnQgeyBudW1lcmljUGF0dGVybnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbmltcG9ydCB7IHBhcnNlTkRpZ2l0cywgcGFyc2VOdW1lcmljUGF0dGVybiB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG4vLyBMb2NhbCB3ZWVrIG9mIHllYXJcbmV4cG9ydCBjbGFzcyBMb2NhbFdlZWtQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBwcmlvcml0eSA9IDEwMDtcblxuICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwid1wiOlxuICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMud2VlaywgZGF0ZVN0cmluZyk7XG4gICAgICBjYXNlIFwid29cIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiBcIndlZWtcIiB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSA1MztcbiAgfVxuXG4gIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0YXJ0T2ZXZWVrKHNldFdlZWsoZGF0ZSwgdmFsdWUsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgfVxuXG4gIGluY29tcGF0aWJsZVRva2VucyA9IFtcbiAgICBcInlcIixcbiAgICBcIlJcIixcbiAgICBcInVcIixcbiAgICBcInFcIixcbiAgICBcIlFcIixcbiAgICBcIk1cIixcbiAgICBcIkxcIixcbiAgICBcIklcIixcbiAgICBcImRcIixcbiAgICBcIkRcIixcbiAgICBcImlcIixcbiAgICBcInRcIixcbiAgICBcIlRcIixcbiAgXTtcbn1cbiIsICJpbXBvcnQgeyBnZXRJU09XZWVrIH0gZnJvbSBcIi4vZ2V0SVNPV2Vlay5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzZXRJU09XZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc2V0SVNPV2Vla1xuICogQGNhdGVnb3J5IElTTyBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgSVNPIHdlZWsgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZXQgdGhlIElTTyB3ZWVrIHRvIHRoZSBnaXZlbiBkYXRlLCBzYXZpbmcgdGhlIHdlZWtkYXkgbnVtYmVyLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSBgRGF0ZWAgdHlwZSBvZiB0aGUgY29udGV4dCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB3ZWVrIC0gVGhlIElTTyB3ZWVrIG9mIHRoZSBuZXcgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIElTTyB3ZWVrIHNldFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgdGhlIDUzcmQgSVNPIHdlZWsgdG8gNyBBdWd1c3QgMjAwNDpcbiAqIGNvbnN0IHJlc3VsdCA9IHNldElTT1dlZWsobmV3IERhdGUoMjAwNCwgNywgNyksIDUzKVxuICogLy89PiBTYXQgSmFuIDAxIDIwMDUgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldElTT1dlZWsoZGF0ZSwgd2Vlaywgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRpZmYgPSBnZXRJU09XZWVrKF9kYXRlLCBvcHRpb25zKSAtIHdlZWs7XG4gIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpIC0gZGlmZiAqIDcpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc2V0SVNPV2VlaztcbiIsICJpbXBvcnQgeyBzZXRJU09XZWVrIH0gZnJvbSBcIi4uLy4uLy4uL3NldElTT1dlZWsuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrIH0gZnJvbSBcIi4uLy4uLy4uL3N0YXJ0T2ZJU09XZWVrLmpzXCI7XG5pbXBvcnQgeyBudW1lcmljUGF0dGVybnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbmltcG9ydCB7IHBhcnNlTkRpZ2l0cywgcGFyc2VOdW1lcmljUGF0dGVybiB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG4vLyBJU08gd2VlayBvZiB5ZWFyXG5leHBvcnQgY2xhc3MgSVNPV2Vla1BhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gMTAwO1xuXG4gIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCkge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJJXCI6XG4gICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy53ZWVrLCBkYXRlU3RyaW5nKTtcbiAgICAgIGNhc2UgXCJJb1wiOlxuICAgICAgICByZXR1cm4gbWF0Y2gub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6IFwid2Vla1wiIH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IDUzO1xuICB9XG5cbiAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICByZXR1cm4gc3RhcnRPZklTT1dlZWsoc2V0SVNPV2VlayhkYXRlLCB2YWx1ZSkpO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1xuICAgIFwieVwiLFxuICAgIFwiWVwiLFxuICAgIFwidVwiLFxuICAgIFwicVwiLFxuICAgIFwiUVwiLFxuICAgIFwiTVwiLFxuICAgIFwiTFwiLFxuICAgIFwid1wiLFxuICAgIFwiZFwiLFxuICAgIFwiRFwiLFxuICAgIFwiZVwiLFxuICAgIFwiY1wiLFxuICAgIFwidFwiLFxuICAgIFwiVFwiLFxuICBdO1xufVxuIiwgImltcG9ydCB7IG51bWVyaWNQYXR0ZXJucyB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcblxuaW1wb3J0IHtcbiAgaXNMZWFwWWVhckluZGV4LFxuICBwYXJzZU5EaWdpdHMsXG4gIHBhcnNlTnVtZXJpY1BhdHRlcm4sXG59IGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG5jb25zdCBEQVlTX0lOX01PTlRIID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdO1xuY29uc3QgREFZU19JTl9NT05USF9MRUFQX1lFQVIgPSBbXG4gIDMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEsXG5dO1xuXG4vLyBEYXkgb2YgdGhlIG1vbnRoXG5leHBvcnQgY2xhc3MgRGF0ZVBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gOTA7XG4gIHN1YlByaW9yaXR5ID0gMTtcblxuICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiZFwiOlxuICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZGF0ZSwgZGF0ZVN0cmluZyk7XG4gICAgICBjYXNlIFwiZG9cIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiBcImRhdGVcIiB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShkYXRlLCB2YWx1ZSkge1xuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgaXNMZWFwWWVhciA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKTtcbiAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICBpZiAoaXNMZWFwWWVhcikge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSBEQVlTX0lOX01PTlRIW21vbnRoXTtcbiAgICB9XG4gIH1cblxuICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgIGRhdGUuc2V0RGF0ZSh2YWx1ZSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIGluY29tcGF0aWJsZVRva2VucyA9IFtcbiAgICBcIllcIixcbiAgICBcIlJcIixcbiAgICBcInFcIixcbiAgICBcIlFcIixcbiAgICBcIndcIixcbiAgICBcIklcIixcbiAgICBcIkRcIixcbiAgICBcImlcIixcbiAgICBcImVcIixcbiAgICBcImNcIixcbiAgICBcInRcIixcbiAgICBcIlRcIixcbiAgXTtcbn1cbiIsICJpbXBvcnQgeyBudW1lcmljUGF0dGVybnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbmltcG9ydCB7XG4gIGlzTGVhcFllYXJJbmRleCxcbiAgcGFyc2VORGlnaXRzLFxuICBwYXJzZU51bWVyaWNQYXR0ZXJuLFxufSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIERheU9mWWVhclBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gOTA7XG5cbiAgc3VicHJpb3JpdHkgPSAxO1xuXG4gIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCkge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJEXCI6XG4gICAgICBjYXNlIFwiRERcIjpcbiAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmRheU9mWWVhciwgZGF0ZVN0cmluZyk7XG4gICAgICBjYXNlIFwiRG9cIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiBcImRhdGVcIiB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShkYXRlLCB2YWx1ZSkge1xuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgaXNMZWFwWWVhciA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKTtcbiAgICBpZiAoaXNMZWFwWWVhcikge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gMzY2O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSAzNjU7XG4gICAgfVxuICB9XG5cbiAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICBkYXRlLnNldE1vbnRoKDAsIHZhbHVlKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1xuICAgIFwiWVwiLFxuICAgIFwiUlwiLFxuICAgIFwicVwiLFxuICAgIFwiUVwiLFxuICAgIFwiTVwiLFxuICAgIFwiTFwiLFxuICAgIFwid1wiLFxuICAgIFwiSVwiLFxuICAgIFwiZFwiLFxuICAgIFwiRVwiLFxuICAgIFwiaVwiLFxuICAgIFwiZVwiLFxuICAgIFwiY1wiLFxuICAgIFwidFwiLFxuICAgIFwiVFwiLFxuICBdO1xufVxuIiwgImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgYWRkRGF5cyB9IGZyb20gXCIuL2FkZERheXMuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc2V0RGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc2V0RGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTZXQgdGhlIGRheSBvZiB0aGUgd2VlayB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCB0aGUgZGF5IG9mIHRoZSB3ZWVrIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBkYXkgLSBUaGUgZGF5IG9mIHRoZSB3ZWVrIG9mIHRoZSBuZXcgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBkYXkgb2YgdGhlIHdlZWsgc2V0XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCB3ZWVrIGRheSB0byBTdW5kYXksIHdpdGggdGhlIGRlZmF1bHQgd2Vla1N0YXJ0c09uIG9mIFN1bmRheTpcbiAqIGNvbnN0IHJlc3VsdCA9IHNldERheShuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgMClcbiAqIC8vPT4gU3VuIEF1ZyAzMSAyMDE0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCB3ZWVrIGRheSB0byBTdW5kYXksIHdpdGggYSB3ZWVrU3RhcnRzT24gb2YgTW9uZGF5OlxuICogY29uc3QgcmVzdWx0ID0gc2V0RGF5KG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAwLCB7IHdlZWtTdGFydHNPbjogMSB9KVxuICogLy89PiBTdW4gU2VwIDA3IDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldERheShkYXRlLCBkYXksIG9wdGlvbnMpIHtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCB3ZWVrU3RhcnRzT24gPVxuICAgIG9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICAwO1xuXG4gIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgY3VycmVudERheSA9IGRhdGVfLmdldERheSgpO1xuXG4gIGNvbnN0IHJlbWFpbmRlciA9IGRheSAlIDc7XG4gIGNvbnN0IGRheUluZGV4ID0gKHJlbWFpbmRlciArIDcpICUgNztcblxuICBjb25zdCBkZWx0YSA9IDcgLSB3ZWVrU3RhcnRzT247XG4gIGNvbnN0IGRpZmYgPVxuICAgIGRheSA8IDAgfHwgZGF5ID4gNlxuICAgICAgPyBkYXkgLSAoKGN1cnJlbnREYXkgKyBkZWx0YSkgJSA3KVxuICAgICAgOiAoKGRheUluZGV4ICsgZGVsdGEpICUgNykgLSAoKGN1cnJlbnREYXkgKyBkZWx0YSkgJSA3KTtcbiAgcmV0dXJuIGFkZERheXMoZGF0ZV8sIGRpZmYsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHNldERheTtcbiIsICJpbXBvcnQgeyBzZXREYXkgfSBmcm9tIFwiLi4vLi4vLi4vc2V0RGF5LmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbi8vIERheSBvZiB3ZWVrXG5leHBvcnQgY2xhc3MgRGF5UGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSA5MDtcblxuICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgXCJFXCI6XG4gICAgICBjYXNlIFwiRUVcIjpcbiAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6IFwic2hvcnRcIiwgY29udGV4dDogXCJmb3JtYXR0aW5nXCIgfSkgfHxcbiAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJuYXJyb3dcIiwgY29udGV4dDogXCJmb3JtYXR0aW5nXCIgfSlcbiAgICAgICAgKTtcblxuICAgICAgLy8gVFxuICAgICAgY2FzZSBcIkVFRUVFXCI6XG4gICAgICAgIHJldHVybiBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlIFwiRUVFRUVFXCI6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6IFwic2hvcnRcIiwgY29udGV4dDogXCJmb3JtYXR0aW5nXCIgfSkgfHxcbiAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJuYXJyb3dcIiwgY29udGV4dDogXCJmb3JtYXR0aW5nXCIgfSlcbiAgICAgICAgKTtcblxuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcIkVFRUVcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6IFwid2lkZVwiLCBjb250ZXh0OiBcImZvcm1hdHRpbmdcIiB9KSB8fFxuICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSkgfHxcbiAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJzaG9ydFwiLCBjb250ZXh0OiBcImZvcm1hdHRpbmdcIiB9KSB8fFxuICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiBcIm5hcnJvd1wiLCBjb250ZXh0OiBcImZvcm1hdHRpbmdcIiB9KVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDY7XG4gIH1cblxuICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIGRhdGUgPSBzZXREYXkoZGF0ZSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbXCJEXCIsIFwiaVwiLCBcImVcIiwgXCJjXCIsIFwidFwiLCBcIlRcIl07XG59XG4iLCAiaW1wb3J0IHsgc2V0RGF5IH0gZnJvbSBcIi4uLy4uLy4uL3NldERheS5qc1wiO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuXG5pbXBvcnQgeyBtYXBWYWx1ZSwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbi8vIExvY2FsIGRheSBvZiB3ZWVrXG5leHBvcnQgY2xhc3MgTG9jYWxEYXlQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBwcmlvcml0eSA9IDkwO1xuICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlKSA9PiB7XG4gICAgICAvLyBXZSB3YW50IGhlcmUgZmxvb3IgaW5zdGVhZCBvZiB0cnVuYywgc28gd2UgZ2V0IC03IGZvciB2YWx1ZSAwIGluc3RlYWQgb2YgMFxuICAgICAgY29uc3Qgd2hvbGVXZWVrRGF5cyA9IE1hdGguZmxvb3IoKHZhbHVlIC0gMSkgLyA3KSAqIDc7XG4gICAgICByZXR1cm4gKCh2YWx1ZSArIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgNikgJSA3KSArIHdob2xlV2Vla0RheXM7XG4gICAgfTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDNcbiAgICAgIGNhc2UgXCJlXCI6XG4gICAgICBjYXNlIFwiZWVcIjogLy8gMDNcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICAgIC8vIDNyZFxuICAgICAgY2FzZSBcImVvXCI6XG4gICAgICAgIHJldHVybiBtYXBWYWx1ZShcbiAgICAgICAgICBtYXRjaC5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6IFwiZGF5XCIsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdmFsdWVDYWxsYmFjayxcbiAgICAgICAgKTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSBcImVlZVwiOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSkgfHxcbiAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJzaG9ydFwiLCBjb250ZXh0OiBcImZvcm1hdHRpbmdcIiB9KSB8fFxuICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiBcIm5hcnJvd1wiLCBjb250ZXh0OiBcImZvcm1hdHRpbmdcIiB9KVxuICAgICAgICApO1xuXG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiZWVlZWVcIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgXCJlZWVlZWVcIjpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJzaG9ydFwiLCBjb250ZXh0OiBcImZvcm1hdHRpbmdcIiB9KSB8fFxuICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiBcIm5hcnJvd1wiLCBjb250ZXh0OiBcImZvcm1hdHRpbmdcIiB9KVxuICAgICAgICApO1xuXG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlIFwiZWVlZVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJ3aWRlXCIsIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiIH0pIHx8XG4gICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KSB8fFxuICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiBcInNob3J0XCIsIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiIH0pIHx8XG4gICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6IFwibmFycm93XCIsIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiIH0pXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gNjtcbiAgfVxuXG4gIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgZGF0ZSA9IHNldERheShkYXRlLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIGluY29tcGF0aWJsZVRva2VucyA9IFtcbiAgICBcInlcIixcbiAgICBcIlJcIixcbiAgICBcInVcIixcbiAgICBcInFcIixcbiAgICBcIlFcIixcbiAgICBcIk1cIixcbiAgICBcIkxcIixcbiAgICBcIklcIixcbiAgICBcImRcIixcbiAgICBcIkRcIixcbiAgICBcIkVcIixcbiAgICBcImlcIixcbiAgICBcImNcIixcbiAgICBcInRcIixcbiAgICBcIlRcIixcbiAgXTtcbn1cbiIsICJpbXBvcnQgeyBzZXREYXkgfSBmcm9tIFwiLi4vLi4vLi4vc2V0RGF5LmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbmltcG9ydCB7IG1hcFZhbHVlLCBwYXJzZU5EaWdpdHMgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWtcbmV4cG9ydCBjbGFzcyBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBwcmlvcml0eSA9IDkwO1xuXG4gIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUpID0+IHtcbiAgICAgIC8vIFdlIHdhbnQgaGVyZSBmbG9vciBpbnN0ZWFkIG9mIHRydW5jLCBzbyB3ZSBnZXQgLTcgZm9yIHZhbHVlIDAgaW5zdGVhZCBvZiAwXG4gICAgICBjb25zdCB3aG9sZVdlZWtEYXlzID0gTWF0aC5mbG9vcigodmFsdWUgLSAxKSAvIDcpICogNztcbiAgICAgIHJldHVybiAoKHZhbHVlICsgb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA2KSAlIDcpICsgd2hvbGVXZWVrRGF5cztcbiAgICB9O1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gM1xuICAgICAgY2FzZSBcImNcIjpcbiAgICAgIGNhc2UgXCJjY1wiOiAvLyAwM1xuICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spO1xuICAgICAgLy8gM3JkXG4gICAgICBjYXNlIFwiY29cIjpcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKFxuICAgICAgICAgIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogXCJkYXlcIixcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB2YWx1ZUNhbGxiYWNrLFxuICAgICAgICApO1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlIFwiY2NjXCI6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgICB9KSB8fFxuICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiBcInNob3J0XCIsIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiIH0pIHx8XG4gICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6IFwibmFycm93XCIsIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiIH0pXG4gICAgICAgICk7XG5cbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgXCJjY2NjY1wiOlxuICAgICAgICByZXR1cm4gbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcImNjY2NjY1wiOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiBcInNob3J0XCIsIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiIH0pIHx8XG4gICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6IFwibmFycm93XCIsIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiIH0pXG4gICAgICAgICk7XG5cbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgXCJjY2NjXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiBcIndpZGVcIiwgY29udGV4dDogXCJzdGFuZGFsb25lXCIgfSkgfHxcbiAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6IFwic2hvcnRcIiwgY29udGV4dDogXCJzdGFuZGFsb25lXCIgfSkgfHxcbiAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogXCJuYXJyb3dcIiwgY29udGV4dDogXCJzdGFuZGFsb25lXCIgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSA2O1xuICB9XG5cbiAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICBkYXRlID0gc2V0RGF5KGRhdGUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1xuICAgIFwieVwiLFxuICAgIFwiUlwiLFxuICAgIFwidVwiLFxuICAgIFwicVwiLFxuICAgIFwiUVwiLFxuICAgIFwiTVwiLFxuICAgIFwiTFwiLFxuICAgIFwiSVwiLFxuICAgIFwiZFwiLFxuICAgIFwiRFwiLFxuICAgIFwiRVwiLFxuICAgIFwiaVwiLFxuICAgIFwiZVwiLFxuICAgIFwidFwiLFxuICAgIFwiVFwiLFxuICBdO1xufVxuIiwgImltcG9ydCB7IGFkZERheXMgfSBmcm9tIFwiLi9hZGREYXlzLmpzXCI7XG5pbXBvcnQgeyBnZXRJU09EYXkgfSBmcm9tIFwiLi9nZXRJU09EYXkuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc2V0SVNPRGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc2V0SVNPRGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTZXQgdGhlIGRheSBvZiB0aGUgSVNPIHdlZWsgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZXQgdGhlIGRheSBvZiB0aGUgSVNPIHdlZWsgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKiBJU08gd2VlayBzdGFydHMgd2l0aCBNb25kYXkuXG4gKiA3IGlzIHRoZSBpbmRleCBvZiBTdW5kYXksIDEgaXMgdGhlIGluZGV4IG9mIE1vbmRheSwgZXRjLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBkYXkgLSBUaGUgZGF5IG9mIHRoZSBJU08gd2VlayBvZiB0aGUgbmV3IGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBkYXkgb2YgdGhlIElTTyB3ZWVrIHNldFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgU3VuZGF5IHRvIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBzZXRJU09EYXkobmV3IERhdGUoMjAxNCwgOCwgMSksIDcpXG4gKiAvLz0+IFN1biBTZXAgMDcgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SVNPRGF5KGRhdGUsIGRheSwgb3B0aW9ucykge1xuICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGN1cnJlbnREYXkgPSBnZXRJU09EYXkoZGF0ZV8sIG9wdGlvbnMpO1xuICBjb25zdCBkaWZmID0gZGF5IC0gY3VycmVudERheTtcbiAgcmV0dXJuIGFkZERheXMoZGF0ZV8sIGRpZmYsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHNldElTT0RheTtcbiIsICJpbXBvcnQgeyBzZXRJU09EYXkgfSBmcm9tIFwiLi4vLi4vLi4vc2V0SVNPRGF5LmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbmltcG9ydCB7IG1hcFZhbHVlLCBwYXJzZU5EaWdpdHMgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuLy8gSVNPIGRheSBvZiB3ZWVrXG5leHBvcnQgY2xhc3MgSVNPRGF5UGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSA5MDtcblxuICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDc7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgXCJpXCI6XG4gICAgICBjYXNlIFwiaWlcIjogLy8gMDJcbiAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgICAgLy8gMm5kXG4gICAgICBjYXNlIFwiaW9cIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiBcImRheVwiIH0pO1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlIFwiaWlpXCI6XG4gICAgICAgIHJldHVybiBtYXBWYWx1ZShcbiAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB2YWx1ZUNhbGxiYWNrLFxuICAgICAgICApO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSBcImlpaWlpXCI6XG4gICAgICAgIHJldHVybiBtYXBWYWx1ZShcbiAgICAgICAgICBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB2YWx1ZUNhbGxiYWNrLFxuICAgICAgICApO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgXCJpaWlpaWlcIjpcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKFxuICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIHZhbHVlQ2FsbGJhY2ssXG4gICAgICAgICk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlIFwiaWlpaVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKFxuICAgICAgICAgIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgdmFsdWVDYWxsYmFjayxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSA3O1xuICB9XG5cbiAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICBkYXRlID0gc2V0SVNPRGF5KGRhdGUsIHZhbHVlKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1xuICAgIFwieVwiLFxuICAgIFwiWVwiLFxuICAgIFwidVwiLFxuICAgIFwicVwiLFxuICAgIFwiUVwiLFxuICAgIFwiTVwiLFxuICAgIFwiTFwiLFxuICAgIFwid1wiLFxuICAgIFwiZFwiLFxuICAgIFwiRFwiLFxuICAgIFwiRVwiLFxuICAgIFwiZVwiLFxuICAgIFwiY1wiLFxuICAgIFwidFwiLFxuICAgIFwiVFwiLFxuICBdO1xufVxuIiwgImltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcblxuaW1wb3J0IHsgZGF5UGVyaW9kRW51bVRvSG91cnMgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIEFNUE1QYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBwcmlvcml0eSA9IDgwO1xuXG4gIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCkge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJhXCI6XG4gICAgICBjYXNlIFwiYWFcIjpcbiAgICAgIGNhc2UgXCJhYWFcIjpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXRjaC5kYXlQZXJpb2QoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgbWF0Y2guZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgY2FzZSBcImFhYWFhXCI6XG4gICAgICAgIHJldHVybiBtYXRjaC5kYXlQZXJpb2QoZGF0ZVN0cmluZywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJhYWFhXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KSB8fFxuICAgICAgICAgIG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSkgfHxcbiAgICAgICAgICBtYXRjaC5kYXlQZXJpb2QoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgZGF0ZS5zZXRIb3VycyhkYXlQZXJpb2RFbnVtVG9Ib3Vycyh2YWx1ZSksIDAsIDAsIDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1wiYlwiLCBcIkJcIiwgXCJIXCIsIFwia1wiLCBcInRcIiwgXCJUXCJdO1xufVxuIiwgImltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcblxuaW1wb3J0IHsgZGF5UGVyaW9kRW51bVRvSG91cnMgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIEFNUE1NaWRuaWdodFBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gODA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcImJcIjpcbiAgICAgIGNhc2UgXCJiYlwiOlxuICAgICAgY2FzZSBcImJiYlwiOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSkgfHxcbiAgICAgICAgICBtYXRjaC5kYXlQZXJpb2QoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICBjYXNlIFwiYmJiYmJcIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImJiYmJcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbWF0Y2guZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgbWF0Y2guZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KSB8fFxuICAgICAgICAgIG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICBkYXRlLnNldEhvdXJzKGRheVBlcmlvZEVudW1Ub0hvdXJzKHZhbHVlKSwgMCwgMCwgMCk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbXCJhXCIsIFwiQlwiLCBcIkhcIiwgXCJrXCIsIFwidFwiLCBcIlRcIl07XG59XG4iLCAiaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuXG5pbXBvcnQgeyBkYXlQZXJpb2RFbnVtVG9Ib3VycyB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG4vLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG5leHBvcnQgY2xhc3MgRGF5UGVyaW9kUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSA4MDtcblxuICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiQlwiOlxuICAgICAgY2FzZSBcIkJCXCI6XG4gICAgICBjYXNlIFwiQkJCXCI6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbWF0Y2guZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KSB8fFxuICAgICAgICAgIG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgIGNhc2UgXCJCQkJCQlwiOlxuICAgICAgICByZXR1cm4gbWF0Y2guZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiQkJCQlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXRjaC5kYXlQZXJpb2QoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSkgfHxcbiAgICAgICAgICBtYXRjaC5kYXlQZXJpb2QoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgbWF0Y2guZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgIGRhdGUuc2V0SG91cnMoZGF5UGVyaW9kRW51bVRvSG91cnModmFsdWUpLCAwLCAwLCAwKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIGluY29tcGF0aWJsZVRva2VucyA9IFtcImFcIiwgXCJiXCIsIFwidFwiLCBcIlRcIl07XG59XG4iLCAiaW1wb3J0IHsgbnVtZXJpY1BhdHRlcm5zIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuXG5pbXBvcnQgeyBwYXJzZU5EaWdpdHMsIHBhcnNlTnVtZXJpY1BhdHRlcm4gfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIEhvdXIxdG8xMlBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gNzA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmhvdXIxMmgsIGRhdGVTdHJpbmcpO1xuICAgICAgY2FzZSBcImhvXCI6XG4gICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gMTI7XG4gIH1cblxuICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgIGNvbnN0IGlzUE0gPSBkYXRlLmdldEhvdXJzKCkgPj0gMTI7XG4gICAgaWYgKGlzUE0gJiYgdmFsdWUgPCAxMikge1xuICAgICAgZGF0ZS5zZXRIb3Vycyh2YWx1ZSArIDEyLCAwLCAwLCAwKTtcbiAgICB9IGVsc2UgaWYgKCFpc1BNICYmIHZhbHVlID09PSAxMikge1xuICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZS5zZXRIb3Vycyh2YWx1ZSwgMCwgMCwgMCk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1wiSFwiLCBcIktcIiwgXCJrXCIsIFwidFwiLCBcIlRcIl07XG59XG4iLCAiaW1wb3J0IHsgbnVtZXJpY1BhdHRlcm5zIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuXG5pbXBvcnQgeyBwYXJzZU5EaWdpdHMsIHBhcnNlTnVtZXJpY1BhdHRlcm4gfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIEhvdXIwdG8yM1BhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gNzA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmhvdXIyM2gsIGRhdGVTdHJpbmcpO1xuICAgICAgY2FzZSBcIkhvXCI6XG4gICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMjM7XG4gIH1cblxuICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgIGRhdGUuc2V0SG91cnModmFsdWUsIDAsIDAsIDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1wiYVwiLCBcImJcIiwgXCJoXCIsIFwiS1wiLCBcImtcIiwgXCJ0XCIsIFwiVFwiXTtcbn1cbiIsICJpbXBvcnQgeyBudW1lcmljUGF0dGVybnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbmltcG9ydCB7IHBhcnNlTkRpZ2l0cywgcGFyc2VOdW1lcmljUGF0dGVybiB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgSG91cjBUbzExUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSA3MDtcblxuICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiS1wiOlxuICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjExaCwgZGF0ZVN0cmluZyk7XG4gICAgICBjYXNlIFwiS29cIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiBcImhvdXJcIiB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAxMTtcbiAgfVxuXG4gIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgY29uc3QgaXNQTSA9IGRhdGUuZ2V0SG91cnMoKSA+PSAxMjtcbiAgICBpZiAoaXNQTSAmJiB2YWx1ZSA8IDEyKSB7XG4gICAgICBkYXRlLnNldEhvdXJzKHZhbHVlICsgMTIsIDAsIDAsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlLnNldEhvdXJzKHZhbHVlLCAwLCAwLCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbXCJoXCIsIFwiSFwiLCBcImtcIiwgXCJ0XCIsIFwiVFwiXTtcbn1cbiIsICJpbXBvcnQgeyBudW1lcmljUGF0dGVybnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbmltcG9ydCB7IHBhcnNlTkRpZ2l0cywgcGFyc2VOdW1lcmljUGF0dGVybiB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgSG91cjFUbzI0UGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSA3MDtcblxuICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwia1wiOlxuICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjI0aCwgZGF0ZVN0cmluZyk7XG4gICAgICBjYXNlIFwia29cIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiBcImhvdXJcIiB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSAyNDtcbiAgfVxuXG4gIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgY29uc3QgaG91cnMgPSB2YWx1ZSA8PSAyNCA/IHZhbHVlICUgMjQgOiB2YWx1ZTtcbiAgICBkYXRlLnNldEhvdXJzKGhvdXJzLCAwLCAwLCAwKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIGluY29tcGF0aWJsZVRva2VucyA9IFtcImFcIiwgXCJiXCIsIFwiaFwiLCBcIkhcIiwgXCJLXCIsIFwidFwiLCBcIlRcIl07XG59XG4iLCAiaW1wb3J0IHsgbnVtZXJpY1BhdHRlcm5zIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuXG5pbXBvcnQgeyBwYXJzZU5EaWdpdHMsIHBhcnNlTnVtZXJpY1BhdHRlcm4gfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIE1pbnV0ZVBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gNjA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLm1pbnV0ZSwgZGF0ZVN0cmluZyk7XG4gICAgICBjYXNlIFwibW9cIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiBcIm1pbnV0ZVwiIH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDU5O1xuICB9XG5cbiAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICBkYXRlLnNldE1pbnV0ZXModmFsdWUsIDAsIDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1widFwiLCBcIlRcIl07XG59XG4iLCAiaW1wb3J0IHsgbnVtZXJpY1BhdHRlcm5zIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuXG5pbXBvcnQgeyBwYXJzZU5EaWdpdHMsIHBhcnNlTnVtZXJpY1BhdHRlcm4gfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIFNlY29uZFBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gNTA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnNlY29uZCwgZGF0ZVN0cmluZyk7XG4gICAgICBjYXNlIFwic29cIjpcbiAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiBcInNlY29uZFwiIH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDU5O1xuICB9XG5cbiAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICBkYXRlLnNldFNlY29uZHModmFsdWUsIDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1widFwiLCBcIlRcIl07XG59XG4iLCAiaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuXG5pbXBvcnQgeyBtYXBWYWx1ZSwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBGcmFjdGlvbk9mU2Vjb25kUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpb3JpdHkgPSAzMDtcblxuICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikge1xuICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUpID0+XG4gICAgICBNYXRoLnRydW5jKHZhbHVlICogTWF0aC5wb3coMTAsIC10b2tlbi5sZW5ndGggKyAzKSk7XG4gICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTtcbiAgfVxuXG4gIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgZGF0ZS5zZXRNaWxsaXNlY29uZHModmFsdWUpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1widFwiLCBcIlRcIl07XG59XG4iLCAiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuLi8uLi8uLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qc1wiO1xuaW1wb3J0IHsgdGltZXpvbmVQYXR0ZXJucyB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcblxuaW1wb3J0IHsgcGFyc2VUaW1lem9uZVBhdHRlcm4gfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuLy8gVGltZXpvbmUgKElTTy04NjAxLiArMDA6MDAgaXMgYCdaJ2ApXG5leHBvcnQgY2xhc3MgSVNPVGltZXpvbmVXaXRoWlBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gMTA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiWFwiOlxuICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4oXG4gICAgICAgICAgdGltZXpvbmVQYXR0ZXJucy5iYXNpY09wdGlvbmFsTWludXRlcyxcbiAgICAgICAgICBkYXRlU3RyaW5nLFxuICAgICAgICApO1xuICAgICAgY2FzZSBcIlhYXCI6XG4gICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmJhc2ljLCBkYXRlU3RyaW5nKTtcbiAgICAgIGNhc2UgXCJYWFhYXCI6XG4gICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybihcbiAgICAgICAgICB0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxTZWNvbmRzLFxuICAgICAgICAgIGRhdGVTdHJpbmcsXG4gICAgICAgICk7XG4gICAgICBjYXNlIFwiWFhYWFhcIjpcbiAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKFxuICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWRPcHRpb25hbFNlY29uZHMsXG4gICAgICAgICAgZGF0ZVN0cmluZyxcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgXCJYWFhcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkLCBkYXRlU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBzZXQoZGF0ZSwgZmxhZ3MsIHZhbHVlKSB7XG4gICAgaWYgKGZsYWdzLnRpbWVzdGFtcElzU2V0KSByZXR1cm4gZGF0ZTtcbiAgICByZXR1cm4gY29uc3RydWN0RnJvbShcbiAgICAgIGRhdGUsXG4gICAgICBkYXRlLmdldFRpbWUoKSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkgLSB2YWx1ZSxcbiAgICApO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1widFwiLCBcIlRcIiwgXCJ4XCJdO1xufVxuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyB9IGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMuanNcIjtcbmltcG9ydCB7IHRpbWV6b25lUGF0dGVybnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5cbmltcG9ydCB7IHBhcnNlVGltZXpvbmVQYXR0ZXJuIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbi8vIFRpbWV6b25lIChJU08tODYwMSlcbmV4cG9ydCBjbGFzcyBJU09UaW1lem9uZVBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gMTA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwieFwiOlxuICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4oXG4gICAgICAgICAgdGltZXpvbmVQYXR0ZXJucy5iYXNpY09wdGlvbmFsTWludXRlcyxcbiAgICAgICAgICBkYXRlU3RyaW5nLFxuICAgICAgICApO1xuICAgICAgY2FzZSBcInh4XCI6XG4gICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmJhc2ljLCBkYXRlU3RyaW5nKTtcbiAgICAgIGNhc2UgXCJ4eHh4XCI6XG4gICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybihcbiAgICAgICAgICB0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxTZWNvbmRzLFxuICAgICAgICAgIGRhdGVTdHJpbmcsXG4gICAgICAgICk7XG4gICAgICBjYXNlIFwieHh4eHhcIjpcbiAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKFxuICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWRPcHRpb25hbFNlY29uZHMsXG4gICAgICAgICAgZGF0ZVN0cmluZyxcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgXCJ4eHhcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkLCBkYXRlU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBzZXQoZGF0ZSwgZmxhZ3MsIHZhbHVlKSB7XG4gICAgaWYgKGZsYWdzLnRpbWVzdGFtcElzU2V0KSByZXR1cm4gZGF0ZTtcbiAgICByZXR1cm4gY29uc3RydWN0RnJvbShcbiAgICAgIGRhdGUsXG4gICAgICBkYXRlLmdldFRpbWUoKSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkgLSB2YWx1ZSxcbiAgICApO1xuICB9XG5cbiAgaW5jb21wYXRpYmxlVG9rZW5zID0gW1widFwiLCBcIlRcIiwgXCJYXCJdO1xufVxuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuXG5pbXBvcnQgeyBwYXJzZUFueURpZ2l0c1NpZ25lZCB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVGltZXN0YW1wU2Vjb25kc1BhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gNDA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZykge1xuICAgIHJldHVybiBwYXJzZUFueURpZ2l0c1NpZ25lZChkYXRlU3RyaW5nKTtcbiAgfVxuXG4gIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgcmV0dXJuIFtjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlICogMTAwMCksIHsgdGltZXN0YW1wSXNTZXQ6IHRydWUgfV07XG4gIH1cblxuICBpbmNvbXBhdGlibGVUb2tlbnMgPSBcIipcIjtcbn1cbiIsICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcblxuaW1wb3J0IHsgcGFyc2VBbnlEaWdpdHNTaWduZWQgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIFRpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaW9yaXR5ID0gMjA7XG5cbiAgcGFyc2UoZGF0ZVN0cmluZykge1xuICAgIHJldHVybiBwYXJzZUFueURpZ2l0c1NpZ25lZChkYXRlU3RyaW5nKTtcbiAgfVxuXG4gIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgcmV0dXJuIFtjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlKSwgeyB0aW1lc3RhbXBJc1NldDogdHJ1ZSB9XTtcbiAgfVxuXG4gIGluY29tcGF0aWJsZVRva2VucyA9IFwiKlwiO1xufVxuIiwgImltcG9ydCB7IEVyYVBhcnNlciB9IGZyb20gXCIuL3BhcnNlcnMvRXJhUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBZZWFyUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9ZZWFyUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBMb2NhbFdlZWtZZWFyUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9Mb2NhbFdlZWtZZWFyUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBJU09XZWVrWWVhclBhcnNlciB9IGZyb20gXCIuL3BhcnNlcnMvSVNPV2Vla1llYXJQYXJzZXIuanNcIjtcbmltcG9ydCB7IEV4dGVuZGVkWWVhclBhcnNlciB9IGZyb20gXCIuL3BhcnNlcnMvRXh0ZW5kZWRZZWFyUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBRdWFydGVyUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9RdWFydGVyUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBTdGFuZEFsb25lUXVhcnRlclBhcnNlciB9IGZyb20gXCIuL3BhcnNlcnMvU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIuanNcIjtcbmltcG9ydCB7IE1vbnRoUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9Nb250aFBhcnNlci5qc1wiO1xuaW1wb3J0IHsgU3RhbmRBbG9uZU1vbnRoUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9TdGFuZEFsb25lTW9udGhQYXJzZXIuanNcIjtcbmltcG9ydCB7IExvY2FsV2Vla1BhcnNlciB9IGZyb20gXCIuL3BhcnNlcnMvTG9jYWxXZWVrUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBJU09XZWVrUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9JU09XZWVrUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBEYXRlUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9EYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBEYXlPZlllYXJQYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJzL0RheU9mWWVhclBhcnNlci5qc1wiO1xuaW1wb3J0IHsgRGF5UGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9EYXlQYXJzZXIuanNcIjtcbmltcG9ydCB7IExvY2FsRGF5UGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9Mb2NhbERheVBhcnNlci5qc1wiO1xuaW1wb3J0IHsgU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9TdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIuanNcIjtcbmltcG9ydCB7IElTT0RheVBhcnNlciB9IGZyb20gXCIuL3BhcnNlcnMvSVNPRGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBBTVBNUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9BTVBNUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBBTVBNTWlkbmlnaHRQYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJzL0FNUE1NaWRuaWdodFBhcnNlci5qc1wiO1xuaW1wb3J0IHsgRGF5UGVyaW9kUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9EYXlQZXJpb2RQYXJzZXIuanNcIjtcbmltcG9ydCB7IEhvdXIxdG8xMlBhcnNlciB9IGZyb20gXCIuL3BhcnNlcnMvSG91cjF0bzEyUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBIb3VyMHRvMjNQYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJzL0hvdXIwdG8yM1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgSG91cjBUbzExUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9Ib3VyMFRvMTFQYXJzZXIuanNcIjtcbmltcG9ydCB7IEhvdXIxVG8yNFBhcnNlciB9IGZyb20gXCIuL3BhcnNlcnMvSG91cjFUbzI0UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBNaW51dGVQYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJzL01pbnV0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IHsgU2Vjb25kUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9TZWNvbmRQYXJzZXIuanNcIjtcbmltcG9ydCB7IEZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJzL0ZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIuanNcIjtcbmltcG9ydCB7IElTT1RpbWV6b25lV2l0aFpQYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJzL0lTT1RpbWV6b25lV2l0aFpQYXJzZXIuanNcIjtcbmltcG9ydCB7IElTT1RpbWV6b25lUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9JU09UaW1lem9uZVBhcnNlci5qc1wiO1xuaW1wb3J0IHsgVGltZXN0YW1wU2Vjb25kc1BhcnNlciB9IGZyb20gXCIuL3BhcnNlcnMvVGltZXN0YW1wU2Vjb25kc1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2Vycy9UaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIuanNcIjtcblxuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgTWlsbGlzZWNvbmRzIGluIGRheSAgICAgICAgICAgIHxcbiAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAqIHwgIGMgIHwgU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsgIHwgIEMqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGYgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEYqIHwgRGF5IG9mIHdlZWsgaW4gbW9udGggICAgICAgICAgIHxcbiAqIHwgIGcqIHwgTW9kaWZpZWQgSnVsaWFuIGRheSAgICAgICAgICAgIHwgIEcgIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGkhIHwgSVNPIGRheSBvZiB3ZWVrICAgICAgICAgICAgICAgIHwgIEkhIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgIHxcbiAqIHwgIGoqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHwgIEoqIHwgTG9jYWxpemVkIGhvdXIgdy9vIGRheSBwZXJpb2QgIHxcbiAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGwqIHwgKGRlcHJlY2F0ZWQpICAgICAgICAgICAgICAgICAgIHwgIEwgIHwgU3RhbmQtYWxvbmUgbW9udGggICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG8hIHwgT3JkaW5hbCBudW1iZXIgbW9kaWZpZXIgICAgICAgIHwgIE8qIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHIqIHwgUmVsYXRlZCBHcmVnb3JpYW4geWVhciAgICAgICAgIHwgIFIhIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAqIHwgIHUgIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgIHwgIFUqIHwgQ3ljbGljIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHYqIHwgVGltZXpvbmUgKGdlbmVyaWMgbm9uLWxvY2F0LikgIHwgIFYqIHwgVGltZXpvbmUgKGxvY2F0aW9uKSAgICAgICAgICAgIHxcbiAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHggIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgIHwgIFggIHwgVGltZXpvbmUgKElTTy04NjAxKSAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgIHxcbiAqIHwgIHoqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgISBhcmUgbm9uLXN0YW5kYXJkLCBidXQgaW1wbGVtZW50ZWQgYnkgZGF0ZS1mbnM6XG4gKiAtIGBvYCBtb2RpZmllcyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gdHVybiBpdCBpbnRvIGFuIG9yZGluYWwgKHNlZSBgcGFyc2VgIGRvY3MpXG4gKiAtIGBpYCBpcyBJU08gZGF5IG9mIHdlZWsuIEZvciBgaWAgYW5kIGBpaWAgaXMgcmV0dXJucyBudW1lcmljIElTTyB3ZWVrIGRheXMsXG4gKiAgIGkuZS4gNyBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAqIC0gYElgIGlzIElTTyB3ZWVrIG9mIHllYXIsIGFzIG9wcG9zZWQgdG8gYHdgIHdoaWNoIGlzIGxvY2FsIHdlZWsgb2YgeWVhci5cbiAqIC0gYFJgIGlzIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLCBhcyBvcHBvc2VkIHRvIGBZYCB3aGljaCBpcyBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogICBgUmAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJYCBhbmQgYGlgXG4gKiAgIGZvciB1bml2ZXJzYWwgSVNPIHdlZWstbnVtYmVyaW5nIGRhdGUsIHdoZXJlYXNcbiAqICAgYFlgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgd2AgYW5kIGBlYFxuICogICBmb3Igd2Vlay1udW1iZXJpbmcgZGF0ZSBzcGVjaWZpYyB0byB0aGUgbG9jYWxlLlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VycyA9IHtcbiAgRzogbmV3IEVyYVBhcnNlcigpLFxuICB5OiBuZXcgWWVhclBhcnNlcigpLFxuICBZOiBuZXcgTG9jYWxXZWVrWWVhclBhcnNlcigpLFxuICBSOiBuZXcgSVNPV2Vla1llYXJQYXJzZXIoKSxcbiAgdTogbmV3IEV4dGVuZGVkWWVhclBhcnNlcigpLFxuICBROiBuZXcgUXVhcnRlclBhcnNlcigpLFxuICBxOiBuZXcgU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIoKSxcbiAgTTogbmV3IE1vbnRoUGFyc2VyKCksXG4gIEw6IG5ldyBTdGFuZEFsb25lTW9udGhQYXJzZXIoKSxcbiAgdzogbmV3IExvY2FsV2Vla1BhcnNlcigpLFxuICBJOiBuZXcgSVNPV2Vla1BhcnNlcigpLFxuICBkOiBuZXcgRGF0ZVBhcnNlcigpLFxuICBEOiBuZXcgRGF5T2ZZZWFyUGFyc2VyKCksXG4gIEU6IG5ldyBEYXlQYXJzZXIoKSxcbiAgZTogbmV3IExvY2FsRGF5UGFyc2VyKCksXG4gIGM6IG5ldyBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIoKSxcbiAgaTogbmV3IElTT0RheVBhcnNlcigpLFxuICBhOiBuZXcgQU1QTVBhcnNlcigpLFxuICBiOiBuZXcgQU1QTU1pZG5pZ2h0UGFyc2VyKCksXG4gIEI6IG5ldyBEYXlQZXJpb2RQYXJzZXIoKSxcbiAgaDogbmV3IEhvdXIxdG8xMlBhcnNlcigpLFxuICBIOiBuZXcgSG91cjB0bzIzUGFyc2VyKCksXG4gIEs6IG5ldyBIb3VyMFRvMTFQYXJzZXIoKSxcbiAgazogbmV3IEhvdXIxVG8yNFBhcnNlcigpLFxuICBtOiBuZXcgTWludXRlUGFyc2VyKCksXG4gIHM6IG5ldyBTZWNvbmRQYXJzZXIoKSxcbiAgUzogbmV3IEZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIoKSxcbiAgWDogbmV3IElTT1RpbWV6b25lV2l0aFpQYXJzZXIoKSxcbiAgeDogbmV3IElTT1RpbWV6b25lUGFyc2VyKCksXG4gIHQ6IG5ldyBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyKCksXG4gIFQ6IG5ldyBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIoKSxcbn07XG4iLCAiaW1wb3J0IHsgZGVmYXVsdExvY2FsZSB9IGZyb20gXCIuL19saWIvZGVmYXVsdExvY2FsZS5qc1wiO1xuaW1wb3J0IHsgbG9uZ0Zvcm1hdHRlcnMgfSBmcm9tIFwiLi9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy5qc1wiO1xuaW1wb3J0IHtcbiAgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbixcbiAgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuLFxuICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yLFxufSBmcm9tIFwiLi9fbGliL3Byb3RlY3RlZFRva2Vucy5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vZ2V0RGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG5pbXBvcnQgeyBEYXRlVGltZXpvbmVTZXR0ZXIgfSBmcm9tIFwiLi9wYXJzZS9fbGliL1NldHRlci5qc1wiO1xuaW1wb3J0IHsgcGFyc2VycyB9IGZyb20gXCIuL3BhcnNlL19saWIvcGFyc2Vycy5qc1wiO1xuXG4vLyBSZXhwb3J0cyBvZiBpbnRlcm5hbCBmb3IgbGlicmFyaWVzIHRvIHVzZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNjM4I2lzc3VlY29tbWVudC0xODc3MDgyODc0XG5leHBvcnQgeyBsb25nRm9ybWF0dGVycywgcGFyc2VycyB9O1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgcGFyc2V9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG5jb25zdCBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID1cbiAgL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG4vLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG5jb25zdCBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG5jb25zdCBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG5jb25zdCBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xuXG5jb25zdCBub3RXaGl0ZXNwYWNlUmVnRXhwID0gL1xcUy87XG5jb25zdCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG5cbi8qKlxuICogQG5hbWUgcGFyc2VcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgUGFyc2UgdGhlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGRhdGUgcGFyc2VkIGZyb20gc3RyaW5nIHVzaW5nIHRoZSBnaXZlbiBmb3JtYXQgc3RyaW5nLlxuICpcbiAqID4gXHUyNkEwXHVGRTBGIFBsZWFzZSBub3RlIHRoYXQgdGhlIGBmb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgaW4gdGhlIGZvcm1hdCBzdHJpbmcgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKlxuICogRm9ybWF0IG9mIHRoZSBmb3JtYXQgc3RyaW5nIGlzIGJhc2VkIG9uIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGVcbiAqIHdpdGggYSBmZXcgYWRkaXRpb25zIChzZWUgbm90ZSA1IGJlbG93IHRoZSB0YWJsZSkuXG4gKlxuICogTm90IGFsbCB0b2tlbnMgYXJlIGNvbXBhdGlibGUuIENvbWJpbmF0aW9ucyB0aGF0IGRvbid0IG1ha2Ugc2Vuc2Ugb3IgY291bGQgbGVhZCB0byBidWdzIGFyZSBwcm9oaWJpdGVkXG4gKiBhbmQgd2lsbCB0aHJvdyBgUmFuZ2VFcnJvcmAuIEZvciBleGFtcGxlIHVzYWdlIG9mIDI0LWhvdXIgZm9ybWF0IHRva2VuIHdpdGggQU0vUE0gdG9rZW4gd2lsbCB0aHJvdyBhbiBleGNlcHRpb246XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogcGFyc2UoJzIzIEFNJywgJ0hIIGEnLCBuZXcgRGF0ZSgpKVxuICogLy89PiBSYW5nZUVycm9yOiBUaGUgZm9ybWF0IHN0cmluZyBtdXN0bid0IGNvbnRhaW4gYEhIYCBhbmQgYGFgIGF0IHRoZSBzYW1lIHRpbWVcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgY29tcGF0aWJpbGl0eSB0YWJsZTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvZS8yUEFDWC0xdlFPUFUzeFVocGxsbDZkeW9NbVZVWEhLbF84Q1JEczZfdWVMbWV4M1NvcXdodW9sa3VOM08wNWw0cnF4NWgxZEtYOGViNDZVbC1DQ1NycS9wdWJodG1sP2dpZD0wJnNpbmdsZT10cnVlXG4gKlxuICogQWNjZXB0ZWQgZm9ybWF0IHN0cmluZyBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8UHJpb3J8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQwIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgMTMwIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3LCA5OTk5ICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgOTk5OTk5OXRoICAgICAgfCA0LDUgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxMjMsIDk5OSAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiw0ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgMTMwIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3LCA5MDAwICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgOTk5OTk5OXRoICAgICAgfCA0LDUgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNCw2ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxMjMsIDk5OSAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA0LDYgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiw0ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgMTMwIHwgUiAgICAgICB8IC00MywgMSwgMTkwMCwgMjAxNywgOTk5OSwgLTk5OTkgICB8IDQsNSAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFJSICAgICAgfCAtNDMsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgfCA0LDUgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAxLCAxMjMsIDk5OSwgLTk5OSAgICAgICAgIHwgNCw1ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAxLCAyMDE3LCA5OTk5LCAtOTk5OSAgICB8IDQsNSAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLDQsNSB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCAxMzAgfCB1ICAgICAgIHwgLTQzLCAxLCAxOTAwLCAyMDE3LCA5OTk5LCAtOTk5ICAgIHwgNCAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDk5LCAtOTkgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDEyMywgOTk5LCAtOTk5ICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDIwMTcsIDk5OTksIC05OTk5ICAgIHwgNCAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsNCAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IDEyMCB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IDEyMCB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IDExMCB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IDExMCB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IDEwMCB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IDEwMCB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8ICA5MCB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8ICA5MCB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgIDkwIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8ICA5MCB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw1ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCA1ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCAgOTAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgIDkwIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4MCB8IGEuLmFhYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8ICA4MCB8IGIuLmJiYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBiYmJiICAgIHwgYS5tLiwgcC5tLiwgbm9vbiwgbWlkbmlnaHQgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgYmJiYmIgICB8IGEsIHAsIG4sIG1pICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgICB8ICA4MCB8IEIuLkJCQiAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBCQkJCICAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgQkJCQkIgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgICB8ICA3MCB8IGggICAgICAgfCAxLCAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBobyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMTJ0aCAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaGggICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgICB8ICA3MCB8IEggICAgICAgfCAwLCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBIbyAgICAgIHwgMHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgSEggICAgICB8IDAwLCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgICB8ICA3MCB8IEsgICAgICAgfCAxLCAyLCAuLi4sIDExLCAwICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBLbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMHRoICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgS0sgICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgICB8ICA3MCB8IGsgICAgICAgfCAyNCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBrbyAgICAgIHwgMjR0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwga2sgICAgICB8IDI0LCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2MCB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBtbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1MCB8IHMgICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBzbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgc3MgICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgICB8ICA0MCB8IHQgICAgICAgfCA1MTI5Njk1MjAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB0dCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgIDMwIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDEsIC4uLiwgOTk5ICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8ICAyMCB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgIDEwIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCAgMTAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8ICBOQSB8IFAgICAgICAgfCAwNS8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBQUCAgICAgIHwgTWF5IDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUFBQICAgICB8IE1heSAyOXRoLCAxNDUzICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFBQUFAgICAgfCBTdW5kYXksIE1heSAyOXRoLCAxNDUzICAgICAgICAgICAgfCAyLDUsOCB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCAgTkEgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ29tYmluYXRpb24gb2YgZGF0ZSBhbmQgdGltZSAgICB8ICBOQSB8IFBwICAgICAgfCAwNS8yOS8xNDUzLCAxMjowMCBBTSAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBQUHBwICAgIHwgTWF5IDI5LCAxNDUzLCAxMjowMDowMCBBTSAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUFBQcHAgICB8IE1heSAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFBQUFBwcCAgfCBTdW5kYXksIE1heSAyOXRoLCAxNDUzIGF0IC4uLiAgICAgfCAyLDUsOCB8XG4gKiBOb3RlczpcbiAqIDEuIFwiRm9ybWF0dGluZ1wiIHVuaXRzIChlLmcuIGZvcm1hdHRpbmcgcXVhcnRlcikgaW4gdGhlIGRlZmF1bHQgZW4tVVMgbG9jYWxlXG4gKiAgICBhcmUgdGhlIHNhbWUgYXMgXCJzdGFuZC1hbG9uZVwiIHVuaXRzLCBidXQgYXJlIGRpZmZlcmVudCBpbiBzb21lIGxhbmd1YWdlcy5cbiAqICAgIFwiRm9ybWF0dGluZ1wiIHVuaXRzIGFyZSBkZWNsaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsYW5ndWFnZVxuICogICAgaW4gdGhlIGNvbnRleHQgb2YgYSBkYXRlLiBcIlN0YW5kLWFsb25lXCIgdW5pdHMgYXJlIGFsd2F5cyBub21pbmF0aXZlIHNpbmd1bGFyLlxuICogICAgSW4gYGZvcm1hdGAgZnVuY3Rpb24sIHRoZXkgd2lsbCBwcm9kdWNlIGRpZmZlcmVudCByZXN1bHQ6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqICAgIGBwYXJzZWAgd2lsbCB0cnkgdG8gbWF0Y2ggYm90aCBmb3JtYXR0aW5nIGFuZCBzdGFuZC1hbG9uZSB1bml0cyBpbnRlcmNoYW5nZWFibHkuXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlOlxuICogICAgLSBmb3IgbnVtZXJpY2FsIHVuaXRzIChgeXl5eXl5eXlgKSBgcGFyc2VgIHdpbGwgdHJ5IHRvIG1hdGNoIGEgbnVtYmVyXG4gKiAgICAgIGFzIHdpZGUgYXMgdGhlIHNlcXVlbmNlXG4gKiAgICAtIGZvciB0ZXh0IHVuaXRzIChgTU1NTU1NTU1gKSBgcGFyc2VgIHdpbGwgdHJ5IHRvIG1hdGNoIHRoZSB3aWRlc3QgdmFyaWF0aW9uIG9mIHRoZSB1bml0LlxuICogICAgICBUaGVzZSB2YXJpYXRpb25zIGFyZSBtYXJrZWQgd2l0aCBcIjJcIiBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuICpcbiAqIDMuIGBRUVFRUWAgYW5kIGBxcXFxcWAgY291bGQgYmUgbm90IHN0cmljdGx5IG51bWVyaWNhbCBpbiBzb21lIGxvY2FsZXMuXG4gKiAgICBUaGVzZSB0b2tlbnMgcmVwcmVzZW50IHRoZSBzaG9ydGVzdCBmb3JtIG9mIHRoZSBxdWFydGVyLlxuICpcbiAqIDQuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBwYXR0ZXJucyBhcmUgQi5DLiB5ZWFyczpcbiAqXG4gKiAgICB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICogICAgfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAqICAgIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gKiAgICB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICogICAgfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAqXG4gKiAgICBBbHNvIGB5eWAgd2lsbCB0cnkgdG8gZ3Vlc3MgdGhlIGNlbnR1cnkgb2YgdHdvIGRpZ2l0IHllYXIgYnkgcHJveGltaXR5IHdpdGggYHJlZmVyZW5jZURhdGVgOlxuICpcbiAqICAgIGBwYXJzZSgnNTAnLCAneXknLCBuZXcgRGF0ZSgyMDE4LCAwLCAxKSkgLy89PiBTYXQgSmFuIDAxIDIwNTAgMDA6MDA6MDBgXG4gKlxuICogICAgYHBhcnNlKCc3NScsICd5eScsIG5ldyBEYXRlKDIwMTgsIDAsIDEpKSAvLz0+IFdlZCBKYW4gMDEgMTk3NSAwMDowMDowMGBcbiAqXG4gKiAgICB3aGlsZSBgdXVgIHdpbGwganVzdCBhc3NpZ24gdGhlIHllYXIgYXMgaXM6XG4gKlxuICogICAgYHBhcnNlKCc1MCcsICd1dScsIG5ldyBEYXRlKDIwMTgsIDAsIDEpKSAvLz0+IFNhdCBKYW4gMDEgMDA1MCAwMDowMDowMGBcbiAqXG4gKiAgICBgcGFyc2UoJzc1JywgJ3V1JywgbmV3IERhdGUoMjAxOCwgMCwgMSkpIC8vPT4gVHVlIEphbiAwMSAwMDc1IDAwOjAwOjAwYFxuICpcbiAqICAgIFRoZSBzYW1lIGRpZmZlcmVuY2UgaXMgdHJ1ZSBmb3IgbG9jYWwgYW5kIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyAoYFlgIGFuZCBgUmApLFxuICogICAgZXhjZXB0IGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBkZXBlbmRlbnQgb24gYG9wdGlvbnMud2Vla1N0YXJ0c09uYFxuICogICAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKGNvbXBhcmUgW3NldElTT1dlZWtZZWFyXShodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3NldElTT1dlZWtZZWFyKVxuICogICAgYW5kIFtzZXRXZWVrWWVhcl0oaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9zZXRXZWVrWWVhcikpLlxuICpcbiAqIDUuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogNi4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA3LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIGRheXMgb2YgdGhlIG1vbnRoLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDguIGBQK2AgdG9rZW5zIGRvIG5vdCBoYXZlIGEgZGVmaW5lZCBwcmlvcml0eSBzaW5jZSB0aGV5IGFyZSBtZXJlbHkgYWxpYXNlcyB0byBvdGhlciB0b2tlbnMgYmFzZWRcbiAqICAgIG9uIHRoZSBnaXZlbiBsb2NhbGUuXG4gKlxuICogICAgdXNpbmcgYGVuLVVTYCBsb2NhbGU6IGBQYCA9PiBgTU0vZGQveXl5eWBcbiAqICAgIHVzaW5nIGBlbi1VU2AgbG9jYWxlOiBgcGAgPT4gYGhoOm1tIGFgXG4gKiAgICB1c2luZyBgcHQtQlJgIGxvY2FsZTogYFBgID0+IGBkZC9NTS95eXl5YFxuICogICAgdXNpbmcgYHB0LUJSYCBsb2NhbGU6IGBwYCA9PiBgSEg6bW1gXG4gKlxuICogVmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGRhdGUgaW4gdGhlIGRlc2NlbmRpbmcgb3JkZXIgb2YgaXRzIHVuaXQncyBwcmlvcml0eS5cbiAqIFVuaXRzIG9mIGFuIGVxdWFsIHByaW9yaXR5IG92ZXJ3cml0ZSBlYWNoIG90aGVyIGluIHRoZSBvcmRlciBvZiBhcHBlYXJhbmNlLlxuICpcbiAqIElmIG5vIHZhbHVlcyBvZiBoaWdoZXIgcHJpb3JpdHkgYXJlIHBhcnNlZCAoZS5nLiB3aGVuIHBhcnNpbmcgc3RyaW5nICdKYW51YXJ5IDFzdCcgd2l0aG91dCBhIHllYXIpLFxuICogdGhlIHZhbHVlcyB3aWxsIGJlIHRha2VuIGZyb20gM3JkIGFyZ3VtZW50IGByZWZlcmVuY2VEYXRlYCB3aGljaCB3b3JrcyBhcyBhIGNvbnRleHQgb2YgcGFyc2luZy5cbiAqXG4gKiBgcmVmZXJlbmNlRGF0ZWAgbXVzdCBiZSBwYXNzZWQgZm9yIGNvcnJlY3Qgd29yayBvZiB0aGUgZnVuY3Rpb24uXG4gKiBJZiB5b3UncmUgbm90IHN1cmUgd2hpY2ggYHJlZmVyZW5jZURhdGVgIHRvIHN1cHBseSwgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIERhdGU6XG4gKiBgcGFyc2UoJzAyLzExLzIwMTQnLCAnTU0vZGQveXl5eScsIG5ldyBEYXRlKCkpYFxuICogSW4gdGhpcyBjYXNlIHBhcnNpbmcgd2lsbCBiZSBkb25lIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IGRhdGUuXG4gKiBJZiBgcmVmZXJlbmNlRGF0ZWAgaXMgYEludmFsaWQgRGF0ZWAgb3IgYSB2YWx1ZSBub3QgY29udmVydGlibGUgdG8gdmFsaWQgYERhdGVgLFxuICogdGhlbiBgSW52YWxpZCBEYXRlYCB3aWxsIGJlIHJldHVybmVkLlxuICpcbiAqIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqIElmIGBmb3JtYXRTdHJpbmdgIG1hdGNoZXMgd2l0aCBgZGF0ZVN0cmluZ2AgYnV0IGRvZXMgbm90IHByb3ZpZGVzIHRva2VucywgYHJlZmVyZW5jZURhdGVgIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogSWYgcGFyc2luZyBmYWlsZWQsIGBJbnZhbGlkIERhdGVgIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJbnZhbGlkIERhdGUgaXMgYSBEYXRlLCB3aG9zZSB0aW1lIHZhbHVlIGlzIE5hTi5cbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZVN0ciAtIFRoZSBzdHJpbmcgdG8gcGFyc2VcbiAqIEBwYXJhbSBmb3JtYXRTdHIgLSBUaGUgc3RyaW5nIG9mIHRva2Vuc1xuICogQHBhcmFtIHJlZmVyZW5jZURhdGUgLSBkZWZpbmVzIHZhbHVlcyBtaXNzaW5nIGZyb20gdGhlIHBhcnNlZCBkYXRlU3RyaW5nXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGRhdGVcbiAqXG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBtYXRjaGAgcHJvcGVydHlcbiAqIEB0aHJvd3MgdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUGFyc2UgMTEgRmVicnVhcnkgMjAxNCBmcm9tIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogdmFyIHJlc3VsdCA9IHBhcnNlKCcwMi8xMS8yMDE0JywgJ01NL2RkL3l5eXknLCBuZXcgRGF0ZSgpKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMDA6MDA6MDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUGFyc2UgMjh0aCBvZiBGZWJydWFyeSBpbiBFc3BlcmFudG8gbG9jYWxlIGluIHRoZSBjb250ZXh0IG9mIDIwMTAgeWVhcjpcbiAqIGltcG9ydCBlbyBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiB2YXIgcmVzdWx0ID0gcGFyc2UoJzI4LWEgZGUgZmVicnVhcm8nLCBcImRvICdkZScgTU1NTVwiLCBuZXcgRGF0ZSgyMDEwLCAwLCAxKSwge1xuICogICBsb2NhbGU6IGVvXG4gKiB9KVxuICogLy89PiBTdW4gRmViIDI4IDIwMTAgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKGRhdGVTdHIsIGZvcm1hdFN0ciwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBpbnZhbGlkRGF0ZSA9ICgpID0+IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgcmVmZXJlbmNlRGF0ZSwgTmFOKTtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMubG9jYWxlID8/IGRlZmF1bHRMb2NhbGU7XG5cbiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID1cbiAgICBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgMTtcblxuICBjb25zdCB3ZWVrU3RhcnRzT24gPVxuICAgIG9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICAwO1xuXG4gIGlmICghZm9ybWF0U3RyKVxuICAgIHJldHVybiBkYXRlU3RyID8gaW52YWxpZERhdGUoKSA6IHRvRGF0ZShyZWZlcmVuY2VEYXRlLCBvcHRpb25zPy5pbik7XG5cbiAgY29uc3Qgc3ViRm5PcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSxcbiAgICB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlLFxuICB9O1xuXG4gIC8vIElmIHRpbWV6b25lIGlzbid0IHNwZWNpZmllZCwgaXQgd2lsbCB0cnkgdG8gdXNlIHRoZSBjb250ZXh0IG9yXG4gIC8vIHRoZSByZWZlcmVuY2UgZGF0ZSBhbmQgZmFsbGJhY2sgdG8gdGhlIHN5c3RlbSB0aW1lIHpvbmUuXG4gIGNvbnN0IHNldHRlcnMgPSBbbmV3IERhdGVUaW1lem9uZVNldHRlcihvcHRpb25zPy5pbiwgcmVmZXJlbmNlRGF0ZSldO1xuXG4gIGNvbnN0IHRva2VucyA9IGZvcm1hdFN0clxuICAgIC5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cClcbiAgICAubWFwKChzdWJzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgICAgaWYgKGZpcnN0Q2hhcmFjdGVyIGluIGxvbmdGb3JtYXR0ZXJzKSB7XG4gICAgICAgIGNvbnN0IGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1YnN0cmluZztcbiAgICB9KVxuICAgIC5qb2luKFwiXCIpXG4gICAgLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApO1xuXG4gIGNvbnN0IHVzZWRUb2tlbnMgPSBbXTtcblxuICBmb3IgKGxldCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICBpZiAoXG4gICAgICAhb3B0aW9ucz8udXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zICYmXG4gICAgICBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pXG4gICAgKSB7XG4gICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIGRhdGVTdHIpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhb3B0aW9ucz8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyAmJlxuICAgICAgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbilcbiAgICApIHtcbiAgICAgIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdFN0ciwgZGF0ZVN0cik7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSB0b2tlblswXTtcbiAgICBjb25zdCBwYXJzZXIgPSBwYXJzZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICBpZiAocGFyc2VyKSB7XG4gICAgICBjb25zdCB7IGluY29tcGF0aWJsZVRva2VucyB9ID0gcGFyc2VyO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5jb21wYXRpYmxlVG9rZW5zKSkge1xuICAgICAgICBjb25zdCBpbmNvbXBhdGlibGVUb2tlbiA9IHVzZWRUb2tlbnMuZmluZChcbiAgICAgICAgICAodXNlZFRva2VuKSA9PlxuICAgICAgICAgICAgaW5jb21wYXRpYmxlVG9rZW5zLmluY2x1ZGVzKHVzZWRUb2tlbi50b2tlbikgfHxcbiAgICAgICAgICAgIHVzZWRUb2tlbi50b2tlbiA9PT0gZmlyc3RDaGFyYWN0ZXIsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbmNvbXBhdGlibGVUb2tlbikge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgICAgICAgYFRoZSBmb3JtYXQgc3RyaW5nIG11c3RuJ3QgY29udGFpbiBcXGAke2luY29tcGF0aWJsZVRva2VuLmZ1bGxUb2tlbn1cXGAgYW5kIFxcYCR7dG9rZW59XFxgIGF0IHRoZSBzYW1lIHRpbWVgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyc2VyLmluY29tcGF0aWJsZVRva2VucyA9PT0gXCIqXCIgJiYgdXNlZFRva2Vucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgICAgIGBUaGUgZm9ybWF0IHN0cmluZyBtdXN0bid0IGNvbnRhaW4gXFxgJHt0b2tlbn1cXGAgYW5kIGFueSBvdGhlciB0b2tlbiBhdCB0aGUgc2FtZSB0aW1lYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdXNlZFRva2Vucy5wdXNoKHsgdG9rZW46IGZpcnN0Q2hhcmFjdGVyLCBmdWxsVG9rZW46IHRva2VuIH0pO1xuXG4gICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IHBhcnNlci5ydW4oXG4gICAgICAgIGRhdGVTdHIsXG4gICAgICAgIHRva2VuLFxuICAgICAgICBsb2NhbGUubWF0Y2gsXG4gICAgICAgIHN1YkZuT3B0aW9ucyxcbiAgICAgICk7XG5cbiAgICAgIGlmICghcGFyc2VSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGludmFsaWREYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIHNldHRlcnMucHVzaChwYXJzZVJlc3VsdC5zZXR0ZXIpO1xuXG4gICAgICBkYXRlU3RyID0gcGFyc2VSZXN1bHQucmVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgICAgICBcIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgXCIgK1xuICAgICAgICAgICAgZmlyc3RDaGFyYWN0ZXIgK1xuICAgICAgICAgICAgXCJgXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICAgIGlmICh0b2tlbiA9PT0gXCInJ1wiKSB7XG4gICAgICAgIHRva2VuID0gXCInXCI7XG4gICAgICB9IGVsc2UgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgICB0b2tlbiA9IGNsZWFuRXNjYXBlZFN0cmluZyh0b2tlbik7XG4gICAgICB9XG5cbiAgICAgIC8vIEN1dCB0b2tlbiBmcm9tIHN0cmluZywgb3IsIGlmIHN0cmluZyBkb2Vzbid0IG1hdGNoIHRoZSB0b2tlbiwgcmV0dXJuIEludmFsaWQgRGF0ZVxuICAgICAgaWYgKGRhdGVTdHIuaW5kZXhPZih0b2tlbikgPT09IDApIHtcbiAgICAgICAgZGF0ZVN0ciA9IGRhdGVTdHIuc2xpY2UodG9rZW4ubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSByZW1haW5pbmcgaW5wdXQgY29udGFpbnMgc29tZXRoaW5nIG90aGVyIHRoYW4gd2hpdGVzcGFjZVxuICBpZiAoZGF0ZVN0ci5sZW5ndGggPiAwICYmIG5vdFdoaXRlc3BhY2VSZWdFeHAudGVzdChkYXRlU3RyKSkge1xuICAgIHJldHVybiBpbnZhbGlkRGF0ZSgpO1xuICB9XG5cbiAgY29uc3QgdW5pcXVlUHJpb3JpdHlTZXR0ZXJzID0gc2V0dGVyc1xuICAgIC5tYXAoKHNldHRlcikgPT4gc2V0dGVyLnByaW9yaXR5KVxuICAgIC5zb3J0KChhLCBiKSA9PiBiIC0gYSlcbiAgICAuZmlsdGVyKChwcmlvcml0eSwgaW5kZXgsIGFycmF5KSA9PiBhcnJheS5pbmRleE9mKHByaW9yaXR5KSA9PT0gaW5kZXgpXG4gICAgLm1hcCgocHJpb3JpdHkpID0+XG4gICAgICBzZXR0ZXJzXG4gICAgICAgIC5maWx0ZXIoKHNldHRlcikgPT4gc2V0dGVyLnByaW9yaXR5ID09PSBwcmlvcml0eSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIuc3ViUHJpb3JpdHkgLSBhLnN1YlByaW9yaXR5KSxcbiAgICApXG4gICAgLm1hcCgoc2V0dGVyQXJyYXkpID0+IHNldHRlckFycmF5WzBdKTtcblxuICBsZXQgZGF0ZSA9IHRvRGF0ZShyZWZlcmVuY2VEYXRlLCBvcHRpb25zPy5pbik7XG5cbiAgaWYgKGlzTmFOKCtkYXRlKSkgcmV0dXJuIGludmFsaWREYXRlKCk7XG5cbiAgY29uc3QgZmxhZ3MgPSB7fTtcbiAgZm9yIChjb25zdCBzZXR0ZXIgb2YgdW5pcXVlUHJpb3JpdHlTZXR0ZXJzKSB7XG4gICAgaWYgKCFzZXR0ZXIudmFsaWRhdGUoZGF0ZSwgc3ViRm5PcHRpb25zKSkge1xuICAgICAgcmV0dXJuIGludmFsaWREYXRlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gc2V0dGVyLnNldChkYXRlLCBmbGFncywgc3ViRm5PcHRpb25zKTtcbiAgICAvLyBSZXN1bHQgaXMgdHVwbGUgKGRhdGUsIGZsYWdzKVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgIGRhdGUgPSByZXN1bHRbMF07XG4gICAgICBPYmplY3QuYXNzaWduKGZsYWdzLCByZXN1bHRbMV0pO1xuICAgICAgLy8gUmVzdWx0IGlzIGRhdGVcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZSA9IHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZTtcbn1cblxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIHJldHVybiBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKVsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwLCBcIidcIik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgcGFyc2U7XG4iLCAiaW1wb3J0IHsgaXNWYWxpZCB9IGZyb20gXCIuL2lzVmFsaWQuanNcIjtcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSBcIi4vcGFyc2UuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGlzTWF0Y2h9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpc01hdGNoXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IHZhbGlkYXRlcyB0aGUgZGF0ZSBzdHJpbmcgYWdhaW5zdCBnaXZlbiBmb3JtYXRzXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHRydWUgaWYgZ2l2ZW4gZGF0ZSBpcyBzdHJpbmcgY29ycmVjdCBhZ2FpbnN0IHRoZSBnaXZlbiBmb3JtYXQgZWxzZVxuICogd2lsbCByZXR1cm4gZmFsc2UuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyBpbiB0aGUgZm9ybWF0IHN0cmluZyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqXG4gKiBGb3JtYXQgb2YgdGhlIGZvcm1hdCBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDUgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBOb3QgYWxsIHRva2VucyBhcmUgY29tcGF0aWJsZS4gQ29tYmluYXRpb25zIHRoYXQgZG9uJ3QgbWFrZSBzZW5zZSBvciBjb3VsZCBsZWFkIHRvIGJ1Z3MgYXJlIHByb2hpYml0ZWRcbiAqIGFuZCB3aWxsIHRocm93IGBSYW5nZUVycm9yYC4gRm9yIGV4YW1wbGUgdXNhZ2Ugb2YgMjQtaG91ciBmb3JtYXQgdG9rZW4gd2l0aCBBTS9QTSB0b2tlbiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbjpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpc01hdGNoKCcyMyBBTScsICdISCBhJylcbiAqIC8vPT4gUmFuZ2VFcnJvcjogVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIGBISGAgYW5kIGBhYCBhdCB0aGUgc2FtZSB0aW1lXG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIGNvbXBhdGliaWxpdHkgdGFibGU6IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kL2UvMlBBQ1gtMXZRT1BVM3hVaHBsbGw2ZHlvTW1WVVhIS2xfOENSRHM2X3VlTG1leDNTb3F3aHVvbGt1TjNPMDVsNHJxeDVoMWRLWDhlYjQ2VWwtQ0NTcnEvcHViaHRtbD9naWQ9MCZzaW5nbGU9dHJ1ZVxuICpcbiAqIEFjY2VwdGVkIGZvcm1hdCBzdHJpbmcgcGF0dGVybnM6XG4gKiB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFByaW9yfCBQYXR0ZXJuIHwgUmVzdWx0IGV4YW1wbGVzICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLXxcbiAqIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0MCB8IEcuLkdHRyAgfCBBRCwgQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBHR0dHICAgIHwgQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3QgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgR0dHR0cgICB8IEEsIEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ2FsZW5kYXIgeWVhciAgICAgICAgICAgICAgICAgICB8IDEzMCB8IHkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNywgOTk5OSAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB5byAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDk5OTk5OTl0aCAgICAgIHwgNCw1ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeXkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHl5eSAgICAgfCAwNDQsIDAwMSwgMTIzLCA5OTkgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB5eXl5ICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeXl5eXkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsNCAgIHxcbiAqIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICB8IDEzMCB8IFkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNywgOTAwMCAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBZbyAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDk5OTk5OTl0aCAgICAgIHwgNCw1ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgWVkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDQsNiAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFlZWSAgICAgfCAwNDQsIDAwMSwgMTIzLCA5OTkgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBZWVlZICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNCw2ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgWVlZWVkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsNCAgIHxcbiAqIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgICB8IDEzMCB8IFIgICAgICAgfCAtNDMsIDEsIDE5MDAsIDIwMTcsIDk5OTksIC05OTk5ICAgfCA0LDUgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBSUiAgICAgIHwgLTQzLCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgIHwgNCw1ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUlJSICAgICB8IC0wNDMsIDAwMSwgMTIzLCA5OTksIC05OTkgICAgICAgICB8IDQsNSAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFJSUlIgICAgfCAtMDA0MywgMDAwMSwgMjAxNywgOTk5OSwgLTk5OTkgICAgfCA0LDUgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBSUlJSUiAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiw0LDUgfFxuICogfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgIHwgMTMwIHwgdSAgICAgICB8IC00MywgMSwgMTkwMCwgMjAxNywgOTk5OSwgLTk5OSAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHV1ICAgICAgfCAtNDMsIDAxLCA5OSwgLTk5ICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB1dXUgICAgIHwgLTA0MywgMDAxLCAxMjMsIDk5OSwgLTk5OSAgICAgICAgIHwgNCAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgdXV1dSAgICB8IC0wMDQzLCAwMDAxLCAyMDE3LCA5OTk5LCAtOTk5OSAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHV1dXV1ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLDQgICB8XG4gKiB8IFF1YXJ0ZXIgKGZvcm1hdHRpbmcpICAgICAgICAgICAgfCAxMjAgfCBRICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFFRICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBRUVEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUVFRUSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFFRUVFRICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IFF1YXJ0ZXIgKHN0YW5kLWFsb25lKSAgICAgICAgICAgfCAxMjAgfCBxICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgcW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHFxICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBxcXEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgcXFxcSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHFxcXFxICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IE1vbnRoIChmb3JtYXR0aW5nKSAgICAgICAgICAgICAgfCAxMTAgfCBNICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IE1NICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBNTU0gICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTU1NTSAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IE1NTU1NICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1vbnRoIChzdGFuZC1hbG9uZSkgICAgICAgICAgICAgfCAxMTAgfCBMICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IExMICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBMTEwgICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTExMTCAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IExMTExMICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgfCAxMDAgfCB3ICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgd28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHd3ICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICAgfCAxMDAgfCBJICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgSW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IElJICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICAgfCAgOTAgfCBkICAgICAgIHwgMSwgMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDMxc3QgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGRkICAgICAgfCAwMSwgMDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICAgfCAgOTAgfCBEICAgICAgIHwgMSwgMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgRG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDM2NXRoLCAzNjZ0aCAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEREICAgICAgfCAwMSwgMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBEREQgICAgIHwgMDAxLCAwMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgRERERCAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgRGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgICAgICB8ICA5MCB8IEUuLkVFRSAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBFRUVFICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgRUVFRUUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEVFRUVFRSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgfCAgOTAgfCBpICAgICAgIHwgMSwgMiwgMywgLi4uLCA3ICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDd0aCAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGlpICAgICAgfCAwMSwgMDIsIC4uLiwgMDcgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBpaWkgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdSAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaWlpaSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIsNSAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGlpaWlpICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBpaWlpaWkgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgNSAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgIHwgIDkwIHwgZSAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGVvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBlZSAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZWVlICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3UgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGVlZWUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBlZWVlZSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZWVlZWVlICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKHN0YW5kLWFsb25lKSB8ICA5MCB8IGMgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBjbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgY2MgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGNjYyAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBjY2NjICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgY2NjY2MgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGNjY2NjYyAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgODAgfCBhLi5hYWEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCAgODAgfCBiLi5iYmIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCAgODAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCAgNzAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCAgNzAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCAgNzAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCAgNzAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNTAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCAgNDAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgICB8ICAzMCB8IFMgICAgICAgfCAwLCAxLCAuLi4sIDkgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgU1NTICAgICB8IDAwMCwgMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFNTU1MgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCAgMjAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8ICAxMCB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgIDEwIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICAgfCAgTkEgfCBQICAgICAgIHwgMDUvMjkvMTQ1MyAgICAgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUFAgICAgICB8IE1heSAyOSwgMTQ1MyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFBQUCAgICAgfCBNYXkgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBQUFBQICAgIHwgU3VuZGF5LCBNYXkgMjl0aCwgMTQ1MyAgICAgICAgICAgIHwgMiw1LDggfFxuICogfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgIHwgIE5BIHwgcCAgICAgICB8IDEyOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHBwICAgICAgfCAxMjowMDowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCAgTkEgfCBQcCAgICAgIHwgMDUvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUFBwcCAgICB8IE1heSAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFBQUHBwICAgfCBNYXkgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBQUFBQcHAgIHwgU3VuZGF5LCBNYXkgMjl0aCwgMTQ1MyBhdCAuLi4gICAgIHwgMiw1LDggfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhci5cbiAqICAgIEluIGBmb3JtYXRgIGZ1bmN0aW9uLCB0aGV5IHdpbGwgcHJvZHVjZSBkaWZmZXJlbnQgcmVzdWx0OlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTExMTCcsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWQnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTU1NTScsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWR1J2BcbiAqXG4gKiAgICBgaXNNYXRjaGAgd2lsbCB0cnkgdG8gbWF0Y2ggYm90aCBmb3JtYXR0aW5nIGFuZCBzdGFuZC1hbG9uZSB1bml0cyBpbnRlcmNoYW5nZWFibHkuXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlOlxuICogICAgLSBmb3IgbnVtZXJpY2FsIHVuaXRzIChgeXl5eXl5eXlgKSBgaXNNYXRjaGAgd2lsbCB0cnkgdG8gbWF0Y2ggYSBudW1iZXJcbiAqICAgICAgYXMgd2lkZSBhcyB0aGUgc2VxdWVuY2VcbiAqICAgIC0gZm9yIHRleHQgdW5pdHMgKGBNTU1NTU1NTWApIGBpc01hdGNoYCB3aWxsIHRyeSB0byBtYXRjaCB0aGUgd2lkZXN0IHZhcmlhdGlvbiBvZiB0aGUgdW5pdC5cbiAqICAgICAgVGhlc2UgdmFyaWF0aW9ucyBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAzLiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA0LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIHdpbGwgdHJ5IHRvIGd1ZXNzIHRoZSBjZW50dXJ5IG9mIHR3byBkaWdpdCB5ZWFyIGJ5IHByb3hpbWl0eSB3aXRoIGByZWZlcmVuY2VEYXRlYDpcbiAqXG4gKiAgICBgaXNNYXRjaCgnNTAnLCAneXknKSAvLz0+IHRydWVgXG4gKlxuICogICAgYGlzTWF0Y2goJzc1JywgJ3l5JykgLy89PiB0cnVlYFxuICpcbiAqICAgIHdoaWxlIGB1dWAgd2lsbCB1c2UgdGhlIHllYXIgYXMgaXM6XG4gKlxuICogICAgYGlzTWF0Y2goJzUwJywgJ3V1JykgLy89PiB0cnVlYFxuICpcbiAqICAgIGBpc01hdGNoKCc3NScsICd1dScpIC8vPT4gdHJ1ZWBcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtzZXRJU09XZWVrWWVhcl0oaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9zZXRJU09XZWVrWWVhcilcbiAqICAgIGFuZCBbc2V0V2Vla1llYXJdKGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3Mvc2V0V2Vla1llYXIpKS5cbiAqXG4gKiA1LiBUaGVzZSBwYXR0ZXJucyBhcmUgbm90IGluIHRoZSBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiAgICAtIGBpYDogSVNPIGRheSBvZiB3ZWVrXG4gKiAgICAtIGBJYDogSVNPIHdlZWsgb2YgeWVhclxuICogICAgLSBgUmA6IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKiAgICAtIGBvYDogb3JkaW5hbCBudW1iZXIgbW9kaWZpZXJcbiAqICAgIC0gYFBgOiBsb25nIGxvY2FsaXplZCBkYXRlXG4gKiAgICAtIGBwYDogbG9uZyBsb2NhbGl6ZWQgdGltZVxuICpcbiAqIDYuIGBZWWAgYW5kIGBZWVlZYCB0b2tlbnMgcmVwcmVzZW50IHdlZWstbnVtYmVyaW5nIHllYXJzIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIHllYXJzLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogNy4gYERgIGFuZCBgRERgIHRva2VucyByZXByZXNlbnQgZGF5cyBvZiB0aGUgeWVhciBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCBkYXlzIG9mIHRoZSBtb250aC5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA4LiBgUCtgIHRva2VucyBkbyBub3QgaGF2ZSBhIGRlZmluZWQgcHJpb3JpdHkgc2luY2UgdGhleSBhcmUgbWVyZWx5IGFsaWFzZXMgdG8gb3RoZXIgdG9rZW5zIGJhc2VkXG4gKiAgICBvbiB0aGUgZ2l2ZW4gbG9jYWxlLlxuICpcbiAqICAgIHVzaW5nIGBlbi1VU2AgbG9jYWxlOiBgUGAgPT4gYE1NL2RkL3l5eXlgXG4gKiAgICB1c2luZyBgZW4tVVNgIGxvY2FsZTogYHBgID0+IGBoaDptbSBhYFxuICogICAgdXNpbmcgYHB0LUJSYCBsb2NhbGU6IGBQYCA9PiBgZGQvTU0veXl5eWBcbiAqICAgIHVzaW5nIGBwdC1CUmAgbG9jYWxlOiBgcGAgPT4gYEhIOm1tYFxuICpcbiAqIFZhbHVlcyB3aWxsIGJlIGNoZWNrZWQgaW4gdGhlIGRlc2NlbmRpbmcgb3JkZXIgb2YgaXRzIHVuaXQncyBwcmlvcml0eS5cbiAqIFVuaXRzIG9mIGFuIGVxdWFsIHByaW9yaXR5IG92ZXJ3cml0ZSBlYWNoIG90aGVyIGluIHRoZSBvcmRlciBvZiBhcHBlYXJhbmNlLlxuICpcbiAqIElmIG5vIHZhbHVlcyBvZiBoaWdoZXIgcHJpb3JpdHkgYXJlIG1hdGNoZWQgKGUuZy4gd2hlbiBtYXRjaGluZyBzdHJpbmcgJ0phbnVhcnkgMXN0JyB3aXRob3V0IGEgeWVhciksXG4gKiB0aGUgdmFsdWVzIHdpbGwgYmUgdGFrZW4gZnJvbSB0b2RheSdzIHVzaW5nIGBuZXcgRGF0ZSgpYCBkYXRlIHdoaWNoIHdvcmtzIGFzIGEgY29udGV4dCBvZiBwYXJzaW5nLlxuICpcbiAqIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqIElmIGBmb3JtYXRTdHJpbmdgIG1hdGNoZXMgd2l0aCBgZGF0ZVN0cmluZ2AgYnV0IGRvZXMgbm90IHByb3ZpZGVzIHRva2VucywgYHJlZmVyZW5jZURhdGVgIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIGRhdGVTdHIgLSBUaGUgZGF0ZSBzdHJpbmcgdG8gdmVyaWZ5XG4gKiBAcGFyYW0gZm9ybWF0IC0gVGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIEByZXR1cm5zIElzIGZvcm1hdCBzdHJpbmcgYSBtYXRjaCBmb3IgZGF0ZSBzdHJpbmc/XG4gKlxuICogQHRocm93cyBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgbWF0Y2hgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnM7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnM7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgdXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE1hdGNoIDExIEZlYnJ1YXJ5IDIwMTQgZnJvbSBtaWRkbGUtZW5kaWFuIGZvcm1hdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzTWF0Y2goJzAyLzExLzIwMTQnLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTWF0Y2ggMjh0aCBvZiBGZWJydWFyeSBpbiBFc3BlcmFudG8gbG9jYWxlIGluIHRoZSBjb250ZXh0IG9mIDIwMTAgeWVhcjpcbiAqIGltcG9ydCBlbyBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBpc01hdGNoKCcyOC1hIGRlIGZlYnJ1YXJvJywgXCJkbyAnZGUnIE1NTU1cIiwge1xuICogICBsb2NhbGU6IGVvXG4gKiB9KVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01hdGNoKGRhdGVTdHIsIGZvcm1hdFN0ciwgb3B0aW9ucykge1xuICByZXR1cm4gaXNWYWxpZChwYXJzZShkYXRlU3RyLCBmb3JtYXRTdHIsIG5ldyBEYXRlKCksIG9wdGlvbnMpKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc01hdGNoO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgaXNNb25kYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpc01vbmRheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgTW9uZGF5P1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgTW9uZGF5P1xuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIE1vbmRheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJcyAyMiBTZXB0ZW1iZXIgMjAxNCBNb25kYXk/XG4gKiBjb25zdCByZXN1bHQgPSBpc01vbmRheShuZXcgRGF0ZSgyMDE0LCA4LCAyMikpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTW9uZGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDE7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNNb25kYXk7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgaXNQYXN0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIGluIHRoZSBwYXN0P1xuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBnaXZlbiBkYXRlIGluIHRoZSBwYXN0P1xuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZSBpcyBpbiB0aGUgcGFzdFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyA2IE9jdG9iZXIgMjAxNCwgaXMgMiBKdWx5IDIwMTQgaW4gdGhlIHBhc3Q/XG4gKiBjb25zdCByZXN1bHQgPSBpc1Bhc3QobmV3IERhdGUoMjAxNCwgNiwgMikpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFzdChkYXRlKSB7XG4gIHJldHVybiArdG9EYXRlKGRhdGUpIDwgRGF0ZS5ub3coKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc1Bhc3Q7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mSG91cn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZIb3VyXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIGhvdXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhbiBob3VyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhbiBob3VyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhbiBob3VyIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZkhvdXIobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1KSlcbiAqIC8vPT4gVHVlIFNlcCAwMiAyMDE0IDExOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mSG91cihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgX2RhdGUuc2V0TWludXRlcygwLCAwLCAwKTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZIb3VyO1xuIiwgImltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZkhvdXIgfSBmcm9tIFwiLi9zdGFydE9mSG91ci5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgaXNTYW1lSG91cn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGlzU2FtZUhvdXJcbiAqIEBjYXRlZ29yeSBIb3VyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgaG91ciAoYW5kIHNhbWUgZGF5KT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgaG91ciAoYW5kIHNhbWUgZGF5KT9cbiAqXG4gKiBAcGFyYW0gZGF0ZUxlZnQgLSBUaGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGRhdGVSaWdodCAtIFRoZSBzZWNvbmQgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGVzIGFyZSBpbiB0aGUgc2FtZSBob3VyIChhbmQgc2FtZSBkYXkpXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSA0IFNlcHRlbWJlciAyMDE0IDA2OjAwOjAwIGFuZCA0IFNlcHRlbWJlciAwNjozMDowMCBpbiB0aGUgc2FtZSBob3VyP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lSG91cihuZXcgRGF0ZSgyMDE0LCA4LCA0LCA2LCAwKSwgbmV3IERhdGUoMjAxNCwgOCwgNCwgNiwgMzApKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSA0IFNlcHRlbWJlciAyMDE0IDA2OjAwOjAwIGFuZCA1IFNlcHRlbWJlciAwNjowMDowMCBpbiB0aGUgc2FtZSBob3VyP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lSG91cihuZXcgRGF0ZSgyMDE0LCA4LCA0LCA2LCAwKSwgbmV3IERhdGUoMjAxNCwgOCwgNSwgNiwgMCkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWVIb3VyKGRhdGVMZWZ0LCBkYXRlUmlnaHQsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2RhdGVMZWZ0XywgZGF0ZVJpZ2h0X10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBkYXRlTGVmdCxcbiAgICBkYXRlUmlnaHQsXG4gICk7XG4gIHJldHVybiArc3RhcnRPZkhvdXIoZGF0ZUxlZnRfKSA9PT0gK3N0YXJ0T2ZIb3VyKGRhdGVSaWdodF8pO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzU2FtZUhvdXI7XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBpc1NhbWVXZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgaXNTYW1lV2Vla1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSB3ZWVrIChhbmQgbW9udGggYW5kIHllYXIpP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSB3ZWVrIChhbmQgbW9udGggYW5kIHllYXIpP1xuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIHNlY29uZCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZXMgYXJlIGluIHRoZSBzYW1lIHdlZWsgKGFuZCBtb250aCBhbmQgeWVhcilcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDMxIEF1Z3VzdCAyMDE0IGFuZCA0IFNlcHRlbWJlciAyMDE0IGluIHRoZSBzYW1lIHdlZWs/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVXZWVrKG5ldyBEYXRlKDIwMTQsIDcsIDMxKSwgbmV3IERhdGUoMjAxNCwgOCwgNCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgd2VlayBzdGFydHMgd2l0aCBNb25kYXksXG4gKiAvLyBhcmUgMzEgQXVndXN0IDIwMTQgYW5kIDQgU2VwdGVtYmVyIDIwMTQgaW4gdGhlIHNhbWUgd2Vlaz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZVdlZWsobmV3IERhdGUoMjAxNCwgNywgMzEpLCBuZXcgRGF0ZSgyMDE0LCA4LCA0KSwge1xuICogICB3ZWVrU3RhcnRzT246IDFcbiAqIH0pXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAxIEphbnVhcnkgMjAxNCBhbmQgMSBKYW51YXJ5IDIwMTUgaW4gdGhlIHNhbWUgd2Vlaz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZVdlZWsobmV3IERhdGUoMjAxNCwgMCwgMSksIG5ldyBEYXRlKDIwMTUsIDAsIDEpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lV2VlayhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuICByZXR1cm4gKFxuICAgICtzdGFydE9mV2VlayhsYXRlckRhdGVfLCBvcHRpb25zKSA9PT0gK3N0YXJ0T2ZXZWVrKGVhcmxpZXJEYXRlXywgb3B0aW9ucylcbiAgKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc1NhbWVXZWVrO1xuIiwgImltcG9ydCB7IGlzU2FtZVdlZWsgfSBmcm9tIFwiLi9pc1NhbWVXZWVrLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBpc1NhbWVJU09XZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgaXNTYW1lSVNPV2Vla1xuICogQGNhdGVnb3J5IElTTyBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgSVNPIHdlZWsgKGFuZCB5ZWFyKT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgSVNPIHdlZWsgKGFuZCB5ZWFyKT9cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHBhcmFtIGxhdGVyRGF0ZSAtIFRoZSBmaXJzdCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gZWFybGllckRhdGUgLSBUaGUgc2Vjb25kIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlcyBhcmUgaW4gdGhlIHNhbWUgSVNPIHdlZWsgKGFuZCB5ZWFyKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgMSBTZXB0ZW1iZXIgMjAxNCBhbmQgNyBTZXB0ZW1iZXIgMjAxNCBpbiB0aGUgc2FtZSBJU08gd2Vlaz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZUlTT1dlZWsobmV3IERhdGUoMjAxNCwgOCwgMSksIG5ldyBEYXRlKDIwMTQsIDgsIDcpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAxIFNlcHRlbWJlciAyMDE0IGFuZCAxIFNlcHRlbWJlciAyMDE1IGluIHRoZSBzYW1lIElTTyB3ZWVrP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lSVNPV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgbmV3IERhdGUoMjAxNSwgOCwgMSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWVJU09XZWVrKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGlzU2FtZVdlZWsobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgeyAuLi5vcHRpb25zLCB3ZWVrU3RhcnRzT246IDEgfSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNTYW1lSVNPV2VlaztcbiIsICJpbXBvcnQgeyBzdGFydE9mSVNPV2Vla1llYXIgfSBmcm9tIFwiLi9zdGFydE9mSVNPV2Vla1llYXIuanNcIjtcblxuaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBpc1NhbWVJU09XZWVrWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGlzU2FtZUlTT1dlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhcj9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgSVNPIHdlZWstbnVtYmVyaW5nIHllYXI/XG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIHNlY29uZCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZXMgYXJlIGluIHRoZSBzYW1lIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAyOSBEZWNlbWJlciAyMDAzIGFuZCAyIEphbnVhcnkgMjAwNSBpbiB0aGUgc2FtZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhcj9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZUlTT1dlZWtZZWFyKG5ldyBEYXRlKDIwMDMsIDExLCAyOSksIG5ldyBEYXRlKDIwMDUsIDAsIDIpKVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWVJU09XZWVrWWVhcihsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuICByZXR1cm4gK3N0YXJ0T2ZJU09XZWVrWWVhcihsYXRlckRhdGVfKSA9PT0gK3N0YXJ0T2ZJU09XZWVrWWVhcihlYXJsaWVyRGF0ZV8pO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzU2FtZUlTT1dlZWtZZWFyO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZk1pbnV0ZX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZNaW51dGVcbiAqIEBjYXRlZ29yeSBNaW51dGUgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIG1pbnV0ZSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgbWludXRlIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhIG1pbnV0ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSBtaW51dGUgZm9yIDEgRGVjZW1iZXIgMjAxNCAyMjoxNTo0NS40MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mTWludXRlKG5ldyBEYXRlKDIwMTQsIDExLCAxLCAyMiwgMTUsIDQ1LCA0MDApKVxuICogLy89PiBNb24gRGVjIDAxIDIwMTQgMjI6MTU6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZNaW51dGUoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGRhdGVfLnNldFNlY29uZHMoMCwgMCk7XG4gIHJldHVybiBkYXRlXztcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mTWludXRlO1xuIiwgImltcG9ydCB7IHN0YXJ0T2ZNaW51dGUgfSBmcm9tIFwiLi9zdGFydE9mTWludXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgaXNTYW1lTWludXRlXG4gKiBAY2F0ZWdvcnkgTWludXRlIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgbWludXRlIChhbmQgaG91ciBhbmQgZGF5KT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgbWludXRlIChhbmQgaG91ciBhbmQgZGF5KT9cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGZpcnN0IGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBzZWNvbmQgZGF0ZSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlcyBhcmUgaW4gdGhlIHNhbWUgbWludXRlIChhbmQgaG91ciBhbmQgZGF5KVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgNCBTZXB0ZW1iZXIgMjAxNCAwNjozMDowMCBhbmQgNCBTZXB0ZW1iZXIgMjAxNCAwNjozMDoxNSBpbiB0aGUgc2FtZSBtaW51dGU/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVNaW51dGUoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDgsIDQsIDYsIDMwKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgOCwgNCwgNiwgMzAsIDE1KVxuICogKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSA0IFNlcHRlbWJlciAyMDE0IDA2OjMwOjAwIGFuZCA1IFNlcHRlbWJlciAyMDE0IDA2OjMwOjAwIGluIHRoZSBzYW1lIG1pbnV0ZT9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZU1pbnV0ZShcbiAqICAgbmV3IERhdGUoMjAxNCwgOCwgNCwgNiwgMzApLFxuICogICBuZXcgRGF0ZSgyMDE0LCA4LCA1LCA2LCAzMClcbiAqIClcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZU1pbnV0ZShsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7XG4gIHJldHVybiArc3RhcnRPZk1pbnV0ZShsYXRlckRhdGUpID09PSArc3RhcnRPZk1pbnV0ZShlYXJsaWVyRGF0ZSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNTYW1lTWludXRlO1xuIiwgImltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgaXNTYW1lTW9udGh9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpc1NhbWVNb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgbW9udGggKGFuZCB5ZWFyKT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgbW9udGggKGFuZCB5ZWFyKT9cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGZpcnN0IGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBzZWNvbmQgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGVzIGFyZSBpbiB0aGUgc2FtZSBtb250aCAoYW5kIHllYXIpXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAyIFNlcHRlbWJlciAyMDE0IGFuZCAyNSBTZXB0ZW1iZXIgMjAxNCBpbiB0aGUgc2FtZSBtb250aD9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZU1vbnRoKG5ldyBEYXRlKDIwMTQsIDgsIDIpLCBuZXcgRGF0ZSgyMDE0LCA4LCAyNSkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDIgU2VwdGVtYmVyIDIwMTQgYW5kIDI1IFNlcHRlbWJlciAyMDE1IGluIHRoZSBzYW1lIG1vbnRoP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lTW9udGgobmV3IERhdGUoMjAxNCwgOCwgMiksIG5ldyBEYXRlKDIwMTUsIDgsIDI1KSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZU1vbnRoKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBsYXRlckRhdGUsXG4gICAgZWFybGllckRhdGUsXG4gICk7XG4gIHJldHVybiAoXG4gICAgbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpID09PSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAmJlxuICAgIGxhdGVyRGF0ZV8uZ2V0TW9udGgoKSA9PT0gZWFybGllckRhdGVfLmdldE1vbnRoKClcbiAgKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc1NhbWVNb250aDtcbiIsICJpbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZRdWFydGVyIH0gZnJvbSBcIi4vc3RhcnRPZlF1YXJ0ZXIuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGlzU2FtZVF1YXJ0ZXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpc1NhbWVRdWFydGVyXG4gKiBAY2F0ZWdvcnkgUXVhcnRlciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIHF1YXJ0ZXIgKGFuZCB5ZWFyKT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgcXVhcnRlciAoYW5kIHllYXIpP1xuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIHNlY29uZCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZXMgYXJlIGluIHRoZSBzYW1lIHF1YXJ0ZXIgKGFuZCB5ZWFyKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgMSBKYW51YXJ5IDIwMTQgYW5kIDggTWFyY2ggMjAxNCBpbiB0aGUgc2FtZSBxdWFydGVyP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lUXVhcnRlcihuZXcgRGF0ZSgyMDE0LCAwLCAxKSwgbmV3IERhdGUoMjAxNCwgMiwgOCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDEgSmFudWFyeSAyMDE0IGFuZCAxIEphbnVhcnkgMjAxNSBpbiB0aGUgc2FtZSBxdWFydGVyP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lUXVhcnRlcihuZXcgRGF0ZSgyMDE0LCAwLCAxKSwgbmV3IERhdGUoMjAxNSwgMCwgMSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWVRdWFydGVyKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2RhdGVMZWZ0XywgZGF0ZVJpZ2h0X10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBsYXRlckRhdGUsXG4gICAgZWFybGllckRhdGUsXG4gICk7XG4gIHJldHVybiArc3RhcnRPZlF1YXJ0ZXIoZGF0ZUxlZnRfKSA9PT0gK3N0YXJ0T2ZRdWFydGVyKGRhdGVSaWdodF8pO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzU2FtZVF1YXJ0ZXI7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mU2Vjb25kfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZlNlY29uZFxuICogQGNhdGVnb3J5IFNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgc2Vjb25kIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSBzZWNvbmQgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhIHNlY29uZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSBzZWNvbmQgZm9yIDEgRGVjZW1iZXIgMjAxNCAyMjoxNTo0NS40MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mU2Vjb25kKG5ldyBEYXRlKDIwMTQsIDExLCAxLCAyMiwgMTUsIDQ1LCA0MDApKVxuICogLy89PiBNb24gRGVjIDAxIDIwMTQgMjI6MTU6NDUuMDAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mU2Vjb25kKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBkYXRlXy5zZXRNaWxsaXNlY29uZHMoMCk7XG4gIHJldHVybiBkYXRlXztcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mU2Vjb25kO1xuIiwgImltcG9ydCB7IHN0YXJ0T2ZTZWNvbmQgfSBmcm9tIFwiLi9zdGFydE9mU2Vjb25kLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgaXNTYW1lU2Vjb25kXG4gKiBAY2F0ZWdvcnkgU2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgc2Vjb25kIChhbmQgaG91ciBhbmQgZGF5KT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgc2Vjb25kIChhbmQgaG91ciBhbmQgZGF5KT9cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGZpcnN0IGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBzZWNvbmQgZGF0ZSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlcyBhcmUgaW4gdGhlIHNhbWUgc2Vjb25kIChhbmQgaG91ciBhbmQgZGF5KVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgNCBTZXB0ZW1iZXIgMjAxNCAwNjozMDoxNS4wMDAgYW5kIDQgU2VwdGVtYmVyIDIwMTQgMDY6MzAuMTUuNTAwIGluIHRoZSBzYW1lIHNlY29uZD9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZVNlY29uZChcbiAqICAgbmV3IERhdGUoMjAxNCwgOCwgNCwgNiwgMzAsIDE1KSxcbiAqICAgbmV3IERhdGUoMjAxNCwgOCwgNCwgNiwgMzAsIDE1LCA1MDApXG4gKiApXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDQgU2VwdGVtYmVyIDIwMTQgMDY6MDA6MTUuMDAwIGFuZCA0IFNlcHRlbWJlciAyMDE0IDA2OjAxLjE1LjAwMCBpbiB0aGUgc2FtZSBzZWNvbmQ/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVTZWNvbmQoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDgsIDQsIDYsIDAsIDE1KSxcbiAqICAgbmV3IERhdGUoMjAxNCwgOCwgNCwgNiwgMSwgMTUpXG4gKiApXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSA0IFNlcHRlbWJlciAyMDE0IDA2OjAwOjE1LjAwMCBhbmQgNSBTZXB0ZW1iZXIgMjAxNCAwNjowMC4xNS4wMDAgaW4gdGhlIHNhbWUgc2Vjb25kP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lU2Vjb25kKFxuICogICBuZXcgRGF0ZSgyMDE0LCA4LCA0LCA2LCAwLCAxNSksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDgsIDUsIDYsIDAsIDE1KVxuICogKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lU2Vjb25kKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpIHtcbiAgcmV0dXJuICtzdGFydE9mU2Vjb25kKGxhdGVyRGF0ZSkgPT09ICtzdGFydE9mU2Vjb25kKGVhcmxpZXJEYXRlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc1NhbWVTZWNvbmQ7XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBpc1NhbWVZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgaXNTYW1lWWVhclxuICogQGNhdGVnb3J5IFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSB5ZWFyP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSB5ZWFyP1xuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIHNlY29uZCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZXMgYXJlIGluIHRoZSBzYW1lIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDIgU2VwdGVtYmVyIDIwMTQgYW5kIDI1IFNlcHRlbWJlciAyMDE0IGluIHRoZSBzYW1lIHllYXI/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVZZWFyKG5ldyBEYXRlKDIwMTQsIDgsIDIpLCBuZXcgRGF0ZSgyMDE0LCA4LCAyNSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZVllYXIobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcbiAgcmV0dXJuIGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSA9PT0gZWFybGllckRhdGVfLmdldEZ1bGxZZWFyKCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNTYW1lWWVhcjtcbiIsICJpbXBvcnQgeyBjb25zdHJ1Y3ROb3cgfSBmcm9tIFwiLi9jb25zdHJ1Y3ROb3cuanNcIjtcbmltcG9ydCB7IGlzU2FtZUhvdXIgfSBmcm9tIFwiLi9pc1NhbWVIb3VyLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGlzVGhpc0hvdXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpc1RoaXNIb3VyXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgc2FtZSBob3VyIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIHNhbWUgaG91ciBhcyB0aGUgY3VycmVudCBkYXRlP1xuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIGluIHRoaXMgaG91clxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiBub3cgaXMgMjUgU2VwdGVtYmVyIDIwMTQgMTg6MzA6MTUuNTAwLFxuICogLy8gaXMgMjUgU2VwdGVtYmVyIDIwMTQgMTg6MDA6MDAgaW4gdGhpcyBob3VyP1xuICogY29uc3QgcmVzdWx0ID0gaXNUaGlzSG91cihuZXcgRGF0ZSgyMDE0LCA4LCAyNSwgMTgpKVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RoaXNIb3VyKGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGlzU2FtZUhvdXIoXG4gICAgdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKSxcbiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksXG4gICk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNUaGlzSG91cjtcbiIsICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0Tm93IH0gZnJvbSBcIi4vY29uc3RydWN0Tm93LmpzXCI7XG5pbXBvcnQgeyBpc1NhbWVJU09XZWVrIH0gZnJvbSBcIi4vaXNTYW1lSVNPV2Vlay5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgaXNUaGlzSVNPV2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGlzVGhpc0lTT1dlZWtcbiAqIEBjYXRlZ29yeSBJU08gV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgc2FtZSBJU08gd2VlayBhcyB0aGUgY3VycmVudCBkYXRlP1xuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBnaXZlbiBkYXRlIGluIHRoZSBzYW1lIElTTyB3ZWVrIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIGluIHRoaXMgSVNPIHdlZWtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgMjUgU2VwdGVtYmVyIDIwMTQsIGlzIDIyIFNlcHRlbWJlciAyMDE0IGluIHRoaXMgSVNPIHdlZWs/XG4gKiBjb25zdCByZXN1bHQgPSBpc1RoaXNJU09XZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIyKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUaGlzSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBpc1NhbWVJU09XZWVrKFxuICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksXG4gICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpLFxuICApO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzVGhpc0lTT1dlZWs7XG4iLCAiaW1wb3J0IHsgY29uc3RydWN0Tm93IH0gZnJvbSBcIi4vY29uc3RydWN0Tm93LmpzXCI7XG5pbXBvcnQgeyBpc1NhbWVNaW51dGUgfSBmcm9tIFwiLi9pc1NhbWVNaW51dGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpc1RoaXNNaW51dGVcbiAqIEBjYXRlZ29yeSBNaW51dGUgSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIHNhbWUgbWludXRlIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIHNhbWUgbWludXRlIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIGluIHRoaXMgbWludXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIG5vdyBpcyAyNSBTZXB0ZW1iZXIgMjAxNCAxODozMDoxNS41MDAsXG4gKiAvLyBpcyAyNSBTZXB0ZW1iZXIgMjAxNCAxODozMDowMCBpbiB0aGlzIG1pbnV0ZT9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzVGhpc01pbnV0ZShuZXcgRGF0ZSgyMDE0LCA4LCAyNSwgMTgsIDMwKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RoaXNNaW51dGUoZGF0ZSkge1xuICByZXR1cm4gaXNTYW1lTWludXRlKGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNUaGlzTWludXRlO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3ROb3cgfSBmcm9tIFwiLi9jb25zdHJ1Y3ROb3cuanNcIjtcbmltcG9ydCB7IGlzU2FtZU1vbnRoIH0gZnJvbSBcIi4vaXNTYW1lTW9udGguanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGlzVGhpc01vbnRofSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgaXNUaGlzTW9udGhcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgc2FtZSBtb250aCBhcyB0aGUgY3VycmVudCBkYXRlP1xuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBnaXZlbiBkYXRlIGluIHRoZSBzYW1lIG1vbnRoIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGUgaXMgaW4gdGhpcyBtb250aFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyAyNSBTZXB0ZW1iZXIgMjAxNCwgaXMgMTUgU2VwdGVtYmVyIDIwMTQgaW4gdGhpcyBtb250aD9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzVGhpc01vbnRoKG5ldyBEYXRlKDIwMTQsIDgsIDE1KSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUaGlzTW9udGgoZGF0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gaXNTYW1lTW9udGgoXG4gICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSxcbiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksXG4gICk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNUaGlzTW9udGg7XG4iLCAiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IGNvbnN0cnVjdE5vdyB9IGZyb20gXCIuL2NvbnN0cnVjdE5vdy5qc1wiO1xuaW1wb3J0IHsgaXNTYW1lUXVhcnRlciB9IGZyb20gXCIuL2lzU2FtZVF1YXJ0ZXIuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGlzVGhpc1F1YXJ0ZXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpc1RoaXNRdWFydGVyXG4gKiBAY2F0ZWdvcnkgUXVhcnRlciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgc2FtZSBxdWFydGVyIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIHNhbWUgcXVhcnRlciBhcyB0aGUgY3VycmVudCBkYXRlP1xuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIGluIHRoaXMgcXVhcnRlclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyAyNSBTZXB0ZW1iZXIgMjAxNCwgaXMgMiBKdWx5IDIwMTQgaW4gdGhpcyBxdWFydGVyP1xuICogY29uc3QgcmVzdWx0ID0gaXNUaGlzUXVhcnRlcihuZXcgRGF0ZSgyMDE0LCA2LCAyKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUaGlzUXVhcnRlcihkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBpc1NhbWVRdWFydGVyKFxuICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksXG4gICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpLFxuICApO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzVGhpc1F1YXJ0ZXI7XG4iLCAiaW1wb3J0IHsgY29uc3RydWN0Tm93IH0gZnJvbSBcIi4vY29uc3RydWN0Tm93LmpzXCI7XG5pbXBvcnQgeyBpc1NhbWVTZWNvbmQgfSBmcm9tIFwiLi9pc1NhbWVTZWNvbmQuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpc1RoaXNTZWNvbmRcbiAqIEBjYXRlZ29yeSBTZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIHNhbWUgc2Vjb25kIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIHNhbWUgc2Vjb25kIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIGluIHRoaXMgc2Vjb25kXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIG5vdyBpcyAyNSBTZXB0ZW1iZXIgMjAxNCAxODozMDoxNS41MDAsXG4gKiAvLyBpcyAyNSBTZXB0ZW1iZXIgMjAxNCAxODozMDoxNS4wMDAgaW4gdGhpcyBzZWNvbmQ/XG4gKiBjb25zdCByZXN1bHQgPSBpc1RoaXNTZWNvbmQobmV3IERhdGUoMjAxNCwgOCwgMjUsIDE4LCAzMCwgMTUpKVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RoaXNTZWNvbmQoZGF0ZSkge1xuICByZXR1cm4gaXNTYW1lU2Vjb25kKGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNUaGlzU2Vjb25kO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3ROb3cgfSBmcm9tIFwiLi9jb25zdHJ1Y3ROb3cuanNcIjtcbmltcG9ydCB7IGlzU2FtZVdlZWsgfSBmcm9tIFwiLi9pc1NhbWVXZWVrLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBpc1RoaXNXZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgaXNUaGlzV2Vla1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIHNhbWUgd2VlayBhcyB0aGUgY3VycmVudCBkYXRlP1xuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBnaXZlbiBkYXRlIGluIHRoZSBzYW1lIHdlZWsgYXMgdGhlIGN1cnJlbnQgZGF0ZT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGUgaXMgaW4gdGhpcyB3ZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDI1IFNlcHRlbWJlciAyMDE0LCBpcyAyMSBTZXB0ZW1iZXIgMjAxNCBpbiB0aGlzIHdlZWs/XG4gKiBjb25zdCByZXN1bHQgPSBpc1RoaXNXZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyAyNSBTZXB0ZW1iZXIgMjAxNCBhbmQgd2VlayBzdGFydHMgd2l0aCBNb25kYXlcbiAqIC8vIGlzIDIxIFNlcHRlbWJlciAyMDE0IGluIHRoaXMgd2Vlaz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzVGhpc1dlZWsobmV3IERhdGUoMjAxNCwgOCwgMjEpLCB7IHdlZWtTdGFydHNPbjogMSB9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUaGlzV2VlayhkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBpc1NhbWVXZWVrKFxuICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksXG4gICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpLFxuICAgIG9wdGlvbnMsXG4gICk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNUaGlzV2VlaztcbiIsICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0Tm93IH0gZnJvbSBcIi4vY29uc3RydWN0Tm93LmpzXCI7XG5pbXBvcnQgeyBpc1NhbWVZZWFyIH0gZnJvbSBcIi4vaXNTYW1lWWVhci5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgaXNUaGlzWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGlzVGhpc1llYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIGluIHRoZSBzYW1lIHllYXIgYXMgdGhlIGN1cnJlbnQgZGF0ZT9cbiAqIEBwdXJlIGZhbHNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgc2FtZSB5ZWFyIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGUgaXMgaW4gdGhpcyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDI1IFNlcHRlbWJlciAyMDE0LCBpcyAyIEp1bHkgMjAxNCBpbiB0aGlzIHllYXI/XG4gKiBjb25zdCByZXN1bHQgPSBpc1RoaXNZZWFyKG5ldyBEYXRlKDIwMTQsIDYsIDIpKVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RoaXNZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGlzU2FtZVllYXIoXG4gICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSxcbiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksXG4gICk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNUaGlzWWVhcjtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGlzVGh1cnNkYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpc1RodXJzZGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSBUaHVyc2RheT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBnaXZlbiBkYXRlIFRodXJzZGF5P1xuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIFRodXJzZGF5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElzIDI1IFNlcHRlbWJlciAyMDE0IFRodXJzZGF5P1xuICogY29uc3QgcmVzdWx0ID0gaXNUaHVyc2RheShuZXcgRGF0ZSgyMDE0LCA4LCAyNSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGh1cnNkYXkoZGF0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKSA9PT0gNDtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc1RodXJzZGF5O1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3ROb3cgfSBmcm9tIFwiLi9jb25zdHJ1Y3ROb3cuanNcIjtcbmltcG9ydCB7IGlzU2FtZURheSB9IGZyb20gXCIuL2lzU2FtZURheS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgaXNUb2RheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGlzVG9kYXlcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdG9kYXk/XG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgdG9kYXk/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGUgaXMgdG9kYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgNiBPY3RvYmVyIDIwMTQsIGlzIDYgT2N0b2JlciAxNDowMDowMCB0b2RheT9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzVG9kYXkobmV3IERhdGUoMjAxNCwgOSwgNiwgMTQsIDApKVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RvZGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGlzU2FtZURheShcbiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLFxuICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKSxcbiAgKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc1RvZGF5O1xuIiwgImltcG9ydCB7IGFkZERheXMgfSBmcm9tIFwiLi9hZGREYXlzLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3ROb3cgfSBmcm9tIFwiLi9jb25zdHJ1Y3ROb3cuanNcIjtcbmltcG9ydCB7IGlzU2FtZURheSB9IGZyb20gXCIuL2lzU2FtZURheS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgaXNUb21vcnJvd30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGlzVG9tb3Jyb3dcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdG9tb3Jyb3c/XG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgdG9tb3Jyb3c/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGUgaXMgdG9tb3Jyb3dcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgNiBPY3RvYmVyIDIwMTQsIGlzIDcgT2N0b2JlciAxNDowMDowMCB0b21vcnJvdz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzVG9tb3Jyb3cobmV3IERhdGUoMjAxNCwgOSwgNywgMTQsIDApKVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RvbW9ycm93KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGlzU2FtZURheShcbiAgICBkYXRlLFxuICAgIGFkZERheXMoY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpLCAxKSxcbiAgICBvcHRpb25zLFxuICApO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzVG9tb3Jyb3c7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBpc1R1ZXNkYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpc1R1ZXNkYXlcbiAqIEBjYXRlZ29yeSBXZWVrZGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIFR1ZXNkYXk/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBUdWVzZGF5P1xuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIFR1ZXNkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXMgMjMgU2VwdGVtYmVyIDIwMTQgVHVlc2RheT9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzVHVlc2RheShuZXcgRGF0ZSgyMDE0LCA4LCAyMykpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHVlc2RheShkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAyO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzVHVlc2RheTtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGlzV2VkbmVzZGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgaXNXZWRuZXNkYXlcbiAqIEBjYXRlZ29yeSBXZWVrZGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIFdlZG5lc2RheT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBnaXZlbiBkYXRlIFdlZG5lc2RheT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZSBpcyBXZWRuZXNkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXMgMjQgU2VwdGVtYmVyIDIwMTQgV2VkbmVzZGF5P1xuICogY29uc3QgcmVzdWx0ID0gaXNXZWRuZXNkYXkobmV3IERhdGUoMjAxNCwgOCwgMjQpKVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dlZG5lc2RheShkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAzO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzV2VkbmVzZGF5O1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgaXNXaXRoaW5JbnRlcnZhbH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGlzV2l0aGluSW50ZXJ2YWxcbiAqIEBjYXRlZ29yeSBJbnRlcnZhbCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB3aXRoaW4gdGhlIGludGVydmFsP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgd2l0aGluIHRoZSBpbnRlcnZhbD8gKEluY2x1ZGluZyBzdGFydCBhbmQgZW5kLilcbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gaW50ZXJ2YWwgLSBUaGUgaW50ZXJ2YWwgdG8gY2hlY2tcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIHdpdGhpbiB0aGUgaW50ZXJ2YWxcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBkYXRlIHdpdGhpbiB0aGUgaW50ZXJ2YWw6XG4gKiBpc1dpdGhpbkludGVydmFsKG5ldyBEYXRlKDIwMTQsIDAsIDMpLCB7XG4gKiAgIHN0YXJ0OiBuZXcgRGF0ZSgyMDE0LCAwLCAxKSxcbiAqICAgZW5kOiBuZXcgRGF0ZSgyMDE0LCAwLCA3KVxuICogfSlcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBkYXRlIG91dHNpZGUgb2YgdGhlIGludGVydmFsOlxuICogaXNXaXRoaW5JbnRlcnZhbChuZXcgRGF0ZSgyMDE0LCAwLCAxMCksIHtcbiAqICAgc3RhcnQ6IG5ldyBEYXRlKDIwMTQsIDAsIDEpLFxuICogICBlbmQ6IG5ldyBEYXRlKDIwMTQsIDAsIDcpXG4gKiB9KVxuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGRhdGUgZXF1YWwgdG8gdGhlIGludGVydmFsIHN0YXJ0OlxuICogaXNXaXRoaW5JbnRlcnZhbChkYXRlLCB7IHN0YXJ0LCBlbmQ6IGRhdGUgfSlcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGRhdGUgZXF1YWwgdG8gdGhlIGludGVydmFsIGVuZDpcbiAqIGlzV2l0aGluSW50ZXJ2YWwoZGF0ZSwgeyBzdGFydDogZGF0ZSwgZW5kIH0pXG4gKiAvLyA9PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dpdGhpbkludGVydmFsKGRhdGUsIGludGVydmFsLCBvcHRpb25zKSB7XG4gIGNvbnN0IHRpbWUgPSArdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgW3N0YXJ0VGltZSwgZW5kVGltZV0gPSBbXG4gICAgK3RvRGF0ZShpbnRlcnZhbC5zdGFydCwgb3B0aW9ucz8uaW4pLFxuICAgICt0b0RhdGUoaW50ZXJ2YWwuZW5kLCBvcHRpb25zPy5pbiksXG4gIF0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gIHJldHVybiB0aW1lID49IHN0YXJ0VGltZSAmJiB0aW1lIDw9IGVuZFRpbWU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNXaXRoaW5JbnRlcnZhbDtcbiIsICJpbXBvcnQgeyBhZGREYXlzIH0gZnJvbSBcIi4vYWRkRGF5cy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3ViRGF5c30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN1YkRheXNcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGF5cyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGRheXMgdG8gYmUgc3VidHJhY3RlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBkYXlzIHN1YnRyYWN0ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgMTAgZGF5cyBmcm9tIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJEYXlzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAxMClcbiAqIC8vPT4gRnJpIEF1ZyAyMiAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJEYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICByZXR1cm4gYWRkRGF5cyhkYXRlLCAtYW1vdW50LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdWJEYXlzO1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3ROb3cgfSBmcm9tIFwiLi9jb25zdHJ1Y3ROb3cuanNcIjtcbmltcG9ydCB7IGlzU2FtZURheSB9IGZyb20gXCIuL2lzU2FtZURheS5qc1wiO1xuaW1wb3J0IHsgc3ViRGF5cyB9IGZyb20gXCIuL3N1YkRheXMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGlzWWVzdGVyZGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgaXNZZXN0ZXJkYXlcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgeWVzdGVyZGF5P1xuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBnaXZlbiBkYXRlIHllc3RlcmRheT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZSBpcyB5ZXN0ZXJkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgNiBPY3RvYmVyIDIwMTQsIGlzIDUgT2N0b2JlciAxNDowMDowMCB5ZXN0ZXJkYXk/XG4gKiBjb25zdCByZXN1bHQgPSBpc1llc3RlcmRheShuZXcgRGF0ZSgyMDE0LCA5LCA1LCAxNCwgMCkpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzWWVzdGVyZGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGlzU2FtZURheShcbiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLFxuICAgIHN1YkRheXMoY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpLCAxKSxcbiAgKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc1llc3RlcmRheTtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGxhc3REYXlPZkRlY2FkZX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGxhc3REYXlPZkRlY2FkZVxuICogQGNhdGVnb3J5IERlY2FkZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGxhc3QgZGF5IG9mIGEgZGVjYWRlIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgbGFzdCBkYXkgb2YgYSBkZWNhZGUgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB1c2luZyBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlOyBpbmZlcnJlZCBmcm9tIGFyZ3VtZW50cyBvciBzcGVjaWZpZWQgYnkgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGxhc3QgZGF5IG9mIGEgZGVjYWRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBsYXN0IGRheSBvZiBhIGRlY2FkZSBmb3IgMjEgRGVjZW1iZXIgMjAxMiAyMToxMjowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGxhc3REYXlPZkRlY2FkZShuZXcgRGF0ZSgyMDEyLCAxMSwgMjEsIDIxLCAxMiwgMDApKVxuICogLy89PiBXZWQgRGVjIDMxIDIwMTkgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhc3REYXlPZkRlY2FkZShkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IGRlY2FkZSA9IDkgKyBNYXRoLmZsb29yKHllYXIgLyAxMCkgKiAxMDtcbiAgX2RhdGUuc2V0RnVsbFllYXIoZGVjYWRlICsgMSwgMCwgMCk7XG4gIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gdG9EYXRlKF9kYXRlLCBvcHRpb25zPy5pbik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgbGFzdERheU9mRGVjYWRlO1xuIiwgImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBsYXN0RGF5T2ZXZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgbGFzdERheU9mV2Vla1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBsYXN0IGRheSBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBsYXN0IGRheSBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZSB1bmxlc3MgYSBjb250ZXh0IGlzIHNwZWNpZmllZC5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGxhc3QgZGF5IG9mIGEgd2Vla1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGFzdERheU9mV2VlayhkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3Qgd2Vla1N0YXJ0c09uID1cbiAgICBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgMDtcblxuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRheSA9IF9kYXRlLmdldERheSgpO1xuICBjb25zdCBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IC03IDogMCkgKyA2IC0gKGRheSAtIHdlZWtTdGFydHNPbik7XG5cbiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG5cbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGxhc3REYXlPZldlZWs7XG4iLCAiaW1wb3J0IHsgbGFzdERheU9mV2VlayB9IGZyb20gXCIuL2xhc3REYXlPZldlZWsuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGxhc3REYXlPZklTT1dlZWt9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBsYXN0RGF5T2ZJU09XZWVrXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBsYXN0IGRheSBvZiBhbiBJU08gd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGxhc3QgZGF5IG9mIGFuIElTTyB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgRGF0ZSB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbVVRDRGF0ZV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBsYXN0IGRheSBvZiBhbiBJU08gd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgbGFzdCBkYXkgb2YgYW4gSVNPIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBsYXN0RGF5T2ZJU09XZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFN1biBTZXAgMDcgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGFzdERheU9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXN0RGF5T2ZXZWVrKGRhdGUsIHsgLi4ub3B0aW9ucywgd2Vla1N0YXJ0c09uOiAxIH0pO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGxhc3REYXlPZklTT1dlZWs7XG4iLCAiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IGdldElTT1dlZWtZZWFyIH0gZnJvbSBcIi4vZ2V0SVNPV2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWsuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGxhc3REYXlPZklTT1dlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgbGFzdERheU9mSVNPV2Vla1llYXJcbiAqIEBjYXRlZ29yeSBJU08gV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGxhc3QgZGF5IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgbGFzdCBkYXkgb2YgYW4gSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsXG4gKiB3aGljaCBhbHdheXMgc3RhcnRzIDMgZGF5cyBiZWZvcmUgdGhlIHllYXIncyBmaXJzdCBUaHVyc2RheS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZW5kIG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBsYXN0IGRheSBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgMiBKdWx5IDIwMDU6XG4gKiBjb25zdCByZXN1bHQgPSBsYXN0RGF5T2ZJU09XZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSlcbiAqIC8vPT4gU3VuIEphbiAwMSAyMDA2IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXN0RGF5T2ZJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHllYXIgPSBnZXRJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5ID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gIGNvbnN0IGRhdGVfID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5LCBvcHRpb25zKTtcbiAgZGF0ZV8uc2V0RGF0ZShkYXRlXy5nZXREYXRlKCkgLSAxKTtcbiAgcmV0dXJuIGRhdGVfO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGxhc3REYXlPZklTT1dlZWtZZWFyO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgbGFzdERheU9mUXVhcnRlcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGxhc3REYXlPZlF1YXJ0ZXJcbiAqIEBjYXRlZ29yeSBRdWFydGVyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgbGFzdCBkYXkgb2YgYSB5ZWFyIHF1YXJ0ZXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBsYXN0IGRheSBvZiBhIHllYXIgcXVhcnRlciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGxhc3QgZGF5IG9mIGEgcXVhcnRlclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgbGFzdCBkYXkgb2YgYSBxdWFydGVyIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gbGFzdERheU9mUXVhcnRlcihuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBUdWUgU2VwIDMwIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhc3REYXlPZlF1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGN1cnJlbnRNb250aCA9IGRhdGVfLmdldE1vbnRoKCk7XG4gIGNvbnN0IG1vbnRoID0gY3VycmVudE1vbnRoIC0gKGN1cnJlbnRNb250aCAlIDMpICsgMztcbiAgZGF0ZV8uc2V0TW9udGgobW9udGgsIDApO1xuICBkYXRlXy5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGVfO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGxhc3REYXlPZlF1YXJ0ZXI7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBsYXN0RGF5T2ZZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgbGFzdERheU9mWWVhclxuICogQGNhdGVnb3J5IFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBsYXN0IGRheSBvZiBhIHllYXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBsYXN0IGRheSBvZiBhIHllYXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGxhc3QgZGF5IG9mIGEgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgbGFzdCBkYXkgb2YgYSB5ZWFyIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gbGFzdERheU9mWWVhcihuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDAwKSlcbiAqIC8vPT4gV2VkIERlYyAzMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXN0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCB5ZWFyID0gZGF0ZV8uZ2V0RnVsbFllYXIoKTtcbiAgZGF0ZV8uc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDApO1xuICBkYXRlXy5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGVfO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGxhc3REYXlPZlllYXI7XG4iLCAiaW1wb3J0IHsgbGlnaHRGb3JtYXR0ZXJzIH0gZnJvbSBcIi4vX2xpYi9mb3JtYXQvbGlnaHRGb3JtYXR0ZXJzLmpzXCI7XG5pbXBvcnQgeyBpc1ZhbGlkIH0gZnJvbSBcIi4vaXNWYWxpZC5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8vIFJleHBvcnRzIG9mIGludGVybmFsIGZvciBsaWJyYXJpZXMgdG8gdXNlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM2MzgjaXNzdWVjb21tZW50LTE4NzcwODI4NzRcbmV4cG9ydCB7IGxpZ2h0Rm9ybWF0dGVycyB9O1xuXG4vLyBUaGlzIFJlZ0V4cCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cyBzZXBhcmF0ZWQgYnkgYHxgOlxuLy8gLSAoXFx3KVxcMSogbWF0Y2hlcyBhbnkgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIGxldHRlclxuLy8gLSAnJyBtYXRjaGVzIHR3byBxdW90ZSBjaGFyYWN0ZXJzIGluIGEgcm93XG4vLyAtICcoJyd8W14nXSkrKCd8JCkgbWF0Y2hlcyBhbnl0aGluZyBzdXJyb3VuZGVkIGJ5IHR3byBxdW90ZSBjaGFyYWN0ZXJzICgnKSxcbi8vICAgZXhjZXB0IGEgc2luZ2xlIHF1b3RlIHN5bWJvbCwgd2hpY2ggZW5kcyB0aGUgc2VxdWVuY2UuXG4vLyAgIFR3byBxdW90ZSBjaGFyYWN0ZXJzIGRvIG5vdCBlbmQgdGhlIHNlcXVlbmNlLlxuLy8gICBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBzaW5nbGUgcXVvdGVcbi8vICAgdGhlbiB0aGUgc2VxdWVuY2Ugd2lsbCBjb250aW51ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG4vLyAtIC4gbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciB1bm1hdGNoZWQgYnkgcHJldmlvdXMgcGFydHMgb2YgdGhlIFJlZ0V4cHNcbmNvbnN0IGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvKFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG5jb25zdCBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG5jb25zdCBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xuY29uc3QgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBsaWdodEZvcm1hdFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXQgdGhlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LiBVbmxpa2UgYGZvcm1hdGAsXG4gKiBgbGlnaHRGb3JtYXRgIGRvZXNuJ3QgdXNlIGxvY2FsZXMgYW5kIG91dHB1dHMgZGF0ZSB1c2luZyB0aGUgbW9zdCBwb3B1bGFyIHRva2Vucy5cbiAqXG4gKiA+IFx1MjZBMFx1RkUwRiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBgbGlnaHRGb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhYSAgIHwgYSwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgQ2FsZW5kYXIgeWVhciAgICAgICAgICAgICAgICAgICB8IHkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDAwMCwgMDE3ICAgICAgICAgICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIGZvcm1hdCAtIFRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICpcbiAqIEB0aHJvd3MgYEludmFsaWQgdGltZSB2YWx1ZWAgaWYgdGhlIGRhdGUgaXMgaW52YWxpZFxuICogQHRocm93cyBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVzdWx0ID0gbGlnaHRGb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAneXl5eS1NTS1kZCcpXG4gKiAvLz0+ICcyMDE0LTAyLTExJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGlnaHRGb3JtYXQoZGF0ZSwgZm9ybWF0U3RyKSB7XG4gIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUpO1xuXG4gIGlmICghaXNWYWxpZChkYXRlXykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdGltZSB2YWx1ZVwiKTtcbiAgfVxuXG4gIGNvbnN0IHRva2VucyA9IGZvcm1hdFN0ci5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKTtcblxuICAvLyBUaGUgb25seSBjYXNlIHdoZW4gZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCBkb2Vzbid0IG1hdGNoIHRoZSBzdHJpbmcgaXMgd2hlbiBpdCdzIGVtcHR5XG4gIGlmICghdG9rZW5zKSByZXR1cm4gXCJcIjtcblxuICBjb25zdCByZXN1bHQgPSB0b2tlbnNcbiAgICAubWFwKChzdWJzdHJpbmcpID0+IHtcbiAgICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgICByZXR1cm4gXCInXCI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgICByZXR1cm4gY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGxpZ2h0Rm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXR0ZXIoZGF0ZV8sIHN1YnN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdENoYXJhY3Rlci5tYXRjaCh1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXG4gICAgICAgICAgXCJGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYFwiICtcbiAgICAgICAgICAgIGZpcnN0Q2hhcmFjdGVyICtcbiAgICAgICAgICAgIFwiYFwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3Vic3RyaW5nO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcIik7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gaW5wdXQ7XG4gIHJldHVybiBtYXRjaGVzWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBsaWdodEZvcm1hdDtcbiIsICJpbXBvcnQgeyBkYXlzSW5ZZWFyIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgbWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnlcbiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gdGhlIHNwZWNpZmllZCwgeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVzIGFuZCBzZWNvbmRzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiB0aGUgc3BlY2lmaWVkLCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMgYW5kIHNlY29uZHMuXG4gKlxuICogT25lIHllYXJzIGVxdWFscyAzNjUuMjQyNSBkYXlzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTpcbiAqXG4gKiA+IExlYXAgeWVhciBvY2N1cnMgZXZlcnkgNCB5ZWFycywgZXhjZXB0IGZvciB5ZWFycyB0aGF0IGFyZSBkaXZpc2libGUgYnkgMTAwIGFuZCBub3QgZGl2aXNpYmxlIGJ5IDQwMC5cbiAqID4gMSBtZWFuIHllYXIgPSAoMzY1KzEvNC0xLzEwMCsxLzQwMCkgZGF5cyA9IDM2NS4yNDI1IGRheXNcbiAqXG4gKiBPbmUgbW9udGggaXMgYSB5ZWFyIGRpdmlkZWQgYnkgMTIuXG4gKlxuICogQHBhcmFtIGR1cmF0aW9uIC0gVGhlIG9iamVjdCB3aXRoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcyBhbmQgc2Vjb25kcyB0byBiZSBhZGRlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbWlsbGlzZWNvbmRzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIDEgeWVhciBpbiBtaWxsaXNlY29uZHNcbiAqIG1pbGxpc2Vjb25kcyh7IHllYXJzOiAxIH0pXG4gKiAvLz0+IDMxNTU2OTUyMDAwXG4gKlxuICogLy8gMyBtb250aHMgaW4gbWlsbGlzZWNvbmRzXG4gKiBtaWxsaXNlY29uZHMoeyBtb250aHM6IDMgfSlcbiAqIC8vPT4gNzg4OTIzODAwMFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlsbGlzZWNvbmRzKHtcbiAgeWVhcnMsXG4gIG1vbnRocyxcbiAgd2Vla3MsXG4gIGRheXMsXG4gIGhvdXJzLFxuICBtaW51dGVzLFxuICBzZWNvbmRzLFxufSkge1xuICBsZXQgdG90YWxEYXlzID0gMDtcblxuICBpZiAoeWVhcnMpIHRvdGFsRGF5cyArPSB5ZWFycyAqIGRheXNJblllYXI7XG4gIGlmIChtb250aHMpIHRvdGFsRGF5cyArPSBtb250aHMgKiAoZGF5c0luWWVhciAvIDEyKTtcbiAgaWYgKHdlZWtzKSB0b3RhbERheXMgKz0gd2Vla3MgKiA3O1xuICBpZiAoZGF5cykgdG90YWxEYXlzICs9IGRheXM7XG5cbiAgbGV0IHRvdGFsU2Vjb25kcyA9IHRvdGFsRGF5cyAqIDI0ICogNjAgKiA2MDtcblxuICBpZiAoaG91cnMpIHRvdGFsU2Vjb25kcyArPSBob3VycyAqIDYwICogNjA7XG4gIGlmIChtaW51dGVzKSB0b3RhbFNlY29uZHMgKz0gbWludXRlcyAqIDYwO1xuICBpZiAoc2Vjb25kcykgdG90YWxTZWNvbmRzICs9IHNlY29uZHM7XG5cbiAgcmV0dXJuIE1hdGgudHJ1bmModG90YWxTZWNvbmRzICogMTAwMCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgbWlsbGlzZWNvbmRzO1xuIiwgImltcG9ydCB7IG1pbGxpc2Vjb25kc0luSG91ciB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc1RvSG91cnNcbiAqIEBjYXRlZ29yeSBDb252ZXJzaW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgbWlsbGlzZWNvbmRzIHRvIGhvdXJzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gYSBmdWxsIG51bWJlciBvZiBob3Vycy5cbiAqXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gYmUgY29udmVydGVkXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgY29udmVydGVkIGluIGhvdXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgNzIwMDAwMCBtaWxsaXNlY29uZHMgdG8gaG91cnM6XG4gKiBjb25zdCByZXN1bHQgPSBtaWxsaXNlY29uZHNUb0hvdXJzKDcyMDAwMDApXG4gKiAvLz0+IDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXQgdXNlcyBmbG9vciByb3VuZGluZzpcbiAqIGNvbnN0IHJlc3VsdCA9IG1pbGxpc2Vjb25kc1RvSG91cnMoNzE5OTk5OSlcbiAqIC8vPT4gMVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlsbGlzZWNvbmRzVG9Ib3VycyhtaWxsaXNlY29uZHMpIHtcbiAgY29uc3QgaG91cnMgPSBtaWxsaXNlY29uZHMgLyBtaWxsaXNlY29uZHNJbkhvdXI7XG4gIHJldHVybiBNYXRoLnRydW5jKGhvdXJzKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBtaWxsaXNlY29uZHNUb0hvdXJzO1xuIiwgImltcG9ydCB7IG1pbGxpc2Vjb25kc0luTWludXRlIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgbWlsbGlzZWNvbmRzVG9NaW51dGVzXG4gKiBAY2F0ZWdvcnkgQ29udmVyc2lvbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IG1pbGxpc2Vjb25kcyB0byBtaW51dGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gYSBmdWxsIG51bWJlciBvZiBtaW51dGVzLlxuICpcbiAqIEBwYXJhbSBtaWxsaXNlY29uZHMgLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBiZSBjb252ZXJ0ZWRcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBjb252ZXJ0ZWQgaW4gbWludXRlc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IDYwMDAwIG1pbGxpc2Vjb25kcyB0byBtaW51dGVzOlxuICogY29uc3QgcmVzdWx0ID0gbWlsbGlzZWNvbmRzVG9NaW51dGVzKDYwMDAwKVxuICogLy89PiAxXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEl0IHVzZXMgZmxvb3Igcm91bmRpbmc6XG4gKiBjb25zdCByZXN1bHQgPSBtaWxsaXNlY29uZHNUb01pbnV0ZXMoMTE5OTk5KVxuICogLy89PiAxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWxsaXNlY29uZHNUb01pbnV0ZXMobWlsbGlzZWNvbmRzKSB7XG4gIGNvbnN0IG1pbnV0ZXMgPSBtaWxsaXNlY29uZHMgLyBtaWxsaXNlY29uZHNJbk1pbnV0ZTtcbiAgcmV0dXJuIE1hdGgudHJ1bmMobWludXRlcyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgbWlsbGlzZWNvbmRzVG9NaW51dGVzO1xuIiwgImltcG9ydCB7IG1pbGxpc2Vjb25kc0luU2Vjb25kIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgbWlsbGlzZWNvbmRzVG9TZWNvbmRzXG4gKiBAY2F0ZWdvcnkgQ29udmVyc2lvbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IG1pbGxpc2Vjb25kcyB0byBzZWNvbmRzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gYSBmdWxsIG51bWJlciBvZiBzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBtaWxsaXNlY29uZHMgLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBiZSBjb252ZXJ0ZWRcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBjb252ZXJ0ZWQgaW4gc2Vjb25kc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IDEwMDAgbWlsbGlzZWNvbmRzIHRvIHNlY29uZHM6XG4gKiBjb25zdCByZXN1bHQgPSBtaWxsaXNlY29uZHNUb1NlY29uZHMoMTAwMClcbiAqIC8vPT4gMVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJdCB1c2VzIGZsb29yIHJvdW5kaW5nOlxuICogY29uc3QgcmVzdWx0ID0gbWlsbGlzZWNvbmRzVG9TZWNvbmRzKDE5OTkpXG4gKiAvLz0+IDFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pbGxpc2Vjb25kc1RvU2Vjb25kcyhtaWxsaXNlY29uZHMpIHtcbiAgY29uc3Qgc2Vjb25kcyA9IG1pbGxpc2Vjb25kcyAvIG1pbGxpc2Vjb25kc0luU2Vjb25kO1xuICByZXR1cm4gTWF0aC50cnVuYyhzZWNvbmRzKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBtaWxsaXNlY29uZHNUb1NlY29uZHM7XG4iLCAiaW1wb3J0IHsgbWludXRlc0luSG91ciB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIG1pbnV0ZXNUb0hvdXJzXG4gKiBAY2F0ZWdvcnkgQ29udmVyc2lvbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IG1pbnV0ZXMgdG8gaG91cnMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IGEgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gYSBmdWxsIG51bWJlciBvZiBob3Vycy5cbiAqXG4gKiBAcGFyYW0gbWludXRlcyAtIFRoZSBudW1iZXIgb2YgbWludXRlcyB0byBiZSBjb252ZXJ0ZWRcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIG1pbnV0ZXMgY29udmVydGVkIGluIGhvdXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgMTQwIG1pbnV0ZXMgdG8gaG91cnM6XG4gKiBjb25zdCByZXN1bHQgPSBtaW51dGVzVG9Ib3VycygxMjApXG4gKiAvLz0+IDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXQgdXNlcyBmbG9vciByb3VuZGluZzpcbiAqIGNvbnN0IHJlc3VsdCA9IG1pbnV0ZXNUb0hvdXJzKDE3OSlcbiAqIC8vPT4gMlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWludXRlc1RvSG91cnMobWludXRlcykge1xuICBjb25zdCBob3VycyA9IG1pbnV0ZXMgLyBtaW51dGVzSW5Ib3VyO1xuICByZXR1cm4gTWF0aC50cnVuYyhob3Vycyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgbWludXRlc1RvSG91cnM7XG4iLCAiaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5NaW51dGUgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBtaW51dGVzVG9NaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBDb252ZXJzaW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgbWludXRlcyB0byBtaWxsaXNlY29uZHMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IGEgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gYSBmdWxsIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIG1pbnV0ZXMgLSBUaGUgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gYmUgY29udmVydGVkXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBtaW51dGVzIGNvbnZlcnRlZCBpbiBtaWxsaXNlY29uZHNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCAyIG1pbnV0ZXMgdG8gbWlsbGlzZWNvbmRzXG4gKiBjb25zdCByZXN1bHQgPSBtaW51dGVzVG9NaWxsaXNlY29uZHMoMilcbiAqIC8vPT4gMTIwMDAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaW51dGVzVG9NaWxsaXNlY29uZHMobWludXRlcykge1xuICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IG1pbnV0ZXNUb01pbGxpc2Vjb25kcztcbiIsICJpbXBvcnQgeyBzZWNvbmRzSW5NaW51dGUgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBtaW51dGVzVG9TZWNvbmRzXG4gKiBAY2F0ZWdvcnkgQ29udmVyc2lvbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IG1pbnV0ZXMgdG8gc2Vjb25kcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgYSBudW1iZXIgb2YgbWludXRlcyB0byBhIGZ1bGwgbnVtYmVyIG9mIHNlY29uZHMuXG4gKlxuICogQHBhcmFtIG1pbnV0ZXMgLSBUaGUgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gYmUgY29udmVydGVkXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBtaW51dGVzIGNvbnZlcnRlZCBpbiBzZWNvbmRzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgMiBtaW51dGVzIHRvIHNlY29uZHNcbiAqIGNvbnN0IHJlc3VsdCA9IG1pbnV0ZXNUb1NlY29uZHMoMilcbiAqIC8vPT4gMTIwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaW51dGVzVG9TZWNvbmRzKG1pbnV0ZXMpIHtcbiAgcmV0dXJuIE1hdGgudHJ1bmMobWludXRlcyAqIHNlY29uZHNJbk1pbnV0ZSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgbWludXRlc1RvU2Vjb25kcztcbiIsICJpbXBvcnQgeyBtb250aHNJblF1YXJ0ZXIgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBtb250aHNUb1F1YXJ0ZXJzXG4gKiBAY2F0ZWdvcnkgQ29udmVyc2lvbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IG51bWJlciBvZiBtb250aHMgdG8gcXVhcnRlcnMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IGEgbnVtYmVyIG9mIG1vbnRocyB0byBhIGZ1bGwgbnVtYmVyIG9mIHF1YXJ0ZXJzLlxuICpcbiAqIEBwYXJhbSBtb250aHMgLSBUaGUgbnVtYmVyIG9mIG1vbnRocyB0byBiZSBjb252ZXJ0ZWQuXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBtb250aHMgY29udmVydGVkIGluIHF1YXJ0ZXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgNiBtb250aHMgdG8gcXVhcnRlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBtb250aHNUb1F1YXJ0ZXJzKDYpXG4gKiAvLz0+IDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXQgdXNlcyBmbG9vciByb3VuZGluZzpcbiAqIGNvbnN0IHJlc3VsdCA9IG1vbnRoc1RvUXVhcnRlcnMoNylcbiAqIC8vPT4gMlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzVG9RdWFydGVycyhtb250aHMpIHtcbiAgY29uc3QgcXVhcnRlcnMgPSBtb250aHMgLyBtb250aHNJblF1YXJ0ZXI7XG4gIHJldHVybiBNYXRoLnRydW5jKHF1YXJ0ZXJzKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBtb250aHNUb1F1YXJ0ZXJzO1xuIiwgImltcG9ydCB7IG1vbnRoc0luWWVhciB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIG1vbnRoc1RvWWVhcnNcbiAqIEBjYXRlZ29yeSBDb252ZXJzaW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgbnVtYmVyIG9mIG1vbnRocyB0byB5ZWFycy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgYSBudW1iZXIgb2YgbW9udGhzIHRvIGEgZnVsbCBudW1iZXIgb2YgeWVhcnMuXG4gKlxuICogQHBhcmFtIG1vbnRocyAtIFRoZSBudW1iZXIgb2YgbW9udGhzIHRvIGJlIGNvbnZlcnRlZFxuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgbW9udGhzIGNvbnZlcnRlZCBpbiB5ZWFyc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IDM2IG1vbnRocyB0byB5ZWFyczpcbiAqIGNvbnN0IHJlc3VsdCA9IG1vbnRoc1RvWWVhcnMoMzYpXG4gKiAvLz0+IDNcbiAqXG4gKiAvLyBJdCB1c2VzIGZsb29yIHJvdW5kaW5nOlxuICogY29uc3QgcmVzdWx0ID0gbW9udGhzVG9ZZWFycyg0MClcbiAqIC8vPT4gM1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzVG9ZZWFycyhtb250aHMpIHtcbiAgY29uc3QgeWVhcnMgPSBtb250aHMgLyBtb250aHNJblllYXI7XG4gIHJldHVybiBNYXRoLnRydW5jKHllYXJzKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBtb250aHNUb1llYXJzO1xuIiwgImltcG9ydCB7IGFkZERheXMgfSBmcm9tIFwiLi9hZGREYXlzLmpzXCI7XG5pbXBvcnQgeyBnZXREYXkgfSBmcm9tIFwiLi9nZXREYXkuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIG5leHREYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBuZXh0RGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBXaGVuIGlzIHRoZSBuZXh0IGRheSBvZiB0aGUgd2Vlaz8gMC02IHRoZSBkYXkgb2YgdGhlIHdlZWssIDAgcmVwcmVzZW50cyBTdW5kYXkuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBkYXkgLSBEYXkgb2YgdGhlIHdlZWtcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIHRoZSBuZXh0IGRheSBvZiB0aGUgd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGVuIGlzIHRoZSBuZXh0IE1vbmRheSBhZnRlciBNYXIsIDIwLCAyMDIwP1xuICogY29uc3QgcmVzdWx0ID0gbmV4dERheShuZXcgRGF0ZSgyMDIwLCAyLCAyMCksIDEpXG4gKiAvLz0+IE1vbiBNYXIgMjMgMjAyMCAwMDowMDowMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGVuIGlzIHRoZSBuZXh0IFR1ZXNkYXkgYWZ0ZXIgTWFyLCAyMSwgMjAyMD9cbiAqIGNvbnN0IHJlc3VsdCA9IG5leHREYXkobmV3IERhdGUoMjAyMCwgMiwgMjEpLCAyKVxuICogLy89PiBUdWUgTWFyIDI0IDIwMjAgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHREYXkoZGF0ZSwgZGF5LCBvcHRpb25zKSB7XG4gIGxldCBkZWx0YSA9IGRheSAtIGdldERheShkYXRlLCBvcHRpb25zKTtcbiAgaWYgKGRlbHRhIDw9IDApIGRlbHRhICs9IDc7XG5cbiAgcmV0dXJuIGFkZERheXMoZGF0ZSwgZGVsdGEsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IG5leHREYXk7XG4iLCAiaW1wb3J0IHsgbmV4dERheSB9IGZyb20gXCIuL25leHREYXkuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIG5leHRGcmlkYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBuZXh0RnJpZGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBXaGVuIGlzIHRoZSBuZXh0IEZyaWRheT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFdoZW4gaXMgdGhlIG5leHQgRnJpZGF5P1xuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIHN0YXJ0IGNvdW50aW5nIGZyb21cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXh0IEZyaWRheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGVuIGlzIHRoZSBuZXh0IEZyaWRheSBhZnRlciBNYXIsIDIyLCAyMDIwP1xuICogY29uc3QgcmVzdWx0ID0gbmV4dEZyaWRheShuZXcgRGF0ZSgyMDIwLCAyLCAyMikpXG4gKiAvLz0+IEZyaSBNYXIgMjcgMjAyMCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dEZyaWRheShkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXh0RGF5KGRhdGUsIDUsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IG5leHRGcmlkYXk7XG4iLCAiaW1wb3J0IHsgbmV4dERheSB9IGZyb20gXCIuL25leHREYXkuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIG5leHRNb25kYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBuZXh0TW9uZGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBXaGVuIGlzIHRoZSBuZXh0IE1vbmRheT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFdoZW4gaXMgdGhlIG5leHQgTW9uZGF5P1xuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIHN0YXJ0IGNvdW50aW5nIGZyb21cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXh0IE1vbmRheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGVuIGlzIHRoZSBuZXh0IE1vbmRheSBhZnRlciBNYXIsIDIyLCAyMDIwP1xuICogY29uc3QgcmVzdWx0ID0gbmV4dE1vbmRheShuZXcgRGF0ZSgyMDIwLCAyLCAyMikpXG4gKiAvLz0+IE1vbiBNYXIgMjMgMjAyMCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dE1vbmRheShkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXh0RGF5KGRhdGUsIDEsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IG5leHRNb25kYXk7XG4iLCAiaW1wb3J0IHsgbmV4dERheSB9IGZyb20gXCIuL25leHREYXkuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIG5leHRTYXR1cmRheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIG5leHRTYXR1cmRheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgV2hlbiBpcyB0aGUgbmV4dCBTYXR1cmRheT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFdoZW4gaXMgdGhlIG5leHQgU2F0dXJkYXk/XG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gc3RhcnQgY291bnRpbmcgZnJvbVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5leHQgU2F0dXJkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hlbiBpcyB0aGUgbmV4dCBTYXR1cmRheSBhZnRlciBNYXIsIDIyLCAyMDIwP1xuICogY29uc3QgcmVzdWx0ID0gbmV4dFNhdHVyZGF5KG5ldyBEYXRlKDIwMjAsIDIsIDIyKSlcbiAqIC8vPT4gU2F0IE1hciAyOCAyMDIwIDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0U2F0dXJkYXkoZGF0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gbmV4dERheShkYXRlLCA2LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBuZXh0U2F0dXJkYXk7XG4iLCAiaW1wb3J0IHsgbmV4dERheSB9IGZyb20gXCIuL25leHREYXkuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIG5leHRTdW5kYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBuZXh0U3VuZGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBXaGVuIGlzIHRoZSBuZXh0IFN1bmRheT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFdoZW4gaXMgdGhlIG5leHQgU3VuZGF5P1xuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgaWYgYSBjb250ZXh0IGlzIHByb3ZpZGVkLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gc3RhcnQgY291bnRpbmcgZnJvbVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5leHQgU3VuZGF5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoZW4gaXMgdGhlIG5leHQgU3VuZGF5IGFmdGVyIE1hcmNoIDIyLCAyMDIwP1xuICogY29uc3QgcmVzdWx0ID0gbmV4dFN1bmRheShuZXcgRGF0ZSgyMDIwLCAyLCAyMikpXG4gKiAvLz0+IFN1biBNYXIgMjkgMjAyMCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dFN1bmRheShkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXh0RGF5KGRhdGUsIDAsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IG5leHRTdW5kYXk7XG4iLCAiaW1wb3J0IHsgbmV4dERheSB9IGZyb20gXCIuL25leHREYXkuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIG5leHRUaHVyc2RheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIG5leHRUaHVyc2RheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgV2hlbiBpcyB0aGUgbmV4dCBUaHVyc2RheT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFdoZW4gaXMgdGhlIG5leHQgVGh1cnNkYXk/XG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gc3RhcnQgY291bnRpbmcgZnJvbVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5leHQgVGh1cnNkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hlbiBpcyB0aGUgbmV4dCBUaHVyc2RheSBhZnRlciBNYXIsIDIyLCAyMDIwP1xuICogY29uc3QgcmVzdWx0ID0gbmV4dFRodXJzZGF5KG5ldyBEYXRlKDIwMjAsIDIsIDIyKSlcbiAqIC8vPT4gVGh1ciBNYXIgMjYgMjAyMCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dFRodXJzZGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5leHREYXkoZGF0ZSwgNCwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgbmV4dFRodXJzZGF5O1xuIiwgImltcG9ydCB7IG5leHREYXkgfSBmcm9tIFwiLi9uZXh0RGF5LmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBuZXh0VHVlc2RheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIG5leHRUdWVzZGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBXaGVuIGlzIHRoZSBuZXh0IFR1ZXNkYXk/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBXaGVuIGlzIHRoZSBuZXh0IFR1ZXNkYXk/XG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gc3RhcnQgY291bnRpbmcgZnJvbVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5leHQgVHVlc2RheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGVuIGlzIHRoZSBuZXh0IFR1ZXNkYXkgYWZ0ZXIgTWFyLCAyMiwgMjAyMD9cbiAqIGNvbnN0IHJlc3VsdCA9IG5leHRUdWVzZGF5KG5ldyBEYXRlKDIwMjAsIDIsIDIyKSlcbiAqIC8vPT4gVHVlIE1hciAyNCAyMDIwIDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0VHVlc2RheShkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXh0RGF5KGRhdGUsIDIsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IG5leHRUdWVzZGF5O1xuIiwgImltcG9ydCB7IG5leHREYXkgfSBmcm9tIFwiLi9uZXh0RGF5LmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBuZXh0V2VkbmVzZGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgbmV4dFdlZG5lc2RheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgV2hlbiBpcyB0aGUgbmV4dCBXZWRuZXNkYXk/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBXaGVuIGlzIHRoZSBuZXh0IFdlZG5lc2RheT9cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBzdGFydCBjb3VudGluZyBmcm9tXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV4dCBXZWRuZXNkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hlbiBpcyB0aGUgbmV4dCBXZWRuZXNkYXkgYWZ0ZXIgTWFyLCAyMiwgMjAyMD9cbiAqIGNvbnN0IHJlc3VsdCA9IG5leHRXZWRuZXNkYXkobmV3IERhdGUoMjAyMCwgMiwgMjIpKVxuICogLy89PiBXZWQgTWFyIDI1IDIwMjAgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRXZWRuZXNkYXkoZGF0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gbmV4dERheShkYXRlLCAzLCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBuZXh0V2VkbmVzZGF5O1xuIiwgImltcG9ydCB7XG4gIG1pbGxpc2Vjb25kc0luSG91cixcbiAgbWlsbGlzZWNvbmRzSW5NaW51dGUsXG59IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgcGFyc2VJU099IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBwYXJzZUlTT1xuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBQYXJzZSBJU08gc3RyaW5nXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gc3RyaW5nIGluIElTTyA4NjAxIGZvcm1hdCBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogRnVuY3Rpb24gYWNjZXB0cyBjb21wbGV0ZSBJU08gODYwMSBmb3JtYXRzIGFzIHdlbGwgYXMgcGFydGlhbCBpbXBsZW1lbnRhdGlvbnMuXG4gKiBJU08gODYwMTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMVxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpc24ndCBhIHN0cmluZywgdGhlIGZ1bmN0aW9uIGNhbm5vdCBwYXJzZSB0aGUgc3RyaW5nIG9yXG4gKiB0aGUgdmFsdWVzIGFyZSBpbnZhbGlkLCBpdCByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGFyZ3VtZW50IC0gVGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcyMDE0LTAyLTExVDExOjMwOjMwJyB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gcGFyc2VJU08oJzIwMTQtMDItMTFUMTE6MzA6MzAnKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJyswMjAxNDEwMScgdG8gZGF0ZSxcbiAqIC8vIGlmIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0IGlzIDE6XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUlTTygnKzAyMDE0MTAxJywgeyBhZGRpdGlvbmFsRGlnaXRzOiAxIH0pXG4gKiAvLz0+IEZyaSBBcHIgMTEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU08oYXJndW1lbnQsIG9wdGlvbnMpIHtcbiAgY29uc3QgaW52YWxpZERhdGUgPSAoKSA9PiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCBOYU4pO1xuXG4gIGNvbnN0IGFkZGl0aW9uYWxEaWdpdHMgPSBvcHRpb25zPy5hZGRpdGlvbmFsRGlnaXRzID8/IDI7XG4gIGNvbnN0IGRhdGVTdHJpbmdzID0gc3BsaXREYXRlU3RyaW5nKGFyZ3VtZW50KTtcblxuICBsZXQgZGF0ZTtcbiAgaWYgKGRhdGVTdHJpbmdzLmRhdGUpIHtcbiAgICBjb25zdCBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cyk7XG4gICAgZGF0ZSA9IHBhcnNlRGF0ZShwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmcsIHBhcnNlWWVhclJlc3VsdC55ZWFyKTtcbiAgfVxuXG4gIGlmICghZGF0ZSB8fCBpc05hTigrZGF0ZSkpIHJldHVybiBpbnZhbGlkRGF0ZSgpO1xuXG4gIGNvbnN0IHRpbWVzdGFtcCA9ICtkYXRlO1xuICBsZXQgdGltZSA9IDA7XG4gIGxldCBvZmZzZXQ7XG5cbiAgaWYgKGRhdGVTdHJpbmdzLnRpbWUpIHtcbiAgICB0aW1lID0gcGFyc2VUaW1lKGRhdGVTdHJpbmdzLnRpbWUpO1xuICAgIGlmIChpc05hTih0aW1lKSkgcmV0dXJuIGludmFsaWREYXRlKCk7XG4gIH1cblxuICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUpIHtcbiAgICBvZmZzZXQgPSBwYXJzZVRpbWV6b25lKGRhdGVTdHJpbmdzLnRpbWV6b25lKTtcbiAgICBpZiAoaXNOYU4ob2Zmc2V0KSkgcmV0dXJuIGludmFsaWREYXRlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdG1wRGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgwLCBvcHRpb25zPy5pbik7XG4gICAgcmVzdWx0LnNldEZ1bGxZZWFyKFxuICAgICAgdG1wRGF0ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgdG1wRGF0ZS5nZXRVVENNb250aCgpLFxuICAgICAgdG1wRGF0ZS5nZXRVVENEYXRlKCksXG4gICAgKTtcbiAgICByZXN1bHQuc2V0SG91cnMoXG4gICAgICB0bXBEYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgICB0bXBEYXRlLmdldFVUQ01pbnV0ZXMoKSxcbiAgICAgIHRtcERhdGUuZ2V0VVRDU2Vjb25kcygpLFxuICAgICAgdG1wRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKSxcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gdG9EYXRlKHRpbWVzdGFtcCArIHRpbWUgKyBvZmZzZXQsIG9wdGlvbnM/LmluKTtcbn1cblxuY29uc3QgcGF0dGVybnMgPSB7XG4gIGRhdGVUaW1lRGVsaW1pdGVyOiAvW1QgXS8sXG4gIHRpbWVab25lRGVsaW1pdGVyOiAvW1ogXS9pLFxuICB0aW1lem9uZTogLyhbWistXS4qKSQvLFxufTtcblxuY29uc3QgZGF0ZVJlZ2V4ID1cbiAgL14tPyg/OihcXGR7M30pfChcXGR7Mn0pKD86LT8oXFxkezJ9KSk/fFcoXFxkezJ9KSg/Oi0/KFxcZHsxfSkpP3wpJC87XG5jb25zdCB0aW1lUmVnZXggPVxuICAvXihcXGR7Mn0oPzpbLixdXFxkKik/KSg/Ojo/KFxcZHsyfSg/OlsuLF1cXGQqKT8pKT8oPzo6PyhcXGR7Mn0oPzpbLixdXFxkKik/KSk/JC87XG5jb25zdCB0aW1lem9uZVJlZ2V4ID0gL14oWystXSkoXFxkezJ9KSg/Ojo/KFxcZHsyfSkpPyQvO1xuXG5mdW5jdGlvbiBzcGxpdERhdGVTdHJpbmcoZGF0ZVN0cmluZykge1xuICBjb25zdCBkYXRlU3RyaW5ncyA9IHt9O1xuICBjb25zdCBhcnJheSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMuZGF0ZVRpbWVEZWxpbWl0ZXIpO1xuICBsZXQgdGltZVN0cmluZztcblxuICAvLyBUaGUgcmVnZXggbWF0Y2ggc2hvdWxkIG9ubHkgcmV0dXJuIGF0IG1heGltdW0gdHdvIGFycmF5IGVsZW1lbnRzLlxuICAvLyBbZGF0ZV0sIFt0aW1lXSwgb3IgW2RhdGUsIHRpbWVdLlxuICBpZiAoYXJyYXkubGVuZ3RoID4gMikge1xuICAgIHJldHVybiBkYXRlU3RyaW5ncztcbiAgfVxuXG4gIGlmICgvOi8udGVzdChhcnJheVswXSkpIHtcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF07XG4gIH0gZWxzZSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGFycmF5WzBdO1xuICAgIHRpbWVTdHJpbmcgPSBhcnJheVsxXTtcbiAgICBpZiAocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIudGVzdChkYXRlU3RyaW5ncy5kYXRlKSkge1xuICAgICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIpWzBdO1xuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKFxuICAgICAgICBkYXRlU3RyaW5ncy5kYXRlLmxlbmd0aCxcbiAgICAgICAgZGF0ZVN0cmluZy5sZW5ndGgsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aW1lU3RyaW5nKSB7XG4gICAgY29uc3QgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZS5leGVjKHRpbWVTdHJpbmcpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmcucmVwbGFjZSh0b2tlblsxXSwgXCJcIik7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZVN0cmluZ3M7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkYXRlU3RyaW5nLCBhZGRpdGlvbmFsRGlnaXRzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICBcIl4oPzooXFxcXGR7NH18WystXVxcXFxke1wiICtcbiAgICAgICg0ICsgYWRkaXRpb25hbERpZ2l0cykgK1xuICAgICAgXCJ9KXwoXFxcXGR7Mn18WystXVxcXFxke1wiICtcbiAgICAgICgyICsgYWRkaXRpb25hbERpZ2l0cykgK1xuICAgICAgXCJ9KSQpXCIsXG4gICk7XG5cbiAgY29uc3QgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKHJlZ2V4KTtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIHsgeWVhcjogTmFOLCByZXN0RGF0ZVN0cmluZzogXCJcIiB9O1xuXG4gIGNvbnN0IHllYXIgPSBjYXB0dXJlc1sxXSA/IHBhcnNlSW50KGNhcHR1cmVzWzFdKSA6IG51bGw7XG4gIGNvbnN0IGNlbnR1cnkgPSBjYXB0dXJlc1syXSA/IHBhcnNlSW50KGNhcHR1cmVzWzJdKSA6IG51bGw7XG5cbiAgLy8gZWl0aGVyIHllYXIgb3IgY2VudHVyeSBpcyBudWxsLCBub3QgYm90aFxuICByZXR1cm4ge1xuICAgIHllYXI6IGNlbnR1cnkgPT09IG51bGwgPyB5ZWFyIDogY2VudHVyeSAqIDEwMCxcbiAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZSgoY2FwdHVyZXNbMV0gfHwgY2FwdHVyZXNbMl0pLmxlbmd0aCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZShkYXRlU3RyaW5nLCB5ZWFyKSB7XG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIGlmICh5ZWFyID09PSBudWxsKSByZXR1cm4gbmV3IERhdGUoTmFOKTtcblxuICBjb25zdCBjYXB0dXJlcyA9IGRhdGVTdHJpbmcubWF0Y2goZGF0ZVJlZ2V4KTtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHN0cmluZ1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gbmV3IERhdGUoTmFOKTtcblxuICBjb25zdCBpc1dlZWtEYXRlID0gISFjYXB0dXJlc1s0XTtcbiAgY29uc3QgZGF5T2ZZZWFyID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1sxXSk7XG4gIGNvbnN0IG1vbnRoID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1syXSkgLSAxO1xuICBjb25zdCBkYXkgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzNdKTtcbiAgY29uc3Qgd2VlayA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbNF0pO1xuICBjb25zdCBkYXlPZldlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzVdKSAtIDE7XG5cbiAgaWYgKGlzV2Vla0RhdGUpIHtcbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5T2ZXZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWssIGRheU9mV2Vlayk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICAgIGlmIChcbiAgICAgICF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheSkgfHxcbiAgICAgICF2YWxpZGF0ZURheU9mWWVhckRhdGUoeWVhciwgZGF5T2ZZZWFyKVxuICAgICkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIE1hdGgubWF4KGRheU9mWWVhciwgZGF5KSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlVW5pdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBwYXJzZUludCh2YWx1ZSkgOiAxO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICBjb25zdCBjYXB0dXJlcyA9IHRpbWVTdHJpbmcubWF0Y2godGltZVJlZ2V4KTtcbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIE5hTjsgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHRpbWVcblxuICBjb25zdCBob3VycyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbMV0pO1xuICBjb25zdCBtaW51dGVzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1syXSk7XG4gIGNvbnN0IHNlY29uZHMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzNdKTtcblxuICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSArIHNlY29uZHMgKiAxMDAwXG4gICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZVVuaXQodmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZSAmJiBwYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoXCIsXCIsIFwiLlwiKSkpIHx8IDA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZXpvbmUodGltZXpvbmVTdHJpbmcpIHtcbiAgaWYgKHRpbWV6b25lU3RyaW5nID09PSBcIlpcIikgcmV0dXJuIDA7XG5cbiAgY29uc3QgY2FwdHVyZXMgPSB0aW1lem9uZVN0cmluZy5tYXRjaCh0aW1lem9uZVJlZ2V4KTtcbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIDA7XG5cbiAgY29uc3Qgc2lnbiA9IGNhcHR1cmVzWzFdID09PSBcIitcIiA/IC0xIDogMTtcbiAgY29uc3QgaG91cnMgPSBwYXJzZUludChjYXB0dXJlc1syXSk7XG4gIGNvbnN0IG1pbnV0ZXMgPSAoY2FwdHVyZXNbM10gJiYgcGFyc2VJbnQoY2FwdHVyZXNbM10pKSB8fCAwO1xuXG4gIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgcmV0dXJuIHNpZ24gKiAoaG91cnMgKiBtaWxsaXNlY29uZHNJbkhvdXIgKyBtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUpO1xufVxuXG5mdW5jdGlvbiBkYXlPZklTT1dlZWtZZWFyKGlzb1dlZWtZZWFyLCB3ZWVrLCBkYXkpIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KTtcbiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5RGF5ID0gZGF0ZS5nZXRVVENEYXkoKSB8fCA3O1xuICBjb25zdCBkaWZmID0gKHdlZWsgLSAxKSAqIDcgKyBkYXkgKyAxIC0gZm91cnRoT2ZKYW51YXJ5RGF5O1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBkaWZmKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIFZhbGlkYXRpb24gZnVuY3Rpb25zXG5cbi8vIEZlYnJ1YXJ5IGlzIG51bGwgdG8gaGFuZGxlIHRoZSBsZWFwIHllYXIgKHVzaW5nIHx8KVxuY29uc3QgZGF5c0luTW9udGhzID0gWzMxLCBudWxsLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG5cbmZ1bmN0aW9uIGlzTGVhcFllYXJJbmRleCh5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8ICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIHJldHVybiAoXG4gICAgbW9udGggPj0gMCAmJlxuICAgIG1vbnRoIDw9IDExICYmXG4gICAgZGF0ZSA+PSAxICYmXG4gICAgZGF0ZSA8PSAoZGF5c0luTW9udGhzW21vbnRoXSB8fCAoaXNMZWFwWWVhckluZGV4KHllYXIpID8gMjkgOiAyOCkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHtcbiAgcmV0dXJuIGRheU9mWWVhciA+PSAxICYmIGRheU9mWWVhciA8PSAoaXNMZWFwWWVhckluZGV4KHllYXIpID8gMzY2IDogMzY1KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXZWVrRGF0ZShfeWVhciwgd2VlaywgZGF5KSB7XG4gIHJldHVybiB3ZWVrID49IDEgJiYgd2VlayA8PSA1MyAmJiBkYXkgPj0gMCAmJiBkYXkgPD0gNjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gIGlmIChob3VycyA9PT0gMjQpIHtcbiAgICByZXR1cm4gbWludXRlcyA9PT0gMCAmJiBzZWNvbmRzID09PSAwO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBzZWNvbmRzID49IDAgJiZcbiAgICBzZWNvbmRzIDwgNjAgJiZcbiAgICBtaW51dGVzID49IDAgJiZcbiAgICBtaW51dGVzIDwgNjAgJiZcbiAgICBob3VycyA+PSAwICYmXG4gICAgaG91cnMgPCAyNVxuICApO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWV6b25lKF9ob3VycywgbWludXRlcykge1xuICByZXR1cm4gbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPD0gNTk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJU087XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBwYXJzZUpTT059IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbXBsZXRlIElTTyBkYXRlIHN0cmluZyBpbiBVVEMgdGltZSwgdGhlIHR5cGljYWwgZm9ybWF0IGZvciB0cmFuc21pdHRpbmdcbiAqIGEgZGF0ZSBpbiBKU09OLCB0byBhIEphdmFTY3JpcHQgYERhdGVgIGluc3RhbmNlLlxuICpcbiAqIFRoaXMgaXMgYSBtaW5pbWFsIGltcGxlbWVudGF0aW9uIGZvciBjb252ZXJ0aW5nIGRhdGVzIHJldHJpZXZlZCBmcm9tIGEgSlNPTiBBUEkgdG9cbiAqIGEgYERhdGVgIGluc3RhbmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBgZGF0ZS1mbnNgIGxpYnJhcnkuXG4gKiBUaGUgZm9sbG93aW5nIGZvcm1hdHMgYXJlIHN1cHBvcnRlZDpcbiAqXG4gKiAtIGAyMDAwLTAzLTE1VDA1OjIwOjEwLjEyM1pgOiBUaGUgb3V0cHV0IG9mIGAudG9JU09TdHJpbmcoKWAgYW5kIGBKU09OLnN0cmluZ2lmeShuZXcgRGF0ZSgpKWBcbiAqIC0gYDIwMDAtMDMtMTVUMDU6MjA6MTBaYDogV2l0aG91dCBtaWxsaXNlY29uZHNcbiAqIC0gYDIwMDAtMDMtMTVUMDU6MjA6MTArMDA6MDBgOiBXaXRoIGEgemVybyBvZmZzZXQsIHRoZSBkZWZhdWx0IEpTT04gZW5jb2RlZCBmb3JtYXQgaW4gc29tZSBvdGhlciBsYW5ndWFnZXNcbiAqIC0gYDIwMDAtMDMtMTVUMDU6MjA6MTArMDU6NDVgOiBXaXRoIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgb2Zmc2V0LCB0aGUgZGVmYXVsdCBKU09OIGVuY29kZWQgZm9ybWF0IGluIHNvbWUgb3RoZXIgbGFuZ3VhZ2VzXG4gKiAtIGAyMDAwLTAzLTE1VDA1OjIwOjEwKzAwMDBgOiBXaXRoIGEgemVybyBvZmZzZXQgd2l0aG91dCBhIGNvbG9uXG4gKiAtIGAyMDAwLTAzLTE1VDA1OjIwOjEwYDogV2l0aG91dCBhIHRyYWlsaW5nICdaJyBzeW1ib2xcbiAqIC0gYDIwMDAtMDMtMTVUMDU6MjA6MTAuMTIzNDU2N2A6IFVwIHRvIDcgZGlnaXRzIGluIG1pbGxpc2Vjb25kcyBmaWVsZC4gT25seSBmaXJzdCAzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgc2luY2UgSlMgZG9lcyBub3QgYWxsb3cgZnJhY3Rpb25hbCBtaWxsaXNlY29uZHNcbiAqIC0gYDIwMDAtMDMtMTUgMDU6MjA6MTBgOiBXaXRoIGEgc3BhY2UgaW5zdGVhZCBvZiBhICdUJyBzZXBhcmF0b3IgZm9yIEFQSXMgcmV0dXJuaW5nIGEgU1FMIGRhdGUgd2l0aG91dCByZWZvcm1hdHRpbmdcbiAqXG4gKiBGb3IgY29udmVuaWVuY2UgYW5kIGVhc2Ugb2YgdXNlIHRoZXNlIG90aGVyIGlucHV0IHR5cGVzIGFyZSBhbHNvIHN1cHBvcnRlZFxuICogdmlhIFt0b0RhdGVdKGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlKTpcbiAqXG4gKiAtIEEgYERhdGVgIGluc3RhbmNlIHdpbGwgYmUgY2xvbmVkXG4gKiAtIEEgYG51bWJlcmAgd2lsbCBiZSB0cmVhdGVkIGFzIGEgdGltZXN0YW1wXG4gKlxuICogQW55IG90aGVyIGlucHV0IHR5cGUgb3IgaW52YWxpZCBkYXRlIHN0cmluZ3Mgd2lsbCByZXR1cm4gYW4gYEludmFsaWQgRGF0ZWAuXG4gKlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZVN0ciAtIEEgZnVsbHkgZm9ybWVkIElTTzg2MDEgZGF0ZSBzdHJpbmcgdG8gY29udmVydFxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSlNPTihkYXRlU3RyLCBvcHRpb25zKSB7XG4gIGNvbnN0IHBhcnRzID0gZGF0ZVN0ci5tYXRjaChcbiAgICAvKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlbVCBdKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSkoPzpcXC4oXFxkezAsN30pKT8oPzpafCguKShcXGR7Mn0pOj8oXFxkezJ9KT8pPy8sXG4gICk7XG5cbiAgaWYgKCFwYXJ0cykgcmV0dXJuIHRvRGF0ZShOYU4sIG9wdGlvbnM/LmluKTtcblxuICByZXR1cm4gdG9EYXRlKFxuICAgIERhdGUuVVRDKFxuICAgICAgK3BhcnRzWzFdLFxuICAgICAgK3BhcnRzWzJdIC0gMSxcbiAgICAgICtwYXJ0c1szXSxcbiAgICAgICtwYXJ0c1s0XSAtICgrcGFydHNbOV0gfHwgMCkgKiAocGFydHNbOF0gPT0gXCItXCIgPyAtMSA6IDEpLFxuICAgICAgK3BhcnRzWzVdIC0gKCtwYXJ0c1sxMF0gfHwgMCkgKiAocGFydHNbOF0gPT0gXCItXCIgPyAtMSA6IDEpLFxuICAgICAgK3BhcnRzWzZdLFxuICAgICAgKygocGFydHNbN10gfHwgXCIwXCIpICsgXCIwMFwiKS5zdWJzdHJpbmcoMCwgMyksXG4gICAgKSxcbiAgICBvcHRpb25zPy5pbixcbiAgKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBwYXJzZUpTT047XG4iLCAiaW1wb3J0IHsgZ2V0RGF5IH0gZnJvbSBcIi4vZ2V0RGF5LmpzXCI7XG5pbXBvcnQgeyBzdWJEYXlzIH0gZnJvbSBcIi4vc3ViRGF5cy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgcHJldmlvdXNEYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBwcmV2aW91c0RheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgV2hlbiBpcyB0aGUgcHJldmlvdXMgZGF5IG9mIHRoZSB3ZWVrP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogV2hlbiBpcyB0aGUgcHJldmlvdXMgZGF5IG9mIHRoZSB3ZWVrPyAwLTYgdGhlIGRheSBvZiB0aGUgd2VlaywgMCByZXByZXNlbnRzIFN1bmRheS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGRheSAtIFRoZSBkYXkgb2YgdGhlIHdlZWtcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIHRoZSBwcmV2aW91cyBkYXkgb2Ygd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGVuIGlzIHRoZSBwcmV2aW91cyBNb25kYXkgYmVmb3JlIE1hciwgMjAsIDIwMjA/XG4gKiBjb25zdCByZXN1bHQgPSBwcmV2aW91c0RheShuZXcgRGF0ZSgyMDIwLCAyLCAyMCksIDEpXG4gKiAvLz0+IE1vbiBNYXIgMTYgMjAyMCAwMDowMDowMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGVuIGlzIHRoZSBwcmV2aW91cyBUdWVzZGF5IGJlZm9yZSBNYXIsIDIxLCAyMDIwP1xuICogY29uc3QgcmVzdWx0ID0gcHJldmlvdXNEYXkobmV3IERhdGUoMjAyMCwgMiwgMjEpLCAyKVxuICogLy89PiBUdWUgTWFyIDE3IDIwMjAgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXZpb3VzRGF5KGRhdGUsIGRheSwgb3B0aW9ucykge1xuICBsZXQgZGVsdGEgPSBnZXREYXkoZGF0ZSwgb3B0aW9ucykgLSBkYXk7XG4gIGlmIChkZWx0YSA8PSAwKSBkZWx0YSArPSA3O1xuXG4gIHJldHVybiBzdWJEYXlzKGRhdGUsIGRlbHRhLCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBwcmV2aW91c0RheTtcbiIsICJpbXBvcnQgeyBwcmV2aW91c0RheSB9IGZyb20gXCIuL3ByZXZpb3VzRGF5LmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBwcmV2aW91c0ZyaWRheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHByZXZpb3VzRnJpZGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBXaGVuIGlzIHRoZSBwcmV2aW91cyBGcmlkYXk/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBXaGVuIGlzIHRoZSBwcmV2aW91cyBGcmlkYXk/XG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW1VUQ0RhdGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIHN0YXJ0IGNvdW50aW5nIGZyb21cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgcHJldmlvdXMgRnJpZGF5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoZW4gaXMgdGhlIHByZXZpb3VzIEZyaWRheSBiZWZvcmUgSnVuLCAxOSwgMjAyMT9cbiAqIGNvbnN0IHJlc3VsdCA9IHByZXZpb3VzRnJpZGF5KG5ldyBEYXRlKDIwMjEsIDUsIDE5KSlcbiAqIC8vPT4gRnJpIEp1bmUgMTggMjAyMSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldmlvdXNGcmlkYXkoZGF0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgNSwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgcHJldmlvdXNGcmlkYXk7XG4iLCAiaW1wb3J0IHsgcHJldmlvdXNEYXkgfSBmcm9tIFwiLi9wcmV2aW91c0RheS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgcHJldmlvdXNNb25kYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBwcmV2aW91c01vbmRheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgV2hlbiBpcyB0aGUgcHJldmlvdXMgTW9uZGF5P1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogV2hlbiBpcyB0aGUgcHJldmlvdXMgTW9uZGF5P1xuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIHN0YXJ0IGNvdW50aW5nIGZyb21cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBwcmV2aW91cyBNb25kYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hlbiBpcyB0aGUgcHJldmlvdXMgTW9uZGF5IGJlZm9yZSBKdW4sIDE4LCAyMDIxP1xuICogY29uc3QgcmVzdWx0ID0gcHJldmlvdXNNb25kYXkobmV3IERhdGUoMjAyMSwgNSwgMTgpKVxuICogLy89PiBNb24gSnVuZSAxNCAyMDIxIDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2aW91c01vbmRheShkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBwcmV2aW91c0RheShkYXRlLCAxLCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBwcmV2aW91c01vbmRheTtcbiIsICJpbXBvcnQgeyBwcmV2aW91c0RheSB9IGZyb20gXCIuL3ByZXZpb3VzRGF5LmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBwcmV2aW91c1NhdHVyZGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgcHJldmlvdXNTYXR1cmRheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgV2hlbiBpcyB0aGUgcHJldmlvdXMgU2F0dXJkYXk/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBXaGVuIGlzIHRoZSBwcmV2aW91cyBTYXR1cmRheT9cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBzdGFydCBjb3VudGluZyBmcm9tXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHByZXZpb3VzIFNhdHVyZGF5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoZW4gaXMgdGhlIHByZXZpb3VzIFNhdHVyZGF5IGJlZm9yZSBKdW4sIDIwLCAyMDIxP1xuICogY29uc3QgcmVzdWx0ID0gcHJldmlvdXNTYXR1cmRheShuZXcgRGF0ZSgyMDIxLCA1LCAyMCkpXG4gKiAvLz0+IFNhdCBKdW5lIDE5IDIwMjEgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXZpb3VzU2F0dXJkYXkoZGF0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgNiwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgcHJldmlvdXNTYXR1cmRheTtcbiIsICJpbXBvcnQgeyBwcmV2aW91c0RheSB9IGZyb20gXCIuL3ByZXZpb3VzRGF5LmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBwcmV2aW91c1N1bmRheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHByZXZpb3VzU3VuZGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBXaGVuIGlzIHRoZSBwcmV2aW91cyBTdW5kYXk/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBXaGVuIGlzIHRoZSBwcmV2aW91cyBTdW5kYXk/XG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gc3RhcnQgY291bnRpbmcgZnJvbVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBwcmV2aW91cyBTdW5kYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hlbiBpcyB0aGUgcHJldmlvdXMgU3VuZGF5IGJlZm9yZSBKdW4sIDIxLCAyMDIxP1xuICogY29uc3QgcmVzdWx0ID0gcHJldmlvdXNTdW5kYXkobmV3IERhdGUoMjAyMSwgNSwgMjEpKVxuICogLy89PiBTdW4gSnVuZSAyMCAyMDIxIDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2aW91c1N1bmRheShkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBwcmV2aW91c0RheShkYXRlLCAwLCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBwcmV2aW91c1N1bmRheTtcbiIsICJpbXBvcnQgeyBwcmV2aW91c0RheSB9IGZyb20gXCIuL3ByZXZpb3VzRGF5LmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBwcmV2aW91c1RodXJzZGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgcHJldmlvdXNUaHVyc2RheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgV2hlbiBpcyB0aGUgcHJldmlvdXMgVGh1cnNkYXk/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBXaGVuIGlzIHRoZSBwcmV2aW91cyBUaHVyc2RheT9cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBzdGFydCBjb3VudGluZyBmcm9tXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgcHJldmlvdXMgVGh1cnNkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hlbiBpcyB0aGUgcHJldmlvdXMgVGh1cnNkYXkgYmVmb3JlIEp1biwgMTgsIDIwMjE/XG4gKiBjb25zdCByZXN1bHQgPSBwcmV2aW91c1RodXJzZGF5KG5ldyBEYXRlKDIwMjEsIDUsIDE4KSlcbiAqIC8vPT4gVGh1IEp1bmUgMTcgMjAyMSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldmlvdXNUaHVyc2RheShkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBwcmV2aW91c0RheShkYXRlLCA0LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBwcmV2aW91c1RodXJzZGF5O1xuIiwgImltcG9ydCB7IHByZXZpb3VzRGF5IH0gZnJvbSBcIi4vcHJldmlvdXNEYXkuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHByZXZpb3VzVHVlc2RheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHByZXZpb3VzVHVlc2RheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgV2hlbiBpcyB0aGUgcHJldmlvdXMgVHVlc2RheT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFdoZW4gaXMgdGhlIHByZXZpb3VzIFR1ZXNkYXk/XG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gc3RhcnQgY291bnRpbmcgZnJvbVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHByZXZpb3VzIFR1ZXNkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hlbiBpcyB0aGUgcHJldmlvdXMgVHVlc2RheSBiZWZvcmUgSnVuLCAxOCwgMjAyMT9cbiAqIGNvbnN0IHJlc3VsdCA9IHByZXZpb3VzVHVlc2RheShuZXcgRGF0ZSgyMDIxLCA1LCAxOCkpXG4gKiAvLz0+IFR1ZSBKdW5lIDE1IDIwMjEgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXZpb3VzVHVlc2RheShkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBwcmV2aW91c0RheShkYXRlLCAyLCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBwcmV2aW91c1R1ZXNkYXk7XG4iLCAiaW1wb3J0IHsgcHJldmlvdXNEYXkgfSBmcm9tIFwiLi9wcmV2aW91c0RheS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgcHJldmlvdXNXZWRuZXNkYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBwcmV2aW91c1dlZG5lc2RheVxuICogQGNhdGVnb3J5IFdlZWtkYXkgSGVscGVyc1xuICogQHN1bW1hcnkgV2hlbiBpcyB0aGUgcHJldmlvdXMgV2VkbmVzZGF5P1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogV2hlbiBpcyB0aGUgcHJldmlvdXMgV2VkbmVzZGF5P1xuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgRGF0ZSB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbVVRDRGF0ZV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gc3RhcnQgY291bnRpbmcgZnJvbVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHByZXZpb3VzIFdlZG5lc2RheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGVuIGlzIHRoZSBwcmV2aW91cyBXZWRuZXNkYXkgYmVmb3JlIEp1biwgMTgsIDIwMjE/XG4gKiBjb25zdCByZXN1bHQgPSBwcmV2aW91c1dlZG5lc2RheShuZXcgRGF0ZSgyMDIxLCA1LCAxOCkpXG4gKiAvLz0+IFdlZCBKdW5lIDE2IDIwMjEgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXZpb3VzV2VkbmVzZGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHByZXZpb3VzRGF5KGRhdGUsIDMsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHByZXZpb3VzV2VkbmVzZGF5O1xuIiwgImltcG9ydCB7IG1vbnRoc0luUXVhcnRlciB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIHF1YXJ0ZXJzVG9Nb250aHNcbiAqIEBjYXRlZ29yeSBDb252ZXJzaW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgbnVtYmVyIG9mIHF1YXJ0ZXJzIHRvIG1vbnRocy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgYSBudW1iZXIgb2YgcXVhcnRlcnMgdG8gYSBmdWxsIG51bWJlciBvZiBtb250aHMuXG4gKlxuICogQHBhcmFtIHF1YXJ0ZXJzIC0gVGhlIG51bWJlciBvZiBxdWFydGVycyB0byBiZSBjb252ZXJ0ZWRcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIHF1YXJ0ZXJzIGNvbnZlcnRlZCBpbiBtb250aHNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCAyIHF1YXJ0ZXJzIHRvIG1vbnRoc1xuICogY29uc3QgcmVzdWx0ID0gcXVhcnRlcnNUb01vbnRocygyKVxuICogLy89PiA2XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdWFydGVyc1RvTW9udGhzKHF1YXJ0ZXJzKSB7XG4gIHJldHVybiBNYXRoLnRydW5jKHF1YXJ0ZXJzICogbW9udGhzSW5RdWFydGVyKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBxdWFydGVyc1RvTW9udGhzO1xuIiwgImltcG9ydCB7IHF1YXJ0ZXJzSW5ZZWFyIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgcXVhcnRlcnNUb1llYXJzXG4gKiBAY2F0ZWdvcnkgQ29udmVyc2lvbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IG51bWJlciBvZiBxdWFydGVycyB0byB5ZWFycy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgYSBudW1iZXIgb2YgcXVhcnRlcnMgdG8gYSBmdWxsIG51bWJlciBvZiB5ZWFycy5cbiAqXG4gKiBAcGFyYW0gcXVhcnRlcnMgLSBUaGUgbnVtYmVyIG9mIHF1YXJ0ZXJzIHRvIGJlIGNvbnZlcnRlZFxuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgcXVhcnRlcnMgY29udmVydGVkIGluIHllYXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgOCBxdWFydGVycyB0byB5ZWFyc1xuICogY29uc3QgcmVzdWx0ID0gcXVhcnRlcnNUb1llYXJzKDgpXG4gKiAvLz0+IDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXQgdXNlcyBmbG9vciByb3VuZGluZzpcbiAqIGNvbnN0IHJlc3VsdCA9IHF1YXJ0ZXJzVG9ZZWFycygxMSlcbiAqIC8vPT4gMlxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVhcnRlcnNUb1llYXJzKHF1YXJ0ZXJzKSB7XG4gIGNvbnN0IHllYXJzID0gcXVhcnRlcnMgLyBxdWFydGVyc0luWWVhcjtcbiAgcmV0dXJuIE1hdGgudHJ1bmMoeWVhcnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHF1YXJ0ZXJzVG9ZZWFycztcbiIsICJpbXBvcnQgeyBnZXRSb3VuZGluZ01ldGhvZCB9IGZyb20gXCIuL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanNcIjtcbmltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHJvdW5kVG9OZWFyZXN0SG91cnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSByb3VuZFRvTmVhcmVzdEhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSb3VuZHMgdGhlIGdpdmVuIGRhdGUgdG8gdGhlIG5lYXJlc3QgaG91clxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUm91bmRzIHRoZSBnaXZlbiBkYXRlIHRvIHRoZSBuZWFyZXN0IGhvdXIgKG9yIG51bWJlciBvZiBob3VycykuXG4gKiBSb3VuZHMgdXAgd2hlbiB0aGUgZ2l2ZW4gZGF0ZSBpcyBleGFjdGx5IGJldHdlZW4gdGhlIG5lYXJlc3Qgcm91bmQgaG91cnMuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gcm91bmRcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgcm91bmRlZCB0byB0aGUgY2xvc2VzdCBob3VyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJvdW5kIDEwIEp1bHkgMjAxNCAxMjozNDo1NiB0byBuZWFyZXN0IGhvdXI6XG4gKiBjb25zdCByZXN1bHQgPSByb3VuZFRvTmVhcmVzdEhvdXJzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgMzQsIDU2KSlcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEzOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJvdW5kIDEwIEp1bHkgMjAxNCAxMjozNDo1NiB0byBuZWFyZXN0IGhhbGYgaG91cjpcbiAqIGNvbnN0IHJlc3VsdCA9IHJvdW5kVG9OZWFyZXN0SG91cnMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCAzNCwgNTYpLCB7IG5lYXJlc3RUbzogNiB9KVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6MDA6MDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUm91bmQgMTAgSnVseSAyMDE0IDEyOjM0OjU2IHRvIG5lYXJlc3QgaGFsZiBob3VyOlxuICogY29uc3QgcmVzdWx0ID0gcm91bmRUb05lYXJlc3RIb3VycyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDM0LCA1NiksIHsgbmVhcmVzdFRvOiA4IH0pXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxNjowMDowMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGbG9vciAocm91bmRzIGRvd24pIDEwIEp1bHkgMjAxNCAxMjozNDo1NiB0byBuZWFyZXN0IGhvdXI6XG4gKiBjb25zdCByZXN1bHQgPSByb3VuZFRvTmVhcmVzdEhvdXJzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxLCAyMywgNDUpLCB7IHJvdW5kaW5nTWV0aG9kOiAnY2VpbCcgfSlcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDAyOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENlaWwgKHJvdW5kcyB1cCkgMTAgSnVseSAyMDE0IDEyOjM0OjU2IHRvIG5lYXJlc3QgcXVhcnRlciBob3VyOlxuICogY29uc3QgcmVzdWx0ID0gcm91bmRUb05lYXJlc3RIb3VycyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDM0LCA1NiksIHsgcm91bmRpbmdNZXRob2Q6ICdmbG9vcicsIG5lYXJlc3RUbzogOCB9KVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMDg6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kVG9OZWFyZXN0SG91cnMoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBuZWFyZXN0VG8gPSBvcHRpb25zPy5uZWFyZXN0VG8gPz8gMTtcblxuICBpZiAobmVhcmVzdFRvIDwgMSB8fCBuZWFyZXN0VG8gPiAxMilcbiAgICByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBOYU4pO1xuXG4gIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgZnJhY3Rpb25hbE1pbnV0ZXMgPSBkYXRlXy5nZXRNaW51dGVzKCkgLyA2MDtcbiAgY29uc3QgZnJhY3Rpb25hbFNlY29uZHMgPSBkYXRlXy5nZXRTZWNvbmRzKCkgLyA2MCAvIDYwO1xuICBjb25zdCBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzID0gZGF0ZV8uZ2V0TWlsbGlzZWNvbmRzKCkgLyAxMDAwIC8gNjAgLyA2MDtcbiAgY29uc3QgaG91cnMgPVxuICAgIGRhdGVfLmdldEhvdXJzKCkgK1xuICAgIGZyYWN0aW9uYWxNaW51dGVzICtcbiAgICBmcmFjdGlvbmFsU2Vjb25kcyArXG4gICAgZnJhY3Rpb25hbE1pbGxpc2Vjb25kcztcblxuICBjb25zdCBtZXRob2QgPSBvcHRpb25zPy5yb3VuZGluZ01ldGhvZCA/PyBcInJvdW5kXCI7XG4gIGNvbnN0IHJvdW5kaW5nTWV0aG9kID0gZ2V0Um91bmRpbmdNZXRob2QobWV0aG9kKTtcblxuICBjb25zdCByb3VuZGVkSG91cnMgPSByb3VuZGluZ01ldGhvZChob3VycyAvIG5lYXJlc3RUbykgKiBuZWFyZXN0VG87XG5cbiAgZGF0ZV8uc2V0SG91cnMocm91bmRlZEhvdXJzLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGVfO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHJvdW5kVG9OZWFyZXN0SG91cnM7XG4iLCAiaW1wb3J0IHsgZ2V0Um91bmRpbmdNZXRob2QgfSBmcm9tIFwiLi9fbGliL2dldFJvdW5kaW5nTWV0aG9kLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayByb3VuZFRvTmVhcmVzdE1pbnV0ZXN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSByb3VuZFRvTmVhcmVzdE1pbnV0ZXNcbiAqIEBjYXRlZ29yeSBNaW51dGUgSGVscGVyc1xuICogQHN1bW1hcnkgUm91bmRzIHRoZSBnaXZlbiBkYXRlIHRvIHRoZSBuZWFyZXN0IG1pbnV0ZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUm91bmRzIHRoZSBnaXZlbiBkYXRlIHRvIHRoZSBuZWFyZXN0IG1pbnV0ZSAob3IgbnVtYmVyIG9mIG1pbnV0ZXMpLlxuICogUm91bmRzIHVwIHdoZW4gdGhlIGdpdmVuIGRhdGUgaXMgZXhhY3RseSBiZXR3ZWVuIHRoZSBuZWFyZXN0IHJvdW5kIG1pbnV0ZXMuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gcm91bmRcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgcm91bmRlZCB0byB0aGUgY2xvc2VzdCBtaW51dGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUm91bmQgMTAgSnVseSAyMDE0IDEyOjEyOjM0IHRvIG5lYXJlc3QgbWludXRlOlxuICogY29uc3QgcmVzdWx0ID0gcm91bmRUb05lYXJlc3RNaW51dGVzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgMTIsIDM0KSlcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjEzOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJvdW5kIDEwIEp1bHkgMjAxNCAxMjoxMjozNCB0byBuZWFyZXN0IHF1YXJ0ZXIgaG91cjpcbiAqIGNvbnN0IHJlc3VsdCA9IHJvdW5kVG9OZWFyZXN0TWludXRlcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDEyLCAzNCksIHsgbmVhcmVzdFRvOiAxNSB9KVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6MTU6MDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRmxvb3IgKHJvdW5kcyBkb3duKSAxMCBKdWx5IDIwMTQgMTI6MTI6MzQgdG8gbmVhcmVzdCBtaW51dGU6XG4gKiBjb25zdCByZXN1bHQgPSByb3VuZFRvTmVhcmVzdE1pbnV0ZXMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCAxMiwgMzQpLCB7IHJvdW5kaW5nTWV0aG9kOiAnZmxvb3InIH0pXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjoxMjowMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDZWlsIChyb3VuZHMgdXApIDEwIEp1bHkgMjAxNCAxMjoxMjozNCB0byBuZWFyZXN0IGhhbGYgaG91cjpcbiAqIGNvbnN0IHJlc3VsdCA9IHJvdW5kVG9OZWFyZXN0TWludXRlcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDEyLCAzNCksIHsgcm91bmRpbmdNZXRob2Q6ICdjZWlsJywgbmVhcmVzdFRvOiAzMCB9KVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6MzA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kVG9OZWFyZXN0TWludXRlcyhkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IG5lYXJlc3RUbyA9IG9wdGlvbnM/Lm5lYXJlc3RUbyA/PyAxO1xuXG4gIGlmIChuZWFyZXN0VG8gPCAxIHx8IG5lYXJlc3RUbyA+IDMwKSByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBOYU4pO1xuXG4gIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgZnJhY3Rpb25hbFNlY29uZHMgPSBkYXRlXy5nZXRTZWNvbmRzKCkgLyA2MDtcbiAgY29uc3QgZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyA9IGRhdGVfLmdldE1pbGxpc2Vjb25kcygpIC8gMTAwMCAvIDYwO1xuICBjb25zdCBtaW51dGVzID1cbiAgICBkYXRlXy5nZXRNaW51dGVzKCkgKyBmcmFjdGlvbmFsU2Vjb25kcyArIGZyYWN0aW9uYWxNaWxsaXNlY29uZHM7XG5cbiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucz8ucm91bmRpbmdNZXRob2QgPz8gXCJyb3VuZFwiO1xuICBjb25zdCByb3VuZGluZ01ldGhvZCA9IGdldFJvdW5kaW5nTWV0aG9kKG1ldGhvZCk7XG5cbiAgY29uc3Qgcm91bmRlZE1pbnV0ZXMgPSByb3VuZGluZ01ldGhvZChtaW51dGVzIC8gbmVhcmVzdFRvKSAqIG5lYXJlc3RUbztcblxuICBkYXRlXy5zZXRNaW51dGVzKHJvdW5kZWRNaW51dGVzLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGVfO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHJvdW5kVG9OZWFyZXN0TWludXRlcztcbiIsICJpbXBvcnQgeyBzZWNvbmRzSW5Ib3VyIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgc2Vjb25kc1RvSG91cnNcbiAqIEBjYXRlZ29yeSBDb252ZXJzaW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgc2Vjb25kcyB0byBob3Vycy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgYSBudW1iZXIgb2Ygc2Vjb25kcyB0byBhIGZ1bGwgbnVtYmVyIG9mIGhvdXJzLlxuICpcbiAqIEBwYXJhbSBzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIGJlIGNvbnZlcnRlZFxuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBjb252ZXJ0ZWQgaW4gaG91cnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCA3MjAwIHNlY29uZHMgaW50byBob3Vyc1xuICogY29uc3QgcmVzdWx0ID0gc2Vjb25kc1RvSG91cnMoNzIwMClcbiAqIC8vPT4gMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJdCB1c2VzIGZsb29yIHJvdW5kaW5nOlxuICogY29uc3QgcmVzdWx0ID0gc2Vjb25kc1RvSG91cnMoNzE5OSlcbiAqIC8vPT4gMVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kc1RvSG91cnMoc2Vjb25kcykge1xuICBjb25zdCBob3VycyA9IHNlY29uZHMgLyBzZWNvbmRzSW5Ib3VyO1xuICByZXR1cm4gTWF0aC50cnVuYyhob3Vycyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc2Vjb25kc1RvSG91cnM7XG4iLCAiaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5TZWNvbmQgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBzZWNvbmRzVG9NaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBDb252ZXJzaW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgc2Vjb25kcyB0byBtaWxsaXNlY29uZHMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IGEgbnVtYmVyIG9mIHNlY29uZHMgdG8gYSBmdWxsIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHNlY29uZHMgLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gYmUgY29udmVydGVkXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBzZWNvbmRzIGNvbnZlcnRlZCBpbiBtaWxsaXNlY29uZHNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCAyIHNlY29uZHMgaW50byBtaWxsaXNlY29uZHNcbiAqIGNvbnN0IHJlc3VsdCA9IHNlY29uZHNUb01pbGxpc2Vjb25kcygyKVxuICogLy89PiAyMDAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRzVG9NaWxsaXNlY29uZHMoc2Vjb25kcykge1xuICByZXR1cm4gc2Vjb25kcyAqIG1pbGxpc2Vjb25kc0luU2Vjb25kO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHNlY29uZHNUb01pbGxpc2Vjb25kcztcbiIsICJpbXBvcnQgeyBzZWNvbmRzSW5NaW51dGUgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBzZWNvbmRzVG9NaW51dGVzXG4gKiBAY2F0ZWdvcnkgQ29udmVyc2lvbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHNlY29uZHMgdG8gbWludXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgYSBudW1iZXIgb2Ygc2Vjb25kcyB0byBhIGZ1bGwgbnVtYmVyIG9mIG1pbnV0ZXMuXG4gKlxuICogQHBhcmFtIHNlY29uZHMgLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gYmUgY29udmVydGVkXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBzZWNvbmRzIGNvbnZlcnRlZCBpbiBtaW51dGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgMTIwIHNlY29uZHMgaW50byBtaW51dGVzXG4gKiBjb25zdCByZXN1bHQgPSBzZWNvbmRzVG9NaW51dGVzKDEyMClcbiAqIC8vPT4gMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJdCB1c2VzIGZsb29yIHJvdW5kaW5nOlxuICogY29uc3QgcmVzdWx0ID0gc2Vjb25kc1RvTWludXRlcygxMTkpXG4gKiAvLz0+IDFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlY29uZHNUb01pbnV0ZXMoc2Vjb25kcykge1xuICBjb25zdCBtaW51dGVzID0gc2Vjb25kcyAvIHNlY29uZHNJbk1pbnV0ZTtcbiAgcmV0dXJuIE1hdGgudHJ1bmMobWludXRlcyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc2Vjb25kc1RvTWludXRlcztcbiIsICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF5c0luTW9udGggfSBmcm9tIFwiLi9nZXREYXlzSW5Nb250aC5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzZXRNb250aH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHNldE1vbnRoXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgU2V0IHRoZSBtb250aCB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCB0aGUgbW9udGggdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIG1vbnRoIC0gVGhlIG1vbnRoIGluZGV4IHRvIHNldCAoMC0xMSlcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgbW9udGggc2V0XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCBGZWJydWFyeSB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gc2V0TW9udGgobmV3IERhdGUoMjAxNCwgOCwgMSksIDEpXG4gKiAvLz0+IFNhdCBGZWIgMDEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TW9udGgoZGF0ZSwgbW9udGgsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTtcbiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF0ZSgpO1xuXG4gIGNvbnN0IG1pZE1vbnRoID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTtcbiAgbWlkTW9udGguc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIDE1KTtcbiAgbWlkTW9udGguc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGNvbnN0IGRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGgobWlkTW9udGgpO1xuXG4gIC8vIFNldCB0aGUgZWFybGllciBkYXRlLCBhbGxvd3MgdG8gd3JhcCBKYW4gMzEgdG8gRmViIDI4XG4gIF9kYXRlLnNldE1vbnRoKG1vbnRoLCBNYXRoLm1pbihkYXksIGRheXNJbk1vbnRoKSk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzZXRNb250aDtcbiIsICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgc2V0TW9udGggfSBmcm9tIFwiLi9zZXRNb250aC5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzZXR9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzZXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgU2V0IGRhdGUgdmFsdWVzIHRvIGEgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCBkYXRlIHZhbHVlcyB0byBhIGdpdmVuIGRhdGUuXG4gKlxuICogU2V0cyB0aW1lIHZhbHVlcyB0byBkYXRlIGZyb20gb2JqZWN0IGB2YWx1ZXNgLlxuICogQSB2YWx1ZSBpcyBub3Qgc2V0IGlmIGl0IGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIGRvZXNuJ3QgZXhpc3QgaW4gYHZhbHVlc2AuXG4gKlxuICogTm90ZSBhYm91dCBidW5kbGUgc2l6ZTogYHNldGAgZG9lcyBub3QgaW50ZXJuYWxseSB1c2UgYHNldFhgIGZ1bmN0aW9ucyBmcm9tIGRhdGUtZm5zIGJ1dCBpbnN0ZWFkIG9wdHNcbiAqIHRvIHVzZSBuYXRpdmUgYERhdGUjc2V0WGAgbWV0aG9kcy4gSWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uLCB5b3UgbWF5IG5vdCB3YW50IHRvIGluY2x1ZGUgdGhlXG4gKiBvdGhlciBgc2V0WGAgZnVuY3Rpb25zIHRoYXQgZGF0ZS1mbnMgcHJvdmlkZXMgaWYgeW91IGFyZSBjb25jZXJuZWQgYWJvdXQgdGhlIGJ1bmRsZSBzaXplLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB2YWx1ZXMgLSBUaGUgZGF0ZSB2YWx1ZXMgdG8gYmUgc2V0XG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggb3B0aW9ucyBzZXRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVHJhbnNmb3JtIDEgU2VwdGVtYmVyIDIwMTQgaW50byAyMCBPY3RvYmVyIDIwMTUgaW4gYSBzaW5nbGUgbGluZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHNldChuZXcgRGF0ZSgyMDE0LCA4LCAyMCksIHsgeWVhcjogMjAxNSwgbW9udGg6IDksIGRhdGU6IDIwIH0pXG4gKiAvLz0+IFR1ZSBPY3QgMjAgMjAxNSAwMDowMDowMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgMTIgUE0gdG8gMSBTZXB0ZW1iZXIgMjAxNCAwMToyMzo0NSB0byAxIFNlcHRlbWJlciAyMDE0IDEyOjAwOjAwOlxuICogY29uc3QgcmVzdWx0ID0gc2V0KG5ldyBEYXRlKDIwMTQsIDgsIDEsIDEsIDIzLCA0NSksIHsgaG91cnM6IDEyIH0pXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAxMjoyMzo0NVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0KGRhdGUsIHZhbHVlcywgb3B0aW9ucykge1xuICBsZXQgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuXG4gIC8vIENoZWNrIGlmIGRhdGUgaXMgSW52YWxpZCBEYXRlIGJlY2F1c2UgRGF0ZS5wcm90b3R5cGUuc2V0RnVsbFllYXIgaWdub3JlcyB0aGUgdmFsdWUgb2YgSW52YWxpZCBEYXRlXG4gIGlmIChpc05hTigrX2RhdGUpKSByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBOYU4pO1xuXG4gIGlmICh2YWx1ZXMueWVhciAhPSBudWxsKSBfZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZXMueWVhcik7XG4gIGlmICh2YWx1ZXMubW9udGggIT0gbnVsbCkgX2RhdGUgPSBzZXRNb250aChfZGF0ZSwgdmFsdWVzLm1vbnRoKTtcbiAgaWYgKHZhbHVlcy5kYXRlICE9IG51bGwpIF9kYXRlLnNldERhdGUodmFsdWVzLmRhdGUpO1xuICBpZiAodmFsdWVzLmhvdXJzICE9IG51bGwpIF9kYXRlLnNldEhvdXJzKHZhbHVlcy5ob3Vycyk7XG4gIGlmICh2YWx1ZXMubWludXRlcyAhPSBudWxsKSBfZGF0ZS5zZXRNaW51dGVzKHZhbHVlcy5taW51dGVzKTtcbiAgaWYgKHZhbHVlcy5zZWNvbmRzICE9IG51bGwpIF9kYXRlLnNldFNlY29uZHModmFsdWVzLnNlY29uZHMpO1xuICBpZiAodmFsdWVzLm1pbGxpc2Vjb25kcyAhPSBudWxsKSBfZGF0ZS5zZXRNaWxsaXNlY29uZHModmFsdWVzLm1pbGxpc2Vjb25kcyk7XG5cbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHNldDtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHNldERhdGV9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzZXREYXRlXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgZGF5IG9mIHRoZSBtb250aCB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCB0aGUgZGF5IG9mIHRoZSBtb250aCB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdXNpbmcgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBkYXlPZk1vbnRoIC0gVGhlIGRheSBvZiB0aGUgbW9udGggb2YgdGhlIG5ldyBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIGRheSBvZiB0aGUgbW9udGggc2V0XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCB0aGUgMzB0aCBkYXkgb2YgdGhlIG1vbnRoIHRvIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBzZXREYXRlKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAzMClcbiAqIC8vPT4gVHVlIFNlcCAzMCAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREYXRlKGRhdGUsIGRheU9mTW9udGgsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBfZGF0ZS5zZXREYXRlKGRheU9mTW9udGgpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc2V0RGF0ZTtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHNldERheU9mWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHNldERheU9mWWVhclxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTZXQgdGhlIGRheSBvZiB0aGUgeWVhciB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCB0aGUgZGF5IG9mIHRoZSB5ZWFyIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBkYXlPZlllYXIgLSBUaGUgZGF5IG9mIHRoZSB5ZWFyIG9mIHRoZSBuZXcgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIGRheSBvZiB0aGUgeWVhciBzZXRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IHRoZSAybmQgZGF5IG9mIHRoZSB5ZWFyIHRvIDIgSnVseSAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gc2V0RGF5T2ZZZWFyKG5ldyBEYXRlKDIwMTQsIDYsIDIpLCAyKVxuICogLy89PiBUaHUgSmFuIDAyIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldERheU9mWWVhcihkYXRlLCBkYXlPZlllYXIsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBkYXRlXy5zZXRNb250aCgwKTtcbiAgZGF0ZV8uc2V0RGF0ZShkYXlPZlllYXIpO1xuICByZXR1cm4gZGF0ZV87XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc2V0RGF5T2ZZZWFyO1xuIiwgImltcG9ydCB7XG4gIGdldERlZmF1bHRPcHRpb25zLFxuICBzZXREZWZhdWx0T3B0aW9ucyBhcyBzZXRJbnRlcm5hbERlZmF1bHRPcHRpb25zLFxufSBmcm9tIFwiLi9fbGliL2RlZmF1bHRPcHRpb25zLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgc2V0RGVmYXVsdE9wdGlvbnNcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgU2V0IGRlZmF1bHQgb3B0aW9ucyBpbmNsdWRpbmcgbG9jYWxlLlxuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldHMgdGhlIGRlZmF1bHRzIGZvclxuICogYG9wdGlvbnMubG9jYWxlYCwgYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYFxuICogYXJndW1lbnRzIGZvciBhbGwgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgZ2xvYmFsIGxvY2FsZTpcbiAqIGltcG9ydCB7IGVzIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlJ1xuICogc2V0RGVmYXVsdE9wdGlvbnMoeyBsb2NhbGU6IGVzIH0pXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgOCwgMiksICdQUFBQJylcbiAqIC8vPT4gJ21hcnRlcywgMiBkZSBzZXB0aWVtYnJlIGRlIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0YXJ0IG9mIHRoZSB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMikpXG4gKiAvLz0+IFN1biBBdWcgMzEgMjAxNCAwMDowMDowMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdGFydCBvZiB0aGUgd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCxcbiAqIC8vIHdoZW4gd2Ugc2V0IHRoYXQgd2VlayBzdGFydHMgb24gTW9uZGF5IGJ5IGRlZmF1bHQ6XG4gKiBzZXREZWZhdWx0T3B0aW9ucyh7IHdlZWtTdGFydHNPbjogMSB9KVxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMikpXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBNYW51YWxseSBzZXQgb3B0aW9ucyB0YWtlIHByaW9yaXR5IG92ZXIgZGVmYXVsdCBvcHRpb25zOlxuICogc2V0RGVmYXVsdE9wdGlvbnMoeyB3ZWVrU3RhcnRzT246IDEgfSlcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIpLCB7IHdlZWtTdGFydHNPbjogMCB9KVxuICogLy89PiBTdW4gQXVnIDMxIDIwMTQgMDA6MDA6MDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVtb3ZlIHRoZSBvcHRpb24gYnkgc2V0dGluZyBpdCB0byBgdW5kZWZpbmVkYDpcbiAqIHNldERlZmF1bHRPcHRpb25zKHsgd2Vla1N0YXJ0c09uOiAxIH0pXG4gKiBzZXREZWZhdWx0T3B0aW9ucyh7IHdlZWtTdGFydHNPbjogdW5kZWZpbmVkIH0pXG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyKSlcbiAqIC8vPT4gU3VuIEF1ZyAzMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBkZWZhdWx0T3B0aW9ucykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVmYXVsdE9wdGlvbnMsIHByb3BlcnR5KSkge1xuICAgICAgLy8gW1RPRE9dIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGVcbiAgICAgIHJlc3VsdFtwcm9wZXJ0eV0gPSBkZWZhdWx0T3B0aW9uc1twcm9wZXJ0eV07XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBvcHRpb25zKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBwcm9wZXJ0eSkpIHtcbiAgICAgIGlmIChvcHRpb25zW3Byb3BlcnR5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFtUT0RPXSBJIGNoYWxsZW5nZSB5b3UgdG8gZml4IHRoZSB0eXBlXG4gICAgICAgIGRlbGV0ZSByZXN1bHRbcHJvcGVydHldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gW1RPRE9dIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGVcbiAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IG9wdGlvbnNbcHJvcGVydHldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEludGVybmFsRGVmYXVsdE9wdGlvbnMocmVzdWx0KTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzZXREZWZhdWx0T3B0aW9ucztcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHNldEhvdXJzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc2V0SG91cnNcbiAqIEBjYXRlZ29yeSBIb3VyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgaG91cnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZXQgdGhlIGhvdXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBob3VycyAtIFRoZSBob3VycyBvZiB0aGUgbmV3IGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBob3VycyBzZXRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IDQgaG91cnMgdG8gMSBTZXB0ZW1iZXIgMjAxNCAxMTozMDowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHNldEhvdXJzKG5ldyBEYXRlKDIwMTQsIDgsIDEsIDExLCAzMCksIDQpXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwNDozMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SG91cnMoZGF0ZSwgaG91cnMsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBfZGF0ZS5zZXRIb3Vycyhob3Vycyk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzZXRIb3VycztcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHNldE1pbGxpc2Vjb25kc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHNldE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU2V0IHRoZSBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIG1pbGxpc2Vjb25kcyAtIFRoZSBtaWxsaXNlY29uZHMgb2YgdGhlIG5ldyBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzZXRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IDMwMCBtaWxsaXNlY29uZHMgdG8gMSBTZXB0ZW1iZXIgMjAxNCAxMTozMDo0MC41MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzZXRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgOCwgMSwgMTEsIDMwLCA0MCwgNTAwKSwgMzAwKVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMTE6MzA6NDAuMzAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRNaWxsaXNlY29uZHMoZGF0ZSwgbWlsbGlzZWNvbmRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgX2RhdGUuc2V0TWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kcyk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzZXRNaWxsaXNlY29uZHM7XG4iLCAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzZXRNaW51dGVzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc2V0TWludXRlc1xuICogQGNhdGVnb3J5IE1pbnV0ZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTZXQgdGhlIG1pbnV0ZXMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZXQgdGhlIG1pbnV0ZXMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHVzaW5nIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24sIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBtaW51dGVzIC0gVGhlIG1pbnV0ZXMgb2YgdGhlIG5ldyBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgbWludXRlcyBzZXRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IDQ1IG1pbnV0ZXMgdG8gMSBTZXB0ZW1iZXIgMjAxNCAxMTozMDo0MDpcbiAqIGNvbnN0IHJlc3VsdCA9IHNldE1pbnV0ZXMobmV3IERhdGUoMjAxNCwgOCwgMSwgMTEsIDMwLCA0MCksIDQ1KVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMTE6NDU6NDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE1pbnV0ZXMoZGF0ZSwgbWludXRlcywgb3B0aW9ucykge1xuICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGRhdGVfLnNldE1pbnV0ZXMobWludXRlcyk7XG4gIHJldHVybiBkYXRlXztcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzZXRNaW51dGVzO1xuIiwgImltcG9ydCB7IHNldE1vbnRoIH0gZnJvbSBcIi4vc2V0TW9udGguanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc2V0UXVhcnRlcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHNldFF1YXJ0ZXJcbiAqIEBjYXRlZ29yeSBRdWFydGVyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgeWVhciBxdWFydGVyIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU2V0IHRoZSB5ZWFyIHF1YXJ0ZXIgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHF1YXJ0ZXIgLSBUaGUgcXVhcnRlciBvZiB0aGUgbmV3IGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgcXVhcnRlciBzZXRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IHRoZSAybmQgcXVhcnRlciB0byAyIEp1bHkgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IHNldFF1YXJ0ZXIobmV3IERhdGUoMjAxNCwgNiwgMiksIDIpXG4gKiAvLz0+IFdlZCBBcHIgMDIgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UXVhcnRlcihkYXRlLCBxdWFydGVyLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3Qgb2xkUXVhcnRlciA9IE1hdGgudHJ1bmMoZGF0ZV8uZ2V0TW9udGgoKSAvIDMpICsgMTtcbiAgY29uc3QgZGlmZiA9IHF1YXJ0ZXIgLSBvbGRRdWFydGVyO1xuICByZXR1cm4gc2V0TW9udGgoZGF0ZV8sIGRhdGVfLmdldE1vbnRoKCkgKyBkaWZmICogMyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc2V0UXVhcnRlcjtcbiIsICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHNldFNlY29uZHN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzZXRTZWNvbmRzXG4gKiBAY2F0ZWdvcnkgU2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZSwgd2l0aCBjb250ZXh0IHN1cHBvcnQuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZXQgdGhlIHNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUsIHdpdGggYW4gb3B0aW9uYWwgY29udGV4dCBmb3IgdGltZSB6b25lIHNwZWNpZmljYXRpb24uXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHNlY29uZHMgLSBUaGUgc2Vjb25kcyBvZiB0aGUgbmV3IGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBzZWNvbmRzIHNldFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgNDUgc2Vjb25kcyB0byAxIFNlcHRlbWJlciAyMDE0IDExOjMwOjQwOlxuICogY29uc3QgcmVzdWx0ID0gc2V0U2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA4LCAxLCAxMSwgMzAsIDQwKSwgNDUpXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAxMTozMDo0NVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U2Vjb25kcyhkYXRlLCBzZWNvbmRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgX2RhdGUuc2V0U2Vjb25kcyhzZWNvbmRzKTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHNldFNlY29uZHM7XG4iLCAiaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRPcHRpb25zLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2Vla1llYXIgfSBmcm9tIFwiLi9zdGFydE9mV2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc2V0V2Vla1llYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzZXRXZWVrWWVhclxuICogQGNhdGVnb3J5IFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgU2V0IHRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU2V0IHRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIHRvIHRoZSBnaXZlbiBkYXRlLFxuICogc2F2aW5nIHRoZSB3ZWVrIG51bWJlciBhbmQgdGhlIHdlZWtkYXkgbnVtYmVyLlxuICogVGhlIGV4YWN0IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZlxuICogYG9wdGlvbnMud2Vla1N0YXJ0c09uYCAod2hpY2ggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWspXG4gKiBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAod2hpY2ggaXMgdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW5cbiAqIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyKVxuICpcbiAqIFdlZWsgbnVtYmVyaW5nOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWVrI1RoZV9JU09fd2Vla19kYXRlX3N5c3RlbVxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB3ZWVrWWVhciAtIFRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBuZXcgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgc2V0XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCB0aGUgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAyMDA0IHRvIDIgSmFudWFyeSAyMDEwIHdpdGggZGVmYXVsdCBvcHRpb25zOlxuICogY29uc3QgcmVzdWx0ID0gc2V0V2Vla1llYXIobmV3IERhdGUoMjAxMCwgMCwgMiksIDIwMDQpXG4gKiAvLz0+IFNhdCBKYW4gMDMgMjAwNCAwMDowMDowMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgdGhlIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgMjAwNCB0byAyIEphbnVhcnkgMjAxMCxcbiAqIC8vIGlmIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHdlZWtcbiAqIC8vIGFuZCA0IEphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyOlxuICogY29uc3QgcmVzdWx0ID0gc2V0V2Vla1llYXIobmV3IERhdGUoMjAxMCwgMCwgMiksIDIwMDQsIHtcbiAqICAgd2Vla1N0YXJ0c09uOiAxLFxuICogICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDRcbiAqIH0pXG4gKiAvLz0+IFNhdCBKYW4gMDEgMjAwNSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0V2Vla1llYXIoZGF0ZSwgd2Vla1llYXIsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPVxuICAgIG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICAxO1xuXG4gIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoXG4gICAgdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKSxcbiAgICBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyksXG4gICAgb3B0aW9ucyxcbiAgKTtcblxuICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApO1xuICBmaXJzdFdlZWsuc2V0RnVsbFllYXIod2Vla1llYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vlay5zZXRIb3VycygwLCAwLCAwLCAwKTtcblxuICBjb25zdCBkYXRlXyA9IHN0YXJ0T2ZXZWVrWWVhcihmaXJzdFdlZWssIG9wdGlvbnMpO1xuICBkYXRlXy5zZXREYXRlKGRhdGVfLmdldERhdGUoKSArIGRpZmYpO1xuICByZXR1cm4gZGF0ZV87XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc2V0V2Vla1llYXI7XG4iLCAiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc2V0WWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHNldFllYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgeWVhciB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCB0aGUgeWVhciB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0geWVhciAtIFRoZSB5ZWFyIG9mIHRoZSBuZXcgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSB5ZWFyIHNldFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgeWVhciAyMDEzIHRvIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBzZXRZZWFyKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAyMDEzKVxuICogLy89PiBTdW4gU2VwIDAxIDIwMTMgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFllYXIoZGF0ZSwgeWVhciwgb3B0aW9ucykge1xuICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG5cbiAgLy8gQ2hlY2sgaWYgZGF0ZSBpcyBJbnZhbGlkIERhdGUgYmVjYXVzZSBEYXRlLnByb3RvdHlwZS5zZXRGdWxsWWVhciBpZ25vcmVzIHRoZSB2YWx1ZSBvZiBJbnZhbGlkIERhdGVcbiAgaWYgKGlzTmFOKCtkYXRlXykpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7XG5cbiAgZGF0ZV8uc2V0RnVsbFllYXIoeWVhcik7XG4gIHJldHVybiBkYXRlXztcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzZXRZZWFyO1xuIiwgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZkRlY2FkZX0gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZEZWNhZGVcbiAqIEBjYXRlZ29yeSBEZWNhZGUgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIGRlY2FkZSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgZGVjYWRlIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgZGVjYWRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIGRlY2FkZSBmb3IgMjEgT2N0b2JlciAyMDE1IDAwOjAwOjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZkRlY2FkZShuZXcgRGF0ZSgyMDE1LCA5LCAyMSwgMDAsIDAwLCAwMCkpXG4gKiAvLz0+IEphbiAwMSAyMDEwIDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mRGVjYWRlKGRhdGUsIG9wdGlvbnMpIHtcbiAgLy8gVE9ETzogU3dpdGNoIHRvIG1vcmUgdGVjaG5pY2FsIGRlZmluaXRpb24gaW4gb2YgZGVjYWRlcyB0aGF0IHN0YXJ0IHdpdGggMVxuICAvLyBlbmQgd2l0aCAwLiBJLmUuIDIwMDEtMjAxMCBpbnN0ZWFkIG9mIGN1cnJlbnQgMjAwMC0yMDA5LiBJdCdzIGEgYnJlYWtpbmdcbiAgLy8gY2hhbmdlLCBzbyBpdCBjYW4gb25seSBiZSBkb25lIGluIDQuMC5cbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTtcbiAgY29uc3QgZGVjYWRlID0gTWF0aC5mbG9vcih5ZWFyIC8gMTApICogMTA7XG4gIF9kYXRlLnNldEZ1bGxZZWFyKGRlY2FkZSwgMCwgMSk7XG4gIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZkRlY2FkZTtcbiIsICJpbXBvcnQgeyBzdGFydE9mRGF5IH0gZnJvbSBcIi4vc3RhcnRPZkRheS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZlRvZGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZlRvZGF5XG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgdG9kYXkuXG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiB0b2RheS5cbiAqXG4gKiBAdHlwZVBhcmFtIENvbnRleHREYXRlIC0gVGhlIGBEYXRlYCB0eXBlIG9mIHRoZSBjb250ZXh0IGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiB0b2RheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyA2IE9jdG9iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZUb2RheSgpXG4gKiAvLz0+IE1vbiBPY3QgNiAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mVG9kYXkob3B0aW9ucykge1xuICByZXR1cm4gc3RhcnRPZkRheShEYXRlLm5vdygpLCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mVG9kYXk7XG4iLCAiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IGNvbnN0cnVjdE5vdyB9IGZyb20gXCIuL2NvbnN0cnVjdE5vdy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZlRvbW9ycm93fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZlRvbW9ycm93XG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgdG9tb3Jyb3cuXG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEB0eXBlUGFyYW0gQ29udGV4dERhdGUgLSBUaGUgYERhdGVgIHR5cGUgb2YgdGhlIGNvbnRleHQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIHRvbW9ycm93XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIHRvbW9ycm93LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyA2IE9jdG9iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZUb21vcnJvdygpXG4gKiAvLz0+IFR1ZSBPY3QgNyAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mVG9tb3Jyb3cob3B0aW9ucykge1xuICBjb25zdCBub3cgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pO1xuICBjb25zdCB5ZWFyID0gbm93LmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG1vbnRoID0gbm93LmdldE1vbnRoKCk7XG4gIGNvbnN0IGRheSA9IG5vdy5nZXREYXRlKCk7XG5cbiAgY29uc3QgZGF0ZSA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4sIDApO1xuICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXkgKyAxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZlRvbW9ycm93O1xuIiwgImltcG9ydCB7IGNvbnN0cnVjdE5vdyB9IGZyb20gXCIuL2NvbnN0cnVjdE5vdy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZlllc3RlcmRheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZZZXN0ZXJkYXlcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiB5ZXN0ZXJkYXkuXG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEB0eXBlUGFyYW0gQ29udGV4dERhdGUgLSBUaGUgYERhdGVgIHR5cGUgb2YgdGhlIGNvbnRleHQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIHllc3RlcmRheS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgeWVzdGVyZGF5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDYgT2N0b2JlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZlllc3RlcmRheSgpXG4gKiAvLz0+IFN1biBPY3QgNSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mWWVzdGVyZGF5KG9wdGlvbnMpIHtcbiAgY29uc3Qgbm93ID0gY29uc3RydWN0Tm93KG9wdGlvbnM/LmluKTtcbiAgY29uc3QgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aCA9IG5vdy5nZXRNb250aCgpO1xuICBjb25zdCBkYXkgPSBub3cuZ2V0RGF0ZSgpO1xuXG4gIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pO1xuICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXkgLSAxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZlllc3RlcmRheTtcbiIsICJpbXBvcnQgeyBhZGRNb250aHMgfSBmcm9tIFwiLi9hZGRNb250aHMuanNcIjtcblxuLyoqXG4gKiBUaGUgc3ViTW9udGhzIGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdWJNb250aHNcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtb250aHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1vbnRocyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIG1vbnRocyB0byBiZSBzdWJ0cmFjdGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIG1vbnRocyBzdWJ0cmFjdGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDUgbW9udGhzIGZyb20gMSBGZWJydWFyeSAyMDE1OlxuICogY29uc3QgcmVzdWx0ID0gc3ViTW9udGhzKG5ldyBEYXRlKDIwMTUsIDEsIDEpLCA1KVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Yk1vbnRocyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGFkZE1vbnRocyhkYXRlLCAtYW1vdW50LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdWJNb250aHM7XG4iLCAiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHN1YkRheXMgfSBmcm9tIFwiLi9zdWJEYXlzLmpzXCI7XG5pbXBvcnQgeyBzdWJNb250aHMgfSBmcm9tIFwiLi9zdWJNb250aHMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN1Yn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN1YlxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcyBhbmQgc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMgYW5kIHNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gZHVyYXRpb24gLSBUaGUgb2JqZWN0IHdpdGggeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVzIGFuZCBzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWRcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIHwgS2V5ICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IHllYXJzICAgfCBBbW91bnQgb2YgeWVhcnMgdG8gYmUgc3VidHJhY3RlZCAgIHxcbiAqIHwgbW9udGhzICB8IEFtb3VudCBvZiBtb250aHMgdG8gYmUgc3VidHJhY3RlZCAgfFxuICogfCB3ZWVrcyAgIHwgQW1vdW50IG9mIHdlZWtzIHRvIGJlIHN1YnRyYWN0ZWQgICB8XG4gKiB8IGRheXMgICAgfCBBbW91bnQgb2YgZGF5cyB0byBiZSBzdWJ0cmFjdGVkICAgIHxcbiAqIHwgaG91cnMgICB8IEFtb3VudCBvZiBob3VycyB0byBiZSBzdWJ0cmFjdGVkICAgfFxuICogfCBtaW51dGVzIHwgQW1vdW50IG9mIG1pbnV0ZXMgdG8gYmUgc3VidHJhY3RlZCB8XG4gKiB8IHNlY29uZHMgfCBBbW91bnQgb2Ygc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkIHxcbiAqXG4gKiBBbGwgdmFsdWVzIGRlZmF1bHQgdG8gMFxuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgdGhlIGZvbGxvd2luZyBkdXJhdGlvbiBmcm9tIDE1IEp1bmUgMjAxNyAxNToyOToyMFxuICogY29uc3QgcmVzdWx0ID0gc3ViKG5ldyBEYXRlKDIwMTcsIDUsIDE1LCAxNSwgMjksIDIwKSwge1xuICogICB5ZWFyczogMixcbiAqICAgbW9udGhzOiA5LFxuICogICB3ZWVrczogMSxcbiAqICAgZGF5czogNyxcbiAqICAgaG91cnM6IDUsXG4gKiAgIG1pbnV0ZXM6IDksXG4gKiAgIHNlY29uZHM6IDMwXG4gKiB9KVxuICogLy89PiBNb24gU2VwIDEgMjAxNCAxMDoxOTo1MFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViKGRhdGUsIGR1cmF0aW9uLCBvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICB5ZWFycyA9IDAsXG4gICAgbW9udGhzID0gMCxcbiAgICB3ZWVrcyA9IDAsXG4gICAgZGF5cyA9IDAsXG4gICAgaG91cnMgPSAwLFxuICAgIG1pbnV0ZXMgPSAwLFxuICAgIHNlY29uZHMgPSAwLFxuICB9ID0gZHVyYXRpb247XG5cbiAgY29uc3Qgd2l0aG91dE1vbnRocyA9IHN1Yk1vbnRocyhkYXRlLCBtb250aHMgKyB5ZWFycyAqIDEyLCBvcHRpb25zKTtcbiAgY29uc3Qgd2l0aG91dERheXMgPSBzdWJEYXlzKHdpdGhvdXRNb250aHMsIGRheXMgKyB3ZWVrcyAqIDcsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IG1pbnV0ZXNUb1N1YiA9IG1pbnV0ZXMgKyBob3VycyAqIDYwO1xuICBjb25zdCBzZWNvbmRzVG9TdWIgPSBzZWNvbmRzICsgbWludXRlc1RvU3ViICogNjA7XG4gIGNvbnN0IG1zVG9TdWIgPSBzZWNvbmRzVG9TdWIgKiAxMDAwO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsICt3aXRob3V0RGF5cyAtIG1zVG9TdWIpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN1YjtcbiIsICJpbXBvcnQgeyBhZGRCdXNpbmVzc0RheXMgfSBmcm9tIFwiLi9hZGRCdXNpbmVzc0RheXMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN1YkJ1c2luZXNzRGF5c30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN1YkJ1c2luZXNzRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBidXNpbmVzcyBkYXlzIChtb24gLSBmcmkpIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBidXNpbmVzcyBkYXlzIChtb24gLSBmcmkpIGZyb20gdGhlIGdpdmVuIGRhdGUsIGlnbm9yaW5nIHdlZWtlbmRzLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGJ1c2luZXNzIGRheXMgdG8gYmUgc3VidHJhY3RlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBidXNpbmVzcyBkYXlzIHN1YnRyYWN0ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgMTAgYnVzaW5lc3MgZGF5cyBmcm9tIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJCdXNpbmVzc0RheXMobmV3IERhdGUoMjAxNCwgOCwgMSksIDEwKVxuICogLy89PiBNb24gQXVnIDE4IDIwMTQgMDA6MDA6MDAgKHNraXBwZWQgd2Vla2VuZCBkYXlzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViQnVzaW5lc3NEYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICByZXR1cm4gYWRkQnVzaW5lc3NEYXlzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN1YkJ1c2luZXNzRGF5cztcbiIsICJpbXBvcnQgeyBhZGRIb3VycyB9IGZyb20gXCIuL2FkZEhvdXJzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdWJIb3Vyc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN1YkhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBob3VycyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgaG91cnMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBob3VycyB0byBiZSBzdWJ0cmFjdGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBob3VycyBzdWJ0cmFjdGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDIgaG91cnMgZnJvbSAxMSBKdWx5IDIwMTQgMDE6MDA6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJIb3VycyhuZXcgRGF0ZSgyMDE0LCA2LCAxMSwgMSwgMCksIDIpXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAyMzowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViSG91cnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIHJldHVybiBhZGRIb3VycyhkYXRlLCAtYW1vdW50LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdWJIb3VycztcbiIsICJpbXBvcnQgeyBhZGRNaWxsaXNlY29uZHMgfSBmcm9tIFwiLi9hZGRNaWxsaXNlY29uZHMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN1Yk1pbGxpc2Vjb25kc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgLWFtb3VudCwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3ViTWlsbGlzZWNvbmRzO1xuIiwgImltcG9ydCB7IGFkZE1pbnV0ZXMgfSBmcm9tIFwiLi9hZGRNaW51dGVzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdWJNaW51dGVzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3ViTWludXRlc1xuICogQGNhdGVnb3J5IE1pbnV0ZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaW51dGVzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaW51dGVzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIGFtb3VudCAtIFRoZSBhbW91bnQgb2YgbWludXRlcyB0byBiZSBzdWJ0cmFjdGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbnV0ZXMgc3VidHJhY3RlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCAzMCBtaW51dGVzIGZyb20gMTAgSnVseSAyMDE0IDEyOjAwOjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViTWludXRlcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDApLCAzMClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDExOjMwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJNaW51dGVzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICByZXR1cm4gYWRkTWludXRlcyhkYXRlLCAtYW1vdW50LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdWJNaW51dGVzO1xuIiwgImltcG9ydCB7IGFkZFF1YXJ0ZXJzIH0gZnJvbSBcIi4vYWRkUXVhcnRlcnMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN1YlF1YXJ0ZXJzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3ViUXVhcnRlcnNcbiAqIEBjYXRlZ29yeSBRdWFydGVyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHllYXIgcXVhcnRlcnMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHllYXIgcXVhcnRlcnMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBxdWFydGVycyB0byBiZSBzdWJ0cmFjdGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIHF1YXJ0ZXJzIHN1YnRyYWN0ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgMyBxdWFydGVycyBmcm9tIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJRdWFydGVycyhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgMylcbiAqIC8vPT4gU3VuIERlYyAwMSAyMDEzIDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJRdWFydGVycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGFkZFF1YXJ0ZXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN1YlF1YXJ0ZXJzO1xuIiwgImltcG9ydCB7IGFkZFNlY29uZHMgfSBmcm9tIFwiLi9hZGRTZWNvbmRzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdWJTZWNvbmRzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIHNlY29uZHMgdG8gYmUgc3VidHJhY3RlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDMwIHNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJTZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDApLCAzMClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ0OjMwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJTZWNvbmRzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICByZXR1cm4gYWRkU2Vjb25kcyhkYXRlLCAtYW1vdW50LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdWJTZWNvbmRzO1xuIiwgImltcG9ydCB7IGFkZFdlZWtzIH0gZnJvbSBcIi4vYWRkV2Vla3MuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN1YldlZWtzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3ViV2Vla3NcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHdlZWtzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB3ZWVrcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIHdlZWtzIHRvIGJlIHN1YnRyYWN0ZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgd2Vla3Mgc3VidHJhY3RlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA0IHdlZWtzIGZyb20gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1YldlZWtzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCA0KVxuICogLy89PiBNb24gQXVnIDA0IDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YldlZWtzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICByZXR1cm4gYWRkV2Vla3MoZGF0ZSwgLWFtb3VudCwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3ViV2Vla3M7XG4iLCAiaW1wb3J0IHsgYWRkWWVhcnMgfSBmcm9tIFwiLi9hZGRZZWFycy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3ViWWVhcnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdWJZZWFyc1xuICogQGNhdGVnb3J5IFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgeWVhcnMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHllYXJzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIGFtb3VudCAtIFRoZSBhbW91bnQgb2YgeWVhcnMgdG8gYmUgc3VidHJhY3RlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSB5ZWFycyBzdWJ0cmFjdGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDUgeWVhcnMgZnJvbSAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gc3ViWWVhcnMobmV3IERhdGUoMjAxNCwgOCwgMSksIDUpXG4gKiAvLz0+IFR1ZSBTZXAgMDEgMjAwOSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIHJldHVybiBhZGRZZWFycyhkYXRlLCAtYW1vdW50LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdWJZZWFycztcbiIsICJpbXBvcnQgeyBkYXlzSW5XZWVrIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgd2Vla3NUb0RheXNcbiAqIEBjYXRlZ29yeSBDb252ZXJzaW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgd2Vla3MgdG8gZGF5cy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgYSBudW1iZXIgb2Ygd2Vla3MgdG8gYSBmdWxsIG51bWJlciBvZiBkYXlzLlxuICpcbiAqIEBwYXJhbSB3ZWVrcyAtIFRoZSBudW1iZXIgb2Ygd2Vla3MgdG8gYmUgY29udmVydGVkXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiB3ZWVrcyBjb252ZXJ0ZWQgaW4gZGF5c1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IDIgd2Vla3MgaW50byBkYXlzXG4gKiBjb25zdCByZXN1bHQgPSB3ZWVrc1RvRGF5cygyKVxuICogLy89PiAxNFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2Vla3NUb0RheXMod2Vla3MpIHtcbiAgcmV0dXJuIE1hdGgudHJ1bmMod2Vla3MgKiBkYXlzSW5XZWVrKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCB3ZWVrc1RvRGF5cztcbiIsICJpbXBvcnQgeyBkYXlzSW5ZZWFyIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgeWVhcnNUb0RheXNcbiAqIEBjYXRlZ29yeSBDb252ZXJzaW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgeWVhcnMgdG8gZGF5cy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgYSBudW1iZXIgb2YgeWVhcnMgdG8gYSBmdWxsIG51bWJlciBvZiBkYXlzLlxuICpcbiAqIEBwYXJhbSB5ZWFycyAtIFRoZSBudW1iZXIgb2YgeWVhcnMgdG8gYmUgY29udmVydGVkXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiB5ZWFycyBjb252ZXJ0ZWQgaW4gZGF5c1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IDIgeWVhcnMgaW50byBkYXlzXG4gKiBjb25zdCByZXN1bHQgPSB5ZWFyc1RvRGF5cygyKVxuICogLy89PiA3MzBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHllYXJzVG9EYXlzKHllYXJzKSB7XG4gIHJldHVybiBNYXRoLnRydW5jKHllYXJzICogZGF5c0luWWVhcik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgeWVhcnNUb0RheXM7XG4iLCAiaW1wb3J0IHsgbW9udGhzSW5ZZWFyIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgeWVhcnNUb01vbnRoc1xuICogQGNhdGVnb3J5IENvbnZlcnNpb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB5ZWFycyB0byBtb250aHMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IGEgbnVtYmVyIG9mIHllYXJzIHRvIGEgZnVsbCBudW1iZXIgb2YgbW9udGhzLlxuICpcbiAqIEBwYXJhbSB5ZWFycyAtIFRoZSBudW1iZXIgb2YgeWVhcnMgdG8gYmUgY29udmVydGVkXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiB5ZWFycyBjb252ZXJ0ZWQgaW4gbW9udGhzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgMiB5ZWFycyBpbnRvIG1vbnRoc1xuICogY29uc3QgcmVzdWx0ID0geWVhcnNUb01vbnRocygyKVxuICogLy89PiAyNFxuICovXG5leHBvcnQgZnVuY3Rpb24geWVhcnNUb01vbnRocyh5ZWFycykge1xuICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIG1vbnRoc0luWWVhcik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgeWVhcnNUb01vbnRocztcbiIsICJpbXBvcnQgeyBxdWFydGVyc0luWWVhciB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIHllYXJzVG9RdWFydGVyc1xuICogQGNhdGVnb3J5IENvbnZlcnNpb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB5ZWFycyB0byBxdWFydGVycy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgYSBudW1iZXIgb2YgeWVhcnMgdG8gYSBmdWxsIG51bWJlciBvZiBxdWFydGVycy5cbiAqXG4gKiBAcGFyYW0geWVhcnMgLSBUaGUgbnVtYmVyIG9mIHllYXJzIHRvIGJlIGNvbnZlcnRlZFxuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgeWVhcnMgY29udmVydGVkIGluIHF1YXJ0ZXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgMiB5ZWFycyB0byBxdWFydGVyc1xuICogY29uc3QgcmVzdWx0ID0geWVhcnNUb1F1YXJ0ZXJzKDIpXG4gKiAvLz0+IDhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHllYXJzVG9RdWFydGVycyh5ZWFycykge1xuICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIHF1YXJ0ZXJzSW5ZZWFyKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCB5ZWFyc1RvUXVhcnRlcnM7XG4iLCAiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGBzY3JpcHRzL2J1aWxkL2luZGljZXMudHNgLiBQbGVhc2UsIGRvbid0IGNoYW5nZSBpdC5cblxuZXhwb3J0ICogZnJvbSBcIi4vYWRkLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hZGRCdXNpbmVzc0RheXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FkZERheXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FkZEhvdXJzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hZGRJU09XZWVrWWVhcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FkZE1pbGxpc2Vjb25kcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWRkTWludXRlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWRkTW9udGhzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hZGRRdWFydGVycy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWRkU2Vjb25kcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWRkV2Vla3MuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FkZFllYXJzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hcmVJbnRlcnZhbHNPdmVybGFwcGluZy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xhbXAuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Nsb3Nlc3RJbmRleFRvLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jbG9zZXN0VG8uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBhcmVBc2MuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBhcmVEZXNjLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdHJ1Y3ROb3cuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RheXNUb1dlZWtzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaWZmZXJlbmNlSW5EYXlzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaWZmZXJlbmNlSW5Ib3Vycy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RpZmZlcmVuY2VJbk1pbnV0ZXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RpZmZlcmVuY2VJbk1vbnRocy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGlmZmVyZW5jZUluUXVhcnRlcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RpZmZlcmVuY2VJblNlY29uZHMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RpZmZlcmVuY2VJbldlZWtzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaWZmZXJlbmNlSW5ZZWFycy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZWFjaERheU9mSW50ZXJ2YWwuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VhY2hIb3VyT2ZJbnRlcnZhbC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZWFjaE1pbnV0ZU9mSW50ZXJ2YWwuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VhY2hNb250aE9mSW50ZXJ2YWwuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VhY2hRdWFydGVyT2ZJbnRlcnZhbC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZWFjaFdlZWtPZkludGVydmFsLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VhY2hXZWVrZW5kT2ZNb250aC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZWFjaFdlZWtlbmRPZlllYXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VhY2hZZWFyT2ZJbnRlcnZhbC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW5kT2ZEYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VuZE9mRGVjYWRlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbmRPZkhvdXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VuZE9mSVNPV2Vlay5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW5kT2ZJU09XZWVrWWVhci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW5kT2ZNaW51dGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VuZE9mTW9udGguanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VuZE9mUXVhcnRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW5kT2ZTZWNvbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VuZE9mVG9kYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VuZE9mVG9tb3Jyb3cuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VuZE9mV2Vlay5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW5kT2ZZZWFyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbmRPZlllc3RlcmRheS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZm9ybWF0LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mb3JtYXREaXN0YW5jZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZm9ybWF0RGlzdGFuY2VTdHJpY3QuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Zvcm1hdERpc3RhbmNlVG9Ob3cuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Zvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3QuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Zvcm1hdER1cmF0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mb3JtYXRJU08uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Zvcm1hdElTTzkwNzUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Zvcm1hdElTT0R1cmF0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mb3JtYXRSRkMzMzM5LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mb3JtYXRSRkM3MjMxLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mb3JtYXRSZWxhdGl2ZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZnJvbVVuaXhUaW1lLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nZXREYXRlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nZXREYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dldERheU9mWWVhci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2V0RGF5c0luTW9udGguanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dldERheXNJblllYXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dldERlY2FkZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2V0RGVmYXVsdE9wdGlvbnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dldEhvdXJzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nZXRJU09EYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dldElTT1dlZWsuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dldElTT1dlZWtZZWFyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nZXRJU09XZWVrc0luWWVhci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2V0TWlsbGlzZWNvbmRzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nZXRNaW51dGVzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nZXRNb250aC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dldFF1YXJ0ZXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dldFNlY29uZHMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dldFRpbWUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dldFVuaXhUaW1lLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nZXRXZWVrLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nZXRXZWVrT2ZNb250aC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2V0V2Vla1llYXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dldFdlZWtzSW5Nb250aC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2V0WWVhci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaG91cnNUb01pbGxpc2Vjb25kcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaG91cnNUb01pbnV0ZXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2hvdXJzVG9TZWNvbmRzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50ZXJ2YWxUb0R1cmF0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRsRm9ybWF0LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRsRm9ybWF0RGlzdGFuY2UuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzQWZ0ZXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzQmVmb3JlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc0RhdGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzRXF1YWwuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzRXhpc3RzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc0ZpcnN0RGF5T2ZNb250aC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXNGcmlkYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzRnV0dXJlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc0xhc3REYXlPZk1vbnRoLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc0xlYXBZZWFyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc01hdGNoLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc01vbmRheS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXNQYXN0LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc1NhbWVEYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzU2FtZUhvdXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzU2FtZUlTT1dlZWsuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzU2FtZUlTT1dlZWtZZWFyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc1NhbWVNaW51dGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzU2FtZU1vbnRoLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc1NhbWVRdWFydGVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc1NhbWVTZWNvbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzU2FtZVdlZWsuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzU2FtZVllYXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzU2F0dXJkYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzU3VuZGF5LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc1RoaXNIb3VyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc1RoaXNJU09XZWVrLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc1RoaXNNaW51dGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzVGhpc01vbnRoLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc1RoaXNRdWFydGVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc1RoaXNTZWNvbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzVGhpc1dlZWsuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzVGhpc1llYXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzVGh1cnNkYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzVG9kYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzVG9tb3Jyb3cuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzVHVlc2RheS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXNWYWxpZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXNXZWRuZXNkYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzV2Vla2VuZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXNXaXRoaW5JbnRlcnZhbC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXNZZXN0ZXJkYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xhc3REYXlPZkRlY2FkZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGFzdERheU9mSVNPV2Vlay5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGFzdERheU9mSVNPV2Vla1llYXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xhc3REYXlPZk1vbnRoLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sYXN0RGF5T2ZRdWFydGVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sYXN0RGF5T2ZXZWVrLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sYXN0RGF5T2ZZZWFyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWdodEZvcm1hdC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWF4LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9taWxsaXNlY29uZHMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pbGxpc2Vjb25kc1RvSG91cnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pbGxpc2Vjb25kc1RvTWludXRlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlsbGlzZWNvbmRzVG9TZWNvbmRzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9taW4uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pbnV0ZXNUb0hvdXJzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9taW51dGVzVG9NaWxsaXNlY29uZHMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pbnV0ZXNUb1NlY29uZHMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vbnRoc1RvUXVhcnRlcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vbnRoc1RvWWVhcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25leHREYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25leHRGcmlkYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25leHRNb25kYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25leHRTYXR1cmRheS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmV4dFN1bmRheS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmV4dFRodXJzZGF5LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9uZXh0VHVlc2RheS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmV4dFdlZG5lc2RheS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGFyc2UuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BhcnNlSVNPLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wYXJzZUpTT04uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ByZXZpb3VzRGF5LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcmV2aW91c0ZyaWRheS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJldmlvdXNNb25kYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ByZXZpb3VzU2F0dXJkYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ByZXZpb3VzU3VuZGF5LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcmV2aW91c1RodXJzZGF5LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcmV2aW91c1R1ZXNkYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ByZXZpb3VzV2VkbmVzZGF5LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9xdWFydGVyc1RvTW9udGhzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9xdWFydGVyc1RvWWVhcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JvdW5kVG9OZWFyZXN0SG91cnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JvdW5kVG9OZWFyZXN0TWludXRlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2Vjb25kc1RvSG91cnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlY29uZHNUb01pbGxpc2Vjb25kcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2Vjb25kc1RvTWludXRlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2V0LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXREYXRlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXREYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NldERheU9mWWVhci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2V0RGVmYXVsdE9wdGlvbnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NldEhvdXJzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXRJU09EYXkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NldElTT1dlZWsuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NldElTT1dlZWtZZWFyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXRNaWxsaXNlY29uZHMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NldE1pbnV0ZXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NldE1vbnRoLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXRRdWFydGVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXRTZWNvbmRzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXRXZWVrLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXRXZWVrWWVhci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2V0WWVhci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhcnRPZkRheS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhcnRPZkRlY2FkZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhcnRPZkhvdXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGFydE9mSVNPV2Vla1llYXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXJ0T2ZNaW51dGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXJ0T2ZNb250aC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhcnRPZlF1YXJ0ZXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXJ0T2ZTZWNvbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXJ0T2ZUb2RheS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhcnRPZlRvbW9ycm93LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGFydE9mV2Vlay5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhcnRPZldlZWtZZWFyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGFydE9mWWVhci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhcnRPZlllc3RlcmRheS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3ViLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdWJCdXNpbmVzc0RheXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N1YkRheXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N1YkhvdXJzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdWJJU09XZWVrWWVhcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N1Yk1pbGxpc2Vjb25kcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3ViTWludXRlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3ViTW9udGhzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdWJRdWFydGVycy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3ViU2Vjb25kcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3ViV2Vla3MuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N1YlllYXJzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90b0RhdGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RyYW5zcG9zZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vd2Vla3NUb0RheXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3llYXJzVG9EYXlzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi95ZWFyc1RvTW9udGhzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi95ZWFyc1RvUXVhcnRlcnMuanNcIjtcbiIsICIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD0xZTMsZT02ZTQsbj0zNmU1LHI9XCJtaWxsaXNlY29uZFwiLGk9XCJzZWNvbmRcIixzPVwibWludXRlXCIsdT1cImhvdXJcIixhPVwiZGF5XCIsbz1cIndlZWtcIixjPVwibW9udGhcIixmPVwicXVhcnRlclwiLGg9XCJ5ZWFyXCIsZD1cImRhdGVcIixsPVwiSW52YWxpZCBEYXRlXCIsJD0vXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvLHk9L1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLE09e25hbWU6XCJlblwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLG49dCUxMDA7cmV0dXJuXCJbXCIrdCsoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdKStcIl1cIn19LG09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVN0cmluZyh0KTtyZXR1cm4hcnx8ci5sZW5ndGg+PWU/dDpcIlwiK0FycmF5KGUrMS1yLmxlbmd0aCkuam9pbihuKSt0fSx2PXtzOm0sejpmdW5jdGlvbih0KXt2YXIgZT0tdC51dGNPZmZzZXQoKSxuPU1hdGguYWJzKGUpLHI9TWF0aC5mbG9vcihuLzYwKSxpPW4lNjA7cmV0dXJuKGU8PTA/XCIrXCI6XCItXCIpK20ociwyLFwiMFwiKStcIjpcIittKGksMixcIjBcIil9LG06ZnVuY3Rpb24gdChlLG4pe2lmKGUuZGF0ZSgpPG4uZGF0ZSgpKXJldHVybi10KG4sZSk7dmFyIHI9MTIqKG4ueWVhcigpLWUueWVhcigpKSsobi5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKHIsYykscz1uLWk8MCx1PWUuY2xvbmUoKS5hZGQocisocz8tMToxKSxjKTtyZXR1cm4rKC0ocisobi1pKS8ocz9pLXU6dS1pKSl8fDApfSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9LHA6ZnVuY3Rpb24odCl7cmV0dXJue006Yyx5OmgsdzpvLGQ6YSxEOmQsaDp1LG06cyxzOmksbXM6cixROmZ9W3RdfHxTdHJpbmcodHx8XCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sXCJcIil9LHU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSxnPVwiZW5cIixEPXt9O0RbZ109TTt2YXIgcD1cIiRpc0RheWpzT2JqZWN0XCIsUz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF98fCEoIXR8fCF0W3BdKX0sdz1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaTtpZighZSlyZXR1cm4gZztpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHM9ZS50b0xvd2VyQ2FzZSgpO0Rbc10mJihpPXMpLG4mJihEW3NdPW4saT1zKTt2YXIgdT1lLnNwbGl0KFwiLVwiKTtpZighaSYmdS5sZW5ndGg+MSlyZXR1cm4gdCh1WzBdKX1lbHNle3ZhciBhPWUubmFtZTtEW2FdPWUsaT1hfXJldHVybiFyJiZpJiYoZz1pKSxpfHwhciYmZ30sTz1mdW5jdGlvbih0LGUpe2lmKFModCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZT9lOnt9O3JldHVybiBuLmRhdGU9dCxuLmFyZ3M9YXJndW1lbnRzLG5ldyBfKG4pfSxiPXY7Yi5sPXcsYi5pPVMsYi53PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCx7bG9jYWxlOmUuJEwsdXRjOmUuJHUseDplLiR4LCRvZmZzZXQ6ZS4kb2Zmc2V0fSl9O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTSh0KXt0aGlzLiRMPXcodC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZSh0KSx0aGlzLiR4PXRoaXMuJHh8fHQueHx8e30sdGhpc1twXT0hMH12YXIgbT1NLnByb3RvdHlwZTtyZXR1cm4gbS5wYXJzZT1mdW5jdGlvbih0KXt0aGlzLiRkPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0ZSxuPXQudXRjO2lmKG51bGw9PT1lKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKGIudShlKSlyZXR1cm4gbmV3IERhdGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhL1okL2kudGVzdChlKSl7dmFyIHI9ZS5tYXRjaCgkKTtpZihyKXt2YXIgaT1yWzJdLTF8fDAscz0ocls3XXx8XCIwXCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBuP25ldyBEYXRlKERhdGUuVVRDKHJbMV0saSxyWzNdfHwxLHJbNF18fDAscls1XXx8MCxyWzZdfHwwLHMpKTpuZXcgRGF0ZShyWzFdLGksclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxzKX19cmV0dXJuIG5ldyBEYXRlKGUpfSh0KSx0aGlzLmluaXQoKX0sbS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZDt0aGlzLiR5PXQuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPXQuZ2V0TW9udGgoKSx0aGlzLiREPXQuZ2V0RGF0ZSgpLHRoaXMuJFc9dC5nZXREYXkoKSx0aGlzLiRIPXQuZ2V0SG91cnMoKSx0aGlzLiRtPXQuZ2V0TWludXRlcygpLHRoaXMuJHM9dC5nZXRTZWNvbmRzKCksdGhpcy4kbXM9dC5nZXRNaWxsaXNlY29uZHMoKX0sbS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sbS5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLiRkLnRvU3RyaW5nKCk9PT1sKX0sbS5pc1NhbWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1PKHQpO3JldHVybiB0aGlzLnN0YXJ0T2YoZSk8PW4mJm48PXRoaXMuZW5kT2YoZSl9LG0uaXNBZnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQpPHRoaXMuc3RhcnRPZihlKX0sbS5pc0JlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVuZE9mKGUpPE8odCl9LG0uJGc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBiLnUodCk/dGhpc1tlXTp0aGlzLnNldChuLHQpfSxtLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxtLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LG0uc3RhcnRPZj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj0hIWIudShlKXx8ZSxmPWIucCh0KSxsPWZ1bmN0aW9uKHQsZSl7dmFyIGk9Yi53KG4uJHU/RGF0ZS5VVEMobi4keSxlLHQpOm5ldyBEYXRlKG4uJHksZSx0KSxuKTtyZXR1cm4gcj9pOmkuZW5kT2YoYSl9LCQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYi53KG4udG9EYXRlKClbdF0uYXBwbHkobi50b0RhdGUoXCJzXCIpLChyP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoZSkpLG4pfSx5PXRoaXMuJFcsTT10aGlzLiRNLG09dGhpcy4kRCx2PVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKTtzd2l0Y2goZil7Y2FzZSBoOnJldHVybiByP2woMSwwKTpsKDMxLDExKTtjYXNlIGM6cmV0dXJuIHI/bCgxLE0pOmwoMCxNKzEpO2Nhc2Ugbzp2YXIgZz10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsRD0oeTxnP3krNzp5KS1nO3JldHVybiBsKHI/bS1EOm0rKDYtRCksTSk7Y2FzZSBhOmNhc2UgZDpyZXR1cm4gJCh2K1wiSG91cnNcIiwwKTtjYXNlIHU6cmV0dXJuICQoditcIk1pbnV0ZXNcIiwxKTtjYXNlIHM6cmV0dXJuICQoditcIlNlY29uZHNcIiwyKTtjYXNlIGk6cmV0dXJuICQoditcIk1pbGxpc2Vjb25kc1wiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LG0uZW5kT2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhcnRPZih0LCExKX0sbS4kc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1iLnAodCksZj1cInNldFwiKyh0aGlzLiR1P1wiVVRDXCI6XCJcIiksbD0obj17fSxuW2FdPWYrXCJEYXRlXCIsbltkXT1mK1wiRGF0ZVwiLG5bY109ZitcIk1vbnRoXCIsbltoXT1mK1wiRnVsbFllYXJcIixuW3VdPWYrXCJIb3Vyc1wiLG5bc109ZitcIk1pbnV0ZXNcIixuW2ldPWYrXCJTZWNvbmRzXCIsbltyXT1mK1wiTWlsbGlzZWNvbmRzXCIsbilbb10sJD1vPT09YT90aGlzLiREKyhlLXRoaXMuJFcpOmU7aWYobz09PWN8fG89PT1oKXt2YXIgeT10aGlzLmNsb25lKCkuc2V0KGQsMSk7eS4kZFtsXSgkKSx5LmluaXQoKSx0aGlzLiRkPXkuc2V0KGQsTWF0aC5taW4odGhpcy4kRCx5LmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIGwmJnRoaXMuJGRbbF0oJCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LG0uc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KHQsZSl9LG0uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2IucCh0KV0oKX0sbS5hZGQ9ZnVuY3Rpb24ocixmKXt2YXIgZCxsPXRoaXM7cj1OdW1iZXIocik7dmFyICQ9Yi5wKGYpLHk9ZnVuY3Rpb24odCl7dmFyIGU9TyhsKTtyZXR1cm4gYi53KGUuZGF0ZShlLmRhdGUoKStNYXRoLnJvdW5kKHQqcikpLGwpfTtpZigkPT09YylyZXR1cm4gdGhpcy5zZXQoYyx0aGlzLiRNK3IpO2lmKCQ9PT1oKXJldHVybiB0aGlzLnNldChoLHRoaXMuJHkrcik7aWYoJD09PWEpcmV0dXJuIHkoMSk7aWYoJD09PW8pcmV0dXJuIHkoNyk7dmFyIE09KGQ9e30sZFtzXT1lLGRbdV09bixkW2ldPXQsZClbJF18fDEsbT10aGlzLiRkLmdldFRpbWUoKStyKk07cmV0dXJuIGIudyhtLHRoaXMpfSxtLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkKC0xKnQsZSl9LG0uZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uaW52YWxpZERhdGV8fGw7dmFyIHI9dHx8XCJZWVlZLU1NLUREVEhIOm1tOnNzWlwiLGk9Yi56KHRoaXMpLHM9dGhpcy4kSCx1PXRoaXMuJG0sYT10aGlzLiRNLG89bi53ZWVrZGF5cyxjPW4ubW9udGhzLGY9bi5tZXJpZGllbSxoPWZ1bmN0aW9uKHQsbixpLHMpe3JldHVybiB0JiYodFtuXXx8dChlLHIpKXx8aVtuXS5zbGljZSgwLHMpfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBiLnMocyUxMnx8MTIsdCxcIjBcIil9LCQ9Znx8ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQ8MTI/XCJBTVwiOlwiUE1cIjtyZXR1cm4gbj9yLnRvTG93ZXJDYXNlKCk6cn07cmV0dXJuIHIucmVwbGFjZSh5LChmdW5jdGlvbih0LHIpe3JldHVybiByfHxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiWVlcIjpyZXR1cm4gU3RyaW5nKGUuJHkpLnNsaWNlKC0yKTtjYXNlXCJZWVlZXCI6cmV0dXJuIGIucyhlLiR5LDQsXCIwXCIpO2Nhc2VcIk1cIjpyZXR1cm4gYSsxO2Nhc2VcIk1NXCI6cmV0dXJuIGIucyhhKzEsMixcIjBcIik7Y2FzZVwiTU1NXCI6cmV0dXJuIGgobi5tb250aHNTaG9ydCxhLGMsMyk7Y2FzZVwiTU1NTVwiOnJldHVybiBoKGMsYSk7Y2FzZVwiRFwiOnJldHVybiBlLiREO2Nhc2VcIkREXCI6cmV0dXJuIGIucyhlLiRELDIsXCIwXCIpO2Nhc2VcImRcIjpyZXR1cm4gU3RyaW5nKGUuJFcpO2Nhc2VcImRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c01pbixlLiRXLG8sMik7Y2FzZVwiZGRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c1Nob3J0LGUuJFcsbywzKTtjYXNlXCJkZGRkXCI6cmV0dXJuIG9bZS4kV107Y2FzZVwiSFwiOnJldHVybiBTdHJpbmcocyk7Y2FzZVwiSEhcIjpyZXR1cm4gYi5zKHMsMixcIjBcIik7Y2FzZVwiaFwiOnJldHVybiBkKDEpO2Nhc2VcImhoXCI6cmV0dXJuIGQoMik7Y2FzZVwiYVwiOnJldHVybiAkKHMsdSwhMCk7Y2FzZVwiQVwiOnJldHVybiAkKHMsdSwhMSk7Y2FzZVwibVwiOnJldHVybiBTdHJpbmcodSk7Y2FzZVwibW1cIjpyZXR1cm4gYi5zKHUsMixcIjBcIik7Y2FzZVwic1wiOnJldHVybiBTdHJpbmcoZS4kcyk7Y2FzZVwic3NcIjpyZXR1cm4gYi5zKGUuJHMsMixcIjBcIik7Y2FzZVwiU1NTXCI6cmV0dXJuIGIucyhlLiRtcywzLFwiMFwiKTtjYXNlXCJaXCI6cmV0dXJuIGl9cmV0dXJuIG51bGx9KHQpfHxpLnJlcGxhY2UoXCI6XCIsXCJcIil9KSl9LG0udXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LG0uZGlmZj1mdW5jdGlvbihyLGQsbCl7dmFyICQseT10aGlzLE09Yi5wKGQpLG09TyhyKSx2PShtLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsZz10aGlzLW0sRD1mdW5jdGlvbigpe3JldHVybiBiLm0oeSxtKX07c3dpdGNoKE0pe2Nhc2UgaDokPUQoKS8xMjticmVhaztjYXNlIGM6JD1EKCk7YnJlYWs7Y2FzZSBmOiQ9RCgpLzM7YnJlYWs7Y2FzZSBvOiQ9KGctdikvNjA0OGU1O2JyZWFrO2Nhc2UgYTokPShnLXYpLzg2NGU1O2JyZWFrO2Nhc2UgdTokPWcvbjticmVhaztjYXNlIHM6JD1nL2U7YnJlYWs7Y2FzZSBpOiQ9Zy90O2JyZWFrO2RlZmF1bHQ6JD1nfXJldHVybiBsPyQ6Yi5hKCQpfSxtLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoYykuJER9LG0uJGxvY2FsZT1mdW5jdGlvbigpe3JldHVybiBEW3RoaXMuJExdfSxtLmxvY2FsZT1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0aGlzLiRMO3ZhciBuPXRoaXMuY2xvbmUoKSxyPXcodCxlLCEwKTtyZXR1cm4gciYmKG4uJEw9ciksbn0sbS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBiLncodGhpcy4kZCx0aGlzKX0sbS50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxtLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sbS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvSVNPU3RyaW5nKCl9LG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxNfSgpLGs9Xy5wcm90b3R5cGU7cmV0dXJuIE8ucHJvdG90eXBlPWssW1tcIiRtc1wiLHJdLFtcIiRzXCIsaV0sW1wiJG1cIixzXSxbXCIkSFwiLHVdLFtcIiRXXCIsYV0sW1wiJE1cIixjXSxbXCIkeVwiLGhdLFtcIiREXCIsZF1dLmZvckVhY2goKGZ1bmN0aW9uKHQpe2tbdFsxXV09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJGcoZSx0WzBdLHRbMV0pfX0pKSxPLmV4dGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0LiRpfHwodChlLF8sTyksdC4kaT0hMCksT30sTy5sb2NhbGU9dyxPLmlzRGF5anM9UyxPLnVuaXg9ZnVuY3Rpb24odCl7cmV0dXJuIE8oMWUzKnQpfSxPLmVuPURbZ10sTy5Mcz1ELE8ucD17fSxPfSkpOyIsICIhZnVuY3Rpb24oZSxvKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1vKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShvKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX3BsdWdpbl9pc1RvZGF5PW8oKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gZnVuY3Rpb24oZSxvLHQpe28ucHJvdG90eXBlLmlzVG9kYXk9ZnVuY3Rpb24oKXt2YXIgZT1cIllZWVktTU0tRERcIixvPXQoKTtyZXR1cm4gdGhpcy5mb3JtYXQoZSk9PT1vLmZvcm1hdChlKX19fSkpOyIsICJjb25zdCB0b1plcm9JZkluZmluaXR5ID0gdmFsdWUgPT4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogMDtcblxuZnVuY3Rpb24gcGFyc2VOdW1iZXIobWlsbGlzZWNvbmRzKSB7XG5cdHJldHVybiB7XG5cdFx0ZGF5czogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyA4Nl80MDBfMDAwKSxcblx0XHRob3VyczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyAzXzYwMF8wMDAgJSAyNCksXG5cdFx0bWludXRlczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyA2MF8wMDAgJSA2MCksXG5cdFx0c2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyAxMDAwICUgNjApLFxuXHRcdG1pbGxpc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgJSAxMDAwKSxcblx0XHRtaWNyb3NlY29uZHM6IE1hdGgudHJ1bmModG9aZXJvSWZJbmZpbml0eShtaWxsaXNlY29uZHMgKiAxMDAwKSAlIDEwMDApLFxuXHRcdG5hbm9zZWNvbmRzOiBNYXRoLnRydW5jKHRvWmVyb0lmSW5maW5pdHkobWlsbGlzZWNvbmRzICogMWU2KSAlIDEwMDApLFxuXHR9O1xufVxuXG5mdW5jdGlvbiBwYXJzZUJpZ2ludChtaWxsaXNlY29uZHMpIHtcblx0cmV0dXJuIHtcblx0XHRkYXlzOiBtaWxsaXNlY29uZHMgLyA4Nl80MDBfMDAwbixcblx0XHRob3VyczogbWlsbGlzZWNvbmRzIC8gM182MDBfMDAwbiAlIDI0bixcblx0XHRtaW51dGVzOiBtaWxsaXNlY29uZHMgLyA2MF8wMDBuICUgNjBuLFxuXHRcdHNlY29uZHM6IG1pbGxpc2Vjb25kcyAvIDEwMDBuICUgNjBuLFxuXHRcdG1pbGxpc2Vjb25kczogbWlsbGlzZWNvbmRzICUgMTAwMG4sXG5cdFx0bWljcm9zZWNvbmRzOiAwbixcblx0XHRuYW5vc2Vjb25kczogMG4sXG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlTWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kcykge1xuXHRzd2l0Y2ggKHR5cGVvZiBtaWxsaXNlY29uZHMpIHtcblx0XHRjYXNlICdudW1iZXInOiB7XG5cdFx0XHRpZiAoTnVtYmVyLmlzRmluaXRlKG1pbGxpc2Vjb25kcykpIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlTnVtYmVyKG1pbGxpc2Vjb25kcyk7XG5cdFx0XHR9XG5cblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGNhc2UgJ2JpZ2ludCc6IHtcblx0XHRcdHJldHVybiBwYXJzZUJpZ2ludChtaWxsaXNlY29uZHMpO1xuXHRcdH1cblxuXHRcdC8vIE5vIGRlZmF1bHRcblx0fVxuXG5cdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgZmluaXRlIG51bWJlciBvciBiaWdpbnQnKTtcbn1cbiIsICJpbXBvcnQgcGFyc2VNaWxsaXNlY29uZHMgZnJvbSAncGFyc2UtbXMnO1xuXG5jb25zdCBpc1plcm8gPSB2YWx1ZSA9PiB2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gMG47XG5jb25zdCBwbHVyYWxpemUgPSAod29yZCwgY291bnQpID0+IChjb3VudCA9PT0gMSB8fCBjb3VudCA9PT0gMW4pID8gd29yZCA6IGAke3dvcmR9c2A7XG5cbmNvbnN0IFNFQ09ORF9ST1VORElOR19FUFNJTE9OID0gMC4wMDBfMDAwXzE7XG5jb25zdCBPTkVfREFZX0lOX01JTExJU0VDT05EUyA9IDI0biAqIDYwbiAqIDYwbiAqIDEwMDBuO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcmV0dHlNaWxsaXNlY29uZHMobWlsbGlzZWNvbmRzLCBvcHRpb25zKSB7XG5cdGNvbnN0IGlzQmlnSW50ID0gdHlwZW9mIG1pbGxpc2Vjb25kcyA9PT0gJ2JpZ2ludCc7XG5cdGlmICghaXNCaWdJbnQgJiYgIU51bWJlci5pc0Zpbml0ZShtaWxsaXNlY29uZHMpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBmaW5pdGUgbnVtYmVyIG9yIGJpZ2ludCcpO1xuXHR9XG5cblx0b3B0aW9ucyA9IHsuLi5vcHRpb25zfTtcblxuXHRjb25zdCBzaWduID0gbWlsbGlzZWNvbmRzIDwgMCA/ICctJyA6ICcnO1xuXHRtaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgPCAwID8gLW1pbGxpc2Vjb25kcyA6IG1pbGxpc2Vjb25kczsgLy8gQ2Fubm90IHVzZSBgTWF0aC5hYnMoKWAgYmVjYXVzZSBvZiBCaWdJbnQgc3VwcG9ydC5cblxuXHRpZiAob3B0aW9ucy5jb2xvbk5vdGF0aW9uKSB7XG5cdFx0b3B0aW9ucy5jb21wYWN0ID0gZmFsc2U7XG5cdFx0b3B0aW9ucy5mb3JtYXRTdWJNaWxsaXNlY29uZHMgPSBmYWxzZTtcblx0XHRvcHRpb25zLnNlcGFyYXRlTWlsbGlzZWNvbmRzID0gZmFsc2U7XG5cdFx0b3B0aW9ucy52ZXJib3NlID0gZmFsc2U7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5jb21wYWN0KSB7XG5cdFx0b3B0aW9ucy51bml0Q291bnQgPSAxO1xuXHRcdG9wdGlvbnMuc2Vjb25kc0RlY2ltYWxEaWdpdHMgPSAwO1xuXHRcdG9wdGlvbnMubWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA9IDA7XG5cdH1cblxuXHRsZXQgcmVzdWx0ID0gW107XG5cblx0Y29uc3QgZmxvb3JEZWNpbWFscyA9ICh2YWx1ZSwgZGVjaW1hbERpZ2l0cykgPT4ge1xuXHRcdGNvbnN0IGZsb29yZWRJbnRlcmltVmFsdWUgPSBNYXRoLmZsb29yKCh2YWx1ZSAqICgxMCAqKiBkZWNpbWFsRGlnaXRzKSkgKyBTRUNPTkRfUk9VTkRJTkdfRVBTSUxPTik7XG5cdFx0Y29uc3QgZmxvb3JlZFZhbHVlID0gTWF0aC5yb3VuZChmbG9vcmVkSW50ZXJpbVZhbHVlKSAvICgxMCAqKiBkZWNpbWFsRGlnaXRzKTtcblx0XHRyZXR1cm4gZmxvb3JlZFZhbHVlLnRvRml4ZWQoZGVjaW1hbERpZ2l0cyk7XG5cdH07XG5cblx0Y29uc3QgYWRkID0gKHZhbHVlLCBsb25nLCBzaG9ydCwgdmFsdWVTdHJpbmcpID0+IHtcblx0XHRpZiAoXG5cdFx0XHQocmVzdWx0Lmxlbmd0aCA9PT0gMCB8fCAhb3B0aW9ucy5jb2xvbk5vdGF0aW9uKVxuXHRcdFx0JiYgaXNaZXJvKHZhbHVlKVxuXHRcdFx0JiYgIShvcHRpb25zLmNvbG9uTm90YXRpb24gJiYgc2hvcnQgPT09ICdtJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YWx1ZVN0cmluZyA/Pz0gU3RyaW5nKHZhbHVlKTtcblx0XHRpZiAob3B0aW9ucy5jb2xvbk5vdGF0aW9uKSB7XG5cdFx0XHRjb25zdCB3aG9sZURpZ2l0cyA9IHZhbHVlU3RyaW5nLmluY2x1ZGVzKCcuJykgPyB2YWx1ZVN0cmluZy5zcGxpdCgnLicpWzBdLmxlbmd0aCA6IHZhbHVlU3RyaW5nLmxlbmd0aDtcblx0XHRcdGNvbnN0IG1pbkxlbmd0aCA9IHJlc3VsdC5sZW5ndGggPiAwID8gMiA6IDE7XG5cdFx0XHR2YWx1ZVN0cmluZyA9ICcwJy5yZXBlYXQoTWF0aC5tYXgoMCwgbWluTGVuZ3RoIC0gd2hvbGVEaWdpdHMpKSArIHZhbHVlU3RyaW5nO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZVN0cmluZyArPSBvcHRpb25zLnZlcmJvc2UgPyAnICcgKyBwbHVyYWxpemUobG9uZywgdmFsdWUpIDogc2hvcnQ7XG5cdFx0fVxuXG5cdFx0cmVzdWx0LnB1c2godmFsdWVTdHJpbmcpO1xuXHR9O1xuXG5cdGNvbnN0IHBhcnNlZCA9IHBhcnNlTWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kcyk7XG5cdGNvbnN0IGRheXMgPSBCaWdJbnQocGFyc2VkLmRheXMpO1xuXG5cdGlmIChvcHRpb25zLmhpZGVZZWFyQW5kRGF5cykge1xuXHRcdGFkZCgoQmlnSW50KGRheXMpICogMjRuKSArIEJpZ0ludChwYXJzZWQuaG91cnMpLCAnaG91cicsICdoJyk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKG9wdGlvbnMuaGlkZVllYXIpIHtcblx0XHRcdGFkZChkYXlzLCAnZGF5JywgJ2QnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWRkKGRheXMgLyAzNjVuLCAneWVhcicsICd5Jyk7XG5cdFx0XHRhZGQoZGF5cyAlIDM2NW4sICdkYXknLCAnZCcpO1xuXHRcdH1cblxuXHRcdGFkZChOdW1iZXIocGFyc2VkLmhvdXJzKSwgJ2hvdXInLCAnaCcpO1xuXHR9XG5cblx0YWRkKE51bWJlcihwYXJzZWQubWludXRlcyksICdtaW51dGUnLCAnbScpO1xuXG5cdGlmICghb3B0aW9ucy5oaWRlU2Vjb25kcykge1xuXHRcdGlmIChcblx0XHRcdG9wdGlvbnMuc2VwYXJhdGVNaWxsaXNlY29uZHNcblx0XHRcdHx8IG9wdGlvbnMuZm9ybWF0U3ViTWlsbGlzZWNvbmRzXG5cdFx0XHR8fCAoIW9wdGlvbnMuY29sb25Ob3RhdGlvbiAmJiBtaWxsaXNlY29uZHMgPCAxMDAwICYmICFvcHRpb25zLnN1YlNlY29uZHNBc0RlY2ltYWxzKVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc2Vjb25kcyA9IE51bWJlcihwYXJzZWQuc2Vjb25kcyk7XG5cdFx0XHRjb25zdCBtaWxsaXNlY29uZHMgPSBOdW1iZXIocGFyc2VkLm1pbGxpc2Vjb25kcyk7XG5cdFx0XHRjb25zdCBtaWNyb3NlY29uZHMgPSBOdW1iZXIocGFyc2VkLm1pY3Jvc2Vjb25kcyk7XG5cdFx0XHRjb25zdCBuYW5vc2Vjb25kcyA9IE51bWJlcihwYXJzZWQubmFub3NlY29uZHMpO1xuXG5cdFx0XHRhZGQoc2Vjb25kcywgJ3NlY29uZCcsICdzJyk7XG5cblx0XHRcdGlmIChvcHRpb25zLmZvcm1hdFN1Yk1pbGxpc2Vjb25kcykge1xuXHRcdFx0XHRhZGQobWlsbGlzZWNvbmRzLCAnbWlsbGlzZWNvbmQnLCAnbXMnKTtcblx0XHRcdFx0YWRkKG1pY3Jvc2Vjb25kcywgJ21pY3Jvc2Vjb25kJywgJ1x1MDBCNXMnKTtcblx0XHRcdFx0YWRkKG5hbm9zZWNvbmRzLCAnbmFub3NlY29uZCcsICducycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgbWlsbGlzZWNvbmRzQW5kQmVsb3dcblx0XHRcdFx0XHQ9IG1pbGxpc2Vjb25kc1xuXHRcdFx0XHRcdCsgKG1pY3Jvc2Vjb25kcyAvIDEwMDApXG5cdFx0XHRcdFx0KyAobmFub3NlY29uZHMgLyAxZTYpO1xuXG5cdFx0XHRcdGNvbnN0IG1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHNcblx0XHRcdFx0XHQ9IHR5cGVvZiBvcHRpb25zLm1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHMgPT09ICdudW1iZXInXG5cdFx0XHRcdFx0XHQ/IG9wdGlvbnMubWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0c1xuXHRcdFx0XHRcdFx0OiAwO1xuXG5cdFx0XHRcdGNvbnN0IHJvdW5kZWRNaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHNBbmRCZWxvdyA+PSAxXG5cdFx0XHRcdFx0PyBNYXRoLnJvdW5kKG1pbGxpc2Vjb25kc0FuZEJlbG93KVxuXHRcdFx0XHRcdDogTWF0aC5jZWlsKG1pbGxpc2Vjb25kc0FuZEJlbG93KTtcblxuXHRcdFx0XHRjb25zdCBtaWxsaXNlY29uZHNTdHJpbmcgPSBtaWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzXG5cdFx0XHRcdFx0PyBtaWxsaXNlY29uZHNBbmRCZWxvdy50b0ZpeGVkKG1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHMpXG5cdFx0XHRcdFx0OiByb3VuZGVkTWlsbGlzZWNvbmRzO1xuXG5cdFx0XHRcdGFkZChcblx0XHRcdFx0XHROdW1iZXIucGFyc2VGbG9hdChtaWxsaXNlY29uZHNTdHJpbmcpLFxuXHRcdFx0XHRcdCdtaWxsaXNlY29uZCcsXG5cdFx0XHRcdFx0J21zJyxcblx0XHRcdFx0XHRtaWxsaXNlY29uZHNTdHJpbmcsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHNlY29uZHMgPSAoXG5cdFx0XHRcdChpc0JpZ0ludCA/IE51bWJlcihtaWxsaXNlY29uZHMgJSBPTkVfREFZX0lOX01JTExJU0VDT05EUykgOiBtaWxsaXNlY29uZHMpXG5cdFx0XHRcdC8gMTAwMFxuXHRcdFx0KSAlIDYwO1xuXHRcdFx0Y29uc3Qgc2Vjb25kc0RlY2ltYWxEaWdpdHNcblx0XHRcdFx0PSB0eXBlb2Ygb3B0aW9ucy5zZWNvbmRzRGVjaW1hbERpZ2l0cyA9PT0gJ251bWJlcidcblx0XHRcdFx0XHQ/IG9wdGlvbnMuc2Vjb25kc0RlY2ltYWxEaWdpdHNcblx0XHRcdFx0XHQ6IDE7XG5cdFx0XHRjb25zdCBzZWNvbmRzRml4ZWQgPSBmbG9vckRlY2ltYWxzKHNlY29uZHMsIHNlY29uZHNEZWNpbWFsRGlnaXRzKTtcblx0XHRcdGNvbnN0IHNlY29uZHNTdHJpbmcgPSBvcHRpb25zLmtlZXBEZWNpbWFsc09uV2hvbGVTZWNvbmRzXG5cdFx0XHRcdD8gc2Vjb25kc0ZpeGVkXG5cdFx0XHRcdDogc2Vjb25kc0ZpeGVkLnJlcGxhY2UoL1xcLjArJC8sICcnKTtcblx0XHRcdGFkZChOdW1iZXIucGFyc2VGbG9hdChzZWNvbmRzU3RyaW5nKSwgJ3NlY29uZCcsICdzJywgc2Vjb25kc1N0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gc2lnbiArICcwJyArIChvcHRpb25zLnZlcmJvc2UgPyAnIG1pbGxpc2Vjb25kcycgOiAnbXMnKTtcblx0fVxuXG5cdGNvbnN0IHNlcGFyYXRvciA9IG9wdGlvbnMuY29sb25Ob3RhdGlvbiA/ICc6JyA6ICcgJztcblx0aWYgKHR5cGVvZiBvcHRpb25zLnVuaXRDb3VudCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgTWF0aC5tYXgob3B0aW9ucy51bml0Q291bnQsIDEpKTtcblx0fVxuXG5cdHJldHVybiBzaWduICsgcmVzdWx0LmpvaW4oc2VwYXJhdG9yKTtcbn1cbiIsICIvLyBAcHVzaHJvY2tzIHNjb3BlXG5pbXBvcnQgKiBhcyBsaWsgZnJvbSAnQHB1c2gucm9ja3MvbGlrJztcbmltcG9ydCAqIGFzIHNtYXJ0ZGVsYXkgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRkZWxheSc7XG5pbXBvcnQgKiBhcyBzbWFydHByb21pc2UgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlJztcblxuZXhwb3J0IHsgbGlrLCBzbWFydGRlbGF5LCBzbWFydHByb21pc2UgfTtcblxuLy8gdGhpcmQgcGFydGllcztcbmltcG9ydCAqIGFzIGNyb25lciBmcm9tICdjcm9uZXInO1xuaW1wb3J0ICogYXMgZGF0ZUZucyBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IGlzVG9kYXkgZnJvbSAnZGF5anMvcGx1Z2luL2lzVG9kYXkuanMnO1xuaW1wb3J0IHByZXR0eU1zIGZyb20gJ3ByZXR0eS1tcyc7XG5cbmRheWpzLmV4dGVuZChpc1RvZGF5KTtcblxuZXhwb3J0IHsgY3JvbmVyLCBkYXRlRm5zLCBkYXlqcywgcHJldHR5TXMgfTtcbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vc21hcnR0aW1lLnBsdWdpbnMuanMnO1xuXG5leHBvcnQgY2xhc3MgQ3JvblBhcnNlciB7XG4gIHB1YmxpYyBjcm9uRXhwcmVzc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGNyb25BcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5jcm9uRXhwcmVzc2lvbi5zcGxpdCgnICcpO1xuICB9XG4gIGNvbnN0cnVjdG9yKGNyb25FeHByZXNzaW9uQXJnOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNyb25FeHByZXNzaW9uID0gY3JvbkV4cHJlc3Npb25Bcmc7XG4gICAgaWYgKHRoaXMuY3JvbkFycmF5Lmxlbmd0aCA8IDYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3JvblBhcnNlciBuZWVkcyBzZWNvbmQgbGV2ZWwgYWNjdXJhY3knKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE5leHRQYXJ0TWF0Y2goY3JvblBhcnQ6IHN0cmluZywgc3RhcnRWYWx1ZTogbnVtYmVyLCBtb2R1bG9Bcmc6IG51bWJlcikge1xuICAgIGlmIChjcm9uUGFydCA9PT0gJyonKSB7XG4gICAgICByZXR1cm4gc3RhcnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGNyb25QYXJ0LmluY2x1ZGVzKCcvJykpIHtcbiAgICAgIGNvbnN0IGV2ZXJ5ID0gcGFyc2VJbnQoY3JvblBhcnQuc3BsaXQoJy8nKVsxXSwgMTApO1xuICAgICAgY29uc3QgZmluZEV2ZW5NYXRjaCA9IChyZWN1cnNpb25TdGFydEFyZzogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICAgICAgaWYgKHJlY3Vyc2lvblN0YXJ0QXJnICUgZXZlcnkgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gcmVjdXJzaW9uU3RhcnRBcmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZpbmRFdmVuTWF0Y2gocmVjdXJzaW9uU3RhcnRBcmcgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBmaW5kRXZlbk1hdGNoKHN0YXJ0VmFsdWUpO1xuICAgIH1cbiAgICBpZiAocGFyc2VJbnQoY3JvblBhcnQsIDEwKSB8fCBjcm9uUGFydCA9PT0gJzAnKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHBhcnNlSW50KGNyb25QYXJ0LCAxMCk7XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1zVG9OZXh0KCkge1xuICAgIGNvbnN0IGNyb25BcnJheSA9IHRoaXMuY3JvbkFycmF5O1xuICAgIGNvbnN0IHNlY29uZEV4cHJlc3Npb24gPSBjcm9uQXJyYXlbMF07XG4gICAgY29uc3QgbWludXRlRXhwcmVzc2lvbiA9IGNyb25BcnJheVsxXTtcbiAgICBjb25zdCBob3VyRXhwcmVzc2lvbiA9IGNyb25BcnJheVsyXTtcbiAgICBjb25zdCBkYXlFeHByZXNzaW9uID0gY3JvbkFycmF5WzNdO1xuICAgIGNvbnN0IG1vbnRoRXhwcmVzc2lvbiA9IGNyb25BcnJheVs0XTtcbiAgICBjb25zdCB5ZWFyRXhwcmVzc2lvbiA9IGNyb25BcnJheVs1XTtcblxuICAgIGxldCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgbGV0IGN1cnJlbnRTZWNvbmQgPSBjdXJyZW50RGF0ZS5nZXRTZWNvbmRzKCkgKyAxO1xuICAgIGxldCBjdXJyZW50TWludXRlID0gY3VycmVudERhdGUuZ2V0TWludXRlcygpO1xuICAgIGxldCBjdXJyZW50SG91ciA9IGN1cnJlbnREYXRlLmdldEhvdXJzKCk7XG4gICAgbGV0IGN1cnJlbnREYXkgPSBjdXJyZW50RGF0ZS5nZXREYXRlKCk7XG4gICAgbGV0IGN1cnJlbnRNb250aCA9IGN1cnJlbnREYXRlLmdldE1vbnRoKCk7XG4gICAgbGV0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKTtcblxuICAgIGNvbnN0IHRhcmdldFNlY29uZCA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChzZWNvbmRFeHByZXNzaW9uLCBjdXJyZW50U2Vjb25kLCA1OSk7XG4gICAgaWYgKHRhcmdldFNlY29uZCA8IGN1cnJlbnRTZWNvbmQpIHtcbiAgICAgIGN1cnJlbnRNaW51dGUgPSAoY3VycmVudE1pbnV0ZSArIDEpICUgNTk7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldE1pbnV0ZSA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChtaW51dGVFeHByZXNzaW9uLCBjdXJyZW50TWludXRlLCA1OSk7XG4gICAgaWYgKHRhcmdldE1pbnV0ZSA8IGN1cnJlbnRNaW51dGUpIHtcbiAgICAgIGN1cnJlbnRIb3VyID0gKGN1cnJlbnRIb3VyICsgMSkgJSAyMztcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0SG91ciA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChob3VyRXhwcmVzc2lvbiwgY3VycmVudEhvdXIsIDIzKTtcbiAgICBpZiAodGFyZ2V0SG91ciA8IGN1cnJlbnRIb3VyKSB7XG4gICAgICBjdXJyZW50RGF5ID0gKGN1cnJlbnREYXkgKyAxKSAlIDMwO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldERheSA9IGN1cnJlbnREYXk7XG4gICAgaWYgKHRhcmdldERheSA8IGN1cnJlbnREYXkpIHtcbiAgICAgIGN1cnJlbnRNb250aCA9IChjdXJyZW50TW9udGggKyAxKSAlIDExO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldE1vbnRoID0gY3VycmVudE1vbnRoO1xuICAgIGlmICh0YXJnZXRNb250aCA8IGN1cnJlbnRNb250aCkge1xuICAgICAgY3VycmVudFllYXIgPSBjdXJyZW50WWVhciArIDE7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldFllYXIgPSBjdXJyZW50WWVhcjtcblxuICAgIGNvbnN0IHRhcmdldERhdGUgPSBuZXcgRGF0ZShcbiAgICAgIHRhcmdldFllYXIsXG4gICAgICB0YXJnZXRNb250aCxcbiAgICAgIHRhcmdldERheSxcbiAgICAgIHRhcmdldEhvdXIsXG4gICAgICB0YXJnZXRNaW51dGUsXG4gICAgICB0YXJnZXRTZWNvbmRcbiAgICApO1xuICAgIGNvbnN0IHRhcmdldFRpbWUgPSB0YXJnZXREYXRlLmdldFRpbWUoKTtcbiAgICByZXR1cm4gdGFyZ2V0VGltZSAtIERhdGUubm93KCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vc21hcnR0aW1lLnBsdWdpbnMuanMnO1xuaW1wb3J0IHsgQ3Jvbk1hbmFnZXIgfSBmcm9tICcuL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25tYW5hZ2VyLmpzJztcblxuaW1wb3J0IHsgQ3JvblBhcnNlciB9IGZyb20gJy4vc21hcnR0aW1lLmNsYXNzZXMuY3JvbnBhcnNlci5qcyc7XG5cbmV4cG9ydCB0eXBlIFRKb2JGdW5jdGlvbiA9XG4gIHwgKCh0cmlnZ2VyVGltZUFyZz86IG51bWJlcikgPT4gdm9pZClcbiAgfCAoKHRyaWdnZXJUaW1lQXJnPzogbnVtYmVyKSA9PiBQcm9taXNlPGFueT4pO1xuXG5leHBvcnQgY2xhc3MgQ3JvbkpvYiB7XG4gIHB1YmxpYyBjcm9uUGFyc2VyOiBwbHVnaW5zLmNyb25lci5Dcm9uO1xuICBwdWJsaWMgc3RhdHVzOiAnc3RhcnRlZCcgfCAnc3RvcHBlZCcgfCAnaW5pdGlhbCcgPSAnaW5pdGlhbCc7XG4gIHB1YmxpYyBjcm9uRXhwcmVzc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgam9iRnVuY3Rpb246IFRKb2JGdW5jdGlvbjtcbiAgcHJpdmF0ZSBuZXh0RXhlY3V0aW9uVW5peDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3Rvcihjcm9uTWFuYWdlcjogQ3Jvbk1hbmFnZXIsIGNyb25FeHByZXNzaW9uQXJnOiBzdHJpbmcsIGpvYkZ1bmN0aW9uOiBUSm9iRnVuY3Rpb24pIHtcbiAgICB0aGlzLmNyb25FeHByZXNzaW9uID0gY3JvbkV4cHJlc3Npb25Bcmc7XG4gICAgdGhpcy5qb2JGdW5jdGlvbiA9IGpvYkZ1bmN0aW9uO1xuICAgIHRoaXMuY3JvblBhcnNlciA9IG5ldyBwbHVnaW5zLmNyb25lci5Dcm9uKGNyb25FeHByZXNzaW9uQXJnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja3Mgd2V0aGVyIHRoZSBjcm9uam9iIG5lZWRzIHRvIGJlIGV4ZWN1dGVkXG4gICAqL1xuICBwdWJsaWMgY2hlY2tFeGVjdXRpb24oKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5uZXh0RXhlY3V0aW9uVW5peCA9PT0gMCkge1xuICAgICAgdGhpcy5nZXROZXh0RXhlY3V0aW9uVGltZSgpO1xuICAgIH1cbiAgICBpZiAoRGF0ZS5ub3coKSA+IHRoaXMubmV4dEV4ZWN1dGlvblVuaXgpIHtcbiAgICAgIGNvbnN0IG1heWJlUHJvbWlzZSA9IHRoaXMuam9iRnVuY3Rpb24odGhpcy5uZXh0RXhlY3V0aW9uVW5peCk7XG4gICAgICBpZiAobWF5YmVQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICBtYXliZVByb21pc2UuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKGUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmV4dEV4ZWN1dGlvblVuaXggPSB0aGlzLmdldE5leHRFeGVjdXRpb25UaW1lKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5leHRFeGVjdXRpb25Vbml4O1xuICB9XG5cbiAgcHVibGljIGdldE5leHRFeGVjdXRpb25UaW1lKCkge1xuICAgIHJldHVybiAodGhpcy5uZXh0RXhlY3V0aW9uVW5peCA9IERhdGUubm93KCkgKyB0aGlzLmdldFRpbWVUb05leHRFeGVjdXRpb24oKSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0cyB0aGUgdGltZSB0byBuZXh0IGV4ZWN1dGlvblxuICAgKi9cbiAgcHVibGljIGdldFRpbWVUb05leHRFeGVjdXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JvblBhcnNlci5tc1RvTmV4dCgpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0KCkge1xuICAgIHRoaXMuc3RhdHVzID0gJ3N0YXJ0ZWQnO1xuICB9XG5cbiAgcHVibGljIHN0b3AoKSB7XG4gICAgdGhpcy5zdGF0dXMgPSAnc3RvcHBlZCc7XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vc21hcnR0aW1lLnBsdWdpbnMuanMnO1xuXG5leHBvcnQgbGV0IHVuaXRzID0ge1xuICB5ZWFyczogKHRpbWVzQXJnID0gMSk6IG51bWJlciA9PiB7XG4gICAgcmV0dXJuIHRpbWVzQXJnICogMy4xNTRlMTA7XG4gIH0sXG4gIG1vbnRoczogKHRpbWVzQXJnID0gMSk6IG51bWJlciA9PiB7XG4gICAgcmV0dXJuIHRpbWVzQXJnICogMi42MjhlOTtcbiAgfSxcbiAgd2Vla3M6ICh0aW1lc0FyZyA9IDEpID0+IHtcbiAgICByZXR1cm4gdGltZXNBcmcgKiA2LjA0OGU4O1xuICB9LFxuICBkYXlzOiAodGltZXNBcmcgPSAxKSA9PiB7XG4gICAgcmV0dXJuIHRpbWVzQXJnICogOC42NGU3O1xuICB9LFxuICBob3VyczogKHRpbWVzQXJnID0gMSkgPT4ge1xuICAgIHJldHVybiB0aW1lc0FyZyAqIDMuNmU2O1xuICB9LFxuICBtaW51dGVzOiAodGltZXNBcmcgPSAxKSA9PiB7XG4gICAgcmV0dXJuIHRpbWVzQXJnICogNjAwMDA7XG4gIH0sXG4gIHNlY29uZHM6ICh0aW1lc0FyZyA9IDEpID0+IHtcbiAgICByZXR1cm4gdGltZXNBcmcgKiAxMDAwO1xuICB9LFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJVW5pdENvbWJpbmF0aW9uQXJnIHtcbiAgeWVhcnM/OiBudW1iZXI7XG4gIG1vbnRocz86IG51bWJlcjtcbiAgd2Vla3M/OiBudW1iZXI7XG4gIGRheXM/OiBudW1iZXI7XG4gIGhvdXJzPzogbnVtYmVyO1xuICBtaW51dGVzPzogbnVtYmVyO1xuICBzZWNvbmRzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgbGV0IGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cyA9IChjb21iaW5hdGlvbkFyZzogSVVuaXRDb21iaW5hdGlvbkFyZykgPT4ge1xuICBsZXQgdGltZUluTWlsbGlzZWNvbmRzID0gMDtcbiAgbGV0IGFkZE1pbGxpU2Vjb25kcyA9IChtaWxsaVNlY29uZHNBcmc6IG51bWJlcikgPT4ge1xuICAgIHRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVJbk1pbGxpc2Vjb25kcyArIG1pbGxpU2Vjb25kc0FyZztcbiAgfTtcbiAgaWYgKGNvbWJpbmF0aW9uQXJnLnllYXJzKSB7XG4gICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLnllYXJzKGNvbWJpbmF0aW9uQXJnLnllYXJzKSk7XG4gIH1cbiAgaWYgKGNvbWJpbmF0aW9uQXJnLm1vbnRocykge1xuICAgIGFkZE1pbGxpU2Vjb25kcyh1bml0cy5tb250aHMoY29tYmluYXRpb25BcmcubW9udGhzKSk7XG4gIH1cbiAgaWYgKGNvbWJpbmF0aW9uQXJnLndlZWtzKSB7XG4gICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLndlZWtzKGNvbWJpbmF0aW9uQXJnLndlZWtzKSk7XG4gIH1cbiAgaWYgKGNvbWJpbmF0aW9uQXJnLmRheXMpIHtcbiAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuZGF5cyhjb21iaW5hdGlvbkFyZy5kYXlzKSk7XG4gIH1cbiAgaWYgKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSB7XG4gICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLmhvdXJzKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSk7XG4gIH1cbiAgaWYgKGNvbWJpbmF0aW9uQXJnLm1pbnV0ZXMpIHtcbiAgICBhZGRNaWxsaVNlY29uZHModW5pdHMubWludXRlcyhjb21iaW5hdGlvbkFyZy5taW51dGVzKSk7XG4gIH1cbiAgaWYgKGNvbWJpbmF0aW9uQXJnLnNlY29uZHMpIHtcbiAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuc2Vjb25kcyhjb21iaW5hdGlvbkFyZy5zZWNvbmRzKSk7XG4gIH1cblxuICByZXR1cm4gdGltZUluTWlsbGlzZWNvbmRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1pbGxpU2Vjb25kc0FzSHVtYW5SZWFkYWJsZVN0cmluZyA9IChtaWxsaVNlY29uZHNBcmc6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIHJldHVybiBwbHVnaW5zLnByZXR0eU1zKG1pbGxpU2Vjb25kc0FyZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlQWdvVGltZSA9ICh0aW1lU3RhbXBBcmc6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIHJldHVybiBwbHVnaW5zLmRhdGVGbnMuZm9ybWF0RGlzdGFuY2VUb05vdyhuZXcgRGF0ZSh0aW1lU3RhbXBBcmcpKTtcbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vc21hcnR0aW1lLnBsdWdpbnMuanMnO1xuaW1wb3J0IHsgQ3JvbkpvYiwgdHlwZSBUSm9iRnVuY3Rpb24gfSBmcm9tICcuL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25qb2IuanMnO1xuaW1wb3J0IHsgZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlU3RyaW5nIH0gZnJvbSAnLi9zbWFydHRpbWUudW5pdHMuanMnO1xuXG5leHBvcnQgY2xhc3MgQ3Jvbk1hbmFnZXIge1xuICBwdWJsaWMgZXhlY3V0aW9uVGltZW91dDogcGx1Z2lucy5zbWFydGRlbGF5LlRpbWVvdXQ8dm9pZD47XG5cbiAgcHVibGljIHN0YXR1czogJ3N0YXJ0ZWQnIHwgJ3N0b3BwZWQnID0gJ3N0b3BwZWQnO1xuICBwdWJsaWMgY3JvbmpvYnMgPSBuZXcgcGx1Z2lucy5saWsuT2JqZWN0TWFwPENyb25Kb2I+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBhZGRDcm9uam9iKGNyb25JZGVudGlmaWVyQXJnOiBzdHJpbmcsIGNyb25GdW5jdGlvbkFyZzogVEpvYkZ1bmN0aW9uKSB7XG4gICAgY29uc3QgbmV3Q3JvbkpvYiA9IG5ldyBDcm9uSm9iKHRoaXMsIGNyb25JZGVudGlmaWVyQXJnLCBjcm9uRnVuY3Rpb25BcmcpO1xuICAgIHRoaXMuY3JvbmpvYnMuYWRkKG5ld0Nyb25Kb2IpO1xuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ3N0YXJ0ZWQnKSB7XG4gICAgICBuZXdDcm9uSm9iLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0Nyb25Kb2I7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ3JvbmpvYihjcm9uam9iQXJnOiBDcm9uSm9iKSB7XG4gICAgY3JvbmpvYkFyZy5zdG9wKCk7XG4gICAgdGhpcy5jcm9uam9icy5yZW1vdmUoY3JvbmpvYkFyZyk7XG4gIH1cblxuICAvKipcbiAgICogc3RhcnRzIHRoZSBjcm9uam9iXG4gICAqL1xuICBwdWJsaWMgc3RhcnQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdHVzICE9PSAnc3RhcnRlZCcpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gJ3N0YXJ0ZWQnO1xuICAgICAgZm9yIChjb25zdCBjcm9uSm9iIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSkge1xuICAgICAgICBjcm9uSm9iLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1bkNyb25DeWNsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuQ3JvbkN5Y2xlKCkge1xuICAgIHRoaXMuZXhlY3V0aW9uVGltZW91dCA9IG5ldyBwbHVnaW5zLnNtYXJ0ZGVsYXkuVGltZW91dCgwKTtcbiAgICBkbyB7XG4gICAgICBsZXQgbmV4dFJ1bm5pbmdDcm9uam9iOiBDcm9uSm9iO1xuICAgICAgZm9yIChjb25zdCBjcm9uSm9iIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSkge1xuICAgICAgICBjcm9uSm9iLmNoZWNrRXhlY3V0aW9uKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbmV4dFJ1bm5pbmdDcm9uam9iIHx8XG4gICAgICAgICAgY3JvbkpvYi5nZXRUaW1lVG9OZXh0RXhlY3V0aW9uKCkgPCBuZXh0UnVubmluZ0Nyb25qb2IuZ2V0VGltZVRvTmV4dEV4ZWN1dGlvbigpXG4gICAgICAgICkge1xuICAgICAgICAgIG5leHRSdW5uaW5nQ3JvbmpvYiA9IGNyb25Kb2I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0UnVubmluZ0Nyb25qb2IpIHtcbiAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IHBsdWdpbnMuc21hcnRkZWxheS5UaW1lb3V0KFxuICAgICAgICAgIG5leHRSdW5uaW5nQ3JvbmpvYi5nZXRUaW1lVG9OZXh0RXhlY3V0aW9uKClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYE5leHQgQ3JvbkpvYiBzY2hlZHVsZWQgaW4gJHtnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmcoXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVvdXQuZ2V0VGltZUxlZnQoKVxuICAgICAgICAgICl9YFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IHBsdWdpbnMuc21hcnRkZWxheS5UaW1lb3V0KDEwMDApO1xuICAgICAgICBjb25zb2xlLmxvZygnbm8gY3JvbmpvYnMgc3BlY2lmaWVkISBDaGVja2luZyBhZ2FpbiBpbiAxIHNlY29uZCcpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvblRpbWVvdXQucHJvbWlzZTtcbiAgICB9IHdoaWxlICh0aGlzLnN0YXR1cyA9PT0gJ3N0YXJ0ZWQnKTtcbiAgfTtcblxuICAvKipcbiAgICogc3RvcHMgYWxsIGNyb25qb2JzXG4gICAqL1xuICBwdWJsaWMgc3RvcCgpIHtcbiAgICBpZiAodGhpcy5zdGF0dXMgPT09ICdzdGFydGVkJykge1xuICAgICAgdGhpcy5zdGF0dXMgPSAnc3RvcHBlZCc7XG4gICAgICB0aGlzLmV4ZWN1dGlvblRpbWVvdXQuY2FuY2VsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGBZb3UgdHJpZWQgdG8gc3RvcCBhIENyb25NYW5hZ2VyIHRoYXQgd2FzIG5vdCBhY3R1YWxseSBzdGFydGVkLmApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGNyb24gb2YgdGhpcy5jcm9uam9icy5nZXRBcnJheSgpKSB7XG4gICAgICBjcm9uLnN0b3AoKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vc21hcnR0aW1lLnBsdWdpbnMuanMnO1xuaW1wb3J0ICogYXMgdW5pdHMgZnJvbSAnLi9zbWFydHRpbWUudW5pdHMuanMnO1xuXG5leHBvcnQgdHlwZSBUQXZhaWxhYmxlWm9uZSA9ICdFdXJvcGUvQmVybGluJztcblxuZXhwb3J0IGludGVyZmFjZSBJRGF0ZVVuaXRzIHtcbiAgeWVhcjogbnVtYmVyO1xuICB5ZWFyU3RyaW5nOiBzdHJpbmc7XG4gIG1vbnRoOiBudW1iZXI7XG4gIG1vbnRoU3RyaW5nOiBzdHJpbmc7XG4gIG1vbnRoTmFtZTogc3RyaW5nO1xuICBkYXk6IG51bWJlcjtcbiAgZGF5U3RyaW5nOiBzdHJpbmc7XG4gIGRheU9mVGhlV2VlazogbnVtYmVyO1xuICBkYXlPZlRoZVdlZWtOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBFeHRlbmRlZERhdGUgZXh0ZW5kcyBEYXRlIHtcbiAgLy8gU1RBVElDIGZhY3Rvcmllc1xuICBwdWJsaWMgc3RhdGljIGZyb21NaWxsaXMobWlsbGlTZWNvbmRzOiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IEV4dGVuZGVkRGF0ZShtaWxsaVNlY29uZHMpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tRGF0ZShkYXRlQXJnOiBEYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBFeHRlbmRlZERhdGUoZGF0ZUFyZy5nZXRUaW1lKCkpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tRXVyb3BlYW5EYXRlKGV1cm9wZWFuRGF0ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZGF0ZUFycmF5ID0gLyguKilcXC4oLiopXFwuKC4qKS8uZXhlYyhldXJvcGVhbkRhdGUpO1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShcbiAgICAgIHBhcnNlRmxvYXQoZGF0ZUFycmF5WzNdKSwgLy8geWVhclxuICAgICAgcGFyc2VGbG9hdChkYXRlQXJyYXlbMl0pIC0gMSwgLy8gbW9udGhcbiAgICAgIHBhcnNlRmxvYXQoZGF0ZUFycmF5WzFdKSAvLyBkYXlcbiAgICApO1xuICAgIGNvbnN0IHVuaXhNaWxsaSA9IGRhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBuZXcgRXh0ZW5kZWREYXRlKHVuaXhNaWxsaSk7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlcyBhbiBFeHRlbmRlZCBkYXRlIGZyb20gYSBoeXBlZERhdGUgbGlrZSBcIjIwMTgtMDMtMjhcIlxuICAgKiBAcGFyYW0gZGF0ZVN0cmluZ1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSHlwaGVkRGF0ZShkYXRlU3RyaW5nOiBzdHJpbmcpIHtcbiAgICAvLyBndWFyZHNcbiAgICAvLyBpbXBsZW1lbnRhdGlvblxuICAgIGNvbnN0IGRhdGVNaWxsaXMgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIG5ldyBFeHRlbmRlZERhdGUoZGF0ZU1pbGxpcyk7XG4gIH1cblxuICAvKipcbiAgICogU2FtZSBhcyAuZnJvbUV1cm9wZWFuRGF0ZSgpLCBidXQgYWNjZXB0cyBhZGRpdGlvbmFsIHRpbWVBcmcgYW5kIHpvbmVBcmdcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUV1cm9wZWFuRGF0ZUFuZFRpbWUoXG4gICAgZXVyb3BlYW5EYXRlQXJnOiBzdHJpbmcsXG4gICAgdGltZUFyZzogc3RyaW5nID0gJzEyOjAwOjAwJyxcbiAgICB6b25lQXJnOiBUQXZhaWxhYmxlWm9uZSA9ICdFdXJvcGUvQmVybGluJ1xuICApIHtcbiAgICAvLyBndWFyZHNcblxuICAgIC8vIGltcGxlbWVudGF0aW9uXG4gICAgY29uc3QgZGF0ZUFycmF5ID0gLyguKilcXC4oLiopXFwuKC4qKS8uZXhlYyhldXJvcGVhbkRhdGVBcmcpO1xuICAgIGNvbnN0IHNsaWNlRGF0ZSA9IChkYXRlU3RyaW5nOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBgMCR7ZGF0ZVN0cmluZ31gLnNsaWNlKC0yKTtcbiAgICB9O1xuICAgIGNvbnN0IGRhdGVUaW1lU3RyaW5nID0gYCR7ZGF0ZUFycmF5WzNdfS0ke3NsaWNlRGF0ZShkYXRlQXJyYXlbMl0pfS0ke3NsaWNlRGF0ZShcbiAgICAgIGRhdGVBcnJheVsxXVxuICAgICl9VCR7dGltZUFyZ31gO1xuICAgIGNvbnN0IGRhdGUgPSBwbHVnaW5zLmRheWpzKGRhdGVUaW1lU3RyaW5nKTtcbiAgICBjb25zdCB1bml4TWlsbGkgPSBkYXRlLnRvRGF0ZSgpLmdldFRpbWUoKTtcbiAgICByZXR1cm4gbmV3IEV4dGVuZGVkRGF0ZSh1bml4TWlsbGkpO1xuICB9XG5cbiAgLy8gSU5TVEFOQ0VcbiAgcHVibGljIHRpbWV6b25lOiBUQXZhaWxhYmxlWm9uZTtcblxuICBjb25zdHJ1Y3Rvcih1bml4TWlsbGk6IG51bWJlciA9IERhdGUubm93KCkpIHtcbiAgICBzdXBlcih1bml4TWlsbGkpO1xuICB9XG5cbiAgLy9cbiAgcHVibGljIGV4cG9ydFRvRXVyb3BlYW5EYXRlKCkge1xuICAgIGNvbnN0IHVuaXRzID0gdGhpcy5leHBvcnRUb1VuaXRzKCk7XG4gICAgcmV0dXJuIGAke3VuaXRzLmRheVN0cmluZ30uJHt1bml0cy5tb250aFN0cmluZ30uJHt1bml0cy55ZWFyU3RyaW5nfWA7XG4gIH1cblxuICBwdWJsaWMgZXhwb3J0VG9IeXBoZWRTb3J0YWJsZURhdGUoKSB7XG4gICAgY29uc3QgdW5pdHMgPSB0aGlzLmV4cG9ydFRvVW5pdHMoKTtcbiAgICByZXR1cm4gYCR7dW5pdHMueWVhclN0cmluZ30tJHt1bml0cy5tb250aFN0cmluZ30tJHt1bml0cy5kYXlTdHJpbmd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHBvcnRzIHVuaXRzXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0VG9Vbml0cygpOiBJRGF0ZVVuaXRzIHtcbiAgICBjb25zdCBtb250aHNBcnJheSA9IFtcbiAgICAgICdKYW51YXJ5JyxcbiAgICAgICdGZWJydWFyeScsXG4gICAgICAnTWFyY2gnLFxuICAgICAgJ0FwcmlsJyxcbiAgICAgICdNYXknLFxuICAgICAgJ0p1bmUnLFxuICAgICAgJ0p1bHknLFxuICAgICAgJ0F1Z3VzdCcsXG4gICAgICAnU2VwdGVtYmVyJyxcbiAgICAgICdPY3RvYmVyJyxcbiAgICAgICdOb3ZlbWJlcicsXG4gICAgICAnRGVjZW1iZXInLFxuICAgIF07XG4gICAgY29uc3QgZGF5c0FycmF5ID0gW1xuICAgICAgJ01vbmRheScsXG4gICAgICAnVHVlc2RheScsXG4gICAgICAnV2VkbmVzZGF5JyxcbiAgICAgICdUaHVyc2RheScsXG4gICAgICAnRnJpZGF5JyxcbiAgICAgICdTYXR1cmRheScsXG4gICAgICAnU3VuZGF5JyxcbiAgICBdO1xuICAgIHJldHVybiB7XG4gICAgICB5ZWFyOiB0aGlzLmdldEZ1bGxZZWFyKCksXG4gICAgICB5ZWFyU3RyaW5nOiBgJHt0aGlzLmdldEZ1bGxZZWFyKCl9YCxcbiAgICAgIG1vbnRoOiB0aGlzLmdldE1vbnRoKCkgKyAxLFxuICAgICAgbW9udGhTdHJpbmc6ICgnMCcgKyAodGhpcy5nZXRNb250aCgpICsgMSkpLnNsaWNlKC0yKSxcbiAgICAgIG1vbnRoTmFtZTogbW9udGhzQXJyYXlbdGhpcy5nZXRNb250aCgpXSxcbiAgICAgIGRheTogdGhpcy5nZXREYXRlKCksXG4gICAgICBkYXlTdHJpbmc6ICgnMCcgKyB0aGlzLmdldERhdGUoKSkuc2xpY2UoLTIpLFxuICAgICAgZGF5T2ZUaGVXZWVrOiB0aGlzLmdldERheSgpLFxuICAgICAgZGF5T2ZUaGVXZWVrTmFtZTogZGF5c0FycmF5W3RoaXMuZ2V0RGF5KCldLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0KGZvcm1hdEFyZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHBsdWdpbnMuZGF5anModGhpcy5nZXRUaW1lKCkpLmZvcm1hdChmb3JtYXRBcmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIGJvb2xlYW4gY2hlY2tzXG4gICAqL1xuICBwdWJsaWMgaXNUb2RheSgpIHtcbiAgICByZXR1cm4gcGx1Z2lucy5kYXlqcyh0aGlzLmdldFRpbWUoKSkuaXNUb2RheSgpO1xuICB9XG5cbiAgcHVibGljIGxlc3NUaW1lUGFzc2VkVG9Ob3codW5pdEFyZ3M6IHVuaXRzLklVbml0Q29tYmluYXRpb25BcmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXhQYXNzZWRVbml4VGltZSA9IHVuaXRzLmdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cyh1bml0QXJncyk7XG4gICAgY29uc3QgYWN0dWFsUGFzc2VkVW5peFRpbWUgPSBEYXRlLm5vdygpIC0gdGhpcy5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFjdHVhbFBhc3NlZFVuaXhUaW1lIDwgbWF4UGFzc2VkVW5peFRpbWU7XG4gIH1cblxuICBwdWJsaWMgbW9yZVRpbWVQYXNzZWRUb05vdyh1bml0QXJnczogdW5pdHMuSVVuaXRDb21iaW5hdGlvbkFyZykge1xuICAgIHJldHVybiAhdGhpcy5sZXNzVGltZVBhc3NlZFRvTm93KHVuaXRBcmdzKTtcbiAgfVxufVxuIiwgIi8qKlxuICogZWFzeSBoaWdoIHJlc29sdXRpb24gdGltZSBtZWFzdXJlbWVudFxuICovXG5leHBvcnQgY2xhc3MgSHJ0TWVhc3VyZW1lbnQge1xuICBwdWJsaWMgbmFub1NlY29uZHM6IG51bWJlciA9IG51bGw7XG4gIHB1YmxpYyBtaWxsaVNlY29uZHM6IG51bWJlciA9IG51bGw7XG4gIHByaXZhdGUgX21pbGxpU3RhcnQ6IG51bWJlciA9IG51bGw7XG4gIHByaXZhdGUgX21pbGxpRGlmZjogbnVtYmVyID0gbnVsbDtcbiAgcHJpdmF0ZSBfc3RhcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBzdGFydCB0aGUgbWVhc3VyZW1lbnRcbiAgICovXG4gIHB1YmxpYyBzdGFydCgpIHtcbiAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9taWxsaVN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdG9wIHRoZSBtZWFzdXJlbWVudFxuICAgKi9cbiAgcHVibGljIHN0b3AoKSB7XG4gICAgaWYgKHRoaXMuX3N0YXJ0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkhhc24ndCBzdGFydGVkIHlldFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbWlsbGlEaWZmID0gRGF0ZS5ub3coKSAtIHRoaXMuX21pbGxpU3RhcnQ7XG4gICAgdGhpcy5uYW5vU2Vjb25kcyA9IHRoaXMuX21pbGxpRGlmZiAqIDEwMDA7XG4gICAgdGhpcy5taWxsaVNlY29uZHMgPSB0aGlzLl9taWxsaURpZmY7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogcmVzZXQgdGhlIG1lYXN1cmVtZW50XG4gICAqL1xuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5uYW5vU2Vjb25kcyA9IG51bGw7XG4gICAgdGhpcy5taWxsaVNlY29uZHMgPSBudWxsO1xuICAgIHRoaXMuX21pbGxpU3RhcnQgPSBudWxsO1xuICAgIHRoaXMuX21pbGxpRGlmZiA9IG51bGw7XG4gICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0dGltZS5wbHVnaW5zLmpzJztcblxuZXhwb3J0IGNsYXNzIEludGVydmFsIHtcbiAgcHVibGljIHN0YXR1czogJ3N0YXJ0ZWQnIHwgJ3N0b3BwZWQnIHwgJ2luaXRpYWwnID0gJ2luaXRpYWwnO1xuICBwcml2YXRlIHN0YXR1c0F1dGhvcml6YXRpb246IGFueSA9IG51bGw7XG5cbiAgLy8gdGltaW5nc1xuICBwdWJsaWMgaW50ZXJ2YWxNaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgcHVibGljIG5leHRJbnRlcnZhbE1pbGxpc2VuY29uZHM6IG51bWJlcjtcblxuICBwdWJsaWMgaW50ZXJ2YWxKb2JzOiBBcnJheTwoKSA9PiBhbnk+ID0gW107XG4gIGNvbnN0cnVjdG9yKGludGVydmFsTWlsbGlzZW5jb25kc0FyZzogbnVtYmVyKSB7XG4gICAgdGhpcy5pbnRlcnZhbE1pbGxpc2Vjb25kcyA9IGludGVydmFsTWlsbGlzZW5jb25kc0FyZztcbiAgfVxuXG4gIHB1YmxpYyBzdGFydCgpIHtcbiAgICB0aGlzLnN0YXR1cyA9ICdzdGFydGVkJztcbiAgICBjb25zdCBzdGF0dXNBdXRoID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnN0YXR1c0F1dGhvcml6YXRpb24gPSBzdGF0dXNBdXRoO1xuICAgIGNvbnN0IHJ1bkludGVydmFsID0gYXN5bmMgKCkgPT4ge1xuICAgICAgd2hpbGUgKHRoaXMuc3RhdHVzID09PSAnc3RhcnRlZCcgJiYgdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uID09PSBzdGF0dXNBdXRoKSB7XG4gICAgICAgIGF3YWl0IHBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcih0aGlzLmludGVydmFsTWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5leGVjdXRlSW50ZXJ2YWxKb2JzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBydW5JbnRlcnZhbCgpO1xuICB9XG5cbiAgcHVibGljIHN0b3AoKSB7XG4gICAgdGhpcy5zdGF0dXMgPSAnc3RvcHBlZCc7XG4gICAgdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBhZGRJbnRlcnZhbEpvYihmdW5jQXJnOiAoKSA9PiBhbnkpIHtcbiAgICB0aGlzLmludGVydmFsSm9icy5wdXNoKGZ1bmNBcmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlSW50ZXJ2YWxKb2JzKCkge1xuICAgIGZvciAoY29uc3QgZnVuY0FyZyBvZiB0aGlzLmludGVydmFsSm9icykge1xuICAgICAgZnVuY0FyZygpO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydHRpbWUucGx1Z2lucy5qcyc7XG5cbi8qKlxuICogVGltZVN0YW1wXG4gKiBzbWFydCB0aW1lc3RhbXBcbiAqL1xuZXhwb3J0IGNsYXNzIFRpbWVTdGFtcCB7XG4gIC8qKlxuICAgKiByZXR1cm5zIG5ldyBUaW1lU3RhbXAgZnJvbSBtaWxsaXNlY29uZHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU1pbGxpU2Vjb25kcyhtaWxsaVNlY29uZHNBcmc6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgVGltZVN0YW1wKG1pbGxpU2Vjb25kc0FyZyk7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyBuZXcgVGltZVN0YW1wIGZvciBub3cgd2l0aCBjaGFuZ2Ugc2V0XG4gICAqIEBwYXJhbSB0aW1lU3RhbXBBcmdcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVRpbWVTdGFtcCh0aW1lU3RhbXBBcmc6IFRpbWVTdGFtcCkge1xuICAgIGNvbnN0IGxvY2FsVGltZVN0YW1wID0gbmV3IFRpbWVTdGFtcCgpO1xuICAgIGxvY2FsVGltZVN0YW1wLmNoYW5nZSA9IGxvY2FsVGltZVN0YW1wLm1pbGxpU2Vjb25kcyAtIHRpbWVTdGFtcEFyZy5taWxsaVNlY29uZHM7XG4gICAgcmV0dXJuIGxvY2FsVGltZVN0YW1wO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFuZGFyZCBKYXZhU2NyaXB0IERhdGVcbiAgICovXG4gIHB1YmxpYyBkYXRlOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBhcyBsaW51eCB0aW1lIChtaWxsaXNlY29uZHMsIG5vdCBzZWNvbmRzIHRob3VnaClcbiAgICogZ29vZCBmb3IgY29tcGFyaXNvblxuICAgKi9cbiAgcHVibGljIG1pbGxpU2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhbmRhcmQgZXBvY2ggdGltZSBpbiBzZWNvbmRzXG4gICAqL1xuICBwdWJsaWMgZXBvY2h0aW1lOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIGlmIGRlcml2ZWQgZnJvbSBhbm90aGVyIFRpbWVTdGFtcCBwb2ludHMgb3V0IHRoZSBjaGFuZ2UgaW4gbWlsbGlzZWNvbmRzXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlOiBudW1iZXIgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGNyZWF0b3JBcmc/OiBudW1iZXIpIHtcbiAgICBpZiAoIWNyZWF0b3JBcmcpIHtcbiAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY3JlYXRvckFyZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKGNyZWF0b3JBcmcpO1xuICAgIH1cbiAgICB0aGlzLm1pbGxpU2Vjb25kcyA9IHRoaXMuZGF0ZS5nZXRUaW1lKCk7XG4gICAgdGhpcy5lcG9jaHRpbWUgPSBNYXRoLmZsb29yKHRoaXMubWlsbGlTZWNvbmRzIC8gMTAwMCk7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyBhIGJvb2xlYW4gZm9yIHdldGhlciB0aGUgdGltZXN0YW1wIGlzIG9sZGVyIHRoYW4gYW5vdGhlciB0aW1lc3RhbXBcbiAgICogQHBhcmFtIFRpbWVTdGFtcEFyZ1xuICAgKiBAcGFyYW0gdHJlc2hvbGRUaW1lQXJnXG4gICAqL1xuICBwdWJsaWMgaXNPbGRlclRoYW5PdGhlclRpbWVTdGFtcChUaW1lU3RhbXBBcmc6IFRpbWVTdGFtcCwgdHJlc2hvbGRUaW1lQXJnOiBudW1iZXIgPSAwKSB7XG4gICAgaWYgKHRoaXMubWlsbGlTZWNvbmRzIDwgVGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kcyAtIHRyZXNob2xkVGltZUFyZykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2xkZXIgdGhhbiB0aGUgYXJndW1lbnRcbiAgICogQHBhcmFtIFRpbWVTdGFtcEFyZ1xuICAgKi9cbiAgcHVibGljIGlzT2xkZXJUaGFuKFRpbWVTdGFtcEFyZzogVGltZVN0YW1wLCB0cmVzaG9sZFRpbWVBcmc6IG51bWJlciA9IDApIHtcbiAgICBpZiAodGhpcy5taWxsaVNlY29uZHMgKyB0cmVzaG9sZFRpbWVBcmcgPCBUaW1lU3RhbXBBcmcubWlsbGlTZWNvbmRzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgYm9vbGVhbiBmb3Igd2V0aGVyIHRoZSB0aW1lc3RhbXAgaXMgeW91bmdlciB0aGFuIGFub3RoZXIgdGltZXN0YW1wXG4gICAqIEBwYXJhbSBUaW1lU3RhbXBBcmdcbiAgICogQHBhcmFtIHRyZXNob2xkVGltZUFyZ1xuICAgKi9cbiAgcHVibGljIGlzWW91bmdlclRoYW5PdGhlclRpbWVTdGFtcChUaW1lU3RhbXBBcmc6IFRpbWVTdGFtcCwgdHJlc2hvbGRUaW1lQXJnOiBudW1iZXIgPSAwKSB7XG4gICAgaWYgKHRoaXMubWlsbGlTZWNvbmRzID4gVGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kcyArIHRyZXNob2xkVGltZUFyZykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNZb3VuZ2VyVGhhbk1pbGxpU2Vjb25kcyhtaWxsaXNlY29uZEFyZzogbnVtYmVyKSB7XG4gICAgY29uc3Qgbm93VGltZVN0YW1wID0gbmV3IFRpbWVTdGFtcCgpO1xuICAgIGNvbnN0IGNvbXBhcmVFcG9jaFRpbWUgPSBub3dUaW1lU3RhbXAuZXBvY2h0aW1lIC0gbWlsbGlzZWNvbmRBcmc7XG4gICAgY29uc3QgY29tcGFyZVRpbWVTdGFtcCA9IG5ldyBUaW1lU3RhbXAoY29tcGFyZUVwb2NoVGltZSk7XG4gICAgcmV0dXJuIHRoaXMuaXNZb3VuZ2VyVGhhbk90aGVyVGltZVN0YW1wKGNvbXBhcmVUaW1lU3RhbXApO1xuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0dGltZS5wbHVnaW5zLmpzJztcblxuaW1wb3J0IHsgVGltZVN0YW1wIH0gZnJvbSAnLi9zbWFydHRpbWUuY2xhc3Nlcy50aW1lc3RhbXAuanMnO1xuXG5leHBvcnQgdHlwZSBUaW1lclN0YXRlID0gJ2luaXRpYXRlZCcgfCAnc3RhcnRlZCcgfCAncGF1c2VkJyB8ICdjb21wbGV0ZWQnO1xuXG5leHBvcnQgY2xhc3MgVGltZXIge1xuICAvKipcbiAgICogdGhlIG9yaWdpbmFsIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgZm9yIHRoaXMgVGltZXJcbiAgICovXG4gIHB1YmxpYyB0aW1lSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgICogdGhlIHN0YXRlIG9mIHRoZSB0aW1lclxuICAgKi9cbiAgcHVibGljIHN0YXRlOiBUaW1lclN0YXRlID0gJ2luaXRpYXRlZCc7XG5cbiAgLyoqXG4gICAqIGNvbXBsZXRlZCBQcm9taXNlXG4gICAqL1xuICBwdWJsaWMgY29tcGxldGVkOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBhIHJlZmVyZW5jZSB0byB3aGVuIHRoZSBUaW1lb3V0IHN0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyBzdGFydGVkQXQ6IFRpbWVTdGFtcDtcblxuICAvKipcbiAgICogYSByZWZlcmVuY2UgdG8gd2hlbiBhIFRpbWVyIGhhcyBiZWVuIHBvdGVudGlhbGx5IHBhdXNlZFxuICAgKi9cbiAgcHVibGljIHBhdXNlZEF0OiBUaW1lU3RhbXA7XG5cbiAgZ2V0IHRpbWVMZWZ0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGltZUluTWlsbGlzZWNvbmRzIC0gdGhpcy5wYXVzZWRBdC5jaGFuZ2U7XG4gIH1cbiAgLyoqXG4gICAqIHRoZSBjdXJyZW50IHRpbWVvdXQgdGhlIG5lZWRzIHRvIGJlIGNhbmNlbGVkIHdoZW4gdGhpcyBUaW1lciBpcyBzdG9wcGVkXG4gICAqL1xuICBwcml2YXRlIGN1cnJlbnRUaW1lb3V0OiBOb2RlSlMuVGltZW91dDtcblxuICAvLyBhIGRlZmVycmVkIHRyaWdnZXRlZCB3aGVuIFRpbWVyIGhhcyBjb21wbGV0ZWRcbiAgcHJpdmF0ZSBjb21wbGV0ZWREZWZlcnJlZCA9IHBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyPHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IodGltZUluTWlsbGlzZWNvbmRzQXJnOiBudW1iZXIpIHtcbiAgICB0aGlzLnRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVJbk1pbGxpc2Vjb25kc0FyZztcbiAgICB0aGlzLmNvbXBsZXRlZCA9IHRoaXMuY29tcGxldGVkRGVmZXJyZWQucHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdGFydHMgdGhlIHRpbWVyXG4gICAqL1xuICBwdWJsaWMgc3RhcnQoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWRBdCkge1xuICAgICAgdGhpcy5jdXJyZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBsZXRlZERlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgIH0sIHRoaXMudGltZUluTWlsbGlzZWNvbmRzKTtcbiAgICAgIHRoaXMuc3RhcnRlZEF0ID0gbmV3IFRpbWVTdGFtcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbWVyIGhhcyBiZWVuIHN0YXJ0ZWQgYmVmb3JlLiBQbGVhc2UgdXNlIHJlc3VtZSBpbnN0ZWFkJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHBhdXNlKCkge1xuICAgIGlmICh0aGlzLnN0YXJ0ZWRBdCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY3VycmVudFRpbWVvdXQpO1xuICAgICAgdGhpcy5jdXJyZW50VGltZW91dCA9IG51bGw7XG4gICAgICB0aGlzLnBhdXNlZEF0ID0gVGltZVN0YW1wLmZyb21UaW1lU3RhbXAodGhpcy5zdGFydGVkQXQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXN1bWUoKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRlZEF0KSB7XG4gICAgICB0aGlzLmN1cnJlbnRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29tcGxldGVkRGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgICAgfSwgdGhpcy50aW1lTGVmdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGltZXIgaGFzIE5PVCBiZWVuIHN0YXJ0ZWQgYmVmb3JlLiBQbGVhc2UgdXNlIC5zdGFydCgpIGluc3RlYWQnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuc3RhcnRlZEF0ID0gbnVsbDtcbiAgICB0aGlzLnBhdXNlZEF0ID0gbnVsbDtcbiAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gJy4vc21hcnR0aW1lLmNsYXNzZXMuY3Jvbm1hbmFnZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zbWFydHRpbWUuY2xhc3Nlcy5jcm9uam9iLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc21hcnR0aW1lLmNsYXNzZXMuZXh0ZW5kZWRkYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc21hcnR0aW1lLmNsYXNzZXMuaHJ0bWVhc3VyZW1lbnQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zbWFydHRpbWUuY2xhc3Nlcy5pbnRlcnZhbC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0dGltZS5jbGFzc2VzLnRpbWVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc21hcnR0aW1lLmNsYXNzZXMudGltZXN0YW1wLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc21hcnR0aW1lLnVuaXRzLmpzJztcbiIsICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgU3ltYm9sVHJlZU5vZGUge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1NpYmxpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dFNpYmxpbmcgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdENoaWxkID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RDaGlsZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAvKiogVGhpcyB2YWx1ZSBpcyBpbmNyZW1lbnRlZCBhbnl0aW1lIGEgY2hpbGRyZW4gaXMgYWRkZWQgb3IgcmVtb3ZlZCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5WZXJzaW9uID0gMDtcbiAgICAgICAgICAgICAgICAvKiogVGhlIGxhc3QgY2hpbGQgb2JqZWN0IHdoaWNoIGhhcyBhIGNhY2hlZCBpbmRleCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgLyoqIFRoaXMgdmFsdWUgcmVwcmVzZW50cyB0aGUgY2FjaGVkIG5vZGUgaW5kZXgsIGFzIGxvbmcgYXNcbiAgICAgICAgICAgICAgICAgKiBjYWNoZWRJbmRleFZlcnNpb24gbWF0Y2hlcyB3aXRoIHRoZSBjaGlsZHJlblZlcnNpb24gb2YgdGhlIHBhcmVudCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjsgLy8gTmFOIGlzIG5ldmVyIGVxdWFsIHRvIGFueXRoaW5nXG4gICAgICAgIH1cblxuICAgICAgICBnZXQgaXNBdHRhY2hlZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcmVudCB8fCB0aGlzLnByZXZpb3VzU2libGluZyB8fCB0aGlzLm5leHRTaWJsaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldCBoYXNDaGlsZHJlbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLmZpcnN0Q2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRyZW5DaGFuZ2VkKCkge1xuICAgICAgICAgICAgICAgIC8qIGpzaGludCAtVzAxNiAqL1xuICAgICAgICAgICAgICAgIC8vIGludGVnZXIgd3JhcCBhcm91bmRcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuVmVyc2lvbiA9ICh0aGlzLmNoaWxkcmVuVmVyc2lvbiArIDEpICYgMHhGRkZGRkZGRjtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkSW5kZXhDYWNoZWRVcFRvID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyAoYXNzdW1lcyBwYXJlbnROb2RlIGlzIGFjdHVhbGx5IHRoZSBwYXJlbnQpXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXhWZXJzaW9uICE9PSBwYXJlbnROb2RlLmNoaWxkcmVuVmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRJbmRleFZlcnNpb24gPSBOYU47XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWNoZWRJbmRleCBpcyBubyBsb25nZXIgdmFsaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRJbmRleDsgLy8gLTEgaWYgbm90IGNhY2hlZFxuICAgICAgICB9XG5cbiAgICAgICAgc2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAvLyAoYXNzdW1lcyBwYXJlbnROb2RlIGlzIGFjdHVhbGx5IHRoZSBwYXJlbnQpXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRJbmRleFZlcnNpb24gPSBwYXJlbnROb2RlLmNoaWxkcmVuVmVyc2lvbjtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWtleXMgKi9cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIC8vIHNhbWUgYXMgRE9NIERPQ1VNRU5UX1BPU0lUSU9OX1xuICAgICAgICBESVNDT05ORUNURUQ6IDEsXG4gICAgICAgIFBSRUNFRElORzogMixcbiAgICAgICAgRk9MTE9XSU5HOiA0LFxuICAgICAgICBDT05UQUlOUzogOCxcbiAgICAgICAgQ09OVEFJTkVEX0JZOiAxNixcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgVFJFRSA9IFN5bWJvbCgpO1xuY29uc3QgUk9PVCA9IFN5bWJvbCgpO1xuY29uc3QgTkVYVCA9IFN5bWJvbCgpO1xuY29uc3QgSVRFUkFURV9GVU5DID0gU3ltYm9sKCk7XG5cbmNsYXNzIFRyZWVJdGVyYXRvciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRyZWUsIHJvb3QsIGZpcnN0UmVzdWx0LCBpdGVyYXRlRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzW1RSRUVdID0gdHJlZTtcbiAgICAgICAgICAgICAgICB0aGlzW1JPT1RdID0gcm9vdDtcbiAgICAgICAgICAgICAgICB0aGlzW05FWFRdID0gZmlyc3RSZXN1bHQ7XG4gICAgICAgICAgICAgICAgdGhpc1tJVEVSQVRFX0ZVTkNdID0gaXRlcmF0ZUZ1bmN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmVlID0gdGhpc1tUUkVFXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRlRnVuYyA9IHRoaXNbSVRFUkFURV9GVU5DXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb290ID0gdGhpc1tST09UXTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpc1tORVhUXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tORVhUXTtcblxuICAgICAgICAgICAgICAgIGlmIChpdGVyYXRlRnVuYyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuX25vZGUodmFsdWUpLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXRlcmF0ZUZ1bmMgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlKS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXRlcmF0ZUZ1bmMgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlKS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZXJhdGVGdW5jID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW05FWFRdID0gdHJlZS5wcmVjZWRpbmcodmFsdWUsIHtyb290OiByb290fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgLyogaWYgKGl0ZXJhdGVGdW5jID09PSA1KSovIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLmZvbGxvd2luZyh2YWx1ZSwge3Jvb3Q6IHJvb3R9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZUl0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLml0ZXJhdG9yLCB7XG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxufSk7XG5cblRyZWVJdGVyYXRvci5QUkVWID0gMTtcblRyZWVJdGVyYXRvci5ORVhUID0gMjtcblRyZWVJdGVyYXRvci5QQVJFTlQgPSAzO1xuVHJlZUl0ZXJhdG9yLlBSRUNFRElORyA9IDQ7XG5UcmVlSXRlcmF0b3IuRk9MTE9XSU5HID0gNTtcblxuT2JqZWN0LmZyZWV6ZShUcmVlSXRlcmF0b3IpO1xuT2JqZWN0LmZyZWV6ZShUcmVlSXRlcmF0b3IucHJvdG90eXBlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmVlSXRlcmF0b3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBtb2R1bGUgc3ltYm9sLXRyZWVcbiAqIEBhdXRob3IgSm9yaXMgdmFuIGRlciBXZWwgPGpvcmlzQGpvcmlzdmFuZGVyd2VsLmNvbT5cbiAqL1xuXG5jb25zdCBTeW1ib2xUcmVlTm9kZSA9IHJlcXVpcmUoJy4vU3ltYm9sVHJlZU5vZGUnKTtcbmNvbnN0IFRyZWVQb3NpdGlvbiA9IHJlcXVpcmUoJy4vVHJlZVBvc2l0aW9uJyk7XG5jb25zdCBUcmVlSXRlcmF0b3IgPSByZXF1aXJlKCcuL1RyZWVJdGVyYXRvcicpO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV2ZXJzZUFycmF5SW5kZXgoYXJyYXksIHJldmVyc2VJbmRleCkge1xuICAgICAgICByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMSAtIHJldmVyc2VJbmRleF07IC8vIG5vIG5lZWQgdG8gY2hlY2sgYGluZGV4ID49IDBgXG59XG5cbmNsYXNzIFN5bWJvbFRyZWUge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQGFsaWFzIG1vZHVsZTpzeW1ib2wtdHJlZVxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uPSdTeW1ib2xUcmVlIGRhdGEnXSBEZXNjcmlwdGlvbiB1c2VkIGZvciB0aGUgU3ltYm9sXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3RvcihkZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ltYm9sID0gU3ltYm9sKGRlc2NyaXB0aW9uIHx8ICdTeW1ib2xUcmVlIGRhdGEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIChvcHRpb25hbGx5KSBpbml0aWFsaXplIGFuIG9iamVjdCByaWdodCBhZnRlciBpdHMgY3JlYXRpb24sXG4gICAgICAgICAqIHRvIHRha2UgYWR2YW50YWdlIG9mIFY4J3MgZmFzdCBwcm9wZXJ0aWVzLiBBbHNvIHVzZWZ1bCBpZiB5b3Ugd291bGQgbGlrZSB0b1xuICAgICAgICAgKiBmcmVlemUgeW91ciBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBhbGlhcyBtb2R1bGU6c3ltYm9sLXRyZWUjaW5pdGlhbGl6ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBpbml0aWFsaXplKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBfbm9kZShvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG9iamVjdFt0aGlzLnN5bWJvbF07XG5cbiAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChvYmplY3RbdGhpcy5zeW1ib2xdID0gbmV3IFN5bWJvbFRyZWVOb2RlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgaGFzIGFueSBjaGlsZHJlbi4gT3RoZXJ3aXNlIGl0IHJldHVybnMgYGZhbHNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBoYXNDaGlsZHJlblxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBoYXNDaGlsZHJlbihvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLmhhc0NoaWxkcmVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBnaXZlbiBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgZmlyc3RDaGlsZFxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIGZpcnN0Q2hpbGQob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5maXJzdENoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGdpdmVuIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBsYXN0Q2hpbGRcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICBsYXN0Q2hpbGQob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5sYXN0Q2hpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgcHJldmlvdXMgc2libGluZyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHByZXZpb3VzU2libGluZ1xuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIHByZXZpb3VzU2libGluZyhvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLnByZXZpb3VzU2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBuZXh0IHNpYmxpbmcgb2YgdGhlIGdpdmVuIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBuZXh0U2libGluZ1xuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIG5leHRTaWJsaW5nKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub2RlKG9iamVjdCkubmV4dFNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJuIHRoZSBwYXJlbnQgb2YgdGhlIGdpdmVuIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBwYXJlbnRcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICBwYXJlbnQob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogRmluZCB0aGUgaW5jbHVzaXZlIGRlc2NlbmRhbnQgdGhhdCBpcyBsYXN0IGluIHRyZWUgb3JkZXIgb2YgdGhlIGdpdmVuIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTyhuKWAgKHdvcnN0IGNhc2UpIHdoZXJlIGBuYCBpcyB0aGUgZGVwdGggb2YgdGhlIHN1YnRyZWUgb2YgYG9iamVjdGBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBsYXN0SW5jbHVzaXZlRGVzY2VuZGFudFxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIGxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGxldCBsYXN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSBvYmplY3Q7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAoKGxhc3RDaGlsZCA9IHRoaXMuX25vZGUoY3VycmVudCkubGFzdENoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGxhc3RDaGlsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaW5kIHRoZSBwcmVjZWRpbmcgb2JqZWN0IChBKSBvZiB0aGUgZ2l2ZW4gb2JqZWN0IChCKS5cbiAgICAgICAgICogQW4gb2JqZWN0IEEgaXMgcHJlY2VkaW5nIGFuIG9iamVjdCBCIGlmIEEgYW5kIEIgYXJlIGluIHRoZSBzYW1lIHRyZWVcbiAgICAgICAgICogYW5kIEEgY29tZXMgYmVmb3JlIEIgaW4gdHJlZSBvcmRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTyhuKWAgKHdvcnN0IGNhc2UpXG4gICAgICAgICAqICogYE8oMSlgIChhbW9ydGl6ZWQgd2hlbiB3YWxraW5nIHRoZSBlbnRpcmUgdHJlZSlcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBwcmVjZWRpbmdcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5yb290XSBJZiBzZXQsIGByb290YCBtdXN0IGJlIGFuIGluY2x1c2l2ZSBhbmNlc3RvclxuICAgICAgICAgKiAgICAgICAgb2YgdGhlIHJldHVybiB2YWx1ZSAob3IgZWxzZSBudWxsIGlzIHJldHVybmVkKS4gVGhpcyBjaGVjayBfYXNzdW1lc19cbiAgICAgICAgICogICAgICAgIHRoYXQgYHJvb3RgIGlzIGFsc28gYW4gaW5jbHVzaXZlIGFuY2VzdG9yIG9mIHRoZSBnaXZlbiBgb2JqZWN0YFxuICAgICAgICAgKiBAcmV0dXJuIHs/T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgcHJlY2VkaW5nKG9iamVjdCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVSb290ID0gb3B0aW9ucyAmJiBvcHRpb25zLnJvb3Q7XG5cbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0ID09PSB0cmVlUm9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNTaWJsaW5nID0gdGhpcy5fbm9kZShvYmplY3QpLnByZXZpb3VzU2libGluZztcblxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KHByZXZpb3VzU2libGluZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgc2libGluZyByZXR1cm4gdGhlIHBhcmVudCAobWlnaHQgYmUgbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLnBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaW5kIHRoZSBmb2xsb3dpbmcgb2JqZWN0IChBKSBvZiB0aGUgZ2l2ZW4gb2JqZWN0IChCKS5cbiAgICAgICAgICogQW4gb2JqZWN0IEEgaXMgZm9sbG93aW5nIGFuIG9iamVjdCBCIGlmIEEgYW5kIEIgYXJlIGluIHRoZSBzYW1lIHRyZWVcbiAgICAgICAgICogYW5kIEEgY29tZXMgYWZ0ZXIgQiBpbiB0cmVlIG9yZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCAod29yc3QgY2FzZSkgd2hlcmUgYG5gIGlzIHRoZSBhbW91bnQgb2Ygb2JqZWN0cyBpbiB0aGUgZW50aXJlIHRyZWVcbiAgICAgICAgICogKiBgTygxKWAgKGFtb3J0aXplZCB3aGVuIHdhbGtpbmcgdGhlIGVudGlyZSB0cmVlKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGZvbGxvd2luZ1xuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0geyFPYmplY3R9IG9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5yb290XSBJZiBzZXQsIGByb290YCBtdXN0IGJlIGFuIGluY2x1c2l2ZSBhbmNlc3RvclxuICAgICAgICAgKiAgICAgICAgb2YgdGhlIHJldHVybiB2YWx1ZSAob3IgZWxzZSBudWxsIGlzIHJldHVybmVkKS4gVGhpcyBjaGVjayBfYXNzdW1lc19cbiAgICAgICAgICogICAgICAgIHRoYXQgYHJvb3RgIGlzIGFsc28gYW4gaW5jbHVzaXZlIGFuY2VzdG9yIG9mIHRoZSBnaXZlbiBgb2JqZWN0YFxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNraXBDaGlsZHJlbj1mYWxzZV0gSWYgc2V0LCBpZ25vcmUgdGhlIGNoaWxkcmVuIG9mIGBvYmplY3RgXG4gICAgICAgICAqIEByZXR1cm4gez9PYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICBmb2xsb3dpbmcob2JqZWN0LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJlZVJvb3QgPSBvcHRpb25zICYmIG9wdGlvbnMucm9vdDtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwQ2hpbGRyZW4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2tpcENoaWxkcmVuO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9ICFza2lwQ2hpbGRyZW4gJiYgdGhpcy5fbm9kZShvYmplY3QpLmZpcnN0Q2hpbGQ7XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSBvYmplY3Q7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PT0gdHJlZVJvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gdGhpcy5fbm9kZShjdXJyZW50KS5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRoaXMuX25vZGUoY3VycmVudCkucGFyZW50O1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQXBwZW5kIGFsbCBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIGFuIGFycmF5LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gYHBhcmVudGBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBjaGlsZHJlblRvQXJyYXlcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmVudFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0W119IFtvcHRpb25zLmFycmF5PVtdXVxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIEZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBvYmplY3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBhcnJheS5cbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aXRoIGFyZ3VtZW50cyAob2JqZWN0KS4gU2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgYW4gb2JqZWN0XG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGluY2x1ZGVkLlxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zLnRoaXNBcmddIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgYGZpbHRlcmAuXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdFtdfVxuICAgICAgICAgKi9cbiAgICAgICAgY2hpbGRyZW5Ub0FycmF5KHBhcmVudCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5ICAgPSAob3B0aW9ucyAmJiBvcHRpb25zLmFycmF5KSB8fCBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXIpIHx8IHJldHVyblRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdGhpc0FyZyA9IChvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZykgfHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocGFyZW50KTtcbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0ID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fbm9kZShvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRDYWNoZWRJbmRleChwYXJlbnROb2RlLCBpbmRleCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuY2FsbCh0aGlzQXJnLCBvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2gob2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFwcGVuZCBhbGwgaW5jbHVzaXZlIGFuY2VzdG9ycyBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIGFuIGFycmF5LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBhbmNlc3RvcnMgb2YgdGhlIGdpdmVuIGBvYmplY3RgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgYW5jZXN0b3JzVG9BcnJheVxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuYXJyYXk9W11dXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gRnVuY3Rpb24gdG8gdGVzdCBlYWNoIG9iamVjdCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFycmF5LlxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VkIHdpdGggYXJndW1lbnRzIChvYmplY3QpLiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhbiBvYmplY3RcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgaW5jbHVkZWQuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnMudGhpc0FyZ10gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgZmlsdGVyYC5cbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0W119XG4gICAgICAgICAqL1xuICAgICAgICBhbmNlc3RvcnNUb0FycmF5KG9iamVjdCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5ICAgPSAob3B0aW9ucyAmJiBvcHRpb25zLmFycmF5KSB8fCBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXIpIHx8IHJldHVyblRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdGhpc0FyZyA9IChvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZykgfHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgbGV0IGFuY2VzdG9yID0gb2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmNhbGwodGhpc0FyZywgYW5jZXN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2goYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSB0aGlzLl9ub2RlKGFuY2VzdG9yKS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFwcGVuZCBhbGwgZGVzY2VuZGFudHMgb2YgdGhlIGdpdmVuIG9iamVjdCB0byBhbiBhcnJheSAoaW4gdHJlZSBvcmRlcikuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIG9iamVjdHMgaW4gdGhlIHN1Yi10cmVlIG9mIHRoZSBnaXZlbiBgb2JqZWN0YFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHRyZWVUb0FycmF5XG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByb290XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuYXJyYXk9W11dXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gRnVuY3Rpb24gdG8gdGVzdCBlYWNoIG9iamVjdCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFycmF5LlxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VkIHdpdGggYXJndW1lbnRzIChvYmplY3QpLiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhbiBvYmplY3RcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgaW5jbHVkZWQuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnMudGhpc0FyZ10gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgZmlsdGVyYC5cbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0W119XG4gICAgICAgICAqL1xuICAgICAgICB0cmVlVG9BcnJheShyb290LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXkgICA9IChvcHRpb25zICYmIG9wdGlvbnMuYXJyYXkpIHx8IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlciAgPSAob3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcikgfHwgcmV0dXJuVHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGlzQXJnID0gKG9wdGlvbnMgJiYgb3B0aW9ucy50aGlzQXJnKSB8fCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0ID0gcm9vdDtcblxuICAgICAgICAgICAgICAgIHdoaWxlIChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuY2FsbCh0aGlzQXJnLCBvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2gob2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IHRoaXMuZm9sbG93aW5nKG9iamVjdCwge3Jvb3Q6IHJvb3R9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBjaGlsZHJlbkl0ZXJhdG9yXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnRcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJldmVyc2U9ZmFsc2VdXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNilcbiAgICAgICAgICovXG4gICAgICAgIGNoaWxkcmVuSXRlcmF0b3IocGFyZW50LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHBhcmVudCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRyZWVJdGVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlID8gcGFyZW50Tm9kZS5sYXN0Q2hpbGQgOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlID8gVHJlZUl0ZXJhdG9yLlBSRVYgOiBUcmVlSXRlcmF0b3IuTkVYVFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcHJldmlvdXMgc2libGluZ3Mgb2YgdGhlIGdpdmVuIG9iamVjdC4gKGluIHJldmVyc2UgdHJlZSBvcmRlcilcbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWAgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvblxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHByZXZpb3VzU2libGluZ3NJdGVyYXRvclxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNilcbiAgICAgICAgICovXG4gICAgICAgIHByZXZpb3VzU2libGluZ3NJdGVyYXRvcihvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRyZWVJdGVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub2RlKG9iamVjdCkucHJldmlvdXNTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUl0ZXJhdG9yLlBSRVZcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIG5leHQgc2libGluZ3Mgb2YgdGhlIGdpdmVuIG9iamVjdC4gKGluIHRyZWUgb3JkZXIpXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBuZXh0U2libGluZ3NJdGVyYXRvclxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNilcbiAgICAgICAgICovXG4gICAgICAgIG5leHRTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KS5uZXh0U2libGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVJdGVyYXRvci5ORVhUXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIGluY2x1c2l2ZSBhbmNlc3RvcnMgb2YgdGhlIGdpdmVuIG9iamVjdFxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYCBmb3IgYSBzaW5nbGUgaXRlcmF0aW9uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgYW5jZXN0b3JzSXRlcmF0b3JcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIGl0ZXJhYmxlIGl0ZXJhdG9yIChFUzYpXG4gICAgICAgICAqL1xuICAgICAgICBhbmNlc3RvcnNJdGVyYXRvcihvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRyZWVJdGVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBUcmVlSXRlcmF0b3IuUEFSRU5UXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIGRlc2NlbmRhbnRzIG9mIHRoZSBnaXZlbiBvYmplY3QgKGluIHRyZWUgb3JkZXIpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBXaGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBvYmplY3RzIGluIHRoZSBzdWItdHJlZSBvZiB0aGUgZ2l2ZW4gYHJvb3RgOlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCAod29yc3QgY2FzZSBmb3IgYSBzaW5nbGUgaXRlcmF0aW9uKVxuICAgICAgICAgKiAqIGBPKG4pYCAoYW1vcnRpemVkLCB3aGVuIGNvbXBsZXRpbmcgdGhlIGl0ZXJhdG9yKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHRyZWVJdGVyYXRvclxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcm9vdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJldmVyc2U9ZmFsc2VdXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNilcbiAgICAgICAgICovXG4gICAgICAgIHRyZWVJdGVyYXRvcihyb290LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2UgPyB0aGlzLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KHJvb3QpIDogcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2UgPyBUcmVlSXRlcmF0b3IuUFJFQ0VESU5HIDogVHJlZUl0ZXJhdG9yLkZPTExPV0lOR1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogRmluZCB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIG9iamVjdCAodGhlIG51bWJlciBvZiBwcmVjZWRpbmcgc2libGluZ3MpLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBwcmVjZWRpbmcgc2libGluZ3NcbiAgICAgICAgICogKiBgTygxKWAgKGFtb3J0aXplZCwgaWYgdGhlIHRyZWUgaXMgbm90IG1vZGlmaWVkKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGluZGV4XG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjaGlsZFxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgcHJlY2VkaW5nIHNpYmxpbmdzLCBvciAtMSBpZiB0aGUgb2JqZWN0IGhhcyBubyBwYXJlbnRcbiAgICAgICAgICovXG4gICAgICAgIGluZGV4KGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gdGhpcy5fbm9kZShjaGlsZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUoY2hpbGROb2RlLnBhcmVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHByaW5jaXBhbCwgeW91IGNvdWxkIGFsc28gZmluZCBvdXQgdGhlIG51bWJlciBvZiBwcmVjZWRpbmcgc2libGluZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBvYmplY3RzIHRoYXQgZG8gbm90IGhhdmUgYSBwYXJlbnQuIFRoaXMgbWV0aG9kIGxpbWl0cyBpdHNlbGYgb25seSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB0aGF0IGhhdmUgYSBwYXJlbnQgYmVjYXVzZSB0aGF0IGxldHMgdXMgb3B0aW1pemUgbW9yZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gY2hpbGROb2RlLmdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IG9iamVjdCA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDtcblxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLmNoaWxkSW5kZXhDYWNoZWRVcFRvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZWRVcFRvTm9kZSA9IHRoaXMuX25vZGUocGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBjYWNoZWRVcFRvTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGNhY2hlZFVwVG9Ob2RlLmdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpICsgMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fbm9kZShvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRDYWNoZWRJbmRleChwYXJlbnROb2RlLCBjdXJyZW50SW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0ID09PSBjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgKytjdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBjaGlsZDtcblxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIGNoaWxkcmVuXG4gICAgICAgICAqICogYE8oMSlgIChhbW9ydGl6ZWQsIGlmIHRoZSB0cmVlIGlzIG5vdCBtb2RpZmllZClcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBjaGlsZHJlbkNvdW50XG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnRcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgY2hpbGRyZW5Db3VudChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShwYXJlbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnROb2RlLmxhc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXgocGFyZW50Tm9kZS5sYXN0Q2hpbGQpICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb21wYXJlIHRoZSBwb3NpdGlvbiBvZiBhbiBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBvYmplY3QuIEEgYml0IHNldCBpcyByZXR1cm5lZDpcbiAgICAgICAgICpcbiAgICAgICAgICogPHVsPlxuICAgICAgICAgKiAgICAgPGxpPkRJU0NPTk5FQ1RFRCA6IDE8L2xpPlxuICAgICAgICAgKiAgICAgPGxpPlBSRUNFRElORyA6IDI8L2xpPlxuICAgICAgICAgKiAgICAgPGxpPkZPTExPV0lORyA6IDQ8L2xpPlxuICAgICAgICAgKiAgICAgPGxpPkNPTlRBSU5TIDogODwvbGk+XG4gICAgICAgICAqICAgICA8bGk+Q09OVEFJTkVEX0JZIDogMTY8L2xpPlxuICAgICAgICAgKiA8L3VsPlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiBpbiBET00sIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0XG4gICAgICAgICAqIERJU0NPTk5FQ1RFRCBuZXZlciBvY2N1cnMgd2l0aCBhbnkgb3RoZXIgYml0LlxuICAgICAgICAgKlxuICAgICAgICAgKiB3aGVyZSBgbmAgYW5kIGBtYCBhcmUgdGhlIGFtb3VudCBvZiBhbmNlc3RvcnMgb2YgYGxlZnRgIGFuZCBgcmlnaHRgO1xuICAgICAgICAgKiB3aGVyZSBgb2AgaXMgdGhlIGFtb3VudCBvZiBjaGlsZHJlbiBvZiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBgbGVmdGAgYW5kIGByaWdodGA6XG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8obiArIG0gKyBvKWAgKHdvcnN0IGNhc2UpXG4gICAgICAgICAqICogYE8obiArIG0pYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgY29tcGFyZVRyZWVQb3NpdGlvblxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbGVmdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmlnaHRcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgY29tcGFyZVRyZWVQb3NpdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgIC8vIEluIERPTSB0ZXJtczpcbiAgICAgICAgICAgICAgICAvLyBsZWZ0ID0gcmVmZXJlbmNlIC8gY29udGV4dCBvYmplY3RcbiAgICAgICAgICAgICAgICAvLyByaWdodCA9IG90aGVyXG5cbiAgICAgICAgICAgICAgICBpZiAobGVmdCA9PT0gcmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qIGpzaGludCAtVzAxNiAqL1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdEFuY2VzdG9ycyA9IFtdOyB7IC8vIGluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxlZnRBbmNlc3RvciA9IGxlZnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZWZ0QW5jZXN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRBbmNlc3RvciA9PT0gcmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJlZVBvc2l0aW9uLkNPTlRBSU5TIHwgVHJlZVBvc2l0aW9uLlBSRUNFRElORztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlciBpcyBhbmNlc3RvciBvZiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRBbmNlc3RvcnMucHVzaChsZWZ0QW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0QW5jZXN0b3IgPSB0aGlzLnBhcmVudChsZWZ0QW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHRBbmNlc3RvcnMgPSBbXTsge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJpZ2h0QW5jZXN0b3IgPSByaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJpZ2h0QW5jZXN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0QW5jZXN0b3IgPT09IGxlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJlZVBvc2l0aW9uLkNPTlRBSU5FRF9CWSB8IFRyZWVQb3NpdGlvbi5GT0xMT1dJTkc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodEFuY2VzdG9ycy5wdXNoKHJpZ2h0QW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodEFuY2VzdG9yID0gdGhpcy5wYXJlbnQocmlnaHRBbmNlc3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBjb25zdCByb290ID0gcmV2ZXJzZUFycmF5SW5kZXgobGVmdEFuY2VzdG9ycywgMCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXJvb3QgfHwgcm9vdCAhPT0gcmV2ZXJzZUFycmF5SW5kZXgocmlnaHRBbmNlc3RvcnMsIDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3RlOiB1bmxpa2UgRE9NLCBwcmVjZWRpbmcgLyBmb2xsb3dpbmcgaXMgbm90IHNldCBoZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJlZVBvc2l0aW9uLkRJU0NPTk5FQ1RFRDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBmaW5kIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yXG4gICAgICAgICAgICAgICAgbGV0IGNvbW1vbkFuY2VzdG9ySW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yc01pbkxlbmd0aCA9IE1hdGgubWluKGxlZnRBbmNlc3RvcnMubGVuZ3RoLCByaWdodEFuY2VzdG9ycy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmNlc3RvcnNNaW5MZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdEFuY2VzdG9yICA9IHJldmVyc2VBcnJheUluZGV4KGxlZnRBbmNlc3RvcnMsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmlnaHRBbmNlc3RvciA9IHJldmVyc2VBcnJheUluZGV4KHJpZ2h0QW5jZXN0b3JzLCBpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRBbmNlc3RvciAhPT0gcmlnaHRBbmNlc3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uQW5jZXN0b3JJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gaW5kZXhlcyB3aXRoaW4gdGhlIGNvbW1vbiBhbmNlc3RvclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRJbmRleCAgPSB0aGlzLmluZGV4KHJldmVyc2VBcnJheUluZGV4KGxlZnRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHRJbmRleCA9IHRoaXMuaW5kZXgocmV2ZXJzZUFycmF5SW5kZXgocmlnaHRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmlnaHRJbmRleCA8IGxlZnRJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBUcmVlUG9zaXRpb24uUFJFQ0VESU5HXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFRyZWVQb3NpdGlvbi5GT0xMT1dJTkc7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGlzIHRyZWUuXG4gICAgICAgICAqIEhhcyBubyBlZmZlY3QgaWYgYWxyZWFkeSByZW1vdmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHJlbW92ZVxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlT2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gcmVtb3ZlT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICByZW1vdmUocmVtb3ZlT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlTm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlT2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShyZW1vdmVOb2RlLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldk5vZGUgPSB0aGlzLl9ub2RlKHJlbW92ZU5vZGUucHJldmlvdXNTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlTm9kZS5uZXh0U2libGluZyk7XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUuZmlyc3RDaGlsZCA9PT0gcmVtb3ZlT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuZmlyc3RDaGlsZCA9IHJlbW92ZU5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLmxhc3RDaGlsZCA9PT0gcmVtb3ZlT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUubGFzdENoaWxkID0gcmVtb3ZlTm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS5uZXh0U2libGluZyA9IHJlbW92ZU5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG5leHROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZS5wcmV2aW91c1NpYmxpbmcgPSByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZW1vdmVOb2RlLnBhcmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZS5wcmV2aW91c1NpYmxpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUubmV4dFNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUuY2FjaGVkSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICByZW1vdmVOb2RlLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjtcblxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByZW1vdmVPYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5zZXJ0IHRoZSBnaXZlbiBvYmplY3QgYmVmb3JlIHRoZSByZWZlcmVuY2Ugb2JqZWN0LlxuICAgICAgICAgKiBgbmV3T2JqZWN0YCBpcyBub3cgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYHJlZmVyZW5jZU9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgaW5zZXJ0QmVmb3JlXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdFxuICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBpbnNlcnRCZWZvcmUocmVmZXJlbmNlT2JqZWN0LCBuZXdPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VPYmplY3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZOb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VOb2RlLnByZXZpb3VzU2libGluZyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuX25vZGUobmV3T2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VOb2RlLnBhcmVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZS5pc0F0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5ld05vZGUucGFyZW50ID0gcmVmZXJlbmNlTm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgbmV3Tm9kZS5wcmV2aW91c1NpYmxpbmcgPSByZWZlcmVuY2VOb2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICBuZXdOb2RlLm5leHRTaWJsaW5nID0gcmVmZXJlbmNlT2JqZWN0O1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUucHJldmlvdXNTaWJsaW5nID0gbmV3T2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS5uZXh0U2libGluZyA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHJlZmVyZW5jZU9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5maXJzdENoaWxkID0gbmV3T2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdPYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5zZXJ0IHRoZSBnaXZlbiBvYmplY3QgYWZ0ZXIgdGhlIHJlZmVyZW5jZSBvYmplY3QuXG4gICAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgbmV4dCBzaWJsaW5nIG9mIGByZWZlcmVuY2VPYmplY3RgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGluc2VydEFmdGVyXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdFxuICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBpbnNlcnRBZnRlcihyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dE5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlTm9kZS5wYXJlbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5ld05vZGUuaXNBdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0dpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU5vZGUucGFyZW50O1xuICAgICAgICAgICAgICAgIG5ld05vZGUucHJldmlvdXNTaWJsaW5nID0gcmVmZXJlbmNlT2JqZWN0O1xuICAgICAgICAgICAgICAgIG5ld05vZGUubmV4dFNpYmxpbmcgPSByZWZlcmVuY2VOb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmcgPSBuZXdPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV4dE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlLnByZXZpb3VzU2libGluZyA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLmxhc3RDaGlsZCA9PT0gcmVmZXJlbmNlT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmxhc3RDaGlsZCA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbkNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3T2JqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluc2VydCB0aGUgZ2l2ZW4gb2JqZWN0IGFzIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgZ2l2ZW4gcmVmZXJlbmNlIG9iamVjdC5cbiAgICAgICAgICogYG5ld09iamVjdGAgaXMgbm93IHRoZSBmaXJzdCBjaGlsZCBvZiBgcmVmZXJlbmNlT2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBwcmVwZW5kQ2hpbGRcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0XG4gICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWVcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIHByZXBlbmRDaGlsZChyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuX25vZGUobmV3T2JqZWN0KTtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGUuaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCwgbmV3T2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUubGFzdENoaWxkID0gbmV3T2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5jaGlsZHJlbkNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3T2JqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluc2VydCB0aGUgZ2l2ZW4gb2JqZWN0IGFzIHRoZSBsYXN0IGNoaWxkIG9mIHRoZSBnaXZlbiByZWZlcmVuY2Ugb2JqZWN0LlxuICAgICAgICAgKiBgbmV3T2JqZWN0YCBpcyBub3cgdGhlIGxhc3QgY2hpbGQgb2YgYHJlZmVyZW5jZU9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgYXBwZW5kQ2hpbGRcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0XG4gICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWVcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGFwcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlT2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5ld05vZGUuaXNBdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0dpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlTm9kZS5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRBZnRlcihyZWZlcmVuY2VOb2RlLmxhc3RDaGlsZCwgbmV3T2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUubGFzdENoaWxkID0gbmV3T2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5jaGlsZHJlbkNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3T2JqZWN0O1xuICAgICAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sVHJlZTtcblN5bWJvbFRyZWUuVHJlZVBvc2l0aW9uID0gVHJlZVBvc2l0aW9uO1xuIiwgIi8vID09PT09PT09PT09PT09XG4vLyBAcHVzaHJvY2tzXG4vLyA9PT09PT09PT09PT09PVxuaW1wb3J0ICogYXMgc21hcnRkZWxheSBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydGRlbGF5JztcbmltcG9ydCAqIGFzIHNtYXJ0bWF0Y2ggZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRtYXRjaCc7XG5pbXBvcnQgKiBhcyBzbWFydHByb21pc2UgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlJztcbmltcG9ydCAqIGFzIHNtYXJ0cnggZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRyeCc7XG5pbXBvcnQgKiBhcyBzbWFydHRpbWUgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnR0aW1lJztcblxuZXhwb3J0IHsgc21hcnRkZWxheSwgc21hcnRtYXRjaCwgc21hcnRwcm9taXNlLCBzbWFydHJ4LCBzbWFydHRpbWUgfTtcblxuLy8gPT09PT09PT09PT09PT1cbi8vIHRoaXJkIHBhcnR5XG4vLyA9PT09PT09PT09PT09PVxuaW1wb3J0IHN5bWJvbFRyZWUgZnJvbSAnc3ltYm9sLXRyZWUnO1xuXG5leHBvcnQgeyBzeW1ib2xUcmVlIH07XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL2NsYXNzZXMucGx1Z2lucy5qcyc7XG5cbmludGVyZmFjZSBJRXhlY3V0aW9uU2xvdDxUPiB7XG4gIGV4ZWN1dGlvbkRlZmVycmVkOiBwbHVnaW5zLnNtYXJ0cHJvbWlzZS5EZWZlcnJlZDxUPjtcbiAgZnVuY1RvRXhlY3V0ZTogKCkgPT4gUHJvbWlzZTxUPjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgbW9kZTogJ2V4Y2x1c2l2ZScgfCAnbm9uZXhjbHVzaXZlJztcbn1cblxuZXhwb3J0IGNsYXNzIEFzeW5jRXhlY3V0aW9uU3RhY2sge1xuICBwcml2YXRlIGV4ZWN1dGlvblNsb3RzOiBJRXhlY3V0aW9uU2xvdDxhbnk+W10gPSBbXTtcbiAgcHJpdmF0ZSBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgLyoqIE1heGltdW0gY29uY3VycmVudCBub24tZXhjbHVzaXZlIHRhc2tzIChJbmZpbml0eSA9IHVubGltaXRlZCkgKi9cbiAgcHJpdmF0ZSBub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeTogbnVtYmVyID0gSW5maW5pdHk7XG4gIC8qKiBDdXJyZW50bHkgcnVubmluZyBub24tZXhjbHVzaXZlIHRhc2sgY291bnQgKi9cbiAgcHJpdmF0ZSBub25FeGNsdXNpdmVDdXJyZW50Q291bnQ6IG51bWJlciA9IDA7XG4gIC8qKiBRdWV1ZSBvZiByZXNvbHZlcnMgd2FpdGluZyBmb3IgYSBub24tZXhjbHVzaXZlIHNsb3QgKi9cbiAgcHJpdmF0ZSBub25FeGNsdXNpdmVQZW5kaW5nUXVldWU6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG5cbiAgcHVibGljIGFzeW5jIGdldEV4Y2x1c2l2ZUV4ZWN1dGlvblNsb3Q8VCA9IGFueT4oXG4gICAgZnVuY0FyZzogKCkgPT4gUHJvbWlzZTxUPixcbiAgICB0aW1lb3V0QXJnPzogbnVtYmVyXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGV4ZWN1dGlvbkRlZmVycmVkID0gcGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXI8VD4oKTtcbiAgICBjb25zdCBleGVjdXRpb25TbG90OiBJRXhlY3V0aW9uU2xvdDxUPiA9IHtcbiAgICAgIGZ1bmNUb0V4ZWN1dGU6IGZ1bmNBcmcsXG4gICAgICBleGVjdXRpb25EZWZlcnJlZCxcbiAgICAgIHRpbWVvdXQ6IHRpbWVvdXRBcmcsXG4gICAgICBtb2RlOiAnZXhjbHVzaXZlJyxcbiAgICB9O1xuICAgIHRoaXMuZXhlY3V0aW9uU2xvdHMucHVzaChleGVjdXRpb25TbG90KTtcbiAgICB0aGlzLnByb2Nlc3NFeGVjdXRpb25TbG90cygpO1xuICAgIHJldHVybiBleGVjdXRpb25EZWZlcnJlZC5wcm9taXNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE5vbkV4Y2x1c2l2ZUV4ZWN1dGlvblNsb3Q8VCA9IGFueT4oXG4gICAgZnVuY0FyZzogKCkgPT4gUHJvbWlzZTxUPixcbiAgICB0aW1lb3V0QXJnPzogbnVtYmVyXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGV4ZWN1dGlvbkRlZmVycmVkID0gcGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXI8VD4oKTtcbiAgICBjb25zdCBleGVjdXRpb25TbG90OiBJRXhlY3V0aW9uU2xvdDxUPiA9IHtcbiAgICAgIGZ1bmNUb0V4ZWN1dGU6IGZ1bmNBcmcsXG4gICAgICBleGVjdXRpb25EZWZlcnJlZCxcbiAgICAgIHRpbWVvdXQ6IHRpbWVvdXRBcmcsXG4gICAgICBtb2RlOiAnbm9uZXhjbHVzaXZlJyxcbiAgICB9O1xuICAgIHRoaXMuZXhlY3V0aW9uU2xvdHMucHVzaChleGVjdXRpb25TbG90KTtcbiAgICB0aGlzLnByb2Nlc3NFeGVjdXRpb25TbG90cygpO1xuICAgIHJldHVybiBleGVjdXRpb25EZWZlcnJlZC5wcm9taXNlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgbm9uLWV4Y2x1c2l2ZSB0YXNrcy5cbiAgICogQHBhcmFtIGNvbmN1cnJlbmN5IG1pbmltdW0gMSAoSW5maW5pdHkgbWVhbnMgdW5saW1pdGVkKVxuICAgKi9cbiAgcHVibGljIHNldE5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5KGNvbmN1cnJlbmN5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShjb25jdXJyZW5jeSkgfHwgY29uY3VycmVuY3kgPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5IG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyID49IDEnKTtcbiAgICB9XG4gICAgdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuICB9XG4gIC8qKiBHZXQgdGhlIGNvbmZpZ3VyZWQgbWF4IGNvbmN1cnJlbmN5IGZvciBub24tZXhjbHVzaXZlIHRhc2tzICovXG4gIHB1YmxpYyBnZXROb25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5O1xuICB9XG4gIC8qKiBOdW1iZXIgb2Ygbm9uLWV4Y2x1c2l2ZSB0YXNrcyBjdXJyZW50bHkgcnVubmluZyAqL1xuICBwdWJsaWMgZ2V0QWN0aXZlTm9uRXhjbHVzaXZlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ub25FeGNsdXNpdmVDdXJyZW50Q291bnQ7XG4gIH1cbiAgLyoqIE51bWJlciBvZiBub24tZXhjbHVzaXZlIHRhc2tzIHdhaXRpbmcgZm9yIGEgZnJlZSBzbG90ICovXG4gIHB1YmxpYyBnZXRQZW5kaW5nTm9uRXhjbHVzaXZlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ub25FeGNsdXNpdmVQZW5kaW5nUXVldWUubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRXhlY3V0aW9uU2xvdHMoKSB7XG4gICAgaWYgKHRoaXMuaXNQcm9jZXNzaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgIHdoaWxlICh0aGlzLmV4ZWN1dGlvblNsb3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTbG90ID0gdGhpcy5leGVjdXRpb25TbG90c1swXTtcbiAgICAgIGlmIChjdXJyZW50U2xvdC5tb2RlID09PSAnZXhjbHVzaXZlJykge1xuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVFeGNsdXNpdmVTbG90KGN1cnJlbnRTbG90KTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25TbG90cy5zaGlmdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gR2F0aGVyIGFsbCBub24tZXhjbHVzaXZlIHNsb3RzIGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWVcbiAgICAgICAgY29uc3Qgbm9uRXhjbHVzaXZlU2xvdHM6IElFeGVjdXRpb25TbG90PGFueT5bXSA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5leGVjdXRpb25TbG90cy5sZW5ndGggPiAwICYmIHRoaXMuZXhlY3V0aW9uU2xvdHNbMF0ubW9kZSA9PT0gJ25vbmV4Y2x1c2l2ZScpIHtcbiAgICAgICAgICBub25FeGNsdXNpdmVTbG90cy5wdXNoKHRoaXMuZXhlY3V0aW9uU2xvdHMuc2hpZnQoKSEpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZU5vbkV4Y2x1c2l2ZVNsb3RzKG5vbkV4Y2x1c2l2ZVNsb3RzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUV4Y2x1c2l2ZVNsb3Qoc2xvdDogSUV4ZWN1dGlvblNsb3Q8YW55Pikge1xuICAgIHRyeSB7XG4gICAgICBpZiAoc2xvdC50aW1lb3V0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgc2xvdC5mdW5jVG9FeGVjdXRlKCksXG4gICAgICAgICAgcGx1Z2lucy5zbWFydGRlbGF5LmRlbGF5Rm9yKHNsb3QudGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVvdXQgcmVhY2hlZCcpO1xuICAgICAgICAgIH0pLFxuICAgICAgICBdKTtcbiAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzbG90LmZ1bmNUb0V4ZWN1dGUoKTtcbiAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVOb25FeGNsdXNpdmVTbG90cyhzbG90czogSUV4ZWN1dGlvblNsb3Q8YW55PltdKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBzbG90cy5tYXAoYXN5bmMgKHNsb3QpID0+IHtcbiAgICAgIC8vIHdhaXQgZm9yIGFuIGF2YWlsYWJsZSBub24tZXhjbHVzaXZlIHNsb3RcbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvck5vbkV4Y2x1c2l2ZVNsb3QoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGV4ZWN1dGUgd2l0aCBvcHRpb25hbCB0aW1lb3V0XG4gICAgICAgIGlmIChzbG90LnRpbWVvdXQpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICAgICAgc2xvdC5mdW5jVG9FeGVjdXRlKCksXG4gICAgICAgICAgICBwbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3Ioc2xvdC50aW1lb3V0KS50aGVuKCgpID0+IHsgdGhyb3cgbmV3IEVycm9yKCdUaW1lb3V0IHJlYWNoZWQnKTsgfSksXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2xvdC5mdW5jVG9FeGVjdXRlKCk7XG4gICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVqZWN0KGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMucmVsZWFzZU5vbkV4Y2x1c2l2ZVNsb3QoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gIH1cbiAgLyoqXG4gICAqIFdhaXQgdW50aWwgYSBub24tZXhjbHVzaXZlIHNsb3QgaXMgYXZhaWxhYmxlIChyZXNwZWN0cyBtYXggY29uY3VycmVuY3kpLlxuICAgKi9cbiAgcHJpdmF0ZSB3YWl0Rm9yTm9uRXhjbHVzaXZlU2xvdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5ub25FeGNsdXNpdmVDdXJyZW50Q291bnQgPCB0aGlzLm5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudCsrO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgICB0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudCsrO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICAvKiogUmVsZWFzZSBhIG5vbi1leGNsdXNpdmUgc2xvdCBhbmQgd2FrZSB0aGUgbmV4dCB3YWl0ZXIsIGlmIGFueS4gKi9cbiAgcHJpdmF0ZSByZWxlYXNlTm9uRXhjbHVzaXZlU2xvdCgpOiB2b2lkIHtcbiAgICB0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudC0tO1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZS5zaGlmdCgpO1xuICAgIGlmIChuZXh0KSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL2NsYXNzZXMucGx1Z2lucy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBCYWNrcHJlc3N1cmVkQXJyYXk8VD4ge1xuICBwdWJsaWMgZGF0YTogVFtdO1xuICBwcml2YXRlIGhpZ2hXYXRlck1hcms6IG51bWJlcjtcbiAgcHVibGljIGhhc1NwYWNlID0gbmV3IHBsdWdpbnMuc21hcnRyeC5yeGpzLlN1YmplY3Q8J2hhc1NwYWNlJz4oKTtcbiAgcHJpdmF0ZSBpdGVtc0F2YWlsYWJsZSA9IG5ldyBwbHVnaW5zLnNtYXJ0cngucnhqcy5TdWJqZWN0PCdpdGVtc0F2YWlsYWJsZSc+KCk7XG5cbiAgY29uc3RydWN0b3IoaGlnaFdhdGVyTWFyazogbnVtYmVyID0gMTYpIHtcbiAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrO1xuICB9XG5cbiAgcHVzaChpdGVtOiBUKTogYm9vbGVhbiB7XG4gICAgdGhpcy5kYXRhLnB1c2goaXRlbSk7XG4gICAgdGhpcy5pdGVtc0F2YWlsYWJsZS5uZXh0KCdpdGVtc0F2YWlsYWJsZScpO1xuICAgIFxuICAgIGNvbnN0IHNwYWNlQXZhaWxhYmxlID0gdGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCk7XG4gICAgaWYgKHNwYWNlQXZhaWxhYmxlKSB7XG4gICAgICB0aGlzLmhhc1NwYWNlLm5leHQoJ2hhc1NwYWNlJyk7XG4gICAgfVxuICAgIHJldHVybiBzcGFjZUF2YWlsYWJsZTtcbiAgfVxuXG4gIHNoaWZ0KCk6IFQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGEuc2hpZnQoKTtcbiAgICBpZiAodGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCkpIHtcbiAgICAgIHRoaXMuaGFzU3BhY2UubmV4dCgnaGFzU3BhY2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICBjaGVja1NwYWNlQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoIDwgdGhpcy5oaWdoV2F0ZXJNYXJrO1xuICB9XG5cbiAgcHVibGljIGNoZWNrSGFzSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPiAwO1xuICB9XG5cbiAgd2FpdEZvclNwYWNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hlY2tTcGFjZUF2YWlsYWJsZSgpKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuaGFzU3BhY2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgd2FpdEZvckl0ZW1zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuaXRlbXNBdmFpbGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCAiLyogPT09PT09PT09PT09XG5UaGUgRmFzdE1hcCBoYXMgdGhlIGdvYWwgb2YgY3JlYXRpbmcgdGhlIGZhc3RlcyB0byB1c2UgbWFwIHBvc3NpYmxlIGluIEpTXG5cbj09PT09PT09PT09PSAqL1xuXG5pbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vY2xhc3Nlcy5wbHVnaW5zLmpzJztcblxuLyoqXG4gKiBmYXN0IG1hcCBhbGxvd3MgZm9yIHZlcnkgcXVpY2sgbG9va3VwcyBvZiBvYmplY3RzIHdpdGggYSB1bmlxdWUga2V5XG4gKi9cbmV4cG9ydCBjbGFzcyBGYXN0TWFwPFQ+IHtcbiAgcHJpdmF0ZSBtYXBPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogVCB9ID0ge307XG5cbiAgcHVibGljIGlzVW5pcXVlS2V5KGtleUFyZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWFwT2JqZWN0W2tleUFyZ10gPyBmYWxzZSA6IHRydWU7XG4gIH1cblxuICBwdWJsaWMgYWRkVG9NYXAoXG4gICAga2V5QXJnOiBzdHJpbmcsXG4gICAgb2JqZWN0QXJnOiBULFxuICAgIG9wdGlvbnNBcmc/OiB7XG4gICAgICBmb3JjZTogYm9vbGVhbjtcbiAgICB9XG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzVW5pcXVlS2V5KGtleUFyZykgfHwgKG9wdGlvbnNBcmcgJiYgb3B0aW9uc0FyZy5mb3JjZSkpIHtcbiAgICAgIHRoaXMubWFwT2JqZWN0W2tleUFyZ10gPSBvYmplY3RBcmc7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRCeUtleShrZXlBcmc6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm1hcE9iamVjdFtrZXlBcmddO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUZyb21NYXAoa2V5QXJnOiBzdHJpbmcpOiBUIHtcbiAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5QXJnKTtcbiAgICBkZWxldGUgdGhpcy5tYXBPYmplY3Rba2V5QXJnXTtcbiAgICByZXR1cm4gcmVtb3ZlZEl0ZW07XG4gIH1cblxuICBwdWJsaWMgZ2V0S2V5cygpIHtcbiAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMubWFwT2JqZWN0KSB7XG4gICAgICBpZiAodGhpcy5tYXBPYmplY3Rba2V5QXJnXSkge1xuICAgICAgICBrZXlzLnB1c2goa2V5QXJnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cblxuICBwdWJsaWMgY2xlYW4oKSB7XG4gICAgdGhpcy5tYXBPYmplY3QgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgbmV3IEZhc3RtYXAgdGhhdCBpbmNsdWRlcyBhbGwgdmFsdWVzIGZyb20gdGhpcyBhbmQgYWxsIGZyb20gdGhlIGZhc3RtYXAgaW4gdGhlIGFyZ3VtZW50XG4gICAqL1xuICBwdWJsaWMgY29uY2F0KGZhc3RNYXBBcmc6IEZhc3RNYXA8VD4pIHtcbiAgICBjb25zdCBjb25jYXRlZEZhc3RtYXAgPSBuZXcgRmFzdE1hcDxUPigpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMuZ2V0S2V5cygpKSB7XG4gICAgICBjb25jYXRlZEZhc3RtYXAuYWRkVG9NYXAoa2V5LCB0aGlzLmdldEJ5S2V5KGtleSkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGZhc3RNYXBBcmcuZ2V0S2V5cygpKSB7XG4gICAgICBjb25jYXRlZEZhc3RtYXAuYWRkVG9NYXAoa2V5LCBmYXN0TWFwQXJnLmdldEJ5S2V5KGtleSksIHtcbiAgICAgICAgZm9yY2U6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uY2F0ZWRGYXN0bWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIHRyaWVzIHRvIG1lcmdlIGFub3RoZXIgRmFzdG1hcFxuICAgKiBOb3RlOiB1bmlxdWVLZXlDb2xsaXNpb25zIHdpbGwgY2F1c2Ugb3ZlcndyaXRlXG4gICAqIEBwYXJhbSBmYXN0TWFwQXJnXG4gICAqL1xuICBwdWJsaWMgYWRkQWxsRnJvbU90aGVyKGZhc3RNYXBBcmc6IEZhc3RNYXA8VD4pIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmYXN0TWFwQXJnLmdldEtleXMoKSkge1xuICAgICAgdGhpcy5hZGRUb01hcChrZXksIGZhc3RNYXBBcmcuZ2V0QnlLZXkoa2V5KSwge1xuICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmaW5kKGZpbmRGdW5jdGlvbkFyZzogKG1hcEl0ZW1Bcmc6IFQpID0+IFByb21pc2U8Ym9vbGVhbj4pIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmdldEtleXMoKSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5KTtcbiAgICAgIGNvbnN0IGZpbmRGdW5jdGlvblJlc3VsdCA9IGF3YWl0IGZpbmRGdW5jdGlvbkFyZyhpdGVtKTtcbiAgICAgIGlmIChmaW5kRnVuY3Rpb25SZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL2NsYXNzZXMucGx1Z2lucy5qcyc7XG5pbXBvcnQgeyBGYXN0TWFwIH0gZnJvbSAnLi9jbGFzc2VzLmZhc3RtYXAuanMnO1xuXG5leHBvcnQgY29uc3QgdW5pID0gKHByZWZpeDogc3RyaW5nID0gJ3VuaScpID0+IHtcbiAgcmV0dXJuIGAke3ByZWZpeH14eHh4eHh4eHh4eGAucmVwbGFjZSgvW3h5XS9nLCAoYykgPT4ge1xuICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDA7XG4gICAgY29uc3QgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDg7XG4gICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU9iamVjdG1hcEZvckVhY2hGdW5jdGlvbjxUPiB7XG4gIChpdGVtQXJnOiBUKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT2JqZWN0bWFwRmluZEZ1bmN0aW9uU3luYzxUPiB7XG4gIChpdGVtQXJnOiBUKTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT2JqZWN0bWFwRmluZEZ1bmN0aW9uPFQ+IHtcbiAgKGl0ZW1Bcmc6IFQpOiBQcm9taXNlPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPYmplY3RNYXBFdmVudERhdGE8VD4ge1xuICBvcGVyYXRpb246ICdhZGQnIHwgJ3JlbW92ZSc7XG4gIHBheWxvYWQ6IFQ7XG59XG5cbi8qKlxuICogYWxsb3dzIGtlZXBpbmcgdHJhY2sgb2Ygb2JqZWN0c1xuICovXG5leHBvcnQgY2xhc3MgT2JqZWN0TWFwPFQ+IHtcbiAgcHJpdmF0ZSBmYXN0TWFwID0gbmV3IEZhc3RNYXA8VD4oKTtcblxuICAvLyBldmVudHNcbiAgcHVibGljIGV2ZW50U3ViamVjdCA9IG5ldyBwbHVnaW5zLnNtYXJ0cngucnhqcy5TdWJqZWN0PElPYmplY3RNYXBFdmVudERhdGE8VD4+KCk7XG5cbiAgLyoqXG4gICAqIHJldHVybnMgYSBuZXcgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIG5vdGhpbmcgaGVyZVxuICB9XG5cbiAgLyoqXG4gICAqIGFkZHMgYW4gb2JqZWN0IG1hcHBlZCB0byBhIHN0cmluZ1xuICAgKiB0aGUgc3RyaW5nIG11c3QgYmUgdW5pcXVlXG4gICAqL1xuICBhZGRNYXBwZWRVbmlxdWUodW5pcXVlS2V5QXJnOiBzdHJpbmcsIG9iamVjdEFyZzogVCkge1xuICAgIHRoaXMuZmFzdE1hcC5hZGRUb01hcCh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZyk7XG4gIH1cblxuICAvKipcbiAgICogZmFzdGVzdCB3YXkgdG8gZ2V0IGFuIG9iamVjdCBmcm9tIHRoZSBtYXBcbiAgICogQHBhcmFtIHVuaXF1ZUtleVxuICAgKi9cbiAgcHVibGljIGdldE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmc6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZhc3RNYXAuZ2V0QnlLZXkodW5pcXVlS2V5QXJnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUga2V5XG4gICAqIEBwYXJhbSBmdW5jdGlvbkFyZ1xuICAgKi9cbiAgcHVibGljIHJlbW92ZU1hcHBlZFVuaXF1ZSh1bmlxdWVLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuZ2V0TWFwcGVkVW5pcXVlKHVuaXF1ZUtleSk7XG4gIH1cblxuICAvKipcbiAgICogYWRkIG9iamVjdCB0byBPYmplY3RtYXBcbiAgICogcmV0dXJucyBmYWxzZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1hcFxuICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5XG4gICAqL1xuICBwdWJsaWMgYWRkKG9iamVjdEFyZzogVCk6IHN0cmluZyB7XG4gICAgLy8gbGV0cyBzZWFyY2ggZm9yIGFuIGV4aXN0aW5nIHVuaXF1ZSBrZXlcbiAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7XG4gICAgICBjb25zdCBvYmplY3QgPSB0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKTtcbiAgICAgIGlmIChvYmplY3QgPT09IG9iamVjdEFyZykge1xuICAgICAgICByZXR1cm4ga2V5QXJnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG90aGVyd2lzZSBsZXRzIGNyZWF0ZSBpdFxuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHVuaSgna2V5Jyk7XG4gICAgdGhpcy5hZGRNYXBwZWRVbmlxdWUodW5pcXVlS2V5LCBvYmplY3RBcmcpO1xuICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoe1xuICAgICAgb3BlcmF0aW9uOiAnYWRkJyxcbiAgICAgIHBheWxvYWQ6IG9iamVjdEFyZyxcbiAgICB9KTtcbiAgICByZXR1cm4gdW5pcXVlS2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIGxpa2UgLmFkZCBidXQgYWRkcyBhbiB3aG9sZSBhcnJheSBvZiBvYmplY3RzXG4gICAqL1xuICBwdWJsaWMgYWRkQXJyYXkob2JqZWN0QXJyYXlBcmc6IFRbXSkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmplY3RBcnJheUFyZykge1xuICAgICAgdGhpcy5hZGQoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIG9iamVjdCBpcyBpbiBPYmplY3RtYXBcbiAgICovXG4gIHB1YmxpYyBjaGVja0Zvck9iamVjdChvYmplY3RBcmc6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmdldEtleUZvck9iamVjdChvYmplY3RBcmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBrZXkgZm9yIG9iamVjdFxuICAgKiBAcGFyYW0gZmluZEZ1bmN0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZzogVCkge1xuICAgIGxldCBmb3VuZEtleTogc3RyaW5nID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7XG4gICAgICBpZiAoIWZvdW5kS2V5ICYmIHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpID09PSBvYmplY3RBcmcpIHtcbiAgICAgICAgZm91bmRLZXkgPSBrZXlBcmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kS2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIGZpbmQgb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZmluZChmaW5kRnVuY3Rpb246IElPYmplY3RtYXBGaW5kRnVuY3Rpb248VD4pOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmZpbmQoZmluZEZ1bmN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU3luYyhmaW5kRnVuY3Rpb246IElPYmplY3RtYXBGaW5kRnVuY3Rpb25TeW5jPFQ+KTogVCB7XG4gICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkge1xuICAgICAgaWYgKGZpbmRGdW5jdGlvbih0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWFwcGVkVW5pcXVlKGtleUFyZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGZpbmRzIGEgc3BlY2lmaWMgZWxlbWVudCBhbmQgdGhlbiByZW1vdmVzIGl0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZmluZE9uZUFuZFJlbW92ZShmaW5kRnVuY3Rpb246IElPYmplY3RtYXBGaW5kRnVuY3Rpb248VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBmb3VuZEVsZW1lbnQgPSBhd2FpdCB0aGlzLmZpbmQoZmluZEZ1bmN0aW9uKTtcbiAgICBpZiAoZm91bmRFbGVtZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZShmb3VuZEVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gZm91bmRFbGVtZW50O1xuICB9XG4gIHB1YmxpYyBmaW5kT25lQW5kUmVtb3ZlU3luYyhmaW5kRnVuY3Rpb246IElPYmplY3RtYXBGaW5kRnVuY3Rpb25TeW5jPFQ+KTogVCB7XG4gICAgY29uc3QgZm91bmRFbGVtZW50ID0gdGhpcy5maW5kU3luYyhmaW5kRnVuY3Rpb24pO1xuICAgIGlmIChmb3VuZEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGZvdW5kRWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogcnVuIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0gaW4gT2JqZWN0bWFwXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZm9yRWFjaChmdW5jdGlvbkFyZzogSU9iamVjdG1hcEZvckVhY2hGdW5jdGlvbjxUPikge1xuICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHtcbiAgICAgIGF3YWl0IGZ1bmN0aW9uQXJnKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0cyBhbiBvYmplY3QgaW4gdGhlIE9ic2VydmFibGVtYXAgYW5kIHJlbW92ZXMgaXQsIHNvIGl0IGNhbid0IGJlIHJldHJpZXZlZCBhZ2FpblxuICAgKi9cbiAgcHVibGljIGdldE9uZUFuZFJlbW92ZSgpOiBUIHtcbiAgICBjb25zdCBrZXlzID0gdGhpcy5mYXN0TWFwLmdldEtleXMoKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXlUb1VzZSA9IGtleXNbMF07XG4gICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGtleVRvVXNlKTtcbiAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoe1xuICAgICAgICBvcGVyYXRpb246ICdyZW1vdmUnLFxuICAgICAgICBwYXlsb2FkOiByZW1vdmVkSXRlbSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbW92ZWRJdGVtO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgY2xvbmVkIGFycmF5IG9mIGFsbCB0aGUgb2JqZWN0cyBjdXJyZW50bHkgaW4gdGhlIE9iamVjdG1hcFxuICAgKi9cbiAgcHVibGljIGdldEFycmF5KCk6IFRbXSB7XG4gICAgY29uc3QgcmV0dXJuQXJyYXk6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkge1xuICAgICAgcmV0dXJuQXJyYXkucHVzaCh0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKSk7XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5BcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiBPYmplY3RtYXAgaXN0IGVtcHR5XG4gICAqL1xuICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmdldEtleXMoKS5sZW5ndGggPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlIG9iamVjdCBmcm9tIE9iamVjdG1hcFxuICAgKi9cbiAgcHVibGljIHJlbW92ZShvYmplY3RBcmc6IFQpOiBUIHtcbiAgICBpZiAodGhpcy5jaGVja0Zvck9iamVjdChvYmplY3RBcmcpKSB7XG4gICAgICBjb25zdCBrZXlBcmcgPSB0aGlzLmdldEtleUZvck9iamVjdChvYmplY3RBcmcpO1xuICAgICAgY29uc3QgcmVtb3ZlZE9iamVjdCA9IHRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGtleUFyZyk7XG4gICAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHtcbiAgICAgICAgb3BlcmF0aW9uOiAncmVtb3ZlJyxcbiAgICAgICAgcGF5bG9hZDogcmVtb3ZlZE9iamVjdCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbW92ZWRPYmplY3Q7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIHdpcGUgT2JqZWN0bWFwXG4gICAqL1xuICBwdWJsaWMgd2lwZSgpIHtcbiAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7XG4gICAgICB0aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChrZXlBcmcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgbmV3IE9iamVjdG1hcCB0aGF0IGluY2x1ZGVzXG4gICAqL1xuICBwdWJsaWMgY29uY2F0KG9iamVjdE1hcEFyZzogT2JqZWN0TWFwPFQ+KSB7XG4gICAgY29uc3QgY29uY2F0dGVkT2JqZWN0TWFwID0gbmV3IE9iamVjdE1hcDxUPigpO1xuICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcih0aGlzLmZhc3RNYXApO1xuICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcuZmFzdE1hcCk7XG4gICAgcmV0dXJuIGNvbmNhdHRlZE9iamVjdE1hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiB0cmllcyB0byBtZXJnZSBhbm90aGVyIE9iamVjdG1hcFxuICAgKiBOb3RlOiB1bmlxdWVLZXlDb2xsaXNpb25zIHdpbGwgY2F1c2Ugb3ZlcndyaXRlXG4gICAqIEBwYXJhbSBvYmplY3RNYXBBcmdcbiAgICovXG4gIHB1YmxpYyBhZGRBbGxGcm9tT3RoZXIob2JqZWN0TWFwQXJnOiBPYmplY3RNYXA8VD4pIHtcbiAgICB0aGlzLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKG9iamVjdE1hcEFyZy5mYXN0TWFwKTtcbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9jbGFzc2VzLnBsdWdpbnMuanMnO1xuXG5pbXBvcnQgeyBJbnRlcmVzdE1hcCwgdHlwZSBJSW50ZXJlc3RDb21wYXJpc29uRnVuYyB9IGZyb20gJy4vY2xhc3Nlcy5pbnRlcmVzdG1hcC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUludGVyZXN0T3B0aW9uczxEVEludGVyZXN0RnVsbGZpbGxtZW50PiB7XG4gIG1hcmtMb3N0QWZ0ZXJEZWZhdWx0OiBudW1iZXI7XG4gIGRlZmF1bHRGdWxsZmlsbG1lbnQ/OiBEVEludGVyZXN0RnVsbGZpbGxtZW50O1xufVxuXG5leHBvcnQgY2xhc3MgSW50ZXJlc3Q8RFRJbnRlcmVzdElkLCBEVEludGVyZXN0RnVsbGZpbGxtZW50PiB7XG4gIHB1YmxpYyBvcHRpb25zOiBJSW50ZXJlc3RPcHRpb25zPERUSW50ZXJlc3RGdWxsZmlsbG1lbnQ+O1xuXG4gIHByaXZhdGUgaW50ZXJlc3RNYXBSZWY6IEludGVyZXN0TWFwPERUSW50ZXJlc3RJZCwgRFRJbnRlcmVzdEZ1bGxmaWxsbWVudD47XG4gIHB1YmxpYyBvcmlnaW5hbEludGVyZXN0OiBEVEludGVyZXN0SWQ7XG4gIHB1YmxpYyBjb21wYXJpc29uRnVuYzogSUludGVyZXN0Q29tcGFyaXNvbkZ1bmM8RFRJbnRlcmVzdElkPjtcbiAgcHVibGljIGRlc3RydWN0aW9uVGltZXIgPSBuZXcgcGx1Z2lucy5zbWFydHRpbWUuVGltZXIoMTAwMDApO1xuICBwdWJsaWMgaXNGdWxsZmlsbGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIGEgZ2VuZXJpYyBzdG9yZSB0byBzdG9yZSBvYmplY3RzIGluIHRoYXQgYXJlIG5lZWRlZCBmb3IgZnVsbGZpbGxtZW50O1xuICAgKi9cbiAgcHVibGljIGZ1bGxmaWxsbWVudFN0b3JlOiBhbnlbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBxdWljayBhY2Nlc3MgdG8gYSBzdHJpbmcgdGhhdCBtYWtlcyB0aGUgaW50ZXJlc3QgY29tcGFyYWJsZSBmb3IgY2hlY2tpbmcgZm9yIHNpbWlsYXIgaW50ZXJlc3RzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbXBhcmlzb25TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGFyaXNvbkZ1bmModGhpcy5vcmlnaW5hbEludGVyZXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgaW50ZXJlc3REZWZlcnJlZDogcGx1Z2lucy5zbWFydHByb21pc2UuRGVmZXJyZWQ8RFRJbnRlcmVzdEZ1bGxmaWxsbWVudD4gPVxuICAgIG5ldyBwbHVnaW5zLnNtYXJ0cHJvbWlzZS5EZWZlcnJlZCgpO1xuICBwdWJsaWMgaW50ZXJlc3RGdWxsZmlsbGVkID0gdGhpcy5pbnRlcmVzdERlZmVycmVkLnByb21pc2U7XG5cbiAgLyoqXG4gICAqIGZ1bGxmaWxsIHRoZSBpbnRlcmVzdFxuICAgKi9cbiAgcHVibGljIGZ1bGxmaWxsSW50ZXJlc3Qob2JqZWN0QXJnOiBEVEludGVyZXN0RnVsbGZpbGxtZW50KSB7XG4gICAgdGhpcy5pc0Z1bGxmaWxsZWQgPSB0cnVlO1xuICAgIHRoaXMuZnVsbGZpbGxtZW50U3RvcmUgPSBbXTtcbiAgICB0aGlzLmludGVyZXN0RGVmZXJyZWQucmVzb2x2ZShvYmplY3RBcmcpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBpbnRlcmVzdE1hcEFyZzogSW50ZXJlc3RNYXA8RFRJbnRlcmVzdElkLCBEVEludGVyZXN0RnVsbGZpbGxtZW50PixcbiAgICBpbnRlcmVzdEFyZzogRFRJbnRlcmVzdElkLFxuICAgIGNvbXBhcmlzb25GdW5jQXJnOiBJSW50ZXJlc3RDb21wYXJpc29uRnVuYzxEVEludGVyZXN0SWQ+LFxuICAgIG9wdGlvbnNBcmc/OiBJSW50ZXJlc3RPcHRpb25zPERUSW50ZXJlc3RGdWxsZmlsbG1lbnQ+XG4gICkge1xuICAgIHRoaXMuaW50ZXJlc3RNYXBSZWYgPSBpbnRlcmVzdE1hcEFyZztcbiAgICB0aGlzLm9yaWdpbmFsSW50ZXJlc3QgPSBpbnRlcmVzdEFyZztcbiAgICB0aGlzLmNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmNBcmc7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZztcblxuICAgIHRoaXMuZGVzdHJ1Y3Rpb25UaW1lci5jb21wbGV0ZWQudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5vcHRpb25zPy5tYXJrTG9zdEFmdGVyRGVmYXVsdCkge1xuICAgICAgcGx1Z2lucy5zbWFydGRlbGF5LmRlbGF5Rm9yKHRoaXMub3B0aW9ucy5tYXJrTG9zdEFmdGVyRGVmYXVsdCkudGhlbih0aGlzLm1hcmtMb3N0KTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExJRkVDWUNMRSBNQU5BR0VNRU5UXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogc2VsZiBkZXN0cnVjdHMgdGhlIGludGVyZXN0XG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpIHtcbiAgICB0aGlzLmludGVyZXN0TWFwUmVmLnJlbW92ZUludGVyZXN0KHRoaXMpO1xuICAgIGlmICghdGhpcy5pc0Z1bGxmaWxsZWQgJiYgdGhpcy5vcHRpb25zLmRlZmF1bHRGdWxsZmlsbG1lbnQpIHtcbiAgICAgIHRoaXMuZnVsbGZpbGxJbnRlcmVzdCh0aGlzLm9wdGlvbnMuZGVmYXVsdEZ1bGxmaWxsbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG5vdGlmaWVzIHRoZSBpbnRlcmVzdCB0aGF0IHRoZSBpbnRlcmVzdCBpbiBpdCBoYXMgYmVlbiBsb3N0XG4gICAqL1xuICBwdWJsaWMgbWFya0xvc3QoKSB7XG4gICAgdGhpcy5kZXN0cnVjdGlvblRpbWVyLnN0YXJ0KCk7XG4gIH1cblxuICAvKipcbiAgICogbm90aWZpZXMgdGhlIGludGVyZXN0IHRoYXQgdGhlIGludGVyZXN0IGluIGl0IGhhcyBiZWVuIHJlc3RvcmVkXG4gICAqL1xuICBwdWJsaWMgcmVuZXcoKSB7XG4gICAgdGhpcy5kZXN0cnVjdGlvblRpbWVyLnJlc2V0KCk7XG4gIH1cbn1cbiIsICIvKiA9PT09PT09PT09PVxuVGhlIEludGVyZXN0TWFwIGlzIGFuIG1lY2hhbmlzbSB0aGF0IGNvbGxlY3RzIGludGVyZXN0cyBpbnRvIHNvbWV0aGluZ1xuQW4gaW50ZXJlc3QgaXMgZXhwcmVzc2VkIGJ5IGFuIG9iamVjdCwgc3RyaW5nIG9yIG51bWJlci5cbkEgY29tcGFyaXNvbiBmdW5jIGNhbiBiZSBzcGVjaWZpZWQgdG8gbWFrZSBpbnRlcmVzdHMgY29tcGFyYWJsZVxuXG5Gb3IgZXZlcnkgdW5pcXVlIGludGVyZXN0SWQgYW4gaW50ZXJlc3QgaXMgY3JlYXRlZC5cblN1YnNzZXF1ZW50IGludGVyZXN0cyB3aWxsIGJlIG1hcHBlZCB0byB0aGUgc2FtZSBpbnRlcmVzdFxud2hpY2ggaXMgdGhlbiBpcyBvbmx5IGZ1bGxmaWxsZWQgb25jZS5cbj09PT09PT09PT09ICovXG5cbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9jbGFzc2VzLnBsdWdpbnMuanMnO1xuaW1wb3J0IHsgT2JqZWN0TWFwIH0gZnJvbSAnLi9jbGFzc2VzLm9iamVjdG1hcC5qcyc7XG5pbXBvcnQgeyBJbnRlcmVzdCB9IGZyb20gJy4vY2xhc3Nlcy5pbnRlcmVzdG1hcC5pbnRlcmVzdC5qcyc7XG5cbmV4cG9ydCB0eXBlIElJbnRlcmVzdENvbXBhcmlzb25GdW5jPFQ+ID0gKG9iamVjdEFyZzogVCkgPT4gc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIElJbnRlcmVzdE1hcE9wdGlvbnMge1xuICBtYXJrTG9zdEFmdGVyRGVmYXVsdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEludGVyZXN0TWFwPERUSW50ZXJlc3RJZCwgRFRJbnRlcmVzdEZ1bGxmaWxsbWVudD4ge1xuICBwdWJsaWMgb3B0aW9uczogSUludGVyZXN0TWFwT3B0aW9ucztcblxuICAvKipcbiAgICogc3RvcmVzIGludGVyZXN0cyB0aGF0IGFyZSBjdXJyZW50bHkgZnVsbGZpbGxlZCBieSB0aGUgY2FjaGVcbiAgICovXG4gIHByaXZhdGUgaW50ZXJlc3RPYmplY3RNYXAgPSBuZXcgT2JqZWN0TWFwPEludGVyZXN0PERUSW50ZXJlc3RJZCwgRFRJbnRlcmVzdEZ1bGxmaWxsbWVudD4+KCk7XG5cbiAgLyoqXG4gICAqIGEgZnVuY3Rpb24gdG8gY29tcGFyZSBpbnRlcmVzdHNcbiAgICovXG4gIHByaXZhdGUgY29tcGFyaXNvbkZ1bmM6IElJbnRlcmVzdENvbXBhcmlzb25GdW5jPERUSW50ZXJlc3RJZD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY29tcGFyaXNvbkZ1bmNBcmc6IElJbnRlcmVzdENvbXBhcmlzb25GdW5jPERUSW50ZXJlc3RJZD4sXG4gICAgb3B0aW9uc0FyZzogSUludGVyZXN0TWFwT3B0aW9ucyA9IHt9XG4gICkge1xuICAgIHRoaXMuY29tcGFyaXNvbkZ1bmMgPSBjb21wYXJpc29uRnVuY0FyZztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnO1xuICB9XG5cbiAgLyoqXG4gICAqIGFkZHMgYW4gaW50ZXJlc3QgdG8gdGhlIEludGVyZXN0TWFwXG4gICAqIEBwYXJhbSBpbnRlcmVzdElkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYWRkSW50ZXJlc3QoXG4gICAgaW50ZXJlc3RJZDogRFRJbnRlcmVzdElkLFxuICAgIGRlZmF1bHRGdWxsZmlsbG1lbnRBcmc/OiBEVEludGVyZXN0RnVsbGZpbGxtZW50XG4gICk6IFByb21pc2U8SW50ZXJlc3Q8RFRJbnRlcmVzdElkLCBEVEludGVyZXN0RnVsbGZpbGxtZW50Pj4ge1xuICAgIGNvbnN0IGNvbXBhcmlzb25TdHJpbmcgPSB0aGlzLmNvbXBhcmlzb25GdW5jKGludGVyZXN0SWQpO1xuICAgIGxldCByZXR1cm5JbnRlcmVzdDogSW50ZXJlc3Q8RFRJbnRlcmVzdElkLCBEVEludGVyZXN0RnVsbGZpbGxtZW50PjtcbiAgICBjb25zdCBuZXdJbnRlcmVzdCA9IG5ldyBJbnRlcmVzdDxEVEludGVyZXN0SWQsIERUSW50ZXJlc3RGdWxsZmlsbG1lbnQ+KFxuICAgICAgdGhpcyxcbiAgICAgIGludGVyZXN0SWQsXG4gICAgICB0aGlzLmNvbXBhcmlzb25GdW5jLFxuICAgICAge1xuICAgICAgICBtYXJrTG9zdEFmdGVyRGVmYXVsdDogdGhpcy5vcHRpb25zLm1hcmtMb3N0QWZ0ZXJEZWZhdWx0LFxuICAgICAgICBkZWZhdWx0RnVsbGZpbGxtZW50OiBkZWZhdWx0RnVsbGZpbGxtZW50QXJnLFxuICAgICAgfVxuICAgICk7XG4gICAgbGV0IGludGVyZXN0RXhpc3RzID0gZmFsc2U7XG4gICAgYXdhaXQgdGhpcy5pbnRlcmVzdE9iamVjdE1hcC5mb3JFYWNoKChpbnRlcmVzdEFyZykgPT4ge1xuICAgICAgaWYgKCFpbnRlcmVzdEV4aXN0cyAmJiBpbnRlcmVzdEFyZy5jb21wYXJpc29uU3RyaW5nID09PSBuZXdJbnRlcmVzdC5jb21wYXJpc29uU3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpbmZvJywgYGludGVyZXN0IGFscmVhZHkgZXhpc3RzIGZvciAke25ld0ludGVyZXN0LmNvbXBhcmlzb25TdHJpbmd9YCk7XG4gICAgICAgIGludGVyZXN0RXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuSW50ZXJlc3QgPSBpbnRlcmVzdEFyZztcbiAgICAgICAgcmV0dXJuSW50ZXJlc3QucmVuZXcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXJldHVybkludGVyZXN0KSB7XG4gICAgICByZXR1cm5JbnRlcmVzdCA9IG5ld0ludGVyZXN0O1xuICAgICAgdGhpcy5pbnRlcmVzdE9iamVjdE1hcC5hZGQocmV0dXJuSW50ZXJlc3QpO1xuICAgIH1cbiAgICB0aGlzLmludGVyZXN0T2JzZXJ2YWJsZS5wdXNoKHJldHVybkludGVyZXN0KTtcbiAgICByZXR1cm4gcmV0dXJuSW50ZXJlc3Q7XG4gIH1cblxuICBwdWJsaWMgaW50ZXJlc3RPYnNlcnZhYmxlID0gbmV3IHBsdWdpbnMuc21hcnRyeC5PYnNlcnZhYmxlSW50YWtlPEludGVyZXN0PERUSW50ZXJlc3RJZCwgYW55Pj4oKTtcblxuICAvKipcbiAgICogcmVtb3ZlcyBhbiBpbnRlcmVzdCBmcm9tIHRoZSBpbnRlcmVzdCBtYXBcbiAgICovXG4gIHB1YmxpYyByZW1vdmVJbnRlcmVzdChpbnRlcmVzdEFyZzogSW50ZXJlc3Q8RFRJbnRlcmVzdElkLCBEVEludGVyZXN0RnVsbGZpbGxtZW50Pikge1xuICAgIGNvbnN0IGludGVyZXN0VG9SZW1vdmUgPSB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZpbmRPbmVBbmRSZW1vdmVTeW5jKChpbnRlcmVzdEFyZzIpID0+IHtcbiAgICAgIHJldHVybiBpbnRlcmVzdEFyZy5jb21wYXJpc29uU3RyaW5nID09PSBpbnRlcmVzdEFyZzIuY29tcGFyaXNvblN0cmluZztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpbnRlcmVzdFxuICAgKi9cbiAgcHVibGljIGNoZWNrSW50ZXJlc3Qob2JqZWN0QXJnOiBEVEludGVyZXN0SWQpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb21wYXJpc29uU3RyaW5nID0gdGhpcy5jb21wYXJpc29uRnVuYyhvYmplY3RBcmcpO1xuICAgIHJldHVybiB0aGlzLmNoZWNrSW50ZXJlc3RCeVN0cmluZyhjb21wYXJpc29uU3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja3MgYW4gaW50ZXJlc3RcbiAgICogQHBhcmFtIGNvbXBhcmlzb25TdHJpbmdBcmdcbiAgICovXG4gIHB1YmxpYyBjaGVja0ludGVyZXN0QnlTdHJpbmcoY29tcGFyaXNvblN0cmluZ0FyZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmRJbnRlcmVzdCA9IHRoaXMuaW50ZXJlc3RPYmplY3RNYXAuZmluZFN5bmMoKGludGVyZXN0KSA9PiB7XG4gICAgICByZXR1cm4gaW50ZXJlc3QuY29tcGFyaXNvblN0cmluZyA9PT0gY29tcGFyaXNvblN0cmluZ0FyZztcbiAgICB9KTtcbiAgICBpZiAoZm91bmRJbnRlcmVzdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaW5mb3JtIGxvc3QgaW50ZXJlc3RcbiAgICogQHBhcmFtIGludGVyZXN0SWRcbiAgICovXG4gIHB1YmxpYyBpbmZvcm1Mb3N0SW50ZXJlc3QoaW50ZXJlc3RJZDogRFRJbnRlcmVzdElkKSB7XG4gICAgY29uc3Qgd2FudGVkSW50ZXJlc3QgPSB0aGlzLmZpbmRJbnRlcmVzdChpbnRlcmVzdElkKTtcbiAgICBpZiAod2FudGVkSW50ZXJlc3QpIHtcbiAgICAgIHdhbnRlZEludGVyZXN0Lm1hcmtMb3N0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGZpbmRzIGFuIGludGVyZXN0XG4gICAqIEBwYXJhbSBpbnRlcmVzdElkXG4gICAqL1xuICBwdWJsaWMgZmluZEludGVyZXN0KGludGVyZXN0SWQ6IERUSW50ZXJlc3RJZCk6IEludGVyZXN0PERUSW50ZXJlc3RJZCwgRFRJbnRlcmVzdEZ1bGxmaWxsbWVudD4ge1xuICAgIGNvbnN0IGNvbXBhcmFibGVTdHJpbmcgPSB0aGlzLmNvbXBhcmlzb25GdW5jKGludGVyZXN0SWQpO1xuICAgIGNvbnN0IGludGVyZXN0ID0gdGhpcy5pbnRlcmVzdE9iamVjdE1hcC5maW5kU3luYygoaW50ZXJlc3RBcmcpID0+IHtcbiAgICAgIHJldHVybiBpbnRlcmVzdEFyZy5jb21wYXJpc29uU3RyaW5nID09PSBjb21wYXJhYmxlU3RyaW5nO1xuICAgIH0pO1xuICAgIHJldHVybiBpbnRlcmVzdDsgLy8gaWYgYW4gaW50ZXJlc3QgaXMgZm91bmQsIHRoZSBpbnRlcmVzdCBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIGludGVyZXN0IGlzIG51bGxcbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9jbGFzc2VzLnBsdWdpbnMuanMnO1xuXG5leHBvcnQgY2xhc3MgTGltaXRlZEFycmF5PFQ+IHtcbiAgYXJyYXk6IFRbXSA9IFtdO1xuICBhcnJheUxpbWl0OiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKGxpbWl0QXJnOiBudW1iZXIpIHtcbiAgICB0aGlzLmFycmF5TGltaXQgPSBsaW1pdEFyZztcbiAgfVxuXG4gIGFkZE9uZShvYmplY3RBcmc6IFQpIHtcbiAgICB0aGlzLmFycmF5LnVuc2hpZnQob2JqZWN0QXJnKTtcbiAgICBpZiAodGhpcy5hcnJheS5sZW5ndGggPiB0aGlzLmFycmF5TGltaXQpIHtcbiAgICAgIHRoaXMuYXJyYXkubGVuZ3RoID0gdGhpcy5hcnJheUxpbWl0O1xuICAgIH1cbiAgfVxuXG4gIGFkZE1hbnkob2JqZWN0QXJyYXlBcmc6IFRbXSkge1xuICAgIGZvciAobGV0IG9iamVjdEFyZyBvZiBvYmplY3RBcnJheUFyZykge1xuICAgICAgdGhpcy5hZGRPbmUob2JqZWN0QXJnKTtcbiAgICB9XG4gIH1cblxuICBzZXRMaW1pdChsaW1pdEFyZzogbnVtYmVyKSB7XG4gICAgdGhpcy5hcnJheUxpbWl0ID0gbGltaXRBcmc7XG4gICAgaWYgKHRoaXMuYXJyYXkubGVuZ3RoID4gdGhpcy5hcnJheUxpbWl0KSB7XG4gICAgICB0aGlzLmFycmF5Lmxlbmd0aCA9IHRoaXMuYXJyYXlMaW1pdDtcbiAgICB9XG4gIH1cblxuICBnZXRBdmVyYWdlKCk6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmFycmF5WzBdID09PSAnbnVtYmVyJykge1xuICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICBmb3IgKGxldCBsb2NhbE51bWJlciBvZiB0aGlzLmFycmF5KSB7XG4gICAgICAgIGxldCBsb2NhbE51bWJlckFueTogYW55ID0gbG9jYWxOdW1iZXI7XG4gICAgICAgIHN1bSA9IHN1bSArIGxvY2FsTnVtYmVyQW55O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1bSAvIHRoaXMuYXJyYXkubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vY2xhc3Nlcy5wbHVnaW5zLmpzJztcblxuaW1wb3J0IHsgT2JqZWN0TWFwIH0gZnJvbSAnLi9jbGFzc2VzLm9iamVjdG1hcC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBMb29wVHJhY2tlcjxUPiB7XG4gIHJlZmVyZW5jZU9iamVjdE1hcCA9IG5ldyBPYmplY3RNYXA8YW55PigpO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBub3RoaW5nIGhlcmVcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja3MgYW5kIHRyYWNrcyBhbiBvYmplY3RcbiAgICogQHBhcmFtIG9iamVjdEFyZ1xuICAgKi9cbiAgY2hlY2tBbmRUcmFjayhvYmplY3RBcmc6IFQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMucmVmZXJlbmNlT2JqZWN0TWFwLmNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykpIHtcbiAgICAgIHRoaXMucmVmZXJlbmNlT2JqZWN0TWFwLmFkZChvYmplY3RBcmcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vY2xhc3Nlcy5wbHVnaW5zLmpzJztcblxuLyoqXG4gKiBhbGxvd3MgeW91IHRvIGVhc2lseSBrZWVwIHRyYWNrIG9mIGEgYnVuY2ggb2Ygc3RyaW5nc1xuICovXG5cbmV4cG9ydCB0eXBlIFRUcmlnZ2VyRnVuY3Rpb24gPSAoc3RyaW5nQXJyYXk/OiBzdHJpbmdbXSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGNsYXNzIFN0cmluZ21hcCB7XG4gIHByaXZhdGUgX3N0cmluZ0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIF90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheTogVFRyaWdnZXJGdW5jdGlvbltdID0gW107XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgLyoqXG4gICAqIGFkZCBhIHN0cmluZyB0byB0aGUgU3RyaW5nbWFwXG4gICAqL1xuICBhZGRTdHJpbmcoc3RyaW5nQXJnOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zdHJpbmdBcnJheS5wdXNoKHN0cmluZ0FyZyk7XG4gICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogbGlrZSBhZGRTdHJpbmcsIGJ1dCBhY2NlcHRzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICovXG4gIGFkZFN0cmluZ0FycmF5KHN0cmluZ0FycmF5QXJnOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiBzdHJpbmdBcnJheUFyZykge1xuICAgICAgdGhpcy5hZGRTdHJpbmcoc3RyaW5nSXRlbSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJlbW92ZXMgYSBzdHJpbmcgZnJvbSBTdHJpbmdtYXBcbiAgICovXG4gIHJlbW92ZVN0cmluZyhzdHJpbmdBcmc6IHN0cmluZykge1xuICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMuX3N0cmluZ0FycmF5KSB7XG4gICAgICBpZiAodGhpcy5fc3RyaW5nQXJyYXlba2V5QXJnXSA9PT0gc3RyaW5nQXJnKSB7XG4gICAgICAgIHRoaXMuX3N0cmluZ0FycmF5LnNwbGljZShwYXJzZUludChrZXlBcmcpLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogd2lwZXMgdGhlIFN0cmluZ21hcFxuICAgKi9cbiAgd2lwZSgpIHtcbiAgICB0aGlzLl9zdHJpbmdBcnJheSA9IFtdO1xuICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIHN0cmluZyBpcyBpbiBTdHJpbmdtYXBcbiAgICovXG4gIHB1YmxpYyBjaGVja1N0cmluZyhzdHJpbmdBcmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdHJpbmdBcnJheS5pbmRleE9mKHN0cmluZ0FyZykgIT09IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrcyBzdHJpbmdQcmVzZW5jZSB3aXRoIG1pbmltYXRjaFxuICAgKi9cbiAgcHVibGljIGNoZWNrTWluaW1hdGNoKG1pbmlNYXRjaFN0cmluZ0FyZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc21hcnRNYXRjaEluc3RhbmNlID0gbmV3IHBsdWdpbnMuc21hcnRtYXRjaC5TbWFydE1hdGNoKG1pbmlNYXRjaFN0cmluZ0FyZyk7XG4gICAgbGV0IGZvdW5kTWF0Y2g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN0cmluZ0l0ZW0gb2YgdGhpcy5fc3RyaW5nQXJyYXkpIHtcbiAgICAgIGlmIChzbWFydE1hdGNoSW5zdGFuY2UubWF0Y2goc3RyaW5nSXRlbSkpIHtcbiAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb3VuZE1hdGNoO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrcyBpZiB0aGUgU3RyaW5nbWFwIGlzIGVtcHR5XG4gICAqL1xuICBwdWJsaWMgY2hlY2tJc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLl9zdHJpbmdBcnJheS5sZW5ndGggPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogZ2V0cyBhIGNsb25lZCBjb3B5IG9mIHRoZSBjdXJyZW50IHN0cmluZyBBcnJheVxuICAgKi9cbiAgcHVibGljIGdldFN0cmluZ0FycmF5KCkge1xuICAgIGNvbnN0IHJldHVybkFycmF5OiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiB0aGlzLl9zdHJpbmdBcnJheSkge1xuICAgICAgcmV0dXJuQXJyYXkucHVzaChzdHJpbmdJdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVybkFycmF5O1xuICB9XG5cbiAgLy8gdHJpZ2dlciByZWdpc3RlcmluZ1xuXG4gIC8qKlxuICAgKiByZWdpc3RlciBhIG5ldyB0cmlnZ2VyXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJVbnRpbFRydWUoZnVuY3Rpb25Bcmc6IFRUcmlnZ2VyRnVuY3Rpb24sIGNhbGxiYWNrQXJnPzogKCkgPT4gYW55KSB7XG4gICAgY29uc3QgdHJ1ZURlZmVycmVkID0gcGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTtcbiAgICB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheS5wdXNoKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmN0aW9uQXJnKHRoaXMuZ2V0U3RyaW5nQXJyYXkoKSk7XG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChjYWxsYmFja0FyZykge1xuICAgICAgICAgIGNhbGxiYWNrQXJnKCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ1ZURlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7XG4gICAgcmV0dXJuIHRydWVEZWZlcnJlZC5wcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIG5vdGlmaWVzIHRyaWdnZXJzXG4gICAqL1xuICBwcml2YXRlIG5vdGlmeVRyaWdnZXIoKSB7XG4gICAgY29uc3QgZmlsdGVyZWRBcnJheSA9IHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LmZpbHRlcigoZnVuY3Rpb25BcmcpID0+IHtcbiAgICAgIHJldHVybiAhZnVuY3Rpb25BcmcoKTtcbiAgICB9KTtcbiAgICB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheSA9IGZpbHRlcmVkQXJyYXk7XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vY2xhc3Nlcy5wbHVnaW5zLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJVGltZWRBZ2dyZWdhdG9yT3B0aW9uczxUPiB7XG4gIGFnZ3JlZ2F0aW9uSW50ZXJ2YWxJbk1pbGxpczogbnVtYmVyO1xuICBmdW5jdGlvbkZvckFnZ3JlZ2F0aW9uOiAoaW5wdXQ6IFRbXSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRpbWVkQWdncmVndG9yPFQ+IHtcbiAgcHVibGljIG9wdGlvbnM6IElUaW1lZEFnZ3JlZ2F0b3JPcHRpb25zPFQ+O1xuICBwcml2YXRlIHN0b3JhZ2VBcnJheTogVFtdID0gW107XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uc0FyZzogSVRpbWVkQWdncmVnYXRvck9wdGlvbnM8VD4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnO1xuICB9XG5cbiAgcHJpdmF0ZSBhZ2dyZWdhdGlvblRpbWVyOiBwbHVnaW5zLnNtYXJ0dGltZS5UaW1lcjtcbiAgcHJpdmF0ZSBjaGVja0FnZ3JlZ2F0aW9uU3RhdHVzKCkge1xuICAgIGNvbnN0IGFkZEFnZ3JlZ2F0aW9uVGltZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0aW9uVGltZXIgPSBuZXcgcGx1Z2lucy5zbWFydHRpbWUuVGltZXIodGhpcy5vcHRpb25zLmFnZ3JlZ2F0aW9uSW50ZXJ2YWxJbk1pbGxpcyk7XG4gICAgICB0aGlzLmFnZ3JlZ2F0aW9uVGltZXIuY29tcGxldGVkLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGVGb3JQcm9jZXNzaW5nID0gdGhpcy5zdG9yYWdlQXJyYXk7XG4gICAgICAgIGlmIChhZ2dyZWdhdGVGb3JQcm9jZXNzaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25UaW1lciA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RvcmFnZUFycmF5ID0gW107XG4gICAgICAgIGFkZEFnZ3JlZ2F0aW9uVGltZXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZ1bmN0aW9uRm9yQWdncmVnYXRpb24oYWdncmVnYXRlRm9yUHJvY2Vzc2luZyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWdncmVnYXRpb25UaW1lci5zdGFydCgpO1xuICAgIH07XG4gICAgaWYgKCF0aGlzLmFnZ3JlZ2F0aW9uVGltZXIpIHtcbiAgICAgIGFkZEFnZ3JlZ2F0aW9uVGltZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkKGFnZ3JlZ2F0aW9uQXJnOiBUKSB7XG4gICAgdGhpcy5zdG9yYWdlQXJyYXkucHVzaChhZ2dyZWdhdGlvbkFyZyk7XG4gICAgdGhpcy5jaGVja0FnZ3JlZ2F0aW9uU3RhdHVzKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vY2xhc3Nlcy5wbHVnaW5zLmpzJztcblxuZXhwb3J0IGNsYXNzIFRyZWU8VD4ge1xuICBzeW1ib2xUcmVlOiBhbnk7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3ltYm9sVHJlZSA9IG5ldyBwbHVnaW5zLnN5bWJvbFRyZWUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGdW5jdGlvbnMgdGhhdCBtYXAgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgb2Ygc3ltYm9sLXRyZWVcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3RBcmdcbiAgICovXG4gIGluaXRpYWxpemUob2JqZWN0QXJnOiBUKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbml0aWFsaXplKG9iamVjdEFyZyk7XG4gIH1cblxuICBoYXNDaGlsZHJlbihvYmplY3RBcmc6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmhhc0NoaWxkcmVuKG9iamVjdEFyZyk7XG4gIH1cblxuICBmaXJzdENoaWxkKG9iamVjdEFyZzogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuZmlyc3RDaGlsZChvYmplY3RBcmcpO1xuICB9XG5cbiAgbGFzdENoaWxkKG9iamVjdEFyZzogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubGFzdENoaWxkKG9iamVjdEFyZyk7XG4gIH1cblxuICBwcmV2aW91c1NpYmxpbmcob2JqZWN0QXJnOiBUKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wcmV2aW91c1NpYmxpbmcob2JqZWN0QXJnKTtcbiAgfVxuXG4gIG5leHRTaWJsaW5nKG9iamVjdEFyZzogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmcob2JqZWN0QXJnKTtcbiAgfVxuXG4gIHBhcmVudChvYmplY3RBcmc6IFQpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnBhcmVudChvYmplY3RBcmcpO1xuICB9XG5cbiAgbGFzdEluY2x1c2l2ZURlc2NlbmRhbnQob2JqZWN0QXJnOiBUKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5sYXN0SW5jbHVzaXZlRGVzY2VuZGFudChvYmplY3RBcmcpO1xuICB9XG5cbiAgcHJlY2VkaW5nKG9iamVjdEFyZzogVCwgb3B0aW9uc0FyZz86IGFueSk6IFQge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucHJlY2VkaW5nKG9iamVjdEFyZywgb3B0aW9uc0FyZyk7XG4gIH1cblxuICBmb2xsb3dpbmcob2JqZWN0OiBULCBvcHRpb25zQXJnOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmZvbGxvd2luZyhvYmplY3QsIG9wdGlvbnNBcmcpO1xuICB9XG5cbiAgY2hpbGRyZW5Ub0FycmF5KHBhcmVudEFyZzogVCwgb3B0aW9uc0FyZzogYW55KTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmNoaWxkcmVuVG9BcnJheShwYXJlbnRBcmcsIG9wdGlvbnNBcmcpO1xuICB9XG5cbiAgYW5jZXN0b3JzVG9BcnJheShvYmplY3RBcmc6IFQsIG9wdGlvbnNBcmc6IGFueSk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5hbmNlc3RvcnNUb0FycmF5KG9iamVjdEFyZywgb3B0aW9uc0FyZyk7XG4gIH1cblxuICB0cmVlVG9BcnJheShyb290QXJnOiBULCBvcHRpb25zQXJnOiBhbnkpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUudHJlZVRvQXJyYXkocm9vdEFyZywgb3B0aW9uc0FyZyk7XG4gIH1cblxuICBjaGlsZHJlbkl0ZXJhdG9yKHBhcmVudEFyZzogVCwgb3B0aW9uc0FyZzogYW55KTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHBhcmVudEFyZywgb3B0aW9uc0FyZyk7XG4gIH1cblxuICBwcmV2aW91c1NpYmxpbmdzSXRlcmF0b3Iob2JqZWN0QXJnOiBUKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wcmV2aW91c1NpYmxpbmdzSXRlcmF0b3Iob2JqZWN0QXJnKTtcbiAgfVxuXG4gIG5leHRTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdEFyZzogVCkge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmdzSXRlcmF0b3IoKTtcbiAgfVxuXG4gIGFuY2VzdG9yc0l0ZXJhdG9yKG9iamVjdEFyZzogVCkge1xuICAgIHRoaXMuc3ltYm9sVHJlZS5hbmNlc3RvcnNJdGVyYXRvcigpO1xuICB9XG5cbiAgdHJlZUl0ZXJhdG9yKHJvb3RBcmc6IFQsIG9wdGlvbnNBcmc6IGFueSk6IEl0ZXJhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnRyZWVJdGVyYXRvcihyb290QXJnKTtcbiAgfVxuXG4gIGluZGV4KGNoaWxkQXJnOiBUKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmluZGV4KGNoaWxkQXJnKTtcbiAgfVxuXG4gIGNoaWxkcmVuQ291bnQocGFyZW50QXJnOiBUKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmNoaWxkcmVuQ291bnQocGFyZW50QXJnKTtcbiAgfVxuXG4gIGNvbXBhcmVUcmVlUG9zaXRpb24obGVmdEFyZzogVCwgcmlnaHRBcmc6IFQpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbXBhcmVUcmVlUG9zaXRpb24obGVmdEFyZywgcmlnaHRBcmcpO1xuICB9XG5cbiAgcmVtb3ZlKHJlbW92ZU9iamVjdEFyZzogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucmVtb3ZlKHJlbW92ZU9iamVjdEFyZyk7XG4gIH1cblxuICBpbnNlcnRCZWZvcmUocmVmZXJlbmNlT2JqZWN0QXJnOiBULCBuZXdPYmplY3RBcmc6IFQpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmluc2VydEJlZm9yZShyZWZlcmVuY2VPYmplY3RBcmcsIG5ld09iamVjdEFyZyk7XG4gIH1cblxuICBpbnNlcnRBZnRlcihyZWZlcmVuY2VPYmplY3Q6IFQsIG5ld09iamVjdEFyZzogVCkge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuaW5zZXJ0QWZ0ZXIocmVmZXJlbmNlT2JqZWN0LCBuZXdPYmplY3RBcmcpO1xuICB9XG5cbiAgcHJlcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdEFyZzogVCwgbmV3T2JqZWN0QXJnOiBUKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wcmVwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpO1xuICB9XG5cbiAgYXBwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0QXJnOiBULCBuZXdPYmplY3RBcmc6IFQpIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmFwcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRnVuY3Rpb25pb25hbGl0eSB0aGF0IGV4dGVuZHMgc3ltYm9sLXRyZWVcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgYnJhbmNoIG9mIHRoZSB0cmVlIGFzIEpTT05cbiAgICogY2FuIGJlIHVzZXJcbiAgICovXG4gIHRvSnNvbldpdGhIaWVyYWNoeShyb290RWxlbWVudDogVCkge1xuICAgIGNvbnN0IHRyZWVJdGVyYWJsZSA9IHRoaXMudHJlZUl0ZXJhdG9yKHJvb3RFbGVtZW50LCB7fSk7XG4gICAgZm9yIChjb25zdCB0cmVlSXRlbSBvZiB0cmVlSXRlcmFibGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKHRyZWVJdGVtKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogYnVpbGRzIGEgdHJlZSBmcm9tIGEgSlNPTiB3aXRoIGhpZXJhY2h5XG4gICAqIEBwYXJhbSByb290RWxlbWVudFxuICAgKi9cbiAgZnJvbUpzb25XaXRoSGllcmFjaHkocm9vdEVsZW1lbnQ6IFQpIHt9XG59XG4iLCAiZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzLmFzeW5jZXhlY3V0aW9uc3RhY2suanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzLmJhY2twcmVzc3VyZWRhcnJheS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMuZmFzdG1hcC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMuaW50ZXJlc3RtYXAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzLmludGVyZXN0bWFwLmludGVyZXN0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy5saW1pdGVkYXJyYXkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzLmxvb3B0cmFja2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy5vYmplY3RtYXAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzLnN0cmluZ21hcC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMudGltZWRhZ2dyZWdhdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy50cmVlLmpzJztcbiIsICJjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5jb25zdCB1aW50OEFycmF5U3RyaW5naWZpZWQgPSAnW29iamVjdCBVaW50OEFycmF5XSc7XG5jb25zdCBhcnJheUJ1ZmZlclN0cmluZ2lmaWVkID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcblxuZnVuY3Rpb24gaXNUeXBlKHZhbHVlLCB0eXBlQ29uc3RydWN0b3IsIHR5cGVTdHJpbmdpZmllZCkge1xuXHRpZiAoIXZhbHVlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKHZhbHVlLmNvbnN0cnVjdG9yID09PSB0eXBlQ29uc3RydWN0b3IpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gdHlwZVN0cmluZ2lmaWVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVaW50OEFycmF5KHZhbHVlKSB7XG5cdHJldHVybiBpc1R5cGUodmFsdWUsIFVpbnQ4QXJyYXksIHVpbnQ4QXJyYXlTdHJpbmdpZmllZCk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsdWUpIHtcblx0cmV0dXJuIGlzVHlwZSh2YWx1ZSwgQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVyU3RyaW5naWZpZWQpO1xufVxuXG5mdW5jdGlvbiBpc1VpbnQ4QXJyYXlPckFycmF5QnVmZmVyKHZhbHVlKSB7XG5cdHJldHVybiBpc1VpbnQ4QXJyYXkodmFsdWUpIHx8IGlzQXJyYXlCdWZmZXIodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VWludDhBcnJheSh2YWx1ZSkge1xuXHRpZiAoIWlzVWludDhBcnJheSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBVaW50OEFycmF5XFxgLCBnb3QgXFxgJHt0eXBlb2YgdmFsdWV9XFxgYCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFVpbnQ4QXJyYXlPckFycmF5QnVmZmVyKHZhbHVlKSB7XG5cdGlmICghaXNVaW50OEFycmF5T3JBcnJheUJ1ZmZlcih2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBVaW50OEFycmF5XFxgIG9yIFxcYEFycmF5QnVmZmVyXFxgLCBnb3QgXFxgJHt0eXBlb2YgdmFsdWV9XFxgYCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVWludDhBcnJheSh2YWx1ZSkge1xuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuXHRcdHJldHVybiBuZXcgVWludDhBcnJheSh2YWx1ZSk7XG5cdH1cblxuXHRpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuXHRcdHJldHVybiBuZXcgVWludDhBcnJheSh2YWx1ZS5idWZmZXIsIHZhbHVlLmJ5dGVPZmZzZXQsIHZhbHVlLmJ5dGVMZW5ndGgpO1xuXHR9XG5cblx0dGhyb3cgbmV3IFR5cGVFcnJvcihgVW5zdXBwb3J0ZWQgdmFsdWUsIGdvdCBcXGAke3R5cGVvZiB2YWx1ZX1cXGAuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRVaW50OEFycmF5cyhhcnJheXMsIHRvdGFsTGVuZ3RoKSB7XG5cdGlmIChhcnJheXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuXHR9XG5cblx0dG90YWxMZW5ndGggPz89IGFycmF5cy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IGFjY3VtdWxhdG9yICsgY3VycmVudFZhbHVlLmxlbmd0aCwgMCk7XG5cblx0Y29uc3QgcmV0dXJuVmFsdWUgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbmd0aCk7XG5cblx0bGV0IG9mZnNldCA9IDA7XG5cdGZvciAoY29uc3QgYXJyYXkgb2YgYXJyYXlzKSB7XG5cdFx0YXNzZXJ0VWludDhBcnJheShhcnJheSk7XG5cdFx0cmV0dXJuVmFsdWUuc2V0KGFycmF5LCBvZmZzZXQpO1xuXHRcdG9mZnNldCArPSBhcnJheS5sZW5ndGg7XG5cdH1cblxuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmVVaW50OEFycmF5c0VxdWFsKGEsIGIpIHtcblx0YXNzZXJ0VWludDhBcnJheShhKTtcblx0YXNzZXJ0VWludDhBcnJheShiKTtcblxuXHRpZiAoYSA9PT0gYikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWZvci1sb29wXG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdGlmIChhW2luZGV4XSAhPT0gYltpbmRleF0pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVVaW50OEFycmF5cyhhLCBiKSB7XG5cdGFzc2VydFVpbnQ4QXJyYXkoYSk7XG5cdGFzc2VydFVpbnQ4QXJyYXkoYik7XG5cblx0Y29uc3QgbGVuZ3RoID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcblxuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0Y29uc3QgZGlmZiA9IGFbaW5kZXhdIC0gYltpbmRleF07XG5cdFx0aWYgKGRpZmYgIT09IDApIHtcblx0XHRcdHJldHVybiBNYXRoLnNpZ24oZGlmZik7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQXQgdGhpcyBwb2ludCwgYWxsIHRoZSBjb21wYXJlZCBlbGVtZW50cyBhcmUgZXF1YWwuXG5cdC8vIFRoZSBzaG9ydGVyIGFycmF5IHNob3VsZCBjb21lIGZpcnN0IGlmIHRoZSBhcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGhzLlxuXHRyZXR1cm4gTWF0aC5zaWduKGEubGVuZ3RoIC0gYi5sZW5ndGgpO1xufVxuXG5jb25zdCBjYWNoZWREZWNvZGVycyA9IHtcblx0dXRmODogbmV3IGdsb2JhbFRoaXMuVGV4dERlY29kZXIoJ3V0ZjgnKSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1aW50OEFycmF5VG9TdHJpbmcoYXJyYXksIGVuY29kaW5nID0gJ3V0ZjgnKSB7XG5cdGFzc2VydFVpbnQ4QXJyYXlPckFycmF5QnVmZmVyKGFycmF5KTtcblx0Y2FjaGVkRGVjb2RlcnNbZW5jb2RpbmddID8/PSBuZXcgZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcihlbmNvZGluZyk7XG5cdHJldHVybiBjYWNoZWREZWNvZGVyc1tlbmNvZGluZ10uZGVjb2RlKGFycmF5KTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0U3RyaW5nKHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgc3RyaW5nXFxgLCBnb3QgXFxgJHt0eXBlb2YgdmFsdWV9XFxgYCk7XG5cdH1cbn1cblxuY29uc3QgY2FjaGVkRW5jb2RlciA9IG5ldyBnbG9iYWxUaGlzLlRleHRFbmNvZGVyKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb1VpbnQ4QXJyYXkoc3RyaW5nKSB7XG5cdGFzc2VydFN0cmluZyhzdHJpbmcpO1xuXHRyZXR1cm4gY2FjaGVkRW5jb2Rlci5lbmNvZGUoc3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CYXNlNjRVcmwoYmFzZTY0KSB7XG5cdHJldHVybiBiYXNlNjQucmVwbGFjZUFsbCgnKycsICctJykucmVwbGFjZUFsbCgnLycsICdfJykucmVwbGFjZSgvPSskLywgJycpO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRVcmxUb0Jhc2U2NChiYXNlNjR1cmwpIHtcblx0Y29uc3QgYmFzZTY0ID0gYmFzZTY0dXJsLnJlcGxhY2VBbGwoJy0nLCAnKycpLnJlcGxhY2VBbGwoJ18nLCAnLycpO1xuXHRjb25zdCBwYWRkaW5nID0gKDQgLSAoYmFzZTY0Lmxlbmd0aCAlIDQpKSAlIDQ7XG5cdHJldHVybiBiYXNlNjQgKyAnPScucmVwZWF0KHBhZGRpbmcpO1xufVxuXG4vLyBSZWZlcmVuY2U6IGh0dHBzOi8vcGh1b2MubmcvY29sbGVjdGlvbi90aGlzLXZzLXRoYXQvY29uY2F0LXZzLXB1c2gvXG4vLyBJbXBvcnRhbnQ6IEtlZXAgdGhpcyB2YWx1ZSBkaXZpc2libGUgYnkgMyBzbyBpbnRlcm1lZGlhdGUgY2h1bmtzIHByb2R1Y2Ugbm8gQmFzZTY0IHBhZGRpbmcuXG5jb25zdCBNQVhfQkxPQ0tfU0laRSA9IDY1XzUzNTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVpbnQ4QXJyYXlUb0Jhc2U2NChhcnJheSwge3VybFNhZmUgPSBmYWxzZX0gPSB7fSkge1xuXHRhc3NlcnRVaW50OEFycmF5KGFycmF5KTtcblxuXHRsZXQgYmFzZTY0ID0gJyc7XG5cblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXggKz0gTUFYX0JMT0NLX1NJWkUpIHtcblx0XHRjb25zdCBjaHVuayA9IGFycmF5LnN1YmFycmF5KGluZGV4LCBpbmRleCArIE1BWF9CTE9DS19TSVpFKTtcblx0XHQvLyBSZXF1aXJlZCBhcyBgYnRvYWAgYW5kIGBhdG9iYCBkb24ndCBwcm9wZXJseSBzdXBwb3J0IFVuaWNvZGU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQmFzZTY0I3RoZV91bmljb2RlX3Byb2JsZW1cblx0XHRiYXNlNjQgKz0gZ2xvYmFsVGhpcy5idG9hKFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KHVuZGVmaW5lZCwgY2h1bmspKTtcblx0fVxuXG5cdHJldHVybiB1cmxTYWZlID8gYmFzZTY0VG9CYXNlNjRVcmwoYmFzZTY0KSA6IGJhc2U2NDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NFRvVWludDhBcnJheShiYXNlNjRTdHJpbmcpIHtcblx0YXNzZXJ0U3RyaW5nKGJhc2U2NFN0cmluZyk7XG5cdHJldHVybiBVaW50OEFycmF5LmZyb20oZ2xvYmFsVGhpcy5hdG9iKGJhc2U2NFVybFRvQmFzZTY0KGJhc2U2NFN0cmluZykpLCB4ID0+IHguY29kZVBvaW50QXQoMCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9CYXNlNjQoc3RyaW5nLCB7dXJsU2FmZSA9IGZhbHNlfSA9IHt9KSB7XG5cdGFzc2VydFN0cmluZyhzdHJpbmcpO1xuXHRyZXR1cm4gdWludDhBcnJheVRvQmFzZTY0KHN0cmluZ1RvVWludDhBcnJheShzdHJpbmcpLCB7dXJsU2FmZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0VG9TdHJpbmcoYmFzZTY0U3RyaW5nKSB7XG5cdGFzc2VydFN0cmluZyhiYXNlNjRTdHJpbmcpO1xuXHRyZXR1cm4gdWludDhBcnJheVRvU3RyaW5nKGJhc2U2NFRvVWludDhBcnJheShiYXNlNjRTdHJpbmcpKTtcbn1cblxuY29uc3QgYnl0ZVRvSGV4TG9va3VwVGFibGUgPSBBcnJheS5mcm9tKHtsZW5ndGg6IDI1Nn0sIChfLCBpbmRleCkgPT4gaW5kZXgudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpO1xuXG5leHBvcnQgZnVuY3Rpb24gdWludDhBcnJheVRvSGV4KGFycmF5KSB7XG5cdGFzc2VydFVpbnQ4QXJyYXkoYXJyYXkpO1xuXG5cdC8vIENvbmNhdGVuYXRpbmcgYSBzdHJpbmcgaXMgZmFzdGVyIHRoYW4gdXNpbmcgYW4gYXJyYXkuXG5cdGxldCBoZXhTdHJpbmcgPSAnJztcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1mb3ItbG9vcCAtLSBNYXggcGVyZm9ybWFuY2UgaXMgY3JpdGljYWwuXG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRoZXhTdHJpbmcgKz0gYnl0ZVRvSGV4TG9va3VwVGFibGVbYXJyYXlbaW5kZXhdXTtcblx0fVxuXG5cdHJldHVybiBoZXhTdHJpbmc7XG59XG5cbmNvbnN0IGhleFRvRGVjaW1hbExvb2t1cFRhYmxlID0ge1xuXHQwOiAwLFxuXHQxOiAxLFxuXHQyOiAyLFxuXHQzOiAzLFxuXHQ0OiA0LFxuXHQ1OiA1LFxuXHQ2OiA2LFxuXHQ3OiA3LFxuXHQ4OiA4LFxuXHQ5OiA5LFxuXHRhOiAxMCxcblx0YjogMTEsXG5cdGM6IDEyLFxuXHRkOiAxMyxcblx0ZTogMTQsXG5cdGY6IDE1LFxuXHRBOiAxMCxcblx0QjogMTEsXG5cdEM6IDEyLFxuXHREOiAxMyxcblx0RTogMTQsXG5cdEY6IDE1LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhleFRvVWludDhBcnJheShoZXhTdHJpbmcpIHtcblx0YXNzZXJ0U3RyaW5nKGhleFN0cmluZyk7XG5cblx0aWYgKGhleFN0cmluZy5sZW5ndGggJSAyICE9PSAwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEhleCBzdHJpbmcgbGVuZ3RoLicpO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0TGVuZ3RoID0gaGV4U3RyaW5nLmxlbmd0aCAvIDI7XG5cdGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkocmVzdWx0TGVuZ3RoKTtcblxuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmVzdWx0TGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0Y29uc3QgaGlnaE5pYmJsZSA9IGhleFRvRGVjaW1hbExvb2t1cFRhYmxlW2hleFN0cmluZ1tpbmRleCAqIDJdXTtcblx0XHRjb25zdCBsb3dOaWJibGUgPSBoZXhUb0RlY2ltYWxMb29rdXBUYWJsZVtoZXhTdHJpbmdbKGluZGV4ICogMikgKyAxXV07XG5cblx0XHRpZiAoaGlnaE5pYmJsZSA9PT0gdW5kZWZpbmVkIHx8IGxvd05pYmJsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSGV4IGNoYXJhY3RlciBlbmNvdW50ZXJlZCBhdCBwb3NpdGlvbiAke2luZGV4ICogMn1gKTtcblx0XHR9XG5cblx0XHRieXRlc1tpbmRleF0gPSAoaGlnaE5pYmJsZSA8PCA0KSB8IGxvd05pYmJsZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1iaXR3aXNlXG5cdH1cblxuXHRyZXR1cm4gYnl0ZXM7XG59XG5cbi8qKlxuQHBhcmFtIHtEYXRhVmlld30gdmlld1xuQHJldHVybnMge251bWJlcn1cbiovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWludEJFKHZpZXcpIHtcblx0Y29uc3Qge2J5dGVMZW5ndGh9ID0gdmlldztcblxuXHRpZiAoYnl0ZUxlbmd0aCA9PT0gNikge1xuXHRcdHJldHVybiAodmlldy5nZXRVaW50MTYoMCkgKiAoMiAqKiAzMikpICsgdmlldy5nZXRVaW50MzIoMik7XG5cdH1cblxuXHRpZiAoYnl0ZUxlbmd0aCA9PT0gNSkge1xuXHRcdHJldHVybiAodmlldy5nZXRVaW50OCgwKSAqICgyICoqIDMyKSkgKyB2aWV3LmdldFVpbnQzMigxKTtcblx0fVxuXG5cdGlmIChieXRlTGVuZ3RoID09PSA0KSB7XG5cdFx0cmV0dXJuIHZpZXcuZ2V0VWludDMyKDApO1xuXHR9XG5cblx0aWYgKGJ5dGVMZW5ndGggPT09IDMpIHtcblx0XHRyZXR1cm4gKHZpZXcuZ2V0VWludDgoMCkgKiAoMiAqKiAxNikpICsgdmlldy5nZXRVaW50MTYoMSk7XG5cdH1cblxuXHRpZiAoYnl0ZUxlbmd0aCA9PT0gMikge1xuXHRcdHJldHVybiB2aWV3LmdldFVpbnQxNigwKTtcblx0fVxuXG5cdGlmIChieXRlTGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIHZpZXcuZ2V0VWludDgoMCk7XG5cdH1cbn1cblxuLyoqXG5AcGFyYW0ge1VpbnQ4QXJyYXl9IGFycmF5XG5AcGFyYW0ge1VpbnQ4QXJyYXl9IHZhbHVlXG5AcmV0dXJucyB7bnVtYmVyfVxuKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuXHRjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblx0Y29uc3QgdmFsdWVMZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG5cblx0aWYgKHZhbHVlTGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIC0xO1xuXHR9XG5cblx0aWYgKHZhbHVlTGVuZ3RoID4gYXJyYXlMZW5ndGgpIHtcblx0XHRyZXR1cm4gLTE7XG5cdH1cblxuXHRjb25zdCB2YWxpZE9mZnNldExlbmd0aCA9IGFycmF5TGVuZ3RoIC0gdmFsdWVMZW5ndGg7XG5cblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8PSB2YWxpZE9mZnNldExlbmd0aDsgaW5kZXgrKykge1xuXHRcdGxldCBpc01hdGNoID0gdHJ1ZTtcblx0XHRmb3IgKGxldCBpbmRleDIgPSAwOyBpbmRleDIgPCB2YWx1ZUxlbmd0aDsgaW5kZXgyKyspIHtcblx0XHRcdGlmIChhcnJheVtpbmRleCArIGluZGV4Ml0gIT09IHZhbHVlW2luZGV4Ml0pIHtcblx0XHRcdFx0aXNNYXRjaCA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNNYXRjaCkge1xuXHRcdFx0cmV0dXJuIGluZGV4O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiAtMTtcbn1cblxuLyoqXG5AcGFyYW0ge1VpbnQ4QXJyYXl9IGFycmF5XG5AcGFyYW0ge1VpbnQ4QXJyYXl9IHZhbHVlXG5AcmV0dXJucyB7Ym9vbGVhbn1cbiovXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG5cdHJldHVybiBpbmRleE9mKGFycmF5LCB2YWx1ZSkgIT09IC0xO1xufVxuIiwgImltcG9ydCAqIGFzIHVJbnQ4QXJyYXlFeHRyYXMgZnJvbSAndWludDhhcnJheS1leHRyYXMnO1xuXG5leHBvcnQge1xuICB1SW50OEFycmF5RXh0cmFzLFxufSIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vc21hcnRidWZmZXIucGx1Z2lucy5qcyc7XG5cbmV4cG9ydCBjb25zdCB1SW50OEFycmF5RXh0cmFzID0gcGx1Z2lucy51SW50OEFycmF5RXh0cmFzO1xuXG5leHBvcnQgZnVuY3Rpb24gdUludDhBcnJheVRvQmFzZTY0KHVJbnQ4QXJyYXk6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICByZXR1cm4gcGx1Z2lucy51SW50OEFycmF5RXh0cmFzLnVpbnQ4QXJyYXlUb0Jhc2U2NCh1SW50OEFycmF5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NFRvVWludDhBcnJheShiYXNlNjQ6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICByZXR1cm4gcGx1Z2lucy51SW50OEFycmF5RXh0cmFzLmJhc2U2NFRvVWludDhBcnJheShiYXNlNjQpO1xufVxuXG5leHBvcnQgY29uc3QgaXNVaW50OEFycmF5ID0gKG9iajogYW55KTogb2JqIGlzIFVpbnQ4QXJyYXkgPT4ge1xuICByZXR1cm4gcGx1Z2lucy51SW50OEFycmF5RXh0cmFzLmlzVWludDhBcnJheShvYmopO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQnVmZmVyTGlrZShvYmo6IGFueSk6IG9iaiBpcyBBcnJheUJ1ZmZlckxpa2UgfCBCdWZmZXIge1xuICAvLyBDaGVjayBmb3IgQXJyYXlCdWZmZXJMaWtlIG9iamVjdHMgaW4gYW55IGVudmlyb25tZW50XG4gIGlmIChvYmogJiYgdHlwZW9mIG9iai5ieXRlTGVuZ3RoID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gQWRkaXRpb25hbCBjaGVjayBzcGVjaWZpYyB0byBOb2RlLmpzIGVudmlyb25tZW50IGZvciBCdWZmZXIgb2JqZWN0c1xuICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQnVmZmVyLmlzQnVmZmVyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlUHVyZVVpbnQ4QXJyYXkoYnVmZmVyQXJnOiBVaW50OEFycmF5IHwgQnVmZmVyKTogVWludDhBcnJheSB7XG4gIC8vIENyZWF0ZSBhIG5ldyBVaW50OEFycmF5IHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBidWZmZXJcbiAgY29uc3QgdWludDhBcnJheTogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlckFyZy5sZW5ndGgpO1xuXG4gIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBCdWZmZXIgdG8gdGhlIG5ldyBVaW50OEFycmF5XG4gIHVpbnQ4QXJyYXkuc2V0KGJ1ZmZlckFyZyk7XG4gIHJldHVybiB1aW50OEFycmF5O1xufVxuIiwgIi8vIEBwdXNoLnJvY2tzIHNjb3BlXG5pbXBvcnQgKiBhcyBzbWFydHByb21pc2UgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlJztcblxuLy8gcHVzaHJvY2tzIHNjb3BlXG5leHBvcnQgeyBzbWFydHByb21pc2UgfTtcblxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydGd1YXJkLnBsdWdpbnMuanMnO1xuXG5leHBvcnQgdHlwZSBUR3VhcmRGdW5jdGlvbjxUPiA9IChkYXRhQXJnOiBUKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIElHdWFyZE9wdGlvbnMge1xuICBuYW1lPzogc3RyaW5nO1xuICBmYWlsZWRIaW50Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgR3VhcmQ8VD4ge1xuICBwcml2YXRlIGd1YXJkRnVuY3Rpb246IFRHdWFyZEZ1bmN0aW9uPFQ+O1xuICBwdWJsaWMgb3B0aW9uczogSUd1YXJkT3B0aW9ucztcbiAgY29uc3RydWN0b3IoZ3VhcmRGdW5jdGlvbkFyZzogVEd1YXJkRnVuY3Rpb248VD4sIG9wdGlvbnNBcmc/OiBJR3VhcmRPcHRpb25zKSB7XG4gICAgdGhpcy5ndWFyZEZ1bmN0aW9uID0gZ3VhcmRGdW5jdGlvbkFyZztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4ZWN1dGVzIHRoZSBndWFyZCBhZ2FpbnN0IGEgZGF0YSBhcmd1bWVudDtcbiAgICogQHBhcmFtIGRhdGFBcmdcbiAgICovXG4gIHB1YmxpYyBhc3luYyBleGVjKGRhdGFBcmc6IFQpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmd1YXJkRnVuY3Rpb24oZGF0YUFyZyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRGYWlsZWRIaW50KGRhdGFBcmc6IFQpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoZGF0YUFyZyk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmFpbGVkSGludDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0Z3VhcmQucGx1Z2lucy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBHdWFyZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnR3VhcmRFcnJvcic7XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vc21hcnRndWFyZC5wbHVnaW5zLmpzJztcbmltcG9ydCB7IEd1YXJkLCB0eXBlIFRHdWFyZEZ1bmN0aW9uIH0gZnJvbSAnLi9jbGFzc2VzLmd1YXJkLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJRXhlY09wdGlvbnMge1xuICBtb2RlPzogJ3BhcmFsbGVsJyB8ICdzZXJpYWwnO1xuICBzdG9wT25GYWlsPzogYm9vbGVhbjtcbn0gXG5cbi8qKlxuICogRXh0ZW5kZWQgR3VhcmRTZXQgdGhhdCBpbmhlcml0cyBmcm9tIEd1YXJkXG4gKiBhbmQgcHJvdmlkZXMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXRpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBHdWFyZFNldDxUPiBleHRlbmRzIEd1YXJkPFQ+IHtcbiAgcHVibGljIGd1YXJkczogQXJyYXk8R3VhcmQ8VD4+O1xuXG4gIGNvbnN0cnVjdG9yKGd1YXJkQXJyYXk6IEFycmF5PEd1YXJkPFQ+PiA9IFtdKSB7XG4gICAgc3VwZXIoYXN5bmMgKGRhdGFBcmc6IFQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7XG4gICAgfSlcbiAgICB0aGlzLmd1YXJkcyA9IGd1YXJkQXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogZXhlY3V0ZXMgYWxsIGd1YXJkcyBpbiBhbGwgZ3VhcmRTZXRzIGFnYWluc3QgYSBkYXRhIGFyZ3VtZW50XG4gICAqIEBwYXJhbSBkYXRhQXJnXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhlY0FsbFdpdGhEYXRhKGRhdGFBcmc6IFQsIG9wdGlvbnNBcmc6IElFeGVjT3B0aW9ucyA9IHtcbiAgICBtb2RlOiAncGFyYWxsZWwnLFxuICAgIHN0b3BPbkZhaWw6IGZhbHNlXG4gIH0pOiBQcm9taXNlPGJvb2xlYW5bXT4ge1xuICAgIGNvbnN0IHJlc3VsdFByb21pc2VzOiBBcnJheTxQcm9taXNlPGJvb2xlYW4+PiA9IFtdO1xuICAgIFxuICAgIGZvciAoY29uc3QgZ3VhcmQgb2YgdGhpcy5ndWFyZHMpIHtcbiAgICAgIGNvbnN0IGd1YXJkUmVzdWx0UHJvbWlzZSA9IGd1YXJkLmV4ZWMoZGF0YUFyZyk7XG4gICAgICBpZiAob3B0aW9uc0FyZy5tb2RlID09PSAnc2VyaWFsJykge1xuICAgICAgICBhd2FpdCBndWFyZFJlc3VsdFByb21pc2U7XG4gICAgICB9XG4gICAgICByZXN1bHRQcm9taXNlcy5wdXNoKGd1YXJkUmVzdWx0UHJvbWlzZSk7XG4gICAgICBpZiAob3B0aW9uc0FyZy5zdG9wT25GYWlsKSB7XG4gICAgICAgIGlmICghYXdhaXQgZ3VhcmRSZXN1bHRQcm9taXNlKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHJlc3VsdFByb21pc2VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHRQcm9taXNlcyk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2tzIGlmIGFsbCBndWFyZHMgcGFzc1xuICAgKiBAcGFyYW0gZGF0YUFyZ1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGFsbEd1YXJkc1Bhc3MoZGF0YUFyZzogVCwgb3B0aW9uc0FyZzogSUV4ZWNPcHRpb25zID0ge1xuICAgIG1vZGU6ICdwYXJhbGxlbCcsXG4gICAgc3RvcE9uRmFpbDogZmFsc2VcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmV4ZWNBbGxXaXRoRGF0YShkYXRhQXJnLCBvcHRpb25zQXJnKTtcbiAgICByZXR1cm4gcmVzdWx0cy5ldmVyeShyZXN1bHQgPT4gcmVzdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja3MgaWYgYW55IGd1YXJkIHBhc3Nlc1xuICAgKiBAcGFyYW0gZGF0YUFyZ1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGFueUd1YXJkc1Bhc3MoZGF0YUFyZzogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmV4ZWNBbGxXaXRoRGF0YShkYXRhQXJnLCB7XG4gICAgICBtb2RlOiAncGFyYWxsZWwnLFxuICAgICAgc3RvcE9uRmFpbDogZmFsc2VcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cy5zb21lKHJlc3VsdCA9PiByZXN1bHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybnMgdGhlIGZpcnN0IHJlYXNvbiBmb3Igd2h5IHNvbWV0aGluZyBmYWlsc1xuICAgKiBAcGFyYW0gZGF0YUFyZ1xuICAgKiBAcmV0dXJucyBcbiAgICovXG4gIHB1YmxpYyBnZXRGYWlsZWRIaW50IChkYXRhQXJnOiBUKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIHRoaXMuZ3VhcmRzKSB7XG4gICAgICBjb25zdCBmYWlsZWRIaW50ID0gZ3VhcmQuZ2V0RmFpbGVkSGludChkYXRhQXJnKTtcbiAgICAgIGlmIChmYWlsZWRIaW50KSB7XG4gICAgICAgIHJldHVybiBmYWlsZWRIaW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydGd1YXJkLnBsdWdpbnMuanMnO1xuaW1wb3J0IHsgR3VhcmQgfSBmcm9tICcuL2NsYXNzZXMuZ3VhcmQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzLmd1YXJkZXJyb3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzLmd1YXJkLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy5ndWFyZHNldC5qcyc7XG5cbmltcG9ydCB7IEd1YXJkU2V0IH0gZnJvbSAnLi9jbGFzc2VzLmd1YXJkc2V0LmpzJztcbmltcG9ydCB7IEd1YXJkRXJyb3IgfSBmcm9tICcuL2NsYXNzZXMuZ3VhcmRlcnJvci5qcyc7XG5leHBvcnQgY29uc3QgcGFzc0d1YXJkc09yUmVqZWN0ID0gYXN5bmMgPFQ+KGRhdGFBcmc6IFQsIGd1YXJkczogQXJyYXk8R3VhcmQ8VD4+KSA9PiB7XG4gIGNvbnN0IGd1YXJkU2V0ID0gbmV3IEd1YXJkU2V0PFQ+KGd1YXJkcyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGd1YXJkU2V0LmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7XG4gIGlmICghcmVzdWx0KSB7XG4gICAgY29uc3QgZmFpbGVkSGludCA9IGF3YWl0IGd1YXJkU2V0LmdldEZhaWxlZEhpbnQoZGF0YUFyZyk7XG4gICAgdGhyb3cgbmV3IEd1YXJkRXJyb3IoYEd1YXJkcyBmYWlsZWQ6XG4ke2ZhaWxlZEhpbnR9XG4gICAgYCk7XG4gIH1cbiAgcmV0dXJuIDtcbn07XG4iLCAiaW1wb3J0ICogYXMgc21hcnRwcm9taXNlIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSc7XG5cbmV4cG9ydCB7IHNtYXJ0cHJvbWlzZSB9O1xuIiwgImV4cG9ydCBsZXQgZGVmYXVsdG1lID0gbnVsbDtcbmRlY2xhcmUgZ2xvYmFsIHtcbiAgbmFtZXNwYWNlIE5vZGVKUyB7XG4gICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICB3aW5kb3c6IGFueTtcbiAgICAgIG5hdmlnYXRvcjogYW55O1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydGVudi5wbHVnaW5zLmpzJztcbmltcG9ydCAqIGFzIGludGVyZmFjZXMgZnJvbSAnLi9pbnRlcmZhY2VzL2luZGV4LmpzJztcblxuLy8gaW50ZXJmYWNlc1xuZXhwb3J0IGludGVyZmFjZSBJRW52T2JqZWN0IHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNtYXJ0ZW52IGNsYXNzIHRoYXQgbWFrZXMgaXQgZWFzeVxuICovXG5leHBvcnQgY2xhc3MgU21hcnRlbnYge1xuICBwdWJsaWMgYXN5bmMgZ2V0RW52QXdhcmVNb2R1bGUob3B0aW9uc0FyZzoge1xuICAgIG5vZGVNb2R1bGVOYW1lOiBzdHJpbmc7XG4gICAgd2ViVXJsQXJnOiBzdHJpbmc7XG4gICAgZ2V0RnVuY3Rpb246ICgpID0+IGFueTtcbiAgfSkge1xuICAgIGlmICh0aGlzLmlzTm9kZSkge1xuICAgICAgY29uc3QgbW9kdWxlUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZShvcHRpb25zQXJnLm5vZGVNb2R1bGVOYW1lKTtcbiAgICAgIHJldHVybiBtb2R1bGVSZXN1bHQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgY29uc3QgbW9kdWxlUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRTYWZlV2ViTW9kdWxlKFxuICAgICAgICBvcHRpb25zQXJnLndlYlVybEFyZyxcbiAgICAgICAgb3B0aW9uc0FyZy5nZXRGdW5jdGlvblxuICAgICAgKTtcbiAgICAgIHJldHVybiBtb2R1bGVSZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3BsYXRmb3JtIGZvciBsb2FkaW5nIG5vdCBzdXBwb3J0ZWQgYnkgc21hcnRlbnYnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2FmZU5vZGVNb2R1bGU8VCA9IGFueT4obW9kdWxlTmFtZUFyZzogc3RyaW5nLCBydW5BZnRlckZ1bmM/OiAobW9kdWxlQXJnOiBUKSA9PiBQcm9taXNlPGFueT4pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXRoaXMuaXNOb2RlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBZb3UgdHJpZWQgdG8gbG9hZCBhIG5vZGUgbW9kdWxlIGluIGEgd3JvbmcgY29udGV4dDogJHttb2R1bGVOYW1lQXJnfS4gVGhpcyBkb2VzIG5vdCB0aHJvdy5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBmdW5jdGlvbi1jb25zdHJ1Y3RvclxuICAgIGNvbnN0IHJldHVyblZhbHVlOiBUID0gYXdhaXQgKG5ldyBGdW5jdGlvbihgcmV0dXJuIGltcG9ydCgnJHttb2R1bGVOYW1lQXJnfScpYCkoKSBhcyBQcm9taXNlPFQ+KTtcbiAgICBpZiAocnVuQWZ0ZXJGdW5jKSB7XG4gICAgICBhd2FpdCBydW5BZnRlckZ1bmMocmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgbG9hZGVkU2NyaXB0czogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGFzeW5jIGdldFNhZmVXZWJNb2R1bGUodXJsQXJnOiBzdHJpbmcsIGdldEZ1bmN0aW9uQXJnOiAoKSA9PiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdZb3UgdHJpZWQgdG8gbG9hZCBhIHdlYiBtb2R1bGUgaW4gYSB3cm9uZyBjb250ZXh0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9hZGVkU2NyaXB0cy5pbmNsdWRlcyh1cmxBcmcpKSB7XG4gICAgICByZXR1cm4gZ2V0RnVuY3Rpb25BcmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2FkZWRTY3JpcHRzLnB1c2godXJsQXJnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkb25lID0gcGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTtcbiAgICBpZiAoZ2xvYmFsVGhpcy5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICBnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHModXJsQXJnKTtcbiAgICAgIGRvbmUucmVzb2x2ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGRvbmUucmVzb2x2ZSgpO1xuICAgICAgfTtcbiAgICAgIHNjcmlwdC5zcmMgPSB1cmxBcmc7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuICAgIGF3YWl0IGRvbmUucHJvbWlzZTtcbiAgICByZXR1cm4gZ2V0RnVuY3Rpb25BcmcoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcnVudGltZUVudigpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gJ25vZGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2Jyb3dzZXInO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNCcm93c2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc05vZGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHVzZXJBZ2VudCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgLy8gbWFrZSBzdXJlIHdlIGFyZSBpbiBCcm93c2VyXG4gICAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNOb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJ1bnRpbWVFbnYgPT09ICdub2RlJztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbm9kZVZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcHJvY2Vzcy52ZXJzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0NJKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzTm9kZSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52LkNJKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzTWFjQXN5bmMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuaXNOb2RlKSB7XG4gICAgICBjb25zdCBvcyA9IGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoJ29zJyk7XG4gICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gJ2Rhcndpbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNXaW5kb3dzQXN5bmMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuaXNOb2RlKSB7XG4gICAgICBjb25zdCBvcyA9IGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoJ29zJyk7XG4gICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc0xpbnV4QXN5bmMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuaXNOb2RlKSB7XG4gICAgICBjb25zdCBvcyA9IGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoJ29zJyk7XG4gICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gJ2xpbnV4JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmludHMgdGhlIGVudmlyb25tZW50IHRvIGNvbnNvbGVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBwcmludEVudigpIHtcbiAgICBpZiAodGhpcy5pc05vZGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdydW5uaW5nIG9uIE5PREUnKTtcbiAgICAgIGNvbnNvbGUubG9nKCdub2RlIHZlcnNpb24gaXMgJyArIHRoaXMubm9kZVZlcnNpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygncnVubmluZyBvbiBCUk9XU0VSJyk7XG4gICAgICBjb25zb2xlLmxvZygnYnJvd3NlciBpcyAnICsgdGhpcy51c2VyQWdlbnQpO1xuICAgIH1cbiAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gJy4vc21hcnRlbnYuY2xhc3Nlcy5zbWFydGVudi5qcyc7XG4iLCAiLy8gQHB1c2gucm9ja3MgZWNvc3lzdGVtXG5pbXBvcnQgKiBhcyBpc291bmlxdWUgZnJvbSAnQHB1c2gucm9ja3MvaXNvdW5pcXVlJztcblxuZXhwb3J0IHsgaXNvdW5pcXVlIH07XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0c3RyaW5nLnBsdWdpbnMuanMnO1xuXG4vKipcbiAqIENyb3NzLXBsYXRmb3JtIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gKiBVc2VzIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgaW4gYnJvd3NlciBhbmQgTWF0aC5yYW5kb20gYXMgZmFsbGJhY2tcbiAqL1xuY29uc3QgZ2V0UmFuZG9tSW50ID0gKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciA9PiB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcy5jcnlwdG8gJiYgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gQnJvd3NlciBlbnZpcm9ubWVudCB3aXRoIGNyeXB0byBBUElcbiAgICBjb25zdCByYW5nZSA9IG1heCAtIG1pbjtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBVaW50MzJBcnJheSgxKTtcbiAgICBnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyYXkpO1xuICAgIHJldHVybiBtaW4gKyAoYXJyYXlbMF0gJSByYW5nZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2sgdG8gTWF0aC5yYW5kb20gZm9yIGVudmlyb25tZW50cyB3aXRob3V0IGNyeXB0b1xuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gIH1cbn07XG5cbi8qKlxuICogQ3VzdG9tIGltcGxlbWVudGF0aW9uIG9mIHJhbmRvbWF0aWMgcGF0dGVybi1iYXNlZCBzdHJpbmcgZ2VuZXJhdG9yXG4gKiBQYXR0ZXJuIGNoYXJhY3RlcnM6XG4gKiBBIC0gVXBwZXJjYXNlIGxldHRlclxuICogYSAtIExvd2VyY2FzZSBsZXR0ZXIgIFxuICogMCAtIE51bWJlciAoMC05KVxuICogISAtIFNwZWNpYWwgY2hhcmFjdGVyXG4gKiAqIC0gQW55IGNoYXJhY3RlciAoQSwgYSwgMCwgb3IgISlcbiAqL1xuY29uc3QgY3VzdG9tUmFuZG9tYXRpYyA9IChwYXR0ZXJuOiBzdHJpbmcsIGxlbmd0aD86IG51bWJlciwgb3B0aW9ucz86IGFueSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNoYXJTZXRzID0ge1xuICAgICdBJzogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyxcbiAgICAnYSc6ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicsXG4gICAgJzAnOiAnMDEyMzQ1Njc4OScsXG4gICAgJyEnOiAnIUAjJCVeJiooKV8rLT1bXXt9fDs6LC48Pj8nLFxuICAgICcqJzogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IUAjJCVeJiooKV8rLT1bXXt9fDs6LC48Pj8nXG4gIH07XG5cbiAgLy8gSWYgbGVuZ3RoIGlzIHByb3ZpZGVkLCByZXBlYXQgdGhlIHBhdHRlcm4gdG8gbWF0Y2ggbGVuZ3RoXG4gIGxldCBhY3R1YWxQYXR0ZXJuID0gcGF0dGVybjtcbiAgaWYgKGxlbmd0aCAmJiBsZW5ndGggPiBwYXR0ZXJuLmxlbmd0aCkge1xuICAgIGFjdHVhbFBhdHRlcm4gPSBwYXR0ZXJuLnJlcGVhdChNYXRoLmNlaWwobGVuZ3RoIC8gcGF0dGVybi5sZW5ndGgpKS5zbGljZSgwLCBsZW5ndGgpO1xuICB9IGVsc2UgaWYgKGxlbmd0aCkge1xuICAgIGFjdHVhbFBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKDAsIGxlbmd0aCk7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGZvciAoY29uc3QgY2hhciBvZiBhY3R1YWxQYXR0ZXJuKSB7XG4gICAgaWYgKGNoYXJTZXRzW2NoYXJdKSB7XG4gICAgICBjb25zdCBjaGFyU2V0ID0gY2hhclNldHNbY2hhcl07XG4gICAgICBjb25zdCByYW5kb21JbmRleCA9IGdldFJhbmRvbUludCgwLCBjaGFyU2V0Lmxlbmd0aCk7XG4gICAgICByZXN1bHQgKz0gY2hhclNldFtyYW5kb21JbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vdCBhIHBhdHRlcm4gY2hhcmFjdGVyLCB1c2UgaXQgbGl0ZXJhbGx5XG4gICAgICByZXN1bHQgKz0gY2hhcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBjcmVhdGVzIGEgcmFuZG9tIHN0cmluZ1xuICpcbiAqIGBgYHRzXG4gKiBjcmVhdGVSYW5kb21TdHJpbmcoJ0FBQUEnKVxuICogLy89PiAnQUdIUidcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwYXR0ZXJuQXJnIHRoZSBwYXR0ZXJuIGFyZ3VtZW50IHRvIHVzZSwgQWEwISogYXJlIHZpYWJsZSBwYXR0ZXJuIGRlc2NyaXRvcnNcbiAqIEBwYXJhbSBsZW5ndGhBcmcgIHRoZSBsZW5ndGggb2YgdGhlIHJhbmRvbSBzdHJpbmdcbiAqIEBwYXJhbSBvcHRpb25zQXJnIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVJhbmRvbVN0cmluZyA9IChcbiAgcGF0dGVybkFyZzogc3RyaW5nLFxuICBsZW5ndGhBcmc/OiBudW1iZXIsXG4gIG9wdGlvbnNBcmc/OiBhbnlcbik6IHN0cmluZyA9PiB7XG4gIHJldHVybiBjdXN0b21SYW5kb21hdGljKHBhdHRlcm5BcmcsIGxlbmd0aEFyZywgb3B0aW9uc0FyZyk7XG59O1xuXG4vKipcbiAqIGNyZWF0ZXMgYSBjcnl0aWMgc3RyaW5nIGluIHRoZSBzcGVpY2lmZWQgbGVuZ3RoXG4gKiBAcGFyYW0gbGVuZ3RoQXJnIHRoZSBsZW5ndGggb2YgdGhlIGNyeXB0byBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZyA9ICgpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gcGx1Z2lucy5pc291bmlxdWUudW5pKCk7XG59O1xuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydHN0cmluZy5wbHVnaW5zLmpzJztcblxuLyoqXG4gKiBjb252ZXJ0cyBhbiBlcnJheSBvZiBlbnYgc3RyaW5ncyBmcm9tIGRvY2tlciByZW1vdGUgYXBpIHRvIGFuIHVzYWJsZSBvYmplY3QuXG4gKiBAcGFyYW0gZW52QXJyYXlBcmdcbiAqIEByZXR1cm5zIHt9XG4gKi9cbmV4cG9ydCBjb25zdCBtYWtlRW52T2JqZWN0ID0gZnVuY3Rpb24gKGVudkFycmF5QXJnOiBzdHJpbmdbXSkge1xuICBsZXQgcmV0dXJuT2JqZWN0ID0ge307XG4gIGxldCByZWdleFN0cmluZyA9IC8oLiopPSguKikvO1xuICBpZiAodHlwZW9mIGVudkFycmF5QXJnICE9PSAndW5kZWZpbmVkJykge1xuICAgIGZvciAobGV0IGVudktleSBpbiBlbnZBcnJheUFyZykge1xuICAgICAgbGV0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoZW52QXJyYXlBcmdbZW52S2V5XSk7XG4gICAgICByZXR1cm5PYmplY3RbcmVnZXhNYXRjaGVzWzFdXSA9IHJlZ2V4TWF0Y2hlc1syXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldHVybk9iamVjdDtcbn07XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0c3RyaW5nLnBsdWdpbnMuanMnO1xuXG4vKipcbiAqIHNwbGl0cyBhIHN0cmluZyBpbnRvIGFuIGFycmF5XG4gKiBAcGFyYW0gc3RyaW5nQXJnXG4gKi9cbmNvbnN0IHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsgPSAoc3RyaW5nQXJnOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gIGxldCByZXN1bHRBcnJheSA9IHN0cmluZ0FyZy5zcGxpdCgnXFxuJyk7XG4gIHJldHVybiBjbGVhblN0cmluZ0FycmF5KHJlc3VsdEFycmF5KTtcbn07XG5cbi8qKlxuICogam9pbnMgYSBzdHJpbmcgdG9nZXRoZXIgYWdhaW5cbiAqIEBwYXJhbSBzdHJpbmdBcnJheUFyZ1xuICovXG5jb25zdCBqb2luU3RyaW5nV2l0aExpbmVCcmVha3MgPSAoc3RyaW5nQXJyYXlBcmc6IHN0cmluZ1tdKTogc3RyaW5nID0+IHtcbiAgbGV0IHJlc3VsdFN0cmluZzogc3RyaW5nID0gJyc7XG4gIGZvciAobGV0IGxpbmUgb2Ygc3RyaW5nQXJyYXlBcmcpIHtcbiAgICByZXN1bHRTdHJpbmcgPSByZXN1bHRTdHJpbmcgKyBsaW5lICsgJ1xcbic7IC8vIGFkZCBuZXcgbGluZSBhdCBlbmRcbiAgfVxuICByZXR1cm4gcmVzdWx0U3RyaW5nO1xufTtcblxuLyoqXG4gKiBjbGVhbnMgZmlyc3QgYW5kIGxhc3QgbGluZSBpbiBjYXNlIHRoZXkgYXJlIGVtcHR5XG4gKiBAcGFyYW0gc3RyaW5nQXJyYXlBcmdcbiAqL1xuY29uc3QgY2xlYW5TdHJpbmdBcnJheSA9IChzdHJpbmdBcnJheUFyZzogc3RyaW5nW10pOiBzdHJpbmdbXSA9PiB7XG4gIGxldCB0ZXN0UmVnZXggPSAvXltcXHNdKiQvO1xuICBpZiAodGVzdFJlZ2V4LnRlc3Qoc3RyaW5nQXJyYXlBcmdbMF0pKSB7XG4gICAgc3RyaW5nQXJyYXlBcmcuc2hpZnQoKTtcbiAgfVxuICBpZiAodGVzdFJlZ2V4LnRlc3Qoc3RyaW5nQXJyYXlBcmdbc3RyaW5nQXJyYXlBcmcubGVuZ3RoIC0gMV0pKSB7XG4gICAgc3RyaW5nQXJyYXlBcmcucG9wKCk7XG4gIH1cbiAgcmV0dXJuIHN0cmluZ0FycmF5QXJnO1xufTtcblxuLyoqXG4gKiBpbmRlbnQgYW4gYXJyYXlcbiAqIEBwYXJhbSBzdHJpbmdBcmdcbiAqIEBwYXJhbSBzcGFjZUFtb3VudFxuICovXG5leHBvcnQgY29uc3QgaW5kZW50ID0gKHN0cmluZ0FyZzogc3RyaW5nLCBzcGFjZUFtb3VudDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgbGV0IGxvY2FsU3RyaW5nQXJyYXkgPSBzcGxpdFN0cmluZ0F0TGluZUJyZWFrKHN0cmluZ0FyZyk7XG4gIGZvciAobGV0IHN0cmluZ0FyZyBvZiBsb2NhbFN0cmluZ0FycmF5KSB7XG4gICAgc3RyaW5nQXJnID0gJyAnLnJlcGVhdChzcGFjZUFtb3VudCkgKyBzdHJpbmdBcmc7XG4gIH1cbiAgbGV0IHJlc3VsdFN0cmluZyA9IGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcyhsb2NhbFN0cmluZ0FycmF5KTtcbiAgcmV0dXJuIHJlc3VsdFN0cmluZztcbn07XG5cbi8qKlxuICogaW5kZW50cyBhIHN0cmluZyB3aXRoIHByZWZpeFxuICogQHBhcmFtIHN0cmluZ0FyZ1xuICogQHBhcmFtIHByZWZpeEFyZ1xuICovXG5leHBvcnQgY29uc3QgaW5kZW50V2l0aFByZWZpeCA9IChzdHJpbmdBcmc6IHN0cmluZywgcHJlZml4QXJnOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBsZXQgcmVzdWx0U3RyaW5nOiBzdHJpbmc7XG4gIGxldCBzdHJpbmdBcnJheSA9IHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsoc3RyaW5nQXJnKTtcbiAgbGV0IHJlc3VsdEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBzdHJpbmdJdGVtIG9mIHN0cmluZ0FycmF5KSB7XG4gICAgcmVzdWx0QXJyYXkucHVzaChwcmVmaXhBcmcgKyBzdHJpbmdJdGVtKTtcbiAgfVxuICByZXN1bHRTdHJpbmcgPSBqb2luU3RyaW5nV2l0aExpbmVCcmVha3MocmVzdWx0QXJyYXkpO1xuICByZXR1cm4gcmVzdWx0U3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZSA9IChzdHJpbmdBcmc6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGxldCByZXN1bHRTdHJpbmc6IHN0cmluZztcbiAgbGV0IHNwbGl0U3RyaW5nQXJyYXk6IHN0cmluZ1tdID0gc3BsaXRTdHJpbmdBdExpbmVCcmVhayhzdHJpbmdBcmcpO1xuICBsZXQgbWluQ29tbW9uTGVmdE9mZnNldDogbnVtYmVyO1xuXG4gIGNvbnN0IGRlSW5kZW50UmVnZXggPSAvXihcXHMqKS87XG4gIGNvbnN0IGVtcHR5TGluZVJlZ2V4ID0gL14oXFxzKikkLztcblxuICBmb3IgKGxldCBzdHJpbmdJdGVtIG9mIHNwbGl0U3RyaW5nQXJyYXkpIHtcbiAgICBsZXQgb2Zmc2V0U3RyaW5nID0gZGVJbmRlbnRSZWdleC5leGVjKHN0cmluZ0l0ZW0pWzFdO1xuICAgIGlmIChcbiAgICAgICh0eXBlb2YgbWluQ29tbW9uTGVmdE9mZnNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgb2Zmc2V0U3RyaW5nLmxlbmd0aCA8IG1pbkNvbW1vbkxlZnRPZmZzZXQpICYmXG4gICAgICAhZW1wdHlMaW5lUmVnZXgudGVzdChzdHJpbmdJdGVtKVxuICAgICkge1xuICAgICAgbWluQ29tbW9uTGVmdE9mZnNldCA9IG9mZnNldFN0cmluZy5sZW5ndGg7XG4gICAgfVxuICB9XG4gIGxldCByZXN1bHRTcGxpdFN0cmluZ0FycmF5ID0gW107XG4gIGZvciAobGV0IHN0cmluZ0l0ZW0gb2Ygc3BsaXRTdHJpbmdBcnJheSkge1xuICAgIHJlc3VsdFNwbGl0U3RyaW5nQXJyYXkucHVzaChzdHJpbmdJdGVtLnN1YnN0cihtaW5Db21tb25MZWZ0T2Zmc2V0KSk7XG4gIH1cbiAgcmVzdWx0U3RyaW5nID0gam9pblN0cmluZ1dpdGhMaW5lQnJlYWtzKHJlc3VsdFNwbGl0U3RyaW5nQXJyYXkpO1xuICByZXR1cm4gcmVzdWx0U3RyaW5nO1xufTtcbiIsICIvKipcbiAqIHJlcGxhY2VzIGFsbCBvY2N1cmVuY2VzIG9mIHNvbWV0aGluZyBpbiBhIHN0cmluZ1xuICogQHBhcmFtIHN0cmluZ0FyZ1xuICogQHBhcmFtIHNlYXJjaFBhdHRlcm5cbiAqIEBwYXJhbSByZXBsYWNlbWVudFN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgcmVwbGFjZUFsbCA9IChzdHJpbmdBcmc6IHN0cmluZywgc2VhcmNoUGF0dGVybjogc3RyaW5nLCByZXBsYWNlbWVudFN0cmluZzogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBzdHJpbmdBcmcucmVwbGFjZShuZXcgUmVnRXhwKHNlYXJjaFBhdHRlcm4sICdnJyksIHJlcGxhY2VtZW50U3RyaW5nKTtcbn07XG5cbi8qKlxuICogQ3VzdG9tIGltcGxlbWVudGF0aW9uIG9mIHN0cmlwLWluZGVudFxuICogUmVtb3ZlcyB0aGUgbWluaW11bSBpbmRlbnRhdGlvbiBmcm9tIGFsbCBsaW5lc1xuICovXG5jb25zdCBzdHJpcEluZGVudCA9IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxpbmVzID0gc3RyLnNwbGl0KCdcXG4nKTtcbiAgXG4gIC8vIEZpbmQgdGhlIG1pbmltdW0gaW5kZW50YXRpb24gKGlnbm9yaW5nIGVtcHR5IGxpbmVzKVxuICBsZXQgbWluSW5kZW50ID0gSW5maW5pdHk7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChsaW5lLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2goL14oXFxzKikvKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtaW5JbmRlbnQgPSBNYXRoLm1pbihtaW5JbmRlbnQsIG1hdGNoWzFdLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvLyBJZiBubyBpbmRlbnRhdGlvbiBmb3VuZCwgcmV0dXJuIG9yaWdpbmFsIHN0cmluZ1xuICBpZiAobWluSW5kZW50ID09PSBJbmZpbml0eSB8fCBtaW5JbmRlbnQgPT09IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIFxuICAvLyBSZW1vdmUgdGhlIG1pbmltdW0gaW5kZW50YXRpb24gZnJvbSBhbGwgbGluZXNcbiAgcmV0dXJuIGxpbmVzLm1hcChsaW5lID0+IHtcbiAgICBpZiAobGluZS5sZW5ndGggPj0gbWluSW5kZW50KSB7XG4gICAgICByZXR1cm4gbGluZS5zbGljZShtaW5JbmRlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gbGluZTtcbiAgfSkuam9pbignXFxuJyk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElOb3JtYWxpemVPcHRpb25zIHtcbiAgc3RyaXBMZWFkaW5nVHJhaWxpbmdFbXB0eUxpbmVzPzogYm9vbGVhbjtcbiAgc3RyaXBBbGxFbXB0eUxpbmVzPzogYm9vbGVhbjtcbiAgc3RyaXBJbmRlbnQ/OiBib29sZWFuO1xuICBub3JtYWxpemVOZXdsaW5lPzogYm9vbGVhbjtcbiAgcmVwbGFjZVRhYnM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBzdHJpbmdcbiAqIEBwYXJhbSBzdHJpbmdBcmdcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBzdGFuZGFyZCA9IChzdHJpbmdBcmc6IHN0cmluZywgb3B0aW9ucz86IElOb3JtYWxpemVPcHRpb25zKTogc3RyaW5nID0+IHtcbiAgbGV0IHJlc3VsdCA9IHN0cmluZ0FyZztcblxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5zdHJpcEluZGVudCkge1xuICAgIHJlc3VsdCA9IHN0cmlwSW5kZW50KHJlc3VsdCk7IC8vIGZpeCBpbmRlbnRpb25cbiAgfVxuXG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLm5vcm1hbGl6ZU5ld2xpbmUpIHtcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXFxyXFxuL2csICdcXG4nKTsgLy8gZml4IG5ld2xpbmVzXG4gIH1cblxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5yZXBsYWNlVGFicykge1xuICAgIHJlc3VsdCA9IHJlcGxhY2VBbGwocmVzdWx0LCAnXFx0LycsICcgJyk7IC8vIGZpeCB0YWJzXG4gIH1cblxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5zdHJpcExlYWRpbmdUcmFpbGluZ0VtcHR5TGluZXMpIHtcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXlxccypbXFxyXFxuXS9nbSwgJycpLnJlcGxhY2UoL1xccypbXFxyXFxuXSQvZ20sICcnKTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnN0cmlwQWxsRW1wdHlMaW5lcykge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9eXFxzKltcXHJcXG5dL2dtLCAnJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuIiwgIi8qKlxuICogdGhlIHR5cGUgZm9yIGJhc2UgNjRcbiAqL1xuZXhwb3J0IHR5cGUgVFN0cmluZ0lucHV0VHlwZSA9ICdzdHJpbmcnIHwgJ2Jhc2U2NCcgfCAnYmFzZTY0dXJpJztcblxuLyoqXG4gKiBDcm9zcy1wbGF0Zm9ybSBiYXNlNjQgaW1wbGVtZW50YXRpb25cbiAqIFdvcmtzIGluIGJvdGggTm9kZS5qcyBhbmQgYnJvd3NlciBlbnZpcm9ubWVudHNcbiAqL1xuY29uc3QgdW5pdmVyc2FsQmFzZTY0ID0ge1xuICBlbmNvZGU6IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBOb2RlLmpzIGVudmlyb25tZW50XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAndXRmOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBidG9hICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gQnJvd3NlciBlbnZpcm9ubWVudFxuICAgICAgLy8gSGFuZGxlIFVuaWNvZGUgcHJvcGVybHlcbiAgICAgIGNvbnN0IHV0ZjhCeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpO1xuICAgICAgY29uc3QgYmluYXJ5U3RyaW5nID0gQXJyYXkuZnJvbSh1dGY4Qnl0ZXMsIGJ5dGUgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKSkuam9pbignJyk7XG4gICAgICByZXR1cm4gYnRvYShiaW5hcnlTdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjayBwdXJlIEpTIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcbiAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cik7XG4gICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICBcbiAgICAgIHdoaWxlIChpIDwgYnl0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGEgPSBieXRlc1tpKytdO1xuICAgICAgICBjb25zdCBiID0gaSA8IGJ5dGVzLmxlbmd0aCA/IGJ5dGVzW2krK10gOiAwO1xuICAgICAgICBjb25zdCBjID0gaSA8IGJ5dGVzLmxlbmd0aCA/IGJ5dGVzW2krK10gOiAwO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgYml0bWFwID0gKGEgPDwgMTYpIHwgKGIgPDwgOCkgfCBjO1xuICAgICAgICBcbiAgICAgICAgcmVzdWx0ICs9IGNoYXJzLmNoYXJBdCgoYml0bWFwID4+IDE4KSAmIDYzKTtcbiAgICAgICAgcmVzdWx0ICs9IGNoYXJzLmNoYXJBdCgoYml0bWFwID4+IDEyKSAmIDYzKTtcbiAgICAgICAgcmVzdWx0ICs9IGkgLSAyIDwgYnl0ZXMubGVuZ3RoID8gY2hhcnMuY2hhckF0KChiaXRtYXAgPj4gNikgJiA2MykgOiAnPSc7XG4gICAgICAgIHJlc3VsdCArPSBpIC0gMSA8IGJ5dGVzLmxlbmd0aCA/IGNoYXJzLmNoYXJBdChiaXRtYXAgJiA2MykgOiAnPSc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9LFxuICBcbiAgZGVjb2RlOiAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIC8vIEhhbmRsZSBiYXNlNjR1cmkgYnkgY29udmVydGluZyBiYWNrIHRvIHN0YW5kYXJkIGJhc2U2NFxuICAgIGNvbnN0IGJhc2U2NFN0cmluZyA9IHN0clxuICAgICAgLnJlcGxhY2UoLy0vZywgJysnKVxuICAgICAgLnJlcGxhY2UoL18vZywgJy8nKVxuICAgICAgLnBhZEVuZChzdHIubGVuZ3RoICsgKCg0IC0gKHN0ci5sZW5ndGggJSA0KSkgJSA0KSwgJz0nKTtcbiAgICBcbiAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIE5vZGUuanMgZW52aXJvbm1lbnRcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShiYXNlNjRTdHJpbmcsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGF0b2IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBCcm93c2VyIGVudmlyb25tZW50XG4gICAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBhdG9iKGJhc2U2NFN0cmluZyk7XG4gICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeVN0cmluZy5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYnl0ZXNbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnl0ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjayBwdXJlIEpTIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcbiAgICAgIGxldCBieXRlczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIFxuICAgICAgd2hpbGUgKGkgPCBiYXNlNjRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGVuY29kZWQxID0gY2hhcnMuaW5kZXhPZihiYXNlNjRTdHJpbmcuY2hhckF0KGkrKykpO1xuICAgICAgICBjb25zdCBlbmNvZGVkMiA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpKyspKTtcbiAgICAgICAgY29uc3QgZW5jb2RlZDMgPSBjaGFycy5pbmRleE9mKGJhc2U2NFN0cmluZy5jaGFyQXQoaSsrKSk7XG4gICAgICAgIGNvbnN0IGVuY29kZWQ0ID0gY2hhcnMuaW5kZXhPZihiYXNlNjRTdHJpbmcuY2hhckF0KGkrKykpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgYml0bWFwID0gKGVuY29kZWQxIDw8IDE4KSB8IChlbmNvZGVkMiA8PCAxMikgfCAoZW5jb2RlZDMgPDwgNikgfCBlbmNvZGVkNDtcbiAgICAgICAgXG4gICAgICAgIGJ5dGVzLnB1c2goKGJpdG1hcCA+PiAxNikgJiAyNTUpO1xuICAgICAgICBpZiAoZW5jb2RlZDMgIT09IDY0KSBieXRlcy5wdXNoKChiaXRtYXAgPj4gOCkgJiAyNTUpO1xuICAgICAgICBpZiAoZW5jb2RlZDQgIT09IDY0KSBieXRlcy5wdXNoKGJpdG1hcCAmIDI1NSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogaGFuZGxlIGJhc2U2NCBzdHJpbmdzXG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlNjQge1xuICBwcml2YXRlIHJlZlN0cmluZzogc3RyaW5nO1xuICBjb25zdHJ1Y3RvcihpbnB1dFN0cmluZ0FyZywgdHlwZUFyZzogVFN0cmluZ0lucHV0VHlwZSkge1xuICAgIHN3aXRjaCAodHlwZUFyZykge1xuICAgICAgY2FzZSAnc3RyaW5nJzogLy8gZWFzaWVzdCBjYXNlXG4gICAgICAgIHRoaXMucmVmU3RyaW5nID0gaW5wdXRTdHJpbmdBcmc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgdGhpcy5yZWZTdHJpbmcgPSBiYXNlNjQuZGVjb2RlKGlucHV0U3RyaW5nQXJnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdiYXNlNjR1cmknOlxuICAgICAgICB0aGlzLnJlZlN0cmluZyA9IGJhc2U2NC5kZWNvZGUoaW5wdXRTdHJpbmdBcmcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgc2ltcGxlIHN0cmluZyAodW5lbmNvZGVkKVxuICAgKi9cbiAgZ2V0IHNpbXBsZVN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5yZWZTdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogdGhlIGJhc2U2NCBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIG9yaWdpbmFsIHN0cmluZ1xuICAgKi9cbiAgZ2V0IGJhc2U2NFN0cmluZygpIHtcbiAgICByZXR1cm4gYmFzZTY0LmVuY29kZSh0aGlzLnJlZlN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogdGhlIGJhc2U2NHVyaSBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIG9yaWdpbmFsIHN0cmluZ1xuICAgKi9cbiAgZ2V0IGJhc2U2NFVyaVN0cmluZygpIHtcbiAgICByZXR1cm4gYmFzZTY0LmVuY29kZVVyaSh0aGlzLnJlZlN0cmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IGxldCBiYXNlNjQgPSB7XG4gIC8qKlxuICAgKiBlbmNvZGVzIHRoZSBzdHJpbmdcbiAgICovXG4gIGVuY29kZTogKHN0cmluZ0FyZzogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHVuaXZlcnNhbEJhc2U2NC5lbmNvZGUoc3RyaW5nQXJnKTtcbiAgfSxcblxuICAvKipcbiAgICogZW5jb2RlcyBhIHN0cmluZ0FyZyB0byBiYXNlNjQgdXJpIHN0eWxlXG4gICAqL1xuICBlbmNvZGVVcmk6IChzdHJpbmdBcmc6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiB1bml2ZXJzYWxCYXNlNjQuZW5jb2RlKHN0cmluZ0FyZylcbiAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICAucmVwbGFjZSgvPS9nLCAnJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIGRlY29kZXMgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdcbiAgICovXG4gIGRlY29kZTogKHN0cmluZ0FyZzogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHVuaXZlcnNhbEJhc2U2NC5kZWNvZGUoc3RyaW5nQXJnKTtcbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHN0cmluZ0FyZ1xuICAgKiBjaGVja3Mgd2V0aGVyIHRoZSBzdHJpbmcgaXMgYmFzZTY0IGVuY29kZWRcbiAgICovXG4gIGlzQmFzZTY0OiAoc3RyaW5nQXJnOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZWdleCA9IC9eKFtBLVphLXowLTkrL117NH0pKihbQS1aYS16MC05Ky9dezN9PXxbQS1aYS16MC05Ky9dezJ9PT0pPyQvO1xuICAgIHJldHVybiByZWdleC50ZXN0KHN0cmluZ0FyZyk7XG4gIH0sXG59O1xuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydHN0cmluZy5wbHVnaW5zLmpzJztcbmltcG9ydCAqIGFzIGJhc2U2NCBmcm9tICcuL3NtYXJ0c3RyaW5nLmJhc2U2NC5qcyc7XG5cbmV4cG9ydCBjb25zdCBpc1V0ZjggPSAoc3RyaW5nQXJnOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgLy8gQ29udmVydCBzdHJpbmcgdG8gYSBVaW50OEFycmF5LiBJbiBicm93c2VycywgdGhpcyB3aWxsIGJlIGEgYml0IG1vcmUgY29tcGxleFxuICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gY29udmVydCB0aGUgc3RyaW5nIHRvIGEgYmluYXJ5IHJlcHJlc2VudGF0aW9uIGZpcnN0LlxuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIGNvbnN0IGJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoc3RyaW5nQXJnKTtcblxuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChpIDwgYnl0ZXMubGVuZ3RoKSB7XG4gICAgaWYgKFxuICAgICAgLy8gQVNDSUlcbiAgICAgIGJ5dGVzW2ldID09PSAweDA5IHx8XG4gICAgICBieXRlc1tpXSA9PT0gMHgwYSB8fFxuICAgICAgYnl0ZXNbaV0gPT09IDB4MGQgfHxcbiAgICAgICgweDIwIDw9IGJ5dGVzW2ldICYmIGJ5dGVzW2ldIDw9IDB4N2UpXG4gICAgKSB7XG4gICAgICBpICs9IDE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAvLyBub24tb3ZlcmxvbmcgMi1ieXRlXG4gICAgICAweGMyIDw9IGJ5dGVzW2ldICYmXG4gICAgICBieXRlc1tpXSA8PSAweGRmICYmXG4gICAgICAweDgwIDw9IGJ5dGVzW2kgKyAxXSAmJlxuICAgICAgYnl0ZXNbaSArIDFdIDw9IDB4YmZcbiAgICApIHtcbiAgICAgIGkgKz0gMjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIC8vIGV4Y2x1ZGluZyBvdmVybG9uZ3NcbiAgICAgIChieXRlc1tpXSA9PT0gMHhlMCAmJlxuICAgICAgICAweGEwIDw9IGJ5dGVzW2kgKyAxXSAmJlxuICAgICAgICBieXRlc1tpICsgMV0gPD0gMHhiZiAmJlxuICAgICAgICAweDgwIDw9IGJ5dGVzW2kgKyAyXSAmJlxuICAgICAgICBieXRlc1tpICsgMl0gPD0gMHhiZikgfHxcbiAgICAgIC8vIHN0cmFpZ2h0IDMtYnl0ZVxuICAgICAgKCgoMHhlMSA8PSBieXRlc1tpXSAmJiBieXRlc1tpXSA8PSAweGVjKSB8fCBieXRlc1tpXSA9PT0gMHhlZSB8fCBieXRlc1tpXSA9PT0gMHhlZikgJiZcbiAgICAgICAgMHg4MCA8PSBieXRlc1tpICsgMV0gJiZcbiAgICAgICAgYnl0ZXNbaSArIDFdIDw9IDB4YmYgJiZcbiAgICAgICAgMHg4MCA8PSBieXRlc1tpICsgMl0gJiZcbiAgICAgICAgYnl0ZXNbaSArIDJdIDw9IDB4YmYpIHx8XG4gICAgICAvLyBleGNsdWRpbmcgc3Vycm9nYXRlc1xuICAgICAgKGJ5dGVzW2ldID09PSAweGVkICYmXG4gICAgICAgIDB4ODAgPD0gYnl0ZXNbaSArIDFdICYmXG4gICAgICAgIGJ5dGVzW2kgKyAxXSA8PSAweDlmICYmXG4gICAgICAgIDB4ODAgPD0gYnl0ZXNbaSArIDJdICYmXG4gICAgICAgIGJ5dGVzW2kgKyAyXSA8PSAweGJmKVxuICAgICkge1xuICAgICAgaSArPSAzO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgLy8gcGxhbmVzIDEtM1xuICAgICAgKGJ5dGVzW2ldID09PSAweGYwICYmXG4gICAgICAgIDB4OTAgPD0gYnl0ZXNbaSArIDFdICYmXG4gICAgICAgIGJ5dGVzW2kgKyAxXSA8PSAweGJmICYmXG4gICAgICAgIDB4ODAgPD0gYnl0ZXNbaSArIDJdICYmXG4gICAgICAgIGJ5dGVzW2kgKyAyXSA8PSAweGJmICYmXG4gICAgICAgIDB4ODAgPD0gYnl0ZXNbaSArIDNdICYmXG4gICAgICAgIGJ5dGVzW2kgKyAzXSA8PSAweGJmKSB8fFxuICAgICAgLy8gcGxhbmVzIDQtMTVcbiAgICAgICgweGYxIDw9IGJ5dGVzW2ldICYmXG4gICAgICAgIGJ5dGVzW2ldIDw9IDB4ZjMgJiZcbiAgICAgICAgMHg4MCA8PSBieXRlc1tpICsgMV0gJiZcbiAgICAgICAgYnl0ZXNbaSArIDFdIDw9IDB4YmYgJiZcbiAgICAgICAgMHg4MCA8PSBieXRlc1tpICsgMl0gJiZcbiAgICAgICAgYnl0ZXNbaSArIDJdIDw9IDB4YmYgJiZcbiAgICAgICAgMHg4MCA8PSBieXRlc1tpICsgM10gJiZcbiAgICAgICAgYnl0ZXNbaSArIDNdIDw9IDB4YmYpIHx8XG4gICAgICAvLyBwbGFuZSAxNlxuICAgICAgKGJ5dGVzW2ldID09PSAweGY0ICYmXG4gICAgICAgIDB4ODAgPD0gYnl0ZXNbaSArIDFdICYmXG4gICAgICAgIGJ5dGVzW2kgKyAxXSA8PSAweDhmICYmXG4gICAgICAgIDB4ODAgPD0gYnl0ZXNbaSArIDJdICYmXG4gICAgICAgIGJ5dGVzW2kgKyAyXSA8PSAweGJmICYmXG4gICAgICAgIDB4ODAgPD0gYnl0ZXNbaSArIDNdICYmXG4gICAgICAgIGJ5dGVzW2kgKyAzXSA8PSAweGJmKVxuICAgICkge1xuICAgICAgaSArPSA0O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBpc0Jhc2U2NCA9IChzdHJpbmdBcmc6IHN0cmluZykgPT4ge1xuICBjb25zdCBub3RCYXNlNjQgPSAvW15BLVowLTkrXFwvPV0vaTtcbiAgY29uc3QgbGVuID0gc3RyaW5nQXJnLmxlbmd0aDtcbiAgaWYgKCFsZW4gfHwgbGVuICUgNCAhPT0gMCB8fCBub3RCYXNlNjQudGVzdChzdHJpbmdBcmcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGZpcnN0UGFkZGluZ0NoYXIgPSBzdHJpbmdBcmcuaW5kZXhPZignPScpO1xuICByZXR1cm4gKFxuICAgIGZpcnN0UGFkZGluZ0NoYXIgPT09IC0xIHx8XG4gICAgZmlyc3RQYWRkaW5nQ2hhciA9PT0gbGVuIC0gMSB8fFxuICAgIChmaXJzdFBhZGRpbmdDaGFyID09PSBsZW4gLSAyICYmIHN0cmluZ0FyZ1tsZW4gLSAxXSA9PT0gJz0nKVxuICApO1xufTtcbiIsICJleHBvcnQgY2xhc3MgRG9tYWluIHtcbiAgcHVibGljIGZ1bGxOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBsZXZlbDE6IHN0cmluZztcbiAgcHVibGljIGxldmVsMjogc3RyaW5nO1xuICBwdWJsaWMgbGV2ZWwzOiBzdHJpbmc7XG4gIHB1YmxpYyBsZXZlbDQ6IHN0cmluZztcbiAgcHVibGljIGxldmVsNTogc3RyaW5nO1xuICBwdWJsaWMgcHJvdG9jb2w6IHN0cmluZztcbiAgcHVibGljIHpvbmVOYW1lOiBzdHJpbmc7XG4gIC8vIGFsaWFzZXNcbiAgcHVibGljIHRvcExldmVsOiBzdHJpbmc7XG4gIHB1YmxpYyBkb21haW5OYW1lO1xuICBwdWJsaWMgc3ViRG9tYWluO1xuICBwdWJsaWMgcG9ydDtcbiAgcHVibGljIG5vZGVQYXJzZWRVcmw6IFVSTDtcbiAgY29uc3RydWN0b3IoZG9tYWluU3RyaW5nQXJnOiBzdHJpbmcpIHtcbiAgICAvLyBsZXRzIGRvIHRoZSBub2RlIHN0YW5kYXJkIHN0dWZmIGZpcnN0XG4gICAgdGhpcy5wcm90b2NvbCA9IHRoaXMuX3Byb3RvY29sUmVnZXgoZG9tYWluU3RyaW5nQXJnKTtcbiAgICBpZiAoIXRoaXMucHJvdG9jb2wpIHtcbiAgICAgIGRvbWFpblN0cmluZ0FyZyA9IGBodHRwczovLyR7ZG9tYWluU3RyaW5nQXJnfWA7XG4gICAgfVxuICAgIHRoaXMubm9kZVBhcnNlZFVybCA9IG5ldyBVUkwoZG9tYWluU3RyaW5nQXJnKTtcbiAgICB0aGlzLnBvcnQgPSB0aGlzLm5vZGVQYXJzZWRVcmwucG9ydDtcblxuICAgIC8vIGxldHMgZG8gdGhlIHJlc3QgYWZ0ZXJcbiAgICBjb25zdCByZWdleE1hdGNoZXMgPSB0aGlzLl9kb21haW5SZWdleChcbiAgICAgIGRvbWFpblN0cmluZ0FyZy5yZXBsYWNlKHRoaXMubm9kZVBhcnNlZFVybC5wYXRobmFtZSwgJycpXG4gICAgKTtcbiAgICB0aGlzLmZ1bGxOYW1lID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gNTsgaSsrKSB7XG4gICAgICBpZiAocmVnZXhNYXRjaGVzW2kgLSAxXSkge1xuICAgICAgICBjb25zdCBsb2NhbE1hdGNoID0gcmVnZXhNYXRjaGVzW2kgLSAxXTtcbiAgICAgICAgdGhpc1snbGV2ZWwnICsgaS50b1N0cmluZygpXSA9IGxvY2FsTWF0Y2g7XG4gICAgICAgIGlmICh0aGlzLmZ1bGxOYW1lID09PSAnJykge1xuICAgICAgICAgIHRoaXMuZnVsbE5hbWUgPSBsb2NhbE1hdGNoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZnVsbE5hbWUgPSBsb2NhbE1hdGNoICsgJy4nICsgdGhpcy5mdWxsTmFtZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1snbGV2ZWwnICsgaS50b1N0cmluZygpXSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy56b25lTmFtZSA9IHRoaXMubGV2ZWwyICsgJy4nICsgdGhpcy5sZXZlbDE7XG5cbiAgICAvLyBhbGlhc2VzXG4gICAgdGhpcy50b3BMZXZlbCA9IHRoaXMubGV2ZWwxO1xuICAgIHRoaXMuZG9tYWluTmFtZSA9IHRoaXMubGV2ZWwyO1xuICAgIHRoaXMuc3ViRG9tYWluID0gdGhpcy5sZXZlbDM7XG4gIH1cblxuICAvLyBoZWxwZXIgZnVuY3Rpb25zXG5cbiAgLyoqICovXG4gIHByaXZhdGUgX2RvbWFpblJlZ2V4KHN0cmluZ0FyZzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVnZXhTdHJpbmcgPVxuICAgICAgLyhbYS16QS1aMC05XFwtXFxfXSopXFwuezAsMX0oW2EtekEtWjAtOVxcLVxcX10qKVxcLnswLDF9KFthLXpBLVowLTlcXC1cXF9dKilcXC57MCwxfShbYS16QS1aMC05XFwtXFxfXSopXFwuezAsMX0oW2EtekEtWjAtOVxcLVxcX10qKVxcLnswLDF9JC87XG4gICAgY29uc3QgcmVnZXhNYXRjaGVzID0gcmVnZXhTdHJpbmcuZXhlYyhzdHJpbmdBcmcpO1xuICAgIHJlZ2V4TWF0Y2hlcy5yZXZlcnNlKCk7IC8vbWFrZSBzdXJlIHdlIGJ1aWxkIHRoZSBkb21haW4gZnJvbSB0b3BsZXZlbCB0byBzdWJkb21haW4gKHJldmVyc2VkIG9yZGVyKVxuICAgIHJlZ2V4TWF0Y2hlcy5wb3AoKTsgLy8gcG9wIHRoZSBsYXN0IGVsZW1lbnQsIHdoaWNoIGlzLCBzaW5jZSB3ZSByZXZlcnNlZCB0aGUgQXJyYXksIHRoZSBmdWxsIFN0cmluZyBvZiBtYXRjaGVkIGVsZW1lbnRzXG4gICAgY29uc3QgcmVnZXhNYXRjaGVzRmlsdGVyZWQgPSByZWdleE1hdGNoZXMuZmlsdGVyKGZ1bmN0aW9uIChzdHJpbmdBcmc6IHN0cmluZykge1xuICAgICAgcmV0dXJuIHN0cmluZ0FyZyAhPT0gJyc7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlZ2V4TWF0Y2hlc0ZpbHRlcmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJvdG9jb2xSZWdleChzdHJpbmdBcmc6IHN0cmluZykge1xuICAgIGNvbnN0IHJlZ2V4U3RyaW5nID0gL14oW2EtekEtWjAtOV0qKTpcXC9cXC8vO1xuICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoc3RyaW5nQXJnKTtcbiAgICBpZiAocmVnZXhNYXRjaGVzKSB7XG4gICAgICByZXR1cm4gcmVnZXhNYXRjaGVzWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3BvcnRSZWdleChzdHJpbmdBcmc6IHN0cmluZykge1xuICAgIGNvbnN0IHJlZ2V4U3RyaW5nID0gL14oW2EtekEtWjAtOV0qKTpcXC9cXC8vO1xuICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoc3RyaW5nQXJnKTtcbiAgICBpZiAocmVnZXhNYXRjaGVzKSB7XG4gICAgICByZXR1cm4gcmVnZXhNYXRjaGVzWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydHN0cmluZy5wbHVnaW5zLmpzJztcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0gY2xhc3NlcyAtLS0tLS0tLS0tLS0tLS0tLS0tICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbmV4cG9ydCBjbGFzcyBHaXRSZXBvIHtcbiAgaG9zdDogc3RyaW5nO1xuICB1c2VyOiBzdHJpbmc7XG4gIHJlcG86IHN0cmluZztcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgc3NoVXJsOiBzdHJpbmc7XG4gIGh0dHBzVXJsOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHN0cmluZ0FyZzogc3RyaW5nLCB0b2tlbkFyZz86IHN0cmluZykge1xuICAgIGxldCByZWdleE1hdGNoZXMgPSBnaXRSZWdleChzdHJpbmdBcmcpO1xuICAgIHRoaXMuaG9zdCA9IHJlZ2V4TWF0Y2hlc1sxXTtcbiAgICB0aGlzLnVzZXIgPSByZWdleE1hdGNoZXNbMl07XG4gICAgdGhpcy5yZXBvID0gcmVnZXhNYXRjaGVzWzNdO1xuICAgIHRoaXMuYWNjZXNzVG9rZW4gPSB0b2tlbkFyZztcbiAgICB0aGlzLnNzaFVybCA9IGdpdExpbmsodGhpcy5ob3N0LCB0aGlzLnVzZXIsIHRoaXMucmVwbywgdGhpcy5hY2Nlc3NUb2tlbiwgJ3NzaCcpO1xuICAgIHRoaXMuaHR0cHNVcmwgPSBnaXRMaW5rKHRoaXMuaG9zdCwgdGhpcy51c2VyLCB0aGlzLnJlcG8sIHRoaXMuYWNjZXNzVG9rZW4sICdodHRwcycpO1xuICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5jb25zdCBnaXRSZWdleCA9IGZ1bmN0aW9uIChzdHJpbmdBcmc6IHN0cmluZykge1xuICBjb25zdCByZWdleFN0cmluZyA9XG4gICAgLyhbYS16QS1aMC05XFwtX1xcLl0qKSg/OlxcL3xcXDopKFthLXpBLVowLTlcXC1fXFwuXSopKD86XFwvKShbYS16QS1aMC05XFwtX1xcLl0qKSg/OlxcLmdpdCkvO1xuICBsZXQgcmVnZXhNYXRjaGVzID0gcmVnZXhTdHJpbmcuZXhlYyhzdHJpbmdBcmcpO1xuICByZXR1cm4gcmVnZXhNYXRjaGVzO1xufTtcblxuY29uc3QgZ2l0TGluayA9IGZ1bmN0aW9uIChcbiAgaG9zdEFyZzogc3RyaW5nLFxuICB1c2VyQXJnOiBzdHJpbmcsXG4gIHJlcG9Bcmc6IHN0cmluZyxcbiAgdG9rZW5Bcmc6IHN0cmluZyA9ICcnLFxuICBsaW5rVHlwZUFyZ1xuKTogc3RyaW5nIHtcbiAgbGV0IHJldHVyblN0cmluZztcbiAgaWYgKHRva2VuQXJnICE9PSAnJykge1xuICAgIHRva2VuQXJnID0gdG9rZW5BcmcgKyAnQCc7XG4gIH1cbiAgc3dpdGNoIChsaW5rVHlwZUFyZykge1xuICAgIGNhc2UgJ2h0dHBzJzpcbiAgICAgIHJldHVyblN0cmluZyA9ICdodHRwczovLycgKyB0b2tlbkFyZyArIGhvc3RBcmcgKyAnLycgKyB1c2VyQXJnICsgJy8nICsgcmVwb0FyZyArICcuZ2l0JztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NzaCc6XG4gICAgICByZXR1cm5TdHJpbmcgPSAnZ2l0QCcgKyBob3N0QXJnICsgJzonICsgdXNlckFyZyArICcvJyArIHJlcG9BcmcgKyAnLmdpdCc7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29uc29sZS5lcnJvcignTGluayBUeXBlICcgKyBsaW5rVHlwZUFyZyArICcgbm90IGtub3duJyk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gcmV0dXJuU3RyaW5nO1xufTtcbiIsICJpbXBvcnQgKiBhcyBjcmVhdGUgZnJvbSAnLi9zbWFydHN0cmluZy5jcmVhdGUuanMnO1xuaW1wb3J0ICogYXMgZG9ja2VyIGZyb20gJy4vc21hcnRzdHJpbmcuZG9ja2VyLmpzJztcbmltcG9ydCAqIGFzIGluZGVudCBmcm9tICcuL3NtYXJ0c3RyaW5nLmluZGVudC5qcyc7XG5pbXBvcnQgKiBhcyBub3JtYWxpemUgZnJvbSAnLi9zbWFydHN0cmluZy5ub3JtYWxpemUuanMnO1xuaW1wb3J0ICogYXMgdHlwZSBmcm9tICcuL3NtYXJ0c3RyaW5nLnR5cGUuanMnO1xuXG5leHBvcnQgeyBjcmVhdGUsIGRvY2tlciwgbm9ybWFsaXplLCBpbmRlbnQsIHR5cGUgfTtcblxuZXhwb3J0IHsgQmFzZTY0LCBiYXNlNjQgfSBmcm9tICcuL3NtYXJ0c3RyaW5nLmJhc2U2NC5qcyc7XG5leHBvcnQgeyBEb21haW4gfSBmcm9tICcuL3NtYXJ0c3RyaW5nLmRvbWFpbi5qcyc7XG5leHBvcnQgeyBHaXRSZXBvIH0gZnJvbSAnLi9zbWFydHN0cmluZy5naXQuanMnO1xuIiwgIi8qKlxuICogbG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcXVlcnkub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGAgZmxhZ3MgZnJvbSB0aGVpciBjb2VyY2VkIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xudmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9XG5jbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbmNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbmNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG5jbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbmNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbmNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKlxuICogQWRkcyB0aGUga2V5LXZhbHVlIGBwYWlyYCB0byBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhaXIgVGhlIGtleS12YWx1ZSBwYWlyIHRvIGFkZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG1hcGAuXG4gKi9cbmZ1bmN0aW9uIGFkZE1hcEVudHJ5KG1hcCwgcGFpcikge1xuICAvLyBEb24ndCByZXR1cm4gYG1hcC5zZXRgIGJlY2F1c2UgaXQncyBub3QgY2hhaW5hYmxlIGluIElFIDExLlxuICBtYXAuc2V0KHBhaXJbMF0sIHBhaXJbMV0pO1xuICByZXR1cm4gbWFwO1xufVxuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byBgc2V0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFkZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYHNldGAuXG4gKi9cbmZ1bmN0aW9uIGFkZFNldEVudHJ5KHNldCwgdmFsdWUpIHtcbiAgLy8gRG9uJ3QgcmV0dXJuIGBzZXQuYWRkYCBiZWNhdXNlIGl0J3Mgbm90IGNoYWluYWJsZSBpbiBJRSAxMS5cbiAgc2V0LmFkZCh2YWx1ZSk7XG4gIHJldHVybiBzZXQ7XG59XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucmVkdWNlYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YCBhc1xuICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG5cbiAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBob3N0IG9iamVjdCBpbiBJRSA8IDkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBob3N0IG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0hvc3RPYmplY3QodmFsdWUpIHtcbiAgLy8gTWFueSBob3N0IG9iamVjdHMgYXJlIGBPYmplY3RgIG9iamVjdHMgdGhhdCBjYW4gY29lcmNlIHRvIHN0cmluZ3NcbiAgLy8gZGVzcGl0ZSBoYXZpbmcgaW1wcm9wZXJseSBkZWZpbmVkIGB0b1N0cmluZ2AgbWV0aG9kcy5cbiAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICBpZiAodmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSAhISh2YWx1ZSArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSxcbiAgICBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBvYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgU3ltYm9sID0gcm9vdC5TeW1ib2wsXG4gICAgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheSxcbiAgICBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KSxcbiAgICBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlLFxuICAgIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGUsXG4gICAgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxcbiAgICBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpLFxuICAgIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyksXG4gICAgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpLFxuICAgIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0JyksXG4gICAgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpLFxuICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICByZXR1cm4gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA/IGVudHJpZXMubGVuZ3RoIDogMDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLnNldChrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX19bJ2RlbGV0ZSddKGtleSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgY2FjaGUgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoY2FjaGUgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBjYWNoZS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY2FjaGUgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBjYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIC8vIFNhZmFyaSA4LjEgbWFrZXMgYGFyZ3VtZW50cy5jYWxsZWVgIGVudW1lcmFibGUgaW4gc3RyaWN0IG1vZGUuXG4gIC8vIFNhZmFyaSA5IG1ha2VzIGBhcmd1bWVudHMubGVuZ3RoYCBlbnVtZXJhYmxlIGluIHN0cmljdCBtb2RlLlxuICB2YXIgcmVzdWx0ID0gKGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSlcbiAgICA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZylcbiAgICA6IFtdO1xuXG4gIHZhciBsZW5ndGggPSByZXN1bHQubGVuZ3RoLFxuICAgICAgc2tpcEluZGV4ZXMgPSAhIWxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChrZXkgPT0gJ2xlbmd0aCcgfHwgaXNJbmRleChrZXksIGxlbmd0aCkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xvbmVgIGFuZCBgXy5jbG9uZURlZXBgIHdoaWNoIHRyYWNrc1xuICogdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRnVsbF0gU3BlY2lmeSBhIGNsb25lIGluY2x1ZGluZyBzeW1ib2xzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIHBhcmVudCBvYmplY3Qgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgdGhlaXIgY2xvbmUgY291bnRlcnBhcnRzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLCBpc0RlZXAsIGlzRnVsbCwgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChjdXN0b21pemVyKSB7XG4gICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICB9XG4gIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChpc0Fycikge1xuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICBpZiAoaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHtcbiAgICAgIGlmIChpc0hvc3RPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gaW5pdENsb25lT2JqZWN0KGlzRnVuYyA/IHt9IDogdmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlIDoge307XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBiYXNlQ2xvbmUsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKCFpc0Fycikge1xuICAgIHZhciBwcm9wcyA9IGlzRnVsbCA/IGdldEFsbEtleXModmFsdWUpIDoga2V5cyh2YWx1ZSk7XG4gIH1cbiAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBpc0RlZXAsIGlzRnVsbCwgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90b3R5cGUgVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlQ3JlYXRlKHByb3RvKSB7XG4gIHJldHVybiBpc09iamVjdChwcm90bykgPyBvYmplY3RDcmVhdGUocHJvdG8pIDoge307XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gKGlzRnVuY3Rpb24odmFsdWUpIHx8IGlzSG9zdE9iamVjdCh2YWx1ZSkpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IG5ldyBidWZmZXIuY29uc3RydWN0b3IoYnVmZmVyLmxlbmd0aCk7XG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGRhdGFWaWV3YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFWaWV3IFRoZSBkYXRhIHZpZXcgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy5cbiAqL1xuZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XG4gIHJldHVybiBuZXcgZGF0YVZpZXcuY29uc3RydWN0b3IoYnVmZmVyLCBkYXRhVmlldy5ieXRlT2Zmc2V0LCBkYXRhVmlldy5ieXRlTGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNsb25lRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2xvbmUgdmFsdWVzLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBtYXAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lTWFwKG1hcCwgaXNEZWVwLCBjbG9uZUZ1bmMpIHtcbiAgdmFyIGFycmF5ID0gaXNEZWVwID8gY2xvbmVGdW5jKG1hcFRvQXJyYXkobWFwKSwgdHJ1ZSkgOiBtYXBUb0FycmF5KG1hcCk7XG4gIHJldHVybiBhcnJheVJlZHVjZShhcnJheSwgYWRkTWFwRW50cnksIG5ldyBtYXAuY29uc3RydWN0b3IpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgcmVnZXhwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4cCBUaGUgcmVnZXhwIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTtcbiAgcmVzdWx0Lmxhc3RJbmRleCA9IHJlZ2V4cC5sYXN0SW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBzZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjbG9uZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNsb25lIHZhbHVlcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc2V0LlxuICovXG5mdW5jdGlvbiBjbG9uZVNldChzZXQsIGlzRGVlcCwgY2xvbmVGdW5jKSB7XG4gIHZhciBhcnJheSA9IGlzRGVlcCA/IGNsb25lRnVuYyhzZXRUb0FycmF5KHNldCksIHRydWUpIDogc2V0VG9BcnJheShzZXQpO1xuICByZXR1cm4gYXJyYXlSZWR1Y2UoYXJyYXksIGFkZFNldEVudHJ5LCBuZXcgc2V0LmNvbnN0cnVjdG9yKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCA/IHNvdXJjZVtrZXldIDogbmV3VmFsdWUpO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2wgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2wgcHJvcGVydGllcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9IG5hdGl2ZUdldFN5bWJvbHMgPyBvdmVyQXJnKG5hdGl2ZUdldFN5bWJvbHMsIE9iamVjdCkgOiBzdHViQXJyYXk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSxcbi8vIGZvciBkYXRhIHZpZXdzIGluIEVkZ2UgPCAxNCwgYW5kIHByb21pc2VzIGluIE5vZGUuanMuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgLy8gQWRkIHByb3BlcnRpZXMgYXNzaWduZWQgYnkgYFJlZ0V4cCNleGVjYC5cbiAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHtcbiAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDtcbiAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgIDoge307XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2xvbmVGdW5jIFRoZSBmdW5jdGlvbiB0byBjbG9uZSB2YWx1ZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBjbG9uZUZ1bmMsIGlzRGVlcCkge1xuICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgY2FzZSBpbnQ4VGFnOiBjYXNlIGludDE2VGFnOiBjYXNlIGludDMyVGFnOlxuICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgcmV0dXJuIGNsb25lTWFwKG9iamVjdCwgaXNEZWVwLCBjbG9uZUZ1bmMpO1xuXG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVNldChvYmplY3QsIGlzRGVlcCwgY2xvbmVGdW5jKTtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8IHJlSXNVaW50LnRlc3QodmFsdWUpKSAmJlxuICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICpcbiAqIHZhciBkZWVwID0gXy5jbG9uZURlZXAob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhkZWVwWzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSkge1xuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCB0cnVlLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIC8vIFNhZmFyaSA4LjEgbWFrZXMgYGFyZ3VtZW50cy5jYWxsZWVgIGVudW1lcmFibGUgaW4gc3RyaWN0IG1vZGUuXG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgKCFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgfHwgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gYXJnc1RhZyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gKiBpcyBhbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOC05IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5IGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBpc09iamVjdCh2YWx1ZSkgPyBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZURlZXA7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkYXRhLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSBvcHRzID0geyBjbXA6IG9wdHMgfTtcbiAgICB2YXIgY3ljbGVzID0gKHR5cGVvZiBvcHRzLmN5Y2xlcyA9PT0gJ2Jvb2xlYW4nKSA/IG9wdHMuY3ljbGVzIDogZmFsc2U7XG5cbiAgICB2YXIgY21wID0gb3B0cy5jbXAgJiYgKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFvYmogPSB7IGtleTogYSwgdmFsdWU6IG5vZGVbYV0gfTtcbiAgICAgICAgICAgICAgICB2YXIgYm9iaiA9IHsga2V5OiBiLCB2YWx1ZTogbm9kZVtiXSB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBmKGFvYmosIGJvYmopO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9KShvcHRzLmNtcCk7XG5cbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIHJldHVybiAoZnVuY3Rpb24gc3RyaW5naWZ5IChub2RlKSB7XG4gICAgICAgIGlmIChub2RlICYmIG5vZGUudG9KU09OICYmIHR5cGVvZiBub2RlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUudG9KU09OKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSA9PSAnbnVtYmVyJykgcmV0dXJuIGlzRmluaXRlKG5vZGUpID8gJycgKyBub2RlIDogJ251bGwnO1xuICAgICAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkobm9kZSk7XG5cbiAgICAgICAgdmFyIGksIG91dDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgICAgICAgIG91dCA9ICdbJztcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkpIG91dCArPSAnLCc7XG4gICAgICAgICAgICAgICAgb3V0ICs9IHN0cmluZ2lmeShub2RlW2ldKSB8fCAnbnVsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0ICsgJ10nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG5cbiAgICAgICAgaWYgKHNlZW4uaW5kZXhPZihub2RlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChjeWNsZXMpIHJldHVybiBKU09OLnN0cmluZ2lmeSgnX19jeWNsZV9fJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5wdXNoKG5vZGUpIC0gMTtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhub2RlKS5zb3J0KGNtcCAmJiBjbXAobm9kZSkpO1xuICAgICAgICBvdXQgPSAnJztcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RyaW5naWZ5KG5vZGVba2V5XSk7XG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKG91dCkgb3V0ICs9ICcsJztcbiAgICAgICAgICAgIG91dCArPSBKU09OLnN0cmluZ2lmeShrZXkpICsgJzonICsgdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5zcGxpY2Uoc2VlbkluZGV4LCAxKTtcbiAgICAgICAgcmV0dXJuICd7JyArIG91dCArICd9JztcbiAgICB9KShkYXRhKTtcbn07XG4iLCAiLy8gQHB1c2hyb2NrcyBzY29wZVxuaW1wb3J0ICogYXMgc21hcnRlbnYgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRlbnYnO1xuaW1wb3J0ICogYXMgc21hcnRzdHJpbmcgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcnO1xuXG5leHBvcnQgeyBzbWFydGVudiwgc21hcnRzdHJpbmcgfTtcblxuLy8gdGhpcmQgcGFydHkgc2NvcGVcbmltcG9ydCBsb2Rhc2hDbG9uZURlZXAgZnJvbSAnbG9kYXNoLmNsb25lZGVlcCc7XG5pbXBvcnQgc3RhYmxlSnNvbjIgZnJvbSAnZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnknO1xuXG5jb25zdCBzdGFibGVKc29uID0gc3RhYmxlSnNvbjIgYXMgYW55O1xuXG5leHBvcnQgeyBsb2Rhc2hDbG9uZURlZXAsIHN0YWJsZUpzb24gfTtcblxuZXhwb3J0IGludGVyZmFjZSBJU3RhYmxlSnNvblR5cGVzIHtcbiAgQ29tcGFyYXRvcjogKFxuICAgIGE6IElTdGFibGVKc29uVHlwZXNbJ0NvbXBhcmVEZXNjcmlwdG9yJ10sXG4gICAgYjogSVN0YWJsZUpzb25UeXBlc1snQ29tcGFyZURlc2NyaXB0b3InXVxuICApID0+IG51bWJlcjtcbiAgQ29tcGFyZURlc2NyaXB0b3I6IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICB9O1xuICBPcHRpb25zOiB7XG4gICAgY21wPzogKFxuICAgICAgYTogSVN0YWJsZUpzb25UeXBlc1snQ29tcGFyZURlc2NyaXB0b3InXSxcbiAgICAgIGI6IElTdGFibGVKc29uVHlwZXNbJ0NvbXBhcmVEZXNjcmlwdG9yJ11cbiAgICApID0+IG51bWJlcjtcbiAgICBjeWNsZXM/OiBib29sZWFuO1xuICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydGpzb24ucGx1Z2lucy5qcyc7XG5cbi8vIERlZmluZSBpbnRlcmZhY2VzIGFuZCB0eXBlcyBmb3IgYmV0dGVyIHR5cGUgY2hlY2tpbmcgYW5kIHJlYWRhYmlsaXR5XG5pbnRlcmZhY2UgSUJ1ZmZlckxpa2Uge1xuICB0eXBlOiAnQnVmZmVyJztcbiAgZGF0YTogc3RyaW5nIHwgYW55W107IC8vIGBhbnlbXWAgZm9yIGFycmF5IGRhdGEgcmVwcmVzZW50YXRpb25cbn1cblxuaW50ZXJmYWNlIElFbmNvZGVkQnVmZmVyIHtcbiAgdHlwZTogJ0VuY29kZWRCdWZmZXInLFxuICBkYXRhOiBzdHJpbmc7XG59XG5cbnR5cGUgVFBhcnNlUmV2aXZlciA9ICh0aGlzOiBhbnksIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnk7XG50eXBlIFRQYXJzZVJlcGxhY2VyID0gKHRoaXM6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueTtcblxuLy8gVXRpbGl0eSBmdW5jdGlvbnMgdG8gaGFuZGxlIGJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyBpbiBhIGNyb3NzLXBsYXRmb3JtIHdheVxuZnVuY3Rpb24gYmFzZTY0RW5jb2RlKGRhdGE6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAvLyBQcmVmZXIgTm9kZSdzIEJ1ZmZlciB3aGVuIGF2YWlsYWJsZVxuICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBAdHMtaWdub3JlIEJ1ZmZlciBtaWdodCBub3QgZXhpc3QgaW4gYnJvd3NlciBidWlsZHNcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG4gIC8vIEZhbGxiYWNrIGZvciBicm93c2Vyc1xuICByZXR1cm4gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmRhdGEpKTtcbn1cblxuZnVuY3Rpb24gYmFzZTY0RGVjb2RlKHN0cjogc3RyaW5nKTogVWludDhBcnJheSB7XG4gIC8vIFByZWZlciBOb2RlJ3MgQnVmZmVyIHdoZW4gYXZhaWxhYmxlXG4gIGlmICh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEB0cy1pZ25vcmUgQnVmZmVyIG1pZ2h0IG5vdCBleGlzdCBpbiBicm93c2VyIGJ1aWxkc1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0ciwgJ2Jhc2U2NCcpO1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGgpO1xuICB9XG4gIC8vIEZhbGxiYWNrIGZvciBicm93c2Vyc1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQXJyYXkuZnJvbShhdG9iKHN0cikpLm1hcCgoY2hhcikgPT4gY2hhci5jaGFyQ29kZUF0KDApKSk7XG59XG5cbi8vIE1haW4gZnVuY3Rpb25hbGl0eSB3aXRoIGNyb3NzLXBsYXRmb3JtIHN1cHBvcnRcbmZ1bmN0aW9uIHN0cmluZ2lmeSh2YWx1ZTogYW55LCBzcGFjZT86IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2UodGV4dDogc3RyaW5nKTogYW55IHtcbiAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCwgcmV2aXZlcik7XG59XG5cbmNvbnN0IHJlcGxhY2VyOiBUUGFyc2VSZXBsYWNlciA9IChrZXksIHZhbHVlKSA9PiB7XG4gIC8vIENoZWNrIGlmIHZhbHVlIGlzIElCdWZmZXJMaWtlXG4gIGlmIChpc0J1ZmZlckxpa2UodmFsdWUpKSB7XG4gICAgbGV0IGJ1ZmZlckRhdGE6IFVpbnQ4QXJyYXk7XG5cbiAgICAvLyBIYW5kbGUgSUJ1ZmZlckxpa2Ugb2JqZWN0cyB3aXRoIGEgLmRhdGEgcHJvcGVydHlcbiAgICBpZiAoJ2RhdGEnIGluIHZhbHVlICYmIGlzQXJyYXkodmFsdWUuZGF0YSkpIHtcbiAgICAgIGJ1ZmZlckRhdGEgPSBuZXcgVWludDhBcnJheSh2YWx1ZS5kYXRhKTtcbiAgICB9IFxuICAgIC8vIEhhbmRsZSBVaW50OEFycmF5IGRpcmVjdGx5XG4gICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICBidWZmZXJEYXRhID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vdCBhIHJlY29nbml6ZWQgZm9ybWF0LCByZXR1cm4gdmFsdWUgYXMgaXNcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBFbmNvZGUgdGhlIGJ1ZmZlckRhdGEgKFVpbnQ4QXJyYXkpIHRvIGJhc2U2NFxuICAgIGNvbnN0IGJhc2U2NERhdGEgPSAnYmFzZTY0OicgKyBiYXNlNjRFbmNvZGUoYnVmZmVyRGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdFbmNvZGVkQnVmZmVyJyxcbiAgICAgIGRhdGE6IGJhc2U2NERhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybiB2YWx1ZSB1bmNoYW5nZWQgaWYgbm90IGJ1ZmZlci1saWtlXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmNvbnN0IHJldml2ZXI6IFRQYXJzZVJldml2ZXIgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICBpZiAoaXNFbmNvZGVkQnVmZmVyKHZhbHVlKSkge1xuICAgIGlmIChpc1N0cmluZyh2YWx1ZS5kYXRhKSAmJiB2YWx1ZS5kYXRhLnN0YXJ0c1dpdGgoJ2Jhc2U2NDonKSkge1xuICAgICAgLy8gQ29ycmVjdGx5IHNsaWNlIHRoZSAnYmFzZTY0OicgcHJlZml4IGJlZm9yZSBkZWNvZGluZ1xuICAgICAgY29uc3QgYmFzZTY0RGF0YSA9IHZhbHVlLmRhdGEuc2xpY2UoNyk7IC8vIFNraXAgJ2Jhc2U2NDonIHByZWZpeFxuICAgICAgY29uc3QgYnVmZmVyID0gYmFzZTY0RGVjb2RlKGJhc2U2NERhdGEpO1xuICAgICAgLy8gQXNzdW1pbmcgdGhlIHJlc3Qgb2YgeW91ciBhcHBsaWNhdGlvbiBjYW4gd29yayBkaXJlY3RseSB3aXRoIFVpbnQ4QXJyYXksXG4gICAgICAvLyBvdGhlcndpc2UsIHlvdSBtaWdodCBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gYW5vdGhlciBmb3JtYXRcbiAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmZ1bmN0aW9uIGlzRW5jb2RlZEJ1ZmZlcih4OiBhbnkpOiB4IGlzIElFbmNvZGVkQnVmZmVyIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHgpICYmICh4IGFzIGFueSkudHlwZSA9PT0gJ0VuY29kZWRCdWZmZXInICYmIGlzU3RyaW5nKCh4IGFzIGFueSkuZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyTGlrZSh4OiBhbnkpOiB4IGlzIElCdWZmZXJMaWtlIHwgVWludDhBcnJheSB7XG4gIHJldHVybiAoXG4gICAgKGlzT2JqZWN0KHgpICYmXG4gICAgICAoKHggYXMgYW55KS50eXBlID09PSAnQnVmZmVyJyAmJlxuICAgICAgKGlzQXJyYXkoKHggYXMgYW55KS5kYXRhKSB8fCBpc1N0cmluZygoeCBhcyBhbnkpLmRhdGEpKSkpIHx8XG4gICAgeCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbiAgKTtcbn1cblxuLyoqXG4gKiBXZSB1c2UgdGhpcyBmdW5jdGlvbiB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGFuIGFycmF5XG4gKiBAcGFyYW0geFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkoeDogYW55KTogeCBpcyBhbnlbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHgpO1xufVxuXG4vKipcbiAqIFdlIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBzdHJpbmdcbiAqIEBwYXJhbSB4XG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcoeDogYW55KTogeCBpcyBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIFdlIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYW4gb2JqZWN0XG4gKiBAcGFyYW0geFxuICovXG5mdW5jdGlvbiBpc09iamVjdCh4OiBhbnkpOiB4IGlzIG9iamVjdCB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IHsgc3RyaW5naWZ5LCBwYXJzZSwgcmVwbGFjZXIsIHJldml2ZXIgfTtcbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vc21hcnRqc29uLnBsdWdpbnMuanMnO1xuaW1wb3J0ICogYXMgYnVmZmVyaGFuZGxpbmcgZnJvbSAnLi9idWZmZXJoYW5kbGluZy5qcyc7XG5cbmludGVyZmFjZSBKc29uT2JqZWN0IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vKipcbiAqIGFsbG93cyB5b3UgdG8gcGFyc2UgYSBqc29uXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZSA9IGJ1ZmZlcmhhbmRsaW5nLnBhcnNlO1xuXG5leHBvcnQgY29uc3QgcGFyc2VKc29uTCA9IChqc29ubERhdGE6IHN0cmluZyk6IEpzb25PYmplY3RbXSA9PiB7XG4gIGNvbnN0IGxpbmVzID0ganNvbmxEYXRhLnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgcGFyc2VkRGF0YTogSnNvbk9iamVjdFtdID0gbGluZXMucmVkdWNlKChhY2MsIGxpbmUpID0+IHtcbiAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG4gICAgaWYgKHRyaW1tZWQubGVuZ3RoID4gMCkge1xuICAgICAgYWNjLnB1c2gocGFyc2UodHJpbW1lZCkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSBhcyBKc29uT2JqZWN0W10pO1xuICByZXR1cm4gcGFyc2VkRGF0YTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0cmluZ2lmeUpzb25MID0gKGl0ZW1zOiBhbnlbXSk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+IHN0cmluZ2lmeShpdGVtKSkuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogc3RhYmxlT25lV2F5U3RyaW5naWZ5XG4gKiAtIFByb2R1Y2VzIGEgc3RhYmxlLCBkZXRlcm1pbmlzdGljIEpTT04gc3RyaW5nXG4gKiAtIEhhbmRsZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyB3aXRob3V0IHRocm93aW5nIChyZXBsYWNlcyBjeWNsZXMpXG4gKiAtIFNhZmUgZm9yIGhhc2hpbmcvY29tcGFyaXNvbnMgKFwib25lLXdheVwiOyBub3QgaW50ZW5kZWQgZm9yIHJvdW5kLXRyaXBzKVxuICovXG5leHBvcnQgY29uc3Qgc3RhYmxlT25lV2F5U3RyaW5naWZ5ID0gKFxuICBvYmpBcmc6IGFueSxcbiAgc2ltcGxlT3JkZXJBcnJheT86IHN0cmluZ1tdLFxuICBvcHRpb25zQXJnOiBwbHVnaW5zLklTdGFibGVKc29uVHlwZXNbJ09wdGlvbnMnXSA9IHt9XG4pOiBzdHJpbmcgPT4ge1xuICAvLyBQcmVwYXJlIG9iamVjdCB3aXRob3V0IHRocm93aW5nIG9uIGNpcmN1bGFyIHJlZmVyZW5jZXMsIGFuZCBlbmNvZGUgYnVmZmVyc1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpO1xuICBjb25zdCBzYW5pdGl6ZSA9ICh2YWw6IGFueSk6IGFueSA9PiB7XG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIC8vIEVuY29kZSBidWZmZXJzL3R5cGVkIGFycmF5cyB2aWEgZXhpc3RpbmcgcmVwbGFjZXJcbiAgICBjb25zdCByZXBsYWNlZCA9IChidWZmZXJoYW5kbGluZy5yZXBsYWNlciBhcyBhbnkpKCcnLCB2YWwpO1xuICAgIGlmIChyZXBsYWNlZCAmJiByZXBsYWNlZC50eXBlID09PSAnRW5jb2RlZEJ1ZmZlcicgJiYgdHlwZW9mIHJlcGxhY2VkLmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcmVwbGFjZWQ7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgaWYgKHZpc2l0ZWQuaGFzKHZhbCkpIHtcbiAgICAgIHJldHVybiAnX19jeWNsZV9fJztcbiAgICB9XG4gICAgdmlzaXRlZC5hZGQodmFsKTtcbiAgICAvLyBBcnJheXNcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsLm1hcCgoaXRlbSkgPT4gc2FuaXRpemUoaXRlbSkpO1xuICAgIH1cbiAgICAvLyBQbGFpbiBvYmplY3RzIGFuZCBjbGFzcyBpbnN0YW5jZXM6IGNvcHkgZW51bWVyYWJsZSBvd24gcHJvcHNcbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWwpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBvdXRba2V5XSA9IHNhbml0aXplKCh2YWwgYXMgYW55KVtrZXldKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBnZXR0ZXJzIHRocm93aW5nIG9yIG5vbi1zZXJpYWxpemFibGUsIG1hcmtcbiAgICAgICAgb3V0W2tleV0gPSAnX191bnNlcmlhbGl6YWJsZV9fJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICBjb25zdCBvYmogPSBzYW5pdGl6ZShvYmpBcmcpO1xuICBjb25zdCBvcHRpb25zOiBwbHVnaW5zLklTdGFibGVKc29uVHlwZXNbJ09wdGlvbnMnXSA9IHtcbiAgICAuLi5vcHRpb25zQXJnLFxuICAgIGN5Y2xlczogdHJ1ZSxcbiAgfTtcbiAgaWYgKHNpbXBsZU9yZGVyQXJyYXkgJiYgIW9wdGlvbnMuY21wKSB7XG4gICAgY29uc3Qgb3JkZXIgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIHNpbXBsZU9yZGVyQXJyYXkuZm9yRWFjaCgoa2V5LCBpZHgpID0+IG9yZGVyLnNldChrZXksIGlkeCkpO1xuICAgIG9wdGlvbnMuY21wID0gKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFJZHggPSBvcmRlci5oYXMoYS5rZXkpID8gKG9yZGVyLmdldChhLmtleSkgYXMgbnVtYmVyKSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIGNvbnN0IGJJZHggPSBvcmRlci5oYXMoYi5rZXkpID8gKG9yZGVyLmdldChiLmtleSkgYXMgbnVtYmVyKSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIGlmIChhSWR4ICE9PSBiSWR4KSByZXR1cm4gYUlkeCAtIGJJZHg7XG4gICAgICByZXR1cm4gYS5rZXkgPCBiLmtleSA/IC0xIDogYS5rZXkgPiBiLmtleSA/IDEgOiAwO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHBsdWdpbnMuc3RhYmxlSnNvbihvYmosIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gb2JqQXJnXG4gKiBAcGFyYW0gb3B0aW9uc0FyZ1xuICovXG5leHBvcnQgY29uc3Qgc3RyaW5naWZ5ID0gKFxuICBvYmpBcmc6IGFueSxcbiAgc2ltcGxlT3JkZXJBcnJheT86IHN0cmluZ1tdLFxuICBvcHRpb25zQXJnOiBwbHVnaW5zLklTdGFibGVKc29uVHlwZXNbJ09wdGlvbnMnXSA9IHt9XG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBidWZmZXJlZEpzb24gPSBidWZmZXJoYW5kbGluZy5zdHJpbmdpZnkob2JqQXJnKTtcbiAgb2JqQXJnID0gSlNPTi5wYXJzZShidWZmZXJlZEpzb24pO1xuICAvLyBkZXJpdmUgYSBzaW1wbGUgY29tcGFyYXRvciBmcm9tIHNpbXBsZU9yZGVyQXJyYXkgaWYgcHJvdmlkZWQgYW5kIG5vIGN1c3RvbSBjbXAgc3VwcGxpZWRcbiAgbGV0IG9wdGlvbnMgPSB7IC4uLm9wdGlvbnNBcmcgfTtcbiAgaWYgKHNpbXBsZU9yZGVyQXJyYXkgJiYgIW9wdGlvbnMuY21wKSB7XG4gICAgY29uc3Qgb3JkZXIgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIHNpbXBsZU9yZGVyQXJyYXkuZm9yRWFjaCgoa2V5LCBpZHgpID0+IG9yZGVyLnNldChrZXksIGlkeCkpO1xuICAgIG9wdGlvbnMuY21wID0gKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFJZHggPSBvcmRlci5oYXMoYS5rZXkpID8gKG9yZGVyLmdldChhLmtleSkgYXMgbnVtYmVyKSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIGNvbnN0IGJJZHggPSBvcmRlci5oYXMoYi5rZXkpID8gKG9yZGVyLmdldChiLmtleSkgYXMgbnVtYmVyKSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIGlmIChhSWR4ICE9PSBiSWR4KSByZXR1cm4gYUlkeCAtIGJJZHg7XG4gICAgICAvLyBmYWxsYmFjayB0byBsZXhpY29ncmFwaGljIG9yZGVyIGZvciBzdGFibGUgYmVoYXZpb3JcbiAgICAgIHJldHVybiBhLmtleSA8IGIua2V5ID8gLTEgOiBhLmtleSA+IGIua2V5ID8gMSA6IDA7XG4gICAgfTtcbiAgfVxuICBsZXQgcmV0dXJuSnNvbiA9IHBsdWdpbnMuc3RhYmxlSnNvbihvYmpBcmcsIG9wdGlvbnMpO1xuICByZXR1cm4gcmV0dXJuSnNvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdpZnlQcmV0dHkgPSAob2JqZWN0QXJnOiBhbnkpID0+IHtcbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkob2JqZWN0QXJnKTtcbiAgY29uc3Qgb2JqZWN0ID0gSlNPTi5wYXJzZShzdHJpbmdpZmllZCk7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmplY3QsIG51bGwsIDIpO1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaW5naWZ5QmFzZTY0ID0gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIHN0cmluZ2lmeT4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBzdHJpbmdpZmllZFJlc3VsdCA9IHN0cmluZ2lmeSguLi5hcmdzKTtcbiAgcmV0dXJuIHBsdWdpbnMuc21hcnRzdHJpbmcuYmFzZTY0LmVuY29kZVVyaShzdHJpbmdpZmllZFJlc3VsdCk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VCYXNlNjQgPSAoYmFzZTY0SnNvblN0cmluZ0FyZzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGJhc2U2NCA9IHBsdWdpbnMuc21hcnRzdHJpbmcuYmFzZTY0IGFzIGFueTtcbiAgY29uc3QgZGVjb2RlRm46IChpbnB1dDogc3RyaW5nKSA9PiBzdHJpbmcgPSBiYXNlNjQuZGVjb2RlVXJpIHx8IGJhc2U2NC5kZWNvZGU7XG4gIGNvbnN0IHNpbXBsZVN0cmluZ2lmaWVkID0gZGVjb2RlRm4oYmFzZTY0SnNvblN0cmluZ0FyZyk7XG4gIHJldHVybiBwYXJzZShzaW1wbGVTdHJpbmdpZmllZCk7XG59O1xuXG5leHBvcnQgY2xhc3MgU21hcnRqc29uIHtcbiAgLyoqXG4gICAqIGVuZm9sZHMgZGF0YSBmcm9tIGFuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBlbmZvbGRGcm9tT2JqZWN0PFQgZXh0ZW5kcyB0eXBlb2YgU21hcnRqc29uPih0aGlzOiBULCBvYmplY3RBcmc6IGFueSk6IEluc3RhbmNlVHlwZTxUPiB7XG4gICAgY29uc3QgbmV3SW5zdGFuY2UgPSBuZXcgdGhpcygpIGFzIEluc3RhbmNlVHlwZTxUPjtcbiAgICBjb25zdCBzYXZlYWJsZXM6IHN0cmluZ1tdID0gKG5ld0luc3RhbmNlIGFzIGFueSkuc2F2ZWFibGVQcm9wZXJ0aWVzIHx8IFtdO1xuICAgIGZvciAoY29uc3Qga2V5TmFtZSBpbiBvYmplY3RBcmcpIHtcbiAgICAgIGlmIChzYXZlYWJsZXMuaW5kZXhPZihrZXlOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgKG5ld0luc3RhbmNlIGFzIGFueSlba2V5TmFtZV0gPSBvYmplY3RBcmdba2V5TmFtZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdJbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBlbmZvbGQgZnJvbSBqc29uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGVuZm9sZEZyb21Kc29uPFQgZXh0ZW5kcyB0eXBlb2YgU21hcnRqc29uPih0aGlzOiBULCBqc29uQXJnOiBzdHJpbmcpOiBJbnN0YW5jZVR5cGU8VD4ge1xuICAgIGNvbnN0IG9iamVjdEZyb21Kc29uID0gcGFyc2UoanNvbkFyZyk7XG4gICAgcmV0dXJuIHRoaXMuZW5mb2xkRnJvbU9iamVjdChvYmplY3RGcm9tSnNvbik7XG4gIH1cblxuICAvLyA9PT09PT09PVxuICAvLyBJTlNUQU5DRVxuICAvLyA9PT09PT09PVxuXG4gIHB1YmxpYyBzYXZlYWJsZVByb3BlcnRpZXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBmb2xkcyBhIGNsYXNzIGludG8gYW4gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgZm9sZFRvT2JqZWN0KCkge1xuICAgIGNvbnN0IHRyYWNrU2V0ID0gbmV3IFNldDxTbWFydGpzb24+KCk7XG4gICAgdHJhY2tTZXQuYWRkKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLmZvbGRUb09iamVjdEludGVybmFsKHRyYWNrU2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9sZFRvT2JqZWN0SW50ZXJuYWwodHJhY2tTZXQ6IFNldDxTbWFydGpzb24+KSB7XG4gICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgY29uc3QgZm9sZFZhbHVlID0gKHZhbDogYW55KTogYW55ID0+IHtcbiAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBTbWFydGpzb24pIHtcbiAgICAgICAgaWYgKHRyYWNrU2V0Lmhhcyh2YWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeWNsZSBkZXRlY3RlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRyYWNrU2V0LmFkZCh2YWwpO1xuICAgICAgICByZXR1cm4gdmFsLmZvbGRUb09iamVjdEludGVybmFsKHRyYWNrU2V0KTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbC5tYXAoKGl0ZW0pID0+IGZvbGRWYWx1ZShpdGVtKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGx1Z2lucy5sb2Rhc2hDbG9uZURlZXAodmFsKTtcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzOiBzdHJpbmdbXSA9ICh0aGlzIGFzIGFueSkuc2F2ZWFibGVQcm9wZXJ0aWVzIHx8IFtdO1xuICAgIGZvciAoY29uc3Qga2V5TmFtZSBvZiBwcm9wcykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleU5hbWVdO1xuICAgICAgcmVzdWx0W2tleU5hbWVdID0gZm9sZFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBmb2xkcyBhIGNsYXNzIGludG8gYW4gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgZm9sZFRvSnNvbigpIHtcbiAgICBjb25zdCBmb2xkZWRPYmplY3QgPSB0aGlzLmZvbGRUb09iamVjdCgpO1xuICAgIHJldHVybiBzdHJpbmdpZnkoZm9sZGVkT2JqZWN0KTtcbiAgfVxufVxuXG4vKipcbiAqIERlY29yYXRvciB0aGF0IG1hcmtzIGEgcHJvcGVydHkgYXMgZm9sZGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGZvbGREZWMgPSAoKSA9PiB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCF0YXJnZXQuc2F2ZWFibGVQcm9wZXJ0aWVzKSB7XG4gICAgICB0YXJnZXQuc2F2ZWFibGVQcm9wZXJ0aWVzID0gW107XG4gICAgfVxuICAgIHRhcmdldC5zYXZlYWJsZVByb3BlcnRpZXMucHVzaChrZXkpO1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlZXBFcXVhbE9iamVjdHMgPSAob2JqZWN0MTogYW55LCBvYmplY3QyOiBhbnkpOiBib29sZWFuID0+IHtcbiAgY29uc3Qgb2JqZWN0MVN0cmluZyA9IHN0cmluZ2lmeShvYmplY3QxKTtcbiAgY29uc3Qgb2JqZWN0MlN0cmluZyA9IHN0cmluZ2lmeShvYmplY3QyKTtcbiAgcmV0dXJuIG9iamVjdDFTdHJpbmcgPT09IG9iamVjdDJTdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgZGVlcEVxdWFsSnNvbkxTdHJpbmdzID0gKGpzb25MU3RyaW5nMTogc3RyaW5nLCBqc29uTFN0cmluZzI6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBmaXJzdEFycmF5ID0gcGFyc2VKc29uTChqc29uTFN0cmluZzEpO1xuICBjb25zdCBzZWNvbmRBcnJheSA9IHBhcnNlSnNvbkwoanNvbkxTdHJpbmcyKTtcbiAgcmV0dXJuIGRlZXBFcXVhbE9iamVjdHMoZmlyc3RBcnJheSwgc2Vjb25kQXJyYXkpO1xufVxuIiwgImNvbnN0IGluc3RhbmNlT2ZBbnkgPSAob2JqZWN0LCBjb25zdHJ1Y3RvcnMpID0+IGNvbnN0cnVjdG9ycy5zb21lKChjKSA9PiBvYmplY3QgaW5zdGFuY2VvZiBjKTtcblxubGV0IGlkYlByb3h5YWJsZVR5cGVzO1xubGV0IGN1cnNvckFkdmFuY2VNZXRob2RzO1xuLy8gVGhpcyBpcyBhIGZ1bmN0aW9uIHRvIHByZXZlbnQgaXQgdGhyb3dpbmcgdXAgaW4gbm9kZSBlbnZpcm9ubWVudHMuXG5mdW5jdGlvbiBnZXRJZGJQcm94eWFibGVUeXBlcygpIHtcbiAgICByZXR1cm4gKGlkYlByb3h5YWJsZVR5cGVzIHx8XG4gICAgICAgIChpZGJQcm94eWFibGVUeXBlcyA9IFtcbiAgICAgICAgICAgIElEQkRhdGFiYXNlLFxuICAgICAgICAgICAgSURCT2JqZWN0U3RvcmUsXG4gICAgICAgICAgICBJREJJbmRleCxcbiAgICAgICAgICAgIElEQkN1cnNvcixcbiAgICAgICAgICAgIElEQlRyYW5zYWN0aW9uLFxuICAgICAgICBdKSk7XG59XG4vLyBUaGlzIGlzIGEgZnVuY3Rpb24gdG8gcHJldmVudCBpdCB0aHJvd2luZyB1cCBpbiBub2RlIGVudmlyb25tZW50cy5cbmZ1bmN0aW9uIGdldEN1cnNvckFkdmFuY2VNZXRob2RzKCkge1xuICAgIHJldHVybiAoY3Vyc29yQWR2YW5jZU1ldGhvZHMgfHxcbiAgICAgICAgKGN1cnNvckFkdmFuY2VNZXRob2RzID0gW1xuICAgICAgICAgICAgSURCQ3Vyc29yLnByb3RvdHlwZS5hZHZhbmNlLFxuICAgICAgICAgICAgSURCQ3Vyc29yLnByb3RvdHlwZS5jb250aW51ZSxcbiAgICAgICAgICAgIElEQkN1cnNvci5wcm90b3R5cGUuY29udGludWVQcmltYXJ5S2V5LFxuICAgICAgICBdKSk7XG59XG5jb25zdCB0cmFuc2FjdGlvbkRvbmVNYXAgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgdHJhbnNmb3JtQ2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIHByb21pc2lmeVJlcXVlc3QocmVxdWVzdCkge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHVubGlzdGVuID0gKCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKCdzdWNjZXNzJywgc3VjY2Vzcyk7XG4gICAgICAgICAgICByZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSh3cmFwKHJlcXVlc3QucmVzdWx0KSk7XG4gICAgICAgICAgICB1bmxpc3RlbigpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChyZXF1ZXN0LmVycm9yKTtcbiAgICAgICAgICAgIHVubGlzdGVuKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignc3VjY2VzcycsIHN1Y2Nlc3MpO1xuICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3IpO1xuICAgIH0pO1xuICAgIC8vIFRoaXMgbWFwcGluZyBleGlzdHMgaW4gcmV2ZXJzZVRyYW5zZm9ybUNhY2hlIGJ1dCBkb2Vzbid0IGRvZXNuJ3QgZXhpc3QgaW4gdHJhbnNmb3JtQ2FjaGUuIFRoaXNcbiAgICAvLyBpcyBiZWNhdXNlIHdlIGNyZWF0ZSBtYW55IHByb21pc2VzIGZyb20gYSBzaW5nbGUgSURCUmVxdWVzdC5cbiAgICByZXZlcnNlVHJhbnNmb3JtQ2FjaGUuc2V0KHByb21pc2UsIHJlcXVlc3QpO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuZnVuY3Rpb24gY2FjaGVEb25lUHJvbWlzZUZvclRyYW5zYWN0aW9uKHR4KSB7XG4gICAgLy8gRWFybHkgYmFpbCBpZiB3ZSd2ZSBhbHJlYWR5IGNyZWF0ZWQgYSBkb25lIHByb21pc2UgZm9yIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAgaWYgKHRyYW5zYWN0aW9uRG9uZU1hcC5oYXModHgpKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgZG9uZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgdW5saXN0ZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICB0eC5yZW1vdmVFdmVudExpc3RlbmVyKCdjb21wbGV0ZScsIGNvbXBsZXRlKTtcbiAgICAgICAgICAgIHR4LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgdHgucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBlcnJvcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgdW5saXN0ZW4oKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICByZWplY3QodHguZXJyb3IgfHwgbmV3IERPTUV4Y2VwdGlvbignQWJvcnRFcnJvcicsICdBYm9ydEVycm9yJykpO1xuICAgICAgICAgICAgdW5saXN0ZW4oKTtcbiAgICAgICAgfTtcbiAgICAgICAgdHguYWRkRXZlbnRMaXN0ZW5lcignY29tcGxldGUnLCBjb21wbGV0ZSk7XG4gICAgICAgIHR4LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICB0eC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGVycm9yKTtcbiAgICB9KTtcbiAgICAvLyBDYWNoZSBpdCBmb3IgbGF0ZXIgcmV0cmlldmFsLlxuICAgIHRyYW5zYWN0aW9uRG9uZU1hcC5zZXQodHgsIGRvbmUpO1xufVxubGV0IGlkYlByb3h5VHJhcHMgPSB7XG4gICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIElEQlRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciB0cmFuc2FjdGlvbi5kb25lLlxuICAgICAgICAgICAgaWYgKHByb3AgPT09ICdkb25lJylcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb25Eb25lTWFwLmdldCh0YXJnZXQpO1xuICAgICAgICAgICAgLy8gTWFrZSB0eC5zdG9yZSByZXR1cm4gdGhlIG9ubHkgc3RvcmUgaW4gdGhlIHRyYW5zYWN0aW9uLCBvciB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG1hbnkuXG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ3N0b3JlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNlaXZlci5vYmplY3RTdG9yZU5hbWVzWzFdXG4gICAgICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIDogcmVjZWl2ZXIub2JqZWN0U3RvcmUocmVjZWl2ZXIub2JqZWN0U3RvcmVOYW1lc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRWxzZSB0cmFuc2Zvcm0gd2hhdGV2ZXIgd2UgZ2V0IGJhY2suXG4gICAgICAgIHJldHVybiB3cmFwKHRhcmdldFtwcm9wXSk7XG4gICAgfSxcbiAgICBzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBoYXModGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBJREJUcmFuc2FjdGlvbiAmJlxuICAgICAgICAgICAgKHByb3AgPT09ICdkb25lJyB8fCBwcm9wID09PSAnc3RvcmUnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3AgaW4gdGFyZ2V0O1xuICAgIH0sXG59O1xuZnVuY3Rpb24gcmVwbGFjZVRyYXBzKGNhbGxiYWNrKSB7XG4gICAgaWRiUHJveHlUcmFwcyA9IGNhbGxiYWNrKGlkYlByb3h5VHJhcHMpO1xufVxuZnVuY3Rpb24gd3JhcEZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAvLyBEdWUgdG8gZXhwZWN0ZWQgb2JqZWN0IGVxdWFsaXR5ICh3aGljaCBpcyBlbmZvcmNlZCBieSB0aGUgY2FjaGluZyBpbiBgd3JhcGApLCB3ZVxuICAgIC8vIG9ubHkgY3JlYXRlIG9uZSBuZXcgZnVuYyBwZXIgZnVuYy5cbiAgICAvLyBDdXJzb3IgbWV0aG9kcyBhcmUgc3BlY2lhbCwgYXMgdGhlIGJlaGF2aW91ciBpcyBhIGxpdHRsZSBtb3JlIGRpZmZlcmVudCB0byBzdGFuZGFyZCBJREIuIEluXG4gICAgLy8gSURCLCB5b3UgYWR2YW5jZSB0aGUgY3Vyc29yIGFuZCB3YWl0IGZvciBhIG5ldyAnc3VjY2Vzcycgb24gdGhlIElEQlJlcXVlc3QgdGhhdCBnYXZlIHlvdSB0aGVcbiAgICAvLyBjdXJzb3IuIEl0J3Mga2luZGEgbGlrZSBhIHByb21pc2UgdGhhdCBjYW4gcmVzb2x2ZSB3aXRoIG1hbnkgdmFsdWVzLiBUaGF0IGRvZXNuJ3QgbWFrZSBzZW5zZVxuICAgIC8vIHdpdGggcmVhbCBwcm9taXNlcywgc28gZWFjaCBhZHZhbmNlIG1ldGhvZHMgcmV0dXJucyBhIG5ldyBwcm9taXNlIGZvciB0aGUgY3Vyc29yIG9iamVjdCwgb3JcbiAgICAvLyB1bmRlZmluZWQgaWYgdGhlIGVuZCBvZiB0aGUgY3Vyc29yIGhhcyBiZWVuIHJlYWNoZWQuXG4gICAgaWYgKGdldEN1cnNvckFkdmFuY2VNZXRob2RzKCkuaW5jbHVkZXMoZnVuYykpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAvLyBDYWxsaW5nIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm94eSBhcyAndGhpcycgY2F1c2VzIElMTEVHQUwgSU5WT0NBVElPTiwgc28gd2UgdXNlXG4gICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICAgICAgICAgICAgZnVuYy5hcHBseSh1bndyYXAodGhpcyksIGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIHdyYXAodGhpcy5yZXF1ZXN0KTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIC8vIENhbGxpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3h5IGFzICd0aGlzJyBjYXVzZXMgSUxMRUdBTCBJTlZPQ0FUSU9OLCBzbyB3ZSB1c2VcbiAgICAgICAgLy8gdGhlIG9yaWdpbmFsIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHdyYXAoZnVuYy5hcHBseSh1bndyYXAodGhpcyksIGFyZ3MpKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtQ2FjaGFibGVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB3cmFwRnVuY3Rpb24odmFsdWUpO1xuICAgIC8vIFRoaXMgZG9lc24ndCByZXR1cm4sIGl0IGp1c3QgY3JlYXRlcyBhICdkb25lJyBwcm9taXNlIGZvciB0aGUgdHJhbnNhY3Rpb24sXG4gICAgLy8gd2hpY2ggaXMgbGF0ZXIgcmV0dXJuZWQgZm9yIHRyYW5zYWN0aW9uLmRvbmUgKHNlZSBpZGJPYmplY3RIYW5kbGVyKS5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJREJUcmFuc2FjdGlvbilcbiAgICAgICAgY2FjaGVEb25lUHJvbWlzZUZvclRyYW5zYWN0aW9uKHZhbHVlKTtcbiAgICBpZiAoaW5zdGFuY2VPZkFueSh2YWx1ZSwgZ2V0SWRiUHJveHlhYmxlVHlwZXMoKSkpXG4gICAgICAgIHJldHVybiBuZXcgUHJveHkodmFsdWUsIGlkYlByb3h5VHJhcHMpO1xuICAgIC8vIFJldHVybiB0aGUgc2FtZSB2YWx1ZSBiYWNrIGlmIHdlJ3JlIG5vdCBnb2luZyB0byB0cmFuc2Zvcm0gaXQuXG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gd3JhcCh2YWx1ZSkge1xuICAgIC8vIFdlIHNvbWV0aW1lcyBnZW5lcmF0ZSBtdWx0aXBsZSBwcm9taXNlcyBmcm9tIGEgc2luZ2xlIElEQlJlcXVlc3QgKGVnIHdoZW4gY3Vyc29yaW5nKSwgYmVjYXVzZVxuICAgIC8vIElEQiBpcyB3ZWlyZCBhbmQgYSBzaW5nbGUgSURCUmVxdWVzdCBjYW4geWllbGQgbWFueSByZXNwb25zZXMsIHNvIHRoZXNlIGNhbid0IGJlIGNhY2hlZC5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJREJSZXF1ZXN0KVxuICAgICAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdCh2YWx1ZSk7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSB0cmFuc2Zvcm1lZCB0aGlzIHZhbHVlIGJlZm9yZSwgcmV1c2UgdGhlIHRyYW5zZm9ybWVkIHZhbHVlLlxuICAgIC8vIFRoaXMgaXMgZmFzdGVyLCBidXQgaXQgYWxzbyBwcm92aWRlcyBvYmplY3QgZXF1YWxpdHkuXG4gICAgaWYgKHRyYW5zZm9ybUNhY2hlLmhhcyh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1DYWNoZS5nZXQodmFsdWUpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdHJhbnNmb3JtQ2FjaGFibGVWYWx1ZSh2YWx1ZSk7XG4gICAgLy8gTm90IGFsbCB0eXBlcyBhcmUgdHJhbnNmb3JtZWQuXG4gICAgLy8gVGhlc2UgbWF5IGJlIHByaW1pdGl2ZSB0eXBlcywgc28gdGhleSBjYW4ndCBiZSBXZWFrTWFwIGtleXMuXG4gICAgaWYgKG5ld1ZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICB0cmFuc2Zvcm1DYWNoZS5zZXQodmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLnNldChuZXdWYWx1ZSwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3VmFsdWU7XG59XG5jb25zdCB1bndyYXAgPSAodmFsdWUpID0+IHJldmVyc2VUcmFuc2Zvcm1DYWNoZS5nZXQodmFsdWUpO1xuXG4vKipcbiAqIE9wZW4gYSBkYXRhYmFzZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBkYXRhYmFzZS5cbiAqIEBwYXJhbSB2ZXJzaW9uIFNjaGVtYSB2ZXJzaW9uLlxuICogQHBhcmFtIGNhbGxiYWNrcyBBZGRpdGlvbmFsIGNhbGxiYWNrcy5cbiAqL1xuZnVuY3Rpb24gb3BlbkRCKG5hbWUsIHZlcnNpb24sIHsgYmxvY2tlZCwgdXBncmFkZSwgYmxvY2tpbmcsIHRlcm1pbmF0ZWQgfSA9IHt9KSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKG5hbWUsIHZlcnNpb24pO1xuICAgIGNvbnN0IG9wZW5Qcm9taXNlID0gd3JhcChyZXF1ZXN0KTtcbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3VwZ3JhZGVuZWVkZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHVwZ3JhZGUod3JhcChyZXF1ZXN0LnJlc3VsdCksIGV2ZW50Lm9sZFZlcnNpb24sIGV2ZW50Lm5ld1ZlcnNpb24sIHdyYXAocmVxdWVzdC50cmFuc2FjdGlvbiksIGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignYmxvY2tlZCcsIChldmVudCkgPT4gYmxvY2tlZChcbiAgICAgICAgLy8gQ2FzdGluZyBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0LURPTS1saWItZ2VuZXJhdG9yL3B1bGwvMTQwNVxuICAgICAgICBldmVudC5vbGRWZXJzaW9uLCBldmVudC5uZXdWZXJzaW9uLCBldmVudCkpO1xuICAgIH1cbiAgICBvcGVuUHJvbWlzZVxuICAgICAgICAudGhlbigoZGIpID0+IHtcbiAgICAgICAgaWYgKHRlcm1pbmF0ZWQpXG4gICAgICAgICAgICBkYi5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsICgpID0+IHRlcm1pbmF0ZWQoKSk7XG4gICAgICAgIGlmIChibG9ja2luZykge1xuICAgICAgICAgICAgZGIuYWRkRXZlbnRMaXN0ZW5lcigndmVyc2lvbmNoYW5nZScsIChldmVudCkgPT4gYmxvY2tpbmcoZXZlbnQub2xkVmVyc2lvbiwgZXZlbnQubmV3VmVyc2lvbiwgZXZlbnQpKTtcbiAgICAgICAgfVxuICAgIH0pXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7IH0pO1xuICAgIHJldHVybiBvcGVuUHJvbWlzZTtcbn1cbi8qKlxuICogRGVsZXRlIGEgZGF0YWJhc2UuXG4gKlxuICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZGF0YWJhc2UuXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZURCKG5hbWUsIHsgYmxvY2tlZCB9ID0ge30pIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKG5hbWUpO1xuICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignYmxvY2tlZCcsIChldmVudCkgPT4gYmxvY2tlZChcbiAgICAgICAgLy8gQ2FzdGluZyBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0LURPTS1saWItZ2VuZXJhdG9yL3B1bGwvMTQwNVxuICAgICAgICBldmVudC5vbGRWZXJzaW9uLCBldmVudCkpO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcChyZXF1ZXN0KS50aGVuKCgpID0+IHVuZGVmaW5lZCk7XG59XG5cbmNvbnN0IHJlYWRNZXRob2RzID0gWydnZXQnLCAnZ2V0S2V5JywgJ2dldEFsbCcsICdnZXRBbGxLZXlzJywgJ2NvdW50J107XG5jb25zdCB3cml0ZU1ldGhvZHMgPSBbJ3B1dCcsICdhZGQnLCAnZGVsZXRlJywgJ2NsZWFyJ107XG5jb25zdCBjYWNoZWRNZXRob2RzID0gbmV3IE1hcCgpO1xuZnVuY3Rpb24gZ2V0TWV0aG9kKHRhcmdldCwgcHJvcCkge1xuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIElEQkRhdGFiYXNlICYmXG4gICAgICAgICEocHJvcCBpbiB0YXJnZXQpICYmXG4gICAgICAgIHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY2FjaGVkTWV0aG9kcy5nZXQocHJvcCkpXG4gICAgICAgIHJldHVybiBjYWNoZWRNZXRob2RzLmdldChwcm9wKTtcbiAgICBjb25zdCB0YXJnZXRGdW5jTmFtZSA9IHByb3AucmVwbGFjZSgvRnJvbUluZGV4JC8sICcnKTtcbiAgICBjb25zdCB1c2VJbmRleCA9IHByb3AgIT09IHRhcmdldEZ1bmNOYW1lO1xuICAgIGNvbnN0IGlzV3JpdGUgPSB3cml0ZU1ldGhvZHMuaW5jbHVkZXModGFyZ2V0RnVuY05hbWUpO1xuICAgIGlmIChcbiAgICAvLyBCYWlsIGlmIHRoZSB0YXJnZXQgZG9lc24ndCBleGlzdCBvbiB0aGUgdGFyZ2V0LiBFZywgZ2V0QWxsIGlzbid0IGluIEVkZ2UuXG4gICAgISh0YXJnZXRGdW5jTmFtZSBpbiAodXNlSW5kZXggPyBJREJJbmRleCA6IElEQk9iamVjdFN0b3JlKS5wcm90b3R5cGUpIHx8XG4gICAgICAgICEoaXNXcml0ZSB8fCByZWFkTWV0aG9kcy5pbmNsdWRlcyh0YXJnZXRGdW5jTmFtZSkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWV0aG9kID0gYXN5bmMgZnVuY3Rpb24gKHN0b3JlTmFtZSwgLi4uYXJncykge1xuICAgICAgICAvLyBpc1dyaXRlID8gJ3JlYWR3cml0ZScgOiB1bmRlZmluZWQgZ3ppcHBzIGJldHRlciwgYnV0IGZhaWxzIGluIEVkZ2UgOihcbiAgICAgICAgY29uc3QgdHggPSB0aGlzLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgaXNXcml0ZSA/ICdyZWFkd3JpdGUnIDogJ3JlYWRvbmx5Jyk7XG4gICAgICAgIGxldCB0YXJnZXQgPSB0eC5zdG9yZTtcbiAgICAgICAgaWYgKHVzZUluZGV4KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmluZGV4KGFyZ3Muc2hpZnQoKSk7XG4gICAgICAgIC8vIE11c3QgcmVqZWN0IGlmIG9wIHJlamVjdHMuXG4gICAgICAgIC8vIElmIGl0J3MgYSB3cml0ZSBvcGVyYXRpb24sIG11c3QgcmVqZWN0IGlmIHR4LmRvbmUgcmVqZWN0cy5cbiAgICAgICAgLy8gTXVzdCByZWplY3Qgd2l0aCBvcCByZWplY3Rpb24gZmlyc3QuXG4gICAgICAgIC8vIE11c3QgcmVzb2x2ZSB3aXRoIG9wIHZhbHVlLlxuICAgICAgICAvLyBNdXN0IGhhbmRsZSBib3RoIHByb21pc2VzIChubyB1bmhhbmRsZWQgcmVqZWN0aW9ucylcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICB0YXJnZXRbdGFyZ2V0RnVuY05hbWVdKC4uLmFyZ3MpLFxuICAgICAgICAgICAgaXNXcml0ZSAmJiB0eC5kb25lLFxuICAgICAgICBdKSlbMF07XG4gICAgfTtcbiAgICBjYWNoZWRNZXRob2RzLnNldChwcm9wLCBtZXRob2QpO1xuICAgIHJldHVybiBtZXRob2Q7XG59XG5yZXBsYWNlVHJhcHMoKG9sZFRyYXBzKSA9PiAoe1xuICAgIC4uLm9sZFRyYXBzLFxuICAgIGdldDogKHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpID0+IGdldE1ldGhvZCh0YXJnZXQsIHByb3ApIHx8IG9sZFRyYXBzLmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSxcbiAgICBoYXM6ICh0YXJnZXQsIHByb3ApID0+ICEhZ2V0TWV0aG9kKHRhcmdldCwgcHJvcCkgfHwgb2xkVHJhcHMuaGFzKHRhcmdldCwgcHJvcCksXG59KSk7XG5cbmNvbnN0IGFkdmFuY2VNZXRob2RQcm9wcyA9IFsnY29udGludWUnLCAnY29udGludWVQcmltYXJ5S2V5JywgJ2FkdmFuY2UnXTtcbmNvbnN0IG1ldGhvZE1hcCA9IHt9O1xuY29uc3QgYWR2YW5jZVJlc3VsdHMgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgY3Vyc29ySXRlcmF0b3JUcmFwcyA9IHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgIGlmICghYWR2YW5jZU1ldGhvZFByb3BzLmluY2x1ZGVzKHByb3ApKVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXTtcbiAgICAgICAgbGV0IGNhY2hlZEZ1bmMgPSBtZXRob2RNYXBbcHJvcF07XG4gICAgICAgIGlmICghY2FjaGVkRnVuYykge1xuICAgICAgICAgICAgY2FjaGVkRnVuYyA9IG1ldGhvZE1hcFtwcm9wXSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgYWR2YW5jZVJlc3VsdHMuc2V0KHRoaXMsIGl0dHJQcm94aWVkQ3Vyc29yVG9PcmlnaW5hbFByb3h5LmdldCh0aGlzKVtwcm9wXSguLi5hcmdzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZWRGdW5jO1xuICAgIH0sXG59O1xuYXN5bmMgZnVuY3Rpb24qIGl0ZXJhdGUoLi4uYXJncykge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby10aGlzLWFzc2lnbm1lbnRcbiAgICBsZXQgY3Vyc29yID0gdGhpcztcbiAgICBpZiAoIShjdXJzb3IgaW5zdGFuY2VvZiBJREJDdXJzb3IpKSB7XG4gICAgICAgIGN1cnNvciA9IGF3YWl0IGN1cnNvci5vcGVuQ3Vyc29yKC4uLmFyZ3MpO1xuICAgIH1cbiAgICBpZiAoIWN1cnNvcilcbiAgICAgICAgcmV0dXJuO1xuICAgIGN1cnNvciA9IGN1cnNvcjtcbiAgICBjb25zdCBwcm94aWVkQ3Vyc29yID0gbmV3IFByb3h5KGN1cnNvciwgY3Vyc29ySXRlcmF0b3JUcmFwcyk7XG4gICAgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkuc2V0KHByb3hpZWRDdXJzb3IsIGN1cnNvcik7XG4gICAgLy8gTWFwIHRoaXMgZG91YmxlLXByb3h5IGJhY2sgdG8gdGhlIG9yaWdpbmFsLCBzbyBvdGhlciBjdXJzb3IgbWV0aG9kcyB3b3JrLlxuICAgIHJldmVyc2VUcmFuc2Zvcm1DYWNoZS5zZXQocHJveGllZEN1cnNvciwgdW53cmFwKGN1cnNvcikpO1xuICAgIHdoaWxlIChjdXJzb3IpIHtcbiAgICAgICAgeWllbGQgcHJveGllZEN1cnNvcjtcbiAgICAgICAgLy8gSWYgb25lIG9mIHRoZSBhZHZhbmNpbmcgbWV0aG9kcyB3YXMgbm90IGNhbGxlZCwgY2FsbCBjb250aW51ZSgpLlxuICAgICAgICBjdXJzb3IgPSBhd2FpdCAoYWR2YW5jZVJlc3VsdHMuZ2V0KHByb3hpZWRDdXJzb3IpIHx8IGN1cnNvci5jb250aW51ZSgpKTtcbiAgICAgICAgYWR2YW5jZVJlc3VsdHMuZGVsZXRlKHByb3hpZWRDdXJzb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkge1xuICAgIHJldHVybiAoKHByb3AgPT09IFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmXG4gICAgICAgIGluc3RhbmNlT2ZBbnkodGFyZ2V0LCBbSURCSW5kZXgsIElEQk9iamVjdFN0b3JlLCBJREJDdXJzb3JdKSkgfHxcbiAgICAgICAgKHByb3AgPT09ICdpdGVyYXRlJyAmJiBpbnN0YW5jZU9mQW55KHRhcmdldCwgW0lEQkluZGV4LCBJREJPYmplY3RTdG9yZV0pKSk7XG59XG5yZXBsYWNlVHJhcHMoKG9sZFRyYXBzKSA9PiAoe1xuICAgIC4uLm9sZFRyYXBzLFxuICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgIGlmIChpc0l0ZXJhdG9yUHJvcCh0YXJnZXQsIHByb3ApKVxuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdGU7XG4gICAgICAgIHJldHVybiBvbGRUcmFwcy5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgfSxcbiAgICBoYXModGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgIHJldHVybiBpc0l0ZXJhdG9yUHJvcCh0YXJnZXQsIHByb3ApIHx8IG9sZFRyYXBzLmhhcyh0YXJnZXQsIHByb3ApO1xuICAgIH0sXG59KSk7XG5cbmV4cG9ydCB7IGRlbGV0ZURCLCBvcGVuREIsIHVud3JhcCwgd3JhcCB9O1xuIiwgIi8vIHB1c2hyb2NrcyBzY29wZVxuaW1wb3J0ICogYXMgbGlrIGZyb20gJ0BwdXNoLnJvY2tzL2xpayc7XG5pbXBvcnQgKiBhcyBzbWFydGVudiBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydGVudic7XG5pbXBvcnQgKiBhcyBzbWFydGpzb24gZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRqc29uJztcbmltcG9ydCAqIGFzIHNtYXJ0cHJvbWlzZSBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydHByb21pc2UnO1xuaW1wb3J0ICogYXMgc21hcnRyeCBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydHJ4JztcblxuZXhwb3J0IHsgbGlrLCBzbWFydGVudiwgc21hcnRqc29uLCBzbWFydHByb21pc2UsIHNtYXJ0cnggfTtcblxuLy8gYXBpZ2xvYmFsIHNjb3BlXG5pbXBvcnQgKiBhcyB0eXBlZHJlcXVlc3RJbnRlcmZhY2VzIGZyb20gJ0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzJztcblxuZXhwb3J0IHsgdHlwZWRyZXF1ZXN0SW50ZXJmYWNlcyB9O1xuXG4vLyB0aGlyZHBhcnR5IHNjb3BlXG5pbXBvcnQgKiBhcyBpZGIgZnJvbSAnQHRlbXBmaXgvaWRiJztcblxuZXhwb3J0IHsgaWRiIH07XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3dlYnN0b3JlLnBsdWdpbnMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJTdG9yZU9wdGlvbnMge1xuICBkYk5hbWU6IHN0cmluZztcbiAgc3RvcmVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBXZWJTdG9yZTxUID0gYW55PiB7XG4gIHB1YmxpYyBkYjogcGx1Z2lucy5pZGIuSURCUERhdGFiYXNlO1xuICBwdWJsaWMgb3B0aW9uczogSVdlYlN0b3JlT3B0aW9ucztcbiAgcHJpdmF0ZSBpbml0Q2FsbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZHlEZWZlcnJlZCA9IHBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uc0FyZzogSVdlYlN0b3JlT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaW5pdCgpIHtcbiAgICBpZiAodGhpcy5pbml0Q2FsbGVkKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlYWR5RGVmZXJyZWQucHJvbWlzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbml0Q2FsbGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IHNtYXJ0ZW52ID0gbmV3IHBsdWdpbnMuc21hcnRlbnYuU21hcnRlbnYoKTtcbiAgICBpZiAoIXNtYXJ0ZW52LmlzQnJvd3NlciAmJiAhZ2xvYmFsVGhpcy5pbmRleGVkREIpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdoZXknKTtcbiAgICAgIGNvbnNvbGUubG9nKGdsb2JhbFRoaXMuaW5kZXhlZERCKTtcbiAgICAgIGF3YWl0IHNtYXJ0ZW52LmdldFNhZmVOb2RlTW9kdWxlKCdmYWtlLWluZGV4ZWRkYi9hdXRvJyk7XG4gICAgICBpZiAoIWdsb2JhbFRoaXMuaW5kZXhlZERCKSB7XG4gICAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IHNtYXJ0ZW52LmdldFNhZmVOb2RlTW9kdWxlKCdmYWtlLWluZGV4ZWRkYicpO1xuICAgICAgICBnbG9iYWxUaGlzLmluZGV4ZWREQiA9IG5ldyBtb2QuSURCRmFjdG9yeSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZGIgPSBhd2FpdCBwbHVnaW5zLmlkYi5vcGVuREIodGhpcy5vcHRpb25zLmRiTmFtZSwgMSwge1xuICAgICAgdXBncmFkZTogKGRiKSA9PiB7XG4gICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIHJldHVybiB0aGlzLmRiLmdldCh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLCBrZXkpO1xuICB9XG5cbiAgYXN5bmMgY2hlY2soa2V5QXJnOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldChrZXlBcmcpO1xuICAgIHJldHVybiAhIXJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsOiBUKSB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgcmV0dXJuIHRoaXMuZGIucHV0KHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsIHZhbCwga2V5KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShrZXk6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIHJldHVybiB0aGlzLmRiLmRlbGV0ZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLCBrZXkpO1xuICB9XG5cbiAgYXN5bmMgY2xlYXIoKSB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgcmV0dXJuIHRoaXMuZGIuY2xlYXIodGhpcy5vcHRpb25zLnN0b3JlTmFtZSk7XG4gIH1cblxuICBhc3luYyBrZXlzKCkge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIHJldHVybiB0aGlzLmRiLmdldEFsbEtleXModGhpcy5vcHRpb25zLnN0b3JlTmFtZSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBXZWJTdG9yZSB9IGZyb20gJy4vd2Vic3RvcmUuY2xhc3Nlcy53ZWJzdG9yZS5qcyc7XG5pbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vd2Vic3RvcmUucGx1Z2lucy5qcyc7XG5cbi8qKlxuICogYSBjYWNoZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSB0eXBlZHJlcXVlc3RzXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlZHJlcXVlc3RDYWNoZSB7XG4gIHByaXZhdGUgd2Vic3RvcmU6IFdlYlN0b3JlO1xuXG4gIGNvbnN0cnVjdG9yKGRvbWFpbkFyZyA9ICdkZWZhdWx0Jykge1xuICAgIHRoaXMud2Vic3RvcmUgPSBuZXcgV2ViU3RvcmU8cGx1Z2lucy50eXBlZHJlcXVlc3RJbnRlcmZhY2VzLklUeXBlZFJlcXVlc3Q+KHtcbiAgICAgIGRiTmFtZTogJ3RyU3RvcmUnLFxuICAgICAgc3RvcmVOYW1lOiBgdHJTdG9yZS0ke2RvbWFpbkFyZ31gLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEtleShyZXF1ZXN0QXJnOiBwbHVnaW5zLnR5cGVkcmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdCkge1xuICAgIHJldHVybiBwbHVnaW5zLnNtYXJ0anNvbi5zdHJpbmdpZnkoe1xuICAgICAgbWV0aG9kOiByZXF1ZXN0QXJnLm1ldGhvZCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RBcmcucmVxdWVzdCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdG9yZXMgYnkgcmVxdWVzdFxuICAgKiBAcGFyYW0gdHlwZWRyZXF1ZXN0YXJnXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0QnlSZXF1ZXN0KFxuICAgIHR5cGVkcmVxdWVzdEFyZzogcGx1Z2lucy50eXBlZHJlcXVlc3RJbnRlcmZhY2VzLklUeXBlZFJlcXVlc3RcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0eXBlZHJlcXVlc3RBcmcucmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhbm5vdCBzdG9yZSByZXF1ZXN0cyB3aXRob3V0IGEgcmVzcG9uc2UgcHJlc2VudCcpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLndlYnN0b3JlLnNldCh0aGlzLmJ1aWxkS2V5KHR5cGVkcmVxdWVzdEFyZyksIHR5cGVkcmVxdWVzdEFyZyk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGJ5IGZ1bGwgdHlvZWRyZXF1ZXN0IGJ5IHBhcnRpYWwgdHlwZWRyZXF1ZXN0XG4gICAqIEBwYXJhbSB0eXBlZHJlcXVlc3RhcmdcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRCeVJlcXVlc3QoXG4gICAgdHlwZWRyZXF1ZXN0QXJnOiBwbHVnaW5zLnR5cGVkcmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdFxuICApOiBQcm9taXNlPHBsdWdpbnMudHlwZWRyZXF1ZXN0SW50ZXJmYWNlcy5JVHlwZWRSZXF1ZXN0PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy53ZWJzdG9yZS5nZXQodGhpcy5idWlsZEtleSh0eXBlZHJlcXVlc3RBcmcpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSAnLi93ZWJzdG9yZS5jbGFzc2VzLnR5cGVkcmVxdWVzdGNhY2hlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vd2Vic3RvcmUuY2xhc3Nlcy53ZWJzdG9yZS5qcyc7XG4iLCAiaW1wb3J0ICogYXMgc21hcnRkZWxheSBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydGRlbGF5JztcbmltcG9ydCAqIGFzIHNtYXJ0ZW52IGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0ZW52JztcbmltcG9ydCAqIGFzIHNtYXJ0anNvbiBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydGpzb24nO1xuaW1wb3J0ICogYXMgc21hcnRwcm9taXNlIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSc7XG5pbXBvcnQgKiBhcyB3ZWJzdG9yZSBmcm9tICdAcHVzaC5yb2Nrcy93ZWJzdG9yZSc7XG5cbmV4cG9ydCB7IHNtYXJ0ZGVsYXksIHNtYXJ0ZW52LCBzbWFydGpzb24sIHNtYXJ0cHJvbWlzZSwgd2Vic3RvcmUgfTtcbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vd2VicmVxdWVzdC5wbHVnaW5zLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJV2VicmVxdWVzdENvbnRydWN0b3JPcHRpb25zIHtcbiAgbG9nZ2luZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogd2ViIHJlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIFdlYlJlcXVlc3Qge1xuXG4gIHB1YmxpYyBjYWNoZVN0b3JlID0gbmV3IHBsdWdpbnMud2Vic3RvcmUuV2ViU3RvcmUoe1xuICAgIGRiTmFtZTogJ3dlYnJlcXVlc3QnLFxuICAgIHN0b3JlTmFtZTogJ3dlYnJlcXVlc3QnLFxuICB9KTtcblxuICBwdWJsaWMgb3B0aW9uczogSVdlYnJlcXVlc3RDb250cnVjdG9yT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uc0FyZzogSVdlYnJlcXVlc3RDb250cnVjdG9yT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgbG9nZ2luZzogdHJ1ZSxcbiAgICAgIC4uLm9wdGlvbnNBcmcsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRKc29uKHVybEFyZzogc3RyaW5nLCB1c2VDYWNoZUFyZzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybEFyZywge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHVzZUNhY2hlOiB1c2VDYWNoZUFyZyxcbiAgICB9KTtcbiAgICBjb25zdCByZXNwb25zZVRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgcmVzcG9uc2VSZXN1bHQgPSBwbHVnaW5zLnNtYXJ0anNvbi5wYXJzZShyZXNwb25zZVRleHQpO1xuICAgIHJldHVybiByZXNwb25zZVJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBwb3N0SnNvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIHBvc3RKc29uKHVybEFyZzogc3RyaW5nLCByZXF1ZXN0Qm9keT86IGFueSwgdXNlQ2FjaGVBcmc6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmxBcmcsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IHBsdWdpbnMuc21hcnRqc29uLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSksXG4gICAgICB1c2VDYWNoZTogdXNlQ2FjaGVBcmcsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0ID0gcGx1Z2lucy5zbWFydGpzb24ucGFyc2UocmVzcG9uc2VUZXh0KTtcbiAgICByZXR1cm4gcmVzcG9uc2VSZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogcHV0IGpzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHV0SnNvbih1cmxBcmc6IHN0cmluZywgcmVxdWVzdEJvZHk/OiBhbnksIHVzZVN0b3JlQXNGYWxsYmFjazogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybEFyZywge1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiBwbHVnaW5zLnNtYXJ0anNvbi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCByZXNwb25zZVJlc3VsdCA9IHBsdWdpbnMuc21hcnRqc29uLnBhcnNlKHJlc3BvbnNlVGV4dCk7XG4gICAgcmV0dXJuIHJlc3BvbnNlUmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIHB1dCBqc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUpzb24odXJsQXJnOiBzdHJpbmcsIHVzZVN0b3JlQXNGYWxsYmFjazogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybEFyZywge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0ID0gcGx1Z2lucy5zbWFydGpzb24ucGFyc2UocmVzcG9uc2VUZXh0KTtcbiAgICByZXR1cm4gcmVzcG9uc2VSZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdChcbiAgICB1cmxBcmc6IHN0cmluZyxcbiAgICBvcHRpb25zQXJnOiB7XG4gICAgICBtZXRob2Q6ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAnREVMRVRFJztcbiAgICAgIGJvZHk/OiBhbnk7XG4gICAgICBoZWFkZXJzPzogSGVhZGVyc0luaXQ7XG4gICAgICB1c2VDYWNoZT86IGJvb2xlYW47XG4gICAgICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gICAgfVxuICApIHtcbiAgICBvcHRpb25zQXJnID0ge1xuICAgICAgdGltZW91dE1zOiA2MDAwMCxcbiAgICAgIHVzZUNhY2hlOiBmYWxzZSxcbiAgICAgIC4uLm9wdGlvbnNBcmcsXG4gICAgfTtcblxuICAgIGxldCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcihvcHRpb25zQXJnLnRpbWVvdXRNcykudGhlbigoKSA9PiB7XG4gICAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgfSk7XG4gICAgbGV0IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQgPSBwbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcjxSZXNwb25zZT4oKTtcbiAgICBsZXQgY2FjaGVVc2VkID0gZmFsc2U7XG4gICAgaWYgKG9wdGlvbnNBcmcudXNlQ2FjaGUgJiYgKGF3YWl0IHRoaXMuY2FjaGVTdG9yZS5jaGVjayh1cmxBcmcpKSkge1xuICAgICAgY29uc3QgcmVzcG9uc2VCdWZmZXI6IEFycmF5QnVmZmVyID0gYXdhaXQgdGhpcy5jYWNoZVN0b3JlLmdldCh1cmxBcmcpO1xuICAgICAgY2FjaGVkUmVzcG9uc2VEZWZlcnJlZC5yZXNvbHZlKG5ldyBSZXNwb25zZShyZXNwb25zZUJ1ZmZlciwge30pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGVkUmVzcG9uc2VEZWZlcnJlZC5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsQXJnLCB7XG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIG1ldGhvZDogb3B0aW9uc0FyZy5tZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAuLi4ob3B0aW9uc0FyZy5oZWFkZXJzIHx8IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogb3B0aW9uc0FyZy5ib2R5LFxuICAgICAgfSlcbiAgICAgIC5jYXRjaChhc3luYyAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zQXJnLnVzZUNhY2hlICYmIChhd2FpdCBjYWNoZWRSZXNwb25zZURlZmVycmVkLnByb21pc2UpKSB7XG4gICAgICAgICAgY2FjaGVVc2VkID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBjYWNoZWRSZXNwb25zZSA9IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucHJvbWlzZTtcbiAgICAgICAgICByZXR1cm4gY2FjaGVkUmVzcG9uc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgaWYgKG9wdGlvbnNBcmcudXNlQ2FjaGUgJiYgKGF3YWl0IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucHJvbWlzZSkgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSA1MDApIHtcbiAgICAgIGNhY2hlVXNlZCA9IHRydWU7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucHJvbWlzZTtcbiAgICB9XG4gICAgaWYgKCFjYWNoZVVzZWQgJiYgb3B0aW9uc0FyZy51c2VDYWNoZSAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHJlc3BvbnNlLmNsb25lKCkuYXJyYXlCdWZmZXIoKTtcbiAgICAgIGF3YWl0IHRoaXMuY2FjaGVTdG9yZS5zZXQodXJsQXJnLCBidWZmZXIpO1xuICAgIH1cbiAgICB0aGlzLmxvZyhgJHt1cmxBcmd9IGFuc3dlcnMgd2l0aCBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhIG11bHRpIGVuZHBvaW50LCBmYXVsdCB0b2xlcmFudCByZXF1ZXN0IGZ1bmN0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVxdWVzdE11bHRpRW5kcG9pbnQoXG4gICAgdXJsQXJnOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICBvcHRpb25zQXJnOiB7XG4gICAgICBtZXRob2Q6ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAnREVMRVRFJztcbiAgICAgIGJvZHk/OiBhbnk7XG4gICAgICBoZWFkZXJzPzogSGVhZGVyc0luaXQ7XG4gICAgfVxuICApOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgXG4gICAgbGV0IGFsbFVybHM6IHN0cmluZ1tdO1xuICAgIGxldCB1c2VkVXJsSW5kZXggPSAwO1xuXG4gICAgLy8gZGV0ZXJtaW5lIHdoYXQgd2UgZ290XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodXJsQXJnKSkge1xuICAgICAgYWxsVXJscyA9IHVybEFyZztcbiAgICB9IGVsc2Uge1xuICAgICAgYWxsVXJscyA9IFt1cmxBcmddO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RIaXN0b3J5OiBzdHJpbmdbXSA9IFtdOyAvLyBrZWVwIHRyYWNrIG9mIHRoZSByZXF1ZXN0IGhpc3RvcnlcblxuICAgIGNvbnN0IGRvSGlzdG9yeUNoZWNrID0gYXN5bmMgKFxuICAgICAgLy8gY2hlY2sgaGlzdG9yeSBmb3IgYVxuICAgICAgaGlzdG9yeUVudHJ5VHlwZUFyZzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICByZXF1ZXN0SGlzdG9yeS5wdXNoKGhpc3RvcnlFbnRyeVR5cGVBcmcpO1xuICAgICAgaWYgKGhpc3RvcnlFbnRyeVR5cGVBcmcgPT09ICc0MjknKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdnb3QgNDI5LCBzbyB3YWl0aW5nIGEgbGl0dGxlIGJpdC4nKTtcbiAgICAgICAgYXdhaXQgcGx1Z2lucy5zbWFydGRlbGF5LmRlbGF5Rm9yKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICgyMDAwIC0gMTAwMCArIDEpKSArIDEwMDApOyAvLyB3YWl0IGJldHdlZW4gMSBhbmQgMTAgc2Vjb25kc1xuICAgICAgfVxuXG4gICAgICBsZXQgbnVtT2ZIaXN0b3J5VHlwZSA9IDA7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlcXVlc3RIaXN0b3J5KSB7XG4gICAgICAgIGlmIChlbnRyeSA9PT0gaGlzdG9yeUVudHJ5VHlwZUFyZykgbnVtT2ZIaXN0b3J5VHlwZSsrO1xuICAgICAgfVxuICAgICAgaWYgKG51bU9mSGlzdG9yeVR5cGUgPiAyICogYWxsVXJscy5sZW5ndGggKiB1c2VkVXJsSW5kZXgpIHtcbiAgICAgICAgdXNlZFVybEluZGV4Kys7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGxldHMgZ28gcmVjdXJzaXZlXG4gICAgY29uc3QgZG9SZXF1ZXN0ID0gYXN5bmMgKHVybFRvVXNlOiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgaWYgKCF1cmxUb1VzZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVlc3QgZmFpbGVkIHBlcm1hbmVudGx5Jyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZyhgR2V0dGluZyAke3VybFRvVXNlfSB3aXRoIG1ldGhvZCAke29wdGlvbnNBcmcubWV0aG9kfWApO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmxUb1VzZSwge1xuICAgICAgICBtZXRob2Q6IG9wdGlvbnNBcmcubWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAuLi4ob3B0aW9uc0FyZy5oZWFkZXJzIHx8IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogb3B0aW9uc0FyZy5ib2R5LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmxvZyhgJHt1cmxUb1VzZX0gYW5zd2VycyB3aXRoIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBsZXRzIHBlcmZvcm0gYSBoaXN0b3J5IGNoZWNrIHRvIGRldGVybWluZSBmYWlsZWQgdXJsc1xuICAgICAgICBhd2FpdCBkb0hpc3RvcnlDaGVjayhyZXNwb25zZS5zdGF0dXMudG9TdHJpbmcoKSk7XG4gICAgICAgIC8vIGxldHMgZmlyZSB0aGUgcmVxdWVzdFxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkb1JlcXVlc3QoYWxsVXJsc1t1c2VkVXJsSW5kZXhdKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZmluYWxSZXNwb25zZTogUmVzcG9uc2UgPSBhd2FpdCBkb1JlcXVlc3QoYWxsVXJsc1t1c2VkVXJsSW5kZXhdKTtcbiAgICByZXR1cm4gZmluYWxSZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBsb2cobG9nQXJnOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKGxvZ0FyZyk7XG4gICAgfVxuICB9XG59XG4iLCAiLy8gYXBpZ2xvYmFsIHNjb3BlXG5pbXBvcnQgKiBhcyB0eXBlZFJlcXVlc3RJbnRlcmZhY2VzIGZyb20gJ0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzJztcblxuZXhwb3J0IHsgdHlwZWRSZXF1ZXN0SW50ZXJmYWNlcyB9O1xuXG4vLyBwdXNocm9ja3Mgc2NvcGVcbmltcG9ydCAqIGFzIGlzb3VuaXF1ZSBmcm9tICdAcHVzaC5yb2Nrcy9pc291bmlxdWUnO1xuaW1wb3J0ICogYXMgbGlrIGZyb20gJ0BwdXNoLnJvY2tzL2xpayc7XG5pbXBvcnQgKiBhcyBzbWFydGJ1ZmZlciBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydGJ1ZmZlcic7XG5pbXBvcnQgKiBhcyBzbWFydGRlbGF5IGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0ZGVsYXknO1xuaW1wb3J0ICogYXMgc21hcnRndWFyZCBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydGd1YXJkJztcbmltcG9ydCAqIGFzIHNtYXJ0cHJvbWlzZSBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydHByb21pc2UnO1xuaW1wb3J0ICogYXMgd2VicmVxdWVzdCBmcm9tICdAcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0JztcblxuZXhwb3J0IHsgaXNvdW5pcXVlLCBsaWssIHNtYXJ0YnVmZmVyLCBzbWFydGRlbGF5LCBzbWFydGd1YXJkLCBzbWFydHByb21pc2UsIHdlYnJlcXVlc3QgfTtcbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vcGx1Z2lucy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBUeXBlZFJlc3BvbnNlRXJyb3Ige1xuICBwdWJsaWMgZXJyb3JUZXh0OiBzdHJpbmc7XG4gIHB1YmxpYyBlcnJvckRhdGE6IGFueTtcbiAgY29uc3RydWN0b3IoZXJyb3JUZXh0QXJnOiBzdHJpbmcsIGVycm9yRGF0YUFyZz86IGFueSkge1xuICAgIHRoaXMuZXJyb3JUZXh0ID0gZXJyb3JUZXh0QXJnO1xuICAgIHRoaXMuZXJyb3JEYXRhID0gZXJyb3JEYXRhQXJnO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgVHlwZWRSZXNwb25zZUVycm9yIH0gZnJvbSAnLi9jbGFzc2VzLnR5cGVkcmVzcG9uc2VlcnJvci5qcyc7XG5pbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vcGx1Z2lucy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBUeXBlZFRvb2xzIHtcbiAgLyoqXG4gICAqIExvY2FsIGRhdGEgcGFzc2VkIGZyb20gdGhlIHRyYW5zcG9ydCBsYXllci5cbiAgICogVGhpcyBjYW4gY29udGFpbiBjb25uZWN0aW9uLXNwZWNpZmljIGNvbnRleHQgbGlrZSB0aGUgV2ViU29ja2V0IHBlZXIuXG4gICAqL1xuICBwdWJsaWMgbG9jYWxEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgcHVibGljIGFzeW5jIHBhc3NHdWFyZHM8VCA9IGFueT4oZ3VhcmRzQXJnOiBwbHVnaW5zLnNtYXJ0Z3VhcmQuR3VhcmQ8VD5bXSwgZGF0YUFyZzogVCkge1xuICAgIGNvbnN0IGd1YXJkU2V0ID0gbmV3IHBsdWdpbnMuc21hcnRndWFyZC5HdWFyZFNldDxUPihndWFyZHNBcmcpO1xuICAgIGNvbnN0IGd1YXJkUmVzdWx0ID0gYXdhaXQgZ3VhcmRTZXQuYWxsR3VhcmRzUGFzcyhkYXRhQXJnKTtcbiAgICBpZiAoIWd1YXJkUmVzdWx0KSB7XG4gICAgICBjb25zdCBmYWlsZWRIaW50ID0gYXdhaXQgZ3VhcmRTZXQuZ2V0RmFpbGVkSGludChkYXRhQXJnKTtcbiAgICAgIHRocm93IG5ldyBUeXBlZFJlc3BvbnNlRXJyb3IoYGd1YXJkIGZhaWxlZDogJHtmYWlsZWRIaW50fWAsIHsgZmFpbGVkSGludCB9KTtcbiAgICB9XG4gIH1cbn0iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3BsdWdpbnMuanMnO1xuaW1wb3J0IHsgVHlwZWRSZXNwb25zZUVycm9yIH0gZnJvbSAnLi9jbGFzc2VzLnR5cGVkcmVzcG9uc2VlcnJvci5qcyc7XG5pbXBvcnQgeyBUeXBlZFRvb2xzIH0gZnJvbSAnLi9jbGFzc2VzLnR5cGVkdG9vbHMuanMnO1xuXG5leHBvcnQgdHlwZSBUSGFuZGxlckZ1bmN0aW9uPFQgZXh0ZW5kcyBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdD4gPSAoXG4gIHJlcXVlc3RBcmc6IFRbJ3JlcXVlc3QnXSxcbiAgdHlwZWRUb29sc0FyZz86IFR5cGVkVG9vbHNcbikgPT4gUHJvbWlzZTxUWydyZXNwb25zZSddPjtcblxuLyoqXG4gKiB0eXBlZCBoYW5kbGVyIGZvciBkZWFsaW5nIHdpdGggdHlwZWQgcmVxdWVzdHNcbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVkSGFuZGxlcjxUIGV4dGVuZHMgcGx1Z2lucy50eXBlZFJlcXVlc3RJbnRlcmZhY2VzLklUeXBlZFJlcXVlc3Q+IHtcbiAgcHVibGljIG1ldGhvZDogc3RyaW5nO1xuICBwcml2YXRlIGhhbmRsZXJGdW5jdGlvbjogVEhhbmRsZXJGdW5jdGlvbjxUPjtcblxuICBjb25zdHJ1Y3RvcihtZXRob2RBcmc6IFRbJ21ldGhvZCddLCBoYW5kbGVyRnVuY3Rpb25Bcmc6IFRIYW5kbGVyRnVuY3Rpb248VD4pIHtcbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZEFyZztcbiAgICB0aGlzLmhhbmRsZXJGdW5jdGlvbiA9IGhhbmRsZXJGdW5jdGlvbkFyZztcbiAgfVxuXG4gIC8qKlxuICAgKiBhZGRzIGEgcmVzcG9uc2UgdG8gdGhlIHR5cGVkUmVxdWVzdFxuICAgKiBAcGFyYW0gdHlwZWRSZXF1ZXN0QXJnXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYWRkUmVzcG9uc2UodHlwZWRSZXF1ZXN0QXJnOiBUKSB7XG4gICAgaWYgKHR5cGVkUmVxdWVzdEFyZy5tZXRob2QgIT09IHRoaXMubWV0aG9kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0aGlzIGhhbmRsZXIgaGFzIGJlZW4gZ2l2ZW4gYSB3cm9uZyBtZXRob2QgdG8gYW5zd2VyIHRvLiBQbGVhc2UgdXNlIGEgVHlwZWRSb3V0ZXIgdG8gZmlsdGVyIHJlcXVlc3RzJ1xuICAgICAgKTtcbiAgICB9XG4gICAgbGV0IHR5cGVkUmVzcG9uc2VFcnJvcjogVHlwZWRSZXNwb25zZUVycm9yO1xuICAgIGNvbnN0IHR5cGVkdG9vbHNJbnN0YW5jZSA9IG5ldyBUeXBlZFRvb2xzKCk7XG4gICAgLy8gUGFzcyBsb2NhbERhdGEgZnJvbSB0aGUgcmVxdWVzdCB0byBUeXBlZFRvb2xzIHNvIGhhbmRsZXJzIGNhbiBhY2Nlc3MgdHJhbnNwb3J0LWxheWVyIGNvbnRleHRcbiAgICBpZiAodHlwZWRSZXF1ZXN0QXJnLmxvY2FsRGF0YSkge1xuICAgICAgdHlwZWR0b29sc0luc3RhbmNlLmxvY2FsRGF0YSA9IHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGE7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYW5kbGVyRnVuY3Rpb24odHlwZWRSZXF1ZXN0QXJnLnJlcXVlc3QsIHR5cGVkdG9vbHNJbnN0YW5jZSkuY2F0Y2goKGUpID0+IHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgVHlwZWRSZXNwb25zZUVycm9yKSB7XG4gICAgICAgIHR5cGVkUmVzcG9uc2VFcnJvciA9IGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0eXBlZFJlc3BvbnNlRXJyb3IpIHtcbiAgICAgIHR5cGVkUmVxdWVzdEFyZy5lcnJvciA9IHtcbiAgICAgICAgdGV4dDogdHlwZWRSZXNwb25zZUVycm9yLmVycm9yVGV4dCxcbiAgICAgICAgZGF0YTogdHlwZWRSZXNwb25zZUVycm9yLmVycm9yRGF0YSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0eXBlZFJlcXVlc3RBcmcucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB9XG5cbiAgICB0eXBlZFJlcXVlc3RBcmc/LmNvcnJlbGF0aW9uPy5waGFzZSA/ICh0eXBlZFJlcXVlc3RBcmcuY29ycmVsYXRpb24ucGhhc2UgPSAncmVzcG9uc2UnKSA6IG51bGw7XG5cbiAgICByZXR1cm4gdHlwZWRSZXF1ZXN0QXJnO1xuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3BsdWdpbnMuanMnO1xuaW1wb3J0IHsgVmlydHVhbFN0cmVhbSB9IGZyb20gJy4vY2xhc3Nlcy52aXJ0dWFsc3RyZWFtLmpzJztcblxuaW1wb3J0IHsgVHlwZWRIYW5kbGVyIH0gZnJvbSAnLi9jbGFzc2VzLnR5cGVkaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBUeXBlZFJlcXVlc3QgfSBmcm9tICcuL2NsYXNzZXMudHlwZWRyZXF1ZXN0LmpzJztcblxuLyoqXG4gKiBMb2cgZW50cnkgZm9yIFR5cGVkUmVxdWVzdCB0cmFmZmljIG1vbml0b3JpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVHlwZWRSZXF1ZXN0TG9nRW50cnkge1xuICBjb3JyZWxhdGlvbklkOiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBkaXJlY3Rpb246ICdvdXRnb2luZycgfCAnaW5jb21pbmcnO1xuICBwaGFzZTogJ3JlcXVlc3QnIHwgJ3Jlc3BvbnNlJztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGR1cmF0aW9uTXM/OiBudW1iZXI7XG4gIHBheWxvYWQ6IGFueTtcbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSG9va3MgZm9yIGludGVyY2VwdGluZyBUeXBlZFJlcXVlc3QgdHJhZmZpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElUeXBlZFJvdXRlckhvb2tzIHtcbiAgb25PdXRnb2luZ1JlcXVlc3Q/OiAoZW50cnk6IElUeXBlZFJlcXVlc3RMb2dFbnRyeSkgPT4gdm9pZDtcbiAgb25JbmNvbWluZ1Jlc3BvbnNlPzogKGVudHJ5OiBJVHlwZWRSZXF1ZXN0TG9nRW50cnkpID0+IHZvaWQ7XG4gIG9uSW5jb21pbmdSZXF1ZXN0PzogKGVudHJ5OiBJVHlwZWRSZXF1ZXN0TG9nRW50cnkpID0+IHZvaWQ7XG4gIG9uT3V0Z29pbmdSZXNwb25zZT86IChlbnRyeTogSVR5cGVkUmVxdWVzdExvZ0VudHJ5KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgdHlwZWQgcm91dGVyIGRlY2lkZXMgb24gd2hpY2ggdHlwZWQgaGFuZGxlciB0byBjYWxsIGJhc2VkIG9uIHRoZSBtZXRob2RcbiAqIHNwZWNpZmllZCBpbiB0aGUgdHlwZWQgcmVxdWVzdFxuICogVGhpcyBpcyB0aG91Z2h0IGZvciByZXVzaW5nIHRoZSBzYW1lIHVybCBlbmRwb2ludCBmb3IgZGlmZmVyZW50IG1ldGhvZHNcbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVkUm91dGVyIHtcbiAgLy8gVXNlIGdsb2JhbFRoaXMgZm9yIGNyb3NzLWJ1bmRsZSBob29rIHNoYXJpbmdcbiAgcHVibGljIHN0YXRpYyBnZXQgZ2xvYmFsSG9va3MoKTogSVR5cGVkUm91dGVySG9va3Mge1xuICAgIGlmICghKGdsb2JhbFRoaXMgYXMgYW55KS5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3MpIHtcbiAgICAgIChnbG9iYWxUaGlzIGFzIGFueSkuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzID0ge307XG4gICAgfVxuICAgIHJldHVybiAoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc2V0IGdsb2JhbEhvb2tzKHZhbHVlOiBJVHlwZWRSb3V0ZXJIb29rcykge1xuICAgIChnbG9iYWxUaGlzIGFzIGFueSkuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGdsb2JhbCBob29rcyBmb3IgbW9uaXRvcmluZyBhbGwgVHlwZWRSZXF1ZXN0IHRyYWZmaWNcbiAgICogSG9va3MgYXJlIHNoYXJlZCBhY3Jvc3MgYWxsIGJ1bmRsZXMgdmlhIGdsb2JhbFRoaXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc2V0R2xvYmFsSG9va3MoaG9va3M6IElUeXBlZFJvdXRlckhvb2tzKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IFR5cGVkUm91dGVyLmdsb2JhbEhvb2tzO1xuICAgIFR5cGVkUm91dGVyLmdsb2JhbEhvb2tzID0geyAuLi5jdXJyZW50LCAuLi5ob29rcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBnbG9iYWwgaG9va3NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2xlYXJHbG9iYWxIb29rcygpOiB2b2lkIHtcbiAgICAoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcyA9IHt9O1xuICB9XG5cbiAgLy8gSW5zdGFuY2UtbGV2ZWwgaG9va3MgKGZvciBwZXItcm91dGVyIG1vbml0b3JpbmcpXG4gIHB1YmxpYyBob29rczogSVR5cGVkUm91dGVySG9va3MgPSB7fTtcblxuICAvKipcbiAgICogU2V0IGluc3RhbmNlLWxldmVsIGhvb2tzIGZvciBtb25pdG9yaW5nIHRyYWZmaWMgdGhyb3VnaCB0aGlzIHJvdXRlclxuICAgKi9cbiAgcHVibGljIHNldEhvb2tzKGhvb2tzOiBJVHlwZWRSb3V0ZXJIb29rcyk6IHZvaWQge1xuICAgIHRoaXMuaG9va3MgPSB7IC4uLnRoaXMuaG9va3MsIC4uLmhvb2tzIH07XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIHRvIGNhbGwgYm90aCBnbG9iYWwgYW5kIGluc3RhbmNlIGhvb2tzXG4gICAqL1xuICBwcml2YXRlIGNhbGxIb29rKFxuICAgIGhvb2tOYW1lOiBrZXlvZiBJVHlwZWRSb3V0ZXJIb29rcyxcbiAgICBlbnRyeTogSVR5cGVkUmVxdWVzdExvZ0VudHJ5XG4gICk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICAvLyBDYWxsIGdsb2JhbCBob29rc1xuICAgICAgVHlwZWRSb3V0ZXIuZ2xvYmFsSG9va3NbaG9va05hbWVdPy4oZW50cnkpO1xuICAgICAgLy8gQ2FsbCBpbnN0YW5jZSBob29rc1xuICAgICAgdGhpcy5ob29rc1tob29rTmFtZV0/LihlbnRyeSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBUeXBlZFJvdXRlciBob29rIGVycm9yICgke2hvb2tOYW1lfSk6YCwgZXJyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcm91dGVyTWFwID0gbmV3IHBsdWdpbnMubGlrLk9iamVjdE1hcDxUeXBlZFJvdXRlcj4oKTtcbiAgcHVibGljIGhhbmRsZXJNYXAgPSBuZXcgcGx1Z2lucy5saWsuT2JqZWN0TWFwPFxuICAgIFR5cGVkSGFuZGxlcjxhbnkgJiBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdD5cbiAgPigpO1xuICBwdWJsaWMgcmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zID0gbmV3IHBsdWdpbnMubGlrLk9iamVjdE1hcDxWaXJ0dWFsU3RyZWFtPGFueT4+KCk7XG5cbiAgcHVibGljIGZpcmVFdmVudEludGVyZXN0TWFwID0gbmV3IHBsdWdpbnMubGlrLkludGVyZXN0TWFwPFxuICAgIHN0cmluZyxcbiAgICBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdFxuICA+KChjb3JyZWxhdGlvbklkOiBzdHJpbmcpID0+IGNvcnJlbGF0aW9uSWQpO1xuXG4gIC8qKlxuICAgKiBhZGRzIHRoZSBoYW5kbGVyIHRvIHRoZSByb3V0aW5nIG1hcFxuICAgKiBAcGFyYW0gdHlwZWRIYW5kbGVyQXJnXG4gICAqL1xuICBwdWJsaWMgYWRkVHlwZWRIYW5kbGVyPFQgZXh0ZW5kcyBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdD4oXG4gICAgdHlwZWRIYW5kbGVyQXJnOiBUeXBlZEhhbmRsZXI8VD5cbiAgKSB7XG4gICAgLy8gbGV0cyBjaGVjayBmb3IgZGVkdXBsaWNhdGlvblxuICAgIGNvbnN0IGV4aXN0aW5nVHlwZWRIYW5kbGVyID0gdGhpcy5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QodHlwZWRIYW5kbGVyQXJnLm1ldGhvZCk7XG4gICAgaWYgKGV4aXN0aW5nVHlwZWRIYW5kbGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBhIFR5cGVkSGFuZGxlciBmb3IgJHt0eXBlZEhhbmRsZXJBcmcubWV0aG9kfSBhbHJlZHkgZXhpc3RzISBDYW4ndCBhZGQgYW5vdGhlciBvbmUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZXJNYXAuYWRkKHR5cGVkSGFuZGxlckFyZyk7XG4gIH1cblxuICAvKipcbiAgICogYWRkcyBhbm90aGVyIHN1YiB0eXBlZFJvdXRlclxuICAgKiBAcGFyYW0gdHlwZWRSZXF1ZXN0XG4gICAqL1xuICBwdWJsaWMgYWRkVHlwZWRSb3V0ZXIodHlwZWRSb3V0ZXJBcmc6IFR5cGVkUm91dGVyKSB7XG4gICAgY29uc3Qgcm91dGVyRXhpc3RzID0gdGhpcy5yb3V0ZXJNYXAuZmluZFN5bmMoKHJvdXRlckFyZykgPT4gcm91dGVyQXJnID09PSB0eXBlZFJvdXRlckFyZyk7XG4gICAgaWYgKCFyb3V0ZXJFeGlzdHMpIHtcbiAgICAgIHRoaXMucm91dGVyTWFwLmFkZCh0eXBlZFJvdXRlckFyZyk7XG4gICAgICB0eXBlZFJvdXRlckFyZy5hZGRUeXBlZFJvdXRlcih0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hlY2tGb3JUeXBlZEhhbmRsZXIobWV0aG9kQXJnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmdldFR5cGVkSGFuZGxlckZvck1ldGhvZChtZXRob2RBcmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldHMgYSB0eXBlZCBSb3V0ZXIgZnJvbSB0aGUgcm91dGVyIGNoYWluLCB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbVxuICAgKiBAcGFyYW0gbWV0aG9kQXJnXG4gICAqIEBwYXJhbSBjaGVja1Vwc3RyZWFtUm91dGVyXG4gICAqL1xuICBwdWJsaWMgZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKFxuICAgIG1ldGhvZEFyZzogc3RyaW5nLFxuICAgIGNoZWNrZWRSb3V0ZXJzOiBUeXBlZFJvdXRlcltdID0gW11cbiAgKTogVHlwZWRIYW5kbGVyPGFueT4ge1xuICAgIGNoZWNrZWRSb3V0ZXJzLnB1c2godGhpcyk7XG5cbiAgICBsZXQgdHlwZWRIYW5kbGVyOiBUeXBlZEhhbmRsZXI8YW55PjtcblxuICAgIHR5cGVkSGFuZGxlciA9IHRoaXMuaGFuZGxlck1hcC5maW5kU3luYygoaGFuZGxlcikgPT4ge1xuICAgICAgcmV0dXJuIGhhbmRsZXIubWV0aG9kID09PSBtZXRob2RBcmc7XG4gICAgfSk7XG5cbiAgICBpZiAoIXR5cGVkSGFuZGxlcikge1xuICAgICAgdGhpcy5yb3V0ZXJNYXAuZ2V0QXJyYXkoKS5mb3JFYWNoKCh0eXBlZFJvdXRlckFyZykgPT4ge1xuICAgICAgICBpZiAoIXR5cGVkSGFuZGxlciAmJiAhY2hlY2tlZFJvdXRlcnMuaW5jbHVkZXModHlwZWRSb3V0ZXJBcmcpKSB7XG4gICAgICAgICAgdHlwZWRIYW5kbGVyID0gdHlwZWRSb3V0ZXJBcmcuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKG1ldGhvZEFyZywgY2hlY2tlZFJvdXRlcnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZWRIYW5kbGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHJvdXRlQW5kQWRkUmVzcG9uc2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZGVmYXVsdFJvdXRlT3B0aW9ucyA9IHtcbiAgICBsb2NhbFJlcXVlc3Q6IGZhbHNlLFxuICAgIHNraXBIb29rczogZmFsc2UsXG4gIH07XG5cbiAgLyoqXG4gICAqIGlmIHR5cGVkcmVxdWVzdCBvYmplY3QgaGFzIGNvcnJlbGF0aW9uLnBoYXNlID09PSAncmVxdWVzdCcgLT4gcm91dGVzIGEgdHlwZWQgcmVxdWVzdCBvYmplY3QgdG8gYSBoYW5kbGVyXG4gICAqIGlmIHR5cGVkcmVxdWVzdCBvYmplY3QgaGFzIGNvcnJlbGF0aW9uLnBoYXNlID09PSAncmVzcG9uc2UnIC0+IHJvdXRlcyBhIHR5cGVkIHJlcXVlc3Qgb2JqZWN0IHRvIHJlcXVlc3QgZmlyZSBldmVudFxuICAgKiBAcGFyYW0gdHlwZWRSZXF1ZXN0QXJnXG4gICAqIEBwYXJhbSBvcHRpb25zQXJnIC0gT3B0aW9ucyBvYmplY3Qgd2l0aDpcbiAgICogICAtIGxvY2FsUmVxdWVzdDogdHJlYXQgYXMgbG9jYWwgcmVxdWVzdCAoZGVmYXVsdDogZmFsc2UpXG4gICAqICAgLSBza2lwSG9va3M6IHNraXAgY2FsbGluZyBob29rcyBmb3IgdGhpcyByb3V0aW5nIChkZWZhdWx0OiBmYWxzZSwgdXNlIGZvciBicm9hZGNhc3QtcmVjZWl2ZWQgbWVzc2FnZXMpXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcm91dGVBbmRBZGRSZXNwb25zZTxcbiAgICBUIGV4dGVuZHMgcGx1Z2lucy50eXBlZFJlcXVlc3RJbnRlcmZhY2VzLklUeXBlZFJlcXVlc3QgPSBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdFxuICA+KHR5cGVkUmVxdWVzdEFyZzogVCwgb3B0aW9uc0FyZzogeyBsb2NhbFJlcXVlc3Q/OiBib29sZWFuOyBza2lwSG9va3M/OiBib29sZWFuIH0gPSB7fSk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLlR5cGVkUm91dGVyLmRlZmF1bHRSb3V0ZU9wdGlvbnMsIC4uLm9wdGlvbnNBcmcgfTtcbiAgICAvLyBkZWNvZGluZyBmaXJzdFxuICAgIHR5cGVkUmVxdWVzdEFyZyA9IFZpcnR1YWxTdHJlYW0uZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKHR5cGVkUmVxdWVzdEFyZywge1xuICAgICAgdHlwZWRyb3V0ZXI6IHRoaXMsXG4gICAgfSk7XG5cbiAgICAvLyBsb2NhbGRhdGEgc2Vjb25kXG4gICAgdHlwZWRSZXF1ZXN0QXJnLmxvY2FsRGF0YSA9IHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEgfHwge307XG4gICAgdHlwZWRSZXF1ZXN0QXJnLmxvY2FsRGF0YS5maXJzdFR5cGVkcm91dGVyID0gdGhpcztcblxuICAgIC8vIGxldHMgZG8gc3RyZWFtIHByb2Nlc3NpbmdcbiAgICBpZiAodHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCA9PT0gJyMjVmlydHVhbFN0cmVhbSMjJykge1xuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBhd2FpdCB0aGlzLmhhbmRsZVN0cmVhbVR5cGVkUmVxdWVzdCh0eXBlZFJlcXVlc3RBcmcgYXMgcGx1Z2lucy50eXBlZFJlcXVlc3RJbnRlcmZhY2VzLklTdHJlYW1SZXF1ZXN0KTtcbiAgICAgIHJlc3VsdC5sb2NhbERhdGEgPSBudWxsO1xuICAgICAgcmV0dXJuIHJlc3VsdCBhcyBUO1xuICAgIH1cblxuICAgIC8vIGxldHMgZG8gbm9ybWFsIHJvdXRpbmdcbiAgICBpZiAodHlwZWRSZXF1ZXN0QXJnPy5jb3JyZWxhdGlvbj8ucGhhc2UgPT09ICdyZXF1ZXN0JyB8fCBvcHRpb25zLmxvY2FsUmVxdWVzdCkge1xuICAgICAgY29uc3QgcmVxdWVzdFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgIC8vIEhvb2s6IGluY29taW5nIHJlcXVlc3QgKHNraXAgaWYgcm91dGluZyBicm9hZGNhc3QtcmVjZWl2ZWQgbWVzc2FnZXMpXG4gICAgICBpZiAoIW9wdGlvbnMuc2tpcEhvb2tzKSB7XG4gICAgICAgIHRoaXMuY2FsbEhvb2soJ29uSW5jb21pbmdSZXF1ZXN0Jywge1xuICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbj8uaWQgfHwgJ3Vua25vd24nLFxuICAgICAgICAgIG1ldGhvZDogdHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCxcbiAgICAgICAgICBkaXJlY3Rpb246ICdpbmNvbWluZycsXG4gICAgICAgICAgcGhhc2U6ICdyZXF1ZXN0JyxcbiAgICAgICAgICB0aW1lc3RhbXA6IHJlcXVlc3RTdGFydFRpbWUsXG4gICAgICAgICAgcGF5bG9hZDogdHlwZWRSZXF1ZXN0QXJnLnJlcXVlc3QsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlZEhhbmRsZXIgPSB0aGlzLmdldFR5cGVkSGFuZGxlckZvck1ldGhvZCh0eXBlZFJlcXVlc3RBcmcubWV0aG9kKTtcblxuICAgICAgaWYgKCF0eXBlZEhhbmRsZXIpIHtcbiAgICAgICAgY29uc29sZS5sb2coYENhbm5vdCBmaW5kIGhhbmRsZXIgZm9yIG1ldGhvZG5hbWUgJHt0eXBlZFJlcXVlc3RBcmcubWV0aG9kfWApO1xuICAgICAgICB0eXBlZFJlcXVlc3RBcmcuZXJyb3IgPSB7XG4gICAgICAgICAgdGV4dDogJ1RoZXJlIGlzIG5vIGF2YWlsYWJsZSBtZXRob2QgZm9yIHRoaXMgY2FsbCBvbiB0aGUgc2VydmVyIHNpZGUnLFxuICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICB9O1xuICAgICAgICB0eXBlZFJlcXVlc3RBcmcuY29ycmVsYXRpb24ucGhhc2UgPSAncmVzcG9uc2UnO1xuXG4gICAgICAgIC8vIGVuY29kZSBhZ2FpbiBiZWZvcmUgaGFuZGluZyBiYWNrXG4gICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEgPSBudWxsO1xuICAgICAgICB0eXBlZFJlcXVlc3RBcmcgPSBWaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKHR5cGVkUmVxdWVzdEFyZywge1xuICAgICAgICAgIHR5cGVkcm91dGVyOiB0aGlzLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBIb29rOiBvdXRnb2luZyByZXNwb25zZSAoZXJyb3IgLSBubyBoYW5kbGVyKVxuICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcEhvb2tzKSB7XG4gICAgICAgICAgdGhpcy5jYWxsSG9vaygnb25PdXRnb2luZ1Jlc3BvbnNlJywge1xuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uPy5pZCB8fCAndW5rbm93bicsXG4gICAgICAgICAgICBtZXRob2Q6IHR5cGVkUmVxdWVzdEFyZy5tZXRob2QsXG4gICAgICAgICAgICBkaXJlY3Rpb246ICdvdXRnb2luZycsXG4gICAgICAgICAgICBwaGFzZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnRUaW1lLFxuICAgICAgICAgICAgcGF5bG9hZDogdHlwZWRSZXF1ZXN0QXJnLnJlc3BvbnNlLFxuICAgICAgICAgICAgZXJyb3I6IHR5cGVkUmVxdWVzdEFyZy5lcnJvcj8udGV4dCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0eXBlZFJlcXVlc3RBcmc7XG4gICAgICB9XG5cbiAgICAgIHR5cGVkUmVxdWVzdEFyZyA9IGF3YWl0IHR5cGVkSGFuZGxlci5hZGRSZXNwb25zZSh0eXBlZFJlcXVlc3RBcmcpO1xuICAgICAgdHlwZWRSZXF1ZXN0QXJnLmxvY2FsRGF0YSA9IG51bGw7XG4gICAgICAvLyBlbmNvZGUgYWdhaW4gYmVmb3JlIGhhbmRpbmcgYmFja1xuICAgICAgdHlwZWRSZXF1ZXN0QXJnID0gVmlydHVhbFN0cmVhbS5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayh0eXBlZFJlcXVlc3RBcmcsIHtcbiAgICAgICAgdHlwZWRyb3V0ZXI6IHRoaXMsXG4gICAgICB9KTtcblxuICAgICAgLy8gSG9vazogb3V0Z29pbmcgcmVzcG9uc2UgKHN1Y2Nlc3MpXG4gICAgICBpZiAoIW9wdGlvbnMuc2tpcEhvb2tzKSB7XG4gICAgICAgIHRoaXMuY2FsbEhvb2soJ29uT3V0Z29pbmdSZXNwb25zZScsIHtcbiAgICAgICAgICBjb3JyZWxhdGlvbklkOiB0eXBlZFJlcXVlc3RBcmcuY29ycmVsYXRpb24/LmlkIHx8ICd1bmtub3duJyxcbiAgICAgICAgICBtZXRob2Q6IHR5cGVkUmVxdWVzdEFyZy5tZXRob2QsXG4gICAgICAgICAgZGlyZWN0aW9uOiAnb3V0Z29pbmcnLFxuICAgICAgICAgIHBoYXNlOiAncmVzcG9uc2UnLFxuICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gcmVxdWVzdFN0YXJ0VGltZSxcbiAgICAgICAgICBwYXlsb2FkOiB0eXBlZFJlcXVlc3RBcmcucmVzcG9uc2UsXG4gICAgICAgICAgZXJyb3I6IHR5cGVkUmVxdWVzdEFyZy5lcnJvcj8udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlZFJlcXVlc3RBcmc7XG4gICAgfSBlbHNlIGlmICh0eXBlZFJlcXVlc3RBcmc/LmNvcnJlbGF0aW9uPy5waGFzZSA9PT0gJ3Jlc3BvbnNlJykge1xuICAgICAgLy8gSG9vazogaW5jb21pbmcgcmVzcG9uc2VcbiAgICAgIGlmICghb3B0aW9ucy5za2lwSG9va3MpIHtcbiAgICAgICAgdGhpcy5jYWxsSG9vaygnb25JbmNvbWluZ1Jlc3BvbnNlJywge1xuICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbj8uaWQgfHwgJ3Vua25vd24nLFxuICAgICAgICAgIG1ldGhvZDogdHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCxcbiAgICAgICAgICBkaXJlY3Rpb246ICdpbmNvbWluZycsXG4gICAgICAgICAgcGhhc2U6ICdyZXNwb25zZScsXG4gICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgIHBheWxvYWQ6IHR5cGVkUmVxdWVzdEFyZy5yZXNwb25zZSxcbiAgICAgICAgICBlcnJvcjogdHlwZWRSZXF1ZXN0QXJnLmVycm9yPy50ZXh0LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maXJlRXZlbnRJbnRlcmVzdE1hcFxuICAgICAgICAuZmluZEludGVyZXN0KHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbi5pZClcbiAgICAgICAgPy5mdWxsZmlsbEludGVyZXN0KHR5cGVkUmVxdWVzdEFyZyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ3JlY2VpdmVkIHdlaXJkbHkgc2hhcGVkIHJlcXVlc3QnKTtcbiAgICAgIGNvbnNvbGUubG9nKHR5cGVkUmVxdWVzdEFyZyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHN0cmVhbWluZ1xuICAgKiBAcGFyYW0gc3RyZWFtVHJBcmcgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaGFuZGxlU3RyZWFtVHlwZWRSZXF1ZXN0KHN0cmVhbVRyQXJnOiBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVN0cmVhbVJlcXVlc3QpIHtcbiAgICBjb25zdCByZWxldmFudFZpcnR1YWxTdHJlYW0gPSBhd2FpdCB0aGlzLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcy5maW5kKGFzeW5jIHZpcnR1YWxTdHJlYW1BcmcgPT4ge1xuICAgICAgcmV0dXJuIHZpcnR1YWxTdHJlYW1Bcmcuc3RyZWFtSWQgPT09IHN0cmVhbVRyQXJnLnJlcXVlc3Quc3RyZWFtSWQ7XG4gICAgfSk7XG4gICAgaWYgKCFyZWxldmFudFZpcnR1YWxTdHJlYW0pIHtcbiAgICAgIGNvbnNvbGUubG9nKGBubyByZWxldmFudCB2aXJ0dWFsIHN0cmVhbSBmb3VuZCBmb3Igc3RyZWFtIHdpdGggaWQgJHtzdHJlYW1UckFyZy5yZXF1ZXN0LnN0cmVhbUlkfWApO1xuICAgICAgY29uc29sZS5sb2codGhpcy5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuZ2V0QXJyYXkoKSk7XG4gICAgICByZXR1cm4gc3RyZWFtVHJBcmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGBzdWNjZXNzOiBmb3VuZCByZWxldmFudCB2aXJ0dWFsIHN0cmVhbSB3aXRoIGlkICR7c3RyZWFtVHJBcmcucmVxdWVzdC5zdHJlYW1JZH1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVsZXZhbnRWaXJ0dWFsU3RyZWFtLmhhbmRsZVN0cmVhbVRyKHN0cmVhbVRyQXJnKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3BsdWdpbnMuanMnO1xuaW1wb3J0IHsgVHlwZWRSb3V0ZXIgfSBmcm9tICcuL2NsYXNzZXMudHlwZWRyb3V0ZXIuanMnO1xuXG5cbmNvbnN0IGNsb3NpbmdCaXQ6IGFueSA9ICcjIyMjIyMjIyMjIyMjQ0xPU0lORyBCSVQjIyMjIyMjIyMjIyMjJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29tbUZ1bmN0aW9ucyB7XG4gIHNlbmRNZXRob2Q/OiAoXG4gICAgc2VuZFBheWxvYWQ6IHBsdWdpbnMudHlwZWRSZXF1ZXN0SW50ZXJmYWNlcy5JU3RyZWFtUmVxdWVzdFxuICApID0+IFByb21pc2U8cGx1Z2lucy50eXBlZFJlcXVlc3RJbnRlcmZhY2VzLklTdHJlYW1SZXF1ZXN0PjtcbiAgdHlwZWRyb3V0ZXI/OiBUeXBlZFJvdXRlcjtcbn1cblxuLyoqXG4gKiAxLiBBIFZpcnR1YWxTdHJlYW0gY29ubmVjdHMgb3ZlciB0aGUgbmV0d29ya1xuICogMi4gSXQgaXMgYWx3YXlzIHBhaXJlZCB0byBvbmUgb3RoZXIgVmlydHVhbFN0cmVhbVxuICogICAgb24gdGhlIG90aGVyIHNpZGUgd2l0aCB0aGUgc2FtZSBzdHJlYW1JZC5cbiAqIDMuIEl0IGhhcyBhIFJlYWRhYmxlIGFuZCBXcml0YWJsZSBzaWRlLlxuICogNC4gVGhlIFdyaXRhYmxlIHNpZGUgaXMgUmVhZGFibGUgb24gdGhlIG90aGVyIHNpZGUgYW5kIHZpY2UgdmVyc2EuXG4gKi9cbmV4cG9ydCBjbGFzcyBWaXJ0dWFsU3RyZWFtPFQgPSBVaW50OEFycmF5PiBpbXBsZW1lbnRzIHBsdWdpbnMudHlwZWRSZXF1ZXN0SW50ZXJmYWNlcy5JVmlydHVhbFN0cmVhbTxUPiB7XG4gIC8vIFNUQVRJQ1xuICBwdWJsaWMgc3RhdGljIGVuY29kZVBheWxvYWRGb3JOZXR3b3JrKFxuICAgIG9iamVjdFBheWxvYWQ6IGFueSxcbiAgICBjb21tRnVuY3Rpb25zOiBJQ29tbUZ1bmN0aW9ucyxcbiAgICBvcmlnaW5hbFBheWxvYWQ/OiBhbnksXG4gICAgcGF0aCA9IFtdXG4gICk6IGFueSB7XG4gICAgaWYgKCFvYmplY3RQYXlsb2FkKSB7XG4gICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDtcbiAgICB9XG4gICAgaWYgKHBsdWdpbnMuc21hcnRidWZmZXIuaXNCdWZmZXJMaWtlKG9iamVjdFBheWxvYWQpKSB7XG4gICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDtcbiAgICB9XG4gICAgaWYgKG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBWaXJ0dWFsU3RyZWFtKSB7XG4gICAgICBpZiAoIW9iamVjdFBheWxvYWQuc2lkZSAmJiBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2QpIHtcbiAgICAgICAgb2JqZWN0UGF5bG9hZC5zaWRlID0gJ3JlcXVlc3RpbmcnO1xuICAgICAgICBvYmplY3RQYXlsb2FkLnNlbmRNZXRob2QgPSBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2Q7XG4gICAgICB9XG4gICAgICBpZiAoIW9iamVjdFBheWxvYWQuc2lkZSAmJiBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyKSB7XG4gICAgICAgIG9iamVjdFBheWxvYWQuc2lkZSA9ICdyZXNwb25kaW5nJztcbiAgICAgICAgb2JqZWN0UGF5bG9hZC50eXBlZHJvdXRlciA9IGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXI7XG4gICAgICAgIGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXIucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmFkZChvYmplY3RQYXlsb2FkKTtcbiAgICAgIH1cbiAgICAgIGlmICghb3JpZ2luYWxQYXlsb2FkLnJlc3BvbnNlIHx8IHBhdGguaW5jbHVkZXMoJ3Jlc3BvbnNlJykpIHtcbiAgICAgICAgb2JqZWN0UGF5bG9hZC5zdGFydEtlZXBBbGl2ZUxvb3AoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaXNWaXJ0dWFsU3RyZWFtOiB0cnVlLFxuICAgICAgICAgIHN0cmVhbUlkOiBvYmplY3RQYXlsb2FkLnN0cmVhbUlkLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfT0JNSVRURURfVklSVFVBTF9TVFJFQU06IHRydWUsXG4gICAgICAgICAgcmVhc29uOiAncGF0aCBpcyB1bmRlciAucmVxdWVzdDogb2JtaXR0ZWQgZm9yIGRlZHVwbGljYXRpb24gcmVhc29ucyBpbiByZXNwb25zZSBjeWNsZS4nLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3RQYXlsb2FkKSkge1xuICAgICAgLy8gRm9yIGFycmF5cywgd2UgcmVjdXJzZSBvdmVyIGVhY2ggaXRlbS5cbiAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkLm1hcCgoaXRlbSwgaW5kZXgpID0+IFxuICAgICAgICBWaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKFxuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgY29tbUZ1bmN0aW9ucyxcbiAgICAgICAgICBvcmlnaW5hbFBheWxvYWQgfHwgb2JqZWN0UGF5bG9hZCxcbiAgICAgICAgICBwYXRoLmNvbmNhdChTdHJpbmcoaW5kZXgpKSAvLyBDb252ZXJ0IGluZGV4IHRvIHN0cmluZyBhbmQgY29uY2F0ZW5hdGUgdG8gcGF0aFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAob2JqZWN0UGF5bG9hZCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0UGF5bG9hZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIEZvciBvYmplY3RzLCB3ZSByZWN1cnNlIG92ZXIgZWFjaCBrZXktdmFsdWUgcGFpci5cbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvYmplY3RQYXlsb2FkKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoLmNvbmNhdChrZXkpOyAvLyBDb25jYXRlbmF0ZSB0aGUgbmV3IGtleSB0byB0aGUgcGF0aFxuICAgICAgICBhY2Nba2V5XSA9IFZpcnR1YWxTdHJlYW0uZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgY29tbUZ1bmN0aW9ucyxcbiAgICAgICAgICBvcmlnaW5hbFBheWxvYWQgfHwgb2JqZWN0UGF5bG9hZCxcbiAgICAgICAgICBuZXdQYXRoXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKG9iamVjdFBheWxvYWQ6IGFueSwgY29tbUZ1bmN0aW9uczogSUNvbW1GdW5jdGlvbnMpOiBhbnkge1xuXG4gICAgaWYgKFxuICAgICAgcGx1Z2lucy5zbWFydGJ1ZmZlci5pc0J1ZmZlckxpa2Uob2JqZWN0UGF5bG9hZClcbiAgICAgIHx8IG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBUeXBlZFJvdXRlclxuICAgICkge1xuICAgICAgcmV0dXJuIG9iamVjdFBheWxvYWQ7XG4gICAgfVxuICAgIGlmIChvYmplY3RQYXlsb2FkICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3RQYXlsb2FkID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gUHJlc2VydmUgYnVpbHQtaW4gb2JqZWN0cyB0aGF0IHNob3VsZG4ndCBiZSB0cmFuc2Zvcm1lZFxuICAgICAgaWYgKFxuICAgICAgICBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgU2V0IHx8XG4gICAgICAgIG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBNYXAgfHxcbiAgICAgICAgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIFJlZ0V4cCB8fFxuICAgICAgICBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgRXJyb3IgfHxcbiAgICAgICAgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIFByb21pc2UgfHxcbiAgICAgICAgdHlwZW9mIG9iamVjdFBheWxvYWQudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdFBheWxvYWQuX2lzVmlydHVhbFN0cmVhbSkge1xuICAgICAgICBjb25zdCB2aXJ0dWFsU3RyZWFtID0gbmV3IFZpcnR1YWxTdHJlYW0oKTtcbiAgICAgICAgdmlydHVhbFN0cmVhbS5zdHJlYW1JZCA9IG9iamVjdFBheWxvYWQuc3RyZWFtSWQ7XG4gICAgICAgIGlmICghdmlydHVhbFN0cmVhbS5zaWRlICYmIGNvbW1GdW5jdGlvbnMuc2VuZE1ldGhvZCkge1xuICAgICAgICAgIHZpcnR1YWxTdHJlYW0uc2lkZSA9ICdyZXF1ZXN0aW5nJztcbiAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnNlbmRNZXRob2QgPSBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2aXJ0dWFsU3RyZWFtLnNpZGUgJiYgY29tbUZ1bmN0aW9ucy50eXBlZHJvdXRlcikge1xuICAgICAgICAgIHZpcnR1YWxTdHJlYW0uc2lkZSA9ICdyZXNwb25kaW5nJztcbiAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnR5cGVkcm91dGVyID0gY29tbUZ1bmN0aW9ucy50eXBlZHJvdXRlcjtcbiAgICAgICAgICBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcy5hZGQodmlydHVhbFN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgICAgdmlydHVhbFN0cmVhbS5zdGFydEtlZXBBbGl2ZUxvb3AoKTtcbiAgICAgICAgcmV0dXJuIHZpcnR1YWxTdHJlYW07XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0UGF5bG9hZCkpIHtcbiAgICAgICAgY29uc3QgcmV0dXJuQXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9iamVjdFBheWxvYWQpIHtcbiAgICAgICAgICByZXR1cm5BcnJheS5wdXNoKFZpcnR1YWxTdHJlYW0uZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKGl0ZW0sIGNvbW1GdW5jdGlvbnMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0UGF5bG9hZCkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgIGFjY1trZXldID0gVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsob2JqZWN0UGF5bG9hZFtrZXldLCBjb21tRnVuY3Rpb25zKTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkO1xuICAgIH1cbiAgfVxuXG4gIC8vIElOU1RBTkNFXG5cbiAgcHVibGljIHNpZGU6ICdyZXF1ZXN0aW5nJyB8ICdyZXNwb25kaW5nJztcbiAgcHVibGljIHN0cmVhbUlkOiBzdHJpbmcgPSBwbHVnaW5zLmlzb3VuaXF1ZS51bmkoKTtcblxuICAvLyBpbnRlZ3JhdGlvbiB3aXRoIHR5cGVkcmVxdWVzdCBtZWNoYW5pY3NcbiAgcHVibGljIHNlbmRNZXRob2Q6IElDb21tRnVuY3Rpb25zWydzZW5kTWV0aG9kJ107XG4gIHB1YmxpYyB0eXBlZHJvdXRlcjogVHlwZWRSb3V0ZXI7XG5cbiAgLy8gd2V0aGVyIHRvIGtlZXAgdGhlIHN0cmVhbSBhbGl2ZVxuICBwcml2YXRlIGtlZXBBbGl2ZSA9IHRydWU7XG4gIHByaXZhdGUgbGFzdEtlZXBBbGl2ZUV2ZW50OiBudW1iZXI7XG5cbiAgLy8gYmFja3ByZXNzdXJlZCBhcnJheXNcbiAgcHJpdmF0ZSBzZW5kQmFja3ByZXNzdXJlZEFycmF5ID1cbiAgICBuZXcgcGx1Z2lucy5saWsuQmFja3ByZXNzdXJlZEFycmF5PFQ+KFxuICAgICAgMTZcbiAgICApO1xuICBwcml2YXRlIHJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkgPVxuICAgIG5ldyBwbHVnaW5zLmxpay5CYWNrcHJlc3N1cmVkQXJyYXk8VD4oXG4gICAgICAxNlxuICAgICk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHdvcmtpbmdEZWZlcnJlZDogcGx1Z2lucy5zbWFydHByb21pc2UuRGVmZXJyZWQ8dm9pZD47XG5cbiAgLyoqXG4gICAqIHRha2VzIGNhcmUgb2Ygc2VuZGluZyBcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd29ya09uUXVldWUoKSB7XG4gICAgaWYgKHRoaXMud29ya2luZ0RlZmVycmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy53b3JraW5nRGVmZXJyZWQucHJvbWlzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53b3JraW5nRGVmZXJyZWQgPSBwbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpO1xuICAgIH1cbiAgICBpZih0aGlzLnNpZGUgPT09ICdyZXF1ZXN0aW5nJykge1xuICAgICAgbGV0IHRoaXNTaWRlSXNCYWNrcHJlc3N1cmVkID0gIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCk7XG4gICAgICBsZXQgb3RoZXJTaWRlSGFzTmV4dCA9IGZhbHNlO1xuICAgICAgbGV0IG90aGVyU2lkZUlzQmFja3ByZXNzdXJlZCA9IGZhbHNlO1xuICAgICAgXG4gICAgICAvLyBoZWxwZXIgZnVuY3Rpb25zXG4gICAgICBjb25zdCBnZXRGZWVkYmFjayA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RyZWFtVHIgPSBhd2FpdCB0aGlzLnNlbmRNZXRob2Qoe1xuICAgICAgICAgIG1ldGhvZDogJyMjVmlydHVhbFN0cmVhbSMjJyxcbiAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCxcbiAgICAgICAgICAgIGN5Y2xlSWQ6IHBsdWdpbnMuaXNvdW5pcXVlLnVuaSgpLFxuICAgICAgICAgICAgY3ljbGU6ICdyZXF1ZXN0JyxcbiAgICAgICAgICAgIG1haW5QdXJwb3NlOiAnZmVlZGJhY2snLFxuICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCxcbiAgICAgICAgICAgIGJhY2twcmVzc3VyZTogIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNwb25zZTogbnVsbCxcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdzdHJlYW0gZW5kZWQgaW1tYXR1cmVseScpO1xuICAgICAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UpIHtcbiAgICAgICAgICBvdGhlclNpZGVJc0JhY2twcmVzc3VyZWQgPSBzdHJlYW1Uci5yZXNwb25zZS5iYWNrcHJlc3N1cmVcbiAgICAgICAgICBvdGhlclNpZGVIYXNOZXh0ID0gc3RyZWFtVHIucmVzcG9uc2UubmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgZ2V0RmVlZGJhY2soKTtcblxuICAgICAgLy8gZG8gd29yayBsb29wXG4gICAgICB3aGlsZSAodGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCB8fCBvdGhlclNpZGVIYXNOZXh0KSB7XG4gICAgICAgIGlmIChvdGhlclNpZGVJc0JhY2twcmVzc3VyZWQpIHtcbiAgICAgICAgICB3aGlsZSAob3RoZXJTaWRlSXNCYWNrcHJlc3N1cmVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnd2FpdGluZyBmb3IgZmVlZGJhY2sgYmVjYXVzZSBvZiBiYWNrcHJlc3N1cmUuLi4nKTtcbiAgICAgICAgICAgIGF3YWl0IHBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcig1MCk7XG4gICAgICAgICAgICBhd2FpdCBnZXRGZWVkYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgZGF0YUFyZzogdHlwZW9mIHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhWzBdO1xuICAgICAgICBpZiAodGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRhdGFBcmcgPSB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RyZWFtVHI6IHBsdWdpbnMudHlwZWRSZXF1ZXN0SW50ZXJmYWNlcy5JU3RyZWFtUmVxdWVzdDtcbiAgICAgICAgc3RyZWFtVHIgPSBhd2FpdCB0aGlzLnNlbmRNZXRob2Qoe1xuICAgICAgICAgIG1ldGhvZDogJyMjVmlydHVhbFN0cmVhbSMjJyxcbiAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCxcbiAgICAgICAgICAgIGN5Y2xlSWQ6IHBsdWdpbnMuaXNvdW5pcXVlLnVuaSgpLFxuICAgICAgICAgICAgY3ljbGU6ICdyZXF1ZXN0JyxcbiAgICAgICAgICAgIG1haW5QdXJwb3NlOiBkYXRhQXJnID8gJ2NodW5rJyA6ICdyZWFkJyxcbiAgICAgICAgICAgIGJhY2twcmVzc3VyZTogdGhpc1NpZGVJc0JhY2twcmVzc3VyZWQsXG4gICAgICAgICAgICBuZXh0OiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwLFxuICAgICAgICAgICAgLi4uZGF0YUFyZyA/IHsgY2h1bmtEYXRhOiBkYXRhQXJnIH0gOiB7fSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlOiBudWxsLFxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3N0cmVhbSBlbmRlZCBpbW1hdHVyZWx5Jyk7XG4gICAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLmNodW5rRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5wdXNoKHN0cmVhbVRyLnJlc3BvbnNlLmNodW5rRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgb3RoZXJTaWRlSXNCYWNrcHJlc3N1cmVkID0gc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UgJiYgc3RyZWFtVHIucmVzcG9uc2UuYmFja3ByZXNzdXJlO1xuICAgICAgICB0aGlzU2lkZUlzQmFja3ByZXNzdXJlZCA9ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpO1xuXG4gICAgICAgIC8vIGxldHMgY2FyZSBhYm91dCBsb29waW5nXG4gICAgICAgIG90aGVyU2lkZUhhc05leHQgPSBzdHJlYW1UciAmJiBzdHJlYW1Uci5yZXNwb25zZSAmJiBzdHJlYW1Uci5yZXNwb25zZS5uZXh0O1xuICAgICAgfVxuXG4gICAgfVxuICAgIHRoaXMud29ya2luZ0RlZmVycmVkLnJlc29sdmUoKTtcbiAgICB0aGlzLndvcmtpbmdEZWZlcnJlZCA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgc3RyZWFtIG9ubHkgb24gdGhlIHJlc3BvbmRpbmcgc2lkZVxuICAgKiBAcGFyYW0gc3RyZWFtVHJBcmdcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVTdHJlYW1UcihzdHJlYW1UckFyZzogcGx1Z2lucy50eXBlZFJlcXVlc3RJbnRlcmZhY2VzLklTdHJlYW1SZXF1ZXN0KSB7XG4gICAgaWYgKHN0cmVhbVRyQXJnLnJlcXVlc3Qua2VlcEFsaXZlID09PSB0cnVlICYmIHRoaXMua2VlcEFsaXZlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmxhc3RLZWVwQWxpdmVFdmVudCA9IERhdGUubm93KCk7XG4gICAgfSBlbHNlIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0LmtlZXBBbGl2ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8ga2VlcEFsaXZlIGhhbmRsaW5nXG4gICAgaWYgKHN0cmVhbVRyQXJnLnJlcXVlc3QubWFpblB1cnBvc2UgPT09ICdrZWVwQWxpdmUnKSB7XG4gICAgICAvLyBpZiB0aGUgbWFpbiBwdXJwb3NlIGlzIGtlZXBBbGl2ZSwgd2UgYW5zd2VyIHdpdGggYSBrZWVwQWxpdmVcbiAgICAgIHN0cmVhbVRyQXJnLnJlc3BvbnNlID0ge1xuICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCxcbiAgICAgICAgY3ljbGVJZDogc3RyZWFtVHJBcmcucmVxdWVzdC5jeWNsZUlkLFxuICAgICAgICBjeWNsZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgbWFpblB1cnBvc2U6ICdrZWVwQWxpdmUnLFxuICAgICAgICBrZWVwQWxpdmU6IHRoaXMua2VlcEFsaXZlLFxuICAgICAgICBuZXh0OiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwLFxuICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmZWVkYmFjayBoYW5kbGluZ1xuICAgIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0Lm1haW5QdXJwb3NlID09PSAnZmVlZGJhY2snKSB7XG4gICAgICBzdHJlYW1UckFyZy5yZXNwb25zZSA9IHtcbiAgICAgICAgc3RyZWFtSWQ6IHRoaXMuc3RyZWFtSWQsXG4gICAgICAgIGN5Y2xlSWQ6IHN0cmVhbVRyQXJnLnJlcXVlc3QuY3ljbGVJZCxcbiAgICAgICAgY3ljbGU6ICdyZXNwb25zZScsXG4gICAgICAgIG1haW5QdXJwb3NlOiAnZmVlZGJhY2snLFxuICAgICAgICBuZXh0OiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwLFxuICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBjaHVuayBoYW5kbGluZ1xuICAgIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0Lm1haW5QdXJwb3NlID09PSAnY2h1bmsnKSB7XG4gICAgICB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkucHVzaChzdHJlYW1UckFyZy5yZXF1ZXN0LmNodW5rRGF0YSk7XG4gICAgICBpZiAodGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCAmJiBzdHJlYW1UckFyZy5yZXNwb25zZS5iYWNrcHJlc3N1cmUgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGRhdGFBcmcgPSB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKTtcbiAgICAgICAgc3RyZWFtVHJBcmcucmVzcG9uc2UgPSB7XG4gICAgICAgICAgc3RyZWFtSWQ6IHRoaXMuc3RyZWFtSWQsXG4gICAgICAgICAgY3ljbGVJZDogc3RyZWFtVHJBcmcucmVxdWVzdC5jeWNsZUlkLFxuICAgICAgICAgIGN5Y2xlOiAncmVzcG9uc2UnLFxuICAgICAgICAgIG1haW5QdXJwb3NlOiAnY2h1bmsnLFxuICAgICAgICAgIG5leHQ6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDEsIC8vIDEgYW5kIG5vdCAwIGJlY2F1c2Ugd2UgY2FsbCBzaGlmdCBhIGZldyBsaW5lcyBkb3duXG4gICAgICAgICAgYmFja3ByZXNzdXJlOiAhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKSxcbiAgICAgICAgICBjaHVua0RhdGE6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtVHJBcmcucmVzcG9uc2UgPSB7XG4gICAgICAgICAgc3RyZWFtSWQ6IHRoaXMuc3RyZWFtSWQsXG4gICAgICAgICAgY3ljbGVJZDogc3RyZWFtVHJBcmcucmVxdWVzdC5jeWNsZUlkLFxuICAgICAgICAgIGN5Y2xlOiAncmVzcG9uc2UnLFxuICAgICAgICAgIG1haW5QdXJwb3NlOiAnZmVlZGJhY2snLFxuICAgICAgICAgIG5leHQ6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAsXG4gICAgICAgICAgYmFja3ByZXNzdXJlOiAhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHN0cmVhbVRyQXJnLnJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1UckFyZztcbiAgfVxuXG4gIC8vIGxpZmVjeWNsZSBtZXRob2RzXG4gIC8qKlxuICAgKiBjbG9zZXMgdGhlIHZpcnR1YWwgc3RyZWFtXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xlYW51cCgpIHtcbiAgICBpZiAodGhpcy50eXBlZHJvdXRlcikge1xuICAgICAgdGhpcy50eXBlZHJvdXRlci5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMucmVtb3ZlKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBhIGtlZXBBbGl2ZSBsb29wIHRoYXQgd29ya3MgYWNyb3NzIHRlY2hub2xvZ2llc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzdGFydEtlZXBBbGl2ZUxvb3AoKSB7XG4gICAgLy8gaW5pdGlhbGx5IHdhaXQgZm9yIGEgc2Vjb25kXG4gICAgaWYgKHRoaXMuc2lkZSA9PT0gJ3Jlc3BvbmRpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigwKTtcbiAgICBjb25zb2xlLmxvZyhgc3RhcnRpbmcga2VlcGFsaXZlIGxvb3Agb24gc2lkZSAke3RoaXMuc2lkZX1gKTtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAga2VlcEFsaXZlTG9vcDogd2hpbGUgKHRoaXMua2VlcEFsaXZlKSB7XG4gICAgICBhd2FpdCB0aGlzLnRyaWdnZXJLZWVwQWxpdmUoKTtcbiAgICAgIGF3YWl0IHBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigxMDAwKTtcbiAgICB9XG4gICAgYXdhaXQgcGx1Z2lucy5zbWFydGRlbGF5LmRlbGF5Rm9yKDEwMDApO1xuICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpO1xuICAgIGNvbnNvbGUubG9nKGBjbGVhbmVkIHVwIGZvciBzdHJlYW0gJHt0aGlzLnN0cmVhbUlkfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0cmlnZ2VyS2VlcEFsaXZlKCkge1xuICAgIGlmICh0aGlzLnNpZGUgPT09ICdyZXF1ZXN0aW5nJykge1xuICAgICAgY29uc29sZS5sb2coYGtlZXBhbGl2ZSBzZW50LmApO1xuICAgICAgY29uc3Qgc3RyZWFtVHIgPSBhd2FpdCB0aGlzLnNlbmRNZXRob2Qoe1xuICAgICAgICBtZXRob2Q6ICcjI1ZpcnR1YWxTdHJlYW0jIycsXG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCxcbiAgICAgICAgICBjeWNsZUlkOiBwbHVnaW5zLmlzb3VuaXF1ZS51bmkoKSxcbiAgICAgICAgICBjeWNsZTogJ3JlcXVlc3QnLFxuICAgICAgICAgIG1haW5QdXJwb3NlOiAna2VlcEFsaXZlJyxcbiAgICAgICAgICBrZWVwQWxpdmU6IHRoaXMua2VlcEFsaXZlLFxuICAgICAgICB9LFxuICAgICAgICByZXNwb25zZTogbnVsbCxcbiAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBsZXRzIGhhbmRsZSBrZWVwQWxpdmVcbiAgICAgIGlmIChzdHJlYW1UciAmJiBzdHJlYW1Uci5yZXNwb25zZSAmJiBzdHJlYW1Uci5yZXNwb25zZS5rZWVwQWxpdmUgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RLZWVwQWxpdmVFdmVudCA9IERhdGUubm93KCk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UgJiYgc3RyZWFtVHIucmVzcG9uc2UubmV4dCkge1xuICAgICAgICB0aGlzLndvcmtPblF1ZXVlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChEYXRlLm5vdygpIC0gdGhpcy5sYXN0S2VlcEFsaXZlRXZlbnQgPiAxMDAwMCkge1xuICAgICAgY29uc29sZS5sb2coYGNsb3Npbmcgc3RyZWFtIGZvciAke3RoaXMuc3RyZWFtSWR9YCk7XG4gICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gRGF0YSBzZW5kaW5nIGFuZCByZWNlaXZpbmdcbiAgcHVibGljIGFzeW5jIHNlbmREYXRhKGRhdGFBcmc6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkucHVzaChkYXRhQXJnKTtcbiAgICB0aGlzLndvcmtPblF1ZXVlKCk7XG4gICAgYXdhaXQgdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LndhaXRGb3JTcGFjZSgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZldGNoRGF0YSgpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5Lmhhc1NwYWNlKSB7XG4gICAgICAvLyBkbyBzb21ldGhpbmcgbWF5YmU/XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS53YWl0Rm9ySXRlbXMoKTtcbiAgICBjb25zdCBkYXRhUGFja2FnZSA9IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpO1xuICAgIHJldHVybiBkYXRhUGFja2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWFkcyBmcm9tIGEgUmVhZGFibGUgYW5kIHNlbmRzIGl0IHRvIHRoZSBvdGhlciBzaWRlXG4gICAqIEBwYXJhbSByZWFkYWJsZVN0cmVhbUFyZ1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlYWRGcm9tV2Vic3RyZWFtKHJlYWRhYmxlU3RyZWFtQXJnOiBSZWFkYWJsZVN0cmVhbTxUPiwgY2xvc2VBZnRlclJlYWRpbmcgPSB0cnVlKSB7XG4gICAgY29uc3QgcmVhZGVyID0gcmVhZGFibGVTdHJlYW1BcmcuZ2V0UmVhZGVyKCk7XG4gICAgbGV0IHN0cmVhbUlzRG9uZSA9IGZhbHNlO1xuICAgIHdoaWxlKCFzdHJlYW1Jc0RvbmUpIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBpZih2YWx1ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnNlbmREYXRhKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHN0cmVhbUlzRG9uZSA9IGRvbmU7XG4gICAgfVxuICAgIGlmIChjbG9zZUFmdGVyUmVhZGluZykge1xuICAgICAgYXdhaXQgdGhpcy5jbG9zZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgd3JpdGVUb1dlYnN0cmVhbSh3cml0YWJsZVN0cmVhbUFyZzogV3JpdGFibGVTdHJlYW08VD4pIHtcbiAgICBjb25zdCB3cml0ZXIgPSB3cml0YWJsZVN0cmVhbUFyZy5nZXRXcml0ZXIoKTtcbiAgICB3aGlsZSh0aGlzLmtlZXBBbGl2ZSB8fCB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tIYXNJdGVtcygpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgICBpZiAodmFsdWUgPT09IGNsb3NpbmdCaXQpIHtcbiAgICAgICAgd3JpdGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgIGF3YWl0IHdyaXRhYmxlU3RyZWFtQXJnLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgYXdhaXQgd3JpdGVyLndyaXRlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2xvc2VzIHRoZSBzdHJlYW1cbiAgICogaWYgc2VuZENsb3NpbmdCaXRBcmcgaXMgdHJ1ZSwgdGhlIHN0cmVhbSB3aWxsIHNlbmQgYSBjbG9zaW5nIGJpdFxuICAgKiBAcGFyYW0gc2VuZENsb3NpbmdCaXRBcmcgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xvc2Uoc2VuZENsb3NpbmdCaXRBcmcgPSBmYWxzZSkge1xuICAgIGlmIChzZW5kQ2xvc2luZ0JpdEFyZykge1xuICAgICAgdGhpcy5zZW5kRGF0YShjbG9zaW5nQml0KTtcbiAgICB9XG4gICAgdGhpcy5rZWVwQWxpdmUgPSBmYWxzZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFR5cGVkUm91dGVyIH0gZnJvbSAnLi9jbGFzc2VzLnR5cGVkcm91dGVyLmpzJztcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9wbHVnaW5zLmpzJztcblxuZXhwb3J0IHR5cGUgSVBvc3RNZXRob2QgPSAoXG4gIHR5cGVkUmVxdWVzdFBvc3RPYmplY3Q6IHBsdWdpbnMudHlwZWRSZXF1ZXN0SW50ZXJmYWNlcy5JVHlwZWRSZXF1ZXN0XG4pID0+IFByb21pc2U8cGx1Z2lucy50eXBlZFJlcXVlc3RJbnRlcmZhY2VzLklUeXBlZFJlcXVlc3Q+O1xuXG4vKipcbiAqIHRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gYSBwb3N0IHVybCBzdXBwbGllZCBpbiBgbmV3IFR5cGVkcmVxdWVzdChuZXcgVHlwZWRUYXJnZXQoLi4uKSwgJ3NvbWVNZXRob2ROYW1lJylgXG4gKiBlbmFibGVzIHRoZSB1c2Ugb2YgY3VzdG9tIHBvc3QgZnVuY3Rpb25zXG4gKiB1c2VkIGZvciB0aGluZ3MgbGlrZSBicm9hZGNhc3QgY2hhbm5lbHNcbiAqIGUuZy4gQGRlc2lnbmVzdGF0ZS9kZWVzLWNvbW1zXG4gKiB0aGUgbWFpbiBkaWZmZXJlbmNlIGhlcmUgaXMsIHRoYXQgdGhlIHJlc3BvbnNlIGNvbWVzIGJhY2sgYXN5bmMgYW5kIGlzIHJvdXRlZCBieSBpbnRlcmVzdCB0aHJvdWdoIHR5cGVkcm91dGVyXG4gKi9cbmV4cG9ydCB0eXBlIElQb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyID0gKFxuICB0eXBlZFJlcXVlc3RQb3N0T2JqZWN0OiBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdFxuKSA9PiBQcm9taXNlPHZvaWQ+IHwgUHJvbWlzZTxwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVR5cGVkVGFyZ2V0Q29uc3RydWN0b3JPcHRpb25zIHtcbiAgdXJsPzogc3RyaW5nO1xuICBwb3N0TWV0aG9kPzogSVBvc3RNZXRob2Q7XG4gIC8qKlxuICAgKiBhIHBvc3QgbWV0aG9kIHRoYXQgZG9lcyBub3QgcmV0dXJuIHRoZSBhbnN3ZXJcbiAgICovXG4gIHBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXI/OiBJUG9zdE1ldGhvZFdpdGhUeXBlZFJvdXRlcjtcbiAgLyoqXG4gICAqIHRoaXMgdHlwZWRyb3V0ZXIgYWxsb3dzIHVzIHRvIGhhdmUgZWFzeSBhc3luYyByZXF1ZXN0IHJlc3BvbnNlIGN5Y2xlc1xuICAgKi9cbiAgdHlwZWRSb3V0ZXJSZWY/OiBUeXBlZFJvdXRlcjtcbn1cblxuLyoqXG4gKiBhIHR5cGVkIHRhcmdldCBkZWZpbmVzIGEgdGFyZ2V0IGZvciByZXF1ZXN0c1xuICovXG5leHBvcnQgY2xhc3MgVHlwZWRUYXJnZXQge1xuICB1cmw6IHN0cmluZztcbiAgdHlwZTogJ3Jlc3QnIHwgJ3NvY2tldCc7XG4gIG9wdGlvbnM6IElUeXBlZFRhcmdldENvbnN0cnVjdG9yT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnOiBJVHlwZWRUYXJnZXRDb25zdHJ1Y3Rvck9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9uc0FyZy5wb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyICYmICFvcHRpb25zQXJnLnR5cGVkUm91dGVyUmVmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3lvdSBoYXZlIHRvIHNwZWNpZnkgYSB0eXBlZHJvdXRlciB3aGVuIHVzaW5nIHBvc3RtZXRob2Qgd2l0aCB0eXBlZHJvdXRlcicpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnO1xuICB9XG5cbiAgLyoqXG4gICAqIHdldGhlciBjYWxscyB0byB0aGlzIHRhcmdldCBhcmUgYm91bmQgdG8gdGhlIHJlcXVlc3QvcmVzcG9uc2UgY3ljbGVcbiAgICogaWYgZmFsc2UsIGFsd2F5cyBkZWxpdmVycyByZXNwb25zZSBhcyByZXN1bHQgb2YgYSBjYWxsXG4gICAqIGlmIHRydWUsIGRlbGl2ZXJzIHJlc3BvbnNlIGluIGEgc2VwYXJhdGUgY2FsbFxuICAgKiBjYW4gb25seSBiZSBhc3luYyB3aGVuIHR5cGUgaXMgJ3NvY2tldCdcbiAgICovXG4gIHB1YmxpYyBpc0FzeW5jOiBib29sZWFuO1xuXG4gIHB1YmxpYyBhc3luYyBwb3N0PFQgZXh0ZW5kcyBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdD4oXG4gICAgcGF5bG9hZEFyZzogVFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgcmVzcG9uc2VJbnRlcmVzdDogcGx1Z2lucy5saWsuSW50ZXJlc3Q8XG4gICAgICBzdHJpbmcsXG4gICAgICBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdFxuICAgID47XG4gICAgLy8gaGF2aW5nIGEgdHlwZWRyb3V0ZXIgYWxsb3dzIHVzIHRvIHdvcmsgd2l0aCBhc3luYyByZXF1ZXN0IHJlc3BvbnNlIGN5Y2xlcy5cbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGVkUm91dGVyUmVmKSB7XG4gICAgICByZXNwb25zZUludGVyZXN0ID0gYXdhaXQgdGhpcy5vcHRpb25zLnR5cGVkUm91dGVyUmVmLmZpcmVFdmVudEludGVyZXN0TWFwLmFkZEludGVyZXN0KFxuICAgICAgICBwYXlsb2FkQXJnLmNvcnJlbGF0aW9uLmlkLFxuICAgICAgICBwYXlsb2FkQXJnXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBwb3N0TWV0aG9kID0gdGhpcy5vcHRpb25zLnBvc3RNZXRob2QgfHwgdGhpcy5vcHRpb25zLnBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXI7XG4gICAgY29uc3QgcG9zdE1ldGhvZFJldHVyblZhbHVlID0gYXdhaXQgcG9zdE1ldGhvZChwYXlsb2FkQXJnKTtcbiAgICBsZXQgcmVzcG9uc2VCb2R5OiBUO1xuICAgIGlmIChyZXNwb25zZUludGVyZXN0KSB7XG4gICAgICByZXNwb25zZUJvZHkgPSAoYXdhaXQgcmVzcG9uc2VJbnRlcmVzdC5pbnRlcmVzdEZ1bGxmaWxsZWQpIGFzIFQ7XG4gICAgfSBlbHNlIGlmIChwb3N0TWV0aG9kUmV0dXJuVmFsdWUpIHtcbiAgICAgIHJlc3BvbnNlQm9keSA9IHBvc3RNZXRob2RSZXR1cm5WYWx1ZSBhcyBUO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZUJvZHkgPSBwYXlsb2FkQXJnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2VCb2R5O1xuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3BsdWdpbnMuanMnO1xuaW1wb3J0IHsgVmlydHVhbFN0cmVhbSB9IGZyb20gJy4vY2xhc3Nlcy52aXJ0dWFsc3RyZWFtLmpzJztcbmltcG9ydCB7IFR5cGVkUmVzcG9uc2VFcnJvciB9IGZyb20gJy4vY2xhc3Nlcy50eXBlZHJlc3BvbnNlZXJyb3IuanMnO1xuaW1wb3J0IHsgVHlwZWRSb3V0ZXIsIHR5cGUgSVR5cGVkUmVxdWVzdExvZ0VudHJ5IH0gZnJvbSAnLi9jbGFzc2VzLnR5cGVkcm91dGVyLmpzJztcbmltcG9ydCB7IFR5cGVkVGFyZ2V0IH0gZnJvbSAnLi9jbGFzc2VzLnR5cGVkdGFyZ2V0LmpzJztcblxuY29uc3Qgd2VicmVxdWVzdEluc3RhbmNlID0gbmV3IHBsdWdpbnMud2VicmVxdWVzdC5XZWJSZXF1ZXN0KCk7XG5cbi8qKlxuICogSGVscGVyIHRvIGNhbGwgZ2xvYmFsIGhvb2tzIGZyb20gVHlwZWRSZXF1ZXN0XG4gKi9cbmZ1bmN0aW9uIGNhbGxHbG9iYWxIb29rKFxuICBob29rTmFtZToga2V5b2YgdHlwZW9mIFR5cGVkUm91dGVyLmdsb2JhbEhvb2tzLFxuICBlbnRyeTogSVR5cGVkUmVxdWVzdExvZ0VudHJ5XG4pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBUeXBlZFJvdXRlci5nbG9iYWxIb29rc1tob29rTmFtZV0/LihlbnRyeSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoYFR5cGVkUmVxdWVzdCBob29rIGVycm9yICgke2hvb2tOYW1lfSk6YCwgZXJyKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwZWRSZXF1ZXN0PFQgZXh0ZW5kcyBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdD4ge1xuICAvKipcbiAgICogaW4gY2FzZSB3ZSBwb3N0IGFnYWluc3QgYSB1cmwgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyB1cmxFbmRQb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogaW4gY2FzZSB3ZSBwb3N0IGFnYWluc3QgYSBUeXBlZFRhcmdldFxuICAgKi9cbiAgdHlwZWRUYXJnZXQ6IFR5cGVkVGFyZ2V0O1xuXG4gIHB1YmxpYyBtZXRob2Q6IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBob29rcyB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIHRoaXMgcmVxdWVzdC5cbiAgICogVXNlIHRoaXMgZm9yIGludGVybmFsL2xvZ2dpbmcgcmVxdWVzdHMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cbiAgICovXG4gIHB1YmxpYyBza2lwSG9va3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQHBhcmFtIHBvc3RFbmRQb2ludEFyZ1xuICAgKiBAcGFyYW0gbWV0aG9kQXJnXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwb3N0VGFyZ2V0OiBzdHJpbmcgfCBUeXBlZFRhcmdldCwgbWV0aG9kQXJnOiBUWydtZXRob2QnXSkge1xuICAgIGlmICh0eXBlb2YgcG9zdFRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMudXJsRW5kUG9pbnQgPSBwb3N0VGFyZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnR5cGVkVGFyZ2V0ID0gcG9zdFRhcmdldDtcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RBcmc7XG4gIH1cblxuICAvKipcbiAgICogZmlyZXMgdGhlIHJlcXVlc3RcbiAgICovXG4gIHB1YmxpYyBhc3luYyBmaXJlKGZpcmVBcmc6IFRbJ3JlcXVlc3QnXSwgdXNlQ2FjaGVBcmc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8VFsncmVzcG9uc2UnXT4ge1xuICAgIGNvbnN0IHJlcXVlc3RTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgbGV0IHBheWxvYWRTZW5kaW5nOiBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdCA9IHtcbiAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICByZXF1ZXN0OiBmaXJlQXJnLFxuICAgICAgcmVzcG9uc2U6IG51bGwsXG4gICAgICBjb3JyZWxhdGlvbjoge1xuICAgICAgICBpZDogcGx1Z2lucy5pc291bmlxdWUudW5pKCksXG4gICAgICAgIHBoYXNlOiAncmVxdWVzdCcsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBsZXRzIHByZXByb2Nlc3MgdGhlIHBheWxvYWRcbiAgICBwYXlsb2FkU2VuZGluZyA9IFZpcnR1YWxTdHJlYW0uZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsocGF5bG9hZFNlbmRpbmcsIHtcbiAgICAgIHNlbmRNZXRob2Q6IChwYXlsb2FkQXJnOiBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVN0cmVhbVJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFRyT2JqZWN0KHBheWxvYWRBcmcpIGFzIFByb21pc2U8cGx1Z2lucy50eXBlZFJlcXVlc3RJbnRlcmZhY2VzLklTdHJlYW1SZXF1ZXN0PjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEhvb2s6IG91dGdvaW5nIHJlcXVlc3QgKHNraXAgaWYgdGhpcyBpcyBhbiBpbnRlcm5hbCByZXF1ZXN0KVxuICAgIGlmICghdGhpcy5za2lwSG9va3MpIHtcbiAgICAgIGNhbGxHbG9iYWxIb29rKCdvbk91dGdvaW5nUmVxdWVzdCcsIHtcbiAgICAgICAgY29ycmVsYXRpb25JZDogcGF5bG9hZFNlbmRpbmcuY29ycmVsYXRpb24uaWQsXG4gICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgIGRpcmVjdGlvbjogJ291dGdvaW5nJyxcbiAgICAgICAgcGhhc2U6ICdyZXF1ZXN0JyxcbiAgICAgICAgdGltZXN0YW1wOiByZXF1ZXN0U3RhcnRUaW1lLFxuICAgICAgICBwYXlsb2FkOiBmaXJlQXJnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHBheWxvYWRSZWNlaXZpbmc6IHBsdWdpbnMudHlwZWRSZXF1ZXN0SW50ZXJmYWNlcy5JVHlwZWRSZXF1ZXN0O1xuICAgIHBheWxvYWRSZWNlaXZpbmcgPSBhd2FpdCB0aGlzLnBvc3RUck9iamVjdChwYXlsb2FkU2VuZGluZywgdXNlQ2FjaGVBcmcpO1xuXG4gICAgLy8gbGV0cyBwcmVwcm9jZXNzIHRoZSByZXNwb25zZVxuICAgIHBheWxvYWRSZWNlaXZpbmcgPSBWaXJ0dWFsU3RyZWFtLmRlY29kZVBheWxvYWRGcm9tTmV0d29yayhwYXlsb2FkUmVjZWl2aW5nLCB7XG4gICAgICBzZW5kTWV0aG9kOiAocGF5bG9hZEFyZzogcGx1Z2lucy50eXBlZFJlcXVlc3RJbnRlcmZhY2VzLklTdHJlYW1SZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RUck9iamVjdChwYXlsb2FkQXJnKSBhcyBQcm9taXNlPHBsdWdpbnMudHlwZWRSZXF1ZXN0SW50ZXJmYWNlcy5JU3RyZWFtUmVxdWVzdD47XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBIb29rOiBpbmNvbWluZyByZXNwb25zZSAoc2tpcCBpZiB0aGlzIGlzIGFuIGludGVybmFsIHJlcXVlc3QpXG4gICAgaWYgKCF0aGlzLnNraXBIb29rcykge1xuICAgICAgY2FsbEdsb2JhbEhvb2soJ29uSW5jb21pbmdSZXNwb25zZScsIHtcbiAgICAgICAgY29ycmVsYXRpb25JZDogcGF5bG9hZFNlbmRpbmcuY29ycmVsYXRpb24uaWQsXG4gICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgIGRpcmVjdGlvbjogJ2luY29taW5nJyxcbiAgICAgICAgcGhhc2U6ICdyZXNwb25zZScsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHJlcXVlc3RTdGFydFRpbWUsXG4gICAgICAgIHBheWxvYWQ6IHBheWxvYWRSZWNlaXZpbmc/LnJlc3BvbnNlLFxuICAgICAgICBlcnJvcjogcGF5bG9hZFJlY2VpdmluZz8uZXJyb3I/LnRleHQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF5bG9hZFJlY2VpdmluZy5yZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcG9zdFRyT2JqZWN0KHBheWxvYWRTZW5kaW5nQXJnOiBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdCwgdXNlQ2FjaGVBcmc6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGxldCBwYXlsb2FkUmVjZWl2aW5nOiBwbHVnaW5zLnR5cGVkUmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdDtcbiAgICBpZiAodGhpcy51cmxFbmRQb2ludCkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB3ZWJyZXF1ZXN0SW5zdGFuY2UucG9zdEpzb24oXG4gICAgICAgIHRoaXMudXJsRW5kUG9pbnQsXG4gICAgICAgIHBheWxvYWRTZW5kaW5nQXJnLFxuICAgICAgICB1c2VDYWNoZUFyZ1xuICAgICAgKTtcbiAgICAgIHBheWxvYWRSZWNlaXZpbmcgPSByZXNwb25zZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF5bG9hZFJlY2VpdmluZyA9IGF3YWl0IHRoaXMudHlwZWRUYXJnZXQucG9zdChwYXlsb2FkU2VuZGluZ0FyZyk7XG4gICAgfVxuICAgIGlmIChwYXlsb2FkUmVjZWl2aW5nLmVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgbWV0aG9kOiA+PiR7dGhpcy5tZXRob2R9PDwgZ290IGFuIEVSUk9SOiBcIiR7cGF5bG9hZFJlY2VpdmluZy5lcnJvci50ZXh0fVwiIHdpdGggZGF0YSAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHBheWxvYWRSZWNlaXZpbmcuZXJyb3IuZGF0YSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDJcbiAgICAgICAgKX1gXG4gICAgICApO1xuICAgICAgaWYgKCFwYXlsb2FkUmVjZWl2aW5nLnJldHJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlZFJlc3BvbnNlRXJyb3IocGF5bG9hZFJlY2VpdmluZy5lcnJvci50ZXh0LCBwYXlsb2FkUmVjZWl2aW5nLmVycm9yLmRhdGEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwYXlsb2FkUmVjZWl2aW5nLnJldHJ5KSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYHNlcnZlciByZXF1ZXN0ZWQgcmV0cnkgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uOiAke3BheWxvYWRSZWNlaXZpbmcucmV0cnkucmVhc29ufWBcbiAgICAgICk7XG4gICAgICBhd2FpdCBwbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3IocGF5bG9hZFJlY2VpdmluZy5yZXRyeS53YWl0Rm9yTXMpO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1yZXR1cm4tYXdhaXRcbiAgICAgIHBheWxvYWRSZWNlaXZpbmcgPSAgYXdhaXQgdGhpcy5wb3N0VHJPYmplY3QocGF5bG9hZFNlbmRpbmdBcmcsIHVzZUNhY2hlQXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIHBheWxvYWRSZWNlaXZpbmc7XG4gIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tICcuL2NsYXNzZXMudHlwZWRyZXF1ZXN0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy50eXBlZGhhbmRsZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzLnR5cGVkcm91dGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy50eXBlZHJlc3BvbnNlZXJyb3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzLnR5cGVkdGFyZ2V0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy52aXJ0dWFsc3RyZWFtLmpzJztcblxuLy8gUmUtZXhwb3J0IGhvb2sgaW50ZXJmYWNlcyBmcm9tIHR5cGVkcm91dGVyXG5leHBvcnQgdHlwZSB7IElUeXBlZFJlcXVlc3RMb2dFbnRyeSwgSVR5cGVkUm91dGVySG9va3MgfSBmcm9tICcuL2NsYXNzZXMudHlwZWRyb3V0ZXIuanMnOyIsICIvKipcbiAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgcHJvbWlzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydCB2YXIgUFJPTUlTRV9SRVNPTFZFRF9GQUxTRSA9IFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5leHBvcnQgdmFyIFBST01JU0VfUkVTT0xWRURfVFJVRSA9IFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbmV4cG9ydCB2YXIgUFJPTUlTRV9SRVNPTFZFRF9WT0lEID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5leHBvcnQgZnVuY3Rpb24gc2xlZXAodGltZSwgcmVzb2x2ZVdpdGgpIHtcbiAgaWYgKCF0aW1lKSB0aW1lID0gMDtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVzKHJlc29sdmVXaXRoKTtcbiAgICB9LCB0aW1lKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tSW50KG1pbiwgbWF4KSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS84MDg0MjQ4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21Ub2tlbigpIHtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcbn1cbnZhciBsYXN0TXMgPSAwO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgdW5peCB0aW1lIGluIG1pY3JvLXNlY29uZHMsXG4gKiBXQVJOSU5HOiBUaGlzIGlzIGEgcHNldWRvLWZ1bmN0aW9uXG4gKiBQZXJmb3JtYW5jZS5ub3cgaXMgbm90IHJlbGlhYmxlIGluIHdlYndvcmtlcnMsIHNvIHdlIGp1c3QgbWFrZSBzdXJlIHRvIG5ldmVyIHJldHVybiB0aGUgc2FtZSB0aW1lLlxuICogVGhpcyBpcyBlbm91Z2ggaW4gYnJvd3NlcnMsIGFuZCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlIHVzZWQgaW4gbm9kZWpzLlxuICogVGhlIG1haW4gcmVhc29uIGZvciB0aGlzIGhhY2sgaXMgdG8gZW5zdXJlIHRoYXQgQnJvYWRjYXN0Q2hhbm5lbCBiZWhhdmVzIGVxdWFsIHRvIHByb2R1Y3Rpb24gd2hlbiBpdCBpcyB1c2VkIGluIGZhc3QtcnVubmluZyB1bml0IHRlc3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWljcm9TZWNvbmRzKCkge1xuICB2YXIgcmV0ID0gRGF0ZS5ub3coKSAqIDEwMDA7IC8vIG1pbGxpc2Vjb25kcyB0byBtaWNyb3NlY29uZHNcbiAgaWYgKHJldCA8PSBsYXN0TXMpIHtcbiAgICByZXQgPSBsYXN0TXMgKyAxO1xuICB9XG4gIGxhc3RNcyA9IHJldDtcbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBXZWJMb2NrIEFQSSBpcyBzdXBwb3J0ZWQuXG4gKiBAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViX0xvY2tzX0FQSVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNXZWJMb2NrQVBJKCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvci5sb2NrcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59IiwgImltcG9ydCB7IG1pY3JvU2Vjb25kcyBhcyBtaWNybywgUFJPTUlTRV9SRVNPTFZFRF9WT0lEIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG5leHBvcnQgdmFyIG1pY3JvU2Vjb25kcyA9IG1pY3JvO1xuZXhwb3J0IHZhciB0eXBlID0gJ25hdGl2ZSc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKGNoYW5uZWxOYW1lKSB7XG4gIHZhciBzdGF0ZSA9IHtcbiAgICB0aW1lOiBtaWNybygpLFxuICAgIG1lc3NhZ2VzQ2FsbGJhY2s6IG51bGwsXG4gICAgYmM6IG5ldyBCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKSxcbiAgICBzdWJGbnM6IFtdIC8vIHN1YnNjcmliZXJGdW5jdGlvbnNcbiAgfTtcbiAgc3RhdGUuYmMub25tZXNzYWdlID0gZnVuY3Rpb24gKG1zZ0V2ZW50KSB7XG4gICAgaWYgKHN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2spIHtcbiAgICAgIHN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2sobXNnRXZlbnQuZGF0YSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gc3RhdGU7XG59XG5leHBvcnQgZnVuY3Rpb24gY2xvc2UoY2hhbm5lbFN0YXRlKSB7XG4gIGNoYW5uZWxTdGF0ZS5iYy5jbG9zZSgpO1xuICBjaGFubmVsU3RhdGUuc3ViRm5zID0gW107XG59XG5leHBvcnQgZnVuY3Rpb24gcG9zdE1lc3NhZ2UoY2hhbm5lbFN0YXRlLCBtZXNzYWdlSnNvbikge1xuICB0cnkge1xuICAgIGNoYW5uZWxTdGF0ZS5iYy5wb3N0TWVzc2FnZShtZXNzYWdlSnNvbiwgZmFsc2UpO1xuICAgIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gb25NZXNzYWdlKGNoYW5uZWxTdGF0ZSwgZm4pIHtcbiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2sgPSBmbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYW5CZVVzZWQoKSB7XG4gIC8vIERlbm8gcnVudGltZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzLkRlbm8gJiYgZ2xvYmFsVGhpcy5EZW5vLmFyZ3MpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIEJyb3dzZXIgcnVudGltZVxuICBpZiAoKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgJiYgdHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoQnJvYWRjYXN0Q2hhbm5lbC5fcHVia2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jyb2FkY2FzdENoYW5uZWw6IERvIG5vdCBvdmVyd3JpdGUgd2luZG93LkJyb2FkY2FzdENoYW5uZWwgd2l0aCB0aGlzIG1vZHVsZSwgdGhpcyBpcyBub3QgYSBwb2x5ZmlsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhdmVyYWdlUmVzcG9uc2VUaW1lKCkge1xuICByZXR1cm4gMTUwO1xufVxuZXhwb3J0IHZhciBOYXRpdmVNZXRob2QgPSB7XG4gIGNyZWF0ZTogY3JlYXRlLFxuICBjbG9zZTogY2xvc2UsXG4gIG9uTWVzc2FnZTogb25NZXNzYWdlLFxuICBwb3N0TWVzc2FnZTogcG9zdE1lc3NhZ2UsXG4gIGNhbkJlVXNlZDogY2FuQmVVc2VkLFxuICB0eXBlOiB0eXBlLFxuICBhdmVyYWdlUmVzcG9uc2VUaW1lOiBhdmVyYWdlUmVzcG9uc2VUaW1lLFxuICBtaWNyb1NlY29uZHM6IG1pY3JvU2Vjb25kc1xufTsiLCAiXG4vKipcbiAqIHRoaXMgaXMgYSBzZXQgd2hpY2ggYXV0b21hdGljYWxseSBmb3JnZXRzXG4gKiBhIGdpdmVuIGVudHJ5IHdoZW4gYSBuZXcgZW50cnkgaXMgc2V0IGFuZCB0aGUgdHRsXG4gKiBvZiB0aGUgb2xkIG9uZSBpcyBvdmVyXG4gKi9cbmV4cG9ydCBjbGFzcyBPYmxpdmlvdXNTZXQ8VCA9IGFueT4ge1xuICAgIHB1YmxpYyByZWFkb25seSBtYXAgPSBuZXcgTWFwKCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGluZyBjYWxscyB0byBzZXRUaW1lb3V0KCkgaXMgZXhwZW5zaXZlLFxuICAgICAqIHNvIHdlIG9ubHkgZG8gdGhhdCBpZiB0aGVyZSBpcyBub3QgdGltZW91dCBhbHJlYWR5IG9wZW4uXG4gICAgICovXG4gICAgcHVibGljIF90bzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgdHRsOiBudW1iZXJcbiAgICApIHsgfVxuXG4gICAgaGFzKHZhbHVlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlVGltZSA9IHRoaXMubWFwLmdldCh2YWx1ZSk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWVUaW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlVGltZSA8IG5vdygpIC0gdGhpcy50dGwpIHtcbiAgICAgICAgICAgIHRoaXMubWFwLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhZGQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tYXAuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5tYXAuc2V0KHZhbHVlLCBub3coKSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZW4gYSBuZXcgdmFsdWUgaXMgYWRkZWQsXG4gICAgICAgICAqIHN0YXJ0IHRoZSBjbGVhbnVwIGF0IHRoZSBuZXh0IHRpY2tcbiAgICAgICAgICogdG8gbm90IGJsb2NrIHRoZSBjcHUgZm9yIG1vcmUgaW1wb3J0YW50IHN0dWZmXG4gICAgICAgICAqIHRoYXQgbWlnaHQgaGFwcGVuLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKCF0aGlzLl90bykge1xuICAgICAgICAgICAgdGhpcy5fdG8gPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG8gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZW1vdmVUb29PbGRWYWx1ZXModGhpcyk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLm1hcC5jbGVhcigpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGVudHJpZXMgZnJvbSB0aGUgc2V0XG4gKiB3aGVyZSB0aGUgVFRMIGhhcyBleHBpcmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVUb29PbGRWYWx1ZXMoXG4gICAgb2JsaXZpb3VzU2V0OiBPYmxpdmlvdXNTZXRcbikge1xuICAgIGNvbnN0IG9sZGVyVGhlbiA9IG5vdygpIC0gb2JsaXZpb3VzU2V0LnR0bDtcbiAgICBjb25zdCBpdGVyYXRvciA9IG9ibGl2aW91c1NldC5tYXBbU3ltYm9sLml0ZXJhdG9yXSgpO1xuXG4gICAgLyoqXG4gICAgICogQmVjYXVzZSB3ZSBjYW4gYXNzdW1lIHRoZSBuZXcgdmFsdWVzIGFyZSBhZGRlZCBhdCB0aGUgYm90dG9tLFxuICAgICAqIHdlIHN0YXJ0IGZyb20gdGhlIHRvcCBhbmQgc3RvcCBhcyBzb29uIGFzIHdlIHJlYWNoIGEgbm9uLXRvby1vbGQgdmFsdWUuXG4gICAgICovXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKS52YWx1ZTtcblxuICAgICAgICBpZiAoIW5leHQpIHtcbiAgICAgICAgICAgIGJyZWFrOyAvLyBubyBtb3JlIGVsZW1lbnRzXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSBuZXh0WzBdO1xuICAgICAgICBjb25zdCB0aW1lID0gbmV4dFsxXTtcbiAgICAgICAgaWYgKHRpbWUgPCBvbGRlclRoZW4pIHtcbiAgICAgICAgICAgIG9ibGl2aW91c1NldC5tYXAuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIHJlYWNoZWQgYSB2YWx1ZSB0aGF0IGlzIG5vdCBvbGQgZW5vdWdoXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xufVxuXG5cbiIsICJleHBvcnQgZnVuY3Rpb24gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMoKSB7XG4gIHZhciBvcmlnaW5hbE9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxPcHRpb25zKSk7XG5cbiAgLy8gbWFpblxuICBpZiAodHlwZW9mIG9wdGlvbnMud2ViV29ya2VyU3VwcG9ydCA9PT0gJ3VuZGVmaW5lZCcpIG9wdGlvbnMud2ViV29ya2VyU3VwcG9ydCA9IHRydWU7XG5cbiAgLy8gaW5kZXhlZC1kYlxuICBpZiAoIW9wdGlvbnMuaWRiKSBvcHRpb25zLmlkYiA9IHt9O1xuICAvLyAgYWZ0ZXIgdGhpcyB0aW1lIHRoZSBtZXNzYWdlcyBnZXQgZGVsZXRlZFxuICBpZiAoIW9wdGlvbnMuaWRiLnR0bCkgb3B0aW9ucy5pZGIudHRsID0gMTAwMCAqIDQ1O1xuICBpZiAoIW9wdGlvbnMuaWRiLmZhbGxiYWNrSW50ZXJ2YWwpIG9wdGlvbnMuaWRiLmZhbGxiYWNrSW50ZXJ2YWwgPSAxNTA7XG4gIC8vICBoYW5kbGVzIGFicnVwdCBkYiBvbmNsb3NlIGV2ZW50cy5cbiAgaWYgKG9yaWdpbmFsT3B0aW9ucy5pZGIgJiYgdHlwZW9mIG9yaWdpbmFsT3B0aW9ucy5pZGIub25jbG9zZSA9PT0gJ2Z1bmN0aW9uJykgb3B0aW9ucy5pZGIub25jbG9zZSA9IG9yaWdpbmFsT3B0aW9ucy5pZGIub25jbG9zZTtcblxuICAvLyBsb2NhbHN0b3JhZ2VcbiAgaWYgKCFvcHRpb25zLmxvY2Fsc3RvcmFnZSkgb3B0aW9ucy5sb2NhbHN0b3JhZ2UgPSB7fTtcbiAgaWYgKCFvcHRpb25zLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0KSBvcHRpb25zLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0ID0gMTAwMCAqIDYwO1xuXG4gIC8vIGN1c3RvbSBtZXRob2RzXG4gIGlmIChvcmlnaW5hbE9wdGlvbnMubWV0aG9kcykgb3B0aW9ucy5tZXRob2RzID0gb3JpZ2luYWxPcHRpb25zLm1ldGhvZHM7XG5cbiAgLy8gbm9kZVxuICBpZiAoIW9wdGlvbnMubm9kZSkgb3B0aW9ucy5ub2RlID0ge307XG4gIGlmICghb3B0aW9ucy5ub2RlLnR0bCkgb3B0aW9ucy5ub2RlLnR0bCA9IDEwMDAgKiA2MCAqIDI7IC8vIDIgbWludXRlcztcbiAgLyoqXG4gICAqIE9uIGxpbnV4IHVzZSAndWxpbWl0IC1IbicgdG8gZ2V0IHRoZSBsaW1pdCBvZiBvcGVuIGZpbGVzLlxuICAgKiBPbiB1YnVudHUgdGhpcyB3YXMgNDA5NiBmb3IgbWUsIHNvIHdlIHVzZSBoYWxmIG9mIHRoYXQgYXMgbWF4UGFyYWxsZWxXcml0ZXMgZGVmYXVsdC5cbiAgICovXG4gIGlmICghb3B0aW9ucy5ub2RlLm1heFBhcmFsbGVsV3JpdGVzKSBvcHRpb25zLm5vZGUubWF4UGFyYWxsZWxXcml0ZXMgPSAyMDQ4O1xuICBpZiAodHlwZW9mIG9wdGlvbnMubm9kZS51c2VGYXN0UGF0aCA9PT0gJ3VuZGVmaW5lZCcpIG9wdGlvbnMubm9kZS51c2VGYXN0UGF0aCA9IHRydWU7XG4gIHJldHVybiBvcHRpb25zO1xufSIsICIvKipcbiAqIHRoaXMgbWV0aG9kIHVzZXMgaW5kZXhlZGRiIHRvIHN0b3JlIHRoZSBtZXNzYWdlc1xuICogVGhlcmUgaXMgY3VycmVudGx5IG5vIG9ic2VydmVyQVBJIGZvciBpZGJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvSW5kZXhlZERCL2lzc3Vlcy81MVxuICogXG4gKiBXaGVuIHdvcmtpbmcgb24gdGhpcywgZW5zdXJlIHRvIHVzZSB0aGVzZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zOlxuICogQGxpbmsgaHR0cHM6Ly9yeGRiLmluZm8vc2xvdy1pbmRleGVkZGIuaHRtbFxuICovXG5cbmltcG9ydCB7IHNsZWVwLCByYW5kb21JbnQsIHJhbmRvbVRva2VuLCBtaWNyb1NlY29uZHMgYXMgbWljcm8sIFBST01JU0VfUkVTT0xWRURfVk9JRCB9IGZyb20gJy4uL3V0aWwuanMnO1xuZXhwb3J0IHZhciBtaWNyb1NlY29uZHMgPSBtaWNybztcbmltcG9ydCB7IE9ibGl2aW91c1NldCB9IGZyb20gJ29ibGl2aW91cy1zZXQnO1xuaW1wb3J0IHsgZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMgfSBmcm9tICcuLi9vcHRpb25zLmpzJztcbnZhciBEQl9QUkVGSVggPSAncHVia2V5LmJyb2FkY2FzdC1jaGFubmVsLTAtJztcbnZhciBPQkpFQ1RfU1RPUkVfSUQgPSAnbWVzc2FnZXMnO1xuXG4vKipcbiAqIFVzZSByZWxheGVkIGR1cmFiaWxpdHkgZm9yIGZhc3RlciBwZXJmb3JtYW5jZSBvbiBhbGwgdHJhbnNhY3Rpb25zLlxuICogQGxpbmsgaHR0cHM6Ly9ub2xhbmxhd3Nvbi5jb20vMjAyMS8wOC8yMi9zcGVlZGluZy11cC1pbmRleGVkZGItcmVhZHMtYW5kLXdyaXRlcy9cbiAqL1xuZXhwb3J0IHZhciBUUkFOU0FDVElPTl9TRVRUSU5HUyA9IHtcbiAgZHVyYWJpbGl0eTogJ3JlbGF4ZWQnXG59O1xuZXhwb3J0IHZhciB0eXBlID0gJ2lkYic7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SWRiKCkge1xuICBpZiAodHlwZW9mIGluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBpbmRleGVkREI7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2Ygd2luZG93Lm1vekluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB3aW5kb3cubW96SW5kZXhlZERCO1xuICAgIGlmICh0eXBlb2Ygd2luZG93LndlYmtpdEluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB3aW5kb3cud2Via2l0SW5kZXhlZERCO1xuICAgIGlmICh0eXBlb2Ygd2luZG93Lm1zSW5kZXhlZERCICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHdpbmRvdy5tc0luZGV4ZWREQjtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogSWYgcG9zc2libGUsIHdlIHNob3VsZCBleHBsaWNpdGx5IGNvbW1pdCBJbmRleGVkREIgdHJhbnNhY3Rpb25zXG4gKiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLlxuICogQGxpbmsgaHR0cHM6Ly9ub2xhbmxhd3Nvbi5jb20vMjAyMS8wOC8yMi9zcGVlZGluZy11cC1pbmRleGVkZGItcmVhZHMtYW5kLXdyaXRlcy9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1pdEluZGV4ZWREQlRyYW5zYWN0aW9uKHR4KSB7XG4gIGlmICh0eC5jb21taXQpIHtcbiAgICB0eC5jb21taXQoKTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURhdGFiYXNlKGNoYW5uZWxOYW1lKSB7XG4gIHZhciBJbmRleGVkREIgPSBnZXRJZGIoKTtcblxuICAvLyBjcmVhdGUgdGFibGVcbiAgdmFyIGRiTmFtZSA9IERCX1BSRUZJWCArIGNoYW5uZWxOYW1lO1xuXG4gIC8qKlxuICAgKiBBbGwgSW5kZXhlZERCIGRhdGFiYXNlcyBhcmUgb3BlbmVkIHdpdGhvdXQgdmVyc2lvblxuICAgKiBiZWNhdXNlIGl0IGlzIGEgYml0IGZhc3RlciwgZXNwZWNpYWxseSBvbiBmaXJlZm94XG4gICAqIEBsaW5rIGh0dHA6Ly9ucGFyYXNodXJhbS5jb20vSW5kZXhlZERCL3BlcmYvI09wZW4lMjBEYXRhYmFzZSUyMHdpdGglMjB2ZXJzaW9uXG4gICAqL1xuICB2YXIgb3BlblJlcXVlc3QgPSBJbmRleGVkREIub3BlbihkYk5hbWUpO1xuICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICB2YXIgZGIgPSBldi50YXJnZXQucmVzdWx0O1xuICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCwge1xuICAgICAga2V5UGF0aDogJ2lkJyxcbiAgICAgIGF1dG9JbmNyZW1lbnQ6IHRydWVcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikge1xuICAgIG9wZW5SZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgIHJldHVybiByZWooZXYpO1xuICAgIH07XG4gICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmVzKG9wZW5SZXF1ZXN0LnJlc3VsdCk7XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogd3JpdGVzIHRoZSBuZXcgbWVzc2FnZSB0byB0aGUgZGF0YWJhc2VcbiAqIHNvIG90aGVyIHJlYWRlcnMgY2FuIGZpbmQgaXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTWVzc2FnZShkYiwgcmVhZGVyVXVpZCwgbWVzc2FnZUpzb24pIHtcbiAgdmFyIHRpbWUgPSBEYXRlLm5vdygpO1xuICB2YXIgd3JpdGVPYmplY3QgPSB7XG4gICAgdXVpZDogcmVhZGVyVXVpZCxcbiAgICB0aW1lOiB0aW1lLFxuICAgIGRhdGE6IG1lc3NhZ2VKc29uXG4gIH07XG4gIHZhciB0eCA9IGRiLnRyYW5zYWN0aW9uKFtPQkpFQ1RfU1RPUkVfSURdLCAncmVhZHdyaXRlJywgVFJBTlNBQ1RJT05fU0VUVElOR1MpO1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7XG4gICAgdHgub25jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXMoKTtcbiAgICB9O1xuICAgIHR4Lm9uZXJyb3IgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgIHJldHVybiByZWooZXYpO1xuICAgIH07XG4gICAgdmFyIG9iamVjdFN0b3JlID0gdHgub2JqZWN0U3RvcmUoT0JKRUNUX1NUT1JFX0lEKTtcbiAgICBvYmplY3RTdG9yZS5hZGQod3JpdGVPYmplY3QpO1xuICAgIGNvbW1pdEluZGV4ZWREQlRyYW5zYWN0aW9uKHR4KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsTWVzc2FnZXMoZGIpIHtcbiAgdmFyIHR4ID0gZGIudHJhbnNhY3Rpb24oT0JKRUNUX1NUT1JFX0lELCAncmVhZG9ubHknLCBUUkFOU0FDVElPTl9TRVRUSU5HUyk7XG4gIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7XG4gIHZhciByZXQgPSBbXTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICB2YXIgY3Vyc29yID0gZXYudGFyZ2V0LnJlc3VsdDtcbiAgICAgIGlmIChjdXJzb3IpIHtcbiAgICAgICAgcmV0LnB1c2goY3Vyc29yLnZhbHVlKTtcbiAgICAgICAgLy9hbGVydChcIk5hbWUgZm9yIFNTTiBcIiArIGN1cnNvci5rZXkgKyBcIiBpcyBcIiArIGN1cnNvci52YWx1ZS5uYW1lKTtcbiAgICAgICAgY3Vyc29yW1wiY29udGludWVcIl0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbW1pdEluZGV4ZWREQlRyYW5zYWN0aW9uKHR4KTtcbiAgICAgICAgcmVzKHJldCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVzc2FnZXNIaWdoZXJUaGFuKGRiLCBsYXN0Q3Vyc29ySWQpIHtcbiAgdmFyIHR4ID0gZGIudHJhbnNhY3Rpb24oT0JKRUNUX1NUT1JFX0lELCAncmVhZG9ubHknLCBUUkFOU0FDVElPTl9TRVRUSU5HUyk7XG4gIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7XG4gIHZhciByZXQgPSBbXTtcbiAgdmFyIGtleVJhbmdlVmFsdWUgPSBJREJLZXlSYW5nZS5ib3VuZChsYXN0Q3Vyc29ySWQgKyAxLCBJbmZpbml0eSk7XG5cbiAgLyoqXG4gICAqIE9wdGltaXphdGlvbiBzaG9ydGN1dCxcbiAgICogaWYgZ2V0QWxsKCkgY2FuIGJlIHVzZWQsIGRvIG5vdCB1c2UgYSBjdXJzb3IuXG4gICAqIEBsaW5rIGh0dHBzOi8vcnhkYi5pbmZvL3Nsb3ctaW5kZXhlZGRiLmh0bWxcbiAgICovXG4gIGlmIChvYmplY3RTdG9yZS5nZXRBbGwpIHtcbiAgICB2YXIgZ2V0QWxsUmVxdWVzdCA9IG9iamVjdFN0b3JlLmdldEFsbChrZXlSYW5nZVZhbHVlKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7XG4gICAgICBnZXRBbGxSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWooZXJyKTtcbiAgICAgIH07XG4gICAgICBnZXRBbGxSZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJlcyhlLnRhcmdldC5yZXN1bHQpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBvcGVuQ3Vyc29yKCkge1xuICAgIC8vIE9jY2FzaW9uYWxseSBTYWZhcmkgd2lsbCBmYWlsIG9uIElEQktleVJhbmdlLmJvdW5kLCB0aGlzXG4gICAgLy8gY2F0Y2hlcyB0aGF0IGVycm9yLCBoYXZpbmcgaXQgb3BlbiB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdFxuICAgIC8vIGl0ZW0uIFdoZW4gaXQgZ2V0cyBkYXRhIGl0IHdpbGwgYWR2YW5jZSB0byB0aGUgZGVzaXJlZCBrZXkuXG4gICAgdHJ5IHtcbiAgICAgIGtleVJhbmdlVmFsdWUgPSBJREJLZXlSYW5nZS5ib3VuZChsYXN0Q3Vyc29ySWQgKyAxLCBJbmZpbml0eSk7XG4gICAgICByZXR1cm4gb2JqZWN0U3RvcmUub3BlbkN1cnNvcihrZXlSYW5nZVZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0U3RvcmUub3BlbkN1cnNvcigpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7XG4gICAgdmFyIG9wZW5DdXJzb3JSZXF1ZXN0ID0gb3BlbkN1cnNvcigpO1xuICAgIG9wZW5DdXJzb3JSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICByZXR1cm4gcmVqKGVycik7XG4gICAgfTtcbiAgICBvcGVuQ3Vyc29yUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgIHZhciBjdXJzb3IgPSBldi50YXJnZXQucmVzdWx0O1xuICAgICAgaWYgKGN1cnNvcikge1xuICAgICAgICBpZiAoY3Vyc29yLnZhbHVlLmlkIDwgbGFzdEN1cnNvcklkICsgMSkge1xuICAgICAgICAgIGN1cnNvcltcImNvbnRpbnVlXCJdKGxhc3RDdXJzb3JJZCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldC5wdXNoKGN1cnNvci52YWx1ZSk7XG4gICAgICAgICAgY3Vyc29yW1wiY29udGludWVcIl0oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tbWl0SW5kZXhlZERCVHJhbnNhY3Rpb24odHgpO1xuICAgICAgICByZXMocmV0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVNZXNzYWdlc0J5SWQoY2hhbm5lbFN0YXRlLCBpZHMpIHtcbiAgaWYgKGNoYW5uZWxTdGF0ZS5jbG9zZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICB2YXIgdHggPSBjaGFubmVsU3RhdGUuZGIudHJhbnNhY3Rpb24oT0JKRUNUX1NUT1JFX0lELCAncmVhZHdyaXRlJywgVFJBTlNBQ1RJT05fU0VUVElOR1MpO1xuICB2YXIgb2JqZWN0U3RvcmUgPSB0eC5vYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQpO1xuICByZXR1cm4gUHJvbWlzZS5hbGwoaWRzLm1hcChmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgZGVsZXRlUmVxdWVzdCA9IG9iamVjdFN0b3JlW1wiZGVsZXRlXCJdKGlkKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgZGVsZXRlUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXMoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRPbGRNZXNzYWdlcyhkYiwgdHRsKSB7XG4gIHZhciBvbGRlclRoZW4gPSBEYXRlLm5vdygpIC0gdHRsO1xuICB2YXIgdHggPSBkYi50cmFuc2FjdGlvbihPQkpFQ1RfU1RPUkVfSUQsICdyZWFkb25seScsIFRSQU5TQUNUSU9OX1NFVFRJTkdTKTtcbiAgdmFyIG9iamVjdFN0b3JlID0gdHgub2JqZWN0U3RvcmUoT0JKRUNUX1NUT1JFX0lEKTtcbiAgdmFyIHJldCA9IFtdO1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcykge1xuICAgIG9iamVjdFN0b3JlLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgIHZhciBjdXJzb3IgPSBldi50YXJnZXQucmVzdWx0O1xuICAgICAgaWYgKGN1cnNvcikge1xuICAgICAgICB2YXIgbXNnT2JrID0gY3Vyc29yLnZhbHVlO1xuICAgICAgICBpZiAobXNnT2JrLnRpbWUgPCBvbGRlclRoZW4pIHtcbiAgICAgICAgICByZXQucHVzaChtc2dPYmspO1xuICAgICAgICAgIC8vYWxlcnQoXCJOYW1lIGZvciBTU04gXCIgKyBjdXJzb3Iua2V5ICsgXCIgaXMgXCIgKyBjdXJzb3IudmFsdWUubmFtZSk7XG4gICAgICAgICAgY3Vyc29yW1wiY29udGludWVcIl0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBubyBtb3JlIG9sZCBtZXNzYWdlcyxcbiAgICAgICAgICBjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbih0eCk7XG4gICAgICAgICAgcmVzKHJldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcyhyZXQpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuT2xkTWVzc2FnZXMoY2hhbm5lbFN0YXRlKSB7XG4gIHJldHVybiBnZXRPbGRNZXNzYWdlcyhjaGFubmVsU3RhdGUuZGIsIGNoYW5uZWxTdGF0ZS5vcHRpb25zLmlkYi50dGwpLnRoZW4oZnVuY3Rpb24gKHRvb09sZCkge1xuICAgIHJldHVybiByZW1vdmVNZXNzYWdlc0J5SWQoY2hhbm5lbFN0YXRlLCB0b29PbGQubWFwKGZ1bmN0aW9uIChtc2cpIHtcbiAgICAgIHJldHVybiBtc2cuaWQ7XG4gICAgfSkpO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoY2hhbm5lbE5hbWUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICByZXR1cm4gY3JlYXRlRGF0YWJhc2UoY2hhbm5lbE5hbWUpLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgY2xvc2VkOiBmYWxzZSxcbiAgICAgIGxhc3RDdXJzb3JJZDogMCxcbiAgICAgIGNoYW5uZWxOYW1lOiBjaGFubmVsTmFtZSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB1dWlkOiByYW5kb21Ub2tlbigpLFxuICAgICAgLyoqXG4gICAgICAgKiBlbWl0dGVkTWVzc2FnZXNJZHNcbiAgICAgICAqIGNvbnRhaW5zIGFsbCBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiBlbWl0dGVkIGJlZm9yZVxuICAgICAgICogQHR5cGUge09ibGl2aW91c1NldH1cbiAgICAgICAqL1xuICAgICAgZU1JczogbmV3IE9ibGl2aW91c1NldChvcHRpb25zLmlkYi50dGwgKiAyKSxcbiAgICAgIC8vIGVuc3VyZXMgd2UgZG8gbm90IHJlYWQgbWVzc2FnZXMgaW4gcGFyYWxsZWxcbiAgICAgIHdyaXRlQmxvY2tQcm9taXNlOiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQsXG4gICAgICBtZXNzYWdlc0NhbGxiYWNrOiBudWxsLFxuICAgICAgcmVhZFF1ZXVlUHJvbWlzZXM6IFtdLFxuICAgICAgZGI6IGRiXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBhYnJ1cHQgY2xvc2VzIHRoYXQgZG8gbm90IG9yaWdpbmF0ZSBmcm9tIGRiLmNsb3NlKCkuXG4gICAgICogVGhpcyBjb3VsZCBoYXBwZW4sIGZvciBleGFtcGxlLCBpZiB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGlzXG4gICAgICogcmVtb3ZlZCBvciBpZiB0aGUgdXNlciBjbGVhcnMgdGhlIGRhdGFiYXNlIGluIHRoZSBicm93c2VyJ3NcbiAgICAgKiBoaXN0b3J5IHByZWZlcmVuY2VzLlxuICAgICAqL1xuICAgIGRiLm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzdGF0ZS5jbG9zZWQgPSB0cnVlO1xuICAgICAgaWYgKG9wdGlvbnMuaWRiLm9uY2xvc2UpIG9wdGlvbnMuaWRiLm9uY2xvc2UoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogaWYgc2VydmljZS13b3JrZXJzIGFyZSB1c2VkLFxuICAgICAqIHdlIGhhdmUgbm8gJ3N0b3JhZ2UnLWV2ZW50IGlmIHRoZXkgcG9zdCBhIG1lc3NhZ2UsXG4gICAgICogdGhlcmVmb3JlIHdlIGFsc28gaGF2ZSB0byBzZXQgYW4gaW50ZXJ2YWxcbiAgICAgKi9cbiAgICBfcmVhZExvb3Aoc3RhdGUpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfSk7XG59XG5mdW5jdGlvbiBfcmVhZExvb3Aoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmNsb3NlZCkgcmV0dXJuO1xuICByZWFkTmV3TWVzc2FnZXMoc3RhdGUpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzbGVlcChzdGF0ZS5vcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsKTtcbiAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9yZWFkTG9vcChzdGF0ZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gX2ZpbHRlck1lc3NhZ2UobXNnT2JqLCBzdGF0ZSkge1xuICBpZiAobXNnT2JqLnV1aWQgPT09IHN0YXRlLnV1aWQpIHJldHVybiBmYWxzZTsgLy8gc2VuZCBieSBvd25cbiAgaWYgKHN0YXRlLmVNSXMuaGFzKG1zZ09iai5pZCkpIHJldHVybiBmYWxzZTsgLy8gYWxyZWFkeSBlbWl0dGVkXG4gIGlmIChtc2dPYmouZGF0YS50aW1lIDwgc3RhdGUubWVzc2FnZXNDYWxsYmFja1RpbWUpIHJldHVybiBmYWxzZTsgLy8gb2xkZXIgdGhlbiBvbk1lc3NhZ2VDYWxsYmFja1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiByZWFkcyBhbGwgbmV3IG1lc3NhZ2VzIGZyb20gdGhlIGRhdGFiYXNlIGFuZCBlbWl0cyB0aGVtXG4gKi9cbmZ1bmN0aW9uIHJlYWROZXdNZXNzYWdlcyhzdGF0ZSkge1xuICAvLyBjaGFubmVsIGFscmVhZHkgY2xvc2VkXG4gIGlmIChzdGF0ZS5jbG9zZWQpIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7XG5cbiAgLy8gaWYgbm8gb25lIGlzIGxpc3RlbmluZywgd2UgZG8gbm90IG5lZWQgdG8gc2NhbiBmb3IgbmV3IG1lc3NhZ2VzXG4gIGlmICghc3RhdGUubWVzc2FnZXNDYWxsYmFjaykgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfVk9JRDtcbiAgcmV0dXJuIGdldE1lc3NhZ2VzSGlnaGVyVGhhbihzdGF0ZS5kYiwgc3RhdGUubGFzdEN1cnNvcklkKS50aGVuKGZ1bmN0aW9uIChuZXdlck1lc3NhZ2VzKSB7XG4gICAgdmFyIHVzZU1lc3NhZ2VzID0gbmV3ZXJNZXNzYWdlc1xuICAgIC8qKlxuICAgICAqIHRoZXJlIGlzIGEgYnVnIGluIGlPUyB3aGVyZSB0aGUgbXNnT2JqIGNhbiBiZSB1bmRlZmluZWQgc29tZXRpbWVzXG4gICAgICogc28gd2UgZmlsdGVyIHRoZW0gb3V0XG4gICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3B1YmtleS9icm9hZGNhc3QtY2hhbm5lbC9pc3N1ZXMvMTlcbiAgICAgKi8uZmlsdGVyKGZ1bmN0aW9uIChtc2dPYmopIHtcbiAgICAgIHJldHVybiAhIW1zZ09iajtcbiAgICB9KS5tYXAoZnVuY3Rpb24gKG1zZ09iaikge1xuICAgICAgaWYgKG1zZ09iai5pZCA+IHN0YXRlLmxhc3RDdXJzb3JJZCkge1xuICAgICAgICBzdGF0ZS5sYXN0Q3Vyc29ySWQgPSBtc2dPYmouaWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbXNnT2JqO1xuICAgIH0pLmZpbHRlcihmdW5jdGlvbiAobXNnT2JqKSB7XG4gICAgICByZXR1cm4gX2ZpbHRlck1lc3NhZ2UobXNnT2JqLCBzdGF0ZSk7XG4gICAgfSkuc29ydChmdW5jdGlvbiAobXNnT2JqQSwgbXNnT2JqQikge1xuICAgICAgcmV0dXJuIG1zZ09iakEudGltZSAtIG1zZ09iakIudGltZTtcbiAgICB9KTsgLy8gc29ydCBieSB0aW1lXG4gICAgdXNlTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAobXNnT2JqKSB7XG4gICAgICBpZiAoc3RhdGUubWVzc2FnZXNDYWxsYmFjaykge1xuICAgICAgICBzdGF0ZS5lTUlzLmFkZChtc2dPYmouaWQpO1xuICAgICAgICBzdGF0ZS5tZXNzYWdlc0NhbGxiYWNrKG1zZ09iai5kYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9WT0lEO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZShjaGFubmVsU3RhdGUpIHtcbiAgY2hhbm5lbFN0YXRlLmNsb3NlZCA9IHRydWU7XG4gIGNoYW5uZWxTdGF0ZS5kYi5jbG9zZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBvc3RNZXNzYWdlKGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHtcbiAgY2hhbm5lbFN0YXRlLndyaXRlQmxvY2tQcm9taXNlID0gY2hhbm5lbFN0YXRlLndyaXRlQmxvY2tQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB3cml0ZU1lc3NhZ2UoY2hhbm5lbFN0YXRlLmRiLCBjaGFubmVsU3RhdGUudXVpZCwgbWVzc2FnZUpzb24pO1xuICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocmFuZG9tSW50KDAsIDEwKSA9PT0gMCkge1xuICAgICAgLyogYXdhaXQgKGRvIG5vdCBhd2FpdCkgKi9cbiAgICAgIGNsZWFuT2xkTWVzc2FnZXMoY2hhbm5lbFN0YXRlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2hhbm5lbFN0YXRlLndyaXRlQmxvY2tQcm9taXNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9uTWVzc2FnZShjaGFubmVsU3RhdGUsIGZuLCB0aW1lKSB7XG4gIGNoYW5uZWxTdGF0ZS5tZXNzYWdlc0NhbGxiYWNrVGltZSA9IHRpbWU7XG4gIGNoYW5uZWxTdGF0ZS5tZXNzYWdlc0NhbGxiYWNrID0gZm47XG4gIHJlYWROZXdNZXNzYWdlcyhjaGFubmVsU3RhdGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNhbkJlVXNlZCgpIHtcbiAgcmV0dXJuICEhZ2V0SWRiKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXZlcmFnZVJlc3BvbnNlVGltZShvcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsICogMjtcbn1cbmV4cG9ydCB2YXIgSW5kZXhlZERCTWV0aG9kID0ge1xuICBjcmVhdGU6IGNyZWF0ZSxcbiAgY2xvc2U6IGNsb3NlLFxuICBvbk1lc3NhZ2U6IG9uTWVzc2FnZSxcbiAgcG9zdE1lc3NhZ2U6IHBvc3RNZXNzYWdlLFxuICBjYW5CZVVzZWQ6IGNhbkJlVXNlZCxcbiAgdHlwZTogdHlwZSxcbiAgYXZlcmFnZVJlc3BvbnNlVGltZTogYXZlcmFnZVJlc3BvbnNlVGltZSxcbiAgbWljcm9TZWNvbmRzOiBtaWNyb1NlY29uZHNcbn07IiwgIi8qKlxuICogQSBsb2NhbFN0b3JhZ2Utb25seSBtZXRob2Qgd2hpY2ggdXNlcyBsb2NhbHN0b3JhZ2UgYW5kIGl0cyAnc3RvcmFnZSctZXZlbnRcbiAqIFRoaXMgZG9lcyBub3Qgd29yayBpbnNpZGUgd2Vid29ya2VycyBiZWNhdXNlIHRoZXkgaGF2ZSBubyBhY2Nlc3MgdG8gbG9jYWxzdG9yYWdlXG4gKiBUaGlzIGlzIGJhc2ljYWxseSBpbXBsZW1lbnRlZCB0byBzdXBwb3J0IElFOSBvciB5b3VyIGdyYW5kbW90aGVyJ3MgdG9hc3Rlci5cbiAqIEBsaW5rIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9bmFtZXZhbHVlLXN0b3JhZ2VcbiAqIEBsaW5rIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9aW5kZXhlZGRiXG4gKi9cblxuaW1wb3J0IHsgT2JsaXZpb3VzU2V0IH0gZnJvbSAnb2JsaXZpb3VzLXNldCc7XG5pbXBvcnQgeyBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0cyB9IGZyb20gJy4uL29wdGlvbnMuanMnO1xuaW1wb3J0IHsgc2xlZXAsIHJhbmRvbVRva2VuLCBtaWNyb1NlY29uZHMgYXMgbWljcm8gfSBmcm9tICcuLi91dGlsLmpzJztcbmV4cG9ydCB2YXIgbWljcm9TZWNvbmRzID0gbWljcm87XG52YXIgS0VZX1BSRUZJWCA9ICdwdWJrZXkuYnJvYWRjYXN0Q2hhbm5lbC0nO1xuZXhwb3J0IHZhciB0eXBlID0gJ2xvY2Fsc3RvcmFnZSc7XG5cbi8qKlxuICogY29waWVkIGZyb20gY3Jvc3N0YWJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS90ZWphY3F1ZXMvY3Jvc3N0YWIvYmxvYi9tYXN0ZXIvc3JjL2Nyb3NzdGFiLmpzI0wzMlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxTdG9yYWdlKCkge1xuICB2YXIgbG9jYWxTdG9yYWdlO1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGxvY2FsU3RvcmFnZSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gICAgbG9jYWxTdG9yYWdlID0gd2luZG93WydpZTgtZXZlbnRsaXN0ZW5lci9zdG9yYWdlJ10gfHwgd2luZG93LmxvY2FsU3RvcmFnZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIE5ldyB2ZXJzaW9ucyBvZiBGaXJlZm94IHRocm93IGEgU2VjdXJpdHkgZXhjZXB0aW9uXG4gICAgLy8gaWYgY29va2llcyBhcmUgZGlzYWJsZWQuIFNlZVxuICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjgxNTNcbiAgfVxuICByZXR1cm4gbG9jYWxTdG9yYWdlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0b3JhZ2VLZXkoY2hhbm5lbE5hbWUpIHtcbiAgcmV0dXJuIEtFWV9QUkVGSVggKyBjaGFubmVsTmFtZTtcbn1cblxuLyoqXG4qIHdyaXRlcyB0aGUgbmV3IG1lc3NhZ2UgdG8gdGhlIHN0b3JhZ2VcbiogYW5kIGZpcmVzIHRoZSBzdG9yYWdlLWV2ZW50IHNvIG90aGVyIHJlYWRlcnMgY2FuIGZpbmQgaXRcbiovXG5leHBvcnQgZnVuY3Rpb24gcG9zdE1lc3NhZ2UoY2hhbm5lbFN0YXRlLCBtZXNzYWdlSnNvbikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcykge1xuICAgIHNsZWVwKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIga2V5ID0gc3RvcmFnZUtleShjaGFubmVsU3RhdGUuY2hhbm5lbE5hbWUpO1xuICAgICAgdmFyIHdyaXRlT2JqID0ge1xuICAgICAgICB0b2tlbjogcmFuZG9tVG9rZW4oKSxcbiAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgZGF0YTogbWVzc2FnZUpzb24sXG4gICAgICAgIHV1aWQ6IGNoYW5uZWxTdGF0ZS51dWlkXG4gICAgICB9O1xuICAgICAgdmFyIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkod3JpdGVPYmopO1xuICAgICAgZ2V0TG9jYWxTdG9yYWdlKCkuc2V0SXRlbShrZXksIHZhbHVlKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBTdG9yYWdlRXZlbnQgZG9lcyBub3QgZmlyZSB0aGUgJ3N0b3JhZ2UnIGV2ZW50XG4gICAgICAgKiBpbiB0aGUgd2luZG93IHRoYXQgY2hhbmdlcyB0aGUgc3RhdGUgb2YgdGhlIGxvY2FsIHN0b3JhZ2UuXG4gICAgICAgKiBTbyB3ZSBmaXJlIGl0IG1hbnVhbGx5XG4gICAgICAgKi9cbiAgICAgIHZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgZXYuaW5pdEV2ZW50KCdzdG9yYWdlJywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBldi5rZXkgPSBrZXk7XG4gICAgICBldi5uZXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXYpO1xuICAgICAgcmVzKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFkZFN0b3JhZ2VFdmVudExpc3RlbmVyKGNoYW5uZWxOYW1lLCBmbikge1xuICB2YXIga2V5ID0gc3RvcmFnZUtleShjaGFubmVsTmFtZSk7XG4gIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKGV2KSB7XG4gICAgaWYgKGV2LmtleSA9PT0ga2V5KSB7XG4gICAgICBmbihKU09OLnBhcnNlKGV2Lm5ld1ZhbHVlKSk7XG4gICAgfVxuICB9O1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIGxpc3RlbmVyKTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVN0b3JhZ2VFdmVudExpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgbGlzdGVuZXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShjaGFubmVsTmFtZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gIGlmICghY2FuQmVVc2VkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jyb2FkY2FzdENoYW5uZWw6IGxvY2Fsc3RvcmFnZSBjYW5ub3QgYmUgdXNlZCcpO1xuICB9XG4gIHZhciB1dWlkID0gcmFuZG9tVG9rZW4oKTtcblxuICAvKipcbiAgICogZU1Jc1xuICAgKiBjb250YWlucyBhbGwgbWVzc2FnZXMgdGhhdCBoYXZlIGJlZW4gZW1pdHRlZCBiZWZvcmVcbiAgICogQHR5cGUge09ibGl2aW91c1NldH1cbiAgICovXG4gIHZhciBlTUlzID0gbmV3IE9ibGl2aW91c1NldChvcHRpb25zLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0KTtcbiAgdmFyIHN0YXRlID0ge1xuICAgIGNoYW5uZWxOYW1lOiBjaGFubmVsTmFtZSxcbiAgICB1dWlkOiB1dWlkLFxuICAgIGVNSXM6IGVNSXMgLy8gZW1pdHRlZE1lc3NhZ2VzSWRzXG4gIH07XG4gIHN0YXRlLmxpc3RlbmVyID0gYWRkU3RvcmFnZUV2ZW50TGlzdGVuZXIoY2hhbm5lbE5hbWUsIGZ1bmN0aW9uIChtc2dPYmopIHtcbiAgICBpZiAoIXN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2spIHJldHVybjsgLy8gbm8gbGlzdGVuZXJcbiAgICBpZiAobXNnT2JqLnV1aWQgPT09IHV1aWQpIHJldHVybjsgLy8gb3duIG1lc3NhZ2VcbiAgICBpZiAoIW1zZ09iai50b2tlbiB8fCBlTUlzLmhhcyhtc2dPYmoudG9rZW4pKSByZXR1cm47IC8vIGFscmVhZHkgZW1pdHRlZFxuICAgIGlmIChtc2dPYmouZGF0YS50aW1lICYmIG1zZ09iai5kYXRhLnRpbWUgPCBzdGF0ZS5tZXNzYWdlc0NhbGxiYWNrVGltZSkgcmV0dXJuOyAvLyB0b28gb2xkXG5cbiAgICBlTUlzLmFkZChtc2dPYmoudG9rZW4pO1xuICAgIHN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2sobXNnT2JqLmRhdGEpO1xuICB9KTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlKGNoYW5uZWxTdGF0ZSkge1xuICByZW1vdmVTdG9yYWdlRXZlbnRMaXN0ZW5lcihjaGFubmVsU3RhdGUubGlzdGVuZXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9uTWVzc2FnZShjaGFubmVsU3RhdGUsIGZuLCB0aW1lKSB7XG4gIGNoYW5uZWxTdGF0ZS5tZXNzYWdlc0NhbGxiYWNrVGltZSA9IHRpbWU7XG4gIGNoYW5uZWxTdGF0ZS5tZXNzYWdlc0NhbGxiYWNrID0gZm47XG59XG5leHBvcnQgZnVuY3Rpb24gY2FuQmVVc2VkKCkge1xuICB2YXIgbHMgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcbiAgaWYgKCFscykgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBrZXkgPSAnX19icm9hZGNhc3RjaGFubmVsX2NoZWNrJztcbiAgICBscy5zZXRJdGVtKGtleSwgJ3dvcmtzJyk7XG4gICAgbHMucmVtb3ZlSXRlbShrZXkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gU2FmYXJpIDEwIGluIHByaXZhdGUgbW9kZSB3aWxsIG5vdCBhbGxvdyB3cml0ZSBhY2Nlc3MgdG8gbG9jYWxcbiAgICAvLyBzdG9yYWdlIGFuZCBmYWlsIHdpdGggYSBRdW90YUV4Y2VlZGVkRXJyb3IuIFNlZVxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJfU3RvcmFnZV9BUEkjUHJpdmF0ZV9Ccm93c2luZ19JbmNvZ25pdG9fbW9kZXNcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gYXZlcmFnZVJlc3BvbnNlVGltZSgpIHtcbiAgdmFyIGRlZmF1bHRUaW1lID0gMTIwO1xuICB2YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICBpZiAodXNlckFnZW50LmluY2x1ZGVzKCdzYWZhcmknKSAmJiAhdXNlckFnZW50LmluY2x1ZGVzKCdjaHJvbWUnKSkge1xuICAgIC8vIHNhZmFyaSBpcyBtdWNoIHNsb3dlciBzbyB0aGlzIHRpbWUgaXMgaGlnaGVyXG4gICAgcmV0dXJuIGRlZmF1bHRUaW1lICogMjtcbiAgfVxuICByZXR1cm4gZGVmYXVsdFRpbWU7XG59XG5leHBvcnQgdmFyIExvY2Fsc3RvcmFnZU1ldGhvZCA9IHtcbiAgY3JlYXRlOiBjcmVhdGUsXG4gIGNsb3NlOiBjbG9zZSxcbiAgb25NZXNzYWdlOiBvbk1lc3NhZ2UsXG4gIHBvc3RNZXNzYWdlOiBwb3N0TWVzc2FnZSxcbiAgY2FuQmVVc2VkOiBjYW5CZVVzZWQsXG4gIHR5cGU6IHR5cGUsXG4gIGF2ZXJhZ2VSZXNwb25zZVRpbWU6IGF2ZXJhZ2VSZXNwb25zZVRpbWUsXG4gIG1pY3JvU2Vjb25kczogbWljcm9TZWNvbmRzXG59OyIsICJpbXBvcnQgeyBtaWNyb1NlY29uZHMgYXMgbWljcm8gfSBmcm9tICcuLi91dGlsLmpzJztcbmV4cG9ydCB2YXIgbWljcm9TZWNvbmRzID0gbWljcm87XG5leHBvcnQgdmFyIHR5cGUgPSAnc2ltdWxhdGUnO1xudmFyIFNJTVVMQVRFX0NIQU5ORUxTID0gbmV3IFNldCgpO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShjaGFubmVsTmFtZSkge1xuICB2YXIgc3RhdGUgPSB7XG4gICAgdGltZTogbWljcm9TZWNvbmRzKCksXG4gICAgbmFtZTogY2hhbm5lbE5hbWUsXG4gICAgbWVzc2FnZXNDYWxsYmFjazogbnVsbFxuICB9O1xuICBTSU1VTEFURV9DSEFOTkVMUy5hZGQoc3RhdGUpO1xuICByZXR1cm4gc3RhdGU7XG59XG5leHBvcnQgZnVuY3Rpb24gY2xvc2UoY2hhbm5lbFN0YXRlKSB7XG4gIFNJTVVMQVRFX0NIQU5ORUxTW1wiZGVsZXRlXCJdKGNoYW5uZWxTdGF0ZSk7XG59XG5leHBvcnQgdmFyIFNJTVVMQVRFX0RFTEFZX1RJTUUgPSA1O1xuZXhwb3J0IGZ1bmN0aW9uIHBvc3RNZXNzYWdlKGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY2hhbm5lbEFycmF5ID0gQXJyYXkuZnJvbShTSU1VTEFURV9DSEFOTkVMUyk7XG4gICAgICBjaGFubmVsQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoY2hhbm5lbCkge1xuICAgICAgICBpZiAoY2hhbm5lbC5uYW1lID09PSBjaGFubmVsU3RhdGUubmFtZSAmJlxuICAgICAgICAvLyBoYXMgc2FtZSBuYW1lXG4gICAgICAgIGNoYW5uZWwgIT09IGNoYW5uZWxTdGF0ZSAmJlxuICAgICAgICAvLyBub3Qgb3duIGNoYW5uZWxcbiAgICAgICAgISFjaGFubmVsLm1lc3NhZ2VzQ2FsbGJhY2sgJiZcbiAgICAgICAgLy8gaGFzIHN1YnNjcmliZXJzXG4gICAgICAgIGNoYW5uZWwudGltZSA8IG1lc3NhZ2VKc29uLnRpbWUgLy8gY2hhbm5lbCBub3QgY3JlYXRlZCBhZnRlciBwb3N0TWVzc2FnZSgpIGNhbGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2hhbm5lbC5tZXNzYWdlc0NhbGxiYWNrKG1lc3NhZ2VKc29uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXMoKTtcbiAgICB9LCBTSU1VTEFURV9ERUxBWV9USU1FKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gb25NZXNzYWdlKGNoYW5uZWxTdGF0ZSwgZm4pIHtcbiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2sgPSBmbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYW5CZVVzZWQoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGF2ZXJhZ2VSZXNwb25zZVRpbWUoKSB7XG4gIHJldHVybiBTSU1VTEFURV9ERUxBWV9USU1FO1xufVxuZXhwb3J0IHZhciBTaW11bGF0ZU1ldGhvZCA9IHtcbiAgY3JlYXRlOiBjcmVhdGUsXG4gIGNsb3NlOiBjbG9zZSxcbiAgb25NZXNzYWdlOiBvbk1lc3NhZ2UsXG4gIHBvc3RNZXNzYWdlOiBwb3N0TWVzc2FnZSxcbiAgY2FuQmVVc2VkOiBjYW5CZVVzZWQsXG4gIHR5cGU6IHR5cGUsXG4gIGF2ZXJhZ2VSZXNwb25zZVRpbWU6IGF2ZXJhZ2VSZXNwb25zZVRpbWUsXG4gIG1pY3JvU2Vjb25kczogbWljcm9TZWNvbmRzXG59OyIsICJpbXBvcnQgeyBOYXRpdmVNZXRob2QgfSBmcm9tICcuL21ldGhvZHMvbmF0aXZlLmpzJztcbmltcG9ydCB7IEluZGV4ZWREQk1ldGhvZCB9IGZyb20gJy4vbWV0aG9kcy9pbmRleGVkLWRiLmpzJztcbmltcG9ydCB7IExvY2Fsc3RvcmFnZU1ldGhvZCB9IGZyb20gJy4vbWV0aG9kcy9sb2NhbHN0b3JhZ2UuanMnO1xuaW1wb3J0IHsgU2ltdWxhdGVNZXRob2QgfSBmcm9tICcuL21ldGhvZHMvc2ltdWxhdGUuanMnO1xuLy8gdGhlIGxpbmUgYmVsb3cgd2lsbCBiZSByZW1vdmVkIGZyb20gZXM1L2Jyb3dzZXIgYnVpbGRzXG5cbi8vIG9yZGVyIGlzIGltcG9ydGFudFxudmFyIE1FVEhPRFMgPSBbTmF0aXZlTWV0aG9kLFxuLy8gZmFzdGVzdFxuSW5kZXhlZERCTWV0aG9kLCBMb2NhbHN0b3JhZ2VNZXRob2RdO1xuZXhwb3J0IGZ1bmN0aW9uIGNob29zZU1ldGhvZChvcHRpb25zKSB7XG4gIHZhciBjaG9vc2VNZXRob2RzID0gW10uY29uY2F0KG9wdGlvbnMubWV0aG9kcywgTUVUSE9EUykuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIC8vIHRoZSBsaW5lIGJlbG93IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGVzNS9icm93c2VyIGJ1aWxkc1xuXG4gIC8vIGRpcmVjdGx5IGNob3NlblxuICBpZiAob3B0aW9ucy50eXBlKSB7XG4gICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ3NpbXVsYXRlJykge1xuICAgICAgLy8gb25seSB1c2Ugc2ltdWxhdGUtbWV0aG9kIGlmIGRpcmVjdGx5IGNob3NlblxuICAgICAgcmV0dXJuIFNpbXVsYXRlTWV0aG9kO1xuICAgIH1cbiAgICB2YXIgcmV0ID0gY2hvb3NlTWV0aG9kcy5maW5kKGZ1bmN0aW9uIChtKSB7XG4gICAgICByZXR1cm4gbS50eXBlID09PSBvcHRpb25zLnR5cGU7XG4gICAgfSk7XG4gICAgaWYgKCFyZXQpIHRocm93IG5ldyBFcnJvcignbWV0aG9kLXR5cGUgJyArIG9wdGlvbnMudHlwZSArICcgbm90IGZvdW5kJyk7ZWxzZSByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIGlmIG5vIHdlYndvcmtlciBzdXBwb3J0IGlzIG5lZWRlZCxcbiAgICogcmVtb3ZlIGlkYiBmcm9tIHRoZSBsaXN0IHNvIHRoYXQgbG9jYWxzdG9yYWdlIHdpbGwgYmUgY2hvc2VuXG4gICAqL1xuICBpZiAoIW9wdGlvbnMud2ViV29ya2VyU3VwcG9ydCkge1xuICAgIGNob29zZU1ldGhvZHMgPSBjaG9vc2VNZXRob2RzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgcmV0dXJuIG0udHlwZSAhPT0gJ2lkYic7XG4gICAgfSk7XG4gIH1cbiAgdmFyIHVzZU1ldGhvZCA9IGNob29zZU1ldGhvZHMuZmluZChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgcmV0dXJuIG1ldGhvZC5jYW5CZVVzZWQoKTtcbiAgfSk7XG4gIGlmICghdXNlTWV0aG9kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdXNhYmxlIG1ldGhvZCBmb3VuZCBpbiBcIiArIEpTT04uc3RyaW5naWZ5KE1FVEhPRFMubWFwKGZ1bmN0aW9uIChtKSB7XG4gICAgICByZXR1cm4gbS50eXBlO1xuICAgIH0pKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVzZU1ldGhvZDtcbiAgfVxufSIsICJpbXBvcnQgeyBpc1Byb21pc2UsIFBST01JU0VfUkVTT0xWRURfRkFMU0UsIFBST01JU0VfUkVTT0xWRURfVk9JRCB9IGZyb20gJy4vdXRpbC5qcyc7XG5pbXBvcnQgeyBjaG9vc2VNZXRob2QgfSBmcm9tICcuL21ldGhvZC1jaG9vc2VyLmpzJztcbmltcG9ydCB7IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzIH0gZnJvbSAnLi9vcHRpb25zLmpzJztcblxuLyoqXG4gKiBDb250YWlucyBhbGwgb3BlbiBjaGFubmVscyxcbiAqIHVzZWQgaW4gdGVzdHMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgY2xvc2VkLlxuICovXG5leHBvcnQgdmFyIE9QRU5fQlJPQURDQVNUX0NIQU5ORUxTID0gbmV3IFNldCgpO1xudmFyIGxhc3RJZCA9IDA7XG5leHBvcnQgdmFyIEJyb2FkY2FzdENoYW5uZWwgPSBmdW5jdGlvbiBCcm9hZGNhc3RDaGFubmVsKG5hbWUsIG9wdGlvbnMpIHtcbiAgLy8gaWRlbnRpZmllciBvZiB0aGUgY2hhbm5lbCB0byBkZWJ1ZyBzdHVmZlxuICB0aGlzLmlkID0gbGFzdElkKys7XG4gIE9QRU5fQlJPQURDQVNUX0NIQU5ORUxTLmFkZCh0aGlzKTtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgaWYgKEVORk9SQ0VEX09QVElPTlMpIHtcbiAgICBvcHRpb25zID0gRU5GT1JDRURfT1BUSU9OUztcbiAgfVxuICB0aGlzLm9wdGlvbnMgPSBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgdGhpcy5tZXRob2QgPSBjaG9vc2VNZXRob2QodGhpcy5vcHRpb25zKTtcblxuICAvLyBpc0xpc3RlbmluZ1xuICB0aGlzLl9pTCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBfb25NZXNzYWdlTGlzdGVuZXJcbiAgICogc2V0dGluZyBvbm1lc3NhZ2UgdHdpY2UsXG4gICAqIHdpbGwgb3ZlcndyaXRlIHRoZSBmaXJzdCBsaXN0ZW5lclxuICAgKi9cbiAgdGhpcy5fb25NTCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIF9hZGRFdmVudExpc3RlbmVyc1xuICAgKi9cbiAgdGhpcy5fYWRkRUwgPSB7XG4gICAgbWVzc2FnZTogW10sXG4gICAgaW50ZXJuYWw6IFtdXG4gIH07XG5cbiAgLyoqXG4gICAqIFVuc2VudCBtZXNzYWdlIHByb21pc2VzXG4gICAqIHdoZXJlIHRoZSBzZW5kaW5nIGlzIHN0aWxsIGluIHByb2dyZXNzXG4gICAqIEB0eXBlIHtTZXQ8UHJvbWlzZT59XG4gICAqL1xuICB0aGlzLl91TVAgPSBuZXcgU2V0KCk7XG5cbiAgLyoqXG4gICAqIF9iZWZvcmVDbG9zZVxuICAgKiBhcnJheSBvZiBwcm9taXNlcyB0aGF0IHdpbGwgYmUgYXdhaXRlZFxuICAgKiBiZWZvcmUgdGhlIGNoYW5uZWwgaXMgY2xvc2VkXG4gICAqL1xuICB0aGlzLl9iZWZDID0gW107XG5cbiAgLyoqXG4gICAqIF9wcmVwYXJlUHJvbWlzZVxuICAgKi9cbiAgdGhpcy5fcHJlcFAgPSBudWxsO1xuICBfcHJlcGFyZUNoYW5uZWwodGhpcyk7XG59O1xuXG4vLyBTVEFUSUNTXG5cbi8qKlxuICogdXNlZCB0byBpZGVudGlmeSBpZiBzb21lb25lIG92ZXJ3cml0ZXNcbiAqIHdpbmRvdy5Ccm9hZGNhc3RDaGFubmVsIHdpdGggdGhpc1xuICogU2VlIG1ldGhvZHMvbmF0aXZlLmpzXG4gKi9cbkJyb2FkY2FzdENoYW5uZWwuX3B1YmtleSA9IHRydWU7XG5cbi8qKlxuICogY2xlYXJzIHRoZSB0bXAtZm9sZGVyIGlmIGlzIG5vZGVcbiAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IHRydWUgaWYgaGFzIHJ1biwgZmFsc2UgaWYgbm90IG5vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyTm9kZUZvbGRlcihvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgdmFyIG1ldGhvZCA9IGNob29zZU1ldGhvZChvcHRpb25zKTtcbiAgaWYgKG1ldGhvZC50eXBlID09PSAnbm9kZScpIHtcbiAgICByZXR1cm4gbWV0aG9kLmNsZWFyTm9kZUZvbGRlcigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfRkFMU0U7XG4gIH1cbn1cblxuLyoqXG4gKiBpZiBzZXQsIHRoaXMgbWV0aG9kIGlzIGVuZm9yY2VkLFxuICogbm8gbWF0aGVyIHdoYXQgdGhlIG9wdGlvbnMgYXJlXG4gKi9cbnZhciBFTkZPUkNFRF9PUFRJT05TO1xuZXhwb3J0IGZ1bmN0aW9uIGVuZm9yY2VPcHRpb25zKG9wdGlvbnMpIHtcbiAgRU5GT1JDRURfT1BUSU9OUyA9IG9wdGlvbnM7XG59XG5cbi8vIFBST1RPVFlQRVxuQnJvYWRjYXN0Q2hhbm5lbC5wcm90b3R5cGUgPSB7XG4gIHBvc3RNZXNzYWdlOiBmdW5jdGlvbiBwb3N0TWVzc2FnZShtc2cpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQnJvYWRjYXN0Q2hhbm5lbC5wb3N0TWVzc2FnZSgpOiAnICsgJ0Nhbm5vdCBwb3N0IG1lc3NhZ2UgYWZ0ZXIgY2hhbm5lbCBoYXMgY2xvc2VkICcgK1xuICAgICAgLyoqXG4gICAgICAgKiBJbiB0aGUgcGFzdCB3aGVuIHRoaXMgZXJyb3IgYXBwZWFyZWQsIGl0IHdhcyByZWFsbHkgaGFyZCB0byBkZWJ1Zy5cbiAgICAgICAqIFNvIG5vdyB3ZSBsb2cgdGhlIG1zZyB0b2dldGhlciB3aXRoIHRoZSBlcnJvciBzbyBpdCBhdCBsZWFzdFxuICAgICAgICogZ2l2ZXMgc29tZSBjbHVlIGFib3V0IHdoZXJlIGluIHlvdXIgYXBwbGljYXRpb24gdGhpcyBoYXBwZW5zLlxuICAgICAgICovXG4gICAgICBKU09OLnN0cmluZ2lmeShtc2cpKTtcbiAgICB9XG4gICAgcmV0dXJuIF9wb3N0KHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgfSxcbiAgcG9zdEludGVybmFsOiBmdW5jdGlvbiBwb3N0SW50ZXJuYWwobXNnKSB7XG4gICAgcmV0dXJuIF9wb3N0KHRoaXMsICdpbnRlcm5hbCcsIG1zZyk7XG4gIH0sXG4gIHNldCBvbm1lc3NhZ2UoZm4pIHtcbiAgICB2YXIgdGltZSA9IHRoaXMubWV0aG9kLm1pY3JvU2Vjb25kcygpO1xuICAgIHZhciBsaXN0ZW5PYmogPSB7XG4gICAgICB0aW1lOiB0aW1lLFxuICAgICAgZm46IGZuXG4gICAgfTtcbiAgICBfcmVtb3ZlTGlzdGVuZXJPYmplY3QodGhpcywgJ21lc3NhZ2UnLCB0aGlzLl9vbk1MKTtcbiAgICBpZiAoZm4gJiYgdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl9vbk1MID0gbGlzdGVuT2JqO1xuICAgICAgX2FkZExpc3RlbmVyT2JqZWN0KHRoaXMsICdtZXNzYWdlJywgbGlzdGVuT2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb25NTCA9IG51bGw7XG4gICAgfVxuICB9LFxuICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuKSB7XG4gICAgdmFyIHRpbWUgPSB0aGlzLm1ldGhvZC5taWNyb1NlY29uZHMoKTtcbiAgICB2YXIgbGlzdGVuT2JqID0ge1xuICAgICAgdGltZTogdGltZSxcbiAgICAgIGZuOiBmblxuICAgIH07XG4gICAgX2FkZExpc3RlbmVyT2JqZWN0KHRoaXMsIHR5cGUsIGxpc3Rlbk9iaik7XG4gIH0sXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZm4pIHtcbiAgICB2YXIgb2JqID0gdGhpcy5fYWRkRUxbdHlwZV0uZmluZChmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gb2JqLmZuID09PSBmbjtcbiAgICB9KTtcbiAgICBfcmVtb3ZlTGlzdGVuZXJPYmplY3QodGhpcywgdHlwZSwgb2JqKTtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIE9QRU5fQlJPQURDQVNUX0NIQU5ORUxTW1wiZGVsZXRlXCJdKHRoaXMpO1xuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB2YXIgYXdhaXRQcmVwYXJlID0gdGhpcy5fcHJlcFAgPyB0aGlzLl9wcmVwUCA6IFBST01JU0VfUkVTT0xWRURfVk9JRDtcbiAgICB0aGlzLl9vbk1MID0gbnVsbDtcbiAgICB0aGlzLl9hZGRFTC5tZXNzYWdlID0gW107XG4gICAgcmV0dXJuIGF3YWl0UHJlcGFyZVxuICAgIC8vIHdhaXQgdW50aWwgYWxsIGN1cnJlbnQgc2VuZGluZyBhcmUgcHJvY2Vzc2VkXG4gICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKEFycmF5LmZyb20oX3RoaXMuX3VNUCkpO1xuICAgIH0pXG4gICAgLy8gcnVuIGJlZm9yZS1jbG9zZSBob29rc1xuICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChfdGhpcy5fYmVmQy5tYXAoZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSkpO1xuICAgIH0pXG4gICAgLy8gY2xvc2UgdGhlIGNoYW5uZWxcbiAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMubWV0aG9kLmNsb3NlKF90aGlzLl9zdGF0ZSk7XG4gICAgfSk7XG4gIH0sXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGhvZC50eXBlO1xuICB9LFxuICBnZXQgaXNDbG9zZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VkO1xuICB9XG59O1xuXG4vKipcbiAqIFBvc3QgYSBtZXNzYWdlIG92ZXIgdGhlIGNoYW5uZWxcbiAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVkIHdoZW4gdGhlIG1lc3NhZ2Ugc2VuZGluZyBpcyBkb25lXG4gKi9cbmZ1bmN0aW9uIF9wb3N0KGJyb2FkY2FzdENoYW5uZWwsIHR5cGUsIG1zZykge1xuICB2YXIgdGltZSA9IGJyb2FkY2FzdENoYW5uZWwubWV0aG9kLm1pY3JvU2Vjb25kcygpO1xuICB2YXIgbXNnT2JqID0ge1xuICAgIHRpbWU6IHRpbWUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBkYXRhOiBtc2dcbiAgfTtcbiAgdmFyIGF3YWl0UHJlcGFyZSA9IGJyb2FkY2FzdENoYW5uZWwuX3ByZXBQID8gYnJvYWRjYXN0Q2hhbm5lbC5fcHJlcFAgOiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7XG4gIHJldHVybiBhd2FpdFByZXBhcmUudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbmRQcm9taXNlID0gYnJvYWRjYXN0Q2hhbm5lbC5tZXRob2QucG9zdE1lc3NhZ2UoYnJvYWRjYXN0Q2hhbm5lbC5fc3RhdGUsIG1zZ09iaik7XG5cbiAgICAvLyBhZGQvcmVtb3ZlIHRvIHVuc2VudCBtZXNzYWdlcyBsaXN0XG4gICAgYnJvYWRjYXN0Q2hhbm5lbC5fdU1QLmFkZChzZW5kUHJvbWlzZSk7XG4gICAgc2VuZFByb21pc2VbXCJjYXRjaFwiXSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJyb2FkY2FzdENoYW5uZWwuX3VNUFtcImRlbGV0ZVwiXShzZW5kUHJvbWlzZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbmRQcm9taXNlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIF9wcmVwYXJlQ2hhbm5lbChjaGFubmVsKSB7XG4gIHZhciBtYXliZVByb21pc2UgPSBjaGFubmVsLm1ldGhvZC5jcmVhdGUoY2hhbm5lbC5uYW1lLCBjaGFubmVsLm9wdGlvbnMpO1xuICBpZiAoaXNQcm9taXNlKG1heWJlUHJvbWlzZSkpIHtcbiAgICBjaGFubmVsLl9wcmVwUCA9IG1heWJlUHJvbWlzZTtcbiAgICBtYXliZVByb21pc2UudGhlbihmdW5jdGlvbiAocykge1xuICAgICAgLy8gdXNlZCBpbiB0ZXN0cyB0byBzaW11bGF0ZSBzbG93IHJ1bnRpbWVcbiAgICAgIC8qaWYgKGNoYW5uZWwub3B0aW9ucy5wcmVwYXJlRGVsYXkpIHtcbiAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IHNldFRpbWVvdXQocmVzLCB0aGlzLm9wdGlvbnMucHJlcGFyZURlbGF5KSk7XG4gICAgICB9Ki9cbiAgICAgIGNoYW5uZWwuX3N0YXRlID0gcztcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjaGFubmVsLl9zdGF0ZSA9IG1heWJlUHJvbWlzZTtcbiAgfVxufVxuZnVuY3Rpb24gX2hhc01lc3NhZ2VMaXN0ZW5lcnMoY2hhbm5lbCkge1xuICBpZiAoY2hhbm5lbC5fYWRkRUwubWVzc2FnZS5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGNoYW5uZWwuX2FkZEVMLmludGVybmFsLmxlbmd0aCA+IDApIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBfYWRkTGlzdGVuZXJPYmplY3QoY2hhbm5lbCwgdHlwZSwgb2JqKSB7XG4gIGNoYW5uZWwuX2FkZEVMW3R5cGVdLnB1c2gob2JqKTtcbiAgX3N0YXJ0TGlzdGVuaW5nKGNoYW5uZWwpO1xufVxuZnVuY3Rpb24gX3JlbW92ZUxpc3RlbmVyT2JqZWN0KGNoYW5uZWwsIHR5cGUsIG9iaikge1xuICBjaGFubmVsLl9hZGRFTFt0eXBlXSA9IGNoYW5uZWwuX2FkZEVMW3R5cGVdLmZpbHRlcihmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICE9PSBvYmo7XG4gIH0pO1xuICBfc3RvcExpc3RlbmluZyhjaGFubmVsKTtcbn1cbmZ1bmN0aW9uIF9zdGFydExpc3RlbmluZyhjaGFubmVsKSB7XG4gIGlmICghY2hhbm5lbC5faUwgJiYgX2hhc01lc3NhZ2VMaXN0ZW5lcnMoY2hhbm5lbCkpIHtcbiAgICAvLyBzb21lb25lIGlzIGxpc3RlbmluZywgc3RhcnQgc3Vic2NyaWJpbmdcblxuICAgIHZhciBsaXN0ZW5lckZuID0gZnVuY3Rpb24gbGlzdGVuZXJGbihtc2dPYmopIHtcbiAgICAgIGNoYW5uZWwuX2FkZEVMW21zZ09iai50eXBlXS5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lck9iamVjdCkge1xuICAgICAgICBpZiAobXNnT2JqLnRpbWUgPj0gbGlzdGVuZXJPYmplY3QudGltZSkge1xuICAgICAgICAgIGxpc3RlbmVyT2JqZWN0LmZuKG1zZ09iai5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgdGltZSA9IGNoYW5uZWwubWV0aG9kLm1pY3JvU2Vjb25kcygpO1xuICAgIGlmIChjaGFubmVsLl9wcmVwUCkge1xuICAgICAgY2hhbm5lbC5fcHJlcFAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNoYW5uZWwuX2lMID0gdHJ1ZTtcbiAgICAgICAgY2hhbm5lbC5tZXRob2Qub25NZXNzYWdlKGNoYW5uZWwuX3N0YXRlLCBsaXN0ZW5lckZuLCB0aW1lKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFubmVsLl9pTCA9IHRydWU7XG4gICAgICBjaGFubmVsLm1ldGhvZC5vbk1lc3NhZ2UoY2hhbm5lbC5fc3RhdGUsIGxpc3RlbmVyRm4sIHRpbWUpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gX3N0b3BMaXN0ZW5pbmcoY2hhbm5lbCkge1xuICBpZiAoY2hhbm5lbC5faUwgJiYgIV9oYXNNZXNzYWdlTGlzdGVuZXJzKGNoYW5uZWwpKSB7XG4gICAgLy8gbm8gb25lIGlzIGxpc3RlbmluZywgc3RvcCBzdWJzY3JpYmluZ1xuICAgIGNoYW5uZWwuX2lMID0gZmFsc2U7XG4gICAgdmFyIHRpbWUgPSBjaGFubmVsLm1ldGhvZC5taWNyb1NlY29uZHMoKTtcbiAgICBjaGFubmVsLm1ldGhvZC5vbk1lc3NhZ2UoY2hhbm5lbC5fc3RhdGUsIG51bGwsIHRpbWUpO1xuICB9XG59IiwgIi8qIGdsb2JhbCBXb3JrZXJHbG9iYWxTY29wZSAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQnJvd3Nlcihmbikge1xuICBpZiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlID09PSAnZnVuY3Rpb24nICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSkge1xuICAgIC8qKlxuICAgICAqIEJlY2F1c2Uga2lsbGluZyBhIHdvcmtlciBkb2VzIGRpcmVjdGx5IHN0b3AgdGhlIGV4Y3V0aW9uXG4gICAgICogb2YgdGhlIGNvZGUsIG91ciBvbmx5IGNoYW5jZSBpcyB0byBvdmVyd3JpdGUgdGhlIGNsb3NlIGZ1bmN0aW9uXG4gICAgICogd2hpY2ggY291bGQgd29yayBzb21lIHRpbWVzLlxuICAgICAqIEBsaW5rIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS83MjkwMzI1NS8zNDQzMTM3XG4gICAgICovXG4gICAgdmFyIG9sZENsb3NlID0gc2VsZi5jbG9zZS5iaW5kKHNlbGYpO1xuICAgIHNlbGYuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmbigpO1xuICAgICAgcmV0dXJuIG9sZENsb3NlKCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvKipcbiAgICAgKiBpZiB3ZSBhcmUgb24gcmVhY3QtbmF0aXZlLCB0aGVyZSBpcyBubyB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lclxuICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9wdWJrZXkvdW5sb2FkL2lzc3Vlcy82XG4gICAgICovXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZvciBub3JtYWwgYnJvd3Nlci13aW5kb3dzLCB3ZSB1c2UgdGhlIGJlZm9yZXVubG9hZC1ldmVudFxuICAgICAqL1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbigpO1xuICAgIH0sIHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogZm9yIGlmcmFtZXMsIHdlIGhhdmUgdG8gdXNlIHRoZSB1bmxvYWQtZXZlbnRcbiAgICAgKiBAbGluayBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvNDc1MzM2NzAvMzQ0MzEzN1xuICAgICAqL1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbigpO1xuICAgIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRPRE8gYWRkIGZhbGxiYWNrIGZvciBzYWZhcmktbW9iaWxlXG4gICAqIEBsaW5rIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjE5MzUxNi8zNDQzMTM3XG4gICAqL1xufSIsICJleHBvcnQgZnVuY3Rpb24gYWRkTm9kZShmbikge1xuICBwcm9jZXNzLm9uKCdleGl0JywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmbigpO1xuICB9KTtcblxuICAvKipcbiAgICogb24gdGhlIGZvbGxvd2luZyBldmVudHMsXG4gICAqIHRoZSBwcm9jZXNzIHdpbGwgbm90IGVuZCBpZiB0aGVyZSBhcmVcbiAgICogZXZlbnQtaGFuZGxlcnMgYXR0YWNoZWQsXG4gICAqIHRoZXJlZm9yZSB3ZSBoYXZlIHRvIGNhbGwgcHJvY2Vzcy5leGl0KClcbiAgICovXG4gIHByb2Nlc3Mub24oJ2JlZm9yZUV4aXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZuKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzcy5leGl0KCk7XG4gICAgfSk7XG4gIH0pO1xuICAvLyBjYXRjaGVzIGN0cmwrYyBldmVudFxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZuKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzcy5leGl0KCk7XG4gICAgfSk7XG4gIH0pO1xuICAvLyBjYXRjaGVzIHVuY2F1Z2h0IGV4Y2VwdGlvbnNcbiAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgcmV0dXJuIGZuKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zb2xlLnRyYWNlKGVycik7XG4gICAgICBwcm9jZXNzLmV4aXQoMTAxKTtcbiAgICB9KTtcbiAgfSk7XG59IiwgImltcG9ydCB7IGFkZEJyb3dzZXIgfSBmcm9tICcuL2Jyb3dzZXIuanMnO1xuaW1wb3J0IHsgYWRkTm9kZSB9IGZyb20gJy4vbm9kZS5qcyc7XG5cbi8qKlxuICogVXNlIHRoZSBjb2RlIGRpcmVjdGx5IHRvIHByZXZlbnQgaW1wb3J0IHByb2JsZW1zXG4gKiB3aXRoIHRoZSBkZXRlY3Qtbm9kZSBwYWNrYWdlLlxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2lsaWFrYW4vZGV0ZWN0LW5vZGUvYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAqL1xudmFyIGlzTm9kZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgPyBwcm9jZXNzIDogMCkgPT09ICdbb2JqZWN0IHByb2Nlc3NdJztcbnZhciBVU0VfTUVUSE9EID0gaXNOb2RlID8gYWRkTm9kZSA6IGFkZEJyb3dzZXI7XG52YXIgTElTVEVORVJTID0gbmV3IFNldCgpO1xudmFyIHN0YXJ0ZWRMaXN0ZW5pbmcgPSBmYWxzZTtcbmZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nKCkge1xuICBpZiAoc3RhcnRlZExpc3RlbmluZykge1xuICAgIHJldHVybjtcbiAgfVxuICBzdGFydGVkTGlzdGVuaW5nID0gdHJ1ZTtcbiAgVVNFX01FVEhPRChydW5BbGwpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFkZChmbikge1xuICBzdGFydExpc3RlbmluZygpO1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMaXN0ZW5lciBpcyBubyBmdW5jdGlvbicpO1xuICB9XG4gIExJU1RFTkVSUy5hZGQoZm4pO1xuICB2YXIgYWRkUmV0dXJuID0ge1xuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmV0dXJuIExJU1RFTkVSU1tcImRlbGV0ZVwiXShmbik7XG4gICAgfSxcbiAgICBydW46IGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgIExJU1RFTkVSU1tcImRlbGV0ZVwiXShmbik7XG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBhZGRSZXR1cm47XG59XG5leHBvcnQgZnVuY3Rpb24gcnVuQWxsKCkge1xuICB2YXIgcHJvbWlzZXMgPSBbXTtcbiAgTElTVEVORVJTLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgcHJvbWlzZXMucHVzaChmbigpKTtcbiAgICBMSVNURU5FUlNbXCJkZWxldGVcIl0oZm4pO1xuICB9KTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBbGwoKSB7XG4gIExJU1RFTkVSUy5jbGVhcigpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpemUoKSB7XG4gIHJldHVybiBMSVNURU5FUlMuc2l6ZTtcbn0iLCAiaW1wb3J0IHsgYWRkIGFzIHVubG9hZEFkZCB9IGZyb20gJ3VubG9hZCc7XG5cbi8qKlxuICogc2VuZHMgYW5kIGludGVybmFsIG1lc3NhZ2Ugb3ZlciB0aGUgYnJvYWRjYXN0LWNoYW5uZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRMZWFkZXJNZXNzYWdlKGxlYWRlckVsZWN0b3IsIGFjdGlvbikge1xuICB2YXIgbXNnSnNvbiA9IHtcbiAgICBjb250ZXh0OiAnbGVhZGVyJyxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICB0b2tlbjogbGVhZGVyRWxlY3Rvci50b2tlblxuICB9O1xuICByZXR1cm4gbGVhZGVyRWxlY3Rvci5icm9hZGNhc3RDaGFubmVsLnBvc3RJbnRlcm5hbChtc2dKc29uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBiZUxlYWRlcihsZWFkZXJFbGVjdG9yKSB7XG4gIGxlYWRlckVsZWN0b3IuaXNMZWFkZXIgPSB0cnVlO1xuICBsZWFkZXJFbGVjdG9yLl9oYXNMZWFkZXIgPSB0cnVlO1xuICB2YXIgdW5sb2FkRm4gPSB1bmxvYWRBZGQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsZWFkZXJFbGVjdG9yLmRpZSgpO1xuICB9KTtcbiAgbGVhZGVyRWxlY3Rvci5fdW5sLnB1c2godW5sb2FkRm4pO1xuICB2YXIgaXNMZWFkZXJMaXN0ZW5lciA9IGZ1bmN0aW9uIGlzTGVhZGVyTGlzdGVuZXIobXNnKSB7XG4gICAgaWYgKG1zZy5jb250ZXh0ID09PSAnbGVhZGVyJyAmJiBtc2cuYWN0aW9uID09PSAnYXBwbHknKSB7XG4gICAgICBzZW5kTGVhZGVyTWVzc2FnZShsZWFkZXJFbGVjdG9yLCAndGVsbCcpO1xuICAgIH1cbiAgICBpZiAobXNnLmNvbnRleHQgPT09ICdsZWFkZXInICYmIG1zZy5hY3Rpb24gPT09ICd0ZWxsJyAmJiAhbGVhZGVyRWxlY3Rvci5fZHBMQykge1xuICAgICAgLyoqXG4gICAgICAgKiBhbm90aGVyIGluc3RhbmNlIGlzIGFsc28gbGVhZGVyIVxuICAgICAgICogVGhpcyBjYW4gaGFwcGVuIG9uIHJhcmUgZXZlbnRzXG4gICAgICAgKiBsaWtlIHdoZW4gdGhlIENQVSBpcyBhdCAxMDAlIGZvciBsb25nIHRpbWVcbiAgICAgICAqIG9yIHRoZSB0YWJzIGFyZSBvcGVuIHZlcnkgbG9uZyBhbmQgdGhlIGJyb3dzZXIgdGhyb3R0bGVzIHRoZW0uXG4gICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vcHVia2V5L2Jyb2FkY2FzdC1jaGFubmVsL2lzc3Vlcy80MTRcbiAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9wdWJrZXkvYnJvYWRjYXN0LWNoYW5uZWwvaXNzdWVzLzM4NVxuICAgICAgICovXG4gICAgICBsZWFkZXJFbGVjdG9yLl9kcExDID0gdHJ1ZTtcbiAgICAgIGxlYWRlckVsZWN0b3IuX2RwTCgpOyAvLyBtZXNzYWdlIHRoZSBsaWIgdXNlciBzbyB0aGUgYXBwIGNhbiBoYW5kbGUgdGhlIHByb2JsZW1cbiAgICAgIHNlbmRMZWFkZXJNZXNzYWdlKGxlYWRlckVsZWN0b3IsICd0ZWxsJyk7IC8vIGVuc3VyZSBvdGhlciBsZWFkZXIgYWxzbyBrbm93cyB0aGUgcHJvYmxlbVxuICAgIH1cbiAgfTtcbiAgbGVhZGVyRWxlY3Rvci5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2ludGVybmFsJywgaXNMZWFkZXJMaXN0ZW5lcik7XG4gIGxlYWRlckVsZWN0b3IuX2xzdG5zLnB1c2goaXNMZWFkZXJMaXN0ZW5lcik7XG4gIHJldHVybiBzZW5kTGVhZGVyTWVzc2FnZShsZWFkZXJFbGVjdG9yLCAndGVsbCcpO1xufSIsICJpbXBvcnQgeyByYW5kb21Ub2tlbiB9IGZyb20gJy4vdXRpbC5qcyc7XG5pbXBvcnQgeyBzZW5kTGVhZGVyTWVzc2FnZSwgYmVMZWFkZXIgfSBmcm9tICcuL2xlYWRlci1lbGVjdGlvbi11dGlsLmpzJztcblxuLyoqXG4gKiBBIGZhc3RlciB2ZXJzaW9uIG9mIHRoZSBsZWFkZXIgZWxlY3RvciB0aGF0IHVzZXMgdGhlIFdlYkxvY2sgQVBJXG4gKiBAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViX0xvY2tzX0FQSVxuICovXG5leHBvcnQgdmFyIExlYWRlckVsZWN0aW9uV2ViTG9jayA9IGZ1bmN0aW9uIExlYWRlckVsZWN0aW9uV2ViTG9jayhicm9hZGNhc3RDaGFubmVsLCBvcHRpb25zKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCA9IGJyb2FkY2FzdENoYW5uZWw7XG4gIGJyb2FkY2FzdENoYW5uZWwuX2JlZkMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90aGlzLmRpZSgpO1xuICB9KTtcbiAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMuaXNMZWFkZXIgPSBmYWxzZTtcbiAgdGhpcy5pc0RlYWQgPSBmYWxzZTtcbiAgdGhpcy50b2tlbiA9IHJhbmRvbVRva2VuKCk7XG4gIHRoaXMuX2xzdG5zID0gW107XG4gIHRoaXMuX3VubCA9IFtdO1xuICB0aGlzLl9kcEwgPSBmdW5jdGlvbiAoKSB7fTsgLy8gb25kdXBsaWNhdGUgbGlzdGVuZXJcbiAgdGhpcy5fZHBMQyA9IGZhbHNlOyAvLyB0cnVlIHdoZW4gb25kdXBsaWNhdGUgY2FsbGVkXG5cbiAgdGhpcy5fd0tNQyA9IHt9OyAvLyBzdHVmZiBmb3IgY2xlYW51cFxuXG4gIC8vIGxvY2sgbmFtZVxuICB0aGlzLmxOID0gJ3B1YmtleS1iY3x8JyArIGJyb2FkY2FzdENoYW5uZWwubWV0aG9kLnR5cGUgKyAnfHwnICsgYnJvYWRjYXN0Q2hhbm5lbC5uYW1lO1xufTtcbkxlYWRlckVsZWN0aW9uV2ViTG9jay5wcm90b3R5cGUgPSB7XG4gIGhhc0xlYWRlcjogZnVuY3Rpb24gaGFzTGVhZGVyKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgIHJldHVybiBuYXZpZ2F0b3IubG9ja3MucXVlcnkoKS50aGVuKGZ1bmN0aW9uIChsb2Nrcykge1xuICAgICAgdmFyIHJlbGV2YW50TG9ja3MgPSBsb2Nrcy5oZWxkID8gbG9ja3MuaGVsZC5maWx0ZXIoZnVuY3Rpb24gKGxvY2spIHtcbiAgICAgICAgcmV0dXJuIGxvY2submFtZSA9PT0gX3RoaXMyLmxOO1xuICAgICAgfSkgOiBbXTtcbiAgICAgIGlmIChyZWxldmFudExvY2tzICYmIHJlbGV2YW50TG9ja3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbiAgYXdhaXRMZWFkZXJzaGlwOiBmdW5jdGlvbiBhd2FpdExlYWRlcnNoaXAoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgaWYgKCF0aGlzLl93TE1QKSB7XG4gICAgICB0aGlzLl93S01DLmMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICB2YXIgcmV0dXJuUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikge1xuICAgICAgICBfdGhpczMuX3dLTUMucmVzID0gcmVzO1xuICAgICAgICBfdGhpczMuX3dLTUMucmVqID0gcmVqO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl93TE1QID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqZWN0KSB7XG4gICAgICAgIG5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0KF90aGlzMy5sTiwge1xuICAgICAgICAgIHNpZ25hbDogX3RoaXMzLl93S01DLmMuc2lnbmFsXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBpZiB0aGUgbG9jayByZXNvbHZlZCwgd2UgY2FuIGRyb3AgdGhlIGFib3J0IGNvbnRyb2xsZXJcbiAgICAgICAgICBfdGhpczMuX3dLTUMuYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBiZUxlYWRlcihfdGhpczMpO1xuICAgICAgICAgIHJlcygpO1xuICAgICAgICAgIHJldHVybiByZXR1cm5Qcm9taXNlO1xuICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLl93S01DLnJlaikge1xuICAgICAgICAgICAgX3RoaXMzLl93S01DLnJlaihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dMTVA7XG4gIH0sXG4gIHNldCBvbmR1cGxpY2F0ZShfZm4pIHtcbiAgICAvLyBEbyBub3RoaW5nIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZXMgaW4gdGhlIFdlYkxvY2sgdmVyc2lvblxuICB9LFxuICBkaWU6IGZ1bmN0aW9uIGRpZSgpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICB0aGlzLl9sc3Rucy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF90aGlzNC5icm9hZGNhc3RDaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ludGVybmFsJywgbGlzdGVuZXIpO1xuICAgIH0pO1xuICAgIHRoaXMuX2xzdG5zID0gW107XG4gICAgdGhpcy5fdW5sLmZvckVhY2goZnVuY3Rpb24gKHVGbikge1xuICAgICAgcmV0dXJuIHVGbi5yZW1vdmUoKTtcbiAgICB9KTtcbiAgICB0aGlzLl91bmwgPSBbXTtcbiAgICBpZiAodGhpcy5pc0xlYWRlcikge1xuICAgICAgdGhpcy5pc0xlYWRlciA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmlzRGVhZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuX3dLTUMucmVzKSB7XG4gICAgICB0aGlzLl93S01DLnJlcygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fd0tNQy5jKSB7XG4gICAgICB0aGlzLl93S01DLmMuYWJvcnQoJ0xlYWRlckVsZWN0aW9uV2ViTG9jay5kaWUoKSBjYWxsZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbmRMZWFkZXJNZXNzYWdlKHRoaXMsICdkZWF0aCcpO1xuICB9XG59OyIsICJpbXBvcnQgeyBzbGVlcCwgcmFuZG9tVG9rZW4sIFBST01JU0VfUkVTT0xWRURfVk9JRCwgUFJPTUlTRV9SRVNPTFZFRF9UUlVFLCBzdXBwb3J0c1dlYkxvY2tBUEkgfSBmcm9tICcuL3V0aWwuanMnO1xuaW1wb3J0IHsgc2VuZExlYWRlck1lc3NhZ2UsIGJlTGVhZGVyIH0gZnJvbSAnLi9sZWFkZXItZWxlY3Rpb24tdXRpbC5qcyc7XG5pbXBvcnQgeyBMZWFkZXJFbGVjdGlvbldlYkxvY2sgfSBmcm9tICcuL2xlYWRlci1lbGVjdGlvbi13ZWItbG9jay5qcyc7XG52YXIgTGVhZGVyRWxlY3Rpb24gPSBmdW5jdGlvbiBMZWFkZXJFbGVjdGlvbihicm9hZGNhc3RDaGFubmVsLCBvcHRpb25zKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCA9IGJyb2FkY2FzdENoYW5uZWw7XG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLmlzTGVhZGVyID0gZmFsc2U7XG4gIHRoaXMuX2hhc0xlYWRlciA9IGZhbHNlO1xuICB0aGlzLmlzRGVhZCA9IGZhbHNlO1xuICB0aGlzLnRva2VuID0gcmFuZG9tVG9rZW4oKTtcblxuICAvKipcbiAgICogQXBwbHkgUXVldWUsXG4gICAqIHVzZWQgdG8gZW5zdXJlIHdlIGRvIG5vdCBydW4gYXBwbHlPbmNlKClcbiAgICogaW4gcGFyYWxsZWwuXG4gICAqL1xuICB0aGlzLl9hcGxRID0gUFJPTUlTRV9SRVNPTFZFRF9WT0lEO1xuICAvLyBhbW91bnQgb2YgdW5maW5pc2hlZCBhcHBseU9uY2UoKSBjYWxsc1xuICB0aGlzLl9hcGxRQyA9IDA7XG5cbiAgLy8gdGhpbmdzIHRvIGNsZWFuIHVwXG4gIHRoaXMuX3VubCA9IFtdOyAvLyBfdW5sb2Fkc1xuICB0aGlzLl9sc3RucyA9IFtdOyAvLyBfbGlzdGVuZXJzXG4gIHRoaXMuX2RwTCA9IGZ1bmN0aW9uICgpIHt9OyAvLyBvbmR1cGxpY2F0ZSBsaXN0ZW5lclxuICB0aGlzLl9kcExDID0gZmFsc2U7IC8vIHRydWUgd2hlbiBvbmR1cGxpY2F0ZSBjYWxsZWRcblxuICAvKipcbiAgICogRXZlbiB3aGVuIHRoZSBvd24gaW5zdGFuY2UgaXMgbm90IGFwcGx5aW5nLFxuICAgKiB3ZSBzdGlsbCBsaXN0ZW4gdG8gbWVzc2FnZXMgdG8gZW5zdXJlIHRoZSBoYXNMZWFkZXIgZmxhZ1xuICAgKiBpcyBzZXQgY29ycmVjdGx5LlxuICAgKi9cbiAgdmFyIGhhc0xlYWRlckxpc3RlbmVyID0gZnVuY3Rpb24gaGFzTGVhZGVyTGlzdGVuZXIobXNnKSB7XG4gICAgaWYgKG1zZy5jb250ZXh0ID09PSAnbGVhZGVyJykge1xuICAgICAgaWYgKG1zZy5hY3Rpb24gPT09ICdkZWF0aCcpIHtcbiAgICAgICAgX3RoaXMuX2hhc0xlYWRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG1zZy5hY3Rpb24gPT09ICd0ZWxsJykge1xuICAgICAgICBfdGhpcy5faGFzTGVhZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCdpbnRlcm5hbCcsIGhhc0xlYWRlckxpc3RlbmVyKTtcbiAgdGhpcy5fbHN0bnMucHVzaChoYXNMZWFkZXJMaXN0ZW5lcik7XG59O1xuTGVhZGVyRWxlY3Rpb24ucHJvdG90eXBlID0ge1xuICBoYXNMZWFkZXI6IGZ1bmN0aW9uIGhhc0xlYWRlcigpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2hhc0xlYWRlcik7XG4gIH0sXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGluc3RhbmNlIGlzIGxlYWRlcixcbiAgICogZmFsc2UgaWYgbm90LlxuICAgKiBAYXN5bmNcbiAgICovXG4gIGFwcGx5T25jZTogZnVuY3Rpb24gYXBwbHlPbmNlKFxuICAvLyB0cnVlIGlmIHRoZSBhcHBseU9uY2UoKSBjYWxsIGNhbWUgZnJvbSB0aGUgZmFsbGJhY2tJbnRlcnZhbCBjeWNsZVxuICBpc0Zyb21GYWxsYmFja0ludGVydmFsKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuaXNMZWFkZXIpIHtcbiAgICAgIHJldHVybiBzbGVlcCgwLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNEZWFkKSB7XG4gICAgICByZXR1cm4gc2xlZXAoMCwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFscmVhZHkgYXBwbHlpbmcgbW9yZSB0aGFuIG9uY2UsXG4gICAgICogLT4gd2FpdCBmb3IgdGhlIGFwcGx5IHF1ZXVlIHRvIGJlIGZpbmlzaGVkLlxuICAgICAqL1xuICAgIGlmICh0aGlzLl9hcGxRQyA+IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9hcGxRO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIG5ldyBhcHBseS1ydW5cbiAgICAgKi9cbiAgICB2YXIgYXBwbHlSdW4gPSBmdW5jdGlvbiBhcHBseVJ1bigpIHtcbiAgICAgIC8qKlxuICAgICAgICogT3B0aW1pemF0aW9uIHNob3J0Y3V0cy5cbiAgICAgICAqIERpcmVjdGx5IHJldHVybiBpZiBhIHByZXZpb3VzIHJ1blxuICAgICAgICogaGFzIGFscmVhZHkgZWxlY3RlZCBhIGxlYWRlci5cbiAgICAgICAqL1xuICAgICAgaWYgKF90aGlzMi5pc0xlYWRlcikge1xuICAgICAgICByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9UUlVFO1xuICAgICAgfVxuICAgICAgdmFyIHN0b3BDcml0ZXJpYSA9IGZhbHNlO1xuICAgICAgdmFyIHN0b3BDcml0ZXJpYVByb21pc2VSZXNvbHZlO1xuICAgICAgLyoqXG4gICAgICAgKiBSZXNvbHZlcyB3aGVuIGEgc3RvcCBjcml0ZXJpYSBpcyByZWFjaGVkLlxuICAgICAgICogVXNlcyBhcyBhIHBlcmZvcm1hbmNlIHNob3J0Y3V0IHNvIHdlIGRvIG5vdFxuICAgICAgICogaGF2ZSB0byBhd2FpdCB0aGUgcmVzcG9uc2VUaW1lIHdoZW4gaXQgaXMgYWxyZWFkeSBjbGVhclxuICAgICAgICogdGhhdCB0aGUgZWxlY3Rpb24gZmFpbGVkLlxuICAgICAgICovXG4gICAgICB2YXIgc3RvcENyaXRlcmlhUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgc3RvcENyaXRlcmlhUHJvbWlzZVJlc29sdmUgPSBmdW5jdGlvbiBzdG9wQ3JpdGVyaWFQcm9taXNlUmVzb2x2ZSgpIHtcbiAgICAgICAgICBzdG9wQ3JpdGVyaWEgPSB0cnVlO1xuICAgICAgICAgIHJlcygpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB2YXIgaGFuZGxlTWVzc2FnZSA9IGZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2UobXNnKSB7XG4gICAgICAgIGlmIChtc2cuY29udGV4dCA9PT0gJ2xlYWRlcicgJiYgbXNnLnRva2VuICE9IF90aGlzMi50b2tlbikge1xuICAgICAgICAgIGlmIChtc2cuYWN0aW9uID09PSAnYXBwbHknKSB7XG4gICAgICAgICAgICAvLyBvdGhlciBpcyBhcHBseWluZ1xuICAgICAgICAgICAgaWYgKG1zZy50b2tlbiA+IF90aGlzMi50b2tlbikge1xuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogb3RoZXIgaGFzIGhpZ2hlciB0b2tlblxuICAgICAgICAgICAgICAgKiAtPiBzdG9wIGFwcGx5aW5nIGFuZCBsZXQgb3RoZXIgYmVjb21lIGxlYWRlci5cbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIHN0b3BDcml0ZXJpYVByb21pc2VSZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtc2cuYWN0aW9uID09PSAndGVsbCcpIHtcbiAgICAgICAgICAgIC8vIG90aGVyIGlzIGFscmVhZHkgbGVhZGVyXG4gICAgICAgICAgICBzdG9wQ3JpdGVyaWFQcm9taXNlUmVzb2x2ZSgpO1xuICAgICAgICAgICAgX3RoaXMyLl9oYXNMZWFkZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIF90aGlzMi5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2ludGVybmFsJywgaGFuZGxlTWVzc2FnZSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogSWYgdGhlIGFwcGx5T25jZSgpIGNhbGwgY2FtZSBmcm9tIHRoZSBmYWxsYmFja0ludGVydmFsLFxuICAgICAgICogd2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBlbGVjdGlvbiBydW5zIGluIHRoZSBiYWNrZ3JvdW5kIGFuZFxuICAgICAgICogbm90IGNyaXRpY2FsIHByb2Nlc3MgaXMgd2FpdGluZyBmb3IgaXQuXG4gICAgICAgKiBXaGVuIHRoaXMgaXMgdHJ1ZSwgd2UgZ2l2ZSB0aGUgb3RoZXIgaW5zdGFuY2VzXG4gICAgICAgKiBtb3JlIHRpbWUgdG8gYW5zd2VyIHRvIG1lc3NhZ2VzIGluIHRoZSBlbGVjdGlvbiBjeWNsZS5cbiAgICAgICAqIFRoaXMgbWFrZXMgaXQgbGVzcyBsaWtlbHkgdG8gZWxlY3QgZHVwbGljYXRlIGxlYWRlcnMuXG4gICAgICAgKiBCdXQgYWxzbyBpdCB0YWtlcyBsb25nZXIgd2hpY2ggaXMgbm90IGEgcHJvYmxlbSBiZWNhdXNlIHdlIGFueXdheVxuICAgICAgICogcnVuIGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgICAgICovXG4gICAgICB2YXIgd2FpdEZvckFuc3dlclRpbWUgPSBpc0Zyb21GYWxsYmFja0ludGVydmFsID8gX3RoaXMyLl9vcHRpb25zLnJlc3BvbnNlVGltZSAqIDQgOiBfdGhpczIuX29wdGlvbnMucmVzcG9uc2VUaW1lO1xuICAgICAgcmV0dXJuIHNlbmRMZWFkZXJNZXNzYWdlKF90aGlzMiwgJ2FwcGx5JykgLy8gc2VuZCBvdXQgdGhhdCB0aGlzIG9uZSBpcyBhcHBseWluZ1xuICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtzbGVlcCh3YWl0Rm9yQW5zd2VyVGltZSksIHN0b3BDcml0ZXJpYVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigpKTtcbiAgICAgICAgfSldKTtcbiAgICAgIH0pXG4gICAgICAvLyBzZW5kIGFnYWluIGluIGNhc2UgYW5vdGhlciBpbnN0YW5jZSB3YXMganVzdCBjcmVhdGVkXG4gICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzZW5kTGVhZGVyTWVzc2FnZShfdGhpczIsICdhcHBseScpO1xuICAgICAgfSlcbiAgICAgIC8vIGxldCBvdGhlcnMgdGltZSB0byByZXNwb25kXG4gICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW3NsZWVwKHdhaXRGb3JBbnN3ZXJUaW1lKSwgc3RvcENyaXRlcmlhUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCkpO1xuICAgICAgICB9KV0pO1xuICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7fSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5icm9hZGNhc3RDaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ludGVybmFsJywgaGFuZGxlTWVzc2FnZSk7XG4gICAgICAgIGlmICghc3RvcENyaXRlcmlhKSB7XG4gICAgICAgICAgLy8gbm8gc3RvcCBjcml0ZXJpYSAtPiBvd24gaXMgbGVhZGVyXG4gICAgICAgICAgcmV0dXJuIGJlTGVhZGVyKF90aGlzMikudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlciBpcyBsZWFkZXJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fYXBsUUMgPSB0aGlzLl9hcGxRQyArIDE7XG4gICAgdGhpcy5fYXBsUSA9IHRoaXMuX2FwbFEudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYXBwbHlSdW4oKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5fYXBsUUMgPSBfdGhpczIuX2FwbFFDIC0gMTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fYXBsUS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczIuaXNMZWFkZXI7XG4gICAgfSk7XG4gIH0sXG4gIGF3YWl0TGVhZGVyc2hpcDogZnVuY3Rpb24gYXdhaXRMZWFkZXJzaGlwKCkge1xuICAgIGlmICgvKiBfYXdhaXRMZWFkZXJzaGlwUHJvbWlzZSAqL1xuICAgICF0aGlzLl9hTFApIHtcbiAgICAgIHRoaXMuX2FMUCA9IF9hd2FpdExlYWRlcnNoaXBPbmNlKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYUxQO1xuICB9LFxuICBzZXQgb25kdXBsaWNhdGUoZm4pIHtcbiAgICB0aGlzLl9kcEwgPSBmbjtcbiAgfSxcbiAgZGllOiBmdW5jdGlvbiBkaWUoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgdGhpcy5fbHN0bnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfdGhpczMuYnJvYWRjYXN0Q2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnRlcm5hbCcsIGxpc3RlbmVyKTtcbiAgICB9KTtcbiAgICB0aGlzLl9sc3RucyA9IFtdO1xuICAgIHRoaXMuX3VubC5mb3JFYWNoKGZ1bmN0aW9uICh1Rm4pIHtcbiAgICAgIHJldHVybiB1Rm4ucmVtb3ZlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5fdW5sID0gW107XG4gICAgaWYgKHRoaXMuaXNMZWFkZXIpIHtcbiAgICAgIHRoaXMuX2hhc0xlYWRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0xlYWRlciA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmlzRGVhZCA9IHRydWU7XG4gICAgcmV0dXJuIHNlbmRMZWFkZXJNZXNzYWdlKHRoaXMsICdkZWF0aCcpO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSBsZWFkZXJFbGVjdG9yIHtMZWFkZXJFbGVjdG9yfVxuICovXG5mdW5jdGlvbiBfYXdhaXRMZWFkZXJzaGlwT25jZShsZWFkZXJFbGVjdG9yKSB7XG4gIGlmIChsZWFkZXJFbGVjdG9yLmlzTGVhZGVyKSB7XG4gICAgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfVk9JRDtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcykge1xuICAgIHZhciByZXNvbHZlZCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlZCA9IHRydWU7XG4gICAgICBsZWFkZXJFbGVjdG9yLmJyb2FkY2FzdENoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW50ZXJuYWwnLCB3aGVuRGVhdGhMaXN0ZW5lcik7XG4gICAgICByZXModHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gdHJ5IG9uY2Ugbm93XG4gICAgbGVhZGVyRWxlY3Rvci5hcHBseU9uY2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChsZWFkZXJFbGVjdG9yLmlzTGVhZGVyKSB7XG4gICAgICAgIGZpbmlzaCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVHJ5IG9uIGZhbGxiYWNrSW50ZXJ2YWxcbiAgICAgKiBAcmVjdXJzaXZlXG4gICAgICovXG4gICAgdmFyIF90cnlPbkZhbGxCYWNrID0gZnVuY3Rpb24gdHJ5T25GYWxsQmFjaygpIHtcbiAgICAgIHJldHVybiBzbGVlcChsZWFkZXJFbGVjdG9yLl9vcHRpb25zLmZhbGxiYWNrSW50ZXJ2YWwpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0RlYWQgfHwgcmVzb2x2ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlYWRlckVsZWN0b3IuaXNMZWFkZXIpIHtcbiAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbGVhZGVyRWxlY3Rvci5hcHBseU9uY2UodHJ1ZSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0xlYWRlcikge1xuICAgICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF90cnlPbkZhbGxCYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RyeU9uRmFsbEJhY2soKTtcblxuICAgIC8vIHRyeSB3aGVuIG90aGVyIGxlYWRlciBkaWVzXG4gICAgdmFyIHdoZW5EZWF0aExpc3RlbmVyID0gZnVuY3Rpb24gd2hlbkRlYXRoTGlzdGVuZXIobXNnKSB7XG4gICAgICBpZiAobXNnLmNvbnRleHQgPT09ICdsZWFkZXInICYmIG1zZy5hY3Rpb24gPT09ICdkZWF0aCcpIHtcbiAgICAgICAgbGVhZGVyRWxlY3Rvci5faGFzTGVhZGVyID0gZmFsc2U7XG4gICAgICAgIGxlYWRlckVsZWN0b3IuYXBwbHlPbmNlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGxlYWRlckVsZWN0b3IuaXNMZWFkZXIpIHtcbiAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBsZWFkZXJFbGVjdG9yLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcignaW50ZXJuYWwnLCB3aGVuRGVhdGhMaXN0ZW5lcik7XG4gICAgbGVhZGVyRWxlY3Rvci5fbHN0bnMucHVzaCh3aGVuRGVhdGhMaXN0ZW5lcik7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucywgY2hhbm5lbCkge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuICBpZiAoIW9wdGlvbnMuZmFsbGJhY2tJbnRlcnZhbCkge1xuICAgIG9wdGlvbnMuZmFsbGJhY2tJbnRlcnZhbCA9IDMwMDA7XG4gIH1cbiAgaWYgKCFvcHRpb25zLnJlc3BvbnNlVGltZSkge1xuICAgIG9wdGlvbnMucmVzcG9uc2VUaW1lID0gY2hhbm5lbC5tZXRob2QuYXZlcmFnZVJlc3BvbnNlVGltZShjaGFubmVsLm9wdGlvbnMpO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlYWRlckVsZWN0aW9uKGNoYW5uZWwsIG9wdGlvbnMpIHtcbiAgaWYgKGNoYW5uZWwuX2xlYWRlckVsZWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jyb2FkY2FzdENoYW5uZWwgYWxyZWFkeSBoYXMgYSBsZWFkZXItZWxlY3RvcicpO1xuICB9XG4gIG9wdGlvbnMgPSBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0cyhvcHRpb25zLCBjaGFubmVsKTtcbiAgdmFyIGVsZWN0b3IgPSBzdXBwb3J0c1dlYkxvY2tBUEkoKSA/IG5ldyBMZWFkZXJFbGVjdGlvbldlYkxvY2soY2hhbm5lbCwgb3B0aW9ucykgOiBuZXcgTGVhZGVyRWxlY3Rpb24oY2hhbm5lbCwgb3B0aW9ucyk7XG4gIGNoYW5uZWwuX2JlZkMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGVsZWN0b3IuZGllKCk7XG4gIH0pO1xuICBjaGFubmVsLl9sZWFkZXJFbGVjdG9yID0gZWxlY3RvcjtcbiAgcmV0dXJuIGVsZWN0b3I7XG59IiwgImV4cG9ydCB7IEJyb2FkY2FzdENoYW5uZWwsIGNsZWFyTm9kZUZvbGRlciwgZW5mb3JjZU9wdGlvbnMsIE9QRU5fQlJPQURDQVNUX0NIQU5ORUxTIH0gZnJvbSAnLi9icm9hZGNhc3QtY2hhbm5lbC5qcyc7XG5leHBvcnQgeyBjcmVhdGVMZWFkZXJFbGVjdGlvbiB9IGZyb20gJy4vbGVhZGVyLWVsZWN0aW9uLmpzJztcbmV4cG9ydCB7IGJlTGVhZGVyIH0gZnJvbSAnLi9sZWFkZXItZWxlY3Rpb24tdXRpbC5qcyc7IiwgIi8vIHB1c2hyb2NrcyBzY29wZVxuaW1wb3J0ICogYXMgc21hcnRkZWxheSBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydGRlbGF5JztcbmltcG9ydCAqIGFzIHR5cGVkcmVxdWVzdEludGVyZmFjZXMgZnJvbSAnQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0LWludGVyZmFjZXMnO1xuaW1wb3J0ICogYXMgdHlwZWRyZXF1ZXN0IGZyb20gJ0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdCc7XG5cbmV4cG9ydCB7IHNtYXJ0ZGVsYXksIHR5cGVkcmVxdWVzdEludGVyZmFjZXMsIHR5cGVkcmVxdWVzdCB9O1xuXG4vLyB0aGlyZCBwYXJ0eSBzY29wZVxuaW1wb3J0IHsgQnJvYWRjYXN0Q2hhbm5lbCBhcyBCcm9hZENhc3RDaGFubmVsUG9seWZpbGwgfSBmcm9tICdicm9hZGNhc3QtY2hhbm5lbCc7XG5cbmV4cG9ydCB7XG4gIEJyb2FkQ2FzdENoYW5uZWxQb2x5ZmlsbFxufSIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vZGVlcy1jb21tcy5wbHVnaW5zLmpzJztcblxubGV0IEJyb2FkY2FzdENoYW5uZWwgPSBnbG9iYWxUaGlzLkJyb2FkY2FzdENoYW5uZWw7XG5pZiAoIUJyb2FkY2FzdENoYW5uZWwpIHtcbiAgQnJvYWRjYXN0Q2hhbm5lbCA9IHBsdWdpbnMuQnJvYWRDYXN0Q2hhbm5lbFBvbHlmaWxsIGFzIGFueTtcbn1cblxuLyoqXG4gKiBhIGNvbW0gY2xhc3MgZm9yIGNsaWVudCBzaWRlIGNvbW11bmljYXRpb24gYmV0d2VlbiB3b3JrZXJzIGFuZCB0YWJzLlxuICovXG5leHBvcnQgY2xhc3MgRGVlc0NvbW1zIHtcbiAgcHJpdmF0ZSBicm9hZGNhc3RDaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ2RlZXMtY29tbXMnKTtcbiAgXG4gIC8vIHNlbmRpbmcgbWVzc2FnZXNcbiAgcHVibGljIHR5cGVkcm91dGVyID0gbmV3IHBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUm91dGVyKCk7XG4gIHB1YmxpYyB0eXBlZHRhcmdldCA9IG5ldyBwbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFRhcmdldCh7XG4gICAgcG9zdE1ldGhvZFdpdGhUeXBlZFJvdXRlcjogYXN5bmMgKG1lc3NhZ2VBcmcpID0+IHtcbiAgICAgIHRoaXMucG9zdE1lc3NhZ2UobWVzc2FnZUFyZyk7XG4gICAgfSxcbiAgICB0eXBlZFJvdXRlclJlZjogdGhpcy50eXBlZHJvdXRlcixcbiAgfSk7XG5cbiAgLy8gcmVjZWl2aW5nIG1lc3NhZ2VzXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5vbm1lc3NhZ2UgPSBhc3luYyAoZXZlbnRBcmcpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAoZXZlbnRBcmcgYXMgYW55KS5tZXRob2QgPyBldmVudEFyZyA6IGV2ZW50QXJnLmRhdGE7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShtZXNzYWdlKSk7XG4gICAgICAvLyBTa2lwIGhvb2tzIGZvciBicm9hZGNhc3QtcmVjZWl2ZWQgbWVzc2FnZXMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wc1xuICAgICAgLy8gd2hlbiB0cmFmZmljIGxvZ2dpbmcgaG9va3MgYXJlIHNldCB1cCBnbG9iYWxseVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnR5cGVkcm91dGVyLnJvdXRlQW5kQWRkUmVzcG9uc2UobWVzc2FnZSwgeyBza2lwSG9va3M6IHRydWUgfSk7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgIXJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgIHRoaXMucG9zdE1lc3NhZ2UocmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlcyBhIHR5cGVkcmVxdWVzdCB3aXRoIHRoaXMgY2xhc3NlcyBwb3N0TWVzc2FnZSBhcyBwb3N0TWV0aG9kXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlVHlwZWRSZXF1ZXN0PFQgZXh0ZW5kcyBwbHVnaW5zLnR5cGVkcmVxdWVzdEludGVyZmFjZXMuSVR5cGVkUmVxdWVzdD4oXG4gICAgbWV0aG9kTmFtZTogVFsnbWV0aG9kJ11cbiAgKTogcGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0PFQ+IHtcbiAgICBjb25zdCB0eXBlZHJlcXVlc3QgPSBuZXcgcGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KHRoaXMudHlwZWR0YXJnZXQsIG1ldGhvZE5hbWUpO1xuICAgIHJldHVybiB0eXBlZHJlcXVlc3Q7XG4gIH1cblxuICAvKipcbiAgICogcG9zdHMgYSB0eXBlZHJlcXVlc3RtZXNzYWdlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcG9zdE1lc3NhZ2U8VCA9IHBsdWdpbnMudHlwZWRyZXF1ZXN0SW50ZXJmYWNlcy5JVHlwZWRSZXF1ZXN0PihcbiAgICBtZXNzYWdlQXJnOiBUXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5wb3N0TWVzc2FnZShtZXNzYWdlQXJnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdWJzY3JpYmUgdG8gbWVzc2FnZXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVUeXBlZEhhbmRsZXI8VCBleHRlbmRzIHBsdWdpbnMudHlwZWRyZXF1ZXN0SW50ZXJmYWNlcy5JVHlwZWRSZXF1ZXN0PihcbiAgICBtZXRob2RBcmc6IFRbJ21ldGhvZCddLFxuICAgIGhhbmRsZXJGdW5jdGlvbjogcGx1Z2lucy50eXBlZHJlcXVlc3QuVEhhbmRsZXJGdW5jdGlvbjxUPlxuICApIHtcbiAgICB0aGlzLnR5cGVkcm91dGVyLmFkZFR5cGVkSGFuZGxlcihcbiAgICAgIG5ldyBwbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZEhhbmRsZXI8VD4obWV0aG9kQXJnLCBoYW5kbGVyRnVuY3Rpb24pXG4gICAgKTtcbiAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gJy4vZGVlcy1jb21tcy5jbGFzc2VzLmRlZXNjb21tcy5qcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5cbmZ1bmN0aW9uIGlzTm90aGluZyhzdWJqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIHN1YmplY3QgPT09ICd1bmRlZmluZWQnKSB8fCAoc3ViamVjdCA9PT0gbnVsbCk7XG59XG5cblxuZnVuY3Rpb24gaXNPYmplY3Qoc3ViamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBzdWJqZWN0ID09PSAnb2JqZWN0JykgJiYgKHN1YmplY3QgIT09IG51bGwpO1xufVxuXG5cbmZ1bmN0aW9uIHRvQXJyYXkoc2VxdWVuY2UpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2VxdWVuY2UpKSByZXR1cm4gc2VxdWVuY2U7XG4gIGVsc2UgaWYgKGlzTm90aGluZyhzZXF1ZW5jZSkpIHJldHVybiBbXTtcblxuICByZXR1cm4gWyBzZXF1ZW5jZSBdO1xufVxuXG5cbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkge1xuICB2YXIgaW5kZXgsIGxlbmd0aCwga2V5LCBzb3VyY2VLZXlzO1xuXG4gIGlmIChzb3VyY2UpIHtcbiAgICBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBzb3VyY2VLZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGtleSA9IHNvdXJjZUtleXNbaW5kZXhdO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5cbmZ1bmN0aW9uIHJlcGVhdChzdHJpbmcsIGNvdW50KSB7XG4gIHZhciByZXN1bHQgPSAnJywgY3ljbGU7XG5cbiAgZm9yIChjeWNsZSA9IDA7IGN5Y2xlIDwgY291bnQ7IGN5Y2xlICs9IDEpIHtcbiAgICByZXN1bHQgKz0gc3RyaW5nO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuXG5mdW5jdGlvbiBpc05lZ2F0aXZlWmVybyhudW1iZXIpIHtcbiAgcmV0dXJuIChudW1iZXIgPT09IDApICYmIChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IDEgLyBudW1iZXIpO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzLmlzTm90aGluZyAgICAgID0gaXNOb3RoaW5nO1xubW9kdWxlLmV4cG9ydHMuaXNPYmplY3QgICAgICAgPSBpc09iamVjdDtcbm1vZHVsZS5leHBvcnRzLnRvQXJyYXkgICAgICAgID0gdG9BcnJheTtcbm1vZHVsZS5leHBvcnRzLnJlcGVhdCAgICAgICAgID0gcmVwZWF0O1xubW9kdWxlLmV4cG9ydHMuaXNOZWdhdGl2ZVplcm8gPSBpc05lZ2F0aXZlWmVybztcbm1vZHVsZS5leHBvcnRzLmV4dGVuZCAgICAgICAgID0gZXh0ZW5kO1xuIiwgIi8vIFlBTUwgZXJyb3IgY2xhc3MuIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODQ1ODk4NFxuLy9cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gWUFNTEV4Y2VwdGlvbihyZWFzb24sIG1hcmspIHtcbiAgLy8gU3VwZXIgY29uc3RydWN0b3JcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICB0aGlzLm5hbWUgPSAnWUFNTEV4Y2VwdGlvbic7XG4gIHRoaXMucmVhc29uID0gcmVhc29uO1xuICB0aGlzLm1hcmsgPSBtYXJrO1xuICB0aGlzLm1lc3NhZ2UgPSAodGhpcy5yZWFzb24gfHwgJyh1bmtub3duIHJlYXNvbiknKSArICh0aGlzLm1hcmsgPyAnICcgKyB0aGlzLm1hcmsudG9TdHJpbmcoKSA6ICcnKTtcblxuICAvLyBJbmNsdWRlIHN0YWNrIHRyYWNlIGluIGVycm9yIG9iamVjdFxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAvLyBDaHJvbWUgYW5kIE5vZGVKU1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIC8vIEZGLCBJRSAxMCsgYW5kIFNhZmFyaSA2Ky4gRmFsbGJhY2sgZm9yIG90aGVyc1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrIHx8ICcnO1xuICB9XG59XG5cblxuLy8gSW5oZXJpdCBmcm9tIEVycm9yXG5ZQU1MRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbllBTUxFeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gWUFNTEV4Y2VwdGlvbjtcblxuXG5ZQU1MRXhjZXB0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGNvbXBhY3QpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMubmFtZSArICc6ICc7XG5cbiAgcmVzdWx0ICs9IHRoaXMucmVhc29uIHx8ICcodW5rbm93biByZWFzb24pJztcblxuICBpZiAoIWNvbXBhY3QgJiYgdGhpcy5tYXJrKSB7XG4gICAgcmVzdWx0ICs9ICcgJyArIHRoaXMubWFyay50b1N0cmluZygpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBZQU1MRXhjZXB0aW9uO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuXG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxuXG5mdW5jdGlvbiBNYXJrKG5hbWUsIGJ1ZmZlciwgcG9zaXRpb24sIGxpbmUsIGNvbHVtbikge1xuICB0aGlzLm5hbWUgICAgID0gbmFtZTtcbiAgdGhpcy5idWZmZXIgICA9IGJ1ZmZlcjtcbiAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICB0aGlzLmxpbmUgICAgID0gbGluZTtcbiAgdGhpcy5jb2x1bW4gICA9IGNvbHVtbjtcbn1cblxuXG5NYXJrLnByb3RvdHlwZS5nZXRTbmlwcGV0ID0gZnVuY3Rpb24gZ2V0U25pcHBldChpbmRlbnQsIG1heExlbmd0aCkge1xuICB2YXIgaGVhZCwgc3RhcnQsIHRhaWwsIGVuZCwgc25pcHBldDtcblxuICBpZiAoIXRoaXMuYnVmZmVyKSByZXR1cm4gbnVsbDtcblxuICBpbmRlbnQgPSBpbmRlbnQgfHwgNDtcbiAgbWF4TGVuZ3RoID0gbWF4TGVuZ3RoIHx8IDc1O1xuXG4gIGhlYWQgPSAnJztcbiAgc3RhcnQgPSB0aGlzLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChzdGFydCA+IDAgJiYgJ1xceDAwXFxyXFxuXFx4ODVcXHUyMDI4XFx1MjAyOScuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoc3RhcnQgLSAxKSkgPT09IC0xKSB7XG4gICAgc3RhcnQgLT0gMTtcbiAgICBpZiAodGhpcy5wb3NpdGlvbiAtIHN0YXJ0ID4gKG1heExlbmd0aCAvIDIgLSAxKSkge1xuICAgICAgaGVhZCA9ICcgLi4uICc7XG4gICAgICBzdGFydCArPSA1O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdGFpbCA9ICcnO1xuICBlbmQgPSB0aGlzLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChlbmQgPCB0aGlzLmJ1ZmZlci5sZW5ndGggJiYgJ1xceDAwXFxyXFxuXFx4ODVcXHUyMDI4XFx1MjAyOScuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoZW5kKSkgPT09IC0xKSB7XG4gICAgZW5kICs9IDE7XG4gICAgaWYgKGVuZCAtIHRoaXMucG9zaXRpb24gPiAobWF4TGVuZ3RoIC8gMiAtIDEpKSB7XG4gICAgICB0YWlsID0gJyAuLi4gJztcbiAgICAgIGVuZCAtPSA1O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc25pcHBldCA9IHRoaXMuYnVmZmVyLnNsaWNlKHN0YXJ0LCBlbmQpO1xuXG4gIHJldHVybiBjb21tb24ucmVwZWF0KCcgJywgaW5kZW50KSArIGhlYWQgKyBzbmlwcGV0ICsgdGFpbCArICdcXG4nICtcbiAgICAgICAgIGNvbW1vbi5yZXBlYXQoJyAnLCBpbmRlbnQgKyB0aGlzLnBvc2l0aW9uIC0gc3RhcnQgKyBoZWFkLmxlbmd0aCkgKyAnXic7XG59O1xuXG5cbk1hcmsucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoY29tcGFjdCkge1xuICB2YXIgc25pcHBldCwgd2hlcmUgPSAnJztcblxuICBpZiAodGhpcy5uYW1lKSB7XG4gICAgd2hlcmUgKz0gJ2luIFwiJyArIHRoaXMubmFtZSArICdcIiAnO1xuICB9XG5cbiAgd2hlcmUgKz0gJ2F0IGxpbmUgJyArICh0aGlzLmxpbmUgKyAxKSArICcsIGNvbHVtbiAnICsgKHRoaXMuY29sdW1uICsgMSk7XG5cbiAgaWYgKCFjb21wYWN0KSB7XG4gICAgc25pcHBldCA9IHRoaXMuZ2V0U25pcHBldCgpO1xuXG4gICAgaWYgKHNuaXBwZXQpIHtcbiAgICAgIHdoZXJlICs9ICc6XFxuJyArIHNuaXBwZXQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdoZXJlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcms7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG5cbnZhciBUWVBFX0NPTlNUUlVDVE9SX09QVElPTlMgPSBbXG4gICdraW5kJyxcbiAgJ3Jlc29sdmUnLFxuICAnY29uc3RydWN0JyxcbiAgJ2luc3RhbmNlT2YnLFxuICAncHJlZGljYXRlJyxcbiAgJ3JlcHJlc2VudCcsXG4gICdkZWZhdWx0U3R5bGUnLFxuICAnc3R5bGVBbGlhc2VzJ1xuXTtcblxudmFyIFlBTUxfTk9ERV9LSU5EUyA9IFtcbiAgJ3NjYWxhcicsXG4gICdzZXF1ZW5jZScsXG4gICdtYXBwaW5nJ1xuXTtcblxuZnVuY3Rpb24gY29tcGlsZVN0eWxlQWxpYXNlcyhtYXApIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGlmIChtYXAgIT09IG51bGwpIHtcbiAgICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24gKHN0eWxlKSB7XG4gICAgICBtYXBbc3R5bGVdLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzKSB7XG4gICAgICAgIHJlc3VsdFtTdHJpbmcoYWxpYXMpXSA9IHN0eWxlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBUeXBlKHRhZywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24gb3B0aW9uIFwiJyArIG5hbWUgKyAnXCIgaXMgbWV0IGluIGRlZmluaXRpb24gb2YgXCInICsgdGFnICsgJ1wiIFlBTUwgdHlwZS4nKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFRPRE86IEFkZCB0YWcgZm9ybWF0IGNoZWNrLlxuICB0aGlzLnRhZyAgICAgICAgICA9IHRhZztcbiAgdGhpcy5raW5kICAgICAgICAgPSBvcHRpb25zWydraW5kJ10gICAgICAgICB8fCBudWxsO1xuICB0aGlzLnJlc29sdmUgICAgICA9IG9wdGlvbnNbJ3Jlc29sdmUnXSAgICAgIHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XG4gIHRoaXMuY29uc3RydWN0ICAgID0gb3B0aW9uc1snY29uc3RydWN0J10gICAgfHwgZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGE7IH07XG4gIHRoaXMuaW5zdGFuY2VPZiAgID0gb3B0aW9uc1snaW5zdGFuY2VPZiddICAgfHwgbnVsbDtcbiAgdGhpcy5wcmVkaWNhdGUgICAgPSBvcHRpb25zWydwcmVkaWNhdGUnXSAgICB8fCBudWxsO1xuICB0aGlzLnJlcHJlc2VudCAgICA9IG9wdGlvbnNbJ3JlcHJlc2VudCddICAgIHx8IG51bGw7XG4gIHRoaXMuZGVmYXVsdFN0eWxlID0gb3B0aW9uc1snZGVmYXVsdFN0eWxlJ10gfHwgbnVsbDtcbiAgdGhpcy5zdHlsZUFsaWFzZXMgPSBjb21waWxlU3R5bGVBbGlhc2VzKG9wdGlvbnNbJ3N0eWxlQWxpYXNlcyddIHx8IG51bGwpO1xuXG4gIGlmIChZQU1MX05PREVfS0lORFMuaW5kZXhPZih0aGlzLmtpbmQpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdVbmtub3duIGtpbmQgXCInICsgdGhpcy5raW5kICsgJ1wiIGlzIHNwZWNpZmllZCBmb3IgXCInICsgdGFnICsgJ1wiIFlBTUwgdHlwZS4nKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFR5cGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKmVzbGludC1kaXNhYmxlIG1heC1sZW4qL1xuXG52YXIgY29tbW9uICAgICAgICA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG52YXIgVHlwZSAgICAgICAgICA9IHJlcXVpcmUoJy4vdHlwZScpO1xuXG5cbmZ1bmN0aW9uIGNvbXBpbGVMaXN0KHNjaGVtYSwgbmFtZSwgcmVzdWx0KSB7XG4gIHZhciBleGNsdWRlID0gW107XG5cbiAgc2NoZW1hLmluY2x1ZGUuZm9yRWFjaChmdW5jdGlvbiAoaW5jbHVkZWRTY2hlbWEpIHtcbiAgICByZXN1bHQgPSBjb21waWxlTGlzdChpbmNsdWRlZFNjaGVtYSwgbmFtZSwgcmVzdWx0KTtcbiAgfSk7XG5cbiAgc2NoZW1hW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRUeXBlKSB7XG4gICAgcmVzdWx0LmZvckVhY2goZnVuY3Rpb24gKHByZXZpb3VzVHlwZSwgcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKHByZXZpb3VzVHlwZS50YWcgPT09IGN1cnJlbnRUeXBlLnRhZyAmJiBwcmV2aW91c1R5cGUua2luZCA9PT0gY3VycmVudFR5cGUua2luZCkge1xuICAgICAgICBleGNsdWRlLnB1c2gocHJldmlvdXNJbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXN1bHQucHVzaChjdXJyZW50VHlwZSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQuZmlsdGVyKGZ1bmN0aW9uICh0eXBlLCBpbmRleCkge1xuICAgIHJldHVybiBleGNsdWRlLmluZGV4T2YoaW5kZXgpID09PSAtMTtcbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gY29tcGlsZU1hcCgvKiBsaXN0cy4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBzY2FsYXI6IHt9LFxuICAgICAgICBzZXF1ZW5jZToge30sXG4gICAgICAgIG1hcHBpbmc6IHt9LFxuICAgICAgICBmYWxsYmFjazoge31cbiAgICAgIH0sIGluZGV4LCBsZW5ndGg7XG5cbiAgZnVuY3Rpb24gY29sbGVjdFR5cGUodHlwZSkge1xuICAgIHJlc3VsdFt0eXBlLmtpbmRdW3R5cGUudGFnXSA9IHJlc3VsdFsnZmFsbGJhY2snXVt0eXBlLnRhZ10gPSB0eXBlO1xuICB9XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgYXJndW1lbnRzW2luZGV4XS5mb3JFYWNoKGNvbGxlY3RUeXBlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIFNjaGVtYShkZWZpbml0aW9uKSB7XG4gIHRoaXMuaW5jbHVkZSAgPSBkZWZpbml0aW9uLmluY2x1ZGUgIHx8IFtdO1xuICB0aGlzLmltcGxpY2l0ID0gZGVmaW5pdGlvbi5pbXBsaWNpdCB8fCBbXTtcbiAgdGhpcy5leHBsaWNpdCA9IGRlZmluaXRpb24uZXhwbGljaXQgfHwgW107XG5cbiAgdGhpcy5pbXBsaWNpdC5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUubG9hZEtpbmQgJiYgdHlwZS5sb2FkS2luZCAhPT0gJ3NjYWxhcicpIHtcbiAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMuY29tcGlsZWRJbXBsaWNpdCA9IGNvbXBpbGVMaXN0KHRoaXMsICdpbXBsaWNpdCcsIFtdKTtcbiAgdGhpcy5jb21waWxlZEV4cGxpY2l0ID0gY29tcGlsZUxpc3QodGhpcywgJ2V4cGxpY2l0JywgW10pO1xuICB0aGlzLmNvbXBpbGVkVHlwZU1hcCAgPSBjb21waWxlTWFwKHRoaXMuY29tcGlsZWRJbXBsaWNpdCwgdGhpcy5jb21waWxlZEV4cGxpY2l0KTtcbn1cblxuXG5TY2hlbWEuREVGQVVMVCA9IG51bGw7XG5cblxuU2NoZW1hLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZVNjaGVtYSgpIHtcbiAgdmFyIHNjaGVtYXMsIHR5cGVzO1xuXG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHNjaGVtYXMgPSBTY2hlbWEuREVGQVVMVDtcbiAgICAgIHR5cGVzID0gYXJndW1lbnRzWzBdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDI6XG4gICAgICBzY2hlbWFzID0gYXJndW1lbnRzWzBdO1xuICAgICAgdHlwZXMgPSBhcmd1bWVudHNbMV07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgU2NoZW1hLmNyZWF0ZSBmdW5jdGlvbicpO1xuICB9XG5cbiAgc2NoZW1hcyA9IGNvbW1vbi50b0FycmF5KHNjaGVtYXMpO1xuICB0eXBlcyA9IGNvbW1vbi50b0FycmF5KHR5cGVzKTtcblxuICBpZiAoIXNjaGVtYXMuZXZlcnkoZnVuY3Rpb24gKHNjaGVtYSkgeyByZXR1cm4gc2NoZW1hIGluc3RhbmNlb2YgU2NoZW1hOyB9KSkge1xuICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdTcGVjaWZpZWQgbGlzdCBvZiBzdXBlciBzY2hlbWFzIChvciBhIHNpbmdsZSBTY2hlbWEgb2JqZWN0KSBjb250YWlucyBhIG5vbi1TY2hlbWEgb2JqZWN0LicpO1xuICB9XG5cbiAgaWYgKCF0eXBlcy5ldmVyeShmdW5jdGlvbiAodHlwZSkgeyByZXR1cm4gdHlwZSBpbnN0YW5jZW9mIFR5cGU7IH0pKSB7XG4gICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1NwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4nKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2NoZW1hKHtcbiAgICBpbmNsdWRlOiBzY2hlbWFzLFxuICAgIGV4cGxpY2l0OiB0eXBlc1xuICB9KTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBTY2hlbWE7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6c3RyJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiAnJzsgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6c2VxJywge1xuICBraW5kOiAnc2VxdWVuY2UnLFxuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdOyB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjptYXAnLCB7XG4gIGtpbmQ6ICdtYXBwaW5nJyxcbiAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTsgfVxufSk7XG4iLCAiLy8gU3RhbmRhcmQgWUFNTCdzIEZhaWxzYWZlIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwMjM0NlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgZXhwbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL3N0cicpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvc2VxJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9tYXAnKVxuICBdXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE51bGwoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoO1xuXG4gIHJldHVybiAobWF4ID09PSAxICYmIGRhdGEgPT09ICd+JykgfHxcbiAgICAgICAgIChtYXggPT09IDQgJiYgKGRhdGEgPT09ICdudWxsJyB8fCBkYXRhID09PSAnTnVsbCcgfHwgZGF0YSA9PT0gJ05VTEwnKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09PSBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpudWxsJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxOdWxsLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxOdWxsLFxuICBwcmVkaWNhdGU6IGlzTnVsbCxcbiAgcmVwcmVzZW50OiB7XG4gICAgY2Fub25pY2FsOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnfic7ICAgIH0sXG4gICAgbG93ZXJjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnbnVsbCc7IH0sXG4gICAgdXBwZXJjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnTlVMTCc7IH0sXG4gICAgY2FtZWxjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnTnVsbCc7IH1cbiAgfSxcbiAgZGVmYXVsdFN0eWxlOiAnbG93ZXJjYXNlJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxCb29sZWFuKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGg7XG5cbiAgcmV0dXJuIChtYXggPT09IDQgJiYgKGRhdGEgPT09ICd0cnVlJyB8fCBkYXRhID09PSAnVHJ1ZScgfHwgZGF0YSA9PT0gJ1RSVUUnKSkgfHxcbiAgICAgICAgIChtYXggPT09IDUgJiYgKGRhdGEgPT09ICdmYWxzZScgfHwgZGF0YSA9PT0gJ0ZhbHNlJyB8fCBkYXRhID09PSAnRkFMU0UnKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxCb29sZWFuKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgPT09ICd0cnVlJyB8fFxuICAgICAgICAgZGF0YSA9PT0gJ1RydWUnIHx8XG4gICAgICAgICBkYXRhID09PSAnVFJVRSc7XG59XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBCb29sZWFuXSc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmJvb2wnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJvb2xlYW4sXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJvb2xlYW4sXG4gIHByZWRpY2F0ZTogaXNCb29sZWFuLFxuICByZXByZXNlbnQ6IHtcbiAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuIG9iamVjdCA/ICd0cnVlJyA6ICdmYWxzZSc7IH0sXG4gICAgdXBwZXJjYXNlOiBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiBvYmplY3QgPyAnVFJVRScgOiAnRkFMU0UnOyB9LFxuICAgIGNhbWVsY2FzZTogZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gb2JqZWN0ID8gJ1RydWUnIDogJ0ZhbHNlJzsgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBUeXBlICAgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbmZ1bmN0aW9uIGlzSGV4Q29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkgfHxcbiAgICAgICAgICgoMHg0MS8qIEEgKi8gPD0gYykgJiYgKGMgPD0gMHg0Ni8qIEYgKi8pKSB8fFxuICAgICAgICAgKCgweDYxLyogYSAqLyA8PSBjKSAmJiAoYyA8PSAweDY2LyogZiAqLykpO1xufVxuXG5mdW5jdGlvbiBpc09jdENvZGUoYykge1xuICByZXR1cm4gKCgweDMwLyogMCAqLyA8PSBjKSAmJiAoYyA8PSAweDM3LyogNyAqLykpO1xufVxuXG5mdW5jdGlvbiBpc0RlY0NvZGUoYykge1xuICByZXR1cm4gKCgweDMwLyogMCAqLyA8PSBjKSAmJiAoYyA8PSAweDM5LyogOSAqLykpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEludGVnZXIoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aCxcbiAgICAgIGluZGV4ID0gMCxcbiAgICAgIGhhc0RpZ2l0cyA9IGZhbHNlLFxuICAgICAgY2g7XG5cbiAgaWYgKCFtYXgpIHJldHVybiBmYWxzZTtcblxuICBjaCA9IGRhdGFbaW5kZXhdO1xuXG4gIC8vIHNpZ25cbiAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykge1xuICAgIGNoID0gZGF0YVsrK2luZGV4XTtcbiAgfVxuXG4gIGlmIChjaCA9PT0gJzAnKSB7XG4gICAgLy8gMFxuICAgIGlmIChpbmRleCArIDEgPT09IG1heCkgcmV0dXJuIHRydWU7XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuXG4gICAgLy8gYmFzZSAyLCBiYXNlIDgsIGJhc2UgMTZcblxuICAgIGlmIChjaCA9PT0gJ2InKSB7XG4gICAgICAvLyBiYXNlIDJcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgICAgIGlmIChjaCAhPT0gJzAnICYmIGNoICE9PSAnMScpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09ICdfJztcbiAgICB9XG5cblxuICAgIGlmIChjaCA9PT0gJ3gnKSB7XG4gICAgICAvLyBiYXNlIDE2XG4gICAgICBpbmRleCsrO1xuXG4gICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSAnXycpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzSGV4Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gJ18nO1xuICAgIH1cblxuICAgIC8vIGJhc2UgOFxuICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgIGlmIChjaCA9PT0gJ18nKSBjb250aW51ZTtcbiAgICAgIGlmICghaXNPY3RDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzRGlnaXRzICYmIGNoICE9PSAnXyc7XG4gIH1cblxuICAvLyBiYXNlIDEwIChleGNlcHQgMCkgb3IgYmFzZSA2MFxuXG4gIC8vIHZhbHVlIHNob3VsZCBub3Qgc3RhcnQgd2l0aCBgX2A7XG4gIGlmIChjaCA9PT0gJ18nKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgaWYgKGNoID09PSAnOicpIGJyZWFrO1xuICAgIGlmICghaXNEZWNDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gIH1cblxuICAvLyBTaG91bGQgaGF2ZSBkaWdpdHMgYW5kIHNob3VsZCBub3QgZW5kIHdpdGggYF9gXG4gIGlmICghaGFzRGlnaXRzIHx8IGNoID09PSAnXycpIHJldHVybiBmYWxzZTtcblxuICAvLyBpZiAhYmFzZTYwIC0gZG9uZTtcbiAgaWYgKGNoICE9PSAnOicpIHJldHVybiB0cnVlO1xuXG4gIC8vIGJhc2U2MCBhbG1vc3Qgbm90IHVzZWQsIG5vIG5lZWRzIHRvIG9wdGltaXplXG4gIHJldHVybiAvXig6WzAtNV0/WzAtOV0pKyQvLnRlc3QoZGF0YS5zbGljZShpbmRleCkpO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sSW50ZWdlcihkYXRhKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGEsIHNpZ24gPSAxLCBjaCwgYmFzZSwgZGlnaXRzID0gW107XG5cbiAgaWYgKHZhbHVlLmluZGV4T2YoJ18nKSAhPT0gLTEpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL18vZywgJycpO1xuICB9XG5cbiAgY2ggPSB2YWx1ZVswXTtcblxuICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgaWYgKGNoID09PSAnLScpIHNpZ24gPSAtMTtcbiAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICAgIGNoID0gdmFsdWVbMF07XG4gIH1cblxuICBpZiAodmFsdWUgPT09ICcwJykgcmV0dXJuIDA7XG5cbiAgaWYgKGNoID09PSAnMCcpIHtcbiAgICBpZiAodmFsdWVbMV0gPT09ICdiJykgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMik7XG4gICAgaWYgKHZhbHVlWzFdID09PSAneCcpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUsIDE2KTtcbiAgICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCA4KTtcbiAgfVxuXG4gIGlmICh2YWx1ZS5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdmFsdWUuc3BsaXQoJzonKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgICBkaWdpdHMudW5zaGlmdChwYXJzZUludCh2LCAxMCkpO1xuICAgIH0pO1xuXG4gICAgdmFsdWUgPSAwO1xuICAgIGJhc2UgPSAxO1xuXG4gICAgZGlnaXRzLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgIHZhbHVlICs9IChkICogYmFzZSk7XG4gICAgICBiYXNlICo9IDYwO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ24gKiB2YWx1ZTtcblxuICB9XG5cbiAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZSwgMTApO1xufVxuXG5mdW5jdGlvbiBpc0ludGVnZXIob2JqZWN0KSB7XG4gIHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkpID09PSAnW29iamVjdCBOdW1iZXJdJyAmJlxuICAgICAgICAgKG9iamVjdCAlIDEgPT09IDAgJiYgIWNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6aW50Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxJbnRlZ2VyLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxJbnRlZ2VyLFxuICBwcmVkaWNhdGU6IGlzSW50ZWdlcixcbiAgcmVwcmVzZW50OiB7XG4gICAgYmluYXJ5OiAgICAgIGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiA+PSAwID8gJzBiJyArIG9iai50b1N0cmluZygyKSA6ICctMGInICsgb2JqLnRvU3RyaW5nKDIpLnNsaWNlKDEpOyB9LFxuICAgIG9jdGFsOiAgICAgICBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogPj0gMCA/ICcwJyAgKyBvYmoudG9TdHJpbmcoOCkgOiAnLTAnICArIG9iai50b1N0cmluZyg4KS5zbGljZSgxKTsgfSxcbiAgICBkZWNpbWFsOiAgICAgZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqLnRvU3RyaW5nKDEwKTsgfSxcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4gICAgaGV4YWRlY2ltYWw6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiA+PSAwID8gJzB4JyArIG9iai50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSA6ICAnLTB4JyArIG9iai50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKTsgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdkZWNpbWFsJyxcbiAgc3R5bGVBbGlhc2VzOiB7XG4gICAgYmluYXJ5OiAgICAgIFsgMiwgICdiaW4nIF0sXG4gICAgb2N0YWw6ICAgICAgIFsgOCwgICdvY3QnIF0sXG4gICAgZGVjaW1hbDogICAgIFsgMTAsICdkZWMnIF0sXG4gICAgaGV4YWRlY2ltYWw6IFsgMTYsICdoZXgnIF1cbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgVHlwZSAgID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG52YXIgWUFNTF9GTE9BVF9QQVRURVJOID0gbmV3IFJlZ0V4cChcbiAgLy8gMi41ZTQsIDIuNSBhbmQgaW50ZWdlcnNcbiAgJ14oPzpbLStdPyg/OjB8WzEtOV1bMC05X10qKSg/OlxcXFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT8nICtcbiAgLy8gLjJlNCwgLjJcbiAgLy8gc3BlY2lhbCBjYXNlLCBzZWVtcyBub3QgZnJvbSBzcGVjXG4gICd8XFxcXC5bMC05X10rKD86W2VFXVstK10/WzAtOV0rKT8nICtcbiAgLy8gMjA6NTlcbiAgJ3xbLStdP1swLTldWzAtOV9dKig/OjpbMC01XT9bMC05XSkrXFxcXC5bMC05X10qJyArXG4gIC8vIC5pbmZcbiAgJ3xbLStdP1xcXFwuKD86aW5mfEluZnxJTkYpJyArXG4gIC8vIC5uYW5cbiAgJ3xcXFxcLig/Om5hbnxOYU58TkFOKSkkJyk7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sRmxvYXQoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICghWUFNTF9GTE9BVF9QQVRURVJOLnRlc3QoZGF0YSkgfHxcbiAgICAgIC8vIFF1aWNrIGhhY2sgdG8gbm90IGFsbG93IGludGVnZXJzIGVuZCB3aXRoIGBfYFxuICAgICAgLy8gUHJvYmFibHkgc2hvdWxkIHVwZGF0ZSByZWdleHAgJiBjaGVjayBzcGVlZFxuICAgICAgZGF0YVtkYXRhLmxlbmd0aCAtIDFdID09PSAnXycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEZsb2F0KGRhdGEpIHtcbiAgdmFyIHZhbHVlLCBzaWduLCBiYXNlLCBkaWdpdHM7XG5cbiAgdmFsdWUgID0gZGF0YS5yZXBsYWNlKC9fL2csICcnKS50b0xvd2VyQ2FzZSgpO1xuICBzaWduICAgPSB2YWx1ZVswXSA9PT0gJy0nID8gLTEgOiAxO1xuICBkaWdpdHMgPSBbXTtcblxuICBpZiAoJystJy5pbmRleE9mKHZhbHVlWzBdKSA+PSAwKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gJy5pbmYnKSB7XG4gICAgcmV0dXJuIChzaWduID09PSAxKSA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblxuICB9IGVsc2UgaWYgKHZhbHVlID09PSAnLm5hbicpIHtcbiAgICByZXR1cm4gTmFOO1xuXG4gIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZignOicpID49IDApIHtcbiAgICB2YWx1ZS5zcGxpdCgnOicpLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgIGRpZ2l0cy51bnNoaWZ0KHBhcnNlRmxvYXQodiwgMTApKTtcbiAgICB9KTtcblxuICAgIHZhbHVlID0gMC4wO1xuICAgIGJhc2UgPSAxO1xuXG4gICAgZGlnaXRzLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgIHZhbHVlICs9IGQgKiBiYXNlO1xuICAgICAgYmFzZSAqPSA2MDtcbiAgICB9KTtcblxuICAgIHJldHVybiBzaWduICogdmFsdWU7XG5cbiAgfVxuICByZXR1cm4gc2lnbiAqIHBhcnNlRmxvYXQodmFsdWUsIDEwKTtcbn1cblxuXG52YXIgU0NJRU5USUZJQ19XSVRIT1VUX0RPVCA9IC9eWy0rXT9bMC05XStlLztcblxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEZsb2F0KG9iamVjdCwgc3R5bGUpIHtcbiAgdmFyIHJlcztcblxuICBpZiAoaXNOYU4ob2JqZWN0KSkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgJ2xvd2VyY2FzZSc6IHJldHVybiAnLm5hbic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy5OQU4nO1xuICAgICAgY2FzZSAnY2FtZWxjYXNlJzogcmV0dXJuICcuTmFOJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZID09PSBvYmplY3QpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlICdsb3dlcmNhc2UnOiByZXR1cm4gJy5pbmYnO1xuICAgICAgY2FzZSAndXBwZXJjYXNlJzogcmV0dXJuICcuSU5GJztcbiAgICAgIGNhc2UgJ2NhbWVsY2FzZSc6IHJldHVybiAnLkluZic7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSAnbG93ZXJjYXNlJzogcmV0dXJuICctLmluZic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy0uSU5GJztcbiAgICAgIGNhc2UgJ2NhbWVsY2FzZSc6IHJldHVybiAnLS5JbmYnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSkge1xuICAgIHJldHVybiAnLTAuMCc7XG4gIH1cblxuICByZXMgPSBvYmplY3QudG9TdHJpbmcoMTApO1xuXG4gIC8vIEpTIHN0cmluZ2lmaWVyIGNhbiBidWlsZCBzY2llbnRpZmljIGZvcm1hdCB3aXRob3V0IGRvdHM6IDVlLTEwMCxcbiAgLy8gd2hpbGUgWUFNTCByZXF1cmVzIGRvdDogNS5lLTEwMC4gRml4IGl0IHdpdGggc2ltcGxlIGhhY2tcblxuICByZXR1cm4gU0NJRU5USUZJQ19XSVRIT1VUX0RPVC50ZXN0KHJlcykgPyByZXMucmVwbGFjZSgnZScsICcuZScpIDogcmVzO1xufVxuXG5mdW5jdGlvbiBpc0Zsb2F0KG9iamVjdCkge1xuICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBOdW1iZXJdJykgJiZcbiAgICAgICAgIChvYmplY3QgJSAxICE9PSAwIHx8IGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEZsb2F0LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxGbG9hdCxcbiAgcHJlZGljYXRlOiBpc0Zsb2F0LFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxGbG9hdCxcbiAgZGVmYXVsdFN0eWxlOiAnbG93ZXJjYXNlJ1xufSk7XG4iLCAiLy8gU3RhbmRhcmQgWUFNTCdzIEpTT04gc2NoZW1hLlxuLy8gaHR0cDovL3d3dy55YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjaWQyODAzMjMxXG4vL1xuLy8gTk9URTogSlMtWUFNTCBkb2VzIG5vdCBzdXBwb3J0IHNjaGVtYS1zcGVjaWZpYyB0YWcgcmVzb2x1dGlvbiByZXN0cmljdGlvbnMuXG4vLyBTbywgdGhpcyBzY2hlbWEgaXMgbm90IHN1Y2ggc3RyaWN0IGFzIGRlZmluZWQgaW4gdGhlIFlBTUwgc3BlY2lmaWNhdGlvbi5cbi8vIEl0IGFsbG93cyBudW1iZXJzIGluIGJpbmFyeSBub3RhaW9uLCB1c2UgYE51bGxgIGFuZCBgTlVMTGAgYXMgYG51bGxgLCBldGMuXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBTY2hlbWEgPSByZXF1aXJlKCcuLi9zY2hlbWEnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEoe1xuICBpbmNsdWRlOiBbXG4gICAgcmVxdWlyZSgnLi9mYWlsc2FmZScpXG4gIF0sXG4gIGltcGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9udWxsJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9ib29sJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9pbnQnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2Zsb2F0JylcbiAgXVxufSk7XG4iLCAiLy8gU3RhbmRhcmQgWUFNTCdzIENvcmUgc2NoZW1hLlxuLy8gaHR0cDovL3d3dy55YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjaWQyODA0OTIzXG4vL1xuLy8gTk9URTogSlMtWUFNTCBkb2VzIG5vdCBzdXBwb3J0IHNjaGVtYS1zcGVjaWZpYyB0YWcgcmVzb2x1dGlvbiByZXN0cmljdGlvbnMuXG4vLyBTbywgQ29yZSBzY2hlbWEgaGFzIG5vIGRpc3RpbmN0aW9ucyBmcm9tIEpTT04gc2NoZW1hIGlzIEpTLVlBTUwuXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBTY2hlbWEgPSByZXF1aXJlKCcuLi9zY2hlbWEnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEoe1xuICBpbmNsdWRlOiBbXG4gICAgcmVxdWlyZSgnLi9qc29uJylcbiAgXVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIFlBTUxfREFURV9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICAnXihbMC05XVswLTldWzAtOV1bMC05XSknICAgICAgICAgICsgLy8gWzFdIHllYXJcbiAgJy0oWzAtOV1bMC05XSknICAgICAgICAgICAgICAgICAgICArIC8vIFsyXSBtb250aFxuICAnLShbMC05XVswLTldKSQnKTsgICAgICAgICAgICAgICAgICAgLy8gWzNdIGRheVxuXG52YXIgWUFNTF9USU1FU1RBTVBfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgJ14oWzAtOV1bMC05XVswLTldWzAtOV0pJyAgICAgICAgICArIC8vIFsxXSB5ZWFyXG4gICctKFswLTldWzAtOV0/KScgICAgICAgICAgICAgICAgICAgKyAvLyBbMl0gbW9udGhcbiAgJy0oWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICArIC8vIFszXSBkYXlcbiAgJyg/OltUdF18WyBcXFxcdF0rKScgICAgICAgICAgICAgICAgICsgLy8gLi4uXG4gICcoWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICAgKyAvLyBbNF0gaG91clxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzVdIG1pbnV0ZVxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzZdIHNlY29uZFxuICAnKD86XFxcXC4oWzAtOV0qKSk/JyAgICAgICAgICAgICAgICAgKyAvLyBbN10gZnJhY3Rpb25cbiAgJyg/OlsgXFxcXHRdKihafChbLStdKShbMC05XVswLTldPyknICsgLy8gWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91clxuICAnKD86OihbMC05XVswLTldKSk/KSk/JCcpOyAgICAgICAgICAgLy8gWzExXSB0el9taW51dGVcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wKGRhdGEpIHtcbiAgdmFyIG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24gPSAwLFxuICAgICAgZGVsdGEgPSBudWxsLCB0el9ob3VyLCB0el9taW51dGUsIGRhdGU7XG5cbiAgbWF0Y2ggPSBZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YSk7XG4gIGlmIChtYXRjaCA9PT0gbnVsbCkgbWF0Y2ggPSBZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhKTtcblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignRGF0ZSByZXNvbHZlIGVycm9yJyk7XG5cbiAgLy8gbWF0Y2g6IFsxXSB5ZWFyIFsyXSBtb250aCBbM10gZGF5XG5cbiAgeWVhciA9ICsobWF0Y2hbMV0pO1xuICBtb250aCA9ICsobWF0Y2hbMl0pIC0gMTsgLy8gSlMgbW9udGggc3RhcnRzIHdpdGggMFxuICBkYXkgPSArKG1hdGNoWzNdKTtcblxuICBpZiAoIW1hdGNoWzRdKSB7IC8vIG5vIGhvdXJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpO1xuICB9XG5cbiAgLy8gbWF0Y2g6IFs0XSBob3VyIFs1XSBtaW51dGUgWzZdIHNlY29uZCBbN10gZnJhY3Rpb25cblxuICBob3VyID0gKyhtYXRjaFs0XSk7XG4gIG1pbnV0ZSA9ICsobWF0Y2hbNV0pO1xuICBzZWNvbmQgPSArKG1hdGNoWzZdKTtcblxuICBpZiAobWF0Y2hbN10pIHtcbiAgICBmcmFjdGlvbiA9IG1hdGNoWzddLnNsaWNlKDAsIDMpO1xuICAgIHdoaWxlIChmcmFjdGlvbi5sZW5ndGggPCAzKSB7IC8vIG1pbGxpLXNlY29uZHNcbiAgICAgIGZyYWN0aW9uICs9ICcwJztcbiAgICB9XG4gICAgZnJhY3Rpb24gPSArZnJhY3Rpb247XG4gIH1cblxuICAvLyBtYXRjaDogWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91ciBbMTFdIHR6X21pbnV0ZVxuXG4gIGlmIChtYXRjaFs5XSkge1xuICAgIHR6X2hvdXIgPSArKG1hdGNoWzEwXSk7XG4gICAgdHpfbWludXRlID0gKyhtYXRjaFsxMV0gfHwgMCk7XG4gICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDYwMDAwOyAvLyBkZWx0YSBpbiBtaWxpLXNlY29uZHNcbiAgICBpZiAobWF0Y2hbOV0gPT09ICctJykgZGVsdGEgPSAtZGVsdGE7XG4gIH1cblxuICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uKSk7XG5cbiAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7XG5cbiAgcmV0dXJuIGRhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxUaW1lc3RhbXAob2JqZWN0IC8qLCBzdHlsZSovKSB7XG4gIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxUaW1lc3RhbXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFRpbWVzdGFtcCxcbiAgaW5zdGFuY2VPZjogRGF0ZSxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sVGltZXN0YW1wXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE1lcmdlKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgPT09ICc8PCcgfHwgZGF0YSA9PT0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE1lcmdlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG5cbnZhciBOb2RlQnVmZmVyO1xuXG50cnkge1xuICAvLyBBIHRyaWNrIGZvciBicm93c2VyaWZpZWQgdmVyc2lvbiwgdG8gbm90IGluY2x1ZGUgYEJ1ZmZlcmAgc2hpbVxuICB2YXIgX3JlcXVpcmUgPSByZXF1aXJlO1xuICBOb2RlQnVmZmVyID0gX3JlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbn0gY2F0Y2ggKF9fKSB7fVxuXG52YXIgVHlwZSAgICAgICA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuXG4vLyBbIDY0LCA2NSwgNjYgXSAtPiBbIHBhZGRpbmcsIENSLCBMRiBdXG52YXIgQkFTRTY0X01BUCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVxcblxccic7XG5cblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxCaW5hcnkoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBjb2RlLCBpZHgsIGJpdGxlbiA9IDAsIG1heCA9IGRhdGEubGVuZ3RoLCBtYXAgPSBCQVNFNjRfTUFQO1xuXG4gIC8vIENvbnZlcnQgb25lIGJ5IG9uZS5cbiAgZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgY29kZSA9IG1hcC5pbmRleE9mKGRhdGEuY2hhckF0KGlkeCkpO1xuXG4gICAgLy8gU2tpcCBDUi9MRlxuICAgIGlmIChjb2RlID4gNjQpIGNvbnRpbnVlO1xuXG4gICAgLy8gRmFpbCBvbiBpbGxlZ2FsIGNoYXJhY3RlcnNcbiAgICBpZiAoY29kZSA8IDApIHJldHVybiBmYWxzZTtcblxuICAgIGJpdGxlbiArPSA2O1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBiaXRzIGxlZnQsIHNvdXJjZSB3YXMgY29ycnVwdGVkXG4gIHJldHVybiAoYml0bGVuICUgOCkgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxCaW5hcnkoZGF0YSkge1xuICB2YXIgaWR4LCB0YWlsYml0cyxcbiAgICAgIGlucHV0ID0gZGF0YS5yZXBsYWNlKC9bXFxyXFxuPV0vZywgJycpLCAvLyByZW1vdmUgQ1IvTEYgJiBwYWRkaW5nIHRvIHNpbXBsaWZ5IHNjYW5cbiAgICAgIG1heCA9IGlucHV0Lmxlbmd0aCxcbiAgICAgIG1hcCA9IEJBU0U2NF9NQVAsXG4gICAgICBiaXRzID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIC8vIENvbGxlY3QgYnkgNio0IGJpdHMgKDMgYnl0ZXMpXG5cbiAgZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgaWYgKChpZHggJSA0ID09PSAwKSAmJiBpZHgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDE2KSAmIDB4RkYpO1xuICAgICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gOCkgJiAweEZGKTtcbiAgICAgIHJlc3VsdC5wdXNoKGJpdHMgJiAweEZGKTtcbiAgICB9XG5cbiAgICBiaXRzID0gKGJpdHMgPDwgNikgfCBtYXAuaW5kZXhPZihpbnB1dC5jaGFyQXQoaWR4KSk7XG4gIH1cblxuICAvLyBEdW1wIHRhaWxcblxuICB0YWlsYml0cyA9IChtYXggJSA0KSAqIDY7XG5cbiAgaWYgKHRhaWxiaXRzID09PSAwKSB7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMTYpICYgMHhGRik7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gOCkgJiAweEZGKTtcbiAgICByZXN1bHQucHVzaChiaXRzICYgMHhGRik7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDE4KSB7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMTApICYgMHhGRik7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMikgJiAweEZGKTtcbiAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTIpIHtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiA0KSAmIDB4RkYpO1xuICB9XG5cbiAgLy8gV3JhcCBpbnRvIEJ1ZmZlciBmb3IgTm9kZUpTIGFuZCBsZWF2ZSBBcnJheSBmb3IgYnJvd3NlclxuICBpZiAoTm9kZUJ1ZmZlcikge1xuICAgIC8vIFN1cHBvcnQgbm9kZSA2LisgQnVmZmVyIEFQSSB3aGVuIGF2YWlsYWJsZVxuICAgIHJldHVybiBOb2RlQnVmZmVyLmZyb20gPyBOb2RlQnVmZmVyLmZyb20ocmVzdWx0KSA6IG5ldyBOb2RlQnVmZmVyKHJlc3VsdCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sQmluYXJ5KG9iamVjdCAvKiwgc3R5bGUqLykge1xuICB2YXIgcmVzdWx0ID0gJycsIGJpdHMgPSAwLCBpZHgsIHRhaWwsXG4gICAgICBtYXggPSBvYmplY3QubGVuZ3RoLFxuICAgICAgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IGV2ZXJ5IHRocmVlIGJ5dGVzIHRvIDQgQVNDSUkgY2hhcmFjdGVycy5cblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBpZiAoKGlkeCAlIDMgPT09IDApICYmIGlkeCkge1xuICAgICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTIpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDYpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgICB9XG5cbiAgICBiaXRzID0gKGJpdHMgPDwgOCkgKyBvYmplY3RbaWR4XTtcbiAgfVxuXG4gIC8vIER1bXAgdGFpbFxuXG4gIHRhaWwgPSBtYXggJSAzO1xuXG4gIGlmICh0YWlsID09PSAwKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gNikgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAyKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxMCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDQpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCAyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9IGVsc2UgaWYgKHRhaWwgPT09IDEpIHtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDIpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCA0KSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNCaW5hcnkob2JqZWN0KSB7XG4gIHJldHVybiBOb2RlQnVmZmVyICYmIE5vZGVCdWZmZXIuaXNCdWZmZXIob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCaW5hcnksXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJpbmFyeSxcbiAgcHJlZGljYXRlOiBpc0JpbmFyeSxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sQmluYXJ5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG52YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfdG9TdHJpbmcgICAgICAgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE9tYXAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIG9iamVjdEtleXMgPSBbXSwgaW5kZXgsIGxlbmd0aCwgcGFpciwgcGFpcktleSwgcGFpckhhc0tleSxcbiAgICAgIG9iamVjdCA9IGRhdGE7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG4gICAgcGFpckhhc0tleSA9IGZhbHNlO1xuXG4gICAgaWYgKF90b1N0cmluZy5jYWxsKHBhaXIpICE9PSAnW29iamVjdCBPYmplY3RdJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChwYWlyS2V5IGluIHBhaXIpIHtcbiAgICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChwYWlyLCBwYWlyS2V5KSkge1xuICAgICAgICBpZiAoIXBhaXJIYXNLZXkpIHBhaXJIYXNLZXkgPSB0cnVlO1xuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhaXJIYXNLZXkpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChvYmplY3RLZXlzLmluZGV4T2YocGFpcktleSkgPT09IC0xKSBvYmplY3RLZXlzLnB1c2gocGFpcktleSk7XG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YSkge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6b21hcCcsIHtcbiAga2luZDogJ3NlcXVlbmNlJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxPbWFwLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxPbWFwXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG52YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxQYWlycyhkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIgaW5kZXgsIGxlbmd0aCwgcGFpciwga2V5cywgcmVzdWx0LFxuICAgICAgb2JqZWN0ID0gZGF0YTtcblxuICByZXN1bHQgPSBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG5cbiAgICBpZiAoX3RvU3RyaW5nLmNhbGwocGFpcikgIT09ICdbb2JqZWN0IE9iamVjdF0nKSByZXR1cm4gZmFsc2U7XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMocGFpcik7XG5cbiAgICBpZiAoa2V5cy5sZW5ndGggIT09IDEpIHJldHVybiBmYWxzZTtcblxuICAgIHJlc3VsdFtpbmRleF0gPSBbIGtleXNbMF0sIHBhaXJba2V5c1swXV0gXTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sUGFpcnMoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG4gIHZhciBpbmRleCwgbGVuZ3RoLCBwYWlyLCBrZXlzLCByZXN1bHQsXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBwYWlyID0gb2JqZWN0W2luZGV4XTtcblxuICAgIGtleXMgPSBPYmplY3Qua2V5cyhwYWlyKTtcblxuICAgIHJlc3VsdFtpbmRleF0gPSBbIGtleXNbMF0sIHBhaXJba2V5c1swXV0gXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnBhaXJzJywge1xuICBraW5kOiAnc2VxdWVuY2UnLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFBhaXJzLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxQYWlyc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sU2V0KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBrZXksIG9iamVjdCA9IGRhdGE7XG5cbiAgZm9yIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgaWYgKG9iamVjdFtrZXldICE9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxTZXQoZGF0YSkge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6c2V0Jywge1xuICBraW5kOiAnbWFwcGluZycsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sU2V0LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxTZXRcbn0pO1xuIiwgIi8vIEpTLVlBTUwncyBkZWZhdWx0IHNjaGVtYSBmb3IgYHNhZmVMb2FkYCBmdW5jdGlvbi5cbi8vIEl0IGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIFlBTUwgc3BlY2lmaWNhdGlvbi5cbi8vXG4vLyBUaGlzIHNjaGVtYSBpcyBiYXNlZCBvbiBzdGFuZGFyZCBZQU1MJ3MgQ29yZSBzY2hlbWEgYW5kIGluY2x1ZGVzIG1vc3Qgb2Zcbi8vIGV4dHJhIHR5cGVzIGRlc2NyaWJlZCBhdCBZQU1MIHRhZyByZXBvc2l0b3J5LiAoaHR0cDovL3lhbWwub3JnL3R5cGUvKVxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgaW5jbHVkZTogW1xuICAgIHJlcXVpcmUoJy4vY29yZScpXG4gIF0sXG4gIGltcGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS90aW1lc3RhbXAnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL21lcmdlJylcbiAgXSxcbiAgZXhwbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL2JpbmFyeScpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvb21hcCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvcGFpcnMnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL3NldCcpXG4gIF1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi8uLi90eXBlJyk7XG5cbmZ1bmN0aW9uIHJlc29sdmVKYXZhc2NyaXB0VW5kZWZpbmVkKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdFVuZGVmaW5lZCgpIHtcbiAgLyplc2xpbnQtZGlzYWJsZSBuby11bmRlZmluZWQqL1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRKYXZhc2NyaXB0VW5kZWZpbmVkKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmpzL3VuZGVmaW5lZCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVKYXZhc2NyaXB0VW5kZWZpbmVkLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdEphdmFzY3JpcHRVbmRlZmluZWQsXG4gIHByZWRpY2F0ZTogaXNVbmRlZmluZWQsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50SmF2YXNjcmlwdFVuZGVmaW5lZFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uLy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRSZWdFeHAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICB2YXIgcmVnZXhwID0gZGF0YSxcbiAgICAgIHRhaWwgICA9IC9cXC8oW2dpbV0qKSQvLmV4ZWMoZGF0YSksXG4gICAgICBtb2RpZmllcnMgPSAnJztcblxuICAvLyBpZiByZWdleHAgc3RhcnRzIHdpdGggJy8nIGl0IGNhbiBoYXZlIG1vZGlmaWVycyBhbmQgbXVzdCBiZSBwcm9wZXJseSBjbG9zZWRcbiAgLy8gYC9mb28vZ2ltYCAtIG1vZGlmaWVycyB0YWlsIGNhbiBiZSBtYXhpbXVtIDMgY2hhcnNcbiAgaWYgKHJlZ2V4cFswXSA9PT0gJy8nKSB7XG4gICAgaWYgKHRhaWwpIG1vZGlmaWVycyA9IHRhaWxbMV07XG5cbiAgICBpZiAobW9kaWZpZXJzLmxlbmd0aCA+IDMpIHJldHVybiBmYWxzZTtcbiAgICAvLyBpZiBleHByZXNzaW9uIHN0YXJ0cyB3aXRoIC8sIGlzIHNob3VsZCBiZSBwcm9wZXJseSB0ZXJtaW5hdGVkXG4gICAgaWYgKHJlZ2V4cFtyZWdleHAubGVuZ3RoIC0gbW9kaWZpZXJzLmxlbmd0aCAtIDFdICE9PSAnLycpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RKYXZhc2NyaXB0UmVnRXhwKGRhdGEpIHtcbiAgdmFyIHJlZ2V4cCA9IGRhdGEsXG4gICAgICB0YWlsICAgPSAvXFwvKFtnaW1dKikkLy5leGVjKGRhdGEpLFxuICAgICAgbW9kaWZpZXJzID0gJyc7XG5cbiAgLy8gYC9mb28vZ2ltYCAtIHRhaWwgY2FuIGJlIG1heGltdW0gNCBjaGFyc1xuICBpZiAocmVnZXhwWzBdID09PSAnLycpIHtcbiAgICBpZiAodGFpbCkgbW9kaWZpZXJzID0gdGFpbFsxXTtcbiAgICByZWdleHAgPSByZWdleHAuc2xpY2UoMSwgcmVnZXhwLmxlbmd0aCAtIG1vZGlmaWVycy5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4cCwgbW9kaWZpZXJzKTtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdFJlZ0V4cChvYmplY3QgLyosIHN0eWxlKi8pIHtcbiAgdmFyIHJlc3VsdCA9ICcvJyArIG9iamVjdC5zb3VyY2UgKyAnLyc7XG5cbiAgaWYgKG9iamVjdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmIChvYmplY3QubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAob2JqZWN0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNSZWdFeHAob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmpzL3JlZ2V4cCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVKYXZhc2NyaXB0UmVnRXhwLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdEphdmFzY3JpcHRSZWdFeHAsXG4gIHByZWRpY2F0ZTogaXNSZWdFeHAsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50SmF2YXNjcmlwdFJlZ0V4cFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXNwcmltYTtcblxuLy8gQnJvd3NlcmlmaWVkIHZlcnNpb24gZG9lcyBub3QgaGF2ZSBlc3ByaW1hXG4vL1xuLy8gMS4gRm9yIG5vZGUuanMganVzdCByZXF1aXJlIG1vZHVsZSBhcyBkZXBzXG4vLyAyLiBGb3IgYnJvd3NlciB0cnkgdG8gcmVxdWlyZSBtdWR1bGUgdmlhIGV4dGVybmFsIEFNRCBzeXN0ZW0uXG4vLyAgICBJZiBub3QgZm91bmQgLSB0cnkgdG8gZmFsbGJhY2sgdG8gd2luZG93LmVzcHJpbWEuIElmIG5vdFxuLy8gICAgZm91bmQgdG9vIC0gdGhlbiBmYWlsIHRvIHBhcnNlLlxuLy9cbnRyeSB7XG4gIC8vIHdvcmthcm91bmQgdG8gZXhjbHVkZSBwYWNrYWdlIGZyb20gYnJvd3NlcmlmeSBsaXN0LlxuICB2YXIgX3JlcXVpcmUgPSByZXF1aXJlO1xuICBlc3ByaW1hID0gX3JlcXVpcmUoJ2VzcHJpbWEnKTtcbn0gY2F0Y2ggKF8pIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tcmVkZWNsYXJlICovXG4gIC8qIGdsb2JhbCB3aW5kb3cgKi9cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSBlc3ByaW1hID0gd2luZG93LmVzcHJpbWE7XG59XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdEZ1bmN0aW9uKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB0cnkge1xuICAgIHZhciBzb3VyY2UgPSAnKCcgKyBkYXRhICsgJyknLFxuICAgICAgICBhc3QgICAgPSBlc3ByaW1hLnBhcnNlKHNvdXJjZSwgeyByYW5nZTogdHJ1ZSB9KTtcblxuICAgIGlmIChhc3QudHlwZSAgICAgICAgICAgICAgICAgICAgIT09ICdQcm9ncmFtJyAgICAgICAgICAgICB8fFxuICAgICAgICBhc3QuYm9keS5sZW5ndGggICAgICAgICAgICAgIT09IDEgICAgICAgICAgICAgICAgICAgICB8fFxuICAgICAgICBhc3QuYm9keVswXS50eXBlICAgICAgICAgICAgIT09ICdFeHByZXNzaW9uU3RhdGVtZW50JyB8fFxuICAgICAgICAoYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlICE9PSAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nICYmXG4gICAgICAgICAgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlICE9PSAnRnVuY3Rpb25FeHByZXNzaW9uJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdEphdmFzY3JpcHRGdW5jdGlvbihkYXRhKSB7XG4gIC8qanNsaW50IGV2aWw6dHJ1ZSovXG5cbiAgdmFyIHNvdXJjZSA9ICcoJyArIGRhdGEgKyAnKScsXG4gICAgICBhc3QgICAgPSBlc3ByaW1hLnBhcnNlKHNvdXJjZSwgeyByYW5nZTogdHJ1ZSB9KSxcbiAgICAgIHBhcmFtcyA9IFtdLFxuICAgICAgYm9keTtcblxuICBpZiAoYXN0LnR5cGUgICAgICAgICAgICAgICAgICAgICE9PSAnUHJvZ3JhbScgICAgICAgICAgICAgfHxcbiAgICAgIGFzdC5ib2R5Lmxlbmd0aCAgICAgICAgICAgICAhPT0gMSAgICAgICAgICAgICAgICAgICAgIHx8XG4gICAgICBhc3QuYm9keVswXS50eXBlICAgICAgICAgICAgIT09ICdFeHByZXNzaW9uU3RhdGVtZW50JyB8fFxuICAgICAgKGFzdC5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSAhPT0gJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJyAmJlxuICAgICAgICBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgIT09ICdGdW5jdGlvbkV4cHJlc3Npb24nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGFzdC5ib2R5WzBdLmV4cHJlc3Npb24ucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgcGFyYW1zLnB1c2gocGFyYW0ubmFtZSk7XG4gIH0pO1xuXG4gIGJvZHkgPSBhc3QuYm9keVswXS5leHByZXNzaW9uLmJvZHkucmFuZ2U7XG5cbiAgLy8gRXNwcmltYSdzIHJhbmdlcyBpbmNsdWRlIHRoZSBmaXJzdCAneycgYW5kIHRoZSBsYXN0ICd9JyBjaGFyYWN0ZXJzIG9uXG4gIC8vIGZ1bmN0aW9uIGV4cHJlc3Npb25zLiBTbyBjdXQgdGhlbSBvdXQuXG4gIGlmIChhc3QuYm9keVswXS5leHByZXNzaW9uLmJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgIC8qZXNsaW50LWRpc2FibGUgbm8tbmV3LWZ1bmMqL1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb24ocGFyYW1zLCBzb3VyY2Uuc2xpY2UoYm9keVswXSArIDEsIGJvZHlbMV0gLSAxKSk7XG4gIH1cbiAgLy8gRVM2IGFycm93IGZ1bmN0aW9ucyBjYW4gb21pdCB0aGUgQmxvY2tTdGF0ZW1lbnQuIEluIHRoYXQgY2FzZSwganVzdCByZXR1cm5cbiAgLy8gdGhlIGJvZHkuXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tbmV3LWZ1bmMqL1xuICByZXR1cm4gbmV3IEZ1bmN0aW9uKHBhcmFtcywgJ3JldHVybiAnICsgc291cmNlLnNsaWNlKGJvZHlbMF0sIGJvZHlbMV0pKTtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdEZ1bmN0aW9uKG9iamVjdCAvKiwgc3R5bGUqLykge1xuICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6anMvZnVuY3Rpb24nLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdEZ1bmN0aW9uLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdEphdmFzY3JpcHRGdW5jdGlvbixcbiAgcHJlZGljYXRlOiBpc0Z1bmN0aW9uLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRGdW5jdGlvblxufSk7XG4iLCAiLy8gSlMtWUFNTCdzIGRlZmF1bHQgc2NoZW1hIGZvciBgbG9hZGAgZnVuY3Rpb24uXG4vLyBJdCBpcyBub3QgZGVzY3JpYmVkIGluIHRoZSBZQU1MIHNwZWNpZmljYXRpb24uXG4vL1xuLy8gVGhpcyBzY2hlbWEgaXMgYmFzZWQgb24gSlMtWUFNTCdzIGRlZmF1bHQgc2FmZSBzY2hlbWEgYW5kIGluY2x1ZGVzXG4vLyBKYXZhU2NyaXB0LXNwZWNpZmljIHR5cGVzOiAhIWpzL3VuZGVmaW5lZCwgISFqcy9yZWdleHAgYW5kICEhanMvZnVuY3Rpb24uXG4vL1xuLy8gQWxzbyB0aGlzIHNjaGVtYSBpcyB1c2VkIGFzIGRlZmF1bHQgYmFzZSBzY2hlbWEgYXQgYFNjaGVtYS5jcmVhdGVgIGZ1bmN0aW9uLlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBTY2hlbWEuREVGQVVMVCA9IG5ldyBTY2hlbWEoe1xuICBpbmNsdWRlOiBbXG4gICAgcmVxdWlyZSgnLi9kZWZhdWx0X3NhZmUnKVxuICBdLFxuICBleHBsaWNpdDogW1xuICAgIHJlcXVpcmUoJy4uL3R5cGUvanMvdW5kZWZpbmVkJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9qcy9yZWdleHAnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2pzL2Z1bmN0aW9uJylcbiAgXVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKmVzbGludC1kaXNhYmxlIG1heC1sZW4sbm8tdXNlLWJlZm9yZS1kZWZpbmUqL1xuXG52YXIgY29tbW9uICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgWUFNTEV4Y2VwdGlvbiAgICAgICA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG52YXIgTWFyayAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWFyaycpO1xudmFyIERFRkFVTFRfU0FGRV9TQ0hFTUEgPSByZXF1aXJlKCcuL3NjaGVtYS9kZWZhdWx0X3NhZmUnKTtcbnZhciBERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZSgnLi9zY2hlbWEvZGVmYXVsdF9mdWxsJyk7XG5cblxudmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cblxudmFyIENPTlRFWFRfRkxPV19JTiAgID0gMTtcbnZhciBDT05URVhUX0ZMT1dfT1VUICA9IDI7XG52YXIgQ09OVEVYVF9CTE9DS19JTiAgPSAzO1xudmFyIENPTlRFWFRfQkxPQ0tfT1VUID0gNDtcblxuXG52YXIgQ0hPTVBJTkdfQ0xJUCAgPSAxO1xudmFyIENIT01QSU5HX1NUUklQID0gMjtcbnZhciBDSE9NUElOR19LRUVQICA9IDM7XG5cblxudmFyIFBBVFRFUk5fTk9OX1BSSU5UQUJMRSAgICAgICAgID0gL1tcXHgwMC1cXHgwOFxceDBCXFx4MENcXHgwRS1cXHgxRlxceDdGLVxceDg0XFx4ODYtXFx4OUZcXHVGRkZFXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0vO1xudmFyIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTID0gL1tcXHg4NVxcdTIwMjhcXHUyMDI5XS87XG52YXIgUEFUVEVSTl9GTE9XX0lORElDQVRPUlMgICAgICAgPSAvWyxcXFtcXF1cXHtcXH1dLztcbnZhciBQQVRURVJOX1RBR19IQU5ETEUgICAgICAgICAgICA9IC9eKD86IXwhIXwhW2EtelxcLV0rISkkL2k7XG52YXIgUEFUVEVSTl9UQUdfVVJJICAgICAgICAgICAgICAgPSAvXig/OiF8W14sXFxbXFxdXFx7XFx9XSkoPzolWzAtOWEtZl17Mn18WzAtOWEtelxcLSM7XFwvXFw/OkAmPVxcK1xcJCxfXFwuIX5cXConXFwoXFwpXFxbXFxdXSkqJC9pO1xuXG5cbmZ1bmN0aW9uIF9jbGFzcyhvYmopIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopOyB9XG5cbmZ1bmN0aW9uIGlzX0VPTChjKSB7XG4gIHJldHVybiAoYyA9PT0gMHgwQS8qIExGICovKSB8fCAoYyA9PT0gMHgwRC8qIENSICovKTtcbn1cblxuZnVuY3Rpb24gaXNfV0hJVEVfU1BBQ0UoYykge1xuICByZXR1cm4gKGMgPT09IDB4MDkvKiBUYWIgKi8pIHx8IChjID09PSAweDIwLyogU3BhY2UgKi8pO1xufVxuXG5mdW5jdGlvbiBpc19XU19PUl9FT0woYykge1xuICByZXR1cm4gKGMgPT09IDB4MDkvKiBUYWIgKi8pIHx8XG4gICAgICAgICAoYyA9PT0gMHgyMC8qIFNwYWNlICovKSB8fFxuICAgICAgICAgKGMgPT09IDB4MEEvKiBMRiAqLykgfHxcbiAgICAgICAgIChjID09PSAweDBELyogQ1IgKi8pO1xufVxuXG5mdW5jdGlvbiBpc19GTE9XX0lORElDQVRPUihjKSB7XG4gIHJldHVybiBjID09PSAweDJDLyogLCAqLyB8fFxuICAgICAgICAgYyA9PT0gMHg1Qi8qIFsgKi8gfHxcbiAgICAgICAgIGMgPT09IDB4NUQvKiBdICovIHx8XG4gICAgICAgICBjID09PSAweDdCLyogeyAqLyB8fFxuICAgICAgICAgYyA9PT0gMHg3RC8qIH0gKi87XG59XG5cbmZ1bmN0aW9uIGZyb21IZXhDb2RlKGMpIHtcbiAgdmFyIGxjO1xuXG4gIGlmICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzOS8qIDkgKi8pKSB7XG4gICAgcmV0dXJuIGMgLSAweDMwO1xuICB9XG5cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlKi9cbiAgbGMgPSBjIHwgMHgyMDtcblxuICBpZiAoKDB4NjEvKiBhICovIDw9IGxjKSAmJiAobGMgPD0gMHg2Ni8qIGYgKi8pKSB7XG4gICAgcmV0dXJuIGxjIC0gMHg2MSArIDEwO1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVkSGV4TGVuKGMpIHtcbiAgaWYgKGMgPT09IDB4NzgvKiB4ICovKSB7IHJldHVybiAyOyB9XG4gIGlmIChjID09PSAweDc1LyogdSAqLykgeyByZXR1cm4gNDsgfVxuICBpZiAoYyA9PT0gMHg1NS8qIFUgKi8pIHsgcmV0dXJuIDg7IH1cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGZyb21EZWNpbWFsQ29kZShjKSB7XG4gIGlmICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzOS8qIDkgKi8pKSB7XG4gICAgcmV0dXJuIGMgLSAweDMwO1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBzaW1wbGVFc2NhcGVTZXF1ZW5jZShjKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIGluZGVudCAqL1xuICByZXR1cm4gKGMgPT09IDB4MzAvKiAwICovKSA/ICdcXHgwMCcgOlxuICAgICAgICAoYyA9PT0gMHg2MS8qIGEgKi8pID8gJ1xceDA3JyA6XG4gICAgICAgIChjID09PSAweDYyLyogYiAqLykgPyAnXFx4MDgnIDpcbiAgICAgICAgKGMgPT09IDB4NzQvKiB0ICovKSA/ICdcXHgwOScgOlxuICAgICAgICAoYyA9PT0gMHgwOS8qIFRhYiAqLykgPyAnXFx4MDknIDpcbiAgICAgICAgKGMgPT09IDB4NkUvKiBuICovKSA/ICdcXHgwQScgOlxuICAgICAgICAoYyA9PT0gMHg3Ni8qIHYgKi8pID8gJ1xceDBCJyA6XG4gICAgICAgIChjID09PSAweDY2LyogZiAqLykgPyAnXFx4MEMnIDpcbiAgICAgICAgKGMgPT09IDB4NzIvKiByICovKSA/ICdcXHgwRCcgOlxuICAgICAgICAoYyA9PT0gMHg2NS8qIGUgKi8pID8gJ1xceDFCJyA6XG4gICAgICAgIChjID09PSAweDIwLyogU3BhY2UgKi8pID8gJyAnIDpcbiAgICAgICAgKGMgPT09IDB4MjIvKiBcIiAqLykgPyAnXFx4MjInIDpcbiAgICAgICAgKGMgPT09IDB4MkYvKiAvICovKSA/ICcvJyA6XG4gICAgICAgIChjID09PSAweDVDLyogXFwgKi8pID8gJ1xceDVDJyA6XG4gICAgICAgIChjID09PSAweDRFLyogTiAqLykgPyAnXFx4ODUnIDpcbiAgICAgICAgKGMgPT09IDB4NUYvKiBfICovKSA/ICdcXHhBMCcgOlxuICAgICAgICAoYyA9PT0gMHg0Qy8qIEwgKi8pID8gJ1xcdTIwMjgnIDpcbiAgICAgICAgKGMgPT09IDB4NTAvKiBQICovKSA/ICdcXHUyMDI5JyA6ICcnO1xufVxuXG5mdW5jdGlvbiBjaGFyRnJvbUNvZGVwb2ludChjKSB7XG4gIGlmIChjIDw9IDB4RkZGRikge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICB9XG4gIC8vIEVuY29kZSBVVEYtMTYgc3Vycm9nYXRlIHBhaXJcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTE2I0NvZGVfcG9pbnRzX1UuMkIwMTAwMDBfdG9fVS4yQjEwRkZGRlxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcbiAgICAoKGMgLSAweDAxMDAwMCkgPj4gMTApICsgMHhEODAwLFxuICAgICgoYyAtIDB4MDEwMDAwKSAmIDB4MDNGRikgKyAweERDMDBcbiAgKTtcbn1cblxuLy8gc2V0IGEgcHJvcGVydHkgb2YgYSBsaXRlcmFsIG9iamVjdCwgd2hpbGUgcHJvdGVjdGluZyBhZ2FpbnN0IHByb3RvdHlwZSBwb2xsdXRpb24sXG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2lzc3Vlcy8xNjQgZm9yIG1vcmUgZGV0YWlsc1xuZnVuY3Rpb24gc2V0UHJvcGVydHkob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIC8vIHVzZWQgZm9yIHRoaXMgc3BlY2lmaWMga2V5IG9ubHkgYmVjYXVzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgaXMgc2xvd1xuICBpZiAoa2V5ID09PSAnX19wcm90b19fJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG52YXIgc2ltcGxlRXNjYXBlQ2hlY2sgPSBuZXcgQXJyYXkoMjU2KTsgLy8gaW50ZWdlciwgZm9yIGZhc3QgYWNjZXNzXG52YXIgc2ltcGxlRXNjYXBlTWFwID0gbmV3IEFycmF5KDI1Nik7XG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gIHNpbXBsZUVzY2FwZUNoZWNrW2ldID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaSkgPyAxIDogMDtcbiAgc2ltcGxlRXNjYXBlTWFwW2ldID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaSk7XG59XG5cblxuZnVuY3Rpb24gU3RhdGUoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdGhpcy5pbnB1dCA9IGlucHV0O1xuXG4gIHRoaXMuZmlsZW5hbWUgID0gb3B0aW9uc1snZmlsZW5hbWUnXSAgfHwgbnVsbDtcbiAgdGhpcy5zY2hlbWEgICAgPSBvcHRpb25zWydzY2hlbWEnXSAgICB8fCBERUZBVUxUX0ZVTExfU0NIRU1BO1xuICB0aGlzLm9uV2FybmluZyA9IG9wdGlvbnNbJ29uV2FybmluZyddIHx8IG51bGw7XG4gIHRoaXMubGVnYWN5ICAgID0gb3B0aW9uc1snbGVnYWN5J10gICAgfHwgZmFsc2U7XG4gIHRoaXMuanNvbiAgICAgID0gb3B0aW9uc1snanNvbiddICAgICAgfHwgZmFsc2U7XG4gIHRoaXMubGlzdGVuZXIgID0gb3B0aW9uc1snbGlzdGVuZXInXSAgfHwgbnVsbDtcblxuICB0aGlzLmltcGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0O1xuICB0aGlzLnR5cGVNYXAgICAgICAgPSB0aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXA7XG5cbiAgdGhpcy5sZW5ndGggICAgID0gaW5wdXQubGVuZ3RoO1xuICB0aGlzLnBvc2l0aW9uICAgPSAwO1xuICB0aGlzLmxpbmUgICAgICAgPSAwO1xuICB0aGlzLmxpbmVTdGFydCAgPSAwO1xuICB0aGlzLmxpbmVJbmRlbnQgPSAwO1xuXG4gIHRoaXMuZG9jdW1lbnRzID0gW107XG5cbiAgLypcbiAgdGhpcy52ZXJzaW9uO1xuICB0aGlzLmNoZWNrTGluZUJyZWFrcztcbiAgdGhpcy50YWdNYXA7XG4gIHRoaXMuYW5jaG9yTWFwO1xuICB0aGlzLnRhZztcbiAgdGhpcy5hbmNob3I7XG4gIHRoaXMua2luZDtcbiAgdGhpcy5yZXN1bHQ7Ki9cblxufVxuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBZQU1MRXhjZXB0aW9uKFxuICAgIG1lc3NhZ2UsXG4gICAgbmV3IE1hcmsoc3RhdGUuZmlsZW5hbWUsIHN0YXRlLmlucHV0LCBzdGF0ZS5wb3NpdGlvbiwgc3RhdGUubGluZSwgKHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0KSkpO1xufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gIHRocm93IGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiB0aHJvd1dhcm5pbmcoc3RhdGUsIG1lc3NhZ2UpIHtcbiAgaWYgKHN0YXRlLm9uV2FybmluZykge1xuICAgIHN0YXRlLm9uV2FybmluZy5jYWxsKG51bGwsIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpKTtcbiAgfVxufVxuXG5cbnZhciBkaXJlY3RpdmVIYW5kbGVycyA9IHtcblxuICBZQU1MOiBmdW5jdGlvbiBoYW5kbGVZYW1sRGlyZWN0aXZlKHN0YXRlLCBuYW1lLCBhcmdzKSB7XG5cbiAgICB2YXIgbWF0Y2gsIG1ham9yLCBtaW5vcjtcblxuICAgIGlmIChzdGF0ZS52ZXJzaW9uICE9PSBudWxsKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIG1hdGNoID0gL14oWzAtOV0rKVxcLihbMC05XSspJC8uZXhlYyhhcmdzWzBdKTtcblxuICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2lsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlJyk7XG4gICAgfVxuXG4gICAgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgIG1pbm9yID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcblxuICAgIGlmIChtYWpvciAhPT0gMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Jyk7XG4gICAgfVxuXG4gICAgc3RhdGUudmVyc2lvbiA9IGFyZ3NbMF07XG4gICAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gKG1pbm9yIDwgMik7XG5cbiAgICBpZiAobWlub3IgIT09IDEgJiYgbWlub3IgIT09IDIpIHtcbiAgICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ3Vuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQnKTtcbiAgICB9XG4gIH0sXG5cbiAgVEFHOiBmdW5jdGlvbiBoYW5kbGVUYWdEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHtcblxuICAgIHZhciBoYW5kbGUsIHByZWZpeDtcblxuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ1RBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMnKTtcbiAgICB9XG5cbiAgICBoYW5kbGUgPSBhcmdzWzBdO1xuICAgIHByZWZpeCA9IGFyZ3NbMV07XG5cbiAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KGhhbmRsZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZScpO1xuICAgIH1cblxuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS50YWdNYXAsIGhhbmRsZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciBcIicgKyBoYW5kbGUgKyAnXCIgdGFnIGhhbmRsZScpO1xuICAgIH1cblxuICAgIGlmICghUEFUVEVSTl9UQUdfVVJJLnRlc3QocHJlZml4KSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2lsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZScpO1xuICAgIH1cblxuICAgIHN0YXRlLnRhZ01hcFtoYW5kbGVdID0gcHJlZml4O1xuICB9XG59O1xuXG5cbmZ1bmN0aW9uIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBzdGFydCwgZW5kLCBjaGVja0pzb24pIHtcbiAgdmFyIF9wb3NpdGlvbiwgX2xlbmd0aCwgX2NoYXJhY3RlciwgX3Jlc3VsdDtcblxuICBpZiAoc3RhcnQgPCBlbmQpIHtcbiAgICBfcmVzdWx0ID0gc3RhdGUuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgICBpZiAoY2hlY2tKc29uKSB7XG4gICAgICBmb3IgKF9wb3NpdGlvbiA9IDAsIF9sZW5ndGggPSBfcmVzdWx0Lmxlbmd0aDsgX3Bvc2l0aW9uIDwgX2xlbmd0aDsgX3Bvc2l0aW9uICs9IDEpIHtcbiAgICAgICAgX2NoYXJhY3RlciA9IF9yZXN1bHQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuICAgICAgICBpZiAoIShfY2hhcmFjdGVyID09PSAweDA5IHx8XG4gICAgICAgICAgICAgICgweDIwIDw9IF9jaGFyYWN0ZXIgJiYgX2NoYXJhY3RlciA8PSAweDEwRkZGRikpKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2V4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFBBVFRFUk5fTk9OX1BSSU5UQUJMRS50ZXN0KF9yZXN1bHQpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMnKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5yZXN1bHQgKz0gX3Jlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZU1hcHBpbmdzKHN0YXRlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvdmVycmlkYWJsZUtleXMpIHtcbiAgdmFyIHNvdXJjZUtleXMsIGtleSwgaW5kZXgsIHF1YW50aXR5O1xuXG4gIGlmICghY29tbW9uLmlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUnKTtcbiAgfVxuXG4gIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gIGZvciAoaW5kZXggPSAwLCBxdWFudGl0eSA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IHF1YW50aXR5OyBpbmRleCArPSAxKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG5cbiAgICBpZiAoIV9oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlc3RpbmF0aW9uLCBrZXkpKSB7XG4gICAgICBzZXRQcm9wZXJ0eShkZXN0aW5hdGlvbiwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICBvdmVycmlkYWJsZUtleXNba2V5XSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIHN0YXJ0TGluZSwgc3RhcnRQb3MpIHtcbiAgdmFyIGluZGV4LCBxdWFudGl0eTtcblxuICAvLyBUaGUgb3V0cHV0IGlzIGEgcGxhaW4gb2JqZWN0IGhlcmUsIHNvIGtleXMgY2FuIG9ubHkgYmUgc3RyaW5ncy5cbiAgLy8gV2UgbmVlZCB0byBjb252ZXJ0IGtleU5vZGUgdG8gYSBzdHJpbmcsIGJ1dCBkb2luZyBzbyBjYW4gaGFuZyB0aGUgcHJvY2Vzc1xuICAvLyAoZGVlcGx5IG5lc3RlZCBhcnJheXMgdGhhdCBleHBsb2RlIGV4cG9uZW50aWFsbHkgdXNpbmcgYWxpYXNlcykuXG4gIGlmIChBcnJheS5pc0FycmF5KGtleU5vZGUpKSB7XG4gICAga2V5Tm9kZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGtleU5vZGUpO1xuXG4gICAgZm9yIChpbmRleCA9IDAsIHF1YW50aXR5ID0ga2V5Tm9kZS5sZW5ndGg7IGluZGV4IDwgcXVhbnRpdHk7IGluZGV4ICs9IDEpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU5vZGVbaW5kZXhdKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmVzdGVkIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUga2V5cycpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGtleU5vZGUgPT09ICdvYmplY3QnICYmIF9jbGFzcyhrZXlOb2RlW2luZGV4XSkgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICAgIGtleU5vZGVbaW5kZXhdID0gJ1tvYmplY3QgT2JqZWN0XSc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQXZvaWQgY29kZSBleGVjdXRpb24gaW4gbG9hZCgpIHZpYSB0b1N0cmluZyBwcm9wZXJ0eVxuICAvLyAoc3RpbGwgdXNlIGl0cyBvd24gdG9TdHJpbmcgZm9yIGFycmF5cywgdGltZXN0YW1wcyxcbiAgLy8gYW5kIHdoYXRldmVyIHVzZXIgc2NoZW1hIGV4dGVuc2lvbnMgaGFwcGVuIHRvIGhhdmUgQEB0b1N0cmluZ1RhZylcbiAgaWYgKHR5cGVvZiBrZXlOb2RlID09PSAnb2JqZWN0JyAmJiBfY2xhc3Moa2V5Tm9kZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAga2V5Tm9kZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuICB9XG5cblxuICBrZXlOb2RlID0gU3RyaW5nKGtleU5vZGUpO1xuXG4gIGlmIChfcmVzdWx0ID09PSBudWxsKSB7XG4gICAgX3Jlc3VsdCA9IHt9O1xuICB9XG5cbiAgaWYgKGtleVRhZyA9PT0gJ3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlTm9kZSkpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBxdWFudGl0eSA9IHZhbHVlTm9kZS5sZW5ndGg7IGluZGV4IDwgcXVhbnRpdHk7IGluZGV4ICs9IDEpIHtcbiAgICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgX3Jlc3VsdCwgdmFsdWVOb2RlW2luZGV4XSwgb3ZlcnJpZGFibGVLZXlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgX3Jlc3VsdCwgdmFsdWVOb2RlLCBvdmVycmlkYWJsZUtleXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoIXN0YXRlLmpzb24gJiZcbiAgICAgICAgIV9oYXNPd25Qcm9wZXJ0eS5jYWxsKG92ZXJyaWRhYmxlS2V5cywga2V5Tm9kZSkgJiZcbiAgICAgICAgX2hhc093blByb3BlcnR5LmNhbGwoX3Jlc3VsdCwga2V5Tm9kZSkpIHtcbiAgICAgIHN0YXRlLmxpbmUgPSBzdGFydExpbmUgfHwgc3RhdGUubGluZTtcbiAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhcnRQb3MgfHwgc3RhdGUucG9zaXRpb247XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRlZCBtYXBwaW5nIGtleScpO1xuICAgIH1cbiAgICBzZXRQcm9wZXJ0eShfcmVzdWx0LCBrZXlOb2RlLCB2YWx1ZU5vZGUpO1xuICAgIGRlbGV0ZSBvdmVycmlkYWJsZUtleXNba2V5Tm9kZV07XG4gIH1cblxuICByZXR1cm4gX3Jlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVhZExpbmVCcmVhayhzdGF0ZSkge1xuICB2YXIgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4MEEvKiBMRiAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDB4MEQvKiBDUiAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgaWYgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSAweDBBLyogTEYgKi8pIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIHN0YXRlLmxpbmUgKz0gMTtcbiAgc3RhdGUubGluZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG59XG5cbmZ1bmN0aW9uIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7XG4gIHZhciBsaW5lQnJlYWtzID0gMCxcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0NvbW1lbnRzICYmIGNoID09PSAweDIzLyogIyAqLykge1xuICAgICAgZG8ge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9IHdoaWxlIChjaCAhPT0gMHgwQS8qIExGICovICYmIGNoICE9PSAweDBELyogQ1IgKi8gJiYgY2ggIT09IDApO1xuICAgIH1cblxuICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgIGxpbmVCcmVha3MrKztcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgICB3aGlsZSAoY2ggPT09IDB4MjAvKiBTcGFjZSAqLykge1xuICAgICAgICBzdGF0ZS5saW5lSW5kZW50Kys7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNoZWNrSW5kZW50ICE9PSAtMSAmJiBsaW5lQnJlYWtzICE9PSAwICYmIHN0YXRlLmxpbmVJbmRlbnQgPCBjaGVja0luZGVudCkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ2RlZmljaWVudCBpbmRlbnRhdGlvbicpO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVCcmVha3M7XG59XG5cbmZ1bmN0aW9uIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb24sXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcblxuICAvLyBDb25kaXRpb24gc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCBpcyB0ZXN0ZWRcbiAgLy8gaW4gcGFyZW50IG9uIGVhY2ggY2FsbCwgZm9yIGVmZmljaWVuY3kuIE5vIG5lZWRzIHRvIHRlc3QgaGVyZSBhZ2Fpbi5cbiAgaWYgKChjaCA9PT0gMHgyRC8qIC0gKi8gfHwgY2ggPT09IDB4MkUvKiAuICovKSAmJlxuICAgICAgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMSkgJiZcbiAgICAgIGNoID09PSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbiArIDIpKSB7XG5cbiAgICBfcG9zaXRpb24gKz0gMztcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuXG4gICAgaWYgKGNoID09PSAwIHx8IGlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgY291bnQpIHtcbiAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgc3RhdGUucmVzdWx0ICs9ICcgJztcbiAgfSBlbHNlIGlmIChjb3VudCA+IDEpIHtcbiAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgY291bnQgLSAxKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHJlYWRQbGFpblNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCwgd2l0aGluRmxvd0NvbGxlY3Rpb24pIHtcbiAgdmFyIHByZWNlZGluZyxcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIGNhcHR1cmVTdGFydCxcbiAgICAgIGNhcHR1cmVFbmQsXG4gICAgICBoYXNQZW5kaW5nQ29udGVudCxcbiAgICAgIF9saW5lLFxuICAgICAgX2xpbmVTdGFydCxcbiAgICAgIF9saW5lSW5kZW50LFxuICAgICAgX2tpbmQgPSBzdGF0ZS5raW5kLFxuICAgICAgX3Jlc3VsdCA9IHN0YXRlLnJlc3VsdCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGlzX1dTX09SX0VPTChjaCkgICAgICB8fFxuICAgICAgaXNfRkxPV19JTkRJQ0FUT1IoY2gpIHx8XG4gICAgICBjaCA9PT0gMHgyMy8qICMgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI2LyogJiAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4MkEvKiAqICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyMS8qICEgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDdDLyogfCAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4M0UvKiA+ICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyNy8qICcgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDIyLyogXCIgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI1LyogJSAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4NDAvKiBAICovICAgIHx8XG4gICAgICBjaCA9PT0gMHg2MC8qIGAgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoY2ggPT09IDB4M0YvKiA/ICovIHx8IGNoID09PSAweDJELyogLSAqLykge1xuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fFxuICAgICAgICB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgzQS8qIDogKi8pIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8XG4gICAgICAgICAgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBwcmVjZWRpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uIC0gMSk7XG5cbiAgICAgIGlmIChpc19XU19PUl9FT0wocHJlY2VkaW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkgfHxcbiAgICAgICAgICAgICAgIHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkge1xuICAgICAgYnJlYWs7XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICAgIF9saW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7XG4gICAgICBfbGluZUluZGVudCA9IHN0YXRlLmxpbmVJbmRlbnQ7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgLTEpO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7XG4gICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7XG4gICAgICAgIHN0YXRlLmxpbmUgPSBfbGluZTtcbiAgICAgICAgc3RhdGUubGluZVN0YXJ0ID0gX2xpbmVTdGFydDtcbiAgICAgICAgc3RhdGUubGluZUluZGVudCA9IF9saW5lSW5kZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzUGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHN0YXRlLmxpbmUgLSBfbGluZSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb24gKyAxO1xuICAgIH1cblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuXG4gIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcblxuICBpZiAoc3RhdGUucmVzdWx0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gX2tpbmQ7XG4gIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2gsXG4gICAgICBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQ7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggIT09IDB4MjcvKiAnICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgc3RhdGUucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlICgoY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkgIT09IDApIHtcbiAgICBpZiAoY2ggPT09IDB4MjcvKiAnICovKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyNy8qICcgKi8pIHtcbiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB9IGVsc2UgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhcicpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXInKTtcbn1cblxuZnVuY3Rpb24gcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LFxuICAgICAgY2FwdHVyZUVuZCxcbiAgICAgIGhleExlbmd0aCxcbiAgICAgIGhleFJlc3VsdCxcbiAgICAgIHRtcCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDIyLyogXCIgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuICBzdGF0ZS5wb3NpdGlvbisrO1xuICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgyMi8qIFwiICovKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICB9IGVsc2UgaWYgKGNoID09PSAweDVDLyogXFwgKi8pIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpO1xuXG4gICAgICAgIC8vIFRPRE86IHJld29yayB0byBpbmxpbmUgZm4gd2l0aCBubyB0eXBlIGNhc3Q/XG4gICAgICB9IGVsc2UgaWYgKGNoIDwgMjU2ICYmIHNpbXBsZUVzY2FwZUNoZWNrW2NoXSkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gc2ltcGxlRXNjYXBlTWFwW2NoXTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcblxuICAgICAgfSBlbHNlIGlmICgodG1wID0gZXNjYXBlZEhleExlbihjaCkpID4gMCkge1xuICAgICAgICBoZXhMZW5ndGggPSB0bXA7XG4gICAgICAgIGhleFJlc3VsdCA9IDA7XG5cbiAgICAgICAgZm9yICg7IGhleExlbmd0aCA+IDA7IGhleExlbmd0aC0tKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICAgICAgaWYgKCh0bXAgPSBmcm9tSGV4Q29kZShjaCkpID49IDApIHtcbiAgICAgICAgICAgIGhleFJlc3VsdCA9IChoZXhSZXN1bHQgPDwgNCkgKyB0bXA7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2V4cGVjdGVkIGhleGFkZWNpbWFsIGNoYXJhY3RlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjaGFyRnJvbUNvZGVwb2ludChoZXhSZXN1bHQpO1xuXG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmtub3duIGVzY2FwZSBzZXF1ZW5jZScpO1xuICAgICAgfVxuXG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpKTtcbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIH0gZWxzZSBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyJyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhcicpO1xufVxuXG5mdW5jdGlvbiByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIHJlYWROZXh0ID0gdHJ1ZSxcbiAgICAgIF9saW5lLFxuICAgICAgX3RhZyAgICAgPSBzdGF0ZS50YWcsXG4gICAgICBfcmVzdWx0LFxuICAgICAgX2FuY2hvciAgPSBzdGF0ZS5hbmNob3IsXG4gICAgICBmb2xsb3dpbmcsXG4gICAgICB0ZXJtaW5hdG9yLFxuICAgICAgaXNQYWlyLFxuICAgICAgaXNFeHBsaWNpdFBhaXIsXG4gICAgICBpc01hcHBpbmcsXG4gICAgICBvdmVycmlkYWJsZUtleXMgPSB7fSxcbiAgICAgIGtleU5vZGUsXG4gICAgICBrZXlUYWcsXG4gICAgICB2YWx1ZU5vZGUsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCA9PT0gMHg1Qi8qIFsgKi8pIHtcbiAgICB0ZXJtaW5hdG9yID0gMHg1RDsvKiBdICovXG4gICAgaXNNYXBwaW5nID0gZmFsc2U7XG4gICAgX3Jlc3VsdCA9IFtdO1xuICB9IGVsc2UgaWYgKGNoID09PSAweDdCLyogeyAqLykge1xuICAgIHRlcm1pbmF0b3IgPSAweDdEOy8qIH0gKi9cbiAgICBpc01hcHBpbmcgPSB0cnVlO1xuICAgIF9yZXN1bHQgPSB7fTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gdGVybWluYXRvcikge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgc3RhdGUua2luZCA9IGlzTWFwcGluZyA/ICdtYXBwaW5nJyA6ICdzZXF1ZW5jZSc7XG4gICAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghcmVhZE5leHQpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdtaXNzZWQgY29tbWEgYmV0d2VlbiBmbG93IGNvbGxlY3Rpb24gZW50cmllcycpO1xuICAgIH1cblxuICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gZmFsc2U7XG5cbiAgICBpZiAoY2ggPT09IDB4M0YvKiA/ICovKSB7XG4gICAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG5cbiAgICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuICAgICAgICBpc1BhaXIgPSBpc0V4cGxpY2l0UGFpciA9IHRydWU7XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAga2V5VGFnID0gc3RhdGUudGFnO1xuICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKChpc0V4cGxpY2l0UGFpciB8fCBzdGF0ZS5saW5lID09PSBfbGluZSkgJiYgY2ggPT09IDB4M0EvKiA6ICovKSB7XG4gICAgICBpc1BhaXIgPSB0cnVlO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB2YWx1ZU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKGlzTWFwcGluZykge1xuICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSk7XG4gICAgfSBlbHNlIGlmIChpc1BhaXIpIHtcbiAgICAgIF9yZXN1bHQucHVzaChzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBudWxsLCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9yZXN1bHQucHVzaChrZXlOb2RlKTtcbiAgICB9XG5cbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IDB4MkMvKiAsICovKSB7XG4gICAgICByZWFkTmV4dCA9IHRydWU7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYWROZXh0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZmxvdyBjb2xsZWN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja1NjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LFxuICAgICAgZm9sZGluZyxcbiAgICAgIGNob21waW5nICAgICAgID0gQ0hPTVBJTkdfQ0xJUCxcbiAgICAgIGRpZFJlYWRDb250ZW50ID0gZmFsc2UsXG4gICAgICBkZXRlY3RlZEluZGVudCA9IGZhbHNlLFxuICAgICAgdGV4dEluZGVudCAgICAgPSBub2RlSW5kZW50LFxuICAgICAgZW1wdHlMaW5lcyAgICAgPSAwLFxuICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZSxcbiAgICAgIHRtcCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoID09PSAweDdDLyogfCAqLykge1xuICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHgzRS8qID4gKi8pIHtcbiAgICBmb2xkaW5nID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gMHgyQi8qICsgKi8gfHwgY2ggPT09IDB4MkQvKiAtICovKSB7XG4gICAgICBpZiAoQ0hPTVBJTkdfQ0xJUCA9PT0gY2hvbXBpbmcpIHtcbiAgICAgICAgY2hvbXBpbmcgPSAoY2ggPT09IDB4MkIvKiArICovKSA/IENIT01QSU5HX0tFRVAgOiBDSE9NUElOR19TVFJJUDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXInKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKHRtcCA9IGZyb21EZWNpbWFsQ29kZShjaCkpID49IDApIHtcbiAgICAgIGlmICh0bXAgPT09IDApIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2JhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUnKTtcbiAgICAgIH0gZWxzZSBpZiAoIWRldGVjdGVkSW5kZW50KSB7XG4gICAgICAgIHRleHRJbmRlbnQgPSBub2RlSW5kZW50ICsgdG1wIC0gMTtcbiAgICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3JlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyJyk7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgIGRvIHsgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOyB9XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSk7XG5cbiAgICBpZiAoY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgICAgd2hpbGUgKCFpc19FT0woY2gpICYmIChjaCAhPT0gMCkpO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIHdoaWxlICgoIWRldGVjdGVkSW5kZW50IHx8IHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSAmJlxuICAgICAgICAgICAoY2ggPT09IDB4MjAvKiBTcGFjZSAqLykpIHtcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQrKztcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoIWRldGVjdGVkSW5kZW50ICYmIHN0YXRlLmxpbmVJbmRlbnQgPiB0ZXh0SW5kZW50KSB7XG4gICAgICB0ZXh0SW5kZW50ID0gc3RhdGUubGluZUluZGVudDtcbiAgICB9XG5cbiAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgZW1wdHlMaW5lcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gRW5kIG9mIHRoZSBzY2FsYXIuXG4gICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSB7XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIGNob21waW5nLlxuICAgICAgaWYgKGNob21waW5nID09PSBDSE9NUElOR19LRUVQKSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKGNob21waW5nID09PSBDSE9NUElOR19DTElQKSB7XG4gICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkgeyAvLyBpLmUuIG9ubHkgaWYgdGhlIHNjYWxhciBpcyBub3QgZW1wdHkuXG4gICAgICAgICAgc3RhdGUucmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJyZWFrIHRoaXMgYHdoaWxlYCBjeWNsZSBhbmQgZ28gdG8gdGhlIGZ1bmNpdG9uJ3MgZXBpbG9ndWUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBGb2xkZWQgc3R5bGU6IHVzZSBmYW5jeSBydWxlcyB0byBoYW5kbGUgbGluZSBicmVha3MuXG4gICAgaWYgKGZvbGRpbmcpIHtcblxuICAgICAgLy8gTGluZXMgc3RhcnRpbmcgd2l0aCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIChtb3JlLWluZGVudGVkIGxpbmVzKSBhcmUgbm90IGZvbGRlZC5cbiAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlO1xuICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmaXJzdCBjb250ZW50IGxpbmUgKGNmLiBFeGFtcGxlIDguMSlcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTtcblxuICAgICAgLy8gRW5kIG9mIG1vcmUtaW5kZW50ZWQgYmxvY2suXG4gICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7XG4gICAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzICsgMSk7XG5cbiAgICAgIC8vIEp1c3Qgb25lIGxpbmUgYnJlYWsgLSBwZXJjZWl2ZSBhcyB0aGUgc2FtZSBsaW5lLlxuICAgICAgfSBlbHNlIGlmIChlbXB0eUxpbmVzID09PSAwKSB7XG4gICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkgeyAvLyBpLmUuIG9ubHkgaWYgd2UgaGF2ZSBhbHJlYWR5IHJlYWQgc29tZSBzY2FsYXIgY29udGVudC5cbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gJyAnO1xuICAgICAgICB9XG5cbiAgICAgIC8vIFNldmVyYWwgbGluZSBicmVha3MgLSBwZXJjZWl2ZSBhcyBkaWZmZXJlbnQgbGluZXMuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyk7XG4gICAgICB9XG5cbiAgICAvLyBMaXRlcmFsIHN0eWxlOiBqdXN0IGFkZCBleGFjdCBudW1iZXIgb2YgbGluZSBicmVha3MgYmV0d2VlbiBjb250ZW50IGxpbmVzLlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBLZWVwIGFsbCBsaW5lIGJyZWFrcyBleGNlcHQgdGhlIGhlYWRlciBsaW5lIGJyZWFrLlxuICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTtcbiAgICB9XG5cbiAgICBkaWRSZWFkQ29udGVudCA9IHRydWU7XG4gICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgIGVtcHR5TGluZXMgPSAwO1xuICAgIGNhcHR1cmVTdGFydCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgd2hpbGUgKCFpc19FT0woY2gpICYmIChjaCAhPT0gMCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBfbGluZSxcbiAgICAgIF90YWcgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9hbmNob3IgICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIF9yZXN1bHQgICA9IFtdLFxuICAgICAgZm9sbG93aW5nLFxuICAgICAgZGV0ZWN0ZWQgID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoY2ggIT09IDApIHtcblxuICAgIGlmIChjaCAhPT0gMHgyRC8qIC0gKi8pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmICghaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICBzdGF0ZS5wb3NpdGlvbisrO1xuXG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPD0gbm9kZUluZGVudCkge1xuICAgICAgICBfcmVzdWx0LnB1c2gobnVsbCk7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19JTiwgZmFsc2UsIHRydWUpO1xuICAgIF9yZXN1bHQucHVzaChzdGF0ZS5yZXN1bHQpO1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoKHN0YXRlLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSAmJiAoY2ggIT09IDApKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnknKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9ICdzZXF1ZW5jZSc7XG4gICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIG5vZGVJbmRlbnQsIGZsb3dJbmRlbnQpIHtcbiAgdmFyIGZvbGxvd2luZyxcbiAgICAgIGFsbG93Q29tcGFjdCxcbiAgICAgIF9saW5lLFxuICAgICAgX3BvcyxcbiAgICAgIF90YWcgICAgICAgICAgPSBzdGF0ZS50YWcsXG4gICAgICBfYW5jaG9yICAgICAgID0gc3RhdGUuYW5jaG9yLFxuICAgICAgX3Jlc3VsdCAgICAgICA9IHt9LFxuICAgICAgb3ZlcnJpZGFibGVLZXlzID0ge30sXG4gICAgICBrZXlUYWcgICAgICAgID0gbnVsbCxcbiAgICAgIGtleU5vZGUgICAgICAgPSBudWxsLFxuICAgICAgdmFsdWVOb2RlICAgICA9IG51bGwsXG4gICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2UsXG4gICAgICBkZXRlY3RlZCAgICAgID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG4gICAgX2xpbmUgPSBzdGF0ZS5saW5lOyAvLyBTYXZlIHRoZSBjdXJyZW50IGxpbmUuXG4gICAgX3BvcyA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgLy9cbiAgICAvLyBFeHBsaWNpdCBub3RhdGlvbiBjYXNlLiBUaGVyZSBhcmUgdHdvIHNlcGFyYXRlIGJsb2NrczpcbiAgICAvLyBmaXJzdCBmb3IgdGhlIGtleSAoZGVub3RlZCBieSBcIj9cIikgYW5kIHNlY29uZCBmb3IgdGhlIHZhbHVlIChkZW5vdGVkIGJ5IFwiOlwiKVxuICAgIC8vXG4gICAgaWYgKChjaCA9PT0gMHgzRi8qID8gKi8gfHwgY2ggPT09IDB4M0EvKiA6ICovKSAmJiBpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuXG4gICAgICBpZiAoY2ggPT09IDB4M0YvKiA/ICovKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwpO1xuICAgICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gdHJ1ZTtcbiAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTtcblxuICAgICAgfSBlbHNlIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIC8vIGkuZS4gMHgzQS8qIDogKi8gPT09IGNoYXJhY3RlciBhZnRlciB0aGUgZXhwbGljaXQga2V5LlxuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQ7IG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lJyk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLnBvc2l0aW9uICs9IDE7XG4gICAgICBjaCA9IGZvbGxvd2luZztcblxuICAgIC8vXG4gICAgLy8gSW1wbGljaXQgbm90YXRpb24gY2FzZS4gRmxvdy1zdHlsZSBub2RlIGFzIHRoZSBrZXkgZmlyc3QsIHRoZW4gXCI6XCIsIGFuZCB0aGUgdmFsdWUuXG4gICAgLy9cbiAgICB9IGVsc2UgaWYgKGNvbXBvc2VOb2RlKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfT1VULCBmYWxzZSwgdHJ1ZSkpIHtcblxuICAgICAgaWYgKHN0YXRlLmxpbmUgPT09IF9saW5lKSB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaCA9PT0gMHgzQS8qIDogKi8pIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgICAgICBpZiAoIWlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmcnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwpO1xuICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTtcbiAgICAgICAgICBhbGxvd0NvbXBhY3QgPSBmYWxzZTtcbiAgICAgICAgICBrZXlUYWcgPSBzdGF0ZS50YWc7XG4gICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcblxuICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2NhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkJyk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgdGhlIHJlc3VsdCBvZiBgY29tcG9zZU5vZGVgLlxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2NhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleScpO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcmVzdWx0IG9mIGBjb21wb3NlTm9kZWAuXG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7IC8vIFJlYWRpbmcgaXMgZG9uZS4gR28gdG8gdGhlIGVwaWxvZ3VlLlxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gQ29tbW9uIHJlYWRpbmcgY29kZSBmb3IgYm90aCBleHBsaWNpdCBhbmQgaW1wbGljaXQgbm90YXRpb25zLlxuICAgIC8vXG4gICAgaWYgKHN0YXRlLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSB7XG4gICAgICBpZiAoY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfT1VULCB0cnVlLCBhbGxvd0NvbXBhY3QpKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9saW5lLCBfcG9zKTtcbiAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50ICYmIChjaCAhPT0gMCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdiYWQgaW5kZW50YXRpb24gb2YgYSBtYXBwaW5nIGVudHJ5Jyk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgbm9kZUluZGVudCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gRXBpbG9ndWUuXG4gIC8vXG5cbiAgLy8gU3BlY2lhbCBjYXNlOiBsYXN0IG1hcHBpbmcncyBub2RlIGNvbnRhaW5zIG9ubHkgdGhlIGtleSBpbiBleHBsaWNpdCBub3RhdGlvbi5cbiAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7XG4gIH1cblxuICAvLyBFeHBvc2UgdGhlIHJlc3VsdGluZyBtYXBwaW5nLlxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9ICdtYXBwaW5nJztcbiAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGRldGVjdGVkO1xufVxuXG5mdW5jdGlvbiByZWFkVGFnUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbixcbiAgICAgIGlzVmVyYmF0aW0gPSBmYWxzZSxcbiAgICAgIGlzTmFtZWQgICAgPSBmYWxzZSxcbiAgICAgIHRhZ0hhbmRsZSxcbiAgICAgIHRhZ05hbWUsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyMS8qICEgKi8pIHJldHVybiBmYWxzZTtcblxuICBpZiAoc3RhdGUudGFnICE9PSBudWxsKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2R1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5Jyk7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoID09PSAweDNDLyogPCAqLykge1xuICAgIGlzVmVyYmF0aW0gPSB0cnVlO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB9IGVsc2UgaWYgKGNoID09PSAweDIxLyogISAqLykge1xuICAgIGlzTmFtZWQgPSB0cnVlO1xuICAgIHRhZ0hhbmRsZSA9ICchISc7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIH0gZWxzZSB7XG4gICAgdGFnSGFuZGxlID0gJyEnO1xuICB9XG5cbiAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgIHdoaWxlIChjaCAhPT0gMCAmJiBjaCAhPT0gMHgzRS8qID4gKi8pO1xuXG4gICAgaWYgKHN0YXRlLnBvc2l0aW9uIDwgc3RhdGUubGVuZ3RoKSB7XG4gICAgICB0YWdOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcblxuICAgICAgaWYgKGNoID09PSAweDIxLyogISAqLykge1xuICAgICAgICBpZiAoIWlzTmFtZWQpIHtcbiAgICAgICAgICB0YWdIYW5kbGUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24gLSAxLCBzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdCh0YWdIYW5kbGUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpc05hbWVkID0gdHJ1ZTtcbiAgICAgICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgdGFnTmFtZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTLnRlc3QodGFnTmFtZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gIH1cblxuICBpZiAodGFnTmFtZSAmJiAhUEFUVEVSTl9UQUdfVVJJLnRlc3QodGFnTmFtZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIG5hbWUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzOiAnICsgdGFnTmFtZSk7XG4gIH1cblxuICBpZiAoaXNWZXJiYXRpbSkge1xuICAgIHN0YXRlLnRhZyA9IHRhZ05hbWU7XG5cbiAgfSBlbHNlIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS50YWdNYXAsIHRhZ0hhbmRsZSkpIHtcbiAgICBzdGF0ZS50YWcgPSBzdGF0ZS50YWdNYXBbdGFnSGFuZGxlXSArIHRhZ05hbWU7XG5cbiAgfSBlbHNlIGlmICh0YWdIYW5kbGUgPT09ICchJykge1xuICAgIHN0YXRlLnRhZyA9ICchJyArIHRhZ05hbWU7XG5cbiAgfSBlbHNlIGlmICh0YWdIYW5kbGUgPT09ICchIScpIHtcbiAgICBzdGF0ZS50YWcgPSAndGFnOnlhbWwub3JnLDIwMDI6JyArIHRhZ05hbWU7XG5cbiAgfSBlbHNlIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5kZWNsYXJlZCB0YWcgaGFuZGxlIFwiJyArIHRhZ0hhbmRsZSArICdcIicpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlYWRBbmNob3JQcm9wZXJ0eShzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggIT09IDB4MjYvKiAmICovKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHknKTtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpICYmICFpc19GTE9XX0lORElDQVRPUihjaCkpIHtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIH1cblxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IF9wb3NpdGlvbikge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICduYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyJyk7XG4gIH1cblxuICBzdGF0ZS5hbmNob3IgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlYWRBbGlhcyhzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uLCBhbGlhcyxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDJBLyogKiAqLykgcmV0dXJuIGZhbHNlO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpICYmICFpc19GTE9XX0lORElDQVRPUihjaCkpIHtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIH1cblxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IF9wb3NpdGlvbikge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICduYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXInKTtcbiAgfVxuXG4gIGFsaWFzID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKCFfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5hbmNob3JNYXAsIGFsaWFzKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmlkZW50aWZpZWQgYWxpYXMgXCInICsgYWxpYXMgKyAnXCInKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VsdCA9IHN0YXRlLmFuY2hvck1hcFthbGlhc107XG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbXBvc2VOb2RlKHN0YXRlLCBwYXJlbnRJbmRlbnQsIG5vZGVDb250ZXh0LCBhbGxvd1RvU2VlaywgYWxsb3dDb21wYWN0KSB7XG4gIHZhciBhbGxvd0Jsb2NrU3R5bGVzLFxuICAgICAgYWxsb3dCbG9ja1NjYWxhcnMsXG4gICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMsXG4gICAgICBpbmRlbnRTdGF0dXMgPSAxLCAvLyAxOiB0aGlzPnBhcmVudCwgMDogdGhpcz1wYXJlbnQsIC0xOiB0aGlzPHBhcmVudFxuICAgICAgYXROZXdMaW5lICA9IGZhbHNlLFxuICAgICAgaGFzQ29udGVudCA9IGZhbHNlLFxuICAgICAgdHlwZUluZGV4LFxuICAgICAgdHlwZVF1YW50aXR5LFxuICAgICAgdHlwZSxcbiAgICAgIGZsb3dJbmRlbnQsXG4gICAgICBibG9ja0luZGVudDtcblxuICBpZiAoc3RhdGUubGlzdGVuZXIgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5saXN0ZW5lcignb3BlbicsIHN0YXRlKTtcbiAgfVxuXG4gIHN0YXRlLnRhZyAgICA9IG51bGw7XG4gIHN0YXRlLmFuY2hvciA9IG51bGw7XG4gIHN0YXRlLmtpbmQgICA9IG51bGw7XG4gIHN0YXRlLnJlc3VsdCA9IG51bGw7XG5cbiAgYWxsb3dCbG9ja1N0eWxlcyA9IGFsbG93QmxvY2tTY2FsYXJzID0gYWxsb3dCbG9ja0NvbGxlY3Rpb25zID1cbiAgICBDT05URVhUX0JMT0NLX09VVCA9PT0gbm9kZUNvbnRleHQgfHxcbiAgICBDT05URVhUX0JMT0NLX0lOICA9PT0gbm9kZUNvbnRleHQ7XG5cbiAgaWYgKGFsbG93VG9TZWVrKSB7XG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgYXROZXdMaW5lID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPiBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7XG4gICAgICAgIGluZGVudFN0YXR1cyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkge1xuICAgIHdoaWxlIChyZWFkVGFnUHJvcGVydHkoc3RhdGUpIHx8IHJlYWRBbmNob3JQcm9wZXJ0eShzdGF0ZSkpIHtcbiAgICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSkpIHtcbiAgICAgICAgYXROZXdMaW5lID0gdHJ1ZTtcbiAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gYWxsb3dCbG9ja1N0eWxlcztcblxuICAgICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICAgIGluZGVudFN0YXR1cyA9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbGxvd0Jsb2NrQ29sbGVjdGlvbnMpIHtcbiAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhdE5ld0xpbmUgfHwgYWxsb3dDb21wYWN0O1xuICB9XG5cbiAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSB8fCBDT05URVhUX0JMT0NLX09VVCA9PT0gbm9kZUNvbnRleHQpIHtcbiAgICBpZiAoQ09OVEVYVF9GTE9XX0lOID09PSBub2RlQ29udGV4dCB8fCBDT05URVhUX0ZMT1dfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgICAgZmxvd0luZGVudCA9IHBhcmVudEluZGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxvd0luZGVudCA9IHBhcmVudEluZGVudCArIDE7XG4gICAgfVxuXG4gICAgYmxvY2tJbmRlbnQgPSBzdGF0ZS5wb3NpdGlvbiAtIHN0YXRlLmxpbmVTdGFydDtcblxuICAgIGlmIChpbmRlbnRTdGF0dXMgPT09IDEpIHtcbiAgICAgIGlmIChhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgJiZcbiAgICAgICAgICAocmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIGJsb2NrSW5kZW50KSB8fFxuICAgICAgICAgICByZWFkQmxvY2tNYXBwaW5nKHN0YXRlLCBibG9ja0luZGVudCwgZmxvd0luZGVudCkpIHx8XG4gICAgICAgICAgcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlLCBmbG93SW5kZW50KSkge1xuICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgoYWxsb3dCbG9ja1NjYWxhcnMgJiYgcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSkgfHxcbiAgICAgICAgICAgIHJlYWRTaW5nbGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpIHx8XG4gICAgICAgICAgICByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVhZEFsaWFzKHN0YXRlKSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCB8fCBzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBhbnkgcHJvcGVydGllcycpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKHJlYWRQbGFpblNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCwgQ09OVEVYVF9GTE9XX0lOID09PSBub2RlQ29udGV4dCkpIHtcbiAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChzdGF0ZS50YWcgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXRlLnRhZyA9ICc/JztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGluZGVudFN0YXR1cyA9PT0gMCkge1xuICAgICAgLy8gU3BlY2lhbCBjYXNlOiBibG9jayBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgdG8gaGF2ZSBzYW1lIGluZGVudGF0aW9uIGxldmVsIGFzIHRoZSBwYXJlbnQuXG4gICAgICAvLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI3OTk3ODRcbiAgICAgIGhhc0NvbnRlbnQgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgJiYgcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIGJsb2NrSW5kZW50KTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gJyEnKSB7XG4gICAgaWYgKHN0YXRlLnRhZyA9PT0gJz8nKSB7XG4gICAgICAvLyBJbXBsaWNpdCByZXNvbHZpbmcgaXMgbm90IGFsbG93ZWQgZm9yIG5vbi1zY2FsYXIgdHlwZXMsIGFuZCAnPydcbiAgICAgIC8vIG5vbi1zcGVjaWZpYyB0YWcgaXMgb25seSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIHRvIHBsYWluIHNjYWxhcnMuXG4gICAgICAvL1xuICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGNoZWNrIGtpbmQgY29uZm9ybWl0eSBpbiBjYXNlIHVzZXIgZXhwbGljaXRseSBhc3NpZ25zICc/J1xuICAgICAgLy8gdGFnLCBmb3IgZXhhbXBsZSBsaWtlIHRoaXM6IFwiITw/PiBbMF1cIlxuICAgICAgLy9cbiAgICAgIGlmIChzdGF0ZS5yZXN1bHQgIT09IG51bGwgJiYgc3RhdGUua2luZCAhPT0gJ3NjYWxhcicpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgXCJzY2FsYXJcIiwgbm90IFwiJyArIHN0YXRlLmtpbmQgKyAnXCInKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh0eXBlSW5kZXggPSAwLCB0eXBlUXVhbnRpdHkgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgdHlwZUluZGV4IDwgdHlwZVF1YW50aXR5OyB0eXBlSW5kZXggKz0gMSkge1xuICAgICAgICB0eXBlID0gc3RhdGUuaW1wbGljaXRUeXBlc1t0eXBlSW5kZXhdO1xuXG4gICAgICAgIGlmICh0eXBlLnJlc29sdmUoc3RhdGUucmVzdWx0KSkgeyAvLyBgc3RhdGUucmVzdWx0YCB1cGRhdGVkIGluIHJlc29sdmVyIGlmIG1hdGNoZWRcbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgPSB0eXBlLmNvbnN0cnVjdChzdGF0ZS5yZXN1bHQpO1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUudGFnO1xuICAgICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUudHlwZU1hcFtzdGF0ZS5raW5kIHx8ICdmYWxsYmFjayddLCBzdGF0ZS50YWcpKSB7XG4gICAgICB0eXBlID0gc3RhdGUudHlwZU1hcFtzdGF0ZS5raW5kIHx8ICdmYWxsYmFjayddW3N0YXRlLnRhZ107XG5cbiAgICAgIGlmIChzdGF0ZS5yZXN1bHQgIT09IG51bGwgJiYgdHlwZS5raW5kICE9PSBzdGF0ZS5raW5kKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCcgKyBzdGF0ZS50YWcgKyAnPiB0YWc7IGl0IHNob3VsZCBiZSBcIicgKyB0eXBlLmtpbmQgKyAnXCIsIG5vdCBcIicgKyBzdGF0ZS5raW5kICsgJ1wiJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdHlwZS5yZXNvbHZlKHN0YXRlLnJlc3VsdCkpIHsgLy8gYHN0YXRlLnJlc3VsdGAgdXBkYXRlZCBpbiByZXNvbHZlciBpZiBtYXRjaGVkXG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdjYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCcgKyBzdGF0ZS50YWcgKyAnPiBleHBsaWNpdCB0YWcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGUuY29uc3RydWN0KHN0YXRlLnJlc3VsdCk7XG4gICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5rbm93biB0YWcgITwnICsgc3RhdGUudGFnICsgJz4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUubGlzdGVuZXIgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5saXN0ZW5lcignY2xvc2UnLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLnRhZyAhPT0gbnVsbCB8fCAgc3RhdGUuYW5jaG9yICE9PSBudWxsIHx8IGhhc0NvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHJlYWREb2N1bWVudChzdGF0ZSkge1xuICB2YXIgZG9jdW1lbnRTdGFydCA9IHN0YXRlLnBvc2l0aW9uLFxuICAgICAgX3Bvc2l0aW9uLFxuICAgICAgZGlyZWN0aXZlTmFtZSxcbiAgICAgIGRpcmVjdGl2ZUFyZ3MsXG4gICAgICBoYXNEaXJlY3RpdmVzID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBzdGF0ZS52ZXJzaW9uID0gbnVsbDtcbiAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gc3RhdGUubGVnYWN5O1xuICBzdGF0ZS50YWdNYXAgPSB7fTtcbiAgc3RhdGUuYW5jaG9yTWFwID0ge307XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IDAgfHwgY2ggIT09IDB4MjUvKiAlICovKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBkaXJlY3RpdmVOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gICAgZGlyZWN0aXZlQXJncyA9IFtdO1xuXG4gICAgaWYgKGRpcmVjdGl2ZU5hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCcpO1xuICAgIH1cblxuICAgIHdoaWxlIChjaCAhPT0gMCkge1xuICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyMy8qICMgKi8pIHtcbiAgICAgICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19FT0woY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc19FT0woY2gpKSBicmVhaztcblxuICAgICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGRpcmVjdGl2ZUFyZ3MucHVzaChzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoICE9PSAwKSByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChkaXJlY3RpdmVIYW5kbGVycywgZGlyZWN0aXZlTmFtZSkpIHtcbiAgICAgIGRpcmVjdGl2ZUhhbmRsZXJzW2RpcmVjdGl2ZU5hbWVdKHN0YXRlLCBkaXJlY3RpdmVOYW1lLCBkaXJlY3RpdmVBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgXCInICsgZGlyZWN0aXZlTmFtZSArICdcIicpO1xuICAgIH1cbiAgfVxuXG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gMCAmJlxuICAgICAgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgICAgID09PSAweDJELyogLSAqLyAmJlxuICAgICAgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpID09PSAweDJELyogLSAqLyAmJlxuICAgICAgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDIpID09PSAweDJELyogLSAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uICs9IDM7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIH0gZWxzZSBpZiAoaGFzRGlyZWN0aXZlcykge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdkaXJlY3RpdmVzIGVuZCBtYXJrIGlzIGV4cGVjdGVkJyk7XG4gIH1cblxuICBjb21wb3NlTm9kZShzdGF0ZSwgc3RhdGUubGluZUluZGVudCAtIDEsIENPTlRFWFRfQkxPQ0tfT1VULCBmYWxzZSwgdHJ1ZSk7XG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICBpZiAoc3RhdGUuY2hlY2tMaW5lQnJlYWtzICYmXG4gICAgICBQQVRURVJOX05PTl9BU0NJSV9MSU5FX0JSRUFLUy50ZXN0KHN0YXRlLmlucHV0LnNsaWNlKGRvY3VtZW50U3RhcnQsIHN0YXRlLnBvc2l0aW9uKSkpIHtcbiAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICdub24tQVNDSUkgbGluZSBicmVha3MgYXJlIGludGVycHJldGVkIGFzIGNvbnRlbnQnKTtcbiAgfVxuXG4gIHN0YXRlLmRvY3VtZW50cy5wdXNoKHN0YXRlLnJlc3VsdCk7XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkge1xuXG4gICAgaWYgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSAweDJFLyogLiAqLykge1xuICAgICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uIDwgKHN0YXRlLmxlbmd0aCAtIDEpKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2VuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkJyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuO1xuICB9XG59XG5cblxuZnVuY3Rpb24gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucykge1xuICBpbnB1dCA9IFN0cmluZyhpbnB1dCk7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGlmIChpbnB1dC5sZW5ndGggIT09IDApIHtcblxuICAgIC8vIEFkZCB0YWlsaW5nIGBcXG5gIGlmIG5vdCBleGlzdHNcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMHgwQS8qIExGICovICYmXG4gICAgICAgIGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkgIT09IDB4MEQvKiBDUiAqLykge1xuICAgICAgaW5wdXQgKz0gJ1xcbic7XG4gICAgfVxuXG4gICAgLy8gU3RyaXAgQk9NXG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgxKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUoaW5wdXQsIG9wdGlvbnMpO1xuXG4gIHZhciBudWxscG9zID0gaW5wdXQuaW5kZXhPZignXFwwJyk7XG5cbiAgaWYgKG51bGxwb3MgIT09IC0xKSB7XG4gICAgc3RhdGUucG9zaXRpb24gPSBudWxscG9zO1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdudWxsIGJ5dGUgaXMgbm90IGFsbG93ZWQgaW4gaW5wdXQnKTtcbiAgfVxuXG4gIC8vIFVzZSAwIGFzIHN0cmluZyB0ZXJtaW5hdG9yLiBUaGF0IHNpZ25pZmljYW50bHkgc2ltcGxpZmllcyBib3VuZHMgY2hlY2suXG4gIHN0YXRlLmlucHV0ICs9ICdcXDAnO1xuXG4gIHdoaWxlIChzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSA9PT0gMHgyMC8qIFNwYWNlICovKSB7XG4gICAgc3RhdGUubGluZUluZGVudCArPSAxO1xuICAgIHN0YXRlLnBvc2l0aW9uICs9IDE7XG4gIH1cblxuICB3aGlsZSAoc3RhdGUucG9zaXRpb24gPCAoc3RhdGUubGVuZ3RoIC0gMSkpIHtcbiAgICByZWFkRG9jdW1lbnQoc3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlLmRvY3VtZW50cztcbn1cblxuXG5mdW5jdGlvbiBsb2FkQWxsKGlucHV0LCBpdGVyYXRvciwgb3B0aW9ucykge1xuICBpZiAoaXRlcmF0b3IgIT09IG51bGwgJiYgdHlwZW9mIGl0ZXJhdG9yID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zID0gaXRlcmF0b3I7XG4gICAgaXRlcmF0b3IgPSBudWxsO1xuICB9XG5cbiAgdmFyIGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpO1xuXG4gIGlmICh0eXBlb2YgaXRlcmF0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzO1xuICB9XG5cbiAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBkb2N1bWVudHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGl0ZXJhdG9yKGRvY3VtZW50c1tpbmRleF0pO1xuICB9XG59XG5cblxuZnVuY3Rpb24gbG9hZChpbnB1dCwgb3B0aW9ucykge1xuICB2YXIgZG9jdW1lbnRzID0gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucyk7XG5cbiAgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAvKmVzbGludC1kaXNhYmxlIG5vLXVuZGVmaW5lZCovXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIGlmIChkb2N1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50c1swXTtcbiAgfVxuICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUnKTtcbn1cblxuXG5mdW5jdGlvbiBzYWZlTG9hZEFsbChpbnB1dCwgaXRlcmF0b3IsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBpdGVyYXRvciA9PT0gJ29iamVjdCcgJiYgaXRlcmF0b3IgIT09IG51bGwgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgb3B0aW9ucyA9IGl0ZXJhdG9yO1xuICAgIGl0ZXJhdG9yID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBsb2FkQWxsKGlucHV0LCBpdGVyYXRvciwgY29tbW9uLmV4dGVuZCh7IHNjaGVtYTogREVGQVVMVF9TQUZFX1NDSEVNQSB9LCBvcHRpb25zKSk7XG59XG5cblxuZnVuY3Rpb24gc2FmZUxvYWQoaW5wdXQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGxvYWQoaW5wdXQsIGNvbW1vbi5leHRlbmQoeyBzY2hlbWE6IERFRkFVTFRfU0FGRV9TQ0hFTUEgfSwgb3B0aW9ucykpO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzLmxvYWRBbGwgICAgID0gbG9hZEFsbDtcbm1vZHVsZS5leHBvcnRzLmxvYWQgICAgICAgID0gbG9hZDtcbm1vZHVsZS5leHBvcnRzLnNhZmVMb2FkQWxsID0gc2FmZUxvYWRBbGw7XG5tb2R1bGUuZXhwb3J0cy5zYWZlTG9hZCAgICA9IHNhZmVMb2FkO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyplc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSovXG5cbnZhciBjb21tb24gICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9jb21tb24nKTtcbnZhciBZQU1MRXhjZXB0aW9uICAgICAgID0gcmVxdWlyZSgnLi9leGNlcHRpb24nKTtcbnZhciBERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZSgnLi9zY2hlbWEvZGVmYXVsdF9mdWxsJyk7XG52YXIgREVGQVVMVF9TQUZFX1NDSEVNQSA9IHJlcXVpcmUoJy4vc2NoZW1hL2RlZmF1bHRfc2FmZScpO1xuXG52YXIgX3RvU3RyaW5nICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgQ0hBUl9UQUIgICAgICAgICAgICAgICAgICA9IDB4MDk7IC8qIFRhYiAqL1xudmFyIENIQVJfTElORV9GRUVEICAgICAgICAgICAgPSAweDBBOyAvKiBMRiAqL1xudmFyIENIQVJfQ0FSUklBR0VfUkVUVVJOICAgICAgPSAweDBEOyAvKiBDUiAqL1xudmFyIENIQVJfU1BBQ0UgICAgICAgICAgICAgICAgPSAweDIwOyAvKiBTcGFjZSAqL1xudmFyIENIQVJfRVhDTEFNQVRJT04gICAgICAgICAgPSAweDIxOyAvKiAhICovXG52YXIgQ0hBUl9ET1VCTEVfUVVPVEUgICAgICAgICA9IDB4MjI7IC8qIFwiICovXG52YXIgQ0hBUl9TSEFSUCAgICAgICAgICAgICAgICA9IDB4MjM7IC8qICMgKi9cbnZhciBDSEFSX1BFUkNFTlQgICAgICAgICAgICAgID0gMHgyNTsgLyogJSAqL1xudmFyIENIQVJfQU1QRVJTQU5EICAgICAgICAgICAgPSAweDI2OyAvKiAmICovXG52YXIgQ0hBUl9TSU5HTEVfUVVPVEUgICAgICAgICA9IDB4Mjc7IC8qICcgKi9cbnZhciBDSEFSX0FTVEVSSVNLICAgICAgICAgICAgID0gMHgyQTsgLyogKiAqL1xudmFyIENIQVJfQ09NTUEgICAgICAgICAgICAgICAgPSAweDJDOyAvKiAsICovXG52YXIgQ0hBUl9NSU5VUyAgICAgICAgICAgICAgICA9IDB4MkQ7IC8qIC0gKi9cbnZhciBDSEFSX0NPTE9OICAgICAgICAgICAgICAgID0gMHgzQTsgLyogOiAqL1xudmFyIENIQVJfRVFVQUxTICAgICAgICAgICAgICAgPSAweDNEOyAvKiA9ICovXG52YXIgQ0hBUl9HUkVBVEVSX1RIQU4gICAgICAgICA9IDB4M0U7IC8qID4gKi9cbnZhciBDSEFSX1FVRVNUSU9OICAgICAgICAgICAgID0gMHgzRjsgLyogPyAqL1xudmFyIENIQVJfQ09NTUVSQ0lBTF9BVCAgICAgICAgPSAweDQwOyAvKiBAICovXG52YXIgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUICA9IDB4NUI7IC8qIFsgKi9cbnZhciBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUID0gMHg1RDsgLyogXSAqL1xudmFyIENIQVJfR1JBVkVfQUNDRU5UICAgICAgICAgPSAweDYwOyAvKiBgICovXG52YXIgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgICA9IDB4N0I7IC8qIHsgKi9cbnZhciBDSEFSX1ZFUlRJQ0FMX0xJTkUgICAgICAgID0gMHg3QzsgLyogfCAqL1xudmFyIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCAgPSAweDdEOyAvKiB9ICovXG5cbnZhciBFU0NBUEVfU0VRVUVOQ0VTID0ge307XG5cbkVTQ0FQRV9TRVFVRU5DRVNbMHgwMF0gICA9ICdcXFxcMCc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MDddICAgPSAnXFxcXGEnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDA4XSAgID0gJ1xcXFxiJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwOV0gICA9ICdcXFxcdCc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MEFdICAgPSAnXFxcXG4nO1xuRVNDQVBFX1NFUVVFTkNFU1sweDBCXSAgID0gJ1xcXFx2JztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwQ10gICA9ICdcXFxcZic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MERdICAgPSAnXFxcXHInO1xuRVNDQVBFX1NFUVVFTkNFU1sweDFCXSAgID0gJ1xcXFxlJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgyMl0gICA9ICdcXFxcXCInO1xuRVNDQVBFX1NFUVVFTkNFU1sweDVDXSAgID0gJ1xcXFxcXFxcJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHg4NV0gICA9ICdcXFxcTic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4QTBdICAgPSAnXFxcXF8nO1xuRVNDQVBFX1NFUVVFTkNFU1sweDIwMjhdID0gJ1xcXFxMJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgyMDI5XSA9ICdcXFxcUCc7XG5cbnZhciBERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWCA9IFtcbiAgJ3knLCAnWScsICd5ZXMnLCAnWWVzJywgJ1lFUycsICdvbicsICdPbicsICdPTicsXG4gICduJywgJ04nLCAnbm8nLCAnTm8nLCAnTk8nLCAnb2ZmJywgJ09mZicsICdPRkYnXG5dO1xuXG5mdW5jdGlvbiBjb21waWxlU3R5bGVNYXAoc2NoZW1hLCBtYXApIHtcbiAgdmFyIHJlc3VsdCwga2V5cywgaW5kZXgsIGxlbmd0aCwgdGFnLCBzdHlsZSwgdHlwZTtcblxuICBpZiAobWFwID09PSBudWxsKSByZXR1cm4ge307XG5cbiAgcmVzdWx0ID0ge307XG4gIGtleXMgPSBPYmplY3Qua2V5cyhtYXApO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICB0YWcgPSBrZXlzW2luZGV4XTtcbiAgICBzdHlsZSA9IFN0cmluZyhtYXBbdGFnXSk7XG5cbiAgICBpZiAodGFnLnNsaWNlKDAsIDIpID09PSAnISEnKSB7XG4gICAgICB0YWcgPSAndGFnOnlhbWwub3JnLDIwMDI6JyArIHRhZy5zbGljZSgyKTtcbiAgICB9XG4gICAgdHlwZSA9IHNjaGVtYS5jb21waWxlZFR5cGVNYXBbJ2ZhbGxiYWNrJ11bdGFnXTtcblxuICAgIGlmICh0eXBlICYmIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGUuc3R5bGVBbGlhc2VzLCBzdHlsZSkpIHtcbiAgICAgIHN0eWxlID0gdHlwZS5zdHlsZUFsaWFzZXNbc3R5bGVdO1xuICAgIH1cblxuICAgIHJlc3VsdFt0YWddID0gc3R5bGU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBlbmNvZGVIZXgoY2hhcmFjdGVyKSB7XG4gIHZhciBzdHJpbmcsIGhhbmRsZSwgbGVuZ3RoO1xuXG4gIHN0cmluZyA9IGNoYXJhY3Rlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblxuICBpZiAoY2hhcmFjdGVyIDw9IDB4RkYpIHtcbiAgICBoYW5kbGUgPSAneCc7XG4gICAgbGVuZ3RoID0gMjtcbiAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPD0gMHhGRkZGKSB7XG4gICAgaGFuZGxlID0gJ3UnO1xuICAgIGxlbmd0aCA9IDQ7XG4gIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDB4RkZGRkZGRkYpIHtcbiAgICBoYW5kbGUgPSAnVSc7XG4gICAgbGVuZ3RoID0gODtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRicpO1xuICB9XG5cbiAgcmV0dXJuICdcXFxcJyArIGhhbmRsZSArIGNvbW1vbi5yZXBlYXQoJzAnLCBsZW5ndGggLSBzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn1cblxuZnVuY3Rpb24gU3RhdGUob3B0aW9ucykge1xuICB0aGlzLnNjaGVtYSAgICAgICAgPSBvcHRpb25zWydzY2hlbWEnXSB8fCBERUZBVUxUX0ZVTExfU0NIRU1BO1xuICB0aGlzLmluZGVudCAgICAgICAgPSBNYXRoLm1heCgxLCAob3B0aW9uc1snaW5kZW50J10gfHwgMikpO1xuICB0aGlzLm5vQXJyYXlJbmRlbnQgPSBvcHRpb25zWydub0FycmF5SW5kZW50J10gfHwgZmFsc2U7XG4gIHRoaXMuc2tpcEludmFsaWQgICA9IG9wdGlvbnNbJ3NraXBJbnZhbGlkJ10gfHwgZmFsc2U7XG4gIHRoaXMuZmxvd0xldmVsICAgICA9IChjb21tb24uaXNOb3RoaW5nKG9wdGlvbnNbJ2Zsb3dMZXZlbCddKSA/IC0xIDogb3B0aW9uc1snZmxvd0xldmVsJ10pO1xuICB0aGlzLnN0eWxlTWFwICAgICAgPSBjb21waWxlU3R5bGVNYXAodGhpcy5zY2hlbWEsIG9wdGlvbnNbJ3N0eWxlcyddIHx8IG51bGwpO1xuICB0aGlzLnNvcnRLZXlzICAgICAgPSBvcHRpb25zWydzb3J0S2V5cyddIHx8IGZhbHNlO1xuICB0aGlzLmxpbmVXaWR0aCAgICAgPSBvcHRpb25zWydsaW5lV2lkdGgnXSB8fCA4MDtcbiAgdGhpcy5ub1JlZnMgICAgICAgID0gb3B0aW9uc1snbm9SZWZzJ10gfHwgZmFsc2U7XG4gIHRoaXMubm9Db21wYXRNb2RlICA9IG9wdGlvbnNbJ25vQ29tcGF0TW9kZSddIHx8IGZhbHNlO1xuICB0aGlzLmNvbmRlbnNlRmxvdyAgPSBvcHRpb25zWydjb25kZW5zZUZsb3cnXSB8fCBmYWxzZTtcblxuICB0aGlzLmltcGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0O1xuICB0aGlzLmV4cGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEV4cGxpY2l0O1xuXG4gIHRoaXMudGFnID0gbnVsbDtcbiAgdGhpcy5yZXN1bHQgPSAnJztcblxuICB0aGlzLmR1cGxpY2F0ZXMgPSBbXTtcbiAgdGhpcy51c2VkRHVwbGljYXRlcyA9IG51bGw7XG59XG5cbi8vIEluZGVudHMgZXZlcnkgbGluZSBpbiBhIHN0cmluZy4gRW1wdHkgbGluZXMgKFxcbiBvbmx5KSBhcmUgbm90IGluZGVudGVkLlxuZnVuY3Rpb24gaW5kZW50U3RyaW5nKHN0cmluZywgc3BhY2VzKSB7XG4gIHZhciBpbmQgPSBjb21tb24ucmVwZWF0KCcgJywgc3BhY2VzKSxcbiAgICAgIHBvc2l0aW9uID0gMCxcbiAgICAgIG5leHQgPSAtMSxcbiAgICAgIHJlc3VsdCA9ICcnLFxuICAgICAgbGluZSxcbiAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG5cbiAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7XG4gICAgbmV4dCA9IHN0cmluZy5pbmRleE9mKCdcXG4nLCBwb3NpdGlvbik7XG4gICAgaWYgKG5leHQgPT09IC0xKSB7XG4gICAgICBsaW5lID0gc3RyaW5nLnNsaWNlKHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uID0gbGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lID0gc3RyaW5nLnNsaWNlKHBvc2l0aW9uLCBuZXh0ICsgMSk7XG4gICAgICBwb3NpdGlvbiA9IG5leHQgKyAxO1xuICAgIH1cblxuICAgIGlmIChsaW5lLmxlbmd0aCAmJiBsaW5lICE9PSAnXFxuJykgcmVzdWx0ICs9IGluZDtcblxuICAgIHJlc3VsdCArPSBsaW5lO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpIHtcbiAgcmV0dXJuICdcXG4nICsgY29tbW9uLnJlcGVhdCgnICcsIHN0YXRlLmluZGVudCAqIGxldmVsKTtcbn1cblxuZnVuY3Rpb24gdGVzdEltcGxpY2l0UmVzb2x2aW5nKHN0YXRlLCBzdHIpIHtcbiAgdmFyIGluZGV4LCBsZW5ndGgsIHR5cGU7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHN0YXRlLmltcGxpY2l0VHlwZXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzW2luZGV4XTtcblxuICAgIGlmICh0eXBlLnJlc29sdmUoc3RyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBbMzNdIHMtd2hpdGUgOjo9IHMtc3BhY2UgfCBzLXRhYlxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMpIHtcbiAgcmV0dXJuIGMgPT09IENIQVJfU1BBQ0UgfHwgYyA9PT0gQ0hBUl9UQUI7XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIGNhbiBiZSBwcmludGVkIHdpdGhvdXQgZXNjYXBpbmcuXG4vLyBGcm9tIFlBTUwgMS4yOiBcImFueSBhbGxvd2VkIGNoYXJhY3RlcnMga25vd24gdG8gYmUgbm9uLXByaW50YWJsZVxuLy8gc2hvdWxkIGFsc28gYmUgZXNjYXBlZC4gW0hvd2V2ZXIsXSBUaGlzIGlzblx1MjAxOXQgbWFuZGF0b3J5XCJcbi8vIERlcml2ZWQgZnJvbSBuYi1jaGFyIC0gXFx0IC0gI3g4NSAtICN4QTAgLSAjeDIwMjggLSAjeDIwMjkuXG5mdW5jdGlvbiBpc1ByaW50YWJsZShjKSB7XG4gIHJldHVybiAgKDB4MDAwMjAgPD0gYyAmJiBjIDw9IDB4MDAwMDdFKVxuICAgICAgfHwgKCgweDAwMEExIDw9IGMgJiYgYyA8PSAweDAwRDdGRikgJiYgYyAhPT0gMHgyMDI4ICYmIGMgIT09IDB4MjAyOSlcbiAgICAgIHx8ICgoMHgwRTAwMCA8PSBjICYmIGMgPD0gMHgwMEZGRkQpICYmIGMgIT09IDB4RkVGRiAvKiBCT00gKi8pXG4gICAgICB8fCAgKDB4MTAwMDAgPD0gYyAmJiBjIDw9IDB4MTBGRkZGKTtcbn1cblxuLy8gWzM0XSBucy1jaGFyIDo6PSBuYi1jaGFyIC0gcy13aGl0ZVxuLy8gWzI3XSBuYi1jaGFyIDo6PSBjLXByaW50YWJsZSAtIGItY2hhciAtIGMtYnl0ZS1vcmRlci1tYXJrXG4vLyBbMjZdIGItY2hhciAgOjo9IGItbGluZS1mZWVkIHwgYi1jYXJyaWFnZS1yZXR1cm5cbi8vIFsyNF0gYi1saW5lLWZlZWQgICAgICAgOjo9ICAgICAjeEEgICAgLyogTEYgKi9cbi8vIFsyNV0gYi1jYXJyaWFnZS1yZXR1cm4gOjo9ICAgICAjeEQgICAgLyogQ1IgKi9cbi8vIFszXSAgYy1ieXRlLW9yZGVyLW1hcmsgOjo9ICAgICAjeEZFRkZcbmZ1bmN0aW9uIGlzTnNDaGFyKGMpIHtcbiAgcmV0dXJuIGlzUHJpbnRhYmxlKGMpICYmICFpc1doaXRlc3BhY2UoYylcbiAgICAvLyBieXRlLW9yZGVyLW1hcmtcbiAgICAmJiBjICE9PSAweEZFRkZcbiAgICAvLyBiLWNoYXJcbiAgICAmJiBjICE9PSBDSEFSX0NBUlJJQUdFX1JFVFVSTlxuICAgICYmIGMgIT09IENIQVJfTElORV9GRUVEO1xufVxuXG4vLyBTaW1wbGlmaWVkIHRlc3QgZm9yIHZhbHVlcyBhbGxvd2VkIGFmdGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gcGxhaW4gc3R5bGUuXG5mdW5jdGlvbiBpc1BsYWluU2FmZShjLCBwcmV2KSB7XG4gIC8vIFVzZXMgYSBzdWJzZXQgb2YgbmItY2hhciAtIGMtZmxvdy1pbmRpY2F0b3IgLSBcIjpcIiAtIFwiI1wiXG4gIC8vIHdoZXJlIG5iLWNoYXIgOjo9IGMtcHJpbnRhYmxlIC0gYi1jaGFyIC0gYy1ieXRlLW9yZGVyLW1hcmsuXG4gIHJldHVybiBpc1ByaW50YWJsZShjKSAmJiBjICE9PSAweEZFRkZcbiAgICAvLyAtIGMtZmxvdy1pbmRpY2F0b3JcbiAgICAmJiBjICE9PSBDSEFSX0NPTU1BXG4gICAgJiYgYyAhPT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUXG4gICAgJiYgYyAhPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVFxuICAgICYmIGMgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUXG4gICAgJiYgYyAhPT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUXG4gICAgLy8gLSBcIjpcIiAtIFwiI1wiXG4gICAgLy8gLyogQW4gbnMtY2hhciBwcmVjZWRpbmcgKi8gXCIjXCJcbiAgICAmJiBjICE9PSBDSEFSX0NPTE9OXG4gICAgJiYgKChjICE9PSBDSEFSX1NIQVJQKSB8fCAocHJldiAmJiBpc05zQ2hhcihwcmV2KSkpO1xufVxuXG4vLyBTaW1wbGlmaWVkIHRlc3QgZm9yIHZhbHVlcyBhbGxvd2VkIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gcGxhaW4gc3R5bGUuXG5mdW5jdGlvbiBpc1BsYWluU2FmZUZpcnN0KGMpIHtcbiAgLy8gVXNlcyBhIHN1YnNldCBvZiBucy1jaGFyIC0gYy1pbmRpY2F0b3JcbiAgLy8gd2hlcmUgbnMtY2hhciA9IG5iLWNoYXIgLSBzLXdoaXRlLlxuICByZXR1cm4gaXNQcmludGFibGUoYykgJiYgYyAhPT0gMHhGRUZGXG4gICAgJiYgIWlzV2hpdGVzcGFjZShjKSAvLyAtIHMtd2hpdGVcbiAgICAvLyAtIChjLWluZGljYXRvciA6Oj1cbiAgICAvLyBcdTIwMUMtXHUyMDFEIHwgXHUyMDFDP1x1MjAxRCB8IFx1MjAxQzpcdTIwMUQgfCBcdTIwMUMsXHUyMDFEIHwgXHUyMDFDW1x1MjAxRCB8IFx1MjAxQ11cdTIwMUQgfCBcdTIwMUN7XHUyMDFEIHwgXHUyMDFDfVx1MjAxRFxuICAgICYmIGMgIT09IENIQVJfTUlOVVNcbiAgICAmJiBjICE9PSBDSEFSX1FVRVNUSU9OXG4gICAgJiYgYyAhPT0gQ0hBUl9DT0xPTlxuICAgICYmIGMgIT09IENIQVJfQ09NTUFcbiAgICAmJiBjICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVRcbiAgICAmJiBjICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUXG4gICAgJiYgYyAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVRcbiAgICAmJiBjICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVRcbiAgICAvLyB8IFx1MjAxQyNcdTIwMUQgfCBcdTIwMUMmXHUyMDFEIHwgXHUyMDFDKlx1MjAxRCB8IFx1MjAxQyFcdTIwMUQgfCBcdTIwMUN8XHUyMDFEIHwgXHUyMDFDPVx1MjAxRCB8IFx1MjAxQz5cdTIwMUQgfCBcdTIwMUMnXHUyMDFEIHwgXHUyMDFDXCJcdTIwMURcbiAgICAmJiBjICE9PSBDSEFSX1NIQVJQXG4gICAgJiYgYyAhPT0gQ0hBUl9BTVBFUlNBTkRcbiAgICAmJiBjICE9PSBDSEFSX0FTVEVSSVNLXG4gICAgJiYgYyAhPT0gQ0hBUl9FWENMQU1BVElPTlxuICAgICYmIGMgIT09IENIQVJfVkVSVElDQUxfTElORVxuICAgICYmIGMgIT09IENIQVJfRVFVQUxTXG4gICAgJiYgYyAhPT0gQ0hBUl9HUkVBVEVSX1RIQU5cbiAgICAmJiBjICE9PSBDSEFSX1NJTkdMRV9RVU9URVxuICAgICYmIGMgIT09IENIQVJfRE9VQkxFX1FVT1RFXG4gICAgLy8gfCBcdTIwMUMlXHUyMDFEIHwgXHUyMDFDQFx1MjAxRCB8IFx1MjAxQ2BcdTIwMUQpXG4gICAgJiYgYyAhPT0gQ0hBUl9QRVJDRU5UXG4gICAgJiYgYyAhPT0gQ0hBUl9DT01NRVJDSUFMX0FUXG4gICAgJiYgYyAhPT0gQ0hBUl9HUkFWRV9BQ0NFTlQ7XG59XG5cbi8vIERldGVybWluZXMgd2hldGhlciBibG9jayBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgaXMgcmVxdWlyZWQuXG5mdW5jdGlvbiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykge1xuICB2YXIgbGVhZGluZ1NwYWNlUmUgPSAvXlxcbiogLztcbiAgcmV0dXJuIGxlYWRpbmdTcGFjZVJlLnRlc3Qoc3RyaW5nKTtcbn1cblxudmFyIFNUWUxFX1BMQUlOICAgPSAxLFxuICAgIFNUWUxFX1NJTkdMRSAgPSAyLFxuICAgIFNUWUxFX0xJVEVSQUwgPSAzLFxuICAgIFNUWUxFX0ZPTERFRCAgPSA0LFxuICAgIFNUWUxFX0RPVUJMRSAgPSA1O1xuXG4vLyBEZXRlcm1pbmVzIHdoaWNoIHNjYWxhciBzdHlsZXMgYXJlIHBvc3NpYmxlIGFuZCByZXR1cm5zIHRoZSBwcmVmZXJyZWQgc3R5bGUuXG4vLyBsaW5lV2lkdGggPSAtMSA9PiBubyBsaW1pdC5cbi8vIFByZS1jb25kaXRpb25zOiBzdHIubGVuZ3RoID4gMC5cbi8vIFBvc3QtY29uZGl0aW9uczpcbi8vICAgIFNUWUxFX1BMQUlOIG9yIFNUWUxFX1NJTkdMRSA9PiBubyBcXG4gYXJlIGluIHRoZSBzdHJpbmcuXG4vLyAgICBTVFlMRV9MSVRFUkFMID0+IG5vIGxpbmVzIGFyZSBzdWl0YWJsZSBmb3IgZm9sZGluZyAob3IgbGluZVdpZHRoIGlzIC0xKS5cbi8vICAgIFNUWUxFX0ZPTERFRCA9PiBhIGxpbmUgPiBsaW5lV2lkdGggYW5kIGNhbiBiZSBmb2xkZWQgKGFuZCBsaW5lV2lkdGggIT0gLTEpLlxuZnVuY3Rpb24gY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nLCBzaW5nbGVMaW5lT25seSwgaW5kZW50UGVyTGV2ZWwsIGxpbmVXaWR0aCwgdGVzdEFtYmlndW91c1R5cGUpIHtcbiAgdmFyIGk7XG4gIHZhciBjaGFyLCBwcmV2X2NoYXI7XG4gIHZhciBoYXNMaW5lQnJlYWsgPSBmYWxzZTtcbiAgdmFyIGhhc0ZvbGRhYmxlTGluZSA9IGZhbHNlOyAvLyBvbmx5IGNoZWNrZWQgaWYgc2hvdWxkVHJhY2tXaWR0aFxuICB2YXIgc2hvdWxkVHJhY2tXaWR0aCA9IGxpbmVXaWR0aCAhPT0gLTE7XG4gIHZhciBwcmV2aW91c0xpbmVCcmVhayA9IC0xOyAvLyBjb3VudCB0aGUgZmlyc3QgbGluZSBjb3JyZWN0bHlcbiAgdmFyIHBsYWluID0gaXNQbGFpblNhZmVGaXJzdChzdHJpbmcuY2hhckNvZGVBdCgwKSlcbiAgICAgICAgICAmJiAhaXNXaGl0ZXNwYWNlKHN0cmluZy5jaGFyQ29kZUF0KHN0cmluZy5sZW5ndGggLSAxKSk7XG5cbiAgaWYgKHNpbmdsZUxpbmVPbmx5KSB7XG4gICAgLy8gQ2FzZTogbm8gYmxvY2sgc3R5bGVzLlxuICAgIC8vIENoZWNrIGZvciBkaXNhbGxvd2VkIGNoYXJhY3RlcnMgdG8gcnVsZSBvdXQgcGxhaW4gYW5kIHNpbmdsZS5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGFyID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoIWlzUHJpbnRhYmxlKGNoYXIpKSB7XG4gICAgICAgIHJldHVybiBTVFlMRV9ET1VCTEU7XG4gICAgICB9XG4gICAgICBwcmV2X2NoYXIgPSBpID4gMCA/IHN0cmluZy5jaGFyQ29kZUF0KGkgLSAxKSA6IG51bGw7XG4gICAgICBwbGFpbiA9IHBsYWluICYmIGlzUGxhaW5TYWZlKGNoYXIsIHByZXZfY2hhcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIENhc2U6IGJsb2NrIHN0eWxlcyBwZXJtaXR0ZWQuXG4gICAgZm9yIChpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhciA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGNoYXIgPT09IENIQVJfTElORV9GRUVEKSB7XG4gICAgICAgIGhhc0xpbmVCcmVhayA9IHRydWU7XG4gICAgICAgIC8vIENoZWNrIGlmIGFueSBsaW5lIGNhbiBiZSBmb2xkZWQuXG4gICAgICAgIGlmIChzaG91bGRUcmFja1dpZHRoKSB7XG4gICAgICAgICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8XG4gICAgICAgICAgICAvLyBGb2xkYWJsZSBsaW5lID0gdG9vIGxvbmcsIGFuZCBub3QgbW9yZS1pbmRlbnRlZC5cbiAgICAgICAgICAgIChpIC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmXG4gICAgICAgICAgICAgc3RyaW5nW3ByZXZpb3VzTGluZUJyZWFrICsgMV0gIT09ICcgJyk7XG4gICAgICAgICAgcHJldmlvdXNMaW5lQnJlYWsgPSBpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkge1xuICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFO1xuICAgICAgfVxuICAgICAgcHJldl9jaGFyID0gaSA+IDAgPyBzdHJpbmcuY2hhckNvZGVBdChpIC0gMSkgOiBudWxsO1xuICAgICAgcGxhaW4gPSBwbGFpbiAmJiBpc1BsYWluU2FmZShjaGFyLCBwcmV2X2NoYXIpO1xuICAgIH1cbiAgICAvLyBpbiBjYXNlIHRoZSBlbmQgaXMgbWlzc2luZyBhIFxcblxuICAgIGhhc0ZvbGRhYmxlTGluZSA9IGhhc0ZvbGRhYmxlTGluZSB8fCAoc2hvdWxkVHJhY2tXaWR0aCAmJlxuICAgICAgKGkgLSBwcmV2aW91c0xpbmVCcmVhayAtIDEgPiBsaW5lV2lkdGggJiZcbiAgICAgICBzdHJpbmdbcHJldmlvdXNMaW5lQnJlYWsgKyAxXSAhPT0gJyAnKSk7XG4gIH1cbiAgLy8gQWx0aG91Z2ggZXZlcnkgc3R5bGUgY2FuIHJlcHJlc2VudCBcXG4gd2l0aG91dCBlc2NhcGluZywgcHJlZmVyIGJsb2NrIHN0eWxlc1xuICAvLyBmb3IgbXVsdGlsaW5lLCBzaW5jZSB0aGV5J3JlIG1vcmUgcmVhZGFibGUgYW5kIHRoZXkgZG9uJ3QgYWRkIGVtcHR5IGxpbmVzLlxuICAvLyBBbHNvIHByZWZlciBmb2xkaW5nIGEgc3VwZXItbG9uZyBsaW5lLlxuICBpZiAoIWhhc0xpbmVCcmVhayAmJiAhaGFzRm9sZGFibGVMaW5lKSB7XG4gICAgLy8gU3RyaW5ncyBpbnRlcnByZXRhYmxlIGFzIGFub3RoZXIgdHlwZSBoYXZlIHRvIGJlIHF1b3RlZDtcbiAgICAvLyBlLmcuIHRoZSBzdHJpbmcgJ3RydWUnIHZzLiB0aGUgYm9vbGVhbiB0cnVlLlxuICAgIHJldHVybiBwbGFpbiAmJiAhdGVzdEFtYmlndW91c1R5cGUoc3RyaW5nKVxuICAgICAgPyBTVFlMRV9QTEFJTiA6IFNUWUxFX1NJTkdMRTtcbiAgfVxuICAvLyBFZGdlIGNhc2U6IGJsb2NrIGluZGVudGF0aW9uIGluZGljYXRvciBjYW4gb25seSBoYXZlIG9uZSBkaWdpdC5cbiAgaWYgKGluZGVudFBlckxldmVsID4gOSAmJiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykpIHtcbiAgICByZXR1cm4gU1RZTEVfRE9VQkxFO1xuICB9XG4gIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyBibG9jayBzdHlsZXMgYXJlIHZhbGlkLlxuICAvLyBQcmVmZXIgbGl0ZXJhbCBzdHlsZSB1bmxlc3Mgd2Ugd2FudCB0byBmb2xkLlxuICByZXR1cm4gaGFzRm9sZGFibGVMaW5lID8gU1RZTEVfRk9MREVEIDogU1RZTEVfTElURVJBTDtcbn1cblxuLy8gTm90ZTogbGluZSBicmVha2luZy9mb2xkaW5nIGlzIGltcGxlbWVudGVkIGZvciBvbmx5IHRoZSBmb2xkZWQgc3R5bGUuXG4vLyBOQi4gV2UgZHJvcCB0aGUgbGFzdCB0cmFpbGluZyBuZXdsaW5lIChpZiBhbnkpIG9mIGEgcmV0dXJuZWQgYmxvY2sgc2NhbGFyXG4vLyAgc2luY2UgdGhlIGR1bXBlciBhZGRzIGl0cyBvd24gbmV3bGluZS4gVGhpcyBhbHdheXMgd29ya3M6XG4vLyAgICBcdTIwMjIgTm8gZW5kaW5nIG5ld2xpbmUgPT4gdW5hZmZlY3RlZDsgYWxyZWFkeSB1c2luZyBzdHJpcCBcIi1cIiBjaG9tcGluZy5cbi8vICAgIFx1MjAyMiBFbmRpbmcgbmV3bGluZSAgICA9PiByZW1vdmVkIHRoZW4gcmVzdG9yZWQuXG4vLyAgSW1wb3J0YW50bHksIHRoaXMga2VlcHMgdGhlIFwiK1wiIGNob21wIGluZGljYXRvciBmcm9tIGdhaW5pbmcgYW4gZXh0cmEgbGluZS5cbmZ1bmN0aW9uIHdyaXRlU2NhbGFyKHN0YXRlLCBzdHJpbmcsIGxldmVsLCBpc2tleSkge1xuICBzdGF0ZS5kdW1wID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiJydcIjtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5ub0NvbXBhdE1vZGUgJiZcbiAgICAgICAgREVQUkVDQVRFRF9CT09MRUFOU19TWU5UQVguaW5kZXhPZihzdHJpbmcpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIFwiJ1wiICsgc3RyaW5nICsgXCInXCI7XG4gICAgfVxuXG4gICAgdmFyIGluZGVudCA9IHN0YXRlLmluZGVudCAqIE1hdGgubWF4KDEsIGxldmVsKTsgLy8gbm8gMC1pbmRlbnQgc2NhbGFyc1xuICAgIC8vIEFzIGluZGVudGF0aW9uIGdldHMgZGVlcGVyLCBsZXQgdGhlIHdpZHRoIGRlY3JlYXNlIG1vbm90b25pY2FsbHlcbiAgICAvLyB0byB0aGUgbG93ZXIgYm91bmQgbWluKHN0YXRlLmxpbmVXaWR0aCwgNDApLlxuICAgIC8vIE5vdGUgdGhhdCB0aGlzIGltcGxpZXNcbiAgICAvLyAgc3RhdGUubGluZVdpZHRoIFx1MjI2NCA0MCArIHN0YXRlLmluZGVudDogd2lkdGggaXMgZml4ZWQgYXQgdGhlIGxvd2VyIGJvdW5kLlxuICAgIC8vICBzdGF0ZS5saW5lV2lkdGggPiA0MCArIHN0YXRlLmluZGVudDogd2lkdGggZGVjcmVhc2VzIHVudGlsIHRoZSBsb3dlciBib3VuZC5cbiAgICAvLyBUaGlzIGJlaGF2ZXMgYmV0dGVyIHRoYW4gYSBjb25zdGFudCBtaW5pbXVtIHdpZHRoIHdoaWNoIGRpc2FsbG93cyBuYXJyb3dlciBvcHRpb25zLFxuICAgIC8vIG9yIGFuIGluZGVudCB0aHJlc2hvbGQgd2hpY2ggY2F1c2VzIHRoZSB3aWR0aCB0byBzdWRkZW5seSBpbmNyZWFzZS5cbiAgICB2YXIgbGluZVdpZHRoID0gc3RhdGUubGluZVdpZHRoID09PSAtMVxuICAgICAgPyAtMSA6IE1hdGgubWF4KE1hdGgubWluKHN0YXRlLmxpbmVXaWR0aCwgNDApLCBzdGF0ZS5saW5lV2lkdGggLSBpbmRlbnQpO1xuXG4gICAgLy8gV2l0aG91dCBrbm93aW5nIGlmIGtleXMgYXJlIGltcGxpY2l0L2V4cGxpY2l0LCBhc3N1bWUgaW1wbGljaXQgZm9yIHNhZmV0eS5cbiAgICB2YXIgc2luZ2xlTGluZU9ubHkgPSBpc2tleVxuICAgICAgLy8gTm8gYmxvY2sgc3R5bGVzIGluIGZsb3cgbW9kZS5cbiAgICAgIHx8IChzdGF0ZS5mbG93TGV2ZWwgPiAtMSAmJiBsZXZlbCA+PSBzdGF0ZS5mbG93TGV2ZWwpO1xuICAgIGZ1bmN0aW9uIHRlc3RBbWJpZ3VpdHkoc3RyaW5nKSB7XG4gICAgICByZXR1cm4gdGVzdEltcGxpY2l0UmVzb2x2aW5nKHN0YXRlLCBzdHJpbmcpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nLCBzaW5nbGVMaW5lT25seSwgc3RhdGUuaW5kZW50LCBsaW5lV2lkdGgsIHRlc3RBbWJpZ3VpdHkpKSB7XG4gICAgICBjYXNlIFNUWUxFX1BMQUlOOlxuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgY2FzZSBTVFlMRV9TSU5HTEU6XG4gICAgICAgIHJldHVybiBcIidcIiArIHN0cmluZy5yZXBsYWNlKC8nL2csIFwiJydcIikgKyBcIidcIjtcbiAgICAgIGNhc2UgU1RZTEVfTElURVJBTDpcbiAgICAgICAgcmV0dXJuICd8JyArIGJsb2NrSGVhZGVyKHN0cmluZywgc3RhdGUuaW5kZW50KVxuICAgICAgICAgICsgZHJvcEVuZGluZ05ld2xpbmUoaW5kZW50U3RyaW5nKHN0cmluZywgaW5kZW50KSk7XG4gICAgICBjYXNlIFNUWUxFX0ZPTERFRDpcbiAgICAgICAgcmV0dXJuICc+JyArIGJsb2NrSGVhZGVyKHN0cmluZywgc3RhdGUuaW5kZW50KVxuICAgICAgICAgICsgZHJvcEVuZGluZ05ld2xpbmUoaW5kZW50U3RyaW5nKGZvbGRTdHJpbmcoc3RyaW5nLCBsaW5lV2lkdGgpLCBpbmRlbnQpKTtcbiAgICAgIGNhc2UgU1RZTEVfRE9VQkxFOlxuICAgICAgICByZXR1cm4gJ1wiJyArIGVzY2FwZVN0cmluZyhzdHJpbmcsIGxpbmVXaWR0aCkgKyAnXCInO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ2ltcG9zc2libGUgZXJyb3I6IGludmFsaWQgc2NhbGFyIHN0eWxlJyk7XG4gICAgfVxuICB9KCkpO1xufVxuXG4vLyBQcmUtY29uZGl0aW9uczogc3RyaW5nIGlzIHZhbGlkIGZvciBhIGJsb2NrIHNjYWxhciwgMSA8PSBpbmRlbnRQZXJMZXZlbCA8PSA5LlxuZnVuY3Rpb24gYmxvY2tIZWFkZXIoc3RyaW5nLCBpbmRlbnRQZXJMZXZlbCkge1xuICB2YXIgaW5kZW50SW5kaWNhdG9yID0gbmVlZEluZGVudEluZGljYXRvcihzdHJpbmcpID8gU3RyaW5nKGluZGVudFBlckxldmVsKSA6ICcnO1xuXG4gIC8vIG5vdGUgdGhlIHNwZWNpYWwgY2FzZTogdGhlIHN0cmluZyAnXFxuJyBjb3VudHMgYXMgYSBcInRyYWlsaW5nXCIgZW1wdHkgbGluZS5cbiAgdmFyIGNsaXAgPSAgICAgICAgICBzdHJpbmdbc3RyaW5nLmxlbmd0aCAtIDFdID09PSAnXFxuJztcbiAgdmFyIGtlZXAgPSBjbGlwICYmIChzdHJpbmdbc3RyaW5nLmxlbmd0aCAtIDJdID09PSAnXFxuJyB8fCBzdHJpbmcgPT09ICdcXG4nKTtcbiAgdmFyIGNob21wID0ga2VlcCA/ICcrJyA6IChjbGlwID8gJycgOiAnLScpO1xuXG4gIHJldHVybiBpbmRlbnRJbmRpY2F0b3IgKyBjaG9tcCArICdcXG4nO1xufVxuXG4vLyAoU2VlIHRoZSBub3RlIGZvciB3cml0ZVNjYWxhci4pXG5mdW5jdGlvbiBkcm9wRW5kaW5nTmV3bGluZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZ1tzdHJpbmcubGVuZ3RoIC0gMV0gPT09ICdcXG4nID8gc3RyaW5nLnNsaWNlKDAsIC0xKSA6IHN0cmluZztcbn1cblxuLy8gTm90ZTogYSBsb25nIGxpbmUgd2l0aG91dCBhIHN1aXRhYmxlIGJyZWFrIHBvaW50IHdpbGwgZXhjZWVkIHRoZSB3aWR0aCBsaW1pdC5cbi8vIFByZS1jb25kaXRpb25zOiBldmVyeSBjaGFyIGluIHN0ciBpc1ByaW50YWJsZSwgc3RyLmxlbmd0aCA+IDAsIHdpZHRoID4gMC5cbmZ1bmN0aW9uIGZvbGRTdHJpbmcoc3RyaW5nLCB3aWR0aCkge1xuICAvLyBJbiBmb2xkZWQgc3R5bGUsICRrJCBjb25zZWN1dGl2ZSBuZXdsaW5lcyBvdXRwdXQgYXMgJGsrMSQgbmV3bGluZXNcdTIwMTRcbiAgLy8gdW5sZXNzIHRoZXkncmUgYmVmb3JlIG9yIGFmdGVyIGEgbW9yZS1pbmRlbnRlZCBsaW5lLCBvciBhdCB0aGUgdmVyeVxuICAvLyBiZWdpbm5pbmcgb3IgZW5kLCBpbiB3aGljaCBjYXNlICRrJCBtYXBzIHRvICRrJC5cbiAgLy8gVGhlcmVmb3JlLCBwYXJzZSBlYWNoIGNodW5rIGFzIG5ld2xpbmUocykgZm9sbG93ZWQgYnkgYSBjb250ZW50IGxpbmUuXG4gIHZhciBsaW5lUmUgPSAvKFxcbispKFteXFxuXSopL2c7XG5cbiAgLy8gZmlyc3QgbGluZSAocG9zc2libHkgYW4gZW1wdHkgbGluZSlcbiAgdmFyIHJlc3VsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5leHRMRiA9IHN0cmluZy5pbmRleE9mKCdcXG4nKTtcbiAgICBuZXh0TEYgPSBuZXh0TEYgIT09IC0xID8gbmV4dExGIDogc3RyaW5nLmxlbmd0aDtcbiAgICBsaW5lUmUubGFzdEluZGV4ID0gbmV4dExGO1xuICAgIHJldHVybiBmb2xkTGluZShzdHJpbmcuc2xpY2UoMCwgbmV4dExGKSwgd2lkdGgpO1xuICB9KCkpO1xuICAvLyBJZiB3ZSBoYXZlbid0IHJlYWNoZWQgdGhlIGZpcnN0IGNvbnRlbnQgbGluZSB5ZXQsIGRvbid0IGFkZCBhbiBleHRyYSBcXG4uXG4gIHZhciBwcmV2TW9yZUluZGVudGVkID0gc3RyaW5nWzBdID09PSAnXFxuJyB8fCBzdHJpbmdbMF0gPT09ICcgJztcbiAgdmFyIG1vcmVJbmRlbnRlZDtcblxuICAvLyByZXN0IG9mIHRoZSBsaW5lc1xuICB2YXIgbWF0Y2g7XG4gIHdoaWxlICgobWF0Y2ggPSBsaW5lUmUuZXhlYyhzdHJpbmcpKSkge1xuICAgIHZhciBwcmVmaXggPSBtYXRjaFsxXSwgbGluZSA9IG1hdGNoWzJdO1xuICAgIG1vcmVJbmRlbnRlZCA9IChsaW5lWzBdID09PSAnICcpO1xuICAgIHJlc3VsdCArPSBwcmVmaXhcbiAgICAgICsgKCFwcmV2TW9yZUluZGVudGVkICYmICFtb3JlSW5kZW50ZWQgJiYgbGluZSAhPT0gJydcbiAgICAgICAgPyAnXFxuJyA6ICcnKVxuICAgICAgKyBmb2xkTGluZShsaW5lLCB3aWR0aCk7XG4gICAgcHJldk1vcmVJbmRlbnRlZCA9IG1vcmVJbmRlbnRlZDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEdyZWVkeSBsaW5lIGJyZWFraW5nLlxuLy8gUGlja3MgdGhlIGxvbmdlc3QgbGluZSB1bmRlciB0aGUgbGltaXQgZWFjaCB0aW1lLFxuLy8gb3RoZXJ3aXNlIHNldHRsZXMgZm9yIHRoZSBzaG9ydGVzdCBsaW5lIG92ZXIgdGhlIGxpbWl0LlxuLy8gTkIuIE1vcmUtaW5kZW50ZWQgbGluZXMgKmNhbm5vdCogYmUgZm9sZGVkLCBhcyB0aGF0IHdvdWxkIGFkZCBhbiBleHRyYSBcXG4uXG5mdW5jdGlvbiBmb2xkTGluZShsaW5lLCB3aWR0aCkge1xuICBpZiAobGluZSA9PT0gJycgfHwgbGluZVswXSA9PT0gJyAnKSByZXR1cm4gbGluZTtcblxuICAvLyBTaW5jZSBhIG1vcmUtaW5kZW50ZWQgbGluZSBhZGRzIGEgXFxuLCBicmVha3MgY2FuJ3QgYmUgZm9sbG93ZWQgYnkgYSBzcGFjZS5cbiAgdmFyIGJyZWFrUmUgPSAvIFteIF0vZzsgLy8gbm90ZTogdGhlIG1hdGNoIGluZGV4IHdpbGwgYWx3YXlzIGJlIDw9IGxlbmd0aC0yLlxuICB2YXIgbWF0Y2g7XG4gIC8vIHN0YXJ0IGlzIGFuIGluY2x1c2l2ZSBpbmRleC4gZW5kLCBjdXJyLCBhbmQgbmV4dCBhcmUgZXhjbHVzaXZlLlxuICB2YXIgc3RhcnQgPSAwLCBlbmQsIGN1cnIgPSAwLCBuZXh0ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuXG4gIC8vIEludmFyaWFudHM6IDAgPD0gc3RhcnQgPD0gbGVuZ3RoLTEuXG4gIC8vICAgMCA8PSBjdXJyIDw9IG5leHQgPD0gbWF4KDAsIGxlbmd0aC0yKS4gY3VyciAtIHN0YXJ0IDw9IHdpZHRoLlxuICAvLyBJbnNpZGUgdGhlIGxvb3A6XG4gIC8vICAgQSBtYXRjaCBpbXBsaWVzIGxlbmd0aCA+PSAyLCBzbyBjdXJyIGFuZCBuZXh0IGFyZSA8PSBsZW5ndGgtMi5cbiAgd2hpbGUgKChtYXRjaCA9IGJyZWFrUmUuZXhlYyhsaW5lKSkpIHtcbiAgICBuZXh0ID0gbWF0Y2guaW5kZXg7XG4gICAgLy8gbWFpbnRhaW4gaW52YXJpYW50OiBjdXJyIC0gc3RhcnQgPD0gd2lkdGhcbiAgICBpZiAobmV4dCAtIHN0YXJ0ID4gd2lkdGgpIHtcbiAgICAgIGVuZCA9IChjdXJyID4gc3RhcnQpID8gY3VyciA6IG5leHQ7IC8vIGRlcml2ZSBlbmQgPD0gbGVuZ3RoLTJcbiAgICAgIHJlc3VsdCArPSAnXFxuJyArIGxpbmUuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAvLyBza2lwIHRoZSBzcGFjZSB0aGF0IHdhcyBvdXRwdXQgYXMgXFxuXG4gICAgICBzdGFydCA9IGVuZCArIDE7ICAgICAgICAgICAgICAgICAgICAvLyBkZXJpdmUgc3RhcnQgPD0gbGVuZ3RoLTFcbiAgICB9XG4gICAgY3VyciA9IG5leHQ7XG4gIH1cblxuICAvLyBCeSB0aGUgaW52YXJpYW50cywgc3RhcnQgPD0gbGVuZ3RoLTEsIHNvIHRoZXJlIGlzIHNvbWV0aGluZyBsZWZ0IG92ZXIuXG4gIC8vIEl0IGlzIGVpdGhlciB0aGUgd2hvbGUgc3RyaW5nIG9yIGEgcGFydCBzdGFydGluZyBmcm9tIG5vbi13aGl0ZXNwYWNlLlxuICByZXN1bHQgKz0gJ1xcbic7XG4gIC8vIEluc2VydCBhIGJyZWFrIGlmIHRoZSByZW1haW5kZXIgaXMgdG9vIGxvbmcgYW5kIHRoZXJlIGlzIGEgYnJlYWsgYXZhaWxhYmxlLlxuICBpZiAobGluZS5sZW5ndGggLSBzdGFydCA+IHdpZHRoICYmIGN1cnIgPiBzdGFydCkge1xuICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0LCBjdXJyKSArICdcXG4nICsgbGluZS5zbGljZShjdXJyICsgMSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ICs9IGxpbmUuc2xpY2Uoc3RhcnQpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5zbGljZSgxKTsgLy8gZHJvcCBleHRyYSBcXG4gam9pbmVyXG59XG5cbi8vIEVzY2FwZXMgYSBkb3VibGUtcXVvdGVkIHN0cmluZy5cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgY2hhciwgbmV4dENoYXI7XG4gIHZhciBlc2NhcGVTZXE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgLy8gQ2hlY2sgZm9yIHN1cnJvZ2F0ZSBwYWlycyAocmVmZXJlbmNlIFVuaWNvZGUgMy4wIHNlY3Rpb24gXCIzLjcgU3Vycm9nYXRlc1wiKS5cbiAgICBpZiAoY2hhciA+PSAweEQ4MDAgJiYgY2hhciA8PSAweERCRkYvKiBoaWdoIHN1cnJvZ2F0ZSAqLykge1xuICAgICAgbmV4dENoYXIgPSBzdHJpbmcuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICBpZiAobmV4dENoYXIgPj0gMHhEQzAwICYmIG5leHRDaGFyIDw9IDB4REZGRi8qIGxvdyBzdXJyb2dhdGUgKi8pIHtcbiAgICAgICAgLy8gQ29tYmluZSB0aGUgc3Vycm9nYXRlIHBhaXIgYW5kIHN0b3JlIGl0IGVzY2FwZWQuXG4gICAgICAgIHJlc3VsdCArPSBlbmNvZGVIZXgoKGNoYXIgLSAweEQ4MDApICogMHg0MDAgKyBuZXh0Q2hhciAtIDB4REMwMCArIDB4MTAwMDApO1xuICAgICAgICAvLyBBZHZhbmNlIGluZGV4IG9uZSBleHRyYSBzaW5jZSB3ZSBhbHJlYWR5IHVzZWQgdGhhdCBjaGFyIGhlcmUuXG4gICAgICAgIGkrKzsgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIGVzY2FwZVNlcSA9IEVTQ0FQRV9TRVFVRU5DRVNbY2hhcl07XG4gICAgcmVzdWx0ICs9ICFlc2NhcGVTZXEgJiYgaXNQcmludGFibGUoY2hhcilcbiAgICAgID8gc3RyaW5nW2ldXG4gICAgICA6IGVzY2FwZVNlcSB8fCBlbmNvZGVIZXgoY2hhcik7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB3cml0ZUZsb3dTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCkge1xuICB2YXIgX3Jlc3VsdCA9ICcnLFxuICAgICAgX3RhZyAgICA9IHN0YXRlLnRhZyxcbiAgICAgIGluZGV4LFxuICAgICAgbGVuZ3RoO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIC8vIFdyaXRlIG9ubHkgdmFsaWQgZWxlbWVudHMuXG4gICAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdFtpbmRleF0sIGZhbHNlLCBmYWxzZSkpIHtcbiAgICAgIGlmIChpbmRleCAhPT0gMCkgX3Jlc3VsdCArPSAnLCcgKyAoIXN0YXRlLmNvbmRlbnNlRmxvdyA/ICcgJyA6ICcnKTtcbiAgICAgIF9yZXN1bHQgKz0gc3RhdGUuZHVtcDtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gJ1snICsgX3Jlc3VsdCArICddJztcbn1cblxuZnVuY3Rpb24gd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgb2JqZWN0LCBjb21wYWN0KSB7XG4gIHZhciBfcmVzdWx0ID0gJycsXG4gICAgICBfdGFnICAgID0gc3RhdGUudGFnLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGg7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgLy8gV3JpdGUgb25seSB2YWxpZCBlbGVtZW50cy5cbiAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIG9iamVjdFtpbmRleF0sIHRydWUsIHRydWUpKSB7XG4gICAgICBpZiAoIWNvbXBhY3QgfHwgaW5kZXggIT09IDApIHtcbiAgICAgICAgX3Jlc3VsdCArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZS5kdW1wLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAgICAgX3Jlc3VsdCArPSAnLSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcmVzdWx0ICs9ICctICc7XG4gICAgICB9XG5cbiAgICAgIF9yZXN1bHQgKz0gc3RhdGUuZHVtcDtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gX3Jlc3VsdCB8fCAnW10nOyAvLyBFbXB0eSBzZXF1ZW5jZSBpZiBubyB2YWxpZCB2YWx1ZXMuXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvd01hcHBpbmcoc3RhdGUsIGxldmVsLCBvYmplY3QpIHtcbiAgdmFyIF9yZXN1bHQgICAgICAgPSAnJyxcbiAgICAgIF90YWcgICAgICAgICAgPSBzdGF0ZS50YWcsXG4gICAgICBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KSxcbiAgICAgIGluZGV4LFxuICAgICAgbGVuZ3RoLFxuICAgICAgb2JqZWN0S2V5LFxuICAgICAgb2JqZWN0VmFsdWUsXG4gICAgICBwYWlyQnVmZmVyO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcblxuICAgIHBhaXJCdWZmZXIgPSAnJztcbiAgICBpZiAoaW5kZXggIT09IDApIHBhaXJCdWZmZXIgKz0gJywgJztcblxuICAgIGlmIChzdGF0ZS5jb25kZW5zZUZsb3cpIHBhaXJCdWZmZXIgKz0gJ1wiJztcblxuICAgIG9iamVjdEtleSA9IG9iamVjdEtleUxpc3RbaW5kZXhdO1xuICAgIG9iamVjdFZhbHVlID0gb2JqZWN0W29iamVjdEtleV07XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdEtleSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmR1bXAubGVuZ3RoID4gMTAyNCkgcGFpckJ1ZmZlciArPSAnPyAnO1xuXG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wICsgKHN0YXRlLmNvbmRlbnNlRmxvdyA/ICdcIicgOiAnJykgKyAnOicgKyAoc3RhdGUuY29uZGVuc2VGbG93ID8gJycgOiAnICcpO1xuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBvYmplY3RWYWx1ZSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCB2YWx1ZS5cbiAgICB9XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7XG5cbiAgICAvLyBCb3RoIGtleSBhbmQgdmFsdWUgYXJlIHZhbGlkLlxuICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRlLnRhZyA9IF90YWc7XG4gIHN0YXRlLmR1bXAgPSAneycgKyBfcmVzdWx0ICsgJ30nO1xufVxuXG5mdW5jdGlvbiB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgY29tcGFjdCkge1xuICB2YXIgX3Jlc3VsdCAgICAgICA9ICcnLFxuICAgICAgX3RhZyAgICAgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGgsXG4gICAgICBvYmplY3RLZXksXG4gICAgICBvYmplY3RWYWx1ZSxcbiAgICAgIGV4cGxpY2l0UGFpcixcbiAgICAgIHBhaXJCdWZmZXI7XG5cbiAgLy8gQWxsb3cgc29ydGluZyBrZXlzIHNvIHRoYXQgdGhlIG91dHB1dCBmaWxlIGlzIGRldGVybWluaXN0aWNcbiAgaWYgKHN0YXRlLnNvcnRLZXlzID09PSB0cnVlKSB7XG4gICAgLy8gRGVmYXVsdCBzb3J0aW5nXG4gICAgb2JqZWN0S2V5TGlzdC5zb3J0KCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHN0YXRlLnNvcnRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gQ3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAgICBvYmplY3RLZXlMaXN0LnNvcnQoc3RhdGUuc29ydEtleXMpO1xuICB9IGVsc2UgaWYgKHN0YXRlLnNvcnRLZXlzKSB7XG4gICAgLy8gU29tZXRoaW5nIGlzIHdyb25nXG4gICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ3NvcnRLZXlzIG11c3QgYmUgYSBib29sZWFuIG9yIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBwYWlyQnVmZmVyID0gJyc7XG5cbiAgICBpZiAoIWNvbXBhY3QgfHwgaW5kZXggIT09IDApIHtcbiAgICAgIHBhaXJCdWZmZXIgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpO1xuICAgIH1cblxuICAgIG9iamVjdEtleSA9IG9iamVjdEtleUxpc3RbaW5kZXhdO1xuICAgIG9iamVjdFZhbHVlID0gb2JqZWN0W29iamVjdEtleV07XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBvYmplY3RLZXksIHRydWUsIHRydWUsIHRydWUpKSB7XG4gICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIHBhaXIgYmVjYXVzZSBvZiBpbnZhbGlkIGtleS5cbiAgICB9XG5cbiAgICBleHBsaWNpdFBhaXIgPSAoc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gJz8nKSB8fFxuICAgICAgICAgICAgICAgICAgIChzdGF0ZS5kdW1wICYmIHN0YXRlLmR1bXAubGVuZ3RoID4gMTAyNCk7XG5cbiAgICBpZiAoZXhwbGljaXRQYWlyKSB7XG4gICAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7XG4gICAgICAgIHBhaXJCdWZmZXIgKz0gJz8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFpckJ1ZmZlciArPSAnPyAnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcblxuICAgIGlmIChleHBsaWNpdFBhaXIpIHtcbiAgICAgIHBhaXJCdWZmZXIgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpO1xuICAgIH1cblxuICAgIGlmICghd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIG9iamVjdFZhbHVlLCB0cnVlLCBleHBsaWNpdFBhaXIpKSB7XG4gICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIHBhaXIgYmVjYXVzZSBvZiBpbnZhbGlkIHZhbHVlLlxuICAgIH1cblxuICAgIGlmIChzdGF0ZS5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZS5kdW1wLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAgIHBhaXJCdWZmZXIgKz0gJzonO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYWlyQnVmZmVyICs9ICc6ICc7XG4gICAgfVxuXG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wO1xuXG4gICAgLy8gQm90aCBrZXkgYW5kIHZhbHVlIGFyZSB2YWxpZC5cbiAgICBfcmVzdWx0ICs9IHBhaXJCdWZmZXI7XG4gIH1cblxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gX3Jlc3VsdCB8fCAne30nOyAvLyBFbXB0eSBtYXBwaW5nIGlmIG5vIHZhbGlkIHBhaXJzLlxufVxuXG5mdW5jdGlvbiBkZXRlY3RUeXBlKHN0YXRlLCBvYmplY3QsIGV4cGxpY2l0KSB7XG4gIHZhciBfcmVzdWx0LCB0eXBlTGlzdCwgaW5kZXgsIGxlbmd0aCwgdHlwZSwgc3R5bGU7XG5cbiAgdHlwZUxpc3QgPSBleHBsaWNpdCA/IHN0YXRlLmV4cGxpY2l0VHlwZXMgOiBzdGF0ZS5pbXBsaWNpdFR5cGVzO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSB0eXBlTGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdHlwZSA9IHR5cGVMaXN0W2luZGV4XTtcblxuICAgIGlmICgodHlwZS5pbnN0YW5jZU9mICB8fCB0eXBlLnByZWRpY2F0ZSkgJiZcbiAgICAgICAgKCF0eXBlLmluc3RhbmNlT2YgfHwgKCh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JykgJiYgKG9iamVjdCBpbnN0YW5jZW9mIHR5cGUuaW5zdGFuY2VPZikpKSAmJlxuICAgICAgICAoIXR5cGUucHJlZGljYXRlICB8fCB0eXBlLnByZWRpY2F0ZShvYmplY3QpKSkge1xuXG4gICAgICBzdGF0ZS50YWcgPSBleHBsaWNpdCA/IHR5cGUudGFnIDogJz8nO1xuXG4gICAgICBpZiAodHlwZS5yZXByZXNlbnQpIHtcbiAgICAgICAgc3R5bGUgPSBzdGF0ZS5zdHlsZU1hcFt0eXBlLnRhZ10gfHwgdHlwZS5kZWZhdWx0U3R5bGU7XG5cbiAgICAgICAgaWYgKF90b1N0cmluZy5jYWxsKHR5cGUucmVwcmVzZW50KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJykge1xuICAgICAgICAgIF9yZXN1bHQgPSB0eXBlLnJlcHJlc2VudChvYmplY3QsIHN0eWxlKTtcbiAgICAgICAgfSBlbHNlIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlLnJlcHJlc2VudCwgc3R5bGUpKSB7XG4gICAgICAgICAgX3Jlc3VsdCA9IHR5cGUucmVwcmVzZW50W3N0eWxlXShvYmplY3QsIHN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignITwnICsgdHlwZS50YWcgKyAnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgXCInICsgc3R5bGUgKyAnXCIgc3R5bGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLmR1bXAgPSBfcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFNlcmlhbGl6ZXMgYG9iamVjdGAgYW5kIHdyaXRlcyBpdCB0byBnbG9iYWwgYHJlc3VsdGAuXG4vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcywgb3IgZmFsc2Ugb24gaW52YWxpZCBvYmplY3QuXG4vL1xuZnVuY3Rpb24gd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgb2JqZWN0LCBibG9jaywgY29tcGFjdCwgaXNrZXkpIHtcbiAgc3RhdGUudGFnID0gbnVsbDtcbiAgc3RhdGUuZHVtcCA9IG9iamVjdDtcblxuICBpZiAoIWRldGVjdFR5cGUoc3RhdGUsIG9iamVjdCwgZmFsc2UpKSB7XG4gICAgZGV0ZWN0VHlwZShzdGF0ZSwgb2JqZWN0LCB0cnVlKTtcbiAgfVxuXG4gIHZhciB0eXBlID0gX3RvU3RyaW5nLmNhbGwoc3RhdGUuZHVtcCk7XG5cbiAgaWYgKGJsb2NrKSB7XG4gICAgYmxvY2sgPSAoc3RhdGUuZmxvd0xldmVsIDwgMCB8fCBzdGF0ZS5mbG93TGV2ZWwgPiBsZXZlbCk7XG4gIH1cblxuICB2YXIgb2JqZWN0T3JBcnJheSA9IHR5cGUgPT09ICdbb2JqZWN0IE9iamVjdF0nIHx8IHR5cGUgPT09ICdbb2JqZWN0IEFycmF5XScsXG4gICAgICBkdXBsaWNhdGVJbmRleCxcbiAgICAgIGR1cGxpY2F0ZTtcblxuICBpZiAob2JqZWN0T3JBcnJheSkge1xuICAgIGR1cGxpY2F0ZUluZGV4ID0gc3RhdGUuZHVwbGljYXRlcy5pbmRleE9mKG9iamVjdCk7XG4gICAgZHVwbGljYXRlID0gZHVwbGljYXRlSW5kZXggIT09IC0xO1xuICB9XG5cbiAgaWYgKChzdGF0ZS50YWcgIT09IG51bGwgJiYgc3RhdGUudGFnICE9PSAnPycpIHx8IGR1cGxpY2F0ZSB8fCAoc3RhdGUuaW5kZW50ICE9PSAyICYmIGxldmVsID4gMCkpIHtcbiAgICBjb21wYWN0ID0gZmFsc2U7XG4gIH1cblxuICBpZiAoZHVwbGljYXRlICYmIHN0YXRlLnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSkge1xuICAgIHN0YXRlLmR1bXAgPSAnKnJlZl8nICsgZHVwbGljYXRlSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9iamVjdE9yQXJyYXkgJiYgZHVwbGljYXRlICYmICFzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0pIHtcbiAgICAgIHN0YXRlLnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgaWYgKGJsb2NrICYmIChPYmplY3Qua2V5cyhzdGF0ZS5kdW1wKS5sZW5ndGggIT09IDApKSB7XG4gICAgICAgIHdyaXRlQmxvY2tNYXBwaW5nKHN0YXRlLCBsZXZlbCwgc3RhdGUuZHVtcCwgY29tcGFjdCk7XG4gICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICBzdGF0ZS5kdW1wID0gJyZyZWZfJyArIGR1cGxpY2F0ZUluZGV4ICsgc3RhdGUuZHVtcDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVGbG93TWFwcGluZyhzdGF0ZSwgbGV2ZWwsIHN0YXRlLmR1bXApO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9ICcmcmVmXycgKyBkdXBsaWNhdGVJbmRleCArICcgJyArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIHZhciBhcnJheUxldmVsID0gKHN0YXRlLm5vQXJyYXlJbmRlbnQgJiYgKGxldmVsID4gMCkpID8gbGV2ZWwgLSAxIDogbGV2ZWw7XG4gICAgICBpZiAoYmxvY2sgJiYgKHN0YXRlLmR1bXAubGVuZ3RoICE9PSAwKSkge1xuICAgICAgICB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUsIGFycmF5TGV2ZWwsIHN0YXRlLmR1bXAsIGNvbXBhY3QpO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9ICcmcmVmXycgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlRmxvd1NlcXVlbmNlKHN0YXRlLCBhcnJheUxldmVsLCBzdGF0ZS5kdW1wKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyAnICcgKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBTdHJpbmddJykge1xuICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gJz8nKSB7XG4gICAgICAgIHdyaXRlU2NhbGFyKHN0YXRlLCBzdGF0ZS5kdW1wLCBsZXZlbCwgaXNrZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhdGUuc2tpcEludmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCd1bmFjY2VwdGFibGUga2luZCBvZiBhbiBvYmplY3QgdG8gZHVtcCAnICsgdHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09ICc/Jykge1xuICAgICAgc3RhdGUuZHVtcCA9ICchPCcgKyBzdGF0ZS50YWcgKyAnPiAnICsgc3RhdGUuZHVtcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyhvYmplY3QsIHN0YXRlKSB7XG4gIHZhciBvYmplY3RzID0gW10sXG4gICAgICBkdXBsaWNhdGVzSW5kZXhlcyA9IFtdLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGg7XG5cbiAgaW5zcGVjdE5vZGUob2JqZWN0LCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGR1cGxpY2F0ZXNJbmRleGVzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBzdGF0ZS5kdXBsaWNhdGVzLnB1c2gob2JqZWN0c1tkdXBsaWNhdGVzSW5kZXhlc1tpbmRleF1dKTtcbiAgfVxuICBzdGF0ZS51c2VkRHVwbGljYXRlcyA9IG5ldyBBcnJheShsZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0Tm9kZShvYmplY3QsIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKSB7XG4gIHZhciBvYmplY3RLZXlMaXN0LFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGg7XG5cbiAgaWYgKG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0Jykge1xuICAgIGluZGV4ID0gb2JqZWN0cy5pbmRleE9mKG9iamVjdCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKGR1cGxpY2F0ZXNJbmRleGVzLmluZGV4T2YoaW5kZXgpID09PSAtMSkge1xuICAgICAgICBkdXBsaWNhdGVzSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0cy5wdXNoKG9iamVjdCk7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W2luZGV4XSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W29iamVjdEtleUxpc3RbaW5kZXhdXSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGR1bXAoaW5wdXQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHN0YXRlID0gbmV3IFN0YXRlKG9wdGlvbnMpO1xuXG4gIGlmICghc3RhdGUubm9SZWZzKSBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKGlucHV0LCBzdGF0ZSk7XG5cbiAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgMCwgaW5wdXQsIHRydWUsIHRydWUpKSByZXR1cm4gc3RhdGUuZHVtcCArICdcXG4nO1xuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gc2FmZUR1bXAoaW5wdXQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGR1bXAoaW5wdXQsIGNvbW1vbi5leHRlbmQoeyBzY2hlbWE6IERFRkFVTFRfU0FGRV9TQ0hFTUEgfSwgb3B0aW9ucykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5kdW1wICAgICA9IGR1bXA7XG5tb2R1bGUuZXhwb3J0cy5zYWZlRHVtcCA9IHNhZmVEdW1wO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuXG52YXIgbG9hZGVyID0gcmVxdWlyZSgnLi9qcy15YW1sL2xvYWRlcicpO1xudmFyIGR1bXBlciA9IHJlcXVpcmUoJy4vanMteWFtbC9kdW1wZXInKTtcblxuXG5mdW5jdGlvbiBkZXByZWNhdGVkKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uICcgKyBuYW1lICsgJyBpcyBkZXByZWNhdGVkIGFuZCBjYW5ub3QgYmUgdXNlZC4nKTtcbiAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cy5UeXBlICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9qcy15YW1sL3R5cGUnKTtcbm1vZHVsZS5leHBvcnRzLlNjaGVtYSAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hJyk7XG5tb2R1bGUuZXhwb3J0cy5GQUlMU0FGRV9TQ0hFTUEgICAgID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZScpO1xubW9kdWxlLmV4cG9ydHMuSlNPTl9TQ0hFTUEgICAgICAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvanNvbicpO1xubW9kdWxlLmV4cG9ydHMuQ09SRV9TQ0hFTUEgICAgICAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvY29yZScpO1xubW9kdWxlLmV4cG9ydHMuREVGQVVMVF9TQUZFX1NDSEVNQSA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlJyk7XG5tb2R1bGUuZXhwb3J0cy5ERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X2Z1bGwnKTtcbm1vZHVsZS5leHBvcnRzLmxvYWQgICAgICAgICAgICAgICAgPSBsb2FkZXIubG9hZDtcbm1vZHVsZS5leHBvcnRzLmxvYWRBbGwgICAgICAgICAgICAgPSBsb2FkZXIubG9hZEFsbDtcbm1vZHVsZS5leHBvcnRzLnNhZmVMb2FkICAgICAgICAgICAgPSBsb2FkZXIuc2FmZUxvYWQ7XG5tb2R1bGUuZXhwb3J0cy5zYWZlTG9hZEFsbCAgICAgICAgID0gbG9hZGVyLnNhZmVMb2FkQWxsO1xubW9kdWxlLmV4cG9ydHMuZHVtcCAgICAgICAgICAgICAgICA9IGR1bXBlci5kdW1wO1xubW9kdWxlLmV4cG9ydHMuc2FmZUR1bXAgICAgICAgICAgICA9IGR1bXBlci5zYWZlRHVtcDtcbm1vZHVsZS5leHBvcnRzLllBTUxFeGNlcHRpb24gICAgICAgPSByZXF1aXJlKCcuL2pzLXlhbWwvZXhjZXB0aW9uJyk7XG5cbi8vIERlcHJlY2F0ZWQgc2NoZW1hIG5hbWVzIGZyb20gSlMtWUFNTCAyLjAueFxubW9kdWxlLmV4cG9ydHMuTUlOSU1BTF9TQ0hFTUEgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hL2ZhaWxzYWZlJyk7XG5tb2R1bGUuZXhwb3J0cy5TQUZFX1NDSEVNQSAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlJyk7XG5tb2R1bGUuZXhwb3J0cy5ERUZBVUxUX1NDSEVNQSA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsJyk7XG5cbi8vIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGZyb20gSlMtWUFNTCAxLngueFxubW9kdWxlLmV4cG9ydHMuc2NhbiAgICAgICAgICAgPSBkZXByZWNhdGVkKCdzY2FuJyk7XG5tb2R1bGUuZXhwb3J0cy5wYXJzZSAgICAgICAgICA9IGRlcHJlY2F0ZWQoJ3BhcnNlJyk7XG5tb2R1bGUuZXhwb3J0cy5jb21wb3NlICAgICAgICA9IGRlcHJlY2F0ZWQoJ2NvbXBvc2UnKTtcbm1vZHVsZS5leHBvcnRzLmFkZENvbnN0cnVjdG9yID0gZGVwcmVjYXRlZCgnYWRkQ29uc3RydWN0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG5cblxudmFyIHlhbWwgPSByZXF1aXJlKCcuL2xpYi9qcy15YW1sLmpzJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSB5YW1sO1xuIiwgImltcG9ydCAqIGFzIGpzWWFtbCBmcm9tICdqcy15YW1sJztcblxuZXhwb3J0IHsganNZYW1sIH07XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0eWFtbC5wbHVnaW5zJztcblxuZXhwb3J0IGxldCB5YW1sU3RyaW5nVG9PYmplY3QgPSBhc3luYyAoXG4gIHlhbWxTdHJpbmdBcmcsXG4gIG9wdGlvbnNBcmc6IHBsdWdpbnMuanNZYW1sLkxvYWRPcHRpb25zID0ge31cbik6IFByb21pc2U8YW55PiA9PiB7XG4gIHJldHVybiBwbHVnaW5zLmpzWWFtbC5zYWZlTG9hZCh5YW1sU3RyaW5nQXJnKTtcbn07XG5cbmV4cG9ydCBsZXQgb2JqZWN0VG9ZYW1sU3RyaW5nID0gYXN5bmMgKFxuICBvYmplY3RBcmcsXG4gIG9wdGlvbnNBcmc6IHBsdWdpbnMuanNZYW1sLkR1bXBPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIHJldHVybiBwbHVnaW5zLmpzWWFtbC5zYWZlRHVtcChvYmplY3RBcmcpO1xufTtcbiIsICIvKipcbiAqIFRocm93IGEgZ2l2ZW4gZXJyb3IuXG4gKlxuICogQHBhcmFtIHtFcnJvcnxudWxsfHVuZGVmaW5lZH0gW2Vycm9yXVxuICogICBNYXliZSBlcnJvci5cbiAqIEByZXR1cm5zIHthc3NlcnRzIGVycm9yIGlzIG51bGx8dW5kZWZpbmVkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFpbChlcnJvcikge1xuICBpZiAoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnIpIHtcblx0aWYgKHR5cGVvZiBBcnJheS5pc0FycmF5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyKTtcblx0fVxuXG5cdHJldHVybiB0b1N0ci5jYWxsKGFycikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG52YXIgaXNQbGFpbk9iamVjdCA9IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG5cdGlmICghb2JqIHx8IHRvU3RyLmNhbGwob2JqKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHR2YXIgaGFzT3duQ29uc3RydWN0b3IgPSBoYXNPd24uY2FsbChvYmosICdjb25zdHJ1Y3RvcicpO1xuXHR2YXIgaGFzSXNQcm90b3R5cGVPZiA9IG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IucHJvdG90eXBlICYmIGhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICdpc1Byb3RvdHlwZU9mJyk7XG5cdC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBPYmplY3Rcblx0aWYgKG9iai5jb25zdHJ1Y3RvciAmJiAhaGFzT3duQ29uc3RydWN0b3IgJiYgIWhhc0lzUHJvdG90eXBlT2YpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBPd24gcHJvcGVydGllcyBhcmUgZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCxcblx0Ly8gaWYgbGFzdCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9wZXJ0aWVzIGFyZSBvd24uXG5cdHZhciBrZXk7XG5cdGZvciAoa2V5IGluIG9iaikgeyAvKiovIH1cblxuXHRyZXR1cm4gdHlwZW9mIGtleSA9PT0gJ3VuZGVmaW5lZCcgfHwgaGFzT3duLmNhbGwob2JqLCBrZXkpO1xufTtcblxuLy8gSWYgbmFtZSBpcyAnX19wcm90b19fJywgYW5kIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBpcyBhdmFpbGFibGUsIGRlZmluZSBfX3Byb3RvX18gYXMgYW4gb3duIHByb3BlcnR5IG9uIHRhcmdldFxudmFyIHNldFByb3BlcnR5ID0gZnVuY3Rpb24gc2V0UHJvcGVydHkodGFyZ2V0LCBvcHRpb25zKSB7XG5cdGlmIChkZWZpbmVQcm9wZXJ0eSAmJiBvcHRpb25zLm5hbWUgPT09ICdfX3Byb3RvX18nKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBvcHRpb25zLm5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHR2YWx1ZTogb3B0aW9ucy5uZXdWYWx1ZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0dGFyZ2V0W29wdGlvbnMubmFtZV0gPSBvcHRpb25zLm5ld1ZhbHVlO1xuXHR9XG59O1xuXG4vLyBSZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgX19wcm90b19fIGlmICdfX3Byb3RvX18nIGlzIG5vdCBhbiBvd24gcHJvcGVydHlcbnZhciBnZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIGdldFByb3BlcnR5KG9iaiwgbmFtZSkge1xuXHRpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHtcblx0XHRpZiAoIWhhc093bi5jYWxsKG9iaiwgbmFtZSkpIHtcblx0XHRcdHJldHVybiB2b2lkIDA7XG5cdFx0fSBlbHNlIGlmIChnT1BEKSB7XG5cdFx0XHQvLyBJbiBlYXJseSB2ZXJzaW9ucyBvZiBub2RlLCBvYmpbJ19fcHJvdG9fXyddIGlzIGJ1Z2d5IHdoZW4gb2JqIGhhc1xuXHRcdFx0Ly8gX19wcm90b19fIGFzIGFuIG93biBwcm9wZXJ0eS4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigpIHdvcmtzLlxuXHRcdFx0cmV0dXJuIGdPUEQob2JqLCBuYW1lKS52YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb2JqW25hbWVdO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRlbmQoKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZTtcblx0dmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXTtcblx0dmFyIGkgPSAxO1xuXHR2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0dmFyIGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnYm9vbGVhbicpIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcblx0XHQvLyBza2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0aSA9IDI7XG5cdH1cblx0aWYgKHRhcmdldCA9PSBudWxsIHx8ICh0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Zm9yICg7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbaV07XG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmIChvcHRpb25zICE9IG51bGwpIHtcblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAobmFtZSBpbiBvcHRpb25zKSB7XG5cdFx0XHRcdHNyYyA9IGdldFByb3BlcnR5KHRhcmdldCwgbmFtZSk7XG5cdFx0XHRcdGNvcHkgPSBnZXRQcm9wZXJ0eShvcHRpb25zLCBuYW1lKTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICh0YXJnZXQgIT09IGNvcHkpIHtcblx0XHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0XHRpZiAoZGVlcCAmJiBjb3B5ICYmIChpc1BsYWluT2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGlzQXJyYXkoY29weSkpKSkge1xuXHRcdFx0XHRcdFx0aWYgKGNvcHlJc0FycmF5KSB7XG5cdFx0XHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdFx0c2V0UHJvcGVydHkodGFyZ2V0LCB7IG5hbWU6IG5hbWUsIG5ld1ZhbHVlOiBleHRlbmQoZGVlcCwgY2xvbmUsIGNvcHkpIH0pO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGNvcHkgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdFx0XHRzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZTogbmFtZSwgbmV3VmFsdWU6IGNvcHkgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGRlcHJlY2F0ZShmbikge1xuICByZXR1cm4gZm5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsKCkge31cblxuZXhwb3J0IGZ1bmN0aW9uIG9rKCkge31cblxuZXhwb3J0IGZ1bmN0aW9uIHVucmVhY2hhYmxlKCkge31cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcblx0cmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsdWUpO1xufVxuIiwgIi8vIFRvIGRvOiByZW1vdmUgYHZvaWRgc1xuLy8gVG8gZG86IHJlbW92ZSBgbnVsbGAgZnJvbSBvdXRwdXQgb2Ygb3VyIEFQSXMsIGFsbG93IGl0IGFzIHVzZXIgQVBJcy5cblxuLyoqXG4gKiBAdHlwZWRlZiB7KGVycm9yPzogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCAuLi5vdXRwdXQ6IEFycmF5PGFueT4pID0+IHZvaWR9IENhbGxiYWNrXG4gKiAgIENhbGxiYWNrLlxuICpcbiAqIEB0eXBlZGVmIHsoLi4uaW5wdXQ6IEFycmF5PGFueT4pID0+IGFueX0gTWlkZGxld2FyZVxuICogICBXYXJlLlxuICpcbiAqIEB0eXBlZGVmIFBpcGVsaW5lXG4gKiAgIFBpcGVsaW5lLlxuICogQHByb3BlcnR5IHtSdW59IHJ1blxuICogICBSdW4gdGhlIHBpcGVsaW5lLlxuICogQHByb3BlcnR5IHtVc2V9IHVzZVxuICogICBBZGQgbWlkZGxld2FyZS5cbiAqXG4gKiBAdHlwZWRlZiB7KC4uLmlucHV0OiBBcnJheTxhbnk+KSA9PiB2b2lkfSBSdW5cbiAqICAgQ2FsbCBhbGwgbWlkZGxld2FyZS5cbiAqXG4gKiAgIENhbGxzIGBkb25lYCBvbiBjb21wbGV0aW9uIHdpdGggZWl0aGVyIGFuIGVycm9yIG9yIHRoZSBvdXRwdXQgb2YgdGhlXG4gKiAgIGxhc3QgbWlkZGxld2FyZS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBhcyB0aGUgbGVuZ3RoIG9mIGlucHV0IGRlZmluZXMgd2hldGhlciBhc3luYyBmdW5jdGlvbnMgZ2V0IGFcbiAqICAgPiBgbmV4dGAgZnVuY3Rpb24sXG4gKiAgID4gaXRcdTIwMTlzIHJlY29tbWVuZGVkIHRvIGtlZXAgYGlucHV0YCBhdCBvbmUgdmFsdWUgbm9ybWFsbHkuXG5cbiAqXG4gKiBAdHlwZWRlZiB7KGZuOiBNaWRkbGV3YXJlKSA9PiBQaXBlbGluZX0gVXNlXG4gKiAgIEFkZCBtaWRkbGV3YXJlLlxuICovXG5cbi8qKlxuICogQ3JlYXRlIG5ldyBtaWRkbGV3YXJlLlxuICpcbiAqIEByZXR1cm5zIHtQaXBlbGluZX1cbiAqICAgUGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cm91Z2goKSB7XG4gIC8qKiBAdHlwZSB7QXJyYXk8TWlkZGxld2FyZT59ICovXG4gIGNvbnN0IGZucyA9IFtdXG4gIC8qKiBAdHlwZSB7UGlwZWxpbmV9ICovXG4gIGNvbnN0IHBpcGVsaW5lID0ge3J1biwgdXNlfVxuXG4gIHJldHVybiBwaXBlbGluZVxuXG4gIC8qKiBAdHlwZSB7UnVufSAqL1xuICBmdW5jdGlvbiBydW4oLi4udmFsdWVzKSB7XG4gICAgbGV0IG1pZGRsZXdhcmVJbmRleCA9IC0xXG4gICAgLyoqIEB0eXBlIHtDYWxsYmFja30gKi9cbiAgICBjb25zdCBjYWxsYmFjayA9IHZhbHVlcy5wb3AoKVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZnVuY3Rpb24gYXMgbGFzdCBhcmd1bWVudCwgbm90ICcgKyBjYWxsYmFjaylcbiAgICB9XG5cbiAgICBuZXh0KG51bGwsIC4uLnZhbHVlcylcblxuICAgIC8qKlxuICAgICAqIFJ1biB0aGUgbmV4dCBgZm5gLCBvciB3ZVx1MjAxOXJlIGRvbmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Vycm9yIHwgbnVsbCB8IHVuZGVmaW5lZH0gZXJyb3JcbiAgICAgKiBAcGFyYW0ge0FycmF5PGFueT59IG91dHB1dFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5leHQoZXJyb3IsIC4uLm91dHB1dCkge1xuICAgICAgY29uc3QgZm4gPSBmbnNbKyttaWRkbGV3YXJlSW5kZXhdXG4gICAgICBsZXQgaW5kZXggPSAtMVxuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBDb3B5IG5vbi1udWxsaXNoIGlucHV0IGludG8gdmFsdWVzLlxuICAgICAgd2hpbGUgKCsraW5kZXggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChvdXRwdXRbaW5kZXhdID09PSBudWxsIHx8IG91dHB1dFtpbmRleF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG91dHB1dFtpbmRleF0gPSB2YWx1ZXNbaW5kZXhdXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSB0aGUgbmV3bHkgY3JlYXRlZCBgb3V0cHV0YCBmb3IgdGhlIG5leHQgY2FsbC5cbiAgICAgIHZhbHVlcyA9IG91dHB1dFxuXG4gICAgICAvLyBOZXh0IG9yIGRvbmUuXG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgd3JhcChmbiwgbmV4dCkoLi4ub3V0cHV0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgLi4ub3V0cHV0KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAdHlwZSB7VXNlfSAqL1xuICBmdW5jdGlvbiB1c2UobWlkZGVsd2FyZSkge1xuICAgIGlmICh0eXBlb2YgbWlkZGVsd2FyZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0V4cGVjdGVkIGBtaWRkZWx3YXJlYCB0byBiZSBhIGZ1bmN0aW9uLCBub3QgJyArIG1pZGRlbHdhcmVcbiAgICAgIClcbiAgICB9XG5cbiAgICBmbnMucHVzaChtaWRkZWx3YXJlKVxuICAgIHJldHVybiBwaXBlbGluZVxuICB9XG59XG5cbi8qKlxuICogV3JhcCBgbWlkZGxld2FyZWAgaW50byBhIHVuaWZvcm0gaW50ZXJmYWNlLlxuICpcbiAqIFlvdSBjYW4gcGFzcyBhbGwgaW5wdXQgdG8gdGhlIHJlc3VsdGluZyBmdW5jdGlvbi5cbiAqIGBjYWxsYmFja2AgaXMgdGhlbiBjYWxsZWQgd2l0aCB0aGUgb3V0cHV0IG9mIGBtaWRkbGV3YXJlYC5cbiAqXG4gKiBJZiBgbWlkZGxld2FyZWAgYWNjZXB0cyBtb3JlIGFyZ3VtZW50cyB0aGFuIHRoZSBsYXRlciBnaXZlbiBpbiBpbnB1dCxcbiAqIGFuIGV4dHJhIGBkb25lYCBmdW5jdGlvbiBpcyBwYXNzZWQgdG8gaXQgYWZ0ZXIgdGhhdCBpbnB1dCxcbiAqIHdoaWNoIG11c3QgYmUgY2FsbGVkIGJ5IGBtaWRkbGV3YXJlYC5cbiAqXG4gKiBUaGUgZmlyc3QgdmFsdWUgaW4gYGlucHV0YCBpcyB0aGUgbWFpbiBpbnB1dCB2YWx1ZS5cbiAqIEFsbCBvdGhlciBpbnB1dCB2YWx1ZXMgYXJlIHRoZSByZXN0IGlucHV0IHZhbHVlcy5cbiAqIFRoZSB2YWx1ZXMgZ2l2ZW4gdG8gYGNhbGxiYWNrYCBhcmUgdGhlIGlucHV0IHZhbHVlcyxcbiAqIG1lcmdlZCB3aXRoIGV2ZXJ5IG5vbi1udWxsaXNoIG91dHB1dCB2YWx1ZS5cbiAqXG4gKiAqIGlmIGBtaWRkbGV3YXJlYCB0aHJvd3MgYW4gZXJyb3IsXG4gKiAgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMgcmVqZWN0ZWQsXG4gKiAgIG9yIGNhbGxzIHRoZSBnaXZlbiBgZG9uZWAgZnVuY3Rpb24gd2l0aCBhbiBlcnJvcixcbiAqICAgYGNhbGxiYWNrYCBpcyBjYWxsZWQgd2l0aCB0aGF0IGVycm9yXG4gKiAqIGlmIGBtaWRkbGV3YXJlYCByZXR1cm5zIGEgdmFsdWUgb3IgcmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCxcbiAqICAgdGhhdCB2YWx1ZSBpcyB0aGUgbWFpbiBvdXRwdXQgdmFsdWVcbiAqICogaWYgYG1pZGRsZXdhcmVgIGNhbGxzIGBkb25lYCxcbiAqICAgYWxsIG5vbi1udWxsaXNoIHZhbHVlcyBleGNlcHQgZm9yIHRoZSBmaXJzdCBvbmUgKHRoZSBlcnJvcikgb3ZlcndyaXRlIHRoZVxuICogICBvdXRwdXQgdmFsdWVzXG4gKlxuICogQHBhcmFtIHtNaWRkbGV3YXJlfSBtaWRkbGV3YXJlXG4gKiAgIEZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0NhbGxiYWNrfSBjYWxsYmFja1xuICogICBDYWxsYmFjayBjYWxsZWQgd2l0aCB0aGUgb3V0cHV0IG9mIGBtaWRkbGV3YXJlYC5cbiAqIEByZXR1cm5zIHtSdW59XG4gKiAgIFdyYXBwZWQgbWlkZGxld2FyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXAobWlkZGxld2FyZSwgY2FsbGJhY2spIHtcbiAgLyoqIEB0eXBlIHtib29sZWFufSAqL1xuICBsZXQgY2FsbGVkXG5cbiAgcmV0dXJuIHdyYXBwZWRcblxuICAvKipcbiAgICogQ2FsbCBgbWlkZGxld2FyZWAuXG4gICAqIEB0aGlzIHthbnl9XG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gcGFyYW1ldGVyc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIHdyYXBwZWQoLi4ucGFyYW1ldGVycykge1xuICAgIGNvbnN0IGZuRXhwZWN0c0NhbGxiYWNrID0gbWlkZGxld2FyZS5sZW5ndGggPiBwYXJhbWV0ZXJzLmxlbmd0aFxuICAgIC8qKiBAdHlwZSB7YW55fSAqL1xuICAgIGxldCByZXN1bHRcblxuICAgIGlmIChmbkV4cGVjdHNDYWxsYmFjaykge1xuICAgICAgcGFyYW1ldGVycy5wdXNoKGRvbmUpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IG1pZGRsZXdhcmUuYXBwbHkodGhpcywgcGFyYW1ldGVycylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXhjZXB0aW9uID0gLyoqIEB0eXBlIHtFcnJvcn0gKi8gKGVycm9yKVxuXG4gICAgICAvLyBXZWxsLCB0aGlzIGlzIHF1aXRlIHRoZSBwaWNrbGUuXG4gICAgICAvLyBgbWlkZGxld2FyZWAgcmVjZWl2ZWQgYSBjYWxsYmFjayBhbmQgY2FsbGVkIGl0IHN5bmNocm9ub3VzbHksIGJ1dCB0aGF0XG4gICAgICAvLyB0aHJldyBhbiBlcnJvci5cbiAgICAgIC8vIFRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gZG8gaXMgdG8gdGhyb3cgdGhlIHRoaW5nIGluc3RlYWQuXG4gICAgICBpZiAoZm5FeHBlY3RzQ2FsbGJhY2sgJiYgY2FsbGVkKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG9uZShleGNlcHRpb24pXG4gICAgfVxuXG4gICAgaWYgKCFmbkV4cGVjdHNDYWxsYmFjaykge1xuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudGhlbiAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzdWx0LnRoZW4odGhlbiwgZG9uZSlcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgZG9uZShyZXN1bHQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGVuKHJlc3VsdClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBgY2FsbGJhY2tgLCBvbmx5IG9uY2UuXG4gICAqXG4gICAqIEB0eXBlIHtDYWxsYmFja31cbiAgICovXG4gIGZ1bmN0aW9uIGRvbmUoZXJyb3IsIC4uLm91dHB1dCkge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlXG4gICAgICBjYWxsYmFjayhlcnJvciwgLi4ub3V0cHV0KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIGBkb25lYCB3aXRoIG9uZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IFt2YWx1ZV1cbiAgICovXG4gIGZ1bmN0aW9uIHRoZW4odmFsdWUpIHtcbiAgICBkb25lKG51bGwsIHZhbHVlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2xpYi9pbmRleC5qcycpLkNhbGxiYWNrfSBDYWxsYmFja1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5NaWRkbGV3YXJlfSBNaWRkbGV3YXJlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2xpYi9pbmRleC5qcycpLlBpcGVsaW5lfSBQaXBlbGluZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5SdW59IFJ1blxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5Vc2V9IFVzZVxuICovXG5cbmV4cG9ydCB7dHJvdWdoLCB3cmFwfSBmcm9tICcuL2xpYi9pbmRleC5qcydcbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuTm9kZX0gTm9kZVxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Qb2ludH0gUG9pbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuUG9zaXRpb259IFBvc2l0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBOb2RlTGlrZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAqIEBwcm9wZXJ0eSB7UG9zaXRpb25MaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3Bvc2l0aW9uXVxuICpcbiAqIEB0eXBlZGVmIFBvaW50TGlrZVxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbbGluZV1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2NvbHVtbl1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29mZnNldF1cbiAqXG4gKiBAdHlwZWRlZiBQb3NpdGlvbkxpa2VcbiAqIEBwcm9wZXJ0eSB7UG9pbnRMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3N0YXJ0XVxuICogQHByb3BlcnR5IHtQb2ludExpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBbZW5kXVxuICovXG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBwb3NpdGlvbmFsIGluZm8gb2YgYSBwb2ludCwgcG9zaXRpb24gKHN0YXJ0IGFuZCBlbmQgcG9pbnRzKSxcbiAqIG9yIG5vZGUuXG4gKlxuICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBQb2ludCB8IFBvaW50TGlrZSB8IFBvc2l0aW9uIHwgUG9zaXRpb25MaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3ZhbHVlXVxuICogICBOb2RlLCBwb3NpdGlvbiwgb3IgcG9pbnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBQcmV0dHkgcHJpbnRlZCBwb3NpdGlvbmFsIGluZm8gb2YgYSBub2RlIChgc3RyaW5nYCkuXG4gKlxuICogICBJbiB0aGUgZm9ybWF0IG9mIGEgcmFuZ2UgYGxzOmNzLWxlOmNlYCAod2hlbiBnaXZlbiBgbm9kZWAgb3IgYHBvc2l0aW9uYClcbiAqICAgb3IgYSBwb2ludCBgbDpjYCAod2hlbiBnaXZlbiBgcG9pbnRgKSwgd2hlcmUgYGxgIHN0YW5kcyBmb3IgbGluZSwgYGNgIGZvclxuICogICBjb2x1bW4sIGBzYCBmb3IgYHN0YXJ0YCwgYW5kIGBlYCBmb3IgZW5kLlxuICogICBBbiBlbXB0eSBzdHJpbmcgKGAnJ2ApIGlzIHJldHVybmVkIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBuZWl0aGVyIGBub2RlYCxcbiAqICAgYHBvc2l0aW9uYCwgbm9yIGBwb2ludGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlQb3NpdGlvbih2YWx1ZSkge1xuICAvLyBOb3RoaW5nLlxuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIE5vZGUuXG4gIGlmICgncG9zaXRpb24nIGluIHZhbHVlIHx8ICd0eXBlJyBpbiB2YWx1ZSkge1xuICAgIHJldHVybiBwb3NpdGlvbih2YWx1ZS5wb3NpdGlvbilcbiAgfVxuXG4gIC8vIFBvc2l0aW9uLlxuICBpZiAoJ3N0YXJ0JyBpbiB2YWx1ZSB8fCAnZW5kJyBpbiB2YWx1ZSkge1xuICAgIHJldHVybiBwb3NpdGlvbih2YWx1ZSlcbiAgfVxuXG4gIC8vIFBvaW50LlxuICBpZiAoJ2xpbmUnIGluIHZhbHVlIHx8ICdjb2x1bW4nIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIHBvaW50KHZhbHVlKVxuICB9XG5cbiAgLy8gP1xuICByZXR1cm4gJydcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BvaW50IHwgUG9pbnRMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcG9pbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHBvaW50KHBvaW50KSB7XG4gIHJldHVybiBpbmRleChwb2ludCAmJiBwb2ludC5saW5lKSArICc6JyArIGluZGV4KHBvaW50ICYmIHBvaW50LmNvbHVtbilcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Bvc2l0aW9uIHwgUG9zaXRpb25MaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcG9zXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBwb3NpdGlvbihwb3MpIHtcbiAgcmV0dXJuIHBvaW50KHBvcyAmJiBwb3Muc3RhcnQpICsgJy0nICsgcG9pbnQocG9zICYmIHBvcy5lbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gaW5kZXgodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IDFcbn1cbiIsICJleHBvcnQge3N0cmluZ2lmeVBvc2l0aW9ufSBmcm9tICcuL2xpYi9pbmRleC5qcydcbiIsICIvKipcbiAqIEBpbXBvcnQge05vZGUsIFBvaW50LCBQb3NpdGlvbn0gZnJvbSAndW5pc3QnXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0ICYge3R5cGU6IHN0cmluZywgcG9zaXRpb24/OiBQb3NpdGlvbiB8IHVuZGVmaW5lZH19IE5vZGVMaWtlXG4gKlxuICogQHR5cGVkZWYgT3B0aW9uc1xuICogICBDb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtBcnJheTxOb2RlPiB8IG51bGwgfCB1bmRlZmluZWR9IFthbmNlc3RvcnNdXG4gKiAgIFN0YWNrIG9mIChpbmNsdXNpdmUpIGFuY2VzdG9yIG5vZGVzIHN1cnJvdW5kaW5nIHRoZSBtZXNzYWdlIChvcHRpb25hbCkuXG4gKiBAcHJvcGVydHkge0Vycm9yIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2NhdXNlXVxuICogICBPcmlnaW5hbCBlcnJvciBjYXVzZSBvZiB0aGUgbWVzc2FnZSAob3B0aW9uYWwpLlxuICogQHByb3BlcnR5IHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3BsYWNlXVxuICogICBQbGFjZSBvZiBtZXNzYWdlIChvcHRpb25hbCkuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtydWxlSWRdXG4gKiAgIENhdGVnb3J5IG9mIG1lc3NhZ2UgKG9wdGlvbmFsLCBleGFtcGxlOiBgJ215LXJ1bGUnYCkuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtzb3VyY2VdXG4gKiAgIE5hbWVzcGFjZSBvZiB3aG8gc2VudCB0aGUgbWVzc2FnZSAob3B0aW9uYWwsIGV4YW1wbGU6IGAnbXktcGFja2FnZSdgKS5cbiAqL1xuXG5pbXBvcnQge3N0cmluZ2lmeVBvc2l0aW9ufSBmcm9tICd1bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbidcblxuLyoqXG4gKiBNZXNzYWdlLlxuICovXG5leHBvcnQgY2xhc3MgVkZpbGVNZXNzYWdlIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlIGEgbWVzc2FnZSBmb3IgYHJlYXNvbmAuXG4gICAqXG4gICAqID4gXHVEODNFXHVERUE2ICoqTm90ZSoqOiBhbHNvIGhhcyBvYnNvbGV0ZSBzaWduYXR1cmVzLlxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICAgKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAgICogQHJldHVybnNcbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJuc1xuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqIEByZXR1cm5zXG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnNcbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlXG4gICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnNcbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlXG4gICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnNcbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnNcbiAgICpcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZSB8IHN0cmluZ30gY2F1c2VPclJlYXNvblxuICAgKiAgIFJlYXNvbiBmb3IgbWVzc2FnZSwgc2hvdWxkIHVzZSBtYXJrZG93bi5cbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXVxuICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZTpcbiAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS5cbiAgICogQHJldHVybnNcbiAgICogICBJbnN0YW5jZSBvZiBgVkZpbGVNZXNzYWdlYC5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGNvbnN0cnVjdG9yKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbikge1xuICAgIHN1cGVyKClcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yUGFyZW50T3JQbGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9yaWdpbiA9IG9wdGlvbnNPclBhcmVudE9yUGxhY2VcbiAgICAgIG9wdGlvbnNPclBhcmVudE9yUGxhY2UgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQgcmVhc29uID0gJydcbiAgICAvKiogQHR5cGUge09wdGlvbnN9ICovXG4gICAgbGV0IG9wdGlvbnMgPSB7fVxuICAgIGxldCBsZWdhY3lDYXVzZSA9IGZhbHNlXG5cbiAgICBpZiAob3B0aW9uc09yUGFyZW50T3JQbGFjZSkge1xuICAgICAgLy8gUG9pbnQuXG4gICAgICBpZiAoXG4gICAgICAgICdsaW5lJyBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlICYmXG4gICAgICAgICdjb2x1bW4nIGluIG9wdGlvbnNPclBhcmVudE9yUGxhY2VcbiAgICAgICkge1xuICAgICAgICBvcHRpb25zID0ge3BsYWNlOiBvcHRpb25zT3JQYXJlbnRPclBsYWNlfVxuICAgICAgfVxuICAgICAgLy8gUG9zaXRpb24uXG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgJ3N0YXJ0JyBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlICYmXG4gICAgICAgICdlbmQnIGluIG9wdGlvbnNPclBhcmVudE9yUGxhY2VcbiAgICAgICkge1xuICAgICAgICBvcHRpb25zID0ge3BsYWNlOiBvcHRpb25zT3JQYXJlbnRPclBsYWNlfVxuICAgICAgfVxuICAgICAgLy8gTm9kZS5cbiAgICAgIGVsc2UgaWYgKCd0eXBlJyBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgYW5jZXN0b3JzOiBbb3B0aW9uc09yUGFyZW50T3JQbGFjZV0sXG4gICAgICAgICAgcGxhY2U6IG9wdGlvbnNPclBhcmVudE9yUGxhY2UucG9zaXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT3B0aW9ucy5cbiAgICAgIGVsc2Uge1xuICAgICAgICBvcHRpb25zID0gey4uLm9wdGlvbnNPclBhcmVudE9yUGxhY2V9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYXVzZU9yUmVhc29uID09PSAnc3RyaW5nJykge1xuICAgICAgcmVhc29uID0gY2F1c2VPclJlYXNvblxuICAgIH1cbiAgICAvLyBFcnJvci5cbiAgICBlbHNlIGlmICghb3B0aW9ucy5jYXVzZSAmJiBjYXVzZU9yUmVhc29uKSB7XG4gICAgICBsZWdhY3lDYXVzZSA9IHRydWVcbiAgICAgIHJlYXNvbiA9IGNhdXNlT3JSZWFzb24ubWVzc2FnZVxuICAgICAgb3B0aW9ucy5jYXVzZSA9IGNhdXNlT3JSZWFzb25cbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMucnVsZUlkICYmICFvcHRpb25zLnNvdXJjZSAmJiB0eXBlb2Ygb3JpZ2luID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgaW5kZXggPSBvcmlnaW4uaW5kZXhPZignOicpXG5cbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgb3B0aW9ucy5ydWxlSWQgPSBvcmlnaW5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuc291cmNlID0gb3JpZ2luLnNsaWNlKDAsIGluZGV4KVxuICAgICAgICBvcHRpb25zLnJ1bGVJZCA9IG9yaWdpbi5zbGljZShpbmRleCArIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnBsYWNlICYmIG9wdGlvbnMuYW5jZXN0b3JzICYmIG9wdGlvbnMuYW5jZXN0b3JzKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBvcHRpb25zLmFuY2VzdG9yc1tvcHRpb25zLmFuY2VzdG9ycy5sZW5ndGggLSAxXVxuXG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIG9wdGlvbnMucGxhY2UgPSBwYXJlbnQucG9zaXRpb25cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9XG4gICAgICBvcHRpb25zLnBsYWNlICYmICdzdGFydCcgaW4gb3B0aW9ucy5wbGFjZVxuICAgICAgICA/IG9wdGlvbnMucGxhY2Uuc3RhcnRcbiAgICAgICAgOiBvcHRpb25zLnBsYWNlXG5cbiAgICAvKipcbiAgICAgKiBTdGFjayBvZiBhbmNlc3RvciBub2RlcyBzdXJyb3VuZGluZyB0aGUgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBcnJheTxOb2RlPiB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2VzdG9ycyA9IG9wdGlvbnMuYW5jZXN0b3JzIHx8IHVuZGVmaW5lZFxuXG4gICAgLyoqXG4gICAgICogT3JpZ2luYWwgZXJyb3IgY2F1c2Ugb2YgdGhlIG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RXJyb3IgfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5jYXVzZSA9IG9wdGlvbnMuY2F1c2UgfHwgdW5kZWZpbmVkXG5cbiAgICAvKipcbiAgICAgKiBTdGFydGluZyBjb2x1bW4gb2YgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5jb2x1bW4gPSBzdGFydCA/IHN0YXJ0LmNvbHVtbiA6IHVuZGVmaW5lZFxuXG4gICAgLyoqXG4gICAgICogU3RhdGUgb2YgcHJvYmxlbS5cbiAgICAgKlxuICAgICAqICogYHRydWVgIFx1MjAxNCBlcnJvciwgZmlsZSBub3QgdXNhYmxlXG4gICAgICogKiBgZmFsc2VgIFx1MjAxNCB3YXJuaW5nLCBjaGFuZ2UgbWF5IGJlIG5lZWRlZFxuICAgICAqICogYHVuZGVmaW5lZGAgXHUyMDE0IGNoYW5nZSBsaWtlbHkgbm90IG5lZWRlZFxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMuZmF0YWwgPSB1bmRlZmluZWRcblxuICAgIC8qKlxuICAgICAqIFBhdGggb2YgYSBmaWxlICh1c2VkIHRocm91Z2hvdXQgdGhlIGBWRmlsZWAgZWNvc3lzdGVtKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5maWxlID0gJydcblxuICAgIC8vIEZpZWxkIGZyb20gYEVycm9yYC5cbiAgICAvKipcbiAgICAgKiBSZWFzb24gZm9yIG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMubWVzc2FnZSA9IHJlYXNvblxuXG4gICAgLyoqXG4gICAgICogU3RhcnRpbmcgbGluZSBvZiBlcnJvci5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5saW5lID0gc3RhcnQgPyBzdGFydC5saW5lIDogdW5kZWZpbmVkXG5cbiAgICAvLyBGaWVsZCBmcm9tIGBFcnJvcmAuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplZCBwb3NpdGlvbmFsIGluZm8gb2YgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIE9uIG5vcm1hbCBlcnJvcnMsIHRoaXMgd291bGQgYmUgc29tZXRoaW5nIGxpa2UgYFBhcnNlRXJyb3JgLCBidWl0IGluXG4gICAgICogYFZGaWxlYCBtZXNzYWdlcyB3ZSB1c2UgdGhpcyBzcGFjZSB0byBzaG93IHdoZXJlIGFuIGVycm9yIGhhcHBlbmVkLlxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IHN0cmluZ2lmeVBvc2l0aW9uKG9wdGlvbnMucGxhY2UpIHx8ICcxOjEnXG5cbiAgICAvKipcbiAgICAgKiBQbGFjZSBvZiBtZXNzYWdlLlxuICAgICAqXG4gICAgICogQHR5cGUge1BvaW50IHwgUG9zaXRpb24gfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5wbGFjZSA9IG9wdGlvbnMucGxhY2UgfHwgdW5kZWZpbmVkXG5cbiAgICAvKipcbiAgICAgKiBSZWFzb24gZm9yIG1lc3NhZ2UsIHNob3VsZCB1c2UgbWFya2Rvd24uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMucmVhc29uID0gdGhpcy5tZXNzYWdlXG5cbiAgICAvKipcbiAgICAgKiBDYXRlZ29yeSBvZiBtZXNzYWdlIChleGFtcGxlOiBgJ215LXJ1bGUnYCkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMucnVsZUlkID0gb3B0aW9ucy5ydWxlSWQgfHwgdW5kZWZpbmVkXG5cbiAgICAvKipcbiAgICAgKiBOYW1lc3BhY2Ugb2YgbWVzc2FnZSAoZXhhbXBsZTogYCdteS1wYWNrYWdlJ2ApLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG9wdGlvbnMuc291cmNlIHx8IHVuZGVmaW5lZFxuXG4gICAgLy8gRmllbGQgZnJvbSBgRXJyb3JgLlxuICAgIC8qKlxuICAgICAqIFN0YWNrIG9mIG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgYnkgbm9ybWFsIGVycm9ycyB0byBzaG93IHdoZXJlIHNvbWV0aGluZyBoYXBwZW5lZCBpblxuICAgICAqIHByb2dyYW1taW5nIGNvZGUsIGlycmVsZXZhbnQgZm9yIGBWRmlsZWAgbWVzc2FnZXMsXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc3RhY2sgPVxuICAgICAgbGVnYWN5Q2F1c2UgJiYgb3B0aW9ucy5jYXVzZSAmJiB0eXBlb2Ygb3B0aW9ucy5jYXVzZS5zdGFjayA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBvcHRpb25zLmNhdXNlLnN0YWNrXG4gICAgICAgIDogJydcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBcdTIwMUN3ZWxsIGtub3duXHUyMDFELlxuICAgIC8vIE5vdCBzdGFuZGFyZC5cbiAgICAvLyBGZWVsIGZyZWUgdG8gYWRkIG90aGVyIG5vbi1zdGFuZGFyZCBmaWVsZHMgdG8geW91ciBtZXNzYWdlcy5cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIHNvdXJjZSB2YWx1ZSB0aGF0XHUyMDE5cyBiZWluZyByZXBvcnRlZCwgd2hpY2ggaXMgZGVlbWVkXG4gICAgICogaW5jb3JyZWN0LlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLmFjdHVhbCA9IHVuZGVmaW5lZFxuXG4gICAgLyoqXG4gICAgICogU3VnZ2VzdCBhY2NlcHRhYmxlIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYGFjdHVhbGAuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLmV4cGVjdGVkID0gdW5kZWZpbmVkXG5cbiAgICAvKipcbiAgICAgKiBMb25nIGZvcm0gZGVzY3JpcHRpb24gb2YgdGhlIG1lc3NhZ2UgKHlvdSBzaG91bGQgdXNlIG1hcmtkb3duKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5ub3RlID0gdW5kZWZpbmVkXG5cbiAgICAvKipcbiAgICAgKiBMaW5rIHRvIGRvY3MgZm9yIHRoZSBtZXNzYWdlLlxuICAgICAqXG4gICAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHRoaXMgbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgdGhhdCBjYW4gYmUgcGFzc2VkIGFzIGB4YFxuICAgICAqID4gdG8gYG5ldyBVUkwoeClgLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVuZGVmaW5lZFxuICB9XG59XG5cblZGaWxlTWVzc2FnZS5wcm90b3R5cGUuZmlsZSA9ICcnXG5WRmlsZU1lc3NhZ2UucHJvdG90eXBlLm5hbWUgPSAnJ1xuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5yZWFzb24gPSAnJ1xuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5tZXNzYWdlID0gJydcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUuc3RhY2sgPSAnJ1xuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5jb2x1bW4gPSB1bmRlZmluZWRcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUubGluZSA9IHVuZGVmaW5lZFxuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5hbmNlc3RvcnMgPSB1bmRlZmluZWRcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUuY2F1c2UgPSB1bmRlZmluZWRcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUuZmF0YWwgPSB1bmRlZmluZWRcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUucGxhY2UgPSB1bmRlZmluZWRcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUucnVsZUlkID0gdW5kZWZpbmVkXG5WRmlsZU1lc3NhZ2UucHJvdG90eXBlLnNvdXJjZSA9IHVuZGVmaW5lZFxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5PcHRpb25zfSBPcHRpb25zXG4gKi9cblxuZXhwb3J0IHtWRmlsZU1lc3NhZ2V9IGZyb20gJy4vbGliL2luZGV4LmpzJ1xuIiwgIi8vIEEgZGVyaXZhdGl2ZSB3b3JrIGJhc2VkIG9uOlxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeT4uXG4vLyBXaGljaCBpcyBsaWNlbnNlZDpcbi8vXG4vLyBNSVQgTGljZW5zZVxuLy9cbi8vIENvcHlyaWdodCAoYykgMjAxMyBKYW1lcyBIYWxsaWRheVxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2Zcbi8vIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW5cbi8vIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG9cbi8vIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mXG4vLyB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4vLyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbi8vIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1Ncbi8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUlxuLy8gQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSXG4vLyBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuLy8gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbi8vIEEgZGVyaXZhdGl2ZSB3b3JrIGJhc2VkIG9uOlxuLy9cbi8vIFBhcnRzIG9mIHRoYXQgYXJlIGV4dHJhY3RlZCBmcm9tIE5vZGVcdTIwMTlzIGludGVybmFsIGBwYXRoYCBtb2R1bGU6XG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9wYXRoLmpzPi5cbi8vIFdoaWNoIGlzIGxpY2Vuc2VkOlxuLy9cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5leHBvcnQgY29uc3QgbWlucGF0aCA9IHtiYXNlbmFtZSwgZGlybmFtZSwgZXh0bmFtZSwgam9pbiwgc2VwOiAnLyd9XG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1kZXB0aCwgY29tcGxleGl0eSAqL1xuXG4vKipcbiAqIEdldCB0aGUgYmFzZW5hbWUgZnJvbSBhIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqICAgRmlsZSBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbZXh0bmFtZV1cbiAqICAgRXh0ZW5zaW9uIHRvIHN0cmlwLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU3RlbSBvciBiYXNlbmFtZS5cbiAqL1xuZnVuY3Rpb24gYmFzZW5hbWUocGF0aCwgZXh0bmFtZSkge1xuICBpZiAoZXh0bmFtZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBleHRuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXh0XCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpXG4gIH1cblxuICBhc3NlcnRQYXRoKHBhdGgpXG4gIGxldCBzdGFydCA9IDBcbiAgbGV0IGVuZCA9IC0xXG4gIGxldCBpbmRleCA9IHBhdGgubGVuZ3RoXG4gIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHNlZW5Ob25TbGFzaFxuXG4gIGlmIChcbiAgICBleHRuYW1lID09PSB1bmRlZmluZWQgfHxcbiAgICBleHRuYW1lLmxlbmd0aCA9PT0gMCB8fFxuICAgIGV4dG5hbWUubGVuZ3RoID4gcGF0aC5sZW5ndGhcbiAgKSB7XG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGlmIChwYXRoLmNvZGVQb2ludEF0KGluZGV4KSA9PT0gNDcgLyogYC9gICovKSB7XG4gICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vdy5cbiAgICAgICAgaWYgKHNlZW5Ob25TbGFzaCkge1xuICAgICAgICAgIHN0YXJ0ID0gaW5kZXggKyAxXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbmQgPCAwKSB7XG4gICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgICAgLy8gcGF0aCBjb21wb25lbnQuXG4gICAgICAgIHNlZW5Ob25TbGFzaCA9IHRydWVcbiAgICAgICAgZW5kID0gaW5kZXggKyAxXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuZCA8IDAgPyAnJyA6IHBhdGguc2xpY2Uoc3RhcnQsIGVuZClcbiAgfVxuXG4gIGlmIChleHRuYW1lID09PSBwYXRoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBsZXQgZmlyc3ROb25TbGFzaEVuZCA9IC0xXG4gIGxldCBleHRuYW1lSW5kZXggPSBleHRuYW1lLmxlbmd0aCAtIDFcblxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmIChwYXRoLmNvZGVQb2ludEF0KGluZGV4KSA9PT0gNDcgLyogYC9gICovKSB7XG4gICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93LlxuICAgICAgaWYgKHNlZW5Ob25TbGFzaCkge1xuICAgICAgICBzdGFydCA9IGluZGV4ICsgMVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA8IDApIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIHJlbWVtYmVyIHRoaXMgaW5kZXggaW4gY2FzZVxuICAgICAgICAvLyB3ZSBuZWVkIGl0IGlmIHRoZSBleHRlbnNpb24gZW5kcyB1cCBub3QgbWF0Y2hpbmcuXG4gICAgICAgIHNlZW5Ob25TbGFzaCA9IHRydWVcbiAgICAgICAgZmlyc3ROb25TbGFzaEVuZCA9IGluZGV4ICsgMVxuICAgICAgfVxuXG4gICAgICBpZiAoZXh0bmFtZUluZGV4ID4gLTEpIHtcbiAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIHRoZSBleHBsaWNpdCBleHRlbnNpb24uXG4gICAgICAgIGlmIChwYXRoLmNvZGVQb2ludEF0KGluZGV4KSA9PT0gZXh0bmFtZS5jb2RlUG9pbnRBdChleHRuYW1lSW5kZXgtLSkpIHtcbiAgICAgICAgICBpZiAoZXh0bmFtZUluZGV4IDwgMCkge1xuICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgZXh0ZW5zaW9uLCBzbyBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXIgcGF0aFxuICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICBlbmQgPSBpbmRleFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFeHRlbnNpb24gZG9lcyBub3QgbWF0Y2gsIHNvIG91ciByZXN1bHQgaXMgdGhlIGVudGlyZSBwYXRoXG4gICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgZXh0bmFtZUluZGV4ID0gLTFcbiAgICAgICAgICBlbmQgPSBmaXJzdE5vblNsYXNoRW5kXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3RhcnQgPT09IGVuZCkge1xuICAgIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmRcbiAgfSBlbHNlIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kID0gcGF0aC5sZW5ndGhcbiAgfVxuXG4gIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpXG59XG5cbi8qKlxuICogR2V0IHRoZSBkaXJuYW1lIGZyb20gYSBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiAgIEZpbGUgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIEZpbGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gZGlybmFtZShwYXRoKSB7XG4gIGFzc2VydFBhdGgocGF0aClcblxuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJy4nXG4gIH1cblxuICBsZXQgZW5kID0gLTFcbiAgbGV0IGluZGV4ID0gcGF0aC5sZW5ndGhcbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgdW5tYXRjaGVkU2xhc2hcblxuICAvLyBQcmVmaXggYC0tYCBpcyBpbXBvcnRhbnQgdG8gbm90IHJ1biBvbiBgMGAuXG4gIHdoaWxlICgtLWluZGV4KSB7XG4gICAgaWYgKHBhdGguY29kZVBvaW50QXQoaW5kZXgpID09PSA0NyAvKiBgL2AgKi8pIHtcbiAgICAgIGlmICh1bm1hdGNoZWRTbGFzaCkge1xuICAgICAgICBlbmQgPSBpbmRleFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXVubWF0Y2hlZFNsYXNoKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvclxuICAgICAgdW5tYXRjaGVkU2xhc2ggPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVuZCA8IDBcbiAgICA/IHBhdGguY29kZVBvaW50QXQoMCkgPT09IDQ3IC8qIGAvYCAqL1xuICAgICAgPyAnLydcbiAgICAgIDogJy4nXG4gICAgOiBlbmQgPT09IDEgJiYgcGF0aC5jb2RlUG9pbnRBdCgwKSA9PT0gNDcgLyogYC9gICovXG4gICAgICA/ICcvLydcbiAgICAgIDogcGF0aC5zbGljZSgwLCBlbmQpXG59XG5cbi8qKlxuICogR2V0IGFuIGV4dG5hbWUgZnJvbSBhIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqICAgRmlsZSBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRXh0bmFtZS5cbiAqL1xuZnVuY3Rpb24gZXh0bmFtZShwYXRoKSB7XG4gIGFzc2VydFBhdGgocGF0aClcblxuICBsZXQgaW5kZXggPSBwYXRoLmxlbmd0aFxuXG4gIGxldCBlbmQgPSAtMVxuICBsZXQgc3RhcnRQYXJ0ID0gMFxuICBsZXQgc3RhcnREb3QgPSAtMVxuICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kXG4gIC8vIGFmdGVyIGFueSBwYXRoIHNlcGFyYXRvciB3ZSBmaW5kLlxuICBsZXQgcHJlRG90U3RhdGUgPSAwXG4gIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHVubWF0Y2hlZFNsYXNoXG5cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jb2RlUG9pbnRBdChpbmRleClcblxuICAgIGlmIChjb2RlID09PSA0NyAvKiBgL2AgKi8pIHtcbiAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3cuXG4gICAgICBpZiAodW5tYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaW5kZXggKyAxXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGVuZCA8IDApIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIGV4dGVuc2lvbi5cbiAgICAgIHVubWF0Y2hlZFNsYXNoID0gdHJ1ZVxuICAgICAgZW5kID0gaW5kZXggKyAxXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IDQ2IC8qIGAuYCAqLykge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uLlxuICAgICAgaWYgKHN0YXJ0RG90IDwgMCkge1xuICAgICAgICBzdGFydERvdCA9IGluZGV4XG4gICAgICB9IGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSB7XG4gICAgICAgIHByZURvdFN0YXRlID0gMVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgPiAtMSkge1xuICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgIC8vIGhhdmUgYSBnb29kIGNoYW5jZSBhdCBoYXZpbmcgYSBub24tZW1wdHkgZXh0ZW5zaW9uLlxuICAgICAgcHJlRG90U3RhdGUgPSAtMVxuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICBzdGFydERvdCA8IDAgfHxcbiAgICBlbmQgPCAwIHx8XG4gICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3QuXG4gICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSBgLi5gLlxuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICByZXR1cm4gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKVxufVxuXG4vKipcbiAqIEpvaW4gc2VnbWVudHMgZnJvbSBhIHBhdGguXG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBzZWdtZW50c1xuICogICBQYXRoIHNlZ21lbnRzLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRmlsZSBwYXRoLlxuICovXG5mdW5jdGlvbiBqb2luKC4uLnNlZ21lbnRzKSB7XG4gIGxldCBpbmRleCA9IC0xXG4gIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgam9pbmVkXG5cbiAgd2hpbGUgKCsraW5kZXggPCBzZWdtZW50cy5sZW5ndGgpIHtcbiAgICBhc3NlcnRQYXRoKHNlZ21lbnRzW2luZGV4XSlcblxuICAgIGlmIChzZWdtZW50c1tpbmRleF0pIHtcbiAgICAgIGpvaW5lZCA9XG4gICAgICAgIGpvaW5lZCA9PT0gdW5kZWZpbmVkID8gc2VnbWVudHNbaW5kZXhdIDogam9pbmVkICsgJy8nICsgc2VnbWVudHNbaW5kZXhdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGpvaW5lZCA9PT0gdW5kZWZpbmVkID8gJy4nIDogbm9ybWFsaXplKGpvaW5lZClcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYSBiYXNpYyBmaWxlIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqICAgRmlsZSBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRmlsZSBwYXRoLlxuICovXG4vLyBOb3RlOiBgbm9ybWFsaXplYCBpcyBub3QgZXhwb3NlZCBhcyBgcGF0aC5ub3JtYWxpemVgLCBzbyBzb21lIGNvZGUgaXNcbi8vIG1hbnVhbGx5IHJlbW92ZWQgZnJvbSBpdC5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoKSB7XG4gIGFzc2VydFBhdGgocGF0aClcblxuICBjb25zdCBhYnNvbHV0ZSA9IHBhdGguY29kZVBvaW50QXQoMCkgPT09IDQ3IC8qIGAvYCAqL1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aCBhY2NvcmRpbmcgdG8gUE9TSVggcnVsZXMuXG4gIGxldCB2YWx1ZSA9IG5vcm1hbGl6ZVN0cmluZyhwYXRoLCAhYWJzb2x1dGUpXG5cbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCAmJiAhYWJzb2x1dGUpIHtcbiAgICB2YWx1ZSA9ICcuJ1xuICB9XG5cbiAgaWYgKHZhbHVlLmxlbmd0aCA+IDAgJiYgcGF0aC5jb2RlUG9pbnRBdChwYXRoLmxlbmd0aCAtIDEpID09PSA0NyAvKiAvICovKSB7XG4gICAgdmFsdWUgKz0gJy8nXG4gIH1cblxuICByZXR1cm4gYWJzb2x1dGUgPyAnLycgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbi8qKlxuICogUmVzb2x2ZSBgLmAgYW5kIGAuLmAgZWxlbWVudHMgaW4gYSBwYXRoIHdpdGggZGlyZWN0b3J5IG5hbWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiAgIEZpbGUgcGF0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWxsb3dBYm92ZVJvb3RcbiAqICAgV2hldGhlciBgLi5gIGNhbiBtb3ZlIGFib3ZlIHJvb3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBGaWxlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZyhwYXRoLCBhbGxvd0Fib3ZlUm9vdCkge1xuICBsZXQgcmVzdWx0ID0gJydcbiAgbGV0IGxhc3RTZWdtZW50TGVuZ3RoID0gMFxuICBsZXQgbGFzdFNsYXNoID0gLTFcbiAgbGV0IGRvdHMgPSAwXG4gIGxldCBpbmRleCA9IC0xXG4gIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgY29kZVxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IGxhc3RTbGFzaEluZGV4XG5cbiAgd2hpbGUgKCsraW5kZXggPD0gcGF0aC5sZW5ndGgpIHtcbiAgICBpZiAoaW5kZXggPCBwYXRoLmxlbmd0aCkge1xuICAgICAgY29kZSA9IHBhdGguY29kZVBvaW50QXQoaW5kZXgpXG4gICAgfSBlbHNlIGlmIChjb2RlID09PSA0NyAvKiBgL2AgKi8pIHtcbiAgICAgIGJyZWFrXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZGUgPSA0NyAvKiBgL2AgKi9cbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gNDcgLyogYC9gICovKSB7XG4gICAgICBpZiAobGFzdFNsYXNoID09PSBpbmRleCAtIDEgfHwgZG90cyA9PT0gMSkge1xuICAgICAgICAvLyBFbXB0eS5cbiAgICAgIH0gZWxzZSBpZiAobGFzdFNsYXNoICE9PSBpbmRleCAtIDEgJiYgZG90cyA9PT0gMikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVzdWx0Lmxlbmd0aCA8IDIgfHxcbiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCAhPT0gMiB8fFxuICAgICAgICAgIHJlc3VsdC5jb2RlUG9pbnRBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IDQ2IC8qIGAuYCAqLyB8fFxuICAgICAgICAgIHJlc3VsdC5jb2RlUG9pbnRBdChyZXN1bHQubGVuZ3RoIC0gMikgIT09IDQ2IC8qIGAuYCAqL1xuICAgICAgICApIHtcbiAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIGxhc3RTbGFzaEluZGV4ID0gcmVzdWx0Lmxhc3RJbmRleE9mKCcvJylcblxuICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ICE9PSByZXN1bHQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBpZiAobGFzdFNsYXNoSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJydcbiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDBcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpXG4gICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSByZXN1bHQubGVuZ3RoIC0gMSAtIHJlc3VsdC5sYXN0SW5kZXhPZignLycpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBsYXN0U2xhc2ggPSBpbmRleFxuICAgICAgICAgICAgICBkb3RzID0gMFxuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlc3VsdCA9ICcnXG4gICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDBcbiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGluZGV4XG4gICAgICAgICAgICBkb3RzID0gMFxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQubGVuZ3RoID4gMCA/IHJlc3VsdCArICcvLi4nIDogJy4uJ1xuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMlxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXN1bHQgKz0gJy8nICsgcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpbmRleClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4KVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSBpbmRleCAtIGxhc3RTbGFzaCAtIDFcbiAgICAgIH1cblxuICAgICAgbGFzdFNsYXNoID0gaW5kZXhcbiAgICAgIGRvdHMgPSAwXG4gICAgfSBlbHNlIGlmIChjb2RlID09PSA0NiAvKiBgLmAgKi8gJiYgZG90cyA+IC0xKSB7XG4gICAgICBkb3RzKytcbiAgICB9IGVsc2Uge1xuICAgICAgZG90cyA9IC0xXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIE1ha2Ugc3VyZSBgcGF0aGAgaXMgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqICAgRmlsZSBwYXRoLlxuICogQHJldHVybnMge2Fzc2VydHMgcGF0aCBpcyBzdHJpbmd9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFBhdGgocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShwYXRoKVxuICAgIClcbiAgfVxufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1kZXB0aCwgY29tcGxleGl0eSAqL1xuIiwgIi8vIFNvbWV3aGF0IGJhc2VkIG9uOlxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9kZWZ1bmN0em9tYmllL25vZGUtcHJvY2Vzcy9ibG9iL21hc3Rlci9icm93c2VyLmpzPi5cbi8vIEJ1dCBJIGRvblx1MjAxOXQgdGhpbmsgb25lIHRpbnkgbGluZSBvZiBjb2RlIGNhbiBiZSBjb3B5cmlnaHRlZC4gXHVEODNEXHVERTA1XG5leHBvcnQgY29uc3QgbWlucHJvYyA9IHtjd2R9XG5cbmZ1bmN0aW9uIGN3ZCgpIHtcbiAgcmV0dXJuICcvJ1xufVxuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGEgdmFsdWUgaGFzIHRoZSBzaGFwZSBvZiBhIFdIQVRXRyBVUkwgb2JqZWN0LlxuICpcbiAqIFVzaW5nIGEgc3ltYm9sIG9yIGluc3RhbmNlb2Ygd291bGQgbm90IGJlIGFibGUgdG8gcmVjb2duaXplIFVSTCBvYmplY3RzXG4gKiBjb21pbmcgZnJvbSBvdGhlciBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gaW4gRWxlY3Ryb24pLCBzbyBpbnN0ZWFkIHdlIGFyZVxuICogY2hlY2tpbmcgc29tZSB3ZWxsIGtub3duIHByb3BlcnRpZXMgZm9yIGEgbGFjayBvZiBhIGJldHRlciB0ZXN0LlxuICpcbiAqIFdlIHVzZSBgaHJlZmAgYW5kIGBwcm90b2NvbGAgYXMgdGhleSBhcmUgdGhlIG9ubHkgcHJvcGVydGllcyB0aGF0IGFyZVxuICogZWFzeSB0byByZXRyaWV2ZSBhbmQgY2FsY3VsYXRlIGR1ZSB0byB0aGUgbGF6eSBuYXR1cmUgb2YgdGhlIGdldHRlcnMuXG4gKlxuICogV2UgY2hlY2sgZm9yIGF1dGggYXR0cmlidXRlIHRvIGRpc3Rpbmd1aXNoIGxlZ2FjeSB1cmwgaW5zdGFuY2Ugd2l0aFxuICogV0hBVFdHIFVSTCBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IGZpbGVVcmxPclBhdGhcbiAqICAgRmlsZSBwYXRoIG9yIFVSTC5cbiAqIEByZXR1cm5zIHtmaWxlVXJsT3JQYXRoIGlzIFVSTH1cbiAqICAgV2hldGhlciBpdFx1MjAxOXMgYSBVUkwuXG4gKi9cbi8vIEZyb206IDxodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi82YTM0MDNjL2xpYi9pbnRlcm5hbC91cmwuanMjTDcyMD5cbmV4cG9ydCBmdW5jdGlvbiBpc1VybChmaWxlVXJsT3JQYXRoKSB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGZpbGVVcmxPclBhdGggIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiBmaWxlVXJsT3JQYXRoID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ2hyZWYnIGluIGZpbGVVcmxPclBhdGggJiZcbiAgICAgIGZpbGVVcmxPclBhdGguaHJlZiAmJlxuICAgICAgJ3Byb3RvY29sJyBpbiBmaWxlVXJsT3JQYXRoICYmXG4gICAgICBmaWxlVXJsT3JQYXRoLnByb3RvY29sICYmXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBpbmRleGluZyBpcyBmaW5lLlxuICAgICAgZmlsZVVybE9yUGF0aC5hdXRoID09PSB1bmRlZmluZWRcbiAgKVxufVxuIiwgImltcG9ydCB7aXNVcmx9IGZyb20gJy4vbWludXJsLnNoYXJlZC5qcydcblxuZXhwb3J0IHtpc1VybH0gZnJvbSAnLi9taW51cmwuc2hhcmVkLmpzJ1xuXG4vLyBTZWU6IDxodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi82YTM0MDNjL2xpYi9pbnRlcm5hbC91cmwuanM+XG5cbi8qKlxuICogQHBhcmFtIHtVUkwgfCBzdHJpbmd9IHBhdGhcbiAqICAgRmlsZSBVUkwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBGaWxlIFVSTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVybFRvUGF0aChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXRoID0gbmV3IFVSTChwYXRoKVxuICB9IGVsc2UgaWYgKCFpc1VybChwYXRoKSkge1xuICAgIC8qKiBAdHlwZSB7Tm9kZUpTLkVycm5vRXhjZXB0aW9ufSAqL1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJwYXRoXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBVUkwuIFJlY2VpdmVkIGAnICtcbiAgICAgICAgcGF0aCArXG4gICAgICAgICdgJ1xuICAgIClcbiAgICBlcnJvci5jb2RlID0gJ0VSUl9JTlZBTElEX0FSR19UWVBFJ1xuICAgIHRocm93IGVycm9yXG4gIH1cblxuICBpZiAocGF0aC5wcm90b2NvbCAhPT0gJ2ZpbGU6Jykge1xuICAgIC8qKiBAdHlwZSB7Tm9kZUpTLkVycm5vRXhjZXB0aW9ufSAqL1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcignVGhlIFVSTCBtdXN0IGJlIG9mIHNjaGVtZSBmaWxlJylcbiAgICBlcnJvci5jb2RlID0gJ0VSUl9JTlZBTElEX1VSTF9TQ0hFTUUnXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxuXG4gIHJldHVybiBnZXRQYXRoRnJvbVVSTFBvc2l4KHBhdGgpXG59XG5cbi8qKlxuICogR2V0IGEgcGF0aCBmcm9tIGEgUE9TSVggVVJMLlxuICpcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqICAgVVJMLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRmlsZSBwYXRoLlxuICovXG5mdW5jdGlvbiBnZXRQYXRoRnJvbVVSTFBvc2l4KHVybCkge1xuICBpZiAodXJsLmhvc3RuYW1lICE9PSAnJykge1xuICAgIC8qKiBAdHlwZSB7Tm9kZUpTLkVycm5vRXhjZXB0aW9ufSAqL1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICdGaWxlIFVSTCBob3N0IG11c3QgYmUgXCJsb2NhbGhvc3RcIiBvciBlbXB0eSBvbiBkYXJ3aW4nXG4gICAgKVxuICAgIGVycm9yLmNvZGUgPSAnRVJSX0lOVkFMSURfRklMRV9VUkxfSE9TVCdcbiAgICB0aHJvdyBlcnJvclxuICB9XG5cbiAgY29uc3QgcGF0aG5hbWUgPSB1cmwucGF0aG5hbWVcbiAgbGV0IGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IHBhdGhuYW1lLmxlbmd0aCkge1xuICAgIGlmIChcbiAgICAgIHBhdGhuYW1lLmNvZGVQb2ludEF0KGluZGV4KSA9PT0gMzcgLyogYCVgICovICYmXG4gICAgICBwYXRobmFtZS5jb2RlUG9pbnRBdChpbmRleCArIDEpID09PSA1MCAvKiBgMmAgKi9cbiAgICApIHtcbiAgICAgIGNvbnN0IHRoaXJkID0gcGF0aG5hbWUuY29kZVBvaW50QXQoaW5kZXggKyAyKVxuICAgICAgaWYgKHRoaXJkID09PSA3MCAvKiBgRmAgKi8gfHwgdGhpcmQgPT09IDEwMiAvKiBgZmAgKi8pIHtcbiAgICAgICAgLyoqIEB0eXBlIHtOb2RlSlMuRXJybm9FeGNlcHRpb259ICovXG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnRmlsZSBVUkwgcGF0aCBtdXN0IG5vdCBpbmNsdWRlIGVuY29kZWQgLyBjaGFyYWN0ZXJzJ1xuICAgICAgICApXG4gICAgICAgIGVycm9yLmNvZGUgPSAnRVJSX0lOVkFMSURfRklMRV9VUkxfUEFUSCdcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHBhdGhuYW1lKVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7Tm9kZSwgUG9pbnQsIFBvc2l0aW9ufSBmcm9tICd1bmlzdCdcbiAqIEBpbXBvcnQge09wdGlvbnMgYXMgTWVzc2FnZU9wdGlvbnN9IGZyb20gJ3ZmaWxlLW1lc3NhZ2UnXG4gKiBAaW1wb3J0IHtDb21wYXRpYmxlLCBEYXRhLCBNYXAsIE9wdGlvbnMsIFZhbHVlfSBmcm9tICd2ZmlsZSdcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3QgJiB7dHlwZTogc3RyaW5nLCBwb3NpdGlvbj86IFBvc2l0aW9uIHwgdW5kZWZpbmVkfX0gTm9kZUxpa2VcbiAqL1xuXG5pbXBvcnQge1ZGaWxlTWVzc2FnZX0gZnJvbSAndmZpbGUtbWVzc2FnZSdcbmltcG9ydCB7bWlucGF0aH0gZnJvbSAnI21pbnBhdGgnXG5pbXBvcnQge21pbnByb2N9IGZyb20gJyNtaW5wcm9jJ1xuaW1wb3J0IHt1cmxUb1BhdGgsIGlzVXJsfSBmcm9tICcjbWludXJsJ1xuXG4vKipcbiAqIE9yZGVyIG9mIHNldHRpbmcgKGxlYXN0IHNwZWNpZmljIHRvIG1vc3QpLCB3ZSBuZWVkIHRoaXMgYmVjYXVzZSBvdGhlcndpc2VcbiAqIGB7c3RlbTogJ2EnLCBwYXRoOiAnfi9iLmpzJ31gIHdvdWxkIHRocm93LCBhcyBhIHBhdGggaXMgbmVlZGVkIGJlZm9yZSBhXG4gKiBzdGVtIGNhbiBiZSBzZXQuXG4gKi9cbmNvbnN0IG9yZGVyID0gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFtcbiAgJ2hpc3RvcnknLFxuICAncGF0aCcsXG4gICdiYXNlbmFtZScsXG4gICdzdGVtJyxcbiAgJ2V4dG5hbWUnLFxuICAnZGlybmFtZSdcbl0pXG5cbmV4cG9ydCBjbGFzcyBWRmlsZSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdmlydHVhbCBmaWxlLlxuICAgKlxuICAgKiBgb3B0aW9uc2AgaXMgdHJlYXRlZCBhczpcbiAgICpcbiAgICogKiAgIGBzdHJpbmdgIG9yIGBVaW50OEFycmF5YCBcdTIwMTQgYHt2YWx1ZTogb3B0aW9uc31gXG4gICAqICogICBgVVJMYCBcdTIwMTQgYHtwYXRoOiBvcHRpb25zfWBcbiAgICogKiAgIGBWRmlsZWAgXHUyMDE0IHNoYWxsb3cgY29waWVzIGl0cyBkYXRhIG92ZXIgdG8gdGhlIG5ldyBmaWxlXG4gICAqICogICBgb2JqZWN0YCBcdTIwMTQgYWxsIGZpZWxkcyBhcmUgc2hhbGxvdyBjb3BpZWQgb3ZlciB0byB0aGUgbmV3IGZpbGVcbiAgICpcbiAgICogUGF0aCByZWxhdGVkIGZpZWxkcyBhcmUgc2V0IGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgKGxlYXN0IHNwZWNpZmljIHRvXG4gICAqIG1vc3Qgc3BlY2lmaWMpOiBgaGlzdG9yeWAsIGBwYXRoYCwgYGJhc2VuYW1lYCwgYHN0ZW1gLCBgZXh0bmFtZWAsXG4gICAqIGBkaXJuYW1lYC5cbiAgICpcbiAgICogWW91IGNhbm5vdCBzZXQgYGRpcm5hbWVgIG9yIGBleHRuYW1lYCB3aXRob3V0IHNldHRpbmcgZWl0aGVyIGBoaXN0b3J5YCxcbiAgICogYHBhdGhgLCBgYmFzZW5hbWVgLCBvciBgc3RlbWAgdG9vLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCBudWxsIHwgdW5kZWZpbmVkfSBbdmFsdWVdXG4gICAqICAgRmlsZSB2YWx1ZS5cbiAgICogQHJldHVybnNcbiAgICogICBOZXcgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgIC8qKiBAdHlwZSB7T3B0aW9ucyB8IFZGaWxlfSAqL1xuICAgIGxldCBvcHRpb25zXG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9IGVsc2UgaWYgKGlzVXJsKHZhbHVlKSkge1xuICAgICAgb3B0aW9ucyA9IHtwYXRoOiB2YWx1ZX1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgb3B0aW9ucyA9IHt2YWx1ZX1cbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IHZhbHVlXG4gICAgfVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG5cbiAgICAvKipcbiAgICAgKiBCYXNlIG9mIGBwYXRoYCAoZGVmYXVsdDogYHByb2Nlc3MuY3dkKClgIG9yIGAnLydgIGluIGJyb3dzZXJzKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgLy8gUHJldmVudCBjYWxsaW5nIGBjd2RgICh3aGljaCBjb3VsZCBiZSBleHBlbnNpdmUpIGlmIGl0XHUyMDE5cyBub3QgbmVlZGVkO1xuICAgIC8vIHRoZSBlbXB0eSBzdHJpbmcgd2lsbCBiZSBvdmVycmlkZGVuIGluIHRoZSBuZXh0IGJsb2NrLlxuICAgIHRoaXMuY3dkID0gJ2N3ZCcgaW4gb3B0aW9ucyA/ICcnIDogbWlucHJvYy5jd2QoKVxuXG4gICAgLyoqXG4gICAgICogUGxhY2UgdG8gc3RvcmUgY3VzdG9tIGluZm8gKGRlZmF1bHQ6IGB7fWApLlxuICAgICAqXG4gICAgICogSXRcdTIwMTlzIE9LIHRvIHN0b3JlIGN1c3RvbSBkYXRhIGRpcmVjdGx5IG9uIHRoZSBmaWxlIGJ1dCBtb3ZpbmcgaXQgdG9cbiAgICAgKiBgZGF0YWAgaXMgcmVjb21tZW5kZWQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLmRhdGEgPSB7fVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBmaWxlIHBhdGhzIHRoZSBmaWxlIG1vdmVkIGJldHdlZW4uXG4gICAgICpcbiAgICAgKiBUaGUgZmlyc3QgaXMgdGhlIG9yaWdpbmFsIHBhdGggYW5kIHRoZSBsYXN0IGlzIHRoZSBjdXJyZW50IHBhdGguXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn1cbiAgICAgKi9cbiAgICB0aGlzLmhpc3RvcnkgPSBbXVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXk8VkZpbGVNZXNzYWdlPn1cbiAgICAgKi9cbiAgICB0aGlzLm1lc3NhZ2VzID0gW11cblxuICAgIC8qKlxuICAgICAqIFJhdyB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtWYWx1ZX1cbiAgICAgKi9cbiAgICB0aGlzLnZhbHVlXG5cbiAgICAvLyBUaGUgYmVsb3cgYXJlIG5vbi1zdGFuZGFyZCwgdGhleSBhcmUgXHUyMDFDd2VsbC1rbm93blx1MjAxRC5cbiAgICAvLyBBcyBpbiwgdXNlZCBpbiBzZXZlcmFsIHRvb2xzLlxuICAgIC8qKlxuICAgICAqIFNvdXJjZSBtYXAuXG4gICAgICpcbiAgICAgKiBUaGlzIHR5cGUgaXMgZXF1aXZhbGVudCB0byB0aGUgYFJhd1NvdXJjZU1hcGAgdHlwZSBmcm9tIHRoZSBgc291cmNlLW1hcGBcbiAgICAgKiBtb2R1bGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TWFwIHwgbnVsbCB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLm1hcFxuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tLCBub24tc3RyaW5nLCBjb21waWxlZCwgcmVwcmVzZW50YXRpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgYnkgdW5pZmllZCB0byBzdG9yZSBub24tc3RyaW5nIHJlc3VsdHMuXG4gICAgICogT25lIGV4YW1wbGUgaXMgd2hlbiB0dXJuaW5nIG1hcmtkb3duIGludG8gUmVhY3Qgbm9kZXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7dW5rbm93bn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc3VsdFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBhIGZpbGUgd2FzIHNhdmVkIHRvIGRpc2suXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgYnkgdmZpbGUgcmVwb3J0ZXJzLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5zdG9yZWRcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuXG4gICAgLy8gU2V0IHBhdGggcmVsYXRlZCBwcm9wZXJ0aWVzIGluIHRoZSBjb3JyZWN0IG9yZGVyLlxuICAgIGxldCBpbmRleCA9IC0xXG5cbiAgICB3aGlsZSAoKytpbmRleCA8IG9yZGVyLmxlbmd0aCkge1xuICAgICAgY29uc3QgZmllbGQgPSBvcmRlcltpbmRleF1cblxuICAgICAgLy8gTm90ZTogd2Ugc3BlY2lmaWNhbGx5IHVzZSBgaW5gIGluc3RlYWQgb2YgYGhhc093blByb3BlcnR5YCB0byBhY2NlcHRcbiAgICAgIC8vIGB2ZmlsZWBzIHRvby5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQgaW4gb3B0aW9ucyAmJlxuICAgICAgICBvcHRpb25zW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIG9wdGlvbnNbZmllbGRdICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgZG9lc25cdTIwMTl0IHVuZGVyc3RhbmQgYmFzaWMgcmVhbGl0eS5cbiAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZCA9PT0gJ2hpc3RvcnknID8gWy4uLm9wdGlvbnNbZmllbGRdXSA6IG9wdGlvbnNbZmllbGRdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgbGV0IGZpZWxkXG5cbiAgICAvLyBTZXQgbm9uLXBhdGggcmVsYXRlZCBwcm9wZXJ0aWVzLlxuICAgIGZvciAoZmllbGQgaW4gb3B0aW9ucykge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogZmluZSB0byBzZXQgb3RoZXIgdGhpbmdzLlxuICAgICAgaWYgKCFvcmRlci5pbmNsdWRlcyhmaWVsZCkpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogZmluZSB0byBzZXQgb3RoZXIgdGhpbmdzLlxuICAgICAgICB0aGlzW2ZpZWxkXSA9IG9wdGlvbnNbZmllbGRdXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYmFzZW5hbWUgKGluY2x1ZGluZyBleHRuYW1lKSAoZXhhbXBsZTogYCdpbmRleC5taW4uanMnYCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqICAgQmFzZW5hbWUuXG4gICAqL1xuICBnZXQgYmFzZW5hbWUoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICdzdHJpbmcnXG4gICAgICA/IG1pbnBhdGguYmFzZW5hbWUodGhpcy5wYXRoKVxuICAgICAgOiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYmFzZW5hbWUgKGluY2x1ZGluZyBleHRuYW1lKSAoYCdpbmRleC5taW4uanMnYCkuXG4gICAqXG4gICAqIENhbm5vdCBjb250YWluIHBhdGggc2VwYXJhdG9ycyAoYCcvJ2Agb24gdW5peCwgbWFjT1MsIGFuZCBicm93c2VycywgYCdcXCdgXG4gICAqIG9uIHdpbmRvd3MpLlxuICAgKiBDYW5ub3QgYmUgbnVsbGlmaWVkICh1c2UgYGZpbGUucGF0aCA9IGZpbGUuZGlybmFtZWAgaW5zdGVhZCkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlbmFtZVxuICAgKiAgIEJhc2VuYW1lLlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKiAgIE5vdGhpbmcuXG4gICAqL1xuICBzZXQgYmFzZW5hbWUoYmFzZW5hbWUpIHtcbiAgICBhc3NlcnROb25FbXB0eShiYXNlbmFtZSwgJ2Jhc2VuYW1lJylcbiAgICBhc3NlcnRQYXJ0KGJhc2VuYW1lLCAnYmFzZW5hbWUnKVxuICAgIHRoaXMucGF0aCA9IG1pbnBhdGguam9pbih0aGlzLmRpcm5hbWUgfHwgJycsIGJhc2VuYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcGFyZW50IHBhdGggKGV4YW1wbGU6IGAnfidgKS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogICBEaXJuYW1lLlxuICAgKi9cbiAgZ2V0IGRpcm5hbWUoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICdzdHJpbmcnXG4gICAgICA/IG1pbnBhdGguZGlybmFtZSh0aGlzLnBhdGgpXG4gICAgICA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcGFyZW50IHBhdGggKGV4YW1wbGU6IGAnfidgKS5cbiAgICpcbiAgICogQ2Fubm90IGJlIHNldCBpZiB0aGVyZVx1MjAxOXMgbm8gYHBhdGhgIHlldC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGRpcm5hbWVcbiAgICogICBEaXJuYW1lLlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKiAgIE5vdGhpbmcuXG4gICAqL1xuICBzZXQgZGlybmFtZShkaXJuYW1lKSB7XG4gICAgYXNzZXJ0UGF0aCh0aGlzLmJhc2VuYW1lLCAnZGlybmFtZScpXG4gICAgdGhpcy5wYXRoID0gbWlucGF0aC5qb2luKGRpcm5hbWUgfHwgJycsIHRoaXMuYmFzZW5hbWUpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHRuYW1lIChpbmNsdWRpbmcgZG90KSAoZXhhbXBsZTogYCcuanMnYCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqICAgRXh0bmFtZS5cbiAgICovXG4gIGdldCBleHRuYW1lKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoID09PSAnc3RyaW5nJ1xuICAgICAgPyBtaW5wYXRoLmV4dG5hbWUodGhpcy5wYXRoKVxuICAgICAgOiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGV4dG5hbWUgKGluY2x1ZGluZyBkb3QpIChleGFtcGxlOiBgJy5qcydgKS5cbiAgICpcbiAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1xcJ2BcbiAgICogb24gd2luZG93cykuXG4gICAqIENhbm5vdCBiZSBzZXQgaWYgdGhlcmVcdTIwMTlzIG5vIGBwYXRoYCB5ZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBleHRuYW1lXG4gICAqICAgRXh0bmFtZS5cbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICogICBOb3RoaW5nLlxuICAgKi9cbiAgc2V0IGV4dG5hbWUoZXh0bmFtZSkge1xuICAgIGFzc2VydFBhcnQoZXh0bmFtZSwgJ2V4dG5hbWUnKVxuICAgIGFzc2VydFBhdGgodGhpcy5kaXJuYW1lLCAnZXh0bmFtZScpXG5cbiAgICBpZiAoZXh0bmFtZSkge1xuICAgICAgaWYgKGV4dG5hbWUuY29kZVBvaW50QXQoMCkgIT09IDQ2IC8qIGAuYCAqLykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BleHRuYW1lYCBtdXN0IHN0YXJ0IHdpdGggYC5gJylcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dG5hbWUuaW5jbHVkZXMoJy4nLCAxKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BleHRuYW1lYCBjYW5ub3QgY29udGFpbiBtdWx0aXBsZSBkb3RzJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhdGggPSBtaW5wYXRoLmpvaW4odGhpcy5kaXJuYW1lLCB0aGlzLnN0ZW0gKyAoZXh0bmFtZSB8fCAnJykpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIHBhdGggKGV4YW1wbGU6IGAnfi9pbmRleC5taW4uanMnYCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqICAgUGF0aC5cbiAgICovXG4gIGdldCBwYXRoKCkge1xuICAgIHJldHVybiB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDFdXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBmdWxsIHBhdGggKGV4YW1wbGU6IGAnfi9pbmRleC5taW4uanMnYCkuXG4gICAqXG4gICAqIENhbm5vdCBiZSBudWxsaWZpZWQuXG4gICAqIFlvdSBjYW4gc2V0IGEgZmlsZSBVUkwgKGEgYFVSTGAgb2JqZWN0IHdpdGggYSBgZmlsZTpgIHByb3RvY29sKSB3aGljaCB3aWxsXG4gICAqIGJlIHR1cm5lZCBpbnRvIGEgcGF0aCB3aXRoIGB1cmwuZmlsZVVSTFRvUGF0aGAuXG4gICAqXG4gICAqIEBwYXJhbSB7VVJMIHwgc3RyaW5nfSBwYXRoXG4gICAqICAgUGF0aC5cbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICogICBOb3RoaW5nLlxuICAgKi9cbiAgc2V0IHBhdGgocGF0aCkge1xuICAgIGlmIChpc1VybChwYXRoKSkge1xuICAgICAgcGF0aCA9IHVybFRvUGF0aChwYXRoKVxuICAgIH1cblxuICAgIGFzc2VydE5vbkVtcHR5KHBhdGgsICdwYXRoJylcblxuICAgIGlmICh0aGlzLnBhdGggIT09IHBhdGgpIHtcbiAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHBhdGgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogICBTdGVtLlxuICAgKi9cbiAgZ2V0IHN0ZW0oKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICdzdHJpbmcnXG4gICAgICA/IG1pbnBhdGguYmFzZW5hbWUodGhpcy5wYXRoLCB0aGlzLmV4dG5hbWUpXG4gICAgICA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS5cbiAgICpcbiAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1xcJ2BcbiAgICogb24gd2luZG93cykuXG4gICAqIENhbm5vdCBiZSBudWxsaWZpZWQgKHVzZSBgZmlsZS5wYXRoID0gZmlsZS5kaXJuYW1lYCBpbnN0ZWFkKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0ZW1cbiAgICogICBTdGVtLlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKiAgIE5vdGhpbmcuXG4gICAqL1xuICBzZXQgc3RlbShzdGVtKSB7XG4gICAgYXNzZXJ0Tm9uRW1wdHkoc3RlbSwgJ3N0ZW0nKVxuICAgIGFzc2VydFBhcnQoc3RlbSwgJ3N0ZW0nKVxuICAgIHRoaXMucGF0aCA9IG1pbnBhdGguam9pbih0aGlzLmRpcm5hbWUgfHwgJycsIHN0ZW0gKyAodGhpcy5leHRuYW1lIHx8ICcnKSlcbiAgfVxuXG4gIC8vIE5vcm1hbCBwcm90b3R5cGFsIG1ldGhvZHMuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmYXRhbCBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAqXG4gICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgdHJ1ZWAgKGVycm9yOyBmaWxlIG5vdCB1c2FibGUpXG4gICAqIGFuZCB0aGUgYGZpbGVgIGZpZWxkIGlzIHNldCB0byB0aGUgY3VycmVudCBmaWxlIHBhdGguXG4gICAqIFRoZSBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBgbWVzc2FnZXNgIGZpZWxkIG9uIGBmaWxlYC5cbiAgICpcbiAgICogPiBcdUQ4M0VcdURFQTYgKipOb3RlKio6IGFsc28gaGFzIG9ic29sZXRlIHNpZ25hdHVyZXMuXG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEBwYXJhbSB7TWVzc2FnZU9wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAgICogQHJldHVybnMge25ldmVyfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqIEByZXR1cm5zIHtuZXZlcn1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7bmV2ZXJ9XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnMge25ldmVyfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7bmV2ZXJ9XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZVxuICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqIEByZXR1cm5zIHtuZXZlcn1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnMge25ldmVyfVxuICAgKlxuICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uXG4gICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLlxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE1lc3NhZ2VPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXVxuICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZTpcbiAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS5cbiAgICogQHJldHVybnMge25ldmVyfVxuICAgKiAgIE5ldmVyLlxuICAgKiBAdGhyb3dzIHtWRmlsZU1lc3NhZ2V9XG4gICAqICAgTWVzc2FnZS5cbiAgICovXG4gIGZhaWwoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogdGhlIG92ZXJsb2FkcyBhcmUgZmluZS5cbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbilcblxuICAgIG1lc3NhZ2UuZmF0YWwgPSB0cnVlXG5cbiAgICB0aHJvdyBtZXNzYWdlXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluZm8gbWVzc2FnZSBmb3IgYHJlYXNvbmAgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLlxuICAgKlxuICAgKiBUaGUgYGZhdGFsYCBmaWVsZCBvZiB0aGUgbWVzc2FnZSBpcyBzZXQgdG8gYHVuZGVmaW5lZGAgKGluZm87IGNoYW5nZVxuICAgKiBsaWtlbHkgbm90IG5lZWRlZCkgYW5kIHRoZSBgZmlsZWAgZmllbGQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGZpbGUgcGF0aC5cbiAgICogVGhlIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGBtZXNzYWdlc2AgZmllbGQgb24gYGZpbGVgLlxuICAgKlxuICAgKiA+IFx1RDgzRVx1REVBNiAqKk5vdGUqKjogYWxzbyBoYXMgb2Jzb2xldGUgc2lnbmF0dXJlcy5cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtNZXNzYWdlT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uXG4gICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLlxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE1lc3NhZ2VPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXVxuICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZTpcbiAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS5cbiAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX1cbiAgICogICBNZXNzYWdlLlxuICAgKi9cbiAgaW5mbyhjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB0aGUgb3ZlcmxvYWRzIGFyZSBmaW5lLlxuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKVxuXG4gICAgbWVzc2FnZS5mYXRhbCA9IHVuZGVmaW5lZFxuXG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAqXG4gICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgZmFsc2VgICh3YXJuaW5nOyBjaGFuZ2UgbWF5IGJlXG4gICAqIG5lZWRlZCkgYW5kIHRoZSBgZmlsZWAgZmllbGQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGZpbGUgcGF0aC5cbiAgICogVGhlIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGBtZXNzYWdlc2AgZmllbGQgb24gYGZpbGVgLlxuICAgKlxuICAgKiA+IFx1RDgzRVx1REVBNiAqKk5vdGUqKjogYWxzbyBoYXMgb2Jzb2xldGUgc2lnbmF0dXJlcy5cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtNZXNzYWdlT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uXG4gICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLlxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE1lc3NhZ2VPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXVxuICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZTpcbiAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS5cbiAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX1cbiAgICogICBNZXNzYWdlLlxuICAgKi9cbiAgbWVzc2FnZShjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbmV3IFZGaWxlTWVzc2FnZShcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHRoZSBvdmVybG9hZHMgYXJlIGZpbmUuXG4gICAgICBjYXVzZU9yUmVhc29uLFxuICAgICAgb3B0aW9uc09yUGFyZW50T3JQbGFjZSxcbiAgICAgIG9yaWdpblxuICAgIClcblxuICAgIGlmICh0aGlzLnBhdGgpIHtcbiAgICAgIG1lc3NhZ2UubmFtZSA9IHRoaXMucGF0aCArICc6JyArIG1lc3NhZ2UubmFtZVxuICAgICAgbWVzc2FnZS5maWxlID0gdGhpcy5wYXRoXG4gICAgfVxuXG4gICAgbWVzc2FnZS5mYXRhbCA9IGZhbHNlXG5cbiAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSlcblxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRoZSBmaWxlLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiB3aGljaCBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZCBkZXBlbmRzIG9uIHRoZSBlbmdpbmUuXG4gICAqID4gRm9yIGluZm8gb24gTm9kZS5qcywgc2VlOlxuICAgKiA+IDxodHRwczovL25vZGVqcy5vcmcvYXBpL3V0aWwuaHRtbCN3aGF0d2ctc3VwcG9ydGVkLWVuY29kaW5ncz4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuY29kaW5nPSd1dGY4J11cbiAgICogICBDaGFyYWN0ZXIgZW5jb2RpbmcgdG8gdW5kZXJzdGFuZCBgdmFsdWVgIGFzIHdoZW4gaXRcdTIwMTlzIGEgYFVpbnQ4QXJyYXlgXG4gICAqICAgKGRlZmF1bHQ6IGAndXRmLTgnYCkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqICAgU2VyaWFsaXplZCBmaWxlLlxuICAgKi9cbiAgdG9TdHJpbmcoZW5jb2RpbmcpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgIH1cblxuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcgfHwgdW5kZWZpbmVkKVxuICAgIHJldHVybiBkZWNvZGVyLmRlY29kZSh0aGlzLnZhbHVlKVxuICB9XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgYHBhcnRgIGlzIG5vdCBhIHBhdGggKGFzIGluLCBkb2VzIG5vdCBjb250YWluIGBwYXRoLnNlcGApLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFydFxuICogICBGaWxlIHBhdGggcGFydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiAgIFBhcnQgbmFtZS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFBhcnQocGFydCwgbmFtZSkge1xuICBpZiAocGFydCAmJiBwYXJ0LmluY2x1ZGVzKG1pbnBhdGguc2VwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdgJyArIG5hbWUgKyAnYCBjYW5ub3QgYmUgYSBwYXRoOiBkaWQgbm90IGV4cGVjdCBgJyArIG1pbnBhdGguc2VwICsgJ2AnXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgYHBhcnRgIGlzIG5vdCBlbXB0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gcGFydFxuICogICBUaGluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiAgIFBhcnQgbmFtZS5cbiAqIEByZXR1cm5zIHthc3NlcnRzIHBhcnQgaXMgc3RyaW5nfVxuICogICBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eShwYXJ0LCBuYW1lKSB7XG4gIGlmICghcGFydCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYCcgKyBuYW1lICsgJ2AgY2Fubm90IGJlIGVtcHR5JylcbiAgfVxufVxuXG4vKipcbiAqIEFzc2VydCBgcGF0aGAgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBwYXRoXG4gKiAgIFBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogICBEZXBlbmRlbmN5IG5hbWUuXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBwYXRoIGlzIHN0cmluZ31cbiAqICAgTm90aGluZy5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UGF0aChwYXRoLCBuYW1lKSB7XG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2V0dGluZyBgJyArIG5hbWUgKyAnYCByZXF1aXJlcyBgcGF0aGAgdG8gYmUgc2V0IHRvbycpXG4gIH1cbn1cblxuLyoqXG4gKiBBc3NlcnQgYHZhbHVlYCBpcyBhbiBgVWludDhBcnJheWAuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogICB0aGluZy5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBVaW50OEFycmF5fVxuICogICBXaGV0aGVyIGB2YWx1ZWAgaXMgYW4gYFVpbnQ4QXJyYXlgLlxuICovXG5mdW5jdGlvbiBpc1VpbnQ4QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgdmFsdWUgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICdieXRlTGVuZ3RoJyBpbiB2YWx1ZSAmJlxuICAgICAgJ2J5dGVPZmZzZXQnIGluIHZhbHVlXG4gIClcbn1cbiIsICIvLyBNb3JlIHR5cGVzIGV4cG9zZWQgZnJvbSBgaW5kZXguZC50c2AuXG5leHBvcnQge1ZGaWxlfSBmcm9tICcuL2xpYi9pbmRleC5qcydcbiIsICJleHBvcnQgY29uc3QgQ2FsbGFibGVJbnN0YW5jZSA9XG4gIC8qKlxuICAgKiBAdHlwZSB7bmV3IDxQYXJhbWV0ZXJzIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4sIFJlc3VsdD4ocHJvcGVydHk6IHN0cmluZyB8IHN5bWJvbCkgPT4gKC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnMpID0+IFJlc3VsdH1cbiAgICovXG4gIChcbiAgICAvKiogQHR5cGUge3Vua25vd259ICovXG4gICAgKFxuICAgICAgLyoqXG4gICAgICAgKiBAdGhpcyB7RnVuY3Rpb259XG4gICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gcHJvcGVydHlcbiAgICAgICAqIEByZXR1cm5zIHsoLi4ucGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj4pID0+IHVua25vd259XG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpc1xuICAgICAgICBjb25zdCBjb25zdHIgPSBzZWxmLmNvbnN0cnVjdG9yXG4gICAgICAgIGNvbnN0IHByb3RvID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCBGdW5jdGlvbj59ICovIChcbiAgICAgICAgICAvLyBQcm90b3R5cGVzIGRvIGV4aXN0LlxuICAgICAgICAgIC8vIHR5cGUtY292ZXJhZ2U6aWdub3JlLW5leHQtbGluZVxuICAgICAgICAgIGNvbnN0ci5wcm90b3R5cGVcbiAgICAgICAgKVxuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3RvW3Byb3BlcnR5XVxuICAgICAgICAvKiogQHR5cGUgeyguLi5wYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPikgPT4gdW5rbm93bn0gKi9cbiAgICAgICAgY29uc3QgYXBwbHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpXG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXBwbHksIHByb3RvKVxuXG4gICAgICAgIC8vIE5vdCBuZWVkZWQgZm9yIHVzIGluIGB1bmlmaWVkYDogd2Ugb25seSBjYWxsIHRoaXMgb24gdGhlIGBjb3B5YFxuICAgICAgICAvLyBmdW5jdGlvbixcbiAgICAgICAgLy8gYW5kIHdlIGRvbid0IG5lZWQgdG8gYWRkIGl0cyBmaWVsZHMgKGBsZW5ndGhgLCBgbmFtZWApXG4gICAgICAgIC8vIG92ZXIuXG4gICAgICAgIC8vIFNlZSBhbHNvOiBHSC0yNDYuXG4gICAgICAgIC8vIGNvbnN0IG5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGZvciAoY29uc3QgcCBvZiBuYW1lcykge1xuICAgICAgICAvLyAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBwKVxuICAgICAgICAvLyAgIGlmIChkZXNjcmlwdG9yKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBwbHksIHAsIGRlc2NyaXB0b3IpXG4gICAgICAgIC8vIH1cblxuICAgICAgICByZXR1cm4gYXBwbHlcbiAgICAgIH1cbiAgICApXG4gIClcbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3Ryb3VnaCcpLlBpcGVsaW5lfSBQaXBlbGluZVxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuTm9kZX0gTm9kZVxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3ZmaWxlJykuQ29tcGF0aWJsZX0gQ29tcGF0aWJsZVxuICogQHR5cGVkZWYge2ltcG9ydCgndmZpbGUnKS5WYWx1ZX0gVmFsdWVcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9pbmRleC5qcycpLkNvbXBpbGVSZXN1bHRNYXB9IENvbXBpbGVSZXN1bHRNYXBcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2luZGV4LmpzJykuRGF0YX0gRGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vaW5kZXguanMnKS5TZXR0aW5nc30gU2V0dGluZ3NcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtDb21waWxlUmVzdWx0TWFwW2tleW9mIENvbXBpbGVSZXN1bHRNYXBdfSBDb21waWxlUmVzdWx0c1xuICogICBBY2NlcHRhYmxlIHJlc3VsdHMgZnJvbSBjb21waWxlcnMuXG4gKlxuICogICBUbyByZWdpc3RlciBjdXN0b20gcmVzdWx0cywgYWRkIHRoZW0gdG9cbiAqICAge0BsaW5rY29kZSBDb21waWxlUmVzdWx0TWFwfS5cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7Tm9kZX0gW1RyZWU9Tm9kZV1cbiAqICAgVGhlIG5vZGUgdGhhdCB0aGUgY29tcGlsZXIgcmVjZWl2ZXMgKGRlZmF1bHQ6IGBOb2RlYCkuXG4gKiBAdGVtcGxhdGUge0NvbXBpbGVSZXN1bHRzfSBbUmVzdWx0PUNvbXBpbGVSZXN1bHRzXVxuICogICBUaGUgdGhpbmcgdGhhdCB0aGUgY29tcGlsZXIgeWllbGRzIChkZWZhdWx0OiBgQ29tcGlsZVJlc3VsdHNgKS5cbiAqIEBjYWxsYmFjayBDb21waWxlclxuICogICBBICoqY29tcGlsZXIqKiBoYW5kbGVzIHRoZSBjb21waWxpbmcgb2YgYSBzeW50YXggdHJlZSB0byBzb21ldGhpbmcgZWxzZVxuICogICAoaW4gbW9zdCBjYXNlcywgdGV4dCkgKFR5cGVTY3JpcHQgdHlwZSkuXG4gKlxuICogICBJdCBpcyB1c2VkIGluIHRoZSBzdHJpbmdpZnkgcGhhc2UgYW5kIGNhbGxlZCB3aXRoIGEge0BsaW5rY29kZSBOb2RlfVxuICogICBhbmQge0BsaW5rY29kZSBWRmlsZX0gcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IHRvIGNvbXBpbGUuXG4gKiAgIEl0IHNob3VsZCByZXR1cm4gdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHRyZWUgKHR5cGljYWxseVxuICogICBgc3RyaW5nYCkuXG4gKlxuICogICA+ICoqTm90ZSoqOiB1bmlmaWVkIHR5cGljYWxseSBjb21waWxlcyBieSBzZXJpYWxpemluZzogbW9zdCBjb21waWxlcnNcbiAqICAgPiByZXR1cm4gYHN0cmluZ2AgKG9yIGBVaW50OEFycmF5YCkuXG4gKiAgID4gU29tZSBjb21waWxlcnMsIHN1Y2ggYXMgdGhlIG9uZSBjb25maWd1cmVkIHdpdGhcbiAqICAgPiBbYHJlaHlwZS1yZWFjdGBdW3JlaHlwZS1yZWFjdF0sIHJldHVybiBvdGhlciB2YWx1ZXMgKGluIHRoaXMgY2FzZSwgYVxuICogICA+IFJlYWN0IHRyZWUpLlxuICogICA+IElmIHlvdVx1MjAxOXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2Vzblx1MjAxOXQgc2VyaWFsaXplLCBleHBlY3QgZGlmZmVyZW50XG4gKiAgID4gcmVzdWx0IHZhbHVlcy5cbiAqICAgPlxuICogICA+IFRvIHJlZ2lzdGVyIGN1c3RvbSByZXN1bHRzIGluIFR5cGVTY3JpcHQsIGFkZCB0aGVtIHRvXG4gKiAgID4ge0BsaW5rY29kZSBDb21waWxlUmVzdWx0TWFwfS5cbiAqXG4gKiAgIFtyZWh5cGUtcmVhY3RdOiBodHRwczovL2dpdGh1Yi5jb20vcmVoeXBlanMvcmVoeXBlLXJlYWN0XG4gKiBAcGFyYW0ge1RyZWV9IHRyZWVcbiAqICAgVHJlZSB0byBjb21waWxlLlxuICogQHBhcmFtIHtWRmlsZX0gZmlsZVxuICogICBGaWxlIGFzc29jaWF0ZWQgd2l0aCBgdHJlZWAuXG4gKiBAcmV0dXJucyB7UmVzdWx0fVxuICogICBOZXcgY29udGVudDogY29tcGlsZWQgdGV4dCAoYHN0cmluZ2Agb3IgYFVpbnQ4QXJyYXlgLCBmb3IgYGZpbGUudmFsdWVgKSBvclxuICogICBzb21ldGhpbmcgZWxzZSAoZm9yIGBmaWxlLnJlc3VsdGApLlxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtOb2RlfSBbVHJlZT1Ob2RlXVxuICogICBUaGUgbm9kZSB0aGF0IHRoZSBwYXJzZXIgeWllbGRzIChkZWZhdWx0OiBgTm9kZWApXG4gKiBAY2FsbGJhY2sgUGFyc2VyXG4gKiAgIEEgKipwYXJzZXIqKiBoYW5kbGVzIHRoZSBwYXJzaW5nIG9mIHRleHQgdG8gYSBzeW50YXggdHJlZS5cbiAqXG4gKiAgIEl0IGlzIHVzZWQgaW4gdGhlIHBhcnNlIHBoYXNlIGFuZCBpcyBjYWxsZWQgd2l0aCBhIGBzdHJpbmdgIGFuZFxuICogICB7QGxpbmtjb2RlIFZGaWxlfSBvZiB0aGUgZG9jdW1lbnQgdG8gcGFyc2UuXG4gKiAgIEl0IG11c3QgcmV0dXJuIHRoZSBzeW50YXggdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZmlsZVxuICogICAoe0BsaW5rY29kZSBOb2RlfSkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG9jdW1lbnRcbiAqICAgRG9jdW1lbnQgdG8gcGFyc2UuXG4gKiBAcGFyYW0ge1ZGaWxlfSBmaWxlXG4gKiAgIEZpbGUgYXNzb2NpYXRlZCB3aXRoIGBkb2N1bWVudGAuXG4gKiBAcmV0dXJucyB7VHJlZX1cbiAqICAgTm9kZSByZXByZXNlbnRpbmcgdGhlIGdpdmVuIGZpbGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBQbHVnaW48QXJyYXk8YW55PiwgYW55LCBhbnk+IHxcbiAqICAgUGx1Z2luVHVwbGU8QXJyYXk8YW55PiwgYW55LCBhbnk+IHxcbiAqICAgUHJlc2V0XG4gKiApfSBQbHVnZ2FibGVcbiAqICAgVW5pb24gb2YgdGhlIGRpZmZlcmVudCB3YXlzIHRvIGFkZCBwbHVnaW5zIGFuZCBzZXR0aW5ncy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtBcnJheTxQbHVnZ2FibGU+fSBQbHVnZ2FibGVMaXN0XG4gKiAgIExpc3Qgb2YgcGx1Z2lucyBhbmQgcHJlc2V0cy5cbiAqL1xuXG4vLyBOb3RlOiB3ZSBjYW5cdTIwMTl0IHVzZSBgY2FsbGJhY2tgIHlldCBhcyBpdCBtZXNzZXMgdXAgYHRoaXNgOlxuLy8gIDxodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzU1MTk3Pi5cbi8qKlxuICogQHRlbXBsYXRlIHtBcnJheTx1bmtub3duPn0gW1BsdWdpblBhcmFtZXRlcnM9W11dXG4gKiAgIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHBsdWdpbiAoZGVmYXVsdDogYFtdYCwgdGhlIGVtcHR5IHR1cGxlKS5cbiAqIEB0ZW1wbGF0ZSB7Tm9kZSB8IHN0cmluZyB8IHVuZGVmaW5lZH0gW0lucHV0PU5vZGVdXG4gKiAgIFZhbHVlIHRoYXQgaXMgZXhwZWN0ZWQgYXMgaW5wdXQgKGRlZmF1bHQ6IGBOb2RlYCkuXG4gKlxuICogICAqICAgSWYgdGhlIHBsdWdpbiByZXR1cm5zIGEge0BsaW5rY29kZSBUcmFuc2Zvcm1lcn0sIHRoaXNcbiAqICAgICAgIHNob3VsZCBiZSB0aGUgbm9kZSBpdCBleHBlY3RzLlxuICogICAqICAgSWYgdGhlIHBsdWdpbiBzZXRzIGEge0BsaW5rY29kZSBQYXJzZXJ9LCB0aGlzIHNob3VsZCBiZVxuICogICAgICAgYHN0cmluZ2AuXG4gKiAgICogICBJZiB0aGUgcGx1Z2luIHNldHMgYSB7QGxpbmtjb2RlIENvbXBpbGVyfSwgdGhpcyBzaG91bGQgYmUgdGhlXG4gKiAgICAgICBub2RlIGl0IGV4cGVjdHMuXG4gKiBAdGVtcGxhdGUgW091dHB1dD1JbnB1dF1cbiAqICAgVmFsdWUgdGhhdCBpcyB5aWVsZGVkIGFzIG91dHB1dCAoZGVmYXVsdDogYElucHV0YCkuXG4gKlxuICogICAqICAgSWYgdGhlIHBsdWdpbiByZXR1cm5zIGEge0BsaW5rY29kZSBUcmFuc2Zvcm1lcn0sIHRoaXNcbiAqICAgICAgIHNob3VsZCBiZSB0aGUgbm9kZSB0aGF0IHRoYXQgeWllbGRzLlxuICogICAqICAgSWYgdGhlIHBsdWdpbiBzZXRzIGEge0BsaW5rY29kZSBQYXJzZXJ9LCB0aGlzIHNob3VsZCBiZSB0aGVcbiAqICAgICAgIG5vZGUgdGhhdCBpdCB5aWVsZHMuXG4gKiAgICogICBJZiB0aGUgcGx1Z2luIHNldHMgYSB7QGxpbmtjb2RlIENvbXBpbGVyfSwgdGhpcyBzaG91bGQgYmVcbiAqICAgICAgIHJlc3VsdCBpdCB5aWVsZHMuXG4gKiBAdHlwZWRlZiB7KFxuICogICAodGhpczogUHJvY2Vzc29yLCAuLi5wYXJhbWV0ZXJzOiBQbHVnaW5QYXJhbWV0ZXJzKSA9PlxuICogICAgIElucHV0IGV4dGVuZHMgc3RyaW5nID8gLy8gUGFyc2VyLlxuICogICAgICAgIE91dHB1dCBleHRlbmRzIE5vZGUgfCB1bmRlZmluZWQgPyB1bmRlZmluZWQgfCB2b2lkIDogbmV2ZXIgOlxuICogICAgIE91dHB1dCBleHRlbmRzIENvbXBpbGVSZXN1bHRzID8gLy8gQ29tcGlsZXIuXG4gKiAgICAgICAgSW5wdXQgZXh0ZW5kcyBOb2RlIHwgdW5kZWZpbmVkID8gdW5kZWZpbmVkIHwgdm9pZCA6IG5ldmVyIDpcbiAqICAgICBUcmFuc2Zvcm1lcjxcbiAqICAgICAgIElucHV0IGV4dGVuZHMgTm9kZSA/IElucHV0IDogTm9kZSxcbiAqICAgICAgIE91dHB1dCBleHRlbmRzIE5vZGUgPyBPdXRwdXQgOiBOb2RlXG4gKiAgICAgPiB8IHVuZGVmaW5lZCB8IHZvaWRcbiAqICl9IFBsdWdpblxuICogICBTaW5nbGUgcGx1Z2luLlxuICpcbiAqICAgUGx1Z2lucyBjb25maWd1cmUgdGhlIHByb2Nlc3NvcnMgdGhleSBhcmUgYXBwbGllZCBvbiBpbiB0aGUgZm9sbG93aW5nXG4gKiAgIHdheXM6XG4gKlxuICogICAqICAgdGhleSBjaGFuZ2UgdGhlIHByb2Nlc3Nvciwgc3VjaCBhcyB0aGUgcGFyc2VyLCB0aGUgY29tcGlsZXIsIG9yIGJ5XG4gKiAgICAgICBjb25maWd1cmluZyBkYXRhXG4gKiAgICogICB0aGV5IHNwZWNpZnkgaG93IHRvIGhhbmRsZSB0cmVlcyBhbmQgZmlsZXNcbiAqXG4gKiAgIEluIHByYWN0aWNlLCB0aGV5IGFyZSBmdW5jdGlvbnMgdGhhdCBjYW4gcmVjZWl2ZSBvcHRpb25zIGFuZCBjb25maWd1cmUgdGhlXG4gKiAgIHByb2Nlc3NvciAoYHRoaXNgKS5cbiAqXG4gKiAgID4gKipOb3RlKio6IHBsdWdpbnMgYXJlIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzb3IgaXMgKmZyb3plbiosIG5vdCB3aGVuXG4gKiAgID4gdGhleSBhcmUgYXBwbGllZC5cbiAqL1xuXG4vKipcbiAqIFR1cGxlIG9mIGEgcGx1Z2luIGFuZCBpdHMgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBUaGUgZmlyc3QgaXRlbSBpcyBhIHBsdWdpbiwgdGhlIHJlc3QgYXJlIGl0cyBwYXJhbWV0ZXJzLlxuICpcbiAqIEB0ZW1wbGF0ZSB7QXJyYXk8dW5rbm93bj59IFtUdXBsZVBhcmFtZXRlcnM9W11dXG4gKiAgIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHBsdWdpbiAoZGVmYXVsdDogYFtdYCwgdGhlIGVtcHR5IHR1cGxlKS5cbiAqIEB0ZW1wbGF0ZSB7Tm9kZSB8IHN0cmluZyB8IHVuZGVmaW5lZH0gW0lucHV0PXVuZGVmaW5lZF1cbiAqICAgVmFsdWUgdGhhdCBpcyBleHBlY3RlZCBhcyBpbnB1dCAob3B0aW9uYWwpLlxuICpcbiAqICAgKiAgIElmIHRoZSBwbHVnaW4gcmV0dXJucyBhIHtAbGlua2NvZGUgVHJhbnNmb3JtZXJ9LCB0aGlzXG4gKiAgICAgICBzaG91bGQgYmUgdGhlIG5vZGUgaXQgZXhwZWN0cy5cbiAqICAgKiAgIElmIHRoZSBwbHVnaW4gc2V0cyBhIHtAbGlua2NvZGUgUGFyc2VyfSwgdGhpcyBzaG91bGQgYmVcbiAqICAgICAgIGBzdHJpbmdgLlxuICogICAqICAgSWYgdGhlIHBsdWdpbiBzZXRzIGEge0BsaW5rY29kZSBDb21waWxlcn0sIHRoaXMgc2hvdWxkIGJlIHRoZVxuICogICAgICAgbm9kZSBpdCBleHBlY3RzLlxuICogQHRlbXBsYXRlIFtPdXRwdXQ9dW5kZWZpbmVkXSAob3B0aW9uYWwpLlxuICogICBWYWx1ZSB0aGF0IGlzIHlpZWxkZWQgYXMgb3V0cHV0LlxuICpcbiAqICAgKiAgIElmIHRoZSBwbHVnaW4gcmV0dXJucyBhIHtAbGlua2NvZGUgVHJhbnNmb3JtZXJ9LCB0aGlzXG4gKiAgICAgICBzaG91bGQgYmUgdGhlIG5vZGUgdGhhdCB0aGF0IHlpZWxkcy5cbiAqICAgKiAgIElmIHRoZSBwbHVnaW4gc2V0cyBhIHtAbGlua2NvZGUgUGFyc2VyfSwgdGhpcyBzaG91bGQgYmUgdGhlXG4gKiAgICAgICBub2RlIHRoYXQgaXQgeWllbGRzLlxuICogICAqICAgSWYgdGhlIHBsdWdpbiBzZXRzIGEge0BsaW5rY29kZSBDb21waWxlcn0sIHRoaXMgc2hvdWxkIGJlXG4gKiAgICAgICByZXN1bHQgaXQgeWllbGRzLlxuICogQHR5cGVkZWYgeyhcbiAqICAgW1xuICogICAgIHBsdWdpbjogUGx1Z2luPFR1cGxlUGFyYW1ldGVycywgSW5wdXQsIE91dHB1dD4sXG4gKiAgICAgLi4ucGFyYW1ldGVyczogVHVwbGVQYXJhbWV0ZXJzXG4gKiAgIF1cbiAqICl9IFBsdWdpblR1cGxlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQcmVzZXRcbiAqICAgU2hhcmFibGUgY29uZmlndXJhdGlvbi5cbiAqXG4gKiAgIFRoZXkgY2FuIGNvbnRhaW4gcGx1Z2lucyBhbmQgc2V0dGluZ3MuXG4gKiBAcHJvcGVydHkge1BsdWdnYWJsZUxpc3QgfCB1bmRlZmluZWR9IFtwbHVnaW5zXVxuICogICBMaXN0IG9mIHBsdWdpbnMgYW5kIHByZXNldHMgKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSB7U2V0dGluZ3MgfCB1bmRlZmluZWR9IFtzZXR0aW5nc11cbiAqICAgU2hhcmVkIHNldHRpbmdzIGZvciBwYXJzZXJzIGFuZCBjb21waWxlcnMgKG9wdGlvbmFsKS5cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7VkZpbGV9IFtGaWxlPVZGaWxlXVxuICogICBUaGUgZmlsZSB0aGF0IHRoZSBjYWxsYmFjayByZWNlaXZlcyAoZGVmYXVsdDogYFZGaWxlYCkuXG4gKiBAY2FsbGJhY2sgUHJvY2Vzc0NhbGxiYWNrXG4gKiAgIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzIGlzIGRvbmUuXG4gKlxuICogICBDYWxsZWQgd2l0aCBlaXRoZXIgYW4gZXJyb3Igb3IgYSByZXN1bHQuXG4gKiBAcGFyYW0ge0Vycm9yIHwgdW5kZWZpbmVkfSBbZXJyb3JdXG4gKiAgIEZhdGFsIGVycm9yIChvcHRpb25hbCkuXG4gKiBAcGFyYW0ge0ZpbGUgfCB1bmRlZmluZWR9IFtmaWxlXVxuICogICBQcm9jZXNzZWQgZmlsZSAob3B0aW9uYWwpLlxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqICAgTm90aGluZy5cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7Tm9kZX0gW1RyZWU9Tm9kZV1cbiAqICAgVGhlIHRyZWUgdGhhdCB0aGUgY2FsbGJhY2sgcmVjZWl2ZXMgKGRlZmF1bHQ6IGBOb2RlYCkuXG4gKiBAY2FsbGJhY2sgUnVuQ2FsbGJhY2tcbiAqICAgQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdHJhbnNmb3JtZXJzIGFyZSBkb25lLlxuICpcbiAqICAgQ2FsbGVkIHdpdGggZWl0aGVyIGFuIGVycm9yIG9yIHJlc3VsdHMuXG4gKiBAcGFyYW0ge0Vycm9yIHwgdW5kZWZpbmVkfSBbZXJyb3JdXG4gKiAgIEZhdGFsIGVycm9yIChvcHRpb25hbCkuXG4gKiBAcGFyYW0ge1RyZWUgfCB1bmRlZmluZWR9IFt0cmVlXVxuICogICBUcmFuc2Zvcm1lZCB0cmVlIChvcHRpb25hbCkuXG4gKiBAcGFyYW0ge1ZGaWxlIHwgdW5kZWZpbmVkfSBbZmlsZV1cbiAqICAgRmlsZSAob3B0aW9uYWwpLlxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqICAgTm90aGluZy5cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7Tm9kZX0gW091dHB1dD1Ob2RlXVxuICogICBOb2RlIHR5cGUgdGhhdCB0aGUgdHJhbnNmb3JtZXIgeWllbGRzIChkZWZhdWx0OiBgTm9kZWApLlxuICogQGNhbGxiYWNrIFRyYW5zZm9ybUNhbGxiYWNrXG4gKiAgIENhbGxiYWNrIHBhc3NlZCB0byB0cmFuc2Zvcm1zLlxuICpcbiAqICAgSWYgdGhlIHNpZ25hdHVyZSBvZiBhIGB0cmFuc2Zvcm1lcmAgYWNjZXB0cyBhIHRoaXJkIGFyZ3VtZW50LCB0aGVcbiAqICAgdHJhbnNmb3JtZXIgbWF5IHBlcmZvcm0gYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMsIGFuZCBtdXN0IGNhbGwgaXQuXG4gKiBAcGFyYW0ge0Vycm9yIHwgdW5kZWZpbmVkfSBbZXJyb3JdXG4gKiAgIEZhdGFsIGVycm9yIHRvIHN0b3AgdGhlIHByb2Nlc3MgKG9wdGlvbmFsKS5cbiAqIEBwYXJhbSB7T3V0cHV0IHwgdW5kZWZpbmVkfSBbdHJlZV1cbiAqICAgTmV3LCBjaGFuZ2VkLCB0cmVlIChvcHRpb25hbCkuXG4gKiBAcGFyYW0ge1ZGaWxlIHwgdW5kZWZpbmVkfSBbZmlsZV1cbiAqICAgTmV3LCBjaGFuZ2VkLCBmaWxlIChvcHRpb25hbCkuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogICBOb3RoaW5nLlxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtOb2RlfSBbSW5wdXQ9Tm9kZV1cbiAqICAgTm9kZSB0eXBlIHRoYXQgdGhlIHRyYW5zZm9ybWVyIGV4cGVjdHMgKGRlZmF1bHQ6IGBOb2RlYCkuXG4gKiBAdGVtcGxhdGUge05vZGV9IFtPdXRwdXQ9SW5wdXRdXG4gKiAgIE5vZGUgdHlwZSB0aGF0IHRoZSB0cmFuc2Zvcm1lciB5aWVsZHMgKGRlZmF1bHQ6IGBJbnB1dGApLlxuICogQGNhbGxiYWNrIFRyYW5zZm9ybWVyXG4gKiAgIFRyYW5zZm9ybWVycyBoYW5kbGUgc3ludGF4IHRyZWVzIGFuZCBmaWxlcy5cbiAqXG4gKiAgIFRoZXkgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZWFjaCB0aW1lIGEgc3ludGF4IHRyZWUgYW5kIGZpbGUgYXJlXG4gKiAgIHBhc3NlZCB0aHJvdWdoIHRoZSBydW4gcGhhc2UuXG4gKiAgIFdoZW4gYW4gZXJyb3Igb2NjdXJzIGluIHRoZW0gKGVpdGhlciBiZWNhdXNlIGl0XHUyMDE5cyB0aHJvd24sIHJldHVybmVkLFxuICogICByZWplY3RlZCwgb3IgcGFzc2VkIHRvIGBuZXh0YCksIHRoZSBwcm9jZXNzIHN0b3BzLlxuICpcbiAqICAgVGhlIHJ1biBwaGFzZSBpcyBoYW5kbGVkIGJ5IFtgdHJvdWdoYF1bdHJvdWdoXSwgc2VlIGl0cyBkb2N1bWVudGF0aW9uIGZvclxuICogICB0aGUgZXhhY3Qgc2VtYW50aWNzIG9mIHRoZXNlIGZ1bmN0aW9ucy5cbiAqXG4gKiAgID4gKipOb3RlKio6IHlvdSBzaG91bGQgbGlrZWx5IGlnbm9yZSBgbmV4dGA6IGRvblx1MjAxOXQgYWNjZXB0IGl0LlxuICogICA+IGl0IHN1cHBvcnRzIGNhbGxiYWNrLXN0eWxlIGFzeW5jIHdvcmsuXG4gKiAgID4gQnV0IHByb21pc2VzIGFyZSBsaWtlbHkgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC5cbiAqXG4gKiAgIFt0cm91Z2hdOiBodHRwczovL2dpdGh1Yi5jb20vd29vb3JtL3Ryb3VnaCNmdW5jdGlvbi1mbmlucHV0LW5leHRcbiAqIEBwYXJhbSB7SW5wdXR9IHRyZWVcbiAqICAgVHJlZSB0byBoYW5kbGUuXG4gKiBAcGFyYW0ge1ZGaWxlfSBmaWxlXG4gKiAgIEZpbGUgdG8gaGFuZGxlLlxuICogQHBhcmFtIHtUcmFuc2Zvcm1DYWxsYmFjazxPdXRwdXQ+fSBuZXh0XG4gKiAgIENhbGxiYWNrLlxuICogQHJldHVybnMgeyhcbiAqICAgUHJvbWlzZTxPdXRwdXQgfCB1bmRlZmluZWQgfCB2b2lkPiB8XG4gKiAgIFByb21pc2U8bmV2ZXI+IHwgLy8gRm9yIHNvbWUgcmVhc29uIHRoaXMgaXMgbmVlZGVkIHNlcGFyYXRlbHkuXG4gKiAgIE91dHB1dCB8XG4gKiAgIEVycm9yIHxcbiAqICAgdW5kZWZpbmVkIHxcbiAqICAgdm9pZFxuICogKX1cbiAqICAgSWYgeW91IGFjY2VwdCBgbmV4dGAsIG5vdGhpbmcuXG4gKiAgIE90aGVyd2lzZTpcbiAqXG4gKiAgICogICBgRXJyb3JgIFx1MjAxNCBmYXRhbCBlcnJvciB0byBzdG9wIHRoZSBwcm9jZXNzXG4gKiAgICogICBgUHJvbWlzZTx1bmRlZmluZWQ+YCBvciBgdW5kZWZpbmVkYCBcdTIwMTQgdGhlIG5leHQgdHJhbnNmb3JtZXIga2VlcHMgdXNpbmdcbiAqICAgICAgIHNhbWUgdHJlZVxuICogICAqICAgYFByb21pc2U8Tm9kZT5gIG9yIGBOb2RlYCBcdTIwMTQgbmV3LCBjaGFuZ2VkLCB0cmVlXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge05vZGUgfCB1bmRlZmluZWR9IFBhcnNlVHJlZVxuICogICBPdXRwdXQgb2YgYHBhcnNlYC5cbiAqIEB0ZW1wbGF0ZSB7Tm9kZSB8IHVuZGVmaW5lZH0gSGVhZFRyZWVcbiAqICAgSW5wdXQgZm9yIGBydW5gLlxuICogQHRlbXBsYXRlIHtOb2RlIHwgdW5kZWZpbmVkfSBUYWlsVHJlZVxuICogICBPdXRwdXQgZm9yIGBydW5gLlxuICogQHRlbXBsYXRlIHtOb2RlIHwgdW5kZWZpbmVkfSBDb21waWxlVHJlZVxuICogICBJbnB1dCBvZiBgc3RyaW5naWZ5YC5cbiAqIEB0ZW1wbGF0ZSB7Q29tcGlsZVJlc3VsdHMgfCB1bmRlZmluZWR9IENvbXBpbGVSZXN1bHRcbiAqICAgT3V0cHV0IG9mIGBzdHJpbmdpZnlgLlxuICogQHRlbXBsYXRlIHtOb2RlIHwgc3RyaW5nIHwgdW5kZWZpbmVkfSBJbnB1dFxuICogICBJbnB1dCBvZiBwbHVnaW4uXG4gKiBAdGVtcGxhdGUgT3V0cHV0XG4gKiAgIE91dHB1dCBvZiBwbHVnaW4gKG9wdGlvbmFsKS5cbiAqIEB0eXBlZGVmIHsoXG4gKiAgIElucHV0IGV4dGVuZHMgc3RyaW5nXG4gKiAgICAgPyBPdXRwdXQgZXh0ZW5kcyBOb2RlIHwgdW5kZWZpbmVkXG4gKiAgICAgICA/IC8vIFBhcnNlci5cbiAqICAgICAgICAgUHJvY2Vzc29yPFxuICogICAgICAgICAgIE91dHB1dCBleHRlbmRzIHVuZGVmaW5lZCA/IFBhcnNlVHJlZSA6IE91dHB1dCxcbiAqICAgICAgICAgICBIZWFkVHJlZSxcbiAqICAgICAgICAgICBUYWlsVHJlZSxcbiAqICAgICAgICAgICBDb21waWxlVHJlZSxcbiAqICAgICAgICAgICBDb21waWxlUmVzdWx0XG4gKiAgICAgICAgID5cbiAqICAgICAgIDogLy8gVW5rbm93bi5cbiAqICAgICAgICAgUHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD5cbiAqICAgICA6IE91dHB1dCBleHRlbmRzIENvbXBpbGVSZXN1bHRzXG4gKiAgICAgPyBJbnB1dCBleHRlbmRzIE5vZGUgfCB1bmRlZmluZWRcbiAqICAgICAgID8gLy8gQ29tcGlsZXIuXG4gKiAgICAgICAgIFByb2Nlc3NvcjxcbiAqICAgICAgICAgICBQYXJzZVRyZWUsXG4gKiAgICAgICAgICAgSGVhZFRyZWUsXG4gKiAgICAgICAgICAgVGFpbFRyZWUsXG4gKiAgICAgICAgICAgSW5wdXQgZXh0ZW5kcyB1bmRlZmluZWQgPyBDb21waWxlVHJlZSA6IElucHV0LFxuICogICAgICAgICAgIE91dHB1dCBleHRlbmRzIHVuZGVmaW5lZCA/IENvbXBpbGVSZXN1bHQgOiBPdXRwdXRcbiAqICAgICAgICAgPlxuICogICAgICAgOiAvLyBVbmtub3duLlxuICogICAgICAgICBQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0PlxuICogICAgIDogSW5wdXQgZXh0ZW5kcyBOb2RlIHwgdW5kZWZpbmVkXG4gKiAgICAgPyBPdXRwdXQgZXh0ZW5kcyBOb2RlIHwgdW5kZWZpbmVkXG4gKiAgICAgICA/IC8vIFRyYW5zZm9ybS5cbiAqICAgICAgICAgUHJvY2Vzc29yPFxuICogICAgICAgICAgIFBhcnNlVHJlZSxcbiAqICAgICAgICAgICBIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IElucHV0IDogSGVhZFRyZWUsXG4gKiAgICAgICAgICAgT3V0cHV0IGV4dGVuZHMgdW5kZWZpbmVkID8gVGFpbFRyZWUgOiBPdXRwdXQsXG4gKiAgICAgICAgICAgQ29tcGlsZVRyZWUsXG4gKiAgICAgICAgICAgQ29tcGlsZVJlc3VsdFxuICogICAgICAgICA+XG4gKiAgICAgICA6IC8vIFVua25vd24uXG4gKiAgICAgICAgIFByb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+XG4gKiAgICAgOiAvLyBVbmtub3duLlxuICogICAgICAgUHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD5cbiAqICl9IFVzZVBsdWdpblxuICogICBDcmVhdGUgYSBwcm9jZXNzb3IgYmFzZWQgb24gdGhlIGlucHV0L291dHB1dCBvZiBhIHtAbGluayBQbHVnaW4gcGx1Z2lufS5cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7Q29tcGlsZVJlc3VsdHMgfCB1bmRlZmluZWR9IFJlc3VsdFxuICogICBOb2RlIHR5cGUgdGhhdCB0aGUgdHJhbnNmb3JtZXIgeWllbGRzLlxuICogQHR5cGVkZWYgeyhcbiAqICAgUmVzdWx0IGV4dGVuZHMgVmFsdWUgfCB1bmRlZmluZWQgP1xuICogICAgIFZGaWxlIDpcbiAqICAgICBWRmlsZSAmIHtyZXN1bHQ6IFJlc3VsdH1cbiAqICAgKX0gVkZpbGVXaXRoT3V0cHV0XG4gKiAgIFR5cGUgdG8gZ2VuZXJhdGUgYSB7QGxpbmtjb2RlIFZGaWxlfSBjb3JyZXNwb25kaW5nIHRvIGEgY29tcGlsZXIgcmVzdWx0LlxuICpcbiAqICAgSWYgYSByZXN1bHQgdGhhdCBpcyBub3QgYWNjZXB0YWJsZSBvbiBhIGBWRmlsZWAgaXMgdXNlZCwgdGhhdCB3aWxsXG4gKiAgIGJlIHN0b3JlZCBvbiB0aGUgYHJlc3VsdGAgZmllbGQgb2Yge0BsaW5rY29kZSBWRmlsZX0uXG4gKi9cblxuaW1wb3J0IHtiYWlsfSBmcm9tICdiYWlsJ1xuaW1wb3J0IGV4dGVuZCBmcm9tICdleHRlbmQnXG5pbXBvcnQge29rIGFzIGFzc2VydH0gZnJvbSAnZGV2bG9wJ1xuaW1wb3J0IGlzUGxhaW5PYmogZnJvbSAnaXMtcGxhaW4tb2JqJ1xuaW1wb3J0IHt0cm91Z2h9IGZyb20gJ3Ryb3VnaCdcbmltcG9ydCB7VkZpbGV9IGZyb20gJ3ZmaWxlJ1xuaW1wb3J0IHtDYWxsYWJsZUluc3RhbmNlfSBmcm9tICcuL2NhbGxhYmxlLWluc3RhbmNlLmpzJ1xuXG4vLyBUbyBkbzogbmV4dCBtYWpvcjogZHJvcCBgQ29tcGlsZXJgLCBgUGFyc2VyYDogcHJlZmVyIGxvd2VyY2FzZS5cblxuLy8gVG8gZG86IHdlIGNvdWxkIHN0YXJ0IHlpZWxkaW5nIGBuZXZlcmAgaW4gVFMgd2hlbiBhIHBhcnNlciBpcyBtaXNzaW5nIGFuZFxuLy8gYHBhcnNlYCBpcyBjYWxsZWQuXG4vLyBDdXJyZW50bHksIHdlIGFsbG93IGRpcmVjdGx5IHNldHRpbmcgYHByb2Nlc3Nvci5wYXJzZXJgLCB3aGljaCBpcyB1bnR5cGVkLlxuXG5jb25zdCBvd24gPSB7fS5oYXNPd25Qcm9wZXJ0eVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7Tm9kZSB8IHVuZGVmaW5lZH0gW1BhcnNlVHJlZT11bmRlZmluZWRdXG4gKiAgIE91dHB1dCBvZiBgcGFyc2VgIChvcHRpb25hbCkuXG4gKiBAdGVtcGxhdGUge05vZGUgfCB1bmRlZmluZWR9IFtIZWFkVHJlZT11bmRlZmluZWRdXG4gKiAgIElucHV0IGZvciBgcnVuYCAob3B0aW9uYWwpLlxuICogQHRlbXBsYXRlIHtOb2RlIHwgdW5kZWZpbmVkfSBbVGFpbFRyZWU9dW5kZWZpbmVkXVxuICogICBPdXRwdXQgZm9yIGBydW5gIChvcHRpb25hbCkuXG4gKiBAdGVtcGxhdGUge05vZGUgfCB1bmRlZmluZWR9IFtDb21waWxlVHJlZT11bmRlZmluZWRdXG4gKiAgIElucHV0IG9mIGBzdHJpbmdpZnlgIChvcHRpb25hbCkuXG4gKiBAdGVtcGxhdGUge0NvbXBpbGVSZXN1bHRzIHwgdW5kZWZpbmVkfSBbQ29tcGlsZVJlc3VsdD11bmRlZmluZWRdXG4gKiAgIE91dHB1dCBvZiBgc3RyaW5naWZ5YCAob3B0aW9uYWwpLlxuICogQGV4dGVuZHMge0NhbGxhYmxlSW5zdGFuY2U8W10sIFByb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+Pn1cbiAqL1xuZXhwb3J0IGNsYXNzIFByb2Nlc3NvciBleHRlbmRzIENhbGxhYmxlSW5zdGFuY2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgcHJvY2Vzc29yLlxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gSWYgYFByb2Nlc3NvcigpYCBpcyBjYWxsZWQgKHcvbyBuZXcpLCBgY29weWAgaXMgY2FsbGVkIGluc3RlYWQuXG4gICAgc3VwZXIoJ2NvcHknKVxuXG4gICAgLyoqXG4gICAgICogQ29tcGlsZXIgdG8gdXNlIChkZXByZWNhdGVkKS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogICBVc2UgYGNvbXBpbGVyYCBpbnN0ZWFkLlxuICAgICAqIEB0eXBlIHsoXG4gICAgICogICBDb21waWxlcjxcbiAgICAgKiAgICAgQ29tcGlsZVRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogQ29tcGlsZVRyZWUsXG4gICAgICogICAgIENvbXBpbGVSZXN1bHQgZXh0ZW5kcyB1bmRlZmluZWQgPyBDb21waWxlUmVzdWx0cyA6IENvbXBpbGVSZXN1bHRcbiAgICAgKiAgID4gfFxuICAgICAqICAgdW5kZWZpbmVkXG4gICAgICogKX1cbiAgICAgKi9cbiAgICB0aGlzLkNvbXBpbGVyID0gdW5kZWZpbmVkXG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXIgdG8gdXNlIChkZXByZWNhdGVkKS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogICBVc2UgYHBhcnNlcmAgaW5zdGVhZC5cbiAgICAgKiBAdHlwZSB7KFxuICAgICAqICAgUGFyc2VyPFBhcnNlVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBQYXJzZVRyZWU+IHxcbiAgICAgKiAgIHVuZGVmaW5lZFxuICAgICAqICl9XG4gICAgICovXG4gICAgdGhpcy5QYXJzZXIgPSB1bmRlZmluZWRcblxuICAgIC8vIE5vdGU6IHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBjb25zaWRlcmVkIHByaXZhdGUuXG4gICAgLy8gSG93ZXZlciwgdGhleSBhcmUgbmVlZGVkIGZvciB0ZXN0cywgYW5kIFRTQyBnZW5lcmF0ZXMgYW4gdW50eXBlZFxuICAgIC8vIGBwcml2YXRlIGZyZWV6ZUluZGV4YCBmaWVsZCBmb3IsIHdoaWNoIHRyaXBzIGB0eXBlLWNvdmVyYWdlYCB1cC5cbiAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgYEBkZXByZWNhdGVkYCB0byB2aXN1YWxpemUgdGhhdCB0aGV5IHNob3VsZG5cdTIwMTl0IGJlIHVzZWQuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgbGlzdCBvZiBjb25maWd1cmVkIHBsdWdpbnMuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqICAgVGhpcyBpcyBhIHByaXZhdGUgaW50ZXJuYWwgcHJvcGVydHkgYW5kIHNob3VsZCBub3QgYmUgdXNlZC5cbiAgICAgKiBAdHlwZSB7QXJyYXk8UGx1Z2luVHVwbGU8QXJyYXk8dW5rbm93bj4+Pn1cbiAgICAgKi9cbiAgICB0aGlzLmF0dGFjaGVycyA9IFtdXG5cbiAgICAvKipcbiAgICAgKiBDb21waWxlciB0byB1c2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7KFxuICAgICAqICAgQ29tcGlsZXI8XG4gICAgICogICAgIENvbXBpbGVUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IENvbXBpbGVUcmVlLFxuICAgICAqICAgICBDb21waWxlUmVzdWx0IGV4dGVuZHMgdW5kZWZpbmVkID8gQ29tcGlsZVJlc3VsdHMgOiBDb21waWxlUmVzdWx0XG4gICAgICogICA+IHxcbiAgICAgKiAgIHVuZGVmaW5lZFxuICAgICAqICl9XG4gICAgICovXG4gICAgdGhpcy5jb21waWxlciA9IHVuZGVmaW5lZFxuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgc3RhdGUgdG8gdHJhY2sgd2hlcmUgd2UgYXJlIHdoaWxlIGZyZWV6aW5nLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKiAgIFRoaXMgaXMgYSBwcml2YXRlIGludGVybmFsIHByb3BlcnR5IGFuZCBzaG91bGQgbm90IGJlIHVzZWQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyZWV6ZUluZGV4ID0gLTFcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHN0YXRlIHRvIHRyYWNrIHdoZXRoZXIgd2VcdTIwMTlyZSBmcm96ZW4uXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqICAgVGhpcyBpcyBhIHByaXZhdGUgaW50ZXJuYWwgcHJvcGVydHkgYW5kIHNob3VsZCBub3QgYmUgdXNlZC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLmZyb3plbiA9IHVuZGVmaW5lZFxuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgc3RhdGUuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqICAgVGhpcyBpcyBhIHByaXZhdGUgaW50ZXJuYWwgcHJvcGVydHkgYW5kIHNob3VsZCBub3QgYmUgdXNlZC5cbiAgICAgKiBAdHlwZSB7RGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLm5hbWVzcGFjZSA9IHt9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXIgdG8gdXNlLlxuICAgICAqXG4gICAgICogQHR5cGUgeyhcbiAgICAgKiAgIFBhcnNlcjxQYXJzZVRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogUGFyc2VUcmVlPiB8XG4gICAgICogICB1bmRlZmluZWRcbiAgICAgKiApfVxuICAgICAqL1xuICAgIHRoaXMucGFyc2VyID0gdW5kZWZpbmVkXG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBsaXN0IG9mIGNvbmZpZ3VyZWQgdHJhbnNmb3JtZXJzLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKiAgIFRoaXMgaXMgYSBwcml2YXRlIGludGVybmFsIHByb3BlcnR5IGFuZCBzaG91bGQgbm90IGJlIHVzZWQuXG4gICAgICogQHR5cGUge1BpcGVsaW5lfVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNmb3JtZXJzID0gdHJvdWdoKClcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IGEgcHJvY2Vzc29yLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiAgIFRoaXMgaXMgYSBwcml2YXRlIGludGVybmFsIG1ldGhvZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICAgKiBAcmV0dXJucyB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59XG4gICAqICAgTmV3ICp1bmZyb3plbiogcHJvY2Vzc29yICh7QGxpbmtjb2RlIFByb2Nlc3Nvcn0pIHRoYXQgaXNcbiAgICogICBjb25maWd1cmVkIHRvIHdvcmsgdGhlIHNhbWUgYXMgaXRzIGFuY2VzdG9yLlxuICAgKiAgIFdoZW4gdGhlIGRlc2NlbmRhbnQgcHJvY2Vzc29yIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGZ1dHVyZSBpdCBkb2VzIG5vdFxuICAgKiAgIGFmZmVjdCB0aGUgYW5jZXN0cmFsIHByb2Nlc3Nvci5cbiAgICovXG4gIGNvcHkoKSB7XG4gICAgLy8gQ2FzdCBhcyB0aGUgdHlwZSBwYXJhbWV0ZXJzIHdpbGwgYmUgdGhlIHNhbWUgYWZ0ZXIgYXR0YWNoaW5nLlxuICAgIGNvbnN0IGRlc3RpbmF0aW9uID1cbiAgICAgIC8qKiBAdHlwZSB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59ICovIChcbiAgICAgICAgbmV3IFByb2Nlc3NvcigpXG4gICAgICApXG4gICAgbGV0IGluZGV4ID0gLTFcblxuICAgIHdoaWxlICgrK2luZGV4IDwgdGhpcy5hdHRhY2hlcnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhdHRhY2hlciA9IHRoaXMuYXR0YWNoZXJzW2luZGV4XVxuICAgICAgZGVzdGluYXRpb24udXNlKC4uLmF0dGFjaGVyKVxuICAgIH1cblxuICAgIGRlc3RpbmF0aW9uLmRhdGEoZXh0ZW5kKHRydWUsIHt9LCB0aGlzLm5hbWVzcGFjZSkpXG5cbiAgICByZXR1cm4gZGVzdGluYXRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgdGhlIHByb2Nlc3NvciB3aXRoIGluZm8gYXZhaWxhYmxlIHRvIGFsbCBwbHVnaW5zLlxuICAgKiBJbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gYW4gb2JqZWN0LlxuICAgKlxuICAgKiBUeXBpY2FsbHksIG9wdGlvbnMgY2FuIGJlIGdpdmVuIHRvIGEgc3BlY2lmaWMgcGx1Z2luLCBidXQgc29tZXRpbWVzIGl0XG4gICAqIG1ha2VzIHNlbnNlIHRvIGhhdmUgaW5mb3JtYXRpb24gc2hhcmVkIHdpdGggc2V2ZXJhbCBwbHVnaW5zLlxuICAgKiBGb3IgZXhhbXBsZSwgYSBsaXN0IG9mIEhUTUwgZWxlbWVudHMgdGhhdCBhcmUgc2VsZi1jbG9zaW5nLCB3aGljaCBpc1xuICAgKiBuZWVkZWQgZHVyaW5nIGFsbCBwaGFzZXMuXG4gICAqXG4gICAqID4gKipOb3RlKio6IHNldHRpbmcgaW5mb3JtYXRpb24gY2Fubm90IG9jY3VyIG9uICpmcm96ZW4qIHByb2Nlc3NvcnMuXG4gICAqID4gQ2FsbCB0aGUgcHJvY2Vzc29yIGZpcnN0IHRvIGNyZWF0ZSBhIG5ldyB1bmZyb3plbiBwcm9jZXNzb3IuXG4gICAqXG4gICAqID4gKipOb3RlKio6IHRvIHJlZ2lzdGVyIGN1c3RvbSBkYXRhIGluIFR5cGVTY3JpcHQsIGF1Z21lbnQgdGhlXG4gICAqID4ge0BsaW5rY29kZSBEYXRhfSBpbnRlcmZhY2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqICAgVGhpcyBleGFtcGxlIHNob3cgaG93IHRvIGdldCBhbmQgc2V0IGluZm86XG4gICAqXG4gICAqICAgYGBganNcbiAgICogICBpbXBvcnQge3VuaWZpZWR9IGZyb20gJ3VuaWZpZWQnXG4gICAqXG4gICAqICAgY29uc3QgcHJvY2Vzc29yID0gdW5pZmllZCgpLmRhdGEoJ2FscGhhJywgJ2JyYXZvJylcbiAgICpcbiAgICogICBwcm9jZXNzb3IuZGF0YSgnYWxwaGEnKSAvLyA9PiAnYnJhdm8nXG4gICAqXG4gICAqICAgcHJvY2Vzc29yLmRhdGEoKSAvLyA9PiB7YWxwaGE6ICdicmF2byd9XG4gICAqXG4gICAqICAgcHJvY2Vzc29yLmRhdGEoe2NoYXJsaWU6ICdkZWx0YSd9KVxuICAgKlxuICAgKiAgIHByb2Nlc3Nvci5kYXRhKCkgLy8gPT4ge2NoYXJsaWU6ICdkZWx0YSd9XG4gICAqICAgYGBgXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSB7a2V5b2YgRGF0YX0gS2V5XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcmV0dXJucyB7RGF0YX1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7RGF0YX0gZGF0YXNldFxuICAgKiBAcmV0dXJucyB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge0tleX0ga2V5XG4gICAqIEByZXR1cm5zIHtEYXRhW0tleV19XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge0tleX0ga2V5XG4gICAqIEBwYXJhbSB7RGF0YVtLZXldfSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59XG4gICAqXG4gICAqIEBwYXJhbSB7RGF0YSB8IEtleX0gW2tleV1cbiAgICogICBLZXkgdG8gZ2V0IG9yIHNldCwgb3IgZW50aXJlIGRhdGFzZXQgdG8gc2V0LCBvciBub3RoaW5nIHRvIGdldCB0aGVcbiAgICogICBlbnRpcmUgZGF0YXNldCAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0ge0RhdGFbS2V5XX0gW3ZhbHVlXVxuICAgKiAgIFZhbHVlIHRvIHNldCAob3B0aW9uYWwpLlxuICAgKiBAcmV0dXJucyB7dW5rbm93bn1cbiAgICogICBUaGUgY3VycmVudCBwcm9jZXNzb3Igd2hlbiBzZXR0aW5nLCB0aGUgdmFsdWUgYXQgYGtleWAgd2hlbiBnZXR0aW5nLCBvclxuICAgKiAgIHRoZSBlbnRpcmUgZGF0YXNldCB3aGVuIGdldHRpbmcgd2l0aG91dCBrZXkuXG4gICAqL1xuICBkYXRhKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFNldCBga2V5YC5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGFzc2VydFVuZnJvemVuKCdkYXRhJywgdGhpcy5mcm96ZW4pXG4gICAgICAgIHRoaXMubmFtZXNwYWNlW2tleV0gPSB2YWx1ZVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgfVxuXG4gICAgICAvLyBHZXQgYGtleWAuXG4gICAgICByZXR1cm4gKG93bi5jYWxsKHRoaXMubmFtZXNwYWNlLCBrZXkpICYmIHRoaXMubmFtZXNwYWNlW2tleV0pIHx8IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIC8vIFNldCBzcGFjZS5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBhc3NlcnRVbmZyb3plbignZGF0YScsIHRoaXMuZnJvemVuKVxuICAgICAgdGhpcy5uYW1lc3BhY2UgPSBrZXlcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLy8gR2V0IHNwYWNlLlxuICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZVxuICB9XG5cbiAgLyoqXG4gICAqIEZyZWV6ZSBhIHByb2Nlc3Nvci5cbiAgICpcbiAgICogRnJvemVuIHByb2Nlc3NvcnMgYXJlIG1lYW50IHRvIGJlIGV4dGVuZGVkIGFuZCBub3QgdG8gYmUgY29uZmlndXJlZFxuICAgKiBkaXJlY3RseS5cbiAgICpcbiAgICogV2hlbiBhIHByb2Nlc3NvciBpcyBmcm96ZW4gaXQgY2Fubm90IGJlIHVuZnJvemVuLlxuICAgKiBOZXcgcHJvY2Vzc29ycyB3b3JraW5nIHRoZSBzYW1lIHdheSBjYW4gYmUgY3JlYXRlZCBieSBjYWxsaW5nIHRoZVxuICAgKiBwcm9jZXNzb3IuXG4gICAqXG4gICAqIEl0XHUyMDE5cyBwb3NzaWJsZSB0byBmcmVlemUgcHJvY2Vzc29ycyBleHBsaWNpdGx5IGJ5IGNhbGxpbmcgYC5mcmVlemUoKWAuXG4gICAqIFByb2Nlc3NvcnMgZnJlZXplIGF1dG9tYXRpY2FsbHkgd2hlbiBgLnBhcnNlKClgLCBgLnJ1bigpYCwgYC5ydW5TeW5jKClgLFxuICAgKiBgLnN0cmluZ2lmeSgpYCwgYC5wcm9jZXNzKClgLCBvciBgLnByb2Nlc3NTeW5jKClgIGFyZSBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn1cbiAgICogICBUaGUgY3VycmVudCBwcm9jZXNzb3IuXG4gICAqL1xuICBmcmVlemUoKSB7XG4gICAgaWYgKHRoaXMuZnJvemVuKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIC8vIENhc3Qgc28gdGhhdCB3ZSBjYW4gdHlwZSBwbHVnaW5zIGVhc2llci5cbiAgICAvLyBQbHVnaW5zIGFyZSBzdXBwb3NlZCB0byBiZSB1c2FibGUgb24gZGlmZmVyZW50IHByb2Nlc3NvcnMsIG5vdCBqdXN0IG9uXG4gICAgLy8gdGhpcyBleGFjdCBwcm9jZXNzb3IuXG4gICAgY29uc3Qgc2VsZiA9IC8qKiBAdHlwZSB7UHJvY2Vzc29yfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAodGhpcykpXG5cbiAgICB3aGlsZSAoKyt0aGlzLmZyZWV6ZUluZGV4IDwgdGhpcy5hdHRhY2hlcnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBbYXR0YWNoZXIsIC4uLm9wdGlvbnNdID0gdGhpcy5hdHRhY2hlcnNbdGhpcy5mcmVlemVJbmRleF1cblxuICAgICAgaWYgKG9wdGlvbnNbMF0gPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zWzBdID09PSB0cnVlKSB7XG4gICAgICAgIG9wdGlvbnNbMF0gPSB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBhdHRhY2hlci5jYWxsKHNlbGYsIC4uLm9wdGlvbnMpXG5cbiAgICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1lcnMudXNlKHRyYW5zZm9ybWVyKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZnJvemVuID0gdHJ1ZVxuICAgIHRoaXMuZnJlZXplSW5kZXggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdGV4dCB0byBhIHN5bnRheCB0cmVlLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiBgcGFyc2VgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogYHBhcnNlYCBwZXJmb3JtcyB0aGUgcGFyc2UgcGhhc2UsIG5vdCB0aGUgcnVuIHBoYXNlIG9yIG90aGVyXG4gICAqID4gcGhhc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXVxuICAgKiAgIGZpbGUgdG8gcGFyc2UgKG9wdGlvbmFsKTsgdHlwaWNhbGx5IGBzdHJpbmdgIG9yIGBWRmlsZWA7IGFueSB2YWx1ZVxuICAgKiAgIGFjY2VwdGVkIGFzIGB4YCBpbiBgbmV3IFZGaWxlKHgpYC5cbiAgICogQHJldHVybnMge1BhcnNlVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBQYXJzZVRyZWV9XG4gICAqICAgU3ludGF4IHRyZWUgcmVwcmVzZW50aW5nIGBmaWxlYC5cbiAgICovXG4gIHBhcnNlKGZpbGUpIHtcbiAgICB0aGlzLmZyZWV6ZSgpXG4gICAgY29uc3QgcmVhbEZpbGUgPSB2ZmlsZShmaWxlKVxuICAgIGNvbnN0IHBhcnNlciA9IHRoaXMucGFyc2VyIHx8IHRoaXMuUGFyc2VyXG4gICAgYXNzZXJ0UGFyc2VyKCdwYXJzZScsIHBhcnNlcilcbiAgICByZXR1cm4gcGFyc2VyKFN0cmluZyhyZWFsRmlsZSksIHJlYWxGaWxlKVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGhlIGdpdmVuIGZpbGUgYXMgY29uZmlndXJlZCBvbiB0aGUgcHJvY2Vzc29yLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc2AgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc2AgcGVyZm9ybXMgdGhlIHBhcnNlLCBydW4sIGFuZCBzdHJpbmdpZnkgcGhhc2VzLlxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBmaWxlXG4gICAqIEBwYXJhbSB7UHJvY2Vzc0NhbGxiYWNrPFZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pj59IGRvbmVcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pj59XG4gICAqXG4gICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdXG4gICAqICAgRmlsZSAob3B0aW9uYWwpOyB0eXBpY2FsbHkgYHN0cmluZ2Agb3IgYFZGaWxlYF07IGFueSB2YWx1ZSBhY2NlcHRlZCBhc1xuICAgKiAgIGB4YCBpbiBgbmV3IFZGaWxlKHgpYC5cbiAgICogQHBhcmFtIHtQcm9jZXNzQ2FsbGJhY2s8VkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+PiB8IHVuZGVmaW5lZH0gW2RvbmVdXG4gICAqICAgQ2FsbGJhY2sgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8VkZpbGU+IHwgdW5kZWZpbmVkfVxuICAgKiAgIE5vdGhpbmcgaWYgYGRvbmVgIGlzIGdpdmVuLlxuICAgKiAgIE90aGVyd2lzZSBhIHByb21pc2UsIHJlamVjdGVkIHdpdGggYSBmYXRhbCBlcnJvciBvciByZXNvbHZlZCB3aXRoIHRoZVxuICAgKiAgIHByb2Nlc3NlZCBmaWxlLlxuICAgKlxuICAgKiAgIFRoZSBwYXJzZWQsIHRyYW5zZm9ybWVkLCBhbmQgY29tcGlsZWQgdmFsdWUgaXMgYXZhaWxhYmxlIGF0XG4gICAqICAgYGZpbGUudmFsdWVgIChzZWUgbm90ZSkuXG4gICAqXG4gICAqICAgPiAqKk5vdGUqKjogdW5pZmllZCB0eXBpY2FsbHkgY29tcGlsZXMgYnkgc2VyaWFsaXppbmc6IG1vc3RcbiAgICogICA+IGNvbXBpbGVycyByZXR1cm4gYHN0cmluZ2AgKG9yIGBVaW50OEFycmF5YCkuXG4gICAqICAgPiBTb21lIGNvbXBpbGVycywgc3VjaCBhcyB0aGUgb25lIGNvbmZpZ3VyZWQgd2l0aFxuICAgKiAgID4gW2ByZWh5cGUtcmVhY3RgXVtyZWh5cGUtcmVhY3RdLCByZXR1cm4gb3RoZXIgdmFsdWVzIChpbiB0aGlzIGNhc2UsIGFcbiAgICogICA+IFJlYWN0IHRyZWUpLlxuICAgKiAgID4gSWYgeW91XHUyMDE5cmUgdXNpbmcgYSBjb21waWxlciB0aGF0IGRvZXNuXHUyMDE5dCBzZXJpYWxpemUsIGV4cGVjdCBkaWZmZXJlbnRcbiAgICogICA+IHJlc3VsdCB2YWx1ZXMuXG4gICAqICAgPlxuICAgKiAgID4gVG8gcmVnaXN0ZXIgY3VzdG9tIHJlc3VsdHMgaW4gVHlwZVNjcmlwdCwgYWRkIHRoZW0gdG9cbiAgICogICA+IHtAbGlua2NvZGUgQ29tcGlsZVJlc3VsdE1hcH0uXG4gICAqXG4gICAqICAgW3JlaHlwZS1yZWFjdF06IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWh5cGVqcy9yZWh5cGUtcmVhY3RcbiAgICovXG4gIHByb2Nlc3MoZmlsZSwgZG9uZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgICB0aGlzLmZyZWV6ZSgpXG4gICAgYXNzZXJ0UGFyc2VyKCdwcm9jZXNzJywgdGhpcy5wYXJzZXIgfHwgdGhpcy5QYXJzZXIpXG4gICAgYXNzZXJ0Q29tcGlsZXIoJ3Byb2Nlc3MnLCB0aGlzLmNvbXBpbGVyIHx8IHRoaXMuQ29tcGlsZXIpXG5cbiAgICByZXR1cm4gZG9uZSA/IGV4ZWN1dG9yKHVuZGVmaW5lZCwgZG9uZSkgOiBuZXcgUHJvbWlzZShleGVjdXRvcilcblxuICAgIC8vIE5vdGU6IGB2b2lkYHMgbmVlZGVkIGZvciBUUy5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0geygoZmlsZTogVkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+KSA9PiB1bmRlZmluZWQgfCB2b2lkKSB8IHVuZGVmaW5lZH0gcmVzb2x2ZVxuICAgICAqIEBwYXJhbSB7KGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZCkgPT4gdW5kZWZpbmVkIHwgdm9pZH0gcmVqZWN0XG4gICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGNvbnN0IHJlYWxGaWxlID0gdmZpbGUoZmlsZSlcbiAgICAgIC8vIEFzc3VtZSBgUGFyc2VUcmVlYCAodGhlIHJlc3VsdCBvZiB0aGUgcGFyc2VyKSBtYXRjaGVzIGBIZWFkVHJlZWAgKHRoZVxuICAgICAgLy8gaW5wdXQgb2YgdGhlIGZpcnN0IHRyYW5zZm9ybSkuXG4gICAgICBjb25zdCBwYXJzZVRyZWUgPVxuICAgICAgICAvKiogQHR5cGUge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSAqLyAoXG4gICAgICAgICAgLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VsZi5wYXJzZShyZWFsRmlsZSkpXG4gICAgICAgIClcblxuICAgICAgc2VsZi5ydW4ocGFyc2VUcmVlLCByZWFsRmlsZSwgZnVuY3Rpb24gKGVycm9yLCB0cmVlLCBmaWxlKSB7XG4gICAgICAgIGlmIChlcnJvciB8fCAhdHJlZSB8fCAhZmlsZSkge1xuICAgICAgICAgIHJldHVybiByZWFsRG9uZShlcnJvcilcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFzc3VtZSBgVGFpbFRyZWVgICh0aGUgb3V0cHV0IG9mIHRoZSBsYXN0IHRyYW5zZm9ybSkgbWF0Y2hlc1xuICAgICAgICAvLyBgQ29tcGlsZVRyZWVgICh0aGUgaW5wdXQgb2YgdGhlIGNvbXBpbGVyKS5cbiAgICAgICAgY29uc3QgY29tcGlsZVRyZWUgPVxuICAgICAgICAgIC8qKiBAdHlwZSB7Q29tcGlsZVRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogQ29tcGlsZVRyZWV9ICovIChcbiAgICAgICAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHRyZWUpXG4gICAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IGNvbXBpbGVSZXN1bHQgPSBzZWxmLnN0cmluZ2lmeShjb21waWxlVHJlZSwgZmlsZSlcblxuICAgICAgICBpZiAobG9va3NMaWtlQVZhbHVlKGNvbXBpbGVSZXN1bHQpKSB7XG4gICAgICAgICAgZmlsZS52YWx1ZSA9IGNvbXBpbGVSZXN1bHRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlLnJlc3VsdCA9IGNvbXBpbGVSZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYWxEb25lKGVycm9yLCAvKiogQHR5cGUge1ZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pn0gKi8gKGZpbGUpKVxuICAgICAgfSlcblxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgdW5kZWZpbmVkfSBlcnJvclxuICAgICAgICogQHBhcmFtIHtWRmlsZVdpdGhPdXRwdXQ8Q29tcGlsZVJlc3VsdD4gfCB1bmRlZmluZWR9IFtmaWxlXVxuICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVhbERvbmUoZXJyb3IsIGZpbGUpIHtcbiAgICAgICAgaWYgKGVycm9yIHx8ICFmaWxlKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9IGVsc2UgaWYgKHJlc29sdmUpIHtcbiAgICAgICAgICByZXNvbHZlKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzZXJ0KGRvbmUsICdgZG9uZWAgaXMgZGVmaW5lZCBpZiBgcmVzb2x2ZWAgaXMgbm90JylcbiAgICAgICAgICBkb25lKHVuZGVmaW5lZCwgZmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHRoZSBnaXZlbiBmaWxlIGFzIGNvbmZpZ3VyZWQgb24gdGhlIHByb2Nlc3Nvci5cbiAgICpcbiAgICogQW4gZXJyb3IgaXMgdGhyb3duIGlmIGFzeW5jaHJvbm91cyB0cmFuc2Zvcm1zIGFyZSBjb25maWd1cmVkLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc1N5bmNgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogYHByb2Nlc3NTeW5jYCBwZXJmb3JtcyB0aGUgcGFyc2UsIHJ1biwgYW5kIHN0cmluZ2lmeSBwaGFzZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdXG4gICAqICAgRmlsZSAob3B0aW9uYWwpOyB0eXBpY2FsbHkgYHN0cmluZ2Agb3IgYFZGaWxlYDsgYW55IHZhbHVlIGFjY2VwdGVkIGFzXG4gICAqICAgYHhgIGluIGBuZXcgVkZpbGUoeClgLlxuICAgKiBAcmV0dXJucyB7VkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+fVxuICAgKiAgIFRoZSBwcm9jZXNzZWQgZmlsZS5cbiAgICpcbiAgICogICBUaGUgcGFyc2VkLCB0cmFuc2Zvcm1lZCwgYW5kIGNvbXBpbGVkIHZhbHVlIGlzIGF2YWlsYWJsZSBhdFxuICAgKiAgIGBmaWxlLnZhbHVlYCAoc2VlIG5vdGUpLlxuICAgKlxuICAgKiAgID4gKipOb3RlKio6IHVuaWZpZWQgdHlwaWNhbGx5IGNvbXBpbGVzIGJ5IHNlcmlhbGl6aW5nOiBtb3N0XG4gICAqICAgPiBjb21waWxlcnMgcmV0dXJuIGBzdHJpbmdgIChvciBgVWludDhBcnJheWApLlxuICAgKiAgID4gU29tZSBjb21waWxlcnMsIHN1Y2ggYXMgdGhlIG9uZSBjb25maWd1cmVkIHdpdGhcbiAgICogICA+IFtgcmVoeXBlLXJlYWN0YF1bcmVoeXBlLXJlYWN0XSwgcmV0dXJuIG90aGVyIHZhbHVlcyAoaW4gdGhpcyBjYXNlLCBhXG4gICAqICAgPiBSZWFjdCB0cmVlKS5cbiAgICogICA+IElmIHlvdVx1MjAxOXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2Vzblx1MjAxOXQgc2VyaWFsaXplLCBleHBlY3QgZGlmZmVyZW50XG4gICAqICAgPiByZXN1bHQgdmFsdWVzLlxuICAgKiAgID5cbiAgICogICA+IFRvIHJlZ2lzdGVyIGN1c3RvbSByZXN1bHRzIGluIFR5cGVTY3JpcHQsIGFkZCB0aGVtIHRvXG4gICAqICAgPiB7QGxpbmtjb2RlIENvbXBpbGVSZXN1bHRNYXB9LlxuICAgKlxuICAgKiAgIFtyZWh5cGUtcmVhY3RdOiBodHRwczovL2dpdGh1Yi5jb20vcmVoeXBlanMvcmVoeXBlLXJlYWN0XG4gICAqL1xuICBwcm9jZXNzU3luYyhmaWxlKSB7XG4gICAgLyoqIEB0eXBlIHtib29sZWFufSAqL1xuICAgIGxldCBjb21wbGV0ZSA9IGZhbHNlXG4gICAgLyoqIEB0eXBlIHtWRmlsZVdpdGhPdXRwdXQ8Q29tcGlsZVJlc3VsdD4gfCB1bmRlZmluZWR9ICovXG4gICAgbGV0IHJlc3VsdFxuXG4gICAgdGhpcy5mcmVlemUoKVxuICAgIGFzc2VydFBhcnNlcigncHJvY2Vzc1N5bmMnLCB0aGlzLnBhcnNlciB8fCB0aGlzLlBhcnNlcilcbiAgICBhc3NlcnRDb21waWxlcigncHJvY2Vzc1N5bmMnLCB0aGlzLmNvbXBpbGVyIHx8IHRoaXMuQ29tcGlsZXIpXG5cbiAgICB0aGlzLnByb2Nlc3MoZmlsZSwgcmVhbERvbmUpXG4gICAgYXNzZXJ0RG9uZSgncHJvY2Vzc1N5bmMnLCAncHJvY2VzcycsIGNvbXBsZXRlKVxuICAgIGFzc2VydChyZXN1bHQsICd3ZSBlaXRoZXIgYmFpbGVkIG9uIGFuIGVycm9yIG9yIGhhdmUgYSB0cmVlJylcblxuICAgIHJldHVybiByZXN1bHRcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtQcm9jZXNzQ2FsbGJhY2s8VkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+Pn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWFsRG9uZShlcnJvciwgZmlsZSkge1xuICAgICAgY29tcGxldGUgPSB0cnVlXG4gICAgICBiYWlsKGVycm9yKVxuICAgICAgcmVzdWx0ID0gZmlsZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gKnRyYW5zZm9ybWVycyogb24gYSBzeW50YXggdHJlZS5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogYHJ1bmAgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiBgcnVuYCBwZXJmb3JtcyB0aGUgcnVuIHBoYXNlLCBub3Qgb3RoZXIgcGhhc2VzLlxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZVxuICAgKiBAcGFyYW0ge1J1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPn0gZG9uZVxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZVxuICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IGZpbGVcbiAgICogQHBhcmFtIHtSdW5DYWxsYmFjazxUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZT59IGRvbmVcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9IHRyZWVcbiAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbZmlsZV1cbiAgICogQHJldHVybnMge1Byb21pc2U8VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWU+fVxuICAgKlxuICAgKiBAcGFyYW0ge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSB0cmVlXG4gICAqICAgVHJlZSB0byB0cmFuc2Zvcm0gYW5kIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7KFxuICAgKiAgIFJ1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPiB8XG4gICAqICAgQ29tcGF0aWJsZVxuICAgKiApfSBbZmlsZV1cbiAgICogICBGaWxlIGFzc29jaWF0ZWQgd2l0aCBgbm9kZWAgKG9wdGlvbmFsKTsgYW55IHZhbHVlIGFjY2VwdGVkIGFzIGB4YCBpblxuICAgKiAgIGBuZXcgVkZpbGUoeClgLlxuICAgKiBAcGFyYW0ge1J1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPn0gW2RvbmVdXG4gICAqICAgQ2FsbGJhY2sgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWU+IHwgdW5kZWZpbmVkfVxuICAgKiAgIE5vdGhpbmcgaWYgYGRvbmVgIGlzIGdpdmVuLlxuICAgKiAgIE90aGVyd2lzZSwgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYSBmYXRhbCBlcnJvciBvciByZXNvbHZlZCB3aXRoIHRoZVxuICAgKiAgIHRyYW5zZm9ybWVkIHRyZWUuXG4gICAqL1xuICBydW4odHJlZSwgZmlsZSwgZG9uZSkge1xuICAgIGFzc2VydE5vZGUodHJlZSlcbiAgICB0aGlzLmZyZWV6ZSgpXG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lcnMgPSB0aGlzLnRyYW5zZm9ybWVyc1xuXG4gICAgaWYgKCFkb25lICYmIHR5cGVvZiBmaWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkb25lID0gZmlsZVxuICAgICAgZmlsZSA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHJldHVybiBkb25lID8gZXhlY3V0b3IodW5kZWZpbmVkLCBkb25lKSA6IG5ldyBQcm9taXNlKGV4ZWN1dG9yKVxuXG4gICAgLy8gTm90ZTogYHZvaWRgcyBuZWVkZWQgZm9yIFRTLlxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7KFxuICAgICAqICAgKCh0cmVlOiBUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZSkgPT4gdW5kZWZpbmVkIHwgdm9pZCkgfFxuICAgICAqICAgdW5kZWZpbmVkXG4gICAgICogKX0gcmVzb2x2ZVxuICAgICAqIEBwYXJhbSB7KGVycm9yOiBFcnJvcikgPT4gdW5kZWZpbmVkIHwgdm9pZH0gcmVqZWN0XG4gICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgdHlwZW9mIGZpbGUgIT09ICdmdW5jdGlvbicsXG4gICAgICAgICdgZmlsZWAgY2FuXHUyMDE5dCBiZSBhIGBkb25lYCBhbnltb3JlLCB3ZSBjaGVja2VkJ1xuICAgICAgKVxuICAgICAgY29uc3QgcmVhbEZpbGUgPSB2ZmlsZShmaWxlKVxuICAgICAgdHJhbnNmb3JtZXJzLnJ1bih0cmVlLCByZWFsRmlsZSwgcmVhbERvbmUpXG5cbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHtFcnJvciB8IHVuZGVmaW5lZH0gZXJyb3JcbiAgICAgICAqIEBwYXJhbSB7Tm9kZX0gb3V0cHV0VHJlZVxuICAgICAgICogQHBhcmFtIHtWRmlsZX0gZmlsZVxuICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVhbERvbmUoZXJyb3IsIG91dHB1dFRyZWUsIGZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0aW5nVHJlZSA9XG4gICAgICAgICAgLyoqIEB0eXBlIHtUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZX0gKi8gKFxuICAgICAgICAgICAgb3V0cHV0VHJlZSB8fCB0cmVlXG4gICAgICAgICAgKVxuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlKSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHRpbmdUcmVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFzc2VydChkb25lLCAnYGRvbmVgIGlzIGRlZmluZWQgaWYgYHJlc29sdmVgIGlzIG5vdCcpXG4gICAgICAgICAgZG9uZSh1bmRlZmluZWQsIHJlc3VsdGluZ1RyZWUsIGZpbGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVuICp0cmFuc2Zvcm1lcnMqIG9uIGEgc3ludGF4IHRyZWUuXG4gICAqXG4gICAqIEFuIGVycm9yIGlzIHRocm93biBpZiBhc3luY2hyb25vdXMgdHJhbnNmb3JtcyBhcmUgY29uZmlndXJlZC5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogYHJ1blN5bmNgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogYHJ1blN5bmNgIHBlcmZvcm1zIHRoZSBydW4gcGhhc2UsIG5vdCBvdGhlciBwaGFzZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9IHRyZWVcbiAgICogICBUcmVlIHRvIHRyYW5zZm9ybSBhbmQgaW5zcGVjdC5cbiAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbZmlsZV1cbiAgICogICBGaWxlIGFzc29jaWF0ZWQgd2l0aCBgbm9kZWAgKG9wdGlvbmFsKTsgYW55IHZhbHVlIGFjY2VwdGVkIGFzIGB4YCBpblxuICAgKiAgIGBuZXcgVkZpbGUoeClgLlxuICAgKiBAcmV0dXJucyB7VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWV9XG4gICAqICAgVHJhbnNmb3JtZWQgdHJlZS5cbiAgICovXG4gIHJ1blN5bmModHJlZSwgZmlsZSkge1xuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICBsZXQgY29tcGxldGUgPSBmYWxzZVxuICAgIC8qKiBAdHlwZSB7KFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlKSB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgcmVzdWx0XG5cbiAgICB0aGlzLnJ1bih0cmVlLCBmaWxlLCByZWFsRG9uZSlcblxuICAgIGFzc2VydERvbmUoJ3J1blN5bmMnLCAncnVuJywgY29tcGxldGUpXG4gICAgYXNzZXJ0KHJlc3VsdCwgJ3dlIGVpdGhlciBiYWlsZWQgb24gYW4gZXJyb3Igb3IgaGF2ZSBhIHRyZWUnKVxuICAgIHJldHVybiByZXN1bHRcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtSdW5DYWxsYmFjazxUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZT59XG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVhbERvbmUoZXJyb3IsIHRyZWUpIHtcbiAgICAgIGJhaWwoZXJyb3IpXG4gICAgICByZXN1bHQgPSB0cmVlXG4gICAgICBjb21wbGV0ZSA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcGlsZSBhIHN5bnRheCB0cmVlLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiBgc3RyaW5naWZ5YCBmcmVlemVzIHRoZSBwcm9jZXNzb3IgaWYgbm90IGFscmVhZHkgKmZyb3plbiouXG4gICAqXG4gICAqID4gKipOb3RlKio6IGBzdHJpbmdpZnlgIHBlcmZvcm1zIHRoZSBzdHJpbmdpZnkgcGhhc2UsIG5vdCB0aGUgcnVuIHBoYXNlXG4gICAqID4gb3Igb3RoZXIgcGhhc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBpbGVUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IENvbXBpbGVUcmVlfSB0cmVlXG4gICAqICAgVHJlZSB0byBjb21waWxlLlxuICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXVxuICAgKiAgIEZpbGUgYXNzb2NpYXRlZCB3aXRoIGBub2RlYCAob3B0aW9uYWwpOyBhbnkgdmFsdWUgYWNjZXB0ZWQgYXMgYHhgIGluXG4gICAqICAgYG5ldyBWRmlsZSh4KWAuXG4gICAqIEByZXR1cm5zIHtDb21waWxlUmVzdWx0IGV4dGVuZHMgdW5kZWZpbmVkID8gVmFsdWUgOiBDb21waWxlUmVzdWx0fVxuICAgKiAgIFRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWUgKHNlZSBub3RlKS5cbiAgICpcbiAgICogICA+ICoqTm90ZSoqOiB1bmlmaWVkIHR5cGljYWxseSBjb21waWxlcyBieSBzZXJpYWxpemluZzogbW9zdCBjb21waWxlcnNcbiAgICogICA+IHJldHVybiBgc3RyaW5nYCAob3IgYFVpbnQ4QXJyYXlgKS5cbiAgICogICA+IFNvbWUgY29tcGlsZXJzLCBzdWNoIGFzIHRoZSBvbmUgY29uZmlndXJlZCB3aXRoXG4gICAqICAgPiBbYHJlaHlwZS1yZWFjdGBdW3JlaHlwZS1yZWFjdF0sIHJldHVybiBvdGhlciB2YWx1ZXMgKGluIHRoaXMgY2FzZSwgYVxuICAgKiAgID4gUmVhY3QgdHJlZSkuXG4gICAqICAgPiBJZiB5b3VcdTIwMTlyZSB1c2luZyBhIGNvbXBpbGVyIHRoYXQgZG9lc25cdTIwMTl0IHNlcmlhbGl6ZSwgZXhwZWN0IGRpZmZlcmVudFxuICAgKiAgID4gcmVzdWx0IHZhbHVlcy5cbiAgICogICA+XG4gICAqICAgPiBUbyByZWdpc3RlciBjdXN0b20gcmVzdWx0cyBpbiBUeXBlU2NyaXB0LCBhZGQgdGhlbSB0b1xuICAgKiAgID4ge0BsaW5rY29kZSBDb21waWxlUmVzdWx0TWFwfS5cbiAgICpcbiAgICogICBbcmVoeXBlLXJlYWN0XTogaHR0cHM6Ly9naXRodWIuY29tL3JlaHlwZWpzL3JlaHlwZS1yZWFjdFxuICAgKi9cbiAgc3RyaW5naWZ5KHRyZWUsIGZpbGUpIHtcbiAgICB0aGlzLmZyZWV6ZSgpXG4gICAgY29uc3QgcmVhbEZpbGUgPSB2ZmlsZShmaWxlKVxuICAgIGNvbnN0IGNvbXBpbGVyID0gdGhpcy5jb21waWxlciB8fCB0aGlzLkNvbXBpbGVyXG4gICAgYXNzZXJ0Q29tcGlsZXIoJ3N0cmluZ2lmeScsIGNvbXBpbGVyKVxuICAgIGFzc2VydE5vZGUodHJlZSlcblxuICAgIHJldHVybiBjb21waWxlcih0cmVlLCByZWFsRmlsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgdGhlIHByb2Nlc3NvciB0byB1c2UgYSBwbHVnaW4sIGEgbGlzdCBvZiB1c2FibGUgdmFsdWVzLCBvciBhXG4gICAqIHByZXNldC5cbiAgICpcbiAgICogSWYgdGhlIHByb2Nlc3NvciBpcyBhbHJlYWR5IHVzaW5nIGEgcGx1Z2luLCB0aGUgcHJldmlvdXMgcGx1Z2luXG4gICAqIGNvbmZpZ3VyYXRpb24gaXMgY2hhbmdlZCBiYXNlZCBvbiB0aGUgb3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgaW4uXG4gICAqIEluIG90aGVyIHdvcmRzLCB0aGUgcGx1Z2luIGlzIG5vdCBhZGRlZCBhIHNlY29uZCB0aW1lLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiBgdXNlYCBjYW5ub3QgYmUgY2FsbGVkIG9uICpmcm96ZW4qIHByb2Nlc3NvcnMuXG4gICAqID4gQ2FsbCB0aGUgcHJvY2Vzc29yIGZpcnN0IHRvIGNyZWF0ZSBhIG5ldyB1bmZyb3plbiBwcm9jZXNzb3IuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqICAgVGhlcmUgYXJlIG1hbnkgd2F5cyB0byBwYXNzIHBsdWdpbnMgdG8gYC51c2UoKWAuXG4gICAqICAgVGhpcyBleGFtcGxlIGdpdmVzIGFuIG92ZXJ2aWV3OlxuICAgKlxuICAgKiAgIGBgYGpzXG4gICAqICAgaW1wb3J0IHt1bmlmaWVkfSBmcm9tICd1bmlmaWVkJ1xuICAgKlxuICAgKiAgIHVuaWZpZWQoKVxuICAgKiAgICAgLy8gUGx1Z2luIHdpdGggb3B0aW9uczpcbiAgICogICAgIC51c2UocGx1Z2luQSwge3g6IHRydWUsIHk6IHRydWV9KVxuICAgKiAgICAgLy8gUGFzc2luZyB0aGUgc2FtZSBwbHVnaW4gYWdhaW4gbWVyZ2VzIGNvbmZpZ3VyYXRpb24gKHRvIGB7eDogdHJ1ZSwgeTogZmFsc2UsIHo6IHRydWV9YCk6XG4gICAqICAgICAudXNlKHBsdWdpbkEsIHt5OiBmYWxzZSwgejogdHJ1ZX0pXG4gICAqICAgICAvLyBQbHVnaW5zOlxuICAgKiAgICAgLnVzZShbcGx1Z2luQiwgcGx1Z2luQ10pXG4gICAqICAgICAvLyBUd28gcGx1Z2lucywgdGhlIHNlY29uZCB3aXRoIG9wdGlvbnM6XG4gICAqICAgICAudXNlKFtwbHVnaW5ELCBbcGx1Z2luRSwge31dXSlcbiAgICogICAgIC8vIFByZXNldCB3aXRoIHBsdWdpbnMgYW5kIHNldHRpbmdzOlxuICAgKiAgICAgLnVzZSh7cGx1Z2luczogW3BsdWdpbkYsIFtwbHVnaW5HLCB7fV1dLCBzZXR0aW5nczoge3Bvc2l0aW9uOiBmYWxzZX19KVxuICAgKiAgICAgLy8gU2V0dGluZ3Mgb25seTpcbiAgICogICAgIC51c2Uoe3NldHRpbmdzOiB7cG9zaXRpb246IGZhbHNlfX0pXG4gICAqICAgYGBgXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSB7QXJyYXk8dW5rbm93bj59IFtQYXJhbWV0ZXJzPVtdXVxuICAgKiBAdGVtcGxhdGUge05vZGUgfCBzdHJpbmcgfCB1bmRlZmluZWR9IFtJbnB1dD11bmRlZmluZWRdXG4gICAqIEB0ZW1wbGF0ZSBbT3V0cHV0PUlucHV0XVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtQcmVzZXQgfCBudWxsIHwgdW5kZWZpbmVkfSBbcHJlc2V0XVxuICAgKiBAcmV0dXJucyB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge1BsdWdnYWJsZUxpc3R9IGxpc3RcbiAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtQbHVnaW48UGFyYW1ldGVycywgSW5wdXQsIE91dHB1dD59IHBsdWdpblxuICAgKiBAcGFyYW0gey4uLihQYXJhbWV0ZXJzIHwgW2Jvb2xlYW5dKX0gcGFyYW1ldGVyc1xuICAgKiBAcmV0dXJucyB7VXNlUGx1Z2luPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdCwgSW5wdXQsIE91dHB1dD59XG4gICAqXG4gICAqIEBwYXJhbSB7UGx1Z2dhYmxlTGlzdCB8IFBsdWdpbiB8IFByZXNldCB8IG51bGwgfCB1bmRlZmluZWR9IHZhbHVlXG4gICAqICAgVXNhYmxlIHZhbHVlLlxuICAgKiBAcGFyYW0gey4uLnVua25vd259IHBhcmFtZXRlcnNcbiAgICogICBQYXJhbWV0ZXJzLCB3aGVuIGEgcGx1Z2luIGlzIGdpdmVuIGFzIGEgdXNhYmxlIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59XG4gICAqICAgQ3VycmVudCBwcm9jZXNzb3IuXG4gICAqL1xuICB1c2UodmFsdWUsIC4uLnBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBhdHRhY2hlcnMgPSB0aGlzLmF0dGFjaGVyc1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlXG5cbiAgICBhc3NlcnRVbmZyb3plbigndXNlJywgdGhpcy5mcm96ZW4pXG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRW1wdHkuXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFkZFBsdWdpbih2YWx1ZSwgcGFyYW1ldGVycylcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBhZGRMaXN0KHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkUHJlc2V0KHZhbHVlKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB1c2FibGUgdmFsdWUsIG5vdCBgJyArIHZhbHVlICsgJ2AnKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1BsdWdnYWJsZX0gdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhZGRQbHVnaW4odmFsdWUsIFtdKVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IFtwbHVnaW4sIC4uLnBhcmFtZXRlcnNdID1cbiAgICAgICAgICAgIC8qKiBAdHlwZSB7UGx1Z2luVHVwbGU8QXJyYXk8dW5rbm93bj4+fSAqLyAodmFsdWUpXG4gICAgICAgICAgYWRkUGx1Z2luKHBsdWdpbiwgcGFyYW1ldGVycylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRQcmVzZXQodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGAnICsgdmFsdWUgKyAnYCcpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtQcmVzZXR9IHJlc3VsdFxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkUHJlc2V0KHJlc3VsdCkge1xuICAgICAgaWYgKCEoJ3BsdWdpbnMnIGluIHJlc3VsdCkgJiYgISgnc2V0dGluZ3MnIGluIHJlc3VsdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdFeHBlY3RlZCB1c2FibGUgdmFsdWUgYnV0IHJlY2VpdmVkIGFuIGVtcHR5IHByZXNldCwgd2hpY2ggaXMgcHJvYmFibHkgYSBtaXN0YWtlOiBwcmVzZXRzIHR5cGljYWxseSBjb21lIHdpdGggYHBsdWdpbnNgIGFuZCBzb21ldGltZXMgd2l0aCBgc2V0dGluZ3NgLCBidXQgdGhpcyBoYXMgbmVpdGhlcidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBhZGRMaXN0KHJlc3VsdC5wbHVnaW5zKVxuXG4gICAgICBpZiAocmVzdWx0LnNldHRpbmdzKSB7XG4gICAgICAgIG5hbWVzcGFjZS5zZXR0aW5ncyA9IGV4dGVuZCh0cnVlLCBuYW1lc3BhY2Uuc2V0dGluZ3MsIHJlc3VsdC5zZXR0aW5ncylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1BsdWdnYWJsZUxpc3QgfCBudWxsIHwgdW5kZWZpbmVkfSBwbHVnaW5zXG4gICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGRMaXN0KHBsdWdpbnMpIHtcbiAgICAgIGxldCBpbmRleCA9IC0xXG5cbiAgICAgIGlmIChwbHVnaW5zID09PSBudWxsIHx8IHBsdWdpbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBFbXB0eS5cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwbHVnaW5zKSkge1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IHBsdWdpbnMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgdGhpbmcgPSBwbHVnaW5zW2luZGV4XVxuICAgICAgICAgIGFkZCh0aGluZylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBsaXN0IG9mIHBsdWdpbnMsIG5vdCBgJyArIHBsdWdpbnMgKyAnYCcpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtQbHVnaW59IHBsdWdpblxuICAgICAqIEBwYXJhbSB7QXJyYXk8dW5rbm93bj59IHBhcmFtZXRlcnNcbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFkZFBsdWdpbihwbHVnaW4sIHBhcmFtZXRlcnMpIHtcbiAgICAgIGxldCBpbmRleCA9IC0xXG4gICAgICBsZXQgZW50cnlJbmRleCA9IC0xXG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgYXR0YWNoZXJzLmxlbmd0aCkge1xuICAgICAgICBpZiAoYXR0YWNoZXJzW2luZGV4XVswXSA9PT0gcGx1Z2luKSB7XG4gICAgICAgICAgZW50cnlJbmRleCA9IGluZGV4XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZW50cnlJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYXR0YWNoZXJzLnB1c2goW3BsdWdpbiwgLi4ucGFyYW1ldGVyc10pXG4gICAgICB9XG4gICAgICAvLyBPbmx5IHNldCBpZiB0aGVyZSB3YXMgYXQgbGVhc3QgYSBgcHJpbWFyeWAgdmFsdWUsIG90aGVyd2lzZSB3ZVx1MjAxOWQgY2hhbmdlXG4gICAgICAvLyBgYXJndW1lbnRzLmxlbmd0aGAuXG4gICAgICBlbHNlIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IFtwcmltYXJ5LCAuLi5yZXN0XSA9IHBhcmFtZXRlcnNcbiAgICAgICAgY29uc3QgY3VycmVudFByaW1hcnkgPSBhdHRhY2hlcnNbZW50cnlJbmRleF1bMV1cbiAgICAgICAgaWYgKGlzUGxhaW5PYmooY3VycmVudFByaW1hcnkpICYmIGlzUGxhaW5PYmoocHJpbWFyeSkpIHtcbiAgICAgICAgICBwcmltYXJ5ID0gZXh0ZW5kKHRydWUsIGN1cnJlbnRQcmltYXJ5LCBwcmltYXJ5KVxuICAgICAgICB9XG5cbiAgICAgICAgYXR0YWNoZXJzW2VudHJ5SW5kZXhdID0gW3BsdWdpbiwgcHJpbWFyeSwgLi4ucmVzdF1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gTm90ZTogdGhpcyByZXR1cm5zIGEgKmNhbGxhYmxlKiBpbnN0YW5jZS5cbi8vIFRoYXRcdTIwMTlzIHdoeSBpdFx1MjAxOXMgZG9jdW1lbnRlZCBhcyBhIGZ1bmN0aW9uLlxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgcHJvY2Vzc29yLlxuICpcbiAqIEBleGFtcGxlXG4gKiAgIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgYSBuZXcgcHJvY2Vzc29yIGNhbiBiZSBjcmVhdGVkIChmcm9tIGByZW1hcmtgKSBhbmQgbGlua2VkXG4gKiAgIHRvICoqc3RkaW4qKig0KSBhbmQgKipzdGRvdXQqKig0KS5cbiAqXG4gKiAgIGBgYGpzXG4gKiAgIGltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2VzcydcbiAqICAgaW1wb3J0IGNvbmNhdFN0cmVhbSBmcm9tICdjb25jYXQtc3RyZWFtJ1xuICogICBpbXBvcnQge3JlbWFya30gZnJvbSAncmVtYXJrJ1xuICpcbiAqICAgcHJvY2Vzcy5zdGRpbi5waXBlKFxuICogICAgIGNvbmNhdFN0cmVhbShmdW5jdGlvbiAoYnVmKSB7XG4gKiAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShTdHJpbmcocmVtYXJrKCkucHJvY2Vzc1N5bmMoYnVmKSkpXG4gKiAgICAgfSlcbiAqICAgKVxuICogICBgYGBcbiAqXG4gKiBAcmV0dXJuc1xuICogICBOZXcgKnVuZnJvemVuKiBwcm9jZXNzb3IgKGBwcm9jZXNzb3JgKS5cbiAqXG4gKiAgIFRoaXMgcHJvY2Vzc29yIGlzIGNvbmZpZ3VyZWQgdG8gd29yayB0aGUgc2FtZSBhcyBpdHMgYW5jZXN0b3IuXG4gKiAgIFdoZW4gdGhlIGRlc2NlbmRhbnQgcHJvY2Vzc29yIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGZ1dHVyZSBpdCBkb2VzIG5vdFxuICogICBhZmZlY3QgdGhlIGFuY2VzdHJhbCBwcm9jZXNzb3IuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmlmaWVkID0gbmV3IFByb2Nlc3NvcigpLmZyZWV6ZSgpXG5cbi8qKlxuICogQXNzZXJ0IGEgcGFyc2VyIGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgUGFyc2VyfVxuICovXG5mdW5jdGlvbiBhc3NlcnRQYXJzZXIobmFtZSwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBgJyArIG5hbWUgKyAnYCB3aXRob3V0IGBwYXJzZXJgJylcbiAgfVxufVxuXG4vKipcbiAqIEFzc2VydCBhIGNvbXBpbGVyIGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgQ29tcGlsZXJ9XG4gKi9cbmZ1bmN0aW9uIGFzc2VydENvbXBpbGVyKG5hbWUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYCcgKyBuYW1lICsgJ2Agd2l0aG91dCBgY29tcGlsZXJgJylcbiAgfVxufVxuXG4vKipcbiAqIEFzc2VydCB0aGUgcHJvY2Vzc29yIGlzIG5vdCBmcm96ZW4uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7dW5rbm93bn0gZnJvemVuXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBmcm96ZW4gaXMgZmFsc2V9XG4gKi9cbmZ1bmN0aW9uIGFzc2VydFVuZnJvemVuKG5hbWUsIGZyb3plbikge1xuICBpZiAoZnJvemVuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBjYWxsIGAnICtcbiAgICAgICAgbmFtZSArXG4gICAgICAgICdgIG9uIGEgZnJvemVuIHByb2Nlc3Nvci5cXG5DcmVhdGUgYSBuZXcgcHJvY2Vzc29yIGZpcnN0LCBieSBjYWxsaW5nIGl0OiB1c2UgYHByb2Nlc3NvcigpYCBpbnN0ZWFkIG9mIGBwcm9jZXNzb3JgLidcbiAgICApXG4gIH1cbn1cblxuLyoqXG4gKiBBc3NlcnQgYG5vZGVgIGlzIGEgdW5pc3Qgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IG5vZGVcbiAqIEByZXR1cm5zIHthc3NlcnRzIG5vZGUgaXMgTm9kZX1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9kZShub2RlKSB7XG4gIC8vIGBpc1BsYWluT2JqYCB1bmZvcnR1bmF0ZWx5IHVzZXMgYGFueWAgaW5zdGVhZCBvZiBgdW5rbm93bmAuXG4gIC8vIHR5cGUtY292ZXJhZ2U6aWdub3JlLW5leHQtbGluZVxuICBpZiAoIWlzUGxhaW5PYmoobm9kZSkgfHwgdHlwZW9mIG5vZGUudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBub2RlLCBnb3QgYCcgKyBub2RlICsgJ2AnKVxuICAgIC8vIEZpbmUuXG4gIH1cbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCBgY29tcGxldGVgIGlzIGB0cnVlYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGFzeW5jTmFtZVxuICogQHBhcmFtIHt1bmtub3dufSBjb21wbGV0ZVxuICogQHJldHVybnMge2Fzc2VydHMgY29tcGxldGUgaXMgdHJ1ZX1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0RG9uZShuYW1lLCBhc3luY05hbWUsIGNvbXBsZXRlKSB7XG4gIGlmICghY29tcGxldGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnYCcgKyBuYW1lICsgJ2AgZmluaXNoZWQgYXN5bmMuIFVzZSBgJyArIGFzeW5jTmFtZSArICdgIGluc3RlYWQnXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbdmFsdWVdXG4gKiBAcmV0dXJucyB7VkZpbGV9XG4gKi9cbmZ1bmN0aW9uIHZmaWxlKHZhbHVlKSB7XG4gIHJldHVybiBsb29rc0xpa2VBVkZpbGUodmFsdWUpID8gdmFsdWUgOiBuZXcgVkZpbGUodmFsdWUpXG59XG5cbi8qKlxuICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbdmFsdWVdXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgVkZpbGV9XG4gKi9cbmZ1bmN0aW9uIGxvb2tzTGlrZUFWRmlsZSh2YWx1ZSkge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICB2YWx1ZSAmJlxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ21lc3NhZ2UnIGluIHZhbHVlICYmXG4gICAgICAnbWVzc2FnZXMnIGluIHZhbHVlXG4gIClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IFt2YWx1ZV1cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBWYWx1ZX1cbiAqL1xuZnVuY3Rpb24gbG9va3NMaWtlQVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IGlzVWludDhBcnJheSh2YWx1ZSlcbn1cblxuLyoqXG4gKiBBc3NlcnQgYHZhbHVlYCBpcyBhbiBgVWludDhBcnJheWAuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogICB0aGluZy5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBVaW50OEFycmF5fVxuICogICBXaGV0aGVyIGB2YWx1ZWAgaXMgYW4gYFVpbnQ4QXJyYXlgLlxuICovXG5mdW5jdGlvbiBpc1VpbnQ4QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgdmFsdWUgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICdieXRlTGVuZ3RoJyBpbiB2YWx1ZSAmJlxuICAgICAgJ2J5dGVPZmZzZXQnIGluIHZhbHVlXG4gIClcbn1cbiIsICIvLyBOb3RlOiB0eXBlcyBleHBvc2VkIGZyb20gYGluZGV4LmQudHNgLlxuZXhwb3J0IHt1bmlmaWVkfSBmcm9tICcuL2xpYi9pbmRleC5qcydcbiIsICIvKipcbiAqIENvdW50IGhvdyBvZnRlbiBhIGNoYXJhY3RlciAob3Igc3Vic3RyaW5nKSBpcyB1c2VkIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBWYWx1ZSB0byBzZWFyY2ggaW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyXG4gKiAgIENoYXJhY3RlciAob3Igc3Vic3RyaW5nKSB0byBsb29rIGZvci5cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqICAgTnVtYmVyIG9mIHRpbWVzIGBjaGFyYWN0ZXJgIG9jY3VycmVkIGluIGB2YWx1ZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjY291bnQodmFsdWUsIGNoYXJhY3Rlcikge1xuICBjb25zdCBzb3VyY2UgPSBTdHJpbmcodmFsdWUpXG5cbiAgaWYgKHR5cGVvZiBjaGFyYWN0ZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY2hhcmFjdGVyJylcbiAgfVxuXG4gIGxldCBjb3VudCA9IDBcbiAgbGV0IGluZGV4ID0gc291cmNlLmluZGV4T2YoY2hhcmFjdGVyKVxuXG4gIHdoaWxlIChpbmRleCAhPT0gLTEpIHtcbiAgICBjb3VudCsrXG4gICAgaW5kZXggPSBzb3VyY2UuaW5kZXhPZihjaGFyYWN0ZXIsIGluZGV4ICsgY2hhcmFjdGVyLmxlbmd0aClcbiAgfVxuXG4gIHJldHVybiBjb3VudFxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7Q29kZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgY29kZSByZXByZXNlbnRzIGFuIEFTQ0lJIGFscGhhIChgYWAgdGhyb3VnaCBgemAsXG4gKiBjYXNlIGluc2Vuc2l0aXZlKS5cbiAqXG4gKiBBbiAqKkFTQ0lJIGFscGhhKiogaXMgYW4gQVNDSUkgdXBwZXIgYWxwaGEgb3IgQVNDSUkgbG93ZXIgYWxwaGEuXG4gKlxuICogQW4gKipBU0NJSSB1cHBlciBhbHBoYSoqIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgVSswMDQxIChgQWApXG4gKiB0byBVKzAwNUEgKGBaYCkuXG4gKlxuICogQW4gKipBU0NJSSBsb3dlciBhbHBoYSoqIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgVSswMDYxIChgYWApXG4gKiB0byBVKzAwN0EgKGB6YCkuXG4gKlxuICogQHBhcmFtIGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIGl0IG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBhc2NpaUFscGhhID0gcmVnZXhDaGVjaygvW0EtWmEtel0vKTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgY29kZSByZXByZXNlbnRzIGFuIEFTQ0lJIGFscGhhbnVtZXJpYyAoYGFgXG4gKiB0aHJvdWdoIGB6YCwgY2FzZSBpbnNlbnNpdGl2ZSwgb3IgYDBgIHRocm91Z2ggYDlgKS5cbiAqXG4gKiBBbiAqKkFTQ0lJIGFscGhhbnVtZXJpYyoqIGlzIGFuIEFTQ0lJIGRpZ2l0IChzZWUgYGFzY2lpRGlnaXRgKSBvciBBU0NJSSBhbHBoYVxuICogKHNlZSBgYXNjaWlBbHBoYWApLlxuICpcbiAqIEBwYXJhbSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgY29uc3QgYXNjaWlBbHBoYW51bWVyaWMgPSByZWdleENoZWNrKC9bXFxkQS1aYS16XS8pO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjb2RlIHJlcHJlc2VudHMgYW4gQVNDSUkgYXRleHQuXG4gKlxuICogYXRleHQgaXMgYW4gQVNDSUkgYWxwaGFudW1lcmljIChzZWUgYGFzY2lpQWxwaGFudW1lcmljYCksIG9yIGEgY2hhcmFjdGVyIGluXG4gKiB0aGUgaW5jbHVzaXZlIHJhbmdlcyBVKzAwMjMgTlVNQkVSIFNJR04gKGAjYCkgdG8gVSswMDI3IEFQT1NUUk9QSEUgKGAnYCksXG4gKiBVKzAwMkEgQVNURVJJU0sgKGAqYCksIFUrMDAyQiBQTFVTIFNJR04gKGArYCksIFUrMDAyRCBEQVNIIChgLWApLCBVKzAwMkZcbiAqIFNMQVNIIChgL2ApLCBVKzAwM0QgRVFVQUxTIFRPIChgPWApLCBVKzAwM0YgUVVFU1RJT04gTUFSSyAoYD9gKSwgVSswMDVFXG4gKiBDQVJFVCAoYF5gKSB0byBVKzAwNjAgR1JBVkUgQUNDRU5UIChgYCBgIGBgKSwgb3IgVSswMDdCIExFRlQgQ1VSTFkgQlJBQ0VcbiAqIChge2ApIHRvIFUrMDA3RSBUSUxERSAoYH5gKS5cbiAqXG4gKiBTZWU6XG4gKiAqKlxcW1JGQzUzMjJdKio6XG4gKiBbSW50ZXJuZXQgTWVzc2FnZSBGb3JtYXRdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MzIyKS5cbiAqIFAuIFJlc25pY2suXG4gKiBJRVRGLlxuICpcbiAqIEBwYXJhbSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgY29uc3QgYXNjaWlBdGV4dCA9IHJlZ2V4Q2hlY2soL1sjLScqK1xcLS05PT9BLVpeLX5dLyk7XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGNoYXJhY3RlciBjb2RlIGlzIGFuIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyLlxuICpcbiAqIEFuICoqQVNDSUkgY29udHJvbCoqIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgVSswMDAwIE5VTEwgKE5VTClcbiAqIHRvIFUrMDAxRiAoVVMpLCBvciBVKzAwN0YgKERFTCkuXG4gKlxuICogQHBhcmFtIHtDb2RlfSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNjaWlDb250cm9sKGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICAvLyBTcGVjaWFsIHdoaXRlc3BhY2UgY29kZXMgKHdoaWNoIGhhdmUgbmVnYXRpdmUgdmFsdWVzKSwgQzAgYW5kIENvbnRyb2xcbiAgICAvLyBjaGFyYWN0ZXIgREVMXG4gICAgY29kZSAhPT0gbnVsbCAmJiAoY29kZSA8IDMyIHx8IGNvZGUgPT09IDEyNylcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgY29kZSByZXByZXNlbnRzIGFuIEFTQ0lJIGRpZ2l0IChgMGAgdGhyb3VnaCBgOWApLlxuICpcbiAqIEFuICoqQVNDSUkgZGlnaXQqKiBpcyBhIGNoYXJhY3RlciBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFUrMDAzMCAoYDBgKSB0b1xuICogVSswMDM5IChgOWApLlxuICpcbiAqIEBwYXJhbSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgY29uc3QgYXNjaWlEaWdpdCA9IHJlZ2V4Q2hlY2soL1xcZC8pO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjb2RlIHJlcHJlc2VudHMgYW4gQVNDSUkgaGV4IGRpZ2l0IChgYWAgdGhyb3VnaFxuICogYGZgLCBjYXNlIGluc2Vuc2l0aXZlLCBvciBgMGAgdGhyb3VnaCBgOWApLlxuICpcbiAqIEFuICoqQVNDSUkgaGV4IGRpZ2l0KiogaXMgYW4gQVNDSUkgZGlnaXQgKHNlZSBgYXNjaWlEaWdpdGApLCBBU0NJSSB1cHBlciBoZXhcbiAqIGRpZ2l0LCBvciBhbiBBU0NJSSBsb3dlciBoZXggZGlnaXQuXG4gKlxuICogQW4gKipBU0NJSSB1cHBlciBoZXggZGlnaXQqKiBpcyBhIGNoYXJhY3RlciBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFUrMDA0MVxuICogKGBBYCkgdG8gVSswMDQ2IChgRmApLlxuICpcbiAqIEFuICoqQVNDSUkgbG93ZXIgaGV4IGRpZ2l0KiogaXMgYSBjaGFyYWN0ZXIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBVKzAwNjFcbiAqIChgYWApIHRvIFUrMDA2NiAoYGZgKS5cbiAqXG4gKiBAcGFyYW0gY29kZVxuICogICBDb2RlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzY2lpSGV4RGlnaXQgPSByZWdleENoZWNrKC9bXFxkQS1GYS1mXS8pO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjb2RlIHJlcHJlc2VudHMgQVNDSUkgcHVuY3R1YXRpb24uXG4gKlxuICogQW4gKipBU0NJSSBwdW5jdHVhdGlvbioqIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2VzIFUrMDAyMVxuICogRVhDTEFNQVRJT04gTUFSSyAoYCFgKSB0byBVKzAwMkYgU0xBU0ggKGAvYCksIFUrMDAzQSBDT0xPTiAoYDpgKSB0byBVKzAwNDAgQVRcbiAqIFNJR04gKGBAYCksIFUrMDA1QiBMRUZUIFNRVUFSRSBCUkFDS0VUIChgW2ApIHRvIFUrMDA2MCBHUkFWRSBBQ0NFTlRcbiAqIChgYCBgIGBgKSwgb3IgVSswMDdCIExFRlQgQ1VSTFkgQlJBQ0UgKGB7YCkgdG8gVSswMDdFIFRJTERFIChgfmApLlxuICpcbiAqIEBwYXJhbSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgY29uc3QgYXNjaWlQdW5jdHVhdGlvbiA9IHJlZ2V4Q2hlY2soL1shLS86LUBbLWB7LX5dLyk7XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGNoYXJhY3RlciBjb2RlIGlzIGEgbWFya2Rvd24gbGluZSBlbmRpbmcuXG4gKlxuICogQSAqKm1hcmtkb3duIGxpbmUgZW5kaW5nKiogaXMgdGhlIHZpcnR1YWwgY2hhcmFjdGVycyBNLTAwMDMgQ0FSUklBR0UgUkVUVVJOXG4gKiBMSU5FIEZFRUQgKENSTEYpLCBNLTAwMDQgTElORSBGRUVEIChMRikgYW5kIE0tMDAwNSBDQVJSSUFHRSBSRVRVUk4gKENSKS5cbiAqXG4gKiBJbiBtaWNyb21hcmssIHRoZSBhY3R1YWwgY2hhcmFjdGVyIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBhbmQgVSswMDBEIENBUlJJQUdFXG4gKiBSRVRVUk4gKENSKSBhcmUgcmVwbGFjZWQgYnkgdGhlc2UgdmlydHVhbCBjaGFyYWN0ZXJzIGRlcGVuZGluZyBvbiB3aGV0aGVyXG4gKiB0aGV5IG9jY3VycmVkIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7Q29kZX0gY29kZVxuICogICBDb2RlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSB7XG4gIHJldHVybiBjb2RlICE9PSBudWxsICYmIGNvZGUgPCAtMjtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgY2hhcmFjdGVyIGNvZGUgaXMgYSBtYXJrZG93biBsaW5lIGVuZGluZyAoc2VlXG4gKiBgbWFya2Rvd25MaW5lRW5kaW5nYCkgb3IgbWFya2Rvd24gc3BhY2UgKHNlZSBgbWFya2Rvd25TcGFjZWApLlxuICpcbiAqIEBwYXJhbSB7Q29kZX0gY29kZVxuICogICBDb2RlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkge1xuICByZXR1cm4gY29kZSAhPT0gbnVsbCAmJiAoY29kZSA8IDAgfHwgY29kZSA9PT0gMzIpO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBjaGFyYWN0ZXIgY29kZSBpcyBhIG1hcmtkb3duIHNwYWNlLlxuICpcbiAqIEEgKiptYXJrZG93biBzcGFjZSoqIGlzIHRoZSBjb25jcmV0ZSBjaGFyYWN0ZXIgVSswMDIwIFNQQUNFIChTUCkgYW5kIHRoZVxuICogdmlydHVhbCBjaGFyYWN0ZXJzIE0tMDAwMSBWSVJUVUFMIFNQQUNFIChWUykgYW5kIE0tMDAwMiBIT1JJWk9OVEFMIFRBQiAoSFQpLlxuICpcbiAqIEluIG1pY3JvbWFyaywgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgVSswMDA5IENIQVJBQ1RFUiBUQUJVTEFUSU9OIChIVCkgaXNcbiAqIHJlcGxhY2VkIGJ5IG9uZSBNLTAwMDIgSE9SSVpPTlRBTCBUQUIgKEhUKSBhbmQgYmV0d2VlbiAwIGFuZCAzIE0tMDAwMSBWSVJUVUFMXG4gKiBTUEFDRSAoVlMpIGNoYXJhY3RlcnMsIGRlcGVuZGluZyBvbiB0aGUgY29sdW1uIGF0IHdoaWNoIHRoZSB0YWIgb2NjdXJyZWQuXG4gKlxuICogQHBhcmFtIHtDb2RlfSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya2Rvd25TcGFjZShjb2RlKSB7XG4gIHJldHVybiBjb2RlID09PSAtMiB8fCBjb2RlID09PSAtMSB8fCBjb2RlID09PSAzMjtcbn1cblxuLy8gU2l6ZSBub3RlOiByZW1vdmluZyBBU0NJSSBmcm9tIHRoZSByZWdleCBhbmQgdXNpbmcgYGFzY2lpUHVuY3R1YXRpb25gIGhlcmVcbi8vIEluIGZhY3QgYWRkcyB0byB0aGUgYnVuZGxlIHNpemUuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjb2RlIHJlcHJlc2VudHMgVW5pY29kZSBwdW5jdHVhdGlvbi5cbiAqXG4gKiBBICoqVW5pY29kZSBwdW5jdHVhdGlvbioqIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBVbmljb2RlIGBQY2AgKFB1bmN0dWF0aW9uLFxuICogQ29ubmVjdG9yKSwgYFBkYCAoUHVuY3R1YXRpb24sIERhc2gpLCBgUGVgIChQdW5jdHVhdGlvbiwgQ2xvc2UpLCBgUGZgXG4gKiAoUHVuY3R1YXRpb24sIEZpbmFsIHF1b3RlKSwgYFBpYCAoUHVuY3R1YXRpb24sIEluaXRpYWwgcXVvdGUpLCBgUG9gXG4gKiAoUHVuY3R1YXRpb24sIE90aGVyKSwgb3IgYFBzYCAoUHVuY3R1YXRpb24sIE9wZW4pIGNhdGVnb3JpZXMsIG9yIGFuIEFTQ0lJXG4gKiBwdW5jdHVhdGlvbiAoc2VlIGBhc2NpaVB1bmN0dWF0aW9uYCkuXG4gKlxuICogU2VlOlxuICogKipcXFtVTklDT0RFXSoqOlxuICogW1RoZSBVbmljb2RlIFN0YW5kYXJkXShodHRwczovL3d3dy51bmljb2RlLm9yZy92ZXJzaW9ucy8pLlxuICogVW5pY29kZSBDb25zb3J0aXVtLlxuICpcbiAqIEBwYXJhbSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJuc1xuICogICBXaGV0aGVyIGl0IG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmljb2RlUHVuY3R1YXRpb24gPSByZWdleENoZWNrKC9cXHB7UH18XFxwe1N9L3UpO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjb2RlIHJlcHJlc2VudHMgVW5pY29kZSB3aGl0ZXNwYWNlLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgaGFuZGxlIG1pY3JvbWFyayBzcGVjaWZpYyBtYXJrZG93biB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuXG4gKiBTZWUgYG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2VgIHRvIGNoZWNrIHRoYXQuXG4gKlxuICogQSAqKlVuaWNvZGUgd2hpdGVzcGFjZSoqIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBVbmljb2RlIGBac2AgKFNlcGFyYXRvcixcbiAqIFNwYWNlKSBjYXRlZ29yeSwgb3IgVSswMDA5IENIQVJBQ1RFUiBUQUJVTEFUSU9OIChIVCksIFUrMDAwQSBMSU5FIEZFRUQgKExGKSxcbiAqIFUrMDAwQyAoRkYpLCBvciBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgKCoqXFxbVU5JQ09ERV0qKikuXG4gKlxuICogU2VlOlxuICogKipcXFtVTklDT0RFXSoqOlxuICogW1RoZSBVbmljb2RlIFN0YW5kYXJkXShodHRwczovL3d3dy51bmljb2RlLm9yZy92ZXJzaW9ucy8pLlxuICogVW5pY29kZSBDb25zb3J0aXVtLlxuICpcbiAqIEBwYXJhbSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJuc1xuICogICBXaGV0aGVyIGl0IG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmljb2RlV2hpdGVzcGFjZSA9IHJlZ2V4Q2hlY2soL1xccy8pO1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvZGUgY2hlY2sgZnJvbSBhIHJlZ2V4LlxuICpcbiAqIEBwYXJhbSB7UmVnRXhwfSByZWdleFxuICogICBFeHByZXNzaW9uLlxuICogQHJldHVybnMgeyhjb2RlOiBDb2RlKSA9PiBib29sZWFufVxuICogICBDaGVjay5cbiAqL1xuZnVuY3Rpb24gcmVnZXhDaGVjayhyZWdleCkge1xuICByZXR1cm4gY2hlY2s7XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgYSBjb2RlIG1hdGNoZXMgdGhlIGJvdW5kIHJlZ2V4LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvZGV9IGNvZGVcbiAgICogICBDaGFyYWN0ZXIgY29kZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqICAgV2hldGhlciB0aGUgY2hhcmFjdGVyIGNvZGUgbWF0Y2hlcyB0aGUgYm91bmQgcmVnZXguXG4gICAqL1xuICBmdW5jdGlvbiBjaGVjayhjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGUgIT09IG51bGwgJiYgY29kZSA+IC0xICYmIHJlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSk7XG4gIH1cbn0iLCAiLyoqXG4gKiBAaW1wb3J0IHtOb2RlLCBQYXJlbnR9IGZyb20gJ3VuaXN0J1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIEZuXG4gKiBAdGVtcGxhdGUgRmFsbGJhY2tcbiAqIEB0eXBlZGVmIHtGbiBleHRlbmRzICh2YWx1ZTogYW55KSA9PiB2YWx1ZSBpcyBpbmZlciBUaGluZyA/IFRoaW5nIDogRmFsbGJhY2t9IFByZWRpY2F0ZVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIENoZWNrXG4gKiAgIENoZWNrIHRoYXQgYW4gYXJiaXRyYXJ5IHZhbHVlIGlzIGEgbm9kZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc1xuICogICBUaGUgZ2l2ZW4gY29udGV4dC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gW25vZGVdXG4gKiAgIEFueXRoaW5nICh0eXBpY2FsbHkgYSBub2RlKS5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2luZGV4XVxuICogICBUaGUgbm9kZVx1MjAxOXMgcG9zaXRpb24gaW4gaXRzIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3BhcmVudF1cbiAqICAgVGhlIG5vZGVcdTIwMTlzIHBhcmVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoaXMgaXMgYSBub2RlIGFuZCBwYXNzZXMgYSB0ZXN0LlxuICpcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IE5vZGV9IFByb3BzXG4gKiAgIE9iamVjdCB0byBjaGVjayBmb3IgZXF1aXZhbGVuY2UuXG4gKlxuICogICBOb3RlOiBgTm9kZWAgaXMgaW5jbHVkZWQgYXMgaXQgaXMgY29tbW9uIGJ1dCBpcyBub3QgaW5kZXhhYmxlLlxuICpcbiAqIEB0eXBlZGVmIHtBcnJheTxQcm9wcyB8IFRlc3RGdW5jdGlvbiB8IHN0cmluZz4gfCBSZWFkb25seUFycmF5PFByb3BzIHwgVGVzdEZ1bmN0aW9uIHwgc3RyaW5nPiB8IFByb3BzIHwgVGVzdEZ1bmN0aW9uIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gVGVzdFxuICogICBDaGVjayBmb3IgYW4gYXJiaXRyYXJ5IG5vZGUuXG4gKlxuICogQGNhbGxiYWNrIFRlc3RGdW5jdGlvblxuICogICBDaGVjayBpZiBhIG5vZGUgcGFzc2VzIGEgdGVzdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc1xuICogICBUaGUgZ2l2ZW4gY29udGV4dC5cbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogICBBIG5vZGUuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gW2luZGV4XVxuICogICBUaGUgbm9kZVx1MjAxOXMgcG9zaXRpb24gaW4gaXRzIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50IHwgdW5kZWZpbmVkfSBbcGFyZW50XVxuICogICBUaGUgbm9kZVx1MjAxOXMgcGFyZW50LlxuICogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWQgfCB2b2lkfVxuICogICBXaGV0aGVyIHRoaXMgbm9kZSBwYXNzZXMgdGhlIHRlc3QuXG4gKlxuICogICBOb3RlOiBgdm9pZGAgaXMgaW5jbHVkZWQgdW50aWwgVFMgc2VlcyBubyByZXR1cm4gYXMgYHVuZGVmaW5lZGAuXG4gKi9cblxuLyoqXG4gKiBDaGVjayBpZiBgbm9kZWAgaXMgYSBgTm9kZWAgYW5kIHdoZXRoZXIgaXQgcGFzc2VzIHRoZSBnaXZlbiB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gbm9kZVxuICogICBUaGluZyB0byBjaGVjaywgdHlwaWNhbGx5IGBOb2RlYC5cbiAqIEBwYXJhbSB7VGVzdH0gdGVzdFxuICogICBBIGNoZWNrIGZvciBhIHNwZWNpZmljIG5vZGUuXG4gKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIFRoZSBub2RlXHUyMDE5cyBwb3NpdGlvbiBpbiBpdHMgcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgVGhlIG5vZGVcdTIwMTlzIHBhcmVudC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY29udGV4dFxuICogICBDb250ZXh0IG9iamVjdCAoYHRoaXNgKSB0byBwYXNzIHRvIGB0ZXN0YCBmdW5jdGlvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBgbm9kZWAgaXMgYSBub2RlIGFuZCBwYXNzZXMgYSB0ZXN0LlxuICovXG5leHBvcnQgY29uc3QgaXMgPVxuICAvLyBOb3RlOiBvdmVybG9hZHMgaW4gSlNEb2MgY2FuXHUyMDE5dCB5ZXQgdXNlIGRpZmZlcmVudCBgQHRlbXBsYXRlYHMuXG4gIC8qKlxuICAgKiBAdHlwZSB7KFxuICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxzdHJpbmc+Pihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIHt0eXBlOiBDb25kaXRpb25bbnVtYmVyXX0pICZcbiAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIEFycmF5PHN0cmluZz4+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbltudW1iZXJdfSkgJlxuICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgc3RyaW5nPihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIHt0eXBlOiBDb25kaXRpb259KSAmXG4gICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBQcm9wcz4obm9kZTogdW5rbm93biwgdGVzdDogQ29uZGl0aW9uLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBDb25kaXRpb24pICZcbiAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFRlc3RGdW5jdGlvbj4obm9kZTogdW5rbm93biwgdGVzdDogQ29uZGl0aW9uLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBQcmVkaWNhdGU8Q29uZGl0aW9uLCBOb2RlPikgJlxuICAgKiAgICgobm9kZT86IG51bGwgfCB1bmRlZmluZWQpID0+IGZhbHNlKSAmXG4gICAqICAgKChub2RlOiB1bmtub3duLCB0ZXN0PzogbnVsbCB8IHVuZGVmaW5lZCwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlKSAmXG4gICAqICAgKChub2RlOiB1bmtub3duLCB0ZXN0PzogVGVzdCwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gYm9vbGVhbilcbiAgICogKX1cbiAgICovXG4gIChcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3Vua25vd259IFtub2RlXVxuICAgICAqIEBwYXJhbSB7VGVzdH0gW3Rlc3RdXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbaW5kZXhdXG4gICAgICogQHBhcmFtIHtQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkfSBbcGFyZW50XVxuICAgICAqIEBwYXJhbSB7dW5rbm93bn0gW2NvbnRleHRdXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbiAgICBmdW5jdGlvbiAobm9kZSwgdGVzdCwgaW5kZXgsIHBhcmVudCwgY29udGV4dCkge1xuICAgICAgY29uc3QgY2hlY2sgPSBjb252ZXJ0KHRlc3QpXG5cbiAgICAgIGlmIChcbiAgICAgICAgaW5kZXggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBpbmRleCAhPT0gbnVsbCAmJlxuICAgICAgICAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgIGluZGV4IDwgMCB8fFxuICAgICAgICAgIGluZGV4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwb3NpdGl2ZSBmaW5pdGUgaW5kZXgnKVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHBhcmVudCAhPT0gbnVsbCAmJlxuICAgICAgICAoIWlzKHBhcmVudCkgfHwgIXBhcmVudC5jaGlsZHJlbilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCBub2RlJylcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAocGFyZW50ID09PSB1bmRlZmluZWQgfHwgcGFyZW50ID09PSBudWxsKSAhPT1cbiAgICAgICAgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgaW5kZXggPT09IG51bGwpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBib3RoIHBhcmVudCBhbmQgaW5kZXgnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbG9va3NMaWtlQU5vZGUobm9kZSlcbiAgICAgICAgPyBjaGVjay5jYWxsKGNvbnRleHQsIG5vZGUsIGluZGV4LCBwYXJlbnQpXG4gICAgICAgIDogZmFsc2VcbiAgICB9XG4gIClcblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBhc3NlcnRpb24gZnJvbSBhIHRlc3QuXG4gKlxuICogVXNlZnVsIGlmIHlvdVx1MjAxOXJlIGdvaW5nIHRvIHRlc3QgbWFueSBub2RlcywgZm9yIGV4YW1wbGUgd2hlbiBjcmVhdGluZyBhXG4gKiB1dGlsaXR5IHdoZXJlIHNvbWV0aGluZyBlbHNlIHBhc3NlcyBhIGNvbXBhdGlibGUgdGVzdC5cbiAqXG4gKiBUaGUgY3JlYXRlZCBmdW5jdGlvbiBpcyBhIGJpdCBmYXN0ZXIgYmVjYXVzZSBpdCBleHBlY3RzIHZhbGlkIGlucHV0IG9ubHk6XG4gKiBhIGBub2RlYCwgYGluZGV4YCwgYW5kIGBwYXJlbnRgLlxuICpcbiAqIEBwYXJhbSB7VGVzdH0gdGVzdFxuICogICAqICAgd2hlbiBudWxsaXNoLCBjaGVja3MgaWYgYG5vZGVgIGlzIGEgYE5vZGVgLlxuICogICAqICAgd2hlbiBgc3RyaW5nYCwgd29ya3MgbGlrZSBwYXNzaW5nIGAobm9kZSkgPT4gbm9kZS50eXBlID09PSB0ZXN0YC5cbiAqICAgKiAgIHdoZW4gYGZ1bmN0aW9uYCBjaGVja3MgaWYgZnVuY3Rpb24gcGFzc2VkIHRoZSBub2RlIGlzIHRydWUuXG4gKiAgICogICB3aGVuIGBvYmplY3RgLCBjaGVja3MgdGhhdCBhbGwga2V5cyBpbiB0ZXN0IGFyZSBpbiBub2RlLCBhbmQgdGhhdCB0aGV5IGhhdmUgKHN0cmljdGx5KSBlcXVhbCB2YWx1ZXMuXG4gKiAgICogICB3aGVuIGBhcnJheWAsIGNoZWNrcyBpZiBhbnkgb25lIG9mIHRoZSBzdWJ0ZXN0cyBwYXNzLlxuICogQHJldHVybnMge0NoZWNrfVxuICogICBBbiBhc3NlcnRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0ID1cbiAgLy8gTm90ZTogb3ZlcmxvYWRzIGluIEpTRG9jIGNhblx1MjAxOXQgeWV0IHVzZSBkaWZmZXJlbnQgYEB0ZW1wbGF0ZWBzLlxuICAvKipcbiAgICogQHR5cGUgeyhcbiAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIHN0cmluZz4odGVzdDogQ29uZGl0aW9uKSA9PiAobm9kZTogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbn0pICZcbiAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFByb3BzPih0ZXN0OiBDb25kaXRpb24pID0+IChub2RlOiB1bmtub3duLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBDb25kaXRpb24pICZcbiAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFRlc3RGdW5jdGlvbj4odGVzdDogQ29uZGl0aW9uKSA9PiAobm9kZTogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYgUHJlZGljYXRlPENvbmRpdGlvbiwgTm9kZT4pICZcbiAgICogICAoKHRlc3Q/OiBudWxsIHwgdW5kZWZpbmVkKSA9PiAobm9kZT86IHVua25vd24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSkgJlxuICAgKiAgICgodGVzdD86IFRlc3QpID0+IENoZWNrKVxuICAgKiApfVxuICAgKi9cbiAgKFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VGVzdH0gW3Rlc3RdXG4gICAgICogQHJldHVybnMge0NoZWNrfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uICh0ZXN0KSB7XG4gICAgICBpZiAodGVzdCA9PT0gbnVsbCB8fCB0ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG9rXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGVzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gY2FzdEZhY3RvcnkodGVzdClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0ZXN0KVxuICAgICAgICAgID8gYW55RmFjdG9yeSh0ZXN0KVxuICAgICAgICAgIDogLy8gQ2FzdCBiZWNhdXNlIGBSZWFkb25seUFycmF5YCBnb2VzIGludG8gdGhlIGFib3ZlIGJ1dCBgaXNBcnJheWBcbiAgICAgICAgICAgIC8vIG5hcnJvd3MgdG8gYEFycmF5YC5cbiAgICAgICAgICAgIHByb3BlcnRpZXNGYWN0b3J5KC8qKiBAdHlwZSB7UHJvcHN9ICovICh0ZXN0KSlcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdHlwZUZhY3RvcnkodGVzdClcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBmdW5jdGlvbiwgc3RyaW5nLCBvciBvYmplY3QgYXMgdGVzdCcpXG4gICAgfVxuICApXG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxQcm9wcyB8IFRlc3RGdW5jdGlvbiB8IHN0cmluZz59IHRlc3RzXG4gKiBAcmV0dXJucyB7Q2hlY2t9XG4gKi9cbmZ1bmN0aW9uIGFueUZhY3RvcnkodGVzdHMpIHtcbiAgLyoqIEB0eXBlIHtBcnJheTxDaGVjaz59ICovXG4gIGNvbnN0IGNoZWNrcyA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCB0ZXN0cy5sZW5ndGgpIHtcbiAgICBjaGVja3NbaW5kZXhdID0gY29udmVydCh0ZXN0c1tpbmRleF0pXG4gIH1cblxuICByZXR1cm4gY2FzdEZhY3RvcnkoYW55KVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7dW5rbm93bn1cbiAgICogQHR5cGUge1Rlc3RGdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGFueSguLi5wYXJhbWV0ZXJzKSB7XG4gICAgbGV0IGluZGV4ID0gLTFcblxuICAgIHdoaWxlICgrK2luZGV4IDwgY2hlY2tzLmxlbmd0aCkge1xuICAgICAgaWYgKGNoZWNrc1tpbmRleF0uYXBwbHkodGhpcywgcGFyYW1ldGVycykpIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBUdXJuIGFuIG9iamVjdCBpbnRvIGEgdGVzdCBmb3IgYSBub2RlIHdpdGggYSBjZXJ0YWluIGZpZWxkcy5cbiAqXG4gKiBAcGFyYW0ge1Byb3BzfSBjaGVja1xuICogQHJldHVybnMge0NoZWNrfVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0aWVzRmFjdG9yeShjaGVjaykge1xuICBjb25zdCBjaGVja0FzUmVjb3JkID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKGNoZWNrKVxuXG4gIHJldHVybiBjYXN0RmFjdG9yeShhbGwpXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGFsbChub2RlKSB7XG4gICAgY29uc3Qgbm9kZUFzUmVjb3JkID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKFxuICAgICAgLyoqIEB0eXBlIHt1bmtub3dufSAqLyAobm9kZSlcbiAgICApXG5cbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQga2V5XG5cbiAgICBmb3IgKGtleSBpbiBjaGVjaykge1xuICAgICAgaWYgKG5vZGVBc1JlY29yZFtrZXldICE9PSBjaGVja0FzUmVjb3JkW2tleV0pIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuLyoqXG4gKiBUdXJuIGEgc3RyaW5nIGludG8gYSB0ZXN0IGZvciBhIG5vZGUgd2l0aCBhIGNlcnRhaW4gdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hlY2tcbiAqIEByZXR1cm5zIHtDaGVja31cbiAqL1xuZnVuY3Rpb24gdHlwZUZhY3RvcnkoY2hlY2spIHtcbiAgcmV0dXJuIGNhc3RGYWN0b3J5KHR5cGUpXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKi9cbiAgZnVuY3Rpb24gdHlwZShub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgbm9kZS50eXBlID09PSBjaGVja1xuICB9XG59XG5cbi8qKlxuICogVHVybiBhIGN1c3RvbSB0ZXN0IGludG8gYSB0ZXN0IGZvciBhIG5vZGUgdGhhdCBwYXNzZXMgdGhhdCB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7VGVzdEZ1bmN0aW9ufSB0ZXN0RnVuY3Rpb25cbiAqIEByZXR1cm5zIHtDaGVja31cbiAqL1xuZnVuY3Rpb24gY2FzdEZhY3RvcnkodGVzdEZ1bmN0aW9uKSB7XG4gIHJldHVybiBjaGVja1xuXG4gIC8qKlxuICAgKiBAdGhpcyB7dW5rbm93bn1cbiAgICogQHR5cGUge0NoZWNrfVxuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2sodmFsdWUsIGluZGV4LCBwYXJlbnQpIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIGxvb2tzTGlrZUFOb2RlKHZhbHVlKSAmJlxuICAgICAgICB0ZXN0RnVuY3Rpb24uY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHR5cGVvZiBpbmRleCA9PT0gJ251bWJlcicgPyBpbmRleCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwYXJlbnQgfHwgdW5kZWZpbmVkXG4gICAgICAgIClcbiAgICApXG4gIH1cbn1cblxuZnVuY3Rpb24gb2soKSB7XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogQHJldHVybnMge3ZhbHVlIGlzIE5vZGV9XG4gKi9cbmZ1bmN0aW9uIGxvb2tzTGlrZUFOb2RlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiB2YWx1ZVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5DaGVja30gQ2hlY2tcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbGliL2luZGV4LmpzJykuVGVzdH0gVGVzdFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5UZXN0RnVuY3Rpb259IFRlc3RGdW5jdGlvblxuICovXG5cbmV4cG9ydCB7aXMsIGNvbnZlcnR9IGZyb20gJy4vbGliL2luZGV4LmpzJ1xuIiwgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvcihkKSB7XG4gIHJldHVybiBkXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtOb2RlIGFzIFVuaXN0Tm9kZSwgUGFyZW50IGFzIFVuaXN0UGFyZW50fSBmcm9tICd1bmlzdCdcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtFeGNsdWRlPGltcG9ydCgndW5pc3QtdXRpbC1pcycpLlRlc3QsIHVuZGVmaW5lZD4gfCB1bmRlZmluZWR9IFRlc3RcbiAqICAgVGVzdCBmcm9tIGB1bmlzdC11dGlsLWlzYC5cbiAqXG4gKiAgIE5vdGU6IHdlIGhhdmUgcmVtb3ZlIGFuZCBhZGQgYHVuZGVmaW5lZGAsIGJlY2F1c2Ugb3RoZXJ3aXNlIHdoZW4gZ2VuZXJhdGluZ1xuICogICBhdXRvbWF0aWMgYC5kLnRzYCBmaWxlcywgVFMgdHJpZXMgdG8gZmxhdHRlbiBwYXRocyBmcm9tIGEgbG9jYWwgcGVyc3BlY3RpdmUsXG4gKiAgIHdoaWNoIGRvZXNuXHUyMDE5dCB3b3JrIHdoZW4gcHVibGlzaGluZyBvbiBucG0uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBGbiBleHRlbmRzICh2YWx1ZTogYW55KSA9PiB2YWx1ZSBpcyBpbmZlciBUaGluZ1xuICogICA/IFRoaW5nXG4gKiAgIDogRmFsbGJhY2tcbiAqICl9IFByZWRpY2F0ZVxuICogICBHZXQgdGhlIHZhbHVlIG9mIGEgdHlwZSBndWFyZCBgRm5gLlxuICogQHRlbXBsYXRlIEZuXG4gKiAgIFZhbHVlOyB0eXBpY2FsbHkgZnVuY3Rpb24gdGhhdCBpcyBhIHR5cGUgZ3VhcmQgKHN1Y2ggYXMgYCh4KTogeCBpcyBZYCkuXG4gKiBAdGVtcGxhdGUgRmFsbGJhY2tcbiAqICAgVmFsdWUgdG8geWllbGQgaWYgYEZuYCBpcyBub3QgYSB0eXBlIGd1YXJkLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhcbiAqICAgQ2hlY2sgZXh0ZW5kcyBudWxsIHwgdW5kZWZpbmVkIC8vIE5vIHRlc3QuXG4gKiAgID8gVmFsdWVcbiAqICAgOiBWYWx1ZSBleHRlbmRzIHt0eXBlOiBDaGVja30gLy8gU3RyaW5nICh0eXBlKSB0ZXN0LlxuICogICA/IFZhbHVlXG4gKiAgIDogVmFsdWUgZXh0ZW5kcyBDaGVjayAvLyBQYXJ0aWFsIHRlc3QuXG4gKiAgID8gVmFsdWVcbiAqICAgOiBDaGVjayBleHRlbmRzIEZ1bmN0aW9uIC8vIEZ1bmN0aW9uIHRlc3QuXG4gKiAgID8gUHJlZGljYXRlPENoZWNrLCBWYWx1ZT4gZXh0ZW5kcyBWYWx1ZVxuICogICAgID8gUHJlZGljYXRlPENoZWNrLCBWYWx1ZT5cbiAqICAgICA6IG5ldmVyXG4gKiAgIDogbmV2ZXIgLy8gU29tZSBvdGhlciB0ZXN0P1xuICogKX0gTWF0Y2hlc09uZVxuICogICBDaGVjayB3aGV0aGVyIGEgbm9kZSBtYXRjaGVzIGEgcHJpbWl0aXZlIGNoZWNrIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAqIEB0ZW1wbGF0ZSBWYWx1ZVxuICogICBWYWx1ZTsgdHlwaWNhbGx5IHVuaXN0IGBOb2RlYC5cbiAqIEB0ZW1wbGF0ZSBDaGVja1xuICogICBWYWx1ZTsgdHlwaWNhbGx5IGB1bmlzdC11dGlsLWlzYC1jb21wYXRpYmxlIHRlc3QsIGJ1dCBub3QgYXJyYXlzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhcbiAqICAgQ2hlY2sgZXh0ZW5kcyBSZWFkb25seUFycmF5PGluZmVyIFQ+XG4gKiAgID8gTWF0Y2hlc09uZTxWYWx1ZSwgVD5cbiAqICAgOiBDaGVjayBleHRlbmRzIEFycmF5PGluZmVyIFQ+XG4gKiAgID8gTWF0Y2hlc09uZTxWYWx1ZSwgVD5cbiAqICAgOiBNYXRjaGVzT25lPFZhbHVlLCBDaGVjaz5cbiAqICl9IE1hdGNoZXNcbiAqICAgQ2hlY2sgd2hldGhlciBhIG5vZGUgbWF0Y2hlcyBhIGNoZWNrIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAqIEB0ZW1wbGF0ZSBWYWx1ZVxuICogICBWYWx1ZTsgdHlwaWNhbGx5IHVuaXN0IGBOb2RlYC5cbiAqIEB0ZW1wbGF0ZSBDaGVja1xuICogICBWYWx1ZTsgdHlwaWNhbGx5IGB1bmlzdC11dGlsLWlzYC1jb21wYXRpYmxlIHRlc3QuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7MCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOSB8IDEwfSBVaW50XG4gKiAgIE51bWJlcjsgY2FwcGVkIHJlYXNvbmFibHkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7SSBleHRlbmRzIDAgPyAxIDogSSBleHRlbmRzIDEgPyAyIDogSSBleHRlbmRzIDIgPyAzIDogSSBleHRlbmRzIDMgPyA0IDogSSBleHRlbmRzIDQgPyA1IDogSSBleHRlbmRzIDUgPyA2IDogSSBleHRlbmRzIDYgPyA3IDogSSBleHRlbmRzIDcgPyA4IDogSSBleHRlbmRzIDggPyA5IDogMTB9IEluY3JlbWVudFxuICogICBJbmNyZW1lbnQgYSBudW1iZXIgaW4gdGhlIHR5cGUgc3lzdGVtLlxuICogQHRlbXBsYXRlIHtVaW50fSBbST0wXVxuICogICBJbmRleC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoXG4gKiAgIE5vZGUgZXh0ZW5kcyBVbmlzdFBhcmVudFxuICogICA/IE5vZGUgZXh0ZW5kcyB7Y2hpbGRyZW46IEFycmF5PGluZmVyIENoaWxkcmVuPn1cbiAqICAgICA/IENoaWxkIGV4dGVuZHMgQ2hpbGRyZW4gPyBOb2RlIDogbmV2ZXJcbiAqICAgICA6IG5ldmVyXG4gKiAgIDogbmV2ZXJcbiAqICl9IEludGVybmFsUGFyZW50XG4gKiAgIENvbGxlY3Qgbm9kZXMgdGhhdCBjYW4gYmUgcGFyZW50cyBvZiBgQ2hpbGRgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IE5vZGVcbiAqICAgQWxsIG5vZGUgdHlwZXMgaW4gYSB0cmVlLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IENoaWxkXG4gKiAgIE5vZGUgdG8gc2VhcmNoIGZvci5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtJbnRlcm5hbFBhcmVudDxJbmNsdXNpdmVEZXNjZW5kYW50PFRyZWU+LCBDaGlsZD59IFBhcmVudFxuICogICBDb2xsZWN0IG5vZGVzIGluIGBUcmVlYCB0aGF0IGNhbiBiZSBwYXJlbnRzIG9mIGBDaGlsZGAuXG4gKiBAdGVtcGxhdGUge1VuaXN0Tm9kZX0gVHJlZVxuICogICBBbGwgbm9kZSB0eXBlcyBpbiBhIHRyZWUuXG4gKiBAdGVtcGxhdGUge1VuaXN0Tm9kZX0gQ2hpbGRcbiAqICAgTm9kZSB0byBzZWFyY2ggZm9yLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhcbiAqICAgRGVwdGggZXh0ZW5kcyBNYXhcbiAqICAgPyBuZXZlclxuICogICA6XG4gKiAgICAgfCBJbnRlcm5hbFBhcmVudDxOb2RlLCBDaGlsZD5cbiAqICAgICB8IEludGVybmFsQW5jZXN0b3I8Tm9kZSwgSW50ZXJuYWxQYXJlbnQ8Tm9kZSwgQ2hpbGQ+LCBNYXgsIEluY3JlbWVudDxEZXB0aD4+XG4gKiApfSBJbnRlcm5hbEFuY2VzdG9yXG4gKiAgIENvbGxlY3Qgbm9kZXMgaW4gYFRyZWVgIHRoYXQgY2FuIGJlIGFuY2VzdG9ycyBvZiBgQ2hpbGRgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IE5vZGVcbiAqICAgQWxsIG5vZGUgdHlwZXMgaW4gYSB0cmVlLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IENoaWxkXG4gKiAgIE5vZGUgdG8gc2VhcmNoIGZvci5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW01heD0xMF1cbiAqICAgTWF4OyBzZWFyY2hlcyB1cCB0byB0aGlzIGRlcHRoLlxuICogQHRlbXBsYXRlIHtVaW50fSBbRGVwdGg9MF1cbiAqICAgQ3VycmVudCBkZXB0aC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtJbnRlcm5hbEFuY2VzdG9yPEluY2x1c2l2ZURlc2NlbmRhbnQ8VHJlZT4sIENoaWxkPn0gQW5jZXN0b3JcbiAqICAgQ29sbGVjdCBub2RlcyBpbiBgVHJlZWAgdGhhdCBjYW4gYmUgYW5jZXN0b3JzIG9mIGBDaGlsZGAuXG4gKiBAdGVtcGxhdGUge1VuaXN0Tm9kZX0gVHJlZVxuICogICBBbGwgbm9kZSB0eXBlcyBpbiBhIHRyZWUuXG4gKiBAdGVtcGxhdGUge1VuaXN0Tm9kZX0gQ2hpbGRcbiAqICAgTm9kZSB0byBzZWFyY2ggZm9yLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhcbiAqICAgVHJlZSBleHRlbmRzIFVuaXN0UGFyZW50XG4gKiAgICAgPyBEZXB0aCBleHRlbmRzIE1heFxuICogICAgICAgPyBUcmVlXG4gKiAgICAgICA6IFRyZWUgfCBJbmNsdXNpdmVEZXNjZW5kYW50PFRyZWVbJ2NoaWxkcmVuJ11bbnVtYmVyXSwgTWF4LCBJbmNyZW1lbnQ8RGVwdGg+PlxuICogICAgIDogVHJlZVxuICogKX0gSW5jbHVzaXZlRGVzY2VuZGFudFxuICogICBDb2xsZWN0IGFsbCAoaW5jbHVzaXZlKSBkZXNjZW5kYW50cyBvZiBgVHJlZWAuXG4gKlxuICogICA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGZhc3Rlc3Qgd2F5IHRvXG4gKiAgID4gcmVjdXJzZSB3aXRob3V0IGFjdHVhbGx5IHJ1bm5pbmcgaW50byBhbiBpbmZpbml0ZSBsb29wLCB3aGljaCB0aGVcbiAqICAgPiBwcmV2aW91cyB2ZXJzaW9uIGRpZC5cbiAqICAgPlxuICogICA+IFByYWN0aWNhbGx5LCBhIG1heCBvZiBgMmAgaXMgdHlwaWNhbGx5IGVub3VnaCBhc3N1bWluZyBhIGBSb290YCBpc1xuICogICA+IHBhc3NlZCwgYnV0IGl0IGRvZXNuXHUyMDE5dCBpbXByb3ZlIHBlcmZvcm1hbmNlLlxuICogICA+IEl0IGdldHMgaGlnaGVyIHdpdGggYExpc3QgPiBMaXN0SXRlbSA+IFRhYmxlID4gVGFibGVSb3cgPiBUYWJsZUNlbGxgLlxuICogICA+IFVzaW5nIHVwIHRvIGAxMGAgZG9lc25cdTIwMTl0IGh1cnQgb3IgaGVscCBlaXRoZXIuXG4gKiBAdGVtcGxhdGUge1VuaXN0Tm9kZX0gVHJlZVxuICogICBUcmVlIHR5cGUuXG4gKiBAdGVtcGxhdGUge1VpbnR9IFtNYXg9MTBdXG4gKiAgIE1heDsgc2VhcmNoZXMgdXAgdG8gdGhpcyBkZXB0aC5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW0RlcHRoPTBdXG4gKiAgIEN1cnJlbnQgZGVwdGguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7J3NraXAnIHwgYm9vbGVhbn0gQWN0aW9uXG4gKiAgIFVuaW9uIG9mIHRoZSBhY3Rpb24gdHlwZXMuXG4gKlxuICogQHR5cGVkZWYge251bWJlcn0gSW5kZXhcbiAqICAgTW92ZSB0byB0aGUgc2libGluZyBhdCBgaW5kZXhgIG5leHQgKGFmdGVyIG5vZGUgaXRzZWxmIGlzIGNvbXBsZXRlbHlcbiAqICAgdHJhdmVyc2VkKS5cbiAqXG4gKiAgIFVzZWZ1bCBpZiBtdXRhdGluZyB0aGUgdHJlZSwgc3VjaCBhcyByZW1vdmluZyB0aGUgbm9kZSB0aGUgdmlzaXRvciBpc1xuICogICBjdXJyZW50bHkgb24sIG9yIGFueSBvZiBpdHMgcHJldmlvdXMgc2libGluZ3MuXG4gKiAgIFJlc3VsdHMgbGVzcyB0aGFuIDAgb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBjaGlsZHJlbi5sZW5ndGhgIHN0b3BcbiAqICAgdHJhdmVyc2luZyB0aGUgcGFyZW50LlxuICpcbiAqIEB0eXBlZGVmIHtbKEFjdGlvbiB8IG51bGwgfCB1bmRlZmluZWQgfCB2b2lkKT8sIChJbmRleCB8IG51bGwgfCB1bmRlZmluZWQpP119IEFjdGlvblR1cGxlXG4gKiAgIExpc3Qgd2l0aCBvbmUgb3IgdHdvIHZhbHVlcywgdGhlIGZpcnN0IGFuIGFjdGlvbiwgdGhlIHNlY29uZCBhbiBpbmRleC5cbiAqXG4gKiBAdHlwZWRlZiB7QWN0aW9uIHwgQWN0aW9uVHVwbGUgfCBJbmRleCB8IG51bGwgfCB1bmRlZmluZWQgfCB2b2lkfSBWaXNpdG9yUmVzdWx0XG4gKiAgIEFueSB2YWx1ZSB0aGF0IGNhbiBiZSByZXR1cm5lZCBmcm9tIGEgdmlzaXRvci5cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBWaXNpdG9yXG4gKiAgIEhhbmRsZSBhIG5vZGUgKG1hdGNoaW5nIGB0ZXN0YCwgaWYgZ2l2ZW4pLlxuICpcbiAqICAgVmlzaXRvcnMgYXJlIGZyZWUgdG8gdHJhbnNmb3JtIGBub2RlYC5cbiAqICAgVGhleSBjYW4gYWxzbyB0cmFuc2Zvcm0gdGhlIHBhcmVudCBvZiBub2RlICh0aGUgbGFzdCBvZiBgYW5jZXN0b3JzYCkuXG4gKlxuICogICBSZXBsYWNpbmcgYG5vZGVgIGl0c2VsZiwgaWYgYFNLSVBgIGlzIG5vdCByZXR1cm5lZCwgc3RpbGwgY2F1c2VzIGl0c1xuICogICBkZXNjZW5kYW50cyB0byBiZSB3YWxrZWQgKHdoaWNoIGlzIGEgYnVnKS5cbiAqXG4gKiAgIFdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYCAob3IgbmV4dCBzaWJsaW5ncywgaW5cbiAqICAgY2FzZSBvZiByZXZlcnNlKSwgdGhlIGBWaXNpdG9yYCBzaG91bGQgcmV0dXJuIGEgbmV3IGBJbmRleGAgdG8gc3BlY2lmeSB0aGVcbiAqICAgc2libGluZyB0byB0cmF2ZXJzZSBhZnRlciBgbm9kZWAgaXMgdHJhdmVyc2VkLlxuICogICBBZGRpbmcgb3IgcmVtb3ZpbmcgbmV4dCBzaWJsaW5ncyBvZiBgbm9kZWAgKG9yIHByZXZpb3VzIHNpYmxpbmdzLCBpbiBjYXNlXG4gKiAgIG9mIHJldmVyc2UpIGlzIGhhbmRsZWQgYXMgZXhwZWN0ZWQgd2l0aG91dCBuZWVkaW5nIHRvIHJldHVybiBhIG5ldyBgSW5kZXhgLlxuICpcbiAqICAgUmVtb3ZpbmcgdGhlIGNoaWxkcmVuIHByb3BlcnR5IG9mIGFuIGFuY2VzdG9yIHN0aWxsIHJlc3VsdHMgaW4gdGhlbSBiZWluZ1xuICogICB0cmF2ZXJzZWQuXG4gKiBAcGFyYW0ge1Zpc2l0ZWR9IG5vZGVcbiAqICAgRm91bmQgbm9kZS5cbiAqIEBwYXJhbSB7QXJyYXk8VmlzaXRlZFBhcmVudHM+fSBhbmNlc3RvcnNcbiAqICAgQW5jZXN0b3JzIG9mIGBub2RlYC5cbiAqIEByZXR1cm5zIHtWaXNpdG9yUmVzdWx0fVxuICogICBXaGF0IHRvIGRvIG5leHQuXG4gKlxuICogICBBbiBgSW5kZXhgIGlzIHRyZWF0ZWQgYXMgYSB0dXBsZSBvZiBgW0NPTlRJTlVFLCBJbmRleF1gLlxuICogICBBbiBgQWN0aW9uYCBpcyB0cmVhdGVkIGFzIGEgdHVwbGUgb2YgYFtBY3Rpb25dYC5cbiAqXG4gKiAgIFBhc3NpbmcgYSB0dXBsZSBiYWNrIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGBBY3Rpb25gIGlzIGBTS0lQYC5cbiAqICAgV2hlbiB0aGUgYEFjdGlvbmAgaXMgYEVYSVRgLCB0aGF0IGFjdGlvbiBjYW4gYmUgcmV0dXJuZWQuXG4gKiAgIFdoZW4gdGhlIGBBY3Rpb25gIGlzIGBDT05USU5VRWAsIGBJbmRleGAgY2FuIGJlIHJldHVybmVkLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFtWaXNpdGVkPVVuaXN0Tm9kZV1cbiAqICAgVmlzaXRlZCBub2RlIHR5cGUuXG4gKiBAdGVtcGxhdGUge1VuaXN0UGFyZW50fSBbVmlzaXRlZFBhcmVudHM9VW5pc3RQYXJlbnRdXG4gKiAgIEFuY2VzdG9yIHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7VmlzaXRvcjxNYXRjaGVzPEluY2x1c2l2ZURlc2NlbmRhbnQ8VHJlZT4sIENoZWNrPiwgQW5jZXN0b3I8VHJlZSwgTWF0Y2hlczxJbmNsdXNpdmVEZXNjZW5kYW50PFRyZWU+LCBDaGVjaz4+Pn0gQnVpbGRWaXNpdG9yXG4gKiAgIEJ1aWxkIGEgdHlwZWQgYFZpc2l0b3JgIGZ1bmN0aW9uIGZyb20gYSB0cmVlIGFuZCBhIHRlc3QuXG4gKlxuICogICBJdCB3aWxsIGluZmVyIHdoaWNoIHZhbHVlcyBhcmUgcGFzc2VkIGFzIGBub2RlYCBhbmQgd2hpY2ggYXMgYHBhcmVudHNgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFtUcmVlPVVuaXN0Tm9kZV1cbiAqICAgVHJlZSB0eXBlLlxuICogQHRlbXBsYXRlIHtUZXN0fSBbQ2hlY2s9VGVzdF1cbiAqICAgVGVzdCB0eXBlLlxuICovXG5cbmltcG9ydCB7Y29udmVydH0gZnJvbSAndW5pc3QtdXRpbC1pcydcbmltcG9ydCB7Y29sb3J9IGZyb20gJ3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9kby1ub3QtdXNlLWNvbG9yJ1xuXG4vKiogQHR5cGUge1JlYWRvbmx5PEFjdGlvblR1cGxlPn0gKi9cbmNvbnN0IGVtcHR5ID0gW11cblxuLyoqXG4gKiBDb250aW51ZSB0cmF2ZXJzaW5nIGFzIG5vcm1hbC5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTlRJTlVFID0gdHJ1ZVxuXG4vKipcbiAqIFN0b3AgdHJhdmVyc2luZyBpbW1lZGlhdGVseS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVYSVQgPSBmYWxzZVxuXG4vKipcbiAqIERvIG5vdCB0cmF2ZXJzZSB0aGlzIG5vZGVcdTIwMTlzIGNoaWxkcmVuLlxuICovXG5leHBvcnQgY29uc3QgU0tJUCA9ICdza2lwJ1xuXG4vKipcbiAqIFZpc2l0IG5vZGVzLCB3aXRoIGFuY2VzdHJhbCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBUaGlzIGFsZ29yaXRobSBwZXJmb3JtcyAqZGVwdGgtZmlyc3QqICp0cmVlIHRyYXZlcnNhbCogaW4gKnByZW9yZGVyKlxuICogKCoqTkxSKiopIG9yIGlmIGByZXZlcnNlYCBpcyBnaXZlbiwgaW4gKnJldmVyc2UgcHJlb3JkZXIqICgqKk5STCoqKS5cbiAqXG4gKiBZb3UgY2FuIGNob29zZSBmb3Igd2hpY2ggbm9kZXMgYHZpc2l0b3JgIGlzIGNhbGxlZCBieSBwYXNzaW5nIGEgYHRlc3RgLlxuICogRm9yIGNvbXBsZXggdGVzdHMsIHlvdSBzaG91bGQgdGVzdCB5b3Vyc2VsZiBpbiBgdmlzaXRvcmAsIGFzIGl0IHdpbGwgYmVcbiAqIGZhc3RlciBhbmQgd2lsbCBoYXZlIGltcHJvdmVkIHR5cGUgaW5mb3JtYXRpb24uXG4gKlxuICogV2Fsa2luZyB0aGUgdHJlZSBpcyBhbiBpbnRlbnNpdmUgdGFzay5cbiAqIE1ha2UgdXNlIG9mIHRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZSB2aXNpdG9yIHdoZW4gcG9zc2libGUuXG4gKiBJbnN0ZWFkIG9mIHdhbGtpbmcgYSB0cmVlIG11bHRpcGxlIHRpbWVzLCB3YWxrIGl0IG9uY2UsIHVzZSBgdW5pc3QtdXRpbC1pc2BcbiAqIHRvIGNoZWNrIGlmIGEgbm9kZSBtYXRjaGVzLCBhbmQgdGhlbiBwZXJmb3JtIGRpZmZlcmVudCBvcGVyYXRpb25zLlxuICpcbiAqIFlvdSBjYW4gY2hhbmdlIHRoZSB0cmVlLlxuICogU2VlIGBWaXNpdG9yYCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBvdmVybG9hZFxuICogQHBhcmFtIHtUcmVlfSB0cmVlXG4gKiBAcGFyYW0ge0NoZWNrfSBjaGVja1xuICogQHBhcmFtIHtCdWlsZFZpc2l0b3I8VHJlZSwgQ2hlY2s+fSB2aXNpdG9yXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbcmV2ZXJzZV1cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKlxuICogQG92ZXJsb2FkXG4gKiBAcGFyYW0ge1RyZWV9IHRyZWVcbiAqIEBwYXJhbSB7QnVpbGRWaXNpdG9yPFRyZWU+fSB2aXNpdG9yXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbcmV2ZXJzZV1cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKlxuICogQHBhcmFtIHtVbmlzdE5vZGV9IHRyZWVcbiAqICAgVHJlZSB0byB0cmF2ZXJzZS5cbiAqIEBwYXJhbSB7VmlzaXRvciB8IFRlc3R9IHRlc3RcbiAqICAgYHVuaXN0LXV0aWwtaXNgLWNvbXBhdGlibGUgdGVzdFxuICogQHBhcmFtIHtWaXNpdG9yIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFt2aXNpdG9yXVxuICogICBIYW5kbGUgZWFjaCBub2RlLlxuICogQHBhcmFtIHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3JldmVyc2VdXG4gKiAgIFRyYXZlcnNlIGluIHJldmVyc2UgcHJlb3JkZXIgKE5STCkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBwcmVvcmRlciAoTkxSKS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiAgIE5vdGhpbmcuXG4gKlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFRyZWVcbiAqICAgTm9kZSB0eXBlLlxuICogQHRlbXBsYXRlIHtUZXN0fSBDaGVja1xuICogICBgdW5pc3QtdXRpbC1pc2AtY29tcGF0aWJsZSB0ZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlzaXRQYXJlbnRzKHRyZWUsIHRlc3QsIHZpc2l0b3IsIHJldmVyc2UpIHtcbiAgLyoqIEB0eXBlIHtUZXN0fSAqL1xuICBsZXQgY2hlY2tcblxuICBpZiAodHlwZW9mIHRlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZpc2l0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXZlcnNlID0gdmlzaXRvclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igbm8gdmlzaXRvciBnaXZlbiwgc28gYHZpc2l0b3JgIGlzIHRlc3QuXG4gICAgdmlzaXRvciA9IHRlc3RcbiAgfSBlbHNlIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHZpc2l0b3IgZ2l2ZW4sIHNvIGB0ZXN0YCBpc25cdTIwMTl0IGEgdmlzaXRvci5cbiAgICBjaGVjayA9IHRlc3RcbiAgfVxuXG4gIGNvbnN0IGlzID0gY29udmVydChjaGVjaylcbiAgY29uc3Qgc3RlcCA9IHJldmVyc2UgPyAtMSA6IDFcblxuICBmYWN0b3J5KHRyZWUsIHVuZGVmaW5lZCwgW10pKClcblxuICAvKipcbiAgICogQHBhcmFtIHtVbmlzdE5vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gICAqIEBwYXJhbSB7QXJyYXk8VW5pc3RQYXJlbnQ+fSBwYXJlbnRzXG4gICAqL1xuICBmdW5jdGlvbiBmYWN0b3J5KG5vZGUsIGluZGV4LCBwYXJlbnRzKSB7XG4gICAgY29uc3QgdmFsdWUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAoXG4gICAgICBub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyA/IG5vZGUgOiB7fVxuICAgIClcblxuICAgIGlmICh0eXBlb2YgdmFsdWUudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICAvLyBgaGFzdGBcbiAgICAgICAgdHlwZW9mIHZhbHVlLnRhZ05hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyB2YWx1ZS50YWdOYW1lXG4gICAgICAgICAgOiAvLyBgeGFzdGBcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS5uYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyB2YWx1ZS5uYW1lXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlzaXQsICduYW1lJywge1xuICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAnbm9kZSAoJyArIGNvbG9yKG5vZGUudHlwZSArIChuYW1lID8gJzwnICsgbmFtZSArICc+JyA6ICcnKSkgKyAnKSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHZpc2l0XG5cbiAgICBmdW5jdGlvbiB2aXNpdCgpIHtcbiAgICAgIC8qKiBAdHlwZSB7UmVhZG9ubHk8QWN0aW9uVHVwbGU+fSAqL1xuICAgICAgbGV0IHJlc3VsdCA9IGVtcHR5XG4gICAgICAvKiogQHR5cGUge1JlYWRvbmx5PEFjdGlvblR1cGxlPn0gKi9cbiAgICAgIGxldCBzdWJyZXN1bHRcbiAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgICAgbGV0IG9mZnNldFxuICAgICAgLyoqIEB0eXBlIHtBcnJheTxVbmlzdFBhcmVudD59ICovXG4gICAgICBsZXQgZ3JhbmRwYXJlbnRzXG5cbiAgICAgIGlmICghdGVzdCB8fCBpcyhub2RlLCBpbmRleCwgcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdIHx8IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYHZpc2l0b3JgIGlzIG5vdyBhIHZpc2l0b3IuXG4gICAgICAgIHJlc3VsdCA9IHRvUmVzdWx0KHZpc2l0b3Iobm9kZSwgcGFyZW50cykpXG5cbiAgICAgICAgaWYgKHJlc3VsdFswXSA9PT0gRVhJVCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoJ2NoaWxkcmVuJyBpbiBub2RlICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3Qgbm9kZUFzUGFyZW50ID0gLyoqIEB0eXBlIHtVbmlzdFBhcmVudH0gKi8gKG5vZGUpXG5cbiAgICAgICAgaWYgKG5vZGVBc1BhcmVudC5jaGlsZHJlbiAmJiByZXN1bHRbMF0gIT09IFNLSVApIHtcbiAgICAgICAgICBvZmZzZXQgPSAocmV2ZXJzZSA/IG5vZGVBc1BhcmVudC5jaGlsZHJlbi5sZW5ndGggOiAtMSkgKyBzdGVwXG4gICAgICAgICAgZ3JhbmRwYXJlbnRzID0gcGFyZW50cy5jb25jYXQobm9kZUFzUGFyZW50KVxuXG4gICAgICAgICAgd2hpbGUgKG9mZnNldCA+IC0xICYmIG9mZnNldCA8IG5vZGVBc1BhcmVudC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZUFzUGFyZW50LmNoaWxkcmVuW29mZnNldF1cblxuICAgICAgICAgICAgc3VicmVzdWx0ID0gZmFjdG9yeShjaGlsZCwgb2Zmc2V0LCBncmFuZHBhcmVudHMpKClcblxuICAgICAgICAgICAgaWYgKHN1YnJlc3VsdFswXSA9PT0gRVhJVCkge1xuICAgICAgICAgICAgICByZXR1cm4gc3VicmVzdWx0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9mZnNldCA9XG4gICAgICAgICAgICAgIHR5cGVvZiBzdWJyZXN1bHRbMV0gPT09ICdudW1iZXInID8gc3VicmVzdWx0WzFdIDogb2Zmc2V0ICsgc3RlcFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVHVybiBhIHJldHVybiB2YWx1ZSBpbnRvIGEgY2xlYW4gcmVzdWx0LlxuICpcbiAqIEBwYXJhbSB7VmlzaXRvclJlc3VsdH0gdmFsdWVcbiAqICAgVmFsaWQgcmV0dXJuIHZhbHVlcyBmcm9tIHZpc2l0b3JzLlxuICogQHJldHVybnMge1JlYWRvbmx5PEFjdGlvblR1cGxlPn1cbiAqICAgQ2xlYW4gcmVzdWx0LlxuICovXG5mdW5jdGlvbiB0b1Jlc3VsdCh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFtDT05USU5VRSwgdmFsdWVdXG4gIH1cblxuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCA/IGVtcHR5IDogW3ZhbHVlXVxufVxuIiwgIi8vIE5vdGU6IHR5cGVzIGV4cG9ydGVkIGZyb20gYGluZGV4LmQudHNgXG5leHBvcnQge0NPTlRJTlVFLCBFWElULCBTS0lQLCB2aXNpdFBhcmVudHN9IGZyb20gJy4vbGliL2luZGV4LmpzJ1xuIiwgIi8qKlxuICogQGltcG9ydCB7Tm9kZXMsIFBhcmVudHMsIFBocmFzaW5nQ29udGVudCwgUm9vdCwgVGV4dH0gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtCdWlsZFZpc2l0b3IsIFRlc3QsIFZpc2l0b3JSZXN1bHR9IGZyb20gJ3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cydcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFJlZ0V4cE1hdGNoT2JqZWN0XG4gKiAgIEluZm8gb24gdGhlIG1hdGNoLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGluZGV4XG4gKiAgIFRoZSBpbmRleCBvZiB0aGUgc2VhcmNoIGF0IHdoaWNoIHRoZSByZXN1bHQgd2FzIGZvdW5kLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlucHV0XG4gKiAgIEEgY29weSBvZiB0aGUgc2VhcmNoIHN0cmluZyBpbiB0aGUgdGV4dCBub2RlLlxuICogQHByb3BlcnR5IHtbLi4uQXJyYXk8UGFyZW50cz4sIFRleHRdfSBzdGFja1xuICogICBBbGwgYW5jZXN0b3JzIG9mIHRoZSB0ZXh0IG5vZGUsIHdoZXJlIHRoZSBsYXN0IG5vZGUgaXMgdGhlIHRleHQgaXRzZWxmLlxuICpcbiAqIEB0eXBlZGVmIHtSZWdFeHAgfCBzdHJpbmd9IEZpbmRcbiAqICAgUGF0dGVybiB0byBmaW5kLlxuICpcbiAqICAgU3RyaW5ncyBhcmUgZXNjYXBlZCBhbmQgdGhlbiB0dXJuZWQgaW50byBnbG9iYWwgZXhwcmVzc2lvbnMuXG4gKlxuICogQHR5cGVkZWYge0FycmF5PEZpbmRBbmRSZXBsYWNlVHVwbGU+fSBGaW5kQW5kUmVwbGFjZUxpc3RcbiAqICAgU2V2ZXJhbCBmaW5kIGFuZCByZXBsYWNlcywgaW4gYXJyYXkgZm9ybS5cbiAqXG4gKiBAdHlwZWRlZiB7W0ZpbmQsIFJlcGxhY2U/XX0gRmluZEFuZFJlcGxhY2VUdXBsZVxuICogICBGaW5kIGFuZCByZXBsYWNlIGluIHR1cGxlIGZvcm0uXG4gKlxuICogQHR5cGVkZWYge1JlcGxhY2VGdW5jdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFJlcGxhY2VcbiAqICAgVGhpbmcgdG8gcmVwbGFjZSB3aXRoLlxuICpcbiAqIEBjYWxsYmFjayBSZXBsYWNlRnVuY3Rpb25cbiAqICAgQ2FsbGJhY2sgY2FsbGVkIHdoZW4gYSBzZWFyY2ggbWF0Y2hlcy5cbiAqIEBwYXJhbSB7Li4uYW55fSBwYXJhbWV0ZXJzXG4gKiAgIFRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUgcmVzdWx0IG9mIGNvcnJlc3BvbmRpbmcgc2VhcmNoIGV4cHJlc3Npb246XG4gKlxuICogICAqIGB2YWx1ZWAgKGBzdHJpbmdgKSBcdTIwMTQgd2hvbGUgbWF0Y2hcbiAqICAgKiBgLi4uY2FwdHVyZWAgKGBBcnJheTxzdHJpbmc+YCkgXHUyMDE0IG1hdGNoZXMgZnJvbSByZWdleCBjYXB0dXJlIGdyb3Vwc1xuICogICAqIGBtYXRjaGAgKGBSZWdFeHBNYXRjaE9iamVjdGApIFx1MjAxNCBpbmZvIG9uIHRoZSBtYXRjaFxuICogQHJldHVybnMge0FycmF5PFBocmFzaW5nQ29udGVudD4gfCBQaHJhc2luZ0NvbnRlbnQgfCBzdHJpbmcgfCBmYWxzZSB8IG51bGwgfCB1bmRlZmluZWR9XG4gKiAgIFRoaW5nIHRvIHJlcGxhY2Ugd2l0aC5cbiAqXG4gKiAgICogd2hlbiBgbnVsbGAsIGB1bmRlZmluZWRgLCBgJydgLCByZW1vdmUgdGhlIG1hdGNoXG4gKiAgICogXHUyMDI2b3Igd2hlbiBgZmFsc2VgLCBkbyBub3QgcmVwbGFjZSBhdCBhbGxcbiAqICAgKiBcdTIwMjZvciB3aGVuIGBzdHJpbmdgLCByZXBsYWNlIHdpdGggYSB0ZXh0IG5vZGUgb2YgdGhhdCB2YWx1ZVxuICogICAqIFx1MjAyNm9yIHdoZW4gYE5vZGVgIG9yIGBBcnJheTxOb2RlPmAsIHJlcGxhY2Ugd2l0aCB0aG9zZSBub2Rlc1xuICpcbiAqIEB0eXBlZGVmIHtbUmVnRXhwLCBSZXBsYWNlRnVuY3Rpb25dfSBQYWlyXG4gKiAgIE5vcm1hbGl6ZWQgZmluZCBhbmQgcmVwbGFjZS5cbiAqXG4gKiBAdHlwZWRlZiB7QXJyYXk8UGFpcj59IFBhaXJzXG4gKiAgIEFsbCBmaW5kIGFuZCByZXBsYWNlZC5cbiAqXG4gKiBAdHlwZWRlZiBPcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge1Rlc3QgfCBudWxsIHwgdW5kZWZpbmVkfSBbaWdub3JlXVxuICogICBUZXN0IGZvciB3aGljaCBub2RlcyB0byBpZ25vcmUgKG9wdGlvbmFsKS5cbiAqL1xuXG5pbXBvcnQgZXNjYXBlIGZyb20gJ2VzY2FwZS1zdHJpbmctcmVnZXhwJ1xuaW1wb3J0IHt2aXNpdFBhcmVudHN9IGZyb20gJ3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cydcbmltcG9ydCB7Y29udmVydH0gZnJvbSAndW5pc3QtdXRpbC1pcydcblxuLyoqXG4gKiBGaW5kIHBhdHRlcm5zIGluIGEgdHJlZSBhbmQgcmVwbGFjZSB0aGVtLlxuICpcbiAqIFRoZSBhbGdvcml0aG0gc2VhcmNoZXMgdGhlIHRyZWUgaW4gKnByZW9yZGVyKiBmb3IgY29tcGxldGUgdmFsdWVzIGluIGBUZXh0YFxuICogbm9kZXMuXG4gKiBQYXJ0aWFsIG1hdGNoZXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHtOb2Rlc30gdHJlZVxuICogICBUcmVlIHRvIGNoYW5nZS5cbiAqIEBwYXJhbSB7RmluZEFuZFJlcGxhY2VMaXN0IHwgRmluZEFuZFJlcGxhY2VUdXBsZX0gbGlzdFxuICogICBQYXR0ZXJucyB0byBmaW5kLlxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24gKHdoZW4gYGZpbmRgIGlzIG5vdCBgRmluZGApLlxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqICAgTm90aGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBbmRSZXBsYWNlKHRyZWUsIGxpc3QsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9XG4gIGNvbnN0IGlnbm9yZWQgPSBjb252ZXJ0KHNldHRpbmdzLmlnbm9yZSB8fCBbXSlcbiAgY29uc3QgcGFpcnMgPSB0b1BhaXJzKGxpc3QpXG4gIGxldCBwYWlySW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK3BhaXJJbmRleCA8IHBhaXJzLmxlbmd0aCkge1xuICAgIHZpc2l0UGFyZW50cyh0cmVlLCAndGV4dCcsIHZpc2l0b3IpXG4gIH1cblxuICAvKiogQHR5cGUge0J1aWxkVmlzaXRvcjxSb290LCAndGV4dCc+fSAqL1xuICBmdW5jdGlvbiB2aXNpdG9yKG5vZGUsIHBhcmVudHMpIHtcbiAgICBsZXQgaW5kZXggPSAtMVxuICAgIC8qKiBAdHlwZSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgZ3JhbmRwYXJlbnRcblxuICAgIHdoaWxlICgrK2luZGV4IDwgcGFyZW50cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudHNbaW5kZXhdXG4gICAgICAvKiogQHR5cGUge0FycmF5PE5vZGVzPiB8IHVuZGVmaW5lZH0gKi9cbiAgICAgIGNvbnN0IHNpYmxpbmdzID0gZ3JhbmRwYXJlbnQgPyBncmFuZHBhcmVudC5jaGlsZHJlbiA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoXG4gICAgICAgIGlnbm9yZWQoXG4gICAgICAgICAgcGFyZW50LFxuICAgICAgICAgIHNpYmxpbmdzID8gc2libGluZ3MuaW5kZXhPZihwYXJlbnQpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGdyYW5kcGFyZW50XG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZ3JhbmRwYXJlbnQgPSBwYXJlbnRcbiAgICB9XG5cbiAgICBpZiAoZ3JhbmRwYXJlbnQpIHtcbiAgICAgIHJldHVybiBoYW5kbGVyKG5vZGUsIHBhcmVudHMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHRleHQgbm9kZSB3aGljaCBpcyBub3QgaW4gYW4gaWdub3JlZCBwYXJlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dH0gbm9kZVxuICAgKiAgIFRleHQgbm9kZS5cbiAgICogQHBhcmFtIHtBcnJheTxQYXJlbnRzPn0gcGFyZW50c1xuICAgKiAgIFBhcmVudHMuXG4gICAqIEByZXR1cm5zIHtWaXNpdG9yUmVzdWx0fVxuICAgKiAgIFJlc3VsdC5cbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZXIobm9kZSwgcGFyZW50cykge1xuICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudHNbcGFyZW50cy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGZpbmQgPSBwYWlyc1twYWlySW5kZXhdWzBdXG4gICAgY29uc3QgcmVwbGFjZSA9IHBhaXJzW3BhaXJJbmRleF1bMV1cbiAgICBsZXQgc3RhcnQgPSAwXG4gICAgLyoqIEB0eXBlIHtBcnJheTxOb2Rlcz59ICovXG4gICAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW5cbiAgICBjb25zdCBpbmRleCA9IHNpYmxpbmdzLmluZGV4T2Yobm9kZSlcbiAgICBsZXQgY2hhbmdlID0gZmFsc2VcbiAgICAvKiogQHR5cGUge0FycmF5PFBocmFzaW5nQ29udGVudD59ICovXG4gICAgbGV0IG5vZGVzID0gW11cblxuICAgIGZpbmQubGFzdEluZGV4ID0gMFxuXG4gICAgbGV0IG1hdGNoID0gZmluZC5leGVjKG5vZGUudmFsdWUpXG5cbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gbWF0Y2guaW5kZXhcbiAgICAgIC8qKiBAdHlwZSB7UmVnRXhwTWF0Y2hPYmplY3R9ICovXG4gICAgICBjb25zdCBtYXRjaE9iamVjdCA9IHtcbiAgICAgICAgaW5kZXg6IG1hdGNoLmluZGV4LFxuICAgICAgICBpbnB1dDogbWF0Y2guaW5wdXQsXG4gICAgICAgIHN0YWNrOiBbLi4ucGFyZW50cywgbm9kZV1cbiAgICAgIH1cbiAgICAgIGxldCB2YWx1ZSA9IHJlcGxhY2UoLi4ubWF0Y2gsIG1hdGNoT2JqZWN0KVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmxlbmd0aCA+IDAgPyB7dHlwZTogJ3RleHQnLCB2YWx1ZX0gOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgLy8gSXQgd2Fzblx1MjAxOXQgYSBtYXRjaCBhZnRlciBhbGwuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIEZhbHNlIGFjdHMgYXMgaWYgdGhlcmUgd2FzIG5vIG1hdGNoLlxuICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIHJlc2V0IGBsYXN0SW5kZXhgLCB3aGljaCBjdXJyZW50bHkgYmVpbmcgYXQgdGhlIGVuZCBvZlxuICAgICAgICAvLyB0aGUgY3VycmVudCBtYXRjaCwgdG8gdGhlIGJlZ2lubmluZy5cbiAgICAgICAgZmluZC5sYXN0SW5kZXggPSBwb3NpdGlvbiArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGFydCAhPT0gcG9zaXRpb24pIHtcbiAgICAgICAgICBub2Rlcy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIHZhbHVlOiBub2RlLnZhbHVlLnNsaWNlKHN0YXJ0LCBwb3NpdGlvbilcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgbm9kZXMucHVzaCguLi52YWx1ZSlcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICAgIG5vZGVzLnB1c2godmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICBzdGFydCA9IHBvc2l0aW9uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIGNoYW5nZSA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKCFmaW5kLmdsb2JhbCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBtYXRjaCA9IGZpbmQuZXhlYyhub2RlLnZhbHVlKVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgIGlmIChzdGFydCA8IG5vZGUudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIG5vZGVzLnB1c2goe3R5cGU6ICd0ZXh0JywgdmFsdWU6IG5vZGUudmFsdWUuc2xpY2Uoc3RhcnQpfSlcbiAgICAgIH1cblxuICAgICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSwgLi4ubm9kZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzID0gW25vZGVdXG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4ICsgbm9kZXMubGVuZ3RoXG4gIH1cbn1cblxuLyoqXG4gKiBUdXJuIGEgdHVwbGUgb3IgYSBsaXN0IG9mIHR1cGxlcyBpbnRvIHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7RmluZEFuZFJlcGxhY2VMaXN0IHwgRmluZEFuZFJlcGxhY2VUdXBsZX0gdHVwbGVPckxpc3RcbiAqICAgU2NoZW1hLlxuICogQHJldHVybnMge1BhaXJzfVxuICogICBDbGVhbiBwYWlycy5cbiAqL1xuZnVuY3Rpb24gdG9QYWlycyh0dXBsZU9yTGlzdCkge1xuICAvKiogQHR5cGUge1BhaXJzfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIGlmICghQXJyYXkuaXNBcnJheSh0dXBsZU9yTGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBmaW5kIGFuZCByZXBsYWNlIHR1cGxlIG9yIGxpc3Qgb2YgdHVwbGVzJylcbiAgfVxuXG4gIC8qKiBAdHlwZSB7RmluZEFuZFJlcGxhY2VMaXN0fSAqL1xuICAvLyBAdHMtZXhwZWN0LWVycm9yOiBjb3JyZWN0LlxuICBjb25zdCBsaXN0ID1cbiAgICAhdHVwbGVPckxpc3RbMF0gfHwgQXJyYXkuaXNBcnJheSh0dXBsZU9yTGlzdFswXSlcbiAgICAgID8gdHVwbGVPckxpc3RcbiAgICAgIDogW3R1cGxlT3JMaXN0XVxuXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCBsaXN0Lmxlbmd0aCkge1xuICAgIGNvbnN0IHR1cGxlID0gbGlzdFtpbmRleF1cbiAgICByZXN1bHQucHVzaChbdG9FeHByZXNzaW9uKHR1cGxlWzBdKSwgdG9GdW5jdGlvbih0dXBsZVsxXSldKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIFR1cm4gYSBmaW5kIGludG8gYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0ge0ZpbmR9IGZpbmRcbiAqICAgRmluZC5cbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAgIEV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIHRvRXhwcmVzc2lvbihmaW5kKSB7XG4gIHJldHVybiB0eXBlb2YgZmluZCA9PT0gJ3N0cmluZycgPyBuZXcgUmVnRXhwKGVzY2FwZShmaW5kKSwgJ2cnKSA6IGZpbmRcbn1cblxuLyoqXG4gKiBUdXJuIGEgcmVwbGFjZSBpbnRvIGEgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtSZXBsYWNlfSByZXBsYWNlXG4gKiAgIFJlcGxhY2UuXG4gKiBAcmV0dXJucyB7UmVwbGFjZUZ1bmN0aW9ufVxuICogICBGdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gdG9GdW5jdGlvbihyZXBsYWNlKSB7XG4gIHJldHVybiB0eXBlb2YgcmVwbGFjZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gcmVwbGFjZVxuICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVwbGFjZVxuICAgICAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5GaW5kQW5kUmVwbGFjZUxpc3R9IEZpbmRBbmRSZXBsYWNlTGlzdFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5GaW5kQW5kUmVwbGFjZVR1cGxlfSBGaW5kQW5kUmVwbGFjZVR1cGxlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2xpYi9pbmRleC5qcycpLkZpbmR9IEZpbmRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbGliL2luZGV4LmpzJykuT3B0aW9uc30gT3B0aW9uc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5SZWdFeHBNYXRjaE9iamVjdH0gUmVnRXhwTWF0Y2hPYmplY3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbGliL2luZGV4LmpzJykuUmVwbGFjZUZ1bmN0aW9ufSBSZXBsYWNlRnVuY3Rpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbGliL2luZGV4LmpzJykuUmVwbGFjZX0gUmVwbGFjZVxuICovXG5cbmV4cG9ydCB7ZmluZEFuZFJlcGxhY2V9IGZyb20gJy4vbGliL2luZGV4LmpzJ1xuIiwgIi8qKlxuICogQGltcG9ydCB7UmVnRXhwTWF0Y2hPYmplY3QsIFJlcGxhY2VGdW5jdGlvbn0gZnJvbSAnbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlJ1xuICogQGltcG9ydCB7Q29tcGlsZUNvbnRleHQsIEV4dGVuc2lvbiBhcyBGcm9tTWFya2Rvd25FeHRlbnNpb24sIEhhbmRsZSBhcyBGcm9tTWFya2Rvd25IYW5kbGUsIFRyYW5zZm9ybSBhcyBGcm9tTWFya2Rvd25UcmFuc2Zvcm19IGZyb20gJ21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bidcbiAqIEBpbXBvcnQge0NvbnN0cnVjdE5hbWUsIE9wdGlvbnMgYXMgVG9NYXJrZG93bkV4dGVuc2lvbn0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqIEBpbXBvcnQge0xpbmssIFBocmFzaW5nQ29udGVudH0gZnJvbSAnbWRhc3QnXG4gKi9cblxuaW1wb3J0IHtjY291bnR9IGZyb20gJ2Njb3VudCdcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICdkZXZsb3AnXG5pbXBvcnQge3VuaWNvZGVQdW5jdHVhdGlvbiwgdW5pY29kZVdoaXRlc3BhY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7ZmluZEFuZFJlcGxhY2V9IGZyb20gJ21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZSdcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3ROYW1lfSAqL1xuY29uc3QgaW5Db25zdHJ1Y3QgPSAncGhyYXNpbmcnXG4vKiogQHR5cGUge0FycmF5PENvbnN0cnVjdE5hbWU+fSAqL1xuY29uc3Qgbm90SW5Db25zdHJ1Y3QgPSBbJ2F1dG9saW5rJywgJ2xpbmsnLCAnaW1hZ2UnLCAnbGFiZWwnXVxuXG4vKipcbiAqIENyZWF0ZSBhbiBleHRlbnNpb24gZm9yIGBtZGFzdC11dGlsLWZyb20tbWFya2Rvd25gIHRvIGVuYWJsZSBHRk0gYXV0b2xpbmtcbiAqIGxpdGVyYWxzIGluIG1hcmtkb3duLlxuICpcbiAqIEByZXR1cm5zIHtGcm9tTWFya2Rvd25FeHRlbnNpb259XG4gKiAgIEV4dGVuc2lvbiBmb3IgYG1kYXN0LXV0aWwtdG8tbWFya2Rvd25gIHRvIGVuYWJsZSBHRk0gYXV0b2xpbmsgbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZm1BdXRvbGlua0xpdGVyYWxGcm9tTWFya2Rvd24oKSB7XG4gIHJldHVybiB7XG4gICAgdHJhbnNmb3JtczogW3RyYW5zZm9ybUdmbUF1dG9saW5rTGl0ZXJhbHNdLFxuICAgIGVudGVyOiB7XG4gICAgICBsaXRlcmFsQXV0b2xpbms6IGVudGVyTGl0ZXJhbEF1dG9saW5rLFxuICAgICAgbGl0ZXJhbEF1dG9saW5rRW1haWw6IGVudGVyTGl0ZXJhbEF1dG9saW5rVmFsdWUsXG4gICAgICBsaXRlcmFsQXV0b2xpbmtIdHRwOiBlbnRlckxpdGVyYWxBdXRvbGlua1ZhbHVlLFxuICAgICAgbGl0ZXJhbEF1dG9saW5rV3d3OiBlbnRlckxpdGVyYWxBdXRvbGlua1ZhbHVlXG4gICAgfSxcbiAgICBleGl0OiB7XG4gICAgICBsaXRlcmFsQXV0b2xpbms6IGV4aXRMaXRlcmFsQXV0b2xpbmssXG4gICAgICBsaXRlcmFsQXV0b2xpbmtFbWFpbDogZXhpdExpdGVyYWxBdXRvbGlua0VtYWlsLFxuICAgICAgbGl0ZXJhbEF1dG9saW5rSHR0cDogZXhpdExpdGVyYWxBdXRvbGlua0h0dHAsXG4gICAgICBsaXRlcmFsQXV0b2xpbmtXd3c6IGV4aXRMaXRlcmFsQXV0b2xpbmtXd3dcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC10by1tYXJrZG93bmAgdG8gZW5hYmxlIEdGTSBhdXRvbGlua1xuICogbGl0ZXJhbHMgaW4gbWFya2Rvd24uXG4gKlxuICogQHJldHVybnMge1RvTWFya2Rvd25FeHRlbnNpb259XG4gKiAgIEV4dGVuc2lvbiBmb3IgYG1kYXN0LXV0aWwtdG8tbWFya2Rvd25gIHRvIGVuYWJsZSBHRk0gYXV0b2xpbmsgbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZm1BdXRvbGlua0xpdGVyYWxUb01hcmtkb3duKCkge1xuICByZXR1cm4ge1xuICAgIHVuc2FmZTogW1xuICAgICAge1xuICAgICAgICBjaGFyYWN0ZXI6ICdAJyxcbiAgICAgICAgYmVmb3JlOiAnWytcXFxcLS5cXFxcd10nLFxuICAgICAgICBhZnRlcjogJ1tcXFxcLS5cXFxcd10nLFxuICAgICAgICBpbkNvbnN0cnVjdCxcbiAgICAgICAgbm90SW5Db25zdHJ1Y3RcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNoYXJhY3RlcjogJy4nLFxuICAgICAgICBiZWZvcmU6ICdbV3ddJyxcbiAgICAgICAgYWZ0ZXI6ICdbXFxcXC0uXFxcXHddJyxcbiAgICAgICAgaW5Db25zdHJ1Y3QsXG4gICAgICAgIG5vdEluQ29uc3RydWN0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjaGFyYWN0ZXI6ICc6JyxcbiAgICAgICAgYmVmb3JlOiAnW3BzXScsXG4gICAgICAgIGFmdGVyOiAnXFxcXC8nLFxuICAgICAgICBpbkNvbnN0cnVjdCxcbiAgICAgICAgbm90SW5Db25zdHJ1Y3RcbiAgICAgIH1cbiAgICBdXG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gKiBAdHlwZSB7RnJvbU1hcmtkb3duSGFuZGxlfVxuICovXG5mdW5jdGlvbiBlbnRlckxpdGVyYWxBdXRvbGluayh0b2tlbikge1xuICB0aGlzLmVudGVyKHt0eXBlOiAnbGluaycsIHRpdGxlOiBudWxsLCB1cmw6ICcnLCBjaGlsZHJlbjogW119LCB0b2tlbilcbn1cblxuLyoqXG4gKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gKiBAdHlwZSB7RnJvbU1hcmtkb3duSGFuZGxlfVxuICovXG5mdW5jdGlvbiBlbnRlckxpdGVyYWxBdXRvbGlua1ZhbHVlKHRva2VuKSB7XG4gIHRoaXMuY29uZmlnLmVudGVyLmF1dG9saW5rUHJvdG9jb2wuY2FsbCh0aGlzLCB0b2tlbilcbn1cblxuLyoqXG4gKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gKiBAdHlwZSB7RnJvbU1hcmtkb3duSGFuZGxlfVxuICovXG5mdW5jdGlvbiBleGl0TGl0ZXJhbEF1dG9saW5rSHR0cCh0b2tlbikge1xuICB0aGlzLmNvbmZpZy5leGl0LmF1dG9saW5rUHJvdG9jb2wuY2FsbCh0aGlzLCB0b2tlbilcbn1cblxuLyoqXG4gKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gKiBAdHlwZSB7RnJvbU1hcmtkb3duSGFuZGxlfVxuICovXG5mdW5jdGlvbiBleGl0TGl0ZXJhbEF1dG9saW5rV3d3KHRva2VuKSB7XG4gIHRoaXMuY29uZmlnLmV4aXQuZGF0YS5jYWxsKHRoaXMsIHRva2VuKVxuICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gIGFzc2VydChub2RlLnR5cGUgPT09ICdsaW5rJylcbiAgbm9kZS51cmwgPSAnaHR0cDovLycgKyB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKVxufVxuXG4vKipcbiAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAqIEB0eXBlIHtGcm9tTWFya2Rvd25IYW5kbGV9XG4gKi9cbmZ1bmN0aW9uIGV4aXRMaXRlcmFsQXV0b2xpbmtFbWFpbCh0b2tlbikge1xuICB0aGlzLmNvbmZpZy5leGl0LmF1dG9saW5rRW1haWwuY2FsbCh0aGlzLCB0b2tlbilcbn1cblxuLyoqXG4gKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gKiBAdHlwZSB7RnJvbU1hcmtkb3duSGFuZGxlfVxuICovXG5mdW5jdGlvbiBleGl0TGl0ZXJhbEF1dG9saW5rKHRva2VuKSB7XG4gIHRoaXMuZXhpdCh0b2tlbilcbn1cblxuLyoqIEB0eXBlIHtGcm9tTWFya2Rvd25UcmFuc2Zvcm19ICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1HZm1BdXRvbGlua0xpdGVyYWxzKHRyZWUpIHtcbiAgZmluZEFuZFJlcGxhY2UoXG4gICAgdHJlZSxcbiAgICBbXG4gICAgICBbLyhodHRwcz86XFwvXFwvfHd3dyg/PVxcLikpKFstLlxcd10rKShbXiBcXHRcXHJcXG5dKikvZ2ksIGZpbmRVcmxdLFxuICAgICAgWy8oPzw9XnxcXHN8XFxwe1B9fFxccHtTfSkoWy0uXFx3K10rKUAoWy1cXHddKyg/OlxcLlstXFx3XSspKykvZ3UsIGZpbmRFbWFpbF1cbiAgICBdLFxuICAgIHtpZ25vcmU6IFsnbGluaycsICdsaW5rUmVmZXJlbmNlJ119XG4gIClcbn1cblxuLyoqXG4gKiBAdHlwZSB7UmVwbGFjZUZ1bmN0aW9ufVxuICogQHBhcmFtIHtzdHJpbmd9IF9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpblxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hPYmplY3R9IG1hdGNoXG4gKiBAcmV0dXJucyB7QXJyYXk8UGhyYXNpbmdDb250ZW50PiB8IExpbmsgfCBmYWxzZX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbmZ1bmN0aW9uIGZpbmRVcmwoXywgcHJvdG9jb2wsIGRvbWFpbiwgcGF0aCwgbWF0Y2gpIHtcbiAgbGV0IHByZWZpeCA9ICcnXG5cbiAgLy8gTm90IGFuIGV4cGVjdGVkIHByZXZpb3VzIGNoYXJhY3Rlci5cbiAgaWYgKCFwcmV2aW91cyhtYXRjaCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRyZWF0IGB3d3dgIGFzIHBhcnQgb2YgdGhlIGRvbWFpbi5cbiAgaWYgKC9edy9pLnRlc3QocHJvdG9jb2wpKSB7XG4gICAgZG9tYWluID0gcHJvdG9jb2wgKyBkb21haW5cbiAgICBwcm90b2NvbCA9ICcnXG4gICAgcHJlZml4ID0gJ2h0dHA6Ly8nXG4gIH1cblxuICBpZiAoIWlzQ29ycmVjdERvbWFpbihkb21haW4pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IHNwbGl0VXJsKGRvbWFpbiArIHBhdGgpXG5cbiAgaWYgKCFwYXJ0c1swXSkgcmV0dXJuIGZhbHNlXG5cbiAgLyoqIEB0eXBlIHtMaW5rfSAqL1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHlwZTogJ2xpbmsnLFxuICAgIHRpdGxlOiBudWxsLFxuICAgIHVybDogcHJlZml4ICsgcHJvdG9jb2wgKyBwYXJ0c1swXSxcbiAgICBjaGlsZHJlbjogW3t0eXBlOiAndGV4dCcsIHZhbHVlOiBwcm90b2NvbCArIHBhcnRzWzBdfV1cbiAgfVxuXG4gIGlmIChwYXJ0c1sxXSkge1xuICAgIHJldHVybiBbcmVzdWx0LCB7dHlwZTogJ3RleHQnLCB2YWx1ZTogcGFydHNbMV19XVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEB0eXBlIHtSZXBsYWNlRnVuY3Rpb259XG4gKiBAcGFyYW0ge3N0cmluZ30gX1xuICogQHBhcmFtIHtzdHJpbmd9IGF0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxcbiAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hPYmplY3R9IG1hdGNoXG4gKiBAcmV0dXJucyB7TGluayB8IGZhbHNlfVxuICovXG5mdW5jdGlvbiBmaW5kRW1haWwoXywgYXRleHQsIGxhYmVsLCBtYXRjaCkge1xuICBpZiAoXG4gICAgLy8gTm90IGFuIGV4cGVjdGVkIHByZXZpb3VzIGNoYXJhY3Rlci5cbiAgICAhcHJldmlvdXMobWF0Y2gsIHRydWUpIHx8XG4gICAgLy8gTGFiZWwgZW5kcyBpbiBub3QgYWxsb3dlZCBjaGFyYWN0ZXIuXG4gICAgL1stXFxkX10kLy50ZXN0KGxhYmVsKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2xpbmsnLFxuICAgIHRpdGxlOiBudWxsLFxuICAgIHVybDogJ21haWx0bzonICsgYXRleHQgKyAnQCcgKyBsYWJlbCxcbiAgICBjaGlsZHJlbjogW3t0eXBlOiAndGV4dCcsIHZhbHVlOiBhdGV4dCArICdAJyArIGxhYmVsfV1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0NvcnJlY3REb21haW4oZG9tYWluKSB7XG4gIGNvbnN0IHBhcnRzID0gZG9tYWluLnNwbGl0KCcuJylcblxuICBpZiAoXG4gICAgcGFydHMubGVuZ3RoIDwgMiB8fFxuICAgIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSAmJlxuICAgICAgKC9fLy50ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKSB8fFxuICAgICAgICAhL1thLXpBLVpcXGRdLy50ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKSkpIHx8XG4gICAgKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdICYmXG4gICAgICAoL18vLnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMl0pIHx8XG4gICAgICAgICEvW2EtekEtWlxcZF0vLnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMl0pKSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm5zIHtbc3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWRdfVxuICovXG5mdW5jdGlvbiBzcGxpdFVybCh1cmwpIHtcbiAgY29uc3QgdHJhaWxFeGVjID0gL1shXCImJyksLjo7PD4/XFxdfV0rJC8uZXhlYyh1cmwpXG5cbiAgaWYgKCF0cmFpbEV4ZWMpIHtcbiAgICByZXR1cm4gW3VybCwgdW5kZWZpbmVkXVxuICB9XG5cbiAgdXJsID0gdXJsLnNsaWNlKDAsIHRyYWlsRXhlYy5pbmRleClcblxuICBsZXQgdHJhaWwgPSB0cmFpbEV4ZWNbMF1cbiAgbGV0IGNsb3NpbmdQYXJlbkluZGV4ID0gdHJhaWwuaW5kZXhPZignKScpXG4gIGNvbnN0IG9wZW5pbmdQYXJlbnMgPSBjY291bnQodXJsLCAnKCcpXG4gIGxldCBjbG9zaW5nUGFyZW5zID0gY2NvdW50KHVybCwgJyknKVxuXG4gIHdoaWxlIChjbG9zaW5nUGFyZW5JbmRleCAhPT0gLTEgJiYgb3BlbmluZ1BhcmVucyA+IGNsb3NpbmdQYXJlbnMpIHtcbiAgICB1cmwgKz0gdHJhaWwuc2xpY2UoMCwgY2xvc2luZ1BhcmVuSW5kZXggKyAxKVxuICAgIHRyYWlsID0gdHJhaWwuc2xpY2UoY2xvc2luZ1BhcmVuSW5kZXggKyAxKVxuICAgIGNsb3NpbmdQYXJlbkluZGV4ID0gdHJhaWwuaW5kZXhPZignKScpXG4gICAgY2xvc2luZ1BhcmVucysrXG4gIH1cblxuICByZXR1cm4gW3VybCwgdHJhaWxdXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHBNYXRjaE9iamVjdH0gbWF0Y2hcbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtlbWFpbD1mYWxzZV1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBwcmV2aW91cyhtYXRjaCwgZW1haWwpIHtcbiAgY29uc3QgY29kZSA9IG1hdGNoLmlucHV0LmNoYXJDb2RlQXQobWF0Y2guaW5kZXggLSAxKVxuXG4gIHJldHVybiAoXG4gICAgKG1hdGNoLmluZGV4ID09PSAwIHx8XG4gICAgICB1bmljb2RlV2hpdGVzcGFjZShjb2RlKSB8fFxuICAgICAgdW5pY29kZVB1bmN0dWF0aW9uKGNvZGUpKSAmJlxuICAgIC8vIElmIGl0XHUyMDE5cyBhbiBlbWFpbCwgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBzaG91bGQgbm90IGJlIGEgc2xhc2guXG4gICAgKCFlbWFpbCB8fCBjb2RlICE9PSA0NylcbiAgKVxufVxuIiwgImV4cG9ydCB7XG4gIGdmbUF1dG9saW5rTGl0ZXJhbEZyb21NYXJrZG93bixcbiAgZ2ZtQXV0b2xpbmtMaXRlcmFsVG9NYXJrZG93blxufSBmcm9tICcuL2xpYi9pbmRleC5qcydcbiIsICIvKipcbiAqIE5vcm1hbGl6ZSBhbiBpZGVudGlmaWVyIChhcyBmb3VuZCBpbiByZWZlcmVuY2VzLCBkZWZpbml0aW9ucykuXG4gKlxuICogQ29sbGFwc2VzIG1hcmtkb3duIHdoaXRlc3BhY2UsIHRyaW0sIGFuZCB0aGVuIGxvd2VyLSBhbmQgdXBwZXJjYXNlLlxuICpcbiAqIFNvbWUgY2hhcmFjdGVycyBhcmUgY29uc2lkZXJlZCBcdTIwMUN1cHBlcmNhc2VcdTIwMUQsIHN1Y2ggYXMgVSswM0Y0IChgXHUwM0Y0YCksIGJ1dCBpZiB0aGVpclxuICogbG93ZXJjYXNlIGNvdW50ZXJwYXJ0IChVKzAzQjggKGBcdTAzQjhgKSkgaXMgdXBwZXJjYXNlZCB3aWxsIHJlc3VsdCBpbiBhIGRpZmZlcmVudFxuICogdXBwZXJjYXNlIGNoYXJhY3RlciAoVSswMzk4IChgXHUwMzk4YCkpLlxuICogU28sIHRvIGdldCBhIGNhbm9uaWNhbCBmb3JtLCB3ZSBwZXJmb3JtIGJvdGggbG93ZXItIGFuZCB1cHBlcmNhc2UuXG4gKlxuICogVXNpbmcgdXBwZXJjYXNlIGxhc3QgbWFrZXMgc3VyZSBrZXlzIHdpbGwgbmV2ZXIgaW50ZXJhY3Qgd2l0aCBkZWZhdWx0XG4gKiBwcm90b3R5cGFsIHZhbHVlcyAoc3VjaCBhcyBgY29uc3RydWN0b3JgKTogbm90aGluZyBpbiB0aGUgcHJvdG90eXBlIG9mXG4gKiBgT2JqZWN0YCBpcyB1cHBlcmNhc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiAgIElkZW50aWZpZXIgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgTm9ybWFsaXplZCBpZGVudGlmaWVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSWRlbnRpZmllcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWVcbiAgLy8gQ29sbGFwc2UgbWFya2Rvd24gd2hpdGVzcGFjZS5cbiAgLnJlcGxhY2UoL1tcXHRcXG5cXHIgXSsvZywgXCIgXCIpXG4gIC8vIFRyaW0uXG4gIC5yZXBsYWNlKC9eIHwgJC9nLCAnJylcbiAgLy8gU29tZSBjaGFyYWN0ZXJzIGFyZSBjb25zaWRlcmVkIFx1MjAxQ3VwcGVyY2FzZVx1MjAxRCwgYnV0IGlmIHRoZWlyIGxvd2VyY2FzZVxuICAvLyBjb3VudGVycGFydCBpcyB1cHBlcmNhc2VkIHdpbGwgcmVzdWx0IGluIGEgZGlmZmVyZW50IHVwcGVyY2FzZVxuICAvLyBjaGFyYWN0ZXIuXG4gIC8vIEhlbmNlLCB0byBnZXQgdGhhdCBmb3JtLCB3ZSBwZXJmb3JtIGJvdGggbG93ZXItIGFuZCB1cHBlcmNhc2UuXG4gIC8vIFVwcGVyIGNhc2UgbWFrZXMgc3VyZSBrZXlzIHdpbGwgbm90IGludGVyYWN0IHdpdGggZGVmYXVsdCBwcm90b3R5cGFsXG4gIC8vIG1ldGhvZHM6IG5vIG1ldGhvZCBpcyB1cHBlcmNhc2UuXG4gIC50b0xvd2VyQ2FzZSgpLnRvVXBwZXJDYXNlKCk7XG59IiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIENvbXBpbGVDb250ZXh0LFxuICogICBFeHRlbnNpb24gYXMgRnJvbU1hcmtkb3duRXh0ZW5zaW9uLFxuICogICBIYW5kbGUgYXMgRnJvbU1hcmtkb3duSGFuZGxlXG4gKiB9IGZyb20gJ21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bidcbiAqIEBpbXBvcnQge1RvTWFya2Rvd25PcHRpb25zfSBmcm9tICdtZGFzdC11dGlsLWdmbS1mb290bm90ZSdcbiAqIEBpbXBvcnQge1xuICogICBIYW5kbGUgYXMgVG9NYXJrZG93bkhhbmRsZSxcbiAqICAgTWFwLFxuICogICBPcHRpb25zIGFzIFRvTWFya2Rvd25FeHRlbnNpb25cbiAqIH0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqIEBpbXBvcnQge0Zvb3Rub3RlRGVmaW5pdGlvbiwgRm9vdG5vdGVSZWZlcmVuY2V9IGZyb20gJ21kYXN0J1xuICovXG5cbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICdkZXZsb3AnXG5pbXBvcnQge25vcm1hbGl6ZUlkZW50aWZpZXJ9IGZyb20gJ21pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyJ1xuXG5mb290bm90ZVJlZmVyZW5jZS5wZWVrID0gZm9vdG5vdGVSZWZlcmVuY2VQZWVrXG5cbi8qKlxuICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICogQHR5cGUge0Zyb21NYXJrZG93bkhhbmRsZX1cbiAqL1xuZnVuY3Rpb24gZW50ZXJGb290bm90ZUNhbGxTdHJpbmcoKSB7XG4gIHRoaXMuYnVmZmVyKClcbn1cblxuLyoqXG4gKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gKiBAdHlwZSB7RnJvbU1hcmtkb3duSGFuZGxlfVxuICovXG5mdW5jdGlvbiBlbnRlckZvb3Rub3RlQ2FsbCh0b2tlbikge1xuICB0aGlzLmVudGVyKHt0eXBlOiAnZm9vdG5vdGVSZWZlcmVuY2UnLCBpZGVudGlmaWVyOiAnJywgbGFiZWw6ICcnfSwgdG9rZW4pXG59XG5cbi8qKlxuICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICogQHR5cGUge0Zyb21NYXJrZG93bkhhbmRsZX1cbiAqL1xuZnVuY3Rpb24gZW50ZXJGb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZygpIHtcbiAgdGhpcy5idWZmZXIoKVxufVxuXG4vKipcbiAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAqIEB0eXBlIHtGcm9tTWFya2Rvd25IYW5kbGV9XG4gKi9cbmZ1bmN0aW9uIGVudGVyRm9vdG5vdGVEZWZpbml0aW9uKHRva2VuKSB7XG4gIHRoaXMuZW50ZXIoXG4gICAge3R5cGU6ICdmb290bm90ZURlZmluaXRpb24nLCBpZGVudGlmaWVyOiAnJywgbGFiZWw6ICcnLCBjaGlsZHJlbjogW119LFxuICAgIHRva2VuXG4gIClcbn1cblxuLyoqXG4gKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gKiBAdHlwZSB7RnJvbU1hcmtkb3duSGFuZGxlfVxuICovXG5mdW5jdGlvbiBleGl0Rm9vdG5vdGVDYWxsU3RyaW5nKHRva2VuKSB7XG4gIGNvbnN0IGxhYmVsID0gdGhpcy5yZXN1bWUoKVxuICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gIGFzc2VydChub2RlLnR5cGUgPT09ICdmb290bm90ZVJlZmVyZW5jZScpXG4gIG5vZGUuaWRlbnRpZmllciA9IG5vcm1hbGl6ZUlkZW50aWZpZXIoXG4gICAgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbilcbiAgKS50b0xvd2VyQ2FzZSgpXG4gIG5vZGUubGFiZWwgPSBsYWJlbFxufVxuXG4vKipcbiAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAqIEB0eXBlIHtGcm9tTWFya2Rvd25IYW5kbGV9XG4gKi9cbmZ1bmN0aW9uIGV4aXRGb290bm90ZUNhbGwodG9rZW4pIHtcbiAgdGhpcy5leGl0KHRva2VuKVxufVxuXG4vKipcbiAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAqIEB0eXBlIHtGcm9tTWFya2Rvd25IYW5kbGV9XG4gKi9cbmZ1bmN0aW9uIGV4aXRGb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyh0b2tlbikge1xuICBjb25zdCBsYWJlbCA9IHRoaXMucmVzdW1lKClcbiAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICBhc3NlcnQobm9kZS50eXBlID09PSAnZm9vdG5vdGVEZWZpbml0aW9uJylcbiAgbm9kZS5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihcbiAgICB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKVxuICApLnRvTG93ZXJDYXNlKClcbiAgbm9kZS5sYWJlbCA9IGxhYmVsXG59XG5cbi8qKlxuICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICogQHR5cGUge0Zyb21NYXJrZG93bkhhbmRsZX1cbiAqL1xuZnVuY3Rpb24gZXhpdEZvb3Rub3RlRGVmaW5pdGlvbih0b2tlbikge1xuICB0aGlzLmV4aXQodG9rZW4pXG59XG5cbi8qKiBAdHlwZSB7VG9NYXJrZG93bkhhbmRsZX0gKi9cbmZ1bmN0aW9uIGZvb3Rub3RlUmVmZXJlbmNlUGVlaygpIHtcbiAgcmV0dXJuICdbJ1xufVxuXG4vKipcbiAqIEB0eXBlIHtUb01hcmtkb3duSGFuZGxlfVxuICogQHBhcmFtIHtGb290bm90ZVJlZmVyZW5jZX0gbm9kZVxuICovXG5mdW5jdGlvbiBmb290bm90ZVJlZmVyZW5jZShub2RlLCBfLCBzdGF0ZSwgaW5mbykge1xuICBjb25zdCB0cmFja2VyID0gc3RhdGUuY3JlYXRlVHJhY2tlcihpbmZvKVxuICBsZXQgdmFsdWUgPSB0cmFja2VyLm1vdmUoJ1teJylcbiAgY29uc3QgZXhpdCA9IHN0YXRlLmVudGVyKCdmb290bm90ZVJlZmVyZW5jZScpXG4gIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZS5lbnRlcigncmVmZXJlbmNlJylcbiAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKFxuICAgIHN0YXRlLnNhZmUoc3RhdGUuYXNzb2NpYXRpb25JZChub2RlKSwge2FmdGVyOiAnXScsIGJlZm9yZTogdmFsdWV9KVxuICApXG4gIHN1YmV4aXQoKVxuICBleGl0KClcbiAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKCddJylcbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGV4dGVuc2lvbiBmb3IgYG1kYXN0LXV0aWwtZnJvbS1tYXJrZG93bmAgdG8gZW5hYmxlIEdGTSBmb290bm90ZXNcbiAqIGluIG1hcmtkb3duLlxuICpcbiAqIEByZXR1cm5zIHtGcm9tTWFya2Rvd25FeHRlbnNpb259XG4gKiAgIEV4dGVuc2lvbiBmb3IgYG1kYXN0LXV0aWwtZnJvbS1tYXJrZG93bmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZm1Gb290bm90ZUZyb21NYXJrZG93bigpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnRlcjoge1xuICAgICAgZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nOiBlbnRlckZvb3Rub3RlQ2FsbFN0cmluZyxcbiAgICAgIGdmbUZvb3Rub3RlQ2FsbDogZW50ZXJGb290bm90ZUNhbGwsXG4gICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZzogZW50ZXJGb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyxcbiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbjogZW50ZXJGb290bm90ZURlZmluaXRpb25cbiAgICB9LFxuICAgIGV4aXQ6IHtcbiAgICAgIGdmbUZvb3Rub3RlQ2FsbFN0cmluZzogZXhpdEZvb3Rub3RlQ2FsbFN0cmluZyxcbiAgICAgIGdmbUZvb3Rub3RlQ2FsbDogZXhpdEZvb3Rub3RlQ2FsbCxcbiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nOiBleGl0Rm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcsXG4gICAgICBnZm1Gb290bm90ZURlZmluaXRpb246IGV4aXRGb290bm90ZURlZmluaXRpb25cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC10by1tYXJrZG93bmAgdG8gZW5hYmxlIEdGTSBmb290bm90ZXNcbiAqIGluIG1hcmtkb3duLlxuICpcbiAqIEBwYXJhbSB7VG9NYXJrZG93bk9wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICogQHJldHVybnMge1RvTWFya2Rvd25FeHRlbnNpb259XG4gKiAgIEV4dGVuc2lvbiBmb3IgYG1kYXN0LXV0aWwtdG8tbWFya2Rvd25gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2ZtRm9vdG5vdGVUb01hcmtkb3duKG9wdGlvbnMpIHtcbiAgLy8gVG8gZG86IG5leHQgbWFqb3I6IGNoYW5nZSBkZWZhdWx0LlxuICBsZXQgZmlyc3RMaW5lQmxhbmsgPSBmYWxzZVxuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZmlyc3RMaW5lQmxhbmspIHtcbiAgICBmaXJzdExpbmVCbGFuayA9IHRydWVcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaGFuZGxlcnM6IHtmb290bm90ZURlZmluaXRpb24sIGZvb3Rub3RlUmVmZXJlbmNlfSxcbiAgICAvLyBUaGlzIGlzIG9uIGJ5IGRlZmF1bHQgYWxyZWFkeS5cbiAgICB1bnNhZmU6IFt7Y2hhcmFjdGVyOiAnWycsIGluQ29uc3RydWN0OiBbJ2xhYmVsJywgJ3BocmFzaW5nJywgJ3JlZmVyZW5jZSddfV1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7VG9NYXJrZG93bkhhbmRsZX1cbiAgICogQHBhcmFtIHtGb290bm90ZURlZmluaXRpb259IG5vZGVcbiAgICovXG4gIGZ1bmN0aW9uIGZvb3Rub3RlRGVmaW5pdGlvbihub2RlLCBfLCBzdGF0ZSwgaW5mbykge1xuICAgIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pXG4gICAgbGV0IHZhbHVlID0gdHJhY2tlci5tb3ZlKCdbXicpXG4gICAgY29uc3QgZXhpdCA9IHN0YXRlLmVudGVyKCdmb290bm90ZURlZmluaXRpb24nKVxuICAgIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZS5lbnRlcignbGFiZWwnKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZShcbiAgICAgIHN0YXRlLnNhZmUoc3RhdGUuYXNzb2NpYXRpb25JZChub2RlKSwge2JlZm9yZTogdmFsdWUsIGFmdGVyOiAnXSd9KVxuICAgIClcbiAgICBzdWJleGl0KClcblxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZSgnXTonKVxuXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICB0cmFja2VyLnNoaWZ0KDQpXG5cbiAgICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZShcbiAgICAgICAgKGZpcnN0TGluZUJsYW5rID8gJ1xcbicgOiAnICcpICtcbiAgICAgICAgICBzdGF0ZS5pbmRlbnRMaW5lcyhcbiAgICAgICAgICAgIHN0YXRlLmNvbnRhaW5lckZsb3cobm9kZSwgdHJhY2tlci5jdXJyZW50KCkpLFxuICAgICAgICAgICAgZmlyc3RMaW5lQmxhbmsgPyBtYXBBbGwgOiBtYXBFeGNlcHRGaXJzdFxuICAgICAgICAgIClcbiAgICAgIClcbiAgICB9XG5cbiAgICBleGl0KClcblxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG5cbi8qKiBAdHlwZSB7TWFwfSAqL1xuZnVuY3Rpb24gbWFwRXhjZXB0Rmlyc3QobGluZSwgaW5kZXgsIGJsYW5rKSB7XG4gIHJldHVybiBpbmRleCA9PT0gMCA/IGxpbmUgOiBtYXBBbGwobGluZSwgaW5kZXgsIGJsYW5rKVxufVxuXG4vKiogQHR5cGUge01hcH0gKi9cbmZ1bmN0aW9uIG1hcEFsbChsaW5lLCBpbmRleCwgYmxhbmspIHtcbiAgcmV0dXJuIChibGFuayA/ICcnIDogJyAgICAnKSArIGxpbmVcbn1cbiIsICIvLyBOb3RlOiBleHRyYSB0eXBlcyBleHBvcnRlZCBmcm9tIGBpbmRleC5kLnRzYC5cbmV4cG9ydCB7Z2ZtRm9vdG5vdGVGcm9tTWFya2Rvd24sIGdmbUZvb3Rub3RlVG9NYXJrZG93bn0gZnJvbSAnLi9saWIvaW5kZXguanMnXG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLkRlbGV0ZX0gRGVsZXRlXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duJykuQ29tcGlsZUNvbnRleHR9IENvbXBpbGVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdC11dGlsLWZyb20tbWFya2Rvd24nKS5FeHRlbnNpb259IEZyb21NYXJrZG93bkV4dGVuc2lvblxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duJykuSGFuZGxlfSBGcm9tTWFya2Rvd25IYW5kbGVcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdC11dGlsLXRvLW1hcmtkb3duJykuQ29uc3RydWN0TmFtZX0gQ29uc3RydWN0TmFtZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QtdXRpbC10by1tYXJrZG93bicpLkhhbmRsZX0gVG9NYXJrZG93bkhhbmRsZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QtdXRpbC10by1tYXJrZG93bicpLk9wdGlvbnN9IFRvTWFya2Rvd25FeHRlbnNpb25cbiAqL1xuXG4vKipcbiAqIExpc3Qgb2YgY29uc3RydWN0cyB0aGF0IG9jY3VyIGluIHBocmFzaW5nIChwYXJhZ3JhcGhzLCBoZWFkaW5ncyksIGJ1dCBjYW5ub3RcbiAqIGNvbnRhaW4gc3RyaWtldGhyb3VnaC5cbiAqIFNvIHRoZXkgc29ydCBvZiBjYW5jZWwgZWFjaCBvdGhlciBvdXQuXG4gKiBOb3RlOiBjb3VsZCB1c2UgYSBiZXR0ZXIgbmFtZS5cbiAqXG4gKiBOb3RlOiBrZWVwIGluIHN5bmMgd2l0aDogPGh0dHBzOi8vZ2l0aHViLmNvbS9zeW50YXgtdHJlZS9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2Jsb2IvOGNlOGRiZi9saWIvdW5zYWZlLmpzI0wxND5cbiAqXG4gKiBAdHlwZSB7QXJyYXk8Q29uc3RydWN0TmFtZT59XG4gKi9cbmNvbnN0IGNvbnN0cnVjdHNXaXRob3V0U3RyaWtldGhyb3VnaCA9IFtcbiAgJ2F1dG9saW5rJyxcbiAgJ2Rlc3RpbmF0aW9uTGl0ZXJhbCcsXG4gICdkZXN0aW5hdGlvblJhdycsXG4gICdyZWZlcmVuY2UnLFxuICAndGl0bGVRdW90ZScsXG4gICd0aXRsZUFwb3N0cm9waGUnXG5dXG5cbmhhbmRsZURlbGV0ZS5wZWVrID0gcGVla0RlbGV0ZVxuXG4vKipcbiAqIENyZWF0ZSBhbiBleHRlbnNpb24gZm9yIGBtZGFzdC11dGlsLWZyb20tbWFya2Rvd25gIHRvIGVuYWJsZSBHRk1cbiAqIHN0cmlrZXRocm91Z2ggaW4gbWFya2Rvd24uXG4gKlxuICogQHJldHVybnMge0Zyb21NYXJrZG93bkV4dGVuc2lvbn1cbiAqICAgRXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duYCB0byBlbmFibGUgR0ZNIHN0cmlrZXRocm91Z2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZm1TdHJpa2V0aHJvdWdoRnJvbU1hcmtkb3duKCkge1xuICByZXR1cm4ge1xuICAgIGNhbkNvbnRhaW5Fb2xzOiBbJ2RlbGV0ZSddLFxuICAgIGVudGVyOiB7c3RyaWtldGhyb3VnaDogZW50ZXJTdHJpa2V0aHJvdWdofSxcbiAgICBleGl0OiB7c3RyaWtldGhyb3VnaDogZXhpdFN0cmlrZXRocm91Z2h9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC10by1tYXJrZG93bmAgdG8gZW5hYmxlIEdGTVxuICogc3RyaWtldGhyb3VnaCBpbiBtYXJrZG93bi5cbiAqXG4gKiBAcmV0dXJucyB7VG9NYXJrZG93bkV4dGVuc2lvbn1cbiAqICAgRXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC10by1tYXJrZG93bmAgdG8gZW5hYmxlIEdGTSBzdHJpa2V0aHJvdWdoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2ZtU3RyaWtldGhyb3VnaFRvTWFya2Rvd24oKSB7XG4gIHJldHVybiB7XG4gICAgdW5zYWZlOiBbXG4gICAgICB7XG4gICAgICAgIGNoYXJhY3RlcjogJ34nLFxuICAgICAgICBpbkNvbnN0cnVjdDogJ3BocmFzaW5nJyxcbiAgICAgICAgbm90SW5Db25zdHJ1Y3Q6IGNvbnN0cnVjdHNXaXRob3V0U3RyaWtldGhyb3VnaFxuICAgICAgfVxuICAgIF0sXG4gICAgaGFuZGxlcnM6IHtkZWxldGU6IGhhbmRsZURlbGV0ZX1cbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAqIEB0eXBlIHtGcm9tTWFya2Rvd25IYW5kbGV9XG4gKi9cbmZ1bmN0aW9uIGVudGVyU3RyaWtldGhyb3VnaCh0b2tlbikge1xuICB0aGlzLmVudGVyKHt0eXBlOiAnZGVsZXRlJywgY2hpbGRyZW46IFtdfSwgdG9rZW4pXG59XG5cbi8qKlxuICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICogQHR5cGUge0Zyb21NYXJrZG93bkhhbmRsZX1cbiAqL1xuZnVuY3Rpb24gZXhpdFN0cmlrZXRocm91Z2godG9rZW4pIHtcbiAgdGhpcy5leGl0KHRva2VuKVxufVxuXG4vKipcbiAqIEB0eXBlIHtUb01hcmtkb3duSGFuZGxlfVxuICogQHBhcmFtIHtEZWxldGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRGVsZXRlKG5vZGUsIF8sIHN0YXRlLCBpbmZvKSB7XG4gIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pXG4gIGNvbnN0IGV4aXQgPSBzdGF0ZS5lbnRlcignc3RyaWtldGhyb3VnaCcpXG4gIGxldCB2YWx1ZSA9IHRyYWNrZXIubW92ZSgnfn4nKVxuICB2YWx1ZSArPSBzdGF0ZS5jb250YWluZXJQaHJhc2luZyhub2RlLCB7XG4gICAgLi4udHJhY2tlci5jdXJyZW50KCksXG4gICAgYmVmb3JlOiB2YWx1ZSxcbiAgICBhZnRlcjogJ34nXG4gIH0pXG4gIHZhbHVlICs9IHRyYWNrZXIubW92ZSgnfn4nKVxuICBleGl0KClcbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKiBAdHlwZSB7VG9NYXJrZG93bkhhbmRsZX0gKi9cbmZ1bmN0aW9uIHBlZWtEZWxldGUoKSB7XG4gIHJldHVybiAnfidcbn1cbiIsICIvLyBOb3RlOiBleHRyYSB0eXBlcyBpbiBgaW5kZXguZC50c2AuXG5leHBvcnQge1xuICBnZm1TdHJpa2V0aHJvdWdoRnJvbU1hcmtkb3duLFxuICBnZm1TdHJpa2V0aHJvdWdoVG9NYXJrZG93blxufSBmcm9tICcuL2xpYi9pbmRleC5qcydcbiIsICIvLyBUbyBkbzogbmV4dCBtYWpvcjogcmVtb3ZlLlxuLyoqXG4gKiBAdHlwZWRlZiB7T3B0aW9uc30gTWFya2Rvd25UYWJsZU9wdGlvbnNcbiAqICAgQ29uZmlndXJhdGlvbi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE9wdGlvbnNcbiAqICAgQ29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFthbGlnbkRlbGltaXRlcnM9dHJ1ZV1cbiAqICAgV2hldGhlciB0byBhbGlnbiB0aGUgZGVsaW1pdGVycyAoZGVmYXVsdDogYHRydWVgKTtcbiAqICAgdGhleSBhcmUgYWxpZ25lZCBieSBkZWZhdWx0OlxuICpcbiAqICAgYGBgbWFya2Rvd25cbiAqICAgfCBBbHBoYSB8IEIgICAgIHxcbiAqICAgfCAtLS0tLSB8IC0tLS0tIHxcbiAqICAgfCBDICAgICB8IERlbHRhIHxcbiAqICAgYGBgXG4gKlxuICogICBQYXNzIGBmYWxzZWAgdG8gbWFrZSB0aGVtIHN0YWdnZXJlZDpcbiAqXG4gKiAgIGBgYG1hcmtkb3duXG4gKiAgIHwgQWxwaGEgfCBCIHxcbiAqICAgfCAtIHwgLSB8XG4gKiAgIHwgQyB8IERlbHRhIHxcbiAqICAgYGBgXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbYWxpZ25dXG4gKiAgIEhvdyB0byBhbGlnbiBjb2x1bW5zIChkZWZhdWx0OiBgJydgKTtcbiAqICAgb25lIHN0eWxlIGZvciBhbGwgY29sdW1ucyBvciBzdHlsZXMgZm9yIHRoZWlyIHJlc3BlY3RpdmUgY29sdW1ucztcbiAqICAgZWFjaCBzdHlsZSBpcyBlaXRoZXIgYCdsJ2AgKGxlZnQpLCBgJ3InYCAocmlnaHQpLCBvciBgJ2MnYCAoY2VudGVyKTtcbiAqICAgb3RoZXIgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIGAnJ2AsIHdoaWNoIGRvZXNuXHUyMDE5dCBwbGFjZSB0aGUgY29sb24gaW4gdGhlXG4gKiAgIGFsaWdubWVudCByb3cgYnV0IGRvZXMgYWxpZ24gbGVmdDtcbiAqICAgKm9ubHkgdGhlIGxvd2VyY2FzZWQgZmlyc3QgY2hhcmFjdGVyIGlzIHVzZWQsIHNvIGBSaWdodGAgaXMgZmluZS4qXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbZGVsaW1pdGVyRW5kPXRydWVdXG4gKiAgIFdoZXRoZXIgdG8gZW5kIGVhY2ggcm93IHdpdGggdGhlIGRlbGltaXRlciAoZGVmYXVsdDogYHRydWVgKS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBwbGVhc2UgZG9uXHUyMDE5dCB1c2UgdGhpczogaXQgY291bGQgY3JlYXRlIGZyYWdpbGUgc3RydWN0dXJlc1xuICogICA+IHRoYXQgYXJlblx1MjAxOXQgdW5kZXJzdGFuZGFibGUgdG8gc29tZSBtYXJrZG93biBwYXJzZXJzLlxuICpcbiAqICAgV2hlbiBgdHJ1ZWAsIHRoZXJlIGFyZSBlbmRpbmcgZGVsaW1pdGVyczpcbiAqXG4gKiAgIGBgYG1hcmtkb3duXG4gKiAgIHwgQWxwaGEgfCBCICAgICB8XG4gKiAgIHwgLS0tLS0gfCAtLS0tLSB8XG4gKiAgIHwgQyAgICAgfCBEZWx0YSB8XG4gKiAgIGBgYFxuICpcbiAqICAgV2hlbiBgZmFsc2VgLCB0aGVyZSBhcmUgbm8gZW5kaW5nIGRlbGltaXRlcnM6XG4gKlxuICogICBgYGBtYXJrZG93blxuICogICB8IEFscGhhIHwgQlxuICogICB8IC0tLS0tIHwgLS0tLS1cbiAqICAgfCBDICAgICB8IERlbHRhXG4gKiAgIGBgYFxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2RlbGltaXRlclN0YXJ0PXRydWVdXG4gKiAgIFdoZXRoZXIgdG8gYmVnaW4gZWFjaCByb3cgd2l0aCB0aGUgZGVsaW1pdGVyIChkZWZhdWx0OiBgdHJ1ZWApLlxuICpcbiAqICAgPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHBsZWFzZSBkb25cdTIwMTl0IHVzZSB0aGlzOiBpdCBjb3VsZCBjcmVhdGUgZnJhZ2lsZSBzdHJ1Y3R1cmVzXG4gKiAgID4gdGhhdCBhcmVuXHUyMDE5dCB1bmRlcnN0YW5kYWJsZSB0byBzb21lIG1hcmtkb3duIHBhcnNlcnMuXG4gKlxuICogICBXaGVuIGB0cnVlYCwgdGhlcmUgYXJlIHN0YXJ0aW5nIGRlbGltaXRlcnM6XG4gKlxuICogICBgYGBtYXJrZG93blxuICogICB8IEFscGhhIHwgQiAgICAgfFxuICogICB8IC0tLS0tIHwgLS0tLS0gfFxuICogICB8IEMgICAgIHwgRGVsdGEgfFxuICogICBgYGBcbiAqXG4gKiAgIFdoZW4gYGZhbHNlYCwgdGhlcmUgYXJlIG5vIHN0YXJ0aW5nIGRlbGltaXRlcnM6XG4gKlxuICogICBgYGBtYXJrZG93blxuICogICBBbHBoYSB8IEIgICAgIHxcbiAqICAgLS0tLS0gfCAtLS0tLSB8XG4gKiAgIEMgICAgIHwgRGVsdGEgfFxuICogICBgYGBcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtwYWRkaW5nPXRydWVdXG4gKiAgIFdoZXRoZXIgdG8gYWRkIGEgc3BhY2Ugb2YgcGFkZGluZyBiZXR3ZWVuIGRlbGltaXRlcnMgYW5kIGNlbGxzXG4gKiAgIChkZWZhdWx0OiBgdHJ1ZWApLlxuICpcbiAqICAgV2hlbiBgdHJ1ZWAsIHRoZXJlIGlzIHBhZGRpbmc6XG4gKlxuICogICBgYGBtYXJrZG93blxuICogICB8IEFscGhhIHwgQiAgICAgfFxuICogICB8IC0tLS0tIHwgLS0tLS0gfFxuICogICB8IEMgICAgIHwgRGVsdGEgfFxuICogICBgYGBcbiAqXG4gKiAgIFdoZW4gYGZhbHNlYCwgdGhlcmUgaXMgbm8gcGFkZGluZzpcbiAqXG4gKiAgIGBgYG1hcmtkb3duXG4gKiAgIHxBbHBoYXxCICAgIHxcbiAqICAgfC0tLS0tfC0tLS0tfFxuICogICB8QyAgICB8RGVsdGF8XG4gKiAgIGBgYFxuICogQHByb3BlcnR5IHsoKHZhbHVlOiBzdHJpbmcpID0+IG51bWJlcikgfCBudWxsIHwgdW5kZWZpbmVkfSBbc3RyaW5nTGVuZ3RoXVxuICogICBGdW5jdGlvbiB0byBkZXRlY3QgdGhlIGxlbmd0aCBvZiB0YWJsZSBjZWxsIGNvbnRlbnQgKG9wdGlvbmFsKTtcbiAqICAgdGhpcyBpcyB1c2VkIHdoZW4gYWxpZ25pbmcgdGhlIGRlbGltaXRlcnMgKGB8YCkgYmV0d2VlbiB0YWJsZSBjZWxscztcbiAqICAgZnVsbC13aWR0aCBjaGFyYWN0ZXJzIGFuZCBlbW9qaSBtZXNzIHVwIGRlbGltaXRlciBhbGlnbm1lbnQgd2hlbiB2aWV3aW5nXG4gKiAgIHRoZSBtYXJrZG93biBzb3VyY2U7XG4gKiAgIHRvIGZpeCB0aGlzLCB5b3UgY2FuIHBhc3MgdGhpcyBmdW5jdGlvbixcbiAqICAgd2hpY2ggcmVjZWl2ZXMgdGhlIGNlbGwgY29udGVudCBhbmQgcmV0dXJucyBpdHMgXHUyMDFDdmlzaWJsZVx1MjAxRCBzaXplO1xuICogICBub3RlIHRoYXQgd2hhdCBpcyBhbmQgaXNuXHUyMDE5dCB2aXNpYmxlIGRlcGVuZHMgb24gd2hlcmUgdGhlIHRleHQgaXMgZGlzcGxheWVkLlxuICpcbiAqICAgV2l0aG91dCBzdWNoIGEgZnVuY3Rpb24sIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogICBgYGBqc1xuICogICBtYXJrZG93blRhYmxlKFtcbiAqICAgICBbJ0FscGhhJywgJ0JyYXZvJ10sXG4gKiAgICAgWydcdTRFMkRcdTY1ODcnLCAnQ2hhcmxpZSddLFxuICogICAgIFsnXHVEODNEXHVEQzY5XHUyMDBEXHUyNzY0XHVGRTBGXHUyMDBEXHVEODNEXHVEQzY5JywgJ0RlbHRhJ11cbiAqICAgXSlcbiAqICAgYGBgXG4gKlxuICogICBZaWVsZHM6XG4gKlxuICogICBgYGBtYXJrZG93blxuICogICB8IEFscGhhIHwgQnJhdm8gfFxuICogICB8IC0gfCAtIHxcbiAqICAgfCBcdTRFMkRcdTY1ODcgfCBDaGFybGllIHxcbiAqICAgfCBcdUQ4M0RcdURDNjlcdTIwMERcdTI3NjRcdUZFMEZcdTIwMERcdUQ4M0RcdURDNjkgfCBEZWx0YSB8XG4gKiAgIGBgYFxuICpcbiAqICAgV2l0aCBbYHN0cmluZy13aWR0aGBdKGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvc3RyaW5nLXdpZHRoKTpcbiAqXG4gKiAgIGBgYGpzXG4gKiAgIGltcG9ydCBzdHJpbmdXaWR0aCBmcm9tICdzdHJpbmctd2lkdGgnXG4gKlxuICogICBtYXJrZG93blRhYmxlKFxuICogICAgIFtcbiAqICAgICAgIFsnQWxwaGEnLCAnQnJhdm8nXSxcbiAqICAgICAgIFsnXHU0RTJEXHU2NTg3JywgJ0NoYXJsaWUnXSxcbiAqICAgICAgIFsnXHVEODNEXHVEQzY5XHUyMDBEXHUyNzY0XHVGRTBGXHUyMDBEXHVEODNEXHVEQzY5JywgJ0RlbHRhJ11cbiAqICAgICBdLFxuICogICAgIHtzdHJpbmdMZW5ndGg6IHN0cmluZ1dpZHRofVxuICogICApXG4gKiAgIGBgYFxuICpcbiAqICAgWWllbGRzOlxuICpcbiAqICAgYGBgbWFya2Rvd25cbiAqICAgfCBBbHBoYSB8IEJyYXZvICAgfFxuICogICB8IC0tLS0tIHwgLS0tLS0tLSB8XG4gKiAgIHwgXHU0RTJEXHU2NTg3ICB8IENoYXJsaWUgfFxuICogICB8IFx1RDgzRFx1REM2OVx1MjAwRFx1Mjc2NFx1RkUwRlx1MjAwRFx1RDgzRFx1REM2OSAgICB8IERlbHRhICAgfFxuICogICBgYGBcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBDZWxsIHZhbHVlLlxuICogQHJldHVybnMge251bWJlcn1cbiAqICAgQ2VsbCBzaXplLlxuICovXG5mdW5jdGlvbiBkZWZhdWx0U3RyaW5nTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG1hcmtkb3duXG4gKiAoW0dGTV0oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vZ2l0aHViL3dyaXRpbmctb24tZ2l0aHViL3dvcmtpbmctd2l0aC1hZHZhbmNlZC1mb3JtYXR0aW5nL29yZ2FuaXppbmctaW5mb3JtYXRpb24td2l0aC10YWJsZXMpKVxuICogdGFibGUuXG4gKlxuICogQHBhcmFtIHtSZWFkb25seUFycmF5PFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4+fSB0YWJsZVxuICogICBUYWJsZSBkYXRhIChtYXRyaXggb2Ygc3RyaW5ncykuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PE9wdGlvbnM+IHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duVGFibGUodGFibGUsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9XG4gIC8vIFRvIGRvOiBuZXh0IG1ham9yOiBjaGFuZ2UgdG8gc3ByZWFkLlxuICBjb25zdCBhbGlnbiA9IChzZXR0aW5ncy5hbGlnbiB8fCBbXSkuY29uY2F0KClcbiAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc2V0dGluZ3Muc3RyaW5nTGVuZ3RoIHx8IGRlZmF1bHRTdHJpbmdMZW5ndGhcbiAgLyoqIEB0eXBlIHtBcnJheTxudW1iZXI+fSBDaGFyYWN0ZXIgY29kZXMgYXMgc3ltYm9scyBmb3IgYWxpZ25tZW50IHBlciBjb2x1bW4uICovXG4gIGNvbnN0IGFsaWdubWVudHMgPSBbXVxuICAvKiogQHR5cGUge0FycmF5PEFycmF5PHN0cmluZz4+fSBDZWxscyBwZXIgcm93LiAqL1xuICBjb25zdCBjZWxsTWF0cml4ID0gW11cbiAgLyoqIEB0eXBlIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gU2l6ZXMgb2YgZWFjaCBjZWxsIHBlciByb3cuICovXG4gIGNvbnN0IHNpemVNYXRyaXggPSBbXVxuICAvKiogQHR5cGUge0FycmF5PG51bWJlcj59ICovXG4gIGNvbnN0IGxvbmdlc3RDZWxsQnlDb2x1bW4gPSBbXVxuICBsZXQgbW9zdENlbGxzUGVyUm93ID0gMFxuICBsZXQgcm93SW5kZXggPSAtMVxuXG4gIC8vIFRoaXMgaXMgYSBzdXBlcmZsdW91cyBsb29wIGlmIHdlIGRvblx1MjAxOXQgYWxpZ24gZGVsaW1pdGVycywgYnV0IG90aGVyd2lzZSB3ZVx1MjAxOWRcbiAgLy8gZG8gc3VwZXJmbHVvdXMgd29yayB3aGVuIGFsaWduaW5nLCBzbyBvcHRpbWl6ZSBmb3IgYWxpZ25pbmcuXG4gIHdoaWxlICgrK3Jvd0luZGV4IDwgdGFibGUubGVuZ3RoKSB7XG4gICAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICAgIGNvbnN0IHJvdyA9IFtdXG4gICAgLyoqIEB0eXBlIHtBcnJheTxudW1iZXI+fSAqL1xuICAgIGNvbnN0IHNpemVzID0gW11cbiAgICBsZXQgY29sdW1uSW5kZXggPSAtMVxuXG4gICAgaWYgKHRhYmxlW3Jvd0luZGV4XS5sZW5ndGggPiBtb3N0Q2VsbHNQZXJSb3cpIHtcbiAgICAgIG1vc3RDZWxsc1BlclJvdyA9IHRhYmxlW3Jvd0luZGV4XS5sZW5ndGhcbiAgICB9XG5cbiAgICB3aGlsZSAoKytjb2x1bW5JbmRleCA8IHRhYmxlW3Jvd0luZGV4XS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNlbGwgPSBzZXJpYWxpemUodGFibGVbcm93SW5kZXhdW2NvbHVtbkluZGV4XSlcblxuICAgICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHN0cmluZ0xlbmd0aChjZWxsKVxuICAgICAgICBzaXplc1tjb2x1bW5JbmRleF0gPSBzaXplXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXhdID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBzaXplID4gbG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleF1cbiAgICAgICAgKSB7XG4gICAgICAgICAgbG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleF0gPSBzaXplXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcm93LnB1c2goY2VsbClcbiAgICB9XG5cbiAgICBjZWxsTWF0cml4W3Jvd0luZGV4XSA9IHJvd1xuICAgIHNpemVNYXRyaXhbcm93SW5kZXhdID0gc2l6ZXNcbiAgfVxuXG4gIC8vIEZpZ3VyZSBvdXQgd2hpY2ggYWxpZ25tZW50cyB0byB1c2UuXG4gIGxldCBjb2x1bW5JbmRleCA9IC0xXG5cbiAgaWYgKHR5cGVvZiBhbGlnbiA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gYWxpZ24pIHtcbiAgICB3aGlsZSAoKytjb2x1bW5JbmRleCA8IG1vc3RDZWxsc1BlclJvdykge1xuICAgICAgYWxpZ25tZW50c1tjb2x1bW5JbmRleF0gPSB0b0FsaWdubWVudChhbGlnbltjb2x1bW5JbmRleF0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvZGUgPSB0b0FsaWdubWVudChhbGlnbilcblxuICAgIHdoaWxlICgrK2NvbHVtbkluZGV4IDwgbW9zdENlbGxzUGVyUm93KSB7XG4gICAgICBhbGlnbm1lbnRzW2NvbHVtbkluZGV4XSA9IGNvZGVcbiAgICB9XG4gIH1cblxuICAvLyBJbmplY3QgdGhlIGFsaWdubWVudCByb3cuXG4gIGNvbHVtbkluZGV4ID0gLTFcbiAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICBjb25zdCByb3cgPSBbXVxuICAvKiogQHR5cGUge0FycmF5PG51bWJlcj59ICovXG4gIGNvbnN0IHNpemVzID0gW11cblxuICB3aGlsZSAoKytjb2x1bW5JbmRleCA8IG1vc3RDZWxsc1BlclJvdykge1xuICAgIGNvbnN0IGNvZGUgPSBhbGlnbm1lbnRzW2NvbHVtbkluZGV4XVxuICAgIGxldCBiZWZvcmUgPSAnJ1xuICAgIGxldCBhZnRlciA9ICcnXG5cbiAgICBpZiAoY29kZSA9PT0gOTkgLyogYGNgICovKSB7XG4gICAgICBiZWZvcmUgPSAnOidcbiAgICAgIGFmdGVyID0gJzonXG4gICAgfSBlbHNlIGlmIChjb2RlID09PSAxMDggLyogYGxgICovKSB7XG4gICAgICBiZWZvcmUgPSAnOidcbiAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDExNCAvKiBgcmAgKi8pIHtcbiAgICAgIGFmdGVyID0gJzonXG4gICAgfVxuXG4gICAgLy8gVGhlcmUgKm11c3QqIGJlIGF0IGxlYXN0IG9uZSBoeXBoZW4tbWludXMgaW4gZWFjaCBhbGlnbm1lbnQgY2VsbC5cbiAgICBsZXQgc2l6ZSA9XG4gICAgICBzZXR0aW5ncy5hbGlnbkRlbGltaXRlcnMgPT09IGZhbHNlXG4gICAgICAgID8gMVxuICAgICAgICA6IE1hdGgubWF4KFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXhdIC0gYmVmb3JlLmxlbmd0aCAtIGFmdGVyLmxlbmd0aFxuICAgICAgICAgIClcblxuICAgIGNvbnN0IGNlbGwgPSBiZWZvcmUgKyAnLScucmVwZWF0KHNpemUpICsgYWZ0ZXJcblxuICAgIGlmIChzZXR0aW5ncy5hbGlnbkRlbGltaXRlcnMgIT09IGZhbHNlKSB7XG4gICAgICBzaXplID0gYmVmb3JlLmxlbmd0aCArIHNpemUgKyBhZnRlci5sZW5ndGhcblxuICAgICAgaWYgKHNpemUgPiBsb25nZXN0Q2VsbEJ5Q29sdW1uW2NvbHVtbkluZGV4XSkge1xuICAgICAgICBsb25nZXN0Q2VsbEJ5Q29sdW1uW2NvbHVtbkluZGV4XSA9IHNpemVcbiAgICAgIH1cblxuICAgICAgc2l6ZXNbY29sdW1uSW5kZXhdID0gc2l6ZVxuICAgIH1cblxuICAgIHJvd1tjb2x1bW5JbmRleF0gPSBjZWxsXG4gIH1cblxuICAvLyBJbmplY3QgdGhlIGFsaWdubWVudCByb3cuXG4gIGNlbGxNYXRyaXguc3BsaWNlKDEsIDAsIHJvdylcbiAgc2l6ZU1hdHJpeC5zcGxpY2UoMSwgMCwgc2l6ZXMpXG5cbiAgcm93SW5kZXggPSAtMVxuICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59ICovXG4gIGNvbnN0IGxpbmVzID0gW11cblxuICB3aGlsZSAoKytyb3dJbmRleCA8IGNlbGxNYXRyaXgubGVuZ3RoKSB7XG4gICAgY29uc3Qgcm93ID0gY2VsbE1hdHJpeFtyb3dJbmRleF1cbiAgICBjb25zdCBzaXplcyA9IHNpemVNYXRyaXhbcm93SW5kZXhdXG4gICAgY29sdW1uSW5kZXggPSAtMVxuICAgIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgICBjb25zdCBsaW5lID0gW11cblxuICAgIHdoaWxlICgrK2NvbHVtbkluZGV4IDwgbW9zdENlbGxzUGVyUm93KSB7XG4gICAgICBjb25zdCBjZWxsID0gcm93W2NvbHVtbkluZGV4XSB8fCAnJ1xuICAgICAgbGV0IGJlZm9yZSA9ICcnXG4gICAgICBsZXQgYWZ0ZXIgPSAnJ1xuXG4gICAgICBpZiAoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzICE9PSBmYWxzZSkge1xuICAgICAgICBjb25zdCBzaXplID1cbiAgICAgICAgICBsb25nZXN0Q2VsbEJ5Q29sdW1uW2NvbHVtbkluZGV4XSAtIChzaXplc1tjb2x1bW5JbmRleF0gfHwgMClcbiAgICAgICAgY29uc3QgY29kZSA9IGFsaWdubWVudHNbY29sdW1uSW5kZXhdXG5cbiAgICAgICAgaWYgKGNvZGUgPT09IDExNCAvKiBgcmAgKi8pIHtcbiAgICAgICAgICBiZWZvcmUgPSAnICcucmVwZWF0KHNpemUpXG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gOTkgLyogYGNgICovKSB7XG4gICAgICAgICAgaWYgKHNpemUgJSAyKSB7XG4gICAgICAgICAgICBiZWZvcmUgPSAnICcucmVwZWF0KHNpemUgLyAyICsgMC41KVxuICAgICAgICAgICAgYWZ0ZXIgPSAnICcucmVwZWF0KHNpemUgLyAyIC0gMC41KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiZWZvcmUgPSAnICcucmVwZWF0KHNpemUgLyAyKVxuICAgICAgICAgICAgYWZ0ZXIgPSBiZWZvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWZ0ZXIgPSAnICcucmVwZWF0KHNpemUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNldHRpbmdzLmRlbGltaXRlclN0YXJ0ICE9PSBmYWxzZSAmJiAhY29sdW1uSW5kZXgpIHtcbiAgICAgICAgbGluZS5wdXNoKCd8JylcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBzZXR0aW5ncy5wYWRkaW5nICE9PSBmYWxzZSAmJlxuICAgICAgICAvLyBEb25cdTIwMTl0IGFkZCB0aGUgb3BlbmluZyBzcGFjZSBpZiB3ZVx1MjAxOXJlIG5vdCBhbGlnbmluZyBhbmQgdGhlIGNlbGwgaXNcbiAgICAgICAgLy8gZW1wdHk6IHRoZXJlIHdpbGwgYmUgYSBjbG9zaW5nIHNwYWNlLlxuICAgICAgICAhKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyA9PT0gZmFsc2UgJiYgY2VsbCA9PT0gJycpICYmXG4gICAgICAgIChzZXR0aW5ncy5kZWxpbWl0ZXJTdGFydCAhPT0gZmFsc2UgfHwgY29sdW1uSW5kZXgpXG4gICAgICApIHtcbiAgICAgICAgbGluZS5wdXNoKCcgJylcbiAgICAgIH1cblxuICAgICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgbGluZS5wdXNoKGJlZm9yZSlcbiAgICAgIH1cblxuICAgICAgbGluZS5wdXNoKGNlbGwpXG5cbiAgICAgIGlmIChzZXR0aW5ncy5hbGlnbkRlbGltaXRlcnMgIT09IGZhbHNlKSB7XG4gICAgICAgIGxpbmUucHVzaChhZnRlcilcbiAgICAgIH1cblxuICAgICAgaWYgKHNldHRpbmdzLnBhZGRpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIGxpbmUucHVzaCgnICcpXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc2V0dGluZ3MuZGVsaW1pdGVyRW5kICE9PSBmYWxzZSB8fFxuICAgICAgICBjb2x1bW5JbmRleCAhPT0gbW9zdENlbGxzUGVyUm93IC0gMVxuICAgICAgKSB7XG4gICAgICAgIGxpbmUucHVzaCgnfCcpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGluZXMucHVzaChcbiAgICAgIHNldHRpbmdzLmRlbGltaXRlckVuZCA9PT0gZmFsc2VcbiAgICAgICAgPyBsaW5lLmpvaW4oJycpLnJlcGxhY2UoLyArJC8sICcnKVxuICAgICAgICA6IGxpbmUuam9pbignJylcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFt2YWx1ZV1cbiAqICAgVmFsdWUgdG8gc2VyaWFsaXplLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgUmVzdWx0LlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyh2YWx1ZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IHZhbHVlXG4gKiAgIFZhbHVlLlxuICogQHJldHVybnMge251bWJlcn1cbiAqICAgQWxpZ25tZW50LlxuICovXG5mdW5jdGlvbiB0b0FsaWdubWVudCh2YWx1ZSkge1xuICBjb25zdCBjb2RlID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLmNvZGVQb2ludEF0KDApIDogMFxuXG4gIHJldHVybiBjb2RlID09PSA2NyAvKiBgQ2AgKi8gfHwgY29kZSA9PT0gOTkgLyogYGNgICovXG4gICAgPyA5OSAvKiBgY2AgKi9cbiAgICA6IGNvZGUgPT09IDc2IC8qIGBMYCAqLyB8fCBjb2RlID09PSAxMDggLyogYGxgICovXG4gICAgICA/IDEwOCAvKiBgbGAgKi9cbiAgICAgIDogY29kZSA9PT0gODIgLyogYFJgICovIHx8IGNvZGUgPT09IDExNCAvKiBgcmAgKi9cbiAgICAgICAgPyAxMTQgLyogYHJgICovXG4gICAgICAgIDogMFxufVxuIiwgIi8qKlxuICogQGNhbGxiYWNrIEhhbmRsZXJcbiAqICAgSGFuZGxlIGEgdmFsdWUsIHdpdGggYSBjZXJ0YWluIElEIGZpZWxkIHNldCB0byBhIGNlcnRhaW4gdmFsdWUuXG4gKiAgIFRoZSBJRCBmaWVsZCBpcyBwYXNzZWQgdG8gYHp3aXRjaGAsIGFuZCBpdFx1MjAxOXMgdmFsdWUgaXMgdGhpcyBmdW5jdGlvblx1MjAxOXNcbiAqICAgcGxhY2Ugb24gdGhlIGBoYW5kbGVyc2AgcmVjb3JkLlxuICogQHBhcmFtIHsuLi5hbnl9IHBhcmFtZXRlcnNcbiAqICAgQXJiaXRyYXJ5IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSB6d2l0Y2guXG4gKiAgIFRoZSBmaXJzdCB3aWxsIGJlIGFuIG9iamVjdCB3aXRoIGEgY2VydGFpbiBJRCBmaWVsZCBzZXQgdG8gYSBjZXJ0YWluIHZhbHVlLlxuICogQHJldHVybnMge2FueX1cbiAqICAgQW55dGhpbmchXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgVW5rbm93bkhhbmRsZXJcbiAqICAgSGFuZGxlIHZhbHVlcyB0aGF0IGRvIGhhdmUgYSBjZXJ0YWluIElEIGZpZWxkLCBidXQgaXRcdTIwMTlzIHNldCB0byBhIHZhbHVlXG4gKiAgIHRoYXQgaXMgbm90IGxpc3RlZCBpbiB0aGUgYGhhbmRsZXJzYCByZWNvcmQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlXG4gKiAgIEFuIG9iamVjdCB3aXRoIGEgY2VydGFpbiBJRCBmaWVsZCBzZXQgdG8gYW4gdW5rbm93biB2YWx1ZS5cbiAqIEBwYXJhbSB7Li4uYW55fSByZXN0XG4gKiAgIEFyYml0cmFyeSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgendpdGNoLlxuICogQHJldHVybnMge2FueX1cbiAqICAgQW55dGhpbmchXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgSW52YWxpZEhhbmRsZXJcbiAqICAgSGFuZGxlIHZhbHVlcyB0aGF0IGRvIG5vdCBoYXZlIGEgY2VydGFpbiBJRCBmaWVsZC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqICAgQW55IHVua25vd24gdmFsdWUuXG4gKiBAcGFyYW0gey4uLmFueX0gcmVzdFxuICogICBBcmJpdHJhcnkgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIHp3aXRjaC5cbiAqIEByZXR1cm5zIHt2b2lkfG51bGx8dW5kZWZpbmVkfG5ldmVyfVxuICogICBUaGlzIHNob3VsZCBjcmFzaCBvciByZXR1cm4gbm90aGluZy5cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7SW52YWxpZEhhbmRsZXJ9IFtJbnZhbGlkPUludmFsaWRIYW5kbGVyXVxuICogQHRlbXBsYXRlIHtVbmtub3duSGFuZGxlcn0gW1Vua25vd249VW5rbm93bkhhbmRsZXJdXG4gKiBAdGVtcGxhdGUge1JlY29yZDxzdHJpbmcsIEhhbmRsZXI+fSBbSGFuZGxlcnM9UmVjb3JkPHN0cmluZywgSGFuZGxlcj5dXG4gKiBAdHlwZWRlZiBPcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24gKHJlcXVpcmVkKS5cbiAqIEBwcm9wZXJ0eSB7SW52YWxpZH0gW2ludmFsaWRdXG4gKiAgIEhhbmRsZXIgdG8gdXNlIGZvciBpbnZhbGlkIHZhbHVlcy5cbiAqIEBwcm9wZXJ0eSB7VW5rbm93bn0gW3Vua25vd25dXG4gKiAgIEhhbmRsZXIgdG8gdXNlIGZvciB1bmtub3duIHZhbHVlcy5cbiAqIEBwcm9wZXJ0eSB7SGFuZGxlcnN9IFtoYW5kbGVyc11cbiAqICAgSGFuZGxlcnMgdG8gdXNlLlxuICovXG5cbmNvbnN0IG93biA9IHt9Lmhhc093blByb3BlcnR5XG5cbi8qKlxuICogSGFuZGxlIHZhbHVlcyBiYXNlZCBvbiBhIGZpZWxkLlxuICpcbiAqIEB0ZW1wbGF0ZSB7SW52YWxpZEhhbmRsZXJ9IFtJbnZhbGlkPUludmFsaWRIYW5kbGVyXVxuICogQHRlbXBsYXRlIHtVbmtub3duSGFuZGxlcn0gW1Vua25vd249VW5rbm93bkhhbmRsZXJdXG4gKiBAdGVtcGxhdGUge1JlY29yZDxzdHJpbmcsIEhhbmRsZXI+fSBbSGFuZGxlcnM9UmVjb3JkPHN0cmluZywgSGFuZGxlcj5dXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiAgIEZpZWxkIHRvIHN3aXRjaCBvbi5cbiAqIEBwYXJhbSB7T3B0aW9uczxJbnZhbGlkLCBVbmtub3duLCBIYW5kbGVycz59IFtvcHRpb25zXVxuICogICBDb25maWd1cmF0aW9uIChyZXF1aXJlZCkuXG4gKiBAcmV0dXJucyB7e3Vua25vd246IFVua25vd24sIGludmFsaWQ6IEludmFsaWQsIGhhbmRsZXJzOiBIYW5kbGVycywgKC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnM8SGFuZGxlcnNba2V5b2YgSGFuZGxlcnNdPik6IFJldHVyblR5cGU8SGFuZGxlcnNba2V5b2YgSGFuZGxlcnNdPiwgKC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnM8VW5rbm93bj4pOiBSZXR1cm5UeXBlPFVua25vd24+fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHp3aXRjaChrZXksIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBvbmUgdmFsdWUuXG4gICAqXG4gICAqIEJhc2VkIG9uIHRoZSBib3VuZCBga2V5YCwgYSByZXNwZWN0aXZlIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQuXG4gICAqIElmIGB2YWx1ZWAgaXMgbm90IGFuIG9iamVjdCwgb3IgZG9lc25cdTIwMTl0IGhhdmUgYSBga2V5YCBwcm9wZXJ0eSwgdGhlIHNwZWNpYWxcbiAgICogXHUyMDFDaW52YWxpZFx1MjAxRCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkLlxuICAgKiBJZiBgdmFsdWVgIGhhcyBhbiB1bmtub3duIGBrZXlgLCB0aGUgc3BlY2lhbCBcdTIwMUN1bmtub3duXHUyMDFEIGhhbmRsZXIgd2lsbCBiZVxuICAgKiBjYWxsZWQuXG4gICAqXG4gICAqIEFsbCBhcmd1bWVudHMsIGFuZCB0aGUgY29udGV4dCBvYmplY3QsIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgaGFuZGxlcixcbiAgICogYW5kIGl0XHUyMDE5cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEB0aGlzIHt1bmtub3dufVxuICAgKiAgIEFueSBjb250ZXh0IG9iamVjdC5cbiAgICogQHBhcmFtIHt1bmtub3dufSBbdmFsdWVdXG4gICAqICAgQW55IHZhbHVlLlxuICAgKiBAcGFyYW0gey4uLnVua25vd259IHBhcmFtZXRlcnNcbiAgICogICBBcmJpdHJhcnkgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIHp3aXRjaC5cbiAgICogQHByb3BlcnR5IHtIYW5kbGVyfSBpbnZhbGlkXG4gICAqICAgSGFuZGxlIGZvciB2YWx1ZXMgdGhhdCBkbyBub3QgaGF2ZSBhIGNlcnRhaW4gSUQgZmllbGQuXG4gICAqIEBwcm9wZXJ0eSB7SGFuZGxlcn0gdW5rbm93blxuICAgKiAgIEhhbmRsZSB2YWx1ZXMgdGhhdCBkbyBoYXZlIGEgY2VydGFpbiBJRCBmaWVsZCwgYnV0IGl0XHUyMDE5cyBzZXQgdG8gYSB2YWx1ZVxuICAgKiAgIHRoYXQgaXMgbm90IGxpc3RlZCBpbiB0aGUgYGhhbmRsZXJzYCByZWNvcmQuXG4gICAqIEBwcm9wZXJ0eSB7SGFuZGxlcnN9IGhhbmRsZXJzXG4gICAqICAgUmVjb3JkIG9mIGhhbmRsZXJzLlxuICAgKiBAcmV0dXJucyB7dW5rbm93bn1cbiAgICogICBBbnl0aGluZy5cbiAgICovXG4gIGZ1bmN0aW9uIG9uZSh2YWx1ZSwgLi4ucGFyYW1ldGVycykge1xuICAgIC8qKiBAdHlwZSB7SGFuZGxlcnx1bmRlZmluZWR9ICovXG4gICAgbGV0IGZuID0gb25lLmludmFsaWRcbiAgICBjb25zdCBoYW5kbGVycyA9IG9uZS5oYW5kbGVyc1xuXG4gICAgaWYgKHZhbHVlICYmIG93bi5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEluZGV4YWJsZS5cbiAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHZhbHVlW2tleV0pXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEluZGV4YWJsZS5cbiAgICAgIGZuID0gb3duLmNhbGwoaGFuZGxlcnMsIGlkKSA/IGhhbmRsZXJzW2lkXSA6IG9uZS51bmtub3duXG4gICAgfVxuXG4gICAgaWYgKGZuKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCB2YWx1ZSwgLi4ucGFyYW1ldGVycylcbiAgICB9XG4gIH1cblxuICBvbmUuaGFuZGxlcnMgPSBzZXR0aW5ncy5oYW5kbGVycyB8fCB7fVxuICBvbmUuaW52YWxpZCA9IHNldHRpbmdzLmludmFsaWRcbiAgb25lLnVua25vd24gPSBzZXR0aW5ncy51bmtub3duXG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbWF0Y2hlcyFcbiAgcmV0dXJuIG9uZVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7T3B0aW9ucywgU3RhdGV9IGZyb20gJy4vdHlwZXMuanMnXG4gKi9cblxuY29uc3Qgb3duID0ge30uaGFzT3duUHJvcGVydHlcblxuLyoqXG4gKiBAcGFyYW0ge1N0YXRlfSBiYXNlXG4gKiBAcGFyYW0ge09wdGlvbnN9IGV4dGVuc2lvblxuICogQHJldHVybnMge1N0YXRlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlKGJhc2UsIGV4dGVuc2lvbikge1xuICBsZXQgaW5kZXggPSAtMVxuICAvKiogQHR5cGUge2tleW9mIE9wdGlvbnN9ICovXG4gIGxldCBrZXlcblxuICAvLyBGaXJzdCBkbyBzdWJleHRlbnNpb25zLlxuICBpZiAoZXh0ZW5zaW9uLmV4dGVuc2lvbnMpIHtcbiAgICB3aGlsZSAoKytpbmRleCA8IGV4dGVuc2lvbi5leHRlbnNpb25zLmxlbmd0aCkge1xuICAgICAgY29uZmlndXJlKGJhc2UsIGV4dGVuc2lvbi5leHRlbnNpb25zW2luZGV4XSlcbiAgICB9XG4gIH1cblxuICBmb3IgKGtleSBpbiBleHRlbnNpb24pIHtcbiAgICBpZiAob3duLmNhbGwoZXh0ZW5zaW9uLCBrZXkpKSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdleHRlbnNpb25zJzoge1xuICAgICAgICAgIC8vIEVtcHR5LlxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICAvKiBjOCBpZ25vcmUgbmV4dCA0ICovXG4gICAgICAgIGNhc2UgJ3Vuc2FmZSc6IHtcbiAgICAgICAgICBsaXN0KGJhc2Vba2V5XSwgZXh0ZW5zaW9uW2tleV0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2pvaW4nOiB7XG4gICAgICAgICAgbGlzdChiYXNlW2tleV0sIGV4dGVuc2lvbltrZXldKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdoYW5kbGVycyc6IHtcbiAgICAgICAgICBtYXAoYmFzZVtrZXldLCBleHRlbnNpb25ba2V5XSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IG1hdGNoZXMuXG4gICAgICAgICAgYmFzZS5vcHRpb25zW2tleV0gPSBleHRlbnNpb25ba2V5XVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhc2Vcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtBcnJheTxUPn0gbGVmdFxuICogQHBhcmFtIHtBcnJheTxUPiB8IG51bGwgfCB1bmRlZmluZWR9IHJpZ2h0XG4gKi9cbmZ1bmN0aW9uIGxpc3QobGVmdCwgcmlnaHQpIHtcbiAgaWYgKHJpZ2h0KSB7XG4gICAgbGVmdC5wdXNoKC4uLnJpZ2h0KVxuICB9XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgVD59IGxlZnRcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgVD4gfCBudWxsIHwgdW5kZWZpbmVkfSByaWdodFxuICovXG5mdW5jdGlvbiBtYXAobGVmdCwgcmlnaHQpIHtcbiAgaWYgKHJpZ2h0KSB7XG4gICAgT2JqZWN0LmFzc2lnbihsZWZ0LCByaWdodClcbiAgfVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7QmxvY2txdW90ZSwgUGFyZW50c30gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtJbmZvLCBNYXAsIFN0YXRlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICovXG5cbi8qKlxuICogQHBhcmFtIHtCbG9ja3F1b3RlfSBub2RlXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IF9cbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiBAcGFyYW0ge0luZm99IGluZm9cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBibG9ja3F1b3RlKG5vZGUsIF8sIHN0YXRlLCBpbmZvKSB7XG4gIGNvbnN0IGV4aXQgPSBzdGF0ZS5lbnRlcignYmxvY2txdW90ZScpXG4gIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pXG4gIHRyYWNrZXIubW92ZSgnPiAnKVxuICB0cmFja2VyLnNoaWZ0KDIpXG4gIGNvbnN0IHZhbHVlID0gc3RhdGUuaW5kZW50TGluZXMoXG4gICAgc3RhdGUuY29udGFpbmVyRmxvdyhub2RlLCB0cmFja2VyLmN1cnJlbnQoKSksXG4gICAgbWFwXG4gIClcbiAgZXhpdCgpXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKiogQHR5cGUge01hcH0gKi9cbmZ1bmN0aW9uIG1hcChsaW5lLCBfLCBibGFuaykge1xuICByZXR1cm4gJz4nICsgKGJsYW5rID8gJycgOiAnICcpICsgbGluZVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7Q29uc3RydWN0TmFtZSwgVW5zYWZlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICovXG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxDb25zdHJ1Y3ROYW1lPn0gc3RhY2tcbiAqIEBwYXJhbSB7VW5zYWZlfSBwYXR0ZXJuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdHRlcm5JblNjb3BlKHN0YWNrLCBwYXR0ZXJuKSB7XG4gIHJldHVybiAoXG4gICAgbGlzdEluU2NvcGUoc3RhY2ssIHBhdHRlcm4uaW5Db25zdHJ1Y3QsIHRydWUpICYmXG4gICAgIWxpc3RJblNjb3BlKHN0YWNrLCBwYXR0ZXJuLm5vdEluQ29uc3RydWN0LCBmYWxzZSlcbiAgKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8Q29uc3RydWN0TmFtZT59IHN0YWNrXG4gKiBAcGFyYW0ge1Vuc2FmZVsnaW5Db25zdHJ1Y3QnXX0gbGlzdFxuICogQHBhcmFtIHtib29sZWFufSBub25lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gbGlzdEluU2NvcGUoc3RhY2ssIGxpc3QsIG5vbmUpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ID09PSAnc3RyaW5nJykge1xuICAgIGxpc3QgPSBbbGlzdF1cbiAgfVxuXG4gIGlmICghbGlzdCB8fCBsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBub25lXG4gIH1cblxuICBsZXQgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGlzdC5sZW5ndGgpIHtcbiAgICBpZiAoc3RhY2suaW5jbHVkZXMobGlzdFtpbmRleF0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7QnJlYWssIFBhcmVudHN9IGZyb20gJ21kYXN0J1xuICogQGltcG9ydCB7SW5mbywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKi9cblxuaW1wb3J0IHtwYXR0ZXJuSW5TY29wZX0gZnJvbSAnLi4vdXRpbC9wYXR0ZXJuLWluLXNjb3BlLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7QnJlYWt9IF9cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gXzFcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiBAcGFyYW0ge0luZm99IGluZm9cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXJkQnJlYWsoXywgXzEsIHN0YXRlLCBpbmZvKSB7XG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCBzdGF0ZS51bnNhZmUubGVuZ3RoKSB7XG4gICAgLy8gSWYgd2UgY2FuXHUyMDE5dCBwdXQgZW9scyBpbiB0aGlzIGNvbnN0cnVjdCAoc2V0ZXh0IGhlYWRpbmdzLCB0YWJsZXMpLCB1c2UgYVxuICAgIC8vIHNwYWNlIGluc3RlYWQuXG4gICAgaWYgKFxuICAgICAgc3RhdGUudW5zYWZlW2luZGV4XS5jaGFyYWN0ZXIgPT09ICdcXG4nICYmXG4gICAgICBwYXR0ZXJuSW5TY29wZShzdGF0ZS5zdGFjaywgc3RhdGUudW5zYWZlW2luZGV4XSlcbiAgICApIHtcbiAgICAgIHJldHVybiAvWyBcXHRdLy50ZXN0KGluZm8uYmVmb3JlKSA/ICcnIDogJyAnXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICdcXFxcXFxuJ1xufVxuIiwgIi8qKlxuICogR2V0IHRoZSBjb3VudCBvZiB0aGUgbG9uZ2VzdCByZXBlYXRpbmcgc3RyZWFrIG9mIGBzdWJzdHJpbmdgIGluIGB2YWx1ZWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiAgIENvbnRlbnQgdG8gc2VhcmNoIGluLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YnN0cmluZ1xuICogICBTdWJzdHJpbmcgdG8gbG9vayBmb3IsIHR5cGljYWxseSBvbmUgY2hhcmFjdGVyLlxuICogQHJldHVybnMge251bWJlcn1cbiAqICAgQ291bnQgb2YgbW9zdCBmcmVxdWVudCBhZGphY2VudCBgc3Vic3RyaW5nYHMgaW4gYHZhbHVlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvbmdlc3RTdHJlYWsodmFsdWUsIHN1YnN0cmluZykge1xuICBjb25zdCBzb3VyY2UgPSBTdHJpbmcodmFsdWUpXG4gIGxldCBpbmRleCA9IHNvdXJjZS5pbmRleE9mKHN1YnN0cmluZylcbiAgbGV0IGV4cGVjdGVkID0gaW5kZXhcbiAgbGV0IGNvdW50ID0gMFxuICBsZXQgbWF4ID0gMFxuXG4gIGlmICh0eXBlb2Ygc3Vic3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHN1YnN0cmluZycpXG4gIH1cblxuICB3aGlsZSAoaW5kZXggIT09IC0xKSB7XG4gICAgaWYgKGluZGV4ID09PSBleHBlY3RlZCkge1xuICAgICAgaWYgKCsrY291bnQgPiBtYXgpIHtcbiAgICAgICAgbWF4ID0gY291bnRcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAxXG4gICAgfVxuXG4gICAgZXhwZWN0ZWQgPSBpbmRleCArIHN1YnN0cmluZy5sZW5ndGhcbiAgICBpbmRleCA9IHNvdXJjZS5pbmRleE9mKHN1YnN0cmluZywgZXhwZWN0ZWQpXG4gIH1cblxuICByZXR1cm4gbWF4XG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqIEBpbXBvcnQge0NvZGV9IGZyb20gJ21kYXN0J1xuICovXG5cbi8qKlxuICogQHBhcmFtIHtDb2RlfSBub2RlXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRDb2RlQXNJbmRlbnRlZChub2RlLCBzdGF0ZSkge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBzdGF0ZS5vcHRpb25zLmZlbmNlcyA9PT0gZmFsc2UgJiZcbiAgICAgIG5vZGUudmFsdWUgJiZcbiAgICAgIC8vIElmIHRoZXJlXHUyMDE5cyBubyBpbmZvXHUyMDI2XG4gICAgICAhbm9kZS5sYW5nICYmXG4gICAgICAvLyBBbmQgdGhlcmVcdTIwMTlzIGEgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyXHUyMDI2XG4gICAgICAvW14gXFxyXFxuXS8udGVzdChub2RlLnZhbHVlKSAmJlxuICAgICAgLy8gQW5kIHRoZSB2YWx1ZSBkb2Vzblx1MjAxOXQgc3RhcnQgb3IgZW5kIGluIGEgYmxhbmtcdTIwMjZcbiAgICAgICEvXltcXHQgXSooPzpbXFxyXFxuXXwkKXwoPzpefFtcXHJcXG5dKVtcXHQgXSokLy50ZXN0KG5vZGUudmFsdWUpXG4gIClcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge09wdGlvbnMsIFN0YXRlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICovXG5cbi8qKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEByZXR1cm5zIHtFeGNsdWRlPE9wdGlvbnNbJ2ZlbmNlJ10sIG51bGwgfCB1bmRlZmluZWQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tGZW5jZShzdGF0ZSkge1xuICBjb25zdCBtYXJrZXIgPSBzdGF0ZS5vcHRpb25zLmZlbmNlIHx8ICdgJ1xuXG4gIGlmIChtYXJrZXIgIT09ICdgJyAmJiBtYXJrZXIgIT09ICd+Jykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdDYW5ub3Qgc2VyaWFsaXplIGNvZGUgd2l0aCBgJyArXG4gICAgICAgIG1hcmtlciArXG4gICAgICAgICdgIGZvciBgb3B0aW9ucy5mZW5jZWAsIGV4cGVjdGVkIGBgIGAgYGAgb3IgYH5gJ1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBtYXJrZXJcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0luZm8sIE1hcCwgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKiBAaW1wb3J0IHtDb2RlLCBQYXJlbnRzfSBmcm9tICdtZGFzdCdcbiAqL1xuXG5pbXBvcnQge2xvbmdlc3RTdHJlYWt9IGZyb20gJ2xvbmdlc3Qtc3RyZWFrJ1xuaW1wb3J0IHtmb3JtYXRDb2RlQXNJbmRlbnRlZH0gZnJvbSAnLi4vdXRpbC9mb3JtYXQtY29kZS1hcy1pbmRlbnRlZC5qcydcbmltcG9ydCB7Y2hlY2tGZW5jZX0gZnJvbSAnLi4vdXRpbC9jaGVjay1mZW5jZS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge0NvZGV9IG5vZGVcbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gX1xuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEBwYXJhbSB7SW5mb30gaW5mb1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGUobm9kZSwgXywgc3RhdGUsIGluZm8pIHtcbiAgY29uc3QgbWFya2VyID0gY2hlY2tGZW5jZShzdGF0ZSlcbiAgY29uc3QgcmF3ID0gbm9kZS52YWx1ZSB8fCAnJ1xuICBjb25zdCBzdWZmaXggPSBtYXJrZXIgPT09ICdgJyA/ICdHcmF2ZUFjY2VudCcgOiAnVGlsZGUnXG5cbiAgaWYgKGZvcm1hdENvZGVBc0luZGVudGVkKG5vZGUsIHN0YXRlKSkge1xuICAgIGNvbnN0IGV4aXQgPSBzdGF0ZS5lbnRlcignY29kZUluZGVudGVkJylcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmluZGVudExpbmVzKHJhdywgbWFwKVxuICAgIGV4aXQoKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgY29uc3QgdHJhY2tlciA9IHN0YXRlLmNyZWF0ZVRyYWNrZXIoaW5mbylcbiAgY29uc3Qgc2VxdWVuY2UgPSBtYXJrZXIucmVwZWF0KE1hdGgubWF4KGxvbmdlc3RTdHJlYWsocmF3LCBtYXJrZXIpICsgMSwgMykpXG4gIGNvbnN0IGV4aXQgPSBzdGF0ZS5lbnRlcignY29kZUZlbmNlZCcpXG4gIGxldCB2YWx1ZSA9IHRyYWNrZXIubW92ZShzZXF1ZW5jZSlcblxuICBpZiAobm9kZS5sYW5nKSB7XG4gICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlLmVudGVyKGBjb2RlRmVuY2VkTGFuZyR7c3VmZml4fWApXG4gICAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKFxuICAgICAgc3RhdGUuc2FmZShub2RlLmxhbmcsIHtcbiAgICAgICAgYmVmb3JlOiB2YWx1ZSxcbiAgICAgICAgYWZ0ZXI6ICcgJyxcbiAgICAgICAgZW5jb2RlOiBbJ2AnXSxcbiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KClcbiAgICAgIH0pXG4gICAgKVxuICAgIHN1YmV4aXQoKVxuICB9XG5cbiAgaWYgKG5vZGUubGFuZyAmJiBub2RlLm1ldGEpIHtcbiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUuZW50ZXIoYGNvZGVGZW5jZWRNZXRhJHtzdWZmaXh9YClcbiAgICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoJyAnKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZShcbiAgICAgIHN0YXRlLnNhZmUobm9kZS5tZXRhLCB7XG4gICAgICAgIGJlZm9yZTogdmFsdWUsXG4gICAgICAgIGFmdGVyOiAnXFxuJyxcbiAgICAgICAgZW5jb2RlOiBbJ2AnXSxcbiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KClcbiAgICAgIH0pXG4gICAgKVxuICAgIHN1YmV4aXQoKVxuICB9XG5cbiAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKCdcXG4nKVxuXG4gIGlmIChyYXcpIHtcbiAgICB2YWx1ZSArPSB0cmFja2VyLm1vdmUocmF3ICsgJ1xcbicpXG4gIH1cblxuICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoc2VxdWVuY2UpXG4gIGV4aXQoKVxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqIEB0eXBlIHtNYXB9ICovXG5mdW5jdGlvbiBtYXAobGluZSwgXywgYmxhbmspIHtcbiAgcmV0dXJuIChibGFuayA/ICcnIDogJyAgICAnKSArIGxpbmVcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge09wdGlvbnMsIFN0YXRlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICovXG5cbi8qKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEByZXR1cm5zIHtFeGNsdWRlPE9wdGlvbnNbJ3F1b3RlJ10sIG51bGwgfCB1bmRlZmluZWQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tRdW90ZShzdGF0ZSkge1xuICBjb25zdCBtYXJrZXIgPSBzdGF0ZS5vcHRpb25zLnF1b3RlIHx8ICdcIidcblxuICBpZiAobWFya2VyICE9PSAnXCInICYmIG1hcmtlciAhPT0gXCInXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQ2Fubm90IHNlcmlhbGl6ZSB0aXRsZSB3aXRoIGAnICtcbiAgICAgICAgbWFya2VyICtcbiAgICAgICAgJ2AgZm9yIGBvcHRpb25zLnF1b3RlYCwgZXhwZWN0ZWQgYFwiYCwgb3IgYFxcJ2AnXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIG1hcmtlclxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7SW5mbywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKiBAaW1wb3J0IHtEZWZpbml0aW9uLCBQYXJlbnRzfSBmcm9tICdtZGFzdCdcbiAqL1xuXG5pbXBvcnQge2NoZWNrUXVvdGV9IGZyb20gJy4uL3V0aWwvY2hlY2stcXVvdGUuanMnXG5cbi8qKlxuICogQHBhcmFtIHtEZWZpbml0aW9ufSBub2RlXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IF9cbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiBAcGFyYW0ge0luZm99IGluZm9cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbml0aW9uKG5vZGUsIF8sIHN0YXRlLCBpbmZvKSB7XG4gIGNvbnN0IHF1b3RlID0gY2hlY2tRdW90ZShzdGF0ZSlcbiAgY29uc3Qgc3VmZml4ID0gcXVvdGUgPT09ICdcIicgPyAnUXVvdGUnIDogJ0Fwb3N0cm9waGUnXG4gIGNvbnN0IGV4aXQgPSBzdGF0ZS5lbnRlcignZGVmaW5pdGlvbicpXG4gIGxldCBzdWJleGl0ID0gc3RhdGUuZW50ZXIoJ2xhYmVsJylcbiAgY29uc3QgdHJhY2tlciA9IHN0YXRlLmNyZWF0ZVRyYWNrZXIoaW5mbylcbiAgbGV0IHZhbHVlID0gdHJhY2tlci5tb3ZlKCdbJylcbiAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKFxuICAgIHN0YXRlLnNhZmUoc3RhdGUuYXNzb2NpYXRpb25JZChub2RlKSwge1xuICAgICAgYmVmb3JlOiB2YWx1ZSxcbiAgICAgIGFmdGVyOiAnXScsXG4gICAgICAuLi50cmFja2VyLmN1cnJlbnQoKVxuICAgIH0pXG4gIClcbiAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKCddOiAnKVxuXG4gIHN1YmV4aXQoKVxuXG4gIGlmIChcbiAgICAvLyBJZiB0aGVyZVx1MjAxOXMgbm8gdXJsLCBvclx1MjAyNlxuICAgICFub2RlLnVybCB8fFxuICAgIC8vIElmIHRoZXJlIGFyZSBjb250cm9sIGNoYXJhY3RlcnMgb3Igd2hpdGVzcGFjZS5cbiAgICAvW1xcMC0gXFx1MDA3Rl0vLnRlc3Qobm9kZS51cmwpXG4gICkge1xuICAgIHN1YmV4aXQgPSBzdGF0ZS5lbnRlcignZGVzdGluYXRpb25MaXRlcmFsJylcbiAgICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoJzwnKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZShcbiAgICAgIHN0YXRlLnNhZmUobm9kZS51cmwsIHtiZWZvcmU6IHZhbHVlLCBhZnRlcjogJz4nLCAuLi50cmFja2VyLmN1cnJlbnQoKX0pXG4gICAgKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZSgnPicpXG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gd2hpdGVzcGFjZSwgcmF3IGlzIHByZXR0aWVyLlxuICAgIHN1YmV4aXQgPSBzdGF0ZS5lbnRlcignZGVzdGluYXRpb25SYXcnKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZShcbiAgICAgIHN0YXRlLnNhZmUobm9kZS51cmwsIHtcbiAgICAgICAgYmVmb3JlOiB2YWx1ZSxcbiAgICAgICAgYWZ0ZXI6IG5vZGUudGl0bGUgPyAnICcgOiAnXFxuJyxcbiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgc3ViZXhpdCgpXG5cbiAgaWYgKG5vZGUudGl0bGUpIHtcbiAgICBzdWJleGl0ID0gc3RhdGUuZW50ZXIoYHRpdGxlJHtzdWZmaXh9YClcbiAgICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoJyAnICsgcXVvdGUpXG4gICAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKFxuICAgICAgc3RhdGUuc2FmZShub2RlLnRpdGxlLCB7XG4gICAgICAgIGJlZm9yZTogdmFsdWUsXG4gICAgICAgIGFmdGVyOiBxdW90ZSxcbiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KClcbiAgICAgIH0pXG4gICAgKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZShxdW90ZSlcbiAgICBzdWJleGl0KClcbiAgfVxuXG4gIGV4aXQoKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7T3B0aW9ucywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHJldHVybnMge0V4Y2x1ZGU8T3B0aW9uc1snZW1waGFzaXMnXSwgbnVsbCB8IHVuZGVmaW5lZD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0VtcGhhc2lzKHN0YXRlKSB7XG4gIGNvbnN0IG1hcmtlciA9IHN0YXRlLm9wdGlvbnMuZW1waGFzaXMgfHwgJyonXG5cbiAgaWYgKG1hcmtlciAhPT0gJyonICYmIG1hcmtlciAhPT0gJ18nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBzZXJpYWxpemUgZW1waGFzaXMgd2l0aCBgJyArXG4gICAgICAgIG1hcmtlciArXG4gICAgICAgICdgIGZvciBgb3B0aW9ucy5lbXBoYXNpc2AsIGV4cGVjdGVkIGAqYCwgb3IgYF9gJ1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBtYXJrZXJcbn1cbiIsICIvKipcbiAqIEVuY29kZSBhIGNvZGUgcG9pbnQgYXMgYSBjaGFyYWN0ZXIgcmVmZXJlbmNlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiAgIENvZGUgcG9pbnQgdG8gZW5jb2RlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRW5jb2RlZCBjaGFyYWN0ZXIgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGNvZGUpIHtcbiAgcmV0dXJuICcmI3gnICsgY29kZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArICc7J1xufVxuIiwgIi8qKlxuICogQGltcG9ydCB7Q29kZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuaW1wb3J0IHsgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZSwgdW5pY29kZVB1bmN0dWF0aW9uLCB1bmljb2RlV2hpdGVzcGFjZSB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcic7XG4vKipcbiAqIENsYXNzaWZ5IHdoZXRoZXIgYSBjb2RlIHJlcHJlc2VudHMgd2hpdGVzcGFjZSwgcHVuY3R1YXRpb24sIG9yIHNvbWV0aGluZ1xuICogZWxzZS5cbiAqXG4gKiBVc2VkIGZvciBhdHRlbnRpb24gKGVtcGhhc2lzLCBzdHJvbmcpLCB3aG9zZSBzZXF1ZW5jZXMgY2FuIG9wZW4gb3IgY2xvc2VcbiAqIGJhc2VkIG9uIHRoZSBjbGFzcyBvZiBzdXJyb3VuZGluZyBjaGFyYWN0ZXJzLlxuICpcbiAqID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBlb2YgKGBudWxsYCkgaXMgc2VlbiBhcyB3aGl0ZXNwYWNlLlxuICpcbiAqIEBwYXJhbSB7Q29kZX0gY29kZVxuICogICBDb2RlLlxuICogQHJldHVybnMge3R5cGVvZiBjb25zdGFudHMuY2hhcmFjdGVyR3JvdXBXaGl0ZXNwYWNlIHwgdHlwZW9mIGNvbnN0YW50cy5jaGFyYWN0ZXJHcm91cFB1bmN0dWF0aW9uIHwgdW5kZWZpbmVkfVxuICogICBHcm91cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5Q2hhcmFjdGVyKGNvZGUpIHtcbiAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlKSkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmICh1bmljb2RlUHVuY3R1YXRpb24oY29kZSkpIHtcbiAgICByZXR1cm4gMjtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge0VuY29kZVNpZGVzfSBmcm9tICcuLi90eXBlcy5qcydcbiAqL1xuXG5pbXBvcnQge2NsYXNzaWZ5Q2hhcmFjdGVyfSBmcm9tICdtaWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXInXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0byBlbmNvZGUgKGFzIGEgY2hhcmFjdGVyIHJlZmVyZW5jZSkgdGhlIGNoYXJhY3RlcnNcbiAqIHN1cnJvdW5kaW5nIGFuIGF0dGVudGlvbiBydW4uXG4gKlxuICogV2hpY2ggY2hhcmFjdGVycyBhcmUgYXJvdW5kIGFuIGF0dGVudGlvbiBydW4gaW5mbHVlbmNlIHdoZXRoZXIgaXQgd29ya3Mgb3JcbiAqIG5vdC5cbiAqXG4gKiBTZWUgPGh0dHBzOi8vZ2l0aHViLmNvbS9vcmdzL3N5bnRheC10cmVlL2Rpc2N1c3Npb25zLzYwPiBmb3IgbW9yZSBpbmZvLlxuICogU2VlIHRoaXMgbWFya2Rvd24gaW4gYSBwYXJ0aWN1bGFyIHJlbmRlcmVyIHRvIHNlZSB3aGF0IHdvcmtzOlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgQSAobGV0dGVyIGluc2lkZSkgfCBCIChwdW5jdHVhdGlvbiBpbnNpZGUpIHwgQyAod2hpdGVzcGFjZSBpbnNpZGUpIHwgRCAobm90aGluZyBpbnNpZGUpIHxcbiAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICogfCAxIChsZXR0ZXIgb3V0c2lkZSkgICAgICB8IHgqeSp6ICAgICAgICAgICAgIHwgeCouKnogICAgICAgICAgICAgICAgICB8IHgqICp6ICAgICAgICAgICAgICAgICB8IHgqKnogICAgICAgICAgICAgICB8XG4gKiB8IDIgKHB1bmN0dWF0aW9uIG91dHNpZGUpIHwgLip5Ki4gICAgICAgICAgICAgfCAuKi4qLiAgICAgICAgICAgICAgICAgIHwgLiogKi4gICAgICAgICAgICAgICAgIHwgLioqLiAgICAgICAgICAgICAgIHxcbiAqIHwgMyAod2hpdGVzcGFjZSBvdXRzaWRlKSAgfCB4ICp5KiB6ICAgICAgICAgICB8IHggKi4qIHogICAgICAgICAgICAgICAgfCB4ICogKiB6ICAgICAgICAgICAgICAgfCB4ICoqIHogICAgICAgICAgICAgfFxuICogfCA0IChub3RoaW5nIG91dHNpZGUpICAgICB8ICp4KiAgICAgICAgICAgICAgIHwgKi4qICAgICAgICAgICAgICAgICAgICB8ICogKiAgICAgICAgICAgICAgICAgICB8ICoqICAgICAgICAgICAgICAgICB8XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gb3V0c2lkZVxuICogICBDb2RlIHBvaW50IG9uIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBydW4uXG4gKiBAcGFyYW0ge251bWJlcn0gaW5zaWRlXG4gKiAgIENvZGUgcG9pbnQgb24gdGhlIGlubmVyIHNpZGUgb2YgdGhlIHJ1bi5cbiAqIEBwYXJhbSB7JyonIHwgJ18nfSBtYXJrZXJcbiAqICAgTWFya2VyIG9mIHRoZSBydW4uXG4gKiAgIFVuZGVyc2NvcmVzIGFyZSBoYW5kbGVkIG1vcmUgc3RyaWN0bHkgKHRoZXkgZm9ybSBsZXNzIG9mdGVuKSB0aGFuXG4gKiAgIGFzdGVyaXNrcy5cbiAqIEByZXR1cm5zIHtFbmNvZGVTaWRlc31cbiAqICAgV2hldGhlciB0byBlbmNvZGUgY2hhcmFjdGVycy5cbiAqL1xuLy8gSW1wb3J0YW50OiBwdW5jdHVhdGlvbiBtdXN0IG5ldmVyIGJlIGVuY29kZWQuXG4vLyBQdW5jdHVhdGlvbiBpcyBzb2xlbHkgdXNlZCBieSBtYXJrZG93biBjb25zdHJ1Y3RzLlxuLy8gQW5kIGJ5IGVuY29kaW5nIGl0c2VsZi5cbi8vIEVuY29kaW5nIHRoZW0gd2lsbCBicmVhayBjb25zdHJ1Y3RzIG9yIGRvdWJsZSBlbmNvZGUgdGhpbmdzLlxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUluZm8ob3V0c2lkZSwgaW5zaWRlLCBtYXJrZXIpIHtcbiAgY29uc3Qgb3V0c2lkZUtpbmQgPSBjbGFzc2lmeUNoYXJhY3RlcihvdXRzaWRlKVxuICBjb25zdCBpbnNpZGVLaW5kID0gY2xhc3NpZnlDaGFyYWN0ZXIoaW5zaWRlKVxuXG4gIC8vIExldHRlciBvdXRzaWRlOlxuICBpZiAob3V0c2lkZUtpbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBpbnNpZGVLaW5kID09PSB1bmRlZmluZWRcbiAgICAgID8gLy8gTGV0dGVyIGluc2lkZTpcbiAgICAgICAgLy8gd2UgaGF2ZSB0byBlbmNvZGUgKmJvdGgqIGxldHRlcnMgZm9yIGBfYCBhcyBpdCBpcyBsb29zZXIuXG4gICAgICAgIC8vIGl0IGFscmVhZHkgZm9ybXMgZm9yIGAqYCAoYW5kIEdGTXMgYH5gKS5cbiAgICAgICAgbWFya2VyID09PSAnXydcbiAgICAgICAgPyB7aW5zaWRlOiB0cnVlLCBvdXRzaWRlOiB0cnVlfVxuICAgICAgICA6IHtpbnNpZGU6IGZhbHNlLCBvdXRzaWRlOiBmYWxzZX1cbiAgICAgIDogaW5zaWRlS2luZCA9PT0gMVxuICAgICAgICA/IC8vIFdoaXRlc3BhY2UgaW5zaWRlOiBlbmNvZGUgYm90aCAobGV0dGVyLCB3aGl0ZXNwYWNlKS5cbiAgICAgICAgICB7aW5zaWRlOiB0cnVlLCBvdXRzaWRlOiB0cnVlfVxuICAgICAgICA6IC8vIFB1bmN0dWF0aW9uIGluc2lkZTogZW5jb2RlIG91dGVyIChsZXR0ZXIpXG4gICAgICAgICAge2luc2lkZTogZmFsc2UsIG91dHNpZGU6IHRydWV9XG4gIH1cblxuICAvLyBXaGl0ZXNwYWNlIG91dHNpZGU6XG4gIGlmIChvdXRzaWRlS2luZCA9PT0gMSkge1xuICAgIHJldHVybiBpbnNpZGVLaW5kID09PSB1bmRlZmluZWRcbiAgICAgID8gLy8gTGV0dGVyIGluc2lkZTogYWxyZWFkeSBmb3Jtcy5cbiAgICAgICAge2luc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlfVxuICAgICAgOiBpbnNpZGVLaW5kID09PSAxXG4gICAgICAgID8gLy8gV2hpdGVzcGFjZSBpbnNpZGU6IGVuY29kZSBib3RoICh3aGl0ZXNwYWNlKS5cbiAgICAgICAgICB7aW5zaWRlOiB0cnVlLCBvdXRzaWRlOiB0cnVlfVxuICAgICAgICA6IC8vIFB1bmN0dWF0aW9uIGluc2lkZTogYWxyZWFkeSBmb3Jtcy5cbiAgICAgICAgICB7aW5zaWRlOiBmYWxzZSwgb3V0c2lkZTogZmFsc2V9XG4gIH1cblxuICAvLyBQdW5jdHVhdGlvbiBvdXRzaWRlOlxuICByZXR1cm4gaW5zaWRlS2luZCA9PT0gdW5kZWZpbmVkXG4gICAgPyAvLyBMZXR0ZXIgaW5zaWRlOiBhbHJlYWR5IGZvcm1zLlxuICAgICAge2luc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlfVxuICAgIDogaW5zaWRlS2luZCA9PT0gMVxuICAgICAgPyAvLyBXaGl0ZXNwYWNlIGluc2lkZTogZW5jb2RlIGlubmVyICh3aGl0ZXNwYWNlKS5cbiAgICAgICAge2luc2lkZTogdHJ1ZSwgb3V0c2lkZTogZmFsc2V9XG4gICAgICA6IC8vIFB1bmN0dWF0aW9uIGluc2lkZTogYWxyZWFkeSBmb3Jtcy5cbiAgICAgICAge2luc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlfVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7SW5mbywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKiBAaW1wb3J0IHtFbXBoYXNpcywgUGFyZW50c30gZnJvbSAnbWRhc3QnXG4gKi9cblxuaW1wb3J0IHtjaGVja0VtcGhhc2lzfSBmcm9tICcuLi91dGlsL2NoZWNrLWVtcGhhc2lzLmpzJ1xuaW1wb3J0IHtlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2V9IGZyb20gJy4uL3V0aWwvZW5jb2RlLWNoYXJhY3Rlci1yZWZlcmVuY2UuanMnXG5pbXBvcnQge2VuY29kZUluZm99IGZyb20gJy4uL3V0aWwvZW5jb2RlLWluZm8uanMnXG5cbmVtcGhhc2lzLnBlZWsgPSBlbXBoYXNpc1BlZWtcblxuLyoqXG4gKiBAcGFyYW0ge0VtcGhhc2lzfSBub2RlXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IF9cbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiBAcGFyYW0ge0luZm99IGluZm9cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbXBoYXNpcyhub2RlLCBfLCBzdGF0ZSwgaW5mbykge1xuICBjb25zdCBtYXJrZXIgPSBjaGVja0VtcGhhc2lzKHN0YXRlKVxuICBjb25zdCBleGl0ID0gc3RhdGUuZW50ZXIoJ2VtcGhhc2lzJylcbiAgY29uc3QgdHJhY2tlciA9IHN0YXRlLmNyZWF0ZVRyYWNrZXIoaW5mbylcbiAgY29uc3QgYmVmb3JlID0gdHJhY2tlci5tb3ZlKG1hcmtlcilcblxuICBsZXQgYmV0d2VlbiA9IHRyYWNrZXIubW92ZShcbiAgICBzdGF0ZS5jb250YWluZXJQaHJhc2luZyhub2RlLCB7XG4gICAgICBhZnRlcjogbWFya2VyLFxuICAgICAgYmVmb3JlLFxuICAgICAgLi4udHJhY2tlci5jdXJyZW50KClcbiAgICB9KVxuICApXG4gIGNvbnN0IGJldHdlZW5IZWFkID0gYmV0d2Vlbi5jaGFyQ29kZUF0KDApXG4gIGNvbnN0IG9wZW4gPSBlbmNvZGVJbmZvKFxuICAgIGluZm8uYmVmb3JlLmNoYXJDb2RlQXQoaW5mby5iZWZvcmUubGVuZ3RoIC0gMSksXG4gICAgYmV0d2VlbkhlYWQsXG4gICAgbWFya2VyXG4gIClcblxuICBpZiAob3Blbi5pbnNpZGUpIHtcbiAgICBiZXR3ZWVuID0gZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGJldHdlZW5IZWFkKSArIGJldHdlZW4uc2xpY2UoMSlcbiAgfVxuXG4gIGNvbnN0IGJldHdlZW5UYWlsID0gYmV0d2Vlbi5jaGFyQ29kZUF0KGJldHdlZW4ubGVuZ3RoIC0gMSlcbiAgY29uc3QgY2xvc2UgPSBlbmNvZGVJbmZvKGluZm8uYWZ0ZXIuY2hhckNvZGVBdCgwKSwgYmV0d2VlblRhaWwsIG1hcmtlcilcblxuICBpZiAoY2xvc2UuaW5zaWRlKSB7XG4gICAgYmV0d2VlbiA9IGJldHdlZW4uc2xpY2UoMCwgLTEpICsgZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGJldHdlZW5UYWlsKVxuICB9XG5cbiAgY29uc3QgYWZ0ZXIgPSB0cmFja2VyLm1vdmUobWFya2VyKVxuXG4gIGV4aXQoKVxuXG4gIHN0YXRlLmF0dGVudGlvbkVuY29kZVN1cnJvdW5kaW5nSW5mbyA9IHtcbiAgICBhZnRlcjogY2xvc2Uub3V0c2lkZSxcbiAgICBiZWZvcmU6IG9wZW4ub3V0c2lkZVxuICB9XG4gIHJldHVybiBiZWZvcmUgKyBiZXR3ZWVuICsgYWZ0ZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0VtcGhhc2lzfSBfXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IF8xXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW1waGFzaXNQZWVrKF8sIF8xLCBzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUub3B0aW9ucy5lbXBoYXNpcyB8fCAnKidcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuTm9kZX0gVW5pc3ROb2RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBhcmVudH0gVW5pc3RQYXJlbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cycpLlZpc2l0b3JSZXN1bHR9IFZpc2l0b3JSZXN1bHRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtFeGNsdWRlPGltcG9ydCgndW5pc3QtdXRpbC1pcycpLlRlc3QsIHVuZGVmaW5lZD4gfCB1bmRlZmluZWR9IFRlc3RcbiAqICAgVGVzdCBmcm9tIGB1bmlzdC11dGlsLWlzYC5cbiAqXG4gKiAgIE5vdGU6IHdlIGhhdmUgcmVtb3ZlIGFuZCBhZGQgYHVuZGVmaW5lZGAsIGJlY2F1c2Ugb3RoZXJ3aXNlIHdoZW4gZ2VuZXJhdGluZ1xuICogICBhdXRvbWF0aWMgYC5kLnRzYCBmaWxlcywgVFMgdHJpZXMgdG8gZmxhdHRlbiBwYXRocyBmcm9tIGEgbG9jYWwgcGVyc3BlY3RpdmUsXG4gKiAgIHdoaWNoIGRvZXNuXHUyMDE5dCB3b3JrIHdoZW4gcHVibGlzaGluZyBvbiBucG0uXG4gKi9cblxuLy8gVG8gZG86IHVzZSB0eXBlcyBmcm9tIGB1bmlzdC11dGlsLXZpc2l0LXBhcmVudHNgIHdoZW4gaXRcdTIwMTlzIHJlbGVhc2VkLlxuXG4vKipcbiAqIEB0eXBlZGVmIHsoXG4gKiAgIEZuIGV4dGVuZHMgKHZhbHVlOiBhbnkpID0+IHZhbHVlIGlzIGluZmVyIFRoaW5nXG4gKiAgID8gVGhpbmdcbiAqICAgOiBGYWxsYmFja1xuICogKX0gUHJlZGljYXRlXG4gKiAgIEdldCB0aGUgdmFsdWUgb2YgYSB0eXBlIGd1YXJkIGBGbmAuXG4gKiBAdGVtcGxhdGUgRm5cbiAqICAgVmFsdWU7IHR5cGljYWxseSBmdW5jdGlvbiB0aGF0IGlzIGEgdHlwZSBndWFyZCAoc3VjaCBhcyBgKHgpOiB4IGlzIFlgKS5cbiAqIEB0ZW1wbGF0ZSBGYWxsYmFja1xuICogICBWYWx1ZSB0byB5aWVsZCBpZiBgRm5gIGlzIG5vdCBhIHR5cGUgZ3VhcmQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBDaGVjayBleHRlbmRzIG51bGwgfCB1bmRlZmluZWQgLy8gTm8gdGVzdC5cbiAqICAgPyBWYWx1ZVxuICogICA6IFZhbHVlIGV4dGVuZHMge3R5cGU6IENoZWNrfSAvLyBTdHJpbmcgKHR5cGUpIHRlc3QuXG4gKiAgID8gVmFsdWVcbiAqICAgOiBWYWx1ZSBleHRlbmRzIENoZWNrIC8vIFBhcnRpYWwgdGVzdC5cbiAqICAgPyBWYWx1ZVxuICogICA6IENoZWNrIGV4dGVuZHMgRnVuY3Rpb24gLy8gRnVuY3Rpb24gdGVzdC5cbiAqICAgPyBQcmVkaWNhdGU8Q2hlY2ssIFZhbHVlPiBleHRlbmRzIFZhbHVlXG4gKiAgICAgPyBQcmVkaWNhdGU8Q2hlY2ssIFZhbHVlPlxuICogICAgIDogbmV2ZXJcbiAqICAgOiBuZXZlciAvLyBTb21lIG90aGVyIHRlc3Q/XG4gKiApfSBNYXRjaGVzT25lXG4gKiAgIENoZWNrIHdoZXRoZXIgYSBub2RlIG1hdGNoZXMgYSBwcmltaXRpdmUgY2hlY2sgaW4gdGhlIHR5cGUgc3lzdGVtLlxuICogQHRlbXBsYXRlIFZhbHVlXG4gKiAgIFZhbHVlOyB0eXBpY2FsbHkgdW5pc3QgYE5vZGVgLlxuICogQHRlbXBsYXRlIENoZWNrXG4gKiAgIFZhbHVlOyB0eXBpY2FsbHkgYHVuaXN0LXV0aWwtaXNgLWNvbXBhdGlibGUgdGVzdCwgYnV0IG5vdCBhcnJheXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBDaGVjayBleHRlbmRzIEFycmF5PGFueT5cbiAqICAgPyBNYXRjaGVzT25lPFZhbHVlLCBDaGVja1trZXlvZiBDaGVja10+XG4gKiAgIDogTWF0Y2hlc09uZTxWYWx1ZSwgQ2hlY2s+XG4gKiApfSBNYXRjaGVzXG4gKiAgIENoZWNrIHdoZXRoZXIgYSBub2RlIG1hdGNoZXMgYSBjaGVjayBpbiB0aGUgdHlwZSBzeXN0ZW0uXG4gKiBAdGVtcGxhdGUgVmFsdWVcbiAqICAgVmFsdWU7IHR5cGljYWxseSB1bmlzdCBgTm9kZWAuXG4gKiBAdGVtcGxhdGUgQ2hlY2tcbiAqICAgVmFsdWU7IHR5cGljYWxseSBgdW5pc3QtdXRpbC1pc2AtY29tcGF0aWJsZSB0ZXN0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgezAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDkgfCAxMH0gVWludFxuICogICBOdW1iZXI7IGNhcHBlZCByZWFzb25hYmx5LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0kgZXh0ZW5kcyAwID8gMSA6IEkgZXh0ZW5kcyAxID8gMiA6IEkgZXh0ZW5kcyAyID8gMyA6IEkgZXh0ZW5kcyAzID8gNCA6IEkgZXh0ZW5kcyA0ID8gNSA6IEkgZXh0ZW5kcyA1ID8gNiA6IEkgZXh0ZW5kcyA2ID8gNyA6IEkgZXh0ZW5kcyA3ID8gOCA6IEkgZXh0ZW5kcyA4ID8gOSA6IDEwfSBJbmNyZW1lbnRcbiAqICAgSW5jcmVtZW50IGEgbnVtYmVyIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW0k9MF1cbiAqICAgSW5kZXguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBOb2RlIGV4dGVuZHMgVW5pc3RQYXJlbnRcbiAqICAgPyBOb2RlIGV4dGVuZHMge2NoaWxkcmVuOiBBcnJheTxpbmZlciBDaGlsZHJlbj59XG4gKiAgICAgPyBDaGlsZCBleHRlbmRzIENoaWxkcmVuID8gTm9kZSA6IG5ldmVyXG4gKiAgICAgOiBuZXZlclxuICogICA6IG5ldmVyXG4gKiApfSBJbnRlcm5hbFBhcmVudFxuICogICBDb2xsZWN0IG5vZGVzIHRoYXQgY2FuIGJlIHBhcmVudHMgb2YgYENoaWxkYC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBOb2RlXG4gKiAgIEFsbCBub2RlIHR5cGVzIGluIGEgdHJlZS5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBDaGlsZFxuICogICBOb2RlIHRvIHNlYXJjaCBmb3IuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7SW50ZXJuYWxQYXJlbnQ8SW5jbHVzaXZlRGVzY2VuZGFudDxUcmVlPiwgQ2hpbGQ+fSBQYXJlbnRcbiAqICAgQ29sbGVjdCBub2RlcyBpbiBgVHJlZWAgdGhhdCBjYW4gYmUgcGFyZW50cyBvZiBgQ2hpbGRgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFRyZWVcbiAqICAgQWxsIG5vZGUgdHlwZXMgaW4gYSB0cmVlLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IENoaWxkXG4gKiAgIE5vZGUgdG8gc2VhcmNoIGZvci5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoXG4gKiAgIERlcHRoIGV4dGVuZHMgTWF4XG4gKiAgID8gbmV2ZXJcbiAqICAgOlxuICogICAgIHwgSW50ZXJuYWxQYXJlbnQ8Tm9kZSwgQ2hpbGQ+XG4gKiAgICAgfCBJbnRlcm5hbEFuY2VzdG9yPE5vZGUsIEludGVybmFsUGFyZW50PE5vZGUsIENoaWxkPiwgTWF4LCBJbmNyZW1lbnQ8RGVwdGg+PlxuICogKX0gSW50ZXJuYWxBbmNlc3RvclxuICogICBDb2xsZWN0IG5vZGVzIGluIGBUcmVlYCB0aGF0IGNhbiBiZSBhbmNlc3RvcnMgb2YgYENoaWxkYC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBOb2RlXG4gKiAgIEFsbCBub2RlIHR5cGVzIGluIGEgdHJlZS5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBDaGlsZFxuICogICBOb2RlIHRvIHNlYXJjaCBmb3IuXG4gKiBAdGVtcGxhdGUge1VpbnR9IFtNYXg9MTBdXG4gKiAgIE1heDsgc2VhcmNoZXMgdXAgdG8gdGhpcyBkZXB0aC5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW0RlcHRoPTBdXG4gKiAgIEN1cnJlbnQgZGVwdGguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBUcmVlIGV4dGVuZHMgVW5pc3RQYXJlbnRcbiAqICAgICA/IERlcHRoIGV4dGVuZHMgTWF4XG4gKiAgICAgICA/IFRyZWVcbiAqICAgICAgIDogVHJlZSB8IEluY2x1c2l2ZURlc2NlbmRhbnQ8VHJlZVsnY2hpbGRyZW4nXVtudW1iZXJdLCBNYXgsIEluY3JlbWVudDxEZXB0aD4+XG4gKiAgICAgOiBUcmVlXG4gKiApfSBJbmNsdXNpdmVEZXNjZW5kYW50XG4gKiAgIENvbGxlY3QgYWxsIChpbmNsdXNpdmUpIGRlc2NlbmRhbnRzIG9mIGBUcmVlYC5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdGhpcyBzZWVtcyB0byBiZSB0aGUgZmFzdGVzdCB3YXkgdG9cbiAqICAgPiByZWN1cnNlIHdpdGhvdXQgYWN0dWFsbHkgcnVubmluZyBpbnRvIGFuIGluZmluaXRlIGxvb3AsIHdoaWNoIHRoZVxuICogICA+IHByZXZpb3VzIHZlcnNpb24gZGlkLlxuICogICA+XG4gKiAgID4gUHJhY3RpY2FsbHksIGEgbWF4IG9mIGAyYCBpcyB0eXBpY2FsbHkgZW5vdWdoIGFzc3VtaW5nIGEgYFJvb3RgIGlzXG4gKiAgID4gcGFzc2VkLCBidXQgaXQgZG9lc25cdTIwMTl0IGltcHJvdmUgcGVyZm9ybWFuY2UuXG4gKiAgID4gSXQgZ2V0cyBoaWdoZXIgd2l0aCBgTGlzdCA+IExpc3RJdGVtID4gVGFibGUgPiBUYWJsZVJvdyA+IFRhYmxlQ2VsbGAuXG4gKiAgID4gVXNpbmcgdXAgdG8gYDEwYCBkb2Vzblx1MjAxOXQgaHVydCBvciBoZWxwIGVpdGhlci5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBUcmVlXG4gKiAgIFRyZWUgdHlwZS5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW01heD0xMF1cbiAqICAgTWF4OyBzZWFyY2hlcyB1cCB0byB0aGlzIGRlcHRoLlxuICogQHRlbXBsYXRlIHtVaW50fSBbRGVwdGg9MF1cbiAqICAgQ3VycmVudCBkZXB0aC5cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBWaXNpdG9yXG4gKiAgIEhhbmRsZSBhIG5vZGUgKG1hdGNoaW5nIGB0ZXN0YCwgaWYgZ2l2ZW4pLlxuICpcbiAqICAgVmlzaXRvcnMgYXJlIGZyZWUgdG8gdHJhbnNmb3JtIGBub2RlYC5cbiAqICAgVGhleSBjYW4gYWxzbyB0cmFuc2Zvcm0gYHBhcmVudGAuXG4gKlxuICogICBSZXBsYWNpbmcgYG5vZGVgIGl0c2VsZiwgaWYgYFNLSVBgIGlzIG5vdCByZXR1cm5lZCwgc3RpbGwgY2F1c2VzIGl0c1xuICogICBkZXNjZW5kYW50cyB0byBiZSB3YWxrZWQgKHdoaWNoIGlzIGEgYnVnKS5cbiAqXG4gKiAgIFdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYCAob3IgbmV4dCBzaWJsaW5ncywgaW5cbiAqICAgY2FzZSBvZiByZXZlcnNlKSwgdGhlIGBWaXNpdG9yYCBzaG91bGQgcmV0dXJuIGEgbmV3IGBJbmRleGAgdG8gc3BlY2lmeSB0aGVcbiAqICAgc2libGluZyB0byB0cmF2ZXJzZSBhZnRlciBgbm9kZWAgaXMgdHJhdmVyc2VkLlxuICogICBBZGRpbmcgb3IgcmVtb3ZpbmcgbmV4dCBzaWJsaW5ncyBvZiBgbm9kZWAgKG9yIHByZXZpb3VzIHNpYmxpbmdzLCBpbiBjYXNlXG4gKiAgIG9mIHJldmVyc2UpIGlzIGhhbmRsZWQgYXMgZXhwZWN0ZWQgd2l0aG91dCBuZWVkaW5nIHRvIHJldHVybiBhIG5ldyBgSW5kZXhgLlxuICpcbiAqICAgUmVtb3ZpbmcgdGhlIGNoaWxkcmVuIHByb3BlcnR5IG9mIGBwYXJlbnRgIHN0aWxsIHJlc3VsdHMgaW4gdGhlbSBiZWluZ1xuICogICB0cmF2ZXJzZWQuXG4gKiBAcGFyYW0ge1Zpc2l0ZWR9IG5vZGVcbiAqICAgRm91bmQgbm9kZS5cbiAqIEBwYXJhbSB7VmlzaXRlZCBleHRlbmRzIFVuaXN0Tm9kZSA/IG51bWJlciB8IHVuZGVmaW5lZCA6IG5ldmVyfSBpbmRleFxuICogICBJbmRleCBvZiBgbm9kZWAgaW4gYHBhcmVudGAuXG4gKiBAcGFyYW0ge0FuY2VzdG9yIGV4dGVuZHMgVW5pc3RQYXJlbnQgPyBBbmNlc3RvciB8IHVuZGVmaW5lZCA6IG5ldmVyfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGBub2RlYC5cbiAqIEByZXR1cm5zIHtWaXNpdG9yUmVzdWx0fVxuICogICBXaGF0IHRvIGRvIG5leHQuXG4gKlxuICogICBBbiBgSW5kZXhgIGlzIHRyZWF0ZWQgYXMgYSB0dXBsZSBvZiBgW0NPTlRJTlVFLCBJbmRleF1gLlxuICogICBBbiBgQWN0aW9uYCBpcyB0cmVhdGVkIGFzIGEgdHVwbGUgb2YgYFtBY3Rpb25dYC5cbiAqXG4gKiAgIFBhc3NpbmcgYSB0dXBsZSBiYWNrIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGBBY3Rpb25gIGlzIGBTS0lQYC5cbiAqICAgV2hlbiB0aGUgYEFjdGlvbmAgaXMgYEVYSVRgLCB0aGF0IGFjdGlvbiBjYW4gYmUgcmV0dXJuZWQuXG4gKiAgIFdoZW4gdGhlIGBBY3Rpb25gIGlzIGBDT05USU5VRWAsIGBJbmRleGAgY2FuIGJlIHJldHVybmVkLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFtWaXNpdGVkPVVuaXN0Tm9kZV1cbiAqICAgVmlzaXRlZCBub2RlIHR5cGUuXG4gKiBAdGVtcGxhdGUge1VuaXN0UGFyZW50fSBbQW5jZXN0b3I9VW5pc3RQYXJlbnRdXG4gKiAgIEFuY2VzdG9yIHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7VmlzaXRvcjxWaXNpdGVkLCBQYXJlbnQ8QW5jZXN0b3IsIFZpc2l0ZWQ+Pn0gQnVpbGRWaXNpdG9yRnJvbU1hdGNoXG4gKiAgIEJ1aWxkIGEgdHlwZWQgYFZpc2l0b3JgIGZ1bmN0aW9uIGZyb20gYSBub2RlIGFuZCBhbGwgcG9zc2libGUgcGFyZW50cy5cbiAqXG4gKiAgIEl0IHdpbGwgaW5mZXIgd2hpY2ggdmFsdWVzIGFyZSBwYXNzZWQgYXMgYG5vZGVgIGFuZCB3aGljaCBhcyBgcGFyZW50YC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBWaXNpdGVkXG4gKiAgIE5vZGUgdHlwZS5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3RQYXJlbnR9IEFuY2VzdG9yXG4gKiAgIFBhcmVudCB0eXBlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhcbiAqICAgQnVpbGRWaXNpdG9yRnJvbU1hdGNoPFxuICogICAgIE1hdGNoZXM8RGVzY2VuZGFudCwgQ2hlY2s+LFxuICogICAgIEV4dHJhY3Q8RGVzY2VuZGFudCwgVW5pc3RQYXJlbnQ+XG4gKiAgID5cbiAqICl9IEJ1aWxkVmlzaXRvckZyb21EZXNjZW5kYW50c1xuICogICBCdWlsZCBhIHR5cGVkIGBWaXNpdG9yYCBmdW5jdGlvbiBmcm9tIGEgbGlzdCBvZiBkZXNjZW5kYW50cyBhbmQgYSB0ZXN0LlxuICpcbiAqICAgSXQgd2lsbCBpbmZlciB3aGljaCB2YWx1ZXMgYXJlIHBhc3NlZCBhcyBgbm9kZWAgYW5kIHdoaWNoIGFzIGBwYXJlbnRgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IERlc2NlbmRhbnRcbiAqICAgTm9kZSB0eXBlLlxuICogQHRlbXBsYXRlIHtUZXN0fSBDaGVja1xuICogICBUZXN0IHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBCdWlsZFZpc2l0b3JGcm9tRGVzY2VuZGFudHM8XG4gKiAgICAgSW5jbHVzaXZlRGVzY2VuZGFudDxUcmVlPixcbiAqICAgICBDaGVja1xuICogICA+XG4gKiApfSBCdWlsZFZpc2l0b3JcbiAqICAgQnVpbGQgYSB0eXBlZCBgVmlzaXRvcmAgZnVuY3Rpb24gZnJvbSBhIHRyZWUgYW5kIGEgdGVzdC5cbiAqXG4gKiAgIEl0IHdpbGwgaW5mZXIgd2hpY2ggdmFsdWVzIGFyZSBwYXNzZWQgYXMgYG5vZGVgIGFuZCB3aGljaCBhcyBgcGFyZW50YC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBbVHJlZT1VbmlzdE5vZGVdXG4gKiAgIE5vZGUgdHlwZS5cbiAqIEB0ZW1wbGF0ZSB7VGVzdH0gW0NoZWNrPVRlc3RdXG4gKiAgIFRlc3QgdHlwZS5cbiAqL1xuXG5pbXBvcnQge3Zpc2l0UGFyZW50c30gZnJvbSAndW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzJ1xuXG5leHBvcnQge0NPTlRJTlVFLCBFWElULCBTS0lQfSBmcm9tICd1bmlzdC11dGlsLXZpc2l0LXBhcmVudHMnXG5cbi8qKlxuICogVmlzaXQgbm9kZXMuXG4gKlxuICogVGhpcyBhbGdvcml0aG0gcGVyZm9ybXMgKmRlcHRoLWZpcnN0KiAqdHJlZSB0cmF2ZXJzYWwqIGluICpwcmVvcmRlcipcbiAqICgqKk5MUioqKSBvciBpZiBgcmV2ZXJzZWAgaXMgZ2l2ZW4sIGluICpyZXZlcnNlIHByZW9yZGVyKiAoKipOUkwqKikuXG4gKlxuICogWW91IGNhbiBjaG9vc2UgZm9yIHdoaWNoIG5vZGVzIGB2aXNpdG9yYCBpcyBjYWxsZWQgYnkgcGFzc2luZyBhIGB0ZXN0YC5cbiAqIEZvciBjb21wbGV4IHRlc3RzLCB5b3Ugc2hvdWxkIHRlc3QgeW91cnNlbGYgaW4gYHZpc2l0b3JgLCBhcyBpdCB3aWxsIGJlXG4gKiBmYXN0ZXIgYW5kIHdpbGwgaGF2ZSBpbXByb3ZlZCB0eXBlIGluZm9ybWF0aW9uLlxuICpcbiAqIFdhbGtpbmcgdGhlIHRyZWUgaXMgYW4gaW50ZW5zaXZlIHRhc2suXG4gKiBNYWtlIHVzZSBvZiB0aGUgcmV0dXJuIHZhbHVlcyBvZiB0aGUgdmlzaXRvciB3aGVuIHBvc3NpYmxlLlxuICogSW5zdGVhZCBvZiB3YWxraW5nIGEgdHJlZSBtdWx0aXBsZSB0aW1lcywgd2FsayBpdCBvbmNlLCB1c2UgYHVuaXN0LXV0aWwtaXNgXG4gKiB0byBjaGVjayBpZiBhIG5vZGUgbWF0Y2hlcywgYW5kIHRoZW4gcGVyZm9ybSBkaWZmZXJlbnQgb3BlcmF0aW9ucy5cbiAqXG4gKiBZb3UgY2FuIGNoYW5nZSB0aGUgdHJlZS5cbiAqIFNlZSBgVmlzaXRvcmAgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAb3ZlcmxvYWRcbiAqIEBwYXJhbSB7VHJlZX0gdHJlZVxuICogQHBhcmFtIHtDaGVja30gY2hlY2tcbiAqIEBwYXJhbSB7QnVpbGRWaXNpdG9yPFRyZWUsIENoZWNrPn0gdmlzaXRvclxuICogQHBhcmFtIHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3JldmVyc2VdXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICpcbiAqIEBvdmVybG9hZFxuICogQHBhcmFtIHtUcmVlfSB0cmVlXG4gKiBAcGFyYW0ge0J1aWxkVmlzaXRvcjxUcmVlPn0gdmlzaXRvclxuICogQHBhcmFtIHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3JldmVyc2VdXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICpcbiAqIEBwYXJhbSB7VW5pc3ROb2RlfSB0cmVlXG4gKiAgIFRyZWUgdG8gdHJhdmVyc2UuXG4gKiBAcGFyYW0ge1Zpc2l0b3IgfCBUZXN0fSB0ZXN0T3JWaXNpdG9yXG4gKiAgIGB1bmlzdC11dGlsLWlzYC1jb21wYXRpYmxlIHRlc3QgKG9wdGlvbmFsLCBvbWl0IHRvIHBhc3MgYSB2aXNpdG9yKS5cbiAqIEBwYXJhbSB7VmlzaXRvciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbdmlzaXRvck9yUmV2ZXJzZV1cbiAqICAgSGFuZGxlIGVhY2ggbm9kZSAod2hlbiB0ZXN0IGlzIG9taXR0ZWQsIHBhc3MgYHJldmVyc2VgKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFttYXliZVJldmVyc2U9ZmFsc2VdXG4gKiAgIFRyYXZlcnNlIGluIHJldmVyc2UgcHJlb3JkZXIgKE5STCkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBwcmVvcmRlciAoTkxSKS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiAgIE5vdGhpbmcuXG4gKlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFRyZWVcbiAqICAgTm9kZSB0eXBlLlxuICogQHRlbXBsYXRlIHtUZXN0fSBDaGVja1xuICogICBgdW5pc3QtdXRpbC1pc2AtY29tcGF0aWJsZSB0ZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlzaXQodHJlZSwgdGVzdE9yVmlzaXRvciwgdmlzaXRvck9yUmV2ZXJzZSwgbWF5YmVSZXZlcnNlKSB7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9ICovXG4gIGxldCByZXZlcnNlXG4gIC8qKiBAdHlwZSB7VGVzdH0gKi9cbiAgbGV0IHRlc3RcbiAgLyoqIEB0eXBlIHtWaXNpdG9yfSAqL1xuICBsZXQgdmlzaXRvclxuXG4gIGlmIChcbiAgICB0eXBlb2YgdGVzdE9yVmlzaXRvciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB2aXNpdG9yT3JSZXZlcnNlICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHRlc3QgPSB1bmRlZmluZWRcbiAgICB2aXNpdG9yID0gdGVzdE9yVmlzaXRvclxuICAgIHJldmVyc2UgPSB2aXNpdG9yT3JSZXZlcnNlXG4gIH0gZWxzZSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYXNzdW1lIHRoZSBvdmVybG9hZCB3aXRoIHRlc3Qgd2FzIGdpdmVuLlxuICAgIHRlc3QgPSB0ZXN0T3JWaXNpdG9yXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYXNzdW1lIHRoZSBvdmVybG9hZCB3aXRoIHRlc3Qgd2FzIGdpdmVuLlxuICAgIHZpc2l0b3IgPSB2aXNpdG9yT3JSZXZlcnNlXG4gICAgcmV2ZXJzZSA9IG1heWJlUmV2ZXJzZVxuICB9XG5cbiAgdmlzaXRQYXJlbnRzKHRyZWUsIHRlc3QsIG92ZXJsb2FkLCByZXZlcnNlKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1VuaXN0Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge0FycmF5PFVuaXN0UGFyZW50Pn0gcGFyZW50c1xuICAgKi9cbiAgZnVuY3Rpb24gb3ZlcmxvYWQobm9kZSwgcGFyZW50cykge1xuICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudHNbcGFyZW50cy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGluZGV4ID0gcGFyZW50ID8gcGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZSkgOiB1bmRlZmluZWRcbiAgICByZXR1cm4gdmlzaXRvcihub2RlLCBpbmRleCwgcGFyZW50KVxuICB9XG59XG4iLCAiLy8gTm90ZTogdHlwZXMgZXhwb3J0ZWQgZnJvbSBgaW5kZXguZC50c2BcbmV4cG9ydCB7Q09OVElOVUUsIEVYSVQsIFNLSVAsIHZpc2l0fSBmcm9tICcuL2xpYi9pbmRleC5qcydcbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuTm9kZXN9IE5vZGVzXG4gKlxuICogQHR5cGVkZWYgT3B0aW9uc1xuICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbaW5jbHVkZUltYWdlQWx0PXRydWVdXG4gKiAgIFdoZXRoZXIgdG8gdXNlIGBhbHRgIGZvciBgaW1hZ2VgcyAoZGVmYXVsdDogYHRydWVgKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtpbmNsdWRlSHRtbD10cnVlXVxuICogICBXaGV0aGVyIHRvIHVzZSBgdmFsdWVgIG9mIEhUTUwgKGRlZmF1bHQ6IGB0cnVlYCkuXG4gKi9cblxuLyoqIEB0eXBlIHtPcHRpb25zfSAqL1xuY29uc3QgZW1wdHlPcHRpb25zID0ge31cblxuLyoqXG4gKiBHZXQgdGhlIHRleHQgY29udGVudCBvZiBhIG5vZGUgb3IgbGlzdCBvZiBub2Rlcy5cbiAqXG4gKiBQcmVmZXJzIHRoZSBub2RlXHUyMDE5cyBwbGFpbi10ZXh0IGZpZWxkcywgb3RoZXJ3aXNlIHNlcmlhbGl6ZXMgaXRzIGNoaWxkcmVuLFxuICogYW5kIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBhcnJheSwgc2VyaWFsaXplIHRoZSBub2RlcyBpbiBpdC5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IFt2YWx1ZV1cbiAqICAgVGhpbmcgdG8gc2VyaWFsaXplLCB0eXBpY2FsbHkgYE5vZGVgLlxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgYHZhbHVlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnNcbiAgY29uc3QgaW5jbHVkZUltYWdlQWx0ID1cbiAgICB0eXBlb2Ygc2V0dGluZ3MuaW5jbHVkZUltYWdlQWx0ID09PSAnYm9vbGVhbidcbiAgICAgID8gc2V0dGluZ3MuaW5jbHVkZUltYWdlQWx0XG4gICAgICA6IHRydWVcbiAgY29uc3QgaW5jbHVkZUh0bWwgPVxuICAgIHR5cGVvZiBzZXR0aW5ncy5pbmNsdWRlSHRtbCA9PT0gJ2Jvb2xlYW4nID8gc2V0dGluZ3MuaW5jbHVkZUh0bWwgOiB0cnVlXG5cbiAgcmV0dXJuIG9uZSh2YWx1ZSwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbClcbn1cblxuLyoqXG4gKiBPbmUgbm9kZSBvciBzZXZlcmFsIG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqICAgVGhpbmcgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlSW1hZ2VBbHRcbiAqICAgSW5jbHVkZSBpbWFnZSBgYWx0YHMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVIdG1sXG4gKiAgIEluY2x1ZGUgSFRNTC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gb25lKHZhbHVlLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKSB7XG4gIGlmIChub2RlKHZhbHVlKSkge1xuICAgIGlmICgndmFsdWUnIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUudHlwZSA9PT0gJ2h0bWwnICYmICFpbmNsdWRlSHRtbCA/ICcnIDogdmFsdWUudmFsdWVcbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZUltYWdlQWx0ICYmICdhbHQnIGluIHZhbHVlICYmIHZhbHVlLmFsdCkge1xuICAgICAgcmV0dXJuIHZhbHVlLmFsdFxuICAgIH1cblxuICAgIGlmICgnY2hpbGRyZW4nIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gYWxsKHZhbHVlLmNoaWxkcmVuLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKVxuICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBhbGwodmFsdWUsIGluY2x1ZGVJbWFnZUFsdCwgaW5jbHVkZUh0bWwpXG4gIH1cblxuICByZXR1cm4gJydcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBsaXN0IG9mIG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8dW5rbm93bj59IHZhbHVlc1xuICogICBUaGluZyB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVJbWFnZUFsdFxuICogICBJbmNsdWRlIGltYWdlIGBhbHRgcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUh0bWxcbiAqICAgSW5jbHVkZSBIVE1MLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU2VyaWFsaXplZCBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gYWxsKHZhbHVlcywgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCkge1xuICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59ICovXG4gIGNvbnN0IHJlc3VsdCA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IG9uZSh2YWx1ZXNbaW5kZXhdLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGB2YWx1ZWAgbG9va3MgbGlrZSBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogICBUaGluZy5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBOb2Rlc31cbiAqICAgV2hldGhlciBgdmFsdWVgIGlzIGEgbm9kZS5cbiAqL1xuZnVuY3Rpb24gbm9kZSh2YWx1ZSkge1xuICByZXR1cm4gQm9vbGVhbih2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5PcHRpb25zfSBPcHRpb25zXG4gKi9cblxuZXhwb3J0IHt0b1N0cmluZ30gZnJvbSAnLi9saWIvaW5kZXguanMnXG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqIEBpbXBvcnQge0hlYWRpbmd9IGZyb20gJ21kYXN0J1xuICovXG5cbmltcG9ydCB7RVhJVCwgdmlzaXR9IGZyb20gJ3VuaXN0LXV0aWwtdmlzaXQnXG5pbXBvcnQge3RvU3RyaW5nfSBmcm9tICdtZGFzdC11dGlsLXRvLXN0cmluZydcblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRpbmd9IG5vZGVcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEhlYWRpbmdBc1NldGV4dChub2RlLCBzdGF0ZSkge1xuICBsZXQgbGl0ZXJhbFdpdGhCcmVhayA9IGZhbHNlXG5cbiAgLy8gTG9vayBmb3IgbGl0ZXJhbHMgd2l0aCBhIGxpbmUgYnJlYWsuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIGFsc29cbiAgdmlzaXQobm9kZSwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAoXG4gICAgICAoJ3ZhbHVlJyBpbiBub2RlICYmIC9cXHI/XFxufFxcci8udGVzdChub2RlLnZhbHVlKSkgfHxcbiAgICAgIG5vZGUudHlwZSA9PT0gJ2JyZWFrJ1xuICAgICkge1xuICAgICAgbGl0ZXJhbFdpdGhCcmVhayA9IHRydWVcbiAgICAgIHJldHVybiBFWElUXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBCb29sZWFuKFxuICAgICghbm9kZS5kZXB0aCB8fCBub2RlLmRlcHRoIDwgMykgJiZcbiAgICAgIHRvU3RyaW5nKG5vZGUpICYmXG4gICAgICAoc3RhdGUub3B0aW9ucy5zZXRleHQgfHwgbGl0ZXJhbFdpdGhCcmVhaylcbiAgKVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7SW5mbywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKiBAaW1wb3J0IHtIZWFkaW5nLCBQYXJlbnRzfSBmcm9tICdtZGFzdCdcbiAqL1xuXG5pbXBvcnQge2VuY29kZUNoYXJhY3RlclJlZmVyZW5jZX0gZnJvbSAnLi4vdXRpbC9lbmNvZGUtY2hhcmFjdGVyLXJlZmVyZW5jZS5qcydcbmltcG9ydCB7Zm9ybWF0SGVhZGluZ0FzU2V0ZXh0fSBmcm9tICcuLi91dGlsL2Zvcm1hdC1oZWFkaW5nLWFzLXNldGV4dC5qcydcblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRpbmd9IG5vZGVcbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gX1xuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEBwYXJhbSB7SW5mb30gaW5mb1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhlYWRpbmcobm9kZSwgXywgc3RhdGUsIGluZm8pIHtcbiAgY29uc3QgcmFuayA9IE1hdGgubWF4KE1hdGgubWluKDYsIG5vZGUuZGVwdGggfHwgMSksIDEpXG4gIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pXG5cbiAgaWYgKGZvcm1hdEhlYWRpbmdBc1NldGV4dChub2RlLCBzdGF0ZSkpIHtcbiAgICBjb25zdCBleGl0ID0gc3RhdGUuZW50ZXIoJ2hlYWRpbmdTZXRleHQnKVxuICAgIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZS5lbnRlcigncGhyYXNpbmcnKVxuICAgIGNvbnN0IHZhbHVlID0gc3RhdGUuY29udGFpbmVyUGhyYXNpbmcobm9kZSwge1xuICAgICAgLi4udHJhY2tlci5jdXJyZW50KCksXG4gICAgICBiZWZvcmU6ICdcXG4nLFxuICAgICAgYWZ0ZXI6ICdcXG4nXG4gICAgfSlcbiAgICBzdWJleGl0KClcbiAgICBleGl0KClcblxuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSArXG4gICAgICAnXFxuJyArXG4gICAgICAocmFuayA9PT0gMSA/ICc9JyA6ICctJykucmVwZWF0KFxuICAgICAgICAvLyBUaGUgd2hvbGUgc2l6ZVx1MjAyNlxuICAgICAgICB2YWx1ZS5sZW5ndGggLVxuICAgICAgICAgIC8vIE1pbnVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBsYXN0IEVPTCAob3JcbiAgICAgICAgICAvLyAwIGlmIHRoZXJlIGlzIG5vbmUpXHUyMDI2XG4gICAgICAgICAgKE1hdGgubWF4KHZhbHVlLmxhc3RJbmRleE9mKCdcXHInKSwgdmFsdWUubGFzdEluZGV4T2YoJ1xcbicpKSArIDEpXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgY29uc3Qgc2VxdWVuY2UgPSAnIycucmVwZWF0KHJhbmspXG4gIGNvbnN0IGV4aXQgPSBzdGF0ZS5lbnRlcignaGVhZGluZ0F0eCcpXG4gIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZS5lbnRlcigncGhyYXNpbmcnKVxuXG4gIC8vIE5vdGU6IGZvciBwcm9wZXIgdHJhY2tpbmcsIHdlIHNob3VsZCByZXNldCB0aGUgb3V0cHV0IHBvc2l0aW9ucyB3aGVuIHRoZXJlXG4gIC8vIGlzIG5vIGNvbnRlbnQgcmV0dXJuZWQsIGJlY2F1c2UgdGhlbiB0aGUgc3BhY2UgaXMgbm90IG91dHB1dC5cbiAgLy8gUHJhY3RpY2FsbHksIGluIHRoYXQgY2FzZSwgdGhlcmUgaXMgbm8gY29udGVudCwgc28gaXQgZG9lc25cdTIwMTl0IG1hdHRlciB0aGF0XG4gIC8vIHdlXHUyMDE5dmUgdHJhY2tlZCBvbmUgdG9vIG1hbnkgY2hhcmFjdGVycy5cbiAgdHJhY2tlci5tb3ZlKHNlcXVlbmNlICsgJyAnKVxuXG4gIGxldCB2YWx1ZSA9IHN0YXRlLmNvbnRhaW5lclBocmFzaW5nKG5vZGUsIHtcbiAgICBiZWZvcmU6ICcjICcsXG4gICAgYWZ0ZXI6ICdcXG4nLFxuICAgIC4uLnRyYWNrZXIuY3VycmVudCgpXG4gIH0pXG5cbiAgaWYgKC9eW1xcdCBdLy50ZXN0KHZhbHVlKSkge1xuICAgIC8vIFRvIGRvOiB3aGF0IGVmZmVjdCBoYXMgdGhlIGNoYXJhY3RlciByZWZlcmVuY2Ugb24gdHJhY2tpbmc/XG4gICAgdmFsdWUgPSBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUuY2hhckNvZGVBdCgwKSkgKyB2YWx1ZS5zbGljZSgxKVxuICB9XG5cbiAgdmFsdWUgPSB2YWx1ZSA/IHNlcXVlbmNlICsgJyAnICsgdmFsdWUgOiBzZXF1ZW5jZVxuXG4gIGlmIChzdGF0ZS5vcHRpb25zLmNsb3NlQXR4KSB7XG4gICAgdmFsdWUgKz0gJyAnICsgc2VxdWVuY2VcbiAgfVxuXG4gIHN1YmV4aXQoKVxuICBleGl0KClcblxuICByZXR1cm4gdmFsdWVcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0h0bWx9IGZyb20gJ21kYXN0J1xuICovXG5cbmh0bWwucGVlayA9IGh0bWxQZWVrXG5cbi8qKlxuICogQHBhcmFtIHtIdG1sfSBub2RlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbChub2RlKSB7XG4gIHJldHVybiBub2RlLnZhbHVlIHx8ICcnXG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaHRtbFBlZWsoKSB7XG4gIHJldHVybiAnPCdcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0luZm8sIFN0YXRlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICogQGltcG9ydCB7SW1hZ2UsIFBhcmVudHN9IGZyb20gJ21kYXN0J1xuICovXG5cbmltcG9ydCB7Y2hlY2tRdW90ZX0gZnJvbSAnLi4vdXRpbC9jaGVjay1xdW90ZS5qcydcblxuaW1hZ2UucGVlayA9IGltYWdlUGVla1xuXG4vKipcbiAqIEBwYXJhbSB7SW1hZ2V9IG5vZGVcbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gX1xuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEBwYXJhbSB7SW5mb30gaW5mb1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltYWdlKG5vZGUsIF8sIHN0YXRlLCBpbmZvKSB7XG4gIGNvbnN0IHF1b3RlID0gY2hlY2tRdW90ZShzdGF0ZSlcbiAgY29uc3Qgc3VmZml4ID0gcXVvdGUgPT09ICdcIicgPyAnUXVvdGUnIDogJ0Fwb3N0cm9waGUnXG4gIGNvbnN0IGV4aXQgPSBzdGF0ZS5lbnRlcignaW1hZ2UnKVxuICBsZXQgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCdsYWJlbCcpXG4gIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pXG4gIGxldCB2YWx1ZSA9IHRyYWNrZXIubW92ZSgnIVsnKVxuICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoXG4gICAgc3RhdGUuc2FmZShub2RlLmFsdCwge2JlZm9yZTogdmFsdWUsIGFmdGVyOiAnXScsIC4uLnRyYWNrZXIuY3VycmVudCgpfSlcbiAgKVxuICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoJ10oJylcblxuICBzdWJleGl0KClcblxuICBpZiAoXG4gICAgLy8gSWYgdGhlcmVcdTIwMTlzIG5vIHVybCBidXQgdGhlcmUgaXMgYSB0aXRsZVx1MjAyNlxuICAgICghbm9kZS51cmwgJiYgbm9kZS50aXRsZSkgfHxcbiAgICAvLyBJZiB0aGVyZSBhcmUgY29udHJvbCBjaGFyYWN0ZXJzIG9yIHdoaXRlc3BhY2UuXG4gICAgL1tcXDAtIFxcdTAwN0ZdLy50ZXN0KG5vZGUudXJsKVxuICApIHtcbiAgICBzdWJleGl0ID0gc3RhdGUuZW50ZXIoJ2Rlc3RpbmF0aW9uTGl0ZXJhbCcpXG4gICAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKCc8JylcbiAgICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoXG4gICAgICBzdGF0ZS5zYWZlKG5vZGUudXJsLCB7YmVmb3JlOiB2YWx1ZSwgYWZ0ZXI6ICc+JywgLi4udHJhY2tlci5jdXJyZW50KCl9KVxuICAgIClcbiAgICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoJz4nKVxuICB9IGVsc2Uge1xuICAgIC8vIE5vIHdoaXRlc3BhY2UsIHJhdyBpcyBwcmV0dGllci5cbiAgICBzdWJleGl0ID0gc3RhdGUuZW50ZXIoJ2Rlc3RpbmF0aW9uUmF3JylcbiAgICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoXG4gICAgICBzdGF0ZS5zYWZlKG5vZGUudXJsLCB7XG4gICAgICAgIGJlZm9yZTogdmFsdWUsXG4gICAgICAgIGFmdGVyOiBub2RlLnRpdGxlID8gJyAnIDogJyknLFxuICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBzdWJleGl0KClcblxuICBpZiAobm9kZS50aXRsZSkge1xuICAgIHN1YmV4aXQgPSBzdGF0ZS5lbnRlcihgdGl0bGUke3N1ZmZpeH1gKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZSgnICcgKyBxdW90ZSlcbiAgICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoXG4gICAgICBzdGF0ZS5zYWZlKG5vZGUudGl0bGUsIHtcbiAgICAgICAgYmVmb3JlOiB2YWx1ZSxcbiAgICAgICAgYWZ0ZXI6IHF1b3RlLFxuICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKVxuICAgICAgfSlcbiAgICApXG4gICAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKHF1b3RlKVxuICAgIHN1YmV4aXQoKVxuICB9XG5cbiAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKCcpJylcbiAgZXhpdCgpXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaW1hZ2VQZWVrKCkge1xuICByZXR1cm4gJyEnXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtJbmZvLCBTdGF0ZX0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqIEBpbXBvcnQge0ltYWdlUmVmZXJlbmNlLCBQYXJlbnRzfSBmcm9tICdtZGFzdCdcbiAqL1xuXG5pbWFnZVJlZmVyZW5jZS5wZWVrID0gaW1hZ2VSZWZlcmVuY2VQZWVrXG5cbi8qKlxuICogQHBhcmFtIHtJbWFnZVJlZmVyZW5jZX0gbm9kZVxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBfXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHBhcmFtIHtJbmZvfSBpbmZvXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1hZ2VSZWZlcmVuY2Uobm9kZSwgXywgc3RhdGUsIGluZm8pIHtcbiAgY29uc3QgdHlwZSA9IG5vZGUucmVmZXJlbmNlVHlwZVxuICBjb25zdCBleGl0ID0gc3RhdGUuZW50ZXIoJ2ltYWdlUmVmZXJlbmNlJylcbiAgbGV0IHN1YmV4aXQgPSBzdGF0ZS5lbnRlcignbGFiZWwnKVxuICBjb25zdCB0cmFja2VyID0gc3RhdGUuY3JlYXRlVHJhY2tlcihpbmZvKVxuICBsZXQgdmFsdWUgPSB0cmFja2VyLm1vdmUoJyFbJylcbiAgY29uc3QgYWx0ID0gc3RhdGUuc2FmZShub2RlLmFsdCwge1xuICAgIGJlZm9yZTogdmFsdWUsXG4gICAgYWZ0ZXI6ICddJyxcbiAgICAuLi50cmFja2VyLmN1cnJlbnQoKVxuICB9KVxuICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoYWx0ICsgJ11bJylcblxuICBzdWJleGl0KClcbiAgLy8gSGlkZSB0aGUgZmFjdCB0aGF0IHdlXHUyMDE5cmUgaW4gcGhyYXNpbmcsIGJlY2F1c2UgZXNjYXBlcyBkb25cdTIwMTl0IHdvcmsuXG4gIGNvbnN0IHN0YWNrID0gc3RhdGUuc3RhY2tcbiAgc3RhdGUuc3RhY2sgPSBbXVxuICBzdWJleGl0ID0gc3RhdGUuZW50ZXIoJ3JlZmVyZW5jZScpXG4gIC8vIE5vdGU6IGZvciBwcm9wZXIgdHJhY2tpbmcsIHdlIHNob3VsZCByZXNldCB0aGUgb3V0cHV0IHBvc2l0aW9ucyB3aGVuIHdlIGVuZFxuICAvLyB1cCBtYWtpbmcgYSBgc2hvcnRjdXRgIHJlZmVyZW5jZSwgYmVjYXVzZSB0aGVuIHRoZXJlIGlzIG5vIGJyYWNlIG91dHB1dC5cbiAgLy8gUHJhY3RpY2FsbHksIGluIHRoYXQgY2FzZSwgdGhlcmUgaXMgbm8gY29udGVudCwgc28gaXQgZG9lc25cdTIwMTl0IG1hdHRlciB0aGF0XG4gIC8vIHdlXHUyMDE5dmUgdHJhY2tlZCBvbmUgdG9vIG1hbnkgY2hhcmFjdGVycy5cbiAgY29uc3QgcmVmZXJlbmNlID0gc3RhdGUuc2FmZShzdGF0ZS5hc3NvY2lhdGlvbklkKG5vZGUpLCB7XG4gICAgYmVmb3JlOiB2YWx1ZSxcbiAgICBhZnRlcjogJ10nLFxuICAgIC4uLnRyYWNrZXIuY3VycmVudCgpXG4gIH0pXG4gIHN1YmV4aXQoKVxuICBzdGF0ZS5zdGFjayA9IHN0YWNrXG4gIGV4aXQoKVxuXG4gIGlmICh0eXBlID09PSAnZnVsbCcgfHwgIWFsdCB8fCBhbHQgIT09IHJlZmVyZW5jZSkge1xuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZShyZWZlcmVuY2UgKyAnXScpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3Nob3J0Y3V0Jykge1xuICAgIC8vIFJlbW92ZSB0aGUgdW53YW50ZWQgYFtgLlxuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgLTEpXG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKCddJylcbiAgfVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGltYWdlUmVmZXJlbmNlUGVlaygpIHtcbiAgcmV0dXJuICchJ1xufVxuIiwgIi8qKlxuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKiBAaW1wb3J0IHtJbmxpbmVDb2RlLCBQYXJlbnRzfSBmcm9tICdtZGFzdCdcbiAqL1xuXG5pbmxpbmVDb2RlLnBlZWsgPSBpbmxpbmVDb2RlUGVla1xuXG4vKipcbiAqIEBwYXJhbSB7SW5saW5lQ29kZX0gbm9kZVxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBfXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlubGluZUNvZGUobm9kZSwgXywgc3RhdGUpIHtcbiAgbGV0IHZhbHVlID0gbm9kZS52YWx1ZSB8fCAnJ1xuICBsZXQgc2VxdWVuY2UgPSAnYCdcbiAgbGV0IGluZGV4ID0gLTFcblxuICAvLyBJZiB0aGVyZSBpcyBhIHNpbmdsZSBncmF2ZSBhY2NlbnQgb24gaXRzIG93biBpbiB0aGUgY29kZSwgdXNlIGEgZmVuY2Ugb2ZcbiAgLy8gdHdvLlxuICAvLyBJZiB0aGVyZSBhcmUgdHdvIGluIGEgcm93LCB1c2Ugb25lLlxuICB3aGlsZSAobmV3IFJlZ0V4cCgnKF58W15gXSknICsgc2VxdWVuY2UgKyAnKFteYF18JCknKS50ZXN0KHZhbHVlKSkge1xuICAgIHNlcXVlbmNlICs9ICdgJ1xuICB9XG5cbiAgLy8gSWYgdGhpcyBpcyBub3QganVzdCBzcGFjZXMgb3IgZW9scyAodGFicyBkb25cdTIwMTl0IGNvdW50KSwgYW5kIGVpdGhlciB0aGVcbiAgLy8gZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIgYXJlIGEgc3BhY2UsIGVvbCwgb3IgdGljaywgdGhlbiBwYWQgd2l0aCBzcGFjZXMuXG4gIGlmIChcbiAgICAvW14gXFxyXFxuXS8udGVzdCh2YWx1ZSkgJiZcbiAgICAoKC9eWyBcXHJcXG5dLy50ZXN0KHZhbHVlKSAmJiAvWyBcXHJcXG5dJC8udGVzdCh2YWx1ZSkpIHx8IC9eYHxgJC8udGVzdCh2YWx1ZSkpXG4gICkge1xuICAgIHZhbHVlID0gJyAnICsgdmFsdWUgKyAnICdcbiAgfVxuXG4gIC8vIFdlIGhhdmUgYSBwb3RlbnRpYWwgcHJvYmxlbTogY2VydGFpbiBjaGFyYWN0ZXJzIGFmdGVyIGVvbHMgY291bGQgcmVzdWx0IGluXG4gIC8vIGJsb2NrcyBiZWluZyBzZWVuLlxuICAvLyBGb3IgZXhhbXBsZSwgaWYgc29tZW9uZSBpbmplY3RlZCB0aGUgc3RyaW5nIGAnXFxuIyBiJ2AsIHRoZW4gdGhhdCB3b3VsZFxuICAvLyByZXN1bHQgaW4gYW4gQVRYIGhlYWRpbmcuXG4gIC8vIFdlIGNhblx1MjAxOXQgZXNjYXBlIGNoYXJhY3RlcnMgaW4gYGlubGluZUNvZGVgLCBidXQgYmVjYXVzZSBlb2xzIGFyZVxuICAvLyB0cmFuc2Zvcm1lZCB0byBzcGFjZXMgd2hlbiBnb2luZyBmcm9tIG1hcmtkb3duIHRvIEhUTUwgYW55d2F5LCB3ZSBjYW4gc3dhcFxuICAvLyB0aGVtIG91dC5cbiAgd2hpbGUgKCsraW5kZXggPCBzdGF0ZS51bnNhZmUubGVuZ3RoKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IHN0YXRlLnVuc2FmZVtpbmRleF1cbiAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGUuY29tcGlsZVBhdHRlcm4ocGF0dGVybilcbiAgICAvKiogQHR5cGUge1JlZ0V4cEV4ZWNBcnJheSB8IG51bGx9ICovXG4gICAgbGV0IG1hdGNoXG5cbiAgICAvLyBPbmx5IGxvb2sgZm9yIGBhdEJyZWFrYHMuXG4gICAgLy8gQnR3OiBub3RlIHRoYXQgYGF0QnJlYWtgIHBhdHRlcm5zIHdpbGwgYWx3YXlzIHN0YXJ0IHRoZSByZWdleCBhdCBMRiBvclxuICAgIC8vIENSLlxuICAgIGlmICghcGF0dGVybi5hdEJyZWFrKSBjb250aW51ZVxuXG4gICAgd2hpbGUgKChtYXRjaCA9IGV4cHJlc3Npb24uZXhlYyh2YWx1ZSkpKSB7XG4gICAgICBsZXQgcG9zaXRpb24gPSBtYXRjaC5pbmRleFxuXG4gICAgICAvLyBTdXBwb3J0IENSTEYgKHBhdHRlcm5zIG9ubHkgbG9vayBmb3Igb25lIG9mIHRoZSBjaGFyYWN0ZXJzKS5cbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUuY2hhckNvZGVBdChwb3NpdGlvbikgPT09IDEwIC8qIGBcXG5gICovICYmXG4gICAgICAgIHZhbHVlLmNoYXJDb2RlQXQocG9zaXRpb24gLSAxKSA9PT0gMTMgLyogYFxccmAgKi9cbiAgICAgICkge1xuICAgICAgICBwb3NpdGlvbi0tXG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcG9zaXRpb24pICsgJyAnICsgdmFsdWUuc2xpY2UobWF0Y2guaW5kZXggKyAxKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZXF1ZW5jZSArIHZhbHVlICsgc2VxdWVuY2Vcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBpbmxpbmVDb2RlUGVlaygpIHtcbiAgcmV0dXJuICdgJ1xufVxuIiwgIi8qKlxuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKiBAaW1wb3J0IHtMaW5rfSBmcm9tICdtZGFzdCdcbiAqL1xuXG5pbXBvcnQge3RvU3RyaW5nfSBmcm9tICdtZGFzdC11dGlsLXRvLXN0cmluZydcblxuLyoqXG4gKiBAcGFyYW0ge0xpbmt9IG5vZGVcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdExpbmtBc0F1dG9saW5rKG5vZGUsIHN0YXRlKSB7XG4gIGNvbnN0IHJhdyA9IHRvU3RyaW5nKG5vZGUpXG5cbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgIXN0YXRlLm9wdGlvbnMucmVzb3VyY2VMaW5rICYmXG4gICAgICAvLyBJZiB0aGVyZVx1MjAxOXMgYSB1cmxcdTIwMjZcbiAgICAgIG5vZGUudXJsICYmXG4gICAgICAvLyBBbmQgdGhlcmVcdTIwMTlzIGEgbm8gdGl0bGVcdTIwMjZcbiAgICAgICFub2RlLnRpdGxlICYmXG4gICAgICAvLyBBbmQgdGhlIGNvbnRlbnQgb2YgYG5vZGVgIGlzIGEgc2luZ2xlIHRleHQgbm9kZVx1MjAyNlxuICAgICAgbm9kZS5jaGlsZHJlbiAmJlxuICAgICAgbm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgIG5vZGUuY2hpbGRyZW5bMF0udHlwZSA9PT0gJ3RleHQnICYmXG4gICAgICAvLyBBbmQgaWYgdGhlIHVybCBpcyB0aGUgc2FtZSBhcyB0aGUgY29udGVudFx1MjAyNlxuICAgICAgKHJhdyA9PT0gbm9kZS51cmwgfHwgJ21haWx0bzonICsgcmF3ID09PSBub2RlLnVybCkgJiZcbiAgICAgIC8vIEFuZCB0aGF0IHN0YXJ0cyB3LyBhIHByb3RvY29sXHUyMDI2XG4gICAgICAvXlthLXpdW2EteisuLV0rOi9pLnRlc3Qobm9kZS51cmwpICYmXG4gICAgICAvLyBBbmQgdGhhdCBkb2Vzblx1MjAxOXQgY29udGFpbiBBU0NJSSBjb250cm9sIGNvZGVzIChjaGFyYWN0ZXIgZXNjYXBlcyBhbmRcbiAgICAgIC8vIHJlZmVyZW5jZXMgZG9uXHUyMDE5dCB3b3JrKSwgc3BhY2UsIG9yIGFuZ2xlIGJyYWNrZXRzXHUyMDI2XG4gICAgICAhL1tcXDAtIDw+XFx1MDA3Rl0vLnRlc3Qobm9kZS51cmwpXG4gIClcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0luZm8sIFN0YXRlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICogQGltcG9ydCB7TGluaywgUGFyZW50c30gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtFeGl0fSBmcm9tICcuLi90eXBlcy5qcydcbiAqL1xuXG5pbXBvcnQge2NoZWNrUXVvdGV9IGZyb20gJy4uL3V0aWwvY2hlY2stcXVvdGUuanMnXG5pbXBvcnQge2Zvcm1hdExpbmtBc0F1dG9saW5rfSBmcm9tICcuLi91dGlsL2Zvcm1hdC1saW5rLWFzLWF1dG9saW5rLmpzJ1xuXG5saW5rLnBlZWsgPSBsaW5rUGVla1xuXG4vKipcbiAqIEBwYXJhbSB7TGlua30gbm9kZVxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBfXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHBhcmFtIHtJbmZvfSBpbmZvXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGluayhub2RlLCBfLCBzdGF0ZSwgaW5mbykge1xuICBjb25zdCBxdW90ZSA9IGNoZWNrUXVvdGUoc3RhdGUpXG4gIGNvbnN0IHN1ZmZpeCA9IHF1b3RlID09PSAnXCInID8gJ1F1b3RlJyA6ICdBcG9zdHJvcGhlJ1xuICBjb25zdCB0cmFja2VyID0gc3RhdGUuY3JlYXRlVHJhY2tlcihpbmZvKVxuICAvKiogQHR5cGUge0V4aXR9ICovXG4gIGxldCBleGl0XG4gIC8qKiBAdHlwZSB7RXhpdH0gKi9cbiAgbGV0IHN1YmV4aXRcblxuICBpZiAoZm9ybWF0TGlua0FzQXV0b2xpbmsobm9kZSwgc3RhdGUpKSB7XG4gICAgLy8gSGlkZSB0aGUgZmFjdCB0aGF0IHdlXHUyMDE5cmUgaW4gcGhyYXNpbmcsIGJlY2F1c2UgZXNjYXBlcyBkb25cdTIwMTl0IHdvcmsuXG4gICAgY29uc3Qgc3RhY2sgPSBzdGF0ZS5zdGFja1xuICAgIHN0YXRlLnN0YWNrID0gW11cbiAgICBleGl0ID0gc3RhdGUuZW50ZXIoJ2F1dG9saW5rJylcbiAgICBsZXQgdmFsdWUgPSB0cmFja2VyLm1vdmUoJzwnKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZShcbiAgICAgIHN0YXRlLmNvbnRhaW5lclBocmFzaW5nKG5vZGUsIHtcbiAgICAgICAgYmVmb3JlOiB2YWx1ZSxcbiAgICAgICAgYWZ0ZXI6ICc+JyxcbiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KClcbiAgICAgIH0pXG4gICAgKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZSgnPicpXG4gICAgZXhpdCgpXG4gICAgc3RhdGUuc3RhY2sgPSBzdGFja1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgZXhpdCA9IHN0YXRlLmVudGVyKCdsaW5rJylcbiAgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCdsYWJlbCcpXG4gIGxldCB2YWx1ZSA9IHRyYWNrZXIubW92ZSgnWycpXG4gIHZhbHVlICs9IHRyYWNrZXIubW92ZShcbiAgICBzdGF0ZS5jb250YWluZXJQaHJhc2luZyhub2RlLCB7XG4gICAgICBiZWZvcmU6IHZhbHVlLFxuICAgICAgYWZ0ZXI6ICddKCcsXG4gICAgICAuLi50cmFja2VyLmN1cnJlbnQoKVxuICAgIH0pXG4gIClcbiAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKCddKCcpXG4gIHN1YmV4aXQoKVxuXG4gIGlmIChcbiAgICAvLyBJZiB0aGVyZVx1MjAxOXMgbm8gdXJsIGJ1dCB0aGVyZSBpcyBhIHRpdGxlXHUyMDI2XG4gICAgKCFub2RlLnVybCAmJiBub2RlLnRpdGxlKSB8fFxuICAgIC8vIElmIHRoZXJlIGFyZSBjb250cm9sIGNoYXJhY3RlcnMgb3Igd2hpdGVzcGFjZS5cbiAgICAvW1xcMC0gXFx1MDA3Rl0vLnRlc3Qobm9kZS51cmwpXG4gICkge1xuICAgIHN1YmV4aXQgPSBzdGF0ZS5lbnRlcignZGVzdGluYXRpb25MaXRlcmFsJylcbiAgICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoJzwnKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZShcbiAgICAgIHN0YXRlLnNhZmUobm9kZS51cmwsIHtiZWZvcmU6IHZhbHVlLCBhZnRlcjogJz4nLCAuLi50cmFja2VyLmN1cnJlbnQoKX0pXG4gICAgKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZSgnPicpXG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gd2hpdGVzcGFjZSwgcmF3IGlzIHByZXR0aWVyLlxuICAgIHN1YmV4aXQgPSBzdGF0ZS5lbnRlcignZGVzdGluYXRpb25SYXcnKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZShcbiAgICAgIHN0YXRlLnNhZmUobm9kZS51cmwsIHtcbiAgICAgICAgYmVmb3JlOiB2YWx1ZSxcbiAgICAgICAgYWZ0ZXI6IG5vZGUudGl0bGUgPyAnICcgOiAnKScsXG4gICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHN1YmV4aXQoKVxuXG4gIGlmIChub2RlLnRpdGxlKSB7XG4gICAgc3ViZXhpdCA9IHN0YXRlLmVudGVyKGB0aXRsZSR7c3VmZml4fWApXG4gICAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKCcgJyArIHF1b3RlKVxuICAgIHZhbHVlICs9IHRyYWNrZXIubW92ZShcbiAgICAgIHN0YXRlLnNhZmUobm9kZS50aXRsZSwge1xuICAgICAgICBiZWZvcmU6IHZhbHVlLFxuICAgICAgICBhZnRlcjogcXVvdGUsXG4gICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpXG4gICAgICB9KVxuICAgIClcbiAgICB2YWx1ZSArPSB0cmFja2VyLm1vdmUocXVvdGUpXG4gICAgc3ViZXhpdCgpXG4gIH1cblxuICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoJyknKVxuXG4gIGV4aXQoKVxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0xpbmt9IG5vZGVcbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gX1xuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGxpbmtQZWVrKG5vZGUsIF8sIHN0YXRlKSB7XG4gIHJldHVybiBmb3JtYXRMaW5rQXNBdXRvbGluayhub2RlLCBzdGF0ZSkgPyAnPCcgOiAnWydcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0luZm8sIFN0YXRlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICogQGltcG9ydCB7TGlua1JlZmVyZW5jZSwgUGFyZW50c30gZnJvbSAnbWRhc3QnXG4gKi9cblxubGlua1JlZmVyZW5jZS5wZWVrID0gbGlua1JlZmVyZW5jZVBlZWtcblxuLyoqXG4gKiBAcGFyYW0ge0xpbmtSZWZlcmVuY2V9IG5vZGVcbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gX1xuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEBwYXJhbSB7SW5mb30gaW5mb1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpbmtSZWZlcmVuY2Uobm9kZSwgXywgc3RhdGUsIGluZm8pIHtcbiAgY29uc3QgdHlwZSA9IG5vZGUucmVmZXJlbmNlVHlwZVxuICBjb25zdCBleGl0ID0gc3RhdGUuZW50ZXIoJ2xpbmtSZWZlcmVuY2UnKVxuICBsZXQgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCdsYWJlbCcpXG4gIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pXG4gIGxldCB2YWx1ZSA9IHRyYWNrZXIubW92ZSgnWycpXG4gIGNvbnN0IHRleHQgPSBzdGF0ZS5jb250YWluZXJQaHJhc2luZyhub2RlLCB7XG4gICAgYmVmb3JlOiB2YWx1ZSxcbiAgICBhZnRlcjogJ10nLFxuICAgIC4uLnRyYWNrZXIuY3VycmVudCgpXG4gIH0pXG4gIHZhbHVlICs9IHRyYWNrZXIubW92ZSh0ZXh0ICsgJ11bJylcblxuICBzdWJleGl0KClcbiAgLy8gSGlkZSB0aGUgZmFjdCB0aGF0IHdlXHUyMDE5cmUgaW4gcGhyYXNpbmcsIGJlY2F1c2UgZXNjYXBlcyBkb25cdTIwMTl0IHdvcmsuXG4gIGNvbnN0IHN0YWNrID0gc3RhdGUuc3RhY2tcbiAgc3RhdGUuc3RhY2sgPSBbXVxuICBzdWJleGl0ID0gc3RhdGUuZW50ZXIoJ3JlZmVyZW5jZScpXG4gIC8vIE5vdGU6IGZvciBwcm9wZXIgdHJhY2tpbmcsIHdlIHNob3VsZCByZXNldCB0aGUgb3V0cHV0IHBvc2l0aW9ucyB3aGVuIHdlIGVuZFxuICAvLyB1cCBtYWtpbmcgYSBgc2hvcnRjdXRgIHJlZmVyZW5jZSwgYmVjYXVzZSB0aGVuIHRoZXJlIGlzIG5vIGJyYWNlIG91dHB1dC5cbiAgLy8gUHJhY3RpY2FsbHksIGluIHRoYXQgY2FzZSwgdGhlcmUgaXMgbm8gY29udGVudCwgc28gaXQgZG9lc25cdTIwMTl0IG1hdHRlciB0aGF0XG4gIC8vIHdlXHUyMDE5dmUgdHJhY2tlZCBvbmUgdG9vIG1hbnkgY2hhcmFjdGVycy5cbiAgY29uc3QgcmVmZXJlbmNlID0gc3RhdGUuc2FmZShzdGF0ZS5hc3NvY2lhdGlvbklkKG5vZGUpLCB7XG4gICAgYmVmb3JlOiB2YWx1ZSxcbiAgICBhZnRlcjogJ10nLFxuICAgIC4uLnRyYWNrZXIuY3VycmVudCgpXG4gIH0pXG4gIHN1YmV4aXQoKVxuICBzdGF0ZS5zdGFjayA9IHN0YWNrXG4gIGV4aXQoKVxuXG4gIGlmICh0eXBlID09PSAnZnVsbCcgfHwgIXRleHQgfHwgdGV4dCAhPT0gcmVmZXJlbmNlKSB7XG4gICAgdmFsdWUgKz0gdHJhY2tlci5tb3ZlKHJlZmVyZW5jZSArICddJylcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnc2hvcnRjdXQnKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSB1bndhbnRlZCBgW2AuXG4gICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAtMSlcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSArPSB0cmFja2VyLm1vdmUoJ10nKVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbGlua1JlZmVyZW5jZVBlZWsoKSB7XG4gIHJldHVybiAnWydcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge09wdGlvbnMsIFN0YXRlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICovXG5cbi8qKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEByZXR1cm5zIHtFeGNsdWRlPE9wdGlvbnNbJ2J1bGxldCddLCBudWxsIHwgdW5kZWZpbmVkPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQnVsbGV0KHN0YXRlKSB7XG4gIGNvbnN0IG1hcmtlciA9IHN0YXRlLm9wdGlvbnMuYnVsbGV0IHx8ICcqJ1xuXG4gIGlmIChtYXJrZXIgIT09ICcqJyAmJiBtYXJrZXIgIT09ICcrJyAmJiBtYXJrZXIgIT09ICctJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCcgK1xuICAgICAgICBtYXJrZXIgK1xuICAgICAgICAnYCBmb3IgYG9wdGlvbnMuYnVsbGV0YCwgZXhwZWN0ZWQgYCpgLCBgK2AsIG9yIGAtYCdcbiAgICApXG4gIH1cblxuICByZXR1cm4gbWFya2VyXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtPcHRpb25zLCBTdGF0ZX0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqL1xuXG5pbXBvcnQge2NoZWNrQnVsbGV0fSBmcm9tICcuL2NoZWNrLWJ1bGxldC5qcydcblxuLyoqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHJldHVybnMge0V4Y2x1ZGU8T3B0aW9uc1snYnVsbGV0J10sIG51bGwgfCB1bmRlZmluZWQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tCdWxsZXRPdGhlcihzdGF0ZSkge1xuICBjb25zdCBidWxsZXQgPSBjaGVja0J1bGxldChzdGF0ZSlcbiAgY29uc3QgYnVsbGV0T3RoZXIgPSBzdGF0ZS5vcHRpb25zLmJ1bGxldE90aGVyXG5cbiAgaWYgKCFidWxsZXRPdGhlcikge1xuICAgIHJldHVybiBidWxsZXQgPT09ICcqJyA/ICctJyA6ICcqJ1xuICB9XG5cbiAgaWYgKGJ1bGxldE90aGVyICE9PSAnKicgJiYgYnVsbGV0T3RoZXIgIT09ICcrJyAmJiBidWxsZXRPdGhlciAhPT0gJy0nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBzZXJpYWxpemUgaXRlbXMgd2l0aCBgJyArXG4gICAgICAgIGJ1bGxldE90aGVyICtcbiAgICAgICAgJ2AgZm9yIGBvcHRpb25zLmJ1bGxldE90aGVyYCwgZXhwZWN0ZWQgYCpgLCBgK2AsIG9yIGAtYCdcbiAgICApXG4gIH1cblxuICBpZiAoYnVsbGV0T3RoZXIgPT09IGJ1bGxldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdFeHBlY3RlZCBgYnVsbGV0YCAoYCcgK1xuICAgICAgICBidWxsZXQgK1xuICAgICAgICAnYCkgYW5kIGBidWxsZXRPdGhlcmAgKGAnICtcbiAgICAgICAgYnVsbGV0T3RoZXIgK1xuICAgICAgICAnYCkgdG8gYmUgZGlmZmVyZW50J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBidWxsZXRPdGhlclxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7T3B0aW9ucywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHJldHVybnMge0V4Y2x1ZGU8T3B0aW9uc1snYnVsbGV0T3JkZXJlZCddLCBudWxsIHwgdW5kZWZpbmVkPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQnVsbGV0T3JkZXJlZChzdGF0ZSkge1xuICBjb25zdCBtYXJrZXIgPSBzdGF0ZS5vcHRpb25zLmJ1bGxldE9yZGVyZWQgfHwgJy4nXG5cbiAgaWYgKG1hcmtlciAhPT0gJy4nICYmIG1hcmtlciAhPT0gJyknKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBzZXJpYWxpemUgaXRlbXMgd2l0aCBgJyArXG4gICAgICAgIG1hcmtlciArXG4gICAgICAgICdgIGZvciBgb3B0aW9ucy5idWxsZXRPcmRlcmVkYCwgZXhwZWN0ZWQgYC5gIG9yIGApYCdcbiAgICApXG4gIH1cblxuICByZXR1cm4gbWFya2VyXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtPcHRpb25zLCBTdGF0ZX0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiBAcmV0dXJucyB7RXhjbHVkZTxPcHRpb25zWydydWxlJ10sIG51bGwgfCB1bmRlZmluZWQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSdWxlKHN0YXRlKSB7XG4gIGNvbnN0IG1hcmtlciA9IHN0YXRlLm9wdGlvbnMucnVsZSB8fCAnKidcblxuICBpZiAobWFya2VyICE9PSAnKicgJiYgbWFya2VyICE9PSAnLScgJiYgbWFya2VyICE9PSAnXycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQ2Fubm90IHNlcmlhbGl6ZSBydWxlcyB3aXRoIGAnICtcbiAgICAgICAgbWFya2VyICtcbiAgICAgICAgJ2AgZm9yIGBvcHRpb25zLnJ1bGVgLCBleHBlY3RlZCBgKmAsIGAtYCwgb3IgYF9gJ1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBtYXJrZXJcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0luZm8sIFN0YXRlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICogQGltcG9ydCB7TGlzdCwgUGFyZW50c30gZnJvbSAnbWRhc3QnXG4gKi9cblxuaW1wb3J0IHtjaGVja0J1bGxldH0gZnJvbSAnLi4vdXRpbC9jaGVjay1idWxsZXQuanMnXG5pbXBvcnQge2NoZWNrQnVsbGV0T3RoZXJ9IGZyb20gJy4uL3V0aWwvY2hlY2stYnVsbGV0LW90aGVyLmpzJ1xuaW1wb3J0IHtjaGVja0J1bGxldE9yZGVyZWR9IGZyb20gJy4uL3V0aWwvY2hlY2stYnVsbGV0LW9yZGVyZWQuanMnXG5pbXBvcnQge2NoZWNrUnVsZX0gZnJvbSAnLi4vdXRpbC9jaGVjay1ydWxlLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7TGlzdH0gbm9kZVxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiBAcGFyYW0ge0luZm99IGluZm9cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0KG5vZGUsIHBhcmVudCwgc3RhdGUsIGluZm8pIHtcbiAgY29uc3QgZXhpdCA9IHN0YXRlLmVudGVyKCdsaXN0JylcbiAgY29uc3QgYnVsbGV0Q3VycmVudCA9IHN0YXRlLmJ1bGxldEN1cnJlbnRcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGxldCBidWxsZXQgPSBub2RlLm9yZGVyZWQgPyBjaGVja0J1bGxldE9yZGVyZWQoc3RhdGUpIDogY2hlY2tCdWxsZXQoc3RhdGUpXG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICBjb25zdCBidWxsZXRPdGhlciA9IG5vZGUub3JkZXJlZFxuICAgID8gYnVsbGV0ID09PSAnLidcbiAgICAgID8gJyknXG4gICAgICA6ICcuJ1xuICAgIDogY2hlY2tCdWxsZXRPdGhlcihzdGF0ZSlcbiAgbGV0IHVzZURpZmZlcmVudE1hcmtlciA9XG4gICAgcGFyZW50ICYmIHN0YXRlLmJ1bGxldExhc3RVc2VkID8gYnVsbGV0ID09PSBzdGF0ZS5idWxsZXRMYXN0VXNlZCA6IGZhbHNlXG5cbiAgaWYgKCFub2RlLm9yZGVyZWQpIHtcbiAgICBjb25zdCBmaXJzdExpc3RJdGVtID0gbm9kZS5jaGlsZHJlbiA/IG5vZGUuY2hpbGRyZW5bMF0gOiB1bmRlZmluZWRcblxuICAgIC8vIElmIHRoZXJlXHUyMDE5cyBhbiBlbXB0eSBmaXJzdCBsaXN0IGl0ZW0gZGlyZWN0bHkgaW4gdHdvIGxpc3QgaXRlbXMsXG4gICAgLy8gd2UgaGF2ZSB0byB1c2UgYSBkaWZmZXJlbnQgYnVsbGV0OlxuICAgIC8vXG4gICAgLy8gYGBgbWFya2Rvd25cbiAgICAvLyAqIC0gKlxuICAgIC8vIGBgYFxuICAgIC8vXG4gICAgLy8gXHUyMDI2YmVjYXVzZSBvdGhlcndpc2UgaXQgd291bGQgYmVjb21lIG9uZSBiaWcgdGhlbWF0aWMgYnJlYWsuXG4gICAgaWYgKFxuICAgICAgLy8gQnVsbGV0IGNvdWxkIGJlIHVzZWQgYXMgYSB0aGVtYXRpYyBicmVhayBtYXJrZXI6XG4gICAgICAoYnVsbGV0ID09PSAnKicgfHwgYnVsbGV0ID09PSAnLScpICYmXG4gICAgICAvLyBFbXB0eSBmaXJzdCBsaXN0IGl0ZW06XG4gICAgICBmaXJzdExpc3RJdGVtICYmXG4gICAgICAoIWZpcnN0TGlzdEl0ZW0uY2hpbGRyZW4gfHwgIWZpcnN0TGlzdEl0ZW0uY2hpbGRyZW5bMF0pICYmXG4gICAgICAvLyBEaXJlY3RseSBpbiB0d28gb3RoZXIgbGlzdCBpdGVtczpcbiAgICAgIHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aCAtIDFdID09PSAnbGlzdCcgJiZcbiAgICAgIHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aCAtIDJdID09PSAnbGlzdEl0ZW0nICYmXG4gICAgICBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGggLSAzXSA9PT0gJ2xpc3QnICYmXG4gICAgICBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGggLSA0XSA9PT0gJ2xpc3RJdGVtJyAmJlxuICAgICAgLy8gVGhhdCBhcmUgZWFjaCB0aGUgZmlyc3QgY2hpbGQuXG4gICAgICBzdGF0ZS5pbmRleFN0YWNrW3N0YXRlLmluZGV4U3RhY2subGVuZ3RoIC0gMV0gPT09IDAgJiZcbiAgICAgIHN0YXRlLmluZGV4U3RhY2tbc3RhdGUuaW5kZXhTdGFjay5sZW5ndGggLSAyXSA9PT0gMCAmJlxuICAgICAgc3RhdGUuaW5kZXhTdGFja1tzdGF0ZS5pbmRleFN0YWNrLmxlbmd0aCAtIDNdID09PSAwXG4gICAgKSB7XG4gICAgICB1c2VEaWZmZXJlbnRNYXJrZXIgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmVcdTIwMTlzIGEgdGhlbWF0aWMgYnJlYWsgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBsaXN0IGl0ZW0sXG4gICAgLy8gd2UgaGF2ZSB0byB1c2UgYSBkaWZmZXJlbnQgYnVsbGV0OlxuICAgIC8vXG4gICAgLy8gYGBgbWFya2Rvd25cbiAgICAvLyAqIC0tLVxuICAgIC8vIGBgYFxuICAgIC8vXG4gICAgLy8gXHUyMDI2YmVjYXVzZSBvdGhlcndpc2UgaXQgd291bGQgYmVjb21lIG9uZSBiaWcgdGhlbWF0aWMgYnJlYWsuXG4gICAgaWYgKGNoZWNrUnVsZShzdGF0ZSkgPT09IGJ1bGxldCAmJiBmaXJzdExpc3RJdGVtKSB7XG4gICAgICBsZXQgaW5kZXggPSAtMVxuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBub2RlLmNoaWxkcmVuW2luZGV4XVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpdGVtICYmXG4gICAgICAgICAgaXRlbS50eXBlID09PSAnbGlzdEl0ZW0nICYmXG4gICAgICAgICAgaXRlbS5jaGlsZHJlbiAmJlxuICAgICAgICAgIGl0ZW0uY2hpbGRyZW5bMF0gJiZcbiAgICAgICAgICBpdGVtLmNoaWxkcmVuWzBdLnR5cGUgPT09ICd0aGVtYXRpY0JyZWFrJ1xuICAgICAgICApIHtcbiAgICAgICAgICB1c2VEaWZmZXJlbnRNYXJrZXIgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh1c2VEaWZmZXJlbnRNYXJrZXIpIHtcbiAgICBidWxsZXQgPSBidWxsZXRPdGhlclxuICB9XG5cbiAgc3RhdGUuYnVsbGV0Q3VycmVudCA9IGJ1bGxldFxuICBjb25zdCB2YWx1ZSA9IHN0YXRlLmNvbnRhaW5lckZsb3cobm9kZSwgaW5mbylcbiAgc3RhdGUuYnVsbGV0TGFzdFVzZWQgPSBidWxsZXRcbiAgc3RhdGUuYnVsbGV0Q3VycmVudCA9IGJ1bGxldEN1cnJlbnRcbiAgZXhpdCgpXG4gIHJldHVybiB2YWx1ZVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7T3B0aW9ucywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHJldHVybnMge0V4Y2x1ZGU8T3B0aW9uc1snbGlzdEl0ZW1JbmRlbnQnXSwgbnVsbCB8IHVuZGVmaW5lZD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0xpc3RJdGVtSW5kZW50KHN0YXRlKSB7XG4gIGNvbnN0IHN0eWxlID0gc3RhdGUub3B0aW9ucy5saXN0SXRlbUluZGVudCB8fCAnb25lJ1xuXG4gIGlmIChzdHlsZSAhPT0gJ3RhYicgJiYgc3R5bGUgIT09ICdvbmUnICYmIHN0eWxlICE9PSAnbWl4ZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBzZXJpYWxpemUgaXRlbXMgd2l0aCBgJyArXG4gICAgICAgIHN0eWxlICtcbiAgICAgICAgJ2AgZm9yIGBvcHRpb25zLmxpc3RJdGVtSW5kZW50YCwgZXhwZWN0ZWQgYHRhYmAsIGBvbmVgLCBvciBgbWl4ZWRgJ1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBzdHlsZVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7SW5mbywgTWFwLCBTdGF0ZX0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqIEBpbXBvcnQge0xpc3RJdGVtLCBQYXJlbnRzfSBmcm9tICdtZGFzdCdcbiAqL1xuXG5pbXBvcnQge2NoZWNrQnVsbGV0fSBmcm9tICcuLi91dGlsL2NoZWNrLWJ1bGxldC5qcydcbmltcG9ydCB7Y2hlY2tMaXN0SXRlbUluZGVudH0gZnJvbSAnLi4vdXRpbC9jaGVjay1saXN0LWl0ZW0taW5kZW50LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7TGlzdEl0ZW19IG5vZGVcbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHBhcmFtIHtJbmZvfSBpbmZvXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdEl0ZW0obm9kZSwgcGFyZW50LCBzdGF0ZSwgaW5mbykge1xuICBjb25zdCBsaXN0SXRlbUluZGVudCA9IGNoZWNrTGlzdEl0ZW1JbmRlbnQoc3RhdGUpXG4gIGxldCBidWxsZXQgPSBzdGF0ZS5idWxsZXRDdXJyZW50IHx8IGNoZWNrQnVsbGV0KHN0YXRlKVxuXG4gIC8vIEFkZCB0aGUgbWFya2VyIHZhbHVlIGZvciBvcmRlcmVkIGxpc3RzLlxuICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnbGlzdCcgJiYgcGFyZW50Lm9yZGVyZWQpIHtcbiAgICBidWxsZXQgPVxuICAgICAgKHR5cGVvZiBwYXJlbnQuc3RhcnQgPT09ICdudW1iZXInICYmIHBhcmVudC5zdGFydCA+IC0xXG4gICAgICAgID8gcGFyZW50LnN0YXJ0XG4gICAgICAgIDogMSkgK1xuICAgICAgKHN0YXRlLm9wdGlvbnMuaW5jcmVtZW50TGlzdE1hcmtlciA9PT0gZmFsc2VcbiAgICAgICAgPyAwXG4gICAgICAgIDogcGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZSkpICtcbiAgICAgIGJ1bGxldFxuICB9XG5cbiAgbGV0IHNpemUgPSBidWxsZXQubGVuZ3RoICsgMVxuXG4gIGlmIChcbiAgICBsaXN0SXRlbUluZGVudCA9PT0gJ3RhYicgfHxcbiAgICAobGlzdEl0ZW1JbmRlbnQgPT09ICdtaXhlZCcgJiZcbiAgICAgICgocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnbGlzdCcgJiYgcGFyZW50LnNwcmVhZCkgfHwgbm9kZS5zcHJlYWQpKVxuICApIHtcbiAgICBzaXplID0gTWF0aC5jZWlsKHNpemUgLyA0KSAqIDRcbiAgfVxuXG4gIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pXG4gIHRyYWNrZXIubW92ZShidWxsZXQgKyAnICcucmVwZWF0KHNpemUgLSBidWxsZXQubGVuZ3RoKSlcbiAgdHJhY2tlci5zaGlmdChzaXplKVxuICBjb25zdCBleGl0ID0gc3RhdGUuZW50ZXIoJ2xpc3RJdGVtJylcbiAgY29uc3QgdmFsdWUgPSBzdGF0ZS5pbmRlbnRMaW5lcyhcbiAgICBzdGF0ZS5jb250YWluZXJGbG93KG5vZGUsIHRyYWNrZXIuY3VycmVudCgpKSxcbiAgICBtYXBcbiAgKVxuICBleGl0KClcblxuICByZXR1cm4gdmFsdWVcblxuICAvKiogQHR5cGUge01hcH0gKi9cbiAgZnVuY3Rpb24gbWFwKGxpbmUsIGluZGV4LCBibGFuaykge1xuICAgIGlmIChpbmRleCkge1xuICAgICAgcmV0dXJuIChibGFuayA/ICcnIDogJyAnLnJlcGVhdChzaXplKSkgKyBsaW5lXG4gICAgfVxuXG4gICAgcmV0dXJuIChibGFuayA/IGJ1bGxldCA6IGJ1bGxldCArICcgJy5yZXBlYXQoc2l6ZSAtIGJ1bGxldC5sZW5ndGgpKSArIGxpbmVcbiAgfVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7SW5mbywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKiBAaW1wb3J0IHtQYXJhZ3JhcGgsIFBhcmVudHN9IGZyb20gJ21kYXN0J1xuICovXG5cbi8qKlxuICogQHBhcmFtIHtQYXJhZ3JhcGh9IG5vZGVcbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gX1xuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEBwYXJhbSB7SW5mb30gaW5mb1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcmFncmFwaChub2RlLCBfLCBzdGF0ZSwgaW5mbykge1xuICBjb25zdCBleGl0ID0gc3RhdGUuZW50ZXIoJ3BhcmFncmFwaCcpXG4gIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZS5lbnRlcigncGhyYXNpbmcnKVxuICBjb25zdCB2YWx1ZSA9IHN0YXRlLmNvbnRhaW5lclBocmFzaW5nKG5vZGUsIGluZm8pXG4gIHN1YmV4aXQoKVxuICBleGl0KClcbiAgcmV0dXJuIHZhbHVlXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLkh0bWx9IEh0bWxcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuUGhyYXNpbmdDb250ZW50fSBQaHJhc2luZ0NvbnRlbnRcbiAqL1xuXG5pbXBvcnQge2NvbnZlcnR9IGZyb20gJ3VuaXN0LXV0aWwtaXMnXG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHZhbHVlIGlzICpwaHJhc2luZyBjb250ZW50Ki5cbiAqXG4gKiA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogRXhjbHVkZXMgYGh0bWxgLCB3aGljaCBjYW4gYmUgYm90aCBwaHJhc2luZyBvciBmbG93LlxuICpcbiAqIEBwYXJhbSBub2RlXG4gKiAgIFRoaW5nIHRvIGNoZWNrLCB0eXBpY2FsbHkgYE5vZGVgLlxuICogQHJldHVybnNcbiAqICAgV2hldGhlciBgdmFsdWVgIGlzIHBocmFzaW5nIGNvbnRlbnQuXG4gKi9cblxuZXhwb3J0IGNvbnN0IHBocmFzaW5nID1cbiAgLyoqIEB0eXBlIHsobm9kZT86IHVua25vd24pID0+IG5vZGUgaXMgRXhjbHVkZTxQaHJhc2luZ0NvbnRlbnQsIEh0bWw+fSAqL1xuICAoXG4gICAgY29udmVydChbXG4gICAgICAnYnJlYWsnLFxuICAgICAgJ2RlbGV0ZScsXG4gICAgICAnZW1waGFzaXMnLFxuICAgICAgLy8gVG8gZG86IG5leHQgbWFqb3I6IHJlbW92ZWQgc2luY2UgZm9vdG5vdGVzIHdlcmUgYWRkZWQgdG8gR0ZNLlxuICAgICAgJ2Zvb3Rub3RlJyxcbiAgICAgICdmb290bm90ZVJlZmVyZW5jZScsXG4gICAgICAnaW1hZ2UnLFxuICAgICAgJ2ltYWdlUmVmZXJlbmNlJyxcbiAgICAgICdpbmxpbmVDb2RlJyxcbiAgICAgIC8vIEVuYWJsZWQgYnkgYG1kYXN0LXV0aWwtbWF0aGA6XG4gICAgICAnaW5saW5lTWF0aCcsXG4gICAgICAnbGluaycsXG4gICAgICAnbGlua1JlZmVyZW5jZScsXG4gICAgICAvLyBFbmFibGVkIGJ5IGBtZGFzdC11dGlsLW1keGA6XG4gICAgICAnbWR4SnN4VGV4dEVsZW1lbnQnLFxuICAgICAgLy8gRW5hYmxlZCBieSBgbWRhc3QtdXRpbC1tZHhgOlxuICAgICAgJ21keFRleHRFeHByZXNzaW9uJyxcbiAgICAgICdzdHJvbmcnLFxuICAgICAgJ3RleHQnLFxuICAgICAgLy8gRW5hYmxlZCBieSBgbWRhc3QtdXRpbC1kaXJlY3RpdmVgOlxuICAgICAgJ3RleHREaXJlY3RpdmUnXG4gICAgXSlcbiAgKVxuIiwgImV4cG9ydCB7cGhyYXNpbmd9IGZyb20gJy4vbGliL2luZGV4LmpzJ1xuIiwgIi8qKlxuICogQGltcG9ydCB7SW5mbywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKiBAaW1wb3J0IHtQYXJlbnRzLCBSb290fSBmcm9tICdtZGFzdCdcbiAqL1xuXG5pbXBvcnQge3BocmFzaW5nfSBmcm9tICdtZGFzdC11dGlsLXBocmFzaW5nJ1xuXG4vKipcbiAqIEBwYXJhbSB7Um9vdH0gbm9kZVxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBfXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHBhcmFtIHtJbmZvfSBpbmZvXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdChub2RlLCBfLCBzdGF0ZSwgaW5mbykge1xuICAvLyBOb3RlOiBgaHRtbGAgbm9kZXMgYXJlIGFtYmlndW91cy5cbiAgY29uc3QgaGFzUGhyYXNpbmcgPSBub2RlLmNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGQpIHtcbiAgICByZXR1cm4gcGhyYXNpbmcoZClcbiAgfSlcblxuICBjb25zdCBjb250YWluZXIgPSBoYXNQaHJhc2luZyA/IHN0YXRlLmNvbnRhaW5lclBocmFzaW5nIDogc3RhdGUuY29udGFpbmVyRmxvd1xuICByZXR1cm4gY29udGFpbmVyLmNhbGwoc3RhdGUsIG5vZGUsIGluZm8pXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtPcHRpb25zLCBTdGF0ZX0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiBAcmV0dXJucyB7RXhjbHVkZTxPcHRpb25zWydzdHJvbmcnXSwgbnVsbCB8IHVuZGVmaW5lZD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1N0cm9uZyhzdGF0ZSkge1xuICBjb25zdCBtYXJrZXIgPSBzdGF0ZS5vcHRpb25zLnN0cm9uZyB8fCAnKidcblxuICBpZiAobWFya2VyICE9PSAnKicgJiYgbWFya2VyICE9PSAnXycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQ2Fubm90IHNlcmlhbGl6ZSBzdHJvbmcgd2l0aCBgJyArXG4gICAgICAgIG1hcmtlciArXG4gICAgICAgICdgIGZvciBgb3B0aW9ucy5zdHJvbmdgLCBleHBlY3RlZCBgKmAsIG9yIGBfYCdcbiAgICApXG4gIH1cblxuICByZXR1cm4gbWFya2VyXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtJbmZvLCBTdGF0ZX0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqIEBpbXBvcnQge1BhcmVudHMsIFN0cm9uZ30gZnJvbSAnbWRhc3QnXG4gKi9cblxuaW1wb3J0IHtjaGVja1N0cm9uZ30gZnJvbSAnLi4vdXRpbC9jaGVjay1zdHJvbmcuanMnXG5pbXBvcnQge2VuY29kZUNoYXJhY3RlclJlZmVyZW5jZX0gZnJvbSAnLi4vdXRpbC9lbmNvZGUtY2hhcmFjdGVyLXJlZmVyZW5jZS5qcydcbmltcG9ydCB7ZW5jb2RlSW5mb30gZnJvbSAnLi4vdXRpbC9lbmNvZGUtaW5mby5qcydcblxuc3Ryb25nLnBlZWsgPSBzdHJvbmdQZWVrXG5cbi8qKlxuICogQHBhcmFtIHtTdHJvbmd9IG5vZGVcbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gX1xuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEBwYXJhbSB7SW5mb30gaW5mb1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cm9uZyhub2RlLCBfLCBzdGF0ZSwgaW5mbykge1xuICBjb25zdCBtYXJrZXIgPSBjaGVja1N0cm9uZyhzdGF0ZSlcbiAgY29uc3QgZXhpdCA9IHN0YXRlLmVudGVyKCdzdHJvbmcnKVxuICBjb25zdCB0cmFja2VyID0gc3RhdGUuY3JlYXRlVHJhY2tlcihpbmZvKVxuICBjb25zdCBiZWZvcmUgPSB0cmFja2VyLm1vdmUobWFya2VyICsgbWFya2VyKVxuXG4gIGxldCBiZXR3ZWVuID0gdHJhY2tlci5tb3ZlKFxuICAgIHN0YXRlLmNvbnRhaW5lclBocmFzaW5nKG5vZGUsIHtcbiAgICAgIGFmdGVyOiBtYXJrZXIsXG4gICAgICBiZWZvcmUsXG4gICAgICAuLi50cmFja2VyLmN1cnJlbnQoKVxuICAgIH0pXG4gIClcbiAgY29uc3QgYmV0d2VlbkhlYWQgPSBiZXR3ZWVuLmNoYXJDb2RlQXQoMClcbiAgY29uc3Qgb3BlbiA9IGVuY29kZUluZm8oXG4gICAgaW5mby5iZWZvcmUuY2hhckNvZGVBdChpbmZvLmJlZm9yZS5sZW5ndGggLSAxKSxcbiAgICBiZXR3ZWVuSGVhZCxcbiAgICBtYXJrZXJcbiAgKVxuXG4gIGlmIChvcGVuLmluc2lkZSkge1xuICAgIGJldHdlZW4gPSBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoYmV0d2VlbkhlYWQpICsgYmV0d2Vlbi5zbGljZSgxKVxuICB9XG5cbiAgY29uc3QgYmV0d2VlblRhaWwgPSBiZXR3ZWVuLmNoYXJDb2RlQXQoYmV0d2Vlbi5sZW5ndGggLSAxKVxuICBjb25zdCBjbG9zZSA9IGVuY29kZUluZm8oaW5mby5hZnRlci5jaGFyQ29kZUF0KDApLCBiZXR3ZWVuVGFpbCwgbWFya2VyKVxuXG4gIGlmIChjbG9zZS5pbnNpZGUpIHtcbiAgICBiZXR3ZWVuID0gYmV0d2Vlbi5zbGljZSgwLCAtMSkgKyBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoYmV0d2VlblRhaWwpXG4gIH1cblxuICBjb25zdCBhZnRlciA9IHRyYWNrZXIubW92ZShtYXJrZXIgKyBtYXJrZXIpXG5cbiAgZXhpdCgpXG5cbiAgc3RhdGUuYXR0ZW50aW9uRW5jb2RlU3Vycm91bmRpbmdJbmZvID0ge1xuICAgIGFmdGVyOiBjbG9zZS5vdXRzaWRlLFxuICAgIGJlZm9yZTogb3Blbi5vdXRzaWRlXG4gIH1cbiAgcmV0dXJuIGJlZm9yZSArIGJldHdlZW4gKyBhZnRlclxufVxuXG4vKipcbiAqIEBwYXJhbSB7U3Ryb25nfSBfXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IF8xXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3Ryb25nUGVlayhfLCBfMSwgc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLm9wdGlvbnMuc3Ryb25nIHx8ICcqJ1xufVxuIiwgIi8qKlxuICogQGltcG9ydCB7SW5mbywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKiBAaW1wb3J0IHtQYXJlbnRzLCBUZXh0fSBmcm9tICdtZGFzdCdcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7VGV4dH0gbm9kZVxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBfXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHBhcmFtIHtJbmZvfSBpbmZvXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGV4dChub2RlLCBfLCBzdGF0ZSwgaW5mbykge1xuICByZXR1cm4gc3RhdGUuc2FmZShub2RlLnZhbHVlLCBpbmZvKVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7T3B0aW9ucywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHJldHVybnMge0V4Y2x1ZGU8T3B0aW9uc1sncnVsZVJlcGV0aXRpb24nXSwgbnVsbCB8IHVuZGVmaW5lZD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1J1bGVSZXBldGl0aW9uKHN0YXRlKSB7XG4gIGNvbnN0IHJlcGV0aXRpb24gPSBzdGF0ZS5vcHRpb25zLnJ1bGVSZXBldGl0aW9uIHx8IDNcblxuICBpZiAocmVwZXRpdGlvbiA8IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQ2Fubm90IHNlcmlhbGl6ZSBydWxlcyB3aXRoIHJlcGV0aXRpb24gYCcgK1xuICAgICAgICByZXBldGl0aW9uICtcbiAgICAgICAgJ2AgZm9yIGBvcHRpb25zLnJ1bGVSZXBldGl0aW9uYCwgZXhwZWN0ZWQgYDNgIG9yIG1vcmUnXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHJlcGV0aXRpb25cbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICogQGltcG9ydCB7UGFyZW50cywgVGhlbWF0aWNCcmVha30gZnJvbSAnbWRhc3QnXG4gKi9cblxuaW1wb3J0IHtjaGVja1J1bGVSZXBldGl0aW9ufSBmcm9tICcuLi91dGlsL2NoZWNrLXJ1bGUtcmVwZXRpdGlvbi5qcydcbmltcG9ydCB7Y2hlY2tSdWxlfSBmcm9tICcuLi91dGlsL2NoZWNrLXJ1bGUuanMnXG5cbi8qKlxuICogQHBhcmFtIHtUaGVtYXRpY0JyZWFrfSBfXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IF8xXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRoZW1hdGljQnJlYWsoXywgXzEsIHN0YXRlKSB7XG4gIGNvbnN0IHZhbHVlID0gKFxuICAgIGNoZWNrUnVsZShzdGF0ZSkgKyAoc3RhdGUub3B0aW9ucy5ydWxlU3BhY2VzID8gJyAnIDogJycpXG4gICkucmVwZWF0KGNoZWNrUnVsZVJlcGV0aXRpb24oc3RhdGUpKVxuXG4gIHJldHVybiBzdGF0ZS5vcHRpb25zLnJ1bGVTcGFjZXMgPyB2YWx1ZS5zbGljZSgwLCAtMSkgOiB2YWx1ZVxufVxuIiwgImltcG9ydCB7YmxvY2txdW90ZX0gZnJvbSAnLi9ibG9ja3F1b3RlLmpzJ1xuaW1wb3J0IHtoYXJkQnJlYWt9IGZyb20gJy4vYnJlYWsuanMnXG5pbXBvcnQge2NvZGV9IGZyb20gJy4vY29kZS5qcydcbmltcG9ydCB7ZGVmaW5pdGlvbn0gZnJvbSAnLi9kZWZpbml0aW9uLmpzJ1xuaW1wb3J0IHtlbXBoYXNpc30gZnJvbSAnLi9lbXBoYXNpcy5qcydcbmltcG9ydCB7aGVhZGluZ30gZnJvbSAnLi9oZWFkaW5nLmpzJ1xuaW1wb3J0IHtodG1sfSBmcm9tICcuL2h0bWwuanMnXG5pbXBvcnQge2ltYWdlfSBmcm9tICcuL2ltYWdlLmpzJ1xuaW1wb3J0IHtpbWFnZVJlZmVyZW5jZX0gZnJvbSAnLi9pbWFnZS1yZWZlcmVuY2UuanMnXG5pbXBvcnQge2lubGluZUNvZGV9IGZyb20gJy4vaW5saW5lLWNvZGUuanMnXG5pbXBvcnQge2xpbmt9IGZyb20gJy4vbGluay5qcydcbmltcG9ydCB7bGlua1JlZmVyZW5jZX0gZnJvbSAnLi9saW5rLXJlZmVyZW5jZS5qcydcbmltcG9ydCB7bGlzdH0gZnJvbSAnLi9saXN0LmpzJ1xuaW1wb3J0IHtsaXN0SXRlbX0gZnJvbSAnLi9saXN0LWl0ZW0uanMnXG5pbXBvcnQge3BhcmFncmFwaH0gZnJvbSAnLi9wYXJhZ3JhcGguanMnXG5pbXBvcnQge3Jvb3R9IGZyb20gJy4vcm9vdC5qcydcbmltcG9ydCB7c3Ryb25nfSBmcm9tICcuL3N0cm9uZy5qcydcbmltcG9ydCB7dGV4dH0gZnJvbSAnLi90ZXh0LmpzJ1xuaW1wb3J0IHt0aGVtYXRpY0JyZWFrfSBmcm9tICcuL3RoZW1hdGljLWJyZWFrLmpzJ1xuXG4vKipcbiAqIERlZmF1bHQgKENvbW1vbk1hcmspIGhhbmRsZXJzLlxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlID0ge1xuICBibG9ja3F1b3RlLFxuICBicmVhazogaGFyZEJyZWFrLFxuICBjb2RlLFxuICBkZWZpbml0aW9uLFxuICBlbXBoYXNpcyxcbiAgaGFyZEJyZWFrLFxuICBoZWFkaW5nLFxuICBodG1sLFxuICBpbWFnZSxcbiAgaW1hZ2VSZWZlcmVuY2UsXG4gIGlubGluZUNvZGUsXG4gIGxpbmssXG4gIGxpbmtSZWZlcmVuY2UsXG4gIGxpc3QsXG4gIGxpc3RJdGVtLFxuICBwYXJhZ3JhcGgsXG4gIHJvb3QsXG4gIHN0cm9uZyxcbiAgdGV4dCxcbiAgdGhlbWF0aWNCcmVha1xufVxuIiwgIi8qKlxuICogQGltcG9ydCB7Sm9pbn0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqL1xuXG5pbXBvcnQge2Zvcm1hdENvZGVBc0luZGVudGVkfSBmcm9tICcuL3V0aWwvZm9ybWF0LWNvZGUtYXMtaW5kZW50ZWQuanMnXG5pbXBvcnQge2Zvcm1hdEhlYWRpbmdBc1NldGV4dH0gZnJvbSAnLi91dGlsL2Zvcm1hdC1oZWFkaW5nLWFzLXNldGV4dC5qcydcblxuLyoqIEB0eXBlIHtBcnJheTxKb2luPn0gKi9cbmV4cG9ydCBjb25zdCBqb2luID0gW2pvaW5EZWZhdWx0c11cblxuLyoqIEB0eXBlIHtKb2lufSAqL1xuZnVuY3Rpb24gam9pbkRlZmF1bHRzKGxlZnQsIHJpZ2h0LCBwYXJlbnQsIHN0YXRlKSB7XG4gIC8vIEluZGVudGVkIGNvZGUgYWZ0ZXIgbGlzdCBvciBhbm90aGVyIGluZGVudGVkIGNvZGUuXG4gIGlmIChcbiAgICByaWdodC50eXBlID09PSAnY29kZScgJiZcbiAgICBmb3JtYXRDb2RlQXNJbmRlbnRlZChyaWdodCwgc3RhdGUpICYmXG4gICAgKGxlZnQudHlwZSA9PT0gJ2xpc3QnIHx8XG4gICAgICAobGVmdC50eXBlID09PSByaWdodC50eXBlICYmIGZvcm1hdENvZGVBc0luZGVudGVkKGxlZnQsIHN0YXRlKSkpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSm9pbiBjaGlsZHJlbiBvZiBhIGxpc3Qgb3IgYW4gaXRlbS5cbiAgLy8gSW4gd2hpY2ggY2FzZSwgYHBhcmVudGAgaGFzIGEgYHNwcmVhZGAgZmllbGQuXG4gIGlmICgnc3ByZWFkJyBpbiBwYXJlbnQgJiYgdHlwZW9mIHBhcmVudC5zcHJlYWQgPT09ICdib29sZWFuJykge1xuICAgIGlmIChcbiAgICAgIGxlZnQudHlwZSA9PT0gJ3BhcmFncmFwaCcgJiZcbiAgICAgIC8vIFR3byBwYXJhZ3JhcGhzLlxuICAgICAgKGxlZnQudHlwZSA9PT0gcmlnaHQudHlwZSB8fFxuICAgICAgICByaWdodC50eXBlID09PSAnZGVmaW5pdGlvbicgfHxcbiAgICAgICAgLy8gUGFyYWdyYXBoIGZvbGxvd2VkIGJ5IGEgc2V0ZXh0IGhlYWRpbmcuXG4gICAgICAgIChyaWdodC50eXBlID09PSAnaGVhZGluZycgJiYgZm9ybWF0SGVhZGluZ0FzU2V0ZXh0KHJpZ2h0LCBzdGF0ZSkpKVxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudC5zcHJlYWQgPyAxIDogMFxuICB9XG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtDb25zdHJ1Y3ROYW1lLCBVbnNhZmV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKi9cblxuLyoqXG4gKiBMaXN0IG9mIGNvbnN0cnVjdHMgdGhhdCBvY2N1ciBpbiBwaHJhc2luZyAocGFyYWdyYXBocywgaGVhZGluZ3MpLCBidXQgY2Fubm90XG4gKiBjb250YWluIHRoaW5ncyBsaWtlIGF0dGVudGlvbiAoZW1waGFzaXMsIHN0cm9uZyksIGltYWdlcywgb3IgbGlua3MuXG4gKiBTbyB0aGV5IHNvcnQgb2YgY2FuY2VsIGVhY2ggb3RoZXIgb3V0LlxuICogTm90ZTogY291bGQgdXNlIGEgYmV0dGVyIG5hbWUuXG4gKlxuICogQHR5cGUge0FycmF5PENvbnN0cnVjdE5hbWU+fVxuICovXG5jb25zdCBmdWxsUGhyYXNpbmdTcGFucyA9IFtcbiAgJ2F1dG9saW5rJyxcbiAgJ2Rlc3RpbmF0aW9uTGl0ZXJhbCcsXG4gICdkZXN0aW5hdGlvblJhdycsXG4gICdyZWZlcmVuY2UnLFxuICAndGl0bGVRdW90ZScsXG4gICd0aXRsZUFwb3N0cm9waGUnXG5dXG5cbi8qKiBAdHlwZSB7QXJyYXk8VW5zYWZlPn0gKi9cbmV4cG9ydCBjb25zdCB1bnNhZmUgPSBbXG4gIHtjaGFyYWN0ZXI6ICdcXHQnLCBhZnRlcjogJ1tcXFxcclxcXFxuXScsIGluQ29uc3RydWN0OiAncGhyYXNpbmcnfSxcbiAge2NoYXJhY3RlcjogJ1xcdCcsIGJlZm9yZTogJ1tcXFxcclxcXFxuXScsIGluQ29uc3RydWN0OiAncGhyYXNpbmcnfSxcbiAge1xuICAgIGNoYXJhY3RlcjogJ1xcdCcsXG4gICAgaW5Db25zdHJ1Y3Q6IFsnY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCcsICdjb2RlRmVuY2VkTGFuZ1RpbGRlJ11cbiAgfSxcbiAge1xuICAgIGNoYXJhY3RlcjogJ1xccicsXG4gICAgaW5Db25zdHJ1Y3Q6IFtcbiAgICAgICdjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50JyxcbiAgICAgICdjb2RlRmVuY2VkTGFuZ1RpbGRlJyxcbiAgICAgICdjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50JyxcbiAgICAgICdjb2RlRmVuY2VkTWV0YVRpbGRlJyxcbiAgICAgICdkZXN0aW5hdGlvbkxpdGVyYWwnLFxuICAgICAgJ2hlYWRpbmdBdHgnXG4gICAgXVxuICB9LFxuICB7XG4gICAgY2hhcmFjdGVyOiAnXFxuJyxcbiAgICBpbkNvbnN0cnVjdDogW1xuICAgICAgJ2NvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQnLFxuICAgICAgJ2NvZGVGZW5jZWRMYW5nVGlsZGUnLFxuICAgICAgJ2NvZGVGZW5jZWRNZXRhR3JhdmVBY2NlbnQnLFxuICAgICAgJ2NvZGVGZW5jZWRNZXRhVGlsZGUnLFxuICAgICAgJ2Rlc3RpbmF0aW9uTGl0ZXJhbCcsXG4gICAgICAnaGVhZGluZ0F0eCdcbiAgICBdXG4gIH0sXG4gIHtjaGFyYWN0ZXI6ICcgJywgYWZ0ZXI6ICdbXFxcXHJcXFxcbl0nLCBpbkNvbnN0cnVjdDogJ3BocmFzaW5nJ30sXG4gIHtjaGFyYWN0ZXI6ICcgJywgYmVmb3JlOiAnW1xcXFxyXFxcXG5dJywgaW5Db25zdHJ1Y3Q6ICdwaHJhc2luZyd9LFxuICB7XG4gICAgY2hhcmFjdGVyOiAnICcsXG4gICAgaW5Db25zdHJ1Y3Q6IFsnY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCcsICdjb2RlRmVuY2VkTGFuZ1RpbGRlJ11cbiAgfSxcbiAgLy8gQW4gZXhjbGFtYXRpb24gbWFyayBjYW4gc3RhcnQgYW4gaW1hZ2UsIGlmIGl0IGlzIGZvbGxvd2VkIGJ5IGEgbGluayBvclxuICAvLyBhIGxpbmsgcmVmZXJlbmNlLlxuICB7XG4gICAgY2hhcmFjdGVyOiAnIScsXG4gICAgYWZ0ZXI6ICdcXFxcWycsXG4gICAgaW5Db25zdHJ1Y3Q6ICdwaHJhc2luZycsXG4gICAgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zXG4gIH0sXG4gIC8vIEEgcXVvdGUgY2FuIGJyZWFrIG91dCBvZiBhIHRpdGxlLlxuICB7Y2hhcmFjdGVyOiAnXCInLCBpbkNvbnN0cnVjdDogJ3RpdGxlUXVvdGUnfSxcbiAgLy8gQSBudW1iZXIgc2lnbiBjb3VsZCBzdGFydCBhbiBBVFggaGVhZGluZyBpZiBpdCBzdGFydHMgYSBsaW5lLlxuICB7YXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAnIyd9LFxuICB7Y2hhcmFjdGVyOiAnIycsIGluQ29uc3RydWN0OiAnaGVhZGluZ0F0eCcsIGFmdGVyOiAnKD86W1xcclxcbl18JCknfSxcbiAgLy8gRG9sbGFyIHNpZ24gYW5kIHBlcmNlbnRhZ2UgYXJlIG5vdCB1c2VkIGluIG1hcmtkb3duLlxuICAvLyBBbiBhbXBlcnNhbmQgY291bGQgc3RhcnQgYSBjaGFyYWN0ZXIgcmVmZXJlbmNlLlxuICB7Y2hhcmFjdGVyOiAnJicsIGFmdGVyOiAnWyNBLVphLXpdJywgaW5Db25zdHJ1Y3Q6ICdwaHJhc2luZyd9LFxuICAvLyBBbiBhcG9zdHJvcGhlIGNhbiBicmVhayBvdXQgb2YgYSB0aXRsZS5cbiAge2NoYXJhY3RlcjogXCInXCIsIGluQ29uc3RydWN0OiAndGl0bGVBcG9zdHJvcGhlJ30sXG4gIC8vIEEgbGVmdCBwYXJlbiBjb3VsZCBicmVhayBvdXQgb2YgYSBkZXN0aW5hdGlvbiByYXcuXG4gIHtjaGFyYWN0ZXI6ICcoJywgaW5Db25zdHJ1Y3Q6ICdkZXN0aW5hdGlvblJhdyd9LFxuICAvLyBBIGxlZnQgcGFyZW4gZm9sbG93ZWQgYnkgYF1gIGNvdWxkIG1ha2Ugc29tZXRoaW5nIGludG8gYSBsaW5rIG9yIGltYWdlLlxuICB7XG4gICAgYmVmb3JlOiAnXFxcXF0nLFxuICAgIGNoYXJhY3RlcjogJygnLFxuICAgIGluQ29uc3RydWN0OiAncGhyYXNpbmcnLFxuICAgIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFuc1xuICB9LFxuICAvLyBBIHJpZ2h0IHBhcmVuIGNvdWxkIHN0YXJ0IGEgbGlzdCBpdGVtIG9yIGJyZWFrIG91dCBvZiBhIGRlc3RpbmF0aW9uXG4gIC8vIHJhdy5cbiAge2F0QnJlYWs6IHRydWUsIGJlZm9yZTogJ1xcXFxkKycsIGNoYXJhY3RlcjogJyknfSxcbiAge2NoYXJhY3RlcjogJyknLCBpbkNvbnN0cnVjdDogJ2Rlc3RpbmF0aW9uUmF3J30sXG4gIC8vIEFuIGFzdGVyaXNrIGNhbiBzdGFydCB0aGVtYXRpYyBicmVha3MsIGxpc3QgaXRlbXMsIGVtcGhhc2lzLCBzdHJvbmcuXG4gIHthdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICcqJywgYWZ0ZXI6ICcoPzpbIFxcdFxcclxcbipdKSd9LFxuICB7Y2hhcmFjdGVyOiAnKicsIGluQ29uc3RydWN0OiAncGhyYXNpbmcnLCBub3RJbkNvbnN0cnVjdDogZnVsbFBocmFzaW5nU3BhbnN9LFxuICAvLyBBIHBsdXMgc2lnbiBjb3VsZCBzdGFydCBhIGxpc3QgaXRlbS5cbiAge2F0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogJysnLCBhZnRlcjogJyg/OlsgXFx0XFxyXFxuXSknfSxcbiAgLy8gQSBkYXNoIGNhbiBzdGFydCB0aGVtYXRpYyBicmVha3MsIGxpc3QgaXRlbXMsIGFuZCBzZXRleHQgaGVhZGluZ1xuICAvLyB1bmRlcmxpbmVzLlxuICB7YXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAnLScsIGFmdGVyOiAnKD86WyBcXHRcXHJcXG4tXSknfSxcbiAgLy8gQSBkb3QgY291bGQgc3RhcnQgYSBsaXN0IGl0ZW0uXG4gIHthdEJyZWFrOiB0cnVlLCBiZWZvcmU6ICdcXFxcZCsnLCBjaGFyYWN0ZXI6ICcuJywgYWZ0ZXI6ICcoPzpbIFxcdFxcclxcbl18JCknfSxcbiAgLy8gU2xhc2gsIGNvbG9uLCBhbmQgc2VtaWNvbG9uIGFyZSBub3QgdXNlZCBpbiBtYXJrZG93biBmb3IgY29uc3RydWN0cy5cbiAgLy8gQSBsZXNzIHRoYW4gY2FuIHN0YXJ0IGh0bWwgKGZsb3cgb3IgdGV4dCkgb3IgYW4gYXV0b2xpbmsuXG4gIC8vIEhUTUwgY291bGQgc3RhcnQgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrIChkZWNsYXJhdGlvbiwgY2RhdGEsIGNvbW1lbnQpLFxuICAvLyBzbGFzaCAoY2xvc2luZyB0YWcpLCBxdWVzdGlvbiBtYXJrIChpbnN0cnVjdGlvbiksIG9yIGEgbGV0dGVyICh0YWcpLlxuICAvLyBBbiBhdXRvbGluayBhbHNvIHN0YXJ0cyB3aXRoIGEgbGV0dGVyLlxuICAvLyBGaW5hbGx5LCBpdCBjb3VsZCBicmVhayBvdXQgb2YgYSBkZXN0aW5hdGlvbiBsaXRlcmFsLlxuICB7YXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAnPCcsIGFmdGVyOiAnWyEvP0EtWmEtel0nfSxcbiAge1xuICAgIGNoYXJhY3RlcjogJzwnLFxuICAgIGFmdGVyOiAnWyEvP0EtWmEtel0nLFxuICAgIGluQ29uc3RydWN0OiAncGhyYXNpbmcnLFxuICAgIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFuc1xuICB9LFxuICB7Y2hhcmFjdGVyOiAnPCcsIGluQ29uc3RydWN0OiAnZGVzdGluYXRpb25MaXRlcmFsJ30sXG4gIC8vIEFuIGVxdWFscyB0byBjYW4gc3RhcnQgc2V0ZXh0IGhlYWRpbmcgdW5kZXJsaW5lcy5cbiAge2F0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogJz0nfSxcbiAgLy8gQSBncmVhdGVyIHRoYW4gY2FuIHN0YXJ0IGJsb2NrIHF1b3RlcyBhbmQgaXQgY2FuIGJyZWFrIG91dCBvZiBhXG4gIC8vIGRlc3RpbmF0aW9uIGxpdGVyYWwuXG4gIHthdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICc+J30sXG4gIHtjaGFyYWN0ZXI6ICc+JywgaW5Db25zdHJ1Y3Q6ICdkZXN0aW5hdGlvbkxpdGVyYWwnfSxcbiAgLy8gUXVlc3Rpb24gbWFyayBhbmQgYXQgc2lnbiBhcmUgbm90IHVzZWQgaW4gbWFya2Rvd24gZm9yIGNvbnN0cnVjdHMuXG4gIC8vIEEgbGVmdCBicmFja2V0IGNhbiBzdGFydCBkZWZpbml0aW9ucywgcmVmZXJlbmNlcywgbGFiZWxzLFxuICB7YXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAnWyd9LFxuICB7Y2hhcmFjdGVyOiAnWycsIGluQ29uc3RydWN0OiAncGhyYXNpbmcnLCBub3RJbkNvbnN0cnVjdDogZnVsbFBocmFzaW5nU3BhbnN9LFxuICB7Y2hhcmFjdGVyOiAnWycsIGluQ29uc3RydWN0OiBbJ2xhYmVsJywgJ3JlZmVyZW5jZSddfSxcbiAgLy8gQSBiYWNrc2xhc2ggY2FuIHN0YXJ0IGFuIGVzY2FwZSAod2hlbiBmb2xsb3dlZCBieSBwdW5jdHVhdGlvbikgb3IgYVxuICAvLyBoYXJkIGJyZWFrICh3aGVuIGZvbGxvd2VkIGJ5IGFuIGVvbCkuXG4gIC8vIE5vdGU6IHR5cGljYWwgZXNjYXBlcyBhcmUgaGFuZGxlZCBpbiBgc2FmZWAhXG4gIHtjaGFyYWN0ZXI6ICdcXFxcJywgYWZ0ZXI6ICdbXFxcXHJcXFxcbl0nLCBpbkNvbnN0cnVjdDogJ3BocmFzaW5nJ30sXG4gIC8vIEEgcmlnaHQgYnJhY2tldCBjYW4gZXhpdCBsYWJlbHMuXG4gIHtjaGFyYWN0ZXI6ICddJywgaW5Db25zdHJ1Y3Q6IFsnbGFiZWwnLCAncmVmZXJlbmNlJ119LFxuICAvLyBDYXJldCBpcyBub3QgdXNlZCBpbiBtYXJrZG93biBmb3IgY29uc3RydWN0cy5cbiAgLy8gQW4gdW5kZXJzY29yZSBjYW4gc3RhcnQgZW1waGFzaXMsIHN0cm9uZywgb3IgYSB0aGVtYXRpYyBicmVhay5cbiAge2F0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogJ18nfSxcbiAge2NoYXJhY3RlcjogJ18nLCBpbkNvbnN0cnVjdDogJ3BocmFzaW5nJywgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zfSxcbiAgLy8gQSBncmF2ZSBhY2NlbnQgY2FuIHN0YXJ0IGNvZGUgKGZlbmNlZCBvciB0ZXh0KSwgb3IgaXQgY2FuIGJyZWFrIG91dCBvZlxuICAvLyBhIGdyYXZlIGFjY2VudCBjb2RlIGZlbmNlLlxuICB7YXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAnYCd9LFxuICB7XG4gICAgY2hhcmFjdGVyOiAnYCcsXG4gICAgaW5Db25zdHJ1Y3Q6IFsnY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCcsICdjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50J11cbiAgfSxcbiAge2NoYXJhY3RlcjogJ2AnLCBpbkNvbnN0cnVjdDogJ3BocmFzaW5nJywgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zfSxcbiAgLy8gTGVmdCBicmFjZSwgdmVydGljYWwgYmFyLCByaWdodCBicmFjZSBhcmUgbm90IHVzZWQgaW4gbWFya2Rvd24gZm9yXG4gIC8vIGNvbnN0cnVjdHMuXG4gIC8vIEEgdGlsZGUgY2FuIHN0YXJ0IGNvZGUgKGZlbmNlZCkuXG4gIHthdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICd+J31cbl1cbiIsICIvLy8gPHJlZmVyZW5jZSBsaWI9XCJkb21cIiAvPlxuXG4vKiBnbG9iYWwgZG9jdW1lbnQgKi9cblxuY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZyB8IGZhbHNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUpIHtcbiAgY29uc3QgY2hhcmFjdGVyUmVmZXJlbmNlID0gJyYnICsgdmFsdWUgKyAnOydcbiAgZWxlbWVudC5pbm5lckhUTUwgPSBjaGFyYWN0ZXJSZWZlcmVuY2VcbiAgY29uc3QgY2hhcmFjdGVyID0gZWxlbWVudC50ZXh0Q29udGVudFxuXG4gIC8vIFNvbWUgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgZG8gbm90IHJlcXVpcmUgdGhlIGNsb3Npbmcgc2VtaWNvbG9uXG4gIC8vIChgJm5vdGAsIGZvciBpbnN0YW5jZSksIHdoaWNoIGxlYWRzIHRvIHNpdHVhdGlvbnMgd2hlcmUgcGFyc2luZyB0aGUgYXNzdW1lZFxuICAvLyBuYW1lZCByZWZlcmVuY2Ugb2YgYCZub3RpdDtgIHdpbGwgcmVzdWx0IGluIHRoZSBzdHJpbmcgYFx1MDBBQ2l0O2AuXG4gIC8vIFdoZW4gd2UgZW5jb3VudGVyIGEgdHJhaWxpbmcgc2VtaWNvbG9uIGFmdGVyIHBhcnNpbmcsIGFuZCB0aGUgY2hhcmFjdGVyXG4gIC8vIHJlZmVyZW5jZSB0byBkZWNvZGUgd2FzIG5vdCBhIHNlbWljb2xvbiAoYCZzZW1pO2ApLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlXG4gIC8vIG1hdGNoaW5nIHdhcyBub3QgY29tcGxldGUuXG4gIGlmIChcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBUeXBlU2NyaXB0IGlzIHdyb25nIHRoYXQgYHRleHRDb250ZW50YCBvbiBlbGVtZW50cyBjYW5cbiAgICAvLyB5aWVsZCBgbnVsbGAuXG4gICAgY2hhcmFjdGVyLmNoYXJDb2RlQXQoY2hhcmFjdGVyLmxlbmd0aCAtIDEpID09PSA1OSAvKiBgO2AgKi8gJiZcbiAgICB2YWx1ZSAhPT0gJ3NlbWknXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgdGhlIGRlY29kZWQgc3RyaW5nIGlzIGVxdWFsIHRvIHRoZSBpbnB1dCwgdGhlIGNoYXJhY3RlciByZWZlcmVuY2Ugd2FzXG4gIC8vIG5vdCB2YWxpZC5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVHlwZVNjcmlwdCBpcyB3cm9uZyB0aGF0IGB0ZXh0Q29udGVudGAgb24gZWxlbWVudHMgY2FuXG4gIC8vIHlpZWxkIGBudWxsYC5cbiAgcmV0dXJuIGNoYXJhY3RlciA9PT0gY2hhcmFjdGVyUmVmZXJlbmNlID8gZmFsc2UgOiBjaGFyYWN0ZXJcbn1cbiIsICIvKipcbiAqIFR1cm4gdGhlIG51bWJlciAoaW4gc3RyaW5nIGZvcm0gYXMgZWl0aGVyIGhleGEtIG9yIHBsYWluIGRlY2ltYWwpIGNvbWluZyBmcm9tXG4gKiBhIG51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZSBpbnRvIGEgY2hhcmFjdGVyLlxuICpcbiAqIFNvcnQgb2YgbGlrZSBgU3RyaW5nLmZyb21Db2RlUG9pbnQoTnVtYmVyLnBhcnNlSW50KHZhbHVlLCBiYXNlKSlgLCBidXQgbWFrZXNcbiAqIG5vbi1jaGFyYWN0ZXJzIGFuZCBjb250cm9sIGNoYXJhY3RlcnMgc2FmZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqICAgVmFsdWUgdG8gZGVjb2RlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJhc2VcbiAqICAgTnVtZXJpYyBiYXNlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgQ2hhcmFjdGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSh2YWx1ZSwgYmFzZSkge1xuICBjb25zdCBjb2RlID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCBiYXNlKTtcbiAgaWYgKFxuICAvLyBDMCBleGNlcHQgZm9yIEhULCBMRiwgRkYsIENSLCBzcGFjZS5cbiAgY29kZSA8IDkgfHwgY29kZSA9PT0gMTEgfHwgY29kZSA+IDEzICYmIGNvZGUgPCAzMiB8fFxuICAvLyBDb250cm9sIGNoYXJhY3RlciAoREVMKSBvZiBDMCwgYW5kIEMxIGNvbnRyb2xzLlxuICBjb2RlID4gMTI2ICYmIGNvZGUgPCAxNjAgfHxcbiAgLy8gTG9uZSBoaWdoIHN1cnJvZ2F0ZXMgYW5kIGxvdyBzdXJyb2dhdGVzLlxuICBjb2RlID4gNTVfMjk1ICYmIGNvZGUgPCA1N18zNDQgfHxcbiAgLy8gTm9uY2hhcmFjdGVycy5cbiAgY29kZSA+IDY0Xzk3NSAmJiBjb2RlIDwgNjVfMDA4IHx8IC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cbiAgKGNvZGUgJiA2NV81MzUpID09PSA2NV81MzUgfHwgKGNvZGUgJiA2NV81MzUpID09PSA2NV81MzQgfHwgLyogZXNsaW50LWVuYWJsZSBuby1iaXR3aXNlICovXG4gIC8vIE91dCBvZiByYW5nZVxuICBjb2RlID4gMV8xMTRfMTExKSB7XG4gICAgcmV0dXJuIFwiXFx1RkZGRFwiO1xuICB9XG4gIHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlKTtcbn0iLCAiaW1wb3J0IHsgZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UgfSBmcm9tICdkZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZSc7XG5jb25zdCBjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZSA9IC9cXFxcKFshLS86LUBbLWB7LX5dKXwmKCMoPzpcXGR7MSw3fXx4W1xcZGEtZl17MSw2fSl8W1xcZGEtel17MSwzMX0pOy9naTtcblxuLyoqXG4gKiBEZWNvZGUgbWFya2Rvd24gc3RyaW5ncyAod2hpY2ggb2NjdXIgaW4gcGxhY2VzIHN1Y2ggYXMgZmVuY2VkIGNvZGUgaW5mb1xuICogc3RyaW5ncywgZGVzdGluYXRpb25zLCBsYWJlbHMsIGFuZCB0aXRsZXMpLlxuICpcbiAqIFRoZSBcdTIwMUNzdHJpbmdcdTIwMUQgY29udGVudCB0eXBlIGFsbG93cyBjaGFyYWN0ZXIgZXNjYXBlcyBhbmQgLXJlZmVyZW5jZXMuXG4gKiBUaGlzIGRlY29kZXMgdGhvc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiAgIFZhbHVlIHRvIGRlY29kZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIERlY29kZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoY2hhcmFjdGVyRXNjYXBlT3JSZWZlcmVuY2UsIGRlY29kZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9ICQwXG4gKiAgIE1hdGNoLlxuICogQHBhcmFtIHtzdHJpbmd9ICQxXG4gKiAgIENoYXJhY3RlciBlc2NhcGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gJDJcbiAqICAgQ2hhcmFjdGVyIHJlZmVyZW5jZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIERlY29kZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGVjb2RlKCQwLCAkMSwgJDIpIHtcbiAgaWYgKCQxKSB7XG4gICAgLy8gRXNjYXBlLlxuICAgIHJldHVybiAkMTtcbiAgfVxuXG4gIC8vIFJlZmVyZW5jZS5cbiAgY29uc3QgaGVhZCA9ICQyLmNoYXJDb2RlQXQoMCk7XG4gIGlmIChoZWFkID09PSAzNSkge1xuICAgIGNvbnN0IGhlYWQgPSAkMi5jaGFyQ29kZUF0KDEpO1xuICAgIGNvbnN0IGhleCA9IGhlYWQgPT09IDEyMCB8fCBoZWFkID09PSA4ODtcbiAgICByZXR1cm4gZGVjb2RlTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSgkMi5zbGljZShoZXggPyAyIDogMSksIGhleCA/IDE2IDogMTApO1xuICB9XG4gIHJldHVybiBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZSgkMikgfHwgJDA7XG59IiwgIi8qKlxuICogQGltcG9ydCB7QXNzb2NpYXRpb25JZH0gZnJvbSAnLi4vdHlwZXMuanMnXG4gKi9cblxuaW1wb3J0IHtkZWNvZGVTdHJpbmd9IGZyb20gJ21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmcnXG5cbi8qKlxuICogR2V0IGFuIGlkZW50aWZpZXIgZnJvbSBhbiBhc3NvY2lhdGlvbiB0byBtYXRjaCBpdCB0byBvdGhlcnMuXG4gKlxuICogQXNzb2NpYXRpb25zIGFyZSBub2RlcyB0aGF0IG1hdGNoIHRvIHNvbWV0aGluZyBlbHNlIHRocm91Z2ggYW4gSUQ6XG4gKiA8aHR0cHM6Ly9naXRodWIuY29tL3N5bnRheC10cmVlL21kYXN0I2Fzc29jaWF0aW9uPi5cbiAqXG4gKiBUaGUgYGxhYmVsYCBvZiBhbiBhc3NvY2lhdGlvbiBpcyB0aGUgc3RyaW5nIHZhbHVlOiBjaGFyYWN0ZXIgZXNjYXBlcyBhbmRcbiAqIHJlZmVyZW5jZXMgd29yaywgYW5kIGNhc2luZyBpcyBpbnRhY3QuXG4gKiBUaGUgYGlkZW50aWZpZXJgIGlzIHVzZWQgdG8gbWF0Y2ggb25lIGFzc29jaWF0aW9uIHRvIGFub3RoZXI6XG4gKiBjb250cm92ZXJzaWFsbHksIGNoYXJhY3RlciBlc2NhcGVzIGFuZCByZWZlcmVuY2VzIGRvblx1MjAxOXQgd29yayBpbiB0aGlzXG4gKiBtYXRjaGluZzogYCZjb3B5O2AgZG9lcyBub3QgbWF0Y2ggYFx1MDBBOWAsIGFuZCBgXFwrYCBkb2VzIG5vdCBtYXRjaCBgK2AuXG4gKlxuICogQnV0IGNhc2luZyBpcyBpZ25vcmVkIChhbmQgd2hpdGVzcGFjZSkgaXMgdHJpbW1lZCBhbmQgY29sbGFwc2VkOiBgIEFcXG5iYFxuICogbWF0Y2hlcyBgYSBiYC5cbiAqIFNvLCB3ZSBkbyBwcmVmZXIgdGhlIGxhYmVsIHdoZW4gZmlndXJpbmcgb3V0IGhvdyB3ZVx1MjAxOXJlIGdvaW5nIHRvIHNlcmlhbGl6ZTpcbiAqIGl0IGhhcyB3aGl0ZXNwYWNlLCBjYXNpbmcsIGFuZCB3ZSBjYW4gaWdub3JlIG1vc3QgdXNlbGVzcyBjaGFyYWN0ZXJcbiAqIGVzY2FwZXMgYW5kIGFsbCBjaGFyYWN0ZXIgcmVmZXJlbmNlcy5cbiAqXG4gKiBAdHlwZSB7QXNzb2NpYXRpb25JZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc29jaWF0aW9uKG5vZGUpIHtcbiAgaWYgKG5vZGUubGFiZWwgfHwgIW5vZGUuaWRlbnRpZmllcikge1xuICAgIHJldHVybiBub2RlLmxhYmVsIHx8ICcnXG4gIH1cblxuICByZXR1cm4gZGVjb2RlU3RyaW5nKG5vZGUuaWRlbnRpZmllcilcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0NvbXBpbGVQYXR0ZXJufSBmcm9tICcuLi90eXBlcy5qcydcbiAqL1xuXG4vKipcbiAqIEB0eXBlIHtDb21waWxlUGF0dGVybn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgaWYgKCFwYXR0ZXJuLl9jb21waWxlZCkge1xuICAgIGNvbnN0IGJlZm9yZSA9XG4gICAgICAocGF0dGVybi5hdEJyZWFrID8gJ1tcXFxcclxcXFxuXVtcXFxcdCBdKicgOiAnJykgK1xuICAgICAgKHBhdHRlcm4uYmVmb3JlID8gJyg/OicgKyBwYXR0ZXJuLmJlZm9yZSArICcpJyA6ICcnKVxuXG4gICAgcGF0dGVybi5fY29tcGlsZWQgPSBuZXcgUmVnRXhwKFxuICAgICAgKGJlZm9yZSA/ICcoJyArIGJlZm9yZSArICcpJyA6ICcnKSArXG4gICAgICAgICgvW3xcXFxce30oKVtcXF1eJCsqPy4tXS8udGVzdChwYXR0ZXJuLmNoYXJhY3RlcikgPyAnXFxcXCcgOiAnJykgK1xuICAgICAgICBwYXR0ZXJuLmNoYXJhY3RlciArXG4gICAgICAgIChwYXR0ZXJuLmFmdGVyID8gJyg/OicgKyBwYXR0ZXJuLmFmdGVyICsgJyknIDogJycpLFxuICAgICAgJ2cnXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhdHRlcm4uX2NvbXBpbGVkXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtIYW5kbGUsIEluZm8sIFN0YXRlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICogQGltcG9ydCB7UGhyYXNpbmdQYXJlbnRzfSBmcm9tICcuLi90eXBlcy5qcydcbiAqL1xuXG5pbXBvcnQge2VuY29kZUNoYXJhY3RlclJlZmVyZW5jZX0gZnJvbSAnLi9lbmNvZGUtY2hhcmFjdGVyLXJlZmVyZW5jZS5qcydcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIGNoaWxkcmVuIG9mIGEgcGFyZW50IHRoYXQgY29udGFpbnMgcGhyYXNpbmcgY2hpbGRyZW4uXG4gKlxuICogVGhlc2UgY2hpbGRyZW4gd2lsbCBiZSBqb2luZWQgZmx1c2ggdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtQaHJhc2luZ1BhcmVudHN9IHBhcmVudFxuICogICBQYXJlbnQgb2YgZmxvdyBub2Rlcy5cbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZCBhYm91dCB0aGUgY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7SW5mb30gaW5mb1xuICogICBJbmZvIG9uIHdoZXJlIHdlIGFyZSBpbiB0aGUgZG9jdW1lbnQgd2UgYXJlIGdlbmVyYXRpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBTZXJpYWxpemVkIGNoaWxkcmVuLCBqb2luZWQgdG9nZXRoZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZXJQaHJhc2luZyhwYXJlbnQsIHN0YXRlLCBpbmZvKSB7XG4gIGNvbnN0IGluZGV4U3RhY2sgPSBzdGF0ZS5pbmRleFN0YWNrXG4gIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuIHx8IFtdXG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgcmVzdWx0cyA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG4gIGxldCBiZWZvcmUgPSBpbmZvLmJlZm9yZVxuICAvKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGVuY29kZUFmdGVyXG5cbiAgaW5kZXhTdGFjay5wdXNoKC0xKVxuICBsZXQgdHJhY2tlciA9IHN0YXRlLmNyZWF0ZVRyYWNrZXIoaW5mbylcblxuICB3aGlsZSAoKytpbmRleCA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baW5kZXhdXG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgbGV0IGFmdGVyXG5cbiAgICBpbmRleFN0YWNrW2luZGV4U3RhY2subGVuZ3RoIC0gMV0gPSBpbmRleFxuXG4gICAgaWYgKGluZGV4ICsgMSA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgLyoqIEB0eXBlIHtIYW5kbGV9ICovXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBodXNoLCBpdFx1MjAxOXMgYWN0dWFsbHkgYSBgendpdGNoYC5cbiAgICAgIGxldCBoYW5kbGUgPSBzdGF0ZS5oYW5kbGUuaGFuZGxlcnNbY2hpbGRyZW5baW5kZXggKyAxXS50eXBlXVxuICAgICAgLyoqIEB0eXBlIHtIYW5kbGV9ICovXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBodXNoLCBpdFx1MjAxOXMgYWN0dWFsbHkgYSBgendpdGNoYC5cbiAgICAgIGlmIChoYW5kbGUgJiYgaGFuZGxlLnBlZWspIGhhbmRsZSA9IGhhbmRsZS5wZWVrXG4gICAgICBhZnRlciA9IGhhbmRsZVxuICAgICAgICA/IGhhbmRsZShjaGlsZHJlbltpbmRleCArIDFdLCBwYXJlbnQsIHN0YXRlLCB7XG4gICAgICAgICAgICBiZWZvcmU6ICcnLFxuICAgICAgICAgICAgYWZ0ZXI6ICcnLFxuICAgICAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KClcbiAgICAgICAgICB9KS5jaGFyQXQoMClcbiAgICAgICAgOiAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlciA9IGluZm8uYWZ0ZXJcbiAgICB9XG5cbiAgICAvLyBJbiBzb21lIGNhc2VzLCBodG1sICh0ZXh0KSBjYW4gYmUgZm91bmQgaW4gcGhyYXNpbmcgcmlnaHQgYWZ0ZXIgYW4gZW9sLlxuICAgIC8vIFdoZW4gd2VcdTIwMTlkIHNlcmlhbGl6ZSB0aGF0LCBpbiBtb3N0IGNhc2VzIHRoYXQgd291bGQgYmUgc2VlbiBhcyBodG1sXG4gICAgLy8gKGZsb3cpLlxuICAgIC8vIEFzIHdlIGNhblx1MjAxOXQgZXNjYXBlIG9yIHNvIHRvIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcsIHdlIHRha2UgYSBzb21ld2hhdFxuICAgIC8vIHJlYXNvbmFibGUgYXBwcm9hY2g6IHJlcGxhY2UgdGhhdCBlb2wgd2l0aCBhIHNwYWNlLlxuICAgIC8vIFNlZTogPGh0dHBzOi8vZ2l0aHViLmNvbS9zeW50YXgtdHJlZS9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2lzc3Vlcy8xNT5cbiAgICBpZiAoXG4gICAgICByZXN1bHRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIChiZWZvcmUgPT09ICdcXHInIHx8IGJlZm9yZSA9PT0gJ1xcbicpICYmXG4gICAgICBjaGlsZC50eXBlID09PSAnaHRtbCdcbiAgICApIHtcbiAgICAgIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXSA9IHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5yZXBsYWNlKFxuICAgICAgICAvKFxccj9cXG58XFxyKSQvLFxuICAgICAgICAnICdcbiAgICAgIClcbiAgICAgIGJlZm9yZSA9ICcgJ1xuXG4gICAgICAvLyBUbyBkbzogZG9lcyB0aGlzIHdvcmsgdG8gcmVzZXQgdHJhY2tlcj9cbiAgICAgIHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pXG4gICAgICB0cmFja2VyLm1vdmUocmVzdWx0cy5qb2luKCcnKSlcbiAgICB9XG5cbiAgICBsZXQgdmFsdWUgPSBzdGF0ZS5oYW5kbGUoY2hpbGQsIHBhcmVudCwgc3RhdGUsIHtcbiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpLFxuICAgICAgYWZ0ZXIsXG4gICAgICBiZWZvcmVcbiAgICB9KVxuXG4gICAgLy8gSWYgd2UgaGFkIHRvIGVuY29kZSB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBwcmV2aW91cyBub2RlIGFuZCBpdFx1MjAxOXNcbiAgICAvLyBzdGlsbCB0aGUgc2FtZSBjaGFyYWN0ZXIsXG4gICAgLy8gZW5jb2RlIGl0LlxuICAgIGlmIChlbmNvZGVBZnRlciAmJiBlbmNvZGVBZnRlciA9PT0gdmFsdWUuc2xpY2UoMCwgMSkpIHtcbiAgICAgIHZhbHVlID1cbiAgICAgICAgZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGVuY29kZUFmdGVyLmNoYXJDb2RlQXQoMCkpICsgdmFsdWUuc2xpY2UoMSlcbiAgICB9XG5cbiAgICBjb25zdCBlbmNvZGluZ0luZm8gPSBzdGF0ZS5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm9cbiAgICBzdGF0ZS5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm8gPSB1bmRlZmluZWRcbiAgICBlbmNvZGVBZnRlciA9IHVuZGVmaW5lZFxuXG4gICAgLy8gSWYgd2UgaGF2ZSB0byBlbmNvZGUgdGhlIGZpcnN0IGNoYXJhY3RlciBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSBhbmRcbiAgICAvLyBpdFx1MjAxOXMgc3RpbGwgdGhlIHNhbWUgY2hhcmFjdGVyLFxuICAgIC8vIGVuY29kZSBpdC5cbiAgICBpZiAoZW5jb2RpbmdJbmZvKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3VsdHMubGVuZ3RoID4gMCAmJlxuICAgICAgICBlbmNvZGluZ0luZm8uYmVmb3JlICYmXG4gICAgICAgIGJlZm9yZSA9PT0gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLnNsaWNlKC0xKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXSA9XG4gICAgICAgICAgcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLnNsaWNlKDAsIC0xKSArXG4gICAgICAgICAgZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGJlZm9yZS5jaGFyQ29kZUF0KDApKVxuICAgICAgfVxuXG4gICAgICBpZiAoZW5jb2RpbmdJbmZvLmFmdGVyKSBlbmNvZGVBZnRlciA9IGFmdGVyXG4gICAgfVxuXG4gICAgdHJhY2tlci5tb3ZlKHZhbHVlKVxuICAgIHJlc3VsdHMucHVzaCh2YWx1ZSlcbiAgICBiZWZvcmUgPSB2YWx1ZS5zbGljZSgtMSlcbiAgfVxuXG4gIGluZGV4U3RhY2sucG9wKClcblxuICByZXR1cm4gcmVzdWx0cy5qb2luKCcnKVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKiBAaW1wb3J0IHtGbG93Q2hpbGRyZW4sIEZsb3dQYXJlbnRzLCBUcmFja0ZpZWxkc30gZnJvbSAnLi4vdHlwZXMuanMnXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0Zsb3dQYXJlbnRzfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGZsb3cgbm9kZXMuXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0ge1RyYWNrRmllbGRzfSBpbmZvXG4gKiAgIEluZm8gb24gd2hlcmUgd2UgYXJlIGluIHRoZSBkb2N1bWVudCB3ZSBhcmUgZ2VuZXJhdGluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgY2hpbGRyZW4sIGpvaW5lZCBieSAoYmxhbmspIGxpbmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVyRmxvdyhwYXJlbnQsIHN0YXRlLCBpbmZvKSB7XG4gIGNvbnN0IGluZGV4U3RhY2sgPSBzdGF0ZS5pbmRleFN0YWNrXG4gIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuIHx8IFtdXG4gIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pXG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgcmVzdWx0cyA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgaW5kZXhTdGFjay5wdXNoKC0xKVxuXG4gIHdoaWxlICgrK2luZGV4IDwgY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpbmRleF1cblxuICAgIGluZGV4U3RhY2tbaW5kZXhTdGFjay5sZW5ndGggLSAxXSA9IGluZGV4XG5cbiAgICByZXN1bHRzLnB1c2goXG4gICAgICB0cmFja2VyLm1vdmUoXG4gICAgICAgIHN0YXRlLmhhbmRsZShjaGlsZCwgcGFyZW50LCBzdGF0ZSwge1xuICAgICAgICAgIGJlZm9yZTogJ1xcbicsXG4gICAgICAgICAgYWZ0ZXI6ICdcXG4nLFxuICAgICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKVxuXG4gICAgaWYgKGNoaWxkLnR5cGUgIT09ICdsaXN0Jykge1xuICAgICAgc3RhdGUuYnVsbGV0TGFzdFVzZWQgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPCBjaGlsZHJlbi5sZW5ndGggLSAxKSB7XG4gICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgIHRyYWNrZXIubW92ZShiZXR3ZWVuKGNoaWxkLCBjaGlsZHJlbltpbmRleCArIDFdLCBwYXJlbnQsIHN0YXRlKSlcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBpbmRleFN0YWNrLnBvcCgpXG5cbiAgcmV0dXJuIHJlc3VsdHMuam9pbignJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Zsb3dDaGlsZHJlbn0gbGVmdFxuICogQHBhcmFtIHtGbG93Q2hpbGRyZW59IHJpZ2h0XG4gKiBAcGFyYW0ge0Zsb3dQYXJlbnRzfSBwYXJlbnRcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBiZXR3ZWVuKGxlZnQsIHJpZ2h0LCBwYXJlbnQsIHN0YXRlKSB7XG4gIGxldCBpbmRleCA9IHN0YXRlLmpvaW4ubGVuZ3RoXG5cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBjb25zdCByZXN1bHQgPSBzdGF0ZS5qb2luW2luZGV4XShsZWZ0LCByaWdodCwgcGFyZW50LCBzdGF0ZSlcblxuICAgIGlmIChyZXN1bHQgPT09IHRydWUgfHwgcmVzdWx0ID09PSAxKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuICdcXG4nLnJlcGVhdCgxICsgcmVzdWx0KVxuICAgIH1cblxuICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJ1xcblxcbjwhLS0tLT5cXG5cXG4nXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICdcXG5cXG4nXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtJbmRlbnRMaW5lc30gZnJvbSAnLi4vdHlwZXMuanMnXG4gKi9cblxuY29uc3QgZW9sID0gL1xccj9cXG58XFxyL2dcblxuLyoqXG4gKiBAdHlwZSB7SW5kZW50TGluZXN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRlbnRMaW5lcyh2YWx1ZSwgbWFwKSB7XG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgbGV0IHN0YXJ0ID0gMFxuICBsZXQgbGluZSA9IDBcbiAgLyoqIEB0eXBlIHtSZWdFeHBFeGVjQXJyYXkgfCBudWxsfSAqL1xuICBsZXQgbWF0Y2hcblxuICB3aGlsZSAoKG1hdGNoID0gZW9sLmV4ZWModmFsdWUpKSkge1xuICAgIG9uZSh2YWx1ZS5zbGljZShzdGFydCwgbWF0Y2guaW5kZXgpKVxuICAgIHJlc3VsdC5wdXNoKG1hdGNoWzBdKVxuICAgIHN0YXJ0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgICBsaW5lKytcbiAgfVxuXG4gIG9uZSh2YWx1ZS5zbGljZShzdGFydCkpXG5cbiAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICovXG4gIGZ1bmN0aW9uIG9uZSh2YWx1ZSkge1xuICAgIHJlc3VsdC5wdXNoKG1hcCh2YWx1ZSwgbGluZSwgIXZhbHVlKSlcbiAgfVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7U2FmZUNvbmZpZywgU3RhdGV9IGZyb20gJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nXG4gKi9cblxuaW1wb3J0IHtlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2V9IGZyb20gJy4vZW5jb2RlLWNoYXJhY3Rlci1yZWZlcmVuY2UuanMnXG5pbXBvcnQge3BhdHRlcm5JblNjb3BlfSBmcm9tICcuL3BhdHRlcm4taW4tc2NvcGUuanMnXG5cbi8qKlxuICogTWFrZSBhIHN0cmluZyBzYWZlIGZvciBlbWJlZGRpbmcgaW4gbWFya2Rvd24gY29uc3RydWN0cy5cbiAqXG4gKiBJbiBtYXJrZG93biwgYWxtb3N0IGFsbCBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIGNhbiwgaW4gY2VydGFpbiBjYXNlcyxcbiAqIHJlc3VsdCBpbiBzb21ldGhpbmcuXG4gKiBXaGV0aGVyIHRoZXkgZG8gaXMgaGlnaGx5IHN1YmplY3RpdmUgdG8gd2hlcmUgdGhleSBoYXBwZW4gYW5kIGluIHdoYXRcbiAqIHRoZXkgaGFwcGVuLlxuICpcbiAqIFRvIHNvbHZlIHRoaXMsIGBtZGFzdC11dGlsLXRvLW1hcmtkb3duYCB0cmFja3M6XG4gKlxuICogKiBDaGFyYWN0ZXJzIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZXRoaW5nO1xuICogKiBXaGF0IFx1MjAxQ2NvbnN0cnVjdHNcdTIwMUQgd2UgYXJlIGluLlxuICpcbiAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdGhlbiB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gdG8gZXNjYXBlIG9yIGVuY29kZVxuICogc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZCBhYm91dCB0aGUgY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gaW5wdXRcbiAqICAgUmF3IHZhbHVlIHRvIG1ha2Ugc2FmZS5cbiAqIEBwYXJhbSB7U2FmZUNvbmZpZ30gY29uZmlnXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBTZXJpYWxpemVkIG1hcmtkb3duIHNhZmUgZm9yIGVtYmVkZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhZmUoc3RhdGUsIGlucHV0LCBjb25maWcpIHtcbiAgY29uc3QgdmFsdWUgPSAoY29uZmlnLmJlZm9yZSB8fCAnJykgKyAoaW5wdXQgfHwgJycpICsgKGNvbmZpZy5hZnRlciB8fCAnJylcbiAgLyoqIEB0eXBlIHtBcnJheTxudW1iZXI+fSAqL1xuICBjb25zdCBwb3NpdGlvbnMgPSBbXVxuICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59ICovXG4gIGNvbnN0IHJlc3VsdCA9IFtdXG4gIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciwge2JlZm9yZTogYm9vbGVhbiwgYWZ0ZXI6IGJvb2xlYW59Pn0gKi9cbiAgY29uc3QgaW5mb3MgPSB7fVxuICBsZXQgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgc3RhdGUudW5zYWZlLmxlbmd0aCkge1xuICAgIGNvbnN0IHBhdHRlcm4gPSBzdGF0ZS51bnNhZmVbaW5kZXhdXG5cbiAgICBpZiAoIXBhdHRlcm5JblNjb3BlKHN0YXRlLnN0YWNrLCBwYXR0ZXJuKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGUuY29tcGlsZVBhdHRlcm4ocGF0dGVybilcbiAgICAvKiogQHR5cGUge1JlZ0V4cEV4ZWNBcnJheSB8IG51bGx9ICovXG4gICAgbGV0IG1hdGNoXG5cbiAgICB3aGlsZSAoKG1hdGNoID0gZXhwcmVzc2lvbi5leGVjKHZhbHVlKSkpIHtcbiAgICAgIGNvbnN0IGJlZm9yZSA9ICdiZWZvcmUnIGluIHBhdHRlcm4gfHwgQm9vbGVhbihwYXR0ZXJuLmF0QnJlYWspXG4gICAgICBjb25zdCBhZnRlciA9ICdhZnRlcicgaW4gcGF0dGVyblxuICAgICAgY29uc3QgcG9zaXRpb24gPSBtYXRjaC5pbmRleCArIChiZWZvcmUgPyBtYXRjaFsxXS5sZW5ndGggOiAwKVxuXG4gICAgICBpZiAocG9zaXRpb25zLmluY2x1ZGVzKHBvc2l0aW9uKSkge1xuICAgICAgICBpZiAoaW5mb3NbcG9zaXRpb25dLmJlZm9yZSAmJiAhYmVmb3JlKSB7XG4gICAgICAgICAgaW5mb3NbcG9zaXRpb25dLmJlZm9yZSA9IGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5mb3NbcG9zaXRpb25dLmFmdGVyICYmICFhZnRlcikge1xuICAgICAgICAgIGluZm9zW3Bvc2l0aW9uXS5hZnRlciA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uKVxuICAgICAgICBpbmZvc1twb3NpdGlvbl0gPSB7YmVmb3JlLCBhZnRlcn1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwb3NpdGlvbnMuc29ydChudW1lcmljYWwpXG5cbiAgbGV0IHN0YXJ0ID0gY29uZmlnLmJlZm9yZSA/IGNvbmZpZy5iZWZvcmUubGVuZ3RoIDogMFxuICBjb25zdCBlbmQgPSB2YWx1ZS5sZW5ndGggLSAoY29uZmlnLmFmdGVyID8gY29uZmlnLmFmdGVyLmxlbmd0aCA6IDApXG4gIGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IHBvc2l0aW9ucy5sZW5ndGgpIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uc1tpbmRleF1cblxuICAgIC8vIENoYXJhY3RlciBiZWZvcmUgb3IgYWZ0ZXIgbWF0Y2hlZDpcbiAgICBpZiAocG9zaXRpb24gPCBzdGFydCB8fCBwb3NpdGlvbiA+PSBlbmQpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBjaGFyYWN0ZXIgaXMgc3VwcG9zZWQgdG8gYmUgZXNjYXBlZCBiZWNhdXNlIGl0IGhhcyBhIGNvbmRpdGlvbiBvblxuICAgIC8vIHRoZSBuZXh0IGNoYXJhY3RlciwgYW5kIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBkZWZpbml0bHkgYmVpbmcgZXNjYXBlZCxcbiAgICAvLyB0aGVuIHNraXAgdGhpcyBlc2NhcGUuXG4gICAgaWYgKFxuICAgICAgKHBvc2l0aW9uICsgMSA8IGVuZCAmJlxuICAgICAgICBwb3NpdGlvbnNbaW5kZXggKyAxXSA9PT0gcG9zaXRpb24gKyAxICYmXG4gICAgICAgIGluZm9zW3Bvc2l0aW9uXS5hZnRlciAmJlxuICAgICAgICAhaW5mb3NbcG9zaXRpb24gKyAxXS5iZWZvcmUgJiZcbiAgICAgICAgIWluZm9zW3Bvc2l0aW9uICsgMV0uYWZ0ZXIpIHx8XG4gICAgICAocG9zaXRpb25zW2luZGV4IC0gMV0gPT09IHBvc2l0aW9uIC0gMSAmJlxuICAgICAgICBpbmZvc1twb3NpdGlvbl0uYmVmb3JlICYmXG4gICAgICAgICFpbmZvc1twb3NpdGlvbiAtIDFdLmJlZm9yZSAmJlxuICAgICAgICAhaW5mb3NbcG9zaXRpb24gLSAxXS5hZnRlcilcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ICE9PSBwb3NpdGlvbikge1xuICAgICAgLy8gSWYgd2UgaGF2ZSB0byB1c2UgYSBjaGFyYWN0ZXIgcmVmZXJlbmNlLCBhbiBhbXBlcnNhbmQgd291bGQgYmUgbW9yZVxuICAgICAgLy8gY29ycmVjdCwgYnV0IGFzIGJhY2tzbGFzaGVzIG9ubHkgY2FyZSBhYm91dCBwdW5jdHVhdGlvbiwgZWl0aGVyIHdpbGxcbiAgICAgIC8vIGRvIHRoZSB0cmlja1xuICAgICAgcmVzdWx0LnB1c2goZXNjYXBlQmFja3NsYXNoZXModmFsdWUuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uKSwgJ1xcXFwnKSlcbiAgICB9XG5cbiAgICBzdGFydCA9IHBvc2l0aW9uXG5cbiAgICBpZiAoXG4gICAgICAvWyEtLzotQFstYHstfl0vLnRlc3QodmFsdWUuY2hhckF0KHBvc2l0aW9uKSkgJiZcbiAgICAgICghY29uZmlnLmVuY29kZSB8fCAhY29uZmlnLmVuY29kZS5pbmNsdWRlcyh2YWx1ZS5jaGFyQXQocG9zaXRpb24pKSlcbiAgICApIHtcbiAgICAgIC8vIENoYXJhY3RlciBlc2NhcGUuXG4gICAgICByZXN1bHQucHVzaCgnXFxcXCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENoYXJhY3RlciByZWZlcmVuY2UuXG4gICAgICByZXN1bHQucHVzaChlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUuY2hhckNvZGVBdChwb3NpdGlvbikpKVxuICAgICAgc3RhcnQrK1xuICAgIH1cbiAgfVxuXG4gIHJlc3VsdC5wdXNoKGVzY2FwZUJhY2tzbGFzaGVzKHZhbHVlLnNsaWNlKHN0YXJ0LCBlbmQpLCBjb25maWcuYWZ0ZXIpKVxuXG4gIHJldHVybiByZXN1bHQuam9pbignJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIG51bWVyaWNhbChhLCBiKSB7XG4gIHJldHVybiBhIC0gYlxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGFmdGVyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVCYWNrc2xhc2hlcyh2YWx1ZSwgYWZ0ZXIpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IC9cXFxcKD89WyEtLzotQFstYHstfl0pL2dcbiAgLyoqIEB0eXBlIHtBcnJheTxudW1iZXI+fSAqL1xuICBjb25zdCBwb3NpdGlvbnMgPSBbXVxuICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59ICovXG4gIGNvbnN0IHJlc3VsdHMgPSBbXVxuICBjb25zdCB3aG9sZSA9IHZhbHVlICsgYWZ0ZXJcbiAgbGV0IGluZGV4ID0gLTFcbiAgbGV0IHN0YXJ0ID0gMFxuICAvKiogQHR5cGUge1JlZ0V4cEV4ZWNBcnJheSB8IG51bGx9ICovXG4gIGxldCBtYXRjaFxuXG4gIHdoaWxlICgobWF0Y2ggPSBleHByZXNzaW9uLmV4ZWMod2hvbGUpKSkge1xuICAgIHBvc2l0aW9ucy5wdXNoKG1hdGNoLmluZGV4KVxuICB9XG5cbiAgd2hpbGUgKCsraW5kZXggPCBwb3NpdGlvbnMubGVuZ3RoKSB7XG4gICAgaWYgKHN0YXJ0ICE9PSBwb3NpdGlvbnNbaW5kZXhdKSB7XG4gICAgICByZXN1bHRzLnB1c2godmFsdWUuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uc1tpbmRleF0pKVxuICAgIH1cblxuICAgIHJlc3VsdHMucHVzaCgnXFxcXCcpXG4gICAgc3RhcnQgPSBwb3NpdGlvbnNbaW5kZXhdXG4gIH1cblxuICByZXN1bHRzLnB1c2godmFsdWUuc2xpY2Uoc3RhcnQpKVxuXG4gIHJldHVybiByZXN1bHRzLmpvaW4oJycpXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtDcmVhdGVUcmFja2VyLCBUcmFja0N1cnJlbnQsIFRyYWNrTW92ZSwgVHJhY2tTaGlmdH0gZnJvbSAnLi4vdHlwZXMuanMnXG4gKi9cblxuLyoqXG4gKiBUcmFjayBwb3NpdGlvbmFsIGluZm8gaW4gdGhlIG91dHB1dC5cbiAqXG4gKiBAdHlwZSB7Q3JlYXRlVHJhY2tlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrKGNvbmZpZykge1xuICAvLyBEZWZhdWx0cyBhcmUgdXNlZCB0byBwcmV2ZW50IGNyYXNoZXMgd2hlbiBvbGRlciB1dGlsaXRpZXMgc29tZWhvdyBhY3RpdmF0ZVxuICAvLyB0aGlzIGNvZGUuXG4gIC8qIGM4IGlnbm9yZSBuZXh0IDUgKi9cbiAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZyB8fCB7fVxuICBjb25zdCBub3cgPSBvcHRpb25zLm5vdyB8fCB7fVxuICBsZXQgbGluZVNoaWZ0ID0gb3B0aW9ucy5saW5lU2hpZnQgfHwgMFxuICBsZXQgbGluZSA9IG5vdy5saW5lIHx8IDFcbiAgbGV0IGNvbHVtbiA9IG5vdy5jb2x1bW4gfHwgMVxuXG4gIHJldHVybiB7bW92ZSwgY3VycmVudCwgc2hpZnR9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB0cmFja2VkIGluZm8uXG4gICAqXG4gICAqIEB0eXBlIHtUcmFja0N1cnJlbnR9XG4gICAqL1xuICBmdW5jdGlvbiBjdXJyZW50KCkge1xuICAgIHJldHVybiB7bm93OiB7bGluZSwgY29sdW1ufSwgbGluZVNoaWZ0fVxuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhbiBpbmNyZWFzZWQgbGluZSBzaGlmdCAodGhlIHR5cGljYWwgaW5kZW50IGZvciBsaW5lcykuXG4gICAqXG4gICAqIEB0eXBlIHtUcmFja1NoaWZ0fVxuICAgKi9cbiAgZnVuY3Rpb24gc2hpZnQodmFsdWUpIHtcbiAgICBsaW5lU2hpZnQgKz0gdmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHBhc3Qgc29tZSBnZW5lcmF0ZWQgbWFya2Rvd24uXG4gICAqXG4gICAqIEB0eXBlIHtUcmFja01vdmV9XG4gICAqL1xuICBmdW5jdGlvbiBtb3ZlKGlucHV0KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRlZmF1bHQtcGFyYW1ldGVyc1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXQgfHwgJydcbiAgICBjb25zdCBjaHVua3MgPSB2YWx1ZS5zcGxpdCgvXFxyP1xcbnxcXHIvZylcbiAgICBjb25zdCB0YWlsID0gY2h1bmtzW2NodW5rcy5sZW5ndGggLSAxXVxuICAgIGxpbmUgKz0gY2h1bmtzLmxlbmd0aCAtIDFcbiAgICBjb2x1bW4gPVxuICAgICAgY2h1bmtzLmxlbmd0aCA9PT0gMSA/IGNvbHVtbiArIHRhaWwubGVuZ3RoIDogMSArIHRhaWwubGVuZ3RoICsgbGluZVNoaWZ0XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0luZm8sIEpvaW4sIE9wdGlvbnMsIFNhZmVDb25maWcsIFN0YXRlfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuICogQGltcG9ydCB7Tm9kZXN9IGZyb20gJ21kYXN0J1xuICogQGltcG9ydCB7RW50ZXIsIEZsb3dQYXJlbnRzLCBQaHJhc2luZ1BhcmVudHMsIFRyYWNrRmllbGRzfSBmcm9tICcuL3R5cGVzLmpzJ1xuICovXG5cbmltcG9ydCB7endpdGNofSBmcm9tICd6d2l0Y2gnXG5pbXBvcnQge2NvbmZpZ3VyZX0gZnJvbSAnLi9jb25maWd1cmUuanMnXG5pbXBvcnQge2hhbmRsZSBhcyBoYW5kbGVyc30gZnJvbSAnLi9oYW5kbGUvaW5kZXguanMnXG5pbXBvcnQge2pvaW59IGZyb20gJy4vam9pbi5qcydcbmltcG9ydCB7dW5zYWZlfSBmcm9tICcuL3Vuc2FmZS5qcydcbmltcG9ydCB7YXNzb2NpYXRpb259IGZyb20gJy4vdXRpbC9hc3NvY2lhdGlvbi5qcydcbmltcG9ydCB7Y29tcGlsZVBhdHRlcm59IGZyb20gJy4vdXRpbC9jb21waWxlLXBhdHRlcm4uanMnXG5pbXBvcnQge2NvbnRhaW5lclBocmFzaW5nfSBmcm9tICcuL3V0aWwvY29udGFpbmVyLXBocmFzaW5nLmpzJ1xuaW1wb3J0IHtjb250YWluZXJGbG93fSBmcm9tICcuL3V0aWwvY29udGFpbmVyLWZsb3cuanMnXG5pbXBvcnQge2luZGVudExpbmVzfSBmcm9tICcuL3V0aWwvaW5kZW50LWxpbmVzLmpzJ1xuaW1wb3J0IHtzYWZlfSBmcm9tICcuL3V0aWwvc2FmZS5qcydcbmltcG9ydCB7dHJhY2t9IGZyb20gJy4vdXRpbC90cmFjay5qcydcblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IHN5bnRheCB0cmVlIGludG8gbWFya2Rvd24uXG4gKlxuICogQHBhcmFtIHtOb2Rlc30gdHJlZVxuICogICBUcmVlIHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBTZXJpYWxpemVkIG1hcmtkb3duIHJlcHJlc2VudGluZyBgdHJlZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b01hcmtkb3duKHRyZWUsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9XG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIGFzc29jaWF0aW9uSWQ6IGFzc29jaWF0aW9uLFxuICAgIGNvbnRhaW5lclBocmFzaW5nOiBjb250YWluZXJQaHJhc2luZ0JvdW5kLFxuICAgIGNvbnRhaW5lckZsb3c6IGNvbnRhaW5lckZsb3dCb3VuZCxcbiAgICBjcmVhdGVUcmFja2VyOiB0cmFjayxcbiAgICBjb21waWxlUGF0dGVybixcbiAgICBlbnRlcixcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBHRk0gLyBmcm9udG1hdHRlciBhcmUgdHlwZWQgaW4gYG1kYXN0YCBidXQgbm90IGRlZmluZWRcbiAgICAvLyBoZXJlLlxuICAgIGhhbmRsZXJzOiB7Li4uaGFuZGxlcnN9LFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGFkZCBgaGFuZGxlYCBpbiBhIHNlY29uZC5cbiAgICBoYW5kbGU6IHVuZGVmaW5lZCxcbiAgICBpbmRlbnRMaW5lcyxcbiAgICBpbmRleFN0YWNrOiBbXSxcbiAgICBqb2luOiBbLi4uam9pbl0sXG4gICAgb3B0aW9uczoge30sXG4gICAgc2FmZTogc2FmZUJvdW5kLFxuICAgIHN0YWNrOiBbXSxcbiAgICB1bnNhZmU6IFsuLi51bnNhZmVdXG4gIH1cblxuICBjb25maWd1cmUoc3RhdGUsIHNldHRpbmdzKVxuXG4gIGlmIChzdGF0ZS5vcHRpb25zLnRpZ2h0RGVmaW5pdGlvbnMpIHtcbiAgICBzdGF0ZS5qb2luLnB1c2goam9pbkRlZmluaXRpb24pXG4gIH1cblxuICBzdGF0ZS5oYW5kbGUgPSB6d2l0Y2goJ3R5cGUnLCB7XG4gICAgaW52YWxpZCxcbiAgICB1bmtub3duLFxuICAgIGhhbmRsZXJzOiBzdGF0ZS5oYW5kbGVyc1xuICB9KVxuXG4gIGxldCByZXN1bHQgPSBzdGF0ZS5oYW5kbGUodHJlZSwgdW5kZWZpbmVkLCBzdGF0ZSwge1xuICAgIGJlZm9yZTogJ1xcbicsXG4gICAgYWZ0ZXI6ICdcXG4nLFxuICAgIG5vdzoge2xpbmU6IDEsIGNvbHVtbjogMX0sXG4gICAgbGluZVNoaWZ0OiAwXG4gIH0pXG5cbiAgaWYgKFxuICAgIHJlc3VsdCAmJlxuICAgIHJlc3VsdC5jaGFyQ29kZUF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gMTAgJiZcbiAgICByZXN1bHQuY2hhckNvZGVBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IDEzXG4gICkge1xuICAgIHJlc3VsdCArPSAnXFxuJ1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxuXG4gIC8qKiBAdHlwZSB7RW50ZXJ9ICovXG4gIGZ1bmN0aW9uIGVudGVyKG5hbWUpIHtcbiAgICBzdGF0ZS5zdGFjay5wdXNoKG5hbWUpXG4gICAgcmV0dXJuIGV4aXRcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZXhpdCgpIHtcbiAgICAgIHN0YXRlLnN0YWNrLnBvcCgpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogQHJldHVybnMge25ldmVyfVxuICovXG5mdW5jdGlvbiBpbnZhbGlkKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGhhbmRsZSB2YWx1ZSBgJyArIHZhbHVlICsgJ2AsIGV4cGVjdGVkIG5vZGUnKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqIEByZXR1cm5zIHtuZXZlcn1cbiAqL1xuZnVuY3Rpb24gdW5rbm93bih2YWx1ZSkge1xuICAvLyBBbHdheXMgYSBub2RlLlxuICBjb25zdCBub2RlID0gLyoqIEB0eXBlIHtOb2Rlc30gKi8gKHZhbHVlKVxuICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBoYW5kbGUgdW5rbm93biBub2RlIGAnICsgbm9kZS50eXBlICsgJ2AnKVxufVxuXG4vKiogQHR5cGUge0pvaW59ICovXG5mdW5jdGlvbiBqb2luRGVmaW5pdGlvbihsZWZ0LCByaWdodCkge1xuICAvLyBObyBibGFuayBsaW5lIGJldHdlZW4gYWRqYWNlbnQgZGVmaW5pdGlvbnMuXG4gIGlmIChsZWZ0LnR5cGUgPT09ICdkZWZpbml0aW9uJyAmJiBsZWZ0LnR5cGUgPT09IHJpZ2h0LnR5cGUpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBjaGlsZHJlbiBvZiBhIHBhcmVudCB0aGF0IGNvbnRhaW5zIHBocmFzaW5nIGNoaWxkcmVuLlxuICpcbiAqIFRoZXNlIGNoaWxkcmVuIHdpbGwgYmUgam9pbmVkIGZsdXNoIHRvZ2V0aGVyLlxuICpcbiAqIEB0aGlzIHtTdGF0ZX1cbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHtQaHJhc2luZ1BhcmVudHN9IHBhcmVudFxuICogICBQYXJlbnQgb2YgZmxvdyBub2Rlcy5cbiAqIEBwYXJhbSB7SW5mb30gaW5mb1xuICogICBJbmZvIG9uIHdoZXJlIHdlIGFyZSBpbiB0aGUgZG9jdW1lbnQgd2UgYXJlIGdlbmVyYXRpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBTZXJpYWxpemVkIGNoaWxkcmVuLCBqb2luZWQgdG9nZXRoZXIuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5lclBocmFzaW5nQm91bmQocGFyZW50LCBpbmZvKSB7XG4gIHJldHVybiBjb250YWluZXJQaHJhc2luZyhwYXJlbnQsIHRoaXMsIGluZm8pXG59XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBjaGlsZHJlbiBvZiBhIHBhcmVudCB0aGF0IGNvbnRhaW5zIGZsb3cgY2hpbGRyZW4uXG4gKlxuICogVGhlc2UgY2hpbGRyZW4gd2lsbCB0eXBpY2FsbHkgYmUgam9pbmVkIGJ5IGJsYW5rIGxpbmVzLlxuICogV2hhdCB0aGV5IGFyZSBqb2luZWQgYnkgZXhhY3RseSBpcyBkZWZpbmVkIGJ5IGBKb2luYCBmdW5jdGlvbnMuXG4gKlxuICogQHRoaXMge1N0YXRlfVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0ge0Zsb3dQYXJlbnRzfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGZsb3cgbm9kZXMuXG4gKiBAcGFyYW0ge1RyYWNrRmllbGRzfSBpbmZvXG4gKiAgIEluZm8gb24gd2hlcmUgd2UgYXJlIGluIHRoZSBkb2N1bWVudCB3ZSBhcmUgZ2VuZXJhdGluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgY2hpbGRyZW4sIGpvaW5lZCBieSAoYmxhbmspIGxpbmVzLlxuICovXG5mdW5jdGlvbiBjb250YWluZXJGbG93Qm91bmQocGFyZW50LCBpbmZvKSB7XG4gIHJldHVybiBjb250YWluZXJGbG93KHBhcmVudCwgdGhpcywgaW5mbylcbn1cblxuLyoqXG4gKiBNYWtlIGEgc3RyaW5nIHNhZmUgZm9yIGVtYmVkZGluZyBpbiBtYXJrZG93biBjb25zdHJ1Y3RzLlxuICpcbiAqIEluIG1hcmtkb3duLCBhbG1vc3QgYWxsIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMgY2FuLCBpbiBjZXJ0YWluIGNhc2VzLFxuICogcmVzdWx0IGluIHNvbWV0aGluZy5cbiAqIFdoZXRoZXIgdGhleSBkbyBpcyBoaWdobHkgc3ViamVjdGl2ZSB0byB3aGVyZSB0aGV5IGhhcHBlbiBhbmQgaW4gd2hhdFxuICogdGhleSBoYXBwZW4uXG4gKlxuICogVG8gc29sdmUgdGhpcywgYG1kYXN0LXV0aWwtdG8tbWFya2Rvd25gIHRyYWNrczpcbiAqXG4gKiAqIENoYXJhY3RlcnMgYmVmb3JlIGFuZCBhZnRlciBzb21ldGhpbmc7XG4gKiAqIFdoYXQgXHUyMDFDY29uc3RydWN0c1x1MjAxRCB3ZSBhcmUgaW4uXG4gKlxuICogVGhpcyBpbmZvcm1hdGlvbiBpcyB0aGVuIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiB0byBlc2NhcGUgb3IgZW5jb2RlXG4gKiBzcGVjaWFsIGNoYXJhY3RlcnMuXG4gKlxuICogQHRoaXMge1N0YXRlfVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IHZhbHVlXG4gKiAgIFJhdyB2YWx1ZSB0byBtYWtlIHNhZmUuXG4gKiBAcGFyYW0ge1NhZmVDb25maWd9IGNvbmZpZ1xuICogICBDb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU2VyaWFsaXplZCBtYXJrZG93biBzYWZlIGZvciBlbWJlZGRpbmcuXG4gKi9cbmZ1bmN0aW9uIHNhZmVCb3VuZCh2YWx1ZSwgY29uZmlnKSB7XG4gIHJldHVybiBzYWZlKHRoaXMsIHZhbHVlLCBjb25maWcpXG59XG4iLCAiLy8gTm90ZTogZXh0cmEgdHlwZXMgZXhwb3NlZCBmcm9tIGBpbmRleC5kLnRzYC5cbmV4cG9ydCB7dG9NYXJrZG93bn0gZnJvbSAnLi9saWIvaW5kZXguanMnXG5leHBvcnQge2hhbmRsZSBhcyBkZWZhdWx0SGFuZGxlcnN9IGZyb20gJy4vbGliL2hhbmRsZS9pbmRleC5qcydcbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuSW5saW5lQ29kZX0gSW5saW5lQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5UYWJsZX0gVGFibGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuVGFibGVDZWxsfSBUYWJsZUNlbGxcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuVGFibGVSb3d9IFRhYmxlUm93XG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWFya2Rvd24tdGFibGUnKS5PcHRpb25zfSBNYXJrZG93blRhYmxlT3B0aW9uc1xuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bicpLkNvbXBpbGVDb250ZXh0fSBDb21waWxlQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duJykuRXh0ZW5zaW9ufSBGcm9tTWFya2Rvd25FeHRlbnNpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bicpLkhhbmRsZX0gRnJvbU1hcmtkb3duSGFuZGxlXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QtdXRpbC10by1tYXJrZG93bicpLk9wdGlvbnN9IFRvTWFya2Rvd25FeHRlbnNpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nKS5IYW5kbGV9IFRvTWFya2Rvd25IYW5kbGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nKS5JbmZvfSBJbmZvXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBPcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbdGFibGVDZWxsUGFkZGluZz10cnVlXVxuICogICBXaGV0aGVyIHRvIGFkZCBhIHNwYWNlIG9mIHBhZGRpbmcgYmV0d2VlbiBkZWxpbWl0ZXJzIGFuZCBjZWxscyAoZGVmYXVsdDpcbiAqICAgYHRydWVgKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFt0YWJsZVBpcGVBbGlnbj10cnVlXVxuICogICBXaGV0aGVyIHRvIGFsaWduIHRoZSBkZWxpbWl0ZXJzIChkZWZhdWx0OiBgdHJ1ZWApLlxuICogQHByb3BlcnR5IHtNYXJrZG93blRhYmxlT3B0aW9uc1snc3RyaW5nTGVuZ3RoJ10gfCBudWxsIHwgdW5kZWZpbmVkfSBbc3RyaW5nTGVuZ3RoXVxuICogICBGdW5jdGlvbiB0byBkZXRlY3QgdGhlIGxlbmd0aCBvZiB0YWJsZSBjZWxsIGNvbnRlbnQsIHVzZWQgd2hlbiBhbGlnbmluZ1xuICogICB0aGUgZGVsaW1pdGVycyBiZXR3ZWVuIGNlbGxzIChvcHRpb25hbCkuXG4gKi9cblxuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ2RldmxvcCdcbmltcG9ydCB7bWFya2Rvd25UYWJsZX0gZnJvbSAnbWFya2Rvd24tdGFibGUnXG5pbXBvcnQge2RlZmF1bHRIYW5kbGVyc30gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duYCB0byBlbmFibGUgR0ZNIHRhYmxlcyBpblxuICogbWFya2Rvd24uXG4gKlxuICogQHJldHVybnMge0Zyb21NYXJrZG93bkV4dGVuc2lvbn1cbiAqICAgRXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duYCB0byBlbmFibGUgR0ZNIHRhYmxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdmbVRhYmxlRnJvbU1hcmtkb3duKCkge1xuICByZXR1cm4ge1xuICAgIGVudGVyOiB7XG4gICAgICB0YWJsZTogZW50ZXJUYWJsZSxcbiAgICAgIHRhYmxlRGF0YTogZW50ZXJDZWxsLFxuICAgICAgdGFibGVIZWFkZXI6IGVudGVyQ2VsbCxcbiAgICAgIHRhYmxlUm93OiBlbnRlclJvd1xuICAgIH0sXG4gICAgZXhpdDoge1xuICAgICAgY29kZVRleHQ6IGV4aXRDb2RlVGV4dCxcbiAgICAgIHRhYmxlOiBleGl0VGFibGUsXG4gICAgICB0YWJsZURhdGE6IGV4aXQsXG4gICAgICB0YWJsZUhlYWRlcjogZXhpdCxcbiAgICAgIHRhYmxlUm93OiBleGl0XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICogQHR5cGUge0Zyb21NYXJrZG93bkhhbmRsZX1cbiAqL1xuZnVuY3Rpb24gZW50ZXJUYWJsZSh0b2tlbikge1xuICBjb25zdCBhbGlnbiA9IHRva2VuLl9hbGlnblxuICBhc3NlcnQoYWxpZ24sICdleHBlY3RlZCBgX2FsaWduYCBvbiB0YWJsZScpXG4gIHRoaXMuZW50ZXIoXG4gICAge1xuICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgIGFsaWduOiBhbGlnbi5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgcmV0dXJuIGQgPT09ICdub25lJyA/IG51bGwgOiBkXG4gICAgICB9KSxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH0sXG4gICAgdG9rZW5cbiAgKVxuICB0aGlzLmRhdGEuaW5UYWJsZSA9IHRydWVcbn1cblxuLyoqXG4gKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gKiBAdHlwZSB7RnJvbU1hcmtkb3duSGFuZGxlfVxuICovXG5mdW5jdGlvbiBleGl0VGFibGUodG9rZW4pIHtcbiAgdGhpcy5leGl0KHRva2VuKVxuICB0aGlzLmRhdGEuaW5UYWJsZSA9IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAqIEB0eXBlIHtGcm9tTWFya2Rvd25IYW5kbGV9XG4gKi9cbmZ1bmN0aW9uIGVudGVyUm93KHRva2VuKSB7XG4gIHRoaXMuZW50ZXIoe3R5cGU6ICd0YWJsZVJvdycsIGNoaWxkcmVuOiBbXX0sIHRva2VuKVxufVxuXG4vKipcbiAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAqIEB0eXBlIHtGcm9tTWFya2Rvd25IYW5kbGV9XG4gKi9cbmZ1bmN0aW9uIGV4aXQodG9rZW4pIHtcbiAgdGhpcy5leGl0KHRva2VuKVxufVxuXG4vKipcbiAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAqIEB0eXBlIHtGcm9tTWFya2Rvd25IYW5kbGV9XG4gKi9cbmZ1bmN0aW9uIGVudGVyQ2VsbCh0b2tlbikge1xuICB0aGlzLmVudGVyKHt0eXBlOiAndGFibGVDZWxsJywgY2hpbGRyZW46IFtdfSwgdG9rZW4pXG59XG5cbi8vIE92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBjb2RlIHRleHQgZGF0YSBoYW5kbGVyIHRvIHVuZXNjYXBlIGVzY2FwZWQgcGlwZXMgd2hlblxuLy8gdGhleSBhcmUgaW4gdGFibGVzLlxuLyoqXG4gKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gKiBAdHlwZSB7RnJvbU1hcmtkb3duSGFuZGxlfVxuICovXG5mdW5jdGlvbiBleGl0Q29kZVRleHQodG9rZW4pIHtcbiAgbGV0IHZhbHVlID0gdGhpcy5yZXN1bWUoKVxuXG4gIGlmICh0aGlzLmRhdGEuaW5UYWJsZSkge1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFxcXChbXFxcXHxdKS9nLCByZXBsYWNlKVxuICB9XG5cbiAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICBhc3NlcnQobm9kZS50eXBlID09PSAnaW5saW5lQ29kZScpXG4gIG5vZGUudmFsdWUgPSB2YWx1ZVxuICB0aGlzLmV4aXQodG9rZW4pXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9ICQwXG4gKiBAcGFyYW0ge3N0cmluZ30gJDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2UoJDAsICQxKSB7XG4gIC8vIFBpcGVzIHdvcmssIGJhY2tzbGFzaGVzIGRvblx1MjAxOXQgKGJ1dCBjYW5cdTIwMTl0IGVzY2FwZSBwaXBlcykuXG4gIHJldHVybiAkMSA9PT0gJ3wnID8gJDEgOiAkMFxufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBleHRlbnNpb24gZm9yIGBtZGFzdC11dGlsLXRvLW1hcmtkb3duYCB0byBlbmFibGUgR0ZNIHRhYmxlcyBpblxuICogbWFya2Rvd24uXG4gKlxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7VG9NYXJrZG93bkV4dGVuc2lvbn1cbiAqICAgRXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC10by1tYXJrZG93bmAgdG8gZW5hYmxlIEdGTSB0YWJsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZm1UYWJsZVRvTWFya2Rvd24ob3B0aW9ucykge1xuICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge31cbiAgY29uc3QgcGFkZGluZyA9IHNldHRpbmdzLnRhYmxlQ2VsbFBhZGRpbmdcbiAgY29uc3QgYWxpZ25EZWxpbWl0ZXJzID0gc2V0dGluZ3MudGFibGVQaXBlQWxpZ25cbiAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc2V0dGluZ3Muc3RyaW5nTGVuZ3RoXG4gIGNvbnN0IGFyb3VuZCA9IHBhZGRpbmcgPyAnICcgOiAnfCdcblxuICByZXR1cm4ge1xuICAgIHVuc2FmZTogW1xuICAgICAge2NoYXJhY3RlcjogJ1xccicsIGluQ29uc3RydWN0OiAndGFibGVDZWxsJ30sXG4gICAgICB7Y2hhcmFjdGVyOiAnXFxuJywgaW5Db25zdHJ1Y3Q6ICd0YWJsZUNlbGwnfSxcbiAgICAgIC8vIEEgcGlwZSwgd2hlbiBmb2xsb3dlZCBieSBhIHRhYiBvciBzcGFjZSAocGFkZGluZyksIG9yIGEgZGFzaCBvciBjb2xvblxuICAgICAgLy8gKHVucGFkZGVkIGRlbGltaXRlciByb3cpLCBjb3VsZCByZXN1bHQgaW4gYSB0YWJsZS5cbiAgICAgIHthdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICd8JywgYWZ0ZXI6ICdbXFx0IDotXSd9LFxuICAgICAgLy8gQSBwaXBlIGluIGEgY2VsbCBtdXN0IGJlIGVuY29kZWQuXG4gICAgICB7Y2hhcmFjdGVyOiAnfCcsIGluQ29uc3RydWN0OiAndGFibGVDZWxsJ30sXG4gICAgICAvLyBBIGNvbG9uIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBkYXNoLCBpbiB3aGljaCBjYXNlIGl0IGNvdWxkIHN0YXJ0IGFcbiAgICAgIC8vIGRlbGltaXRlciByb3cuXG4gICAgICB7YXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAnOicsIGFmdGVyOiAnLSd9LFxuICAgICAgLy8gQSBkZWxpbWl0ZXIgcm93IGNhbiBhbHNvIHN0YXJ0IHdpdGggYSBkYXNoLCB3aGVuIGZvbGxvd2VkIGJ5IG1vcmVcbiAgICAgIC8vIGRhc2hlcywgYSBjb2xvbiwgb3IgYSBwaXBlLlxuICAgICAgLy8gVGhpcyBpcyBhIHN0cmljdGVyIHZlcnNpb24gdGhhbiB0aGUgYnVpbHQgaW4gY2hlY2sgZm9yIGxpc3RzLCB0aGVtYXRpY1xuICAgICAgLy8gYnJlYWtzLCBhbmQgc2V0ZXggaGVhZGluZyB1bmRlcmxpbmVzIHRob3VnaDpcbiAgICAgIC8vIDxodHRwczovL2dpdGh1Yi5jb20vc3ludGF4LXRyZWUvbWRhc3QtdXRpbC10by1tYXJrZG93bi9ibG9iLzUxYTIwMzgvbGliL3Vuc2FmZS5qcyNMNTc+XG4gICAgICB7YXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAnLScsIGFmdGVyOiAnWzp8LV0nfVxuICAgIF0sXG4gICAgaGFuZGxlcnM6IHtcbiAgICAgIGlubGluZUNvZGU6IGlubGluZUNvZGVXaXRoVGFibGUsXG4gICAgICB0YWJsZTogaGFuZGxlVGFibGUsXG4gICAgICB0YWJsZUNlbGw6IGhhbmRsZVRhYmxlQ2VsbCxcbiAgICAgIHRhYmxlUm93OiBoYW5kbGVUYWJsZVJvd1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7VG9NYXJrZG93bkhhbmRsZX1cbiAgICogQHBhcmFtIHtUYWJsZX0gbm9kZVxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlVGFibGUobm9kZSwgXywgc3RhdGUsIGluZm8pIHtcbiAgICByZXR1cm4gc2VyaWFsaXplRGF0YShoYW5kbGVUYWJsZUFzRGF0YShub2RlLCBzdGF0ZSwgaW5mbyksIG5vZGUuYWxpZ24pXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpc25cdTIwMTl0IHJlYWxseSB1c2VkIG5vcm1hbGx5LCBiZWNhdXNlIHdlIGhhbmRsZSByb3dzIGF0IHRoZVxuICAgKiB0YWJsZSBsZXZlbC5cbiAgICogQnV0LCBpZiBzb21lb25lIHBhc3NlcyBpbiBhIHRhYmxlIHJvdywgdGhpcyBlbnN1cmVzIHdlIG1ha2Ugc29tZXdoYXQgc2Vuc2UuXG4gICAqXG4gICAqIEB0eXBlIHtUb01hcmtkb3duSGFuZGxlfVxuICAgKiBAcGFyYW0ge1RhYmxlUm93fSBub2RlXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVUYWJsZVJvdyhub2RlLCBfLCBzdGF0ZSwgaW5mbykge1xuICAgIGNvbnN0IHJvdyA9IGhhbmRsZVRhYmxlUm93QXNEYXRhKG5vZGUsIHN0YXRlLCBpbmZvKVxuICAgIGNvbnN0IHZhbHVlID0gc2VyaWFsaXplRGF0YShbcm93XSlcbiAgICAvLyBgbWFya2Rvd24tdGFibGVgIHdpbGwgYWx3YXlzIGFkZCBhbiBhbGlnbiByb3dcbiAgICByZXR1cm4gdmFsdWUuc2xpY2UoMCwgdmFsdWUuaW5kZXhPZignXFxuJykpXG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge1RvTWFya2Rvd25IYW5kbGV9XG4gICAqIEBwYXJhbSB7VGFibGVDZWxsfSBub2RlXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVUYWJsZUNlbGwobm9kZSwgXywgc3RhdGUsIGluZm8pIHtcbiAgICBjb25zdCBleGl0ID0gc3RhdGUuZW50ZXIoJ3RhYmxlQ2VsbCcpXG4gICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCdwaHJhc2luZycpXG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5jb250YWluZXJQaHJhc2luZyhub2RlLCB7XG4gICAgICAuLi5pbmZvLFxuICAgICAgYmVmb3JlOiBhcm91bmQsXG4gICAgICBhZnRlcjogYXJvdW5kXG4gICAgfSlcbiAgICBzdWJleGl0KClcbiAgICBleGl0KClcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PHN0cmluZz4+fSBtYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB8IG51bGwgfCB1bmRlZmluZWR9IFthbGlnbl1cbiAgICovXG4gIGZ1bmN0aW9uIHNlcmlhbGl6ZURhdGEobWF0cml4LCBhbGlnbikge1xuICAgIHJldHVybiBtYXJrZG93blRhYmxlKG1hdHJpeCwge1xuICAgICAgYWxpZ24sXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgbWFya2Rvd24tdGFibGVgIHR5cGVzIHNob3VsZCBzdXBwb3J0IGBudWxsYC5cbiAgICAgIGFsaWduRGVsaW1pdGVycyxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBtYXJrZG93bi10YWJsZWAgdHlwZXMgc2hvdWxkIHN1cHBvcnQgYG51bGxgLlxuICAgICAgcGFkZGluZyxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBtYXJrZG93bi10YWJsZWAgdHlwZXMgc2hvdWxkIHN1cHBvcnQgYG51bGxgLlxuICAgICAgc3RyaW5nTGVuZ3RoXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1RhYmxlfSBub2RlXG4gICAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gICAqIEBwYXJhbSB7SW5mb30gaW5mb1xuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlVGFibGVBc0RhdGEobm9kZSwgc3RhdGUsIGluZm8pIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW5cbiAgICBsZXQgaW5kZXggPSAtMVxuICAgIC8qKiBAdHlwZSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59ICovXG4gICAgY29uc3QgcmVzdWx0ID0gW11cbiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUuZW50ZXIoJ3RhYmxlJylcblxuICAgIHdoaWxlICgrK2luZGV4IDwgY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gaGFuZGxlVGFibGVSb3dBc0RhdGEoY2hpbGRyZW5baW5kZXhdLCBzdGF0ZSwgaW5mbylcbiAgICB9XG5cbiAgICBzdWJleGl0KClcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1RhYmxlUm93fSBub2RlXG4gICAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gICAqIEBwYXJhbSB7SW5mb30gaW5mb1xuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlVGFibGVSb3dBc0RhdGEobm9kZSwgc3RhdGUsIGluZm8pIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW5cbiAgICBsZXQgaW5kZXggPSAtMVxuICAgIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgICBjb25zdCByZXN1bHQgPSBbXVxuICAgIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZS5lbnRlcigndGFibGVSb3cnKVxuXG4gICAgd2hpbGUgKCsraW5kZXggPCBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIC8vIE5vdGU6IHRoZSBwb3NpdGlvbmFsIGluZm8gYXMgdXNlZCBoZXJlIGlzIGluY29ycmVjdC5cbiAgICAgIC8vIE1ha2luZyBpdCBjb3JyZWN0IHdvdWxkIGJlIGltcG9zc2libGUgZHVlIHRvIGFsaWduaW5nIGNlbGxzP1xuICAgICAgLy8gQW5kIGl0IHdvdWxkIG5lZWQgY29weS9wYXN0aW5nIGBtYXJrZG93bi10YWJsZWAgaW50byB0aGlzIHByb2plY3QuXG4gICAgICByZXN1bHRbaW5kZXhdID0gaGFuZGxlVGFibGVDZWxsKGNoaWxkcmVuW2luZGV4XSwgbm9kZSwgc3RhdGUsIGluZm8pXG4gICAgfVxuXG4gICAgc3ViZXhpdCgpXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge1RvTWFya2Rvd25IYW5kbGV9XG4gICAqIEBwYXJhbSB7SW5saW5lQ29kZX0gbm9kZVxuICAgKi9cbiAgZnVuY3Rpb24gaW5saW5lQ29kZVdpdGhUYWJsZShub2RlLCBwYXJlbnQsIHN0YXRlKSB7XG4gICAgbGV0IHZhbHVlID0gZGVmYXVsdEhhbmRsZXJzLmlubGluZUNvZGUobm9kZSwgcGFyZW50LCBzdGF0ZSlcblxuICAgIGlmIChzdGF0ZS5zdGFjay5pbmNsdWRlcygndGFibGVDZWxsJykpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFx8L2csICdcXFxcJCYnKVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCAiLy8gTm90ZTogdHlwZXMgZXhwb3NlZCBmcm9tIGBpbmRleC5kLnRzYC5cbmV4cG9ydCB7Z2ZtVGFibGVGcm9tTWFya2Rvd24sIGdmbVRhYmxlVG9NYXJrZG93bn0gZnJvbSAnLi9saWIvaW5kZXguanMnXG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLkxpc3RJdGVtfSBMaXN0SXRlbVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5QYXJhZ3JhcGh9IFBhcmFncmFwaFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duJykuQ29tcGlsZUNvbnRleHR9IENvbXBpbGVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdC11dGlsLWZyb20tbWFya2Rvd24nKS5FeHRlbnNpb259IEZyb21NYXJrZG93bkV4dGVuc2lvblxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duJykuSGFuZGxlfSBGcm9tTWFya2Rvd25IYW5kbGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtdG8tbWFya2Rvd24nKS5PcHRpb25zfSBUb01hcmtkb3duRXh0ZW5zaW9uXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdC11dGlsLXRvLW1hcmtkb3duJykuSGFuZGxlfSBUb01hcmtkb3duSGFuZGxlXG4gKi9cblxuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ2RldmxvcCdcbmltcG9ydCB7ZGVmYXVsdEhhbmRsZXJzfSBmcm9tICdtZGFzdC11dGlsLXRvLW1hcmtkb3duJ1xuXG4vKipcbiAqIENyZWF0ZSBhbiBleHRlbnNpb24gZm9yIGBtZGFzdC11dGlsLWZyb20tbWFya2Rvd25gIHRvIGVuYWJsZSBHRk0gdGFza1xuICogbGlzdCBpdGVtcyBpbiBtYXJrZG93bi5cbiAqXG4gKiBAcmV0dXJucyB7RnJvbU1hcmtkb3duRXh0ZW5zaW9ufVxuICogICBFeHRlbnNpb24gZm9yIGBtZGFzdC11dGlsLWZyb20tbWFya2Rvd25gIHRvIGVuYWJsZSBHRk0gdGFzayBsaXN0IGl0ZW1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2ZtVGFza0xpc3RJdGVtRnJvbU1hcmtkb3duKCkge1xuICByZXR1cm4ge1xuICAgIGV4aXQ6IHtcbiAgICAgIHRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQ6IGV4aXRDaGVjayxcbiAgICAgIHRhc2tMaXN0Q2hlY2tWYWx1ZVVuY2hlY2tlZDogZXhpdENoZWNrLFxuICAgICAgcGFyYWdyYXBoOiBleGl0UGFyYWdyYXBoV2l0aFRhc2tMaXN0SXRlbVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBleHRlbnNpb24gZm9yIGBtZGFzdC11dGlsLXRvLW1hcmtkb3duYCB0byBlbmFibGUgR0ZNIHRhc2sgbGlzdFxuICogaXRlbXMgaW4gbWFya2Rvd24uXG4gKlxuICogQHJldHVybnMge1RvTWFya2Rvd25FeHRlbnNpb259XG4gKiAgIEV4dGVuc2lvbiBmb3IgYG1kYXN0LXV0aWwtdG8tbWFya2Rvd25gIHRvIGVuYWJsZSBHRk0gdGFzayBsaXN0IGl0ZW1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2ZtVGFza0xpc3RJdGVtVG9NYXJrZG93bigpIHtcbiAgcmV0dXJuIHtcbiAgICB1bnNhZmU6IFt7YXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAnLScsIGFmdGVyOiAnWzp8LV0nfV0sXG4gICAgaGFuZGxlcnM6IHtsaXN0SXRlbTogbGlzdEl0ZW1XaXRoVGFza0xpc3RJdGVtfVxuICB9XG59XG5cbi8qKlxuICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICogQHR5cGUge0Zyb21NYXJrZG93bkhhbmRsZX1cbiAqL1xuZnVuY3Rpb24gZXhpdENoZWNrKHRva2VuKSB7XG4gIC8vIFdlXHUyMDE5cmUgYWx3YXlzIGluIGEgcGFyYWdyYXBoLCBpbiBhIGxpc3QgaXRlbS5cbiAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAyXVxuICBhc3NlcnQobm9kZS50eXBlID09PSAnbGlzdEl0ZW0nKVxuICBub2RlLmNoZWNrZWQgPSB0b2tlbi50eXBlID09PSAndGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCdcbn1cblxuLyoqXG4gKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gKiBAdHlwZSB7RnJvbU1hcmtkb3duSGFuZGxlfVxuICovXG5mdW5jdGlvbiBleGl0UGFyYWdyYXBoV2l0aFRhc2tMaXN0SXRlbSh0b2tlbikge1xuICBjb25zdCBwYXJlbnQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl1cblxuICBpZiAoXG4gICAgcGFyZW50ICYmXG4gICAgcGFyZW50LnR5cGUgPT09ICdsaXN0SXRlbScgJiZcbiAgICB0eXBlb2YgcGFyZW50LmNoZWNrZWQgPT09ICdib29sZWFuJ1xuICApIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgYXNzZXJ0KG5vZGUudHlwZSA9PT0gJ3BhcmFncmFwaCcpXG4gICAgY29uc3QgaGVhZCA9IG5vZGUuY2hpbGRyZW5bMF1cblxuICAgIGlmIChoZWFkICYmIGhlYWQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICBjb25zdCBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZHJlblxuICAgICAgbGV0IGluZGV4ID0gLTFcbiAgICAgIC8qKiBAdHlwZSB7UGFyYWdyYXBoIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IGZpcnN0UGFyYWdocmFwaFxuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IHNpYmxpbmdzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaW5kZXhdXG4gICAgICAgIGlmIChzaWJsaW5nLnR5cGUgPT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgICAgZmlyc3RQYXJhZ2hyYXBoID0gc2libGluZ1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0UGFyYWdocmFwaCA9PT0gbm9kZSkge1xuICAgICAgICAvLyBNdXN0IHN0YXJ0IHdpdGggYSBzcGFjZSBvciBhIHRhYi5cbiAgICAgICAgaGVhZC52YWx1ZSA9IGhlYWQudmFsdWUuc2xpY2UoMSlcblxuICAgICAgICBpZiAoaGVhZC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuLnNoaWZ0KClcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBub2RlLnBvc2l0aW9uICYmXG4gICAgICAgICAgaGVhZC5wb3NpdGlvbiAmJlxuICAgICAgICAgIHR5cGVvZiBoZWFkLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCA9PT0gJ251bWJlcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgaGVhZC5wb3NpdGlvbi5zdGFydC5jb2x1bW4rK1xuICAgICAgICAgIGhlYWQucG9zaXRpb24uc3RhcnQub2Zmc2V0KytcbiAgICAgICAgICBub2RlLnBvc2l0aW9uLnN0YXJ0ID0gT2JqZWN0LmFzc2lnbih7fSwgaGVhZC5wb3NpdGlvbi5zdGFydClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuZXhpdCh0b2tlbilcbn1cblxuLyoqXG4gKiBAdHlwZSB7VG9NYXJrZG93bkhhbmRsZX1cbiAqIEBwYXJhbSB7TGlzdEl0ZW19IG5vZGVcbiAqL1xuZnVuY3Rpb24gbGlzdEl0ZW1XaXRoVGFza0xpc3RJdGVtKG5vZGUsIHBhcmVudCwgc3RhdGUsIGluZm8pIHtcbiAgY29uc3QgaGVhZCA9IG5vZGUuY2hpbGRyZW5bMF1cbiAgY29uc3QgY2hlY2thYmxlID1cbiAgICB0eXBlb2Ygbm9kZS5jaGVja2VkID09PSAnYm9vbGVhbicgJiYgaGVhZCAmJiBoZWFkLnR5cGUgPT09ICdwYXJhZ3JhcGgnXG4gIGNvbnN0IGNoZWNrYm94ID0gJ1snICsgKG5vZGUuY2hlY2tlZCA/ICd4JyA6ICcgJykgKyAnXSAnXG4gIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pXG5cbiAgaWYgKGNoZWNrYWJsZSkge1xuICAgIHRyYWNrZXIubW92ZShjaGVja2JveClcbiAgfVxuXG4gIGxldCB2YWx1ZSA9IGRlZmF1bHRIYW5kbGVycy5saXN0SXRlbShub2RlLCBwYXJlbnQsIHN0YXRlLCB7XG4gICAgLi4uaW5mbyxcbiAgICAuLi50cmFja2VyLmN1cnJlbnQoKVxuICB9KVxuXG4gIGlmIChjaGVja2FibGUpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL14oPzpbKistXXxcXGQrXFwuKShbXFxyXFxuXXwgezEsM30pLywgY2hlY2spXG4gIH1cblxuICByZXR1cm4gdmFsdWVcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9ICQwXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBjaGVjaygkMCkge1xuICAgIHJldHVybiAkMCArIGNoZWNrYm94XG4gIH1cbn1cbiIsICJleHBvcnQge1xuICBnZm1UYXNrTGlzdEl0ZW1Gcm9tTWFya2Rvd24sXG4gIGdmbVRhc2tMaXN0SXRlbVRvTWFya2Rvd25cbn0gZnJvbSAnLi9saWIvaW5kZXguanMnXG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFeHRlbnNpb24gYXMgRnJvbU1hcmtkb3duRXh0ZW5zaW9ufSBmcm9tICdtZGFzdC11dGlsLWZyb20tbWFya2Rvd24nXG4gKiBAaW1wb3J0IHtPcHRpb25zfSBmcm9tICdtZGFzdC11dGlsLWdmbSdcbiAqIEBpbXBvcnQge09wdGlvbnMgYXMgVG9NYXJrZG93bkV4dGVuc2lvbn0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcbiAqL1xuXG5pbXBvcnQge1xuICBnZm1BdXRvbGlua0xpdGVyYWxGcm9tTWFya2Rvd24sXG4gIGdmbUF1dG9saW5rTGl0ZXJhbFRvTWFya2Rvd25cbn0gZnJvbSAnbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbCdcbmltcG9ydCB7XG4gIGdmbUZvb3Rub3RlRnJvbU1hcmtkb3duLFxuICBnZm1Gb290bm90ZVRvTWFya2Rvd25cbn0gZnJvbSAnbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGUnXG5pbXBvcnQge1xuICBnZm1TdHJpa2V0aHJvdWdoRnJvbU1hcmtkb3duLFxuICBnZm1TdHJpa2V0aHJvdWdoVG9NYXJrZG93blxufSBmcm9tICdtZGFzdC11dGlsLWdmbS1zdHJpa2V0aHJvdWdoJ1xuaW1wb3J0IHtnZm1UYWJsZUZyb21NYXJrZG93biwgZ2ZtVGFibGVUb01hcmtkb3dufSBmcm9tICdtZGFzdC11dGlsLWdmbS10YWJsZSdcbmltcG9ydCB7XG4gIGdmbVRhc2tMaXN0SXRlbUZyb21NYXJrZG93bixcbiAgZ2ZtVGFza0xpc3RJdGVtVG9NYXJrZG93blxufSBmcm9tICdtZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbSdcblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duYCB0byBlbmFibGUgR0ZNIChhdXRvbGlua1xuICogbGl0ZXJhbHMsIGZvb3Rub3Rlcywgc3RyaWtldGhyb3VnaCwgdGFibGVzLCB0YXNrbGlzdHMpLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxGcm9tTWFya2Rvd25FeHRlbnNpb24+fVxuICogICBFeHRlbnNpb24gZm9yIGBtZGFzdC11dGlsLWZyb20tbWFya2Rvd25gIHRvIGVuYWJsZSBHRk0gKGF1dG9saW5rIGxpdGVyYWxzLFxuICogICBmb290bm90ZXMsIHN0cmlrZXRocm91Z2gsIHRhYmxlcywgdGFza2xpc3RzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdmbUZyb21NYXJrZG93bigpIHtcbiAgcmV0dXJuIFtcbiAgICBnZm1BdXRvbGlua0xpdGVyYWxGcm9tTWFya2Rvd24oKSxcbiAgICBnZm1Gb290bm90ZUZyb21NYXJrZG93bigpLFxuICAgIGdmbVN0cmlrZXRocm91Z2hGcm9tTWFya2Rvd24oKSxcbiAgICBnZm1UYWJsZUZyb21NYXJrZG93bigpLFxuICAgIGdmbVRhc2tMaXN0SXRlbUZyb21NYXJrZG93bigpXG4gIF1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC10by1tYXJrZG93bmAgdG8gZW5hYmxlIEdGTSAoYXV0b2xpbmtcbiAqIGxpdGVyYWxzLCBmb290bm90ZXMsIHN0cmlrZXRocm91Z2gsIHRhYmxlcywgdGFza2xpc3RzKS5cbiAqXG4gKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICogQHJldHVybnMge1RvTWFya2Rvd25FeHRlbnNpb259XG4gKiAgIEV4dGVuc2lvbiBmb3IgYG1kYXN0LXV0aWwtdG8tbWFya2Rvd25gIHRvIGVuYWJsZSBHRk0gKGF1dG9saW5rIGxpdGVyYWxzLFxuICogICBmb290bm90ZXMsIHN0cmlrZXRocm91Z2gsIHRhYmxlcywgdGFza2xpc3RzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdmbVRvTWFya2Rvd24ob3B0aW9ucykge1xuICByZXR1cm4ge1xuICAgIGV4dGVuc2lvbnM6IFtcbiAgICAgIGdmbUF1dG9saW5rTGl0ZXJhbFRvTWFya2Rvd24oKSxcbiAgICAgIGdmbUZvb3Rub3RlVG9NYXJrZG93bihvcHRpb25zKSxcbiAgICAgIGdmbVN0cmlrZXRocm91Z2hUb01hcmtkb3duKCksXG4gICAgICBnZm1UYWJsZVRvTWFya2Rvd24ob3B0aW9ucyksXG4gICAgICBnZm1UYXNrTGlzdEl0ZW1Ub01hcmtkb3duKClcbiAgICBdXG4gIH1cbn1cbiIsICIvLyBOb3RlOiB0eXBlcyBleHBvc2VkIGZyb20gYGluZGV4LmQudHNgLlxuZXhwb3J0IHtnZm1Gcm9tTWFya2Rvd24sIGdmbVRvTWFya2Rvd259IGZyb20gJy4vbGliL2luZGV4LmpzJ1xuIiwgIi8qKlxuICogTGlrZSBgQXJyYXkjc3BsaWNlYCwgYnV0IHNtYXJ0ZXIgZm9yIGdpYW50IGFycmF5cy5cbiAqXG4gKiBgQXJyYXkjc3BsaWNlYCB0YWtlcyBhbGwgaXRlbXMgdG8gYmUgaW5zZXJ0ZWQgYXMgaW5kaXZpZHVhbCBhcmd1bWVudCB3aGljaFxuICogY2F1c2VzIGEgc3RhY2sgb3ZlcmZsb3cgaW4gVjggd2hlbiB0cnlpbmcgdG8gaW5zZXJ0IDEwMGsgaXRlbXMgZm9yIGluc3RhbmNlLlxuICpcbiAqIE90aGVyd2lzZSwgdGhpcyBkb2VzIG5vdCByZXR1cm4gdGhlIHJlbW92ZWQgaXRlbXMsIGFuZCB0YWtlcyBgaXRlbXNgIGFzIGFuXG4gKiBhcnJheSBpbnN0ZWFkIG9mIHJlc3QgcGFyYW1ldGVycy5cbiAqXG4gKiBAdGVtcGxhdGUge3Vua25vd259IFRcbiAqICAgSXRlbSB0eXBlLlxuICogQHBhcmFtIHtBcnJheTxUPn0gbGlzdFxuICogICBMaXN0IHRvIG9wZXJhdGUgb24uXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAqICAgSW5kZXggdG8gcmVtb3ZlL2luc2VydCBhdCAoY2FuIGJlIG5lZ2F0aXZlKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVcbiAqICAgTnVtYmVyIG9mIGl0ZW1zIHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7QXJyYXk8VD59IGl0ZW1zXG4gKiAgIEl0ZW1zIHRvIGluamVjdCBpbnRvIGBsaXN0YC5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpY2UobGlzdCwgc3RhcnQsIHJlbW92ZSwgaXRlbXMpIHtcbiAgY29uc3QgZW5kID0gbGlzdC5sZW5ndGg7XG4gIGxldCBjaHVua1N0YXJ0ID0gMDtcbiAgLyoqIEB0eXBlIHtBcnJheTx1bmtub3duPn0gKi9cbiAgbGV0IHBhcmFtZXRlcnM7XG5cbiAgLy8gTWFrZSBzdGFydCBiZXR3ZWVuIHplcm8gYW5kIGBlbmRgIChpbmNsdWRlZCkuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGVuZCA/IDAgOiBlbmQgKyBzdGFydDtcbiAgfSBlbHNlIHtcbiAgICBzdGFydCA9IHN0YXJ0ID4gZW5kID8gZW5kIDogc3RhcnQ7XG4gIH1cbiAgcmVtb3ZlID0gcmVtb3ZlID4gMCA/IHJlbW92ZSA6IDA7XG5cbiAgLy8gTm8gbmVlZCB0byBjaHVuayB0aGUgaXRlbXMgaWYgdGhlcmVcdTIwMTlzIG9ubHkgYSBjb3VwbGUgKDEwaykgaXRlbXMuXG4gIGlmIChpdGVtcy5sZW5ndGggPCAxMDAwMCkge1xuICAgIHBhcmFtZXRlcnMgPSBBcnJheS5mcm9tKGl0ZW1zKTtcbiAgICBwYXJhbWV0ZXJzLnVuc2hpZnQoc3RhcnQsIHJlbW92ZSk7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBIdXNoLCBpdFx1MjAxOXMgZmluZS5cbiAgICBsaXN0LnNwbGljZSguLi5wYXJhbWV0ZXJzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBEZWxldGUgYHJlbW92ZWAgaXRlbXMgc3RhcnRpbmcgZnJvbSBgc3RhcnRgXG4gICAgaWYgKHJlbW92ZSkgbGlzdC5zcGxpY2Uoc3RhcnQsIHJlbW92ZSk7XG5cbiAgICAvLyBJbnNlcnQgdGhlIGl0ZW1zIGluIGNodW5rcyB0byBub3QgY2F1c2Ugc3RhY2sgb3ZlcmZsb3dzLlxuICAgIHdoaWxlIChjaHVua1N0YXJ0IDwgaXRlbXMubGVuZ3RoKSB7XG4gICAgICBwYXJhbWV0ZXJzID0gaXRlbXMuc2xpY2UoY2h1bmtTdGFydCwgY2h1bmtTdGFydCArIDEwMDAwKTtcbiAgICAgIHBhcmFtZXRlcnMudW5zaGlmdChzdGFydCwgMCk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEh1c2gsIGl0XHUyMDE5cyBmaW5lLlxuICAgICAgbGlzdC5zcGxpY2UoLi4ucGFyYW1ldGVycyk7XG4gICAgICBjaHVua1N0YXJ0ICs9IDEwMDAwO1xuICAgICAgc3RhcnQgKz0gMTAwMDA7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXBwZW5kIGBpdGVtc2AgKGFuIGFycmF5KSBhdCB0aGUgZW5kIG9mIGBsaXN0YCAoYW5vdGhlciBhcnJheSkuXG4gKiBXaGVuIGBsaXN0YCB3YXMgZW1wdHksIHJldHVybnMgYGl0ZW1zYCBpbnN0ZWFkLlxuICpcbiAqIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWxseSBleHBlbnNpdmUgb3BlcmF0aW9uIHdoZW4gYGxpc3RgIGlzIGVtcHR5LFxuICogYW5kIGFkZHMgaXRlbXMgaW4gYmF0Y2hlcyB0byBwcmV2ZW50IFY4IGZyb20gaGFuZ2luZy5cbiAqXG4gKiBAdGVtcGxhdGUge3Vua25vd259IFRcbiAqICAgSXRlbSB0eXBlLlxuICogQHBhcmFtIHtBcnJheTxUPn0gbGlzdFxuICogICBMaXN0IHRvIG9wZXJhdGUgb24uXG4gKiBAcGFyYW0ge0FycmF5PFQ+fSBpdGVtc1xuICogICBJdGVtcyB0byBhZGQgdG8gYGxpc3RgLlxuICogQHJldHVybnMge0FycmF5PFQ+fVxuICogICBFaXRoZXIgYGxpc3RgIG9yIGBpdGVtc2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXNoKGxpc3QsIGl0ZW1zKSB7XG4gIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICBzcGxpY2UobGlzdCwgbGlzdC5sZW5ndGgsIDAsIGl0ZW1zKTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuICByZXR1cm4gaXRlbXM7XG59IiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIEV4dGVuc2lvbixcbiAqICAgSGFuZGxlcyxcbiAqICAgSHRtbEV4dGVuc2lvbixcbiAqICAgTm9ybWFsaXplZEV4dGVuc2lvblxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQge3NwbGljZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2h1bmtlZCdcblxuY29uc3QgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eVxuXG4vKipcbiAqIENvbWJpbmUgbXVsdGlwbGUgc3ludGF4IGV4dGVuc2lvbnMgaW50byBvbmUuXG4gKlxuICogQHBhcmFtIHtSZWFkb25seUFycmF5PEV4dGVuc2lvbj59IGV4dGVuc2lvbnNcbiAqICAgTGlzdCBvZiBzeW50YXggZXh0ZW5zaW9ucy5cbiAqIEByZXR1cm5zIHtOb3JtYWxpemVkRXh0ZW5zaW9ufVxuICogICBBIHNpbmdsZSBjb21iaW5lZCBleHRlbnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lRXh0ZW5zaW9ucyhleHRlbnNpb25zKSB7XG4gIC8qKiBAdHlwZSB7Tm9ybWFsaXplZEV4dGVuc2lvbn0gKi9cbiAgY29uc3QgYWxsID0ge31cbiAgbGV0IGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IGV4dGVuc2lvbnMubGVuZ3RoKSB7XG4gICAgc3ludGF4RXh0ZW5zaW9uKGFsbCwgZXh0ZW5zaW9uc1tpbmRleF0pXG4gIH1cblxuICByZXR1cm4gYWxsXG59XG5cbi8qKlxuICogTWVyZ2UgYGV4dGVuc2lvbmAgaW50byBgYWxsYC5cbiAqXG4gKiBAcGFyYW0ge05vcm1hbGl6ZWRFeHRlbnNpb259IGFsbFxuICogICBFeHRlbnNpb24gdG8gbWVyZ2UgaW50by5cbiAqIEBwYXJhbSB7RXh0ZW5zaW9ufSBleHRlbnNpb25cbiAqICAgRXh0ZW5zaW9uIHRvIG1lcmdlLlxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqICAgTm90aGluZy5cbiAqL1xuZnVuY3Rpb24gc3ludGF4RXh0ZW5zaW9uKGFsbCwgZXh0ZW5zaW9uKSB7XG4gIC8qKiBAdHlwZSB7a2V5b2YgRXh0ZW5zaW9ufSAqL1xuICBsZXQgaG9va1xuXG4gIGZvciAoaG9vayBpbiBleHRlbnNpb24pIHtcbiAgICBjb25zdCBtYXliZSA9IGhhc093blByb3BlcnR5LmNhbGwoYWxsLCBob29rKSA/IGFsbFtob29rXSA6IHVuZGVmaW5lZFxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovXG4gICAgY29uc3QgbGVmdCA9IG1heWJlIHx8IChhbGxbaG9va10gPSB7fSlcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkfSAqL1xuICAgIGNvbnN0IHJpZ2h0ID0gZXh0ZW5zaW9uW2hvb2tdXG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgbGV0IGNvZGVcblxuICAgIGlmIChyaWdodCkge1xuICAgICAgZm9yIChjb2RlIGluIHJpZ2h0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChsZWZ0LCBjb2RlKSkgbGVmdFtjb2RlXSA9IFtdXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmlnaHRbY29kZV1cbiAgICAgICAgY29uc3RydWN0cyhcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIExvb2tzIGxpa2UgYSBsaXN0LlxuICAgICAgICAgIGxlZnRbY29kZV0sXG4gICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlID8gW3ZhbHVlXSA6IFtdXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSBgbGlzdGAgaW50byBgZXhpc3RpbmdgIChib3RoIGxpc3RzIG9mIGNvbnN0cnVjdHMpLlxuICogTXV0YXRlcyBgZXhpc3RpbmdgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8dW5rbm93bj59IGV4aXN0aW5nXG4gKiAgIExpc3Qgb2YgY29uc3RydWN0cyB0byBtZXJnZSBpbnRvLlxuICogQHBhcmFtIHtBcnJheTx1bmtub3duPn0gbGlzdFxuICogICBMaXN0IG9mIGNvbnN0cnVjdHMgdG8gbWVyZ2UuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogICBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBjb25zdHJ1Y3RzKGV4aXN0aW5nLCBsaXN0KSB7XG4gIGxldCBpbmRleCA9IC0xXG4gIC8qKiBAdHlwZSB7QXJyYXk8dW5rbm93bj59ICovXG4gIGNvbnN0IGJlZm9yZSA9IFtdXG5cbiAgd2hpbGUgKCsraW5kZXggPCBsaXN0Lmxlbmd0aCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTG9va3MgbGlrZSBhbiBvYmplY3QuXG4gICAgOyhsaXN0W2luZGV4XS5hZGQgPT09ICdhZnRlcicgPyBleGlzdGluZyA6IGJlZm9yZSkucHVzaChsaXN0W2luZGV4XSlcbiAgfVxuXG4gIHNwbGljZShleGlzdGluZywgMCwgMCwgYmVmb3JlKVxufVxuXG4vKipcbiAqIENvbWJpbmUgbXVsdGlwbGUgSFRNTCBleHRlbnNpb25zIGludG8gb25lLlxuICpcbiAqIEBwYXJhbSB7UmVhZG9ubHlBcnJheTxIdG1sRXh0ZW5zaW9uPn0gaHRtbEV4dGVuc2lvbnNcbiAqICAgTGlzdCBvZiBIVE1MIGV4dGVuc2lvbnMuXG4gKiBAcmV0dXJucyB7SHRtbEV4dGVuc2lvbn1cbiAqICAgU2luZ2xlIGNvbWJpbmVkIEhUTUwgZXh0ZW5zaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUh0bWxFeHRlbnNpb25zKGh0bWxFeHRlbnNpb25zKSB7XG4gIC8qKiBAdHlwZSB7SHRtbEV4dGVuc2lvbn0gKi9cbiAgY29uc3QgaGFuZGxlcnMgPSB7fVxuICBsZXQgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgaHRtbEV4dGVuc2lvbnMubGVuZ3RoKSB7XG4gICAgaHRtbEV4dGVuc2lvbihoYW5kbGVycywgaHRtbEV4dGVuc2lvbnNbaW5kZXhdKVxuICB9XG5cbiAgcmV0dXJuIGhhbmRsZXJzXG59XG5cbi8qKlxuICogTWVyZ2UgYGV4dGVuc2lvbmAgaW50byBgYWxsYC5cbiAqXG4gKiBAcGFyYW0ge0h0bWxFeHRlbnNpb259IGFsbFxuICogICBFeHRlbnNpb24gdG8gbWVyZ2UgaW50by5cbiAqIEBwYXJhbSB7SHRtbEV4dGVuc2lvbn0gZXh0ZW5zaW9uXG4gKiAgIEV4dGVuc2lvbiB0byBtZXJnZS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGh0bWxFeHRlbnNpb24oYWxsLCBleHRlbnNpb24pIHtcbiAgLyoqIEB0eXBlIHtrZXlvZiBIdG1sRXh0ZW5zaW9ufSAqL1xuICBsZXQgaG9va1xuXG4gIGZvciAoaG9vayBpbiBleHRlbnNpb24pIHtcbiAgICBjb25zdCBtYXliZSA9IGhhc093blByb3BlcnR5LmNhbGwoYWxsLCBob29rKSA/IGFsbFtob29rXSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGxlZnQgPSBtYXliZSB8fCAoYWxsW2hvb2tdID0ge30pXG4gICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb25baG9va11cbiAgICAvKiogQHR5cGUge2tleW9mIEhhbmRsZXN9ICovXG4gICAgbGV0IHR5cGVcblxuICAgIGlmIChyaWdodCkge1xuICAgICAgZm9yICh0eXBlIGluIHJpZ2h0KSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYXNzdW1lIGRvY3VtZW50IHZzIHJlZ3VsYXIgaGFuZGxlciBhcmUgbWFuYWdlZCBjb3JyZWN0bHkuXG4gICAgICAgIGxlZnRbdHlwZV0gPSByaWdodFt0eXBlXVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7Q29kZSwgQ29uc3RydWN0UmVjb3JkLCBFdmVudCwgRXh0ZW5zaW9uLCBQcmV2aW91cywgU3RhdGUsIFRva2VuaXplQ29udGV4dCwgVG9rZW5pemVyfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBhc2NpaUFscGhhLCBhc2NpaUFscGhhbnVtZXJpYywgYXNjaWlDb250cm9sLCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlLCB1bmljb2RlUHVuY3R1YXRpb24sIHVuaWNvZGVXaGl0ZXNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbmNvbnN0IHd3d1ByZWZpeCA9IHtcbiAgdG9rZW5pemU6IHRva2VuaXplV3d3UHJlZml4LFxuICBwYXJ0aWFsOiB0cnVlXG59O1xuY29uc3QgZG9tYWluID0ge1xuICB0b2tlbml6ZTogdG9rZW5pemVEb21haW4sXG4gIHBhcnRpYWw6IHRydWVcbn07XG5jb25zdCBwYXRoID0ge1xuICB0b2tlbml6ZTogdG9rZW5pemVQYXRoLFxuICBwYXJ0aWFsOiB0cnVlXG59O1xuY29uc3QgdHJhaWwgPSB7XG4gIHRva2VuaXplOiB0b2tlbml6ZVRyYWlsLFxuICBwYXJ0aWFsOiB0cnVlXG59O1xuY29uc3QgZW1haWxEb21haW5Eb3RUcmFpbCA9IHtcbiAgdG9rZW5pemU6IHRva2VuaXplRW1haWxEb21haW5Eb3RUcmFpbCxcbiAgcGFydGlhbDogdHJ1ZVxufTtcbmNvbnN0IHd3d0F1dG9saW5rID0ge1xuICBuYW1lOiAnd3d3QXV0b2xpbmsnLFxuICB0b2tlbml6ZTogdG9rZW5pemVXd3dBdXRvbGluayxcbiAgcHJldmlvdXM6IHByZXZpb3VzV3d3XG59O1xuY29uc3QgcHJvdG9jb2xBdXRvbGluayA9IHtcbiAgbmFtZTogJ3Byb3RvY29sQXV0b2xpbmsnLFxuICB0b2tlbml6ZTogdG9rZW5pemVQcm90b2NvbEF1dG9saW5rLFxuICBwcmV2aW91czogcHJldmlvdXNQcm90b2NvbFxufTtcbmNvbnN0IGVtYWlsQXV0b2xpbmsgPSB7XG4gIG5hbWU6ICdlbWFpbEF1dG9saW5rJyxcbiAgdG9rZW5pemU6IHRva2VuaXplRW1haWxBdXRvbGluayxcbiAgcHJldmlvdXM6IHByZXZpb3VzRW1haWxcbn07XG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0UmVjb3JkfSAqL1xuY29uc3QgdGV4dCA9IHt9O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBleHRlbnNpb24gZm9yIGBtaWNyb21hcmtgIHRvIHN1cHBvcnQgR2l0SHViIGF1dG9saW5rIGxpdGVyYWxcbiAqIHN5bnRheC5cbiAqXG4gKiBAcmV0dXJucyB7RXh0ZW5zaW9ufVxuICogICBFeHRlbnNpb24gZm9yIGBtaWNyb21hcmtgIHRoYXQgY2FuIGJlIHBhc3NlZCBpbiBgZXh0ZW5zaW9uc2AgdG8gZW5hYmxlIEdGTVxuICogICBhdXRvbGluayBsaXRlcmFsIHN5bnRheC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdmbUF1dG9saW5rTGl0ZXJhbCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0XG4gIH07XG59XG5cbi8qKiBAdHlwZSB7Q29kZX0gKi9cbmxldCBjb2RlID0gNDg7XG5cbi8vIEFkZCBhbHBoYW51bWVyaWNzLlxud2hpbGUgKGNvZGUgPCAxMjMpIHtcbiAgdGV4dFtjb2RlXSA9IGVtYWlsQXV0b2xpbms7XG4gIGNvZGUrKztcbiAgaWYgKGNvZGUgPT09IDU4KSBjb2RlID0gNjU7ZWxzZSBpZiAoY29kZSA9PT0gOTEpIGNvZGUgPSA5Nztcbn1cbnRleHRbNDNdID0gZW1haWxBdXRvbGluaztcbnRleHRbNDVdID0gZW1haWxBdXRvbGluaztcbnRleHRbNDZdID0gZW1haWxBdXRvbGluaztcbnRleHRbOTVdID0gZW1haWxBdXRvbGluaztcbnRleHRbNzJdID0gW2VtYWlsQXV0b2xpbmssIHByb3RvY29sQXV0b2xpbmtdO1xudGV4dFsxMDRdID0gW2VtYWlsQXV0b2xpbmssIHByb3RvY29sQXV0b2xpbmtdO1xudGV4dFs4N10gPSBbZW1haWxBdXRvbGluaywgd3d3QXV0b2xpbmtdO1xudGV4dFsxMTldID0gW2VtYWlsQXV0b2xpbmssIHd3d0F1dG9saW5rXTtcblxuLy8gVG8gZG86IHBlcmZvcm0gZW1haWwgYXV0b2xpbmsgbGl0ZXJhbHMgb24gZXZlbnRzLCBhZnRlcndhcmRzLlxuLy8gVGhhdFx1MjAxOXMgd2hlcmUgYG1hcmtkb3duLXJzYCBhbmQgYGNtYXJrLWdmbWAgcGVyZm9ybSBpdC5cbi8vIEl0IHNob3VsZCBsb29rIGZvciBgQGAsIHRoZW4gZm9yIGF0ZXh0IGJhY2t3YXJkcywgYW5kIHRoZW4gZm9yIGEgbGFiZWxcbi8vIGZvcndhcmRzLlxuLy8gVG8gZG86IGBtYWlsdG86YCwgYHhtcHA6YCBwcm90b2NvbCBhcyBwcmVmaXguXG5cbi8qKlxuICogRW1haWwgYXV0b2xpbmsgbGl0ZXJhbC5cbiAqXG4gKiBgYGBtYXJrZG93blxuICogPiB8IGEgY29udGFjdEBleGFtcGxlLm9yZyBiXG4gKiAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXG4gKiBgYGBcbiAqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVFbWFpbEF1dG9saW5rKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGRvdDtcbiAgLyoqIEB0eXBlIHtib29sZWFufSAqL1xuICBsZXQgZGF0YTtcbiAgcmV0dXJuIHN0YXJ0O1xuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBlbWFpbCBhdXRvbGluayBsaXRlcmFsLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSBjb250YWN0QGV4YW1wbGUub3JnIGJcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGlmICghZ2ZtQXRleHQoY29kZSkgfHwgIXByZXZpb3VzRW1haWwuY2FsbChzZWxmLCBzZWxmLnByZXZpb3VzKSB8fCBwcmV2aW91c1VuYmFsYW5jZWQoc2VsZi5ldmVudHMpKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdsaXRlcmFsQXV0b2xpbmsnKTtcbiAgICBlZmZlY3RzLmVudGVyKCdsaXRlcmFsQXV0b2xpbmtFbWFpbCcpO1xuICAgIHJldHVybiBhdGV4dChjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBlbWFpbCBhdGV4dC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgY29udGFjdEBleGFtcGxlLm9yZyBiXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGF0ZXh0KGNvZGUpIHtcbiAgICBpZiAoZ2ZtQXRleHQoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBhdGV4dDtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDY0KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gZW1haWxEb21haW47XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gZW1haWwgZG9tYWluLlxuICAgKlxuICAgKiBUaGUgcmVmZXJlbmNlIGNvZGUgaXMgYSBiaXQgb3Zlcmx5IGNvbXBsZXggYXMgaXQgaGFuZGxlcyB0aGUgYEBgLCBvZiB3aGljaFxuICAgKiB0aGVyZSBtYXkgYmUganVzdCBvbmUuXG4gICAqIFNvdXJjZTogPGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvY21hcmstZ2ZtL2Jsb2IvZWYxY2ZjYi9leHRlbnNpb25zL2F1dG9saW5rLmMjTDMxOD5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgY29udGFjdEBleGFtcGxlLm9yZyBiXG4gICAqICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZW1haWxEb21haW4oY29kZSkge1xuICAgIC8vIERvdCBmb2xsb3dlZCBieSBhbHBoYW51bWVyaWNhbCAobm90IGAtYCBvciBgX2ApLlxuICAgIGlmIChjb2RlID09PSA0Nikge1xuICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2soZW1haWxEb21haW5Eb3RUcmFpbCwgZW1haWxEb21haW5BZnRlciwgZW1haWxEb21haW5Eb3QpKGNvZGUpO1xuICAgIH1cblxuICAgIC8vIEFscGhhbnVtZXJpY2FsLCBgLWAsIGFuZCBgX2AuXG4gICAgaWYgKGNvZGUgPT09IDQ1IHx8IGNvZGUgPT09IDk1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGUpKSB7XG4gICAgICBkYXRhID0gdHJ1ZTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBlbWFpbERvbWFpbjtcbiAgICB9XG5cbiAgICAvLyBUbyBkbzogYC9gIGlmIHhtcHAuXG5cbiAgICAvLyBOb3RlOiBub3JtYWxseSB3ZVx1MjAxOWQgdHJ1bmNhdGUgdHJhaWxpbmcgcHVuY3R1YXRpb24gZnJvbSB0aGUgbGluay5cbiAgICAvLyBIb3dldmVyLCBlbWFpbCBhdXRvbGluayBsaXRlcmFscyBjYW5ub3QgY29udGFpbiBhbnkgb2YgdGhvc2UgbWFya2VycyxcbiAgICAvLyBleGNlcHQgZm9yIGAuYCwgYnV0IHRoYXQgY2FuIG9ubHkgb2NjdXIgaWYgaXQgaXNuXHUyMDE5dCB0cmFpbGluZy5cbiAgICAvLyBTbyB3ZSBjYW4gaWdub3JlIHRydW5jYXRpbmchXG4gICAgcmV0dXJuIGVtYWlsRG9tYWluQWZ0ZXIoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gZW1haWwgZG9tYWluLCBvbiBkb3QgdGhhdCBpcyBub3QgYSB0cmFpbC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgY29udGFjdEBleGFtcGxlLm9yZyBiXG4gICAqICAgICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVtYWlsRG9tYWluRG90KGNvZGUpIHtcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgZG90ID0gdHJ1ZTtcbiAgICByZXR1cm4gZW1haWxEb21haW47XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgZW1haWwgZG9tYWluLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSBjb250YWN0QGV4YW1wbGUub3JnIGJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVtYWlsRG9tYWluQWZ0ZXIoY29kZSkge1xuICAgIC8vIERvbWFpbiBtdXN0IG5vdCBiZSBlbXB0eSwgbXVzdCBpbmNsdWRlIGEgZG90LCBhbmQgbXVzdCBlbmQgaW4gYWxwaGFiZXRpY2FsLlxuICAgIC8vIFNvdXJjZTogPGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvY21hcmstZ2ZtL2Jsb2IvZWYxY2ZjYi9leHRlbnNpb25zL2F1dG9saW5rLmMjTDMzMj4uXG4gICAgaWYgKGRhdGEgJiYgZG90ICYmIGFzY2lpQWxwaGEoc2VsZi5wcmV2aW91cykpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgnbGl0ZXJhbEF1dG9saW5rRW1haWwnKTtcbiAgICAgIGVmZmVjdHMuZXhpdCgnbGl0ZXJhbEF1dG9saW5rJyk7XG4gICAgICByZXR1cm4gb2soY29kZSk7XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBgd3d3YCBhdXRvbGluayBsaXRlcmFsLlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiA+IHwgYSB3d3cuZXhhbXBsZS5vcmcgYlxuICogICAgICAgXl5eXl5eXl5eXl5eXl5eXG4gKiBgYGBcbiAqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVXd3dBdXRvbGluayhlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICByZXR1cm4gd3d3U3RhcnQ7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIHd3dyBhdXRvbGluayBsaXRlcmFsLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgd3d3LmV4YW1wbGUuY29tL2E/YiNjXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB3d3dTdGFydChjb2RlKSB7XG4gICAgaWYgKGNvZGUgIT09IDg3ICYmIGNvZGUgIT09IDExOSB8fCAhcHJldmlvdXNXd3cuY2FsbChzZWxmLCBzZWxmLnByZXZpb3VzKSB8fCBwcmV2aW91c1VuYmFsYW5jZWQoc2VsZi5ldmVudHMpKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdsaXRlcmFsQXV0b2xpbmsnKTtcbiAgICBlZmZlY3RzLmVudGVyKCdsaXRlcmFsQXV0b2xpbmtXd3cnKTtcbiAgICAvLyBOb3RlOiB3ZSAqY2hlY2sqLCBzbyB3ZSBjYW4gZGlzY2FyZCB0aGUgYHd3dy5gIHdlIHBhcnNlZC5cbiAgICAvLyBJZiBpdCB3b3JrZWQsIHdlIGNvbnNpZGVyIGl0IGFzIGEgcGFydCBvZiB0aGUgZG9tYWluLlxuICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKHd3d1ByZWZpeCwgZWZmZWN0cy5hdHRlbXB0KGRvbWFpbiwgZWZmZWN0cy5hdHRlbXB0KHBhdGgsIHd3d0FmdGVyKSwgbm9rKSwgbm9rKShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBhIHd3dyBhdXRvbGluayBsaXRlcmFsLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgd3d3LmV4YW1wbGUuY29tL2E/YiNjXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB3d3dBZnRlcihjb2RlKSB7XG4gICAgZWZmZWN0cy5leGl0KCdsaXRlcmFsQXV0b2xpbmtXd3cnKTtcbiAgICBlZmZlY3RzLmV4aXQoJ2xpdGVyYWxBdXRvbGluaycpO1xuICAgIHJldHVybiBvayhjb2RlKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3RvY29sIGF1dG9saW5rIGxpdGVyYWwuXG4gKlxuICogYGBgbWFya2Rvd25cbiAqID4gfCBhIGh0dHBzOi8vZXhhbXBsZS5vcmcgYlxuICogICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXlxuICogYGBgXG4gKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplUHJvdG9jb2xBdXRvbGluayhlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICBsZXQgYnVmZmVyID0gJyc7XG4gIGxldCBzZWVuID0gZmFsc2U7XG4gIHJldHVybiBwcm90b2NvbFN0YXJ0O1xuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBwcm90b2NvbCBhdXRvbGluayBsaXRlcmFsLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgaHR0cHM6Ly9leGFtcGxlLmNvbS9hP2IjY1xuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcHJvdG9jb2xTdGFydChjb2RlKSB7XG4gICAgaWYgKChjb2RlID09PSA3MiB8fCBjb2RlID09PSAxMDQpICYmIHByZXZpb3VzUHJvdG9jb2wuY2FsbChzZWxmLCBzZWxmLnByZXZpb3VzKSAmJiAhcHJldmlvdXNVbmJhbGFuY2VkKHNlbGYuZXZlbnRzKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcignbGl0ZXJhbEF1dG9saW5rJyk7XG4gICAgICBlZmZlY3RzLmVudGVyKCdsaXRlcmFsQXV0b2xpbmtIdHRwJyk7XG4gICAgICBidWZmZXIgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZSk7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gcHJvdG9jb2xQcmVmaXhJbnNpZGU7XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gcHJvdG9jb2wuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBodHRwczovL2V4YW1wbGUuY29tL2E/YiNjXG4gICAqICAgICBeXl5eXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcHJvdG9jb2xQcmVmaXhJbnNpZGUoY29kZSkge1xuICAgIC8vIGA1YCBpcyBzaXplIG9mIGBodHRwc2BcbiAgICBpZiAoYXNjaWlBbHBoYShjb2RlKSAmJiBidWZmZXIubGVuZ3RoIDwgNSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogZGVmaW5pdGVseSBudW1iZXIuXG4gICAgICBidWZmZXIgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZSk7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gcHJvdG9jb2xQcmVmaXhJbnNpZGU7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSA1OCkge1xuICAgICAgY29uc3QgcHJvdG9jb2wgPSBidWZmZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChwcm90b2NvbCA9PT0gJ2h0dHAnIHx8IHByb3RvY29sID09PSAnaHR0cHMnKSB7XG4gICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgICAgcmV0dXJuIHByb3RvY29sU2xhc2hlc0luc2lkZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBzbGFzaGVzLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgaHR0cHM6Ly9leGFtcGxlLmNvbS9hP2IjY1xuICAgKiAgICAgICAgICAgXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHByb3RvY29sU2xhc2hlc0luc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQ3KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBpZiAoc2Vlbikge1xuICAgICAgICByZXR1cm4gYWZ0ZXJQcm90b2NvbDtcbiAgICAgIH1cbiAgICAgIHNlZW4gPSB0cnVlO1xuICAgICAgcmV0dXJuIHByb3RvY29sU2xhc2hlc0luc2lkZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBwcm90b2NvbCwgYmVmb3JlIGRvbWFpbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGh0dHBzOi8vZXhhbXBsZS5jb20vYT9iI2NcbiAgICogICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYWZ0ZXJQcm90b2NvbChjb2RlKSB7XG4gICAgLy8gVG8gZG86IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYG1hcmtkb3duLXJzYDpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd29vb3JtL21hcmtkb3duLXJzL2Jsb2IvYjNhOTIxYzc2MTMwOWFlMDBhNTFmZTM0OGQ4YTQzYWRiYzU0YjUxOC9zcmMvY29uc3RydWN0L2dmbV9hdXRvbGlua19saXRlcmFsLnJzI0wxNzItTDE4MlxuICAgIHJldHVybiBjb2RlID09PSBudWxsIHx8IGFzY2lpQ29udHJvbChjb2RlKSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGUpIHx8IHVuaWNvZGVQdW5jdHVhdGlvbihjb2RlKSA/IG5vayhjb2RlKSA6IGVmZmVjdHMuYXR0ZW1wdChkb21haW4sIGVmZmVjdHMuYXR0ZW1wdChwYXRoLCBwcm90b2NvbEFmdGVyKSwgbm9rKShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBhIHByb3RvY29sIGF1dG9saW5rIGxpdGVyYWwuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBodHRwczovL2V4YW1wbGUuY29tL2E/YiNjXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcHJvdG9jb2xBZnRlcihjb2RlKSB7XG4gICAgZWZmZWN0cy5leGl0KCdsaXRlcmFsQXV0b2xpbmtIdHRwJyk7XG4gICAgZWZmZWN0cy5leGl0KCdsaXRlcmFsQXV0b2xpbmsnKTtcbiAgICByZXR1cm4gb2soY29kZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBgd3d3YCBwcmVmaXguXG4gKlxuICogYGBgbWFya2Rvd25cbiAqID4gfCBhIHd3dy5leGFtcGxlLm9yZyBiXG4gKiAgICAgICBeXl5eXG4gKiBgYGBcbiAqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVXd3dQcmVmaXgoZWZmZWN0cywgb2ssIG5vaykge1xuICBsZXQgc2l6ZSA9IDA7XG4gIHJldHVybiB3d3dQcmVmaXhJbnNpZGU7XG5cbiAgLyoqXG4gICAqIEluIHd3dyBwcmVmaXguXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCB3d3cuZXhhbXBsZS5jb21cbiAgICogICAgIF5eXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHd3d1ByZWZpeEluc2lkZShjb2RlKSB7XG4gICAgaWYgKChjb2RlID09PSA4NyB8fCBjb2RlID09PSAxMTkpICYmIHNpemUgPCAzKSB7XG4gICAgICBzaXplKys7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gd3d3UHJlZml4SW5zaWRlO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gNDYgJiYgc2l6ZSA9PT0gMykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIHd3d1ByZWZpeEFmdGVyO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHd3dyBwcmVmaXguXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCB3d3cuZXhhbXBsZS5jb21cbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB3d3dQcmVmaXhBZnRlcihjb2RlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgKmFueXRoaW5nKiwgd2UgY2FuIGxpbmsuXG4gICAgcmV0dXJuIGNvZGUgPT09IG51bGwgPyBub2soY29kZSkgOiBvayhjb2RlKTtcbiAgfVxufVxuXG4vKipcbiAqIERvbWFpbi5cbiAqXG4gKiBgYGBtYXJrZG93blxuICogPiB8IGEgaHR0cHM6Ly9leGFtcGxlLm9yZyBiXG4gKiAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXG4gKiBgYGBcbiAqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVEb21haW4oZWZmZWN0cywgb2ssIG5vaykge1xuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudDtcbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgdW5kZXJzY29yZUluTGFzdExhc3RTZWdtZW50O1xuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBzZWVuO1xuICByZXR1cm4gZG9tYWluSW5zaWRlO1xuXG4gIC8qKlxuICAgKiBJbiBkb21haW4uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBodHRwczovL2V4YW1wbGUuY29tL2FcbiAgICogICAgICAgICAgICAgXl5eXl5eXl5eXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGRvbWFpbkluc2lkZShjb2RlKSB7XG4gICAgLy8gQ2hlY2sgd2hldGhlciB0aGlzIG1hcmtlciwgd2hpY2ggaXMgYSB0cmFpbGluZyBwdW5jdHVhdGlvblxuICAgIC8vIG1hcmtlciwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBtb3JlIHRyYWlsaW5nIG1hcmtlcnMsIGFuZCB0aGVuXG4gICAgLy8gZm9sbG93ZWQgYnkgYW4gZW5kLlxuICAgIGlmIChjb2RlID09PSA0NiB8fCBjb2RlID09PSA5NSkge1xuICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sodHJhaWwsIGRvbWFpbkFmdGVyLCBkb21haW5BdFB1bmN0dWF0aW9uKShjb2RlKTtcbiAgICB9XG5cbiAgICAvLyBHSCBkb2N1bWVudHMgdGhhdCBvbmx5IGFscGhhbnVtZXJpY3MgKG90aGVyIHRoYW4gYC1gLCBgLmAsIGFuZCBgX2ApIGNhblxuICAgIC8vIG9jY3VyLCB3aGljaCBzb3VuZHMgbGlrZSBBU0NJSSBvbmx5LCBidXQgdGhleSBhbHNvIHN1cHBvcnQgYHd3dy5cdTlFREVcdTc3MEIuY29tYCxcbiAgICAvLyBzbyB0aGF0XHUyMDE5cyBVbmljb2RlLlxuICAgIC8vIEluc3RlYWQgb2Ygc29tZSBuZXcgcHJvZHVjdGlvbiBmb3IgVW5pY29kZSBhbHBoYW51bWVyaWNzLCBtYXJrZG93blxuICAgIC8vIGFscmVhZHkgaGFzIHRoYXQgZm9yIFVuaWNvZGUgcHVuY3R1YXRpb24gYW5kIHdoaXRlc3BhY2UsIHNvIHVzZSB0aG9zZS5cbiAgICAvLyBTb3VyY2U6IDxodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2NtYXJrLWdmbS9ibG9iL2VmMWNmY2IvZXh0ZW5zaW9ucy9hdXRvbGluay5jI0wxMj4uXG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlKSB8fCBjb2RlICE9PSA0NSAmJiB1bmljb2RlUHVuY3R1YXRpb24oY29kZSkpIHtcbiAgICAgIHJldHVybiBkb21haW5BZnRlcihjb2RlKTtcbiAgICB9XG4gICAgc2VlbiA9IHRydWU7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIHJldHVybiBkb21haW5JbnNpZGU7XG4gIH1cblxuICAvKipcbiAgICogSW4gZG9tYWluLCBhdCBwb3RlbnRpYWwgdHJhaWxpbmcgcHVuY3R1YXRpb24sIHRoYXQgd2FzIG5vdCB0cmFpbGluZy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGh0dHBzOi8vZXhhbXBsZS5jb21cbiAgICogICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGRvbWFpbkF0UHVuY3R1YXRpb24oY29kZSkge1xuICAgIC8vIFRoZXJlIGlzIGFuIHVuZGVyc2NvcmUgaW4gdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgZG9tYWluXG4gICAgaWYgKGNvZGUgPT09IDk1KSB7XG4gICAgICB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudCA9IHRydWU7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgaXRcdTIwMTlzIGEgYC5gOiBzYXZlIHRoZSBsYXN0IHNlZ21lbnQgdW5kZXJzY29yZSBpbiB0aGVcbiAgICAvLyBwZW51bHRpbWF0ZSBzZWdtZW50IHNsb3QuXG4gICAgZWxzZSB7XG4gICAgICB1bmRlcnNjb3JlSW5MYXN0TGFzdFNlZ21lbnQgPSB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudDtcbiAgICAgIHVuZGVyc2NvcmVJbkxhc3RTZWdtZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIGRvbWFpbkluc2lkZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBkb21haW4uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBodHRwczovL2V4YW1wbGUuY29tL2FcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGRvbWFpbkFmdGVyKGNvZGUpIHtcbiAgICAvLyBOb3RlOiB0aGF0XHUyMDE5cyBHSCBzYXlzIGEgZG90IGlzIG5lZWRlZCwgYnV0IGl0XHUyMDE5cyBub3QgdHJ1ZTpcbiAgICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9jbWFyay1nZm0vaXNzdWVzLzI3OT5cbiAgICBpZiAodW5kZXJzY29yZUluTGFzdExhc3RTZWdtZW50IHx8IHVuZGVyc2NvcmVJbkxhc3RTZWdtZW50IHx8ICFzZWVuKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gb2soY29kZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXRoLlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiA+IHwgYSBodHRwczovL2V4YW1wbGUub3JnL3N0dWZmIGJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5cbiAqIGBgYFxuICpcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZVBhdGgoZWZmZWN0cywgb2spIHtcbiAgbGV0IHNpemVPcGVuID0gMDtcbiAgbGV0IHNpemVDbG9zZSA9IDA7XG4gIHJldHVybiBwYXRoSW5zaWRlO1xuXG4gIC8qKlxuICAgKiBJbiBwYXRoLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgaHR0cHM6Ly9leGFtcGxlLmNvbS9hXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHBhdGhJbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0MCkge1xuICAgICAgc2l6ZU9wZW4rKztcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBwYXRoSW5zaWRlO1xuICAgIH1cblxuICAgIC8vIFRvIGRvOiBgbWFya2Rvd24tcnNgIGFsc28gbmVlZHMgdGhpcy5cbiAgICAvLyBJZiB0aGlzIGlzIGEgcGFyZW4sIGFuZCB0aGVyZSBhcmUgbGVzcyBjbG9zaW5ncyB0aGFuIG9wZW5pbmdzLFxuICAgIC8vIHdlIGRvblx1MjAxOXQgY2hlY2sgZm9yIGEgdHJhaWwuXG4gICAgaWYgKGNvZGUgPT09IDQxICYmIHNpemVDbG9zZSA8IHNpemVPcGVuKSB7XG4gICAgICByZXR1cm4gcGF0aEF0UHVuY3R1YXRpb24oY29kZSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgd2hldGhlciB0aGlzIHRyYWlsaW5nIHB1bmN0dWF0aW9uIG1hcmtlciBpcyBvcHRpb25hbGx5XG4gICAgLy8gZm9sbG93ZWQgYnkgbW9yZSB0cmFpbGluZyBtYXJrZXJzLCBhbmQgdGhlbiBmb2xsb3dlZFxuICAgIC8vIGJ5IGFuIGVuZC5cbiAgICBpZiAoY29kZSA9PT0gMzMgfHwgY29kZSA9PT0gMzQgfHwgY29kZSA9PT0gMzggfHwgY29kZSA9PT0gMzkgfHwgY29kZSA9PT0gNDEgfHwgY29kZSA9PT0gNDIgfHwgY29kZSA9PT0gNDQgfHwgY29kZSA9PT0gNDYgfHwgY29kZSA9PT0gNTggfHwgY29kZSA9PT0gNTkgfHwgY29kZSA9PT0gNjAgfHwgY29kZSA9PT0gNjMgfHwgY29kZSA9PT0gOTMgfHwgY29kZSA9PT0gOTUgfHwgY29kZSA9PT0gMTI2KSB7XG4gICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayh0cmFpbCwgb2ssIHBhdGhBdFB1bmN0dWF0aW9uKShjb2RlKTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlKSkge1xuICAgICAgcmV0dXJuIG9rKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIHBhdGhJbnNpZGU7XG4gIH1cblxuICAvKipcbiAgICogSW4gcGF0aCwgYXQgcG90ZW50aWFsIHRyYWlsaW5nIHB1bmN0dWF0aW9uLCB0aGF0IHdhcyBub3QgdHJhaWxpbmcuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBodHRwczovL2V4YW1wbGUuY29tL2FcImJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHBhdGhBdFB1bmN0dWF0aW9uKGNvZGUpIHtcbiAgICAvLyBDb3VudCBjbG9zaW5nIHBhcmVucy5cbiAgICBpZiAoY29kZSA9PT0gNDEpIHtcbiAgICAgIHNpemVDbG9zZSsrO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIHBhdGhJbnNpZGU7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFpbC5cbiAqXG4gKiBUaGlzIGNhbGxzIGBva2AgaWYgdGhpcyAqaXMqIHRoZSB0cmFpbCwgZm9sbG93ZWQgYnkgYW4gZW5kLCB3aGljaCBtZWFuc1xuICogdGhlIGVudGlyZSB0cmFpbCBpcyBub3QgcGFydCBvZiB0aGUgbGluay5cbiAqIEl0IGNhbGxzIGBub2tgIGlmIHRoaXMgKmlzKiBwYXJ0IG9mIHRoZSBsaW5rLlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiA+IHwgaHR0cHM6Ly9leGFtcGxlLmNvbVwiKS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgXl5eXG4gKiBgYGBcbiAqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVUcmFpbChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiB0cmFpbDtcblxuICAvKipcbiAgICogSW4gdHJhaWwgb2YgZG9tYWluIG9yIHBhdGguXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBodHRwczovL2V4YW1wbGUuY29tXCIpLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRyYWlsKGNvZGUpIHtcbiAgICAvLyBSZWd1bGFyIHRyYWlsaW5nIHB1bmN0dWF0aW9uLlxuICAgIGlmIChjb2RlID09PSAzMyB8fCBjb2RlID09PSAzNCB8fCBjb2RlID09PSAzOSB8fCBjb2RlID09PSA0MSB8fCBjb2RlID09PSA0MiB8fCBjb2RlID09PSA0NCB8fCBjb2RlID09PSA0NiB8fCBjb2RlID09PSA1OCB8fCBjb2RlID09PSA1OSB8fCBjb2RlID09PSA2MyB8fCBjb2RlID09PSA5NSB8fCBjb2RlID09PSAxMjYpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiB0cmFpbDtcbiAgICB9XG5cbiAgICAvLyBgJmAgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgYWxwaGFiZXRpY2FscyBhbmQgdGhlbiBhIGA7YCwgaXNcbiAgICAvLyBhcyBhIHdob2xlIGNvbnNpZGVyZWQgYXMgdHJhaWxpbmcgcHVuY3R1YXRpb24uXG4gICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzLCBpdCBpcyBjb25zaWRlcmVkIGFzIGNvbnRpbnVhdGlvbiBvZiB0aGUgVVJMLlxuICAgIGlmIChjb2RlID09PSAzOCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIHRyYWlsQ2hhcmFjdGVyUmVmZXJlbmNlU3RhcnQ7XG4gICAgfVxuXG4gICAgLy8gTmVlZGVkIGJlY2F1c2Ugd2UgYWxsb3cgbGl0ZXJhbHMgYWZ0ZXIgYFtgLCBhcyB3ZSBmaXg6XG4gICAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvY21hcmstZ2ZtL2lzc3Vlcy8yNzg+LlxuICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgbm90IGZvbGxvd2VkIGJ5IGAoYCBvciBgW2AuXG4gICAgaWYgKGNvZGUgPT09IDkzKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gdHJhaWxCcmFja2V0QWZ0ZXI7XG4gICAgfVxuICAgIGlmIChcbiAgICAvLyBgPGAgaXMgYW4gZW5kLlxuICAgIGNvZGUgPT09IDYwIHx8XG4gICAgLy8gU28gaXMgd2hpdGVzcGFjZS5cbiAgICBjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZSkpIHtcbiAgICAgIHJldHVybiBvayhjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiB0cmFpbCwgYWZ0ZXIgYF1gLlxuICAgKlxuICAgKiA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogdGhpcyBkZXZpYXRlcyBmcm9tIGBjbWFyay1nZm1gIHRvIGZpeCBhIGJ1Zy5cbiAgICogPiBTZWUgZW5kIG9mIDxodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2NtYXJrLWdmbS9pc3N1ZXMvMjc4PiBmb3IgbW9yZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGh0dHBzOi8vZXhhbXBsZS5jb21dKFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0cmFpbEJyYWNrZXRBZnRlcihjb2RlKSB7XG4gICAgLy8gV2hpdGVzcGFjZSBvciBzb21ldGhpbmcgdGhhdCBjb3VsZCBzdGFydCBhIHJlc291cmNlIG9yIHJlZmVyZW5jZSBpcyB0aGUgZW5kLlxuICAgIC8vIFN3aXRjaCBiYWNrIHRvIHRyYWlsIG90aGVyd2lzZS5cbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSA0MCB8fCBjb2RlID09PSA5MSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gb2soY29kZSk7XG4gICAgfVxuICAgIHJldHVybiB0cmFpbChjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjaGFyYWN0ZXItcmVmZXJlbmNlIGxpa2UgdHJhaWwsIGFmdGVyIGAmYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGh0dHBzOi8vZXhhbXBsZS5jb20mYW1wOykuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRyYWlsQ2hhcmFjdGVyUmVmZXJlbmNlU3RhcnQoY29kZSkge1xuICAgIC8vIFdoZW4gbm9uLWFscGhhLCBpdFx1MjAxOXMgbm90IGEgdHJhaWwuXG4gICAgcmV0dXJuIGFzY2lpQWxwaGEoY29kZSkgPyB0cmFpbENoYXJhY3RlclJlZmVyZW5jZUluc2lkZShjb2RlKSA6IG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjaGFyYWN0ZXItcmVmZXJlbmNlIGxpa2UgdHJhaWwuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBodHRwczovL2V4YW1wbGUuY29tJmFtcDspLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0cmFpbENoYXJhY3RlclJlZmVyZW5jZUluc2lkZShjb2RlKSB7XG4gICAgLy8gU3dpdGNoIGJhY2sgdG8gdHJhaWwgaWYgdGhpcyBpcyB3ZWxsLWZvcm1lZC5cbiAgICBpZiAoY29kZSA9PT0gNTkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiB0cmFpbDtcbiAgICB9XG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiB0cmFpbENoYXJhY3RlclJlZmVyZW5jZUluc2lkZTtcbiAgICB9XG5cbiAgICAvLyBJdFx1MjAxOXMgbm90IGEgdHJhaWwuXG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxufVxuXG4vKipcbiAqIERvdCBpbiBlbWFpbCBkb21haW4gdHJhaWwuXG4gKlxuICogVGhpcyBjYWxscyBgb2tgIGlmIHRoaXMgKmlzKiB0aGUgdHJhaWwsIGZvbGxvd2VkIGJ5IGFuIGVuZCwgd2hpY2ggbWVhbnNcbiAqIHRoZSB0cmFpbCBpcyBub3QgcGFydCBvZiB0aGUgbGluay5cbiAqIEl0IGNhbGxzIGBub2tgIGlmIHRoaXMgKmlzKiBwYXJ0IG9mIHRoZSBsaW5rLlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiA+IHwgY29udGFjdEBleGFtcGxlLm9yZy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgXlxuICogYGBgXG4gKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplRW1haWxEb21haW5Eb3RUcmFpbChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiBzdGFydDtcblxuICAvKipcbiAgICogRG90LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgY29udGFjdEBleGFtcGxlLm9yZy5cbiAgICogICAgICAgICAgICAgICAgICAgIF4gICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgLy8gTXVzdCBiZSBkb3QuXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIHJldHVybiBhZnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBkb3QuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBjb250YWN0QGV4YW1wbGUub3JnLlxuICAgKiAgICAgICAgICAgICAgICAgICAgIF4gICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgLy8gTm90IGEgdHJhaWwgaWYgYWxwaGFudW1lcmljLlxuICAgIHJldHVybiBhc2NpaUFscGhhbnVtZXJpYyhjb2RlKSA/IG5vayhjb2RlKSA6IG9rKGNvZGUpO1xuICB9XG59XG5cbi8qKlxuICogU2VlOlxuICogPGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvY21hcmstZ2ZtL2Jsb2IvZWYxY2ZjYi9leHRlbnNpb25zL2F1dG9saW5rLmMjTDE1Nj4uXG4gKlxuICogQHR5cGUge1ByZXZpb3VzfVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1d3dyhjb2RlKSB7XG4gIHJldHVybiBjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IDQwIHx8IGNvZGUgPT09IDQyIHx8IGNvZGUgPT09IDk1IHx8IGNvZGUgPT09IDkxIHx8IGNvZGUgPT09IDkzIHx8IGNvZGUgPT09IDEyNiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpO1xufVxuXG4vKipcbiAqIFNlZTpcbiAqIDxodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2NtYXJrLWdmbS9ibG9iL2VmMWNmY2IvZXh0ZW5zaW9ucy9hdXRvbGluay5jI0wyMTQ+LlxuICpcbiAqIEB0eXBlIHtQcmV2aW91c31cbiAqL1xuZnVuY3Rpb24gcHJldmlvdXNQcm90b2NvbChjb2RlKSB7XG4gIHJldHVybiAhYXNjaWlBbHBoYShjb2RlKTtcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1ByZXZpb3VzfVxuICovXG5mdW5jdGlvbiBwcmV2aW91c0VtYWlsKGNvZGUpIHtcbiAgLy8gRG8gbm90IGFsbG93IGEgc2xhc2ggXHUyMDFDaW5zaWRlXHUyMDFEIGF0ZXh0LlxuICAvLyBUaGUgcmVmZXJlbmNlIGNvZGUgaXMgYSBiaXQgd2VpcmQsIGJ1dCB0aGF0XHUyMDE5cyB3aGF0IGl0IHJlc3VsdHMgaW4uXG4gIC8vIFNvdXJjZTogPGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvY21hcmstZ2ZtL2Jsb2IvZWYxY2ZjYi9leHRlbnNpb25zL2F1dG9saW5rLmMjTDMwNz4uXG4gIC8vIE90aGVyIHRoYW4gc2xhc2gsIGV2ZXJ5IHByZWNlZGluZyBjaGFyYWN0ZXIgaXMgYWxsb3dlZC5cbiAgcmV0dXJuICEoY29kZSA9PT0gNDcgfHwgZ2ZtQXRleHQoY29kZSkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Q29kZX0gY29kZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGdmbUF0ZXh0KGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDQzIHx8IGNvZGUgPT09IDQ1IHx8IGNvZGUgPT09IDQ2IHx8IGNvZGUgPT09IDk1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBldmVudHNcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1VuYmFsYW5jZWQoZXZlbnRzKSB7XG4gIGxldCBpbmRleCA9IGV2ZW50cy5sZW5ndGg7XG4gIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBjb25zdCB0b2tlbiA9IGV2ZW50c1tpbmRleF1bMV07XG4gICAgaWYgKCh0b2tlbi50eXBlID09PSAnbGFiZWxMaW5rJyB8fCB0b2tlbi50eXBlID09PSAnbGFiZWxJbWFnZScpICYmICF0b2tlbi5fYmFsYW5jZWQpIHtcbiAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBJZiB3ZVx1MjAxOXZlIHNlZW4gdGhpcyB0b2tlbiwgYW5kIGl0IHdhcyBtYXJrZWQgYXMgbm90IGhhdmluZyBhbnkgdW5iYWxhbmNlZFxuICAgIC8vIGJyYWNrZXQgYmVmb3JlIGl0LCB3ZSBjYW4gZXhpdC5cbiAgICBpZiAodG9rZW4uX2dmbUF1dG9saW5rTGl0ZXJhbFdhbGtlZEludG8pIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChldmVudHMubGVuZ3RoID4gMCAmJiAhcmVzdWx0KSB7XG4gICAgLy8gTWFyayB0aGUgbGFzdCB0b2tlbiBhcyBcdTIwMUN3YWxrZWQgaW50b1x1MjAxRCB3L28gZmluZGluZ1xuICAgIC8vIGFueXRoaW5nLlxuICAgIGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uX2dmbUF1dG9saW5rTGl0ZXJhbFdhbGtlZEludG8gPSB0cnVlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59IiwgImNvbnN0IGNoYXJhY3RlclJlZmVyZW5jZXMgPSB7J1wiJzogJ3F1b3QnLCAnJic6ICdhbXAnLCAnPCc6ICdsdCcsICc+JzogJ2d0J31cblxuLyoqXG4gKiBFbmNvZGUgb25seSB0aGUgZGFuZ2Vyb3VzIEhUTUwgY2hhcmFjdGVycy5cbiAqXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBjZXJ0YWluIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSBzcGVjaWFsIG1lYW5pbmcgaW4gSFRNTCBhcmVcbiAqIGRlYWx0IHdpdGguXG4gKiBUZWNobmljYWxseSwgd2UgY2FuIHNraXAgYD5gIGFuZCBgXCJgIGluIG1hbnkgY2FzZXMsIGJ1dCBDTSBpbmNsdWRlcyB0aGVtLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBWYWx1ZSB0byBlbmNvZGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBFbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bXCImPD5dL2csIHJlcGxhY2UpXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiAgIFZhbHVlIHRvIHJlcGxhY2UuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqICAgRW5jb2RlZCB2YWx1ZS5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcGxhY2UodmFsdWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgJyYnICtcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZXNbXG4gICAgICAgIC8qKiBAdHlwZSB7a2V5b2YgdHlwZW9mIGNoYXJhY3RlclJlZmVyZW5jZXN9ICovICh2YWx1ZSlcbiAgICAgIF0gK1xuICAgICAgJzsnXG4gICAgKVxuICB9XG59XG4iLCAiaW1wb3J0IHsgYXNjaWlBbHBoYW51bWVyaWMgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuaW1wb3J0IHsgZW5jb2RlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtZW5jb2RlJztcbi8qKlxuICogTWFrZSBhIHZhbHVlIHNhZmUgZm9yIGluamVjdGlvbiBhcyBhIFVSTC5cbiAqXG4gKiBUaGlzIGVuY29kZXMgdW5zYWZlIGNoYXJhY3RlcnMgd2l0aCBwZXJjZW50LWVuY29kaW5nIGFuZCBza2lwcyBhbHJlYWR5XG4gKiBlbmNvZGVkIHNlcXVlbmNlcyAoc2VlIGBub3JtYWxpemVVcmlgKS5cbiAqIEZ1cnRoZXIgdW5zYWZlIGNoYXJhY3RlcnMgYXJlIGVuY29kZWQgYXMgY2hhcmFjdGVyIHJlZmVyZW5jZXMgKHNlZVxuICogYG1pY3JvbWFyay11dGlsLWVuY29kZWApLlxuICpcbiAqIEEgcmVnZXggb2YgYWxsb3dlZCBwcm90b2NvbHMgY2FuIGJlIGdpdmVuLCBpbiB3aGljaCBjYXNlIHRoZSBVUkwgaXNcbiAqIHNhbml0aXplZC5cbiAqIEZvciBleGFtcGxlLCBgL14oaHR0cHM/fGlyY3M/fG1haWx0b3x4bXBwKSQvaWAgY2FuIGJlIHVzZWQgZm9yIGBhW2hyZWZdYCwgb3JcbiAqIGAvXmh0dHBzPyQvaWAgZm9yIGBpbWdbc3JjXWAgKHRoaXMgaXMgd2hhdCBgZ2l0aHViLmNvbWAgYWxsb3dzKS5cbiAqIElmIHRoZSBVUkwgaW5jbHVkZXMgYW4gdW5rbm93biBwcm90b2NvbCAob25lIG5vdCBtYXRjaGVkIGJ5IGBwcm90b2NvbGAsIHN1Y2hcbiAqIGFzIGEgZGFuZ2Vyb3VzIGV4YW1wbGUsIGBqYXZhc2NyaXB0OmApLCB0aGUgdmFsdWUgaXMgaWdub3JlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IHVybFxuICogICBVUkkgdG8gc2FuaXRpemUuXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IG51bGwgfCB1bmRlZmluZWR9IFtwcm90b2NvbF1cbiAqICAgQWxsb3dlZCBwcm90b2NvbHMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBTYW5pdGl6ZWQgVVJJLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVVcmkodXJsLCBwcm90b2NvbCkge1xuICBjb25zdCB2YWx1ZSA9IGVuY29kZShub3JtYWxpemVVcmkodXJsIHx8ICcnKSk7XG4gIGlmICghcHJvdG9jb2wpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgY29uc3QgY29sb24gPSB2YWx1ZS5pbmRleE9mKCc6Jyk7XG4gIGNvbnN0IHF1ZXN0aW9uTWFyayA9IHZhbHVlLmluZGV4T2YoJz8nKTtcbiAgY29uc3QgbnVtYmVyU2lnbiA9IHZhbHVlLmluZGV4T2YoJyMnKTtcbiAgY29uc3Qgc2xhc2ggPSB2YWx1ZS5pbmRleE9mKCcvJyk7XG4gIGlmIChcbiAgLy8gSWYgdGhlcmUgaXMgbm8gcHJvdG9jb2wsIGl0XHUyMDE5cyByZWxhdGl2ZS5cbiAgY29sb24gPCAwIHx8XG4gIC8vIElmIHRoZSBmaXJzdCBjb2xvbiBpcyBhZnRlciBhIGA/YCwgYCNgLCBvciBgL2AsIGl0XHUyMDE5cyBub3QgYSBwcm90b2NvbC5cbiAgc2xhc2ggPiAtMSAmJiBjb2xvbiA+IHNsYXNoIHx8IHF1ZXN0aW9uTWFyayA+IC0xICYmIGNvbG9uID4gcXVlc3Rpb25NYXJrIHx8IG51bWJlclNpZ24gPiAtMSAmJiBjb2xvbiA+IG51bWJlclNpZ24gfHxcbiAgLy8gSXQgaXMgYSBwcm90b2NvbCwgaXQgc2hvdWxkIGJlIGFsbG93ZWQuXG4gIHByb3RvY29sLnRlc3QodmFsdWUuc2xpY2UoMCwgY29sb24pKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgVVJMLlxuICpcbiAqIEVuY29kZSB1bnNhZmUgY2hhcmFjdGVycyB3aXRoIHBlcmNlbnQtZW5jb2RpbmcsIHNraXBwaW5nIGFscmVhZHkgZW5jb2RlZFxuICogc2VxdWVuY2VzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBVUkkgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgTm9ybWFsaXplZCBVUkkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVVcmkodmFsdWUpIHtcbiAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGxldCBzdGFydCA9IDA7XG4gIGxldCBza2lwID0gMDtcbiAgd2hpbGUgKCsraW5kZXggPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICBjb25zdCBjb2RlID0gdmFsdWUuY2hhckNvZGVBdChpbmRleCk7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgbGV0IHJlcGxhY2UgPSAnJztcblxuICAgIC8vIEEgY29ycmVjdCBwZXJjZW50IGVuY29kZWQgdmFsdWUuXG4gICAgaWYgKGNvZGUgPT09IDM3ICYmIGFzY2lpQWxwaGFudW1lcmljKHZhbHVlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkgJiYgYXNjaWlBbHBoYW51bWVyaWModmFsdWUuY2hhckNvZGVBdChpbmRleCArIDIpKSkge1xuICAgICAgc2tpcCA9IDI7XG4gICAgfVxuICAgIC8vIEFTQ0lJLlxuICAgIGVsc2UgaWYgKGNvZGUgPCAxMjgpIHtcbiAgICAgIGlmICghL1shIyQmLTs9Py1aX2Eten5dLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkpKSB7XG4gICAgICAgIHJlcGxhY2UgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBc3RyYWwuXG4gICAgZWxzZSBpZiAoY29kZSA+IDU1XzI5NSAmJiBjb2RlIDwgNTdfMzQ0KSB7XG4gICAgICBjb25zdCBuZXh0ID0gdmFsdWUuY2hhckNvZGVBdChpbmRleCArIDEpO1xuXG4gICAgICAvLyBBIGNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIuXG4gICAgICBpZiAoY29kZSA8IDU2XzMyMCAmJiBuZXh0ID4gNTZfMzE5ICYmIG5leHQgPCA1N18zNDQpIHtcbiAgICAgICAgcmVwbGFjZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSwgbmV4dCk7XG4gICAgICAgIHNraXAgPSAxO1xuICAgICAgfVxuICAgICAgLy8gTG9uZSBzdXJyb2dhdGUuXG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVwbGFjZSA9IFwiXFx1RkZGRFwiO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBVbmljb2RlLlxuICAgIGVsc2Uge1xuICAgICAgcmVwbGFjZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgfVxuICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZS5zbGljZShzdGFydCwgaW5kZXgpLCBlbmNvZGVVUklDb21wb25lbnQocmVwbGFjZSkpO1xuICAgICAgc3RhcnQgPSBpbmRleCArIHNraXAgKyAxO1xuICAgICAgcmVwbGFjZSA9ICcnO1xuICAgIH1cbiAgICBpZiAoc2tpcCkge1xuICAgICAgaW5kZXggKz0gc2tpcDtcbiAgICAgIHNraXAgPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0LmpvaW4oJycpICsgdmFsdWUuc2xpY2Uoc3RhcnQpO1xufSIsICIvKipcbiAqIEBpbXBvcnQge0NvbXBpbGVDb250ZXh0LCBIYW5kbGUsIEh0bWxFeHRlbnNpb24sIFRva2VufSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBzYW5pdGl6ZVVyaSB9IGZyb20gJ21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaSc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEhUTUwgZXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0byBzdXBwb3J0IEdpdEh1YiBhdXRvbGluayBsaXRlcmFsXG4gKiB3aGVuIHNlcmlhbGl6aW5nIHRvIEhUTUwuXG4gKlxuICogQHJldHVybnMge0h0bWxFeHRlbnNpb259XG4gKiAgIEV4dGVuc2lvbiBmb3IgYG1pY3JvbWFya2AgdGhhdCBjYW4gYmUgcGFzc2VkIGluIGBodG1sRXh0ZW5zaW9uc2AgdG9cbiAqICAgc3VwcG9ydCBHaXRIdWIgYXV0b2xpbmsgbGl0ZXJhbCB3aGVuIHNlcmlhbGl6aW5nIHRvIEhUTUwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZm1BdXRvbGlua0xpdGVyYWxIdG1sKCkge1xuICByZXR1cm4ge1xuICAgIGV4aXQ6IHtcbiAgICAgIGxpdGVyYWxBdXRvbGlua0VtYWlsLFxuICAgICAgbGl0ZXJhbEF1dG9saW5rSHR0cCxcbiAgICAgIGxpdGVyYWxBdXRvbGlua1d3d1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gKiBAdHlwZSB7SGFuZGxlfVxuICovXG5mdW5jdGlvbiBsaXRlcmFsQXV0b2xpbmtXd3codG9rZW4pIHtcbiAgYW5jaG9yRnJvbVRva2VuLmNhbGwodGhpcywgdG9rZW4sICdodHRwOi8vJyk7XG59XG5cbi8qKlxuICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICogQHR5cGUge0hhbmRsZX1cbiAqL1xuZnVuY3Rpb24gbGl0ZXJhbEF1dG9saW5rRW1haWwodG9rZW4pIHtcbiAgYW5jaG9yRnJvbVRva2VuLmNhbGwodGhpcywgdG9rZW4sICdtYWlsdG86Jyk7XG59XG5cbi8qKlxuICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICogQHR5cGUge0hhbmRsZX1cbiAqL1xuZnVuY3Rpb24gbGl0ZXJhbEF1dG9saW5rSHR0cCh0b2tlbikge1xuICBhbmNob3JGcm9tVG9rZW4uY2FsbCh0aGlzLCB0b2tlbik7XG59XG5cbi8qKlxuICogQHRoaXMgQ29tcGlsZUNvbnRleHRcbiAqIEBwYXJhbSB7VG9rZW59IHRva2VuXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtwcm90b2NvbF1cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGFuY2hvckZyb21Ub2tlbih0b2tlbiwgcHJvdG9jb2wpIHtcbiAgY29uc3QgdXJsID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7XG4gIHRoaXMudGFnKCc8YSBocmVmPVwiJyArIHNhbml0aXplVXJpKChwcm90b2NvbCB8fCAnJykgKyB1cmwpICsgJ1wiPicpO1xuICB0aGlzLnJhdyh0aGlzLmVuY29kZSh1cmwpKTtcbiAgdGhpcy50YWcoJzwvYT4nKTtcbn0iLCAiZXhwb3J0IHsgZ2ZtQXV0b2xpbmtMaXRlcmFsIH0gZnJvbSAnLi9saWIvc3ludGF4LmpzJztcbmV4cG9ydCB7IGdmbUF1dG9saW5rTGl0ZXJhbEh0bWwgfSBmcm9tICcuL2xpYi9odG1sLmpzJzsiLCAiLyoqXG4gKiBAaW1wb3J0IHtFdmVudCwgUmVzb2x2ZXIsIFRva2VuaXplQ29udGV4dH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuLyoqXG4gKiBDYWxsIGFsbCBgcmVzb2x2ZUFsbGBzLlxuICpcbiAqIEBwYXJhbSB7UmVhZG9ubHlBcnJheTx7cmVzb2x2ZUFsbD86IFJlc29sdmVyIHwgdW5kZWZpbmVkfT59IGNvbnN0cnVjdHNcbiAqICAgTGlzdCBvZiBjb25zdHJ1Y3RzLCBvcHRpb25hbGx5IHdpdGggYHJlc29sdmVBbGxgcy5cbiAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBldmVudHNcbiAqICAgTGlzdCBvZiBldmVudHMuXG4gKiBAcGFyYW0ge1Rva2VuaXplQ29udGV4dH0gY29udGV4dFxuICogICBDb250ZXh0IHVzZWQgYnkgYHRva2VuaXplYC5cbiAqIEByZXR1cm5zIHtBcnJheTxFdmVudD59XG4gKiAgIENoYW5nZWQgZXZlbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFsbChjb25zdHJ1Y3RzLCBldmVudHMsIGNvbnRleHQpIHtcbiAgLyoqIEB0eXBlIHtBcnJheTxSZXNvbHZlcj59ICovXG4gIGNvbnN0IGNhbGxlZCA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCBjb25zdHJ1Y3RzLmxlbmd0aCkge1xuICAgIGNvbnN0IHJlc29sdmUgPSBjb25zdHJ1Y3RzW2luZGV4XS5yZXNvbHZlQWxsXG5cbiAgICBpZiAocmVzb2x2ZSAmJiAhY2FsbGVkLmluY2x1ZGVzKHJlc29sdmUpKSB7XG4gICAgICBldmVudHMgPSByZXNvbHZlKGV2ZW50cywgY29udGV4dClcbiAgICAgIGNhbGxlZC5wdXNoKHJlc29sdmUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50c1xufVxuIiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIENvZGUsXG4gKiAgIENvbnN0cnVjdCxcbiAqICAgRXZlbnQsXG4gKiAgIFBvaW50LFxuICogICBSZXNvbHZlcixcbiAqICAgU3RhdGUsXG4gKiAgIFRva2VuaXplQ29udGV4dCxcbiAqICAgVG9rZW5pemVyLFxuICogICBUb2tlblxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBwdXNoLCBzcGxpY2UgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaHVua2VkJztcbmltcG9ydCB7IGNsYXNzaWZ5Q2hhcmFjdGVyIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2xhc3NpZnktY2hhcmFjdGVyJztcbmltcG9ydCB7IHJlc29sdmVBbGwgfSBmcm9tICdtaWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbCc7XG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBhdHRlbnRpb24gPSB7XG4gIG5hbWU6ICdhdHRlbnRpb24nLFxuICByZXNvbHZlQWxsOiByZXNvbHZlQWxsQXR0ZW50aW9uLFxuICB0b2tlbml6ZTogdG9rZW5pemVBdHRlbnRpb25cbn07XG5cbi8qKlxuICogVGFrZSBhbGwgZXZlbnRzIGFuZCByZXNvbHZlIGF0dGVudGlvbiB0byBlbXBoYXNpcyBvciBzdHJvbmcuXG4gKlxuICogQHR5cGUge1Jlc29sdmVyfVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcmVzb2x2ZUFsbEF0dGVudGlvbihldmVudHMsIGNvbnRleHQpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBsZXQgb3BlbjtcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IGdyb3VwO1xuICAvKiogQHR5cGUge1Rva2VufSAqL1xuICBsZXQgdGV4dDtcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IG9wZW5pbmdTZXF1ZW5jZTtcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IGNsb3NpbmdTZXF1ZW5jZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCB1c2U7XG4gIC8qKiBAdHlwZSB7QXJyYXk8RXZlbnQ+fSAqL1xuICBsZXQgbmV4dEV2ZW50cztcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBvZmZzZXQ7XG5cbiAgLy8gV2FsayB0aHJvdWdoIGFsbCBldmVudHMuXG4gIC8vXG4gIC8vIE5vdGU6IHBlcmZvcm1hbmNlIG9mIHRoaXMgaXMgZmluZSBvbiBhbiBtYiBvZiBub3JtYWwgbWFya2Rvd24sIGJ1dCBpdFx1MjAxOXNcbiAgLy8gYSBib3R0bGVuZWNrIGZvciBtYWxpY2lvdXMgc3R1ZmYuXG4gIHdoaWxlICgrK2luZGV4IDwgZXZlbnRzLmxlbmd0aCkge1xuICAgIC8vIEZpbmQgYSB0b2tlbiB0aGF0IGNhbiBjbG9zZS5cbiAgICBpZiAoZXZlbnRzW2luZGV4XVswXSA9PT0gJ2VudGVyJyAmJiBldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09ICdhdHRlbnRpb25TZXF1ZW5jZScgJiYgZXZlbnRzW2luZGV4XVsxXS5fY2xvc2UpIHtcbiAgICAgIG9wZW4gPSBpbmRleDtcblxuICAgICAgLy8gTm93IHdhbGsgYmFjayB0byBmaW5kIGFuIG9wZW5lci5cbiAgICAgIHdoaWxlIChvcGVuLS0pIHtcbiAgICAgICAgLy8gRmluZCBhIHRva2VuIHRoYXQgY2FuIG9wZW4gdGhlIGNsb3Nlci5cbiAgICAgICAgaWYgKGV2ZW50c1tvcGVuXVswXSA9PT0gJ2V4aXQnICYmIGV2ZW50c1tvcGVuXVsxXS50eXBlID09PSAnYXR0ZW50aW9uU2VxdWVuY2UnICYmIGV2ZW50c1tvcGVuXVsxXS5fb3BlbiAmJlxuICAgICAgICAvLyBJZiB0aGUgbWFya2VycyBhcmUgdGhlIHNhbWU6XG4gICAgICAgIGNvbnRleHQuc2xpY2VTZXJpYWxpemUoZXZlbnRzW29wZW5dWzFdKS5jaGFyQ29kZUF0KDApID09PSBjb250ZXh0LnNsaWNlU2VyaWFsaXplKGV2ZW50c1tpbmRleF1bMV0pLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgb3BlbmluZyBjYW4gY2xvc2Ugb3IgdGhlIGNsb3NpbmcgY2FuIG9wZW4sXG4gICAgICAgICAgLy8gYW5kIHRoZSBjbG9zZSBzaXplICppcyBub3QqIGEgbXVsdGlwbGUgb2YgdGhyZWUsXG4gICAgICAgICAgLy8gYnV0IHRoZSBzdW0gb2YgdGhlIG9wZW5pbmcgYW5kIGNsb3Npbmcgc2l6ZSAqaXMqIG11bHRpcGxlIG9mIHRocmVlLFxuICAgICAgICAgIC8vIHRoZW4gZG9uXHUyMDE5dCBtYXRjaC5cbiAgICAgICAgICBpZiAoKGV2ZW50c1tvcGVuXVsxXS5fY2xvc2UgfHwgZXZlbnRzW2luZGV4XVsxXS5fb3BlbikgJiYgKGV2ZW50c1tpbmRleF1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleF1bMV0uc3RhcnQub2Zmc2V0KSAlIDMgJiYgISgoZXZlbnRzW29wZW5dWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbb3Blbl1bMV0uc3RhcnQub2Zmc2V0ICsgZXZlbnRzW2luZGV4XVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW2luZGV4XVsxXS5zdGFydC5vZmZzZXQpICUgMykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE51bWJlciBvZiBtYXJrZXJzIHRvIHVzZSBmcm9tIHRoZSBzZXF1ZW5jZS5cbiAgICAgICAgICB1c2UgPSBldmVudHNbb3Blbl1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tvcGVuXVsxXS5zdGFydC5vZmZzZXQgPiAxICYmIGV2ZW50c1tpbmRleF1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleF1bMV0uc3RhcnQub2Zmc2V0ID4gMSA/IDIgOiAxO1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0ge1xuICAgICAgICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLmVuZFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgZW5kID0ge1xuICAgICAgICAgICAgLi4uZXZlbnRzW2luZGV4XVsxXS5zdGFydFxuICAgICAgICAgIH07XG4gICAgICAgICAgbW92ZVBvaW50KHN0YXJ0LCAtdXNlKTtcbiAgICAgICAgICBtb3ZlUG9pbnQoZW5kLCB1c2UpO1xuICAgICAgICAgIG9wZW5pbmdTZXF1ZW5jZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyBcInN0cm9uZ1NlcXVlbmNlXCIgOiBcImVtcGhhc2lzU2VxdWVuY2VcIixcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgIC4uLmV2ZW50c1tvcGVuXVsxXS5lbmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNsb3NpbmdTZXF1ZW5jZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyBcInN0cm9uZ1NlcXVlbmNlXCIgOiBcImVtcGhhc2lzU2VxdWVuY2VcIixcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgIC4uLmV2ZW50c1tpbmRleF1bMV0uc3RhcnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRleHQgPSB7XG4gICAgICAgICAgICB0eXBlOiB1c2UgPiAxID8gXCJzdHJvbmdUZXh0XCIgOiBcImVtcGhhc2lzVGV4dFwiLFxuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLmVuZFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAuLi5ldmVudHNbaW5kZXhdWzFdLnN0YXJ0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBncm91cCA9IHtcbiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyBcInN0cm9uZ1wiIDogXCJlbXBoYXNpc1wiLFxuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgLi4ub3BlbmluZ1NlcXVlbmNlLnN0YXJ0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgIC4uLmNsb3NpbmdTZXF1ZW5jZS5lbmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGV2ZW50c1tvcGVuXVsxXS5lbmQgPSB7XG4gICAgICAgICAgICAuLi5vcGVuaW5nU2VxdWVuY2Uuc3RhcnRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGV2ZW50c1tpbmRleF1bMV0uc3RhcnQgPSB7XG4gICAgICAgICAgICAuLi5jbG9zaW5nU2VxdWVuY2UuZW5kXG4gICAgICAgICAgfTtcbiAgICAgICAgICBuZXh0RXZlbnRzID0gW107XG5cbiAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbW9yZSBtYXJrZXJzIGluIHRoZSBvcGVuaW5nLCBhZGQgdGhlbSBiZWZvcmUuXG4gICAgICAgICAgaWYgKGV2ZW50c1tvcGVuXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCkge1xuICAgICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1snZW50ZXInLCBldmVudHNbb3Blbl1bMV0sIGNvbnRleHRdLCBbJ2V4aXQnLCBldmVudHNbb3Blbl1bMV0sIGNvbnRleHRdXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gT3BlbmluZy5cbiAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCBbWydlbnRlcicsIGdyb3VwLCBjb250ZXh0XSwgWydlbnRlcicsIG9wZW5pbmdTZXF1ZW5jZSwgY29udGV4dF0sIFsnZXhpdCcsIG9wZW5pbmdTZXF1ZW5jZSwgY29udGV4dF0sIFsnZW50ZXInLCB0ZXh0LCBjb250ZXh0XV0pO1xuXG4gICAgICAgICAgLy8gQWx3YXlzIHBvcHVsYXRlZCBieSBkZWZhdWx0cy5cblxuICAgICAgICAgIC8vIEJldHdlZW4uXG4gICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgcmVzb2x2ZUFsbChjb250ZXh0LnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCwgZXZlbnRzLnNsaWNlKG9wZW4gKyAxLCBpbmRleCksIGNvbnRleHQpKTtcblxuICAgICAgICAgIC8vIENsb3NpbmcuXG4gICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1snZXhpdCcsIHRleHQsIGNvbnRleHRdLCBbJ2VudGVyJywgY2xvc2luZ1NlcXVlbmNlLCBjb250ZXh0XSwgWydleGl0JywgY2xvc2luZ1NlcXVlbmNlLCBjb250ZXh0XSwgWydleGl0JywgZ3JvdXAsIGNvbnRleHRdXSk7XG5cbiAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbW9yZSBtYXJrZXJzIGluIHRoZSBjbG9zaW5nLCBhZGQgdGhlbSBhZnRlci5cbiAgICAgICAgICBpZiAoZXZlbnRzW2luZGV4XVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW2luZGV4XVsxXS5zdGFydC5vZmZzZXQpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IDI7XG4gICAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCBbWydlbnRlcicsIGV2ZW50c1tpbmRleF1bMV0sIGNvbnRleHRdLCBbJ2V4aXQnLCBldmVudHNbaW5kZXhdWzFdLCBjb250ZXh0XV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzcGxpY2UoZXZlbnRzLCBvcGVuIC0gMSwgaW5kZXggLSBvcGVuICsgMywgbmV4dEV2ZW50cyk7XG4gICAgICAgICAgaW5kZXggPSBvcGVuICsgbmV4dEV2ZW50cy5sZW5ndGggLSBvZmZzZXQgLSAyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIHJlbWFpbmluZyBzZXF1ZW5jZXMuXG4gIGluZGV4ID0gLTE7XG4gIHdoaWxlICgrK2luZGV4IDwgZXZlbnRzLmxlbmd0aCkge1xuICAgIGlmIChldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09ICdhdHRlbnRpb25TZXF1ZW5jZScpIHtcbiAgICAgIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9ICdkYXRhJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV2ZW50cztcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVBdHRlbnRpb24oZWZmZWN0cywgb2spIHtcbiAgY29uc3QgYXR0ZW50aW9uTWFya2VycyA9IHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuYXR0ZW50aW9uTWFya2Vycy5udWxsO1xuICBjb25zdCBwcmV2aW91cyA9IHRoaXMucHJldmlvdXM7XG4gIGNvbnN0IGJlZm9yZSA9IGNsYXNzaWZ5Q2hhcmFjdGVyKHByZXZpb3VzKTtcblxuICAvKiogQHR5cGUge05vbk51bGxhYmxlPENvZGU+fSAqL1xuICBsZXQgbWFya2VyO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIEJlZm9yZSBhIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgKipcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBtYXJrZXIgPSBjb2RlO1xuICAgIGVmZmVjdHMuZW50ZXIoJ2F0dGVudGlvblNlcXVlbmNlJyk7XG4gICAgcmV0dXJuIGluc2lkZShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBhIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgKipcbiAgICogICAgIF5eXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBpbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBpbnNpZGU7XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCdhdHRlbnRpb25TZXF1ZW5jZScpO1xuXG4gICAgLy8gVG8gZG86IG5leHQgbWFqb3I6IG1vdmUgdGhpcyB0byByZXNvbHZlciwganVzdCBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgY29uc3QgYWZ0ZXIgPSBjbGFzc2lmeUNoYXJhY3Rlcihjb2RlKTtcblxuICAgIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG5cbiAgICBjb25zdCBvcGVuID0gIWFmdGVyIHx8IGFmdGVyID09PSAyICYmIGJlZm9yZSB8fCBhdHRlbnRpb25NYXJrZXJzLmluY2x1ZGVzKGNvZGUpO1xuICAgIGNvbnN0IGNsb3NlID0gIWJlZm9yZSB8fCBiZWZvcmUgPT09IDIgJiYgYWZ0ZXIgfHwgYXR0ZW50aW9uTWFya2Vycy5pbmNsdWRlcyhwcmV2aW91cyk7XG4gICAgdG9rZW4uX29wZW4gPSBCb29sZWFuKG1hcmtlciA9PT0gNDIgPyBvcGVuIDogb3BlbiAmJiAoYmVmb3JlIHx8ICFjbG9zZSkpO1xuICAgIHRva2VuLl9jbG9zZSA9IEJvb2xlYW4obWFya2VyID09PSA0MiA/IGNsb3NlIDogY2xvc2UgJiYgKGFmdGVyIHx8ICFvcGVuKSk7XG4gICAgcmV0dXJuIG9rKGNvZGUpO1xuICB9XG59XG5cbi8qKlxuICogTW92ZSBhIHBvaW50IGEgYml0LlxuICpcbiAqIE5vdGU6IGBtb3ZlYCBvbmx5IHdvcmtzIGluc2lkZSBsaW5lcyEgSXRcdTIwMTlzIG5vdCBwb3NzaWJsZSB0byBtb3ZlIHBhc3Qgb3RoZXJcbiAqIGNodW5rcyAocmVwbGFjZW1lbnQgY2hhcmFjdGVycywgdGFicywgb3IgbGluZSBlbmRpbmdzKS5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBwb2ludFxuICogICBQb2ludC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqICAgQW1vdW50IHRvIG1vdmUuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogICBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBtb3ZlUG9pbnQocG9pbnQsIG9mZnNldCkge1xuICBwb2ludC5jb2x1bW4gKz0gb2Zmc2V0O1xuICBwb2ludC5vZmZzZXQgKz0gb2Zmc2V0O1xuICBwb2ludC5fYnVmZmVySW5kZXggKz0gb2Zmc2V0O1xufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb25zdHJ1Y3QsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHQsXG4gKiAgIFRva2VuaXplclxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBhc2NpaUFscGhhbnVtZXJpYywgYXNjaWlBbHBoYSwgYXNjaWlBdGV4dCwgYXNjaWlDb250cm9sIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGF1dG9saW5rID0ge1xuICBuYW1lOiAnYXV0b2xpbmsnLFxuICB0b2tlbml6ZTogdG9rZW5pemVBdXRvbGlua1xufTtcblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVBdXRvbGluayhlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGxldCBzaXplID0gMDtcbiAgcmV0dXJuIHN0YXJ0O1xuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBhbiBhdXRvbGluay5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGE8aHR0cHM6Ly9leGFtcGxlLmNvbT5iXG4gICAqICAgICAgXlxuICAgKiA+IHwgYTx1c2VyQGV4YW1wbGUuY29tPmJcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcihcImF1dG9saW5rXCIpO1xuICAgIGVmZmVjdHMuZW50ZXIoXCJhdXRvbGlua01hcmtlclwiKTtcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgZWZmZWN0cy5leGl0KFwiYXV0b2xpbmtNYXJrZXJcIik7XG4gICAgZWZmZWN0cy5lbnRlcihcImF1dG9saW5rUHJvdG9jb2xcIik7XG4gICAgcmV0dXJuIG9wZW47XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDxgLCBhdCBwcm90b2NvbCBvciBhdGV4dC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGE8aHR0cHM6Ly9leGFtcGxlLmNvbT5iXG4gICAqICAgICAgIF5cbiAgICogPiB8IGE8dXNlckBleGFtcGxlLmNvbT5iXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9wZW4oY29kZSkge1xuICAgIGlmIChhc2NpaUFscGhhKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gc2NoZW1lT3JFbWFpbEF0ZXh0O1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gNjQpIHtcbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuICAgIHJldHVybiBlbWFpbEF0ZXh0KGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0IHNlY29uZCBieXRlIG9mIHByb3RvY29sIG9yIGF0ZXh0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTxodHRwczovL2V4YW1wbGUuY29tPmJcbiAgICogICAgICAgIF5cbiAgICogPiB8IGE8dXNlckBleGFtcGxlLmNvbT5iXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzY2hlbWVPckVtYWlsQXRleHQoY29kZSkge1xuICAgIC8vIEFTQ0lJIGFscGhhbnVtZXJpYyBhbmQgYCtgLCBgLWAsIGFuZCBgLmAuXG4gICAgaWYgKGNvZGUgPT09IDQzIHx8IGNvZGUgPT09IDQ1IHx8IGNvZGUgPT09IDQ2IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGUpKSB7XG4gICAgICAvLyBDb3VudCB0aGUgcHJldmlvdXMgYWxwaGFiZXRpY2FsIGZyb20gYG9wZW5gIHRvby5cbiAgICAgIHNpemUgPSAxO1xuICAgICAgcmV0dXJuIHNjaGVtZUluc2lkZU9yRW1haWxBdGV4dChjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGVtYWlsQXRleHQoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gYW1iaWd1b3VzIHByb3RvY29sIG9yIGF0ZXh0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTxodHRwczovL2V4YW1wbGUuY29tPmJcbiAgICogICAgICAgIF5cbiAgICogPiB8IGE8dXNlckBleGFtcGxlLmNvbT5iXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzY2hlbWVJbnNpZGVPckVtYWlsQXRleHQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA1OCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgc2l6ZSA9IDA7XG4gICAgICByZXR1cm4gdXJsSW5zaWRlO1xuICAgIH1cblxuICAgIC8vIEFTQ0lJIGFscGhhbnVtZXJpYyBhbmQgYCtgLCBgLWAsIGFuZCBgLmAuXG4gICAgaWYgKChjb2RlID09PSA0MyB8fCBjb2RlID09PSA0NSB8fCBjb2RlID09PSA0NiB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlKSkgJiYgc2l6ZSsrIDwgMzIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBzY2hlbWVJbnNpZGVPckVtYWlsQXRleHQ7XG4gICAgfVxuICAgIHNpemUgPSAwO1xuICAgIHJldHVybiBlbWFpbEF0ZXh0KGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHByb3RvY29sLCBpbiBVUkwuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhPGh0dHBzOi8vZXhhbXBsZS5jb20+YlxuICAgKiAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB1cmxJbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA2Mikge1xuICAgICAgZWZmZWN0cy5leGl0KFwiYXV0b2xpbmtQcm90b2NvbFwiKTtcbiAgICAgIGVmZmVjdHMuZW50ZXIoXCJhdXRvbGlua01hcmtlclwiKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImF1dG9saW5rTWFya2VyXCIpO1xuICAgICAgZWZmZWN0cy5leGl0KFwiYXV0b2xpbmtcIik7XG4gICAgICByZXR1cm4gb2s7XG4gICAgfVxuXG4gICAgLy8gQVNDSUkgY29udHJvbCwgc3BhY2UsIG9yIGA8YC5cbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSAzMiB8fCBjb2RlID09PSA2MCB8fCBhc2NpaUNvbnRyb2woY29kZSkpIHtcbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICByZXR1cm4gdXJsSW5zaWRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGVtYWlsIGF0ZXh0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTx1c2VyLm5hbWVAZXhhbXBsZS5jb20+YlxuICAgKiAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZW1haWxBdGV4dChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDY0KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gZW1haWxBdFNpZ25PckRvdDtcbiAgICB9XG4gICAgaWYgKGFzY2lpQXRleHQoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBlbWFpbEF0ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGxhYmVsLCBhZnRlciBhdC1zaWduIG9yIGRvdC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGE8dXNlci5uYW1lQGV4YW1wbGUuY29tPmJcbiAgICogICAgICAgICAgICAgICAgIF4gICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZW1haWxBdFNpZ25PckRvdChjb2RlKSB7XG4gICAgcmV0dXJuIGFzY2lpQWxwaGFudW1lcmljKGNvZGUpID8gZW1haWxMYWJlbChjb2RlKSA6IG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBsYWJlbCwgd2hlcmUgYC5gIGFuZCBgPmAgYXJlIGFsbG93ZWQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhPHVzZXIubmFtZUBleGFtcGxlLmNvbT5iXG4gICAqICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVtYWlsTGFiZWwoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0Nikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgc2l6ZSA9IDA7XG4gICAgICByZXR1cm4gZW1haWxBdFNpZ25PckRvdDtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDYyKSB7XG4gICAgICAvLyBFeGl0LCB0aGVuIGNoYW5nZSB0aGUgdG9rZW4gdHlwZS5cbiAgICAgIGVmZmVjdHMuZXhpdChcImF1dG9saW5rUHJvdG9jb2xcIikudHlwZSA9IFwiYXV0b2xpbmtFbWFpbFwiO1xuICAgICAgZWZmZWN0cy5lbnRlcihcImF1dG9saW5rTWFya2VyXCIpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KFwiYXV0b2xpbmtNYXJrZXJcIik7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJhdXRvbGlua1wiKTtcbiAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgcmV0dXJuIGVtYWlsVmFsdWUoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gbGFiZWwsIHdoZXJlIGAuYCBhbmQgYD5gIGFyZSAqbm90KiBhbGxvd2VkLlxuICAgKlxuICAgKiBUaG91Z2gsIHRoaXMgaXMgYWxzbyB1c2VkIGluIGBlbWFpbExhYmVsYCB0byBwYXJzZSBvdGhlciB2YWx1ZXMuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhPHVzZXIubmFtZUBleC1hbXBsZS5jb20+YlxuICAgKiAgICAgICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZW1haWxWYWx1ZShjb2RlKSB7XG4gICAgLy8gQVNDSUkgYWxwaGFudW1lcmljIG9yIGAtYC5cbiAgICBpZiAoKGNvZGUgPT09IDQ1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGUpKSAmJiBzaXplKysgPCA2Mykge1xuICAgICAgY29uc3QgbmV4dCA9IGNvZGUgPT09IDQ1ID8gZW1haWxWYWx1ZSA6IGVtYWlsTGFiZWw7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge0VmZmVjdHMsIFN0YXRlLCBUb2tlblR5cGV9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IG1hcmtkb3duU3BhY2UgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuXG4vLyBUbyBkbzogaW1wbGVtZW50IGBzcGFjZU9yVGFiYCwgYHNwYWNlT3JUYWJNaW5NYXhgLCBgc3BhY2VPclRhYldpdGhPcHRpb25zYC5cblxuLyoqXG4gKiBQYXJzZSBzcGFjZXMgYW5kIHRhYnMuXG4gKlxuICogVGhlcmUgaXMgbm8gYG5va2AgcGFyYW1ldGVyOlxuICpcbiAqICogICBzcGFjZXMgaW4gbWFya2Rvd24gYXJlIG9mdGVuIG9wdGlvbmFsLCBpbiB3aGljaCBjYXNlIHRoaXMgZmFjdG9yeSBjYW4gYmVcbiAqICAgICB1c2VkIGFuZCBgb2tgIHdpbGwgYmUgc3dpdGNoZWQgdG8gd2hldGhlciBzcGFjZXMgd2VyZSBmb3VuZCBvciBub3RcbiAqICogICBvbmUgbGluZSBlbmRpbmcgb3Igc3BhY2UgY2FuIGJlIGRldGVjdGVkIHdpdGggYG1hcmtkb3duU3BhY2UoY29kZSlgIHJpZ2h0XG4gKiAgICAgYmVmb3JlIHVzaW5nIGBmYWN0b3J5U3BhY2VgXG4gKlxuICogIyMjIyMjIEV4YW1wbGVzXG4gKlxuICogV2hlcmUgYFx1MjQwOWAgcmVwcmVzZW50cyBhIHRhYiAocGx1cyBob3cgbXVjaCBpdCBleHBhbmRzKSBhbmQgYFx1MjQyMGAgcmVwcmVzZW50cyBhXG4gKiBzaW5nbGUgc3BhY2UuXG4gKlxuICogYGBgbWFya2Rvd25cbiAqIFx1MjQwOVxuICogXHUyNDIwXHUyNDIwXHUyNDIwXHUyNDIwXG4gKiBcdTI0MDlcdTI0MjBcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7RWZmZWN0c30gZWZmZWN0c1xuICogICBDb250ZXh0LlxuICogQHBhcmFtIHtTdGF0ZX0gb2tcbiAqICAgU3RhdGUgc3dpdGNoZWQgdG8gd2hlbiBzdWNjZXNzZnVsLlxuICogQHBhcmFtIHtUb2tlblR5cGV9IHR5cGVcbiAqICAgVHlwZSAoYCcgXFx0J2ApLlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IFttYXg9SW5maW5pdHldXG4gKiAgIE1heCAoZXhjbHVzaXZlKS5cbiAqIEByZXR1cm5zIHtTdGF0ZX1cbiAqICAgU3RhcnQgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgb2ssIHR5cGUsIG1heCkge1xuICBjb25zdCBsaW1pdCA9IG1heCA/IG1heCAtIDEgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIGxldCBzaXplID0gMDtcbiAgcmV0dXJuIHN0YXJ0O1xuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlKTtcbiAgICAgIHJldHVybiBwcmVmaXgoY29kZSk7XG4gICAgfVxuICAgIHJldHVybiBvayhjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHByZWZpeChjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkgJiYgc2l6ZSsrIDwgbGltaXQpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBwcmVmaXg7XG4gICAgfVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlKTtcbiAgICByZXR1cm4gb2soY29kZSk7XG4gIH1cbn0iLCAiLyoqXG4gKiBAaW1wb3J0IHtcbiAqICAgQ29uc3RydWN0LFxuICogICBTdGF0ZSxcbiAqICAgVG9rZW5pemVDb250ZXh0LFxuICogICBUb2tlbml6ZXJcbiAqIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuaW1wb3J0IHsgZmFjdG9yeVNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnO1xuaW1wb3J0IHsgbWFya2Rvd25MaW5lRW5kaW5nLCBtYXJrZG93blNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGJsYW5rTGluZSA9IHtcbiAgcGFydGlhbDogdHJ1ZSxcbiAgdG9rZW5pemU6IHRva2VuaXplQmxhbmtMaW5lXG59O1xuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUJsYW5rTGluZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiBzdGFydDtcblxuICAvKipcbiAgICogU3RhcnQgb2YgYmxhbmsgbGluZS5cbiAgICpcbiAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IGBcdTI0MjBgIHJlcHJlc2VudHMgYSBzcGFjZSBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBcdTI0MjBcdTI0MjBcdTI0MEFcbiAgICogICAgIF5cbiAgICogPiB8IFx1MjQwQVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGUpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyLCBcImxpbmVQcmVmaXhcIikoY29kZSkgOiBhZnRlcihjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBlb2YvZW9sLCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogYFx1MjQyMGAgcmVwcmVzZW50cyBhIHNwYWNlIGNoYXJhY3Rlci5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFx1MjQyMFx1MjQyMFx1MjQwQVxuICAgKiAgICAgICBeXG4gICAqID4gfCBcdTI0MEFcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkgPyBvayhjb2RlKSA6IG5vayhjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb25zdHJ1Y3QsXG4gKiAgIEV4aXRlcixcbiAqICAgU3RhdGUsXG4gKiAgIFRva2VuaXplQ29udGV4dCxcbiAqICAgVG9rZW5pemVyXG4gKiB9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IGZhY3RvcnlTcGFjZSB9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJztcbmltcG9ydCB7IG1hcmtkb3duU3BhY2UgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgYmxvY2tRdW90ZSA9IHtcbiAgY29udGludWF0aW9uOiB7XG4gICAgdG9rZW5pemU6IHRva2VuaXplQmxvY2tRdW90ZUNvbnRpbnVhdGlvblxuICB9LFxuICBleGl0LFxuICBuYW1lOiAnYmxvY2tRdW90ZScsXG4gIHRva2VuaXplOiB0b2tlbml6ZUJsb2NrUXVvdGVTdGFydFxufTtcblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVCbG9ja1F1b3RlU3RhcnQoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgcmV0dXJuIHN0YXJ0O1xuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBibG9jayBxdW90ZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ID4gYVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA2Mikge1xuICAgICAgY29uc3Qgc3RhdGUgPSBzZWxmLmNvbnRhaW5lclN0YXRlO1xuICAgICAgaWYgKCFzdGF0ZS5vcGVuKSB7XG4gICAgICAgIGVmZmVjdHMuZW50ZXIoXCJibG9ja1F1b3RlXCIsIHtcbiAgICAgICAgICBfY29udGFpbmVyOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBzdGF0ZS5vcGVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVmZmVjdHMuZW50ZXIoXCJibG9ja1F1b3RlUHJlZml4XCIpO1xuICAgICAgZWZmZWN0cy5lbnRlcihcImJsb2NrUXVvdGVNYXJrZXJcIik7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJibG9ja1F1b3RlTWFya2VyXCIpO1xuICAgICAgcmV0dXJuIGFmdGVyO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA+YCwgYmVmb3JlIG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA+IGFcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoXCJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZVwiKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlXCIpO1xuICAgICAgZWZmZWN0cy5leGl0KFwiYmxvY2tRdW90ZVByZWZpeFwiKTtcbiAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgZWZmZWN0cy5leGl0KFwiYmxvY2tRdW90ZVByZWZpeFwiKTtcbiAgICByZXR1cm4gb2soY29kZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBvZiBibG9jayBxdW90ZSBjb250aW51YXRpb24uXG4gKlxuICogYGBgbWFya2Rvd25cbiAqICAgfCA+IGFcbiAqID4gfCA+IGJcbiAqICAgICBeXG4gKiBgYGBcbiAqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVCbG9ja1F1b3RlQ29udGludWF0aW9uKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHJldHVybiBjb250U3RhcnQ7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGJsb2NrIHF1b3RlIGNvbnRpbnVhdGlvbi5cbiAgICpcbiAgICogQWxzbyB1c2VkIHRvIHBhcnNlIHRoZSBmaXJzdCBibG9jayBxdW90ZSBvcGVuaW5nLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgPiBhXG4gICAqID4gfCA+IGJcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRTdGFydChjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG5cbiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgY29udEJlZm9yZSwgXCJsaW5lUHJlZml4XCIsIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCdjb2RlSW5kZW50ZWQnKSA/IHVuZGVmaW5lZCA6IDQpKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29udEJlZm9yZShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBgPmAsIGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIEFsc28gdXNlZCB0byBwYXJzZSB0aGUgZmlyc3QgYmxvY2sgcXVvdGUgb3BlbmluZy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8ID4gYVxuICAgKiA+IHwgPiBiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250QmVmb3JlKGNvZGUpIHtcbiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGJsb2NrUXVvdGUsIG9rLCBub2spKGNvZGUpO1xuICB9XG59XG5cbi8qKiBAdHlwZSB7RXhpdGVyfSAqL1xuZnVuY3Rpb24gZXhpdChlZmZlY3RzKSB7XG4gIGVmZmVjdHMuZXhpdChcImJsb2NrUXVvdGVcIik7XG59IiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIENvbnN0cnVjdCxcbiAqICAgU3RhdGUsXG4gKiAgIFRva2VuaXplQ29udGV4dCxcbiAqICAgVG9rZW5pemVyXG4gKiB9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IGFzY2lpUHVuY3R1YXRpb24gfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgY2hhcmFjdGVyRXNjYXBlID0ge1xuICBuYW1lOiAnY2hhcmFjdGVyRXNjYXBlJyxcbiAgdG9rZW5pemU6IHRva2VuaXplQ2hhcmFjdGVyRXNjYXBlXG59O1xuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUNoYXJhY3RlckVzY2FwZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiBzdGFydDtcblxuICAvKipcbiAgICogU3RhcnQgb2YgY2hhcmFjdGVyIGVzY2FwZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGFcXCpiXG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoXCJjaGFyYWN0ZXJFc2NhcGVcIik7XG4gICAgZWZmZWN0cy5lbnRlcihcImVzY2FwZU1hcmtlclwiKTtcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgZWZmZWN0cy5leGl0KFwiZXNjYXBlTWFya2VyXCIpO1xuICAgIHJldHVybiBpbnNpZGU7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYFxcYCwgYXQgcHVuY3R1YXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhXFwqYlxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBpbnNpZGUoY29kZSkge1xuICAgIC8vIEFTQ0lJIHB1bmN0dWF0aW9uLlxuICAgIGlmIChhc2NpaVB1bmN0dWF0aW9uKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKFwiY2hhcmFjdGVyRXNjYXBlVmFsdWVcIik7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZVwiKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImNoYXJhY3RlckVzY2FwZVwiKTtcbiAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb2RlLFxuICogICBDb25zdHJ1Y3QsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHQsXG4gKiAgIFRva2VuaXplclxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZSB9IGZyb20gJ2RlY29kZS1uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlJztcbmltcG9ydCB7IGFzY2lpQWxwaGFudW1lcmljLCBhc2NpaURpZ2l0LCBhc2NpaUhleERpZ2l0IH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGNoYXJhY3RlclJlZmVyZW5jZSA9IHtcbiAgbmFtZTogJ2NoYXJhY3RlclJlZmVyZW5jZScsXG4gIHRva2VuaXplOiB0b2tlbml6ZUNoYXJhY3RlclJlZmVyZW5jZVxufTtcblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVDaGFyYWN0ZXJSZWZlcmVuY2UoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgbGV0IHNpemUgPSAwO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IG1heDtcbiAgLyoqIEB0eXBlIHsoY29kZTogQ29kZSkgPT4gYm9vbGVhbn0gKi9cbiAgbGV0IHRlc3Q7XG4gIHJldHVybiBzdGFydDtcblxuICAvKipcbiAgICogU3RhcnQgb2YgY2hhcmFjdGVyIHJlZmVyZW5jZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEmYW1wO2JcbiAgICogICAgICBeXG4gICAqID4gfCBhJiMxMjM7YlxuICAgKiAgICAgIF5cbiAgICogPiB8IGEmI3g5O2JcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcihcImNoYXJhY3RlclJlZmVyZW5jZVwiKTtcbiAgICBlZmZlY3RzLmVudGVyKFwiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyXCIpO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICBlZmZlY3RzLmV4aXQoXCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJcIik7XG4gICAgcmV0dXJuIG9wZW47XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYCZgLCBhdCBgI2AgZm9yIG51bWVyaWMgcmVmZXJlbmNlcyBvciBhbHBoYW51bWVyaWMgZm9yIG5hbWVkXG4gICAqIHJlZmVyZW5jZXMuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhJmFtcDtiXG4gICAqICAgICAgIF5cbiAgICogPiB8IGEmIzEyMztiXG4gICAqICAgICAgIF5cbiAgICogPiB8IGEmI3g5O2JcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gb3Blbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDM1KSB7XG4gICAgICBlZmZlY3RzLmVudGVyKFwiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpY1wiKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWNcIik7XG4gICAgICByZXR1cm4gbnVtZXJpYztcbiAgICB9XG4gICAgZWZmZWN0cy5lbnRlcihcImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlXCIpO1xuICAgIG1heCA9IDMxO1xuICAgIHRlc3QgPSBhc2NpaUFscGhhbnVtZXJpYztcbiAgICByZXR1cm4gdmFsdWUoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYCNgLCBhdCBgeGAgZm9yIGhleGFkZWNpbWFscyBvciBkaWdpdCBmb3IgZGVjaW1hbHMuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhJiMxMjM7YlxuICAgKiAgICAgICAgXlxuICAgKiA+IHwgYSYjeDk7YlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbnVtZXJpYyhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDg4IHx8IGNvZGUgPT09IDEyMCkge1xuICAgICAgZWZmZWN0cy5lbnRlcihcImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsXCIpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KFwiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWxcIik7XG4gICAgICBlZmZlY3RzLmVudGVyKFwiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWVcIik7XG4gICAgICBtYXggPSA2O1xuICAgICAgdGVzdCA9IGFzY2lpSGV4RGlnaXQ7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGVmZmVjdHMuZW50ZXIoXCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZVwiKTtcbiAgICBtYXggPSA3O1xuICAgIHRlc3QgPSBhc2NpaURpZ2l0O1xuICAgIHJldHVybiB2YWx1ZShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBtYXJrZXJzIChgJiN4YCwgYCYjYCwgb3IgYCZgKSwgaW4gdmFsdWUsIGJlZm9yZSBgO2AuXG4gICAqXG4gICAqIFRoZSBjaGFyYWN0ZXIgcmVmZXJlbmNlIGtpbmQgZGVmaW5lcyB3aGF0IGFuZCBob3cgbWFueSBjaGFyYWN0ZXJzIGFyZVxuICAgKiBhbGxvd2VkLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSZhbXA7YlxuICAgKiAgICAgICBeXl5cbiAgICogPiB8IGEmIzEyMztiXG4gICAqICAgICAgICBeXl5cbiAgICogPiB8IGEmI3g5O2JcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB2YWx1ZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDU5ICYmIHNpemUpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KFwiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWVcIik7XG4gICAgICBpZiAodGVzdCA9PT0gYXNjaWlBbHBoYW51bWVyaWMgJiYgIWRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKHNlbGYuc2xpY2VTZXJpYWxpemUodG9rZW4pKSkge1xuICAgICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBUbyBkbzogYG1hcmtkb3duLXJzYCB1c2VzIGEgZGlmZmVyZW50IG5hbWU6XG4gICAgICAvLyBgQ2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyU2VtaWAuXG4gICAgICBlZmZlY3RzLmVudGVyKFwiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyXCIpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KFwiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyXCIpO1xuICAgICAgZWZmZWN0cy5leGl0KFwiY2hhcmFjdGVyUmVmZXJlbmNlXCIpO1xuICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBpZiAodGVzdChjb2RlKSAmJiBzaXplKysgPCBtYXgpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb2RlLFxuICogICBDb25zdHJ1Y3QsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHQsXG4gKiAgIFRva2VuaXplclxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBmYWN0b3J5U3BhY2UgfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSc7XG5pbXBvcnQgeyBtYXJrZG93bkxpbmVFbmRpbmcsIG1hcmtkb3duU3BhY2UgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCBub25MYXp5Q29udGludWF0aW9uID0ge1xuICBwYXJ0aWFsOiB0cnVlLFxuICB0b2tlbml6ZTogdG9rZW5pemVOb25MYXp5Q29udGludWF0aW9uXG59O1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBjb2RlRmVuY2VkID0ge1xuICBjb25jcmV0ZTogdHJ1ZSxcbiAgbmFtZTogJ2NvZGVGZW5jZWQnLFxuICB0b2tlbml6ZTogdG9rZW5pemVDb2RlRmVuY2VkXG59O1xuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUNvZGVGZW5jZWQoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG4gIGNvbnN0IGNsb3NlU3RhcnQgPSB7XG4gICAgcGFydGlhbDogdHJ1ZSxcbiAgICB0b2tlbml6ZTogdG9rZW5pemVDbG9zZVN0YXJ0XG4gIH07XG4gIGxldCBpbml0aWFsUHJlZml4ID0gMDtcbiAgbGV0IHNpemVPcGVuID0gMDtcbiAgLyoqIEB0eXBlIHtOb25OdWxsYWJsZTxDb2RlPn0gKi9cbiAgbGV0IG1hcmtlcjtcbiAgcmV0dXJuIHN0YXJ0O1xuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBjb2RlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anNcbiAgICogICAgIF5cbiAgICogICB8IGFsZXJ0KDEpXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAvLyBUbyBkbzogcGFyc2Ugd2hpdGVzcGFjZSBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgcmV0dXJuIGJlZm9yZVNlcXVlbmNlT3Blbihjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIGZlbmNlLCBhZnRlciBwcmVmaXgsIGF0IHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anNcbiAgICogICAgIF5cbiAgICogICB8IGFsZXJ0KDEpXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGJlZm9yZVNlcXVlbmNlT3Blbihjb2RlKSB7XG4gICAgY29uc3QgdGFpbCA9IHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdO1xuICAgIGluaXRpYWxQcmVmaXggPSB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gXCJsaW5lUHJlZml4XCIgPyB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA6IDA7XG4gICAgbWFya2VyID0gY29kZTtcbiAgICBlZmZlY3RzLmVudGVyKFwiY29kZUZlbmNlZFwiKTtcbiAgICBlZmZlY3RzLmVudGVyKFwiY29kZUZlbmNlZEZlbmNlXCIpO1xuICAgIGVmZmVjdHMuZW50ZXIoXCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZVwiKTtcbiAgICByZXR1cm4gc2VxdWVuY2VPcGVuKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIG9wZW5pbmcgZmVuY2Ugc2VxdWVuY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCB+fn5qc1xuICAgKiAgICAgIF5cbiAgICogICB8IGFsZXJ0KDEpXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHNlcXVlbmNlT3Blbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgc2l6ZU9wZW4rKztcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBzZXF1ZW5jZU9wZW47XG4gICAgfVxuICAgIGlmIChzaXplT3BlbiA8IDMpIHtcbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuZXhpdChcImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlXCIpO1xuICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGUpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGluZm9CZWZvcmUsIFwid2hpdGVzcGFjZVwiKShjb2RlKSA6IGluZm9CZWZvcmUoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gb3BlbmluZyBmZW5jZSwgYWZ0ZXIgdGhlIHNlcXVlbmNlIChhbmQgb3B0aW9uYWwgd2hpdGVzcGFjZSksIGJlZm9yZSBpbmZvLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anNcbiAgICogICAgICAgIF5cbiAgICogICB8IGFsZXJ0KDEpXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGluZm9CZWZvcmUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KFwiY29kZUZlbmNlZEZlbmNlXCIpO1xuICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ID8gb2soY29kZSkgOiBlZmZlY3RzLmNoZWNrKG5vbkxhenlDb250aW51YXRpb24sIGF0Tm9uTGF6eUJyZWFrLCBhZnRlcikoY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuZW50ZXIoXCJjb2RlRmVuY2VkRmVuY2VJbmZvXCIpO1xuICAgIGVmZmVjdHMuZW50ZXIoXCJjaHVua1N0cmluZ1wiLCB7XG4gICAgICBjb250ZW50VHlwZTogXCJzdHJpbmdcIlxuICAgIH0pO1xuICAgIHJldHVybiBpbmZvKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGluZm8uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCB+fn5qc1xuICAgKiAgICAgICAgXlxuICAgKiAgIHwgYWxlcnQoMSlcbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaW5mbyhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJjaHVua1N0cmluZ1wiKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImNvZGVGZW5jZWRGZW5jZUluZm9cIik7XG4gICAgICByZXR1cm4gaW5mb0JlZm9yZShjb2RlKTtcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdChcImNodW5rU3RyaW5nXCIpO1xuICAgICAgZWZmZWN0cy5leGl0KFwiY29kZUZlbmNlZEZlbmNlSW5mb1wiKTtcbiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgbWV0YUJlZm9yZSwgXCJ3aGl0ZXNwYWNlXCIpKGNvZGUpO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gOTYgJiYgY29kZSA9PT0gbWFya2VyKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIGluZm87XG4gIH1cblxuICAvKipcbiAgICogSW4gb3BlbmluZyBmZW5jZSwgYWZ0ZXIgaW5mbyBhbmQgd2hpdGVzcGFjZSwgYmVmb3JlIG1ldGEuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCB+fn5qcyBldmFsXG4gICAqICAgICAgICAgICBeXG4gICAqICAgfCBhbGVydCgxKVxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBtZXRhQmVmb3JlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBpbmZvQmVmb3JlKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKFwiY29kZUZlbmNlZEZlbmNlTWV0YVwiKTtcbiAgICBlZmZlY3RzLmVudGVyKFwiY2h1bmtTdHJpbmdcIiwge1xuICAgICAgY29udGVudFR5cGU6IFwic3RyaW5nXCJcbiAgICB9KTtcbiAgICByZXR1cm4gbWV0YShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBtZXRhLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anMgZXZhbFxuICAgKiAgICAgICAgICAgXlxuICAgKiAgIHwgYWxlcnQoMSlcbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbWV0YShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJjaHVua1N0cmluZ1wiKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImNvZGVGZW5jZWRGZW5jZU1ldGFcIik7XG4gICAgICByZXR1cm4gaW5mb0JlZm9yZShjb2RlKTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDk2ICYmIGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0IGVvbC9lb2YgaW4gY29kZSwgYmVmb3JlIGEgbm9uLWxhenkgY2xvc2luZyBmZW5jZSBvciBjb250ZW50LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anNcbiAgICogICAgICAgICAgXlxuICAgKiA+IHwgYWxlcnQoMSlcbiAgICogICAgICAgICAgICAgXlxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhdE5vbkxhenlCcmVhayhjb2RlKSB7XG4gICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChjbG9zZVN0YXJ0LCBhZnRlciwgY29udGVudEJlZm9yZSkoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQmVmb3JlIGNvZGUgY29udGVudCwgbm90IGEgY2xvc2luZyBmZW5jZSwgYXQgZW9sLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgfn5+anNcbiAgICogPiB8IGFsZXJ0KDEpXG4gICAqICAgICAgICAgICAgIF5cbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGVudEJlZm9yZShjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcihcImxpbmVFbmRpbmdcIik7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIGVmZmVjdHMuZXhpdChcImxpbmVFbmRpbmdcIik7XG4gICAgcmV0dXJuIGNvbnRlbnRTdGFydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWZvcmUgY29kZSBjb250ZW50LCBub3QgYSBjbG9zaW5nIGZlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgfn5+anNcbiAgICogPiB8IGFsZXJ0KDEpXG4gICAqICAgICBeXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRlbnRTdGFydChjb2RlKSB7XG4gICAgcmV0dXJuIGluaXRpYWxQcmVmaXggPiAwICYmIG1hcmtkb3duU3BhY2UoY29kZSkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYmVmb3JlQ29udGVudENodW5rLCBcImxpbmVQcmVmaXhcIiwgaW5pdGlhbFByZWZpeCArIDEpKGNvZGUpIDogYmVmb3JlQ29udGVudENodW5rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZm9yZSBjb2RlIGNvbnRlbnQsIGFmdGVyIG9wdGlvbmFsIHByZWZpeC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IH5+fmpzXG4gICAqID4gfCBhbGVydCgxKVxuICAgKiAgICAgXlxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBiZWZvcmVDb250ZW50Q2h1bmsoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sobm9uTGF6eUNvbnRpbnVhdGlvbiwgYXROb25MYXp5QnJlYWssIGFmdGVyKShjb2RlKTtcbiAgICB9XG4gICAgZWZmZWN0cy5lbnRlcihcImNvZGVGbG93VmFsdWVcIik7XG4gICAgcmV0dXJuIGNvbnRlbnRDaHVuayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjb2RlIGNvbnRlbnQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCB+fn5qc1xuICAgKiA+IHwgYWxlcnQoMSlcbiAgICogICAgIF5eXl5eXl5eXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRlbnRDaHVuayhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJjb2RlRmxvd1ZhbHVlXCIpO1xuICAgICAgcmV0dXJuIGJlZm9yZUNvbnRlbnRDaHVuayhjb2RlKTtcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIHJldHVybiBjb250ZW50Q2h1bms7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgY29kZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IH5+fmpzXG4gICAqICAgfCBhbGVydCgxKVxuICAgKiA+IHwgfn5+XG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgZWZmZWN0cy5leGl0KFwiY29kZUZlbmNlZFwiKTtcbiAgICByZXR1cm4gb2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAgICogICBDb250ZXh0LlxuICAgKiBAdHlwZSB7VG9rZW5pemVyfVxuICAgKi9cbiAgZnVuY3Rpb24gdG9rZW5pemVDbG9zZVN0YXJ0KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgICBsZXQgc2l6ZSA9IDA7XG4gICAgcmV0dXJuIHN0YXJ0QmVmb3JlO1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKlxuICAgICAqIEB0eXBlIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFydEJlZm9yZShjb2RlKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKFwibGluZUVuZGluZ1wiKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImxpbmVFbmRpbmdcIik7XG4gICAgICByZXR1cm4gc3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmVmb3JlIGNsb3NpbmcgZmVuY2UsIGF0IG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAgICpcbiAgICAgKiBgYGBtYXJrZG93blxuICAgICAqICAgfCB+fn5qc1xuICAgICAqICAgfCBhbGVydCgxKVxuICAgICAqID4gfCB+fn5cbiAgICAgKiAgICAgXlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAgIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG5cbiAgICAgIC8vIFRvIGRvOiBgZW50ZXJgIGhlcmUgb3IgaW4gbmV4dCBzdGF0ZT9cbiAgICAgIGVmZmVjdHMuZW50ZXIoXCJjb2RlRmVuY2VkRmVuY2VcIik7XG4gICAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlKSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBiZWZvcmVTZXF1ZW5jZUNsb3NlLCBcImxpbmVQcmVmaXhcIiwgc2VsZi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoJ2NvZGVJbmRlbnRlZCcpID8gdW5kZWZpbmVkIDogNCkoY29kZSkgOiBiZWZvcmVTZXF1ZW5jZUNsb3NlKGNvZGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluIGNsb3NpbmcgZmVuY2UsIGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UsIGF0IHNlcXVlbmNlLlxuICAgICAqXG4gICAgICogYGBgbWFya2Rvd25cbiAgICAgKiAgIHwgfn5+anNcbiAgICAgKiAgIHwgYWxlcnQoMSlcbiAgICAgKiA+IHwgfn5+XG4gICAgICogICAgIF5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEB0eXBlIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiZWZvcmVTZXF1ZW5jZUNsb3NlKGNvZGUpIHtcbiAgICAgIGlmIChjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgICAgZWZmZWN0cy5lbnRlcihcImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlXCIpO1xuICAgICAgICByZXR1cm4gc2VxdWVuY2VDbG9zZShjb2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW4gY2xvc2luZyBmZW5jZSBzZXF1ZW5jZS5cbiAgICAgKlxuICAgICAqIGBgYG1hcmtkb3duXG4gICAgICogICB8IH5+fmpzXG4gICAgICogICB8IGFsZXJ0KDEpXG4gICAgICogPiB8IH5+flxuICAgICAqICAgICBeXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U3RhdGV9XG4gICAgICovXG4gICAgZnVuY3Rpb24gc2VxdWVuY2VDbG9zZShjb2RlKSB7XG4gICAgICBpZiAoY29kZSA9PT0gbWFya2VyKSB7XG4gICAgICAgIHNpemUrKztcbiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgICByZXR1cm4gc2VxdWVuY2VDbG9zZTtcbiAgICAgIH1cbiAgICAgIGlmIChzaXplID49IHNpemVPcGVuKSB7XG4gICAgICAgIGVmZmVjdHMuZXhpdChcImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlXCIpO1xuICAgICAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlKSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBzZXF1ZW5jZUNsb3NlQWZ0ZXIsIFwid2hpdGVzcGFjZVwiKShjb2RlKSA6IHNlcXVlbmNlQ2xvc2VBZnRlcihjb2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWZ0ZXIgY2xvc2luZyBmZW5jZSBzZXF1ZW5jZSwgYWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZS5cbiAgICAgKlxuICAgICAqIGBgYG1hcmtkb3duXG4gICAgICogICB8IH5+fmpzXG4gICAgICogICB8IGFsZXJ0KDEpXG4gICAgICogPiB8IH5+flxuICAgICAqICAgICAgICBeXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U3RhdGV9XG4gICAgICovXG4gICAgZnVuY3Rpb24gc2VxdWVuY2VDbG9zZUFmdGVyKGNvZGUpIHtcbiAgICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgICBlZmZlY3RzLmV4aXQoXCJjb2RlRmVuY2VkRmVuY2VcIik7XG4gICAgICAgIHJldHVybiBvayhjb2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqICAgQ29udGV4dC5cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplTm9uTGF6eUNvbnRpbnVhdGlvbihlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG4gICAgZWZmZWN0cy5lbnRlcihcImxpbmVFbmRpbmdcIik7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIGVmZmVjdHMuZXhpdChcImxpbmVFbmRpbmdcIik7XG4gICAgcmV0dXJuIGxpbmVTdGFydDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsaW5lU3RhcnQoY29kZSkge1xuICAgIHJldHVybiBzZWxmLnBhcnNlci5sYXp5W3NlbGYubm93KCkubGluZV0gPyBub2soY29kZSkgOiBvayhjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb25zdHJ1Y3QsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHQsXG4gKiAgIFRva2VuaXplclxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBmYWN0b3J5U3BhY2UgfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSc7XG5pbXBvcnQgeyBtYXJrZG93bkxpbmVFbmRpbmcsIG1hcmtkb3duU3BhY2UgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgY29kZUluZGVudGVkID0ge1xuICBuYW1lOiAnY29kZUluZGVudGVkJyxcbiAgdG9rZW5pemU6IHRva2VuaXplQ29kZUluZGVudGVkXG59O1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IGZ1cnRoZXJTdGFydCA9IHtcbiAgcGFydGlhbDogdHJ1ZSxcbiAgdG9rZW5pemU6IHRva2VuaXplRnVydGhlclN0YXJ0XG59O1xuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUNvZGVJbmRlbnRlZChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGNvZGUgKGluZGVudGVkKS5cbiAgICpcbiAgICogPiAqKlBhcnNpbmcgbm90ZSoqOiBpdCBpcyBub3QgbmVlZGVkIHRvIGNoZWNrIGlmIHRoaXMgZmlyc3QgbGluZSBpcyBhXG4gICAqID4gZmlsbGVkIGxpbmUgKHRoYXQgaXQgaGFzIGEgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyKSwgYmVjYXVzZSBibGFuayBsaW5lc1xuICAgKiA+IGFyZSBwYXJzZWQgYWxyZWFkeSwgc28gd2UgbmV2ZXIgcnVuIGludG8gdGhhdC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICAgICBhYWFcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAvLyBUbyBkbzogbWFudWFsbHkgY2hlY2sgaWYgaW50ZXJydXB0aW5nIGxpa2UgYG1hcmtkb3duLXJzYC5cblxuICAgIGVmZmVjdHMuZW50ZXIoXCJjb2RlSW5kZW50ZWRcIik7XG4gICAgLy8gVG8gZG86IHVzZSBhbiBpbXByb3ZlZCBgc3BhY2Vfb3JfdGFiYCBmdW5jdGlvbiBsaWtlIGBtYXJrZG93bi1yc2AsXG4gICAgLy8gc28gdGhhdCB3ZSBjYW4gZHJvcCB0aGUgbmV4dCBzdGF0ZS5cbiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyUHJlZml4LCBcImxpbmVQcmVmaXhcIiwgNCArIDEpKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0IHN0YXJ0LCBhZnRlciAxIG9yIDQgc3BhY2VzLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgICAgIGFhYVxuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGUpIHtcbiAgICBjb25zdCB0YWlsID0gc2VsZi5ldmVudHNbc2VsZi5ldmVudHMubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSBcImxpbmVQcmVmaXhcIiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA+PSA0ID8gYXRCcmVhayhjb2RlKSA6IG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBhIGJyZWFrLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgICAgIGFhYVxuICAgKiAgICAgICAgIF4gIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGF0QnJlYWsoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gYWZ0ZXIoY29kZSk7XG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoZnVydGhlclN0YXJ0LCBhdEJyZWFrLCBhZnRlcikoY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuZW50ZXIoXCJjb2RlRmxvd1ZhbHVlXCIpO1xuICAgIHJldHVybiBpbnNpZGUoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gY29kZSBjb250ZW50LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgICAgIGFhYVxuICAgKiAgICAgICAgIF5eXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGluc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJjb2RlRmxvd1ZhbHVlXCIpO1xuICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICByZXR1cm4gaW5zaWRlO1xuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gYWZ0ZXIoY29kZSkge1xuICAgIGVmZmVjdHMuZXhpdChcImNvZGVJbmRlbnRlZFwiKTtcbiAgICAvLyBUbyBkbzogYWxsb3cgaW50ZXJydXB0aW5nIGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgICAvLyBGZWVsIGZyZWUgdG8gaW50ZXJydXB0LlxuICAgIC8vIHRva2VuaXplci5pbnRlcnJ1cHQgPSBmYWxzZVxuICAgIHJldHVybiBvayhjb2RlKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUZ1cnRoZXJTdGFydChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICByZXR1cm4gZnVydGhlclN0YXJ0O1xuXG4gIC8qKlxuICAgKiBBdCBlb2wsIHRyeWluZyB0byBwYXJzZSBhbm90aGVyIGluZGVudC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICAgICBhYWFcbiAgICogICAgICAgICAgICBeXG4gICAqICAgfCAgICAgYmJiXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBmdXJ0aGVyU3RhcnQoY29kZSkge1xuICAgIC8vIFRvIGRvOiBpbXByb3ZlIGBsYXp5YCAvIGBwaWVyY2VgIGhhbmRsaW5nLlxuICAgIC8vIElmIHRoaXMgaXMgYSBsYXp5IGxpbmUsIGl0IGNhblx1MjAxOXQgYmUgY29kZS5cbiAgICBpZiAoc2VsZi5wYXJzZXIubGF6eVtzZWxmLm5vdygpLmxpbmVdKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKFwibGluZUVuZGluZ1wiKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImxpbmVFbmRpbmdcIik7XG4gICAgICByZXR1cm4gZnVydGhlclN0YXJ0O1xuICAgIH1cblxuICAgIC8vIFRvIGRvOiB0aGUgY29kZSBoZXJlIGluIGBtaWNyb21hcmstanNgIGlzIGEgYml0IGRpZmZlcmVudCBmcm9tXG4gICAgLy8gYG1hcmtkb3duLXJzYCBiZWNhdXNlIHRoZXJlIGl0IGNhbiBhdHRlbXB0IHNwYWNlcy5cbiAgICAvLyBXZSBjYW5cdTIwMTl0IHlldC5cbiAgICAvL1xuICAgIC8vIFRvIGRvOiB1c2UgYW4gaW1wcm92ZWQgYHNwYWNlX29yX3RhYmAgZnVuY3Rpb24gbGlrZSBgbWFya2Rvd24tcnNgLFxuICAgIC8vIHNvIHRoYXQgd2UgY2FuIGRyb3AgdGhlIG5leHQgc3RhdGUuXG4gICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgXCJsaW5lUHJlZml4XCIsIDQgKyAxKShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBzdGFydCwgYWZ0ZXIgMSBvciA0IHNwYWNlcy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICAgICBhYWFcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlKSB7XG4gICAgY29uc3QgdGFpbCA9IHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gXCJsaW5lUHJlZml4XCIgJiYgdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggPj0gNCA/IG9rKGNvZGUpIDogbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpID8gZnVydGhlclN0YXJ0KGNvZGUpIDogbm9rKGNvZGUpO1xuICB9XG59IiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIENvbnN0cnVjdCxcbiAqICAgUHJldmlvdXMsXG4gKiAgIFJlc29sdmVyLFxuICogICBTdGF0ZSxcbiAqICAgVG9rZW5pemVDb250ZXh0LFxuICogICBUb2tlbml6ZXIsXG4gKiAgIFRva2VuXG4gKiB9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IG1hcmtkb3duTGluZUVuZGluZyB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcic7XG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBjb2RlVGV4dCA9IHtcbiAgbmFtZTogJ2NvZGVUZXh0JyxcbiAgcHJldmlvdXMsXG4gIHJlc29sdmU6IHJlc29sdmVDb2RlVGV4dCxcbiAgdG9rZW5pemU6IHRva2VuaXplQ29kZVRleHRcbn07XG5cbi8vIFRvIGRvOiBuZXh0IG1ham9yOiBkb25cdTIwMTl0IHJlc29sdmUsIGxpa2UgYG1hcmtkb3duLXJzYC5cbi8qKiBAdHlwZSB7UmVzb2x2ZXJ9ICovXG5mdW5jdGlvbiByZXNvbHZlQ29kZVRleHQoZXZlbnRzKSB7XG4gIGxldCB0YWlsRXhpdEluZGV4ID0gZXZlbnRzLmxlbmd0aCAtIDQ7XG4gIGxldCBoZWFkRW50ZXJJbmRleCA9IDM7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBsZXQgaW5kZXg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgZW50ZXI7XG5cbiAgLy8gSWYgd2Ugc3RhcnQgYW5kIGVuZCB3aXRoIGFuIEVPTCBvciBhIHNwYWNlLlxuICBpZiAoKGV2ZW50c1toZWFkRW50ZXJJbmRleF1bMV0udHlwZSA9PT0gXCJsaW5lRW5kaW5nXCIgfHwgZXZlbnRzW2hlYWRFbnRlckluZGV4XVsxXS50eXBlID09PSAnc3BhY2UnKSAmJiAoZXZlbnRzW3RhaWxFeGl0SW5kZXhdWzFdLnR5cGUgPT09IFwibGluZUVuZGluZ1wiIHx8IGV2ZW50c1t0YWlsRXhpdEluZGV4XVsxXS50eXBlID09PSAnc3BhY2UnKSkge1xuICAgIGluZGV4ID0gaGVhZEVudGVySW5kZXg7XG5cbiAgICAvLyBBbmQgd2UgaGF2ZSBkYXRhLlxuICAgIHdoaWxlICgrK2luZGV4IDwgdGFpbEV4aXRJbmRleCkge1xuICAgICAgaWYgKGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gXCJjb2RlVGV4dERhdGFcIikge1xuICAgICAgICAvLyBUaGVuIHdlIGhhdmUgcGFkZGluZy5cbiAgICAgICAgZXZlbnRzW2hlYWRFbnRlckluZGV4XVsxXS50eXBlID0gXCJjb2RlVGV4dFBhZGRpbmdcIjtcbiAgICAgICAgZXZlbnRzW3RhaWxFeGl0SW5kZXhdWzFdLnR5cGUgPSBcImNvZGVUZXh0UGFkZGluZ1wiO1xuICAgICAgICBoZWFkRW50ZXJJbmRleCArPSAyO1xuICAgICAgICB0YWlsRXhpdEluZGV4IC09IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1lcmdlIGFkamFjZW50IHNwYWNlcyBhbmQgZGF0YS5cbiAgaW5kZXggPSBoZWFkRW50ZXJJbmRleCAtIDE7XG4gIHRhaWxFeGl0SW5kZXgrKztcbiAgd2hpbGUgKCsraW5kZXggPD0gdGFpbEV4aXRJbmRleCkge1xuICAgIGlmIChlbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaW5kZXggIT09IHRhaWxFeGl0SW5kZXggJiYgZXZlbnRzW2luZGV4XVsxXS50eXBlICE9PSBcImxpbmVFbmRpbmdcIikge1xuICAgICAgICBlbnRlciA9IGluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IHRhaWxFeGl0SW5kZXggfHwgZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSBcImxpbmVFbmRpbmdcIikge1xuICAgICAgZXZlbnRzW2VudGVyXVsxXS50eXBlID0gXCJjb2RlVGV4dERhdGFcIjtcbiAgICAgIGlmIChpbmRleCAhPT0gZW50ZXIgKyAyKSB7XG4gICAgICAgIGV2ZW50c1tlbnRlcl1bMV0uZW5kID0gZXZlbnRzW2luZGV4IC0gMV1bMV0uZW5kO1xuICAgICAgICBldmVudHMuc3BsaWNlKGVudGVyICsgMiwgaW5kZXggLSBlbnRlciAtIDIpO1xuICAgICAgICB0YWlsRXhpdEluZGV4IC09IGluZGV4IC0gZW50ZXIgLSAyO1xuICAgICAgICBpbmRleCA9IGVudGVyICsgMjtcbiAgICAgIH1cbiAgICAgIGVudGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZXZlbnRzO1xufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7UHJldmlvdXN9XG4gKi9cbmZ1bmN0aW9uIHByZXZpb3VzKGNvZGUpIHtcbiAgLy8gSWYgdGhlcmUgaXMgYSBwcmV2aW91cyBjb2RlLCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhIHRhaWwuXG4gIHJldHVybiBjb2RlICE9PSA5NiB8fCB0aGlzLmV2ZW50c1t0aGlzLmV2ZW50cy5sZW5ndGggLSAxXVsxXS50eXBlID09PSBcImNoYXJhY3RlckVzY2FwZVwiO1xufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUNvZGVUZXh0KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGxldCBzaXplT3BlbiA9IDA7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBsZXQgc2l6ZTtcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IHRva2VuO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGNvZGUgKHRleHQpLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYGFgXG4gICAqICAgICBeXG4gICAqID4gfCBcXGBhYFxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKFwiY29kZVRleHRcIik7XG4gICAgZWZmZWN0cy5lbnRlcihcImNvZGVUZXh0U2VxdWVuY2VcIik7XG4gICAgcmV0dXJuIHNlcXVlbmNlT3Blbihjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYGFgXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzZXF1ZW5jZU9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSA5Nikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgc2l6ZU9wZW4rKztcbiAgICAgIHJldHVybiBzZXF1ZW5jZU9wZW47XG4gICAgfVxuICAgIGVmZmVjdHMuZXhpdChcImNvZGVUZXh0U2VxdWVuY2VcIik7XG4gICAgcmV0dXJuIGJldHdlZW4oY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQmV0d2VlbiBzb21ldGhpbmcgYW5kIHNvbWV0aGluZyBlbHNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYGFgXG4gICAqICAgICAgXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGJldHdlZW4oY29kZSkge1xuICAgIC8vIEVPRi5cbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG5cbiAgICAvLyBUbyBkbzogbmV4dCBtYWpvcjogZG9uXHUyMDE5dCBkbyBzcGFjZXMgaW4gcmVzb2x2ZSwgYnV0IHdoZW4gY29tcGlsaW5nLFxuICAgIC8vIGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgICAvLyBUYWJzIGRvblx1MjAxOXQgd29yaywgYW5kIHZpcnR1YWwgc3BhY2VzIGRvblx1MjAxOXQgbWFrZSBzZW5zZS5cbiAgICBpZiAoY29kZSA9PT0gMzIpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ3NwYWNlJyk7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoJ3NwYWNlJyk7XG4gICAgICByZXR1cm4gYmV0d2VlbjtcbiAgICB9XG5cbiAgICAvLyBDbG9zaW5nIGZlbmNlPyBDb3VsZCBhbHNvIGJlIGRhdGEuXG4gICAgaWYgKGNvZGUgPT09IDk2KSB7XG4gICAgICB0b2tlbiA9IGVmZmVjdHMuZW50ZXIoXCJjb2RlVGV4dFNlcXVlbmNlXCIpO1xuICAgICAgc2l6ZSA9IDA7XG4gICAgICByZXR1cm4gc2VxdWVuY2VDbG9zZShjb2RlKTtcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcihcImxpbmVFbmRpbmdcIik7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJsaW5lRW5kaW5nXCIpO1xuICAgICAgcmV0dXJuIGJldHdlZW47XG4gICAgfVxuXG4gICAgLy8gRGF0YS5cbiAgICBlZmZlY3RzLmVudGVyKFwiY29kZVRleHREYXRhXCIpO1xuICAgIHJldHVybiBkYXRhKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGRhdGEuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBgYWBcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBkYXRhKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSAzMiB8fCBjb2RlID09PSA5NiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdChcImNvZGVUZXh0RGF0YVwiKTtcbiAgICAgIHJldHVybiBiZXR3ZWVuKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogSW4gY2xvc2luZyBzZXF1ZW5jZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGBhYFxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzZXF1ZW5jZUNsb3NlKGNvZGUpIHtcbiAgICAvLyBNb3JlLlxuICAgIGlmIChjb2RlID09PSA5Nikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgc2l6ZSsrO1xuICAgICAgcmV0dXJuIHNlcXVlbmNlQ2xvc2U7XG4gICAgfVxuXG4gICAgLy8gRG9uZSFcbiAgICBpZiAoc2l6ZSA9PT0gc2l6ZU9wZW4pIHtcbiAgICAgIGVmZmVjdHMuZXhpdChcImNvZGVUZXh0U2VxdWVuY2VcIik7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJjb2RlVGV4dFwiKTtcbiAgICAgIHJldHVybiBvayhjb2RlKTtcbiAgICB9XG5cbiAgICAvLyBNb3JlIG9yIGxlc3MgYWNjZW50czogbWFyayBhcyBkYXRhLlxuICAgIHRva2VuLnR5cGUgPSBcImNvZGVUZXh0RGF0YVwiO1xuICAgIHJldHVybiBkYXRhKGNvZGUpO1xuICB9XG59IiwgIi8qKlxuICogU29tZSBvZiB0aGUgaW50ZXJuYWwgb3BlcmF0aW9ucyBvZiBtaWNyb21hcmsgZG8gbG90cyBvZiBlZGl0aW5nXG4gKiBvcGVyYXRpb25zIG9uIHZlcnkgbGFyZ2UgYXJyYXlzLiBUaGlzIHJ1bnMgaW50byBwcm9ibGVtcyB3aXRoIHR3b1xuICogcHJvcGVydGllcyBvZiBtb3N0IGNpcmNhLTIwMjAgSmF2YVNjcmlwdCBpbnRlcnByZXRlcnM6XG4gKlxuICogIC0gQXJyYXktbGVuZ3RoIG1vZGlmaWNhdGlvbnMgYXQgdGhlIGhpZ2ggZW5kIG9mIGFuIGFycmF5IChwdXNoL3BvcCkgYXJlXG4gKiAgICBleHBlY3RlZCB0byBiZSBjb21tb24gYW5kIGFyZSBpbXBsZW1lbnRlZCBpbiAoYW1vcnRpemVkKSB0aW1lXG4gKiAgICBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBlbGVtZW50cyBhZGRlZCBvciByZW1vdmVkLCB3aGVyZWFzXG4gKiAgICBvdGhlciBvcGVyYXRpb25zIChzaGlmdC91bnNoaWZ0IGFuZCBzcGxpY2UpIGFyZSBtdWNoIGxlc3MgZWZmaWNpZW50LlxuICogIC0gRnVuY3Rpb24gYXJndW1lbnRzIGFyZSBwYXNzZWQgb24gdGhlIHN0YWNrLCBzbyBhZGRpbmcgdGVucyBvZiB0aG91c2FuZHNcbiAqICAgIG9mIGVsZW1lbnRzIHRvIGFuIGFycmF5IHdpdGggYGFyci5wdXNoKC4uLm5ld0VsZW1lbnRzKWAgd2lsbCBmcmVxdWVudGx5XG4gKiAgICBjYXVzZSBzdGFjayBvdmVyZmxvd3MuIChzZWUgPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIyMTIzNzY5L3JhbmdlZXJyb3ItbWF4aW11bS1jYWxsLXN0YWNrLXNpemUtZXhjZWVkZWQtd2h5PilcbiAqXG4gKiBTcGxpY2VCdWZmZXJzIGFyZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBnYXAgYnVmZmVycywgd2hpY2ggYXJlIGFcbiAqIGdlbmVyYWxpemF0aW9uIG9mIHRoZSBcInF1ZXVlIG1hZGUgb2YgdHdvIHN0YWNrc1wiIGlkZWEuIFRoZSBzcGxpY2UgYnVmZmVyXG4gKiBtYWludGFpbnMgYSBjdXJzb3IsIGFuZCBtb3ZpbmcgdGhlIGN1cnNvciBoYXMgY29zdCBwcm9wb3J0aW9uYWwgdG8gdGhlXG4gKiBkaXN0YW5jZSB0aGUgY3Vyc29yIG1vdmVzLCBidXQgaW5zZXJ0aW5nLCBkZWxldGluZywgb3Igc3BsaWNpbmcgaW5cbiAqIG5ldyBpbmZvcm1hdGlvbiBhdCB0aGUgY3Vyc29yIGlzIGFzIGVmZmljaWVudCBhcyB0aGUgcHVzaC9wb3Agb3BlcmF0aW9uLlxuICogVGhpcyBhbGxvd3MgZm9yIGFuIGVmZmljaWVudCBzZXF1ZW5jZSBvZiBzcGxpY2VzIChvciBwdXNoZXMsIHBvcHMsIHNoaWZ0cyxcbiAqIG9yIHVuc2hpZnRzKSBhcyBsb25nIHN1Y2ggZWRpdHMgaGFwcGVuIGF0IHRoZSBzYW1lIHBhcnQgb2YgdGhlIGFycmF5IG9yXG4gKiBnZW5lcmFsbHkgc3dlZXAgdGhyb3VnaCB0aGUgYXJyYXkgZnJvbSB0aGUgYmVnaW5uaW5nIHRvIHRoZSBlbmQuXG4gKlxuICogVGhlIGludGVyZmFjZSBmb3Igc3BsaWNlIGJ1ZmZlcnMgYWxzbyBzdXBwb3J0cyBsYXJnZSBudW1iZXJzIG9mIGlucHV0cyBieVxuICogcGFzc2luZyBhIHNpbmdsZSBhcnJheSBhcmd1bWVudCByYXRoZXIgcGFzc2luZyBtdWx0aXBsZSBhcmd1bWVudHMgb24gdGhlXG4gKiBmdW5jdGlvbiBjYWxsIHN0YWNrLlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiAgIEl0ZW0gdHlwZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNwbGljZUJ1ZmZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlYWRvbmx5QXJyYXk8VD4gfCBudWxsIHwgdW5kZWZpbmVkfSBbaW5pdGlhbF1cbiAgICogICBJbml0aWFsIGl0ZW1zIChvcHRpb25hbCkuXG4gICAqIEByZXR1cm5zXG4gICAqICAgU3BsaWNlIGJ1ZmZlci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGluaXRpYWwpIHtcbiAgICAvKiogQHR5cGUge0FycmF5PFQ+fSAqL1xuICAgIHRoaXMubGVmdCA9IGluaXRpYWwgPyBbLi4uaW5pdGlhbF0gOiBbXTtcbiAgICAvKiogQHR5cGUge0FycmF5PFQ+fSAqL1xuICAgIHRoaXMucmlnaHQgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcnJheSBhY2Nlc3M7XG4gICAqIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvci5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gICAqICAgSW5kZXguXG4gICAqIEByZXR1cm4ge1R9XG4gICAqICAgSXRlbS5cbiAgICovXG4gIGdldChpbmRleCkge1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ2Fubm90IGFjY2VzcyBpbmRleCBgJyArIGluZGV4ICsgJ2AgaW4gYSBzcGxpY2UgYnVmZmVyIG9mIHNpemUgYCcgKyAodGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoKSArICdgJyk7XG4gICAgfVxuICAgIGlmIChpbmRleCA8IHRoaXMubGVmdC5sZW5ndGgpIHJldHVybiB0aGlzLmxlZnRbaW5kZXhdO1xuICAgIHJldHVybiB0aGlzLnJpZ2h0W3RoaXMucmlnaHQubGVuZ3RoIC0gaW5kZXggKyB0aGlzLmxlZnQubGVuZ3RoIC0gMV07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxlbmd0aCBvZiB0aGUgc3BsaWNlIGJ1ZmZlciwgb25lIGdyZWF0ZXIgdGhhbiB0aGUgbGFyZ2VzdCBpbmRleCBpbiB0aGVcbiAgICogYXJyYXkuXG4gICAqL1xuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnQubGVuZ3RoICsgdGhpcy5yaWdodC5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuZCByZXR1cm4gYGxpc3RbMF1gO1xuICAgKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIGAwYC5cbiAgICpcbiAgICogQHJldHVybnMge1QgfCB1bmRlZmluZWR9XG4gICAqICAgSXRlbSwgb3B0aW9uYWwuXG4gICAqL1xuICBzaGlmdCgpIHtcbiAgICB0aGlzLnNldEN1cnNvcigwKTtcbiAgICByZXR1cm4gdGhpcy5yaWdodC5wb3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTbGljZSB0aGUgYnVmZmVyIHRvIGdldCBhbiBhcnJheTtcbiAgICogZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogICBTdGFydC5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbZW5kXVxuICAgKiAgIEVuZCAob3B0aW9uYWwpLlxuICAgKiBAcmV0dXJucyB7QXJyYXk8VD59XG4gICAqICAgQXJyYXkgb2YgaXRlbXMuXG4gICAqL1xuICBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgY29uc3Qgc3RvcCA9IGVuZCA9PT0gbnVsbCB8fCBlbmQgPT09IHVuZGVmaW5lZCA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6IGVuZDtcbiAgICBpZiAoc3RvcCA8IHRoaXMubGVmdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlZnQuc2xpY2Uoc3RhcnQsIHN0b3ApO1xuICAgIH1cbiAgICBpZiAoc3RhcnQgPiB0aGlzLmxlZnQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yaWdodC5zbGljZSh0aGlzLnJpZ2h0Lmxlbmd0aCAtIHN0b3AgKyB0aGlzLmxlZnQubGVuZ3RoLCB0aGlzLnJpZ2h0Lmxlbmd0aCAtIHN0YXJ0ICsgdGhpcy5sZWZ0Lmxlbmd0aCkucmV2ZXJzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sZWZ0LnNsaWNlKHN0YXJ0KS5jb25jYXQodGhpcy5yaWdodC5zbGljZSh0aGlzLnJpZ2h0Lmxlbmd0aCAtIHN0b3AgKyB0aGlzLmxlZnQubGVuZ3RoKS5yZXZlcnNlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pbWljcyB0aGUgYmVoYXZpb3Igb2YgQXJyYXkucHJvdG90eXBlLnNwbGljZSgpIGV4Y2VwdCBmb3IgdGhlIGNoYW5nZSBvZlxuICAgKiBpbnRlcmZhY2UgbmVjZXNzYXJ5IHRvIGF2b2lkIHNlZ2ZhdWx0cyB3aGVuIHBhdGNoaW5nIGluIHZlcnkgbGFyZ2UgYXJyYXlzLlxuICAgKlxuICAgKiBUaGlzIG9wZXJhdGlvbiBtb3ZlcyBjdXJzb3IgaXMgbW92ZWQgdG8gYHN0YXJ0YCBhbmQgcmVzdWx0cyBpbiB0aGUgY3Vyc29yXG4gICAqIHBsYWNlZCBhZnRlciBhbnkgaW5zZXJ0ZWQgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiAgIFN0YXJ0O1xuICAgKiAgIHplcm8tYmFzZWQgaW5kZXggYXQgd2hpY2ggdG8gc3RhcnQgY2hhbmdpbmcgdGhlIGFycmF5O1xuICAgKiAgIG5lZ2F0aXZlIG51bWJlcnMgY291bnQgYmFja3dhcmRzIGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXkgYW5kIHZhbHVlc1xuICAgKiAgIHRoYXQgYXJlIG91dC1vZiBib3VuZHMgYXJlIGNsYW1wZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGVuZCBvZiB0aGUgYXJyYXkuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2RlbGV0ZUNvdW50PTBdXG4gICAqICAgRGVsZXRlIGNvdW50IChkZWZhdWx0OiBgMGApO1xuICAgKiAgIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRlbGV0ZSwgc3RhcnRpbmcgZnJvbSBzdGFydC5cbiAgICogQHBhcmFtIHtBcnJheTxUPiB8IG51bGwgfCB1bmRlZmluZWR9IFtpdGVtcz1bXV1cbiAgICogICBJdGVtcyB0byBpbmNsdWRlIGluIHBsYWNlIG9mIHRoZSBkZWxldGVkIGl0ZW1zIChkZWZhdWx0OiBgW11gKS5cbiAgICogQHJldHVybiB7QXJyYXk8VD59XG4gICAqICAgQW55IHJlbW92ZWQgaXRlbXMuXG4gICAqL1xuICBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBpdGVtcykge1xuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGNvbnN0IGNvdW50ID0gZGVsZXRlQ291bnQgfHwgMDtcbiAgICB0aGlzLnNldEN1cnNvcihNYXRoLnRydW5jKHN0YXJ0KSk7XG4gICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMucmlnaHQuc3BsaWNlKHRoaXMucmlnaHQubGVuZ3RoIC0gY291bnQsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgaWYgKGl0ZW1zKSBjaHVua2VkUHVzaCh0aGlzLmxlZnQsIGl0ZW1zKTtcbiAgICByZXR1cm4gcmVtb3ZlZC5yZXZlcnNlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGhpZ2hlc3QtbnVtYmVyZWQgaXRlbSBpbiB0aGUgYXJyYXksIHNvXG4gICAqIGBsaXN0W2xpc3QubGVuZ3RoIC0gMV1gO1xuICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIGBsZW5ndGhgLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VCB8IHVuZGVmaW5lZH1cbiAgICogICBJdGVtLCBvcHRpb25hbC5cbiAgICovXG4gIHBvcCgpIHtcbiAgICB0aGlzLnNldEN1cnNvcihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgIHJldHVybiB0aGlzLmxlZnQucG9wKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5zZXJ0cyBhIHNpbmdsZSBpdGVtIHRvIHRoZSBoaWdoLW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5O1xuICAgKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIGBsZW5ndGhgLlxuICAgKlxuICAgKiBAcGFyYW0ge1R9IGl0ZW1cbiAgICogICBJdGVtLlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKiAgIE5vdGhpbmcuXG4gICAqL1xuICBwdXNoKGl0ZW0pIHtcbiAgICB0aGlzLnNldEN1cnNvcihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgIHRoaXMubGVmdC5wdXNoKGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydHMgbWFueSBpdGVtcyB0byB0aGUgaGlnaC1udW1iZXJlZCBzaWRlIG9mIHRoZSBhcnJheS5cbiAgICogTW92ZXMgdGhlIGN1cnNvciB0byBgbGVuZ3RoYC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxUPn0gaXRlbXNcbiAgICogICBJdGVtcy5cbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICogICBOb3RoaW5nLlxuICAgKi9cbiAgcHVzaE1hbnkoaXRlbXMpIHtcbiAgICB0aGlzLnNldEN1cnNvcihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgIGNodW5rZWRQdXNoKHRoaXMubGVmdCwgaXRlbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydHMgYSBzaW5nbGUgaXRlbSB0byB0aGUgbG93LW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5O1xuICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIGAwYC5cbiAgICpcbiAgICogQHBhcmFtIHtUfSBpdGVtXG4gICAqICAgSXRlbS5cbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICogICBOb3RoaW5nLlxuICAgKi9cbiAgdW5zaGlmdChpdGVtKSB7XG4gICAgdGhpcy5zZXRDdXJzb3IoMCk7XG4gICAgdGhpcy5yaWdodC5wdXNoKGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydHMgbWFueSBpdGVtcyB0byB0aGUgbG93LW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5O1xuICAgKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIGAwYC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxUPn0gaXRlbXNcbiAgICogICBJdGVtcy5cbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICogICBOb3RoaW5nLlxuICAgKi9cbiAgdW5zaGlmdE1hbnkoaXRlbXMpIHtcbiAgICB0aGlzLnNldEN1cnNvcigwKTtcbiAgICBjaHVua2VkUHVzaCh0aGlzLnJpZ2h0LCBpdGVtcy5yZXZlcnNlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIGN1cnNvciB0byBhIHNwZWNpZmljIHBvc2l0aW9uIGluIHRoZSBhcnJheS4gUmVxdWlyZXNcbiAgICogdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIGRpc3RhbmNlIG1vdmVkLlxuICAgKlxuICAgKiBJZiBgbiA8IDBgLCB0aGUgY3Vyc29yIHdpbGwgZW5kIHVwIGF0IHRoZSBiZWdpbm5pbmcuXG4gICAqIElmIGBuID4gbGVuZ3RoYCwgdGhlIGN1cnNvciB3aWxsIGVuZCB1cCBhdCB0aGUgZW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gblxuICAgKiAgIFBvc2l0aW9uLlxuICAgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG4gICAqICAgTm90aGluZy5cbiAgICovXG4gIHNldEN1cnNvcihuKSB7XG4gICAgaWYgKG4gPT09IHRoaXMubGVmdC5sZW5ndGggfHwgbiA+IHRoaXMubGVmdC5sZW5ndGggJiYgdGhpcy5yaWdodC5sZW5ndGggPT09IDAgfHwgbiA8IDAgJiYgdGhpcy5sZWZ0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGlmIChuIDwgdGhpcy5sZWZ0Lmxlbmd0aCkge1xuICAgICAgLy8gTW92ZSBjdXJzb3IgdG8gdGhlIHRoaXMubGVmdFxuICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMubGVmdC5zcGxpY2UobiwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtcbiAgICAgIGNodW5rZWRQdXNoKHRoaXMucmlnaHQsIHJlbW92ZWQucmV2ZXJzZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTW92ZSBjdXJzb3IgdG8gdGhlIHRoaXMucmlnaHRcbiAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLnJpZ2h0LnNwbGljZSh0aGlzLmxlZnQubGVuZ3RoICsgdGhpcy5yaWdodC5sZW5ndGggLSBuLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgY2h1bmtlZFB1c2godGhpcy5sZWZ0LCByZW1vdmVkLnJldmVyc2UoKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXZvaWQgc3RhY2sgb3ZlcmZsb3cgYnkgcHVzaGluZyBpdGVtcyBvbnRvIHRoZSBzdGFjayBpbiBzZWdtZW50c1xuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiAgIEl0ZW0gdHlwZS5cbiAqIEBwYXJhbSB7QXJyYXk8VD59IGxpc3RcbiAqICAgTGlzdCB0byBpbmplY3QgaW50by5cbiAqIEBwYXJhbSB7UmVhZG9ubHlBcnJheTxUPn0gcmlnaHRcbiAqICAgSXRlbXMgdG8gaW5qZWN0LlxuICogQHJldHVybiB7dW5kZWZpbmVkfVxuICogICBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBjaHVua2VkUHVzaChsaXN0LCByaWdodCkge1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IGNodW5rU3RhcnQgPSAwO1xuICBpZiAocmlnaHQubGVuZ3RoIDwgMTAwMDApIHtcbiAgICBsaXN0LnB1c2goLi4ucmlnaHQpO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChjaHVua1N0YXJ0IDwgcmlnaHQubGVuZ3RoKSB7XG4gICAgICBsaXN0LnB1c2goLi4ucmlnaHQuc2xpY2UoY2h1bmtTdGFydCwgY2h1bmtTdGFydCArIDEwMDAwKSk7XG4gICAgICBjaHVua1N0YXJ0ICs9IDEwMDAwO1xuICAgIH1cbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge0NodW5rLCBFdmVudCwgVG9rZW59IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IHNwbGljZSB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNodW5rZWQnO1xuaW1wb3J0IHsgU3BsaWNlQnVmZmVyIH0gZnJvbSAnLi9saWIvc3BsaWNlLWJ1ZmZlci5qcyc7XG5cbi8vIEhpZGRlbiBBUEkgZXhwb3NlZCBmb3IgdGVzdGluZy5cbmV4cG9ydCB7IFNwbGljZUJ1ZmZlciB9IGZyb20gJy4vbGliL3NwbGljZS1idWZmZXIuanMnO1xuXG4vKipcbiAqIFRva2VuaXplIHN1YmNvbnRlbnQuXG4gKlxuICogQHBhcmFtIHtBcnJheTxFdmVudD59IGV2ZW50c0FycmF5XG4gKiAgIExpc3Qgb2YgZXZlbnRzLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgc3VidG9rZW5zIHdlcmUgZm91bmQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gc3VidG9rZW5pemUoZXZlbnRzQXJyYXkpIHtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSAqL1xuICBjb25zdCBqdW1wcyA9IHt9O1xuICBsZXQgaW5kZXggPSAtMTtcbiAgLyoqIEB0eXBlIHtFdmVudH0gKi9cbiAgbGV0IGV2ZW50O1xuICAvKiogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGxpbmVJbmRleDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBvdGhlckluZGV4O1xuICAvKiogQHR5cGUge0V2ZW50fSAqL1xuICBsZXQgb3RoZXJFdmVudDtcbiAgLyoqIEB0eXBlIHtBcnJheTxFdmVudD59ICovXG4gIGxldCBwYXJhbWV0ZXJzO1xuICAvKiogQHR5cGUge0FycmF5PEV2ZW50Pn0gKi9cbiAgbGV0IHN1YmV2ZW50cztcbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgbW9yZTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IFNwbGljZUJ1ZmZlcihldmVudHNBcnJheSk7XG4gIHdoaWxlICgrK2luZGV4IDwgZXZlbnRzLmxlbmd0aCkge1xuICAgIHdoaWxlIChpbmRleCBpbiBqdW1wcykge1xuICAgICAgaW5kZXggPSBqdW1wc1tpbmRleF07XG4gICAgfVxuICAgIGV2ZW50ID0gZXZlbnRzLmdldChpbmRleCk7XG5cbiAgICAvLyBBZGQgYSBob29rIGZvciB0aGUgR0ZNIHRhc2tsaXN0IGV4dGVuc2lvbiwgd2hpY2ggbmVlZHMgdG8ga25vdyBpZiB0ZXh0XG4gICAgLy8gaXMgaW4gdGhlIGZpcnN0IGNvbnRlbnQgb2YgYSBsaXN0IGl0ZW0uXG4gICAgaWYgKGluZGV4ICYmIGV2ZW50WzFdLnR5cGUgPT09IFwiY2h1bmtGbG93XCIgJiYgZXZlbnRzLmdldChpbmRleCAtIDEpWzFdLnR5cGUgPT09IFwibGlzdEl0ZW1QcmVmaXhcIikge1xuICAgICAgc3ViZXZlbnRzID0gZXZlbnRbMV0uX3Rva2VuaXplci5ldmVudHM7XG4gICAgICBvdGhlckluZGV4ID0gMDtcbiAgICAgIGlmIChvdGhlckluZGV4IDwgc3ViZXZlbnRzLmxlbmd0aCAmJiBzdWJldmVudHNbb3RoZXJJbmRleF1bMV0udHlwZSA9PT0gXCJsaW5lRW5kaW5nQmxhbmtcIikge1xuICAgICAgICBvdGhlckluZGV4ICs9IDI7XG4gICAgICB9XG4gICAgICBpZiAob3RoZXJJbmRleCA8IHN1YmV2ZW50cy5sZW5ndGggJiYgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09IFwiY29udGVudFwiKSB7XG4gICAgICAgIHdoaWxlICgrK290aGVySW5kZXggPCBzdWJldmVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHN1YmV2ZW50c1tvdGhlckluZGV4XVsxXS50eXBlID09PSBcImNvbnRlbnRcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdWJldmVudHNbb3RoZXJJbmRleF1bMV0udHlwZSA9PT0gXCJjaHVua1RleHRcIikge1xuICAgICAgICAgICAgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSA9IHRydWU7XG4gICAgICAgICAgICBvdGhlckluZGV4Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW50ZXIuXG4gICAgaWYgKGV2ZW50WzBdID09PSAnZW50ZXInKSB7XG4gICAgICBpZiAoZXZlbnRbMV0uY29udGVudFR5cGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihqdW1wcywgc3ViY29udGVudChldmVudHMsIGluZGV4KSk7XG4gICAgICAgIGluZGV4ID0ganVtcHNbaW5kZXhdO1xuICAgICAgICBtb3JlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRXhpdC5cbiAgICBlbHNlIGlmIChldmVudFsxXS5fY29udGFpbmVyKSB7XG4gICAgICBvdGhlckluZGV4ID0gaW5kZXg7XG4gICAgICBsaW5lSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICB3aGlsZSAob3RoZXJJbmRleC0tKSB7XG4gICAgICAgIG90aGVyRXZlbnQgPSBldmVudHMuZ2V0KG90aGVySW5kZXgpO1xuICAgICAgICBpZiAob3RoZXJFdmVudFsxXS50eXBlID09PSBcImxpbmVFbmRpbmdcIiB8fCBvdGhlckV2ZW50WzFdLnR5cGUgPT09IFwibGluZUVuZGluZ0JsYW5rXCIpIHtcbiAgICAgICAgICBpZiAob3RoZXJFdmVudFswXSA9PT0gJ2VudGVyJykge1xuICAgICAgICAgICAgaWYgKGxpbmVJbmRleCkge1xuICAgICAgICAgICAgICBldmVudHMuZ2V0KGxpbmVJbmRleClbMV0udHlwZSA9IFwibGluZUVuZGluZ0JsYW5rXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdGhlckV2ZW50WzFdLnR5cGUgPSBcImxpbmVFbmRpbmdcIjtcbiAgICAgICAgICAgIGxpbmVJbmRleCA9IG90aGVySW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG90aGVyRXZlbnRbMV0udHlwZSA9PT0gXCJsaW5lUHJlZml4XCIgfHwgb3RoZXJFdmVudFsxXS50eXBlID09PSBcImxpc3RJdGVtSW5kZW50XCIpIHtcbiAgICAgICAgICAvLyBNb3ZlIHBhc3QuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChsaW5lSW5kZXgpIHtcbiAgICAgICAgLy8gRml4IHBvc2l0aW9uLlxuICAgICAgICBldmVudFsxXS5lbmQgPSB7XG4gICAgICAgICAgLi4uZXZlbnRzLmdldChsaW5lSW5kZXgpWzFdLnN0YXJ0XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gU3dpdGNoIGNvbnRhaW5lciBleGl0IHcvIGxpbmUgZW5kaW5ncy5cbiAgICAgICAgcGFyYW1ldGVycyA9IGV2ZW50cy5zbGljZShsaW5lSW5kZXgsIGluZGV4KTtcbiAgICAgICAgcGFyYW1ldGVycy51bnNoaWZ0KGV2ZW50KTtcbiAgICAgICAgZXZlbnRzLnNwbGljZShsaW5lSW5kZXgsIGluZGV4IC0gbGluZUluZGV4ICsgMSwgcGFyYW1ldGVycyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGNoYW5nZXMgdG8gdGhlIGBldmVudHNgIGJ1ZmZlciBtdXN0IGJlIGNvcGllZCBiYWNrIGludG8gdGhlIGV2ZW50c0FycmF5XG4gIHNwbGljZShldmVudHNBcnJheSwgMCwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCBldmVudHMuc2xpY2UoMCkpO1xuICByZXR1cm4gIW1vcmU7XG59XG5cbi8qKlxuICogVG9rZW5pemUgZW1iZWRkZWQgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSB7U3BsaWNlQnVmZmVyPEV2ZW50Pn0gZXZlbnRzXG4gKiAgIEV2ZW50cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBldmVudEluZGV4XG4gKiAgIEluZGV4LlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIG51bWJlcj59XG4gKiAgIEdhcHMuXG4gKi9cbmZ1bmN0aW9uIHN1YmNvbnRlbnQoZXZlbnRzLCBldmVudEluZGV4KSB7XG4gIGNvbnN0IHRva2VuID0gZXZlbnRzLmdldChldmVudEluZGV4KVsxXTtcbiAgY29uc3QgY29udGV4dCA9IGV2ZW50cy5nZXQoZXZlbnRJbmRleClbMl07XG4gIGxldCBzdGFydFBvc2l0aW9uID0gZXZlbnRJbmRleCAtIDE7XG4gIC8qKiBAdHlwZSB7QXJyYXk8bnVtYmVyPn0gKi9cbiAgY29uc3Qgc3RhcnRQb3NpdGlvbnMgPSBbXTtcbiAgbGV0IHRva2VuaXplciA9IHRva2VuLl90b2tlbml6ZXI7XG4gIGlmICghdG9rZW5pemVyKSB7XG4gICAgdG9rZW5pemVyID0gY29udGV4dC5wYXJzZXJbdG9rZW4uY29udGVudFR5cGVdKHRva2VuLnN0YXJ0KTtcbiAgICBpZiAodG9rZW4uX2NvbnRlbnRUeXBlVGV4dFRyYWlsaW5nKSB7XG4gICAgICB0b2tlbml6ZXIuX2NvbnRlbnRUeXBlVGV4dFRyYWlsaW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2hpbGRFdmVudHMgPSB0b2tlbml6ZXIuZXZlbnRzO1xuICAvKiogQHR5cGUge0FycmF5PFtudW1iZXIsIG51bWJlcl0+fSAqL1xuICBjb25zdCBqdW1wcyA9IFtdO1xuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIG51bWJlcj59ICovXG4gIGNvbnN0IGdhcHMgPSB7fTtcbiAgLyoqIEB0eXBlIHtBcnJheTxDaHVuaz59ICovXG4gIGxldCBzdHJlYW07XG4gIC8qKiBAdHlwZSB7VG9rZW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBwcmV2aW91cztcbiAgbGV0IGluZGV4ID0gLTE7XG4gIC8qKiBAdHlwZSB7VG9rZW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBjdXJyZW50ID0gdG9rZW47XG4gIGxldCBhZGp1c3QgPSAwO1xuICBsZXQgc3RhcnQgPSAwO1xuICBjb25zdCBicmVha3MgPSBbc3RhcnRdO1xuXG4gIC8vIExvb3AgZm9yd2FyZCB0aHJvdWdoIHRoZSBsaW5rZWQgdG9rZW5zIHRvIHBhc3MgdGhlbSBpbiBvcmRlciB0byB0aGVcbiAgLy8gc3VidG9rZW5pemVyLlxuICB3aGlsZSAoY3VycmVudCkge1xuICAgIC8vIEZpbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBldmVudCBmb3IgdGhpcyB0b2tlbi5cbiAgICB3aGlsZSAoZXZlbnRzLmdldCgrK3N0YXJ0UG9zaXRpb24pWzFdICE9PSBjdXJyZW50KSB7XG4gICAgICAvLyBFbXB0eS5cbiAgICB9XG4gICAgc3RhcnRQb3NpdGlvbnMucHVzaChzdGFydFBvc2l0aW9uKTtcbiAgICBpZiAoIWN1cnJlbnQuX3Rva2VuaXplcikge1xuICAgICAgc3RyZWFtID0gY29udGV4dC5zbGljZVN0cmVhbShjdXJyZW50KTtcbiAgICAgIGlmICghY3VycmVudC5uZXh0KSB7XG4gICAgICAgIHN0cmVhbS5wdXNoKG51bGwpO1xuICAgICAgfVxuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgIHRva2VuaXplci5kZWZpbmVTa2lwKGN1cnJlbnQuc3RhcnQpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnQuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtKSB7XG4gICAgICAgIHRva2VuaXplci5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRva2VuaXplci53cml0ZShzdHJlYW0pO1xuICAgICAgaWYgKGN1cnJlbnQuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtKSB7XG4gICAgICAgIHRva2VuaXplci5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVucmF2ZWwgdGhlIG5leHQgdG9rZW4uXG4gICAgcHJldmlvdXMgPSBjdXJyZW50O1xuICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gIH1cblxuICAvLyBOb3csIGxvb3AgYmFjayB0aHJvdWdoIGFsbCBldmVudHMgKGFuZCBsaW5rZWQgdG9rZW5zKSwgdG8gZmlndXJlIG91dCB3aGljaFxuICAvLyBwYXJ0cyBiZWxvbmcgd2hlcmUuXG4gIGN1cnJlbnQgPSB0b2tlbjtcbiAgd2hpbGUgKCsraW5kZXggPCBjaGlsZEV2ZW50cy5sZW5ndGgpIHtcbiAgICBpZiAoXG4gICAgLy8gRmluZCBhIHZvaWQgdG9rZW4gdGhhdCBpbmNsdWRlcyBhIGJyZWFrLlxuICAgIGNoaWxkRXZlbnRzW2luZGV4XVswXSA9PT0gJ2V4aXQnICYmIGNoaWxkRXZlbnRzW2luZGV4IC0gMV1bMF0gPT09ICdlbnRlcicgJiYgY2hpbGRFdmVudHNbaW5kZXhdWzFdLnR5cGUgPT09IGNoaWxkRXZlbnRzW2luZGV4IC0gMV1bMV0udHlwZSAmJiBjaGlsZEV2ZW50c1tpbmRleF1bMV0uc3RhcnQubGluZSAhPT0gY2hpbGRFdmVudHNbaW5kZXhdWzFdLmVuZC5saW5lKSB7XG4gICAgICBzdGFydCA9IGluZGV4ICsgMTtcbiAgICAgIGJyZWFrcy5wdXNoKHN0YXJ0KTtcbiAgICAgIC8vIEhlbHAgR0MuXG4gICAgICBjdXJyZW50Ll90b2tlbml6ZXIgPSB1bmRlZmluZWQ7XG4gICAgICBjdXJyZW50LnByZXZpb3VzID0gdW5kZWZpbmVkO1xuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9XG4gIH1cblxuICAvLyBIZWxwIEdDLlxuICB0b2tlbml6ZXIuZXZlbnRzID0gW107XG5cbiAgLy8gSWYgdGhlcmVcdTIwMTlzIG9uZSBtb3JlIHRva2VuICh3aGljaCBpcyB0aGUgY2FzZXMgZm9yIGxpbmVzIHRoYXQgZW5kIGluIGFuXG4gIC8vIEVPRiksIHRoYXRcdTIwMTlzIHBlcmZlY3Q6IHRoZSBsYXN0IHBvaW50IHdlIGZvdW5kIHN0YXJ0cyBpdC5cbiAgLy8gSWYgdGhlcmUgaXNuXHUyMDE5dCB0aGVuIG1ha2Ugc3VyZSBhbnkgcmVtYWluaW5nIGNvbnRlbnQgaXMgYWRkZWQgdG8gaXQuXG4gIGlmIChjdXJyZW50KSB7XG4gICAgLy8gSGVscCBHQy5cbiAgICBjdXJyZW50Ll90b2tlbml6ZXIgPSB1bmRlZmluZWQ7XG4gICAgY3VycmVudC5wcmV2aW91cyA9IHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICBicmVha3MucG9wKCk7XG4gIH1cblxuICAvLyBOb3cgc3BsaWNlIHRoZSBldmVudHMgZnJvbSB0aGUgc3VidG9rZW5pemVyIGludG8gdGhlIGN1cnJlbnQgZXZlbnRzLFxuICAvLyBtb3ZpbmcgYmFjayB0byBmcm9udCBzbyB0aGF0IHNwbGljZSBpbmRpY2VzIGFyZW5cdTIwMTl0IGFmZmVjdGVkLlxuICBpbmRleCA9IGJyZWFrcy5sZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgY29uc3Qgc2xpY2UgPSBjaGlsZEV2ZW50cy5zbGljZShicmVha3NbaW5kZXhdLCBicmVha3NbaW5kZXggKyAxXSk7XG4gICAgY29uc3Qgc3RhcnQgPSBzdGFydFBvc2l0aW9ucy5wb3AoKTtcbiAgICBqdW1wcy5wdXNoKFtzdGFydCwgc3RhcnQgKyBzbGljZS5sZW5ndGggLSAxXSk7XG4gICAgZXZlbnRzLnNwbGljZShzdGFydCwgMiwgc2xpY2UpO1xuICB9XG4gIGp1bXBzLnJldmVyc2UoKTtcbiAgaW5kZXggPSAtMTtcbiAgd2hpbGUgKCsraW5kZXggPCBqdW1wcy5sZW5ndGgpIHtcbiAgICBnYXBzW2FkanVzdCArIGp1bXBzW2luZGV4XVswXV0gPSBhZGp1c3QgKyBqdW1wc1tpbmRleF1bMV07XG4gICAgYWRqdXN0ICs9IGp1bXBzW2luZGV4XVsxXSAtIGp1bXBzW2luZGV4XVswXSAtIDE7XG4gIH1cbiAgcmV0dXJuIGdhcHM7XG59IiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIENvbnN0cnVjdCxcbiAqICAgUmVzb2x2ZXIsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHQsXG4gKiAgIFRva2VuaXplcixcbiAqICAgVG9rZW5cbiAqIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuaW1wb3J0IHsgZmFjdG9yeVNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnO1xuaW1wb3J0IHsgbWFya2Rvd25MaW5lRW5kaW5nIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbmltcG9ydCB7IHN1YnRva2VuaXplIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemUnO1xuLyoqXG4gKiBObyBuYW1lIGJlY2F1c2UgaXQgbXVzdCBub3QgYmUgdHVybmVkIG9mZi5cbiAqIEB0eXBlIHtDb25zdHJ1Y3R9XG4gKi9cbmV4cG9ydCBjb25zdCBjb250ZW50ID0ge1xuICByZXNvbHZlOiByZXNvbHZlQ29udGVudCxcbiAgdG9rZW5pemU6IHRva2VuaXplQ29udGVudFxufTtcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCBjb250aW51YXRpb25Db25zdHJ1Y3QgPSB7XG4gIHBhcnRpYWw6IHRydWUsXG4gIHRva2VuaXplOiB0b2tlbml6ZUNvbnRpbnVhdGlvblxufTtcblxuLyoqXG4gKiBDb250ZW50IGlzIHRyYW5zcGFyZW50OiBpdFx1MjAxOXMgcGFyc2VkIHJpZ2h0IG5vdy4gVGhhdCB3YXksIGRlZmluaXRpb25zIGFyZSBhbHNvXG4gKiBwYXJzZWQgcmlnaHQgbm93OiBiZWZvcmUgdGV4dCBpbiBwYXJhZ3JhcGhzIChzcGVjaWZpY2FsbHksIG1lZGlhKSBhcmUgcGFyc2VkLlxuICpcbiAqIEB0eXBlIHtSZXNvbHZlcn1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUNvbnRlbnQoZXZlbnRzKSB7XG4gIHN1YnRva2VuaXplKGV2ZW50cyk7XG4gIHJldHVybiBldmVudHM7XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqICAgQ29udGV4dC5cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplQ29udGVudChlZmZlY3RzLCBvaykge1xuICAvKiogQHR5cGUge1Rva2VuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgcHJldmlvdXM7XG4gIHJldHVybiBjaHVua1N0YXJ0O1xuXG4gIC8qKlxuICAgKiBCZWZvcmUgYSBjb250ZW50IGNodW5rLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYWJjXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjaHVua1N0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKFwiY29udGVudFwiKTtcbiAgICBwcmV2aW91cyA9IGVmZmVjdHMuZW50ZXIoXCJjaHVua0NvbnRlbnRcIiwge1xuICAgICAgY29udGVudFR5cGU6IFwiY29udGVudFwiXG4gICAgfSk7XG4gICAgcmV0dXJuIGNodW5rSW5zaWRlKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGEgY29udGVudCBjaHVuay5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGFiY1xuICAgKiAgICAgXl5eXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjaHVua0luc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBjb250ZW50RW5kKGNvZGUpO1xuICAgIH1cblxuICAgIC8vIFRvIGRvOiBpbiBgbWFya2Rvd24tcnNgLCBlYWNoIGxpbmUgaXMgcGFyc2VkIG9uIGl0cyBvd24sIGFuZCBldmVyeXRoaW5nXG4gICAgLy8gaXMgc3RpdGNoZWQgdG9nZXRoZXIgcmVzb2x2aW5nLlxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKGNvbnRpbnVhdGlvbkNvbnN0cnVjdCwgY29udGVudENvbnRpbnVlLCBjb250ZW50RW5kKShjb2RlKTtcbiAgICB9XG5cbiAgICAvLyBEYXRhLlxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICByZXR1cm4gY2h1bmtJbnNpZGU7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGVudEVuZChjb2RlKSB7XG4gICAgZWZmZWN0cy5leGl0KFwiY2h1bmtDb250ZW50XCIpO1xuICAgIGVmZmVjdHMuZXhpdChcImNvbnRlbnRcIik7XG4gICAgcmV0dXJuIG9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRlbnRDb250aW51ZShjb2RlKSB7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIGVmZmVjdHMuZXhpdChcImNodW5rQ29udGVudFwiKTtcbiAgICBwcmV2aW91cy5uZXh0ID0gZWZmZWN0cy5lbnRlcihcImNodW5rQ29udGVudFwiLCB7XG4gICAgICBjb250ZW50VHlwZTogXCJjb250ZW50XCIsXG4gICAgICBwcmV2aW91c1xuICAgIH0pO1xuICAgIHByZXZpb3VzID0gcHJldmlvdXMubmV4dDtcbiAgICByZXR1cm4gY2h1bmtJbnNpZGU7XG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVDb250aW51YXRpb24oZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgcmV0dXJuIHN0YXJ0TG9va2FoZWFkO1xuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydExvb2thaGVhZChjb2RlKSB7XG4gICAgZWZmZWN0cy5leGl0KFwiY2h1bmtDb250ZW50XCIpO1xuICAgIGVmZmVjdHMuZW50ZXIoXCJsaW5lRW5kaW5nXCIpO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICBlZmZlY3RzLmV4aXQoXCJsaW5lRW5kaW5nXCIpO1xuICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgcHJlZml4ZWQsIFwibGluZVByZWZpeFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBwcmVmaXhlZChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cblxuICAgIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG5cbiAgICBjb25zdCB0YWlsID0gc2VsZi5ldmVudHNbc2VsZi5ldmVudHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKCFzZWxmLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygnY29kZUluZGVudGVkJykgJiYgdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09IFwibGluZVByZWZpeFwiICYmIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID49IDQpIHtcbiAgICAgIHJldHVybiBvayhjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGVmZmVjdHMuaW50ZXJydXB0KHNlbGYucGFyc2VyLmNvbnN0cnVjdHMuZmxvdywgbm9rLCBvaykoY29kZSk7XG4gIH1cbn0iLCAiLyoqXG4gKiBAaW1wb3J0IHtFZmZlY3RzLCBTdGF0ZSwgVG9rZW5UeXBlfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBhc2NpaUNvbnRyb2wsIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UsIG1hcmtkb3duTGluZUVuZGluZyB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcic7XG4vKipcbiAqIFBhcnNlIGRlc3RpbmF0aW9ucy5cbiAqXG4gKiAjIyMjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGBtYXJrZG93blxuICogPGE+XG4gKiA8YVxcPmI+XG4gKiA8YSBiPlxuICogPGEpPlxuICogYVxuICogYVxcKWJcbiAqIGEoYiljXG4gKiBhKGIpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge0VmZmVjdHN9IGVmZmVjdHNcbiAqICAgQ29udGV4dC5cbiAqIEBwYXJhbSB7U3RhdGV9IG9rXG4gKiAgIFN0YXRlIHN3aXRjaGVkIHRvIHdoZW4gc3VjY2Vzc2Z1bC5cbiAqIEBwYXJhbSB7U3RhdGV9IG5va1xuICogICBTdGF0ZSBzd2l0Y2hlZCB0byB3aGVuIHVuc3VjY2Vzc2Z1bC5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSB0eXBlXG4gKiAgIFR5cGUgZm9yIHdob2xlIChgPGE+YCBvciBgYmApLlxuICogQHBhcmFtIHtUb2tlblR5cGV9IGxpdGVyYWxUeXBlXG4gKiAgIFR5cGUgd2hlbiBlbmNsb3NlZCAoYDxhPmApLlxuICogQHBhcmFtIHtUb2tlblR5cGV9IGxpdGVyYWxNYXJrZXJUeXBlXG4gKiAgIFR5cGUgZm9yIGVuY2xvc2luZyAoYDxgIGFuZCBgPmApLlxuICogQHBhcmFtIHtUb2tlblR5cGV9IHJhd1R5cGVcbiAqICAgVHlwZSB3aGVuIG5vdCBlbmNsb3NlZCAoYGJgKS5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSBzdHJpbmdUeXBlXG4gKiAgIFR5cGUgZm9yIHRoZSB2YWx1ZSAoYGFgIG9yIGBiYCkuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gW21heD1JbmZpbml0eV1cbiAqICAgRGVwdGggb2YgbmVzdGVkIHBhcmVucyAoaW5jbHVzaXZlKS5cbiAqIEByZXR1cm5zIHtTdGF0ZX1cbiAqICAgU3RhcnQgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWN0b3J5RGVzdGluYXRpb24oZWZmZWN0cywgb2ssIG5vaywgdHlwZSwgbGl0ZXJhbFR5cGUsIGxpdGVyYWxNYXJrZXJUeXBlLCByYXdUeXBlLCBzdHJpbmdUeXBlLCBtYXgpIHtcbiAgY29uc3QgbGltaXQgPSBtYXggfHwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBsZXQgYmFsYW5jZSA9IDA7XG4gIHJldHVybiBzdGFydDtcblxuICAvKipcbiAgICogU3RhcnQgb2YgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YWE+XG4gICAqICAgICBeXG4gICAqID4gfCBhYVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA2MCkge1xuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlKTtcbiAgICAgIGVmZmVjdHMuZW50ZXIobGl0ZXJhbFR5cGUpO1xuICAgICAgZWZmZWN0cy5lbnRlcihsaXRlcmFsTWFya2VyVHlwZSk7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQobGl0ZXJhbE1hcmtlclR5cGUpO1xuICAgICAgcmV0dXJuIGVuY2xvc2VkQmVmb3JlO1xuICAgIH1cblxuICAgIC8vIEFTQ0lJIGNvbnRyb2wsIHNwYWNlLCBjbG9zaW5nIHBhcmVuLlxuICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IDMyIHx8IGNvZGUgPT09IDQxIHx8IGFzY2lpQ29udHJvbChjb2RlKSkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG4gICAgZWZmZWN0cy5lbnRlcih0eXBlKTtcbiAgICBlZmZlY3RzLmVudGVyKHJhd1R5cGUpO1xuICAgIGVmZmVjdHMuZW50ZXIoc3RyaW5nVHlwZSk7XG4gICAgZWZmZWN0cy5lbnRlcihcImNodW5rU3RyaW5nXCIsIHtcbiAgICAgIGNvbnRlbnRUeXBlOiBcInN0cmluZ1wiXG4gICAgfSk7XG4gICAgcmV0dXJuIHJhdyhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPGAsIGF0IGFuIGVuY2xvc2VkIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGFhPlxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVuY2xvc2VkQmVmb3JlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjIpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIobGl0ZXJhbE1hcmtlclR5cGUpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KGxpdGVyYWxNYXJrZXJUeXBlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChsaXRlcmFsVHlwZSk7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZSk7XG4gICAgICByZXR1cm4gb2s7XG4gICAgfVxuICAgIGVmZmVjdHMuZW50ZXIoc3RyaW5nVHlwZSk7XG4gICAgZWZmZWN0cy5lbnRlcihcImNodW5rU3RyaW5nXCIsIHtcbiAgICAgIGNvbnRlbnRUeXBlOiBcInN0cmluZ1wiXG4gICAgfSk7XG4gICAgcmV0dXJuIGVuY2xvc2VkKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGVuY2xvc2VkIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGFhPlxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVuY2xvc2VkKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjIpIHtcbiAgICAgIGVmZmVjdHMuZXhpdChcImNodW5rU3RyaW5nXCIpO1xuICAgICAgZWZmZWN0cy5leGl0KHN0cmluZ1R5cGUpO1xuICAgICAgcmV0dXJuIGVuY2xvc2VkQmVmb3JlKGNvZGUpO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSA2MCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICByZXR1cm4gY29kZSA9PT0gOTIgPyBlbmNsb3NlZEVzY2FwZSA6IGVuY2xvc2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGBcXGAsIGF0IGEgc3BlY2lhbCBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YVxcKmE+XG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBlbmNsb3NlZEVzY2FwZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDYwIHx8IGNvZGUgPT09IDYyIHx8IGNvZGUgPT09IDkyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gZW5jbG9zZWQ7XG4gICAgfVxuICAgIHJldHVybiBlbmNsb3NlZChjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByYXcgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhYVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmF3KGNvZGUpIHtcbiAgICBpZiAoIWJhbGFuY2UgJiYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gNDEgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdChcImNodW5rU3RyaW5nXCIpO1xuICAgICAgZWZmZWN0cy5leGl0KHN0cmluZ1R5cGUpO1xuICAgICAgZWZmZWN0cy5leGl0KHJhd1R5cGUpO1xuICAgICAgZWZmZWN0cy5leGl0KHR5cGUpO1xuICAgICAgcmV0dXJuIG9rKGNvZGUpO1xuICAgIH1cbiAgICBpZiAoYmFsYW5jZSA8IGxpbWl0ICYmIGNvZGUgPT09IDQwKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBiYWxhbmNlKys7XG4gICAgICByZXR1cm4gcmF3O1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gNDEpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGJhbGFuY2UtLTtcbiAgICAgIHJldHVybiByYXc7XG4gICAgfVxuXG4gICAgLy8gQVNDSUkgY29udHJvbCAoYnV0ICpub3QqIGBcXDBgKSBhbmQgc3BhY2UgYW5kIGAoYC5cbiAgICAvLyBOb3RlOiBpbiBgbWFya2Rvd24tcnNgLCBgXFwwYCBleGlzdHMgaW4gY29kZXMsIGluIGBtaWNyb21hcmstanNgIGl0XG4gICAgLy8gZG9lc25cdTIwMTl0LlxuICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IDMyIHx8IGNvZGUgPT09IDQwIHx8IGFzY2lpQ29udHJvbChjb2RlKSkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIHJldHVybiBjb2RlID09PSA5MiA/IHJhd0VzY2FwZSA6IHJhdztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgXFxgLCBhdCBzcGVjaWFsIGNoYXJhY3Rlci5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGFcXCphXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJhd0VzY2FwZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQwIHx8IGNvZGUgPT09IDQxIHx8IGNvZGUgPT09IDkyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gcmF3O1xuICAgIH1cbiAgICByZXR1cm4gcmF3KGNvZGUpO1xuICB9XG59IiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIEVmZmVjdHMsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHQsXG4gKiAgIFRva2VuVHlwZVxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBtYXJrZG93bkxpbmVFbmRpbmcsIG1hcmtkb3duU3BhY2UgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuLyoqXG4gKiBQYXJzZSBsYWJlbHMuXG4gKlxuICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IGxhYmVscyBpbiBtYXJrZG93biBhcmUgY2FwcGVkIGF0IDk5OSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcuXG4gKlxuICogIyMjIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgbWFya2Rvd25cbiAqIFthXVxuICogW2FcbiAqIGJdXG4gKiBbYVxcXWJdXG4gKiBgYGBcbiAqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBUb2tlbml6ZSBjb250ZXh0LlxuICogQHBhcmFtIHtFZmZlY3RzfSBlZmZlY3RzXG4gKiAgIENvbnRleHQuXG4gKiBAcGFyYW0ge1N0YXRlfSBva1xuICogICBTdGF0ZSBzd2l0Y2hlZCB0byB3aGVuIHN1Y2Nlc3NmdWwuXG4gKiBAcGFyYW0ge1N0YXRlfSBub2tcbiAqICAgU3RhdGUgc3dpdGNoZWQgdG8gd2hlbiB1bnN1Y2Nlc3NmdWwuXG4gKiBAcGFyYW0ge1Rva2VuVHlwZX0gdHlwZVxuICogICBUeXBlIG9mIHRoZSB3aG9sZSBsYWJlbCAoYFthXWApLlxuICogQHBhcmFtIHtUb2tlblR5cGV9IG1hcmtlclR5cGVcbiAqICAgVHlwZSBmb3IgdGhlIG1hcmtlcnMgKGBbYCBhbmQgYF1gKS5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSBzdHJpbmdUeXBlXG4gKiAgIFR5cGUgZm9yIHRoZSBpZGVudGlmaWVyIChgYWApLlxuICogQHJldHVybnMge1N0YXRlfVxuICogICBTdGFydCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhY3RvcnlMYWJlbChlZmZlY3RzLCBvaywgbm9rLCB0eXBlLCBtYXJrZXJUeXBlLCBzdHJpbmdUeXBlKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICBsZXQgc2l6ZSA9IDA7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IHNlZW47XG4gIHJldHVybiBzdGFydDtcblxuICAvKipcbiAgICogU3RhcnQgb2YgbGFiZWwuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV1cbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKHR5cGUpO1xuICAgIGVmZmVjdHMuZW50ZXIobWFya2VyVHlwZSk7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTtcbiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpO1xuICAgIHJldHVybiBhdEJyZWFrO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGxhYmVsLCBhdCBzb21ldGhpbmcsIGJlZm9yZSBzb21ldGhpbmcgZWxzZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXVxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGF0QnJlYWsoY29kZSkge1xuICAgIGlmIChzaXplID4gOTk5IHx8IGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gOTEgfHwgY29kZSA9PT0gOTMgJiYgIXNlZW4gfHxcbiAgICAvLyBUbyBkbzogcmVtb3ZlIGluIHRoZSBmdXR1cmUgb25jZSB3ZVx1MjAxOXZlIHN3aXRjaGVkIGZyb21cbiAgICAvLyBgbWljcm9tYXJrLWV4dGVuc2lvbi1mb290bm90ZWAgdG8gYG1pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlYCxcbiAgICAvLyB3aGljaCBkb2Vzblx1MjAxOXQgbmVlZCB0aGlzLlxuICAgIC8vIEhpZGRlbiBmb290bm90ZXMgaG9vay5cbiAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovXG4gICAgY29kZSA9PT0gOTQgJiYgIXNpemUgJiYgJ19oaWRkZW5Gb290bm90ZVN1cHBvcnQnIGluIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMpIHtcbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSA5Mykge1xuICAgICAgZWZmZWN0cy5leGl0KHN0cmluZ1R5cGUpO1xuICAgICAgZWZmZWN0cy5lbnRlcihtYXJrZXJUeXBlKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTtcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlKTtcbiAgICAgIHJldHVybiBvaztcbiAgICB9XG5cbiAgICAvLyBUbyBkbzogaW5kZW50PyBMaW5rIGNodW5rcyBhbmQgRU9McyB0b2dldGhlcj9cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKFwibGluZUVuZGluZ1wiKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImxpbmVFbmRpbmdcIik7XG4gICAgICByZXR1cm4gYXRCcmVhaztcbiAgICB9XG4gICAgZWZmZWN0cy5lbnRlcihcImNodW5rU3RyaW5nXCIsIHtcbiAgICAgIGNvbnRlbnRUeXBlOiBcInN0cmluZ1wiXG4gICAgfSk7XG4gICAgcmV0dXJuIGxhYmVsSW5zaWRlKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGxhYmVsLCBpbiB0ZXh0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdXG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbGFiZWxJbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IDkxIHx8IGNvZGUgPT09IDkzIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSB8fCBzaXplKysgPiA5OTkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdChcImNodW5rU3RyaW5nXCIpO1xuICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICBpZiAoIXNlZW4pIHNlZW4gPSAhbWFya2Rvd25TcGFjZShjb2RlKTtcbiAgICByZXR1cm4gY29kZSA9PT0gOTIgPyBsYWJlbEVzY2FwZSA6IGxhYmVsSW5zaWRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGBcXGAsIGF0IGEgc3BlY2lhbCBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYVxcKmFdXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsYWJlbEVzY2FwZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDkxIHx8IGNvZGUgPT09IDkyIHx8IGNvZGUgPT09IDkzKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBzaXplKys7XG4gICAgICByZXR1cm4gbGFiZWxJbnNpZGU7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbEluc2lkZShjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb2RlLFxuICogICBFZmZlY3RzLFxuICogICBTdGF0ZSxcbiAqICAgVG9rZW5UeXBlXG4gKiB9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IGZhY3RvcnlTcGFjZSB9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJztcbmltcG9ydCB7IG1hcmtkb3duTGluZUVuZGluZyB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcic7XG4vKipcbiAqIFBhcnNlIHRpdGxlcy5cbiAqXG4gKiAjIyMjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGBtYXJrZG93blxuICogXCJhXCJcbiAqICdiJ1xuICogKGMpXG4gKiBcImFcbiAqIGJcIlxuICogJ2FcbiAqICAgICBiJ1xuICogKGFcXCliKVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtFZmZlY3RzfSBlZmZlY3RzXG4gKiAgIENvbnRleHQuXG4gKiBAcGFyYW0ge1N0YXRlfSBva1xuICogICBTdGF0ZSBzd2l0Y2hlZCB0byB3aGVuIHN1Y2Nlc3NmdWwuXG4gKiBAcGFyYW0ge1N0YXRlfSBub2tcbiAqICAgU3RhdGUgc3dpdGNoZWQgdG8gd2hlbiB1bnN1Y2Nlc3NmdWwuXG4gKiBAcGFyYW0ge1Rva2VuVHlwZX0gdHlwZVxuICogICBUeXBlIG9mIHRoZSB3aG9sZSB0aXRsZSAoYFwiYVwiYCwgYCdiJ2AsIGAoYylgKS5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSBtYXJrZXJUeXBlXG4gKiAgIFR5cGUgZm9yIHRoZSBtYXJrZXJzIChgXCJgLCBgJ2AsIGAoYCwgYW5kIGApYCkuXG4gKiBAcGFyYW0ge1Rva2VuVHlwZX0gc3RyaW5nVHlwZVxuICogICBUeXBlIGZvciB0aGUgdmFsdWUgKGBhYCkuXG4gKiBAcmV0dXJucyB7U3RhdGV9XG4gKiAgIFN0YXJ0IHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFjdG9yeVRpdGxlKGVmZmVjdHMsIG9rLCBub2ssIHR5cGUsIG1hcmtlclR5cGUsIHN0cmluZ1R5cGUpIHtcbiAgLyoqIEB0eXBlIHtOb25OdWxsYWJsZTxDb2RlPn0gKi9cbiAgbGV0IG1hcmtlcjtcbiAgcmV0dXJuIHN0YXJ0O1xuXG4gIC8qKlxuICAgKiBTdGFydCBvZiB0aXRsZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFwiYVwiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDM0IHx8IGNvZGUgPT09IDM5IHx8IGNvZGUgPT09IDQwKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGUpO1xuICAgICAgZWZmZWN0cy5lbnRlcihtYXJrZXJUeXBlKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTtcbiAgICAgIG1hcmtlciA9IGNvZGUgPT09IDQwID8gNDEgOiBjb2RlO1xuICAgICAgcmV0dXJuIGJlZ2luO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIG9wZW5pbmcgbWFya2VyLlxuICAgKlxuICAgKiBUaGlzIGlzIGFsc28gdXNlZCBhdCB0aGUgY2xvc2luZyBtYXJrZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBcImFcIlxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGJlZ2luKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbWFya2VyKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KG1hcmtlclR5cGUpO1xuICAgICAgZWZmZWN0cy5leGl0KHR5cGUpO1xuICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpO1xuICAgIHJldHVybiBhdEJyZWFrKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0IHNvbWV0aGluZywgYmVmb3JlIHNvbWV0aGluZyBlbHNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgXCJhXCJcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhdEJyZWFrKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbWFya2VyKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSk7XG4gICAgICByZXR1cm4gYmVnaW4obWFya2VyKTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuXG4gICAgLy8gTm90ZTogYmxhbmsgbGluZXMgY2FuXHUyMDE5dCBleGlzdCBpbiBjb250ZW50LlxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIC8vIFRvIGRvOiB1c2UgYHNwYWNlX29yX3RhYl9lb2xfd2l0aF9vcHRpb25zYCwgY29ubmVjdC5cbiAgICAgIGVmZmVjdHMuZW50ZXIoXCJsaW5lRW5kaW5nXCIpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KFwibGluZUVuZGluZ1wiKTtcbiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYXRCcmVhaywgXCJsaW5lUHJlZml4XCIpO1xuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKFwiY2h1bmtTdHJpbmdcIiwge1xuICAgICAgY29udGVudFR5cGU6IFwic3RyaW5nXCJcbiAgICB9KTtcbiAgICByZXR1cm4gaW5zaWRlKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGluc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlciB8fCBjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KFwiY2h1bmtTdHJpbmdcIik7XG4gICAgICByZXR1cm4gYXRCcmVhayhjb2RlKTtcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIHJldHVybiBjb2RlID09PSA5MiA/IGVzY2FwZSA6IGluc2lkZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgXFxgLCBhdCBhIHNwZWNpYWwgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgXCJhXFwqYlwiXG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZXNjYXBlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbWFya2VyIHx8IGNvZGUgPT09IDkyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gaW5zaWRlO1xuICAgIH1cbiAgICByZXR1cm4gaW5zaWRlKGNvZGUpO1xuICB9XG59IiwgIi8qKlxuICogQGltcG9ydCB7RWZmZWN0cywgU3RhdGV9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IGZhY3RvcnlTcGFjZSB9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJztcbmltcG9ydCB7IG1hcmtkb3duTGluZUVuZGluZywgbWFya2Rvd25TcGFjZSB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcic7XG4vKipcbiAqIFBhcnNlIHNwYWNlcyBhbmQgdGFicy5cbiAqXG4gKiBUaGVyZSBpcyBubyBgbm9rYCBwYXJhbWV0ZXI6XG4gKlxuICogKiAgIGxpbmUgZW5kaW5ncyBvciBzcGFjZXMgaW4gbWFya2Rvd24gYXJlIG9mdGVuIG9wdGlvbmFsLCBpbiB3aGljaCBjYXNlIHRoaXNcbiAqICAgICBmYWN0b3J5IGNhbiBiZSB1c2VkIGFuZCBgb2tgIHdpbGwgYmUgc3dpdGNoZWQgdG8gd2hldGhlciBzcGFjZXMgd2VyZSBmb3VuZFxuICogICAgIG9yIG5vdFxuICogKiAgIG9uZSBsaW5lIGVuZGluZyBvciBzcGFjZSBjYW4gYmUgZGV0ZWN0ZWQgd2l0aFxuICogICAgIGBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpYCByaWdodCBiZWZvcmUgdXNpbmcgYGZhY3RvcnlXaGl0ZXNwYWNlYFxuICpcbiAqIEBwYXJhbSB7RWZmZWN0c30gZWZmZWN0c1xuICogICBDb250ZXh0LlxuICogQHBhcmFtIHtTdGF0ZX0gb2tcbiAqICAgU3RhdGUgc3dpdGNoZWQgdG8gd2hlbiBzdWNjZXNzZnVsLlxuICogQHJldHVybnMge1N0YXRlfVxuICogICBTdGFydCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIG9rKSB7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IHNlZW47XG4gIHJldHVybiBzdGFydDtcblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcihcImxpbmVFbmRpbmdcIik7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJsaW5lRW5kaW5nXCIpO1xuICAgICAgc2VlbiA9IHRydWU7XG4gICAgICByZXR1cm4gc3RhcnQ7XG4gICAgfVxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIHN0YXJ0LCBzZWVuID8gXCJsaW5lUHJlZml4XCIgOiBcImxpbmVTdWZmaXhcIikoY29kZSk7XG4gICAgfVxuICAgIHJldHVybiBvayhjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb25zdHJ1Y3QsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHQsXG4gKiAgIFRva2VuaXplclxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBmYWN0b3J5RGVzdGluYXRpb24gfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbic7XG5pbXBvcnQgeyBmYWN0b3J5TGFiZWwgfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1sYWJlbCc7XG5pbXBvcnQgeyBmYWN0b3J5U3BhY2UgfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSc7XG5pbXBvcnQgeyBmYWN0b3J5VGl0bGUgfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS10aXRsZSc7XG5pbXBvcnQgeyBmYWN0b3J5V2hpdGVzcGFjZSB9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2UnO1xuaW1wb3J0IHsgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZSwgbWFya2Rvd25MaW5lRW5kaW5nLCBtYXJrZG93blNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbmltcG9ydCB7IG5vcm1hbGl6ZUlkZW50aWZpZXIgfSBmcm9tICdtaWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllcic7XG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBkZWZpbml0aW9uID0ge1xuICBuYW1lOiAnZGVmaW5pdGlvbicsXG4gIHRva2VuaXplOiB0b2tlbml6ZURlZmluaXRpb25cbn07XG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuY29uc3QgdGl0bGVCZWZvcmUgPSB7XG4gIHBhcnRpYWw6IHRydWUsXG4gIHRva2VuaXplOiB0b2tlbml6ZVRpdGxlQmVmb3JlXG59O1xuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZURlZmluaXRpb24oZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGxldCBpZGVudGlmaWVyO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIEF0IHN0YXJ0IG9mIGEgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXTogYiBcImNcIlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIC8vIERvIG5vdCBpbnRlcnJ1cHQgcGFyYWdyYXBocyAoYnV0IGRvIGZvbGxvdyBkZWZpbml0aW9ucykuXG4gICAgLy8gVG8gZG86IGRvIGBpbnRlcnJ1cHRgIHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLlxuICAgIC8vIFRvIGRvOiBwYXJzZSB3aGl0ZXNwYWNlIHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLlxuICAgIGVmZmVjdHMuZW50ZXIoXCJkZWZpbml0aW9uXCIpO1xuICAgIHJldHVybiBiZWZvcmUoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZSwgYXQgYFtgLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBiZWZvcmUoY29kZSkge1xuICAgIC8vIFRvIGRvOiBwYXJzZSB3aGl0ZXNwYWNlIHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLlxuXG4gICAgcmV0dXJuIGZhY3RvcnlMYWJlbC5jYWxsKHNlbGYsIGVmZmVjdHMsIGxhYmVsQWZ0ZXIsXG4gICAgLy8gTm90ZTogd2UgZG9uXHUyMDE5dCBuZWVkIHRvIHJlc2V0IHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLlxuICAgIG5vaywgXCJkZWZpbml0aW9uTGFiZWxcIiwgXCJkZWZpbml0aW9uTGFiZWxNYXJrZXJcIiwgXCJkZWZpbml0aW9uTGFiZWxTdHJpbmdcIikoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgbGFiZWwuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGIgXCJjXCJcbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGxhYmVsQWZ0ZXIoY29kZSkge1xuICAgIGlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKHNlbGYuc2xpY2VTZXJpYWxpemUoc2VsZi5ldmVudHNbc2VsZi5ldmVudHMubGVuZ3RoIC0gMV1bMV0pLnNsaWNlKDEsIC0xKSk7XG4gICAgaWYgKGNvZGUgPT09IDU4KSB7XG4gICAgICBlZmZlY3RzLmVudGVyKFwiZGVmaW5pdGlvbk1hcmtlclwiKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImRlZmluaXRpb25NYXJrZXJcIik7XG4gICAgICByZXR1cm4gbWFya2VyQWZ0ZXI7XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgbWFya2VyLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbWFya2VyQWZ0ZXIoY29kZSkge1xuICAgIC8vIE5vdGU6IHdoaXRlc3BhY2UgaXMgb3B0aW9uYWwuXG4gICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCBkZXN0aW5hdGlvbkJlZm9yZSkoY29kZSkgOiBkZXN0aW5hdGlvbkJlZm9yZShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWZvcmUgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGIgXCJjXCJcbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGVzdGluYXRpb25CZWZvcmUoY29kZSkge1xuICAgIHJldHVybiBmYWN0b3J5RGVzdGluYXRpb24oZWZmZWN0cywgZGVzdGluYXRpb25BZnRlcixcbiAgICAvLyBOb3RlOiB3ZSBkb25cdTIwMTl0IG5lZWQgdG8gcmVzZXQgdGhlIHdheSBgbWFya2Rvd24tcnNgIGRvZXMuXG4gICAgbm9rLCBcImRlZmluaXRpb25EZXN0aW5hdGlvblwiLCBcImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWxcIiwgXCJkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsTWFya2VyXCIsIFwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uUmF3XCIsIFwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nXCIpKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBkZXN0aW5hdGlvbkFmdGVyKGNvZGUpIHtcbiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHRpdGxlQmVmb3JlLCBhZnRlciwgYWZ0ZXIpKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGRlZmluaXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGJcbiAgICogICAgICAgICAgIF5cbiAgICogPiB8IFthXTogYiBcImNcIlxuICAgKiAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlKSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlcldoaXRlc3BhY2UsIFwid2hpdGVzcGFjZVwiKShjb2RlKSA6IGFmdGVyV2hpdGVzcGFjZShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBkZWZpbml0aW9uLCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiXG4gICAqICAgICAgICAgICBeXG4gICAqID4gfCBbYV06IGIgXCJjXCJcbiAgICogICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcldoaXRlc3BhY2UoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KFwiZGVmaW5pdGlvblwiKTtcblxuICAgICAgLy8gTm90ZTogd2UgZG9uXHUyMDE5dCBjYXJlIGFib3V0IHVuaXF1ZW5lc3MuXG4gICAgICAvLyBJdFx1MjAxOXMgbGlrZWx5IHRoYXQgdGhhdCBkb2Vzblx1MjAxOXQgaGFwcGVuIHZlcnkgZnJlcXVlbnRseS5cbiAgICAgIC8vIEl0IGlzIG1vcmUgbGlrZWx5IHRoYXQgaXQgd2FzdGVzIHByZWNpb3VzIHRpbWUuXG4gICAgICBzZWxmLnBhcnNlci5kZWZpbmVkLnB1c2goaWRlbnRpZmllcik7XG5cbiAgICAgIC8vIFRvIGRvOiBgbWFya2Rvd24tcnNgIGludGVycnVwdC5cbiAgICAgIC8vIC8vIFlvdVx1MjAxOWQgYmUgaW50ZXJydXB0aW5nLlxuICAgICAgLy8gdG9rZW5pemVyLmludGVycnVwdCA9IHRydWVcbiAgICAgIHJldHVybiBvayhjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZVRpdGxlQmVmb3JlKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgcmV0dXJuIHRpdGxlQmVmb3JlO1xuXG4gIC8qKlxuICAgKiBBZnRlciBkZXN0aW5hdGlvbiwgYXQgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXTogYlxuICAgKiAgICAgICAgICAgXlxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0aXRsZUJlZm9yZShjb2RlKSB7XG4gICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCBiZWZvcmVNYXJrZXIpKGNvZGUpIDogbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0IHRpdGxlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgW2FdOiBiXG4gICAqID4gfCBcImNcIlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmVmb3JlTWFya2VyKGNvZGUpIHtcbiAgICByZXR1cm4gZmFjdG9yeVRpdGxlKGVmZmVjdHMsIHRpdGxlQWZ0ZXIsIG5vaywgXCJkZWZpbml0aW9uVGl0bGVcIiwgXCJkZWZpbml0aW9uVGl0bGVNYXJrZXJcIiwgXCJkZWZpbml0aW9uVGl0bGVTdHJpbmdcIikoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgdGl0bGUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGIgXCJjXCJcbiAgICogICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0aXRsZUFmdGVyKGNvZGUpIHtcbiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlKSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCB0aXRsZUFmdGVyT3B0aW9uYWxXaGl0ZXNwYWNlLCBcIndoaXRlc3BhY2VcIikoY29kZSkgOiB0aXRsZUFmdGVyT3B0aW9uYWxXaGl0ZXNwYWNlKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHRpdGxlLCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGl0bGVBZnRlck9wdGlvbmFsV2hpdGVzcGFjZShjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpID8gb2soY29kZSkgOiBub2soY29kZSk7XG4gIH1cbn0iLCAiLyoqXG4gKiBAaW1wb3J0IHtcbiAqICAgQ29uc3RydWN0LFxuICogICBTdGF0ZSxcbiAqICAgVG9rZW5pemVDb250ZXh0LFxuICogICBUb2tlbml6ZXJcbiAqIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuaW1wb3J0IHsgbWFya2Rvd25MaW5lRW5kaW5nIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGhhcmRCcmVha0VzY2FwZSA9IHtcbiAgbmFtZTogJ2hhcmRCcmVha0VzY2FwZScsXG4gIHRva2VuaXplOiB0b2tlbml6ZUhhcmRCcmVha0VzY2FwZVxufTtcblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVIYXJkQnJlYWtFc2NhcGUoZWZmZWN0cywgb2ssIG5vaykge1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGEgaGFyZCBicmVhayAoZXNjYXBlKS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGFcXFxuICAgKiAgICAgIF5cbiAgICogICB8IGJcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKFwiaGFyZEJyZWFrRXNjYXBlXCIpO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICByZXR1cm4gYWZ0ZXI7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYFxcYCwgYXQgZW9sLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYVxcXG4gICAqICAgICAgIF5cbiAgICogICB8IGJcbiAgICogYGBgXG4gICAqXG4gICAqICBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KFwiaGFyZEJyZWFrRXNjYXBlXCIpO1xuICAgICAgcmV0dXJuIG9rKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG59IiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIENvbnN0cnVjdCxcbiAqICAgUmVzb2x2ZXIsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHQsXG4gKiAgIFRva2VuaXplcixcbiAqICAgVG9rZW5cbiAqIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuaW1wb3J0IHsgZmFjdG9yeVNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnO1xuaW1wb3J0IHsgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZSwgbWFya2Rvd25MaW5lRW5kaW5nLCBtYXJrZG93blNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbmltcG9ydCB7IHNwbGljZSB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNodW5rZWQnO1xuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgaGVhZGluZ0F0eCA9IHtcbiAgbmFtZTogJ2hlYWRpbmdBdHgnLFxuICByZXNvbHZlOiByZXNvbHZlSGVhZGluZ0F0eCxcbiAgdG9rZW5pemU6IHRva2VuaXplSGVhZGluZ0F0eFxufTtcblxuLyoqIEB0eXBlIHtSZXNvbHZlcn0gKi9cbmZ1bmN0aW9uIHJlc29sdmVIZWFkaW5nQXR4KGV2ZW50cywgY29udGV4dCkge1xuICBsZXQgY29udGVudEVuZCA9IGV2ZW50cy5sZW5ndGggLSAyO1xuICBsZXQgY29udGVudFN0YXJ0ID0gMztcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IGNvbnRlbnQ7XG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGxldCB0ZXh0O1xuXG4gIC8vIFByZWZpeCB3aGl0ZXNwYWNlLCBwYXJ0IG9mIHRoZSBvcGVuaW5nLlxuICBpZiAoZXZlbnRzW2NvbnRlbnRTdGFydF1bMV0udHlwZSA9PT0gXCJ3aGl0ZXNwYWNlXCIpIHtcbiAgICBjb250ZW50U3RhcnQgKz0gMjtcbiAgfVxuXG4gIC8vIFN1ZmZpeCB3aGl0ZXNwYWNlLCBwYXJ0IG9mIHRoZSBjbG9zaW5nLlxuICBpZiAoY29udGVudEVuZCAtIDIgPiBjb250ZW50U3RhcnQgJiYgZXZlbnRzW2NvbnRlbnRFbmRdWzFdLnR5cGUgPT09IFwid2hpdGVzcGFjZVwiKSB7XG4gICAgY29udGVudEVuZCAtPSAyO1xuICB9XG4gIGlmIChldmVudHNbY29udGVudEVuZF1bMV0udHlwZSA9PT0gXCJhdHhIZWFkaW5nU2VxdWVuY2VcIiAmJiAoY29udGVudFN0YXJ0ID09PSBjb250ZW50RW5kIC0gMSB8fCBjb250ZW50RW5kIC0gNCA+IGNvbnRlbnRTdGFydCAmJiBldmVudHNbY29udGVudEVuZCAtIDJdWzFdLnR5cGUgPT09IFwid2hpdGVzcGFjZVwiKSkge1xuICAgIGNvbnRlbnRFbmQgLT0gY29udGVudFN0YXJ0ICsgMSA9PT0gY29udGVudEVuZCA/IDIgOiA0O1xuICB9XG4gIGlmIChjb250ZW50RW5kID4gY29udGVudFN0YXJ0KSB7XG4gICAgY29udGVudCA9IHtcbiAgICAgIHR5cGU6IFwiYXR4SGVhZGluZ1RleHRcIixcbiAgICAgIHN0YXJ0OiBldmVudHNbY29udGVudFN0YXJ0XVsxXS5zdGFydCxcbiAgICAgIGVuZDogZXZlbnRzW2NvbnRlbnRFbmRdWzFdLmVuZFxuICAgIH07XG4gICAgdGV4dCA9IHtcbiAgICAgIHR5cGU6IFwiY2h1bmtUZXh0XCIsXG4gICAgICBzdGFydDogZXZlbnRzW2NvbnRlbnRTdGFydF1bMV0uc3RhcnQsXG4gICAgICBlbmQ6IGV2ZW50c1tjb250ZW50RW5kXVsxXS5lbmQsXG4gICAgICBjb250ZW50VHlwZTogXCJ0ZXh0XCJcbiAgICB9O1xuICAgIHNwbGljZShldmVudHMsIGNvbnRlbnRTdGFydCwgY29udGVudEVuZCAtIGNvbnRlbnRTdGFydCArIDEsIFtbJ2VudGVyJywgY29udGVudCwgY29udGV4dF0sIFsnZW50ZXInLCB0ZXh0LCBjb250ZXh0XSwgWydleGl0JywgdGV4dCwgY29udGV4dF0sIFsnZXhpdCcsIGNvbnRlbnQsIGNvbnRleHRdXSk7XG4gIH1cbiAgcmV0dXJuIGV2ZW50cztcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVIZWFkaW5nQXR4KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgbGV0IHNpemUgPSAwO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGEgaGVhZGluZyAoYXR4KS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICMjIGFhXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgLy8gVG8gZG86IHBhcnNlIGluZGVudCBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgZWZmZWN0cy5lbnRlcihcImF0eEhlYWRpbmdcIik7XG4gICAgcmV0dXJuIGJlZm9yZShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLCBhdCBgI2AuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAjIyBhYVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmVmb3JlKGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKFwiYXR4SGVhZGluZ1NlcXVlbmNlXCIpO1xuICAgIHJldHVybiBzZXF1ZW5jZU9wZW4oY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gb3BlbmluZyBzZXF1ZW5jZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICMjIGFhXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzZXF1ZW5jZU9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSAzNSAmJiBzaXplKysgPCA2KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gc2VxdWVuY2VPcGVuO1xuICAgIH1cblxuICAgIC8vIEFsd2F5cyBhdCBsZWFzdCBvbmUgYCNgLlxuICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdChcImF0eEhlYWRpbmdTZXF1ZW5jZVwiKTtcbiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHNvbWV0aGluZywgYmVmb3JlIHNvbWV0aGluZyBlbHNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgIyMgYWFcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDM1KSB7XG4gICAgICBlZmZlY3RzLmVudGVyKFwiYXR4SGVhZGluZ1NlcXVlbmNlXCIpO1xuICAgICAgcmV0dXJuIHNlcXVlbmNlRnVydGhlcihjb2RlKTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJhdHhIZWFkaW5nXCIpO1xuICAgICAgLy8gVG8gZG86IGludGVycnVwdCBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgICAvLyAvLyBGZWVsIGZyZWUgdG8gaW50ZXJydXB0LlxuICAgICAgLy8gdG9rZW5pemVyLmludGVycnVwdCA9IGZhbHNlXG4gICAgICByZXR1cm4gb2soY29kZSk7XG4gICAgfVxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGF0QnJlYWssIFwid2hpdGVzcGFjZVwiKShjb2RlKTtcbiAgICB9XG5cbiAgICAvLyBUbyBkbzogZ2VuZXJhdGUgYGRhdGFgIHRva2VucywgYWRkIHRoZSBgdGV4dGAgdG9rZW4gbGF0ZXIuXG4gICAgLy8gTmVlZHMgZWRpdCBtYXAsIHNlZTogYG1hcmtkb3duLnJzYC5cbiAgICBlZmZlY3RzLmVudGVyKFwiYXR4SGVhZGluZ1RleHRcIik7XG4gICAgcmV0dXJuIGRhdGEoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gZnVydGhlciBzZXF1ZW5jZSAoYWZ0ZXIgd2hpdGVzcGFjZSkuXG4gICAqXG4gICAqIENvdWxkIGJlIG5vcm1hbCBcdTIwMUN2aXNpYmxlXHUyMDFEIGhhc2hlcyBpbiB0aGUgaGVhZGluZyBvciBhIGZpbmFsIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgIyMgYWEgIyNcbiAgICogICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHNlcXVlbmNlRnVydGhlcihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDM1KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gc2VxdWVuY2VGdXJ0aGVyO1xuICAgIH1cbiAgICBlZmZlY3RzLmV4aXQoXCJhdHhIZWFkaW5nU2VxdWVuY2VcIik7XG4gICAgcmV0dXJuIGF0QnJlYWsoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gdGV4dC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICMjIGFhXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBkYXRhKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSAzNSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJhdHhIZWFkaW5nVGV4dFwiKTtcbiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn0iLCAiLyoqXG4gKiBMaXN0IG9mIGxvd2VyY2FzZSBIVE1MIFx1MjAxQ2Jsb2NrXHUyMDFEIHRhZyBuYW1lcy5cbiAqXG4gKiBUaGUgbGlzdCwgd2hlbiBwYXJzaW5nIEhUTUwgKGZsb3cpLCByZXN1bHRzIGluIG1vcmUgcmVsYXhlZCBydWxlcyAoY29uZGl0aW9uXG4gKiA2KS5cbiAqIEJlY2F1c2UgdGhleSBhcmUga25vd24gYmxvY2tzLCB0aGUgSFRNTC1saWtlIHN5bnRheCBkb2Vzblx1MjAxOXQgaGF2ZSB0byBiZVxuICogc3RyaWN0bHkgcGFyc2VkLlxuICogRm9yIHRhZyBuYW1lcyBub3QgaW4gdGhpcyBsaXN0LCBhIG1vcmUgc3RyaWN0IGFsZ29yaXRobSAoY29uZGl0aW9uIDcpIGlzIHVzZWRcbiAqIHRvIGRldGVjdCB3aGV0aGVyIHRoZSBIVE1MLWxpa2Ugc3ludGF4IGlzIHNlZW4gYXMgSFRNTCAoZmxvdykgb3Igbm90LlxuICpcbiAqIFRoaXMgaXMgY29waWVkIGZyb206XG4gKiA8aHR0cHM6Ly9zcGVjLmNvbW1vbm1hcmsub3JnLzAuMzAvI2h0bWwtYmxvY2tzPi5cbiAqXG4gKiA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogYHNlYXJjaGAgd2FzIGFkZGVkIGluIGBDb21tb25NYXJrQDAuMzFgLlxuICovXG5leHBvcnQgY29uc3QgaHRtbEJsb2NrTmFtZXMgPSBbXG4gICdhZGRyZXNzJyxcbiAgJ2FydGljbGUnLFxuICAnYXNpZGUnLFxuICAnYmFzZScsXG4gICdiYXNlZm9udCcsXG4gICdibG9ja3F1b3RlJyxcbiAgJ2JvZHknLFxuICAnY2FwdGlvbicsXG4gICdjZW50ZXInLFxuICAnY29sJyxcbiAgJ2NvbGdyb3VwJyxcbiAgJ2RkJyxcbiAgJ2RldGFpbHMnLFxuICAnZGlhbG9nJyxcbiAgJ2RpcicsXG4gICdkaXYnLFxuICAnZGwnLFxuICAnZHQnLFxuICAnZmllbGRzZXQnLFxuICAnZmlnY2FwdGlvbicsXG4gICdmaWd1cmUnLFxuICAnZm9vdGVyJyxcbiAgJ2Zvcm0nLFxuICAnZnJhbWUnLFxuICAnZnJhbWVzZXQnLFxuICAnaDEnLFxuICAnaDInLFxuICAnaDMnLFxuICAnaDQnLFxuICAnaDUnLFxuICAnaDYnLFxuICAnaGVhZCcsXG4gICdoZWFkZXInLFxuICAnaHInLFxuICAnaHRtbCcsXG4gICdpZnJhbWUnLFxuICAnbGVnZW5kJyxcbiAgJ2xpJyxcbiAgJ2xpbmsnLFxuICAnbWFpbicsXG4gICdtZW51JyxcbiAgJ21lbnVpdGVtJyxcbiAgJ25hdicsXG4gICdub2ZyYW1lcycsXG4gICdvbCcsXG4gICdvcHRncm91cCcsXG4gICdvcHRpb24nLFxuICAncCcsXG4gICdwYXJhbScsXG4gICdzZWFyY2gnLFxuICAnc2VjdGlvbicsXG4gICdzdW1tYXJ5JyxcbiAgJ3RhYmxlJyxcbiAgJ3Rib2R5JyxcbiAgJ3RkJyxcbiAgJ3Rmb290JyxcbiAgJ3RoJyxcbiAgJ3RoZWFkJyxcbiAgJ3RpdGxlJyxcbiAgJ3RyJyxcbiAgJ3RyYWNrJyxcbiAgJ3VsJ1xuXVxuXG4vKipcbiAqIExpc3Qgb2YgbG93ZXJjYXNlIEhUTUwgXHUyMDFDcmF3XHUyMDFEIHRhZyBuYW1lcy5cbiAqXG4gKiBUaGUgbGlzdCwgd2hlbiBwYXJzaW5nIEhUTUwgKGZsb3cpLCByZXN1bHRzIGluIEhUTUwgdGhhdCBjYW4gaW5jbHVkZSBsaW5lc1xuICogd2l0aG91dCBleGl0aW5nLCB1bnRpbCBhIGNsb3NpbmcgdGFnIGFsc28gaW4gdGhpcyBsaXN0IGlzIGZvdW5kIChjb25kaXRpb25cbiAqIDEpLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIGNvcGllZCBmcm9tOlxuICogPGh0dHBzOi8vc3BlYy5jb21tb25tYXJrLm9yZy8wLjMwLyNodG1sLWJsb2Nrcz4uXG4gKlxuICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IGB0ZXh0YXJlYWAgd2FzIGFkZGVkIGluIGBDb21tb25NYXJrQDAuMzBgLlxuICovXG5leHBvcnQgY29uc3QgaHRtbFJhd05hbWVzID0gWydwcmUnLCAnc2NyaXB0JywgJ3N0eWxlJywgJ3RleHRhcmVhJ11cbiIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb2RlLFxuICogICBDb25zdHJ1Y3QsXG4gKiAgIFJlc29sdmVyLFxuICogICBTdGF0ZSxcbiAqICAgVG9rZW5pemVDb250ZXh0LFxuICogICBUb2tlbml6ZXJcbiAqIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuaW1wb3J0IHsgYXNjaWlBbHBoYW51bWVyaWMsIGFzY2lpQWxwaGEsIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UsIG1hcmtkb3duTGluZUVuZGluZywgbWFya2Rvd25TcGFjZSB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcic7XG5pbXBvcnQgeyBodG1sQmxvY2tOYW1lcywgaHRtbFJhd05hbWVzIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtaHRtbC10YWctbmFtZSc7XG5pbXBvcnQgeyBibGFua0xpbmUgfSBmcm9tICcuL2JsYW5rLWxpbmUuanMnO1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBodG1sRmxvdyA9IHtcbiAgY29uY3JldGU6IHRydWUsXG4gIG5hbWU6ICdodG1sRmxvdycsXG4gIHJlc29sdmVUbzogcmVzb2x2ZVRvSHRtbEZsb3csXG4gIHRva2VuaXplOiB0b2tlbml6ZUh0bWxGbG93XG59O1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IGJsYW5rTGluZUJlZm9yZSA9IHtcbiAgcGFydGlhbDogdHJ1ZSxcbiAgdG9rZW5pemU6IHRva2VuaXplQmxhbmtMaW5lQmVmb3JlXG59O1xuY29uc3Qgbm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0ID0ge1xuICBwYXJ0aWFsOiB0cnVlLFxuICB0b2tlbml6ZTogdG9rZW5pemVOb25MYXp5Q29udGludWF0aW9uU3RhcnRcbn07XG5cbi8qKiBAdHlwZSB7UmVzb2x2ZXJ9ICovXG5mdW5jdGlvbiByZXNvbHZlVG9IdG1sRmxvdyhldmVudHMpIHtcbiAgbGV0IGluZGV4ID0gZXZlbnRzLmxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAoZXZlbnRzW2luZGV4XVswXSA9PT0gJ2VudGVyJyAmJiBldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09IFwiaHRtbEZsb3dcIikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChpbmRleCA+IDEgJiYgZXZlbnRzW2luZGV4IC0gMl1bMV0udHlwZSA9PT0gXCJsaW5lUHJlZml4XCIpIHtcbiAgICAvLyBBZGQgdGhlIHByZWZpeCBzdGFydCB0byB0aGUgSFRNTCB0b2tlbi5cbiAgICBldmVudHNbaW5kZXhdWzFdLnN0YXJ0ID0gZXZlbnRzW2luZGV4IC0gMl1bMV0uc3RhcnQ7XG4gICAgLy8gQWRkIHRoZSBwcmVmaXggc3RhcnQgdG8gdGhlIEhUTUwgbGluZSB0b2tlbi5cbiAgICBldmVudHNbaW5kZXggKyAxXVsxXS5zdGFydCA9IGV2ZW50c1tpbmRleCAtIDJdWzFdLnN0YXJ0O1xuICAgIC8vIFJlbW92ZSB0aGUgbGluZSBwcmVmaXguXG4gICAgZXZlbnRzLnNwbGljZShpbmRleCAtIDIsIDIpO1xuICB9XG4gIHJldHVybiBldmVudHM7XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqICAgQ29udGV4dC5cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplSHRtbEZsb3coZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBtYXJrZXI7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IGNsb3NpbmdUYWc7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICBsZXQgYnVmZmVyO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IGluZGV4O1xuICAvKiogQHR5cGUge0NvZGV9ICovXG4gIGxldCBtYXJrZXJCO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIEhUTUwgKGZsb3cpLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPHggLz5cbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAvLyBUbyBkbzogcGFyc2UgaW5kZW50IGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgICByZXR1cm4gYmVmb3JlKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0IGA8YCwgYWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDx4IC8+XG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBiZWZvcmUoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoXCJodG1sRmxvd1wiKTtcbiAgICBlZmZlY3RzLmVudGVyKFwiaHRtbEZsb3dEYXRhXCIpO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICByZXR1cm4gb3BlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPGAsIGF0IHRhZyBuYW1lIG9yIG90aGVyIHN0dWZmLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPHggLz5cbiAgICogICAgICBeXG4gICAqID4gfCA8IWRvY3R5cGU+XG4gICAqICAgICAgXlxuICAgKiA+IHwgPCEtLXh4eC0tPlxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSAzMykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uT3BlbjtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDQ3KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBjbG9zaW5nVGFnID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0YWdDbG9zZVN0YXJ0O1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gNjMpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIG1hcmtlciA9IDM7XG4gICAgICAvLyBUbyBkbzpcbiAgICAgIC8vIHRva2VuaXplci5jb25jcmV0ZSA9IHRydWVcbiAgICAgIC8vIFRvIGRvOiB1c2UgYG1hcmtkb3duLXJzYCBzdHlsZSBpbnRlcnJ1cHQuXG4gICAgICAvLyBXaGlsZSB3ZVx1MjAxOXJlIGluIGFuIGluc3RydWN0aW9uIGluc3RlYWQgb2YgYSBkZWNsYXJhdGlvbiwgd2VcdTIwMTlyZSBvbiBhIGA/YFxuICAgICAgLy8gcmlnaHQgbm93LCBzbyB3ZSBkbyBuZWVkIHRvIHNlYXJjaCBmb3IgYD5gLCBzaW1pbGFyIHRvIGRlY2xhcmF0aW9ucy5cbiAgICAgIHJldHVybiBzZWxmLmludGVycnVwdCA/IG9rIDogY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7XG4gICAgfVxuXG4gICAgLy8gQVNDSUkgYWxwaGFiZXRpY2FsLlxuICAgIGlmIChhc2NpaUFscGhhKGNvZGUpKSB7XG4gICAgICAvLyBBbHdheXMgdGhlIGNhc2UuXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBidWZmZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgcmV0dXJuIHRhZ05hbWU7XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDwhYCwgYXQgZGVjbGFyYXRpb24sIGNvbW1lbnQsIG9yIENEQVRBLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPCFkb2N0eXBlPlxuICAgKiAgICAgICBeXG4gICAqID4gfCA8IS0teHh4LS0+XG4gICAqICAgICAgIF5cbiAgICogPiB8IDwhW0NEQVRBWz4mPF1dPlxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBkZWNsYXJhdGlvbk9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0NSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgbWFya2VyID0gMjtcbiAgICAgIHJldHVybiBjb21tZW50T3Blbkluc2lkZTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDkxKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBtYXJrZXIgPSA1O1xuICAgICAgaW5kZXggPSAwO1xuICAgICAgcmV0dXJuIGNkYXRhT3Blbkluc2lkZTtcbiAgICB9XG5cbiAgICAvLyBBU0NJSSBhbHBoYWJldGljYWwuXG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIG1hcmtlciA9IDQ7XG4gICAgICAvLyAvLyBEbyBub3QgZm9ybSBjb250YWluZXJzLlxuICAgICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ID8gb2sgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPCEtYCwgaW5zaWRlIGEgY29tbWVudCwgYXQgYW5vdGhlciBgLWAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8IS0teHh4LS0+XG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21tZW50T3Blbkluc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQ1KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICAvLyAvLyBEbyBub3QgZm9ybSBjb250YWluZXJzLlxuICAgICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ID8gb2sgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPCFbYCwgaW5zaWRlIENEQVRBLCBleHBlY3RpbmcgYENEQVRBW2AuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8IVtDREFUQVs+JjxdXT5cbiAgICogICAgICAgIF5eXl5eXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY2RhdGFPcGVuSW5zaWRlKGNvZGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IFwiQ0RBVEFbXCI7XG4gICAgaWYgKGNvZGUgPT09IHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgrKykpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGlmIChpbmRleCA9PT0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIC8vIC8vIERvIG5vdCBmb3JtIGNvbnRhaW5lcnMuXG4gICAgICAgIC8vIHRva2VuaXplci5jb25jcmV0ZSA9IHRydWVcbiAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ID8gb2sgOiBjb250aW51YXRpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gY2RhdGFPcGVuSW5zaWRlO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA8L2AsIGluIGNsb3NpbmcgdGFnLCBhdCB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwveD5cbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnQ2xvc2VTdGFydChjb2RlKSB7XG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIC8vIEFsd2F5cyB0aGUgY2FzZS5cbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGJ1ZmZlciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICByZXR1cm4gdGFnTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhYj5cbiAgICogICAgICBeXlxuICAgKiA+IHwgPC9hYj5cbiAgICogICAgICAgXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ05hbWUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IDQ3IHx8IGNvZGUgPT09IDYyIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkpIHtcbiAgICAgIGNvbnN0IHNsYXNoID0gY29kZSA9PT0gNDc7XG4gICAgICBjb25zdCBuYW1lID0gYnVmZmVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoIXNsYXNoICYmICFjbG9zaW5nVGFnICYmIGh0bWxSYXdOYW1lcy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICBtYXJrZXIgPSAxO1xuICAgICAgICAvLyAvLyBEbyBub3QgZm9ybSBjb250YWluZXJzLlxuICAgICAgICAvLyB0b2tlbml6ZXIuY29uY3JldGUgPSB0cnVlXG4gICAgICAgIHJldHVybiBzZWxmLmludGVycnVwdCA/IG9rKGNvZGUpIDogY29udGludWF0aW9uKGNvZGUpO1xuICAgICAgfVxuICAgICAgaWYgKGh0bWxCbG9ja05hbWVzLmluY2x1ZGVzKGJ1ZmZlci50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICBtYXJrZXIgPSA2O1xuICAgICAgICBpZiAoc2xhc2gpIHtcbiAgICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICAgICAgcmV0dXJuIGJhc2ljU2VsZkNsb3Npbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAvLyBEbyBub3QgZm9ybSBjb250YWluZXJzLlxuICAgICAgICAvLyB0b2tlbml6ZXIuY29uY3JldGUgPSB0cnVlXG4gICAgICAgIHJldHVybiBzZWxmLmludGVycnVwdCA/IG9rKGNvZGUpIDogY29udGludWF0aW9uKGNvZGUpO1xuICAgICAgfVxuICAgICAgbWFya2VyID0gNztcbiAgICAgIC8vIERvIG5vdCBzdXBwb3J0IGNvbXBsZXRlIEhUTUwgd2hlbiBpbnRlcnJ1cHRpbmcuXG4gICAgICByZXR1cm4gc2VsZi5pbnRlcnJ1cHQgJiYgIXNlbGYucGFyc2VyLmxhenlbc2VsZi5ub3coKS5saW5lXSA/IG5vayhjb2RlKSA6IGNsb3NpbmdUYWcgPyBjb21wbGV0ZUNsb3NpbmdUYWdBZnRlcihjb2RlKSA6IGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlKTtcbiAgICB9XG5cbiAgICAvLyBBU0NJSSBhbHBoYW51bWVyaWNhbCBhbmQgYC1gLlxuICAgIGlmIChjb2RlID09PSA0NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgYnVmZmVyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICByZXR1cm4gdGFnTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBjbG9zaW5nIHNsYXNoIG9mIGEgYmFzaWMgdGFnIG5hbWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8ZGl2Lz5cbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmFzaWNTZWxmQ2xvc2luZyhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDYyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICAvLyAvLyBEbyBub3QgZm9ybSBjb250YWluZXJzLlxuICAgICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ID8gb2sgOiBjb250aW51YXRpb247XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgY2xvc2luZyBzbGFzaCBvZiBhIGNvbXBsZXRlIHRhZyBuYW1lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPHgvPlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXIoY29kZSkge1xuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXI7XG4gICAgfVxuICAgIHJldHVybiBjb21wbGV0ZUVuZChjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBhbiBhdHRyaWJ1dGUgbmFtZS5cbiAgICpcbiAgICogQXQgZmlyc3QsIHRoaXMgc3RhdGUgaXMgdXNlZCBhZnRlciBhIGNvbXBsZXRlIHRhZyBuYW1lLCBhZnRlciB3aGl0ZXNwYWNlLFxuICAgKiB3aGVyZSBpdCBleHBlY3RzIG9wdGlvbmFsIGF0dHJpYnV0ZXMgb3IgdGhlIGVuZCBvZiB0aGUgdGFnLlxuICAgKiBJdCBpcyBhbHNvIHJldXNlZCBhZnRlciBhdHRyaWJ1dGVzLCB3aGVuIGV4cGVjdGluZyBtb3JlIG9wdGlvbmFsXG4gICAqIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YSAvPlxuICAgKiAgICAgICAgXlxuICAgKiA+IHwgPGEgOmI+XG4gICAqICAgICAgICBeXG4gICAqID4gfCA8YSBfYj5cbiAgICogICAgICAgIF5cbiAgICogPiB8IDxhIGI+XG4gICAqICAgICAgICBeXG4gICAqID4gfCA8YSA+XG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0Nykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGNvbXBsZXRlRW5kO1xuICAgIH1cblxuICAgIC8vIEFTQ0lJIGFscGhhbnVtZXJpY2FsIGFuZCBgOmAgYW5kIGBfYC5cbiAgICBpZiAoY29kZSA9PT0gNTggfHwgY29kZSA9PT0gOTUgfHwgYXNjaWlBbHBoYShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZTtcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmU7XG4gICAgfVxuICAgIHJldHVybiBjb21wbGV0ZUVuZChjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBhdHRyaWJ1dGUgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhIDpiPlxuICAgKiAgICAgICAgIF5cbiAgICogPiB8IDxhIF9iPlxuICAgKiAgICAgICAgIF5cbiAgICogPiB8IDxhIGI+XG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVOYW1lKGNvZGUpIHtcbiAgICAvLyBBU0NJSSBhbHBoYW51bWVyaWNhbCBhbmQgYC1gLCBgLmAsIGA6YCwgYW5kIGBfYC5cbiAgICBpZiAoY29kZSA9PT0gNDUgfHwgY29kZSA9PT0gNDYgfHwgY29kZSA9PT0gNTggfHwgY29kZSA9PT0gOTUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWU7XG4gICAgfVxuICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVBZnRlcihjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBhdHRyaWJ1dGUgbmFtZSwgYXQgYW4gb3B0aW9uYWwgaW5pdGlhbGl6ZXIsIHRoZSBlbmQgb2YgdGhlIHRhZywgb3JcbiAgICogd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhIGI+XG4gICAqICAgICAgICAgXlxuICAgKiA+IHwgPGEgYj1jPlxuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjEpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlQmVmb3JlO1xuICAgIH1cbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQmVmb3JlKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZm9yZSB1bnF1b3RlZCwgZG91YmxlIHF1b3RlZCwgb3Igc2luZ2xlIHF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUsIGFsbG93aW5nXG4gICAqIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YSBiPWM+XG4gICAqICAgICAgICAgIF5cbiAgICogPiB8IDxhIGI9XCJjXCI+XG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVCZWZvcmUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IDYwIHx8IGNvZGUgPT09IDYxIHx8IGNvZGUgPT09IDYyIHx8IGNvZGUgPT09IDk2KSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gMzQgfHwgY29kZSA9PT0gMzkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIG1hcmtlckIgPSBjb2RlO1xuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWQ7XG4gICAgfVxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZUJlZm9yZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBkb3VibGUgb3Igc2luZ2xlIHF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YSBiPVwiY1wiPlxuICAgKiAgICAgICAgICAgXlxuICAgKiA+IHwgPGEgYj0nYyc+XG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbWFya2VyQikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgbWFya2VyQiA9IG51bGw7XG4gICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVF1b3RlZEFmdGVyO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVF1b3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YSBiPWM+XG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gMzQgfHwgY29kZSA9PT0gMzkgfHwgY29kZSA9PT0gNDcgfHwgY29kZSA9PT0gNjAgfHwgY29kZSA9PT0gNjEgfHwgY29kZSA9PT0gNjIgfHwgY29kZSA9PT0gOTYgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSkge1xuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBkb3VibGUgb3Igc2luZ2xlIHF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUsIGJlZm9yZSB3aGl0ZXNwYWNlIG9yIHRoZVxuICAgKiBlbmQgb2YgdGhlIHRhZy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhIGI9XCJjXCI+XG4gICAqICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVF1b3RlZEFmdGVyKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNDcgfHwgY29kZSA9PT0gNjIgfHwgbWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgb2YgYSBjb21wbGV0ZSB0YWcgd2hlcmUgb25seSBhbiBgPmAgaXMgYWxsb3dlZC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhIGI9XCJjXCI+XG4gICAqICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlRW5kKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb21wbGV0ZUFmdGVyO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA+YCBpbiBhIGNvbXBsZXRlIHRhZy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDx4PlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGxldGVBZnRlcihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICAvLyAvLyBEbyBub3QgZm9ybSBjb250YWluZXJzLlxuICAgICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlKTtcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb21wbGV0ZUFmdGVyO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNvbnRpbnVhdGlvbiBvZiBhbnkgSFRNTCBraW5kLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPCEtLXh4eC0tPlxuICAgKiAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb24oY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0NSAmJiBtYXJrZXIgPT09IDIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb250aW51YXRpb25Db21tZW50SW5zaWRlO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gNjAgJiYgbWFya2VyID09PSAxKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gY29udGludWF0aW9uUmF3VGFnT3BlbjtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDYyICYmIG1hcmtlciA9PT0gNCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gNjMgJiYgbWFya2VyID09PSAzKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSA5MyAmJiBtYXJrZXIgPT09IDUpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb250aW51YXRpb25DZGF0YUluc2lkZTtcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSAmJiAobWFya2VyID09PSA2IHx8IG1hcmtlciA9PT0gNykpIHtcbiAgICAgIGVmZmVjdHMuZXhpdChcImh0bWxGbG93RGF0YVwiKTtcbiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKGJsYW5rTGluZUJlZm9yZSwgY29udGludWF0aW9uQWZ0ZXIsIGNvbnRpbnVhdGlvblN0YXJ0KShjb2RlKTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJodG1sRmxvd0RhdGFcIik7XG4gICAgICByZXR1cm4gY29udGludWF0aW9uU3RhcnQoY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICByZXR1cm4gY29udGludWF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNvbnRpbnVhdGlvbiwgYXQgZW9sLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPHg+XG4gICAqICAgICAgICBeXG4gICAqICAgfCBhc2RcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvblN0YXJ0KGNvZGUpIHtcbiAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhub25MYXp5Q29udGludWF0aW9uU3RhcnQsIGNvbnRpbnVhdGlvblN0YXJ0Tm9uTGF6eSwgY29udGludWF0aW9uQWZ0ZXIpKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNvbnRpbnVhdGlvbiwgYXQgZW9sLCBiZWZvcmUgbm9uLWxhenkgY29udGVudC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDx4PlxuICAgKiAgICAgICAgXlxuICAgKiAgIHwgYXNkXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb25TdGFydE5vbkxhenkoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoXCJsaW5lRW5kaW5nXCIpO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICBlZmZlY3RzLmV4aXQoXCJsaW5lRW5kaW5nXCIpO1xuICAgIHJldHVybiBjb250aW51YXRpb25CZWZvcmU7XG4gIH1cblxuICAvKipcbiAgICogSW4gY29udGludWF0aW9uLCBiZWZvcmUgbm9uLWxhenkgY29udGVudC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IDx4PlxuICAgKiA+IHwgYXNkXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb25CZWZvcmUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblN0YXJ0KGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKFwiaHRtbEZsb3dEYXRhXCIpO1xuICAgIHJldHVybiBjb250aW51YXRpb24oY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gY29tbWVudCBjb250aW51YXRpb24sIGFmdGVyIG9uZSBgLWAsIGV4cGVjdGluZyBhbm90aGVyLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPCEtLXh4eC0tPlxuICAgKiAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb25Db21tZW50SW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNDUpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByYXcgY29udGludWF0aW9uLCBhZnRlciBgPGAsIGF0IGAvYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxzY3JpcHQ+Y29uc29sZS5sb2coMSk8L3NjcmlwdD5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGludWF0aW9uUmF3VGFnT3Blbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQ3KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBidWZmZXIgPSAnJztcbiAgICAgIHJldHVybiBjb250aW51YXRpb25SYXdFbmRUYWc7XG4gICAgfVxuICAgIHJldHVybiBjb250aW51YXRpb24oY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gcmF3IGNvbnRpbnVhdGlvbiwgYWZ0ZXIgYDwvYCwgaW4gYSByYXcgdGFnIG5hbWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8c2NyaXB0PmNvbnNvbGUubG9nKDEpPC9zY3JpcHQ+XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvblJhd0VuZFRhZyhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDYyKSB7XG4gICAgICBjb25zdCBuYW1lID0gYnVmZmVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoaHRtbFJhd05hbWVzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlKTtcbiAgICB9XG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkgJiYgYnVmZmVyLmxlbmd0aCA8IDgpIHtcbiAgICAgIC8vIEFsd2F5cyB0aGUgY2FzZS5cbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGJ1ZmZlciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblJhd0VuZFRhZztcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjZGF0YSBjb250aW51YXRpb24sIGFmdGVyIGBdYCwgZXhwZWN0aW5nIGBdPmAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8IVtDREFUQVs+JjxdXT5cbiAgICogICAgICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb25DZGF0YUluc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDkzKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7XG4gICAgfVxuICAgIHJldHVybiBjb250aW51YXRpb24oY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gZGVjbGFyYXRpb24gb3IgaW5zdHJ1Y3Rpb24gY29udGludWF0aW9uLCBhdCBgPmAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8IS0tPlxuICAgKiAgICAgICAgIF5cbiAgICogPiB8IDw/PlxuICAgKiAgICAgICBeXG4gICAqID4gfCA8IXE+XG4gICAqICAgICAgICBeXG4gICAqID4gfCA8IS0tYWItLT5cbiAgICogICAgICAgICAgICAgXlxuICAgKiA+IHwgPCFbQ0RBVEFbPiY8XV0+XG4gICAqICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbkRlY2xhcmF0aW9uSW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZTtcbiAgICB9XG5cbiAgICAvLyBNb3JlIGRhc2hlcy5cbiAgICBpZiAoY29kZSA9PT0gNDUgJiYgbWFya2VyID09PSAyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7XG4gICAgfVxuICAgIHJldHVybiBjb250aW51YXRpb24oY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gY2xvc2VkIGNvbnRpbnVhdGlvbjogZXZlcnl0aGluZyB3ZSBnZXQgdW50aWwgdGhlIGVvbC9lb2YgaXMgcGFydCBvZiBpdC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwhZG9jdHlwZT5cbiAgICogICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb25DbG9zZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJodG1sRmxvd0RhdGFcIik7XG4gICAgICByZXR1cm4gY29udGludWF0aW9uQWZ0ZXIoY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICByZXR1cm4gY29udGludWF0aW9uQ2xvc2U7XG4gIH1cblxuICAvKipcbiAgICogRG9uZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwhZG9jdHlwZT5cbiAgICogICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb25BZnRlcihjb2RlKSB7XG4gICAgZWZmZWN0cy5leGl0KFwiaHRtbEZsb3dcIik7XG4gICAgLy8gLy8gRmVlbCBmcmVlIHRvIGludGVycnVwdC5cbiAgICAvLyB0b2tlbml6ZXIuaW50ZXJydXB0ID0gZmFsc2VcbiAgICAvLyAvLyBObyBsb25nZXIgY29uY3JldGUuXG4gICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gZmFsc2VcbiAgICByZXR1cm4gb2soY29kZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVOb25MYXp5Q29udGludWF0aW9uU3RhcnQoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgcmV0dXJuIHN0YXJ0O1xuXG4gIC8qKlxuICAgKiBBdCBlb2wsIGJlZm9yZSBjb250aW51YXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAqIGBgYGpzXG4gICAqICAgICAgICAgICAgXlxuICAgKiAgIHwgYlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoXCJsaW5lRW5kaW5nXCIpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KFwibGluZUVuZGluZ1wiKTtcbiAgICAgIHJldHVybiBhZnRlcjtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGNvbnRpbnVhdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8ICogYGBganNcbiAgICogPiB8IGJcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICByZXR1cm4gc2VsZi5wYXJzZXIubGF6eVtzZWxmLm5vdygpLmxpbmVdID8gbm9rKGNvZGUpIDogb2soY29kZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVCbGFua0xpbmVCZWZvcmUoZWZmZWN0cywgb2ssIG5vaykge1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIEJlZm9yZSBlb2wsIGV4cGVjdGluZyBibGFuayBsaW5lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGRpdj5cbiAgICogICAgICAgICAgXlxuICAgKiAgIHxcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKFwibGluZUVuZGluZ1wiKTtcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgZWZmZWN0cy5leGl0KFwibGluZUVuZGluZ1wiKTtcbiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGJsYW5rTGluZSwgb2ssIG5vayk7XG4gIH1cbn0iLCAiLyoqXG4gKiBAaW1wb3J0IHtcbiAqICAgQ29kZSxcbiAqICAgQ29uc3RydWN0LFxuICogICBTdGF0ZSxcbiAqICAgVG9rZW5pemVDb250ZXh0LFxuICogICBUb2tlbml6ZXJcbiAqIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuaW1wb3J0IHsgZmFjdG9yeVNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnO1xuaW1wb3J0IHsgYXNjaWlBbHBoYW51bWVyaWMsIGFzY2lpQWxwaGEsIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UsIG1hcmtkb3duTGluZUVuZGluZywgbWFya2Rvd25TcGFjZSB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcic7XG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBodG1sVGV4dCA9IHtcbiAgbmFtZTogJ2h0bWxUZXh0JyxcbiAgdG9rZW5pemU6IHRva2VuaXplSHRtbFRleHRcbn07XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqICAgQ29udGV4dC5cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplSHRtbFRleHQoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgLyoqIEB0eXBlIHtOb25OdWxsYWJsZTxDb2RlPiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IG1hcmtlcjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBpbmRleDtcbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgbGV0IHJldHVyblN0YXRlO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIEhUTUwgKHRleHQpLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8Yj4gY1xuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcihcImh0bWxUZXh0XCIpO1xuICAgIGVmZmVjdHMuZW50ZXIoXCJodG1sVGV4dERhdGFcIik7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIHJldHVybiBvcGVuO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA8YCwgYXQgdGFnIG5hbWUgb3Igb3RoZXIgc3R1ZmYuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiPiBjXG4gICAqICAgICAgICBeXG4gICAqID4gfCBhIDwhZG9jdHlwZT4gY1xuICAgKiAgICAgICAgXlxuICAgKiA+IHwgYSA8IS0tYi0tPiBjXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBvcGVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gMzMpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBkZWNsYXJhdGlvbk9wZW47XG4gICAgfVxuICAgIGlmIChjb2RlID09PSA0Nykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIHRhZ0Nsb3NlU3RhcnQ7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSA2Mykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGluc3RydWN0aW9uO1xuICAgIH1cblxuICAgIC8vIEFTQ0lJIGFscGhhYmV0aWNhbC5cbiAgICBpZiAoYXNjaWlBbHBoYShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIHRhZ09wZW47XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDwhYCwgYXQgZGVjbGFyYXRpb24sIGNvbW1lbnQsIG9yIENEQVRBLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IWRvY3R5cGU+IGNcbiAgICogICAgICAgICBeXG4gICAqID4gfCBhIDwhLS1iLS0+IGNcbiAgICogICAgICAgICBeXG4gICAqID4gfCBhIDwhW0NEQVRBWz4mPF1dPiBjXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGVjbGFyYXRpb25PcGVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNDUpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb21tZW50T3Blbkluc2lkZTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDkxKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBpbmRleCA9IDA7XG4gICAgICByZXR1cm4gY2RhdGFPcGVuSW5zaWRlO1xuICAgIH1cbiAgICBpZiAoYXNjaWlBbHBoYShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGEgY29tbWVudCwgYWZ0ZXIgYDwhLWAsIGF0IGFub3RoZXIgYC1gLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IS0tYi0tPiBjXG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbW1lbnRPcGVuSW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNDUpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb21tZW50RW5kO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNvbW1lbnQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDwhLS1iLS0+IGNcbiAgICogICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbW1lbnQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gNDUpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBjb21tZW50Q2xvc2U7XG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVyblN0YXRlID0gY29tbWVudDtcbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIGNvbW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogSW4gY29tbWVudCwgYWZ0ZXIgYC1gLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IS0tYi0tPiBjXG4gICAqICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbW1lbnRDbG9zZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQ1KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gY29tbWVudEVuZDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1lbnQoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gY29tbWVudCwgYWZ0ZXIgYC0tYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPCEtLWItLT4gY1xuICAgKiAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tbWVudEVuZChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGUgPT09IDYyID8gZW5kKGNvZGUpIDogY29kZSA9PT0gNDUgPyBjb21tZW50Q2xvc2UoY29kZSkgOiBjb21tZW50KGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA8IVtgLCBpbiBDREFUQSwgZXhwZWN0aW5nIGBDREFUQVtgLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IVtDREFUQVs+JjxdXT4gYlxuICAgKiAgICAgICAgICBeXl5eXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNkYXRhT3Blbkluc2lkZShjb2RlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBcIkNEQVRBW1wiO1xuICAgIGlmIChjb2RlID09PSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KyspKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gaW5kZXggPT09IHZhbHVlLmxlbmd0aCA/IGNkYXRhIDogY2RhdGFPcGVuSW5zaWRlO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIENEQVRBLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IVtDREFUQVs+JjxdXT4gYlxuICAgKiAgICAgICAgICAgICAgICBeXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNkYXRhKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDkzKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gY2RhdGFDbG9zZTtcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuU3RhdGUgPSBjZGF0YTtcbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIGNkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIENEQVRBLCBhZnRlciBgXWAsIGF0IGFub3RoZXIgYF1gLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IVtDREFUQVs+JjxdXT4gYlxuICAgKiAgICAgICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY2RhdGFDbG9zZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDkzKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gY2RhdGFFbmQ7XG4gICAgfVxuICAgIHJldHVybiBjZGF0YShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBDREFUQSwgYWZ0ZXIgYF1dYCwgYXQgYD5gLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IVtDREFUQVs+JjxdXT4gYlxuICAgKiAgICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNkYXRhRW5kKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjIpIHtcbiAgICAgIHJldHVybiBlbmQoY29kZSk7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSA5Mykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGNkYXRhRW5kO1xuICAgIH1cbiAgICByZXR1cm4gY2RhdGEoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDwhYj4gY1xuICAgKiAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBkZWNsYXJhdGlvbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gNjIpIHtcbiAgICAgIHJldHVybiBlbmQoY29kZSk7XG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVyblN0YXRlID0gZGVjbGFyYXRpb247XG4gICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlKTtcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIHJldHVybiBkZWNsYXJhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBpbnN0cnVjdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPD9iPz4gY1xuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGluc3RydWN0aW9uKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDYzKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25DbG9zZTtcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuU3RhdGUgPSBpbnN0cnVjdGlvbjtcbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIGluc3RydWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGluc3RydWN0aW9uLCBhZnRlciBgP2AsIGF0IGA+YC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPD9iPz4gY1xuICAgKiAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaW5zdHJ1Y3Rpb25DbG9zZShjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGUgPT09IDYyID8gZW5kKGNvZGUpIDogaW5zdHJ1Y3Rpb24oY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDwvYCwgaW4gY2xvc2luZyB0YWcsIGF0IHRhZyBuYW1lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8L2I+IGNcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0YWdDbG9zZVN0YXJ0KGNvZGUpIHtcbiAgICAvLyBBU0NJSSBhbHBoYWJldGljYWwuXG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiB0YWdDbG9zZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPC94YCwgaW4gYSB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPC9iPiBjXG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ0Nsb3NlKGNvZGUpIHtcbiAgICAvLyBBU0NJSSBhbHBoYW51bWVyaWNhbCBhbmQgYC1gLlxuICAgIGlmIChjb2RlID09PSA0NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIHRhZ0Nsb3NlO1xuICAgIH1cbiAgICByZXR1cm4gdGFnQ2xvc2VCZXR3ZWVuKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNsb3NpbmcgdGFnLCBhZnRlciB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPC9iPiBjXG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ0Nsb3NlQmV0d2Vlbihjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuU3RhdGUgPSB0YWdDbG9zZUJldHdlZW47XG4gICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlKTtcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiB0YWdDbG9zZUJldHdlZW47XG4gICAgfVxuICAgIHJldHVybiBlbmQoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDx4YCwgaW4gb3BlbmluZyB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPGI+IGNcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0YWdPcGVuKGNvZGUpIHtcbiAgICAvLyBBU0NJSSBhbHBoYW51bWVyaWNhbCBhbmQgYC1gLlxuICAgIGlmIChjb2RlID09PSA0NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIHRhZ09wZW47XG4gICAgfVxuICAgIGlmIChjb2RlID09PSA0NyB8fCBjb2RlID09PSA2MiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gdGFnT3BlbkJldHdlZW4oY29kZSk7XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gb3BlbmluZyB0YWcsIGFmdGVyIHRhZyBuYW1lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8Yj4gY1xuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ09wZW5CZXR3ZWVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNDcpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiBlbmQ7XG4gICAgfVxuXG4gICAgLy8gQVNDSUkgYWxwaGFiZXRpY2FsIGFuZCBgOmAgYW5kIGBfYC5cbiAgICBpZiAoY29kZSA9PT0gNTggfHwgY29kZSA9PT0gOTUgfHwgYXNjaWlBbHBoYShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lO1xuICAgIH1cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5CZXR3ZWVuO1xuICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZSk7XG4gICAgfVxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gdGFnT3BlbkJldHdlZW47XG4gICAgfVxuICAgIHJldHVybiBlbmQoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gYXR0cmlidXRlIG5hbWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiIGM+IGRcbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZU5hbWUoY29kZSkge1xuICAgIC8vIEFTQ0lJIGFscGhhYmV0aWNhbCBhbmQgYC1gLCBgLmAsIGA6YCwgYW5kIGBfYC5cbiAgICBpZiAoY29kZSA9PT0gNDUgfHwgY29kZSA9PT0gNDYgfHwgY29kZSA9PT0gNTggfHwgY29kZSA9PT0gOTUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYXR0cmlidXRlIG5hbWUsIGJlZm9yZSBpbml0aWFsaXplciwgdGhlIGVuZCBvZiB0aGUgdGFnLCBvclxuICAgKiB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8YiBjPiBkXG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlTmFtZUFmdGVyKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjEpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmU7XG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVyblN0YXRlID0gdGFnT3BlbkF0dHJpYnV0ZU5hbWVBZnRlcjtcbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpO1xuICAgIH1cbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXI7XG4gICAgfVxuICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWZvcmUgdW5xdW90ZWQsIGRvdWJsZSBxdW90ZWQsIG9yIHNpbmdsZSBxdW90ZWQgYXR0cmlidXRlIHZhbHVlLCBhbGxvd2luZ1xuICAgKiB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8YiBjPWQ+IGVcbiAgICogICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IDYwIHx8IGNvZGUgPT09IDYxIHx8IGNvZGUgPT09IDYyIHx8IGNvZGUgPT09IDk2KSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gMzQgfHwgY29kZSA9PT0gMzkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIG1hcmtlciA9IGNvZGU7XG4gICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkO1xuICAgIH1cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZTtcbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpO1xuICAgIH1cbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZTtcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVVbnF1b3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBkb3VibGUgb3Igc2luZ2xlIHF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiIGM9XCJkXCI+IGVcbiAgICogICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbWFya2VyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBtYXJrZXIgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkQWZ0ZXI7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZDtcbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiIGM9ZD4gZVxuICAgKiAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVVucXVvdGVkKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSAzNCB8fCBjb2RlID09PSAzOSB8fCBjb2RlID09PSA2MCB8fCBjb2RlID09PSA2MSB8fCBjb2RlID09PSA5Nikge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDQ3IHx8IGNvZGUgPT09IDYyIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkpIHtcbiAgICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlKTtcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVVbnF1b3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBkb3VibGUgb3Igc2luZ2xlIHF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUsIGJlZm9yZSB3aGl0ZXNwYWNlIG9yIHRoZSBlbmRcbiAgICogb2YgdGhlIHRhZy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPGIgYz1cImRcIj4gZVxuICAgKiAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZEFmdGVyKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNDcgfHwgY29kZSA9PT0gNjIgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSkge1xuICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBvZiBhIHRhZyB3aGVyZSBvbmx5IGFuIGA+YCBpcyBhbGxvd2VkLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8YiBjPVwiZFwiPiBlXG4gICAqICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZW5kKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImh0bWxUZXh0RGF0YVwiKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImh0bWxUZXh0XCIpO1xuICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0IGVvbC5cbiAgICpcbiAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHdlIGNhblx1MjAxOXQgaGF2ZSBibGFuayBsaW5lcyBpbiB0ZXh0LCBzbyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0XG4gICAqID4gZW1wdHkgdG9rZW5zLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IS0tYVxuICAgKiAgICAgICAgICAgIF5cbiAgICogICB8IGItLT5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGxpbmVFbmRpbmdCZWZvcmUoY29kZSkge1xuICAgIGVmZmVjdHMuZXhpdChcImh0bWxUZXh0RGF0YVwiKTtcbiAgICBlZmZlY3RzLmVudGVyKFwibGluZUVuZGluZ1wiKTtcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgZWZmZWN0cy5leGl0KFwibGluZUVuZGluZ1wiKTtcbiAgICByZXR1cm4gbGluZUVuZGluZ0FmdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGVvbCwgYXQgb3B0aW9uYWwgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHdlIGNhblx1MjAxOXQgaGF2ZSBibGFuayBsaW5lcyBpbiB0ZXh0LCBzbyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0XG4gICAqID4gZW1wdHkgdG9rZW5zLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgYSA8IS0tYVxuICAgKiA+IHwgYi0tPlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbGluZUVuZGluZ0FmdGVyKGNvZGUpIHtcbiAgICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuXG4gICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZSkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgbGluZUVuZGluZ0FmdGVyUHJlZml4LCBcImxpbmVQcmVmaXhcIiwgc2VsZi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoJ2NvZGVJbmRlbnRlZCcpID8gdW5kZWZpbmVkIDogNCkoY29kZSkgOiBsaW5lRW5kaW5nQWZ0ZXJQcmVmaXgoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgZW9sLCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogd2UgY2FuXHUyMDE5dCBoYXZlIGJsYW5rIGxpbmVzIGluIHRleHQsIHNvIG5vIG5lZWQgdG8gd29ycnkgYWJvdXRcbiAgICogPiBlbXB0eSB0b2tlbnMuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCBhIDwhLS1hXG4gICAqID4gfCBiLS0+XG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsaW5lRW5kaW5nQWZ0ZXJQcmVmaXgoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoXCJodG1sVGV4dERhdGFcIik7XG4gICAgcmV0dXJuIHJldHVyblN0YXRlKGNvZGUpO1xuICB9XG59IiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIENvbnN0cnVjdCxcbiAqICAgRXZlbnQsXG4gKiAgIFJlc29sdmVyLFxuICogICBTdGF0ZSxcbiAqICAgVG9rZW5pemVDb250ZXh0LFxuICogICBUb2tlbml6ZXIsXG4gKiAgIFRva2VuXG4gKiB9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IGZhY3RvcnlEZXN0aW5hdGlvbiB9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LWRlc3RpbmF0aW9uJztcbmltcG9ydCB7IGZhY3RvcnlMYWJlbCB9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LWxhYmVsJztcbmltcG9ydCB7IGZhY3RvcnlUaXRsZSB9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXRpdGxlJztcbmltcG9ydCB7IGZhY3RvcnlXaGl0ZXNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktd2hpdGVzcGFjZSc7XG5pbXBvcnQgeyBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbmltcG9ydCB7IHB1c2gsIHNwbGljZSB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNodW5rZWQnO1xuaW1wb3J0IHsgbm9ybWFsaXplSWRlbnRpZmllciB9IGZyb20gJ21pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyJztcbmltcG9ydCB7IHJlc29sdmVBbGwgfSBmcm9tICdtaWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbCc7XG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBsYWJlbEVuZCA9IHtcbiAgbmFtZTogJ2xhYmVsRW5kJyxcbiAgcmVzb2x2ZUFsbDogcmVzb2x2ZUFsbExhYmVsRW5kLFxuICByZXNvbHZlVG86IHJlc29sdmVUb0xhYmVsRW5kLFxuICB0b2tlbml6ZTogdG9rZW5pemVMYWJlbEVuZFxufTtcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCByZXNvdXJjZUNvbnN0cnVjdCA9IHtcbiAgdG9rZW5pemU6IHRva2VuaXplUmVzb3VyY2Vcbn07XG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IHJlZmVyZW5jZUZ1bGxDb25zdHJ1Y3QgPSB7XG4gIHRva2VuaXplOiB0b2tlbml6ZVJlZmVyZW5jZUZ1bGxcbn07XG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IHJlZmVyZW5jZUNvbGxhcHNlZENvbnN0cnVjdCA9IHtcbiAgdG9rZW5pemU6IHRva2VuaXplUmVmZXJlbmNlQ29sbGFwc2VkXG59O1xuXG4vKiogQHR5cGUge1Jlc29sdmVyfSAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFsbExhYmVsRW5kKGV2ZW50cykge1xuICBsZXQgaW5kZXggPSAtMTtcbiAgLyoqIEB0eXBlIHtBcnJheTxFdmVudD59ICovXG4gIGNvbnN0IG5ld0V2ZW50cyA9IFtdO1xuICB3aGlsZSAoKytpbmRleCA8IGV2ZW50cy5sZW5ndGgpIHtcbiAgICBjb25zdCB0b2tlbiA9IGV2ZW50c1tpbmRleF1bMV07XG4gICAgbmV3RXZlbnRzLnB1c2goZXZlbnRzW2luZGV4XSk7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFwibGFiZWxJbWFnZVwiIHx8IHRva2VuLnR5cGUgPT09IFwibGFiZWxMaW5rXCIgfHwgdG9rZW4udHlwZSA9PT0gXCJsYWJlbEVuZFwiKSB7XG4gICAgICAvLyBSZW1vdmUgdGhlIG1hcmtlci5cbiAgICAgIGNvbnN0IG9mZnNldCA9IHRva2VuLnR5cGUgPT09IFwibGFiZWxJbWFnZVwiID8gNCA6IDI7XG4gICAgICB0b2tlbi50eXBlID0gXCJkYXRhXCI7XG4gICAgICBpbmRleCArPSBvZmZzZXQ7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgdGhlIGV2ZW50cyBhcmUgZXF1YWwsIHdlIGRvbid0IGhhdmUgdG8gY29weSBuZXdFdmVudHMgdG8gZXZlbnRzXG4gIGlmIChldmVudHMubGVuZ3RoICE9PSBuZXdFdmVudHMubGVuZ3RoKSB7XG4gICAgc3BsaWNlKGV2ZW50cywgMCwgZXZlbnRzLmxlbmd0aCwgbmV3RXZlbnRzKTtcbiAgfVxuICByZXR1cm4gZXZlbnRzO1xufVxuXG4vKiogQHR5cGUge1Jlc29sdmVyfSAqL1xuZnVuY3Rpb24gcmVzb2x2ZVRvTGFiZWxFbmQoZXZlbnRzLCBjb250ZXh0KSB7XG4gIGxldCBpbmRleCA9IGV2ZW50cy5sZW5ndGg7XG4gIGxldCBvZmZzZXQgPSAwO1xuICAvKiogQHR5cGUge1Rva2VufSAqL1xuICBsZXQgdG9rZW47XG4gIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgb3BlbjtcbiAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGxldCBjbG9zZTtcbiAgLyoqIEB0eXBlIHtBcnJheTxFdmVudD59ICovXG4gIGxldCBtZWRpYTtcblxuICAvLyBGaW5kIGFuIG9wZW5pbmcuXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdG9rZW4gPSBldmVudHNbaW5kZXhdWzFdO1xuICAgIGlmIChvcGVuKSB7XG4gICAgICAvLyBJZiB3ZSBzZWUgYW5vdGhlciBsaW5rLCBvciBpbmFjdGl2ZSBsaW5rIGxhYmVsLCB3ZVx1MjAxOXZlIGJlZW4gaGVyZSBiZWZvcmUuXG4gICAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJsaW5rXCIgfHwgdG9rZW4udHlwZSA9PT0gXCJsYWJlbExpbmtcIiAmJiB0b2tlbi5faW5hY3RpdmUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hcmsgb3RoZXIgbGluayBvcGVuaW5ncyBhcyBpbmFjdGl2ZSwgYXMgd2UgY2FuXHUyMDE5dCBoYXZlIGxpbmtzIGluXG4gICAgICAvLyBsaW5rcy5cbiAgICAgIGlmIChldmVudHNbaW5kZXhdWzBdID09PSAnZW50ZXInICYmIHRva2VuLnR5cGUgPT09IFwibGFiZWxMaW5rXCIpIHtcbiAgICAgICAgdG9rZW4uX2luYWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNsb3NlKSB7XG4gICAgICBpZiAoZXZlbnRzW2luZGV4XVswXSA9PT0gJ2VudGVyJyAmJiAodG9rZW4udHlwZSA9PT0gXCJsYWJlbEltYWdlXCIgfHwgdG9rZW4udHlwZSA9PT0gXCJsYWJlbExpbmtcIikgJiYgIXRva2VuLl9iYWxhbmNlZCkge1xuICAgICAgICBvcGVuID0gaW5kZXg7XG4gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBcImxhYmVsTGlua1wiKSB7XG4gICAgICAgICAgb2Zmc2V0ID0gMjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gXCJsYWJlbEVuZFwiKSB7XG4gICAgICBjbG9zZSA9IGluZGV4O1xuICAgIH1cbiAgfVxuICBjb25zdCBncm91cCA9IHtcbiAgICB0eXBlOiBldmVudHNbb3Blbl1bMV0udHlwZSA9PT0gXCJsYWJlbExpbmtcIiA/IFwibGlua1wiIDogXCJpbWFnZVwiLFxuICAgIHN0YXJ0OiB7XG4gICAgICAuLi5ldmVudHNbb3Blbl1bMV0uc3RhcnRcbiAgICB9LFxuICAgIGVuZDoge1xuICAgICAgLi4uZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXVsxXS5lbmRcbiAgICB9XG4gIH07XG4gIGNvbnN0IGxhYmVsID0ge1xuICAgIHR5cGU6IFwibGFiZWxcIixcbiAgICBzdGFydDoge1xuICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLnN0YXJ0XG4gICAgfSxcbiAgICBlbmQ6IHtcbiAgICAgIC4uLmV2ZW50c1tjbG9zZV1bMV0uZW5kXG4gICAgfVxuICB9O1xuICBjb25zdCB0ZXh0ID0ge1xuICAgIHR5cGU6IFwibGFiZWxUZXh0XCIsXG4gICAgc3RhcnQ6IHtcbiAgICAgIC4uLmV2ZW50c1tvcGVuICsgb2Zmc2V0ICsgMl1bMV0uZW5kXG4gICAgfSxcbiAgICBlbmQ6IHtcbiAgICAgIC4uLmV2ZW50c1tjbG9zZSAtIDJdWzFdLnN0YXJ0XG4gICAgfVxuICB9O1xuICBtZWRpYSA9IFtbJ2VudGVyJywgZ3JvdXAsIGNvbnRleHRdLCBbJ2VudGVyJywgbGFiZWwsIGNvbnRleHRdXTtcblxuICAvLyBPcGVuaW5nIG1hcmtlci5cbiAgbWVkaWEgPSBwdXNoKG1lZGlhLCBldmVudHMuc2xpY2Uob3BlbiArIDEsIG9wZW4gKyBvZmZzZXQgKyAzKSk7XG5cbiAgLy8gVGV4dCBvcGVuLlxuICBtZWRpYSA9IHB1c2gobWVkaWEsIFtbJ2VudGVyJywgdGV4dCwgY29udGV4dF1dKTtcblxuICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuXG4gIC8vIEJldHdlZW4uXG4gIG1lZGlhID0gcHVzaChtZWRpYSwgcmVzb2x2ZUFsbChjb250ZXh0LnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCwgZXZlbnRzLnNsaWNlKG9wZW4gKyBvZmZzZXQgKyA0LCBjbG9zZSAtIDMpLCBjb250ZXh0KSk7XG5cbiAgLy8gVGV4dCBjbG9zZSwgbWFya2VyIGNsb3NlLCBsYWJlbCBjbG9zZS5cbiAgbWVkaWEgPSBwdXNoKG1lZGlhLCBbWydleGl0JywgdGV4dCwgY29udGV4dF0sIGV2ZW50c1tjbG9zZSAtIDJdLCBldmVudHNbY2xvc2UgLSAxXSwgWydleGl0JywgbGFiZWwsIGNvbnRleHRdXSk7XG5cbiAgLy8gUmVmZXJlbmNlLCByZXNvdXJjZSwgb3Igc28uXG4gIG1lZGlhID0gcHVzaChtZWRpYSwgZXZlbnRzLnNsaWNlKGNsb3NlICsgMSkpO1xuXG4gIC8vIE1lZGlhIGNsb3NlLlxuICBtZWRpYSA9IHB1c2gobWVkaWEsIFtbJ2V4aXQnLCBncm91cCwgY29udGV4dF1dKTtcbiAgc3BsaWNlKGV2ZW50cywgb3BlbiwgZXZlbnRzLmxlbmd0aCwgbWVkaWEpO1xuICByZXR1cm4gZXZlbnRzO1xufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUxhYmVsRW5kKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGxldCBpbmRleCA9IHNlbGYuZXZlbnRzLmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IGxhYmVsU3RhcnQ7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IGRlZmluZWQ7XG5cbiAgLy8gRmluZCBhbiBvcGVuaW5nLlxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmICgoc2VsZi5ldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09IFwibGFiZWxJbWFnZVwiIHx8IHNlbGYuZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSBcImxhYmVsTGlua1wiKSAmJiAhc2VsZi5ldmVudHNbaW5kZXhdWzFdLl9iYWxhbmNlZCkge1xuICAgICAgbGFiZWxTdGFydCA9IHNlbGYuZXZlbnRzW2luZGV4XVsxXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGxhYmVsIGVuZC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXShiKSBjXG4gICAqICAgICAgIF5cbiAgICogPiB8IFthXVtiXSBjXG4gICAqICAgICAgIF5cbiAgICogPiB8IFthXVtdIGJcbiAgICogICAgICAgXlxuICAgKiA+IHwgW2FdIGJcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBub3QgYW4gb2theSBvcGVuaW5nLlxuICAgIGlmICghbGFiZWxTdGFydCkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgY29ycmVzcG9uZGluZyBsYWJlbCAobGluaykgc3RhcnQgaXMgbWFya2VkIGFzIGluYWN0aXZlLFxuICAgIC8vIGl0IG1lYW5zIHdlXHUyMDE5ZCBiZSB3cmFwcGluZyBhIGxpbmssIGxpa2UgdGhpczpcbiAgICAvL1xuICAgIC8vIGBgYG1hcmtkb3duXG4gICAgLy8gPiB8IGEgW2IgW2NdKGQpIGVdKGYpIGcuXG4gICAgLy8gICAgICAgICAgICAgICAgICBeXG4gICAgLy8gYGBgXG4gICAgLy9cbiAgICAvLyBXZSBjYW5cdTIwMTl0IGhhdmUgdGhhdCwgc28gaXRcdTIwMTlzIGp1c3QgYmFsYW5jZWQgYnJhY2tldHMuXG4gICAgaWYgKGxhYmVsU3RhcnQuX2luYWN0aXZlKSB7XG4gICAgICByZXR1cm4gbGFiZWxFbmROb2soY29kZSk7XG4gICAgfVxuICAgIGRlZmluZWQgPSBzZWxmLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZi5zbGljZVNlcmlhbGl6ZSh7XG4gICAgICBzdGFydDogbGFiZWxTdGFydC5lbmQsXG4gICAgICBlbmQ6IHNlbGYubm93KClcbiAgICB9KSkpO1xuICAgIGVmZmVjdHMuZW50ZXIoXCJsYWJlbEVuZFwiKTtcbiAgICBlZmZlY3RzLmVudGVyKFwibGFiZWxNYXJrZXJcIik7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIGVmZmVjdHMuZXhpdChcImxhYmVsTWFya2VyXCIpO1xuICAgIGVmZmVjdHMuZXhpdChcImxhYmVsRW5kXCIpO1xuICAgIHJldHVybiBhZnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgXWAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYikgY1xuICAgKiAgICAgICBeXG4gICAqID4gfCBbYV1bYl0gY1xuICAgKiAgICAgICBeXG4gICAqID4gfCBbYV1bXSBiXG4gICAqICAgICAgIF5cbiAgICogPiB8IFthXSBiXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICAvLyBOb3RlOiBgbWFya2Rvd24tcnNgIGFsc28gcGFyc2VzIEdGTSBmb290bm90ZXMgaGVyZSwgd2hpY2ggZm9yIHVzIGlzIGluXG4gICAgLy8gYW4gZXh0ZW5zaW9uLlxuXG4gICAgLy8gUmVzb3VyY2UgKGBbYXNkXShmZ2gpYCk/XG4gICAgaWYgKGNvZGUgPT09IDQwKSB7XG4gICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHJlc291cmNlQ29uc3RydWN0LCBsYWJlbEVuZE9rLCBkZWZpbmVkID8gbGFiZWxFbmRPayA6IGxhYmVsRW5kTm9rKShjb2RlKTtcbiAgICB9XG5cbiAgICAvLyBGdWxsIChgW2FzZF1bZmdoXWApIG9yIGNvbGxhcHNlZCAoYFthc2RdW11gKSByZWZlcmVuY2U/XG4gICAgaWYgKGNvZGUgPT09IDkxKSB7XG4gICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHJlZmVyZW5jZUZ1bGxDb25zdHJ1Y3QsIGxhYmVsRW5kT2ssIGRlZmluZWQgPyByZWZlcmVuY2VOb3RGdWxsIDogbGFiZWxFbmROb2spKGNvZGUpO1xuICAgIH1cblxuICAgIC8vIFNob3J0Y3V0IChgW2FzZF1gKSByZWZlcmVuY2U/XG4gICAgcmV0dXJuIGRlZmluZWQgPyBsYWJlbEVuZE9rKGNvZGUpIDogbGFiZWxFbmROb2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYF1gLCBhdCBgW2AsIGJ1dCBub3QgYXQgYSBmdWxsIHJlZmVyZW5jZS5cbiAgICpcbiAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHdlIG9ubHkgZ2V0IGhlcmUgaWYgdGhlIGxhYmVsIGlzIGRlZmluZWQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV1bXSBiXG4gICAqICAgICAgICBeXG4gICAqID4gfCBbYV0gYlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVmZXJlbmNlTm90RnVsbChjb2RlKSB7XG4gICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChyZWZlcmVuY2VDb2xsYXBzZWRDb25zdHJ1Y3QsIGxhYmVsRW5kT2ssIGxhYmVsRW5kTm9rKShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb25lLCB3ZSBmb3VuZCBzb21ldGhpbmcuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYikgY1xuICAgKiAgICAgICAgICAgXlxuICAgKiA+IHwgW2FdW2JdIGNcbiAgICogICAgICAgICAgIF5cbiAgICogPiB8IFthXVtdIGJcbiAgICogICAgICAgICAgXlxuICAgKiA+IHwgW2FdIGJcbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGxhYmVsRW5kT2soY29kZSkge1xuICAgIC8vIE5vdGU6IGBtYXJrZG93bi1yc2AgZG9lcyBhIGJ1bmNoIG9mIHN0dWZmIGhlcmUuXG4gICAgcmV0dXJuIG9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERvbmUsIGl0XHUyMDE5cyBub3RoaW5nLlxuICAgKlxuICAgKiBUaGVyZSB3YXMgYW4gb2theSBvcGVuaW5nLCBidXQgd2UgZGlkblx1MjAxOXQgbWF0Y2ggYW55dGhpbmcuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYiBjXG4gICAqICAgICAgICBeXG4gICAqID4gfCBbYV1bYiBjXG4gICAqICAgICAgICBeXG4gICAqID4gfCBbYV0gYlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbGFiZWxFbmROb2soY29kZSkge1xuICAgIGxhYmVsU3RhcnQuX2JhbGFuY2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqICAgQ29udGV4dC5cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplUmVzb3VyY2UoZWZmZWN0cywgb2ssIG5vaykge1xuICByZXR1cm4gcmVzb3VyY2VTdGFydDtcblxuICAvKipcbiAgICogQXQgYSByZXNvdXJjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXShiKSBjXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZXNvdXJjZVN0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKFwicmVzb3VyY2VcIik7XG4gICAgZWZmZWN0cy5lbnRlcihcInJlc291cmNlTWFya2VyXCIpO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICBlZmZlY3RzLmV4aXQoXCJyZXNvdXJjZU1hcmtlclwiKTtcbiAgICByZXR1cm4gcmVzb3VyY2VCZWZvcmU7XG4gIH1cblxuICAvKipcbiAgICogSW4gcmVzb3VyY2UsIGFmdGVyIGAoYCwgYXQgb3B0aW9uYWwgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXShiKSBjXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb3VyY2VCZWZvcmUoY29kZSkge1xuICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgcmVzb3VyY2VPcGVuKShjb2RlKSA6IHJlc291cmNlT3Blbihjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZSwgYXQgYClgIG9yIGEgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYikgY1xuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc291cmNlT3Blbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQxKSB7XG4gICAgICByZXR1cm4gcmVzb3VyY2VFbmQoY29kZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWN0b3J5RGVzdGluYXRpb24oZWZmZWN0cywgcmVzb3VyY2VEZXN0aW5hdGlvbkFmdGVyLCByZXNvdXJjZURlc3RpbmF0aW9uTWlzc2luZywgXCJyZXNvdXJjZURlc3RpbmF0aW9uXCIsIFwicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxcIiwgXCJyZXNvdXJjZURlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlclwiLCBcInJlc291cmNlRGVzdGluYXRpb25SYXdcIiwgXCJyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nXCIsIDMyKShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYWZ0ZXIgZGVzdGluYXRpb24sIGF0IG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYikgY1xuICAgKiAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZXNvdXJjZURlc3RpbmF0aW9uQWZ0ZXIoY29kZSkge1xuICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgcmVzb3VyY2VCZXR3ZWVuKShjb2RlKSA6IHJlc291cmNlRW5kKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0IGludmFsaWQgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oPDwpIGJcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZXNvdXJjZURlc3RpbmF0aW9uTWlzc2luZyhjb2RlKSB7XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYWZ0ZXIgZGVzdGluYXRpb24gYW5kIHdoaXRlc3BhY2UsIGF0IGAoYCBvciB0aXRsZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXShiICkgY1xuICAgKiAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb3VyY2VCZXR3ZWVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gMzQgfHwgY29kZSA9PT0gMzkgfHwgY29kZSA9PT0gNDApIHtcbiAgICAgIHJldHVybiBmYWN0b3J5VGl0bGUoZWZmZWN0cywgcmVzb3VyY2VUaXRsZUFmdGVyLCBub2ssIFwicmVzb3VyY2VUaXRsZVwiLCBcInJlc291cmNlVGl0bGVNYXJrZXJcIiwgXCJyZXNvdXJjZVRpdGxlU3RyaW5nXCIpKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb3VyY2VFbmQoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gcmVzb3VyY2UsIGFmdGVyIHRpdGxlLCBhdCBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdKGIgXCJjXCIpIGRcbiAgICogICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc291cmNlVGl0bGVBZnRlcihjb2RlKSB7XG4gICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCByZXNvdXJjZUVuZCkoY29kZSkgOiByZXNvdXJjZUVuZChjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYXQgYClgLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdKGIpIGRcbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb3VyY2VFbmQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0MSkge1xuICAgICAgZWZmZWN0cy5lbnRlcihcInJlc291cmNlTWFya2VyXCIpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KFwicmVzb3VyY2VNYXJrZXJcIik7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJyZXNvdXJjZVwiKTtcbiAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZVJlZmVyZW5jZUZ1bGwoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgcmV0dXJuIHJlZmVyZW5jZUZ1bGw7XG5cbiAgLyoqXG4gICAqIEluIGEgcmVmZXJlbmNlIChmdWxsKSwgYXQgdGhlIGBbYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXVtiXSBkXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZWZlcmVuY2VGdWxsKGNvZGUpIHtcbiAgICByZXR1cm4gZmFjdG9yeUxhYmVsLmNhbGwoc2VsZiwgZWZmZWN0cywgcmVmZXJlbmNlRnVsbEFmdGVyLCByZWZlcmVuY2VGdWxsTWlzc2luZywgXCJyZWZlcmVuY2VcIiwgXCJyZWZlcmVuY2VNYXJrZXJcIiwgXCJyZWZlcmVuY2VTdHJpbmdcIikoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gYSByZWZlcmVuY2UgKGZ1bGwpLCBhZnRlciBgXWAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV1bYl0gZFxuICAgKiAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZWZlcmVuY2VGdWxsQWZ0ZXIoY29kZSkge1xuICAgIHJldHVybiBzZWxmLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZi5zbGljZVNlcmlhbGl6ZShzZWxmLmV2ZW50c1tzZWxmLmV2ZW50cy5sZW5ndGggLSAxXVsxXSkuc2xpY2UoMSwgLTEpKSkgPyBvayhjb2RlKSA6IG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZWZlcmVuY2UgKGZ1bGwpIHRoYXQgd2FzIG1pc3NpbmcuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV1bYiBkXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZWZlcmVuY2VGdWxsTWlzc2luZyhjb2RlKSB7XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZVJlZmVyZW5jZUNvbGxhcHNlZChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiByZWZlcmVuY2VDb2xsYXBzZWRTdGFydDtcblxuICAvKipcbiAgICogSW4gcmVmZXJlbmNlIChjb2xsYXBzZWQpLCBhdCBgW2AuXG4gICAqXG4gICAqID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiB3ZSBvbmx5IGdldCBoZXJlIGlmIHRoZSBsYWJlbCBpcyBkZWZpbmVkLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdW10gZFxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVmZXJlbmNlQ29sbGFwc2VkU3RhcnQoY29kZSkge1xuICAgIC8vIFdlIG9ubHkgYXR0ZW1wdCBhIGNvbGxhcHNlZCBsYWJlbCBpZiB0aGVyZVx1MjAxOXMgYSBgW2AuXG5cbiAgICBlZmZlY3RzLmVudGVyKFwicmVmZXJlbmNlXCIpO1xuICAgIGVmZmVjdHMuZW50ZXIoXCJyZWZlcmVuY2VNYXJrZXJcIik7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIGVmZmVjdHMuZXhpdChcInJlZmVyZW5jZU1hcmtlclwiKTtcbiAgICByZXR1cm4gcmVmZXJlbmNlQ29sbGFwc2VkT3BlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZWZlcmVuY2UgKGNvbGxhcHNlZCksIGF0IGBdYC5cbiAgICpcbiAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHdlIG9ubHkgZ2V0IGhlcmUgaWYgdGhlIGxhYmVsIGlzIGRlZmluZWQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV1bXSBkXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZmVyZW5jZUNvbGxhcHNlZE9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSA5Mykge1xuICAgICAgZWZmZWN0cy5lbnRlcihcInJlZmVyZW5jZU1hcmtlclwiKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcInJlZmVyZW5jZU1hcmtlclwiKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcInJlZmVyZW5jZVwiKTtcbiAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb25zdHJ1Y3QsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHQsXG4gKiAgIFRva2VuaXplclxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBsYWJlbEVuZCB9IGZyb20gJy4vbGFiZWwtZW5kLmpzJztcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgbGFiZWxTdGFydEltYWdlID0ge1xuICBuYW1lOiAnbGFiZWxTdGFydEltYWdlJyxcbiAgcmVzb2x2ZUFsbDogbGFiZWxFbmQucmVzb2x2ZUFsbCxcbiAgdG9rZW5pemU6IHRva2VuaXplTGFiZWxTdGFydEltYWdlXG59O1xuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUxhYmVsU3RhcnRJbWFnZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGxhYmVsIChpbWFnZSkgc3RhcnQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhICFbYl0gY1xuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcihcImxhYmVsSW1hZ2VcIik7XG4gICAgZWZmZWN0cy5lbnRlcihcImxhYmVsSW1hZ2VNYXJrZXJcIik7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIGVmZmVjdHMuZXhpdChcImxhYmVsSW1hZ2VNYXJrZXJcIik7XG4gICAgcmV0dXJuIG9wZW47XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYCFgLCBhdCBgW2AuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhICFbYl0gY1xuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gb3Blbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDkxKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKFwibGFiZWxNYXJrZXJcIik7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJsYWJlbE1hcmtlclwiKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImxhYmVsSW1hZ2VcIik7XG4gICAgICByZXR1cm4gYWZ0ZXI7XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYCFbYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgIVtiXSBjXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogVGhpcyBpcyBuZWVkZWQgaW4gYmVjYXVzZSwgd2hlbiBHRk0gZm9vdG5vdGVzIGFyZSBlbmFibGVkLCBpbWFnZXMgbmV2ZXJcbiAgICogZm9ybSB3aGVuIHN0YXJ0ZWQgd2l0aCBhIGBeYC5cbiAgICogSW5zdGVhZCwgbGlua3MgZm9ybTpcbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogIVteYV0oYilcbiAgICpcbiAgICogIVteYV1bYl1cbiAgICpcbiAgICogW2JdOiBjXG4gICAqIGBgYFxuICAgKlxuICAgKiBgYGBodG1sXG4gICAqIDxwPiE8YSBocmVmPVxcXCJiXFxcIj5eYTwvYT48L3A+XG4gICAqIDxwPiE8YSBocmVmPVxcXCJjXFxcIj5eYTwvYT48L3A+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgLy8gVG8gZG86IHVzZSBhIG5ldyBmaWVsZCB0byBkbyB0aGlzLCB0aGlzIGlzIHN0aWxsIG5lZWRlZCBmb3JcbiAgICAvLyBgbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVgLCBidXQgdGhlIGBsYWJlbC1zdGFydC1saW5rYFxuICAgIC8vIGJlaGF2aW9yIGlzblx1MjAxOXQuXG4gICAgLy8gSGlkZGVuIGZvb3Rub3RlcyBob29rLlxuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICByZXR1cm4gY29kZSA9PT0gOTQgJiYgJ19oaWRkZW5Gb290bm90ZVN1cHBvcnQnIGluIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMgPyBub2soY29kZSkgOiBvayhjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb25zdHJ1Y3QsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHQsXG4gKiAgIFRva2VuaXplclxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBsYWJlbEVuZCB9IGZyb20gJy4vbGFiZWwtZW5kLmpzJztcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgbGFiZWxTdGFydExpbmsgPSB7XG4gIG5hbWU6ICdsYWJlbFN0YXJ0TGluaycsXG4gIHJlc29sdmVBbGw6IGxhYmVsRW5kLnJlc29sdmVBbGwsXG4gIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsU3RhcnRMaW5rXG59O1xuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUxhYmVsU3RhcnRMaW5rKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHJldHVybiBzdGFydDtcblxuICAvKipcbiAgICogU3RhcnQgb2YgbGFiZWwgKGxpbmspIHN0YXJ0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSBbYl0gY1xuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcihcImxhYmVsTGlua1wiKTtcbiAgICBlZmZlY3RzLmVudGVyKFwibGFiZWxNYXJrZXJcIik7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIGVmZmVjdHMuZXhpdChcImxhYmVsTWFya2VyXCIpO1xuICAgIGVmZmVjdHMuZXhpdChcImxhYmVsTGlua1wiKTtcbiAgICByZXR1cm4gYWZ0ZXI7XG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgLy8gVG8gZG86IHRoaXMgaXNuXHUyMDE5dCBuZWVkZWQgaW4gYG1pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlYCxcbiAgICAvLyByZW1vdmUuXG4gICAgLy8gSGlkZGVuIGZvb3Rub3RlcyBob29rLlxuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICByZXR1cm4gY29kZSA9PT0gOTQgJiYgJ19oaWRkZW5Gb290bm90ZVN1cHBvcnQnIGluIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMgPyBub2soY29kZSkgOiBvayhjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb25zdHJ1Y3QsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHQsXG4gKiAgIFRva2VuaXplclxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBmYWN0b3J5U3BhY2UgfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSc7XG5pbXBvcnQgeyBtYXJrZG93bkxpbmVFbmRpbmcgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgbGluZUVuZGluZyA9IHtcbiAgbmFtZTogJ2xpbmVFbmRpbmcnLFxuICB0b2tlbml6ZTogdG9rZW5pemVMaW5lRW5kaW5nXG59O1xuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUxpbmVFbmRpbmcoZWZmZWN0cywgb2spIHtcbiAgcmV0dXJuIHN0YXJ0O1xuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKFwibGluZUVuZGluZ1wiKTtcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgZWZmZWN0cy5leGl0KFwibGluZUVuZGluZ1wiKTtcbiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIG9rLCBcImxpbmVQcmVmaXhcIik7XG4gIH1cbn0iLCAiLyoqXG4gKiBAaW1wb3J0IHtcbiAqICAgQ29kZSxcbiAqICAgQ29uc3RydWN0LFxuICogICBTdGF0ZSxcbiAqICAgVG9rZW5pemVDb250ZXh0LFxuICogICBUb2tlbml6ZXJcbiAqIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuaW1wb3J0IHsgZmFjdG9yeVNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnO1xuaW1wb3J0IHsgbWFya2Rvd25MaW5lRW5kaW5nLCBtYXJrZG93blNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IHRoZW1hdGljQnJlYWsgPSB7XG4gIG5hbWU6ICd0aGVtYXRpY0JyZWFrJyxcbiAgdG9rZW5pemU6IHRva2VuaXplVGhlbWF0aWNCcmVha1xufTtcblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVUaGVtYXRpY0JyZWFrKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgbGV0IHNpemUgPSAwO1xuICAvKiogQHR5cGUge05vbk51bGxhYmxlPENvZGU+fSAqL1xuICBsZXQgbWFya2VyO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIHRoZW1hdGljIGJyZWFrLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgKioqXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcihcInRoZW1hdGljQnJlYWtcIik7XG4gICAgLy8gVG8gZG86IHBhcnNlIGluZGVudCBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgcmV0dXJuIGJlZm9yZShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLCBhdCBtYXJrZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAqKipcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGJlZm9yZShjb2RlKSB7XG4gICAgbWFya2VyID0gY29kZTtcbiAgICByZXR1cm4gYXRCcmVhayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBzb21ldGhpbmcsIGJlZm9yZSBzb21ldGhpbmcgZWxzZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICoqKlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgZWZmZWN0cy5lbnRlcihcInRoZW1hdGljQnJlYWtTZXF1ZW5jZVwiKTtcbiAgICAgIHJldHVybiBzZXF1ZW5jZShjb2RlKTtcbiAgICB9XG4gICAgaWYgKHNpemUgPj0gMyAmJiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJ0aGVtYXRpY0JyZWFrXCIpO1xuICAgICAgcmV0dXJuIG9rKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgKioqXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzZXF1ZW5jZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgc2l6ZSsrO1xuICAgICAgcmV0dXJuIHNlcXVlbmNlO1xuICAgIH1cbiAgICBlZmZlY3RzLmV4aXQoXCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2VcIik7XG4gICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZSkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYXRCcmVhaywgXCJ3aGl0ZXNwYWNlXCIpKGNvZGUpIDogYXRCcmVhayhjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb2RlLFxuICogICBDb25zdHJ1Y3QsXG4gKiAgIEV4aXRlcixcbiAqICAgU3RhdGUsXG4gKiAgIFRva2VuaXplQ29udGV4dCxcbiAqICAgVG9rZW5pemVyXG4gKiB9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IGZhY3RvcnlTcGFjZSB9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJztcbmltcG9ydCB7IGFzY2lpRGlnaXQsIG1hcmtkb3duU3BhY2UgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuaW1wb3J0IHsgYmxhbmtMaW5lIH0gZnJvbSAnLi9ibGFuay1saW5lLmpzJztcbmltcG9ydCB7IHRoZW1hdGljQnJlYWsgfSBmcm9tICcuL3RoZW1hdGljLWJyZWFrLmpzJztcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgbGlzdCA9IHtcbiAgY29udGludWF0aW9uOiB7XG4gICAgdG9rZW5pemU6IHRva2VuaXplTGlzdENvbnRpbnVhdGlvblxuICB9LFxuICBleGl0OiB0b2tlbml6ZUxpc3RFbmQsXG4gIG5hbWU6ICdsaXN0JyxcbiAgdG9rZW5pemU6IHRva2VuaXplTGlzdFN0YXJ0XG59O1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IGxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZUNvbnN0cnVjdCA9IHtcbiAgcGFydGlhbDogdHJ1ZSxcbiAgdG9rZW5pemU6IHRva2VuaXplTGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlXG59O1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IGluZGVudENvbnN0cnVjdCA9IHtcbiAgcGFydGlhbDogdHJ1ZSxcbiAgdG9rZW5pemU6IHRva2VuaXplSW5kZW50XG59O1xuXG4vLyBUbyBkbzogYG1hcmtkb3duLXJzYCBwYXJzZXMgbGlzdCBpdGVtcyBvbiB0aGVpciBvd24gYW5kIGxhdGVyIHN0aXRjaGVzIHRoZW1cbi8vIHRvZ2V0aGVyLlxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUxpc3RTdGFydChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICBjb25zdCB0YWlsID0gc2VsZi5ldmVudHNbc2VsZi5ldmVudHMubGVuZ3RoIC0gMV07XG4gIGxldCBpbml0aWFsU2l6ZSA9IHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSBcImxpbmVQcmVmaXhcIiA/IHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoIDogMDtcbiAgbGV0IHNpemUgPSAwO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGNvbnN0IGtpbmQgPSBzZWxmLmNvbnRhaW5lclN0YXRlLnR5cGUgfHwgKGNvZGUgPT09IDQyIHx8IGNvZGUgPT09IDQzIHx8IGNvZGUgPT09IDQ1ID8gXCJsaXN0VW5vcmRlcmVkXCIgOiBcImxpc3RPcmRlcmVkXCIpO1xuICAgIGlmIChraW5kID09PSBcImxpc3RVbm9yZGVyZWRcIiA/ICFzZWxmLmNvbnRhaW5lclN0YXRlLm1hcmtlciB8fCBjb2RlID09PSBzZWxmLmNvbnRhaW5lclN0YXRlLm1hcmtlciA6IGFzY2lpRGlnaXQoY29kZSkpIHtcbiAgICAgIGlmICghc2VsZi5jb250YWluZXJTdGF0ZS50eXBlKSB7XG4gICAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUudHlwZSA9IGtpbmQ7XG4gICAgICAgIGVmZmVjdHMuZW50ZXIoa2luZCwge1xuICAgICAgICAgIF9jb250YWluZXI6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoa2luZCA9PT0gXCJsaXN0VW5vcmRlcmVkXCIpIHtcbiAgICAgICAgZWZmZWN0cy5lbnRlcihcImxpc3RJdGVtUHJlZml4XCIpO1xuICAgICAgICByZXR1cm4gY29kZSA9PT0gNDIgfHwgY29kZSA9PT0gNDUgPyBlZmZlY3RzLmNoZWNrKHRoZW1hdGljQnJlYWssIG5vaywgYXRNYXJrZXIpKGNvZGUpIDogYXRNYXJrZXIoY29kZSk7XG4gICAgICB9XG4gICAgICBpZiAoIXNlbGYuaW50ZXJydXB0IHx8IGNvZGUgPT09IDQ5KSB7XG4gICAgICAgIGVmZmVjdHMuZW50ZXIoXCJsaXN0SXRlbVByZWZpeFwiKTtcbiAgICAgICAgZWZmZWN0cy5lbnRlcihcImxpc3RJdGVtVmFsdWVcIik7XG4gICAgICAgIHJldHVybiBpbnNpZGUoY29kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSk7XG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBpbnNpZGUoY29kZSkge1xuICAgIGlmIChhc2NpaURpZ2l0KGNvZGUpICYmICsrc2l6ZSA8IDEwKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gaW5zaWRlO1xuICAgIH1cbiAgICBpZiAoKCFzZWxmLmludGVycnVwdCB8fCBzaXplIDwgMikgJiYgKHNlbGYuY29udGFpbmVyU3RhdGUubWFya2VyID8gY29kZSA9PT0gc2VsZi5jb250YWluZXJTdGF0ZS5tYXJrZXIgOiBjb2RlID09PSA0MSB8fCBjb2RlID09PSA0NikpIHtcbiAgICAgIGVmZmVjdHMuZXhpdChcImxpc3RJdGVtVmFsdWVcIik7XG4gICAgICByZXR1cm4gYXRNYXJrZXIoY29kZSk7XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKiovXG4gIGZ1bmN0aW9uIGF0TWFya2VyKGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKFwibGlzdEl0ZW1NYXJrZXJcIik7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIGVmZmVjdHMuZXhpdChcImxpc3RJdGVtTWFya2VyXCIpO1xuICAgIHNlbGYuY29udGFpbmVyU3RhdGUubWFya2VyID0gc2VsZi5jb250YWluZXJTdGF0ZS5tYXJrZXIgfHwgY29kZTtcbiAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhibGFua0xpbmUsXG4gICAgLy8gQ2FuXHUyMDE5dCBiZSBlbXB0eSB3aGVuIGludGVycnVwdGluZy5cbiAgICBzZWxmLmludGVycnVwdCA/IG5vayA6IG9uQmxhbmssIGVmZmVjdHMuYXR0ZW1wdChsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2VDb25zdHJ1Y3QsIGVuZE9mUHJlZml4LCBvdGhlclByZWZpeCkpO1xuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gb25CbGFuayhjb2RlKSB7XG4gICAgc2VsZi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdHJ1ZTtcbiAgICBpbml0aWFsU2l6ZSsrO1xuICAgIHJldHVybiBlbmRPZlByZWZpeChjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIG90aGVyUHJlZml4KGNvZGUpIHtcbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcihcImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZVwiKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdChcImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZVwiKTtcbiAgICAgIHJldHVybiBlbmRPZlByZWZpeDtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGVuZE9mUHJlZml4KGNvZGUpIHtcbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlLnNpemUgPSBpbml0aWFsU2l6ZSArIHNlbGYuc2xpY2VTZXJpYWxpemUoZWZmZWN0cy5leGl0KFwibGlzdEl0ZW1QcmVmaXhcIiksIHRydWUpLmxlbmd0aDtcbiAgICByZXR1cm4gb2soY29kZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVMaXN0Q29udGludWF0aW9uKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHNlbGYuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdyA9IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGVmZmVjdHMuY2hlY2soYmxhbmtMaW5lLCBvbkJsYW5rLCBub3RCbGFuayk7XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gb25CbGFuayhjb2RlKSB7XG4gICAgc2VsZi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyA9IHNlbGYuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgfHwgc2VsZi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lO1xuXG4gICAgLy8gV2UgaGF2ZSBhIGJsYW5rIGxpbmUuXG4gICAgLy8gU3RpbGwsIHRyeSB0byBjb25zdW1lIGF0IG1vc3QgdGhlIGl0ZW1zIHNpemUuXG4gICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBvaywgXCJsaXN0SXRlbUluZGVudFwiLCBzZWxmLmNvbnRhaW5lclN0YXRlLnNpemUgKyAxKShjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIG5vdEJsYW5rKGNvZGUpIHtcbiAgICBpZiAoc2VsZi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyB8fCAhbWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBub3RJbkN1cnJlbnRJdGVtKGNvZGUpO1xuICAgIH1cbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzID0gdW5kZWZpbmVkO1xuICAgIHNlbGYuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGluZGVudENvbnN0cnVjdCwgb2ssIG5vdEluQ3VycmVudEl0ZW0pKGNvZGUpO1xuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gbm90SW5DdXJyZW50SXRlbShjb2RlKSB7XG4gICAgLy8gV2hpbGUgd2UgZG8gY29udGludWUsIHdlIHNpZ25hbCB0aGF0IHRoZSBmbG93IHNob3VsZCBiZSBjbG9zZWQuXG4gICAgc2VsZi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdHJ1ZTtcbiAgICAvLyBBcyB3ZVx1MjAxOXJlIGNsb3NpbmcgZmxvdywgd2VcdTIwMTlyZSBubyBsb25nZXIgaW50ZXJydXB0aW5nLlxuICAgIHNlbGYuaW50ZXJydXB0ID0gdW5kZWZpbmVkO1xuICAgIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG5cbiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGVmZmVjdHMuYXR0ZW1wdChsaXN0LCBvaywgbm9rKSwgXCJsaW5lUHJlZml4XCIsIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCdjb2RlSW5kZW50ZWQnKSA/IHVuZGVmaW5lZCA6IDQpKGNvZGUpO1xuICB9XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqICAgQ29udGV4dC5cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplSW5kZW50KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXJQcmVmaXgsIFwibGlzdEl0ZW1JbmRlbnRcIiwgc2VsZi5jb250YWluZXJTdGF0ZS5zaXplICsgMSk7XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gYWZ0ZXJQcmVmaXgoY29kZSkge1xuICAgIGNvbnN0IHRhaWwgPSBzZWxmLmV2ZW50c1tzZWxmLmV2ZW50cy5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09IFwibGlzdEl0ZW1JbmRlbnRcIiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA9PT0gc2VsZi5jb250YWluZXJTdGF0ZS5zaXplID8gb2soY29kZSkgOiBub2soY29kZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge0V4aXRlcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVMaXN0RW5kKGVmZmVjdHMpIHtcbiAgZWZmZWN0cy5leGl0KHRoaXMuY29udGFpbmVyU3RhdGUudHlwZSk7XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqICAgQ29udGV4dC5cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplTGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgLy8gQWx3YXlzIHBvcHVsYXRlZCBieSBkZWZhdWx0cy5cblxuICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyUHJlZml4LCBcImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZVwiLCBzZWxmLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygnY29kZUluZGVudGVkJykgPyB1bmRlZmluZWQgOiA0ICsgMSk7XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gYWZ0ZXJQcmVmaXgoY29kZSkge1xuICAgIGNvbnN0IHRhaWwgPSBzZWxmLmV2ZW50c1tzZWxmLmV2ZW50cy5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gIW1hcmtkb3duU3BhY2UoY29kZSkgJiYgdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09IFwibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlXCIgPyBvayhjb2RlKSA6IG5vayhjb2RlKTtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb2RlLFxuICogICBDb25zdHJ1Y3QsXG4gKiAgIFJlc29sdmVyLFxuICogICBTdGF0ZSxcbiAqICAgVG9rZW5pemVDb250ZXh0LFxuICogICBUb2tlbml6ZXJcbiAqIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuaW1wb3J0IHsgZmFjdG9yeVNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnO1xuaW1wb3J0IHsgbWFya2Rvd25MaW5lRW5kaW5nLCBtYXJrZG93blNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IHNldGV4dFVuZGVybGluZSA9IHtcbiAgbmFtZTogJ3NldGV4dFVuZGVybGluZScsXG4gIHJlc29sdmVUbzogcmVzb2x2ZVRvU2V0ZXh0VW5kZXJsaW5lLFxuICB0b2tlbml6ZTogdG9rZW5pemVTZXRleHRVbmRlcmxpbmVcbn07XG5cbi8qKiBAdHlwZSB7UmVzb2x2ZXJ9ICovXG5mdW5jdGlvbiByZXNvbHZlVG9TZXRleHRVbmRlcmxpbmUoZXZlbnRzLCBjb250ZXh0KSB7XG4gIC8vIFRvIGRvOiByZXNvbHZlIGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgbGV0IGluZGV4ID0gZXZlbnRzLmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGxldCBjb250ZW50O1xuICAvKiogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHRleHQ7XG4gIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgZGVmaW5pdGlvbjtcblxuICAvLyBGaW5kIHRoZSBvcGVuaW5nIG9mIHRoZSBjb250ZW50LlxuICAvLyBJdFx1MjAxOWxsIGFsd2F5cyBleGlzdDogd2UgZG9uXHUyMDE5dCB0b2tlbml6ZSBpZiBpdCBpc25cdTIwMTl0IHRoZXJlLlxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmIChldmVudHNbaW5kZXhdWzBdID09PSAnZW50ZXInKSB7XG4gICAgICBpZiAoZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSBcImNvbnRlbnRcIikge1xuICAgICAgICBjb250ZW50ID0gaW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gXCJwYXJhZ3JhcGhcIikge1xuICAgICAgICB0ZXh0ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEV4aXRcbiAgICBlbHNlIHtcbiAgICAgIGlmIChldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09IFwiY29udGVudFwiKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgY29udGVudCBlbmQgKGlmIG5lZWRlZCB3ZVx1MjAxOWxsIGFkZCBpdCBsYXRlcilcbiAgICAgICAgZXZlbnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgICBpZiAoIWRlZmluaXRpb24gJiYgZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSBcImRlZmluaXRpb25cIikge1xuICAgICAgICBkZWZpbml0aW9uID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGhlYWRpbmcgPSB7XG4gICAgdHlwZTogXCJzZXRleHRIZWFkaW5nXCIsXG4gICAgc3RhcnQ6IHtcbiAgICAgIC4uLmV2ZW50c1tjb250ZW50XVsxXS5zdGFydFxuICAgIH0sXG4gICAgZW5kOiB7XG4gICAgICAuLi5ldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLmVuZFxuICAgIH1cbiAgfTtcblxuICAvLyBDaGFuZ2UgdGhlIHBhcmFncmFwaCB0byBzZXRleHQgaGVhZGluZyB0ZXh0LlxuICBldmVudHNbdGV4dF1bMV0udHlwZSA9IFwic2V0ZXh0SGVhZGluZ1RleHRcIjtcblxuICAvLyBJZiB3ZSBoYXZlIGRlZmluaXRpb25zIGluIHRoZSBjb250ZW50LCB3ZVx1MjAxOWxsIGtlZXAgb24gaGF2aW5nIGNvbnRlbnQsXG4gIC8vIGJ1dCB3ZSBuZWVkIG1vdmUgaXQuXG4gIGlmIChkZWZpbml0aW9uKSB7XG4gICAgZXZlbnRzLnNwbGljZSh0ZXh0LCAwLCBbJ2VudGVyJywgaGVhZGluZywgY29udGV4dF0pO1xuICAgIGV2ZW50cy5zcGxpY2UoZGVmaW5pdGlvbiArIDEsIDAsIFsnZXhpdCcsIGV2ZW50c1tjb250ZW50XVsxXSwgY29udGV4dF0pO1xuICAgIGV2ZW50c1tjb250ZW50XVsxXS5lbmQgPSB7XG4gICAgICAuLi5ldmVudHNbZGVmaW5pdGlvbl1bMV0uZW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBldmVudHNbY29udGVudF1bMV0gPSBoZWFkaW5nO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBoZWFkaW5nIGV4aXQgYXQgdGhlIGVuZC5cbiAgZXZlbnRzLnB1c2goWydleGl0JywgaGVhZGluZywgY29udGV4dF0pO1xuICByZXR1cm4gZXZlbnRzO1xufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZVNldGV4dFVuZGVybGluZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAvKiogQHR5cGUge05vbk51bGxhYmxlPENvZGU+fSAqL1xuICBsZXQgbWFya2VyO1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqXG4gICAqIEF0IHN0YXJ0IG9mIGhlYWRpbmcgKHNldGV4dCkgdW5kZXJsaW5lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgYWFcbiAgICogPiB8ID09XG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgbGV0IGluZGV4ID0gc2VsZi5ldmVudHMubGVuZ3RoO1xuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgcGFyYWdyYXBoO1xuICAgIC8vIEZpbmQgYW4gb3BlbmluZy5cbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgLy8gU2tpcCBlbnRlci9leGl0IG9mIGxpbmUgZW5kaW5nLCBsaW5lIHByZWZpeCwgYW5kIGNvbnRlbnQuXG4gICAgICAvLyBXZSBjYW4gbm93IGVpdGhlciBoYXZlIGEgZGVmaW5pdGlvbiBvciBhIHBhcmFncmFwaC5cbiAgICAgIGlmIChzZWxmLmV2ZW50c1tpbmRleF1bMV0udHlwZSAhPT0gXCJsaW5lRW5kaW5nXCIgJiYgc2VsZi5ldmVudHNbaW5kZXhdWzFdLnR5cGUgIT09IFwibGluZVByZWZpeFwiICYmIHNlbGYuZXZlbnRzW2luZGV4XVsxXS50eXBlICE9PSBcImNvbnRlbnRcIikge1xuICAgICAgICBwYXJhZ3JhcGggPSBzZWxmLmV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gXCJwYXJhZ3JhcGhcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVG8gZG86IGhhbmRsZSBsYXp5L3BpZXJjZSBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgLy8gVG8gZG86IHBhcnNlIGluZGVudCBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgaWYgKCFzZWxmLnBhcnNlci5sYXp5W3NlbGYubm93KCkubGluZV0gJiYgKHNlbGYuaW50ZXJydXB0IHx8IHBhcmFncmFwaCkpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoXCJzZXRleHRIZWFkaW5nTGluZVwiKTtcbiAgICAgIG1hcmtlciA9IGNvZGU7XG4gICAgICByZXR1cm4gYmVmb3JlKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UsIGF0IGAtYCBvciBgPWAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCBhYVxuICAgKiA+IHwgPT1cbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGJlZm9yZShjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcihcInNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2VcIik7XG4gICAgcmV0dXJuIGluc2lkZShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBzZXF1ZW5jZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IGFhXG4gICAqID4gfCA9PVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbWFya2VyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gaW5zaWRlO1xuICAgIH1cbiAgICBlZmZlY3RzLmV4aXQoXCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlXCIpO1xuICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGUpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyLCBcImxpbmVTdWZmaXhcIikoY29kZSkgOiBhZnRlcihjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBzZXF1ZW5jZSwgYWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IGFhXG4gICAqID4gfCA9PVxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJzZXRleHRIZWFkaW5nTGluZVwiKTtcbiAgICAgIHJldHVybiBvayhjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxufSIsICJleHBvcnQgeyBhdHRlbnRpb24gfSBmcm9tICcuL2xpYi9hdHRlbnRpb24uanMnO1xuZXhwb3J0IHsgYXV0b2xpbmsgfSBmcm9tICcuL2xpYi9hdXRvbGluay5qcyc7XG5leHBvcnQgeyBibGFua0xpbmUgfSBmcm9tICcuL2xpYi9ibGFuay1saW5lLmpzJztcbmV4cG9ydCB7IGJsb2NrUXVvdGUgfSBmcm9tICcuL2xpYi9ibG9jay1xdW90ZS5qcyc7XG5leHBvcnQgeyBjaGFyYWN0ZXJFc2NhcGUgfSBmcm9tICcuL2xpYi9jaGFyYWN0ZXItZXNjYXBlLmpzJztcbmV4cG9ydCB7IGNoYXJhY3RlclJlZmVyZW5jZSB9IGZyb20gJy4vbGliL2NoYXJhY3Rlci1yZWZlcmVuY2UuanMnO1xuZXhwb3J0IHsgY29kZUZlbmNlZCB9IGZyb20gJy4vbGliL2NvZGUtZmVuY2VkLmpzJztcbmV4cG9ydCB7IGNvZGVJbmRlbnRlZCB9IGZyb20gJy4vbGliL2NvZGUtaW5kZW50ZWQuanMnO1xuZXhwb3J0IHsgY29kZVRleHQgfSBmcm9tICcuL2xpYi9jb2RlLXRleHQuanMnO1xuZXhwb3J0IHsgY29udGVudCB9IGZyb20gJy4vbGliL2NvbnRlbnQuanMnO1xuZXhwb3J0IHsgZGVmaW5pdGlvbiB9IGZyb20gJy4vbGliL2RlZmluaXRpb24uanMnO1xuZXhwb3J0IHsgaGFyZEJyZWFrRXNjYXBlIH0gZnJvbSAnLi9saWIvaGFyZC1icmVhay1lc2NhcGUuanMnO1xuZXhwb3J0IHsgaGVhZGluZ0F0eCB9IGZyb20gJy4vbGliL2hlYWRpbmctYXR4LmpzJztcbmV4cG9ydCB7IGh0bWxGbG93IH0gZnJvbSAnLi9saWIvaHRtbC1mbG93LmpzJztcbmV4cG9ydCB7IGh0bWxUZXh0IH0gZnJvbSAnLi9saWIvaHRtbC10ZXh0LmpzJztcbmV4cG9ydCB7IGxhYmVsRW5kIH0gZnJvbSAnLi9saWIvbGFiZWwtZW5kLmpzJztcbmV4cG9ydCB7IGxhYmVsU3RhcnRJbWFnZSB9IGZyb20gJy4vbGliL2xhYmVsLXN0YXJ0LWltYWdlLmpzJztcbmV4cG9ydCB7IGxhYmVsU3RhcnRMaW5rIH0gZnJvbSAnLi9saWIvbGFiZWwtc3RhcnQtbGluay5qcyc7XG5leHBvcnQgeyBsaW5lRW5kaW5nIH0gZnJvbSAnLi9saWIvbGluZS1lbmRpbmcuanMnO1xuZXhwb3J0IHsgbGlzdCB9IGZyb20gJy4vbGliL2xpc3QuanMnO1xuZXhwb3J0IHsgc2V0ZXh0VW5kZXJsaW5lIH0gZnJvbSAnLi9saWIvc2V0ZXh0LXVuZGVybGluZS5qcyc7XG5leHBvcnQgeyB0aGVtYXRpY0JyZWFrIH0gZnJvbSAnLi9saWIvdGhlbWF0aWMtYnJlYWsuanMnOyIsICIvKipcbiAqIEBpbXBvcnQge0V2ZW50LCBFeGl0ZXIsIEV4dGVuc2lvbiwgUmVzb2x2ZXIsIFN0YXRlLCBUb2tlbiwgVG9rZW5pemVDb250ZXh0LCBUb2tlbml6ZXJ9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IGJsYW5rTGluZSB9IGZyb20gJ21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsnO1xuaW1wb3J0IHsgZmFjdG9yeVNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnO1xuaW1wb3J0IHsgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZSB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcic7XG5pbXBvcnQgeyBub3JtYWxpemVJZGVudGlmaWVyIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXInO1xuY29uc3QgaW5kZW50ID0ge1xuICB0b2tlbml6ZTogdG9rZW5pemVJbmRlbnQsXG4gIHBhcnRpYWw6IHRydWVcbn07XG5cbi8vIFRvIGRvOiBtaWNyb21hcmsgc2hvdWxkIHN1cHBvcnQgYSBgX2hpZGRlbkdmbUZvb3Rub3RlU3VwcG9ydGAsIHdoaWNoIG9ubHlcbi8vIGFmZmVjdHMgbGFiZWwgc3RhcnQgKGltYWdlKS5cbi8vIFRoYXQgd2lsbCBsZXQgdXMgZHJvcCBgdG9rZW5pemVQb3RlbnRpYWxHZm1Gb290bm90ZSpgLlxuLy8gSXQgY3VycmVudGx5IGhhcyBhIGBfaGlkZGVuRm9vdG5vdGVTdXBwb3J0YCwgd2hpY2ggYWZmZWN0cyB0aGF0IGFuZCBtb3JlLlxuLy8gVGhhdCBjYW4gYmUgcmVtb3ZlZCB3aGVuIGBtaWNyb21hcmstZXh0ZW5zaW9uLWZvb3Rub3RlYCBpcyBhcmNoaXZlZC5cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0byBlbmFibGUgR0ZNIGZvb3Rub3RlIHN5bnRheC5cbiAqXG4gKiBAcmV0dXJucyB7RXh0ZW5zaW9ufVxuICogICBFeHRlbnNpb24gZm9yIGBtaWNyb21hcmtgIHRoYXQgY2FuIGJlIHBhc3NlZCBpbiBgZXh0ZW5zaW9uc2AgdG9cbiAqICAgZW5hYmxlIEdGTSBmb290bm90ZSBzeW50YXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZm1Gb290bm90ZSgpIHtcbiAgLyoqIEB0eXBlIHtFeHRlbnNpb259ICovXG4gIHJldHVybiB7XG4gICAgZG9jdW1lbnQ6IHtcbiAgICAgIFs5MV06IHtcbiAgICAgICAgbmFtZTogJ2dmbUZvb3Rub3RlRGVmaW5pdGlvbicsXG4gICAgICAgIHRva2VuaXplOiB0b2tlbml6ZURlZmluaXRpb25TdGFydCxcbiAgICAgICAgY29udGludWF0aW9uOiB7XG4gICAgICAgICAgdG9rZW5pemU6IHRva2VuaXplRGVmaW5pdGlvbkNvbnRpbnVhdGlvblxuICAgICAgICB9LFxuICAgICAgICBleGl0OiBnZm1Gb290bm90ZURlZmluaXRpb25FbmRcbiAgICAgIH1cbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIFs5MV06IHtcbiAgICAgICAgbmFtZTogJ2dmbUZvb3Rub3RlQ2FsbCcsXG4gICAgICAgIHRva2VuaXplOiB0b2tlbml6ZUdmbUZvb3Rub3RlQ2FsbFxuICAgICAgfSxcbiAgICAgIFs5M106IHtcbiAgICAgICAgbmFtZTogJ2dmbVBvdGVudGlhbEZvb3Rub3RlQ2FsbCcsXG4gICAgICAgIGFkZDogJ2FmdGVyJyxcbiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsLFxuICAgICAgICByZXNvbHZlVG86IHJlc29sdmVUb1BvdGVudGlhbEdmbUZvb3Rub3RlQ2FsbFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuLy8gVG8gZG86IHJlbW92ZSBhZnRlciBtaWNyb21hcmsgdXBkYXRlLlxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVQb3RlbnRpYWxHZm1Gb290bm90ZUNhbGwoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgbGV0IGluZGV4ID0gc2VsZi5ldmVudHMubGVuZ3RoO1xuICBjb25zdCBkZWZpbmVkID0gc2VsZi5wYXJzZXIuZ2ZtRm9vdG5vdGVzIHx8IChzZWxmLnBhcnNlci5nZm1Gb290bm90ZXMgPSBbXSk7XG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGxldCBsYWJlbFN0YXJ0O1xuXG4gIC8vIEZpbmQgYW4gb3BlbmluZy5cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBjb25zdCB0b2tlbiA9IHNlbGYuZXZlbnRzW2luZGV4XVsxXTtcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJsYWJlbEltYWdlXCIpIHtcbiAgICAgIGxhYmVsU3RhcnQgPSB0b2tlbjtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIEV4aXQgaWYgd2VcdTIwMTl2ZSB3YWxrZWQgZmFyIGVub3VnaC5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2dmbUZvb3Rub3RlQ2FsbCcgfHwgdG9rZW4udHlwZSA9PT0gXCJsYWJlbExpbmtcIiB8fCB0b2tlbi50eXBlID09PSBcImxhYmVsXCIgfHwgdG9rZW4udHlwZSA9PT0gXCJpbWFnZVwiIHx8IHRva2VuLnR5cGUgPT09IFwibGlua1wiKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0YXJ0O1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKCFsYWJlbFN0YXJ0IHx8ICFsYWJlbFN0YXJ0Ll9iYWxhbmNlZCkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSBub3JtYWxpemVJZGVudGlmaWVyKHNlbGYuc2xpY2VTZXJpYWxpemUoe1xuICAgICAgc3RhcnQ6IGxhYmVsU3RhcnQuZW5kLFxuICAgICAgZW5kOiBzZWxmLm5vdygpXG4gICAgfSkpO1xuICAgIGlmIChpZC5jb2RlUG9pbnRBdCgwKSAhPT0gOTQgfHwgIWRlZmluZWQuaW5jbHVkZXMoaWQuc2xpY2UoMSkpKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlcicpO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICBlZmZlY3RzLmV4aXQoJ2dmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyJyk7XG4gICAgcmV0dXJuIG9rKGNvZGUpO1xuICB9XG59XG5cbi8vIFRvIGRvOiByZW1vdmUgYWZ0ZXIgbWljcm9tYXJrIHVwZGF0ZS5cbi8qKiBAdHlwZSB7UmVzb2x2ZXJ9ICovXG5mdW5jdGlvbiByZXNvbHZlVG9Qb3RlbnRpYWxHZm1Gb290bm90ZUNhbGwoZXZlbnRzLCBjb250ZXh0KSB7XG4gIGxldCBpbmRleCA9IGV2ZW50cy5sZW5ndGg7XG4gIC8qKiBAdHlwZSB7VG9rZW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBsYWJlbFN0YXJ0O1xuXG4gIC8vIEZpbmQgYW4gb3BlbmluZy5cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAoZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSBcImxhYmVsSW1hZ2VcIiAmJiBldmVudHNbaW5kZXhdWzBdID09PSAnZW50ZXInKSB7XG4gICAgICBsYWJlbFN0YXJ0ID0gZXZlbnRzW2luZGV4XVsxXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICAvLyBDaGFuZ2UgdGhlIGBsYWJlbEltYWdlTWFya2VyYCB0byBhIGBkYXRhYC5cbiAgZXZlbnRzW2luZGV4ICsgMV1bMV0udHlwZSA9IFwiZGF0YVwiO1xuICBldmVudHNbaW5kZXggKyAzXVsxXS50eXBlID0gJ2dmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyJztcblxuICAvLyBUaGUgd2hvbGUgKHdpdGhvdXQgYCFgKTpcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgY29uc3QgY2FsbCA9IHtcbiAgICB0eXBlOiAnZ2ZtRm9vdG5vdGVDYWxsJyxcbiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2luZGV4ICsgM11bMV0uc3RhcnQpLFxuICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXVsxXS5lbmQpXG4gIH07XG4gIC8vIFRoZSBgXmAgbWFya2VyXG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGNvbnN0IG1hcmtlciA9IHtcbiAgICB0eXBlOiAnZ2ZtRm9vdG5vdGVDYWxsTWFya2VyJyxcbiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2luZGV4ICsgM11bMV0uZW5kKSxcbiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleCArIDNdWzFdLmVuZClcbiAgfTtcbiAgLy8gSW5jcmVtZW50IHRoZSBlbmQgMSBjaGFyYWN0ZXIuXG4gIG1hcmtlci5lbmQuY29sdW1uKys7XG4gIG1hcmtlci5lbmQub2Zmc2V0Kys7XG4gIG1hcmtlci5lbmQuX2J1ZmZlckluZGV4Kys7XG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGNvbnN0IHN0cmluZyA9IHtcbiAgICB0eXBlOiAnZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nJyxcbiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgbWFya2VyLmVuZCksXG4gICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLnN0YXJ0KVxuICB9O1xuICAvKiogQHR5cGUge1Rva2VufSAqL1xuICBjb25zdCBjaHVuayA9IHtcbiAgICB0eXBlOiBcImNodW5rU3RyaW5nXCIsXG4gICAgY29udGVudFR5cGU6ICdzdHJpbmcnLFxuICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBzdHJpbmcuc3RhcnQpLFxuICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgc3RyaW5nLmVuZClcbiAgfTtcblxuICAvKiogQHR5cGUge0FycmF5PEV2ZW50Pn0gKi9cbiAgY29uc3QgcmVwbGFjZW1lbnQgPSBbXG4gIC8vIFRha2UgdGhlIGBsYWJlbEltYWdlTWFya2VyYCAobm93IGBkYXRhYCwgdGhlIGAhYClcbiAgZXZlbnRzW2luZGV4ICsgMV0sIGV2ZW50c1tpbmRleCArIDJdLCBbJ2VudGVyJywgY2FsbCwgY29udGV4dF0sXG4gIC8vIFRoZSBgW2BcbiAgZXZlbnRzW2luZGV4ICsgM10sIGV2ZW50c1tpbmRleCArIDRdLFxuICAvLyBUaGUgYF5gLlxuICBbJ2VudGVyJywgbWFya2VyLCBjb250ZXh0XSwgWydleGl0JywgbWFya2VyLCBjb250ZXh0XSxcbiAgLy8gRXZlcnl0aGluZyBpbiBiZXR3ZWVuLlxuICBbJ2VudGVyJywgc3RyaW5nLCBjb250ZXh0XSwgWydlbnRlcicsIGNodW5rLCBjb250ZXh0XSwgWydleGl0JywgY2h1bmssIGNvbnRleHRdLCBbJ2V4aXQnLCBzdHJpbmcsIGNvbnRleHRdLFxuICAvLyBUaGUgZW5kaW5nIChgXWAsIHByb3Blcmx5IHBhcnNlZCBhbmQgbGFiZWxsZWQpLlxuICBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDJdLCBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdLCBbJ2V4aXQnLCBjYWxsLCBjb250ZXh0XV07XG4gIGV2ZW50cy5zcGxpY2UoaW5kZXgsIGV2ZW50cy5sZW5ndGggLSBpbmRleCArIDEsIC4uLnJlcGxhY2VtZW50KTtcbiAgcmV0dXJuIGV2ZW50cztcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVHZm1Gb290bm90ZUNhbGwoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgY29uc3QgZGVmaW5lZCA9IHNlbGYucGFyc2VyLmdmbUZvb3Rub3RlcyB8fCAoc2VsZi5wYXJzZXIuZ2ZtRm9vdG5vdGVzID0gW10pO1xuICBsZXQgc2l6ZSA9IDA7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IGRhdGE7XG5cbiAgLy8gTm90ZTogdGhlIGltcGxlbWVudGF0aW9uIG9mIGBtYXJrZG93bi1yc2AgaXMgZGlmZmVyZW50LCBiZWNhdXNlIGl0IGhvdXNlc1xuICAvLyBjb3JlICphbmQqIGV4dGVuc2lvbnMgaW4gb25lIHByb2plY3QuXG4gIC8vIFRoZXJlZm9yZSwgaXQgY2FuIGluY2x1ZGUgZm9vdG5vdGUgbG9naWMgaW5zaWRlIGBsYWJlbC1lbmRgLlxuICAvLyBXZSBjYW5cdTIwMTl0IGRvIHRoYXQsIGJ1dCBsdWNraWx5LCB3ZSBjYW4gcGFyc2UgZm9vdG5vdGVzIGluIGEgc2ltcGxlciB3YXkgdGhhblxuICAvLyBuZWVkZWQgZm9yIGxhYmVscy5cbiAgcmV0dXJuIHN0YXJ0O1xuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBmb290bm90ZSBsYWJlbC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgW15iXSBjXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKCdnZm1Gb290bm90ZUNhbGwnKTtcbiAgICBlZmZlY3RzLmVudGVyKCdnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlcicpO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICBlZmZlY3RzLmV4aXQoJ2dmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyJyk7XG4gICAgcmV0dXJuIGNhbGxTdGFydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgW2AsIGF0IGBeYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgW15iXSBjXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjYWxsU3RhcnQoY29kZSkge1xuICAgIGlmIChjb2RlICE9PSA5NCkgcmV0dXJuIG5vayhjb2RlKTtcbiAgICBlZmZlY3RzLmVudGVyKCdnZm1Gb290bm90ZUNhbGxNYXJrZXInKTtcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgZWZmZWN0cy5leGl0KCdnZm1Gb290bm90ZUNhbGxNYXJrZXInKTtcbiAgICBlZmZlY3RzLmVudGVyKCdnZm1Gb290bm90ZUNhbGxTdHJpbmcnKTtcbiAgICBlZmZlY3RzLmVudGVyKCdjaHVua1N0cmluZycpLmNvbnRlbnRUeXBlID0gJ3N0cmluZyc7XG4gICAgcmV0dXJuIGNhbGxEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGxhYmVsLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSBbXmJdIGNcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjYWxsRGF0YShjb2RlKSB7XG4gICAgaWYgKFxuICAgIC8vIFRvbyBsb25nLlxuICAgIHNpemUgPiA5OTkgfHxcbiAgICAvLyBDbG9zaW5nIGJyYWNlIHdpdGggbm90aGluZy5cbiAgICBjb2RlID09PSA5MyAmJiAhZGF0YSB8fFxuICAgIC8vIFNwYWNlIG9yIHRhYiBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdGTSBmb3Igc29tZSByZWFzb24uXG4gICAgLy8gYFxcbmAgYW5kIGBbYCBub3QgYmVpbmcgc3VwcG9ydGVkIG1ha2VzIHNlbnNlLlxuICAgIGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gOTEgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDkzKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoJ2NodW5rU3RyaW5nJyk7XG4gICAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCgnZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nJyk7XG4gICAgICBpZiAoIWRlZmluZWQuaW5jbHVkZXMobm9ybWFsaXplSWRlbnRpZmllcihzZWxmLnNsaWNlU2VyaWFsaXplKHRva2VuKSkpKSB7XG4gICAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgICB9XG4gICAgICBlZmZlY3RzLmVudGVyKCdnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlcicpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KCdnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlcicpO1xuICAgICAgZWZmZWN0cy5leGl0KCdnZm1Gb290bm90ZUNhbGwnKTtcbiAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgaWYgKCFtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpKSB7XG4gICAgICBkYXRhID0gdHJ1ZTtcbiAgICB9XG4gICAgc2l6ZSsrO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICByZXR1cm4gY29kZSA9PT0gOTIgPyBjYWxsRXNjYXBlIDogY2FsbERhdGE7XG4gIH1cblxuICAvKipcbiAgICogT24gY2hhcmFjdGVyIGFmdGVyIGVzY2FwZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgW15iXFxjXSBkXG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjYWxsRXNjYXBlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gOTEgfHwgY29kZSA9PT0gOTIgfHwgY29kZSA9PT0gOTMpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHNpemUrKztcbiAgICAgIHJldHVybiBjYWxsRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbGxEYXRhKGNvZGUpO1xuICB9XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplRGVmaW5pdGlvblN0YXJ0KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGNvbnN0IGRlZmluZWQgPSBzZWxmLnBhcnNlci5nZm1Gb290bm90ZXMgfHwgKHNlbGYucGFyc2VyLmdmbUZvb3Rub3RlcyA9IFtdKTtcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGxldCBpZGVudGlmaWVyO1xuICBsZXQgc2l6ZSA9IDA7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGRhdGE7XG4gIHJldHVybiBzdGFydDtcblxuICAvKipcbiAgICogU3RhcnQgb2YgR0ZNIGZvb3Rub3RlIGRlZmluaXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbXmFdOiBiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcignZ2ZtRm9vdG5vdGVEZWZpbml0aW9uJykuX2NvbnRhaW5lciA9IHRydWU7XG4gICAgZWZmZWN0cy5lbnRlcignZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWwnKTtcbiAgICBlZmZlY3RzLmVudGVyKCdnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbE1hcmtlcicpO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICBlZmZlY3RzLmV4aXQoJ2dmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyJyk7XG4gICAgcmV0dXJuIGxhYmVsQXRNYXJrZXI7XG4gIH1cblxuICAvKipcbiAgICogSW4gbGFiZWwsIGF0IGNhcmV0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW15hXTogYlxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGxhYmVsQXRNYXJrZXIoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA5NCkge1xuICAgICAgZWZmZWN0cy5lbnRlcignZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTWFya2VyJyk7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoJ2dmbUZvb3Rub3RlRGVmaW5pdGlvbk1hcmtlcicpO1xuICAgICAgZWZmZWN0cy5lbnRlcignZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcnKTtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ2NodW5rU3RyaW5nJykuY29udGVudFR5cGUgPSAnc3RyaW5nJztcbiAgICAgIHJldHVybiBsYWJlbEluc2lkZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBsYWJlbC5cbiAgICpcbiAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IGBjbWFyay1nZm1gIHByZXZlbnRzIHdoaXRlc3BhY2UgZnJvbSBvY2N1cnJpbmcgaW4gZm9vdG5vdGVcbiAgICogPiBkZWZpbml0aW9uIGxhYmVscy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFteYV06IGJcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbGFiZWxJbnNpZGUoY29kZSkge1xuICAgIGlmIChcbiAgICAvLyBUb28gbG9uZy5cbiAgICBzaXplID4gOTk5IHx8XG4gICAgLy8gQ2xvc2luZyBicmFjZSB3aXRoIG5vdGhpbmcuXG4gICAgY29kZSA9PT0gOTMgJiYgIWRhdGEgfHxcbiAgICAvLyBTcGFjZSBvciB0YWIgaXMgbm90IHN1cHBvcnRlZCBieSBHRk0gZm9yIHNvbWUgcmVhc29uLlxuICAgIC8vIGBcXG5gIGFuZCBgW2Agbm90IGJlaW5nIHN1cHBvcnRlZCBtYWtlcyBzZW5zZS5cbiAgICBjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IDkxIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkpIHtcbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSA5Mykge1xuICAgICAgZWZmZWN0cy5leGl0KCdjaHVua1N0cmluZycpO1xuICAgICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmV4aXQoJ2dmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nJyk7XG4gICAgICBpZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihzZWxmLnNsaWNlU2VyaWFsaXplKHRva2VuKSk7XG4gICAgICBlZmZlY3RzLmVudGVyKCdnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbE1hcmtlcicpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KCdnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbE1hcmtlcicpO1xuICAgICAgZWZmZWN0cy5leGl0KCdnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbCcpO1xuICAgICAgcmV0dXJuIGxhYmVsQWZ0ZXI7XG4gICAgfVxuICAgIGlmICghbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSkge1xuICAgICAgZGF0YSA9IHRydWU7XG4gICAgfVxuICAgIHNpemUrKztcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIGNvZGUgPT09IDkyID8gbGFiZWxFc2NhcGUgOiBsYWJlbEluc2lkZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgXFxgLCBhdCBhIHNwZWNpYWwgY2hhcmFjdGVyLlxuICAgKlxuICAgKiA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogYGNtYXJrLWdmbWAgY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgZXNjYXBlZCBicmFja2V0czpcbiAgICogPiA8aHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9jbWFyay1nZm0vaXNzdWVzLzI0MD5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFteYVxcKmJdOiBjXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbGFiZWxFc2NhcGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA5MSB8fCBjb2RlID09PSA5MiB8fCBjb2RlID09PSA5Mykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgc2l6ZSsrO1xuICAgICAgcmV0dXJuIGxhYmVsSW5zaWRlO1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWxJbnNpZGUoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgZGVmaW5pdGlvbiBsYWJlbC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFteYV06IGJcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsYWJlbEFmdGVyKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNTgpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ2RlZmluaXRpb25NYXJrZXInKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdCgnZGVmaW5pdGlvbk1hcmtlcicpO1xuICAgICAgaWYgKCFkZWZpbmVkLmluY2x1ZGVzKGlkZW50aWZpZXIpKSB7XG4gICAgICAgIGRlZmluZWQucHVzaChpZGVudGlmaWVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gQW55IHdoaXRlc3BhY2UgYWZ0ZXIgdGhlIG1hcmtlciBpcyBlYXRlbiwgZm9ybWluZyBpbmRlbnRlZCBjb2RlXG4gICAgICAvLyBpcyBub3QgcG9zc2libGUuXG4gICAgICAvLyBObyBzcGFjZSBpcyBhbHNvIGZpbmUsIGp1c3QgbGlrZSBhIGJsb2NrIHF1b3RlIG1hcmtlci5cbiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgd2hpdGVzcGFjZUFmdGVyLCAnZ2ZtRm9vdG5vdGVEZWZpbml0aW9uV2hpdGVzcGFjZScpO1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGRlZmluaXRpb24gcHJlZml4LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW15hXTogYlxuICAgKiAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gd2hpdGVzcGFjZUFmdGVyKGNvZGUpIHtcbiAgICAvLyBgbWFya2Rvd24tcnNgIGhhcyBhIHdyYXBwaW5nIHRva2VuIGZvciB0aGUgcHJlZml4IHRoYXQgaXMgY2xvc2VkIGhlcmUuXG4gICAgcmV0dXJuIG9rKGNvZGUpO1xuICB9XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplRGVmaW5pdGlvbkNvbnRpbnVhdGlvbihlZmZlY3RzLCBvaywgbm9rKSB7XG4gIC8vLyBTdGFydCBvZiBmb290bm90ZSBkZWZpbml0aW9uIGNvbnRpbnVhdGlvbi5cbiAgLy8vXG4gIC8vLyBgYGBtYXJrZG93blxuICAvLy8gICB8IFteYV06IGJcbiAgLy8vID4gfCAgICAgY1xuICAvLy8gICAgIF5cbiAgLy8vIGBgYFxuICAvL1xuICAvLyBFaXRoZXIgYSBibGFuayBsaW5lLCB3aGljaCBpcyBva2F5LCBvciBhbiBpbmRlbnRlZCB0aGluZy5cbiAgcmV0dXJuIGVmZmVjdHMuY2hlY2soYmxhbmtMaW5lLCBvaywgZWZmZWN0cy5hdHRlbXB0KGluZGVudCwgb2ssIG5vaykpO1xufVxuXG4vKiogQHR5cGUge0V4aXRlcn0gKi9cbmZ1bmN0aW9uIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkVuZChlZmZlY3RzKSB7XG4gIGVmZmVjdHMuZXhpdCgnZ2ZtRm9vdG5vdGVEZWZpbml0aW9uJyk7XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplSW5kZW50KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXJQcmVmaXgsICdnZm1Gb290bm90ZURlZmluaXRpb25JbmRlbnQnLCA0ICsgMSk7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGUpIHtcbiAgICBjb25zdCB0YWlsID0gc2VsZi5ldmVudHNbc2VsZi5ldmVudHMubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSAnZ2ZtRm9vdG5vdGVEZWZpbml0aW9uSW5kZW50JyAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA9PT0gNCA/IG9rKGNvZGUpIDogbm9rKGNvZGUpO1xuICB9XG59IiwgIi8qKlxuICogQGltcG9ydCB7SHRtbE9wdGlvbnMgYXMgT3B0aW9uc30gZnJvbSAnbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUnXG4gKiBAaW1wb3J0IHtIdG1sRXh0ZW5zaW9ufSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBub3JtYWxpemVJZGVudGlmaWVyIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXInO1xuaW1wb3J0IHsgc2FuaXRpemVVcmkgfSBmcm9tICdtaWNyb21hcmstdXRpbC1zYW5pdGl6ZS11cmknO1xuY29uc3Qgb3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBAdHlwZSB7T3B0aW9uc30gKi9cbmNvbnN0IGVtcHR5T3B0aW9ucyA9IHt9O1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBkZWZhdWx0IGxhYmVsIHRoYXQgR2l0SHViIHVzZXMgb24gYmFja3JlZmVyZW5jZXMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJlZmVyZW5jZUluZGV4XG4gKiAgIEluZGV4IG9mIHRoZSBkZWZpbml0aW9uIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXJlIGZpcnN0IHJlZmVyZW5jZWQsXG4gKiAgIDAtaW5kZXhlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByZXJlZmVyZW5jZUluZGV4XG4gKiAgIEluZGV4IG9mIGNhbGxzIHRvIHRoZSBzYW1lIGRlZmluaXRpb24sIDAtaW5kZXhlZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIERlZmF1bHQgbGFiZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0QmFja0xhYmVsKHJlZmVyZW5jZUluZGV4LCByZXJlZmVyZW5jZUluZGV4KSB7XG4gIHJldHVybiAnQmFjayB0byByZWZlcmVuY2UgJyArIChyZWZlcmVuY2VJbmRleCArIDEpICsgKHJlcmVmZXJlbmNlSW5kZXggPiAxID8gJy0nICsgcmVyZWZlcmVuY2VJbmRleCA6ICcnKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0byBzdXBwb3J0IEdGTSBmb290bm90ZXMgd2hlblxuICogc2VyaWFsaXppbmcgdG8gSFRNTC5cbiAqXG4gKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9ucz17fV1cbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICogQHJldHVybnMge0h0bWxFeHRlbnNpb259XG4gKiAgIEV4dGVuc2lvbiBmb3IgYG1pY3JvbWFya2AgdGhhdCBjYW4gYmUgcGFzc2VkIGluIGBodG1sRXh0ZW5zaW9uc2AgdG9cbiAqICAgc3VwcG9ydCBHRk0gZm9vdG5vdGVzIHdoZW4gc2VyaWFsaXppbmcgdG8gSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdmbUZvb3Rub3RlSHRtbChvcHRpb25zKSB7XG4gIGNvbnN0IGNvbmZpZyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zO1xuICBjb25zdCBsYWJlbCA9IGNvbmZpZy5sYWJlbCB8fCAnRm9vdG5vdGVzJztcbiAgY29uc3QgbGFiZWxUYWdOYW1lID0gY29uZmlnLmxhYmVsVGFnTmFtZSB8fCAnaDInO1xuICBjb25zdCBsYWJlbEF0dHJpYnV0ZXMgPSBjb25maWcubGFiZWxBdHRyaWJ1dGVzID09PSBudWxsIHx8IGNvbmZpZy5sYWJlbEF0dHJpYnV0ZXMgPT09IHVuZGVmaW5lZCA/ICdjbGFzcz1cInNyLW9ubHlcIicgOiBjb25maWcubGFiZWxBdHRyaWJ1dGVzO1xuICBjb25zdCBiYWNrTGFiZWwgPSBjb25maWcuYmFja0xhYmVsIHx8IGRlZmF1bHRCYWNrTGFiZWw7XG4gIGNvbnN0IGNsb2JiZXJQcmVmaXggPSBjb25maWcuY2xvYmJlclByZWZpeCA9PT0gbnVsbCB8fCBjb25maWcuY2xvYmJlclByZWZpeCA9PT0gdW5kZWZpbmVkID8gJ3VzZXItY29udGVudC0nIDogY29uZmlnLmNsb2JiZXJQcmVmaXg7XG4gIHJldHVybiB7XG4gICAgZW50ZXI6IHtcbiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbigpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSB0aGlzLmdldERhdGEoJ3RpZ2h0U3RhY2snKTtcbiAgICAgICAgc3RhY2sucHVzaChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcoKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyKCk7XG4gICAgICB9LFxuICAgICAgZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nKCkge1xuICAgICAgICB0aGlzLmJ1ZmZlcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXhpdDoge1xuICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uKCkge1xuICAgICAgICBsZXQgZGVmaW5pdGlvbnMgPSB0aGlzLmdldERhdGEoJ2dmbUZvb3Rub3RlRGVmaW5pdGlvbnMnKTtcbiAgICAgICAgY29uc3QgZm9vdG5vdGVTdGFjayA9IHRoaXMuZ2V0RGF0YSgnZ2ZtRm9vdG5vdGVEZWZpbml0aW9uU3RhY2snKTtcbiAgICAgICAgY29uc3QgdGlnaHRTdGFjayA9IHRoaXMuZ2V0RGF0YSgndGlnaHRTdGFjaycpO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gZm9vdG5vdGVTdGFjay5wb3AoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlc3VtZSgpO1xuICAgICAgICBpZiAoIWRlZmluaXRpb25zKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKCdnZm1Gb290bm90ZURlZmluaXRpb25zJywgZGVmaW5pdGlvbnMgPSB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvd24uY2FsbChkZWZpbml0aW9ucywgY3VycmVudCkpIGRlZmluaXRpb25zW2N1cnJlbnRdID0gdmFsdWU7XG4gICAgICAgIHRpZ2h0U3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMuc2V0RGF0YSgnc2x1cnBPbmVMaW5lRW5kaW5nJywgdHJ1ZSk7XG4gICAgICAgIC8vIFx1MjAxQ0hhY2tcdTIwMUQgdG8gcHJldmVudCBhIGxpbmUgZW5kaW5nIGZyb20gc2hvd2luZyB1cCBpZiB3ZVx1MjAxOXJlIGluIGEgZGVmaW5pdGlvbiBpblxuICAgICAgICAvLyBhbiBlbXB0eSBsaXN0IGl0ZW0uXG4gICAgICAgIHRoaXMuc2V0RGF0YSgnbGFzdFdhc1RhZycpO1xuICAgICAgfSxcbiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKHRva2VuKSB7XG4gICAgICAgIGxldCBmb290bm90ZVN0YWNrID0gdGhpcy5nZXREYXRhKCdnZm1Gb290bm90ZURlZmluaXRpb25TdGFjaycpO1xuICAgICAgICBpZiAoIWZvb3Rub3RlU3RhY2spIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEoJ2dmbUZvb3Rub3RlRGVmaW5pdGlvblN0YWNrJywgZm9vdG5vdGVTdGFjayA9IFtdKTtcbiAgICAgICAgfVxuICAgICAgICBmb290bm90ZVN0YWNrLnB1c2gobm9ybWFsaXplSWRlbnRpZmllcih0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkpO1xuICAgICAgICB0aGlzLnJlc3VtZSgpOyAvLyBEcm9wIHRoZSBsYWJlbC5cbiAgICAgICAgdGhpcy5idWZmZXIoKTsgLy8gR2V0IHJlYWR5IGZvciBhIHZhbHVlLlxuICAgICAgfSxcbiAgICAgIGdmbUZvb3Rub3RlQ2FsbFN0cmluZyh0b2tlbikge1xuICAgICAgICBsZXQgY2FsbHMgPSB0aGlzLmdldERhdGEoJ2dmbUZvb3Rub3RlQ2FsbE9yZGVyJyk7XG4gICAgICAgIGxldCBjb3VudHMgPSB0aGlzLmdldERhdGEoJ2dmbUZvb3Rub3RlQ2FsbENvdW50cycpO1xuICAgICAgICBjb25zdCBpZCA9IG5vcm1hbGl6ZUlkZW50aWZpZXIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpO1xuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICAgICAgbGV0IGNvdW50ZXI7XG4gICAgICAgIHRoaXMucmVzdW1lKCk7XG4gICAgICAgIGlmICghY2FsbHMpIHRoaXMuc2V0RGF0YSgnZ2ZtRm9vdG5vdGVDYWxsT3JkZXInLCBjYWxscyA9IFtdKTtcbiAgICAgICAgaWYgKCFjb3VudHMpIHRoaXMuc2V0RGF0YSgnZ2ZtRm9vdG5vdGVDYWxsQ291bnRzJywgY291bnRzID0ge30pO1xuICAgICAgICBjb25zdCBpbmRleCA9IGNhbGxzLmluZGV4T2YoaWQpO1xuICAgICAgICBjb25zdCBzYWZlSWQgPSBzYW5pdGl6ZVVyaShpZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgIGNhbGxzLnB1c2goaWQpO1xuICAgICAgICAgIGNvdW50c1tpZF0gPSAxO1xuICAgICAgICAgIGNvdW50ZXIgPSBjYWxscy5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY291bnRzW2lkXSsrO1xuICAgICAgICAgIGNvdW50ZXIgPSBpbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1c2VDb3VudGVyID0gY291bnRzW2lkXTtcbiAgICAgICAgdGhpcy50YWcoJzxzdXA+PGEgaHJlZj1cIiMnICsgY2xvYmJlclByZWZpeCArICdmbi0nICsgc2FmZUlkICsgJ1wiIGlkPVwiJyArIGNsb2JiZXJQcmVmaXggKyAnZm5yZWYtJyArIHNhZmVJZCArIChyZXVzZUNvdW50ZXIgPiAxID8gJy0nICsgcmV1c2VDb3VudGVyIDogJycpICsgJ1wiIGRhdGEtZm9vdG5vdGUtcmVmPVwiXCIgYXJpYS1kZXNjcmliZWRieT1cImZvb3Rub3RlLWxhYmVsXCI+JyArIFN0cmluZyhjb3VudGVyKSArICc8L2E+PC9zdXA+Jyk7XG4gICAgICB9LFxuICAgICAgbnVsbCgpIHtcbiAgICAgICAgY29uc3QgY2FsbHMgPSB0aGlzLmdldERhdGEoJ2dmbUZvb3Rub3RlQ2FsbE9yZGVyJykgfHwgW107XG4gICAgICAgIGNvbnN0IGNvdW50cyA9IHRoaXMuZ2V0RGF0YSgnZ2ZtRm9vdG5vdGVDYWxsQ291bnRzJykgfHwge307XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb25zID0gdGhpcy5nZXREYXRhKCdnZm1Gb290bm90ZURlZmluaXRpb25zJykgfHwge307XG4gICAgICAgIGxldCBpbmRleCA9IC0xO1xuICAgICAgICBpZiAoY2FsbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7XG4gICAgICAgICAgdGhpcy50YWcoJzxzZWN0aW9uIGRhdGEtZm9vdG5vdGVzPVwiXCIgY2xhc3M9XCJmb290bm90ZXNcIj48JyArIGxhYmVsVGFnTmFtZSArICcgaWQ9XCJmb290bm90ZS1sYWJlbFwiJyArIChsYWJlbEF0dHJpYnV0ZXMgPyAnICcgKyBsYWJlbEF0dHJpYnV0ZXMgOiAnJykgKyAnPicpO1xuICAgICAgICAgIHRoaXMucmF3KHRoaXMuZW5jb2RlKGxhYmVsKSk7XG4gICAgICAgICAgdGhpcy50YWcoJzwvJyArIGxhYmVsVGFnTmFtZSArICc+Jyk7XG4gICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICAgICAgICB0aGlzLnRhZygnPG9sPicpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgY2FsbHMubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQ2FsbGVkIGRlZmluaXRpb25zIGFyZSBhbHdheXMgZGVmaW5lZC5cbiAgICAgICAgICBjb25zdCBpZCA9IGNhbGxzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBzYWZlSWQgPSBzYW5pdGl6ZVVyaShpZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICBsZXQgcmVmZXJlbmNlSW5kZXggPSAwO1xuICAgICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gW107XG4gICAgICAgICAgd2hpbGUgKCsrcmVmZXJlbmNlSW5kZXggPD0gY291bnRzW2lkXSkge1xuICAgICAgICAgICAgcmVmZXJlbmNlcy5wdXNoKCc8YSBocmVmPVwiIycgKyBjbG9iYmVyUHJlZml4ICsgJ2ZucmVmLScgKyBzYWZlSWQgKyAocmVmZXJlbmNlSW5kZXggPiAxID8gJy0nICsgcmVmZXJlbmNlSW5kZXggOiAnJykgKyAnXCIgZGF0YS1mb290bm90ZS1iYWNrcmVmPVwiXCIgYXJpYS1sYWJlbD1cIicgKyB0aGlzLmVuY29kZSh0eXBlb2YgYmFja0xhYmVsID09PSAnc3RyaW5nJyA/IGJhY2tMYWJlbCA6IGJhY2tMYWJlbChpbmRleCwgcmVmZXJlbmNlSW5kZXgpKSArICdcIiBjbGFzcz1cImRhdGEtZm9vdG5vdGUtYmFja3JlZlwiPlx1MjFBOScgKyAocmVmZXJlbmNlSW5kZXggPiAxID8gJzxzdXA+JyArIHJlZmVyZW5jZUluZGV4ICsgJzwvc3VwPicgOiAnJykgKyAnPC9hPicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmpvaW4oJyAnKTtcbiAgICAgICAgICBsZXQgaW5qZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpO1xuICAgICAgICAgIHRoaXMudGFnKCc8bGkgaWQ9XCInICsgY2xvYmJlclByZWZpeCArICdmbi0nICsgc2FmZUlkICsgJ1wiPicpO1xuICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7XG4gICAgICAgICAgdGhpcy50YWcoZGVmaW5pdGlvbnNbaWRdLnJlcGxhY2UoLzxcXC9wPig/Olxccj9cXG58XFxyKT8kLywgZnVuY3Rpb24gKCQwKSB7XG4gICAgICAgICAgICBpbmplY3RlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gJyAnICsgcmVmZXJlbmNlICsgJDA7XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGlmICghaW5qZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7XG4gICAgICAgICAgICB0aGlzLnRhZyhyZWZlcmVuY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpO1xuICAgICAgICAgIHRoaXMudGFnKCc8L2xpPicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICAgICAgICB0aGlzLnRhZygnPC9vbD4nKTtcbiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpO1xuICAgICAgICAgIHRoaXMudGFnKCc8L3NlY3Rpb24+Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59IiwgIi8vIE5vdGU6IHR5cGVzIGFyZSBleHBvcnRlZCBmcm9tIGBkZXYvaW5kZXguZC50c2AuXG5leHBvcnQgeyBnZm1Gb290bm90ZSB9IGZyb20gJy4vbGliL3N5bnRheC5qcyc7XG5leHBvcnQgeyBnZm1Gb290bm90ZUh0bWwsIGRlZmF1bHRCYWNrTGFiZWwgfSBmcm9tICcuL2xpYi9odG1sLmpzJzsiLCAiLyoqXG4gKiBAaW1wb3J0IHtIdG1sRXh0ZW5zaW9ufSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBhbiBIVE1MIGV4dGVuc2lvbiBmb3IgYG1pY3JvbWFya2AgdG8gc3VwcG9ydCBHRk0gc3RyaWtldGhyb3VnaCB3aGVuXG4gKiBzZXJpYWxpemluZyB0byBIVE1MLlxuICpcbiAqIEByZXR1cm5zIHtIdG1sRXh0ZW5zaW9ufVxuICogICBFeHRlbnNpb24gZm9yIGBtaWNyb21hcmtgIHRoYXQgY2FuIGJlIHBhc3NlZCBpbiBgaHRtbEV4dGVuc2lvbnNgLCB0b1xuICogICBzdXBwb3J0IEdGTSBzdHJpa2V0aHJvdWdoIHdoZW4gc2VyaWFsaXppbmcgdG8gSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdmbVN0cmlrZXRocm91Z2hIdG1sKCkge1xuICByZXR1cm4ge1xuICAgIGVudGVyOiB7XG4gICAgICBzdHJpa2V0aHJvdWdoKCkge1xuICAgICAgICB0aGlzLnRhZygnPGRlbD4nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGV4aXQ6IHtcbiAgICAgIHN0cmlrZXRocm91Z2goKSB7XG4gICAgICAgIHRoaXMudGFnKCc8L2RlbD4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59IiwgIi8qKlxuICogQGltcG9ydCB7T3B0aW9uc30gZnJvbSAnbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaCdcbiAqIEBpbXBvcnQge0V2ZW50LCBFeHRlbnNpb24sIFJlc29sdmVyLCBTdGF0ZSwgVG9rZW4sIFRva2VuaXplQ29udGV4dCwgVG9rZW5pemVyfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBzcGxpY2UgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaHVua2VkJztcbmltcG9ydCB7IGNsYXNzaWZ5Q2hhcmFjdGVyIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2xhc3NpZnktY2hhcmFjdGVyJztcbmltcG9ydCB7IHJlc29sdmVBbGwgfSBmcm9tICdtaWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbCc7XG4vKipcbiAqIENyZWF0ZSBhbiBleHRlbnNpb24gZm9yIGBtaWNyb21hcmtgIHRvIGVuYWJsZSBHRk0gc3RyaWtldGhyb3VnaCBzeW50YXguXG4gKlxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnM9e31dXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7RXh0ZW5zaW9ufVxuICogICBFeHRlbnNpb24gZm9yIGBtaWNyb21hcmtgIHRoYXQgY2FuIGJlIHBhc3NlZCBpbiBgZXh0ZW5zaW9uc2AsIHRvXG4gKiAgIGVuYWJsZSBHRk0gc3RyaWtldGhyb3VnaCBzeW50YXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZm1TdHJpa2V0aHJvdWdoKG9wdGlvbnMpIHtcbiAgY29uc3Qgb3B0aW9uc18gPSBvcHRpb25zIHx8IHt9O1xuICBsZXQgc2luZ2xlID0gb3B0aW9uc18uc2luZ2xlVGlsZGU7XG4gIGNvbnN0IHRva2VuaXplciA9IHtcbiAgICBuYW1lOiAnc3RyaWtldGhyb3VnaCcsXG4gICAgdG9rZW5pemU6IHRva2VuaXplU3RyaWtldGhyb3VnaCxcbiAgICByZXNvbHZlQWxsOiByZXNvbHZlQWxsU3RyaWtldGhyb3VnaFxuICB9O1xuICBpZiAoc2luZ2xlID09PSBudWxsIHx8IHNpbmdsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc2luZ2xlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRleHQ6IHtcbiAgICAgIFsxMjZdOiB0b2tlbml6ZXJcbiAgICB9LFxuICAgIGluc2lkZVNwYW46IHtcbiAgICAgIG51bGw6IFt0b2tlbml6ZXJdXG4gICAgfSxcbiAgICBhdHRlbnRpb25NYXJrZXJzOiB7XG4gICAgICBudWxsOiBbMTI2XVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogVGFrZSBldmVudHMgYW5kIHJlc29sdmUgc3RyaWtldGhyb3VnaC5cbiAgICpcbiAgICogQHR5cGUge1Jlc29sdmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZUFsbFN0cmlrZXRocm91Z2goZXZlbnRzLCBjb250ZXh0KSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG5cbiAgICAvLyBXYWxrIHRocm91Z2ggYWxsIGV2ZW50cy5cbiAgICB3aGlsZSAoKytpbmRleCA8IGV2ZW50cy5sZW5ndGgpIHtcbiAgICAgIC8vIEZpbmQgYSB0b2tlbiB0aGF0IGNhbiBjbG9zZS5cbiAgICAgIGlmIChldmVudHNbaW5kZXhdWzBdID09PSAnZW50ZXInICYmIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gJ3N0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeScgJiYgZXZlbnRzW2luZGV4XVsxXS5fY2xvc2UpIHtcbiAgICAgICAgbGV0IG9wZW4gPSBpbmRleDtcblxuICAgICAgICAvLyBOb3cgd2FsayBiYWNrIHRvIGZpbmQgYW4gb3BlbmVyLlxuICAgICAgICB3aGlsZSAob3Blbi0tKSB7XG4gICAgICAgICAgLy8gRmluZCBhIHRva2VuIHRoYXQgY2FuIG9wZW4gdGhlIGNsb3Nlci5cbiAgICAgICAgICBpZiAoZXZlbnRzW29wZW5dWzBdID09PSAnZXhpdCcgJiYgZXZlbnRzW29wZW5dWzFdLnR5cGUgPT09ICdzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnknICYmIGV2ZW50c1tvcGVuXVsxXS5fb3BlbiAmJlxuICAgICAgICAgIC8vIElmIHRoZSBzaXplcyBhcmUgdGhlIHNhbWU6XG4gICAgICAgICAgZXZlbnRzW2luZGV4XVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW2luZGV4XVsxXS5zdGFydC5vZmZzZXQgPT09IGV2ZW50c1tvcGVuXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCkge1xuICAgICAgICAgICAgZXZlbnRzW2luZGV4XVsxXS50eXBlID0gJ3N0cmlrZXRocm91Z2hTZXF1ZW5jZSc7XG4gICAgICAgICAgICBldmVudHNbb3Blbl1bMV0udHlwZSA9ICdzdHJpa2V0aHJvdWdoU2VxdWVuY2UnO1xuXG4gICAgICAgICAgICAvKiogQHR5cGUge1Rva2VufSAqL1xuICAgICAgICAgICAgY29uc3Qgc3RyaWtldGhyb3VnaCA9IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmlrZXRocm91Z2gnLFxuICAgICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW5dWzFdLnN0YXJ0KSxcbiAgICAgICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXhdWzFdLmVuZClcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0ge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaWtldGhyb3VnaFRleHQnLFxuICAgICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW5dWzFdLmVuZCksXG4gICAgICAgICAgICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2luZGV4XVsxXS5zdGFydClcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIE9wZW5pbmcuXG4gICAgICAgICAgICAvKiogQHR5cGUge0FycmF5PEV2ZW50Pn0gKi9cbiAgICAgICAgICAgIGNvbnN0IG5leHRFdmVudHMgPSBbWydlbnRlcicsIHN0cmlrZXRocm91Z2gsIGNvbnRleHRdLCBbJ2VudGVyJywgZXZlbnRzW29wZW5dWzFdLCBjb250ZXh0XSwgWydleGl0JywgZXZlbnRzW29wZW5dWzFdLCBjb250ZXh0XSwgWydlbnRlcicsIHRleHQsIGNvbnRleHRdXTtcbiAgICAgICAgICAgIGNvbnN0IGluc2lkZVNwYW4gPSBjb250ZXh0LnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbDtcbiAgICAgICAgICAgIGlmIChpbnNpZGVTcGFuKSB7XG4gICAgICAgICAgICAgIC8vIEJldHdlZW4uXG4gICAgICAgICAgICAgIHNwbGljZShuZXh0RXZlbnRzLCBuZXh0RXZlbnRzLmxlbmd0aCwgMCwgcmVzb2x2ZUFsbChpbnNpZGVTcGFuLCBldmVudHMuc2xpY2Uob3BlbiArIDEsIGluZGV4KSwgY29udGV4dCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDbG9zaW5nLlxuICAgICAgICAgICAgc3BsaWNlKG5leHRFdmVudHMsIG5leHRFdmVudHMubGVuZ3RoLCAwLCBbWydleGl0JywgdGV4dCwgY29udGV4dF0sIFsnZW50ZXInLCBldmVudHNbaW5kZXhdWzFdLCBjb250ZXh0XSwgWydleGl0JywgZXZlbnRzW2luZGV4XVsxXSwgY29udGV4dF0sIFsnZXhpdCcsIHN0cmlrZXRocm91Z2gsIGNvbnRleHRdXSk7XG4gICAgICAgICAgICBzcGxpY2UoZXZlbnRzLCBvcGVuIC0gMSwgaW5kZXggLSBvcGVuICsgMywgbmV4dEV2ZW50cyk7XG4gICAgICAgICAgICBpbmRleCA9IG9wZW4gKyBuZXh0RXZlbnRzLmxlbmd0aCAtIDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGV2ZW50cy5sZW5ndGgpIHtcbiAgICAgIGlmIChldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09ICdzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnknKSB7XG4gICAgICAgIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9IFwiZGF0YVwiO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gICAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gICAqL1xuICBmdW5jdGlvbiB0b2tlbml6ZVN0cmlrZXRocm91Z2goZWZmZWN0cywgb2ssIG5vaykge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5wcmV2aW91cztcbiAgICBjb25zdCBldmVudHMgPSB0aGlzLmV2ZW50cztcbiAgICBsZXQgc2l6ZSA9IDA7XG4gICAgcmV0dXJuIHN0YXJ0O1xuXG4gICAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgICBpZiAocHJldmlvdXMgPT09IDEyNiAmJiBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLnR5cGUgIT09IFwiY2hhcmFjdGVyRXNjYXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICAgIH1cbiAgICAgIGVmZmVjdHMuZW50ZXIoJ3N0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeScpO1xuICAgICAgcmV0dXJuIG1vcmUoY29kZSk7XG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgICBmdW5jdGlvbiBtb3JlKGNvZGUpIHtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IGNsYXNzaWZ5Q2hhcmFjdGVyKHByZXZpb3VzKTtcbiAgICAgIGlmIChjb2RlID09PSAxMjYpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgdGhpcmQgbWFya2VyLCBleGl0LlxuICAgICAgICBpZiAoc2l6ZSA+IDEpIHJldHVybiBub2soY29kZSk7XG4gICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgICAgc2l6ZSsrO1xuICAgICAgICByZXR1cm4gbW9yZTtcbiAgICAgIH1cbiAgICAgIGlmIChzaXplIDwgMiAmJiAhc2luZ2xlKSByZXR1cm4gbm9rKGNvZGUpO1xuICAgICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmV4aXQoJ3N0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeScpO1xuICAgICAgY29uc3QgYWZ0ZXIgPSBjbGFzc2lmeUNoYXJhY3Rlcihjb2RlKTtcbiAgICAgIHRva2VuLl9vcGVuID0gIWFmdGVyIHx8IGFmdGVyID09PSAyICYmIEJvb2xlYW4oYmVmb3JlKTtcbiAgICAgIHRva2VuLl9jbG9zZSA9ICFiZWZvcmUgfHwgYmVmb3JlID09PSAyICYmIEJvb2xlYW4oYWZ0ZXIpO1xuICAgICAgcmV0dXJuIG9rKGNvZGUpO1xuICAgIH1cbiAgfVxufSIsICIvLyBOb3RlOiBtb3JlIHR5cGVzIGV4cG9zZWQgZnJvbSBgaW5kZXguZC50c2AuXG5leHBvcnQgeyBnZm1TdHJpa2V0aHJvdWdoSHRtbCB9IGZyb20gJy4vbGliL2h0bWwuanMnO1xuZXhwb3J0IHsgZ2ZtU3RyaWtldGhyb3VnaCB9IGZyb20gJy4vbGliL3N5bnRheC5qcyc7IiwgIi8qKlxuICogQGltcG9ydCB7SHRtbEV4dGVuc2lvbn0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuY29uc3QgYWxpZ25tZW50ID0ge1xuICBub25lOiAnJyxcbiAgbGVmdDogJyBhbGlnbj1cImxlZnRcIicsXG4gIHJpZ2h0OiAnIGFsaWduPVwicmlnaHRcIicsXG4gIGNlbnRlcjogJyBhbGlnbj1cImNlbnRlclwiJ1xufTtcblxuLy8gVG8gZG86IG1pY3JvbWFya0A1OiB1c2UgYGluZmVyYCBoZXJlLCB3aGVuIGFsbCBldmVudHMgYXJlIGV4cG9zZWQuXG5cbi8qKlxuICogQ3JlYXRlIGFuIEhUTUwgZXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0byBzdXBwb3J0IEdpdEh1YiB0YWJsZXMgd2hlblxuICogc2VyaWFsaXppbmcgdG8gSFRNTC5cbiAqXG4gKiBAcmV0dXJucyB7SHRtbEV4dGVuc2lvbn1cbiAqICAgRXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0aGF0IGNhbiBiZSBwYXNzZWQgaW4gYGh0bWxFeHRlbnNpb25zYCB0b1xuICogICBzdXBwb3J0IEdpdEh1YiB0YWJsZXMgd2hlbiBzZXJpYWxpemluZyB0byBIVE1MLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2ZtVGFibGVIdG1sKCkge1xuICByZXR1cm4ge1xuICAgIGVudGVyOiB7XG4gICAgICB0YWJsZSh0b2tlbikge1xuICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdG9rZW4uX2FsaWduO1xuICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpO1xuICAgICAgICB0aGlzLnRhZygnPHRhYmxlPicpO1xuICAgICAgICB0aGlzLnNldERhdGEoJ3RhYmxlQWxpZ24nLCB0YWJsZUFsaWduKTtcbiAgICAgIH0sXG4gICAgICB0YWJsZUJvZHkoKSB7XG4gICAgICAgIHRoaXMudGFnKCc8dGJvZHk+Jyk7XG4gICAgICB9LFxuICAgICAgdGFibGVEYXRhKCkge1xuICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdGhpcy5nZXREYXRhKCd0YWJsZUFsaWduJyk7XG4gICAgICAgIGNvbnN0IHRhYmxlQ29sdW1uID0gdGhpcy5nZXREYXRhKCd0YWJsZUNvbHVtbicpO1xuICAgICAgICBjb25zdCBhbGlnbiA9IGFsaWdubWVudFt0YWJsZUFsaWduW3RhYmxlQ29sdW1uXV07XG4gICAgICAgIGlmIChhbGlnbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gQ2FwdHVyZSByZXN1bHRzIHRvIGlnbm9yZSB0aGVtLlxuICAgICAgICAgIHRoaXMuYnVmZmVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICAgICAgICB0aGlzLnRhZygnPHRkJyArIGFsaWduICsgJz4nKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRhYmxlSGVhZCgpIHtcbiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICAgICAgdGhpcy50YWcoJzx0aGVhZD4nKTtcbiAgICAgIH0sXG4gICAgICB0YWJsZUhlYWRlcigpIHtcbiAgICAgICAgY29uc3QgdGFibGVBbGlnbiA9IHRoaXMuZ2V0RGF0YSgndGFibGVBbGlnbicpO1xuICAgICAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuZ2V0RGF0YSgndGFibGVDb2x1bW4nKTtcbiAgICAgICAgY29uc3QgYWxpZ24gPSBhbGlnbm1lbnRbdGFibGVBbGlnblt0YWJsZUNvbHVtbl1dO1xuICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpO1xuICAgICAgICB0aGlzLnRhZygnPHRoJyArIGFsaWduICsgJz4nKTtcbiAgICAgIH0sXG4gICAgICB0YWJsZVJvdygpIHtcbiAgICAgICAgdGhpcy5zZXREYXRhKCd0YWJsZUNvbHVtbicsIDApO1xuICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpO1xuICAgICAgICB0aGlzLnRhZygnPHRyPicpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXhpdDoge1xuICAgICAgLy8gT3ZlcndyaXRlIHRoZSBkZWZhdWx0IGNvZGUgdGV4dCBkYXRhIGhhbmRsZXIgdG8gdW5lc2NhcGUgZXNjYXBlZCBwaXBlcyB3aGVuXG4gICAgICAvLyB0aGV5IGFyZSBpbiB0YWJsZXMuXG4gICAgICBjb2RlVGV4dERhdGEodG9rZW4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7XG4gICAgICAgIGlmICh0aGlzLmdldERhdGEoJ3RhYmxlQWxpZ24nKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFxcXChbXFxcXHxdKS9nLCByZXBsYWNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJhdyh0aGlzLmVuY29kZSh2YWx1ZSkpO1xuICAgICAgfSxcbiAgICAgIHRhYmxlKCkge1xuICAgICAgICB0aGlzLnNldERhdGEoJ3RhYmxlQWxpZ24nKTtcbiAgICAgICAgLy8gTm90ZTogd2UgZG9uXHUyMDE5dCBzZXQgYHNsdXJwQWxsTGluZUVuZGluZ3NgIGFueW1vcmUsIGluIGRlbGltaXRlciByb3dzLFxuICAgICAgICAvLyBidXQgd2UgZG8gbmVlZCB0byByZXNldCBpdCB0byBtYXRjaCBhIGZ1bmt5IG5ld2xpbmUgR0ggZ2VuZXJhdGVzIGZvclxuICAgICAgICAvLyBsaXN0IGl0ZW1zIGNvbWJpbmVkIHdpdGggdGFibGVzLlxuICAgICAgICB0aGlzLnNldERhdGEoJ3NsdXJwQWxsTGluZUVuZGluZ3MnKTtcbiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICAgICAgdGhpcy50YWcoJzwvdGFibGU+Jyk7XG4gICAgICB9LFxuICAgICAgdGFibGVCb2R5KCkge1xuICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpO1xuICAgICAgICB0aGlzLnRhZygnPC90Ym9keT4nKTtcbiAgICAgIH0sXG4gICAgICB0YWJsZURhdGEoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0aGlzLmdldERhdGEoJ3RhYmxlQWxpZ24nKTtcbiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoJ3RhYmxlQ29sdW1uJyk7XG4gICAgICAgIGlmICh0YWJsZUNvbHVtbiBpbiB0YWJsZUFsaWduKSB7XG4gICAgICAgICAgdGhpcy50YWcoJzwvdGQ+Jyk7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKCd0YWJsZUNvbHVtbicsIHRhYmxlQ29sdW1uICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RvcCBjYXB0dXJpbmcuXG4gICAgICAgICAgdGhpcy5yZXN1bWUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRhYmxlSGVhZCgpIHtcbiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICAgICAgdGhpcy50YWcoJzwvdGhlYWQ+Jyk7XG4gICAgICB9LFxuICAgICAgdGFibGVIZWFkZXIoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQ29sdW1uID0gdGhpcy5nZXREYXRhKCd0YWJsZUNvbHVtbicpO1xuICAgICAgICB0aGlzLnRhZygnPC90aD4nKTtcbiAgICAgICAgdGhpcy5zZXREYXRhKCd0YWJsZUNvbHVtbicsIHRhYmxlQ29sdW1uICsgMSk7XG4gICAgICB9LFxuICAgICAgdGFibGVSb3coKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0aGlzLmdldERhdGEoJ3RhYmxlQWxpZ24nKTtcbiAgICAgICAgbGV0IHRhYmxlQ29sdW1uID0gdGhpcy5nZXREYXRhKCd0YWJsZUNvbHVtbicpO1xuICAgICAgICB3aGlsZSAodGFibGVDb2x1bW4gPCB0YWJsZUFsaWduLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7XG4gICAgICAgICAgdGhpcy50YWcoJzx0ZCcgKyBhbGlnbm1lbnRbdGFibGVBbGlnblt0YWJsZUNvbHVtbl1dICsgJz48L3RkPicpO1xuICAgICAgICAgIHRhYmxlQ29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhKCd0YWJsZUNvbHVtbicsIHRhYmxlQ29sdW1uKTtcbiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICAgICAgdGhpcy50YWcoJzwvdHI+Jyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSAkMFxuICogQHBhcmFtIHtzdHJpbmd9ICQxXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiByZXBsYWNlKCQwLCAkMSkge1xuICAvLyBQaXBlcyB3b3JrLCBiYWNrc2xhc2hlcyBkb25cdTIwMTl0IChidXQgY2FuXHUyMDE5dCBlc2NhcGUgcGlwZXMpLlxuICByZXR1cm4gJDEgPT09ICd8JyA/ICQxIDogJDA7XG59IiwgIi8qKlxuICogQGltcG9ydCB7RXZlbnR9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbi8vIFBvcnQgb2YgYGVkaXRfbWFwLnJzYCBmcm9tIGBtYXJrZG93bi1yc2AuXG4vLyBUaGlzIHNob3VsZCBtb3ZlIHRvIGBtYXJrZG93bi1qc2AgbGF0ZXIuXG5cbi8vIERlYWwgd2l0aCBzZXZlcmFsIGNoYW5nZXMgaW4gZXZlbnRzLCBiYXRjaGluZyB0aGVtIHRvZ2V0aGVyLlxuLy9cbi8vIFByZWZlcmFibHksIGNoYW5nZXMgc2hvdWxkIGJlIGtlcHQgdG8gYSBtaW5pbXVtLlxuLy8gU29tZXRpbWVzLCBpdFx1MjAxOXMgbmVlZGVkIHRvIGNoYW5nZSB0aGUgbGlzdCBvZiBldmVudHMsIGJlY2F1c2UgcGFyc2luZyBjYW4gYmVcbi8vIG1lc3N5LCBhbmQgaXQgaGVscHMgdG8gZXhwb3NlIGEgY2xlYW5lciBpbnRlcmZhY2Ugb2YgZXZlbnRzIHRvIHRoZSBjb21waWxlclxuLy8gYW5kIG90aGVyIHVzZXJzLlxuLy8gSXQgY2FuIGFsc28gaGVscCB0byBtZXJnZSBtYW55IGFkamFjZW50IHNpbWlsYXIgZXZlbnRzLlxuLy8gQW5kLCBpbiBvdGhlciBjYXNlcywgaXRcdTIwMTlzIG5lZWRlZCB0byBwYXJzZSBzdWJjb250ZW50OiBwYXNzIHNvbWUgZXZlbnRzXG4vLyB0aHJvdWdoIGFub3RoZXIgdG9rZW5pemVyIGFuZCBpbmplY3QgdGhlIHJlc3VsdC5cblxuLyoqXG4gKiBAdHlwZWRlZiB7W251bWJlciwgbnVtYmVyLCBBcnJheTxFdmVudD5dfSBDaGFuZ2VcbiAqIEB0eXBlZGVmIHtbbnVtYmVyLCBudW1iZXIsIG51bWJlcl19IEp1bXBcbiAqL1xuXG4vKipcbiAqIFRyYWNrcyBhIGJ1bmNoIG9mIGVkaXRzLlxuICovXG5leHBvcnQgY2xhc3MgRWRpdE1hcCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgZWRpdCBtYXAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBSZWNvcmQgb2YgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBcnJheTxDaGFuZ2U+fVxuICAgICAqL1xuICAgIHRoaXMubWFwID0gW107XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGVkaXQ6IGEgcmVtb3ZlIGFuZC9vciBhZGQgYXQgYSBjZXJ0YWluIHBsYWNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZVxuICAgKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gYWRkXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBhZGQoaW5kZXgsIHJlbW92ZSwgYWRkKSB7XG4gICAgYWRkSW1wbGVtZW50YXRpb24odGhpcywgaW5kZXgsIHJlbW92ZSwgYWRkKTtcbiAgfVxuXG4gIC8vIFRvIGRvOiBhZGQgdGhpcyB3aGVuIG1vdmluZyB0byBgbWljcm9tYXJrYC5cbiAgLy8gLyoqXG4gIC8vICAqIENyZWF0ZSBhbiBlZGl0OiBidXQgaW5zZXJ0IGBhZGRgIGJlZm9yZSBleGlzdGluZyBhZGRpdGlvbnMuXG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAvLyAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlXG4gIC8vICAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBhZGRcbiAgLy8gICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgLy8gICovXG4gIC8vIGFkZEJlZm9yZShpbmRleCwgcmVtb3ZlLCBhZGQpIHtcbiAgLy8gICBhZGRJbXBsZW1lbnRhdGlvbih0aGlzLCBpbmRleCwgcmVtb3ZlLCBhZGQsIHRydWUpXG4gIC8vIH1cblxuICAvKipcbiAgICogRG9uZSwgY2hhbmdlIHRoZSBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBldmVudHNcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGNvbnN1bWUoZXZlbnRzKSB7XG4gICAgdGhpcy5tYXAuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGFbMF0gLSBiWzBdO1xuICAgIH0pO1xuXG4gICAgLyogYzggaWdub3JlIG5leHQgMyAtLSBgcmVzb2x2ZWAgaXMgbmV2ZXIgY2FsbGVkIHdpdGhvdXQgdGFibGVzLCBzbyB3aXRob3V0IGVkaXRzLiAqL1xuICAgIGlmICh0aGlzLm1hcC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUbyBkbzogaWYgbGlua3MgYXJlIGFkZGVkIGluIGV2ZW50cywgbGlrZSB0aGV5IGFyZSBpbiBgbWFya2Rvd24tcnNgLFxuICAgIC8vIHRoaXMgaXMgbmVlZGVkLlxuICAgIC8vIC8vIENhbGN1bGF0ZSBqdW1wczogd2hlcmUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgbGlzdCBtb3ZlIHRvLlxuICAgIC8vIC8qKiBAdHlwZSB7QXJyYXk8SnVtcD59ICovXG4gICAgLy8gY29uc3QganVtcHMgPSBbXVxuICAgIC8vIGxldCBpbmRleCA9IDBcbiAgICAvLyBsZXQgYWRkQWNjID0gMFxuICAgIC8vIGxldCByZW1vdmVBY2MgPSAwXG4gICAgLy8gd2hpbGUgKGluZGV4IDwgdGhpcy5tYXAubGVuZ3RoKSB7XG4gICAgLy8gICBjb25zdCBbYXQsIHJlbW92ZSwgYWRkXSA9IHRoaXMubWFwW2luZGV4XVxuICAgIC8vICAgcmVtb3ZlQWNjICs9IHJlbW92ZVxuICAgIC8vICAgYWRkQWNjICs9IGFkZC5sZW5ndGhcbiAgICAvLyAgIGp1bXBzLnB1c2goW2F0LCByZW1vdmVBY2MsIGFkZEFjY10pXG4gICAgLy8gICBpbmRleCArPSAxXG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gLiBzaGlmdExpbmtzKGV2ZW50cywganVtcHMpXG5cbiAgICBsZXQgaW5kZXggPSB0aGlzLm1hcC5sZW5ndGg7XG4gICAgLyoqIEB0eXBlIHtBcnJheTxBcnJheTxFdmVudD4+fSAqL1xuICAgIGNvbnN0IHZlY3MgPSBbXTtcbiAgICB3aGlsZSAoaW5kZXggPiAwKSB7XG4gICAgICBpbmRleCAtPSAxO1xuICAgICAgdmVjcy5wdXNoKGV2ZW50cy5zbGljZSh0aGlzLm1hcFtpbmRleF1bMF0gKyB0aGlzLm1hcFtpbmRleF1bMV0pLCB0aGlzLm1hcFtpbmRleF1bMl0pO1xuXG4gICAgICAvLyBUcnVuY2F0ZSByZXN0LlxuICAgICAgZXZlbnRzLmxlbmd0aCA9IHRoaXMubWFwW2luZGV4XVswXTtcbiAgICB9XG4gICAgdmVjcy5wdXNoKGV2ZW50cy5zbGljZSgpKTtcbiAgICBldmVudHMubGVuZ3RoID0gMDtcbiAgICBsZXQgc2xpY2UgPSB2ZWNzLnBvcCgpO1xuICAgIHdoaWxlIChzbGljZSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNsaWNlKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgc2xpY2UgPSB2ZWNzLnBvcCgpO1xuICAgIH1cblxuICAgIC8vIFRydW5jYXRlIGV2ZXJ5dGhpbmcuXG4gICAgdGhpcy5tYXAubGVuZ3RoID0gMDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBlZGl0LlxuICpcbiAqIEBwYXJhbSB7RWRpdE1hcH0gZWRpdE1hcFxuICogQHBhcmFtIHtudW1iZXJ9IGF0XG4gKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlXG4gKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gYWRkXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBhZGRJbXBsZW1lbnRhdGlvbihlZGl0TWFwLCBhdCwgcmVtb3ZlLCBhZGQpIHtcbiAgbGV0IGluZGV4ID0gMDtcblxuICAvKiBjOCBpZ25vcmUgbmV4dCAzIC0tIGByZXNvbHZlYCBpcyBuZXZlciBjYWxsZWQgd2l0aG91dCB0YWJsZXMsIHNvIHdpdGhvdXQgZWRpdHMuICovXG4gIGlmIChyZW1vdmUgPT09IDAgJiYgYWRkLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB3aGlsZSAoaW5kZXggPCBlZGl0TWFwLm1hcC5sZW5ndGgpIHtcbiAgICBpZiAoZWRpdE1hcC5tYXBbaW5kZXhdWzBdID09PSBhdCkge1xuICAgICAgZWRpdE1hcC5tYXBbaW5kZXhdWzFdICs9IHJlbW92ZTtcblxuICAgICAgLy8gVG8gZG86IGJlZm9yZSBub3QgdXNlZCBieSB0YWJsZXMsIHVzZSB3aGVuIG1vdmluZyB0byBtaWNyb21hcmsuXG4gICAgICAvLyBpZiAoYmVmb3JlKSB7XG4gICAgICAvLyAgIGFkZC5wdXNoKC4uLmVkaXRNYXAubWFwW2luZGV4XVsyXSlcbiAgICAgIC8vICAgZWRpdE1hcC5tYXBbaW5kZXhdWzJdID0gYWRkXG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgZWRpdE1hcC5tYXBbaW5kZXhdWzJdLnB1c2goLi4uYWRkKTtcbiAgICAgIC8vIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbmRleCArPSAxO1xuICB9XG4gIGVkaXRNYXAubWFwLnB1c2goW2F0LCByZW1vdmUsIGFkZF0pO1xufVxuXG4vLyAvKipcbi8vICAqIFNoaWZ0IGBwcmV2aW91c2AgYW5kIGBuZXh0YCBsaW5rcyBhY2NvcmRpbmcgdG8gYGp1bXBzYC5cbi8vICAqXG4vLyAgKiBUaGlzIGZpeGVzIGxpbmtzIGluIGNhc2UgdGhlcmUgYXJlIGV2ZW50cyByZW1vdmVkIG9yIGFkZGVkIGJldHdlZW4gdGhlbS5cbi8vICAqXG4vLyAgKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gZXZlbnRzXG4vLyAgKiBAcGFyYW0ge0FycmF5PEp1bXA+fSBqdW1wc1xuLy8gICovXG4vLyBmdW5jdGlvbiBzaGlmdExpbmtzKGV2ZW50cywganVtcHMpIHtcbi8vICAgbGV0IGp1bXBJbmRleCA9IDBcbi8vICAgbGV0IGluZGV4ID0gMFxuLy8gICBsZXQgYWRkID0gMFxuLy8gICBsZXQgcm0gPSAwXG5cbi8vICAgd2hpbGUgKGluZGV4IDwgZXZlbnRzLmxlbmd0aCkge1xuLy8gICAgIGNvbnN0IHJtQ3VyciA9IHJtXG5cbi8vICAgICB3aGlsZSAoanVtcEluZGV4IDwganVtcHMubGVuZ3RoICYmIGp1bXBzW2p1bXBJbmRleF1bMF0gPD0gaW5kZXgpIHtcbi8vICAgICAgIGFkZCA9IGp1bXBzW2p1bXBJbmRleF1bMl1cbi8vICAgICAgIHJtID0ganVtcHNbanVtcEluZGV4XVsxXVxuLy8gICAgICAganVtcEluZGV4ICs9IDFcbi8vICAgICB9XG5cbi8vICAgICAvLyBJZ25vcmUgaXRlbXMgdGhhdCB3aWxsIGJlIHJlbW92ZWQuXG4vLyAgICAgaWYgKHJtID4gcm1DdXJyKSB7XG4vLyAgICAgICBpbmRleCArPSBybSAtIHJtQ3VyclxuLy8gICAgIH0gZWxzZSB7XG4vLyAgICAgICAvLyA/XG4vLyAgICAgICAvLyBpZiBsZXQgU29tZShsaW5rKSA9ICZldmVudHNbaW5kZXhdLmxpbmsge1xuLy8gICAgICAgLy8gICAgIGlmIGxldCBTb21lKG5leHQpID0gbGluay5uZXh0IHtcbi8vICAgICAgIC8vICAgICAgICAgZXZlbnRzW25leHRdLmxpbmsuYXNfbXV0KCkudW53cmFwKCkucHJldmlvdXMgPSBTb21lKGluZGV4ICsgYWRkIC0gcm0pO1xuLy8gICAgICAgLy8gICAgICAgICB3aGlsZSBqdW1wSW5kZXggPCBqdW1wcy5sZW4oKSAmJiBqdW1wc1tqdW1wSW5kZXhdLjAgPD0gbmV4dCB7XG4vLyAgICAgICAvLyAgICAgICAgICAgICBhZGQgPSBqdW1wc1tqdW1wSW5kZXhdLjI7XG4vLyAgICAgICAvLyAgICAgICAgICAgICBybSA9IGp1bXBzW2p1bXBJbmRleF0uMTtcbi8vICAgICAgIC8vICAgICAgICAgICAgIGp1bXBJbmRleCArPSAxO1xuLy8gICAgICAgLy8gICAgICAgICB9XG4vLyAgICAgICAvLyAgICAgICAgIGV2ZW50c1tpbmRleF0ubGluay5hc19tdXQoKS51bndyYXAoKS5uZXh0ID0gU29tZShuZXh0ICsgYWRkIC0gcm0pO1xuLy8gICAgICAgLy8gICAgICAgICBpbmRleCA9IG5leHQ7XG4vLyAgICAgICAvLyAgICAgICAgIGNvbnRpbnVlO1xuLy8gICAgICAgLy8gICAgIH1cbi8vICAgICAgIC8vIH1cbi8vICAgICAgIGluZGV4ICs9IDFcbi8vICAgICB9XG4vLyAgIH1cbi8vIH0iLCAiLyoqXG4gKiBAaW1wb3J0IHtFdmVudH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7J2NlbnRlcicgfCAnbGVmdCcgfCAnbm9uZScgfCAncmlnaHQnfSBBbGlnblxuICovXG5cbi8qKlxuICogRmlndXJlIG91dCB0aGUgYWxpZ25tZW50IG9mIGEgR0ZNIHRhYmxlLlxuICpcbiAqIEBwYXJhbSB7UmVhZG9ubHk8QXJyYXk8RXZlbnQ+Pn0gZXZlbnRzXG4gKiAgIExpc3Qgb2YgZXZlbnRzLlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiAgIFRhYmxlIGVudGVyIGV2ZW50LlxuICogQHJldHVybnMge0FycmF5PEFsaWduPn1cbiAqICAgTGlzdCBvZiBhbGlnbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZm1UYWJsZUFsaWduKGV2ZW50cywgaW5kZXgpIHtcbiAgbGV0IGluRGVsaW1pdGVyUm93ID0gZmFsc2U7XG4gIC8qKiBAdHlwZSB7QXJyYXk8QWxpZ24+fSAqL1xuICBjb25zdCBhbGlnbiA9IFtdO1xuICB3aGlsZSAoaW5kZXggPCBldmVudHMubGVuZ3RoKSB7XG4gICAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXhdO1xuICAgIGlmIChpbkRlbGltaXRlclJvdykge1xuICAgICAgaWYgKGV2ZW50WzBdID09PSAnZW50ZXInKSB7XG4gICAgICAgIC8vIFN0YXJ0IG9mIGFsaWdubWVudCB2YWx1ZTogc2V0IGEgbmV3IGNvbHVtbi5cbiAgICAgICAgLy8gVG8gZG86IGBtYXJrZG93bi1yc2AgdXNlcyBgdGFibGVEZWxpbWl0ZXJDZWxsVmFsdWVgLlxuICAgICAgICBpZiAoZXZlbnRbMV0udHlwZSA9PT0gJ3RhYmxlQ29udGVudCcpIHtcbiAgICAgICAgICBhbGlnbi5wdXNoKGV2ZW50c1tpbmRleCArIDFdWzFdLnR5cGUgPT09ICd0YWJsZURlbGltaXRlck1hcmtlcicgPyAnbGVmdCcgOiAnbm9uZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBFeGl0czpcbiAgICAgIC8vIEVuZCBvZiBhbGlnbm1lbnQgdmFsdWU6IGNoYW5nZSB0aGUgY29sdW1uLlxuICAgICAgLy8gVG8gZG86IGBtYXJrZG93bi1yc2AgdXNlcyBgdGFibGVEZWxpbWl0ZXJDZWxsVmFsdWVgLlxuICAgICAgZWxzZSBpZiAoZXZlbnRbMV0udHlwZSA9PT0gJ3RhYmxlQ29udGVudCcpIHtcbiAgICAgICAgaWYgKGV2ZW50c1tpbmRleCAtIDFdWzFdLnR5cGUgPT09ICd0YWJsZURlbGltaXRlck1hcmtlcicpIHtcbiAgICAgICAgICBjb25zdCBhbGlnbkluZGV4ID0gYWxpZ24ubGVuZ3RoIC0gMTtcbiAgICAgICAgICBhbGlnblthbGlnbkluZGV4XSA9IGFsaWduW2FsaWduSW5kZXhdID09PSAnbGVmdCcgPyAnY2VudGVyJyA6ICdyaWdodCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIERvbmUhXG4gICAgICBlbHNlIGlmIChldmVudFsxXS50eXBlID09PSAndGFibGVEZWxpbWl0ZXJSb3cnKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRbMF0gPT09ICdlbnRlcicgJiYgZXZlbnRbMV0udHlwZSA9PT0gJ3RhYmxlRGVsaW1pdGVyUm93Jykge1xuICAgICAgaW5EZWxpbWl0ZXJSb3cgPSB0cnVlO1xuICAgIH1cbiAgICBpbmRleCArPSAxO1xuICB9XG4gIHJldHVybiBhbGlnbjtcbn0iLCAiLyoqXG4gKiBAaW1wb3J0IHtFdmVudCwgRXh0ZW5zaW9uLCBQb2ludCwgUmVzb2x2ZXIsIFN0YXRlLCBUb2tlbiwgVG9rZW5pemVDb250ZXh0LCBUb2tlbml6ZXJ9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1tudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdfSBSYW5nZVxuICogICBDZWxsIGluZm8uXG4gKlxuICogQHR5cGVkZWYgezAgfCAxIHwgMiB8IDN9IFJvd0tpbmRcbiAqICAgV2hlcmUgd2UgYXJlOiBgMWAgZm9yIGhlYWQgcm93LCBgMmAgZm9yIGRlbGltaXRlciByb3csIGAzYCBmb3IgYm9keSByb3cuXG4gKi9cblxuaW1wb3J0IHsgZmFjdG9yeVNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnO1xuaW1wb3J0IHsgbWFya2Rvd25MaW5lRW5kaW5nLCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlLCBtYXJrZG93blNwYWNlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJztcbmltcG9ydCB7IEVkaXRNYXAgfSBmcm9tICcuL2VkaXQtbWFwLmpzJztcbmltcG9ydCB7IGdmbVRhYmxlQWxpZ24gfSBmcm9tICcuL2luZmVyLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gSFRNTCBleHRlbnNpb24gZm9yIGBtaWNyb21hcmtgIHRvIHN1cHBvcnQgR2l0SHViIHRhYmxlcyBzeW50YXguXG4gKlxuICogQHJldHVybnMge0V4dGVuc2lvbn1cbiAqICAgRXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0aGF0IGNhbiBiZSBwYXNzZWQgaW4gYGV4dGVuc2lvbnNgIHRvIGVuYWJsZSBHRk1cbiAqICAgdGFibGUgc3ludGF4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2ZtVGFibGUoKSB7XG4gIHJldHVybiB7XG4gICAgZmxvdzoge1xuICAgICAgbnVsbDoge1xuICAgICAgICBuYW1lOiAndGFibGUnLFxuICAgICAgICB0b2tlbml6ZTogdG9rZW5pemVUYWJsZSxcbiAgICAgICAgcmVzb2x2ZUFsbDogcmVzb2x2ZVRhYmxlXG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZVRhYmxlKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGxldCBzaXplID0gMDtcbiAgbGV0IHNpemVCID0gMDtcbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgc2VlbjtcbiAgcmV0dXJuIHN0YXJ0O1xuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBhIEdGTSB0YWJsZS5cbiAgICpcbiAgICogSWYgdGhlcmUgaXMgYSB2YWxpZCB0YWJsZSByb3cgb3IgdGFibGUgaGVhZCBiZWZvcmUsIHRoZW4gd2UgdHJ5IHRvIHBhcnNlXG4gICAqIGFub3RoZXIgcm93LlxuICAgKiBPdGhlcndpc2UsIHdlIHRyeSB0byBwYXJzZSBhIGhlYWQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCB8IGEgfFxuICAgKiAgICAgXlxuICAgKiAgIHwgfCAtIHxcbiAgICogPiB8IHwgYiB8XG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgbGV0IGluZGV4ID0gc2VsZi5ldmVudHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoaW5kZXggPiAtMSkge1xuICAgICAgY29uc3QgdHlwZSA9IHNlbGYuZXZlbnRzW2luZGV4XVsxXS50eXBlO1xuICAgICAgaWYgKHR5cGUgPT09IFwibGluZUVuZGluZ1wiIHx8XG4gICAgICAvLyBOb3RlOiBtYXJrZG93bi1ycyB1c2VzIGB3aGl0ZXNwYWNlYCBpbnN0ZWFkIG9mIGBsaW5lUHJlZml4YFxuICAgICAgdHlwZSA9PT0gXCJsaW5lUHJlZml4XCIpIGluZGV4LS07ZWxzZSBicmVhaztcbiAgICB9XG4gICAgY29uc3QgdGFpbCA9IGluZGV4ID4gLTEgPyBzZWxmLmV2ZW50c1tpbmRleF1bMV0udHlwZSA6IG51bGw7XG4gICAgY29uc3QgbmV4dCA9IHRhaWwgPT09ICd0YWJsZUhlYWQnIHx8IHRhaWwgPT09ICd0YWJsZVJvdycgPyBib2R5Um93U3RhcnQgOiBoZWFkUm93QmVmb3JlO1xuXG4gICAgLy8gRG9uXHUyMDE5dCBhbGxvdyBsYXp5IGJvZHkgcm93cy5cbiAgICBpZiAobmV4dCA9PT0gYm9keVJvd1N0YXJ0ICYmIHNlbGYucGFyc2VyLmxhenlbc2VsZi5ub3coKS5saW5lXSkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQmVmb3JlIHRhYmxlIGhlYWQgcm93LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfCBhIHxcbiAgICogICAgIF5cbiAgICogICB8IHwgLSB8XG4gICAqICAgfCB8IGIgfFxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaGVhZFJvd0JlZm9yZShjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcigndGFibGVIZWFkJyk7XG4gICAgZWZmZWN0cy5lbnRlcigndGFibGVSb3cnKTtcbiAgICByZXR1cm4gaGVhZFJvd1N0YXJ0KGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZm9yZSB0YWJsZSBoZWFkIHJvdywgYWZ0ZXIgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IHwgYSB8XG4gICAqICAgICBeXG4gICAqICAgfCB8IC0gfFxuICAgKiAgIHwgfCBiIHxcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGhlYWRSb3dTdGFydChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDEyNCkge1xuICAgICAgcmV0dXJuIGhlYWRSb3dCcmVhayhjb2RlKTtcbiAgICB9XG5cbiAgICAvLyBUbyBkbzogbWljcm9tYXJrLWpzIHNob3VsZCBsZXQgdXMgcGFyc2Ugb3VyIG93biB3aGl0ZXNwYWNlIGluIGV4dGVuc2lvbnMsXG4gICAgLy8gbGlrZSBgbWFya2Rvd24tcnNgOlxuICAgIC8vXG4gICAgLy8gYGBganNcbiAgICAvLyAvLyA0KyBzcGFjZXMuXG4gICAgLy8gaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAvLyAgIHJldHVybiBub2soY29kZSlcbiAgICAvLyB9XG4gICAgLy8gYGBgXG5cbiAgICBzZWVuID0gdHJ1ZTtcbiAgICAvLyBDb3VudCB0aGUgZmlyc3QgY2hhcmFjdGVyLCB0aGF0IGlzblx1MjAxOXQgYSBwaXBlLCBkb3VibGUuXG4gICAgc2l6ZUIgKz0gMTtcbiAgICByZXR1cm4gaGVhZFJvd0JyZWFrKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0IGJyZWFrIGluIHRhYmxlIGhlYWQgcm93LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfCBhIHxcbiAgICogICAgIF5cbiAgICogICAgICAgXlxuICAgKiAgICAgICAgIF5cbiAgICogICB8IHwgLSB8XG4gICAqICAgfCB8IGIgfFxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaGVhZFJvd0JyZWFrKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgLy8gTm90ZTogaW4gYG1hcmtkb3duLXJzYCwgd2UgbmVlZCB0byByZXNldCwgaW4gYG1pY3JvbWFyay1qc2Agd2UgZG9uXHUyMDE4dC5cbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIC8vIElmIGFueXRoaW5nIG90aGVyIHRoYW4gb25lIHBpcGUgKGlnbm9yaW5nIHdoaXRlc3BhY2UpIHdhcyB1c2VkLCBpdFx1MjAxOXMgZmluZS5cbiAgICAgIGlmIChzaXplQiA+IDEpIHtcbiAgICAgICAgc2l6ZUIgPSAwO1xuICAgICAgICAvLyBUbyBkbzogY2hlY2sgaWYgdGhpcyB3b3Jrcy5cbiAgICAgICAgLy8gRmVlbCBmcmVlIHRvIGludGVycnVwdDpcbiAgICAgICAgc2VsZi5pbnRlcnJ1cHQgPSB0cnVlO1xuICAgICAgICBlZmZlY3RzLmV4aXQoJ3RhYmxlUm93Jyk7XG4gICAgICAgIGVmZmVjdHMuZW50ZXIoXCJsaW5lRW5kaW5nXCIpO1xuICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICAgIGVmZmVjdHMuZXhpdChcImxpbmVFbmRpbmdcIik7XG4gICAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyU3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGU6IGluIGBtYXJrZG93bi1yc2AsIHdlIG5lZWQgdG8gcmVzZXQsIGluIGBtaWNyb21hcmstanNgIHdlIGRvblx1MjAxOHQuXG4gICAgICByZXR1cm4gbm9rKGNvZGUpO1xuICAgIH1cbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgLy8gVG8gZG86IGNoZWNrIGlmIHRoaXMgaXMgZmluZS5cbiAgICAgIC8vIGVmZmVjdHMuYXR0ZW1wdChTdGF0ZTo6TmV4dChTdGF0ZU5hbWU6OkdmbVRhYmxlSGVhZFJvd0JyZWFrKSwgU3RhdGU6Ok5vaylcbiAgICAgIC8vIFN0YXRlOjpSZXRyeShzcGFjZV9vcl90YWIodG9rZW5pemVyKSlcbiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgaGVhZFJvd0JyZWFrLCBcIndoaXRlc3BhY2VcIikoY29kZSk7XG4gICAgfVxuICAgIHNpemVCICs9IDE7XG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIHNlZW4gPSBmYWxzZTtcbiAgICAgIC8vIEhlYWRlciBjZWxsIGNvdW50LlxuICAgICAgc2l6ZSArPSAxO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gMTI0KSB7XG4gICAgICBlZmZlY3RzLmVudGVyKCd0YWJsZUNlbGxEaXZpZGVyJyk7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoJ3RhYmxlQ2VsbERpdmlkZXInKTtcbiAgICAgIC8vIFdoZXRoZXIgYSBkZWxpbWl0ZXIgd2FzIHNlZW4uXG4gICAgICBzZWVuID0gdHJ1ZTtcbiAgICAgIHJldHVybiBoZWFkUm93QnJlYWs7XG4gICAgfVxuXG4gICAgLy8gQW55dGhpbmcgZWxzZSBpcyBjZWxsIGRhdGEuXG4gICAgZWZmZWN0cy5lbnRlcihcImRhdGFcIik7XG4gICAgcmV0dXJuIGhlYWRSb3dEYXRhKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIHRhYmxlIGhlYWQgcm93IGRhdGEuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCB8IGEgfFxuICAgKiAgICAgICBeXG4gICAqICAgfCB8IC0gfFxuICAgKiAgIHwgfCBiIHxcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGhlYWRSb3dEYXRhKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSAxMjQgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KFwiZGF0YVwiKTtcbiAgICAgIHJldHVybiBoZWFkUm93QnJlYWsoY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICByZXR1cm4gY29kZSA9PT0gOTIgPyBoZWFkUm93RXNjYXBlIDogaGVhZFJvd0RhdGE7XG4gIH1cblxuICAvKipcbiAgICogSW4gdGFibGUgaGVhZCByb3cgZXNjYXBlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfCBhXFwtYiB8XG4gICAqICAgICAgICAgXlxuICAgKiAgIHwgfCAtLS0tIHxcbiAgICogICB8IHwgYyAgICB8XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBoZWFkUm93RXNjYXBlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gOTIgfHwgY29kZSA9PT0gMTI0KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm4gaGVhZFJvd0RhdGE7XG4gICAgfVxuICAgIHJldHVybiBoZWFkUm93RGF0YShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWZvcmUgZGVsaW1pdGVyIHJvdy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IHwgYSB8XG4gICAqID4gfCB8IC0gfFxuICAgKiAgICAgXlxuICAgKiAgIHwgfCBiIHxcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJTdGFydChjb2RlKSB7XG4gICAgLy8gUmVzZXQgYGludGVycnVwdGAuXG4gICAgc2VsZi5pbnRlcnJ1cHQgPSBmYWxzZTtcblxuICAgIC8vIE5vdGU6IGluIGBtYXJrZG93bi1yc2AsIHdlIG5lZWQgdG8gaGFuZGxlIHBpZXJjaW5nIGhlcmUgdG9vLlxuICAgIGlmIChzZWxmLnBhcnNlci5sYXp5W3NlbGYubm93KCkubGluZV0pIHtcbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuZW50ZXIoJ3RhYmxlRGVsaW1pdGVyUm93Jyk7XG4gICAgLy8gVHJhY2sgaWYgd2VcdTIwMTl2ZSBzZWVuIGEgYDpgIG9yIGB8YC5cbiAgICBzZWVuID0gZmFsc2U7XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgaGVhZERlbGltaXRlckJlZm9yZSwgXCJsaW5lUHJlZml4XCIsIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCdjb2RlSW5kZW50ZWQnKSA/IHVuZGVmaW5lZCA6IDQpKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZERlbGltaXRlckJlZm9yZShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWZvcmUgZGVsaW1pdGVyIHJvdywgYWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogUmV1c2VkIHdoZW4gYSBgfGAgaXMgZm91bmQgbGF0ZXIsIHRvIHBhcnNlIGFub3RoZXIgY2VsbC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IHwgYSB8XG4gICAqID4gfCB8IC0gfFxuICAgKiAgICAgXlxuICAgKiAgIHwgfCBiIHxcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJCZWZvcmUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0NSB8fCBjb2RlID09PSA1OCkge1xuICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJWYWx1ZUJlZm9yZShjb2RlKTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDEyNCkge1xuICAgICAgc2VlbiA9IHRydWU7XG4gICAgICAvLyBJZiB3ZSBzdGFydCB3aXRoIGEgcGlwZSwgd2Ugb3BlbiBhIGNlbGwgbWFya2VyLlxuICAgICAgZWZmZWN0cy5lbnRlcigndGFibGVDZWxsRGl2aWRlcicpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KCd0YWJsZUNlbGxEaXZpZGVyJyk7XG4gICAgICByZXR1cm4gaGVhZERlbGltaXRlckNlbGxCZWZvcmU7XG4gICAgfVxuXG4gICAgLy8gTW9yZSB3aGl0ZXNwYWNlIC8gZW1wdHkgcm93IG5vdCBhbGxvd2VkIGF0IHN0YXJ0LlxuICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGB8YCwgYmVmb3JlIGRlbGltaXRlciBjZWxsLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgfCBhIHxcbiAgICogPiB8IHwgLSB8XG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaGVhZERlbGltaXRlckNlbGxCZWZvcmUoY29kZSkge1xuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGhlYWREZWxpbWl0ZXJWYWx1ZUJlZm9yZSwgXCJ3aGl0ZXNwYWNlXCIpKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZERlbGltaXRlclZhbHVlQmVmb3JlKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZm9yZSBkZWxpbWl0ZXIgY2VsbCB2YWx1ZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IHwgYSB8XG4gICAqID4gfCB8IC0gfFxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyVmFsdWVCZWZvcmUoY29kZSkge1xuICAgIC8vIEFsaWduOiBsZWZ0LlxuICAgIGlmIChjb2RlID09PSA1OCkge1xuICAgICAgc2l6ZUIgKz0gMTtcbiAgICAgIHNlZW4gPSB0cnVlO1xuICAgICAgZWZmZWN0cy5lbnRlcigndGFibGVEZWxpbWl0ZXJNYXJrZXInKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdCgndGFibGVEZWxpbWl0ZXJNYXJrZXInKTtcbiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTGVmdEFsaWdubWVudEFmdGVyO1xuICAgIH1cblxuICAgIC8vIEFsaWduOiBub25lLlxuICAgIGlmIChjb2RlID09PSA0NSkge1xuICAgICAgc2l6ZUIgKz0gMTtcbiAgICAgIC8vIFRvIGRvOiBzZWVtcyB3ZWlyZCB0aGF0IHRoaXMgKmlzblx1MjAxOXQqIGxlZnQgYWxpZ25lZCwgYnV0IHRoYXQgc3RhdGUgaXMgdXNlZD9cbiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTGVmdEFsaWdubWVudEFmdGVyKGNvZGUpO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyQ2VsbEFmdGVyKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZERlbGltaXRlck5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBkZWxpbWl0ZXIgY2VsbCBsZWZ0IGFsaWdubWVudCBtYXJrZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCB8IGEgIHxcbiAgICogPiB8IHwgOi0gfFxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaGVhZERlbGltaXRlckxlZnRBbGlnbm1lbnRBZnRlcihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQ1KSB7XG4gICAgICBlZmZlY3RzLmVudGVyKCd0YWJsZURlbGltaXRlckZpbGxlcicpO1xuICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJGaWxsZXIoY29kZSk7XG4gICAgfVxuXG4gICAgLy8gQW55dGhpbmcgZWxzZSBpcyBub3Qgb2sgYWZ0ZXIgdGhlIGxlZnQtYWxpZ24gY29sb24uXG4gICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJOb2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gZGVsaW1pdGVyIGNlbGwgZmlsbGVyLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgfCBhIHxcbiAgICogPiB8IHwgLSB8XG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJGaWxsZXIoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0NSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJGaWxsZXI7XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gaXMgYGNlbnRlcmAgaWYgaXQgd2FzIGBsZWZ0YCwgYHJpZ2h0YCBvdGhlcndpc2UuXG4gICAgaWYgKGNvZGUgPT09IDU4KSB7XG4gICAgICBzZWVuID0gdHJ1ZTtcbiAgICAgIGVmZmVjdHMuZXhpdCgndGFibGVEZWxpbWl0ZXJGaWxsZXInKTtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ3RhYmxlRGVsaW1pdGVyTWFya2VyJyk7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoJ3RhYmxlRGVsaW1pdGVyTWFya2VyJyk7XG4gICAgICByZXR1cm4gaGVhZERlbGltaXRlclJpZ2h0QWxpZ25tZW50QWZ0ZXI7XG4gICAgfVxuICAgIGVmZmVjdHMuZXhpdCgndGFibGVEZWxpbWl0ZXJGaWxsZXInKTtcbiAgICByZXR1cm4gaGVhZERlbGltaXRlclJpZ2h0QWxpZ25tZW50QWZ0ZXIoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgZGVsaW1pdGVyIGNlbGwgcmlnaHQgYWxpZ25tZW50IG1hcmtlci5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IHwgIGEgfFxuICAgKiA+IHwgfCAtOiB8XG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaGVhZERlbGltaXRlclJpZ2h0QWxpZ25tZW50QWZ0ZXIoY29kZSkge1xuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIsIFwid2hpdGVzcGFjZVwiKShjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgZGVsaW1pdGVyIGNlbGwuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCB8ICBhIHxcbiAgICogPiB8IHwgLTogfFxuICAgKiAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyQ2VsbEFmdGVyKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gMTI0KSB7XG4gICAgICByZXR1cm4gaGVhZERlbGltaXRlckJlZm9yZShjb2RlKTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICAvLyBFeGl0IHdoZW46XG4gICAgICAvLyAqIHRoZXJlIHdhcyBubyBgOmAgb3IgYHxgIGF0IGFsbCAoaXRcdTIwMTlzIGEgdGhlbWF0aWMgYnJlYWsgb3Igc2V0ZXh0XG4gICAgICAvLyAgIHVuZGVybGluZSBpbnN0ZWFkKVxuICAgICAgLy8gKiB0aGUgaGVhZGVyIGNlbGwgY291bnQgaXMgbm90IHRoZSBkZWxpbWl0ZXIgY2VsbCBjb3VudFxuICAgICAgaWYgKCFzZWVuIHx8IHNpemUgIT09IHNpemVCKSB7XG4gICAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3RlOiBpbiBtYXJrZG93bi1yc2AsIGEgcmVzZXQgaXMgbmVlZGVkIGhlcmUuXG4gICAgICBlZmZlY3RzLmV4aXQoJ3RhYmxlRGVsaW1pdGVyUm93Jyk7XG4gICAgICBlZmZlY3RzLmV4aXQoJ3RhYmxlSGVhZCcpO1xuICAgICAgLy8gVG8gZG86IGluIGBtYXJrZG93bi1yc2AsIHJlc29sdmVycyBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgbWFudWFsbHkuXG4gICAgICAvLyBlZmZlY3RzLnJlZ2lzdGVyX3Jlc29sdmVyKFJlc29sdmVOYW1lOjpHZm1UYWJsZSlcbiAgICAgIHJldHVybiBvayhjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJOb2soY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gZGVsaW1pdGVyIHJvdywgYXQgYSBkaXNhbGxvd2VkIGJ5dGUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCB8IGEgfFxuICAgKiA+IHwgfCB4IHxcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaGVhZERlbGltaXRlck5vayhjb2RlKSB7XG4gICAgLy8gTm90ZTogaW4gYG1hcmtkb3duLXJzYCwgd2UgbmVlZCB0byByZXNldCwgaW4gYG1pY3JvbWFyay1qc2Agd2UgZG9uXHUyMDE4dC5cbiAgICByZXR1cm4gbm9rKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZm9yZSB0YWJsZSBib2R5IHJvdy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IHwgYSB8XG4gICAqICAgfCB8IC0gfFxuICAgKiA+IHwgfCBiIHxcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGJvZHlSb3dTdGFydChjb2RlKSB7XG4gICAgLy8gTm90ZTogaW4gYG1hcmtkb3duLXJzYCB3ZSBuZWVkIHRvIG1hbnVhbGx5IHRha2UgY2FyZSBvZiBhIHByZWZpeCxcbiAgICAvLyBidXQgaW4gYG1pY3JvbWFyay1qc2AgdGhhdCBpcyBkb25lIGZvciB1cywgc28gaWYgd2VcdTIwMTlyZSBoZXJlLCB3ZVx1MjAxOXJlXG4gICAgLy8gbmV2ZXIgYXQgd2hpdGVzcGFjZS5cbiAgICBlZmZlY3RzLmVudGVyKCd0YWJsZVJvdycpO1xuICAgIHJldHVybiBib2R5Um93QnJlYWsoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQXQgYnJlYWsgaW4gdGFibGUgYm9keSByb3cuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCB8IGEgfFxuICAgKiAgIHwgfCAtIHxcbiAgICogPiB8IHwgYiB8XG4gICAqICAgICBeXG4gICAqICAgICAgIF5cbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBib2R5Um93QnJlYWsoY29kZSkge1xuICAgIGlmIChjb2RlID09PSAxMjQpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ3RhYmxlQ2VsbERpdmlkZXInKTtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIGVmZmVjdHMuZXhpdCgndGFibGVDZWxsRGl2aWRlcicpO1xuICAgICAgcmV0dXJuIGJvZHlSb3dCcmVhaztcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoJ3RhYmxlUm93Jyk7XG4gICAgICByZXR1cm4gb2soY29kZSk7XG4gICAgfVxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGJvZHlSb3dCcmVhaywgXCJ3aGl0ZXNwYWNlXCIpKGNvZGUpO1xuICAgIH1cblxuICAgIC8vIEFueXRoaW5nIGVsc2UgaXMgY2VsbCBjb250ZW50LlxuICAgIGVmZmVjdHMuZW50ZXIoXCJkYXRhXCIpO1xuICAgIHJldHVybiBib2R5Um93RGF0YShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiB0YWJsZSBib2R5IHJvdyBkYXRhLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgfCBhIHxcbiAgICogICB8IHwgLSB8XG4gICAqID4gfCB8IGIgfFxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBib2R5Um93RGF0YShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gMTI0IHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdChcImRhdGFcIik7XG4gICAgICByZXR1cm4gYm9keVJvd0JyZWFrKGNvZGUpO1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIGNvZGUgPT09IDkyID8gYm9keVJvd0VzY2FwZSA6IGJvZHlSb3dEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIHRhYmxlIGJvZHkgcm93IGVzY2FwZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IHwgYSAgICB8XG4gICAqICAgfCB8IC0tLS0gfFxuICAgKiA+IHwgfCBiXFwtYyB8XG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYm9keVJvd0VzY2FwZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDkyIHx8IGNvZGUgPT09IDEyNCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGJvZHlSb3dEYXRhO1xuICAgIH1cbiAgICByZXR1cm4gYm9keVJvd0RhdGEoY29kZSk7XG4gIH1cbn1cblxuLyoqIEB0eXBlIHtSZXNvbHZlcn0gKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVRhYmxlKGV2ZW50cywgY29udGV4dCkge1xuICBsZXQgaW5kZXggPSAtMTtcbiAgbGV0IGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gdHJ1ZTtcbiAgLyoqIEB0eXBlIHtSb3dLaW5kfSAqL1xuICBsZXQgcm93S2luZCA9IDA7XG4gIC8qKiBAdHlwZSB7UmFuZ2V9ICovXG4gIGxldCBsYXN0Q2VsbCA9IFswLCAwLCAwLCAwXTtcbiAgLyoqIEB0eXBlIHtSYW5nZX0gKi9cbiAgbGV0IGNlbGwgPSBbMCwgMCwgMCwgMF07XG4gIGxldCBhZnRlckhlYWRBd2FpdGluZ0ZpcnN0Qm9keVJvdyA9IGZhbHNlO1xuICBsZXQgbGFzdFRhYmxlRW5kID0gMDtcbiAgLyoqIEB0eXBlIHtUb2tlbiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGN1cnJlbnRUYWJsZTtcbiAgLyoqIEB0eXBlIHtUb2tlbiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGN1cnJlbnRCb2R5O1xuICAvKiogQHR5cGUge1Rva2VuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgY3VycmVudENlbGw7XG4gIGNvbnN0IG1hcCA9IG5ldyBFZGl0TWFwKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgZXZlbnRzLmxlbmd0aCkge1xuICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2luZGV4XTtcbiAgICBjb25zdCB0b2tlbiA9IGV2ZW50WzFdO1xuICAgIGlmIChldmVudFswXSA9PT0gJ2VudGVyJykge1xuICAgICAgLy8gU3RhcnQgb2YgaGVhZC5cbiAgICAgIGlmICh0b2tlbi50eXBlID09PSAndGFibGVIZWFkJykge1xuICAgICAgICBhZnRlckhlYWRBd2FpdGluZ0ZpcnN0Qm9keVJvdyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIEluamVjdCBwcmV2aW91cyAoYm9keSBlbmQgYW5kKSB0YWJsZSBlbmQuXG4gICAgICAgIGlmIChsYXN0VGFibGVFbmQgIT09IDApIHtcbiAgICAgICAgICBmbHVzaFRhYmxlRW5kKG1hcCwgY29udGV4dCwgbGFzdFRhYmxlRW5kLCBjdXJyZW50VGFibGUsIGN1cnJlbnRCb2R5KTtcbiAgICAgICAgICBjdXJyZW50Qm9keSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBsYXN0VGFibGVFbmQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5qZWN0IHRhYmxlIHN0YXJ0LlxuICAgICAgICBjdXJyZW50VGFibGUgPSB7XG4gICAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgdG9rZW4uc3RhcnQpLFxuICAgICAgICAgIC8vIE5vdGU6IGNvcnJlY3QgZW5kIGlzIHNldCBsYXRlci5cbiAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLmVuZClcbiAgICAgICAgfTtcbiAgICAgICAgbWFwLmFkZChpbmRleCwgMCwgW1snZW50ZXInLCBjdXJyZW50VGFibGUsIGNvbnRleHRdXSk7XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09ICd0YWJsZVJvdycgfHwgdG9rZW4udHlwZSA9PT0gJ3RhYmxlRGVsaW1pdGVyUm93Jykge1xuICAgICAgICBpbkZpcnN0Q2VsbEF3YWl0aW5nUGlwZSA9IHRydWU7XG4gICAgICAgIGN1cnJlbnRDZWxsID0gdW5kZWZpbmVkO1xuICAgICAgICBsYXN0Q2VsbCA9IFswLCAwLCAwLCAwXTtcbiAgICAgICAgY2VsbCA9IFswLCBpbmRleCArIDEsIDAsIDBdO1xuXG4gICAgICAgIC8vIEluamVjdCB0YWJsZSBib2R5IHN0YXJ0LlxuICAgICAgICBpZiAoYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cpIHtcbiAgICAgICAgICBhZnRlckhlYWRBd2FpdGluZ0ZpcnN0Qm9keVJvdyA9IGZhbHNlO1xuICAgICAgICAgIGN1cnJlbnRCb2R5ID0ge1xuICAgICAgICAgICAgdHlwZTogJ3RhYmxlQm9keScsXG4gICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgdG9rZW4uc3RhcnQpLFxuICAgICAgICAgICAgLy8gTm90ZTogY29ycmVjdCBlbmQgaXMgc2V0IGxhdGVyLlxuICAgICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCB0b2tlbi5lbmQpXG4gICAgICAgICAgfTtcbiAgICAgICAgICBtYXAuYWRkKGluZGV4LCAwLCBbWydlbnRlcicsIGN1cnJlbnRCb2R5LCBjb250ZXh0XV0pO1xuICAgICAgICB9XG4gICAgICAgIHJvd0tpbmQgPSB0b2tlbi50eXBlID09PSAndGFibGVEZWxpbWl0ZXJSb3cnID8gMiA6IGN1cnJlbnRCb2R5ID8gMyA6IDE7XG4gICAgICB9XG4gICAgICAvLyBDZWxsIGRhdGEuXG4gICAgICBlbHNlIGlmIChyb3dLaW5kICYmICh0b2tlbi50eXBlID09PSBcImRhdGFcIiB8fCB0b2tlbi50eXBlID09PSAndGFibGVEZWxpbWl0ZXJNYXJrZXInIHx8IHRva2VuLnR5cGUgPT09ICd0YWJsZURlbGltaXRlckZpbGxlcicpKSB7XG4gICAgICAgIGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gRmlyc3QgdmFsdWUgaW4gY2VsbC5cbiAgICAgICAgaWYgKGNlbGxbMl0gPT09IDApIHtcbiAgICAgICAgICBpZiAobGFzdENlbGxbMV0gIT09IDApIHtcbiAgICAgICAgICAgIGNlbGxbMF0gPSBjZWxsWzFdO1xuICAgICAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwLCBjb250ZXh0LCBsYXN0Q2VsbCwgcm93S2luZCwgdW5kZWZpbmVkLCBjdXJyZW50Q2VsbCk7XG4gICAgICAgICAgICBsYXN0Q2VsbCA9IFswLCAwLCAwLCAwXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2VsbFsyXSA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09ICd0YWJsZUNlbGxEaXZpZGVyJykge1xuICAgICAgICBpZiAoaW5GaXJzdENlbGxBd2FpdGluZ1BpcGUpIHtcbiAgICAgICAgICBpbkZpcnN0Q2VsbEF3YWl0aW5nUGlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChsYXN0Q2VsbFsxXSAhPT0gMCkge1xuICAgICAgICAgICAgY2VsbFswXSA9IGNlbGxbMV07XG4gICAgICAgICAgICBjdXJyZW50Q2VsbCA9IGZsdXNoQ2VsbChtYXAsIGNvbnRleHQsIGxhc3RDZWxsLCByb3dLaW5kLCB1bmRlZmluZWQsIGN1cnJlbnRDZWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGFzdENlbGwgPSBjZWxsO1xuICAgICAgICAgIGNlbGwgPSBbbGFzdENlbGxbMV0sIGluZGV4LCAwLCAwXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBFeGl0IGV2ZW50cy5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSAndGFibGVIZWFkJykge1xuICAgICAgYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cgPSB0cnVlO1xuICAgICAgbGFzdFRhYmxlRW5kID0gaW5kZXg7XG4gICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAndGFibGVSb3cnIHx8IHRva2VuLnR5cGUgPT09ICd0YWJsZURlbGltaXRlclJvdycpIHtcbiAgICAgIGxhc3RUYWJsZUVuZCA9IGluZGV4O1xuICAgICAgaWYgKGxhc3RDZWxsWzFdICE9PSAwKSB7XG4gICAgICAgIGNlbGxbMF0gPSBjZWxsWzFdO1xuICAgICAgICBjdXJyZW50Q2VsbCA9IGZsdXNoQ2VsbChtYXAsIGNvbnRleHQsIGxhc3RDZWxsLCByb3dLaW5kLCBpbmRleCwgY3VycmVudENlbGwpO1xuICAgICAgfSBlbHNlIGlmIChjZWxsWzFdICE9PSAwKSB7XG4gICAgICAgIGN1cnJlbnRDZWxsID0gZmx1c2hDZWxsKG1hcCwgY29udGV4dCwgY2VsbCwgcm93S2luZCwgaW5kZXgsIGN1cnJlbnRDZWxsKTtcbiAgICAgIH1cbiAgICAgIHJvd0tpbmQgPSAwO1xuICAgIH0gZWxzZSBpZiAocm93S2luZCAmJiAodG9rZW4udHlwZSA9PT0gXCJkYXRhXCIgfHwgdG9rZW4udHlwZSA9PT0gJ3RhYmxlRGVsaW1pdGVyTWFya2VyJyB8fCB0b2tlbi50eXBlID09PSAndGFibGVEZWxpbWl0ZXJGaWxsZXInKSkge1xuICAgICAgY2VsbFszXSA9IGluZGV4O1xuICAgIH1cbiAgfVxuICBpZiAobGFzdFRhYmxlRW5kICE9PSAwKSB7XG4gICAgZmx1c2hUYWJsZUVuZChtYXAsIGNvbnRleHQsIGxhc3RUYWJsZUVuZCwgY3VycmVudFRhYmxlLCBjdXJyZW50Qm9keSk7XG4gIH1cbiAgbWFwLmNvbnN1bWUoY29udGV4dC5ldmVudHMpO1xuXG4gIC8vIFRvIGRvOiBtb3ZlIHRoaXMgaW50byBgaHRtbGAsIHdoZW4gZXZlbnRzIGFyZSBleHBvc2VkIHRoZXJlLlxuICAvLyBUaGF0XHUyMDE5cyB3aGF0IGBtYXJrZG93bi1yc2AgZG9lcy5cbiAgLy8gVGhhdCBuZWVkcyB1cGRhdGVzIHRvIGBtZGFzdC11dGlsLWdmbS10YWJsZWAuXG4gIGluZGV4ID0gLTE7XG4gIHdoaWxlICgrK2luZGV4IDwgY29udGV4dC5ldmVudHMubGVuZ3RoKSB7XG4gICAgY29uc3QgZXZlbnQgPSBjb250ZXh0LmV2ZW50c1tpbmRleF07XG4gICAgaWYgKGV2ZW50WzBdID09PSAnZW50ZXInICYmIGV2ZW50WzFdLnR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgIGV2ZW50WzFdLl9hbGlnbiA9IGdmbVRhYmxlQWxpZ24oY29udGV4dC5ldmVudHMsIGluZGV4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV2ZW50cztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGNlbGwuXG4gKlxuICogQHBhcmFtIHtFZGl0TWFwfSBtYXBcbiAqIEBwYXJhbSB7UmVhZG9ubHk8VG9rZW5pemVDb250ZXh0Pn0gY29udGV4dFxuICogQHBhcmFtIHtSZWFkb25seTxSYW5nZT59IHJhbmdlXG4gKiBAcGFyYW0ge1Jvd0tpbmR9IHJvd0tpbmRcbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSByb3dFbmRcbiAqIEBwYXJhbSB7VG9rZW4gfCB1bmRlZmluZWR9IHByZXZpb3VzQ2VsbFxuICogQHJldHVybnMge1Rva2VuIHwgdW5kZWZpbmVkfVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXBhcmFtc1xuZnVuY3Rpb24gZmx1c2hDZWxsKG1hcCwgY29udGV4dCwgcmFuZ2UsIHJvd0tpbmQsIHJvd0VuZCwgcHJldmlvdXNDZWxsKSB7XG4gIC8vIGBtYXJrZG93bi1yc2AgdXNlczpcbiAgLy8gcm93S2luZCA9PT0gMiA/ICd0YWJsZURlbGltaXRlckNlbGwnIDogJ3RhYmxlQ2VsbCdcbiAgY29uc3QgZ3JvdXBOYW1lID0gcm93S2luZCA9PT0gMSA/ICd0YWJsZUhlYWRlcicgOiByb3dLaW5kID09PSAyID8gJ3RhYmxlRGVsaW1pdGVyJyA6ICd0YWJsZURhdGEnO1xuICAvLyBgbWFya2Rvd24tcnNgIHVzZXM6XG4gIC8vIHJvd0tpbmQgPT09IDIgPyAndGFibGVEZWxpbWl0ZXJDZWxsVmFsdWUnIDogJ3RhYmxlQ2VsbFRleHQnXG4gIGNvbnN0IHZhbHVlTmFtZSA9ICd0YWJsZUNvbnRlbnQnO1xuXG4gIC8vIEluc2VydCBhbiBleGl0IGZvciB0aGUgcHJldmlvdXMgY2VsbCwgaWYgdGhlcmUgaXMgb25lLlxuICAvL1xuICAvLyBgYGBtYXJrZG93blxuICAvLyA+IHwgfCBhYSB8IGJiIHwgY2MgfFxuICAvLyAgICAgICAgICBeLS0gZXhpdFxuICAvLyAgICAgICAgICAgXl5eXi0tIHRoaXMgY2VsbFxuICAvLyBgYGBcbiAgaWYgKHJhbmdlWzBdICE9PSAwKSB7XG4gICAgcHJldmlvdXNDZWxsLmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIGdldFBvaW50KGNvbnRleHQuZXZlbnRzLCByYW5nZVswXSkpO1xuICAgIG1hcC5hZGQocmFuZ2VbMF0sIDAsIFtbJ2V4aXQnLCBwcmV2aW91c0NlbGwsIGNvbnRleHRdXSk7XG4gIH1cblxuICAvLyBJbnNlcnQgZW50ZXIgb2YgdGhpcyBjZWxsLlxuICAvL1xuICAvLyBgYGBtYXJrZG93blxuICAvLyA+IHwgfCBhYSB8IGJiIHwgY2MgfFxuICAvLyAgICAgICAgICAgXi0tIGVudGVyXG4gIC8vICAgICAgICAgICBeXl5eLS0gdGhpcyBjZWxsXG4gIC8vIGBgYFxuICBjb25zdCBub3cgPSBnZXRQb2ludChjb250ZXh0LmV2ZW50cywgcmFuZ2VbMV0pO1xuICBwcmV2aW91c0NlbGwgPSB7XG4gICAgdHlwZTogZ3JvdXBOYW1lLFxuICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBub3cpLFxuICAgIC8vIE5vdGU6IGNvcnJlY3QgZW5kIGlzIHNldCBsYXRlci5cbiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIG5vdylcbiAgfTtcbiAgbWFwLmFkZChyYW5nZVsxXSwgMCwgW1snZW50ZXInLCBwcmV2aW91c0NlbGwsIGNvbnRleHRdXSk7XG5cbiAgLy8gSW5zZXJ0IHRleHQgc3RhcnQgYXQgZmlyc3QgZGF0YSBzdGFydCBhbmQgZW5kIGF0IGxhc3QgZGF0YSBlbmQsIGFuZFxuICAvLyByZW1vdmUgZXZlbnRzIGJldHdlZW4uXG4gIC8vXG4gIC8vIGBgYG1hcmtkb3duXG4gIC8vID4gfCB8IGFhIHwgYmIgfCBjYyB8XG4gIC8vICAgICAgICAgICAgXi0tIGVudGVyXG4gIC8vICAgICAgICAgICAgIF4tLSBleGl0XG4gIC8vICAgICAgICAgICBeXl5eLS0gdGhpcyBjZWxsXG4gIC8vIGBgYFxuICBpZiAocmFuZ2VbMl0gIT09IDApIHtcbiAgICBjb25zdCByZWxhdGVkU3RhcnQgPSBnZXRQb2ludChjb250ZXh0LmV2ZW50cywgcmFuZ2VbMl0pO1xuICAgIGNvbnN0IHJlbGF0ZWRFbmQgPSBnZXRQb2ludChjb250ZXh0LmV2ZW50cywgcmFuZ2VbM10pO1xuICAgIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gICAgY29uc3QgdmFsdWVUb2tlbiA9IHtcbiAgICAgIHR5cGU6IHZhbHVlTmFtZSxcbiAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCByZWxhdGVkU3RhcnQpLFxuICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCByZWxhdGVkRW5kKVxuICAgIH07XG4gICAgbWFwLmFkZChyYW5nZVsyXSwgMCwgW1snZW50ZXInLCB2YWx1ZVRva2VuLCBjb250ZXh0XV0pO1xuICAgIGlmIChyb3dLaW5kICE9PSAyKSB7XG4gICAgICAvLyBGaXggcG9zaXRpb25hbCBpbmZvIG9uIHJlbWFpbmluZyBldmVudHNcbiAgICAgIGNvbnN0IHN0YXJ0ID0gY29udGV4dC5ldmVudHNbcmFuZ2VbMl1dO1xuICAgICAgY29uc3QgZW5kID0gY29udGV4dC5ldmVudHNbcmFuZ2VbM11dO1xuICAgICAgc3RhcnRbMV0uZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgZW5kWzFdLmVuZCk7XG4gICAgICBzdGFydFsxXS50eXBlID0gXCJjaHVua1RleHRcIjtcbiAgICAgIHN0YXJ0WzFdLmNvbnRlbnRUeXBlID0gXCJ0ZXh0XCI7XG5cbiAgICAgIC8vIFJlbW92ZSBpZiBuZWVkZWQuXG4gICAgICBpZiAocmFuZ2VbM10gPiByYW5nZVsyXSArIDEpIHtcbiAgICAgICAgY29uc3QgYSA9IHJhbmdlWzJdICsgMTtcbiAgICAgICAgY29uc3QgYiA9IHJhbmdlWzNdIC0gcmFuZ2VbMl0gLSAxO1xuICAgICAgICBtYXAuYWRkKGEsIGIsIFtdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbWFwLmFkZChyYW5nZVszXSArIDEsIDAsIFtbJ2V4aXQnLCB2YWx1ZVRva2VuLCBjb250ZXh0XV0pO1xuICB9XG5cbiAgLy8gSW5zZXJ0IGFuIGV4aXQgZm9yIHRoZSBsYXN0IGNlbGwsIGlmIGF0IHRoZSByb3cgZW5kLlxuICAvL1xuICAvLyBgYGBtYXJrZG93blxuICAvLyA+IHwgfCBhYSB8IGJiIHwgY2MgfFxuICAvLyAgICAgICAgICAgICAgICAgICAgXi0tIGV4aXRcbiAgLy8gICAgICAgICAgICAgICBeXl5eXl4tLSB0aGlzIGNlbGwgKHRoZSBsYXN0IG9uZSBjb250YWlucyB0d28gXHUyMDFDYmV0d2Vlblx1MjAxRCBwYXJ0cylcbiAgLy8gYGBgXG4gIGlmIChyb3dFbmQgIT09IHVuZGVmaW5lZCkge1xuICAgIHByZXZpb3VzQ2VsbC5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBnZXRQb2ludChjb250ZXh0LmV2ZW50cywgcm93RW5kKSk7XG4gICAgbWFwLmFkZChyb3dFbmQsIDAsIFtbJ2V4aXQnLCBwcmV2aW91c0NlbGwsIGNvbnRleHRdXSk7XG4gICAgcHJldmlvdXNDZWxsID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwcmV2aW91c0NlbGw7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgdGFibGUgZW5kIChhbmQgdGFibGUgYm9keSBlbmQpLlxuICpcbiAqIEBwYXJhbSB7UmVhZG9ubHk8RWRpdE1hcD59IG1hcFxuICogQHBhcmFtIHtSZWFkb25seTxUb2tlbml6ZUNvbnRleHQ+fSBjb250ZXh0XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7VG9rZW59IHRhYmxlXG4gKiBAcGFyYW0ge1Rva2VuIHwgdW5kZWZpbmVkfSB0YWJsZUJvZHlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbmZ1bmN0aW9uIGZsdXNoVGFibGVFbmQobWFwLCBjb250ZXh0LCBpbmRleCwgdGFibGUsIHRhYmxlQm9keSkge1xuICAvKiogQHR5cGUge0FycmF5PEV2ZW50Pn0gKi9cbiAgY29uc3QgZXhpdHMgPSBbXTtcbiAgY29uc3QgcmVsYXRlZCA9IGdldFBvaW50KGNvbnRleHQuZXZlbnRzLCBpbmRleCk7XG4gIGlmICh0YWJsZUJvZHkpIHtcbiAgICB0YWJsZUJvZHkuZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgcmVsYXRlZCk7XG4gICAgZXhpdHMucHVzaChbJ2V4aXQnLCB0YWJsZUJvZHksIGNvbnRleHRdKTtcbiAgfVxuICB0YWJsZS5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCByZWxhdGVkKTtcbiAgZXhpdHMucHVzaChbJ2V4aXQnLCB0YWJsZSwgY29udGV4dF0pO1xuICBtYXAuYWRkKGluZGV4ICsgMSwgMCwgZXhpdHMpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhZG9ubHk8QXJyYXk8RXZlbnQ+Pn0gZXZlbnRzXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm5zIHtSZWFkb25seTxQb2ludD59XG4gKi9cbmZ1bmN0aW9uIGdldFBvaW50KGV2ZW50cywgaW5kZXgpIHtcbiAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXhdO1xuICBjb25zdCBzaWRlID0gZXZlbnRbMF0gPT09ICdlbnRlcicgPyAnc3RhcnQnIDogJ2VuZCc7XG4gIHJldHVybiBldmVudFsxXVtzaWRlXTtcbn0iLCAiZXhwb3J0IHsgZ2ZtVGFibGVIdG1sIH0gZnJvbSAnLi9saWIvaHRtbC5qcyc7XG5leHBvcnQgeyBnZm1UYWJsZSB9IGZyb20gJy4vbGliL3N5bnRheC5qcyc7IiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db21waWxlQ29udGV4dH0gQ29tcGlsZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSHRtbEV4dGVuc2lvbn0gSHRtbEV4dGVuc2lvblxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbn0gVG9rZW5cbiAqL1xuXG4vLyBBbiBvcGVuaW5nIG9yIGNsb3NpbmcgdGFnIHN0YXJ0LCBmb2xsb3dlZCBieSBhIGNhc2UtaW5zZW5zaXRpdmUgc3BlY2lmaWMgdGFnIG5hbWUsXG4vLyBmb2xsb3dlZCBieSBIVE1MIHdoaXRlc3BhY2UsIGEgZ3JlYXRlciB0aGFuLCBvciBhIHNsYXNoLlxuY29uc3QgcmVGbG93ID1cbiAgLzwoXFwvPykoaWZyYW1lfG5vZW1iZWR8bm9mcmFtZXN8cGxhaW50ZXh0fHNjcmlwdHxzdHlsZXx0aXRsZXx0ZXh0YXJlYXx4bXApKD89W1xcdFxcblxcZlxcciAvPl0pL2dpXG5cbi8vIEFzIEhUTUwgKHRleHQpIHBhcnNlcyB0YWdzIHNlcGFyYXRlbHkgKGFuZCB2ZXJ5IHN0cmljdGx5KSwgd2UgZG9uXHUyMDE5dCBuZWVkIHRvIGJlXG4vLyBnbG9iYWwuXG5jb25zdCByZVRleHQgPSBuZXcgUmVnRXhwKCdeJyArIHJlRmxvdy5zb3VyY2UsICdpJylcblxuLyoqXG4gKiBDcmVhdGUgYW4gSFRNTCBleHRlbnNpb24gZm9yIGBtaWNyb21hcmtgIHRvIHN1cHBvcnQgR2l0SHVicyB3ZWlyZCBhbmRcbiAqIHVzZWxlc3MgdGFnZmlsdGVyIHdoZW4gc2VyaWFsaXppbmcgdG8gSFRNTC5cbiAqXG4gKiBAcmV0dXJucyB7SHRtbEV4dGVuc2lvbn1cbiAqICAgRXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0aGF0IGNhbiBiZSBwYXNzZWQgaW4gYGh0bWxFeHRlbnNpb25zYCB0byBzdXBwb3J0XG4gKiAgIEdpdEh1YnMgd2VpcmQgYW5kIHVzZWxlc3MgdGFnZmlsdGVyIHdoZW4gc2VyaWFsaXppbmcgdG8gSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdmbVRhZ2ZpbHRlckh0bWwoKSB7XG4gIHJldHVybiB7XG4gICAgZXhpdDoge1xuICAgICAgaHRtbEZsb3dEYXRhKHRva2VuKSB7XG4gICAgICAgIGV4aXRIdG1sRGF0YS5jYWxsKHRoaXMsIHRva2VuLCByZUZsb3cpXG4gICAgICB9LFxuICAgICAgaHRtbFRleHREYXRhKHRva2VuKSB7XG4gICAgICAgIGV4aXRIdG1sRGF0YS5jYWxsKHRoaXMsIHRva2VuLCByZVRleHQpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICogQHBhcmFtIHtUb2tlbn0gdG9rZW5cbiAqIEBwYXJhbSB7UmVnRXhwfSBmaWx0ZXJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGV4aXRIdG1sRGF0YSh0b2tlbiwgZmlsdGVyKSB7XG4gIGxldCB2YWx1ZSA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pXG5cbiAgaWYgKHRoaXMub3B0aW9ucy5hbGxvd0Rhbmdlcm91c0h0bWwpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoZmlsdGVyLCAnJmx0OyQxJDInKVxuICB9XG5cbiAgdGhpcy5yYXcodGhpcy5lbmNvZGUodmFsdWUpKVxufVxuIiwgImV4cG9ydCB7Z2ZtVGFnZmlsdGVySHRtbH0gZnJvbSAnLi9saWIvaW5kZXguanMnXG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtIdG1sRXh0ZW5zaW9ufSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBhbiBIVE1MIGV4dGVuc2lvbiBmb3IgYG1pY3JvbWFya2AgdG8gc3VwcG9ydCBHRk0gdGFzayBsaXN0IGl0ZW1zIHdoZW5cbiAqIHNlcmlhbGl6aW5nIHRvIEhUTUwuXG4gKlxuICogQHJldHVybnMge0h0bWxFeHRlbnNpb259XG4gKiAgIEV4dGVuc2lvbiBmb3IgYG1pY3JvbWFya2AgdGhhdCBjYW4gYmUgcGFzc2VkIGluIGBodG1sRXh0ZW5zaW9uc2AgdG9cbiAqICAgc3VwcG9ydCBHRk0gdGFzayBsaXN0IGl0ZW1zIHdoZW4gc2VyaWFsaXppbmcgdG8gSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdmbVRhc2tMaXN0SXRlbUh0bWwoKSB7XG4gIHJldHVybiB7XG4gICAgZW50ZXI6IHtcbiAgICAgIHRhc2tMaXN0Q2hlY2soKSB7XG4gICAgICAgIHRoaXMudGFnKCc8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGlzYWJsZWQ9XCJcIiAnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGV4aXQ6IHtcbiAgICAgIHRhc2tMaXN0Q2hlY2soKSB7XG4gICAgICAgIHRoaXMudGFnKCcvPicpO1xuICAgICAgfSxcbiAgICAgIHRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQoKSB7XG4gICAgICAgIHRoaXMudGFnKCdjaGVja2VkPVwiXCIgJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSIsICIvKipcbiAqIEBpbXBvcnQge0V4dGVuc2lvbiwgU3RhdGUsIFRva2VuaXplQ29udGV4dCwgVG9rZW5pemVyfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBmYWN0b3J5U3BhY2UgfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSc7XG5pbXBvcnQgeyBtYXJrZG93bkxpbmVFbmRpbmcsIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UsIG1hcmtkb3duU3BhY2UgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuY29uc3QgdGFza2xpc3RDaGVjayA9IHtcbiAgbmFtZTogJ3Rhc2tsaXN0Q2hlY2snLFxuICB0b2tlbml6ZTogdG9rZW5pemVUYXNrbGlzdENoZWNrXG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBIVE1MIGV4dGVuc2lvbiBmb3IgYG1pY3JvbWFya2AgdG8gc3VwcG9ydCBHRk0gdGFzayBsaXN0IGl0ZW1zXG4gKiBzeW50YXguXG4gKlxuICogQHJldHVybnMge0V4dGVuc2lvbn1cbiAqICAgRXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0aGF0IGNhbiBiZSBwYXNzZWQgaW4gYGh0bWxFeHRlbnNpb25zYCB0b1xuICogICBzdXBwb3J0IEdGTSB0YXNrIGxpc3QgaXRlbXMgd2hlbiBzZXJpYWxpemluZyB0byBIVE1MLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2ZtVGFza0xpc3RJdGVtKCkge1xuICByZXR1cm4ge1xuICAgIHRleHQ6IHtcbiAgICAgIFs5MV06IHRhc2tsaXN0Q2hlY2tcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplVGFza2xpc3RDaGVjayhlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICByZXR1cm4gb3BlbjtcblxuICAvKipcbiAgICogQXQgc3RhcnQgb2YgdGFzayBsaXN0IGl0ZW0gY2hlY2suXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAqIFt4XSB5LlxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBvcGVuKGNvZGUpIHtcbiAgICBpZiAoXG4gICAgLy8gRXhpdCBpZiB0aGVyZVx1MjAxOXMgc3R1ZmYgYmVmb3JlLlxuICAgIHNlbGYucHJldmlvdXMgIT09IG51bGwgfHxcbiAgICAvLyBFeGl0IGlmIG5vdCBpbiB0aGUgZmlyc3QgY29udGVudCB0aGF0IGlzIHRoZSBmaXJzdCBjaGlsZCBvZiBhIGxpc3RcbiAgICAvLyBpdGVtLlxuICAgICFzZWxmLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW0pIHtcbiAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgfVxuICAgIGVmZmVjdHMuZW50ZXIoJ3Rhc2tMaXN0Q2hlY2snKTtcbiAgICBlZmZlY3RzLmVudGVyKCd0YXNrTGlzdENoZWNrTWFya2VyJyk7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIGVmZmVjdHMuZXhpdCgndGFza0xpc3RDaGVja01hcmtlcicpO1xuICAgIHJldHVybiBpbnNpZGU7XG4gIH1cblxuICAvKipcbiAgICogSW4gdGFzayBsaXN0IGl0ZW0gY2hlY2suXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAqIFt4XSB5LlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaW5zaWRlKGNvZGUpIHtcbiAgICAvLyBDdXJyZW50bHkgd2UgbWF0Y2ggaG93IEdIIHdvcmtzIGluIGZpbGVzLlxuICAgIC8vIFRvIG1hdGNoIGhvdyBHSCB3b3JrcyBpbiBjb21tZW50cywgdXNlIGBtYXJrZG93blNwYWNlYCAoYFtcXHQgXWApIGluc3RlYWRcbiAgICAvLyBvZiBgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZWAgKGBbXFx0XFxuXFxyIF1gKS5cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcigndGFza0xpc3RDaGVja1ZhbHVlVW5jaGVja2VkJyk7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoJ3Rhc2tMaXN0Q2hlY2tWYWx1ZVVuY2hlY2tlZCcpO1xuICAgICAgcmV0dXJuIGNsb3NlO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gODggfHwgY29kZSA9PT0gMTIwKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKCd0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkJyk7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoJ3Rhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQnKTtcbiAgICAgIHJldHVybiBjbG9zZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBjbG9zZSBvZiB0YXNrIGxpc3QgaXRlbSBjaGVjay5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICogW3hdIHkuXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY2xvc2UoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA5Mykge1xuICAgICAgZWZmZWN0cy5lbnRlcigndGFza0xpc3RDaGVja01hcmtlcicpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgZWZmZWN0cy5leGl0KCd0YXNrTGlzdENoZWNrTWFya2VyJyk7XG4gICAgICBlZmZlY3RzLmV4aXQoJ3Rhc2tMaXN0Q2hlY2snKTtcbiAgICAgIHJldHVybiBhZnRlcjtcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgLy8gRU9MIGluIHBhcmFncmFwaCBtZWFucyB0aGVyZSBtdXN0IGJlIHNvbWV0aGluZyBlbHNlIGFmdGVyIGl0LlxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBvayhjb2RlKTtcbiAgICB9XG5cbiAgICAvLyBTcGFjZSBvciB0YWI/XG4gICAgLy8gQ2hlY2sgd2hhdCBjb21lcyBhZnRlci5cbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2soe1xuICAgICAgICB0b2tlbml6ZTogc3BhY2VUaGVuTm9uU3BhY2VcbiAgICAgIH0sIG9rLCBub2spKGNvZGUpO1xuICAgIH1cblxuICAgIC8vIEVPRiwgb3Igbm9uLXdoaXRlc3BhY2UsIGJvdGggd3JvbmcuXG4gICAgcmV0dXJuIG5vayhjb2RlKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiBzcGFjZVRoZW5Ob25TcGFjZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXIsIFwid2hpdGVzcGFjZVwiKTtcblxuICAvKipcbiAgICogQWZ0ZXIgd2hpdGVzcGFjZSwgYWZ0ZXIgdGFzayBsaXN0IGl0ZW0gY2hlY2suXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAqIFt4XSB5LlxuICAgKiAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYWZ0ZXIoY29kZSkge1xuICAgIC8vIEVPRiBtZWFucyB0aGVyZSB3YXMgbm90aGluZywgc28gYmFkLlxuICAgIC8vIEVPTCBtZWFucyB0aGVyZVx1MjAxOXMgY29udGVudCBhZnRlciBpdCwgc28gZ29vZC5cbiAgICAvLyBJbXBvc3NpYmxlIHRvIGhhdmUgbW9yZSBzcGFjZXMuXG4gICAgLy8gQW55dGhpbmcgZWxzZSBpcyBnb29kLlxuICAgIHJldHVybiBjb2RlID09PSBudWxsID8gbm9rKGNvZGUpIDogb2soY29kZSk7XG4gIH1cbn0iLCAiZXhwb3J0IHsgZ2ZtVGFza0xpc3RJdGVtSHRtbCB9IGZyb20gJy4vbGliL2h0bWwuanMnO1xuZXhwb3J0IHsgZ2ZtVGFza0xpc3RJdGVtIH0gZnJvbSAnLi9saWIvc3ludGF4LmpzJzsiLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZScpLkh0bWxPcHRpb25zfSBIdG1sT3B0aW9uc1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaCcpLk9wdGlvbnN9IE9wdGlvbnNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRXh0ZW5zaW9ufSBFeHRlbnNpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSHRtbEV4dGVuc2lvbn0gSHRtbEV4dGVuc2lvblxuICovXG5cbmltcG9ydCB7XG4gIGNvbWJpbmVFeHRlbnNpb25zLFxuICBjb21iaW5lSHRtbEV4dGVuc2lvbnNcbn0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY29tYmluZS1leHRlbnNpb25zJ1xuaW1wb3J0IHtcbiAgZ2ZtQXV0b2xpbmtMaXRlcmFsLFxuICBnZm1BdXRvbGlua0xpdGVyYWxIdG1sXG59IGZyb20gJ21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWwnXG5pbXBvcnQge2dmbUZvb3Rub3RlLCBnZm1Gb290bm90ZUh0bWx9IGZyb20gJ21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlJ1xuaW1wb3J0IHtcbiAgZ2ZtU3RyaWtldGhyb3VnaCxcbiAgZ2ZtU3RyaWtldGhyb3VnaEh0bWxcbn0gZnJvbSAnbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaCdcbmltcG9ydCB7Z2ZtVGFibGUsIGdmbVRhYmxlSHRtbH0gZnJvbSAnbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUnXG5pbXBvcnQge2dmbVRhZ2ZpbHRlckh0bWx9IGZyb20gJ21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlcidcbmltcG9ydCB7XG4gIGdmbVRhc2tMaXN0SXRlbSxcbiAgZ2ZtVGFza0xpc3RJdGVtSHRtbFxufSBmcm9tICdtaWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbSdcblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0byBlbmFibGUgR0ZNIHN5bnRheC5cbiAqXG4gKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICpcbiAqICAgUGFzc2VkIHRvIGBtaWNyb21hcmstZXh0ZW5zLWdmbS1zdHJpa2V0aHJvdWdoYC5cbiAqIEByZXR1cm5zIHtFeHRlbnNpb259XG4gKiAgIEV4dGVuc2lvbiBmb3IgYG1pY3JvbWFya2AgdGhhdCBjYW4gYmUgcGFzc2VkIGluIGBleHRlbnNpb25zYCB0byBlbmFibGUgR0ZNXG4gKiAgIHN5bnRheC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdmbShvcHRpb25zKSB7XG4gIHJldHVybiBjb21iaW5lRXh0ZW5zaW9ucyhbXG4gICAgZ2ZtQXV0b2xpbmtMaXRlcmFsKCksXG4gICAgZ2ZtRm9vdG5vdGUoKSxcbiAgICBnZm1TdHJpa2V0aHJvdWdoKG9wdGlvbnMpLFxuICAgIGdmbVRhYmxlKCksXG4gICAgZ2ZtVGFza0xpc3RJdGVtKClcbiAgXSlcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0byBzdXBwb3J0IEdGTSB3aGVuIHNlcmlhbGl6aW5nIHRvIEhUTUwuXG4gKlxuICogQHBhcmFtIHtIdG1sT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuXG4gKlxuICogICBQYXNzZWQgdG8gYG1pY3JvbWFyay1leHRlbnMtZ2ZtLWZvb3Rub3RlYC5cbiAqIEByZXR1cm5zIHtIdG1sRXh0ZW5zaW9ufVxuICogICBFeHRlbnNpb24gZm9yIGBtaWNyb21hcmtgIHRoYXQgY2FuIGJlIHBhc3NlZCBpbiBgaHRtbEV4dGVuc2lvbnNgIHRvXG4gKiAgIHN1cHBvcnQgR0ZNIHdoZW4gc2VyaWFsaXppbmcgdG8gSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdmbUh0bWwob3B0aW9ucykge1xuICByZXR1cm4gY29tYmluZUh0bWxFeHRlbnNpb25zKFtcbiAgICBnZm1BdXRvbGlua0xpdGVyYWxIdG1sKCksXG4gICAgZ2ZtRm9vdG5vdGVIdG1sKG9wdGlvbnMpLFxuICAgIGdmbVN0cmlrZXRocm91Z2hIdG1sKCksXG4gICAgZ2ZtVGFibGVIdG1sKCksXG4gICAgZ2ZtVGFnZmlsdGVySHRtbCgpLFxuICAgIGdmbVRhc2tMaXN0SXRlbUh0bWwoKVxuICBdKVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7Um9vdH0gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtPcHRpb25zfSBmcm9tICdyZW1hcmstZ2ZtJ1xuICogQGltcG9ydCB7fSBmcm9tICdyZW1hcmstcGFyc2UnXG4gKiBAaW1wb3J0IHt9IGZyb20gJ3JlbWFyay1zdHJpbmdpZnknXG4gKiBAaW1wb3J0IHtQcm9jZXNzb3J9IGZyb20gJ3VuaWZpZWQnXG4gKi9cblxuaW1wb3J0IHtnZm1Gcm9tTWFya2Rvd24sIGdmbVRvTWFya2Rvd259IGZyb20gJ21kYXN0LXV0aWwtZ2ZtJ1xuaW1wb3J0IHtnZm19IGZyb20gJ21pY3JvbWFyay1leHRlbnNpb24tZ2ZtJ1xuXG4vKiogQHR5cGUge09wdGlvbnN9ICovXG5jb25zdCBlbXB0eU9wdGlvbnMgPSB7fVxuXG4vKipcbiAqIEFkZCBzdXBwb3J0IEdGTSAoYXV0b2xpbmsgbGl0ZXJhbHMsIGZvb3Rub3Rlcywgc3RyaWtldGhyb3VnaCwgdGFibGVzLFxuICogdGFza2xpc3RzKS5cbiAqXG4gKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqICAgTm90aGluZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtYXJrR2ZtKG9wdGlvbnMpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgaXMgd3JvbmcgYWJvdXQgYHRoaXNgLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10aGlzLWFzc2lnbm1lbnRcbiAgY29uc3Qgc2VsZiA9IC8qKiBAdHlwZSB7UHJvY2Vzc29yPFJvb3Q+fSAqLyAodGhpcylcbiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uc1xuICBjb25zdCBkYXRhID0gc2VsZi5kYXRhKClcblxuICBjb25zdCBtaWNyb21hcmtFeHRlbnNpb25zID1cbiAgICBkYXRhLm1pY3JvbWFya0V4dGVuc2lvbnMgfHwgKGRhdGEubWljcm9tYXJrRXh0ZW5zaW9ucyA9IFtdKVxuICBjb25zdCBmcm9tTWFya2Rvd25FeHRlbnNpb25zID1cbiAgICBkYXRhLmZyb21NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGEuZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyA9IFtdKVxuICBjb25zdCB0b01hcmtkb3duRXh0ZW5zaW9ucyA9XG4gICAgZGF0YS50b01hcmtkb3duRXh0ZW5zaW9ucyB8fCAoZGF0YS50b01hcmtkb3duRXh0ZW5zaW9ucyA9IFtdKVxuXG4gIG1pY3JvbWFya0V4dGVuc2lvbnMucHVzaChnZm0oc2V0dGluZ3MpKVxuICBmcm9tTWFya2Rvd25FeHRlbnNpb25zLnB1c2goZ2ZtRnJvbU1hcmtkb3duKCkpXG4gIHRvTWFya2Rvd25FeHRlbnNpb25zLnB1c2goZ2ZtVG9NYXJrZG93bihzZXR0aW5ncykpXG59XG4iLCAiLy8gTm90ZTogdHlwZXMgZXhwb3NlZCBmcm9tIGBpbmRleC5kLnRzYC5cbmV4cG9ydCB7ZGVmYXVsdH0gZnJvbSAnLi9saWIvaW5kZXguanMnXG4iLCAiLyoqXG4gKiBXaGlsZSBtaWNyb21hcmsgaXMgYSBsZXhlci90b2tlbml6ZXIsIHRoZSBjb21tb24gY2FzZSBvZiBnb2luZyBmcm9tIG1hcmtkb3duXG4gKiB0byBodG1sIGlzIGN1cnJlbnRseSBidWlsdCBpbiBhcyB0aGlzIG1vZHVsZSwgZXZlbiB0aG91Z2ggdGhlIHBhcnRzIGNhbiBiZVxuICogdXNlZCBzZXBhcmF0ZWx5IHRvIGJ1aWxkIEFTVHMsIENTVHMsIG9yIG1hbnkgb3RoZXIgb3V0cHV0IGZvcm1hdHMuXG4gKlxuICogSGF2aW5nIGFuIEhUTUwgY29tcGlsZXIgYnVpbHQgaW4gaXMgdXNlZnVsIGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIGNoZWNrIGZvclxuICogY29tcGxpYW5jeSB0byBDb21tb25NYXJrLCB0aGUgZGUgZmFjdG8gbm9ybSBvZiBtYXJrZG93biwgc3BlY2lmaWVkIGluIHJvdWdobHlcbiAqIDYwMCBpbnB1dC9vdXRwdXQgY2FzZXMuXG4gKlxuICogVGhpcyBtb2R1bGUgaGFzIGFuIGludGVyZmFjZSB0aGF0IGFjY2VwdHMgbGlzdHMgb2YgZXZlbnRzIGluc3RlYWQgb2YgdGhlXG4gKiB3aG9sZSBhdCBvbmNlLCBob3dldmVyLCBiZWNhdXNlIG1hcmtkb3duIGNhblx1MjAxOXQgYmUgdHJ1bHkgc3RyZWFtaW5nLCB3ZSBidWZmZXJcbiAqIGV2ZW50cyBiZWZvcmUgcHJvY2Vzc2luZyBhbmQgb3V0cHV0dGluZyB0aGUgZmluYWwgcmVzdWx0LlxuICovXG5cbi8qKlxuICogQGltcG9ydCB7XG4gKiAgIENvbXBpbGVDb250ZXh0LFxuICogICBDb21waWxlRGF0YSxcbiAqICAgQ29tcGlsZU9wdGlvbnMsXG4gKiAgIENvbXBpbGUsXG4gKiAgIERlZmluaXRpb24sXG4gKiAgIEV2ZW50LFxuICogICBIYW5kbGUsXG4gKiAgIEh0bWxFeHRlbnNpb24sXG4gKiAgIExpbmVFbmRpbmcsXG4gKiAgIE5vcm1hbGl6ZWRIdG1sRXh0ZW5zaW9uLFxuICogICBUb2tlblxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1lZGlhXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCB1bmRlZmluZWR9IFtpbWFnZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBbbGFiZWxJZF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBbbGFiZWxdXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gW3JlZmVyZW5jZUlkXVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWR9IFtkZXN0aW5hdGlvbl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBbdGl0bGVdXG4gKi9cblxuaW1wb3J0IHsgZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UgfSBmcm9tICdkZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBwdXNoIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2h1bmtlZCc7XG5pbXBvcnQgeyBjb21iaW5lSHRtbEV4dGVuc2lvbnMgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jb21iaW5lLWV4dGVuc2lvbnMnO1xuaW1wb3J0IHsgZGVjb2RlTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSB9IGZyb20gJ21pY3JvbWFyay11dGlsLWRlY29kZS1udW1lcmljLWNoYXJhY3Rlci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZW5jb2RlIGFzIF9lbmNvZGUgfSBmcm9tICdtaWNyb21hcmstdXRpbC1lbmNvZGUnO1xuaW1wb3J0IHsgbm9ybWFsaXplSWRlbnRpZmllciB9IGZyb20gJ21pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyJztcbmltcG9ydCB7IHNhbml0aXplVXJpIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpJztcbmNvbnN0IGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlc2UgdHdvIGFyZSBhbGxvd2xpc3RzIG9mIHNhZmUgcHJvdG9jb2xzIGZvciBmdWxsIFVSTHMgaW4gcmVzcGVjdGl2ZWx5IHRoZVxuICogYGhyZWZgIChvbiBgPGE+YCkgYW5kIGBzcmNgIChvbiBgPGltZz5gKSBhdHRyaWJ1dGVzLlxuICogVGhleSBhcmUgYmFzZWQgb24gd2hhdCBpcyBhbGxvd2VkIG9uIEdpdEh1YixcbiAqIDxodHRwczovL2dpdGh1Yi5jb20vc3ludGF4LXRyZWUvaGFzdC11dGlsLXNhbml0aXplL2Jsb2IvOTI3NWIyMS9saWIvZ2l0aHViLmpzb24jTDMxPlxuICovXG5jb25zdCBwcm90b2NvbEhyZWYgPSAvXihodHRwcz98aXJjcz98bWFpbHRvfHhtcHApJC9pO1xuY29uc3QgcHJvdG9jb2xTb3VyY2UgPSAvXmh0dHBzPyQvaTtcblxuLyoqXG4gKiBAcGFyYW0ge0NvbXBpbGVPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7Q29tcGlsZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUob3B0aW9ucykge1xuICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307XG5cbiAgLyoqXG4gICAqIFRhZ3MgaXMgbmVlZGVkIGJlY2F1c2UgYWNjb3JkaW5nIHRvIG1hcmtkb3duLCBsaW5rcyBhbmQgZW1waGFzaXMgYW5kXG4gICAqIHdoYXRub3QgY2FuIGV4aXN0IGluIGltYWdlcywgaG93ZXZlciwgYXMgSFRNTCBkb2Vzblx1MjAxOXQgYWxsb3cgY29udGVudCBpblxuICAgKiBpbWFnZXMsIHRoZSB0YWdzIGFyZSBpZ25vcmVkIGluIHRoZSBgYWx0YCBhdHRyaWJ1dGUsIGJ1dCB0aGUgY29udGVudFxuICAgKiByZW1haW5zLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH1cbiAgICovXG4gIGxldCB0YWdzID0gdHJ1ZTtcblxuICAvKipcbiAgICogQW4gb2JqZWN0IHRvIHRyYWNrIGlkZW50aWZpZXJzIHRvIG1lZGlhIChVUkxzIGFuZCB0aXRsZXMpIGRlZmluZWQgd2l0aFxuICAgKiBkZWZpbml0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIERlZmluaXRpb24+fVxuICAgKi9cbiAgY29uc3QgZGVmaW5pdGlvbnMgPSB7fTtcblxuICAvKipcbiAgICogQSBsb3Qgb2YgdGhlIGhhbmRsZXJzIG5lZWQgdG8gY2FwdHVyZSBzb21lIG9mIHRoZSBvdXRwdXQgZGF0YSwgbW9kaWZ5IGl0XG4gICAqIHNvbWVob3csIGFuZCB0aGVuIGRlYWwgd2l0aCBpdC5cbiAgICogV2UgZG8gdGhhdCBieSB0cmFja2luZyBhIHN0YWNrIG9mIGJ1ZmZlcnMsIHRoYXQgY2FuIGJlIG9wZW5lZCAod2l0aFxuICAgKiBgYnVmZmVyYCkgYW5kIGNsb3NlZCAod2l0aCBgcmVzdW1lYCkgdG8gYWNjZXNzIHRoZW0uXG4gICAqXG4gICAqIEB0eXBlIHtBcnJheTxBcnJheTxzdHJpbmc+Pn1cbiAgICovXG4gIGNvbnN0IGJ1ZmZlcnMgPSBbW11dO1xuXG4gIC8qKlxuICAgKiBBcyB3ZSBjYW4gaGF2ZSBsaW5rcyBpbiBpbWFnZXMgYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCB3aGVyZSB0aGUgZGVlcGVzdFxuICAgKiBvbmVzIGFyZSBjbG9zZWQgZmlyc3QsIHdlIG5lZWQgdG8gdHJhY2sgd2hpY2ggb25lIHdlXHUyMDE5cmUgaW4uXG4gICAqXG4gICAqIEB0eXBlIHtBcnJheTxNZWRpYT59XG4gICAqL1xuICBjb25zdCBtZWRpYVN0YWNrID0gW107XG5cbiAgLyoqXG4gICAqIFNhbWUgYXMgYG1lZGlhU3RhY2tgIGZvciB0aWdodG5lc3MsIHdoaWNoIGlzIHNwZWNpZmljIHRvIGxpc3RzLlxuICAgKiBXZSBuZWVkIHRvIHRyYWNrIGlmIHdlXHUyMDE5cmUgY3VycmVudGx5IGluIGEgdGlnaHQgb3IgbG9vc2UgY29udGFpbmVyLlxuICAgKlxuICAgKiBAdHlwZSB7QXJyYXk8Ym9vbGVhbj59XG4gICAqL1xuICBjb25zdCB0aWdodFN0YWNrID0gW107XG5cbiAgLyoqIEB0eXBlIHtIdG1sRXh0ZW5zaW9ufSAqL1xuICBjb25zdCBkZWZhdWx0SGFuZGxlcnMgPSB7XG4gICAgZW50ZXI6IHtcbiAgICAgIGJsb2NrUXVvdGU6IG9uZW50ZXJibG9ja3F1b3RlLFxuICAgICAgY29kZUZlbmNlZDogb25lbnRlcmNvZGVmZW5jZWQsXG4gICAgICBjb2RlRmVuY2VkRmVuY2VJbmZvOiBidWZmZXIsXG4gICAgICBjb2RlRmVuY2VkRmVuY2VNZXRhOiBidWZmZXIsXG4gICAgICBjb2RlSW5kZW50ZWQ6IG9uZW50ZXJjb2RlaW5kZW50ZWQsXG4gICAgICBjb2RlVGV4dDogb25lbnRlcmNvZGV0ZXh0LFxuICAgICAgY29udGVudDogb25lbnRlcmNvbnRlbnQsXG4gICAgICBkZWZpbml0aW9uOiBvbmVudGVyZGVmaW5pdGlvbixcbiAgICAgIGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzogb25lbnRlcmRlZmluaXRpb25kZXN0aW5hdGlvbnN0cmluZyxcbiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogYnVmZmVyLFxuICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBidWZmZXIsXG4gICAgICBlbXBoYXNpczogb25lbnRlcmVtcGhhc2lzLFxuICAgICAgaHRtbEZsb3c6IG9uZW50ZXJodG1sZmxvdyxcbiAgICAgIGh0bWxUZXh0OiBvbmVudGVyaHRtbCxcbiAgICAgIGltYWdlOiBvbmVudGVyaW1hZ2UsXG4gICAgICBsYWJlbDogYnVmZmVyLFxuICAgICAgbGluazogb25lbnRlcmxpbmssXG4gICAgICBsaXN0SXRlbU1hcmtlcjogb25lbnRlcmxpc3RpdGVtbWFya2VyLFxuICAgICAgbGlzdEl0ZW1WYWx1ZTogb25lbnRlcmxpc3RpdGVtdmFsdWUsXG4gICAgICBsaXN0T3JkZXJlZDogb25lbnRlcmxpc3RvcmRlcmVkLFxuICAgICAgbGlzdFVub3JkZXJlZDogb25lbnRlcmxpc3R1bm9yZGVyZWQsXG4gICAgICBwYXJhZ3JhcGg6IG9uZW50ZXJwYXJhZ3JhcGgsXG4gICAgICByZWZlcmVuY2U6IGJ1ZmZlcixcbiAgICAgIHJlc291cmNlOiBvbmVudGVycmVzb3VyY2UsXG4gICAgICByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOiBvbmVudGVycmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZyxcbiAgICAgIHJlc291cmNlVGl0bGVTdHJpbmc6IGJ1ZmZlcixcbiAgICAgIHNldGV4dEhlYWRpbmc6IG9uZW50ZXJzZXRleHRoZWFkaW5nLFxuICAgICAgc3Ryb25nOiBvbmVudGVyc3Ryb25nXG4gICAgfSxcbiAgICBleGl0OiB7XG4gICAgICBhdHhIZWFkaW5nOiBvbmV4aXRhdHhoZWFkaW5nLFxuICAgICAgYXR4SGVhZGluZ1NlcXVlbmNlOiBvbmV4aXRhdHhoZWFkaW5nc2VxdWVuY2UsXG4gICAgICBhdXRvbGlua0VtYWlsOiBvbmV4aXRhdXRvbGlua2VtYWlsLFxuICAgICAgYXV0b2xpbmtQcm90b2NvbDogb25leGl0YXV0b2xpbmtwcm90b2NvbCxcbiAgICAgIGJsb2NrUXVvdGU6IG9uZXhpdGJsb2NrcXVvdGUsXG4gICAgICBjaGFyYWN0ZXJFc2NhcGVWYWx1ZTogb25leGl0ZGF0YSxcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2VtYXJrZXIsXG4gICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2VtYXJrZXIsXG4gICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZTogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNldmFsdWUsXG4gICAgICBjb2RlRmVuY2VkOiBvbmV4aXRmbG93Y29kZSxcbiAgICAgIGNvZGVGZW5jZWRGZW5jZTogb25leGl0Y29kZWZlbmNlZGZlbmNlLFxuICAgICAgY29kZUZlbmNlZEZlbmNlSW5mbzogb25leGl0Y29kZWZlbmNlZGZlbmNlaW5mbyxcbiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IG9ucmVzdW1lZHJvcCxcbiAgICAgIGNvZGVGbG93VmFsdWU6IG9uZXhpdGNvZGVmbG93dmFsdWUsXG4gICAgICBjb2RlSW5kZW50ZWQ6IG9uZXhpdGZsb3djb2RlLFxuICAgICAgY29kZVRleHQ6IG9uZXhpdGNvZGV0ZXh0LFxuICAgICAgY29kZVRleHREYXRhOiBvbmV4aXRkYXRhLFxuICAgICAgZGF0YTogb25leGl0ZGF0YSxcbiAgICAgIGRlZmluaXRpb246IG9uZXhpdGRlZmluaXRpb24sXG4gICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IG9uZXhpdGRlZmluaXRpb25kZXN0aW5hdGlvbnN0cmluZyxcbiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nLFxuICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9udGl0bGVzdHJpbmcsXG4gICAgICBlbXBoYXNpczogb25leGl0ZW1waGFzaXMsXG4gICAgICBoYXJkQnJlYWtFc2NhcGU6IG9uZXhpdGhhcmRicmVhayxcbiAgICAgIGhhcmRCcmVha1RyYWlsaW5nOiBvbmV4aXRoYXJkYnJlYWssXG4gICAgICBodG1sRmxvdzogb25leGl0aHRtbCxcbiAgICAgIGh0bWxGbG93RGF0YTogb25leGl0ZGF0YSxcbiAgICAgIGh0bWxUZXh0OiBvbmV4aXRodG1sLFxuICAgICAgaHRtbFRleHREYXRhOiBvbmV4aXRkYXRhLFxuICAgICAgaW1hZ2U6IG9uZXhpdG1lZGlhLFxuICAgICAgbGFiZWw6IG9uZXhpdGxhYmVsLFxuICAgICAgbGFiZWxUZXh0OiBvbmV4aXRsYWJlbHRleHQsXG4gICAgICBsaW5lRW5kaW5nOiBvbmV4aXRsaW5lZW5kaW5nLFxuICAgICAgbGluazogb25leGl0bWVkaWEsXG4gICAgICBsaXN0T3JkZXJlZDogb25leGl0bGlzdG9yZGVyZWQsXG4gICAgICBsaXN0VW5vcmRlcmVkOiBvbmV4aXRsaXN0dW5vcmRlcmVkLFxuICAgICAgcGFyYWdyYXBoOiBvbmV4aXRwYXJhZ3JhcGgsXG4gICAgICByZWZlcmVuY2U6IG9ucmVzdW1lZHJvcCxcbiAgICAgIHJlZmVyZW5jZVN0cmluZzogb25leGl0cmVmZXJlbmNlc3RyaW5nLFxuICAgICAgcmVzb3VyY2U6IG9ucmVzdW1lZHJvcCxcbiAgICAgIHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6IG9uZXhpdHJlc291cmNlZGVzdGluYXRpb25zdHJpbmcsXG4gICAgICByZXNvdXJjZVRpdGxlU3RyaW5nOiBvbmV4aXRyZXNvdXJjZXRpdGxlc3RyaW5nLFxuICAgICAgc2V0ZXh0SGVhZGluZzogb25leGl0c2V0ZXh0aGVhZGluZyxcbiAgICAgIHNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2U6IG9uZXhpdHNldGV4dGhlYWRpbmdsaW5lc2VxdWVuY2UsXG4gICAgICBzZXRleHRIZWFkaW5nVGV4dDogb25leGl0c2V0ZXh0aGVhZGluZ3RleHQsXG4gICAgICBzdHJvbmc6IG9uZXhpdHN0cm9uZyxcbiAgICAgIHRoZW1hdGljQnJlYWs6IG9uZXhpdHRoZW1hdGljYnJlYWtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbWJpbmUgdGhlIEhUTUwgZXh0ZW5zaW9ucyB3aXRoIHRoZSBkZWZhdWx0IGhhbmRsZXJzLlxuICAgKiBBbiBIVE1MIGV4dGVuc2lvbiBpcyBhbiBvYmplY3Qgd2hvc2UgZmllbGRzIGFyZSBlaXRoZXIgYGVudGVyYCBvciBgZXhpdGBcbiAgICogKHJlZmxlY3Rpbmcgd2hldGhlciBhIHRva2VuIGlzIGVudGVyZWQgb3IgZXhpdGVkKS5cbiAgICogVGhlIHZhbHVlcyBhdCBzdWNoIG9iamVjdHMgYXJlIG5hbWVzIG9mIHRva2VucyBtYXBwaW5nIHRvIGhhbmRsZXJzLlxuICAgKiBIYW5kbGVycyBhcmUgY2FsbGVkLCByZXNwZWN0aXZlbHkgd2hlbiBhIHRva2VuIGlzIG9wZW5lciBvciBjbG9zZWQsIHdpdGhcbiAgICogdGhhdCB0b2tlbiwgYW5kIGEgY29udGV4dCBhcyBgdGhpc2AuXG4gICAqL1xuICBjb25zdCBoYW5kbGVycyA9IC8qKiBAdHlwZSB7Tm9ybWFsaXplZEh0bWxFeHRlbnNpb259ICovXG4gIGNvbWJpbmVIdG1sRXh0ZW5zaW9ucyhbZGVmYXVsdEhhbmRsZXJzLCAuLi4oc2V0dGluZ3MuaHRtbEV4dGVuc2lvbnMgfHwgW10pXSk7XG5cbiAgLyoqXG4gICAqIEhhbmRsZXJzIGRvIG9mdGVuIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBzb21lIHN0YXRlLlxuICAgKiBUaGF0IHN0YXRlIGlzIHByb3ZpZGVkIGhlcmUgYXMgYSBrZXktdmFsdWUgc3RvcmUgKGFuIG9iamVjdCkuXG4gICAqXG4gICAqIEB0eXBlIHtDb21waWxlRGF0YX1cbiAgICovXG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgZGVmaW5pdGlvbnMsXG4gICAgdGlnaHRTdGFja1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBmb3IgaGFuZGxlcnMgcmVmZXJlbmNlcyBhIGNvdXBsZSBvZiB1c2VmdWwgZnVuY3Rpb25zLlxuICAgKiBJbiBoYW5kbGVycyBmcm9tIGV4dGVuc2lvbnMsIHRob3NlIGNhbiBiZSBhY2Nlc3NlZCBhdCBgdGhpc2AuXG4gICAqIEZvciB0aGUgaGFuZGxlcnMgaGVyZSwgdGhleSBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkuXG4gICAqXG4gICAqIEB0eXBlIHtPbWl0PENvbXBpbGVDb250ZXh0LCAnc2xpY2VTZXJpYWxpemUnPn1cbiAgICovXG4gIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgYnVmZmVyLFxuICAgIGVuY29kZSxcbiAgICBnZXREYXRhLFxuICAgIGxpbmVFbmRpbmdJZk5lZWRlZCxcbiAgICBvcHRpb25zOiBzZXR0aW5ncyxcbiAgICByYXcsXG4gICAgcmVzdW1lLFxuICAgIHNldERhdGEsXG4gICAgdGFnXG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYWxseSwgbWljcm9tYXJrIGNvcGllcyBsaW5lIGVuZGluZ3MgKGAnXFxyJ2AsIGAnXFxuJ2AsIGAnXFxyXFxuJ2ApIGluIHRoZVxuICAgKiBtYXJrZG93biBkb2N1bWVudCBvdmVyIHRvIHRoZSBjb21waWxlZCBIVE1MLlxuICAgKiBJbiBzb21lIGNhc2VzLCBzdWNoIGFzIGA+IGFgLCBDb21tb25NYXJrIHJlcXVpcmVzIHRoYXQgZXh0cmEgbGluZSBlbmRpbmdzXG4gICAqIGFyZSBhZGRlZDogYDxibG9ja3F1b3RlPlxcbjxwPmE8L3A+XFxuPC9ibG9ja3F1b3RlPmAuXG4gICAqIFRoaXMgdmFyaWFibGUgaG9sZCB0aGUgZGVmYXVsdCBsaW5lIGVuZGluZyB3aGVuIGdpdmVuIChvciBgdW5kZWZpbmVkYCksXG4gICAqIGFuZCBpbiB0aGUgbGF0dGVyIGNhc2Ugd2lsbCBiZSB1cGRhdGVkIHRvIHRoZSBmaXJzdCBmb3VuZCBsaW5lIGVuZGluZyBpZlxuICAgKiB0aGVyZSBpcyBvbmUuXG4gICAqL1xuICBsZXQgbGluZUVuZGluZ1N0eWxlID0gc2V0dGluZ3MuZGVmYXVsdExpbmVFbmRpbmc7XG5cbiAgLy8gUmV0dXJuIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYSBzbGljZSBvZiBldmVudHMuXG4gIHJldHVybiBjb21waWxlO1xuXG4gIC8qKlxuICAgKiBEZWFsIHcvIGEgc2xpY2Ugb2YgZXZlbnRzLlxuICAgKiBSZXR1cm4gZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlcmVcdTIwMTlzIG5vdGhpbmcgb2Ygbm90ZSB0byByZXR1cm4sIG9yIHRoZVxuICAgKiByZXN1bHQgd2hlbiBkb25lLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWRvbmx5QXJyYXk8RXZlbnQ+fSBldmVudHNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBpbGUoZXZlbnRzKSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICAvKiogQHR5cGUge0FycmF5PG51bWJlcj59ICovXG4gICAgY29uc3QgbGlzdFN0YWNrID0gW107XG4gICAgLy8gQXMgZGVmaW5pdGlvbnMgY2FuIGNvbWUgYWZ0ZXIgcmVmZXJlbmNlcywgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtZWRpYVxuICAgIC8vICh1cmxzIGFuZCB0aXRsZXMpIGRlZmluZWQgYnkgdGhlbSBiZWZvcmUgaGFuZGxpbmcgdGhlIHJlZmVyZW5jZXMuXG4gICAgLy8gU28sIHdlIGRvIHNvcnQgb2Ygd2hhdCBIVE1MIGRvZXM6IHB1dCBtZXRhZGF0YSBhdCB0aGUgc3RhcnQgKGluIGhlYWQpLCBhbmRcbiAgICAvLyB0aGVuIHB1dCBjb250ZW50IGFmdGVyIChgYm9keWApLlxuICAgIC8qKiBAdHlwZSB7QXJyYXk8RXZlbnQ+fSAqL1xuICAgIGxldCBoZWFkID0gW107XG4gICAgLyoqIEB0eXBlIHtBcnJheTxFdmVudD59ICovXG4gICAgbGV0IGJvZHkgPSBbXTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGV2ZW50cy5sZW5ndGgpIHtcbiAgICAgIC8vIEZpZ3VyZSBvdXQgdGhlIGxpbmUgZW5kaW5nIHN0eWxlIHVzZWQgaW4gdGhlIGRvY3VtZW50LlxuICAgICAgaWYgKCFsaW5lRW5kaW5nU3R5bGUgJiYgKGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gXCJsaW5lRW5kaW5nXCIgfHwgZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSBcImxpbmVFbmRpbmdCbGFua1wiKSkge1xuICAgICAgICBsaW5lRW5kaW5nU3R5bGUgPSAvKiogQHR5cGUge0xpbmVFbmRpbmd9ICovXG4gICAgICAgIGV2ZW50c1tpbmRleF1bMl0uc2xpY2VTZXJpYWxpemUoZXZlbnRzW2luZGV4XVsxXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXByb2Nlc3MgbGlzdHMgdG8gaW5mZXIgd2hldGhlciB0aGUgbGlzdCBpcyBsb29zZSBvciBub3QuXG4gICAgICBpZiAoZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSBcImxpc3RPcmRlcmVkXCIgfHwgZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSBcImxpc3RVbm9yZGVyZWRcIikge1xuICAgICAgICBpZiAoZXZlbnRzW2luZGV4XVswXSA9PT0gJ2VudGVyJykge1xuICAgICAgICAgIGxpc3RTdGFjay5wdXNoKGluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmVwYXJlTGlzdChldmVudHMuc2xpY2UobGlzdFN0YWNrLnBvcCgpLCBpbmRleCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE1vdmUgZGVmaW5pdGlvbnMgdG8gdGhlIGZyb250LlxuICAgICAgaWYgKGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gXCJkZWZpbml0aW9uXCIpIHtcbiAgICAgICAgaWYgKGV2ZW50c1tpbmRleF1bMF0gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICBib2R5ID0gcHVzaChib2R5LCBldmVudHMuc2xpY2Uoc3RhcnQsIGluZGV4KSk7XG4gICAgICAgICAgc3RhcnQgPSBpbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoZWFkID0gcHVzaChoZWFkLCBldmVudHMuc2xpY2Uoc3RhcnQsIGluZGV4ICsgMSkpO1xuICAgICAgICAgIHN0YXJ0ID0gaW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGhlYWQgPSBwdXNoKGhlYWQsIGJvZHkpO1xuICAgIGhlYWQgPSBwdXNoKGhlYWQsIGV2ZW50cy5zbGljZShzdGFydCkpO1xuICAgIGluZGV4ID0gLTE7XG4gICAgY29uc3QgcmVzdWx0ID0gaGVhZDtcblxuICAgIC8vIEhhbmRsZSB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LCBpZiBkZWZpbmVkLlxuICAgIGlmIChoYW5kbGVycy5lbnRlci5udWxsKSB7XG4gICAgICBoYW5kbGVycy5lbnRlci5udWxsLmNhbGwoY29udGV4dCk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGFsbCBldmVudHMuXG4gICAgd2hpbGUgKCsraW5kZXggPCBldmVudHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBoYW5kbGVzID0gaGFuZGxlcnNbcmVzdWx0W2luZGV4XVswXV07XG4gICAgICBjb25zdCBraW5kID0gcmVzdWx0W2luZGV4XVsxXS50eXBlO1xuICAgICAgY29uc3QgaGFuZGxlID0gaGFuZGxlc1traW5kXTtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGhhbmRsZXMsIGtpbmQpICYmIGhhbmRsZSkge1xuICAgICAgICBoYW5kbGUuY2FsbCh7XG4gICAgICAgICAgc2xpY2VTZXJpYWxpemU6IHJlc3VsdFtpbmRleF1bMl0uc2xpY2VTZXJpYWxpemUsXG4gICAgICAgICAgLi4uY29udGV4dFxuICAgICAgICB9LCByZXN1bHRbaW5kZXhdWzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQsIGlmIGRlZmluZWQuXG4gICAgaWYgKGhhbmRsZXJzLmV4aXQubnVsbCkge1xuICAgICAgaGFuZGxlcnMuZXhpdC5udWxsLmNhbGwoY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBidWZmZXJzWzBdLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpZ3VyZSBvdXQgd2hldGhlciBsaXN0cyBhcmUgbG9vc2Ugb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWRvbmx5QXJyYXk8RXZlbnQ+fSBzbGljZVxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKi9cbiAgZnVuY3Rpb24gcHJlcGFyZUxpc3Qoc2xpY2UpIHtcbiAgICBjb25zdCBsZW5ndGggPSBzbGljZS5sZW5ndGg7XG4gICAgbGV0IGluZGV4ID0gMDsgLy8gU2tpcCBvcGVuLlxuICAgIGxldCBjb250YWluZXJCYWxhbmNlID0gMDtcbiAgICBsZXQgbG9vc2UgPSBmYWxzZTtcbiAgICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gICAgbGV0IGF0TWFya2VyO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBjb25zdCBldmVudCA9IHNsaWNlW2luZGV4XTtcbiAgICAgIGlmIChldmVudFsxXS5fY29udGFpbmVyKSB7XG4gICAgICAgIGF0TWFya2VyID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICBjb250YWluZXJCYWxhbmNlKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGFpbmVyQmFsYW5jZS0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Ugc3dpdGNoIChldmVudFsxXS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJsaXN0SXRlbVByZWZpeFwiOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChldmVudFswXSA9PT0gJ2V4aXQnKSB7XG4gICAgICAgICAgICAgIGF0TWFya2VyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcImxpbmVQcmVmaXhcIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBJZ25vcmVcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFwibGluZUVuZGluZ0JsYW5rXCI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGV2ZW50WzBdID09PSAnZW50ZXInICYmICFjb250YWluZXJCYWxhbmNlKSB7XG4gICAgICAgICAgICAgIGlmIChhdE1hcmtlcikge1xuICAgICAgICAgICAgICAgIGF0TWFya2VyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvb3NlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGF0TWFya2VyID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgc2xpY2VbMF1bMV0uX2xvb3NlID0gbG9vc2U7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge0NvbXBpbGVDb250ZXh0WydzZXREYXRhJ119XG4gICAqL1xuICBmdW5jdGlvbiBzZXREYXRhKGtleSwgdmFsdWUpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBhc3N1bWUgYHZhbHVlYCBpcyBvbWl0dGVkIChgdW5kZWZpbmVkYCBpcyBwYXNzZWQpIG9ubHlcbiAgICAvLyBpZiBhbGxvd2VkLlxuICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtDb21waWxlQ29udGV4dFsnZ2V0RGF0YSddfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RGF0YShrZXkpIHtcbiAgICByZXR1cm4gZGF0YVtrZXldO1xuICB9XG5cbiAgLyoqIEB0eXBlIHtDb21waWxlQ29udGV4dFsnYnVmZmVyJ119ICovXG4gIGZ1bmN0aW9uIGJ1ZmZlcigpIHtcbiAgICBidWZmZXJzLnB1c2goW10pO1xuICB9XG5cbiAgLyoqIEB0eXBlIHtDb21waWxlQ29udGV4dFsncmVzdW1lJ119ICovXG4gIGZ1bmN0aW9uIHJlc3VtZSgpIHtcbiAgICBjb25zdCBidWYgPSBidWZmZXJzLnBvcCgpO1xuICAgIHJldHVybiBidWYuam9pbignJyk7XG4gIH1cblxuICAvKiogQHR5cGUge0NvbXBpbGVDb250ZXh0Wyd0YWcnXX0gKi9cbiAgZnVuY3Rpb24gdGFnKHZhbHVlKSB7XG4gICAgaWYgKCF0YWdzKSByZXR1cm47XG4gICAgc2V0RGF0YSgnbGFzdFdhc1RhZycsIHRydWUpO1xuICAgIGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXS5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7Q29tcGlsZUNvbnRleHRbJ3JhdyddfSAqL1xuICBmdW5jdGlvbiByYXcodmFsdWUpIHtcbiAgICBzZXREYXRhKCdsYXN0V2FzVGFnJyk7XG4gICAgYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdLnB1c2godmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCBhbiBleHRyYSBsaW5lIGVuZGluZy5cbiAgICpcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGZ1bmN0aW9uIGxpbmVFbmRpbmcoKSB7XG4gICAgcmF3KGxpbmVFbmRpbmdTdHlsZSB8fCAnXFxuJyk7XG4gIH1cblxuICAvKiogQHR5cGUge0NvbXBpbGVDb250ZXh0WydsaW5lRW5kaW5nSWZOZWVkZWQnXX0gKi9cbiAgZnVuY3Rpb24gbGluZUVuZGluZ0lmTmVlZGVkKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBzbGljZSA9IGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgcHJldmlvdXMgPSBzbGljZSA/IHNsaWNlLmNoYXJDb2RlQXQoc2xpY2UubGVuZ3RoIC0gMSkgOiBudWxsO1xuICAgIGlmIChwcmV2aW91cyA9PT0gMTAgfHwgcHJldmlvdXMgPT09IDEzIHx8IHByZXZpb3VzID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxpbmVFbmRpbmcoKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7Q29tcGlsZUNvbnRleHRbJ2VuY29kZSddfSAqL1xuICBmdW5jdGlvbiBlbmNvZGUodmFsdWUpIHtcbiAgICByZXR1cm4gZ2V0RGF0YSgnaWdub3JlRW5jb2RlJykgPyB2YWx1ZSA6IF9lbmNvZGUodmFsdWUpO1xuICB9XG5cbiAgLy9cbiAgLy8gSGFuZGxlcnMuXG4gIC8vXG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiBvbnJlc3VtZWRyb3AoKSB7XG4gICAgcmVzdW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25lbnRlcmxpc3RvcmRlcmVkKHRva2VuKSB7XG4gICAgdGlnaHRTdGFjay5wdXNoKCF0b2tlbi5fbG9vc2UpO1xuICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpO1xuICAgIHRhZygnPG9sJyk7XG4gICAgc2V0RGF0YSgnZXhwZWN0Rmlyc3RJdGVtJywgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25lbnRlcmxpc3R1bm9yZGVyZWQodG9rZW4pIHtcbiAgICB0aWdodFN0YWNrLnB1c2goIXRva2VuLl9sb29zZSk7XG4gICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7XG4gICAgdGFnKCc8dWwnKTtcbiAgICBzZXREYXRhKCdleHBlY3RGaXJzdEl0ZW0nLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW12YWx1ZSh0b2tlbikge1xuICAgIGlmIChnZXREYXRhKCdleHBlY3RGaXJzdEl0ZW0nKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBOdW1iZXIucGFyc2VJbnQodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbiksIDEwKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gMSkge1xuICAgICAgICB0YWcoJyBzdGFydD1cIicgKyBlbmNvZGUoU3RyaW5nKHZhbHVlKSkgKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZW50ZXJsaXN0aXRlbW1hcmtlcigpIHtcbiAgICBpZiAoZ2V0RGF0YSgnZXhwZWN0Rmlyc3RJdGVtJykpIHtcbiAgICAgIHRhZygnPicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbmV4aXRsaXN0aXRlbSgpO1xuICAgIH1cbiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICB0YWcoJzxsaT4nKTtcbiAgICBzZXREYXRhKCdleHBlY3RGaXJzdEl0ZW0nKTtcbiAgICAvLyBcdTIwMUNIYWNrXHUyMDFEIHRvIHByZXZlbnQgYSBsaW5lIGVuZGluZyBmcm9tIHNob3dpbmcgdXAgaWYgdGhlIGl0ZW0gaXMgZW1wdHkuXG4gICAgc2V0RGF0YSgnbGFzdFdhc1RhZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRsaXN0b3JkZXJlZCgpIHtcbiAgICBvbmV4aXRsaXN0aXRlbSgpO1xuICAgIHRpZ2h0U3RhY2sucG9wKCk7XG4gICAgbGluZUVuZGluZygpO1xuICAgIHRhZygnPC9vbD4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0bGlzdHVub3JkZXJlZCgpIHtcbiAgICBvbmV4aXRsaXN0aXRlbSgpO1xuICAgIHRpZ2h0U3RhY2sucG9wKCk7XG4gICAgbGluZUVuZGluZygpO1xuICAgIHRhZygnPC91bD4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0bGlzdGl0ZW0oKSB7XG4gICAgaWYgKGdldERhdGEoJ2xhc3RXYXNUYWcnKSAmJiAhZ2V0RGF0YSgnc2x1cnBBbGxMaW5lRW5kaW5ncycpKSB7XG4gICAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICB9XG4gICAgdGFnKCc8L2xpPicpO1xuICAgIHNldERhdGEoJ3NsdXJwQWxsTGluZUVuZGluZ3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVyYmxvY2txdW90ZSgpIHtcbiAgICB0aWdodFN0YWNrLnB1c2goZmFsc2UpO1xuICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpO1xuICAgIHRhZygnPGJsb2NrcXVvdGU+Jyk7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0YmxvY2txdW90ZSgpIHtcbiAgICB0aWdodFN0YWNrLnBvcCgpO1xuICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpO1xuICAgIHRhZygnPC9ibG9ja3F1b3RlPicpO1xuICAgIHNldERhdGEoJ3NsdXJwQWxsTGluZUVuZGluZ3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVycGFyYWdyYXBoKCkge1xuICAgIGlmICghdGlnaHRTdGFja1t0aWdodFN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICAgIHRhZygnPHA+Jyk7XG4gICAgfVxuICAgIHNldERhdGEoJ3NsdXJwQWxsTGluZUVuZGluZ3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRwYXJhZ3JhcGgoKSB7XG4gICAgaWYgKHRpZ2h0U3RhY2tbdGlnaHRTdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgc2V0RGF0YSgnc2x1cnBBbGxMaW5lRW5kaW5ncycsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWcoJzwvcD4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25lbnRlcmNvZGVmZW5jZWQoKSB7XG4gICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7XG4gICAgdGFnKCc8cHJlPjxjb2RlJyk7XG4gICAgc2V0RGF0YSgnZmVuY2VzQ291bnQnLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VpbmZvKCkge1xuICAgIGNvbnN0IHZhbHVlID0gcmVzdW1lKCk7XG4gICAgdGFnKCcgY2xhc3M9XCJsYW5ndWFnZS0nICsgdmFsdWUgKyAnXCInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2UoKSB7XG4gICAgY29uc3QgY291bnQgPSBnZXREYXRhKCdmZW5jZXNDb3VudCcpIHx8IDA7XG4gICAgaWYgKCFjb3VudCkge1xuICAgICAgdGFnKCc+Jyk7XG4gICAgICBzZXREYXRhKCdzbHVycE9uZUxpbmVFbmRpbmcnLCB0cnVlKTtcbiAgICB9XG4gICAgc2V0RGF0YSgnZmVuY2VzQ291bnQnLCBjb3VudCArIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZW50ZXJjb2RlaW5kZW50ZWQoKSB7XG4gICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7XG4gICAgdGFnKCc8cHJlPjxjb2RlPicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGZsb3djb2RlKCkge1xuICAgIGNvbnN0IGNvdW50ID0gZ2V0RGF0YSgnZmVuY2VzQ291bnQnKTtcblxuICAgIC8vIE9uZSBzcGVjaWFsIGNhc2UgaXMgaWYgd2UgYXJlIGluc2lkZSBhIGNvbnRhaW5lciwgYW5kIHRoZSBmZW5jZWQgY29kZSB3YXNcbiAgICAvLyBub3QgY2xvc2VkIChtZWFuaW5nIGl0IHJ1bnMgdG8gdGhlIGVuZCkuXG4gICAgLy8gSW4gdGhhdCBjYXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgZW5kaW5nLCBpcyBjb25zaWRlcmVkICpvdXRzaWRlKiB0aGVcbiAgICAvLyBmZW5jZWQgY29kZSBhbmQgYmxvY2sgcXVvdGUgYnkgbWljcm9tYXJrLCBidXQgQ00gd2FudHMgdG8gdHJlYXQgdGhhdFxuICAgIC8vIGVuZGluZyBhcyBwYXJ0IG9mIHRoZSBjb2RlLlxuICAgIGlmIChjb3VudCAhPT0gdW5kZWZpbmVkICYmIGNvdW50IDwgMiAmJiBkYXRhLnRpZ2h0U3RhY2subGVuZ3RoID4gMCAmJiAhZ2V0RGF0YSgnbGFzdFdhc1RhZycpKSB7XG4gICAgICBsaW5lRW5kaW5nKCk7XG4gICAgfVxuXG4gICAgLy8gQnV0IGluIG1vc3QgY2FzZXMsIGl0XHUyMDE5cyBzaW1wbGVyOiB3aGVuIHdlXHUyMDE5dmUgc2VlbiBzb21lIGRhdGEsIGVtaXQgYW4gZXh0cmFcbiAgICAvLyBsaW5lIGVuZGluZyB3aGVuIG5lZWRlZC5cbiAgICBpZiAoZ2V0RGF0YSgnZmxvd0NvZGVTZWVuRGF0YScpKSB7XG4gICAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICB9XG4gICAgdGFnKCc8L2NvZGU+PC9wcmU+Jyk7XG4gICAgaWYgKGNvdW50ICE9PSB1bmRlZmluZWQgJiYgY291bnQgPCAyKSBsaW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICBzZXREYXRhKCdmbG93Q29kZVNlZW5EYXRhJyk7XG4gICAgc2V0RGF0YSgnZmVuY2VzQ291bnQnKTtcbiAgICBzZXREYXRhKCdzbHVycE9uZUxpbmVFbmRpbmcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVyaW1hZ2UoKSB7XG4gICAgbWVkaWFTdGFjay5wdXNoKHtcbiAgICAgIGltYWdlOiB0cnVlXG4gICAgfSk7XG4gICAgdGFncyA9IHVuZGVmaW5lZDsgLy8gRGlzYWxsb3cgdGFncy5cbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVybGluaygpIHtcbiAgICBtZWRpYVN0YWNrLnB1c2goe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGxhYmVsdGV4dCh0b2tlbikge1xuICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5sYWJlbElkID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0bGFiZWwoKSB7XG4gICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLmxhYmVsID0gcmVzdW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0cmVmZXJlbmNlc3RyaW5nKHRva2VuKSB7XG4gICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLnJlZmVyZW5jZUlkID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25lbnRlcnJlc291cmNlKCkge1xuICAgIGJ1ZmZlcigpOyAvLyBXZSBjYW4gaGF2ZSBsaW5lIGVuZGluZ3MgaW4gdGhlIHJlc291cmNlLCBpZ25vcmUgdGhlbS5cbiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0uZGVzdGluYXRpb24gPSAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVycmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZygpIHtcbiAgICBidWZmZXIoKTtcbiAgICAvLyBJZ25vcmUgZW5jb2RpbmcgdGhlIHJlc3VsdCwgYXMgd2VcdTIwMTlsbCBmaXJzdCBwZXJjZW50IGVuY29kZSB0aGUgdXJsIGFuZFxuICAgIC8vIGVuY29kZSBtYW51YWxseSBhZnRlci5cbiAgICBzZXREYXRhKCdpZ25vcmVFbmNvZGUnLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nKCkge1xuICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbiA9IHJlc3VtZSgpO1xuICAgIHNldERhdGEoJ2lnbm9yZUVuY29kZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdHJlc291cmNldGl0bGVzdHJpbmcoKSB7XG4gICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLnRpdGxlID0gcmVzdW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0bWVkaWEoKSB7XG4gICAgbGV0IGluZGV4ID0gbWVkaWFTdGFjay5sZW5ndGggLSAxOyAvLyBTa2lwIGN1cnJlbnQuXG4gICAgY29uc3QgbWVkaWEgPSBtZWRpYVN0YWNrW2luZGV4XTtcbiAgICBjb25zdCBpZCA9IG1lZGlhLnJlZmVyZW5jZUlkIHx8IG1lZGlhLmxhYmVsSWQ7XG4gICAgY29uc3QgY29udGV4dCA9IG1lZGlhLmRlc3RpbmF0aW9uID09PSB1bmRlZmluZWQgPyBkZWZpbml0aW9uc1tub3JtYWxpemVJZGVudGlmaWVyKGlkKV0gOiBtZWRpYTtcbiAgICB0YWdzID0gdHJ1ZTtcbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgaWYgKG1lZGlhU3RhY2tbaW5kZXhdLmltYWdlKSB7XG4gICAgICAgIHRhZ3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobWVkaWEuaW1hZ2UpIHtcbiAgICAgIHRhZygnPGltZyBzcmM9XCInICsgc2FuaXRpemVVcmkoY29udGV4dC5kZXN0aW5hdGlvbiwgc2V0dGluZ3MuYWxsb3dEYW5nZXJvdXNQcm90b2NvbCA/IHVuZGVmaW5lZCA6IHByb3RvY29sU291cmNlKSArICdcIiBhbHQ9XCInKTtcbiAgICAgIHJhdyhtZWRpYS5sYWJlbCk7XG4gICAgICB0YWcoJ1wiJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZygnPGEgaHJlZj1cIicgKyBzYW5pdGl6ZVVyaShjb250ZXh0LmRlc3RpbmF0aW9uLCBzZXR0aW5ncy5hbGxvd0Rhbmdlcm91c1Byb3RvY29sID8gdW5kZWZpbmVkIDogcHJvdG9jb2xIcmVmKSArICdcIicpO1xuICAgIH1cbiAgICB0YWcoY29udGV4dC50aXRsZSA/ICcgdGl0bGU9XCInICsgY29udGV4dC50aXRsZSArICdcIicgOiAnJyk7XG4gICAgaWYgKG1lZGlhLmltYWdlKSB7XG4gICAgICB0YWcoJyAvPicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWcoJz4nKTtcbiAgICAgIHJhdyhtZWRpYS5sYWJlbCk7XG4gICAgICB0YWcoJzwvYT4nKTtcbiAgICB9XG4gICAgbWVkaWFTdGFjay5wb3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVyZGVmaW5pdGlvbigpIHtcbiAgICBidWZmZXIoKTtcbiAgICBtZWRpYVN0YWNrLnB1c2goe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb25sYWJlbHN0cmluZyh0b2tlbikge1xuICAgIC8vIERpc2NhcmQgbGFiZWwsIHVzZSB0aGUgc291cmNlIGNvbnRlbnQgaW5zdGVhZC5cbiAgICByZXN1bWUoKTtcbiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0ubGFiZWxJZCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZW50ZXJkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcoKSB7XG4gICAgYnVmZmVyKCk7XG4gICAgc2V0RGF0YSgnaWdub3JlRW5jb2RlJywgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nKCkge1xuICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbiA9IHJlc3VtZSgpO1xuICAgIHNldERhdGEoJ2lnbm9yZUVuY29kZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb250aXRsZXN0cmluZygpIHtcbiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0udGl0bGUgPSByZXN1bWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRkZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IG1lZGlhID0gbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGlkID0gbm9ybWFsaXplSWRlbnRpZmllcihtZWRpYS5sYWJlbElkKTtcbiAgICByZXN1bWUoKTtcbiAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwoZGVmaW5pdGlvbnMsIGlkKSkge1xuICAgICAgZGVmaW5pdGlvbnNbaWRdID0gbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBtZWRpYVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZW50ZXJjb250ZW50KCkge1xuICAgIHNldERhdGEoJ3NsdXJwQWxsTGluZUVuZGluZ3MnLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRhdHhoZWFkaW5nc2VxdWVuY2UodG9rZW4pIHtcbiAgICAvLyBFeGl0IGZvciBmdXJ0aGVyIHNlcXVlbmNlcy5cbiAgICBpZiAoZ2V0RGF0YSgnaGVhZGluZ1JhbmsnKSkgcmV0dXJuO1xuICAgIHNldERhdGEoJ2hlYWRpbmdSYW5rJywgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikubGVuZ3RoKTtcbiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICB0YWcoJzxoJyArIGdldERhdGEoJ2hlYWRpbmdSYW5rJykgKyAnPicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZW50ZXJzZXRleHRoZWFkaW5nKCkge1xuICAgIGJ1ZmZlcigpO1xuICAgIHNldERhdGEoJ3NsdXJwQWxsTGluZUVuZGluZ3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5ndGV4dCgpIHtcbiAgICBzZXREYXRhKCdzbHVycEFsbExpbmVFbmRpbmdzJywgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0YXR4aGVhZGluZygpIHtcbiAgICB0YWcoJzwvaCcgKyBnZXREYXRhKCdoZWFkaW5nUmFuaycpICsgJz4nKTtcbiAgICBzZXREYXRhKCdoZWFkaW5nUmFuaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmdsaW5lc2VxdWVuY2UodG9rZW4pIHtcbiAgICBzZXREYXRhKCdoZWFkaW5nUmFuaycsIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLmNoYXJDb2RlQXQoMCkgPT09IDYxID8gMSA6IDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmcoKSB7XG4gICAgY29uc3QgdmFsdWUgPSByZXN1bWUoKTtcbiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICB0YWcoJzxoJyArIGdldERhdGEoJ2hlYWRpbmdSYW5rJykgKyAnPicpO1xuICAgIHJhdyh2YWx1ZSk7XG4gICAgdGFnKCc8L2gnICsgZ2V0RGF0YSgnaGVhZGluZ1JhbmsnKSArICc+Jyk7XG4gICAgc2V0RGF0YSgnc2x1cnBBbGxMaW5lRW5kaW5ncycpO1xuICAgIHNldERhdGEoJ2hlYWRpbmdSYW5rJyk7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0ZGF0YSh0b2tlbikge1xuICAgIHJhdyhlbmNvZGUodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRsaW5lZW5kaW5nKHRva2VuKSB7XG4gICAgaWYgKGdldERhdGEoJ3NsdXJwQWxsTGluZUVuZGluZ3MnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZ2V0RGF0YSgnc2x1cnBPbmVMaW5lRW5kaW5nJykpIHtcbiAgICAgIHNldERhdGEoJ3NsdXJwT25lTGluZUVuZGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZ2V0RGF0YSgnaW5Db2RlVGV4dCcpKSB7XG4gICAgICByYXcoJyAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmF3KGVuY29kZSh0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGNvZGVmbG93dmFsdWUodG9rZW4pIHtcbiAgICByYXcoZW5jb2RlKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKSk7XG4gICAgc2V0RGF0YSgnZmxvd0NvZGVTZWVuRGF0YScsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGhhcmRicmVhaygpIHtcbiAgICB0YWcoJzxiciAvPicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVyaHRtbGZsb3coKSB7XG4gICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7XG4gICAgb25lbnRlcmh0bWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0aHRtbCgpIHtcbiAgICBzZXREYXRhKCdpZ25vcmVFbmNvZGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKi9cbiAgZnVuY3Rpb24gb25lbnRlcmh0bWwoKSB7XG4gICAgaWYgKHNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzSHRtbCkge1xuICAgICAgc2V0RGF0YSgnaWdub3JlRW5jb2RlJywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVyZW1waGFzaXMoKSB7XG4gICAgdGFnKCc8ZW0+Jyk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZW50ZXJzdHJvbmcoKSB7XG4gICAgdGFnKCc8c3Ryb25nPicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVyY29kZXRleHQoKSB7XG4gICAgc2V0RGF0YSgnaW5Db2RlVGV4dCcsIHRydWUpO1xuICAgIHRhZygnPGNvZGU+Jyk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGNvZGV0ZXh0KCkge1xuICAgIHNldERhdGEoJ2luQ29kZVRleHQnKTtcbiAgICB0YWcoJzwvY29kZT4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0ZW1waGFzaXMoKSB7XG4gICAgdGFnKCc8L2VtPicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRzdHJvbmcoKSB7XG4gICAgdGFnKCc8L3N0cm9uZz4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0dGhlbWF0aWNicmVhaygpIHtcbiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTtcbiAgICB0YWcoJzxociAvPicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHBhcmFtIHtUb2tlbn0gdG9rZW5cbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcih0b2tlbikge1xuICAgIHNldERhdGEoJ2NoYXJhY3RlclJlZmVyZW5jZVR5cGUnLCB0b2tlbi50eXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSh0b2tlbikge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7XG4gICAgY29uc3QgZGVjb2RlZCA9IGdldERhdGEoJ2NoYXJhY3RlclJlZmVyZW5jZVR5cGUnKSA/IGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUsIGdldERhdGEoJ2NoYXJhY3RlclJlZmVyZW5jZVR5cGUnKSA9PT0gXCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljXCIgPyAxMCA6IDE2KSA6IGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlKTtcblxuICAgIC8vIGBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZWAgY2FuIHJldHVybiBgZmFsc2VgIGZvciBpbnZhbGlkIG5hbWVkXG4gICAgLy8gY2hhcmFjdGVyIHJlZmVyZW5jZXMsXG4gICAgLy8gYnV0IGV2ZXJ5dGhpbmcgd2VcdTIwMTl2ZSB0b2tlbml6ZWQgaXMgdmFsaWQuXG4gICAgcmF3KGVuY29kZSgvKiogQHR5cGUge3N0cmluZ30gKi9kZWNvZGVkKSk7XG4gICAgc2V0RGF0YSgnY2hhcmFjdGVyUmVmZXJlbmNlVHlwZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGF1dG9saW5rcHJvdG9jb2wodG9rZW4pIHtcbiAgICBjb25zdCB1cmkgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTtcbiAgICB0YWcoJzxhIGhyZWY9XCInICsgc2FuaXRpemVVcmkodXJpLCBzZXR0aW5ncy5hbGxvd0Rhbmdlcm91c1Byb3RvY29sID8gdW5kZWZpbmVkIDogcHJvdG9jb2xIcmVmKSArICdcIj4nKTtcbiAgICByYXcoZW5jb2RlKHVyaSkpO1xuICAgIHRhZygnPC9hPicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGF1dG9saW5rZW1haWwodG9rZW4pIHtcbiAgICBjb25zdCB1cmkgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTtcbiAgICB0YWcoJzxhIGhyZWY9XCInICsgc2FuaXRpemVVcmkoJ21haWx0bzonICsgdXJpKSArICdcIj4nKTtcbiAgICByYXcoZW5jb2RlKHVyaSkpO1xuICAgIHRhZygnPC9hPicpO1xuICB9XG59IiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIEluaXRpYWxDb25zdHJ1Y3QsXG4gKiAgIEluaXRpYWxpemVyLFxuICogICBTdGF0ZSxcbiAqICAgVG9rZW5pemVDb250ZXh0LFxuICogICBUb2tlblxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBmYWN0b3J5U3BhY2UgfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSc7XG5pbXBvcnQgeyBtYXJrZG93bkxpbmVFbmRpbmcgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuLyoqIEB0eXBlIHtJbml0aWFsQ29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGNvbnRlbnQgPSB7XG4gIHRva2VuaXplOiBpbml0aWFsaXplQ29udGVudFxufTtcblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBDb250ZXh0LlxuICogQHR5cGUge0luaXRpYWxpemVyfVxuICogICBDb250ZW50LlxuICovXG5mdW5jdGlvbiBpbml0aWFsaXplQ29udGVudChlZmZlY3RzKSB7XG4gIGNvbnN0IGNvbnRlbnRTdGFydCA9IGVmZmVjdHMuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmNvbnRlbnRJbml0aWFsLCBhZnRlckNvbnRlbnRTdGFydENvbnN0cnVjdCwgcGFyYWdyYXBoSW5pdGlhbCk7XG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGxldCBwcmV2aW91cztcbiAgcmV0dXJuIGNvbnRlbnRTdGFydDtcblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBhZnRlckNvbnRlbnRTdGFydENvbnN0cnVjdChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWZmZWN0cy5lbnRlcihcImxpbmVFbmRpbmdcIik7XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIGVmZmVjdHMuZXhpdChcImxpbmVFbmRpbmdcIik7XG4gICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBjb250ZW50U3RhcnQsIFwibGluZVByZWZpeFwiKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHBhcmFncmFwaEluaXRpYWwoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoXCJwYXJhZ3JhcGhcIik7XG4gICAgcmV0dXJuIGxpbmVTdGFydChjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGxpbmVTdGFydChjb2RlKSB7XG4gICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmVudGVyKFwiY2h1bmtUZXh0XCIsIHtcbiAgICAgIGNvbnRlbnRUeXBlOiBcInRleHRcIixcbiAgICAgIHByZXZpb3VzXG4gICAgfSk7XG4gICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICBwcmV2aW91cy5uZXh0ID0gdG9rZW47XG4gICAgfVxuICAgIHByZXZpb3VzID0gdG9rZW47XG4gICAgcmV0dXJuIGRhdGEoY29kZSk7XG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBkYXRhKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgZWZmZWN0cy5leGl0KFwiY2h1bmtUZXh0XCIpO1xuICAgICAgZWZmZWN0cy5leGl0KFwicGFyYWdyYXBoXCIpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICBlZmZlY3RzLmV4aXQoXCJjaHVua1RleHRcIik7XG4gICAgICByZXR1cm4gbGluZVN0YXJ0O1xuICAgIH1cblxuICAgIC8vIERhdGEuXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG59IiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIENvbnN0cnVjdCxcbiAqICAgQ29udGFpbmVyU3RhdGUsXG4gKiAgIEluaXRpYWxDb25zdHJ1Y3QsXG4gKiAgIEluaXRpYWxpemVyLFxuICogICBQb2ludCxcbiAqICAgU3RhdGUsXG4gKiAgIFRva2VuaXplQ29udGV4dCxcbiAqICAgVG9rZW5pemVyLFxuICogICBUb2tlblxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtbQ29uc3RydWN0LCBDb250YWluZXJTdGF0ZV19IFN0YWNrSXRlbVxuICogICBDb25zdHJ1Y3QgYW5kIGl0cyBzdGF0ZS5cbiAqL1xuXG5pbXBvcnQgeyBmYWN0b3J5U3BhY2UgfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSc7XG5pbXBvcnQgeyBtYXJrZG93bkxpbmVFbmRpbmcgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInO1xuaW1wb3J0IHsgc3BsaWNlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2h1bmtlZCc7XG4vKiogQHR5cGUge0luaXRpYWxDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgZG9jdW1lbnQgPSB7XG4gIHRva2VuaXplOiBpbml0aWFsaXplRG9jdW1lbnRcbn07XG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuY29uc3QgY29udGFpbmVyQ29uc3RydWN0ID0ge1xuICB0b2tlbml6ZTogdG9rZW5pemVDb250YWluZXJcbn07XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqICAgU2VsZi5cbiAqIEB0eXBlIHtJbml0aWFsaXplcn1cbiAqICAgSW5pdGlhbGl6ZXIuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVEb2N1bWVudChlZmZlY3RzKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAvKiogQHR5cGUge0FycmF5PFN0YWNrSXRlbT59ICovXG4gIGNvbnN0IHN0YWNrID0gW107XG4gIGxldCBjb250aW51ZWQgPSAwO1xuICAvKiogQHR5cGUge1Rva2VuaXplQ29udGV4dCB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGNoaWxkRmxvdztcbiAgLyoqIEB0eXBlIHtUb2tlbiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGNoaWxkVG9rZW47XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBsZXQgbGluZVN0YXJ0T2Zmc2V0O1xuICByZXR1cm4gc3RhcnQ7XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIC8vIEZpcnN0IHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgb3BlbiBibG9ja3MsIHN0YXJ0aW5nIHdpdGggdGhlIHJvb3RcbiAgICAvLyBkb2N1bWVudCwgYW5kIGRlc2NlbmRpbmcgdGhyb3VnaCBsYXN0IGNoaWxkcmVuIGRvd24gdG8gdGhlIGxhc3Qgb3BlblxuICAgIC8vIGJsb2NrLlxuICAgIC8vIEVhY2ggYmxvY2sgaW1wb3NlcyBhIGNvbmRpdGlvbiB0aGF0IHRoZSBsaW5lIG11c3Qgc2F0aXNmeSBpZiB0aGUgYmxvY2sgaXNcbiAgICAvLyB0byByZW1haW4gb3Blbi5cbiAgICAvLyBGb3IgZXhhbXBsZSwgYSBibG9jayBxdW90ZSByZXF1aXJlcyBhIGA+YCBjaGFyYWN0ZXIuXG4gICAgLy8gQSBwYXJhZ3JhcGggcmVxdWlyZXMgYSBub24tYmxhbmsgbGluZS5cbiAgICAvLyBJbiB0aGlzIHBoYXNlIHdlIG1heSBtYXRjaCBhbGwgb3IganVzdCBzb21lIG9mIHRoZSBvcGVuIGJsb2Nrcy5cbiAgICAvLyBCdXQgd2UgY2Fubm90IGNsb3NlIHVubWF0Y2hlZCBibG9ja3MgeWV0LCBiZWNhdXNlIHdlIG1heSBoYXZlIGEgbGF6eVxuICAgIC8vIGNvbnRpbnVhdGlvbiBsaW5lLlxuICAgIGlmIChjb250aW51ZWQgPCBzdGFjay5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBzdGFja1tjb250aW51ZWRdO1xuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZSA9IGl0ZW1bMV07XG4gICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGl0ZW1bMF0uY29udGludWF0aW9uLCBkb2N1bWVudENvbnRpbnVlLCBjaGVja05ld0NvbnRhaW5lcnMpKGNvZGUpO1xuICAgIH1cblxuICAgIC8vIERvbmUuXG4gICAgcmV0dXJuIGNoZWNrTmV3Q29udGFpbmVycyhjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGRvY3VtZW50Q29udGludWUoY29kZSkge1xuICAgIGNvbnRpbnVlZCsrO1xuXG4gICAgLy8gTm90ZTogdGhpcyBmaWVsZCBpcyBjYWxsZWQgYF9jbG9zZUZsb3dgIGJ1dCBpdCBhbHNvIGNsb3NlcyBjb250YWluZXJzLlxuICAgIC8vIFBlcmhhcHMgYSBnb29kIGlkZWEgdG8gcmVuYW1lIGl0IGJ1dCBpdFx1MjAxOXMgYWxyZWFkeSB1c2VkIGluIHRoZSB3aWxkIGJ5XG4gICAgLy8gZXh0ZW5zaW9ucy5cbiAgICBpZiAoc2VsZi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93KSB7XG4gICAgICBzZWxmLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoY2hpbGRGbG93KSB7XG4gICAgICAgIGNsb3NlRmxvdygpO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3RlOiB0aGlzIGFsZ29yaXRobSBmb3IgbW92aW5nIGV2ZW50cyBhcm91bmQgaXMgc2ltaWxhciB0byB0aGVcbiAgICAgIC8vIGFsZ29yaXRobSB3aGVuIGRlYWxpbmcgd2l0aCBsYXp5IGxpbmVzIGluIGB3cml0ZVRvQ2hpbGRgLlxuICAgICAgY29uc3QgaW5kZXhCZWZvcmVFeGl0cyA9IHNlbGYuZXZlbnRzLmxlbmd0aDtcbiAgICAgIGxldCBpbmRleEJlZm9yZUZsb3cgPSBpbmRleEJlZm9yZUV4aXRzO1xuICAgICAgLyoqIEB0eXBlIHtQb2ludCB8IHVuZGVmaW5lZH0gKi9cbiAgICAgIGxldCBwb2ludDtcblxuICAgICAgLy8gRmluZCB0aGUgZmxvdyBjaHVuay5cbiAgICAgIHdoaWxlIChpbmRleEJlZm9yZUZsb3ctLSkge1xuICAgICAgICBpZiAoc2VsZi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVswXSA9PT0gJ2V4aXQnICYmIHNlbGYuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMV0udHlwZSA9PT0gXCJjaHVua0Zsb3dcIikge1xuICAgICAgICAgIHBvaW50ID0gc2VsZi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS5lbmQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4aXRDb250YWluZXJzKGNvbnRpbnVlZCk7XG5cbiAgICAgIC8vIEZpeCBwb3NpdGlvbnMuXG4gICAgICBsZXQgaW5kZXggPSBpbmRleEJlZm9yZUV4aXRzO1xuICAgICAgd2hpbGUgKGluZGV4IDwgc2VsZi5ldmVudHMubGVuZ3RoKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzW2luZGV4XVsxXS5lbmQgPSB7XG4gICAgICAgICAgLi4ucG9pbnRcbiAgICAgICAgfTtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cblxuICAgICAgLy8gSW5qZWN0IHRoZSBleGl0cyBlYXJsaWVyICh0aGV5XHUyMDE5cmUgc3RpbGwgYWxzbyBhdCB0aGUgZW5kKS5cbiAgICAgIHNwbGljZShzZWxmLmV2ZW50cywgaW5kZXhCZWZvcmVGbG93ICsgMSwgMCwgc2VsZi5ldmVudHMuc2xpY2UoaW5kZXhCZWZvcmVFeGl0cykpO1xuXG4gICAgICAvLyBEaXNjYXJkIHRoZSBkdXBsaWNhdGUgZXhpdHMuXG4gICAgICBzZWxmLmV2ZW50cy5sZW5ndGggPSBpbmRleDtcbiAgICAgIHJldHVybiBjaGVja05ld0NvbnRhaW5lcnMoY29kZSk7XG4gICAgfVxuICAgIHJldHVybiBzdGFydChjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGNoZWNrTmV3Q29udGFpbmVycyhjb2RlKSB7XG4gICAgLy8gTmV4dCwgYWZ0ZXIgY29uc3VtaW5nIHRoZSBjb250aW51YXRpb24gbWFya2VycyBmb3IgZXhpc3RpbmcgYmxvY2tzLCB3ZVxuICAgIC8vIGxvb2sgZm9yIG5ldyBibG9jayBzdGFydHMgKGUuZy4gYD5gIGZvciBhIGJsb2NrIHF1b3RlKS5cbiAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYSBuZXcgYmxvY2sgc3RhcnQsIHdlIGNsb3NlIGFueSBibG9ja3MgdW5tYXRjaGVkIGluXG4gICAgLy8gc3RlcCAxIGJlZm9yZSBjcmVhdGluZyB0aGUgbmV3IGJsb2NrIGFzIGEgY2hpbGQgb2YgdGhlIGxhc3QgbWF0Y2hlZFxuICAgIC8vIGJsb2NrLlxuICAgIGlmIChjb250aW51ZWQgPT09IHN0YWNrLmxlbmd0aCkge1xuICAgICAgLy8gTm8gbmVlZCB0byBgY2hlY2tgIHdoZXRoZXIgdGhlcmVcdTIwMTlzIGEgY29udGFpbmVyLCBvZiBgZXhpdENvbnRhaW5lcnNgXG4gICAgICAvLyB3b3VsZCBiZSBtb290LlxuICAgICAgLy8gV2UgY2FuIGluc3RlYWQgaW1tZWRpYXRlbHkgYGF0dGVtcHRgIHRvIHBhcnNlIG9uZS5cbiAgICAgIGlmICghY2hpbGRGbG93KSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudENvbnRpbnVlZChjb2RlKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgaGF2ZSBjb25jcmV0ZSBjb250ZW50LCBzdWNoIGFzIGJsb2NrIEhUTUwgb3IgZmVuY2VkIGNvZGUsXG4gICAgICAvLyB3ZSBjYW5cdTIwMTl0IGhhdmUgY29udGFpbmVycyBcdTIwMUNwaWVyY2VcdTIwMUQgaW50byB0aGVtLCBzbyB3ZSBjYW4gaW1tZWRpYXRlbHlcbiAgICAgIC8vIHN0YXJ0LlxuICAgICAgaWYgKGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0ICYmIGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0LmNvbmNyZXRlKSB7XG4gICAgICAgIHJldHVybiBmbG93U3RhcnQoY29kZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIGRvIGhhdmUgZmxvdywgaXQgY291bGQgc3RpbGwgYmUgYSBibGFuayBsaW5lLFxuICAgICAgLy8gYnV0IHdlXHUyMDE5ZCBiZSBpbnRlcnJ1cHRpbmcgaXQgdy8gYSBuZXcgY29udGFpbmVyIGlmIHRoZXJlXHUyMDE5cyBhIGN1cnJlbnRcbiAgICAgIC8vIGNvbnN0cnVjdC5cbiAgICAgIC8vIFRvIGRvOiBuZXh0IG1ham9yOiByZW1vdmUgYF9nZm1UYWJsZUR5bmFtaWNJbnRlcnJ1cHRIYWNrYCAobm8gbG9uZ2VyXG4gICAgICAvLyBuZWVkZWQgaW4gbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMS4wLjYpLlxuICAgICAgc2VsZi5pbnRlcnJ1cHQgPSBCb29sZWFuKGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0ICYmICFjaGlsZEZsb3cuX2dmbVRhYmxlRHluYW1pY0ludGVycnVwdEhhY2spO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgbmV3IGNvbnRhaW5lci5cbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlID0ge307XG4gICAgcmV0dXJuIGVmZmVjdHMuY2hlY2soY29udGFpbmVyQ29uc3RydWN0LCB0aGVyZUlzQU5ld0NvbnRhaW5lciwgdGhlcmVJc05vTmV3Q29udGFpbmVyKShjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHRoZXJlSXNBTmV3Q29udGFpbmVyKGNvZGUpIHtcbiAgICBpZiAoY2hpbGRGbG93KSBjbG9zZUZsb3coKTtcbiAgICBleGl0Q29udGFpbmVycyhjb250aW51ZWQpO1xuICAgIHJldHVybiBkb2N1bWVudENvbnRpbnVlZChjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHRoZXJlSXNOb05ld0NvbnRhaW5lcihjb2RlKSB7XG4gICAgc2VsZi5wYXJzZXIubGF6eVtzZWxmLm5vdygpLmxpbmVdID0gY29udGludWVkICE9PSBzdGFjay5sZW5ndGg7XG4gICAgbGluZVN0YXJ0T2Zmc2V0ID0gc2VsZi5ub3coKS5vZmZzZXQ7XG4gICAgcmV0dXJuIGZsb3dTdGFydChjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGRvY3VtZW50Q29udGludWVkKGNvZGUpIHtcbiAgICAvLyBUcnkgbmV3IGNvbnRhaW5lcnMuXG4gICAgc2VsZi5jb250YWluZXJTdGF0ZSA9IHt9O1xuICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoY29udGFpbmVyQ29uc3RydWN0LCBjb250YWluZXJDb250aW51ZSwgZmxvd1N0YXJ0KShjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGNvbnRhaW5lckNvbnRpbnVlKGNvZGUpIHtcbiAgICBjb250aW51ZWQrKztcbiAgICBzdGFjay5wdXNoKFtzZWxmLmN1cnJlbnRDb25zdHJ1Y3QsIHNlbGYuY29udGFpbmVyU3RhdGVdKTtcbiAgICAvLyBUcnkgYW5vdGhlci5cbiAgICByZXR1cm4gZG9jdW1lbnRDb250aW51ZWQoY29kZSk7XG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBmbG93U3RhcnQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGRGbG93KSBjbG9zZUZsb3coKTtcbiAgICAgIGV4aXRDb250YWluZXJzKDApO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjaGlsZEZsb3cgPSBjaGlsZEZsb3cgfHwgc2VsZi5wYXJzZXIuZmxvdyhzZWxmLm5vdygpKTtcbiAgICBlZmZlY3RzLmVudGVyKFwiY2h1bmtGbG93XCIsIHtcbiAgICAgIF90b2tlbml6ZXI6IGNoaWxkRmxvdyxcbiAgICAgIGNvbnRlbnRUeXBlOiBcImZsb3dcIixcbiAgICAgIHByZXZpb3VzOiBjaGlsZFRva2VuXG4gICAgfSk7XG4gICAgcmV0dXJuIGZsb3dDb250aW51ZShjb2RlKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGZsb3dDb250aW51ZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwpIHtcbiAgICAgIHdyaXRlVG9DaGlsZChlZmZlY3RzLmV4aXQoXCJjaHVua0Zsb3dcIiksIHRydWUpO1xuICAgICAgZXhpdENvbnRhaW5lcnMoMCk7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICAgIHdyaXRlVG9DaGlsZChlZmZlY3RzLmV4aXQoXCJjaHVua0Zsb3dcIikpO1xuICAgICAgLy8gR2V0IHJlYWR5IGZvciB0aGUgbmV4dCBsaW5lLlxuICAgICAgY29udGludWVkID0gMDtcbiAgICAgIHNlbGYuaW50ZXJydXB0ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHN0YXJ0O1xuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgcmV0dXJuIGZsb3dDb250aW51ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlblxuICAgKiAgIFRva2VuLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IFtlbmRPZkZpbGVdXG4gICAqICAgV2hldGhlciB0aGUgdG9rZW4gaXMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSAoZGVmYXVsdDogYGZhbHNlYCkuXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqICAgTm90aGluZy5cbiAgICovXG4gIGZ1bmN0aW9uIHdyaXRlVG9DaGlsZCh0b2tlbiwgZW5kT2ZGaWxlKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gc2VsZi5zbGljZVN0cmVhbSh0b2tlbik7XG4gICAgaWYgKGVuZE9mRmlsZSkgc3RyZWFtLnB1c2gobnVsbCk7XG4gICAgdG9rZW4ucHJldmlvdXMgPSBjaGlsZFRva2VuO1xuICAgIGlmIChjaGlsZFRva2VuKSBjaGlsZFRva2VuLm5leHQgPSB0b2tlbjtcbiAgICBjaGlsZFRva2VuID0gdG9rZW47XG4gICAgY2hpbGRGbG93LmRlZmluZVNraXAodG9rZW4uc3RhcnQpO1xuICAgIGNoaWxkRmxvdy53cml0ZShzdHJlYW0pO1xuXG4gICAgLy8gQWxyaWdodCwgc28gd2UganVzdCBhZGRlZCBhIGxhenkgbGluZTpcbiAgICAvL1xuICAgIC8vIGBgYG1hcmtkb3duXG4gICAgLy8gPiBhXG4gICAgLy8gYi5cbiAgICAvL1xuICAgIC8vIE9yOlxuICAgIC8vXG4gICAgLy8gPiB+fn5jXG4gICAgLy8gZFxuICAgIC8vXG4gICAgLy8gT3I6XG4gICAgLy9cbiAgICAvLyA+IHwgZSB8XG4gICAgLy8gZlxuICAgIC8vIGBgYFxuICAgIC8vXG4gICAgLy8gVGhlIGNvbnN0cnVjdCBpbiB0aGUgc2Vjb25kIGV4YW1wbGUgKGZlbmNlZCBjb2RlKSBkb2VzIG5vdCBhY2NlcHQgbGF6eVxuICAgIC8vIGxpbmVzLCBzbyBpdCBtYXJrZWQgaXRzZWxmIGFzIGRvbmUgYXQgdGhlIGVuZCBvZiBpdHMgZmlyc3QgbGluZSwgYW5kXG4gICAgLy8gdGhlbiB0aGUgY29udGVudCBjb25zdHJ1Y3QgcGFyc2VzIGBkYC5cbiAgICAvLyBNb3N0IGNvbnN0cnVjdHMgaW4gbWFya2Rvd24gbWF0Y2ggb24gdGhlIGZpcnN0IGxpbmU6IGlmIHRoZSBmaXJzdCBsaW5lXG4gICAgLy8gZm9ybXMgYSBjb25zdHJ1Y3QsIGEgbm9uLWxhenkgbGluZSBjYW5cdTIwMTl0IFx1MjAxQ3VubWFrZVx1MjAxRCBpdC5cbiAgICAvL1xuICAgIC8vIFRoZSBjb25zdHJ1Y3QgaW4gdGhlIHRoaXJkIGV4YW1wbGUgaXMgcG90ZW50aWFsbHkgYSBHRk0gdGFibGUsIGFuZFxuICAgIC8vIHRob3NlIGFyZSAqd2VpcmQqLlxuICAgIC8vIEl0ICpjb3VsZCogYmUgYSB0YWJsZSwgZnJvbSB0aGUgZmlyc3QgbGluZSwgaWYgdGhlIGZvbGxvd2luZyBsaW5lXG4gICAgLy8gbWF0Y2hlcyBhIGNvbmRpdGlvbi5cbiAgICAvLyBJbiB0aGlzIGNhc2UsIHRoYXQgc2Vjb25kIGxpbmUgaXMgbGF6eSwgd2hpY2ggXHUyMDFDdW5tYWtlc1x1MjAxRCB0aGUgZmlyc3QgbGluZVxuICAgIC8vIGFuZCB0dXJucyB0aGUgd2hvbGUgaW50byBvbmUgY29udGVudCBibG9jay5cbiAgICAvL1xuICAgIC8vIFdlXHUyMDE5dmUgbm93IHBhcnNlZCB0aGUgbm9uLWxhenkgYW5kIHRoZSBsYXp5IGxpbmUsIGFuZCBjYW4gZmlndXJlIG91dFxuICAgIC8vIHdoZXRoZXIgdGhlIGxhenkgbGluZSBzdGFydGVkIGEgbmV3IGZsb3cgYmxvY2suXG4gICAgLy8gSWYgaXQgZGlkLCB3ZSBleGl0IHRoZSBjdXJyZW50IGNvbnRhaW5lcnMgYmV0d2VlbiB0aGUgdHdvIGZsb3cgYmxvY2tzLlxuICAgIGlmIChzZWxmLnBhcnNlci5sYXp5W3Rva2VuLnN0YXJ0LmxpbmVdKSB7XG4gICAgICBsZXQgaW5kZXggPSBjaGlsZEZsb3cuZXZlbnRzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgLy8gVGhlIHRva2VuIHN0YXJ0cyBiZWZvcmUgdGhlIGxpbmUgZW5kaW5nXHUyMDI2XG4gICAgICAgIGNoaWxkRmxvdy5ldmVudHNbaW5kZXhdWzFdLnN0YXJ0Lm9mZnNldCA8IGxpbmVTdGFydE9mZnNldCAmJiAoXG4gICAgICAgIC8vIFx1MjAyNmFuZCBlaXRoZXIgaXMgbm90IGVuZGVkIHlldFx1MjAyNlxuICAgICAgICAhY2hpbGRGbG93LmV2ZW50c1tpbmRleF1bMV0uZW5kIHx8XG4gICAgICAgIC8vIFx1MjAyNm9yIGVuZHMgYWZ0ZXIgaXQuXG4gICAgICAgIGNoaWxkRmxvdy5ldmVudHNbaW5kZXhdWzFdLmVuZC5vZmZzZXQgPiBsaW5lU3RhcnRPZmZzZXQpKSB7XG4gICAgICAgICAgLy8gRXhpdDogdGhlcmVcdTIwMTlzIHN0aWxsIHNvbWV0aGluZyBvcGVuLCB3aGljaCBtZWFucyBpdFx1MjAxOXMgYSBsYXp5IGxpbmVcbiAgICAgICAgICAvLyBwYXJ0IG9mIHNvbWV0aGluZy5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm90ZTogdGhpcyBhbGdvcml0aG0gZm9yIG1vdmluZyBldmVudHMgYXJvdW5kIGlzIHNpbWlsYXIgdG8gdGhlXG4gICAgICAvLyBhbGdvcml0aG0gd2hlbiBjbG9zaW5nIGZsb3cgaW4gYGRvY3VtZW50Q29udGludWVgLlxuICAgICAgY29uc3QgaW5kZXhCZWZvcmVFeGl0cyA9IHNlbGYuZXZlbnRzLmxlbmd0aDtcbiAgICAgIGxldCBpbmRleEJlZm9yZUZsb3cgPSBpbmRleEJlZm9yZUV4aXRzO1xuICAgICAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHNlZW47XG4gICAgICAvKiogQHR5cGUge1BvaW50IHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHBvaW50O1xuXG4gICAgICAvLyBGaW5kIHRoZSBwcmV2aW91cyBjaHVuayAodGhlIG9uZSBiZWZvcmUgdGhlIGxhenkgbGluZSkuXG4gICAgICB3aGlsZSAoaW5kZXhCZWZvcmVGbG93LS0pIHtcbiAgICAgICAgaWYgKHNlbGYuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMF0gPT09ICdleGl0JyAmJiBzZWxmLmV2ZW50c1tpbmRleEJlZm9yZUZsb3ddWzFdLnR5cGUgPT09IFwiY2h1bmtGbG93XCIpIHtcbiAgICAgICAgICBpZiAoc2Vlbikge1xuICAgICAgICAgICAgcG9pbnQgPSBzZWxmLmV2ZW50c1tpbmRleEJlZm9yZUZsb3ddWzFdLmVuZDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhpdENvbnRhaW5lcnMoY29udGludWVkKTtcblxuICAgICAgLy8gRml4IHBvc2l0aW9ucy5cbiAgICAgIGluZGV4ID0gaW5kZXhCZWZvcmVFeGl0cztcbiAgICAgIHdoaWxlIChpbmRleCA8IHNlbGYuZXZlbnRzLmxlbmd0aCkge1xuICAgICAgICBzZWxmLmV2ZW50c1tpbmRleF1bMV0uZW5kID0ge1xuICAgICAgICAgIC4uLnBvaW50XG4gICAgICAgIH07XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG5cbiAgICAgIC8vIEluamVjdCB0aGUgZXhpdHMgZWFybGllciAodGhleVx1MjAxOXJlIHN0aWxsIGFsc28gYXQgdGhlIGVuZCkuXG4gICAgICBzcGxpY2Uoc2VsZi5ldmVudHMsIGluZGV4QmVmb3JlRmxvdyArIDEsIDAsIHNlbGYuZXZlbnRzLnNsaWNlKGluZGV4QmVmb3JlRXhpdHMpKTtcblxuICAgICAgLy8gRGlzY2FyZCB0aGUgZHVwbGljYXRlIGV4aXRzLlxuICAgICAgc2VsZi5ldmVudHMubGVuZ3RoID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXG4gICAqICAgU2l6ZS5cbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICogICBOb3RoaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gZXhpdENvbnRhaW5lcnMoc2l6ZSkge1xuICAgIGxldCBpbmRleCA9IHN0YWNrLmxlbmd0aDtcblxuICAgIC8vIEV4aXQgb3BlbiBjb250YWluZXJzLlxuICAgIHdoaWxlIChpbmRleC0tID4gc2l6ZSkge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGFja1tpbmRleF07XG4gICAgICBzZWxmLmNvbnRhaW5lclN0YXRlID0gZW50cnlbMV07XG4gICAgICBlbnRyeVswXS5leGl0LmNhbGwoc2VsZiwgZWZmZWN0cyk7XG4gICAgfVxuICAgIHN0YWNrLmxlbmd0aCA9IHNpemU7XG4gIH1cbiAgZnVuY3Rpb24gY2xvc2VGbG93KCkge1xuICAgIGNoaWxkRmxvdy53cml0ZShbbnVsbF0pO1xuICAgIGNoaWxkVG9rZW4gPSB1bmRlZmluZWQ7XG4gICAgY2hpbGRGbG93ID0gdW5kZWZpbmVkO1xuICAgIHNlbGYuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdyA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIENvbnRleHQuXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICogICBUb2tlbml6ZXIuXG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplQ29udGFpbmVyKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgLy8gQWx3YXlzIHBvcHVsYXRlZCBieSBkZWZhdWx0cy5cblxuICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGVmZmVjdHMuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRvY3VtZW50LCBvaywgbm9rKSwgXCJsaW5lUHJlZml4XCIsIHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCdjb2RlSW5kZW50ZWQnKSA/IHVuZGVmaW5lZCA6IDQpO1xufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBJbml0aWFsQ29uc3RydWN0LFxuICogICBJbml0aWFsaXplcixcbiAqICAgU3RhdGUsXG4gKiAgIFRva2VuaXplQ29udGV4dFxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG5pbXBvcnQgeyBibGFua0xpbmUsIGNvbnRlbnQgfSBmcm9tICdtaWNyb21hcmstY29yZS1jb21tb25tYXJrJztcbmltcG9ydCB7IGZhY3RvcnlTcGFjZSB9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJztcbmltcG9ydCB7IG1hcmtkb3duTGluZUVuZGluZyB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcic7XG4vKiogQHR5cGUge0luaXRpYWxDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgZmxvdyA9IHtcbiAgdG9rZW5pemU6IGluaXRpYWxpemVGbG93XG59O1xuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIFNlbGYuXG4gKiBAdHlwZSB7SW5pdGlhbGl6ZXJ9XG4gKiAgIEluaXRpYWxpemVyLlxuICovXG5mdW5jdGlvbiBpbml0aWFsaXplRmxvdyhlZmZlY3RzKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICBjb25zdCBpbml0aWFsID0gZWZmZWN0cy5hdHRlbXB0KFxuICAvLyBUcnkgdG8gcGFyc2UgYSBibGFuayBsaW5lLlxuICBibGFua0xpbmUsIGF0QmxhbmtFbmRpbmcsXG4gIC8vIFRyeSB0byBwYXJzZSBpbml0aWFsIGZsb3cgKGVzc2VudGlhbGx5LCBvbmx5IGNvZGUpLlxuICBlZmZlY3RzLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5mbG93SW5pdGlhbCwgYWZ0ZXJDb25zdHJ1Y3QsIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBlZmZlY3RzLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5mbG93LCBhZnRlckNvbnN0cnVjdCwgZWZmZWN0cy5hdHRlbXB0KGNvbnRlbnQsIGFmdGVyQ29uc3RydWN0KSksIFwibGluZVByZWZpeFwiKSkpO1xuICByZXR1cm4gaW5pdGlhbDtcblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBhdEJsYW5rRW5kaW5nKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKFwibGluZUVuZGluZ0JsYW5rXCIpO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICBlZmZlY3RzLmV4aXQoXCJsaW5lRW5kaW5nQmxhbmtcIik7XG4gICAgc2VsZi5jdXJyZW50Q29uc3RydWN0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBpbml0aWFsO1xuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gYWZ0ZXJDb25zdHJ1Y3QoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVmZmVjdHMuZW50ZXIoXCJsaW5lRW5kaW5nXCIpO1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKTtcbiAgICBlZmZlY3RzLmV4aXQoXCJsaW5lRW5kaW5nXCIpO1xuICAgIHNlbGYuY3VycmVudENvbnN0cnVjdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaW5pdGlhbDtcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb2RlLFxuICogICBJbml0aWFsQ29uc3RydWN0LFxuICogICBJbml0aWFsaXplcixcbiAqICAgUmVzb2x2ZXIsXG4gKiAgIFN0YXRlLFxuICogICBUb2tlbml6ZUNvbnRleHRcbiAqIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVyID0ge1xuICByZXNvbHZlQWxsOiBjcmVhdGVSZXNvbHZlcigpXG59O1xuZXhwb3J0IGNvbnN0IHN0cmluZyA9IGluaXRpYWxpemVGYWN0b3J5KCdzdHJpbmcnKTtcbmV4cG9ydCBjb25zdCB0ZXh0ID0gaW5pdGlhbGl6ZUZhY3RvcnkoJ3RleHQnKTtcblxuLyoqXG4gKiBAcGFyYW0geydzdHJpbmcnIHwgJ3RleHQnfSBmaWVsZFxuICogICBGaWVsZC5cbiAqIEByZXR1cm5zIHtJbml0aWFsQ29uc3RydWN0fVxuICogICBDb25zdHJ1Y3QuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVGYWN0b3J5KGZpZWxkKSB7XG4gIHJldHVybiB7XG4gICAgcmVzb2x2ZUFsbDogY3JlYXRlUmVzb2x2ZXIoZmllbGQgPT09ICd0ZXh0JyA/IHJlc29sdmVBbGxMaW5lU3VmZml4ZXMgOiB1bmRlZmluZWQpLFxuICAgIHRva2VuaXplOiBpbml0aWFsaXplVGV4dFxuICB9O1xuXG4gIC8qKlxuICAgKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICAgKiAgIENvbnRleHQuXG4gICAqIEB0eXBlIHtJbml0aWFsaXplcn1cbiAgICovXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVUZXh0KGVmZmVjdHMpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBjb25zdHJ1Y3RzID0gdGhpcy5wYXJzZXIuY29uc3RydWN0c1tmaWVsZF07XG4gICAgY29uc3QgdGV4dCA9IGVmZmVjdHMuYXR0ZW1wdChjb25zdHJ1Y3RzLCBzdGFydCwgbm90VGV4dCk7XG4gICAgcmV0dXJuIHN0YXJ0O1xuXG4gICAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgICByZXR1cm4gYXRCcmVhayhjb2RlKSA/IHRleHQoY29kZSkgOiBub3RUZXh0KGNvZGUpO1xuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gICAgZnVuY3Rpb24gbm90VGV4dChjb2RlKSB7XG4gICAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVmZmVjdHMuZW50ZXIoXCJkYXRhXCIpO1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgICBmdW5jdGlvbiBkYXRhKGNvZGUpIHtcbiAgICAgIGlmIChhdEJyZWFrKGNvZGUpKSB7XG4gICAgICAgIGVmZmVjdHMuZXhpdChcImRhdGFcIik7XG4gICAgICAgIHJldHVybiB0ZXh0KGNvZGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBEYXRhLlxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDb2RlfSBjb2RlXG4gICAgICogICBDb2RlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqICAgV2hldGhlciB0aGUgY29kZSBpcyBhIGJyZWFrLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGF0QnJlYWsoY29kZSkge1xuICAgICAgaWYgKGNvZGUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBsaXN0ID0gY29uc3RydWN0c1tjb2RlXTtcbiAgICAgIGxldCBpbmRleCA9IC0xO1xuICAgICAgaWYgKGxpc3QpIHtcbiAgICAgICAgLy8gQWx3YXlzIHBvcHVsYXRlZCBieSBkZWZhdWx0cy5cblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IGxpc3RbaW5kZXhdO1xuICAgICAgICAgIGlmICghaXRlbS5wcmV2aW91cyB8fCBpdGVtLnByZXZpb3VzLmNhbGwoc2VsZiwgc2VsZi5wcmV2aW91cykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVzb2x2ZXIgfCB1bmRlZmluZWR9IFtleHRyYVJlc29sdmVyXVxuICogICBSZXNvbHZlci5cbiAqIEByZXR1cm5zIHtSZXNvbHZlcn1cbiAqICAgUmVzb2x2ZXIuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVyKGV4dHJhUmVzb2x2ZXIpIHtcbiAgcmV0dXJuIHJlc29sdmVBbGxUZXh0O1xuXG4gIC8qKiBAdHlwZSB7UmVzb2x2ZXJ9ICovXG4gIGZ1bmN0aW9uIHJlc29sdmVBbGxUZXh0KGV2ZW50cywgY29udGV4dCkge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICAgIGxldCBlbnRlcjtcblxuICAgIC8vIEEgcmF0aGVyIGJvcmluZyBjb21wdXRhdGlvbiAodG8gbWVyZ2UgYWRqYWNlbnQgYGRhdGFgIGV2ZW50cykgd2hpY2hcbiAgICAvLyBpbXByb3ZlcyBtbSBwZXJmb3JtYW5jZSBieSAyOSUuXG4gICAgd2hpbGUgKCsraW5kZXggPD0gZXZlbnRzLmxlbmd0aCkge1xuICAgICAgaWYgKGVudGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGV2ZW50c1tpbmRleF0gJiYgZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSBcImRhdGFcIikge1xuICAgICAgICAgIGVudGVyID0gaW5kZXg7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghZXZlbnRzW2luZGV4XSB8fCBldmVudHNbaW5kZXhdWzFdLnR5cGUgIT09IFwiZGF0YVwiKSB7XG4gICAgICAgIC8vIERvblx1MjAxOXQgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgb25lIGRhdGEgdG9rZW4uXG4gICAgICAgIGlmIChpbmRleCAhPT0gZW50ZXIgKyAyKSB7XG4gICAgICAgICAgZXZlbnRzW2VudGVyXVsxXS5lbmQgPSBldmVudHNbaW5kZXggLSAxXVsxXS5lbmQ7XG4gICAgICAgICAgZXZlbnRzLnNwbGljZShlbnRlciArIDIsIGluZGV4IC0gZW50ZXIgLSAyKTtcbiAgICAgICAgICBpbmRleCA9IGVudGVyICsgMjtcbiAgICAgICAgfVxuICAgICAgICBlbnRlciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4dHJhUmVzb2x2ZXIgPyBleHRyYVJlc29sdmVyKGV2ZW50cywgY29udGV4dCkgOiBldmVudHM7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJhdGhlciB1Z2x5IHNldCBvZiBpbnN0cnVjdGlvbnMgd2hpY2ggYWdhaW4gbG9va3MgYXQgY2h1bmtzIGluIHRoZSBpbnB1dFxuICogc3RyZWFtLlxuICogVGhlIHJlYXNvbiB0byBkbyB0aGlzIGhlcmUgaXMgdGhhdCBpdCBpcyAqbXVjaCogZmFzdGVyIHRvIHBhcnNlIGluIHJldmVyc2UuXG4gKiBBbmQgdGhhdCB3ZSBjYW5cdTIwMTl0IGhvb2sgaW50byBgbnVsbGAgdG8gc3BsaXQgdGhlIGxpbmUgc3VmZml4IGJlZm9yZSBhbiBFT0YuXG4gKiBUbyBkbzogZmlndXJlIG91dCBpZiB3ZSBjYW4gbWFrZSB0aGlzIGludG8gYSBjbGVhbiB1dGlsaXR5LCBvciBldmVuIGluIGNvcmUuXG4gKiBBcyBpdCB3aWxsIGJlIHVzZWZ1bCBmb3IgR0ZNcyBsaXRlcmFsIGF1dG9saW5rIGV4dGVuc2lvbiAoYW5kIG1heWJlIGV2ZW5cbiAqIHRhYmxlcz8pXG4gKlxuICogQHR5cGUge1Jlc29sdmVyfVxuICovXG5mdW5jdGlvbiByZXNvbHZlQWxsTGluZVN1ZmZpeGVzKGV2ZW50cywgY29udGV4dCkge1xuICBsZXQgZXZlbnRJbmRleCA9IDA7IC8vIFNraXAgZmlyc3QuXG5cbiAgd2hpbGUgKCsrZXZlbnRJbmRleCA8PSBldmVudHMubGVuZ3RoKSB7XG4gICAgaWYgKChldmVudEluZGV4ID09PSBldmVudHMubGVuZ3RoIHx8IGV2ZW50c1tldmVudEluZGV4XVsxXS50eXBlID09PSBcImxpbmVFbmRpbmdcIikgJiYgZXZlbnRzW2V2ZW50SW5kZXggLSAxXVsxXS50eXBlID09PSBcImRhdGFcIikge1xuICAgICAgY29uc3QgZGF0YSA9IGV2ZW50c1tldmVudEluZGV4IC0gMV1bMV07XG4gICAgICBjb25zdCBjaHVua3MgPSBjb250ZXh0LnNsaWNlU3RyZWFtKGRhdGEpO1xuICAgICAgbGV0IGluZGV4ID0gY2h1bmtzLmxlbmd0aDtcbiAgICAgIGxldCBidWZmZXJJbmRleCA9IC0xO1xuICAgICAgbGV0IHNpemUgPSAwO1xuICAgICAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHRhYnM7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpbmRleF07XG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgYnVmZmVySW5kZXggPSBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGNodW5rLmNoYXJDb2RlQXQoYnVmZmVySW5kZXggLSAxKSA9PT0gMzIpIHtcbiAgICAgICAgICAgIHNpemUrKztcbiAgICAgICAgICAgIGJ1ZmZlckluZGV4LS07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChidWZmZXJJbmRleCkgYnJlYWs7XG4gICAgICAgICAgYnVmZmVySW5kZXggPSAtMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOdW1iZXJcbiAgICAgICAgZWxzZSBpZiAoY2h1bmsgPT09IC0yKSB7XG4gICAgICAgICAgdGFicyA9IHRydWU7XG4gICAgICAgICAgc2l6ZSsrO1xuICAgICAgICB9IGVsc2UgaWYgKGNodW5rID09PSAtMSkge1xuICAgICAgICAgIC8vIEVtcHR5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVwbGFjZW1lbnQgY2hhcmFjdGVyLCBleGl0LlxuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWxsb3cgZmluYWwgdHJhaWxpbmcgd2hpdGVzcGFjZS5cbiAgICAgIGlmIChjb250ZXh0Ll9jb250ZW50VHlwZVRleHRUcmFpbGluZyAmJiBldmVudEluZGV4ID09PSBldmVudHMubGVuZ3RoKSB7XG4gICAgICAgIHNpemUgPSAwO1xuICAgICAgfVxuICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB7XG4gICAgICAgICAgdHlwZTogZXZlbnRJbmRleCA9PT0gZXZlbnRzLmxlbmd0aCB8fCB0YWJzIHx8IHNpemUgPCAyID8gXCJsaW5lU3VmZml4XCIgOiBcImhhcmRCcmVha1RyYWlsaW5nXCIsXG4gICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgIF9idWZmZXJJbmRleDogaW5kZXggPyBidWZmZXJJbmRleCA6IGRhdGEuc3RhcnQuX2J1ZmZlckluZGV4ICsgYnVmZmVySW5kZXgsXG4gICAgICAgICAgICBfaW5kZXg6IGRhdGEuc3RhcnQuX2luZGV4ICsgaW5kZXgsXG4gICAgICAgICAgICBsaW5lOiBkYXRhLmVuZC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBkYXRhLmVuZC5jb2x1bW4gLSBzaXplLFxuICAgICAgICAgICAgb2Zmc2V0OiBkYXRhLmVuZC5vZmZzZXQgLSBzaXplXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgIC4uLmRhdGEuZW5kXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBkYXRhLmVuZCA9IHtcbiAgICAgICAgICAuLi50b2tlbi5zdGFydFxuICAgICAgICB9O1xuICAgICAgICBpZiAoZGF0YS5zdGFydC5vZmZzZXQgPT09IGRhdGEuZW5kLm9mZnNldCkge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgdG9rZW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2ZW50cy5zcGxpY2UoZXZlbnRJbmRleCwgMCwgWydlbnRlcicsIHRva2VuLCBjb250ZXh0XSwgWydleGl0JywgdG9rZW4sIGNvbnRleHRdKTtcbiAgICAgICAgICBldmVudEluZGV4ICs9IDI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV2ZW50SW5kZXgrKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV2ZW50cztcbn0iLCAiLyoqXG4gKiBAaW1wb3J0IHtFeHRlbnNpb259IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IGF0dGVudGlvbiwgYXV0b2xpbmssIGJsb2NrUXVvdGUsIGNoYXJhY3RlckVzY2FwZSwgY2hhcmFjdGVyUmVmZXJlbmNlLCBjb2RlRmVuY2VkLCBjb2RlSW5kZW50ZWQsIGNvZGVUZXh0LCBkZWZpbml0aW9uLCBoYXJkQnJlYWtFc2NhcGUsIGhlYWRpbmdBdHgsIGh0bWxGbG93LCBodG1sVGV4dCwgbGFiZWxFbmQsIGxhYmVsU3RhcnRJbWFnZSwgbGFiZWxTdGFydExpbmssIGxpbmVFbmRpbmcsIGxpc3QsIHNldGV4dFVuZGVybGluZSwgdGhlbWF0aWNCcmVhayB9IGZyb20gJ21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsnO1xuaW1wb3J0IHsgcmVzb2x2ZXIgYXMgcmVzb2x2ZVRleHQgfSBmcm9tICcuL2luaXRpYWxpemUvdGV4dC5qcyc7XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ2RvY3VtZW50J119ICovXG5leHBvcnQgY29uc3QgZG9jdW1lbnQgPSB7XG4gIFs0Ml06IGxpc3QsXG4gIFs0M106IGxpc3QsXG4gIFs0NV06IGxpc3QsXG4gIFs0OF06IGxpc3QsXG4gIFs0OV06IGxpc3QsXG4gIFs1MF06IGxpc3QsXG4gIFs1MV06IGxpc3QsXG4gIFs1Ml06IGxpc3QsXG4gIFs1M106IGxpc3QsXG4gIFs1NF06IGxpc3QsXG4gIFs1NV06IGxpc3QsXG4gIFs1Nl06IGxpc3QsXG4gIFs1N106IGxpc3QsXG4gIFs2Ml06IGJsb2NrUXVvdGVcbn07XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ2NvbnRlbnRJbml0aWFsJ119ICovXG5leHBvcnQgY29uc3QgY29udGVudEluaXRpYWwgPSB7XG4gIFs5MV06IGRlZmluaXRpb25cbn07XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ2Zsb3dJbml0aWFsJ119ICovXG5leHBvcnQgY29uc3QgZmxvd0luaXRpYWwgPSB7XG4gIFstMl06IGNvZGVJbmRlbnRlZCxcbiAgWy0xXTogY29kZUluZGVudGVkLFxuICBbMzJdOiBjb2RlSW5kZW50ZWRcbn07XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ2Zsb3cnXX0gKi9cbmV4cG9ydCBjb25zdCBmbG93ID0ge1xuICBbMzVdOiBoZWFkaW5nQXR4LFxuICBbNDJdOiB0aGVtYXRpY0JyZWFrLFxuICBbNDVdOiBbc2V0ZXh0VW5kZXJsaW5lLCB0aGVtYXRpY0JyZWFrXSxcbiAgWzYwXTogaHRtbEZsb3csXG4gIFs2MV06IHNldGV4dFVuZGVybGluZSxcbiAgWzk1XTogdGhlbWF0aWNCcmVhayxcbiAgWzk2XTogY29kZUZlbmNlZCxcbiAgWzEyNl06IGNvZGVGZW5jZWRcbn07XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ3N0cmluZyddfSAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZyA9IHtcbiAgWzM4XTogY2hhcmFjdGVyUmVmZXJlbmNlLFxuICBbOTJdOiBjaGFyYWN0ZXJFc2NhcGVcbn07XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ3RleHQnXX0gKi9cbmV4cG9ydCBjb25zdCB0ZXh0ID0ge1xuICBbLTVdOiBsaW5lRW5kaW5nLFxuICBbLTRdOiBsaW5lRW5kaW5nLFxuICBbLTNdOiBsaW5lRW5kaW5nLFxuICBbMzNdOiBsYWJlbFN0YXJ0SW1hZ2UsXG4gIFszOF06IGNoYXJhY3RlclJlZmVyZW5jZSxcbiAgWzQyXTogYXR0ZW50aW9uLFxuICBbNjBdOiBbYXV0b2xpbmssIGh0bWxUZXh0XSxcbiAgWzkxXTogbGFiZWxTdGFydExpbmssXG4gIFs5Ml06IFtoYXJkQnJlYWtFc2NhcGUsIGNoYXJhY3RlckVzY2FwZV0sXG4gIFs5M106IGxhYmVsRW5kLFxuICBbOTVdOiBhdHRlbnRpb24sXG4gIFs5Nl06IGNvZGVUZXh0XG59O1xuXG4vKiogQHNhdGlzZmllcyB7RXh0ZW5zaW9uWydpbnNpZGVTcGFuJ119ICovXG5leHBvcnQgY29uc3QgaW5zaWRlU3BhbiA9IHtcbiAgbnVsbDogW2F0dGVudGlvbiwgcmVzb2x2ZVRleHRdXG59O1xuXG4vKiogQHNhdGlzZmllcyB7RXh0ZW5zaW9uWydhdHRlbnRpb25NYXJrZXJzJ119ICovXG5leHBvcnQgY29uc3QgYXR0ZW50aW9uTWFya2VycyA9IHtcbiAgbnVsbDogWzQyLCA5NV1cbn07XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ2Rpc2FibGUnXX0gKi9cbmV4cG9ydCBjb25zdCBkaXNhYmxlID0ge1xuICBudWxsOiBbXVxufTsiLCAiLyoqXG4gKiBAaW1wb3J0IHtcbiAqICAgQ2h1bmssXG4gKiAgIENvZGUsXG4gKiAgIENvbnN0cnVjdFJlY29yZCxcbiAqICAgQ29uc3RydWN0LFxuICogICBFZmZlY3RzLFxuICogICBJbml0aWFsQ29uc3RydWN0LFxuICogICBQYXJzZUNvbnRleHQsXG4gKiAgIFBvaW50LFxuICogICBTdGF0ZSxcbiAqICAgVG9rZW5pemVDb250ZXh0LFxuICogICBUb2tlblxuICogfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBSZXN0b3JlXG4gKiAgIFJlc3RvcmUgdGhlIHN0YXRlLlxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqICAgTm90aGluZy5cbiAqXG4gKiBAdHlwZWRlZiBJbmZvXG4gKiAgIEluZm8uXG4gKiBAcHJvcGVydHkge1Jlc3RvcmV9IHJlc3RvcmVcbiAqICAgUmVzdG9yZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmcm9tXG4gKiAgIEZyb20uXG4gKlxuICogQGNhbGxiYWNrIFJldHVybkhhbmRsZVxuICogICBIYW5kbGUgYSBzdWNjZXNzZnVsIHJ1bi5cbiAqIEBwYXJhbSB7Q29uc3RydWN0fSBjb25zdHJ1Y3RcbiAqICAgQ29uc3RydWN0LlxuICogQHBhcmFtIHtJbmZvfSBpbmZvXG4gKiAgIEluZm8uXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogICBOb3RoaW5nLlxuICovXG5cbmltcG9ydCB7IG1hcmtkb3duTGluZUVuZGluZyB9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcic7XG5pbXBvcnQgeyBwdXNoLCBzcGxpY2UgfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaHVua2VkJztcbmltcG9ydCB7IHJlc29sdmVBbGwgfSBmcm9tICdtaWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbCc7XG4vKipcbiAqIENyZWF0ZSBhIHRva2VuaXplci5cbiAqIFRva2VuaXplcnMgZGVhbCB3aXRoIG9uZSB0eXBlIG9mIGRhdGEgKGUuZy4sIGNvbnRhaW5lcnMsIGZsb3csIHRleHQpLlxuICogVGhlIHBhcnNlciBpcyB0aGUgb2JqZWN0IGRlYWxpbmcgd2l0aCBpdCBhbGwuXG4gKiBgaW5pdGlhbGl6ZWAgd29ya3MgbGlrZSBvdGhlciBjb25zdHJ1Y3RzLCBleGNlcHQgdGhhdCBvbmx5IGl0cyBgdG9rZW5pemVgXG4gKiBmdW5jdGlvbiBpcyB1c2VkLCBpbiB3aGljaCBjYXNlIGl0IGRvZXNuXHUyMDE5dCByZWNlaXZlIGFuIGBva2Agb3IgYG5va2AuXG4gKiBgZnJvbWAgY2FuIGJlIGdpdmVuIHRvIHNldCB0aGUgcG9pbnQgYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIGFsdGhvdWdoXG4gKiB3aGVuIGZ1cnRoZXIgbGluZXMgYXJlIGluZGVudGVkLCB0aGV5IG11c3QgYmUgc2V0IHdpdGggYGRlZmluZVNraXBgLlxuICpcbiAqIEBwYXJhbSB7UGFyc2VDb250ZXh0fSBwYXJzZXJcbiAqICAgUGFyc2VyLlxuICogQHBhcmFtIHtJbml0aWFsQ29uc3RydWN0fSBpbml0aWFsaXplXG4gKiAgIENvbnN0cnVjdC5cbiAqIEBwYXJhbSB7T21pdDxQb2ludCwgJ19idWZmZXJJbmRleCcgfCAnX2luZGV4Jz4gfCB1bmRlZmluZWR9IFtmcm9tXVxuICogICBQb2ludCAob3B0aW9uYWwpLlxuICogQHJldHVybnMge1Rva2VuaXplQ29udGV4dH1cbiAqICAgQ29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRva2VuaXplcihwYXJzZXIsIGluaXRpYWxpemUsIGZyb20pIHtcbiAgLyoqIEB0eXBlIHtQb2ludH0gKi9cbiAgbGV0IHBvaW50ID0ge1xuICAgIF9idWZmZXJJbmRleDogLTEsXG4gICAgX2luZGV4OiAwLFxuICAgIGxpbmU6IGZyb20gJiYgZnJvbS5saW5lIHx8IDEsXG4gICAgY29sdW1uOiBmcm9tICYmIGZyb20uY29sdW1uIHx8IDEsXG4gICAgb2Zmc2V0OiBmcm9tICYmIGZyb20ub2Zmc2V0IHx8IDBcbiAgfTtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSAqL1xuICBjb25zdCBjb2x1bW5TdGFydCA9IHt9O1xuICAvKiogQHR5cGUge0FycmF5PENvbnN0cnVjdD59ICovXG4gIGNvbnN0IHJlc29sdmVBbGxDb25zdHJ1Y3RzID0gW107XG4gIC8qKiBAdHlwZSB7QXJyYXk8Q2h1bms+fSAqL1xuICBsZXQgY2h1bmtzID0gW107XG4gIC8qKiBAdHlwZSB7QXJyYXk8VG9rZW4+fSAqL1xuICBsZXQgc3RhY2sgPSBbXTtcbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgY29uc3VtZWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUb29scyB1c2VkIGZvciB0b2tlbml6aW5nLlxuICAgKlxuICAgKiBAdHlwZSB7RWZmZWN0c31cbiAgICovXG4gIGNvbnN0IGVmZmVjdHMgPSB7XG4gICAgYXR0ZW1wdDogY29uc3RydWN0RmFjdG9yeShvbnN1Y2Nlc3NmdWxjb25zdHJ1Y3QpLFxuICAgIGNoZWNrOiBjb25zdHJ1Y3RGYWN0b3J5KG9uc3VjY2Vzc2Z1bGNoZWNrKSxcbiAgICBjb25zdW1lLFxuICAgIGVudGVyLFxuICAgIGV4aXQsXG4gICAgaW50ZXJydXB0OiBjb25zdHJ1Y3RGYWN0b3J5KG9uc3VjY2Vzc2Z1bGNoZWNrLCB7XG4gICAgICBpbnRlcnJ1cHQ6IHRydWVcbiAgICB9KVxuICB9O1xuXG4gIC8qKlxuICAgKiBTdGF0ZSBhbmQgdG9vbHMgZm9yIHJlc29sdmluZyBhbmQgc2VyaWFsaXppbmcuXG4gICAqXG4gICAqIEB0eXBlIHtUb2tlbml6ZUNvbnRleHR9XG4gICAqL1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGNvZGU6IG51bGwsXG4gICAgY29udGFpbmVyU3RhdGU6IHt9LFxuICAgIGRlZmluZVNraXAsXG4gICAgZXZlbnRzOiBbXSxcbiAgICBub3csXG4gICAgcGFyc2VyLFxuICAgIHByZXZpb3VzOiBudWxsLFxuICAgIHNsaWNlU2VyaWFsaXplLFxuICAgIHNsaWNlU3RyZWFtLFxuICAgIHdyaXRlXG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHR5cGUge1N0YXRlIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgbGV0IHN0YXRlID0gaW5pdGlhbGl6ZS50b2tlbml6ZS5jYWxsKGNvbnRleHQsIGVmZmVjdHMpO1xuXG4gIC8qKlxuICAgKiBUcmFjayB3aGljaCBjaGFyYWN0ZXIgd2UgZXhwZWN0IHRvIGJlIGNvbnN1bWVkLCB0byBjYXRjaCBidWdzLlxuICAgKlxuICAgKiBAdHlwZSB7Q29kZX1cbiAgICovXG4gIGxldCBleHBlY3RlZENvZGU7XG4gIGlmIChpbml0aWFsaXplLnJlc29sdmVBbGwpIHtcbiAgICByZXNvbHZlQWxsQ29uc3RydWN0cy5wdXNoKGluaXRpYWxpemUpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xuXG4gIC8qKiBAdHlwZSB7VG9rZW5pemVDb250ZXh0Wyd3cml0ZSddfSAqL1xuICBmdW5jdGlvbiB3cml0ZShzbGljZSkge1xuICAgIGNodW5rcyA9IHB1c2goY2h1bmtzLCBzbGljZSk7XG4gICAgbWFpbigpO1xuXG4gICAgLy8gRXhpdCBpZiB3ZVx1MjAxOXJlIG5vdCBkb25lLCByZXNvbHZlIG1pZ2h0IGNoYW5nZSBzdHVmZi5cbiAgICBpZiAoY2h1bmtzW2NodW5rcy5sZW5ndGggLSAxXSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBhZGRSZXN1bHQoaW5pdGlhbGl6ZSwgMCk7XG5cbiAgICAvLyBPdGhlcndpc2UsIHJlc29sdmUsIGFuZCBleGl0LlxuICAgIGNvbnRleHQuZXZlbnRzID0gcmVzb2x2ZUFsbChyZXNvbHZlQWxsQ29uc3RydWN0cywgY29udGV4dC5ldmVudHMsIGNvbnRleHQpO1xuICAgIHJldHVybiBjb250ZXh0LmV2ZW50cztcbiAgfVxuXG4gIC8vXG4gIC8vIFRvb2xzLlxuICAvL1xuXG4gIC8qKiBAdHlwZSB7VG9rZW5pemVDb250ZXh0WydzbGljZVNlcmlhbGl6ZSddfSAqL1xuICBmdW5jdGlvbiBzbGljZVNlcmlhbGl6ZSh0b2tlbiwgZXhwYW5kVGFicykge1xuICAgIHJldHVybiBzZXJpYWxpemVDaHVua3Moc2xpY2VTdHJlYW0odG9rZW4pLCBleHBhbmRUYWJzKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7VG9rZW5pemVDb250ZXh0WydzbGljZVN0cmVhbSddfSAqL1xuICBmdW5jdGlvbiBzbGljZVN0cmVhbSh0b2tlbikge1xuICAgIHJldHVybiBzbGljZUNodW5rcyhjaHVua3MsIHRva2VuKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7VG9rZW5pemVDb250ZXh0Wydub3cnXX0gKi9cbiAgZnVuY3Rpb24gbm93KCkge1xuICAgIC8vIFRoaXMgaXMgYSBob3QgcGF0aCwgc28gd2UgY2xvbmUgbWFudWFsbHkgaW5zdGVhZCBvZiBgT2JqZWN0LmFzc2lnbih7fSwgcG9pbnQpYFxuICAgIGNvbnN0IHtcbiAgICAgIF9idWZmZXJJbmRleCxcbiAgICAgIF9pbmRleCxcbiAgICAgIGxpbmUsXG4gICAgICBjb2x1bW4sXG4gICAgICBvZmZzZXRcbiAgICB9ID0gcG9pbnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9idWZmZXJJbmRleCxcbiAgICAgIF9pbmRleCxcbiAgICAgIGxpbmUsXG4gICAgICBjb2x1bW4sXG4gICAgICBvZmZzZXRcbiAgICB9O1xuICB9XG5cbiAgLyoqIEB0eXBlIHtUb2tlbml6ZUNvbnRleHRbJ2RlZmluZVNraXAnXX0gKi9cbiAgZnVuY3Rpb24gZGVmaW5lU2tpcCh2YWx1ZSkge1xuICAgIGNvbHVtblN0YXJ0W3ZhbHVlLmxpbmVdID0gdmFsdWUuY29sdW1uO1xuICAgIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKCk7XG4gIH1cblxuICAvL1xuICAvLyBTdGF0ZSBtYW5hZ2VtZW50LlxuICAvL1xuXG4gIC8qKlxuICAgKiBNYWluIGxvb3AgKG5vdGUgdGhhdCBgX2luZGV4YCBhbmQgYF9idWZmZXJJbmRleGAgaW4gYHBvaW50YCBhcmUgbW9kaWZpZWQgYnlcbiAgICogYGNvbnN1bWVgKS5cbiAgICogSGVyZSBpcyB3aGVyZSB3ZSB3YWxrIHRocm91Z2ggdGhlIGNodW5rcywgd2hpY2ggZWl0aGVyIGluY2x1ZGUgc3RyaW5ncyBvZlxuICAgKiBzZXZlcmFsIGNoYXJhY3RlcnMsIG9yIG51bWVyaWNhbCBjaGFyYWN0ZXIgY29kZXMuXG4gICAqIFRoZSByZWFzb24gdG8gZG8gdGhpcyBpbiBhIGxvb3AgaW5zdGVhZCBvZiBhIGNhbGwgaXMgc28gdGhlIHN0YWNrIGNhblxuICAgKiBkcmFpbi5cbiAgICpcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICogICBOb3RoaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gbWFpbigpIHtcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICBsZXQgY2h1bmtJbmRleDtcbiAgICB3aGlsZSAocG9pbnQuX2luZGV4IDwgY2h1bmtzLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2h1bmsgPSBjaHVua3NbcG9pbnQuX2luZGV4XTtcblxuICAgICAgLy8gSWYgd2VcdTIwMTlyZSBpbiBhIGJ1ZmZlciBjaHVuaywgbG9vcCB0aHJvdWdoIGl0LlxuICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2h1bmtJbmRleCA9IHBvaW50Ll9pbmRleDtcbiAgICAgICAgaWYgKHBvaW50Ll9idWZmZXJJbmRleCA8IDApIHtcbiAgICAgICAgICBwb2ludC5fYnVmZmVySW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChwb2ludC5faW5kZXggPT09IGNodW5rSW5kZXggJiYgcG9pbnQuX2J1ZmZlckluZGV4IDwgY2h1bmsubGVuZ3RoKSB7XG4gICAgICAgICAgZ28oY2h1bmsuY2hhckNvZGVBdChwb2ludC5fYnVmZmVySW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ28oY2h1bmspO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFsIHdpdGggb25lIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29kZX0gY29kZVxuICAgKiAgIENvZGUuXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqICAgTm90aGluZy5cbiAgICovXG4gIGZ1bmN0aW9uIGdvKGNvZGUpIHtcbiAgICBjb25zdW1lZCA9IHVuZGVmaW5lZDtcbiAgICBleHBlY3RlZENvZGUgPSBjb2RlO1xuICAgIHN0YXRlID0gc3RhdGUoY29kZSk7XG4gIH1cblxuICAvKiogQHR5cGUge0VmZmVjdHNbJ2NvbnN1bWUnXX0gKi9cbiAgZnVuY3Rpb24gY29uc3VtZShjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcG9pbnQubGluZSsrO1xuICAgICAgcG9pbnQuY29sdW1uID0gMTtcbiAgICAgIHBvaW50Lm9mZnNldCArPSBjb2RlID09PSAtMyA/IDIgOiAxO1xuICAgICAgYWNjb3VudEZvclBvdGVudGlhbFNraXAoKTtcbiAgICB9IGVsc2UgaWYgKGNvZGUgIT09IC0xKSB7XG4gICAgICBwb2ludC5jb2x1bW4rKztcbiAgICAgIHBvaW50Lm9mZnNldCsrO1xuICAgIH1cblxuICAgIC8vIE5vdCBpbiBhIHN0cmluZyBjaHVuay5cbiAgICBpZiAocG9pbnQuX2J1ZmZlckluZGV4IDwgMCkge1xuICAgICAgcG9pbnQuX2luZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvaW50Ll9idWZmZXJJbmRleCsrO1xuXG4gICAgICAvLyBBdCBlbmQgb2Ygc3RyaW5nIGNodW5rLlxuICAgICAgaWYgKHBvaW50Ll9idWZmZXJJbmRleCA9PT1cbiAgICAgIC8vIFBvaW50cyB3LyBub24tbmVnYXRpdmUgYF9idWZmZXJJbmRleGAgcmVmZXJlbmNlXG4gICAgICAvLyBzdHJpbmdzLlxuICAgICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgICBjaHVua3NbcG9pbnQuX2luZGV4XS5sZW5ndGgpIHtcbiAgICAgICAgcG9pbnQuX2J1ZmZlckluZGV4ID0gLTE7XG4gICAgICAgIHBvaW50Ll9pbmRleCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4cG9zZSB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLlxuICAgIGNvbnRleHQucHJldmlvdXMgPSBjb2RlO1xuXG4gICAgLy8gTWFyayBhcyBjb25zdW1lZC5cbiAgICBjb25zdW1lZCA9IHRydWU7XG4gIH1cblxuICAvKiogQHR5cGUge0VmZmVjdHNbJ2VudGVyJ119ICovXG4gIGZ1bmN0aW9uIGVudGVyKHR5cGUsIGZpZWxkcykge1xuICAgIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBQYXRjaCBpbnN0ZWFkIG9mIGFzc2lnbiByZXF1aXJlZCBmaWVsZHMgdG8gaGVscCBHQy5cbiAgICBjb25zdCB0b2tlbiA9IGZpZWxkcyB8fCB7fTtcbiAgICB0b2tlbi50eXBlID0gdHlwZTtcbiAgICB0b2tlbi5zdGFydCA9IG5vdygpO1xuICAgIGNvbnRleHQuZXZlbnRzLnB1c2goWydlbnRlcicsIHRva2VuLCBjb250ZXh0XSk7XG4gICAgc3RhY2sucHVzaCh0b2tlbik7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgLyoqIEB0eXBlIHtFZmZlY3RzWydleGl0J119ICovXG4gIGZ1bmN0aW9uIGV4aXQodHlwZSkge1xuICAgIGNvbnN0IHRva2VuID0gc3RhY2sucG9wKCk7XG4gICAgdG9rZW4uZW5kID0gbm93KCk7XG4gICAgY29udGV4dC5ldmVudHMucHVzaChbJ2V4aXQnLCB0b2tlbiwgY29udGV4dF0pO1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgcmVzdWx0cy5cbiAgICpcbiAgICogQHR5cGUge1JldHVybkhhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uc3VjY2Vzc2Z1bGNvbnN0cnVjdChjb25zdHJ1Y3QsIGluZm8pIHtcbiAgICBhZGRSZXN1bHQoY29uc3RydWN0LCBpbmZvLmZyb20pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2NhcmQgcmVzdWx0cy5cbiAgICpcbiAgICogQHR5cGUge1JldHVybkhhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uc3VjY2Vzc2Z1bGNoZWNrKF8sIGluZm8pIHtcbiAgICBpbmZvLnJlc3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IHRvIGF0dGVtcHQvY2hlY2svaW50ZXJydXB0LlxuICAgKlxuICAgKiBAcGFyYW0ge1JldHVybkhhbmRsZX0gb25yZXR1cm5cbiAgICogICBDYWxsYmFjay5cbiAgICogQHBhcmFtIHt7aW50ZXJydXB0PzogYm9vbGVhbiB8IHVuZGVmaW5lZH0gfCB1bmRlZmluZWR9IFtmaWVsZHNdXG4gICAqICAgRmllbGRzLlxuICAgKi9cbiAgZnVuY3Rpb24gY29uc3RydWN0RmFjdG9yeShvbnJldHVybiwgZmllbGRzKSB7XG4gICAgcmV0dXJuIGhvb2s7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgZWl0aGVyIGFuIG9iamVjdCBtYXBwaW5nIGNvZGVzIHRvIGNvbnN0cnVjdHMsIGEgbGlzdCBvZlxuICAgICAqIGNvbnN0cnVjdHMsIG9yIGEgc2luZ2xlIGNvbnN0cnVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXk8Q29uc3RydWN0PiB8IENvbnN0cnVjdFJlY29yZCB8IENvbnN0cnVjdH0gY29uc3RydWN0c1xuICAgICAqICAgQ29uc3RydWN0cy5cbiAgICAgKiBAcGFyYW0ge1N0YXRlfSByZXR1cm5TdGF0ZVxuICAgICAqICAgU3RhdGUuXG4gICAgICogQHBhcmFtIHtTdGF0ZSB8IHVuZGVmaW5lZH0gW2JvZ3VzU3RhdGVdXG4gICAgICogICBTdGF0ZS5cbiAgICAgKiBAcmV0dXJucyB7U3RhdGV9XG4gICAgICogICBTdGF0ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBob29rKGNvbnN0cnVjdHMsIHJldHVyblN0YXRlLCBib2d1c1N0YXRlKSB7XG4gICAgICAvKiogQHR5cGUge1JlYWRvbmx5QXJyYXk8Q29uc3RydWN0Pn0gKi9cbiAgICAgIGxldCBsaXN0T2ZDb25zdHJ1Y3RzO1xuICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgICBsZXQgY29uc3RydWN0SW5kZXg7XG4gICAgICAvKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbiAgICAgIGxldCBjdXJyZW50Q29uc3RydWN0O1xuICAgICAgLyoqIEB0eXBlIHtJbmZvfSAqL1xuICAgICAgbGV0IGluZm87XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb25zdHJ1Y3RzKSA/IC8qIGM4IGlnbm9yZSBuZXh0IDEgKi9cbiAgICAgIGhhbmRsZUxpc3RPZkNvbnN0cnVjdHMoY29uc3RydWN0cykgOiAndG9rZW5pemUnIGluIGNvbnN0cnVjdHMgP1xuICAgICAgLy8gTG9va3MgbGlrZSBhIGNvbnN0cnVjdC5cbiAgICAgIGhhbmRsZUxpc3RPZkNvbnN0cnVjdHMoWygvKiogQHR5cGUge0NvbnN0cnVjdH0gKi9jb25zdHJ1Y3RzKV0pIDogaGFuZGxlTWFwT2ZDb25zdHJ1Y3RzKGNvbnN0cnVjdHMpO1xuXG4gICAgICAvKipcbiAgICAgICAqIEhhbmRsZSBhIGxpc3Qgb2YgY29uc3RydWN0LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7Q29uc3RydWN0UmVjb3JkfSBtYXBcbiAgICAgICAqICAgQ29uc3RydWN0cy5cbiAgICAgICAqIEByZXR1cm5zIHtTdGF0ZX1cbiAgICAgICAqICAgU3RhdGUuXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZU1hcE9mQ29uc3RydWN0cyhtYXApIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0O1xuXG4gICAgICAgIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gICAgICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gY29kZSAhPT0gbnVsbCAmJiBtYXBbY29kZV07XG4gICAgICAgICAgY29uc3QgYWxsID0gY29kZSAhPT0gbnVsbCAmJiBtYXAubnVsbDtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gW1xuICAgICAgICAgIC8vIFRvIGRvOiBhZGQgbW9yZSBleHRlbnNpb24gdGVzdHMuXG4gICAgICAgICAgLyogYzggaWdub3JlIG5leHQgMiAqL1xuICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KGxlZnQpID8gbGVmdCA6IGxlZnQgPyBbbGVmdF0gOiBbXSksIC4uLihBcnJheS5pc0FycmF5KGFsbCkgPyBhbGwgOiBhbGwgPyBbYWxsXSA6IFtdKV07XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUxpc3RPZkNvbnN0cnVjdHMobGlzdCkoY29kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBIYW5kbGUgYSBsaXN0IG9mIGNvbnN0cnVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1JlYWRvbmx5QXJyYXk8Q29uc3RydWN0Pn0gbGlzdFxuICAgICAgICogICBDb25zdHJ1Y3RzLlxuICAgICAgICogQHJldHVybnMge1N0YXRlfVxuICAgICAgICogICBTdGF0ZS5cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gaGFuZGxlTGlzdE9mQ29uc3RydWN0cyhsaXN0KSB7XG4gICAgICAgIGxpc3RPZkNvbnN0cnVjdHMgPSBsaXN0O1xuICAgICAgICBjb25zdHJ1Y3RJbmRleCA9IDA7XG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBib2d1c1N0YXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVDb25zdHJ1Y3QobGlzdFtjb25zdHJ1Y3RJbmRleF0pO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIEhhbmRsZSBhIHNpbmdsZSBjb25zdHJ1Y3QuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtDb25zdHJ1Y3R9IGNvbnN0cnVjdFxuICAgICAgICogICBDb25zdHJ1Y3QuXG4gICAgICAgKiBAcmV0dXJucyB7U3RhdGV9XG4gICAgICAgKiAgIFN0YXRlLlxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBoYW5kbGVDb25zdHJ1Y3QoY29uc3RydWN0KSB7XG4gICAgICAgIHJldHVybiBzdGFydDtcblxuICAgICAgICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICAgICAgICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgICAgICAgLy8gVG8gZG86IG5vdCBuZWVkZWQgdG8gc3RvcmUgaWYgdGhlcmUgaXMgbm8gYm9ndXMgc3RhdGUsIHByb2JhYmx5P1xuICAgICAgICAgIC8vIEN1cnJlbnRseSBkb2Vzblx1MjAxOXQgd29yayBiZWNhdXNlIGBpbnNwZWN0YCBpbiBkb2N1bWVudCBkb2VzIGEgY2hlY2tcbiAgICAgICAgICAvLyB3L28gYSBib2d1cywgd2hpY2ggZG9lc25cdTIwMTl0IG1ha2Ugc2Vuc2UuIEJ1dCBpdCBkb2VzIHNlZW0gdG8gaGVscCBwZXJmXG4gICAgICAgICAgLy8gYnkgbm90IHN0b3JpbmcuXG4gICAgICAgICAgaW5mbyA9IHN0b3JlKCk7XG4gICAgICAgICAgY3VycmVudENvbnN0cnVjdCA9IGNvbnN0cnVjdDtcbiAgICAgICAgICBpZiAoIWNvbnN0cnVjdC5wYXJ0aWFsKSB7XG4gICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRDb25zdHJ1Y3QgPSBjb25zdHJ1Y3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQWx3YXlzIHBvcHVsYXRlZCBieSBkZWZhdWx0cy5cblxuICAgICAgICAgIGlmIChjb25zdHJ1Y3QubmFtZSAmJiBjb250ZXh0LnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcyhjb25zdHJ1Y3QubmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2soY29kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3QudG9rZW5pemUuY2FsbChcbiAgICAgICAgICAvLyBJZiB3ZSBkbyBoYXZlIGZpZWxkcywgY3JlYXRlIGFuIG9iamVjdCB3LyBgY29udGV4dGAgYXMgaXRzXG4gICAgICAgICAgLy8gcHJvdG90eXBlLlxuICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGEgXHUyMDFDbGl2ZSBiaW5kaW5nXHUyMDFELCB3aGljaCBpcyBuZWVkZWQgZm9yIGBpbnRlcnJ1cHRgLlxuICAgICAgICAgIGZpZWxkcyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShjb250ZXh0KSwgZmllbGRzKSA6IGNvbnRleHQsIGVmZmVjdHMsIG9rLCBub2spKGNvZGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gICAgICBmdW5jdGlvbiBvayhjb2RlKSB7XG4gICAgICAgIGNvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgb25yZXR1cm4oY3VycmVudENvbnN0cnVjdCwgaW5mbyk7XG4gICAgICAgIHJldHVybiByZXR1cm5TdGF0ZTtcbiAgICAgIH1cblxuICAgICAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgICAgIGZ1bmN0aW9uIG5vayhjb2RlKSB7XG4gICAgICAgIGNvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgaW5mby5yZXN0b3JlKCk7XG4gICAgICAgIGlmICgrK2NvbnN0cnVjdEluZGV4IDwgbGlzdE9mQ29uc3RydWN0cy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlQ29uc3RydWN0KGxpc3RPZkNvbnN0cnVjdHNbY29uc3RydWN0SW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYm9ndXNTdGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3R9IGNvbnN0cnVjdFxuICAgKiAgIENvbnN0cnVjdC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21cbiAgICogICBGcm9tLlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKiAgIE5vdGhpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBhZGRSZXN1bHQoY29uc3RydWN0LCBmcm9tKSB7XG4gICAgaWYgKGNvbnN0cnVjdC5yZXNvbHZlQWxsICYmICFyZXNvbHZlQWxsQ29uc3RydWN0cy5pbmNsdWRlcyhjb25zdHJ1Y3QpKSB7XG4gICAgICByZXNvbHZlQWxsQ29uc3RydWN0cy5wdXNoKGNvbnN0cnVjdCk7XG4gICAgfVxuICAgIGlmIChjb25zdHJ1Y3QucmVzb2x2ZSkge1xuICAgICAgc3BsaWNlKGNvbnRleHQuZXZlbnRzLCBmcm9tLCBjb250ZXh0LmV2ZW50cy5sZW5ndGggLSBmcm9tLCBjb25zdHJ1Y3QucmVzb2x2ZShjb250ZXh0LmV2ZW50cy5zbGljZShmcm9tKSwgY29udGV4dCkpO1xuICAgIH1cbiAgICBpZiAoY29uc3RydWN0LnJlc29sdmVUbykge1xuICAgICAgY29udGV4dC5ldmVudHMgPSBjb25zdHJ1Y3QucmVzb2x2ZVRvKGNvbnRleHQuZXZlbnRzLCBjb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgc3RhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtJbmZvfVxuICAgKiAgIEluZm8uXG4gICAqL1xuICBmdW5jdGlvbiBzdG9yZSgpIHtcbiAgICBjb25zdCBzdGFydFBvaW50ID0gbm93KCk7XG4gICAgY29uc3Qgc3RhcnRQcmV2aW91cyA9IGNvbnRleHQucHJldmlvdXM7XG4gICAgY29uc3Qgc3RhcnRDdXJyZW50Q29uc3RydWN0ID0gY29udGV4dC5jdXJyZW50Q29uc3RydWN0O1xuICAgIGNvbnN0IHN0YXJ0RXZlbnRzSW5kZXggPSBjb250ZXh0LmV2ZW50cy5sZW5ndGg7XG4gICAgY29uc3Qgc3RhcnRTdGFjayA9IEFycmF5LmZyb20oc3RhY2spO1xuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiBzdGFydEV2ZW50c0luZGV4LFxuICAgICAgcmVzdG9yZVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlIHN0YXRlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgKiAgIE5vdGhpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICAgIHBvaW50ID0gc3RhcnRQb2ludDtcbiAgICAgIGNvbnRleHQucHJldmlvdXMgPSBzdGFydFByZXZpb3VzO1xuICAgICAgY29udGV4dC5jdXJyZW50Q29uc3RydWN0ID0gc3RhcnRDdXJyZW50Q29uc3RydWN0O1xuICAgICAgY29udGV4dC5ldmVudHMubGVuZ3RoID0gc3RhcnRFdmVudHNJbmRleDtcbiAgICAgIHN0YWNrID0gc3RhcnRTdGFjaztcbiAgICAgIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIGN1cnJlbnQgcG9pbnQgYSBiaXQgZm9yd2FyZCBpbiB0aGUgbGluZSB3aGVuIGl0XHUyMDE5cyBvbiBhIGNvbHVtblxuICAgKiBza2lwLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKiAgIE5vdGhpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBhY2NvdW50Rm9yUG90ZW50aWFsU2tpcCgpIHtcbiAgICBpZiAocG9pbnQubGluZSBpbiBjb2x1bW5TdGFydCAmJiBwb2ludC5jb2x1bW4gPCAyKSB7XG4gICAgICBwb2ludC5jb2x1bW4gPSBjb2x1bW5TdGFydFtwb2ludC5saW5lXTtcbiAgICAgIHBvaW50Lm9mZnNldCArPSBjb2x1bW5TdGFydFtwb2ludC5saW5lXSAtIDE7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBjaHVua3MgZnJvbSBhIHNsaWNlIG9mIGNodW5rcyBpbiB0aGUgcmFuZ2Ugb2YgYSB0b2tlbi5cbiAqXG4gKiBAcGFyYW0ge1JlYWRvbmx5QXJyYXk8Q2h1bms+fSBjaHVua3NcbiAqICAgQ2h1bmtzLlxuICogQHBhcmFtIHtQaWNrPFRva2VuLCAnZW5kJyB8ICdzdGFydCc+fSB0b2tlblxuICogICBUb2tlbi5cbiAqIEByZXR1cm5zIHtBcnJheTxDaHVuaz59XG4gKiAgIENodW5rcy5cbiAqL1xuZnVuY3Rpb24gc2xpY2VDaHVua3MoY2h1bmtzLCB0b2tlbikge1xuICBjb25zdCBzdGFydEluZGV4ID0gdG9rZW4uc3RhcnQuX2luZGV4O1xuICBjb25zdCBzdGFydEJ1ZmZlckluZGV4ID0gdG9rZW4uc3RhcnQuX2J1ZmZlckluZGV4O1xuICBjb25zdCBlbmRJbmRleCA9IHRva2VuLmVuZC5faW5kZXg7XG4gIGNvbnN0IGVuZEJ1ZmZlckluZGV4ID0gdG9rZW4uZW5kLl9idWZmZXJJbmRleDtcbiAgLyoqIEB0eXBlIHtBcnJheTxDaHVuaz59ICovXG4gIGxldCB2aWV3O1xuICBpZiAoc3RhcnRJbmRleCA9PT0gZW5kSW5kZXgpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBfYnVmZmVySW5kZXhgIGlzIHVzZWQgb24gc3RyaW5nIGNodW5rcy5cbiAgICB2aWV3ID0gW2NodW5rc1tzdGFydEluZGV4XS5zbGljZShzdGFydEJ1ZmZlckluZGV4LCBlbmRCdWZmZXJJbmRleCldO1xuICB9IGVsc2Uge1xuICAgIHZpZXcgPSBjaHVua3Muc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgIGlmIChzdGFydEJ1ZmZlckluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IGhlYWQgPSB2aWV3WzBdO1xuICAgICAgaWYgKHR5cGVvZiBoZWFkID09PSAnc3RyaW5nJykge1xuICAgICAgICB2aWV3WzBdID0gaGVhZC5zbGljZShzdGFydEJ1ZmZlckluZGV4KTtcbiAgICAgICAgLyogYzggaWdub3JlIG5leHQgNCAtLSB1c2VkIHRvIGJlIHVzZWQsIG5vIGxvbmdlciAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlldy5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5kQnVmZmVySW5kZXggPiAwKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBfYnVmZmVySW5kZXhgIGlzIHVzZWQgb24gc3RyaW5nIGNodW5rcy5cbiAgICAgIHZpZXcucHVzaChjaHVua3NbZW5kSW5kZXhdLnNsaWNlKDAsIGVuZEJ1ZmZlckluZGV4KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2aWV3O1xufVxuXG4vKipcbiAqIEdldCB0aGUgc3RyaW5nIHZhbHVlIG9mIGEgc2xpY2Ugb2YgY2h1bmtzLlxuICpcbiAqIEBwYXJhbSB7UmVhZG9ubHlBcnJheTxDaHVuaz59IGNodW5rc1xuICogICBDaHVua3MuXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IFtleHBhbmRUYWJzPWZhbHNlXVxuICogICBXaGV0aGVyIHRvIGV4cGFuZCB0YWJzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplQ2h1bmtzKGNodW5rcywgZXhwYW5kVGFicykge1xuICBsZXQgaW5kZXggPSAtMTtcbiAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgYXRUYWI7XG4gIHdoaWxlICgrK2luZGV4IDwgY2h1bmtzLmxlbmd0aCkge1xuICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2luZGV4XTtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gY2h1bms7XG4gICAgfSBlbHNlIHN3aXRjaCAoY2h1bmspIHtcbiAgICAgIGNhc2UgLTU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZSA9IFwiXFxyXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgLTQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZSA9IFwiXFxuXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgLTM6XG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZSA9IFwiXFxyXCIgKyBcIlxcblwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlIC0yOlxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWUgPSBleHBhbmRUYWJzID8gXCIgXCIgOiBcIlxcdFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlIC0xOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCFleHBhbmRUYWJzICYmIGF0VGFiKSBjb250aW51ZTtcbiAgICAgICAgICB2YWx1ZSA9IFwiIFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gQ3VycmVudGx5IG9ubHkgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLlxuICAgICAgICAgIHZhbHVlID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaHVuayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXRUYWIgPSBjaHVuayA9PT0gLTI7XG4gICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQuam9pbignJyk7XG59IiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIENyZWF0ZSxcbiAqICAgRnVsbE5vcm1hbGl6ZWRFeHRlbnNpb24sXG4gKiAgIEluaXRpYWxDb25zdHJ1Y3QsXG4gKiAgIFBhcnNlQ29udGV4dCxcbiAqICAgUGFyc2VPcHRpb25zXG4gKiB9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IGNvbWJpbmVFeHRlbnNpb25zIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY29tYmluZS1leHRlbnNpb25zJztcbmltcG9ydCB7IGNvbnRlbnQgfSBmcm9tICcuL2luaXRpYWxpemUvY29udGVudC5qcyc7XG5pbXBvcnQgeyBkb2N1bWVudCB9IGZyb20gJy4vaW5pdGlhbGl6ZS9kb2N1bWVudC5qcyc7XG5pbXBvcnQgeyBmbG93IH0gZnJvbSAnLi9pbml0aWFsaXplL2Zsb3cuanMnO1xuaW1wb3J0IHsgc3RyaW5nLCB0ZXh0IH0gZnJvbSAnLi9pbml0aWFsaXplL3RleHQuanMnO1xuaW1wb3J0ICogYXMgZGVmYXVsdENvbnN0cnVjdHMgZnJvbSAnLi9jb25zdHJ1Y3RzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVRva2VuaXplciB9IGZyb20gJy4vY3JlYXRlLXRva2VuaXplci5qcyc7XG5cbi8qKlxuICogQHBhcmFtIHtQYXJzZU9wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICogQHJldHVybnMge1BhcnNlQ29udGV4dH1cbiAqICAgUGFyc2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IGNvbnN0cnVjdHMgPSAvKiogQHR5cGUge0Z1bGxOb3JtYWxpemVkRXh0ZW5zaW9ufSAqL1xuICBjb21iaW5lRXh0ZW5zaW9ucyhbZGVmYXVsdENvbnN0cnVjdHMsIC4uLihzZXR0aW5ncy5leHRlbnNpb25zIHx8IFtdKV0pO1xuXG4gIC8qKiBAdHlwZSB7UGFyc2VDb250ZXh0fSAqL1xuICBjb25zdCBwYXJzZXIgPSB7XG4gICAgY29uc3RydWN0cyxcbiAgICBjb250ZW50OiBjcmVhdGUoY29udGVudCksXG4gICAgZGVmaW5lZDogW10sXG4gICAgZG9jdW1lbnQ6IGNyZWF0ZShkb2N1bWVudCksXG4gICAgZmxvdzogY3JlYXRlKGZsb3cpLFxuICAgIGxhenk6IHt9LFxuICAgIHN0cmluZzogY3JlYXRlKHN0cmluZyksXG4gICAgdGV4dDogY3JlYXRlKHRleHQpXG4gIH07XG4gIHJldHVybiBwYXJzZXI7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SW5pdGlhbENvbnN0cnVjdH0gaW5pdGlhbFxuICAgKiAgIENvbnN0cnVjdCB0byBzdGFydCB3aXRoLlxuICAgKiBAcmV0dXJucyB7Q3JlYXRlfVxuICAgKiAgIENyZWF0ZSBhIHRva2VuaXplci5cbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZShpbml0aWFsKSB7XG4gICAgcmV0dXJuIGNyZWF0b3I7XG4gICAgLyoqIEB0eXBlIHtDcmVhdGV9ICovXG4gICAgZnVuY3Rpb24gY3JlYXRvcihmcm9tKSB7XG4gICAgICByZXR1cm4gY3JlYXRlVG9rZW5pemVyKHBhcnNlciwgaW5pdGlhbCwgZnJvbSk7XG4gICAgfVxuICB9XG59IiwgIi8qKlxuICogQGltcG9ydCB7RXZlbnR9IGZyb20gJ21pY3JvbWFyay11dGlsLXR5cGVzJ1xuICovXG5cbmltcG9ydCB7IHN1YnRva2VuaXplIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemUnO1xuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBldmVudHNcbiAqICAgRXZlbnRzLlxuICogQHJldHVybnMge0FycmF5PEV2ZW50Pn1cbiAqICAgRXZlbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9zdHByb2Nlc3MoZXZlbnRzKSB7XG4gIHdoaWxlICghc3VidG9rZW5pemUoZXZlbnRzKSkge1xuICAgIC8vIEVtcHR5XG4gIH1cbiAgcmV0dXJuIGV2ZW50cztcbn0iLCAiLyoqXG4gKiBAaW1wb3J0IHtDaHVuaywgQ29kZSwgRW5jb2RpbmcsIFZhbHVlfSBmcm9tICdtaWNyb21hcmstdXRpbC10eXBlcydcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBQcmVwcm9jZXNzb3JcbiAqICAgUHJlcHJvY2VzcyBhIHZhbHVlLlxuICogQHBhcmFtIHtWYWx1ZX0gdmFsdWVcbiAqICAgVmFsdWUuXG4gKiBAcGFyYW0ge0VuY29kaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuY29kaW5nXVxuICogICBFbmNvZGluZyB3aGVuIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSAob3B0aW9uYWwpLlxuICogQHBhcmFtIHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuZD1mYWxzZV1cbiAqICAgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqIEByZXR1cm5zIHtBcnJheTxDaHVuaz59XG4gKiAgIENodW5rcy5cbiAqL1xuXG5jb25zdCBzZWFyY2ggPSAvW1xcMFxcdFxcblxccl0vZztcblxuLyoqXG4gKiBAcmV0dXJucyB7UHJlcHJvY2Vzc29yfVxuICogICBQcmVwcm9jZXNzIGEgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwcm9jZXNzKCkge1xuICBsZXQgY29sdW1uID0gMTtcbiAgbGV0IGJ1ZmZlciA9ICcnO1xuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBzdGFydCA9IHRydWU7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGF0Q2FycmlhZ2VSZXR1cm47XG4gIHJldHVybiBwcmVwcm9jZXNzb3I7XG5cbiAgLyoqIEB0eXBlIHtQcmVwcm9jZXNzb3J9ICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGZ1bmN0aW9uIHByZXByb2Nlc3Nvcih2YWx1ZSwgZW5jb2RpbmcsIGVuZCkge1xuICAgIC8qKiBAdHlwZSB7QXJyYXk8Q2h1bms+fSAqL1xuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgIC8qKiBAdHlwZSB7UmVnRXhwTWF0Y2hBcnJheSB8IG51bGx9ICovXG4gICAgbGV0IG1hdGNoO1xuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBuZXh0O1xuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBzdGFydFBvc2l0aW9uO1xuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBlbmRQb3NpdGlvbjtcbiAgICAvKiogQHR5cGUge0NvZGV9ICovXG4gICAgbGV0IGNvZGU7XG4gICAgdmFsdWUgPSBidWZmZXIgKyAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRvU3RyaW5nKCkgOiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcgfHwgdW5kZWZpbmVkKS5kZWNvZGUodmFsdWUpKTtcbiAgICBzdGFydFBvc2l0aW9uID0gMDtcbiAgICBidWZmZXIgPSAnJztcbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIC8vIFRvIGRvOiBgbWFya2Rvd24tcnNgIGFjdHVhbGx5IHBhcnNlcyBCT01zIChieXRlIG9yZGVyIG1hcmspLlxuICAgICAgaWYgKHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDY1Mjc5KSB7XG4gICAgICAgIHN0YXJ0UG9zaXRpb24rKztcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB3aGlsZSAoc3RhcnRQb3NpdGlvbiA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgc2VhcmNoLmxhc3RJbmRleCA9IHN0YXJ0UG9zaXRpb247XG4gICAgICBtYXRjaCA9IHNlYXJjaC5leGVjKHZhbHVlKTtcbiAgICAgIGVuZFBvc2l0aW9uID0gbWF0Y2ggJiYgbWF0Y2guaW5kZXggIT09IHVuZGVmaW5lZCA/IG1hdGNoLmluZGV4IDogdmFsdWUubGVuZ3RoO1xuICAgICAgY29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoZW5kUG9zaXRpb24pO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICBidWZmZXIgPSB2YWx1ZS5zbGljZShzdGFydFBvc2l0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoY29kZSA9PT0gMTAgJiYgc3RhcnRQb3NpdGlvbiA9PT0gZW5kUG9zaXRpb24gJiYgYXRDYXJyaWFnZVJldHVybikge1xuICAgICAgICBjaHVua3MucHVzaCgtMyk7XG4gICAgICAgIGF0Q2FycmlhZ2VSZXR1cm4gPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYXRDYXJyaWFnZVJldHVybikge1xuICAgICAgICAgIGNodW5rcy5wdXNoKC01KTtcbiAgICAgICAgICBhdENhcnJpYWdlUmV0dXJuID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICBjaHVua3MucHVzaCh2YWx1ZS5zbGljZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpO1xuICAgICAgICAgIGNvbHVtbiArPSBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaCg2NTUzMyk7XG4gICAgICAgICAgICAgIGNvbHVtbisrO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5leHQgPSBNYXRoLmNlaWwoY29sdW1uIC8gNCkgKiA0O1xuICAgICAgICAgICAgICBjaHVua3MucHVzaCgtMik7XG4gICAgICAgICAgICAgIHdoaWxlIChjb2x1bW4rKyA8IG5leHQpIGNodW5rcy5wdXNoKC0xKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goLTQpO1xuICAgICAgICAgICAgICBjb2x1bW4gPSAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhdENhcnJpYWdlUmV0dXJuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY29sdW1uID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhcnRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uICsgMTtcbiAgICB9XG4gICAgaWYgKGVuZCkge1xuICAgICAgaWYgKGF0Q2FycmlhZ2VSZXR1cm4pIGNodW5rcy5wdXNoKC01KTtcbiAgICAgIGlmIChidWZmZXIpIGNodW5rcy5wdXNoKGJ1ZmZlcik7XG4gICAgICBjaHVua3MucHVzaChudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIGNodW5rcztcbiAgfVxufSIsICIvKipcbiAqIEBpbXBvcnQge0VuY29kaW5nLCBWYWx1ZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLk9wdGlvbnN9IE9wdGlvbnNcbiAqL1xuXG5pbXBvcnQgeyBjb21waWxlIH0gZnJvbSAnLi9saWIvY29tcGlsZS5qcyc7XG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gJy4vbGliL3BhcnNlLmpzJztcbmltcG9ydCB7IHBvc3Rwcm9jZXNzIH0gZnJvbSAnLi9saWIvcG9zdHByb2Nlc3MuanMnO1xuaW1wb3J0IHsgcHJlcHJvY2VzcyB9IGZyb20gJy4vbGliL3ByZXByb2Nlc3MuanMnO1xuZXhwb3J0IHsgY29tcGlsZSB9IGZyb20gJy4vbGliL2NvbXBpbGUuanMnO1xuZXhwb3J0IHsgcGFyc2UgfSBmcm9tICcuL2xpYi9wYXJzZS5qcyc7XG5leHBvcnQgeyBwb3N0cHJvY2VzcyB9IGZyb20gJy4vbGliL3Bvc3Rwcm9jZXNzLmpzJztcbmV4cG9ydCB7IHByZXByb2Nlc3MgfSBmcm9tICcuL2xpYi9wcmVwcm9jZXNzLmpzJztcblxuLyoqXG4gKiBDb21waWxlIG1hcmtkb3duIHRvIEhUTUwuXG4gKlxuICogPiBOb3RlOiB3aGljaCBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZCBkZXBlbmRzIG9uIHRoZSBlbmdpbmUuXG4gKiA+IEZvciBpbmZvIG9uIE5vZGUuanMsIHNlZTpcbiAqID4gPGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvdXRpbC5odG1sI3doYXR3Zy1zdXBwb3J0ZWQtZW5jb2RpbmdzPi5cbiAqXG4gKiBAb3ZlcmxvYWRcbiAqIEBwYXJhbSB7VmFsdWV9IHZhbHVlXG4gKiAgIE1hcmtkb3duIHRvIHBhcnNlIChgc3RyaW5nYCBvciBgVWludDhBcnJheWApLlxuICogQHBhcmFtIHtFbmNvZGluZyB8IG51bGwgfCB1bmRlZmluZWR9IGVuY29kaW5nXG4gKiAgIENoYXJhY3RlciBlbmNvZGluZyB0byB1bmRlcnN0YW5kIGB2YWx1ZWAgYXMgd2hlbiBpdFx1MjAxOXMgYSBgVWludDhBcnJheWBcbiAqICAgKGBzdHJpbmdgLCBkZWZhdWx0OiBgJ3V0ZjgnYCkuXG4gKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAqICAgQ29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIENvbXBpbGVkIEhUTUwuXG4gKlxuICogQG92ZXJsb2FkXG4gKiBAcGFyYW0ge1ZhbHVlfSB2YWx1ZVxuICogICBNYXJrZG93biB0byBwYXJzZSAoYHN0cmluZ2Agb3IgYFVpbnQ4QXJyYXlgKS5cbiAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICogICBDb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgQ29tcGlsZWQgSFRNTC5cbiAqXG4gKiBAcGFyYW0ge1ZhbHVlfSB2YWx1ZVxuICogICBNYXJrZG93biB0byBwYXJzZSAoYHN0cmluZ2Agb3IgYFVpbnQ4QXJyYXlgKS5cbiAqIEBwYXJhbSB7RW5jb2RpbmcgfCBPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuY29kaW5nXVxuICogICBDaGFyYWN0ZXIgZW5jb2RpbmcgdG8gdW5kZXJzdGFuZCBgdmFsdWVgIGFzIHdoZW4gaXRcdTIwMTlzIGEgYFVpbnQ4QXJyYXlgXG4gKiAgIChgc3RyaW5nYCwgZGVmYXVsdDogYCd1dGY4J2ApLlxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBDb21waWxlZCBIVE1MLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWljcm9tYXJrKHZhbHVlLCBlbmNvZGluZywgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gY29tcGlsZShvcHRpb25zKShwb3N0cHJvY2VzcyhwYXJzZShvcHRpb25zKS5kb2N1bWVudCgpLndyaXRlKHByZXByb2Nlc3MoKSh2YWx1ZSwgZW5jb2RpbmcsIHRydWUpKSkpO1xufSIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBCcmVhayxcbiAqICAgQmxvY2txdW90ZSxcbiAqICAgQ29kZSxcbiAqICAgRGVmaW5pdGlvbixcbiAqICAgRW1waGFzaXMsXG4gKiAgIEhlYWRpbmcsXG4gKiAgIEh0bWwsXG4gKiAgIEltYWdlLFxuICogICBJbmxpbmVDb2RlLFxuICogICBMaW5rLFxuICogICBMaXN0SXRlbSxcbiAqICAgTGlzdCxcbiAqICAgTm9kZXMsXG4gKiAgIFBhcmFncmFwaCxcbiAqICAgUGhyYXNpbmdDb250ZW50LFxuICogICBSZWZlcmVuY2VUeXBlLFxuICogICBSb290LFxuICogICBTdHJvbmcsXG4gKiAgIFRleHQsXG4gKiAgIFRoZW1hdGljQnJlYWtcbiAqIH0gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtcbiAqICAgRW5jb2RpbmcsXG4gKiAgIEV2ZW50LFxuICogICBUb2tlbixcbiAqICAgVmFsdWVcbiAqIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtdHlwZXMnXG4gKiBAaW1wb3J0IHtQb2ludH0gZnJvbSAndW5pc3QnXG4gKiBAaW1wb3J0IHtcbiAqICAgQ29tcGlsZUNvbnRleHQsXG4gKiAgIENvbXBpbGVEYXRhLFxuICogICBDb25maWcsXG4gKiAgIEV4dGVuc2lvbixcbiAqICAgSGFuZGxlLFxuICogICBPbkVudGVyRXJyb3IsXG4gKiAgIE9wdGlvbnNcbiAqIH0gZnJvbSAnLi90eXBlcy5qcydcbiAqL1xuXG5pbXBvcnQgeyB0b1N0cmluZyB9IGZyb20gJ21kYXN0LXV0aWwtdG8tc3RyaW5nJztcbmltcG9ydCB7IHBhcnNlLCBwb3N0cHJvY2VzcywgcHJlcHJvY2VzcyB9IGZyb20gJ21pY3JvbWFyayc7XG5pbXBvcnQgeyBkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlIH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBkZWNvZGVTdHJpbmcgfSBmcm9tICdtaWNyb21hcmstdXRpbC1kZWNvZGUtc3RyaW5nJztcbmltcG9ydCB7IG5vcm1hbGl6ZUlkZW50aWZpZXIgfSBmcm9tICdtaWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllcic7XG5pbXBvcnQgeyBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZSB9IGZyb20gJ2RlY29kZS1uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlJztcbmltcG9ydCB7IHN0cmluZ2lmeVBvc2l0aW9uIH0gZnJvbSAndW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb24nO1xuY29uc3Qgb3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVHVybiBtYXJrZG93biBpbnRvIGEgc3ludGF4IHRyZWUuXG4gKlxuICogQG92ZXJsb2FkXG4gKiBAcGFyYW0ge1ZhbHVlfSB2YWx1ZVxuICogQHBhcmFtIHtFbmNvZGluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtlbmNvZGluZ11cbiAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICogQHJldHVybnMge1Jvb3R9XG4gKlxuICogQG92ZXJsb2FkXG4gKiBAcGFyYW0ge1ZhbHVlfSB2YWx1ZVxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7Um9vdH1cbiAqXG4gKiBAcGFyYW0ge1ZhbHVlfSB2YWx1ZVxuICogICBNYXJrZG93biB0byBwYXJzZS5cbiAqIEBwYXJhbSB7RW5jb2RpbmcgfCBPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuY29kaW5nXVxuICogICBDaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIHdoZW4gYHZhbHVlYCBpcyBgQnVmZmVyYC5cbiAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICogICBDb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge1Jvb3R9XG4gKiAgIG1kYXN0IHRyZWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWFya2Rvd24odmFsdWUsIGVuY29kaW5nLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBjb21waWxlcihvcHRpb25zKShwb3N0cHJvY2VzcyhwYXJzZShvcHRpb25zKS5kb2N1bWVudCgpLndyaXRlKHByZXByb2Nlc3MoKSh2YWx1ZSwgZW5jb2RpbmcsIHRydWUpKSkpO1xufVxuXG4vKipcbiAqIE5vdGUgdGhpcyBjb21waWxlciBvbmx5IHVuZGVyc3RhbmQgY29tcGxldGUgYnVmZmVyaW5nLCBub3Qgc3RyZWFtaW5nLlxuICpcbiAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICovXG5mdW5jdGlvbiBjb21waWxlcihvcHRpb25zKSB7XG4gIC8qKiBAdHlwZSB7Q29uZmlnfSAqL1xuICBjb25zdCBjb25maWcgPSB7XG4gICAgdHJhbnNmb3JtczogW10sXG4gICAgY2FuQ29udGFpbkVvbHM6IFsnZW1waGFzaXMnLCAnZnJhZ21lbnQnLCAnaGVhZGluZycsICdwYXJhZ3JhcGgnLCAnc3Ryb25nJ10sXG4gICAgZW50ZXI6IHtcbiAgICAgIGF1dG9saW5rOiBvcGVuZXIobGluayksXG4gICAgICBhdXRvbGlua1Byb3RvY29sOiBvbmVudGVyZGF0YSxcbiAgICAgIGF1dG9saW5rRW1haWw6IG9uZW50ZXJkYXRhLFxuICAgICAgYXR4SGVhZGluZzogb3BlbmVyKGhlYWRpbmcpLFxuICAgICAgYmxvY2tRdW90ZTogb3BlbmVyKGJsb2NrUXVvdGUpLFxuICAgICAgY2hhcmFjdGVyRXNjYXBlOiBvbmVudGVyZGF0YSxcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZTogb25lbnRlcmRhdGEsXG4gICAgICBjb2RlRmVuY2VkOiBvcGVuZXIoY29kZUZsb3cpLFxuICAgICAgY29kZUZlbmNlZEZlbmNlSW5mbzogYnVmZmVyLFxuICAgICAgY29kZUZlbmNlZEZlbmNlTWV0YTogYnVmZmVyLFxuICAgICAgY29kZUluZGVudGVkOiBvcGVuZXIoY29kZUZsb3csIGJ1ZmZlciksXG4gICAgICBjb2RlVGV4dDogb3BlbmVyKGNvZGVUZXh0LCBidWZmZXIpLFxuICAgICAgY29kZVRleHREYXRhOiBvbmVudGVyZGF0YSxcbiAgICAgIGRhdGE6IG9uZW50ZXJkYXRhLFxuICAgICAgY29kZUZsb3dWYWx1ZTogb25lbnRlcmRhdGEsXG4gICAgICBkZWZpbml0aW9uOiBvcGVuZXIoZGVmaW5pdGlvbiksXG4gICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IGJ1ZmZlcixcbiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogYnVmZmVyLFxuICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBidWZmZXIsXG4gICAgICBlbXBoYXNpczogb3BlbmVyKGVtcGhhc2lzKSxcbiAgICAgIGhhcmRCcmVha0VzY2FwZTogb3BlbmVyKGhhcmRCcmVhayksXG4gICAgICBoYXJkQnJlYWtUcmFpbGluZzogb3BlbmVyKGhhcmRCcmVhayksXG4gICAgICBodG1sRmxvdzogb3BlbmVyKGh0bWwsIGJ1ZmZlciksXG4gICAgICBodG1sRmxvd0RhdGE6IG9uZW50ZXJkYXRhLFxuICAgICAgaHRtbFRleHQ6IG9wZW5lcihodG1sLCBidWZmZXIpLFxuICAgICAgaHRtbFRleHREYXRhOiBvbmVudGVyZGF0YSxcbiAgICAgIGltYWdlOiBvcGVuZXIoaW1hZ2UpLFxuICAgICAgbGFiZWw6IGJ1ZmZlcixcbiAgICAgIGxpbms6IG9wZW5lcihsaW5rKSxcbiAgICAgIGxpc3RJdGVtOiBvcGVuZXIobGlzdEl0ZW0pLFxuICAgICAgbGlzdEl0ZW1WYWx1ZTogb25lbnRlcmxpc3RpdGVtdmFsdWUsXG4gICAgICBsaXN0T3JkZXJlZDogb3BlbmVyKGxpc3QsIG9uZW50ZXJsaXN0b3JkZXJlZCksXG4gICAgICBsaXN0VW5vcmRlcmVkOiBvcGVuZXIobGlzdCksXG4gICAgICBwYXJhZ3JhcGg6IG9wZW5lcihwYXJhZ3JhcGgpLFxuICAgICAgcmVmZXJlbmNlOiBvbmVudGVycmVmZXJlbmNlLFxuICAgICAgcmVmZXJlbmNlU3RyaW5nOiBidWZmZXIsXG4gICAgICByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOiBidWZmZXIsXG4gICAgICByZXNvdXJjZVRpdGxlU3RyaW5nOiBidWZmZXIsXG4gICAgICBzZXRleHRIZWFkaW5nOiBvcGVuZXIoaGVhZGluZyksXG4gICAgICBzdHJvbmc6IG9wZW5lcihzdHJvbmcpLFxuICAgICAgdGhlbWF0aWNCcmVhazogb3BlbmVyKHRoZW1hdGljQnJlYWspXG4gICAgfSxcbiAgICBleGl0OiB7XG4gICAgICBhdHhIZWFkaW5nOiBjbG9zZXIoKSxcbiAgICAgIGF0eEhlYWRpbmdTZXF1ZW5jZTogb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlLFxuICAgICAgYXV0b2xpbms6IGNsb3NlcigpLFxuICAgICAgYXV0b2xpbmtFbWFpbDogb25leGl0YXV0b2xpbmtlbWFpbCxcbiAgICAgIGF1dG9saW5rUHJvdG9jb2w6IG9uZXhpdGF1dG9saW5rcHJvdG9jb2wsXG4gICAgICBibG9ja1F1b3RlOiBjbG9zZXIoKSxcbiAgICAgIGNoYXJhY3RlckVzY2FwZVZhbHVlOiBvbmV4aXRkYXRhLFxuICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcixcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWM6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcixcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSxcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZTogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlLFxuICAgICAgY29kZUZlbmNlZDogY2xvc2VyKG9uZXhpdGNvZGVmZW5jZWQpLFxuICAgICAgY29kZUZlbmNlZEZlbmNlOiBvbmV4aXRjb2RlZmVuY2VkZmVuY2UsXG4gICAgICBjb2RlRmVuY2VkRmVuY2VJbmZvOiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VpbmZvLFxuICAgICAgY29kZUZlbmNlZEZlbmNlTWV0YTogb25leGl0Y29kZWZlbmNlZGZlbmNlbWV0YSxcbiAgICAgIGNvZGVGbG93VmFsdWU6IG9uZXhpdGRhdGEsXG4gICAgICBjb2RlSW5kZW50ZWQ6IGNsb3NlcihvbmV4aXRjb2RlaW5kZW50ZWQpLFxuICAgICAgY29kZVRleHQ6IGNsb3NlcihvbmV4aXRjb2RldGV4dCksXG4gICAgICBjb2RlVGV4dERhdGE6IG9uZXhpdGRhdGEsXG4gICAgICBkYXRhOiBvbmV4aXRkYXRhLFxuICAgICAgZGVmaW5pdGlvbjogY2xvc2VyKCksXG4gICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IG9uZXhpdGRlZmluaXRpb25kZXN0aW5hdGlvbnN0cmluZyxcbiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nLFxuICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9udGl0bGVzdHJpbmcsXG4gICAgICBlbXBoYXNpczogY2xvc2VyKCksXG4gICAgICBoYXJkQnJlYWtFc2NhcGU6IGNsb3NlcihvbmV4aXRoYXJkYnJlYWspLFxuICAgICAgaGFyZEJyZWFrVHJhaWxpbmc6IGNsb3NlcihvbmV4aXRoYXJkYnJlYWspLFxuICAgICAgaHRtbEZsb3c6IGNsb3NlcihvbmV4aXRodG1sZmxvdyksXG4gICAgICBodG1sRmxvd0RhdGE6IG9uZXhpdGRhdGEsXG4gICAgICBodG1sVGV4dDogY2xvc2VyKG9uZXhpdGh0bWx0ZXh0KSxcbiAgICAgIGh0bWxUZXh0RGF0YTogb25leGl0ZGF0YSxcbiAgICAgIGltYWdlOiBjbG9zZXIob25leGl0aW1hZ2UpLFxuICAgICAgbGFiZWw6IG9uZXhpdGxhYmVsLFxuICAgICAgbGFiZWxUZXh0OiBvbmV4aXRsYWJlbHRleHQsXG4gICAgICBsaW5lRW5kaW5nOiBvbmV4aXRsaW5lZW5kaW5nLFxuICAgICAgbGluazogY2xvc2VyKG9uZXhpdGxpbmspLFxuICAgICAgbGlzdEl0ZW06IGNsb3NlcigpLFxuICAgICAgbGlzdE9yZGVyZWQ6IGNsb3NlcigpLFxuICAgICAgbGlzdFVub3JkZXJlZDogY2xvc2VyKCksXG4gICAgICBwYXJhZ3JhcGg6IGNsb3NlcigpLFxuICAgICAgcmVmZXJlbmNlU3RyaW5nOiBvbmV4aXRyZWZlcmVuY2VzdHJpbmcsXG4gICAgICByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOiBvbmV4aXRyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nLFxuICAgICAgcmVzb3VyY2VUaXRsZVN0cmluZzogb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZyxcbiAgICAgIHJlc291cmNlOiBvbmV4aXRyZXNvdXJjZSxcbiAgICAgIHNldGV4dEhlYWRpbmc6IGNsb3NlcihvbmV4aXRzZXRleHRoZWFkaW5nKSxcbiAgICAgIHNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2U6IG9uZXhpdHNldGV4dGhlYWRpbmdsaW5lc2VxdWVuY2UsXG4gICAgICBzZXRleHRIZWFkaW5nVGV4dDogb25leGl0c2V0ZXh0aGVhZGluZ3RleHQsXG4gICAgICBzdHJvbmc6IGNsb3NlcigpLFxuICAgICAgdGhlbWF0aWNCcmVhazogY2xvc2VyKClcbiAgICB9XG4gIH07XG4gIGNvbmZpZ3VyZShjb25maWcsIChvcHRpb25zIHx8IHt9KS5tZGFzdEV4dGVuc2lvbnMgfHwgW10pO1xuXG4gIC8qKiBAdHlwZSB7Q29tcGlsZURhdGF9ICovXG4gIGNvbnN0IGRhdGEgPSB7fTtcbiAgcmV0dXJuIGNvbXBpbGU7XG5cbiAgLyoqXG4gICAqIFR1cm4gbWljcm9tYXJrIGV2ZW50cyBpbnRvIGFuIG1kYXN0IHRyZWUuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBldmVudHNcbiAgICogICBFdmVudHMuXG4gICAqIEByZXR1cm5zIHtSb290fVxuICAgKiAgIG1kYXN0IHRyZWUuXG4gICAqL1xuICBmdW5jdGlvbiBjb21waWxlKGV2ZW50cykge1xuICAgIC8qKiBAdHlwZSB7Um9vdH0gKi9cbiAgICBsZXQgdHJlZSA9IHtcbiAgICAgIHR5cGU6ICdyb290JyxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG4gICAgLyoqIEB0eXBlIHtPbWl0PENvbXBpbGVDb250ZXh0LCAnc2xpY2VTZXJpYWxpemUnPn0gKi9cbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgc3RhY2s6IFt0cmVlXSxcbiAgICAgIHRva2VuU3RhY2s6IFtdLFxuICAgICAgY29uZmlnLFxuICAgICAgZW50ZXIsXG4gICAgICBleGl0LFxuICAgICAgYnVmZmVyLFxuICAgICAgcmVzdW1lLFxuICAgICAgZGF0YVxuICAgIH07XG4gICAgLyoqIEB0eXBlIHtBcnJheTxudW1iZXI+fSAqL1xuICAgIGNvbnN0IGxpc3RTdGFjayA9IFtdO1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIHdoaWxlICgrK2luZGV4IDwgZXZlbnRzLmxlbmd0aCkge1xuICAgICAgLy8gV2UgcHJlcHJvY2VzcyBsaXN0cyB0byBhZGQgYGxpc3RJdGVtYCB0b2tlbnMsIGFuZCB0byBpbmZlciB3aGV0aGVyXG4gICAgICAvLyBpdGVtcyB0aGUgbGlzdCBpdHNlbGYgYXJlIHNwcmVhZCBvdXQuXG4gICAgICBpZiAoZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSBcImxpc3RPcmRlcmVkXCIgfHwgZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSBcImxpc3RVbm9yZGVyZWRcIikge1xuICAgICAgICBpZiAoZXZlbnRzW2luZGV4XVswXSA9PT0gJ2VudGVyJykge1xuICAgICAgICAgIGxpc3RTdGFjay5wdXNoKGluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YWlsID0gbGlzdFN0YWNrLnBvcCgpO1xuICAgICAgICAgIGluZGV4ID0gcHJlcGFyZUxpc3QoZXZlbnRzLCB0YWlsLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGV2ZW50cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBjb25maWdbZXZlbnRzW2luZGV4XVswXV07XG4gICAgICBpZiAob3duLmNhbGwoaGFuZGxlciwgZXZlbnRzW2luZGV4XVsxXS50eXBlKSkge1xuICAgICAgICBoYW5kbGVyW2V2ZW50c1tpbmRleF1bMV0udHlwZV0uY2FsbChPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICBzbGljZVNlcmlhbGl6ZTogZXZlbnRzW2luZGV4XVsyXS5zbGljZVNlcmlhbGl6ZVxuICAgICAgICB9LCBjb250ZXh0KSwgZXZlbnRzW2luZGV4XVsxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRva2VucyBzdGlsbCBiZWluZyBvcGVuLlxuICAgIGlmIChjb250ZXh0LnRva2VuU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFpbCA9IGNvbnRleHQudG9rZW5TdGFja1tjb250ZXh0LnRva2VuU3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBoYW5kbGVyID0gdGFpbFsxXSB8fCBkZWZhdWx0T25FcnJvcjtcbiAgICAgIGhhbmRsZXIuY2FsbChjb250ZXh0LCB1bmRlZmluZWQsIHRhaWxbMF0pO1xuICAgIH1cblxuICAgIC8vIEZpZ3VyZSBvdXQgYHJvb3RgIHBvc2l0aW9uLlxuICAgIHRyZWUucG9zaXRpb24gPSB7XG4gICAgICBzdGFydDogcG9pbnQoZXZlbnRzLmxlbmd0aCA+IDAgPyBldmVudHNbMF1bMV0uc3RhcnQgOiB7XG4gICAgICAgIGxpbmU6IDEsXG4gICAgICAgIGNvbHVtbjogMSxcbiAgICAgICAgb2Zmc2V0OiAwXG4gICAgICB9KSxcbiAgICAgIGVuZDogcG9pbnQoZXZlbnRzLmxlbmd0aCA+IDAgPyBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDJdWzFdLmVuZCA6IHtcbiAgICAgICAgbGluZTogMSxcbiAgICAgICAgY29sdW1uOiAxLFxuICAgICAgICBvZmZzZXQ6IDBcbiAgICAgIH0pXG4gICAgfTtcblxuICAgIC8vIENhbGwgdHJhbnNmb3Jtcy5cbiAgICBpbmRleCA9IC0xO1xuICAgIHdoaWxlICgrK2luZGV4IDwgY29uZmlnLnRyYW5zZm9ybXMubGVuZ3RoKSB7XG4gICAgICB0cmVlID0gY29uZmlnLnRyYW5zZm9ybXNbaW5kZXhdKHRyZWUpIHx8IHRyZWU7XG4gICAgfVxuICAgIHJldHVybiB0cmVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBldmVudHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGZ1bmN0aW9uIHByZXBhcmVMaXN0KGV2ZW50cywgc3RhcnQsIGxlbmd0aCkge1xuICAgIGxldCBpbmRleCA9IHN0YXJ0IC0gMTtcbiAgICBsZXQgY29udGFpbmVyQmFsYW5jZSA9IC0xO1xuICAgIGxldCBsaXN0U3ByZWFkID0gZmFsc2U7XG4gICAgLyoqIEB0eXBlIHtUb2tlbiB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgbGlzdEl0ZW07XG4gICAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gICAgbGV0IGxpbmVJbmRleDtcbiAgICAvKiogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgZmlyc3RCbGFua0xpbmVJbmRleDtcbiAgICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gICAgbGV0IGF0TWFya2VyO1xuICAgIHdoaWxlICgrK2luZGV4IDw9IGxlbmd0aCkge1xuICAgICAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXhdO1xuICAgICAgc3dpdGNoIChldmVudFsxXS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJsaXN0VW5vcmRlcmVkXCI6XG4gICAgICAgIGNhc2UgXCJsaXN0T3JkZXJlZFwiOlxuICAgICAgICBjYXNlIFwiYmxvY2tRdW90ZVwiOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChldmVudFswXSA9PT0gJ2VudGVyJykge1xuICAgICAgICAgICAgICBjb250YWluZXJCYWxhbmNlKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb250YWluZXJCYWxhbmNlLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhdE1hcmtlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcImxpbmVFbmRpbmdCbGFua1wiOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChldmVudFswXSA9PT0gJ2VudGVyJykge1xuICAgICAgICAgICAgICBpZiAobGlzdEl0ZW0gJiYgIWF0TWFya2VyICYmICFjb250YWluZXJCYWxhbmNlICYmICFmaXJzdEJsYW5rTGluZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgZmlyc3RCbGFua0xpbmVJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGF0TWFya2VyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFwibGluZVByZWZpeFwiOlxuICAgICAgICBjYXNlIFwibGlzdEl0ZW1WYWx1ZVwiOlxuICAgICAgICBjYXNlIFwibGlzdEl0ZW1NYXJrZXJcIjpcbiAgICAgICAgY2FzZSBcImxpc3RJdGVtUHJlZml4XCI6XG4gICAgICAgIGNhc2UgXCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2VcIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBFbXB0eS5cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGF0TWFya2VyID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghY29udGFpbmVyQmFsYW5jZSAmJiBldmVudFswXSA9PT0gJ2VudGVyJyAmJiBldmVudFsxXS50eXBlID09PSBcImxpc3RJdGVtUHJlZml4XCIgfHwgY29udGFpbmVyQmFsYW5jZSA9PT0gLTEgJiYgZXZlbnRbMF0gPT09ICdleGl0JyAmJiAoZXZlbnRbMV0udHlwZSA9PT0gXCJsaXN0VW5vcmRlcmVkXCIgfHwgZXZlbnRbMV0udHlwZSA9PT0gXCJsaXN0T3JkZXJlZFwiKSkge1xuICAgICAgICBpZiAobGlzdEl0ZW0pIHtcbiAgICAgICAgICBsZXQgdGFpbEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgbGluZUluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHdoaWxlICh0YWlsSW5kZXgtLSkge1xuICAgICAgICAgICAgY29uc3QgdGFpbEV2ZW50ID0gZXZlbnRzW3RhaWxJbmRleF07XG4gICAgICAgICAgICBpZiAodGFpbEV2ZW50WzFdLnR5cGUgPT09IFwibGluZUVuZGluZ1wiIHx8IHRhaWxFdmVudFsxXS50eXBlID09PSBcImxpbmVFbmRpbmdCbGFua1wiKSB7XG4gICAgICAgICAgICAgIGlmICh0YWlsRXZlbnRbMF0gPT09ICdleGl0JykgY29udGludWU7XG4gICAgICAgICAgICAgIGlmIChsaW5lSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBldmVudHNbbGluZUluZGV4XVsxXS50eXBlID0gXCJsaW5lRW5kaW5nQmxhbmtcIjtcbiAgICAgICAgICAgICAgICBsaXN0U3ByZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0YWlsRXZlbnRbMV0udHlwZSA9IFwibGluZUVuZGluZ1wiO1xuICAgICAgICAgICAgICBsaW5lSW5kZXggPSB0YWlsSW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhaWxFdmVudFsxXS50eXBlID09PSBcImxpbmVQcmVmaXhcIiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gXCJibG9ja1F1b3RlUHJlZml4XCIgfHwgdGFpbEV2ZW50WzFdLnR5cGUgPT09IFwiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2VcIiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gXCJibG9ja1F1b3RlTWFya2VyXCIgfHwgdGFpbEV2ZW50WzFdLnR5cGUgPT09IFwibGlzdEl0ZW1JbmRlbnRcIikge1xuICAgICAgICAgICAgICAvLyBFbXB0eVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaXJzdEJsYW5rTGluZUluZGV4ICYmICghbGluZUluZGV4IHx8IGZpcnN0QmxhbmtMaW5lSW5kZXggPCBsaW5lSW5kZXgpKSB7XG4gICAgICAgICAgICBsaXN0SXRlbS5fc3ByZWFkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGaXggcG9zaXRpb24uXG4gICAgICAgICAgbGlzdEl0ZW0uZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgbGluZUluZGV4ID8gZXZlbnRzW2xpbmVJbmRleF1bMV0uc3RhcnQgOiBldmVudFsxXS5lbmQpO1xuICAgICAgICAgIGV2ZW50cy5zcGxpY2UobGluZUluZGV4IHx8IGluZGV4LCAwLCBbJ2V4aXQnLCBsaXN0SXRlbSwgZXZlbnRbMl1dKTtcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgIGxlbmd0aCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGxpc3QgaXRlbS5cbiAgICAgICAgaWYgKGV2ZW50WzFdLnR5cGUgPT09IFwibGlzdEl0ZW1QcmVmaXhcIikge1xuICAgICAgICAgIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdsaXN0SXRlbScsXG4gICAgICAgICAgICBfc3ByZWFkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBldmVudFsxXS5zdGFydCksXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB3ZVx1MjAxOWxsIGFkZCBgZW5kYCBpbiBhIHNlY29uZC5cbiAgICAgICAgICAgIGVuZDogdW5kZWZpbmVkXG4gICAgICAgICAgfTtcbiAgICAgICAgICBsaXN0SXRlbSA9IGl0ZW07XG4gICAgICAgICAgZXZlbnRzLnNwbGljZShpbmRleCwgMCwgWydlbnRlcicsIGl0ZW0sIGV2ZW50WzJdXSk7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICBsZW5ndGgrKztcbiAgICAgICAgICBmaXJzdEJsYW5rTGluZUluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGF0TWFya2VyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBldmVudHNbc3RhcnRdWzFdLl9zcHJlYWQgPSBsaXN0U3ByZWFkO1xuICAgIHJldHVybiBsZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIG9wZW5lciBoYW5kbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7KHRva2VuOiBUb2tlbikgPT4gTm9kZXN9IGNyZWF0ZVxuICAgKiAgIENyZWF0ZSBhIG5vZGUuXG4gICAqIEBwYXJhbSB7SGFuZGxlIHwgdW5kZWZpbmVkfSBbYW5kXVxuICAgKiAgIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGFsc28gcnVuLlxuICAgKiBAcmV0dXJucyB7SGFuZGxlfVxuICAgKiAgIEhhbmRsZS5cbiAgICovXG4gIGZ1bmN0aW9uIG9wZW5lcihjcmVhdGUsIGFuZCkge1xuICAgIHJldHVybiBvcGVuO1xuXG4gICAgLyoqXG4gICAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgICAqIEBwYXJhbSB7VG9rZW59IHRva2VuXG4gICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvcGVuKHRva2VuKSB7XG4gICAgICBlbnRlci5jYWxsKHRoaXMsIGNyZWF0ZSh0b2tlbiksIHRva2VuKTtcbiAgICAgIGlmIChhbmQpIGFuZC5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge0NvbXBpbGVDb250ZXh0WydidWZmZXInXX1cbiAgICovXG4gIGZ1bmN0aW9uIGJ1ZmZlcigpIHtcbiAgICB0aGlzLnN0YWNrLnB1c2goe1xuICAgICAgdHlwZTogJ2ZyYWdtZW50JyxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtDb21waWxlQ29udGV4dFsnZW50ZXInXX1cbiAgICovXG4gIGZ1bmN0aW9uIGVudGVyKG5vZGUsIHRva2VuLCBlcnJvckhhbmRsZXIpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgLyoqIEB0eXBlIHtBcnJheTxOb2Rlcz59ICovXG4gICAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG4gICAgc2libGluZ3MucHVzaChub2RlKTtcbiAgICB0aGlzLnN0YWNrLnB1c2gobm9kZSk7XG4gICAgdGhpcy50b2tlblN0YWNrLnB1c2goW3Rva2VuLCBlcnJvckhhbmRsZXIgfHwgdW5kZWZpbmVkXSk7XG4gICAgbm9kZS5wb3NpdGlvbiA9IHtcbiAgICAgIHN0YXJ0OiBwb2ludCh0b2tlbi5zdGFydCksXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgZW5kYCB3aWxsIGJlIHBhdGNoZWQgbGF0ZXIuXG4gICAgICBlbmQ6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvc2VyIGhhbmRsZS5cbiAgICpcbiAgICogQHBhcmFtIHtIYW5kbGUgfCB1bmRlZmluZWR9IFthbmRdXG4gICAqICAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gYWxzbyBydW4uXG4gICAqIEByZXR1cm5zIHtIYW5kbGV9XG4gICAqICAgSGFuZGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xvc2VyKGFuZCkge1xuICAgIHJldHVybiBjbG9zZTtcblxuICAgIC8qKlxuICAgICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlblxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvc2UodG9rZW4pIHtcbiAgICAgIGlmIChhbmQpIGFuZC5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICAgIGV4aXQuY2FsbCh0aGlzLCB0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtDb21waWxlQ29udGV4dFsnZXhpdCddfVxuICAgKi9cbiAgZnVuY3Rpb24gZXhpdCh0b2tlbiwgb25FeGl0RXJyb3IpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICBjb25zdCBvcGVuID0gdGhpcy50b2tlblN0YWNrLnBvcCgpO1xuICAgIGlmICghb3Blbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2xvc2UgYCcgKyB0b2tlbi50eXBlICsgJ2AgKCcgKyBzdHJpbmdpZnlQb3NpdGlvbih7XG4gICAgICAgIHN0YXJ0OiB0b2tlbi5zdGFydCxcbiAgICAgICAgZW5kOiB0b2tlbi5lbmRcbiAgICAgIH0pICsgJyk6IGl0XHUyMDE5cyBub3Qgb3BlbicpO1xuICAgIH0gZWxzZSBpZiAob3BlblswXS50eXBlICE9PSB0b2tlbi50eXBlKSB7XG4gICAgICBpZiAob25FeGl0RXJyb3IpIHtcbiAgICAgICAgb25FeGl0RXJyb3IuY2FsbCh0aGlzLCB0b2tlbiwgb3BlblswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gb3BlblsxXSB8fCBkZWZhdWx0T25FcnJvcjtcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIHRva2VuLCBvcGVuWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbm9kZS5wb3NpdGlvbi5lbmQgPSBwb2ludCh0b2tlbi5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtDb21waWxlQ29udGV4dFsncmVzdW1lJ119XG4gICAqL1xuICBmdW5jdGlvbiByZXN1bWUoKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nKHRoaXMuc3RhY2sucG9wKCkpO1xuICB9XG5cbiAgLy9cbiAgLy8gSGFuZGxlcnMuXG4gIC8vXG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZW50ZXJsaXN0b3JkZXJlZCgpIHtcbiAgICB0aGlzLmRhdGEuZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW12YWx1ZSh0b2tlbikge1xuICAgIGlmICh0aGlzLmRhdGEuZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlKSB7XG4gICAgICBjb25zdCBhbmNlc3RvciA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAyXTtcbiAgICAgIGFuY2VzdG9yLnN0YXJ0ID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLCAxMCk7XG4gICAgICB0aGlzLmRhdGEuZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VpbmZvKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgbm9kZS5sYW5nID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VtZXRhKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgbm9kZS5tZXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2UoKSB7XG4gICAgLy8gRXhpdCBpZiB0aGlzIGlzIHRoZSBjbG9zaW5nIGZlbmNlLlxuICAgIGlmICh0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGUpIHJldHVybjtcbiAgICB0aGlzLmJ1ZmZlcigpO1xuICAgIHRoaXMuZGF0YS5mbG93Q29kZUluc2lkZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZCgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIG5vZGUudmFsdWUgPSBkYXRhLnJlcGxhY2UoL14oXFxyP1xcbnxcXHIpfChcXHI/XFxufFxccikkL2csICcnKTtcbiAgICB0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0Y29kZWluZGVudGVkKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgbm9kZS52YWx1ZSA9IGRhdGEucmVwbGFjZSgvKFxccj9cXG58XFxyKSQvZywgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb25sYWJlbHN0cmluZyh0b2tlbikge1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5yZXN1bWUoKTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIG5vZGUubGFiZWwgPSBsYWJlbDtcbiAgICBub2RlLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb250aXRsZXN0cmluZygpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIG5vZGUudGl0bGUgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb25kZXN0aW5hdGlvbnN0cmluZygpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIG5vZGUudXJsID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRhdHhoZWFkaW5nc2VxdWVuY2UodG9rZW4pIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGlmICghbm9kZS5kZXB0aCkge1xuICAgICAgY29uc3QgZGVwdGggPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5sZW5ndGg7XG4gICAgICBub2RlLmRlcHRoID0gZGVwdGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmd0ZXh0KCkge1xuICAgIHRoaXMuZGF0YS5zZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlKHRva2VuKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgICBub2RlLmRlcHRoID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikuY29kZVBvaW50QXQoMCkgPT09IDYxID8gMSA6IDI7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZygpIHtcbiAgICB0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZW50ZXJkYXRhKHRva2VuKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgICAvKiogQHR5cGUge0FycmF5PE5vZGVzPn0gKi9cbiAgICBjb25zdCBzaWJsaW5ncyA9IG5vZGUuY2hpbGRyZW47XG4gICAgbGV0IHRhaWwgPSBzaWJsaW5nc1tzaWJsaW5ncy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIXRhaWwgfHwgdGFpbC50eXBlICE9PSAndGV4dCcpIHtcbiAgICAgIC8vIEFkZCBhIG5ldyB0ZXh0IG5vZGUuXG4gICAgICB0YWlsID0gdGV4dCgpO1xuICAgICAgdGFpbC5wb3NpdGlvbiA9IHtcbiAgICAgICAgc3RhcnQ6IHBvaW50KHRva2VuLnN0YXJ0KSxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2VcdTIwMTlsbCBhZGQgYGVuZGAgbGF0ZXIuXG4gICAgICAgIGVuZDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgc2libGluZ3MucHVzaCh0YWlsKTtcbiAgICB9XG4gICAgdGhpcy5zdGFjay5wdXNoKHRhaWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0ZGF0YSh0b2tlbikge1xuICAgIGNvbnN0IHRhaWwgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgIHRhaWwudmFsdWUgKz0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7XG4gICAgdGFpbC5wb3NpdGlvbi5lbmQgPSBwb2ludCh0b2tlbi5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0bGluZWVuZGluZyh0b2tlbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgLy8gSWYgd2VcdTIwMTlyZSBhdCBhIGhhcmQgYnJlYWssIGluY2x1ZGUgdGhlIGxpbmUgZW5kaW5nIGluIHRoZXJlLlxuICAgIGlmICh0aGlzLmRhdGEuYXRIYXJkQnJlYWspIHtcbiAgICAgIGNvbnN0IHRhaWwgPSBjb250ZXh0LmNoaWxkcmVuW2NvbnRleHQuY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICB0YWlsLnBvc2l0aW9uLmVuZCA9IHBvaW50KHRva2VuLmVuZCk7XG4gICAgICB0aGlzLmRhdGEuYXRIYXJkQnJlYWsgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRhLnNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmcgJiYgY29uZmlnLmNhbkNvbnRhaW5Fb2xzLmluY2x1ZGVzKGNvbnRleHQudHlwZSkpIHtcbiAgICAgIG9uZW50ZXJkYXRhLmNhbGwodGhpcywgdG9rZW4pO1xuICAgICAgb25leGl0ZGF0YS5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRoYXJkYnJlYWsoKSB7XG4gICAgdGhpcy5kYXRhLmF0SGFyZEJyZWFrID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdGh0bWxmbG93KCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgbm9kZS52YWx1ZSA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRodG1sdGV4dCgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIG5vZGUudmFsdWUgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0Y29kZXRleHQoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdW1lKCk7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgICBub2RlLnZhbHVlID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdGxpbmsoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgICAvLyBOb3RlOiB0aGVyZSBhcmUgYWxzbyBgaWRlbnRpZmllcmAgYW5kIGBsYWJlbGAgZmllbGRzIG9uIHRoaXMgbGluayBub2RlIVxuICAgIC8vIFRoZXNlIGFyZSB1c2VkIC8gY2xlYW5lZCBoZXJlLlxuXG4gICAgLy8gVG8gZG86IGNsZWFuLlxuICAgIGlmICh0aGlzLmRhdGEuaW5SZWZlcmVuY2UpIHtcbiAgICAgIC8qKiBAdHlwZSB7UmVmZXJlbmNlVHlwZX0gKi9cbiAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSB8fCAnc2hvcnRjdXQnO1xuICAgICAgbm9kZS50eXBlICs9ICdSZWZlcmVuY2UnO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgbm9kZS5yZWZlcmVuY2VUeXBlID0gcmVmZXJlbmNlVHlwZTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IG11dGF0ZS5cbiAgICAgIGRlbGV0ZSBub2RlLnVybDtcbiAgICAgIGRlbGV0ZSBub2RlLnRpdGxlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBtdXRhdGUuXG4gICAgICBkZWxldGUgbm9kZS5pZGVudGlmaWVyO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgZGVsZXRlIG5vZGUubGFiZWw7XG4gICAgfVxuICAgIHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0aW1hZ2UoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgICAvLyBOb3RlOiB0aGVyZSBhcmUgYWxzbyBgaWRlbnRpZmllcmAgYW5kIGBsYWJlbGAgZmllbGRzIG9uIHRoaXMgbGluayBub2RlIVxuICAgIC8vIFRoZXNlIGFyZSB1c2VkIC8gY2xlYW5lZCBoZXJlLlxuXG4gICAgLy8gVG8gZG86IGNsZWFuLlxuICAgIGlmICh0aGlzLmRhdGEuaW5SZWZlcmVuY2UpIHtcbiAgICAgIC8qKiBAdHlwZSB7UmVmZXJlbmNlVHlwZX0gKi9cbiAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSB8fCAnc2hvcnRjdXQnO1xuICAgICAgbm9kZS50eXBlICs9ICdSZWZlcmVuY2UnO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgbm9kZS5yZWZlcmVuY2VUeXBlID0gcmVmZXJlbmNlVHlwZTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IG11dGF0ZS5cbiAgICAgIGRlbGV0ZSBub2RlLnVybDtcbiAgICAgIGRlbGV0ZSBub2RlLnRpdGxlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBtdXRhdGUuXG4gICAgICBkZWxldGUgbm9kZS5pZGVudGlmaWVyO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgZGVsZXRlIG5vZGUubGFiZWw7XG4gICAgfVxuICAgIHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0bGFiZWx0ZXh0KHRva2VuKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7XG4gICAgY29uc3QgYW5jZXN0b3IgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl07XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogc3Rhc2ggdGhpcyBvbiB0aGUgbm9kZSwgYXMgaXQgbWlnaHQgYmVjb21lIGEgcmVmZXJlbmNlXG4gICAgLy8gbGF0ZXIuXG4gICAgYW5jZXN0b3IubGFiZWwgPSBkZWNvZGVTdHJpbmcoc3RyaW5nKTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBzYW1lIGFzIGFib3ZlLlxuICAgIGFuY2VzdG9yLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKHN0cmluZykudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdGxhYmVsKCkge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZXN1bWUoKTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIC8vIEFzc3VtZSBhIHJlZmVyZW5jZS5cbiAgICB0aGlzLmRhdGEuaW5SZWZlcmVuY2UgPSB0cnVlO1xuICAgIGlmIChub2RlLnR5cGUgPT09ICdsaW5rJykge1xuICAgICAgLyoqIEB0eXBlIHtBcnJheTxQaHJhc2luZ0NvbnRlbnQ+fSAqL1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBmcmFnbWVudC5jaGlsZHJlbjtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5hbHQgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgbm9kZS51cmwgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZygpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIG5vZGUudGl0bGUgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2UoKSB7XG4gICAgdGhpcy5kYXRhLmluUmVmZXJlbmNlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25lbnRlcnJlZmVyZW5jZSgpIHtcbiAgICB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSA9ICdjb2xsYXBzZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0cmVmZXJlbmNlc3RyaW5nKHRva2VuKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc3VtZSgpO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogc3Rhc2ggdGhpcyBvbiB0aGUgbm9kZSwgYXMgaXQgbWlnaHQgYmVjb21lIGEgcmVmZXJlbmNlXG4gICAgLy8gbGF0ZXIuXG4gICAgbm9kZS5sYWJlbCA9IGxhYmVsO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHNhbWUgYXMgYWJvdmUuXG4gICAgbm9kZS5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcih0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSA9ICdmdWxsJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcih0b2tlbikge1xuICAgIHRoaXMuZGF0YS5jaGFyYWN0ZXJSZWZlcmVuY2VUeXBlID0gdG9rZW4udHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSh0b2tlbikge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGU7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgbGV0IHZhbHVlO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICB2YWx1ZSA9IGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UoZGF0YSwgdHlwZSA9PT0gXCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljXCIgPyAxMCA6IDE2KTtcbiAgICAgIHRoaXMuZGF0YS5jaGFyYWN0ZXJSZWZlcmVuY2VUeXBlID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZShkYXRhKTtcbiAgICAgIHZhbHVlID0gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCB0YWlsID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIHRhaWwudmFsdWUgKz0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlKHRva2VuKSB7XG4gICAgY29uc3QgdGFpbCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgdGFpbC5wb3NpdGlvbi5lbmQgPSBwb2ludCh0b2tlbi5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGF1dG9saW5rcHJvdG9jb2wodG9rZW4pIHtcbiAgICBvbmV4aXRkYXRhLmNhbGwodGhpcywgdG9rZW4pO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgbm9kZS51cmwgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRhdXRvbGlua2VtYWlsKHRva2VuKSB7XG4gICAgb25leGl0ZGF0YS5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIG5vZGUudXJsID0gJ21haWx0bzonICsgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7XG4gIH1cblxuICAvL1xuICAvLyBDcmVhdGVycy5cbiAgLy9cblxuICAvKiogQHJldHVybnMge0Jsb2NrcXVvdGV9ICovXG4gIGZ1bmN0aW9uIGJsb2NrUXVvdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdibG9ja3F1b3RlJyxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG4gIH1cblxuICAvKiogQHJldHVybnMge0NvZGV9ICovXG4gIGZ1bmN0aW9uIGNvZGVGbG93KCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnY29kZScsXG4gICAgICBsYW5nOiBudWxsLFxuICAgICAgbWV0YTogbnVsbCxcbiAgICAgIHZhbHVlOiAnJ1xuICAgIH07XG4gIH1cblxuICAvKiogQHJldHVybnMge0lubGluZUNvZGV9ICovXG4gIGZ1bmN0aW9uIGNvZGVUZXh0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaW5saW5lQ29kZScsXG4gICAgICB2YWx1ZTogJydcbiAgICB9O1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtEZWZpbml0aW9ufSAqL1xuICBmdW5jdGlvbiBkZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZGVmaW5pdGlvbicsXG4gICAgICBpZGVudGlmaWVyOiAnJyxcbiAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgdGl0bGU6IG51bGwsXG4gICAgICB1cmw6ICcnXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7RW1waGFzaXN9ICovXG4gIGZ1bmN0aW9uIGVtcGhhc2lzKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZW1waGFzaXMnLFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7SGVhZGluZ30gKi9cbiAgZnVuY3Rpb24gaGVhZGluZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZGVwdGhgIHdpbGwgYmUgc2V0IGxhdGVyLlxuICAgICAgZGVwdGg6IDAsXG4gICAgICBjaGlsZHJlbjogW11cbiAgICB9O1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtCcmVha30gKi9cbiAgZnVuY3Rpb24gaGFyZEJyZWFrKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnYnJlYWsnXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7SHRtbH0gKi9cbiAgZnVuY3Rpb24gaHRtbCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2h0bWwnLFxuICAgICAgdmFsdWU6ICcnXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7SW1hZ2V9ICovXG4gIGZ1bmN0aW9uIGltYWdlKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgdGl0bGU6IG51bGwsXG4gICAgICB1cmw6ICcnLFxuICAgICAgYWx0OiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7TGlua30gKi9cbiAgZnVuY3Rpb24gbGluaygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgdGl0bGU6IG51bGwsXG4gICAgICB1cmw6ICcnLFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlblxuICAgKiBAcmV0dXJucyB7TGlzdH1cbiAgICovXG4gIGZ1bmN0aW9uIGxpc3QodG9rZW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgb3JkZXJlZDogdG9rZW4udHlwZSA9PT0gJ2xpc3RPcmRlcmVkJyxcbiAgICAgIHN0YXJ0OiBudWxsLFxuICAgICAgc3ByZWFkOiB0b2tlbi5fc3ByZWFkLFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlblxuICAgKiBAcmV0dXJucyB7TGlzdEl0ZW19XG4gICAqL1xuICBmdW5jdGlvbiBsaXN0SXRlbSh0b2tlbikge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnbGlzdEl0ZW0nLFxuICAgICAgc3ByZWFkOiB0b2tlbi5fc3ByZWFkLFxuICAgICAgY2hlY2tlZDogbnVsbCxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG4gIH1cblxuICAvKiogQHJldHVybnMge1BhcmFncmFwaH0gKi9cbiAgZnVuY3Rpb24gcGFyYWdyYXBoKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG4gIH1cblxuICAvKiogQHJldHVybnMge1N0cm9uZ30gKi9cbiAgZnVuY3Rpb24gc3Ryb25nKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnc3Ryb25nJyxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG4gIH1cblxuICAvKiogQHJldHVybnMge1RleHR9ICovXG4gIGZ1bmN0aW9uIHRleHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIHZhbHVlOiAnJ1xuICAgIH07XG4gIH1cblxuICAvKiogQHJldHVybnMge1RoZW1hdGljQnJlYWt9ICovXG4gIGZ1bmN0aW9uIHRoZW1hdGljQnJlYWsoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICd0aGVtYXRpY0JyZWFrJ1xuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb3B5IGEgcG9pbnQtbGlrZSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBkXG4gKiAgIFBvaW50LWxpa2UgdmFsdWUuXG4gKiBAcmV0dXJucyB7UG9pbnR9XG4gKiAgIHVuaXN0IHBvaW50LlxuICovXG5mdW5jdGlvbiBwb2ludChkKSB7XG4gIHJldHVybiB7XG4gICAgbGluZTogZC5saW5lLFxuICAgIGNvbHVtbjogZC5jb2x1bW4sXG4gICAgb2Zmc2V0OiBkLm9mZnNldFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Q29uZmlnfSBjb21iaW5lZFxuICogQHBhcmFtIHtBcnJheTxBcnJheTxFeHRlbnNpb24+IHwgRXh0ZW5zaW9uPn0gZXh0ZW5zaW9uc1xuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gY29uZmlndXJlKGNvbWJpbmVkLCBleHRlbnNpb25zKSB7XG4gIGxldCBpbmRleCA9IC0xO1xuICB3aGlsZSAoKytpbmRleCA8IGV4dGVuc2lvbnMubGVuZ3RoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBleHRlbnNpb25zW2luZGV4XTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbmZpZ3VyZShjb21iaW5lZCwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHRlbnNpb24oY29tYmluZWQsIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NvbmZpZ30gY29tYmluZWRcbiAqIEBwYXJhbSB7RXh0ZW5zaW9ufSBleHRlbnNpb25cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGV4dGVuc2lvbihjb21iaW5lZCwgZXh0ZW5zaW9uKSB7XG4gIC8qKiBAdHlwZSB7a2V5b2YgRXh0ZW5zaW9ufSAqL1xuICBsZXQga2V5O1xuICBmb3IgKGtleSBpbiBleHRlbnNpb24pIHtcbiAgICBpZiAob3duLmNhbGwoZXh0ZW5zaW9uLCBrZXkpKSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdjYW5Db250YWluRW9scyc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb25ba2V5XTtcbiAgICAgICAgICAgIGlmIChyaWdodCkge1xuICAgICAgICAgICAgICBjb21iaW5lZFtrZXldLnB1c2goLi4ucmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICd0cmFuc2Zvcm1zJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGV4dGVuc2lvbltrZXldO1xuICAgICAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgICAgIGNvbWJpbmVkW2tleV0ucHVzaCguLi5yaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2VudGVyJzpcbiAgICAgICAgY2FzZSAnZXhpdCc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb25ba2V5XTtcbiAgICAgICAgICAgIGlmIChyaWdodCkge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbWJpbmVkW2tleV0sIHJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgLy8gTm8gZGVmYXVsdFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiogQHR5cGUge09uRW50ZXJFcnJvcn0gKi9cbmZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGxlZnQsIHJpZ2h0KSB7XG4gIGlmIChsZWZ0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2xvc2UgYCcgKyBsZWZ0LnR5cGUgKyAnYCAoJyArIHN0cmluZ2lmeVBvc2l0aW9uKHtcbiAgICAgIHN0YXJ0OiBsZWZ0LnN0YXJ0LFxuICAgICAgZW5kOiBsZWZ0LmVuZFxuICAgIH0pICsgJyk6IGEgZGlmZmVyZW50IHRva2VuIChgJyArIHJpZ2h0LnR5cGUgKyAnYCwgJyArIHN0cmluZ2lmeVBvc2l0aW9uKHtcbiAgICAgIHN0YXJ0OiByaWdodC5zdGFydCxcbiAgICAgIGVuZDogcmlnaHQuZW5kXG4gICAgfSkgKyAnKSBpcyBvcGVuJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2xvc2UgZG9jdW1lbnQsIGEgdG9rZW4gKGAnICsgcmlnaHQudHlwZSArICdgLCAnICsgc3RyaW5naWZ5UG9zaXRpb24oe1xuICAgICAgc3RhcnQ6IHJpZ2h0LnN0YXJ0LFxuICAgICAgZW5kOiByaWdodC5lbmRcbiAgICB9KSArICcpIGlzIHN0aWxsIG9wZW4nKTtcbiAgfVxufSIsICIvLyBOb3RlOiB0eXBlcyBleHBvcnRlZCBmcm9tIGBpbmRleC5kLnRzYC5cbmV4cG9ydCB7IGZyb21NYXJrZG93biB9IGZyb20gJy4vbGliL2luZGV4LmpzJzsiLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLlJvb3R9IFJvb3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bicpLk9wdGlvbnN9IEZyb21NYXJrZG93bk9wdGlvbnNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaWZpZWQnKS5QYXJzZXI8Um9vdD59IFBhcnNlclxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pZmllZCcpLlByb2Nlc3NvcjxSb290Pn0gUHJvY2Vzc29yXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T21pdDxGcm9tTWFya2Rvd25PcHRpb25zLCAnZXh0ZW5zaW9ucycgfCAnbWRhc3RFeHRlbnNpb25zJz59IE9wdGlvbnNcbiAqL1xuXG5pbXBvcnQge2Zyb21NYXJrZG93bn0gZnJvbSAnbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duJ1xuXG4vKipcbiAqIEFhZGQgc3VwcG9ydCBmb3IgcGFyc2luZyBmcm9tIG1hcmtkb3duLlxuICpcbiAqIEBwYXJhbSB7UmVhZG9ubHk8T3B0aW9ucz4gfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqICAgTm90aGluZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtYXJrUGFyc2Uob3B0aW9ucykge1xuICAvKiogQHR5cGUge1Byb2Nlc3Nvcn0gKi9cbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgaW4gSlNEb2MgZ2VuZXJhdGVzIHdyb25nIHR5cGVzIGlmIGB0aGlzYCBpcyB0eXBlZCByZWd1bGFybHkuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgc2VsZi5wYXJzZXIgPSBwYXJzZXJcblxuICAvKipcbiAgICogQHR5cGUge1BhcnNlcn1cbiAgICovXG4gIGZ1bmN0aW9uIHBhcnNlcihkb2MpIHtcbiAgICByZXR1cm4gZnJvbU1hcmtkb3duKGRvYywge1xuICAgICAgLi4uc2VsZi5kYXRhKCdzZXR0aW5ncycpLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIC8vIE5vdGU6IHRoZXNlIG9wdGlvbnMgYXJlIG5vdCBpbiB0aGUgcmVhZG1lLlxuICAgICAgLy8gVGhlIGdvYWwgaXMgZm9yIHRoZW0gdG8gYmUgc2V0IGJ5IHBsdWdpbnMgb24gYGRhdGFgIGluc3RlYWQgb2YgYmVpbmdcbiAgICAgIC8vIHBhc3NlZCBieSB1c2Vycy5cbiAgICAgIGV4dGVuc2lvbnM6IHNlbGYuZGF0YSgnbWljcm9tYXJrRXh0ZW5zaW9ucycpIHx8IFtdLFxuICAgICAgbWRhc3RFeHRlbnNpb25zOiBzZWxmLmRhdGEoJ2Zyb21NYXJrZG93bkV4dGVuc2lvbnMnKSB8fCBbXVxuICAgIH0pXG4gIH1cbn1cbiIsICIvLyBOb3RlOiB0eXBlcyBleHBvc2VkIGZyb20gYGluZGV4LmQudHNgLlxuZXhwb3J0IHtkZWZhdWx0fSBmcm9tICcuL2xpYi9pbmRleC5qcydcbiIsICIvL1xuLy8gZm9ybWF0IC0gcHJpbnRmLWxpa2Ugc3RyaW5nIGZvcm1hdHRpbmcgZm9yIEphdmFTY3JpcHRcbi8vIGdpdGh1Yi5jb20vc2Ftc29uanMvZm9ybWF0XG4vLyBAX3Nqc1xuLy9cbi8vIENvcHlyaWdodCAyMDEwIC0gMjAxMyBTYW1pIFNhbWh1cmkgPHNhbWlAc2FtaHVyaS5uZXQ+XG4vL1xuLy8gTUlUIExpY2Vuc2Vcbi8vIGh0dHA6Ly9zanMubWl0LWxpY2Vuc2Uub3JnXG4vL1xuXG47KGZ1bmN0aW9uKCkge1xuXG4gIC8vLy8gRXhwb3J0IHRoZSBBUElcbiAgdmFyIG5hbWVzcGFjZTtcblxuICAvLyBDb21tb25KUyAvIE5vZGUgbW9kdWxlXG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5hbWVzcGFjZSA9IG1vZHVsZS5leHBvcnRzID0gZm9ybWF0O1xuICB9XG5cbiAgLy8gQnJvd3NlcnMgYW5kIG90aGVyIGVudmlyb25tZW50c1xuICBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIGdsb2JhbCBvYmplY3QuIFdvcmtzIGluIEVTMywgRVM1LCBhbmQgRVM1IHN0cmljdCBtb2RlLlxuICAgIG5hbWVzcGFjZSA9IChmdW5jdGlvbigpeyByZXR1cm4gdGhpcyB8fCAoMSxldmFsKSgndGhpcycpIH0oKSk7XG4gIH1cblxuICBuYW1lc3BhY2UuZm9ybWF0ID0gZm9ybWF0O1xuICBuYW1lc3BhY2UudnNwcmludGYgPSB2c3ByaW50ZjtcblxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG5hbWVzcGFjZS5wcmludGYgPSBwcmludGY7XG4gIH1cblxuICBmdW5jdGlvbiBwcmludGYoLyogLi4uICovKSB7XG4gICAgY29uc29sZS5sb2coZm9ybWF0LmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgZnVuY3Rpb24gdnNwcmludGYoZm10LCByZXBsYWNlbWVudHMpIHtcbiAgICByZXR1cm4gZm9ybWF0LmFwcGx5KG51bGwsIFtmbXRdLmNvbmNhdChyZXBsYWNlbWVudHMpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdChmbXQpIHtcbiAgICB2YXIgYXJnSW5kZXggPSAxIC8vIHNraXAgaW5pdGlhbCBmb3JtYXQgYXJndW1lbnRcbiAgICAgICwgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICAgICAgLCBpID0gMFxuICAgICAgLCBuID0gZm10Lmxlbmd0aFxuICAgICAgLCByZXN1bHQgPSAnJ1xuICAgICAgLCBjXG4gICAgICAsIGVzY2FwZWQgPSBmYWxzZVxuICAgICAgLCBhcmdcbiAgICAgICwgdG1wXG4gICAgICAsIGxlYWRpbmdaZXJvID0gZmFsc2VcbiAgICAgICwgcHJlY2lzaW9uXG4gICAgICAsIG5leHRBcmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH1cbiAgICAgICwgc2x1cnBOdW1iZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgZGlnaXRzID0gJyc7XG4gICAgICAgICAgd2hpbGUgKC9cXGQvLnRlc3QoZm10W2ldKSkge1xuICAgICAgICAgICAgZGlnaXRzICs9IGZtdFtpKytdO1xuICAgICAgICAgICAgYyA9IGZtdFtpXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRpZ2l0cy5sZW5ndGggPiAwID8gcGFyc2VJbnQoZGlnaXRzKSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgIDtcbiAgICBmb3IgKDsgaSA8IG47ICsraSkge1xuICAgICAgYyA9IGZtdFtpXTtcbiAgICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICAgIGVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGMgPT0gJy4nKSB7XG4gICAgICAgICAgbGVhZGluZ1plcm8gPSBmYWxzZTtcbiAgICAgICAgICBjID0gZm10WysraV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYyA9PSAnMCcgJiYgZm10W2kgKyAxXSA9PSAnLicpIHtcbiAgICAgICAgICBsZWFkaW5nWmVybyA9IHRydWU7XG4gICAgICAgICAgaSArPSAyO1xuICAgICAgICAgIGMgPSBmbXRbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbGVhZGluZ1plcm8gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHByZWNpc2lvbiA9IHNsdXJwTnVtYmVyKCk7XG4gICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICBjYXNlICdiJzogLy8gbnVtYmVyIGluIGJpbmFyeVxuICAgICAgICAgIHJlc3VsdCArPSBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZygyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYyc6IC8vIGNoYXJhY3RlclxuICAgICAgICAgIGFyZyA9IG5leHRBcmcoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgYXJnIGluc3RhbmNlb2YgU3RyaW5nKVxuICAgICAgICAgICAgcmVzdWx0ICs9IGFyZztcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhcmcsIDEwKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2QnOiAvLyBudW1iZXIgaW4gZGVjaW1hbFxuICAgICAgICAgIHJlc3VsdCArPSBwYXJzZUludChuZXh0QXJnKCksIDEwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZic6IC8vIGZsb2F0aW5nIHBvaW50IG51bWJlclxuICAgICAgICAgIHRtcCA9IFN0cmluZyhwYXJzZUZsb2F0KG5leHRBcmcoKSkudG9GaXhlZChwcmVjaXNpb24gfHwgNikpO1xuICAgICAgICAgIHJlc3VsdCArPSBsZWFkaW5nWmVybyA/IHRtcCA6IHRtcC5yZXBsYWNlKC9eMC8sICcnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaic6IC8vIEpTT05cbiAgICAgICAgICByZXN1bHQgKz0gSlNPTi5zdHJpbmdpZnkobmV4dEFyZygpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbyc6IC8vIG51bWJlciBpbiBvY3RhbFxuICAgICAgICAgIHJlc3VsdCArPSAnMCcgKyBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZyg4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncyc6IC8vIHN0cmluZ1xuICAgICAgICAgIHJlc3VsdCArPSBuZXh0QXJnKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3gnOiAvLyBsb3dlcmNhc2UgaGV4YWRlY2ltYWxcbiAgICAgICAgICByZXN1bHQgKz0gJzB4JyArIHBhcnNlSW50KG5leHRBcmcoKSwgMTApLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWCc6IC8vIHVwcGVyY2FzZSBoZXhhZGVjaW1hbFxuICAgICAgICAgIHJlc3VsdCArPSAnMHgnICsgcGFyc2VJbnQobmV4dEFyZygpLCAxMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzdWx0ICs9IGM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJyUnKSB7XG4gICAgICAgIGVzY2FwZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IGM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxufSgpKTtcbiIsICIvLyBAdHMtZXhwZWN0LWVycm9yXG5pbXBvcnQgZm9ybWF0dGVyIGZyb20gJ2Zvcm1hdCdcblxuZXhwb3J0IGNvbnN0IGZhdWx0ID0gT2JqZWN0LmFzc2lnbihjcmVhdGUoRXJyb3IpLCB7XG4gIGV2YWw6IGNyZWF0ZShFdmFsRXJyb3IpLFxuICByYW5nZTogY3JlYXRlKFJhbmdlRXJyb3IpLFxuICByZWZlcmVuY2U6IGNyZWF0ZShSZWZlcmVuY2VFcnJvciksXG4gIHN5bnRheDogY3JlYXRlKFN5bnRheEVycm9yKSxcbiAgdHlwZTogY3JlYXRlKFR5cGVFcnJvciksXG4gIHVyaTogY3JlYXRlKFVSSUVycm9yKVxufSlcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgYEVDb25zdHJ1Y3RvcmAsIHdpdGggdGhlIGZvcm1hdHRlZCBgZm9ybWF0YCBhcyBhIGZpcnN0IGFyZ3VtZW50LlxuICpcbiAqIEB0ZW1wbGF0ZSB7RXJyb3J9IEZhdWx0XG4gKiBAdGVtcGxhdGUge25ldyAocmVhc29uOiBzdHJpbmcpID0+IEZhdWx0fSBDbGFzc1xuICogQHBhcmFtIHtDbGFzc30gQ29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShDb25zdHJ1Y3Rvcikge1xuICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBGb3JtYXR0ZWRFcnJvci5kaXNwbGF5TmFtZSA9IENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IENvbnN0cnVjdG9yLm5hbWVcblxuICByZXR1cm4gRm9ybWF0dGVkRXJyb3JcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGVycm9yIHdpdGggYSBwcmludGYtbGlrZSBmb3JtYXR0ZWQgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVsbH0gW2Zvcm1hdF1cbiAgICogICBUZW1wbGF0ZSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7Li4udW5rbm93bn0gdmFsdWVzXG4gICAqICAgVmFsdWVzIHRvIHJlbmRlciBpbiBgZm9ybWF0YC5cbiAgICogQHJldHVybnMge0ZhdWx0fVxuICAgKi9cbiAgZnVuY3Rpb24gRm9ybWF0dGVkRXJyb3IoZm9ybWF0LCAuLi52YWx1ZXMpIHtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBjb25zdCByZWFzb24gPSBmb3JtYXQgPyBmb3JtYXR0ZXIoZm9ybWF0LCAuLi52YWx1ZXMpIDogZm9ybWF0XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihyZWFzb24pXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHsndG9tbCcgfCAneWFtbCd9IFByZXNldFxuICogICBLbm93biBuYW1lIG9mIGEgZnJvbnRtYXR0ZXIgc3R5bGUuXG4gKlxuICogQHR5cGVkZWYgSW5mb1xuICogICBTZXF1ZW5jZS5cbiAqXG4gKiAgIERlcGVuZGluZyBvbiBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCwgaXQgcmVmbGVjdHMgYSBtYXJrZXIgb3IgYSBmZW5jZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbG9zZVxuICogICBDbG9zaW5nLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG9wZW5cbiAqICAgT3BlbmluZy5cbiAqXG4gKiBAdHlwZWRlZiBNYXR0ZXJQcm9wc1xuICogICBGaWVsZHMgZGVzY3JpYmluZyBhIGtpbmQgb2YgbWF0dGVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAqICAgTm9kZSB0eXBlIHRvIHRva2VuaXplIGFzLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2FueXdoZXJlPWZhbHNlXVxuICogICBXaGV0aGVyIG1hdHRlciBjYW4gYmUgZm91bmQgYW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LCBub3JtYWxseSwgb25seSBtYXR0ZXJcbiAqICAgYXQgdGhlIHN0YXJ0IG9mIHRoZSBkb2N1bWVudCBpcyByZWNvZ25pemVkLlxuICpcbiAqICAgPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHVzaW5nIHRoaXMgaXMgYSB0ZXJyaWJsZSBpZGVhLlxuICogICA+IEl0XHUyMDE5cyBjYWxsZWQgZnJvbnRtYXR0ZXIsIG5vdCBtYXR0ZXItaW4tdGhlLW1pZGRsZSBvciBzby5cbiAqICAgPiBUaGlzIG1ha2VzIHlvdXIgbWFya2Rvd24gbGVzcyBwb3J0YWJsZS5cbiAqXG4gKiBAdHlwZWRlZiBNYXJrZXJQcm9wc1xuICogICBNYXJrZXIgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7SW5mbyB8IHN0cmluZ30gbWFya2VyXG4gKiAgIENoYXJhY3RlciByZXBlYXRlZCAzIHRpbWVzLCB1c2VkIGFzIGNvbXBsZXRlIGZlbmNlcy5cbiAqXG4gKiAgIEZvciBleGFtcGxlIHRoZSBjaGFyYWN0ZXIgYCctJ2Agd2lsbCByZXN1bHQgaW4gYCctLS0nYCBiZWluZyB1c2VkIGFzIHRoZVxuICogICBmZW5jZVxuICogICBQYXNzIGBvcGVuYCBhbmQgYGNsb3NlYCB0byBzcGVjaWZ5IGRpZmZlcmVudCBjaGFyYWN0ZXJzIGZvciBvcGVuaW5nIGFuZFxuICogICBjbG9zaW5nIGZlbmNlcy5cbiAqIEBwcm9wZXJ0eSB7bmV2ZXJ9IFtmZW5jZV1cbiAqICAgSWYgYG1hcmtlcmAgaXMgc2V0LCBgZmVuY2VgIG11c3Qgbm90IGJlIHNldC5cbiAqXG4gKiBAdHlwZWRlZiBGZW5jZVByb3BzXG4gKiAgIEZlbmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0luZm8gfCBzdHJpbmd9IGZlbmNlXG4gKiAgIENvbXBsZXRlIGZlbmNlcy5cbiAqXG4gKiAgIFRoaXMgY2FuIGJlIHVzZWQgd2hlbiBmZW5jZXMgY29udGFpbiBkaWZmZXJlbnQgY2hhcmFjdGVycyBvciBsZW5ndGhzXG4gKiAgIG90aGVyIHRoYW4gMy5cbiAqICAgUGFzcyBgb3BlbmAgYW5kIGBjbG9zZWAgdG8gaW50ZXJmYWNlIHRvIHNwZWNpZnkgZGlmZmVyZW50IGNoYXJhY3RlcnMgZm9yIG9wZW5pbmcgYW5kXG4gKiAgIGNsb3NpbmcgZmVuY2VzLlxuICogQHByb3BlcnR5IHtuZXZlcn0gW21hcmtlcl1cbiAqICAgSWYgYGZlbmNlYCBpcyBzZXQsIGBtYXJrZXJgIG11c3Qgbm90IGJlIHNldC5cbiAqXG4gKiBAdHlwZWRlZiB7KE1hdHRlclByb3BzICYgRmVuY2VQcm9wcykgfCAoTWF0dGVyUHJvcHMgJiBNYXJrZXJQcm9wcyl9IE1hdHRlclxuICogICBGaWVsZHMgZGVzY3JpYmluZyBhIGtpbmQgb2YgbWF0dGVyLlxuICpcbiAqICAgPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHVzaW5nIGBhbnl3aGVyZWAgaXMgYSB0ZXJyaWJsZSBpZGVhLlxuICogICA+IEl0XHUyMDE5cyBjYWxsZWQgZnJvbnRtYXR0ZXIsIG5vdCBtYXR0ZXItaW4tdGhlLW1pZGRsZSBvciBzby5cbiAqICAgPiBUaGlzIG1ha2VzIHlvdXIgbWFya2Rvd24gbGVzcyBwb3J0YWJsZS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBgbWFya2VyYCBhbmQgYGZlbmNlYCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuICogICA+IElmIGBtYXJrZXJgIGlzIHNldCwgYGZlbmNlYCBtdXN0IG5vdCBiZSBzZXQsIGFuZCB2aWNlIHZlcnNhLlxuICpcbiAqIEB0eXBlZGVmIHtNYXR0ZXIgfCBQcmVzZXQgfCBBcnJheTxNYXR0ZXIgfCBQcmVzZXQ+fSBPcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKi9cblxuaW1wb3J0IHtmYXVsdH0gZnJvbSAnZmF1bHQnXG5jb25zdCBvd24gPSB7fS5oYXNPd25Qcm9wZXJ0eVxuY29uc3QgbWFya2VycyA9IHtcbiAgeWFtbDogJy0nLFxuICB0b21sOiAnKydcbn1cblxuLyoqXG4gKiBTaW1wbGlmeSBvcHRpb25zIGJ5IG5vcm1hbGl6aW5nIHRoZW0gdG8gYW4gYXJyYXkgb2YgbWF0dGVycy5cbiAqXG4gKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9ucz0neWFtbCddXG4gKiAgIENvbmZpZ3VyYXRpb24gKGRlZmF1bHQ6IGAneWFtbCdgKS5cbiAqIEByZXR1cm5zIHtBcnJheTxNYXR0ZXI+fVxuICogICBMaXN0IG9mIG1hdHRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b01hdHRlcnMob3B0aW9ucykge1xuICAvKiogQHR5cGUge0FycmF5PE1hdHRlcj59ICovXG4gIGNvbnN0IHJlc3VsdCA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgLyoqIEB0eXBlIHtBcnJheTxNYXR0ZXIgfCBQcmVzZXQ+fSAqL1xuICBjb25zdCBwcmVzZXRzT3JNYXR0ZXJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKVxuICAgID8gb3B0aW9uc1xuICAgIDogb3B0aW9uc1xuICAgID8gW29wdGlvbnNdXG4gICAgOiBbJ3lhbWwnXVxuICB3aGlsZSAoKytpbmRleCA8IHByZXNldHNPck1hdHRlcnMubGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IG1hdHRlcihwcmVzZXRzT3JNYXR0ZXJzW2luZGV4XSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogU2ltcGxpZnkgYW4gb3B0aW9uLlxuICpcbiAqIEBwYXJhbSB7TWF0dGVyIHwgUHJlc2V0fSBvcHRpb25cbiAqICAgQ29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIHtNYXR0ZXJ9XG4gKiAgIE1hdHRlci5cbiAqL1xuZnVuY3Rpb24gbWF0dGVyKG9wdGlvbikge1xuICBsZXQgcmVzdWx0ID0gb3B0aW9uXG4gIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgIGlmICghb3duLmNhbGwobWFya2VycywgcmVzdWx0KSkge1xuICAgICAgdGhyb3cgZmF1bHQoJ01pc3NpbmcgbWF0dGVyIGRlZmluaXRpb24gZm9yIGAlc2AnLCByZXN1bHQpXG4gICAgfVxuICAgIHJlc3VsdCA9IHtcbiAgICAgIHR5cGU6IHJlc3VsdCxcbiAgICAgIG1hcmtlcjogbWFya2Vyc1tyZXN1bHRdXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgZmF1bHQoJ0V4cGVjdGVkIG1hdHRlciB0byBiZSBhbiBvYmplY3QsIG5vdCBgJWpgJywgcmVzdWx0KVxuICB9XG4gIGlmICghb3duLmNhbGwocmVzdWx0LCAndHlwZScpKSB7XG4gICAgdGhyb3cgZmF1bHQoJ01pc3NpbmcgYHR5cGVgIGluIG1hdHRlciBgJWpgJywgcmVzdWx0KVxuICB9XG4gIGlmICghb3duLmNhbGwocmVzdWx0LCAnZmVuY2UnKSAmJiAhb3duLmNhbGwocmVzdWx0LCAnbWFya2VyJykpIHtcbiAgICB0aHJvdyBmYXVsdCgnTWlzc2luZyBgbWFya2VyYCBvciBgZmVuY2VgIGluIG1hdHRlciBgJWpgJywgcmVzdWx0KVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0UmVjb3JkfSBDb25zdHJ1Y3RSZWNvcmRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRXh0ZW5zaW9ufSBFeHRlbnNpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuVHlwZX0gVG9rZW5UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi90by1tYXR0ZXJzLmpzJykuSW5mb30gSW5mb1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi90by1tYXR0ZXJzLmpzJykuTWF0dGVyfSBNYXR0ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vdG8tbWF0dGVycy5qcycpLk9wdGlvbnN9IE9wdGlvbnNcbiAqL1xuXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZywgbWFya2Rvd25TcGFjZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHt0b01hdHRlcnN9IGZyb20gJy4vdG8tbWF0dGVycy5qcydcblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0byBlbmFibGUgZnJvbnRtYXR0ZXIgc3ludGF4LlxuICpcbiAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zPSd5YW1sJ11cbiAqICAgQ29uZmlndXJhdGlvbiAoZGVmYXVsdDogYCd5YW1sJ2ApLlxuICogQHJldHVybnMge0V4dGVuc2lvbn1cbiAqICAgRXh0ZW5zaW9uIGZvciBgbWljcm9tYXJrYCB0aGF0IGNhbiBiZSBwYXNzZWQgaW4gYGV4dGVuc2lvbnNgLCB0b1xuICogICBlbmFibGUgZnJvbnRtYXR0ZXIgc3ludGF4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRtYXR0ZXIob3B0aW9ucykge1xuICBjb25zdCBtYXR0ZXJzID0gdG9NYXR0ZXJzKG9wdGlvbnMpXG4gIC8qKiBAdHlwZSB7Q29uc3RydWN0UmVjb3JkfSAqL1xuICBjb25zdCBmbG93ID0ge31cbiAgbGV0IGluZGV4ID0gLTFcbiAgd2hpbGUgKCsraW5kZXggPCBtYXR0ZXJzLmxlbmd0aCkge1xuICAgIGNvbnN0IG1hdHRlciA9IG1hdHRlcnNbaW5kZXhdXG4gICAgY29uc3QgY29kZSA9IGZlbmNlKG1hdHRlciwgJ29wZW4nKS5jaGFyQ29kZUF0KDApXG4gICAgY29uc3QgY29uc3RydWN0ID0gY3JlYXRlQ29uc3RydWN0KG1hdHRlcilcbiAgICBjb25zdCBleGlzdGluZyA9IGZsb3dbY29kZV1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIHtcbiAgICAgIGV4aXN0aW5nLnB1c2goY29uc3RydWN0KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZXZlciBhIHNpbmdsZSBvYmplY3QsIGFsd2F5cyBhbiBhcnJheS5cbiAgICAgIGZsb3dbY29kZV0gPSBbY29uc3RydWN0XVxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGZsb3dcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7TWF0dGVyfSBtYXR0ZXJcbiAqIEByZXR1cm5zIHtDb25zdHJ1Y3R9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbnN0cnVjdChtYXR0ZXIpIHtcbiAgY29uc3QgYW55d2hlcmUgPSBtYXR0ZXIuYW55d2hlcmVcbiAgY29uc3QgZnJvbnRtYXR0ZXJUeXBlID0gLyoqIEB0eXBlIHtUb2tlblR5cGV9ICovIG1hdHRlci50eXBlXG4gIGNvbnN0IGZlbmNlVHlwZSA9IC8qKiBAdHlwZSB7VG9rZW5UeXBlfSAqLyBmcm9udG1hdHRlclR5cGUgKyAnRmVuY2UnXG4gIGNvbnN0IHNlcXVlbmNlVHlwZSA9IC8qKiBAdHlwZSB7VG9rZW5UeXBlfSAqLyBmZW5jZVR5cGUgKyAnU2VxdWVuY2UnXG4gIGNvbnN0IHZhbHVlVHlwZSA9IC8qKiBAdHlwZSB7VG9rZW5UeXBlfSAqLyBmcm9udG1hdHRlclR5cGUgKyAnVmFsdWUnXG4gIGNvbnN0IGNsb3NpbmdGZW5jZUNvbnN0cnVjdCA9IHtcbiAgICB0b2tlbml6ZTogdG9rZW5pemVDbG9zaW5nRmVuY2UsXG4gICAgcGFydGlhbDogdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEZlbmNlIHRvIGxvb2sgZm9yLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgbGV0IGJ1ZmZlclxuICBsZXQgYnVmZmVySW5kZXggPSAwXG4gIHJldHVybiB7XG4gICAgdG9rZW5pemU6IHRva2VuaXplRnJvbnRtYXR0ZXIsXG4gICAgY29uY3JldGU6IHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICAgKiBAdHlwZSB7VG9rZW5pemVyfVxuICAgKi9cbiAgZnVuY3Rpb24gdG9rZW5pemVGcm9udG1hdHRlcihlZmZlY3RzLCBvaywgbm9rKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgICByZXR1cm4gc3RhcnRcblxuICAgIC8qKlxuICAgICAqIFN0YXJ0IG9mIGZyb250bWF0dGVyLlxuICAgICAqXG4gICAgICogYGBgbWFya2Rvd25cbiAgICAgKiA+IHwgLS0tXG4gICAgICogICAgIF5cbiAgICAgKiAgIHwgdGl0bGU6IFwiVmVudXNcIlxuICAgICAqICAgfCAtLS1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEB0eXBlIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHNlbGYubm93KClcbiAgICAgIGlmIChcbiAgICAgICAgLy8gSW5kZW50IG5vdCBhbGxvd2VkLlxuICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPT09IDEgJiZcbiAgICAgICAgLy8gTm9ybWFsbHksIG9ubHkgYWxsb3dlZCBpbiBmaXJzdCBsaW5lLlxuICAgICAgICAocG9zaXRpb24ubGluZSA9PT0gMSB8fCBhbnl3aGVyZSlcbiAgICAgICkge1xuICAgICAgICBidWZmZXIgPSBmZW5jZShtYXR0ZXIsICdvcGVuJylcbiAgICAgICAgYnVmZmVySW5kZXggPSAwXG4gICAgICAgIGlmIChjb2RlID09PSBidWZmZXIuY2hhckNvZGVBdChidWZmZXJJbmRleCkpIHtcbiAgICAgICAgICBlZmZlY3RzLmVudGVyKGZyb250bWF0dGVyVHlwZSlcbiAgICAgICAgICBlZmZlY3RzLmVudGVyKGZlbmNlVHlwZSlcbiAgICAgICAgICBlZmZlY3RzLmVudGVyKHNlcXVlbmNlVHlwZSlcbiAgICAgICAgICByZXR1cm4gb3BlblNlcXVlbmNlKGNvZGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbiBvcGVuIHNlcXVlbmNlLlxuICAgICAqXG4gICAgICogYGBgbWFya2Rvd25cbiAgICAgKiA+IHwgLS0tXG4gICAgICogICAgIF5cbiAgICAgKiAgIHwgdGl0bGU6IFwiVmVudXNcIlxuICAgICAqICAgfCAtLS1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEB0eXBlIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvcGVuU2VxdWVuY2UoY29kZSkge1xuICAgICAgaWYgKGJ1ZmZlckluZGV4ID09PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGVmZmVjdHMuZXhpdChzZXF1ZW5jZVR5cGUpXG4gICAgICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICAgICAgZWZmZWN0cy5lbnRlcignd2hpdGVzcGFjZScpXG4gICAgICAgICAgcmV0dXJuIG9wZW5TZXF1ZW5jZVdoaXRlc3BhY2UoY29kZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3BlbkFmdGVyKGNvZGUpXG4gICAgICB9XG4gICAgICBpZiAoY29kZSA9PT0gYnVmZmVyLmNoYXJDb2RlQXQoYnVmZmVySW5kZXgrKykpIHtcbiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2VcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbiB3aGl0ZXNwYWNlIGFmdGVyIG9wZW4gc2VxdWVuY2UuXG4gICAgICpcbiAgICAgKiBgYGBtYXJrZG93blxuICAgICAqID4gfCAtLS1cdTI0MjBcbiAgICAgKiAgICAgICAgXlxuICAgICAqICAgfCB0aXRsZTogXCJWZW51c1wiXG4gICAgICogICB8IC0tLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9wZW5TZXF1ZW5jZVdoaXRlc3BhY2UoY29kZSkge1xuICAgICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2VXaGl0ZXNwYWNlXG4gICAgICB9XG4gICAgICBlZmZlY3RzLmV4aXQoJ3doaXRlc3BhY2UnKVxuICAgICAgcmV0dXJuIG9wZW5BZnRlcihjb2RlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIG9wZW4gc2VxdWVuY2UuXG4gICAgICpcbiAgICAgKiBgYGBtYXJrZG93blxuICAgICAqID4gfCAtLS1cbiAgICAgKiAgICAgICAgXlxuICAgICAqICAgfCB0aXRsZTogXCJWZW51c1wiXG4gICAgICogICB8IC0tLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9wZW5BZnRlcihjb2RlKSB7XG4gICAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICAgIGVmZmVjdHMuZXhpdChmZW5jZVR5cGUpXG4gICAgICAgIGVmZmVjdHMuZW50ZXIoJ2xpbmVFbmRpbmcnKVxuICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgICAgZWZmZWN0cy5leGl0KCdsaW5lRW5kaW5nJylcbiAgICAgICAgLy8gR2V0IHJlYWR5IGZvciBjbG9zaW5nIGZlbmNlLlxuICAgICAgICBidWZmZXIgPSBmZW5jZShtYXR0ZXIsICdjbG9zZScpXG4gICAgICAgIGJ1ZmZlckluZGV4ID0gMFxuICAgICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGNsb3NpbmdGZW5jZUNvbnN0cnVjdCwgYWZ0ZXIsIGNvbnRlbnRTdGFydClcbiAgICAgIH1cblxuICAgICAgLy8gRU9GIGlzIG5vdCBva2F5LlxuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0YXJ0IG9mIGNvbnRlbnQgY2h1bmsuXG4gICAgICpcbiAgICAgKiBgYGBtYXJrZG93blxuICAgICAqICAgfCAtLS1cbiAgICAgKiA+IHwgdGl0bGU6IFwiVmVudXNcIlxuICAgICAqICAgICBeXG4gICAgICogICB8IC0tLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbnRlbnRTdGFydChjb2RlKSB7XG4gICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRFbmQoY29kZSlcbiAgICAgIH1cbiAgICAgIGVmZmVjdHMuZW50ZXIodmFsdWVUeXBlKVxuICAgICAgcmV0dXJuIGNvbnRlbnRJbnNpZGUoY29kZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbiBjb250ZW50IGNodW5rLlxuICAgICAqXG4gICAgICogYGBgbWFya2Rvd25cbiAgICAgKiAgIHwgLS0tXG4gICAgICogPiB8IHRpdGxlOiBcIlZlbnVzXCJcbiAgICAgKiAgICAgXlxuICAgICAqICAgfCAtLS1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEB0eXBlIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb250ZW50SW5zaWRlKGNvZGUpIHtcbiAgICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgICBlZmZlY3RzLmV4aXQodmFsdWVUeXBlKVxuICAgICAgICByZXR1cm4gY29udGVudEVuZChjb2RlKVxuICAgICAgfVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29udGVudEluc2lkZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuZCBvZiBjb250ZW50IGNodW5rLlxuICAgICAqXG4gICAgICogYGBgbWFya2Rvd25cbiAgICAgKiAgIHwgLS0tXG4gICAgICogPiB8IHRpdGxlOiBcIlZlbnVzXCJcbiAgICAgKiAgICAgICAgICAgICAgICAgICBeXG4gICAgICogICB8IC0tLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbnRlbnRFbmQoY29kZSkge1xuICAgICAgLy8gUmVxdWlyZSBhIGNsb3NpbmcgZmVuY2UuXG4gICAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgICB9XG5cbiAgICAgIC8vIENhbiBvbmx5IGJlIGFuIGVvbC5cbiAgICAgIGVmZmVjdHMuZW50ZXIoJ2xpbmVFbmRpbmcnKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2xpbmVFbmRpbmcnKVxuICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChjbG9zaW5nRmVuY2VDb25zdHJ1Y3QsIGFmdGVyLCBjb250ZW50U3RhcnQpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWZ0ZXIgZnJvbnRtYXR0ZXIuXG4gICAgICpcbiAgICAgKiBgYGBtYXJrZG93blxuICAgICAqICAgfCAtLS1cbiAgICAgKiAgIHwgdGl0bGU6IFwiVmVudXNcIlxuICAgICAqID4gfCAtLS1cbiAgICAgKiAgICAgICAgXlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICAgIC8vIGBjb2RlYCBtdXN0IGJlIGVvbC9lb2YuXG4gICAgICBlZmZlY3RzLmV4aXQoZnJvbnRtYXR0ZXJUeXBlKVxuICAgICAgcmV0dXJuIG9rKGNvZGUpXG4gICAgfVxuICB9XG5cbiAgLyoqIEB0eXBlIHtUb2tlbml6ZXJ9ICovXG4gIGZ1bmN0aW9uIHRva2VuaXplQ2xvc2luZ0ZlbmNlKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgICBsZXQgYnVmZmVySW5kZXggPSAwXG4gICAgcmV0dXJuIGNsb3NlU3RhcnRcblxuICAgIC8qKlxuICAgICAqIFN0YXJ0IG9mIGNsb3NlIHNlcXVlbmNlLlxuICAgICAqXG4gICAgICogYGBgbWFya2Rvd25cbiAgICAgKiAgIHwgLS0tXG4gICAgICogICB8IHRpdGxlOiBcIlZlbnVzXCJcbiAgICAgKiA+IHwgLS0tXG4gICAgICogICAgIF5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEB0eXBlIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9zZVN0YXJ0KGNvZGUpIHtcbiAgICAgIGlmIChjb2RlID09PSBidWZmZXIuY2hhckNvZGVBdChidWZmZXJJbmRleCkpIHtcbiAgICAgICAgZWZmZWN0cy5lbnRlcihmZW5jZVR5cGUpXG4gICAgICAgIGVmZmVjdHMuZW50ZXIoc2VxdWVuY2VUeXBlKVxuICAgICAgICByZXR1cm4gY2xvc2VTZXF1ZW5jZShjb2RlKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluIGNsb3NlIHNlcXVlbmNlLlxuICAgICAqXG4gICAgICogYGBgbWFya2Rvd25cbiAgICAgKiAgIHwgLS0tXG4gICAgICogICB8IHRpdGxlOiBcIlZlbnVzXCJcbiAgICAgKiA+IHwgLS0tXG4gICAgICogICAgIF5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEB0eXBlIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9zZVNlcXVlbmNlKGNvZGUpIHtcbiAgICAgIGlmIChidWZmZXJJbmRleCA9PT0gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICBlZmZlY3RzLmV4aXQoc2VxdWVuY2VUeXBlKVxuICAgICAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgICAgIGVmZmVjdHMuZW50ZXIoJ3doaXRlc3BhY2UnKVxuICAgICAgICAgIHJldHVybiBjbG9zZVNlcXVlbmNlV2hpdGVzcGFjZShjb2RlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9zZUFmdGVyKGNvZGUpXG4gICAgICB9XG4gICAgICBpZiAoY29kZSA9PT0gYnVmZmVyLmNoYXJDb2RlQXQoYnVmZmVySW5kZXgrKykpIHtcbiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAgIHJldHVybiBjbG9zZVNlcXVlbmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW4gd2hpdGVzcGFjZSBhZnRlciBjbG9zZSBzZXF1ZW5jZS5cbiAgICAgKlxuICAgICAqIGBgYG1hcmtkb3duXG4gICAgICogPiB8IC0tLVxuICAgICAqICAgfCB0aXRsZTogXCJWZW51c1wiXG4gICAgICogICB8IC0tLVx1MjQyMFxuICAgICAqICAgICAgICBeXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U3RhdGV9XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvc2VTZXF1ZW5jZVdoaXRlc3BhY2UoY29kZSkge1xuICAgICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAgIHJldHVybiBjbG9zZVNlcXVlbmNlV2hpdGVzcGFjZVxuICAgICAgfVxuICAgICAgZWZmZWN0cy5leGl0KCd3aGl0ZXNwYWNlJylcbiAgICAgIHJldHVybiBjbG9zZUFmdGVyKGNvZGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWZ0ZXIgY2xvc2Ugc2VxdWVuY2UuXG4gICAgICpcbiAgICAgKiBgYGBtYXJrZG93blxuICAgICAqICAgfCAtLS1cbiAgICAgKiAgIHwgdGl0bGU6IFwiVmVudXNcIlxuICAgICAqID4gfCAtLS1cbiAgICAgKiAgICAgICAgXlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb3NlQWZ0ZXIoY29kZSkge1xuICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICAgIGVmZmVjdHMuZXhpdChmZW5jZVR5cGUpXG4gICAgICAgIHJldHVybiBvayhjb2RlKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7TWF0dGVyfSBtYXR0ZXJcbiAqIEBwYXJhbSB7J2Nsb3NlJyB8ICdvcGVuJ30gcHJvcFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmVuY2UobWF0dGVyLCBwcm9wKSB7XG4gIHJldHVybiBtYXR0ZXIubWFya2VyXG4gICAgPyBwaWNrKG1hdHRlci5tYXJrZXIsIHByb3ApLnJlcGVhdCgzKVxuICAgIDogLy8gQHRzLWV4cGVjdC1lcnJvcjogVGhleVx1MjAxOXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiAgICAgIHBpY2sobWF0dGVyLmZlbmNlLCBwcm9wKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7SW5mbyB8IHN0cmluZ30gc2NoZW1hXG4gKiBAcGFyYW0geydjbG9zZScgfCAnb3Blbid9IHByb3BcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHBpY2soc2NoZW1hLCBwcm9wKSB7XG4gIHJldHVybiB0eXBlb2Ygc2NoZW1hID09PSAnc3RyaW5nJyA/IHNjaGVtYSA6IHNjaGVtYVtwcm9wXVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db21waWxlQ29udGV4dH0gQ29tcGlsZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSGFuZGxlfSBIYW5kbGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSHRtbEV4dGVuc2lvbn0gSHRtbEV4dGVuc2lvblxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlblR5cGV9IFRva2VuVHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi90by1tYXR0ZXJzLmpzJykuT3B0aW9uc30gT3B0aW9uc1xuICovXG5cbmltcG9ydCB7dG9NYXR0ZXJzfSBmcm9tICcuL3RvLW1hdHRlcnMuanMnXG5cbi8qKlxuICogQ3JlYXRlIGFuIGV4dGVuc2lvbiBmb3IgYG1pY3JvbWFya2AgdG8gc3VwcG9ydCBmcm9udG1hdHRlciB3aGVuIHNlcmlhbGl6aW5nXG4gKiB0byBIVE1MLlxuICpcbiAqID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiB0aGlzIG1ha2VzIHN1cmUgbm90aGluZyBpcyBnZW5lcmF0ZWQgaW4gdGhlIG91dHB1dCBIVE1MIGZvclxuICogPiBmcm9udG1hdHRlci5cbiAqXG4gKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9ucz0neWFtbCddXG4gKiAgIENvbmZpZ3VyYXRpb24gKGRlZmF1bHQ6IGAneWFtbCdgKS5cbiAqIEByZXR1cm5zIHtIdG1sRXh0ZW5zaW9ufVxuICogICBFeHRlbnNpb24gZm9yIGBtaWNyb21hcmtgIHRoYXQgY2FuIGJlIHBhc3NlZCBpbiBgaHRtbEV4dGVuc2lvbnNgLCB0b1xuICogICBzdXBwb3J0IGZyb250bWF0dGVyIHdoZW4gc2VyaWFsaXppbmcgdG8gSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250bWF0dGVySHRtbChvcHRpb25zKSB7XG4gIGNvbnN0IG1hdHRlcnMgPSB0b01hdHRlcnMob3B0aW9ucylcbiAgLyoqIEB0eXBlIHtIdG1sRXh0ZW5zaW9uWydlbnRlciddfSAqL1xuICBjb25zdCBlbnRlciA9IHt9XG4gIC8qKiBAdHlwZSB7SHRtbEV4dGVuc2lvblsnZXhpdCddfSAqL1xuICBjb25zdCBleGl0ID0ge31cbiAgbGV0IGluZGV4ID0gLTFcbiAgd2hpbGUgKCsraW5kZXggPCBtYXR0ZXJzLmxlbmd0aCkge1xuICAgIGNvbnN0IHR5cGUgPSAvKiogQHR5cGUge1Rva2VuVHlwZX0gKi8gbWF0dGVyc1tpbmRleF0udHlwZVxuICAgIGVudGVyW3R5cGVdID0gc3RhcnRcbiAgICBleGl0W3R5cGVdID0gZW5kXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbnRlcixcbiAgICBleGl0XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgdGhpcy5idWZmZXIoKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVuZCgpIHtcbiAgICB0aGlzLnJlc3VtZSgpXG4gICAgdGhpcy5zZXREYXRhKCdzbHVycE9uZUxpbmVFbmRpbmcnLCB0cnVlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2xpYi90by1tYXR0ZXJzLmpzJykuSW5mb30gSW5mb1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvdG8tbWF0dGVycy5qcycpLk1hdHRlcn0gTWF0dGVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2xpYi90by1tYXR0ZXJzLmpzJykuT3B0aW9uc30gT3B0aW9uc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvdG8tbWF0dGVycy5qcycpLlByZXNldH0gUHJlc2V0XG4gKi9cblxuZXhwb3J0IHtmcm9udG1hdHRlcn0gZnJvbSAnLi9saWIvc3ludGF4LmpzJ1xuZXhwb3J0IHtmcm9udG1hdHRlckh0bWx9IGZyb20gJy4vbGliL2h0bWwuanMnXG5leHBvcnQge3RvTWF0dGVyc30gZnJvbSAnLi9saWIvdG8tbWF0dGVycy5qcydcblxuLy8gTm90ZTogd2UgZG9uXHUyMDE5dCBoYXZlIGFuIGBpbmRleC5kLnRzYCBpbiB0aGlzIGV4dGVuc2lvbiBiZWNhdXNlIGFsbCB0b2tlblxuLy8gdHlwZXMgYXJlIGR5bmFtaWMgaW4gSlNcbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuTGl0ZXJhbH0gTGl0ZXJhbFxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bicpLkNvbXBpbGVDb250ZXh0fSBDb21waWxlQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duJykuRXh0ZW5zaW9ufSBGcm9tTWFya2Rvd25FeHRlbnNpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bicpLkhhbmRsZX0gRnJvbU1hcmtkb3duSGFuZGxlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdC11dGlsLXRvLW1hcmtkb3duJykuT3B0aW9uc30gVG9NYXJrZG93bkV4dGVuc2lvblxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXInKS5JbmZvfSBJbmZvXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyJykuTWF0dGVyfSBNYXR0ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXInKS5PcHRpb25zfSBPcHRpb25zXG4gKi9cblxuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ2RldmxvcCdcbmltcG9ydCB7dG9NYXR0ZXJzfSBmcm9tICdtaWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyJ1xuaW1wb3J0IGVzY2FwZVN0cmluZ1JlZ2V4cCBmcm9tICdlc2NhcGUtc3RyaW5nLXJlZ2V4cCdcblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duYC5cbiAqXG4gKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICogQHJldHVybnMge0Zyb21NYXJrZG93bkV4dGVuc2lvbn1cbiAqICAgRXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250bWF0dGVyRnJvbU1hcmtkb3duKG9wdGlvbnMpIHtcbiAgY29uc3QgbWF0dGVycyA9IHRvTWF0dGVycyhvcHRpb25zKVxuICAvKiogQHR5cGUge0Zyb21NYXJrZG93bkV4dGVuc2lvblsnZW50ZXInXX0gKi9cbiAgY29uc3QgZW50ZXIgPSB7fVxuICAvKiogQHR5cGUge0Zyb21NYXJrZG93bkV4dGVuc2lvblsnZXhpdCddfSAqL1xuICBjb25zdCBleGl0ID0ge31cbiAgbGV0IGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IG1hdHRlcnMubGVuZ3RoKSB7XG4gICAgY29uc3QgbWF0dGVyID0gbWF0dGVyc1tpbmRleF1cbiAgICBlbnRlclttYXR0ZXIudHlwZV0gPSBvcGVuZXIobWF0dGVyKVxuICAgIGV4aXRbbWF0dGVyLnR5cGVdID0gY2xvc2VcbiAgICBleGl0W21hdHRlci50eXBlICsgJ1ZhbHVlJ10gPSB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIHtlbnRlciwgZXhpdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge01hdHRlcn0gbWF0dGVyXG4gKiBAcmV0dXJucyB7RnJvbU1hcmtkb3duSGFuZGxlfSBlbnRlclxuICovXG5mdW5jdGlvbiBvcGVuZXIobWF0dGVyKSB7XG4gIHJldHVybiBvcGVuXG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0Zyb21NYXJrZG93bkhhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9wZW4odG9rZW4pIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBjdXN0b20uXG4gICAgdGhpcy5lbnRlcih7dHlwZTogbWF0dGVyLnR5cGUsIHZhbHVlOiAnJ30sIHRva2VuKVxuICAgIHRoaXMuYnVmZmVyKClcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAqIEB0eXBlIHtGcm9tTWFya2Rvd25IYW5kbGV9XG4gKi9cbmZ1bmN0aW9uIGNsb3NlKHRva2VuKSB7XG4gIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpXG4gIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgYXNzZXJ0KCd2YWx1ZScgaW4gbm9kZSlcbiAgdGhpcy5leGl0KHRva2VuKVxuICAvLyBSZW1vdmUgdGhlIGluaXRpYWwgYW5kIGZpbmFsIGVvbC5cbiAgbm9kZS52YWx1ZSA9IGRhdGEucmVwbGFjZSgvXihcXHI/XFxufFxccil8KFxccj9cXG58XFxyKSQvZywgJycpXG59XG5cbi8qKlxuICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICogQHR5cGUge0Zyb21NYXJrZG93bkhhbmRsZX1cbiAqL1xuZnVuY3Rpb24gdmFsdWUodG9rZW4pIHtcbiAgdGhpcy5jb25maWcuZW50ZXIuZGF0YS5jYWxsKHRoaXMsIHRva2VuKVxuICB0aGlzLmNvbmZpZy5leGl0LmRhdGEuY2FsbCh0aGlzLCB0b2tlbilcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciBgbWRhc3QtdXRpbC10by1tYXJrZG93bmAuXG4gKlxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIHtUb01hcmtkb3duRXh0ZW5zaW9ufVxuICogICBFeHRlbnNpb24gZm9yIGBtZGFzdC11dGlsLXRvLW1hcmtkb3duYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250bWF0dGVyVG9NYXJrZG93bihvcHRpb25zKSB7XG4gIC8qKiBAdHlwZSB7VG9NYXJrZG93bkV4dGVuc2lvblsndW5zYWZlJ119ICovXG4gIGNvbnN0IHVuc2FmZSA9IFtdXG4gIC8qKiBAdHlwZSB7VG9NYXJrZG93bkV4dGVuc2lvblsnaGFuZGxlcnMnXX0gKi9cbiAgY29uc3QgaGFuZGxlcnMgPSB7fVxuICBjb25zdCBtYXR0ZXJzID0gdG9NYXR0ZXJzKG9wdGlvbnMpXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCBtYXR0ZXJzLmxlbmd0aCkge1xuICAgIGNvbnN0IG1hdHRlciA9IG1hdHRlcnNbaW5kZXhdXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB0aGlzIGNhbiBhZGQgY3VzdG9tIGZyb250bWF0dGVyIG5vZGVzLlxuICAgIC8vIFR5cGluZyB0aG9zZSBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGVuZCB1c2VyLlxuICAgIGhhbmRsZXJzW21hdHRlci50eXBlXSA9IGhhbmRsZXIobWF0dGVyKVxuXG4gICAgY29uc3Qgb3BlbiA9IGZlbmNlKG1hdHRlciwgJ29wZW4nKVxuXG4gICAgdW5zYWZlLnB1c2goe1xuICAgICAgYXRCcmVhazogdHJ1ZSxcbiAgICAgIGNoYXJhY3Rlcjogb3Blbi5jaGFyQXQoMCksXG4gICAgICBhZnRlcjogZXNjYXBlU3RyaW5nUmVnZXhwKG9wZW4uY2hhckF0KDEpKVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4ge3Vuc2FmZSwgaGFuZGxlcnN9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgaGFuZGxlIHRoYXQgY2FuIHNlcmlhbGl6ZSBhIGZyb250bWF0dGVyIG5vZGUgYXMgbWFya2Rvd24uXG4gKlxuICogQHBhcmFtIHtNYXR0ZXJ9IG1hdHRlclxuICogICBTdHJ1Y3R1cmUuXG4gKiBAcmV0dXJucyB7KG5vZGU6IExpdGVyYWwpID0+IHN0cmluZ30gZW50ZXJcbiAqICAgSGFuZGxlci5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlcihtYXR0ZXIpIHtcbiAgY29uc3Qgb3BlbiA9IGZlbmNlKG1hdHRlciwgJ29wZW4nKVxuICBjb25zdCBjbG9zZSA9IGZlbmNlKG1hdHRlciwgJ2Nsb3NlJylcblxuICByZXR1cm4gaGFuZGxlXG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBhIGZyb250bWF0dGVyIG5vZGUgYXMgbWFya2Rvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7TGl0ZXJhbH0gbm9kZVxuICAgKiAgIE5vZGUgdG8gc2VyaWFsaXplLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiAgIFNlcmlhbGl6ZWQgbm9kZS5cbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZShub2RlKSB7XG4gICAgcmV0dXJuIG9wZW4gKyAobm9kZS52YWx1ZSA/ICdcXG4nICsgbm9kZS52YWx1ZSA6ICcnKSArICdcXG4nICsgY2xvc2VcbiAgfVxufVxuXG4vKipcbiAqIEdldCBhbiBgb3BlbmAgb3IgYGNsb3NlYCBmZW5jZS5cbiAqXG4gKiBAcGFyYW0ge01hdHRlcn0gbWF0dGVyXG4gKiAgIFN0cnVjdHVyZS5cbiAqIEBwYXJhbSB7J2Nsb3NlJyB8ICdvcGVuJ30gcHJvcFxuICogICBGaWVsZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBGZW5jZS5cbiAqL1xuZnVuY3Rpb24gZmVuY2UobWF0dGVyLCBwcm9wKSB7XG4gIHJldHVybiBtYXR0ZXIubWFya2VyXG4gICAgPyBwaWNrKG1hdHRlci5tYXJrZXIsIHByb3ApLnJlcGVhdCgzKVxuICAgIDogLy8gQHRzLWV4cGVjdC1lcnJvcjogVGhleVx1MjAxOXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiAgICAgIHBpY2sobWF0dGVyLmZlbmNlLCBwcm9wKVxufVxuXG4vKipcbiAqIFRha2UgYG9wZW5gIG9yIGBjbG9zZWAgZmllbGRzIHdoZW4gc2NoZW1hIGlzIGFuIGluZm8gb2JqZWN0LCBvciB1c2UgdGhlXG4gKiBnaXZlbiB2YWx1ZSB3aGVuIGl0IGlzIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7SW5mbyB8IHN0cmluZ30gc2NoZW1hXG4gKiAgIEluZm8gb2JqZWN0IG9yIHZhbHVlLlxuICogQHBhcmFtIHsnY2xvc2UnIHwgJ29wZW4nfSBwcm9wXG4gKiAgIEZpZWxkIHRvIGdldC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFRoaW5nIHRvIHVzZSBmb3IgdGhlIG9wZW5pbmcgb3IgY2xvc2luZy5cbiAqL1xuZnVuY3Rpb24gcGljayhzY2hlbWEsIHByb3ApIHtcbiAgcmV0dXJuIHR5cGVvZiBzY2hlbWEgPT09ICdzdHJpbmcnID8gc2NoZW1hIDogc2NoZW1hW3Byb3BdXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2xpYi9pbmRleC5qcycpLk9wdGlvbnN9IE9wdGlvbnNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbGliL2luZGV4LmpzJykuTWF0dGVyfSBNYXR0ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbGliL2luZGV4LmpzJykuSW5mb30gSW5mb1xuICovXG5cbmV4cG9ydCB7ZnJvbnRtYXR0ZXJGcm9tTWFya2Rvd24sIGZyb250bWF0dGVyVG9NYXJrZG93bn0gZnJvbSAnLi9saWIvaW5kZXguanMnXG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJyZW1hcmstcGFyc2VcIiAvPlxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJyZW1hcmstc3RyaW5naWZ5XCIgLz5cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLlJvb3R9IFJvb3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXInKS5PcHRpb25zfSBPcHRpb25zXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlmaWVkJykuUHJvY2Vzc29yPFJvb3Q+fSBQcm9jZXNzb3JcbiAqL1xuXG5pbXBvcnQge1xuICBmcm9udG1hdHRlckZyb21NYXJrZG93bixcbiAgZnJvbnRtYXR0ZXJUb01hcmtkb3duXG59IGZyb20gJ21kYXN0LXV0aWwtZnJvbnRtYXR0ZXInXG5pbXBvcnQge2Zyb250bWF0dGVyfSBmcm9tICdtaWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyJ1xuXG4vKiogQHR5cGUge09wdGlvbnN9ICovXG5jb25zdCBlbXB0eU9wdGlvbnMgPSAneWFtbCdcblxuLyoqXG4gKiBBZGQgc3VwcG9ydCBmb3IgZnJvbnRtYXR0ZXIuXG4gKlxuICogIyMjIyMjIE5vdGVzXG4gKlxuICogRG9lc25cdTIwMTl0IHBhcnNlIHRoZSBkYXRhIGluc2lkZSB0aGVtOiBjcmVhdGUgeW91ciBvd24gcGx1Z2luIHRvIGRvIHRoYXQuXG4gKlxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnM9J3lhbWwnXVxuICogICBDb25maWd1cmF0aW9uIChkZWZhdWx0OiBgJ3lhbWwnYCkuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogICBOb3RoaW5nLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW1hcmtGcm9udG1hdHRlcihvcHRpb25zKSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3I6IFRTIGlzIHdyb25nIGFib3V0IGB0aGlzYC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdGhpcy1hc3NpZ25tZW50XG4gIGNvbnN0IHNlbGYgPSAvKiogQHR5cGUge1Byb2Nlc3Nvcn0gKi8gKHRoaXMpXG4gIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnNcbiAgY29uc3QgZGF0YSA9IHNlbGYuZGF0YSgpXG5cbiAgY29uc3QgbWljcm9tYXJrRXh0ZW5zaW9ucyA9XG4gICAgZGF0YS5taWNyb21hcmtFeHRlbnNpb25zIHx8IChkYXRhLm1pY3JvbWFya0V4dGVuc2lvbnMgPSBbXSlcbiAgY29uc3QgZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyA9XG4gICAgZGF0YS5mcm9tTWFya2Rvd25FeHRlbnNpb25zIHx8IChkYXRhLmZyb21NYXJrZG93bkV4dGVuc2lvbnMgPSBbXSlcbiAgY29uc3QgdG9NYXJrZG93bkV4dGVuc2lvbnMgPVxuICAgIGRhdGEudG9NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGEudG9NYXJrZG93bkV4dGVuc2lvbnMgPSBbXSlcblxuICBtaWNyb21hcmtFeHRlbnNpb25zLnB1c2goZnJvbnRtYXR0ZXIoc2V0dGluZ3MpKVxuICBmcm9tTWFya2Rvd25FeHRlbnNpb25zLnB1c2goZnJvbnRtYXR0ZXJGcm9tTWFya2Rvd24oc2V0dGluZ3MpKVxuICB0b01hcmtkb3duRXh0ZW5zaW9ucy5wdXNoKGZyb250bWF0dGVyVG9NYXJrZG93bihzZXR0aW5ncykpXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2xpYi9pbmRleC5qcycpLk9wdGlvbnN9IE9wdGlvbnNcbiAqL1xuXG5leHBvcnQge2RlZmF1bHR9IGZyb20gJy4vbGliL2luZGV4LmpzJ1xuIiwgImV4cG9ydCBjb25zdCBWT0lEICAgICAgID0gLTE7XG5leHBvcnQgY29uc3QgUFJJTUlUSVZFICA9IDA7XG5leHBvcnQgY29uc3QgQVJSQVkgICAgICA9IDE7XG5leHBvcnQgY29uc3QgT0JKRUNUICAgICA9IDI7XG5leHBvcnQgY29uc3QgREFURSAgICAgICA9IDM7XG5leHBvcnQgY29uc3QgUkVHRVhQICAgICA9IDQ7XG5leHBvcnQgY29uc3QgTUFQICAgICAgICA9IDU7XG5leHBvcnQgY29uc3QgU0VUICAgICAgICA9IDY7XG5leHBvcnQgY29uc3QgRVJST1IgICAgICA9IDc7XG5leHBvcnQgY29uc3QgQklHSU5UICAgICA9IDg7XG4vLyBleHBvcnQgY29uc3QgU1lNQk9MID0gOTtcbiIsICJpbXBvcnQge1xuICBWT0lELCBQUklNSVRJVkUsXG4gIEFSUkFZLCBPQkpFQ1QsXG4gIERBVEUsIFJFR0VYUCwgTUFQLCBTRVQsXG4gIEVSUk9SLCBCSUdJTlRcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmNvbnN0IGVudiA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWxUaGlzO1xuXG5jb25zdCBkZXNlcmlhbGl6ZXIgPSAoJCwgXykgPT4ge1xuICBjb25zdCBhcyA9IChvdXQsIGluZGV4KSA9PiB7XG4gICAgJC5zZXQoaW5kZXgsIG91dCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICBjb25zdCB1bnBhaXIgPSBpbmRleCA9PiB7XG4gICAgaWYgKCQuaGFzKGluZGV4KSlcbiAgICAgIHJldHVybiAkLmdldChpbmRleCk7XG5cbiAgICBjb25zdCBbdHlwZSwgdmFsdWVdID0gX1tpbmRleF07XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFBSSU1JVElWRTpcbiAgICAgIGNhc2UgVk9JRDpcbiAgICAgICAgcmV0dXJuIGFzKHZhbHVlLCBpbmRleCk7XG4gICAgICBjYXNlIEFSUkFZOiB7XG4gICAgICAgIGNvbnN0IGFyciA9IGFzKFtdLCBpbmRleCk7XG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgdmFsdWUpXG4gICAgICAgICAgYXJyLnB1c2godW5wYWlyKGluZGV4KSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9XG4gICAgICBjYXNlIE9CSkVDVDoge1xuICAgICAgICBjb25zdCBvYmplY3QgPSBhcyh7fSwgaW5kZXgpO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGluZGV4XSBvZiB2YWx1ZSlcbiAgICAgICAgICBvYmplY3RbdW5wYWlyKGtleSldID0gdW5wYWlyKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cbiAgICAgIGNhc2UgREFURTpcbiAgICAgICAgcmV0dXJuIGFzKG5ldyBEYXRlKHZhbHVlKSwgaW5kZXgpO1xuICAgICAgY2FzZSBSRUdFWFA6IHtcbiAgICAgICAgY29uc3Qge3NvdXJjZSwgZmxhZ3N9ID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBhcyhuZXcgUmVnRXhwKHNvdXJjZSwgZmxhZ3MpLCBpbmRleCk7XG4gICAgICB9XG4gICAgICBjYXNlIE1BUDoge1xuICAgICAgICBjb25zdCBtYXAgPSBhcyhuZXcgTWFwLCBpbmRleCk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgaW5kZXhdIG9mIHZhbHVlKVxuICAgICAgICAgIG1hcC5zZXQodW5wYWlyKGtleSksIHVucGFpcihpbmRleCkpO1xuICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgfVxuICAgICAgY2FzZSBTRVQ6IHtcbiAgICAgICAgY29uc3Qgc2V0ID0gYXMobmV3IFNldCwgaW5kZXgpO1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHZhbHVlKVxuICAgICAgICAgIHNldC5hZGQodW5wYWlyKGluZGV4KSk7XG4gICAgICAgIHJldHVybiBzZXQ7XG4gICAgICB9XG4gICAgICBjYXNlIEVSUk9SOiB7XG4gICAgICAgIGNvbnN0IHtuYW1lLCBtZXNzYWdlfSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYXMobmV3IGVudltuYW1lXShtZXNzYWdlKSwgaW5kZXgpO1xuICAgICAgfVxuICAgICAgY2FzZSBCSUdJTlQ6XG4gICAgICAgIHJldHVybiBhcyhCaWdJbnQodmFsdWUpLCBpbmRleCk7XG4gICAgICBjYXNlICdCaWdJbnQnOlxuICAgICAgICByZXR1cm4gYXMoT2JqZWN0KEJpZ0ludCh2YWx1ZSkpLCBpbmRleCk7XG4gICAgICBjYXNlICdBcnJheUJ1ZmZlcic6XG4gICAgICAgIHJldHVybiBhcyhuZXcgVWludDhBcnJheSh2YWx1ZSkuYnVmZmVyLCB2YWx1ZSk7XG4gICAgICBjYXNlICdEYXRhVmlldyc6IHtcbiAgICAgICAgY29uc3QgeyBidWZmZXIgfSA9IG5ldyBVaW50OEFycmF5KHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFzKG5ldyBEYXRhVmlldyhidWZmZXIpLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcyhuZXcgZW52W3R5cGVdKHZhbHVlKSwgaW5kZXgpO1xuICB9O1xuXG4gIHJldHVybiB1bnBhaXI7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtBcnJheTxzdHJpbmcsYW55Pn0gUmVjb3JkIGEgdHlwZSByZXByZXNlbnRhdGlvblxuICovXG5cbi8qKlxuICogUmV0dXJucyBhIGRlc2VyaWFsaXplZCB2YWx1ZSBmcm9tIGEgc2VyaWFsaXplZCBhcnJheSBvZiBSZWNvcmRzLlxuICogQHBhcmFtIHtSZWNvcmRbXX0gc2VyaWFsaXplZCBhIHByZXZpb3VzbHkgc2VyaWFsaXplZCB2YWx1ZS5cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmV4cG9ydCBjb25zdCBkZXNlcmlhbGl6ZSA9IHNlcmlhbGl6ZWQgPT4gZGVzZXJpYWxpemVyKG5ldyBNYXAsIHNlcmlhbGl6ZWQpKDApO1xuIiwgImltcG9ydCB7XG4gIFZPSUQsIFBSSU1JVElWRSxcbiAgQVJSQVksIE9CSkVDVCxcbiAgREFURSwgUkVHRVhQLCBNQVAsIFNFVCxcbiAgRVJST1IsIEJJR0lOVFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuY29uc3QgRU1QVFkgPSAnJztcblxuY29uc3Qge3RvU3RyaW5nfSA9IHt9O1xuY29uc3Qge2tleXN9ID0gT2JqZWN0O1xuXG5jb25zdCB0eXBlT2YgPSB2YWx1ZSA9PiB7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlICE9PSAnb2JqZWN0JyB8fCAhdmFsdWUpXG4gICAgcmV0dXJuIFtQUklNSVRJVkUsIHR5cGVdO1xuXG4gIGNvbnN0IGFzU3RyaW5nID0gdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpO1xuICBzd2l0Y2ggKGFzU3RyaW5nKSB7XG4gICAgY2FzZSAnQXJyYXknOlxuICAgICAgcmV0dXJuIFtBUlJBWSwgRU1QVFldO1xuICAgIGNhc2UgJ09iamVjdCc6XG4gICAgICByZXR1cm4gW09CSkVDVCwgRU1QVFldO1xuICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgcmV0dXJuIFtEQVRFLCBFTVBUWV07XG4gICAgY2FzZSAnUmVnRXhwJzpcbiAgICAgIHJldHVybiBbUkVHRVhQLCBFTVBUWV07XG4gICAgY2FzZSAnTWFwJzpcbiAgICAgIHJldHVybiBbTUFQLCBFTVBUWV07XG4gICAgY2FzZSAnU2V0JzpcbiAgICAgIHJldHVybiBbU0VULCBFTVBUWV07XG4gICAgY2FzZSAnRGF0YVZpZXcnOlxuICAgICAgcmV0dXJuIFtBUlJBWSwgYXNTdHJpbmddO1xuICB9XG5cbiAgaWYgKGFzU3RyaW5nLmluY2x1ZGVzKCdBcnJheScpKVxuICAgIHJldHVybiBbQVJSQVksIGFzU3RyaW5nXTtcblxuICBpZiAoYXNTdHJpbmcuaW5jbHVkZXMoJ0Vycm9yJykpXG4gICAgcmV0dXJuIFtFUlJPUiwgYXNTdHJpbmddO1xuXG4gIHJldHVybiBbT0JKRUNULCBhc1N0cmluZ107XG59O1xuXG5jb25zdCBzaG91bGRTa2lwID0gKFtUWVBFLCB0eXBlXSkgPT4gKFxuICBUWVBFID09PSBQUklNSVRJVkUgJiZcbiAgKHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ3N5bWJvbCcpXG4pO1xuXG5jb25zdCBzZXJpYWxpemVyID0gKHN0cmljdCwganNvbiwgJCwgXykgPT4ge1xuXG4gIGNvbnN0IGFzID0gKG91dCwgdmFsdWUpID0+IHtcbiAgICBjb25zdCBpbmRleCA9IF8ucHVzaChvdXQpIC0gMTtcbiAgICAkLnNldCh2YWx1ZSwgaW5kZXgpO1xuICAgIHJldHVybiBpbmRleDtcbiAgfTtcblxuICBjb25zdCBwYWlyID0gdmFsdWUgPT4ge1xuICAgIGlmICgkLmhhcyh2YWx1ZSkpXG4gICAgICByZXR1cm4gJC5nZXQodmFsdWUpO1xuXG4gICAgbGV0IFtUWVBFLCB0eXBlXSA9IHR5cGVPZih2YWx1ZSk7XG4gICAgc3dpdGNoIChUWVBFKSB7XG4gICAgICBjYXNlIFBSSU1JVElWRToge1xuICAgICAgICBsZXQgZW50cnkgPSB2YWx1ZTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnYmlnaW50JzpcbiAgICAgICAgICAgIFRZUEUgPSBCSUdJTlQ7XG4gICAgICAgICAgICBlbnRyeSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgICAgICAgIGlmIChzdHJpY3QpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBzZXJpYWxpemUgJyArIHR5cGUpO1xuICAgICAgICAgICAgZW50cnkgPSBudWxsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgIHJldHVybiBhcyhbVk9JRF0sIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXMoW1RZUEUsIGVudHJ5XSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgY2FzZSBBUlJBWToge1xuICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgIGxldCBzcHJlYWQgPSB2YWx1ZTtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ0RhdGFWaWV3Jykge1xuICAgICAgICAgICAgc3ByZWFkID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUuYnVmZmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ0FycmF5QnVmZmVyJykge1xuICAgICAgICAgICAgc3ByZWFkID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXMoW3R5cGUsIFsuLi5zcHJlYWRdXSwgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXMoW1RZUEUsIGFycl0sIHZhbHVlKTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB2YWx1ZSlcbiAgICAgICAgICBhcnIucHVzaChwYWlyKGVudHJ5KSk7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAgIGNhc2UgT0JKRUNUOiB7XG4gICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdCaWdJbnQnOlxuICAgICAgICAgICAgICByZXR1cm4gYXMoW3R5cGUsIHZhbHVlLnRvU3RyaW5nKCldLCB2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlICdCb29sZWFuJzpcbiAgICAgICAgICAgIGNhc2UgJ051bWJlcic6XG4gICAgICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICAgICAgICByZXR1cm4gYXMoW3R5cGUsIHZhbHVlLnZhbHVlT2YoKV0sIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoanNvbiAmJiAoJ3RvSlNPTicgaW4gdmFsdWUpKVxuICAgICAgICAgIHJldHVybiBwYWlyKHZhbHVlLnRvSlNPTigpKTtcblxuICAgICAgICBjb25zdCBlbnRyaWVzID0gW107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXMoW1RZUEUsIGVudHJpZXNdLCB2YWx1ZSk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXModmFsdWUpKSB7XG4gICAgICAgICAgaWYgKHN0cmljdCB8fCAhc2hvdWxkU2tpcCh0eXBlT2YodmFsdWVba2V5XSkpKVxuICAgICAgICAgICAgZW50cmllcy5wdXNoKFtwYWlyKGtleSksIHBhaXIodmFsdWVba2V5XSldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgICBjYXNlIERBVEU6XG4gICAgICAgIHJldHVybiBhcyhbVFlQRSwgdmFsdWUudG9JU09TdHJpbmcoKV0sIHZhbHVlKTtcbiAgICAgIGNhc2UgUkVHRVhQOiB7XG4gICAgICAgIGNvbnN0IHtzb3VyY2UsIGZsYWdzfSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYXMoW1RZUEUsIHtzb3VyY2UsIGZsYWdzfV0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgTUFQOiB7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhcyhbVFlQRSwgZW50cmllc10sIHZhbHVlKTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgdmFsdWUpIHtcbiAgICAgICAgICBpZiAoc3RyaWN0IHx8ICEoc2hvdWxkU2tpcCh0eXBlT2Yoa2V5KSkgfHwgc2hvdWxkU2tpcCh0eXBlT2YoZW50cnkpKSkpXG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW3BhaXIoa2V5KSwgcGFpcihlbnRyeSldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgICBjYXNlIFNFVDoge1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gW107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXMoW1RZUEUsIGVudHJpZXNdLCB2YWx1ZSk7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdmFsdWUpIHtcbiAgICAgICAgICBpZiAoc3RyaWN0IHx8ICFzaG91bGRTa2lwKHR5cGVPZihlbnRyeSkpKVxuICAgICAgICAgICAgZW50cmllcy5wdXNoKHBhaXIoZW50cnkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qge21lc3NhZ2V9ID0gdmFsdWU7XG4gICAgcmV0dXJuIGFzKFtUWVBFLCB7bmFtZTogdHlwZSwgbWVzc2FnZX1dLCB2YWx1ZSk7XG4gIH07XG5cbiAgcmV0dXJuIHBhaXI7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtBcnJheTxzdHJpbmcsYW55Pn0gUmVjb3JkIGEgdHlwZSByZXByZXNlbnRhdGlvblxuICovXG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBzZXJpYWxpemVkIFJlY29yZHMuXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgYSBzZXJpYWxpemFibGUgdmFsdWUuXG4gKiBAcGFyYW0ge3tqc29uPzogYm9vbGVhbiwgbG9zc3k/OiBib29sZWFufT99IG9wdGlvbnMgYW4gb2JqZWN0IHdpdGggYSBgbG9zc3lgIG9yIGBqc29uYCBwcm9wZXJ0eSB0aGF0LFxuICogIGlmIGB0cnVlYCwgd2lsbCBub3QgdGhyb3cgZXJyb3JzIG9uIGluY29tcGF0aWJsZSB0eXBlcywgYW5kIGJlaGF2ZSBtb3JlXG4gKiAgbGlrZSBKU09OIHN0cmluZ2lmeSB3b3VsZCBiZWhhdmUuIFN5bWJvbCBhbmQgRnVuY3Rpb24gd2lsbCBiZSBkaXNjYXJkZWQuXG4gKiBAcmV0dXJucyB7UmVjb3JkW119XG4gKi9cbiBleHBvcnQgY29uc3Qgc2VyaWFsaXplID0gKHZhbHVlLCB7anNvbiwgbG9zc3l9ID0ge30pID0+IHtcbiAgY29uc3QgXyA9IFtdO1xuICByZXR1cm4gc2VyaWFsaXplcighKGpzb24gfHwgbG9zc3kpLCAhIWpzb24sIG5ldyBNYXAsIF8pKHZhbHVlKSwgXztcbn07XG4iLCAiaW1wb3J0IHtkZXNlcmlhbGl6ZX0gZnJvbSAnLi9kZXNlcmlhbGl6ZS5qcyc7XG5pbXBvcnQge3NlcmlhbGl6ZX0gZnJvbSAnLi9zZXJpYWxpemUuanMnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtBcnJheTxzdHJpbmcsYW55Pn0gUmVjb3JkIGEgdHlwZSByZXByZXNlbnRhdGlvblxuICovXG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBzZXJpYWxpemVkIFJlY29yZHMuXG4gKiBAcGFyYW0ge2FueX0gYW55IGEgc2VyaWFsaXphYmxlIHZhbHVlLlxuICogQHBhcmFtIHt7dHJhbnNmZXI/OiBhbnlbXSwganNvbj86IGJvb2xlYW4sIGxvc3N5PzogYm9vbGVhbn0/fSBvcHRpb25zIGFuIG9iamVjdCB3aXRoXG4gKiBhIHRyYW5zZmVyIG9wdGlvbiAoaWdub3JlZCB3aGVuIHBvbHlmaWxsZWQpIGFuZC9vciBub24gc3RhbmRhcmQgZmllbGRzIHRoYXRcbiAqIGZhbGxiYWNrIHRvIHRoZSBwb2x5ZmlsbCBpZiBwcmVzZW50LlxuICogQHJldHVybnMge1JlY29yZFtdfVxuICovXG5leHBvcnQgZGVmYXVsdCB0eXBlb2Ygc3RydWN0dXJlZENsb25lID09PSBcImZ1bmN0aW9uXCIgP1xuICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgKGFueSwgb3B0aW9ucykgPT4gKFxuICAgIG9wdGlvbnMgJiYgKCdqc29uJyBpbiBvcHRpb25zIHx8ICdsb3NzeScgaW4gb3B0aW9ucykgP1xuICAgICAgZGVzZXJpYWxpemUoc2VyaWFsaXplKGFueSwgb3B0aW9ucykpIDogc3RydWN0dXJlZENsb25lKGFueSlcbiAgKSA6XG4gIChhbnksIG9wdGlvbnMpID0+IGRlc2VyaWFsaXplKHNlcmlhbGl6ZShhbnksIG9wdGlvbnMpKTtcbiAgLyogYzggaWdub3JlIHN0b3AgKi9cblxuZXhwb3J0IHtkZXNlcmlhbGl6ZSwgc2VyaWFsaXplfTtcbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuTm9kZX0gTm9kZVxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Qb2ludH0gUG9pbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuUG9zaXRpb259IFBvc2l0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBOb2RlTGlrZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAqIEBwcm9wZXJ0eSB7UG9zaXRpb25MaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3Bvc2l0aW9uXVxuICpcbiAqIEB0eXBlZGVmIFBvc2l0aW9uTGlrZVxuICogQHByb3BlcnR5IHtQb2ludExpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBbc3RhcnRdXG4gKiBAcHJvcGVydHkge1BvaW50TGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IFtlbmRdXG4gKlxuICogQHR5cGVkZWYgUG9pbnRMaWtlXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFtsaW5lXVxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbY29sdW1uXVxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbb2Zmc2V0XVxuICovXG5cbi8qKlxuICogR2V0IHRoZSBlbmRpbmcgcG9pbnQgb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSBub2RlXG4gKiAgIE5vZGUuXG4gKiBAcmV0dXJuc1xuICogICBQb2ludC5cbiAqL1xuZXhwb3J0IGNvbnN0IHBvaW50RW5kID0gcG9pbnQoJ2VuZCcpXG5cbi8qKlxuICogR2V0IHRoZSBzdGFydGluZyBwb2ludCBvZiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIG5vZGVcbiAqICAgTm9kZS5cbiAqIEByZXR1cm5zXG4gKiAgIFBvaW50LlxuICovXG5leHBvcnQgY29uc3QgcG9pbnRTdGFydCA9IHBvaW50KCdzdGFydCcpXG5cbi8qKlxuICogR2V0IHRoZSBwb3NpdGlvbmFsIGluZm8gb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7J2VuZCcgfCAnc3RhcnQnfSB0eXBlXG4gKiAgIFNpZGUuXG4gKiBAcmV0dXJuc1xuICogICBHZXR0ZXIuXG4gKi9cbmZ1bmN0aW9uIHBvaW50KHR5cGUpIHtcbiAgcmV0dXJuIHBvaW50XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9pbnQgaW5mbyBvZiBgbm9kZWAgYXQgYSBib3VuZCBzaWRlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IFtub2RlXVxuICAgKiBAcmV0dXJucyB7UG9pbnQgfCB1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiBwb2ludChub2RlKSB7XG4gICAgY29uc3QgcG9pbnQgPSAobm9kZSAmJiBub2RlLnBvc2l0aW9uICYmIG5vZGUucG9zaXRpb25bdHlwZV0pIHx8IHt9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgcG9pbnQubGluZSA9PT0gJ251bWJlcicgJiZcbiAgICAgIHBvaW50LmxpbmUgPiAwICYmXG4gICAgICB0eXBlb2YgcG9pbnQuY29sdW1uID09PSAnbnVtYmVyJyAmJlxuICAgICAgcG9pbnQuY29sdW1uID4gMFxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogcG9pbnQubGluZSxcbiAgICAgICAgY29sdW1uOiBwb2ludC5jb2x1bW4sXG4gICAgICAgIG9mZnNldDpcbiAgICAgICAgICB0eXBlb2YgcG9pbnQub2Zmc2V0ID09PSAnbnVtYmVyJyAmJiBwb2ludC5vZmZzZXQgPiAtMVxuICAgICAgICAgICAgPyBwb2ludC5vZmZzZXRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBwb3NpdGlvbmFsIGluZm8gb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gW25vZGVdXG4gKiAgIE5vZGUuXG4gKiBAcmV0dXJucyB7UG9zaXRpb24gfCB1bmRlZmluZWR9XG4gKiAgIFBvc2l0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9zaXRpb24obm9kZSkge1xuICBjb25zdCBzdGFydCA9IHBvaW50U3RhcnQobm9kZSlcbiAgY29uc3QgZW5kID0gcG9pbnRFbmQobm9kZSlcblxuICBpZiAoc3RhcnQgJiYgZW5kKSB7XG4gICAgcmV0dXJuIHtzdGFydCwgZW5kfVxuICB9XG59XG4iLCAiZXhwb3J0IHtwb2ludEVuZCwgcG9pbnRTdGFydCwgcG9zaXRpb259IGZyb20gJy4vbGliL2luZGV4LmpzJ1xuIiwgIi8qKlxuICogQGltcG9ydCB7U2NoZW1hfSBmcm9tICdoYXN0LXV0aWwtc2FuaXRpemUnXG4gKi9cblxuLy8gQ291cGxlIG9mIEFSSUEgYXR0cmlidXRlcyBhbGxvd2VkIGluIHNldmVyYWwsIGJ1dCBub3QgYWxsLCBwbGFjZXMuXG5jb25zdCBhcmlhID0gWydhcmlhRGVzY3JpYmVkQnknLCAnYXJpYUxhYmVsJywgJ2FyaWFMYWJlbGxlZEJ5J11cblxuLyoqXG4gKiBEZWZhdWx0IHNjaGVtYS5cbiAqXG4gKiBGb2xsb3dzIEdpdEh1YiBzdHlsZSBzYW5pdGF0aW9uLlxuICpcbiAqIEB0eXBlIHtTY2hlbWF9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2NoZW1hID0ge1xuICBhbmNlc3RvcnM6IHtcbiAgICB0Ym9keTogWyd0YWJsZSddLFxuICAgIHRkOiBbJ3RhYmxlJ10sXG4gICAgdGg6IFsndGFibGUnXSxcbiAgICB0aGVhZDogWyd0YWJsZSddLFxuICAgIHRmb290OiBbJ3RhYmxlJ10sXG4gICAgdHI6IFsndGFibGUnXVxuICB9LFxuICBhdHRyaWJ1dGVzOiB7XG4gICAgYTogW1xuICAgICAgLi4uYXJpYSxcbiAgICAgIC8vIE5vdGU6IHRoZXNlIDMgYXJlIHVzZWQgYnkgR0ZNIGZvb3Rub3RlcywgdGhleSBkbyB3b3JrIG9uIGFsbCBsaW5rcy5cbiAgICAgICdkYXRhRm9vdG5vdGVCYWNrcmVmJyxcbiAgICAgICdkYXRhRm9vdG5vdGVSZWYnLFxuICAgICAgWydjbGFzc05hbWUnLCAnZGF0YS1mb290bm90ZS1iYWNrcmVmJ10sXG4gICAgICAnaHJlZidcbiAgICBdLFxuICAgIGJsb2NrcXVvdGU6IFsnY2l0ZSddLFxuICAgIC8vIE5vdGU6IHRoaXMgY2xhc3MgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZ1xuICAgIC8vIGBjb2RlYCBhcyBIVE1MIGluIG1hcmtkb3duLCB0aGV5IGFkZHMgaXQgc29tZSBvdGhlciB3YXkuXG4gICAgLy8gV2UgY2FuXHUyMDE5dCBkbyB0aGF0LCBzbyB3ZSBoYXZlIHRvIGFsbG93IGl0LlxuICAgIGNvZGU6IFtbJ2NsYXNzTmFtZScsIC9ebGFuZ3VhZ2UtLi9dXSxcbiAgICBkZWw6IFsnY2l0ZSddLFxuICAgIGRpdjogWydpdGVtU2NvcGUnLCAnaXRlbVR5cGUnXSxcbiAgICBkbDogWy4uLmFyaWFdLFxuICAgIC8vIE5vdGU6IHRoaXMgaXMgdXNlZCBieSBHRk0gZm9vdG5vdGVzLlxuICAgIGgyOiBbWydjbGFzc05hbWUnLCAnc3Itb25seSddXSxcbiAgICBpbWc6IFsuLi5hcmlhLCAnbG9uZ0Rlc2MnLCAnc3JjJ10sXG4gICAgLy8gTm90ZTogYGlucHV0YCBpcyBub3Qgbm9ybWFsbHkgYWxsb3dlZCBieSBHSCwgd2hlbiBtYW51YWxseSB3cml0aW5nXG4gICAgLy8gaXQgaW4gbWFya2Rvd24sIHRoZXkgYWRkIGl0IGZyb20gdGFza2xpc3RzIHNvbWUgb3RoZXIgd2F5LlxuICAgIC8vIFdlIGNhblx1MjAxOXQgZG8gdGhhdCwgc28gd2UgaGF2ZSB0byBhbGxvdyBpdC5cbiAgICBpbnB1dDogW1xuICAgICAgWydkaXNhYmxlZCcsIHRydWVdLFxuICAgICAgWyd0eXBlJywgJ2NoZWNrYm94J11cbiAgICBdLFxuICAgIGluczogWydjaXRlJ10sXG4gICAgLy8gTm90ZTogdGhpcyBjbGFzcyBpcyBub3Qgbm9ybWFsbHkgYWxsb3dlZCBieSBHSCwgd2hlbiBtYW51YWxseSB3cml0aW5nXG4gICAgLy8gYGxpYCBhcyBIVE1MIGluIG1hcmtkb3duLCB0aGV5IGFkZHMgaXQgc29tZSBvdGhlciB3YXkuXG4gICAgLy8gV2UgY2FuXHUyMDE5dCBkbyB0aGF0LCBzbyB3ZSBoYXZlIHRvIGFsbG93IGl0LlxuICAgIGxpOiBbWydjbGFzc05hbWUnLCAndGFzay1saXN0LWl0ZW0nXV0sXG4gICAgLy8gTm90ZTogdGhpcyBjbGFzcyBpcyBub3Qgbm9ybWFsbHkgYWxsb3dlZCBieSBHSCwgd2hlbiBtYW51YWxseSB3cml0aW5nXG4gICAgLy8gYG9sYCBhcyBIVE1MIGluIG1hcmtkb3duLCB0aGV5IGFkZHMgaXQgc29tZSBvdGhlciB3YXkuXG4gICAgLy8gV2UgY2FuXHUyMDE5dCBkbyB0aGF0LCBzbyB3ZSBoYXZlIHRvIGFsbG93IGl0LlxuICAgIG9sOiBbLi4uYXJpYSwgWydjbGFzc05hbWUnLCAnY29udGFpbnMtdGFzay1saXN0J11dLFxuICAgIHE6IFsnY2l0ZSddLFxuICAgIHNlY3Rpb246IFsnZGF0YUZvb3Rub3RlcycsIFsnY2xhc3NOYW1lJywgJ2Zvb3Rub3RlcyddXSxcbiAgICBzb3VyY2U6IFsnc3JjU2V0J10sXG4gICAgc3VtbWFyeTogWy4uLmFyaWFdLFxuICAgIHRhYmxlOiBbLi4uYXJpYV0sXG4gICAgLy8gTm90ZTogdGhpcyBjbGFzcyBpcyBub3Qgbm9ybWFsbHkgYWxsb3dlZCBieSBHSCwgd2hlbiBtYW51YWxseSB3cml0aW5nXG4gICAgLy8gYG9sYCBhcyBIVE1MIGluIG1hcmtkb3duLCB0aGV5IGFkZHMgaXQgc29tZSBvdGhlciB3YXkuXG4gICAgLy8gV2UgY2FuXHUyMDE5dCBkbyB0aGF0LCBzbyB3ZSBoYXZlIHRvIGFsbG93IGl0LlxuICAgIHVsOiBbLi4uYXJpYSwgWydjbGFzc05hbWUnLCAnY29udGFpbnMtdGFzay1saXN0J11dLFxuICAgICcqJzogW1xuICAgICAgJ2FiYnInLFxuICAgICAgJ2FjY2VwdCcsXG4gICAgICAnYWNjZXB0Q2hhcnNldCcsXG4gICAgICAnYWNjZXNzS2V5JyxcbiAgICAgICdhY3Rpb24nLFxuICAgICAgJ2FsaWduJyxcbiAgICAgICdhbHQnLFxuICAgICAgJ2F4aXMnLFxuICAgICAgJ2JvcmRlcicsXG4gICAgICAnY2VsbFBhZGRpbmcnLFxuICAgICAgJ2NlbGxTcGFjaW5nJyxcbiAgICAgICdjaGFyJyxcbiAgICAgICdjaGFyT2ZmJyxcbiAgICAgICdjaGFyU2V0JyxcbiAgICAgICdjaGVja2VkJyxcbiAgICAgICdjbGVhcicsXG4gICAgICAnY29sU3BhbicsXG4gICAgICAnY29sb3InLFxuICAgICAgJ2NvbHMnLFxuICAgICAgJ2NvbXBhY3QnLFxuICAgICAgJ2Nvb3JkcycsXG4gICAgICAnZGF0ZVRpbWUnLFxuICAgICAgJ2RpcicsXG4gICAgICAvLyBOb3RlOiBgZGlzYWJsZWRgIGlzIHRlY2huaWNhbGx5IGFsbG93ZWQgb24gYWxsIGVsZW1lbnRzIGJ5IEdILlxuICAgICAgLy8gQnV0IGl0IGlzIHVzZWxlc3Mgb24gZXZlcnl0aGluZyBleGNlcHQgYGlucHV0YC5cbiAgICAgIC8vIEJlY2F1c2UgYGlucHV0YHMgYXJlIG5vcm1hbGx5IG5vdCBhbGxvd2VkLCBidXQgd2UgYWxsb3cgdGhlbSBmb3JcbiAgICAgIC8vIGNoZWNrYm94ZXMgZHVlIHRvIHRhc2tsaXN0cywgd2UgYWxsb3cgYGRpc2FibGVkYCBvbmx5IHRoZXJlLlxuICAgICAgJ2VuY1R5cGUnLFxuICAgICAgJ2ZyYW1lJyxcbiAgICAgICdoU3BhY2UnLFxuICAgICAgJ2hlYWRlcnMnLFxuICAgICAgJ2hlaWdodCcsXG4gICAgICAnaHJlZkxhbmcnLFxuICAgICAgJ2h0bWxGb3InLFxuICAgICAgJ2lkJyxcbiAgICAgICdpc01hcCcsXG4gICAgICAnaXRlbVByb3AnLFxuICAgICAgJ2xhYmVsJyxcbiAgICAgICdsYW5nJyxcbiAgICAgICdtYXhMZW5ndGgnLFxuICAgICAgJ21lZGlhJyxcbiAgICAgICdtZXRob2QnLFxuICAgICAgJ211bHRpcGxlJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdub0hyZWYnLFxuICAgICAgJ25vU2hhZGUnLFxuICAgICAgJ25vV3JhcCcsXG4gICAgICAnb3BlbicsXG4gICAgICAncHJvbXB0JyxcbiAgICAgICdyZWFkT25seScsXG4gICAgICAncmV2JyxcbiAgICAgICdyb3dTcGFuJyxcbiAgICAgICdyb3dzJyxcbiAgICAgICdydWxlcycsXG4gICAgICAnc2NvcGUnLFxuICAgICAgJ3NlbGVjdGVkJyxcbiAgICAgICdzaGFwZScsXG4gICAgICAnc2l6ZScsXG4gICAgICAnc3BhbicsXG4gICAgICAnc3RhcnQnLFxuICAgICAgJ3N1bW1hcnknLFxuICAgICAgJ3RhYkluZGV4JyxcbiAgICAgICd0aXRsZScsXG4gICAgICAndXNlTWFwJyxcbiAgICAgICd2QWxpZ24nLFxuICAgICAgJ3ZhbHVlJyxcbiAgICAgICd3aWR0aCdcbiAgICBdXG4gIH0sXG4gIGNsb2JiZXI6IFsnYXJpYURlc2NyaWJlZEJ5JywgJ2FyaWFMYWJlbGxlZEJ5JywgJ2lkJywgJ25hbWUnXSxcbiAgY2xvYmJlclByZWZpeDogJ3VzZXItY29udGVudC0nLFxuICBwcm90b2NvbHM6IHtcbiAgICBjaXRlOiBbJ2h0dHAnLCAnaHR0cHMnXSxcbiAgICBocmVmOiBbJ2h0dHAnLCAnaHR0cHMnLCAnaXJjJywgJ2lyY3MnLCAnbWFpbHRvJywgJ3htcHAnXSxcbiAgICBsb25nRGVzYzogWydodHRwJywgJ2h0dHBzJ10sXG4gICAgc3JjOiBbJ2h0dHAnLCAnaHR0cHMnXVxuICB9LFxuICByZXF1aXJlZDoge1xuICAgIGlucHV0OiB7ZGlzYWJsZWQ6IHRydWUsIHR5cGU6ICdjaGVja2JveCd9XG4gIH0sXG4gIHN0cmlwOiBbJ3NjcmlwdCddLFxuICB0YWdOYW1lczogW1xuICAgICdhJyxcbiAgICAnYicsXG4gICAgJ2Jsb2NrcXVvdGUnLFxuICAgICdicicsXG4gICAgJ2NvZGUnLFxuICAgICdkZCcsXG4gICAgJ2RlbCcsXG4gICAgJ2RldGFpbHMnLFxuICAgICdkaXYnLFxuICAgICdkbCcsXG4gICAgJ2R0JyxcbiAgICAnZW0nLFxuICAgICdoMScsXG4gICAgJ2gyJyxcbiAgICAnaDMnLFxuICAgICdoNCcsXG4gICAgJ2g1JyxcbiAgICAnaDYnLFxuICAgICdocicsXG4gICAgJ2knLFxuICAgICdpbWcnLFxuICAgIC8vIE5vdGU6IGBpbnB1dGAgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZ1xuICAgIC8vIGl0IGluIG1hcmtkb3duLCB0aGV5IGFkZCBpdCBmcm9tIHRhc2tsaXN0cyBzb21lIG90aGVyIHdheS5cbiAgICAvLyBXZSBjYW5cdTIwMTl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuXG4gICAgJ2lucHV0JyxcbiAgICAnaW5zJyxcbiAgICAna2JkJyxcbiAgICAnbGknLFxuICAgICdvbCcsXG4gICAgJ3AnLFxuICAgICdwaWN0dXJlJyxcbiAgICAncHJlJyxcbiAgICAncScsXG4gICAgJ3JwJyxcbiAgICAncnQnLFxuICAgICdydWJ5JyxcbiAgICAncycsXG4gICAgJ3NhbXAnLFxuICAgICdzZWN0aW9uJyxcbiAgICAnc291cmNlJyxcbiAgICAnc3BhbicsXG4gICAgJ3N0cmlrZScsXG4gICAgJ3N0cm9uZycsXG4gICAgJ3N1YicsXG4gICAgJ3N1bW1hcnknLFxuICAgICdzdXAnLFxuICAgICd0YWJsZScsXG4gICAgJ3Rib2R5JyxcbiAgICAndGQnLFxuICAgICd0Zm9vdCcsXG4gICAgJ3RoJyxcbiAgICAndGhlYWQnLFxuICAgICd0cicsXG4gICAgJ3R0JyxcbiAgICAndWwnLFxuICAgICd2YXInXG4gIF1cbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge1xuICogICBDb21tZW50LFxuICogICBEb2N0eXBlLFxuICogICBFbGVtZW50Q29udGVudCxcbiAqICAgRWxlbWVudCxcbiAqICAgTm9kZXMsXG4gKiAgIFByb3BlcnRpZXMsXG4gKiAgIFJvb3RDb250ZW50LFxuICogICBSb290LFxuICogICBUZXh0XG4gKiB9IGZyb20gJ2hhc3QnXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7W3N0cmluZywgLi4uQXJyYXk8RXhjbHVkZTxQcm9wZXJ0aWVzW2tleW9mIFByb3BlcnRpZXNdLCBBcnJheTxhbnk+PiB8IFJlZ0V4cD5dIHwgc3RyaW5nfSBQcm9wZXJ0eURlZmluaXRpb25cbiAqICAgRGVmaW5pdGlvbiBmb3IgYSBwcm9wZXJ0eS5cbiAqXG4gKiBAdHlwZWRlZiBTY2hlbWFcbiAqICAgU2NoZW1hIHRoYXQgZGVmaW5lcyB3aGF0IG5vZGVzIGFuZCBwcm9wZXJ0aWVzIGFyZSBhbGxvd2VkLlxuICpcbiAqICAgVGhlIGRlZmF1bHQgc2NoZW1hIGlzIGBkZWZhdWx0U2NoZW1hYCwgd2hpY2ggZm9sbG93cyBob3cgR2l0SHViIGNsZWFucy5cbiAqICAgSWYgYW55IHRvcC1sZXZlbCBrZXkgaXMgbWlzc2luZyBpbiB0aGUgZ2l2ZW4gc2NoZW1hLCB0aGUgY29ycmVzcG9uZGluZ1xuICogICB2YWx1ZSBvZiB0aGUgZGVmYXVsdCBzY2hlbWEgaXMgdXNlZC5cbiAqXG4gKiAgIFRvIGV4dGVuZCB0aGUgc3RhbmRhcmQgc2NoZW1hIHdpdGggYSBmZXcgY2hhbmdlcywgY2xvbmUgYGRlZmF1bHRTY2hlbWFgXG4gKiAgIGxpa2Ugc286XG4gKlxuICogICBgYGBqc1xuICogICBpbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSdcbiAqICAgaW1wb3J0IHtofSBmcm9tICdoYXN0c2NyaXB0J1xuICogICBpbXBvcnQge2RlZmF1bHRTY2hlbWEsIHNhbml0aXplfSBmcm9tICdoYXN0LXV0aWwtc2FuaXRpemUnXG4gKlxuICogICAvLyBUaGlzIGFsbG93cyBgY2xhc3NOYW1lYCBvbiBhbGwgZWxlbWVudHMuXG4gKiAgIGNvbnN0IHNjaGVtYSA9IGRlZXBtZXJnZShkZWZhdWx0U2NoZW1hLCB7YXR0cmlidXRlczogeycqJzogWydjbGFzc05hbWUnXX19KVxuICpcbiAqICAgY29uc3QgdHJlZSA9IHNhbml0aXplKGgoJ2RpdicsIHtjbGFzc05hbWU6IFsnZm9vJ119KSwgc2NoZW1hKVxuICpcbiAqICAgLy8gYHRyZWVgIHN0aWxsIGhhcyBgY2xhc3NOYW1lYC5cbiAqICAgY29uc29sZS5sb2codHJlZSlcbiAqICAgLy8ge1xuICogICAvLyAgIHR5cGU6ICdlbGVtZW50JyxcbiAqICAgLy8gICB0YWdOYW1lOiAnZGl2JyxcbiAqICAgLy8gICBwcm9wZXJ0aWVzOiB7Y2xhc3NOYW1lOiBbJ2ZvbyddfSxcbiAqICAgLy8gICBjaGlsZHJlbjogW11cbiAqICAgLy8gfVxuICogICBgYGBcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFthbGxvd0NvbW1lbnRzPWZhbHNlXVxuICogICBXaGV0aGVyIHRvIGFsbG93IGNvbW1lbnQgbm9kZXMgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICpcbiAqICAgRm9yIGV4YW1wbGU6XG4gKlxuICogICBgYGBqc1xuICogICBhbGxvd0NvbW1lbnRzOiB0cnVlXG4gKiAgIGBgYFxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2FsbG93RG9jdHlwZXM9ZmFsc2VdXG4gKiAgIFdoZXRoZXIgdG8gYWxsb3cgZG9jdHlwZSBub2RlcyAoZGVmYXVsdDogYGZhbHNlYCkuXG4gKlxuICogICBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgIGBgYGpzXG4gKiAgIGFsbG93RG9jdHlwZXM6IHRydWVcbiAqICAgYGBgXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEFycmF5PHN0cmluZz4+IHwgbnVsbCB8IHVuZGVmaW5lZH0gW2FuY2VzdG9yc11cbiAqICAgTWFwIG9mIHRhZyBuYW1lcyB0byBhIGxpc3Qgb2YgdGFnIG5hbWVzIHdoaWNoIGFyZSByZXF1aXJlZCBhbmNlc3RvcnNcbiAqICAgKGRlZmF1bHQ6IGBkZWZhdWx0U2NoZW1hLmFuY2VzdG9yc2ApLlxuICpcbiAqICAgRWxlbWVudHMgd2l0aCB0aGVzZSB0YWcgbmFtZXMgd2lsbCBiZSBpZ25vcmVkIGlmIHRoZXkgb2NjdXIgb3V0c2lkZSBvZiBvbmVcbiAqICAgb2YgdGhlaXIgYWxsb3dlZCBwYXJlbnRzLlxuICpcbiAqICAgRm9yIGV4YW1wbGU6XG4gKlxuICogICBgYGBqc1xuICogICBhbmNlc3RvcnM6IHtcbiAqICAgICB0Ym9keTogWyd0YWJsZSddLFxuICogICAgIC8vIFx1MjAyNlxuICogICAgIHRyOiBbJ3RhYmxlJ11cbiAqICAgfVxuICogICBgYGBcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgQXJyYXk8UHJvcGVydHlEZWZpbml0aW9uPj4gfCBudWxsIHwgdW5kZWZpbmVkfSBbYXR0cmlidXRlc11cbiAqICAgTWFwIG9mIHRhZyBuYW1lcyB0byBhbGxvd2VkIHByb3BlcnR5IG5hbWVzIChkZWZhdWx0OlxuICogICBgZGVmYXVsdFNjaGVtYS5hdHRyaWJ1dGVzYCkuXG4gKlxuICogICBUaGUgc3BlY2lhbCBrZXkgYCcqJ2AgYXMgYSB0YWcgbmFtZSBkZWZpbmVzIHByb3BlcnR5IG5hbWVzIGFsbG93ZWQgb24gYWxsXG4gKiAgIGVsZW1lbnRzLlxuICpcbiAqICAgVGhlIHNwZWNpYWwgdmFsdWUgYCdkYXRhKidgIGFzIGEgcHJvcGVydHkgbmFtZSBjYW4gYmUgdXNlZCB0byBhbGxvdyBhbGxcbiAqICAgYGRhdGFgIHByb3BlcnRpZXMuXG4gKlxuICogICBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgIGBgYGpzXG4gKiAgIGF0dHJpYnV0ZXM6IHtcbiAqICAgICAnYXJpYURlc2NyaWJlZEJ5JywgJ2FyaWFMYWJlbCcsICdhcmlhTGFiZWxsZWRCeScsIFx1MjAyNiwgJ2hyZWYnXG4gKiAgICAgLy8gXHUyMDI2XG4gKiAgICAgJyonOiBbXG4gKiAgICAgICAnYWJicicsXG4gKiAgICAgICAnYWNjZXB0JyxcbiAqICAgICAgICdhY2NlcHRDaGFyc2V0JyxcbiAqICAgICAgIC8vIFx1MjAyNlxuICogICAgICAgJ3ZBbGlnbicsXG4gKiAgICAgICAndmFsdWUnLFxuICogICAgICAgJ3dpZHRoJ1xuICogICAgIF1cbiAqICAgfVxuICogICBgYGBcbiAqXG4gKiAgIEluc3RlYWQgb2YgYSBzaW5nbGUgc3RyaW5nIGluIHRoZSBhcnJheSwgd2hpY2ggYWxsb3dzIGFueSBwcm9wZXJ0eSB2YWx1ZVxuICogICBmb3IgdGhlIGZpZWxkLCB5b3UgY2FuIHVzZSBhbiBhcnJheSB0byBhbGxvdyBzZXZlcmFsIHZhbHVlcy5cbiAqICAgRm9yIGV4YW1wbGUsIGBpbnB1dDogWyd0eXBlJ11gIGFsbG93cyBgdHlwZWAgc2V0IHRvIGFueSB2YWx1ZSBvbiBgaW5wdXRgcy5cbiAqICAgQnV0IGBpbnB1dDogW1sndHlwZScsICdjaGVja2JveCcsICdyYWRpbyddXWAgYWxsb3dzIGB0eXBlYCB3aGVuIHNldCB0b1xuICogICBgJ2NoZWNrYm94J2Agb3IgYCdyYWRpbydgLlxuICpcbiAqICAgWW91IGNhbiB1c2UgcmVnZXhlcywgc28gZm9yIGV4YW1wbGUgYHNwYW46IFtbJ2NsYXNzTmFtZScsIC9eaGxqcy0vXV1gXG4gKiAgIGFsbG93cyBhbnkgY2xhc3MgdGhhdCBzdGFydHMgd2l0aCBgaGxqcy1gIG9uIGBzcGFuYHMuXG4gKlxuICogICBXaGVuIGNvbW1hLSBvciBzcGFjZS1zZXBhcmF0ZWQgdmFsdWVzIGFyZSB1c2VkIChzdWNoIGFzIGBjbGFzc05hbWVgKSwgZWFjaFxuICogICB2YWx1ZSBpbiBpcyBjaGVja2VkIGluZGl2aWR1YWxseS5cbiAqICAgRm9yIGV4YW1wbGUsIHRvIGFsbG93IGNlcnRhaW4gY2xhc3NlcyBvbiBgc3BhbmBzIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nLFxuICogICB1c2UgYHNwYW46IFtbJ2NsYXNzTmFtZScsICdudW1iZXInLCAnb3BlcmF0b3InLCAndG9rZW4nXV1gLlxuICogICBUaGlzIHdpbGwgYWxsb3cgYCdudW1iZXInYCwgYCdvcGVyYXRvcidgLCBhbmQgYCd0b2tlbidgIGNsYXNzZXMsIGJ1dCBkcm9wXG4gKiAgIG90aGVycy5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPiB8IG51bGwgfCB1bmRlZmluZWR9IFtjbG9iYmVyXVxuICogICBMaXN0IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgY2xvYmJlciAoZGVmYXVsdDogYGRlZmF1bHRTY2hlbWEuY2xvYmJlcmApLlxuICpcbiAqICAgRm9yIGV4YW1wbGU6XG4gKlxuICogICBgYGBqc1xuICogICBjbG9iYmVyOiBbJ2FyaWFEZXNjcmliZWRCeScsICdhcmlhTGFiZWxsZWRCeScsICdpZCcsICduYW1lJ11cbiAqICAgYGBgXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtjbG9iYmVyUHJlZml4XVxuICogICBQcmVmaXggdG8gdXNlIGJlZm9yZSBjbG9iYmVyaW5nIHByb3BlcnRpZXMgKGRlZmF1bHQ6XG4gKiAgIGBkZWZhdWx0U2NoZW1hLmNsb2JiZXJQcmVmaXhgKS5cbiAqXG4gKiAgIEZvciBleGFtcGxlOlxuICpcbiAqICAgYGBganNcbiAqICAgY2xvYmJlclByZWZpeDogJ3VzZXItY29udGVudC0nXG4gKiAgIGBgYFxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBBcnJheTxzdHJpbmc+IHwgbnVsbCB8IHVuZGVmaW5lZD4gfCBudWxsIHwgdW5kZWZpbmVkfSBbcHJvdG9jb2xzXVxuICogICBNYXAgb2YgKnByb3BlcnR5IG5hbWVzKiB0byBhbGxvd2VkIHByb3RvY29scyAoZGVmYXVsdDpcbiAqICAgYGRlZmF1bHRTY2hlbWEucHJvdG9jb2xzYCkuXG4gKlxuICogICBUaGlzIGRlZmluZXMgVVJMcyB0aGF0IGFyZSBhbHdheXMgYWxsb3dlZCB0byBoYXZlIGxvY2FsIFVSTHMgKHJlbGF0aXZlIHRvXG4gKiAgIHRoZSBjdXJyZW50IHdlYnNpdGUsIHN1Y2ggYXMgYHRoaXNgLCBgI3RoaXNgLCBgL3RoaXNgLCBvciBgP3RoaXNgKSwgYW5kXG4gKiAgIG9ubHkgYWxsb3dlZCB0byBoYXZlIHJlbW90ZSBVUkxzIChzdWNoIGFzIGBodHRwczovL2V4YW1wbGUuY29tYCkgaWYgdGhleVxuICogICB1c2UgYSBrbm93biBwcm90b2NvbC5cbiAqXG4gKiAgIEZvciBleGFtcGxlOlxuICpcbiAqICAgYGBganNcbiAqICAgcHJvdG9jb2xzOiB7XG4gKiAgICAgY2l0ZTogWydodHRwJywgJ2h0dHBzJ10sXG4gKiAgICAgLy8gXHUyMDI2XG4gKiAgICAgc3JjOiBbJ2h0dHAnLCAnaHR0cHMnXVxuICogICB9XG4gKiAgIGBgYFxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0aWVzW2tleW9mIFByb3BlcnRpZXNdPj4gfCBudWxsIHwgdW5kZWZpbmVkfSBbcmVxdWlyZWRdXG4gKiAgIE1hcCBvZiB0YWcgbmFtZXMgdG8gcmVxdWlyZWQgcHJvcGVydHkgbmFtZXMgd2l0aCBhIGRlZmF1bHQgdmFsdWVcbiAqICAgKGRlZmF1bHQ6IGBkZWZhdWx0U2NoZW1hLnJlcXVpcmVkYCkuXG4gKlxuICogICBUaGlzIGRlZmluZXMgcHJvcGVydGllcyB0aGF0IG11c3QgYmUgc2V0LlxuICogICBJZiBhIGZpZWxkIGRvZXMgbm90IGV4aXN0IChhZnRlciB0aGUgZWxlbWVudCB3YXMgbWFkZSBzYWZlKSwgdGhlc2Ugd2lsbCBiZVxuICogICBhZGRlZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZS5cbiAqXG4gKiAgIEZvciBleGFtcGxlOlxuICpcbiAqICAgYGBganNcbiAqICAgcmVxdWlyZWQ6IHtcbiAqICAgICBpbnB1dDoge2Rpc2FibGVkOiB0cnVlLCB0eXBlOiAnY2hlY2tib3gnfVxuICogICB9XG4gKiAgIGBgYFxuICpcbiAqICAgPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHByb3BlcnRpZXMgYXJlIGZpcnN0IGNoZWNrZWQgYmFzZWQgb24gYHNjaGVtYS5hdHRyaWJ1dGVzYCxcbiAqICAgPiB0aGVuIG9uIGBzY2hlbWEucmVxdWlyZWRgLlxuICogICA+IFRoYXQgbWVhbnMgcHJvcGVydGllcyBjb3VsZCBiZSByZW1vdmVkIGJ5IGBhdHRyaWJ1dGVzYCBhbmQgdGhlbiBhZGRlZFxuICogICA+IGFnYWluIHdpdGggYHJlcXVpcmVkYC5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPiB8IG51bGwgfCB1bmRlZmluZWR9IFtzdHJpcF1cbiAqICAgTGlzdCBvZiB0YWcgbmFtZXMgdG8gc3RyaXAgZnJvbSB0aGUgdHJlZSAoZGVmYXVsdDogYGRlZmF1bHRTY2hlbWEuc3RyaXBgKS5cbiAqXG4gKiAgIEJ5IGRlZmF1bHQsIHVuc2FmZSBlbGVtZW50cyAodGhvc2Ugbm90IGluIGBzY2hlbWEudGFnTmFtZXNgKSBhcmUgcmVwbGFjZWRcbiAqICAgYnkgd2hhdCB0aGV5IGNvbnRhaW4uXG4gKiAgIFRoaXMgb3B0aW9uIGNhbiBkcm9wIHRoZWlyIGNvbnRlbnRzLlxuICpcbiAqICAgRm9yIGV4YW1wbGU6XG4gKlxuICogICBgYGBqc1xuICogICBzdHJpcDogWydzY3JpcHQnXVxuICogICBgYGBcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPiB8IG51bGwgfCB1bmRlZmluZWR9IFt0YWdOYW1lc11cbiAqICAgTGlzdCBvZiBhbGxvd2VkIHRhZyBuYW1lcyAoZGVmYXVsdDogYGRlZmF1bHRTY2hlbWEudGFnTmFtZXNgKS5cbiAqXG4gKiAgIEZvciBleGFtcGxlOlxuICpcbiAqICAgYGBganNcbiAqICAgdGFnTmFtZXM6IFtcbiAqICAgICAnYScsXG4gKiAgICAgJ2InLFxuICogICAgIC8vIFx1MjAyNlxuICogICAgICd1bCcsXG4gKiAgICAgJ3ZhcidcbiAqICAgXVxuICogICBgYGBcbiAqXG4gKiBAdHlwZWRlZiBTdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PFNjaGVtYT59IHNjaGVtYVxuICogICBTY2hlbWEuXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHN0YWNrXG4gKiAgIFRhZyBuYW1lcyBvZiBhbmNlc3RvcnMuXG4gKi9cblxuaW1wb3J0IHN0cnVjdHVyZWRDbG9uZSBmcm9tICdAdW5nYXAvc3RydWN0dXJlZC1jbG9uZSdcbmltcG9ydCB7cG9zaXRpb259IGZyb20gJ3VuaXN0LXV0aWwtcG9zaXRpb24nXG5pbXBvcnQge2RlZmF1bHRTY2hlbWF9IGZyb20gJy4vc2NoZW1hLmpzJ1xuXG5jb25zdCBvd24gPSB7fS5oYXNPd25Qcm9wZXJ0eVxuXG4vKipcbiAqIFNhbml0aXplIGEgdHJlZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWRvbmx5PE5vZGVzPn0gbm9kZVxuICogICBVbnNhZmUgdHJlZS5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8U2NoZW1hPiB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICogICBDb25maWd1cmF0aW9uIChkZWZhdWx0OiBgZGVmYXVsdFNjaGVtYWApLlxuICogQHJldHVybnMge05vZGVzfVxuICogICBOZXcsIHNhZmUgdHJlZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplKG5vZGUsIG9wdGlvbnMpIHtcbiAgLyoqIEB0eXBlIHtOb2Rlc30gKi9cbiAgbGV0IHJlc3VsdCA9IHt0eXBlOiAncm9vdCcsIGNoaWxkcmVuOiBbXX1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBzY2hlbWE6IG9wdGlvbnMgPyB7Li4uZGVmYXVsdFNjaGVtYSwgLi4ub3B0aW9uc30gOiBkZWZhdWx0U2NoZW1hLFxuICAgIHN0YWNrOiBbXVxuICB9XG4gIGNvbnN0IHJlcGxhY2UgPSB0cmFuc2Zvcm0oc3RhdGUsIG5vZGUpXG5cbiAgaWYgKHJlcGxhY2UpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlKSkge1xuICAgICAgaWYgKHJlcGxhY2UubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlcGxhY2VbMF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IHJlcGxhY2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gcmVwbGFjZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtSZWFkb25seTx1bmtub3duPn0gbm9kZVxuICogICBVbnNhZmUgbm9kZS5cbiAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Q29udGVudD4gfCBOb2RlcyB8IHVuZGVmaW5lZH1cbiAqICAgU2FmZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybShzdGF0ZSwgbm9kZSkge1xuICBpZiAobm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB1bnNhZmUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJlYWRvbmx5PHVua25vd24+Pn0gKi8gKG5vZGUpXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiB1bnNhZmUudHlwZSA9PT0gJ3N0cmluZycgPyB1bnNhZmUudHlwZSA6ICcnXG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvbW1lbnQnOiB7XG4gICAgICAgIHJldHVybiBjb21tZW50KHN0YXRlLCB1bnNhZmUpXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2RvY3R5cGUnOiB7XG4gICAgICAgIHJldHVybiBkb2N0eXBlKHN0YXRlLCB1bnNhZmUpXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2VsZW1lbnQnOiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50KHN0YXRlLCB1bnNhZmUpXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3Jvb3QnOiB7XG4gICAgICAgIHJldHVybiByb290KHN0YXRlLCB1bnNhZmUpXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICAgIHJldHVybiB0ZXh0KHN0YXRlLCB1bnNhZmUpXG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWFrZSBhIHNhZmUgY29tbWVudC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFJlYWRvbmx5PHVua25vd24+Pj59IHVuc2FmZVxuICogICBVbnNhZmUgY29tbWVudC1saWtlIHZhbHVlLlxuICogQHJldHVybnMge0NvbW1lbnQgfCB1bmRlZmluZWR9XG4gKiAgIFNhZmUgY29tbWVudCAoaWYgd2l0aCBgYWxsb3dDb21tZW50c2ApLlxuICovXG5mdW5jdGlvbiBjb21tZW50KHN0YXRlLCB1bnNhZmUpIHtcbiAgaWYgKHN0YXRlLnNjaGVtYS5hbGxvd0NvbW1lbnRzKSB7XG4gICAgLy8gU2VlIDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjc2VyaWFsaXNpbmctaHRtbC1mcmFnbWVudHM+XG4gICAgY29uc3QgcmVzdWx0ID0gdHlwZW9mIHVuc2FmZS52YWx1ZSA9PT0gJ3N0cmluZycgPyB1bnNhZmUudmFsdWUgOiAnJ1xuICAgIGNvbnN0IGluZGV4ID0gcmVzdWx0LmluZGV4T2YoJy0tPicpXG4gICAgY29uc3QgdmFsdWUgPSBpbmRleCA8IDAgPyByZXN1bHQgOiByZXN1bHQuc2xpY2UoMCwgaW5kZXgpXG5cbiAgICAvKiogQHR5cGUge0NvbW1lbnR9ICovXG4gICAgY29uc3Qgbm9kZSA9IHt0eXBlOiAnY29tbWVudCcsIHZhbHVlfVxuXG4gICAgcGF0Y2gobm9kZSwgdW5zYWZlKVxuXG4gICAgcmV0dXJuIG5vZGVcbiAgfVxufVxuXG4vKipcbiAqIE1ha2UgYSBzYWZlIGRvY3R5cGUuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBSZWFkb25seTx1bmtub3duPj4+fSB1bnNhZmVcbiAqICAgVW5zYWZlIGRvY3R5cGUtbGlrZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtEb2N0eXBlIHwgdW5kZWZpbmVkfVxuICogICBTYWZlIGRvY3R5cGUgKGlmIHdpdGggYGFsbG93RG9jdHlwZXNgKS5cbiAqL1xuZnVuY3Rpb24gZG9jdHlwZShzdGF0ZSwgdW5zYWZlKSB7XG4gIGlmIChzdGF0ZS5zY2hlbWEuYWxsb3dEb2N0eXBlcykge1xuICAgIC8qKiBAdHlwZSB7RG9jdHlwZX0gKi9cbiAgICBjb25zdCBub2RlID0ge3R5cGU6ICdkb2N0eXBlJ31cblxuICAgIHBhdGNoKG5vZGUsIHVuc2FmZSlcblxuICAgIHJldHVybiBub2RlXG4gIH1cbn1cblxuLyoqXG4gKiBNYWtlIGEgc2FmZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZC5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUmVhZG9ubHk8dW5rbm93bj4+Pn0gdW5zYWZlXG4gKiAgIFVuc2FmZSBlbGVtZW50LWxpa2UgdmFsdWUuXG4gKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudENvbnRlbnQ+IHwgRWxlbWVudCB8IHVuZGVmaW5lZH1cbiAqICAgU2FmZSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBlbGVtZW50KHN0YXRlLCB1bnNhZmUpIHtcbiAgY29uc3QgbmFtZSA9IHR5cGVvZiB1bnNhZmUudGFnTmFtZSA9PT0gJ3N0cmluZycgPyB1bnNhZmUudGFnTmFtZSA6ICcnXG5cbiAgc3RhdGUuc3RhY2sucHVzaChuYW1lKVxuXG4gIGNvbnN0IGNvbnRlbnQgPSAvKiogQHR5cGUge0FycmF5PEVsZW1lbnRDb250ZW50Pn0gKi8gKFxuICAgIGNoaWxkcmVuKHN0YXRlLCB1bnNhZmUuY2hpbGRyZW4pXG4gIClcbiAgY29uc3QgcHJvcGVydGllc18gPSBwcm9wZXJ0aWVzKHN0YXRlLCB1bnNhZmUucHJvcGVydGllcylcblxuICBzdGF0ZS5zdGFjay5wb3AoKVxuXG4gIGxldCBzYWZlRWxlbWVudCA9IGZhbHNlXG5cbiAgaWYgKFxuICAgIG5hbWUgJiZcbiAgICBuYW1lICE9PSAnKicgJiZcbiAgICAoIXN0YXRlLnNjaGVtYS50YWdOYW1lcyB8fCBzdGF0ZS5zY2hlbWEudGFnTmFtZXMuaW5jbHVkZXMobmFtZSkpXG4gICkge1xuICAgIHNhZmVFbGVtZW50ID0gdHJ1ZVxuXG4gICAgLy8gU29tZSBub2RlcyBjYW4gYnJlYWsgb3V0IG9mIHRoZWlyIGNvbnRleHQgaWYgdGhleSBkb25cdTIwMTl0IGhhdmUgYSBjZXJ0YWluXG4gICAgLy8gYW5jZXN0b3IuXG4gICAgaWYgKHN0YXRlLnNjaGVtYS5hbmNlc3RvcnMgJiYgb3duLmNhbGwoc3RhdGUuc2NoZW1hLmFuY2VzdG9ycywgbmFtZSkpIHtcbiAgICAgIGNvbnN0IGFuY2VzdG9ycyA9IHN0YXRlLnNjaGVtYS5hbmNlc3RvcnNbbmFtZV1cbiAgICAgIGxldCBpbmRleCA9IC0xXG5cbiAgICAgIHNhZmVFbGVtZW50ID0gZmFsc2VcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBhbmNlc3RvcnMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChzdGF0ZS5zdGFjay5pbmNsdWRlcyhhbmNlc3RvcnNbaW5kZXhdKSkge1xuICAgICAgICAgIHNhZmVFbGVtZW50ID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFzYWZlRWxlbWVudCkge1xuICAgIHJldHVybiBzdGF0ZS5zY2hlbWEuc3RyaXAgJiYgIXN0YXRlLnNjaGVtYS5zdHJpcC5pbmNsdWRlcyhuYW1lKVxuICAgICAgPyBjb250ZW50XG4gICAgICA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqIEB0eXBlIHtFbGVtZW50fSAqL1xuICBjb25zdCBub2RlID0ge1xuICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICB0YWdOYW1lOiBuYW1lLFxuICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXNfLFxuICAgIGNoaWxkcmVuOiBjb250ZW50XG4gIH1cblxuICBwYXRjaChub2RlLCB1bnNhZmUpXG5cbiAgcmV0dXJuIG5vZGVcbn1cblxuLyoqXG4gKiBNYWtlIGEgc2FmZSByb290LlxuICpcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZC5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUmVhZG9ubHk8dW5rbm93bj4+Pn0gdW5zYWZlXG4gKiAgIFVuc2FmZSByb290LWxpa2UgdmFsdWUuXG4gKiBAcmV0dXJucyB7Um9vdH1cbiAqICAgU2FmZSByb290LlxuICovXG5mdW5jdGlvbiByb290KHN0YXRlLCB1bnNhZmUpIHtcbiAgY29uc3QgY29udGVudCA9IC8qKiBAdHlwZSB7QXJyYXk8Um9vdENvbnRlbnQ+fSAqLyAoXG4gICAgY2hpbGRyZW4oc3RhdGUsIHVuc2FmZS5jaGlsZHJlbilcbiAgKVxuXG4gIC8qKiBAdHlwZSB7Um9vdH0gKi9cbiAgY29uc3Qgbm9kZSA9IHt0eXBlOiAncm9vdCcsIGNoaWxkcmVuOiBjb250ZW50fVxuXG4gIHBhdGNoKG5vZGUsIHVuc2FmZSlcblxuICByZXR1cm4gbm9kZVxufVxuXG4vKipcbiAqIE1ha2UgYSBzYWZlIHRleHQuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gX1xuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFJlYWRvbmx5PHVua25vd24+Pj59IHVuc2FmZVxuICogICBVbnNhZmUgdGV4dC1saWtlIHZhbHVlLlxuICogQHJldHVybnMge1RleHR9XG4gKiAgIFNhZmUgdGV4dC5cbiAqL1xuZnVuY3Rpb24gdGV4dChfLCB1bnNhZmUpIHtcbiAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdW5zYWZlLnZhbHVlID09PSAnc3RyaW5nJyA/IHVuc2FmZS52YWx1ZSA6ICcnXG4gIC8qKiBAdHlwZSB7VGV4dH0gKi9cbiAgY29uc3Qgbm9kZSA9IHt0eXBlOiAndGV4dCcsIHZhbHVlfVxuXG4gIHBhdGNoKG5vZGUsIHVuc2FmZSlcblxuICByZXR1cm4gbm9kZVxufVxuXG4vKipcbiAqIE1ha2UgY2hpbGRyZW4gc2FmZS5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PHVua25vd24+fSBjaGlsZHJlblxuICogICBVbnNhZmUgdmFsdWUuXG4gKiBAcmV0dXJucyB7QXJyYXk8Tm9kZXM+fVxuICogICBTYWZlIGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBjaGlsZHJlbihzdGF0ZSwgY2hpbGRyZW4pIHtcbiAgLyoqIEB0eXBlIHtBcnJheTxOb2Rlcz59ICovXG4gIGNvbnN0IHJlc3VsdHMgPSBbXVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGNvbnN0IGNoaWxkcmVuVW5rbm93biA9IC8qKiBAdHlwZSB7QXJyYXk8UmVhZG9ubHk8dW5rbm93bj4+fSAqLyAoY2hpbGRyZW4pXG4gICAgbGV0IGluZGV4ID0gLTFcblxuICAgIHdoaWxlICgrK2luZGV4IDwgY2hpbGRyZW5Vbmtub3duLmxlbmd0aCkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0cmFuc2Zvcm0oc3RhdGUsIGNoaWxkcmVuVW5rbm93bltpbmRleF0pXG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2goLi4udmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHNcbn1cblxuLyoqXG4gKiBNYWtlIGVsZW1lbnQgcHJvcGVydGllcyBzYWZlLlxuICpcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZC5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8dW5rbm93bj59IHByb3BlcnRpZXNcbiAqICAgVW5zYWZlIHZhbHVlLlxuICogQHJldHVybnMge1Byb3BlcnRpZXN9XG4gKiAgIFNhZmUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHByb3BlcnRpZXMoc3RhdGUsIHByb3BlcnRpZXMpIHtcbiAgY29uc3QgdGFnTmFtZSA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aCAtIDFdXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSBzdGF0ZS5zY2hlbWEuYXR0cmlidXRlc1xuICBjb25zdCByZXF1aXJlZCA9IHN0YXRlLnNjaGVtYS5yZXF1aXJlZFxuICBjb25zdCBzcGVjaWZpYyA9XG4gICAgYXR0cmlidXRlcyAmJiBvd24uY2FsbChhdHRyaWJ1dGVzLCB0YWdOYW1lKVxuICAgICAgPyBhdHRyaWJ1dGVzW3RhZ05hbWVdXG4gICAgICA6IHVuZGVmaW5lZFxuICBjb25zdCBkZWZhdWx0cyA9XG4gICAgYXR0cmlidXRlcyAmJiBvd24uY2FsbChhdHRyaWJ1dGVzLCAnKicpID8gYXR0cmlidXRlc1snKiddIDogdW5kZWZpbmVkXG4gIGNvbnN0IHByb3BlcnRpZXNfID1cbiAgICAvKiogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFJlYWRvbmx5PHVua25vd24+Pj59ICovIChcbiAgICAgIHByb3BlcnRpZXMgJiYgdHlwZW9mIHByb3BlcnRpZXMgPT09ICdvYmplY3QnID8gcHJvcGVydGllcyA6IHt9XG4gICAgKVxuICAvKiogQHR5cGUge1Byb3BlcnRpZXN9ICovXG4gIGNvbnN0IHJlc3VsdCA9IHt9XG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICBsZXQga2V5XG5cbiAgZm9yIChrZXkgaW4gcHJvcGVydGllc18pIHtcbiAgICBpZiAob3duLmNhbGwocHJvcGVydGllc18sIGtleSkpIHtcbiAgICAgIGNvbnN0IHVuc2FmZSA9IHByb3BlcnRpZXNfW2tleV1cbiAgICAgIGxldCBzYWZlID0gcHJvcGVydHlWYWx1ZShcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGZpbmREZWZpbml0aW9uKHNwZWNpZmljLCBrZXkpLFxuICAgICAgICBrZXksXG4gICAgICAgIHVuc2FmZVxuICAgICAgKVxuXG4gICAgICBpZiAoc2FmZSA9PT0gbnVsbCB8fCBzYWZlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2FmZSA9IHByb3BlcnR5VmFsdWUoc3RhdGUsIGZpbmREZWZpbml0aW9uKGRlZmF1bHRzLCBrZXkpLCBrZXksIHVuc2FmZSlcbiAgICAgIH1cblxuICAgICAgaWYgKHNhZmUgIT09IG51bGwgJiYgc2FmZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gc2FmZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChyZXF1aXJlZCAmJiBvd24uY2FsbChyZXF1aXJlZCwgdGFnTmFtZSkpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gcmVxdWlyZWRbdGFnTmFtZV1cblxuICAgIGZvciAoa2V5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgIGlmIChvd24uY2FsbChwcm9wZXJ0aWVzLCBrZXkpICYmICFvd24uY2FsbChyZXN1bHQsIGtleSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBwcm9wZXJ0aWVzW2tleV1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBwcm9wZXJ0eSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFByb3BlcnR5RGVmaW5pdGlvbj4gfCB1bmRlZmluZWR9IGRlZmluaXRpb25cbiAqICAgRGVmaW5pdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqICAgRmllbGQgbmFtZS5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8dW5rbm93bj59IHZhbHVlXG4gKiAgIFVuc2FmZSB2YWx1ZSAoYnV0IGFuIGFycmF5KS5cbiAqIEByZXR1cm5zIHtBcnJheTxudW1iZXIgfCBzdHJpbmc+IHwgYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZH1cbiAqICAgU2FmZSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHlWYWx1ZShzdGF0ZSwgZGVmaW5pdGlvbiwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5pdGlvblxuICAgID8gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gcHJvcGVydHlWYWx1ZU1hbnkoc3RhdGUsIGRlZmluaXRpb24sIGtleSwgdmFsdWUpXG4gICAgICA6IHByb3BlcnR5VmFsdWVQcmltaXRpdmUoc3RhdGUsIGRlZmluaXRpb24sIGtleSwgdmFsdWUpXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIHByb3BlcnR5IHZhbHVlIHdoaWNoIGlzIGEgbGlzdC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFByb3BlcnR5RGVmaW5pdGlvbj59IGRlZmluaXRpb25cbiAqICAgRGVmaW5pdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqICAgRmllbGQgbmFtZS5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8QXJyYXk8UmVhZG9ubHk8dW5rbm93bj4+Pn0gdmFsdWVzXG4gKiAgIFVuc2FmZSB2YWx1ZSAoYnV0IGFuIGFycmF5KS5cbiAqIEByZXR1cm5zIHtBcnJheTxudW1iZXIgfCBzdHJpbmc+fVxuICogICBTYWZlIHZhbHVlLlxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eVZhbHVlTWFueShzdGF0ZSwgZGVmaW5pdGlvbiwga2V5LCB2YWx1ZXMpIHtcbiAgbGV0IGluZGV4ID0gLTFcbiAgLyoqIEB0eXBlIHtBcnJheTxudW1iZXIgfCBzdHJpbmc+fSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIHdoaWxlICgrK2luZGV4IDwgdmFsdWVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvcGVydHlWYWx1ZVByaW1pdGl2ZShzdGF0ZSwgZGVmaW5pdGlvbiwga2V5LCB2YWx1ZXNbaW5kZXhdKVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIFNhbml0aXplIGEgcHJvcGVydHkgdmFsdWUgd2hpY2ggaXMgYSBwcmltaXRpdmUuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtSZWFkb25seTxQcm9wZXJ0eURlZmluaXRpb24+fSBkZWZpbml0aW9uXG4gKiAgIERlZmluaXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiAgIEZpZWxkIG5hbWUuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PHVua25vd24+fSB2YWx1ZVxuICogICBVbnNhZmUgdmFsdWUgKGJ1dCBub3QgYW4gYXJyYXkpLlxuICogQHJldHVybnMge2Jvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWR9XG4gKiAgIFNhZmUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHByb3BlcnR5VmFsdWVQcmltaXRpdmUoc3RhdGUsIGRlZmluaXRpb24sIGtleSwgdmFsdWUpIHtcbiAgaWYgKFxuICAgIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nICYmXG4gICAgdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyAmJlxuICAgIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoIXNhZmVQcm90b2NvbChzdGF0ZSwga2V5LCB2YWx1ZSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIEp1c3QgYSBzdHJpbmcsIG9yIG9ubHkgb25lIGl0ZW0gaW4gYW4gYXJyYXksIG1lYW5zIGFsbCB2YWx1ZXMgYXJlIE9LLlxuICAvLyBNb3JlIHRoYW4gb25lIGl0ZW0gbWVhbnMgYW4gYWxsb3cgbGlzdC5cbiAgaWYgKHR5cGVvZiBkZWZpbml0aW9uID09PSAnb2JqZWN0JyAmJiBkZWZpbml0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICBsZXQgb2sgPSBmYWxzZVxuICAgIGxldCBpbmRleCA9IDAgLy8gSWdub3JlIGBrZXlgLCB3aGljaCBpcyB0aGUgZmlyc3QgaXRlbS5cblxuICAgIHdoaWxlICgrK2luZGV4IDwgZGVmaW5pdGlvbi5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWQgPSBkZWZpbml0aW9uW2luZGV4XVxuXG4gICAgICAvLyBFeHByZXNzaW9uLlxuICAgICAgaWYgKGFsbG93ZWQgJiYgdHlwZW9mIGFsbG93ZWQgPT09ICdvYmplY3QnICYmICdmbGFncycgaW4gYWxsb3dlZCkge1xuICAgICAgICBpZiAoYWxsb3dlZC50ZXN0KFN0cmluZyh2YWx1ZSkpKSB7XG4gICAgICAgICAgb2sgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gUHJpbWl0aXZlLlxuICAgICAgZWxzZSBpZiAoYWxsb3dlZCA9PT0gdmFsdWUpIHtcbiAgICAgICAgb2sgPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFvaykgcmV0dXJuXG4gIH1cblxuICByZXR1cm4gc3RhdGUuc2NoZW1hLmNsb2JiZXIgJiZcbiAgICBzdGF0ZS5zY2hlbWEuY2xvYmJlclByZWZpeCAmJlxuICAgIHN0YXRlLnNjaGVtYS5jbG9iYmVyLmluY2x1ZGVzKGtleSlcbiAgICA/IHN0YXRlLnNjaGVtYS5jbG9iYmVyUHJlZml4ICsgdmFsdWVcbiAgICA6IHZhbHVlXG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBgdmFsdWVgIGlzIGEgc2FmZSBVUkwuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogICBGaWVsZCBuYW1lLlxuICogQHBhcmFtIHtSZWFkb25seTx1bmtub3duPn0gdmFsdWVcbiAqICAgVW5zYWZlIHZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgaXRcdTIwMTlzIGEgc2FmZSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2FmZVByb3RvY29sKHN0YXRlLCBrZXksIHZhbHVlKSB7XG4gIGNvbnN0IHByb3RvY29scyA9XG4gICAgc3RhdGUuc2NoZW1hLnByb3RvY29scyAmJiBvd24uY2FsbChzdGF0ZS5zY2hlbWEucHJvdG9jb2xzLCBrZXkpXG4gICAgICA/IHN0YXRlLnNjaGVtYS5wcm90b2NvbHNba2V5XVxuICAgICAgOiB1bmRlZmluZWRcblxuICAvLyBObyBwcm90b2NvbHMgZGVmaW5lZD8gVGhlbiBldmVyeXRoaW5nIGlzIGZpbmUuXG4gIGlmICghcHJvdG9jb2xzIHx8IHByb3RvY29scy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgY29uc3QgdXJsID0gU3RyaW5nKHZhbHVlKVxuICBjb25zdCBjb2xvbiA9IHVybC5pbmRleE9mKCc6JylcbiAgY29uc3QgcXVlc3Rpb25NYXJrID0gdXJsLmluZGV4T2YoJz8nKVxuICBjb25zdCBudW1iZXJTaWduID0gdXJsLmluZGV4T2YoJyMnKVxuICBjb25zdCBzbGFzaCA9IHVybC5pbmRleE9mKCcvJylcblxuICBpZiAoXG4gICAgY29sb24gPCAwIHx8XG4gICAgLy8gSWYgdGhlIGZpcnN0IGNvbG9uIGlzIGFmdGVyIGEgYD9gLCBgI2AsIG9yIGAvYCwgaXRcdTIwMTlzIG5vdCBhIHByb3RvY29sLlxuICAgIChzbGFzaCA+IC0xICYmIGNvbG9uID4gc2xhc2gpIHx8XG4gICAgKHF1ZXN0aW9uTWFyayA+IC0xICYmIGNvbG9uID4gcXVlc3Rpb25NYXJrKSB8fFxuICAgIChudW1iZXJTaWduID4gLTEgJiYgY29sb24gPiBudW1iZXJTaWduKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgbGV0IGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IHByb3RvY29scy5sZW5ndGgpIHtcbiAgICBjb25zdCBwcm90b2NvbCA9IHByb3RvY29sc1tpbmRleF1cblxuICAgIGlmIChcbiAgICAgIGNvbG9uID09PSBwcm90b2NvbC5sZW5ndGggJiZcbiAgICAgIHVybC5zbGljZSgwLCBwcm90b2NvbC5sZW5ndGgpID09PSBwcm90b2NvbFxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBBZGQgZGF0YSBhbmQgcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIHtOb2Rlc30gbm9kZVxuICogICBOb2RlIHRvIHBhdGNoIHNhZmUgZGF0YSBhbmQgcG9zaXRpb24gb24uXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFJlYWRvbmx5PHVua25vd24+Pj59IHVuc2FmZVxuICogICBVbnNhZmUgbm9kZS1saWtlIHZhbHVlLlxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqICAgTm90aGluZy5cbiAqL1xuZnVuY3Rpb24gcGF0Y2gobm9kZSwgdW5zYWZlKSB7XG4gIGNvbnN0IGNsZWFuUG9zaXRpb24gPSBwb3NpdGlvbihcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBsb29rcyBsaWtlIGEgbm9kZS5cbiAgICB1bnNhZmVcbiAgKVxuXG4gIGlmICh1bnNhZmUuZGF0YSkge1xuICAgIG5vZGUuZGF0YSA9IHN0cnVjdHVyZWRDbG9uZSh1bnNhZmUuZGF0YSlcbiAgfVxuXG4gIGlmIChjbGVhblBvc2l0aW9uKSBub2RlLnBvc2l0aW9uID0gY2xlYW5Qb3NpdGlvblxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge1JlYWRvbmx5PEFycmF5PFByb3BlcnR5RGVmaW5pdGlvbj4+IHwgdW5kZWZpbmVkfSBkZWZpbml0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHJldHVybnMge1JlYWRvbmx5PFByb3BlcnR5RGVmaW5pdGlvbj4gfCB1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGZpbmREZWZpbml0aW9uKGRlZmluaXRpb25zLCBrZXkpIHtcbiAgLyoqIEB0eXBlIHtQcm9wZXJ0eURlZmluaXRpb24gfCB1bmRlZmluZWR9ICovXG4gIGxldCBkYXRhRGVmYXVsdFxuICBsZXQgaW5kZXggPSAtMVxuXG4gIGlmIChkZWZpbml0aW9ucykge1xuICAgIHdoaWxlICgrK2luZGV4IDwgZGVmaW5pdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGRlZmluaXRpb25zW2luZGV4XVxuICAgICAgY29uc3QgbmFtZSA9IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA6IGVudHJ5WzBdXG5cbiAgICAgIGlmIChuYW1lID09PSBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGVudHJ5XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSAnZGF0YSonKSBkYXRhRGVmYXVsdCA9IGVudHJ5XG4gICAgfVxuICB9XG5cbiAgaWYgKGtleS5sZW5ndGggPiA0ICYmIGtleS5zbGljZSgwLCA0KS50b0xvd2VyQ2FzZSgpID09PSAnZGF0YScpIHtcbiAgICByZXR1cm4gZGF0YURlZmF1bHRcbiAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5TY2hlbWF9IFNjaGVtYVxuICovXG5cbmV4cG9ydCB7c2FuaXRpemV9IGZyb20gJy4vbGliL2luZGV4LmpzJ1xuZXhwb3J0IHtkZWZhdWx0U2NoZW1hfSBmcm9tICcuL2xpYi9zY2hlbWEuanMnXG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50fSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7QmxvY2txdW90ZX0gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vc3RhdGUuanMnXG4gKi9cblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGBibG9ja3F1b3RlYCBub2RlIGludG8gaGFzdC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge0Jsb2NrcXVvdGV9IG5vZGVcbiAqICAgbWRhc3Qgbm9kZS5cbiAqIEByZXR1cm5zIHtFbGVtZW50fVxuICogICBoYXN0IG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBibG9ja3F1b3RlKHN0YXRlLCBub2RlKSB7XG4gIC8qKiBAdHlwZSB7RWxlbWVudH0gKi9cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICB0YWdOYW1lOiAnYmxvY2txdW90ZScsXG4gICAgcHJvcGVydGllczoge30sXG4gICAgY2hpbGRyZW46IHN0YXRlLndyYXAoc3RhdGUuYWxsKG5vZGUpLCB0cnVlKVxuICB9XG4gIHN0YXRlLnBhdGNoKG5vZGUsIHJlc3VsdClcbiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlLCByZXN1bHQpXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50LCBUZXh0fSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7QnJlYWt9IGZyb20gJ21kYXN0J1xuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJy4uL3N0YXRlLmpzJ1xuICovXG5cbi8qKlxuICogVHVybiBhbiBtZGFzdCBgYnJlYWtgIG5vZGUgaW50byBoYXN0LlxuICpcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZC5cbiAqIEBwYXJhbSB7QnJlYWt9IG5vZGVcbiAqICAgbWRhc3Qgbm9kZS5cbiAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50IHwgVGV4dD59XG4gKiAgIGhhc3QgZWxlbWVudCBjb250ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFyZEJyZWFrKHN0YXRlLCBub2RlKSB7XG4gIC8qKiBAdHlwZSB7RWxlbWVudH0gKi9cbiAgY29uc3QgcmVzdWx0ID0ge3R5cGU6ICdlbGVtZW50JywgdGFnTmFtZTogJ2JyJywgcHJvcGVydGllczoge30sIGNoaWxkcmVuOiBbXX1cbiAgc3RhdGUucGF0Y2gobm9kZSwgcmVzdWx0KVxuICByZXR1cm4gW3N0YXRlLmFwcGx5RGF0YShub2RlLCByZXN1bHQpLCB7dHlwZTogJ3RleHQnLCB2YWx1ZTogJ1xcbid9XVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7RWxlbWVudCwgUHJvcGVydGllc30gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge0NvZGV9IGZyb20gJ21kYXN0J1xuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJy4uL3N0YXRlLmpzJ1xuICovXG5cbi8qKlxuICogVHVybiBhbiBtZGFzdCBgY29kZWAgbm9kZSBpbnRvIGhhc3QuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtDb2RlfSBub2RlXG4gKiAgIG1kYXN0IG5vZGUuXG4gKiBAcmV0dXJucyB7RWxlbWVudH1cbiAqICAgaGFzdCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29kZShzdGF0ZSwgbm9kZSkge1xuICBjb25zdCB2YWx1ZSA9IG5vZGUudmFsdWUgPyBub2RlLnZhbHVlICsgJ1xcbicgOiAnJ1xuICAvKiogQHR5cGUge1Byb3BlcnRpZXN9ICovXG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7fVxuICAvLyBTb21lb25lIGNhbiB3cml0ZSBganMmI3gyMDtweXRob24mI3g5O3J1YnlgLlxuICBjb25zdCBsYW5ndWFnZSA9IG5vZGUubGFuZyA/IG5vZGUubGFuZy5zcGxpdCgvXFxzKy8pIDogW11cblxuICAvLyBHSC9DTSBzdGlsbCBkcm9wIHRoZSBub24tZmlyc3QgbGFuZ3VhZ2VzLlxuICBpZiAobGFuZ3VhZ2UubGVuZ3RoID4gMCkge1xuICAgIHByb3BlcnRpZXMuY2xhc3NOYW1lID0gWydsYW5ndWFnZS0nICsgbGFuZ3VhZ2VbMF1dXG4gIH1cblxuICAvLyBDcmVhdGUgYDxjb2RlPmAuXG4gIC8qKiBAdHlwZSB7RWxlbWVudH0gKi9cbiAgbGV0IHJlc3VsdCA9IHtcbiAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgdGFnTmFtZTogJ2NvZGUnLFxuICAgIHByb3BlcnRpZXMsXG4gICAgY2hpbGRyZW46IFt7dHlwZTogJ3RleHQnLCB2YWx1ZX1dXG4gIH1cblxuICBpZiAobm9kZS5tZXRhKSB7XG4gICAgcmVzdWx0LmRhdGEgPSB7bWV0YTogbm9kZS5tZXRhfVxuICB9XG5cbiAgc3RhdGUucGF0Y2gobm9kZSwgcmVzdWx0KVxuICByZXN1bHQgPSBzdGF0ZS5hcHBseURhdGEobm9kZSwgcmVzdWx0KVxuXG4gIC8vIENyZWF0ZSBgPHByZT5gLlxuICByZXN1bHQgPSB7dHlwZTogJ2VsZW1lbnQnLCB0YWdOYW1lOiAncHJlJywgcHJvcGVydGllczoge30sIGNoaWxkcmVuOiBbcmVzdWx0XX1cbiAgc3RhdGUucGF0Y2gobm9kZSwgcmVzdWx0KVxuICByZXR1cm4gcmVzdWx0XG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50fSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7RGVsZXRlfSBmcm9tICdtZGFzdCdcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICcuLi9zdGF0ZS5qcydcbiAqL1xuXG4vKipcbiAqIFR1cm4gYW4gbWRhc3QgYGRlbGV0ZWAgbm9kZSBpbnRvIGhhc3QuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtEZWxldGV9IG5vZGVcbiAqICAgbWRhc3Qgbm9kZS5cbiAqIEByZXR1cm5zIHtFbGVtZW50fVxuICogICBoYXN0IG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpa2V0aHJvdWdoKHN0YXRlLCBub2RlKSB7XG4gIC8qKiBAdHlwZSB7RWxlbWVudH0gKi9cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICB0YWdOYW1lOiAnZGVsJyxcbiAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICBjaGlsZHJlbjogc3RhdGUuYWxsKG5vZGUpXG4gIH1cbiAgc3RhdGUucGF0Y2gobm9kZSwgcmVzdWx0KVxuICByZXR1cm4gc3RhdGUuYXBwbHlEYXRhKG5vZGUsIHJlc3VsdClcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0VsZW1lbnR9IGZyb20gJ2hhc3QnXG4gKiBAaW1wb3J0IHtFbXBoYXNpc30gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vc3RhdGUuanMnXG4gKi9cblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGBlbXBoYXNpc2Agbm9kZSBpbnRvIGhhc3QuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtFbXBoYXNpc30gbm9kZVxuICogICBtZGFzdCBub2RlLlxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKiAgIGhhc3Qgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtcGhhc2lzKHN0YXRlLCBub2RlKSB7XG4gIC8qKiBAdHlwZSB7RWxlbWVudH0gKi9cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICB0YWdOYW1lOiAnZW0nLFxuICAgIHByb3BlcnRpZXM6IHt9LFxuICAgIGNoaWxkcmVuOiBzdGF0ZS5hbGwobm9kZSlcbiAgfVxuICBzdGF0ZS5wYXRjaChub2RlLCByZXN1bHQpXG4gIHJldHVybiBzdGF0ZS5hcHBseURhdGEobm9kZSwgcmVzdWx0KVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7RWxlbWVudH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge0Zvb3Rub3RlUmVmZXJlbmNlfSBmcm9tICdtZGFzdCdcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICcuLi9zdGF0ZS5qcydcbiAqL1xuXG5pbXBvcnQge25vcm1hbGl6ZVVyaX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpJ1xuXG4vKipcbiAqIFR1cm4gYW4gbWRhc3QgYGZvb3Rub3RlUmVmZXJlbmNlYCBub2RlIGludG8gaGFzdC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge0Zvb3Rub3RlUmVmZXJlbmNlfSBub2RlXG4gKiAgIG1kYXN0IG5vZGUuXG4gKiBAcmV0dXJucyB7RWxlbWVudH1cbiAqICAgaGFzdCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9vdG5vdGVSZWZlcmVuY2Uoc3RhdGUsIG5vZGUpIHtcbiAgY29uc3QgY2xvYmJlclByZWZpeCA9XG4gICAgdHlwZW9mIHN0YXRlLm9wdGlvbnMuY2xvYmJlclByZWZpeCA9PT0gJ3N0cmluZydcbiAgICAgID8gc3RhdGUub3B0aW9ucy5jbG9iYmVyUHJlZml4XG4gICAgICA6ICd1c2VyLWNvbnRlbnQtJ1xuICBjb25zdCBpZCA9IFN0cmluZyhub2RlLmlkZW50aWZpZXIpLnRvVXBwZXJDYXNlKClcbiAgY29uc3Qgc2FmZUlkID0gbm9ybWFsaXplVXJpKGlkLnRvTG93ZXJDYXNlKCkpXG4gIGNvbnN0IGluZGV4ID0gc3RhdGUuZm9vdG5vdGVPcmRlci5pbmRleE9mKGlkKVxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IGNvdW50ZXJcblxuICBsZXQgcmV1c2VDb3VudGVyID0gc3RhdGUuZm9vdG5vdGVDb3VudHMuZ2V0KGlkKVxuXG4gIGlmIChyZXVzZUNvdW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldXNlQ291bnRlciA9IDBcbiAgICBzdGF0ZS5mb290bm90ZU9yZGVyLnB1c2goaWQpXG4gICAgY291bnRlciA9IHN0YXRlLmZvb3Rub3RlT3JkZXIubGVuZ3RoXG4gIH0gZWxzZSB7XG4gICAgY291bnRlciA9IGluZGV4ICsgMVxuICB9XG5cbiAgcmV1c2VDb3VudGVyICs9IDFcbiAgc3RhdGUuZm9vdG5vdGVDb3VudHMuc2V0KGlkLCByZXVzZUNvdW50ZXIpXG5cbiAgLyoqIEB0eXBlIHtFbGVtZW50fSAqL1xuICBjb25zdCBsaW5rID0ge1xuICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICB0YWdOYW1lOiAnYScsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgaHJlZjogJyMnICsgY2xvYmJlclByZWZpeCArICdmbi0nICsgc2FmZUlkLFxuICAgICAgaWQ6XG4gICAgICAgIGNsb2JiZXJQcmVmaXggK1xuICAgICAgICAnZm5yZWYtJyArXG4gICAgICAgIHNhZmVJZCArXG4gICAgICAgIChyZXVzZUNvdW50ZXIgPiAxID8gJy0nICsgcmV1c2VDb3VudGVyIDogJycpLFxuICAgICAgZGF0YUZvb3Rub3RlUmVmOiB0cnVlLFxuICAgICAgYXJpYURlc2NyaWJlZEJ5OiBbJ2Zvb3Rub3RlLWxhYmVsJ11cbiAgICB9LFxuICAgIGNoaWxkcmVuOiBbe3R5cGU6ICd0ZXh0JywgdmFsdWU6IFN0cmluZyhjb3VudGVyKX1dXG4gIH1cbiAgc3RhdGUucGF0Y2gobm9kZSwgbGluaylcblxuICAvKiogQHR5cGUge0VsZW1lbnR9ICovXG4gIGNvbnN0IHN1cCA9IHtcbiAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgdGFnTmFtZTogJ3N1cCcsXG4gICAgcHJvcGVydGllczoge30sXG4gICAgY2hpbGRyZW46IFtsaW5rXVxuICB9XG4gIHN0YXRlLnBhdGNoKG5vZGUsIHN1cClcbiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlLCBzdXApXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50fSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7SGVhZGluZ30gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vc3RhdGUuanMnXG4gKi9cblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGBoZWFkaW5nYCBub2RlIGludG8gaGFzdC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge0hlYWRpbmd9IG5vZGVcbiAqICAgbWRhc3Qgbm9kZS5cbiAqIEByZXR1cm5zIHtFbGVtZW50fVxuICogICBoYXN0IG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZWFkaW5nKHN0YXRlLCBub2RlKSB7XG4gIC8qKiBAdHlwZSB7RWxlbWVudH0gKi9cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICB0YWdOYW1lOiAnaCcgKyBub2RlLmRlcHRoLFxuICAgIHByb3BlcnRpZXM6IHt9LFxuICAgIGNoaWxkcmVuOiBzdGF0ZS5hbGwobm9kZSlcbiAgfVxuICBzdGF0ZS5wYXRjaChub2RlLCByZXN1bHQpXG4gIHJldHVybiBzdGF0ZS5hcHBseURhdGEobm9kZSwgcmVzdWx0KVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7RWxlbWVudH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge0h0bWx9IGZyb20gJ21kYXN0J1xuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJy4uL3N0YXRlLmpzJ1xuICogQGltcG9ydCB7UmF3fSBmcm9tICcuLi8uLi9pbmRleC5qcydcbiAqL1xuXG4vKipcbiAqIFR1cm4gYW4gbWRhc3QgYGh0bWxgIG5vZGUgaW50byBoYXN0IChgcmF3YCBub2RlIGluIGRhbmdlcm91cyBtb2RlLCBvdGhlcndpc2VcbiAqIG5vdGhpbmcpLlxuICpcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZC5cbiAqIEBwYXJhbSB7SHRtbH0gbm9kZVxuICogICBtZGFzdCBub2RlLlxuICogQHJldHVybnMge0VsZW1lbnQgfCBSYXcgfCB1bmRlZmluZWR9XG4gKiAgIGhhc3Qgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0bWwoc3RhdGUsIG5vZGUpIHtcbiAgaWYgKHN0YXRlLm9wdGlvbnMuYWxsb3dEYW5nZXJvdXNIdG1sKSB7XG4gICAgLyoqIEB0eXBlIHtSYXd9ICovXG4gICAgY29uc3QgcmVzdWx0ID0ge3R5cGU6ICdyYXcnLCB2YWx1ZTogbm9kZS52YWx1ZX1cbiAgICBzdGF0ZS5wYXRjaChub2RlLCByZXN1bHQpXG4gICAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlLCByZXN1bHQpXG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50Q29udGVudH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1JlZmVyZW5jZSwgTm9kZXN9IGZyb20gJ21kYXN0J1xuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJy4vc3RhdGUuanMnXG4gKi9cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGNvbnRlbnQgb2YgYSByZWZlcmVuY2Ugd2l0aG91dCBkZWZpbml0aW9uIGFzIHBsYWluIHRleHQuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtFeHRyYWN0PE5vZGVzLCBSZWZlcmVuY2U+fSBub2RlXG4gKiAgIFJlZmVyZW5jZSBub2RlIChpbWFnZSwgbGluaykuXG4gKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudENvbnRlbnQ+fVxuICogICBoYXN0IGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnQoc3RhdGUsIG5vZGUpIHtcbiAgY29uc3Qgc3VidHlwZSA9IG5vZGUucmVmZXJlbmNlVHlwZVxuICBsZXQgc3VmZml4ID0gJ10nXG5cbiAgaWYgKHN1YnR5cGUgPT09ICdjb2xsYXBzZWQnKSB7XG4gICAgc3VmZml4ICs9ICdbXSdcbiAgfSBlbHNlIGlmIChzdWJ0eXBlID09PSAnZnVsbCcpIHtcbiAgICBzdWZmaXggKz0gJ1snICsgKG5vZGUubGFiZWwgfHwgbm9kZS5pZGVudGlmaWVyKSArICddJ1xuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PT0gJ2ltYWdlUmVmZXJlbmNlJykge1xuICAgIHJldHVybiBbe3R5cGU6ICd0ZXh0JywgdmFsdWU6ICchWycgKyBub2RlLmFsdCArIHN1ZmZpeH1dXG4gIH1cblxuICBjb25zdCBjb250ZW50cyA9IHN0YXRlLmFsbChub2RlKVxuICBjb25zdCBoZWFkID0gY29udGVudHNbMF1cblxuICBpZiAoaGVhZCAmJiBoZWFkLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgIGhlYWQudmFsdWUgPSAnWycgKyBoZWFkLnZhbHVlXG4gIH0gZWxzZSB7XG4gICAgY29udGVudHMudW5zaGlmdCh7dHlwZTogJ3RleHQnLCB2YWx1ZTogJ1snfSlcbiAgfVxuXG4gIGNvbnN0IHRhaWwgPSBjb250ZW50c1tjb250ZW50cy5sZW5ndGggLSAxXVxuXG4gIGlmICh0YWlsICYmIHRhaWwudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgdGFpbC52YWx1ZSArPSBzdWZmaXhcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50cy5wdXNoKHt0eXBlOiAndGV4dCcsIHZhbHVlOiBzdWZmaXh9KVxuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnRzXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50Q29udGVudCwgRWxlbWVudCwgUHJvcGVydGllc30gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge0ltYWdlUmVmZXJlbmNlfSBmcm9tICdtZGFzdCdcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICcuLi9zdGF0ZS5qcydcbiAqL1xuXG5pbXBvcnQge25vcm1hbGl6ZVVyaX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpJ1xuaW1wb3J0IHtyZXZlcnR9IGZyb20gJy4uL3JldmVydC5qcydcblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGBpbWFnZVJlZmVyZW5jZWAgbm9kZSBpbnRvIGhhc3QuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtJbWFnZVJlZmVyZW5jZX0gbm9kZVxuICogICBtZGFzdCBub2RlLlxuICogQHJldHVybnMge0FycmF5PEVsZW1lbnRDb250ZW50PiB8IEVsZW1lbnRDb250ZW50fVxuICogICBoYXN0IG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZVJlZmVyZW5jZShzdGF0ZSwgbm9kZSkge1xuICBjb25zdCBpZCA9IFN0cmluZyhub2RlLmlkZW50aWZpZXIpLnRvVXBwZXJDYXNlKClcbiAgY29uc3QgZGVmaW5pdGlvbiA9IHN0YXRlLmRlZmluaXRpb25CeUlkLmdldChpZClcblxuICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICByZXR1cm4gcmV2ZXJ0KHN0YXRlLCBub2RlKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtQcm9wZXJ0aWVzfSAqL1xuICBjb25zdCBwcm9wZXJ0aWVzID0ge3NyYzogbm9ybWFsaXplVXJpKGRlZmluaXRpb24udXJsIHx8ICcnKSwgYWx0OiBub2RlLmFsdH1cblxuICBpZiAoZGVmaW5pdGlvbi50aXRsZSAhPT0gbnVsbCAmJiBkZWZpbml0aW9uLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBwcm9wZXJ0aWVzLnRpdGxlID0gZGVmaW5pdGlvbi50aXRsZVxuICB9XG5cbiAgLyoqIEB0eXBlIHtFbGVtZW50fSAqL1xuICBjb25zdCByZXN1bHQgPSB7dHlwZTogJ2VsZW1lbnQnLCB0YWdOYW1lOiAnaW1nJywgcHJvcGVydGllcywgY2hpbGRyZW46IFtdfVxuICBzdGF0ZS5wYXRjaChub2RlLCByZXN1bHQpXG4gIHJldHVybiBzdGF0ZS5hcHBseURhdGEobm9kZSwgcmVzdWx0KVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7RWxlbWVudCwgUHJvcGVydGllc30gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge0ltYWdlfSBmcm9tICdtZGFzdCdcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICcuLi9zdGF0ZS5qcydcbiAqL1xuXG5pbXBvcnQge25vcm1hbGl6ZVVyaX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpJ1xuXG4vKipcbiAqIFR1cm4gYW4gbWRhc3QgYGltYWdlYCBub2RlIGludG8gaGFzdC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge0ltYWdlfSBub2RlXG4gKiAgIG1kYXN0IG5vZGUuXG4gKiBAcmV0dXJucyB7RWxlbWVudH1cbiAqICAgaGFzdCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1hZ2Uoc3RhdGUsIG5vZGUpIHtcbiAgLyoqIEB0eXBlIHtQcm9wZXJ0aWVzfSAqL1xuICBjb25zdCBwcm9wZXJ0aWVzID0ge3NyYzogbm9ybWFsaXplVXJpKG5vZGUudXJsKX1cblxuICBpZiAobm9kZS5hbHQgIT09IG51bGwgJiYgbm9kZS5hbHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BlcnRpZXMuYWx0ID0gbm9kZS5hbHRcbiAgfVxuXG4gIGlmIChub2RlLnRpdGxlICE9PSBudWxsICYmIG5vZGUudGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BlcnRpZXMudGl0bGUgPSBub2RlLnRpdGxlXG4gIH1cblxuICAvKiogQHR5cGUge0VsZW1lbnR9ICovXG4gIGNvbnN0IHJlc3VsdCA9IHt0eXBlOiAnZWxlbWVudCcsIHRhZ05hbWU6ICdpbWcnLCBwcm9wZXJ0aWVzLCBjaGlsZHJlbjogW119XG4gIHN0YXRlLnBhdGNoKG5vZGUsIHJlc3VsdClcbiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlLCByZXN1bHQpXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50LCBUZXh0fSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7SW5saW5lQ29kZX0gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vc3RhdGUuanMnXG4gKi9cblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGBpbmxpbmVDb2RlYCBub2RlIGludG8gaGFzdC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge0lubGluZUNvZGV9IG5vZGVcbiAqICAgbWRhc3Qgbm9kZS5cbiAqIEByZXR1cm5zIHtFbGVtZW50fVxuICogICBoYXN0IG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmxpbmVDb2RlKHN0YXRlLCBub2RlKSB7XG4gIC8qKiBAdHlwZSB7VGV4dH0gKi9cbiAgY29uc3QgdGV4dCA9IHt0eXBlOiAndGV4dCcsIHZhbHVlOiBub2RlLnZhbHVlLnJlcGxhY2UoL1xccj9cXG58XFxyL2csICcgJyl9XG4gIHN0YXRlLnBhdGNoKG5vZGUsIHRleHQpXG5cbiAgLyoqIEB0eXBlIHtFbGVtZW50fSAqL1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgIHRhZ05hbWU6ICdjb2RlJyxcbiAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICBjaGlsZHJlbjogW3RleHRdXG4gIH1cbiAgc3RhdGUucGF0Y2gobm9kZSwgcmVzdWx0KVxuICByZXR1cm4gc3RhdGUuYXBwbHlEYXRhKG5vZGUsIHJlc3VsdClcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0VsZW1lbnRDb250ZW50LCBFbGVtZW50LCBQcm9wZXJ0aWVzfSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7TGlua1JlZmVyZW5jZX0gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vc3RhdGUuanMnXG4gKi9cblxuaW1wb3J0IHtub3JtYWxpemVVcml9IGZyb20gJ21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaSdcbmltcG9ydCB7cmV2ZXJ0fSBmcm9tICcuLi9yZXZlcnQuanMnXG5cbi8qKlxuICogVHVybiBhbiBtZGFzdCBgbGlua1JlZmVyZW5jZWAgbm9kZSBpbnRvIGhhc3QuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtMaW5rUmVmZXJlbmNlfSBub2RlXG4gKiAgIG1kYXN0IG5vZGUuXG4gKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudENvbnRlbnQ+IHwgRWxlbWVudENvbnRlbnR9XG4gKiAgIGhhc3Qgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpbmtSZWZlcmVuY2Uoc3RhdGUsIG5vZGUpIHtcbiAgY29uc3QgaWQgPSBTdHJpbmcobm9kZS5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpXG4gIGNvbnN0IGRlZmluaXRpb24gPSBzdGF0ZS5kZWZpbml0aW9uQnlJZC5nZXQoaWQpXG5cbiAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuIHJldmVydChzdGF0ZSwgbm9kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7UHJvcGVydGllc30gKi9cbiAgY29uc3QgcHJvcGVydGllcyA9IHtocmVmOiBub3JtYWxpemVVcmkoZGVmaW5pdGlvbi51cmwgfHwgJycpfVxuXG4gIGlmIChkZWZpbml0aW9uLnRpdGxlICE9PSBudWxsICYmIGRlZmluaXRpb24udGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BlcnRpZXMudGl0bGUgPSBkZWZpbml0aW9uLnRpdGxlXG4gIH1cblxuICAvKiogQHR5cGUge0VsZW1lbnR9ICovXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgdGFnTmFtZTogJ2EnLFxuICAgIHByb3BlcnRpZXMsXG4gICAgY2hpbGRyZW46IHN0YXRlLmFsbChub2RlKVxuICB9XG4gIHN0YXRlLnBhdGNoKG5vZGUsIHJlc3VsdClcbiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlLCByZXN1bHQpXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50LCBQcm9wZXJ0aWVzfSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7TGlua30gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vc3RhdGUuanMnXG4gKi9cblxuaW1wb3J0IHtub3JtYWxpemVVcml9IGZyb20gJ21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaSdcblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGBsaW5rYCBub2RlIGludG8gaGFzdC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge0xpbmt9IG5vZGVcbiAqICAgbWRhc3Qgbm9kZS5cbiAqIEByZXR1cm5zIHtFbGVtZW50fVxuICogICBoYXN0IG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5rKHN0YXRlLCBub2RlKSB7XG4gIC8qKiBAdHlwZSB7UHJvcGVydGllc30gKi9cbiAgY29uc3QgcHJvcGVydGllcyA9IHtocmVmOiBub3JtYWxpemVVcmkobm9kZS51cmwpfVxuXG4gIGlmIChub2RlLnRpdGxlICE9PSBudWxsICYmIG5vZGUudGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BlcnRpZXMudGl0bGUgPSBub2RlLnRpdGxlXG4gIH1cblxuICAvKiogQHR5cGUge0VsZW1lbnR9ICovXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgdGFnTmFtZTogJ2EnLFxuICAgIHByb3BlcnRpZXMsXG4gICAgY2hpbGRyZW46IHN0YXRlLmFsbChub2RlKVxuICB9XG4gIHN0YXRlLnBhdGNoKG5vZGUsIHJlc3VsdClcbiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlLCByZXN1bHQpXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50Q29udGVudCwgRWxlbWVudCwgUHJvcGVydGllc30gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge0xpc3RJdGVtLCBQYXJlbnRzfSBmcm9tICdtZGFzdCdcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICcuLi9zdGF0ZS5qcydcbiAqL1xuXG4vKipcbiAqIFR1cm4gYW4gbWRhc3QgYGxpc3RJdGVtYCBub2RlIGludG8gaGFzdC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge0xpc3RJdGVtfSBub2RlXG4gKiAgIG1kYXN0IG5vZGUuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgYG5vZGVgLlxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKiAgIGhhc3Qgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RJdGVtKHN0YXRlLCBub2RlLCBwYXJlbnQpIHtcbiAgY29uc3QgcmVzdWx0cyA9IHN0YXRlLmFsbChub2RlKVxuICBjb25zdCBsb29zZSA9IHBhcmVudCA/IGxpc3RMb29zZShwYXJlbnQpIDogbGlzdEl0ZW1Mb29zZShub2RlKVxuICAvKiogQHR5cGUge1Byb3BlcnRpZXN9ICovXG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7fVxuICAvKiogQHR5cGUge0FycmF5PEVsZW1lbnRDb250ZW50Pn0gKi9cbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuXG4gIGlmICh0eXBlb2Ygbm9kZS5jaGVja2VkID09PSAnYm9vbGVhbicpIHtcbiAgICBjb25zdCBoZWFkID0gcmVzdWx0c1swXVxuICAgIC8qKiBAdHlwZSB7RWxlbWVudH0gKi9cbiAgICBsZXQgcGFyYWdyYXBoXG5cbiAgICBpZiAoaGVhZCAmJiBoZWFkLnR5cGUgPT09ICdlbGVtZW50JyAmJiBoZWFkLnRhZ05hbWUgPT09ICdwJykge1xuICAgICAgcGFyYWdyYXBoID0gaGVhZFxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhZ3JhcGggPSB7dHlwZTogJ2VsZW1lbnQnLCB0YWdOYW1lOiAncCcsIHByb3BlcnRpZXM6IHt9LCBjaGlsZHJlbjogW119XG4gICAgICByZXN1bHRzLnVuc2hpZnQocGFyYWdyYXBoKVxuICAgIH1cblxuICAgIGlmIChwYXJhZ3JhcGguY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgcGFyYWdyYXBoLmNoaWxkcmVuLnVuc2hpZnQoe3R5cGU6ICd0ZXh0JywgdmFsdWU6ICcgJ30pXG4gICAgfVxuXG4gICAgcGFyYWdyYXBoLmNoaWxkcmVuLnVuc2hpZnQoe1xuICAgICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgICAgdGFnTmFtZTogJ2lucHV0JyxcbiAgICAgIHByb3BlcnRpZXM6IHt0eXBlOiAnY2hlY2tib3gnLCBjaGVja2VkOiBub2RlLmNoZWNrZWQsIGRpc2FibGVkOiB0cnVlfSxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH0pXG5cbiAgICAvLyBBY2NvcmRpbmcgdG8gZ2l0aHViLW1hcmtkb3duLWNzcywgdGhpcyBjbGFzcyBoaWRlcyBidWxsZXQuXG4gICAgLy8gU2VlOiA8aHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9naXRodWItbWFya2Rvd24tY3NzPi5cbiAgICBwcm9wZXJ0aWVzLmNsYXNzTmFtZSA9IFsndGFzay1saXN0LWl0ZW0nXVxuICB9XG5cbiAgbGV0IGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IHJlc3VsdHMubGVuZ3RoKSB7XG4gICAgY29uc3QgY2hpbGQgPSByZXN1bHRzW2luZGV4XVxuXG4gICAgLy8gQWRkIGVvbHMgYmVmb3JlIG5vZGVzLCBleGNlcHQgaWYgdGhpcyBpcyBhIGxvb3NlLCBmaXJzdCBwYXJhZ3JhcGguXG4gICAgaWYgKFxuICAgICAgbG9vc2UgfHxcbiAgICAgIGluZGV4ICE9PSAwIHx8XG4gICAgICBjaGlsZC50eXBlICE9PSAnZWxlbWVudCcgfHxcbiAgICAgIGNoaWxkLnRhZ05hbWUgIT09ICdwJ1xuICAgICkge1xuICAgICAgY2hpbGRyZW4ucHVzaCh7dHlwZTogJ3RleHQnLCB2YWx1ZTogJ1xcbid9KVxuICAgIH1cblxuICAgIGlmIChjaGlsZC50eXBlID09PSAnZWxlbWVudCcgJiYgY2hpbGQudGFnTmFtZSA9PT0gJ3AnICYmICFsb29zZSkge1xuICAgICAgY2hpbGRyZW4ucHVzaCguLi5jaGlsZC5jaGlsZHJlbilcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZClcbiAgICB9XG4gIH1cblxuICBjb25zdCB0YWlsID0gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdXG5cbiAgLy8gQWRkIGEgZmluYWwgZW9sLlxuICBpZiAodGFpbCAmJiAobG9vc2UgfHwgdGFpbC50eXBlICE9PSAnZWxlbWVudCcgfHwgdGFpbC50YWdOYW1lICE9PSAncCcpKSB7XG4gICAgY2hpbGRyZW4ucHVzaCh7dHlwZTogJ3RleHQnLCB2YWx1ZTogJ1xcbid9KVxuICB9XG5cbiAgLyoqIEB0eXBlIHtFbGVtZW50fSAqL1xuICBjb25zdCByZXN1bHQgPSB7dHlwZTogJ2VsZW1lbnQnLCB0YWdOYW1lOiAnbGknLCBwcm9wZXJ0aWVzLCBjaGlsZHJlbn1cbiAgc3RhdGUucGF0Y2gobm9kZSwgcmVzdWx0KVxuICByZXR1cm4gc3RhdGUuYXBwbHlEYXRhKG5vZGUsIHJlc3VsdClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BhcmVudHN9IG5vZGVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGxpc3RMb29zZShub2RlKSB7XG4gIGxldCBsb29zZSA9IGZhbHNlXG4gIGlmIChub2RlLnR5cGUgPT09ICdsaXN0Jykge1xuICAgIGxvb3NlID0gbm9kZS5zcHJlYWQgfHwgZmFsc2VcbiAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW5cbiAgICBsZXQgaW5kZXggPSAtMVxuXG4gICAgd2hpbGUgKCFsb29zZSAmJiArK2luZGV4IDwgY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBsb29zZSA9IGxpc3RJdGVtTG9vc2UoY2hpbGRyZW5baW5kZXhdKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsb29zZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7TGlzdEl0ZW19IG5vZGVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGxpc3RJdGVtTG9vc2Uobm9kZSkge1xuICBjb25zdCBzcHJlYWQgPSBub2RlLnNwcmVhZFxuXG4gIHJldHVybiBzcHJlYWQgPT09IG51bGwgfHwgc3ByZWFkID09PSB1bmRlZmluZWRcbiAgICA/IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMVxuICAgIDogc3ByZWFkXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50LCBQcm9wZXJ0aWVzfSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7TGlzdH0gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vc3RhdGUuanMnXG4gKi9cblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGBsaXN0YCBub2RlIGludG8gaGFzdC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge0xpc3R9IG5vZGVcbiAqICAgbWRhc3Qgbm9kZS5cbiAqIEByZXR1cm5zIHtFbGVtZW50fVxuICogICBoYXN0IG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0KHN0YXRlLCBub2RlKSB7XG4gIC8qKiBAdHlwZSB7UHJvcGVydGllc30gKi9cbiAgY29uc3QgcHJvcGVydGllcyA9IHt9XG4gIGNvbnN0IHJlc3VsdHMgPSBzdGF0ZS5hbGwobm9kZSlcbiAgbGV0IGluZGV4ID0gLTFcblxuICBpZiAodHlwZW9mIG5vZGUuc3RhcnQgPT09ICdudW1iZXInICYmIG5vZGUuc3RhcnQgIT09IDEpIHtcbiAgICBwcm9wZXJ0aWVzLnN0YXJ0ID0gbm9kZS5zdGFydFxuICB9XG5cbiAgLy8gTGlrZSBHaXRIdWIsIGFkZCBhIGNsYXNzIGZvciBjdXN0b20gc3R5bGluZy5cbiAgd2hpbGUgKCsraW5kZXggPCByZXN1bHRzLmxlbmd0aCkge1xuICAgIGNvbnN0IGNoaWxkID0gcmVzdWx0c1tpbmRleF1cblxuICAgIGlmIChcbiAgICAgIGNoaWxkLnR5cGUgPT09ICdlbGVtZW50JyAmJlxuICAgICAgY2hpbGQudGFnTmFtZSA9PT0gJ2xpJyAmJlxuICAgICAgY2hpbGQucHJvcGVydGllcyAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZC5wcm9wZXJ0aWVzLmNsYXNzTmFtZSkgJiZcbiAgICAgIGNoaWxkLnByb3BlcnRpZXMuY2xhc3NOYW1lLmluY2x1ZGVzKCd0YXNrLWxpc3QtaXRlbScpXG4gICAgKSB7XG4gICAgICBwcm9wZXJ0aWVzLmNsYXNzTmFtZSA9IFsnY29udGFpbnMtdGFzay1saXN0J11cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLyoqIEB0eXBlIHtFbGVtZW50fSAqL1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgIHRhZ05hbWU6IG5vZGUub3JkZXJlZCA/ICdvbCcgOiAndWwnLFxuICAgIHByb3BlcnRpZXMsXG4gICAgY2hpbGRyZW46IHN0YXRlLndyYXAocmVzdWx0cywgdHJ1ZSlcbiAgfVxuICBzdGF0ZS5wYXRjaChub2RlLCByZXN1bHQpXG4gIHJldHVybiBzdGF0ZS5hcHBseURhdGEobm9kZSwgcmVzdWx0KVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7RWxlbWVudH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1BhcmFncmFwaH0gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vc3RhdGUuanMnXG4gKi9cblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGBwYXJhZ3JhcGhgIG5vZGUgaW50byBoYXN0LlxuICpcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZC5cbiAqIEBwYXJhbSB7UGFyYWdyYXBofSBub2RlXG4gKiAgIG1kYXN0IG5vZGUuXG4gKiBAcmV0dXJucyB7RWxlbWVudH1cbiAqICAgaGFzdCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyYWdyYXBoKHN0YXRlLCBub2RlKSB7XG4gIC8qKiBAdHlwZSB7RWxlbWVudH0gKi9cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICB0YWdOYW1lOiAncCcsXG4gICAgcHJvcGVydGllczoge30sXG4gICAgY2hpbGRyZW46IHN0YXRlLmFsbChub2RlKVxuICB9XG4gIHN0YXRlLnBhdGNoKG5vZGUsIHJlc3VsdClcbiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlLCByZXN1bHQpXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtQYXJlbnRzIGFzIEhhc3RQYXJlbnRzLCBSb290IGFzIEhhc3RSb290fSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7Um9vdCBhcyBNZGFzdFJvb3R9IGZyb20gJ21kYXN0J1xuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJy4uL3N0YXRlLmpzJ1xuICovXG5cbi8qKlxuICogVHVybiBhbiBtZGFzdCBgcm9vdGAgbm9kZSBpbnRvIGhhc3QuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtNZGFzdFJvb3R9IG5vZGVcbiAqICAgbWRhc3Qgbm9kZS5cbiAqIEByZXR1cm5zIHtIYXN0UGFyZW50c31cbiAqICAgaGFzdCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdChzdGF0ZSwgbm9kZSkge1xuICAvKiogQHR5cGUge0hhc3RSb290fSAqL1xuICBjb25zdCByZXN1bHQgPSB7dHlwZTogJ3Jvb3QnLCBjaGlsZHJlbjogc3RhdGUud3JhcChzdGF0ZS5hbGwobm9kZSkpfVxuICBzdGF0ZS5wYXRjaChub2RlLCByZXN1bHQpXG4gIHJldHVybiBzdGF0ZS5hcHBseURhdGEobm9kZSwgcmVzdWx0KVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7RWxlbWVudH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1N0cm9uZ30gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vc3RhdGUuanMnXG4gKi9cblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGBzdHJvbmdgIG5vZGUgaW50byBoYXN0LlxuICpcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZC5cbiAqIEBwYXJhbSB7U3Ryb25nfSBub2RlXG4gKiAgIG1kYXN0IG5vZGUuXG4gKiBAcmV0dXJucyB7RWxlbWVudH1cbiAqICAgaGFzdCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Ryb25nKHN0YXRlLCBub2RlKSB7XG4gIC8qKiBAdHlwZSB7RWxlbWVudH0gKi9cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICB0YWdOYW1lOiAnc3Ryb25nJyxcbiAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICBjaGlsZHJlbjogc3RhdGUuYWxsKG5vZGUpXG4gIH1cbiAgc3RhdGUucGF0Y2gobm9kZSwgcmVzdWx0KVxuICByZXR1cm4gc3RhdGUuYXBwbHlEYXRhKG5vZGUsIHJlc3VsdClcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge1RhYmxlfSBmcm9tICdtZGFzdCdcbiAqIEBpbXBvcnQge0VsZW1lbnR9IGZyb20gJ2hhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vc3RhdGUuanMnXG4gKi9cblxuaW1wb3J0IHtwb2ludEVuZCwgcG9pbnRTdGFydH0gZnJvbSAndW5pc3QtdXRpbC1wb3NpdGlvbidcblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGB0YWJsZWAgbm9kZSBpbnRvIGhhc3QuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtUYWJsZX0gbm9kZVxuICogICBtZGFzdCBub2RlLlxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKiAgIGhhc3Qgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlKHN0YXRlLCBub2RlKSB7XG4gIGNvbnN0IHJvd3MgPSBzdGF0ZS5hbGwobm9kZSlcbiAgY29uc3QgZmlyc3RSb3cgPSByb3dzLnNoaWZ0KClcbiAgLyoqIEB0eXBlIHtBcnJheTxFbGVtZW50Pn0gKi9cbiAgY29uc3QgdGFibGVDb250ZW50ID0gW11cblxuICBpZiAoZmlyc3RSb3cpIHtcbiAgICAvKiogQHR5cGUge0VsZW1lbnR9ICovXG4gICAgY29uc3QgaGVhZCA9IHtcbiAgICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICAgIHRhZ05hbWU6ICd0aGVhZCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgIGNoaWxkcmVuOiBzdGF0ZS53cmFwKFtmaXJzdFJvd10sIHRydWUpXG4gICAgfVxuICAgIHN0YXRlLnBhdGNoKG5vZGUuY2hpbGRyZW5bMF0sIGhlYWQpXG4gICAgdGFibGVDb250ZW50LnB1c2goaGVhZClcbiAgfVxuXG4gIGlmIChyb3dzLmxlbmd0aCA+IDApIHtcbiAgICAvKiogQHR5cGUge0VsZW1lbnR9ICovXG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICAgIHRhZ05hbWU6ICd0Ym9keScsXG4gICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgIGNoaWxkcmVuOiBzdGF0ZS53cmFwKHJvd3MsIHRydWUpXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBwb2ludFN0YXJ0KG5vZGUuY2hpbGRyZW5bMV0pXG4gICAgY29uc3QgZW5kID0gcG9pbnRFbmQobm9kZS5jaGlsZHJlbltub2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdKVxuICAgIGlmIChzdGFydCAmJiBlbmQpIGJvZHkucG9zaXRpb24gPSB7c3RhcnQsIGVuZH1cbiAgICB0YWJsZUNvbnRlbnQucHVzaChib2R5KVxuICB9XG5cbiAgLyoqIEB0eXBlIHtFbGVtZW50fSAqL1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgIHRhZ05hbWU6ICd0YWJsZScsXG4gICAgcHJvcGVydGllczoge30sXG4gICAgY2hpbGRyZW46IHN0YXRlLndyYXAodGFibGVDb250ZW50LCB0cnVlKVxuICB9XG4gIHN0YXRlLnBhdGNoKG5vZGUsIHJlc3VsdClcbiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlLCByZXN1bHQpXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50LCBFbGVtZW50Q29udGVudCwgUHJvcGVydGllc30gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1BhcmVudHMsIFRhYmxlUm93fSBmcm9tICdtZGFzdCdcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICcuLi9zdGF0ZS5qcydcbiAqL1xuXG4vKipcbiAqIFR1cm4gYW4gbWRhc3QgYHRhYmxlUm93YCBub2RlIGludG8gaGFzdC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge1RhYmxlUm93fSBub2RlXG4gKiAgIG1kYXN0IG5vZGUuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgYG5vZGVgLlxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKiAgIGhhc3Qgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlUm93KHN0YXRlLCBub2RlLCBwYXJlbnQpIHtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQgPyBwYXJlbnQuY2hpbGRyZW4gOiB1bmRlZmluZWRcbiAgLy8gR2VuZXJhdGUgYSBib2R5IHJvdyB3aGVuIHdpdGhvdXQgcGFyZW50LlxuICBjb25zdCByb3dJbmRleCA9IHNpYmxpbmdzID8gc2libGluZ3MuaW5kZXhPZihub2RlKSA6IDFcbiAgY29uc3QgdGFnTmFtZSA9IHJvd0luZGV4ID09PSAwID8gJ3RoJyA6ICd0ZCdcbiAgLy8gVG8gZG86IG9wdGlvbiB0byB1c2UgYHN0eWxlYD9cbiAgY29uc3QgYWxpZ24gPSBwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICd0YWJsZScgPyBwYXJlbnQuYWxpZ24gOiB1bmRlZmluZWRcbiAgY29uc3QgbGVuZ3RoID0gYWxpZ24gPyBhbGlnbi5sZW5ndGggOiBub2RlLmNoaWxkcmVuLmxlbmd0aFxuICBsZXQgY2VsbEluZGV4ID0gLTFcbiAgLyoqIEB0eXBlIHtBcnJheTxFbGVtZW50Q29udGVudD59ICovXG4gIGNvbnN0IGNlbGxzID0gW11cblxuICB3aGlsZSAoKytjZWxsSW5kZXggPCBsZW5ndGgpIHtcbiAgICAvLyBOb3RlOiBjYW4gYWxzbyBiZSB1bmRlZmluZWQuXG4gICAgY29uc3QgY2VsbCA9IG5vZGUuY2hpbGRyZW5bY2VsbEluZGV4XVxuICAgIC8qKiBAdHlwZSB7UHJvcGVydGllc30gKi9cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge31cbiAgICBjb25zdCBhbGlnblZhbHVlID0gYWxpZ24gPyBhbGlnbltjZWxsSW5kZXhdIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoYWxpZ25WYWx1ZSkge1xuICAgICAgcHJvcGVydGllcy5hbGlnbiA9IGFsaWduVmFsdWVcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0VsZW1lbnR9ICovXG4gICAgbGV0IHJlc3VsdCA9IHt0eXBlOiAnZWxlbWVudCcsIHRhZ05hbWUsIHByb3BlcnRpZXMsIGNoaWxkcmVuOiBbXX1cblxuICAgIGlmIChjZWxsKSB7XG4gICAgICByZXN1bHQuY2hpbGRyZW4gPSBzdGF0ZS5hbGwoY2VsbClcbiAgICAgIHN0YXRlLnBhdGNoKGNlbGwsIHJlc3VsdClcbiAgICAgIHJlc3VsdCA9IHN0YXRlLmFwcGx5RGF0YShjZWxsLCByZXN1bHQpXG4gICAgfVxuXG4gICAgY2VsbHMucHVzaChyZXN1bHQpXG4gIH1cblxuICAvKiogQHR5cGUge0VsZW1lbnR9ICovXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgdGFnTmFtZTogJ3RyJyxcbiAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICBjaGlsZHJlbjogc3RhdGUud3JhcChjZWxscywgdHJ1ZSlcbiAgfVxuICBzdGF0ZS5wYXRjaChub2RlLCByZXN1bHQpXG4gIHJldHVybiBzdGF0ZS5hcHBseURhdGEobm9kZSwgcmVzdWx0KVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7RWxlbWVudH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1RhYmxlQ2VsbH0gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vc3RhdGUuanMnXG4gKi9cblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGB0YWJsZUNlbGxgIG5vZGUgaW50byBoYXN0LlxuICpcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZC5cbiAqIEBwYXJhbSB7VGFibGVDZWxsfSBub2RlXG4gKiAgIG1kYXN0IG5vZGUuXG4gKiBAcmV0dXJucyB7RWxlbWVudH1cbiAqICAgaGFzdCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFibGVDZWxsKHN0YXRlLCBub2RlKSB7XG4gIC8vIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgbm90IGNhbGxlZDogc2VlIGB0YWJsZS1yb3dgIGZvciBob3cgcm93c1xuICAvLyBhbmQgdGhlaXIgY2VsbHMgYXJlIGNvbXBpbGVkLlxuICAvKiogQHR5cGUge0VsZW1lbnR9ICovXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgdGFnTmFtZTogJ3RkJywgLy8gQXNzdW1lIGJvZHkgY2VsbC5cbiAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICBjaGlsZHJlbjogc3RhdGUuYWxsKG5vZGUpXG4gIH1cbiAgc3RhdGUucGF0Y2gobm9kZSwgcmVzdWx0KVxuICByZXR1cm4gc3RhdGUuYXBwbHlEYXRhKG5vZGUsIHJlc3VsdClcbn1cbiIsICJjb25zdCB0YWIgPSA5IC8qIGBcXHRgICovXG5jb25zdCBzcGFjZSA9IDMyIC8qIGAgYCAqL1xuXG4vKipcbiAqIFJlbW92ZSBpbml0aWFsIGFuZCBmaW5hbCBzcGFjZXMgYW5kIHRhYnMgYXQgdGhlIGxpbmUgYnJlYWtzIGluIGB2YWx1ZWAuXG4gKiBEb2VzIG5vdCB0cmltIGluaXRpYWwgYW5kIGZpbmFsIHNwYWNlcyBhbmQgdGFicyBvZiB0aGUgdmFsdWUgaXRzZWxmLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBWYWx1ZSB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgVHJpbW1lZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MaW5lcyh2YWx1ZSkge1xuICBjb25zdCBzb3VyY2UgPSBTdHJpbmcodmFsdWUpXG4gIGNvbnN0IHNlYXJjaCA9IC9cXHI/XFxufFxcci9nXG4gIGxldCBtYXRjaCA9IHNlYXJjaC5leGVjKHNvdXJjZSlcbiAgbGV0IGxhc3QgPSAwXG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgbGluZXMgPSBbXVxuXG4gIHdoaWxlIChtYXRjaCkge1xuICAgIGxpbmVzLnB1c2goXG4gICAgICB0cmltTGluZShzb3VyY2Uuc2xpY2UobGFzdCwgbWF0Y2guaW5kZXgpLCBsYXN0ID4gMCwgdHJ1ZSksXG4gICAgICBtYXRjaFswXVxuICAgIClcblxuICAgIGxhc3QgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICAgIG1hdGNoID0gc2VhcmNoLmV4ZWMoc291cmNlKVxuICB9XG5cbiAgbGluZXMucHVzaCh0cmltTGluZShzb3VyY2Uuc2xpY2UobGFzdCksIGxhc3QgPiAwLCBmYWxzZSkpXG5cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiAgIExpbmUgdG8gdHJpbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RhcnRcbiAqICAgV2hldGhlciB0byB0cmltIHRoZSBzdGFydCBvZiB0aGUgbGluZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5kXG4gKiAgIFdoZXRoZXIgdG8gdHJpbSB0aGUgZW5kIG9mIHRoZSBsaW5lLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgVHJpbW1lZCBsaW5lLlxuICovXG5mdW5jdGlvbiB0cmltTGluZSh2YWx1ZSwgc3RhcnQsIGVuZCkge1xuICBsZXQgc3RhcnRJbmRleCA9IDBcbiAgbGV0IGVuZEluZGV4ID0gdmFsdWUubGVuZ3RoXG5cbiAgaWYgKHN0YXJ0KSB7XG4gICAgbGV0IGNvZGUgPSB2YWx1ZS5jb2RlUG9pbnRBdChzdGFydEluZGV4KVxuXG4gICAgd2hpbGUgKGNvZGUgPT09IHRhYiB8fCBjb2RlID09PSBzcGFjZSkge1xuICAgICAgc3RhcnRJbmRleCsrXG4gICAgICBjb2RlID0gdmFsdWUuY29kZVBvaW50QXQoc3RhcnRJbmRleClcbiAgICB9XG4gIH1cblxuICBpZiAoZW5kKSB7XG4gICAgbGV0IGNvZGUgPSB2YWx1ZS5jb2RlUG9pbnRBdChlbmRJbmRleCAtIDEpXG5cbiAgICB3aGlsZSAoY29kZSA9PT0gdGFiIHx8IGNvZGUgPT09IHNwYWNlKSB7XG4gICAgICBlbmRJbmRleC0tXG4gICAgICBjb2RlID0gdmFsdWUuY29kZVBvaW50QXQoZW5kSW5kZXggLSAxKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbmRJbmRleCA+IHN0YXJ0SW5kZXggPyB2YWx1ZS5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCkgOiAnJ1xufVxuIiwgIi8qKlxuICogQGltcG9ydCB7RWxlbWVudCBhcyBIYXN0RWxlbWVudCwgVGV4dCBhcyBIYXN0VGV4dH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1RleHQgYXMgTWRhc3RUZXh0fSBmcm9tICdtZGFzdCdcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICcuLi9zdGF0ZS5qcydcbiAqL1xuXG5pbXBvcnQge3RyaW1MaW5lc30gZnJvbSAndHJpbS1saW5lcydcblxuLyoqXG4gKiBUdXJuIGFuIG1kYXN0IGB0ZXh0YCBub2RlIGludG8gaGFzdC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQuXG4gKiBAcGFyYW0ge01kYXN0VGV4dH0gbm9kZVxuICogICBtZGFzdCBub2RlLlxuICogQHJldHVybnMge0hhc3RFbGVtZW50IHwgSGFzdFRleHR9XG4gKiAgIGhhc3Qgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRleHQoc3RhdGUsIG5vZGUpIHtcbiAgLyoqIEB0eXBlIHtIYXN0VGV4dH0gKi9cbiAgY29uc3QgcmVzdWx0ID0ge3R5cGU6ICd0ZXh0JywgdmFsdWU6IHRyaW1MaW5lcyhTdHJpbmcobm9kZS52YWx1ZSkpfVxuICBzdGF0ZS5wYXRjaChub2RlLCByZXN1bHQpXG4gIHJldHVybiBzdGF0ZS5hcHBseURhdGEobm9kZSwgcmVzdWx0KVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7RWxlbWVudH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1RoZW1hdGljQnJlYWt9IGZyb20gJ21kYXN0J1xuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJy4uL3N0YXRlLmpzJ1xuICovXG5cbi8qKlxuICogVHVybiBhbiBtZGFzdCBgdGhlbWF0aWNCcmVha2Agbm9kZSBpbnRvIGhhc3QuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtUaGVtYXRpY0JyZWFrfSBub2RlXG4gKiAgIG1kYXN0IG5vZGUuXG4gKiBAcmV0dXJucyB7RWxlbWVudH1cbiAqICAgaGFzdCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWF0aWNCcmVhayhzdGF0ZSwgbm9kZSkge1xuICAvKiogQHR5cGUge0VsZW1lbnR9ICovXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgdGFnTmFtZTogJ2hyJyxcbiAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICBjaGlsZHJlbjogW11cbiAgfVxuICBzdGF0ZS5wYXRjaChub2RlLCByZXN1bHQpXG4gIHJldHVybiBzdGF0ZS5hcHBseURhdGEobm9kZSwgcmVzdWx0KVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7SGFuZGxlcnN9IGZyb20gJy4uL3N0YXRlLmpzJ1xuICovXG5cbmltcG9ydCB7YmxvY2txdW90ZX0gZnJvbSAnLi9ibG9ja3F1b3RlLmpzJ1xuaW1wb3J0IHtoYXJkQnJlYWt9IGZyb20gJy4vYnJlYWsuanMnXG5pbXBvcnQge2NvZGV9IGZyb20gJy4vY29kZS5qcydcbmltcG9ydCB7c3RyaWtldGhyb3VnaH0gZnJvbSAnLi9kZWxldGUuanMnXG5pbXBvcnQge2VtcGhhc2lzfSBmcm9tICcuL2VtcGhhc2lzLmpzJ1xuaW1wb3J0IHtmb290bm90ZVJlZmVyZW5jZX0gZnJvbSAnLi9mb290bm90ZS1yZWZlcmVuY2UuanMnXG5pbXBvcnQge2hlYWRpbmd9IGZyb20gJy4vaGVhZGluZy5qcydcbmltcG9ydCB7aHRtbH0gZnJvbSAnLi9odG1sLmpzJ1xuaW1wb3J0IHtpbWFnZVJlZmVyZW5jZX0gZnJvbSAnLi9pbWFnZS1yZWZlcmVuY2UuanMnXG5pbXBvcnQge2ltYWdlfSBmcm9tICcuL2ltYWdlLmpzJ1xuaW1wb3J0IHtpbmxpbmVDb2RlfSBmcm9tICcuL2lubGluZS1jb2RlLmpzJ1xuaW1wb3J0IHtsaW5rUmVmZXJlbmNlfSBmcm9tICcuL2xpbmstcmVmZXJlbmNlLmpzJ1xuaW1wb3J0IHtsaW5rfSBmcm9tICcuL2xpbmsuanMnXG5pbXBvcnQge2xpc3RJdGVtfSBmcm9tICcuL2xpc3QtaXRlbS5qcydcbmltcG9ydCB7bGlzdH0gZnJvbSAnLi9saXN0LmpzJ1xuaW1wb3J0IHtwYXJhZ3JhcGh9IGZyb20gJy4vcGFyYWdyYXBoLmpzJ1xuaW1wb3J0IHtyb290fSBmcm9tICcuL3Jvb3QuanMnXG5pbXBvcnQge3N0cm9uZ30gZnJvbSAnLi9zdHJvbmcuanMnXG5pbXBvcnQge3RhYmxlfSBmcm9tICcuL3RhYmxlLmpzJ1xuaW1wb3J0IHt0YWJsZVJvd30gZnJvbSAnLi90YWJsZS1yb3cuanMnXG5pbXBvcnQge3RhYmxlQ2VsbH0gZnJvbSAnLi90YWJsZS1jZWxsLmpzJ1xuaW1wb3J0IHt0ZXh0fSBmcm9tICcuL3RleHQuanMnXG5pbXBvcnQge3RoZW1hdGljQnJlYWt9IGZyb20gJy4vdGhlbWF0aWMtYnJlYWsuanMnXG5cbi8qKlxuICogRGVmYXVsdCBoYW5kbGVycyBmb3Igbm9kZXMuXG4gKlxuICogQHNhdGlzZmllcyB7SGFuZGxlcnN9XG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVycyA9IHtcbiAgYmxvY2txdW90ZSxcbiAgYnJlYWs6IGhhcmRCcmVhayxcbiAgY29kZSxcbiAgZGVsZXRlOiBzdHJpa2V0aHJvdWdoLFxuICBlbXBoYXNpcyxcbiAgZm9vdG5vdGVSZWZlcmVuY2UsXG4gIGhlYWRpbmcsXG4gIGh0bWwsXG4gIGltYWdlUmVmZXJlbmNlLFxuICBpbWFnZSxcbiAgaW5saW5lQ29kZSxcbiAgbGlua1JlZmVyZW5jZSxcbiAgbGluayxcbiAgbGlzdEl0ZW0sXG4gIGxpc3QsXG4gIHBhcmFncmFwaCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogcm9vdCBpcyBkaWZmZXJlbnQsIGJ1dCBoYXJkIHRvIHR5cGUuXG4gIHJvb3QsXG4gIHN0cm9uZyxcbiAgdGFibGUsXG4gIHRhYmxlQ2VsbCxcbiAgdGFibGVSb3csXG4gIHRleHQsXG4gIHRoZW1hdGljQnJlYWssXG4gIHRvbWw6IGlnbm9yZSxcbiAgeWFtbDogaWdub3JlLFxuICBkZWZpbml0aW9uOiBpZ25vcmUsXG4gIGZvb3Rub3RlRGVmaW5pdGlvbjogaWdub3JlXG59XG5cbi8vIFJldHVybiBub3RoaW5nIGZvciBub2RlcyB0aGF0IGFyZSBpZ25vcmVkLlxuZnVuY3Rpb24gaWdub3JlKCkge1xuICByZXR1cm4gdW5kZWZpbmVkXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtFbGVtZW50Q29udGVudCwgRWxlbWVudH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICcuL3N0YXRlLmpzJ1xuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIEZvb3Rub3RlQmFja0NvbnRlbnRUZW1wbGF0ZVxuICogICBHZW5lcmF0ZSBjb250ZW50IGZvciB0aGUgYmFja3JlZmVyZW5jZSBkeW5hbWljYWxseS5cbiAqXG4gKiAgIEZvciB0aGUgZm9sbG93aW5nIG1hcmtkb3duOlxuICpcbiAqICAgYGBgbWFya2Rvd25cbiAqICAgQWxwaGFbXm1pY3JvbWFya10sIGJyYXZvW15taWNyb21hcmtdLCBhbmQgY2hhcmxpZVtecmVtYXJrXS5cbiAqXG4gKiAgIFtecmVtYXJrXTogdGhpbmdzIGFib3V0IHJlbWFya1xuICogICBbXm1pY3JvbWFya106IHRoaW5ncyBhYm91dCBtaWNyb21hcmtcbiAqICAgYGBgXG4gKlxuICogICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGg6XG4gKlxuICogICAqICBgMGAgYW5kIGAwYCBmb3IgdGhlIGJhY2tyZWZlcmVuY2UgZnJvbSBgdGhpbmdzIGFib3V0IG1pY3JvbWFya2AgdG9cbiAqICAgICAgYGFscGhhYCwgYXMgaXQgaXMgdGhlIGZpcnN0IHVzZWQgZGVmaW5pdGlvbiwgYW5kIHRoZSBmaXJzdCBjYWxsIHRvIGl0XG4gKiAgICogIGAwYCBhbmQgYDFgIGZvciB0aGUgYmFja3JlZmVyZW5jZSBmcm9tIGB0aGluZ3MgYWJvdXQgbWljcm9tYXJrYCB0b1xuICogICAgICBgYnJhdm9gLCBhcyBpdCBpcyB0aGUgZmlyc3QgdXNlZCBkZWZpbml0aW9uLCBhbmQgdGhlIHNlY29uZCBjYWxsIHRvIGl0XG4gKiAgICogIGAxYCBhbmQgYDBgIGZvciB0aGUgYmFja3JlZmVyZW5jZSBmcm9tIGB0aGluZ3MgYWJvdXQgcmVtYXJrYCB0b1xuICogICAgICBgY2hhcmxpZWAsIGFzIGl0IGlzIHRoZSBzZWNvbmQgdXNlZCBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gcmVmZXJlbmNlSW5kZXhcbiAqICAgSW5kZXggb2YgdGhlIGRlZmluaXRpb24gaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUgZmlyc3QgcmVmZXJlbmNlZCxcbiAqICAgMC1pbmRleGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IHJlcmVmZXJlbmNlSW5kZXhcbiAqICAgSW5kZXggb2YgY2FsbHMgdG8gdGhlIHNhbWUgZGVmaW5pdGlvbiwgMC1pbmRleGVkLlxuICogQHJldHVybnMge0FycmF5PEVsZW1lbnRDb250ZW50PiB8IEVsZW1lbnRDb250ZW50IHwgc3RyaW5nfVxuICogICBDb250ZW50IGZvciB0aGUgYmFja3JlZmVyZW5jZSB3aGVuIGxpbmtpbmcgYmFjayBmcm9tIGRlZmluaXRpb25zIHRvIHRoZWlyXG4gKiAgIHJlZmVyZW5jZS5cbiAqXG4gKiBAY2FsbGJhY2sgRm9vdG5vdGVCYWNrTGFiZWxUZW1wbGF0ZVxuICogICBHZW5lcmF0ZSBhIGJhY2sgbGFiZWwgZHluYW1pY2FsbHkuXG4gKlxuICogICBGb3IgdGhlIGZvbGxvd2luZyBtYXJrZG93bjpcbiAqXG4gKiAgIGBgYG1hcmtkb3duXG4gKiAgIEFscGhhW15taWNyb21hcmtdLCBicmF2b1tebWljcm9tYXJrXSwgYW5kIGNoYXJsaWVbXnJlbWFya10uXG4gKlxuICogICBbXnJlbWFya106IHRoaW5ncyBhYm91dCByZW1hcmtcbiAqICAgW15taWNyb21hcmtdOiB0aGluZ3MgYWJvdXQgbWljcm9tYXJrXG4gKiAgIGBgYFxuICpcbiAqICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoOlxuICpcbiAqICAgKiAgYDBgIGFuZCBgMGAgZm9yIHRoZSBiYWNrcmVmZXJlbmNlIGZyb20gYHRoaW5ncyBhYm91dCBtaWNyb21hcmtgIHRvXG4gKiAgICAgIGBhbHBoYWAsIGFzIGl0IGlzIHRoZSBmaXJzdCB1c2VkIGRlZmluaXRpb24sIGFuZCB0aGUgZmlyc3QgY2FsbCB0byBpdFxuICogICAqICBgMGAgYW5kIGAxYCBmb3IgdGhlIGJhY2tyZWZlcmVuY2UgZnJvbSBgdGhpbmdzIGFib3V0IG1pY3JvbWFya2AgdG9cbiAqICAgICAgYGJyYXZvYCwgYXMgaXQgaXMgdGhlIGZpcnN0IHVzZWQgZGVmaW5pdGlvbiwgYW5kIHRoZSBzZWNvbmQgY2FsbCB0byBpdFxuICogICAqICBgMWAgYW5kIGAwYCBmb3IgdGhlIGJhY2tyZWZlcmVuY2UgZnJvbSBgdGhpbmdzIGFib3V0IHJlbWFya2AgdG9cbiAqICAgICAgYGNoYXJsaWVgLCBhcyBpdCBpcyB0aGUgc2Vjb25kIHVzZWQgZGVmaW5pdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHJlZmVyZW5jZUluZGV4XG4gKiAgIEluZGV4IG9mIHRoZSBkZWZpbml0aW9uIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXJlIGZpcnN0IHJlZmVyZW5jZWQsXG4gKiAgIDAtaW5kZXhlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByZXJlZmVyZW5jZUluZGV4XG4gKiAgIEluZGV4IG9mIGNhbGxzIHRvIHRoZSBzYW1lIGRlZmluaXRpb24sIDAtaW5kZXhlZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIEJhY2sgbGFiZWwgdG8gdXNlIHdoZW4gbGlua2luZyBiYWNrIGZyb20gZGVmaW5pdGlvbnMgdG8gdGhlaXIgcmVmZXJlbmNlLlxuICovXG5cbmltcG9ydCBzdHJ1Y3R1cmVkQ2xvbmUgZnJvbSAnQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUnXG5pbXBvcnQge25vcm1hbGl6ZVVyaX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpJ1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBkZWZhdWx0IGNvbnRlbnQgdGhhdCBHaXRIdWIgdXNlcyBvbiBiYWNrcmVmZXJlbmNlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gX1xuICogICBJbmRleCBvZiB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IGFyZSBmaXJzdCByZWZlcmVuY2VkLFxuICogICAwLWluZGV4ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gcmVyZWZlcmVuY2VJbmRleFxuICogICBJbmRleCBvZiBjYWxscyB0byB0aGUgc2FtZSBkZWZpbml0aW9uLCAwLWluZGV4ZWQuXG4gKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudENvbnRlbnQ+fVxuICogICBDb250ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEZvb3Rub3RlQmFja0NvbnRlbnQoXywgcmVyZWZlcmVuY2VJbmRleCkge1xuICAvKiogQHR5cGUge0FycmF5PEVsZW1lbnRDb250ZW50Pn0gKi9cbiAgY29uc3QgcmVzdWx0ID0gW3t0eXBlOiAndGV4dCcsIHZhbHVlOiAnXHUyMUE5J31dXG5cbiAgaWYgKHJlcmVmZXJlbmNlSW5kZXggPiAxKSB7XG4gICAgcmVzdWx0LnB1c2goe1xuICAgICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgICAgdGFnTmFtZTogJ3N1cCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgIGNoaWxkcmVuOiBbe3R5cGU6ICd0ZXh0JywgdmFsdWU6IFN0cmluZyhyZXJlZmVyZW5jZUluZGV4KX1dXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgZGVmYXVsdCBsYWJlbCB0aGF0IEdpdEh1YiB1c2VzIG9uIGJhY2tyZWZlcmVuY2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWZlcmVuY2VJbmRleFxuICogICBJbmRleCBvZiB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IGFyZSBmaXJzdCByZWZlcmVuY2VkLFxuICogICAwLWluZGV4ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gcmVyZWZlcmVuY2VJbmRleFxuICogICBJbmRleCBvZiBjYWxscyB0byB0aGUgc2FtZSBkZWZpbml0aW9uLCAwLWluZGV4ZWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBMYWJlbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRGb290bm90ZUJhY2tMYWJlbChyZWZlcmVuY2VJbmRleCwgcmVyZWZlcmVuY2VJbmRleCkge1xuICByZXR1cm4gKFxuICAgICdCYWNrIHRvIHJlZmVyZW5jZSAnICtcbiAgICAocmVmZXJlbmNlSW5kZXggKyAxKSArXG4gICAgKHJlcmVmZXJlbmNlSW5kZXggPiAxID8gJy0nICsgcmVyZWZlcmVuY2VJbmRleCA6ICcnKVxuICApXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBoYXN0IGZvb3RlciBmb3IgY2FsbGVkIGZvb3Rub3RlIGRlZmluaXRpb25zLlxuICpcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZC5cbiAqIEByZXR1cm5zIHtFbGVtZW50IHwgdW5kZWZpbmVkfVxuICogICBgc2VjdGlvbmAgZWxlbWVudCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBmb290ZXIoc3RhdGUpIHtcbiAgY29uc3QgY2xvYmJlclByZWZpeCA9XG4gICAgdHlwZW9mIHN0YXRlLm9wdGlvbnMuY2xvYmJlclByZWZpeCA9PT0gJ3N0cmluZydcbiAgICAgID8gc3RhdGUub3B0aW9ucy5jbG9iYmVyUHJlZml4XG4gICAgICA6ICd1c2VyLWNvbnRlbnQtJ1xuICBjb25zdCBmb290bm90ZUJhY2tDb250ZW50ID1cbiAgICBzdGF0ZS5vcHRpb25zLmZvb3Rub3RlQmFja0NvbnRlbnQgfHwgZGVmYXVsdEZvb3Rub3RlQmFja0NvbnRlbnRcbiAgY29uc3QgZm9vdG5vdGVCYWNrTGFiZWwgPVxuICAgIHN0YXRlLm9wdGlvbnMuZm9vdG5vdGVCYWNrTGFiZWwgfHwgZGVmYXVsdEZvb3Rub3RlQmFja0xhYmVsXG4gIGNvbnN0IGZvb3Rub3RlTGFiZWwgPSBzdGF0ZS5vcHRpb25zLmZvb3Rub3RlTGFiZWwgfHwgJ0Zvb3Rub3RlcydcbiAgY29uc3QgZm9vdG5vdGVMYWJlbFRhZ05hbWUgPSBzdGF0ZS5vcHRpb25zLmZvb3Rub3RlTGFiZWxUYWdOYW1lIHx8ICdoMidcbiAgY29uc3QgZm9vdG5vdGVMYWJlbFByb3BlcnRpZXMgPSBzdGF0ZS5vcHRpb25zLmZvb3Rub3RlTGFiZWxQcm9wZXJ0aWVzIHx8IHtcbiAgICBjbGFzc05hbWU6IFsnc3Itb25seSddXG4gIH1cbiAgLyoqIEB0eXBlIHtBcnJheTxFbGVtZW50Q29udGVudD59ICovXG4gIGNvbnN0IGxpc3RJdGVtcyA9IFtdXG4gIGxldCByZWZlcmVuY2VJbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsrcmVmZXJlbmNlSW5kZXggPCBzdGF0ZS5mb290bm90ZU9yZGVyLmxlbmd0aCkge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBzdGF0ZS5mb290bm90ZUJ5SWQuZ2V0KFxuICAgICAgc3RhdGUuZm9vdG5vdGVPcmRlcltyZWZlcmVuY2VJbmRleF1cbiAgICApXG5cbiAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IHN0YXRlLmFsbChkZWZpbml0aW9uKVxuICAgIGNvbnN0IGlkID0gU3RyaW5nKGRlZmluaXRpb24uaWRlbnRpZmllcikudG9VcHBlckNhc2UoKVxuICAgIGNvbnN0IHNhZmVJZCA9IG5vcm1hbGl6ZVVyaShpZC50b0xvd2VyQ2FzZSgpKVxuICAgIGxldCByZXJlZmVyZW5jZUluZGV4ID0gMFxuICAgIC8qKiBAdHlwZSB7QXJyYXk8RWxlbWVudENvbnRlbnQ+fSAqL1xuICAgIGNvbnN0IGJhY2tSZWZlcmVuY2VzID0gW11cbiAgICBjb25zdCBjb3VudHMgPSBzdGF0ZS5mb290bm90ZUNvdW50cy5nZXQoaWQpXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgIHdoaWxlIChjb3VudHMgIT09IHVuZGVmaW5lZCAmJiArK3JlcmVmZXJlbmNlSW5kZXggPD0gY291bnRzKSB7XG4gICAgICBpZiAoYmFja1JlZmVyZW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBiYWNrUmVmZXJlbmNlcy5wdXNoKHt0eXBlOiAndGV4dCcsIHZhbHVlOiAnICd9KVxuICAgICAgfVxuXG4gICAgICBsZXQgY2hpbGRyZW4gPVxuICAgICAgICB0eXBlb2YgZm9vdG5vdGVCYWNrQ29udGVudCA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGZvb3Rub3RlQmFja0NvbnRlbnRcbiAgICAgICAgICA6IGZvb3Rub3RlQmFja0NvbnRlbnQocmVmZXJlbmNlSW5kZXgsIHJlcmVmZXJlbmNlSW5kZXgpXG5cbiAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNoaWxkcmVuID0ge3R5cGU6ICd0ZXh0JywgdmFsdWU6IGNoaWxkcmVufVxuICAgICAgfVxuXG4gICAgICBiYWNrUmVmZXJlbmNlcy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgICAgICB0YWdOYW1lOiAnYScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBocmVmOlxuICAgICAgICAgICAgJyMnICtcbiAgICAgICAgICAgIGNsb2JiZXJQcmVmaXggK1xuICAgICAgICAgICAgJ2ZucmVmLScgK1xuICAgICAgICAgICAgc2FmZUlkICtcbiAgICAgICAgICAgIChyZXJlZmVyZW5jZUluZGV4ID4gMSA/ICctJyArIHJlcmVmZXJlbmNlSW5kZXggOiAnJyksXG4gICAgICAgICAgZGF0YUZvb3Rub3RlQmFja3JlZjogJycsXG4gICAgICAgICAgYXJpYUxhYmVsOlxuICAgICAgICAgICAgdHlwZW9mIGZvb3Rub3RlQmFja0xhYmVsID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICA/IGZvb3Rub3RlQmFja0xhYmVsXG4gICAgICAgICAgICAgIDogZm9vdG5vdGVCYWNrTGFiZWwocmVmZXJlbmNlSW5kZXgsIHJlcmVmZXJlbmNlSW5kZXgpLFxuICAgICAgICAgIGNsYXNzTmFtZTogWydkYXRhLWZvb3Rub3RlLWJhY2tyZWYnXVxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogQXJyYXkuaXNBcnJheShjaGlsZHJlbikgPyBjaGlsZHJlbiA6IFtjaGlsZHJlbl1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgdGFpbCA9IGNvbnRlbnRbY29udGVudC5sZW5ndGggLSAxXVxuXG4gICAgaWYgKHRhaWwgJiYgdGFpbC50eXBlID09PSAnZWxlbWVudCcgJiYgdGFpbC50YWdOYW1lID09PSAncCcpIHtcbiAgICAgIGNvbnN0IHRhaWxUYWlsID0gdGFpbC5jaGlsZHJlblt0YWlsLmNoaWxkcmVuLmxlbmd0aCAtIDFdXG4gICAgICBpZiAodGFpbFRhaWwgJiYgdGFpbFRhaWwudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIHRhaWxUYWlsLnZhbHVlICs9ICcgJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFpbC5jaGlsZHJlbi5wdXNoKHt0eXBlOiAndGV4dCcsIHZhbHVlOiAnICd9KVxuICAgICAgfVxuXG4gICAgICB0YWlsLmNoaWxkcmVuLnB1c2goLi4uYmFja1JlZmVyZW5jZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQucHVzaCguLi5iYWNrUmVmZXJlbmNlcylcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0VsZW1lbnR9ICovXG4gICAgY29uc3QgbGlzdEl0ZW0gPSB7XG4gICAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgICB0YWdOYW1lOiAnbGknLFxuICAgICAgcHJvcGVydGllczoge2lkOiBjbG9iYmVyUHJlZml4ICsgJ2ZuLScgKyBzYWZlSWR9LFxuICAgICAgY2hpbGRyZW46IHN0YXRlLndyYXAoY29udGVudCwgdHJ1ZSlcbiAgICB9XG5cbiAgICBzdGF0ZS5wYXRjaChkZWZpbml0aW9uLCBsaXN0SXRlbSlcblxuICAgIGxpc3RJdGVtcy5wdXNoKGxpc3RJdGVtKVxuICB9XG5cbiAgaWYgKGxpc3RJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgIHRhZ05hbWU6ICdzZWN0aW9uJyxcbiAgICBwcm9wZXJ0aWVzOiB7ZGF0YUZvb3Rub3RlczogdHJ1ZSwgY2xhc3NOYW1lOiBbJ2Zvb3Rub3RlcyddfSxcbiAgICBjaGlsZHJlbjogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgICAgIHRhZ05hbWU6IGZvb3Rub3RlTGFiZWxUYWdOYW1lLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uc3RydWN0dXJlZENsb25lKGZvb3Rub3RlTGFiZWxQcm9wZXJ0aWVzKSxcbiAgICAgICAgICBpZDogJ2Zvb3Rub3RlLWxhYmVsJ1xuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW3t0eXBlOiAndGV4dCcsIHZhbHVlOiBmb290bm90ZUxhYmVsfV1cbiAgICAgIH0sXG4gICAgICB7dHlwZTogJ3RleHQnLCB2YWx1ZTogJ1xcbid9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgICAgIHRhZ05hbWU6ICdvbCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICBjaGlsZHJlbjogc3RhdGUud3JhcChsaXN0SXRlbXMsIHRydWUpXG4gICAgICB9LFxuICAgICAge3R5cGU6ICd0ZXh0JywgdmFsdWU6ICdcXG4nfVxuICAgIF1cbiAgfVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7XG4gKiAgIEVsZW1lbnRDb250ZW50IGFzIEhhc3RFbGVtZW50Q29udGVudCxcbiAqICAgRWxlbWVudCBhcyBIYXN0RWxlbWVudCxcbiAqICAgTm9kZXMgYXMgSGFzdE5vZGVzLFxuICogICBQcm9wZXJ0aWVzIGFzIEhhc3RQcm9wZXJ0aWVzLFxuICogICBSb290Q29udGVudCBhcyBIYXN0Um9vdENvbnRlbnQsXG4gKiAgIFRleHQgYXMgSGFzdFRleHRcbiAqIH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1xuICogICBEZWZpbml0aW9uIGFzIE1kYXN0RGVmaW5pdGlvbixcbiAqICAgRm9vdG5vdGVEZWZpbml0aW9uIGFzIE1kYXN0Rm9vdG5vdGVEZWZpbml0aW9uLFxuICogICBOb2RlcyBhcyBNZGFzdE5vZGVzLFxuICogICBQYXJlbnRzIGFzIE1kYXN0UGFyZW50c1xuICogfSBmcm9tICdtZGFzdCdcbiAqIEBpbXBvcnQge1ZGaWxlfSBmcm9tICd2ZmlsZSdcbiAqIEBpbXBvcnQge1xuICogICBGb290bm90ZUJhY2tDb250ZW50VGVtcGxhdGUsXG4gKiAgIEZvb3Rub3RlQmFja0xhYmVsVGVtcGxhdGVcbiAqIH0gZnJvbSAnLi9mb290ZXIuanMnXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgSGFuZGxlclxuICogICBIYW5kbGUgYSBub2RlLlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHthbnl9IG5vZGVcbiAqICAgbWRhc3Qgbm9kZSB0byBoYW5kbGUuXG4gKiBAcGFyYW0ge01kYXN0UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBgbm9kZWAuXG4gKiBAcmV0dXJucyB7QXJyYXk8SGFzdEVsZW1lbnRDb250ZW50PiB8IEhhc3RFbGVtZW50Q29udGVudCB8IHVuZGVmaW5lZH1cbiAqICAgaGFzdCBub2RlLlxuICpcbiAqIEB0eXBlZGVmIHtQYXJ0aWFsPFJlY29yZDxNZGFzdE5vZGVzWyd0eXBlJ10sIEhhbmRsZXI+Pn0gSGFuZGxlcnNcbiAqICAgSGFuZGxlIG5vZGVzLlxuICpcbiAqIEB0eXBlZGVmIE9wdGlvbnNcbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2FsbG93RGFuZ2Vyb3VzSHRtbD1mYWxzZV1cbiAqICAgV2hldGhlciB0byBwZXJzaXN0IHJhdyBIVE1MIGluIG1hcmtkb3duIGluIHRoZSBoYXN0IHRyZWUgKGRlZmF1bHQ6XG4gKiAgIGBmYWxzZWApLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbY2xvYmJlclByZWZpeD0ndXNlci1jb250ZW50LSddXG4gKiAgIFByZWZpeCB0byB1c2UgYmVmb3JlIHRoZSBgaWRgIHByb3BlcnR5IG9uIGZvb3Rub3RlcyB0byBwcmV2ZW50IHRoZW0gZnJvbVxuICogICAqY2xvYmJlcmluZyogKGRlZmF1bHQ6IGAndXNlci1jb250ZW50LSdgKS5cbiAqXG4gKiAgIFBhc3MgYCcnYCBmb3IgdHJ1c3RlZCBtYXJrZG93biBhbmQgd2hlbiB5b3UgYXJlIGNhcmVmdWwgd2l0aFxuICogICBwb2x5ZmlsbGluZy5cbiAqICAgWW91IGNvdWxkIHBhc3MgYSBkaWZmZXJlbnQgcHJlZml4LlxuICpcbiAqICAgRE9NIGNsb2JiZXJpbmcgaXMgdGhpczpcbiAqXG4gKiAgIGBgYGh0bWxcbiAqICAgPHAgaWQ9XCJ4XCI+PC9wPlxuICogICA8c2NyaXB0PmFsZXJ0KHgpIC8vIGB4YCBub3cgcmVmZXJzIHRvIHRoZSBgcCN4YCBET00gZWxlbWVudDwvc2NyaXB0PlxuICogICBgYGBcbiAqXG4gKiAgIFRoZSBhYm92ZSBleGFtcGxlIHNob3dzIHRoYXQgZWxlbWVudHMgYXJlIG1hZGUgYXZhaWxhYmxlIGJ5IGJyb3dzZXJzLCBieVxuICogICB0aGVpciBJRCwgb24gdGhlIGB3aW5kb3dgIG9iamVjdC5cbiAqICAgVGhpcyBpcyBhIHNlY3VyaXR5IHJpc2sgYmVjYXVzZSB5b3UgbWlnaHQgYmUgZXhwZWN0aW5nIHNvbWUgb3RoZXIgdmFyaWFibGVcbiAqICAgYXQgdGhhdCBwbGFjZS5cbiAqICAgSXQgY2FuIGFsc28gYnJlYWsgcG9seWZpbGxzLlxuICogICBVc2luZyBhIHByZWZpeCBzb2x2ZXMgdGhlc2UgcHJvYmxlbXMuXG4gKiBAcHJvcGVydHkge1ZGaWxlIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2ZpbGVdXG4gKiAgIENvcnJlc3BvbmRpbmcgdmlydHVhbCBmaWxlIHJlcHJlc2VudGluZyB0aGUgaW5wdXQgZG9jdW1lbnQgKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSB7Rm9vdG5vdGVCYWNrQ29udGVudFRlbXBsYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2Zvb3Rub3RlQmFja0NvbnRlbnRdXG4gKiAgIENvbnRlbnQgb2YgdGhlIGJhY2tyZWZlcmVuY2UgYmFjayB0byByZWZlcmVuY2VzIChkZWZhdWx0OiBgZGVmYXVsdEZvb3Rub3RlQmFja0NvbnRlbnRgKS5cbiAqXG4gKiAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzOlxuICpcbiAqICAgYGBganNcbiAqICAgZnVuY3Rpb24gZGVmYXVsdEZvb3Rub3RlQmFja0NvbnRlbnQoXywgcmVyZWZlcmVuY2VJbmRleCkge1xuICogICAgIGNvbnN0IHJlc3VsdCA9IFt7dHlwZTogJ3RleHQnLCB2YWx1ZTogJ1x1MjFBOSd9XVxuICpcbiAqICAgICBpZiAocmVyZWZlcmVuY2VJbmRleCA+IDEpIHtcbiAqICAgICAgIHJlc3VsdC5wdXNoKHtcbiAqICAgICAgICAgdHlwZTogJ2VsZW1lbnQnLFxuICogICAgICAgICB0YWdOYW1lOiAnc3VwJyxcbiAqICAgICAgICAgcHJvcGVydGllczoge30sXG4gKiAgICAgICAgIGNoaWxkcmVuOiBbe3R5cGU6ICd0ZXh0JywgdmFsdWU6IFN0cmluZyhyZXJlZmVyZW5jZUluZGV4KX1dXG4gKiAgICAgICB9KVxuICogICAgIH1cbiAqXG4gKiAgICAgcmV0dXJuIHJlc3VsdFxuICogICB9XG4gKiAgIGBgYFxuICpcbiAqICAgVGhpcyBjb250ZW50IGlzIHVzZWQgaW4gdGhlIGBhYCBlbGVtZW50IG9mIGVhY2ggYmFja3JlZmVyZW5jZSAodGhlIGBcdTIxQTlgXG4gKiAgIGxpbmtzKS5cbiAqIEBwcm9wZXJ0eSB7Rm9vdG5vdGVCYWNrTGFiZWxUZW1wbGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtmb290bm90ZUJhY2tMYWJlbF1cbiAqICAgTGFiZWwgdG8gZGVzY3JpYmUgdGhlIGJhY2tyZWZlcmVuY2UgYmFjayB0byByZWZlcmVuY2VzIChkZWZhdWx0OlxuICogICBgZGVmYXVsdEZvb3Rub3RlQmFja0xhYmVsYCkuXG4gKlxuICogICBUaGUgZGVmYXVsdCB2YWx1ZSBpczpcbiAqXG4gKiAgIGBgYGpzXG4gKiAgIGZ1bmN0aW9uIGRlZmF1bHRGb290bm90ZUJhY2tMYWJlbChyZWZlcmVuY2VJbmRleCwgcmVyZWZlcmVuY2VJbmRleCkge1xuICogICAgcmV0dXJuIChcbiAqICAgICAgJ0JhY2sgdG8gcmVmZXJlbmNlICcgK1xuICogICAgICAocmVmZXJlbmNlSW5kZXggKyAxKSArXG4gKiAgICAgIChyZXJlZmVyZW5jZUluZGV4ID4gMSA/ICctJyArIHJlcmVmZXJlbmNlSW5kZXggOiAnJylcbiAqICAgIClcbiAqICAgfVxuICogICBgYGBcbiAqXG4gKiAgIENoYW5nZSBpdCB3aGVuIHRoZSBtYXJrZG93biBpcyBub3QgaW4gRW5nbGlzaC5cbiAqXG4gKiAgIFRoaXMgbGFiZWwgaXMgdXNlZCBpbiB0aGUgYGFyaWFMYWJlbGAgcHJvcGVydHkgb24gZWFjaCBiYWNrcmVmZXJlbmNlXG4gKiAgICh0aGUgYFx1MjFBOWAgbGlua3MpLlxuICogICBJdCBhZmZlY3RzIHVzZXJzIG9mIGFzc2lzdGl2ZSB0ZWNobm9sb2d5LlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbZm9vdG5vdGVMYWJlbD0nRm9vdG5vdGVzJ11cbiAqICAgVGV4dHVhbCBsYWJlbCB0byB1c2UgZm9yIHRoZSBmb290bm90ZXMgc2VjdGlvbiAoZGVmYXVsdDogYCdGb290bm90ZXMnYCkuXG4gKlxuICogICBDaGFuZ2UgaXQgd2hlbiB0aGUgbWFya2Rvd24gaXMgbm90IGluIEVuZ2xpc2guXG4gKlxuICogICBUaGlzIGxhYmVsIGlzIHR5cGljYWxseSBoaWRkZW4gdmlzdWFsbHkgKGFzc3VtaW5nIGEgYHNyLW9ubHlgIENTUyBjbGFzc1xuICogICBpcyBkZWZpbmVkIHRoYXQgZG9lcyB0aGF0KSBhbmQgc28gYWZmZWN0cyBzY3JlZW4gcmVhZGVycyBvbmx5LlxuICogICBJZiB5b3UgZG8gaGF2ZSBzdWNoIGEgY2xhc3MsIGJ1dCB3YW50IHRvIHNob3cgdGhpcyBzZWN0aW9uIHRvIGV2ZXJ5b25lLFxuICogICBwYXNzIGRpZmZlcmVudCBwcm9wZXJ0aWVzIHdpdGggdGhlIGBmb290bm90ZUxhYmVsUHJvcGVydGllc2Agb3B0aW9uLlxuICogQHByb3BlcnR5IHtIYXN0UHJvcGVydGllcyB8IG51bGwgfCB1bmRlZmluZWR9IFtmb290bm90ZUxhYmVsUHJvcGVydGllcz17Y2xhc3NOYW1lOiBbJ3NyLW9ubHknXX1dXG4gKiAgIFByb3BlcnRpZXMgdG8gdXNlIG9uIHRoZSBmb290bm90ZSBsYWJlbCAoZGVmYXVsdDogYHtjbGFzc05hbWU6XG4gKiAgIFsnc3Itb25seSddfWApLlxuICpcbiAqICAgQ2hhbmdlIGl0IHRvIHNob3cgdGhlIGxhYmVsIGFuZCBhZGQgb3RoZXIgcHJvcGVydGllcy5cbiAqXG4gKiAgIFRoaXMgbGFiZWwgaXMgdHlwaWNhbGx5IGhpZGRlbiB2aXN1YWxseSAoYXNzdW1pbmcgYW4gYHNyLW9ubHlgIENTUyBjbGFzc1xuICogICBpcyBkZWZpbmVkIHRoYXQgZG9lcyB0aGF0KSBhbmQgc28gYWZmZWN0cyBzY3JlZW4gcmVhZGVycyBvbmx5LlxuICogICBJZiB5b3UgZG8gaGF2ZSBzdWNoIGEgY2xhc3MsIGJ1dCB3YW50IHRvIHNob3cgdGhpcyBzZWN0aW9uIHRvIGV2ZXJ5b25lLFxuICogICBwYXNzIGFuIGVtcHR5IHN0cmluZy5cbiAqICAgWW91IGNhbiBhbHNvIGFkZCBkaWZmZXJlbnQgcHJvcGVydGllcy5cbiAqXG4gKiAgID4gKipOb3RlKio6IGBpZDogJ2Zvb3Rub3RlLWxhYmVsJ2AgaXMgYWx3YXlzIGFkZGVkLCBiZWNhdXNlIGZvb3Rub3RlXG4gKiAgID4gY2FsbHMgdXNlIGl0IHdpdGggYGFyaWEtZGVzY3JpYmVkYnlgIHRvIHByb3ZpZGUgYW4gYWNjZXNzaWJsZSBsYWJlbC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2Zvb3Rub3RlTGFiZWxUYWdOYW1lPSdoMiddXG4gKiAgIEhUTUwgdGFnIG5hbWUgdG8gdXNlIGZvciB0aGUgZm9vdG5vdGUgbGFiZWwgZWxlbWVudCAoZGVmYXVsdDogYCdoMidgKS5cbiAqXG4gKiAgIENoYW5nZSBpdCB0byBtYXRjaCB5b3VyIGRvY3VtZW50IHN0cnVjdHVyZS5cbiAqXG4gKiAgIFRoaXMgbGFiZWwgaXMgdHlwaWNhbGx5IGhpZGRlbiB2aXN1YWxseSAoYXNzdW1pbmcgYSBgc3Itb25seWAgQ1NTIGNsYXNzXG4gKiAgIGlzIGRlZmluZWQgdGhhdCBkb2VzIHRoYXQpIGFuZCBzbyBhZmZlY3RzIHNjcmVlbiByZWFkZXJzIG9ubHkuXG4gKiAgIElmIHlvdSBkbyBoYXZlIHN1Y2ggYSBjbGFzcywgYnV0IHdhbnQgdG8gc2hvdyB0aGlzIHNlY3Rpb24gdG8gZXZlcnlvbmUsXG4gKiAgIHBhc3MgZGlmZmVyZW50IHByb3BlcnRpZXMgd2l0aCB0aGUgYGZvb3Rub3RlTGFiZWxQcm9wZXJ0aWVzYCBvcHRpb24uXG4gKiBAcHJvcGVydHkge0hhbmRsZXJzIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2hhbmRsZXJzXVxuICogICBFeHRyYSBoYW5kbGVycyBmb3Igbm9kZXMgKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8TWRhc3ROb2Rlc1sndHlwZSddPiB8IG51bGwgfCB1bmRlZmluZWR9IFtwYXNzVGhyb3VnaF1cbiAqICAgTGlzdCBvZiBjdXN0b20gbWRhc3Qgbm9kZSB0eXBlcyB0byBwYXNzIHRocm91Z2ggKGtlZXApIGluIGhhc3QgKG5vdGUgdGhhdFxuICogICB0aGUgbm9kZSBpdHNlbGYgaXMgcGFzc2VkLCBidXQgZXZlbnR1YWwgY2hpbGRyZW4gYXJlIHRyYW5zZm9ybWVkKVxuICogICAob3B0aW9uYWwpLlxuICogQHByb3BlcnR5IHtIYW5kbGVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3Vua25vd25IYW5kbGVyXVxuICogICBIYW5kbGVyIGZvciBhbGwgdW5rbm93biBub2RlcyAob3B0aW9uYWwpLlxuICpcbiAqIEB0eXBlZGVmIFN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZC5cbiAqIEBwcm9wZXJ0eSB7KG5vZGU6IE1kYXN0Tm9kZXMpID0+IEFycmF5PEhhc3RFbGVtZW50Q29udGVudD59IGFsbFxuICogICBUcmFuc2Zvcm0gdGhlIGNoaWxkcmVuIG9mIGFuIG1kYXN0IHBhcmVudCB0byBoYXN0LlxuICogQHByb3BlcnR5IHs8VHlwZSBleHRlbmRzIEhhc3ROb2Rlcz4oZnJvbTogTWRhc3ROb2RlcywgdG86IFR5cGUpID0+IEhhc3RFbGVtZW50IHwgVHlwZX0gYXBwbHlEYXRhXG4gKiAgIEhvbm9yIHRoZSBgZGF0YWAgb2YgYGZyb21gLCBhbmQgZ2VuZXJhdGUgYW4gZWxlbWVudCBpbnN0ZWFkIG9mIGBub2RlYC5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgTWRhc3REZWZpbml0aW9uPn0gZGVmaW5pdGlvbkJ5SWRcbiAqICAgRGVmaW5pdGlvbnMgYnkgdGhlaXIgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgTWRhc3RGb290bm90ZURlZmluaXRpb24+fSBmb290bm90ZUJ5SWRcbiAqICAgRm9vdG5vdGUgZGVmaW5pdGlvbnMgYnkgdGhlaXIgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgbnVtYmVyPn0gZm9vdG5vdGVDb3VudHNcbiAqICAgQ291bnRzIGZvciBob3cgb2Z0ZW4gdGhlIHNhbWUgZm9vdG5vdGUgd2FzIGNhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gZm9vdG5vdGVPcmRlclxuICogICBJZGVudGlmaWVycyBvZiBvcmRlciB3aGVuIGZvb3Rub3RlIGNhbGxzIGZpcnN0IGFwcGVhciBpbiB0cmVlIG9yZGVyLlxuICogQHByb3BlcnR5IHtIYW5kbGVyc30gaGFuZGxlcnNcbiAqICAgQXBwbGllZCBoYW5kbGVycy5cbiAqIEBwcm9wZXJ0eSB7KG5vZGU6IE1kYXN0Tm9kZXMsIHBhcmVudDogTWRhc3RQYXJlbnRzIHwgdW5kZWZpbmVkKSA9PiBBcnJheTxIYXN0RWxlbWVudENvbnRlbnQ+IHwgSGFzdEVsZW1lbnRDb250ZW50IHwgdW5kZWZpbmVkfSBvbmVcbiAqICAgVHJhbnNmb3JtIGFuIG1kYXN0IG5vZGUgdG8gaGFzdC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9uc30gb3B0aW9uc1xuICogICBDb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHsoZnJvbTogTWRhc3ROb2Rlcywgbm9kZTogSGFzdE5vZGVzKSA9PiB1bmRlZmluZWR9IHBhdGNoXG4gKiAgIENvcHkgYSBub2RlXHUyMDE5cyBwb3NpdGlvbmFsIGluZm8uXG4gKiBAcHJvcGVydHkgezxUeXBlIGV4dGVuZHMgSGFzdFJvb3RDb250ZW50Pihub2RlczogQXJyYXk8VHlwZT4sIGxvb3NlPzogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gQXJyYXk8SGFzdFRleHQgfCBUeXBlPn0gd3JhcFxuICogICBXcmFwIGBub2Rlc2Agd2l0aCBsaW5lIGVuZGluZ3MgYmV0d2VlbiBlYWNoIG5vZGUsIGFkZHMgaW5pdGlhbC9maW5hbCBsaW5lIGVuZGluZ3Mgd2hlbiBgbG9vc2VgLlxuICovXG5cbmltcG9ydCBzdHJ1Y3R1cmVkQ2xvbmUgZnJvbSAnQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUnXG5pbXBvcnQge3Zpc2l0fSBmcm9tICd1bmlzdC11dGlsLXZpc2l0J1xuaW1wb3J0IHtwb3NpdGlvbn0gZnJvbSAndW5pc3QtdXRpbC1wb3NpdGlvbidcbmltcG9ydCB7aGFuZGxlcnMgYXMgZGVmYXVsdEhhbmRsZXJzfSBmcm9tICcuL2hhbmRsZXJzL2luZGV4LmpzJ1xuXG5jb25zdCBvd24gPSB7fS5oYXNPd25Qcm9wZXJ0eVxuXG4vKiogQHR5cGUge09wdGlvbnN9ICovXG5jb25zdCBlbXB0eU9wdGlvbnMgPSB7fVxuXG4vKipcbiAqIENyZWF0ZSBgc3RhdGVgIGZyb20gYW4gbWRhc3QgdHJlZS5cbiAqXG4gKiBAcGFyYW0ge01kYXN0Tm9kZXN9IHRyZWVcbiAqICAgbWRhc3Qgbm9kZSB0byB0cmFuc2Zvcm0uXG4gKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICogQHJldHVybnMge1N0YXRlfVxuICogICBgc3RhdGVgIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RhdGUodHJlZSwgb3B0aW9ucykge1xuICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgTWRhc3REZWZpbml0aW9uPn0gKi9cbiAgY29uc3QgZGVmaW5pdGlvbkJ5SWQgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBNZGFzdEZvb3Rub3RlRGVmaW5pdGlvbj59ICovXG4gIGNvbnN0IGZvb3Rub3RlQnlJZCA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIG51bWJlcj59ICovXG4gIGNvbnN0IGZvb3Rub3RlQ291bnRzID0gbmV3IE1hcCgpXG4gIC8qKiBAdHlwZSB7SGFuZGxlcnN9ICovXG4gIC8vIEB0cy1leHBlY3QtZXJyb3I6IHRoZSByb290IGhhbmRsZXIgcmV0dXJucyBhIHJvb3QuXG4gIC8vIEhhcmQgdG8gdHlwZS5cbiAgY29uc3QgaGFuZGxlcnMgPSB7Li4uZGVmYXVsdEhhbmRsZXJzLCAuLi5zZXR0aW5ncy5oYW5kbGVyc31cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBhbGwsXG4gICAgYXBwbHlEYXRhLFxuICAgIGRlZmluaXRpb25CeUlkLFxuICAgIGZvb3Rub3RlQnlJZCxcbiAgICBmb290bm90ZUNvdW50cyxcbiAgICBmb290bm90ZU9yZGVyOiBbXSxcbiAgICBoYW5kbGVycyxcbiAgICBvbmUsXG4gICAgb3B0aW9uczogc2V0dGluZ3MsXG4gICAgcGF0Y2gsXG4gICAgd3JhcFxuICB9XG5cbiAgdmlzaXQodHJlZSwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAnZGVmaW5pdGlvbicgfHwgbm9kZS50eXBlID09PSAnZm9vdG5vdGVEZWZpbml0aW9uJykge1xuICAgICAgY29uc3QgbWFwID0gbm9kZS50eXBlID09PSAnZGVmaW5pdGlvbicgPyBkZWZpbml0aW9uQnlJZCA6IGZvb3Rub3RlQnlJZFxuICAgICAgY29uc3QgaWQgPSBTdHJpbmcobm9kZS5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpXG5cbiAgICAgIC8vIE1pbWljayBDTSBiZWhhdmlvciBvZiBsaW5rIGRlZmluaXRpb25zLlxuICAgICAgLy8gU2VlOiA8aHR0cHM6Ly9naXRodWIuY29tL3N5bnRheC10cmVlL21kYXN0LXV0aWwtZGVmaW5pdGlvbnMvYmxvYi85MDMyMTg5L2xpYi9pbmRleC5qcyNMMjAtTDIxPi5cbiAgICAgIGlmICghbWFwLmhhcyhpZCkpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbm9kZSB0eXBlIG1hdGNoZXMgbWFwLlxuICAgICAgICBtYXAuc2V0KGlkLCBub2RlKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gc3RhdGVcblxuICAvKipcbiAgICogVHJhbnNmb3JtIGFuIG1kYXN0IG5vZGUgaW50byBhIGhhc3Qgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtNZGFzdE5vZGVzfSBub2RlXG4gICAqICAgbWRhc3Qgbm9kZS5cbiAgICogQHBhcmFtIHtNZGFzdFBhcmVudHMgfCB1bmRlZmluZWR9IFtwYXJlbnRdXG4gICAqICAgUGFyZW50IG9mIGBub2RlYC5cbiAgICogQHJldHVybnMge0FycmF5PEhhc3RFbGVtZW50Q29udGVudD4gfCBIYXN0RWxlbWVudENvbnRlbnQgfCB1bmRlZmluZWR9XG4gICAqICAgUmVzdWx0aW5nIGhhc3Qgbm9kZS5cbiAgICovXG4gIGZ1bmN0aW9uIG9uZShub2RlLCBwYXJlbnQpIHtcbiAgICBjb25zdCB0eXBlID0gbm9kZS50eXBlXG4gICAgY29uc3QgaGFuZGxlID0gc3RhdGUuaGFuZGxlcnNbdHlwZV1cblxuICAgIGlmIChvd24uY2FsbChzdGF0ZS5oYW5kbGVycywgdHlwZSkgJiYgaGFuZGxlKSB7XG4gICAgICByZXR1cm4gaGFuZGxlKHN0YXRlLCBub2RlLCBwYXJlbnQpXG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLm9wdGlvbnMucGFzc1Rocm91Z2ggJiYgc3RhdGUub3B0aW9ucy5wYXNzVGhyb3VnaC5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgaWYgKCdjaGlsZHJlbicgaW4gbm9kZSkge1xuICAgICAgICBjb25zdCB7Y2hpbGRyZW4sIC4uLnNoYWxsb3d9ID0gbm9kZVxuICAgICAgICBjb25zdCByZXN1bHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoc2hhbGxvdylcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgZG9lc25cdTIwMTl0IHVuZGVyc3RhbmRcdTIwMjZcbiAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gc3RhdGUuYWxsKG5vZGUpXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IFRTIGRvZXNuXHUyMDE5dCB1bmRlcnN0YW5kXHUyMDI2XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogaXRcdTIwMTlzIGN1c3RvbS5cbiAgICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUobm9kZSlcbiAgICB9XG5cbiAgICBjb25zdCB1bmtub3duID0gc3RhdGUub3B0aW9ucy51bmtub3duSGFuZGxlciB8fCBkZWZhdWx0VW5rbm93bkhhbmRsZXJcblxuICAgIHJldHVybiB1bmtub3duKHN0YXRlLCBub2RlLCBwYXJlbnQpXG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRoZSBjaGlsZHJlbiBvZiBhbiBtZGFzdCBub2RlIGludG8gaGFzdCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtNZGFzdE5vZGVzfSBwYXJlbnRcbiAgICogICBtZGFzdCBub2RlIHRvIGNvbXBpbGVcbiAgICogQHJldHVybnMge0FycmF5PEhhc3RFbGVtZW50Q29udGVudD59XG4gICAqICAgUmVzdWx0aW5nIGhhc3Qgbm9kZXMuXG4gICAqL1xuICBmdW5jdGlvbiBhbGwocGFyZW50KSB7XG4gICAgLyoqIEB0eXBlIHtBcnJheTxIYXN0RWxlbWVudENvbnRlbnQ+fSAqL1xuICAgIGNvbnN0IHZhbHVlcyA9IFtdXG5cbiAgICBpZiAoJ2NoaWxkcmVuJyBpbiBwYXJlbnQpIHtcbiAgICAgIGNvbnN0IG5vZGVzID0gcGFyZW50LmNoaWxkcmVuXG4gICAgICBsZXQgaW5kZXggPSAtMVxuICAgICAgd2hpbGUgKCsraW5kZXggPCBub2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RhdGUub25lKG5vZGVzW2luZGV4XSwgcGFyZW50KVxuXG4gICAgICAgIC8vIFRvIGRvOiBzZWUgaWYgd2UgdmFuIGNsZWFuIHRoaXM/IENhbiB3ZSBtZXJnZSB0ZXh0cz9cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIGlmIChpbmRleCAmJiBub2Rlc1tpbmRleCAtIDFdLnR5cGUgPT09ICdicmVhaycpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlID0gdHJpbU1hcmtkb3duU3BhY2VTdGFydChyZXN1bHQudmFsdWUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC50eXBlID09PSAnZWxlbWVudCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgaGVhZCA9IHJlc3VsdC5jaGlsZHJlblswXVxuXG4gICAgICAgICAgICAgIGlmIChoZWFkICYmIGhlYWQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgaGVhZC52YWx1ZSA9IHRyaW1NYXJrZG93blNwYWNlU3RhcnQoaGVhZC52YWx1ZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKC4uLnJlc3VsdClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2gocmVzdWx0KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXNcbiAgfVxufVxuXG4vKipcbiAqIENvcHkgYSBub2RlXHUyMDE5cyBwb3NpdGlvbmFsIGluZm8uXG4gKlxuICogQHBhcmFtIHtNZGFzdE5vZGVzfSBmcm9tXG4gKiAgIG1kYXN0IG5vZGUgdG8gY29weSBmcm9tLlxuICogQHBhcmFtIHtIYXN0Tm9kZXN9IHRvXG4gKiAgIGhhc3Qgbm9kZSB0byBjb3B5IGludG8uXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogICBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBwYXRjaChmcm9tLCB0bykge1xuICBpZiAoZnJvbS5wb3NpdGlvbikgdG8ucG9zaXRpb24gPSBwb3NpdGlvbihmcm9tKVxufVxuXG4vKipcbiAqIEhvbm9yIHRoZSBgZGF0YWAgb2YgYGZyb21gIGFuZCBtYXliZSBnZW5lcmF0ZSBhbiBlbGVtZW50IGluc3RlYWQgb2YgYHRvYC5cbiAqXG4gKiBAdGVtcGxhdGUge0hhc3ROb2Rlc30gVHlwZVxuICogICBOb2RlIHR5cGUuXG4gKiBAcGFyYW0ge01kYXN0Tm9kZXN9IGZyb21cbiAqICAgbWRhc3Qgbm9kZSB0byB1c2UgZGF0YSBmcm9tLlxuICogQHBhcmFtIHtUeXBlfSB0b1xuICogICBoYXN0IG5vZGUgdG8gY2hhbmdlLlxuICogQHJldHVybnMge0hhc3RFbGVtZW50IHwgVHlwZX1cbiAqICAgTm90aGluZy5cbiAqL1xuZnVuY3Rpb24gYXBwbHlEYXRhKGZyb20sIHRvKSB7XG4gIC8qKiBAdHlwZSB7SGFzdEVsZW1lbnQgfCBUeXBlfSAqL1xuICBsZXQgcmVzdWx0ID0gdG9cblxuICAvLyBIYW5kbGUgYGRhdGEuaE5hbWVgLCBgZGF0YS5oUHJvcGVydGllcywgYGRhdGEuaENoaWxkcmVuYC5cbiAgaWYgKGZyb20gJiYgZnJvbS5kYXRhKSB7XG4gICAgY29uc3QgaE5hbWUgPSBmcm9tLmRhdGEuaE5hbWVcbiAgICBjb25zdCBoQ2hpbGRyZW4gPSBmcm9tLmRhdGEuaENoaWxkcmVuXG4gICAgY29uc3QgaFByb3BlcnRpZXMgPSBmcm9tLmRhdGEuaFByb3BlcnRpZXNcblxuICAgIGlmICh0eXBlb2YgaE5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUcmFuc2Zvcm1pbmcgdGhlIG5vZGUgcmVzdWx0ZWQgaW4gYW4gZWxlbWVudCB3aXRoIGEgZGlmZmVyZW50IG5hbWVcbiAgICAgIC8vIHRoYW4gd2FudGVkOlxuICAgICAgaWYgKHJlc3VsdC50eXBlID09PSAnZWxlbWVudCcpIHtcbiAgICAgICAgcmVzdWx0LnRhZ05hbWUgPSBoTmFtZVxuICAgICAgfVxuICAgICAgLy8gVHJhbnNmb3JtaW5nIHRoZSBub2RlIHJlc3VsdGVkIGluIGEgbm9uLWVsZW1lbnQsIHdoaWNoIGhhcHBlbnMgZm9yXG4gICAgICAvLyByYXcsIHRleHQsIGFuZCByb290IG5vZGVzICh1bmxlc3MgY3VzdG9tIGhhbmRsZXJzIGFyZSBwYXNzZWQpLlxuICAgICAgLy8gVGhlIGludGVudCBvZiBgaE5hbWVgIGlzIHRvIGNyZWF0ZSBhbiBlbGVtZW50LCBidXQgbGlrZWx5IGFsc28gdG8ga2VlcFxuICAgICAgLy8gdGhlIGNvbnRlbnQgYXJvdW5kIChvdGhlcndpc2U6IHBhc3MgYGhDaGlsZHJlbmApLlxuICAgICAgZWxzZSB7XG4gICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8SGFzdEVsZW1lbnRDb250ZW50Pn0gKi9cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYXNzdW1lIG5vIGRvY3R5cGVzIGluIGByb290YC5cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAnY2hpbGRyZW4nIGluIHJlc3VsdCA/IHJlc3VsdC5jaGlsZHJlbiA6IFtyZXN1bHRdXG4gICAgICAgIHJlc3VsdCA9IHt0eXBlOiAnZWxlbWVudCcsIHRhZ05hbWU6IGhOYW1lLCBwcm9wZXJ0aWVzOiB7fSwgY2hpbGRyZW59XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC50eXBlID09PSAnZWxlbWVudCcgJiYgaFByb3BlcnRpZXMpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LnByb3BlcnRpZXMsIHN0cnVjdHVyZWRDbG9uZShoUHJvcGVydGllcykpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgJ2NoaWxkcmVuJyBpbiByZXN1bHQgJiZcbiAgICAgIHJlc3VsdC5jaGlsZHJlbiAmJlxuICAgICAgaENoaWxkcmVuICE9PSBudWxsICYmXG4gICAgICBoQ2hpbGRyZW4gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgcmVzdWx0LmNoaWxkcmVuID0gaENoaWxkcmVuXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhbiB1bmtub3duIG5vZGUuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kLlxuICogQHBhcmFtIHtNZGFzdE5vZGVzfSBub2RlXG4gKiAgIFVua25vd24gbWRhc3Qgbm9kZS5cbiAqIEByZXR1cm5zIHtIYXN0RWxlbWVudCB8IEhhc3RUZXh0fVxuICogICBSZXN1bHRpbmcgaGFzdCBub2RlLlxuICovXG5mdW5jdGlvbiBkZWZhdWx0VW5rbm93bkhhbmRsZXIoc3RhdGUsIG5vZGUpIHtcbiAgY29uc3QgZGF0YSA9IG5vZGUuZGF0YSB8fCB7fVxuICAvKiogQHR5cGUge0hhc3RFbGVtZW50IHwgSGFzdFRleHR9ICovXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgJ3ZhbHVlJyBpbiBub2RlICYmXG4gICAgIShvd24uY2FsbChkYXRhLCAnaFByb3BlcnRpZXMnKSB8fCBvd24uY2FsbChkYXRhLCAnaENoaWxkcmVuJykpXG4gICAgICA/IHt0eXBlOiAndGV4dCcsIHZhbHVlOiBub2RlLnZhbHVlfVxuICAgICAgOiB7XG4gICAgICAgICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgICAgICAgIHRhZ05hbWU6ICdkaXYnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICAgIGNoaWxkcmVuOiBzdGF0ZS5hbGwobm9kZSlcbiAgICAgICAgfVxuXG4gIHN0YXRlLnBhdGNoKG5vZGUsIHJlc3VsdClcbiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlLCByZXN1bHQpXG59XG5cbi8qKlxuICogV3JhcCBgbm9kZXNgIHdpdGggbGluZSBlbmRpbmdzIGJldHdlZW4gZWFjaCBub2RlLlxuICpcbiAqIEB0ZW1wbGF0ZSB7SGFzdFJvb3RDb250ZW50fSBUeXBlXG4gKiAgIE5vZGUgdHlwZS5cbiAqIEBwYXJhbSB7QXJyYXk8VHlwZT59IG5vZGVzXG4gKiAgIExpc3Qgb2Ygbm9kZXMgdG8gd3JhcC5cbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gW2xvb3NlPWZhbHNlXVxuICogICBXaGV0aGVyIHRvIGFkZCBsaW5lIGVuZGluZ3MgYXQgc3RhcnQgYW5kIGVuZCAoZGVmYXVsdDogYGZhbHNlYCkuXG4gKiBAcmV0dXJucyB7QXJyYXk8SGFzdFRleHQgfCBUeXBlPn1cbiAqICAgV3JhcHBlZCBub2Rlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXAobm9kZXMsIGxvb3NlKSB7XG4gIC8qKiBAdHlwZSB7QXJyYXk8SGFzdFRleHQgfCBUeXBlPn0gKi9cbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgbGV0IGluZGV4ID0gLTFcblxuICBpZiAobG9vc2UpIHtcbiAgICByZXN1bHQucHVzaCh7dHlwZTogJ3RleHQnLCB2YWx1ZTogJ1xcbid9KVxuICB9XG5cbiAgd2hpbGUgKCsraW5kZXggPCBub2Rlcy5sZW5ndGgpIHtcbiAgICBpZiAoaW5kZXgpIHJlc3VsdC5wdXNoKHt0eXBlOiAndGV4dCcsIHZhbHVlOiAnXFxuJ30pXG4gICAgcmVzdWx0LnB1c2gobm9kZXNbaW5kZXhdKVxuICB9XG5cbiAgaWYgKGxvb3NlICYmIG5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXN1bHQucHVzaCh7dHlwZTogJ3RleHQnLCB2YWx1ZTogJ1xcbid9KVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIFRyaW0gc3BhY2VzIGFuZCB0YWJzIGF0IHRoZSBzdGFydCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBWYWx1ZSB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgUmVzdWx0LlxuICovXG5mdW5jdGlvbiB0cmltTWFya2Rvd25TcGFjZVN0YXJ0KHZhbHVlKSB7XG4gIGxldCBpbmRleCA9IDBcbiAgbGV0IGNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KVxuXG4gIHdoaWxlIChjb2RlID09PSA5IHx8IGNvZGUgPT09IDMyKSB7XG4gICAgaW5kZXgrK1xuICAgIGNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlLnNsaWNlKGluZGV4KVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7Tm9kZXMgYXMgSGFzdE5vZGVzfSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7Tm9kZXMgYXMgTWRhc3ROb2Rlc30gZnJvbSAnbWRhc3QnXG4gKiBAaW1wb3J0IHtPcHRpb25zfSBmcm9tICcuL3N0YXRlLmpzJ1xuICovXG5cbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICdkZXZsb3AnXG5pbXBvcnQge2Zvb3Rlcn0gZnJvbSAnLi9mb290ZXIuanMnXG5pbXBvcnQge2NyZWF0ZVN0YXRlfSBmcm9tICcuL3N0YXRlLmpzJ1xuXG4vKipcbiAqIFRyYW5zZm9ybSBtZGFzdCB0byBoYXN0LlxuICpcbiAqICMjIyMjIE5vdGVzXG4gKlxuICogIyMjIyMjIEhUTUxcbiAqXG4gKiBSYXcgSFRNTCBpcyBhdmFpbGFibGUgaW4gbWRhc3QgYXMgYGh0bWxgIG5vZGVzIGFuZCBjYW4gYmUgZW1iZWRkZWQgaW4gaGFzdFxuICogYXMgc2VtaXN0YW5kYXJkIGByYXdgIG5vZGVzLlxuICogTW9zdCB1dGlsaXRpZXMgaWdub3JlIGByYXdgIG5vZGVzIGJ1dCB0d28gbm90YWJsZSBvbmVzIGRvblx1MjAxOXQ6XG4gKlxuICogKiAgIGBoYXN0LXV0aWwtdG8taHRtbGAgYWxzbyBoYXMgYW4gb3B0aW9uIGBhbGxvd0Rhbmdlcm91c0h0bWxgIHdoaWNoIHdpbGxcbiAqICAgICBvdXRwdXQgdGhlIHJhdyBIVE1MLlxuICogICAgIFRoaXMgaXMgdHlwaWNhbGx5IGRpc2NvdXJhZ2VkIGFzIG5vdGVkIGJ5IHRoZSBvcHRpb24gbmFtZSBidXQgaXMgdXNlZnVsXG4gKiAgICAgaWYgeW91IGNvbXBsZXRlbHkgdHJ1c3QgYXV0aG9yc1xuICogKiAgIGBoYXN0LXV0aWwtcmF3YCBjYW4gaGFuZGxlIHRoZSByYXcgZW1iZWRkZWQgSFRNTCBzdHJpbmdzIGJ5IHBhcnNpbmcgdGhlbVxuICogICAgIGludG8gc3RhbmRhcmQgaGFzdCBub2RlcyAoYGVsZW1lbnRgLCBgdGV4dGAsIGV0YykuXG4gKiAgICAgVGhpcyBpcyBhIGhlYXZ5IHRhc2sgYXMgaXQgbmVlZHMgYSBmdWxsIEhUTUwgcGFyc2VyLCBidXQgaXQgaXMgdGhlIG9ubHlcbiAqICAgICB3YXkgdG8gc3VwcG9ydCB1bnRydXN0ZWQgY29udGVudFxuICpcbiAqICMjIyMjIyBGb290bm90ZXNcbiAqXG4gKiBNYW55IG9wdGlvbnMgc3VwcG9ydGVkIGhlcmUgcmVsYXRlIHRvIGZvb3Rub3Rlcy5cbiAqIEZvb3Rub3RlcyBhcmUgbm90IHNwZWNpZmllZCBieSBDb21tb25NYXJrLCB3aGljaCB3ZSBmb2xsb3cgYnkgZGVmYXVsdC5cbiAqIFRoZXkgYXJlIHN1cHBvcnRlZCBieSBHaXRIdWIsIHNvIGZvb3Rub3RlcyBjYW4gYmUgZW5hYmxlZCBpbiBtYXJrZG93biB3aXRoXG4gKiBgbWRhc3QtdXRpbC1nZm1gLlxuICpcbiAqIFRoZSBvcHRpb25zIGBmb290bm90ZUJhY2tMYWJlbGAgYW5kIGBmb290bm90ZUxhYmVsYCBkZWZpbmUgbmF0dXJhbCBsYW5ndWFnZVxuICogdGhhdCBleHBsYWlucyBmb290bm90ZXMsIHdoaWNoIGlzIGhpZGRlbiBmb3Igc2lnaHRlZCB1c2VycyBidXQgc2hvd24gdG9cbiAqIGFzc2lzdGl2ZSB0ZWNobm9sb2d5LlxuICogV2hlbiB5b3VyIHBhZ2UgaXMgbm90IGluIEVuZ2xpc2gsIHlvdSBtdXN0IGRlZmluZSB0cmFuc2xhdGVkIHZhbHVlcy5cbiAqXG4gKiBCYWNrIHJlZmVyZW5jZXMgdXNlIEFSSUEgYXR0cmlidXRlcywgYnV0IHRoZSBzZWN0aW9uIGxhYmVsIGl0c2VsZiB1c2VzIGFcbiAqIGhlYWRpbmcgdGhhdCBpcyBoaWRkZW4gd2l0aCBhbiBgc3Itb25seWAgY2xhc3MuXG4gKiBUbyBzaG93IGl0IHRvIHNpZ2h0ZWQgdXNlcnMsIGRlZmluZSBkaWZmZXJlbnQgYXR0cmlidXRlcyBpblxuICogYGZvb3Rub3RlTGFiZWxQcm9wZXJ0aWVzYC5cbiAqXG4gKiAjIyMjIyMgQ2xvYmJlcmluZ1xuICpcbiAqIEZvb3Rub3RlcyBpbnRyb2R1Y2VzIGEgcHJvYmxlbSwgYXMgaXQgbGlua3MgZm9vdG5vdGUgY2FsbHMgdG8gZm9vdG5vdGVcbiAqIGRlZmluaXRpb25zIG9uIHRoZSBwYWdlIHRocm91Z2ggYGlkYCBhdHRyaWJ1dGVzIGdlbmVyYXRlZCBmcm9tIHVzZXIgY29udGVudCxcbiAqIHdoaWNoIHJlc3VsdHMgaW4gRE9NIGNsb2JiZXJpbmcuXG4gKlxuICogRE9NIGNsb2JiZXJpbmcgaXMgdGhpczpcbiAqXG4gKiBgYGBodG1sXG4gKiA8cCBpZD14PjwvcD5cbiAqIDxzY3JpcHQ+YWxlcnQoeCkgLy8gYHhgIG5vdyByZWZlcnMgdG8gdGhlIERPTSBgcCN4YCBlbGVtZW50PC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBFbGVtZW50cyBieSB0aGVpciBJRCBhcmUgbWFkZSBhdmFpbGFibGUgYnkgYnJvd3NlcnMgb24gdGhlIGB3aW5kb3dgIG9iamVjdCxcbiAqIHdoaWNoIGlzIGEgc2VjdXJpdHkgcmlzay5cbiAqIFVzaW5nIGEgcHJlZml4IHNvbHZlcyB0aGlzIHByb2JsZW0uXG4gKlxuICogTW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaGFuZGxlIGNsb2JiZXJpbmcgYW5kIHRoZSBwcmVmaXggaXMgZXhwbGFpbmVkIGluXG4gKiBFeGFtcGxlOiBoZWFkaW5ncyAoRE9NIGNsb2JiZXJpbmcpIGluIGByZWh5cGUtc2FuaXRpemVgLlxuICpcbiAqICMjIyMjIyBVbmtub3duIG5vZGVzXG4gKlxuICogVW5rbm93biBub2RlcyBhcmUgbm9kZXMgd2l0aCBhIHR5cGUgdGhhdCBpc25cdTIwMTl0IGluIGBoYW5kbGVyc2Agb3IgYHBhc3NUaHJvdWdoYC5cbiAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB1bmtub3duIG5vZGVzIGlzOlxuICpcbiAqICogICB3aGVuIHRoZSBub2RlIGhhcyBhIGB2YWx1ZWAgKGFuZCBkb2Vzblx1MjAxOXQgaGF2ZSBgZGF0YS5oTmFtZWAsXG4gKiAgICAgYGRhdGEuaFByb3BlcnRpZXNgLCBvciBgZGF0YS5oQ2hpbGRyZW5gLCBzZWUgbGF0ZXIpLCBjcmVhdGUgYSBoYXN0IGB0ZXh0YFxuICogICAgIG5vZGVcbiAqICogICBvdGhlcndpc2UsIGNyZWF0ZSBhIGA8ZGl2PmAgZWxlbWVudCAod2hpY2ggY291bGQgYmUgY2hhbmdlZCB3aXRoXG4gKiAgICAgYGRhdGEuaE5hbWVgKSwgd2l0aCBpdHMgY2hpbGRyZW4gbWFwcGVkIGZyb20gbWRhc3QgdG8gaGFzdCBhcyB3ZWxsXG4gKlxuICogVGhpcyBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSBwYXNzaW5nIGFuIGB1bmtub3duSGFuZGxlcmAuXG4gKlxuICogQHBhcmFtIHtNZGFzdE5vZGVzfSB0cmVlXG4gKiAgIG1kYXN0IHRyZWUuXG4gKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICogQHJldHVybnMge0hhc3ROb2Rlc31cbiAqICAgaGFzdCB0cmVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9IYXN0KHRyZWUsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3RhdGUgPSBjcmVhdGVTdGF0ZSh0cmVlLCBvcHRpb25zKVxuICBjb25zdCBub2RlID0gc3RhdGUub25lKHRyZWUsIHVuZGVmaW5lZClcbiAgY29uc3QgZm9vdCA9IGZvb3RlcihzdGF0ZSlcbiAgLyoqIEB0eXBlIHtIYXN0Tm9kZXN9ICovXG4gIGNvbnN0IHJlc3VsdCA9IEFycmF5LmlzQXJyYXkobm9kZSlcbiAgICA/IHt0eXBlOiAncm9vdCcsIGNoaWxkcmVuOiBub2RlfVxuICAgIDogbm9kZSB8fCB7dHlwZTogJ3Jvb3QnLCBjaGlsZHJlbjogW119XG5cbiAgaWYgKGZvb3QpIHtcbiAgICAvLyBJZiB0aGVyZVx1MjAxOXMgYSBmb290ZXIsIHRoZXJlIHdlcmUgZGVmaW5pdGlvbnMsIG1lYW5pbmcgYmxvY2tcbiAgICAvLyBjb250ZW50LlxuICAgIC8vIFNvIGByZXN1bHRgIGlzIGEgcGFyZW50IG5vZGUuXG4gICAgYXNzZXJ0KCdjaGlsZHJlbicgaW4gcmVzdWx0KVxuICAgIHJlc3VsdC5jaGlsZHJlbi5wdXNoKHt0eXBlOiAndGV4dCcsIHZhbHVlOiAnXFxuJ30sIGZvb3QpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG4iLCAiLy8gTm90ZTogdHlwZXMgZXhwb3NlZCBmcm9tIGBpbmRleC5kLnRzYC5cbmV4cG9ydCB7aGFuZGxlcnMgYXMgZGVmYXVsdEhhbmRsZXJzfSBmcm9tICcuL2xpYi9oYW5kbGVycy9pbmRleC5qcydcbmV4cG9ydCB7dG9IYXN0fSBmcm9tICcuL2xpYi9pbmRleC5qcydcbmV4cG9ydCB7XG4gIGRlZmF1bHRGb290bm90ZUJhY2tDb250ZW50LFxuICBkZWZhdWx0Rm9vdG5vdGVCYWNrTGFiZWxcbn0gZnJvbSAnLi9saWIvZm9vdGVyLmpzJ1xuIiwgIi8qKlxuICogTGlzdCBvZiBIVE1MIHZvaWQgdGFnIG5hbWVzLlxuICpcbiAqIEB0eXBlIHtBcnJheTxzdHJpbmc+fVxuICovXG5leHBvcnQgY29uc3QgaHRtbFZvaWRFbGVtZW50cyA9IFtcbiAgJ2FyZWEnLFxuICAnYmFzZScsXG4gICdiYXNlZm9udCcsXG4gICdiZ3NvdW5kJyxcbiAgJ2JyJyxcbiAgJ2NvbCcsXG4gICdjb21tYW5kJyxcbiAgJ2VtYmVkJyxcbiAgJ2ZyYW1lJyxcbiAgJ2hyJyxcbiAgJ2ltYWdlJyxcbiAgJ2ltZycsXG4gICdpbnB1dCcsXG4gICdrZXlnZW4nLFxuICAnbGluaycsXG4gICdtZXRhJyxcbiAgJ3BhcmFtJyxcbiAgJ3NvdXJjZScsXG4gICd0cmFjaycsXG4gICd3YnInXG5dXG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtTY2hlbWEgYXMgU2NoZW1hVHlwZSwgU3BhY2V9IGZyb20gJ3Byb3BlcnR5LWluZm9ybWF0aW9uJ1xuICovXG5cbi8qKiBAdHlwZSB7U2NoZW1hVHlwZX0gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWEge1xuICAvKipcbiAgICogQHBhcmFtIHtTY2hlbWFUeXBlWydwcm9wZXJ0eSddfSBwcm9wZXJ0eVxuICAgKiAgIFByb3BlcnR5LlxuICAgKiBAcGFyYW0ge1NjaGVtYVR5cGVbJ25vcm1hbCddfSBub3JtYWxcbiAgICogICBOb3JtYWwuXG4gICAqIEBwYXJhbSB7U3BhY2UgfCB1bmRlZmluZWR9IFtzcGFjZV1cbiAgICogICBTcGFjZS5cbiAgICogQHJldHVybnNcbiAgICogICBTY2hlbWEuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgbm9ybWFsLCBzcGFjZSkge1xuICAgIHRoaXMubm9ybWFsID0gbm9ybWFsXG4gICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5XG5cbiAgICBpZiAoc3BhY2UpIHtcbiAgICAgIHRoaXMuc3BhY2UgPSBzcGFjZVxuICAgIH1cbiAgfVxufVxuXG5TY2hlbWEucHJvdG90eXBlLm5vcm1hbCA9IHt9XG5TY2hlbWEucHJvdG90eXBlLnByb3BlcnR5ID0ge31cblNjaGVtYS5wcm90b3R5cGUuc3BhY2UgPSB1bmRlZmluZWRcbiIsICIvKipcbiAqIEBpbXBvcnQge0luZm8sIFNwYWNlfSBmcm9tICdwcm9wZXJ0eS1pbmZvcm1hdGlvbidcbiAqL1xuXG5pbXBvcnQge1NjaGVtYX0gZnJvbSAnLi9zY2hlbWEuanMnXG5cbi8qKlxuICogQHBhcmFtIHtSZWFkb25seUFycmF5PFNjaGVtYT59IGRlZmluaXRpb25zXG4gKiAgIERlZmluaXRpb25zLlxuICogQHBhcmFtIHtTcGFjZSB8IHVuZGVmaW5lZH0gW3NwYWNlXVxuICogICBTcGFjZS5cbiAqIEByZXR1cm5zIHtTY2hlbWF9XG4gKiAgIFNjaGVtYS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKGRlZmluaXRpb25zLCBzcGFjZSkge1xuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIEluZm8+fSAqL1xuICBjb25zdCBwcm9wZXJ0eSA9IHt9XG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3Qgbm9ybWFsID0ge31cblxuICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgZGVmaW5pdGlvbnMpIHtcbiAgICBPYmplY3QuYXNzaWduKHByb3BlcnR5LCBkZWZpbml0aW9uLnByb3BlcnR5KVxuICAgIE9iamVjdC5hc3NpZ24obm9ybWFsLCBkZWZpbml0aW9uLm5vcm1hbClcbiAgfVxuXG4gIHJldHVybiBuZXcgU2NoZW1hKHByb3BlcnR5LCBub3JtYWwsIHNwYWNlKVxufVxuIiwgIi8qKlxuICogR2V0IHRoZSBjbGVhbmVkIGNhc2UgaW5zZW5zaXRpdmUgZm9ybSBvZiBhbiBhdHRyaWJ1dGUgb3IgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiAgIEFuIGF0dHJpYnV0ZS1saWtlIG9yIHByb3BlcnR5LWxpa2UgbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9vayB1cCB0aGUgcHJvcGVybHkgY2FzZWQgcHJvcGVydHkgb24gYVxuICogICBgU2NoZW1hYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7SW5mbyBhcyBJbmZvVHlwZX0gZnJvbSAncHJvcGVydHktaW5mb3JtYXRpb24nXG4gKi9cblxuLyoqIEB0eXBlIHtJbmZvVHlwZX0gKi9cbmV4cG9ydCBjbGFzcyBJbmZvIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVxuICAgKiAgIFByb3BlcnR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlXG4gICAqICAgQXR0cmlidXRlLlxuICAgKiBAcmV0dXJuc1xuICAgKiAgIEluZm8uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgYXR0cmlidXRlKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGVcbiAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHlcbiAgfVxufVxuXG5JbmZvLnByb3RvdHlwZS5hdHRyaWJ1dGUgPSAnJ1xuSW5mby5wcm90b3R5cGUuYm9vbGVhbmlzaCA9IGZhbHNlXG5JbmZvLnByb3RvdHlwZS5ib29sZWFuID0gZmFsc2VcbkluZm8ucHJvdG90eXBlLmNvbW1hT3JTcGFjZVNlcGFyYXRlZCA9IGZhbHNlXG5JbmZvLnByb3RvdHlwZS5jb21tYVNlcGFyYXRlZCA9IGZhbHNlXG5JbmZvLnByb3RvdHlwZS5kZWZpbmVkID0gZmFsc2VcbkluZm8ucHJvdG90eXBlLm11c3RVc2VQcm9wZXJ0eSA9IGZhbHNlXG5JbmZvLnByb3RvdHlwZS5udW1iZXIgPSBmYWxzZVxuSW5mby5wcm90b3R5cGUub3ZlcmxvYWRlZEJvb2xlYW4gPSBmYWxzZVxuSW5mby5wcm90b3R5cGUucHJvcGVydHkgPSAnJ1xuSW5mby5wcm90b3R5cGUuc3BhY2VTZXBhcmF0ZWQgPSBmYWxzZVxuSW5mby5wcm90b3R5cGUuc3BhY2UgPSB1bmRlZmluZWRcbiIsICJsZXQgcG93ZXJzID0gMFxuXG5leHBvcnQgY29uc3QgYm9vbGVhbiA9IGluY3JlbWVudCgpXG5leHBvcnQgY29uc3QgYm9vbGVhbmlzaCA9IGluY3JlbWVudCgpXG5leHBvcnQgY29uc3Qgb3ZlcmxvYWRlZEJvb2xlYW4gPSBpbmNyZW1lbnQoKVxuZXhwb3J0IGNvbnN0IG51bWJlciA9IGluY3JlbWVudCgpXG5leHBvcnQgY29uc3Qgc3BhY2VTZXBhcmF0ZWQgPSBpbmNyZW1lbnQoKVxuZXhwb3J0IGNvbnN0IGNvbW1hU2VwYXJhdGVkID0gaW5jcmVtZW50KClcbmV4cG9ydCBjb25zdCBjb21tYU9yU3BhY2VTZXBhcmF0ZWQgPSBpbmNyZW1lbnQoKVxuXG5mdW5jdGlvbiBpbmNyZW1lbnQoKSB7XG4gIHJldHVybiAyICoqICsrcG93ZXJzXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtTcGFjZX0gZnJvbSAncHJvcGVydHktaW5mb3JtYXRpb24nXG4gKi9cblxuaW1wb3J0IHtJbmZvfSBmcm9tICcuL2luZm8uanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzLmpzJ1xuXG5jb25zdCBjaGVja3MgPSAvKiogQHR5cGUge1JlYWRvbmx5QXJyYXk8a2V5b2YgdHlwZW9mIHR5cGVzPn0gKi8gKFxuICBPYmplY3Qua2V5cyh0eXBlcylcbilcblxuZXhwb3J0IGNsYXNzIERlZmluZWRJbmZvIGV4dGVuZHMgSW5mbyB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5XG4gICAqICAgUHJvcGVydHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVcbiAgICogICBBdHRyaWJ1dGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW21hc2tdXG4gICAqICAgTWFzay5cbiAgICogQHBhcmFtIHtTcGFjZSB8IHVuZGVmaW5lZH0gW3NwYWNlXVxuICAgKiAgIFNwYWNlLlxuICAgKiBAcmV0dXJuc1xuICAgKiAgIEluZm8uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgYXR0cmlidXRlLCBtYXNrLCBzcGFjZSkge1xuICAgIGxldCBpbmRleCA9IC0xXG5cbiAgICBzdXBlcihwcm9wZXJ0eSwgYXR0cmlidXRlKVxuXG4gICAgbWFyayh0aGlzLCAnc3BhY2UnLCBzcGFjZSlcblxuICAgIGlmICh0eXBlb2YgbWFzayA9PT0gJ251bWJlcicpIHtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgY2hlY2tzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGNoZWNrc1tpbmRleF1cbiAgICAgICAgbWFyayh0aGlzLCBjaGVja3NbaW5kZXhdLCAobWFzayAmIHR5cGVzW2NoZWNrXSkgPT09IHR5cGVzW2NoZWNrXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuRGVmaW5lZEluZm8ucHJvdG90eXBlLmRlZmluZWQgPSB0cnVlXG5cbi8qKlxuICogQHRlbXBsYXRlIHtrZXlvZiBEZWZpbmVkSW5mb30gS2V5XG4gKiAgIEtleSB0eXBlLlxuICogQHBhcmFtIHtEZWZpbmVkSW5mb30gdmFsdWVzXG4gKiAgIEluZm8uXG4gKiBAcGFyYW0ge0tleX0ga2V5XG4gKiAgIEtleS5cbiAqIEBwYXJhbSB7RGVmaW5lZEluZm9bS2V5XX0gdmFsdWVcbiAqICAgVmFsdWUuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogICBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBtYXJrKHZhbHVlcywga2V5LCB2YWx1ZSkge1xuICBpZiAodmFsdWUpIHtcbiAgICB2YWx1ZXNba2V5XSA9IHZhbHVlXG4gIH1cbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0luZm8sIFNwYWNlfSBmcm9tICdwcm9wZXJ0eS1pbmZvcm1hdGlvbidcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIERlZmluaXRpb25cbiAqICAgRGVmaW5pdGlvbiBvZiBhIHNjaGVtYS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZH0gW2F0dHJpYnV0ZXNdXG4gKiAgIE5vcm1hbHplZCBuYW1lcyB0byBzcGVjaWFsIGF0dHJpYnV0ZSBjYXNlLlxuICogQHByb3BlcnR5IHtSZWFkb25seUFycmF5PHN0cmluZz4gfCB1bmRlZmluZWR9IFttdXN0VXNlUHJvcGVydHldXG4gKiAgIE5vcm1hbGl6ZWQgbmFtZXMgdGhhdCBtdXN0IGJlIHNldCBhcyBwcm9wZXJ0aWVzLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBudWxsPn0gcHJvcGVydGllc1xuICogICBQcm9wZXJ0eSBuYW1lcyB0byB0aGVpciB0eXBlcy5cbiAqIEBwcm9wZXJ0eSB7U3BhY2UgfCB1bmRlZmluZWR9IFtzcGFjZV1cbiAqICAgU3BhY2UuXG4gKiBAcHJvcGVydHkge1RyYW5zZm9ybX0gdHJhbnNmb3JtXG4gKiAgIFRyYW5zZm9ybSBhIHByb3BlcnR5IG5hbWUuXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgVHJhbnNmb3JtXG4gKiAgIFRyYW5zZm9ybS5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gYXR0cmlidXRlc1xuICogICBBdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5XG4gKiAgIFByb3BlcnR5LlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgQXR0cmlidXRlLlxuICovXG5cbmltcG9ydCB7bm9ybWFsaXplfSBmcm9tICcuLi9ub3JtYWxpemUuanMnXG5pbXBvcnQge0RlZmluZWRJbmZvfSBmcm9tICcuL2RlZmluZWQtaW5mby5qcydcbmltcG9ydCB7U2NoZW1hfSBmcm9tICcuL3NjaGVtYS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge0RlZmluaXRpb259IGRlZmluaXRpb25cbiAqICAgRGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtTY2hlbWF9XG4gKiAgIFNjaGVtYS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShkZWZpbml0aW9uKSB7XG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgSW5mbz59ICovXG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7fVxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IG5vcm1hbHMgPSB7fVxuXG4gIGZvciAoY29uc3QgW3Byb3BlcnR5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmaW5pdGlvbi5wcm9wZXJ0aWVzKSkge1xuICAgIGNvbnN0IGluZm8gPSBuZXcgRGVmaW5lZEluZm8oXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGRlZmluaXRpb24udHJhbnNmb3JtKGRlZmluaXRpb24uYXR0cmlidXRlcyB8fCB7fSwgcHJvcGVydHkpLFxuICAgICAgdmFsdWUsXG4gICAgICBkZWZpbml0aW9uLnNwYWNlXG4gICAgKVxuXG4gICAgaWYgKFxuICAgICAgZGVmaW5pdGlvbi5tdXN0VXNlUHJvcGVydHkgJiZcbiAgICAgIGRlZmluaXRpb24ubXVzdFVzZVByb3BlcnR5LmluY2x1ZGVzKHByb3BlcnR5KVxuICAgICkge1xuICAgICAgaW5mby5tdXN0VXNlUHJvcGVydHkgPSB0cnVlXG4gICAgfVxuXG4gICAgcHJvcGVydGllc1twcm9wZXJ0eV0gPSBpbmZvXG5cbiAgICBub3JtYWxzW25vcm1hbGl6ZShwcm9wZXJ0eSldID0gcHJvcGVydHlcbiAgICBub3JtYWxzW25vcm1hbGl6ZShpbmZvLmF0dHJpYnV0ZSldID0gcHJvcGVydHlcbiAgfVxuXG4gIHJldHVybiBuZXcgU2NoZW1hKHByb3BlcnRpZXMsIG5vcm1hbHMsIGRlZmluaXRpb24uc3BhY2UpXG59XG4iLCAiaW1wb3J0IHtjcmVhdGV9IGZyb20gJy4vdXRpbC9jcmVhdGUuanMnXG5pbXBvcnQge2Jvb2xlYW5pc2gsIG51bWJlciwgc3BhY2VTZXBhcmF0ZWR9IGZyb20gJy4vdXRpbC90eXBlcy5qcydcblxuZXhwb3J0IGNvbnN0IGFyaWEgPSBjcmVhdGUoe1xuICBwcm9wZXJ0aWVzOiB7XG4gICAgYXJpYUFjdGl2ZURlc2NlbmRhbnQ6IG51bGwsXG4gICAgYXJpYUF0b21pYzogYm9vbGVhbmlzaCxcbiAgICBhcmlhQXV0b0NvbXBsZXRlOiBudWxsLFxuICAgIGFyaWFCdXN5OiBib29sZWFuaXNoLFxuICAgIGFyaWFDaGVja2VkOiBib29sZWFuaXNoLFxuICAgIGFyaWFDb2xDb3VudDogbnVtYmVyLFxuICAgIGFyaWFDb2xJbmRleDogbnVtYmVyLFxuICAgIGFyaWFDb2xTcGFuOiBudW1iZXIsXG4gICAgYXJpYUNvbnRyb2xzOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBhcmlhQ3VycmVudDogbnVsbCxcbiAgICBhcmlhRGVzY3JpYmVkQnk6IHNwYWNlU2VwYXJhdGVkLFxuICAgIGFyaWFEZXRhaWxzOiBudWxsLFxuICAgIGFyaWFEaXNhYmxlZDogYm9vbGVhbmlzaCxcbiAgICBhcmlhRHJvcEVmZmVjdDogc3BhY2VTZXBhcmF0ZWQsXG4gICAgYXJpYUVycm9yTWVzc2FnZTogbnVsbCxcbiAgICBhcmlhRXhwYW5kZWQ6IGJvb2xlYW5pc2gsXG4gICAgYXJpYUZsb3dUbzogc3BhY2VTZXBhcmF0ZWQsXG4gICAgYXJpYUdyYWJiZWQ6IGJvb2xlYW5pc2gsXG4gICAgYXJpYUhhc1BvcHVwOiBudWxsLFxuICAgIGFyaWFIaWRkZW46IGJvb2xlYW5pc2gsXG4gICAgYXJpYUludmFsaWQ6IG51bGwsXG4gICAgYXJpYUtleVNob3J0Y3V0czogbnVsbCxcbiAgICBhcmlhTGFiZWw6IG51bGwsXG4gICAgYXJpYUxhYmVsbGVkQnk6IHNwYWNlU2VwYXJhdGVkLFxuICAgIGFyaWFMZXZlbDogbnVtYmVyLFxuICAgIGFyaWFMaXZlOiBudWxsLFxuICAgIGFyaWFNb2RhbDogYm9vbGVhbmlzaCxcbiAgICBhcmlhTXVsdGlMaW5lOiBib29sZWFuaXNoLFxuICAgIGFyaWFNdWx0aVNlbGVjdGFibGU6IGJvb2xlYW5pc2gsXG4gICAgYXJpYU9yaWVudGF0aW9uOiBudWxsLFxuICAgIGFyaWFPd25zOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBhcmlhUGxhY2Vob2xkZXI6IG51bGwsXG4gICAgYXJpYVBvc0luU2V0OiBudW1iZXIsXG4gICAgYXJpYVByZXNzZWQ6IGJvb2xlYW5pc2gsXG4gICAgYXJpYVJlYWRPbmx5OiBib29sZWFuaXNoLFxuICAgIGFyaWFSZWxldmFudDogbnVsbCxcbiAgICBhcmlhUmVxdWlyZWQ6IGJvb2xlYW5pc2gsXG4gICAgYXJpYVJvbGVEZXNjcmlwdGlvbjogc3BhY2VTZXBhcmF0ZWQsXG4gICAgYXJpYVJvd0NvdW50OiBudW1iZXIsXG4gICAgYXJpYVJvd0luZGV4OiBudW1iZXIsXG4gICAgYXJpYVJvd1NwYW46IG51bWJlcixcbiAgICBhcmlhU2VsZWN0ZWQ6IGJvb2xlYW5pc2gsXG4gICAgYXJpYVNldFNpemU6IG51bWJlcixcbiAgICBhcmlhU29ydDogbnVsbCxcbiAgICBhcmlhVmFsdWVNYXg6IG51bWJlcixcbiAgICBhcmlhVmFsdWVNaW46IG51bWJlcixcbiAgICBhcmlhVmFsdWVOb3c6IG51bWJlcixcbiAgICBhcmlhVmFsdWVUZXh0OiBudWxsLFxuICAgIHJvbGU6IG51bGxcbiAgfSxcbiAgdHJhbnNmb3JtKF8sIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIHByb3BlcnR5ID09PSAncm9sZSdcbiAgICAgID8gcHJvcGVydHlcbiAgICAgIDogJ2FyaWEtJyArIHByb3BlcnR5LnNsaWNlKDQpLnRvTG93ZXJDYXNlKClcbiAgfVxufSlcbiIsICIvKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gYXR0cmlidXRlc1xuICogICBBdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZVxuICogICBBdHRyaWJ1dGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBUcmFuc2Zvcm1lZCBhdHRyaWJ1dGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXNlU2Vuc2l0aXZlVHJhbnNmb3JtKGF0dHJpYnV0ZXMsIGF0dHJpYnV0ZSkge1xuICByZXR1cm4gYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMgPyBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gOiBhdHRyaWJ1dGVcbn1cbiIsICJpbXBvcnQge2Nhc2VTZW5zaXRpdmVUcmFuc2Zvcm19IGZyb20gJy4vY2FzZS1zZW5zaXRpdmUtdHJhbnNmb3JtLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gYXR0cmlidXRlc1xuICogICBBdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5XG4gKiAgIFByb3BlcnR5LlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgVHJhbnNmb3JtZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXNlSW5zZW5zaXRpdmVUcmFuc2Zvcm0oYXR0cmlidXRlcywgcHJvcGVydHkpIHtcbiAgcmV0dXJuIGNhc2VTZW5zaXRpdmVUcmFuc2Zvcm0oYXR0cmlidXRlcywgcHJvcGVydHkudG9Mb3dlckNhc2UoKSlcbn1cbiIsICJpbXBvcnQge2Nhc2VJbnNlbnNpdGl2ZVRyYW5zZm9ybX0gZnJvbSAnLi91dGlsL2Nhc2UtaW5zZW5zaXRpdmUtdHJhbnNmb3JtLmpzJ1xuaW1wb3J0IHtjcmVhdGV9IGZyb20gJy4vdXRpbC9jcmVhdGUuanMnXG5pbXBvcnQge1xuICBib29sZWFuaXNoLFxuICBib29sZWFuLFxuICBjb21tYVNlcGFyYXRlZCxcbiAgbnVtYmVyLFxuICBvdmVybG9hZGVkQm9vbGVhbixcbiAgc3BhY2VTZXBhcmF0ZWRcbn0gZnJvbSAnLi91dGlsL3R5cGVzLmpzJ1xuXG5leHBvcnQgY29uc3QgaHRtbCA9IGNyZWF0ZSh7XG4gIGF0dHJpYnV0ZXM6IHtcbiAgICBhY2NlcHRjaGFyc2V0OiAnYWNjZXB0LWNoYXJzZXQnLFxuICAgIGNsYXNzbmFtZTogJ2NsYXNzJyxcbiAgICBodG1sZm9yOiAnZm9yJyxcbiAgICBodHRwZXF1aXY6ICdodHRwLWVxdWl2J1xuICB9LFxuICBtdXN0VXNlUHJvcGVydHk6IFsnY2hlY2tlZCcsICdtdWx0aXBsZScsICdtdXRlZCcsICdzZWxlY3RlZCddLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgLy8gU3RhbmRhcmQgUHJvcGVydGllcy5cbiAgICBhYmJyOiBudWxsLFxuICAgIGFjY2VwdDogY29tbWFTZXBhcmF0ZWQsXG4gICAgYWNjZXB0Q2hhcnNldDogc3BhY2VTZXBhcmF0ZWQsXG4gICAgYWNjZXNzS2V5OiBzcGFjZVNlcGFyYXRlZCxcbiAgICBhY3Rpb246IG51bGwsXG4gICAgYWxsb3c6IG51bGwsXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBib29sZWFuLFxuICAgIGFsbG93UGF5bWVudFJlcXVlc3Q6IGJvb2xlYW4sXG4gICAgYWxsb3dVc2VyTWVkaWE6IGJvb2xlYW4sXG4gICAgYWx0OiBudWxsLFxuICAgIGFzOiBudWxsLFxuICAgIGFzeW5jOiBib29sZWFuLFxuICAgIGF1dG9DYXBpdGFsaXplOiBudWxsLFxuICAgIGF1dG9Db21wbGV0ZTogc3BhY2VTZXBhcmF0ZWQsXG4gICAgYXV0b0ZvY3VzOiBib29sZWFuLFxuICAgIGF1dG9QbGF5OiBib29sZWFuLFxuICAgIGJsb2NraW5nOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBjYXB0dXJlOiBudWxsLFxuICAgIGNoYXJTZXQ6IG51bGwsXG4gICAgY2hlY2tlZDogYm9vbGVhbixcbiAgICBjaXRlOiBudWxsLFxuICAgIGNsYXNzTmFtZTogc3BhY2VTZXBhcmF0ZWQsXG4gICAgY29sczogbnVtYmVyLFxuICAgIGNvbFNwYW46IG51bGwsXG4gICAgY29udGVudDogbnVsbCxcbiAgICBjb250ZW50RWRpdGFibGU6IGJvb2xlYW5pc2gsXG4gICAgY29udHJvbHM6IGJvb2xlYW4sXG4gICAgY29udHJvbHNMaXN0OiBzcGFjZVNlcGFyYXRlZCxcbiAgICBjb29yZHM6IG51bWJlciB8IGNvbW1hU2VwYXJhdGVkLFxuICAgIGNyb3NzT3JpZ2luOiBudWxsLFxuICAgIGRhdGE6IG51bGwsXG4gICAgZGF0ZVRpbWU6IG51bGwsXG4gICAgZGVjb2Rpbmc6IG51bGwsXG4gICAgZGVmYXVsdDogYm9vbGVhbixcbiAgICBkZWZlcjogYm9vbGVhbixcbiAgICBkaXI6IG51bGwsXG4gICAgZGlyTmFtZTogbnVsbCxcbiAgICBkaXNhYmxlZDogYm9vbGVhbixcbiAgICBkb3dubG9hZDogb3ZlcmxvYWRlZEJvb2xlYW4sXG4gICAgZHJhZ2dhYmxlOiBib29sZWFuaXNoLFxuICAgIGVuY1R5cGU6IG51bGwsXG4gICAgZW50ZXJLZXlIaW50OiBudWxsLFxuICAgIGZldGNoUHJpb3JpdHk6IG51bGwsXG4gICAgZm9ybTogbnVsbCxcbiAgICBmb3JtQWN0aW9uOiBudWxsLFxuICAgIGZvcm1FbmNUeXBlOiBudWxsLFxuICAgIGZvcm1NZXRob2Q6IG51bGwsXG4gICAgZm9ybU5vVmFsaWRhdGU6IGJvb2xlYW4sXG4gICAgZm9ybVRhcmdldDogbnVsbCxcbiAgICBoZWFkZXJzOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBoaWRkZW46IG92ZXJsb2FkZWRCb29sZWFuLFxuICAgIGhpZ2g6IG51bWJlcixcbiAgICBocmVmOiBudWxsLFxuICAgIGhyZWZMYW5nOiBudWxsLFxuICAgIGh0bWxGb3I6IHNwYWNlU2VwYXJhdGVkLFxuICAgIGh0dHBFcXVpdjogc3BhY2VTZXBhcmF0ZWQsXG4gICAgaWQ6IG51bGwsXG4gICAgaW1hZ2VTaXplczogbnVsbCxcbiAgICBpbWFnZVNyY1NldDogbnVsbCxcbiAgICBpbmVydDogYm9vbGVhbixcbiAgICBpbnB1dE1vZGU6IG51bGwsXG4gICAgaW50ZWdyaXR5OiBudWxsLFxuICAgIGlzOiBudWxsLFxuICAgIGlzTWFwOiBib29sZWFuLFxuICAgIGl0ZW1JZDogbnVsbCxcbiAgICBpdGVtUHJvcDogc3BhY2VTZXBhcmF0ZWQsXG4gICAgaXRlbVJlZjogc3BhY2VTZXBhcmF0ZWQsXG4gICAgaXRlbVNjb3BlOiBib29sZWFuLFxuICAgIGl0ZW1UeXBlOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBraW5kOiBudWxsLFxuICAgIGxhYmVsOiBudWxsLFxuICAgIGxhbmc6IG51bGwsXG4gICAgbGFuZ3VhZ2U6IG51bGwsXG4gICAgbGlzdDogbnVsbCxcbiAgICBsb2FkaW5nOiBudWxsLFxuICAgIGxvb3A6IGJvb2xlYW4sXG4gICAgbG93OiBudW1iZXIsXG4gICAgbWFuaWZlc3Q6IG51bGwsXG4gICAgbWF4OiBudWxsLFxuICAgIG1heExlbmd0aDogbnVtYmVyLFxuICAgIG1lZGlhOiBudWxsLFxuICAgIG1ldGhvZDogbnVsbCxcbiAgICBtaW46IG51bGwsXG4gICAgbWluTGVuZ3RoOiBudW1iZXIsXG4gICAgbXVsdGlwbGU6IGJvb2xlYW4sXG4gICAgbXV0ZWQ6IGJvb2xlYW4sXG4gICAgbmFtZTogbnVsbCxcbiAgICBub25jZTogbnVsbCxcbiAgICBub01vZHVsZTogYm9vbGVhbixcbiAgICBub1ZhbGlkYXRlOiBib29sZWFuLFxuICAgIG9uQWJvcnQ6IG51bGwsXG4gICAgb25BZnRlclByaW50OiBudWxsLFxuICAgIG9uQXV4Q2xpY2s6IG51bGwsXG4gICAgb25CZWZvcmVNYXRjaDogbnVsbCxcbiAgICBvbkJlZm9yZVByaW50OiBudWxsLFxuICAgIG9uQmVmb3JlVG9nZ2xlOiBudWxsLFxuICAgIG9uQmVmb3JlVW5sb2FkOiBudWxsLFxuICAgIG9uQmx1cjogbnVsbCxcbiAgICBvbkNhbmNlbDogbnVsbCxcbiAgICBvbkNhblBsYXk6IG51bGwsXG4gICAgb25DYW5QbGF5VGhyb3VnaDogbnVsbCxcbiAgICBvbkNoYW5nZTogbnVsbCxcbiAgICBvbkNsaWNrOiBudWxsLFxuICAgIG9uQ2xvc2U6IG51bGwsXG4gICAgb25Db250ZXh0TG9zdDogbnVsbCxcbiAgICBvbkNvbnRleHRNZW51OiBudWxsLFxuICAgIG9uQ29udGV4dFJlc3RvcmVkOiBudWxsLFxuICAgIG9uQ29weTogbnVsbCxcbiAgICBvbkN1ZUNoYW5nZTogbnVsbCxcbiAgICBvbkN1dDogbnVsbCxcbiAgICBvbkRibENsaWNrOiBudWxsLFxuICAgIG9uRHJhZzogbnVsbCxcbiAgICBvbkRyYWdFbmQ6IG51bGwsXG4gICAgb25EcmFnRW50ZXI6IG51bGwsXG4gICAgb25EcmFnRXhpdDogbnVsbCxcbiAgICBvbkRyYWdMZWF2ZTogbnVsbCxcbiAgICBvbkRyYWdPdmVyOiBudWxsLFxuICAgIG9uRHJhZ1N0YXJ0OiBudWxsLFxuICAgIG9uRHJvcDogbnVsbCxcbiAgICBvbkR1cmF0aW9uQ2hhbmdlOiBudWxsLFxuICAgIG9uRW1wdGllZDogbnVsbCxcbiAgICBvbkVuZGVkOiBudWxsLFxuICAgIG9uRXJyb3I6IG51bGwsXG4gICAgb25Gb2N1czogbnVsbCxcbiAgICBvbkZvcm1EYXRhOiBudWxsLFxuICAgIG9uSGFzaENoYW5nZTogbnVsbCxcbiAgICBvbklucHV0OiBudWxsLFxuICAgIG9uSW52YWxpZDogbnVsbCxcbiAgICBvbktleURvd246IG51bGwsXG4gICAgb25LZXlQcmVzczogbnVsbCxcbiAgICBvbktleVVwOiBudWxsLFxuICAgIG9uTGFuZ3VhZ2VDaGFuZ2U6IG51bGwsXG4gICAgb25Mb2FkOiBudWxsLFxuICAgIG9uTG9hZGVkRGF0YTogbnVsbCxcbiAgICBvbkxvYWRlZE1ldGFkYXRhOiBudWxsLFxuICAgIG9uTG9hZEVuZDogbnVsbCxcbiAgICBvbkxvYWRTdGFydDogbnVsbCxcbiAgICBvbk1lc3NhZ2U6IG51bGwsXG4gICAgb25NZXNzYWdlRXJyb3I6IG51bGwsXG4gICAgb25Nb3VzZURvd246IG51bGwsXG4gICAgb25Nb3VzZUVudGVyOiBudWxsLFxuICAgIG9uTW91c2VMZWF2ZTogbnVsbCxcbiAgICBvbk1vdXNlTW92ZTogbnVsbCxcbiAgICBvbk1vdXNlT3V0OiBudWxsLFxuICAgIG9uTW91c2VPdmVyOiBudWxsLFxuICAgIG9uTW91c2VVcDogbnVsbCxcbiAgICBvbk9mZmxpbmU6IG51bGwsXG4gICAgb25PbmxpbmU6IG51bGwsXG4gICAgb25QYWdlSGlkZTogbnVsbCxcbiAgICBvblBhZ2VTaG93OiBudWxsLFxuICAgIG9uUGFzdGU6IG51bGwsXG4gICAgb25QYXVzZTogbnVsbCxcbiAgICBvblBsYXk6IG51bGwsXG4gICAgb25QbGF5aW5nOiBudWxsLFxuICAgIG9uUG9wU3RhdGU6IG51bGwsXG4gICAgb25Qcm9ncmVzczogbnVsbCxcbiAgICBvblJhdGVDaGFuZ2U6IG51bGwsXG4gICAgb25SZWplY3Rpb25IYW5kbGVkOiBudWxsLFxuICAgIG9uUmVzZXQ6IG51bGwsXG4gICAgb25SZXNpemU6IG51bGwsXG4gICAgb25TY3JvbGw6IG51bGwsXG4gICAgb25TY3JvbGxFbmQ6IG51bGwsXG4gICAgb25TZWN1cml0eVBvbGljeVZpb2xhdGlvbjogbnVsbCxcbiAgICBvblNlZWtlZDogbnVsbCxcbiAgICBvblNlZWtpbmc6IG51bGwsXG4gICAgb25TZWxlY3Q6IG51bGwsXG4gICAgb25TbG90Q2hhbmdlOiBudWxsLFxuICAgIG9uU3RhbGxlZDogbnVsbCxcbiAgICBvblN0b3JhZ2U6IG51bGwsXG4gICAgb25TdWJtaXQ6IG51bGwsXG4gICAgb25TdXNwZW5kOiBudWxsLFxuICAgIG9uVGltZVVwZGF0ZTogbnVsbCxcbiAgICBvblRvZ2dsZTogbnVsbCxcbiAgICBvblVuaGFuZGxlZFJlamVjdGlvbjogbnVsbCxcbiAgICBvblVubG9hZDogbnVsbCxcbiAgICBvblZvbHVtZUNoYW5nZTogbnVsbCxcbiAgICBvbldhaXRpbmc6IG51bGwsXG4gICAgb25XaGVlbDogbnVsbCxcbiAgICBvcGVuOiBib29sZWFuLFxuICAgIG9wdGltdW06IG51bWJlcixcbiAgICBwYXR0ZXJuOiBudWxsLFxuICAgIHBpbmc6IHNwYWNlU2VwYXJhdGVkLFxuICAgIHBsYWNlaG9sZGVyOiBudWxsLFxuICAgIHBsYXlzSW5saW5lOiBib29sZWFuLFxuICAgIHBvcG92ZXI6IG51bGwsXG4gICAgcG9wb3ZlclRhcmdldDogbnVsbCxcbiAgICBwb3BvdmVyVGFyZ2V0QWN0aW9uOiBudWxsLFxuICAgIHBvc3RlcjogbnVsbCxcbiAgICBwcmVsb2FkOiBudWxsLFxuICAgIHJlYWRPbmx5OiBib29sZWFuLFxuICAgIHJlZmVycmVyUG9saWN5OiBudWxsLFxuICAgIHJlbDogc3BhY2VTZXBhcmF0ZWQsXG4gICAgcmVxdWlyZWQ6IGJvb2xlYW4sXG4gICAgcmV2ZXJzZWQ6IGJvb2xlYW4sXG4gICAgcm93czogbnVtYmVyLFxuICAgIHJvd1NwYW46IG51bWJlcixcbiAgICBzYW5kYm94OiBzcGFjZVNlcGFyYXRlZCxcbiAgICBzY29wZTogbnVsbCxcbiAgICBzY29wZWQ6IGJvb2xlYW4sXG4gICAgc2VhbWxlc3M6IGJvb2xlYW4sXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgc2hhZG93Um9vdENsb25hYmxlOiBib29sZWFuLFxuICAgIHNoYWRvd1Jvb3REZWxlZ2F0ZXNGb2N1czogYm9vbGVhbixcbiAgICBzaGFkb3dSb290TW9kZTogbnVsbCxcbiAgICBzaGFwZTogbnVsbCxcbiAgICBzaXplOiBudW1iZXIsXG4gICAgc2l6ZXM6IG51bGwsXG4gICAgc2xvdDogbnVsbCxcbiAgICBzcGFuOiBudW1iZXIsXG4gICAgc3BlbGxDaGVjazogYm9vbGVhbmlzaCxcbiAgICBzcmM6IG51bGwsXG4gICAgc3JjRG9jOiBudWxsLFxuICAgIHNyY0xhbmc6IG51bGwsXG4gICAgc3JjU2V0OiBudWxsLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgc3RlcDogbnVsbCxcbiAgICBzdHlsZTogbnVsbCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIHRhcmdldDogbnVsbCxcbiAgICB0aXRsZTogbnVsbCxcbiAgICB0cmFuc2xhdGU6IG51bGwsXG4gICAgdHlwZTogbnVsbCxcbiAgICB0eXBlTXVzdE1hdGNoOiBib29sZWFuLFxuICAgIHVzZU1hcDogbnVsbCxcbiAgICB2YWx1ZTogYm9vbGVhbmlzaCxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIHdyYXA6IG51bGwsXG4gICAgd3JpdGluZ1N1Z2dlc3Rpb25zOiBudWxsLFxuXG4gICAgLy8gTGVnYWN5LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jb3RoZXItZWxlbWVudHMsLWF0dHJpYnV0ZXMtYW5kLWFwaXNcbiAgICBhbGlnbjogbnVsbCwgLy8gU2V2ZXJhbC4gVXNlIENTUyBgdGV4dC1hbGlnbmAgaW5zdGVhZCxcbiAgICBhTGluazogbnVsbCwgLy8gYDxib2R5PmAuIFVzZSBDU1MgYGE6YWN0aXZlIHtjb2xvcn1gIGluc3RlYWRcbiAgICBhcmNoaXZlOiBzcGFjZVNlcGFyYXRlZCwgLy8gYDxvYmplY3Q+YC4gTGlzdCBvZiBVUklzIHRvIGFyY2hpdmVzXG4gICAgYXhpczogbnVsbCwgLy8gYDx0ZD5gIGFuZCBgPHRoPmAuIFVzZSBgc2NvcGVgIG9uIGA8dGg+YFxuICAgIGJhY2tncm91bmQ6IG51bGwsIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBiYWNrZ3JvdW5kLWltYWdlYCBpbnN0ZWFkXG4gICAgYmdDb2xvcjogbnVsbCwgLy8gYDxib2R5PmAgYW5kIHRhYmxlIGVsZW1lbnRzLiBVc2UgQ1NTIGBiYWNrZ3JvdW5kLWNvbG9yYCBpbnN0ZWFkXG4gICAgYm9yZGVyOiBudW1iZXIsIC8vIGA8dGFibGU+YC4gVXNlIENTUyBgYm9yZGVyLXdpZHRoYCBpbnN0ZWFkLFxuICAgIGJvcmRlckNvbG9yOiBudWxsLCAvLyBgPHRhYmxlPmAuIFVzZSBDU1MgYGJvcmRlci1jb2xvcmAgaW5zdGVhZCxcbiAgICBib3R0b21NYXJnaW46IG51bWJlciwgLy8gYDxib2R5PmBcbiAgICBjZWxsUGFkZGluZzogbnVsbCwgLy8gYDx0YWJsZT5gXG4gICAgY2VsbFNwYWNpbmc6IG51bGwsIC8vIGA8dGFibGU+YFxuICAgIGNoYXI6IG51bGwsIC8vIFNldmVyYWwgdGFibGUgZWxlbWVudHMuIFdoZW4gYGFsaWduPWNoYXJgLCBzZXRzIHRoZSBjaGFyYWN0ZXIgdG8gYWxpZ24gb25cbiAgICBjaGFyT2ZmOiBudWxsLCAvLyBTZXZlcmFsIHRhYmxlIGVsZW1lbnRzLiBXaGVuIGBjaGFyYCwgb2Zmc2V0cyB0aGUgYWxpZ25tZW50XG4gICAgY2xhc3NJZDogbnVsbCwgLy8gYDxvYmplY3Q+YFxuICAgIGNsZWFyOiBudWxsLCAvLyBgPGJyPmAuIFVzZSBDU1MgYGNsZWFyYCBpbnN0ZWFkXG4gICAgY29kZTogbnVsbCwgLy8gYDxvYmplY3Q+YFxuICAgIGNvZGVCYXNlOiBudWxsLCAvLyBgPG9iamVjdD5gXG4gICAgY29kZVR5cGU6IG51bGwsIC8vIGA8b2JqZWN0PmBcbiAgICBjb2xvcjogbnVsbCwgLy8gYDxmb250PmAgYW5kIGA8aHI+YC4gVXNlIENTUyBpbnN0ZWFkXG4gICAgY29tcGFjdDogYm9vbGVhbiwgLy8gTGlzdHMuIFVzZSBDU1MgdG8gcmVkdWNlIHNwYWNlIGJldHdlZW4gaXRlbXMgaW5zdGVhZFxuICAgIGRlY2xhcmU6IGJvb2xlYW4sIC8vIGA8b2JqZWN0PmBcbiAgICBldmVudDogbnVsbCwgLy8gYDxzY3JpcHQ+YFxuICAgIGZhY2U6IG51bGwsIC8vIGA8Zm9udD5gLiBVc2UgQ1NTIGluc3RlYWRcbiAgICBmcmFtZTogbnVsbCwgLy8gYDx0YWJsZT5gXG4gICAgZnJhbWVCb3JkZXI6IG51bGwsIC8vIGA8aWZyYW1lPmAuIFVzZSBDU1MgYGJvcmRlcmAgaW5zdGVhZFxuICAgIGhTcGFjZTogbnVtYmVyLCAvLyBgPGltZz5gIGFuZCBgPG9iamVjdD5gXG4gICAgbGVmdE1hcmdpbjogbnVtYmVyLCAvLyBgPGJvZHk+YFxuICAgIGxpbms6IG51bGwsIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBhOmxpbmsge2NvbG9yOiAqfWAgaW5zdGVhZFxuICAgIGxvbmdEZXNjOiBudWxsLCAvLyBgPGZyYW1lPmAsIGA8aWZyYW1lPmAsIGFuZCBgPGltZz5gLiBVc2UgYW4gYDxhPmBcbiAgICBsb3dTcmM6IG51bGwsIC8vIGA8aW1nPmAuIFVzZSBhIGA8cGljdHVyZT5gXG4gICAgbWFyZ2luSGVpZ2h0OiBudW1iZXIsIC8vIGA8Ym9keT5gXG4gICAgbWFyZ2luV2lkdGg6IG51bWJlciwgLy8gYDxib2R5PmBcbiAgICBub1Jlc2l6ZTogYm9vbGVhbiwgLy8gYDxmcmFtZT5gXG4gICAgbm9IcmVmOiBib29sZWFuLCAvLyBgPGFyZWE+YC4gVXNlIG5vIGhyZWYgaW5zdGVhZCBvZiBhbiBleHBsaWNpdCBgbm9ocmVmYFxuICAgIG5vU2hhZGU6IGJvb2xlYW4sIC8vIGA8aHI+YC4gVXNlIGJhY2tncm91bmQtY29sb3IgYW5kIGhlaWdodCBpbnN0ZWFkIG9mIGJvcmRlcnNcbiAgICBub1dyYXA6IGJvb2xlYW4sIC8vIGA8dGQ+YCBhbmQgYDx0aD5gXG4gICAgb2JqZWN0OiBudWxsLCAvLyBgPGFwcGxldD5gXG4gICAgcHJvZmlsZTogbnVsbCwgLy8gYDxoZWFkPmBcbiAgICBwcm9tcHQ6IG51bGwsIC8vIGA8aXNpbmRleD5gXG4gICAgcmV2OiBudWxsLCAvLyBgPGxpbms+YFxuICAgIHJpZ2h0TWFyZ2luOiBudW1iZXIsIC8vIGA8Ym9keT5gXG4gICAgcnVsZXM6IG51bGwsIC8vIGA8dGFibGU+YFxuICAgIHNjaGVtZTogbnVsbCwgLy8gYDxtZXRhPmBcbiAgICBzY3JvbGxpbmc6IGJvb2xlYW5pc2gsIC8vIGA8ZnJhbWU+YC4gVXNlIG92ZXJmbG93IGluIHRoZSBjaGlsZCBjb250ZXh0XG4gICAgc3RhbmRieTogbnVsbCwgLy8gYDxvYmplY3Q+YFxuICAgIHN1bW1hcnk6IG51bGwsIC8vIGA8dGFibGU+YFxuICAgIHRleHQ6IG51bGwsIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBjb2xvcmAgaW5zdGVhZFxuICAgIHRvcE1hcmdpbjogbnVtYmVyLCAvLyBgPGJvZHk+YFxuICAgIHZhbHVlVHlwZTogbnVsbCwgLy8gYDxwYXJhbT5gXG4gICAgdmVyc2lvbjogbnVsbCwgLy8gYDxodG1sPmAuIFVzZSBhIGRvY3R5cGUuXG4gICAgdkFsaWduOiBudWxsLCAvLyBTZXZlcmFsLiBVc2UgQ1NTIGB2ZXJ0aWNhbC1hbGlnbmAgaW5zdGVhZFxuICAgIHZMaW5rOiBudWxsLCAvLyBgPGJvZHk+YC4gVXNlIENTUyBgYTp2aXNpdGVkIHtjb2xvcn1gIGluc3RlYWRcbiAgICB2U3BhY2U6IG51bWJlciwgLy8gYDxpbWc+YCBhbmQgYDxvYmplY3Q+YFxuXG4gICAgLy8gTm9uLXN0YW5kYXJkIFByb3BlcnRpZXMuXG4gICAgYWxsb3dUcmFuc3BhcmVuY3k6IG51bGwsXG4gICAgYXV0b0NvcnJlY3Q6IG51bGwsXG4gICAgYXV0b1NhdmU6IG51bGwsXG4gICAgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmU6IGJvb2xlYW4sXG4gICAgZGlzYWJsZVJlbW90ZVBsYXliYWNrOiBib29sZWFuLFxuICAgIHByZWZpeDogbnVsbCxcbiAgICBwcm9wZXJ0eTogbnVsbCxcbiAgICByZXN1bHRzOiBudW1iZXIsXG4gICAgc2VjdXJpdHk6IG51bGwsXG4gICAgdW5zZWxlY3RhYmxlOiBudWxsXG4gIH0sXG4gIHNwYWNlOiAnaHRtbCcsXG4gIHRyYW5zZm9ybTogY2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtXG59KVxuIiwgImltcG9ydCB7Y2FzZVNlbnNpdGl2ZVRyYW5zZm9ybX0gZnJvbSAnLi91dGlsL2Nhc2Utc2Vuc2l0aXZlLXRyYW5zZm9ybS5qcydcbmltcG9ydCB7Y3JlYXRlfSBmcm9tICcuL3V0aWwvY3JlYXRlLmpzJ1xuaW1wb3J0IHtcbiAgYm9vbGVhbixcbiAgY29tbWFPclNwYWNlU2VwYXJhdGVkLFxuICBjb21tYVNlcGFyYXRlZCxcbiAgbnVtYmVyLFxuICBzcGFjZVNlcGFyYXRlZFxufSBmcm9tICcuL3V0aWwvdHlwZXMuanMnXG5cbmV4cG9ydCBjb25zdCBzdmcgPSBjcmVhdGUoe1xuICBhdHRyaWJ1dGVzOiB7XG4gICAgYWNjZW50SGVpZ2h0OiAnYWNjZW50LWhlaWdodCcsXG4gICAgYWxpZ25tZW50QmFzZWxpbmU6ICdhbGlnbm1lbnQtYmFzZWxpbmUnLFxuICAgIGFyYWJpY0Zvcm06ICdhcmFiaWMtZm9ybScsXG4gICAgYmFzZWxpbmVTaGlmdDogJ2Jhc2VsaW5lLXNoaWZ0JyxcbiAgICBjYXBIZWlnaHQ6ICdjYXAtaGVpZ2h0JyxcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgY2xpcFBhdGg6ICdjbGlwLXBhdGgnLFxuICAgIGNsaXBSdWxlOiAnY2xpcC1ydWxlJyxcbiAgICBjb2xvckludGVycG9sYXRpb246ICdjb2xvci1pbnRlcnBvbGF0aW9uJyxcbiAgICBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyxcbiAgICBjb2xvclByb2ZpbGU6ICdjb2xvci1wcm9maWxlJyxcbiAgICBjb2xvclJlbmRlcmluZzogJ2NvbG9yLXJlbmRlcmluZycsXG4gICAgY3Jvc3NPcmlnaW46ICdjcm9zc29yaWdpbicsXG4gICAgZGF0YVR5cGU6ICdkYXRhdHlwZScsXG4gICAgZG9taW5hbnRCYXNlbGluZTogJ2RvbWluYW50LWJhc2VsaW5lJyxcbiAgICBlbmFibGVCYWNrZ3JvdW5kOiAnZW5hYmxlLWJhY2tncm91bmQnLFxuICAgIGZpbGxPcGFjaXR5OiAnZmlsbC1vcGFjaXR5JyxcbiAgICBmaWxsUnVsZTogJ2ZpbGwtcnVsZScsXG4gICAgZmxvb2RDb2xvcjogJ2Zsb29kLWNvbG9yJyxcbiAgICBmbG9vZE9wYWNpdHk6ICdmbG9vZC1vcGFjaXR5JyxcbiAgICBmb250RmFtaWx5OiAnZm9udC1mYW1pbHknLFxuICAgIGZvbnRTaXplOiAnZm9udC1zaXplJyxcbiAgICBmb250U2l6ZUFkanVzdDogJ2ZvbnQtc2l6ZS1hZGp1c3QnLFxuICAgIGZvbnRTdHJldGNoOiAnZm9udC1zdHJldGNoJyxcbiAgICBmb250U3R5bGU6ICdmb250LXN0eWxlJyxcbiAgICBmb250VmFyaWFudDogJ2ZvbnQtdmFyaWFudCcsXG4gICAgZm9udFdlaWdodDogJ2ZvbnQtd2VpZ2h0JyxcbiAgICBnbHlwaE5hbWU6ICdnbHlwaC1uYW1lJyxcbiAgICBnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDogJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnLFxuICAgIGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbDogJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJyxcbiAgICBocmVmTGFuZzogJ2hyZWZsYW5nJyxcbiAgICBob3JpekFkdlg6ICdob3Jpei1hZHYteCcsXG4gICAgaG9yaXpPcmlnaW5YOiAnaG9yaXotb3JpZ2luLXgnLFxuICAgIGhvcml6T3JpZ2luWTogJ2hvcml6LW9yaWdpbi15JyxcbiAgICBpbWFnZVJlbmRlcmluZzogJ2ltYWdlLXJlbmRlcmluZycsXG4gICAgbGV0dGVyU3BhY2luZzogJ2xldHRlci1zcGFjaW5nJyxcbiAgICBsaWdodGluZ0NvbG9yOiAnbGlnaHRpbmctY29sb3InLFxuICAgIG1hcmtlckVuZDogJ21hcmtlci1lbmQnLFxuICAgIG1hcmtlck1pZDogJ21hcmtlci1taWQnLFxuICAgIG1hcmtlclN0YXJ0OiAnbWFya2VyLXN0YXJ0JyxcbiAgICBuYXZEb3duOiAnbmF2LWRvd24nLFxuICAgIG5hdkRvd25MZWZ0OiAnbmF2LWRvd24tbGVmdCcsXG4gICAgbmF2RG93blJpZ2h0OiAnbmF2LWRvd24tcmlnaHQnLFxuICAgIG5hdkxlZnQ6ICduYXYtbGVmdCcsXG4gICAgbmF2TmV4dDogJ25hdi1uZXh0JyxcbiAgICBuYXZQcmV2OiAnbmF2LXByZXYnLFxuICAgIG5hdlJpZ2h0OiAnbmF2LXJpZ2h0JyxcbiAgICBuYXZVcDogJ25hdi11cCcsXG4gICAgbmF2VXBMZWZ0OiAnbmF2LXVwLWxlZnQnLFxuICAgIG5hdlVwUmlnaHQ6ICduYXYtdXAtcmlnaHQnLFxuICAgIG9uQWJvcnQ6ICdvbmFib3J0JyxcbiAgICBvbkFjdGl2YXRlOiAnb25hY3RpdmF0ZScsXG4gICAgb25BZnRlclByaW50OiAnb25hZnRlcnByaW50JyxcbiAgICBvbkJlZm9yZVByaW50OiAnb25iZWZvcmVwcmludCcsXG4gICAgb25CZWdpbjogJ29uYmVnaW4nLFxuICAgIG9uQ2FuY2VsOiAnb25jYW5jZWwnLFxuICAgIG9uQ2FuUGxheTogJ29uY2FucGxheScsXG4gICAgb25DYW5QbGF5VGhyb3VnaDogJ29uY2FucGxheXRocm91Z2gnLFxuICAgIG9uQ2hhbmdlOiAnb25jaGFuZ2UnLFxuICAgIG9uQ2xpY2s6ICdvbmNsaWNrJyxcbiAgICBvbkNsb3NlOiAnb25jbG9zZScsXG4gICAgb25Db3B5OiAnb25jb3B5JyxcbiAgICBvbkN1ZUNoYW5nZTogJ29uY3VlY2hhbmdlJyxcbiAgICBvbkN1dDogJ29uY3V0JyxcbiAgICBvbkRibENsaWNrOiAnb25kYmxjbGljaycsXG4gICAgb25EcmFnOiAnb25kcmFnJyxcbiAgICBvbkRyYWdFbmQ6ICdvbmRyYWdlbmQnLFxuICAgIG9uRHJhZ0VudGVyOiAnb25kcmFnZW50ZXInLFxuICAgIG9uRHJhZ0V4aXQ6ICdvbmRyYWdleGl0JyxcbiAgICBvbkRyYWdMZWF2ZTogJ29uZHJhZ2xlYXZlJyxcbiAgICBvbkRyYWdPdmVyOiAnb25kcmFnb3ZlcicsXG4gICAgb25EcmFnU3RhcnQ6ICdvbmRyYWdzdGFydCcsXG4gICAgb25Ecm9wOiAnb25kcm9wJyxcbiAgICBvbkR1cmF0aW9uQ2hhbmdlOiAnb25kdXJhdGlvbmNoYW5nZScsXG4gICAgb25FbXB0aWVkOiAnb25lbXB0aWVkJyxcbiAgICBvbkVuZDogJ29uZW5kJyxcbiAgICBvbkVuZGVkOiAnb25lbmRlZCcsXG4gICAgb25FcnJvcjogJ29uZXJyb3InLFxuICAgIG9uRm9jdXM6ICdvbmZvY3VzJyxcbiAgICBvbkZvY3VzSW46ICdvbmZvY3VzaW4nLFxuICAgIG9uRm9jdXNPdXQ6ICdvbmZvY3Vzb3V0JyxcbiAgICBvbkhhc2hDaGFuZ2U6ICdvbmhhc2hjaGFuZ2UnLFxuICAgIG9uSW5wdXQ6ICdvbmlucHV0JyxcbiAgICBvbkludmFsaWQ6ICdvbmludmFsaWQnLFxuICAgIG9uS2V5RG93bjogJ29ua2V5ZG93bicsXG4gICAgb25LZXlQcmVzczogJ29ua2V5cHJlc3MnLFxuICAgIG9uS2V5VXA6ICdvbmtleXVwJyxcbiAgICBvbkxvYWQ6ICdvbmxvYWQnLFxuICAgIG9uTG9hZGVkRGF0YTogJ29ubG9hZGVkZGF0YScsXG4gICAgb25Mb2FkZWRNZXRhZGF0YTogJ29ubG9hZGVkbWV0YWRhdGEnLFxuICAgIG9uTG9hZFN0YXJ0OiAnb25sb2Fkc3RhcnQnLFxuICAgIG9uTWVzc2FnZTogJ29ubWVzc2FnZScsXG4gICAgb25Nb3VzZURvd246ICdvbm1vdXNlZG93bicsXG4gICAgb25Nb3VzZUVudGVyOiAnb25tb3VzZWVudGVyJyxcbiAgICBvbk1vdXNlTGVhdmU6ICdvbm1vdXNlbGVhdmUnLFxuICAgIG9uTW91c2VNb3ZlOiAnb25tb3VzZW1vdmUnLFxuICAgIG9uTW91c2VPdXQ6ICdvbm1vdXNlb3V0JyxcbiAgICBvbk1vdXNlT3ZlcjogJ29ubW91c2VvdmVyJyxcbiAgICBvbk1vdXNlVXA6ICdvbm1vdXNldXAnLFxuICAgIG9uTW91c2VXaGVlbDogJ29ubW91c2V3aGVlbCcsXG4gICAgb25PZmZsaW5lOiAnb25vZmZsaW5lJyxcbiAgICBvbk9ubGluZTogJ29ub25saW5lJyxcbiAgICBvblBhZ2VIaWRlOiAnb25wYWdlaGlkZScsXG4gICAgb25QYWdlU2hvdzogJ29ucGFnZXNob3cnLFxuICAgIG9uUGFzdGU6ICdvbnBhc3RlJyxcbiAgICBvblBhdXNlOiAnb25wYXVzZScsXG4gICAgb25QbGF5OiAnb25wbGF5JyxcbiAgICBvblBsYXlpbmc6ICdvbnBsYXlpbmcnLFxuICAgIG9uUG9wU3RhdGU6ICdvbnBvcHN0YXRlJyxcbiAgICBvblByb2dyZXNzOiAnb25wcm9ncmVzcycsXG4gICAgb25SYXRlQ2hhbmdlOiAnb25yYXRlY2hhbmdlJyxcbiAgICBvblJlcGVhdDogJ29ucmVwZWF0JyxcbiAgICBvblJlc2V0OiAnb25yZXNldCcsXG4gICAgb25SZXNpemU6ICdvbnJlc2l6ZScsXG4gICAgb25TY3JvbGw6ICdvbnNjcm9sbCcsXG4gICAgb25TZWVrZWQ6ICdvbnNlZWtlZCcsXG4gICAgb25TZWVraW5nOiAnb25zZWVraW5nJyxcbiAgICBvblNlbGVjdDogJ29uc2VsZWN0JyxcbiAgICBvblNob3c6ICdvbnNob3cnLFxuICAgIG9uU3RhbGxlZDogJ29uc3RhbGxlZCcsXG4gICAgb25TdG9yYWdlOiAnb25zdG9yYWdlJyxcbiAgICBvblN1Ym1pdDogJ29uc3VibWl0JyxcbiAgICBvblN1c3BlbmQ6ICdvbnN1c3BlbmQnLFxuICAgIG9uVGltZVVwZGF0ZTogJ29udGltZXVwZGF0ZScsXG4gICAgb25Ub2dnbGU6ICdvbnRvZ2dsZScsXG4gICAgb25VbmxvYWQ6ICdvbnVubG9hZCcsXG4gICAgb25Wb2x1bWVDaGFuZ2U6ICdvbnZvbHVtZWNoYW5nZScsXG4gICAgb25XYWl0aW5nOiAnb253YWl0aW5nJyxcbiAgICBvblpvb206ICdvbnpvb20nLFxuICAgIG92ZXJsaW5lUG9zaXRpb246ICdvdmVybGluZS1wb3NpdGlvbicsXG4gICAgb3ZlcmxpbmVUaGlja25lc3M6ICdvdmVybGluZS10aGlja25lc3MnLFxuICAgIHBhaW50T3JkZXI6ICdwYWludC1vcmRlcicsXG4gICAgcGFub3NlMTogJ3Bhbm9zZS0xJyxcbiAgICBwb2ludGVyRXZlbnRzOiAncG9pbnRlci1ldmVudHMnLFxuICAgIHJlZmVycmVyUG9saWN5OiAncmVmZXJyZXJwb2xpY3knLFxuICAgIHJlbmRlcmluZ0ludGVudDogJ3JlbmRlcmluZy1pbnRlbnQnLFxuICAgIHNoYXBlUmVuZGVyaW5nOiAnc2hhcGUtcmVuZGVyaW5nJyxcbiAgICBzdG9wQ29sb3I6ICdzdG9wLWNvbG9yJyxcbiAgICBzdG9wT3BhY2l0eTogJ3N0b3Atb3BhY2l0eScsXG4gICAgc3RyaWtldGhyb3VnaFBvc2l0aW9uOiAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbicsXG4gICAgc3RyaWtldGhyb3VnaFRoaWNrbmVzczogJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJyxcbiAgICBzdHJva2VEYXNoQXJyYXk6ICdzdHJva2UtZGFzaGFycmF5JyxcbiAgICBzdHJva2VEYXNoT2Zmc2V0OiAnc3Ryb2tlLWRhc2hvZmZzZXQnLFxuICAgIHN0cm9rZUxpbmVDYXA6ICdzdHJva2UtbGluZWNhcCcsXG4gICAgc3Ryb2tlTGluZUpvaW46ICdzdHJva2UtbGluZWpvaW4nLFxuICAgIHN0cm9rZU1pdGVyTGltaXQ6ICdzdHJva2UtbWl0ZXJsaW1pdCcsXG4gICAgc3Ryb2tlT3BhY2l0eTogJ3N0cm9rZS1vcGFjaXR5JyxcbiAgICBzdHJva2VXaWR0aDogJ3N0cm9rZS13aWR0aCcsXG4gICAgdGFiSW5kZXg6ICd0YWJpbmRleCcsXG4gICAgdGV4dEFuY2hvcjogJ3RleHQtYW5jaG9yJyxcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ3RleHQtZGVjb3JhdGlvbicsXG4gICAgdGV4dFJlbmRlcmluZzogJ3RleHQtcmVuZGVyaW5nJyxcbiAgICB0cmFuc2Zvcm1PcmlnaW46ICd0cmFuc2Zvcm0tb3JpZ2luJyxcbiAgICB0eXBlT2Y6ICd0eXBlb2YnLFxuICAgIHVuZGVybGluZVBvc2l0aW9uOiAndW5kZXJsaW5lLXBvc2l0aW9uJyxcbiAgICB1bmRlcmxpbmVUaGlja25lc3M6ICd1bmRlcmxpbmUtdGhpY2tuZXNzJyxcbiAgICB1bmljb2RlQmlkaTogJ3VuaWNvZGUtYmlkaScsXG4gICAgdW5pY29kZVJhbmdlOiAndW5pY29kZS1yYW5nZScsXG4gICAgdW5pdHNQZXJFbTogJ3VuaXRzLXBlci1lbScsXG4gICAgdkFscGhhYmV0aWM6ICd2LWFscGhhYmV0aWMnLFxuICAgIHZIYW5naW5nOiAndi1oYW5naW5nJyxcbiAgICB2SWRlb2dyYXBoaWM6ICd2LWlkZW9ncmFwaGljJyxcbiAgICB2TWF0aGVtYXRpY2FsOiAndi1tYXRoZW1hdGljYWwnLFxuICAgIHZlY3RvckVmZmVjdDogJ3ZlY3Rvci1lZmZlY3QnLFxuICAgIHZlcnRBZHZZOiAndmVydC1hZHYteScsXG4gICAgdmVydE9yaWdpblg6ICd2ZXJ0LW9yaWdpbi14JyxcbiAgICB2ZXJ0T3JpZ2luWTogJ3ZlcnQtb3JpZ2luLXknLFxuICAgIHdvcmRTcGFjaW5nOiAnd29yZC1zcGFjaW5nJyxcbiAgICB3cml0aW5nTW9kZTogJ3dyaXRpbmctbW9kZScsXG4gICAgeEhlaWdodDogJ3gtaGVpZ2h0JyxcbiAgICAvLyBUaGVzZSB3ZXJlIGNhbWVsY2FzZWQgaW4gVGlueS4gTm93IGxvd2VyY2FzZWQgaW4gU1ZHIDJcbiAgICBwbGF5YmFja09yZGVyOiAncGxheWJhY2tvcmRlcicsXG4gICAgdGltZWxpbmVCZWdpbjogJ3RpbWVsaW5lYmVnaW4nXG4gIH0sXG4gIHByb3BlcnRpZXM6IHtcbiAgICBhYm91dDogY29tbWFPclNwYWNlU2VwYXJhdGVkLFxuICAgIGFjY2VudEhlaWdodDogbnVtYmVyLFxuICAgIGFjY3VtdWxhdGU6IG51bGwsXG4gICAgYWRkaXRpdmU6IG51bGwsXG4gICAgYWxpZ25tZW50QmFzZWxpbmU6IG51bGwsXG4gICAgYWxwaGFiZXRpYzogbnVtYmVyLFxuICAgIGFtcGxpdHVkZTogbnVtYmVyLFxuICAgIGFyYWJpY0Zvcm06IG51bGwsXG4gICAgYXNjZW50OiBudW1iZXIsXG4gICAgYXR0cmlidXRlTmFtZTogbnVsbCxcbiAgICBhdHRyaWJ1dGVUeXBlOiBudWxsLFxuICAgIGF6aW11dGg6IG51bWJlcixcbiAgICBiYW5kd2lkdGg6IG51bGwsXG4gICAgYmFzZWxpbmVTaGlmdDogbnVsbCxcbiAgICBiYXNlRnJlcXVlbmN5OiBudWxsLFxuICAgIGJhc2VQcm9maWxlOiBudWxsLFxuICAgIGJib3g6IG51bGwsXG4gICAgYmVnaW46IG51bGwsXG4gICAgYmlhczogbnVtYmVyLFxuICAgIGJ5OiBudWxsLFxuICAgIGNhbGNNb2RlOiBudWxsLFxuICAgIGNhcEhlaWdodDogbnVtYmVyLFxuICAgIGNsYXNzTmFtZTogc3BhY2VTZXBhcmF0ZWQsXG4gICAgY2xpcDogbnVsbCxcbiAgICBjbGlwUGF0aDogbnVsbCxcbiAgICBjbGlwUGF0aFVuaXRzOiBudWxsLFxuICAgIGNsaXBSdWxlOiBudWxsLFxuICAgIGNvbG9yOiBudWxsLFxuICAgIGNvbG9ySW50ZXJwb2xhdGlvbjogbnVsbCxcbiAgICBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiBudWxsLFxuICAgIGNvbG9yUHJvZmlsZTogbnVsbCxcbiAgICBjb2xvclJlbmRlcmluZzogbnVsbCxcbiAgICBjb250ZW50OiBudWxsLFxuICAgIGNvbnRlbnRTY3JpcHRUeXBlOiBudWxsLFxuICAgIGNvbnRlbnRTdHlsZVR5cGU6IG51bGwsXG4gICAgY3Jvc3NPcmlnaW46IG51bGwsXG4gICAgY3Vyc29yOiBudWxsLFxuICAgIGN4OiBudWxsLFxuICAgIGN5OiBudWxsLFxuICAgIGQ6IG51bGwsXG4gICAgZGF0YVR5cGU6IG51bGwsXG4gICAgZGVmYXVsdEFjdGlvbjogbnVsbCxcbiAgICBkZXNjZW50OiBudW1iZXIsXG4gICAgZGlmZnVzZUNvbnN0YW50OiBudW1iZXIsXG4gICAgZGlyZWN0aW9uOiBudWxsLFxuICAgIGRpc3BsYXk6IG51bGwsXG4gICAgZHVyOiBudWxsLFxuICAgIGRpdmlzb3I6IG51bWJlcixcbiAgICBkb21pbmFudEJhc2VsaW5lOiBudWxsLFxuICAgIGRvd25sb2FkOiBib29sZWFuLFxuICAgIGR4OiBudWxsLFxuICAgIGR5OiBudWxsLFxuICAgIGVkZ2VNb2RlOiBudWxsLFxuICAgIGVkaXRhYmxlOiBudWxsLFxuICAgIGVsZXZhdGlvbjogbnVtYmVyLFxuICAgIGVuYWJsZUJhY2tncm91bmQ6IG51bGwsXG4gICAgZW5kOiBudWxsLFxuICAgIGV2ZW50OiBudWxsLFxuICAgIGV4cG9uZW50OiBudW1iZXIsXG4gICAgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDogbnVsbCxcbiAgICBmaWxsOiBudWxsLFxuICAgIGZpbGxPcGFjaXR5OiBudW1iZXIsXG4gICAgZmlsbFJ1bGU6IG51bGwsXG4gICAgZmlsdGVyOiBudWxsLFxuICAgIGZpbHRlclJlczogbnVsbCxcbiAgICBmaWx0ZXJVbml0czogbnVsbCxcbiAgICBmbG9vZENvbG9yOiBudWxsLFxuICAgIGZsb29kT3BhY2l0eTogbnVsbCxcbiAgICBmb2N1c2FibGU6IG51bGwsXG4gICAgZm9jdXNIaWdobGlnaHQ6IG51bGwsXG4gICAgZm9udEZhbWlseTogbnVsbCxcbiAgICBmb250U2l6ZTogbnVsbCxcbiAgICBmb250U2l6ZUFkanVzdDogbnVsbCxcbiAgICBmb250U3RyZXRjaDogbnVsbCxcbiAgICBmb250U3R5bGU6IG51bGwsXG4gICAgZm9udFZhcmlhbnQ6IG51bGwsXG4gICAgZm9udFdlaWdodDogbnVsbCxcbiAgICBmb3JtYXQ6IG51bGwsXG4gICAgZnI6IG51bGwsXG4gICAgZnJvbTogbnVsbCxcbiAgICBmeDogbnVsbCxcbiAgICBmeTogbnVsbCxcbiAgICBnMTogY29tbWFTZXBhcmF0ZWQsXG4gICAgZzI6IGNvbW1hU2VwYXJhdGVkLFxuICAgIGdseXBoTmFtZTogY29tbWFTZXBhcmF0ZWQsXG4gICAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6IG51bGwsXG4gICAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiBudWxsLFxuICAgIGdseXBoUmVmOiBudWxsLFxuICAgIGdyYWRpZW50VHJhbnNmb3JtOiBudWxsLFxuICAgIGdyYWRpZW50VW5pdHM6IG51bGwsXG4gICAgaGFuZGxlcjogbnVsbCxcbiAgICBoYW5naW5nOiBudW1iZXIsXG4gICAgaGF0Y2hDb250ZW50VW5pdHM6IG51bGwsXG4gICAgaGF0Y2hVbml0czogbnVsbCxcbiAgICBoZWlnaHQ6IG51bGwsXG4gICAgaHJlZjogbnVsbCxcbiAgICBocmVmTGFuZzogbnVsbCxcbiAgICBob3JpekFkdlg6IG51bWJlcixcbiAgICBob3Jpek9yaWdpblg6IG51bWJlcixcbiAgICBob3Jpek9yaWdpblk6IG51bWJlcixcbiAgICBpZDogbnVsbCxcbiAgICBpZGVvZ3JhcGhpYzogbnVtYmVyLFxuICAgIGltYWdlUmVuZGVyaW5nOiBudWxsLFxuICAgIGluaXRpYWxWaXNpYmlsaXR5OiBudWxsLFxuICAgIGluOiBudWxsLFxuICAgIGluMjogbnVsbCxcbiAgICBpbnRlcmNlcHQ6IG51bWJlcixcbiAgICBrOiBudW1iZXIsXG4gICAgazE6IG51bWJlcixcbiAgICBrMjogbnVtYmVyLFxuICAgIGszOiBudW1iZXIsXG4gICAgazQ6IG51bWJlcixcbiAgICBrZXJuZWxNYXRyaXg6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICBrZXJuZWxVbml0TGVuZ3RoOiBudWxsLFxuICAgIGtleVBvaW50czogbnVsbCwgLy8gU0VNSV9DT0xPTl9TRVBBUkFURURcbiAgICBrZXlTcGxpbmVzOiBudWxsLCAvLyBTRU1JX0NPTE9OX1NFUEFSQVRFRFxuICAgIGtleVRpbWVzOiBudWxsLCAvLyBTRU1JX0NPTE9OX1NFUEFSQVRFRFxuICAgIGtlcm5pbmc6IG51bGwsXG4gICAgbGFuZzogbnVsbCxcbiAgICBsZW5ndGhBZGp1c3Q6IG51bGwsXG4gICAgbGV0dGVyU3BhY2luZzogbnVsbCxcbiAgICBsaWdodGluZ0NvbG9yOiBudWxsLFxuICAgIGxpbWl0aW5nQ29uZUFuZ2xlOiBudW1iZXIsXG4gICAgbG9jYWw6IG51bGwsXG4gICAgbWFya2VyRW5kOiBudWxsLFxuICAgIG1hcmtlck1pZDogbnVsbCxcbiAgICBtYXJrZXJTdGFydDogbnVsbCxcbiAgICBtYXJrZXJIZWlnaHQ6IG51bGwsXG4gICAgbWFya2VyVW5pdHM6IG51bGwsXG4gICAgbWFya2VyV2lkdGg6IG51bGwsXG4gICAgbWFzazogbnVsbCxcbiAgICBtYXNrQ29udGVudFVuaXRzOiBudWxsLFxuICAgIG1hc2tVbml0czogbnVsbCxcbiAgICBtYXRoZW1hdGljYWw6IG51bGwsXG4gICAgbWF4OiBudWxsLFxuICAgIG1lZGlhOiBudWxsLFxuICAgIG1lZGlhQ2hhcmFjdGVyRW5jb2Rpbmc6IG51bGwsXG4gICAgbWVkaWFDb250ZW50RW5jb2RpbmdzOiBudWxsLFxuICAgIG1lZGlhU2l6ZTogbnVtYmVyLFxuICAgIG1lZGlhVGltZTogbnVsbCxcbiAgICBtZXRob2Q6IG51bGwsXG4gICAgbWluOiBudWxsLFxuICAgIG1vZGU6IG51bGwsXG4gICAgbmFtZTogbnVsbCxcbiAgICBuYXZEb3duOiBudWxsLFxuICAgIG5hdkRvd25MZWZ0OiBudWxsLFxuICAgIG5hdkRvd25SaWdodDogbnVsbCxcbiAgICBuYXZMZWZ0OiBudWxsLFxuICAgIG5hdk5leHQ6IG51bGwsXG4gICAgbmF2UHJldjogbnVsbCxcbiAgICBuYXZSaWdodDogbnVsbCxcbiAgICBuYXZVcDogbnVsbCxcbiAgICBuYXZVcExlZnQ6IG51bGwsXG4gICAgbmF2VXBSaWdodDogbnVsbCxcbiAgICBudW1PY3RhdmVzOiBudWxsLFxuICAgIG9ic2VydmVyOiBudWxsLFxuICAgIG9mZnNldDogbnVsbCxcbiAgICBvbkFib3J0OiBudWxsLFxuICAgIG9uQWN0aXZhdGU6IG51bGwsXG4gICAgb25BZnRlclByaW50OiBudWxsLFxuICAgIG9uQmVmb3JlUHJpbnQ6IG51bGwsXG4gICAgb25CZWdpbjogbnVsbCxcbiAgICBvbkNhbmNlbDogbnVsbCxcbiAgICBvbkNhblBsYXk6IG51bGwsXG4gICAgb25DYW5QbGF5VGhyb3VnaDogbnVsbCxcbiAgICBvbkNoYW5nZTogbnVsbCxcbiAgICBvbkNsaWNrOiBudWxsLFxuICAgIG9uQ2xvc2U6IG51bGwsXG4gICAgb25Db3B5OiBudWxsLFxuICAgIG9uQ3VlQ2hhbmdlOiBudWxsLFxuICAgIG9uQ3V0OiBudWxsLFxuICAgIG9uRGJsQ2xpY2s6IG51bGwsXG4gICAgb25EcmFnOiBudWxsLFxuICAgIG9uRHJhZ0VuZDogbnVsbCxcbiAgICBvbkRyYWdFbnRlcjogbnVsbCxcbiAgICBvbkRyYWdFeGl0OiBudWxsLFxuICAgIG9uRHJhZ0xlYXZlOiBudWxsLFxuICAgIG9uRHJhZ092ZXI6IG51bGwsXG4gICAgb25EcmFnU3RhcnQ6IG51bGwsXG4gICAgb25Ecm9wOiBudWxsLFxuICAgIG9uRHVyYXRpb25DaGFuZ2U6IG51bGwsXG4gICAgb25FbXB0aWVkOiBudWxsLFxuICAgIG9uRW5kOiBudWxsLFxuICAgIG9uRW5kZWQ6IG51bGwsXG4gICAgb25FcnJvcjogbnVsbCxcbiAgICBvbkZvY3VzOiBudWxsLFxuICAgIG9uRm9jdXNJbjogbnVsbCxcbiAgICBvbkZvY3VzT3V0OiBudWxsLFxuICAgIG9uSGFzaENoYW5nZTogbnVsbCxcbiAgICBvbklucHV0OiBudWxsLFxuICAgIG9uSW52YWxpZDogbnVsbCxcbiAgICBvbktleURvd246IG51bGwsXG4gICAgb25LZXlQcmVzczogbnVsbCxcbiAgICBvbktleVVwOiBudWxsLFxuICAgIG9uTG9hZDogbnVsbCxcbiAgICBvbkxvYWRlZERhdGE6IG51bGwsXG4gICAgb25Mb2FkZWRNZXRhZGF0YTogbnVsbCxcbiAgICBvbkxvYWRTdGFydDogbnVsbCxcbiAgICBvbk1lc3NhZ2U6IG51bGwsXG4gICAgb25Nb3VzZURvd246IG51bGwsXG4gICAgb25Nb3VzZUVudGVyOiBudWxsLFxuICAgIG9uTW91c2VMZWF2ZTogbnVsbCxcbiAgICBvbk1vdXNlTW92ZTogbnVsbCxcbiAgICBvbk1vdXNlT3V0OiBudWxsLFxuICAgIG9uTW91c2VPdmVyOiBudWxsLFxuICAgIG9uTW91c2VVcDogbnVsbCxcbiAgICBvbk1vdXNlV2hlZWw6IG51bGwsXG4gICAgb25PZmZsaW5lOiBudWxsLFxuICAgIG9uT25saW5lOiBudWxsLFxuICAgIG9uUGFnZUhpZGU6IG51bGwsXG4gICAgb25QYWdlU2hvdzogbnVsbCxcbiAgICBvblBhc3RlOiBudWxsLFxuICAgIG9uUGF1c2U6IG51bGwsXG4gICAgb25QbGF5OiBudWxsLFxuICAgIG9uUGxheWluZzogbnVsbCxcbiAgICBvblBvcFN0YXRlOiBudWxsLFxuICAgIG9uUHJvZ3Jlc3M6IG51bGwsXG4gICAgb25SYXRlQ2hhbmdlOiBudWxsLFxuICAgIG9uUmVwZWF0OiBudWxsLFxuICAgIG9uUmVzZXQ6IG51bGwsXG4gICAgb25SZXNpemU6IG51bGwsXG4gICAgb25TY3JvbGw6IG51bGwsXG4gICAgb25TZWVrZWQ6IG51bGwsXG4gICAgb25TZWVraW5nOiBudWxsLFxuICAgIG9uU2VsZWN0OiBudWxsLFxuICAgIG9uU2hvdzogbnVsbCxcbiAgICBvblN0YWxsZWQ6IG51bGwsXG4gICAgb25TdG9yYWdlOiBudWxsLFxuICAgIG9uU3VibWl0OiBudWxsLFxuICAgIG9uU3VzcGVuZDogbnVsbCxcbiAgICBvblRpbWVVcGRhdGU6IG51bGwsXG4gICAgb25Ub2dnbGU6IG51bGwsXG4gICAgb25VbmxvYWQ6IG51bGwsXG4gICAgb25Wb2x1bWVDaGFuZ2U6IG51bGwsXG4gICAgb25XYWl0aW5nOiBudWxsLFxuICAgIG9uWm9vbTogbnVsbCxcbiAgICBvcGFjaXR5OiBudWxsLFxuICAgIG9wZXJhdG9yOiBudWxsLFxuICAgIG9yZGVyOiBudWxsLFxuICAgIG9yaWVudDogbnVsbCxcbiAgICBvcmllbnRhdGlvbjogbnVsbCxcbiAgICBvcmlnaW46IG51bGwsXG4gICAgb3ZlcmZsb3c6IG51bGwsXG4gICAgb3ZlcmxheTogbnVsbCxcbiAgICBvdmVybGluZVBvc2l0aW9uOiBudW1iZXIsXG4gICAgb3ZlcmxpbmVUaGlja25lc3M6IG51bWJlcixcbiAgICBwYWludE9yZGVyOiBudWxsLFxuICAgIHBhbm9zZTE6IG51bGwsXG4gICAgcGF0aDogbnVsbCxcbiAgICBwYXRoTGVuZ3RoOiBudW1iZXIsXG4gICAgcGF0dGVybkNvbnRlbnRVbml0czogbnVsbCxcbiAgICBwYXR0ZXJuVHJhbnNmb3JtOiBudWxsLFxuICAgIHBhdHRlcm5Vbml0czogbnVsbCxcbiAgICBwaGFzZTogbnVsbCxcbiAgICBwaW5nOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBwaXRjaDogbnVsbCxcbiAgICBwbGF5YmFja09yZGVyOiBudWxsLFxuICAgIHBvaW50ZXJFdmVudHM6IG51bGwsXG4gICAgcG9pbnRzOiBudWxsLFxuICAgIHBvaW50c0F0WDogbnVtYmVyLFxuICAgIHBvaW50c0F0WTogbnVtYmVyLFxuICAgIHBvaW50c0F0WjogbnVtYmVyLFxuICAgIHByZXNlcnZlQWxwaGE6IG51bGwsXG4gICAgcHJlc2VydmVBc3BlY3RSYXRpbzogbnVsbCxcbiAgICBwcmltaXRpdmVVbml0czogbnVsbCxcbiAgICBwcm9wYWdhdGU6IG51bGwsXG4gICAgcHJvcGVydHk6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICByOiBudWxsLFxuICAgIHJhZGl1czogbnVsbCxcbiAgICByZWZlcnJlclBvbGljeTogbnVsbCxcbiAgICByZWZYOiBudWxsLFxuICAgIHJlZlk6IG51bGwsXG4gICAgcmVsOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsXG4gICAgcmV2OiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsXG4gICAgcmVuZGVyaW5nSW50ZW50OiBudWxsLFxuICAgIHJlcGVhdENvdW50OiBudWxsLFxuICAgIHJlcGVhdER1cjogbnVsbCxcbiAgICByZXF1aXJlZEV4dGVuc2lvbnM6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICByZXF1aXJlZEZlYXR1cmVzOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsXG4gICAgcmVxdWlyZWRGb250czogY29tbWFPclNwYWNlU2VwYXJhdGVkLFxuICAgIHJlcXVpcmVkRm9ybWF0czogY29tbWFPclNwYWNlU2VwYXJhdGVkLFxuICAgIHJlc291cmNlOiBudWxsLFxuICAgIHJlc3RhcnQ6IG51bGwsXG4gICAgcmVzdWx0OiBudWxsLFxuICAgIHJvdGF0ZTogbnVsbCxcbiAgICByeDogbnVsbCxcbiAgICByeTogbnVsbCxcbiAgICBzY2FsZTogbnVsbCxcbiAgICBzZWVkOiBudWxsLFxuICAgIHNoYXBlUmVuZGVyaW5nOiBudWxsLFxuICAgIHNpZGU6IG51bGwsXG4gICAgc2xvcGU6IG51bGwsXG4gICAgc25hcHNob3RUaW1lOiBudWxsLFxuICAgIHNwZWN1bGFyQ29uc3RhbnQ6IG51bWJlcixcbiAgICBzcGVjdWxhckV4cG9uZW50OiBudW1iZXIsXG4gICAgc3ByZWFkTWV0aG9kOiBudWxsLFxuICAgIHNwYWNpbmc6IG51bGwsXG4gICAgc3RhcnRPZmZzZXQ6IG51bGwsXG4gICAgc3RkRGV2aWF0aW9uOiBudWxsLFxuICAgIHN0ZW1oOiBudWxsLFxuICAgIHN0ZW12OiBudWxsLFxuICAgIHN0aXRjaFRpbGVzOiBudWxsLFxuICAgIHN0b3BDb2xvcjogbnVsbCxcbiAgICBzdG9wT3BhY2l0eTogbnVsbCxcbiAgICBzdHJpa2V0aHJvdWdoUG9zaXRpb246IG51bWJlcixcbiAgICBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOiBudW1iZXIsXG4gICAgc3RyaW5nOiBudWxsLFxuICAgIHN0cm9rZTogbnVsbCxcbiAgICBzdHJva2VEYXNoQXJyYXk6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICBzdHJva2VEYXNoT2Zmc2V0OiBudWxsLFxuICAgIHN0cm9rZUxpbmVDYXA6IG51bGwsXG4gICAgc3Ryb2tlTGluZUpvaW46IG51bGwsXG4gICAgc3Ryb2tlTWl0ZXJMaW1pdDogbnVtYmVyLFxuICAgIHN0cm9rZU9wYWNpdHk6IG51bWJlcixcbiAgICBzdHJva2VXaWR0aDogbnVsbCxcbiAgICBzdHlsZTogbnVsbCxcbiAgICBzdXJmYWNlU2NhbGU6IG51bWJlcixcbiAgICBzeW5jQmVoYXZpb3I6IG51bGwsXG4gICAgc3luY0JlaGF2aW9yRGVmYXVsdDogbnVsbCxcbiAgICBzeW5jTWFzdGVyOiBudWxsLFxuICAgIHN5bmNUb2xlcmFuY2U6IG51bGwsXG4gICAgc3luY1RvbGVyYW5jZURlZmF1bHQ6IG51bGwsXG4gICAgc3lzdGVtTGFuZ3VhZ2U6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIHRhYmxlVmFsdWVzOiBudWxsLFxuICAgIHRhcmdldDogbnVsbCxcbiAgICB0YXJnZXRYOiBudW1iZXIsXG4gICAgdGFyZ2V0WTogbnVtYmVyLFxuICAgIHRleHRBbmNob3I6IG51bGwsXG4gICAgdGV4dERlY29yYXRpb246IG51bGwsXG4gICAgdGV4dFJlbmRlcmluZzogbnVsbCxcbiAgICB0ZXh0TGVuZ3RoOiBudWxsLFxuICAgIHRpbWVsaW5lQmVnaW46IG51bGwsXG4gICAgdGl0bGU6IG51bGwsXG4gICAgdHJhbnNmb3JtQmVoYXZpb3I6IG51bGwsXG4gICAgdHlwZTogbnVsbCxcbiAgICB0eXBlT2Y6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICB0bzogbnVsbCxcbiAgICB0cmFuc2Zvcm06IG51bGwsXG4gICAgdHJhbnNmb3JtT3JpZ2luOiBudWxsLFxuICAgIHUxOiBudWxsLFxuICAgIHUyOiBudWxsLFxuICAgIHVuZGVybGluZVBvc2l0aW9uOiBudW1iZXIsXG4gICAgdW5kZXJsaW5lVGhpY2tuZXNzOiBudW1iZXIsXG4gICAgdW5pY29kZTogbnVsbCxcbiAgICB1bmljb2RlQmlkaTogbnVsbCxcbiAgICB1bmljb2RlUmFuZ2U6IG51bGwsXG4gICAgdW5pdHNQZXJFbTogbnVtYmVyLFxuICAgIHZhbHVlczogbnVsbCxcbiAgICB2QWxwaGFiZXRpYzogbnVtYmVyLFxuICAgIHZNYXRoZW1hdGljYWw6IG51bWJlcixcbiAgICB2ZWN0b3JFZmZlY3Q6IG51bGwsXG4gICAgdkhhbmdpbmc6IG51bWJlcixcbiAgICB2SWRlb2dyYXBoaWM6IG51bWJlcixcbiAgICB2ZXJzaW9uOiBudWxsLFxuICAgIHZlcnRBZHZZOiBudW1iZXIsXG4gICAgdmVydE9yaWdpblg6IG51bWJlcixcbiAgICB2ZXJ0T3JpZ2luWTogbnVtYmVyLFxuICAgIHZpZXdCb3g6IG51bGwsXG4gICAgdmlld1RhcmdldDogbnVsbCxcbiAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgIHdpZHRoOiBudWxsLFxuICAgIHdpZHRoczogbnVsbCxcbiAgICB3b3JkU3BhY2luZzogbnVsbCxcbiAgICB3cml0aW5nTW9kZTogbnVsbCxcbiAgICB4OiBudWxsLFxuICAgIHgxOiBudWxsLFxuICAgIHgyOiBudWxsLFxuICAgIHhDaGFubmVsU2VsZWN0b3I6IG51bGwsXG4gICAgeEhlaWdodDogbnVtYmVyLFxuICAgIHk6IG51bGwsXG4gICAgeTE6IG51bGwsXG4gICAgeTI6IG51bGwsXG4gICAgeUNoYW5uZWxTZWxlY3RvcjogbnVsbCxcbiAgICB6OiBudWxsLFxuICAgIHpvb21BbmRQYW46IG51bGxcbiAgfSxcbiAgc3BhY2U6ICdzdmcnLFxuICB0cmFuc2Zvcm06IGNhc2VTZW5zaXRpdmVUcmFuc2Zvcm1cbn0pXG4iLCAiaW1wb3J0IHtjcmVhdGV9IGZyb20gJy4vdXRpbC9jcmVhdGUuanMnXG5cbmV4cG9ydCBjb25zdCB4bGluayA9IGNyZWF0ZSh7XG4gIHByb3BlcnRpZXM6IHtcbiAgICB4TGlua0FjdHVhdGU6IG51bGwsXG4gICAgeExpbmtBcmNSb2xlOiBudWxsLFxuICAgIHhMaW5rSHJlZjogbnVsbCxcbiAgICB4TGlua1JvbGU6IG51bGwsXG4gICAgeExpbmtTaG93OiBudWxsLFxuICAgIHhMaW5rVGl0bGU6IG51bGwsXG4gICAgeExpbmtUeXBlOiBudWxsXG4gIH0sXG4gIHNwYWNlOiAneGxpbmsnLFxuICB0cmFuc2Zvcm0oXywgcHJvcGVydHkpIHtcbiAgICByZXR1cm4gJ3hsaW5rOicgKyBwcm9wZXJ0eS5zbGljZSg1KS50b0xvd2VyQ2FzZSgpXG4gIH1cbn0pXG4iLCAiaW1wb3J0IHtjcmVhdGV9IGZyb20gJy4vdXRpbC9jcmVhdGUuanMnXG5pbXBvcnQge2Nhc2VJbnNlbnNpdGl2ZVRyYW5zZm9ybX0gZnJvbSAnLi91dGlsL2Nhc2UtaW5zZW5zaXRpdmUtdHJhbnNmb3JtLmpzJ1xuXG5leHBvcnQgY29uc3QgeG1sbnMgPSBjcmVhdGUoe1xuICBhdHRyaWJ1dGVzOiB7eG1sbnN4bGluazogJ3htbG5zOnhsaW5rJ30sXG4gIHByb3BlcnRpZXM6IHt4bWxuc1hMaW5rOiBudWxsLCB4bWxuczogbnVsbH0sXG4gIHNwYWNlOiAneG1sbnMnLFxuICB0cmFuc2Zvcm06IGNhc2VJbnNlbnNpdGl2ZVRyYW5zZm9ybVxufSlcbiIsICJpbXBvcnQge2NyZWF0ZX0gZnJvbSAnLi91dGlsL2NyZWF0ZS5qcydcblxuZXhwb3J0IGNvbnN0IHhtbCA9IGNyZWF0ZSh7XG4gIHByb3BlcnRpZXM6IHt4bWxCYXNlOiBudWxsLCB4bWxMYW5nOiBudWxsLCB4bWxTcGFjZTogbnVsbH0sXG4gIHNwYWNlOiAneG1sJyxcbiAgdHJhbnNmb3JtKF8sIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuICd4bWw6JyArIHByb3BlcnR5LnNsaWNlKDMpLnRvTG93ZXJDYXNlKClcbiAgfVxufSlcbiIsICIvKipcbiAqIFNwZWNpYWwgY2FzZXMgZm9yIFJlYWN0IChgUmVjb3JkPHN0cmluZywgc3RyaW5nPmApLlxuICpcbiAqIGBoYXN0YCBpcyBjbG9zZSB0byBgUmVhY3RgIGJ1dCBkaWZmZXJzIGluIGEgY291cGxlIG9mIGNhc2VzLlxuICogVG8gZ2V0IGEgUmVhY3QgcHJvcGVydHkgZnJvbSBhIGhhc3QgcHJvcGVydHksXG4gKiBjaGVjayBpZiBpdCBpcyBpbiBgaGFzdFRvUmVhY3RgLlxuICogSWYgaXQgaXMsIHVzZSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZTtcbiAqIG90aGVyd2lzZSwgdXNlIHRoZSBoYXN0IHByb3BlcnR5LlxuICpcbiAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5leHBvcnQgY29uc3QgaGFzdFRvUmVhY3QgPSB7XG4gIGNsYXNzSWQ6ICdjbGFzc0lEJyxcbiAgZGF0YVR5cGU6ICdkYXRhdHlwZScsXG4gIGl0ZW1JZDogJ2l0ZW1JRCcsXG4gIHN0cm9rZURhc2hBcnJheTogJ3N0cm9rZURhc2hhcnJheScsXG4gIHN0cm9rZURhc2hPZmZzZXQ6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgc3Ryb2tlTGluZUNhcDogJ3N0cm9rZUxpbmVjYXAnLFxuICBzdHJva2VMaW5lSm9pbjogJ3N0cm9rZUxpbmVqb2luJyxcbiAgc3Ryb2tlTWl0ZXJMaW1pdDogJ3N0cm9rZU1pdGVybGltaXQnLFxuICB0eXBlT2Y6ICd0eXBlb2YnLFxuICB4TGlua0FjdHVhdGU6ICd4bGlua0FjdHVhdGUnLFxuICB4TGlua0FyY1JvbGU6ICd4bGlua0FyY3JvbGUnLFxuICB4TGlua0hyZWY6ICd4bGlua0hyZWYnLFxuICB4TGlua1JvbGU6ICd4bGlua1JvbGUnLFxuICB4TGlua1Nob3c6ICd4bGlua1Nob3cnLFxuICB4TGlua1RpdGxlOiAneGxpbmtUaXRsZScsXG4gIHhMaW5rVHlwZTogJ3hsaW5rVHlwZScsXG4gIHhtbG5zWExpbms6ICd4bWxuc1hsaW5rJ1xufVxuIiwgIi8qKlxuICogQGltcG9ydCB7U2NoZW1hfSBmcm9tICdwcm9wZXJ0eS1pbmZvcm1hdGlvbidcbiAqL1xuXG5pbXBvcnQge0RlZmluZWRJbmZvfSBmcm9tICcuL3V0aWwvZGVmaW5lZC1pbmZvLmpzJ1xuaW1wb3J0IHtJbmZvfSBmcm9tICcuL3V0aWwvaW5mby5qcydcbmltcG9ydCB7bm9ybWFsaXplfSBmcm9tICcuL25vcm1hbGl6ZS5qcydcblxuY29uc3QgY2FwID0gL1tBLVpdL2dcbmNvbnN0IGRhc2ggPSAvLVthLXpdL2dcbmNvbnN0IHZhbGlkID0gL15kYXRhWy1cXHcuOl0rJC9pXG5cbi8qKlxuICogTG9vayB1cCBpbmZvIG9uIGEgcHJvcGVydHkuXG4gKlxuICogSW4gbW9zdCBjYXNlcyB0aGUgZ2l2ZW4gYHNjaGVtYWAgY29udGFpbnMgaW5mbyBvbiB0aGUgcHJvcGVydHkuXG4gKiBBbGwgc3RhbmRhcmQsXG4gKiBtb3N0IGxlZ2FjeSxcbiAqIGFuZCBzb21lIG5vbi1zdGFuZGFyZCBwcm9wZXJ0aWVzIGFyZSBzdXBwb3J0ZWQuXG4gKiBGb3IgdGhlc2UgY2FzZXMsXG4gKiB0aGUgcmV0dXJuZWQgYEluZm9gIGhhcyBoaW50cyBhYm91dCB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxuICpcbiAqIGBuYW1lYCBjYW4gYWxzbyBiZSBhIHZhbGlkIGRhdGEgYXR0cmlidXRlIG9yIHByb3BlcnR5LFxuICogaW4gd2hpY2ggY2FzZSBhbiBgSW5mb2Agb2JqZWN0IHdpdGggdGhlIGNvcnJlY3RseSBjYXNlZCBgYXR0cmlidXRlYCBhbmRcbiAqIGBwcm9wZXJ0eWAgaXMgcmV0dXJuZWQuXG4gKlxuICogYG5hbWVgIGNhbiBiZSBhbiB1bmtub3duIGF0dHJpYnV0ZSxcbiAqIGluIHdoaWNoIGNhc2UgYW4gYEluZm9gIG9iamVjdCB3aXRoIGBhdHRyaWJ1dGVgIGFuZCBgcHJvcGVydHlgIHNldCB0byB0aGVcbiAqIGdpdmVuIG5hbWUgaXMgcmV0dXJuZWQuXG4gKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gcHJvdmlkZSB1bnN1cHBvcnRlZCBsZWdhY3kgb3IgcmVjZW50bHkgc3BlY2NlZFxuICogcHJvcGVydGllcy5cbiAqXG4gKlxuICogQHBhcmFtIHtTY2hlbWF9IHNjaGVtYVxuICogICBTY2hlbWE7XG4gKiAgIGVpdGhlciB0aGUgYGh0bWxgIG9yIGBzdmdgIGV4cG9ydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBBbiBhdHRyaWJ1dGUtbGlrZSBvciBwcm9wZXJ0eS1saWtlIG5hbWU7XG4gKiAgIGl0IHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggYG5vcm1hbGl6ZWAgdG8gaG9wZWZ1bGx5IGZpbmQgdGhlIGNvcnJlY3QgaW5mby5cbiAqIEByZXR1cm5zIHtJbmZvfVxuICogICBJbmZvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZChzY2hlbWEsIHZhbHVlKSB7XG4gIGNvbnN0IG5vcm1hbCA9IG5vcm1hbGl6ZSh2YWx1ZSlcbiAgbGV0IHByb3BlcnR5ID0gdmFsdWVcbiAgbGV0IFR5cGUgPSBJbmZvXG5cbiAgaWYgKG5vcm1hbCBpbiBzY2hlbWEubm9ybWFsKSB7XG4gICAgcmV0dXJuIHNjaGVtYS5wcm9wZXJ0eVtzY2hlbWEubm9ybWFsW25vcm1hbF1dXG4gIH1cblxuICBpZiAobm9ybWFsLmxlbmd0aCA+IDQgJiYgbm9ybWFsLnNsaWNlKDAsIDQpID09PSAnZGF0YScgJiYgdmFsaWQudGVzdCh2YWx1ZSkpIHtcbiAgICAvLyBBdHRyaWJ1dGUgb3IgcHJvcGVydHkuXG4gICAgaWYgKHZhbHVlLmNoYXJBdCg0KSA9PT0gJy0nKSB7XG4gICAgICAvLyBUdXJuIGl0IGludG8gYSBwcm9wZXJ0eS5cbiAgICAgIGNvbnN0IHJlc3QgPSB2YWx1ZS5zbGljZSg1KS5yZXBsYWNlKGRhc2gsIGNhbWVsY2FzZSlcbiAgICAgIHByb3BlcnR5ID0gJ2RhdGEnICsgcmVzdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJlc3Quc2xpY2UoMSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHVybiBpdCBpbnRvIGFuIGF0dHJpYnV0ZS5cbiAgICAgIGNvbnN0IHJlc3QgPSB2YWx1ZS5zbGljZSg0KVxuXG4gICAgICBpZiAoIWRhc2gudGVzdChyZXN0KSkge1xuICAgICAgICBsZXQgZGFzaGVzID0gcmVzdC5yZXBsYWNlKGNhcCwga2ViYWIpXG5cbiAgICAgICAgaWYgKGRhc2hlcy5jaGFyQXQoMCkgIT09ICctJykge1xuICAgICAgICAgIGRhc2hlcyA9ICctJyArIGRhc2hlc1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSAnZGF0YScgKyBkYXNoZXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBUeXBlID0gRGVmaW5lZEluZm9cbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShwcm9wZXJ0eSwgdmFsdWUpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9ICQwXG4gKiAgIFZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgS2ViYWIuXG4gKi9cbmZ1bmN0aW9uIGtlYmFiKCQwKSB7XG4gIHJldHVybiAnLScgKyAkMC50b0xvd2VyQ2FzZSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9ICQwXG4gKiAgIFZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgQ2FtZWwuXG4gKi9cbmZ1bmN0aW9uIGNhbWVsY2FzZSgkMCkge1xuICByZXR1cm4gJDAuY2hhckF0KDEpLnRvVXBwZXJDYXNlKClcbn1cbiIsICIvLyBOb3RlOiB0eXBlcyBleHBvc2VkIGZyb20gYGluZGV4LmQudHNgLlxuaW1wb3J0IHttZXJnZX0gZnJvbSAnLi9saWIvdXRpbC9tZXJnZS5qcydcbmltcG9ydCB7YXJpYX0gZnJvbSAnLi9saWIvYXJpYS5qcydcbmltcG9ydCB7aHRtbCBhcyBodG1sQmFzZX0gZnJvbSAnLi9saWIvaHRtbC5qcydcbmltcG9ydCB7c3ZnIGFzIHN2Z0Jhc2V9IGZyb20gJy4vbGliL3N2Zy5qcydcbmltcG9ydCB7eGxpbmt9IGZyb20gJy4vbGliL3hsaW5rLmpzJ1xuaW1wb3J0IHt4bWxuc30gZnJvbSAnLi9saWIveG1sbnMuanMnXG5pbXBvcnQge3htbH0gZnJvbSAnLi9saWIveG1sLmpzJ1xuXG5leHBvcnQge2hhc3RUb1JlYWN0fSBmcm9tICcuL2xpYi9oYXN0LXRvLXJlYWN0LmpzJ1xuXG5leHBvcnQgY29uc3QgaHRtbCA9IG1lcmdlKFthcmlhLCBodG1sQmFzZSwgeGxpbmssIHhtbG5zLCB4bWxdLCAnaHRtbCcpXG5cbmV4cG9ydCB7ZmluZH0gZnJvbSAnLi9saWIvZmluZC5qcydcbmV4cG9ydCB7bm9ybWFsaXplfSBmcm9tICcuL2xpYi9ub3JtYWxpemUuanMnXG5cbmV4cG9ydCBjb25zdCBzdmcgPSBtZXJnZShbYXJpYSwgc3ZnQmFzZSwgeGxpbmssIHhtbG5zLCB4bWxdLCAnc3ZnJylcbiIsICIvKipcbiAqIEB0eXBlZGVmIENvcmVPcHRpb25zXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5QXJyYXk8c3RyaW5nPn0gW3N1YnNldD1bXV1cbiAqICAgV2hldGhlciB0byBvbmx5IGVzY2FwZSB0aGUgZ2l2ZW4gc3Vic2V0IG9mIGNoYXJhY3RlcnMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtlc2NhcGVPbmx5PWZhbHNlXVxuICogICBXaGV0aGVyIHRvIG9ubHkgZXNjYXBlIHBvc3NpYmx5IGRhbmdlcm91cyBjaGFyYWN0ZXJzLlxuICogICBUaG9zZSBjaGFyYWN0ZXJzIGFyZSBgXCJgLCBgJmAsIGAnYCwgYDxgLCBgPmAsIGFuZCBgYCBgIGBgLlxuICpcbiAqIEB0eXBlZGVmIEZvcm1hdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KGNvZGU6IG51bWJlciwgbmV4dDogbnVtYmVyLCBvcHRpb25zOiBDb3JlV2l0aEZvcm1hdE9wdGlvbnMpID0+IHN0cmluZ30gZm9ybWF0XG4gKiAgIEZvcm1hdCBzdHJhdGVneS5cbiAqXG4gKiBAdHlwZWRlZiB7Q29yZU9wdGlvbnMgJiBGb3JtYXRPcHRpb25zICYgaW1wb3J0KCcuL3V0aWwvZm9ybWF0LXNtYXJ0LmpzJykuRm9ybWF0U21hcnRPcHRpb25zfSBDb3JlV2l0aEZvcm1hdE9wdGlvbnNcbiAqL1xuXG5jb25zdCBkZWZhdWx0U3Vic2V0UmVnZXggPSAvW1wiJic8PmBdL2dcbmNvbnN0IHN1cnJvZ2F0ZVBhaXJzUmVnZXggPSAvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nXG5jb25zdCBjb250cm9sQ2hhcmFjdGVyc1JlZ2V4ID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXgsIHVuaWNvcm4vbm8taGV4LWVzY2FwZVxuICAvW1xceDAxLVxcdFxcdlxcZlxceDBFLVxceDFGXFx4N0ZcXHg4MVxceDhEXFx4OEZcXHg5MFxceDlEXFx4QTAtXFx1RkZGRl0vZ1xuY29uc3QgcmVnZXhFc2NhcGVSZWdleCA9IC9bfFxcXFx7fSgpW1xcXV4kKyo/Ll0vZ1xuXG4vKiogQHR5cGUge1dlYWtNYXA8UmVhZG9ubHlBcnJheTxzdHJpbmc+LCBSZWdFeHA+fSAqL1xuY29uc3Qgc3Vic2V0VG9SZWdleENhY2hlID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIEVuY29kZSBjZXJ0YWluIGNoYXJhY3RlcnMgaW4gYHZhbHVlYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7Q29yZVdpdGhGb3JtYXRPcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29yZSh2YWx1ZSwgb3B0aW9ucykge1xuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoXG4gICAgb3B0aW9ucy5zdWJzZXRcbiAgICAgID8gY2hhcmFjdGVyc1RvRXhwcmVzc2lvbkNhY2hlZChvcHRpb25zLnN1YnNldClcbiAgICAgIDogZGVmYXVsdFN1YnNldFJlZ2V4LFxuICAgIGJhc2ljXG4gIClcblxuICBpZiAob3B0aW9ucy5zdWJzZXQgfHwgb3B0aW9ucy5lc2NhcGVPbmx5KSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICByZXR1cm4gKFxuICAgIHZhbHVlXG4gICAgICAvLyBTdXJyb2dhdGUgcGFpcnMuXG4gICAgICAucmVwbGFjZShzdXJyb2dhdGVQYWlyc1JlZ2V4LCBzdXJyb2dhdGUpXG4gICAgICAvLyBCTVAgY29udHJvbCBjaGFyYWN0ZXJzIChDMCBleGNlcHQgZm9yIExGLCBDUiwgU1A7IERFTDsgYW5kIHNvbWUgbW9yZVxuICAgICAgLy8gbm9uLUFTQ0lJIG9uZXMpLlxuICAgICAgLnJlcGxhY2UoY29udHJvbENoYXJhY3RlcnNSZWdleCwgYmFzaWMpXG4gIClcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhaXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbGxcbiAgICovXG4gIGZ1bmN0aW9uIHN1cnJvZ2F0ZShwYWlyLCBpbmRleCwgYWxsKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZm9ybWF0KFxuICAgICAgKHBhaXIuY2hhckNvZGVBdCgwKSAtIDB4ZDgwMCkgKiAweDQwMCArXG4gICAgICAgIHBhaXIuY2hhckNvZGVBdCgxKSAtXG4gICAgICAgIDB4ZGMwMCArXG4gICAgICAgIDB4MTAwMDAsXG4gICAgICBhbGwuY2hhckNvZGVBdChpbmRleCArIDIpLFxuICAgICAgb3B0aW9uc1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWxsXG4gICAqL1xuICBmdW5jdGlvbiBiYXNpYyhjaGFyYWN0ZXIsIGluZGV4LCBhbGwpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5mb3JtYXQoXG4gICAgICBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKSxcbiAgICAgIGFsbC5jaGFyQ29kZUF0KGluZGV4ICsgMSksXG4gICAgICBvcHRpb25zXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgY2FjaGVzIHRoZSByZXN1bHQgb2YgYGNoYXJhY3RlcnNUb0V4cHJlc3Npb25gIHdpdGggYSBXZWFrTWFwLlxuICogVGhpcyBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIHRvb2xpbmcgY2FsbHMgYGNoYXJhY3RlcnNUb0V4cHJlc3Npb25gIHJlcGVhdGVkbHlcbiAqIHdpdGggdGhlIHNhbWUgc3Vic2V0LlxuICpcbiAqIEBwYXJhbSB7UmVhZG9ubHlBcnJheTxzdHJpbmc+fSBzdWJzZXRcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIGNoYXJhY3RlcnNUb0V4cHJlc3Npb25DYWNoZWQoc3Vic2V0KSB7XG4gIGxldCBjYWNoZWQgPSBzdWJzZXRUb1JlZ2V4Q2FjaGUuZ2V0KHN1YnNldClcblxuICBpZiAoIWNhY2hlZCkge1xuICAgIGNhY2hlZCA9IGNoYXJhY3RlcnNUb0V4cHJlc3Npb24oc3Vic2V0KVxuICAgIHN1YnNldFRvUmVnZXhDYWNoZS5zZXQoc3Vic2V0LCBjYWNoZWQpXG4gIH1cblxuICByZXR1cm4gY2FjaGVkXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkb25seUFycmF5PHN0cmluZz59IHN1YnNldFxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gY2hhcmFjdGVyc1RvRXhwcmVzc2lvbihzdWJzZXQpIHtcbiAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICBjb25zdCBncm91cHMgPSBbXVxuICBsZXQgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgc3Vic2V0Lmxlbmd0aCkge1xuICAgIGdyb3Vwcy5wdXNoKHN1YnNldFtpbmRleF0ucmVwbGFjZShyZWdleEVzY2FwZVJlZ2V4LCAnXFxcXCQmJykpXG4gIH1cblxuICByZXR1cm4gbmV3IFJlZ0V4cCgnKD86JyArIGdyb3Vwcy5qb2luKCd8JykgKyAnKScsICdnJylcbn1cbiIsICJjb25zdCBoZXhhZGVjaW1hbFJlZ2V4ID0gL1tcXGRBLUZhLWZdL1xuXG4vKipcbiAqIENvbmZpZ3VyYWJsZSB3YXlzIHRvIGVuY29kZSBjaGFyYWN0ZXJzIGFzIGhleGFkZWNpbWFsIHJlZmVyZW5jZXMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBvbWl0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9IZXhhZGVjaW1hbChjb2RlLCBuZXh0LCBvbWl0KSB7XG4gIGNvbnN0IHZhbHVlID0gJyYjeCcgKyBjb2RlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBvbWl0ICYmIG5leHQgJiYgIWhleGFkZWNpbWFsUmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHQpKVxuICAgID8gdmFsdWVcbiAgICA6IHZhbHVlICsgJzsnXG59XG4iLCAiY29uc3QgZGVjaW1hbFJlZ2V4ID0gL1xcZC9cblxuLyoqXG4gKiBDb25maWd1cmFibGUgd2F5cyB0byBlbmNvZGUgY2hhcmFjdGVycyBhcyBkZWNpbWFsIHJlZmVyZW5jZXMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBvbWl0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9EZWNpbWFsKGNvZGUsIG5leHQsIG9taXQpIHtcbiAgY29uc3QgdmFsdWUgPSAnJiMnICsgU3RyaW5nKGNvZGUpXG4gIHJldHVybiBvbWl0ICYmIG5leHQgJiYgIWRlY2ltYWxSZWdleC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUobmV4dCkpXG4gICAgPyB2YWx1ZVxuICAgIDogdmFsdWUgKyAnOydcbn1cbiIsICIvKipcbiAqIExpc3Qgb2YgbGVnYWN5IEhUTUwgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgdGhhdCBkb25cdTIwMTl0IG5lZWQgYSB0cmFpbGluZyBzZW1pY29sb24uXG4gKlxuICogQHR5cGUge0FycmF5PHN0cmluZz59XG4gKi9cbmV4cG9ydCBjb25zdCBjaGFyYWN0ZXJFbnRpdGllc0xlZ2FjeSA9IFtcbiAgJ0FFbGlnJyxcbiAgJ0FNUCcsXG4gICdBYWN1dGUnLFxuICAnQWNpcmMnLFxuICAnQWdyYXZlJyxcbiAgJ0FyaW5nJyxcbiAgJ0F0aWxkZScsXG4gICdBdW1sJyxcbiAgJ0NPUFknLFxuICAnQ2NlZGlsJyxcbiAgJ0VUSCcsXG4gICdFYWN1dGUnLFxuICAnRWNpcmMnLFxuICAnRWdyYXZlJyxcbiAgJ0V1bWwnLFxuICAnR1QnLFxuICAnSWFjdXRlJyxcbiAgJ0ljaXJjJyxcbiAgJ0lncmF2ZScsXG4gICdJdW1sJyxcbiAgJ0xUJyxcbiAgJ050aWxkZScsXG4gICdPYWN1dGUnLFxuICAnT2NpcmMnLFxuICAnT2dyYXZlJyxcbiAgJ09zbGFzaCcsXG4gICdPdGlsZGUnLFxuICAnT3VtbCcsXG4gICdRVU9UJyxcbiAgJ1JFRycsXG4gICdUSE9STicsXG4gICdVYWN1dGUnLFxuICAnVWNpcmMnLFxuICAnVWdyYXZlJyxcbiAgJ1V1bWwnLFxuICAnWWFjdXRlJyxcbiAgJ2FhY3V0ZScsXG4gICdhY2lyYycsXG4gICdhY3V0ZScsXG4gICdhZWxpZycsXG4gICdhZ3JhdmUnLFxuICAnYW1wJyxcbiAgJ2FyaW5nJyxcbiAgJ2F0aWxkZScsXG4gICdhdW1sJyxcbiAgJ2JydmJhcicsXG4gICdjY2VkaWwnLFxuICAnY2VkaWwnLFxuICAnY2VudCcsXG4gICdjb3B5JyxcbiAgJ2N1cnJlbicsXG4gICdkZWcnLFxuICAnZGl2aWRlJyxcbiAgJ2VhY3V0ZScsXG4gICdlY2lyYycsXG4gICdlZ3JhdmUnLFxuICAnZXRoJyxcbiAgJ2V1bWwnLFxuICAnZnJhYzEyJyxcbiAgJ2ZyYWMxNCcsXG4gICdmcmFjMzQnLFxuICAnZ3QnLFxuICAnaWFjdXRlJyxcbiAgJ2ljaXJjJyxcbiAgJ2lleGNsJyxcbiAgJ2lncmF2ZScsXG4gICdpcXVlc3QnLFxuICAnaXVtbCcsXG4gICdsYXF1bycsXG4gICdsdCcsXG4gICdtYWNyJyxcbiAgJ21pY3JvJyxcbiAgJ21pZGRvdCcsXG4gICduYnNwJyxcbiAgJ25vdCcsXG4gICdudGlsZGUnLFxuICAnb2FjdXRlJyxcbiAgJ29jaXJjJyxcbiAgJ29ncmF2ZScsXG4gICdvcmRmJyxcbiAgJ29yZG0nLFxuICAnb3NsYXNoJyxcbiAgJ290aWxkZScsXG4gICdvdW1sJyxcbiAgJ3BhcmEnLFxuICAncGx1c21uJyxcbiAgJ3BvdW5kJyxcbiAgJ3F1b3QnLFxuICAncmFxdW8nLFxuICAncmVnJyxcbiAgJ3NlY3QnLFxuICAnc2h5JyxcbiAgJ3N1cDEnLFxuICAnc3VwMicsXG4gICdzdXAzJyxcbiAgJ3N6bGlnJyxcbiAgJ3Rob3JuJyxcbiAgJ3RpbWVzJyxcbiAgJ3VhY3V0ZScsXG4gICd1Y2lyYycsXG4gICd1Z3JhdmUnLFxuICAndW1sJyxcbiAgJ3V1bWwnLFxuICAneWFjdXRlJyxcbiAgJ3llbicsXG4gICd5dW1sJ1xuXVxuIiwgIi8qKlxuICogTWFwIG9mIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIGZyb20gSFRNTCA0LlxuICpcbiAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5leHBvcnQgY29uc3QgY2hhcmFjdGVyRW50aXRpZXNIdG1sNCA9IHtcbiAgbmJzcDogJ1x1MDBBMCcsXG4gIGlleGNsOiAnXHUwMEExJyxcbiAgY2VudDogJ1x1MDBBMicsXG4gIHBvdW5kOiAnXHUwMEEzJyxcbiAgY3VycmVuOiAnXHUwMEE0JyxcbiAgeWVuOiAnXHUwMEE1JyxcbiAgYnJ2YmFyOiAnXHUwMEE2JyxcbiAgc2VjdDogJ1x1MDBBNycsXG4gIHVtbDogJ1x1MDBBOCcsXG4gIGNvcHk6ICdcdTAwQTknLFxuICBvcmRmOiAnXHUwMEFBJyxcbiAgbGFxdW86ICdcdTAwQUInLFxuICBub3Q6ICdcdTAwQUMnLFxuICBzaHk6ICdcdTAwQUQnLFxuICByZWc6ICdcdTAwQUUnLFxuICBtYWNyOiAnXHUwMEFGJyxcbiAgZGVnOiAnXHUwMEIwJyxcbiAgcGx1c21uOiAnXHUwMEIxJyxcbiAgc3VwMjogJ1x1MDBCMicsXG4gIHN1cDM6ICdcdTAwQjMnLFxuICBhY3V0ZTogJ1x1MDBCNCcsXG4gIG1pY3JvOiAnXHUwMEI1JyxcbiAgcGFyYTogJ1x1MDBCNicsXG4gIG1pZGRvdDogJ1x1MDBCNycsXG4gIGNlZGlsOiAnXHUwMEI4JyxcbiAgc3VwMTogJ1x1MDBCOScsXG4gIG9yZG06ICdcdTAwQkEnLFxuICByYXF1bzogJ1x1MDBCQicsXG4gIGZyYWMxNDogJ1x1MDBCQycsXG4gIGZyYWMxMjogJ1x1MDBCRCcsXG4gIGZyYWMzNDogJ1x1MDBCRScsXG4gIGlxdWVzdDogJ1x1MDBCRicsXG4gIEFncmF2ZTogJ1x1MDBDMCcsXG4gIEFhY3V0ZTogJ1x1MDBDMScsXG4gIEFjaXJjOiAnXHUwMEMyJyxcbiAgQXRpbGRlOiAnXHUwMEMzJyxcbiAgQXVtbDogJ1x1MDBDNCcsXG4gIEFyaW5nOiAnXHUwMEM1JyxcbiAgQUVsaWc6ICdcdTAwQzYnLFxuICBDY2VkaWw6ICdcdTAwQzcnLFxuICBFZ3JhdmU6ICdcdTAwQzgnLFxuICBFYWN1dGU6ICdcdTAwQzknLFxuICBFY2lyYzogJ1x1MDBDQScsXG4gIEV1bWw6ICdcdTAwQ0InLFxuICBJZ3JhdmU6ICdcdTAwQ0MnLFxuICBJYWN1dGU6ICdcdTAwQ0QnLFxuICBJY2lyYzogJ1x1MDBDRScsXG4gIEl1bWw6ICdcdTAwQ0YnLFxuICBFVEg6ICdcdTAwRDAnLFxuICBOdGlsZGU6ICdcdTAwRDEnLFxuICBPZ3JhdmU6ICdcdTAwRDInLFxuICBPYWN1dGU6ICdcdTAwRDMnLFxuICBPY2lyYzogJ1x1MDBENCcsXG4gIE90aWxkZTogJ1x1MDBENScsXG4gIE91bWw6ICdcdTAwRDYnLFxuICB0aW1lczogJ1x1MDBENycsXG4gIE9zbGFzaDogJ1x1MDBEOCcsXG4gIFVncmF2ZTogJ1x1MDBEOScsXG4gIFVhY3V0ZTogJ1x1MDBEQScsXG4gIFVjaXJjOiAnXHUwMERCJyxcbiAgVXVtbDogJ1x1MDBEQycsXG4gIFlhY3V0ZTogJ1x1MDBERCcsXG4gIFRIT1JOOiAnXHUwMERFJyxcbiAgc3psaWc6ICdcdTAwREYnLFxuICBhZ3JhdmU6ICdcdTAwRTAnLFxuICBhYWN1dGU6ICdcdTAwRTEnLFxuICBhY2lyYzogJ1x1MDBFMicsXG4gIGF0aWxkZTogJ1x1MDBFMycsXG4gIGF1bWw6ICdcdTAwRTQnLFxuICBhcmluZzogJ1x1MDBFNScsXG4gIGFlbGlnOiAnXHUwMEU2JyxcbiAgY2NlZGlsOiAnXHUwMEU3JyxcbiAgZWdyYXZlOiAnXHUwMEU4JyxcbiAgZWFjdXRlOiAnXHUwMEU5JyxcbiAgZWNpcmM6ICdcdTAwRUEnLFxuICBldW1sOiAnXHUwMEVCJyxcbiAgaWdyYXZlOiAnXHUwMEVDJyxcbiAgaWFjdXRlOiAnXHUwMEVEJyxcbiAgaWNpcmM6ICdcdTAwRUUnLFxuICBpdW1sOiAnXHUwMEVGJyxcbiAgZXRoOiAnXHUwMEYwJyxcbiAgbnRpbGRlOiAnXHUwMEYxJyxcbiAgb2dyYXZlOiAnXHUwMEYyJyxcbiAgb2FjdXRlOiAnXHUwMEYzJyxcbiAgb2NpcmM6ICdcdTAwRjQnLFxuICBvdGlsZGU6ICdcdTAwRjUnLFxuICBvdW1sOiAnXHUwMEY2JyxcbiAgZGl2aWRlOiAnXHUwMEY3JyxcbiAgb3NsYXNoOiAnXHUwMEY4JyxcbiAgdWdyYXZlOiAnXHUwMEY5JyxcbiAgdWFjdXRlOiAnXHUwMEZBJyxcbiAgdWNpcmM6ICdcdTAwRkInLFxuICB1dW1sOiAnXHUwMEZDJyxcbiAgeWFjdXRlOiAnXHUwMEZEJyxcbiAgdGhvcm46ICdcdTAwRkUnLFxuICB5dW1sOiAnXHUwMEZGJyxcbiAgZm5vZjogJ1x1MDE5MicsXG4gIEFscGhhOiAnXHUwMzkxJyxcbiAgQmV0YTogJ1x1MDM5MicsXG4gIEdhbW1hOiAnXHUwMzkzJyxcbiAgRGVsdGE6ICdcdTAzOTQnLFxuICBFcHNpbG9uOiAnXHUwMzk1JyxcbiAgWmV0YTogJ1x1MDM5NicsXG4gIEV0YTogJ1x1MDM5NycsXG4gIFRoZXRhOiAnXHUwMzk4JyxcbiAgSW90YTogJ1x1MDM5OScsXG4gIEthcHBhOiAnXHUwMzlBJyxcbiAgTGFtYmRhOiAnXHUwMzlCJyxcbiAgTXU6ICdcdTAzOUMnLFxuICBOdTogJ1x1MDM5RCcsXG4gIFhpOiAnXHUwMzlFJyxcbiAgT21pY3JvbjogJ1x1MDM5RicsXG4gIFBpOiAnXHUwM0EwJyxcbiAgUmhvOiAnXHUwM0ExJyxcbiAgU2lnbWE6ICdcdTAzQTMnLFxuICBUYXU6ICdcdTAzQTQnLFxuICBVcHNpbG9uOiAnXHUwM0E1JyxcbiAgUGhpOiAnXHUwM0E2JyxcbiAgQ2hpOiAnXHUwM0E3JyxcbiAgUHNpOiAnXHUwM0E4JyxcbiAgT21lZ2E6ICdcdTAzQTknLFxuICBhbHBoYTogJ1x1MDNCMScsXG4gIGJldGE6ICdcdTAzQjInLFxuICBnYW1tYTogJ1x1MDNCMycsXG4gIGRlbHRhOiAnXHUwM0I0JyxcbiAgZXBzaWxvbjogJ1x1MDNCNScsXG4gIHpldGE6ICdcdTAzQjYnLFxuICBldGE6ICdcdTAzQjcnLFxuICB0aGV0YTogJ1x1MDNCOCcsXG4gIGlvdGE6ICdcdTAzQjknLFxuICBrYXBwYTogJ1x1MDNCQScsXG4gIGxhbWJkYTogJ1x1MDNCQicsXG4gIG11OiAnXHUwM0JDJyxcbiAgbnU6ICdcdTAzQkQnLFxuICB4aTogJ1x1MDNCRScsXG4gIG9taWNyb246ICdcdTAzQkYnLFxuICBwaTogJ1x1MDNDMCcsXG4gIHJobzogJ1x1MDNDMScsXG4gIHNpZ21hZjogJ1x1MDNDMicsXG4gIHNpZ21hOiAnXHUwM0MzJyxcbiAgdGF1OiAnXHUwM0M0JyxcbiAgdXBzaWxvbjogJ1x1MDNDNScsXG4gIHBoaTogJ1x1MDNDNicsXG4gIGNoaTogJ1x1MDNDNycsXG4gIHBzaTogJ1x1MDNDOCcsXG4gIG9tZWdhOiAnXHUwM0M5JyxcbiAgdGhldGFzeW06ICdcdTAzRDEnLFxuICB1cHNpaDogJ1x1MDNEMicsXG4gIHBpdjogJ1x1MDNENicsXG4gIGJ1bGw6ICdcdTIwMjInLFxuICBoZWxsaXA6ICdcdTIwMjYnLFxuICBwcmltZTogJ1x1MjAzMicsXG4gIFByaW1lOiAnXHUyMDMzJyxcbiAgb2xpbmU6ICdcdTIwM0UnLFxuICBmcmFzbDogJ1x1MjA0NCcsXG4gIHdlaWVycDogJ1x1MjExOCcsXG4gIGltYWdlOiAnXHUyMTExJyxcbiAgcmVhbDogJ1x1MjExQycsXG4gIHRyYWRlOiAnXHUyMTIyJyxcbiAgYWxlZnN5bTogJ1x1MjEzNScsXG4gIGxhcnI6ICdcdTIxOTAnLFxuICB1YXJyOiAnXHUyMTkxJyxcbiAgcmFycjogJ1x1MjE5MicsXG4gIGRhcnI6ICdcdTIxOTMnLFxuICBoYXJyOiAnXHUyMTk0JyxcbiAgY3JhcnI6ICdcdTIxQjUnLFxuICBsQXJyOiAnXHUyMUQwJyxcbiAgdUFycjogJ1x1MjFEMScsXG4gIHJBcnI6ICdcdTIxRDInLFxuICBkQXJyOiAnXHUyMUQzJyxcbiAgaEFycjogJ1x1MjFENCcsXG4gIGZvcmFsbDogJ1x1MjIwMCcsXG4gIHBhcnQ6ICdcdTIyMDInLFxuICBleGlzdDogJ1x1MjIwMycsXG4gIGVtcHR5OiAnXHUyMjA1JyxcbiAgbmFibGE6ICdcdTIyMDcnLFxuICBpc2luOiAnXHUyMjA4JyxcbiAgbm90aW46ICdcdTIyMDknLFxuICBuaTogJ1x1MjIwQicsXG4gIHByb2Q6ICdcdTIyMEYnLFxuICBzdW06ICdcdTIyMTEnLFxuICBtaW51czogJ1x1MjIxMicsXG4gIGxvd2FzdDogJ1x1MjIxNycsXG4gIHJhZGljOiAnXHUyMjFBJyxcbiAgcHJvcDogJ1x1MjIxRCcsXG4gIGluZmluOiAnXHUyMjFFJyxcbiAgYW5nOiAnXHUyMjIwJyxcbiAgYW5kOiAnXHUyMjI3JyxcbiAgb3I6ICdcdTIyMjgnLFxuICBjYXA6ICdcdTIyMjknLFxuICBjdXA6ICdcdTIyMkEnLFxuICBpbnQ6ICdcdTIyMkInLFxuICB0aGVyZTQ6ICdcdTIyMzQnLFxuICBzaW06ICdcdTIyM0MnLFxuICBjb25nOiAnXHUyMjQ1JyxcbiAgYXN5bXA6ICdcdTIyNDgnLFxuICBuZTogJ1x1MjI2MCcsXG4gIGVxdWl2OiAnXHUyMjYxJyxcbiAgbGU6ICdcdTIyNjQnLFxuICBnZTogJ1x1MjI2NScsXG4gIHN1YjogJ1x1MjI4MicsXG4gIHN1cDogJ1x1MjI4MycsXG4gIG5zdWI6ICdcdTIyODQnLFxuICBzdWJlOiAnXHUyMjg2JyxcbiAgc3VwZTogJ1x1MjI4NycsXG4gIG9wbHVzOiAnXHUyMjk1JyxcbiAgb3RpbWVzOiAnXHUyMjk3JyxcbiAgcGVycDogJ1x1MjJBNScsXG4gIHNkb3Q6ICdcdTIyQzUnLFxuICBsY2VpbDogJ1x1MjMwOCcsXG4gIHJjZWlsOiAnXHUyMzA5JyxcbiAgbGZsb29yOiAnXHUyMzBBJyxcbiAgcmZsb29yOiAnXHUyMzBCJyxcbiAgbGFuZzogJ1x1MjMyOScsXG4gIHJhbmc6ICdcdTIzMkEnLFxuICBsb3o6ICdcdTI1Q0EnLFxuICBzcGFkZXM6ICdcdTI2NjAnLFxuICBjbHViczogJ1x1MjY2MycsXG4gIGhlYXJ0czogJ1x1MjY2NScsXG4gIGRpYW1zOiAnXHUyNjY2JyxcbiAgcXVvdDogJ1wiJyxcbiAgYW1wOiAnJicsXG4gIGx0OiAnPCcsXG4gIGd0OiAnPicsXG4gIE9FbGlnOiAnXHUwMTUyJyxcbiAgb2VsaWc6ICdcdTAxNTMnLFxuICBTY2Fyb246ICdcdTAxNjAnLFxuICBzY2Fyb246ICdcdTAxNjEnLFxuICBZdW1sOiAnXHUwMTc4JyxcbiAgY2lyYzogJ1x1MDJDNicsXG4gIHRpbGRlOiAnXHUwMkRDJyxcbiAgZW5zcDogJ1x1MjAwMicsXG4gIGVtc3A6ICdcdTIwMDMnLFxuICB0aGluc3A6ICdcdTIwMDknLFxuICB6d25qOiAnXHUyMDBDJyxcbiAgendqOiAnXHUyMDBEJyxcbiAgbHJtOiAnXHUyMDBFJyxcbiAgcmxtOiAnXHUyMDBGJyxcbiAgbmRhc2g6ICdcdTIwMTMnLFxuICBtZGFzaDogJ1x1MjAxNCcsXG4gIGxzcXVvOiAnXHUyMDE4JyxcbiAgcnNxdW86ICdcdTIwMTknLFxuICBzYnF1bzogJ1x1MjAxQScsXG4gIGxkcXVvOiAnXHUyMDFDJyxcbiAgcmRxdW86ICdcdTIwMUQnLFxuICBiZHF1bzogJ1x1MjAxRScsXG4gIGRhZ2dlcjogJ1x1MjAyMCcsXG4gIERhZ2dlcjogJ1x1MjAyMScsXG4gIHBlcm1pbDogJ1x1MjAzMCcsXG4gIGxzYXF1bzogJ1x1MjAzOScsXG4gIHJzYXF1bzogJ1x1MjAzQScsXG4gIGV1cm86ICdcdTIwQUMnXG59XG4iLCAiLyoqXG4gKiBMaXN0IG9mIGxlZ2FjeSAodGhhdCBkb25cdTIwMTl0IG5lZWQgYSB0cmFpbGluZyBgO2ApIG5hbWVkIHJlZmVyZW5jZXMgd2hpY2ggY291bGQsXG4gKiBkZXBlbmRpbmcgb24gd2hhdCBmb2xsb3dzIHRoZW0sIHR1cm4gaW50byBhIGRpZmZlcmVudCBtZWFuaW5nXG4gKlxuICogQHR5cGUge0FycmF5PHN0cmluZz59XG4gKi9cbmV4cG9ydCBjb25zdCBkYW5nZXJvdXMgPSBbXG4gICdjZW50JyxcbiAgJ2NvcHknLFxuICAnZGl2aWRlJyxcbiAgJ2d0JyxcbiAgJ2x0JyxcbiAgJ25vdCcsXG4gICdwYXJhJyxcbiAgJ3RpbWVzJ1xuXVxuIiwgImltcG9ydCB7Y2hhcmFjdGVyRW50aXRpZXNMZWdhY3l9IGZyb20gJ2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3knXG5pbXBvcnQge2NoYXJhY3RlckVudGl0aWVzSHRtbDR9IGZyb20gJ2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNCdcbmltcG9ydCB7ZGFuZ2Vyb3VzfSBmcm9tICcuLi9jb25zdGFudC9kYW5nZXJvdXMuanMnXG5cbmNvbnN0IG93biA9IHt9Lmhhc093blByb3BlcnR5XG5cbi8qKlxuICogYGNoYXJhY3RlckVudGl0aWVzSHRtbDRgIGJ1dCBpbnZlcnRlZC5cbiAqXG4gKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuY29uc3QgY2hhcmFjdGVycyA9IHt9XG5cbi8qKiBAdHlwZSB7c3RyaW5nfSAqL1xubGV0IGtleVxuXG5mb3IgKGtleSBpbiBjaGFyYWN0ZXJFbnRpdGllc0h0bWw0KSB7XG4gIGlmIChvd24uY2FsbChjaGFyYWN0ZXJFbnRpdGllc0h0bWw0LCBrZXkpKSB7XG4gICAgY2hhcmFjdGVyc1tjaGFyYWN0ZXJFbnRpdGllc0h0bWw0W2tleV1dID0ga2V5XG4gIH1cbn1cblxuY29uc3Qgbm90QWxwaGFudW1lcmljUmVnZXggPSAvW15cXGRBLVphLXpdL1xuXG4vKipcbiAqIENvbmZpZ3VyYWJsZSB3YXlzIHRvIGVuY29kZSBjaGFyYWN0ZXJzIGFzIG5hbWVkIHJlZmVyZW5jZXMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBvbWl0XG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hbWVkKGNvZGUsIG5leHQsIG9taXQsIGF0dHJpYnV0ZSkge1xuICBjb25zdCBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG5cbiAgaWYgKG93bi5jYWxsKGNoYXJhY3RlcnMsIGNoYXJhY3RlcikpIHtcbiAgICBjb25zdCBuYW1lID0gY2hhcmFjdGVyc1tjaGFyYWN0ZXJdXG4gICAgY29uc3QgdmFsdWUgPSAnJicgKyBuYW1lXG5cbiAgICBpZiAoXG4gICAgICBvbWl0ICYmXG4gICAgICBjaGFyYWN0ZXJFbnRpdGllc0xlZ2FjeS5pbmNsdWRlcyhuYW1lKSAmJlxuICAgICAgIWRhbmdlcm91cy5pbmNsdWRlcyhuYW1lKSAmJlxuICAgICAgKCFhdHRyaWJ1dGUgfHxcbiAgICAgICAgKG5leHQgJiZcbiAgICAgICAgICBuZXh0ICE9PSA2MSAvKiBgPWAgKi8gJiZcbiAgICAgICAgICBub3RBbHBoYW51bWVyaWNSZWdleC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUobmV4dCkpKSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZSArICc7J1xuICB9XG5cbiAgcmV0dXJuICcnXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiBGb3JtYXRTbWFydE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3VzZU5hbWVkUmVmZXJlbmNlcz1mYWxzZV1cbiAqICAgUHJlZmVyIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIChgJmFtcDtgKSB3aGVyZSBwb3NzaWJsZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3VzZVNob3J0ZXN0UmVmZXJlbmNlcz1mYWxzZV1cbiAqICAgUHJlZmVyIHRoZSBzaG9ydGVzdCBwb3NzaWJsZSByZWZlcmVuY2UsIGlmIHRoYXQgcmVzdWx0cyBpbiBsZXNzIGJ5dGVzLlxuICogICAqKk5vdGUqKjogYHVzZU5hbWVkUmVmZXJlbmNlc2AgY2FuIGJlIG9taXR0ZWQgd2hlbiB1c2luZyBgdXNlU2hvcnRlc3RSZWZlcmVuY2VzYC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29taXRPcHRpb25hbFNlbWljb2xvbnM9ZmFsc2VdXG4gKiAgIFdoZXRoZXIgdG8gb21pdCBzZW1pY29sb25zIHdoZW4gcG9zc2libGUuXG4gKiAgICoqTm90ZSoqOiBUaGlzIGNyZWF0ZXMgd2hhdCBIVE1MIGNhbGxzIFx1MjAxQ3BhcnNlIGVycm9yc1x1MjAxRCBidXQgaXMgb3RoZXJ3aXNlIHN0aWxsIHZhbGlkIEhUTUwgXHUyMDE0IGRvblx1MjAxOXQgdXNlIHRoaXMgZXhjZXB0IHdoZW4gYnVpbGRpbmcgYSBtaW5pZmllci5cbiAqICAgT21pdHRpbmcgc2VtaWNvbG9ucyBpcyBwb3NzaWJsZSBmb3IgY2VydGFpbiBuYW1lZCBhbmQgbnVtZXJpYyByZWZlcmVuY2VzIGluIHNvbWUgY2FzZXMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdHRyaWJ1dGU9ZmFsc2VdXG4gKiAgIENyZWF0ZSBjaGFyYWN0ZXIgcmVmZXJlbmNlcyB3aGljaCBkb25cdTIwMTl0IGZhaWwgaW4gYXR0cmlidXRlcy5cbiAqICAgKipOb3RlKio6IGBhdHRyaWJ1dGVgIG9ubHkgYXBwbGllcyB3aGVuIG9wZXJhdGluZyBkYW5nZXJvdXNseSB3aXRoXG4gKiAgIGBvbWl0T3B0aW9uYWxTZW1pY29sb25zOiB0cnVlYC5cbiAqL1xuXG5pbXBvcnQge3RvSGV4YWRlY2ltYWx9IGZyb20gJy4vdG8taGV4YWRlY2ltYWwuanMnXG5pbXBvcnQge3RvRGVjaW1hbH0gZnJvbSAnLi90by1kZWNpbWFsLmpzJ1xuaW1wb3J0IHt0b05hbWVkfSBmcm9tICcuL3RvLW5hbWVkLmpzJ1xuXG4vKipcbiAqIENvbmZpZ3VyYWJsZSB3YXlzIHRvIGVuY29kZSBhIGNoYXJhY3RlciB5aWVsZGluZyBwcmV0dHkgb3Igc21hbGwgcmVzdWx0cy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHBhcmFtIHtudW1iZXJ9IG5leHRcbiAqIEBwYXJhbSB7Rm9ybWF0U21hcnRPcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U21hcnQoY29kZSwgbmV4dCwgb3B0aW9ucykge1xuICBsZXQgbnVtZXJpYyA9IHRvSGV4YWRlY2ltYWwoY29kZSwgbmV4dCwgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zKVxuICAvKiogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9ICovXG4gIGxldCBuYW1lZFxuXG4gIGlmIChvcHRpb25zLnVzZU5hbWVkUmVmZXJlbmNlcyB8fCBvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcykge1xuICAgIG5hbWVkID0gdG9OYW1lZChcbiAgICAgIGNvZGUsXG4gICAgICBuZXh0LFxuICAgICAgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zLFxuICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVcbiAgICApXG4gIH1cblxuICAvLyBVc2UgdGhlIHNob3J0ZXN0IG51bWVyaWMgcmVmZXJlbmNlIHdoZW4gcmVxdWVzdGVkLlxuICAvLyBBIHNpbXBsZSBhbGdvcml0aG0gd291bGQgdXNlIGRlY2ltYWwgZm9yIGFsbCBjb2RlIHBvaW50cyB1bmRlciAxMDAsIGFzXG4gIC8vIHRob3NlIGFyZSBzaG9ydGVyIHRoYW4gaGV4YWRlY2ltYWw6XG4gIC8vXG4gIC8vICogYCYjOTk7YCB2cyBgJiN4NjM7YCAoZGVjaW1hbCBzaG9ydGVyKVxuICAvLyAqIGAmIzEwMDtgIHZzIGAmI3g2NDtgIChlcXVhbClcbiAgLy9cbiAgLy8gSG93ZXZlciwgYmVjYXVzZSB3ZSB0YWtlIGBuZXh0YCBpbnRvIGNvbnNpZGVyYXRpb24gd2hlbiBgb21pdGAgaXMgdXNlZCxcbiAgLy8gQW5kIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRoYXQgZGVjaW1hbHMgYXJlIHNob3J0ZXIgb24gYmlnZ2VyIHZhbHVlcyBhc1xuICAvLyB3ZWxsIGlmIGBuZXh0YCBpcyBoZXhhZGVjaW1hbCBidXQgbm90IGRlY2ltYWwsIHdlIGluc3RlYWQgY29tcGFyZSBib3RoLlxuICBpZiAoXG4gICAgKG9wdGlvbnMudXNlU2hvcnRlc3RSZWZlcmVuY2VzIHx8ICFuYW1lZCkgJiZcbiAgICBvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlc1xuICApIHtcbiAgICBjb25zdCBkZWNpbWFsID0gdG9EZWNpbWFsKGNvZGUsIG5leHQsIG9wdGlvbnMub21pdE9wdGlvbmFsU2VtaWNvbG9ucylcblxuICAgIGlmIChkZWNpbWFsLmxlbmd0aCA8IG51bWVyaWMubGVuZ3RoKSB7XG4gICAgICBudW1lcmljID0gZGVjaW1hbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lZCAmJlxuICAgICghb3B0aW9ucy51c2VTaG9ydGVzdFJlZmVyZW5jZXMgfHwgbmFtZWQubGVuZ3RoIDwgbnVtZXJpYy5sZW5ndGgpXG4gICAgPyBuYW1lZFxuICAgIDogbnVtZXJpY1xufVxuIiwgIi8qKlxuICogVGhlIHNtYWxsZXN0IHdheSB0byBlbmNvZGUgYSBjaGFyYWN0ZXIuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCYXNpYyhjb2RlKSB7XG4gIHJldHVybiAnJiN4JyArIGNvZGUudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyAnOydcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vY29yZS5qcycpLkNvcmVPcHRpb25zICYgaW1wb3J0KCcuL3V0aWwvZm9ybWF0LXNtYXJ0LmpzJykuRm9ybWF0U21hcnRPcHRpb25zfSBPcHRpb25zXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2NvcmUuanMnKS5Db3JlT3B0aW9uc30gTGlnaHRPcHRpb25zXG4gKi9cblxuaW1wb3J0IHtjb3JlfSBmcm9tICcuL2NvcmUuanMnXG5pbXBvcnQge2Zvcm1hdFNtYXJ0fSBmcm9tICcuL3V0aWwvZm9ybWF0LXNtYXJ0LmpzJ1xuaW1wb3J0IHtmb3JtYXRCYXNpY30gZnJvbSAnLi91dGlsL2Zvcm1hdC1iYXNpYy5qcydcblxuLyoqXG4gKiBFbmNvZGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGB2YWx1ZWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiAgIFZhbHVlIHRvIGVuY29kZS5cbiAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBFbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5RW50aXRpZXModmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGNvcmUodmFsdWUsIE9iamVjdC5hc3NpZ24oe2Zvcm1hdDogZm9ybWF0U21hcnR9LCBvcHRpb25zKSlcbn1cblxuLyoqXG4gKiBFbmNvZGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGB2YWx1ZWAgYXMgaGV4YWRlY2ltYWxzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBWYWx1ZSB0byBlbmNvZGUuXG4gKiBAcGFyYW0ge0xpZ2h0T3B0aW9uc30gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBFbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5RW50aXRpZXNMaWdodCh2YWx1ZSwgb3B0aW9ucykge1xuICByZXR1cm4gY29yZSh2YWx1ZSwgT2JqZWN0LmFzc2lnbih7Zm9ybWF0OiBmb3JtYXRCYXNpY30sIG9wdGlvbnMpKVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5MaWdodE9wdGlvbnN9IExpZ2h0T3B0aW9uc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5PcHRpb25zfSBPcHRpb25zXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5kZXguanMnXG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtDb21tZW50LCBQYXJlbnRzfSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJy4uL2luZGV4LmpzJ1xuICovXG5cbmltcG9ydCB7c3RyaW5naWZ5RW50aXRpZXN9IGZyb20gJ3N0cmluZ2lmeS1lbnRpdGllcydcblxuY29uc3QgaHRtbENvbW1lbnRSZWdleCA9IC9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2dcblxuLy8gRGVjbGFyZSBhcnJheXMgYXMgdmFyaWFibGVzIHNvIGl0IGNhbiBiZSBjYWNoZWQgYnkgYHN0cmluZ2lmeUVudGl0aWVzYFxuY29uc3QgYm9ndXNDb21tZW50RW50aXR5U3Vic2V0ID0gWyc+J11cbmNvbnN0IGNvbW1lbnRFbnRpdHlTdWJzZXQgPSBbJzwnLCAnPiddXG5cbi8qKlxuICogU2VyaWFsaXplIGEgY29tbWVudC5cbiAqXG4gKiBAcGFyYW0ge0NvbW1lbnR9IG5vZGVcbiAqICAgTm9kZSB0byBoYW5kbGUuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gXzFcbiAqICAgSW5kZXggb2YgYG5vZGVgIGluIGBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IF8yXG4gKiAgIFBhcmVudCBvZiBgbm9kZWAuXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBTZXJpYWxpemVkIG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50KG5vZGUsIF8xLCBfMiwgc3RhdGUpIHtcbiAgLy8gU2VlOiA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjY29tbWVudHM+XG4gIHJldHVybiBzdGF0ZS5zZXR0aW5ncy5ib2d1c0NvbW1lbnRzXG4gICAgPyAnPD8nICtcbiAgICAgICAgc3RyaW5naWZ5RW50aXRpZXMoXG4gICAgICAgICAgbm9kZS52YWx1ZSxcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7XG4gICAgICAgICAgICBzdWJzZXQ6IGJvZ3VzQ29tbWVudEVudGl0eVN1YnNldFxuICAgICAgICAgIH0pXG4gICAgICAgICkgK1xuICAgICAgICAnPidcbiAgICA6ICc8IS0tJyArIG5vZGUudmFsdWUucmVwbGFjZShodG1sQ29tbWVudFJlZ2V4LCBlbmNvZGUpICsgJy0tPidcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9ICQwXG4gICAqL1xuICBmdW5jdGlvbiBlbmNvZGUoJDApIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5RW50aXRpZXMoXG4gICAgICAkMCxcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMsIHtcbiAgICAgICAgc3Vic2V0OiBjb21tZW50RW50aXR5U3Vic2V0XG4gICAgICB9KVxuICAgIClcbiAgfVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7RG9jdHlwZSwgUGFyZW50c30gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICcuLi9pbmRleC5qcydcbiAqL1xuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIGRvY3R5cGUuXG4gKlxuICogQHBhcmFtIHtEb2N0eXBlfSBfMVxuICogICBOb2RlIHRvIGhhbmRsZS5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBfMlxuICogICBJbmRleCBvZiBgbm9kZWAgaW4gYHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gXzNcbiAqICAgUGFyZW50IG9mIGBub2RlYC5cbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZCBhYm91dCB0aGUgY3VycmVudCBzdGF0ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvY3R5cGUoXzEsIF8yLCBfMywgc3RhdGUpIHtcbiAgcmV0dXJuIChcbiAgICAnPCEnICtcbiAgICAoc3RhdGUuc2V0dGluZ3MudXBwZXJEb2N0eXBlID8gJ0RPQ1RZUEUnIDogJ2RvY3R5cGUnKSArXG4gICAgKHN0YXRlLnNldHRpbmdzLnRpZ2h0RG9jdHlwZSA/ICcnIDogJyAnKSArXG4gICAgJ2h0bWw+J1xuICApXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiBPcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24gZm9yIGBzdHJpbmdpZnlgLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcGFkTGVmdD10cnVlXVxuICogICBXaGV0aGVyIHRvIHBhZCBhIHNwYWNlIGJlZm9yZSBhIHRva2VuLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcGFkUmlnaHQ9ZmFsc2VdXG4gKiAgIFdoZXRoZXIgdG8gcGFkIGEgc3BhY2UgYWZ0ZXIgYSB0b2tlbi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPcHRpb25zfSBTdHJpbmdpZnlPcHRpb25zXG4gKiAgIFBsZWFzZSB1c2UgYFN0cmluZ2lmeU9wdGlvbnNgIGluc3RlYWQuXG4gKi9cblxuLyoqXG4gKiBQYXJzZSBjb21tYS1zZXBhcmF0ZWQgdG9rZW5zIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBDb21tYS1zZXBhcmF0ZWQgdG9rZW5zLlxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59XG4gKiAgIExpc3Qgb2YgdG9rZW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodmFsdWUpIHtcbiAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICBjb25zdCB0b2tlbnMgPSBbXVxuICBjb25zdCBpbnB1dCA9IFN0cmluZyh2YWx1ZSB8fCAnJylcbiAgbGV0IGluZGV4ID0gaW5wdXQuaW5kZXhPZignLCcpXG4gIGxldCBzdGFydCA9IDBcbiAgLyoqIEB0eXBlIHtib29sZWFufSAqL1xuICBsZXQgZW5kID0gZmFsc2VcblxuICB3aGlsZSAoIWVuZCkge1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIGluZGV4ID0gaW5wdXQubGVuZ3RoXG4gICAgICBlbmQgPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSBpbnB1dC5zbGljZShzdGFydCwgaW5kZXgpLnRyaW0oKVxuXG4gICAgaWYgKHRva2VuIHx8ICFlbmQpIHtcbiAgICAgIHRva2Vucy5wdXNoKHRva2VuKVxuICAgIH1cblxuICAgIHN0YXJ0ID0gaW5kZXggKyAxXG4gICAgaW5kZXggPSBpbnB1dC5pbmRleE9mKCcsJywgc3RhcnQpXG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbi8qKlxuICogU2VyaWFsaXplIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgbnVtYmVycyB0byBjb21tYS1zZXBhcmF0ZWQgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nfG51bWJlcj59IHZhbHVlc1xuICogICBMaXN0IG9mIHRva2Vucy5cbiAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24gZm9yIGBzdHJpbmdpZnlgIChvcHRpb25hbCkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBDb21tYS1zZXBhcmF0ZWQgdG9rZW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlcywgb3B0aW9ucykge1xuICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge31cblxuICAvLyBFbnN1cmUgdGhlIGxhc3QgZW1wdHkgZW50cnkgaXMgc2Vlbi5cbiAgY29uc3QgaW5wdXQgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdID09PSAnJyA/IFsuLi52YWx1ZXMsICcnXSA6IHZhbHVlc1xuXG4gIHJldHVybiBpbnB1dFxuICAgIC5qb2luKFxuICAgICAgKHNldHRpbmdzLnBhZFJpZ2h0ID8gJyAnIDogJycpICtcbiAgICAgICAgJywnICtcbiAgICAgICAgKHNldHRpbmdzLnBhZExlZnQgPT09IGZhbHNlID8gJycgOiAnICcpXG4gICAgKVxuICAgIC50cmltKClcbn1cbiIsICIvKipcbiAqIFBhcnNlIHNwYWNlLXNlcGFyYXRlZCB0b2tlbnMgdG8gYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqICAgU3BhY2Utc2VwYXJhdGVkIHRva2Vucy5cbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fVxuICogICBMaXN0IG9mIHRva2Vucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHZhbHVlKSB7XG4gIGNvbnN0IGlucHV0ID0gU3RyaW5nKHZhbHVlIHx8ICcnKS50cmltKClcbiAgcmV0dXJuIGlucHV0ID8gaW5wdXQuc3BsaXQoL1sgXFx0XFxuXFxyXFxmXSsvZykgOiBbXVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBzdHJpbmdzIGFzIHNwYWNlIHNlcGFyYXRlZC10b2tlbnMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gdmFsdWVzXG4gKiAgIExpc3Qgb2YgdG9rZW5zLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU3BhY2Utc2VwYXJhdGVkIHRva2Vucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSh2YWx1ZXMpIHtcbiAgcmV0dXJuIHZhbHVlcy5qb2luKCcgJykudHJpbSgpXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuTm9kZXN9IE5vZGVzXG4gKi9cblxuLy8gSFRNTCB3aGl0ZXNwYWNlIGV4cHJlc3Npb24uXG4vLyBTZWUgPGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNhc2NpaS13aGl0ZXNwYWNlPi5cbmNvbnN0IHJlID0gL1sgXFx0XFxuXFxmXFxyXS9nXG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHZhbHVlIGlzICppbnRlci1lbGVtZW50IHdoaXRlc3BhY2UqLlxuICpcbiAqIEBwYXJhbSB7Tm9kZXMgfCBzdHJpbmd9IHRoaW5nXG4gKiAgIFRoaW5nIHRvIGNoZWNrIChgTm9kZWAgb3IgYHN0cmluZ2ApLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIGB2YWx1ZWAgaXMgaW50ZXItZWxlbWVudCB3aGl0ZXNwYWNlIChgYm9vbGVhbmApOiBjb25zaXN0aW5nIG9mXG4gKiAgIHplcm8gb3IgbW9yZSBvZiBzcGFjZSwgdGFiIChgXFx0YCksIGxpbmUgZmVlZCAoYFxcbmApLCBjYXJyaWFnZSByZXR1cm5cbiAqICAgKGBcXHJgKSwgb3IgZm9ybSBmZWVkIChgXFxmYCk7IGlmIGEgbm9kZSBpcyBwYXNzZWQgaXQgbXVzdCBiZSBhIGBUZXh0YCBub2RlLFxuICogICB3aG9zZSBgdmFsdWVgIGZpZWxkIGlzIGNoZWNrZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlKHRoaW5nKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnXG4gICAgPyB0aGluZy50eXBlID09PSAndGV4dCdcbiAgICAgID8gZW1wdHkodGhpbmcudmFsdWUpXG4gICAgICA6IGZhbHNlXG4gICAgOiBlbXB0eSh0aGluZylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBlbXB0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZShyZSwgJycpID09PSAnJ1xufVxuIiwgImV4cG9ydCB7d2hpdGVzcGFjZX0gZnJvbSAnLi9saWIvaW5kZXguanMnXG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtQYXJlbnRzLCBSb290Q29udGVudH0gZnJvbSAnaGFzdCdcbiAqL1xuXG5pbXBvcnQge3doaXRlc3BhY2V9IGZyb20gJ2hhc3QtdXRpbC13aGl0ZXNwYWNlJ1xuXG5leHBvcnQgY29uc3Qgc2libGluZ0FmdGVyID0gc2libGluZ3MoMSlcbmV4cG9ydCBjb25zdCBzaWJsaW5nQmVmb3JlID0gc2libGluZ3MoLTEpXG5cbi8qKiBAdHlwZSB7QXJyYXk8Um9vdENvbnRlbnQ+fSAqL1xuY29uc3QgZW1wdHlDaGlsZHJlbiA9IFtdXG5cbi8qKlxuICogRmFjdG9yeSB0byBjaGVjayBzaWJsaW5ncyBpbiBhIGRpcmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5jcmVtZW50XG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdzKGluY3JlbWVudCkge1xuICByZXR1cm4gc2libGluZ1xuXG4gIC8qKlxuICAgKiBGaW5kIGFwcGxpY2FibGUgc2libGluZ3MgaW4gYSBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSB7UGFyZW50c30gUGFyZW50XG4gICAqICAgUGFyZW50IHR5cGUuXG4gICAqIEBwYXJhbSB7UGFyZW50IHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAgICogICBQYXJlbnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICAgKiAgIEluZGV4IG9mIGNoaWxkIGluIGBwYXJlbnRgLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IFtpbmNsdWRlV2hpdGVzcGFjZT1mYWxzZV1cbiAgICogICBXaGV0aGVyIHRvIGluY2x1ZGUgd2hpdGVzcGFjZSAoZGVmYXVsdDogYGZhbHNlYCkuXG4gICAqIEByZXR1cm5zIHtQYXJlbnQgZXh0ZW5kcyB7Y2hpbGRyZW46IEFycmF5PGluZmVyIENoaWxkPn0gPyBDaGlsZCB8IHVuZGVmaW5lZCA6IG5ldmVyfVxuICAgKiAgIENoaWxkIG9mIHBhcmVudC5cbiAgICovXG4gIGZ1bmN0aW9uIHNpYmxpbmcocGFyZW50LCBpbmRleCwgaW5jbHVkZVdoaXRlc3BhY2UpIHtcbiAgICBjb25zdCBzaWJsaW5ncyA9IHBhcmVudCA/IHBhcmVudC5jaGlsZHJlbiA6IGVtcHR5Q2hpbGRyZW5cbiAgICBsZXQgb2Zmc2V0ID0gKGluZGV4IHx8IDApICsgaW5jcmVtZW50XG4gICAgbGV0IG5leHQgPSBzaWJsaW5nc1tvZmZzZXRdXG5cbiAgICBpZiAoIWluY2x1ZGVXaGl0ZXNwYWNlKSB7XG4gICAgICB3aGlsZSAobmV4dCAmJiB3aGl0ZXNwYWNlKG5leHQpKSB7XG4gICAgICAgIG9mZnNldCArPSBpbmNyZW1lbnRcbiAgICAgICAgbmV4dCA9IHNpYmxpbmdzW29mZnNldF1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBpdFx1MjAxOXMgYSBjb3JyZWN0IGNoaWxkLlxuICAgIHJldHVybiBuZXh0XG4gIH1cbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0VsZW1lbnQsIFBhcmVudHN9IGZyb20gJ2hhc3QnXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgT21pdEhhbmRsZVxuICogICBDaGVjayBpZiBhIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogICBFbGVtZW50IHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0byBvbWl0IGEgdGFnLlxuICpcbiAqL1xuXG5jb25zdCBvd24gPSB7fS5oYXNPd25Qcm9wZXJ0eVxuXG4vKipcbiAqIEZhY3RvcnkgdG8gY2hlY2sgaWYgYSBnaXZlbiBub2RlIGNhbiBoYXZlIGEgdGFnIG9taXR0ZWQuXG4gKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBPbWl0SGFuZGxlPn0gaGFuZGxlcnNcbiAqICAgT21pc3Npb24gaGFuZGxlcnMsIHdoZXJlIGVhY2gga2V5IGlzIGEgdGFnIG5hbWUsIGFuZCBlYWNoIHZhbHVlIGlzIHRoZVxuICogICBjb3JyZXNwb25kaW5nIGhhbmRsZXIuXG4gKiBAcmV0dXJucyB7T21pdEhhbmRsZX1cbiAqICAgV2hldGhlciB0byBvbWl0IGEgdGFnIG9mIGFuIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbWlzc2lvbihoYW5kbGVycykge1xuICByZXR1cm4gb21pdFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGdpdmVuIG5vZGUgY2FuIGhhdmUgYSB0YWcgb21pdHRlZC5cbiAgICpcbiAgICogQHR5cGUge09taXRIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbWl0KG5vZGUsIGluZGV4LCBwYXJlbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgb3duLmNhbGwoaGFuZGxlcnMsIG5vZGUudGFnTmFtZSkgJiZcbiAgICAgIGhhbmRsZXJzW25vZGUudGFnTmFtZV0obm9kZSwgaW5kZXgsIHBhcmVudClcbiAgICApXG4gIH1cbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0VsZW1lbnQsIFBhcmVudHN9IGZyb20gJ2hhc3QnXG4gKi9cblxuaW1wb3J0IHt3aGl0ZXNwYWNlfSBmcm9tICdoYXN0LXV0aWwtd2hpdGVzcGFjZSdcbmltcG9ydCB7c2libGluZ0FmdGVyfSBmcm9tICcuL3V0aWwvc2libGluZ3MuanMnXG5pbXBvcnQge29taXNzaW9ufSBmcm9tICcuL29taXNzaW9uLmpzJ1xuXG5leHBvcnQgY29uc3QgY2xvc2luZyA9IG9taXNzaW9uKHtcbiAgYm9keSxcbiAgY2FwdGlvbjogaGVhZE9yQ29sZ3JvdXBPckNhcHRpb24sXG4gIGNvbGdyb3VwOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbixcbiAgZGQsXG4gIGR0LFxuICBoZWFkOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbixcbiAgaHRtbCxcbiAgbGksXG4gIG9wdGdyb3VwLFxuICBvcHRpb24sXG4gIHAsXG4gIHJwOiBydWJ5RWxlbWVudCxcbiAgcnQ6IHJ1YnlFbGVtZW50LFxuICB0Ym9keSxcbiAgdGQ6IGNlbGxzLFxuICB0Zm9vdCxcbiAgdGg6IGNlbGxzLFxuICB0aGVhZCxcbiAgdHJcbn0pXG5cbi8qKlxuICogTWFjcm8gZm9yIGA8L2hlYWQ+YCwgYDwvY29sZ3JvdXA+YCwgYW5kIGA8L2NhcHRpb24+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IF9cbiAqICAgRWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBlbGVtZW50IGluIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIGNsb3NpbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbihfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleCwgdHJ1ZSlcbiAgcmV0dXJuIChcbiAgICAhbmV4dCB8fFxuICAgIChuZXh0LnR5cGUgIT09ICdjb21tZW50JyAmJlxuICAgICAgIShuZXh0LnR5cGUgPT09ICd0ZXh0JyAmJiB3aGl0ZXNwYWNlKG5leHQudmFsdWUuY2hhckF0KDApKSkpXG4gIClcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvaHRtbD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIGh0bWwoXywgaW5kZXgsIHBhcmVudCkge1xuICBjb25zdCBuZXh0ID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgpXG4gIHJldHVybiAhbmV4dCB8fCBuZXh0LnR5cGUgIT09ICdjb21tZW50J1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPC9ib2R5PmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBfXG4gKiAgIEVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgSW5kZXggb2YgZWxlbWVudCBpbiBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBjbG9zaW5nIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuZnVuY3Rpb24gYm9keShfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleClcbiAgcmV0dXJuICFuZXh0IHx8IG5leHQudHlwZSAhPT0gJ2NvbW1lbnQnXG59XG5cbi8qKlxuICogV2hldGhlciB0byBvbWl0IGA8L3A+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IF9cbiAqICAgRWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBlbGVtZW50IGluIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIGNsb3NpbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiBwKF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gbmV4dFxuICAgID8gbmV4dC50eXBlID09PSAnZWxlbWVudCcgJiZcbiAgICAgICAgKG5leHQudGFnTmFtZSA9PT0gJ2FkZHJlc3MnIHx8XG4gICAgICAgICAgbmV4dC50YWdOYW1lID09PSAnYXJ0aWNsZScgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdhc2lkZScgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdibG9ja3F1b3RlJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2RldGFpbHMnIHx8XG4gICAgICAgICAgbmV4dC50YWdOYW1lID09PSAnZGl2JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2RsJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2ZpZWxkc2V0JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2ZpZ2NhcHRpb24nIHx8XG4gICAgICAgICAgbmV4dC50YWdOYW1lID09PSAnZmlndXJlJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2Zvb3RlcicgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdmb3JtJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2gxJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2gyJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2gzJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2g0JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2g1JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2g2JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2hlYWRlcicgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdoZ3JvdXAnIHx8XG4gICAgICAgICAgbmV4dC50YWdOYW1lID09PSAnaHInIHx8XG4gICAgICAgICAgbmV4dC50YWdOYW1lID09PSAnbWFpbicgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdtZW51JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ25hdicgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdvbCcgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdwJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ3ByZScgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdzZWN0aW9uJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ3RhYmxlJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ3VsJylcbiAgICA6ICFwYXJlbnQgfHxcbiAgICAgICAgLy8gQ29uZnVzaW5nIHBhcmVudC5cbiAgICAgICAgIShcbiAgICAgICAgICBwYXJlbnQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAgICAgKHBhcmVudC50YWdOYW1lID09PSAnYScgfHxcbiAgICAgICAgICAgIHBhcmVudC50YWdOYW1lID09PSAnYXVkaW8nIHx8XG4gICAgICAgICAgICBwYXJlbnQudGFnTmFtZSA9PT0gJ2RlbCcgfHxcbiAgICAgICAgICAgIHBhcmVudC50YWdOYW1lID09PSAnaW5zJyB8fFxuICAgICAgICAgICAgcGFyZW50LnRhZ05hbWUgPT09ICdtYXAnIHx8XG4gICAgICAgICAgICBwYXJlbnQudGFnTmFtZSA9PT0gJ25vc2NyaXB0JyB8fFxuICAgICAgICAgICAgcGFyZW50LnRhZ05hbWUgPT09ICd2aWRlbycpXG4gICAgICAgIClcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvbGk+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IF9cbiAqICAgRWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBlbGVtZW50IGluIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIGNsb3NpbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiBsaShfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleClcbiAgcmV0dXJuICFuZXh0IHx8IChuZXh0LnR5cGUgPT09ICdlbGVtZW50JyAmJiBuZXh0LnRhZ05hbWUgPT09ICdsaScpXG59XG5cbi8qKlxuICogV2hldGhlciB0byBvbWl0IGA8L2R0PmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBfXG4gKiAgIEVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgSW5kZXggb2YgZWxlbWVudCBpbiBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBjbG9zaW5nIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuZnVuY3Rpb24gZHQoXywgaW5kZXgsIHBhcmVudCkge1xuICBjb25zdCBuZXh0ID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgpXG4gIHJldHVybiBCb29sZWFuKFxuICAgIG5leHQgJiZcbiAgICAgIG5leHQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAobmV4dC50YWdOYW1lID09PSAnZHQnIHx8IG5leHQudGFnTmFtZSA9PT0gJ2RkJylcbiAgKVxufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPC9kZD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIGRkKF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gKFxuICAgICFuZXh0IHx8XG4gICAgKG5leHQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAobmV4dC50YWdOYW1lID09PSAnZHQnIHx8IG5leHQudGFnTmFtZSA9PT0gJ2RkJykpXG4gIClcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvcnQ+YCBvciBgPC9ycD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIHJ1YnlFbGVtZW50KF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gKFxuICAgICFuZXh0IHx8XG4gICAgKG5leHQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAobmV4dC50YWdOYW1lID09PSAncnAnIHx8IG5leHQudGFnTmFtZSA9PT0gJ3J0JykpXG4gIClcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvb3B0Z3JvdXA+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IF9cbiAqICAgRWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBlbGVtZW50IGluIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIGNsb3NpbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiBvcHRncm91cChfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleClcbiAgcmV0dXJuICFuZXh0IHx8IChuZXh0LnR5cGUgPT09ICdlbGVtZW50JyAmJiBuZXh0LnRhZ05hbWUgPT09ICdvcHRncm91cCcpXG59XG5cbi8qKlxuICogV2hldGhlciB0byBvbWl0IGA8L29wdGlvbj5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIG9wdGlvbihfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleClcbiAgcmV0dXJuIChcbiAgICAhbmV4dCB8fFxuICAgIChuZXh0LnR5cGUgPT09ICdlbGVtZW50JyAmJlxuICAgICAgKG5leHQudGFnTmFtZSA9PT0gJ29wdGlvbicgfHwgbmV4dC50YWdOYW1lID09PSAnb3B0Z3JvdXAnKSlcbiAgKVxufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPC90aGVhZD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRoZWFkKF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gQm9vbGVhbihcbiAgICBuZXh0ICYmXG4gICAgICBuZXh0LnR5cGUgPT09ICdlbGVtZW50JyAmJlxuICAgICAgKG5leHQudGFnTmFtZSA9PT0gJ3Rib2R5JyB8fCBuZXh0LnRhZ05hbWUgPT09ICd0Zm9vdCcpXG4gIClcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvdGJvZHk+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IF9cbiAqICAgRWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBlbGVtZW50IGluIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIGNsb3NpbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiB0Ym9keShfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleClcbiAgcmV0dXJuIChcbiAgICAhbmV4dCB8fFxuICAgIChuZXh0LnR5cGUgPT09ICdlbGVtZW50JyAmJlxuICAgICAgKG5leHQudGFnTmFtZSA9PT0gJ3Rib2R5JyB8fCBuZXh0LnRhZ05hbWUgPT09ICd0Zm9vdCcpKVxuICApXG59XG5cbi8qKlxuICogV2hldGhlciB0byBvbWl0IGA8L3Rmb290PmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBfXG4gKiAgIEVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgSW5kZXggb2YgZWxlbWVudCBpbiBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBjbG9zaW5nIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuZnVuY3Rpb24gdGZvb3QoXywgaW5kZXgsIHBhcmVudCkge1xuICByZXR1cm4gIXNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPC90cj5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRyKF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gIW5leHQgfHwgKG5leHQudHlwZSA9PT0gJ2VsZW1lbnQnICYmIG5leHQudGFnTmFtZSA9PT0gJ3RyJylcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvdGQ+YCBvciBgPC90aD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNlbGxzKF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gKFxuICAgICFuZXh0IHx8XG4gICAgKG5leHQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAobmV4dC50YWdOYW1lID09PSAndGQnIHx8IG5leHQudGFnTmFtZSA9PT0gJ3RoJykpXG4gIClcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge0VsZW1lbnQsIFBhcmVudHN9IGZyb20gJ2hhc3QnXG4gKi9cblxuaW1wb3J0IHt3aGl0ZXNwYWNlfSBmcm9tICdoYXN0LXV0aWwtd2hpdGVzcGFjZSdcbmltcG9ydCB7c2libGluZ0FmdGVyLCBzaWJsaW5nQmVmb3JlfSBmcm9tICcuL3V0aWwvc2libGluZ3MuanMnXG5pbXBvcnQge2Nsb3Npbmd9IGZyb20gJy4vY2xvc2luZy5qcydcbmltcG9ydCB7b21pc3Npb259IGZyb20gJy4vb21pc3Npb24uanMnXG5cbmV4cG9ydCBjb25zdCBvcGVuaW5nID0gb21pc3Npb24oe1xuICBib2R5LFxuICBjb2xncm91cCxcbiAgaGVhZCxcbiAgaHRtbCxcbiAgdGJvZHlcbn0pXG5cbi8qKlxuICogV2hldGhlciB0byBvbWl0IGA8aHRtbD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZVxuICogICBFbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIG9wZW5pbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiBodG1sKG5vZGUpIHtcbiAgY29uc3QgaGVhZCA9IHNpYmxpbmdBZnRlcihub2RlLCAtMSlcbiAgcmV0dXJuICFoZWFkIHx8IGhlYWQudHlwZSAhPT0gJ2NvbW1lbnQnXG59XG5cbi8qKlxuICogV2hldGhlciB0byBvbWl0IGA8aGVhZD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZVxuICogICBFbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIG9wZW5pbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiBoZWFkKG5vZGUpIHtcbiAgLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPn0gKi9cbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKVxuXG4gIC8vIFdoZXRoZXIgYHNyY2RvY2Agb3Igbm90LFxuICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbW9kZWwgYXQgbGVhc3QgZG9lc25cdTIwMTl0IGhhdmUgdG9vIG1hbnkgYGJhc2Vgcy9gdGl0bGVgcy5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgaWYgKFxuICAgICAgY2hpbGQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAoY2hpbGQudGFnTmFtZSA9PT0gJ2Jhc2UnIHx8IGNoaWxkLnRhZ05hbWUgPT09ICd0aXRsZScpXG4gICAgKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMoY2hpbGQudGFnTmFtZSkpIHJldHVybiBmYWxzZVxuICAgICAgc2Vlbi5hZGQoY2hpbGQudGFnTmFtZSlcbiAgICB9XG4gIH1cblxuICAvLyBcdTIwMUNNYXkgYmUgb21pdHRlZCBpZiB0aGUgZWxlbWVudCBpcyBlbXB0eSxcbiAgLy8gb3IgaWYgdGhlIGZpcnN0IHRoaW5nIGluc2lkZSB0aGUgaGVhZCBlbGVtZW50IGlzIGFuIGVsZW1lbnQuXHUyMDFEXG4gIGNvbnN0IGNoaWxkID0gbm9kZS5jaGlsZHJlblswXVxuICByZXR1cm4gIWNoaWxkIHx8IGNoaWxkLnR5cGUgPT09ICdlbGVtZW50J1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPGJvZHk+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqICAgRWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBvcGVuaW5nIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuZnVuY3Rpb24gYm9keShub2RlKSB7XG4gIGNvbnN0IGhlYWQgPSBzaWJsaW5nQWZ0ZXIobm9kZSwgLTEsIHRydWUpXG5cbiAgcmV0dXJuIChcbiAgICAhaGVhZCB8fFxuICAgIChoZWFkLnR5cGUgIT09ICdjb21tZW50JyAmJlxuICAgICAgIShoZWFkLnR5cGUgPT09ICd0ZXh0JyAmJiB3aGl0ZXNwYWNlKGhlYWQudmFsdWUuY2hhckF0KDApKSkgJiZcbiAgICAgICEoXG4gICAgICAgIGhlYWQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAgIChoZWFkLnRhZ05hbWUgPT09ICdtZXRhJyB8fFxuICAgICAgICAgIGhlYWQudGFnTmFtZSA9PT0gJ2xpbmsnIHx8XG4gICAgICAgICAgaGVhZC50YWdOYW1lID09PSAnc2NyaXB0JyB8fFxuICAgICAgICAgIGhlYWQudGFnTmFtZSA9PT0gJ3N0eWxlJyB8fFxuICAgICAgICAgIGhlYWQudGFnTmFtZSA9PT0gJ3RlbXBsYXRlJylcbiAgICAgICkpXG4gIClcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDxjb2xncm91cD5gLlxuICogVGhlIHNwZWMgZGVzY3JpYmVzIHNvbWUgbG9naWMgZm9yIHRoZSBvcGVuaW5nIHRhZywgYnV0IGl0XHUyMDE5cyBlYXNpZXIgdG9cbiAqIGltcGxlbWVudCBpbiB0aGUgY2xvc2luZyB0YWcsIHRvIHRoZSBzYW1lIGVmZmVjdCwgc28gd2UgaGFuZGxlIGl0IHRoZXJlXG4gKiBpbnN0ZWFkLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZVxuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgb3BlbmluZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbGdyb3VwKG5vZGUsIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgcHJldmlvdXMgPSBzaWJsaW5nQmVmb3JlKHBhcmVudCwgaW5kZXgpXG4gIGNvbnN0IGhlYWQgPSBzaWJsaW5nQWZ0ZXIobm9kZSwgLTEsIHRydWUpXG5cbiAgLy8gUHJldmlvdXMgY29sZ3JvdXAgd2FzIGFscmVhZHkgb21pdHRlZC5cbiAgaWYgKFxuICAgIHBhcmVudCAmJlxuICAgIHByZXZpb3VzICYmXG4gICAgcHJldmlvdXMudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgcHJldmlvdXMudGFnTmFtZSA9PT0gJ2NvbGdyb3VwJyAmJlxuICAgIGNsb3NpbmcocHJldmlvdXMsIHBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHByZXZpb3VzKSwgcGFyZW50KVxuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBCb29sZWFuKGhlYWQgJiYgaGVhZC50eXBlID09PSAnZWxlbWVudCcgJiYgaGVhZC50YWdOYW1lID09PSAnY29sJylcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDx0Ym9keT5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZVxuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgb3BlbmluZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRib2R5KG5vZGUsIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgcHJldmlvdXMgPSBzaWJsaW5nQmVmb3JlKHBhcmVudCwgaW5kZXgpXG4gIGNvbnN0IGhlYWQgPSBzaWJsaW5nQWZ0ZXIobm9kZSwgLTEpXG5cbiAgLy8gUHJldmlvdXMgdGFibGUgc2VjdGlvbiB3YXMgYWxyZWFkeSBvbWl0dGVkLlxuICBpZiAoXG4gICAgcGFyZW50ICYmXG4gICAgcHJldmlvdXMgJiZcbiAgICBwcmV2aW91cy50eXBlID09PSAnZWxlbWVudCcgJiZcbiAgICAocHJldmlvdXMudGFnTmFtZSA9PT0gJ3RoZWFkJyB8fCBwcmV2aW91cy50YWdOYW1lID09PSAndGJvZHknKSAmJlxuICAgIGNsb3NpbmcocHJldmlvdXMsIHBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHByZXZpb3VzKSwgcGFyZW50KVxuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBCb29sZWFuKGhlYWQgJiYgaGVhZC50eXBlID09PSAnZWxlbWVudCcgJiYgaGVhZC50YWdOYW1lID09PSAndHInKVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7RWxlbWVudCwgUGFyZW50cywgUHJvcGVydGllc30gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICcuLi9pbmRleC5qcydcbiAqL1xuXG5pbXBvcnQge2Njb3VudH0gZnJvbSAnY2NvdW50J1xuaW1wb3J0IHtzdHJpbmdpZnkgYXMgY29tbWFzfSBmcm9tICdjb21tYS1zZXBhcmF0ZWQtdG9rZW5zJ1xuaW1wb3J0IHtmaW5kLCBzdmd9IGZyb20gJ3Byb3BlcnR5LWluZm9ybWF0aW9uJ1xuaW1wb3J0IHtzdHJpbmdpZnkgYXMgc3BhY2VzfSBmcm9tICdzcGFjZS1zZXBhcmF0ZWQtdG9rZW5zJ1xuaW1wb3J0IHtzdHJpbmdpZnlFbnRpdGllc30gZnJvbSAnc3RyaW5naWZ5LWVudGl0aWVzJ1xuaW1wb3J0IHtjbG9zaW5nfSBmcm9tICcuLi9vbWlzc2lvbi9jbG9zaW5nLmpzJ1xuaW1wb3J0IHtvcGVuaW5nfSBmcm9tICcuLi9vbWlzc2lvbi9vcGVuaW5nLmpzJ1xuXG4vKipcbiAqIE1hcHMgb2Ygc3Vic2V0cy5cbiAqXG4gKiBFYWNoIHZhbHVlIGlzIGEgbWF0cml4IG9mIHR1cGxlcy5cbiAqIFRoZSB2YWx1ZSBhdCBgMGAgY2F1c2VzIHBhcnNlIGVycm9ycywgdGhlIHZhbHVlIGF0IGAxYCBpcyB2YWxpZC5cbiAqIE9mIGJvdGgsIHRoZSB2YWx1ZSBhdCBgMGAgaXMgdW5zYWZlLCBhbmQgdGhlIHZhbHVlIGF0IGAxYCBpcyBzYWZlLlxuICpcbiAqIEB0eXBlIHtSZWNvcmQ8J2RvdWJsZScgfCAnbmFtZScgfCAnc2luZ2xlJyB8ICd1bnF1b3RlZCcsIEFycmF5PFtBcnJheTxzdHJpbmc+LCBBcnJheTxzdHJpbmc+XT4+fVxuICovXG5jb25zdCBjb25zdGFudHMgPSB7XG4gIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS1uYW1lLXN0YXRlPi5cbiAgbmFtZTogW1xuICAgIFsnXFx0XFxuXFxmXFxyICYvPT4nLnNwbGl0KCcnKSwgJ1xcdFxcblxcZlxcciBcIiZcXCcvPT5gJy5zcGxpdCgnJyldLFxuICAgIFsnXFwwXFx0XFxuXFxmXFxyIFwiJlxcJy88PT4nLnNwbGl0KCcnKSwgJ1xcMFxcdFxcblxcZlxcciBcIiZcXCcvPD0+YCcuc3BsaXQoJycpXVxuICBdLFxuICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtdmFsdWUtKHVucXVvdGVkKS1zdGF0ZT4uXG4gIHVucXVvdGVkOiBbXG4gICAgWydcXHRcXG5cXGZcXHIgJj4nLnNwbGl0KCcnKSwgJ1xcMFxcdFxcblxcZlxcciBcIiZcXCc8PT5gJy5zcGxpdCgnJyldLFxuICAgIFsnXFwwXFx0XFxuXFxmXFxyIFwiJlxcJzw9PmAnLnNwbGl0KCcnKSwgJ1xcMFxcdFxcblxcZlxcciBcIiZcXCc8PT5gJy5zcGxpdCgnJyldXG4gIF0sXG4gIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS12YWx1ZS0oc2luZ2xlLXF1b3RlZCktc3RhdGU+LlxuICBzaW5nbGU6IFtcbiAgICBbXCImJ1wiLnNwbGl0KCcnKSwgJ1wiJlxcJ2AnLnNwbGl0KCcnKV0sXG4gICAgW1wiXFwwJidcIi5zcGxpdCgnJyksICdcXDBcIiZcXCdgJy5zcGxpdCgnJyldXG4gIF0sXG4gIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS12YWx1ZS0oZG91YmxlLXF1b3RlZCktc3RhdGU+LlxuICBkb3VibGU6IFtcbiAgICBbJ1wiJicuc3BsaXQoJycpLCAnXCImXFwnYCcuc3BsaXQoJycpXSxcbiAgICBbJ1xcMFwiJicuc3BsaXQoJycpLCAnXFwwXCImXFwnYCcuc3BsaXQoJycpXVxuICBdXG59XG5cbi8qKlxuICogU2VyaWFsaXplIGFuIGVsZW1lbnQgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqICAgTm9kZSB0byBoYW5kbGUuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgSW5kZXggb2YgYG5vZGVgIGluIGBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgYG5vZGVgLlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU2VyaWFsaXplZCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudChub2RlLCBpbmRleCwgcGFyZW50LCBzdGF0ZSkge1xuICBjb25zdCBzY2hlbWEgPSBzdGF0ZS5zY2hlbWFcbiAgY29uc3Qgb21pdCA9IHNjaGVtYS5zcGFjZSA9PT0gJ3N2ZycgPyBmYWxzZSA6IHN0YXRlLnNldHRpbmdzLm9taXRPcHRpb25hbFRhZ3NcbiAgbGV0IHNlbGZDbG9zaW5nID1cbiAgICBzY2hlbWEuc3BhY2UgPT09ICdzdmcnXG4gICAgICA/IHN0YXRlLnNldHRpbmdzLmNsb3NlRW1wdHlFbGVtZW50c1xuICAgICAgOiBzdGF0ZS5zZXR0aW5ncy52b2lkcy5pbmNsdWRlcyhub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICBjb25zdCBwYXJ0cyA9IFtdXG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICBsZXQgbGFzdFxuXG4gIGlmIChzY2hlbWEuc3BhY2UgPT09ICdodG1sJyAmJiBub2RlLnRhZ05hbWUgPT09ICdzdmcnKSB7XG4gICAgc3RhdGUuc2NoZW1hID0gc3ZnXG4gIH1cblxuICBjb25zdCBhdHRyaWJ1dGVzID0gc2VyaWFsaXplQXR0cmlidXRlcyhzdGF0ZSwgbm9kZS5wcm9wZXJ0aWVzKVxuXG4gIGNvbnN0IGNvbnRlbnQgPSBzdGF0ZS5hbGwoXG4gICAgc2NoZW1hLnNwYWNlID09PSAnaHRtbCcgJiYgbm9kZS50YWdOYW1lID09PSAndGVtcGxhdGUnID8gbm9kZS5jb250ZW50IDogbm9kZVxuICApXG5cbiAgc3RhdGUuc2NoZW1hID0gc2NoZW1hXG5cbiAgLy8gSWYgdGhlIG5vZGUgaXMgY2F0ZWdvcmlzZWQgYXMgdm9pZCwgYnV0IGl0IGhhcyBjaGlsZHJlbiwgcmVtb3ZlIHRoZVxuICAvLyBjYXRlZ29yaXNhdGlvbi5cbiAgLy8gVGhpcyBlbmFibGVzIGZvciBleGFtcGxlIGBtZW51aXRlbWBzLCB3aGljaCBhcmUgdm9pZCBpbiBXM0MgSFRNTCBidXQgbm90XG4gIC8vIHZvaWQgaW4gV0hBVFdHIEhUTUwsIHRvIGJlIHN0cmluZ2lmaWVkIHByb3Blcmx5LlxuICAvLyBOb3RlOiBgbWVudWl0ZW1gIGhhcyBzaW5jZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgSFRNTCBzcGVjLCBhbmQgc28gaXMgbm9cbiAgLy8gbG9uZ2VyIHZvaWQuXG4gIGlmIChjb250ZW50KSBzZWxmQ2xvc2luZyA9IGZhbHNlXG5cbiAgaWYgKGF0dHJpYnV0ZXMgfHwgIW9taXQgfHwgIW9wZW5pbmcobm9kZSwgaW5kZXgsIHBhcmVudCkpIHtcbiAgICBwYXJ0cy5wdXNoKCc8Jywgbm9kZS50YWdOYW1lLCBhdHRyaWJ1dGVzID8gJyAnICsgYXR0cmlidXRlcyA6ICcnKVxuXG4gICAgaWYgKFxuICAgICAgc2VsZkNsb3NpbmcgJiZcbiAgICAgIChzY2hlbWEuc3BhY2UgPT09ICdzdmcnIHx8IHN0YXRlLnNldHRpbmdzLmNsb3NlU2VsZkNsb3NpbmcpXG4gICAgKSB7XG4gICAgICBsYXN0ID0gYXR0cmlidXRlcy5jaGFyQXQoYXR0cmlidXRlcy5sZW5ndGggLSAxKVxuICAgICAgaWYgKFxuICAgICAgICAhc3RhdGUuc2V0dGluZ3MudGlnaHRTZWxmQ2xvc2luZyB8fFxuICAgICAgICBsYXN0ID09PSAnLycgfHxcbiAgICAgICAgKGxhc3QgJiYgbGFzdCAhPT0gJ1wiJyAmJiBsYXN0ICE9PSBcIidcIilcbiAgICAgICkge1xuICAgICAgICBwYXJ0cy5wdXNoKCcgJylcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnLycpXG4gICAgfVxuXG4gICAgcGFydHMucHVzaCgnPicpXG4gIH1cblxuICBwYXJ0cy5wdXNoKGNvbnRlbnQpXG5cbiAgaWYgKCFzZWxmQ2xvc2luZyAmJiAoIW9taXQgfHwgIWNsb3Npbmcobm9kZSwgaW5kZXgsIHBhcmVudCkpKSB7XG4gICAgcGFydHMucHVzaCgnPC8nICsgbm9kZS50YWdOYW1lICsgJz4nKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEBwYXJhbSB7UHJvcGVydGllcyB8IG51bGwgfCB1bmRlZmluZWR9IHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUF0dHJpYnV0ZXMoc3RhdGUsIHByb3BlcnRpZXMpIHtcbiAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICBjb25zdCB2YWx1ZXMgPSBbXVxuICBsZXQgaW5kZXggPSAtMVxuICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgbGV0IGtleVxuXG4gIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgZm9yIChrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgaWYgKHByb3BlcnRpZXNba2V5XSAhPT0gbnVsbCAmJiBwcm9wZXJ0aWVzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNlcmlhbGl6ZUF0dHJpYnV0ZShzdGF0ZSwga2V5LCBwcm9wZXJ0aWVzW2tleV0pXG4gICAgICAgIGlmICh2YWx1ZSkgdmFsdWVzLnB1c2godmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKCsraW5kZXggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgbGFzdCA9IHN0YXRlLnNldHRpbmdzLnRpZ2h0QXR0cmlidXRlc1xuICAgICAgPyB2YWx1ZXNbaW5kZXhdLmNoYXJBdCh2YWx1ZXNbaW5kZXhdLmxlbmd0aCAtIDEpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gSW4gdGlnaHQgbW9kZSwgZG9uXHUyMDE5dCBhZGQgYSBzcGFjZSBhZnRlciBxdW90ZWQgYXR0cmlidXRlcy5cbiAgICBpZiAoaW5kZXggIT09IHZhbHVlcy5sZW5ndGggLSAxICYmIGxhc3QgIT09ICdcIicgJiYgbGFzdCAhPT0gXCInXCIpIHtcbiAgICAgIHZhbHVlc1tpbmRleF0gKz0gJyAnXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlcy5qb2luKCcnKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge1Byb3BlcnRpZXNba2V5b2YgUHJvcGVydGllc119IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVBdHRyaWJ1dGUoc3RhdGUsIGtleSwgdmFsdWUpIHtcbiAgY29uc3QgaW5mbyA9IGZpbmQoc3RhdGUuc2NoZW1hLCBrZXkpXG4gIGNvbnN0IHggPVxuICAgIHN0YXRlLnNldHRpbmdzLmFsbG93UGFyc2VFcnJvcnMgJiYgc3RhdGUuc2NoZW1hLnNwYWNlID09PSAnaHRtbCcgPyAwIDogMVxuICBjb25zdCB5ID0gc3RhdGUuc2V0dGluZ3MuYWxsb3dEYW5nZXJvdXNDaGFyYWN0ZXJzID8gMCA6IDFcbiAgbGV0IHF1b3RlID0gc3RhdGUucXVvdGVcbiAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gIGxldCByZXN1bHRcblxuICBpZiAoaW5mby5vdmVybG9hZGVkQm9vbGVhbiAmJiAodmFsdWUgPT09IGluZm8uYXR0cmlidXRlIHx8IHZhbHVlID09PSAnJykpIHtcbiAgICB2YWx1ZSA9IHRydWVcbiAgfSBlbHNlIGlmIChcbiAgICAoaW5mby5ib29sZWFuIHx8IGluZm8ub3ZlcmxvYWRlZEJvb2xlYW4pICYmXG4gICAgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgdmFsdWUgPT09IGluZm8uYXR0cmlidXRlIHx8IHZhbHVlID09PSAnJylcbiAgKSB7XG4gICAgdmFsdWUgPSBCb29sZWFuKHZhbHVlKVxuICB9XG5cbiAgaWYgKFxuICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgIHZhbHVlID09PSBmYWxzZSB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc05hTih2YWx1ZSkpXG4gICkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgY29uc3QgbmFtZSA9IHN0cmluZ2lmeUVudGl0aWVzKFxuICAgIGluZm8uYXR0cmlidXRlLFxuICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMsIHtcbiAgICAgIC8vIEFsd2F5cyBlbmNvZGUgd2l0aG91dCBwYXJzZSBlcnJvcnMgaW4gbm9uLUhUTUwuXG4gICAgICBzdWJzZXQ6IGNvbnN0YW50cy5uYW1lW3hdW3ldXG4gICAgfSlcbiAgKVxuXG4gIC8vIE5vIHZhbHVlLlxuICAvLyBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgYm9vbGVhbiBwcm9wZXJ0eSBpbiBTVkc6IGBbZG93bmxvYWRdYCBvblxuICAvLyBgPGE+YC5cbiAgLy8gVGhpcyBwcm9wZXJ0eSBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgaW4gYnJvd3NlcnMgKEZpcmVmb3gsIFNhZmFyaSwgQ2hyb21lKSxcbiAgLy8gc28gSSBjYW5cdTIwMTl0IHRlc3QgaWYgZHJvcHBpbmcgdGhlIHZhbHVlIHdvcmtzLlxuICAvLyBCdXQgSSBhc3N1bWUgdGhhdCBpdCBzaG91bGQ6XG4gIC8vXG4gIC8vIGBgYGh0bWxcbiAgLy8gPCFkb2N0eXBlIGh0bWw+XG4gIC8vIDxzdmcgdmlld0JveD1cIjAgMCAxMDAgMTAwXCI+XG4gIC8vICAgPGEgaHJlZj1odHRwczovL2V4YW1wbGUuY29tIGRvd25sb2FkPlxuICAvLyAgICAgPGNpcmNsZSBjeD01MCBjeT00MCByPTM1IC8+XG4gIC8vICAgPC9hPlxuICAvLyA8L3N2Zz5cbiAgLy8gYGBgXG4gIC8vXG4gIC8vIFNlZTogPGh0dHBzOi8vZ2l0aHViLmNvbS93b29vcm0vcHJvcGVydHktaW5mb3JtYXRpb24vYmxvYi9tYWluL2xpYi9zdmcuanM+XG4gIGlmICh2YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIG5hbWVcblxuICAvLyBgc3BhY2VzYCBkb2Vzblx1MjAxOXQgYWNjZXB0IGEgc2Vjb25kIGFyZ3VtZW50LCBidXQgaXRcdTIwMTlzIGdpdmVuIGhlcmUganVzdCB0b1xuICAvLyBrZWVwIHRoZSBjb2RlIGNsZWFuZXIuXG4gIHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICA/IChpbmZvLmNvbW1hU2VwYXJhdGVkID8gY29tbWFzIDogc3BhY2VzKSh2YWx1ZSwge1xuICAgICAgICBwYWRMZWZ0OiAhc3RhdGUuc2V0dGluZ3MudGlnaHRDb21tYVNlcGFyYXRlZExpc3RzXG4gICAgICB9KVxuICAgIDogU3RyaW5nKHZhbHVlKVxuXG4gIGlmIChzdGF0ZS5zZXR0aW5ncy5jb2xsYXBzZUVtcHR5QXR0cmlidXRlcyAmJiAhdmFsdWUpIHJldHVybiBuYW1lXG5cbiAgLy8gQ2hlY2sgdW5xdW90ZWQgdmFsdWUuXG4gIGlmIChzdGF0ZS5zZXR0aW5ncy5wcmVmZXJVbnF1b3RlZCkge1xuICAgIHJlc3VsdCA9IHN0cmluZ2lmeUVudGl0aWVzKFxuICAgICAgdmFsdWUsXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7XG4gICAgICAgIGF0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgc3Vic2V0OiBjb25zdGFudHMudW5xdW90ZWRbeF1beV1cbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgLy8gSWYgd2UgZG9uXHUyMDE5dCB3YW50IHVucXVvdGVkLCBvciBpZiBgdmFsdWVgIGNvbnRhaW5zIGNoYXJhY3RlciByZWZlcmVuY2VzIHdoZW5cbiAgLy8gdW5xdW90ZWRcdTIwMjZcbiAgaWYgKHJlc3VsdCAhPT0gdmFsdWUpIHtcbiAgICAvLyBJZiB0aGUgYWx0ZXJuYXRpdmUgaXMgbGVzcyBjb21tb24gdGhhbiBgcXVvdGVgLCBzd2l0Y2guXG4gICAgaWYgKFxuICAgICAgc3RhdGUuc2V0dGluZ3MucXVvdGVTbWFydCAmJlxuICAgICAgY2NvdW50KHZhbHVlLCBxdW90ZSkgPiBjY291bnQodmFsdWUsIHN0YXRlLmFsdGVybmF0aXZlKVxuICAgICkge1xuICAgICAgcXVvdGUgPSBzdGF0ZS5hbHRlcm5hdGl2ZVxuICAgIH1cblxuICAgIHJlc3VsdCA9XG4gICAgICBxdW90ZSArXG4gICAgICBzdHJpbmdpZnlFbnRpdGllcyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMsIHtcbiAgICAgICAgICAvLyBBbHdheXMgZW5jb2RlIHdpdGhvdXQgcGFyc2UgZXJyb3JzIGluIG5vbi1IVE1MLlxuICAgICAgICAgIHN1YnNldDogKHF1b3RlID09PSBcIidcIiA/IGNvbnN0YW50cy5zaW5nbGUgOiBjb25zdGFudHMuZG91YmxlKVt4XVt5XSxcbiAgICAgICAgICBhdHRyaWJ1dGU6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICkgK1xuICAgICAgcXVvdGVcbiAgfVxuXG4gIC8vIERvblx1MjAxOXQgYWRkIGEgYD1gIGZvciB1bnF1b3RlZCBlbXB0aWVzLlxuICByZXR1cm4gbmFtZSArIChyZXN1bHQgPyAnPScgKyByZXN1bHQgOiByZXN1bHQpXG59XG4iLCAiLyoqXG4gKiBAaW1wb3J0IHtQYXJlbnRzLCBUZXh0fSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7UmF3fSBmcm9tICdtZGFzdC11dGlsLXRvLWhhc3QnXG4gKiBAaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi4vaW5kZXguanMnXG4gKi9cblxuaW1wb3J0IHtzdHJpbmdpZnlFbnRpdGllc30gZnJvbSAnc3RyaW5naWZ5LWVudGl0aWVzJ1xuXG4vLyBEZWNsYXJlIGFycmF5IGFzIHZhcmlhYmxlIHNvIGl0IGNhbiBiZSBjYWNoZWQgYnkgYHN0cmluZ2lmeUVudGl0aWVzYFxuY29uc3QgdGV4dEVudGl0eVN1YnNldCA9IFsnPCcsICcmJ11cblxuLyoqXG4gKiBTZXJpYWxpemUgYSB0ZXh0IG5vZGUuXG4gKlxuICogQHBhcmFtIHtSYXcgfCBUZXh0fSBub2RlXG4gKiAgIE5vZGUgdG8gaGFuZGxlLlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IF9cbiAqICAgSW5kZXggb2YgYG5vZGVgIGluIGBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgYG5vZGVgLlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU2VyaWFsaXplZCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGV4dChub2RlLCBfLCBwYXJlbnQsIHN0YXRlKSB7XG4gIC8vIENoZWNrIGlmIGNvbnRlbnQgb2YgYG5vZGVgIHNob3VsZCBiZSBlc2NhcGVkLlxuICByZXR1cm4gcGFyZW50ICYmXG4gICAgcGFyZW50LnR5cGUgPT09ICdlbGVtZW50JyAmJlxuICAgIChwYXJlbnQudGFnTmFtZSA9PT0gJ3NjcmlwdCcgfHwgcGFyZW50LnRhZ05hbWUgPT09ICdzdHlsZScpXG4gICAgPyBub2RlLnZhbHVlXG4gICAgOiBzdHJpbmdpZnlFbnRpdGllcyhcbiAgICAgICAgbm9kZS52YWx1ZSxcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywge1xuICAgICAgICAgIHN1YnNldDogdGV4dEVudGl0eVN1YnNldFxuICAgICAgICB9KVxuICAgICAgKVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7UGFyZW50c30gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1Jhd30gZnJvbSAnbWRhc3QtdXRpbC10by1oYXN0J1xuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJy4uL2luZGV4LmpzJ1xuICovXG5cbmltcG9ydCB7dGV4dH0gZnJvbSAnLi90ZXh0LmpzJ1xuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIHJhdyBub2RlLlxuICpcbiAqIEBwYXJhbSB7UmF3fSBub2RlXG4gKiAgIE5vZGUgdG8gaGFuZGxlLlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGBub2RlYCBpbiBgcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGBub2RlYC5cbiAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlXG4gKiAgIEluZm8gcGFzc2VkIGFyb3VuZCBhYm91dCB0aGUgY3VycmVudCBzdGF0ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhdyhub2RlLCBpbmRleCwgcGFyZW50LCBzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuc2V0dGluZ3MuYWxsb3dEYW5nZXJvdXNIdG1sXG4gICAgPyBub2RlLnZhbHVlXG4gICAgOiB0ZXh0KG5vZGUsIGluZGV4LCBwYXJlbnQsIHN0YXRlKVxufVxuIiwgIi8qKlxuICogQGltcG9ydCB7UGFyZW50cywgUm9vdH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1N0YXRlfSBmcm9tICcuLi9pbmRleC5qcydcbiAqL1xuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIHJvb3QuXG4gKlxuICogQHBhcmFtIHtSb290fSBub2RlXG4gKiAgIE5vZGUgdG8gaGFuZGxlLlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IF8xXG4gKiAgIEluZGV4IG9mIGBub2RlYCBpbiBgcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBfMlxuICogICBQYXJlbnQgb2YgYG5vZGVgLlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU2VyaWFsaXplZCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdChub2RlLCBfMSwgXzIsIHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5hbGwobm9kZSlcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge05vZGVzLCBQYXJlbnRzfSBmcm9tICdoYXN0J1xuICogQGltcG9ydCB7U3RhdGV9IGZyb20gJy4uL2luZGV4LmpzJ1xuICovXG5cbmltcG9ydCB7endpdGNofSBmcm9tICd6d2l0Y2gnXG5pbXBvcnQge2NvbW1lbnR9IGZyb20gJy4vY29tbWVudC5qcydcbmltcG9ydCB7ZG9jdHlwZX0gZnJvbSAnLi9kb2N0eXBlLmpzJ1xuaW1wb3J0IHtlbGVtZW50fSBmcm9tICcuL2VsZW1lbnQuanMnXG5pbXBvcnQge3Jhd30gZnJvbSAnLi9yYXcuanMnXG5pbXBvcnQge3Jvb3R9IGZyb20gJy4vcm9vdC5qcydcbmltcG9ydCB7dGV4dH0gZnJvbSAnLi90ZXh0LmpzJ1xuXG4vKipcbiAqIEB0eXBlIHsobm9kZTogTm9kZXMsIGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsIHBhcmVudDogUGFyZW50cyB8IHVuZGVmaW5lZCwgc3RhdGU6IFN0YXRlKSA9PiBzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGUgPSB6d2l0Y2goJ3R5cGUnLCB7XG4gIGludmFsaWQsXG4gIHVua25vd24sXG4gIGhhbmRsZXJzOiB7Y29tbWVudCwgZG9jdHlwZSwgZWxlbWVudCwgcmF3LCByb290LCB0ZXh0fVxufSlcblxuLyoqXG4gKiBGYWlsIHdoZW4gYSBub24tbm9kZSBpcyBmb3VuZCBpbiB0aGUgdHJlZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IG5vZGVcbiAqICAgVW5rbm93biB2YWx1ZS5cbiAqIEByZXR1cm5zIHtuZXZlcn1cbiAqICAgTmV2ZXIuXG4gKi9cbmZ1bmN0aW9uIGludmFsaWQobm9kZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG5vZGUsIG5vdCBgJyArIG5vZGUgKyAnYCcpXG59XG5cbi8qKlxuICogRmFpbCB3aGVuIGEgbm9kZSB3aXRoIGFuIHVua25vd24gdHlwZSBpcyBmb3VuZCBpbiB0aGUgdHJlZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IG5vZGVfXG4gKiAgVW5rbm93biBub2RlLlxuICogQHJldHVybnMge25ldmVyfVxuICogICBOZXZlci5cbiAqL1xuZnVuY3Rpb24gdW5rbm93bihub2RlXykge1xuICAvLyBgdHlwZWAgaXMgZ3VhcmFudGVlZCBieSBydW50aW1lIEpTLlxuICBjb25zdCBub2RlID0gLyoqIEB0eXBlIHtOb2Rlc30gKi8gKG5vZGVfKVxuICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21waWxlIHVua25vd24gbm9kZSBgJyArIG5vZGUudHlwZSArICdgJylcbn1cbiIsICIvKipcbiAqIEBpbXBvcnQge05vZGVzLCBQYXJlbnRzLCBSb290Q29udGVudH0gZnJvbSAnaGFzdCdcbiAqIEBpbXBvcnQge1NjaGVtYX0gZnJvbSAncHJvcGVydHktaW5mb3JtYXRpb24nXG4gKiBAaW1wb3J0IHtPcHRpb25zIGFzIFN0cmluZ2lmeUVudGl0aWVzT3B0aW9uc30gZnJvbSAnc3RyaW5naWZ5LWVudGl0aWVzJ1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09taXQ8U3RyaW5naWZ5RW50aXRpZXNPcHRpb25zLCAnYXR0cmlidXRlJyB8ICdlc2NhcGVPbmx5JyB8ICdzdWJzZXQnPn0gQ2hhcmFjdGVyUmVmZXJlbmNlc1xuICpcbiAqIEB0eXBlZGVmIE9wdGlvbnNcbiAqICAgQ29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFthbGxvd0Rhbmdlcm91c0NoYXJhY3RlcnM9ZmFsc2VdXG4gKiAgIERvIG5vdCBlbmNvZGUgc29tZSBjaGFyYWN0ZXJzIHdoaWNoIGNhdXNlIFhTUyB2dWxuZXJhYmlsaXRpZXMgaW4gb2xkZXJcbiAqICAgYnJvd3NlcnMgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICpcbiAqICAgPiBcdTI2QTBcdUZFMEYgKipEYW5nZXIqKjogb25seSBzZXQgdGhpcyBpZiB5b3UgY29tcGxldGVseSB0cnVzdCB0aGUgY29udGVudC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFthbGxvd0Rhbmdlcm91c0h0bWw9ZmFsc2VdXG4gKiAgIEFsbG93IGByYXdgIG5vZGVzIGFuZCBpbnNlcnQgdGhlbSBhcyByYXcgSFRNTCAoZGVmYXVsdDogYGZhbHNlYCkuXG4gKlxuICogICBXaGVuIGBmYWxzZWAsIGBSYXdgIG5vZGVzIGFyZSBlbmNvZGVkLlxuICpcbiAqICAgPiBcdTI2QTBcdUZFMEYgKipEYW5nZXIqKjogb25seSBzZXQgdGhpcyBpZiB5b3UgY29tcGxldGVseSB0cnVzdCB0aGUgY29udGVudC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFthbGxvd1BhcnNlRXJyb3JzPWZhbHNlXVxuICogICBEbyBub3QgZW5jb2RlIGNoYXJhY3RlcnMgd2hpY2ggY2F1c2UgcGFyc2UgZXJyb3JzIChldmVuIHRob3VnaCB0aGV5IHdvcmspLFxuICogICB0byBzYXZlIGJ5dGVzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgIE5vdCB1c2VkIGluIHRoZSBTVkcgc3BhY2UuXG4gKlxuICogICA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogaW50ZW50aW9uYWxseSBjcmVhdGVzIHBhcnNlIGVycm9ycyBpbiBtYXJrdXAgKGhvdyBwYXJzZVxuICogICA+IGVycm9ycyBhcmUgaGFuZGxlZCBpcyB3ZWxsIGRlZmluZWQsIHNvIHRoaXMgd29ya3MgYnV0IGlzblx1MjAxOXQgcHJldHR5KS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtib2d1c0NvbW1lbnRzPWZhbHNlXVxuICogICBVc2UgXHUyMDFDYm9ndXMgY29tbWVudHNcdTIwMUQgaW5zdGVhZCBvZiBjb21tZW50cyB0byBzYXZlIGJ5ZXM6IGA8P2NoYXJsaWU+YFxuICogICBpbnN0ZWFkIG9mIGA8IS0tY2hhcmxpZS0tPmAgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICpcbiAqICAgPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IGludGVudGlvbmFsbHkgY3JlYXRlcyBwYXJzZSBlcnJvcnMgaW4gbWFya3VwIChob3cgcGFyc2VcbiAqICAgPiBlcnJvcnMgYXJlIGhhbmRsZWQgaXMgd2VsbCBkZWZpbmVkLCBzbyB0aGlzIHdvcmtzIGJ1dCBpc25cdTIwMTl0IHByZXR0eSkuXG4gKiBAcHJvcGVydHkge0NoYXJhY3RlclJlZmVyZW5jZXMgfCBudWxsIHwgdW5kZWZpbmVkfSBbY2hhcmFjdGVyUmVmZXJlbmNlc11cbiAqICAgQ29uZmlndXJlIGhvdyB0byBzZXJpYWxpemUgY2hhcmFjdGVyIHJlZmVyZW5jZXMgKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtjbG9zZUVtcHR5RWxlbWVudHM9ZmFsc2VdXG4gKiAgIENsb3NlIFNWRyBlbGVtZW50cyB3aXRob3V0IGFueSBjb250ZW50IHdpdGggc2xhc2ggKGAvYCkgb24gdGhlIG9wZW5pbmcgdGFnXG4gKiAgIGluc3RlYWQgb2YgYW4gZW5kIHRhZzogYDxjaXJjbGUgLz5gIGluc3RlYWQgb2YgYDxjaXJjbGU+PC9jaXJjbGU+YFxuICogICAoZGVmYXVsdDogYGZhbHNlYCkuXG4gKlxuICogICBTZWUgYHRpZ2h0U2VsZkNsb3NpbmdgIHRvIGNvbnRyb2wgd2hldGhlciBhIHNwYWNlIGlzIHVzZWQgYmVmb3JlIHRoZVxuICogICBzbGFzaC5cbiAqXG4gKiAgIE5vdCB1c2VkIGluIHRoZSBIVE1MIHNwYWNlLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2Nsb3NlU2VsZkNsb3Npbmc9ZmFsc2VdXG4gKiAgIENsb3NlIHNlbGYtY2xvc2luZyBub2RlcyB3aXRoIGFuIGV4dHJhIHNsYXNoIChgL2ApOiBgPGltZyAvPmAgaW5zdGVhZCBvZlxuICogICBgPGltZz5gIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgIFNlZSBgdGlnaHRTZWxmQ2xvc2luZ2AgdG8gY29udHJvbCB3aGV0aGVyIGEgc3BhY2UgaXMgdXNlZCBiZWZvcmUgdGhlXG4gKiAgIHNsYXNoLlxuICpcbiAqICAgTm90IHVzZWQgaW4gdGhlIFNWRyBzcGFjZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtjb2xsYXBzZUVtcHR5QXR0cmlidXRlcz1mYWxzZV1cbiAqICAgQ29sbGFwc2UgZW1wdHkgYXR0cmlidXRlczogZ2V0IGBjbGFzc2AgaW5zdGVhZCBvZiBgY2xhc3M9XCJcImAgKGRlZmF1bHQ6XG4gKiAgIGBmYWxzZWApLlxuICpcbiAqICAgTm90IHVzZWQgaW4gdGhlIFNWRyBzcGFjZS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBib29sZWFuIGF0dHJpYnV0ZXMgKHN1Y2ggYXMgYGhpZGRlbmApIGFyZSBhbHdheXMgY29sbGFwc2VkLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29taXRPcHRpb25hbFRhZ3M9ZmFsc2VdXG4gKiAgIE9taXQgb3B0aW9uYWwgb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgIEZvciBleGFtcGxlLCBpbiBgPG9sPjxsaT5vbmU8L2xpPjxsaT50d288L2xpPjwvb2w+YCwgYm90aCBgPC9saT5gIGNsb3NpbmdcbiAqICAgdGFncyBjYW4gYmUgb21pdHRlZC5cbiAqICAgVGhlIGZpcnN0IGJlY2F1c2UgaXRcdTIwMTlzIGZvbGxvd2VkIGJ5IGFub3RoZXIgYGxpYCwgdGhlIGxhc3QgYmVjYXVzZSBpdFx1MjAxOXNcbiAqICAgZm9sbG93ZWQgYnkgbm90aGluZy5cbiAqXG4gKiAgIE5vdCB1c2VkIGluIHRoZSBTVkcgc3BhY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbcHJlZmVyVW5xdW90ZWQ9ZmFsc2VdXG4gKiAgIExlYXZlIGF0dHJpYnV0ZXMgdW5xdW90ZWQgaWYgdGhhdCByZXN1bHRzIGluIGxlc3MgYnl0ZXMgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICpcbiAqICAgTm90IHVzZWQgaW4gdGhlIFNWRyBzcGFjZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtxdW90ZVNtYXJ0PWZhbHNlXVxuICogICBVc2UgdGhlIG90aGVyIHF1b3RlIGlmIHRoYXQgcmVzdWx0cyBpbiBsZXNzIGJ5dGVzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqIEBwcm9wZXJ0eSB7UXVvdGUgfCBudWxsIHwgdW5kZWZpbmVkfSBbcXVvdGU9J1wiJ11cbiAqICAgUHJlZmVycmVkIHF1b3RlIHRvIHVzZSAoZGVmYXVsdDogYCdcIidgKS5cbiAqIEBwcm9wZXJ0eSB7U3BhY2UgfCBudWxsIHwgdW5kZWZpbmVkfSBbc3BhY2U9J2h0bWwnXVxuICogICBXaGVuIGFuIGA8c3ZnPmAgZWxlbWVudCBpcyBmb3VuZCBpbiB0aGUgSFRNTCBzcGFjZSwgdGhpcyBwYWNrYWdlIGFscmVhZHlcbiAqICAgYXV0b21hdGljYWxseSBzd2l0Y2hlcyB0byBhbmQgZnJvbSB0aGUgU1ZHIHNwYWNlIHdoZW4gZW50ZXJpbmcgYW5kIGV4aXRpbmdcbiAqICAgaXQgKGRlZmF1bHQ6IGAnaHRtbCdgKS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBoYXN0IGlzIG5vdCBYTUwuXG4gKiAgID4gSXQgc3VwcG9ydHMgU1ZHIGFzIGVtYmVkZGVkIGluIEhUTUwuXG4gKiAgID4gSXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmVhdHVyZXMgYXZhaWxhYmxlIGluIFhNTC5cbiAqICAgPiBQYXNzaW5nIFNWRyBtaWdodCBicmVhayBidXQgZnJhZ21lbnRzIG9mIG1vZGVybiBTVkcgc2hvdWxkIGJlIGZpbmUuXG4gKiAgID4gVXNlIFtgeGFzdGBdW3hhc3RdIGlmIHlvdSBuZWVkIHRvIHN1cHBvcnQgU1ZHIGFzIFhNTC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFt0aWdodEF0dHJpYnV0ZXM9ZmFsc2VdXG4gKiAgIEpvaW4gYXR0cmlidXRlcyB0b2dldGhlciwgd2l0aG91dCB3aGl0ZXNwYWNlLCBpZiBwb3NzaWJsZTogZ2V0XG4gKiAgIGBjbGFzcz1cImEgYlwidGl0bGU9XCJjIGRcImAgaW5zdGVhZCBvZiBgY2xhc3M9XCJhIGJcIiB0aXRsZT1cImMgZFwiYCB0byBzYXZlXG4gKiAgIGJ5dGVzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgIE5vdCB1c2VkIGluIHRoZSBTVkcgc3BhY2UuXG4gKlxuICogICA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogaW50ZW50aW9uYWxseSBjcmVhdGVzIHBhcnNlIGVycm9ycyBpbiBtYXJrdXAgKGhvdyBwYXJzZVxuICogICA+IGVycm9ycyBhcmUgaGFuZGxlZCBpcyB3ZWxsIGRlZmluZWQsIHNvIHRoaXMgd29ya3MgYnV0IGlzblx1MjAxOXQgcHJldHR5KS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFt0aWdodENvbW1hU2VwYXJhdGVkTGlzdHM9ZmFsc2VdXG4gKiAgIEpvaW4ga25vd24gY29tbWEtc2VwYXJhdGVkIGF0dHJpYnV0ZSB2YWx1ZXMgd2l0aCBqdXN0IGEgY29tbWEgKGAsYCksXG4gKiAgIGluc3RlYWQgb2YgcGFkZGluZyB0aGVtIG9uIHRoZSByaWdodCBhcyB3ZWxsIChgLFx1MjQyMGAsIHdoZXJlIGBcdTI0MjBgIHJlcHJlc2VudHMgYVxuICogICBzcGFjZSkgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3RpZ2h0RG9jdHlwZT1mYWxzZV1cbiAqICAgRHJvcCB1bm5lZWRlZCBzcGFjZXMgaW4gZG9jdHlwZXM6IGA8IWRvY3R5cGVodG1sPmAgaW5zdGVhZCBvZlxuICogICBgPCFkb2N0eXBlIGh0bWw+YCB0byBzYXZlIGJ5dGVzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBpbnRlbnRpb25hbGx5IGNyZWF0ZXMgcGFyc2UgZXJyb3JzIGluIG1hcmt1cCAoaG93IHBhcnNlXG4gKiAgID4gZXJyb3JzIGFyZSBoYW5kbGVkIGlzIHdlbGwgZGVmaW5lZCwgc28gdGhpcyB3b3JrcyBidXQgaXNuXHUyMDE5dCBwcmV0dHkpLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3RpZ2h0U2VsZkNsb3Npbmc9ZmFsc2VdXG4gKiAgIERvIG5vdCB1c2UgYW4gZXh0cmEgc3BhY2Ugd2hlbiBjbG9zaW5nIHNlbGYtY2xvc2luZyBlbGVtZW50czogYDxpbWcvPmBcbiAqICAgaW5zdGVhZCBvZiBgPGltZyAvPmAgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICpcbiAqICAgPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IG9ubHkgdXNlZCBpZiBgY2xvc2VTZWxmQ2xvc2luZzogdHJ1ZWAgb3JcbiAqICAgPiBgY2xvc2VFbXB0eUVsZW1lbnRzOiB0cnVlYC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFt1cHBlckRvY3R5cGU9ZmFsc2VdXG4gKiAgIFVzZSBhIGA8IURPQ1RZUEVcdTIwMjZgIGluc3RlYWQgb2YgYDwhZG9jdHlwZVx1MjAyNmAgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICpcbiAqICAgVXNlbGVzcyBleGNlcHQgZm9yIFhIVE1MLlxuICogQHByb3BlcnR5IHtSZWFkb25seUFycmF5PHN0cmluZz4gfCBudWxsIHwgdW5kZWZpbmVkfSBbdm9pZHNdXG4gKiAgIFRhZyBuYW1lcyBvZiBlbGVtZW50cyB0byBzZXJpYWxpemUgd2l0aG91dCBjbG9zaW5nIHRhZyAoZGVmYXVsdDogYGh0bWwtdm9pZC1lbGVtZW50c2ApLlxuICpcbiAqICAgTm90IHVzZWQgaW4gdGhlIFNWRyBzcGFjZS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBJdFx1MjAxOXMgaGlnaGx5IHVubGlrZWx5IHRoYXQgeW91IHdhbnQgdG8gcGFzcyB0aGlzLCBiZWNhdXNlXG4gKiAgID4gaGFzdCBpcyBub3QgZm9yIFhNTCwgYW5kIEhUTUwgd2lsbCBub3QgYWRkIG1vcmUgdm9pZCBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZWRlZiB7J1wiJyB8IFwiJ1wifSBRdW90ZVxuICogICBIVE1MIHF1b3RlcyBmb3IgYXR0cmlidXRlIHZhbHVlcy5cbiAqXG4gKiBAdHlwZWRlZiB7T21pdDxSZXF1aXJlZDx7W2tleSBpbiBrZXlvZiBPcHRpb25zXTogRXhjbHVkZTxPcHRpb25zW2tleV0sIG51bGwgfCB1bmRlZmluZWQ+fT4sICdzcGFjZScgfCAncXVvdGUnPn0gU2V0dGluZ3NcbiAqXG4gKiBAdHlwZWRlZiB7J2h0bWwnIHwgJ3N2Zyd9IFNwYWNlXG4gKiAgIE5hbWVzcGFjZS5cbiAqXG4gKiBAdHlwZWRlZiBTdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBAcHJvcGVydHkgeyhub2RlOiBQYXJlbnRzIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmd9IGFsbFxuICogICBTZXJpYWxpemUgdGhlIGNoaWxkcmVuIG9mIGEgcGFyZW50IG5vZGUuXG4gKiBAcHJvcGVydHkge1F1b3RlfSBhbHRlcm5hdGl2ZVxuICogICBBbHRlcm5hdGl2ZSBxdW90ZS5cbiAqIEBwcm9wZXJ0eSB7KG5vZGU6IE5vZGVzLCBpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkLCBwYXJlbnQ6IFBhcmVudHMgfCB1bmRlZmluZWQpID0+IHN0cmluZ30gb25lXG4gKiAgIFNlcmlhbGl6ZSBvbmUgbm9kZS5cbiAqIEBwcm9wZXJ0eSB7UXVvdGV9IHF1b3RlXG4gKiAgIFByZWZlcnJlZCBxdW90ZS5cbiAqIEBwcm9wZXJ0eSB7U2NoZW1hfSBzY2hlbWFcbiAqICAgQ3VycmVudCBzY2hlbWEuXG4gKiBAcHJvcGVydHkge1NldHRpbmdzfSBzZXR0aW5nc1xuICogICBVc2VyIGNvbmZpZ3VyYXRpb24uXG4gKi9cblxuaW1wb3J0IHtodG1sVm9pZEVsZW1lbnRzfSBmcm9tICdodG1sLXZvaWQtZWxlbWVudHMnXG5pbXBvcnQge2h0bWwsIHN2Z30gZnJvbSAncHJvcGVydHktaW5mb3JtYXRpb24nXG5pbXBvcnQge2hhbmRsZX0gZnJvbSAnLi9oYW5kbGUvaW5kZXguanMnXG5cbi8qKiBAdHlwZSB7T3B0aW9uc30gKi9cbmNvbnN0IGVtcHR5T3B0aW9ucyA9IHt9XG5cbi8qKiBAdHlwZSB7Q2hhcmFjdGVyUmVmZXJlbmNlc30gKi9cbmNvbnN0IGVtcHR5Q2hhcmFjdGVyUmVmZXJlbmNlcyA9IHt9XG5cbi8qKiBAdHlwZSB7QXJyYXk8bmV2ZXI+fSAqL1xuY29uc3QgZW1wdHlDaGlsZHJlbiA9IFtdXG5cbi8qKlxuICogU2VyaWFsaXplIGhhc3QgYXMgSFRNTC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFJvb3RDb250ZW50PiB8IE5vZGVzfSB0cmVlXG4gKiAgIFRyZWUgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSHRtbCh0cmVlLCBvcHRpb25zKSB7XG4gIGNvbnN0IG9wdGlvbnNfID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnNcbiAgY29uc3QgcXVvdGUgPSBvcHRpb25zXy5xdW90ZSB8fCAnXCInXG4gIGNvbnN0IGFsdGVybmF0aXZlID0gcXVvdGUgPT09ICdcIicgPyBcIidcIiA6ICdcIidcblxuICBpZiAocXVvdGUgIT09ICdcIicgJiYgcXVvdGUgIT09IFwiJ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHF1b3RlIGAnICsgcXVvdGUgKyAnYCwgZXhwZWN0ZWQgYFxcJ2Agb3IgYFwiYCcpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBvbmUsXG4gICAgYWxsLFxuICAgIHNldHRpbmdzOiB7XG4gICAgICBvbWl0T3B0aW9uYWxUYWdzOiBvcHRpb25zXy5vbWl0T3B0aW9uYWxUYWdzIHx8IGZhbHNlLFxuICAgICAgYWxsb3dQYXJzZUVycm9yczogb3B0aW9uc18uYWxsb3dQYXJzZUVycm9ycyB8fCBmYWxzZSxcbiAgICAgIGFsbG93RGFuZ2Vyb3VzQ2hhcmFjdGVyczogb3B0aW9uc18uYWxsb3dEYW5nZXJvdXNDaGFyYWN0ZXJzIHx8IGZhbHNlLFxuICAgICAgcXVvdGVTbWFydDogb3B0aW9uc18ucXVvdGVTbWFydCB8fCBmYWxzZSxcbiAgICAgIHByZWZlclVucXVvdGVkOiBvcHRpb25zXy5wcmVmZXJVbnF1b3RlZCB8fCBmYWxzZSxcbiAgICAgIHRpZ2h0QXR0cmlidXRlczogb3B0aW9uc18udGlnaHRBdHRyaWJ1dGVzIHx8IGZhbHNlLFxuICAgICAgdXBwZXJEb2N0eXBlOiBvcHRpb25zXy51cHBlckRvY3R5cGUgfHwgZmFsc2UsXG4gICAgICB0aWdodERvY3R5cGU6IG9wdGlvbnNfLnRpZ2h0RG9jdHlwZSB8fCBmYWxzZSxcbiAgICAgIGJvZ3VzQ29tbWVudHM6IG9wdGlvbnNfLmJvZ3VzQ29tbWVudHMgfHwgZmFsc2UsXG4gICAgICB0aWdodENvbW1hU2VwYXJhdGVkTGlzdHM6IG9wdGlvbnNfLnRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0cyB8fCBmYWxzZSxcbiAgICAgIHRpZ2h0U2VsZkNsb3Npbmc6IG9wdGlvbnNfLnRpZ2h0U2VsZkNsb3NpbmcgfHwgZmFsc2UsXG4gICAgICBjb2xsYXBzZUVtcHR5QXR0cmlidXRlczogb3B0aW9uc18uY29sbGFwc2VFbXB0eUF0dHJpYnV0ZXMgfHwgZmFsc2UsXG4gICAgICBhbGxvd0Rhbmdlcm91c0h0bWw6IG9wdGlvbnNfLmFsbG93RGFuZ2Vyb3VzSHRtbCB8fCBmYWxzZSxcbiAgICAgIHZvaWRzOiBvcHRpb25zXy52b2lkcyB8fCBodG1sVm9pZEVsZW1lbnRzLFxuICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlczpcbiAgICAgICAgb3B0aW9uc18uY2hhcmFjdGVyUmVmZXJlbmNlcyB8fCBlbXB0eUNoYXJhY3RlclJlZmVyZW5jZXMsXG4gICAgICBjbG9zZVNlbGZDbG9zaW5nOiBvcHRpb25zXy5jbG9zZVNlbGZDbG9zaW5nIHx8IGZhbHNlLFxuICAgICAgY2xvc2VFbXB0eUVsZW1lbnRzOiBvcHRpb25zXy5jbG9zZUVtcHR5RWxlbWVudHMgfHwgZmFsc2VcbiAgICB9LFxuICAgIHNjaGVtYTogb3B0aW9uc18uc3BhY2UgPT09ICdzdmcnID8gc3ZnIDogaHRtbCxcbiAgICBxdW90ZSxcbiAgICBhbHRlcm5hdGl2ZVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlLm9uZShcbiAgICBBcnJheS5pc0FycmF5KHRyZWUpID8ge3R5cGU6ICdyb290JywgY2hpbGRyZW46IHRyZWV9IDogdHJlZSxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkXG4gIClcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBub2RlLlxuICpcbiAqIEB0aGlzIHtTdGF0ZX1cbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHtOb2Rlc30gbm9kZVxuICogICBOb2RlIHRvIGhhbmRsZS5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBgbm9kZWAgaW4gYHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBgbm9kZWAuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBTZXJpYWxpemVkIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIG9uZShub2RlLCBpbmRleCwgcGFyZW50KSB7XG4gIHJldHVybiBoYW5kbGUobm9kZSwgaW5kZXgsIHBhcmVudCwgdGhpcylcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYWxsIGNoaWxkcmVuIG9mIGBwYXJlbnRgLlxuICpcbiAqIEB0aGlzIHtTdGF0ZX1cbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IHdob3NlIGNoaWxkcmVuIHRvIHNlcmlhbGl6ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGwocGFyZW50KSB7XG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgcmVzdWx0cyA9IFtdXG4gIGNvbnN0IGNoaWxkcmVuID0gKHBhcmVudCAmJiBwYXJlbnQuY2hpbGRyZW4pIHx8IGVtcHR5Q2hpbGRyZW5cbiAgbGV0IGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgIHJlc3VsdHNbaW5kZXhdID0gdGhpcy5vbmUoY2hpbGRyZW5baW5kZXhdLCBpbmRleCwgcGFyZW50KVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHMuam9pbignJylcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbGliL2luZGV4LmpzJykuQ2hhcmFjdGVyUmVmZXJlbmNlc30gQ2hhcmFjdGVyUmVmZXJlbmNlc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5PcHRpb25zfSBPcHRpb25zXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2xpYi9pbmRleC5qcycpLlF1b3RlfSBRdW90ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvaW5kZXguanMnKS5TcGFjZX0gU3BhY2VcbiAqL1xuXG5leHBvcnQge3RvSHRtbH0gZnJvbSAnLi9saWIvaW5kZXguanMnXG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0LXV0aWwtc2FuaXRpemUnKS5TY2hlbWF9IFNjaGVtYVxuICogQHR5cGVkZWYge2ltcG9ydCgnaGFzdC11dGlsLXRvLWh0bWwnKS5PcHRpb25zfSBUb0h0bWxPcHRpb25zXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLlJvb3R9IFJvb3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtdG8taGFzdCcpLkhhbmRsZXJzfSBIYW5kbGVyc1xuICogQHR5cGVkZWYge2ltcG9ydCgndW5pZmllZCcpLkNvbXBpbGVyPFJvb3QsIHN0cmluZz59IENvbXBpbGVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlmaWVkJykuUHJvY2Vzc29yPHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFJvb3QsIHN0cmluZz59IFByb2Nlc3NvclxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRXh0cmFPcHRpb25zRmllbGRzXG4gKiAgIEV4dHJhIGZpZWxkcy5cbiAqIEBwcm9wZXJ0eSB7UmVhZG9ubHk8SGFuZGxlcnM+IHwgbnVsbCB8IHVuZGVmaW5lZH0gW2hhbmRsZXJzXVxuICogICBIb3cgdG8gdHVybiBtZGFzdCBub2RlcyBpbnRvIGhhc3Qgbm9kZXMgKG9wdGlvbmFsKTtcbiAqICAgcGFzc2VkIHRvIGBtZGFzdC11dGlsLXRvLWhhc3RgLlxuICogQHByb3BlcnR5IHtSZWFkb25seTxTY2hlbWE+IHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtzYW5pdGl6ZV1cbiAqICAgU2FuaXRpemUgdGhlIG91dHB1dCwgYW5kIGhvdyAoZGVmYXVsdDogYHRydWVgKS5cbiAqXG4gKiBAdHlwZWRlZiB7VG9IdG1sT3B0aW9ucyAmIEV4dHJhT3B0aW9uc0ZpZWxkc30gT3B0aW9uc1xuICogICBDb25maWd1cmF0aW9uLlxuICovXG5cbmltcG9ydCB7c2FuaXRpemV9IGZyb20gJ2hhc3QtdXRpbC1zYW5pdGl6ZSdcbmltcG9ydCB7dG9IYXN0fSBmcm9tICdtZGFzdC11dGlsLXRvLWhhc3QnXG5pbXBvcnQge3RvSHRtbH0gZnJvbSAnaGFzdC11dGlsLXRvLWh0bWwnXG5cbi8qKiBAdHlwZSB7UmVhZG9ubHk8T3B0aW9ucz59ICovXG5jb25zdCBlbXB0eU9wdGlvbnMgPSB7fVxuXG4vKipcbiAqIFNlcmlhbGl6ZSBtYXJrZG93biBhcyBIVE1MLlxuICpcbiAqICMjIyMjIyBOb3Rlc1xuICpcbiAqIFBhc3NpbmcgYHNhbml0aXplOiBmYWxzZWAgaXMgZGFuZ2Vyb3VzLlxuICogSXQgYWxsb3dzIGFyYml0cmFyeSBIVE1MIGFuZCBkb2VzIG5vdCBzYW5pdGl6ZSBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge1JlYWRvbmx5PE9wdGlvbnM+IHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbWFya0h0bWwob3B0aW9ucykge1xuICAvKiogQHR5cGUge1Byb2Nlc3Nvcn0gKi9cbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgaW4gSlNEb2MgZ2VuZXJhdGVzIHdyb25nIHR5cGVzIGlmIGB0aGlzYCBpcyB0eXBlZCByZWd1bGFybHkuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXRoaXMtYXNzaWdubWVudFxuICBjb25zdCBzZWxmID0gdGhpc1xuICBjb25zdCB7aGFuZGxlcnMsIHNhbml0aXplOiBjbGVhbiwgLi4udG9IdG1sT3B0aW9uc30gPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uc1xuICBsZXQgYWxsb3dEYW5nZXJvdXNIdG1sID0gZmFsc2VcbiAgLyoqIEB0eXBlIHtSZWFkb25seTxTY2hlbWE+IHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgc2NoZW1hXG5cbiAgaWYgKHR5cGVvZiBjbGVhbiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgYWxsb3dEYW5nZXJvdXNIdG1sID0gIWNsZWFuXG4gIH0gZWxzZSBpZiAoY2xlYW4pIHtcbiAgICBzY2hlbWEgPSBjbGVhblxuICB9XG5cbiAgc2VsZi5jb21waWxlciA9IGNvbXBpbGVyXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtDb21waWxlcn1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBpbGVyKHRyZWUsIGZpbGUpIHtcbiAgICBjb25zdCBoYXN0ID0gdG9IYXN0KHRyZWUsIHtoYW5kbGVycywgYWxsb3dEYW5nZXJvdXNIdG1sfSlcbiAgICBjb25zdCBzYWZlSGFzdCA9IGFsbG93RGFuZ2Vyb3VzSHRtbCA/IGhhc3QgOiBzYW5pdGl6ZShoYXN0LCBzY2hlbWEpXG4gICAgY29uc3QgcmVzdWx0ID0gdG9IdG1sKHNhZmVIYXN0LCB7Li4udG9IdG1sT3B0aW9ucywgYWxsb3dEYW5nZXJvdXNIdG1sfSlcblxuICAgIGlmIChmaWxlLmV4dG5hbWUpIHtcbiAgICAgIGZpbGUuZXh0bmFtZSA9ICcuaHRtbCdcbiAgICB9XG5cbiAgICAvLyBBZGQgYW4gZW9mIGVvbC5cbiAgICByZXR1cm4gdHJlZSAmJlxuICAgICAgdHJlZS50eXBlID09PSAncm9vdCcgJiZcbiAgICAgIHJlc3VsdCAmJlxuICAgICAgL1teXFxyXFxuXS8udGVzdChyZXN1bHQuY2hhckF0KHJlc3VsdC5sZW5ndGggLSAxKSlcbiAgICAgID8gcmVzdWx0ICsgJ1xcbidcbiAgICAgIDogcmVzdWx0XG4gIH1cbn1cbiIsICIvLyBOb3RlOiB0eXBlcyBleHBvc2VkIGZyb20gYGluZGV4LmQudHNgLlxuZXhwb3J0IHtkZWZhdWx0fSBmcm9tICcuL2xpYi9pbmRleC5qcydcbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuUm9vdH0gUm9vdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QtdXRpbC10by1tYXJrZG93bicpLk9wdGlvbnN9IFRvTWFya2Rvd25PcHRpb25zXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlmaWVkJykuQ29tcGlsZXI8Um9vdCwgc3RyaW5nPn0gQ29tcGlsZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaWZpZWQnKS5Qcm9jZXNzb3I8dW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgUm9vdCwgc3RyaW5nPn0gUHJvY2Vzc29yXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T21pdDxUb01hcmtkb3duT3B0aW9ucywgJ2V4dGVuc2lvbnMnPn0gT3B0aW9uc1xuICovXG5cbmltcG9ydCB7dG9NYXJrZG93bn0gZnJvbSAnbWRhc3QtdXRpbC10by1tYXJrZG93bidcblxuLyoqXG4gKiBBZGQgc3VwcG9ydCBmb3Igc2VyaWFsaXppbmcgdG8gbWFya2Rvd24uXG4gKlxuICogQHBhcmFtIHtSZWFkb25seTxPcHRpb25zPiB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogICBOb3RoaW5nLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW1hcmtTdHJpbmdpZnkob3B0aW9ucykge1xuICAvKiogQHR5cGUge1Byb2Nlc3Nvcn0gKi9cbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgaW4gSlNEb2MgZ2VuZXJhdGVzIHdyb25nIHR5cGVzIGlmIGB0aGlzYCBpcyB0eXBlZCByZWd1bGFybHkuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgc2VsZi5jb21waWxlciA9IGNvbXBpbGVyXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtDb21waWxlcn1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBpbGVyKHRyZWUpIHtcbiAgICByZXR1cm4gdG9NYXJrZG93bih0cmVlLCB7XG4gICAgICAuLi5zZWxmLmRhdGEoJ3NldHRpbmdzJyksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgLy8gTm90ZTogdGhpcyBvcHRpb24gaXMgbm90IGluIHRoZSByZWFkbWUuXG4gICAgICAvLyBUaGUgZ29hbCBpcyBmb3IgaXQgdG8gYmUgc2V0IGJ5IHBsdWdpbnMgb24gYGRhdGFgIGluc3RlYWQgb2YgYmVpbmdcbiAgICAgIC8vIHBhc3NlZCBieSB1c2Vycy5cbiAgICAgIGV4dGVuc2lvbnM6IHNlbGYuZGF0YSgndG9NYXJrZG93bkV4dGVuc2lvbnMnKSB8fCBbXVxuICAgIH0pXG4gIH1cbn1cbiIsICIvLyBOb3RlOiB0eXBlcyBleHBvc2VkIGZyb20gYGluZGV4LmQudHNgLlxuZXhwb3J0IHtkZWZhdWx0fSBmcm9tICcuL2xpYi9pbmRleC5qcydcbiIsICJmdW5jdGlvbiBleHRlbmQgKGRlc3RpbmF0aW9uKSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIGRlc3RpbmF0aW9uW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlc3RpbmF0aW9uXG59XG5cbmZ1bmN0aW9uIHJlcGVhdCAoY2hhcmFjdGVyLCBjb3VudCkge1xuICByZXR1cm4gQXJyYXkoY291bnQgKyAxKS5qb2luKGNoYXJhY3Rlcilcbn1cblxuZnVuY3Rpb24gdHJpbUxlYWRpbmdOZXdsaW5lcyAoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXlxcbiovLCAnJylcbn1cblxuZnVuY3Rpb24gdHJpbVRyYWlsaW5nTmV3bGluZXMgKHN0cmluZykge1xuICAvLyBhdm9pZCBtYXRjaC1hdC1lbmQgcmVnZXhwIGJvdHRsZW5lY2ssIHNlZSAjMzcwXG4gIHZhciBpbmRleEVuZCA9IHN0cmluZy5sZW5ndGg7XG4gIHdoaWxlIChpbmRleEVuZCA+IDAgJiYgc3RyaW5nW2luZGV4RW5kIC0gMV0gPT09ICdcXG4nKSBpbmRleEVuZC0tO1xuICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZygwLCBpbmRleEVuZClcbn1cblxuZnVuY3Rpb24gdHJpbU5ld2xpbmVzIChzdHJpbmcpIHtcbiAgcmV0dXJuIHRyaW1UcmFpbGluZ05ld2xpbmVzKHRyaW1MZWFkaW5nTmV3bGluZXMoc3RyaW5nKSlcbn1cblxudmFyIGJsb2NrRWxlbWVudHMgPSBbXG4gICdBRERSRVNTJywgJ0FSVElDTEUnLCAnQVNJREUnLCAnQVVESU8nLCAnQkxPQ0tRVU9URScsICdCT0RZJywgJ0NBTlZBUycsXG4gICdDRU5URVInLCAnREQnLCAnRElSJywgJ0RJVicsICdETCcsICdEVCcsICdGSUVMRFNFVCcsICdGSUdDQVBUSU9OJywgJ0ZJR1VSRScsXG4gICdGT09URVInLCAnRk9STScsICdGUkFNRVNFVCcsICdIMScsICdIMicsICdIMycsICdINCcsICdINScsICdINicsICdIRUFERVInLFxuICAnSEdST1VQJywgJ0hSJywgJ0hUTUwnLCAnSVNJTkRFWCcsICdMSScsICdNQUlOJywgJ01FTlUnLCAnTkFWJywgJ05PRlJBTUVTJyxcbiAgJ05PU0NSSVBUJywgJ09MJywgJ09VVFBVVCcsICdQJywgJ1BSRScsICdTRUNUSU9OJywgJ1RBQkxFJywgJ1RCT0RZJywgJ1REJyxcbiAgJ1RGT09UJywgJ1RIJywgJ1RIRUFEJywgJ1RSJywgJ1VMJ1xuXTtcblxuZnVuY3Rpb24gaXNCbG9jayAobm9kZSkge1xuICByZXR1cm4gaXMobm9kZSwgYmxvY2tFbGVtZW50cylcbn1cblxudmFyIHZvaWRFbGVtZW50cyA9IFtcbiAgJ0FSRUEnLCAnQkFTRScsICdCUicsICdDT0wnLCAnQ09NTUFORCcsICdFTUJFRCcsICdIUicsICdJTUcnLCAnSU5QVVQnLFxuICAnS0VZR0VOJywgJ0xJTksnLCAnTUVUQScsICdQQVJBTScsICdTT1VSQ0UnLCAnVFJBQ0snLCAnV0JSJ1xuXTtcblxuZnVuY3Rpb24gaXNWb2lkIChub2RlKSB7XG4gIHJldHVybiBpcyhub2RlLCB2b2lkRWxlbWVudHMpXG59XG5cbmZ1bmN0aW9uIGhhc1ZvaWQgKG5vZGUpIHtcbiAgcmV0dXJuIGhhcyhub2RlLCB2b2lkRWxlbWVudHMpXG59XG5cbnZhciBtZWFuaW5nZnVsV2hlbkJsYW5rRWxlbWVudHMgPSBbXG4gICdBJywgJ1RBQkxFJywgJ1RIRUFEJywgJ1RCT0RZJywgJ1RGT09UJywgJ1RIJywgJ1REJywgJ0lGUkFNRScsICdTQ1JJUFQnLFxuICAnQVVESU8nLCAnVklERU8nXG5dO1xuXG5mdW5jdGlvbiBpc01lYW5pbmdmdWxXaGVuQmxhbmsgKG5vZGUpIHtcbiAgcmV0dXJuIGlzKG5vZGUsIG1lYW5pbmdmdWxXaGVuQmxhbmtFbGVtZW50cylcbn1cblxuZnVuY3Rpb24gaGFzTWVhbmluZ2Z1bFdoZW5CbGFuayAobm9kZSkge1xuICByZXR1cm4gaGFzKG5vZGUsIG1lYW5pbmdmdWxXaGVuQmxhbmtFbGVtZW50cylcbn1cblxuZnVuY3Rpb24gaXMgKG5vZGUsIHRhZ05hbWVzKSB7XG4gIHJldHVybiB0YWdOYW1lcy5pbmRleE9mKG5vZGUubm9kZU5hbWUpID49IDBcbn1cblxuZnVuY3Rpb24gaGFzIChub2RlLCB0YWdOYW1lcykge1xuICByZXR1cm4gKFxuICAgIG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgJiZcbiAgICB0YWdOYW1lcy5zb21lKGZ1bmN0aW9uICh0YWdOYW1lKSB7XG4gICAgICByZXR1cm4gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKS5sZW5ndGhcbiAgICB9KVxuICApXG59XG5cbnZhciBydWxlcyA9IHt9O1xuXG5ydWxlcy5wYXJhZ3JhcGggPSB7XG4gIGZpbHRlcjogJ3AnLFxuXG4gIHJlcGxhY2VtZW50OiBmdW5jdGlvbiAoY29udGVudCkge1xuICAgIHJldHVybiAnXFxuXFxuJyArIGNvbnRlbnQgKyAnXFxuXFxuJ1xuICB9XG59O1xuXG5ydWxlcy5saW5lQnJlYWsgPSB7XG4gIGZpbHRlcjogJ2JyJyxcblxuICByZXBsYWNlbWVudDogZnVuY3Rpb24gKGNvbnRlbnQsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5iciArICdcXG4nXG4gIH1cbn07XG5cbnJ1bGVzLmhlYWRpbmcgPSB7XG4gIGZpbHRlcjogWydoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNiddLFxuXG4gIHJlcGxhY2VtZW50OiBmdW5jdGlvbiAoY29udGVudCwgbm9kZSwgb3B0aW9ucykge1xuICAgIHZhciBoTGV2ZWwgPSBOdW1iZXIobm9kZS5ub2RlTmFtZS5jaGFyQXQoMSkpO1xuXG4gICAgaWYgKG9wdGlvbnMuaGVhZGluZ1N0eWxlID09PSAnc2V0ZXh0JyAmJiBoTGV2ZWwgPCAzKSB7XG4gICAgICB2YXIgdW5kZXJsaW5lID0gcmVwZWF0KChoTGV2ZWwgPT09IDEgPyAnPScgOiAnLScpLCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAnXFxuXFxuJyArIGNvbnRlbnQgKyAnXFxuJyArIHVuZGVybGluZSArICdcXG5cXG4nXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnXFxuXFxuJyArIHJlcGVhdCgnIycsIGhMZXZlbCkgKyAnICcgKyBjb250ZW50ICsgJ1xcblxcbidcbiAgICB9XG4gIH1cbn07XG5cbnJ1bGVzLmJsb2NrcXVvdGUgPSB7XG4gIGZpbHRlcjogJ2Jsb2NrcXVvdGUnLFxuXG4gIHJlcGxhY2VtZW50OiBmdW5jdGlvbiAoY29udGVudCkge1xuICAgIGNvbnRlbnQgPSB0cmltTmV3bGluZXMoY29udGVudCkucmVwbGFjZSgvXi9nbSwgJz4gJyk7XG4gICAgcmV0dXJuICdcXG5cXG4nICsgY29udGVudCArICdcXG5cXG4nXG4gIH1cbn07XG5cbnJ1bGVzLmxpc3QgPSB7XG4gIGZpbHRlcjogWyd1bCcsICdvbCddLFxuXG4gIHJlcGxhY2VtZW50OiBmdW5jdGlvbiAoY29udGVudCwgbm9kZSkge1xuICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudC5ub2RlTmFtZSA9PT0gJ0xJJyAmJiBwYXJlbnQubGFzdEVsZW1lbnRDaGlsZCA9PT0gbm9kZSkge1xuICAgICAgcmV0dXJuICdcXG4nICsgY29udGVudFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ1xcblxcbicgKyBjb250ZW50ICsgJ1xcblxcbidcbiAgICB9XG4gIH1cbn07XG5cbnJ1bGVzLmxpc3RJdGVtID0ge1xuICBmaWx0ZXI6ICdsaScsXG5cbiAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uIChjb250ZW50LCBub2RlLCBvcHRpb25zKSB7XG4gICAgdmFyIHByZWZpeCA9IG9wdGlvbnMuYnVsbGV0TGlzdE1hcmtlciArICcgICAnO1xuICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudC5ub2RlTmFtZSA9PT0gJ09MJykge1xuICAgICAgdmFyIHN0YXJ0ID0gcGFyZW50LmdldEF0dHJpYnV0ZSgnc3RhcnQnKTtcbiAgICAgIHZhciBpbmRleCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwocGFyZW50LmNoaWxkcmVuLCBub2RlKTtcbiAgICAgIHByZWZpeCA9IChzdGFydCA/IE51bWJlcihzdGFydCkgKyBpbmRleCA6IGluZGV4ICsgMSkgKyAnLiAgJztcbiAgICB9XG4gICAgdmFyIGlzUGFyYWdyYXBoID0gL1xcbiQvLnRlc3QoY29udGVudCk7XG4gICAgY29udGVudCA9IHRyaW1OZXdsaW5lcyhjb250ZW50KSArIChpc1BhcmFncmFwaCA/ICdcXG4nIDogJycpO1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1xcbi9nbSwgJ1xcbicgKyAnICcucmVwZWF0KHByZWZpeC5sZW5ndGgpKTsgLy8gaW5kZW50XG4gICAgcmV0dXJuIChcbiAgICAgIHByZWZpeCArIGNvbnRlbnQgKyAobm9kZS5uZXh0U2libGluZyA/ICdcXG4nIDogJycpXG4gICAgKVxuICB9XG59O1xuXG5ydWxlcy5pbmRlbnRlZENvZGVCbG9jayA9IHtcbiAgZmlsdGVyOiBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICAgIHJldHVybiAoXG4gICAgICBvcHRpb25zLmNvZGVCbG9ja1N0eWxlID09PSAnaW5kZW50ZWQnICYmXG4gICAgICBub2RlLm5vZGVOYW1lID09PSAnUFJFJyAmJlxuICAgICAgbm9kZS5maXJzdENoaWxkICYmXG4gICAgICBub2RlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT09ICdDT0RFJ1xuICAgIClcbiAgfSxcblxuICByZXBsYWNlbWVudDogZnVuY3Rpb24gKGNvbnRlbnQsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgJ1xcblxcbiAgICAnICtcbiAgICAgIG5vZGUuZmlyc3RDaGlsZC50ZXh0Q29udGVudC5yZXBsYWNlKC9cXG4vZywgJ1xcbiAgICAnKSArXG4gICAgICAnXFxuXFxuJ1xuICAgIClcbiAgfVxufTtcblxucnVsZXMuZmVuY2VkQ29kZUJsb2NrID0ge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIChub2RlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIG9wdGlvbnMuY29kZUJsb2NrU3R5bGUgPT09ICdmZW5jZWQnICYmXG4gICAgICBub2RlLm5vZGVOYW1lID09PSAnUFJFJyAmJlxuICAgICAgbm9kZS5maXJzdENoaWxkICYmXG4gICAgICBub2RlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT09ICdDT0RFJ1xuICAgIClcbiAgfSxcblxuICByZXBsYWNlbWVudDogZnVuY3Rpb24gKGNvbnRlbnQsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gbm9kZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJztcbiAgICB2YXIgbGFuZ3VhZ2UgPSAoY2xhc3NOYW1lLm1hdGNoKC9sYW5ndWFnZS0oXFxTKykvKSB8fCBbbnVsbCwgJyddKVsxXTtcbiAgICB2YXIgY29kZSA9IG5vZGUuZmlyc3RDaGlsZC50ZXh0Q29udGVudDtcblxuICAgIHZhciBmZW5jZUNoYXIgPSBvcHRpb25zLmZlbmNlLmNoYXJBdCgwKTtcbiAgICB2YXIgZmVuY2VTaXplID0gMztcbiAgICB2YXIgZmVuY2VJbkNvZGVSZWdleCA9IG5ldyBSZWdFeHAoJ14nICsgZmVuY2VDaGFyICsgJ3szLH0nLCAnZ20nKTtcblxuICAgIHZhciBtYXRjaDtcbiAgICB3aGlsZSAoKG1hdGNoID0gZmVuY2VJbkNvZGVSZWdleC5leGVjKGNvZGUpKSkge1xuICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA+PSBmZW5jZVNpemUpIHtcbiAgICAgICAgZmVuY2VTaXplID0gbWF0Y2hbMF0ubGVuZ3RoICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZmVuY2UgPSByZXBlYXQoZmVuY2VDaGFyLCBmZW5jZVNpemUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICdcXG5cXG4nICsgZmVuY2UgKyBsYW5ndWFnZSArICdcXG4nICtcbiAgICAgIGNvZGUucmVwbGFjZSgvXFxuJC8sICcnKSArXG4gICAgICAnXFxuJyArIGZlbmNlICsgJ1xcblxcbidcbiAgICApXG4gIH1cbn07XG5cbnJ1bGVzLmhvcml6b250YWxSdWxlID0ge1xuICBmaWx0ZXI6ICdocicsXG5cbiAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uIChjb250ZW50LCBub2RlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICdcXG5cXG4nICsgb3B0aW9ucy5ociArICdcXG5cXG4nXG4gIH1cbn07XG5cbnJ1bGVzLmlubGluZUxpbmsgPSB7XG4gIGZpbHRlcjogZnVuY3Rpb24gKG5vZGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgb3B0aW9ucy5saW5rU3R5bGUgPT09ICdpbmxpbmVkJyAmJlxuICAgICAgbm9kZS5ub2RlTmFtZSA9PT0gJ0EnICYmXG4gICAgICBub2RlLmdldEF0dHJpYnV0ZSgnaHJlZicpXG4gICAgKVxuICB9LFxuXG4gIHJlcGxhY2VtZW50OiBmdW5jdGlvbiAoY29udGVudCwgbm9kZSkge1xuICAgIHZhciBocmVmID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICBpZiAoaHJlZikgaHJlZiA9IGhyZWYucmVwbGFjZSgvKFsoKV0pL2csICdcXFxcJDEnKTtcbiAgICB2YXIgdGl0bGUgPSBjbGVhbkF0dHJpYnV0ZShub2RlLmdldEF0dHJpYnV0ZSgndGl0bGUnKSk7XG4gICAgaWYgKHRpdGxlKSB0aXRsZSA9ICcgXCInICsgdGl0bGUucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpICsgJ1wiJztcbiAgICByZXR1cm4gJ1snICsgY29udGVudCArICddKCcgKyBocmVmICsgdGl0bGUgKyAnKSdcbiAgfVxufTtcblxucnVsZXMucmVmZXJlbmNlTGluayA9IHtcbiAgZmlsdGVyOiBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICAgIHJldHVybiAoXG4gICAgICBvcHRpb25zLmxpbmtTdHlsZSA9PT0gJ3JlZmVyZW5jZWQnICYmXG4gICAgICBub2RlLm5vZGVOYW1lID09PSAnQScgJiZcbiAgICAgIG5vZGUuZ2V0QXR0cmlidXRlKCdocmVmJylcbiAgICApXG4gIH0sXG5cbiAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uIChjb250ZW50LCBub2RlLCBvcHRpb25zKSB7XG4gICAgdmFyIGhyZWYgPSBub2RlLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgIHZhciB0aXRsZSA9IGNsZWFuQXR0cmlidXRlKG5vZGUuZ2V0QXR0cmlidXRlKCd0aXRsZScpKTtcbiAgICBpZiAodGl0bGUpIHRpdGxlID0gJyBcIicgKyB0aXRsZSArICdcIic7XG4gICAgdmFyIHJlcGxhY2VtZW50O1xuICAgIHZhciByZWZlcmVuY2U7XG5cbiAgICBzd2l0Y2ggKG9wdGlvbnMubGlua1JlZmVyZW5jZVN0eWxlKSB7XG4gICAgICBjYXNlICdjb2xsYXBzZWQnOlxuICAgICAgICByZXBsYWNlbWVudCA9ICdbJyArIGNvbnRlbnQgKyAnXVtdJztcbiAgICAgICAgcmVmZXJlbmNlID0gJ1snICsgY29udGVudCArICddOiAnICsgaHJlZiArIHRpdGxlO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2hvcnRjdXQnOlxuICAgICAgICByZXBsYWNlbWVudCA9ICdbJyArIGNvbnRlbnQgKyAnXSc7XG4gICAgICAgIHJlZmVyZW5jZSA9ICdbJyArIGNvbnRlbnQgKyAnXTogJyArIGhyZWYgKyB0aXRsZTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHZhciBpZCA9IHRoaXMucmVmZXJlbmNlcy5sZW5ndGggKyAxO1xuICAgICAgICByZXBsYWNlbWVudCA9ICdbJyArIGNvbnRlbnQgKyAnXVsnICsgaWQgKyAnXSc7XG4gICAgICAgIHJlZmVyZW5jZSA9ICdbJyArIGlkICsgJ106ICcgKyBocmVmICsgdGl0bGU7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnRcbiAgfSxcblxuICByZWZlcmVuY2VzOiBbXSxcblxuICBhcHBlbmQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHJlZmVyZW5jZXMgPSAnJztcbiAgICBpZiAodGhpcy5yZWZlcmVuY2VzLmxlbmd0aCkge1xuICAgICAgcmVmZXJlbmNlcyA9ICdcXG5cXG4nICsgdGhpcy5yZWZlcmVuY2VzLmpvaW4oJ1xcbicpICsgJ1xcblxcbic7XG4gICAgICB0aGlzLnJlZmVyZW5jZXMgPSBbXTsgLy8gUmVzZXQgcmVmZXJlbmNlc1xuICAgIH1cbiAgICByZXR1cm4gcmVmZXJlbmNlc1xuICB9XG59O1xuXG5ydWxlcy5lbXBoYXNpcyA9IHtcbiAgZmlsdGVyOiBbJ2VtJywgJ2knXSxcblxuICByZXBsYWNlbWVudDogZnVuY3Rpb24gKGNvbnRlbnQsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvbnRlbnQudHJpbSgpKSByZXR1cm4gJydcbiAgICByZXR1cm4gb3B0aW9ucy5lbURlbGltaXRlciArIGNvbnRlbnQgKyBvcHRpb25zLmVtRGVsaW1pdGVyXG4gIH1cbn07XG5cbnJ1bGVzLnN0cm9uZyA9IHtcbiAgZmlsdGVyOiBbJ3N0cm9uZycsICdiJ10sXG5cbiAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uIChjb250ZW50LCBub2RlLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb250ZW50LnRyaW0oKSkgcmV0dXJuICcnXG4gICAgcmV0dXJuIG9wdGlvbnMuc3Ryb25nRGVsaW1pdGVyICsgY29udGVudCArIG9wdGlvbnMuc3Ryb25nRGVsaW1pdGVyXG4gIH1cbn07XG5cbnJ1bGVzLmNvZGUgPSB7XG4gIGZpbHRlcjogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgaGFzU2libGluZ3MgPSBub2RlLnByZXZpb3VzU2libGluZyB8fCBub2RlLm5leHRTaWJsaW5nO1xuICAgIHZhciBpc0NvZGVCbG9jayA9IG5vZGUucGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gJ1BSRScgJiYgIWhhc1NpYmxpbmdzO1xuXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICdDT0RFJyAmJiAhaXNDb2RlQmxvY2tcbiAgfSxcblxuICByZXBsYWNlbWVudDogZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgICBpZiAoIWNvbnRlbnQpIHJldHVybiAnJ1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1xccj9cXG58XFxyL2csICcgJyk7XG5cbiAgICB2YXIgZXh0cmFTcGFjZSA9IC9eYHxeIC4qP1teIF0uKiAkfGAkLy50ZXN0KGNvbnRlbnQpID8gJyAnIDogJyc7XG4gICAgdmFyIGRlbGltaXRlciA9ICdgJztcbiAgICB2YXIgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goL2ArL2dtKSB8fCBbXTtcbiAgICB3aGlsZSAobWF0Y2hlcy5pbmRleE9mKGRlbGltaXRlcikgIT09IC0xKSBkZWxpbWl0ZXIgPSBkZWxpbWl0ZXIgKyAnYCc7XG5cbiAgICByZXR1cm4gZGVsaW1pdGVyICsgZXh0cmFTcGFjZSArIGNvbnRlbnQgKyBleHRyYVNwYWNlICsgZGVsaW1pdGVyXG4gIH1cbn07XG5cbnJ1bGVzLmltYWdlID0ge1xuICBmaWx0ZXI6ICdpbWcnLFxuXG4gIHJlcGxhY2VtZW50OiBmdW5jdGlvbiAoY29udGVudCwgbm9kZSkge1xuICAgIHZhciBhbHQgPSBjbGVhbkF0dHJpYnV0ZShub2RlLmdldEF0dHJpYnV0ZSgnYWx0JykpO1xuICAgIHZhciBzcmMgPSBub2RlLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJyc7XG4gICAgdmFyIHRpdGxlID0gY2xlYW5BdHRyaWJ1dGUobm9kZS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykpO1xuICAgIHZhciB0aXRsZVBhcnQgPSB0aXRsZSA/ICcgXCInICsgdGl0bGUgKyAnXCInIDogJyc7XG4gICAgcmV0dXJuIHNyYyA/ICchWycgKyBhbHQgKyAnXScgKyAnKCcgKyBzcmMgKyB0aXRsZVBhcnQgKyAnKScgOiAnJ1xuICB9XG59O1xuXG5mdW5jdGlvbiBjbGVhbkF0dHJpYnV0ZSAoYXR0cmlidXRlKSB7XG4gIHJldHVybiBhdHRyaWJ1dGUgPyBhdHRyaWJ1dGUucmVwbGFjZSgvKFxcbitcXHMqKSsvZywgJ1xcbicpIDogJydcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIGEgY29sbGVjdGlvbiBvZiBydWxlcyB1c2VkIHRvIGNvbnZlcnQgSFRNTCB0byBNYXJrZG93blxuICovXG5cbmZ1bmN0aW9uIFJ1bGVzIChvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMuX2tlZXAgPSBbXTtcbiAgdGhpcy5fcmVtb3ZlID0gW107XG5cbiAgdGhpcy5ibGFua1J1bGUgPSB7XG4gICAgcmVwbGFjZW1lbnQ6IG9wdGlvbnMuYmxhbmtSZXBsYWNlbWVudFxuICB9O1xuXG4gIHRoaXMua2VlcFJlcGxhY2VtZW50ID0gb3B0aW9ucy5rZWVwUmVwbGFjZW1lbnQ7XG5cbiAgdGhpcy5kZWZhdWx0UnVsZSA9IHtcbiAgICByZXBsYWNlbWVudDogb3B0aW9ucy5kZWZhdWx0UmVwbGFjZW1lbnRcbiAgfTtcblxuICB0aGlzLmFycmF5ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvcHRpb25zLnJ1bGVzKSB0aGlzLmFycmF5LnB1c2gob3B0aW9ucy5ydWxlc1trZXldKTtcbn1cblxuUnVsZXMucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uIChrZXksIHJ1bGUpIHtcbiAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZSk7XG4gIH0sXG5cbiAga2VlcDogZnVuY3Rpb24gKGZpbHRlcikge1xuICAgIHRoaXMuX2tlZXAudW5zaGlmdCh7XG4gICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgIHJlcGxhY2VtZW50OiB0aGlzLmtlZXBSZXBsYWNlbWVudFxuICAgIH0pO1xuICB9LFxuXG4gIHJlbW92ZTogZnVuY3Rpb24gKGZpbHRlcikge1xuICAgIHRoaXMuX3JlbW92ZS51bnNoaWZ0KHtcbiAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgZm9yTm9kZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAobm9kZS5pc0JsYW5rKSByZXR1cm4gdGhpcy5ibGFua1J1bGVcbiAgICB2YXIgcnVsZTtcblxuICAgIGlmICgocnVsZSA9IGZpbmRSdWxlKHRoaXMuYXJyYXksIG5vZGUsIHRoaXMub3B0aW9ucykpKSByZXR1cm4gcnVsZVxuICAgIGlmICgocnVsZSA9IGZpbmRSdWxlKHRoaXMuX2tlZXAsIG5vZGUsIHRoaXMub3B0aW9ucykpKSByZXR1cm4gcnVsZVxuICAgIGlmICgocnVsZSA9IGZpbmRSdWxlKHRoaXMuX3JlbW92ZSwgbm9kZSwgdGhpcy5vcHRpb25zKSkpIHJldHVybiBydWxlXG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UnVsZVxuICB9LFxuXG4gIGZvckVhY2g6IGZ1bmN0aW9uIChmbikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykgZm4odGhpcy5hcnJheVtpXSwgaSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGZpbmRSdWxlIChydWxlcywgbm9kZSwgb3B0aW9ucykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJ1bGUgPSBydWxlc1tpXTtcbiAgICBpZiAoZmlsdGVyVmFsdWUocnVsZSwgbm9kZSwgb3B0aW9ucykpIHJldHVybiBydWxlXG4gIH1cbiAgcmV0dXJuIHZvaWQgMFxufVxuXG5mdW5jdGlvbiBmaWx0ZXJWYWx1ZSAocnVsZSwgbm9kZSwgb3B0aW9ucykge1xuICB2YXIgZmlsdGVyID0gcnVsZS5maWx0ZXI7XG4gIGlmICh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgIGlmIChmaWx0ZXIgPT09IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcbiAgICBpZiAoZmlsdGVyLmluZGV4T2Yobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSA+IC0xKSByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmlsdGVyLmNhbGwocnVsZSwgbm9kZSwgb3B0aW9ucykpIHJldHVybiB0cnVlXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGZpbHRlcmAgbmVlZHMgdG8gYmUgYSBzdHJpbmcsIGFycmF5LCBvciBmdW5jdGlvbicpXG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgY29sbGFwc2VXaGl0ZXNwYWNlIGZ1bmN0aW9uIGlzIGFkYXB0ZWQgZnJvbSBjb2xsYXBzZS13aGl0ZXNwYWNlXG4gKiBieSBMdWMgVGhldmVuYXJkLlxuICpcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBMdWMgVGhldmVuYXJkIDxsdWN0aGV2ZW5hcmRAZ21haWwuY29tPlxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuLyoqXG4gKiBjb2xsYXBzZVdoaXRlc3BhY2Uob3B0aW9ucykgcmVtb3ZlcyBleHRyYW5lb3VzIHdoaXRlc3BhY2UgZnJvbSBhbiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBjb2xsYXBzZVdoaXRlc3BhY2UgKG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XG4gIHZhciBpc0Jsb2NrID0gb3B0aW9ucy5pc0Jsb2NrO1xuICB2YXIgaXNWb2lkID0gb3B0aW9ucy5pc1ZvaWQ7XG4gIHZhciBpc1ByZSA9IG9wdGlvbnMuaXNQcmUgfHwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJ1BSRSdcbiAgfTtcblxuICBpZiAoIWVsZW1lbnQuZmlyc3RDaGlsZCB8fCBpc1ByZShlbGVtZW50KSkgcmV0dXJuXG5cbiAgdmFyIHByZXZUZXh0ID0gbnVsbDtcbiAgdmFyIGtlZXBMZWFkaW5nV3MgPSBmYWxzZTtcblxuICB2YXIgcHJldiA9IG51bGw7XG4gIHZhciBub2RlID0gbmV4dChwcmV2LCBlbGVtZW50LCBpc1ByZSk7XG5cbiAgd2hpbGUgKG5vZGUgIT09IGVsZW1lbnQpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMyB8fCBub2RlLm5vZGVUeXBlID09PSA0KSB7IC8vIE5vZGUuVEVYVF9OT0RFIG9yIE5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFXG4gICAgICB2YXIgdGV4dCA9IG5vZGUuZGF0YS5yZXBsYWNlKC9bIFxcclxcblxcdF0rL2csICcgJyk7XG5cbiAgICAgIGlmICgoIXByZXZUZXh0IHx8IC8gJC8udGVzdChwcmV2VGV4dC5kYXRhKSkgJiZcbiAgICAgICAgICAha2VlcExlYWRpbmdXcyAmJiB0ZXh0WzBdID09PSAnICcpIHtcbiAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBgdGV4dGAgbWlnaHQgYmUgZW1wdHkgYXQgdGhpcyBwb2ludC5cbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICBub2RlID0gcmVtb3ZlKG5vZGUpO1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBub2RlLmRhdGEgPSB0ZXh0O1xuXG4gICAgICBwcmV2VGV4dCA9IG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7IC8vIE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICBpZiAoaXNCbG9jayhub2RlKSB8fCBub2RlLm5vZGVOYW1lID09PSAnQlInKSB7XG4gICAgICAgIGlmIChwcmV2VGV4dCkge1xuICAgICAgICAgIHByZXZUZXh0LmRhdGEgPSBwcmV2VGV4dC5kYXRhLnJlcGxhY2UoLyAkLywgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldlRleHQgPSBudWxsO1xuICAgICAgICBrZWVwTGVhZGluZ1dzID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGlzVm9pZChub2RlKSB8fCBpc1ByZShub2RlKSkge1xuICAgICAgICAvLyBBdm9pZCB0cmltbWluZyBzcGFjZSBhcm91bmQgbm9uLWJsb2NrLCBub24tQlIgdm9pZCBlbGVtZW50cyBhbmQgaW5saW5lIFBSRS5cbiAgICAgICAgcHJldlRleHQgPSBudWxsO1xuICAgICAgICBrZWVwTGVhZGluZ1dzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocHJldlRleHQpIHtcbiAgICAgICAgLy8gRHJvcCBwcm90ZWN0aW9uIGlmIHNldCBwcmV2aW91c2x5LlxuICAgICAgICBrZWVwTGVhZGluZ1dzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSByZW1vdmUobm9kZSk7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhciBuZXh0Tm9kZSA9IG5leHQocHJldiwgbm9kZSwgaXNQcmUpO1xuICAgIHByZXYgPSBub2RlO1xuICAgIG5vZGUgPSBuZXh0Tm9kZTtcbiAgfVxuXG4gIGlmIChwcmV2VGV4dCkge1xuICAgIHByZXZUZXh0LmRhdGEgPSBwcmV2VGV4dC5kYXRhLnJlcGxhY2UoLyAkLywgJycpO1xuICAgIGlmICghcHJldlRleHQuZGF0YSkge1xuICAgICAgcmVtb3ZlKHByZXZUZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiByZW1vdmUobm9kZSkgcmVtb3ZlcyB0aGUgZ2l2ZW4gbm9kZSBmcm9tIHRoZSBET00gYW5kIHJldHVybnMgdGhlXG4gKiBuZXh0IG5vZGUgaW4gdGhlIHNlcXVlbmNlLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiByZW1vdmUgKG5vZGUpIHtcbiAgdmFyIG5leHQgPSBub2RlLm5leHRTaWJsaW5nIHx8IG5vZGUucGFyZW50Tm9kZTtcblxuICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG5cbiAgcmV0dXJuIG5leHRcbn1cblxuLyoqXG4gKiBuZXh0KHByZXYsIGN1cnJlbnQsIGlzUHJlKSByZXR1cm5zIHRoZSBuZXh0IG5vZGUgaW4gdGhlIHNlcXVlbmNlLCBnaXZlbiB0aGVcbiAqIGN1cnJlbnQgYW5kIHByZXZpb3VzIG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gcHJldlxuICogQHBhcmFtIHtOb2RlfSBjdXJyZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpc1ByZVxuICogQHJldHVybiB7Tm9kZX1cbiAqL1xuZnVuY3Rpb24gbmV4dCAocHJldiwgY3VycmVudCwgaXNQcmUpIHtcbiAgaWYgKChwcmV2ICYmIHByZXYucGFyZW50Tm9kZSA9PT0gY3VycmVudCkgfHwgaXNQcmUoY3VycmVudCkpIHtcbiAgICByZXR1cm4gY3VycmVudC5uZXh0U2libGluZyB8fCBjdXJyZW50LnBhcmVudE5vZGVcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50LmZpcnN0Q2hpbGQgfHwgY3VycmVudC5uZXh0U2libGluZyB8fCBjdXJyZW50LnBhcmVudE5vZGVcbn1cblxuLypcbiAqIFNldCB1cCB3aW5kb3cgZm9yIE5vZGUuanNcbiAqL1xuXG52YXIgcm9vdCA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHt9KTtcblxuLypcbiAqIFBhcnNpbmcgSFRNTCBzdHJpbmdzXG4gKi9cblxuZnVuY3Rpb24gY2FuUGFyc2VIVE1MTmF0aXZlbHkgKCkge1xuICB2YXIgUGFyc2VyID0gcm9vdC5ET01QYXJzZXI7XG4gIHZhciBjYW5QYXJzZSA9IGZhbHNlO1xuXG4gIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xMTI5MDMxXG4gIC8vIEZpcmVmb3gvT3BlcmEvSUUgdGhyb3cgZXJyb3JzIG9uIHVuc3VwcG9ydGVkIHR5cGVzXG4gIHRyeSB7XG4gICAgLy8gV2ViS2l0IHJldHVybnMgbnVsbCBvbiB1bnN1cHBvcnRlZCB0eXBlc1xuICAgIGlmIChuZXcgUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKCcnLCAndGV4dC9odG1sJykpIHtcbiAgICAgIGNhblBhcnNlID0gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgcmV0dXJuIGNhblBhcnNlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhUTUxQYXJzZXIgKCkge1xuICB2YXIgUGFyc2VyID0gZnVuY3Rpb24gKCkge307XG5cbiAge1xuICAgIGlmIChzaG91bGRVc2VBY3RpdmVYKCkpIHtcbiAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICB2YXIgZG9jID0gbmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICAgICAgICBkb2MuZGVzaWduTW9kZSA9ICdvbic7IC8vIGRpc2FibGUgb24tcGFnZSBzY3JpcHRzXG4gICAgICAgIGRvYy5vcGVuKCk7XG4gICAgICAgIGRvYy53cml0ZShzdHJpbmcpO1xuICAgICAgICBkb2MuY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuIGRvY1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZyb21TdHJpbmcgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHZhciBkb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoJycpO1xuICAgICAgICBkb2Mub3BlbigpO1xuICAgICAgICBkb2Mud3JpdGUoc3RyaW5nKTtcbiAgICAgICAgZG9jLmNsb3NlKCk7XG4gICAgICAgIHJldHVybiBkb2NcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBQYXJzZXJcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlQWN0aXZlWCAoKSB7XG4gIHZhciB1c2VBY3RpdmVYID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCcnKS5vcGVuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAocm9vdC5BY3RpdmVYT2JqZWN0KSB1c2VBY3RpdmVYID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdXNlQWN0aXZlWFxufVxuXG52YXIgSFRNTFBhcnNlciA9IGNhblBhcnNlSFRNTE5hdGl2ZWx5KCkgPyByb290LkRPTVBhcnNlciA6IGNyZWF0ZUhUTUxQYXJzZXIoKTtcblxuZnVuY3Rpb24gUm9vdE5vZGUgKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciByb290O1xuICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIHZhciBkb2MgPSBodG1sUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKFxuICAgICAgLy8gRE9NIHBhcnNlcnMgYXJyYW5nZSBlbGVtZW50cyBpbiB0aGUgPGhlYWQ+IGFuZCA8Ym9keT4uXG4gICAgICAvLyBXcmFwcGluZyBpbiBhIGN1c3RvbSBlbGVtZW50IGVuc3VyZXMgZWxlbWVudHMgYXJlIHJlbGlhYmx5IGFycmFuZ2VkIGluXG4gICAgICAvLyBhIHNpbmdsZSBlbGVtZW50LlxuICAgICAgJzx4LXR1cm5kb3duIGlkPVwidHVybmRvd24tcm9vdFwiPicgKyBpbnB1dCArICc8L3gtdHVybmRvd24+JyxcbiAgICAgICd0ZXh0L2h0bWwnXG4gICAgKTtcbiAgICByb290ID0gZG9jLmdldEVsZW1lbnRCeUlkKCd0dXJuZG93bi1yb290Jyk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdCA9IGlucHV0LmNsb25lTm9kZSh0cnVlKTtcbiAgfVxuICBjb2xsYXBzZVdoaXRlc3BhY2Uoe1xuICAgIGVsZW1lbnQ6IHJvb3QsXG4gICAgaXNCbG9jazogaXNCbG9jayxcbiAgICBpc1ZvaWQ6IGlzVm9pZCxcbiAgICBpc1ByZTogb3B0aW9ucy5wcmVmb3JtYXR0ZWRDb2RlID8gaXNQcmVPckNvZGUgOiBudWxsXG4gIH0pO1xuXG4gIHJldHVybiByb290XG59XG5cbnZhciBfaHRtbFBhcnNlcjtcbmZ1bmN0aW9uIGh0bWxQYXJzZXIgKCkge1xuICBfaHRtbFBhcnNlciA9IF9odG1sUGFyc2VyIHx8IG5ldyBIVE1MUGFyc2VyKCk7XG4gIHJldHVybiBfaHRtbFBhcnNlclxufVxuXG5mdW5jdGlvbiBpc1ByZU9yQ29kZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJ1BSRScgfHwgbm9kZS5ub2RlTmFtZSA9PT0gJ0NPREUnXG59XG5cbmZ1bmN0aW9uIE5vZGUgKG5vZGUsIG9wdGlvbnMpIHtcbiAgbm9kZS5pc0Jsb2NrID0gaXNCbG9jayhub2RlKTtcbiAgbm9kZS5pc0NvZGUgPSBub2RlLm5vZGVOYW1lID09PSAnQ09ERScgfHwgbm9kZS5wYXJlbnROb2RlLmlzQ29kZTtcbiAgbm9kZS5pc0JsYW5rID0gaXNCbGFuayhub2RlKTtcbiAgbm9kZS5mbGFua2luZ1doaXRlc3BhY2UgPSBmbGFua2luZ1doaXRlc3BhY2Uobm9kZSwgb3B0aW9ucyk7XG4gIHJldHVybiBub2RlXG59XG5cbmZ1bmN0aW9uIGlzQmxhbmsgKG5vZGUpIHtcbiAgcmV0dXJuIChcbiAgICAhaXNWb2lkKG5vZGUpICYmXG4gICAgIWlzTWVhbmluZ2Z1bFdoZW5CbGFuayhub2RlKSAmJlxuICAgIC9eXFxzKiQvaS50ZXN0KG5vZGUudGV4dENvbnRlbnQpICYmXG4gICAgIWhhc1ZvaWQobm9kZSkgJiZcbiAgICAhaGFzTWVhbmluZ2Z1bFdoZW5CbGFuayhub2RlKVxuICApXG59XG5cbmZ1bmN0aW9uIGZsYW5raW5nV2hpdGVzcGFjZSAobm9kZSwgb3B0aW9ucykge1xuICBpZiAobm9kZS5pc0Jsb2NrIHx8IChvcHRpb25zLnByZWZvcm1hdHRlZENvZGUgJiYgbm9kZS5pc0NvZGUpKSB7XG4gICAgcmV0dXJuIHsgbGVhZGluZzogJycsIHRyYWlsaW5nOiAnJyB9XG4gIH1cblxuICB2YXIgZWRnZXMgPSBlZGdlV2hpdGVzcGFjZShub2RlLnRleHRDb250ZW50KTtcblxuICAvLyBhYmFuZG9uIGxlYWRpbmcgQVNDSUkgV1MgaWYgbGVmdC1mbGFua2VkIGJ5IEFTQ0lJIFdTXG4gIGlmIChlZGdlcy5sZWFkaW5nQXNjaWkgJiYgaXNGbGFua2VkQnlXaGl0ZXNwYWNlKCdsZWZ0Jywgbm9kZSwgb3B0aW9ucykpIHtcbiAgICBlZGdlcy5sZWFkaW5nID0gZWRnZXMubGVhZGluZ05vbkFzY2lpO1xuICB9XG5cbiAgLy8gYWJhbmRvbiB0cmFpbGluZyBBU0NJSSBXUyBpZiByaWdodC1mbGFua2VkIGJ5IEFTQ0lJIFdTXG4gIGlmIChlZGdlcy50cmFpbGluZ0FzY2lpICYmIGlzRmxhbmtlZEJ5V2hpdGVzcGFjZSgncmlnaHQnLCBub2RlLCBvcHRpb25zKSkge1xuICAgIGVkZ2VzLnRyYWlsaW5nID0gZWRnZXMudHJhaWxpbmdOb25Bc2NpaTtcbiAgfVxuXG4gIHJldHVybiB7IGxlYWRpbmc6IGVkZ2VzLmxlYWRpbmcsIHRyYWlsaW5nOiBlZGdlcy50cmFpbGluZyB9XG59XG5cbmZ1bmN0aW9uIGVkZ2VXaGl0ZXNwYWNlIChzdHJpbmcpIHtcbiAgdmFyIG0gPSBzdHJpbmcubWF0Y2goL14oKFsgXFx0XFxyXFxuXSopKFxccyopKSg/Oig/PVxcUylbXFxzXFxTXSpcXFMpPygoXFxzKj8pKFsgXFx0XFxyXFxuXSopKSQvKTtcbiAgcmV0dXJuIHtcbiAgICBsZWFkaW5nOiBtWzFdLCAvLyB3aG9sZSBzdHJpbmcgZm9yIHdoaXRlc3BhY2Utb25seSBzdHJpbmdzXG4gICAgbGVhZGluZ0FzY2lpOiBtWzJdLFxuICAgIGxlYWRpbmdOb25Bc2NpaTogbVszXSxcbiAgICB0cmFpbGluZzogbVs0XSwgLy8gZW1wdHkgZm9yIHdoaXRlc3BhY2Utb25seSBzdHJpbmdzXG4gICAgdHJhaWxpbmdOb25Bc2NpaTogbVs1XSxcbiAgICB0cmFpbGluZ0FzY2lpOiBtWzZdXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGbGFua2VkQnlXaGl0ZXNwYWNlIChzaWRlLCBub2RlLCBvcHRpb25zKSB7XG4gIHZhciBzaWJsaW5nO1xuICB2YXIgcmVnRXhwO1xuICB2YXIgaXNGbGFua2VkO1xuXG4gIGlmIChzaWRlID09PSAnbGVmdCcpIHtcbiAgICBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgcmVnRXhwID0gLyAkLztcbiAgfSBlbHNlIHtcbiAgICBzaWJsaW5nID0gbm9kZS5uZXh0U2libGluZztcbiAgICByZWdFeHAgPSAvXiAvO1xuICB9XG5cbiAgaWYgKHNpYmxpbmcpIHtcbiAgICBpZiAoc2libGluZy5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgaXNGbGFua2VkID0gcmVnRXhwLnRlc3Qoc2libGluZy5ub2RlVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmVmb3JtYXR0ZWRDb2RlICYmIHNpYmxpbmcubm9kZU5hbWUgPT09ICdDT0RFJykge1xuICAgICAgaXNGbGFua2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChzaWJsaW5nLm5vZGVUeXBlID09PSAxICYmICFpc0Jsb2NrKHNpYmxpbmcpKSB7XG4gICAgICBpc0ZsYW5rZWQgPSByZWdFeHAudGVzdChzaWJsaW5nLnRleHRDb250ZW50KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzRmxhbmtlZFxufVxuXG52YXIgcmVkdWNlID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZTtcbnZhciBlc2NhcGVzID0gW1xuICBbL1xcXFwvZywgJ1xcXFxcXFxcJ10sXG4gIFsvXFwqL2csICdcXFxcKiddLFxuICBbL14tL2csICdcXFxcLSddLFxuICBbL15cXCsgL2csICdcXFxcKyAnXSxcbiAgWy9eKD0rKS9nLCAnXFxcXCQxJ10sXG4gIFsvXigjezEsNn0pIC9nLCAnXFxcXCQxICddLFxuICBbL2AvZywgJ1xcXFxgJ10sXG4gIFsvXn5+fi9nLCAnXFxcXH5+fiddLFxuICBbL1xcWy9nLCAnXFxcXFsnXSxcbiAgWy9cXF0vZywgJ1xcXFxdJ10sXG4gIFsvXj4vZywgJ1xcXFw+J10sXG4gIFsvXy9nLCAnXFxcXF8nXSxcbiAgWy9eKFxcZCspXFwuIC9nLCAnJDFcXFxcLiAnXVxuXTtcblxuZnVuY3Rpb24gVHVybmRvd25TZXJ2aWNlIChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUdXJuZG93blNlcnZpY2UpKSByZXR1cm4gbmV3IFR1cm5kb3duU2VydmljZShvcHRpb25zKVxuXG4gIHZhciBkZWZhdWx0cyA9IHtcbiAgICBydWxlczogcnVsZXMsXG4gICAgaGVhZGluZ1N0eWxlOiAnc2V0ZXh0JyxcbiAgICBocjogJyogKiAqJyxcbiAgICBidWxsZXRMaXN0TWFya2VyOiAnKicsXG4gICAgY29kZUJsb2NrU3R5bGU6ICdpbmRlbnRlZCcsXG4gICAgZmVuY2U6ICdgYGAnLFxuICAgIGVtRGVsaW1pdGVyOiAnXycsXG4gICAgc3Ryb25nRGVsaW1pdGVyOiAnKionLFxuICAgIGxpbmtTdHlsZTogJ2lubGluZWQnLFxuICAgIGxpbmtSZWZlcmVuY2VTdHlsZTogJ2Z1bGwnLFxuICAgIGJyOiAnICAnLFxuICAgIHByZWZvcm1hdHRlZENvZGU6IGZhbHNlLFxuICAgIGJsYW5rUmVwbGFjZW1lbnQ6IGZ1bmN0aW9uIChjb250ZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5pc0Jsb2NrID8gJ1xcblxcbicgOiAnJ1xuICAgIH0sXG4gICAga2VlcFJlcGxhY2VtZW50OiBmdW5jdGlvbiAoY29udGVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuaXNCbG9jayA/ICdcXG5cXG4nICsgbm9kZS5vdXRlckhUTUwgKyAnXFxuXFxuJyA6IG5vZGUub3V0ZXJIVE1MXG4gICAgfSxcbiAgICBkZWZhdWx0UmVwbGFjZW1lbnQ6IGZ1bmN0aW9uIChjb250ZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5pc0Jsb2NrID8gJ1xcblxcbicgKyBjb250ZW50ICsgJ1xcblxcbicgOiBjb250ZW50XG4gICAgfVxuICB9O1xuICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBvcHRpb25zKTtcbiAgdGhpcy5ydWxlcyA9IG5ldyBSdWxlcyh0aGlzLm9wdGlvbnMpO1xufVxuXG5UdXJuZG93blNlcnZpY2UucHJvdG90eXBlID0ge1xuICAvKipcbiAgICogVGhlIGVudHJ5IHBvaW50IGZvciBjb252ZXJ0aW5nIGEgc3RyaW5nIG9yIERPTSBub2RlIHRvIE1hcmtkb3duXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGlucHV0IFRoZSBzdHJpbmcgb3IgRE9NIG5vZGUgdG8gY29udmVydFxuICAgKiBAcmV0dXJucyBBIE1hcmtkb3duIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1dFxuICAgKiBAdHlwZSBTdHJpbmdcbiAgICovXG5cbiAgdHVybmRvd246IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIGlmICghY2FuQ29udmVydChpbnB1dCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGlucHV0ICsgJyBpcyBub3QgYSBzdHJpbmcsIG9yIGFuIGVsZW1lbnQvZG9jdW1lbnQvZnJhZ21lbnQgbm9kZS4nXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKGlucHV0ID09PSAnJykgcmV0dXJuICcnXG5cbiAgICB2YXIgb3V0cHV0ID0gcHJvY2Vzcy5jYWxsKHRoaXMsIG5ldyBSb290Tm9kZShpbnB1dCwgdGhpcy5vcHRpb25zKSk7XG4gICAgcmV0dXJuIHBvc3RQcm9jZXNzLmNhbGwodGhpcywgb3V0cHV0KVxuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgb25lIG9yIG1vcmUgcGx1Z2luc1xuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IHBsdWdpbiBUaGUgcGx1Z2luIG9yIGFycmF5IG9mIHBsdWdpbnMgdG8gYWRkXG4gICAqIEByZXR1cm5zIFRoZSBUdXJuZG93biBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAgICogQHR5cGUgT2JqZWN0XG4gICAqL1xuXG4gIHVzZTogZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBsdWdpbikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGx1Z2luLmxlbmd0aDsgaSsrKSB0aGlzLnVzZShwbHVnaW5baV0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBsdWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4gbXVzdCBiZSBhIEZ1bmN0aW9uIG9yIGFuIEFycmF5IG9mIEZ1bmN0aW9ucycpXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH0sXG5cbiAgLyoqXG4gICAqIEFkZHMgYSBydWxlXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGtleSBUaGUgdW5pcXVlIGtleSBvZiB0aGUgcnVsZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcnVsZSBUaGUgcnVsZVxuICAgKiBAcmV0dXJucyBUaGUgVHVybmRvd24gaW5zdGFuY2UgZm9yIGNoYWluaW5nXG4gICAqIEB0eXBlIE9iamVjdFxuICAgKi9cblxuICBhZGRSdWxlOiBmdW5jdGlvbiAoa2V5LCBydWxlKSB7XG4gICAgdGhpcy5ydWxlcy5hZGQoa2V5LCBydWxlKTtcbiAgICByZXR1cm4gdGhpc1xuICB9LFxuXG4gIC8qKlxuICAgKiBLZWVwIGEgbm9kZSAoYXMgSFRNTCkgdGhhdCBtYXRjaGVzIHRoZSBmaWx0ZXJcbiAgICogQHB1YmxpY1xuICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheXxGdW5jdGlvbn0gZmlsdGVyIFRoZSB1bmlxdWUga2V5IG9mIHRoZSBydWxlXG4gICAqIEByZXR1cm5zIFRoZSBUdXJuZG93biBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAgICogQHR5cGUgT2JqZWN0XG4gICAqL1xuXG4gIGtlZXA6IGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICB0aGlzLnJ1bGVzLmtlZXAoZmlsdGVyKTtcbiAgICByZXR1cm4gdGhpc1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBub2RlIHRoYXQgbWF0Y2hlcyB0aGUgZmlsdGVyXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8RnVuY3Rpb259IGZpbHRlciBUaGUgdW5pcXVlIGtleSBvZiB0aGUgcnVsZVxuICAgKiBAcmV0dXJucyBUaGUgVHVybmRvd24gaW5zdGFuY2UgZm9yIGNoYWluaW5nXG4gICAqIEB0eXBlIE9iamVjdFxuICAgKi9cblxuICByZW1vdmU6IGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICB0aGlzLnJ1bGVzLnJlbW92ZShmaWx0ZXIpO1xuICAgIHJldHVybiB0aGlzXG4gIH0sXG5cbiAgLyoqXG4gICAqIEVzY2FwZXMgTWFya2Rvd24gc3ludGF4XG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGVzY2FwZVxuICAgKiBAcmV0dXJucyBBIHN0cmluZyB3aXRoIE1hcmtkb3duIHN5bnRheCBlc2NhcGVkXG4gICAqIEB0eXBlIFN0cmluZ1xuICAgKi9cblxuICBlc2NhcGU6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gZXNjYXBlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBlc2NhcGUpIHtcbiAgICAgIHJldHVybiBhY2N1bXVsYXRvci5yZXBsYWNlKGVzY2FwZVswXSwgZXNjYXBlWzFdKVxuICAgIH0sIHN0cmluZylcbiAgfVxufTtcblxuLyoqXG4gKiBSZWR1Y2VzIGEgRE9NIG5vZGUgZG93biB0byBpdHMgTWFya2Rvd24gc3RyaW5nIGVxdWl2YWxlbnRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnROb2RlIFRoZSBub2RlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIEEgTWFya2Rvd24gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAqIEB0eXBlIFN0cmluZ1xuICovXG5cbmZ1bmN0aW9uIHByb2Nlc3MgKHBhcmVudE5vZGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXR1cm4gcmVkdWNlLmNhbGwocGFyZW50Tm9kZS5jaGlsZE5vZGVzLCBmdW5jdGlvbiAob3V0cHV0LCBub2RlKSB7XG4gICAgbm9kZSA9IG5ldyBOb2RlKG5vZGUsIHNlbGYub3B0aW9ucyk7XG5cbiAgICB2YXIgcmVwbGFjZW1lbnQgPSAnJztcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLmlzQ29kZSA/IG5vZGUubm9kZVZhbHVlIDogc2VsZi5lc2NhcGUobm9kZS5ub2RlVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudEZvck5vZGUuY2FsbChzZWxmLCBub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9pbihvdXRwdXQsIHJlcGxhY2VtZW50KVxuICB9LCAnJylcbn1cblxuLyoqXG4gKiBBcHBlbmRzIHN0cmluZ3MgYXMgZWFjaCBydWxlIHJlcXVpcmVzIGFuZCB0cmltcyB0aGUgb3V0cHV0XG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IG91dHB1dCBUaGUgY29udmVyc2lvbiBvdXRwdXRcbiAqIEByZXR1cm5zIEEgdHJpbW1lZCB2ZXJzaW9uIG9mIHRoZSBvdXB1dFxuICogQHR5cGUgU3RyaW5nXG4gKi9cblxuZnVuY3Rpb24gcG9zdFByb2Nlc3MgKG91dHB1dCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMucnVsZXMuZm9yRWFjaChmdW5jdGlvbiAocnVsZSkge1xuICAgIGlmICh0eXBlb2YgcnVsZS5hcHBlbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG91dHB1dCA9IGpvaW4ob3V0cHV0LCBydWxlLmFwcGVuZChzZWxmLm9wdGlvbnMpKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvdXRwdXQucmVwbGFjZSgvXltcXHRcXHJcXG5dKy8sICcnKS5yZXBsYWNlKC9bXFx0XFxyXFxuXFxzXSskLywgJycpXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZWxlbWVudCBub2RlIHRvIGl0cyBNYXJrZG93biBlcXVpdmFsZW50XG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSBUaGUgbm9kZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBBIE1hcmtkb3duIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gKiBAdHlwZSBTdHJpbmdcbiAqL1xuXG5mdW5jdGlvbiByZXBsYWNlbWVudEZvck5vZGUgKG5vZGUpIHtcbiAgdmFyIHJ1bGUgPSB0aGlzLnJ1bGVzLmZvck5vZGUobm9kZSk7XG4gIHZhciBjb250ZW50ID0gcHJvY2Vzcy5jYWxsKHRoaXMsIG5vZGUpO1xuICB2YXIgd2hpdGVzcGFjZSA9IG5vZGUuZmxhbmtpbmdXaGl0ZXNwYWNlO1xuICBpZiAod2hpdGVzcGFjZS5sZWFkaW5nIHx8IHdoaXRlc3BhY2UudHJhaWxpbmcpIGNvbnRlbnQgPSBjb250ZW50LnRyaW0oKTtcbiAgcmV0dXJuIChcbiAgICB3aGl0ZXNwYWNlLmxlYWRpbmcgK1xuICAgIHJ1bGUucmVwbGFjZW1lbnQoY29udGVudCwgbm9kZSwgdGhpcy5vcHRpb25zKSArXG4gICAgd2hpdGVzcGFjZS50cmFpbGluZ1xuICApXG59XG5cbi8qKlxuICogSm9pbnMgcmVwbGFjZW1lbnQgdG8gdGhlIGN1cnJlbnQgb3V0cHV0IHdpdGggYXBwcm9wcmlhdGUgbnVtYmVyIG9mIG5ldyBsaW5lc1xuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBvdXRwdXQgVGhlIGN1cnJlbnQgY29udmVyc2lvbiBvdXRwdXRcbiAqIEBwYXJhbSB7U3RyaW5nfSByZXBsYWNlbWVudCBUaGUgc3RyaW5nIHRvIGFwcGVuZCB0byB0aGUgb3V0cHV0XG4gKiBAcmV0dXJucyBKb2luZWQgb3V0cHV0XG4gKiBAdHlwZSBTdHJpbmdcbiAqL1xuXG5mdW5jdGlvbiBqb2luIChvdXRwdXQsIHJlcGxhY2VtZW50KSB7XG4gIHZhciBzMSA9IHRyaW1UcmFpbGluZ05ld2xpbmVzKG91dHB1dCk7XG4gIHZhciBzMiA9IHRyaW1MZWFkaW5nTmV3bGluZXMocmVwbGFjZW1lbnQpO1xuICB2YXIgbmxzID0gTWF0aC5tYXgob3V0cHV0Lmxlbmd0aCAtIHMxLmxlbmd0aCwgcmVwbGFjZW1lbnQubGVuZ3RoIC0gczIubGVuZ3RoKTtcbiAgdmFyIHNlcGFyYXRvciA9ICdcXG5cXG4nLnN1YnN0cmluZygwLCBubHMpO1xuXG4gIHJldHVybiBzMSArIHNlcGFyYXRvciArIHMyXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGlucHV0IGNhbiBiZSBjb252ZXJ0ZWRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudH0gaW5wdXQgRGVzY3JpYmUgdGhpcyBwYXJhbWV0ZXJcbiAqIEByZXR1cm5zIERlc2NyaWJlIHdoYXQgaXQgcmV0dXJuc1xuICogQHR5cGUgU3RyaW5nfE9iamVjdHxBcnJheXxCb29sZWFufE51bWJlclxuICovXG5cbmZ1bmN0aW9uIGNhbkNvbnZlcnQgKGlucHV0KSB7XG4gIHJldHVybiAoXG4gICAgaW5wdXQgIT0gbnVsbCAmJiAoXG4gICAgICB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAoaW5wdXQubm9kZVR5cGUgJiYgKFxuICAgICAgICBpbnB1dC5ub2RlVHlwZSA9PT0gMSB8fCBpbnB1dC5ub2RlVHlwZSA9PT0gOSB8fCBpbnB1dC5ub2RlVHlwZSA9PT0gMTFcbiAgICAgICkpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFR1cm5kb3duU2VydmljZTtcbiIsICJ2YXIgaGlnaGxpZ2h0UmVnRXhwID0gL2hpZ2hsaWdodC0oPzp0ZXh0fHNvdXJjZSktKFthLXowLTldKykvO1xuXG5mdW5jdGlvbiBoaWdobGlnaHRlZENvZGVCbG9jayAodHVybmRvd25TZXJ2aWNlKSB7XG4gIHR1cm5kb3duU2VydmljZS5hZGRSdWxlKCdoaWdobGlnaHRlZENvZGVCbG9jaycsIHtcbiAgICBmaWx0ZXI6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG5vZGUubm9kZU5hbWUgPT09ICdESVYnICYmXG4gICAgICAgIGhpZ2hsaWdodFJlZ0V4cC50ZXN0KG5vZGUuY2xhc3NOYW1lKSAmJlxuICAgICAgICBmaXJzdENoaWxkICYmXG4gICAgICAgIGZpcnN0Q2hpbGQubm9kZU5hbWUgPT09ICdQUkUnXG4gICAgICApXG4gICAgfSxcbiAgICByZXBsYWNlbWVudDogZnVuY3Rpb24gKGNvbnRlbnQsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBjbGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZSB8fCAnJztcbiAgICAgIHZhciBsYW5ndWFnZSA9IChjbGFzc05hbWUubWF0Y2goaGlnaGxpZ2h0UmVnRXhwKSB8fCBbbnVsbCwgJyddKVsxXTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgJ1xcblxcbicgKyBvcHRpb25zLmZlbmNlICsgbGFuZ3VhZ2UgKyAnXFxuJyArXG4gICAgICAgIG5vZGUuZmlyc3RDaGlsZC50ZXh0Q29udGVudCArXG4gICAgICAgICdcXG4nICsgb3B0aW9ucy5mZW5jZSArICdcXG5cXG4nXG4gICAgICApXG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc3RyaWtldGhyb3VnaCAodHVybmRvd25TZXJ2aWNlKSB7XG4gIHR1cm5kb3duU2VydmljZS5hZGRSdWxlKCdzdHJpa2V0aHJvdWdoJywge1xuICAgIGZpbHRlcjogWydkZWwnLCAncycsICdzdHJpa2UnXSxcbiAgICByZXBsYWNlbWVudDogZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgICAgIHJldHVybiAnficgKyBjb250ZW50ICsgJ34nXG4gICAgfVxuICB9KTtcbn1cblxudmFyIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbnZhciBldmVyeSA9IEFycmF5LnByb3RvdHlwZS5ldmVyeTtcbnZhciBydWxlcyA9IHt9O1xuXG5ydWxlcy50YWJsZUNlbGwgPSB7XG4gIGZpbHRlcjogWyd0aCcsICd0ZCddLFxuICByZXBsYWNlbWVudDogZnVuY3Rpb24gKGNvbnRlbnQsIG5vZGUpIHtcbiAgICByZXR1cm4gY2VsbChjb250ZW50LCBub2RlKVxuICB9XG59O1xuXG5ydWxlcy50YWJsZVJvdyA9IHtcbiAgZmlsdGVyOiAndHInLFxuICByZXBsYWNlbWVudDogZnVuY3Rpb24gKGNvbnRlbnQsIG5vZGUpIHtcbiAgICB2YXIgYm9yZGVyQ2VsbHMgPSAnJztcbiAgICB2YXIgYWxpZ25NYXAgPSB7IGxlZnQ6ICc6LS0nLCByaWdodDogJy0tOicsIGNlbnRlcjogJzotOicgfTtcblxuICAgIGlmIChpc0hlYWRpbmdSb3cobm9kZSkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBib3JkZXIgPSAnLS0tJztcbiAgICAgICAgdmFyIGFsaWduID0gKFxuICAgICAgICAgIG5vZGUuY2hpbGROb2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2FsaWduJykgfHwgJydcbiAgICAgICAgKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChhbGlnbikgYm9yZGVyID0gYWxpZ25NYXBbYWxpZ25dIHx8IGJvcmRlcjtcblxuICAgICAgICBib3JkZXJDZWxscyArPSBjZWxsKGJvcmRlciwgbm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICdcXG4nICsgY29udGVudCArIChib3JkZXJDZWxscyA/ICdcXG4nICsgYm9yZGVyQ2VsbHMgOiAnJylcbiAgfVxufTtcblxucnVsZXMudGFibGUgPSB7XG4gIC8vIE9ubHkgY29udmVydCB0YWJsZXMgd2l0aCBhIGhlYWRpbmcgcm93LlxuICAvLyBUYWJsZXMgd2l0aCBubyBoZWFkaW5nIHJvdyBhcmUga2VwdCB1c2luZyBga2VlcGAgKHNlZSBiZWxvdykuXG4gIGZpbHRlcjogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJ1RBQkxFJyAmJiBpc0hlYWRpbmdSb3cobm9kZS5yb3dzWzBdKVxuICB9LFxuXG4gIHJlcGxhY2VtZW50OiBmdW5jdGlvbiAoY29udGVudCkge1xuICAgIC8vIEVuc3VyZSB0aGVyZSBhcmUgbm8gYmxhbmsgbGluZXNcbiAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKCdcXG5cXG4nLCAnXFxuJyk7XG4gICAgcmV0dXJuICdcXG5cXG4nICsgY29udGVudCArICdcXG5cXG4nXG4gIH1cbn07XG5cbnJ1bGVzLnRhYmxlU2VjdGlvbiA9IHtcbiAgZmlsdGVyOiBbJ3RoZWFkJywgJ3Rib2R5JywgJ3Rmb290J10sXG4gIHJlcGxhY2VtZW50OiBmdW5jdGlvbiAoY29udGVudCkge1xuICAgIHJldHVybiBjb250ZW50XG4gIH1cbn07XG5cbi8vIEEgdHIgaXMgYSBoZWFkaW5nIHJvdyBpZjpcbi8vIC0gdGhlIHBhcmVudCBpcyBhIFRIRUFEXG4vLyAtIG9yIGlmIGl0cyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIFRBQkxFIG9yIHRoZSBmaXJzdCBUQk9EWSAocG9zc2libHlcbi8vICAgZm9sbG93aW5nIGEgYmxhbmsgVEhFQUQpXG4vLyAtIGFuZCBldmVyeSBjZWxsIGlzIGEgVEhcbmZ1bmN0aW9uIGlzSGVhZGluZ1JvdyAodHIpIHtcbiAgdmFyIHBhcmVudE5vZGUgPSB0ci5wYXJlbnROb2RlO1xuICByZXR1cm4gKFxuICAgIHBhcmVudE5vZGUubm9kZU5hbWUgPT09ICdUSEVBRCcgfHxcbiAgICAoXG4gICAgICBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHRyICYmXG4gICAgICAocGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gJ1RBQkxFJyB8fCBpc0ZpcnN0VGJvZHkocGFyZW50Tm9kZSkpICYmXG4gICAgICBldmVyeS5jYWxsKHRyLmNoaWxkTm9kZXMsIGZ1bmN0aW9uIChuKSB7IHJldHVybiBuLm5vZGVOYW1lID09PSAnVEgnIH0pXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIGlzRmlyc3RUYm9keSAoZWxlbWVudCkge1xuICB2YXIgcHJldmlvdXNTaWJsaW5nID0gZWxlbWVudC5wcmV2aW91c1NpYmxpbmc7XG4gIHJldHVybiAoXG4gICAgZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1RCT0RZJyAmJiAoXG4gICAgICAhcHJldmlvdXNTaWJsaW5nIHx8XG4gICAgICAoXG4gICAgICAgIHByZXZpb3VzU2libGluZy5ub2RlTmFtZSA9PT0gJ1RIRUFEJyAmJlxuICAgICAgICAvXlxccyokL2kudGVzdChwcmV2aW91c1NpYmxpbmcudGV4dENvbnRlbnQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIGNlbGwgKGNvbnRlbnQsIG5vZGUpIHtcbiAgdmFyIGluZGV4ID0gaW5kZXhPZi5jYWxsKG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLCBub2RlKTtcbiAgdmFyIHByZWZpeCA9ICcgJztcbiAgaWYgKGluZGV4ID09PSAwKSBwcmVmaXggPSAnfCAnO1xuICByZXR1cm4gcHJlZml4ICsgY29udGVudCArICcgfCdcbn1cblxuZnVuY3Rpb24gdGFibGVzICh0dXJuZG93blNlcnZpY2UpIHtcbiAgdHVybmRvd25TZXJ2aWNlLmtlZXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJ1RBQkxFJyAmJiAhaXNIZWFkaW5nUm93KG5vZGUucm93c1swXSlcbiAgfSk7XG4gIGZvciAodmFyIGtleSBpbiBydWxlcykgdHVybmRvd25TZXJ2aWNlLmFkZFJ1bGUoa2V5LCBydWxlc1trZXldKTtcbn1cblxuZnVuY3Rpb24gdGFza0xpc3RJdGVtcyAodHVybmRvd25TZXJ2aWNlKSB7XG4gIHR1cm5kb3duU2VydmljZS5hZGRSdWxlKCd0YXNrTGlzdEl0ZW1zJywge1xuICAgIGZpbHRlcjogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdjaGVja2JveCcgJiYgbm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lID09PSAnTEknXG4gICAgfSxcbiAgICByZXBsYWNlbWVudDogZnVuY3Rpb24gKGNvbnRlbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAobm9kZS5jaGVja2VkID8gJ1t4XScgOiAnWyBdJykgKyAnICdcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZm0gKHR1cm5kb3duU2VydmljZSkge1xuICB0dXJuZG93blNlcnZpY2UudXNlKFtcbiAgICBoaWdobGlnaHRlZENvZGVCbG9jayxcbiAgICBzdHJpa2V0aHJvdWdoLFxuICAgIHRhYmxlcyxcbiAgICB0YXNrTGlzdEl0ZW1zXG4gIF0pO1xufVxuXG5leHBvcnQgeyBnZm0sIGhpZ2hsaWdodGVkQ29kZUJsb2NrLCBzdHJpa2V0aHJvdWdoLCB0YWJsZXMsIHRhc2tMaXN0SXRlbXMgfTtcbiIsICIvLyBwdXNocm9ja3Mgc2NvcGVcbmltcG9ydCAqIGFzIHNtYXJ0eWFtbCBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydHlhbWwnO1xuXG5leHBvcnQge1xuICBzbWFydHlhbWxcbn1cblxuLy8gdGhpcmQgcGFydHkgcmVtYXJrXG5pbXBvcnQgeyB1bmlmaWVkIH0gZnJvbSAndW5pZmllZCc7XG5pbXBvcnQgcmVtYXJrR2ZtIGZyb20gJ3JlbWFyay1nZm0nO1xuaW1wb3J0IHJlbWFya1BhcnNlIGZyb20gJ3JlbWFyay1wYXJzZSc7XG5pbXBvcnQgcmVtYXJrRnJvbnRtYXR0ZXIgZnJvbSAncmVtYXJrLWZyb250bWF0dGVyJztcbmltcG9ydCByZW1hcmtIdG1sIGZyb20gJ3JlbWFyay1odG1sJztcbmltcG9ydCByZW1hcmtTdHJpbmdpZnkgZnJvbSAncmVtYXJrLXN0cmluZ2lmeSc7XG5cbmV4cG9ydCB7IHVuaWZpZWQsIHJlbWFya0dmbSwgcmVtYXJrUGFyc2UsIHJlbWFya0Zyb250bWF0dGVyLCByZW1hcmtIdG1sLCByZW1hcmtTdHJpbmdpZnkgfTtcblxuLy8gb3RoZXIgdGhpcmQgcGFydHkgc3R1ZmZcbmltcG9ydCB0dXJuZG93biBmcm9tICd0dXJuZG93bic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgKiBhcyB0dXJuZG93blBsdWdpbkdmbSBmcm9tICd0dXJuZG93bi1wbHVnaW4tZ2ZtJztcblxuZXhwb3J0IHsgdHVybmRvd24sIHR1cm5kb3duUGx1Z2luR2ZtIH07XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0bWFya2Rvd24ucGx1Z2lucy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBNZFBhcnNlZFJlc3VsdCB7XG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgY3JlYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnOiBzdHJpbmcpOiBQcm9taXNlPE1kUGFyc2VkUmVzdWx0PiB7XG4gICAgY29uc3QgbWRQYXJzZWRSZXN1bHQgPSBuZXcgTWRQYXJzZWRSZXN1bHQoKTtcbiAgICBhd2FpdCBtZFBhcnNlZFJlc3VsdC51cGRhdGVGcm9tTWFya2Rvd25TdHJpbmcobWRTdHJpbmdBcmcpO1xuICAgIHJldHVybiBtZFBhcnNlZFJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBvcmlnaW5hbFN0cmluZzogc3RyaW5nO1xuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcbiAgcHVibGljIGh0bWw6IHN0cmluZztcbiAgcHVibGljIGZyb250bWF0dGVyRGF0YToge1trZXk6IHN0cmluZ106IGFueX07XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUZyb21NYXJrZG93blN0cmluZyhtZFN0cmluZ0FyZzogc3RyaW5nKSB7XG4gICAgbGV0IHlhbWxTdHJpbmc6IHN0cmluZztcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW5zLnVuaWZpZWQoKVxuICAgICAgLnVzZShwbHVnaW5zLnJlbWFya1BhcnNlKVxuICAgICAgLnVzZShwbHVnaW5zLnJlbWFya0dmbSlcbiAgICAgIC51c2UocGx1Z2lucy5yZW1hcmtGcm9udG1hdHRlciwgWyd5YW1sJywgJ3RvbWwnXSlcbiAgICAgIC51c2UocGx1Z2lucy5yZW1hcmtTdHJpbmdpZnkpXG4gICAgICAudXNlKHBsdWdpbnMucmVtYXJrSHRtbClcbiAgICAgIC51c2UoKCkgPT4gKHRyZWUpID0+IHtcbiAgICAgICAgY29uc29sZS5kaXIodHJlZSk7XG4gICAgICAgIGNvbnN0IHlhbWxDaGlsZCA9IHRyZWUuY2hpbGRyZW4uZmluZChvYmplY3RBcmcgPT4gb2JqZWN0QXJnLnR5cGUgPT09ICd5YW1sJyk7XG4gICAgICAgIGlmICh5YW1sQ2hpbGQpIHtcbiAgICAgICAgICB5YW1sU3RyaW5nID0gKHlhbWxDaGlsZCBhcyBhbnkpLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnByb2Nlc3MobWRTdHJpbmdBcmcpO1xuICAgIHRoaXMuaHRtbCA9IHJlc3VsdC50b1N0cmluZygpO1xuICAgIGlmICh5YW1sU3RyaW5nKSB7XG4gICAgICB0aGlzLmZyb250bWF0dGVyRGF0YSA9IGF3YWl0IHBsdWdpbnMuc21hcnR5YW1sLnlhbWxTdHJpbmdUb09iamVjdCh5YW1sU3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mcm9udG1hdHRlckRhdGEgPSB7fTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vc21hcnRtYXJrZG93bi5wbHVnaW5zLmpzJztcbmltcG9ydCB7IE1kUGFyc2VkUmVzdWx0IH0gZnJvbSAnLi9zbWFydG1hcmtkb3duLmNsYXNzZXMubWRwYXJzZWRyZXN1bHQuanMnO1xuXG5leHBvcnQgY2xhc3MgU21hcnRNYXJrZG93biB7XG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgZWFzeU1hcmtkb3duVG9IdG1sKG1kU3RyaW5nQXJnOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzbWFydG1hcmtkb3duSW5zdGFuY2UgPSBuZXcgU21hcnRNYXJrZG93bigpO1xuICAgIGNvbnN0IG1kUGFyc2VkUmVzdWx0ID0gYXdhaXQgc21hcnRtYXJrZG93bkluc3RhbmNlLmdldE1kUGFyc2VkUmVzdWx0RnJvbU1hcmtkb3duKG1kU3RyaW5nQXJnKTtcbiAgICByZXR1cm4gbWRQYXJzZWRSZXN1bHQuaHRtbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogY3JlYXRlIGEgTWRQYXJzZWRSZXN1bHQgZnJvbSBtYXJrZG93blxuICAgKiBAcGFyYW0gbWRTdHJpbmdBcmdcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bihtZFN0cmluZ0FyZzogc3RyaW5nKTogUHJvbWlzZTxNZFBhcnNlZFJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IE1kUGFyc2VkUmVzdWx0LmNyZWF0ZUZyb21NYXJrZG93blN0cmluZyhtZFN0cmluZ0FyZyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBodG1sVG9NYXJrZG93bihodG1sU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR1cm5kb3duSW5zdGFuY2UgPSBuZXcgcGx1Z2lucy50dXJuZG93bih7XG4gICAgICBoZWFkaW5nU3R5bGU6ICdhdHgnLFxuICAgICAgY29kZUJsb2NrU3R5bGU6ICdmZW5jZWQnLFxuICAgIH0pO1xuICAgIHR1cm5kb3duSW5zdGFuY2UudXNlKHBsdWdpbnMudHVybmRvd25QbHVnaW5HZm0uZ2ZtKTtcbiAgICByZXR1cm4gdHVybmRvd25JbnN0YW5jZS50dXJuZG93bihodG1sU3RyaW5nKTtcbiAgfVxufVxuIiwgImNvbnN0IERFRkFVTFRfREVMSU1JVEVSID0gXCIvXCI7XG5jb25zdCBOT09QX1ZBTFVFID0gKHZhbHVlOiBzdHJpbmcpID0+IHZhbHVlO1xuY29uc3QgSURfU1RBUlQgPSAvXlskX1xccHtJRF9TdGFydH1dJC91O1xuY29uc3QgSURfQ09OVElOVUUgPSAvXlskXFx1MjAwY1xcdTIwMGRcXHB7SURfQ29udGludWV9XSQvdTtcblxuLyoqXG4gKiBFbmNvZGUgYSBzdHJpbmcgaW50byBhbm90aGVyIHN0cmluZy5cbiAqL1xuZXhwb3J0IHR5cGUgRW5jb2RlID0gKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZztcblxuLyoqXG4gKiBEZWNvZGUgYSBzdHJpbmcgaW50byBhbm90aGVyIHN0cmluZy5cbiAqL1xuZXhwb3J0IHR5cGUgRGVjb2RlID0gKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZU9wdGlvbnMge1xuICAvKipcbiAgICogQSBmdW5jdGlvbiBmb3IgZW5jb2RpbmcgaW5wdXQgc3RyaW5ncy5cbiAgICovXG4gIGVuY29kZVBhdGg/OiBFbmNvZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aFRvUmVnZXhwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNYXRjaGVzIHRoZSBwYXRoIGNvbXBsZXRlbHkgd2l0aG91dCB0cmFpbGluZyBjaGFyYWN0ZXJzLiAoZGVmYXVsdDogYHRydWVgKVxuICAgKi9cbiAgZW5kPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFsbG93cyBvcHRpb25hbCB0cmFpbGluZyBkZWxpbWl0ZXIgdG8gbWF0Y2guIChkZWZhdWx0OiBgdHJ1ZWApXG4gICAqL1xuICB0cmFpbGluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBNYXRjaCB3aWxsIGJlIGNhc2Ugc2Vuc2l0aXZlLiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIHNlbnNpdGl2ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBkZWxpbWl0ZXIgZm9yIHNlZ21lbnRzLiAoZGVmYXVsdDogYCcvJ2ApXG4gICAqL1xuICBkZWxpbWl0ZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWF0Y2hPcHRpb25zIGV4dGVuZHMgUGF0aFRvUmVnZXhwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGdW5jdGlvbiBmb3IgZGVjb2Rpbmcgc3RyaW5ncyBmb3IgcGFyYW1zLCBvciBgZmFsc2VgIHRvIGRpc2FibGUgZW50aXJlbHkuIChkZWZhdWx0OiBgZGVjb2RlVVJJQ29tcG9uZW50YClcbiAgICovXG4gIGRlY29kZT86IERlY29kZSB8IGZhbHNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGZvciBlbmNvZGluZyBpbnB1dCBzdHJpbmdzIGZvciBvdXRwdXQgaW50byB0aGUgcGF0aCwgb3IgYGZhbHNlYCB0byBkaXNhYmxlIGVudGlyZWx5LiAoZGVmYXVsdDogYGVuY29kZVVSSUNvbXBvbmVudGApXG4gICAqL1xuICBlbmNvZGU/OiBFbmNvZGUgfCBmYWxzZTtcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGRlbGltaXRlciBmb3Igc2VnbWVudHMuIChkZWZhdWx0OiBgJy8nYClcbiAgICovXG4gIGRlbGltaXRlcj86IHN0cmluZztcbn1cblxudHlwZSBUb2tlblR5cGUgPVxuICB8IFwie1wiXG4gIHwgXCJ9XCJcbiAgfCBcIndpbGRjYXJkXCJcbiAgfCBcInBhcmFtXCJcbiAgfCBcImNoYXJcIlxuICB8IFwiZXNjYXBlXCJcbiAgfCBcImVuZFwiXG4gIC8vIFJlc2VydmVkIGZvciB1c2Ugb3IgYW1iaWd1b3VzIGR1ZSB0byBwYXN0IHVzZS5cbiAgfCBcIihcIlxuICB8IFwiKVwiXG4gIHwgXCJbXCJcbiAgfCBcIl1cIlxuICB8IFwiK1wiXG4gIHwgXCI/XCJcbiAgfCBcIiFcIjtcblxuLyoqXG4gKiBUb2tlbml6ZXIgcmVzdWx0cy5cbiAqL1xuaW50ZXJmYWNlIExleFRva2VuIHtcbiAgdHlwZTogVG9rZW5UeXBlO1xuICBpbmRleDogbnVtYmVyO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5jb25zdCBTSU1QTEVfVE9LRU5TOiBSZWNvcmQ8c3RyaW5nLCBUb2tlblR5cGU+ID0ge1xuICAvLyBHcm91cHMuXG4gIFwie1wiOiBcIntcIixcbiAgXCJ9XCI6IFwifVwiLFxuICAvLyBSZXNlcnZlZC5cbiAgXCIoXCI6IFwiKFwiLFxuICBcIilcIjogXCIpXCIsXG4gIFwiW1wiOiBcIltcIixcbiAgXCJdXCI6IFwiXVwiLFxuICBcIitcIjogXCIrXCIsXG4gIFwiP1wiOiBcIj9cIixcbiAgXCIhXCI6IFwiIVwiLFxufTtcblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3Igc3RyaW5naWZ5IHRvIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVRleHQoc3RyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9be30oKVxcW1xcXSs/IToqXFxcXF0vZywgXCJcXFxcJCZcIik7XG59XG5cbi8qKlxuICogRXNjYXBlIGEgcmVndWxhciBleHByZXNzaW9uIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlKHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvWy4rKj9eJHt9KClbXFxdfC9cXFxcXS9nLCBcIlxcXFwkJlwiKTtcbn1cblxuLyoqXG4gKiBQbGFpbiB0ZXh0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHQge1xuICB0eXBlOiBcInRleHRcIjtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHBhcmFtZXRlciBkZXNpZ25lZCB0byBtYXRjaCBhcmJpdHJhcnkgdGV4dCB3aXRoaW4gYSBzZWdtZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlciB7XG4gIHR5cGU6IFwicGFyYW1cIjtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgd2lsZGNhcmQgcGFyYW1ldGVyIGRlc2lnbmVkIHRvIG1hdGNoIG11bHRpcGxlIHNlZ21lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpbGRjYXJkIHtcbiAgdHlwZTogXCJ3aWxkY2FyZFwiO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzZXQgb2YgcG9zc2libGUgdG9rZW5zIHRvIGV4cGFuZCB3aGVuIG1hdGNoaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwIHtcbiAgdHlwZTogXCJncm91cFwiO1xuICB0b2tlbnM6IFRva2VuW107XG59XG5cbi8qKlxuICogQSB0b2tlbiB0aGF0IGNvcnJlc3BvbmRzIHdpdGggYSByZWdleHAgY2FwdHVyZS5cbiAqL1xuZXhwb3J0IHR5cGUgS2V5ID0gUGFyYW1ldGVyIHwgV2lsZGNhcmQ7XG5cbi8qKlxuICogQSBzZXF1ZW5jZSBvZiBgcGF0aC10by1yZWdleHBgIGtleXMgdGhhdCBtYXRjaCBjYXB0dXJpbmcgZ3JvdXBzLlxuICovXG5leHBvcnQgdHlwZSBLZXlzID0gQXJyYXk8S2V5PjtcblxuLyoqXG4gKiBBIHNlcXVlbmNlIG9mIHBhdGggbWF0Y2ggY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgVG9rZW4gPSBUZXh0IHwgUGFyYW1ldGVyIHwgV2lsZGNhcmQgfCBHcm91cDtcblxuLyoqXG4gKiBUb2tlbml6ZWQgcGF0aCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuRGF0YSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB0b2tlbnM6IFRva2VuW10sXG4gICAgcHVibGljIHJlYWRvbmx5IG9yaWdpbmFsUGF0aD86IHN0cmluZyxcbiAgKSB7fVxufVxuXG4vKipcbiAqIFBhcnNlRXJyb3IgaXMgdGhyb3duIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3IgcHJvY2Vzc2luZyB0aGUgcGF0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhFcnJvciBleHRlbmRzIFR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3JpZ2luYWxQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICkge1xuICAgIGxldCB0ZXh0ID0gbWVzc2FnZTtcbiAgICBpZiAob3JpZ2luYWxQYXRoKSB0ZXh0ICs9IGA6ICR7b3JpZ2luYWxQYXRofWA7XG4gICAgdGV4dCArPSBgOyB2aXNpdCBodHRwczovL2dpdC5uZXcvcGF0aFRvUmVnZXhwRXJyb3IgZm9yIGluZm9gO1xuICAgIHN1cGVyKHRleHQpO1xuICB9XG59XG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgZm9yIHRoZSByYXcgdG9rZW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2Uoc3RyOiBzdHJpbmcsIG9wdGlvbnM6IFBhcnNlT3B0aW9ucyA9IHt9KTogVG9rZW5EYXRhIHtcbiAgY29uc3QgeyBlbmNvZGVQYXRoID0gTk9PUF9WQUxVRSB9ID0gb3B0aW9ucztcbiAgY29uc3QgY2hhcnMgPSBbLi4uc3RyXTtcbiAgY29uc3QgdG9rZW5zOiBBcnJheTxMZXhUb2tlbj4gPSBbXTtcbiAgbGV0IGluZGV4ID0gMDtcbiAgbGV0IHBvcyA9IDA7XG5cbiAgZnVuY3Rpb24gbmFtZSgpIHtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuXG4gICAgaWYgKElEX1NUQVJULnRlc3QoY2hhcnNbaW5kZXhdKSkge1xuICAgICAgZG8ge1xuICAgICAgICB2YWx1ZSArPSBjaGFyc1tpbmRleCsrXTtcbiAgICAgIH0gd2hpbGUgKElEX0NPTlRJTlVFLnRlc3QoY2hhcnNbaW5kZXhdKSk7XG4gICAgfSBlbHNlIGlmIChjaGFyc1tpbmRleF0gPT09ICdcIicpIHtcbiAgICAgIGxldCBxdW90ZVN0YXJ0ID0gaW5kZXg7XG5cbiAgICAgIHdoaWxlIChpbmRleCsrIDwgY2hhcnMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChjaGFyc1tpbmRleF0gPT09ICdcIicpIHtcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgIHF1b3RlU3RhcnQgPSAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5jcmVtZW50IG92ZXIgZXNjYXBlIGNoYXJhY3RlcnMuXG4gICAgICAgIGlmIChjaGFyc1tpbmRleF0gPT09IFwiXFxcXFwiKSBpbmRleCsrO1xuXG4gICAgICAgIHZhbHVlICs9IGNoYXJzW2luZGV4XTtcbiAgICAgIH1cblxuICAgICAgaWYgKHF1b3RlU3RhcnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhdGhFcnJvcihgVW50ZXJtaW5hdGVkIHF1b3RlIGF0IGluZGV4ICR7cXVvdGVTdGFydH1gLCBzdHIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBQYXRoRXJyb3IoYE1pc3NpbmcgcGFyYW1ldGVyIG5hbWUgYXQgaW5kZXggJHtpbmRleH1gLCBzdHIpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHdoaWxlIChpbmRleCA8IGNoYXJzLmxlbmd0aCkge1xuICAgIGNvbnN0IHZhbHVlID0gY2hhcnNbaW5kZXhdO1xuICAgIGNvbnN0IHR5cGUgPSBTSU1QTEVfVE9LRU5TW3ZhbHVlXTtcblxuICAgIGlmICh0eXBlKSB7XG4gICAgICB0b2tlbnMucHVzaCh7IHR5cGUsIGluZGV4OiBpbmRleCsrLCB2YWx1ZSB9KTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlxcXFxcIikge1xuICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcImVzY2FwZVwiLCBpbmRleDogaW5kZXgrKywgdmFsdWU6IGNoYXJzW2luZGV4KytdIH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiOlwiKSB7XG4gICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwicGFyYW1cIiwgaW5kZXg6IGluZGV4KyssIHZhbHVlOiBuYW1lKCkgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCIqXCIpIHtcbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJ3aWxkY2FyZFwiLCBpbmRleDogaW5kZXgrKywgdmFsdWU6IG5hbWUoKSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcImNoYXJcIiwgaW5kZXg6IGluZGV4KyssIHZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRva2Vucy5wdXNoKHsgdHlwZTogXCJlbmRcIiwgaW5kZXgsIHZhbHVlOiBcIlwiIH0pO1xuXG4gIGZ1bmN0aW9uIGNvbnN1bWVVbnRpbChlbmRUeXBlOiBUb2tlblR5cGUpOiBUb2tlbltdIHtcbiAgICBjb25zdCBvdXRwdXQ6IFRva2VuW10gPSBbXTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1twb3MrK107XG4gICAgICBpZiAodG9rZW4udHlwZSA9PT0gZW5kVHlwZSkgYnJlYWs7XG5cbiAgICAgIGlmICh0b2tlbi50eXBlID09PSBcImNoYXJcIiB8fCB0b2tlbi50eXBlID09PSBcImVzY2FwZVwiKSB7XG4gICAgICAgIGxldCBwYXRoID0gdG9rZW4udmFsdWU7XG4gICAgICAgIGxldCBjdXIgPSB0b2tlbnNbcG9zXTtcblxuICAgICAgICB3aGlsZSAoY3VyLnR5cGUgPT09IFwiY2hhclwiIHx8IGN1ci50eXBlID09PSBcImVzY2FwZVwiKSB7XG4gICAgICAgICAgcGF0aCArPSBjdXIudmFsdWU7XG4gICAgICAgICAgY3VyID0gdG9rZW5zWysrcG9zXTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dC5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB2YWx1ZTogZW5jb2RlUGF0aChwYXRoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJwYXJhbVwiIHx8IHRva2VuLnR5cGUgPT09IFwid2lsZGNhcmRcIikge1xuICAgICAgICBvdXRwdXQucHVzaCh7XG4gICAgICAgICAgdHlwZTogdG9rZW4udHlwZSxcbiAgICAgICAgICBuYW1lOiB0b2tlbi52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJ7XCIpIHtcbiAgICAgICAgb3V0cHV0LnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZ3JvdXBcIixcbiAgICAgICAgICB0b2tlbnM6IGNvbnN1bWVVbnRpbChcIn1cIiksXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFBhdGhFcnJvcihcbiAgICAgICAgYFVuZXhwZWN0ZWQgJHt0b2tlbi50eXBlfSBhdCBpbmRleCAke3Rva2VuLmluZGV4fSwgZXhwZWN0ZWQgJHtlbmRUeXBlfWAsXG4gICAgICAgIHN0cixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVG9rZW5EYXRhKGNvbnN1bWVVbnRpbChcImVuZFwiKSwgc3RyKTtcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgc3RyaW5nIHRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIHRoZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZTxQIGV4dGVuZHMgUGFyYW1EYXRhID0gUGFyYW1EYXRhPihcbiAgcGF0aDogUGF0aCxcbiAgb3B0aW9uczogQ29tcGlsZU9wdGlvbnMgJiBQYXJzZU9wdGlvbnMgPSB7fSxcbikge1xuICBjb25zdCB7IGVuY29kZSA9IGVuY29kZVVSSUNvbXBvbmVudCwgZGVsaW1pdGVyID0gREVGQVVMVF9ERUxJTUlURVIgfSA9XG4gICAgb3B0aW9ucztcbiAgY29uc3QgZGF0YSA9IHR5cGVvZiBwYXRoID09PSBcIm9iamVjdFwiID8gcGF0aCA6IHBhcnNlKHBhdGgsIG9wdGlvbnMpO1xuICBjb25zdCBmbiA9IHRva2Vuc1RvRnVuY3Rpb24oZGF0YS50b2tlbnMsIGRlbGltaXRlciwgZW5jb2RlKTtcblxuICByZXR1cm4gZnVuY3Rpb24gcGF0aChwYXJhbXM6IFAgPSB7fSBhcyBQKSB7XG4gICAgY29uc3QgW3BhdGgsIC4uLm1pc3NpbmddID0gZm4ocGFyYW1zKTtcbiAgICBpZiAobWlzc2luZy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE1pc3NpbmcgcGFyYW1ldGVyczogJHttaXNzaW5nLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGg7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFBhcmFtRGF0YSA9IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+PjtcbmV4cG9ydCB0eXBlIFBhdGhGdW5jdGlvbjxQIGV4dGVuZHMgUGFyYW1EYXRhPiA9IChkYXRhPzogUCkgPT4gc3RyaW5nO1xuXG5mdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uKFxuICB0b2tlbnM6IFRva2VuW10sXG4gIGRlbGltaXRlcjogc3RyaW5nLFxuICBlbmNvZGU6IEVuY29kZSB8IGZhbHNlLFxuKSB7XG4gIGNvbnN0IGVuY29kZXJzID0gdG9rZW5zLm1hcCgodG9rZW4pID0+XG4gICAgdG9rZW5Ub0Z1bmN0aW9uKHRva2VuLCBkZWxpbWl0ZXIsIGVuY29kZSksXG4gICk7XG5cbiAgcmV0dXJuIChkYXRhOiBQYXJhbURhdGEpID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW1wiXCJdO1xuXG4gICAgZm9yIChjb25zdCBlbmNvZGVyIG9mIGVuY29kZXJzKSB7XG4gICAgICBjb25zdCBbdmFsdWUsIC4uLmV4dHJhc10gPSBlbmNvZGVyKGRhdGEpO1xuICAgICAgcmVzdWx0WzBdICs9IHZhbHVlO1xuICAgICAgcmVzdWx0LnB1c2goLi4uZXh0cmFzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzaW5nbGUgdG9rZW4gaW50byBhIHBhdGggYnVpbGRpbmcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2VuVG9GdW5jdGlvbihcbiAgdG9rZW46IFRva2VuLFxuICBkZWxpbWl0ZXI6IHN0cmluZyxcbiAgZW5jb2RlOiBFbmNvZGUgfCBmYWxzZSxcbik6IChkYXRhOiBQYXJhbURhdGEpID0+IHN0cmluZ1tdIHtcbiAgaWYgKHRva2VuLnR5cGUgPT09IFwidGV4dFwiKSByZXR1cm4gKCkgPT4gW3Rva2VuLnZhbHVlXTtcblxuICBpZiAodG9rZW4udHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgY29uc3QgZm4gPSB0b2tlbnNUb0Z1bmN0aW9uKHRva2VuLnRva2VucywgZGVsaW1pdGVyLCBlbmNvZGUpO1xuXG4gICAgcmV0dXJuIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBbdmFsdWUsIC4uLm1pc3NpbmddID0gZm4oZGF0YSk7XG4gICAgICBpZiAoIW1pc3NpbmcubGVuZ3RoKSByZXR1cm4gW3ZhbHVlXTtcbiAgICAgIHJldHVybiBbXCJcIl07XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGVuY29kZVZhbHVlID0gZW5jb2RlIHx8IE5PT1BfVkFMVUU7XG5cbiAgaWYgKHRva2VuLnR5cGUgPT09IFwid2lsZGNhcmRcIiAmJiBlbmNvZGUgIT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbdG9rZW4ubmFtZV07XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIFtcIlwiLCB0b2tlbi5uYW1lXTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXCIke3Rva2VuLm5hbWV9XCIgdG8gYmUgYSBub24tZW1wdHkgYXJyYXlgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICAubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgRXhwZWN0ZWQgXCIke3Rva2VuLm5hbWV9LyR7aW5kZXh9XCIgdG8gYmUgYSBzdHJpbmdgLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlVmFsdWUodmFsdWUpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oZGVsaW1pdGVyKSxcbiAgICAgIF07XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YVt0b2tlbi5uYW1lXTtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIFtcIlwiLCB0b2tlbi5uYW1lXTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFwiJHt0b2tlbi5uYW1lfVwiIHRvIGJlIGEgc3RyaW5nYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtlbmNvZGVWYWx1ZSh2YWx1ZSldO1xuICB9O1xufVxuXG4vKipcbiAqIEEgbWF0Y2ggcmVzdWx0IGNvbnRhaW5zIGRhdGEgYWJvdXQgdGhlIHBhdGggbWF0Y2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF0Y2hSZXN1bHQ8UCBleHRlbmRzIFBhcmFtRGF0YT4ge1xuICBwYXRoOiBzdHJpbmc7XG4gIHBhcmFtczogUDtcbn1cblxuLyoqXG4gKiBBIG1hdGNoIGlzIGVpdGhlciBgZmFsc2VgIChubyBtYXRjaCkgb3IgYSBtYXRjaCByZXN1bHQuXG4gKi9cbmV4cG9ydCB0eXBlIE1hdGNoPFAgZXh0ZW5kcyBQYXJhbURhdGE+ID0gZmFsc2UgfCBNYXRjaFJlc3VsdDxQPjtcblxuLyoqXG4gKiBUaGUgbWF0Y2ggZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgd2hldGhlciBpdCBtYXRjaGVkIHRoZSBwYXRoLlxuICovXG5leHBvcnQgdHlwZSBNYXRjaEZ1bmN0aW9uPFAgZXh0ZW5kcyBQYXJhbURhdGE+ID0gKHBhdGg6IHN0cmluZykgPT4gTWF0Y2g8UD47XG5cbi8qKlxuICogU3VwcG9ydGVkIHBhdGggdHlwZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFBhdGggPSBzdHJpbmcgfCBUb2tlbkRhdGE7XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgcGF0aCBpbnRvIGEgbWF0Y2ggZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaDxQIGV4dGVuZHMgUGFyYW1EYXRhPihcbiAgcGF0aDogUGF0aCB8IFBhdGhbXSxcbiAgb3B0aW9uczogTWF0Y2hPcHRpb25zICYgUGFyc2VPcHRpb25zID0ge30sXG4pOiBNYXRjaEZ1bmN0aW9uPFA+IHtcbiAgY29uc3QgeyBkZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQsIGRlbGltaXRlciA9IERFRkFVTFRfREVMSU1JVEVSIH0gPVxuICAgIG9wdGlvbnM7XG4gIGNvbnN0IHsgcmVnZXhwLCBrZXlzIH0gPSBwYXRoVG9SZWdleHAocGF0aCwgb3B0aW9ucyk7XG5cbiAgY29uc3QgZGVjb2RlcnMgPSBrZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgaWYgKGRlY29kZSA9PT0gZmFsc2UpIHJldHVybiBOT09QX1ZBTFVFO1xuICAgIGlmIChrZXkudHlwZSA9PT0gXCJwYXJhbVwiKSByZXR1cm4gZGVjb2RlO1xuICAgIHJldHVybiAodmFsdWU6IHN0cmluZykgPT4gdmFsdWUuc3BsaXQoZGVsaW1pdGVyKS5tYXAoZGVjb2RlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIG1hdGNoKGlucHV0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBtID0gcmVnZXhwLmV4ZWMoaW5wdXQpO1xuICAgIGlmICghbSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcGF0aCA9IG1bMF07XG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG1baV0gPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaSAtIDFdO1xuICAgICAgY29uc3QgZGVjb2RlciA9IGRlY29kZXJzW2kgLSAxXTtcbiAgICAgIHBhcmFtc1trZXkubmFtZV0gPSBkZWNvZGVyKG1baV0pO1xuICAgIH1cblxuICAgIHJldHVybiB7IHBhdGgsIHBhcmFtcyB9O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFRvUmVnZXhwKFxuICBwYXRoOiBQYXRoIHwgUGF0aFtdLFxuICBvcHRpb25zOiBQYXRoVG9SZWdleHBPcHRpb25zICYgUGFyc2VPcHRpb25zID0ge30sXG4pIHtcbiAgY29uc3Qge1xuICAgIGRlbGltaXRlciA9IERFRkFVTFRfREVMSU1JVEVSLFxuICAgIGVuZCA9IHRydWUsXG4gICAgc2Vuc2l0aXZlID0gZmFsc2UsXG4gICAgdHJhaWxpbmcgPSB0cnVlLFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3Qga2V5czogS2V5cyA9IFtdO1xuICBjb25zdCBmbGFncyA9IHNlbnNpdGl2ZSA/IFwiXCIgOiBcImlcIjtcbiAgY29uc3Qgc291cmNlczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGlucHV0IG9mIHBhdGhzVG9BcnJheShwYXRoLCBbXSkpIHtcbiAgICBjb25zdCBkYXRhID0gdHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiID8gaW5wdXQgOiBwYXJzZShpbnB1dCwgb3B0aW9ucyk7XG4gICAgZm9yIChjb25zdCB0b2tlbnMgb2YgZmxhdHRlbihkYXRhLnRva2VucywgMCwgW10pKSB7XG4gICAgICBzb3VyY2VzLnB1c2godG9SZWdFeHBTb3VyY2UodG9rZW5zLCBkZWxpbWl0ZXIsIGtleXMsIGRhdGEub3JpZ2luYWxQYXRoKSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IHBhdHRlcm4gPSBgXig/OiR7c291cmNlcy5qb2luKFwifFwiKX0pYDtcbiAgaWYgKHRyYWlsaW5nKSBwYXR0ZXJuICs9IGAoPzoke2VzY2FwZShkZWxpbWl0ZXIpfSQpP2A7XG4gIHBhdHRlcm4gKz0gZW5kID8gXCIkXCIgOiBgKD89JHtlc2NhcGUoZGVsaW1pdGVyKX18JClgO1xuXG4gIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuICByZXR1cm4geyByZWdleHAsIGtleXMgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcGF0aCBvciBhcnJheSBvZiBwYXRocyBpbnRvIGEgZmxhdCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gcGF0aHNUb0FycmF5KHBhdGhzOiBQYXRoIHwgUGF0aFtdLCBpbml0OiBQYXRoW10pOiBQYXRoW10ge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXRocykpIHtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcGF0aHMpIHBhdGhzVG9BcnJheShwLCBpbml0KTtcbiAgfSBlbHNlIHtcbiAgICBpbml0LnB1c2gocGF0aHMpO1xuICB9XG4gIHJldHVybiBpbml0O1xufVxuXG4vKipcbiAqIEZsYXR0ZW5lZCB0b2tlbiBzZXQuXG4gKi9cbnR5cGUgRmxhdFRva2VuID0gVGV4dCB8IFBhcmFtZXRlciB8IFdpbGRjYXJkO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgZmxhdCBsaXN0IG9mIHNlcXVlbmNlIHRva2VucyBmcm9tIHRoZSBnaXZlbiB0b2tlbnMuXG4gKi9cbmZ1bmN0aW9uKiBmbGF0dGVuKFxuICB0b2tlbnM6IFRva2VuW10sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluaXQ6IEZsYXRUb2tlbltdLFxuKTogR2VuZXJhdG9yPEZsYXRUb2tlbltdPiB7XG4gIGlmIChpbmRleCA9PT0gdG9rZW5zLmxlbmd0aCkge1xuICAgIHJldHVybiB5aWVsZCBpbml0O1xuICB9XG5cbiAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdO1xuXG4gIGlmICh0b2tlbi50eXBlID09PSBcImdyb3VwXCIpIHtcbiAgICBmb3IgKGNvbnN0IHNlcSBvZiBmbGF0dGVuKHRva2VuLnRva2VucywgMCwgaW5pdC5zbGljZSgpKSkge1xuICAgICAgeWllbGQqIGZsYXR0ZW4odG9rZW5zLCBpbmRleCArIDEsIHNlcSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGluaXQucHVzaCh0b2tlbik7XG4gIH1cblxuICB5aWVsZCogZmxhdHRlbih0b2tlbnMsIGluZGV4ICsgMSwgaW5pdCk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgZmxhdCBzZXF1ZW5jZSBvZiB0b2tlbnMgaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gdG9SZWdFeHBTb3VyY2UoXG4gIHRva2VuczogRmxhdFRva2VuW10sXG4gIGRlbGltaXRlcjogc3RyaW5nLFxuICBrZXlzOiBLZXlzLFxuICBvcmlnaW5hbFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB7XG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBsZXQgYmFja3RyYWNrID0gXCJcIjtcbiAgbGV0IGlzU2FmZVNlZ21lbnRQYXJhbSA9IHRydWU7XG5cbiAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHJlc3VsdCArPSBlc2NhcGUodG9rZW4udmFsdWUpO1xuICAgICAgYmFja3RyYWNrICs9IHRva2VuLnZhbHVlO1xuICAgICAgaXNTYWZlU2VnbWVudFBhcmFtIHx8PSB0b2tlbi52YWx1ZS5pbmNsdWRlcyhkZWxpbWl0ZXIpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFwicGFyYW1cIiB8fCB0b2tlbi50eXBlID09PSBcIndpbGRjYXJkXCIpIHtcbiAgICAgIGlmICghaXNTYWZlU2VnbWVudFBhcmFtICYmICFiYWNrdHJhY2spIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhdGhFcnJvcihcbiAgICAgICAgICBgTWlzc2luZyB0ZXh0IGJlZm9yZSBcIiR7dG9rZW4ubmFtZX1cIiAke3Rva2VuLnR5cGV9YCxcbiAgICAgICAgICBvcmlnaW5hbFBhdGgsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi50eXBlID09PSBcInBhcmFtXCIpIHtcbiAgICAgICAgcmVzdWx0ICs9IGAoJHtuZWdhdGUoZGVsaW1pdGVyLCBpc1NhZmVTZWdtZW50UGFyYW0gPyBcIlwiIDogYmFja3RyYWNrKX0rKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gYChbXFxcXHNcXFxcU10rKWA7XG4gICAgICB9XG5cbiAgICAgIGtleXMucHVzaCh0b2tlbik7XG4gICAgICBiYWNrdHJhY2sgPSBcIlwiO1xuICAgICAgaXNTYWZlU2VnbWVudFBhcmFtID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEJsb2NrIGJhY2t0cmFja2luZyBvbiBwcmV2aW91cyB0ZXh0IGFuZCBpZ25vcmUgZGVsaW1pdGVyIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gbmVnYXRlKGRlbGltaXRlcjogc3RyaW5nLCBiYWNrdHJhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChiYWNrdHJhY2subGVuZ3RoIDwgMikge1xuICAgIGlmIChkZWxpbWl0ZXIubGVuZ3RoIDwgMikgcmV0dXJuIGBbXiR7ZXNjYXBlKGRlbGltaXRlciArIGJhY2t0cmFjayl9XWA7XG4gICAgcmV0dXJuIGAoPzooPyEke2VzY2FwZShkZWxpbWl0ZXIpfSlbXiR7ZXNjYXBlKGJhY2t0cmFjayl9XSlgO1xuICB9XG4gIGlmIChkZWxpbWl0ZXIubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBgKD86KD8hJHtlc2NhcGUoYmFja3RyYWNrKX0pW14ke2VzY2FwZShkZWxpbWl0ZXIpfV0pYDtcbiAgfVxuICByZXR1cm4gYCg/Oig/ISR7ZXNjYXBlKGJhY2t0cmFjayl9fCR7ZXNjYXBlKGRlbGltaXRlcil9KVtcXFxcc1xcXFxTXSlgO1xufVxuXG4vKipcbiAqIFN0cmluZ2lmeSBhbiBhcnJheSBvZiB0b2tlbnMgaW50byBhIHBhdGggc3RyaW5nLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlUb2tlbnModG9rZW5zOiBUb2tlbltdKTogc3RyaW5nIHtcbiAgbGV0IHZhbHVlID0gXCJcIjtcbiAgbGV0IGkgPSAwO1xuXG4gIGZ1bmN0aW9uIG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IGlzU2FmZSA9IGlzTmFtZVNhZmUodmFsdWUpICYmIGlzTmV4dE5hbWVTYWZlKHRva2Vuc1tpXSk7XG4gICAgcmV0dXJuIGlzU2FmZSA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG5cbiAgd2hpbGUgKGkgPCB0b2tlbnMubGVuZ3RoKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaSsrXTtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBcInRleHRcIikge1xuICAgICAgdmFsdWUgKz0gZXNjYXBlVGV4dCh0b2tlbi52YWx1ZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICB2YWx1ZSArPSBgeyR7c3RyaW5naWZ5VG9rZW5zKHRva2VuLnRva2Vucyl9fWA7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJwYXJhbVwiKSB7XG4gICAgICB2YWx1ZSArPSBgOiR7bmFtZSh0b2tlbi5uYW1lKX1gO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFwid2lsZGNhcmRcIikge1xuICAgICAgdmFsdWUgKz0gYCoke25hbWUodG9rZW4ubmFtZSl9YDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVua25vd24gdG9rZW4gdHlwZTogJHsodG9rZW4gYXMgYW55KS50eXBlfWApO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFN0cmluZ2lmeSB0b2tlbiBkYXRhIGludG8gYSBwYXRoIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeShkYXRhOiBUb2tlbkRhdGEpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKGRhdGEudG9rZW5zKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGUgcGFyYW1ldGVyIG5hbWUgY29udGFpbnMgdmFsaWQgSUQgY2hhcmFjdGVycy5cbiAqL1xuZnVuY3Rpb24gaXNOYW1lU2FmZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgW2ZpcnN0LCAuLi5yZXN0XSA9IG5hbWU7XG4gIHJldHVybiBJRF9TVEFSVC50ZXN0KGZpcnN0KSAmJiByZXN0LmV2ZXJ5KChjaGFyKSA9PiBJRF9DT05USU5VRS50ZXN0KGNoYXIpKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGUgbmV4dCB0b2tlbiBkb2VzIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgY3VycmVudCBwYXJhbSBuYW1lLlxuICovXG5mdW5jdGlvbiBpc05leHROYW1lU2FmZSh0b2tlbjogVG9rZW4gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUgPT09IFwidGV4dFwiKSByZXR1cm4gIUlEX0NPTlRJTlVFLnRlc3QodG9rZW4udmFsdWVbMF0pO1xuICByZXR1cm4gdHJ1ZTtcbn1cbiIsICIvLyBAcHVzaC5yb2NrcyBzY29wZVxuaW1wb3J0ICogYXMgbGlrIGZyb20gJ0BwdXNoLnJvY2tzL2xpayc7XG5pbXBvcnQgKiBhcyBzbWFydHJ4IGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cngnO1xuXG5leHBvcnQge1xuICBsaWssXG4gIHNtYXJ0cngsXG59XG5cbi8vIHRoaXJkIHBhcnR5IHNjb3BlXG5pbXBvcnQgKiBhcyBwYXRoVG9SZWdFeHAgZnJvbSAncGF0aC10by1yZWdleHAnO1xuXG5leHBvcnQgeyBwYXRoVG9SZWdFeHAgfTtcbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vc21hcnRyb3V0ZXIucGx1Z2lucy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVBhcmFtcyB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgZ2V0QWxsQXNPYmplY3QoKSB7XG4gICAgY29uc3QgdXJsU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKCh1cmxTZWFyY2hQYXJhbXMgYXMgYW55KS5lbnRyaWVzKCkpO1xuICB9XG5cbiAgcHVibGljIHNldFF1ZXJ5UGFyYW0oXG4gICAgcXVlcnlLZXlBcmc6IHN0cmluZyxcbiAgICBxdWVyeUNvbnRlbnRBcmc6IHN0cmluZyxcbiAgICBwdXNoT3JSZXBsYWNlQXJnOiAncHVzaCcgfCAncmVwbGFjZScgPSAncmVwbGFjZSdcbiAgKSB7XG4gICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICBxdWVyeVBhcmFtcy5zZXQocXVlcnlLZXlBcmcsIHF1ZXJ5Q29udGVudEFyZyk7XG4gICAgcHVzaE9yUmVwbGFjZUFyZyA9PT0gJ3B1c2gnXG4gICAgICA/IGhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsICc/JyArIHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCkpXG4gICAgICA6IGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIG51bGwsICc/JyArIHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZVF1ZXJ5UGFyYW0ocXVlcnlLZXlBcmc6IHN0cmluZywgcHVzaE9yUmVwbGFjZUFyZzogJ3B1c2gnIHwgJ3JlcGxhY2UnID0gJ3JlcGxhY2UnKSB7XG4gICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICBxdWVyeVBhcmFtcy5kZWxldGUocXVlcnlLZXlBcmcpO1xuICAgIHB1c2hPclJlcGxhY2VBcmcgPT09ICdwdXNoJ1xuICAgICAgPyBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCAnPycgKyBxdWVyeVBhcmFtcy50b1N0cmluZygpKVxuICAgICAgOiBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCAnPycgKyBxdWVyeVBhcmFtcy50b1N0cmluZygpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRRdWVyeVBhcmFtKHF1ZXJ5UGFyYW1OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuZ2V0QWxsQXNPYmplY3QoKTtcbiAgICByZXR1cm4gcXVlcnlQYXJhbXNbcXVlcnlQYXJhbU5hbWVdO1xuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0cm91dGVyLnBsdWdpbnMuanMnO1xuXG5pbXBvcnQgeyBRdWVyeVBhcmFtcyB9IGZyb20gJy4vc21hcnRyb3V0ZXIuY2xhc3Nlcy5xdWVyeXBhcmFtcy5qcyc7XG5cbmNvbnN0IHJvdXRlTG9nID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICBjb25zb2xlLmxvZyhgJWNbUm91dGVyXSVjICR7bWVzc2FnZX1gLCAnY29sb3I6IHJnYigyNTUsIDEwNSwgMTAwKTsnLCAnY29sb3I6IGluaGVyaXQnKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlck9wdGlvbnMge1xuICBkZWJ1Zz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFRIYW5kbGVyRnVuY3Rpb24gPSA8VCBleHRlbmRzIG9iamVjdD4ocm91dGVBcmc6IElSb3V0ZUluZm8pID0+IFByb21pc2U8YW55PjtcbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlSW5mbyB7XG4gIHBhdGg6IHN0cmluZztcbiAgaW5kZXg6IG51bWJlcjtcbiAgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBxdWVyeVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBSb3V0ZXJcbiAqL1xuZXhwb3J0IGNsYXNzIFNtYXJ0Um91dGVyIHtcbiAgcHVibGljIG9wdGlvbnM6IElSb3V0ZXJPcHRpb25zID0ge1xuICAgIGRlYnVnOiBmYWxzZSxcbiAgfTtcblxuICBwdWJsaWMgcXVlcnlQYXJhbXMgPSBuZXcgUXVlcnlQYXJhbXMoKTtcblxuICAvKipcbiAgICogdGhlIHJvdXRlcyB3ZSBhcmUgaGFuZGxpbmdcbiAgICovXG4gIHB1YmxpYyByb3V0ZXM6IEFycmF5PHtcbiAgICBtYXRjaEZ1bmN0aW9uOiBwbHVnaW5zLnBhdGhUb1JlZ0V4cC5NYXRjaEZ1bmN0aW9uPGFueT47XG4gICAgaGFuZGxlcjogVEhhbmRsZXJGdW5jdGlvbjtcbiAgfT4gPSBbXTtcblxuICAvKipcbiAgICogYmFzZSBwYXRoIGZvciB0aGlzIHJvdXRlclxuICAgKi9cbiAgcHJpdmF0ZSBiYXNlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIGZvciBjbGVhbnVwXG4gICAqL1xuICBwcml2YXRlIHBvcHN0YXRlTGlzdGVuZXI6IChldmVudDogUG9wU3RhdGVFdmVudCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBSb3V0ZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnOiBJUm91dGVyT3B0aW9ucywgYmFzZVBhdGg6IHN0cmluZyA9ICcnKSB7XG4gICAgLy8gbGV0cyBzZXQgdGhlIHJvdXRlciBvcHRpb25zXG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgLi4ub3B0aW9uc0FyZyxcbiAgICB9O1xuICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDtcblxuICAgIC8vIGxldHMgc3Vic2NyaWJlIHRvIHJvdXRlIGNoYW5nZXNcbiAgICB0aGlzLnBvcHN0YXRlTGlzdGVuZXIgPSAocG9wU3RhdGVFdmVudEFyZykgPT4ge1xuICAgICAgcG9wU3RhdGVFdmVudEFyZy5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5faGFuZGxlUm91dGVTdGF0ZSgpO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgdGhpcy5wb3BzdGF0ZUxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdWItcm91dGVyIHdpdGggYSBzcGVjaWZpYyBwcmVmaXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YlBhdGhcbiAgICogQHBhcmFtIHtJUm91dGVyT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlU3ViUm91dGVyKHN1YlBhdGg6IHN0cmluZywgb3B0aW9ucz86IElSb3V0ZXJPcHRpb25zKTogU21hcnRSb3V0ZXIge1xuICAgIGNvbnN0IG5ld0Jhc2VQYXRoID0gYCR7dGhpcy5iYXNlUGF0aH0ke3N1YlBhdGh9YDtcbiAgICByZXR1cm4gbmV3IFNtYXJ0Um91dGVyKHsgLi4udGhpcy5vcHRpb25zLCAuLi5vcHRpb25zIH0sIG5ld0Jhc2VQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdXNoIHJvdXRlIHN0YXRlIHRvIGhpc3Rvcnkgc3RhY2tcbiAgICovXG4gIHB1YmxpYyBhc3luYyBwdXNoVXJsKHVybDogc3RyaW5nID0gJy8nLCBzdGF0ZTogYW55ID0ge30pIHtcbiAgICBjb25zdCBmdWxsVXJsID0gYCR7dGhpcy5iYXNlUGF0aH0ke3VybH1gO1xuICAgIGlmIChmdWxsVXJsICE9PSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpIHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSwgd2luZG93LmRvY3VtZW50LnRpdGxlLCBmdWxsVXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlLCB3aW5kb3cuZG9jdW1lbnQudGl0bGUsIGZ1bGxVcmwpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9oYW5kbGVSb3V0ZVN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoIHJvdXRlIHdpdGggaGFuZGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHJvdXRlQXJnXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGhhbmRsZXJBcmdcbiAgICovXG4gIHB1YmxpYyBvbihyb3V0ZUFyZzogc3RyaW5nLCBoYW5kbGVyQXJnOiBUSGFuZGxlckZ1bmN0aW9uKSB7XG4gICAgY29uc3QgZnVsbFJvdXRlID0gYCR7dGhpcy5iYXNlUGF0aH0ke3JvdXRlQXJnfWA7XG4gICAgY29uc3Qgcm91dGVPYmplY3QgPSB7XG4gICAgICBtYXRjaEZ1bmN0aW9uOiBwbHVnaW5zLnBhdGhUb1JlZ0V4cC5tYXRjaChmdWxsUm91dGUpLFxuICAgICAgaGFuZGxlcjogaGFuZGxlckFyZyxcbiAgICB9O1xuICAgIHRoaXMucm91dGVzLnB1c2gocm91dGVPYmplY3QpO1xuICAgIGNvbnN0IHJlbW92ZUZ1bmN0aW9uID0gKCkgPT4ge1xuICAgICAgdGhpcy5yb3V0ZXMuc3BsaWNlKHRoaXMucm91dGVzLmluZGV4T2Yocm91dGVPYmplY3QpLCAxKTtcbiAgICB9O1xuICAgIHJldHVybiByZW1vdmVGdW5jdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSByb3V0ZXMgaGFuZGxlciB0byBjdXJyZW50IHJvdXRlXG4gICAqL1xuICBhc3luYyBfaGFuZGxlUm91dGVTdGF0ZSgpIHtcbiAgICBjb25zdCBjdXJyZW50TG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG5cbiAgICAvLyBsZXRzIGZpbmQgYWxsIHdhbnRlZCByb3V0ZXMuXG4gICAgY29uc3Qgd2FudGVkUm91dGVzID0gdGhpcy5yb3V0ZXMuZmlsdGVyKChyb3V0ZUFyZykgPT4ge1xuICAgICAgcmV0dXJuICEhcm91dGVBcmcubWF0Y2hGdW5jdGlvbihjdXJyZW50TG9jYXRpb24pO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCB3YW50ZWRSb3V0ZSBvZiB3YW50ZWRSb3V0ZXMpIHtcbiAgICAgIGNvbnN0IHJvdXRlUmVzdWx0ID0gd2FudGVkUm91dGUubWF0Y2hGdW5jdGlvbihjdXJyZW50TG9jYXRpb24pO1xuICAgICAgd2FudGVkUm91dGUuaGFuZGxlcih7XG4gICAgICAgIC4uLihyb3V0ZVJlc3VsdC52YWx1ZU9mKCkgYXMgT2JqZWN0KSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHRoaXMucXVlcnlQYXJhbXMuZ2V0QWxsQXNPYmplY3QoKSwgLy8gVE9ETyBjaGVjayB3ZXRoZXIgZW50cmllcyBpcyBzdXBwb3J0ZWQgaW4gdHlwaW5nc1xuICAgICAgfSBhcyBJUm91dGVJbmZvKTsgLy8gbm90IHdhaXRpbmcgaGVyZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95IHRoZSByb3V0ZXIgaW5zdGFuY2UsIHJlbW92aW5nIGFsbCBleHRlcm5hbCByZWZlcmVuY2VzXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpIHtcbiAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyIGZvciBwb3BzdGF0ZVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHRoaXMucG9wc3RhdGVMaXN0ZW5lcik7XG4gICAgLy8gQ2xlYXIgYWxsIHJvdXRlc1xuICAgIHRoaXMucm91dGVzID0gW107XG4gIH1cbn0iLCAiZXhwb3J0ICogZnJvbSAnLi9zbWFydHJvdXRlci5jbGFzc2VzLnNtYXJ0cm91dGVyLmpzJztcbiIsICIvLyBwdXNocm9ja3Mgc2NvcGVcbmltcG9ydCAqIGFzIHNtYXJ0ZW52IGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0ZW52JztcbmltcG9ydCAqIGFzIHNtYXJ0anNvbiBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydGpzb24nO1xuXG5leHBvcnQge1xuICBzbWFydGVudixcbiAgc21hcnRqc29uXG59OyIsICIvKipcbiAqIFB1cmUgSmF2YVNjcmlwdCBTSEEyNTYgaW1wbGVtZW50YXRpb25cbiAqIFVzZWQgYXMgZmFsbGJhY2sgd2hlbiBjcnlwdG8uc3VidGxlIGlzIG5vdCBhdmFpbGFibGUgKG5vbi1IVFRQUyBjb250ZXh0cylcbiAqL1xuXG4vKipcbiAqIFNIQTI1NiBjb25zdGFudHNcbiAqL1xuY29uc3QgSzogbnVtYmVyW10gPSBbXG4gIDB4NDI4YTJmOTgsIDB4NzEzNzQ0OTEsIDB4YjVjMGZiY2YsIDB4ZTliNWRiYTUsIDB4Mzk1NmMyNWIsIDB4NTlmMTExZjEsIDB4OTIzZjgyYTQsIDB4YWIxYzVlZDUsXG4gIDB4ZDgwN2FhOTgsIDB4MTI4MzViMDEsIDB4MjQzMTg1YmUsIDB4NTUwYzdkYzMsIDB4NzJiZTVkNzQsIDB4ODBkZWIxZmUsIDB4OWJkYzA2YTcsIDB4YzE5YmYxNzQsXG4gIDB4ZTQ5YjY5YzEsIDB4ZWZiZTQ3ODYsIDB4MGZjMTlkYzYsIDB4MjQwY2ExY2MsIDB4MmRlOTJjNmYsIDB4NGE3NDg0YWEsIDB4NWNiMGE5ZGMsIDB4NzZmOTg4ZGEsXG4gIDB4OTgzZTUxNTIsIDB4YTgzMWM2NmQsIDB4YjAwMzI3YzgsIDB4YmY1OTdmYzcsIDB4YzZlMDBiZjMsIDB4ZDVhNzkxNDcsIDB4MDZjYTYzNTEsIDB4MTQyOTI5NjcsXG4gIDB4MjdiNzBhODUsIDB4MmUxYjIxMzgsIDB4NGQyYzZkZmMsIDB4NTMzODBkMTMsIDB4NjUwYTczNTQsIDB4NzY2YTBhYmIsIDB4ODFjMmM5MmUsIDB4OTI3MjJjODUsXG4gIDB4YTJiZmU4YTEsIDB4YTgxYTY2NGIsIDB4YzI0YjhiNzAsIDB4Yzc2YzUxYTMsIDB4ZDE5MmU4MTksIDB4ZDY5OTA2MjQsIDB4ZjQwZTM1ODUsIDB4MTA2YWEwNzAsXG4gIDB4MTlhNGMxMTYsIDB4MWUzNzZjMDgsIDB4Mjc0ODc3NGMsIDB4MzRiMGJjYjUsIDB4MzkxYzBjYjMsIDB4NGVkOGFhNGEsIDB4NWI5Y2NhNGYsIDB4NjgyZTZmZjMsXG4gIDB4NzQ4ZjgyZWUsIDB4NzhhNTYzNmYsIDB4ODRjODc4MTQsIDB4OGNjNzAyMDgsIDB4OTBiZWZmZmEsIDB4YTQ1MDZjZWIsIDB4YmVmOWEzZjcsIDB4YzY3MTc4ZjJcbl07XG5cbi8qKlxuICogSW5pdGlhbCBoYXNoIHZhbHVlc1xuICovXG5jb25zdCBIOiBudW1iZXJbXSA9IFtcbiAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgMHg1MTBlNTI3ZiwgMHg5YjA1Njg4YywgMHgxZjgzZDlhYiwgMHg1YmUwY2QxOVxuXTtcblxuLyoqXG4gKiBSb3RhdGUgcmlnaHRcbiAqL1xuZnVuY3Rpb24gcm90cihuOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAobiA+Pj4gYikgfCAobiA8PCAoMzIgLSBiKSk7XG59XG5cbi8qKlxuICogU0hBMjU2IGNvbXByZXNzaW9uIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHNoYTI1NlRyYW5zZm9ybShXOiBudW1iZXJbXSwgSDogbnVtYmVyW10pOiB2b2lkIHtcbiAgbGV0IGEgPSBIWzBdO1xuICBsZXQgYiA9IEhbMV07XG4gIGxldCBjID0gSFsyXTtcbiAgbGV0IGQgPSBIWzNdO1xuICBsZXQgZSA9IEhbNF07XG4gIGxldCBmID0gSFs1XTtcbiAgbGV0IGcgPSBIWzZdO1xuICBsZXQgaCA9IEhbN107XG4gIFxuICBmb3IgKGxldCBqID0gMDsgaiA8IDY0OyBqKyspIHtcbiAgICBpZiAoaiA+PSAxNikge1xuICAgICAgY29uc3QgczAgPSByb3RyKFdbaiAtIDE1XSwgNykgXiByb3RyKFdbaiAtIDE1XSwgMTgpIF4gKFdbaiAtIDE1XSA+Pj4gMyk7XG4gICAgICBjb25zdCBzMSA9IHJvdHIoV1tqIC0gMl0sIDE3KSBeIHJvdHIoV1tqIC0gMl0sIDE5KSBeIChXW2ogLSAyXSA+Pj4gMTApO1xuICAgICAgV1tqXSA9IChXW2ogLSAxNl0gKyBzMCArIFdbaiAtIDddICsgczEpID4+PiAwO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBTMSA9IHJvdHIoZSwgNikgXiByb3RyKGUsIDExKSBeIHJvdHIoZSwgMjUpO1xuICAgIGNvbnN0IGNoID0gKGUgJiBmKSBeICgofmUpICYgZyk7XG4gICAgY29uc3QgdGVtcDEgPSAoaCArIFMxICsgY2ggKyBLW2pdICsgV1tqXSkgPj4+IDA7XG4gICAgXG4gICAgY29uc3QgUzAgPSByb3RyKGEsIDIpIF4gcm90cihhLCAxMykgXiByb3RyKGEsIDIyKTtcbiAgICBjb25zdCBtYWogPSAoYSAmIGIpIF4gKGEgJiBjKSBeIChiICYgYyk7XG4gICAgY29uc3QgdGVtcDIgPSAoUzAgKyBtYWopID4+PiAwO1xuICAgIFxuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSAoZCArIHRlbXAxKSA+Pj4gMDtcbiAgICBkID0gYztcbiAgICBjID0gYjtcbiAgICBiID0gYTtcbiAgICBhID0gKHRlbXAxICsgdGVtcDIpID4+PiAwO1xuICB9XG4gIFxuICBIWzBdID0gKEhbMF0gKyBhKSA+Pj4gMDtcbiAgSFsxXSA9IChIWzFdICsgYikgPj4+IDA7XG4gIEhbMl0gPSAoSFsyXSArIGMpID4+PiAwO1xuICBIWzNdID0gKEhbM10gKyBkKSA+Pj4gMDtcbiAgSFs0XSA9IChIWzRdICsgZSkgPj4+IDA7XG4gIEhbNV0gPSAoSFs1XSArIGYpID4+PiAwO1xuICBIWzZdID0gKEhbNl0gKyBnKSA+Pj4gMDtcbiAgSFs3XSA9IChIWzddICsgaCkgPj4+IDA7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIFNIQTI1NiBoYXNoIGZyb20gYnl0ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNoYTI1NkZhbGxiYWNrKGJ5dGVzOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgY29uc3QgSF9jb3B5ID0gWy4uLkhdO1xuICBjb25zdCBtc2dMZW4gPSBieXRlcy5sZW5ndGg7XG4gIGNvbnN0IG1zZ0JpdExlbiA9IG1zZ0xlbiAqIDg7XG4gIFxuICAvLyBQYWRkaW5nXG4gIGNvbnN0IHBhZExlbiA9IChtc2dMZW4gJSA2NCA8IDU2KSA/IDU2IC0gKG1zZ0xlbiAlIDY0KSA6IDEyMCAtIChtc2dMZW4gJSA2NCk7XG4gIGNvbnN0IHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KG1zZ0xlbiArIHBhZExlbiArIDgpO1xuICBwYWRkZWQuc2V0KGJ5dGVzKTtcbiAgcGFkZGVkW21zZ0xlbl0gPSAweDgwO1xuICBcbiAgLy8gQXBwZW5kIGxlbmd0aCAoNjQtYml0IGJpZy1lbmRpYW4pXG4gIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHBhZGRlZC5idWZmZXIpO1xuICBkYXRhVmlldy5zZXRVaW50MzIocGFkZGVkLmxlbmd0aCAtIDgsIDAsIGZhbHNlKTsgLy8gaGlnaCAzMiBiaXRzXG4gIGRhdGFWaWV3LnNldFVpbnQzMihwYWRkZWQubGVuZ3RoIC0gNCwgbXNnQml0TGVuID4+PiAwLCBmYWxzZSk7IC8vIGxvdyAzMiBiaXRzXG4gIFxuICAvLyBQcm9jZXNzIGJsb2Nrc1xuICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBwYWRkZWQubGVuZ3RoOyBvZmZzZXQgKz0gNjQpIHtcbiAgICBjb25zdCBXID0gbmV3IEFycmF5KDY0KTtcbiAgICBcbiAgICAvLyBDb3B5IGJsb2NrIGludG8gV1swLi4xNV1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIFdbaV0gPSBkYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0ICsgaSAqIDQsIGZhbHNlKTtcbiAgICB9XG4gICAgXG4gICAgc2hhMjU2VHJhbnNmb3JtKFcsIEhfY29weSk7XG4gIH1cbiAgXG4gIC8vIENvbnZlcnQgdG8gaGV4IHN0cmluZ1xuICBsZXQgaGV4ID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgaGV4ICs9IEhfY29weVtpXS50b1N0cmluZygxNikucGFkU3RhcnQoOCwgJzAnKTtcbiAgfVxuICBcbiAgcmV0dXJuIGhleDtcbn0iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3BsdWdpbnMuanMnO1xuaW1wb3J0IHsgc2hhMjU2RmFsbGJhY2sgfSBmcm9tICcuL3NoYTI1Ni5mYWxsYmFjay5qcyc7XG5cbi8qKlxuICogQ29udmVydCBBcnJheUJ1ZmZlciB0byBoZXggc3RyaW5nXG4gKi9cbmNvbnN0IGhleCA9IChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgaGV4Q29kZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3LmJ5dGVMZW5ndGg7IGkgKz0gNCkge1xuICAgIC8vIFVzaW5nIGdldFVpbnQzMiByZWR1Y2VzIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBuZWVkZWQgKHdlIHByb2Nlc3MgNCBieXRlcyBlYWNoIHRpbWUpXG4gICAgY29uc3QgdmFsdWUgPSB2aWV3LmdldFVpbnQzMihpKTtcbiAgICAvLyB0b1N0cmluZygxNikgd2lsbCBnaXZlIHRoZSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciB3aXRob3V0IHBhZGRpbmdcbiAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKDE2KTtcbiAgICAvLyBXZSB1c2UgY29uY2F0ZW5hdGlvbiBhbmQgc2xpY2UgZm9yIHBhZGRpbmdcbiAgICBjb25zdCBwYWRkaW5nID0gJzAwMDAwMDAwJztcbiAgICBjb25zdCBwYWRkZWRWYWx1ZSA9IChwYWRkaW5nICsgc3RyaW5nVmFsdWUpLnNsaWNlKC1wYWRkaW5nLmxlbmd0aCk7XG4gICAgaGV4Q29kZXMucHVzaChwYWRkZWRWYWx1ZSk7XG4gIH1cblxuICAvLyBKb2luIGFsbCB0aGUgaGV4IHN0cmluZ3MgaW50byBvbmVcbiAgcmV0dXJuIGhleENvZGVzLmpvaW4oXCJcIik7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGNyeXB0by5zdWJ0bGUgaXMgYXZhaWxhYmxlXG4gKi9cbmNvbnN0IGlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnN1YnRsZSAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDb21wdXRlcyBzaGEyNTYgSGFzaCBmcm9tIFN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc2hhMjU2RnJvbVN0cmluZyA9IGFzeW5jIChzdHJpbmdBcmc6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIC8vIEdldCB0aGUgc3RyaW5nIGFzIGFycmF5YnVmZmVyLlxuICBjb25zdCBidWZmZXIgPSAobmV3IFRleHRFbmNvZGVyKCkpLmVuY29kZShzdHJpbmdBcmcpO1xuICBcbiAgaWYgKGlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlKCkpIHtcbiAgICBjb25zdCBoYXNoID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXCJTSEEtMjU2XCIsIGJ1ZmZlcik7XG4gICAgY29uc3QgcmVzdWx0ID0gaGV4KGhhc2gpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIGZhbGxiYWNrIGZvciBub24tSFRUUFMgZW52aXJvbm1lbnRzXG4gICAgcmV0dXJuIHNoYTI1NkZhbGxiYWNrKGJ1ZmZlcik7XG4gIH1cbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgc2hhMjU2IEhhc2ggZnJvbSBTdHJpbmcgc3luY2hyb25vdXNseVxuICogTm90ZTogSW4gYnJvd3NlciBlbnZpcm9ubWVudCwgdGhpcyBpcyBzdGlsbCBhc3luYyBpbnRlcm5hbGx5IGJ1dCB3ZSBtYWludGFpbiB0aGUgQVBJXG4gKi9cbmV4cG9ydCBjb25zdCBzaGEyNTZGcm9tU3RyaW5nU3luYyA9IChzdHJpbmdBcmc6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnNvbGUud2Fybignc2hhMjU2RnJvbVN0cmluZ1N5bmMgaXMgbm90IHRydWx5IHN5bmNocm9ub3VzIGluIGJyb3dzZXIgZW52aXJvbm1lbnQnKTtcbiAgdGhyb3cgbmV3IEVycm9yKCdzaGEyNTZGcm9tU3RyaW5nU3luYyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQuIFVzZSBzaGEyNTZGcm9tU3RyaW5nIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIENvbXB1dGVzIHNoYTI1NiBIYXNoIGZyb20gQXJyYXlCdWZmZXJcbiAqL1xuZXhwb3J0IGNvbnN0IHNoYTI1NkZyb21CdWZmZXIgPSBhc3luYyAoYnVmZmVyQXJnOiBBcnJheUJ1ZmZlciB8IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZiAoaXNDcnlwdG9TdWJ0bGVBdmFpbGFibGUoKSkge1xuICAgIC8vIEVuc3VyZSB3ZSBwYXNzIGFuIEFycmF5QnVmZmVyIHRvIHNhdGlzZnkgQnVmZmVyU291cmNlIHR5cGluZ1xuICAgIGxldCBpbnB1dEJ1ZmZlcjogQXJyYXlCdWZmZXI7XG4gICAgaWYgKGJ1ZmZlckFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgIGNvbnN0IHZpZXcgPSBidWZmZXJBcmc7XG4gICAgICBpbnB1dEJ1ZmZlciA9IHZpZXcuYnVmZmVyLnNsaWNlKFxuICAgICAgICB2aWV3LmJ5dGVPZmZzZXQsXG4gICAgICAgIHZpZXcuYnl0ZU9mZnNldCArIHZpZXcuYnl0ZUxlbmd0aFxuICAgICAgKSBhcyBBcnJheUJ1ZmZlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRCdWZmZXIgPSBidWZmZXJBcmc7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzaCA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLCBpbnB1dEJ1ZmZlcik7XG4gICAgY29uc3QgcmVzdWx0ID0gaGV4KGhhc2gpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIGZhbGxiYWNrIGZvciBub24tSFRUUFMgZW52aXJvbm1lbnRzXG4gICAgY29uc3QgdWludDhBcnJheSA9IGJ1ZmZlckFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyBidWZmZXJBcmcgOiBuZXcgVWludDhBcnJheShidWZmZXJBcmcpO1xuICAgIHJldHVybiBzaGEyNTZGYWxsYmFjayh1aW50OEFycmF5KTtcbiAgfVxufTtcblxuLyoqXG4gKiBjb21wdXRlcyBzaGEyNjUgSGFzaCBmcm9tIE9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgc2hhMjY1RnJvbU9iamVjdCA9IGFzeW5jIChvYmplY3RBcmc6IGFueSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHN0cmluZ2lmaWVkT2JqZWN0ID0gcGx1Z2lucy5zbWFydGpzb24uc3RyaW5naWZ5KG9iamVjdEFyZyk7XG4gIGNvbnN0IGhhc2hSZXN1bHQgPSBhd2FpdCBzaGEyNTZGcm9tU3RyaW5nKHN0cmluZ2lmaWVkT2JqZWN0KTtcbiAgcmV0dXJuIGhhc2hSZXN1bHQ7XG59O1xuXG4vKipcbiAqIGNyZWF0ZXMgc2hhMjU2IEhhc2ggZnJvbSBTdHJlYW1cbiAqIE5vdGU6IE5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudFxuICovXG5leHBvcnQgY29uc3Qgc2hhMjU2RnJvbVN0cmVhbSA9IChpbnB1dDogYW55KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKCdzaGEyNTZGcm9tU3RyZWFtIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudCcpO1xufTtcblxuLyoqXG4gKiBjcmVhdGVzIHNoYTI1NiBIYXNoIGZyb20gRmlsZVxuICogTm90ZTogTm90IHN1cHBvcnRlZCBpbiBicm93c2VyIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBjb25zdCBzaGEyNTZGcm9tRmlsZSA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKCdzaGEyNTZGcm9tRmlsZSBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQnKTtcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgTUQ1IEhhc2ggZnJvbSBTdHJpbmdcbiAqIE5vdGU6IE1ENSBpcyBub3QgbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IFdlYiBDcnlwdG8gQVBJXG4gKi9cbmV4cG9ydCBjb25zdCBtZDVGcm9tU3RyaW5nID0gYXN5bmMgKHN0cmluZ1RvSGFzaDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKCdtZDVGcm9tU3RyaW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudC4gV2ViIENyeXB0byBBUEkgZG9lcyBub3Qgc3VwcG9ydCBNRDUuJyk7XG59O1xuIiwgImltcG9ydCAqIGFzIHNtYXJ0aGFzaFdlYiBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydGhhc2gvd2ViJztcbmltcG9ydCAqIGFzIHNtYXJ0anNvbiBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydGpzb24nO1xuaW1wb3J0ICogYXMgc21hcnRwcm9taXNlIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSc7XG5pbXBvcnQgKiBhcyBzbWFydHJ4IGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cngnO1xuaW1wb3J0ICogYXMgd2Vic3RvcmUgZnJvbSAnQHB1c2gucm9ja3Mvd2Vic3RvcmUnO1xuXG5leHBvcnQgeyBzbWFydGhhc2hXZWIsIHNtYXJ0anNvbiwgc21hcnRwcm9taXNlLCBzbWFydHJ4LCB3ZWJzdG9yZSB9O1xuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9zbWFydHN0YXRlLnBsdWdpbnMuanMnO1xuaW1wb3J0IHsgU3RhdGVQYXJ0IH0gZnJvbSAnLi9zbWFydHN0YXRlLmNsYXNzZXMuc3RhdGVwYXJ0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQWN0aW9uRGVmPFRTdGF0ZVR5cGUsIFRBY3Rpb25QYXlsb2FkVHlwZT4ge1xuICAoc3RhdGVBcmc6IFN0YXRlUGFydDxhbnksIFRTdGF0ZVR5cGU+LCBhY3Rpb25QYXlsb2FkOiBUQWN0aW9uUGF5bG9hZFR5cGUpOiBQcm9taXNlPFRTdGF0ZVR5cGU+O1xufVxuXG4vKipcbiAqIGFuIGFjdGlvbm1vZGlmaWVyIGZvciB0aGUgc3RhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YXRlQWN0aW9uPFRTdGF0ZVR5cGUsIFRBY3Rpb25QYXlsb2FkVHlwZT4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3RhdGVQYXJ0UmVmOiBTdGF0ZVBhcnQ8YW55LCBhbnk+LFxuICAgIHB1YmxpYyBhY3Rpb25EZWY6IElBY3Rpb25EZWY8VFN0YXRlVHlwZSwgVEFjdGlvblBheWxvYWRUeXBlPlxuICApIHt9XG5cbiAgcHVibGljIHRyaWdnZXIocGF5bG9hZDogVEFjdGlvblBheWxvYWRUeXBlKTogUHJvbWlzZTxUU3RhdGVUeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVQYXJ0UmVmLmRpc3BhdGNoQWN0aW9uKHRoaXMsIHBheWxvYWQpO1xuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0c3RhdGUucGx1Z2lucy5qcyc7XG5pbXBvcnQgeyBTdGF0ZUFjdGlvbiwgdHlwZSBJQWN0aW9uRGVmIH0gZnJvbSAnLi9zbWFydHN0YXRlLmNsYXNzZXMuc3RhdGVhY3Rpb24uanMnO1xuXG5leHBvcnQgY2xhc3MgU3RhdGVQYXJ0PFRTdGF0ZVBhcnROYW1lLCBUU3RhdGVQYXlsb2FkPiB7XG4gIHB1YmxpYyBuYW1lOiBUU3RhdGVQYXJ0TmFtZTtcbiAgcHVibGljIHN0YXRlID0gbmV3IHBsdWdpbnMuc21hcnRyeC5yeGpzLlN1YmplY3Q8VFN0YXRlUGF5bG9hZD4oKTtcbiAgcHVibGljIHN0YXRlU3RvcmU6IFRTdGF0ZVBheWxvYWQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgY3VtdWxhdGl2ZURlZmVycmVkID0gcGx1Z2lucy5zbWFydHByb21pc2UuY3VtdWxhdGl2ZURlZmVyKCk7XG5cbiAgcHJpdmF0ZSB3ZWJTdG9yZU9wdGlvbnM6IHBsdWdpbnMud2Vic3RvcmUuSVdlYlN0b3JlT3B0aW9ucztcbiAgcHJpdmF0ZSB3ZWJTdG9yZTogcGx1Z2lucy53ZWJzdG9yZS5XZWJTdG9yZTxUU3RhdGVQYXlsb2FkPiB8IG51bGwgPSBudWxsOyAvLyBBZGQgV2ViU3RvcmUgaW5zdGFuY2VcblxuICBjb25zdHJ1Y3RvcihuYW1lQXJnOiBUU3RhdGVQYXJ0TmFtZSwgd2ViU3RvcmVPcHRpb25zQXJnPzogcGx1Z2lucy53ZWJzdG9yZS5JV2ViU3RvcmVPcHRpb25zKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZUFyZztcblxuICAgIC8vIEluaXRpYWxpemUgV2ViU3RvcmUgaWYgd2ViU3RvcmVPcHRpb25zIGFyZSBwcm92aWRlZFxuICAgIGlmICh3ZWJTdG9yZU9wdGlvbnNBcmcpIHtcbiAgICAgIHRoaXMud2ViU3RvcmVPcHRpb25zID0gd2ViU3RvcmVPcHRpb25zQXJnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBpbml0aWFsaXplcyB0aGUgd2Vic3RvcmVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbml0KCkge1xuICAgIGlmICh0aGlzLndlYlN0b3JlT3B0aW9ucykge1xuICAgICAgdGhpcy53ZWJTdG9yZSA9IG5ldyBwbHVnaW5zLndlYnN0b3JlLldlYlN0b3JlPFRTdGF0ZVBheWxvYWQ+KHRoaXMud2ViU3RvcmVPcHRpb25zKTtcbiAgICAgIGF3YWl0IHRoaXMud2ViU3RvcmUuaW5pdCgpO1xuICAgICAgY29uc3Qgc3RvcmVkU3RhdGUgPSBhd2FpdCB0aGlzLndlYlN0b3JlLmdldChTdHJpbmcodGhpcy5uYW1lKSk7XG4gICAgICBpZiAoc3RvcmVkU3RhdGUgJiYgdGhpcy52YWxpZGF0ZVN0YXRlKHN0b3JlZFN0YXRlKSkge1xuICAgICAgICB0aGlzLnN0YXRlU3RvcmUgPSBzdG9yZWRTdGF0ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5ub3RpZnlDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0cyB0aGUgc3RhdGUgZnJvbSB0aGUgc3RhdGUgc3RvcmVcbiAgICovXG4gIHB1YmxpYyBnZXRTdGF0ZSgpOiBUU3RhdGVQYXlsb2FkIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZVN0b3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldHMgdGhlIHN0YXRlU3RvcmUgdG8gdGhlIG5ldyBzdGF0ZVxuICAgKiBAcGFyYW0gbmV3U3RhdGVBcmdcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRTdGF0ZShuZXdTdGF0ZUFyZzogVFN0YXRlUGF5bG9hZCkge1xuICAgIC8vIFZhbGlkYXRlIHN0YXRlIHN0cnVjdHVyZVxuICAgIGlmICghdGhpcy52YWxpZGF0ZVN0YXRlKG5ld1N0YXRlQXJnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlIHN0cnVjdHVyZSBmb3Igc3RhdGUgcGFydCAnJHt0aGlzLm5hbWV9J2ApO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLnN0YXRlU3RvcmUgPSBuZXdTdGF0ZUFyZztcbiAgICBhd2FpdCB0aGlzLm5vdGlmeUNoYW5nZSgpO1xuICAgIFxuICAgIC8vIFNhdmUgc3RhdGUgdG8gV2ViU3RvcmUgaWYgaW5pdGlhbGl6ZWRcbiAgICBpZiAodGhpcy53ZWJTdG9yZSkge1xuICAgICAgYXdhaXQgdGhpcy53ZWJTdG9yZS5zZXQoU3RyaW5nKHRoaXMubmFtZSksIG5ld1N0YXRlQXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdG9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgc3RhdGUgc3RydWN0dXJlIC0gY2FuIGJlIG92ZXJyaWRkZW4gZm9yIGN1c3RvbSB2YWxpZGF0aW9uXG4gICAqIEBwYXJhbSBzdGF0ZUFyZ1xuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlU3RhdGUoc3RhdGVBcmc6IGFueSk6IHN0YXRlQXJnIGlzIFRTdGF0ZVBheWxvYWQge1xuICAgIC8vIEJhc2ljIHZhbGlkYXRpb24gLSBlbnN1cmUgc3RhdGUgaXMgbm90IG51bGwvdW5kZWZpbmVkXG4gICAgLy8gU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgZm9yIG1vcmUgc3BlY2lmaWMgdmFsaWRhdGlvblxuICAgIHJldHVybiBzdGF0ZUFyZyAhPT0gbnVsbCAmJiBzdGF0ZUFyZyAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIG5vdGlmaWVzIG9mIGEgY2hhbmdlIG9uIHRoZSBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIG5vdGlmeUNoYW5nZSgpIHtcbiAgICBpZiAoIXRoaXMuc3RhdGVTdG9yZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdGVTdGF0ZUhhc2ggPSBhc3luYyAoc3RhdGVBcmc6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHBsdWdpbnMuc21hcnRoYXNoV2ViLnNoYTI1NkZyb21TdHJpbmcocGx1Z2lucy5zbWFydGpzb24uc3RhYmxlT25lV2F5U3RyaW5naWZ5KHN0YXRlQXJnKSk7XG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50SGFzaCA9IGF3YWl0IGNyZWF0ZVN0YXRlSGFzaCh0aGlzLnN0YXRlU3RvcmUpO1xuICAgIGlmIChcbiAgICAgIHRoaXMubGFzdFN0YXRlTm90aWZpY2F0aW9uUGF5bG9hZEhhc2ggJiZcbiAgICAgIGN1cnJlbnRIYXNoID09PSB0aGlzLmxhc3RTdGF0ZU5vdGlmaWNhdGlvblBheWxvYWRIYXNoXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFzdFN0YXRlTm90aWZpY2F0aW9uUGF5bG9hZEhhc2ggPSBjdXJyZW50SGFzaDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5uZXh0KHRoaXMuc3RhdGVTdG9yZSk7XG4gIH1cbiAgcHJpdmF0ZSBsYXN0U3RhdGVOb3RpZmljYXRpb25QYXlsb2FkSGFzaDogYW55O1xuXG4gIC8qKlxuICAgKiBjcmVhdGVzIGEgY3VtdWxhdGl2ZSBub3RpZmljYXRpb24gYnkgYWRkaW5nIGEgY2hhbmdlIG5vdGlmaWNhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBjYWxsIHN0YWNrO1xuICAgKi9cbiAgcHVibGljIG5vdGlmeUNoYW5nZUN1bXVsYXRpdmUoKSB7XG4gICAgLy8gVE9ETzogY2hlY2sgdmlhYmlsaXR5XG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZVN0b3JlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubm90aWZ5Q2hhbmdlKCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0cyBhIHN0YXRlIG9yIGEgc3Vic3RhdGVcbiAgICovXG4gIHB1YmxpYyBzZWxlY3Q8VCA9IFRTdGF0ZVBheWxvYWQ+KFxuICAgIHNlbGVjdG9yRm4/OiAoc3RhdGU6IFRTdGF0ZVBheWxvYWQpID0+IFRcbiAgKTogcGx1Z2lucy5zbWFydHJ4LnJ4anMuT2JzZXJ2YWJsZTxUPiB7XG4gICAgaWYgKCFzZWxlY3RvckZuKSB7XG4gICAgICBzZWxlY3RvckZuID0gKHN0YXRlOiBUU3RhdGVQYXlsb2FkKSA9PiA8VD4oPGFueT5zdGF0ZSk7XG4gICAgfVxuICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHBsdWdpbnMuc21hcnRyeC5yeGpzLm9wcy5zdGFydFdpdGgodGhpcy5nZXRTdGF0ZSgpKSxcbiAgICAgIHBsdWdpbnMuc21hcnRyeC5yeGpzLm9wcy5maWx0ZXIoKHN0YXRlQXJnKTogc3RhdGVBcmcgaXMgVFN0YXRlUGF5bG9hZCA9PiBzdGF0ZUFyZyAhPT0gdW5kZWZpbmVkKSxcbiAgICAgIHBsdWdpbnMuc21hcnRyeC5yeGpzLm9wcy5tYXAoKHN0YXRlQXJnKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHNlbGVjdG9yRm4oc3RhdGVBcmcpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gTm90aGluZyBoZXJlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gbWFwcGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZXMgYW4gYWN0aW9uIGNhcGFibGUgb2YgbW9kaWZ5aW5nIHRoZSBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZUFjdGlvbjxUQWN0aW9uUGF5bG9hZD4oXG4gICAgYWN0aW9uRGVmOiBJQWN0aW9uRGVmPFRTdGF0ZVBheWxvYWQsIFRBY3Rpb25QYXlsb2FkPlxuICApOiBTdGF0ZUFjdGlvbjxUU3RhdGVQYXlsb2FkLCBUQWN0aW9uUGF5bG9hZD4ge1xuICAgIHJldHVybiBuZXcgU3RhdGVBY3Rpb24odGhpcywgYWN0aW9uRGVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkaXNwYXRjaGVzIGFuIGFjdGlvbiBvbiB0aGUgc3RhdGVwYXJ0IGxldmVsXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlzcGF0Y2hBY3Rpb248VD4oc3RhdGVBY3Rpb246IFN0YXRlQWN0aW9uPFRTdGF0ZVBheWxvYWQsIFQ+LCBhY3Rpb25QYXlsb2FkOiBUKTogUHJvbWlzZTxUU3RhdGVQYXlsb2FkPiB7XG4gICAgYXdhaXQgdGhpcy5jdW11bGF0aXZlRGVmZXJyZWQucHJvbWlzZTtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IGF3YWl0IHN0YXRlQWN0aW9uLmFjdGlvbkRlZih0aGlzLCBhY3Rpb25QYXlsb2FkKTtcbiAgICBhd2FpdCB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHdhaXRzIHVudGlsIGEgY2VydGFpbiBwYXJ0IG9mIHRoZSBzdGF0ZSBiZWNvbWVzIGF2YWlsYWJsZVxuICAgKiBAcGFyYW0gc2VsZWN0b3JGblxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdhaXRVbnRpbFByZXNlbnQ8VCA9IFRTdGF0ZVBheWxvYWQ+KFxuICAgIHNlbGVjdG9yRm4/OiAoc3RhdGU6IFRTdGF0ZVBheWxvYWQpID0+IFRcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgZG9uZSA9IHBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyPFQ+KCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRPYnNlcnZhYmxlID0gdGhpcy5zZWxlY3Qoc2VsZWN0b3JGbik7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gc2VsZWN0ZWRPYnNlcnZhYmxlLnN1YnNjcmliZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBkb25lLnJlc29sdmUodmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRvbmUucHJvbWlzZTtcbiAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIGlzIGV4ZWN1dGVkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3RhdGVTZXR1cChcbiAgICBmdW5jQXJnOiAoc3RhdGVQYXJ0QXJnPzogU3RhdGVQYXJ0PGFueSwgVFN0YXRlUGF5bG9hZD4pID0+IFByb21pc2U8VFN0YXRlUGF5bG9hZD5cbiAgKSB7XG4gICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IGZ1bmNBcmcodGhpcyk7XG4gICAgdGhpcy5jdW11bGF0aXZlRGVmZXJyZWQuYWRkUHJvbWlzZShyZXN1bHRQcm9taXNlKTtcbiAgICB0aGlzLnNldFN0YXRlKGF3YWl0IHJlc3VsdFByb21pc2UpO1xuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0c3RhdGUucGx1Z2lucy5qcyc7XG5pbXBvcnQgeyBTdGF0ZVBhcnQgfSBmcm9tICcuL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZXBhcnQuanMnO1xuXG5leHBvcnQgdHlwZSBUSW5pdE1vZGUgPSAnc29mdCcgfCAnbWFuZGF0b3J5JyB8ICdmb3JjZScgfCAncGVyc2lzdGVudCc7XG5cbi8qKlxuICogU21hcnRzdGF0ZSB0YWtlcyBjYXJlIG9mIHByb3ZpZGluZyBzdGF0ZVxuICovXG5leHBvcnQgY2xhc3MgU21hcnRzdGF0ZTxTdGF0ZVBhcnROYW1lVHlwZSBleHRlbmRzIHN0cmluZz4ge1xuICBwdWJsaWMgc3RhdGVQYXJ0TWFwOiB7IFtrZXkgaW4gU3RhdGVQYXJ0TmFtZVR5cGVdPzogU3RhdGVQYXJ0PFN0YXRlUGFydE5hbWVUeXBlLCBhbnk+IH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEFsbG93cyBnZXR0aW5nIGFuZCBpbml0aWFsaXppbmcgYSBuZXcgc3RhdGVwYXJ0XG4gICAqIGluaXRNb2RlID09PSAnc29mdCcgKGRlZmF1bHQpIC0gcmV0dXJucyBleGlzdGluZyBzdGF0ZXBhcnQgaWYgZXhpc3RzLCBjcmVhdGVzIG5ldyBpZiBub3RcbiAgICogaW5pdE1vZGUgPT09ICdtYW5kYXRvcnknIC0gcmVxdWlyZXMgc3RhdGVwYXJ0IHRvIG5vdCBleGlzdCwgZmFpbHMgaWYgaXQgZG9lc1xuICAgKiBpbml0TW9kZSA9PT0gJ2ZvcmNlJyAtIGFsd2F5cyBjcmVhdGVzIG5ldyBzdGF0ZXBhcnQsIG92ZXJ3cml0aW5nIGFueSBleGlzdGluZ1xuICAgKiBpbml0TW9kZSA9PT0gJ3BlcnNpc3RlbnQnIC0gbGlrZSAnc29mdCcgYnV0IHdpdGggd2Vic3RvcmUgcGVyc2lzdGVuY2VcbiAgICogQHBhcmFtIHN0YXRlUGFydE5hbWVBcmdcbiAgICogQHBhcmFtIGluaXRpYWxBcmdcbiAgICogQHBhcmFtIGluaXRNb2RlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U3RhdGVQYXJ0PFBheWxvYWRUeXBlPihcbiAgICBzdGF0ZVBhcnROYW1lQXJnOiBTdGF0ZVBhcnROYW1lVHlwZSxcbiAgICBpbml0aWFsQXJnPzogUGF5bG9hZFR5cGUsXG4gICAgaW5pdE1vZGU6IFRJbml0TW9kZSA9ICdzb2Z0J1xuICApOiBQcm9taXNlPFN0YXRlUGFydDxTdGF0ZVBhcnROYW1lVHlwZSwgUGF5bG9hZFR5cGU+PiB7XG4gICAgY29uc3QgZXhpc3RpbmdTdGF0ZVBhcnQgPSB0aGlzLnN0YXRlUGFydE1hcFtzdGF0ZVBhcnROYW1lQXJnXTtcbiAgICBcbiAgICBpZiAoZXhpc3RpbmdTdGF0ZVBhcnQpIHtcbiAgICAgIHN3aXRjaCAoaW5pdE1vZGUpIHtcbiAgICAgICAgY2FzZSAnbWFuZGF0b3J5JzpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgU3RhdGUgcGFydCAnJHtzdGF0ZVBhcnROYW1lQXJnfScgYWxyZWFkeSBleGlzdHMsIGJ1dCBpbml0TW9kZSBpcyAnbWFuZGF0b3J5J2BcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlICdmb3JjZSc6XG4gICAgICAgICAgLy8gRm9yY2UgbW9kZTogY3JlYXRlIG5ldyBzdGF0ZSBwYXJ0XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU3RhdGVQYXJ0PFBheWxvYWRUeXBlPihzdGF0ZVBhcnROYW1lQXJnLCBpbml0aWFsQXJnLCBpbml0TW9kZSk7XG4gICAgICAgIGNhc2UgJ3NvZnQnOlxuICAgICAgICBjYXNlICdwZXJzaXN0ZW50JzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBSZXR1cm4gZXhpc3Rpbmcgc3RhdGUgcGFydFxuICAgICAgICAgIHJldHVybiBleGlzdGluZ1N0YXRlUGFydCBhcyBTdGF0ZVBhcnQ8U3RhdGVQYXJ0TmFtZVR5cGUsIFBheWxvYWRUeXBlPjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RhdGUgcGFydCBkb2Vzbid0IGV4aXN0XG4gICAgICBpZiAoIWluaXRpYWxBcmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBTdGF0ZSBwYXJ0ICcke3N0YXRlUGFydE5hbWVBcmd9JyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gaW5pdGlhbCBzdGF0ZSBwcm92aWRlZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVN0YXRlUGFydDxQYXlsb2FkVHlwZT4oc3RhdGVQYXJ0TmFtZUFyZywgaW5pdGlhbEFyZywgaW5pdE1vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc3RhdGVwYXJ0XG4gICAqIEBwYXJhbSBzdGF0ZVBhcnROYW1lXG4gICAqIEBwYXJhbSBpbml0aWFsUGF5bG9hZEFyZ1xuICAgKiBAcGFyYW0gaW5pdE1vZGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlU3RhdGVQYXJ0PFBheWxvYWRUeXBlPihcbiAgICBzdGF0ZVBhcnROYW1lOiBTdGF0ZVBhcnROYW1lVHlwZSxcbiAgICBpbml0aWFsUGF5bG9hZEFyZzogUGF5bG9hZFR5cGUsXG4gICAgaW5pdE1vZGU6IFRJbml0TW9kZSA9ICdzb2Z0J1xuICApOiBQcm9taXNlPFN0YXRlUGFydDxTdGF0ZVBhcnROYW1lVHlwZSwgUGF5bG9hZFR5cGU+PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSBuZXcgU3RhdGVQYXJ0PFN0YXRlUGFydE5hbWVUeXBlLCBQYXlsb2FkVHlwZT4oXG4gICAgICBzdGF0ZVBhcnROYW1lLFxuICAgICAgaW5pdE1vZGUgPT09ICdwZXJzaXN0ZW50J1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIGRiTmFtZTogJ3NtYXJ0c3RhdGUnLFxuICAgICAgICAgICAgc3RvcmVOYW1lOiBzdGF0ZVBhcnROYW1lLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsXG4gICAgKTtcbiAgICBhd2FpdCBuZXdTdGF0ZS5pbml0KCk7XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gbmV3U3RhdGUuZ2V0U3RhdGUoKTtcbiAgICBhd2FpdCBuZXdTdGF0ZS5zZXRTdGF0ZSh7XG4gICAgICAuLi5jdXJyZW50U3RhdGUsXG4gICAgICAuLi5pbml0aWFsUGF5bG9hZEFyZyxcbiAgICB9KTtcbiAgICB0aGlzLnN0YXRlUGFydE1hcFtzdGF0ZVBhcnROYW1lXSA9IG5ld1N0YXRlO1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxufSIsICJleHBvcnQgKiBmcm9tICcuL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zbWFydHN0YXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlcGFydC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZWFjdGlvbi5qcyc7XG4iLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzIxaGNuUjFjbXd1Y0d4MVoybHVjeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM1J6TDNOdFlYSjBkWEpzTG5Cc2RXZHBibk11ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWlKOSIsICIvLyBJbXBvcnQgbmVjZXNzYXJ5IHBsdWdpbnMgKGlmIGFueSBhcmUgdXNlZCBpbiB0aGUgbW9kdWxlKVxuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3NtYXJ0dXJsLnBsdWdpbnMuanMnO1xuXG4vLyBJbnRlcmZhY2UgcmVwcmVzZW50aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgYSBVUkwgb2JqZWN0XG5leHBvcnQgaW50ZXJmYWNlIElVcmxPYmplY3Qge1xuICBocmVmOiBzdHJpbmc7XG4gIG9yaWdpbjogc3RyaW5nO1xuICBwcm90b2NvbDogc3RyaW5nO1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICBob3N0OiBzdHJpbmc7XG4gIGhvc3RuYW1lOiBzdHJpbmc7XG4gIHBvcnQ6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBwYXRobmFtZTogc3RyaW5nO1xuICBzZWFyY2g6IHN0cmluZztcbiAgc2VhcmNoUGFyYW1zOiBJU2VhcmNoUGFyYW1zO1xuICBoYXNoOiBzdHJpbmc7XG59XG5cbi8vIEludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIHNlYXJjaCBwYXJhbWV0ZXJzIGFzIGEga2V5LXZhbHVlIHBhaXIgb2JqZWN0XG5leHBvcnQgaW50ZXJmYWNlIElTZWFyY2hQYXJhbXMge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbi8vIE1haW4gU21hcnR1cmwgY2xhc3MgaW1wbGVtZW50aW5nIHRoZSBJVXJsT2JqZWN0IGludGVyZmFjZVxuZXhwb3J0IGNsYXNzIFNtYXJ0dXJsIGltcGxlbWVudHMgSVVybE9iamVjdCB7XG4gIC8vIFN0YXRpYyBtZXRob2QgdG8gY3JlYXRlIGEgU21hcnR1cmwgaW5zdGFuY2UgZnJvbSBhIFVSTCBzdHJpbmdcbiAgcHVibGljIHN0YXRpYyBjcmVhdGVGcm9tVXJsKFxuICAgIHVybEFyZzogc3RyaW5nLFxuICAgIG9wdGlvbnNBcmc/OiB7XG4gICAgICBzZWFyY2hQYXJhbXM/OiBJU2VhcmNoUGFyYW1zO1xuICAgIH1cbiAgKTogU21hcnR1cmwge1xuICAgIC8vIFBhcnNlIHRoZSBVUkwgc3RyaW5nIHVzaW5nIHRoZSBidWlsdC1pbiBVUkwgY2xhc3NcbiAgICBjb25zdCBwYXJzZWRVcmxJbnN0YW5jZSA9IG5ldyBVUkwodXJsQXJnKTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXM6IElTZWFyY2hQYXJhbXMgPSB7fTtcblxuICAgIC8vIEFycmF5IHRvIGhvbGQga2V5LXZhbHVlIHBhaXJzIG9mIHNlYXJjaCBwYXJhbWV0ZXJzXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1QYWlyczoge1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nO1xuICAgIH1bXSA9IFtdO1xuXG4gICAgLy8gSWYgdGhlIFVSTCBoYXMgc2VhcmNoIHBhcmFtZXRlcnMsIHBhcnNlIHRoZW0gaW50byBrZXktdmFsdWUgcGFpcnNcbiAgICBpZiAocGFyc2VkVXJsSW5zdGFuY2Uuc2VhcmNoKSB7XG4gICAgICBwYXJzZWRVcmxJbnN0YW5jZS5zZWFyY2hcbiAgICAgICAgLnJlcGxhY2UoJz8nLCAnJykgLy8gUmVtb3ZlIHRoZSAnPycgYXQgdGhlIGJlZ2lubmluZ1xuICAgICAgICAuc3BsaXQoJyYnKSAvLyBTcGxpdCB0aGUgcXVlcnkgc3RyaW5nIGludG8gaW5kaXZpZHVhbCBwYXJhbWV0ZXJzXG4gICAgICAgIC5tYXAoKHNlYXJjaFBhcmFtUGFpcikgPT4ge1xuICAgICAgICAgIC8vIFNwbGl0IGVhY2ggcGFyYW1ldGVyIGludG8ga2V5IGFuZCB2YWx1ZSBhbmQgYWRkIHRvIHRoZSBhcnJheVxuICAgICAgICAgIHNlYXJjaFBhcmFtUGFpcnMucHVzaCh7XG4gICAgICAgICAgICBrZXk6IHNlYXJjaFBhcmFtUGFpci5zcGxpdCgnPScpWzBdLFxuICAgICAgICAgICAgdmFsdWU6IHNlYXJjaFBhcmFtUGFpci5zcGxpdCgnPScpWzFdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBhcnJheSBvZiBrZXktdmFsdWUgcGFpcnMgaW50byBhbiBvYmplY3RcbiAgICBmb3IgKGNvbnN0IHNlYXJjaFBhcmFtUGFpciBvZiBzZWFyY2hQYXJhbVBhaXJzKSB7XG4gICAgICBzZWFyY2hQYXJhbXNbc2VhcmNoUGFyYW1QYWlyLmtleV0gPSBzZWFyY2hQYXJhbVBhaXIudmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgYW55IGFkZGl0aW9uYWwgc2VhcmNoIHBhcmFtZXRlcnMgcHJvdmlkZWQgaW4gb3B0aW9uc0FyZ1xuICAgIGlmIChvcHRpb25zQXJnPy5zZWFyY2hQYXJhbXMpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9wdGlvbnNBcmcuc2VhcmNoUGFyYW1zKSkge1xuICAgICAgICBzZWFyY2hQYXJhbXNba2V5XSA9IG9wdGlvbnNBcmcuc2VhcmNoUGFyYW1zW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVjb25zdHJ1Y3QgdGhlIHBhdGggd2l0aCB1cGRhdGVkIHNlYXJjaCBwYXJhbWV0ZXJzXG4gICAgbGV0IHBhdGggPSBwYXJzZWRVcmxJbnN0YW5jZS5wYXRobmFtZSB8fCAnJztcbiAgICBpZiAoT2JqZWN0LmtleXMoc2VhcmNoUGFyYW1zKS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXRoICs9ICc/JztcbiAgICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpKSB7XG4gICAgICAgIGlmIChmaXJzdCkge1xuICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF0aCArPSAnJic7XG4gICAgICAgIH1cbiAgICAgICAgcGF0aCArPSBgJHtrZXl9PSR7c2VhcmNoUGFyYW1zW2tleV19YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYW4gSVVybE9iamVjdCBjb250YWluaW5nIGFsbCBwYXJ0cyBvZiB0aGUgVVJMXG4gICAgY29uc3QgcGFyc2VkVXJsOiBJVXJsT2JqZWN0ID0ge1xuICAgICAgLi4ucGFyc2VkVXJsSW5zdGFuY2UsIC8vIFNwcmVhZCBvcGVyYXRvciB0byBpbmNsdWRlIGFsbCBwcm9wZXJ0aWVzIGZyb20gcGFyc2VkVXJsSW5zdGFuY2VcbiAgICAgIGhyZWY6IHBhcnNlZFVybEluc3RhbmNlLmhyZWYsXG4gICAgICBvcmlnaW46IHBhcnNlZFVybEluc3RhbmNlLm9yaWdpbixcbiAgICAgIHByb3RvY29sOiBwYXJzZWRVcmxJbnN0YW5jZS5wcm90b2NvbCxcbiAgICAgIHVzZXJuYW1lOiBwYXJzZWRVcmxJbnN0YW5jZS51c2VybmFtZSxcbiAgICAgIHBhc3N3b3JkOiBwYXJzZWRVcmxJbnN0YW5jZS5wYXNzd29yZCxcbiAgICAgIGhvc3Q6IHBhcnNlZFVybEluc3RhbmNlLmhvc3QsXG4gICAgICBob3N0bmFtZTogcGFyc2VkVXJsSW5zdGFuY2UuaG9zdG5hbWUsXG4gICAgICBwb3J0OiBwYXJzZWRVcmxJbnN0YW5jZS5wb3J0LFxuICAgICAgcGF0aCwgLy8gVXBkYXRlZCBwYXRoIHdpdGggbmV3IHNlYXJjaCBwYXJhbWV0ZXJzXG4gICAgICBwYXRobmFtZTogcGFyc2VkVXJsSW5zdGFuY2UucGF0aG5hbWUsXG4gICAgICBzZWFyY2g6IHBhcnNlZFVybEluc3RhbmNlLnNlYXJjaCxcbiAgICAgIHNlYXJjaFBhcmFtcywgLy8gVGhlIHNlYXJjaFBhcmFtcyBvYmplY3Qgd2UgY29uc3RydWN0ZWRcbiAgICAgIGhhc2g6IHBhcnNlZFVybEluc3RhbmNlLmhhc2gsXG4gICAgfTtcblxuICAgIC8vIEluZmVyIGRlZmF1bHQgcG9ydHMgaWYgbm9uZSBhcmUgc3BlY2lmaWVkIGJhc2VkIG9uIHRoZSBwcm90b2NvbFxuICAgIGlmICghcGFyc2VkVXJsLnBvcnQgJiYgcGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgcGFyc2VkVXJsLnBvcnQgPSAnNDQzJztcbiAgICB9XG4gICAgaWYgKCFwYXJzZWRVcmwucG9ydCAmJiBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwOicpIHtcbiAgICAgIHBhcnNlZFVybC5wb3J0ID0gJzgwJztcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgU21hcnR1cmwgaW5zdGFuY2UgYW5kIGFzc2lnbiB0aGUgcGFyc2VkIFVSTCBwcm9wZXJ0aWVzXG4gICAgY29uc3QgcmV0dXJuU21hcnR1cmwgPSBuZXcgU21hcnR1cmwoKTtcbiAgICBPYmplY3QuYXNzaWduKHJldHVyblNtYXJ0dXJsLCBwYXJzZWRVcmwpOyAvLyBDb3B5IGFsbCBwcm9wZXJ0aWVzIGZyb20gcGFyc2VkVXJsIHRvIHJldHVyblNtYXJ0dXJsXG4gICAgcmV0dXJuIHJldHVyblNtYXJ0dXJsO1xuICB9XG5cbiAgLy8gU3RhdGljIG1ldGhvZCB0byBjcmVhdGUgYSBTbWFydHVybCBpbnN0YW5jZSBmcm9tIGFuIGV4aXN0aW5nIElVcmxPYmplY3RcbiAgcHVibGljIHN0YXRpYyBjcmVhdGVGcm9tUGFyc2VkVXJsKHBhcnNlZFVybEFyZzogSVVybE9iamVjdCk6IFNtYXJ0dXJsIHtcbiAgICBjb25zdCByZXR1cm5TbWFydHVybCA9IG5ldyBTbWFydHVybCgpO1xuICAgIE9iamVjdC5hc3NpZ24ocmV0dXJuU21hcnR1cmwsIHBhcnNlZFVybEFyZyk7IC8vIENvcHkgYWxsIHByb3BlcnRpZXMgZnJvbSBwYXJzZWRVcmxBcmcgdG8gcmV0dXJuU21hcnR1cmxcbiAgICByZXR1cm4gcmV0dXJuU21hcnR1cmw7XG4gIH1cblxuICAvLyBJTlNUQU5DRSBQUk9QRVJUSUVTIChtYXRjaGluZyBJVXJsT2JqZWN0IGludGVyZmFjZSlcbiAgaHJlZjogc3RyaW5nO1xuICBvcmlnaW46IHN0cmluZztcbiAgcHJvdG9jb2w6IHN0cmluZztcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbiAgaG9zdDogc3RyaW5nO1xuICBob3N0bmFtZTogc3RyaW5nO1xuICBwb3J0OiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgcGF0aG5hbWU6IHN0cmluZztcbiAgc2VhcmNoOiBzdHJpbmc7XG4gIHNlYXJjaFBhcmFtczogSVNlYXJjaFBhcmFtcztcbiAgaGFzaDogc3RyaW5nO1xuXG4gIC8vIENvbnN0cnVjdG9yIGluaXRpYWxpemVzIHNlYXJjaFBhcmFtcyBhcyBhbiBlbXB0eSBvYmplY3RcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZWFyY2hQYXJhbXMgPSB7fTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBjcmVhdGUgYW4gaW5kZXBlbmRlbnQgY2xvbmUgb2YgdGhlIGN1cnJlbnQgU21hcnR1cmwgaW5zdGFuY2VcbiAgY2xvbmUoKTogU21hcnR1cmwge1xuICAgIGNvbnN0IGNsb25lZEluc3RhbmNlID0gbmV3IFNtYXJ0dXJsKCk7XG4gICAgT2JqZWN0LmFzc2lnbihjbG9uZWRJbnN0YW5jZSwgdGhpcyk7IC8vIENvcHkgYWxsIHByb3BlcnRpZXMgdG8gdGhlIG5ldyBpbnN0YW5jZVxuICAgIGNsb25lZEluc3RhbmNlLnNlYXJjaFBhcmFtcyA9IHsgLi4udGhpcy5zZWFyY2hQYXJhbXMgfTsgLy8gU2hhbGxvdyBjb3B5IG9mIHNlYXJjaFBhcmFtcyB0byBwcmV2ZW50IHNoYXJlZCByZWZlcmVuY2VzXG4gICAgcmV0dXJuIGNsb25lZEluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFR5cGVkIG1ldGhvZCB0byBzZXQgYSBwcm9wZXJ0eSBhbmQgcmV0dXJuIHRoZSBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqIEBwYXJhbSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgdG8gc2V0IChtdXN0IGJlIGEga2V5IG9mIFNtYXJ0dXJsKVxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBwcm9wZXJ0eVxuICAgKiBAcmV0dXJucyBUaGUgU21hcnR1cmwgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICAgKi9cbiAgc2V0PEsgZXh0ZW5kcyBrZXlvZiB0aGlzPihwcm9wOiBLLCB2YWx1ZTogdGhpc1tLXSk6IHRoaXMge1xuICAgIHRoaXNbcHJvcF0gPSB2YWx1ZTsgLy8gU2V0IHRoZSBwcm9wZXJ0eSB0byB0aGUgbmV3IHZhbHVlXG4gICAgcmV0dXJuIHRoaXM7IC8vIFJldHVybiB0aGUgaW5zdGFuY2UgZm9yIGNoYWluaW5nXG4gIH1cblxuICAvLyBNZXRob2QgdG8gY29udmVydCB0aGUgU21hcnR1cmwgaW5zdGFuY2UgYmFjayBpbnRvIGEgVVJMIHN0cmluZ1xuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIGxldCB1c2VycGFydCA9IGBgOyAvLyBJbml0aWFsaXplIHRoZSB1c2VyIHBhcnQgb2YgdGhlIFVSTCAodXNlcm5hbWUgYW5kIHBhc3N3b3JkKVxuXG4gICAgLy8gQ29uc3RydWN0IHRoZSB1c2VyIHBhcnQgYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIHVzZXJuYW1lIGFuZCBwYXNzd29yZFxuICAgIGlmICh0aGlzLnVzZXJuYW1lICYmICF0aGlzLnBhc3N3b3JkKSB7XG4gICAgICB1c2VycGFydCA9IGAke3RoaXMudXNlcm5hbWV9QGA7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZXJuYW1lICYmIHRoaXMucGFzc3dvcmQpIHtcbiAgICAgIHVzZXJwYXJ0ID0gYCR7dGhpcy51c2VybmFtZX06JHt0aGlzLnBhc3N3b3JkfUBgO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHRoZSBmdWxsIFVSTCBzdHJpbmdcbiAgICByZXR1cm4gYCR7dGhpcy5wcm90b2NvbH0vLyR7dXNlcnBhcnR9JHt0aGlzLmhvc3RuYW1lfToke3RoaXMucG9ydH0ke3RoaXMucGF0aH1gO1xuICB9XG59IiwgImV4cG9ydCAqIGZyb20gJy4vc21hcnR1cmwuY2xhc3Nlcy5zbWFydHVybC5qcyc7XG4iLCAiZXhwb3J0IGludGVyZmFjZSBJUmVzb2x2ZTxUPiB7XG4gICh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlamVjdCB7XG4gIChyZWFzb24/OiBhbnkpOiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBURGVmZXJyZWRTdGF0dXMgPSAncGVuZGluZycgfCAnZnVsZmlsbGVkJyB8ICdyZWplY3RlZCc7XG5cbmV4cG9ydCBjbGFzcyBEZWZlcnJlZDxUPiB7XG4gIHB1YmxpYyBwcm9taXNlOiBQcm9taXNlPFQ+O1xuICBwdWJsaWMgcmVzb2x2ZTogSVJlc29sdmU8VD47XG4gIHB1YmxpYyByZWplY3Q6IElSZWplY3Q7XG4gIHB1YmxpYyBzdGF0dXM6IFREZWZlcnJlZFN0YXR1cztcbiAgcHVibGljIGNsYWltZWQgPSBmYWxzZTtcbiAgcHVibGljIGNsYWltKCkge1xuICAgIGlmICh0aGlzLmNsYWltZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVmZXJyZWQgYWxyZWFkeSBjbGFpbWVkJyk7XG4gICAgfVxuICAgIHRoaXMuY2xhaW1lZCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgc3RhcnRlZEF0OiBudW1iZXI7XG4gIHB1YmxpYyBzdG9wcGVkQXQ6IG51bWJlcjtcbiAgcHVibGljIGdldCBkdXJhdGlvbigpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnN0b3BwZWRBdCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcHBlZEF0IC0gdGhpcy5zdGFydGVkQXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydGVkQXQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlID0gKHZhbHVlQXJnOiBUIHwgUHJvbWlzZUxpa2U8VD4pID0+IHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAnZnVsZmlsbGVkJztcbiAgICAgICAgdGhpcy5zdG9wcGVkQXQgPSBEYXRlLm5vdygpO1xuICAgICAgICByZXNvbHZlKHZhbHVlQXJnKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnJlamVjdCA9IChyZWFzb246IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnN0YXR1cyA9ICdyZWplY3RlZCc7XG4gICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICB9O1xuICAgICAgdGhpcy5zdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICAgICAgdGhpcy5zdGF0dXMgPSAncGVuZGluZyc7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRlZmVyID0gPFQ+KCkgPT4ge1xuICByZXR1cm4gbmV3IERlZmVycmVkPFQ+KCk7XG59OyIsICJpbXBvcnQgeyBkZWZlciB9IGZyb20gXCIuL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBDdW11bGF0aXZlRGVmZXJyZWQge1xuICBwcml2YXRlIGFjY3VtdWxhdGVkUHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW107XG4gIHByaXZhdGUgZGVmZXJyZWQgPSBkZWZlcigpO1xuICBwdWJsaWMgcHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIHdoaWxlICh0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBwb3BwZWRQcm9taXNlID0gdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnNoaWZ0KCk7XG4gICAgICAgIGF3YWl0IHBvcHBlZFByb21pc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmRlZmVycmVkLnJlc29sdmUoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRQcm9taXNlKHByb21pc2VBcmc6IFByb21pc2U8YW55Pikge1xuICAgIHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5wdXNoKHByb21pc2VBcmcpO1xuICB9XG59XG5cblxuZXhwb3J0IGNvbnN0IGN1bXVsYXRpdmVEZWZlciA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBDdW11bGF0aXZlRGVmZXJyZWQoKTtcbn0iLCAiaW1wb3J0IHsgZGVmZXIgfSBmcm9tICcuL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi9zbWFydHByb21pc2UuY2xhc3Nlcy5jdW11bGF0aXZlZGVmZXJyZWQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zbWFydHByb21pc2UuY2xhc3Nlcy5kZWZlcnJlZC5qcyc7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJlc29sdmVkIHByb21pc2UgZm9yIHRoZSBwcm92aWRlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVkUHJvbWlzZSA9IDxUPih2YWx1ZT86IFQpOiBQcm9taXNlPFQ+ID0+IHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcmVqZWN0ZWQgcHJvbWlzZSBmb3IgdGhlIHByb3ZpZGVkIHJlYXNvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlamVjdGVkUHJvbWlzZSA9IChlcnIpID0+IHtcbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG59O1xuXG5pbnRlcmZhY2UgSUFzeW5jRnVuY3Rpb248VD4ge1xuICAoc29tZUFyZzogVCk6IFByb21pc2U8VD47XG59XG5cbi8qKlxuICogYWNjZXB0cyBhbiBhcnJheSBvZiBpbnB1dHMgYW5kIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBpbnB1dC5cbiAqIHJ1bnMgYWxsIGl0ZW1zIHdpdGggdGhlIGZ1bmN0aW9uIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXJyYXkgd2hlbiBhbGwgaXRlbXMgaGF2ZSBydW5cbiAqIEBwYXJhbSBpbnB1dEFyZ1xuICogQHBhcmFtIGZ1bmN0aW9uQXJnXG4gKi9cbmV4cG9ydCBjb25zdCBtYXAgPSBhc3luYyA8VD4oaW5wdXRBcmc6IFRbXSwgZnVuY3Rpb25Bcmc6IElBc3luY0Z1bmN0aW9uPFQ+KSA9PiB7XG4gIGNvbnN0IHByb21pc2VBcnJheTogUHJvbWlzZTxhbnk+W10gPSBbXTtcbiAgY29uc3QgcmVzdWx0QXJyYXkgPSBbXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGlucHV0QXJnKSB7XG4gICAgY29uc3QgcHJvbWlzZTogUHJvbWlzZTxhbnk+ID0gZnVuY3Rpb25BcmcoaXRlbSk7XG4gICAgcHJvbWlzZUFycmF5LnB1c2gocHJvbWlzZSk7XG4gICAgcHJvbWlzZS50aGVuKCh4KSA9PiB7XG4gICAgICByZXN1bHRBcnJheS5wdXNoKHgpO1xuICAgIH0pO1xuICB9XG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7XG4gIHJldHVybiByZXN1bHRBcnJheTtcbn07XG5cbmV4cG9ydCBjb25zdCB0aW1lb3V0V3JhcCA9IGFzeW5jIDxUID0gYW55PihcbiAgcHJvbWlzZUFyZzogUHJvbWlzZTxUPixcbiAgdGltZW91dEluTXNBcmc6IG51bWJlcixcbiAgcmVqZWN0QXJnID0gdHJ1ZVxuKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAocmVqZWN0QXJnKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3RpbWVvdXQnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfVxuICAgIH0sIHRpbWVvdXRJbk1zQXJnKTtcbiAgICBwcm9taXNlQXJnLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdGltZW91dEFuZENvbnRpbnVlID0gYXN5bmMgPFQgPSBhbnk+KFxuICBwcm9taXNlQXJnOiBQcm9taXNlPFQ+LFxuICB0aW1lb3V0SW5Nc0FyZyA9IDYwMDAwXG4pID0+IHtcbiAgcmV0dXJuIHRpbWVvdXRXcmFwKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnLCBmYWxzZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmlyc3RUcnVlT3JGYWxzZSA9IGFzeW5jIChwcm9taXNlc0FyZzogUHJvbWlzZTxib29sZWFuPltdKSA9PiB7XG4gIGNvbnN0IGRvbmUgPSBkZWZlcjxib29sZWFuPigpO1xuICBmb3IgKGNvbnN0IHByb21pc2VBcmcgb2YgcHJvbWlzZXNBcmcpIHtcbiAgICBwcm9taXNlQXJnLnRoZW4oKHJlc3VsdEFyZykgPT4ge1xuICAgICAgaWYgKHJlc3VsdEFyZyA9PT0gdHJ1ZSkge1xuICAgICAgICBkb25lLnJlc29sdmUodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgUHJvbWlzZS5hbGwocHJvbWlzZXNBcmcpLnRoZW4oKCkgPT4ge1xuICAgIGRvbmUucmVzb2x2ZShmYWxzZSk7XG4gIH0pO1xuICByZXR1cm4gZG9uZS5wcm9taXNlO1xufTtcbiIsICJpbXBvcnQgKiBhcyBzbWFydHByb21pc2UgZnJvbSAnQHB1c2hyb2Nrcy9zbWFydHByb21pc2UnO1xuXG4vKipcbiAqIGRlbGF5IHNvbWV0aGluZywgd29ya3MgbGlrZSBzZXRUaW1lb3V0XG4gKiBAcGFyYW0gdGltZUluTWlsbGlzZWNvbmRBcmdcbiAqIEBwYXJhbSBwYXNzT25BcmdcbiAqL1xuZXhwb3J0IGxldCBkZWxheUZvciA9IGFzeW5jIDxUPihcbiAgdGltZUluTWlsbGlzZWNvbmRBcmc6IG51bWJlcixcbiAgcGFzc09uQXJnPzogVCxcbiAgdW5yZWZlZEFyZyA9IGZhbHNlXG4pID0+IHtcbiAgY29uc3QgdGltZW91dCA9IG5ldyBUaW1lb3V0KHRpbWVJbk1pbGxpc2Vjb25kQXJnLCBudWxsLCB1bnJlZmVkQXJnKTtcbiAgYXdhaXQgdGltZW91dC5wcm9taXNlO1xuICByZXR1cm4gcGFzc09uQXJnO1xufTtcblxuLyoqXG4gKiBkZWxheSBmb3IgYSByYW5kb20gdGltZVxuICovXG5leHBvcnQgbGV0IGRlbGF5Rm9yUmFuZG9tID0gYXN5bmMgPFQ+KFxuICB0aW1lTWluSW5NaWxsaXNlY29uZEFyZzogbnVtYmVyLFxuICB0aW1lTWF4SW5NaWxsaXNlY29uZEFyZzogbnVtYmVyLFxuICBwYXNzT25Bcmc/OiBULFxuICB1bnJlZmVkQXJnID0gZmFsc2VcbikgPT4ge1xuICBhd2FpdCBkZWxheUZvcihcbiAgICBNYXRoLnJhbmRvbSgpICogKHRpbWVNYXhJbk1pbGxpc2Vjb25kQXJnIC0gdGltZU1pbkluTWlsbGlzZWNvbmRBcmcpICsgdGltZU1pbkluTWlsbGlzZWNvbmRBcmcsXG4gICAgbnVsbCxcbiAgICB1bnJlZmVkQXJnXG4gICk7XG4gIHJldHVybiBwYXNzT25Bcmc7XG59O1xuXG5leHBvcnQgY2xhc3MgVGltZW91dDxUPiB7XG4gIHByb21pc2U6IFByb21pc2U8VD47XG4gIHByaXZhdGUgX2RlZmVycmVkOiBzbWFydHByb21pc2UuRGVmZXJyZWQ8VD47XG4gIHByaXZhdGUgX3RpbWVvdXQ7XG4gIHByaXZhdGUgX2NhbmNlbGxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgdGltZW91dEluTWlsbGlzOiBudW1iZXI7XG4gIHByaXZhdGUgc3RhcnRlZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHRpbWVJbk1pbGxpc2Vjb25kQXJnLCBwYXNzT24/OiBULCB1bnJlZmVkQXJnID0gZmFsc2UpIHtcbiAgICB0aGlzLnRpbWVvdXRJbk1pbGxpcyA9IHRpbWVJbk1pbGxpc2Vjb25kQXJnO1xuICAgIHRoaXMuX2RlZmVycmVkID0gc21hcnRwcm9taXNlLmRlZmVyPFQ+KCk7XG4gICAgdGhpcy5wcm9taXNlID0gdGhpcy5fZGVmZXJyZWQucHJvbWlzZTtcbiAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2NhbmNlbGxlZCkge1xuICAgICAgICB0aGlzLl9kZWZlcnJlZC5yZXNvbHZlKHBhc3NPbik7XG4gICAgICB9XG4gICAgfSwgdGltZUluTWlsbGlzZWNvbmRBcmcpO1xuICAgIHRoaXMuc3RhcnRlZCA9IERhdGUubm93KCk7XG4gICAgaWYgKHVucmVmZWRBcmcpIHtcbiAgICAgIHRoaXMubWFrZVVucmVmZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdW5yZWZmaW5nIGEgdGltZW91dCBjYXVzZXMgdGhlIG5vZGUgcHJvY2VzcyB0byBub3Qgd2FpdCBmb3IgY29tcGxldGlvbiBiZWZvcmUgZXhpdFxuICAgKi9cbiAgcHVibGljIG1ha2VVbnJlZmVkKCkge1xuICAgIHRoaXMuX3RpbWVvdXQudW5yZWYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYW5jZWxzIHRoZSB0aW1lclxuICAgKi9cbiAgcHVibGljIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9jYW5jZWxsZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUaW1lTGVmdCgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN0YXJ0ZWQgKyB0aGlzLnRpbWVvdXRJbk1pbGxpcyAtIERhdGUubm93KCk7XG4gICAgcmV0dXJuIHJlc3VsdCA+IDAgPyByZXN1bHQgOiAwO1xuICB9XG59XG4iLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWVdSa2NtVnpjeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNSekwySjFjMmx1WlhOekwyRmtaSEpsYzNNdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklpSjkiLCAiaW1wb3J0IHsgYnVzaW5lc3MsIGdlbmVyYWwgfSBmcm9tICcuLi9pbmRleC5qcyc7XG5cbi8qKlxuICogZGVzY3JpYmVzIGEgY29tcGFueSdzIGxpZmVjeWNsZSBzdGF0ZVxuICovXG5leHBvcnQgdHlwZSBUQ29tcGFueVN0YXR1cyA9ICdwbGFuZWQnIHwgJ2ZvdW5kaW5nJyB8ICdhY3RpdmUnIHwgJ2xpcXVpZGF0aW9uJyB8ICdjbG9zZWQnO1xuXG4vKipcbiAqIGRlc2NyaWJlcyBhIGNvbXBhbnlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29tcGFueSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc2xvZ2FuPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbG9nb0xpbms/OiBzdHJpbmc7XG4gIGZvdW5kZWREYXRlOiBnZW5lcmFsLklEYXRlO1xuICBjbG9zZWREYXRlOiBnZW5lcmFsLklEYXRlO1xuICBzdGF0dXM6IGJ1c2luZXNzLlRDb21wYW55U3RhdHVzO1xuICBjb250YWN0OiBidXNpbmVzcy5JQ29udGFjdDtcbn1cbiIsICJpbXBvcnQgeyBmaW5hbmNlIH0gZnJvbSAnLi4vaW5kZXguanMnO1xuaW1wb3J0IHsgYnVzaW5lc3MgfSBmcm9tICcuLi9pbmRleC5qcyc7XG5cbmV4cG9ydCB0eXBlIFRDb250YWN0U2FsdXRhdGlvbiA9ICdNcicgfCAnTXMnIHwgJ01ycyc7XG5cbmV4cG9ydCB0eXBlIFRDb250YWN0VHlwZSA9ICdwZXJzb24nIHwgJ2NvbXBhbnknO1xuXG5leHBvcnQgdHlwZSBUQ29udGFjdFRpdGxlID0gJ0RvY3RvcicgfCAnUHJvZmVzc29yJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29udGFjdCB7XG4gIC8vID09PT09PT1cbiAgLy8gZ2VuZXJhbFxuICAvLyA9PT09PT09XG4gIHNhbHV0YXRpb24/OiBUQ29udGFjdFNhbHV0YXRpb247XG4gIHR5cGU6IFRDb250YWN0VHlwZTtcbiAgdGl0bGU/OiBUQ29udGFjdFRpdGxlO1xuICByZWxhdGlvbnNoaXA/OiAnY3VzdG9tZXInIHwgJ3N1cHBsaWVyJyB8ICdwYXJ0bmVyJyB8ICdlbXBsb3llZScgfCAnb3RoZXInO1xuICBuYW1lOiBzdHJpbmc7XG4gIHN1cm5hbWU/OiBzdHJpbmc7XG4gIGxlZ2FsRW50aXR5Pzogc3RyaW5nO1xuICBhZGRyZXNzOiBidXNpbmVzcy5JQWRkcmVzcztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgY3VzdG9tZXJOdW1iZXI/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuXG4gIGxvZ29Vcmw/OiBzdHJpbmc7XG4gIHdlYnNpdGU/OiBzdHJpbmc7XG4gIGZhY2Vib29rVXJsPzogc3RyaW5nO1xuICB0d2l0dGVyVXJsPzogc3RyaW5nO1xuXG4gIHBob25lPzogc3RyaW5nO1xuICBmYXg/OiBzdHJpbmc7XG5cbiAgLy8gPT09PT09PT09XG4gIC8vIGZpbmFuY2lhbFxuICAvLyA9PT09PT09PT1cbiAgdmF0SWQ/OiBzdHJpbmc7XG4gIHNlcGFDb25uZWN0aW9uPzogZmluYW5jZS5JU2VwYUNvbm5lY3Rpb247XG59XG4iLCAiaW1wb3J0IHsgZmluYW5jZSB9IGZyb20gJy4uL2luZGV4LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ2hlY2tpbmdBY2NvdW50IHtcbiAgbmFtZTogc3RyaW5nO1xuICBjdXJyZW5jeTogZmluYW5jZS5UQ3VycmVuY3k7XG4gIHRyYW5zYWN0aW9ucz86IGZpbmFuY2UuSVRyYW5zYWN0aW9uW107XG59XG4iLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTNWeWNtVnVZM2t1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5MGN5OW1hVzVoYm1ObEwyTjFjbkpsYm1ONUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSWlmUT09IiwgImltcG9ydCB7IGJ1c2luZXNzIH0gZnJvbSAnLi4vaW5kZXguanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElFeHBlbnNlSXRlbSB7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFzc2V0PzogYm9vbGVhbjtcbiAgYWNjb3VudGluZ1R5cGU/OiBhbnk7XG4gIGFtb3VudDogbnVtYmVyO1xuICB0YXhQZXJjZW50YWdlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZvdWNoZXIge1xuICB2b3VjaGVyRmlsZT86IGFueTtcbiAgZGF0ZTogRGF0ZTtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZXhwZW5zZUl0ZW1zOiBJRXhwZW5zZUl0ZW1bXTtcbiAgY29udGFjdFJlZjogYnVzaW5lc3MuSUNvbnRhY3Q7XG59XG4iLCAiaW1wb3J0IHsgYnVzaW5lc3MsIGZpbmFuY2UgfSBmcm9tICcuLi9pbmRleC5qcyc7XG5pbXBvcnQgdHlwZSB7IFRDdXJyZW5jeSB9IGZyb20gJy4vY3VycmVuY3kuanMnO1xuXG5leHBvcnQgdHlwZSBUSW52b2ljZVN0YXR1cyA9ICdkcmFmdCcgfCAnaW52b2ljZScgfCAncGFpZCcgfCAncmVmdW5kZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElJbnZvaWNlSXRlbSB7XG4gIHBvc2l0aW9uOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgYXJ0aWNsZU51bWJlcj86IHN0cmluZztcbiAgdW5pdFR5cGU6IHN0cmluZztcbiAgdW5pdFF1YW50aXR5OiBudW1iZXI7XG4gIHVuaXROZXRQcmljZTogbnVtYmVyO1xuICB2YXRQZXJjZW50YWdlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUludm9pY2Uge1xuICBpZDogc3RyaW5nO1xuICBiaWxsZWRCeTogYnVzaW5lc3MuSUNvbnRhY3Q7XG4gIGJpbGxlZFRvOiBidXNpbmVzcy5JQ29udGFjdDtcbiAgdHlwZTogJ2NyZWRpdG5vdGUnIHwgJ2RlYml0bm90ZSc7XG4gIHN0YXR1czogVEludm9pY2VTdGF0dXM7XG4gIGl0ZW1zOiBJSW52b2ljZUl0ZW1bXTtcbiAgcGVyaW9kT2ZQZXJmb3JtYW5jZT86IHtcbiAgICBmcm9tOiBudW1iZXI7XG4gICAgdG86IG51bWJlcjtcbiAgfTtcbiAgZGVsaXZlcnlEYXRlPzogbnVtYmVyO1xuICBkdWVJbkRheXM6IG51bWJlcjtcbiAgcmV2ZXJzZUNoYXJnZTogYm9vbGVhbjtcbiAgcHJpbnRSZXN1bHQ/OiB7XG4gICAgcGRmQnVmZmVyU3RyaW5nOiBzdHJpbmc7XG4gICAgdG90YWxOZXQ6IG51bWJlcjtcbiAgICB0b3RhbEdyb3NzOiBudW1iZXI7XG4gICAgdmF0R3JvdXBzOiB7XG4gICAgICBwZXJjZW50YWdlOiBudW1iZXI7XG4gICAgICBpdGVtczogSUludm9pY2VJdGVtW107XG4gICAgfTtcbiAgfTtcbiAgbm90ZXM6IHN0cmluZ1tdO1xuICBwYXltZW50T3B0aW9ucz86IGZpbmFuY2UuSVBheW1lbnRPcHRpb25JbmZvO1xuICBjdXJyZW5jeTogVEN1cnJlbmN5O1xufVxuIiwgImV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNHRjViV1Z1ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzUnpMMlpwYm1GdVkyVXZjR0Y1YldWdWRDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lJbjA9IiwgImV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRISmhibk5oWTNScGIyNHVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTkwY3k5bWFXNWhibU5sTDNSeVlXNXpZV04wYVc5dUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSWlmUT09IiwgImV4cG9ydCAqIGZyb20gJy4vY2hlY2tpbmdhY2NvdW50LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY3VycmVuY3kuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9leHBlbnNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaW52b2ljZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BheW1lbnQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2FjdGlvbi5qcyc7XG4iLCAiaW1wb3J0ICogYXMgZmluYW5jZSBmcm9tICcuLi9maW5hbmNlL2luZGV4LmpzJztcbmltcG9ydCB7IHR5cGUgSUNvbXBhbnkgfSBmcm9tICcuL2NvbXBhbnkuanMnO1xuaW1wb3J0IHsgdHlwZSBJQ29udGFjdCB9IGZyb20gJy4vY29udGFjdC5qcyc7XG5leHBvcnQgY2xhc3MgSUpvYiB7XG4gIHR5cGU6ICdjb250cmFjdCcgfCAnZW1wbG95bWVudCc7XG4gIHRlY2hUYWdzPzogc3RyaW5nW107XG4gIHF1YWxpZmljYXRpb25UYWdzPzogc3RyaW5nW107XG4gIGxhbmd1YWdlcz86IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbGV2ZWw6ICdiYXNpYycgfCAnaW50ZXJtZWRpYXRlJyB8ICdhZHZhbmNlZCcgfCAnbmF0aXZlJztcbiAgfVtdO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG1vbnRobHlUb3RhbDogbnVtYmVyO1xuICBjdXJyZW5jeTogZmluYW5jZS5UQ3VycmVuY3k7XG4gIGZyb206IElDb21wYW55O1xuICBjb250YWN0OiBJQ29udGFjdDtcbn0iLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYlc5dVoyOWtaWE5qY21sd2RHOXlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2ZEhNdlpHRjBZV0poYzJVdmJXOXVaMjlrWlhOamNtbHdkRzl5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJaWZRPT0iLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYjJKcVpXTjBZV04wYVc5dUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZkSE12WkdGMFlXSmhjMlV2YjJKcVpXTjBZV04wYVc5dUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSWlmUT09IiwgImV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWIySnFaV04wYzNSaGRIVnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2ZEhNdlpHRjBZV0poYzJVdmIySnFaV04wYzNSaGRIVnpMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUlpZlE9PSIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkM0poY0hCbFpHUmhkR0V1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5MGN5OWtZWFJoWW1GelpTOTNjbUZ3Y0dWa1pHRjBZUzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pSW4wPSIsICJleHBvcnQgKiBmcm9tICcuL21vbmdvZGVzY3JpcHRvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29iamVjdGFjdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29iamVjdHN0YXR1cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3dyYXBwZWRkYXRhLmpzJztcbiIsICJpbXBvcnQgKiBhcyBidXNpbmVzcyBmcm9tICcuL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIGZpbmFuY2UgZnJvbSAnLi4vZmluYW5jZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBkYXRhYmFzZSBmcm9tICcuLi9kYXRhYmFzZS9pbmRleC5qcyc7XG5leHBvcnQgaW50ZXJmYWNlIElMZXR0ZXIge1xuICB2ZXJzaW9uSW5mbzoge1xuICAgIHR5cGU6ICdkcmFmdCcgfCAnZmluYWwnO1xuICAgIC8qKlxuICAgICAqIHNob3VsZCBmb2xsb3cgc2VtVmVyXG4gICAgICovXG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICB9O1xuICBpbmNpZGVuY2VJZDogc3RyaW5nO1xuICB0eXBlOiAnaW52b2ljZScgfCAnbm90aWNlJyB8ICd3YXJuaW5nJyB8ICd2ZXJpZmljYXRpb24nIHwgJ2NvbnRyYWN0JztcbiAgZGF0ZTogbnVtYmVyO1xuICBmcm9tOiBidXNpbmVzcy5JQ29udGFjdDtcbiAgdG86IGJ1c2luZXNzLklDb250YWN0O1xuICBsZWdhbENvbnRhY3Q6IGJ1c2luZXNzLklDb250YWN0O1xuICBsb2dvVXJsOiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgYWNjZW50Q29sb3I/OiBzdHJpbmc7XG4gIG5lZWRzQ292ZXJTaGVldDogYm9vbGVhbjtcbiAgY29udGVudDoge1xuICAgIHRleHREYXRhOiBzdHJpbmdbXTtcbiAgICBpbnZvaWNlRGF0YT86IGZpbmFuY2UuSUludm9pY2U7XG4gICAgY29udHJhY3REYXRhPzoge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGNvbnRyYWN0RGF0ZTogbnVtYmVyO1xuICAgIH07XG4gICAgdGltZXNoZWV0RGF0YTogc3RyaW5nO1xuICB9XG4gIHBkZj86IGJ1c2luZXNzLklQZGY7XG4gIHBkZkF0dGFjaG1lbnRzOiBidXNpbmVzcy5JUGRmW107XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIG9iamVjdEFjdGlvbnM6IGRhdGFiYXNlLklPYmplY3RBY3Rpb25bXTtcbn1cbiIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljR1JtTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmRITXZZblZ6YVc1bGMzTXZjR1JtTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJaWZRPT0iLCAiaW1wb3J0IHsgdHlwZSBJQ29udGFjdCB9IGZyb20gJy4vY29udGFjdC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcnNvbiB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgc3VybmFtZTogc3RyaW5nO1xuICBzZXg6ICdtYWxlJyB8ICdmZW1hbGUnIHwgJ3F1ZWVyJztcbiAgbGVnYWxQcm94eUZvcj86IHtcbiAgICB0eXBlOiAnc2VsZicgfCAnb3RoZXInO1xuICAgIGNvbnRhY3Q/OiBJQ29udGFjdDtcbiAgfTtcbn1cbiIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljSEp2YW1WamRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM1J6TDJKMWMybHVaWE56TDNCeWIycGxZM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWlKOSIsICJleHBvcnQgKiBmcm9tICcuL2FkZHJlc3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wYW55LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udGFjdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2pvYi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2xldHRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BkZi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BlcnNvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb2plY3QuanMnO1xuIiwgImV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyOXRiV2wwYVc1bWJ5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM1J6TDJOdlpHVXZZMjl0YldsMGFXNW1ieTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pSW4wPSIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljM1JoZEhWemIySnFaV04wTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmRITXZZMjlrWlM5emRHRjBkWE52WW1wbFkzUXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJaUo5IiwgImV4cG9ydCAqIGZyb20gJy4vY29tbWl0aW5mby5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1c29iamVjdC5qcyc7IiwgImV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyOXVkR0ZwYm1WeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZkSE12WTI5dWRHRnBibVZ5TDJOdmJuUmhhVzVsY2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaUluMD0iLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZG05c2RXMWxiVzkxYm5RdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOTBjeTlqYjI1MFlXbHVaWEl2ZG05c2RXMWxiVzkxYm5RdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklpSjkiLCAiZXhwb3J0ICogZnJvbSAnLi9jb250YWluZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi92b2x1bWVtb3VudC5qcyc7XG4iLCAiaW1wb3J0IHsgY29udGVudCB9IGZyb20gJy4uL2luZGV4LmpzJztcblxuLyoqXG4gKiBhIGdlbmVyYWwgY29udGVudCBhcnRpY2xlOlxuICogKiBjYW4gYmUgbmV3c1xuICogKiBjYW4gYmUgYSBwcm9kdWN0ZGVzY3JpcHRpb24sXG4gKiAqIGNhbiBiZSBhbnl0aGluZyB0aGF0IGhhcyB0ZXh0IHdpdGggYSB0aXRsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcnRpY2xlPFQgPSBhbnk+IHtcbiAgLyoqXG4gICAqIHRoZSBtYWluIHVybCBvZiBhbiBhcnRpY2xlXG4gICAqL1xuICB1cmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRoZSBtYWluaW1hZ2Ugb2YgdGhlIGFydGljbGVcbiAgICovXG4gIGZlYXR1cmVkSW1hZ2VVcmw/OiBzdHJpbmc7XG5cbiAgcmVmZXJlbmNlT2JqZWN0PzogVDtcblxuICAvKipcbiAgICogdGhlIHRpdGxlIG9mIGFuIGFydGljbGVcbiAgICovXG4gIHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRoZSBBdXRob3Igb2YgYW4gYXJ0aWNsZVxuICAgKi9cbiAgYXV0aG9yOiBjb250ZW50LklBdXRob3I7XG5cbiAgLyoqXG4gICAqIHRoZSBjb250ZW50IG9mIGFuIGFydGljbGVcbiAgICovXG4gIGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogYSB0aW1lc3RhbXAgZm9yIHdoZW4gdGhlIGFydGljbGUgd2FzIHdyaXR0ZW5cbiAgICovXG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB0aGUgdGFncyBvZiBhbiBhcnRpY2xlXG4gICAqL1xuICB0YWdzOiBzdHJpbmdbXTtcbn1cbiIsICJpbXBvcnQgeyBnZW5lcmFsLCBjb250ZW50IH0gZnJvbSAnLi4vaW5kZXguanMnO1xuXG4vKipcbiAqIGFuc3dlcnMgdGhlIHF1ZXN0aW9uIFwiV2hvIHdyb3RlIHRoYXQ/XCJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXV0aG9yIHtcbiAgLyoqXG4gICAqIHRoZSBmaXJzdCBuYW1lIG9mIGFuIGF1dGhvclxuICAgKi9cbiAgZmlyc3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRoZSBzdXJuYW1lIG9mIGFuIGF1dGhvclxuICAgKi9cbiAgc3VyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB0aGUgYmlydGhkYXkgb2YgYW4gYXV0aG9yXG4gICAqL1xuICBiaXJ0aGRheTogZ2VuZXJhbC5JRGF0ZTtcblxuICAvKipcbiAgICogYXJ0aWNsZXMgb2YgYW4gYXV0aG9yXG4gICAqL1xuICBhcnRpY2xlczogY29udGVudC5JQXJ0aWNsZVtdO1xufVxuIiwgImltcG9ydCB7IHR5cGUgSUFydGljbGUgfSBmcm9tICcuL2FydGljbGUuanMnO1xuXG4vKipcbiAqIGEgc2V0IG9mIGFydGljbGVzIHRoYXQgdG9nZXRoZXIgZm9ybSBhIGJvZHkgb2YgZG9jdW1lbnRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEb2N1bWVudGF0aW9uU2V0IHtcbiAgaWQ6IHN0cmluZztcbiAgY3JlYXRpb25UaW1lc3RhbXA6IG51bWJlcjtcbiAgYXJ0aWNsZXM6IElBcnRpY2xlW107XG59XG4iLCAiZXhwb3J0ICogZnJvbSAnLi9hcnRpY2xlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXV0aG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZG9jdW1lbnRhdGlvbnNldC5qcyc7XG4iLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkdGMFpTNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM1J6TDJkbGJtVnlZV3d2WkdGMFpTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lJbjA9IiwgImV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRHbHRaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNSekwyZGxibVZ5WVd3dmRHbHRaUzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pSW4wPSIsICJleHBvcnQgKiBmcm9tICcuL2RhdGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90aW1lLmpzJztcbiIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMlZ5ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzUnpMMjVsZEhkdmNtc3ZZMlZ5ZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaUluMD0iLCAiaW1wb3J0IHsgdHlwZSBJQ2VydCB9IGZyb20gXCIuL2NlcnQuanNcIjtcblxuZXhwb3J0IGNsYXNzIElDbmFtZURlc2NyaXB0b3Ige1xuICAvKipcbiAgICogdGhlIG9yaWdpbmFsIGRvbWFpbiB0aGF0IGlzIGJlaW5nIGNuYW1lZFxuICAgKi9cbiAgY25hbWVkRG9tYWluOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRoZSBjbmFtZSBwcm94eSBkb21haW5cbiAgICogdGhlIGRvbWFpbiB0aGF0IGlzIHVzZWQgZm9yIHRoZSBjbmFtZSBkbnMgZW50cnlcbiAgICovXG4gIGNuYW1lUHJveHlEb21haW46IHN0cmluZztcblxuICAvKipcbiAgICogdGhlIGludGVybmFsIHRhcmdldCB1cmxcbiAgICovXG4gIHRhcmdldFVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBhIGRlc2NyaXB0aW9uXG4gICAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB0aGUgc3NsIGNlcnRpZmljYXRlXG4gICAqL1xuICBzc2xDZXJ0aWZpY2F0ZT86IElDZXJ0O1xufTsiLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkdWMmFXTmxMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2ZEhNdmJtVjBkMjl5YXk5a1pYWnBZMlV1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWlKOSIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laRzV6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmRITXZibVYwZDI5eWF5OWtibk11ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWlKOSIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laRzV6WTJoaGJHeGxibWRsTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmRITXZibVYwZDI5eWF5OWtibk5qYUdGc2JHVnVaMlV1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWlKOSIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laRzl0WVdsdVpHVnNaV2RoZEdsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM1J6TDI1bGRIZHZjbXN2Wkc5dFlXbHVaR1ZzWldkaGRHbHZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pSW4wPSIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhbmQwTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmRITXZibVYwZDI5eWF5OXFkM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWlKOSIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2libVYwZDI5eWEyNXZaR1V1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5MGN5OXVaWFIzYjNKckwyNWxkSGR2Y210dWIyUmxMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUlpZlE9PSIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ4ZFdWemRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM1J6TDI1bGRIZHZjbXN2Y21WeGRXVnpkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pSW4wPSIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVYyWlhKelpYQnliM2g1TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmRITXZibVYwZDI5eWF5OXlaWFpsY25ObGNISnZlSGt1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWlKOSIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljM05vTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmRITXZibVYwZDI5eWF5OXpjMmd1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWlKOSIsICJleHBvcnQgKiBmcm9tICcuL2NlcnQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbmFtZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RldmljZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Rucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Ruc2NoYWxsZW5nZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RvbWFpbmRlbGVnYXRpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9qd3QuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9uZXR3b3Jrbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlcXVlc3QuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXZlcnNlcHJveHkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zc2guanMnO1xuIiwgImltcG9ydCB7IHR5cGUgSUNvbXBhbnkgfSBmcm9tIFwiLi4vYnVzaW5lc3MvY29tcGFueS5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQcm9kdWN0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBzbG9nYW46IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgb3M6ICd3ZWItYmFzZWQnLFxuICBjYXRlZ29yeTogJ0J1c2luZXNzIEFwcGxpY2F0aW9uJyxcbiAgb2ZmZXJzOiBhbnlbXTtcbiAgZmVhdHVyZXM6IElQcm9kdWN0RmVhdHVyZVtdO1xuICBsYW5kaW5nUGFnZTogc3RyaW5nO1xuICBhcHBMaW5rOiBzdHJpbmc7XG4gIGxvZ29MaW5rOiBzdHJpbmc7XG4gIHB1Ymxpc2hlcj86IElDb21wYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQcm9kdWN0RmVhdHVyZSB7XG4gIGhlYWRpbmc6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgbGlua1RleHQ6IHN0cmluZztcbiAgbGlua1VybDogc3RyaW5nO1xufSIsICJpbXBvcnQgeyB0eXBlIElQcm9kdWN0IH0gZnJvbSAnLi9wcm9kdWN0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaXB0aW9uUGxhbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgdW5pdDogJ2RldmljZScgfCAndXNlcic7XG4gIHF1YW50aXR5OiBib29sZWFuO1xuICBhdmFpbGFibGVUZXJtczoge1xuICAgIHBlcmlvZDogJ2RhaWx5JyB8ICd3ZWVrbHknIHwgJ21vbnRobHknIHwgJ3llYXJseSc7XG4gICAgcHJpY2U6IG51bWJlcjtcbiAgICBjdXJyZW5jeTogJ0VVUicgfCAnVVNEJztcbiAgfVtdO1xuICBjb250YWluZWRQcm9kdWN0czogSVByb2R1Y3RbXTtcbiAgbGltaXRzOiBhbnk7XG59XG4iLCAiZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpcHRpb25wbGFuLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvZHVjdC5qcyc7XG4iLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTkwY3k5emRHOXlZV2RsTDJsdVpHVjRMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUlpZlE9PSIsICJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liR2x1YXk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzUnpMM2RsWW5OcGRHVXZiR2x1YXk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaUluMD0iLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYldWdWRXbDBaVzB1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5MGN5OTNaV0p6YVhSbEwyMWxiblZwZEdWdExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSWlmUT09IiwgImV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHbHVhMkpzYjJOckxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZkSE12ZDJWaWMybDBaUzlzYVc1cllteHZZMnN1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWlKOSIsICJleHBvcnQgKiBmcm9tICcuL2xpbmsuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZW51aXRlbS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpbmtibG9jay5qcyc7XG4iLCAiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pXWmxjM1F1YjNkdUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dmRITXZkSGx3WldabGMzUXViM2R1TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJaWZRPT0iLCAiLy8gQnVzaW5lc3NcbmltcG9ydCAqIGFzIGJ1c2luZXNzIGZyb20gJy4vYnVzaW5lc3MvaW5kZXguanMnO1xuXG4vLyBDb2RlXG5pbXBvcnQgKiBhcyBjb2RlIGZyb20gJy4vY29kZS9pbmRleC5qcyc7XG5cbi8vIENvbnRhaW5lclxuaW1wb3J0ICogYXMgY29udGFpbmVyIGZyb20gJy4vY29udGFpbmVyL2luZGV4LmpzJztcblxuLy8gRGF0YWJhc2VcbmltcG9ydCAqIGFzIGRhdGFiYXNlIGZyb20gJy4vZGF0YWJhc2UvaW5kZXguanMnO1xuXG4vLyBGaW5hbmNlXG5pbXBvcnQgKiBhcyBmaW5hbmNlIGZyb20gJy4vZmluYW5jZS9pbmRleC5qcyc7XG5cbi8vIENvbnRlbnRcbmltcG9ydCAqIGFzIGNvbnRlbnQgZnJvbSAnLi9jb250ZW50L2luZGV4LmpzJztcblxuLy8gR2VuZXJhbFxuaW1wb3J0ICogYXMgZ2VuZXJhbCBmcm9tICcuL2dlbmVyYWwvaW5kZXguanMnO1xuXG4vLyBOZXR3b3JrXG5pbXBvcnQgKiBhcyBuZXR3b3JrIGZyb20gJy4vbmV0d29yay9pbmRleC5qcyc7XG5cbi8vIFNhYVNcbmltcG9ydCAqIGFzIHNhYXMgZnJvbSAnLi9zYWFzL2luZGV4LmpzJztcblxuLy8gU3RvcmFnZVxuaW1wb3J0ICogYXMgc3RvcmFnZSBmcm9tICcuL3N0b3JhZ2UvaW5kZXguanMnO1xuXG4vLyBXZWJzaXRlXG5pbXBvcnQgKiBhcyB3ZWJzaXRlIGZyb20gJy4vd2Vic2l0ZS9pbmRleC5qcyc7XG5cbmV4cG9ydCB7IGJ1c2luZXNzLCBjb250YWluZXIsIGNvZGUsIGRhdGFiYXNlLCBmaW5hbmNlLCBjb250ZW50LCBnZW5lcmFsLCBuZXR3b3JrLCBzYWFzLCBzdG9yYWdlLCB3ZWJzaXRlIH07XG5cbmltcG9ydCB0eXBlICogYXMgdHlwZUZlc3QgZnJvbSAndHlwZS1mZXN0JztcbmltcG9ydCAqIGFzIHR5cGVGZXN0T3duIGZyb20gJy4vdHlwZWZlc3Qub3duLmpzJztcblxuZXhwb3J0IHsgdHlwZSB0eXBlRmVzdCwgdHlwZSB0eXBlRmVzdE93biB9O1xuIiwgIi8vIHB1c2hyb2NrcyBzY29wZVxuaW1wb3J0ICogYXMgc21hcnRkZWxheSBmcm9tICdAcHVzaHJvY2tzL3NtYXJ0ZGVsYXknO1xuaW1wb3J0ICogYXMgc21hcnRwcm9taXNlIGZyb20gJ0BwdXNocm9ja3Mvc21hcnRwcm9taXNlJztcblxuZXhwb3J0IHsgc21hcnRkZWxheSwgc21hcnRwcm9taXNlIH07XG5cbi8vIHRzY2xhc3Mgc2NvcGVcbmltcG9ydCAqIGFzIHRzY2xhc3MgZnJvbSAnQHRzY2xhc3MvdHNjbGFzcyc7XG5cbmV4cG9ydCB7IHRzY2xhc3MgfTtcbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4uL3dlYnNldHVwLnBsdWdpbnMuanMnO1xuZXhwb3J0IGludGVyZmFjZSBJTWV0YU9iamVjdCB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjYW5vbmljYWxEb21haW4/OiBzdHJpbmc7XG4gIGxkQ29tcGFueT86IHBsdWdpbnMudHNjbGFzcy5idXNpbmVzcy5JQ29tcGFueTtcbiAgbGRQcm9kdWN0PzogcGx1Z2lucy50c2NsYXNzLnNhYXMuSVByb2R1Y3Q7XG5cbiAgLy8gaGFuZGxlc1xuICB0d2l0dGVySGFuZGxlPzogc3RyaW5nO1xuICBmYWNlYm9va0hhbmRsZT86IHN0cmluZztcblxuICAvLyBsaW5rc1xuICBjb21wYW55V2Vic2l0ZUxpbms/OiBzdHJpbmc7XG4gIGdvb2dsZU5ld3NMaW5rPzogc3RyaW5nO1xuICBtZWRpdW1MaW5rPzogc3RyaW5nO1xuICBzbGFja0xpbms/OiBzdHJpbmc7XG4gIGFpcm1lZXRMaW5rPzogc3RyaW5nO1xufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi93ZWJzZXR1cC5wbHVnaW5zLmpzJztcblxuZXhwb3J0IGNsYXNzIFRhZyB7XG4gIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50O1xuXG4gIHB1YmxpYyB0YWdMZXZlbDogJ2dsb2JhbCcgfCAnbGV2ZWxib3VuZCc7XG5cbiAgcHVibGljIGFwcGVuZFRvRG9tKCkge1xuICAgIGlmICghdGhpcy5lbGVtZW50UmVmLnBhcmVudEVsZW1lbnQgJiYgIXRoaXMuZWxlbWVudFJlZi5wYXJlbnROb2RlKSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudFJlZik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZUZyb21Eb20oKSB7XG4gICAgaWYgKHRoaXMuZWxlbWVudFJlZi5wYXJlbnRFbGVtZW50KSB7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnRSZWYpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50UmVmLnBhcmVudE5vZGUpIHtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudFJlZik7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL3dlYnNldHVwLnBsdWdpbnMuanMnO1xuaW1wb3J0ICogYXMgaW50ZXJmYWNlcyBmcm9tICcuL2ludGVyZmFjZXMvaW5kZXguanMnO1xuXG5pbXBvcnQgeyBUYWcgfSBmcm9tICcuL3dlYnNldHVwLmNsYXNzZXMudGFnLmpzJztcblxuZXhwb3J0IGNsYXNzIEpzb25MZFRhZyBleHRlbmRzIFRhZyB7XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQ29tcGFueUpzb25MZChjb21wYW55RGF0YUFyZzogcGx1Z2lucy50c2NsYXNzLmJ1c2luZXNzLklDb21wYW55KSB7XG4gICAgLy8gU1RBVElDXG4gICAgLy8gbGV0cyBjYXJlIGFib3V0IGxpbmtlZCBkYXRhXG4gICAgY29uc3QgY29tcGFueUxkID0ge1xuICAgICAgJ0Bjb250ZXh0JzogJ2h0dHBzOi8vc2NoZW1hLm9yZycsXG4gICAgICAnQHR5cGUnOiAnQ29ycG9yYXRpb24nLFxuICAgICAgbmFtZTogY29tcGFueURhdGFBcmcubmFtZSxcbiAgICAgIGFsdGVybmF0ZU5hbWU6IGNvbXBhbnlEYXRhQXJnLm5hbWUucmVwbGFjZSgnIEdtYkgnLCAnJyksXG4gICAgICB1cmw6IGNvbXBhbnlEYXRhQXJnLmNvbnRhY3Qud2Vic2l0ZSxcbiAgICAgIGxvZ286IGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QubG9nb1VybCxcbiAgICAgIGNvbnRhY3RQb2ludDoge1xuICAgICAgICAnQHR5cGUnOiAnQ29udGFjdFBvaW50JyxcbiAgICAgICAgdGVsZXBob25lOiBjb21wYW55RGF0YUFyZy5jb250YWN0LnBob25lLFxuICAgICAgICBjb250YWN0VHlwZTogJ2N1c3RvbWVyIHNlcnZpY2UnLFxuICAgICAgICBhcmVhU2VydmVkOiAnREUnLFxuICAgICAgICBhdmFpbGFibGVMYW5ndWFnZTogWydlbicsICdHZXJtYW4nXSxcbiAgICAgIH0sXG4gICAgICBzYW1lQXM6IFtdLFxuICAgIH07XG5cbiAgICBpZiAoY29tcGFueURhdGFBcmcuY29udGFjdC5mYWNlYm9va1VybCkge1xuICAgICAgY29tcGFueUxkLnNhbWVBcy5wdXNoKGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QuZmFjZWJvb2tVcmwpO1xuICAgIH1cblxuICAgIGlmIChjb21wYW55RGF0YUFyZy5jb250YWN0LnR3aXR0ZXJVcmwpIHtcbiAgICAgIGNvbXBhbnlMZC5zYW1lQXMucHVzaChjb21wYW55RGF0YUFyZy5jb250YWN0LnR3aXR0ZXJVcmwpO1xuICAgIH1cblxuICAgIGNvbnN0IGxkVGFnID0gbmV3IEpzb25MZFRhZyhjb21wYW55TGQpO1xuICAgIHJldHVybiBsZFRhZztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlTmV3c0FydGljbGVKc29uTGQobmV3c0FydGljbGVBcmc6IHBsdWdpbnMudHNjbGFzcy5jb250ZW50LklBcnRpY2xlKSB7XG4gICAgY29uc3QgbmV3c0FydGljbGVMZCA9IHtcbiAgICAgICdAY29udGV4dCc6ICdodHRwczovL3NjaGVtYS5vcmcnLFxuICAgICAgJ0B0eXBlJzogJ05ld3NBcnRpY2xlJyxcbiAgICAgIG1haW5FbnRpdHlPZlBhZ2U6IHtcbiAgICAgICAgJ0B0eXBlJzogJ1dlYlBhZ2UnLFxuICAgICAgICAnQGlkJzogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICB9LFxuICAgICAgaGVhZGxpbmU6ICdBcnRpY2xlIGhlYWRsaW5lJyxcbiAgICAgIGltYWdlOiBbbmV3c0FydGljbGVBcmcuZmVhdHVyZWRJbWFnZVVybF0sXG4gICAgICBkYXRlUHVibGlzaGVkOiBuZXcgRGF0ZShuZXdzQXJ0aWNsZUFyZy50aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlTW9kaWZpZWQ6IG5ldyBEYXRlKG5ld3NBcnRpY2xlQXJnLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF1dGhvcjoge1xuICAgICAgICAnQHR5cGUnOiAnUGVyc29uJyxcbiAgICAgICAgbmFtZTogYCR7bmV3c0FydGljbGVBcmcuYXV0aG9yLmZpcnN0TmFtZX0gJHtuZXdzQXJ0aWNsZUFyZy5hdXRob3Iuc3VyTmFtZX1gLFxuICAgICAgfSxcbiAgICAgIHB1Ymxpc2hlcjoge1xuICAgICAgICAnQHR5cGUnOiAnT3JnYW5pemF0aW9uJyxcbiAgICAgICAgbmFtZTogbmV3c0FydGljbGVBcmcuYXV0aG9yLnN1ck5hbWUsIC8vIFRPRE9cbiAgICAgICAgbG9nbzoge1xuICAgICAgICAgICdAdHlwZSc6ICdJbWFnZU9iamVjdCcsXG4gICAgICAgICAgdXJsOiBuZXdzQXJ0aWNsZUFyZy5hdXRob3Iuc3VyTmFtZSwgLy8gVE9ET1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiBuZXdzQXJ0aWNsZUFyZy5hdXRob3IuZmlyc3ROYW1lLFxuICAgIH07XG4gICAgY29uc3QgbGRUYWcgPSBuZXcgSnNvbkxkVGFnKG5ld3NBcnRpY2xlTGQpO1xuICAgIHJldHVybiBsZFRhZztcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVByb2R1Y3RKc29uTGQoXG4gICAgcHJvZHVjdEFyZzogcGx1Z2lucy50c2NsYXNzLnNhYXMuSVByb2R1Y3QsXG4gICAgcHVibGlzaGVyQXJnOiBwbHVnaW5zLnRzY2xhc3MuYnVzaW5lc3MuSUNvbXBhbnlcbiAgKSB7XG4gICAgY29uc3QgcHJvZHVjdExkID0ge1xuICAgICAgJ0Bjb250ZXh0JzogJ2h0dHBzOi8vc2NoZW1hLm9yZycsXG4gICAgICAnQHR5cGUnOiAnU29mdHdhcmVBcHBsaWNhdGlvbicsXG4gICAgICBuYW1lOiBwcm9kdWN0QXJnLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdEFyZy5kZXNjcmlwdGlvbixcbiAgICAgIG9wZXJhdGluZ1N5c3RlbTogcHJvZHVjdEFyZy5vcyxcbiAgICAgIGFwcGxpY2F0aW9uQ2F0ZWdvcnk6IHByb2R1Y3RBcmcuY2F0ZWdvcnksXG4gICAgICBvZmZlcnM6IHtcbiAgICAgICAgJ0B0eXBlJzogJ09mZmVyJyxcbiAgICAgICAgbmFtZTogJ1VzZXItYmFzZWQgUGxhbicsXG4gICAgICAgIHByaWNlU3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgICdAdHlwZSc6ICdQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbicsXG4gICAgICAgICAgdmFsdWVOYW1lOiAnTnVtYmVyIG9mIFVzZXJzJyxcbiAgICAgICAgICB2YWx1ZVJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIHByaWNlOiAnNC45OScsXG4gICAgICAgICAgcHJpY2VDdXJyZW5jeTogJ0VVUicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcHVibGlzaGVyOiB0aGlzLmNyZWF0ZUNvbXBhbnlKc29uTGQocHVibGlzaGVyQXJnKS5lbGVtZW50UmVmLnRleHRDb250ZW50LFxuICAgICAgc2NyZWVuc2hvdDogJ2h0dHBzOi8vd3d3LnNvY2lhbC5pby9zY3JlZW5zaG90LnBuZycsXG4gICAgICB1cmw6ICdodHRwczovL3d3dy5zb2NpYWwuaW8vJyxcbiAgICB9O1xuICAgIGNvbnN0IGxkVGFnID0gbmV3IEpzb25MZFRhZyhwcm9kdWN0TGQpO1xuICAgIHJldHVybiBsZFRhZztcbiAgfVxuXG4gIC8vIElOU1RBTkNFXG4gIGNvbnN0cnVjdG9yKGxkT2JqZWN0QXJnOiBhbnkpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IGpzb25MZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBqc29uTGRFbGVtZW50LnR5cGUgPSAnYXBwbGljYXRpb24vbGQranNvbic7XG4gICAganNvbkxkRWxlbWVudC50ZXh0ID0gSlNPTi5zdHJpbmdpZnkobGRPYmplY3RBcmcpO1xuICAgIHRoaXMuZWxlbWVudFJlZiA9IGpzb25MZEVsZW1lbnQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vd2Vic2V0dXAucGx1Z2lucy5qcyc7XG5pbXBvcnQgeyBUYWcgfSBmcm9tICcuL3dlYnNldHVwLmNsYXNzZXMudGFnLmpzJztcblxuZXhwb3J0IGNsYXNzIE9wZW5ncmFwaFRhZyBleHRlbmRzIFRhZyB7XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlTmV3c0FydGljbGVPZ1RhZ3MobmV3c0FydGljbGVBcmc6IHBsdWdpbnMudHNjbGFzcy5jb250ZW50LklBcnRpY2xlKSB7XG4gICAgY29uc3QgdGFnQXJyYXk6IE9wZW5ncmFwaFRhZ1tdID0gW107XG4gICAgdGFnQXJyYXkucHVzaChuZXcgT3BlbmdyYXBoVGFnKCdvZzp1cmwnLCBuZXdzQXJ0aWNsZUFyZy51cmwpKTtcbiAgICB0YWdBcnJheS5wdXNoKG5ldyBPcGVuZ3JhcGhUYWcoJ29nOnRpdGxlJywgbmV3c0FydGljbGVBcmcudGl0bGUpKTtcbiAgICB0YWdBcnJheS5wdXNoKG5ldyBPcGVuZ3JhcGhUYWcoJ29nOmRlc2NyaXB0aW9uJywgbmV3c0FydGljbGVBcmcuY29udGVudCkpO1xuICAgIHRhZ0FycmF5LnB1c2gobmV3IE9wZW5ncmFwaFRhZygnb2c6aW1hZ2UnLCBuZXdzQXJ0aWNsZUFyZy5mZWF0dXJlZEltYWdlVXJsKSk7XG4gICAgcmV0dXJuIHRhZ0FycmF5O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVQcm9kdWN0T2dUYWdzKHByb2R1Y3RBcmc6IHBsdWdpbnMudHNjbGFzcy5zYWFzLklQcm9kdWN0KSB7XG4gICAgY29uc3QgdGFnQXJyYXk6IE9wZW5ncmFwaFRhZ1tdID0gW107XG4gICAgdGFnQXJyYXkucHVzaChuZXcgT3BlbmdyYXBoVGFnKCdvZzp1cmwnLCBnbG9iYWxUaGlzLmxvY2F0aW9uLmhyZWYpKTtcbiAgICB0YWdBcnJheS5wdXNoKG5ldyBPcGVuZ3JhcGhUYWcoJ29nOnRpdGxlJywgYCR7cHJvZHVjdEFyZy5uYW1lfSAtICR7cHJvZHVjdEFyZy5zbG9nYW59YCkpO1xuICAgIHRhZ0FycmF5LnB1c2gobmV3IE9wZW5ncmFwaFRhZygnb2c6c2l0ZV9uYW1lJywgcHJvZHVjdEFyZy5uYW1lKSlcbiAgICB0YWdBcnJheS5wdXNoKG5ldyBPcGVuZ3JhcGhUYWcoJ29nOmRlc2NyaXB0aW9uJywgcHJvZHVjdEFyZy5kZXNjcmlwdGlvbikpO1xuICAgIHRhZ0FycmF5LnB1c2gobmV3IE9wZW5ncmFwaFRhZygnb2c6aW1hZ2UnLCBwcm9kdWN0QXJnLmxvZ29MaW5rKSk7XG4gICAgcmV0dXJuIHRhZ0FycmF5O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcGVydHlOYW1lQXJnOiBzdHJpbmcsIGNvbnRlbnRBcmc6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3Qgb3BlbkdyYXBoRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTtcbiAgICBvcGVuR3JhcGhFbGVtZW50LnNldEF0dHJpYnV0ZSgncHJvcGVydHknLCBwcm9wZXJ0eU5hbWVBcmcpO1xuICAgIG9wZW5HcmFwaEVsZW1lbnQuY29udGVudCA9IGNvbnRlbnRBcmc7XG4gICAgdGhpcy5lbGVtZW50UmVmID0gb3BlbkdyYXBoRWxlbWVudDtcbiAgfVxufVxuIiwgImltcG9ydCB7IFRhZyB9IGZyb20gJy4vd2Vic2V0dXAuY2xhc3Nlcy50YWcuanMnO1xuaW1wb3J0IHsgSnNvbkxkVGFnIH0gZnJvbSAnLi93ZWJzZXR1cC5jbGFzc2VzLnRhZy5qc29ubGR0YWcuanMnO1xuaW1wb3J0IHsgT3BlbmdyYXBoVGFnIH0gZnJvbSAnLi93ZWJzZXR1cC5jbGFzc2VzLnRhZy5vcGVuZ3JhcGh0YWcuanMnO1xuaW1wb3J0IHsgVGFnTWFuYWdlciB9IGZyb20gJy4vd2Vic2V0dXAuY2xhc3Nlcy50YWdtYW5hZ2VyLmpzJztcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi93ZWJzZXR1cC5wbHVnaW5zLmpzJztcblxuZXhwb3J0IHR5cGUgVEJhc2VMZXZlbFR5cGUgPSAnZ2xvYmFsJyB8ICdiYXNlJyB8ICdzdWJwYWdlJztcblxuZXhwb3J0IHR5cGUgVExldmVsU3RhdGUgPSAnZW5hYmxlZCcgfCAnZGlzYWJsZWQnO1xuXG5leHBvcnQgY2xhc3MgVGFnTGV2ZWwge1xuICBwdWJsaWMgdGFnTWFuYWdlclJlZjogVGFnTWFuYWdlcjtcblxuICBwcml2YXRlIHRpdGxlU3RvcmU6IHN0cmluZztcbiAgcHVibGljIHNldCB0aXRsZSh0aXRsZUFyZzogc3RyaW5nKSB7XG4gICAgdGhpcy50aXRsZVN0b3JlID0gdGl0bGVBcmc7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdlbmFibGVkJykge1xuICAgICAgZG9jdW1lbnQudGl0bGUgPSB0aGlzLnRpdGxlU3RvcmU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGVTdG9yZTtcbiAgfVxuXG4gIHB1YmxpYyB0eXBlOiBUQmFzZUxldmVsVHlwZTtcbiAgcHVibGljIHRhZ3M6IFRhZ1tdID0gW107XG5cbiAgcHVibGljIHN0YXRlOiBUTGV2ZWxTdGF0ZSA9ICdkaXNhYmxlZCc7XG5cbiAgY29uc3RydWN0b3IodGFnTWFuYWdlclJlZkFyZzogVGFnTWFuYWdlciwgbGV2ZWxUeXBlOiBUQmFzZUxldmVsVHlwZSkge1xuICAgIHRoaXMudGFnTWFuYWdlclJlZiA9IHRhZ01hbmFnZXJSZWZBcmc7XG4gIH1cblxuICBwdWJsaWMgYWRkVGFnKHRhZ0FyZzogVGFnIHwgVGFnW10pIHtcbiAgICBpZiAodGFnQXJnIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGZvciAoY29uc3QgdGFnQXJnMiBvZiB0YWdBcmcpIHtcbiAgICAgICAgdGhpcy5hZGRUYWcodGFnQXJnMik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFncy5wdXNoKHRhZ0FyZyk7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2VuYWJsZWQnKSB7XG4gICAgICAgIHRhZ0FyZy5hcHBlbmRUb0RvbSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRDb21wYW55SW5mbyhjb21wYW55RGF0YUFyZzogcGx1Z2lucy50c2NsYXNzLmJ1c2luZXNzLklDb21wYW55KSB7XG4gICAgdGhpcy5hZGRUYWcoSnNvbkxkVGFnLmNyZWF0ZUNvbXBhbnlKc29uTGQoY29tcGFueURhdGFBcmcpKTtcblxuICAgIC8vIGxldHMgY2FyZSBhYm91dCBvcGVuIGdyYXBoXG4gICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygnb2c6dHlwZScsICdidXNpbmVzcy5idXNpbmVzcycpKTtcbiAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCdvZzp0aXRsZScsIGNvbXBhbnlEYXRhQXJnLm5hbWUpKTtcbiAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCdvZzp1cmwnLCBjb21wYW55RGF0YUFyZy5jb250YWN0LndlYnNpdGUpKTtcbiAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCdvZzppbWFnZScsIGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QubG9nb1VybCkpO1xuICAgIHRoaXMuYWRkVGFnKFxuICAgICAgbmV3IE9wZW5ncmFwaFRhZyhcbiAgICAgICAgJ2J1c2luZXNzOmNvbnRhY3RfZGF0YTpzdHJlZXRfYWRkcmVzcycsXG4gICAgICAgIGAke2NvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5zdHJlZXROYW1lfSAke2NvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5ob3VzZU51bWJlcn1gXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLmFkZFRhZyhcbiAgICAgIG5ldyBPcGVuZ3JhcGhUYWcoJ2J1c2luZXNzOmNvbnRhY3RfZGF0YTpsb2NhbGl0eScsIGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5wb3N0YWxDb2RlKVxuICAgICk7XG4gICAgdGhpcy5hZGRUYWcoXG4gICAgICBuZXcgT3BlbmdyYXBoVGFnKCdidXNpbmVzczpjb250YWN0X2RhdGE6cmVnaW9uJywgY29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLmNpdHkpXG4gICAgKTtcbiAgICB0aGlzLmFkZFRhZyhcbiAgICAgIG5ldyBPcGVuZ3JhcGhUYWcoXG4gICAgICAgICdidXNpbmVzczpjb250YWN0X2RhdGE6cG9zdGFsX2NvZGUnLFxuICAgICAgICBjb21wYW55RGF0YUFyZy5jb250YWN0LmFkZHJlc3MucG9zdGFsQ29kZVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5hZGRUYWcoXG4gICAgICBuZXcgT3BlbmdyYXBoVGFnKCdidXNpbmVzczpjb250YWN0X2RhdGE6Y291bnRyeV9uYW1lJywgY29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLmNvdW50cnkpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGROZXdzQXJ0aWNsZUluZm8oYXJ0aWNsZUFyZzogcGx1Z2lucy50c2NsYXNzLmNvbnRlbnQuSUFydGljbGUpIHtcbiAgICB0aGlzLmFkZFRhZyhKc29uTGRUYWcuY3JlYXRlTmV3c0FydGljbGVKc29uTGQoYXJ0aWNsZUFyZykpO1xuICAgIHRoaXMuYWRkVGFnKE9wZW5ncmFwaFRhZy5jcmVhdGVOZXdzQXJ0aWNsZU9nVGFncyhhcnRpY2xlQXJnKSk7XG4gIH1cblxuICBwdWJsaWMgYWRkUHJvZHVjdEluZm8ocHJvZHVjdEFyZzogcGx1Z2lucy50c2NsYXNzLnNhYXMuSVByb2R1Y3QsIGNvbXBhbnlBcmc6IHBsdWdpbnMudHNjbGFzcy5idXNpbmVzcy5JQ29tcGFueSkge1xuICAgIHRoaXMuYWRkVGFnKEpzb25MZFRhZy5jcmVhdGVQcm9kdWN0SnNvbkxkKHByb2R1Y3RBcmcsIGNvbXBhbnlBcmcpKTtcbiAgICB0aGlzLmFkZFRhZyhPcGVuZ3JhcGhUYWcuY3JlYXRlUHJvZHVjdE9nVGFncyhwcm9kdWN0QXJnKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW5hYmxlKCkge1xuICAgIGlmICh0aGlzLnRpdGxlKSB7XG4gICAgICBkb2N1bWVudC50aXRsZSA9IHRoaXMudGl0bGU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGFnQXJnIG9mIHRoaXMudGFncykge1xuICAgICAgdGFnQXJnLmFwcGVuZFRvRG9tKCk7XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnZW5hYmxlZCc7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGlzYWJsZSgpIHtcbiAgICBmb3IgKGNvbnN0IHRhZ0FyZyBvZiB0aGlzLnRhZ3MpIHtcbiAgICAgIHRhZ0FyZy5yZW1vdmVGcm9tRG9tKCk7XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnZGlzYWJsZWQnO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgVGFnIH0gZnJvbSAnLi93ZWJzZXR1cC5jbGFzc2VzLnRhZy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBNZXRhVGFnIGV4dGVuZHMgVGFnIHtcbiAgY29uc3RydWN0b3IobWV0YU5hbWVBcmc6IHN0cmluZywgY29udGVudEFyZzogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCBtZXRhRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTtcbiAgICBtZXRhRWxlbWVudC5uYW1lID0gbWV0YU5hbWVBcmc7XG4gICAgbWV0YUVsZW1lbnQuY29udGVudCA9IGNvbnRlbnRBcmc7XG4gICAgdGhpcy5lbGVtZW50UmVmID0gbWV0YUVsZW1lbnQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBUYWdMZXZlbCB9IGZyb20gJy4vd2Vic2V0dXAuY2xhc3Nlcy50YWdsZXZlbC5qcyc7XG5pbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vd2Vic2V0dXAucGx1Z2lucy5qcyc7XG5pbXBvcnQgKiBhcyBpbnRlcmZhY2VzIGZyb20gJy4vaW50ZXJmYWNlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBNZXRhVGFnIH0gZnJvbSAnLi93ZWJzZXR1cC5jbGFzc2VzLnRhZy5tZXRhdGFnLmpzJztcbmltcG9ydCB7IEpzb25MZFRhZyB9IGZyb20gJy4vd2Vic2V0dXAuY2xhc3Nlcy50YWcuanNvbmxkdGFnLmpzJztcbmltcG9ydCB7IE9wZW5ncmFwaFRhZyB9IGZyb20gJy4vd2Vic2V0dXAuY2xhc3Nlcy50YWcub3BlbmdyYXBodGFnLmpzJztcblxuZXhwb3J0IGNsYXNzIFRhZ01hbmFnZXIge1xuICBwdWJsaWMgZ2xvYmFsTGV2ZWw6IFRhZ0xldmVsID0gbmV3IFRhZ0xldmVsKHRoaXMsICdnbG9iYWwnKTtcblxuICBwdWJsaWMgYmFzZUxldmVsOiBUYWdMZXZlbCA9IG5ldyBUYWdMZXZlbCh0aGlzLCAnYmFzZScpO1xuXG4gIHB1YmxpYyBhY3RpdmVMZXZlbDogVGFnTGV2ZWw7XG5cbiAgcHVibGljIGFzeW5jIHNldHVwKG1ldGFPYmplY3RBcmc6IGludGVyZmFjZXMuSU1ldGFPYmplY3QpIHtcbiAgICAvLyBnbG9iYWwgdGFnIGxldmVsXG4gICAgdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoJ2dvb2dsZScsICdub3RyYW5zbGF0ZScpKTtcbiAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygncmV2aXNpdC1hZnRlcicsICcxIGRheXMnKSk7XG5cbiAgICBpZiAobWV0YU9iamVjdEFyZy50d2l0dGVySGFuZGxlKSB7XG4gICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygndHdpdHRlcjpjYXJkJywgJ3N1bW1hcnlfbGFyZ2VfaW1hZ2UnKSk7XG4gICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygndHdpdHRlcjpzaXRlJywgbWV0YU9iamVjdEFyZy50d2l0dGVySGFuZGxlKSk7XG4gICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygndHdpdHRlcjpjcmVhdG9yJywgbWV0YU9iamVjdEFyZy50d2l0dGVySGFuZGxlKSk7XG4gICAgfVxuXG4gICAgLy8gYmFzZSB0YWcgbGV2ZWxcbiAgICB0aGlzLmJhc2VMZXZlbC50aXRsZSA9IG1ldGFPYmplY3RBcmcudGl0bGU7XG4gICAgaWYgKG1ldGFPYmplY3RBcmcuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuYmFzZUxldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygnZGVzY3JpcHRpb24nLCBtZXRhT2JqZWN0QXJnLmRlc2NyaXB0aW9uKSk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFPYmplY3RBcmcuY2Fub25pY2FsRG9tYWluKSB7XG4gICAgICB0aGlzLmJhc2VMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoJ2Nhbm9uaWNhbCcsIG1ldGFPYmplY3RBcmcuY2Fub25pY2FsRG9tYWluKSk7XG4gICAgfVxuXG5cbiAgICAvLyBqc29uIGxkXG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIG1ldGFPYmplY3RBcmcubGRDb21wYW55ICYmICFtZXRhT2JqZWN0QXJnLmxkUHJvZHVjdDpcbiAgICAgICAgdGhpcy5iYXNlTGV2ZWwuYWRkQ29tcGFueUluZm8obWV0YU9iamVjdEFyZy5sZENvbXBhbnkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgISFtZXRhT2JqZWN0QXJnLmxkUHJvZHVjdDpcbiAgICAgICAgdGhpcy5iYXNlTGV2ZWwuYWRkUHJvZHVjdEluZm8obWV0YU9iamVjdEFyZy5sZFByb2R1Y3QsIG1ldGFPYmplY3RBcmcubGRDb21wYW55KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5nbG9iYWxMZXZlbC5lbmFibGUoKTtcbiAgICB0aGlzLmFjdGl2ZUxldmVsID0gdGhpcy5iYXNlTGV2ZWw7XG4gICAgYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5lbmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRTdWJQYWdlTGV2ZWwobWV0YU9iamVjdEFyZzogaW50ZXJmYWNlcy5JTWV0YU9iamVjdCkge1xuICAgIGNvbnN0IHN1YlBhZ2VMZXZlbCA9IG5ldyBUYWdMZXZlbCh0aGlzLCAnc3VicGFnZScpO1xuICAgIHN1YlBhZ2VMZXZlbC50aXRsZSA9IG1ldGFPYmplY3RBcmcudGl0bGU7XG4gICAgaWYgKG1ldGFPYmplY3RBcmcuZGVzY3JpcHRpb24pIHtcbiAgICAgIHN1YlBhZ2VMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoJ2Rlc2NyaXB0aW9uJywgbWV0YU9iamVjdEFyZy5kZXNjcmlwdGlvbikpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmRpc2FibGUoKTtcbiAgICB0aGlzLmFjdGl2ZUxldmVsID0gc3ViUGFnZUxldmVsO1xuICAgIGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZW5hYmxlKCk7XG4gICAgcmV0dXJuIHN1YlBhZ2VMZXZlbDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXZlcnRUb0Jhc2VMZXZlbCgpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVMZXZlbCAhPT0gdGhpcy5iYXNlTGV2ZWwpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5hY3RpdmVMZXZlbCA9IHRoaXMuYmFzZUxldmVsO1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5lbmFibGUoKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vd2Vic2V0dXAucGx1Z2lucy5qcyc7XG5pbXBvcnQgKiBhcyBpbnRlcmZhY2VzIGZyb20gJy4vaW50ZXJmYWNlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBUYWdNYW5hZ2VyIH0gZnJvbSAnLi93ZWJzZXR1cC5jbGFzc2VzLnRhZ21hbmFnZXIuanMnO1xuaW1wb3J0IHsgVGFnTGV2ZWwgfSBmcm9tICcuL3dlYnNldHVwLmNsYXNzZXMudGFnbGV2ZWwuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJTZXR1cENvbnN0cnVjdG9yT3B0aW9ucyB7XG4gIG1ldGFPYmplY3Q6IGludGVyZmFjZXMuSU1ldGFPYmplY3Q7XG4gIHNtYXJ0c3NyV2FpdEZvclJlYWR5U2lnbmFsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiB0aGUgbWFpbiBXZWJTZXR1cCBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgV2ViU2V0dXAge1xuICBwdWJsaWMgdGFnTWFuYWdlcjogVGFnTWFuYWdlciA9IG5ldyBUYWdNYW5hZ2VyKCk7XG4gIHB1YmxpYyBvcHRpb25zOiBJV2ViU2V0dXBDb25zdHJ1Y3Rvck9wdGlvbnM7XG5cbiAgLy8gcHJpdmF0ZSBkZWZlcnJlZHNcbiAgcHJpdmF0ZSByZWFkeURlZmVycmVkID0gcGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTtcbiAgcHJpdmF0ZSByZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQgPSBwbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpO1xuXG4gIC8vIHB1YmxpYyBwcm9taXNlc1xuICBwdWJsaWMgcmVhZHlQcm9taXNlID0gdGhpcy5yZWFkeURlZmVycmVkLnByb21pc2U7XG4gIHB1YmxpYyByZWFkeUZvclNtYXJ0c3NyUHJvbWlzZSA9IHRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnByb21pc2U7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmc6IElXZWJTZXR1cENvbnN0cnVjdG9yT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7XG4gICAgdGhpcy5zZXR1cCgpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5yZWFkeURlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLnNtYXJ0c3NyV2FpdEZvclJlYWR5U2lnbmFsKSB7XG4gICAgICAgIHRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbiBhc3luYyBzZXR1cCBjYWxsZWQgYnkgdGhlIGNvbnN0cnVjdG9yXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0dXAob3B0aW9uc0FyZz86IElXZWJTZXR1cENvbnN0cnVjdG9yT3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zQXJnKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnRhZ01hbmFnZXIuc2V0dXAodGhpcy5vcHRpb25zLm1ldGFPYmplY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldmVydHMgdGhlIGFjdGl2ZSBsZXZlbCBhbmQgcmV0dXJucyB0byB0aGUgYmFzZSBsZXZlbFxuICAgKi9cbiAgcHVibGljIHJldmVydFRvQmFzZUxldmVsKCkge1xuICAgIHRoaXMudGFnTWFuYWdlci5yZXZlcnRUb0Jhc2VMZXZlbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldHMgYSBzdWJwYWdlXG4gICAqIEBwYXJhbSBtZXRhT2JqZWN0QXJnXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0U3ViTGV2ZWwobWV0YU9iamVjdEFyZzogaW50ZXJmYWNlcy5JTWV0YU9iamVjdCkge1xuICAgIGNvbnN0IHN1YkxldmVsID0gYXdhaXQgdGhpcy50YWdNYW5hZ2VyLnNldFN1YlBhZ2VMZXZlbChtZXRhT2JqZWN0QXJnKTtcbiAgICByZXR1cm4gc3ViTGV2ZWw7XG4gIH1cblxuICAvKipcbiAgICogZmxhc2hlcyB0aGUgdGl0bGUgd2l0aCB0aGUgZ2l2ZW4gdGV4dFxuICAgKiBAcGFyYW0gZmxhc2hUZXh0QXJnXG4gICAqL1xuICBwdWJsaWMgZmxhc2hUaXRsZShmbGFzaFRleHRBcmc6IHN0cmluZykge31cblxuICAvKipcbiAgICogaW5mb3JtcyBzbWFydHNzciB0aGF0IHRoZSBwYWdlIGlzIHJlYWR5IHRvIGJlIHJlbmRlcmVkXG4gICAqL1xuICBwdWJsaWMgaW5mb3JtUmVhZHlGb3JTbWFydHNzcigpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zbWFydHNzcldhaXRGb3JSZWFkeVNpZ25hbCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFlvdSBoYXZlIG5vdCBpbmRpY2F0ZWQgdGhhdCB5b3UgaW5mb3JtIHNtYXJ0c3NyIGJ5IGEgZGVkaWNhdGVkIHNpZ25hbCEgUGxlYXNlIGNvbnNpZGVyIGRvaW5nIHNvIWBcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnJlc29sdmUoKTtcbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi93ZWJzZXR1cC5wbHVnaW5zLmpzJztcblxuLyoqXG4gKiBhIHRpdGxlIHByb3h5IGNsYXNzXG4gKiAtLT4gdG8gYmUgdXNlZCBpbiB0aGUgZnV0dXJlIHdoZW4gZmxhc2hpbmcgdGl0bGVzIGlzIHN1cHBvcnRlZFxuICovXG5leHBvcnQgY2xhc3MgVGl0bGUge31cbiIsICJleHBvcnQgKiBmcm9tICcuL3dlYnNldHVwLmNsYXNzZXMud2Vic2V0dXAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWJzZXR1cC5jbGFzc2VzLnRhZy5tZXRhdGFnLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vd2Vic2V0dXAuY2xhc3Nlcy50YWcub3BlbmdyYXBodGFnLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vd2Vic2V0dXAuY2xhc3Nlcy50YWcuanNvbmxkdGFnLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vd2Vic2V0dXAuY2xhc3Nlcy50aXRsZS5qcyc7XG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAie1xuICBcIm5hbWVcIjogXCJsZW5pc1wiLFxuICBcInZlcnNpb25cIjogXCIxLjMuMTdcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkhvdyBzbW9vdGggc2Nyb2xsIHNob3VsZCBiZVwiLFxuICBcInR5cGVcIjogXCJtb2R1bGVcIixcbiAgXCJzaWRlRWZmZWN0c1wiOiBmYWxzZSxcbiAgXCJhdXRob3JcIjogXCJkYXJrcm9vbS5lbmdpbmVlcmluZ1wiLFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGFya3Jvb21lbmdpbmVlcmluZy9sZW5pcy5naXRcIlxuICB9LFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2Rhcmtyb29tZW5naW5lZXJpbmcvbGVuaXMvaXNzdWVzXCJcbiAgfSxcbiAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9kYXJrcm9vbWVuZ2luZWVyaW5nL2xlbmlzXCIsXG4gIFwiZnVuZGluZ1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0aHViXCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZGFya3Jvb21lbmdpbmVlcmluZ1wiXG4gIH0sXG4gIFwia2V5d29yZHNcIjogW1xuICAgIFwic2Nyb2xsXCIsXG4gICAgXCJzbW9vdGhcIixcbiAgICBcImxlbmlzXCIsXG4gICAgXCJyZWFjdFwiLFxuICAgIFwidnVlXCJcbiAgXSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcImJ1aWxkXCI6IFwicG5wbSBidWlsZDpjb3JlICYmIHBucG0gYnVpbGQ6YWxsXCIsXG4gICAgXCJidWlsZDpjb3JlXCI6IFwidHN1cCAtLWNvbmZpZyB0c3VwLmNvcmUudHNcIixcbiAgICBcImJ1aWxkOmFsbFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInBucG0gcnVuIC13IC0tcGFyYWxsZWwgL15kZXY6LiovXCIsXG4gICAgXCJkZXY6YnVpbGRcIjogXCJ0c3VwIC0td2F0Y2hcIixcbiAgICBcImRldjpwbGF5Z3JvdW5kXCI6IFwicG5wbSAtLWZpbHRlciBwbGF5Z3JvdW5kIGRldlwiLFxuICAgIFwiZGV2Om51eHRcIjogXCJwbnBtIC0tZmlsdGVyIHBsYXlncm91bmQtbnV4dCBkZXZcIixcbiAgICBcInJlYWRtZVwiOiBcIm5vZGUgLi9zY3JpcHRzL3VwZGF0ZS1yZWFkbWUuanNcIixcbiAgICBcInZlcnNpb246ZnJhbWVyXCI6IFwibnBtIHZlcnNpb24gcHJlcmVsZWFzZSAtLXByZWlkIGZyYW1lciAtLWZvcmNlIC0tbm8tZ2l0LXRhZy12ZXJzaW9uXCIsXG4gICAgXCJ2ZXJzaW9uOmRldlwiOiBcIm5wbSB2ZXJzaW9uIHByZXJlbGVhc2UgLS1wcmVpZCBkZXYgLS1mb3JjZSAtLW5vLWdpdC10YWctdmVyc2lvblwiLFxuICAgIFwidmVyc2lvbjpwYXRjaFwiOiBcIm5wbSB2ZXJzaW9uIHBhdGNoIC0tZm9yY2UgLS1uby1naXQtdGFnLXZlcnNpb25cIixcbiAgICBcInZlcnNpb246bWlub3JcIjogXCJucG0gdmVyc2lvbiBtaW5vciAtLWZvcmNlIC0tbm8tZ2l0LXRhZy12ZXJzaW9uXCIsXG4gICAgXCJ2ZXJzaW9uOm1ham9yXCI6IFwibnBtIHZlcnNpb24gbWFqb3IgLS1mb3JjZSAtLW5vLWdpdC10YWctdmVyc2lvblwiLFxuICAgIFwicG9zdHZlcnNpb25cIjogXCJwbnBtIGJ1aWxkICYmIHBucG0gcmVhZG1lXCIsXG4gICAgXCJwdWJsaXNoOmRldlwiOiBcIm5wbSBwdWJsaXNoIC0tdGFnIGRldlwiLFxuICAgIFwicHVibGlzaDpmcmFtZXJcIjogXCJucG0gcHVibGlzaCAtLXRhZyBmcmFtZXJcIixcbiAgICBcInB1Ymxpc2g6bWFpblwiOiBcIm5wbSBwdWJsaXNoXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJkaXN0XCJcbiAgXSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwidGVyc2VyXCI6IFwiXjUuMzcuMFwiLFxuICAgIFwidHN1cFwiOiBcIl44LjMuNVwiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjcuM1wiXG4gIH0sXG4gIFwicGVlckRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJyZWFjdFwiOiBcIj49MTcuMC4wXCIsXG4gICAgXCJ2dWVcIjogXCI+PTMuMC4wXCIsXG4gICAgXCJAbnV4dC9raXRcIjogXCI+PTMuMC4wXCJcbiAgfSxcbiAgXCJwZWVyRGVwZW5kZW5jaWVzTWV0YVwiOiB7XG4gICAgXCJyZWFjdFwiOiB7XG4gICAgICBcIm9wdGlvbmFsXCI6IHRydWVcbiAgICB9LFxuICAgIFwidnVlXCI6IHtcbiAgICAgIFwib3B0aW9uYWxcIjogdHJ1ZVxuICAgIH0sXG4gICAgXCJAbnV4dC9raXRcIjoge1xuICAgICAgXCJvcHRpb25hbFwiOiB0cnVlXG4gICAgfVxuICB9LFxuICBcInVucGtnXCI6IFwiLi9kaXN0L2xlbmlzLm1qc1wiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvbGVuaXMubWpzXCIsXG4gIFwibW9kdWxlXCI6IFwiLi9kaXN0L2xlbmlzLm1qc1wiLFxuICBcInR5cGVzXCI6IFwiLi9kaXN0L2xlbmlzLmQudHNcIixcbiAgXCJleHBvcnRzXCI6IHtcbiAgICBcIi5cIjoge1xuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9sZW5pcy5kLnRzXCIsXG4gICAgICBcImRlZmF1bHRcIjogXCIuL2Rpc3QvbGVuaXMubWpzXCJcbiAgICB9LFxuICAgIFwiLi9yZWFjdFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2xlbmlzLXJlYWN0LmQudHNcIixcbiAgICAgIFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9sZW5pcy1yZWFjdC5tanNcIlxuICAgIH0sXG4gICAgXCIuL3NuYXBcIjoge1xuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9sZW5pcy1zbmFwLmQudHNcIixcbiAgICAgIFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9sZW5pcy1zbmFwLm1qc1wiXG4gICAgfSxcbiAgICBcIi4vdnVlXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbGVuaXMtdnVlLmQudHNcIixcbiAgICAgIFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9sZW5pcy12dWUubWpzXCJcbiAgICB9LFxuICAgIFwiLi9udXh0XCI6IHtcbiAgICAgIFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9sZW5pcy12dWUtbnV4dC5tanNcIlxuICAgIH0sXG4gICAgXCIuL251eHQvcnVudGltZS8qXCI6IHtcbiAgICAgIFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9udXh0L3J1bnRpbWUvKi5tanNcIlxuICAgIH0sXG4gICAgXCIuL2Rpc3QvKlwiOiBcIi4vZGlzdC8qXCJcbiAgfVxufVxuIiwgIi8qKlxuICogQ2xhbXAgYSB2YWx1ZSBiZXR3ZWVuIGEgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZVxuICpcbiAqIEBwYXJhbSBtaW4gTWluaW11bSB2YWx1ZVxuICogQHBhcmFtIGlucHV0IFZhbHVlIHRvIGNsYW1wXG4gKiBAcGFyYW0gbWF4IE1heGltdW0gdmFsdWVcbiAqIEByZXR1cm5zIENsYW1wZWQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKG1pbjogbnVtYmVyLCBpbnB1dDogbnVtYmVyLCBtYXg6IG51bWJlcikge1xuICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihpbnB1dCwgbWF4KSlcbn1cblxuLyoqXG4gKiBUcnVuY2F0ZSBhIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBhIHNwZWNpZmllZCBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXNcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gdHJ1bmNhdGVcbiAqIEBwYXJhbSBkZWNpbWFscyBOdW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gdHJ1bmNhdGUgdG9cbiAqIEByZXR1cm5zIFRydW5jYXRlZCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGUodmFsdWU6IG51bWJlciwgZGVjaW1hbHMgPSAwKSB7XG4gIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvRml4ZWQoZGVjaW1hbHMpKVxufVxuXG4vKipcbiAqICBMaW5lYXJseSBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHR3byB2YWx1ZXMgdXNpbmcgYW4gYW1vdW50ICgwIDw9IHQgPD0gMSlcbiAqXG4gKiBAcGFyYW0geCBGaXJzdCB2YWx1ZVxuICogQHBhcmFtIHkgU2Vjb25kIHZhbHVlXG4gKiBAcGFyYW0gdCBBbW91bnQgdG8gaW50ZXJwb2xhdGUgKDAgPD0gdCA8PSAxKVxuICogQHJldHVybnMgSW50ZXJwb2xhdGVkIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKHg6IG51bWJlciwgeTogbnVtYmVyLCB0OiBudW1iZXIpIHtcbiAgcmV0dXJuICgxIC0gdCkgKiB4ICsgdCAqIHlcbn1cblxuLyoqXG4gKiBEYW1wIGEgdmFsdWUgb3ZlciB0aW1lIHVzaW5nIGEgZGFtcGluZyBmYWN0b3JcbiAqIHtAbGluayBodHRwOi8vd3d3LnJvcnlkcmlzY29sbC5jb20vMjAxNi8wMy8wNy9mcmFtZS1yYXRlLWluZGVwZW5kZW50LWRhbXBpbmctdXNpbmctbGVycC99XG4gKlxuICogQHBhcmFtIHggSW5pdGlhbCB2YWx1ZVxuICogQHBhcmFtIHkgVGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gbGFtYmRhIERhbXBpbmcgZmFjdG9yXG4gKiBAcGFyYW0gZHQgVGltZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZVxuICogQHJldHVybnMgRGFtcGVkIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYW1wKHg6IG51bWJlciwgeTogbnVtYmVyLCBsYW1iZGE6IG51bWJlciwgZGVsdGFUaW1lOiBudW1iZXIpIHtcbiAgcmV0dXJuIGxlcnAoeCwgeSwgMSAtIE1hdGguZXhwKC1sYW1iZGEgKiBkZWx0YVRpbWUpKVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbW9kdWxvIG9mIHRoZSBkaXZpZGVuZCBhbmQgZGl2aXNvciB3aGlsZSBrZWVwaW5nIHRoZSByZXN1bHQgd2l0aGluIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlzb3JcbiAqIHtAbGluayBodHRwczovL2FuZ3VzY3JvbGwuY29tL2p1c3QvanVzdC1tb2R1bG99XG4gKlxuICogQHBhcmFtIG4gRGl2aWRlbmRcbiAqIEBwYXJhbSBkIERpdmlzb3JcbiAqIEByZXR1cm5zIE1vZHVsb1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxvKG46IG51bWJlciwgZDogbnVtYmVyKSB7XG4gIHJldHVybiAoKG4gJSBkKSArIGQpICUgZFxufVxuIiwgImltcG9ydCB7IGNsYW1wLCBkYW1wIH0gZnJvbSAnLi9tYXRocydcclxuaW1wb3J0IHR5cGUgeyBFYXNpbmdGdW5jdGlvbiwgRnJvbVRvT3B0aW9ucywgT25VcGRhdGVDYWxsYmFjayB9IGZyb20gJy4vdHlwZXMnXHJcblxyXG4vKipcclxuICogQW5pbWF0ZSBjbGFzcyB0byBoYW5kbGUgdmFsdWUgYW5pbWF0aW9ucyB3aXRoIGxlcnBpbmcgb3IgZWFzaW5nXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGNvbnN0IGFuaW1hdGUgPSBuZXcgQW5pbWF0ZSgpXHJcbiAqIGFuaW1hdGUuZnJvbVRvKDAsIDEwMCwgeyBkdXJhdGlvbjogMSwgZWFzaW5nOiAodCkgPT4gdCB9KVxyXG4gKiBhbmltYXRlLmFkdmFuY2UoMC41KSAvLyA1MFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFuaW1hdGUge1xyXG4gIGlzUnVubmluZyA9IGZhbHNlXHJcbiAgdmFsdWUgPSAwXHJcbiAgZnJvbSA9IDBcclxuICB0byA9IDBcclxuICBjdXJyZW50VGltZSA9IDBcclxuXHJcbiAgLy8gVGhlc2UgYXJlIGluc3RhbmNpYXRlZCBpbiB0aGUgZnJvbVRvIG1ldGhvZFxyXG4gIGxlcnA/OiBudW1iZXJcclxuICBkdXJhdGlvbj86IG51bWJlclxyXG4gIGVhc2luZz86IEVhc2luZ0Z1bmN0aW9uXHJcbiAgb25VcGRhdGU/OiBPblVwZGF0ZUNhbGxiYWNrXHJcblxyXG4gIC8qKlxyXG4gICAqIEFkdmFuY2UgdGhlIGFuaW1hdGlvbiBieSB0aGUgZ2l2ZW4gZGVsdGEgdGltZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIGRlbHRhVGltZSAtIFRoZSB0aW1lIGluIHNlY29uZHMgdG8gYWR2YW5jZSB0aGUgYW5pbWF0aW9uXHJcbiAgICovXHJcbiAgYWR2YW5jZShkZWx0YVRpbWU6IG51bWJlcikge1xyXG4gICAgaWYgKCF0aGlzLmlzUnVubmluZykgcmV0dXJuXHJcblxyXG4gICAgbGV0IGNvbXBsZXRlZCA9IGZhbHNlXHJcblxyXG4gICAgaWYgKHRoaXMuZHVyYXRpb24gJiYgdGhpcy5lYXNpbmcpIHtcclxuICAgICAgdGhpcy5jdXJyZW50VGltZSArPSBkZWx0YVRpbWVcclxuICAgICAgY29uc3QgbGluZWFyUHJvZ3Jlc3MgPSBjbGFtcCgwLCB0aGlzLmN1cnJlbnRUaW1lIC8gdGhpcy5kdXJhdGlvbiwgMSlcclxuXHJcbiAgICAgIGNvbXBsZXRlZCA9IGxpbmVhclByb2dyZXNzID49IDFcclxuICAgICAgY29uc3QgZWFzZWRQcm9ncmVzcyA9IGNvbXBsZXRlZCA/IDEgOiB0aGlzLmVhc2luZyhsaW5lYXJQcm9ncmVzcylcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZnJvbSArICh0aGlzLnRvIC0gdGhpcy5mcm9tKSAqIGVhc2VkUHJvZ3Jlc3NcclxuICAgIH0gZWxzZSBpZiAodGhpcy5sZXJwKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBkYW1wKHRoaXMudmFsdWUsIHRoaXMudG8sIHRoaXMubGVycCAqIDYwLCBkZWx0YVRpbWUpXHJcbiAgICAgIGlmIChNYXRoLnJvdW5kKHRoaXMudmFsdWUpID09PSB0aGlzLnRvKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudG9cclxuICAgICAgICBjb21wbGV0ZWQgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIElmIG5vIGVhc2luZyBvciBsZXJwLCBqdXN0IGp1bXAgdG8gdGhlIGVuZCB2YWx1ZVxyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy50b1xyXG4gICAgICBjb21wbGV0ZWQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXBsZXRlZCkge1xyXG4gICAgICB0aGlzLnN0b3AoKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENhbGwgdGhlIG9uVXBkYXRlIGNhbGxiYWNrIHdpdGggdGhlIGN1cnJlbnQgdmFsdWUgYW5kIGNvbXBsZXRlZCBzdGF0dXNcclxuICAgIHRoaXMub25VcGRhdGU/Lih0aGlzLnZhbHVlLCBjb21wbGV0ZWQpXHJcbiAgfVxyXG5cclxuICAvKiogU3RvcCB0aGUgYW5pbWF0aW9uICovXHJcbiAgc3RvcCgpIHtcclxuICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2VcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB1cCB0aGUgYW5pbWF0aW9uIGZyb20gYSBzdGFydGluZyB2YWx1ZSB0byBhbiBlbmRpbmcgdmFsdWVcclxuICAgKiB3aXRoIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGxlcnBpbmcsIGR1cmF0aW9uLCBlYXNpbmcsIGFuZCBvblVwZGF0ZSBjYWxsYmFja1xyXG4gICAqXHJcbiAgICogQHBhcmFtIGZyb20gLSBUaGUgc3RhcnRpbmcgdmFsdWVcclxuICAgKiBAcGFyYW0gdG8gLSBUaGUgZW5kaW5nIHZhbHVlXHJcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uXHJcbiAgICovXHJcbiAgZnJvbVRvKFxyXG4gICAgZnJvbTogbnVtYmVyLFxyXG4gICAgdG86IG51bWJlcixcclxuICAgIHsgbGVycCwgZHVyYXRpb24sIGVhc2luZywgb25TdGFydCwgb25VcGRhdGUgfTogRnJvbVRvT3B0aW9uc1xyXG4gICkge1xyXG4gICAgdGhpcy5mcm9tID0gdGhpcy52YWx1ZSA9IGZyb21cclxuICAgIHRoaXMudG8gPSB0b1xyXG4gICAgdGhpcy5sZXJwID0gbGVycFxyXG4gICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uXHJcbiAgICB0aGlzLmVhc2luZyA9IGVhc2luZ1xyXG4gICAgdGhpcy5jdXJyZW50VGltZSA9IDBcclxuICAgIHRoaXMuaXNSdW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIG9uU3RhcnQ/LigpXHJcbiAgICB0aGlzLm9uVXBkYXRlID0gb25VcGRhdGVcclxuICB9XHJcbn1cclxuIiwgImV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxDQiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD4oXG4gIGNhbGxiYWNrOiBDQixcbiAgZGVsYXk6IG51bWJlclxuKSB7XG4gIGxldCB0aW1lcjogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHJldHVybiBmdW5jdGlvbiA8VD4odGhpczogVCwgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY2FsbGJhY2s+KSB7XG4gICAgbGV0IGNvbnRleHQgPSB0aGlzXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aW1lciA9IHVuZGVmaW5lZFxuICAgICAgY2FsbGJhY2suYXBwbHkoY29udGV4dCwgYXJncylcbiAgICB9LCBkZWxheSlcbiAgfVxufVxuIiwgImltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSAnLi9kZWJvdW5jZSdcblxuLyoqXG4gKiBEaW1lbnNpb25zIGNsYXNzIHRvIGhhbmRsZSB0aGUgc2l6ZSBvZiB0aGUgY29udGVudCBhbmQgd3JhcHBlclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkaW1lbnNpb25zID0gbmV3IERpbWVuc2lvbnMod3JhcHBlciwgY29udGVudClcbiAqIGRpbWVuc2lvbnMub24oJ3Jlc2l6ZScsIChlKSA9PiB7XG4gKiAgIGNvbnNvbGUubG9nKGUud2lkdGgsIGUuaGVpZ2h0KVxuICogfSlcbiAqL1xuZXhwb3J0IGNsYXNzIERpbWVuc2lvbnMge1xuICB3aWR0aCA9IDBcbiAgaGVpZ2h0ID0gMFxuICBzY3JvbGxIZWlnaHQgPSAwXG4gIHNjcm9sbFdpZHRoID0gMFxuXG4gIC8vIFRoZXNlIGFyZSBpbnN0YW5jaWF0ZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGFzIHRoZXkgbmVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcHRpb25zXG4gIHByaXZhdGUgZGVib3VuY2VkUmVzaXplPzogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZFxuICBwcml2YXRlIHdyYXBwZXJSZXNpemVPYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyXG4gIHByaXZhdGUgY29udGVudFJlc2l6ZU9ic2VydmVyPzogUmVzaXplT2JzZXJ2ZXJcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHdyYXBwZXI6IEhUTUxFbGVtZW50IHwgV2luZG93IHwgRWxlbWVudCxcbiAgICBwcml2YXRlIGNvbnRlbnQ6IEhUTUxFbGVtZW50IHwgRWxlbWVudCxcbiAgICB7IGF1dG9SZXNpemUgPSB0cnVlLCBkZWJvdW5jZTogZGVib3VuY2VWYWx1ZSA9IDI1MCB9ID0ge31cbiAgKSB7XG4gICAgaWYgKGF1dG9SZXNpemUpIHtcbiAgICAgIHRoaXMuZGVib3VuY2VkUmVzaXplID0gZGVib3VuY2UodGhpcy5yZXNpemUsIGRlYm91bmNlVmFsdWUpXG5cbiAgICAgIGlmICh0aGlzLndyYXBwZXIgaW5zdGFuY2VvZiBXaW5kb3cpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuZGVib3VuY2VkUmVzaXplLCBmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud3JhcHBlclJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuZGVib3VuY2VkUmVzaXplKVxuICAgICAgICB0aGlzLndyYXBwZXJSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3JhcHBlcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb250ZW50UmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5kZWJvdW5jZWRSZXNpemUpXG4gICAgICB0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGVudClcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSgpXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMud3JhcHBlclJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KClcbiAgICB0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG5cbiAgICBpZiAodGhpcy53cmFwcGVyID09PSB3aW5kb3cgJiYgdGhpcy5kZWJvdW5jZWRSZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmRlYm91bmNlZFJlc2l6ZSwgZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgcmVzaXplID0gKCkgPT4ge1xuICAgIHRoaXMub25XcmFwcGVyUmVzaXplKClcbiAgICB0aGlzLm9uQ29udGVudFJlc2l6ZSgpXG4gIH1cblxuICBvbldyYXBwZXJSZXNpemUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMud3JhcHBlciBpbnN0YW5jZW9mIFdpbmRvdykge1xuICAgICAgdGhpcy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICB0aGlzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZHRoID0gdGhpcy53cmFwcGVyLmNsaWVudFdpZHRoXG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMud3JhcHBlci5jbGllbnRIZWlnaHRcbiAgICB9XG4gIH1cblxuICBvbkNvbnRlbnRSZXNpemUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMud3JhcHBlciBpbnN0YW5jZW9mIFdpbmRvdykge1xuICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLmNvbnRlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICB0aGlzLnNjcm9sbFdpZHRoID0gdGhpcy5jb250ZW50LnNjcm9sbFdpZHRoXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gdGhpcy53cmFwcGVyLnNjcm9sbEhlaWdodFxuICAgICAgdGhpcy5zY3JvbGxXaWR0aCA9IHRoaXMud3JhcHBlci5zY3JvbGxXaWR0aFxuICAgIH1cbiAgfVxuXG4gIGdldCBsaW1pdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogdGhpcy5zY3JvbGxXaWR0aCAtIHRoaXMud2lkdGgsXG4gICAgICB5OiB0aGlzLnNjcm9sbEhlaWdodCAtIHRoaXMuaGVpZ2h0LFxuICAgIH1cbiAgfVxufVxuIiwgIi8qKlxuICogRW1pdHRlciBjbGFzcyB0byBoYW5kbGUgZXZlbnRzXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZW1pdHRlciA9IG5ldyBFbWl0dGVyKClcbiAqIGVtaXR0ZXIub24oJ2V2ZW50JywgKGRhdGEpID0+IHtcbiAqICAgY29uc29sZS5sb2coZGF0YSlcbiAqIH0pXG4gKiBlbWl0dGVyLmVtaXQoJ2V2ZW50JywgJ2RhdGEnKVxuICovXG5leHBvcnQgY2xhc3MgRW1pdHRlciB7XG4gIHByaXZhdGUgZXZlbnRzOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIEFycmF5PCguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQ+IHwgdW5kZWZpbmVkXG4gID4gPSB7fVxuXG4gIC8qKlxuICAgKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIGRhdGFcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG5hbWVcbiAgICogQHBhcmFtIGFyZ3MgRGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBoYW5kbGVyc1xuICAgKi9cbiAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICBsZXQgY2FsbGJhY2tzID0gdGhpcy5ldmVudHNbZXZlbnRdIHx8IFtdXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2tzW2ldPy4oLi4uYXJncylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY2FsbGJhY2sgdG8gdGhlIGV2ZW50XG4gICAqIEBwYXJhbSBldmVudCBFdmVudCBuYW1lXG4gICAqIEBwYXJhbSBjYiBDYWxsYmFjayBmdW5jdGlvblxuICAgKiBAcmV0dXJucyBVbnN1YnNjcmliZSBmdW5jdGlvblxuICAgKi9cbiAgb248Q0IgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IHZvaWQ+KGV2ZW50OiBzdHJpbmcsIGNiOiBDQikge1xuICAgIC8vIEFkZCB0aGUgY2FsbGJhY2sgdG8gdGhlIGV2ZW50J3MgY2FsbGJhY2sgbGlzdCwgb3IgY3JlYXRlIGEgbmV3IGxpc3Qgd2l0aCB0aGUgY2FsbGJhY2tcbiAgICB0aGlzLmV2ZW50c1tldmVudF0/LnB1c2goY2IpIHx8ICh0aGlzLmV2ZW50c1tldmVudF0gPSBbY2JdKVxuXG4gICAgLy8gUmV0dXJuIGFuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMuZXZlbnRzW2V2ZW50XSA9IHRoaXMuZXZlbnRzW2V2ZW50XT8uZmlsdGVyKChpKSA9PiBjYiAhPT0gaSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgZXZlbnRcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG5hbWVcbiAgICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uXG4gICAqL1xuICBvZmY8Q0IgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IHZvaWQ+KGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBDQikge1xuICAgIHRoaXMuZXZlbnRzW2V2ZW50XSA9IHRoaXMuZXZlbnRzW2V2ZW50XT8uZmlsdGVyKChpKSA9PiBjYWxsYmFjayAhPT0gaSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGV2ZW50IGxpc3RlbmVycyBhbmQgY2xlYW4gdXBcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ldmVudHMgPSB7fVxuICB9XG59XG4iLCAiaW1wb3J0IHsgRW1pdHRlciB9IGZyb20gJy4vZW1pdHRlcidcclxuaW1wb3J0IHR5cGUgeyBWaXJ0dWFsU2Nyb2xsQ2FsbGJhY2sgfSBmcm9tICcuL3R5cGVzJ1xyXG5cclxuY29uc3QgTElORV9IRUlHSFQgPSAxMDAgLyA2XHJcbmNvbnN0IGxpc3RlbmVyT3B0aW9uczogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSB7IHBhc3NpdmU6IGZhbHNlIH1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaXJ0dWFsU2Nyb2xsIHtcclxuICB0b3VjaFN0YXJ0ID0ge1xyXG4gICAgeDogMCxcclxuICAgIHk6IDAsXHJcbiAgfVxyXG4gIGxhc3REZWx0YSA9IHtcclxuICAgIHg6IDAsXHJcbiAgICB5OiAwLFxyXG4gIH1cclxuICB3aW5kb3cgPSB7XHJcbiAgICB3aWR0aDogMCxcclxuICAgIGhlaWdodDogMCxcclxuICB9XHJcbiAgcHJpdmF0ZSBlbWl0dGVyID0gbmV3IEVtaXR0ZXIoKVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWxlbWVudDogSFRNTEVsZW1lbnQsXHJcbiAgICBwcml2YXRlIG9wdGlvbnMgPSB7IHdoZWVsTXVsdGlwbGllcjogMSwgdG91Y2hNdWx0aXBsaWVyOiAxIH1cclxuICApIHtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uV2luZG93UmVzaXplLCBmYWxzZSlcclxuICAgIHRoaXMub25XaW5kb3dSZXNpemUoKVxyXG5cclxuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIHRoaXMub25XaGVlbCwgbGlzdGVuZXJPcHRpb25zKVxyXG4gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICd0b3VjaHN0YXJ0JyxcclxuICAgICAgdGhpcy5vblRvdWNoU3RhcnQsXHJcbiAgICAgIGxpc3RlbmVyT3B0aW9uc1xyXG4gICAgKVxyXG4gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICd0b3VjaG1vdmUnLFxyXG4gICAgICB0aGlzLm9uVG91Y2hNb3ZlLFxyXG4gICAgICBsaXN0ZW5lck9wdGlvbnNcclxuICAgIClcclxuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25Ub3VjaEVuZCwgbGlzdGVuZXJPcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGFuIGV2ZW50IGxpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQgYW5kIGNhbGxiYWNrXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgbmFtZVxyXG4gICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvblxyXG4gICAqL1xyXG4gIG9uKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBWaXJ0dWFsU2Nyb2xsQ2FsbGJhY2spIHtcclxuICAgIHJldHVybiB0aGlzLmVtaXR0ZXIub24oZXZlbnQsIGNhbGxiYWNrKVxyXG4gIH1cclxuXHJcbiAgLyoqIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzIGFuZCBjbGVhbiB1cCAqL1xyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmVtaXR0ZXIuZGVzdHJveSgpXHJcblxyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMub25XaW5kb3dSZXNpemUsIGZhbHNlKVxyXG5cclxuICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIHRoaXMub25XaGVlbCwgbGlzdGVuZXJPcHRpb25zKVxyXG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICd0b3VjaHN0YXJ0JyxcclxuICAgICAgdGhpcy5vblRvdWNoU3RhcnQsXHJcbiAgICAgIGxpc3RlbmVyT3B0aW9uc1xyXG4gICAgKVxyXG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICd0b3VjaG1vdmUnLFxyXG4gICAgICB0aGlzLm9uVG91Y2hNb3ZlLFxyXG4gICAgICBsaXN0ZW5lck9wdGlvbnNcclxuICAgIClcclxuICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAndG91Y2hlbmQnLFxyXG4gICAgICB0aGlzLm9uVG91Y2hFbmQsXHJcbiAgICAgIGxpc3RlbmVyT3B0aW9uc1xyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgaGFuZGxlciBmb3IgJ3RvdWNoc3RhcnQnIGV2ZW50XHJcbiAgICpcclxuICAgKiBAcGFyYW0gZXZlbnQgVG91Y2ggZXZlbnRcclxuICAgKi9cclxuICBvblRvdWNoU3RhcnQgPSAoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHtcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBldmVudC50YXJnZXRUb3VjaGVzIGlzIG5vdCBkZWZpbmVkXHJcbiAgICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGV2ZW50LnRhcmdldFRvdWNoZXNcclxuICAgICAgPyBldmVudC50YXJnZXRUb3VjaGVzWzBdXHJcbiAgICAgIDogZXZlbnRcclxuXHJcbiAgICB0aGlzLnRvdWNoU3RhcnQueCA9IGNsaWVudFhcclxuICAgIHRoaXMudG91Y2hTdGFydC55ID0gY2xpZW50WVxyXG5cclxuICAgIHRoaXMubGFzdERlbHRhID0ge1xyXG4gICAgICB4OiAwLFxyXG4gICAgICB5OiAwLFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW1pdHRlci5lbWl0KCdzY3JvbGwnLCB7XHJcbiAgICAgIGRlbHRhWDogMCxcclxuICAgICAgZGVsdGFZOiAwLFxyXG4gICAgICBldmVudCxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKiogRXZlbnQgaGFuZGxlciBmb3IgJ3RvdWNobW92ZScgZXZlbnQgKi9cclxuICBvblRvdWNoTW92ZSA9IChldmVudDogVG91Y2hFdmVudCkgPT4ge1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGV2ZW50LnRhcmdldFRvdWNoZXMgaXMgbm90IGRlZmluZWRcclxuICAgIGNvbnN0IHsgY2xpZW50WCwgY2xpZW50WSB9ID0gZXZlbnQudGFyZ2V0VG91Y2hlc1xyXG4gICAgICA/IGV2ZW50LnRhcmdldFRvdWNoZXNbMF1cclxuICAgICAgOiBldmVudFxyXG5cclxuICAgIGNvbnN0IGRlbHRhWCA9IC0oY2xpZW50WCAtIHRoaXMudG91Y2hTdGFydC54KSAqIHRoaXMub3B0aW9ucy50b3VjaE11bHRpcGxpZXJcclxuICAgIGNvbnN0IGRlbHRhWSA9IC0oY2xpZW50WSAtIHRoaXMudG91Y2hTdGFydC55KSAqIHRoaXMub3B0aW9ucy50b3VjaE11bHRpcGxpZXJcclxuXHJcbiAgICB0aGlzLnRvdWNoU3RhcnQueCA9IGNsaWVudFhcclxuICAgIHRoaXMudG91Y2hTdGFydC55ID0gY2xpZW50WVxyXG5cclxuICAgIHRoaXMubGFzdERlbHRhID0ge1xyXG4gICAgICB4OiBkZWx0YVgsXHJcbiAgICAgIHk6IGRlbHRhWSxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnc2Nyb2xsJywge1xyXG4gICAgICBkZWx0YVgsXHJcbiAgICAgIGRlbHRhWSxcclxuICAgICAgZXZlbnQsXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25Ub3VjaEVuZCA9IChldmVudDogVG91Y2hFdmVudCkgPT4ge1xyXG4gICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3Njcm9sbCcsIHtcclxuICAgICAgZGVsdGFYOiB0aGlzLmxhc3REZWx0YS54LFxyXG4gICAgICBkZWx0YVk6IHRoaXMubGFzdERlbHRhLnksXHJcbiAgICAgIGV2ZW50LFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKiBFdmVudCBoYW5kbGVyIGZvciAnd2hlZWwnIGV2ZW50ICovXHJcbiAgb25XaGVlbCA9IChldmVudDogV2hlZWxFdmVudCkgPT4ge1xyXG4gICAgbGV0IHsgZGVsdGFYLCBkZWx0YVksIGRlbHRhTW9kZSB9ID0gZXZlbnRcclxuXHJcbiAgICBjb25zdCBtdWx0aXBsaWVyWCA9XHJcbiAgICAgIGRlbHRhTW9kZSA9PT0gMSA/IExJTkVfSEVJR0hUIDogZGVsdGFNb2RlID09PSAyID8gdGhpcy53aW5kb3cud2lkdGggOiAxXHJcbiAgICBjb25zdCBtdWx0aXBsaWVyWSA9XHJcbiAgICAgIGRlbHRhTW9kZSA9PT0gMSA/IExJTkVfSEVJR0hUIDogZGVsdGFNb2RlID09PSAyID8gdGhpcy53aW5kb3cuaGVpZ2h0IDogMVxyXG5cclxuICAgIGRlbHRhWCAqPSBtdWx0aXBsaWVyWFxyXG4gICAgZGVsdGFZICo9IG11bHRpcGxpZXJZXHJcblxyXG4gICAgZGVsdGFYICo9IHRoaXMub3B0aW9ucy53aGVlbE11bHRpcGxpZXJcclxuICAgIGRlbHRhWSAqPSB0aGlzLm9wdGlvbnMud2hlZWxNdWx0aXBsaWVyXHJcblxyXG4gICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3Njcm9sbCcsIHsgZGVsdGFYLCBkZWx0YVksIGV2ZW50IH0pXHJcbiAgfVxyXG5cclxuICBvbldpbmRvd1Jlc2l6ZSA9ICgpID0+IHtcclxuICAgIHRoaXMud2luZG93ID0ge1xyXG4gICAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGgsXHJcbiAgICAgIGhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uLy4uL3BhY2thZ2UuanNvbidcbmltcG9ydCB7IEFuaW1hdGUgfSBmcm9tICcuL2FuaW1hdGUnXG5pbXBvcnQgeyBEaW1lbnNpb25zIH0gZnJvbSAnLi9kaW1lbnNpb25zJ1xuaW1wb3J0IHsgRW1pdHRlciB9IGZyb20gJy4vZW1pdHRlcidcbmltcG9ydCB7IGNsYW1wLCBtb2R1bG8gfSBmcm9tICcuL21hdGhzJ1xuaW1wb3J0IHR5cGUge1xuICBMZW5pc0V2ZW50LFxuICBMZW5pc09wdGlvbnMsXG4gIFNjcm9sbENhbGxiYWNrLFxuICBTY3JvbGxpbmcsXG4gIFNjcm9sbFRvT3B0aW9ucyxcbiAgVXNlckRhdGEsXG4gIFZpcnR1YWxTY3JvbGxDYWxsYmFjayxcbiAgVmlydHVhbFNjcm9sbERhdGEsXG59IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBWaXJ0dWFsU2Nyb2xsIH0gZnJvbSAnLi92aXJ0dWFsLXNjcm9sbCdcblxuLy8gVGVjaG5pY2FsIGV4cGxhbmF0aW9uXG4vLyAtIGxpc3RlbiB0byAnd2hlZWwnIGV2ZW50c1xuLy8gLSBwcmV2ZW50ICd3aGVlbCcgZXZlbnQgdG8gcHJldmVudCBzY3JvbGxcbi8vIC0gbm9ybWFsaXplIHdoZWVsIGRlbHRhXG4vLyAtIGFkZCBkZWx0YSB0byB0YXJnZXRTY3JvbGxcbi8vIC0gYW5pbWF0ZSBzY3JvbGwgdG8gdGFyZ2V0U2Nyb2xsIChzbW9vdGggY29udGV4dClcbi8vIC0gaWYgYW5pbWF0aW9uIGlzIG5vdCBydW5uaW5nLCBsaXN0ZW4gdG8gJ3Njcm9sbCcgZXZlbnRzIChuYXRpdmUgY29udGV4dClcblxudHlwZSBPcHRpb25hbFBpY2s8VCwgRiBleHRlbmRzIGtleW9mIFQ+ID0gT21pdDxULCBGPiAmIFBhcnRpYWw8UGljazxULCBGPj5cblxuY29uc3QgZGVmYXVsdEVhc2luZyA9ICh0OiBudW1iZXIpID0+IE1hdGgubWluKDEsIDEuMDAxIC0gTWF0aC5wb3coMiwgLTEwICogdCkpXG5cbmV4cG9ydCBjbGFzcyBMZW5pcyB7XG4gIHByaXZhdGUgX2lzU2Nyb2xsaW5nOiBTY3JvbGxpbmcgPSBmYWxzZSAvLyB0cnVlIHdoZW4gc2Nyb2xsIGlzIGFuaW1hdGluZ1xuICBwcml2YXRlIF9pc1N0b3BwZWQgPSBmYWxzZSAvLyB0cnVlIGlmIHVzZXIgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHNjcm9sbCAtIGVuYWJsZS9kaXNhYmxlIHByb2dyYW1tYXRpY2FsbHlcbiAgcHJpdmF0ZSBfaXNMb2NrZWQgPSBmYWxzZSAvLyBzYW1lIGFzIGlzU3RvcHBlZCBidXQgZW5hYmxlZC9kaXNhYmxlZCB3aGVuIHNjcm9sbCByZWFjaGVzIHRhcmdldFxuICBwcml2YXRlIF9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50ID0gZmFsc2VcbiAgcHJpdmF0ZSBfcmVzZXRWZWxvY2l0eVRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGxcbiAgcHJpdmF0ZSBfcmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGlzIHRvdWNoaW5nIHRoZSBzY3JlZW5cbiAgICovXG4gIGlzVG91Y2hpbmc/OiBib29sZWFuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGVuaXMgaW5zdGFuY2Ugd2FzIGNyZWF0ZWRcbiAgICovXG4gIHRpbWUgPSAwXG4gIC8qKlxuICAgKiBVc2VyIGRhdGEgdGhhdCB3aWxsIGJlIGZvcndhcmRlZCB0aHJvdWdoIHRoZSBzY3JvbGwgZXZlbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbGVuaXMuc2Nyb2xsVG8oMTAwLCB7XG4gICAqICAgdXNlckRhdGE6IHtcbiAgICogICAgIGZvbzogJ2JhcidcbiAgICogICB9XG4gICAqIH0pXG4gICAqL1xuICB1c2VyRGF0YTogVXNlckRhdGEgPSB7fVxuICAvKipcbiAgICogVGhlIGxhc3QgdmVsb2NpdHkgb2YgdGhlIHNjcm9sbFxuICAgKi9cbiAgbGFzdFZlbG9jaXR5ID0gMFxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdmVsb2NpdHkgb2YgdGhlIHNjcm9sbFxuICAgKi9cbiAgdmVsb2NpdHkgPSAwXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBzY3JvbGxcbiAgICovXG4gIGRpcmVjdGlvbjogMSB8IC0xIHwgMCA9IDBcbiAgLyoqXG4gICAqIFRoZSBvcHRpb25zIHBhc3NlZCB0byB0aGUgbGVuaXMgaW5zdGFuY2VcbiAgICovXG4gIG9wdGlvbnM6IE9wdGlvbmFsUGljazxcbiAgICBSZXF1aXJlZDxMZW5pc09wdGlvbnM+LFxuICAgICdkdXJhdGlvbicgfCAnZWFzaW5nJyB8ICdwcmV2ZW50JyB8ICd2aXJ0dWFsU2Nyb2xsJ1xuICA+XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IHNjcm9sbCB2YWx1ZVxuICAgKi9cbiAgdGFyZ2V0U2Nyb2xsOiBudW1iZXJcbiAgLyoqXG4gICAqIFRoZSBhbmltYXRlZCBzY3JvbGwgdmFsdWVcbiAgICovXG4gIGFuaW1hdGVkU2Nyb2xsOiBudW1iZXJcblxuICAvLyBUaGVzZSBhcmUgaW5zdGFuY2lhdGVkIGhlcmUgYXMgdGhleSBkb24ndCBuZWVkIGluZm9ybWF0aW9uIGZyb20gdGhlIG9wdGlvbnNcbiAgcHJpdmF0ZSByZWFkb25seSBhbmltYXRlID0gbmV3IEFuaW1hdGUoKVxuICBwcml2YXRlIHJlYWRvbmx5IGVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpXG4gIC8vIFRoZXNlIGFyZSBpbnN0YW5jaWF0ZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGFzIHRoZXkgbmVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcHRpb25zXG4gIHJlYWRvbmx5IGRpbWVuc2lvbnM6IERpbWVuc2lvbnMgLy8gVGhpcyBpcyBub3QgcHJpdmF0ZSBiZWNhdXNlIGl0J3MgdXNlZCBpbiB0aGUgU25hcCBjbGFzc1xuICBwcml2YXRlIHJlYWRvbmx5IHZpcnR1YWxTY3JvbGw6IFZpcnR1YWxTY3JvbGxcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgd3JhcHBlciA9IHdpbmRvdyxcbiAgICBjb250ZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgIGV2ZW50c1RhcmdldCA9IHdyYXBwZXIsXG4gICAgc21vb3RoV2hlZWwgPSB0cnVlLFxuICAgIHN5bmNUb3VjaCA9IGZhbHNlLFxuICAgIHN5bmNUb3VjaExlcnAgPSAwLjA3NSxcbiAgICB0b3VjaEluZXJ0aWFFeHBvbmVudCA9IDEuNyxcbiAgICBkdXJhdGlvbiwgLy8gaW4gc2Vjb25kc1xuICAgIGVhc2luZyxcbiAgICBsZXJwID0gMC4xLFxuICAgIGluZmluaXRlID0gZmFsc2UsXG4gICAgb3JpZW50YXRpb24gPSAndmVydGljYWwnLCAvLyB2ZXJ0aWNhbCwgaG9yaXpvbnRhbFxuICAgIGdlc3R1cmVPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnYm90aCcgOiAndmVydGljYWwnLCAvLyB2ZXJ0aWNhbCwgaG9yaXpvbnRhbCwgYm90aFxuICAgIHRvdWNoTXVsdGlwbGllciA9IDEsXG4gICAgd2hlZWxNdWx0aXBsaWVyID0gMSxcbiAgICBhdXRvUmVzaXplID0gdHJ1ZSxcbiAgICBwcmV2ZW50LFxuICAgIHZpcnR1YWxTY3JvbGwsXG4gICAgb3ZlcnNjcm9sbCA9IHRydWUsXG4gICAgYXV0b1JhZiA9IGZhbHNlLFxuICAgIGFuY2hvcnMgPSBmYWxzZSxcbiAgICBhdXRvVG9nZ2xlID0gZmFsc2UsIC8vIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD10cmFuc2l0aW9uLWJlaGF2aW9yXG4gICAgYWxsb3dOZXN0ZWRTY3JvbGwgPSBmYWxzZSxcbiAgICAvLyBAdHMtaWdub3JlOiB0aGlzIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlXG4gICAgX19leHBlcmltZW50YWxfX25haXZlRGltZW5zaW9ucyA9IGZhbHNlLFxuICAgIG5haXZlRGltZW5zaW9ucyA9IF9fZXhwZXJpbWVudGFsX19uYWl2ZURpbWVuc2lvbnMsXG4gICAgc3RvcEluZXJ0aWFPbk5hdmlnYXRlID0gZmFsc2UsXG4gIH06IExlbmlzT3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gU2V0IHZlcnNpb25cbiAgICB3aW5kb3cubGVuaXNWZXJzaW9uID0gdmVyc2lvblxuXG4gICAgLy8gQ2hlY2sgaWYgd3JhcHBlciBpcyA8aHRtbD4sIGZhbGxiYWNrIHRvIHdpbmRvd1xuICAgIGlmICghd3JhcHBlciB8fCB3cmFwcGVyID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHdyYXBwZXIgPSB3aW5kb3dcbiAgICB9XG5cbiAgICAvLyBmbGlwIHRvIGVhc2luZy90aW1lIGJhc2VkIGFuaW1hdGlvbiBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBwcm92aWRlZFxuICAgIGlmICh0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIHR5cGVvZiBlYXNpbmcgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVhc2luZyA9IGRlZmF1bHRFYXNpbmdcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlYXNpbmcgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGR1cmF0aW9uICE9PSAnbnVtYmVyJykge1xuICAgICAgZHVyYXRpb24gPSAxXG4gICAgfVxuXG4gICAgLy8gU2V0dXAgb3B0aW9uc1xuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgIHdyYXBwZXIsXG4gICAgICBjb250ZW50LFxuICAgICAgZXZlbnRzVGFyZ2V0LFxuICAgICAgc21vb3RoV2hlZWwsXG4gICAgICBzeW5jVG91Y2gsXG4gICAgICBzeW5jVG91Y2hMZXJwLFxuICAgICAgdG91Y2hJbmVydGlhRXhwb25lbnQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGVhc2luZyxcbiAgICAgIGxlcnAsXG4gICAgICBpbmZpbml0ZSxcbiAgICAgIGdlc3R1cmVPcmllbnRhdGlvbixcbiAgICAgIG9yaWVudGF0aW9uLFxuICAgICAgdG91Y2hNdWx0aXBsaWVyLFxuICAgICAgd2hlZWxNdWx0aXBsaWVyLFxuICAgICAgYXV0b1Jlc2l6ZSxcbiAgICAgIHByZXZlbnQsXG4gICAgICB2aXJ0dWFsU2Nyb2xsLFxuICAgICAgb3ZlcnNjcm9sbCxcbiAgICAgIGF1dG9SYWYsXG4gICAgICBhbmNob3JzLFxuICAgICAgYXV0b1RvZ2dsZSxcbiAgICAgIGFsbG93TmVzdGVkU2Nyb2xsLFxuICAgICAgbmFpdmVEaW1lbnNpb25zLFxuICAgICAgc3RvcEluZXJ0aWFPbk5hdmlnYXRlLFxuICAgIH1cblxuICAgIC8vIFNldHVwIGRpbWVuc2lvbnMgaW5zdGFuY2VcbiAgICB0aGlzLmRpbWVuc2lvbnMgPSBuZXcgRGltZW5zaW9ucyh3cmFwcGVyLCBjb250ZW50LCB7IGF1dG9SZXNpemUgfSlcblxuICAgIC8vIFNldHVwIGNsYXNzIG5hbWVcbiAgICB0aGlzLnVwZGF0ZUNsYXNzTmFtZSgpXG5cbiAgICAvLyBTZXQgdGhlIGluaXRpYWwgc2Nyb2xsIHZhbHVlIGZvciBhbGwgc2Nyb2xsIGluZm9ybWF0aW9uXG4gICAgdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy5hY3R1YWxTY3JvbGxcblxuICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uTmF0aXZlU2Nyb2xsLCBmYWxzZSlcblxuICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbGVuZCcsIHRoaXMub25TY3JvbGxFbmQsIHtcbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgfSlcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYW5jaG9ycyB8fCB0aGlzLm9wdGlvbnMuc3RvcEluZXJ0aWFPbk5hdmlnYXRlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICB0aGlzLm9uQ2xpY2sgYXMgRXZlbnRMaXN0ZW5lcixcbiAgICAgICAgZmFsc2VcbiAgICAgIClcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ3BvaW50ZXJkb3duJyxcbiAgICAgIHRoaXMub25Qb2ludGVyRG93biBhcyBFdmVudExpc3RlbmVyLFxuICAgICAgZmFsc2VcbiAgICApXG5cbiAgICAvLyBTZXR1cCB2aXJ0dWFsIHNjcm9sbCBpbnN0YW5jZVxuICAgIHRoaXMudmlydHVhbFNjcm9sbCA9IG5ldyBWaXJ0dWFsU2Nyb2xsKGV2ZW50c1RhcmdldCBhcyBIVE1MRWxlbWVudCwge1xuICAgICAgdG91Y2hNdWx0aXBsaWVyLFxuICAgICAgd2hlZWxNdWx0aXBsaWVyLFxuICAgIH0pXG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsLm9uKCdzY3JvbGwnLCB0aGlzLm9uVmlydHVhbFNjcm9sbClcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSkge1xuICAgICAgdGhpcy5jaGVja092ZXJmbG93KClcbiAgICAgIHRoaXMucm9vdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHRoaXMub25UcmFuc2l0aW9uRW5kLCB7XG4gICAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1JhZikge1xuICAgICAgdGhpcy5fcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yYWYpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgdGhlIGxlbmlzIGluc3RhbmNlLCByZW1vdmUgYWxsIGV2ZW50IGxpc3RlbmVycyBhbmQgY2xlYW4gdXAgdGhlIGNsYXNzIG5hbWVcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5lbWl0dGVyLmRlc3Ryb3koKVxuXG4gICAgdGhpcy5vcHRpb25zLndyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICdzY3JvbGwnLFxuICAgICAgdGhpcy5vbk5hdGl2ZVNjcm9sbCxcbiAgICAgIGZhbHNlXG4gICAgKVxuXG4gICAgdGhpcy5vcHRpb25zLndyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsZW5kJywgdGhpcy5vblNjcm9sbEVuZCwge1xuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICB9KVxuXG4gICAgdGhpcy5vcHRpb25zLndyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICdwb2ludGVyZG93bicsXG4gICAgICB0aGlzLm9uUG9pbnRlckRvd24gYXMgRXZlbnRMaXN0ZW5lcixcbiAgICAgIGZhbHNlXG4gICAgKVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hbmNob3JzIHx8IHRoaXMub3B0aW9ucy5zdG9wSW5lcnRpYU9uTmF2aWdhdGUpIHtcbiAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdjbGljaycsXG4gICAgICAgIHRoaXMub25DbGljayBhcyBFdmVudExpc3RlbmVyLFxuICAgICAgICBmYWxzZVxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMudmlydHVhbFNjcm9sbC5kZXN0cm95KClcbiAgICB0aGlzLmRpbWVuc2lvbnMuZGVzdHJveSgpXG5cbiAgICB0aGlzLmNsZWFuVXBDbGFzc05hbWUoKVxuXG4gICAgaWYgKHRoaXMuX3JhZklkKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWZJZClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGV2ZW50IGxpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQgYW5kIGNhbGxiYWNrXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCBFdmVudCBuYW1lXG4gICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvblxuICAgKiBAcmV0dXJucyBVbnN1YnNjcmliZSBmdW5jdGlvblxuICAgKi9cbiAgb24oZXZlbnQ6ICdzY3JvbGwnLCBjYWxsYmFjazogU2Nyb2xsQ2FsbGJhY2spOiAoKSA9PiB2b2lkXG4gIG9uKGV2ZW50OiAndmlydHVhbC1zY3JvbGwnLCBjYWxsYmFjazogVmlydHVhbFNjcm9sbENhbGxiYWNrKTogKCkgPT4gdm9pZFxuICBvbihldmVudDogTGVuaXNFdmVudCwgY2FsbGJhY2s6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmVtaXR0ZXIub24oZXZlbnQsIGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBldmVudCBsaXN0ZW5lciBmb3IgdGhlIGdpdmVuIGV2ZW50IGFuZCBjYWxsYmFja1xuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgbmFtZVxuICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb25cbiAgICovXG4gIG9mZihldmVudDogJ3Njcm9sbCcsIGNhbGxiYWNrOiBTY3JvbGxDYWxsYmFjayk6IHZvaWRcbiAgb2ZmKGV2ZW50OiAndmlydHVhbC1zY3JvbGwnLCBjYWxsYmFjazogVmlydHVhbFNjcm9sbENhbGxiYWNrKTogdm9pZFxuICBvZmYoZXZlbnQ6IExlbmlzRXZlbnQsIGNhbGxiYWNrOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5lbWl0dGVyLm9mZihldmVudCwgY2FsbGJhY2spXG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsRW5kID0gKGU6IEV2ZW50IHwgQ3VzdG9tRXZlbnQpID0+IHtcbiAgICBpZiAoIShlIGluc3RhbmNlb2YgQ3VzdG9tRXZlbnQpKSB7XG4gICAgICBpZiAodGhpcy5pc1Njcm9sbGluZyA9PT0gJ3Ntb290aCcgfHwgdGhpcy5pc1Njcm9sbGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hTY3JvbGxlbmRFdmVudCA9ICgpID0+IHtcbiAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzY3JvbGxlbmQnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRoaXMub3B0aW9ucy53cmFwcGVyID09PSB3aW5kb3csXG4gICAgICAgIC8vIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBsZW5pc1Njcm9sbEVuZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0IG92ZXJmbG93KCkge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5pc0hvcml6b250YWwgPyAnb3ZlcmZsb3cteCcgOiAnb3ZlcmZsb3cteSdcbiAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJvb3RFbGVtZW50KVtcbiAgICAgIHByb3BlcnR5IGFzIGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb25cbiAgICBdIGFzIHN0cmluZ1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja092ZXJmbG93KCkge1xuICAgIGlmIChbJ2hpZGRlbicsICdjbGlwJ10uaW5jbHVkZXModGhpcy5vdmVyZmxvdykpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxTdG9wKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcm5hbFN0YXJ0KClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uVHJhbnNpdGlvbkVuZCA9IChldmVudDogVHJhbnNpdGlvbkV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LnByb3BlcnR5TmFtZS5pbmNsdWRlcygnb3ZlcmZsb3cnKSkge1xuICAgICAgdGhpcy5jaGVja092ZXJmbG93KClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFNjcm9sbChzY3JvbGw6IG51bWJlcikge1xuICAgIC8vIGJlaGF2aW9yOiAnaW5zdGFudCcgYnlwYXNzZXMgdGhlIHNjcm9sbC1iZWhhdmlvciBDU1MgcHJvcGVydHlcblxuICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCkge1xuICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuc2Nyb2xsVG8oeyBsZWZ0OiBzY3JvbGwsIGJlaGF2aW9yOiAnaW5zdGFudCcgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuc2Nyb2xsVG8oeyB0b3A6IHNjcm9sbCwgYmVoYXZpb3I6ICdpbnN0YW50JyB9KVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25DbGljayA9IChldmVudDogUG9pbnRlckV2ZW50IHwgTW91c2VFdmVudCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKVxuXG4gICAgLy8gZmlsdGVyIGFuY2hvciBlbGVtZW50cyAoZWxlbWVudHMgd2l0aCBhIHZhbGlkIGhyZWYgYXR0cmlidXRlKVxuICAgIGNvbnN0IGFuY2hvckVsZW1lbnRzID0gcGF0aC5maWx0ZXIoXG4gICAgICAobm9kZSkgPT4gbm9kZSBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50ICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdocmVmJylcbiAgICApIGFzIEhUTUxBbmNob3JFbGVtZW50W11cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYW5jaG9ycykge1xuICAgICAgY29uc3QgYW5jaG9yID0gYW5jaG9yRWxlbWVudHMuZmluZCgobm9kZSkgPT5cbiAgICAgICAgbm9kZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKT8uaW5jbHVkZXMoJyMnKVxuICAgICAgKVxuICAgICAgaWYgKGFuY2hvcikge1xuICAgICAgICBjb25zdCBocmVmID0gYW5jaG9yLmdldEF0dHJpYnV0ZSgnaHJlZicpXG5cbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID1cbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbnMuYW5jaG9ycyA9PT0gJ29iamVjdCcgJiYgdGhpcy5vcHRpb25zLmFuY2hvcnNcbiAgICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuYW5jaG9yc1xuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYCMke2hyZWYuc3BsaXQoJyMnKVsxXX1gXG5cbiAgICAgICAgICB0aGlzLnNjcm9sbFRvKHRhcmdldCwgb3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3RvcEluZXJ0aWFPbk5hdmlnYXRlKSB7XG4gICAgICBjb25zdCBpbnRlcm5hbExpbmsgPSBhbmNob3JFbGVtZW50cy5maW5kKFxuICAgICAgICAobm9kZSkgPT4gbm9kZS5ob3N0ID09PSB3aW5kb3cubG9jYXRpb24uaG9zdFxuICAgICAgKVxuXG4gICAgICBpZiAoaW50ZXJuYWxMaW5rKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25Qb2ludGVyRG93biA9IChldmVudDogUG9pbnRlckV2ZW50IHwgTW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5idXR0b24gPT09IDEpIHtcbiAgICAgIHRoaXMucmVzZXQoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25WaXJ0dWFsU2Nyb2xsID0gKGRhdGE6IFZpcnR1YWxTY3JvbGxEYXRhKSA9PiB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy52aXJ0dWFsU2Nyb2xsID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0aGlzLm9wdGlvbnMudmlydHVhbFNjcm9sbChkYXRhKSA9PT0gZmFsc2VcbiAgICApXG4gICAgICByZXR1cm5cblxuICAgIGNvbnN0IHsgZGVsdGFYLCBkZWx0YVksIGV2ZW50IH0gPSBkYXRhXG5cbiAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndmlydHVhbC1zY3JvbGwnLCB7IGRlbHRhWCwgZGVsdGFZLCBldmVudCB9KVxuXG4gICAgLy8ga2VlcCB6b29tIGZlYXR1cmVcbiAgICBpZiAoZXZlbnQuY3RybEtleSkgcmV0dXJuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmIChldmVudC5sZW5pc1N0b3BQcm9wYWdhdGlvbikgcmV0dXJuXG5cbiAgICBjb25zdCBpc1RvdWNoID0gZXZlbnQudHlwZS5pbmNsdWRlcygndG91Y2gnKVxuICAgIGNvbnN0IGlzV2hlZWwgPSBldmVudC50eXBlLmluY2x1ZGVzKCd3aGVlbCcpXG5cbiAgICB0aGlzLmlzVG91Y2hpbmcgPSBldmVudC50eXBlID09PSAndG91Y2hzdGFydCcgfHwgZXZlbnQudHlwZSA9PT0gJ3RvdWNobW92ZSdcbiAgICAvLyBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgIC8vICAgY29uc29sZS5sb2coJ3RvdWNoZW5kJywgdGhpcy5zY3JvbGwpXG4gICAgLy8gICAvLyB0aGlzLmxhc3RWZWxvY2l0eSA9IHRoaXMudmVsb2NpdHlcbiAgICAvLyAgIC8vIHRoaXMudmVsb2NpdHkgPSAwXG4gICAgLy8gICAvLyB0aGlzLmlzU2Nyb2xsaW5nID0gZmFsc2VcbiAgICAvLyAgIHRoaXMuZW1pdCh7IHR5cGU6ICd0b3VjaGVuZCcgfSlcbiAgICAvLyAgIC8vIGFsZXJ0KCd0b3VjaGVuZCcpXG4gICAgLy8gICByZXR1cm5cbiAgICAvLyB9XG5cbiAgICBjb25zdCBpc0NsaWNrT3JUYXAgPSBkZWx0YVggPT09IDAgJiYgZGVsdGFZID09PSAwXG5cbiAgICBjb25zdCBpc1RhcFRvU3RvcCA9XG4gICAgICB0aGlzLm9wdGlvbnMuc3luY1RvdWNoICYmXG4gICAgICBpc1RvdWNoICYmXG4gICAgICBldmVudC50eXBlID09PSAndG91Y2hzdGFydCcgJiZcbiAgICAgIGlzQ2xpY2tPclRhcCAmJlxuICAgICAgIXRoaXMuaXNTdG9wcGVkICYmXG4gICAgICAhdGhpcy5pc0xvY2tlZFxuXG4gICAgaWYgKGlzVGFwVG9TdG9wKSB7XG4gICAgICB0aGlzLnJlc2V0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGNvbnN0IGlzUHVsbFRvUmVmcmVzaCA9XG4gICAgLy8gICB0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmXG4gICAgLy8gICB0aGlzLnNjcm9sbCA9PT0gMCAmJlxuICAgIC8vICAgIXRoaXMub3B0aW9ucy5pbmZpbml0ZSAmJlxuICAgIC8vICAgZGVsdGFZIDw9IDUgLy8gdG91Y2ggcHVsbCB0byByZWZyZXNoLCBub3QgcmVsaWFibGUgeWV0XG5cbiAgICBjb25zdCBpc1Vua25vd25HZXN0dXJlID1cbiAgICAgICh0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmIGRlbHRhWSA9PT0gMCkgfHxcbiAgICAgICh0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgJiYgZGVsdGFYID09PSAwKVxuXG4gICAgaWYgKGlzQ2xpY2tPclRhcCB8fCBpc1Vua25vd25HZXN0dXJlKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygncHJldmVudCcpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBjYXRjaCBpZiBzY3JvbGxpbmcgb24gbmVzdGVkIHNjcm9sbCBlbGVtZW50c1xuICAgIGxldCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKVxuICAgIGNvbXBvc2VkUGF0aCA9IGNvbXBvc2VkUGF0aC5zbGljZSgwLCBjb21wb3NlZFBhdGguaW5kZXhPZih0aGlzLnJvb3RFbGVtZW50KSkgLy8gcmVtb3ZlIHBhcmVudHMgZWxlbWVudHNcblxuICAgIGNvbnN0IHByZXZlbnQgPSB0aGlzLm9wdGlvbnMucHJldmVudFxuXG4gICAgaWYgKFxuICAgICAgISFjb21wb3NlZFBhdGguZmluZChcbiAgICAgICAgKG5vZGUpID0+XG4gICAgICAgICAgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG4gICAgICAgICAgKCh0eXBlb2YgcHJldmVudCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcmV2ZW50Py4obm9kZSkpIHx8XG4gICAgICAgICAgICBub2RlLmhhc0F0dHJpYnV0ZT8uKCdkYXRhLWxlbmlzLXByZXZlbnQnKSB8fFxuICAgICAgICAgICAgKGlzVG91Y2ggJiYgbm9kZS5oYXNBdHRyaWJ1dGU/LignZGF0YS1sZW5pcy1wcmV2ZW50LXRvdWNoJykpIHx8XG4gICAgICAgICAgICAoaXNXaGVlbCAmJiBub2RlLmhhc0F0dHJpYnV0ZT8uKCdkYXRhLWxlbmlzLXByZXZlbnQtd2hlZWwnKSkgfHxcbiAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuYWxsb3dOZXN0ZWRTY3JvbGwgJiZcbiAgICAgICAgICAgICAgdGhpcy5jaGVja05lc3RlZFNjcm9sbChub2RlLCB7IGRlbHRhWCwgZGVsdGFZIH0pKSlcbiAgICAgIClcbiAgICApXG4gICAgICByZXR1cm5cblxuICAgIGlmICh0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLmlzTG9ja2VkKSB7XG4gICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpIC8vIHRoaXMgd2lsbCBzdG9wIGZvcndhcmRpbmcgdGhlIGV2ZW50IHRvIHRoZSBwYXJlbnQsIHRoaXMgaXMgcHJvYmxlbWF0aWNcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGlzU21vb3RoID1cbiAgICAgICh0aGlzLm9wdGlvbnMuc3luY1RvdWNoICYmIGlzVG91Y2gpIHx8XG4gICAgICAodGhpcy5vcHRpb25zLnNtb290aFdoZWVsICYmIGlzV2hlZWwpXG5cbiAgICBpZiAoIWlzU21vb3RoKSB7XG4gICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gJ25hdGl2ZSdcbiAgICAgIHRoaXMuYW5pbWF0ZS5zdG9wKClcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGV2ZW50LmxlbmlzU3RvcFByb3BhZ2F0aW9uID0gdHJ1ZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IGRlbHRhID0gZGVsdGFZXG4gICAgaWYgKHRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb24gPT09ICdib3RoJykge1xuICAgICAgZGVsdGEgPSBNYXRoLmFicyhkZWx0YVkpID4gTWF0aC5hYnMoZGVsdGFYKSA/IGRlbHRhWSA6IGRlbHRhWFxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBkZWx0YSA9IGRlbHRhWFxuICAgIH1cblxuICAgIGlmIChcbiAgICAgICF0aGlzLm9wdGlvbnMub3ZlcnNjcm9sbCB8fFxuICAgICAgdGhpcy5vcHRpb25zLmluZmluaXRlIHx8XG4gICAgICAodGhpcy5vcHRpb25zLndyYXBwZXIgIT09IHdpbmRvdyAmJlxuICAgICAgICB0aGlzLmxpbWl0ID4gMCAmJlxuICAgICAgICAoKHRoaXMuYW5pbWF0ZWRTY3JvbGwgPiAwICYmIHRoaXMuYW5pbWF0ZWRTY3JvbGwgPCB0aGlzLmxpbWl0KSB8fFxuICAgICAgICAgICh0aGlzLmFuaW1hdGVkU2Nyb2xsID09PSAwICYmIGRlbHRhWSA+IDApIHx8XG4gICAgICAgICAgKHRoaXMuYW5pbWF0ZWRTY3JvbGwgPT09IHRoaXMubGltaXQgJiYgZGVsdGFZIDwgMCkpKVxuICAgICkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZXZlbnQubGVuaXNTdG9wUHJvcGFnYXRpb24gPSB0cnVlXG4gICAgICAvLyBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cblxuICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgY29uc3QgaXNTeW5jVG91Y2ggPSBpc1RvdWNoICYmIHRoaXMub3B0aW9ucy5zeW5jVG91Y2hcbiAgICBjb25zdCBpc1RvdWNoRW5kID0gaXNUb3VjaCAmJiBldmVudC50eXBlID09PSAndG91Y2hlbmQnXG5cbiAgICBjb25zdCBoYXNUb3VjaEluZXJ0aWEgPSBpc1RvdWNoRW5kXG5cbiAgICBpZiAoaGFzVG91Y2hJbmVydGlhKSB7XG4gICAgICAvLyBkZWx0YSA9IHRoaXMudmVsb2NpdHkgKiB0aGlzLm9wdGlvbnMudG91Y2hJbmVydGlhTXVsdGlwbGllclxuICAgICAgZGVsdGEgPVxuICAgICAgICBNYXRoLnNpZ24odGhpcy52ZWxvY2l0eSkgKlxuICAgICAgICBNYXRoLnBvdyhNYXRoLmFicyh0aGlzLnZlbG9jaXR5KSwgdGhpcy5vcHRpb25zLnRvdWNoSW5lcnRpYUV4cG9uZW50KVxuICAgIH1cblxuICAgIHRoaXMuc2Nyb2xsVG8odGhpcy50YXJnZXRTY3JvbGwgKyBkZWx0YSwge1xuICAgICAgcHJvZ3JhbW1hdGljOiBmYWxzZSxcbiAgICAgIC4uLihpc1N5bmNUb3VjaFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGxlcnA6IGhhc1RvdWNoSW5lcnRpYSA/IHRoaXMub3B0aW9ucy5zeW5jVG91Y2hMZXJwIDogMSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgbGVycDogdGhpcy5vcHRpb25zLmxlcnAsXG4gICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5vcHRpb25zLmR1cmF0aW9uLFxuICAgICAgICAgICAgZWFzaW5nOiB0aGlzLm9wdGlvbnMuZWFzaW5nLFxuICAgICAgICAgIH0pLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRm9yY2UgbGVuaXMgdG8gcmVjYWxjdWxhdGUgdGhlIGRpbWVuc2lvbnNcbiAgICovXG4gIHJlc2l6ZSgpIHtcbiAgICB0aGlzLmRpbWVuc2lvbnMucmVzaXplKClcbiAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFjdHVhbFNjcm9sbFxuICAgIHRoaXMuZW1pdCgpXG4gIH1cblxuICBwcml2YXRlIGVtaXQoKSB7XG4gICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3Njcm9sbCcsIHRoaXMpXG4gIH1cblxuICBwcml2YXRlIG9uTmF0aXZlU2Nyb2xsID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0KVxuICAgICAgdGhpcy5fcmVzZXRWZWxvY2l0eVRpbWVvdXQgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQpIHtcbiAgICAgIHRoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTY3JvbGxpbmcgPT09IGZhbHNlIHx8IHRoaXMuaXNTY3JvbGxpbmcgPT09ICduYXRpdmUnKSB7XG4gICAgICBjb25zdCBsYXN0U2Nyb2xsID0gdGhpcy5hbmltYXRlZFNjcm9sbFxuICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMudGFyZ2V0U2Nyb2xsID0gdGhpcy5hY3R1YWxTY3JvbGxcbiAgICAgIHRoaXMubGFzdFZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eVxuICAgICAgdGhpcy52ZWxvY2l0eSA9IHRoaXMuYW5pbWF0ZWRTY3JvbGwgLSBsYXN0U2Nyb2xsXG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IE1hdGguc2lnbihcbiAgICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCAtIGxhc3RTY3JvbGxcbiAgICAgICkgYXMgTGVuaXNbJ2RpcmVjdGlvbiddXG5cbiAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9ICduYXRpdmUnXG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdCgpXG5cbiAgICAgIGlmICh0aGlzLnZlbG9jaXR5ICE9PSAwKSB7XG4gICAgICAgIHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sYXN0VmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5XG4gICAgICAgICAgdGhpcy52ZWxvY2l0eSA9IDBcbiAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmVtaXQoKVxuICAgICAgICB9LCA0MDApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldCgpIHtcbiAgICB0aGlzLmlzTG9ja2VkID0gZmFsc2VcbiAgICB0aGlzLmlzU2Nyb2xsaW5nID0gZmFsc2VcbiAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFjdHVhbFNjcm9sbFxuICAgIHRoaXMubGFzdFZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eSA9IDBcbiAgICB0aGlzLmFuaW1hdGUuc3RvcCgpXG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgbGVuaXMgc2Nyb2xsIGFmdGVyIGl0IGhhcyBiZWVuIHN0b3BwZWRcbiAgICovXG4gIHN0YXJ0KCkge1xuICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHJldHVyblxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvVG9nZ2xlKSB7XG4gICAgICB0aGlzLnJvb3RFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdvdmVyZmxvdycpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmludGVybmFsU3RhcnQoKVxuICB9XG5cbiAgcHJpdmF0ZSBpbnRlcm5hbFN0YXJ0KCkge1xuICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHJldHVyblxuXG4gICAgdGhpcy5yZXNldCgpXG4gICAgdGhpcy5pc1N0b3BwZWQgPSBmYWxzZVxuICAgIHRoaXMuZW1pdCgpXG4gIH1cblxuICAvKipcbiAgICogU3RvcCBsZW5pcyBzY3JvbGxcbiAgICovXG4gIHN0b3AoKSB7XG4gICAgaWYgKHRoaXMuaXNTdG9wcGVkKSByZXR1cm5cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSkge1xuICAgICAgdGhpcy5yb290RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cnLCAnY2xpcCcpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmludGVybmFsU3RvcCgpXG4gIH1cblxuICBwcml2YXRlIGludGVybmFsU3RvcCgpIHtcbiAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHJldHVyblxuXG4gICAgdGhpcy5yZXNldCgpXG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlXG4gICAgdGhpcy5lbWl0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZm9yIGxlbmlzXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lIFRoZSB0aW1lIGluIG1zIGZyb20gYW4gZXh0ZXJuYWwgY2xvY2sgbGlrZSBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBvciBUZW1wdXNcbiAgICovXG4gIHJhZiA9ICh0aW1lOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBkZWx0YVRpbWUgPSB0aW1lIC0gKHRoaXMudGltZSB8fCB0aW1lKVxuICAgIHRoaXMudGltZSA9IHRpbWVcblxuICAgIHRoaXMuYW5pbWF0ZS5hZHZhbmNlKGRlbHRhVGltZSAqIDAuMDAxKVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUmFmKSB7XG4gICAgICB0aGlzLl9yYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJhZilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHRvIGEgdGFyZ2V0IHZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCB2YWx1ZSB0byBzY3JvbGwgdG9cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBzY3JvbGxcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbGVuaXMuc2Nyb2xsVG8oMTAwLCB7XG4gICAqICAgb2Zmc2V0OiAxMDAsXG4gICAqICAgZHVyYXRpb246IDEsXG4gICAqICAgZWFzaW5nOiAodCkgPT4gMSAtIE1hdGguY29zKCh0ICogTWF0aC5QSSkgLyAyKSxcbiAgICogICBsZXJwOiAwLjEsXG4gICAqICAgb25TdGFydDogKCkgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coJ29uU3RhcnQnKVxuICAgKiAgIH0sXG4gICAqICAgb25Db21wbGV0ZTogKCkgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coJ29uQ29tcGxldGUnKVxuICAgKiAgIH0sXG4gICAqIH0pXG4gICAqL1xuICBzY3JvbGxUbyhcbiAgICB0YXJnZXQ6IG51bWJlciB8IHN0cmluZyB8IEhUTUxFbGVtZW50LFxuICAgIHtcbiAgICAgIG9mZnNldCA9IDAsXG4gICAgICBpbW1lZGlhdGUgPSBmYWxzZSxcbiAgICAgIGxvY2sgPSBmYWxzZSxcbiAgICAgIHByb2dyYW1tYXRpYyA9IHRydWUsIC8vIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhlIGNsYXNzXG4gICAgICBsZXJwID0gcHJvZ3JhbW1hdGljID8gdGhpcy5vcHRpb25zLmxlcnAgOiB1bmRlZmluZWQsXG4gICAgICBkdXJhdGlvbiA9IHByb2dyYW1tYXRpYyA/IHRoaXMub3B0aW9ucy5kdXJhdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgIGVhc2luZyA9IHByb2dyYW1tYXRpYyA/IHRoaXMub3B0aW9ucy5lYXNpbmcgOiB1bmRlZmluZWQsXG4gICAgICBvblN0YXJ0LFxuICAgICAgb25Db21wbGV0ZSxcbiAgICAgIGZvcmNlID0gZmFsc2UsIC8vIHNjcm9sbCBldmVuIGlmIHN0b3BwZWRcbiAgICAgIHVzZXJEYXRhLFxuICAgIH06IFNjcm9sbFRvT3B0aW9ucyA9IHt9XG4gICkge1xuICAgIGlmICgodGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5pc0xvY2tlZCkgJiYgIWZvcmNlKSByZXR1cm5cblxuICAgIC8vIGtleXdvcmRzXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIFsndG9wJywgJ2xlZnQnLCAnc3RhcnQnLCAnIyddLmluY2x1ZGVzKHRhcmdldClcbiAgICApIHtcbiAgICAgIHRhcmdldCA9IDBcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIFsnYm90dG9tJywgJ3JpZ2h0JywgJ2VuZCddLmluY2x1ZGVzKHRhcmdldClcbiAgICApIHtcbiAgICAgIHRhcmdldCA9IHRoaXMubGltaXRcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG5vZGVcblxuICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIENTUyBzZWxlY3RvclxuICAgICAgICBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpXG5cbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgaWYgKHRhcmdldCA9PT0gJyN0b3AnKSB7XG4gICAgICAgICAgICB0YXJnZXQgPSAwXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignTGVuaXM6IFRhcmdldCBub3QgZm91bmQnLCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldD8ubm9kZVR5cGUpIHtcbiAgICAgICAgLy8gTm9kZSBlbGVtZW50XG4gICAgICAgIG5vZGUgPSB0YXJnZXRcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy53cmFwcGVyICE9PSB3aW5kb3cpIHtcbiAgICAgICAgICAvLyBuZXN0ZWQgc2Nyb2xsIG9mZnNldCBjb3JyZWN0aW9uXG4gICAgICAgICAgY29uc3Qgd3JhcHBlclJlY3QgPSB0aGlzLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgb2Zmc2V0IC09IHRoaXMuaXNIb3Jpem9udGFsID8gd3JhcHBlclJlY3QubGVmdCA6IHdyYXBwZXJSZWN0LnRvcFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcblxuICAgICAgICB0YXJnZXQgPVxuICAgICAgICAgICh0aGlzLmlzSG9yaXpvbnRhbCA/IHJlY3QubGVmdCA6IHJlY3QudG9wKSArIHRoaXMuYW5pbWF0ZWRTY3JvbGxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ251bWJlcicpIHJldHVyblxuXG4gICAgdGFyZ2V0ICs9IG9mZnNldFxuICAgIHRhcmdldCA9IE1hdGgucm91bmQodGFyZ2V0KVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pbmZpbml0ZSkge1xuICAgICAgaWYgKHByb2dyYW1tYXRpYykge1xuICAgICAgICB0aGlzLnRhcmdldFNjcm9sbCA9IHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB0aGlzLnNjcm9sbFxuXG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gdGFyZ2V0IC0gdGhpcy5hbmltYXRlZFNjcm9sbFxuXG4gICAgICAgIGlmIChkaXN0YW5jZSA+IHRoaXMubGltaXQgLyAyKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0IC0gdGhpcy5saW1pdFxuICAgICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlIDwgLXRoaXMubGltaXQgLyAyKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0ICsgdGhpcy5saW1pdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldCA9IGNsYW1wKDAsIHRhcmdldCwgdGhpcy5saW1pdClcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0ID09PSB0aGlzLnRhcmdldFNjcm9sbCkge1xuICAgICAgb25TdGFydD8uKHRoaXMpXG4gICAgICBvbkNvbXBsZXRlPy4odGhpcylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMudXNlckRhdGEgPSB1c2VyRGF0YSA/PyB7fVxuXG4gICAgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMudGFyZ2V0U2Nyb2xsID0gdGFyZ2V0XG4gICAgICB0aGlzLnNldFNjcm9sbCh0aGlzLnNjcm9sbClcbiAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgdGhpcy5wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KClcbiAgICAgIHRoaXMuZW1pdCgpXG4gICAgICBvbkNvbXBsZXRlPy4odGhpcylcbiAgICAgIHRoaXMudXNlckRhdGEgPSB7fVxuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc3BhdGNoU2Nyb2xsZW5kRXZlbnQoKVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcHJvZ3JhbW1hdGljKSB7XG4gICAgICB0aGlzLnRhcmdldFNjcm9sbCA9IHRhcmdldFxuICAgIH1cblxuICAgIC8vIGZsaXAgdG8gZWFzaW5nL3RpbWUgYmFzZWQgYW5pbWF0aW9uIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGVtIGlzIHByb3ZpZGVkXG4gICAgaWYgKHR5cGVvZiBkdXJhdGlvbiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGVhc2luZyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZWFzaW5nID0gZGVmYXVsdEVhc2luZ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVhc2luZyA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZHVyYXRpb24gIT09ICdudW1iZXInKSB7XG4gICAgICBkdXJhdGlvbiA9IDFcbiAgICB9XG5cbiAgICB0aGlzLmFuaW1hdGUuZnJvbVRvKHRoaXMuYW5pbWF0ZWRTY3JvbGwsIHRhcmdldCwge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBlYXNpbmcsXG4gICAgICBsZXJwLFxuICAgICAgb25TdGFydDogKCkgPT4ge1xuICAgICAgICAvLyBzdGFydGVkXG4gICAgICAgIGlmIChsb2NrKSB0aGlzLmlzTG9ja2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gJ3Ntb290aCdcbiAgICAgICAgb25TdGFydD8uKHRoaXMpXG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6ICh2YWx1ZTogbnVtYmVyLCBjb21wbGV0ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9ICdzbW9vdGgnXG5cbiAgICAgICAgLy8gdXBkYXRlZFxuICAgICAgICB0aGlzLmxhc3RWZWxvY2l0eSA9IHRoaXMudmVsb2NpdHlcbiAgICAgICAgdGhpcy52ZWxvY2l0eSA9IHZhbHVlIC0gdGhpcy5hbmltYXRlZFNjcm9sbFxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IE1hdGguc2lnbih0aGlzLnZlbG9jaXR5KSBhcyBMZW5pc1snZGlyZWN0aW9uJ11cblxuICAgICAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdmFsdWVcbiAgICAgICAgdGhpcy5zZXRTY3JvbGwodGhpcy5zY3JvbGwpXG5cbiAgICAgICAgaWYgKHByb2dyYW1tYXRpYykge1xuICAgICAgICAgIC8vIHdoZWVsIGR1cmluZyBwcm9ncmFtbWF0aWMgc2hvdWxkIHN0b3AgaXRcbiAgICAgICAgICB0aGlzLnRhcmdldFNjcm9sbCA9IHZhbHVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbXBsZXRlZCkgdGhpcy5lbWl0KClcblxuICAgICAgICBpZiAoY29tcGxldGVkKSB7XG4gICAgICAgICAgdGhpcy5yZXNldCgpXG4gICAgICAgICAgdGhpcy5lbWl0KClcbiAgICAgICAgICBvbkNvbXBsZXRlPy4odGhpcylcbiAgICAgICAgICB0aGlzLnVzZXJEYXRhID0ge31cblxuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoU2Nyb2xsZW5kRXZlbnQoKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICAvLyBhdm9pZCBlbWl0dGluZyBldmVudCB0d2ljZVxuICAgICAgICAgIHRoaXMucHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCgpIHtcbiAgICB0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50ID0gdHJ1ZVxuXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQgPSBmYWxzZVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGNoZWNrTmVzdGVkU2Nyb2xsKFxuICAgIG5vZGU6IEhUTUxFbGVtZW50LFxuICAgIHsgZGVsdGFYLCBkZWx0YVkgfTogeyBkZWx0YVg6IG51bWJlcjsgZGVsdGFZOiBudW1iZXIgfVxuICApIHtcbiAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGNhY2hlID0gKG5vZGUuX2xlbmlzID8/PSB7fSlcblxuICAgIGxldCBoYXNPdmVyZmxvd1gsXG4gICAgICBoYXNPdmVyZmxvd1ksXG4gICAgICBpc1Njcm9sbGFibGVYLFxuICAgICAgaXNTY3JvbGxhYmxlWSxcbiAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgY2xpZW50V2lkdGgsXG4gICAgICBjbGllbnRIZWlnaHRcblxuICAgIGNvbnN0IGdlc3R1cmVPcmllbnRhdGlvbiA9IHRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb25cblxuICAgIGlmICh0aW1lIC0gKGNhY2hlLnRpbWUgPz8gMCkgPiAyMDAwKSB7XG4gICAgICBjYWNoZS50aW1lID0gRGF0ZS5ub3coKVxuXG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSlcbiAgICAgIGNhY2hlLmNvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlXG5cbiAgICAgIGNvbnN0IG92ZXJmbG93WFN0cmluZyA9IGNvbXB1dGVkU3R5bGUub3ZlcmZsb3dYXG4gICAgICBjb25zdCBvdmVyZmxvd1lTdHJpbmcgPSBjb21wdXRlZFN0eWxlLm92ZXJmbG93WVxuXG4gICAgICBoYXNPdmVyZmxvd1ggPSBbJ2F1dG8nLCAnb3ZlcmxheScsICdzY3JvbGwnXS5pbmNsdWRlcyhvdmVyZmxvd1hTdHJpbmcpXG4gICAgICBoYXNPdmVyZmxvd1kgPSBbJ2F1dG8nLCAnb3ZlcmxheScsICdzY3JvbGwnXS5pbmNsdWRlcyhvdmVyZmxvd1lTdHJpbmcpXG4gICAgICBjYWNoZS5oYXNPdmVyZmxvd1ggPSBoYXNPdmVyZmxvd1hcbiAgICAgIGNhY2hlLmhhc092ZXJmbG93WSA9IGhhc092ZXJmbG93WVxuXG4gICAgICBpZiAoIWhhc092ZXJmbG93WCAmJiAhaGFzT3ZlcmZsb3dZKSByZXR1cm4gZmFsc2UgLy8gaWYgbm8gb3ZlcmZsb3csIGl0J3Mgbm90IHNjcm9sbGFibGUgbm8gbWF0dGVyIHdoYXQsIGVhcmx5IHJldHVybiBzYXZlcyBzb21lIGNvbXB1dGF0aW9uc1xuICAgICAgaWYgKGdlc3R1cmVPcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiAhaGFzT3ZlcmZsb3dZKSByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJiAhaGFzT3ZlcmZsb3dYKSByZXR1cm4gZmFsc2VcblxuICAgICAgc2Nyb2xsV2lkdGggPSBub2RlLnNjcm9sbFdpZHRoXG4gICAgICBzY3JvbGxIZWlnaHQgPSBub2RlLnNjcm9sbEhlaWdodFxuXG4gICAgICBjbGllbnRXaWR0aCA9IG5vZGUuY2xpZW50V2lkdGhcbiAgICAgIGNsaWVudEhlaWdodCA9IG5vZGUuY2xpZW50SGVpZ2h0XG5cbiAgICAgIGlzU2Nyb2xsYWJsZVggPSBzY3JvbGxXaWR0aCA+IGNsaWVudFdpZHRoXG4gICAgICBpc1Njcm9sbGFibGVZID0gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0XG5cbiAgICAgIGNhY2hlLmlzU2Nyb2xsYWJsZVggPSBpc1Njcm9sbGFibGVYXG4gICAgICBjYWNoZS5pc1Njcm9sbGFibGVZID0gaXNTY3JvbGxhYmxlWVxuICAgICAgY2FjaGUuc2Nyb2xsV2lkdGggPSBzY3JvbGxXaWR0aFxuICAgICAgY2FjaGUuc2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsSGVpZ2h0XG4gICAgICBjYWNoZS5jbGllbnRXaWR0aCA9IGNsaWVudFdpZHRoXG4gICAgICBjYWNoZS5jbGllbnRIZWlnaHQgPSBjbGllbnRIZWlnaHRcbiAgICB9IGVsc2Uge1xuICAgICAgaXNTY3JvbGxhYmxlWCA9IGNhY2hlLmlzU2Nyb2xsYWJsZVhcbiAgICAgIGlzU2Nyb2xsYWJsZVkgPSBjYWNoZS5pc1Njcm9sbGFibGVZXG4gICAgICBoYXNPdmVyZmxvd1ggPSBjYWNoZS5oYXNPdmVyZmxvd1hcbiAgICAgIGhhc092ZXJmbG93WSA9IGNhY2hlLmhhc092ZXJmbG93WVxuICAgICAgc2Nyb2xsV2lkdGggPSBjYWNoZS5zY3JvbGxXaWR0aFxuICAgICAgc2Nyb2xsSGVpZ2h0ID0gY2FjaGUuc2Nyb2xsSGVpZ2h0XG4gICAgICBjbGllbnRXaWR0aCA9IGNhY2hlLmNsaWVudFdpZHRoXG4gICAgICBjbGllbnRIZWlnaHQgPSBjYWNoZS5jbGllbnRIZWlnaHRcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoIWhhc092ZXJmbG93WCAmJiAhaGFzT3ZlcmZsb3dZKSB8fFxuICAgICAgKCFpc1Njcm9sbGFibGVYICYmICFpc1Njcm9sbGFibGVZKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGdlc3R1cmVPcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiAoIWhhc092ZXJmbG93WSB8fCAhaXNTY3JvbGxhYmxlWSkpXG4gICAgICByZXR1cm4gZmFsc2VcblxuICAgIGlmIChcbiAgICAgIGdlc3R1cmVPcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG4gICAgICAoIWhhc092ZXJmbG93WCB8fCAhaXNTY3JvbGxhYmxlWClcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2VcblxuICAgIGxldCBvcmllbnRhdGlvbjogJ3gnIHwgJ3knIHwgdW5kZWZpbmVkXG5cbiAgICBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIG9yaWVudGF0aW9uID0gJ3gnXG4gICAgfSBlbHNlIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgIG9yaWVudGF0aW9uID0gJ3knXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nWCA9IGRlbHRhWCAhPT0gMFxuICAgICAgY29uc3QgaXNTY3JvbGxpbmdZID0gZGVsdGFZICE9PSAwXG5cbiAgICAgIGlmIChpc1Njcm9sbGluZ1ggJiYgaGFzT3ZlcmZsb3dYICYmIGlzU2Nyb2xsYWJsZVgpIHtcbiAgICAgICAgb3JpZW50YXRpb24gPSAneCdcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU2Nyb2xsaW5nWSAmJiBoYXNPdmVyZmxvd1kgJiYgaXNTY3JvbGxhYmxlWSkge1xuICAgICAgICBvcmllbnRhdGlvbiA9ICd5J1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghb3JpZW50YXRpb24pIHJldHVybiBmYWxzZVxuXG4gICAgbGV0IHNjcm9sbCwgbWF4U2Nyb2xsLCBkZWx0YSwgaGFzT3ZlcmZsb3csIGlzU2Nyb2xsYWJsZVxuXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAneCcpIHtcbiAgICAgIHNjcm9sbCA9IG5vZGUuc2Nyb2xsTGVmdFxuICAgICAgbWF4U2Nyb2xsID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aFxuICAgICAgZGVsdGEgPSBkZWx0YVhcblxuICAgICAgaGFzT3ZlcmZsb3cgPSBoYXNPdmVyZmxvd1hcbiAgICAgIGlzU2Nyb2xsYWJsZSA9IGlzU2Nyb2xsYWJsZVhcbiAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09PSAneScpIHtcbiAgICAgIHNjcm9sbCA9IG5vZGUuc2Nyb2xsVG9wXG4gICAgICBtYXhTY3JvbGwgPSBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHRcbiAgICAgIGRlbHRhID0gZGVsdGFZXG5cbiAgICAgIGhhc092ZXJmbG93ID0gaGFzT3ZlcmZsb3dZXG4gICAgICBpc1Njcm9sbGFibGUgPSBpc1Njcm9sbGFibGVZXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IHdpbGxTY3JvbGwgPSBkZWx0YSA+IDAgPyBzY3JvbGwgPCBtYXhTY3JvbGwgOiBzY3JvbGwgPiAwXG5cbiAgICByZXR1cm4gd2lsbFNjcm9sbCAmJiBoYXNPdmVyZmxvdyAmJiBpc1Njcm9sbGFibGVcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBlbGVtZW50IG9uIHdoaWNoIGxlbmlzIGlzIGluc3RhbmNlZFxuICAgKi9cbiAgZ2V0IHJvb3RFbGVtZW50KCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm9wdGlvbnMud3JhcHBlciA9PT0gd2luZG93XG4gICAgICAgID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAgICAgIDogdGhpcy5vcHRpb25zLndyYXBwZXJcbiAgICApIGFzIEhUTUxFbGVtZW50XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxpbWl0IHdoaWNoIGlzIHRoZSBtYXhpbXVtIHNjcm9sbCB2YWx1ZVxuICAgKi9cbiAgZ2V0IGxpbWl0KCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubmFpdmVEaW1lbnNpb25zKSB7XG4gICAgICBpZiAodGhpcy5pc0hvcml6b250YWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdEVsZW1lbnQuc2Nyb2xsV2lkdGggLSB0aGlzLnJvb3RFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290RWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLnJvb3RFbGVtZW50LmNsaWVudEhlaWdodFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kaW1lbnNpb25zLmxpbWl0W3RoaXMuaXNIb3Jpem9udGFsID8gJ3gnIDogJ3knXVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgc2Nyb2xsIGlzIGhvcml6b250YWxcbiAgICovXG4gIGdldCBpc0hvcml6b250YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gIH1cblxuICAvKipcbiAgICogVGhlIGFjdHVhbCBzY3JvbGwgdmFsdWVcbiAgICovXG4gIGdldCBhY3R1YWxTY3JvbGwoKSB7XG4gICAgLy8gdmFsdWUgYnJvd3NlciB0YWtlcyBpbnRvIGFjY291bnRcbiAgICAvLyBpdCBoYXMgdG8gYmUgdGhpcyB3YXkgYmVjYXVzZSBvZiBET0NUWVBFIGRlY2xhcmF0aW9uXG4gICAgY29uc3Qgd3JhcHBlciA9IHRoaXMub3B0aW9ucy53cmFwcGVyIGFzIFdpbmRvdyB8IEhUTUxFbGVtZW50XG5cbiAgICByZXR1cm4gdGhpcy5pc0hvcml6b250YWxcbiAgICAgID8gKHdyYXBwZXIgYXMgV2luZG93KS5zY3JvbGxYID8/ICh3cmFwcGVyIGFzIEhUTUxFbGVtZW50KS5zY3JvbGxMZWZ0XG4gICAgICA6ICh3cmFwcGVyIGFzIFdpbmRvdykuc2Nyb2xsWSA/PyAod3JhcHBlciBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wXG4gIH1cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc2Nyb2xsIHZhbHVlXG4gICAqL1xuICBnZXQgc2Nyb2xsKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaW5maW5pdGVcbiAgICAgID8gbW9kdWxvKHRoaXMuYW5pbWF0ZWRTY3JvbGwsIHRoaXMubGltaXQpXG4gICAgICA6IHRoaXMuYW5pbWF0ZWRTY3JvbGxcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIHNjcm9sbCByZWxhdGl2ZSB0byB0aGUgbGltaXRcbiAgICovXG4gIGdldCBwcm9ncmVzcygpIHtcbiAgICAvLyBhdm9pZCBwcm9ncmVzcyB0byBiZSBOYU5cbiAgICByZXR1cm4gdGhpcy5saW1pdCA9PT0gMCA/IDEgOiB0aGlzLnNjcm9sbCAvIHRoaXMubGltaXRcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXJyZW50IHNjcm9sbCBzdGF0ZVxuICAgKi9cbiAgZ2V0IGlzU2Nyb2xsaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Njcm9sbGluZ1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgaXNTY3JvbGxpbmcodmFsdWU6IFNjcm9sbGluZykge1xuICAgIGlmICh0aGlzLl9pc1Njcm9sbGluZyAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX2lzU2Nyb2xsaW5nID0gdmFsdWVcbiAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgbGVuaXMgaXMgc3RvcHBlZFxuICAgKi9cbiAgZ2V0IGlzU3RvcHBlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdG9wcGVkXG4gIH1cblxuICBwcml2YXRlIHNldCBpc1N0b3BwZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5faXNTdG9wcGVkICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5faXNTdG9wcGVkID0gdmFsdWVcbiAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgbGVuaXMgaXMgbG9ja2VkXG4gICAqL1xuICBnZXQgaXNMb2NrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTG9ja2VkXG4gIH1cblxuICBwcml2YXRlIHNldCBpc0xvY2tlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9pc0xvY2tlZCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX2lzTG9ja2VkID0gdmFsdWVcbiAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgbGVuaXMgaXMgc21vb3RoIHNjcm9sbGluZ1xuICAgKi9cbiAgZ2V0IGlzU21vb3RoKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2Nyb2xsaW5nID09PSAnc21vb3RoJ1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjbGFzcyBuYW1lIGFwcGxpZWQgdG8gdGhlIHdyYXBwZXIgZWxlbWVudFxuICAgKi9cbiAgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gJ2xlbmlzJ1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSkgY2xhc3NOYW1lICs9ICcgbGVuaXMtYXV0b1RvZ2dsZSdcbiAgICBpZiAodGhpcy5pc1N0b3BwZWQpIGNsYXNzTmFtZSArPSAnIGxlbmlzLXN0b3BwZWQnXG4gICAgaWYgKHRoaXMuaXNMb2NrZWQpIGNsYXNzTmFtZSArPSAnIGxlbmlzLWxvY2tlZCdcbiAgICBpZiAodGhpcy5pc1Njcm9sbGluZykgY2xhc3NOYW1lICs9ICcgbGVuaXMtc2Nyb2xsaW5nJ1xuICAgIGlmICh0aGlzLmlzU2Nyb2xsaW5nID09PSAnc21vb3RoJykgY2xhc3NOYW1lICs9ICcgbGVuaXMtc21vb3RoJ1xuICAgIHJldHVybiBjbGFzc05hbWVcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2xhc3NOYW1lKCkge1xuICAgIHRoaXMuY2xlYW5VcENsYXNzTmFtZSgpXG5cbiAgICB0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZSA9XG4gICAgICBgJHt0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZX0gJHt0aGlzLmNsYXNzTmFtZX1gLnRyaW0oKVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwQ2xhc3NOYW1lKCkge1xuICAgIHRoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5yb290RWxlbWVudC5jbGFzc05hbWVcbiAgICAgIC5yZXBsYWNlKC9sZW5pcygtXFx3Kyk/L2csICcnKVxuICAgICAgLnRyaW0oKVxuICB9XG59XG4iLCAiLyohIEBwcmVzZXJ2ZSBzd2VldC1zY3JvbGwgdjQuMC4wIC0gdHN1eW9zaGl3YWRhIHwgTUlUIExpY2Vuc2UgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGdsb2JhbCA9IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuU3dlZXRTY3JvbGwgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCBmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxuICAgIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbiAgICBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuICAgIFRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuICAgIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbiAgICBNRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuICAgIFNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG4gICAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbiAgICB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xuXG4gICAgLy8gQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9leGVudi9ibG9iL21hc3Rlci9pbmRleC5qc1xyXG4gICAgdmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgd2luZG93LmRvY3VtZW50ICYmXHJcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xyXG4gICAgdmFyIGNhblVzZUhpc3RvcnkgPSAhY2FuVXNlRE9NXHJcbiAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgIDogd2luZG93Lmhpc3RvcnkgJiYgJ3B1c2hTdGF0ZScgaW4gd2luZG93Lmhpc3RvcnkgJiYgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonO1xyXG4gICAgdmFyIGNhblVzZVBhc3NpdmVPcHRpb24gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzdXBwb3J0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFjYW5Vc2VET00pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cHBvcnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlOm5vLWVtcHR5ICovXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHdpbiA9IHdpbmRvdztcclxuICAgICAgICAgICAgdmFyIG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgd2luLmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBudWxsLCBvcHRzKTtcclxuICAgICAgICAgICAgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBudWxsLCBvcHRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgIC8qIHRzbGludDplbmFibGUgKi9cclxuICAgICAgICByZXR1cm4gc3VwcG9ydDtcclxuICAgIH0pKCk7XG5cbiAgICB2YXIgaXNTdHJpbmcgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqID09PSAnc3RyaW5nJzsgfTtcclxuICAgIHZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJzsgfTtcclxuICAgIHZhciBpc0FycmF5ID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopOyB9O1xyXG4gICAgdmFyIGlzTnVtZXJpYyA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuICFpc0FycmF5KG9iaikgJiYgb2JqIC0gcGFyc2VGbG9hdChvYmopICsgMSA+PSAwOyB9O1xyXG4gICAgdmFyIGhhc1Byb3AgPSBmdW5jdGlvbiAob2JqLCBrZXkpIHsgcmV0dXJuIG9iaiAmJiBvYmouaGFzT3duUHJvcGVydHkoa2V5KTsgfTtcblxuICAgIHZhciByYWYgPSBjYW5Vc2VET01cclxuICAgICAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgdmFyIGNhZiA9IGNhblVzZURPTVxyXG4gICAgICAgID8gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KVxyXG4gICAgICAgIDogbnVsbDtcblxuICAgIC8qIHRzbGludDpkaXNhYmxlOmN1cmx5ICovXHJcbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZTpuby1jb25kaXRpb25hbC1hc3NpZ25tZW50ICovXHJcbiAgICB2YXIgY29zID0gTWF0aC5jb3MsIHNpbiA9IE1hdGguc2luLCBwb3cgPSBNYXRoLnBvdywgc3FydCA9IE1hdGguc3FydCwgUEkgPSBNYXRoLlBJO1xyXG4gICAgdmFyIGVhc2luZ3MgPSB7XHJcbiAgICAgICAgbGluZWFyOiBmdW5jdGlvbiAocCkgeyByZXR1cm4gcDsgfSxcclxuICAgICAgICBlYXNlSW5RdWFkOiBmdW5jdGlvbiAoXywgdCwgYiwgYywgZCkgeyByZXR1cm4gYyAqICh0IC89IGQpICogdCArIGI7IH0sXHJcbiAgICAgICAgZWFzZU91dFF1YWQ6IGZ1bmN0aW9uIChfLCB0LCBiLCBjLCBkKSB7IHJldHVybiAtYyAqICh0IC89IGQpICogKHQgLSAyKSArIGI7IH0sXHJcbiAgICAgICAgZWFzZUluT3V0UXVhZDogZnVuY3Rpb24gKF8sIHQsIGIsIGMsIGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0IC89IGQgLyAyKSA8IDEgPyAoYyAvIDIpICogdCAqIHQgKyBiIDogKC1jIC8gMikgKiAoLS10ICogKHQgLSAyKSAtIDEpICsgYjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVhc2VJbkN1YmljOiBmdW5jdGlvbiAoXywgdCwgYiwgYywgZCkgeyByZXR1cm4gYyAqICh0IC89IGQpICogdCAqIHQgKyBiOyB9LFxyXG4gICAgICAgIGVhc2VPdXRDdWJpYzogZnVuY3Rpb24gKF8sIHQsIGIsIGMsIGQpIHsgcmV0dXJuIGMgKiAoKHQgPSB0IC8gZCAtIDEpICogdCAqIHQgKyAxKSArIGI7IH0sXHJcbiAgICAgICAgZWFzZUluT3V0Q3ViaWM6IGZ1bmN0aW9uIChfLCB0LCBiLCBjLCBkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodCAvPSBkIC8gMikgPCAxID8gKGMgLyAyKSAqIHQgKiB0ICogdCArIGIgOiAoYyAvIDIpICogKCh0IC09IDIpICogdCAqIHQgKyAyKSArIGI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlYXNlSW5RdWFydDogZnVuY3Rpb24gKF8sIHQsIGIsIGMsIGQpIHsgcmV0dXJuIGMgKiAodCAvPSBkKSAqIHQgKiB0ICogdCArIGI7IH0sXHJcbiAgICAgICAgZWFzZU91dFF1YXJ0OiBmdW5jdGlvbiAoXywgdCwgYiwgYywgZCkgeyByZXR1cm4gLWMgKiAoKHQgPSB0IC8gZCAtIDEpICogdCAqIHQgKiB0IC0gMSkgKyBiOyB9LFxyXG4gICAgICAgIGVhc2VJbk91dFF1YXJ0OiBmdW5jdGlvbiAoXywgdCwgYiwgYywgZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHQgLz0gZCAvIDIpIDwgMSA/IChjIC8gMikgKiB0ICogdCAqIHQgKiB0ICsgYiA6ICgtYyAvIDIpICogKCh0IC09IDIpICogdCAqIHQgKiB0IC0gMikgKyBiO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWFzZUluUXVpbnQ6IGZ1bmN0aW9uIChfLCB0LCBiLCBjLCBkKSB7IHJldHVybiBjICogKHQgLz0gZCkgKiB0ICogdCAqIHQgKiB0ICsgYjsgfSxcclxuICAgICAgICBlYXNlT3V0UXVpbnQ6IGZ1bmN0aW9uIChfLCB0LCBiLCBjLCBkKSB7IHJldHVybiBjICogKCh0ID0gdCAvIGQgLSAxKSAqIHQgKiB0ICogdCAqIHQgKyAxKSArIGI7IH0sXHJcbiAgICAgICAgZWFzZUluT3V0UXVpbnQ6IGZ1bmN0aW9uIChfLCB0LCBiLCBjLCBkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodCAvPSBkIC8gMikgPCAxXHJcbiAgICAgICAgICAgICAgICA/IChjIC8gMikgKiB0ICogdCAqIHQgKiB0ICogdCArIGJcclxuICAgICAgICAgICAgICAgIDogKGMgLyAyKSAqICgodCAtPSAyKSAqIHQgKiB0ICogdCAqIHQgKyAyKSArIGI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlYXNlSW5TaW5lOiBmdW5jdGlvbiAoXywgdCwgYiwgYywgZCkgeyByZXR1cm4gLWMgKiBjb3MoKHQgLyBkKSAqIChQSSAvIDIpKSArIGMgKyBiOyB9LFxyXG4gICAgICAgIGVhc2VPdXRTaW5lOiBmdW5jdGlvbiAoXywgdCwgYiwgYywgZCkgeyByZXR1cm4gYyAqIHNpbigodCAvIGQpICogKFBJIC8gMikpICsgYjsgfSxcclxuICAgICAgICBlYXNlSW5PdXRTaW5lOiBmdW5jdGlvbiAoXywgdCwgYiwgYywgZCkgeyByZXR1cm4gKC1jIC8gMikgKiAoY29zKChQSSAqIHQpIC8gZCkgLSAxKSArIGI7IH0sXHJcbiAgICAgICAgZWFzZUluRXhwbzogZnVuY3Rpb24gKF8sIHQsIGIsIGMsIGQpIHsgcmV0dXJuICh0ID09PSAwID8gYiA6IGMgKiBwb3coMiwgMTAgKiAodCAvIGQgLSAxKSkgKyBiKTsgfSxcclxuICAgICAgICBlYXNlT3V0RXhwbzogZnVuY3Rpb24gKF8sIHQsIGIsIGMsIGQpIHsgcmV0dXJuICh0ID09PSBkID8gYiArIGMgOiBjICogKC1wb3coMiwgKC0xMCAqIHQpIC8gZCkgKyAxKSArIGIpOyB9LFxyXG4gICAgICAgIGVhc2VJbk91dEV4cG86IGZ1bmN0aW9uIChfLCB0LCBiLCBjLCBkKSB7XHJcbiAgICAgICAgICAgIGlmICh0ID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGI7XHJcbiAgICAgICAgICAgIGlmICh0ID09PSBkKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGIgKyBjO1xyXG4gICAgICAgICAgICBpZiAoKHQgLz0gZCAvIDIpIDwgMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiAoYyAvIDIpICogcG93KDIsIDEwICogKHQgLSAxKSkgKyBiO1xyXG4gICAgICAgICAgICByZXR1cm4gKGMgLyAyKSAqICgtcG93KDIsIC0xMCAqIC0tdCkgKyAyKSArIGI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlYXNlSW5DaXJjOiBmdW5jdGlvbiAoXywgdCwgYiwgYywgZCkgeyByZXR1cm4gLWMgKiAoc3FydCgxIC0gKHQgLz0gZCkgKiB0KSAtIDEpICsgYjsgfSxcclxuICAgICAgICBlYXNlT3V0Q2lyYzogZnVuY3Rpb24gKF8sIHQsIGIsIGMsIGQpIHsgcmV0dXJuIGMgKiBzcXJ0KDEgLSAodCA9IHQgLyBkIC0gMSkgKiB0KSArIGI7IH0sXHJcbiAgICAgICAgZWFzZUluT3V0Q2lyYzogZnVuY3Rpb24gKF8sIHQsIGIsIGMsIGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0IC89IGQgLyAyKSA8IDFcclxuICAgICAgICAgICAgICAgID8gKC1jIC8gMikgKiAoc3FydCgxIC0gdCAqIHQpIC0gMSkgKyBiXHJcbiAgICAgICAgICAgICAgICA6IChjIC8gMikgKiAoc3FydCgxIC0gKHQgLT0gMikgKiB0KSArIDEpICsgYjtcclxuICAgICAgICB9LFxyXG4gICAgfTtcblxuICAgIHZhciAkJCA9IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgoIXNlbGVjdG9yID8gW10gOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xyXG4gICAgfTtcclxuICAgIHZhciAkID0gZnVuY3Rpb24gKHNlbGVjdG9yKSB7IHJldHVybiAkJChzZWxlY3Rvcikuc2hpZnQoKSB8fCBudWxsOyB9O1xyXG4gICAgdmFyIGlzRWxlbWVudCA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEVsZW1lbnQ7IH07XHJcbiAgICB2YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiAoJGVsKSB7IHJldHVybiAkZWwgPT09IHdpbmRvdzsgfTtcclxuICAgIHZhciBpc1Jvb3RDb250YWluZXIgPSBmdW5jdGlvbiAoJGVsKSB7XHJcbiAgICAgICAgcmV0dXJuICRlbCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8ICRlbCA9PT0gZG9jdW1lbnQuYm9keTtcclxuICAgIH07XHJcbiAgICB2YXIgbWF0Y2hlcyA9IGZ1bmN0aW9uICgkZWwsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgaWYgKGlzRWxlbWVudChzZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuICRlbCA9PT0gc2VsZWN0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXN1bHRzID0gJCQoc2VsZWN0b3IpO1xyXG4gICAgICAgIHZhciBpID0gcmVzdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICAgd2hpbGUgKC0taSA+PSAwICYmIHJlc3VsdHNbaV0gIT09ICRlbCkgeyB9XHJcbiAgICAgICAgcmV0dXJuIGkgPiAtMTtcclxuICAgIH07XG5cbiAgICB2YXIgZ2V0SGVpZ2h0ID0gZnVuY3Rpb24gKCRlbCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgkZWwuc2Nyb2xsSGVpZ2h0LCAkZWwuY2xpZW50SGVpZ2h0LCAkZWwub2Zmc2V0SGVpZ2h0KTtcclxuICAgIH07XHJcbiAgICB2YXIgZ2V0V2lkdGggPSBmdW5jdGlvbiAoJGVsKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KCRlbC5zY3JvbGxXaWR0aCwgJGVsLmNsaWVudFdpZHRoLCAkZWwub2Zmc2V0V2lkdGgpO1xyXG4gICAgfTtcclxuICAgIHZhciBnZXRTaXplID0gZnVuY3Rpb24gKCRlbCkgeyByZXR1cm4gKHtcclxuICAgICAgICB3aWR0aDogZ2V0V2lkdGgoJGVsKSxcclxuICAgICAgICBoZWlnaHQ6IGdldEhlaWdodCgkZWwpLFxyXG4gICAgfSk7IH07XHJcbiAgICB2YXIgZ2V0Vmlld3BvcnRBbmRFbGVtZW50U2l6ZXMgPSBmdW5jdGlvbiAoJGVsKSB7XHJcbiAgICAgICAgdmFyIGlzUm9vdCA9IGlzV2luZG93KCRlbCkgfHwgaXNSb290Q29udGFpbmVyKCRlbCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmlld3BvcnQ6IHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBpc1Jvb3RcclxuICAgICAgICAgICAgICAgICAgICA/IE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoLCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpXHJcbiAgICAgICAgICAgICAgICAgICAgOiAkZWwuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGlzUm9vdCA/IHdpbmRvdy5pbm5lckhlaWdodCA6ICRlbC5jbGllbnRIZWlnaHQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNpemU6IGlzUm9vdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IE1hdGgubWF4KGdldFdpZHRoKGRvY3VtZW50LmJvZHkpLCBnZXRXaWR0aChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKSxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IE1hdGgubWF4KGdldEhlaWdodChkb2N1bWVudC5ib2R5KSwgZ2V0SGVpZ2h0KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgOiBnZXRTaXplKCRlbCksXHJcbiAgICAgICAgfTtcclxuICAgIH07XG5cbiAgICB2YXIgZGlyZWN0aW9uTWV0aG9kTWFwID0ge1xyXG4gICAgICAgIHk6ICdzY3JvbGxUb3AnLFxyXG4gICAgICAgIHg6ICdzY3JvbGxMZWZ0JyxcclxuICAgIH07XHJcbiAgICB2YXIgZGlyZWN0aW9uUHJvcE1hcCA9IHtcclxuICAgICAgICB5OiAncGFnZVlPZmZzZXQnLFxyXG4gICAgICAgIHg6ICdwYWdlWE9mZnNldCcsXHJcbiAgICB9O1xyXG4gICAgdmFyIGdldFNjcm9sbCA9IGZ1bmN0aW9uICgkZWwsIGRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBpc1dpbmRvdygkZWwpID8gJGVsW2RpcmVjdGlvblByb3BNYXBbZGlyZWN0aW9uXV0gOiAkZWxbZGlyZWN0aW9uTWV0aG9kTWFwW2RpcmVjdGlvbl1dO1xyXG4gICAgfTtcclxuICAgIHZhciBzZXRTY3JvbGwgPSBmdW5jdGlvbiAoJGVsLCBvZmZzZXQsIGRpcmVjdGlvbikge1xyXG4gICAgICAgIGlmIChpc1dpbmRvdygkZWwpKSB7XHJcbiAgICAgICAgICAgIHZhciB0b3BfMSA9IGRpcmVjdGlvbiA9PT0gJ3knO1xyXG4gICAgICAgICAgICAkZWwuc2Nyb2xsVG8oIXRvcF8xID8gb2Zmc2V0IDogJGVsLnBhZ2VYT2Zmc2V0LCB0b3BfMSA/IG9mZnNldCA6ICRlbC5wYWdlWU9mZnNldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAkZWxbZGlyZWN0aW9uTWV0aG9kTWFwW2RpcmVjdGlvbl1dID0gb2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB2YXIgZ2V0T2Zmc2V0ID0gZnVuY3Rpb24gKCRlbCwgJGNvbnRleHQpIHtcclxuICAgICAgICB2YXIgcmVjdCA9ICRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBpZiAocmVjdC53aWR0aCB8fCByZWN0LmhlaWdodCkge1xyXG4gICAgICAgICAgICB2YXIgc2Nyb2xsXzEgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xyXG4gICAgICAgICAgICB2YXIgJGN0eCA9IHZvaWQgMDtcclxuICAgICAgICAgICAgaWYgKGlzV2luZG93KCRjb250ZXh0KSB8fCBpc1Jvb3RDb250YWluZXIoJGNvbnRleHQpKSB7XHJcbiAgICAgICAgICAgICAgICAkY3R4ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsXzEudG9wID0gd2luZG93W2RpcmVjdGlvblByb3BNYXAueV07XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxfMS5sZWZ0ID0gd2luZG93W2RpcmVjdGlvblByb3BNYXAueF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAkY3R4ID0gJGNvbnRleHQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgY1JlY3QgPSAkY3R4LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsXzEudG9wID0gY1JlY3QudG9wICogLTEgKyAkY3R4W2RpcmVjdGlvbk1ldGhvZE1hcC55XTtcclxuICAgICAgICAgICAgICAgIHNjcm9sbF8xLmxlZnQgPSBjUmVjdC5sZWZ0ICogLTEgKyAkY3R4W2RpcmVjdGlvbk1ldGhvZE1hcC54XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdG9wOiByZWN0LnRvcCArIHNjcm9sbF8xLnRvcCAtICRjdHguY2xpZW50VG9wLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgc2Nyb2xsXzEubGVmdCAtICRjdHguY2xpZW50TGVmdCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlY3Q7XHJcbiAgICB9O1xuXG4gICAgdmFyIHdoZWVsRXZlbnROYW1lID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIWNhblVzZURPTSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3doZWVsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdvbndoZWVsJyBpbiBkb2N1bWVudCA/ICd3aGVlbCcgOiAnbW91c2V3aGVlbCc7XHJcbiAgICB9KSgpO1xyXG4gICAgdmFyIGV2ZW50TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAobmFtZSA9PT0gJ3doZWVsJyA/IHdoZWVsRXZlbnROYW1lIDogbmFtZSk7IH07XHJcbiAgICB2YXIgYXBwbHkgPSBmdW5jdGlvbiAoJGVsLCBtZXRob2QsIGV2ZW50LCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xyXG4gICAgICAgIGV2ZW50LnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgICAgICAkZWxbbWV0aG9kXShldmVudE5hbWUobmFtZSksIGxpc3RlbmVyLCBjYW5Vc2VQYXNzaXZlT3B0aW9uID8geyBwYXNzaXZlOiBwYXNzaXZlIH0gOiBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIGFkZEV2ZW50ID0gZnVuY3Rpb24gKCRlbCwgZXZlbnQsIGxpc3RlbmVyLCBwYXNzaXZlKSB7IHJldHVybiBhcHBseSgkZWwsICdhZGRFdmVudExpc3RlbmVyJywgZXZlbnQsIGxpc3RlbmVyLCBwYXNzaXZlKTsgfTtcclxuICAgIHZhciByZW1vdmVFdmVudCA9IGZ1bmN0aW9uICgkZWwsIGV2ZW50LCBsaXN0ZW5lciwgcGFzc2l2ZSkgeyByZXR1cm4gYXBwbHkoJGVsLCAncmVtb3ZlRXZlbnRMaXN0ZW5lcicsIGV2ZW50LCBsaXN0ZW5lciwgcGFzc2l2ZSk7IH07XG5cbiAgICB2YXIgcmVSZWxhdGl2ZVRva2VuID0gL14oXFwrfC0pPShcXGQrKD86XFwuXFxkKyk/KSQvO1xyXG4gICAgdmFyIHBhcnNlQ29vcmRpbmF0ZSA9IGZ1bmN0aW9uIChjb29yZGluYXRlLCBlbmFibGVWZXJ0aWNhbCkge1xyXG4gICAgICAgIHZhciByZXMgPSB7IHRvcDogMCwgbGVmdDogMCwgcmVsYXRpdmU6IGZhbHNlIH07XHJcbiAgICAgICAgLy8gT2JqZWN0ICh7IHRvcDoge259LCBsZWZ0OiB7bn0gfSlcclxuICAgICAgICBpZiAoaGFzUHJvcChjb29yZGluYXRlLCAndG9wJykgfHwgaGFzUHJvcChjb29yZGluYXRlLCAnbGVmdCcpKSB7XHJcbiAgICAgICAgICAgIHJlcyA9IF9fYXNzaWduKHt9LCByZXMsIGNvb3JkaW5hdGUpO1xyXG4gICAgICAgICAgICAvLyBBcnJheSAoW3tufSwgW3tufV0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzQXJyYXkoY29vcmRpbmF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKGNvb3JkaW5hdGUubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgcmVzLnRvcCA9IGNvb3JkaW5hdGVbMF07XHJcbiAgICAgICAgICAgICAgICByZXMubGVmdCA9IGNvb3JkaW5hdGVbMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29vcmRpbmF0ZS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHJlcy50b3AgPSBlbmFibGVWZXJ0aWNhbCA/IGNvb3JkaW5hdGVbMF0gOiAwO1xyXG4gICAgICAgICAgICAgICAgcmVzLmxlZnQgPSAhZW5hYmxlVmVydGljYWwgPyBjb29yZGluYXRlWzBdIDogMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIE51bWJlclxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc051bWVyaWMoY29vcmRpbmF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZVZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICByZXMudG9wID0gY29vcmRpbmF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlcy5sZWZ0ID0gY29vcmRpbmF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBTdHJpbmcgKCcrPXtufScsICctPXtufScpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKGNvb3JkaW5hdGUpKSB7XHJcbiAgICAgICAgICAgIHZhciBtID0gY29vcmRpbmF0ZS50cmltKCkubWF0Y2gocmVSZWxhdGl2ZVRva2VuKTtcclxuICAgICAgICAgICAgaWYgKCFtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgb3AgPSBtWzFdO1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gcGFyc2VJbnQobVsyXSwgMTApO1xyXG4gICAgICAgICAgICBpZiAob3AgPT09ICcrJykge1xyXG4gICAgICAgICAgICAgICAgcmVzLnRvcCA9IGVuYWJsZVZlcnRpY2FsID8gdmFsIDogMDtcclxuICAgICAgICAgICAgICAgIHJlcy5sZWZ0ID0gIWVuYWJsZVZlcnRpY2FsID8gdmFsIDogMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlcy50b3AgPSBlbmFibGVWZXJ0aWNhbCA/IC12YWwgOiAwO1xyXG4gICAgICAgICAgICAgICAgcmVzLmxlZnQgPSAhZW5hYmxlVmVydGljYWwgPyAtdmFsIDogMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXMucmVsYXRpdmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9O1xuXG4gICAgdmFyIGRlZmF1bHRPcHRpb25zID0ge1xyXG4gICAgICAgIHRyaWdnZXI6ICdbZGF0YS1zY3JvbGxdJyxcclxuICAgICAgICBoZWFkZXI6ICdbZGF0YS1zY3JvbGwtaGVhZGVyXScsXHJcbiAgICAgICAgZHVyYXRpb246IDEwMDAsXHJcbiAgICAgICAgZWFzaW5nOiAnZWFzZU91dFF1aW50JyxcclxuICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgdmVydGljYWw6IHRydWUsXHJcbiAgICAgICAgaG9yaXpvbnRhbDogZmFsc2UsXHJcbiAgICAgICAgY2FuY2VsbGFibGU6IHRydWUsXHJcbiAgICAgICAgdXBkYXRlVVJMOiBmYWxzZSxcclxuICAgICAgICBwcmV2ZW50RGVmYXVsdDogdHJ1ZSxcclxuICAgICAgICBzdG9wUHJvcGFnYXRpb246IHRydWUsXHJcbiAgICAgICAgLy8gQ2FsbGJhY2tzXHJcbiAgICAgICAgYmVmb3JlOiBudWxsLFxyXG4gICAgICAgIGFmdGVyOiBudWxsLFxyXG4gICAgICAgIGNhbmNlbDogbnVsbCxcclxuICAgICAgICBjb21wbGV0ZTogbnVsbCxcclxuICAgICAgICBzdGVwOiBudWxsLFxyXG4gICAgfTtcblxuICAgIHZhciBDT05UQUlORVJfQ0xJQ0tfRVZFTlQgPSAnY2xpY2snO1xyXG4gICAgdmFyIENPTlRBSU5FUl9TVE9QX0VWRU5UID0gJ3doZWVsIHRvdWNoc3RhcnQgdG91Y2htb3ZlJztcclxuICAgIHZhciBTd2VldFNjcm9sbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZ1bmN0aW9uIFN3ZWV0U2Nyb2xsKG9wdGlvbnMsIGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLiRlbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4ID0ge1xyXG4gICAgICAgICAgICAgICAgJHRyaWdnZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBvcHRzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcG9zOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRQb3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBlYXNpbmc6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGFydDogMCxcclxuICAgICAgICAgICAgICAgIGlkOiAwLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGhhc2g6IG51bGwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBIYW5kbGUgZWFjaCBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgdGhpcy5sb29wID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCAkZWwgPSBfYS4kZWwsIGN0eCA9IF9hLmN0eDtcclxuICAgICAgICAgICAgICAgIGlmICghY3R4LnN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LnN0YXJ0ID0gdGltZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY3R4LnByb2dyZXNzIHx8ICEkZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBjdHgub3B0cztcclxuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBjdHgucG9zO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gY3R4LnN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gY3R4LnN0YXJ0UG9zO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVhc2luZyA9IGN0eC5lYXNpbmc7XHJcbiAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSBvcHRpb25zLmR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvbk1hcCA9IHsgdG9wOiAneScsIGxlZnQ6ICd4JyB9O1xyXG4gICAgICAgICAgICAgICAgdmFyIHRpbWVFbGFwc2VkID0gdGltZSAtIHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgdmFyIHQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCh0aW1lRWxhcHNlZCAvIGR1cmF0aW9uLCAwKSk7XHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvZmZzZXQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG9mZnNldFtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbml0aWFsID0gc3RhcnRPZmZzZXRba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSB2YWx1ZSAtIGluaXRpYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlYXNpbmcodCwgZHVyYXRpb24gKiB0LCAwLCAxLCBkdXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjcm9sbCgkZWwsIE1hdGgucm91bmQoaW5pdGlhbCArIGRlbHRhICogdmFsKSwgZGlyZWN0aW9uTWFwW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVFbGFwc2VkIDw9IGR1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuaG9vayhvcHRpb25zLCAnc3RlcCcsIHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5pZCA9IFN3ZWV0U2Nyb2xsLnJhZihfdGhpcy5sb29wKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnN0b3AodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBIYW5kbGluZyBvZiBjb250YWluZXIgY2xpY2sgZXZlbnQuXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBvcHRzID0gX3RoaXMub3B0cztcclxuICAgICAgICAgICAgICAgIHZhciAkZWwgPSBlLnRhcmdldDtcclxuICAgICAgICAgICAgICAgIGZvciAoOyAkZWwgJiYgJGVsICE9PSBkb2N1bWVudDsgJGVsID0gJGVsLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoJGVsLCBvcHRzLnRyaWdnZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YU9wdGlvbnMgPSBKU09OLnBhcnNlKCRlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2Nyb2xsLW9wdGlvbnMnKSB8fCAne30nKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9ICRlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2Nyb2xsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRvID0gZGF0YSB8fCAkZWwuZ2V0QXR0cmlidXRlKCdocmVmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBfX2Fzc2lnbih7fSwgb3B0cywgZGF0YU9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMucHJldmVudERlZmF1bHQsIHN0b3BQcm9wYWdhdGlvbiA9IG9wdGlvbnMuc3RvcFByb3BhZ2F0aW9uLCB2ZXJ0aWNhbCA9IG9wdGlvbnMudmVydGljYWwsIGhvcml6b250YWwgPSBvcHRpb25zLmhvcml6b250YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBQYXNzZXMgdGhlIHRyaWdnZXIgZWxlbWVudCB0byBjYWxsYmFja1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN0eC4kdHJpZ2dlciA9ICRlbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbCAmJiB2ZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy50byh0bywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnRvVG9wKHRvLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaG9yaXpvbnRhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy50b0xlZnQodG8sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEhhbmRsaW5nIG9mIGNvbnRhaW5lciBzdG9wIGV2ZW50cy5cclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU3RvcCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX3RoaXMuY3R4O1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wdHMgPSBjdHgub3B0cztcclxuICAgICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMuY2FuY2VsbGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHguY2FuY2VsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMub3B0cyA9IF9fYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgKG9wdGlvbnMgfHwge30pKTtcclxuICAgICAgICAgICAgdmFyICRjb250YWluZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY2FuVXNlRE9NKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRhaW5lciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAkY29udGFpbmVyID0gJChjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29udGFpbmVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAkY29udGFpbmVyID0gY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lciA9IHdpbmRvdztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLiRlbCA9ICRjb250YWluZXI7XHJcbiAgICAgICAgICAgIGlmICgkY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmQodHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN3ZWV0U2Nyb2xsIGluc3RhbmNlIGZhY3RvcnkuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgU3dlZXRTY3JvbGwuY3JlYXRlID0gZnVuY3Rpb24gKG9wdGlvbnMsIGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFN3ZWV0U2Nyb2xsKG9wdGlvbnMsIGNvbnRhaW5lcik7XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTY3JvbGwgYW5pbWF0aW9uIHRvIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgU3dlZXRTY3JvbGwucHJvdG90eXBlLnRvID0gZnVuY3Rpb24gKGRpc3RhbmNlLCBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGlmICghY2FuVXNlRE9NKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgJGVsID0gX2EuJGVsLCBjdHggPSBfYS5jdHgsIGN1cnJlbnRPcHRpb25zID0gX2Eub3B0cztcclxuICAgICAgICAgICAgdmFyICR0cmlnZ2VyID0gY3R4LiR0cmlnZ2VyO1xyXG4gICAgICAgICAgICB2YXIgb3B0cyA9IF9fYXNzaWduKHt9LCBjdXJyZW50T3B0aW9ucywgKG9wdGlvbnMgfHwge30pKTtcclxuICAgICAgICAgICAgdmFyIG9wdE9mZnNldCA9IG9wdHMub2Zmc2V0LCB2ZXJ0aWNhbCA9IG9wdHMudmVydGljYWwsIGhvcml6b250YWwgPSBvcHRzLmhvcml6b250YWw7XHJcbiAgICAgICAgICAgIHZhciAkaGVhZGVyID0gaXNFbGVtZW50KG9wdHMuaGVhZGVyKSA/IG9wdHMuaGVhZGVyIDogJChvcHRzLmhlYWRlcik7XHJcbiAgICAgICAgICAgIHZhciByZWcgPSAvXiMvO1xyXG4gICAgICAgICAgICB2YXIgaGFzaCA9IGlzU3RyaW5nKGRpc3RhbmNlKSAmJiByZWcudGVzdChkaXN0YW5jZSkgPyBkaXN0YW5jZSA6IG51bGw7XHJcbiAgICAgICAgICAgIGN0eC5vcHRzID0gb3B0czsgLy8gVGVtcG9yYXJ5IG9wdGlvbnNcclxuICAgICAgICAgICAgY3R4LmNhbmNlbCA9IGZhbHNlOyAvLyBEaXNhYmxlIHRoZSBjYWxsIGZsYWcgb2YgYGNhbmNlbGBcclxuICAgICAgICAgICAgY3R4Lmhhc2ggPSBoYXNoO1xyXG4gICAgICAgICAgICAvLyBTdG9wIGN1cnJlbnQgYW5pbWF0aW9uXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAvLyBEb2VzIG5vdCBtb3ZlIGlmIHRoZSBjb250YWluZXIgaXMgbm90IGZvdW5kXHJcbiAgICAgICAgICAgIGlmICghJGVsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gR2V0IHNjcm9sbCBvZmZzZXRcclxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHBhcnNlQ29vcmRpbmF0ZShvcHRPZmZzZXQsIHZlcnRpY2FsKTtcclxuICAgICAgICAgICAgdmFyIGNvb3JkaW5hdGUgPSBwYXJzZUNvb3JkaW5hdGUoZGlzdGFuY2UsIHZlcnRpY2FsKTtcclxuICAgICAgICAgICAgdmFyIHNjcm9sbCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgICAgIGlmIChjb29yZGluYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29vcmRpbmF0ZS5yZWxhdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gZ2V0U2Nyb2xsKCRlbCwgdmVydGljYWwgPyAneScgOiAneCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbC50b3AgPSB2ZXJ0aWNhbCA/IGN1cnJlbnQgKyBjb29yZGluYXRlLnRvcCA6IGNvb3JkaW5hdGUudG9wO1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbC5sZWZ0ID0gIXZlcnRpY2FsID8gY3VycmVudCArIGNvb3JkaW5hdGUubGVmdCA6IGNvb3JkaW5hdGUubGVmdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbCA9IGNvb3JkaW5hdGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoZGlzdGFuY2UpICYmIGRpc3RhbmNlICE9PSAnIycpIHtcclxuICAgICAgICAgICAgICAgIHZhciAkdGFyZ2V0ID0gJChkaXN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoISR0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzY3JvbGwgPSBnZXRPZmZzZXQoJHRhcmdldCwgJGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob2Zmc2V0KSB7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGwudG9wICs9IG9mZnNldC50b3A7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGwubGVmdCArPSBvZmZzZXQubGVmdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoJGhlYWRlcikge1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsLnRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbC50b3AgLSBnZXRTaXplKCRoZWFkZXIpLmhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gTm9ybWFsaXplIHNjcm9sbCBvZmZzZXRcclxuICAgICAgICAgICAgdmFyIF9iID0gZ2V0Vmlld3BvcnRBbmRFbGVtZW50U2l6ZXMoJGVsKSwgdmlld3BvcnQgPSBfYi52aWV3cG9ydCwgc2l6ZSA9IF9iLnNpemU7XHJcbiAgICAgICAgICAgIHNjcm9sbC50b3AgPSB2ZXJ0aWNhbFxyXG4gICAgICAgICAgICAgICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbihzaXplLmhlaWdodCAtIHZpZXdwb3J0LmhlaWdodCwgc2Nyb2xsLnRvcCkpXHJcbiAgICAgICAgICAgICAgICA6IGdldFNjcm9sbCgkZWwsICd5Jyk7XHJcbiAgICAgICAgICAgIHNjcm9sbC5sZWZ0ID0gaG9yaXpvbnRhbFxyXG4gICAgICAgICAgICAgICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbihzaXplLndpZHRoIC0gdmlld3BvcnQud2lkdGgsIHNjcm9sbC5sZWZ0KSlcclxuICAgICAgICAgICAgICAgIDogZ2V0U2Nyb2xsKCRlbCwgJ3gnKTtcclxuICAgICAgICAgICAgLy8gQ2FsbCBgYmVmb3JlYFxyXG4gICAgICAgICAgICAvLyBTdG9wIHNjcm9sbGluZyB3aGVuIGl0IHJldHVybnMgZmFsc2VcclxuICAgICAgICAgICAgaWYgKHRoaXMuaG9vayhvcHRzLCAnYmVmb3JlJywgc2Nyb2xsLCAkdHJpZ2dlcikgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBjdHgub3B0cyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gU2V0IG9mZnNldFxyXG4gICAgICAgICAgICBjdHgucG9zID0gc2Nyb2xsO1xyXG4gICAgICAgICAgICAvLyBSdW4gYW5pbWF0aW9uISFcclxuICAgICAgICAgICAgdGhpcy5zdGFydChvcHRzKTtcclxuICAgICAgICAgICAgLy8gQmluZCBzdG9wIGV2ZW50c1xyXG4gICAgICAgICAgICB0aGlzLmJpbmQoZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2Nyb2xsIGFuaW1hdGlvbiB0byBzcGVjaWZpZWQgbGVmdCBwb3NpdGlvbi5cclxuICAgICAgICAgKi9cclxuICAgICAgICBTd2VldFNjcm9sbC5wcm90b3R5cGUudG9Ub3AgPSBmdW5jdGlvbiAoZGlzdGFuY2UsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy50byhkaXN0YW5jZSwgX19hc3NpZ24oe30sIChvcHRpb25zIHx8IHt9KSwgeyB2ZXJ0aWNhbDogdHJ1ZSwgaG9yaXpvbnRhbDogZmFsc2UgfSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2Nyb2xsIGFuaW1hdGlvbiB0byBzcGVjaWZpZWQgdG9wIHBvc2l0aW9uLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIFN3ZWV0U2Nyb2xsLnByb3RvdHlwZS50b0xlZnQgPSBmdW5jdGlvbiAoZGlzdGFuY2UsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy50byhkaXN0YW5jZSwgX19hc3NpZ24oe30sIChvcHRpb25zIHx8IHt9KSwgeyB2ZXJ0aWNhbDogZmFsc2UsIGhvcml6b250YWw6IHRydWUgfSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2Nyb2xsIGFuaW1hdGlvbiB0byBzcGVjaWZpZWQgZWxlbWVudC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBTd2VldFNjcm9sbC5wcm90b3R5cGUudG9FbGVtZW50ID0gZnVuY3Rpb24gKCRlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHZhciAkZWwgPSB0aGlzLiRlbDtcclxuICAgICAgICAgICAgaWYgKCFjYW5Vc2VET00gfHwgISRlbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudG8oZ2V0T2Zmc2V0KCRlbGVtZW50LCAkZWwpLCBvcHRpb25zIHx8IHt9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN0b3AgdGhlIGN1cnJlbnQgc2Nyb2xsIGFuaW1hdGlvbi5cclxuICAgICAgICAgKi9cclxuICAgICAgICBTd2VldFNjcm9sbC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIChnb3RvRW5kKSB7XHJcbiAgICAgICAgICAgIGlmIChnb3RvRW5kID09PSB2b2lkIDApIHsgZ290b0VuZCA9IGZhbHNlOyB9XHJcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsICRlbCA9IF9hLiRlbCwgY3R4ID0gX2EuY3R4O1xyXG4gICAgICAgICAgICB2YXIgcG9zID0gY3R4LnBvcztcclxuICAgICAgICAgICAgaWYgKCEkZWwgfHwgIWN0eC5wcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFN3ZWV0U2Nyb2xsLmNhZihjdHguaWQpO1xyXG4gICAgICAgICAgICBjdHgucHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgY3R4LnN0YXJ0ID0gMDtcclxuICAgICAgICAgICAgY3R4LmlkID0gMDtcclxuICAgICAgICAgICAgaWYgKGdvdG9FbmQgJiYgcG9zKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTY3JvbGwoJGVsLCBwb3MubGVmdCwgJ3gnKTtcclxuICAgICAgICAgICAgICAgIHNldFNjcm9sbCgkZWwsIHBvcy50b3AsICd5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXBkYXRlIG9wdGlvbnMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgU3dlZXRTY3JvbGwucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLiRlbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wdHMgPSBfX2Fzc2lnbih7fSwgdGhpcy5vcHRzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51bmJpbmQodHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kKHRydWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGVzdHJveSBpbnN0YW5jZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICBTd2VldFNjcm9sbC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuJGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudW5iaW5kKHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kZWwgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYWxsYmFjayBtZXRob2RzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlOm5vLWVtcHR5ICovXHJcbiAgICAgICAgU3dlZXRTY3JvbGwucHJvdG90eXBlLm9uQmVmb3JlID0gZnVuY3Rpb24gKF8sIF9fKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgU3dlZXRTY3JvbGwucHJvdG90eXBlLm9uU3RlcCA9IGZ1bmN0aW9uIChfKSB7IH07XHJcbiAgICAgICAgU3dlZXRTY3JvbGwucHJvdG90eXBlLm9uQWZ0ZXIgPSBmdW5jdGlvbiAoXywgX18pIHsgfTtcclxuICAgICAgICBTd2VldFNjcm9sbC5wcm90b3R5cGUub25DYW5jZWwgPSBmdW5jdGlvbiAoKSB7IH07XHJcbiAgICAgICAgU3dlZXRTY3JvbGwucHJvdG90eXBlLm9uQ29tcGxldGUgPSBmdW5jdGlvbiAoXykgeyB9O1xyXG4gICAgICAgIC8qIHRzbGludDplbmFibGUgKi9cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTdGFydCBzY3JvbGxpbmcgYW5pbWF0aW9uLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIFN3ZWV0U2Nyb2xsLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcclxuICAgICAgICAgICAgY3R4Lm9wdHMgPSBvcHRzO1xyXG4gICAgICAgICAgICBjdHgucHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgICBjdHguZWFzaW5nID0gaXNGdW5jdGlvbihvcHRzLmVhc2luZylcclxuICAgICAgICAgICAgICAgID8gb3B0cy5lYXNpbmdcclxuICAgICAgICAgICAgICAgIDogZWFzaW5nc1tvcHRzLmVhc2luZ107XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGFydCBvZmZzZXQuXHJcbiAgICAgICAgICAgIHZhciAkY29udGFpbmVyID0gdGhpcy4kZWw7XHJcbiAgICAgICAgICAgIHZhciBzdGFydCA9IHtcclxuICAgICAgICAgICAgICAgIHRvcDogZ2V0U2Nyb2xsKCRjb250YWluZXIsICd5JyksXHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBnZXRTY3JvbGwoJGNvbnRhaW5lciwgJ3gnKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY3R4LnN0YXJ0UG9zID0gc3RhcnQ7XHJcbiAgICAgICAgICAgIC8vIExvb3BcclxuICAgICAgICAgICAgY3R4LmlkID0gU3dlZXRTY3JvbGwucmFmKHRoaXMubG9vcCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIYW5kbGUgdGhlIGNvbXBsZXRpb24gb2Ygc2Nyb2xsaW5nIGFuaW1hdGlvbi5cclxuICAgICAgICAgKi9cclxuICAgICAgICBTd2VldFNjcm9sbC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsICRlbCA9IF9hLiRlbCwgY3R4ID0gX2EuY3R4O1xyXG4gICAgICAgICAgICB2YXIgaGFzaCA9IGN0eC5oYXNoLCBjYW5jZWwgPSBjdHguY2FuY2VsLCBvcHRzID0gY3R4Lm9wdHMsIHBvcyA9IGN0eC5wb3MsICR0cmlnZ2VyID0gY3R4LiR0cmlnZ2VyO1xyXG4gICAgICAgICAgICBpZiAoISRlbCB8fCAhb3B0cykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChoYXNoICE9IG51bGwgJiYgaGFzaCAhPT0gd2luZG93LmxvY2F0aW9uLmhhc2gpIHtcclxuICAgICAgICAgICAgICAgIHZhciB1cGRhdGVVUkwgPSBvcHRzLnVwZGF0ZVVSTDtcclxuICAgICAgICAgICAgICAgIGlmIChjYW5Vc2VET00gJiYgY2FuVXNlSGlzdG9yeSAmJiB1cGRhdGVVUkwgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lmhpc3RvcnlbdXBkYXRlVVJMID09PSAncmVwbGFjZScgPyAncmVwbGFjZVN0YXRlJyA6ICdwdXNoU3RhdGUnXShudWxsLCAnJywgaGFzaCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51bmJpbmQoZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICBjdHgub3B0cyA9IG51bGw7XHJcbiAgICAgICAgICAgIGN0eC4kdHJpZ2dlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChjYW5jZWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG9vayhvcHRzLCAnY2FuY2VsJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvb2sob3B0cywgJ2FmdGVyJywgcG9zLCAkdHJpZ2dlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ob29rKG9wdHMsICdjb21wbGV0ZScsIGNhbmNlbCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiBhbmQgbWV0aG9kIGNhbGwuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgU3dlZXRTY3JvbGwucHJvdG90eXBlLmhvb2sgPSBmdW5jdGlvbiAob3B0aW9ucywgdHlwZSkge1xyXG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IG9wdGlvbnNbdHlwZV07XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja1Jlc3VsdDtcclxuICAgICAgICAgICAgdmFyIG1ldGhvZFJlc3VsdDtcclxuICAgICAgICAgICAgLy8gY2FsbGJhY2tcclxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFja1Jlc3VsdCA9IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MuY29uY2F0KFt0aGlzXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIG1ldGhvZFxyXG4gICAgICAgICAgICBtZXRob2RSZXN1bHQgPSAoX2EgPSB0aGlzKVtcIm9uXCIgKyAodHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zbGljZSgxKSldLmFwcGx5KF9hLCBhcmdzKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrUmVzdWx0ICE9PSB1bmRlZmluZWQgPyBjYWxsYmFja1Jlc3VsdCA6IG1ldGhvZFJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJpbmQgZXZlbnRzIG9mIGNvbnRhaW5lciBlbGVtZW50LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIFN3ZWV0U2Nyb2xsLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNsaWNrLCBzdG9wKSB7XHJcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsICRlbCA9IF9hLiRlbCwgb3B0cyA9IF9hLmN0eC5vcHRzO1xyXG4gICAgICAgICAgICBpZiAoJGVsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2xpY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCgkZWwsIENPTlRBSU5FUl9DTElDS19FVkVOVCwgdGhpcy5oYW5kbGVDbGljaywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0b3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCgkZWwsIENPTlRBSU5FUl9TVE9QX0VWRU5ULCB0aGlzLmhhbmRsZVN0b3AsIG9wdHMgPyBvcHRzLmNhbmNlbGxhYmxlIDogdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVuYmluZCBldmVudHMgb2YgY29udGFpbmVyIGVsZW1lbnQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgU3dlZXRTY3JvbGwucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uIChjbGljaywgc3RvcCkge1xyXG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCAkZWwgPSBfYS4kZWwsIG9wdHMgPSBfYS5jdHgub3B0cztcclxuICAgICAgICAgICAgaWYgKCRlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNsaWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQoJGVsLCBDT05UQUlORVJfQ0xJQ0tfRVZFTlQsIHRoaXMuaGFuZGxlQ2xpY2ssIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQoJGVsLCBDT05UQUlORVJfU1RPUF9FVkVOVCwgdGhpcy5oYW5kbGVTdG9wLCBvcHRzID8gb3B0cy5jYW5jZWxsYWJsZSA6IHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBZb3UgY2FuIHNldCBQb2x5ZmlsbCAob3IgUG9ueWZpbGwpIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICBTd2VldFNjcm9sbC5yYWYgPSByYWY7XHJcbiAgICAgICAgU3dlZXRTY3JvbGwuY2FmID0gY2FmO1xyXG4gICAgICAgIHJldHVybiBTd2VldFNjcm9sbDtcclxuICAgIH0oKSk7XG5cbiAgICByZXR1cm4gU3dlZXRTY3JvbGw7XG5cbn0pKTtcbiIsICIvLyBkZXNpZ25lc3RhdGUgc2NvcGVcbmltcG9ydCAqIGFzIGRlZXNDb21tcyBmcm9tICdAZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zJztcblxuZXhwb3J0IHsgZGVlc0NvbW1zIH07XG5cbi8vIGFwaWdsb2JhbCBzY29wZVxuaW1wb3J0ICogYXMgdHlwZWRyZXF1ZXN0IGZyb20gJ0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdCc7XG5cbmV4cG9ydCB7IHR5cGVkcmVxdWVzdCB9O1xuXG4vLyBwdXNocm9ja3Mgc2NvcGVcbmltcG9ydCAqIGFzIHNtYXJ0ZGVsYXkgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRkZWxheSc7XG5pbXBvcnQgKiBhcyBzbWFydGpzb24gZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRqc29uJztcbmltcG9ydCAqIGFzIHNtYXJ0bWFya2Rvd24gZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bic7XG5pbXBvcnQgKiBhcyBzbWFydHByb21pc2UgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlJztcbmltcG9ydCAqIGFzIHNtYXJ0cm91dGVyIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyJztcbmltcG9ydCAqIGFzIHNtYXJ0cnggZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRyeCc7XG5pbXBvcnQgKiBhcyBzbWFydHN0YXRlIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUnO1xuaW1wb3J0ICogYXMgc21hcnRzdHJpbmcgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcnO1xuaW1wb3J0ICogYXMgc21hcnR1cmwgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnR1cmwnO1xuaW1wb3J0ICogYXMgd2VicmVxdWVzdCBmcm9tICdAcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0JztcbmltcG9ydCAqIGFzIHdlYnNldHVwIGZyb20gJ0BwdXNoLnJvY2tzL3dlYnNldHVwJztcbmltcG9ydCAqIGFzIHdlYnN0b3JlIGZyb20gJ0BwdXNoLnJvY2tzL3dlYnN0b3JlJztcblxuLy8gc3Vic2NvcGUgbGlrXG5pbXBvcnQgeyBPYmplY3RNYXAgfSBmcm9tICdAcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsub2JqZWN0bWFwLmpzJztcbmltcG9ydCB7IFN0cmluZ21hcCB9IGZyb20gJ0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5zdHJpbmdtYXAuanMnO1xuaW1wb3J0IHsgRmFzdE1hcCB9IGZyb20gJ0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5mYXN0bWFwLmpzJztcbmNvbnN0IGxpayA9IHtcbiAgT2JqZWN0TWFwLFxuICBTdHJpbmdtYXAsXG4gIEZhc3RNYXAsXG59O1xuXG5leHBvcnQge1xuICBsaWssXG4gIHNtYXJ0ZGVsYXksXG4gIHNtYXJ0anNvbixcbiAgc21hcnRtYXJrZG93bixcbiAgc21hcnRwcm9taXNlLFxuICBzbWFydHJvdXRlcixcbiAgc21hcnRyeCxcbiAgc21hcnR1cmwsXG4gIHNtYXJ0c3RhdGUsXG4gIHNtYXJ0c3RyaW5nLFxuICB3ZWJyZXF1ZXN0LFxuICB3ZWJzZXR1cCxcbiAgd2Vic3RvcmUsXG59O1xuXG4vLyB0aGlyZCBwYXJ0eSBzY29wZVxuaW1wb3J0IExlbmlzIGZyb20gJ0B0ZW1wZml4L2xlbmlzJ1xuaW1wb3J0IFN3ZWV0U2Nyb2xsIGZyb20gJ3N3ZWV0LXNjcm9sbCc7XG5cbmV4cG9ydCB7IExlbmlzLCBTd2VldFNjcm9sbCB9O1xuIiwgImltcG9ydCB7IERvbVRvb2xzIH0gZnJvbSAnLi9kb210b29scy5jbGFzc2VzLmRvbXRvb2xzLmpzJztcblxuaW1wb3J0IHsgQ1NTUmVzdWx0LCB1bnNhZmVDU1MgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgY29uc3QgZGVza3RvcCA9IDE2MDA7XG5leHBvcnQgY29uc3Qgbm90ZWJvb2sgPSAxMjQwO1xuZXhwb3J0IGNvbnN0IHRhYmxldCA9IDEwMjQ7XG5leHBvcnQgY29uc3QgcGhhYmxldCA9IDYwMDtcbmV4cG9ydCBjb25zdCBwaG9uZSA9IDQwMDtcblxuZXhwb3J0IHR5cGUgVFZpZXdwb3J0ID0gJ25hdGl2ZScgfCAnZGVza3RvcCcgfCAndGFibGV0JyB8ICdwaGFibGV0JyB8ICdwaG9uZSc7XG5cbmV4cG9ydCBjb25zdCBjc3NGb3JEZXNrdG9wID0gKGNzc0FyZzogQ1NTUmVzdWx0KSA9PiB7XG4gIHJldHVybiB1bnNhZmVDU1MoYFxuICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWluLXdpZHRoOiAke2Rlc2t0b3B9cHgpIHtcbiAgICAgICR7Y3NzQXJnLmNzc1RleHR9XG4gICAgfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAke2Rlc2t0b3B9cHgpIHtcbiAgICAgICR7Y3NzQXJnLmNzc1RleHR9XG4gICAgfVxuICBgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjc3NGb3JOb3RlYm9vayA9IChjc3NBcmc6IENTU1Jlc3VsdCkgPT4ge1xuICByZXR1cm4gdW5zYWZlQ1NTKGBcbiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHtub3RlYm9va31weCkge1xuICAgICAgJHtjc3NBcmcuY3NzVGV4dH1cbiAgICB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7bm90ZWJvb2t9cHgpIHtcbiAgICAgICR7Y3NzQXJnLmNzc1RleHR9XG4gICAgfVxuICBgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjc3NGb3JUYWJsZXQgPSAoY3NzQXJnOiBDU1NSZXN1bHQpID0+IHtcbiAgcmV0dXJuIHVuc2FmZUNTUyhgXG4gICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtYXgtd2lkdGg6ICR7dGFibGV0fXB4KSB7XG4gICAgICAke2Nzc0FyZy5jc3NUZXh0fVxuICAgIH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHt0YWJsZXR9cHgpIHtcbiAgICAgICR7Y3NzQXJnLmNzc1RleHR9XG4gICAgfVxuICBgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjc3NGb3JQaGFibGV0ID0gKGNzc0FyZzogQ1NTUmVzdWx0KSA9PiB7XG4gIHJldHVybiB1bnNhZmVDU1MoYFxuICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWF4LXdpZHRoOiAke3BoYWJsZXR9cHgpIHtcbiAgICAgICR7Y3NzQXJnLmNzc1RleHR9XG4gICAgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke3BoYWJsZXR9cHgpIHtcbiAgICAgICR7Y3NzQXJnLmNzc1RleHR9XG4gICAgfVxuICBgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjc3NGb3JQaG9uZSA9IChjc3NBcmc6IENTU1Jlc3VsdCkgPT4ge1xuICByZXR1cm4gdW5zYWZlQ1NTKGBcbiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHtwaG9uZX1weCkge1xuICAgICAgJHtjc3NBcmcuY3NzVGV4dH1cbiAgICB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7cGhvbmV9cHgpIHtcbiAgICAgICR7Y3NzQXJnLmNzc1RleHR9XG4gICAgfVxuICBgKTtcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBEb21Ub29scyB9IGZyb20gJy4vZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyc7XG5pbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vZG9tdG9vbHMucGx1Z2lucy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTY3JvbGxlciB7XG4gIHB1YmxpYyBkb210b29sc0luc3RhbmNlOiBEb21Ub29scztcblxuICAvLyBBcnJheSB0byBzdG9yZSBzY3JvbGwgY2FsbGJhY2sgZnVuY3Rpb25zLlxuICBwcml2YXRlIHNjcm9sbENhbGxiYWNrczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcblxuICAvLyBMZW5pcyBpbnN0YW5jZSAoaWYgYWN0aXZhdGVkKSBvciBudWxsLlxuICBwcml2YXRlIGxlbmlzSW5zdGFuY2U6IHBsdWdpbnMuTGVuaXMgfCBudWxsID0gbnVsbDtcblxuICAvLyBCb3VuZCBoYW5kbGVycyB0byBhbGxvdyByZW1vdmFsIGZyb20gZXZlbnQgbGlzdGVuZXJzLlxuICBwcml2YXRlIGhhbmRsZU5hdGl2ZVNjcm9sbCA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLmV4ZWN1dGVTY3JvbGxDYWxsYmFja3MoKTtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZUxlbmlzU2Nyb2xsID0gKGluZm86IGFueSk6IHZvaWQgPT4ge1xuICAgIHRoaXMuZXhlY3V0ZVNjcm9sbENhbGxiYWNrcygpO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKGRvbXRvb2xzSW5zdGFuY2VBcmc6IERvbVRvb2xzKSB7XG4gICAgdGhpcy5kb210b29sc0luc3RhbmNlID0gZG9tdG9vbHNJbnN0YW5jZUFyZztcbiAgICAvLyBBdHRhY2ggdGhlIG5hdGl2ZSBzY3JvbGwgbGlzdGVuZXIgYnkgZGVmYXVsdC5cbiAgICB0aGlzLmF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHN3ZWV0U2Nyb2xsZXIgPSBuZXcgcGx1Z2lucy5Td2VldFNjcm9sbCh7fSk7XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgdG8gYSBnaXZlbiBlbGVtZW50IHdpdGggb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0b0VsZW1lbnQoXG4gICAgZWxlbWVudEFyZzogSFRNTEVsZW1lbnQsXG4gICAgb3B0aW9uc0FyZzogUGFyYW1ldGVyczx0eXBlb2YgdGhpcy5zd2VldFNjcm9sbGVyLnRvRWxlbWVudD5bMV1cbiAgKSB7XG4gICAgdGhpcy5zd2VldFNjcm9sbGVyLnRvRWxlbWVudChlbGVtZW50QXJnLCBvcHRpb25zQXJnKTtcbiAgICBhd2FpdCBwbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3Iob3B0aW9uc0FyZy5kdXJhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0cyB3aGV0aGVyIG5hdGl2ZSBzbW9vdGggc2Nyb2xsaW5nIGlzIGVuYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGV0ZWN0TmF0aXZlU21vb3RoU2Nyb2xsKCkge1xuICAgIGNvbnN0IGRvbmUgPSBwbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcjxib29sZWFuPigpO1xuICAgIGNvbnN0IHNhbXBsZVNpemUgPSAxMDA7XG4gICAgY29uc3QgYWNjZXB0YWJsZURlbHRhRGlmZmVyZW5jZSA9IDM7XG4gICAgY29uc3QgbWluaW11bVNtb290aFJhdGlvID0gMC43NTtcblxuICAgIGNvbnN0IGV2ZW50RGVsdGFzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZnVuY3Rpb24gb25XaGVlbChldmVudDogV2hlZWxFdmVudCkge1xuICAgICAgZXZlbnREZWx0YXMucHVzaChldmVudC5kZWx0YVkpO1xuXG4gICAgICBpZiAoZXZlbnREZWx0YXMubGVuZ3RoID49IHNhbXBsZVNpemUpIHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCk7XG4gICAgICAgIGFuYWx5emVFdmVudHMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhbmFseXplRXZlbnRzKCkge1xuICAgICAgY29uc3QgdG90YWxEaWZmcyA9IGV2ZW50RGVsdGFzLmxlbmd0aCAtIDE7XG4gICAgICBsZXQgc21hbGxEaWZmQ291bnQgPSAwO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsRGlmZnM7IGkrKykge1xuICAgICAgICBjb25zdCBkaWZmID0gTWF0aC5hYnMoZXZlbnREZWx0YXNbaSArIDFdIC0gZXZlbnREZWx0YXNbaV0pO1xuICAgICAgICBpZiAoZGlmZiA8PSBhY2NlcHRhYmxlRGVsdGFEaWZmZXJlbmNlKSB7XG4gICAgICAgICAgc21hbGxEaWZmQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzbW9vdGhSYXRpbyA9IHNtYWxsRGlmZkNvdW50IC8gdG90YWxEaWZmcztcbiAgICAgIGlmIChzbW9vdGhSYXRpbyA+PSBtaW5pbXVtU21vb3RoUmF0aW8pIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1Ntb290aCBzY3JvbGxpbmcgZGV0ZWN0ZWQuJyk7XG4gICAgICAgIGRvbmUucmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdTbW9vdGggc2Nyb2xsaW5nIE5PVCBkZXRlY3RlZC4nKTtcbiAgICAgICAgZG9uZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsKTtcbiAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgTGVuaXMgc2Nyb2xsaW5nLlxuICAgKiBJZiBvcHRpb25zQXJnLmRpc2FibGVPbk5hdGl2ZVNtb290aFNjcm9sbCBpcyB0cnVlIGFuZCBuYXRpdmUgc21vb3RoIHNjcm9sbGluZyBpcyBkZXRlY3RlZCxcbiAgICogTGVuaXMgd2lsbCBiZSBkZXN0cm95ZWQgaW1tZWRpYXRlbHkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZW5hYmxlTGVuaXNTY3JvbGwob3B0aW9uc0FyZz86IHsgZGlzYWJsZU9uTmF0aXZlU21vb3RoU2Nyb2xsPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgbGVuaXMgPSBuZXcgcGx1Z2lucy5MZW5pcyh7XG4gICAgICBhdXRvUmFmOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbnNBcmc/LmRpc2FibGVPbk5hdGl2ZVNtb290aFNjcm9sbCkge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuZGV0ZWN0TmF0aXZlU21vb3RoU2Nyb2xsKCkpIHtcbiAgICAgICAgbGVuaXMuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWN0aXZhdGUgTGVuaXMgc2Nyb2xsaW5nLlxuICAgIHRoaXMubGVuaXNJbnN0YW5jZSA9IGxlbmlzO1xuICAgIC8vIFN3aXRjaCBmcm9tIG5hdGl2ZSBzY3JvbGwgbGlzdGVuZXIgdG8gTGVuaXMgc2Nyb2xsIGxpc3RlbmVyLlxuICAgIHRoaXMuZGV0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKTtcbiAgICB0aGlzLmF0dGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKTtcblxuICAgIC8vIE1vbmtleS1wYXRjaCB0aGUgZGVzdHJveSBtZXRob2Qgc28gdGhhdCB3aGVuIExlbmlzIGlzIGRlc3Ryb3llZCxcbiAgICAvLyB0aGUgbmF0aXZlIHNjcm9sbCBsaXN0ZW5lciBpcyByZWF0dGFjaGVkLlxuICAgIGNvbnN0IG9yaWdpbmFsRGVzdHJveSA9IGxlbmlzLmRlc3Ryb3kuYmluZChsZW5pcyk7XG4gICAgbGVuaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIG9yaWdpbmFsRGVzdHJveSgpO1xuICAgICAgdGhpcy5kZXRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCk7XG4gICAgICB0aGlzLmF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCk7XG4gICAgICB0aGlzLmxlbmlzSW5zdGFuY2UgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgb24gc2Nyb2xsLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBleGVjdXRlIG9uIGVhY2ggc2Nyb2xsIGV2ZW50LlxuICAgKi9cbiAgcHVibGljIG9uU2Nyb2xsKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYWxsIHJlZ2lzdGVyZWQgc2Nyb2xsIGNhbGxiYWNrcyBjb25jdXJyZW50bHkuXG4gICAqL1xuICBwcml2YXRlIGV4ZWN1dGVTY3JvbGxDYWxsYmFja3MoKTogdm9pZCB7XG4gICAgLy8gRXhlY3V0ZSBhbGwgY2FsbGJhY2tzIGluIHBhcmFsbGVsLlxuICAgIHRoaXMuc2Nyb2xsQ2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gc2Nyb2xsIGNhbGxiYWNrOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyB0aGUgbmF0aXZlIHNjcm9sbCBldmVudCBsaXN0ZW5lci5cbiAgICovXG4gIHByaXZhdGUgYXR0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlTmF0aXZlU2Nyb2xsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRhY2hlcyB0aGUgbmF0aXZlIHNjcm9sbCBldmVudCBsaXN0ZW5lci5cbiAgICovXG4gIHByaXZhdGUgZGV0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlTmF0aXZlU2Nyb2xsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyB0aGUgTGVuaXMgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhdHRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxlbmlzSW5zdGFuY2UpIHtcbiAgICAgIC8vIEFzc3VtaW5nIHRoYXQgTGVuaXMgZXhwb3NlcyBhbiBgb25gIG1ldGhvZCB0byBsaXN0ZW4gdG8gc2Nyb2xsIGV2ZW50cy5cbiAgICAgIHRoaXMubGVuaXNJbnN0YW5jZS5vbignc2Nyb2xsJywgdGhpcy5oYW5kbGVMZW5pc1Njcm9sbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGFjaGVzIHRoZSBMZW5pcyBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwcml2YXRlIGRldGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGVuaXNJbnN0YW5jZSkge1xuICAgICAgLy8gQXNzdW1pbmcgdGhhdCBMZW5pcyBleHBvc2VzIGFuIGBvZmZgIG1ldGhvZCB0byByZW1vdmUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIHRoaXMubGVuaXNJbnN0YW5jZS5vZmYoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlTGVuaXNTY3JvbGwpO1xuICAgIH1cbiAgfVxufSIsICJpbXBvcnQgeyBEb21Ub29scyB9IGZyb20gJy4vZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyc7XG5pbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vZG9tdG9vbHMucGx1Z2lucy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBUaGVtZU1hbmFnZXIge1xuICBwdWJsaWMgZG9tdG9vbHNSZWY6IERvbVRvb2xzO1xuXG4gIHB1YmxpYyBnb0JyaWdodEJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHByZWZlcnJlZENvbG9yU2NoZW1lTWVkaWFNYXRjaCA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KScpO1xuXG4gIHB1YmxpYyB0aGVtZU9ic2VydmFibGUgPSBuZXcgcGx1Z2lucy5zbWFydHJ4LnJ4anMuUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcblxuICBjb25zdHJ1Y3Rvcihkb210b29sc1JlZkFyZzogRG9tVG9vbHMpIHtcbiAgICB0aGlzLmRvbXRvb2xzUmVmID0gZG9tdG9vbHNSZWZBcmc7XG5cbiAgICAvLyBsZXRzIGNhcmVcbiAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IHRoaXMucHJlZmVycmVkQ29sb3JTY2hlbWVNZWRpYU1hdGNoLm1hdGNoZXM7XG4gICAgdGhpcy5wcmVmZXJyZWRDb2xvclNjaGVtZU1lZGlhTWF0Y2guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGV2ZW50QXJnKSA9PiB7XG4gICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IGV2ZW50QXJnLm1hdGNoZXM7XG4gICAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVuYWJsZUF1dG9tYXRpY0dsb2JhbFRoZW1lQ2hhbmdlKCkge1xuICAgIGlmIChkb2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuc3R5bGUpIHtcbiAgICAgIHRoaXMudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChnb0JyaWdodCkgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZCA9IGdvQnJpZ2h0ID8gJyNmZmYnIDogJyMwMDAnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCkge1xuICAgIHRoaXMudGhlbWVPYnNlcnZhYmxlLm5leHQodGhpcy5nb0JyaWdodEJvb2xlYW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCB0aGUgdGhlbWUgb2YgdGhlIHdlYnNpdGUgdG8gYnJpZ2h0XG4gICAqL1xuICBwdWJsaWMgZ29CcmlnaHQoKSB7XG4gICAgdGhpcy5nb0JyaWdodEJvb2xlYW4gPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIHRoZW1lIG9mIHRoZSB3ZWJzaXRlIHRvIGRhcmtcbiAgICovXG4gIHB1YmxpYyBnb0RhcmsoKSB7XG4gICAgdGhpcy5nb0JyaWdodEJvb2xlYW4gPSBmYWxzZTtcbiAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogc2ltcGx5IHRvZ2dsZSBiZXR3ZWVuIGJyaWdodCBhbmQgZGFya1xuICAgKi9cbiAgcHVibGljIHRvZ2dsZURhcmtCcmlnaHQoKSB7XG4gICAgdGhpcy5nb0JyaWdodEJvb2xlYW4gPSAhdGhpcy5nb0JyaWdodEJvb2xlYW47XG4gICAgdGhpcy51cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpO1xuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuL2RvbXRvb2xzLnBsdWdpbnMuanMnO1xuXG5leHBvcnQgZW51bSBLZXkge1xuICBCYWNrc3BhY2UgPSA4LFxuICBUYWIgPSA5LFxuICBFbnRlciA9IDEzLFxuICBTaGlmdCA9IDE2LFxuICBDdHJsID0gMTcsXG4gIEFsdCA9IDE4LFxuICBQYXVzZUJyZWFrID0gMTksXG4gIENhcHNMb2NrID0gMjAsXG4gIEVzY2FwZSA9IDI3LFxuICBTcGFjZSA9IDMyLFxuICBQYWdlVXAgPSAzMyxcbiAgUGFnZURvd24gPSAzNCxcbiAgRW5kID0gMzUsXG4gIEhvbWUgPSAzNixcblxuICBMZWZ0QXJyb3cgPSAzNyxcbiAgVXBBcnJvdyA9IDM4LFxuICBSaWdodEFycm93ID0gMzksXG4gIERvd25BcnJvdyA9IDQwLFxuXG4gIEluc2VydCA9IDQ1LFxuICBEZWxldGUgPSA0NixcblxuICBaZXJvID0gNDgsXG4gIENsb3NlZFBhcmVuID0gWmVybyxcbiAgT25lID0gNDksXG4gIEV4Y2xhbWF0aW9uTWFyayA9IE9uZSxcbiAgVHdvID0gNTAsXG4gIEF0U2lnbiA9IFR3byxcbiAgVGhyZWUgPSA1MSxcbiAgUG91bmRTaWduID0gVGhyZWUsXG4gIEhhc2ggPSBQb3VuZFNpZ24sXG4gIEZvdXIgPSA1MixcbiAgRG9sbGFyU2lnbiA9IEZvdXIsXG4gIEZpdmUgPSA1MyxcbiAgUGVyY2VudFNpZ24gPSBGaXZlLFxuICBTaXggPSA1NCxcbiAgQ2FyZXQgPSBTaXgsXG4gIEhhdCA9IENhcmV0LFxuICBTZXZlbiA9IDU1LFxuICBBbXBlcnNhbmQgPSBTZXZlbixcbiAgRWlnaHQgPSA1NixcbiAgU3RhciA9IEVpZ2h0LFxuICBBc3RlcmlrID0gU3RhcixcbiAgTmluZSA9IDU3LFxuICBPcGVuUGFyZW4gPSBOaW5lLFxuXG4gIEEgPSA2NSxcbiAgQiA9IDY2LFxuICBDID0gNjcsXG4gIEQgPSA2OCxcbiAgRSA9IDY5LFxuICBGID0gNzAsXG4gIEcgPSA3MSxcbiAgSCA9IDcyLFxuICBJID0gNzMsXG4gIEogPSA3NCxcbiAgSyA9IDc1LFxuICBMID0gNzYsXG4gIE0gPSA3NyxcbiAgTiA9IDc4LFxuICBPID0gNzksXG4gIFAgPSA4MCxcbiAgUSA9IDgxLFxuICBSID0gODIsXG4gIFMgPSA4MyxcbiAgVCA9IDg0LFxuICBVID0gODUsXG4gIFYgPSA4NixcbiAgVyA9IDg3LFxuICBYID0gODgsXG4gIFkgPSA4OSxcbiAgWiA9IDkwLFxuXG4gIExlZnRXaW5kb3dLZXkgPSA5MSxcbiAgUmlnaHRXaW5kb3dLZXkgPSA5MixcbiAgU2VsZWN0S2V5ID0gOTMsXG5cbiAgTnVtcGFkMCA9IDk2LFxuICBOdW1wYWQxID0gOTcsXG4gIE51bXBhZDIgPSA5OCxcbiAgTnVtcGFkMyA9IDk5LFxuICBOdW1wYWQ0ID0gMTAwLFxuICBOdW1wYWQ1ID0gMTAxLFxuICBOdW1wYWQ2ID0gMTAyLFxuICBOdW1wYWQ3ID0gMTAzLFxuICBOdW1wYWQ4ID0gMTA0LFxuICBOdW1wYWQ5ID0gMTA1LFxuXG4gIE11bHRpcGx5ID0gMTA2LFxuICBBZGQgPSAxMDcsXG4gIFN1YnRyYWN0ID0gMTA5LFxuICBEZWNpbWFsUG9pbnQgPSAxMTAsXG4gIERpdmlkZSA9IDExMSxcblxuICBGMSA9IDExMixcbiAgRjIgPSAxMTMsXG4gIEYzID0gMTE0LFxuICBGNCA9IDExNSxcbiAgRjUgPSAxMTYsXG4gIEY2ID0gMTE3LFxuICBGNyA9IDExOCxcbiAgRjggPSAxMTksXG4gIEY5ID0gMTIwLFxuICBGMTAgPSAxMjEsXG4gIEYxMSA9IDEyMixcbiAgRjEyID0gMTIzLFxuXG4gIE51bUxvY2sgPSAxNDQsXG4gIFNjcm9sbExvY2sgPSAxNDUsXG5cbiAgU2VtaUNvbG9uID0gMTg2LFxuICBFcXVhbHMgPSAxODcsXG4gIENvbW1hID0gMTg4LFxuICBEYXNoID0gMTg5LFxuICBQZXJpb2QgPSAxOTAsXG4gIFVuZGVyU2NvcmUgPSBEYXNoLFxuICBQbHVzU2lnbiA9IEVxdWFscyxcbiAgRm9yd2FyZFNsYXNoID0gMTkxLFxuICBUaWxkZSA9IDE5MixcbiAgR3JhdmVBY2NlbnQgPSBUaWxkZSxcblxuICBPcGVuQnJhY2tldCA9IDIxOSxcbiAgQ2xvc2VkQnJhY2tldCA9IDIyMSxcbiAgUXVvdGUgPSAyMjIsXG59XG5cbmV4cG9ydCBjbGFzcyBLZXlib2FyZCB7XG4gIHByaXZhdGUgbWFwQ29tYm9zVG9IYW5kbGVycyA9IG5ldyBNYXA8bnVtYmVyW10sIHBsdWdpbnMuc21hcnRyeC5yeGpzLlN1YmplY3Q8S2V5Ym9hcmRFdmVudD4+KCk7XG4gIHByaXZhdGUgcHJlc3NlZEtleXMgPSBuZXcgU2V0PEtleT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRvbU5vZGU6IEVsZW1lbnQgfCBEb2N1bWVudCkge1xuICAgIHRoaXMuc3RhcnRMaXN0ZW5pbmcoKTtcbiAgfVxuXG4gIHB1YmxpYyBrZXlFbnVtID0gS2V5O1xuXG4gIHB1YmxpYyBvbihrZXlzOiBLZXlbXSkge1xuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgcGx1Z2lucy5zbWFydHJ4LnJ4anMuU3ViamVjdDxLZXlib2FyZEV2ZW50PigpO1xuICAgIHRoaXMucmVnaXN0ZXJLZXlzKGtleXMsIHN1YmplY3QpO1xuICAgIHJldHVybiBzdWJqZWN0O1xuICB9XG5cbiAgcHVibGljIHRyaWdnZXJLZXlQcmVzcyhrZXlzQXJnOiBLZXlbXSkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNBcmcpIHtcbiAgICAgIHRoaXMucHJlc3NlZEtleXMuYWRkKGtleSk7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tNYXRjaGluZ0tleWJvYXJkU3ViamVjdHMoKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzQXJnKSB7XG4gICAgICB0aGlzLnByZXNzZWRLZXlzLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGFydExpc3RlbmluZygpIHtcbiAgICB0aGlzLmRvbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5RG93bik7XG4gICAgdGhpcy5kb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5oYW5kbGVLZXlVcCk7XG4gIH1cblxuICBwdWJsaWMgc3RvcExpc3RlbmluZygpIHtcbiAgICB0aGlzLmRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5RG93bik7XG4gICAgdGhpcy5kb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5oYW5kbGVLZXlVcCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7XG4gICAgdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5wcmVzc2VkS2V5cy5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgdGhpcy5wcmVzc2VkS2V5cy5hZGQoZXZlbnQua2V5Q29kZSk7XG4gICAgdGhpcy5jaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cyhldmVudCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBjaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cyhwYXlsb2FkQXJnPykge1xuICAgIHRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5mb3JFYWNoKChzdWJqZWN0QXJnLCBrZXlzQXJnKSA9PiB7XG4gICAgICBpZiAodGhpcy5hcmVBbGxLZXlzUHJlc3NlZChrZXlzQXJnKSkge1xuICAgICAgICBzdWJqZWN0QXJnLm5leHQocGF5bG9hZEFyZyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUtleVVwID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgdGhpcy5wcmVzc2VkS2V5cy5kZWxldGUoZXZlbnQua2V5Q29kZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBhcmVBbGxLZXlzUHJlc3NlZChrZXlzQXJnOiBLZXlbXSkge1xuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuXG4gICAga2V5c0FyZy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICghdGhpcy5wcmVzc2VkS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyS2V5cyhcbiAgICBrZXlzQXJnOiBBcnJheTxLZXk+LFxuICAgIHN1YmplY3RBcmc6IHBsdWdpbnMuc21hcnRyeC5yeGpzLlN1YmplY3Q8S2V5Ym9hcmRFdmVudD5cbiAgKSB7XG4gICAgaWYgKCF0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuaGFzKGtleXNBcmcpKSB7XG4gICAgICB0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuc2V0KGtleXNBcmcsIHN1YmplY3RBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmdldChrZXlzQXJnKTtcbiAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9kb210b29scy5wbHVnaW5zLmpzJztcbmltcG9ydCB7IHR5cGUgVFZpZXdwb3J0IH0gZnJvbSAnLi9kb210b29scy5jc3MuYnJlYWtwb2ludHMuanMnO1xuaW1wb3J0IHsgU2Nyb2xsZXIgfSBmcm9tICcuL2RvbXRvb2xzLmNsYXNzZXMuc2Nyb2xsZXIuanMnO1xuaW1wb3J0IHsgV2ViU2V0dXAgfSBmcm9tICdAcHVzaC5yb2Nrcy93ZWJzZXR1cCc7XG5pbXBvcnQgeyBUaGVtZU1hbmFnZXIgfSBmcm9tICcuL2RvbXRvb2xzLmNsYXNzZXMudGhlbWVtYW5hZ2VyLmpzJztcbmltcG9ydCB7IEtleWJvYXJkIH0gZnJvbSAnLi9kb210b29scy5jbGFzc2VzLmtleWJvYXJkLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJRG9tVG9vbHNTdGF0ZSB7XG4gIHZpcnR1YWxWaWV3cG9ydDogVFZpZXdwb3J0O1xuICBqd3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRG9tVG9vbHNDb250cnVjdG9yT3B0aW9ucyB7XG4gIGlnbm9yZUdsb2JhbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBEb21Ub29scyB7XG4gIC8vID09PT09PVxuICAvLyBTVEFUSUNcbiAgLy8gPT09PT09XG4gIHByaXZhdGUgc3RhdGljIGluaXRpYWxpemF0aW9uUHJvbWlzZTogUHJvbWlzZTxEb21Ub29scz4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogc2V0dXBzIGRvbXRvb2xzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIHNldHVwRG9tVG9vbHMob3B0aW9uc0FyZzogSURvbVRvb2xzQ29udHJ1Y3Rvck9wdGlvbnMgPSB7fSk6IFByb21pc2U8RG9tVG9vbHM+IHtcbiAgICAvLyBJZiBpbml0aWFsaXphdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzIGFuZCB3ZSdyZSBub3QgaWdub3JpbmcgZ2xvYmFsLCB3YWl0IGZvciBpdFxuICAgIGlmICghb3B0aW9uc0FyZy5pZ25vcmVHbG9iYWwgJiYgRG9tVG9vbHMuaW5pdGlhbGl6YXRpb25Qcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgRG9tVG9vbHMuaW5pdGlhbGl6YXRpb25Qcm9taXNlO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBpbml0aWFsaXphdGlvbiBwcm9taXNlIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgaWYgKCFvcHRpb25zQXJnLmlnbm9yZUdsb2JhbCkge1xuICAgICAgRG9tVG9vbHMuaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IGRvbVRvb2xzSW5zdGFuY2U6IERvbVRvb2xzO1xuICAgICAgICBpZiAoIWdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzKSB7XG4gICAgICAgICAgZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHMgPSBuZXcgRG9tVG9vbHMob3B0aW9uc0FyZyk7XG4gICAgICAgICAgZG9tVG9vbHNJbnN0YW5jZSA9IGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzO1xuXG4gICAgICAgICAgLy8gbGV0cyBtYWtlIHN1cmUgdGhlIGRvbSBpcyByZWFkeVxuICAgICAgICAgIGNvbnN0IHJlYWR5U3RhdGVDaGFuZ2VkRnVuYyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnIHx8IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgICAgZG9tVG9vbHNJbnN0YW5jZS5lbGVtZW50cy5oZWFkRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKTtcbiAgICAgICAgICAgICAgZG9tVG9vbHNJbnN0YW5jZS5lbGVtZW50cy5ib2R5RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcbiAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBrZXlib2FyZCBub3cgdGhhdCBkb2N1bWVudC5ib2R5IGV4aXN0c1xuICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmtleWJvYXJkID0gbmV3IEtleWJvYXJkKGRvY3VtZW50LmJvZHkpO1xuICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmRvbVJlYWR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIENoZWNrIGN1cnJlbnQgc3RhdGUgaW1tZWRpYXRlbHkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25cbiAgICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJyB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG4gICAgICAgICAgICByZWFkeVN0YXRlQ2hhbmdlZEZ1bmMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIHJlYWR5U3RhdGVDaGFuZ2VkRnVuYyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2UuZG9tVG9vbHNSZWFkeS5yZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tVG9vbHNJbnN0YW5jZSA9IGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGRvbVRvb2xzSW5zdGFuY2UuZG9tVG9vbHNSZWFkeS5wcm9taXNlO1xuICAgICAgICByZXR1cm4gZG9tVG9vbHNJbnN0YW5jZTtcbiAgICAgIH0pKCk7XG4gICAgICByZXR1cm4gYXdhaXQgRG9tVG9vbHMuaW5pdGlhbGl6YXRpb25Qcm9taXNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZ25vcmVHbG9iYWwgY2FzZSAtIGNyZWF0ZSBpc29sYXRlZCBpbnN0YW5jZVxuICAgICAgY29uc3QgZG9tVG9vbHNJbnN0YW5jZSA9IG5ldyBEb21Ub29scyhvcHRpb25zQXJnKTtcbiAgICAgIHJldHVybiBkb21Ub29sc0luc3RhbmNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBpZiB5b3UgY2FuLCB1c2UgdGhlIHN0YXRpYyBhc3lzbmMgLnNldHVwRG9tVG9vbHMoKSBmdW5jdGlvbiBpbnN0ZWFkIHNpbmNlIGl0IGlzIHNhZmVyIHRvIHVzZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCk6IERvbVRvb2xzIHtcbiAgICBjb25zdCBnbG9iYWxEb21Ub29sczogRG9tVG9vbHMgPSBnbG9iYWxUaGlzLmRlZXNEb21Ub29scztcbiAgICBpZiAoIWdsb2JhbERvbVRvb2xzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSB0cmllZCB0byBhY2Nlc3MgZG9tdG9vbHMgc3luY2hyb25vdXNseSB0b28gZWFybHknKTtcbiAgICB9XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzO1xuICB9XG5cbiAgLy8gPT09PT09PT1cbiAgLy8gSU5TVEFOQ0VcbiAgLy8gPT09PT09PT1cbiAgLy8gZWxlbWVudHNcbiAgcHVibGljIGVsZW1lbnRzOiB7XG4gICAgaGVhZEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIGJvZHlFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgfSA9IHtcbiAgICBoZWFkRWxlbWVudDogbnVsbCxcbiAgICBib2R5RWxlbWVudDogbnVsbCxcbiAgfTtcblxuICBwdWJsaWMgd2Vic2V0dXA6IFdlYlNldHVwID0gbmV3IFdlYlNldHVwKHtcbiAgICBtZXRhT2JqZWN0OiB7XG4gICAgICB0aXRsZTogJ2xvYWRpbmcuLi4nLFxuICAgIH0sXG4gIH0pO1xuXG4gIHB1YmxpYyBzbWFydHN0YXRlID0gbmV3IHBsdWdpbnMuc21hcnRzdGF0ZS5TbWFydHN0YXRlKCk7XG4gIHB1YmxpYyBkb21Ub29sc1N0YXRlUGFydCA9IHRoaXMuc21hcnRzdGF0ZS5nZXRTdGF0ZVBhcnQ8SURvbVRvb2xzU3RhdGU+KCdkb210b29scycsIHtcbiAgICB2aXJ0dWFsVmlld3BvcnQ6ICduYXRpdmUnLFxuICAgIGp3dDogbnVsbCxcbiAgfSk7XG5cbiAgcHVibGljIHJvdXRlciA9IG5ldyBwbHVnaW5zLnNtYXJ0cm91dGVyLlNtYXJ0Um91dGVyKHtcbiAgICBkZWJ1ZzogZmFsc2UsXG4gIH0pO1xuXG4gIHB1YmxpYyBjb252ZW5pZW5jZSA9IHtcbiAgICB0eXBlZHJlcXVlc3Q6IHBsdWdpbnMudHlwZWRyZXF1ZXN0LFxuICAgIHNtYXJ0ZGVsYXk6IHBsdWdpbnMuc21hcnRkZWxheSxcbiAgICBzbWFydGpzb246IHBsdWdpbnMuc21hcnRqc29uLFxuICAgIHNtYXJ0dXJsOiBwbHVnaW5zLnNtYXJ0dXJsLFxuICB9O1xuXG4gIHB1YmxpYyBkZWVzQ29tbXMgPSBuZXcgcGx1Z2lucy5kZWVzQ29tbXMuRGVlc0NvbW1zKCk7XG4gIHB1YmxpYyBzY3JvbGxlciA9IG5ldyBTY3JvbGxlcih0aGlzKTtcbiAgcHVibGljIHRoZW1lTWFuYWdlciA9IG5ldyBUaGVtZU1hbmFnZXIodGhpcyk7XG4gIHB1YmxpYyBrZXlib2FyZDogS2V5Ym9hcmQgPSBudWxsOyAvLyBJbml0aWFsaXplZCBhZnRlciBET00gcmVhZHkgdG8gYXZvaWQgYWNjZXNzaW5nIGRvY3VtZW50LmJvZHkgYmVmb3JlIGl0IGV4aXN0c1xuXG4gIHB1YmxpYyBkb21Ub29sc1JlYWR5ID0gcGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTtcbiAgcHVibGljIGRvbVJlYWR5ID0gcGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTtcbiAgcHVibGljIGdsb2JhbFN0eWxlc1JlYWR5ID0gcGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnOiBJRG9tVG9vbHNDb250cnVjdG9yT3B0aW9ucykge31cblxuICBwcml2YXRlIHJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwID0gbmV3IHBsdWdpbnMubGlrLlN0cmluZ21hcCgpO1xuICBwcml2YXRlIHJ1bk9uY2VSZXN1bHRNYXAgPSBuZXcgcGx1Z2lucy5saWsuRmFzdE1hcCgpO1xuICBwcml2YXRlIHJ1bk9uY2VFcnJvck1hcCA9IG5ldyBwbHVnaW5zLmxpay5GYXN0TWFwKCk7XG5cbiAgLyoqXG4gICAqIHJ1biBhIGZ1bmN0aW9uIG9uY2UgYW5kIGFsd2F5cyBnZXQgdGhlIFByb21pc2Ugb2YgdGhlIGZpcnN0IGV4ZWN1dGlvblxuICAgKiBAcGFyYW0gaWRlbnRpZmllckFyZyB0aGUgaW5kZW50aWZpZXIgYXJnIGlkZW50aWZpZXMgZnVuY3Rpb25zLiBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSBpZGVudGlmaWVyIGFyZSBjb25zaWRlcmVkIGVxdWFsXG4gICAqIEBwYXJhbSBmdW5jQXJnIHRoZSBhY3R1YWwgZnVuYyBhcmcgdG8gcnVuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcnVuT25jZTxUPihpZGVudGlmaWVyQXJnOiBzdHJpbmcsIGZ1bmNBcmc6ICgpID0+IFByb21pc2U8VD4pIHtcbiAgICBjb25zdCBydW5uaW5nSWQgPSBgJHtpZGVudGlmaWVyQXJnfStydW5uaW5nQ2hlY2tgO1xuICAgIGlmICghdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5jaGVja1N0cmluZyhpZGVudGlmaWVyQXJnKSkge1xuICAgICAgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5hZGRTdHJpbmcoaWRlbnRpZmllckFyZyk7XG4gICAgICB0aGlzLnJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwLmFkZFN0cmluZyhydW5uaW5nSWQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZnVuY0FyZygpO1xuICAgICAgICB0aGlzLnJ1bk9uY2VSZXN1bHRNYXAuYWRkVG9NYXAoaWRlbnRpZmllckFyZywgcmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIFN0b3JlIGVycm9yIHNvIHdhaXRpbmcgY2FsbGVycyBjYW4gcmVjZWl2ZSBpdFxuICAgICAgICB0aGlzLnJ1bk9uY2VFcnJvck1hcC5hZGRUb01hcChpZGVudGlmaWVyQXJnLCBlcnJvcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAvLyBBbHdheXMgcmVtb3ZlIHJ1bm5pbmcgZmxhZyB0byBwcmV2ZW50IHBlcm1hbmVudCBzdHVjayBzdGF0ZVxuICAgICAgICB0aGlzLnJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwLnJlbW92ZVN0cmluZyhydW5uaW5nSWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5yZWdpc3RlclVudGlsVHJ1ZShcbiAgICAgIChzdHJpbmdNYXApID0+IHtcbiAgICAgICAgcmV0dXJuICFzdHJpbmdNYXAuaW5jbHVkZXMocnVubmluZ0lkKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBhbmQgcmUtdGhyb3cgaXRcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLnJ1bk9uY2VFcnJvck1hcC5nZXRCeUtleShpZGVudGlmaWVyQXJnKTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucnVuT25jZVJlc3VsdE1hcC5nZXRCeUtleShpZGVudGlmaWVyQXJnKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLy8gc2V0U3R1ZmZcbiAgLyoqXG4gICAqIGFsbG93cyB0byBzZXQgZ2xvYmFsIHN0eWxlc1xuICAgKiBAcGFyYW0gc3R5bGVzVGV4dCB0aGUgY3NzIHRleHQgeW91IHdhbnQgdG8gc2V0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0R2xvYmFsU3R5bGVzKHN0eWxlc1RleHQ6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZG9tUmVhZHkucHJvbWlzZTtcbiAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWxlbWVudC50eXBlID0gJ3RleHQvY3NzJztcbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3R5bGVzVGV4dCkpO1xuICAgIHRoaXMuZWxlbWVudHMuaGVhZEVsZW1lbnQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGxvd3MgdG8gc2V0IGdsb2JhbCBzdHlsZXNcbiAgICogQHBhcmFtIHN0eWxlc1RleHQgdGhlIGNzcyB0ZXh0IHlvdSB3YW50IHRvIHNldFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldEV4dGVybmFsU2NyaXB0KHNjcmlwdExpbmtBcmc6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZG9tUmVhZHkucHJvbWlzZTtcbiAgICBjb25zdCBkb25lID0gcGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTtcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQuc3JjID0gc2NyaXB0TGlua0FyZztcbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvbmUucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmJvZHk7XG4gICAgcGFyZW50Tm9kZS5hcHBlbmQoc2NyaXB0KTtcbiAgICBhd2FpdCBkb25lLnByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogYWxsb3dzIHNldHRpbmcgZXh0ZXJuYWwgY3NzIGZpbGVzXG4gICAqIEBwYXJhbSBjc3NMaW5rQXJnIGEgdXJsIHRvIGFuIGV4dGVybmFsIHN0eWxlc2hlZXRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRFeHRlcm5hbENzcyhjc3NMaW5rQXJnOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjc3NUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgY3NzVGFnLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICBjc3NUYWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcbiAgICBjc3NUYWcuaHJlZiA9IGNzc0xpbmtBcmc7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmQoY3NzVGFnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGxvd3Mgc2V0dGluZyBvZiB3ZWJzaXRlIGluZm9zXG4gICAqIEBwYXJhbSBvcHRpb25zQXJnIHRoZSB3ZWJzaXRlIGluZm9cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRXZWJzaXRlSW5mbyhvcHRpb25zQXJnOiBwbHVnaW5zLndlYnNldHVwLklXZWJTZXR1cENvbnN0cnVjdG9yT3B0aW9ucykge1xuICAgIGF3YWl0IHRoaXMud2Vic2V0dXAuc2V0dXAob3B0aW9uc0FyZyk7XG4gICAgYXdhaXQgdGhpcy53ZWJzZXR1cC5yZWFkeVByb21pc2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBEb21Ub29scyB9IGZyb20gJy4vZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyc7XG5cbmltcG9ydCB7IGNzcywgdW5zYWZlQ1NTIH0gZnJvbSAnbGl0JztcblxuLyoqXG4gKiBjaGFuZ2VzIHNjcm9sbGJhciBzdHlsZXMgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MgT1MgYm9yZGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2Nyb2xsQmFyU3R5bGVzOiBzdHJpbmcgPSAoKCkgPT4ge1xuICBjb25zdCByZXR1cm5TdHlsZXNPbGQgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01hYyBPUyBYJykgPT09IC0xID8gY3NzYGAuY3NzVGV4dCA6IGBgO1xuICBjb25zdCByZXR1cm5TdHlsZXMgPSBjc3NgXG4gICAgLyogd2lkdGggKi9cbiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgIHdpZHRoOiAwcHg7XG4gICAgfVxuICAgIGJvZHkge1xuICAgICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lO1xuICAgIH1cbiAgYC5jc3NUZXh0O1xuICByZXR1cm4gcmV0dXJuU3R5bGVzO1xufSkoKTtcblxuZXhwb3J0IGNvbnN0IGdsb2JhbEJhc2VTdHlsZXM6IHN0cmluZyA9IGNzc2BcbiAgLypcbiAgQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdNYXRlcmlhbCBJY29ucyc7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL21hdGVyaWFsaWNvbnMvdjQyL2ZsVWhScTZ0elpjbFFFSi1WZGctSXVpYURzTmNJaFE4dFEud29mZjIpXG4gICAgICBmb3JtYXQoJ3dvZmYyJyk7XG4gIH0gKi9cblxuICAvKiBnbG9iYWwgYm9keSBzdHlsZXMgKi9cbiAgYm9keSB7XG4gICAgbWFyZ2luOiAwcHg7XG4gICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgc2Fucy1zZXJpZjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG5cbiAgLyogc2Nyb2xsIGJhciBzdHlsZXMgKi9cbiAgJHt1bnNhZmVDU1Moc2Nyb2xsQmFyU3R5bGVzKX1cbmAuY3NzVGV4dDtcbiIsICJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4vZG9tdG9vbHMucGx1Z2lucy5qcyc7XG5pbXBvcnQgeyBEb21Ub29scywgdHlwZSBJRG9tVG9vbHNDb250cnVjdG9yT3B0aW9ucyB9IGZyb20gJy4vZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyc7XG5pbXBvcnQgeyBzY3JvbGxCYXJTdHlsZXMsIGdsb2JhbEJhc2VTdHlsZXMgfSBmcm9tICcuL2RvbXRvb2xzLmNzcy5iYXNlc3R5bGVzLmpzJztcblxuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCwgY3NzLCB1bnNhZmVDU1MgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgY29uc3Qgc3RhdGljU3R5bGVzID0gY3NzYFxuICAqIHtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXMsIGNvbG9yIDAuMXM7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxuXG4gIDpob3N0IHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7XG4gIH1cblxuICAke3Vuc2FmZUNTUyhzY3JvbGxCYXJTdHlsZXMpfVxuYDtcblxuLyoqXG4gKiBzdHlsZXMgdG8gYmUgaW5jbHVkZWQgaW4gZXZlcnkgd2ViY29tcG9uZW50XG4gKi9cbmV4cG9ydCBjb25zdCBzdHlsZXMgPSBodG1sYFxuICA8c3R5bGU+XG4gICAgKiB7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXMsIGNvbG9yIDAuMXM7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIDpob3N0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7XG4gICAgfVxuXG4gICAgJHtzY3JvbGxCYXJTdHlsZXN9XG4gIDwvc3R5bGU+XG5gO1xuXG4vKipcbiAqIGEgYmFzaWMgc2V0dXAgZm9yIGVsZW1lbnRzXG4gKiBtYWtlcyBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gY2hlY2tcbiAqL1xuZXhwb3J0IGNvbnN0IHNldHVwID0gYXN5bmMgKFxuICBlbGVtZW50QXJnPzogTGl0RWxlbWVudCxcbiAgb3B0aW9uc0FyZzogSURvbVRvb2xzQ29udHJ1Y3Rvck9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxEb21Ub29scz4gPT4ge1xuICBjb25zdCBkb21Ub29scyA9IGF3YWl0IERvbVRvb2xzLnNldHVwRG9tVG9vbHMob3B0aW9uc0FyZyk7XG5cbiAgaWYgKGVsZW1lbnRBcmcpIHtcbiAgICAvLyBsZXRzIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBlbGVtZW50XG4gICAgLy8gbm90IHVzZWQgcmlnaHQgbm93XG4gIH1cblxuICBkb21Ub29scy5ydW5PbmNlKCdlbGVtZW50QmFzaWNTZXR1cCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBib2R5U3R5bGVzXG4gICAgZG9tVG9vbHMuc2V0R2xvYmFsU3R5bGVzKGdsb2JhbEJhc2VTdHlsZXMpO1xuICB9KTtcbiAgcmV0dXJuIGRvbVRvb2xzO1xufTtcbiIsICJleHBvcnQgY29uc3QgY3NzR3JpZENvbHVtbnMgPSAoYW1vdW50T2ZDb2x1bW5zQXJnOiBudW1iZXIsIGdhcFNpemVBcmc6IG51bWJlcikgPT4ge1xuICBsZXQgcmV0dXJuU3RyaW5nID0gYGA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYW1vdW50T2ZDb2x1bW5zQXJnOyBpKyspIHtcbiAgICByZXR1cm5TdHJpbmcgKz0gYCBjYWxjKCgxMDAlLyR7YW1vdW50T2ZDb2x1bW5zQXJnfSkgLSAoJHtcbiAgICAgIGdhcFNpemVBcmcgKiAoYW1vdW50T2ZDb2x1bW5zQXJnIC0gMSlcbiAgICB9cHgvJHthbW91bnRPZkNvbHVtbnNBcmd9KSlgO1xuICB9XG4gIHJldHVybiByZXR1cm5TdHJpbmc7XG59O1xuIiwgImltcG9ydCAqIGFzIHNtYXJ0ZGVsYXkgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRkZWxheSc7XG5pbXBvcnQgKiBhcyBzbWFydG1hcmtkb3duIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24nO1xuaW1wb3J0ICogYXMgc21hcnRwcm9taXNlIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSc7XG5pbXBvcnQgU3dlZXRTY3JvbGwgZnJvbSAnc3dlZXQtc2Nyb2xsJztcbmltcG9ydCAqIGFzIHNtYXJ0c3RhdGUgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRzdGF0ZSc7XG5pbXBvcnQgKiBhcyBzbWFydHJvdXRlciBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydHJvdXRlcic7XG5pbXBvcnQgKiBhcyBzbWFydHJ4IGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cngnO1xuaW1wb3J0ICogYXMgc21hcnRzdHJpbmcgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcnO1xuaW1wb3J0ICogYXMgc21hcnR1cmwgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnR1cmwnO1xuaW1wb3J0ICogYXMgdHlwZWRyZXF1ZXN0IGZyb20gJ0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdCc7XG5cbmV4cG9ydCB7IFxuICBzbWFydGRlbGF5LCBcbiAgc21hcnRtYXJrZG93biwgXG4gIHNtYXJ0cHJvbWlzZSwgXG4gIFN3ZWV0U2Nyb2xsLCBcbiAgc21hcnRzdGF0ZSwgXG4gIHNtYXJ0cm91dGVyLFxuICBzbWFydHJ4LCBcbiAgc21hcnRzdHJpbmcsIFxuICBzbWFydHVybCwgXG4gIHR5cGVkcmVxdWVzdCBcbn07XG4iLCAiZXhwb3J0ICogZnJvbSAnLi9kb210b29scy5jb2xvcnMuanMnO1xuXG5pbXBvcnQgKiBhcyBlbGVtZW50QmFzaWMgZnJvbSAnLi9kb210b29scy5lbGVtZW50YmFzaWMuanMnO1xuaW1wb3J0ICogYXMgYnJlYWtwb2ludHMgZnJvbSAnLi9kb210b29scy5jc3MuYnJlYWtwb2ludHMuanMnO1xuaW1wb3J0ICogYXMgY3NzIGZyb20gJy4vZG9tdG9vbHMuY3NzLmpzJztcblxuZXhwb3J0IHsgY3NzLCBicmVha3BvaW50cywgZWxlbWVudEJhc2ljIH07XG5leHBvcnQgeyBEb21Ub29scywgdHlwZSBJRG9tVG9vbHNDb250cnVjdG9yT3B0aW9ucyB9IGZyb20gJy4vZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyc7XG5leHBvcnQgeyBUeXBlZFJlcXVlc3QgfSBmcm9tICdAYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QnO1xuZXhwb3J0IHsgdHlwZSBJV2ViU2V0dXBDb25zdHJ1Y3Rvck9wdGlvbnMgfSBmcm9tICdAcHVzaC5yb2Nrcy93ZWJzZXR1cCc7XG5cbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9kb210b29scy5wbHVnaW5leHBvcnRzLmpzJztcbmV4cG9ydCB7IHBsdWdpbnMgfTtcblxuLy8gdHlwZSBleHBvcnRzXG5pbXBvcnQgdHlwZSB7IHJ4anMgfSBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydHJ4JztcblxuZXhwb3J0IHR5cGUge1xuICByeGpzLFxufVxuIiwgIi8vIHB1c2hyb2NrcyBzY29wZVxuaW1wb3J0ICogYXMgaXNvdW5pcXVlIGZyb20gJ0BwdXNoLnJvY2tzL2lzb3VuaXF1ZSc7XG5pbXBvcnQgKiBhcyBzbWFydHJ4IGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cngnO1xuXG5leHBvcnQgeyBpc291bmlxdWUsIHNtYXJ0cnggfTtcblxuLy8gdGhpcmQgcGFydHkgc2NvcGVcbmltcG9ydCB7IGNzcywgdW5zYWZlQ1NTLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMvcHJvcGVydHkuanMnO1xuY29uc3QgbGl0ID0ge1xuICBjc3MsXG4gIHVuc2FmZUNTUyxcbiAgTGl0RWxlbWVudCxcbiAgcHJvcGVydHksXG59O1xuXG5pbXBvcnQgKiBhcyBkb210b29scyBmcm9tICdAZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzJztcblxuZXhwb3J0IHsgbGl0LCBkb210b29scyB9O1xuIiwgImltcG9ydCB7IENTU1Jlc3VsdCwgdW5zYWZlQ1NTIH0gZnJvbSAnbGl0JztcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi9wbHVnaW5zLmpzJztcbmltcG9ydCAqIGFzIGRvbXRvb2xzIGZyb20gJ0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElCZFZhclRyaXBsZXQge1xuICBjc3NWYXJOYW1lOiBzdHJpbmc7XG4gIGRhcmtWYWx1ZTogc3RyaW5nO1xuICBicmlnaHRWYWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ3NzTWFuYWdlciB7XG4gIC8vIFNUQVRJQ1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQ3NzTWFuYWdlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgQ3NzTWFuYWdlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRTaW5nbGV0b24oKTogQ3NzTWFuYWdlciB7XG4gICAgaWYgKCFDc3NNYW5hZ2VyLmluc3RhbmNlKSB7XG4gICAgICBDc3NNYW5hZ2VyLmluc3RhbmNlID0gbmV3IENzc01hbmFnZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIENzc01hbmFnZXIuaW5zdGFuY2U7XG4gIH1cblxuICBcbiAgLy8gSU5TVEFOQ0VcbiAgcHVibGljIGRvbXRvb2xzUHJvbWlzZSA9IGRvbXRvb2xzLkRvbVRvb2xzLnNldHVwRG9tVG9vbHMoKTtcbiAgcHVibGljIGdvQnJpZ2h0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBiZFZhclRyaXBsZXRTdG9yZTogSUJkVmFyVHJpcGxldFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kb210b29sc1Byb21pc2UudGhlbihhc3luYyAoZG9tdG9vbHNBcmcpID0+IHtcbiAgICAgIGRvbXRvb2xzQXJnLnRoZW1lTWFuYWdlci50aGVtZU9ic2VydmFibGUuc3Vic2NyaWJlKGFzeW5jIChnb0JyaWdodEFyZykgPT4ge1xuICAgICAgICB0aGlzLmdvQnJpZ2h0ID0gZ29CcmlnaHRBcmc7XG4gICAgICAgIGF3YWl0IGRvbXRvb2xzQXJnLmRvbVJlYWR5LnByb21pc2U7XG4gICAgICAgIGZvciAoY29uc3QgYmRUcmlwbGV0QXJnIG9mIHRoaXMuYmRWYXJUcmlwbGV0U3RvcmUpIHtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgYmRUcmlwbGV0QXJnLmNzc1Zhck5hbWUsXG4gICAgICAgICAgICB0aGlzLmdvQnJpZ2h0ID8gYmRUcmlwbGV0QXJnLmJyaWdodFZhbHVlIDogYmRUcmlwbGV0QXJnLmRhcmtWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBkZWZhdWx0U3R5bGVzKCkge1xuICAgIHJldHVybiBkb210b29scy5lbGVtZW50QmFzaWMuc3RhdGljU3R5bGVzO1xuICB9XG5cbiAgcHVibGljIGNzc0ZvckRlc2t0b3AoY29udGVudEFyZzogQ1NTUmVzdWx0KSB7XG4gICAgcmV0dXJuIHVuc2FmZUNTUyhkb210b29scy5icmVha3BvaW50cy5jc3NGb3JEZXNrdG9wKGNvbnRlbnRBcmcpKTtcbiAgfVxuXG4gIHB1YmxpYyBjc3NGb3JOb3RlYm9vayhjb250ZW50QXJnOiBDU1NSZXN1bHQpIHtcbiAgICByZXR1cm4gdW5zYWZlQ1NTKGRvbXRvb2xzLmJyZWFrcG9pbnRzLmNzc0Zvck5vdGVib29rKGNvbnRlbnRBcmcpKTtcbiAgfVxuXG4gIHB1YmxpYyBjc3NGb3JUYWJsZXQoY29udGVudEFyZzogQ1NTUmVzdWx0KSB7XG4gICAgcmV0dXJuIHVuc2FmZUNTUyhkb210b29scy5icmVha3BvaW50cy5jc3NGb3JUYWJsZXQoY29udGVudEFyZykpO1xuICB9XG5cbiAgcHVibGljIGNzc0ZvclBoYWJsZXQoY29udGVudEFyZzogQ1NTUmVzdWx0KSB7XG4gICAgcmV0dXJuIHVuc2FmZUNTUyhkb210b29scy5icmVha3BvaW50cy5jc3NGb3JQaGFibGV0KGNvbnRlbnRBcmcpKTtcbiAgfVxuXG4gIHB1YmxpYyBjc3NGb3JQaG9uZShjb250ZW50QXJnOiBDU1NSZXN1bHQpIHtcbiAgICByZXR1cm4gdW5zYWZlQ1NTKGRvbXRvb2xzLmJyZWFrcG9pbnRzLmNzc0ZvclBob25lKGNvbnRlbnRBcmcpKTtcbiAgfVxuXG4gIHB1YmxpYyBiZFRoZW1lKGJyaWdodFZhbHVlQXJnOiBzdHJpbmcsIGRhcmtWYWx1ZUFyZzogc3RyaW5nKTogQ1NTUmVzdWx0IHtcbiAgICBsZXQgcmV0dXJuQ3NzVmFyOiBzdHJpbmc7XG5cbiAgICAvLyBsZXRzIGRldGVybWluZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgcXVpY2sgcGFnZSByZW5kZXJpbmcuXG4gICAgbGV0IGRlZmF1bHRWYWx1ZTogc3RyaW5nO1xuICAgIGlmIChkb210b29scy5Eb21Ub29scy5nZXRHbG9iYWxEb21Ub29sc1N5bmMoKSkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gZG9tdG9vbHMuRG9tVG9vbHMuZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCkudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhblxuICAgICAgICA/IGJyaWdodFZhbHVlQXJnXG4gICAgICAgIDogZGFya1ZhbHVlQXJnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBkYXJrVmFsdWVBcmc7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdUcmlwbGV0ID0gdGhpcy5iZFZhclRyaXBsZXRTdG9yZS5maW5kKFxuICAgICAgKHRyaXBsZXRBcmcpID0+XG4gICAgICAgIHRyaXBsZXRBcmcuZGFya1ZhbHVlID09PSBkYXJrVmFsdWVBcmcgJiYgdHJpcGxldEFyZy5icmlnaHRWYWx1ZSA9PT0gYnJpZ2h0VmFsdWVBcmdcbiAgICApO1xuICAgIGlmIChleGlzdGluZ1RyaXBsZXQpIHtcbiAgICAgIHJldHVybkNzc1ZhciA9IGV4aXN0aW5nVHJpcGxldC5jc3NWYXJOYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdUcmlwbGV0OiBJQmRWYXJUcmlwbGV0ID0ge1xuICAgICAgICBjc3NWYXJOYW1lOiBgLS0ke3BsdWdpbnMuaXNvdW5pcXVlLnVuaSgpfWAsXG4gICAgICAgIGJyaWdodFZhbHVlOiBicmlnaHRWYWx1ZUFyZyxcbiAgICAgICAgZGFya1ZhbHVlOiBkYXJrVmFsdWVBcmcsXG4gICAgICB9O1xuICAgICAgdGhpcy5iZFZhclRyaXBsZXRTdG9yZS5wdXNoKG5ld1RyaXBsZXQpO1xuXG4gICAgICB0aGlzLmRvbXRvb2xzUHJvbWlzZS50aGVuKGFzeW5jIChkb210b29sc0FyZykgPT4ge1xuICAgICAgICBhd2FpdCBkb210b29sc0FyZy5kb21SZWFkeS5wcm9taXNlO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnNldFByb3BlcnR5KG5ld1RyaXBsZXQuY3NzVmFyTmFtZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuQ3NzVmFyID0gbmV3VHJpcGxldC5jc3NWYXJOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcGx1Z2lucy5saXQudW5zYWZlQ1NTKGB2YXIoJHtyZXR1cm5Dc3NWYXJ9LCAke2RlZmF1bHRWYWx1ZX0pYCk7XG4gIH1cblxuICBwdWJsaWMgY3NzR3JpZENvbHVtbnMgPSAoYW1vdW50T2ZDb2x1bW5zQXJnOiBudW1iZXIsIGdhcFNpemVBcmc6IG51bWJlcik6IENTU1Jlc3VsdCA9PiB7XG4gICAgbGV0IHJldHVyblN0cmluZyA9IGBgO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYW1vdW50T2ZDb2x1bW5zQXJnOyBpKyspIHtcbiAgICAgIHJldHVyblN0cmluZyArPSBgIGNhbGMoKDEwMCUvJHthbW91bnRPZkNvbHVtbnNBcmd9KSAtICgke1xuICAgICAgICBnYXBTaXplQXJnICogKGFtb3VudE9mQ29sdW1uc0FyZyAtIDEpXG4gICAgICB9cHgvJHthbW91bnRPZkNvbHVtbnNBcmd9KSlgO1xuICAgIH1cbiAgICByZXR1cm4gcGx1Z2lucy5saXQudW5zYWZlQ1NTKHJldHVyblN0cmluZyk7XG4gIH07XG59XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZVxuICovXG5cbi8vIEFueSBuZXcgZXhwb3J0cyBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSBleHBvcnQgc3RhdGVtZW50IGluXG4vLyBgcGFja2FnZXMvbGl0L3NyYy9pbmRleC5hbGwudHNgLlxuXG5pbXBvcnQge1xuICBodG1sIGFzIGNvcmVIdG1sLFxuICBzdmcgYXMgY29yZVN2ZyxcbiAgbWF0aG1sIGFzIGNvcmVNYXRobWwsXG4gIFRlbXBsYXRlUmVzdWx0LFxufSBmcm9tICcuL2xpdC1odG1sLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNWYWx1ZSB7XG4gIC8qKiBUaGUgdmFsdWUgdG8gaW50ZXJwb2xhdGUgYXMtaXMgaW50byB0aGUgdGVtcGxhdGUuICovXG4gIF8kbGl0U3RhdGljJDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHZhbHVlIHRoYXQgY2FuJ3QgYmUgZGVjb2RlZCBmcm9tIG9yZGluYXJ5IEpTT04sIG1ha2UgaXQgaGFyZGVyIGZvclxuICAgKiBhbiBhdHRhY2tlci1jb250cm9sbGVkIGRhdGEgdGhhdCBnb2VzIHRocm91Z2ggSlNPTi5wYXJzZSB0byBwcm9kdWNlIGEgdmFsaWRcbiAgICogU3RhdGljVmFsdWUuXG4gICAqL1xuICByOiB0eXBlb2YgYnJhbmQ7XG59XG5cbi8qKlxuICogUHJldmVudHMgSlNPTiBpbmplY3Rpb24gYXR0YWNrcy5cbiAqXG4gKiBUaGUgZ29hbHMgb2YgdGhpcyBicmFuZDpcbiAqICAgMSkgZmFzdCB0byBjaGVja1xuICogICAyKSBjb2RlIGlzIHNtYWxsIG9uIHRoZSB3aXJlXG4gKiAgIDMpIG11bHRpcGxlIHZlcnNpb25zIG9mIExpdCBpbiBhIHNpbmdsZSBwYWdlIHdpbGwgYWxsIHByb2R1Y2UgbXV0dWFsbHlcbiAqICAgICAgaW50ZXJvcGVyYWJsZSBTdGF0aWNWYWx1ZXNcbiAqICAgNCkgbm9ybWFsIEpTT04ucGFyc2UgKHdpdGhvdXQgYW4gdW51c3VhbCByZXZpdmVyKSBjYW4gbm90IHByb2R1Y2UgYVxuICogICAgICBTdGF0aWNWYWx1ZVxuICpcbiAqIFN5bWJvbHMgc2F0aXNmeSAoMSksICgyKSwgYW5kICg0KS4gV2UgdXNlIFN5bWJvbC5mb3IgdG8gc2F0aXNmeSAoMyksIGJ1dFxuICogd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUga2V5LCBzbyB3ZSBicmVhayB0aWVzIHZpYSAoMikgYW5kIHVzZSB0aGUgZW1wdHlcbiAqIHN0cmluZy5cbiAqL1xuY29uc3QgYnJhbmQgPSBTeW1ib2wuZm9yKCcnKTtcblxuLyoqIFNhZmVseSBleHRyYWN0cyB0aGUgc3RyaW5nIHBhcnQgb2YgYSBTdGF0aWNWYWx1ZS4gKi9cbmNvbnN0IHVud3JhcFN0YXRpY1ZhbHVlID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCh2YWx1ZSBhcyBQYXJ0aWFsPFN0YXRpY1ZhbHVlPik/LnIgIT09IGJyYW5kKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gKHZhbHVlIGFzIFBhcnRpYWw8U3RhdGljVmFsdWU+KT8uWydfJGxpdFN0YXRpYyQnXTtcbn07XG5cbi8qKlxuICogV3JhcHMgYSBzdHJpbmcgc28gdGhhdCBpdCBiZWhhdmVzIGxpa2UgcGFydCBvZiB0aGUgc3RhdGljIHRlbXBsYXRlXG4gKiBzdHJpbmdzIGluc3RlYWQgb2YgYSBkeW5hbWljIHZhbHVlLlxuICpcbiAqIFVzZXJzIG11c3QgdGFrZSBjYXJlIHRvIGVuc3VyZSB0aGF0IGFkZGluZyB0aGUgc3RhdGljIHN0cmluZyB0byB0aGUgdGVtcGxhdGVcbiAqIHJlc3VsdHMgaW4gd2VsbC1mb3JtZWQgSFRNTCwgb3IgZWxzZSB0ZW1wbGF0ZXMgbWF5IGJyZWFrIHVuZXhwZWN0ZWRseS5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB1bnNhZmUgdG8gdXNlIG9uIHVudHJ1c3RlZCBjb250ZW50LCBhcyBpdCB3aWxsIGJlXG4gKiBkaXJlY3RseSBwYXJzZWQgaW50byBIVE1MLiBEbyBub3QgcGFzcyB1c2VyIGlucHV0IHRvIHRoaXMgZnVuY3Rpb25cbiAqIHdpdGhvdXQgc2FuaXRpemluZyBpdC5cbiAqXG4gKiBTdGF0aWMgdmFsdWVzIGNhbiBiZSBjaGFuZ2VkLCBidXQgdGhleSB3aWxsIGNhdXNlIGEgY29tcGxldGUgcmUtcmVuZGVyXG4gKiBzaW5jZSB0aGV5IGVmZmVjdGl2ZWx5IGNyZWF0ZSBhIG5ldyB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuc2FmZVN0YXRpYyA9ICh2YWx1ZTogc3RyaW5nKTogU3RhdGljVmFsdWUgPT4gKHtcbiAgWydfJGxpdFN0YXRpYyQnXTogdmFsdWUsXG4gIHI6IGJyYW5kLFxufSk7XG5cbmNvbnN0IHRleHRGcm9tU3RhdGljID0gKHZhbHVlOiBTdGF0aWNWYWx1ZSkgPT4ge1xuICBpZiAodmFsdWVbJ18kbGl0U3RhdGljJCddICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdmFsdWVbJ18kbGl0U3RhdGljJCddO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBWYWx1ZSBwYXNzZWQgdG8gJ2xpdGVyYWwnIGZ1bmN0aW9uIG11c3QgYmUgYSAnbGl0ZXJhbCcgcmVzdWx0OiAke3ZhbHVlfS4gVXNlICd1bnNhZmVTdGF0aWMnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXRcbiAgICAgICAgICAgIHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS5gXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUYWdzIGEgc3RyaW5nIGxpdGVyYWwgc28gdGhhdCBpdCBiZWhhdmVzIGxpa2UgcGFydCBvZiB0aGUgc3RhdGljIHRlbXBsYXRlXG4gKiBzdHJpbmdzIGluc3RlYWQgb2YgYSBkeW5hbWljIHZhbHVlLlxuICpcbiAqIFRoZSBvbmx5IHZhbHVlcyB0aGF0IG1heSBiZSB1c2VkIGluIHRlbXBsYXRlIGV4cHJlc3Npb25zIGFyZSBvdGhlciB0YWdnZWRcbiAqIGBsaXRlcmFsYCByZXN1bHRzIG9yIGB1bnNhZmVTdGF0aWNgIHZhbHVlcyAobm90ZSB0aGF0IHVudHJ1c3RlZCBjb250ZW50XG4gKiBzaG91bGQgbmV2ZXIgYmUgcGFzc2VkIHRvIGB1bnNhZmVTdGF0aWNgKS5cbiAqXG4gKiBVc2VycyBtdXN0IHRha2UgY2FyZSB0byBlbnN1cmUgdGhhdCBhZGRpbmcgdGhlIHN0YXRpYyBzdHJpbmcgdG8gdGhlIHRlbXBsYXRlXG4gKiByZXN1bHRzIGluIHdlbGwtZm9ybWVkIEhUTUwsIG9yIGVsc2UgdGVtcGxhdGVzIG1heSBicmVhayB1bmV4cGVjdGVkbHkuXG4gKlxuICogU3RhdGljIHZhbHVlcyBjYW4gYmUgY2hhbmdlZCwgYnV0IHRoZXkgd2lsbCBjYXVzZSBhIGNvbXBsZXRlIHJlLXJlbmRlciBzaW5jZVxuICogdGhleSBlZmZlY3RpdmVseSBjcmVhdGUgYSBuZXcgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBsaXRlcmFsID0gKFxuICBzdHJpbmdzOiBUZW1wbGF0ZVN0cmluZ3NBcnJheSxcbiAgLi4udmFsdWVzOiB1bmtub3duW11cbik6IFN0YXRpY1ZhbHVlID0+ICh7XG4gIFsnXyRsaXRTdGF0aWMkJ106IHZhbHVlcy5yZWR1Y2UoXG4gICAgKGFjYywgdiwgaWR4KSA9PiBhY2MgKyB0ZXh0RnJvbVN0YXRpYyh2IGFzIFN0YXRpY1ZhbHVlKSArIHN0cmluZ3NbaWR4ICsgMV0sXG4gICAgc3RyaW5nc1swXVxuICApIGFzIHN0cmluZyxcbiAgcjogYnJhbmQsXG59KTtcblxuY29uc3Qgc3RyaW5nc0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFRlbXBsYXRlU3RyaW5nc0FycmF5PigpO1xuXG4vKipcbiAqIFdyYXBzIGEgbGl0LWh0bWwgdGVtcGxhdGUgdGFnIChgaHRtbGAgb3IgYHN2Z2ApIHRvIGFkZCBzdGF0aWMgdmFsdWUgc3VwcG9ydC5cbiAqL1xuZXhwb3J0IGNvbnN0IHdpdGhTdGF0aWMgPVxuICAoY29yZVRhZzogdHlwZW9mIGNvcmVIdG1sIHwgdHlwZW9mIGNvcmVTdmcgfCB0eXBlb2YgY29yZU1hdGhtbCkgPT5cbiAgKHN0cmluZ3M6IFRlbXBsYXRlU3RyaW5nc0FycmF5LCAuLi52YWx1ZXM6IHVua25vd25bXSk6IFRlbXBsYXRlUmVzdWx0ID0+IHtcbiAgICBjb25zdCBsID0gdmFsdWVzLmxlbmd0aDtcbiAgICBsZXQgc3RhdGljVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZHluYW1pY1ZhbHVlOiB1bmtub3duO1xuICAgIGNvbnN0IHN0YXRpY1N0cmluZ3M6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBjb25zdCBkeW5hbWljVmFsdWVzOiBBcnJheTx1bmtub3duPiA9IFtdO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgaGFzU3RhdGljcyA9IGZhbHNlO1xuICAgIGxldCBzOiBzdHJpbmc7XG5cbiAgICB3aGlsZSAoaSA8IGwpIHtcbiAgICAgIHMgPSBzdHJpbmdzW2ldO1xuICAgICAgLy8gQ29sbGVjdCBhbnkgdW5zYWZlU3RhdGljIHZhbHVlcywgYW5kIHRoZWlyIGZvbGxvd2luZyB0ZW1wbGF0ZSBzdHJpbmdzXG4gICAgICAvLyBzbyB0aGF0IHdlIHRyZWF0IGEgcnVuIG9mIHRlbXBsYXRlIHN0cmluZ3MgYW5kIHVuc2FmZSBzdGF0aWMgdmFsdWVzIGFzXG4gICAgICAvLyBhIHNpbmdsZSB0ZW1wbGF0ZSBzdHJpbmcuXG4gICAgICB3aGlsZSAoXG4gICAgICAgIGkgPCBsICYmXG4gICAgICAgICgoZHluYW1pY1ZhbHVlID0gdmFsdWVzW2ldKSxcbiAgICAgICAgKHN0YXRpY1ZhbHVlID0gdW53cmFwU3RhdGljVmFsdWUoZHluYW1pY1ZhbHVlKSkpICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICBzICs9IHN0YXRpY1ZhbHVlICsgc3RyaW5nc1srK2ldO1xuICAgICAgICBoYXNTdGF0aWNzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSBsYXN0IHZhbHVlIGlzIHN0YXRpYywgd2UgZG9uJ3QgbmVlZCB0byBwdXNoIGl0LlxuICAgICAgaWYgKGkgIT09IGwpIHtcbiAgICAgICAgZHluYW1pY1ZhbHVlcy5wdXNoKGR5bmFtaWNWYWx1ZSk7XG4gICAgICB9XG4gICAgICBzdGF0aWNTdHJpbmdzLnB1c2gocyk7XG4gICAgICBpKys7XG4gICAgfVxuICAgIC8vIElmIHRoZSBsYXN0IHZhbHVlIGlzbid0IHN0YXRpYyAod2hpY2ggd291bGQgaGF2ZSBjb25zdW1lZCB0aGUgbGFzdFxuICAgIC8vIHN0cmluZyksIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGxhc3Qgc3RyaW5nLlxuICAgIGlmIChpID09PSBsKSB7XG4gICAgICBzdGF0aWNTdHJpbmdzLnB1c2goc3RyaW5nc1tsXSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1N0YXRpY3MpIHtcbiAgICAgIGNvbnN0IGtleSA9IHN0YXRpY1N0cmluZ3Muam9pbignJCRsaXQkJCcpO1xuICAgICAgc3RyaW5ncyA9IHN0cmluZ3NDYWNoZS5nZXQoa2V5KSE7XG4gICAgICBpZiAoc3RyaW5ncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEJld2FyZTogaW4gZ2VuZXJhbCB0aGlzIHBhdHRlcm4gaXMgdW5zYWZlLCBhbmQgZG9pbmcgc28gbWF5IGJ5cGFzc1xuICAgICAgICAvLyBsaXQncyBzZWN1cml0eSBjaGVja3MgYW5kIGFsbG93IGFuIGF0dGFja2VyIHRvIGV4ZWN1dGUgYXJiaXRyYXJ5XG4gICAgICAgIC8vIGNvZGUgYW5kIGluamVjdCBhcmJpdHJhcnkgY29udGVudC5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgKHN0YXRpY1N0cmluZ3MgYXMgYW55KS5yYXcgPSBzdGF0aWNTdHJpbmdzO1xuICAgICAgICBzdHJpbmdzQ2FjaGUuc2V0KFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICAoc3RyaW5ncyA9IHN0YXRpY1N0cmluZ3MgYXMgdW5rbm93biBhcyBUZW1wbGF0ZVN0cmluZ3NBcnJheSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlcyA9IGR5bmFtaWNWYWx1ZXM7XG4gICAgfVxuICAgIHJldHVybiBjb3JlVGFnKHN0cmluZ3MsIC4uLnZhbHVlcyk7XG4gIH07XG5cbi8qKlxuICogSW50ZXJwcmV0cyBhIHRlbXBsYXRlIGxpdGVyYWwgYXMgYW4gSFRNTCB0ZW1wbGF0ZSB0aGF0IGNhbiBlZmZpY2llbnRseVxuICogcmVuZGVyIHRvIGFuZCB1cGRhdGUgYSBjb250YWluZXIuXG4gKlxuICogSW5jbHVkZXMgc3RhdGljIHZhbHVlIHN1cHBvcnQgZnJvbSBgbGl0LWh0bWwvc3RhdGljLmpzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWwgPSB3aXRoU3RhdGljKGNvcmVIdG1sKTtcblxuLyoqXG4gKiBJbnRlcnByZXRzIGEgdGVtcGxhdGUgbGl0ZXJhbCBhcyBhbiBTVkcgdGVtcGxhdGUgdGhhdCBjYW4gZWZmaWNpZW50bHlcbiAqIHJlbmRlciB0byBhbmQgdXBkYXRlIGEgY29udGFpbmVyLlxuICpcbiAqIEluY2x1ZGVzIHN0YXRpYyB2YWx1ZSBzdXBwb3J0IGZyb20gYGxpdC1odG1sL3N0YXRpYy5qc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBzdmcgPSB3aXRoU3RhdGljKGNvcmVTdmcpO1xuXG4vKipcbiAqIEludGVycHJldHMgYSB0ZW1wbGF0ZSBsaXRlcmFsIGFzIE1hdGhNTCBmcmFnbWVudCB0aGF0IGNhbiBlZmZpY2llbnRseSByZW5kZXJcbiAqIHRvIGFuZCB1cGRhdGUgYSBjb250YWluZXIuXG4gKlxuICogSW5jbHVkZXMgc3RhdGljIHZhbHVlIHN1cHBvcnQgZnJvbSBgbGl0LWh0bWwvc3RhdGljLmpzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGhtbCA9IHdpdGhTdGF0aWMoY29yZU1hdGhtbCk7XG4iLCAiZXhwb3J0KmZyb21cImxpdC1odG1sL3N0YXRpYy5qc1wiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhdGljLWh0bWwuanMubWFwXG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQ1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZVxuICovXG5cbmltcG9ydCB7RGlzY29ubmVjdGFibGUsIFBhcnR9IGZyb20gJy4vbGl0LWh0bWwuanMnO1xuXG5leHBvcnQge1xuICBBdHRyaWJ1dGVQYXJ0LFxuICBCb29sZWFuQXR0cmlidXRlUGFydCxcbiAgQ2hpbGRQYXJ0LFxuICBFbGVtZW50UGFydCxcbiAgRXZlbnRQYXJ0LFxuICBQYXJ0LFxuICBQcm9wZXJ0eVBhcnQsXG59IGZyb20gJy4vbGl0LWh0bWwuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdGl2ZUNsYXNzIHtcbiAgbmV3IChwYXJ0OiBQYXJ0SW5mbyk6IERpcmVjdGl2ZTtcbn1cblxuLyoqXG4gKiBUaGlzIHV0aWxpdHkgdHlwZSBleHRyYWN0cyB0aGUgc2lnbmF0dXJlIG9mIGEgZGlyZWN0aXZlIGNsYXNzJ3MgcmVuZGVyKClcbiAqIG1ldGhvZCBzbyB3ZSBjYW4gdXNlIGl0IGZvciB0aGUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIGRpcmVjdGl2ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgRGlyZWN0aXZlUGFyYW1ldGVyczxDIGV4dGVuZHMgRGlyZWN0aXZlPiA9IFBhcmFtZXRlcnM8Q1sncmVuZGVyJ10+O1xuXG4vKipcbiAqIEEgZ2VuZXJhdGVkIGRpcmVjdGl2ZSBmdW5jdGlvbiBkb2Vzbid0IGV2YWx1YXRlIHRoZSBkaXJlY3RpdmUsIGJ1dCBqdXN0XG4gKiByZXR1cm5zIGEgRGlyZWN0aXZlUmVzdWx0IG9iamVjdCB0aGF0IGNhcHR1cmVzIHRoZSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aXZlUmVzdWx0PEMgZXh0ZW5kcyBEaXJlY3RpdmVDbGFzcyA9IERpcmVjdGl2ZUNsYXNzPiB7XG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IG5lZWRzIHRvIHJlbWFpbiB1bm1pbmlmaWVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIFsnXyRsaXREaXJlY3RpdmUkJ106IEM7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgdmFsdWVzOiBEaXJlY3RpdmVQYXJhbWV0ZXJzPEluc3RhbmNlVHlwZTxDPj47XG59XG5cbmV4cG9ydCBjb25zdCBQYXJ0VHlwZSA9IHtcbiAgQVRUUklCVVRFOiAxLFxuICBDSElMRDogMixcbiAgUFJPUEVSVFk6IDMsXG4gIEJPT0xFQU5fQVRUUklCVVRFOiA0LFxuICBFVkVOVDogNSxcbiAgRUxFTUVOVDogNixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFBhcnRUeXBlID0gKHR5cGVvZiBQYXJ0VHlwZSlba2V5b2YgdHlwZW9mIFBhcnRUeXBlXTtcblxuZXhwb3J0IGludGVyZmFjZSBDaGlsZFBhcnRJbmZvIHtcbiAgcmVhZG9ubHkgdHlwZTogdHlwZW9mIFBhcnRUeXBlLkNISUxEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZVBhcnRJbmZvIHtcbiAgcmVhZG9ubHkgdHlwZTpcbiAgICB8IHR5cGVvZiBQYXJ0VHlwZS5BVFRSSUJVVEVcbiAgICB8IHR5cGVvZiBQYXJ0VHlwZS5QUk9QRVJUWVxuICAgIHwgdHlwZW9mIFBhcnRUeXBlLkJPT0xFQU5fQVRUUklCVVRFXG4gICAgfCB0eXBlb2YgUGFydFR5cGUuRVZFTlQ7XG4gIHJlYWRvbmx5IHN0cmluZ3M/OiBSZWFkb25seUFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdGFnTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRQYXJ0SW5mbyB7XG4gIHJlYWRvbmx5IHR5cGU6IHR5cGVvZiBQYXJ0VHlwZS5FTEVNRU5UO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJ0IGEgZGlyZWN0aXZlIGlzIGJvdW5kIHRvLlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBjaGVja2luZyB0aGF0IGEgZGlyZWN0aXZlIGlzIGF0dGFjaGVkIHRvIGEgdmFsaWQgcGFydCxcbiAqIHN1Y2ggYXMgd2l0aCBkaXJlY3RpdmUgdGhhdCBjYW4gb25seSBiZSB1c2VkIG9uIGF0dHJpYnV0ZSBiaW5kaW5ncy5cbiAqL1xuZXhwb3J0IHR5cGUgUGFydEluZm8gPSBDaGlsZFBhcnRJbmZvIHwgQXR0cmlidXRlUGFydEluZm8gfCBFbGVtZW50UGFydEluZm87XG5cbi8qKlxuICogQ3JlYXRlcyBhIHVzZXItZmFjaW5nIGRpcmVjdGl2ZSBmdW5jdGlvbiBmcm9tIGEgRGlyZWN0aXZlIGNsYXNzLiBUaGlzXG4gKiBmdW5jdGlvbiBoYXMgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgZGlyZWN0aXZlJ3MgcmVuZGVyKCkgbWV0aG9kLlxuICovXG5leHBvcnQgY29uc3QgZGlyZWN0aXZlID1cbiAgPEMgZXh0ZW5kcyBEaXJlY3RpdmVDbGFzcz4oYzogQykgPT5cbiAgKC4uLnZhbHVlczogRGlyZWN0aXZlUGFyYW1ldGVyczxJbnN0YW5jZVR5cGU8Qz4+KTogRGlyZWN0aXZlUmVzdWx0PEM+ID0+ICh7XG4gICAgLy8gVGhpcyBwcm9wZXJ0eSBuZWVkcyB0byByZW1h